From f8189c3d761e5eea05b5f35a1463cd5b81a709c6 Mon Sep 17 00:00:00 2001 From: Ash Date: Tue, 28 Mar 2023 22:38:39 +0200 Subject: [PATCH 001/501] test carryover --- .github/integration-tests.yml | 104 +++++++++ app/app.go | 4 +- app/upgrades.go | 108 --------- integration_tests/dungeon_test.go | 364 ++++++++++++++++++++++++++++++ integration_tests/go.mod | 239 ++++++++++++++++++++ 5 files changed, 709 insertions(+), 110 deletions(-) create mode 100644 .github/integration-tests.yml delete mode 100644 app/upgrades.go create mode 100644 integration_tests/dungeon_test.go create mode 100644 integration_tests/go.mod diff --git a/.github/integration-tests.yml b/.github/integration-tests.yml new file mode 100644 index 00000000..fcc0274b --- /dev/null +++ b/.github/integration-tests.yml @@ -0,0 +1,104 @@ +name: Interchain tests + +on: + push: + branches: + - main + tags: + - 'v*.*.*' + + pull_request: + +env: + CARGO_TERM_COLOR: always + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository }} + +jobs: + go-build: + permissions: + contents: read + packages: write + runs-on: ubuntu-latest + steps: + - name: checkout + uses: actions/checkout@v2 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2.4.1 + - name: container-login + uses: docker/login-action@v1 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: labels + id: meta + uses: docker/metadata-action@v3 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}-heighliner + tags: | + type=ref,event=branch + type=ref,event=pr + type=semver,pattern=v{{version}} + - name: Heighliner build and push + id: heighlinerbuild + uses: burnt-labs/heighliner-action@v1.0.0-alpha9 + with: + local: true + tag: ${{ steps.meta.outputs.version }} + chain: xion + - name: Push docker image + run: | + docker tag ${{ steps.heighlinerbuild.outputs.tag }} ghcr.io/burnt-labs/xion/${{ steps.heighlinerbuild.outputs.tag }} + docker push ghcr.io/burnt-labs/xion/${{ steps.heighlinerbuild.outputs.tag }} + + interchain-tests: + environment: CI + runs-on: ubuntu-latest + needs: [ go-build ] + strategy: + fail-fast: false + matrix: + test_type: + - "DungeonTransferBlock" + - "ScheduledCall" + + steps: + - name: Set up Go 1.18 + uses: actions/setup-go@v2 + with: + go-version: ^1.18 + - name: checkout + uses: actions/checkout@v2 + - name: go-cache + uses: actions/cache@v2 + with: + path: | + ~/.cache/go-build + ~/go/pkg/mod + key: ${{ runner.os }}-go-${{ hashFiles('module/go.sum') }} + restore-keys: | + ${{ runner.os }}-go- + - name: container-login + uses: docker/login-action@v1 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: docker xion metadata + id: meta-xion + uses: docker/metadata-action@v3 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}-heighliner + - name: pull xion image + run: docker pull ghcr.io/burnt-labs/xion/xion:${{ steps.meta-xion.outputs.version }} + - name: rename xion image + run: docker tag ghcr.io/burnt-labs/xion/xion:${{ steps.meta-xion.outputs.version }} xion:prebuilt + - name: build go test binary + run: cd ibc_tests && go test -c + - name: Run all up ci test + run: ./ibc_tests/ibc_tests.test -test.failfast -test.v -test.run Test${{ matrix.test_type }} + env: + E2E_SKIP_CLEANUP: true + XION_IMAGE: xion:prebuilt + diff --git a/app/app.go b/app/app.go index c0adfde2..52c86cb6 100644 --- a/app/app.go +++ b/app/app.go @@ -129,7 +129,7 @@ import ( const appName = "XionApp" -// We pull these out so we can set them with LDFLAGS in the Makefile +// We pull these out, so we can set them with LDFLAGS in the Makefile var ( NodeDir = ".xiond" Bech32Prefix = "xion" @@ -754,7 +754,7 @@ func NewWasmApp( // RegisterUpgradeHandlers is used for registering any on-chain upgrades. // Make sure it's called after `app.ModuleManager` and `app.configurator` are set. - app.RegisterUpgradeHandlers() + // app.RegisterUpgradeHandlers() autocliv1.RegisterQueryServer(app.GRPCQueryRouter(), runtimeservices.NewAutoCLIQueryService(app.ModuleManager.Modules)) diff --git a/app/upgrades.go b/app/upgrades.go deleted file mode 100644 index 01aa076a..00000000 --- a/app/upgrades.go +++ /dev/null @@ -1,108 +0,0 @@ -package app - -import ( - "github.com/cosmos/cosmos-sdk/baseapp" - storetypes "github.com/cosmos/cosmos-sdk/store/types" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/module" - authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" - consensustypes "github.com/cosmos/cosmos-sdk/x/consensus/types" - crisistypes "github.com/cosmos/cosmos-sdk/x/crisis/types" - distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" - govv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" - minttypes "github.com/cosmos/cosmos-sdk/x/mint/types" - paramstypes "github.com/cosmos/cosmos-sdk/x/params/types" - slashingtypes "github.com/cosmos/cosmos-sdk/x/slashing/types" - stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" - upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" - icacontrollertypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/controller/types" - icahosttypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/host/types" - ibctransfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" - - wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" -) - -// UpgradeName defines the on-chain upgrade name for the sample SimApp upgrade -// from v046 to v047. -// -// NOTE: This upgrade defines a reference implementation of what an upgrade -// could look like when an application is migrating from Cosmos SDK version -// v0.46.x to v0.47.x. -const UpgradeName = "v046-to-v047" - -func (app WasmApp) RegisterUpgradeHandlers() { - // Set param key table for params module migration - for _, subspace := range app.ParamsKeeper.GetSubspaces() { - subspace := subspace - - var keyTable paramstypes.KeyTable - switch subspace.Name() { - case authtypes.ModuleName: - keyTable = authtypes.ParamKeyTable() //nolint:staticcheck - case banktypes.ModuleName: - keyTable = banktypes.ParamKeyTable() //nolint:staticcheck - case stakingtypes.ModuleName: - keyTable = stakingtypes.ParamKeyTable() - case minttypes.ModuleName: - keyTable = minttypes.ParamKeyTable() //nolint:staticcheck - case distrtypes.ModuleName: - keyTable = distrtypes.ParamKeyTable() //nolint:staticcheck - case slashingtypes.ModuleName: - keyTable = slashingtypes.ParamKeyTable() //nolint:staticcheck - case govtypes.ModuleName: - keyTable = govv1.ParamKeyTable() //nolint:staticcheck - case crisistypes.ModuleName: - keyTable = crisistypes.ParamKeyTable() //nolint:staticcheck - // ibc types - case ibctransfertypes.ModuleName: - keyTable = ibctransfertypes.ParamKeyTable() - case icahosttypes.SubModuleName: - keyTable = icahosttypes.ParamKeyTable() - case icacontrollertypes.SubModuleName: - keyTable = icacontrollertypes.ParamKeyTable() - // wasm - case wasmtypes.ModuleName: - keyTable = wasmtypes.ParamKeyTable() //nolint:staticcheck - default: - continue - } - - if !subspace.HasKeyTable() { - subspace.WithKeyTable(keyTable) - } - } - - baseAppLegacySS := app.ParamsKeeper.Subspace(baseapp.Paramspace).WithKeyTable(paramstypes.ConsensusParamsKeyTable()) - - app.UpgradeKeeper.SetUpgradeHandler( - UpgradeName, - func(ctx sdk.Context, _ upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) { - // Migrate Tendermint consensus parameters from x/params module to a dedicated x/consensus module. - baseapp.MigrateParams(ctx, baseAppLegacySS, &app.ConsensusParamsKeeper) - - // Note: this migration is optional, - // You can include x/gov proposal migration documented in [UPGRADING.md](https://github.com/cosmos/cosmos-sdk/blob/main/UPGRADING.md) - - return app.ModuleManager.RunMigrations(ctx, app.Configurator(), fromVM) - }, - ) - - upgradeInfo, err := app.UpgradeKeeper.ReadUpgradeInfoFromDisk() - if err != nil { - panic(err) - } - - if upgradeInfo.Name == UpgradeName && !app.UpgradeKeeper.IsSkipHeight(upgradeInfo.Height) { - storeUpgrades := storetypes.StoreUpgrades{ - Added: []string{ - consensustypes.ModuleName, - crisistypes.ModuleName, - }, - } - - // configure store loader that checks if version == upgradeHeight and applies store upgrades - app.SetStoreLoader(upgradetypes.UpgradeStoreLoader(upgradeInfo.Height, &storeUpgrades)) - } -} diff --git a/integration_tests/dungeon_test.go b/integration_tests/dungeon_test.go new file mode 100644 index 00000000..ca6d07c1 --- /dev/null +++ b/integration_tests/dungeon_test.go @@ -0,0 +1,364 @@ +package integration_tests + +import ( + "context" + "encoding/json" + "fmt" + "os" + "strings" + "testing" + "time" + + "github.com/cosmos/cosmos-sdk/types" + banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" + paramsutils "github.com/cosmos/cosmos-sdk/x/params/client/utils" + stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" + transfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" + "github.com/icza/dyno" + ibctest "github.com/strangelove-ventures/interchaintest/v7" + "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" + "github.com/strangelove-ventures/interchaintest/v7/ibc" + "github.com/strangelove-ventures/interchaintest/v7/testreporter" + "github.com/strangelove-ventures/interchaintest/v7/testutil" + "github.com/stretchr/testify/require" + "go.uber.org/zap/zaptest" + "google.golang.org/grpc" + "google.golang.org/grpc/credentials/insecure" +) + +const ( + votingPeriod = "10s" + maxDepositPeriod = "10s" +) + +func TestDungeonTransferBlock(t *testing.T) { + if testing.Short() { + t.Skip("skipping in short mode") + } + + t.Parallel() + + ctx := context.Background() + + var numFullNodes = 1 + var numValidators = 3 + + // pulling image from env to foster local dev + imageTag := os.Getenv("XION_IMAGE") + imageTagComponents := strings.Split(imageTag, ":") + + // disabling seeds in osmosis because it causes intermittent test failures + osmoConfigFileOverrides := make(map[string]any) + osmoConfigTomlOverrides := make(testutil.Toml) + + osmoP2POverrides := make(testutil.Toml) + osmoP2POverrides["seeds"] = "" + osmoConfigTomlOverrides["p2p"] = osmoP2POverrides + + osmoConfigFileOverrides["config/config.toml"] = osmoConfigTomlOverrides + + // Chain factory + cf := ibctest.NewBuiltinChainFactory(zaptest.NewLogger(t), []*ibctest.ChainSpec{ + { + Name: "osmosis", + Version: "v14.0.0", + ChainConfig: ibc.ChainConfig{ + Images: []ibc.DockerImage{ + { + Repository: "ghcr.io/strangelove-ventures/heighliner/osmosis", + Version: "v14.0.0", + UidGid: "1025:1025", + }, + }, + Type: "cosmos", + Bin: "osmosisd", + Bech32Prefix: "osmo", + Denom: "uosmo", + GasPrices: "0.0uosmo", + GasAdjustment: 1.3, + TrustingPeriod: "336h", + NoHostMount: false, + ConfigFileOverrides: osmoConfigFileOverrides, + }, + NumValidators: &numValidators, + NumFullNodes: &numFullNodes, + }, + { + Name: imageTagComponents[0], + Version: imageTagComponents[1], + ChainConfig: ibc.ChainConfig{ + Images: []ibc.DockerImage{ + { + Repository: imageTagComponents[0], + Version: imageTagComponents[1], + UidGid: "1025:1025", + }, + }, + GasPrices: "0.0uxion", + GasAdjustment: 1.3, + Type: "cosmos", + ChainID: "xion-1", + Bin: "xiond", + Bech32Prefix: "xion", + Denom: "uxion", + TrustingPeriod: "336h", + ModifyGenesis: modifyGenesisShortProposals(votingPeriod, maxDepositPeriod), + }, + NumValidators: &numValidators, + NumFullNodes: &numFullNodes, + }, + }) + + chains, err := cf.Chains(t.Name()) + require.NoError(t, err) + + osmosis, xion := chains[0].(*cosmos.CosmosChain), chains[1].(*cosmos.CosmosChain) + + // Relayer Factory + client, network := ibctest.DockerSetup(t) + relayer := ibctest.NewBuiltinRelayerFactory(ibc.CosmosRly, zaptest.NewLogger(t)).Build( + t, client, network) + + // Prep Interchain + const ibcPath = "xion-osmo-dungeon-test" + ic := ibctest.NewInterchain(). + AddChain(xion). + AddChain(osmosis). + AddRelayer(relayer, "relayer"). + AddLink(ibctest.InterchainLink{ + Chain1: xion, + Chain2: osmosis, + Relayer: relayer, + Path: ibcPath, + }) + + // Log location + f, err := ibctest.CreateLogFile(fmt.Sprintf("%d.json", time.Now().Unix())) + require.NoError(t, err) + // Reporter/logs + rep := testreporter.NewReporter(f) + eRep := rep.RelayerExecReporter(t) + + // Build Interchain + require.NoError(t, ic.Build(ctx, eRep, ibctest.InterchainBuildOptions{ + TestName: t.Name(), + Client: client, + NetworkID: network, + BlockDatabaseFile: ibctest.DefaultBlockDatabaseFilepath(), + + SkipPathCreation: false}, + ), + ) + + // Create and Fund User Wallets + t.Log("creating and funding user accounts") + fundAmount := int64(10_000_000) + users := ibctest.GetAndFundTestUsers(t, ctx, "default", fundAmount, xion, osmosis) + xionUser := users[0] + osmosisUser := users[1] + t.Logf("created xion user %s", xionUser.FormattedAddress()) + t.Logf("created osmosis user %s", osmosisUser.FormattedAddress()) + + xionUserBalInitial, err := xion.GetBalance(ctx, xionUser.FormattedAddress(), xion.Config().Denom) + require.NoError(t, err) + require.Equal(t, fundAmount, xionUserBalInitial) + + // Get Channel ID + t.Log("getting IBC channel IDs") + xionChannelInfo, err := relayer.GetChannels(ctx, eRep, xion.Config().ChainID) + require.NoError(t, err) + xionChannelID := xionChannelInfo[0].ChannelID + + osmoChannelInfo, err := relayer.GetChannels(ctx, eRep, osmosis.Config().ChainID) + require.NoError(t, err) + osmoChannelID := osmoChannelInfo[0].ChannelID + + // Query staking denom + t.Log("verifying staking denom") + grpcAddress := xion.GetHostGRPCAddress() + conn, err := grpc.Dial(grpcAddress, grpc.WithTransportCredentials(insecure.NewCredentials())) + defer conn.Close() + require.NoError(t, err) + + stakingQueryClient := stakingtypes.NewQueryClient(conn) + paramsResponse, err := stakingQueryClient.Params(ctx, &stakingtypes.QueryParamsRequest{}) + require.NoError(t, err) + require.Equal(t, "uxion", paramsResponse.Params.BondDenom) + + // Disable sends of Xion staking token + t.Log("disabling sendability of xion staking token") + + sendEnableds := []*banktypes.SendEnabled{ + { + Denom: "uxion", + Enabled: false, + }, + } + data, err := json.Marshal(sendEnableds) + require.NoError(t, err) + + prop := paramsutils.ParamChangeProposalJSON{ + Title: "Disable sendability of uxion", + Description: "This proposal prevents uxion from being sent in the bank module", + Changes: []paramsutils.ParamChangeJSON{ + { + Subspace: banktypes.ModuleName, + Key: "SendEnabled", + Value: data, + }, + }, + Deposit: "100uxion", + } + + paramChangeTx, err := xion.ParamChangeProposal(ctx, xionUser.KeyName(), &prop) + require.NoError(t, err) + t.Logf("Param change proposal submitted with ID %s in transaction %s", paramChangeTx.ProposalID, paramChangeTx.TxHash) + + require.Eventuallyf(t, func() bool { + proposalInfo, err := xion.QueryProposal(ctx, paramChangeTx.ProposalID) + if err != nil { + require.NoError(t, err) + } else { + if proposalInfo.Status == cosmos.ProposalStatusVotingPeriod { + return true + } + t.Logf("Waiting for proposal to enter voting status VOTING, current status: %s", proposalInfo.Status) + } + return false + }, time.Second*11, time.Second, "failed to reach status VOTING after 11s") + + err = xion.VoteOnProposalAllValidators(ctx, paramChangeTx.ProposalID, cosmos.ProposalVoteYes) + require.NoError(t, err) + + require.Eventuallyf(t, func() bool { + proposalInfo, err := xion.QueryProposal(ctx, paramChangeTx.ProposalID) + if err != nil { + require.NoError(t, err) + } else { + if proposalInfo.Status == cosmos.ProposalStatusPassed { + return true + } + t.Logf("Waiting for proposal to enter voting status PASSED, current status: %s", proposalInfo.Status) + } + return false + }, time.Second*11, time.Second, "failed to reach status PASSED after 11s") + + // Send Transaction + t.Log("sending tokens from xion to osmosis") + amountToSend := int64(1_000_000) + dstAddress := osmosisUser.FormattedAddress() + transfer := ibc.WalletAmount{ + Address: dstAddress, + Denom: xion.Config().Denom, + Amount: amountToSend, + } + _, err = xion.SendIBCTransfer(ctx, xionChannelID, xionUser.KeyName(), transfer, ibc.TransferOptions{}) + require.Error(t, err) + + // relay packets and acknowledgments + require.NoError(t, relayer.Flush(ctx, eRep, ibcPath, osmoChannelID)) + + // test source wallet has decreased funds + xionUserBalNew, err := xion.GetBalance(ctx, xionUser.FormattedAddress(), xion.Config().Denom) + require.NoError(t, err) + require.Equal(t, xionUserBalInitial, xionUserBalNew) + + // Trace IBC Denom + srcDenomTrace := transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom("transfer", xionChannelID, xion.Config().Denom)) + xionOnOsmoIbcDenom := srcDenomTrace.IBCDenom() + + // Test destination wallet has increased funds + t.Log("verifying receipt of tokens on osmosis") + osmosUserBalNew, err := osmosis.GetBalance(ctx, osmosisUser.FormattedAddress(), xionOnOsmoIbcDenom) + require.NoError(t, err) + require.Equal(t, int64(0), osmosUserBalNew) + + // Create a user without any funds + emptyKeyName := "xion-empty-key" + err = xion.CreateKey(ctx, emptyKeyName) + require.NoError(t, err) + emptyKeyAddressBytes, err := xion.GetAddress(ctx, emptyKeyName) + require.NoError(t, err) + emptyKeyAddress, err := types.Bech32ifyAddressBytes(xion.Config().Bech32Prefix, emptyKeyAddressBytes) + require.NoError(t, err) + + transfer = ibc.WalletAmount{ + Address: emptyKeyAddress, + Denom: osmosis.Config().Denom, + Amount: int64(1_000_000), + } + _, err = osmosis.SendIBCTransfer(ctx, osmoChannelID, osmosisUser.KeyName(), transfer, ibc.TransferOptions{}) + require.NoError(t, err) + + // relay packets and acknowledgments + require.NoError(t, relayer.Flush(ctx, eRep, ibcPath, osmoChannelID)) + + osmoUserBalAfterIbcTransfer, err := osmosis.GetBalance(ctx, osmosisUser.FormattedAddress(), osmosis.Config().Denom) + require.NoError(t, err) + require.Equal(t, int64(9_000_000), osmoUserBalAfterIbcTransfer) + + emptyUserBals, err := xion.AllBalances(ctx, emptyKeyAddress) + require.NoError(t, err) + require.Equal(t, 1, len(emptyUserBals)) + + osmoDenomTrace := transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom("transfer", osmoChannelID, osmosis.Config().Denom)) + osmoOnXionIbcDenom := osmoDenomTrace.IBCDenom() + + coin := emptyUserBals[0] + require.Equal(t, osmoOnXionIbcDenom, coin.Denom) + require.Equal(t, int64(1_000_000), coin.Amount.Int64()) + + require.NoError(t, xion.SendFunds(ctx, emptyKeyName, ibc.WalletAmount{ + Address: xionUser.FormattedAddress(), + Denom: osmoOnXionIbcDenom, + Amount: 1_000_000, + })) + + require.Eventually(t, func() bool { + xionUserOsmoBal, err := xion.GetBalance(ctx, xionUser.FormattedAddress(), osmoOnXionIbcDenom) + return err == nil && int64(1_000_000) == xionUserOsmoBal + }, 5*time.Second, 500*time.Millisecond) + + transfer = ibc.WalletAmount{ + Address: osmosisUser.FormattedAddress(), + Denom: osmoOnXionIbcDenom, + Amount: int64(1_000_000), + } + _, err = xion.SendIBCTransfer(ctx, xionChannelID, xionUser.KeyName(), transfer, ibc.TransferOptions{}) + require.NoError(t, err) + require.NoError(t, relayer.Flush(ctx, eRep, ibcPath, xionChannelID)) + //require.Eventually(t, func() bool { + // err := relayer.FlushAcknowledgements(ctx, eRep, ibcPath, osmoChannelID) + // return err == nil + //}, 5*time.Second, 500*time.Millisecond) + + osmoUserBalAfterIbcReturnTransfer, err := osmosis.GetBalance(ctx, osmosisUser.FormattedAddress(), osmosis.Config().Denom) + require.NoError(t, err) + require.Equal(t, int64(10_000_000), osmoUserBalAfterIbcReturnTransfer) +} + +func modifyGenesisShortProposals(votingPeriod string, maxDepositPeriod string) func(ibc.ChainConfig, []byte) ([]byte, error) { + return func(chainConfig ibc.ChainConfig, genbz []byte) ([]byte, error) { + g := make(map[string]interface{}) + if err := json.Unmarshal(genbz, &g); err != nil { + return nil, fmt.Errorf("failed to unmarshal genesis file: %w", err) + } + if err := dyno.Set(g, votingPeriod, "app_state", "gov", "voting_params", "voting_period"); err != nil { + return nil, fmt.Errorf("failed to set voting period in genesis json: %w", err) + } + if err := dyno.Set(g, maxDepositPeriod, "app_state", "gov", "deposit_params", "max_deposit_period"); err != nil { + return nil, fmt.Errorf("failed to set max deposit period in genesis json: %w", err) + } + if err := dyno.Set(g, chainConfig.Denom, "app_state", "gov", "deposit_params", "min_deposit", 0, "denom"); err != nil { + return nil, fmt.Errorf("failed to set min deposit denom in genesis json: %w", err) + } + if err := dyno.Set(g, "100", "app_state", "gov", "deposit_params", "min_deposit", 0, "amount"); err != nil { + return nil, fmt.Errorf("failed to set min deposit amount in genesis json: %w", err) + } + out, err := json.Marshal(g) + if err != nil { + return nil, fmt.Errorf("failed to marshal genesis bytes to json: %w", err) + } + return out, nil + } +} diff --git a/integration_tests/go.mod b/integration_tests/go.mod new file mode 100644 index 00000000..4712ce43 --- /dev/null +++ b/integration_tests/go.mod @@ -0,0 +1,239 @@ +module integration_tests + +go 1.19 + +require ( + github.com/99designs/keyring v1.2.1 + github.com/BurntSushi/toml v1.2.1 + github.com/ChainSafe/go-schnorrkel/1 v0.0.0-00010101000000-000000000000 + github.com/StirlingMarketingGroup/go-namecase v1.0.0 + github.com/atotto/clipboard v0.1.4 + github.com/avast/retry-go/v4 v4.3.3 + github.com/centrifuge/go-substrate-rpc-client/v4 v4.0.12 + github.com/cometbft/cometbft v0.37.0 + github.com/cosmos/cosmos-sdk v0.47.0 + github.com/cosmos/go-bip39 v1.0.0 + github.com/cosmos/ibc-go/v7 v7.0.0 + github.com/davecgh/go-spew v1.1.1 + github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.0 + github.com/docker/docker v20.10.19+incompatible + github.com/docker/go-connections v0.4.0 + github.com/gdamore/tcell/v2 v2.6.0 + github.com/google/go-cmp v0.5.9 + github.com/hashicorp/go-version v1.6.0 + github.com/icza/dyno v0.0.0-20220812133438-f0b6f8a18845 + github.com/libp2p/go-libp2p-core v0.20.1 + github.com/mr-tron/base58 v1.2.0 + github.com/pelletier/go-toml v1.9.5 + github.com/rivo/tview v0.0.0-20220307222120-9994674d60a8 + github.com/stretchr/testify v1.8.2 + go.uber.org/multierr v1.8.0 + go.uber.org/zap v1.24.0 + golang.org/x/crypto v0.7.0 + golang.org/x/sync v0.1.0 + golang.org/x/tools v0.7.0 + google.golang.org/grpc v1.53.0 + gopkg.in/yaml.v3 v3.0.1 + modernc.org/sqlite v1.21.0 +) + +require ( + cloud.google.com/go v0.110.0 // indirect + cloud.google.com/go/compute v1.18.0 // indirect + cloud.google.com/go/compute/metadata v0.2.3 // indirect + cloud.google.com/go/iam v0.12.0 // indirect + cloud.google.com/go/storage v1.29.0 // indirect + cosmossdk.io/api v0.3.1 // indirect + cosmossdk.io/core v0.5.1 // indirect + cosmossdk.io/depinject v1.0.0-alpha.3 // indirect + cosmossdk.io/errors v1.0.0-beta.7 // indirect + cosmossdk.io/math v1.0.0-rc.0 // indirect + cosmossdk.io/tools/rosetta v0.2.1 // indirect + filippo.io/edwards25519 v1.0.0 // indirect + github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect + github.com/ChainSafe/go-schnorrkel v1.0.0 // indirect + github.com/Microsoft/go-winio v0.6.0 // indirect + github.com/armon/go-metrics v0.4.1 // indirect + github.com/aws/aws-sdk-go v1.44.203 // indirect + github.com/benbjohnson/clock v1.3.0 // indirect + github.com/beorn7/perks v1.0.1 // indirect + github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect + github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 // indirect + github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect + github.com/cenkalti/backoff/v4 v4.1.3 // indirect + github.com/cespare/xxhash v1.1.0 // indirect + github.com/cespare/xxhash/v2 v2.2.0 // indirect + github.com/chzyer/readline v1.5.1 // indirect + github.com/coinbase/rosetta-sdk-go/types v1.0.0 // indirect + github.com/cometbft/cometbft-db v0.7.0 // indirect + github.com/confio/ics23/go v0.9.0 // indirect + github.com/cosmos/btcutil v1.0.5 // indirect + github.com/cosmos/cosmos-proto v1.0.0-beta.2 // indirect + github.com/cosmos/gogogateway v1.2.0 // indirect + github.com/cosmos/gogoproto v1.4.6 // indirect + github.com/cosmos/iavl v0.20.0 // indirect + github.com/cosmos/ics23/go v0.9.1-0.20221207100636-b1abd8678aab // indirect + github.com/cosmos/ledger-cosmos-go v0.12.1 // indirect + github.com/cosmos/rosetta-sdk-go v0.10.0 // indirect + github.com/creachadair/taskgroup v0.4.2 // indirect + github.com/danieljoos/wincred v1.1.2 // indirect + github.com/deckarep/golang-set v1.8.0 // indirect + github.com/decred/base58 v1.0.4 // indirect + github.com/decred/dcrd/crypto/blake256 v1.0.0 // indirect + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 // indirect + github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f // indirect + github.com/dgraph-io/badger/v2 v2.2007.4 // indirect + github.com/dgraph-io/ristretto v0.1.1 // indirect + github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect + github.com/docker/distribution v2.8.1+incompatible // indirect + github.com/docker/go-units v0.5.0 // indirect + github.com/dustin/go-humanize v1.0.1 // indirect + github.com/dvsekhvalnov/jose2go v1.5.0 // indirect + github.com/ethereum/go-ethereum v1.10.17 // indirect + github.com/felixge/httpsnoop v1.0.2 // indirect + github.com/fsnotify/fsnotify v1.6.0 // indirect + github.com/gdamore/encoding v1.0.0 // indirect + github.com/go-kit/kit v0.12.0 // indirect + github.com/go-kit/log v0.2.1 // indirect + github.com/go-logfmt/logfmt v0.6.0 // indirect + github.com/go-stack/stack v1.8.1 // indirect + github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect + github.com/gogo/googleapis v1.4.1 // indirect + github.com/gogo/protobuf v1.3.3 // indirect + github.com/golang/glog v1.1.0 // indirect + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/golang/mock v1.6.0 // indirect + github.com/golang/protobuf v1.5.3 // indirect + github.com/golang/snappy v0.0.4 // indirect + github.com/google/btree v1.1.2 // indirect + github.com/google/orderedcode v0.0.1 // indirect + github.com/google/uuid v1.3.0 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect + github.com/googleapis/gax-go/v2 v2.7.0 // indirect + github.com/gorilla/handlers v1.5.1 // indirect + github.com/gorilla/mux v1.8.0 // indirect + github.com/gorilla/websocket v1.5.0 // indirect + github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 // indirect + github.com/grpc-ecosystem/grpc-gateway v1.16.0 // indirect + github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect + github.com/gtank/merlin v0.1.1 // indirect + github.com/gtank/ristretto255 v0.1.2 // indirect + github.com/hashicorp/go-cleanhttp v0.5.2 // indirect + github.com/hashicorp/go-getter v1.7.0 // indirect + github.com/hashicorp/go-immutable-radix v1.3.1 // indirect + github.com/hashicorp/go-safetemp v1.0.0 // indirect + github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d // indirect + github.com/hashicorp/hcl v1.0.0 // indirect + github.com/hdevalence/ed25519consensus v0.1.0 // indirect + github.com/huandu/skiplist v1.2.0 // indirect + github.com/improbable-eng/grpc-web v0.15.0 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect + github.com/ipfs/go-cid v0.2.0 // indirect + github.com/jmespath/go-jmespath v0.4.0 // indirect + github.com/jmhodges/levigo v1.0.0 // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect + github.com/klauspost/compress v1.16.3 // indirect + github.com/klauspost/cpuid/v2 v2.2.3 // indirect + github.com/lib/pq v1.10.7 // indirect + github.com/libp2p/go-buffer-pool v0.1.0 // indirect + github.com/libp2p/go-libp2p v0.22.0 // indirect + github.com/libp2p/go-openssl v0.1.0 // indirect + github.com/lucasb-eyer/go-colorful v1.2.0 // indirect + github.com/magiconair/properties v1.8.7 // indirect + github.com/manifoldco/promptui v0.9.0 // indirect + github.com/mattn/go-isatty v0.0.17 // indirect + github.com/mattn/go-pointer v0.0.1 // indirect + github.com/mattn/go-runewidth v0.0.14 // indirect + github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect + github.com/mimoo/StrobeGo v0.0.0-20220103164710-9a04d6ca976b // indirect + github.com/minio/highwayhash v1.0.2 // indirect + github.com/minio/sha256-simd v1.0.0 // indirect + github.com/mitchellh/go-homedir v1.1.0 // indirect + github.com/mitchellh/go-testing-interface v1.14.1 // indirect + github.com/mitchellh/mapstructure v1.5.0 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/mtibben/percent v0.2.1 // indirect + github.com/multiformats/go-base32 v0.0.4 // indirect + github.com/multiformats/go-base36 v0.1.0 // indirect + github.com/multiformats/go-multiaddr v0.6.0 // indirect + github.com/multiformats/go-multibase v0.1.1 // indirect + github.com/multiformats/go-multicodec v0.5.0 // indirect + github.com/multiformats/go-multihash v0.2.1 // indirect + github.com/multiformats/go-varint v0.0.6 // indirect + github.com/opencontainers/go-digest v1.0.0 // indirect + github.com/opencontainers/image-spec v1.1.0-rc2 // indirect + github.com/pelletier/go-toml/v2 v2.0.6 // indirect + github.com/petermattis/goid v0.0.0-20221215004737-a150e88a970d // indirect + github.com/pierrec/xxHash v0.1.5 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/prometheus/client_golang v1.14.0 // indirect + github.com/prometheus/client_model v0.3.0 // indirect + github.com/prometheus/common v0.40.0 // indirect + github.com/prometheus/procfs v0.9.0 // indirect + github.com/rakyll/statik v0.1.7 // indirect + github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect + github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect + github.com/rivo/uniseg v0.4.3 // indirect + github.com/rs/cors v1.8.3 // indirect + github.com/sasha-s/go-deadlock v0.3.1 // indirect + github.com/sirupsen/logrus v1.9.0 // indirect + github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 // indirect + github.com/spaolacci/murmur3 v1.1.0 // indirect + github.com/spf13/afero v1.9.3 // indirect + github.com/spf13/cast v1.5.0 // indirect + github.com/spf13/cobra v1.6.1 // indirect + github.com/spf13/jwalterweatherman v1.1.0 // indirect + github.com/spf13/pflag v1.0.5 // indirect + github.com/spf13/viper v1.15.0 // indirect + github.com/strangelove-ventures/interchaintest/v7 v7.0.0-20230326163644-f0ba01f43314 // indirect + github.com/subosito/gotenv v1.4.2 // indirect + github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect + github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c // indirect + github.com/tendermint/go-amino v0.16.0 // indirect + github.com/tidwall/btree v1.6.0 // indirect + github.com/ulikunitz/xz v0.5.11 // indirect + github.com/vedhavyas/go-subkey v1.0.3 // indirect + github.com/zondax/hid v0.9.1 // indirect + github.com/zondax/ledger-go v0.14.1 // indirect + go.etcd.io/bbolt v1.3.7 // indirect + go.opencensus.io v0.24.0 // indirect + go.uber.org/atomic v1.10.0 // indirect + golang.org/x/exp v0.0.0-20230310171629-522b1b587ee0 // indirect + golang.org/x/mod v0.9.0 // indirect + golang.org/x/net v0.8.0 // indirect + golang.org/x/oauth2 v0.5.0 // indirect + golang.org/x/sys v0.6.0 // indirect + golang.org/x/term v0.6.0 // indirect + golang.org/x/text v0.8.0 // indirect + golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect + google.golang.org/api v0.110.0 // indirect + google.golang.org/appengine v1.6.7 // indirect + google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44 // indirect + google.golang.org/protobuf v1.29.1 // indirect + gopkg.in/ini.v1 v1.67.0 // indirect + gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect + lukechampine.com/blake3 v1.1.7 // indirect + lukechampine.com/uint128 v1.2.0 // indirect + modernc.org/cc/v3 v3.40.0 // indirect + modernc.org/ccgo/v3 v3.16.13 // indirect + modernc.org/libc v1.22.3 // indirect + modernc.org/mathutil v1.5.0 // indirect + modernc.org/memory v1.5.0 // indirect + modernc.org/opt v0.1.3 // indirect + modernc.org/strutil v1.1.3 // indirect + modernc.org/token v1.0.1 // indirect + nhooyr.io/websocket v1.8.6 // indirect + pgregory.net/rapid v0.5.5 // indirect + sigs.k8s.io/yaml v1.3.0 // indirect +) + +replace ( + github.com/ChainSafe/go-schnorrkel => github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d + github.com/ChainSafe/go-schnorrkel/1 => github.com/ChainSafe/go-schnorrkel v1.0.0 + github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 + github.com/vedhavyas/go-subkey => github.com/strangelove-ventures/go-subkey v1.0.7 +) From b9da9431f2cb6f23e65acee3219666cb2b10fdb4 Mon Sep 17 00:00:00 2001 From: Ash Date: Tue, 28 Mar 2023 22:57:32 +0200 Subject: [PATCH 002/501] unbreaking --- app/export.go | 2 +- go.mod | 26 +- integration_tests/go.sum | 2105 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 2119 insertions(+), 14 deletions(-) create mode 100644 integration_tests/go.sum diff --git a/app/export.go b/app/export.go index e64d2c99..74c69db6 100644 --- a/app/export.go +++ b/app/export.go @@ -1,6 +1,6 @@ package app -import +import ( "encoding/json" "fmt" "log" diff --git a/go.mod b/go.mod index 3b56ea4a..f636178f 100644 --- a/go.mod +++ b/go.mod @@ -4,39 +4,39 @@ go 1.19 require ( github.com/CosmWasm/wasmvm v1.2.1 - github.com/cosmos/cosmos-proto v1.0.0-beta.2 + github.com/cosmos/cosmos-proto v1.0.0-beta.2 // indirect github.com/cosmos/cosmos-sdk v0.47.0 github.com/cosmos/gogogateway v1.2.0 // indirect github.com/cosmos/gogoproto v1.4.6 - github.com/cosmos/iavl v0.20.0 + github.com/cosmos/iavl v0.20.0 // indirect github.com/cosmos/ibc-go/v7 v7.0.0 github.com/cosmos/ics23/go v0.9.1-0.20221207100636-b1abd8678aab // indirect - github.com/docker/distribution v2.8.1+incompatible + github.com/docker/distribution v2.8.1+incompatible // indirect github.com/dvsekhvalnov/jose2go v1.5.0 // indirect - github.com/golang/protobuf v1.5.3 - github.com/google/gofuzz v1.2.0 + github.com/golang/protobuf v1.5.3 // indirect + github.com/google/gofuzz v1.2.0 // indirect github.com/gorilla/mux v1.8.0 // indirect - github.com/grpc-ecosystem/grpc-gateway v1.16.0 - github.com/pkg/errors v0.9.1 + github.com/grpc-ecosystem/grpc-gateway v1.16.0 // indirect + github.com/pkg/errors v0.9.1 // indirect github.com/prometheus/client_golang v1.14.0 github.com/rakyll/statik v0.1.7 // indirect github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa github.com/spf13/cast v1.5.0 github.com/spf13/cobra v1.6.1 - github.com/spf13/pflag v1.0.5 + github.com/spf13/pflag v1.0.5 // indirect github.com/stretchr/testify v1.8.2 github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d - google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44 - google.golang.org/grpc v1.53.0 - gopkg.in/yaml.v2 v2.4.0 + google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44 // indirect + google.golang.org/grpc v1.53.0 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect ) require ( cosmossdk.io/api v0.3.1 - cosmossdk.io/core v0.5.1 cosmossdk.io/errors v1.0.0-beta.7 cosmossdk.io/math v1.0.0-rc.0 cosmossdk.io/tools/rosetta v0.2.1 + github.com/CosmWasm/wasmd v0.40.0-rc.0 github.com/cometbft/cometbft v0.37.0 github.com/cometbft/cometbft-db v0.7.0 github.com/spf13/viper v1.15.0 @@ -48,12 +48,12 @@ require ( cloud.google.com/go/compute/metadata v0.2.3 // indirect cloud.google.com/go/iam v0.12.0 // indirect cloud.google.com/go/storage v1.29.0 // indirect + cosmossdk.io/core v0.5.1 // indirect cosmossdk.io/depinject v1.0.0-alpha.3 // indirect filippo.io/edwards25519 v1.0.0 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect github.com/99designs/keyring v1.2.1 // indirect github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d // indirect - github.com/CosmWasm/wasmd v0.40.0-rc.0 // indirect github.com/armon/go-metrics v0.4.1 // indirect github.com/aws/aws-sdk-go v1.44.203 // indirect github.com/beorn7/perks v1.0.1 // indirect diff --git a/integration_tests/go.sum b/integration_tests/go.sum new file mode 100644 index 00000000..a7700cce --- /dev/null +++ b/integration_tests/go.sum @@ -0,0 +1,2105 @@ +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.43.0/go.mod h1:BOSR3VbTLkk6FDC/TcffxP4NF/FFBGA5ku+jvKOP7pg= +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.44.3/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.51.0/go.mod h1:hWtGJ6gnXH+KgDv+V0zFGDvpi07n3z8ZNj3T1RW0Gcw= +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.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= +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 v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= +cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= +cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= +cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= +cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= +cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= +cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= +cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= +cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= +cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= +cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= +cloud.google.com/go v0.104.0 h1:gSmWO7DY1vOm0MVU6DNXM11BWHHsTUmsC5cv1fuW5X8= +cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= +cloud.google.com/go v0.110.0 h1:Zc8gqp3+a9/Eyph2KDmcGaPtbKRIoqq4YTlL4NMD0Ys= +cloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY= +cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= +cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= +cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= +cloud.google.com/go/analytics v0.12.0/go.mod h1:gkfj9h6XRf9+TS4bmuhPEShsh3hH8PAZzm/41OOhQd4= +cloud.google.com/go/area120 v0.5.0/go.mod h1:DE/n4mp+iqVyvxHN41Vf1CR602GiHQjFPusMFW6bGR4= +cloud.google.com/go/area120 v0.6.0/go.mod h1:39yFJqWVgm0UZqWTOdqkLhjoC7uFfgXRC8g/ZegeAh0= +cloud.google.com/go/artifactregistry v1.6.0/go.mod h1:IYt0oBPSAGYj/kprzsBjZ/4LnG/zOcHyFHjWPCi6SAQ= +cloud.google.com/go/artifactregistry v1.7.0/go.mod h1:mqTOFOnGZx8EtSqK/ZWcsm/4U8B77rbcLP6ruDU2Ixk= +cloud.google.com/go/asset v1.5.0/go.mod h1:5mfs8UvcM5wHhqtSv8J1CtxxaQq3AdBxxQi2jGW/K4o= +cloud.google.com/go/asset v1.7.0/go.mod h1:YbENsRK4+xTiL+Ofoj5Ckf+O17kJtgp3Y3nn4uzZz5s= +cloud.google.com/go/asset v1.8.0/go.mod h1:mUNGKhiqIdbr8X7KNayoYvyc4HbbFO9URsjbytpUaW0= +cloud.google.com/go/assuredworkloads v1.5.0/go.mod h1:n8HOZ6pff6re5KYfBXcFvSViQjDwxFkAkmUFffJRbbY= +cloud.google.com/go/assuredworkloads v1.6.0/go.mod h1:yo2YOk37Yc89Rsd5QMVECvjaMKymF9OP+QXWlKXUkXw= +cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVoYoxeLBoj4XkKYscNI= +cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= +cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8= +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/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA= +cloud.google.com/go/bigtable v1.2.0/go.mod h1:JcVAOl45lrTmQfLj7T6TxyMzIN/3FGGcFm+2xVAli2o= +cloud.google.com/go/billing v1.4.0/go.mod h1:g9IdKBEFlItS8bTtlrZdVLWSSdSyFUZKXNS02zKMOZY= +cloud.google.com/go/billing v1.5.0/go.mod h1:mztb1tBc3QekhjSgmpf/CV4LzWXLzCArwpLmP2Gm88s= +cloud.google.com/go/binaryauthorization v1.1.0/go.mod h1:xwnoWu3Y84jbuHa0zd526MJYmtnVXn0syOjaJgy4+dM= +cloud.google.com/go/binaryauthorization v1.2.0/go.mod h1:86WKkJHtRcv5ViNABtYMhhNWRrD1Vpi//uKEy7aYEfI= +cloud.google.com/go/cloudtasks v1.5.0/go.mod h1:fD92REy1x5woxkKEkLdvavGnPJGEn8Uic9nWuLzqCpY= +cloud.google.com/go/cloudtasks v1.6.0/go.mod h1:C6Io+sxuke9/KNRkbQpihnW93SWDU3uXt92nu85HkYI= +cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= +cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= +cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= +cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s= +cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= +cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= +cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= +cloud.google.com/go/compute v1.12.1 h1:gKVJMEyqV5c/UnpzjjQbo3Rjvvqpr9B1DFSbJC4OXr0= +cloud.google.com/go/compute v1.12.1/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= +cloud.google.com/go/compute v1.18.0 h1:FEigFqoDbys2cvFkZ9Fjq4gnHBP55anJ0yQyau2f9oY= +cloud.google.com/go/compute v1.18.0/go.mod h1:1X7yHxec2Ga+Ss6jPyjxRxpu2uu7PLgsOVXvgU0yacs= +cloud.google.com/go/compute/metadata v0.2.1 h1:efOwf5ymceDhK6PKMnnrTHP4pppY5L22mle96M1yP48= +cloud.google.com/go/compute/metadata v0.2.1/go.mod h1:jgHgmJd2RKBGzXqF5LR2EZMGxBkeanZ9wwa75XHJgOM= +cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= +cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= +cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= +cloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4= +cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0= +cloud.google.com/go/datacatalog v1.5.0/go.mod h1:M7GPLNQeLfWqeIm3iuiruhPzkt65+Bx8dAKvScX8jvs= +cloud.google.com/go/datacatalog v1.6.0/go.mod h1:+aEyF8JKg+uXcIdAmmaMUmZ3q1b/lKLtXCmXdnc0lbc= +cloud.google.com/go/dataflow v0.6.0/go.mod h1:9QwV89cGoxjjSR9/r7eFDqqjtvbKxAK2BaYU6PVk9UM= +cloud.google.com/go/dataflow v0.7.0/go.mod h1:PX526vb4ijFMesO1o202EaUmouZKBpjHsTlCtB4parQ= +cloud.google.com/go/dataform v0.3.0/go.mod h1:cj8uNliRlHpa6L3yVhDOBrUXH+BPAO1+KFMQQNSThKo= +cloud.google.com/go/dataform v0.4.0/go.mod h1:fwV6Y4Ty2yIFL89huYlEkwUPtS7YZinZbzzj5S9FzCE= +cloud.google.com/go/datalabeling v0.5.0/go.mod h1:TGcJ0G2NzcsXSE/97yWjIZO0bXj0KbVlINXMG9ud42I= +cloud.google.com/go/datalabeling v0.6.0/go.mod h1:WqdISuk/+WIGeMkpw/1q7bK/tFEZxsrFJOJdY2bXvTQ= +cloud.google.com/go/dataqna v0.5.0/go.mod h1:90Hyk596ft3zUQ8NkFfvICSIfHFh1Bc7C4cK3vbhkeo= +cloud.google.com/go/dataqna v0.6.0/go.mod h1:1lqNpM7rqNLVgWBJyk5NF6Uen2PHym0jtVJonplVsDA= +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/datastream v1.2.0/go.mod h1:i/uTP8/fZwgATHS/XFu0TcNUhuA0twZxxQ3EyCUQMwo= +cloud.google.com/go/datastream v1.3.0/go.mod h1:cqlOX8xlyYF/uxhiKn6Hbv6WjwPPuI9W2M9SAXwaLLQ= +cloud.google.com/go/dialogflow v1.15.0/go.mod h1:HbHDWs33WOGJgn6rfzBW1Kv807BE3O1+xGbn59zZWI4= +cloud.google.com/go/dialogflow v1.16.1/go.mod h1:po6LlzGfK+smoSmTBnbkIZY2w8ffjz/RcGSS+sh1el0= +cloud.google.com/go/dialogflow v1.17.0/go.mod h1:YNP09C/kXA1aZdBgC/VtXX74G/TKn7XVCcVumTflA+8= +cloud.google.com/go/documentai v1.7.0/go.mod h1:lJvftZB5NRiFSX4moiye1SMxHx0Bc3x1+p9e/RfXYiU= +cloud.google.com/go/documentai v1.8.0/go.mod h1:xGHNEB7CtsnySCNrCFdCyyMz44RhFEEX2Q7UD0c5IhU= +cloud.google.com/go/domains v0.6.0/go.mod h1:T9Rz3GasrpYk6mEGHh4rymIhjlnIuB4ofT1wTxDeT4Y= +cloud.google.com/go/domains v0.7.0/go.mod h1:PtZeqS1xjnXuRPKE/88Iru/LdfoRyEHYA9nFQf4UKpg= +cloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk= +cloud.google.com/go/edgecontainer v0.2.0/go.mod h1:RTmLijy+lGpQ7BXuTDa4C4ssxyXT34NIuHIgKuP4s5w= +cloud.google.com/go/functions v1.6.0/go.mod h1:3H1UA3qiIPRWD7PeZKLvHZ9SaQhR26XIJcC0A5GbvAk= +cloud.google.com/go/functions v1.7.0/go.mod h1:+d+QBcWM+RsrgZfV9xo6KfA1GlzJfxcfZcRPEhDDfzg= +cloud.google.com/go/gaming v1.5.0/go.mod h1:ol7rGcxP/qHTRQE/RO4bxkXq+Fix0j6D4LFPzYTIrDM= +cloud.google.com/go/gaming v1.6.0/go.mod h1:YMU1GEvA39Qt3zWGyAVA9bpYz/yAhTvaQ1t2sK4KPUA= +cloud.google.com/go/gkeconnect v0.5.0/go.mod h1:c5lsNAg5EwAy7fkqX/+goqFsU1Da/jQFqArp+wGNr/o= +cloud.google.com/go/gkeconnect v0.6.0/go.mod h1:Mln67KyU/sHJEBY8kFZ0xTeyPtzbq9StAVvEULYK16A= +cloud.google.com/go/gkehub v0.9.0/go.mod h1:WYHN6WG8w9bXU0hqNxt8rm5uxnk8IH+lPY9J2TV7BK0= +cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y977wO+hBH0= +cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= +cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= +cloud.google.com/go/iam v0.4.0 h1:YBYU00SCDzZJdHqVc4I5d6lsklcYIjQZa1YmEz4jlSE= +cloud.google.com/go/iam v0.4.0/go.mod h1:cbaZxyScUhxl7ZAkNWiALgihfP75wS/fUsVNaa1r3vA= +cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= +cloud.google.com/go/iam v0.12.0 h1:DRtTY29b75ciH6Ov1PHb4/iat2CLCvrOm40Q0a6DFpE= +cloud.google.com/go/iam v0.12.0/go.mod h1:knyHGviacl11zrtZUoDuYpDgLjvr28sLQaG0YB2GYAY= +cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= +cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= +cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= +cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= +cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= +cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= +cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= +cloud.google.com/go/memcache v1.5.0/go.mod h1:dk3fCK7dVo0cUU2c36jKb4VqKPS22BTkf81Xq617aWM= +cloud.google.com/go/metastore v1.5.0/go.mod h1:2ZNrDcQwghfdtCwJ33nM0+GrBGlVuh8rakL3vdPY3XY= +cloud.google.com/go/metastore v1.6.0/go.mod h1:6cyQTls8CWXzk45G55x57DVQ9gWg7RiH65+YgPsNh9s= +cloud.google.com/go/networkconnectivity v1.4.0/go.mod h1:nOl7YL8odKyAOtzNX73/M5/mGZgqqMeryi6UPZTk/rA= +cloud.google.com/go/networkconnectivity v1.5.0/go.mod h1:3GzqJx7uhtlM3kln0+x5wyFvuVH1pIBJjhCpjzSt75o= +cloud.google.com/go/networksecurity v0.5.0/go.mod h1:xS6fOCoqpVC5zx15Z/MqkfDwH4+m/61A3ODiDV1xmiQ= +cloud.google.com/go/networksecurity v0.6.0/go.mod h1:Q5fjhTr9WMI5mbpRYEbiexTzROf7ZbDzvzCrNl14nyU= +cloud.google.com/go/notebooks v1.2.0/go.mod h1:9+wtppMfVPUeJ8fIWPOq1UnATHISkGXGqTkxeieQ6UY= +cloud.google.com/go/notebooks v1.3.0/go.mod h1:bFR5lj07DtCPC7YAAJ//vHskFBxA5JzYlH68kXVdk34= +cloud.google.com/go/osconfig v1.7.0/go.mod h1:oVHeCeZELfJP7XLxcBGTMBvRO+1nQ5tFG9VQTmYS2Fs= +cloud.google.com/go/osconfig v1.8.0/go.mod h1:EQqZLu5w5XA7eKizepumcvWx+m8mJUhEwiPqWiZeEdg= +cloud.google.com/go/oslogin v1.4.0/go.mod h1:YdgMXWRaElXz/lDk1Na6Fh5orF7gvmJ0FGLIs9LId4E= +cloud.google.com/go/oslogin v1.5.0/go.mod h1:D260Qj11W2qx/HVF29zBg+0fd6YCSjSqLUkY/qEenQU= +cloud.google.com/go/phishingprotection v0.5.0/go.mod h1:Y3HZknsK9bc9dMi+oE8Bim0lczMU6hrX0UpADuMefr0= +cloud.google.com/go/phishingprotection v0.6.0/go.mod h1:9Y3LBLgy0kDTcYET8ZH3bq/7qni15yVUoAxiFxnlSUA= +cloud.google.com/go/privatecatalog v0.5.0/go.mod h1:XgosMUvvPyxDjAVNDYxJ7wBW8//hLDDYmnsNcMGq1K0= +cloud.google.com/go/privatecatalog v0.6.0/go.mod h1:i/fbkZR0hLN29eEWiiwue8Pb+GforiEIBnV9yrRUOKI= +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/recaptchaenterprise v1.3.1/go.mod h1:OdD+q+y4XGeAlxRaMn1Y7/GveP6zmq76byL6tjPE7d4= +cloud.google.com/go/recaptchaenterprise/v2 v2.1.0/go.mod h1:w9yVqajwroDNTfGuhmOjPDN//rZGySaf6PtFVcSCa7o= +cloud.google.com/go/recaptchaenterprise/v2 v2.2.0/go.mod h1:/Zu5jisWGeERrd5HnlS3EUGb/D335f9k51B/FVil0jk= +cloud.google.com/go/recaptchaenterprise/v2 v2.3.0/go.mod h1:O9LwGCjrhGHBQET5CA7dd5NwwNQUErSgEDit1DLNTdo= +cloud.google.com/go/recommendationengine v0.5.0/go.mod h1:E5756pJcVFeVgaQv3WNpImkFP8a+RptV6dDLGPILjvg= +cloud.google.com/go/recommendationengine v0.6.0/go.mod h1:08mq2umu9oIqc7tDy8sx+MNJdLG0fUi3vaSVbztHgJ4= +cloud.google.com/go/recommender v1.5.0/go.mod h1:jdoeiBIVrJe9gQjwd759ecLJbxCDED4A6p+mqoqDvTg= +cloud.google.com/go/recommender v1.6.0/go.mod h1:+yETpm25mcoiECKh9DEScGzIRyDKpZ0cEhWGo+8bo+c= +cloud.google.com/go/redis v1.7.0/go.mod h1:V3x5Jq1jzUcg+UNsRvdmsfuFnit1cfe3Z/PGyq/lm4Y= +cloud.google.com/go/redis v1.8.0/go.mod h1:Fm2szCDavWzBk2cDKxrkmWBqoCiL1+Ctwq7EyqBCA/A= +cloud.google.com/go/retail v1.8.0/go.mod h1:QblKS8waDmNUhghY2TI9O3JLlFk8jybHeV4BF19FrE4= +cloud.google.com/go/retail v1.9.0/go.mod h1:g6jb6mKuCS1QKnH/dpu7isX253absFl6iE92nHwlBUY= +cloud.google.com/go/scheduler v1.4.0/go.mod h1:drcJBmxF3aqZJRhmkHQ9b3uSSpQoltBPGPxGAWROx6s= +cloud.google.com/go/scheduler v1.5.0/go.mod h1:ri073ym49NW3AfT6DZi21vLZrG07GXr5p3H1KxN5QlI= +cloud.google.com/go/secretmanager v1.6.0/go.mod h1:awVa/OXF6IiyaU1wQ34inzQNc4ISIDIrId8qE5QGgKA= +cloud.google.com/go/security v1.5.0/go.mod h1:lgxGdyOKKjHL4YG3/YwIL2zLqMFCKs0UbQwgyZmfJl4= +cloud.google.com/go/security v1.7.0/go.mod h1:mZklORHl6Bg7CNnnjLH//0UlAlaXqiG7Lb9PsPXLfD0= +cloud.google.com/go/security v1.8.0/go.mod h1:hAQOwgmaHhztFhiQ41CjDODdWP0+AE1B3sX4OFlq+GU= +cloud.google.com/go/securitycenter v1.13.0/go.mod h1:cv5qNAqjY84FCN6Y9z28WlkKXyWsgLO832YiWwkCWcU= +cloud.google.com/go/securitycenter v1.14.0/go.mod h1:gZLAhtyKv85n52XYWt6RmeBdydyxfPeTrpToDPw4Auc= +cloud.google.com/go/servicedirectory v1.4.0/go.mod h1:gH1MUaZCgtP7qQiI+F+A+OpeKF/HQWgtAddhTbhL2bs= +cloud.google.com/go/servicedirectory v1.5.0/go.mod h1:QMKFL0NUySbpZJ1UZs3oFAmdvVxhhxB6eJ/Vlp73dfg= +cloud.google.com/go/speech v1.6.0/go.mod h1:79tcr4FHCimOp56lwC01xnt/WPJZc4v3gzyT7FoBkCM= +cloud.google.com/go/speech v1.7.0/go.mod h1:KptqL+BAQIhMsj1kOP2la5DSEEerPDuOP/2mmkhHhZQ= +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= +cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= +cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= +cloud.google.com/go/storage v1.23.0 h1:wWRIaDURQA8xxHguFCshYepGlrWIrbBnAmc7wfg07qY= +cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= +cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= +cloud.google.com/go/storage v1.29.0 h1:6weCgzRvMg7lzuUurI4697AqIRPU1SvzHhynwpW31jI= +cloud.google.com/go/storage v1.29.0/go.mod h1:4puEjyTKnku6gfKoTfNOU/W+a9JyuVNxjpS5GBrB8h4= +cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= +cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= +cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= +cloud.google.com/go/videointelligence v1.7.0/go.mod h1:k8pI/1wAhjznARtVT9U1llUaFNPh7muw8QyOUpavru4= +cloud.google.com/go/vision v1.2.0/go.mod h1:SmNwgObm5DpFBme2xpyOyasvBc1aPdjvMk2bBk0tKD0= +cloud.google.com/go/vision/v2 v2.2.0/go.mod h1:uCdV4PpN1S0jyCyq8sIM42v2Y6zOLkZs+4R9LrGYwFo= +cloud.google.com/go/vision/v2 v2.3.0/go.mod h1:UO61abBx9QRMFkNBbf1D8B1LXdS2cGiiCRx0vSpZoUo= +cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xXZmFiHmGE= +cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= +cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= +cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= +collectd.org v0.3.0/go.mod h1:A/8DzQBkF6abtvrT2j/AU/4tiBgJWYyh0y/oB/4MlWE= +cosmossdk.io/api v0.3.1 h1:NNiOclKRR0AOlO4KIqeaG6PS6kswOMhHD0ir0SscNXE= +cosmossdk.io/api v0.3.1/go.mod h1:DfHfMkiNA2Uhy8fj0JJlOCYOBp4eWUUJ1te5zBGNyIw= +cosmossdk.io/core v0.5.1 h1:vQVtFrIYOQJDV3f7rw4pjjVqc1id4+mE0L9hHP66pyI= +cosmossdk.io/core v0.5.1/go.mod h1:KZtwHCLjcFuo0nmDc24Xy6CRNEL9Vl/MeimQ2aC7NLE= +cosmossdk.io/depinject v1.0.0-alpha.3 h1:6evFIgj//Y3w09bqOUOzEpFj5tsxBqdc5CfkO7z+zfw= +cosmossdk.io/depinject v1.0.0-alpha.3/go.mod h1:eRbcdQ7MRpIPEM5YUJh8k97nxHpYbc3sMUnEtt8HPWU= +cosmossdk.io/errors v1.0.0-beta.7 h1:gypHW76pTQGVnHKo6QBkb4yFOJjC+sUGRc5Al3Odj1w= +cosmossdk.io/errors v1.0.0-beta.7/go.mod h1:mz6FQMJRku4bY7aqS/Gwfcmr/ue91roMEKAmDUDpBfE= +cosmossdk.io/math v1.0.0-beta.3 h1:TbZxSopz2LqjJ7aXYfn7nJSb8vNaBklW6BLpcei1qwM= +cosmossdk.io/math v1.0.0-beta.3/go.mod h1:3LYasri3Zna4XpbrTNdKsWmD5fHHkaNAod/mNT9XdE4= +cosmossdk.io/math v1.0.0-rc.0 h1:ml46ukocrAAoBpYKMidF0R2tQJ1Uxfns0yH8wqgMAFc= +cosmossdk.io/math v1.0.0-rc.0/go.mod h1:Ygz4wBHrgc7g0N+8+MrnTfS9LLn9aaTGa9hKopuym5k= +cosmossdk.io/tools/rosetta v0.2.1 h1:ddOMatOH+pbxWbrGJKRAawdBkPYLfKXutK9IETnjYxw= +cosmossdk.io/tools/rosetta v0.2.1/go.mod h1:Pqdc1FdvkNV3LcNIkYWt2RQY6IP1ge6YWZk8MhhO9Hw= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +filippo.io/edwards25519 v1.0.0-rc.1 h1:m0VOOB23frXZvAOK44usCgLWvtsxIoMCTBGJZlpmGfU= +filippo.io/edwards25519 v1.0.0-rc.1/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= +filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek= +filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= +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/Azure/azure-sdk-for-go/sdk/azcore v0.21.1/go.mod h1:fBF9PQNqB8scdgpZ3ufzaLntG0AG7C1WjPMsiFOmfHM= +github.com/Azure/azure-sdk-for-go/sdk/internal v0.8.3/go.mod h1:KLF4gFr6DcKFZwSuH8w8yEK6DpFl3LP5rhdvAb7Yz5I= +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.3.0/go.mod h1:tPaiy8S5bQ+S5sOiDlINkp7+Ef339+Nz5L5XO+cnOHo= +github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak= +github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= +github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= +github.com/ChainSafe/go-schnorrkel v1.0.0 h1:3aDA67lAykLaG1y3AOjs88dMxC88PgUuHRrLeDnvGIM= +github.com/ChainSafe/go-schnorrkel v1.0.0/go.mod h1:dpzHYVxLZcp8pjlV+O+UR8K0Hp/z7vcchBSbMBEhCw4= +github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= +github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= +github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= +github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= +github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= +github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= +github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= +github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 h1:fLjPD/aNc3UIOA6tDi6QXUemppXK3P9BI7mr2hd6gx8= +github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= +github.com/StirlingMarketingGroup/go-namecase v1.0.0 h1:2CzaNtCzc4iNHirR+5ru9OzGg8rQp860gqLBFqRI02Y= +github.com/StirlingMarketingGroup/go-namecase v1.0.0/go.mod h1:ZsoSKcafcAzuBx+sndbxHu/RjDcDTrEdT4UvhniHfio= +github.com/VictoriaMetrics/fastcache v1.6.0/go.mod h1:0qHz5QP0GMX4pfmMA/zt5RgfNuXJrTP0zS7DqpHGGTw= +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/Workiva/go-datastructures v1.0.53 h1:J6Y/52yX10Xc5JjXmGtWoSSxs3mZnGSaq37xZZh7Yig= +github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= +github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= +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/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= +github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/apache/arrow/go/arrow v0.0.0-20191024131854-af6fa24be0db/go.mod h1:VTxUBvSJ3s3eHAg65PNgrsn5BtqCRPdmyXh6rAfdxN0= +github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= +github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= +github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= +github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= +github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= +github.com/armon/go-metrics v0.4.1 h1:hR91U9KYmb6bLBYLQjyM+3j+rcd/UhE+G78SFnF8gJA= +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/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= +github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI= +github.com/avast/retry-go/v4 v4.0.4 h1:38hLf0DsRXh+hOF6HbTni0+5QGTNdw9zbaMD7KAO830= +github.com/avast/retry-go/v4 v4.0.4/go.mod h1:HqmLvS2VLdStPCGDFjSuZ9pzlTqVRldCI4w2dO4m1Ms= +github.com/avast/retry-go/v4 v4.3.3 h1:G56Bp6mU0b5HE1SkaoVjscZjlQb0oy4mezwY/cGH19w= +github.com/avast/retry-go/v4 v4.3.3/go.mod h1:rg6XFaiuFYII0Xu3RDbZQkxCofFwruZKW8oEF1jpWiU= +github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= +github.com/aws/aws-sdk-go v1.15.78/go.mod h1:E3/ieXAlvM0XWO57iftYVDLLvQ824smPP3ATZkfNZeM= +github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.40.45 h1:QN1nsY27ssD/JmW4s83qmSb+uL6DG4GmCDzjmJB4xUI= +github.com/aws/aws-sdk-go v1.40.45/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q= +github.com/aws/aws-sdk-go v1.44.122/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= +github.com/aws/aws-sdk-go v1.44.203 h1:pcsP805b9acL3wUqa4JR2vg1k2wnItkDYNvfmcy6F+U= +github.com/aws/aws-sdk-go v1.44.203/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= +github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= +github.com/aws/aws-sdk-go-v2 v1.2.0/go.mod h1:zEQs02YRBw1DjK0PoJv3ygDYOFTre1ejlJWl8FwAuQo= +github.com/aws/aws-sdk-go-v2/config v1.1.1/go.mod h1:0XsVy9lBI/BCXm+2Tuvt39YmdHwS5unDQmxZOYe8F5Y= +github.com/aws/aws-sdk-go-v2/credentials v1.1.1/go.mod h1:mM2iIjwl7LULWtS6JCACyInboHirisUUdkBPoTHMOUo= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.0.2/go.mod h1:3hGg3PpiEjHnrkrlasTfxFqUsZ2GCk/fMUn4CbKgSkM= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.0.2/go.mod h1:45MfaXZ0cNbeuT0KQ1XJylq8A6+OpVV2E5kvY/Kq+u8= +github.com/aws/aws-sdk-go-v2/service/route53 v1.1.1/go.mod h1:rLiOUrPLW/Er5kRcQ7NkwbjlijluLsrIbu/iyl35RO4= +github.com/aws/aws-sdk-go-v2/service/sso v1.1.1/go.mod h1:SuZJxklHxLAXgLTc1iFXbEWkXs7QRTQpCLGaKIprQW0= +github.com/aws/aws-sdk-go-v2/service/sts v1.1.1/go.mod h1:Wi0EBZwiz/K44YliU0EKxqTCJGUfYTWXrrBwkq736bM= +github.com/aws/smithy-go v1.1.0/go.mod h1:EzMw8dbp/YJL4A5/sbhGddag+NPT7q084agLbB9LgIw= +github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= +github.com/benbjohnson/clock v1.3.0/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/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas= +github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4= +github.com/bgentry/speakeasy v0.1.0 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY= +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/bmizerany/pat v0.0.0-20170815010413-6226ea591a40/go.mod h1:8rLXio+WjiTceGBHIoTvn60HIbs7Hm7bcHjyrSqYB9c= +github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= +github.com/btcsuite/btcd v0.22.1 h1:CnwP9LM/M9xuRrGSCGeMVs9iv09uMqwsVX7EeIpgV2c= +github.com/btcsuite/btcd v0.22.1/go.mod h1:wqgTSL29+50LRkmOVknEdmt8ZojIzhuWvgu/iptuN7Y= +github.com/btcsuite/btcd/btcec/v2 v2.1.2/go.mod h1:ctjw4H1kknNJmRN4iP1R7bTQ+v3GJkZBd6mui8ZsAZE= +github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= +github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= +github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce h1:YtWJF7RHm2pYCvA5t0RPmAaLUhREsKuKd+SLhxFbFeQ= +github.com/burnt-labs/interchaintest/v6 v6.0.0-20230314191219-148474820e92 h1:8PjVIQPom8OhDLy2lh4REpPqil3egD8vDAyF4+s5VTc= +github.com/burnt-labs/interchaintest/v6 v6.0.0-20230314191219-148474820e92/go.mod h1:5aNprRJ5FQSL7KP2uhgukg3yhVvVtKvbSrwM6KWORtY= +github.com/c-bata/go-prompt v0.2.2/go.mod h1:VzqtzE2ksDBcdln8G7mk2RX9QyGjH+OVqOCSiVIqS34= +github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= +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.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= +github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/centrifuge/go-substrate-rpc-client/v4 v4.0.10 h1:HW3XP9G3mXr0gYPfxCAQLD29u+Ys0uIeotv9RWfnhrM= +github.com/centrifuge/go-substrate-rpc-client/v4 v4.0.10/go.mod h1:5g1oM4Zu3BOaLpsKQ+O8PAv2kNuq+kPcA1VzFbsSqxE= +github.com/centrifuge/go-substrate-rpc-client/v4 v4.0.12 h1:DCYWIBOalB0mKKfUg2HhtGgIkBbMA1fnlnkZp7fHB18= +github.com/centrifuge/go-substrate-rpc-client/v4 v4.0.12/go.mod h1:5g1oM4Zu3BOaLpsKQ+O8PAv2kNuq+kPcA1VzFbsSqxE= +github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= +github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= +github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= +github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= +github.com/chzyer/logex v1.1.10 h1:Swpa1K6QvQznwJRcfTfQJmTE72DqScAa40E+fbHEXEE= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/logex v1.2.1/go.mod h1:JLbx6lG2kDbNRFnfkgvh4eRJRPX1QCoOIWomwysCBrQ= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e h1:fY5BOSpyZCqRo5OhCuC+XN+r/bBCmeuuJtjz+bCNIf8= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/readline v1.5.1 h1:upd/6fQk4src78LMRzh5vItIt361/o4uq553V8B5sGI= +github.com/chzyer/readline v1.5.1/go.mod h1:Eh+b79XXUwfKfcPLepksvw2tcLE/Ct21YObkaSkeBlk= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1 h1:q763qf9huN11kDQavWsoZXJNW3xEE4JJyHa5Q25/sd8= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/chzyer/test v1.0.0/go.mod h1:2JlltgoNkt4TW/z9V/IzDdFaMTM2JPIi26O1pF38GC8= +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/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cloudflare/cloudflare-go v0.14.0/go.mod h1:EnwdgGMaFOruiPZRFSgn+TsQ3hQ7C/YWzIGLeu5c304= +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/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cockroachdb/apd/v2 v2.0.2 h1:weh8u7Cneje73dDh+2tEVLUvyBc89iwepWCD8b8034E= +github.com/cockroachdb/apd/v2 v2.0.2/go.mod h1:DDxRlzC2lo3/vSlmSoS7JkqbbrARPuFOGr0B9pvN3Gw= +github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= +github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= +github.com/coinbase/rosetta-sdk-go v0.7.9 h1:lqllBjMnazTjIqYrOGv8h8jxjg9+hJazIGZr9ZvoCcA= +github.com/coinbase/rosetta-sdk-go/types v1.0.0 h1:jpVIwLcPoOeCR6o1tU+Xv7r5bMONNbHU7MuEHboiFuA= +github.com/coinbase/rosetta-sdk-go/types v1.0.0/go.mod h1:eq7W2TMRH22GTW0N0beDnN931DW0/WOI1R2sdHNHG4c= +github.com/cometbft/cometbft v0.37.0 h1:M005vBaSaugvYYmNZwJOopynQSjwLoDTwflnQ/I/eYk= +github.com/cometbft/cometbft v0.37.0/go.mod h1:Y2MMMN//O5K4YKd8ze4r9jmk4Y7h0ajqILXbH5JQFVs= +github.com/cometbft/cometbft-db v0.7.0 h1:uBjbrBx4QzU0zOEnU8KxoDl18dMNgDh+zZRUE0ucsbo= +github.com/cometbft/cometbft-db v0.7.0/go.mod h1:yiKJIm2WKrt6x8Cyxtq9YTEcIMPcEe4XPxhgX59Fzf0= +github.com/confio/ics23/go v0.9.0 h1:cWs+wdbS2KRPZezoaaj+qBleXgUk5WOQFMP3CQFGTr4= +github.com/confio/ics23/go v0.9.0/go.mod h1:4LPZ2NYqnYIVRklaozjNR1FScgDJ2s5Xrp+e/mYVRak= +github.com/consensys/bavard v0.1.8-0.20210406032232-f3452dc9b572/go.mod h1:Bpd0/3mZuaj6Sj+PqrmIquiOKy397AKGThQPaGzNXAQ= +github.com/consensys/gnark-crypto v0.4.1-0.20210426202927-39ac3d4b3f1f/go.mod h1:815PAHg3wvysy0SyIqanF8gZ0Y1wjk/hrDHD/iT88+Q= +github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= +github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +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-proto v1.0.0-alpha8 h1:d3pCRuMYYvGA5bM0ZbbjKn+AoQD4A7dyNG2wzwWalUw= +github.com/cosmos/cosmos-proto v1.0.0-alpha8/go.mod h1:6/p+Bc4O8JKeZqe0VqUGTX31eoYqemTT4C1hLCWsO7I= +github.com/cosmos/cosmos-proto v1.0.0-beta.2 h1:X3OKvWgK9Gsejo0F1qs5l8Qn6xJV/AzgIWR2wZ8Nua8= +github.com/cosmos/cosmos-proto v1.0.0-beta.2/go.mod h1:+XRCLJ14pr5HFEHIUcn51IKXD1Fy3rkEQqt4WqmN4V0= +github.com/cosmos/cosmos-sdk v0.46.7 h1:dkGy9y2ewgqvawrUOuWb2oz3MdotVduokyreXC4bS0s= +github.com/cosmos/cosmos-sdk v0.46.7/go.mod h1:fqKqz39U5IlEFb4nbQ72951myztsDzFKKDtffYJ63nk= +github.com/cosmos/cosmos-sdk v0.47.0 h1:GKYtBpvjwuDEVix1vdnQpq7PuEOnItuEK0vdAL2cZ5g= +github.com/cosmos/cosmos-sdk v0.47.0/go.mod h1:FTtZbqiHCZ2vun9WrPq6qLQafNKkAuIhLAxzLjr2TiI= +github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= +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.4.2/go.mod h1:cLxOsn1ljAHSV527CHOtaIP91kK6cCrZETRBrkzItWU= +github.com/cosmos/gogoproto v1.4.6 h1:Ee7z15dWJaGlgM2rWrK8N2IX7PQcuccu8oG68jp5RL4= +github.com/cosmos/gogoproto v1.4.6/go.mod h1:VS/ASYmPgv6zkPKLjR9EB91lwbLHOzaGCirmKKhncfI= +github.com/cosmos/gorocksdb v1.2.0 h1:d0l3jJG8M4hBouIZq0mDUHZ+zjOx044J3nGRskwTb4Y= +github.com/cosmos/gorocksdb v1.2.0/go.mod h1:aaKvKItm514hKfNJpUJXnnOWeBnk2GL4+Qw9NHizILw= +github.com/cosmos/iavl v0.19.4 h1:t82sN+Y0WeqxDLJRSpNd8YFX5URIrT+p8n6oJbJ2Dok= +github.com/cosmos/iavl v0.19.4/go.mod h1:X9PKD3J0iFxdmgNLa7b2LYWdsGd90ToV5cAONApkEPw= +github.com/cosmos/iavl v0.20.0 h1:fTVznVlepH0KK8NyKq8w+U7c2L6jofa27aFX6YGlm38= +github.com/cosmos/iavl v0.20.0/go.mod h1:WO7FyvaZJoH65+HFOsDir7xU9FWk2w9cHXNW1XHcl7A= +github.com/cosmos/ibc-go/v6 v6.1.0 h1:o7oXws2vKkKfOFzJI+oNylRn44PCNt5wzHd/zKQKbvQ= +github.com/cosmos/ibc-go/v6 v6.1.0/go.mod h1:CY3zh2HLfetRiW8LY6kVHMATe90Wj/UOoY8T6cuB0is= +github.com/cosmos/ibc-go/v7 v7.0.0 h1:j4kyywlG0hhDmT9FmSaR5iCIka7Pz7kJTxGWY1nlV9Q= +github.com/cosmos/ibc-go/v7 v7.0.0/go.mod h1:BFh8nKWjr5zeR2OZfhkzdgDzj1+KjRn3aJLpwapStj8= +github.com/cosmos/ics23/go v0.9.1-0.20221207100636-b1abd8678aab h1:I9ialKTQo7248V827Bba4OuKPmk+FPzmTVHsLXaIJWw= +github.com/cosmos/ics23/go v0.9.1-0.20221207100636-b1abd8678aab/go.mod h1:2CwqasX5dSD7Hbp/9b6lhK6BwoBDCBldx7gPKRukR60= +github.com/cosmos/ledger-cosmos-go v0.12.1 h1:sMBxza5p/rNK/06nBSNmsI/WDqI0pVJFVNihy1Y984w= +github.com/cosmos/ledger-cosmos-go v0.12.1/go.mod h1:dhO6kj+Y+AHIOgAe4L9HL/6NDdyyth4q238I9yFpD2g= +github.com/cosmos/rosetta-sdk-go v0.10.0 h1:E5RhTruuoA7KTIXUcMicL76cffyeoyvNybzUGSKFTcM= +github.com/cosmos/rosetta-sdk-go v0.10.0/go.mod h1:SImAZkb96YbwvoRkzSMQB6noNJXFgWl/ENIznEoYQI4= +github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/creachadair/taskgroup v0.3.2 h1:zlfutDS+5XG40AOxcHDSThxKzns8Tnr9jnr6VqkYlkM= +github.com/creachadair/taskgroup v0.4.2 h1:jsBLdAJE42asreGss2xZGZ8fJra7WtwnHWeJFxv2Li8= +github.com/creachadair/taskgroup v0.4.2/go.mod h1:qiXUOSrbwAY3u0JPGTzObbE3yf9hcXHDKBZ2ZjpCbgM= +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/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= +github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= +github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= +github.com/dave/jennifer v1.2.0/go.mod h1:fIb+770HOpJ2fmN9EPPKOqm1vMGhB+TwXKMZhrIygKg= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/deckarep/golang-set v1.8.0 h1:sk9/l/KqpunDwP7pSjUg0keiOOLEnOBHzykLrsPppp4= +github.com/deckarep/golang-set v1.8.0/go.mod h1:5nI87KwE7wgsBU1F4GKAw2Qod7p5kyS383rP6+o6qqo= +github.com/decred/base58 v1.0.4 h1:QJC6B0E0rXOPA8U/kw2rP+qiRJsUaE2Er+pYb3siUeA= +github.com/decred/base58 v1.0.4/go.mod h1:jJswKPEdvpFpvf7dsDvFZyLT22xZ9lWqEByX38oGd9E= +github.com/decred/dcrd/chaincfg/chainhash v1.0.2 h1:rt5Vlq/jM3ZawwiacWjPa+smINyLRN07EO0cNBV6DGU= +github.com/decred/dcrd/chaincfg/chainhash v1.0.2/go.mod h1:BpbrGgrPTr3YJYRN3Bm+D9NuaFd+zGyNeIKgrhCXK60= +github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= +github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= +github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.0 h1:3GIJYXQDAKpLEFriGFN8SbSffak10UXHGdIcFaMPykY= +github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.0/go.mod h1:3s92l0paYkZoIHuj4X93Teg/HB7eGM9x/zokGw+u4mY= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 h1:YLtO71vCjJRCBcrPMtQ9nqBsqpA1m5sE92cU+pd5Mcc= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 h1:HbphB4TFFXpv7MNrT52FGrrgVXF1owhMVTHFZIlnvd4= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0/go.mod h1:DZGJHZMqrU4JJqFAWUS2UO1+lbSKsdiOoYi9Zzey7Fc= +github.com/deepmap/oapi-codegen v1.6.0/go.mod h1:ryDa9AgbELGeB+YEXE1dR53yAjHwFvE9iAUlWl9Al3M= +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/v2 v2.2007.4 h1:TRWBQg8UrlUhaFdco01nO2uXwzKS7zd+HVdwV/GHc4o= +github.com/dgraph-io/badger/v2 v2.2007.4/go.mod h1:vSw/ax2qojzbN6eXHIx6KPKtCSHJN/Uz0X0VPruTIhk= +github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= +github.com/dgraph-io/ristretto v0.1.0 h1:Jv3CGQHp9OjuMBSne1485aDpUkTKEcUqF+jm/LuerPI= +github.com/dgraph-io/ristretto v0.1.0/go.mod h1:fux0lOrBhrVCJd3lcTHsIJhq1T2rokOu6v9Vcb3Q9ug= +github.com/dgraph-io/ristretto v0.1.1 h1:6CWw5tJNgpegArSHpNHJKldNeq03FQCwYvfMVWajOK8= +github.com/dgraph-io/ristretto v0.1.1/go.mod h1:S1GPSBCYCIhmVNfcth17y2zZtQT6wzkzgwUve0VDWWA= +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dgryski/go-bitstream v0.0.0-20180413035011-3522498ce2c8/go.mod h1:VMaSuZ+SZcx/wljOQKvp5srsbCiKDEb6K2wC4+PiBmQ= +github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= +github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= +github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= +github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= +github.com/dnaeon/go-vcr v1.1.0/go.mod h1:M7tiix8f0r6mKKJ3Yq/kqU1OYf3MnfmBWVbPx/yU9ko= +github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= +github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68= +github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/docker v1.4.2-0.20180625184442-8e610b2b55bf/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v20.10.19+incompatible h1:lzEmjivyNHFHMNAFLXORMBXyGIhw/UP4DvJwvyKYq64= +github.com/docker/docker v20.10.19+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= +github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= +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/dop251/goja v0.0.0-20211011172007-d99e4b8cbf48/go.mod h1:R9ET47fwRVRPZnOGvHxxhuZcbrMCuiqOz3Rlrh4KSnk= +github.com/dop251/goja_nodejs v0.0.0-20210225215109-d91c329300e7/go.mod h1:hn7BA7c8pLvoGndExHudxTDKZ84Pyvv+90pbBjbTz0Y= +github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= +github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +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.5.0 h1:3j8ya4Z4kMCwT5nXIKFSV84YS+HdqSSO0VsTQxaLAeM= +github.com/dvsekhvalnov/jose2go v1.5.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB/mPZadG+mhXU= +github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= +github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= +github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= +github.com/eclipse/paho.mqtt.golang v1.2.0/go.mod h1:H9keYFcgq3Qr5OUJm/JZI/i6U7joQ8SYLhZwfeOo6Ts= +github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= +github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= +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/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= +github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= +github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/ethereum/go-ethereum v1.10.17 h1:XEcumY+qSr1cZQaWsQs5Kck3FHB0V2RiMHPdTBJ+oT8= +github.com/ethereum/go-ethereum v1.10.17/go.mod h1:Lt5WzjM07XlXc95YzrhosmR4J9Ahd6X2wyEV2SvGhk0= +github.com/ethereum/go-ethereum v1.10.20 h1:75IW830ClSS40yrQC1ZCMZCt5I+zU16oqId2SiQwdQ4= +github.com/ethereum/go-ethereum v1.10.20/go.mod h1:LWUN82TCHGpxB3En5HVmLLzPD7YSrEUFmFfN1nKkVN0= +github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c h1:8ISkoahWXwZR41ois5lSJBSVw4D0OV19Ht/JSTzvSv0= +github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A= +github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4 h1:7HZCaLC5+BZpmbhCOZJ293Lz68O7PYrF2EzeiFMwCLk= +github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/felixge/httpsnoop v1.0.1 h1:lvB5Jl89CsZtGIWuTcDM1E/vkVs49/Ml7JJe07l8SPQ= +github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/felixge/httpsnoop v1.0.2 h1:+nS9g82KMXccJ/wp0zyRW9ZBHFETmMGtkk+2CTTrW4o= +github.com/felixge/httpsnoop v1.0.2/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= +github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= +github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= +github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= +github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= +github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= +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.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= +github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= +github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= +github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg= +github.com/gdamore/tcell/v2 v2.4.1-0.20210905002822-f057f0a857a1/go.mod h1:Az6Jt+M5idSED2YPGtwnfJV0kXohgdCBPmHGSYc1r04= +github.com/gdamore/tcell/v2 v2.6.0/go.mod h1:be9omFATkdr0D9qewWW3d+MEvl5dha+Etb5y65J2H8Y= +github.com/getkin/kin-openapi v0.53.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= +github.com/getkin/kin-openapi v0.61.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= +github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= +github.com/glycerine/go-unsnap-stream v0.0.0-20180323001048-9f0cb55181dd/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE= +github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24= +github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJpoZOs= +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-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.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= +github.com/go-kit/kit v0.12.0 h1:e4o3o3IsBfAKQh5Qbbiqyfu97Ku7jrO/JbohvztANh4= +github.com/go-kit/kit v0.12.0/go.mod h1:lHd+EkCZPIwYItmGDDRdhinkzX2A1sj+M9biaEaizzs= +github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= +github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= +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-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.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA= +github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= +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-ole/go-ole v1.2.1 h1:2lOsA72HgjxAuMlKpFiCbHTvu44PIVkZ5hqm3RSdI/E= +github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= +github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= +github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= +github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= +github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= +github.com/go-sourcemap/sourcemap v2.1.3+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= +github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= +github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw= +github.com/go-stack/stack v1.8.1/go.mod h1:dcoOX6HbPZSZptuspn9bctJ+N/CnF5gGygcUP3XYfe4= +github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= +github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= +github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= +github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= +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/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/gogo/gateway v1.1.0 h1:u0SuhL9+Il+UbjM9VIE3ntfRujKbvVpFvNB4HbjeVQ0= +github.com/gogo/gateway v1.1.0/go.mod h1:S7rR8FRQyG3QFESeSv4l2WnsyzlCLG0CzBbUUo/mbic= +github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= +github.com/gogo/googleapis v1.4.1-0.20201022092350-68b0159b7869/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= +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/golang-jwt/jwt/v4 v4.3.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= +github.com/golang/geo v0.0.0-20190916061304-5b978397cfec/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/glog v1.0.0 h1:nfP3RFugxnNRyKgeWd4oI1nYvXpxrx8ck8ZrcizshdQ= +github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= +github.com/golang/glog v1.1.0 h1:/d3pCKDPWNnvIWe0vVUpNP32qc8U3PDVxySP/y360qE= +github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ= +github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +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/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/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.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= +github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= +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 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= +github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golangci/lint-1 v0.0.0-20181222135242-d2cdd8c08219/go.mod h1:/X8TswGSh1pIozq4ZwCfxS0WA5JGXguxk94ar/4c87Y= +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.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= +github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= +github.com/google/flatbuffers v1.11.0/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.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +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.1.1-0.20200604201612-c04b05f3adfa/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= +github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= +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/martian/v3 v3.2.1 h1:d8MncMlErDFTwQGBK1xhv026j9kqhvw1Qv9IbWT1VLQ= +github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= +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-20201218002935-b9804c9f04c2/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-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26 h1:Xim43kblpZXfIBQsbuBVKCudVG457BR2GZFIz3uw3hQ= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= +github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= +github.com/googleapis/enterprise-certificate-proxy v0.2.0 h1:y8Yozv7SZtlU//QXbezB6QkpuE6jMD2/gfzk4AftXjs= +github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= +github.com/googleapis/enterprise-certificate-proxy v0.2.3 h1:yk9/cqRKtT9wXZSsRH9aurXEpJX+U6FLtpYTdC3R06k= +github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= +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/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= +github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= +github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= +github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= +github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= +github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= +github.com/googleapis/gax-go/v2 v2.6.0 h1:SXk3ABtQYDT/OH8jAyvEOQ58mgawq5C4o/4/89qN2ZU= +github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= +github.com/googleapis/gax-go/v2 v2.7.0 h1:IcsPKeInNvYi7eqSaDjiZqDDKu5rsmunY0Y1YupQSSQ= +github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8= +github.com/googleapis/go-type-adapters v1.0.0 h1:9XdMn+d/G57qq1s8dNc5IesGCXHf6V2HZ2JwRxfA2tA= +github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= +github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= +github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= +github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= +github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= +github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= +github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= +github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/graph-gophers/graphql-go v1.3.0/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= +github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= +github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= +github.com/grpc-ecosystem/grpc-gateway v1.8.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +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/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/gtank/merlin v0.1.1-0.20191105220539-8318aed1a79f/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= +github.com/gtank/merlin v0.1.1 h1:eQ90iG7K9pOhtereWsmyRJ6RAwcP4tHTDBHXNg+u5is= +github.com/gtank/merlin v0.1.1/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= +github.com/gtank/ristretto255 v0.1.2 h1:JEqUCPA1NvLq5DwYtuzigd7ss8fwbYay9fi4/5uMzcc= +github.com/gtank/ristretto255 v0.1.2/go.mod h1:Ph5OpO6c7xKUGROZfWVLiJf9icMDwUeIvY4OmlYW69o= +github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= +github.com/hashicorp/consul/sdk v0.3.0/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/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-getter v1.6.1 h1:NASsgP4q6tL94WH6nJxKWj8As2H/2kop/bB1d8JMyRY= +github.com/hashicorp/go-getter v1.6.1/go.mod h1:IZCrswsZPeWv9IkVnLElzRU/gz/QPi6pZHn4tv6vbwA= +github.com/hashicorp/go-getter v1.7.0 h1:bzrYP+qu/gMrL1au7/aDvkoOVGUJpeKBgbqRHACAFDY= +github.com/hashicorp/go-getter v1.7.0/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744= +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-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-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= +github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= +github.com/hashicorp/go-safetemp v1.0.0 h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhEyExpmo= +github.com/hashicorp/go-safetemp v1.0.0/go.mod h1:oaerMy3BhqiTbVye6QuFhFtIceqFoDHxNAB65b+Rj1I= +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 h1:RS8zrF7PhGwyNPOtxSClXXj9HA8feRnJzgnI1RJCSnM= +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-version v1.1.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= +github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +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 v0.5.5-0.20210104140557-80c98217689d h1:dg1dEPuWpEqDnvIw251EVy4zlP8gWbsGj4BsUKCRpYs= +github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= +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/hdevalence/ed25519consensus v0.0.0-20220222234857-c00d1f31bab3 h1:aSVUgRRRtOrZOC1fYmY9gV0e9z/Iu+xNVSASWjsuyGU= +github.com/hdevalence/ed25519consensus v0.0.0-20220222234857-c00d1f31bab3/go.mod h1:5PC6ZNPde8bBqU/ewGZig35+UIZtw9Ytxez8/q5ZyFE= +github.com/hdevalence/ed25519consensus v0.1.0 h1:jtBwzzcHuTmFrQN6xQZn6CQEO/V9f7HsjsjeEZ6auqU= +github.com/hdevalence/ed25519consensus v0.1.0/go.mod h1:w3BHWjwJbFU29IRHL1Iqkw3sus+7FctEyM4RqDxYNzo= +github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= +github.com/holiman/uint256 v1.2.0/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/huandu/go-assert v1.1.5/go.mod h1:yOLvuqZwmcHIC5rIzrBhT7D3Q9c3GFnd0JrPVhn/06U= +github.com/huandu/skiplist v1.2.0 h1:gox56QD77HzSC0w+Ws3MH3iie755GBJU1OER3h5VsYw= +github.com/huandu/skiplist v1.2.0/go.mod h1:7v3iFjLcSAzO4fN5B8dvebvo/qsfumiLiDXMrPiHF9w= +github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= +github.com/huin/goupnp v1.0.3-0.20220313090229-ca81a64b4204/go.mod h1:ZxNlw5WqJj6wSsRK5+YfflQGXYfccj5VgQsMNixHM7Y= +github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= +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/icza/dyno v0.0.0-20220812133438-f0b6f8a18845 h1:H+uM0Bv88eur3ZSsd2NGKg3YIiuXxwxtlN7HjE66UTU= +github.com/icza/dyno v0.0.0-20220812133438-f0b6f8a18845/go.mod h1:c1tRKs5Tx7E2+uHGSyyncziFjvGpgv4H2HrqXeUQ/Uk= +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.0.1 h1:U3uMjPSQEBMNp1lFxmllqCPM6P5u/Xq7Pgzkat/bFNc= +github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +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/flux v0.65.1/go.mod h1:J754/zds0vvpfwuq7Gc2wRdVwEodfpCFM7mYlOw2LqY= +github.com/influxdata/influxdb v1.8.3/go.mod h1:JugdFhsvvI8gadxOI6noqNeeBHvWNTbfYGtiAn+2jhI= +github.com/influxdata/influxdb-client-go/v2 v2.4.0/go.mod h1:vLNHdxTJkIf2mSLvGrpj8TCcISApPoXkaxP8g9uRlW8= +github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= +github.com/influxdata/influxql v1.1.1-0.20200828144457-65d3ef77d385/go.mod h1:gHp9y86a/pxhjJ+zMjNXiQAA197Xk9wLxaz+fGG+kWk= +github.com/influxdata/line-protocol v0.0.0-20180522152040-32c6aa80de5e/go.mod h1:4kt73NQhadE3daL3WhR5EJ/J2ocX0PZzwxQ0gXJ7oFE= +github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= +github.com/influxdata/line-protocol v0.0.0-20210311194329-9aa0e372d097/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= +github.com/influxdata/promql/v2 v2.12.0/go.mod h1:fxOPu+DY0bqCTCECchSRtWfc+0X19ybifQhZoQNF5D8= +github.com/influxdata/roaring v0.4.13-0.20180809181101-fc520f41fab6/go.mod h1:bSgUQ7q5ZLSO+bKBGqJiCBGAl+9DxyW63zLTujjUlOE= +github.com/influxdata/tdigest v0.0.0-20181121200506-bf2b5ad3c0a9/go.mod h1:Js0mqiSBE6Ffsg94weZZ2c+v/ciT8QRHFOap7EKDrR0= +github.com/influxdata/usage-client v0.0.0-20160829180054-6d3895376368/go.mod h1:Wbbw6tYNvwa5dlB6304Sd+82Z3f7PmVZHVKU637d4po= +github.com/ipfs/go-cid v0.0.7 h1:ysQJVJA3fNDF1qigJbsSQOdjhVLsOEoPdh0+R97k3jY= +github.com/ipfs/go-cid v0.0.7/go.mod h1:6Ux9z5e+HpkQdckYoX1PG/6xqKspzlEIR5SDmgqgC/I= +github.com/ipfs/go-cid v0.2.0 h1:01JTiihFq9en9Vz0lc0VDWvZe/uBonGpzo4THP0vcQ0= +github.com/ipfs/go-cid v0.2.0/go.mod h1:P+HXFDF4CVhaVayiEb4wkAy7zBHxBwsJyt0Y5U6MLro= +github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= +github.com/jedisct1/go-minisign v0.0.0-20190909160543-45766022959e/go.mod h1:G1CVv03EnqU1wYL2dFwXxW2An0az9JTl/ZsqXQeBlkU= +github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= +github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= +github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= +github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= +github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U= +github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= +github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= +github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +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/jsternberg/zap-logfmt v1.0.0/go.mod h1:uvPs/4X51zdkcm5jXl5SYoN+4RK21K8mysFmDaM/h+o= +github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +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/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= +github.com/jwilder/encoding v0.0.0-20170811194829-b4e1701a28ef/go.mod h1:Ct9fl0F6iIOGgxJ5npU/IUOhOhqlVrGjyIZc8/MagT0= +github.com/karalabe/usb v0.0.2/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= +github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs= +github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= +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/klauspost/compress v1.4.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.11.2/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= +github.com/klauspost/compress v1.15.11 h1:Lcadnb3RKGin4FYM/orgq0qde+nc15E5Cbqg4B9Sx9c= +github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= +github.com/klauspost/compress v1.16.3 h1:XuJt9zzcnaz6a16/OU53ZjWp/v7/42WcR5t2a0PcNQY= +github.com/klauspost/compress v1.16.3/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/klauspost/cpuid/v2 v2.2.3 h1:sxCkb+qR91z4vsqw4vGGZlDgPz3G7gjaLyK3V8y70BU= +github.com/klauspost/cpuid/v2 v2.2.3/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= +github.com/klauspost/crc32 v0.0.0-20161016154125-cb6bfca970f6/go.mod h1:+ZoRqAPRLkC4NPOvfYeR5KNOrY6TD+/sAC3HXPZgDYg= +github.com/klauspost/pgzip v1.0.2-0.20170402124221-0bf5dcad4ada/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= +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.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 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +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/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= +github.com/labstack/echo/v4 v4.2.1/go.mod h1:AA49e0DZ8kk5jTOOCKNuPR6oTnBS0dYiM4FW1e6jwpg= +github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= +github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= +github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= +github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.10.6 h1:jbk+ZieJ0D7EVGJYpL9QTz7/YW6UHbmdnZWYyK5cdBs= +github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw= +github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= +github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= +github.com/libp2p/go-libp2p v0.22.0 h1:2Tce0kHOp5zASFKJbNzRElvh0iZwdtG5uZheNW8chIw= +github.com/libp2p/go-libp2p v0.22.0/go.mod h1:UDolmweypBSjQb2f7xutPnwZ/fxioLbMBxSjRksxxU4= +github.com/libp2p/go-libp2p-core v0.15.1 h1:0RY+Mi/ARK9DgG1g9xVQLb8dDaaU8tCePMtGALEfBnM= +github.com/libp2p/go-libp2p-core v0.15.1/go.mod h1:agSaboYM4hzB1cWekgVReqV5M4g5M+2eNNejV+1EEhs= +github.com/libp2p/go-libp2p-core v0.20.1 h1:fQz4BJyIFmSZAiTbKV8qoYhEH5Dtv/cVhZbG3Ib/+Cw= +github.com/libp2p/go-libp2p-core v0.20.1/go.mod h1:6zR8H7CvQWgYLsbG4on6oLNSGcyKaYFSEYyDt51+bIY= +github.com/libp2p/go-openssl v0.0.7 h1:eCAzdLejcNVBzP/iZM9vqHnQm+XyCEbSSIheIPRGNsw= +github.com/libp2p/go-openssl v0.0.7/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= +github.com/libp2p/go-openssl v0.1.0 h1:LBkKEcUv6vtZIQLVTegAil8jbNpJErQ9AnT+bWV+Ooo= +github.com/libp2p/go-openssl v0.1.0/go.mod h1:OiOxwPpL3n4xlenjx2h7AwSGaFSC/KZvf6gNdOBQMtc= +github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= +github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= +github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= +github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= +github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/magiconair/properties v1.8.6 h1:5ibWZ6iY0NctNGWo87LalDlEZ6R41TqbbDamhfG/Qzo= +github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= +github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= +github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= +github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/manifoldco/promptui v0.9.0 h1:3V4HzJk1TtXW1MTZMP7mdlwbBpIinw3HztaIlYthEiA= +github.com/manifoldco/promptui v0.9.0/go.mod h1:ka04sppxSGFAtxX0qhlYQjISsg9mR4GWtQEhdbn6Pgg= +github.com/matryer/moq v0.0.0-20190312154309-6cfb0558e1bd/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ= +github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= +github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= +github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-pointer v0.0.1 h1:n+XhsuGeVO6MEAp7xyEukFINEa+Quek5psIR/ylA6o0= +github.com/mattn/go-pointer v0.0.1/go.mod h1:2zXcozF6qYGgmsG+SeTZz3oAbFLdD3OWqnUbNvJZAlc= +github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= +github.com/mattn/go-sqlite3 v1.14.16 h1:yOQRA0RpS5PFz/oikGwBEqvAWhWg5ufRz4ETLjwpU1Y= +github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= +github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= +github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= +github.com/mimoo/StrobeGo v0.0.0-20220103164710-9a04d6ca976b h1:QrHweqAtyJ9EwCaGHBu1fghwxIPiopAHV06JlXrMHjk= +github.com/mimoo/StrobeGo v0.0.0-20220103164710-9a04d6ca976b/go.mod h1:xxLb2ip6sSUts3g1irPVHyk/DGslwQsNOo9I7smJfNU= +github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= +github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= +github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g= +github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= +github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= +github.com/minio/sha256-simd v1.0.0 h1:v1ta+49hkWZyvaKwrQB8elexRqm6Y0aMLjCNsrYxo6g= +github.com/minio/sha256-simd v1.0.0/go.mod h1:OuYzVNI5vcoYIAmbIvHPl3N3jUzVedXbKy5RFepssQM= +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 h1:fzU/JVNcaqHQEcVFAKeR41fkiLdIPrefOvVG1VZ96U0= +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/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.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= +github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/pointerstructure v1.2.0/go.mod h1:BRAsLI5zgXmw97Lf6s25bs8ohIXc3tViBH44KcwB2g4= +github.com/moby/term v0.0.0-20220808134915-39b0c02b01ae h1:O4SWKdcHVCvYqyDV+9CJA1fcDN2L11Bule0iFy3YlAI= +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 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8= +github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= +github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= +github.com/mr-tron/base58 v1.1.3/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= +github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= +github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= +github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae/go.mod h1:qAyveg+e4CE+eKJXWVjKXM4ck2QobLqTDytGJbLLhJg= +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/multiformats/go-base32 v0.0.3 h1:tw5+NhuwaOjJCC5Pp82QuXbrmLzWg7uxlMFp8Nq/kkI= +github.com/multiformats/go-base32 v0.0.3/go.mod h1:pLiuGC8y0QR3Ue4Zug5UzK9LjgbkL8NSQj0zQ5Nz/AA= +github.com/multiformats/go-base32 v0.0.4 h1:+qMh4a2f37b4xTNs6mqitDinryCI+tfO2dRVMN9mjSE= +github.com/multiformats/go-base32 v0.0.4/go.mod h1:jNLFzjPZtp3aIARHbJRZIaPuspdH0J6q39uUM5pnABM= +github.com/multiformats/go-base36 v0.1.0 h1:JR6TyF7JjGd3m6FbLU2cOxhC0Li8z8dLNGQ89tUg4F4= +github.com/multiformats/go-base36 v0.1.0/go.mod h1:kFGE83c6s80PklsHO9sRn2NCoffoRdUUOENyW/Vv6sM= +github.com/multiformats/go-multiaddr v0.4.1 h1:Pq37uLx3hsyNlTDir7FZyU8+cFCTqd5y1KiM2IzOutI= +github.com/multiformats/go-multiaddr v0.4.1/go.mod h1:3afI9HfVW8csiF8UZqtpYRiDyew8pRX7qLIGHu9FLuM= +github.com/multiformats/go-multiaddr v0.6.0 h1:qMnoOPj2s8xxPU5kZ57Cqdr0hHhARz7mFsPMIiYNqzg= +github.com/multiformats/go-multiaddr v0.6.0/go.mod h1:F4IpaKZuPP360tOMn2Tpyu0At8w23aRyVqeK0DbFeGM= +github.com/multiformats/go-multibase v0.0.3 h1:l/B6bJDQjvQ5G52jw4QGSYeOTZoAwIO77RblWplfIqk= +github.com/multiformats/go-multibase v0.0.3/go.mod h1:5+1R4eQrT3PkYZ24C3W2Ue2tPwIdYQD509ZjSb5y9Oc= +github.com/multiformats/go-multibase v0.1.1 h1:3ASCDsuLX8+j4kx58qnJ4YFq/JWTJpCyDW27ztsVTOI= +github.com/multiformats/go-multibase v0.1.1/go.mod h1:ZEjHE+IsUrgp5mhlEAYjMtZwK1k4haNkcaPg9aoe1a8= +github.com/multiformats/go-multicodec v0.4.1 h1:BSJbf+zpghcZMZrwTYBGwy0CPcVZGWiC72Cp8bBd4R4= +github.com/multiformats/go-multicodec v0.4.1/go.mod h1:1Hj/eHRaVWSXiSNNfcEPcwZleTmdNP81xlxDLnWU9GQ= +github.com/multiformats/go-multicodec v0.5.0 h1:EgU6cBe/D7WRwQb1KmnBvU7lrcFGMggZVTPtOW9dDHs= +github.com/multiformats/go-multicodec v0.5.0/go.mod h1:DiY2HFaEp5EhEXb/iYzVAunmyX/aSFMxq2KMKfWEues= +github.com/multiformats/go-multihash v0.0.13/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= +github.com/multiformats/go-multihash v0.0.14/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= +github.com/multiformats/go-multihash v0.1.0 h1:CgAgwqk3//SVEw3T+6DqI4mWMyRuDwZtOWcJT0q9+EA= +github.com/multiformats/go-multihash v0.1.0/go.mod h1:RJlXsxt6vHGaia+S8We0ErjhojtKzPP2AH4+kYM7k84= +github.com/multiformats/go-multihash v0.2.1 h1:aem8ZT0VA2nCHHk7bPJ1BjUbHNciqZC/d16Vve9l108= +github.com/multiformats/go-multihash v0.2.1/go.mod h1:WxoMcYG85AZVQUyRyo9s4wULvW5qrI9vb2Lt6evduFc= +github.com/multiformats/go-varint v0.0.5/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= +github.com/multiformats/go-varint v0.0.6 h1:gk85QWKxh3TazbLxED/NlDVv8+q+ReFJk7Y2W/KhfNY= +github.com/multiformats/go-varint v0.0.6/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= +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/mwitkow/grpc-proxy v0.0.0-20181017164139-0f1106ef9c76/go.mod h1:x5OoJHDHqxHS801UIuhqGl6QdSAEJvtausosHSdazIo= +github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= +github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= +github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= +github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= +github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= +github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= +github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= +github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= +github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= +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/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= +github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= +github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= +github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= +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/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 h1:4ieX6qQjPP/BfC3mpsAtIGGlxTWPeA3Inl/7DtXw1tw= +github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= +github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= +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.0-rc2 h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034= +github.com/opencontainers/image-spec v1.1.0-rc2/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ= +github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= +github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= +github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/opentracing/opentracing-go v1.0.3-0.20180606204148-bd9c31933947/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= +github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= +github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= +github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= +github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= +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/paulbellamy/ratecounter v0.2.0/go.mod h1:Hfx1hDpSGoqxkVVpBi/IlYD7kChlfo5C6hzIHwPqfFE= +github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= +github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +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.5 h1:ipoSadvV8oGUjnUbMub59IDPPwfxF694nG/jwbMiyQg= +github.com/pelletier/go-toml/v2 v2.0.5/go.mod h1:OMHamSCAODeSsVrwwvcJOaoN0LIUIaFVNZzmWyNfXas= +github.com/pelletier/go-toml/v2 v2.0.6 h1:nrzqCb7j9cDFj2coyLNLaZuJTLjWjlaz6nvTvIwycIU= +github.com/pelletier/go-toml/v2 v2.0.6/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek= +github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= +github.com/peterh/liner v1.0.1-0.20180619022028-8c1271fcf47f/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc= +github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= +github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 h1:q2e307iGHPdTGp0hoxKjt1H5pDo6utceo3dQVK3I5XQ= +github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= +github.com/petermattis/goid v0.0.0-20221215004737-a150e88a970d h1:htwtWgtQo8YS6JFWWi2DNgY0RwSGJ1ruMoxY6CUUclk= +github.com/petermattis/goid v0.0.0-20221215004737-a150e88a970d/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= +github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= +github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= +github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pierrec/xxHash v0.1.5 h1:n/jBpwTHiER4xYvK3/CdPVnLDPchj8eTJFFLUb4QHBo= +github.com/pierrec/xxHash v0.1.5/go.mod h1:w2waW5Zoa/Wc4Yqe0wgrIYAGKqRMf7czn2HNKXmuL+I= +github.com/pierrre/gotestcover v0.0.0-20160517101806-924dca7d15f0/go.mod h1:4xpMLz7RBWyB+ElzHu8Llua96TRCB3YwX+l5EP1wmHk= +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/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= +github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= +github.com/pkg/term v0.0.0-20180730021639-bffc007b7fd5/go.mod h1:eCbImbZ95eXtAUIbLAuAVnBnwf83mjf6QIVH8SHYwqQ= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= +github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= +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.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= +github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= +github.com/prometheus/client_golang v1.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw= +github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/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.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4= +github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= +github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= +github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= +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.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= +github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= +github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/common v0.37.0 h1:ccBbHCgIiT9uSoFY0vX8H3zsNR5eLt17/RQLUvn8pXE= +github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= +github.com/prometheus/common v0.40.0 h1:Afz7EVRqGg2Mqqf4JuF9vdvp1pi220m55Pi9T2JnO4Q= +github.com/prometheus/common v0.40.0/go.mod h1:L65ZJPSmfn/UBWLQIHV7dBrKFidB/wPlF1y5TlSt9OE= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/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.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/prometheus/procfs v0.8.0 h1:ODq8ZFEaYeCaZOJlZZdJA2AbQR98dSHSM1KW/You5mo= +github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= +github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI= +github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY= +github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ= +github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Unghqrcc= +github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= +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/regen-network/cosmos-proto v0.3.1 h1:rV7iM4SSFAagvy8RiyhiACbWEGotmqzywPxOvwMdxcg= +github.com/regen-network/cosmos-proto v0.3.1/go.mod h1:jO0sVX6a1B36nmE8C9xBFXpNwWejXC7QqCOnH3O0+YM= +github.com/regen-network/protobuf v1.3.3-alpha.regen.1 h1:OHEc+q5iIAXpqiqFKeLpu5NwTIkVXUs48vFMwzqpqY4= +github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI= +github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= +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/retailnext/hllpp v1.0.1-0.20180308014038-101a6d2f8b52/go.mod h1:RDpi1RftBQPUCDRw6SmxeaREsAaRKnOclghuzp/WRzc= +github.com/rivo/tview v0.0.0-20220307222120-9994674d60a8/go.mod h1:WIfMkQNY+oq/mWwtsjOYHIZBuwthioY2srOmljJkTnk= +github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +github.com/rivo/uniseg v0.4.3/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/rjeczalik/notify v0.9.1/go.mod h1:rKwnCoCGeuQnwBtTSPL9Dad03Vh2n40ePRrjvIXnJho= +github.com/robertkrimen/godocdown v0.0.0-20130622164427-0bfa04905481/go.mod h1:C9WhFzY47SzYBIvzFqSvHIR6ROgDo4TtdTuRaOMjF/s= +github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= +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 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k= +github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= +github.com/rs/cors v1.8.2 h1:KCooALfAYGs415Cwu5ABvv9n9509fSiG5SQJn/AQo4U= +github.com/rs/cors v1.8.2/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= +github.com/rs/cors v1.8.3 h1:O+qNyWn7Z+F9M0ILBHgMVPuB1xTOucVd5gtaYyXBpRo= +github.com/rs/cors v1.8.3/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= +github.com/rs/zerolog v1.27.0 h1:1T7qCieN22GVc8S4Q2yuexzBb1EqjbgjSH9RohbMjKs= +github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +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/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= +github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71efZx0= +github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/segmentio/kafka-go v0.1.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= +github.com/segmentio/kafka-go v0.2.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= +github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible h1:Bn1aCHHRnjv4Bl16T8rcaFjYSrGrIZvpiGO6P3Q4GpU= +github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +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.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= +github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +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/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= +github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 h1:RC6RW7j+1+HkWaX/Yh71Ee5ZHaHYt7ZP4sQgUrm6cDU= +github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572/go.mod h1:w0SWMsp6j9O/dk4/ZpIhL+3CkG8ofA2vuv7k+ltqUMc= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= +github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/afero v1.9.2 h1:j49Hj62F0n+DaZ1dDCvhABaPNSGNkt32oRFxI33IEMw= +github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= +github.com/spf13/afero v1.9.3 h1:41FoI0fD7OR7mGcKE/aOiLkGreyf8ifIOQmJANWogMk= +github.com/spf13/afero v1.9.3/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= +github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= +github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= +github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= +github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= +github.com/spf13/cobra v1.6.1 h1:o94oiPyS4KD1mPy2fmcYYHHfCxLqYjJOhGsCHFZtEzA= +github.com/spf13/cobra v1.6.1/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY= +github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= +github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= +github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= +github.com/spf13/viper v1.14.0 h1:Rg7d3Lo706X9tHsJMUjdiwMpHB7W8WnSVOssIY+JElU= +github.com/spf13/viper v1.14.0/go.mod h1:WT//axPky3FdvXHzGw33dNdXXXfFQqmEalje+egj8As= +github.com/spf13/viper v1.15.0 h1:js3yy885G8xwJa6iOISGFwd+qlUo5AvyXb7CiihdtiU= +github.com/spf13/viper v1.15.0/go.mod h1:fFcTBJxvhhzSJiZy8n+PeW6t8l+KeT/uTARa0jHOQLA= +github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q= +github.com/strangelove-ventures/go-subkey v1.0.7 h1:cOP/Lajg3uxV/tvspu0m6+0Cu+DJgygkEAbx/s+f35I= +github.com/strangelove-ventures/go-subkey v1.0.7/go.mod h1:E34izOIEm+sZ1YmYawYRquqBQWeZBjVB4pF7bMuhc1c= +github.com/strangelove-ventures/interchaintest/v7 v7.0.0-20230326163644-f0ba01f43314 h1:8CwqFPbiUZCz1KTeWB+peF2RMbFva2wL0Z6fjHJyEdc= +github.com/strangelove-ventures/interchaintest/v7 v7.0.0-20230326163644-f0ba01f43314/go.mod h1:+Tg2jC5C0eI2iOTs24OYs0NgSjU4Bw5XAQ5HVkVMwzc= +github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= +github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= +github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= +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.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.2.0/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 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= +github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/subosito/gotenv v1.4.1 h1:jyEFiXpy21Wm81FBN71l9VoMMV8H8jG+qIK3GCpY6Qs= +github.com/subosito/gotenv v1.4.1/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= +github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8= +github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= +github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= +github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a h1:1ur3QoCqvE5fl+nylMaIr9PVV1w343YRDtsy+Rwu7XI= +github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a/go.mod h1:RRCYJbIwD5jmqPI9XoAFR0OcDxqUctll6zUj/+B4S48= +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/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c h1:g+WoO5jjkqGAzHWCjJB1zZfXPIAaDpzXIEJ0eS6B5Ok= +github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c/go.mod h1:ahpPrc7HpcfEWDQRZEmnXMzHY03mLDYMCxeDzy46i+8= +github.com/tendermint/btcd v0.1.1 h1:0VcxPfflS2zZ3RiOAHkBiFUcPvbtRj5O7zHmcJWHV7s= +github.com/tendermint/btcd v0.1.1/go.mod h1:DC6/m53jtQzr/NFmMNEu0rxf18/ktVoVtMrnDD5pN+U= +github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15 h1:hqAk8riJvK4RMWx1aInLzndwxKalgi5rTqgfXxOxbEI= +github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15/go.mod h1:z4YtwM70uOnk8h0pjJYlj3zdYwi9l03By6iAIF5j/Pk= +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/tendermint/tendermint v0.34.24 h1:879MKKJWYYPJEMMKME+DWUTY4V9f/FBpnZDI82ky+4k= +github.com/tendermint/tendermint v0.34.24/go.mod h1:rXVrl4OYzmIa1I91av3iLv2HS0fGSiucyW9J4aMTpKI= +github.com/tendermint/tm-db v0.6.7 h1:fE00Cbl0jayAoqlExN6oyQJ7fR/ZtoVOmvPJ//+shu8= +github.com/tendermint/tm-db v0.6.7/go.mod h1:byQDzFkZV1syXr/ReXS808NxA2xvyuuVgXOJ/088L6I= +github.com/tidwall/btree v1.6.0 h1:LDZfKfQIBHGHWSwckhXI0RPSXzlo+KYdjK7FWSqOzzg= +github.com/tidwall/btree v1.6.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= +github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= +github.com/tklauser/go-sysconf v0.3.5 h1:uu3Xl4nkLzQfXNsWn15rPc/HQCJKObbt1dKJeWp3vU4= +github.com/tklauser/go-sysconf v0.3.5/go.mod h1:MkWzOF4RMCshBAMXuhXJs64Rte09mITnppBXY/rYEFI= +github.com/tklauser/numcpus v0.2.2 h1:oyhllyrScuYI6g+h/zUvNXNp1wy7x8qQy3t/piefldA= +github.com/tklauser/numcpus v0.2.2/go.mod h1:x3qojaO3uyYt0i56EW/VUYs7uBvdl2fkfZFu0T9wgjM= +github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= +github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= +github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= +github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= +github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= +github.com/ulikunitz/xz v0.5.8 h1:ERv8V6GKqVi23rgu5cj9pVfVzJbOqAY2Ntl88O6c2nQ= +github.com/ulikunitz/xz v0.5.8/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= +github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= +github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= +github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= +github.com/willf/bitset v1.1.3/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= +github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= +github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +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.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/zondax/hid v0.9.1 h1:gQe66rtmyZ8VeGFcOpbuH3r7erYtNEAezCAYu8LdkJo= +github.com/zondax/hid v0.9.1/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= +github.com/zondax/ledger-go v0.14.0 h1:dlMC7aO8Wss1CxBq2I96kZ69Nh1ligzbs8UWOtq/AsA= +github.com/zondax/ledger-go v0.14.0/go.mod h1:fZ3Dqg6qcdXWSOJFKMG8GCTnD7slO/RL2feOQv8K320= +github.com/zondax/ledger-go v0.14.1 h1:Pip65OOl4iJ84WTpA4BKChvOufMhhbxED3BaihoZN4c= +github.com/zondax/ledger-go v0.14.1/go.mod h1:fZ3Dqg6qcdXWSOJFKMG8GCTnD7slO/RL2feOQv8K320= +go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/bbolt v1.3.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU= +go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= +go.etcd.io/bbolt v1.3.7 h1:j+zJOnnEjF/kyHlDDgGnVL/AIqIJPq8UoB2GSNfkUfQ= +go.etcd.io/bbolt v1.3.7/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= +go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= +go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= +go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= +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 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M= +go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= +go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= +go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= +go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +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.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= +go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= +go.uber.org/goleak v1.1.12 h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA= +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.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= +go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= +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.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= +go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= +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-20181203042331-505ab145d0a9/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-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-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190909091759-094676da4a83/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/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-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= +golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= +golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.2.0 h1:BRXPfhNivWL5Yq0BGQ39a2sW6t44aODpfxkWjYdzewE= +golang.org/x/crypto v0.2.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= +golang.org/x/crypto v0.7.0 h1:AvwMYaRytfdeVt3u6mLaxYtErKYjxA2OXjJ1HHq6t3A= +golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= +golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/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-20190125153040-c74c464bbbf2/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-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= +golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e h1:+WEEuIdZHnUeJJmEUjyYC2gfUMj69yZXw17EnHg/otA= +golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA= +golang.org/x/exp v0.0.0-20230310171629-522b1b587ee0 h1:LGJsf5LRplCck6jUCH3dBL2dmycNruWNF5xugkSlfXw= +golang.org/x/exp v0.0.0-20230310171629-522b1b587ee0/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= +golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= +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.6.0 h1:b9gGHsz9/HhJ3HF5DHQytPpuwocVTChQJK3AvoLRD5I= +golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI= +golang.org/x/mod v0.9.0 h1:KENHtAZL2y3NLMYZeHY9DW8HW8V+kQyJsY/V9JlKvCs= +golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +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-20181220203305-927f97764cc3/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-20190125091013-d26f9f9a57f3/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-20200421231249-e086a090c8fd/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-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +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-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210220033124-5f55cee0dc0d/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-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-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210610132358-84b48f89b13b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/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-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/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.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= +golang.org/x/net v0.2.0 h1:sZfSu1wtKLGlWI4ZZayP0ck9Y73K1ynO6gqzTdBVdPU= +golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= +golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ= +golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= +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-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783 h1:nt+Q6cXKz4MosCSpnbMtqiQ8Oz0pxTef2B4Vca2lvfk= +golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= +golang.org/x/oauth2 v0.5.0 h1:HuArIo48skDwlrvM3sEdHXElYslAMsf3KwRkkW4MC4s= +golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I= +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-20220601150217-0de741cfad7f/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.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +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-20181107165924-66b7b1311ac8/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-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190130150945-aca44879d564/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-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-20190626221950-04f50cda93cb/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-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/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-20191220142924-d4481acd189f/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-20200107162124-548cf772de50/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-20200420163511-1957bb5e6d1f/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-20200826173525-f9321e4c35a6/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/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-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-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210309074719-68d13333faf2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210316164454-77fc1eacc6aa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210420205809-ac73e9fd8988/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/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-20210514084401-e8d321eab015/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-20210603125802-9665404d3644/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-20210616094352-59db8d763f22/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-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210819135213-f52c844e1c1c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211107104306-e0b2ad06fe42/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211210111614-af8b64212486/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-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220315194320-039c03cc5b86/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/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-20220502124256-b6088ccd6cba/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-20220517195934-5e4e11fc645e/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-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.2.0 h1:ljd4t30dBnAvMZaQCevtY0xLLD0A+bRZXbgLMLU1F/A= +golang.org/x/sys v0.2.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 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +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-20201210144234-2321bbc49cbf/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.2.0 h1:z85xZCsEl7bi/KwbNADeBYoOP0++7W1ipu+aGnpwzRM= +golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.6.0 h1:clScbb1cHjoCkyRbWwBEUZ5H/tIFu5TAXIqaZD0Gcjw= +golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= +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.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg= +golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68= +golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-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.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20220609170525-579cf78fd858 h1:Dpdu/EMxGMFgq0CeYMh4fazTD2vtlZRYE7wyynxJb9U= +golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/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-20190206041539-40960b6deb8e/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-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-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-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-20200108203644-89082a384178/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.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.7/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.2.0 h1:G6AHpWxTMGY1KyEYoAQ5WTtIekUUvDNjan3ugu60JvE= +golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA= +golang.org/x/tools v0.7.0 h1:W4OVu8VVOaIO0yzWMNdepAulS7YfoS3Zabrm8DOXXU4= +golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= +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-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= +golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= +gonum.org/v1/gonum v0.0.0-20181121035319-3f7ecaa7e8ca/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= +gonum.org/v1/gonum v0.6.0/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU= +gonum.org/v1/netlib v0.0.0-20181029234149-ec6d1f5cefe6/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= +gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= +gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= +google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= +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.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= +google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= +google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= +google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= +google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= +google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= +google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= +google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= +google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= +google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= +google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= +google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= +google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= +google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= +google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= +google.golang.org/api v0.77.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= +google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= +google.golang.org/api v0.80.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg= +google.golang.org/api v0.84.0/go.mod h1:NTsGnUFJMYROtiquksZHBWtHfeMC7iYthki7Eq3pa8o= +google.golang.org/api v0.85.0/go.mod h1:AqZf8Ep9uZ2pyTvgL+x0D3Zt0eoT9b5E8fmzfu6FO2g= +google.golang.org/api v0.90.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= +google.golang.org/api v0.93.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= +google.golang.org/api v0.95.0/go.mod h1:eADj+UBuxkh5zlrSntJghuNeg8HwQ1w5lTKkuqaETEI= +google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= +google.golang.org/api v0.102.0 h1:JxJl2qQ85fRMPNvlZY/enexbxpCjLwGhZUtgfGeQ51I= +google.golang.org/api v0.102.0/go.mod h1:3VFl6/fzoA+qNuS1N1/VfXY4LjoXN/wzeIp7TweWwGo= +google.golang.org/api v0.110.0 h1:l+rh0KYUooe9JGbGVx71tbFo4SMbMTXK3I3ia2QSEeU= +google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +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 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= +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-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= +google.golang.org/genproto v0.0.0-20190716160619-c506a9f90610/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +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-20200108215221-bd8f9a0ef82f/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-20200324203455-a04cca1dde73/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/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-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210126160654-44e461bb6506/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-20210226172003-ab064af71705/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-20210329143202-679c6ae281ee/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-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= +google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= +google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= +google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220314164441-57ef72a4c106/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= +google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= +google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220628213854-d9e0b6570c03/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220722212130-b98a9ff5e252/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE= +google.golang.org/genproto v0.0.0-20220801145646-83ce21fca29f/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= +google.golang.org/genproto v0.0.0-20220815135757-37a418bb8959/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220817144833-d7fd3f11b9b1/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220829144015-23454907ede3/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220829175752-36a9c930ecbf/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220913154956-18f8339a66a5/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220914142337-ca0e39ece12f/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220915135415-7fd63a7952de/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220916172020-2692e8806bfa/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220919141832-68c03719ef51/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220920201722-2b89144ce006/go.mod h1:ht8XFiar2npT/g4vkk7O0WYS1sHOHbdujxbEp7CJWbw= +google.golang.org/genproto v0.0.0-20220926165614-551eb538f295/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= +google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= +google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqwhZAwq4wsRUaVG555sVgsNmIjRtO7t/JH29U= +google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= +google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= +google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e h1:S9GbmC1iCgvbLyAokVCwiO6tVIrU9Y7c5oMx1V/ki/Y= +google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= +google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= +google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44 h1:EfLuoKW5WfkgVdDy7dTK8qSbH37AX5mj/MFh+bGPz14= +google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44/go.mod h1:8B0gmkoRebU8ukX6HP+4wrVQUY1+6PkQ44BSyIlflHA= +google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.19.1/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.23.1/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.32.0/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.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= +google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= +google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= +google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.50.1 h1:DS/BukOZWp8s6p4Dt/tOaJaTQyPyOoCcrjroHuCeLzY= +google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.53.0 h1:LAv2ds7cmFV/XTS3XG1NneeENYrXGmorPxsBbptIjNc= +google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= +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.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.28.2-0.20220831092852-f930b1dc76e8 h1:KR8+MyP7/qOlV+8Af01LtjL04bu7on42eVsxT4EyBQk= +google.golang.org/protobuf v1.28.2-0.20220831092852-f930b1dc76e8/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.29.1 h1:7QBf+IK2gx70Ap/hDsOmam3GE0v9HicjfEdAxE62UoM= +google.golang.org/protobuf v1.29.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +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/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= +gopkg.in/cheggaaa/pb.v1 v1.0.27/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= +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/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= +gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= +gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce h1:+JknDZhAj8YMt7GC73Ei8pv4MzjDUNPHgQWJdtMAaDU= +gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= +gopkg.in/olebedev/go-duktape.v3 v3.0.0-20200619000410-60c24ae608a6/go.mod h1:uAJfkITjFhyEEuUfm7bsmCZRbW5WRq8s9EY8HZ6hCns= +gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= +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/urfave/cli.v1 v1.20.0/go.mod h1:vuBzUtMdQeixQj8LVd+/98pzhxNGQoyuPBlsXHOQNO0= +gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= +gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= +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 v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= +gotest.tools/v3 v3.3.0 h1:MfDY1b1/0xN1CyMlQDac0ziEy9zJQd9CXBRRDHw2jJo= +honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +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= +lukechampine.com/blake3 v1.1.6 h1:H3cROdztr7RCfoaTpGZFQsrqvweFLrqS73j7L7cmR5c= +lukechampine.com/blake3 v1.1.6/go.mod h1:tkKEOtDkNtklkXtLNEOGNq5tcV90tJiA1vAA12R78LA= +lukechampine.com/blake3 v1.1.7 h1:GgRMhmdsuK8+ii6UZFDL8Nb+VyMwadAgcJyfYHxG6n0= +lukechampine.com/blake3 v1.1.7/go.mod h1:tkKEOtDkNtklkXtLNEOGNq5tcV90tJiA1vAA12R78LA= +lukechampine.com/uint128 v1.2.0 h1:mBi/5l91vocEN8otkC5bDLhi2KdCticRiwbdB0O+rjI= +lukechampine.com/uint128 v1.2.0/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= +modernc.org/cc/v3 v3.40.0 h1:P3g79IUS/93SYhtoeaHW+kRCIrYaxJ27MFPv+7kaTOw= +modernc.org/cc/v3 v3.40.0/go.mod h1:/bTg4dnWkSXowUO6ssQKnOV0yMVxDYNIsIrzqTFDGH0= +modernc.org/ccgo/v3 v3.16.13 h1:Mkgdzl46i5F/CNR/Kj80Ri59hC8TKAhZrYSaqvkwzUw= +modernc.org/ccgo/v3 v3.16.13/go.mod h1:2Quk+5YgpImhPjv2Qsob1DnZ/4som1lJTodubIcoUkY= +modernc.org/ccorpus v1.11.6 h1:J16RXiiqiCgua6+ZvQot4yUuUy8zxgqbqEEUuGPlISk= +modernc.org/httpfs v1.0.6 h1:AAgIpFZRXuYnkjftxTAZwMIiwEqAfk8aVB2/oA6nAeM= +modernc.org/libc v1.22.3 h1:D/g6O5ftAfavceqlLOFwaZuA5KYafKwmr30A6iSqoyY= +modernc.org/libc v1.22.3/go.mod h1:MQrloYP209xa2zHome2a8HLiLm6k0UT8CoHpV74tOFw= +modernc.org/mathutil v1.5.0 h1:rV0Ko/6SfM+8G+yKiyI830l3Wuz1zRutdslNoQ0kfiQ= +modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/memory v1.5.0 h1:N+/8c5rE6EqugZwHii4IFsaJ7MUhoWX07J5tC/iI5Ds= +modernc.org/memory v1.5.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= +modernc.org/opt v0.1.3 h1:3XOZf2yznlhC+ibLltsDGzABUGVx8J6pnFMS3E4dcq4= +modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= +modernc.org/sqlite v1.21.0 h1:4aP4MdUf15i3R3M2mx6Q90WHKz3nZLoz96zlB6tNdow= +modernc.org/sqlite v1.21.0/go.mod h1:XwQ0wZPIh1iKb5mkvCJ3szzbhk+tykC8ZWqTRTgYRwI= +modernc.org/strutil v1.1.3 h1:fNMm+oJklMGYfU9Ylcywl0CO5O6nTfaowNsh2wpPjzY= +modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw= +modernc.org/tcl v1.15.1 h1:mOQwiEK4p7HruMZcwKTZPw/aqtGM4aY00uzWhlKKYws= +modernc.org/token v1.0.1 h1:A3qvTqOwexpfZZeyI0FeGPDlSWX5pjZu9hF4lU+EKWg= +modernc.org/token v1.0.1/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= +modernc.org/z v1.7.0 h1:xkDw/KepgEjeizO2sNco+hqYkU12taxQFqPEmgm1GWE= +nhooyr.io/websocket v1.8.6 h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k= +nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= +pgregory.net/rapid v0.5.3 h1:163N50IHFqr1phZens4FQOdPgfJscR7a562mjQqeo4M= +pgregory.net/rapid v0.5.5 h1:jkgx1TjbQPD/feRoK+S/mXw9e1uj6WilpHrXJowi6oA= +pgregory.net/rapid v0.5.5/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= +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.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= +sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= +sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= +sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= From 591b14535ab1aa361eee7eafda577fc0262cdb77 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 28 Mar 2023 20:59:42 +0000 Subject: [PATCH 003/501] Bump cosmossdk.io/math from 1.0.0-rc.0 to 1.0.0 Bumps [cosmossdk.io/math](https://github.com/cosmos/cosmos-sdk) from 1.0.0-rc.0 to 1.0.0. - [Release notes](https://github.com/cosmos/cosmos-sdk/releases) - [Changelog](https://github.com/cosmos/cosmos-sdk/blob/main/CHANGELOG.md) - [Commits](https://github.com/cosmos/cosmos-sdk/compare/math/v1.0.0-rc.0...math/v1.0.0) --- updated-dependencies: - dependency-name: cosmossdk.io/math dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index f636178f..98433e93 100644 --- a/go.mod +++ b/go.mod @@ -34,7 +34,7 @@ require ( require ( cosmossdk.io/api v0.3.1 cosmossdk.io/errors v1.0.0-beta.7 - cosmossdk.io/math v1.0.0-rc.0 + cosmossdk.io/math v1.0.0 cosmossdk.io/tools/rosetta v0.2.1 github.com/CosmWasm/wasmd v0.40.0-rc.0 github.com/cometbft/cometbft v0.37.0 diff --git a/go.sum b/go.sum index 230b1da2..84f75556 100644 --- a/go.sum +++ b/go.sum @@ -196,8 +196,8 @@ cosmossdk.io/depinject v1.0.0-alpha.3 h1:6evFIgj//Y3w09bqOUOzEpFj5tsxBqdc5CfkO7z cosmossdk.io/depinject v1.0.0-alpha.3/go.mod h1:eRbcdQ7MRpIPEM5YUJh8k97nxHpYbc3sMUnEtt8HPWU= cosmossdk.io/errors v1.0.0-beta.7 h1:gypHW76pTQGVnHKo6QBkb4yFOJjC+sUGRc5Al3Odj1w= cosmossdk.io/errors v1.0.0-beta.7/go.mod h1:mz6FQMJRku4bY7aqS/Gwfcmr/ue91roMEKAmDUDpBfE= -cosmossdk.io/math v1.0.0-rc.0 h1:ml46ukocrAAoBpYKMidF0R2tQJ1Uxfns0yH8wqgMAFc= -cosmossdk.io/math v1.0.0-rc.0/go.mod h1:Ygz4wBHrgc7g0N+8+MrnTfS9LLn9aaTGa9hKopuym5k= +cosmossdk.io/math v1.0.0 h1:ro9w7eKx23om2tZz/VM2Pf+z2WAbGX1yDQQOJ6iGeJw= +cosmossdk.io/math v1.0.0/go.mod h1:Ygz4wBHrgc7g0N+8+MrnTfS9LLn9aaTGa9hKopuym5k= cosmossdk.io/tools/rosetta v0.2.1 h1:ddOMatOH+pbxWbrGJKRAawdBkPYLfKXutK9IETnjYxw= cosmossdk.io/tools/rosetta v0.2.1/go.mod h1:Pqdc1FdvkNV3LcNIkYWt2RQY6IP1ge6YWZk8MhhO9Hw= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= From 6310772020449c21a3a2f15384ebea00eabadb6f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 28 Mar 2023 21:00:32 +0000 Subject: [PATCH 004/501] Bump github.com/cosmos/cosmos-proto from 1.0.0-beta.2 to 1.0.0-beta.3 Bumps [github.com/cosmos/cosmos-proto](https://github.com/cosmos/cosmos-proto) from 1.0.0-beta.2 to 1.0.0-beta.3. - [Release notes](https://github.com/cosmos/cosmos-proto/releases) - [Commits](https://github.com/cosmos/cosmos-proto/compare/v1.0.0-beta.2...v1.0.0-beta.3) --- updated-dependencies: - dependency-name: github.com/cosmos/cosmos-proto dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index f636178f..7d472637 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.19 require ( github.com/CosmWasm/wasmvm v1.2.1 - github.com/cosmos/cosmos-proto v1.0.0-beta.2 // indirect + github.com/cosmos/cosmos-proto v1.0.0-beta.3 // indirect github.com/cosmos/cosmos-sdk v0.47.0 github.com/cosmos/gogogateway v1.2.0 // indirect github.com/cosmos/gogoproto v1.4.6 diff --git a/go.sum b/go.sum index 230b1da2..95044cad 100644 --- a/go.sum +++ b/go.sum @@ -317,8 +317,8 @@ github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7 github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= 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-proto v1.0.0-beta.2 h1:X3OKvWgK9Gsejo0F1qs5l8Qn6xJV/AzgIWR2wZ8Nua8= -github.com/cosmos/cosmos-proto v1.0.0-beta.2/go.mod h1:+XRCLJ14pr5HFEHIUcn51IKXD1Fy3rkEQqt4WqmN4V0= +github.com/cosmos/cosmos-proto v1.0.0-beta.3 h1:VitvZ1lPORTVxkmF2fAp3IiA61xVwArQYKXTdEcpW6o= +github.com/cosmos/cosmos-proto v1.0.0-beta.3/go.mod h1:t8IASdLaAq+bbHbjq4p960BvcTqtwuAxid3b/2rOD6I= github.com/cosmos/cosmos-sdk v0.47.0 h1:GKYtBpvjwuDEVix1vdnQpq7PuEOnItuEK0vdAL2cZ5g= github.com/cosmos/cosmos-sdk v0.47.0/go.mod h1:FTtZbqiHCZ2vun9WrPq6qLQafNKkAuIhLAxzLjr2TiI= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= From 18738e33a8b80fc57e52a9fe609c4c88b93315b4 Mon Sep 17 00:00:00 2001 From: Ash Date: Fri, 31 Mar 2023 14:43:38 +0100 Subject: [PATCH 005/501] mint module, issues generating protos --- app/app.go | 7 +- go.mod | 19 +- go.sum | 2 +- proto/cosmos/msg/v1/msg.proto | 31 + proto/cosmwasm/wasm/v1/authz.proto | 118 -- proto/cosmwasm/wasm/v1/genesis.proto | 46 - proto/cosmwasm/wasm/v1/ibc.proto | 37 - proto/cosmwasm/wasm/v1/proposal.proto | 272 ----- proto/cosmwasm/wasm/v1/query.proto | 262 ----- proto/cosmwasm/wasm/v1/tx.proto | 236 ---- proto/cosmwasm/wasm/v1/types.proto | 145 --- proto/xion/mint/v1/event.proto | 30 + proto/xion/mint/v1/genesis.proto | 19 + proto/xion/mint/v1/mint.proto | 59 + proto/xion/mint/v1/query.proto | 67 ++ proto/xion/mint/v1/tx.proto | 45 + scripts/protocgen.sh | 4 +- x/mint/README.md | 383 +++++++ x/mint/abci.go | 80 ++ x/mint/client/cli/query.go | 117 ++ x/mint/client/cli/query_test.go | 207 ++++ x/mint/exported/exported.go | 18 + x/mint/keeper/genesis.go | 24 + x/mint/keeper/genesis_test.go | 83 ++ x/mint/keeper/grpc_query.go | 34 + x/mint/keeper/grpc_query_test.go | 80 ++ x/mint/keeper/keeper.go | 154 +++ x/mint/keeper/keeper_test.go | 138 +++ x/mint/keeper/msg_server.go | 38 + x/mint/keeper/msg_server_test.go | 64 ++ x/mint/module.go | 268 +++++ x/mint/module_test.go | 25 + x/mint/simulation/decoder.go | 26 + x/mint/simulation/decoder_test.go | 49 + x/mint/simulation/genesis.go | 96 ++ x/mint/simulation/genesis_test.go | 84 ++ x/mint/simulation/proposals.go | 48 + x/mint/simulation/proposals_test.go | 46 + x/mint/testutil/app_config.go | 110 ++ x/mint/testutil/expected_keepers_mocks.go | 193 ++++ x/mint/types/codec.go | 47 + x/mint/types/event.pb.go | 561 ++++++++++ x/mint/types/expected_keepers.go | 33 + x/mint/types/genesis.go | 44 + x/mint/types/genesis.pb.go | 379 +++++++ x/mint/types/keys.go | 20 + x/mint/types/mint.pb.go | 780 +++++++++++++ x/mint/types/minter.go | 82 ++ x/mint/types/minter_test.go | 137 +++ x/mint/types/msgs.go | 32 + x/mint/types/params.go | 177 +++ x/mint/types/params_legacy.go | 39 + x/mint/types/query.pb.go | 1202 +++++++++++++++++++++ x/mint/types/query.pb.gw.go | 283 +++++ x/mint/types/tx.pb.go | 606 +++++++++++ 55 files changed, 7055 insertions(+), 1131 deletions(-) create mode 100644 proto/cosmos/msg/v1/msg.proto delete mode 100644 proto/cosmwasm/wasm/v1/authz.proto delete mode 100644 proto/cosmwasm/wasm/v1/genesis.proto delete mode 100644 proto/cosmwasm/wasm/v1/ibc.proto delete mode 100644 proto/cosmwasm/wasm/v1/proposal.proto delete mode 100644 proto/cosmwasm/wasm/v1/query.proto delete mode 100644 proto/cosmwasm/wasm/v1/tx.proto delete mode 100644 proto/cosmwasm/wasm/v1/types.proto create mode 100644 proto/xion/mint/v1/event.proto create mode 100644 proto/xion/mint/v1/genesis.proto create mode 100644 proto/xion/mint/v1/mint.proto create mode 100644 proto/xion/mint/v1/query.proto create mode 100644 proto/xion/mint/v1/tx.proto create mode 100644 x/mint/README.md create mode 100644 x/mint/abci.go create mode 100644 x/mint/client/cli/query.go create mode 100644 x/mint/client/cli/query_test.go create mode 100644 x/mint/exported/exported.go create mode 100644 x/mint/keeper/genesis.go create mode 100644 x/mint/keeper/genesis_test.go create mode 100644 x/mint/keeper/grpc_query.go create mode 100644 x/mint/keeper/grpc_query_test.go create mode 100644 x/mint/keeper/keeper.go create mode 100644 x/mint/keeper/keeper_test.go create mode 100644 x/mint/keeper/msg_server.go create mode 100644 x/mint/keeper/msg_server_test.go create mode 100644 x/mint/module.go create mode 100644 x/mint/module_test.go create mode 100644 x/mint/simulation/decoder.go create mode 100644 x/mint/simulation/decoder_test.go create mode 100644 x/mint/simulation/genesis.go create mode 100644 x/mint/simulation/genesis_test.go create mode 100644 x/mint/simulation/proposals.go create mode 100644 x/mint/simulation/proposals_test.go create mode 100644 x/mint/testutil/app_config.go create mode 100644 x/mint/testutil/expected_keepers_mocks.go create mode 100644 x/mint/types/codec.go create mode 100644 x/mint/types/event.pb.go create mode 100644 x/mint/types/expected_keepers.go create mode 100644 x/mint/types/genesis.go create mode 100644 x/mint/types/genesis.pb.go create mode 100644 x/mint/types/keys.go create mode 100644 x/mint/types/mint.pb.go create mode 100644 x/mint/types/minter.go create mode 100644 x/mint/types/minter_test.go create mode 100644 x/mint/types/msgs.go create mode 100644 x/mint/types/params.go create mode 100644 x/mint/types/params_legacy.go create mode 100644 x/mint/types/query.pb.go create mode 100644 x/mint/types/query.pb.gw.go create mode 100644 x/mint/types/tx.pb.go diff --git a/app/app.go b/app/app.go index 52c86cb6..34535120 100644 --- a/app/app.go +++ b/app/app.go @@ -76,9 +76,6 @@ import ( "github.com/cosmos/cosmos-sdk/x/group" groupkeeper "github.com/cosmos/cosmos-sdk/x/group/keeper" groupmodule "github.com/cosmos/cosmos-sdk/x/group/module" - "github.com/cosmos/cosmos-sdk/x/mint" - mintkeeper "github.com/cosmos/cosmos-sdk/x/mint/keeper" - minttypes "github.com/cosmos/cosmos-sdk/x/mint/types" "github.com/cosmos/cosmos-sdk/x/nft" nftkeeper "github.com/cosmos/cosmos-sdk/x/nft/keeper" nftmodule "github.com/cosmos/cosmos-sdk/x/nft/module" @@ -125,6 +122,10 @@ import ( wasmclient "github.com/CosmWasm/wasmd/x/wasm/client" wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" + + "github.com/burnt-labs/xion/x/mint" + mintkeeper "github.com/burnt-labs/xion/x/mint/keeper" + minttypes "github.com/burnt-labs/xion/x/mint/types" ) const appName = "XionApp" diff --git a/go.mod b/go.mod index f636178f..a38d351d 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.19 require ( github.com/CosmWasm/wasmvm v1.2.1 - github.com/cosmos/cosmos-proto v1.0.0-beta.2 // indirect + github.com/cosmos/cosmos-proto v1.0.0-beta.2 github.com/cosmos/cosmos-sdk v0.47.0 github.com/cosmos/gogogateway v1.2.0 // indirect github.com/cosmos/gogoproto v1.4.6 @@ -13,10 +13,10 @@ require ( github.com/cosmos/ics23/go v0.9.1-0.20221207100636-b1abd8678aab // indirect github.com/docker/distribution v2.8.1+incompatible // indirect github.com/dvsekhvalnov/jose2go v1.5.0 // indirect - github.com/golang/protobuf v1.5.3 // indirect + github.com/golang/protobuf v1.5.3 github.com/google/gofuzz v1.2.0 // indirect github.com/gorilla/mux v1.8.0 // indirect - github.com/grpc-ecosystem/grpc-gateway v1.16.0 // indirect + github.com/grpc-ecosystem/grpc-gateway v1.16.0 github.com/pkg/errors v0.9.1 // indirect github.com/prometheus/client_golang v1.14.0 github.com/rakyll/statik v0.1.7 // indirect @@ -26,20 +26,25 @@ require ( github.com/spf13/pflag v1.0.5 // indirect github.com/stretchr/testify v1.8.2 github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d - google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44 // indirect - google.golang.org/grpc v1.53.0 // indirect + google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44 + google.golang.org/grpc v1.53.0 gopkg.in/yaml.v2 v2.4.0 // indirect ) require ( cosmossdk.io/api v0.3.1 + cosmossdk.io/core v0.5.1 + cosmossdk.io/depinject v1.0.0-alpha.3 cosmossdk.io/errors v1.0.0-beta.7 cosmossdk.io/math v1.0.0-rc.0 cosmossdk.io/tools/rosetta v0.2.1 github.com/CosmWasm/wasmd v0.40.0-rc.0 github.com/cometbft/cometbft v0.37.0 github.com/cometbft/cometbft-db v0.7.0 + github.com/golang/mock v1.6.0 github.com/spf13/viper v1.15.0 + gotest.tools/v3 v3.4.0 + sigs.k8s.io/yaml v1.3.0 ) require ( @@ -48,8 +53,6 @@ require ( cloud.google.com/go/compute/metadata v0.2.3 // indirect cloud.google.com/go/iam v0.12.0 // indirect cloud.google.com/go/storage v1.29.0 // indirect - cosmossdk.io/core v0.5.1 // indirect - cosmossdk.io/depinject v1.0.0-alpha.3 // indirect filippo.io/edwards25519 v1.0.0 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect github.com/99designs/keyring v1.2.1 // indirect @@ -90,7 +93,6 @@ require ( github.com/gogo/protobuf v1.3.2 // indirect github.com/golang/glog v1.1.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect - github.com/golang/mock v1.6.0 // indirect github.com/golang/snappy v0.0.4 // indirect github.com/google/btree v1.1.2 // indirect github.com/google/go-cmp v0.5.9 // indirect @@ -169,7 +171,6 @@ require ( gopkg.in/yaml.v3 v3.0.1 // indirect nhooyr.io/websocket v1.8.6 // indirect pgregory.net/rapid v0.5.5 // indirect - sigs.k8s.io/yaml v1.3.0 // indirect ) replace ( diff --git a/go.sum b/go.sum index 230b1da2..ce170a2a 100644 --- a/go.sum +++ b/go.sum @@ -1595,8 +1595,8 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C 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 v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= gotest.tools/v3 v3.4.0 h1:ZazjZUfuVeZGLAmlKKuyv3IKP5orXcwtOwDQH6YVr6o= +gotest.tools/v3 v3.4.0/go.mod h1:CtbdzLSsqVhDgMtKsx03ird5YTGB3ar27v0u/yKBW5g= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= 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= diff --git a/proto/cosmos/msg/v1/msg.proto b/proto/cosmos/msg/v1/msg.proto new file mode 100644 index 00000000..bceff0f6 --- /dev/null +++ b/proto/cosmos/msg/v1/msg.proto @@ -0,0 +1,31 @@ +syntax = "proto3"; + +package cosmos.msg.v1; + +import "google/protobuf/descriptor.proto"; + +// TODO(fdymylja): once we fully migrate to protov2 the go_package needs to be +// updated. We need this right now because gogoproto codegen needs to import the +// extension. +option go_package = "github.com/cosmos/cosmos-sdk/types/msgservice"; + +extend google.protobuf.ServiceOptions { + // service indicates that the service is a Msg service and that requests + // must be transported via blockchain transactions rather than gRPC. + // Tooling can use this annotation to distinguish between Msg services and + // other types of services via reflection. + bool service = 11110000; +} + +extend google.protobuf.MessageOptions { + // signer must be used in cosmos messages in order + // to signal to external clients which fields in a + // given cosmos message must be filled with signer + // information (address). + // The field must be the protobuf name of the message + // field extended with this MessageOption. + // The field must either be of string kind, or of message + // kind in case the signer information is contained within + // a message inside the cosmos message. + repeated string signer = 11110000; +} diff --git a/proto/cosmwasm/wasm/v1/authz.proto b/proto/cosmwasm/wasm/v1/authz.proto deleted file mode 100644 index 707e78e7..00000000 --- a/proto/cosmwasm/wasm/v1/authz.proto +++ /dev/null @@ -1,118 +0,0 @@ -syntax = "proto3"; -package cosmwasm.wasm.v1; - -import "gogoproto/gogo.proto"; -import "cosmos_proto/cosmos.proto"; -import "cosmos/base/v1beta1/coin.proto"; -import "google/protobuf/any.proto"; - -option go_package = "github.com/CosmWasm/xiond/x/wasm/types"; -option (gogoproto.goproto_getters_all) = false; - -// ContractExecutionAuthorization defines authorization for wasm execute. -// Since: wasmd 0.30 -message ContractExecutionAuthorization { - option (cosmos_proto.implements_interface) = - "cosmos.authz.v1beta1.Authorization"; - - // Grants for contract executions - repeated ContractGrant grants = 1 [ (gogoproto.nullable) = false ]; -} - -// ContractMigrationAuthorization defines authorization for wasm contract -// migration. Since: wasmd 0.30 -message ContractMigrationAuthorization { - option (cosmos_proto.implements_interface) = - "cosmos.authz.v1beta1.Authorization"; - - // Grants for contract migrations - repeated ContractGrant grants = 1 [ (gogoproto.nullable) = false ]; -} - -// ContractGrant a granted permission for a single contract -// Since: wasmd 0.30 -message ContractGrant { - // Contract is the bech32 address of the smart contract - string contract = 1; - - // Limit defines execution limits that are enforced and updated when the grant - // is applied. When the limit lapsed the grant is removed. - google.protobuf.Any limit = 2 [ (cosmos_proto.accepts_interface) = - "cosmwasm.wasm.v1.ContractAuthzLimitX" ]; - - // Filter define more fine-grained control on the message payload passed - // to the contract in the operation. When no filter applies on execution, the - // operation is prohibited. - google.protobuf.Any filter = 3 - [ (cosmos_proto.accepts_interface) = - "cosmwasm.wasm.v1.ContractAuthzFilterX" ]; -} - -// MaxCallsLimit limited number of calls to the contract. No funds transferable. -// Since: wasmd 0.30 -message MaxCallsLimit { - option (cosmos_proto.implements_interface) = - "cosmwasm.wasm.v1.ContractAuthzLimitX"; - - // Remaining number that is decremented on each execution - uint64 remaining = 1; -} - -// MaxFundsLimit defines the maximal amounts that can be sent to the contract. -// Since: wasmd 0.30 -message MaxFundsLimit { - option (cosmos_proto.implements_interface) = - "cosmwasm.wasm.v1.ContractAuthzLimitX"; - - // Amounts is the maximal amount of tokens transferable to the contract. - repeated cosmos.base.v1beta1.Coin amounts = 1 [ - (gogoproto.nullable) = false, - (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" - ]; -} - -// CombinedLimit defines the maximal amounts that can be sent to a contract and -// the maximal number of calls executable. Both need to remain >0 to be valid. -// Since: wasmd 0.30 -message CombinedLimit { - option (cosmos_proto.implements_interface) = - "cosmwasm.wasm.v1.ContractAuthzLimitX"; - - // Remaining number that is decremented on each execution - uint64 calls_remaining = 1; - // Amounts is the maximal amount of tokens transferable to the contract. - repeated cosmos.base.v1beta1.Coin amounts = 2 [ - (gogoproto.nullable) = false, - (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" - ]; -} - -// AllowAllMessagesFilter is a wildcard to allow any type of contract payload -// message. -// Since: wasmd 0.30 -message AllowAllMessagesFilter { - option (cosmos_proto.implements_interface) = - "cosmwasm.wasm.v1.ContractAuthzFilterX"; -} - -// AcceptedMessageKeysFilter accept only the specific contract message keys in -// the json object to be executed. -// Since: wasmd 0.30 -message AcceptedMessageKeysFilter { - option (cosmos_proto.implements_interface) = - "cosmwasm.wasm.v1.ContractAuthzFilterX"; - - // Messages is the list of unique keys - repeated string keys = 1; -} - -// AcceptedMessagesFilter accept only the specific raw contract messages to be -// executed. -// Since: wasmd 0.30 -message AcceptedMessagesFilter { - option (cosmos_proto.implements_interface) = - "cosmwasm.wasm.v1.ContractAuthzFilterX"; - - // Messages is the list of raw contract messages - repeated bytes messages = 1 [ (gogoproto.casttype) = "RawContractMessage" ]; -} diff --git a/proto/cosmwasm/wasm/v1/genesis.proto b/proto/cosmwasm/wasm/v1/genesis.proto deleted file mode 100644 index 1d44417d..00000000 --- a/proto/cosmwasm/wasm/v1/genesis.proto +++ /dev/null @@ -1,46 +0,0 @@ -syntax = "proto3"; -package cosmwasm.wasm.v1; - -import "gogoproto/gogo.proto"; -import "cosmwasm/wasm/v1/types.proto"; - -option go_package = "github.com/CosmWasm/xiond/x/wasm/types"; - -// GenesisState - genesis state of x/wasm -message GenesisState { - Params params = 1 [ (gogoproto.nullable) = false ]; - repeated Code codes = 2 - [ (gogoproto.nullable) = false, (gogoproto.jsontag) = "codes,omitempty" ]; - repeated Contract contracts = 3 [ - (gogoproto.nullable) = false, - (gogoproto.jsontag) = "contracts,omitempty" - ]; - repeated Sequence sequences = 4 [ - (gogoproto.nullable) = false, - (gogoproto.jsontag) = "sequences,omitempty" - ]; -} - -// Code struct encompasses CodeInfo and CodeBytes -message Code { - uint64 code_id = 1 [ (gogoproto.customname) = "CodeID" ]; - CodeInfo code_info = 2 [ (gogoproto.nullable) = false ]; - bytes code_bytes = 3; - // Pinned to wasmvm cache - bool pinned = 4; -} - -// Contract struct encompasses ContractAddress, ContractInfo, and ContractState -message Contract { - string contract_address = 1; - ContractInfo contract_info = 2 [ (gogoproto.nullable) = false ]; - repeated Model contract_state = 3 [ (gogoproto.nullable) = false ]; - repeated ContractCodeHistoryEntry contract_code_history = 4 - [ (gogoproto.nullable) = false ]; -} - -// Sequence key and value of an id generation counter -message Sequence { - bytes id_key = 1 [ (gogoproto.customname) = "IDKey" ]; - uint64 value = 2; -} \ No newline at end of file diff --git a/proto/cosmwasm/wasm/v1/ibc.proto b/proto/cosmwasm/wasm/v1/ibc.proto deleted file mode 100644 index 19ceca3a..00000000 --- a/proto/cosmwasm/wasm/v1/ibc.proto +++ /dev/null @@ -1,37 +0,0 @@ -syntax = "proto3"; -package cosmwasm.wasm.v1; - -import "gogoproto/gogo.proto"; - -option go_package = "github.com/CosmWasm/xiond/x/wasm/types"; -option (gogoproto.goproto_getters_all) = false; - -// MsgIBCSend -message MsgIBCSend { - // the channel by which the packet will be sent - string channel = 2 [ (gogoproto.moretags) = "yaml:\"source_channel\"" ]; - - // Timeout height relative to the current block height. - // The timeout is disabled when set to 0. - uint64 timeout_height = 4 - [ (gogoproto.moretags) = "yaml:\"timeout_height\"" ]; - // Timeout timestamp (in nanoseconds) relative to the current block timestamp. - // The timeout is disabled when set to 0. - uint64 timeout_timestamp = 5 - [ (gogoproto.moretags) = "yaml:\"timeout_timestamp\"" ]; - - // Data is the payload to transfer. We must not make assumption what format or - // content is in here. - bytes data = 6; -} - -// MsgIBCSendResponse -message MsgIBCSendResponse { - // Sequence number of the IBC packet sent - uint64 sequence = 1; -} - -// MsgIBCCloseChannel port and channel need to be owned by the contract -message MsgIBCCloseChannel { - string channel = 2 [ (gogoproto.moretags) = "yaml:\"source_channel\"" ]; -} diff --git a/proto/cosmwasm/wasm/v1/proposal.proto b/proto/cosmwasm/wasm/v1/proposal.proto deleted file mode 100644 index 97f5a6df..00000000 --- a/proto/cosmwasm/wasm/v1/proposal.proto +++ /dev/null @@ -1,272 +0,0 @@ -syntax = "proto3"; -package cosmwasm.wasm.v1; - -import "gogoproto/gogo.proto"; -import "cosmos_proto/cosmos.proto"; -import "cosmos/base/v1beta1/coin.proto"; -import "cosmwasm/wasm/v1/types.proto"; - -option go_package = "github.com/CosmWasm/xiond/x/wasm/types"; -option (gogoproto.goproto_stringer_all) = false; -option (gogoproto.goproto_getters_all) = false; -option (gogoproto.equal_all) = true; - -// StoreCodeProposal gov proposal content type to submit WASM code to the system -message StoreCodeProposal { - option (cosmos_proto.implements_interface) = "cosmos.gov.v1beta1.Content"; - - // Title is a short summary - string title = 1; - // Description is a human readable text - string description = 2; - // RunAs is the address that is passed to the contract's environment as sender - string run_as = 3; - // WASMByteCode can be raw or gzip compressed - bytes wasm_byte_code = 4 [ (gogoproto.customname) = "WASMByteCode" ]; - // Used in v1beta1 - reserved 5, 6; - // InstantiatePermission to apply on contract creation, optional - AccessConfig instantiate_permission = 7; - // UnpinCode code on upload, optional - bool unpin_code = 8; - // Source is the URL where the code is hosted - string source = 9; - // Builder is the docker image used to build the code deterministically, used - // for smart contract verification - string builder = 10; - // CodeHash is the SHA256 sum of the code outputted by builder, used for smart - // contract verification - bytes code_hash = 11; -} - -// InstantiateContractProposal gov proposal content type to instantiate a -// contract. -message InstantiateContractProposal { - option (cosmos_proto.implements_interface) = "cosmos.gov.v1beta1.Content"; - - // Title is a short summary - string title = 1; - // Description is a human readable text - string description = 2; - // RunAs is the address that is passed to the contract's environment as sender - string run_as = 3; - // Admin is an optional address that can execute migrations - string admin = 4; - // CodeID is the reference to the stored WASM code - uint64 code_id = 5 [ (gogoproto.customname) = "CodeID" ]; - // Label is optional metadata to be stored with a constract instance. - string label = 6; - // Msg json encoded message to be passed to the contract on instantiation - bytes msg = 7 [ (gogoproto.casttype) = "RawContractMessage" ]; - // Funds coins that are transferred to the contract on instantiation - repeated cosmos.base.v1beta1.Coin funds = 8 [ - (gogoproto.nullable) = false, - (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" - ]; -} - -// InstantiateContract2Proposal gov proposal content type to instantiate -// contract 2 -message InstantiateContract2Proposal { - option (cosmos_proto.implements_interface) = "cosmos.gov.v1beta1.Content"; - - // Title is a short summary - string title = 1; - // Description is a human readable text - string description = 2; - // RunAs is the address that is passed to the contract's enviroment as sender - string run_as = 3; - // Admin is an optional address that can execute migrations - string admin = 4; - // CodeID is the reference to the stored WASM code - uint64 code_id = 5 [ (gogoproto.customname) = "CodeID" ]; - // Label is optional metadata to be stored with a constract instance. - string label = 6; - // Msg json encode message to be passed to the contract on instantiation - bytes msg = 7 [ (gogoproto.casttype) = "RawContractMessage" ]; - // Funds coins that are transferred to the contract on instantiation - repeated cosmos.base.v1beta1.Coin funds = 8 [ - (gogoproto.nullable) = false, - (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" - ]; - // Salt is an arbitrary value provided by the sender. Size can be 1 to 64. - bytes salt = 9; - // FixMsg include the msg value into the hash for the predictable address. - // Default is false - bool fix_msg = 10; -} - -// MigrateContractProposal gov proposal content type to migrate a contract. -message MigrateContractProposal { - option (cosmos_proto.implements_interface) = "cosmos.gov.v1beta1.Content"; - - // Title is a short summary - string title = 1; - // Description is a human readable text - string description = 2; - // Note: skipping 3 as this was previously used for unneeded run_as - - // Contract is the address of the smart contract - string contract = 4; - // CodeID references the new WASM code - uint64 code_id = 5 [ (gogoproto.customname) = "CodeID" ]; - // Msg json encoded message to be passed to the contract on migration - bytes msg = 6 [ (gogoproto.casttype) = "RawContractMessage" ]; -} - -// SudoContractProposal gov proposal content type to call sudo on a contract. -message SudoContractProposal { - option (cosmos_proto.implements_interface) = "cosmos.gov.v1beta1.Content"; - - // Title is a short summary - string title = 1; - // Description is a human readable text - string description = 2; - // Contract is the address of the smart contract - string contract = 3; - // Msg json encoded message to be passed to the contract as sudo - bytes msg = 4 [ (gogoproto.casttype) = "RawContractMessage" ]; -} - -// ExecuteContractProposal gov proposal content type to call execute on a -// contract. -message ExecuteContractProposal { - option (cosmos_proto.implements_interface) = "cosmos.gov.v1beta1.Content"; - - // Title is a short summary - string title = 1; - // Description is a human readable text - string description = 2; - // RunAs is the address that is passed to the contract's environment as sender - string run_as = 3; - // Contract is the address of the smart contract - string contract = 4; - // Msg json encoded message to be passed to the contract as execute - bytes msg = 5 [ (gogoproto.casttype) = "RawContractMessage" ]; - // Funds coins that are transferred to the contract on instantiation - repeated cosmos.base.v1beta1.Coin funds = 6 [ - (gogoproto.nullable) = false, - (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" - ]; -} - -// UpdateAdminProposal gov proposal content type to set an admin for a contract. -message UpdateAdminProposal { - option (cosmos_proto.implements_interface) = "cosmos.gov.v1beta1.Content"; - - // Title is a short summary - string title = 1; - // Description is a human readable text - string description = 2; - // NewAdmin address to be set - string new_admin = 3 [ (gogoproto.moretags) = "yaml:\"new_admin\"" ]; - // Contract is the address of the smart contract - string contract = 4; -} - -// ClearAdminProposal gov proposal content type to clear the admin of a -// contract. -message ClearAdminProposal { - option (cosmos_proto.implements_interface) = "cosmos.gov.v1beta1.Content"; - - // Title is a short summary - string title = 1; - // Description is a human readable text - string description = 2; - // Contract is the address of the smart contract - string contract = 3; -} - -// PinCodesProposal gov proposal content type to pin a set of code ids in the -// wasmvm cache. -message PinCodesProposal { - option (cosmos_proto.implements_interface) = "cosmos.gov.v1beta1.Content"; - - // Title is a short summary - string title = 1 [ (gogoproto.moretags) = "yaml:\"title\"" ]; - // Description is a human readable text - string description = 2 [ (gogoproto.moretags) = "yaml:\"description\"" ]; - // CodeIDs references the new WASM codes - repeated uint64 code_ids = 3 [ - (gogoproto.customname) = "CodeIDs", - (gogoproto.moretags) = "yaml:\"code_ids\"" - ]; -} - -// UnpinCodesProposal gov proposal content type to unpin a set of code ids in -// the wasmvm cache. -message UnpinCodesProposal { - option (cosmos_proto.implements_interface) = "cosmos.gov.v1beta1.Content"; - - // Title is a short summary - string title = 1 [ (gogoproto.moretags) = "yaml:\"title\"" ]; - // Description is a human readable text - string description = 2 [ (gogoproto.moretags) = "yaml:\"description\"" ]; - // CodeIDs references the WASM codes - repeated uint64 code_ids = 3 [ - (gogoproto.customname) = "CodeIDs", - (gogoproto.moretags) = "yaml:\"code_ids\"" - ]; -} - -// AccessConfigUpdate contains the code id and the access config to be -// applied. -message AccessConfigUpdate { - // CodeID is the reference to the stored WASM code to be updated - uint64 code_id = 1 [ (gogoproto.customname) = "CodeID" ]; - // InstantiatePermission to apply to the set of code ids - AccessConfig instantiate_permission = 2 [ (gogoproto.nullable) = false ]; -} - -// UpdateInstantiateConfigProposal gov proposal content type to update -// instantiate config to a set of code ids. -message UpdateInstantiateConfigProposal { - option (cosmos_proto.implements_interface) = "cosmos.gov.v1beta1.Content"; - - // Title is a short summary - string title = 1 [ (gogoproto.moretags) = "yaml:\"title\"" ]; - // Description is a human readable text - string description = 2 [ (gogoproto.moretags) = "yaml:\"description\"" ]; - // AccessConfigUpdate contains the list of code ids and the access config - // to be applied. - repeated AccessConfigUpdate access_config_updates = 3 - [ (gogoproto.nullable) = false ]; -} - -// StoreAndInstantiateContractProposal gov proposal content type to store -// and instantiate the contract. -message StoreAndInstantiateContractProposal { - option (cosmos_proto.implements_interface) = "cosmos.gov.v1beta1.Content"; - - // Title is a short summary - string title = 1; - // Description is a human readable text - string description = 2; - // RunAs is the address that is passed to the contract's environment as sender - string run_as = 3; - // WASMByteCode can be raw or gzip compressed - bytes wasm_byte_code = 4 [ (gogoproto.customname) = "WASMByteCode" ]; - // InstantiatePermission to apply on contract creation, optional - AccessConfig instantiate_permission = 5; - // UnpinCode code on upload, optional - bool unpin_code = 6; - // Admin is an optional address that can execute migrations - string admin = 7; - // Label is optional metadata to be stored with a constract instance. - string label = 8; - // Msg json encoded message to be passed to the contract on instantiation - bytes msg = 9 [ (gogoproto.casttype) = "RawContractMessage" ]; - // Funds coins that are transferred to the contract on instantiation - repeated cosmos.base.v1beta1.Coin funds = 10 [ - (gogoproto.nullable) = false, - (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" - ]; - // Source is the URL where the code is hosted - string source = 11; - // Builder is the docker image used to build the code deterministically, used - // for smart contract verification - string builder = 12; - // CodeHash is the SHA256 sum of the code outputted by builder, used for smart - // contract verification - bytes code_hash = 13; -} diff --git a/proto/cosmwasm/wasm/v1/query.proto b/proto/cosmwasm/wasm/v1/query.proto deleted file mode 100644 index 9d27597e..00000000 --- a/proto/cosmwasm/wasm/v1/query.proto +++ /dev/null @@ -1,262 +0,0 @@ -syntax = "proto3"; -package cosmwasm.wasm.v1; - -import "gogoproto/gogo.proto"; -import "cosmwasm/wasm/v1/types.proto"; -import "google/api/annotations.proto"; -import "cosmos/base/query/v1beta1/pagination.proto"; - -option go_package = "github.com/CosmWasm/xiond/x/wasm/types"; -option (gogoproto.goproto_getters_all) = false; -option (gogoproto.equal_all) = false; - -// Query provides defines the gRPC querier service -service Query { - // ContractInfo gets the contract meta data - rpc ContractInfo(QueryContractInfoRequest) - returns (QueryContractInfoResponse) { - option (google.api.http).get = "/cosmwasm/wasm/v1/contract/{address}"; - } - // ContractHistory gets the contract code history - rpc ContractHistory(QueryContractHistoryRequest) - returns (QueryContractHistoryResponse) { - option (google.api.http).get = - "/cosmwasm/wasm/v1/contract/{address}/history"; - } - // ContractsByCode lists all smart contracts for a code id - rpc ContractsByCode(QueryContractsByCodeRequest) - returns (QueryContractsByCodeResponse) { - option (google.api.http).get = "/cosmwasm/wasm/v1/code/{code_id}/contracts"; - } - // AllContractState gets all raw store data for a single contract - rpc AllContractState(QueryAllContractStateRequest) - returns (QueryAllContractStateResponse) { - option (google.api.http).get = "/cosmwasm/wasm/v1/contract/{address}/state"; - } - // RawContractState gets single key from the raw store data of a contract - rpc RawContractState(QueryRawContractStateRequest) - returns (QueryRawContractStateResponse) { - option (google.api.http).get = - "/cosmwasm/wasm/v1/contract/{address}/raw/{query_data}"; - } - // SmartContractState get smart query result from the contract - rpc SmartContractState(QuerySmartContractStateRequest) - returns (QuerySmartContractStateResponse) { - option (google.api.http).get = - "/cosmwasm/wasm/v1/contract/{address}/smart/{query_data}"; - } - // Code gets the binary code and metadata for a singe wasm code - rpc Code(QueryCodeRequest) returns (QueryCodeResponse) { - option (google.api.http).get = "/cosmwasm/wasm/v1/code/{code_id}"; - } - // Codes gets the metadata for all stored wasm codes - rpc Codes(QueryCodesRequest) returns (QueryCodesResponse) { - option (google.api.http).get = "/cosmwasm/wasm/v1/code"; - } - - // PinnedCodes gets the pinned code ids - rpc PinnedCodes(QueryPinnedCodesRequest) returns (QueryPinnedCodesResponse) { - option (google.api.http).get = "/cosmwasm/wasm/v1/codes/pinned"; - } - - // Params gets the module params - rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { - option (google.api.http).get = "/cosmwasm/wasm/v1/codes/params"; - } - - // ContractsByCreator gets the contracts by creator - rpc ContractsByCreator(QueryContractsByCreatorRequest) - returns (QueryContractsByCreatorResponse) { - option (google.api.http).get = - "/cosmwasm/wasm/v1/contracts/creator/{creator_address}"; - } -} - -// QueryContractInfoRequest is the request type for the Query/ContractInfo RPC -// method -message QueryContractInfoRequest { - // address is the address of the contract to query - string address = 1; -} -// QueryContractInfoResponse is the response type for the Query/ContractInfo RPC -// method -message QueryContractInfoResponse { - option (gogoproto.equal) = true; - - // address is the address of the contract - string address = 1; - ContractInfo contract_info = 2 [ - (gogoproto.embed) = true, - (gogoproto.nullable) = false, - (gogoproto.jsontag) = "" - ]; -} - -// QueryContractHistoryRequest is the request type for the Query/ContractHistory -// RPC method -message QueryContractHistoryRequest { - // address is the address of the contract to query - string address = 1; - // pagination defines an optional pagination for the request. - cosmos.base.query.v1beta1.PageRequest pagination = 2; -} - -// QueryContractHistoryResponse is the response type for the -// Query/ContractHistory RPC method -message QueryContractHistoryResponse { - repeated ContractCodeHistoryEntry entries = 1 - [ (gogoproto.nullable) = false ]; - // pagination defines the pagination in the response. - cosmos.base.query.v1beta1.PageResponse pagination = 2; -} - -// QueryContractsByCodeRequest is the request type for the Query/ContractsByCode -// RPC method -message QueryContractsByCodeRequest { - uint64 code_id = 1; // grpc-gateway_out does not support Go style CodID - // pagination defines an optional pagination for the request. - cosmos.base.query.v1beta1.PageRequest pagination = 2; -} - -// QueryContractsByCodeResponse is the response type for the -// Query/ContractsByCode RPC method -message QueryContractsByCodeResponse { - // contracts are a set of contract addresses - repeated string contracts = 1; - - // pagination defines the pagination in the response. - cosmos.base.query.v1beta1.PageResponse pagination = 2; -} - -// QueryAllContractStateRequest is the request type for the -// Query/AllContractState RPC method -message QueryAllContractStateRequest { - // address is the address of the contract - string address = 1; - // pagination defines an optional pagination for the request. - cosmos.base.query.v1beta1.PageRequest pagination = 2; -} - -// QueryAllContractStateResponse is the response type for the -// Query/AllContractState RPC method -message QueryAllContractStateResponse { - repeated Model models = 1 [ (gogoproto.nullable) = false ]; - // pagination defines the pagination in the response. - cosmos.base.query.v1beta1.PageResponse pagination = 2; -} - -// QueryRawContractStateRequest is the request type for the -// Query/RawContractState RPC method -message QueryRawContractStateRequest { - // address is the address of the contract - string address = 1; - bytes query_data = 2; -} - -// QueryRawContractStateResponse is the response type for the -// Query/RawContractState RPC method -message QueryRawContractStateResponse { - // Data contains the raw store data - bytes data = 1; -} - -// QuerySmartContractStateRequest is the request type for the -// Query/SmartContractState RPC method -message QuerySmartContractStateRequest { - // address is the address of the contract - string address = 1; - // QueryData contains the query data passed to the contract - bytes query_data = 2 [ (gogoproto.casttype) = "RawContractMessage" ]; -} - -// QuerySmartContractStateResponse is the response type for the -// Query/SmartContractState RPC method -message QuerySmartContractStateResponse { - // Data contains the json data returned from the smart contract - bytes data = 1 [ (gogoproto.casttype) = "RawContractMessage" ]; -} - -// QueryCodeRequest is the request type for the Query/Code RPC method -message QueryCodeRequest { - uint64 code_id = 1; // grpc-gateway_out does not support Go style CodID -} - -// CodeInfoResponse contains code meta data from CodeInfo -message CodeInfoResponse { - option (gogoproto.equal) = true; - - uint64 code_id = 1 [ - (gogoproto.customname) = "CodeID", - (gogoproto.jsontag) = "id" - ]; // id for legacy support - string creator = 2; - bytes data_hash = 3 - [ (gogoproto.casttype) = - "github.com/cometbft/cometbft/libs/bytes.HexBytes" ]; - // Used in v1beta1 - reserved 4, 5; - AccessConfig instantiate_permission = 6 [ (gogoproto.nullable) = false ]; -} - -// QueryCodeResponse is the response type for the Query/Code RPC method -message QueryCodeResponse { - option (gogoproto.equal) = true; - CodeInfoResponse code_info = 1 - [ (gogoproto.embed) = true, (gogoproto.jsontag) = "" ]; - bytes data = 2 [ (gogoproto.jsontag) = "data" ]; -} - -// QueryCodesRequest is the request type for the Query/Codes RPC method -message QueryCodesRequest { - // pagination defines an optional pagination for the request. - cosmos.base.query.v1beta1.PageRequest pagination = 1; -} - -// QueryCodesResponse is the response type for the Query/Codes RPC method -message QueryCodesResponse { - repeated CodeInfoResponse code_infos = 1 [ (gogoproto.nullable) = false ]; - // pagination defines the pagination in the response. - cosmos.base.query.v1beta1.PageResponse pagination = 2; -} - -// QueryPinnedCodesRequest is the request type for the Query/PinnedCodes -// RPC method -message QueryPinnedCodesRequest { - // pagination defines an optional pagination for the request. - cosmos.base.query.v1beta1.PageRequest pagination = 2; -} - -// QueryPinnedCodesResponse is the response type for the -// Query/PinnedCodes RPC method -message QueryPinnedCodesResponse { - repeated uint64 code_ids = 1 [ (gogoproto.customname) = "CodeIDs" ]; - // pagination defines the pagination in the response. - cosmos.base.query.v1beta1.PageResponse pagination = 2; -} - -// QueryParamsRequest is the request type for the Query/Params RPC method. -message QueryParamsRequest {} - -// QueryParamsResponse is the response type for the Query/Params RPC method. -message QueryParamsResponse { - // params defines the parameters of the module. - Params params = 1 [ (gogoproto.nullable) = false ]; -} - -// QueryContractsByCreatorRequest is the request type for the -// Query/ContractsByCreator RPC method. -message QueryContractsByCreatorRequest { - // CreatorAddress is the address of contract creator - string creator_address = 1; - // Pagination defines an optional pagination for the request. - cosmos.base.query.v1beta1.PageRequest pagination = 2; -} - -// QueryContractsByCreatorResponse is the response type for the -// Query/ContractsByCreator RPC method. -message QueryContractsByCreatorResponse { - // ContractAddresses result set - repeated string contract_addresses = 1; - // Pagination defines the pagination in the response. - cosmos.base.query.v1beta1.PageResponse pagination = 2; -} \ No newline at end of file diff --git a/proto/cosmwasm/wasm/v1/tx.proto b/proto/cosmwasm/wasm/v1/tx.proto deleted file mode 100644 index 99b8586d..00000000 --- a/proto/cosmwasm/wasm/v1/tx.proto +++ /dev/null @@ -1,236 +0,0 @@ -syntax = "proto3"; -package cosmwasm.wasm.v1; - -import "cosmos/base/v1beta1/coin.proto"; -import "cosmos/msg/v1/msg.proto"; -import "gogoproto/gogo.proto"; -import "cosmwasm/wasm/v1/types.proto"; -import "cosmos_proto/cosmos.proto"; - -option go_package = "github.com/CosmWasm/xiond/x/wasm/types"; -option (gogoproto.goproto_getters_all) = false; - -// Msg defines the wasm Msg service. -service Msg { - // StoreCode to submit Wasm code to the system - rpc StoreCode(MsgStoreCode) returns (MsgStoreCodeResponse); - // InstantiateContract creates a new smart contract instance for the given - // code id. - rpc InstantiateContract(MsgInstantiateContract) - returns (MsgInstantiateContractResponse); - // InstantiateContract2 creates a new smart contract instance for the given - // code id with a predictable address - rpc InstantiateContract2(MsgInstantiateContract2) - returns (MsgInstantiateContract2Response); - // Execute submits the given message data to a smart contract - rpc ExecuteContract(MsgExecuteContract) returns (MsgExecuteContractResponse); - // Migrate runs a code upgrade/ downgrade for a smart contract - rpc MigrateContract(MsgMigrateContract) returns (MsgMigrateContractResponse); - // UpdateAdmin sets a new admin for a smart contract - rpc UpdateAdmin(MsgUpdateAdmin) returns (MsgUpdateAdminResponse); - // ClearAdmin removes any admin stored for a smart contract - rpc ClearAdmin(MsgClearAdmin) returns (MsgClearAdminResponse); - // UpdateInstantiateConfig updates instantiate config for a smart contract - rpc UpdateInstantiateConfig(MsgUpdateInstantiateConfig) - returns (MsgUpdateInstantiateConfigResponse); - // UpdateParams defines a governance operation for updating the x/wasm - // module parameters. The authority is defined in the keeper. - // - // Since: 0.40 - rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse); -} - -// MsgStoreCode submit Wasm code to the system -message MsgStoreCode { - option (cosmos.msg.v1.signer) = "sender"; - - // Sender is the actor that signed the messages - string sender = 1; - // WASMByteCode can be raw or gzip compressed - bytes wasm_byte_code = 2 [ (gogoproto.customname) = "WASMByteCode" ]; - // Used in v1beta1 - reserved 3, 4; - // InstantiatePermission access control to apply on contract creation, - // optional - AccessConfig instantiate_permission = 5; -} -// MsgStoreCodeResponse returns store result data. -message MsgStoreCodeResponse { - // CodeID is the reference to the stored WASM code - uint64 code_id = 1 [ (gogoproto.customname) = "CodeID" ]; - // Checksum is the sha256 hash of the stored code - bytes checksum = 2; -} - -// MsgInstantiateContract create a new smart contract instance for the given -// code id. -message MsgInstantiateContract { - option (cosmos.msg.v1.signer) = "sender"; - - // Sender is the that actor that signed the messages - string sender = 1; - // Admin is an optional address that can execute migrations - string admin = 2; - // CodeID is the reference to the stored WASM code - uint64 code_id = 3 [ (gogoproto.customname) = "CodeID" ]; - // Label is optional metadata to be stored with a contract instance. - string label = 4; - // Msg json encoded message to be passed to the contract on instantiation - bytes msg = 5 [ (gogoproto.casttype) = "RawContractMessage" ]; - // Funds coins that are transferred to the contract on instantiation - repeated cosmos.base.v1beta1.Coin funds = 6 [ - (gogoproto.nullable) = false, - (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" - ]; -} - -// MsgInstantiateContract2 create a new smart contract instance for the given -// code id with a predicable address. -message MsgInstantiateContract2 { - option (cosmos.msg.v1.signer) = "sender"; - - // Sender is the that actor that signed the messages - string sender = 1; - // Admin is an optional address that can execute migrations - string admin = 2; - // CodeID is the reference to the stored WASM code - uint64 code_id = 3 [ (gogoproto.customname) = "CodeID" ]; - // Label is optional metadata to be stored with a contract instance. - string label = 4; - // Msg json encoded message to be passed to the contract on instantiation - bytes msg = 5 [ (gogoproto.casttype) = "RawContractMessage" ]; - // Funds coins that are transferred to the contract on instantiation - repeated cosmos.base.v1beta1.Coin funds = 6 [ - (gogoproto.nullable) = false, - (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" - ]; - // Salt is an arbitrary value provided by the sender. Size can be 1 to 64. - bytes salt = 7; - // FixMsg include the msg value into the hash for the predictable address. - // Default is false - bool fix_msg = 8; -} - -// MsgInstantiateContractResponse return instantiation result data -message MsgInstantiateContractResponse { - // Address is the bech32 address of the new contract instance. - string address = 1; - // Data contains bytes to returned from the contract - bytes data = 2; -} - -// MsgInstantiateContract2Response return instantiation result data -message MsgInstantiateContract2Response { - // Address is the bech32 address of the new contract instance. - string address = 1; - // Data contains bytes to returned from the contract - bytes data = 2; -} - -// MsgExecuteContract submits the given message data to a smart contract -message MsgExecuteContract { - option (cosmos.msg.v1.signer) = "sender"; - - // Sender is the that actor that signed the messages - string sender = 1; - // Contract is the address of the smart contract - string contract = 2; - // Msg json encoded message to be passed to the contract - bytes msg = 3 [ (gogoproto.casttype) = "RawContractMessage" ]; - // Funds coins that are transferred to the contract on execution - repeated cosmos.base.v1beta1.Coin funds = 5 [ - (gogoproto.nullable) = false, - (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" - ]; -} - -// MsgExecuteContractResponse returns execution result data. -message MsgExecuteContractResponse { - // Data contains bytes to returned from the contract - bytes data = 1; -} - -// MsgMigrateContract runs a code upgrade/ downgrade for a smart contract -message MsgMigrateContract { - option (cosmos.msg.v1.signer) = "sender"; - - // Sender is the that actor that signed the messages - string sender = 1; - // Contract is the address of the smart contract - string contract = 2; - // CodeID references the new WASM code - uint64 code_id = 3 [ (gogoproto.customname) = "CodeID" ]; - // Msg json encoded message to be passed to the contract on migration - bytes msg = 4 [ (gogoproto.casttype) = "RawContractMessage" ]; -} - -// MsgMigrateContractResponse returns contract migration result data. -message MsgMigrateContractResponse { - // Data contains same raw bytes returned as data from the wasm contract. - // (May be empty) - bytes data = 1; -} - -// MsgUpdateAdmin sets a new admin for a smart contract -message MsgUpdateAdmin { - option (cosmos.msg.v1.signer) = "sender"; - - // Sender is the that actor that signed the messages - string sender = 1; - // NewAdmin address to be set - string new_admin = 2; - // Contract is the address of the smart contract - string contract = 3; -} - -// MsgUpdateAdminResponse returns empty data -message MsgUpdateAdminResponse {} - -// MsgClearAdmin removes any admin stored for a smart contract -message MsgClearAdmin { - option (cosmos.msg.v1.signer) = "sender"; - - // Sender is the actor that signed the messages - string sender = 1; - // Contract is the address of the smart contract - string contract = 3; -} - -// MsgClearAdminResponse returns empty data -message MsgClearAdminResponse {} - -// MsgUpdateInstantiateConfig updates instantiate config for a smart contract -message MsgUpdateInstantiateConfig { - option (cosmos.msg.v1.signer) = "sender"; - - // Sender is the that actor that signed the messages - string sender = 1; - // CodeID references the stored WASM code - uint64 code_id = 2 [ (gogoproto.customname) = "CodeID" ]; - // NewInstantiatePermission is the new access control - AccessConfig new_instantiate_permission = 3; -} - -// MsgUpdateInstantiateConfigResponse returns empty data -message MsgUpdateInstantiateConfigResponse {} - -// MsgUpdateParams is the Msg/UpdateParams request type. -// -// Since: 0.40 -message MsgUpdateParams { - option (cosmos.msg.v1.signer) = "authority"; - - // authority is the address of the governance account. - string authority = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; - - // params defines the x/wasm parameters to update. - // - // NOTE: All parameters must be supplied. - Params params = 2 [ (gogoproto.nullable) = false ]; -} - -// MsgUpdateParamsResponse defines the response structure for executing a -// MsgUpdateParams message. -// -// Since: 0.40 -message MsgUpdateParamsResponse {} \ No newline at end of file diff --git a/proto/cosmwasm/wasm/v1/types.proto b/proto/cosmwasm/wasm/v1/types.proto deleted file mode 100644 index 2fc765a8..00000000 --- a/proto/cosmwasm/wasm/v1/types.proto +++ /dev/null @@ -1,145 +0,0 @@ -syntax = "proto3"; -package cosmwasm.wasm.v1; - -import "cosmos_proto/cosmos.proto"; -import "gogoproto/gogo.proto"; -import "google/protobuf/any.proto"; - -option go_package = "github.com/CosmWasm/xiond/x/wasm/types"; -option (gogoproto.goproto_getters_all) = false; -option (gogoproto.equal_all) = true; - -// AccessType permission types -enum AccessType { - option (gogoproto.goproto_enum_prefix) = false; - option (gogoproto.goproto_enum_stringer) = false; - // AccessTypeUnspecified placeholder for empty value - ACCESS_TYPE_UNSPECIFIED = 0 - [ (gogoproto.enumvalue_customname) = "AccessTypeUnspecified" ]; - // AccessTypeNobody forbidden - ACCESS_TYPE_NOBODY = 1 - [ (gogoproto.enumvalue_customname) = "AccessTypeNobody" ]; - // AccessTypeOnlyAddress restricted to a single address - // Deprecated: use AccessTypeAnyOfAddresses instead - ACCESS_TYPE_ONLY_ADDRESS = 2 - [ (gogoproto.enumvalue_customname) = "AccessTypeOnlyAddress" ]; - // AccessTypeEverybody unrestricted - ACCESS_TYPE_EVERYBODY = 3 - [ (gogoproto.enumvalue_customname) = "AccessTypeEverybody" ]; - // AccessTypeAnyOfAddresses allow any of the addresses - ACCESS_TYPE_ANY_OF_ADDRESSES = 4 - [ (gogoproto.enumvalue_customname) = "AccessTypeAnyOfAddresses" ]; -} - -// AccessTypeParam -message AccessTypeParam { - option (gogoproto.goproto_stringer) = true; - AccessType value = 1 [ (gogoproto.moretags) = "yaml:\"value\"" ]; -} - -// AccessConfig access control type. -message AccessConfig { - option (gogoproto.goproto_stringer) = true; - AccessType permission = 1 [ (gogoproto.moretags) = "yaml:\"permission\"" ]; - - // Address - // Deprecated: replaced by addresses - string address = 2 [ (gogoproto.moretags) = "yaml:\"address\"" ]; - repeated string addresses = 3 [ (gogoproto.moretags) = "yaml:\"addresses\"" ]; -} - -// Params defines the set of wasm parameters. -message Params { - option (gogoproto.goproto_stringer) = false; - AccessConfig code_upload_access = 1 [ - (gogoproto.nullable) = false, - (gogoproto.moretags) = "yaml:\"code_upload_access\"" - ]; - AccessType instantiate_default_permission = 2 - [ (gogoproto.moretags) = "yaml:\"instantiate_default_permission\"" ]; -} - -// CodeInfo is data for the uploaded contract WASM code -message CodeInfo { - // CodeHash is the unique identifier created by wasmvm - bytes code_hash = 1; - // Creator address who initially stored the code - string creator = 2; - // Used in v1beta1 - reserved 3, 4; - // InstantiateConfig access control to apply on contract creation, optional - AccessConfig instantiate_config = 5 [ (gogoproto.nullable) = false ]; -} - -// ContractInfo stores a WASM contract instance -message ContractInfo { - option (gogoproto.equal) = true; - - // CodeID is the reference to the stored Wasm code - uint64 code_id = 1 [ (gogoproto.customname) = "CodeID" ]; - // Creator address who initially instantiated the contract - string creator = 2; - // Admin is an optional address that can execute migrations - string admin = 3; - // Label is optional metadata to be stored with a contract instance. - string label = 4; - // Created Tx position when the contract was instantiated. - AbsoluteTxPosition created = 5; - string ibc_port_id = 6 [ (gogoproto.customname) = "IBCPortID" ]; - - // Extension is an extension point to store custom metadata within the - // persistence model. - google.protobuf.Any extension = 7 - [ (cosmos_proto.accepts_interface) = - "cosmwasm.wasm.v1.ContractInfoExtension" ]; -} - -// ContractCodeHistoryOperationType actions that caused a code change -enum ContractCodeHistoryOperationType { - option (gogoproto.goproto_enum_prefix) = false; - // ContractCodeHistoryOperationTypeUnspecified placeholder for empty value - CONTRACT_CODE_HISTORY_OPERATION_TYPE_UNSPECIFIED = 0 - [ (gogoproto.enumvalue_customname) = - "ContractCodeHistoryOperationTypeUnspecified" ]; - // ContractCodeHistoryOperationTypeInit on chain contract instantiation - CONTRACT_CODE_HISTORY_OPERATION_TYPE_INIT = 1 - [ (gogoproto.enumvalue_customname) = - "ContractCodeHistoryOperationTypeInit" ]; - // ContractCodeHistoryOperationTypeMigrate code migration - CONTRACT_CODE_HISTORY_OPERATION_TYPE_MIGRATE = 2 - [ (gogoproto.enumvalue_customname) = - "ContractCodeHistoryOperationTypeMigrate" ]; - // ContractCodeHistoryOperationTypeGenesis based on genesis data - CONTRACT_CODE_HISTORY_OPERATION_TYPE_GENESIS = 3 - [ (gogoproto.enumvalue_customname) = - "ContractCodeHistoryOperationTypeGenesis" ]; -} - -// ContractCodeHistoryEntry metadata to a contract. -message ContractCodeHistoryEntry { - ContractCodeHistoryOperationType operation = 1; - // CodeID is the reference to the stored WASM code - uint64 code_id = 2 [ (gogoproto.customname) = "CodeID" ]; - // Updated Tx position when the operation was executed. - AbsoluteTxPosition updated = 3; - bytes msg = 4 [ (gogoproto.casttype) = "RawContractMessage" ]; -} - -// AbsoluteTxPosition is a unique transaction position that allows for global -// ordering of transactions. -message AbsoluteTxPosition { - // BlockHeight is the block the contract was created at - uint64 block_height = 1; - // TxIndex is a monotonic counter within the block (actual transaction index, - // or gas consumed) - uint64 tx_index = 2; -} - -// Model is a struct that holds a KV pair -message Model { - // hex-encode key to read it better (this is often ascii) - bytes key = 1 [ (gogoproto.casttype) = - "github.com/cometbft/cometbft/libs/bytes.HexBytes" ]; - // base64-encode raw value - bytes value = 2; -} diff --git a/proto/xion/mint/v1/event.proto b/proto/xion/mint/v1/event.proto new file mode 100644 index 00000000..f04fe84a --- /dev/null +++ b/proto/xion/mint/v1/event.proto @@ -0,0 +1,30 @@ +syntax = "proto3"; +package mint.v1; + +import "gogoproto/gogo.proto"; + +option go_package = "github.com/burnt-labs/xion/x/mint/types"; + +// MintIncentiveTokens defines an event emitted on each block from the mint +// module EndBlocker +message MintIncentiveTokens { + string bonded_ratio = 1 [ + (gogoproto.moretags) = "yaml:\"bonded_ratio\"", + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", + (gogoproto.nullable) = false + ]; + string inflation = 2 [ + (gogoproto.moretags) = "yaml:\"inflation\"", + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", + (gogoproto.nullable) = false + ]; + string annual_provisions = 3 [ + (gogoproto.moretags) = "yaml:\"annual_provisions\"", + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", + (gogoproto.nullable) = false + ]; + uint64 needed_amount = 4; + uint64 collected_amount = 5; + uint64 minted_amount = 6; + uint64 burned_amount = 7; +} \ No newline at end of file diff --git a/proto/xion/mint/v1/genesis.proto b/proto/xion/mint/v1/genesis.proto new file mode 100644 index 00000000..3a2dbd9e --- /dev/null +++ b/proto/xion/mint/v1/genesis.proto @@ -0,0 +1,19 @@ +syntax = "proto3"; +package xion.mint.v1; + +import "gogoproto/gogo.proto"; +import "xion/mint/v1/mint.proto"; +import "amino/amino.proto"; + +option go_package = "github.com/burnt-labs/xion/x/mint/types"; + +// GenesisState defines the mint module's genesis state. +message GenesisState { + // minter is a space for holding current inflation information. + Minter minter = 1 + [ (gogoproto.nullable) = false, (amino.dont_omitempty) = true ]; + + // params defines all the parameters of the module. + Params params = 2 + [ (gogoproto.nullable) = false, (amino.dont_omitempty) = true ]; +} diff --git a/proto/xion/mint/v1/mint.proto b/proto/xion/mint/v1/mint.proto new file mode 100644 index 00000000..e87548ad --- /dev/null +++ b/proto/xion/mint/v1/mint.proto @@ -0,0 +1,59 @@ +syntax = "proto3"; +package xion.mint.v1; + +option go_package = "github.com/burnt-labs/xion/x/mint/types"; + +import "gogoproto/gogo.proto"; +import "cosmos_proto/cosmos.proto"; +import "amino/amino.proto"; + +// Minter represents the minting state. +message Minter { + // current annual inflation rate + string inflation = 1 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", + (gogoproto.nullable) = false + ]; + // current annual expected provisions + string annual_provisions = 2 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", + (gogoproto.nullable) = false + ]; +} + +// Params defines the parameters for the x/mint module. +message Params { + option (gogoproto.goproto_stringer) = false; + option (amino.name) = "cosmos-sdk/x/mint/Params"; + + // type of coin to mint + string mint_denom = 1; + // maximum annual change in inflation rate + string inflation_rate_change = 2 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", + (gogoproto.nullable) = false + ]; + // maximum inflation rate + string inflation_max = 3 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", + (gogoproto.nullable) = false + ]; + // minimum inflation rate + string inflation_min = 4 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", + (gogoproto.nullable) = false + ]; + // goal of percent bonded atoms + string goal_bonded = 5 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", + (gogoproto.nullable) = false + ]; + // expected blocks per year + uint64 blocks_per_year = 6; +} diff --git a/proto/xion/mint/v1/query.proto b/proto/xion/mint/v1/query.proto new file mode 100644 index 00000000..983db83e --- /dev/null +++ b/proto/xion/mint/v1/query.proto @@ -0,0 +1,67 @@ +syntax = "proto3"; +package xion.mint.v1; + +import "gogoproto/gogo.proto"; +import "google/api/annotations.proto"; +import "xion/mint/v1/mint.proto"; +import "amino/amino.proto"; + +option go_package = "github.com/burnt-labs/xion/x/mint/types"; + +// Query provides defines the gRPC querier service. +service Query { + // Params returns the total set of minting parameters. + rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { + option (google.api.http).get = "/cosmos/mint/v1beta1/params"; + } + + // Inflation returns the current minting inflation value. + rpc Inflation(QueryInflationRequest) returns (QueryInflationResponse) { + option (google.api.http).get = "/xion/mint/v1/inflation"; + } + + // AnnualProvisions current minting annual provisions value. + rpc AnnualProvisions(QueryAnnualProvisionsRequest) + returns (QueryAnnualProvisionsResponse) { + option (google.api.http).get = "/xion/mint/v1/annual_provisions"; + } +} + +// QueryParamsRequest is the request type for the Query/Params RPC method. +message QueryParamsRequest {} + +// QueryParamsResponse is the response type for the Query/Params RPC method. +message QueryParamsResponse { + // params defines the parameters of the module. + Params params = 1 + [ (gogoproto.nullable) = false, (amino.dont_omitempty) = true ]; +} + +// QueryInflationRequest is the request type for the Query/Inflation RPC method. +message QueryInflationRequest {} + +// QueryInflationResponse is the response type for the Query/Inflation RPC +// method. +message QueryInflationResponse { + // inflation is the current minting inflation value. + bytes inflation = 1 [ + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; +} + +// QueryAnnualProvisionsRequest is the request type for the +// Query/AnnualProvisions RPC method. +message QueryAnnualProvisionsRequest {} + +// QueryAnnualProvisionsResponse is the response type for the +// Query/AnnualProvisions RPC method. +message QueryAnnualProvisionsResponse { + // annual_provisions is the current minting annual provisions value. + bytes annual_provisions = 1 [ + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; +} diff --git a/proto/xion/mint/v1/tx.proto b/proto/xion/mint/v1/tx.proto new file mode 100644 index 00000000..59e9d252 --- /dev/null +++ b/proto/xion/mint/v1/tx.proto @@ -0,0 +1,45 @@ +syntax = "proto3"; +package xion.mint.v1; + +option go_package = "github.com/burnt-labs/xion/x/mint/types"; + +import "cosmos/msg/v1/msg.proto"; +import "amino/amino.proto"; +import "xion/mint/v1/mint.proto"; +import "gogoproto/gogo.proto"; +import "cosmos_proto/cosmos.proto"; + +// Msg defines the x/mint Msg service. +service Msg { + option (cosmos.msg.v1.service) = true; + + // UpdateParams defines a governance operation for updating the x/mint module + // parameters. The authority is defaults to the x/gov module account. + // + // Since: cosmos-sdk 0.47 + rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse); +} + +// MsgUpdateParams is the Msg/UpdateParams request type. +// +// Since: cosmos-sdk 0.47 +message MsgUpdateParams { + option (cosmos.msg.v1.signer) = "authority"; + option (amino.name) = "xion/x/mint/MsgUpdateParams"; + + // authority is the address that controls the module (defaults to x/gov unless + // overwritten). + string authority = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + + // params defines the x/mint parameters to update. + // + // NOTE: All parameters must be supplied. + Params params = 2 + [ (gogoproto.nullable) = false, (amino.dont_omitempty) = true ]; +} + +// MsgUpdateParamsResponse defines the response structure for executing a +// MsgUpdateParams message. +// +// Since: cosmos-sdk 0.47 +message MsgUpdateParamsResponse {} diff --git a/scripts/protocgen.sh b/scripts/protocgen.sh index 8a630868..b3729e73 100755 --- a/scripts/protocgen.sh +++ b/scripts/protocgen.sh @@ -9,7 +9,7 @@ protoc_install_proto_gen_doc() { echo "Generating gogo proto code" cd proto -proto_dirs=$(find ./cosmwasm -path -prune -o -name '*.proto' -print0 | xargs -0 -n1 dirname | sort | uniq) +proto_dirs=$(find ./xion -path -prune -o -name '*.proto' -print0 | xargs -0 -n1 dirname | sort | uniq) for dir in $proto_dirs; do for file in $(find "${dir}" -maxdepth 1 -name '*.proto'); do if grep "option go_package" $file &> /dev/null ; then @@ -26,5 +26,5 @@ buf generate --template buf.gen.doc.yml cd .. # move proto files to the right places -cp -r github.com/CosmWasm/wasmd/* ./ +cp -r github.com/burnt-labs/xion/* ./ rm -rf github.com diff --git a/x/mint/README.md b/x/mint/README.md new file mode 100644 index 00000000..9615c4c7 --- /dev/null +++ b/x/mint/README.md @@ -0,0 +1,383 @@ +--- +sidebar_position: 1 +--- + +# `x/mint` + +## Contents + +* [State](#state) + * [Minter](#minter) + * [Params](#params) +* [Begin-Block](#begin-block) + * [NextInflationRate](#nextinflationrate) + * [NextAnnualProvisions](#nextannualprovisions) + * [BlockProvision](#blockprovision) +* [Parameters](#parameters) +* [Events](#events) + * [BeginBlocker](#beginblocker) +* [Client](#client) + * [CLI](#cli) + * [gRPC](#grpc) + * [REST](#rest) + +## Concepts + +### The Minting Mechanism + +The minting mechanism was designed to: + +* allow for a flexible inflation rate determined by market demand targeting a particular bonded-stake ratio +* effect a balance between market liquidity and staked supply + +In order to best determine the appropriate market rate for inflation rewards, a +moving change rate is used. The moving change rate mechanism ensures that if +the % bonded is either over or under the goal %-bonded, the inflation rate will +adjust to further incentivize or disincentivize being bonded, respectively. Setting the goal +%-bonded at less than 100% encourages the network to maintain some non-staked tokens +which should help provide some liquidity. + +It can be broken down in the following way: + +* If the inflation rate is below the goal %-bonded the inflation rate will + increase until a maximum value is reached +* If the goal % bonded (67% in Cosmos-Hub) is maintained, then the inflation + rate will stay constant +* If the inflation rate is above the goal %-bonded the inflation rate will + decrease until a minimum value is reached + + +## State + +### Minter + +The minter is a space for holding current inflation information. + +* Minter: `0x00 -> ProtocolBuffer(minter)` + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/mint/v1beta1/mint.proto#L10-L24 +``` + +### Params + +The mint module stores it's params in state with the prefix of `0x01`, +it can be updated with governance or the address with authority. + +* Params: `mint/params -> legacy_amino(params)` + +```protobuf reference +https://github.com/cosmos/cosmos-sdk/blob/v0.47.0-rc1/proto/cosmos/mint/v1beta1/mint.proto#L26-L59 +``` + +## Begin-Block + +Minting parameters are recalculated and inflation paid at the beginning of each block. + +### Inflation rate calculation + +Inflation rate is calculated using an "inflation calculation function" that's +passed to the `NewAppModule` function. If no function is passed, then the SDK's +default inflation function will be used (`NextInflationRate`). In case a custom +inflation calculation logic is needed, this can be achieved by defining and +passing a function that matches `InflationCalculationFn`'s signature. + +```go +type InflationCalculationFn func(ctx sdk.Context, minter Minter, params Params, bondedRatio sdk.Dec) sdk.Dec +``` + +#### NextInflationRate + +The target annual inflation rate is recalculated each block. +The inflation is also subject to a rate change (positive or negative) +depending on the distance from the desired ratio (67%). The maximum rate change +possible is defined to be 13% per year, however the annual inflation is capped +as between 7% and 20%. + +```go +NextInflationRate(params Params, bondedRatio sdk.Dec) (inflation sdk.Dec) { + inflationRateChangePerYear = (1 - bondedRatio/params.GoalBonded) * params.InflationRateChange + inflationRateChange = inflationRateChangePerYear/blocksPerYr + + // increase the new annual inflation for this next cycle + inflation += inflationRateChange + if inflation > params.InflationMax { + inflation = params.InflationMax + } + if inflation < params.InflationMin { + inflation = params.InflationMin + } + + return inflation +} +``` + +### NextAnnualProvisions + +Calculate the annual provisions based on current total supply and inflation +rate. This parameter is calculated once per block. + +```go +NextAnnualProvisions(params Params, totalSupply sdk.Dec) (provisions sdk.Dec) { + return Inflation * totalSupply +``` + +### BlockProvision + +Calculate the provisions generated for each block based on current annual provisions. The provisions are then minted by the `mint` module's `ModuleMinterAccount` and then transferred to the `auth`'s `FeeCollector` `ModuleAccount`. + +```go +BlockProvision(params Params) sdk.Coin { + provisionAmt = AnnualProvisions/ params.BlocksPerYear + return sdk.NewCoin(params.MintDenom, provisionAmt.Truncate()) +``` + + +## Parameters + +The minting module contains the following parameters: + +| Key | Type | Example | +|---------------------|-----------------|------------------------| +| MintDenom | string | "uatom" | +| InflationRateChange | string (dec) | "0.130000000000000000" | +| InflationMax | string (dec) | "0.200000000000000000" | +| InflationMin | string (dec) | "0.070000000000000000" | +| GoalBonded | string (dec) | "0.670000000000000000" | +| BlocksPerYear | string (uint64) | "6311520" | + + +## Events + +The minting module emits the following events: + +### BeginBlocker + +| Type | Attribute Key | Attribute Value | +|------|-------------------|--------------------| +| mint | bonded_ratio | {bondedRatio} | +| mint | inflation | {inflation} | +| mint | annual_provisions | {annualProvisions} | +| mint | amount | {amount} | + + +## Client + +### CLI + +A user can query and interact with the `mint` module using the CLI. + +#### Query + +The `query` commands allow users to query `mint` state. + +```shell +simd query mint --help +``` + +##### annual-provisions + +The `annual-provisions` command allow users to query the current minting annual provisions value + +```shell +simd query mint annual-provisions [flags] +``` + +Example: + +```shell +simd query mint annual-provisions +``` + +Example Output: + +```shell +22268504368893.612100895088410693 +``` + +##### inflation + +The `inflation` command allow users to query the current minting inflation value + +```shell +simd query mint inflation [flags] +``` + +Example: + +```shell +simd query mint inflation +``` + +Example Output: + +```shell +0.199200302563256955 +``` + +##### params + +The `params` command allow users to query the current minting parameters + +```shell +simd query mint params [flags] +``` + +Example: + +```yml +blocks_per_year: "4360000" +goal_bonded: "0.670000000000000000" +inflation_max: "0.200000000000000000" +inflation_min: "0.070000000000000000" +inflation_rate_change: "0.130000000000000000" +mint_denom: stake +``` + +### gRPC + +A user can query the `mint` module using gRPC endpoints. + +#### AnnualProvisions + +The `AnnualProvisions` endpoint allow users to query the current minting annual provisions value + +```shell +/cosmos.mint.v1beta1.Query/AnnualProvisions +``` + +Example: + +```shell +grpcurl -plaintext localhost:9090 cosmos.mint.v1beta1.Query/AnnualProvisions +``` + +Example Output: + +```json +{ + "annualProvisions": "1432452520532626265712995618" +} +``` + +#### Inflation + +The `Inflation` endpoint allow users to query the current minting inflation value + +```shell +/cosmos.mint.v1beta1.Query/Inflation +``` + +Example: + +```shell +grpcurl -plaintext localhost:9090 cosmos.mint.v1beta1.Query/Inflation +``` + +Example Output: + +```json +{ + "inflation": "130197115720711261" +} +``` + +#### Params + +The `Params` endpoint allow users to query the current minting parameters + +```shell +/cosmos.mint.v1beta1.Query/Params +``` + +Example: + +```shell +grpcurl -plaintext localhost:9090 cosmos.mint.v1beta1.Query/Params +``` + +Example Output: + +```json +{ + "params": { + "mintDenom": "stake", + "inflationRateChange": "130000000000000000", + "inflationMax": "200000000000000000", + "inflationMin": "70000000000000000", + "goalBonded": "670000000000000000", + "blocksPerYear": "6311520" + } +} +``` + +### REST + +A user can query the `mint` module using REST endpoints. + +#### annual-provisions + +```shell +/cosmos/mint/v1beta1/annual_provisions +``` + +Example: + +```shell +curl "localhost:1317/cosmos/mint/v1beta1/annual_provisions" +``` + +Example Output: + +```json +{ + "annualProvisions": "1432452520532626265712995618" +} +``` + +#### inflation + +```shell +/cosmos/mint/v1beta1/inflation +``` + +Example: + +```shell +curl "localhost:1317/cosmos/mint/v1beta1/inflation" +``` + +Example Output: + +```json +{ + "inflation": "130197115720711261" +} +``` + +#### params + +```shell +/cosmos/mint/v1beta1/params +``` + +Example: + +```shell +curl "localhost:1317/cosmos/mint/v1beta1/params" +``` + +Example Output: + +```json +{ + "params": { + "mintDenom": "stake", + "inflationRateChange": "130000000000000000", + "inflationMax": "200000000000000000", + "inflationMin": "70000000000000000", + "goalBonded": "670000000000000000", + "blocksPerYear": "6311520" + } +} +``` diff --git a/x/mint/abci.go b/x/mint/abci.go new file mode 100644 index 00000000..b7ba85e8 --- /dev/null +++ b/x/mint/abci.go @@ -0,0 +1,80 @@ +package mint + +import ( + "time" + + "github.com/burnt-labs/xion/x/mint/keeper" + "github.com/burnt-labs/xion/x/mint/types" + "github.com/cosmos/cosmos-sdk/telemetry" + sdk "github.com/cosmos/cosmos-sdk/types" +) + +// BeginBlocker mints new tokens for the previous block. +func BeginBlocker(ctx sdk.Context, k keeper.Keeper, ic types.InflationCalculationFn) { + defer telemetry.ModuleMeasureSince(types.ModuleName, time.Now(), telemetry.MetricKeyBeginBlocker) + + // fetch stored minter & params + minter := k.GetMinter(ctx) + params := k.GetParams(ctx) + + // fetch collected fees + collectedFeeCoin := k.CountCollectedFees(ctx, params.MintDenom) + + // recalculate inflation rate + bondedRatio := k.BondedRatio(ctx) + minter.Inflation = ic(ctx, minter, params, bondedRatio) + minter.AnnualProvisions = minter.NextAnnualProvisions(params, k.BondedTokenSupply(ctx)) + k.SetMinter(ctx, minter) + + // mint coins, update supply + neededCoin := minter.BlockProvision(params) + mintedCoin := sdk.NewCoin(params.MintDenom, sdk.ZeroInt()) + burnedCoin := sdk.NewCoin(params.MintDenom, sdk.ZeroInt()) + + if collectedFeeCoin.IsLT(neededCoin) { + // if the fee collector has not collected enough fees to meet the + // staking incentive goals, mint enough to meet. + mintedCoin = neededCoin.Sub(collectedFeeCoin) + mintedCoins := sdk.NewCoins(mintedCoin) + + err := k.MintCoins(ctx, mintedCoins) + if err != nil { + panic(err) + } + + // send the minted coins to the fee collector account + err = k.AddCollectedFees(ctx, mintedCoins) + if err != nil { + panic(err) + } + + if mintedCoin.Amount.IsInt64() { + defer telemetry.ModuleSetGauge(types.ModuleName, float32(mintedCoin.Amount.Int64()), "minted_tokens") + } + + } else { + // if the fee collector has collected more fees than are needed to meet the + // staking incentive goals, burn the rest. + burnedCoin = collectedFeeCoin.Sub(neededCoin) + burnedCoins := sdk.NewCoins(burnedCoin) + err := k.BurnFees(ctx, burnedCoins) + if err != nil { + panic(err) + } + } + + mintEvent := types.MintIncentiveTokens{ + BondedRatio: bondedRatio, + Inflation: minter.Inflation, + AnnualProvisions: minter.AnnualProvisions, + NeededAmount: neededCoin.Amount.Uint64(), + CollectedAmount: collectedFeeCoin.Amount.Uint64(), + MintedAmount: mintedCoin.Amount.Uint64(), + BurnedAmount: burnedCoin.Amount.Uint64(), + } + if err := ctx.EventManager().EmitTypedEvent(&mintEvent); err != nil { + k.Logger(ctx).Error("error emitting event", + "error", err, + "event", mintEvent) + } +} diff --git a/x/mint/client/cli/query.go b/x/mint/client/cli/query.go new file mode 100644 index 00000000..1309f37a --- /dev/null +++ b/x/mint/client/cli/query.go @@ -0,0 +1,117 @@ +package cli + +import ( + "fmt" + + "github.com/spf13/cobra" + + "github.com/burnt-labs/xion/x/mint/types" + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/flags" +) + +// GetQueryCmd returns the cli query commands for the minting module. +func GetQueryCmd() *cobra.Command { + mintingQueryCmd := &cobra.Command{ + Use: types.ModuleName, + Short: "Querying commands for the minting module", + DisableFlagParsing: true, + SuggestionsMinimumDistance: 2, + RunE: client.ValidateCmd, + } + + mintingQueryCmd.AddCommand( + GetCmdQueryParams(), + GetCmdQueryInflation(), + GetCmdQueryAnnualProvisions(), + ) + + return mintingQueryCmd +} + +// GetCmdQueryParams implements a command to return the current minting +// parameters. +func GetCmdQueryParams() *cobra.Command { + cmd := &cobra.Command{ + Use: "params", + Short: "Query the current minting parameters", + Args: cobra.NoArgs, + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientQueryContext(cmd) + if err != nil { + return err + } + queryClient := types.NewQueryClient(clientCtx) + + params := &types.QueryParamsRequest{} + res, err := queryClient.Params(cmd.Context(), params) + if err != nil { + return err + } + + return clientCtx.PrintProto(&res.Params) + }, + } + + flags.AddQueryFlagsToCmd(cmd) + + return cmd +} + +// GetCmdQueryInflation implements a command to return the current minting +// inflation value. +func GetCmdQueryInflation() *cobra.Command { + cmd := &cobra.Command{ + Use: "inflation", + Short: "Query the current minting inflation value", + Args: cobra.NoArgs, + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientQueryContext(cmd) + if err != nil { + return err + } + queryClient := types.NewQueryClient(clientCtx) + + params := &types.QueryInflationRequest{} + res, err := queryClient.Inflation(cmd.Context(), params) + if err != nil { + return err + } + + return clientCtx.PrintString(fmt.Sprintf("%s\n", res.Inflation)) + }, + } + + flags.AddQueryFlagsToCmd(cmd) + + return cmd +} + +// GetCmdQueryAnnualProvisions implements a command to return the current minting +// annual provisions value. +func GetCmdQueryAnnualProvisions() *cobra.Command { + cmd := &cobra.Command{ + Use: "annual-provisions", + Short: "Query the current minting annual provisions value", + Args: cobra.NoArgs, + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientQueryContext(cmd) + if err != nil { + return err + } + queryClient := types.NewQueryClient(clientCtx) + + params := &types.QueryAnnualProvisionsRequest{} + res, err := queryClient.AnnualProvisions(cmd.Context(), params) + if err != nil { + return err + } + + return clientCtx.PrintString(fmt.Sprintf("%s\n", res.AnnualProvisions)) + }, + } + + flags.AddQueryFlagsToCmd(cmd) + + return cmd +} diff --git a/x/mint/client/cli/query_test.go b/x/mint/client/cli/query_test.go new file mode 100644 index 00000000..380b2cea --- /dev/null +++ b/x/mint/client/cli/query_test.go @@ -0,0 +1,207 @@ +package cli_test + +import ( + "context" + "fmt" + "io" + "strings" + "testing" + + rpcclientmock "github.com/cometbft/cometbft/rpc/client/mock" + "github.com/stretchr/testify/require" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/flags" + svrcmd "github.com/cosmos/cosmos-sdk/server/cmd" + clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli" + + "github.com/burnt-labs/xion/x/mint" + mintcli "github.com/burnt-labs/xion/x/mint/client/cli" + "github.com/cosmos/cosmos-sdk/crypto/keyring" + testutilmod "github.com/cosmos/cosmos-sdk/types/module/testutil" +) + +func TestGetCmdQueryParams(t *testing.T) { + encCfg := testutilmod.MakeTestEncodingConfig(mint.AppModuleBasic{}) + kr := keyring.NewInMemory(encCfg.Codec) + baseCtx := client.Context{}. + WithKeyring(kr). + WithTxConfig(encCfg.TxConfig). + WithCodec(encCfg.Codec). + WithClient(clitestutil.MockTendermintRPC{Client: rpcclientmock.Client{}}). + WithAccountRetriever(client.MockAccountRetriever{}). + WithOutput(io.Discard). + WithChainID("test-chain") + + cmd := mintcli.GetCmdQueryParams() + + testCases := []struct { + name string + flagArgs []string + expCmdOutput string + expectedOutput string + }{ + { + "json output", + []string{fmt.Sprintf("--%s=1", flags.FlagHeight), fmt.Sprintf("--%s=json", flags.FlagOutput)}, + `[--height=1 --output=json]`, + `{"mint_denom":"","inflation_rate_change":"0","inflation_max":"0","inflation_min":"0","goal_bonded":"0","blocks_per_year":"0"}`, + }, + { + "text output", + []string{fmt.Sprintf("--%s=1", flags.FlagHeight), fmt.Sprintf("--%s=text", flags.FlagOutput)}, + `[--height=1 --output=text]`, + `blocks_per_year: "0" +goal_bonded: "0" +inflation_max: "0" +inflation_min: "0" +inflation_rate_change: "0" +mint_denom: ""`, + }, + } + + for _, tc := range testCases { + tc := tc + + t.Run(tc.name, func(t *testing.T) { + ctx := svrcmd.CreateExecuteContext(context.Background()) + + cmd.SetOut(io.Discard) + require.NotNil(t, cmd) + + cmd.SetContext(ctx) + cmd.SetArgs(tc.flagArgs) + + require.NoError(t, client.SetCmdClientContextHandler(baseCtx, cmd)) + + if len(tc.flagArgs) != 0 { + require.Contains(t, fmt.Sprint(cmd), "params [] [] Query the current minting parameters") + require.Contains(t, fmt.Sprint(cmd), tc.expCmdOutput) + } + + out, err := clitestutil.ExecTestCLICmd(baseCtx, cmd, tc.flagArgs) + require.NoError(t, err) + require.Equal(t, tc.expectedOutput, strings.TrimSpace(out.String())) + }) + } +} + +func TestGetCmdQueryInflation(t *testing.T) { + encCfg := testutilmod.MakeTestEncodingConfig(mint.AppModuleBasic{}) + kr := keyring.NewInMemory(encCfg.Codec) + baseCtx := client.Context{}. + WithKeyring(kr). + WithTxConfig(encCfg.TxConfig). + WithCodec(encCfg.Codec). + WithClient(clitestutil.MockTendermintRPC{Client: rpcclientmock.Client{}}). + WithAccountRetriever(client.MockAccountRetriever{}). + WithOutput(io.Discard). + WithChainID("test-chain") + + cmd := mintcli.GetCmdQueryInflation() + + testCases := []struct { + name string + flagArgs []string + expCmdOutput string + expectedOutput string + }{ + { + "json output", + []string{fmt.Sprintf("--%s=1", flags.FlagHeight), fmt.Sprintf("--%s=json", flags.FlagOutput)}, + `[--height=1 --output=json]`, + ``, + }, + { + "text output", + []string{fmt.Sprintf("--%s=1", flags.FlagHeight), fmt.Sprintf("--%s=text", flags.FlagOutput)}, + `[--height=1 --output=text]`, + ``, + }, + } + + for _, tc := range testCases { + tc := tc + + t.Run(tc.name, func(t *testing.T) { + ctx := svrcmd.CreateExecuteContext(context.Background()) + + cmd.SetOut(io.Discard) + require.NotNil(t, cmd) + + cmd.SetContext(ctx) + cmd.SetArgs(tc.flagArgs) + + require.NoError(t, client.SetCmdClientContextHandler(baseCtx, cmd)) + + if len(tc.flagArgs) != 0 { + require.Contains(t, fmt.Sprint(cmd), "inflation [] [] Query the current minting inflation value") + require.Contains(t, fmt.Sprint(cmd), tc.expCmdOutput) + } + + out, err := clitestutil.ExecTestCLICmd(baseCtx, cmd, tc.flagArgs) + require.NoError(t, err) + require.Equal(t, tc.expectedOutput, strings.TrimSpace(out.String())) + }) + } +} + +func TestGetCmdQueryAnnualProvisions(t *testing.T) { + encCfg := testutilmod.MakeTestEncodingConfig(mint.AppModuleBasic{}) + kr := keyring.NewInMemory(encCfg.Codec) + baseCtx := client.Context{}. + WithKeyring(kr). + WithTxConfig(encCfg.TxConfig). + WithCodec(encCfg.Codec). + WithClient(clitestutil.MockTendermintRPC{Client: rpcclientmock.Client{}}). + WithAccountRetriever(client.MockAccountRetriever{}). + WithOutput(io.Discard). + WithChainID("test-chain") + + cmd := mintcli.GetCmdQueryAnnualProvisions() + + testCases := []struct { + name string + flagArgs []string + expCmdOutput string + expectedOutput string + }{ + { + "json output", + []string{fmt.Sprintf("--%s=1", flags.FlagHeight), fmt.Sprintf("--%s=json", flags.FlagOutput)}, + `[--height=1 --output=json]`, + ``, + }, + { + "text output", + []string{fmt.Sprintf("--%s=1", flags.FlagHeight), fmt.Sprintf("--%s=text", flags.FlagOutput)}, + `[--height=1 --output=text]`, + ``, + }, + } + + for _, tc := range testCases { + tc := tc + + t.Run(tc.name, func(t *testing.T) { + ctx := svrcmd.CreateExecuteContext(context.Background()) + + cmd.SetOut(io.Discard) + require.NotNil(t, cmd) + + cmd.SetContext(ctx) + cmd.SetArgs(tc.flagArgs) + + require.NoError(t, client.SetCmdClientContextHandler(baseCtx, cmd)) + + if len(tc.flagArgs) != 0 { + require.Contains(t, fmt.Sprint(cmd), "annual-provisions [] [] Query the current minting annual provisions value") + require.Contains(t, fmt.Sprint(cmd), tc.expCmdOutput) + } + + out, err := clitestutil.ExecTestCLICmd(baseCtx, cmd, tc.flagArgs) + require.NoError(t, err) + require.Equal(t, tc.expectedOutput, strings.TrimSpace(out.String())) + }) + } +} diff --git a/x/mint/exported/exported.go b/x/mint/exported/exported.go new file mode 100644 index 00000000..000114e6 --- /dev/null +++ b/x/mint/exported/exported.go @@ -0,0 +1,18 @@ +package exported + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" +) + +type ( + ParamSet = paramtypes.ParamSet + + // Subspace defines an interface that implements the legacy x/params Subspace + // type. + // + // NOTE: This is used solely for migration of x/params managed parameters. + Subspace interface { + GetParamSet(ctx sdk.Context, ps ParamSet) + } +) diff --git a/x/mint/keeper/genesis.go b/x/mint/keeper/genesis.go new file mode 100644 index 00000000..a6975b52 --- /dev/null +++ b/x/mint/keeper/genesis.go @@ -0,0 +1,24 @@ +package keeper + +import ( + "github.com/burnt-labs/xion/x/mint/types" + sdk "github.com/cosmos/cosmos-sdk/types" +) + +// InitGenesis new mint genesis +func (keeper Keeper) InitGenesis(ctx sdk.Context, ak types.AccountKeeper, data *types.GenesisState) { + keeper.SetMinter(ctx, data.Minter) + + if err := keeper.SetParams(ctx, data.Params); err != nil { + panic(err) + } + + ak.GetModuleAccount(ctx, types.ModuleName) +} + +// ExportGenesis returns a GenesisState for a given context and keeper. +func (keeper Keeper) ExportGenesis(ctx sdk.Context) *types.GenesisState { + minter := keeper.GetMinter(ctx) + params := keeper.GetParams(ctx) + return types.NewGenesisState(minter, params) +} diff --git a/x/mint/keeper/genesis_test.go b/x/mint/keeper/genesis_test.go new file mode 100644 index 00000000..9e0f1821 --- /dev/null +++ b/x/mint/keeper/genesis_test.go @@ -0,0 +1,83 @@ +package keeper_test + +import ( + "testing" + + "cosmossdk.io/math" + "github.com/golang/mock/gomock" + "github.com/stretchr/testify/suite" + + "github.com/burnt-labs/xion/x/mint" + "github.com/burnt-labs/xion/x/mint/keeper" + minttestutil "github.com/burnt-labs/xion/x/mint/testutil" + "github.com/burnt-labs/xion/x/mint/types" + "github.com/cosmos/cosmos-sdk/codec" + storetypes "github.com/cosmos/cosmos-sdk/store/types" + "github.com/cosmos/cosmos-sdk/testutil" + sdk "github.com/cosmos/cosmos-sdk/types" + moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" +) + +var minterAcc = authtypes.NewEmptyModuleAccount(types.ModuleName, authtypes.Minter) + +type GenesisTestSuite struct { + suite.Suite + + sdkCtx sdk.Context + keeper keeper.Keeper + cdc codec.BinaryCodec + accountKeeper types.AccountKeeper + key *storetypes.KVStoreKey +} + +func TestGenesisTestSuite(t *testing.T) { + suite.Run(t, new(GenesisTestSuite)) +} + +func (s *GenesisTestSuite) SetupTest() { + key := sdk.NewKVStoreKey(types.StoreKey) + testCtx := testutil.DefaultContextWithDB(s.T(), key, sdk.NewTransientStoreKey("transient_test")) + encCfg := moduletestutil.MakeTestEncodingConfig(mint.AppModuleBasic{}) + + // gomock initializations + ctrl := gomock.NewController(s.T()) + s.cdc = codec.NewProtoCodec(encCfg.InterfaceRegistry) + s.sdkCtx = testCtx.Ctx + s.key = key + + stakingKeeper := minttestutil.NewMockStakingKeeper(ctrl) + accountKeeper := minttestutil.NewMockAccountKeeper(ctrl) + bankKeeper := minttestutil.NewMockBankKeeper(ctrl) + s.accountKeeper = accountKeeper + accountKeeper.EXPECT().GetModuleAddress(minterAcc.Name).Return(minterAcc.GetAddress()) + accountKeeper.EXPECT().GetModuleAccount(s.sdkCtx, minterAcc.Name).Return(minterAcc) + + s.keeper = keeper.NewKeeper(s.cdc, key, stakingKeeper, accountKeeper, bankKeeper, "", "") +} + +func (s *GenesisTestSuite) TestImportExportGenesis() { + genesisState := types.DefaultGenesisState() + genesisState.Minter = types.NewMinter(sdk.NewDecWithPrec(20, 2), math.LegacyNewDec(1)) + genesisState.Params = types.NewParams( + "testDenom", + sdk.NewDecWithPrec(15, 2), + sdk.NewDecWithPrec(22, 2), + sdk.NewDecWithPrec(9, 2), + sdk.NewDecWithPrec(69, 2), + uint64(60*60*8766/5), + ) + + s.keeper.InitGenesis(s.sdkCtx, s.accountKeeper, genesisState) + + minter := s.keeper.GetMinter(s.sdkCtx) + s.Require().Equal(genesisState.Minter, minter) + + invalidCtx := testutil.DefaultContextWithDB(s.T(), s.key, sdk.NewTransientStoreKey("transient_test")) + s.Require().Panics(func() { s.keeper.GetMinter(invalidCtx.Ctx) }, "stored minter should not have been nil") + params := s.keeper.GetParams(s.sdkCtx) + s.Require().Equal(genesisState.Params, params) + + genesisState2 := s.keeper.ExportGenesis(s.sdkCtx) + s.Require().Equal(genesisState, genesisState2) +} diff --git a/x/mint/keeper/grpc_query.go b/x/mint/keeper/grpc_query.go new file mode 100644 index 00000000..ea256d8e --- /dev/null +++ b/x/mint/keeper/grpc_query.go @@ -0,0 +1,34 @@ +package keeper + +import ( + "context" + + "github.com/burnt-labs/xion/x/mint/types" + sdk "github.com/cosmos/cosmos-sdk/types" +) + +var _ types.QueryServer = Keeper{} + +// Params returns params of the mint module. +func (k Keeper) Params(c context.Context, _ *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { + ctx := sdk.UnwrapSDKContext(c) + params := k.GetParams(ctx) + + return &types.QueryParamsResponse{Params: params}, nil +} + +// Inflation returns minter.Inflation of the mint module. +func (k Keeper) Inflation(c context.Context, _ *types.QueryInflationRequest) (*types.QueryInflationResponse, error) { + ctx := sdk.UnwrapSDKContext(c) + minter := k.GetMinter(ctx) + + return &types.QueryInflationResponse{Inflation: minter.Inflation}, nil +} + +// AnnualProvisions returns minter.AnnualProvisions of the mint module. +func (k Keeper) AnnualProvisions(c context.Context, _ *types.QueryAnnualProvisionsRequest) (*types.QueryAnnualProvisionsResponse, error) { + ctx := sdk.UnwrapSDKContext(c) + minter := k.GetMinter(ctx) + + return &types.QueryAnnualProvisionsResponse{AnnualProvisions: minter.AnnualProvisions}, nil +} diff --git a/x/mint/keeper/grpc_query_test.go b/x/mint/keeper/grpc_query_test.go new file mode 100644 index 00000000..61b0c03d --- /dev/null +++ b/x/mint/keeper/grpc_query_test.go @@ -0,0 +1,80 @@ +package keeper_test + +import ( + gocontext "context" + "testing" + + "github.com/golang/mock/gomock" + "github.com/stretchr/testify/suite" + + "github.com/burnt-labs/xion/x/mint" + "github.com/burnt-labs/xion/x/mint/keeper" + minttestutil "github.com/burnt-labs/xion/x/mint/testutil" + "github.com/burnt-labs/xion/x/mint/types" + "github.com/cosmos/cosmos-sdk/baseapp" + "github.com/cosmos/cosmos-sdk/testutil" + sdk "github.com/cosmos/cosmos-sdk/types" + moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" +) + +type MintTestSuite struct { + suite.Suite + + ctx sdk.Context + queryClient types.QueryClient + mintKeeper keeper.Keeper +} + +func (suite *MintTestSuite) SetupTest() { + encCfg := moduletestutil.MakeTestEncodingConfig(mint.AppModuleBasic{}) + key := sdk.NewKVStoreKey(types.StoreKey) + testCtx := testutil.DefaultContextWithDB(suite.T(), key, sdk.NewTransientStoreKey("transient_test")) + suite.ctx = testCtx.Ctx + + // gomock initializations + ctrl := gomock.NewController(suite.T()) + accountKeeper := minttestutil.NewMockAccountKeeper(ctrl) + bankKeeper := minttestutil.NewMockBankKeeper(ctrl) + stakingKeeper := minttestutil.NewMockStakingKeeper(ctrl) + + accountKeeper.EXPECT().GetModuleAddress("mint").Return(sdk.AccAddress{}) + + suite.mintKeeper = keeper.NewKeeper( + encCfg.Codec, + key, + stakingKeeper, + accountKeeper, + bankKeeper, + authtypes.FeeCollectorName, + authtypes.NewModuleAddress(govtypes.ModuleName).String(), + ) + + err := suite.mintKeeper.SetParams(suite.ctx, types.DefaultParams()) + suite.Require().NoError(err) + suite.mintKeeper.SetMinter(suite.ctx, types.DefaultInitialMinter()) + + queryHelper := baseapp.NewQueryServerTestHelper(testCtx.Ctx, encCfg.InterfaceRegistry) + types.RegisterQueryServer(queryHelper, suite.mintKeeper) + + suite.queryClient = types.NewQueryClient(queryHelper) +} + +func (suite *MintTestSuite) TestGRPCParams() { + params, err := suite.queryClient.Params(gocontext.Background(), &types.QueryParamsRequest{}) + suite.Require().NoError(err) + suite.Require().Equal(params.Params, suite.mintKeeper.GetParams(suite.ctx)) + + inflation, err := suite.queryClient.Inflation(gocontext.Background(), &types.QueryInflationRequest{}) + suite.Require().NoError(err) + suite.Require().Equal(inflation.Inflation, suite.mintKeeper.GetMinter(suite.ctx).Inflation) + + annualProvisions, err := suite.queryClient.AnnualProvisions(gocontext.Background(), &types.QueryAnnualProvisionsRequest{}) + suite.Require().NoError(err) + suite.Require().Equal(annualProvisions.AnnualProvisions, suite.mintKeeper.GetMinter(suite.ctx).AnnualProvisions) +} + +func TestMintTestSuite(t *testing.T) { + suite.Run(t, new(MintTestSuite)) +} diff --git a/x/mint/keeper/keeper.go b/x/mint/keeper/keeper.go new file mode 100644 index 00000000..68222a06 --- /dev/null +++ b/x/mint/keeper/keeper.go @@ -0,0 +1,154 @@ +package keeper + +import ( + "fmt" + + "cosmossdk.io/math" + "github.com/cometbft/cometbft/libs/log" + + "github.com/burnt-labs/xion/x/mint/types" + "github.com/cosmos/cosmos-sdk/codec" + storetypes "github.com/cosmos/cosmos-sdk/store/types" + sdk "github.com/cosmos/cosmos-sdk/types" +) + +// Keeper of the mint store +type Keeper struct { + cdc codec.BinaryCodec + storeKey storetypes.StoreKey + stakingKeeper types.StakingKeeper + bankKeeper types.BankKeeper + accountKeeper types.AccountKeeper + feeCollectorName string + + // the address capable of executing a MsgUpdateParams message. Typically, this + // should be the x/gov module account. + authority string +} + +// NewKeeper creates a new mint Keeper instance +func NewKeeper( + cdc codec.BinaryCodec, + key storetypes.StoreKey, + sk types.StakingKeeper, + ak types.AccountKeeper, + bk types.BankKeeper, + feeCollectorName string, + authority string, +) Keeper { + // ensure mint module account is set + if addr := ak.GetModuleAddress(types.ModuleName); addr == nil { + panic(fmt.Sprintf("the x/%s module account has not been set", types.ModuleName)) + } + + return Keeper{ + cdc: cdc, + storeKey: key, + stakingKeeper: sk, + bankKeeper: bk, + accountKeeper: ak, + feeCollectorName: feeCollectorName, + authority: authority, + } +} + +// GetAuthority returns the x/mint module's authority. +func (k Keeper) GetAuthority() string { + return k.authority +} + +// Logger returns a module-specific logger. +func (k Keeper) Logger(ctx sdk.Context) log.Logger { + return ctx.Logger().With("module", "x/"+types.ModuleName) +} + +// GetMinter returns the minter. +func (k Keeper) GetMinter(ctx sdk.Context) (minter types.Minter) { + store := ctx.KVStore(k.storeKey) + bz := store.Get(types.MinterKey) + if bz == nil { + panic("stored minter should not have been nil") + } + + k.cdc.MustUnmarshal(bz, &minter) + return +} + +// SetMinter sets the minter. +func (k Keeper) SetMinter(ctx sdk.Context, minter types.Minter) { + store := ctx.KVStore(k.storeKey) + bz := k.cdc.MustMarshal(&minter) + store.Set(types.MinterKey, bz) +} + +// SetParams sets the x/mint module parameters. +func (k Keeper) SetParams(ctx sdk.Context, p types.Params) error { + if err := p.Validate(); err != nil { + return err + } + + store := ctx.KVStore(k.storeKey) + bz := k.cdc.MustMarshal(&p) + store.Set(types.ParamsKey, bz) + + return nil +} + +// GetParams returns the current x/mint module parameters. +func (k Keeper) GetParams(ctx sdk.Context) (p types.Params) { + store := ctx.KVStore(k.storeKey) + bz := store.Get(types.ParamsKey) + if bz == nil { + return p + } + + k.cdc.MustUnmarshal(bz, &p) + return p +} + +// StakingTokenSupply implements an alias call to the underlying staking keeper's +// StakingTokenSupply to be used in BeginBlocker. +func (k Keeper) StakingTokenSupply(ctx sdk.Context) math.Int { + return k.stakingKeeper.StakingTokenSupply(ctx) +} + +// BondedTokenSupply implements an alian call to the underlying staking keeper's +// BondedTokenSupply to be used in BeginBlocker +func (k Keeper) BondedTokenSupply(ctx sdk.Context) math.Int { + return k.stakingKeeper.TotalBondedTokens(ctx) +} + +// BondedRatio implements an alias call to the underlying staking keeper's +// BondedRatio to be used in BeginBlocker. +func (k Keeper) BondedRatio(ctx sdk.Context) math.LegacyDec { + return k.stakingKeeper.BondedRatio(ctx) +} + +// MintCoins implements an alias call to the underlying supply keeper's +// MintCoins to be used in BeginBlocker. +func (k Keeper) MintCoins(ctx sdk.Context, newCoins sdk.Coins) error { + if newCoins.Empty() { + // skip as no coins need to be minted + return nil + } + + return k.bankKeeper.MintCoins(ctx, types.ModuleName, newCoins) +} + +// AddCollectedFees implements an alias call to the underlying supply keeper's +// AddCollectedFees to be used in BeginBlocker. +func (k Keeper) AddCollectedFees(ctx sdk.Context, fees sdk.Coins) error { + return k.bankKeeper.SendCoinsFromModuleToModule(ctx, types.ModuleName, k.feeCollectorName, fees) +} + +// CountCollectedFees implements an alias call to the underlying supply keeper's +// CountCollectedFees to be used in BeginBlocker. +func (k Keeper) CountCollectedFees(ctx sdk.Context, denom string) sdk.Coin { + return k.bankKeeper.GetBalance(ctx, k.accountKeeper.GetModuleAccount(ctx, k.feeCollectorName).GetAddress(), denom) +} + +// BurnFees implements an alias call to the underlying supply keeper's +// BurnFees to be used in BeginBlocker. +func (k Keeper) BurnFees(ctx sdk.Context, fees sdk.Coins) error { + return k.bankKeeper.BurnCoins(ctx, k.feeCollectorName, fees) +} diff --git a/x/mint/keeper/keeper_test.go b/x/mint/keeper/keeper_test.go new file mode 100644 index 00000000..308f6e3a --- /dev/null +++ b/x/mint/keeper/keeper_test.go @@ -0,0 +1,138 @@ +package keeper_test + +import ( + "testing" + + "github.com/golang/mock/gomock" + "github.com/stretchr/testify/suite" + + "github.com/burnt-labs/xion/x/mint" + "github.com/burnt-labs/xion/x/mint/keeper" + minttestutil "github.com/burnt-labs/xion/x/mint/testutil" + "github.com/burnt-labs/xion/x/mint/types" + "github.com/cosmos/cosmos-sdk/testutil" + sdk "github.com/cosmos/cosmos-sdk/types" + moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" +) + +type IntegrationTestSuite struct { + suite.Suite + + mintKeeper keeper.Keeper + ctx sdk.Context + msgServer types.MsgServer + stakingKeeper *minttestutil.MockStakingKeeper + bankKeeper *minttestutil.MockBankKeeper +} + +func TestKeeperTestSuite(t *testing.T) { + suite.Run(t, new(IntegrationTestSuite)) +} + +func (s *IntegrationTestSuite) SetupTest() { + encCfg := moduletestutil.MakeTestEncodingConfig(mint.AppModuleBasic{}) + key := sdk.NewKVStoreKey(types.StoreKey) + testCtx := testutil.DefaultContextWithDB(s.T(), key, sdk.NewTransientStoreKey("transient_test")) + s.ctx = testCtx.Ctx + + // gomock initializations + ctrl := gomock.NewController(s.T()) + accountKeeper := minttestutil.NewMockAccountKeeper(ctrl) + bankKeeper := minttestutil.NewMockBankKeeper(ctrl) + stakingKeeper := minttestutil.NewMockStakingKeeper(ctrl) + + accountKeeper.EXPECT().GetModuleAddress(types.ModuleName).Return(sdk.AccAddress{}) + + s.mintKeeper = keeper.NewKeeper( + encCfg.Codec, + key, + stakingKeeper, + accountKeeper, + bankKeeper, + authtypes.FeeCollectorName, + authtypes.NewModuleAddress(govtypes.ModuleName).String(), + ) + s.stakingKeeper = stakingKeeper + s.bankKeeper = bankKeeper + + s.Require().Equal(testCtx.Ctx.Logger().With("module", "x/"+types.ModuleName), + s.mintKeeper.Logger(testCtx.Ctx)) + + err := s.mintKeeper.SetParams(s.ctx, types.DefaultParams()) + s.Require().NoError(err) + s.mintKeeper.SetMinter(s.ctx, types.DefaultInitialMinter()) + + s.msgServer = keeper.NewMsgServerImpl(s.mintKeeper) +} + +func (s *IntegrationTestSuite) TestParams() { + testCases := []struct { + name string + input types.Params + expectErr bool + }{ + { + name: "set invalid params", + input: types.Params{ + MintDenom: sdk.DefaultBondDenom, + InflationRateChange: sdk.NewDecWithPrec(-13, 2), + InflationMax: sdk.NewDecWithPrec(20, 2), + InflationMin: sdk.NewDecWithPrec(7, 2), + GoalBonded: sdk.NewDecWithPrec(67, 2), + BlocksPerYear: uint64(60 * 60 * 8766 / 5), + }, + expectErr: true, + }, + { + name: "set full valid params", + input: types.Params{ + MintDenom: sdk.DefaultBondDenom, + InflationRateChange: sdk.NewDecWithPrec(8, 2), + InflationMax: sdk.NewDecWithPrec(20, 2), + InflationMin: sdk.NewDecWithPrec(2, 2), + GoalBonded: sdk.NewDecWithPrec(37, 2), + BlocksPerYear: uint64(60 * 60 * 8766 / 5), + }, + expectErr: false, + }, + } + + for _, tc := range testCases { + tc := tc + + s.Run(tc.name, func() { + expected := s.mintKeeper.GetParams(s.ctx) + err := s.mintKeeper.SetParams(s.ctx, tc.input) + if tc.expectErr { + s.Require().Error(err) + } else { + expected = tc.input + s.Require().NoError(err) + } + + p := s.mintKeeper.GetParams(s.ctx) + s.Require().Equal(expected, p) + }) + } +} + +func (s *IntegrationTestSuite) TestAliasFunctions() { + stakingTokenSupply := sdk.NewIntFromUint64(100000000000) + s.stakingKeeper.EXPECT().StakingTokenSupply(s.ctx).Return(stakingTokenSupply) + s.Require().Equal(s.mintKeeper.StakingTokenSupply(s.ctx), stakingTokenSupply) + + bondedRatio := sdk.NewDecWithPrec(15, 2) + s.stakingKeeper.EXPECT().BondedRatio(s.ctx).Return(bondedRatio) + s.Require().Equal(s.mintKeeper.BondedRatio(s.ctx), bondedRatio) + + coins := sdk.NewCoins(sdk.NewCoin("stake", sdk.NewInt(1000000))) + s.bankKeeper.EXPECT().MintCoins(s.ctx, types.ModuleName, coins).Return(nil) + s.Require().Equal(s.mintKeeper.MintCoins(s.ctx, sdk.NewCoins()), nil) + s.Require().Nil(s.mintKeeper.MintCoins(s.ctx, coins)) + + fees := sdk.NewCoins(sdk.NewCoin("stake", sdk.NewInt(1000))) + s.bankKeeper.EXPECT().SendCoinsFromModuleToModule(s.ctx, types.ModuleName, authtypes.FeeCollectorName, fees).Return(nil) + s.Require().Nil(s.mintKeeper.AddCollectedFees(s.ctx, fees)) +} diff --git a/x/mint/keeper/msg_server.go b/x/mint/keeper/msg_server.go new file mode 100644 index 00000000..a153a758 --- /dev/null +++ b/x/mint/keeper/msg_server.go @@ -0,0 +1,38 @@ +package keeper + +import ( + "context" + + "github.com/burnt-labs/xion/x/mint/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/errors" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" +) + +var _ types.MsgServer = msgServer{} + +// msgServer is a wrapper of Keeper. +type msgServer struct { + Keeper +} + +// NewMsgServerImpl returns an implementation of the x/mint MsgServer interface. +func NewMsgServerImpl(k Keeper) types.MsgServer { + return &msgServer{ + Keeper: k, + } +} + +// UpdateParams updates the params. +func (ms msgServer) UpdateParams(goCtx context.Context, req *types.MsgUpdateParams) (*types.MsgUpdateParamsResponse, error) { + if ms.authority != req.Authority { + return nil, errors.Wrapf(govtypes.ErrInvalidSigner, "invalid authority; expected %s, got %s", ms.authority, req.Authority) + } + + ctx := sdk.UnwrapSDKContext(goCtx) + if err := ms.SetParams(ctx, req.Params); err != nil { + return nil, err + } + + return &types.MsgUpdateParamsResponse{}, nil +} diff --git a/x/mint/keeper/msg_server_test.go b/x/mint/keeper/msg_server_test.go new file mode 100644 index 00000000..33189164 --- /dev/null +++ b/x/mint/keeper/msg_server_test.go @@ -0,0 +1,64 @@ +package keeper_test + +import ( + "github.com/burnt-labs/xion/x/mint/types" + sdk "github.com/cosmos/cosmos-sdk/types" +) + +func (s *IntegrationTestSuite) TestUpdateParams() { + testCases := []struct { + name string + request *types.MsgUpdateParams + expectErr bool + }{ + { + name: "set invalid authority", + request: &types.MsgUpdateParams{ + Authority: "foo", + }, + expectErr: true, + }, + { + name: "set invalid params", + request: &types.MsgUpdateParams{ + Authority: s.mintKeeper.GetAuthority(), + Params: types.Params{ + MintDenom: sdk.DefaultBondDenom, + InflationRateChange: sdk.NewDecWithPrec(-13, 2), + InflationMax: sdk.NewDecWithPrec(20, 2), + InflationMin: sdk.NewDecWithPrec(7, 2), + GoalBonded: sdk.NewDecWithPrec(67, 2), + BlocksPerYear: uint64(60 * 60 * 8766 / 5), + }, + }, + expectErr: true, + }, + { + name: "set full valid params", + request: &types.MsgUpdateParams{ + Authority: s.mintKeeper.GetAuthority(), + Params: types.Params{ + MintDenom: sdk.DefaultBondDenom, + InflationRateChange: sdk.NewDecWithPrec(8, 2), + InflationMax: sdk.NewDecWithPrec(20, 2), + InflationMin: sdk.NewDecWithPrec(2, 2), + GoalBonded: sdk.NewDecWithPrec(37, 2), + BlocksPerYear: uint64(60 * 60 * 8766 / 5), + }, + }, + expectErr: false, + }, + } + + for _, tc := range testCases { + tc := tc + s.Run(tc.name, func() { + _, err := s.msgServer.UpdateParams(s.ctx, tc.request) + if tc.expectErr { + s.Require().Error(err) + } else { + s.Require().NoError(err) + } + }) + } +} diff --git a/x/mint/module.go b/x/mint/module.go new file mode 100644 index 00000000..1bf22005 --- /dev/null +++ b/x/mint/module.go @@ -0,0 +1,268 @@ +package mint + +import ( + "context" + "encoding/json" + "fmt" + + abci "github.com/cometbft/cometbft/abci/types" + gwruntime "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/spf13/cobra" + + modulev1 "cosmossdk.io/api/cosmos/mint/module/v1" + "cosmossdk.io/core/appmodule" + + "cosmossdk.io/depinject" + + "github.com/burnt-labs/xion/x/mint/client/cli" + "github.com/burnt-labs/xion/x/mint/exported" + "github.com/burnt-labs/xion/x/mint/keeper" + "github.com/burnt-labs/xion/x/mint/simulation" + "github.com/burnt-labs/xion/x/mint/types" + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/codec" + cdctypes "github.com/cosmos/cosmos-sdk/codec/types" + store "github.com/cosmos/cosmos-sdk/store/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" + simtypes "github.com/cosmos/cosmos-sdk/types/simulation" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" +) + +// ConsensusVersion defines the current x/mint module consensus version. +const ConsensusVersion = 2 + +var ( + _ module.BeginBlockAppModule = AppModule{} + _ module.AppModuleBasic = AppModuleBasic{} + _ module.AppModuleSimulation = AppModule{} +) + +// AppModuleBasic defines the basic application module used by the mint module. +type AppModuleBasic struct { + cdc codec.Codec +} + +var _ module.AppModuleBasic = AppModuleBasic{} + +// Name returns the mint module's name. +func (AppModuleBasic) Name() string { + return types.ModuleName +} + +// RegisterLegacyAminoCodec registers the mint module's types on the given LegacyAmino codec. +func (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { + types.RegisterLegacyAminoCodec(cdc) +} + +// RegisterInterfaces registers the module's interface types +func (b AppModuleBasic) RegisterInterfaces(r cdctypes.InterfaceRegistry) { + types.RegisterInterfaces(r) +} + +// DefaultGenesis returns default genesis state as raw bytes for the mint +// module. +func (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage { + return cdc.MustMarshalJSON(types.DefaultGenesisState()) +} + +// ValidateGenesis performs genesis state validation for the mint module. +func (AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, config client.TxEncodingConfig, bz json.RawMessage) error { + var data types.GenesisState + if err := cdc.UnmarshalJSON(bz, &data); err != nil { + return fmt.Errorf("failed to unmarshal %s genesis state: %w", types.ModuleName, err) + } + + return types.ValidateGenesis(data) +} + +// RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for the mint module. +func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *gwruntime.ServeMux) { + if err := types.RegisterQueryHandlerClient(context.Background(), mux, types.NewQueryClient(clientCtx)); err != nil { + panic(err) + } +} + +// GetTxCmd returns no root tx command for the mint module. +func (AppModuleBasic) GetTxCmd() *cobra.Command { return nil } + +// GetQueryCmd returns the root query command for the mint module. +func (AppModuleBasic) GetQueryCmd() *cobra.Command { + return cli.GetQueryCmd() +} + +// AppModule implements an application module for the mint module. +type AppModule struct { + AppModuleBasic + + keeper keeper.Keeper + authKeeper types.AccountKeeper + + // legacySubspace is used solely for migration of x/params managed parameters + legacySubspace exported.Subspace + + // inflationCalculator is used to calculate the inflation rate during BeginBlock. + // If inflationCalculator is nil, the default inflation calculation logic is used. + inflationCalculator types.InflationCalculationFn +} + +// NewAppModule creates a new AppModule object. If the InflationCalculationFn +// argument is nil, then the SDK's default inflation function will be used. +func NewAppModule( + cdc codec.Codec, + keeper keeper.Keeper, + ak types.AccountKeeper, + ic types.InflationCalculationFn, + ss exported.Subspace, +) AppModule { + if ic == nil { + ic = types.DefaultInflationCalculationFn + } + + return AppModule{ + AppModuleBasic: AppModuleBasic{cdc: cdc}, + keeper: keeper, + authKeeper: ak, + inflationCalculator: ic, + legacySubspace: ss, + } +} + +var _ appmodule.AppModule = AppModule{} + +// IsOnePerModuleType implements the depinject.OnePerModuleType interface. +func (am AppModule) IsOnePerModuleType() {} + +// IsAppModule implements the appmodule.AppModule interface. +func (am AppModule) IsAppModule() {} + +// Name returns the mint module's name. +func (AppModule) Name() string { + return types.ModuleName +} + +// RegisterInvariants registers the mint module invariants. +func (am AppModule) RegisterInvariants(_ sdk.InvariantRegistry) {} + +// RegisterServices registers a gRPC query service to respond to the +// module-specific gRPC queries. +func (am AppModule) RegisterServices(cfg module.Configurator) { + types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.keeper)) + types.RegisterQueryServer(cfg.QueryServer(), am.keeper) + + m := keeper.NewMigrator(am.keeper, am.legacySubspace) + + if err := cfg.RegisterMigration(types.ModuleName, 1, m.Migrate1to2); err != nil { + panic(fmt.Sprintf("failed to migrate x/%s from version 1 to 2: %v", types.ModuleName, err)) + } +} + +// InitGenesis performs genesis initialization for the mint module. It returns +// no validator updates. +func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, data json.RawMessage) []abci.ValidatorUpdate { + var genesisState types.GenesisState + cdc.MustUnmarshalJSON(data, &genesisState) + + am.keeper.InitGenesis(ctx, am.authKeeper, &genesisState) + return []abci.ValidatorUpdate{} +} + +// ExportGenesis returns the exported genesis state as raw bytes for the mint +// module. +func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage { + gs := am.keeper.ExportGenesis(ctx) + return cdc.MustMarshalJSON(gs) +} + +// ConsensusVersion implements AppModule/ConsensusVersion. +func (AppModule) ConsensusVersion() uint64 { return ConsensusVersion } + +// BeginBlock returns the begin blocker for the mint module. +func (am AppModule) BeginBlock(ctx sdk.Context, _ abci.RequestBeginBlock) { + BeginBlocker(ctx, am.keeper, am.inflationCalculator) +} + +// AppModuleSimulation functions + +// GenerateGenesisState creates a randomized GenState of the mint module. +func (AppModule) GenerateGenesisState(simState *module.SimulationState) { + simulation.RandomizedGenState(simState) +} + +// ProposalMsgs returns msgs used for governance proposals for simulations. +func (AppModule) ProposalMsgs(simState module.SimulationState) []simtypes.WeightedProposalMsg { + return simulation.ProposalMsgs() +} + +// RegisterStoreDecoder registers a decoder for mint module's types. +func (am AppModule) RegisterStoreDecoder(sdr sdk.StoreDecoderRegistry) { + sdr[types.StoreKey] = simulation.NewDecodeStore(am.cdc) +} + +// WeightedOperations doesn't return any mint module operation. +func (AppModule) WeightedOperations(_ module.SimulationState) []simtypes.WeightedOperation { + return nil +} + +// +// App Wiring Setup +// + +func init() { + appmodule.Register(&modulev1.Module{}, + appmodule.Provide(ProvideModule), + ) +} + +type MintInputs struct { + depinject.In + + ModuleKey depinject.OwnModuleKey + Config *modulev1.Module + Key *store.KVStoreKey + Cdc codec.Codec + InflationCalculationFn types.InflationCalculationFn `optional:"true"` + + // LegacySubspace is used solely for migration of x/params managed parameters + LegacySubspace exported.Subspace + + AccountKeeper types.AccountKeeper + BankKeeper types.BankKeeper + StakingKeeper types.StakingKeeper +} + +type MintOutputs struct { + depinject.Out + + MintKeeper keeper.Keeper + Module appmodule.AppModule +} + +func ProvideModule(in MintInputs) MintOutputs { + feeCollectorName := in.Config.FeeCollectorName + if feeCollectorName == "" { + feeCollectorName = authtypes.FeeCollectorName + } + + // default to governance authority if not provided + authority := authtypes.NewModuleAddress(govtypes.ModuleName) + if in.Config.Authority != "" { + authority = authtypes.NewModuleAddressOrBech32Address(in.Config.Authority) + } + + k := keeper.NewKeeper( + in.Cdc, + in.Key, + in.StakingKeeper, + in.AccountKeeper, + in.BankKeeper, + feeCollectorName, + authority.String(), + ) + + // when no inflation calculation function is provided it will use the default types.DefaultInflationCalculationFn + m := NewAppModule(in.Cdc, k, in.AccountKeeper, in.InflationCalculationFn, in.LegacySubspace) + + return MintOutputs{MintKeeper: k, Module: m} +} diff --git a/x/mint/module_test.go b/x/mint/module_test.go new file mode 100644 index 00000000..24b5c8cb --- /dev/null +++ b/x/mint/module_test.go @@ -0,0 +1,25 @@ +package mint_test + +import ( + "testing" + + tmproto "github.com/cometbft/cometbft/proto/tendermint/types" + "github.com/stretchr/testify/require" + + "github.com/burnt-labs/xion/x/mint/testutil" + "github.com/burnt-labs/xion/x/mint/types" + simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" + authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" +) + +func TestItCreatesModuleAccountOnInitBlock(t *testing.T) { + var accountKeeper authkeeper.AccountKeeper + + app, err := simtestutil.SetupAtGenesis(testutil.AppConfig, &accountKeeper) + require.NoError(t, err) + + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + acc := accountKeeper.GetAccount(ctx, authtypes.NewModuleAddress(types.ModuleName)) + require.NotNil(t, acc) +} diff --git a/x/mint/simulation/decoder.go b/x/mint/simulation/decoder.go new file mode 100644 index 00000000..ef2232b9 --- /dev/null +++ b/x/mint/simulation/decoder.go @@ -0,0 +1,26 @@ +package simulation + +import ( + "bytes" + "fmt" + + "github.com/burnt-labs/xion/x/mint/types" + "github.com/cosmos/cosmos-sdk/codec" + "github.com/cosmos/cosmos-sdk/types/kv" +) + +// NewDecodeStore returns a decoder function closure that unmarshals the KVPair's +// Value to the corresponding mint type. +func NewDecodeStore(cdc codec.Codec) func(kvA, kvB kv.Pair) string { + return func(kvA, kvB kv.Pair) string { + switch { + case bytes.Equal(kvA.Key, types.MinterKey): + var minterA, minterB types.Minter + cdc.MustUnmarshal(kvA.Value, &minterA) + cdc.MustUnmarshal(kvB.Value, &minterB) + return fmt.Sprintf("%v\n%v", minterA, minterB) + default: + panic(fmt.Sprintf("invalid mint key %X", kvA.Key)) + } + } +} diff --git a/x/mint/simulation/decoder_test.go b/x/mint/simulation/decoder_test.go new file mode 100644 index 00000000..03308bb6 --- /dev/null +++ b/x/mint/simulation/decoder_test.go @@ -0,0 +1,49 @@ +package simulation_test + +import ( + "fmt" + "testing" + + "cosmossdk.io/math" + "github.com/stretchr/testify/require" + + "github.com/burnt-labs/xion/x/mint" + "github.com/burnt-labs/xion/x/mint/simulation" + "github.com/burnt-labs/xion/x/mint/types" + "github.com/cosmos/cosmos-sdk/types/kv" + moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" +) + +func TestDecodeStore(t *testing.T) { + encCfg := moduletestutil.MakeTestEncodingConfig(mint.AppModuleBasic{}) + + dec := simulation.NewDecodeStore(encCfg.Codec) + + minter := types.NewMinter(math.LegacyOneDec(), math.LegacyNewDec(15)) + + kvPairs := kv.Pairs{ + Pairs: []kv.Pair{ + {Key: types.MinterKey, Value: encCfg.Codec.MustMarshal(&minter)}, + {Key: []byte{0x99}, Value: []byte{0x99}}, + }, + } + tests := []struct { + name string + expectedLog string + }{ + {"Minter", fmt.Sprintf("%v\n%v", minter, minter)}, + {"other", ""}, + } + + for i, tt := range tests { + i, tt := i, tt + t.Run(tt.name, func(t *testing.T) { + switch i { + case len(tests) - 1: + require.Panics(t, func() { dec(kvPairs.Pairs[i], kvPairs.Pairs[i]) }, tt.name) + default: + require.Equal(t, tt.expectedLog, dec(kvPairs.Pairs[i], kvPairs.Pairs[i]), tt.name) + } + }) + } +} diff --git a/x/mint/simulation/genesis.go b/x/mint/simulation/genesis.go new file mode 100644 index 00000000..f571c72a --- /dev/null +++ b/x/mint/simulation/genesis.go @@ -0,0 +1,96 @@ +package simulation + +// DONTCOVER + +import ( + "encoding/json" + "fmt" + "math/rand" + + "cosmossdk.io/math" + "github.com/burnt-labs/xion/x/mint/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" +) + +// Simulation parameter constants +const ( + Inflation = "inflation" + InflationRateChange = "inflation_rate_change" + InflationMax = "inflation_max" + InflationMin = "inflation_min" + GoalBonded = "goal_bonded" +) + +// GenInflation randomized Inflation +func GenInflation(r *rand.Rand) math.LegacyDec { + return sdk.NewDecWithPrec(int64(r.Intn(99)), 2) +} + +// GenInflationRateChange randomized InflationRateChange +func GenInflationRateChange(r *rand.Rand) math.LegacyDec { + return sdk.NewDecWithPrec(int64(r.Intn(99)), 2) +} + +// GenInflationMax randomized InflationMax +func GenInflationMax(r *rand.Rand) math.LegacyDec { + return sdk.NewDecWithPrec(20, 2) +} + +// GenInflationMin randomized InflationMin +func GenInflationMin(r *rand.Rand) math.LegacyDec { + return sdk.NewDecWithPrec(7, 2) +} + +// GenGoalBonded randomized GoalBonded +func GenGoalBonded(r *rand.Rand) math.LegacyDec { + return sdk.NewDecWithPrec(67, 2) +} + +// RandomizedGenState generates a random GenesisState for mint +func RandomizedGenState(simState *module.SimulationState) { + // minter + var inflation sdk.Dec + simState.AppParams.GetOrGenerate( + simState.Cdc, Inflation, &inflation, simState.Rand, + func(r *rand.Rand) { inflation = GenInflation(r) }, + ) + + // params + var inflationRateChange sdk.Dec + simState.AppParams.GetOrGenerate( + simState.Cdc, InflationRateChange, &inflationRateChange, simState.Rand, + func(r *rand.Rand) { inflationRateChange = GenInflationRateChange(r) }, + ) + + var inflationMax sdk.Dec + simState.AppParams.GetOrGenerate( + simState.Cdc, InflationMax, &inflationMax, simState.Rand, + func(r *rand.Rand) { inflationMax = GenInflationMax(r) }, + ) + + var inflationMin sdk.Dec + simState.AppParams.GetOrGenerate( + simState.Cdc, InflationMin, &inflationMin, simState.Rand, + func(r *rand.Rand) { inflationMin = GenInflationMin(r) }, + ) + + var goalBonded sdk.Dec + simState.AppParams.GetOrGenerate( + simState.Cdc, GoalBonded, &goalBonded, simState.Rand, + func(r *rand.Rand) { goalBonded = GenGoalBonded(r) }, + ) + + mintDenom := sdk.DefaultBondDenom + blocksPerYear := uint64(60 * 60 * 8766 / 5) + params := types.NewParams(mintDenom, inflationRateChange, inflationMax, inflationMin, goalBonded, blocksPerYear) + + mintGenesis := types.NewGenesisState(types.InitialMinter(inflation), params) + + bz, err := json.MarshalIndent(&mintGenesis, "", " ") + if err != nil { + panic(err) + } + fmt.Printf("Selected randomly generated minting parameters:\n%s\n", bz) + simState.GenState[types.ModuleName] = simState.Cdc.MustMarshalJSON(mintGenesis) +} diff --git a/x/mint/simulation/genesis_test.go b/x/mint/simulation/genesis_test.go new file mode 100644 index 00000000..56ae742c --- /dev/null +++ b/x/mint/simulation/genesis_test.go @@ -0,0 +1,84 @@ +package simulation_test + +import ( + "encoding/json" + "math/rand" + "testing" + + "github.com/stretchr/testify/require" + + "cosmossdk.io/math" + sdkmath "cosmossdk.io/math" + "github.com/burnt-labs/xion/x/mint" + "github.com/burnt-labs/xion/x/mint/simulation" + "github.com/burnt-labs/xion/x/mint/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" + moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" + simtypes "github.com/cosmos/cosmos-sdk/types/simulation" +) + +// TestRandomizedGenState tests the normal scenario of applying RandomizedGenState. +// Abonormal scenarios are not tested here. +func TestRandomizedGenState(t *testing.T) { + encCfg := moduletestutil.MakeTestEncodingConfig(mint.AppModuleBasic{}) + + s := rand.NewSource(1) + r := rand.New(s) + + simState := module.SimulationState{ + AppParams: make(simtypes.AppParams), + Cdc: encCfg.Codec, + Rand: r, + NumBonded: 3, + Accounts: simtypes.RandomAccounts(r, 3), + InitialStake: sdkmath.NewInt(1000), + GenState: make(map[string]json.RawMessage), + } + + simulation.RandomizedGenState(&simState) + + var mintGenesis types.GenesisState + simState.Cdc.MustUnmarshalJSON(simState.GenState[types.ModuleName], &mintGenesis) + + dec1, _ := sdk.NewDecFromStr("0.670000000000000000") + dec2, _ := sdk.NewDecFromStr("0.200000000000000000") + dec3, _ := sdk.NewDecFromStr("0.070000000000000000") + + require.Equal(t, uint64(6311520), mintGenesis.Params.BlocksPerYear) + require.Equal(t, dec1, mintGenesis.Params.GoalBonded) + require.Equal(t, dec2, mintGenesis.Params.InflationMax) + require.Equal(t, dec3, mintGenesis.Params.InflationMin) + require.Equal(t, "stake", mintGenesis.Params.MintDenom) + require.Equal(t, "0stake", mintGenesis.Minter.BlockProvision(mintGenesis.Params).String()) + require.Equal(t, "0.170000000000000000", mintGenesis.Minter.NextAnnualProvisions(mintGenesis.Params, math.OneInt()).String()) + require.Equal(t, "0.169999926644441493", mintGenesis.Minter.NextInflationRate(mintGenesis.Params, math.LegacyOneDec()).String()) + require.Equal(t, "0.170000000000000000", mintGenesis.Minter.Inflation.String()) + require.Equal(t, "0.000000000000000000", mintGenesis.Minter.AnnualProvisions.String()) +} + +// TestRandomizedGenState tests abnormal scenarios of applying RandomizedGenState. +func TestRandomizedGenState1(t *testing.T) { + encCfg := moduletestutil.MakeTestEncodingConfig(mint.AppModuleBasic{}) + + s := rand.NewSource(1) + r := rand.New(s) + // all these tests will panic + tests := []struct { + simState module.SimulationState + panicMsg string + }{ + { // panic => reason: incomplete initialization of the simState + module.SimulationState{}, "invalid memory address or nil pointer dereference"}, + { // panic => reason: incomplete initialization of the simState + module.SimulationState{ + AppParams: make(simtypes.AppParams), + Cdc: encCfg.Codec, + Rand: r, + }, "assignment to entry in nil map"}, + } + + for _, tt := range tests { + require.Panicsf(t, func() { simulation.RandomizedGenState(&tt.simState) }, tt.panicMsg) + } +} diff --git a/x/mint/simulation/proposals.go b/x/mint/simulation/proposals.go new file mode 100644 index 00000000..fa447338 --- /dev/null +++ b/x/mint/simulation/proposals.go @@ -0,0 +1,48 @@ +package simulation + +import ( + "math/rand" + + "github.com/burnt-labs/xion/x/mint/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/address" + simtypes "github.com/cosmos/cosmos-sdk/types/simulation" + "github.com/cosmos/cosmos-sdk/x/simulation" +) + +// Simulation operation weights constants +const ( + DefaultWeightMsgUpdateParams int = 100 + + OpWeightMsgUpdateParams = "op_weight_msg_update_params" //nolint:gosec +) + +// ProposalMsgs defines the module weighted proposals' contents +func ProposalMsgs() []simtypes.WeightedProposalMsg { + return []simtypes.WeightedProposalMsg{ + simulation.NewWeightedProposalMsg( + OpWeightMsgUpdateParams, + DefaultWeightMsgUpdateParams, + SimulateMsgUpdateParams, + ), + } +} + +// SimulateMsgUpdateParams returns a random MsgUpdateParams +func SimulateMsgUpdateParams(r *rand.Rand, _ sdk.Context, _ []simtypes.Account) sdk.Msg { + // use the default gov module account address as authority + var authority sdk.AccAddress = address.Module("gov") + + params := types.DefaultParams() + params.BlocksPerYear = uint64(simtypes.RandIntBetween(r, 1, 1000000)) + params.GoalBonded = sdk.NewDecWithPrec(int64(simtypes.RandIntBetween(r, 1, 100)), 2) + params.InflationMin = sdk.NewDecWithPrec(int64(simtypes.RandIntBetween(r, 1, 50)), 2) + params.InflationMax = sdk.NewDecWithPrec(int64(simtypes.RandIntBetween(r, 50, 100)), 2) + params.InflationRateChange = sdk.NewDecWithPrec(int64(simtypes.RandIntBetween(r, 1, 100)), 2) + params.MintDenom = simtypes.RandStringOfLength(r, 10) + + return &types.MsgUpdateParams{ + Authority: authority.String(), + Params: params, + } +} diff --git a/x/mint/simulation/proposals_test.go b/x/mint/simulation/proposals_test.go new file mode 100644 index 00000000..bcd878df --- /dev/null +++ b/x/mint/simulation/proposals_test.go @@ -0,0 +1,46 @@ +package simulation_test + +import ( + "math/rand" + "testing" + + tmproto "github.com/cometbft/cometbft/proto/tendermint/types" + "gotest.tools/v3/assert" + + "github.com/burnt-labs/xion/x/mint/simulation" + "github.com/burnt-labs/xion/x/mint/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/address" + simtypes "github.com/cosmos/cosmos-sdk/types/simulation" +) + +func TestProposalMsgs(t *testing.T) { + // initialize parameters + s := rand.NewSource(1) + r := rand.New(s) + + ctx := sdk.NewContext(nil, tmproto.Header{}, true, nil) + accounts := simtypes.RandomAccounts(r, 3) + + // execute ProposalMsgs function + weightedProposalMsgs := simulation.ProposalMsgs() + assert.Assert(t, len(weightedProposalMsgs) == 1) + + w0 := weightedProposalMsgs[0] + + // tests w0 interface: + assert.Equal(t, simulation.OpWeightMsgUpdateParams, w0.AppParamsKey()) + assert.Equal(t, simulation.DefaultWeightMsgUpdateParams, w0.DefaultWeight()) + + msg := w0.MsgSimulatorFn()(r, ctx, accounts) + msgUpdateParams, ok := msg.(*types.MsgUpdateParams) + assert.Assert(t, ok) + + assert.Equal(t, sdk.AccAddress(address.Module("gov")).String(), msgUpdateParams.Authority) + assert.Equal(t, uint64(122877), msgUpdateParams.Params.BlocksPerYear) + assert.DeepEqual(t, sdk.NewDecWithPrec(95, 2), msgUpdateParams.Params.GoalBonded) + assert.DeepEqual(t, sdk.NewDecWithPrec(94, 2), msgUpdateParams.Params.InflationMax) + assert.DeepEqual(t, sdk.NewDecWithPrec(23, 2), msgUpdateParams.Params.InflationMin) + assert.DeepEqual(t, sdk.NewDecWithPrec(89, 2), msgUpdateParams.Params.InflationRateChange) + assert.Equal(t, "XhhuTSkuxK", msgUpdateParams.Params.MintDenom) +} diff --git a/x/mint/testutil/app_config.go b/x/mint/testutil/app_config.go new file mode 100644 index 00000000..e3e8b1c1 --- /dev/null +++ b/x/mint/testutil/app_config.go @@ -0,0 +1,110 @@ +package testutil + +import ( + "cosmossdk.io/core/appconfig" + _ "github.com/burnt-labs/xion/x/mint" + _ "github.com/cosmos/cosmos-sdk/x/auth" + _ "github.com/cosmos/cosmos-sdk/x/auth/tx/config" + _ "github.com/cosmos/cosmos-sdk/x/bank" + _ "github.com/cosmos/cosmos-sdk/x/consensus" + _ "github.com/cosmos/cosmos-sdk/x/genutil" + _ "github.com/cosmos/cosmos-sdk/x/params" + _ "github.com/cosmos/cosmos-sdk/x/staking" + + minttypes "github.com/burnt-labs/xion/x/mint/types" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" + consensustypes "github.com/cosmos/cosmos-sdk/x/consensus/types" + genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types" + paramstypes "github.com/cosmos/cosmos-sdk/x/params/types" + stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" + + runtimev1alpha1 "cosmossdk.io/api/cosmos/app/runtime/v1alpha1" + appv1alpha1 "cosmossdk.io/api/cosmos/app/v1alpha1" + authmodulev1 "cosmossdk.io/api/cosmos/auth/module/v1" + bankmodulev1 "cosmossdk.io/api/cosmos/bank/module/v1" + consensusmodulev1 "cosmossdk.io/api/cosmos/consensus/module/v1" + genutilmodulev1 "cosmossdk.io/api/cosmos/genutil/module/v1" + mintmodulev1 "cosmossdk.io/api/cosmos/mint/module/v1" + paramsmodulev1 "cosmossdk.io/api/cosmos/params/module/v1" + stakingmodulev1 "cosmossdk.io/api/cosmos/staking/module/v1" + txconfigv1 "cosmossdk.io/api/cosmos/tx/config/v1" +) + +var AppConfig = appconfig.Compose(&appv1alpha1.Config{ + Modules: []*appv1alpha1.ModuleConfig{ + { + Name: "runtime", + Config: appconfig.WrapAny(&runtimev1alpha1.Module{ + AppName: "MintApp", + BeginBlockers: []string{ + minttypes.ModuleName, + stakingtypes.ModuleName, + authtypes.ModuleName, + banktypes.ModuleName, + genutiltypes.ModuleName, + paramstypes.ModuleName, + consensustypes.ModuleName, + }, + EndBlockers: []string{ + stakingtypes.ModuleName, + authtypes.ModuleName, + banktypes.ModuleName, + minttypes.ModuleName, + genutiltypes.ModuleName, + paramstypes.ModuleName, + consensustypes.ModuleName, + }, + InitGenesis: []string{ + authtypes.ModuleName, + banktypes.ModuleName, + stakingtypes.ModuleName, + minttypes.ModuleName, + genutiltypes.ModuleName, + paramstypes.ModuleName, + consensustypes.ModuleName, + }, + }), + }, + { + Name: authtypes.ModuleName, + Config: appconfig.WrapAny(&authmodulev1.Module{ + Bech32Prefix: "cosmos", + ModuleAccountPermissions: []*authmodulev1.ModuleAccountPermission{ + {Account: authtypes.FeeCollectorName}, + {Account: minttypes.ModuleName, Permissions: []string{authtypes.Minter}}, + {Account: stakingtypes.BondedPoolName, Permissions: []string{authtypes.Burner, stakingtypes.ModuleName}}, + {Account: stakingtypes.NotBondedPoolName, Permissions: []string{authtypes.Burner, stakingtypes.ModuleName}}, + }, + }), + }, + { + Name: banktypes.ModuleName, + Config: appconfig.WrapAny(&bankmodulev1.Module{}), + }, + { + Name: stakingtypes.ModuleName, + Config: appconfig.WrapAny(&stakingmodulev1.Module{}), + }, + { + Name: paramstypes.ModuleName, + Config: appconfig.WrapAny(¶msmodulev1.Module{}), + }, + { + Name: consensustypes.ModuleName, + Config: appconfig.WrapAny(&consensusmodulev1.Module{}), + }, + { + Name: "tx", + Config: appconfig.WrapAny(&txconfigv1.Config{}), + }, + { + Name: genutiltypes.ModuleName, + Config: appconfig.WrapAny(&genutilmodulev1.Module{}), + }, + { + Name: minttypes.ModuleName, + Config: appconfig.WrapAny(&mintmodulev1.Module{}), + }, + }, +}) diff --git a/x/mint/testutil/expected_keepers_mocks.go b/x/mint/testutil/expected_keepers_mocks.go new file mode 100644 index 00000000..c174f75d --- /dev/null +++ b/x/mint/testutil/expected_keepers_mocks.go @@ -0,0 +1,193 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: x/mint/types/expected_keepers.go + +// Package testutil is a generated GoMock package. +package testutil + +import ( + reflect "reflect" + + math "cosmossdk.io/math" + types "github.com/cosmos/cosmos-sdk/types" + types0 "github.com/cosmos/cosmos-sdk/x/auth/types" + gomock "github.com/golang/mock/gomock" +) + +// MockStakingKeeper is a mock of StakingKeeper interface. +type MockStakingKeeper struct { + ctrl *gomock.Controller + recorder *MockStakingKeeperMockRecorder +} + +// MockStakingKeeperMockRecorder is the mock recorder for MockStakingKeeper. +type MockStakingKeeperMockRecorder struct { + mock *MockStakingKeeper +} + +// NewMockStakingKeeper creates a new mock instance. +func NewMockStakingKeeper(ctrl *gomock.Controller) *MockStakingKeeper { + mock := &MockStakingKeeper{ctrl: ctrl} + mock.recorder = &MockStakingKeeperMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockStakingKeeper) EXPECT() *MockStakingKeeperMockRecorder { + return m.recorder +} + +// BondedRatio mocks base method. +func (m *MockStakingKeeper) BondedRatio(ctx types.Context) types.Dec { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "BondedRatio", ctx) + ret0, _ := ret[0].(types.Dec) + return ret0 +} + +// BondedRatio indicates an expected call of BondedRatio. +func (mr *MockStakingKeeperMockRecorder) BondedRatio(ctx interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BondedRatio", reflect.TypeOf((*MockStakingKeeper)(nil).BondedRatio), ctx) +} + +// StakingTokenSupply mocks base method. +func (m *MockStakingKeeper) StakingTokenSupply(ctx types.Context) math.Int { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "StakingTokenSupply", ctx) + ret0, _ := ret[0].(math.Int) + return ret0 +} + +// StakingTokenSupply indicates an expected call of StakingTokenSupply. +func (mr *MockStakingKeeperMockRecorder) StakingTokenSupply(ctx interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StakingTokenSupply", reflect.TypeOf((*MockStakingKeeper)(nil).StakingTokenSupply), ctx) +} + +// MockAccountKeeper is a mock of AccountKeeper interface. +type MockAccountKeeper struct { + ctrl *gomock.Controller + recorder *MockAccountKeeperMockRecorder +} + +// MockAccountKeeperMockRecorder is the mock recorder for MockAccountKeeper. +type MockAccountKeeperMockRecorder struct { + mock *MockAccountKeeper +} + +// NewMockAccountKeeper creates a new mock instance. +func NewMockAccountKeeper(ctrl *gomock.Controller) *MockAccountKeeper { + mock := &MockAccountKeeper{ctrl: ctrl} + mock.recorder = &MockAccountKeeperMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockAccountKeeper) EXPECT() *MockAccountKeeperMockRecorder { + return m.recorder +} + +// GetModuleAccount mocks base method. +func (m *MockAccountKeeper) GetModuleAccount(ctx types.Context, moduleName string) types0.ModuleAccountI { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetModuleAccount", ctx, moduleName) + ret0, _ := ret[0].(types0.ModuleAccountI) + return ret0 +} + +// GetModuleAccount indicates an expected call of GetModuleAccount. +func (mr *MockAccountKeeperMockRecorder) GetModuleAccount(ctx, moduleName interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetModuleAccount", reflect.TypeOf((*MockAccountKeeper)(nil).GetModuleAccount), ctx, moduleName) +} + +// GetModuleAddress mocks base method. +func (m *MockAccountKeeper) GetModuleAddress(name string) types.AccAddress { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetModuleAddress", name) + ret0, _ := ret[0].(types.AccAddress) + return ret0 +} + +// GetModuleAddress indicates an expected call of GetModuleAddress. +func (mr *MockAccountKeeperMockRecorder) GetModuleAddress(name interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetModuleAddress", reflect.TypeOf((*MockAccountKeeper)(nil).GetModuleAddress), name) +} + +// SetModuleAccount mocks base method. +func (m *MockAccountKeeper) SetModuleAccount(arg0 types.Context, arg1 types0.ModuleAccountI) { + m.ctrl.T.Helper() + m.ctrl.Call(m, "SetModuleAccount", arg0, arg1) +} + +// SetModuleAccount indicates an expected call of SetModuleAccount. +func (mr *MockAccountKeeperMockRecorder) SetModuleAccount(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetModuleAccount", reflect.TypeOf((*MockAccountKeeper)(nil).SetModuleAccount), arg0, arg1) +} + +// MockBankKeeper is a mock of BankKeeper interface. +type MockBankKeeper struct { + ctrl *gomock.Controller + recorder *MockBankKeeperMockRecorder +} + +// MockBankKeeperMockRecorder is the mock recorder for MockBankKeeper. +type MockBankKeeperMockRecorder struct { + mock *MockBankKeeper +} + +// NewMockBankKeeper creates a new mock instance. +func NewMockBankKeeper(ctrl *gomock.Controller) *MockBankKeeper { + mock := &MockBankKeeper{ctrl: ctrl} + mock.recorder = &MockBankKeeperMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockBankKeeper) EXPECT() *MockBankKeeperMockRecorder { + return m.recorder +} + +// MintCoins mocks base method. +func (m *MockBankKeeper) MintCoins(ctx types.Context, name string, amt types.Coins) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "MintCoins", ctx, name, amt) + ret0, _ := ret[0].(error) + return ret0 +} + +// MintCoins indicates an expected call of MintCoins. +func (mr *MockBankKeeperMockRecorder) MintCoins(ctx, name, amt interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "MintCoins", reflect.TypeOf((*MockBankKeeper)(nil).MintCoins), ctx, name, amt) +} + +// SendCoinsFromModuleToAccount mocks base method. +func (m *MockBankKeeper) SendCoinsFromModuleToAccount(ctx types.Context, senderModule string, recipientAddr types.AccAddress, amt types.Coins) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SendCoinsFromModuleToAccount", ctx, senderModule, recipientAddr, amt) + ret0, _ := ret[0].(error) + return ret0 +} + +// SendCoinsFromModuleToAccount indicates an expected call of SendCoinsFromModuleToAccount. +func (mr *MockBankKeeperMockRecorder) SendCoinsFromModuleToAccount(ctx, senderModule, recipientAddr, amt interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SendCoinsFromModuleToAccount", reflect.TypeOf((*MockBankKeeper)(nil).SendCoinsFromModuleToAccount), ctx, senderModule, recipientAddr, amt) +} + +// SendCoinsFromModuleToModule mocks base method. +func (m *MockBankKeeper) SendCoinsFromModuleToModule(ctx types.Context, senderModule, recipientModule string, amt types.Coins) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SendCoinsFromModuleToModule", ctx, senderModule, recipientModule, amt) + ret0, _ := ret[0].(error) + return ret0 +} + +// SendCoinsFromModuleToModule indicates an expected call of SendCoinsFromModuleToModule. +func (mr *MockBankKeeperMockRecorder) SendCoinsFromModuleToModule(ctx, senderModule, recipientModule, amt interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SendCoinsFromModuleToModule", reflect.TypeOf((*MockBankKeeper)(nil).SendCoinsFromModuleToModule), ctx, senderModule, recipientModule, amt) +} diff --git a/x/mint/types/codec.go b/x/mint/types/codec.go new file mode 100644 index 00000000..00026595 --- /dev/null +++ b/x/mint/types/codec.go @@ -0,0 +1,47 @@ +package types + +import ( + "github.com/cosmos/cosmos-sdk/codec" + "github.com/cosmos/cosmos-sdk/codec/legacy" + "github.com/cosmos/cosmos-sdk/codec/types" + cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/msgservice" + authzcodec "github.com/cosmos/cosmos-sdk/x/authz/codec" + govcodec "github.com/cosmos/cosmos-sdk/x/gov/codec" + groupcodec "github.com/cosmos/cosmos-sdk/x/group/codec" +) + +var ( + amino = codec.NewLegacyAmino() + ModuleCdc = codec.NewAminoCodec(amino) +) + +func init() { + RegisterLegacyAminoCodec(amino) + cryptocodec.RegisterCrypto(amino) + sdk.RegisterLegacyAminoCodec(amino) + + // Register all Amino interfaces and concrete types on the authz and gov Amino codec + // so that this can later be used to properly serialize MsgGrant and MsgExec + // instances. + RegisterLegacyAminoCodec(authzcodec.Amino) + RegisterLegacyAminoCodec(govcodec.Amino) + RegisterLegacyAminoCodec(groupcodec.Amino) +} + +// RegisterLegacyAminoCodec registers concrete types on the LegacyAmino codec +func RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { + cdc.RegisterConcrete(Params{}, "cosmos-sdk/x/mint/Params", nil) + legacy.RegisterAminoMsg(cdc, &MsgUpdateParams{}, "cosmos-sdk/x/mint/MsgUpdateParams") +} + +// RegisterInterfaces registers the interfaces types with the interface registry. +func RegisterInterfaces(registry types.InterfaceRegistry) { + registry.RegisterImplementations( + (*sdk.Msg)(nil), + &MsgUpdateParams{}, + ) + + msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc) +} diff --git a/x/mint/types/event.pb.go b/x/mint/types/event.pb.go new file mode 100644 index 00000000..b985392b --- /dev/null +++ b/x/mint/types/event.pb.go @@ -0,0 +1,561 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: cosmos/mint/v1beta1/event.proto + +package types + +import ( + fmt "fmt" + github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// MintIncentiveTokens defines an event emitted on each block from the mint +// module EndBlocker +type MintIncentiveTokens struct { + BondedRatio github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,1,opt,name=bonded_ratio,json=bondedRatio,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"bonded_ratio" yaml:"bonded_ratio"` + Inflation github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,2,opt,name=inflation,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"inflation" yaml:"inflation"` + AnnualProvisions github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,3,opt,name=annual_provisions,json=annualProvisions,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"annual_provisions" yaml:"annual_provisions"` + NeededAmount uint64 `protobuf:"varint,4,opt,name=needed_amount,json=neededAmount,proto3" json:"needed_amount,omitempty"` + CollectedAmount uint64 `protobuf:"varint,5,opt,name=collected_amount,json=collectedAmount,proto3" json:"collected_amount,omitempty"` + MintedAmount uint64 `protobuf:"varint,6,opt,name=minted_amount,json=mintedAmount,proto3" json:"minted_amount,omitempty"` + BurnedAmount uint64 `protobuf:"varint,7,opt,name=burned_amount,json=burnedAmount,proto3" json:"burned_amount,omitempty"` +} + +func (m *MintIncentiveTokens) Reset() { *m = MintIncentiveTokens{} } +func (m *MintIncentiveTokens) String() string { return proto.CompactTextString(m) } +func (*MintIncentiveTokens) ProtoMessage() {} +func (*MintIncentiveTokens) Descriptor() ([]byte, []int) { + return fileDescriptor_0c2a1b6cb72c04df, []int{0} +} +func (m *MintIncentiveTokens) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MintIncentiveTokens) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MintIncentiveTokens.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MintIncentiveTokens) XXX_Merge(src proto.Message) { + xxx_messageInfo_MintIncentiveTokens.Merge(m, src) +} +func (m *MintIncentiveTokens) XXX_Size() int { + return m.Size() +} +func (m *MintIncentiveTokens) XXX_DiscardUnknown() { + xxx_messageInfo_MintIncentiveTokens.DiscardUnknown(m) +} + +var xxx_messageInfo_MintIncentiveTokens proto.InternalMessageInfo + +func (m *MintIncentiveTokens) GetNeededAmount() uint64 { + if m != nil { + return m.NeededAmount + } + return 0 +} + +func (m *MintIncentiveTokens) GetCollectedAmount() uint64 { + if m != nil { + return m.CollectedAmount + } + return 0 +} + +func (m *MintIncentiveTokens) GetMintedAmount() uint64 { + if m != nil { + return m.MintedAmount + } + return 0 +} + +func (m *MintIncentiveTokens) GetBurnedAmount() uint64 { + if m != nil { + return m.BurnedAmount + } + return 0 +} + +func init() { + proto.RegisterType((*MintIncentiveTokens)(nil), "cosmos.mint.v1beta1.MintIncentiveTokens") +} + +func init() { proto.RegisterFile("cosmos/mint/v1beta1/event.proto", fileDescriptor_0c2a1b6cb72c04df) } + +var fileDescriptor_0c2a1b6cb72c04df = []byte{ + // 368 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x92, 0xc1, 0x4a, 0xeb, 0x40, + 0x14, 0x86, 0x93, 0xdb, 0xde, 0x5e, 0x3a, 0xb7, 0xc5, 0x9a, 0xba, 0x08, 0x2e, 0x92, 0x92, 0x82, + 0xb4, 0x0b, 0x13, 0x8a, 0x3b, 0x77, 0x56, 0x5d, 0x28, 0x08, 0x12, 0x5c, 0xb9, 0xa9, 0x49, 0x3a, + 0xb6, 0x43, 0x93, 0x33, 0x25, 0x99, 0x44, 0xfb, 0x16, 0x3e, 0x56, 0x97, 0x5d, 0x8a, 0x8b, 0x22, + 0xed, 0x1b, 0x88, 0x0f, 0x20, 0x99, 0x53, 0x1a, 0x41, 0x10, 0xba, 0xca, 0x39, 0x7f, 0x3e, 0xfe, + 0x7f, 0xe6, 0xcc, 0x21, 0x66, 0xc0, 0x93, 0x88, 0x27, 0x4e, 0xc4, 0x40, 0x38, 0x59, 0xcf, 0xa7, + 0xc2, 0xeb, 0x39, 0x34, 0xa3, 0x20, 0xec, 0x69, 0xcc, 0x05, 0xd7, 0x9a, 0x08, 0xd8, 0x39, 0x60, + 0x6f, 0x80, 0xc3, 0x83, 0x11, 0x1f, 0x71, 0xf9, 0xdf, 0xc9, 0x2b, 0x44, 0xad, 0xcf, 0x12, 0x69, + 0xde, 0x30, 0x10, 0x57, 0x10, 0x50, 0x10, 0x2c, 0xa3, 0x77, 0x7c, 0x42, 0x21, 0xd1, 0xc6, 0xa4, + 0xe6, 0x73, 0x18, 0xd2, 0xe1, 0x20, 0xf6, 0x04, 0xe3, 0xba, 0xda, 0x52, 0x3b, 0xd5, 0xfe, 0xe5, + 0x7c, 0x69, 0x2a, 0x6f, 0x4b, 0xf3, 0x68, 0xc4, 0xc4, 0x38, 0xf5, 0xed, 0x80, 0x47, 0xce, 0xe6, + 0x30, 0xf8, 0x39, 0x4e, 0x86, 0x13, 0x47, 0xcc, 0xa6, 0x34, 0xb1, 0x2f, 0x68, 0xf0, 0xb1, 0x34, + 0x9b, 0x33, 0x2f, 0x0a, 0x4f, 0xad, 0xef, 0x5e, 0x96, 0xfb, 0x1f, 0x5b, 0x37, 0xef, 0xb4, 0x07, + 0x52, 0x65, 0xf0, 0x18, 0xe6, 0x35, 0xe8, 0x7f, 0x64, 0x4c, 0x7f, 0xe7, 0x98, 0x06, 0xc6, 0x6c, + 0x8d, 0x2c, 0xb7, 0x30, 0xd5, 0x9e, 0xc8, 0xbe, 0x07, 0x90, 0x7a, 0xe1, 0x60, 0x1a, 0xf3, 0x8c, + 0x25, 0x8c, 0x43, 0xa2, 0x97, 0x64, 0xd2, 0xf5, 0xce, 0x49, 0x3a, 0x26, 0xfd, 0x30, 0xb4, 0xdc, + 0x06, 0x6a, 0xb7, 0x5b, 0x49, 0x6b, 0x93, 0x3a, 0x50, 0x9a, 0x5f, 0xdc, 0x8b, 0x78, 0x0a, 0x42, + 0x2f, 0xb7, 0xd4, 0x4e, 0xd9, 0xad, 0xa1, 0x78, 0x26, 0x35, 0xad, 0x4b, 0x1a, 0x01, 0x0f, 0x43, + 0x1a, 0x88, 0x82, 0xfb, 0x2b, 0xb9, 0xbd, 0xad, 0xbe, 0x41, 0xdb, 0xa4, 0x9e, 0x3f, 0x69, 0xc1, + 0x55, 0xd0, 0x0f, 0xc5, 0x02, 0xf2, 0xd3, 0x18, 0x0a, 0xe8, 0x1f, 0x42, 0x28, 0x22, 0xd4, 0x3f, + 0x9f, 0xaf, 0x0c, 0x75, 0xb1, 0x32, 0xd4, 0xf7, 0x95, 0xa1, 0xbe, 0xac, 0x0d, 0x65, 0xb1, 0x36, + 0x94, 0xd7, 0xb5, 0xa1, 0xdc, 0x77, 0x7f, 0x9d, 0xc4, 0x33, 0x2e, 0x9d, 0x1c, 0x88, 0x5f, 0x91, + 0x2b, 0x74, 0xf2, 0x15, 0x00, 0x00, 0xff, 0xff, 0x97, 0x38, 0x19, 0x3a, 0x90, 0x02, 0x00, 0x00, +} + +func (m *MintIncentiveTokens) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MintIncentiveTokens) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MintIncentiveTokens) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.BurnedAmount != 0 { + i = encodeVarintEvent(dAtA, i, uint64(m.BurnedAmount)) + i-- + dAtA[i] = 0x38 + } + if m.MintedAmount != 0 { + i = encodeVarintEvent(dAtA, i, uint64(m.MintedAmount)) + i-- + dAtA[i] = 0x30 + } + if m.CollectedAmount != 0 { + i = encodeVarintEvent(dAtA, i, uint64(m.CollectedAmount)) + i-- + dAtA[i] = 0x28 + } + if m.NeededAmount != 0 { + i = encodeVarintEvent(dAtA, i, uint64(m.NeededAmount)) + i-- + dAtA[i] = 0x20 + } + { + size := m.AnnualProvisions.Size() + i -= size + if _, err := m.AnnualProvisions.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintEvent(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + { + size := m.Inflation.Size() + i -= size + if _, err := m.Inflation.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintEvent(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size := m.BondedRatio.Size() + i -= size + if _, err := m.BondedRatio.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintEvent(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func encodeVarintEvent(dAtA []byte, offset int, v uint64) int { + offset -= sovEvent(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *MintIncentiveTokens) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.BondedRatio.Size() + n += 1 + l + sovEvent(uint64(l)) + l = m.Inflation.Size() + n += 1 + l + sovEvent(uint64(l)) + l = m.AnnualProvisions.Size() + n += 1 + l + sovEvent(uint64(l)) + if m.NeededAmount != 0 { + n += 1 + sovEvent(uint64(m.NeededAmount)) + } + if m.CollectedAmount != 0 { + n += 1 + sovEvent(uint64(m.CollectedAmount)) + } + if m.MintedAmount != 0 { + n += 1 + sovEvent(uint64(m.MintedAmount)) + } + if m.BurnedAmount != 0 { + n += 1 + sovEvent(uint64(m.BurnedAmount)) + } + return n +} + +func sovEvent(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozEvent(x uint64) (n int) { + return sovEvent(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *MintIncentiveTokens) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvent + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MintIncentiveTokens: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MintIncentiveTokens: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field BondedRatio", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvent + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthEvent + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvent + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.BondedRatio.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Inflation", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvent + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthEvent + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvent + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Inflation.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AnnualProvisions", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvent + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthEvent + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvent + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.AnnualProvisions.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field NeededAmount", wireType) + } + m.NeededAmount = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvent + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.NeededAmount |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field CollectedAmount", wireType) + } + m.CollectedAmount = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvent + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.CollectedAmount |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MintedAmount", wireType) + } + m.MintedAmount = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvent + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.MintedAmount |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 7: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field BurnedAmount", wireType) + } + m.BurnedAmount = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvent + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.BurnedAmount |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipEvent(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthEvent + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipEvent(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowEvent + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowEvent + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowEvent + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthEvent + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupEvent + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthEvent + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthEvent = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowEvent = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupEvent = fmt.Errorf("proto: unexpected end of group") +) \ No newline at end of file diff --git a/x/mint/types/expected_keepers.go b/x/mint/types/expected_keepers.go new file mode 100644 index 00000000..57d10177 --- /dev/null +++ b/x/mint/types/expected_keepers.go @@ -0,0 +1,33 @@ +package types // noalias + +import ( + "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/x/auth/types" +) + +// StakingKeeper defines the expected staking keeper +type StakingKeeper interface { + StakingTokenSupply(ctx sdk.Context) math.Int + TotalBondedTokens(ctx sdk.Context) math.Int + BondedRatio(ctx sdk.Context) sdk.Dec +} + +// AccountKeeper defines the contract required for account APIs. +type AccountKeeper interface { + GetModuleAddress(name string) sdk.AccAddress + + // TODO remove with genesis 2-phases refactor https://github.com/cosmos/cosmos-sdk/issues/2862 + SetModuleAccount(sdk.Context, types.ModuleAccountI) + GetModuleAccount(ctx sdk.Context, moduleName string) types.ModuleAccountI +} + +// BankKeeper defines the contract needed to be fulfilled for banking and supply +// dependencies. +type BankKeeper interface { + SendCoinsFromModuleToAccount(ctx sdk.Context, senderModule string, recipientAddr sdk.AccAddress, amt sdk.Coins) error + SendCoinsFromModuleToModule(ctx sdk.Context, senderModule, recipientModule string, amt sdk.Coins) error + MintCoins(ctx sdk.Context, name string, amt sdk.Coins) error + GetBalance(ctx sdk.Context, addr sdk.AccAddress, denom string) sdk.Coin + BurnCoins(ctx sdk.Context, moduleName string, amt sdk.Coins) error +} diff --git a/x/mint/types/genesis.go b/x/mint/types/genesis.go new file mode 100644 index 00000000..d32c5734 --- /dev/null +++ b/x/mint/types/genesis.go @@ -0,0 +1,44 @@ +package types + +import ( + "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" +) + +// InflationCalculationFn defines the function required to calculate inflation rate during +// BeginBlock. It receives the minter and params stored in the keeper, along with the current +// bondedRatio and returns the newly calculated inflation rate. +// It can be used to specify a custom inflation calculation logic, instead of relying on the +// default logic provided by the sdk. +type InflationCalculationFn func(ctx sdk.Context, minter Minter, params Params, bondedRatio sdk.Dec) sdk.Dec + +// DefaultInflationCalculationFn is the default function used to calculate inflation. +func DefaultInflationCalculationFn(_ sdk.Context, minter Minter, params Params, bondedRatio sdk.Dec) math.LegacyDec { + return minter.NextInflationRate(params, bondedRatio) +} + +// NewGenesisState creates a new GenesisState object +func NewGenesisState(minter Minter, params Params) *GenesisState { + return &GenesisState{ + Minter: minter, + Params: params, + } +} + +// DefaultGenesisState creates a default GenesisState object +func DefaultGenesisState() *GenesisState { + return &GenesisState{ + Minter: DefaultInitialMinter(), + Params: DefaultParams(), + } +} + +// ValidateGenesis validates the provided genesis state to ensure the +// expected invariants holds. +func ValidateGenesis(data GenesisState) error { + if err := data.Params.Validate(); err != nil { + return err + } + + return ValidateMinter(data.Minter) +} diff --git a/x/mint/types/genesis.pb.go b/x/mint/types/genesis.pb.go new file mode 100644 index 00000000..7a46bbf2 --- /dev/null +++ b/x/mint/types/genesis.pb.go @@ -0,0 +1,379 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: cosmos/mint/v1beta1/genesis.proto + +package types + +import ( + fmt "fmt" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// GenesisState defines the mint module's genesis state. +type GenesisState struct { + // minter is a space for holding current inflation information. + Minter Minter `protobuf:"bytes,1,opt,name=minter,proto3" json:"minter"` + // params defines all the parameters of the module. + Params Params `protobuf:"bytes,2,opt,name=params,proto3" json:"params"` +} + +func (m *GenesisState) Reset() { *m = GenesisState{} } +func (m *GenesisState) String() string { return proto.CompactTextString(m) } +func (*GenesisState) ProtoMessage() {} +func (*GenesisState) Descriptor() ([]byte, []int) { + return fileDescriptor_0e215eb1d09cd648, []int{0} +} +func (m *GenesisState) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GenesisState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_GenesisState.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *GenesisState) XXX_Merge(src proto.Message) { + xxx_messageInfo_GenesisState.Merge(m, src) +} +func (m *GenesisState) XXX_Size() int { + return m.Size() +} +func (m *GenesisState) XXX_DiscardUnknown() { + xxx_messageInfo_GenesisState.DiscardUnknown(m) +} + +var xxx_messageInfo_GenesisState proto.InternalMessageInfo + +func (m *GenesisState) GetMinter() Minter { + if m != nil { + return m.Minter + } + return Minter{} +} + +func (m *GenesisState) GetParams() Params { + if m != nil { + return m.Params + } + return Params{} +} + +func init() { + proto.RegisterType((*GenesisState)(nil), "cosmos.mint.v1beta1.GenesisState") +} + +func init() { proto.RegisterFile("cosmos/mint/v1beta1/genesis.proto", fileDescriptor_0e215eb1d09cd648) } + +var fileDescriptor_0e215eb1d09cd648 = []byte{ + // 234 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x4c, 0xce, 0x2f, 0xce, + 0xcd, 0x2f, 0xd6, 0xcf, 0xcd, 0xcc, 0x2b, 0xd1, 0x2f, 0x33, 0x4c, 0x4a, 0x2d, 0x49, 0x34, 0xd4, + 0x4f, 0x4f, 0xcd, 0x4b, 0x2d, 0xce, 0x2c, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x86, + 0x28, 0xd1, 0x03, 0x29, 0xd1, 0x83, 0x2a, 0x91, 0x12, 0x49, 0xcf, 0x4f, 0xcf, 0x07, 0xcb, 0xeb, + 0x83, 0x58, 0x10, 0xa5, 0x52, 0x72, 0xd8, 0x4c, 0x03, 0xeb, 0x83, 0xc8, 0x0b, 0x26, 0xe6, 0x66, + 0xe6, 0xe5, 0xeb, 0x83, 0x49, 0x88, 0x90, 0x52, 0x1f, 0x23, 0x17, 0x8f, 0x3b, 0xc4, 0xbe, 0xe0, + 0x92, 0xc4, 0x92, 0x54, 0x21, 0x3b, 0x2e, 0x36, 0x90, 0x8e, 0xd4, 0x22, 0x09, 0x46, 0x05, 0x46, + 0x0d, 0x6e, 0x23, 0x69, 0x3d, 0x2c, 0xf6, 0xeb, 0xf9, 0x82, 0x95, 0x38, 0x71, 0x9e, 0xb8, 0x27, + 0xcf, 0xb0, 0xe2, 0xf9, 0x06, 0x2d, 0xc6, 0x20, 0xa8, 0x2e, 0x90, 0xfe, 0x82, 0xc4, 0xa2, 0xc4, + 0xdc, 0x62, 0x09, 0x26, 0x3c, 0xfa, 0x03, 0xc0, 0x4a, 0x50, 0xf4, 0x43, 0x74, 0x39, 0x39, 0x9f, + 0x78, 0x24, 0xc7, 0x78, 0xe1, 0x91, 0x1c, 0xe3, 0x83, 0x47, 0x72, 0x8c, 0x13, 0x1e, 0xcb, 0x31, + 0x5c, 0x78, 0x2c, 0xc7, 0x70, 0xe3, 0xb1, 0x1c, 0x43, 0x94, 0x66, 0x7a, 0x66, 0x49, 0x46, 0x69, + 0x92, 0x5e, 0x72, 0x7e, 0xae, 0x3e, 0xd4, 0xa3, 0x10, 0x4a, 0xb7, 0x38, 0x25, 0x5b, 0xbf, 0x02, + 0xe2, 0xeb, 0x92, 0xca, 0x82, 0xd4, 0xe2, 0x24, 0x36, 0xb0, 0xe7, 0x8c, 0x01, 0x01, 0x00, 0x00, + 0xff, 0xff, 0xf3, 0xd5, 0x6f, 0x47, 0x5f, 0x01, 0x00, 0x00, +} + +func (m *GenesisState) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GenesisState) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.Minter.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func encodeVarintGenesis(dAtA []byte, offset int, v uint64) int { + offset -= sovGenesis(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *GenesisState) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Minter.Size() + n += 1 + l + sovGenesis(uint64(l)) + l = m.Params.Size() + n += 1 + l + sovGenesis(uint64(l)) + return n +} + +func sovGenesis(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozGenesis(x uint64) (n int) { + return sovGenesis(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *GenesisState) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GenesisState: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GenesisState: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Minter", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Minter.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenesis(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenesis + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenesis(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthGenesis + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupGenesis + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthGenesis + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthGenesis = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenesis = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupGenesis = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/mint/types/keys.go b/x/mint/types/keys.go new file mode 100644 index 00000000..69deb872 --- /dev/null +++ b/x/mint/types/keys.go @@ -0,0 +1,20 @@ +package types + +var ( + // MinterKey is the key to use for the keeper store. + MinterKey = []byte{0x00} + ParamsKey = []byte{0x01} +) + +const ( + // module name + ModuleName = "mint" + + // StoreKey is the default store key for mint + StoreKey = ModuleName + + // Query endpoints supported by the minting querier + QueryParameters = "parameters" + QueryInflation = "inflation" + QueryAnnualProvisions = "annual_provisions" +) diff --git a/x/mint/types/mint.pb.go b/x/mint/types/mint.pb.go new file mode 100644 index 00000000..26633296 --- /dev/null +++ b/x/mint/types/mint.pb.go @@ -0,0 +1,780 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: cosmos/mint/v1beta1/mint.proto + +package types + +import ( + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// Minter represents the minting state. +type Minter struct { + // current annual inflation rate + Inflation github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,1,opt,name=inflation,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"inflation"` + // current annual expected provisions + AnnualProvisions github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,2,opt,name=annual_provisions,json=annualProvisions,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"annual_provisions"` +} + +func (m *Minter) Reset() { *m = Minter{} } +func (m *Minter) String() string { return proto.CompactTextString(m) } +func (*Minter) ProtoMessage() {} +func (*Minter) Descriptor() ([]byte, []int) { + return fileDescriptor_2df116d183c1e223, []int{0} +} +func (m *Minter) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Minter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Minter.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Minter) XXX_Merge(src proto.Message) { + xxx_messageInfo_Minter.Merge(m, src) +} +func (m *Minter) XXX_Size() int { + return m.Size() +} +func (m *Minter) XXX_DiscardUnknown() { + xxx_messageInfo_Minter.DiscardUnknown(m) +} + +var xxx_messageInfo_Minter proto.InternalMessageInfo + +// Params defines the parameters for the x/mint module. +type Params struct { + // type of coin to mint + MintDenom string `protobuf:"bytes,1,opt,name=mint_denom,json=mintDenom,proto3" json:"mint_denom,omitempty"` + // maximum annual change in inflation rate + InflationRateChange github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,2,opt,name=inflation_rate_change,json=inflationRateChange,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"inflation_rate_change"` + // maximum inflation rate + InflationMax github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,3,opt,name=inflation_max,json=inflationMax,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"inflation_max"` + // minimum inflation rate + InflationMin github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,4,opt,name=inflation_min,json=inflationMin,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"inflation_min"` + // goal of percent bonded atoms + GoalBonded github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,5,opt,name=goal_bonded,json=goalBonded,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"goal_bonded"` + // expected blocks per year + BlocksPerYear uint64 `protobuf:"varint,6,opt,name=blocks_per_year,json=blocksPerYear,proto3" json:"blocks_per_year,omitempty"` +} + +func (m *Params) Reset() { *m = Params{} } +func (*Params) ProtoMessage() {} +func (*Params) Descriptor() ([]byte, []int) { + return fileDescriptor_2df116d183c1e223, []int{1} +} +func (m *Params) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Params) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Params.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Params) XXX_Merge(src proto.Message) { + xxx_messageInfo_Params.Merge(m, src) +} +func (m *Params) XXX_Size() int { + return m.Size() +} +func (m *Params) XXX_DiscardUnknown() { + xxx_messageInfo_Params.DiscardUnknown(m) +} + +var xxx_messageInfo_Params proto.InternalMessageInfo + +func (m *Params) GetMintDenom() string { + if m != nil { + return m.MintDenom + } + return "" +} + +func (m *Params) GetBlocksPerYear() uint64 { + if m != nil { + return m.BlocksPerYear + } + return 0 +} + +func init() { + proto.RegisterType((*Minter)(nil), "cosmos.mint.v1beta1.Minter") + proto.RegisterType((*Params)(nil), "cosmos.mint.v1beta1.Params") +} + +func init() { proto.RegisterFile("cosmos/mint/v1beta1/mint.proto", fileDescriptor_2df116d183c1e223) } + +var fileDescriptor_2df116d183c1e223 = []byte{ + // 418 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x93, 0x4f, 0x8b, 0xd3, 0x40, + 0x18, 0xc6, 0x13, 0xad, 0x81, 0x8e, 0x2e, 0xba, 0xb3, 0x0a, 0x71, 0xc1, 0x74, 0xdd, 0xc3, 0xb2, + 0x0a, 0x9b, 0x50, 0xbc, 0x89, 0xa7, 0xb6, 0xd7, 0x42, 0xc9, 0xcd, 0x82, 0x84, 0x37, 0xc9, 0x98, + 0x0e, 0x4d, 0x66, 0xc2, 0xcc, 0xb4, 0xb4, 0x1f, 0x41, 0x4f, 0x1e, 0x3d, 0xfa, 0x11, 0x3c, 0xf8, + 0x21, 0x7a, 0xb3, 0x78, 0x12, 0x0f, 0x45, 0xda, 0x83, 0x5f, 0x43, 0x32, 0x13, 0x52, 0xf1, 0xb0, + 0xa7, 0x5c, 0xf2, 0xe7, 0x79, 0xde, 0xfc, 0x9e, 0x27, 0x21, 0x2f, 0xf2, 0x12, 0x2e, 0x0b, 0x2e, + 0x83, 0x82, 0x32, 0x15, 0x2c, 0xfb, 0x31, 0x51, 0xd0, 0xd7, 0x37, 0x7e, 0x29, 0xb8, 0xe2, 0xf8, + 0xcc, 0xf8, 0xbe, 0x96, 0x6a, 0xff, 0xfc, 0x71, 0xc6, 0x33, 0xae, 0xfd, 0xa0, 0xba, 0x32, 0xa3, + 0xe7, 0x4f, 0xcd, 0x68, 0x64, 0x8c, 0xfa, 0x39, 0x63, 0x9d, 0x42, 0x41, 0x19, 0x0f, 0xf4, 0xd1, + 0x48, 0x97, 0xdf, 0x6d, 0xe4, 0x8c, 0x29, 0x53, 0x44, 0xe0, 0x29, 0xea, 0x52, 0xf6, 0x3e, 0x07, + 0x45, 0x39, 0x73, 0xed, 0x0b, 0xfb, 0xba, 0x3b, 0x78, 0xb3, 0xd9, 0xf5, 0xac, 0x5f, 0xbb, 0xde, + 0x55, 0x46, 0xd5, 0x6c, 0x11, 0xfb, 0x09, 0x2f, 0x6a, 0x62, 0x7d, 0xba, 0x91, 0xe9, 0x3c, 0x50, + 0xeb, 0x92, 0x48, 0x7f, 0x44, 0x92, 0x1f, 0xdf, 0x6e, 0x50, 0x1d, 0x38, 0x22, 0x49, 0x78, 0xc4, + 0x61, 0x8a, 0x4e, 0x81, 0xb1, 0x05, 0xe4, 0x55, 0xad, 0x25, 0x95, 0x94, 0x33, 0xe9, 0xde, 0x69, + 0x21, 0xe3, 0x91, 0xc1, 0x4e, 0x1a, 0xea, 0xe5, 0x87, 0x0e, 0x72, 0x26, 0x20, 0xa0, 0x90, 0xf8, + 0x19, 0x42, 0xd5, 0x07, 0x8b, 0x52, 0xc2, 0x78, 0x61, 0x5e, 0x29, 0xec, 0x56, 0xca, 0xa8, 0x12, + 0x70, 0x89, 0x9e, 0x34, 0x0d, 0x23, 0x01, 0x8a, 0x44, 0xc9, 0x0c, 0x58, 0x46, 0x5a, 0x29, 0x76, + 0xd6, 0xa0, 0x43, 0x50, 0x64, 0xa8, 0xc1, 0x18, 0xd0, 0xc9, 0x31, 0xb1, 0x80, 0x95, 0x7b, 0xb7, + 0x85, 0xa4, 0x07, 0x0d, 0x72, 0x0c, 0xab, 0xff, 0x22, 0x28, 0x73, 0x3b, 0xed, 0x46, 0x50, 0x86, + 0xdf, 0xa1, 0xfb, 0x19, 0x87, 0x3c, 0x8a, 0x39, 0x4b, 0x49, 0xea, 0xde, 0x6b, 0x21, 0x00, 0x55, + 0xc0, 0x81, 0xe6, 0xe1, 0x2b, 0xf4, 0x30, 0xce, 0x79, 0x32, 0x97, 0x51, 0x49, 0x44, 0xb4, 0x26, + 0x20, 0x5c, 0xe7, 0xc2, 0xbe, 0xee, 0x84, 0x27, 0x46, 0x9e, 0x10, 0xf1, 0x96, 0x80, 0x78, 0xfd, + 0xfc, 0xf3, 0x97, 0x9e, 0xf5, 0xf1, 0xcf, 0xd7, 0x97, 0xee, 0x3f, 0x01, 0x2b, 0xb3, 0x42, 0xe6, + 0x07, 0x18, 0x0c, 0x37, 0x7b, 0xcf, 0xde, 0xee, 0x3d, 0xfb, 0xf7, 0xde, 0xb3, 0x3f, 0x1d, 0x3c, + 0x6b, 0x7b, 0xf0, 0xac, 0x9f, 0x07, 0xcf, 0x9a, 0xbe, 0xb8, 0xb5, 0x66, 0x4d, 0xd1, 0x6d, 0x63, + 0x47, 0x6f, 0xca, 0xab, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0xc2, 0x18, 0xb9, 0xae, 0xa4, 0x03, + 0x00, 0x00, +} + +func (m *Minter) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Minter) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Minter) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size := m.AnnualProvisions.Size() + i -= size + if _, err := m.AnnualProvisions.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintMint(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size := m.Inflation.Size() + i -= size + if _, err := m.Inflation.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintMint(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *Params) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Params) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.BlocksPerYear != 0 { + i = encodeVarintMint(dAtA, i, uint64(m.BlocksPerYear)) + i-- + dAtA[i] = 0x30 + } + { + size := m.GoalBonded.Size() + i -= size + if _, err := m.GoalBonded.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintMint(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + { + size := m.InflationMin.Size() + i -= size + if _, err := m.InflationMin.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintMint(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + { + size := m.InflationMax.Size() + i -= size + if _, err := m.InflationMax.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintMint(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + { + size := m.InflationRateChange.Size() + i -= size + if _, err := m.InflationRateChange.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintMint(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + if len(m.MintDenom) > 0 { + i -= len(m.MintDenom) + copy(dAtA[i:], m.MintDenom) + i = encodeVarintMint(dAtA, i, uint64(len(m.MintDenom))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintMint(dAtA []byte, offset int, v uint64) int { + offset -= sovMint(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *Minter) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Inflation.Size() + n += 1 + l + sovMint(uint64(l)) + l = m.AnnualProvisions.Size() + n += 1 + l + sovMint(uint64(l)) + return n +} + +func (m *Params) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.MintDenom) + if l > 0 { + n += 1 + l + sovMint(uint64(l)) + } + l = m.InflationRateChange.Size() + n += 1 + l + sovMint(uint64(l)) + l = m.InflationMax.Size() + n += 1 + l + sovMint(uint64(l)) + l = m.InflationMin.Size() + n += 1 + l + sovMint(uint64(l)) + l = m.GoalBonded.Size() + n += 1 + l + sovMint(uint64(l)) + if m.BlocksPerYear != 0 { + n += 1 + sovMint(uint64(m.BlocksPerYear)) + } + return n +} + +func sovMint(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozMint(x uint64) (n int) { + return sovMint(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *Minter) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMint + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Minter: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Minter: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Inflation", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMint + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthMint + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthMint + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Inflation.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AnnualProvisions", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMint + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthMint + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthMint + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.AnnualProvisions.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipMint(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthMint + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Params) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMint + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Params: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Params: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MintDenom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMint + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthMint + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthMint + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.MintDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field InflationRateChange", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMint + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthMint + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthMint + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.InflationRateChange.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field InflationMax", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMint + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthMint + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthMint + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.InflationMax.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field InflationMin", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMint + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthMint + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthMint + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.InflationMin.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field GoalBonded", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMint + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthMint + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthMint + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.GoalBonded.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field BlocksPerYear", wireType) + } + m.BlocksPerYear = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMint + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.BlocksPerYear |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipMint(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthMint + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipMint(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowMint + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowMint + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowMint + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthMint + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupMint + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthMint + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthMint = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowMint = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupMint = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/mint/types/minter.go b/x/mint/types/minter.go new file mode 100644 index 00000000..9605d047 --- /dev/null +++ b/x/mint/types/minter.go @@ -0,0 +1,82 @@ +package types + +import ( + "fmt" + + "cosmossdk.io/math" + + sdk "github.com/cosmos/cosmos-sdk/types" +) + +// NewMinter returns a new Minter object with the given inflation and annual +// provisions values. +func NewMinter(inflation, annualProvisions sdk.Dec) Minter { + return Minter{ + Inflation: inflation, + AnnualProvisions: annualProvisions, + } +} + +// InitialMinter returns an initial Minter object with a given inflation value. +func InitialMinter(inflation sdk.Dec) Minter { + return NewMinter( + inflation, + math.LegacyNewDec(0), + ) +} + +// DefaultInitialMinter returns a default initial Minter object for a new chain +// which uses an inflation rate of 13%. +func DefaultInitialMinter() Minter { + return InitialMinter( + sdk.NewDecWithPrec(13, 2), + ) +} + +// ValidateMinter does a basic validation on minter. +func ValidateMinter(minter Minter) error { + if minter.Inflation.IsNegative() { + return fmt.Errorf("mint parameter Inflation should be positive, is %s", + minter.Inflation.String()) + } + return nil +} + +// NextInflationRate returns the new inflation rate for the next hour. +func (m Minter) NextInflationRate(params Params, bondedRatio sdk.Dec) math.LegacyDec { + // The target annual inflation rate is recalculated for each previsions cycle. The + // inflation is also subject to a rate change (positive or negative) depending on + // the distance from the desired ratio (67%). The maximum rate change possible is + // defined to be 13% per year, however the annual inflation is capped as between + // 7% and 20%. + + // (1 - bondedRatio/GoalBonded) * InflationRateChange + inflationRateChangePerYear := math.LegacyOneDec(). + Sub(bondedRatio.Quo(params.GoalBonded)). + Mul(params.InflationRateChange) + inflationRateChange := inflationRateChangePerYear.Quo(math.LegacyNewDec(int64(params.BlocksPerYear))) + + // adjust the new annual inflation for this next cycle + inflation := m.Inflation.Add(inflationRateChange) // note inflationRateChange may be negative + if inflation.GT(params.InflationMax) { + inflation = params.InflationMax + } + if inflation.LT(params.InflationMin) { + inflation = params.InflationMin + } + + return inflation +} + +// NextAnnualProvisions returns the annual provisions based on current total +// supply and inflation rate. +func (m Minter) NextAnnualProvisions(_ Params, totalSupply math.Int) math.LegacyDec { + return m.Inflation.MulInt(totalSupply) +} + +// BlockProvision returns the provisions for a block based on the annual +// provisions rate. +func (m Minter) BlockProvision(params Params) sdk.Coin { + provisionAmt := m.AnnualProvisions.QuoInt(sdk.NewInt(int64(params.BlocksPerYear))) + return sdk.NewCoin(params.MintDenom, provisionAmt.TruncateInt()) +} diff --git a/x/mint/types/minter_test.go b/x/mint/types/minter_test.go new file mode 100644 index 00000000..cd0c9f6d --- /dev/null +++ b/x/mint/types/minter_test.go @@ -0,0 +1,137 @@ +package types + +import ( + "math/rand" + "testing" + + "cosmossdk.io/math" + "github.com/stretchr/testify/require" + + sdk "github.com/cosmos/cosmos-sdk/types" +) + +func TestNextInflation(t *testing.T) { + minter := DefaultInitialMinter() + params := DefaultParams() + blocksPerYr := math.LegacyNewDec(int64(params.BlocksPerYear)) + + // Governing Mechanism: + // inflationRateChangePerYear = (1- BondedRatio/ GoalBonded) * MaxInflationRateChange + + tests := []struct { + bondedRatio, setInflation, expChange sdk.Dec + }{ + // with 0% bonded atom supply the inflation should increase by InflationRateChange + {math.LegacyZeroDec(), sdk.NewDecWithPrec(7, 2), params.InflationRateChange.Quo(blocksPerYr)}, + + // 100% bonded, starting at 20% inflation and being reduced + // (1 - (1/0.67))*(0.13/8667) + { + math.LegacyOneDec(), sdk.NewDecWithPrec(20, 2), + math.LegacyOneDec().Sub(math.LegacyOneDec().Quo(params.GoalBonded)).Mul(params.InflationRateChange).Quo(blocksPerYr), + }, + + // 50% bonded, starting at 10% inflation and being increased + { + sdk.NewDecWithPrec(5, 1), sdk.NewDecWithPrec(10, 2), + math.LegacyOneDec().Sub(sdk.NewDecWithPrec(5, 1).Quo(params.GoalBonded)).Mul(params.InflationRateChange).Quo(blocksPerYr), + }, + + // test 7% minimum stop (testing with 100% bonded) + {math.LegacyOneDec(), sdk.NewDecWithPrec(7, 2), math.LegacyZeroDec()}, + {math.LegacyOneDec(), sdk.NewDecWithPrec(700000001, 10), sdk.NewDecWithPrec(-1, 10)}, + + // test 20% maximum stop (testing with 0% bonded) + {math.LegacyZeroDec(), sdk.NewDecWithPrec(20, 2), math.LegacyZeroDec()}, + {math.LegacyZeroDec(), sdk.NewDecWithPrec(1999999999, 10), sdk.NewDecWithPrec(1, 10)}, + + // perfect balance shouldn't change inflation + {sdk.NewDecWithPrec(67, 2), sdk.NewDecWithPrec(15, 2), math.LegacyZeroDec()}, + } + for i, tc := range tests { + minter.Inflation = tc.setInflation + + inflation := minter.NextInflationRate(params, tc.bondedRatio) + diffInflation := inflation.Sub(tc.setInflation) + + require.True(t, diffInflation.Equal(tc.expChange), + "Test Index: %v\nDiff: %v\nExpected: %v\n", i, diffInflation, tc.expChange) + } +} + +func TestBlockProvision(t *testing.T) { + minter := InitialMinter(sdk.NewDecWithPrec(1, 1)) + params := DefaultParams() + + secondsPerYear := int64(60 * 60 * 8766) + + tests := []struct { + annualProvisions int64 + expProvisions int64 + }{ + {secondsPerYear / 5, 1}, + {secondsPerYear/5 + 1, 1}, + {(secondsPerYear / 5) * 2, 2}, + {(secondsPerYear / 5) / 2, 0}, + } + for i, tc := range tests { + minter.AnnualProvisions = math.LegacyNewDec(tc.annualProvisions) + provisions := minter.BlockProvision(params) + + expProvisions := sdk.NewCoin(params.MintDenom, + sdk.NewInt(tc.expProvisions)) + + require.True(t, expProvisions.IsEqual(provisions), + "test: %v\n\tExp: %v\n\tGot: %v\n", + i, tc.expProvisions, provisions) + } +} + +// Benchmarking :) +// previously using math.Int operations: +// BenchmarkBlockProvision-4 5000000 220 ns/op +// +// using math.LegacyDec operations: (current implementation) +// BenchmarkBlockProvision-4 3000000 429 ns/op +func BenchmarkBlockProvision(b *testing.B) { + b.ReportAllocs() + minter := InitialMinter(sdk.NewDecWithPrec(1, 1)) + params := DefaultParams() + + s1 := rand.NewSource(100) + r1 := rand.New(s1) + minter.AnnualProvisions = math.LegacyNewDec(r1.Int63n(1000000)) + + // run the BlockProvision function b.N times + for n := 0; n < b.N; n++ { + minter.BlockProvision(params) + } +} + +// Next inflation benchmarking +// BenchmarkNextInflation-4 1000000 1828 ns/op +func BenchmarkNextInflation(b *testing.B) { + b.ReportAllocs() + minter := InitialMinter(sdk.NewDecWithPrec(1, 1)) + params := DefaultParams() + bondedRatio := sdk.NewDecWithPrec(1, 1) + + // run the NextInflationRate function b.N times + for n := 0; n < b.N; n++ { + minter.NextInflationRate(params, bondedRatio) + } +} + +// Next annual provisions benchmarking +// BenchmarkNextAnnualProvisions-4 5000000 251 ns/op +func BenchmarkNextAnnualProvisions(b *testing.B) { + b.ReportAllocs() + minter := InitialMinter(sdk.NewDecWithPrec(1, 1)) + params := DefaultParams() + totalSupply := sdk.NewInt(100000000000000) + + // run the NextAnnualProvisions function b.N times + for n := 0; n < b.N; n++ { + minter.NextAnnualProvisions(params, totalSupply) + } +} diff --git a/x/mint/types/msgs.go b/x/mint/types/msgs.go new file mode 100644 index 00000000..a08186ef --- /dev/null +++ b/x/mint/types/msgs.go @@ -0,0 +1,32 @@ +package types + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" +) + +var _ sdk.Msg = &MsgUpdateParams{} + +// GetSignBytes implements the LegacyMsg interface. +func (m MsgUpdateParams) GetSignBytes() []byte { + return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&m)) +} + +// GetSigners returns the expected signers for a MsgUpdateParams message. +func (m *MsgUpdateParams) GetSigners() []sdk.AccAddress { + addr, _ := sdk.AccAddressFromBech32(m.Authority) + return []sdk.AccAddress{addr} +} + +// ValidateBasic does a sanity check on the provided data. +func (m *MsgUpdateParams) ValidateBasic() error { + if _, err := sdk.AccAddressFromBech32(m.Authority); err != nil { + return sdkerrors.Wrap(err, "invalid authority address") + } + + if err := m.Params.Validate(); err != nil { + return err + } + + return nil +} diff --git a/x/mint/types/params.go b/x/mint/types/params.go new file mode 100644 index 00000000..d0fb5ae9 --- /dev/null +++ b/x/mint/types/params.go @@ -0,0 +1,177 @@ +package types + +import ( + "errors" + "fmt" + "strings" + + "cosmossdk.io/math" + "sigs.k8s.io/yaml" + + sdk "github.com/cosmos/cosmos-sdk/types" +) + +// NewParams returns Params instance with the given values. +func NewParams(mintDenom string, inflationRateChange, inflationMax, inflationMin, goalBonded sdk.Dec, blocksPerYear uint64) Params { + return Params{ + MintDenom: mintDenom, + InflationRateChange: inflationRateChange, + InflationMax: inflationMax, + InflationMin: inflationMin, + GoalBonded: goalBonded, + BlocksPerYear: blocksPerYear, + } +} + +// DefaultParams returns default x/mint module parameters. +func DefaultParams() Params { + return Params{ + MintDenom: sdk.DefaultBondDenom, + InflationRateChange: sdk.NewDecWithPrec(13, 2), + InflationMax: sdk.NewDecWithPrec(20, 2), + InflationMin: sdk.NewDecWithPrec(7, 2), + GoalBonded: sdk.NewDecWithPrec(67, 2), + BlocksPerYear: uint64(60 * 60 * 8766 / 5), // assuming 5 second block times + } +} + +// Validate does the sanity check on the params. +func (p Params) Validate() error { + if err := validateMintDenom(p.MintDenom); err != nil { + return err + } + if err := validateInflationRateChange(p.InflationRateChange); err != nil { + return err + } + if err := validateInflationMax(p.InflationMax); err != nil { + return err + } + if err := validateInflationMin(p.InflationMin); err != nil { + return err + } + if err := validateGoalBonded(p.GoalBonded); err != nil { + return err + } + if err := validateBlocksPerYear(p.BlocksPerYear); err != nil { + return err + } + if p.InflationMax.LT(p.InflationMin) { + return fmt.Errorf( + "max inflation (%s) must be greater than or equal to min inflation (%s)", + p.InflationMax, p.InflationMin, + ) + } + + return nil +} + +// String implements the Stringer interface. +func (p Params) String() string { + out, _ := yaml.Marshal(p) + return string(out) +} + +func validateMintDenom(i interface{}) error { + v, ok := i.(string) + if !ok { + return fmt.Errorf("invalid parameter type: %T", i) + } + + if strings.TrimSpace(v) == "" { + return errors.New("mint denom cannot be blank") + } + if err := sdk.ValidateDenom(v); err != nil { + return err + } + + return nil +} + +func validateInflationRateChange(i interface{}) error { + v, ok := i.(sdk.Dec) + if !ok { + return fmt.Errorf("invalid parameter type: %T", i) + } + + if v.IsNil() { + return fmt.Errorf("inflation rate change cannot be nil: %s", v) + } + if v.IsNegative() { + return fmt.Errorf("inflation rate change cannot be negative: %s", v) + } + if v.GT(math.LegacyOneDec()) { + return fmt.Errorf("inflation rate change too large: %s", v) + } + + return nil +} + +func validateInflationMax(i interface{}) error { + v, ok := i.(sdk.Dec) + if !ok { + return fmt.Errorf("invalid parameter type: %T", i) + } + + if v.IsNil() { + return fmt.Errorf("max inflation cannot be nil: %s", v) + } + if v.IsNegative() { + return fmt.Errorf("max inflation cannot be negative: %s", v) + } + if v.GT(math.LegacyOneDec()) { + return fmt.Errorf("max inflation too large: %s", v) + } + + return nil +} + +func validateInflationMin(i interface{}) error { + v, ok := i.(sdk.Dec) + if !ok { + return fmt.Errorf("invalid parameter type: %T", i) + } + + if v.IsNil() { + return fmt.Errorf("min inflation cannot be nil: %s", v) + } + if v.IsNegative() { + return fmt.Errorf("min inflation cannot be negative: %s", v) + } + if v.GT(math.LegacyOneDec()) { + return fmt.Errorf("min inflation too large: %s", v) + } + + return nil +} + +func validateGoalBonded(i interface{}) error { + v, ok := i.(sdk.Dec) + if !ok { + return fmt.Errorf("invalid parameter type: %T", i) + } + + if v.IsNil() { + return fmt.Errorf("goal bonded cannot be nil: %s", v) + } + if v.IsNegative() || v.IsZero() { + return fmt.Errorf("goal bonded must be positive: %s", v) + } + if v.GT(math.LegacyOneDec()) { + return fmt.Errorf("goal bonded too large: %s", v) + } + + return nil +} + +func validateBlocksPerYear(i interface{}) error { + v, ok := i.(uint64) + if !ok { + return fmt.Errorf("invalid parameter type: %T", i) + } + + if v == 0 { + return fmt.Errorf("blocks per year must be positive: %d", v) + } + + return nil +} diff --git a/x/mint/types/params_legacy.go b/x/mint/types/params_legacy.go new file mode 100644 index 00000000..23354e2f --- /dev/null +++ b/x/mint/types/params_legacy.go @@ -0,0 +1,39 @@ +/* +NOTE: Usage of x/params to manage parameters is deprecated in favor of x/gov +controlled execution of MsgUpdateParams messages. These types remains solely +for migration purposes and will be removed in a future release. +*/ +package types + +import ( + paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" +) + +// Parameter store keys +var ( + KeyMintDenom = []byte("MintDenom") + KeyInflationRateChange = []byte("InflationRateChange") + KeyInflationMax = []byte("InflationMax") + KeyInflationMin = []byte("InflationMin") + KeyGoalBonded = []byte("GoalBonded") + KeyBlocksPerYear = []byte("BlocksPerYear") +) + +// Deprecated: ParamTable for minting module. +func ParamKeyTable() paramtypes.KeyTable { + return paramtypes.NewKeyTable().RegisterParamSet(&Params{}) +} + +// Implements params.ParamSet +// +// Deprecated. +func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs { + return paramtypes.ParamSetPairs{ + paramtypes.NewParamSetPair(KeyMintDenom, &p.MintDenom, validateMintDenom), + paramtypes.NewParamSetPair(KeyInflationRateChange, &p.InflationRateChange, validateInflationRateChange), + paramtypes.NewParamSetPair(KeyInflationMax, &p.InflationMax, validateInflationMax), + paramtypes.NewParamSetPair(KeyInflationMin, &p.InflationMin, validateInflationMin), + paramtypes.NewParamSetPair(KeyGoalBonded, &p.GoalBonded, validateGoalBonded), + paramtypes.NewParamSetPair(KeyBlocksPerYear, &p.BlocksPerYear, validateBlocksPerYear), + } +} diff --git a/x/mint/types/query.pb.go b/x/mint/types/query.pb.go new file mode 100644 index 00000000..fd255a02 --- /dev/null +++ b/x/mint/types/query.pb.go @@ -0,0 +1,1202 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: cosmos/mint/v1beta1/query.proto + +package types + +import ( + context "context" + fmt "fmt" + github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" + _ "github.com/cosmos/gogoproto/gogoproto" + grpc1 "github.com/cosmos/gogoproto/grpc" + proto "github.com/cosmos/gogoproto/proto" + _ "google.golang.org/genproto/googleapis/api/annotations" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// QueryParamsRequest is the request type for the Query/Params RPC method. +type QueryParamsRequest struct { +} + +func (m *QueryParamsRequest) Reset() { *m = QueryParamsRequest{} } +func (m *QueryParamsRequest) String() string { return proto.CompactTextString(m) } +func (*QueryParamsRequest) ProtoMessage() {} +func (*QueryParamsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_d0a1e393be338aea, []int{0} +} +func (m *QueryParamsRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryParamsRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryParamsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryParamsRequest.Merge(m, src) +} +func (m *QueryParamsRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryParamsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryParamsRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryParamsRequest proto.InternalMessageInfo + +// QueryParamsResponse is the response type for the Query/Params RPC method. +type QueryParamsResponse struct { + // params defines the parameters of the module. + Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` +} + +func (m *QueryParamsResponse) Reset() { *m = QueryParamsResponse{} } +func (m *QueryParamsResponse) String() string { return proto.CompactTextString(m) } +func (*QueryParamsResponse) ProtoMessage() {} +func (*QueryParamsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_d0a1e393be338aea, []int{1} +} +func (m *QueryParamsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryParamsResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryParamsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryParamsResponse.Merge(m, src) +} +func (m *QueryParamsResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryParamsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryParamsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryParamsResponse proto.InternalMessageInfo + +func (m *QueryParamsResponse) GetParams() Params { + if m != nil { + return m.Params + } + return Params{} +} + +// QueryInflationRequest is the request type for the Query/Inflation RPC method. +type QueryInflationRequest struct { +} + +func (m *QueryInflationRequest) Reset() { *m = QueryInflationRequest{} } +func (m *QueryInflationRequest) String() string { return proto.CompactTextString(m) } +func (*QueryInflationRequest) ProtoMessage() {} +func (*QueryInflationRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_d0a1e393be338aea, []int{2} +} +func (m *QueryInflationRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryInflationRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryInflationRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryInflationRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryInflationRequest.Merge(m, src) +} +func (m *QueryInflationRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryInflationRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryInflationRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryInflationRequest proto.InternalMessageInfo + +// QueryInflationResponse is the response type for the Query/Inflation RPC +// method. +type QueryInflationResponse struct { + // inflation is the current minting inflation value. + Inflation github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,1,opt,name=inflation,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"inflation"` +} + +func (m *QueryInflationResponse) Reset() { *m = QueryInflationResponse{} } +func (m *QueryInflationResponse) String() string { return proto.CompactTextString(m) } +func (*QueryInflationResponse) ProtoMessage() {} +func (*QueryInflationResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_d0a1e393be338aea, []int{3} +} +func (m *QueryInflationResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryInflationResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryInflationResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryInflationResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryInflationResponse.Merge(m, src) +} +func (m *QueryInflationResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryInflationResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryInflationResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryInflationResponse proto.InternalMessageInfo + +// QueryAnnualProvisionsRequest is the request type for the +// Query/AnnualProvisions RPC method. +type QueryAnnualProvisionsRequest struct { +} + +func (m *QueryAnnualProvisionsRequest) Reset() { *m = QueryAnnualProvisionsRequest{} } +func (m *QueryAnnualProvisionsRequest) String() string { return proto.CompactTextString(m) } +func (*QueryAnnualProvisionsRequest) ProtoMessage() {} +func (*QueryAnnualProvisionsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_d0a1e393be338aea, []int{4} +} +func (m *QueryAnnualProvisionsRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryAnnualProvisionsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryAnnualProvisionsRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryAnnualProvisionsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAnnualProvisionsRequest.Merge(m, src) +} +func (m *QueryAnnualProvisionsRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryAnnualProvisionsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAnnualProvisionsRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryAnnualProvisionsRequest proto.InternalMessageInfo + +// QueryAnnualProvisionsResponse is the response type for the +// Query/AnnualProvisions RPC method. +type QueryAnnualProvisionsResponse struct { + // annual_provisions is the current minting annual provisions value. + AnnualProvisions github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,1,opt,name=annual_provisions,json=annualProvisions,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"annual_provisions"` +} + +func (m *QueryAnnualProvisionsResponse) Reset() { *m = QueryAnnualProvisionsResponse{} } +func (m *QueryAnnualProvisionsResponse) String() string { return proto.CompactTextString(m) } +func (*QueryAnnualProvisionsResponse) ProtoMessage() {} +func (*QueryAnnualProvisionsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_d0a1e393be338aea, []int{5} +} +func (m *QueryAnnualProvisionsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryAnnualProvisionsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryAnnualProvisionsResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryAnnualProvisionsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAnnualProvisionsResponse.Merge(m, src) +} +func (m *QueryAnnualProvisionsResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryAnnualProvisionsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAnnualProvisionsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryAnnualProvisionsResponse proto.InternalMessageInfo + +func init() { + proto.RegisterType((*QueryParamsRequest)(nil), "cosmos.mint.v1beta1.QueryParamsRequest") + proto.RegisterType((*QueryParamsResponse)(nil), "cosmos.mint.v1beta1.QueryParamsResponse") + proto.RegisterType((*QueryInflationRequest)(nil), "cosmos.mint.v1beta1.QueryInflationRequest") + proto.RegisterType((*QueryInflationResponse)(nil), "cosmos.mint.v1beta1.QueryInflationResponse") + proto.RegisterType((*QueryAnnualProvisionsRequest)(nil), "cosmos.mint.v1beta1.QueryAnnualProvisionsRequest") + proto.RegisterType((*QueryAnnualProvisionsResponse)(nil), "cosmos.mint.v1beta1.QueryAnnualProvisionsResponse") +} + +func init() { proto.RegisterFile("cosmos/mint/v1beta1/query.proto", fileDescriptor_d0a1e393be338aea) } + +var fileDescriptor_d0a1e393be338aea = []byte{ + // 465 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4f, 0xce, 0x2f, 0xce, + 0xcd, 0x2f, 0xd6, 0xcf, 0xcd, 0xcc, 0x2b, 0xd1, 0x2f, 0x33, 0x4c, 0x4a, 0x2d, 0x49, 0x34, 0xd4, + 0x2f, 0x2c, 0x4d, 0x2d, 0xaa, 0xd4, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x86, 0x28, 0xd0, + 0x03, 0x29, 0xd0, 0x83, 0x2a, 0x90, 0x12, 0x49, 0xcf, 0x4f, 0xcf, 0x07, 0xcb, 0xeb, 0x83, 0x58, + 0x10, 0xa5, 0x52, 0x32, 0xe9, 0xf9, 0xf9, 0xe9, 0x39, 0xa9, 0xfa, 0x89, 0x05, 0x99, 0xfa, 0x89, + 0x79, 0x79, 0xf9, 0x25, 0x89, 0x25, 0x99, 0xf9, 0x79, 0xc5, 0x50, 0x59, 0x39, 0x6c, 0x36, 0x81, + 0x4d, 0x85, 0xc8, 0x0b, 0x26, 0xe6, 0x66, 0xe6, 0xe5, 0xeb, 0x83, 0x49, 0x88, 0x90, 0x92, 0x08, + 0x97, 0x50, 0x20, 0xc8, 0x29, 0x01, 0x89, 0x45, 0x89, 0xb9, 0xc5, 0x41, 0xa9, 0x85, 0xa5, 0xa9, + 0xc5, 0x25, 0x4a, 0xa1, 0x5c, 0xc2, 0x28, 0xa2, 0xc5, 0x05, 0xf9, 0x79, 0xc5, 0xa9, 0x42, 0x76, + 0x5c, 0x6c, 0x05, 0x60, 0x11, 0x09, 0x46, 0x05, 0x46, 0x0d, 0x6e, 0x23, 0x69, 0x3d, 0x2c, 0x2e, + 0xd7, 0x83, 0x68, 0x72, 0xe2, 0x3c, 0x71, 0x4f, 0x9e, 0x61, 0xc5, 0xf3, 0x0d, 0x5a, 0x8c, 0x41, + 0x50, 0x5d, 0x4a, 0xe2, 0x5c, 0xa2, 0x60, 0x63, 0x3d, 0xf3, 0xd2, 0x72, 0xc0, 0x0e, 0x87, 0xd9, + 0x97, 0xcd, 0x25, 0x86, 0x2e, 0x01, 0xb5, 0x32, 0x90, 0x8b, 0x33, 0x13, 0x26, 0x08, 0xb6, 0x95, + 0xc7, 0xc9, 0x18, 0x64, 0xf0, 0xad, 0x7b, 0xf2, 0x6a, 0xe9, 0x99, 0x25, 0x19, 0xa5, 0x49, 0x7a, + 0xc9, 0xf9, 0xb9, 0xfa, 0x50, 0x8f, 0x43, 0x28, 0xdd, 0xe2, 0x94, 0x6c, 0xfd, 0x92, 0xca, 0x82, + 0xd4, 0x62, 0x3d, 0x97, 0xd4, 0x64, 0x88, 0x13, 0x10, 0xa6, 0x28, 0xc9, 0x71, 0xc9, 0x80, 0x2d, + 0x73, 0xcc, 0xcb, 0x2b, 0x4d, 0xcc, 0x09, 0x28, 0xca, 0x2f, 0xcb, 0x2c, 0x06, 0x05, 0x22, 0xcc, + 0x31, 0x8d, 0x8c, 0x5c, 0xb2, 0x38, 0x14, 0x40, 0x1d, 0x95, 0xc0, 0x25, 0x98, 0x08, 0x96, 0x8b, + 0x2f, 0x80, 0x4b, 0x52, 0xe2, 0x38, 0x81, 0x44, 0x34, 0x9b, 0x8c, 0x8e, 0x32, 0x73, 0xb1, 0x82, + 0xdd, 0x20, 0xd4, 0xc0, 0xc8, 0xc5, 0x06, 0x09, 0x51, 0x21, 0x75, 0xac, 0xc1, 0x8d, 0x19, 0x7d, + 0x52, 0x1a, 0x84, 0x15, 0x42, 0x7c, 0xa2, 0xa4, 0xdc, 0x74, 0xf9, 0xc9, 0x64, 0x26, 0x59, 0x21, + 0x69, 0x7d, 0x6c, 0x49, 0x07, 0x12, 0x6d, 0x42, 0x3d, 0x8c, 0x5c, 0x9c, 0xf0, 0x98, 0x11, 0xd2, + 0xc2, 0x6d, 0x38, 0x7a, 0xbc, 0x4a, 0x69, 0x13, 0xa5, 0x16, 0xea, 0x16, 0x35, 0xb0, 0x5b, 0x14, + 0x84, 0xe4, 0xb0, 0xba, 0x05, 0x1e, 0x7f, 0x42, 0x2b, 0x19, 0xb9, 0x04, 0xd0, 0xa3, 0x46, 0xc8, + 0x10, 0xb7, 0x4d, 0x38, 0xe2, 0x59, 0xca, 0x88, 0x14, 0x2d, 0x50, 0x37, 0xea, 0x81, 0xdd, 0xa8, + 0x21, 0xa4, 0x86, 0xd5, 0x8d, 0x18, 0x89, 0xc2, 0xc9, 0xf9, 0xc4, 0x23, 0x39, 0xc6, 0x0b, 0x8f, + 0xe4, 0x18, 0x1f, 0x3c, 0x92, 0x63, 0x9c, 0xf0, 0x58, 0x8e, 0xe1, 0xc2, 0x63, 0x39, 0x86, 0x1b, + 0x8f, 0xe5, 0x18, 0xa2, 0x34, 0xf1, 0x26, 0x90, 0x0a, 0x88, 0xc1, 0xe0, 0x74, 0x92, 0xc4, 0x06, + 0xce, 0xaa, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x39, 0xdf, 0xd1, 0xc0, 0x49, 0x04, 0x00, + 0x00, +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// QueryClient is the client API for Query service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type QueryClient interface { + // Params returns the total set of minting parameters. + Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) + // Inflation returns the current minting inflation value. + Inflation(ctx context.Context, in *QueryInflationRequest, opts ...grpc.CallOption) (*QueryInflationResponse, error) + // AnnualProvisions current minting annual provisions value. + AnnualProvisions(ctx context.Context, in *QueryAnnualProvisionsRequest, opts ...grpc.CallOption) (*QueryAnnualProvisionsResponse, error) +} + +type queryClient struct { + cc grpc1.ClientConn +} + +func NewQueryClient(cc grpc1.ClientConn) QueryClient { + return &queryClient{cc} +} + +func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) { + out := new(QueryParamsResponse) + err := c.cc.Invoke(ctx, "/cosmos.mint.v1beta1.Query/Params", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) Inflation(ctx context.Context, in *QueryInflationRequest, opts ...grpc.CallOption) (*QueryInflationResponse, error) { + out := new(QueryInflationResponse) + err := c.cc.Invoke(ctx, "/cosmos.mint.v1beta1.Query/Inflation", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) AnnualProvisions(ctx context.Context, in *QueryAnnualProvisionsRequest, opts ...grpc.CallOption) (*QueryAnnualProvisionsResponse, error) { + out := new(QueryAnnualProvisionsResponse) + err := c.cc.Invoke(ctx, "/cosmos.mint.v1beta1.Query/AnnualProvisions", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// QueryServer is the server API for Query service. +type QueryServer interface { + // Params returns the total set of minting parameters. + Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) + // Inflation returns the current minting inflation value. + Inflation(context.Context, *QueryInflationRequest) (*QueryInflationResponse, error) + // AnnualProvisions current minting annual provisions value. + AnnualProvisions(context.Context, *QueryAnnualProvisionsRequest) (*QueryAnnualProvisionsResponse, error) +} + +// UnimplementedQueryServer can be embedded to have forward compatible implementations. +type UnimplementedQueryServer struct { +} + +func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Params not implemented") +} +func (*UnimplementedQueryServer) Inflation(ctx context.Context, req *QueryInflationRequest) (*QueryInflationResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Inflation not implemented") +} +func (*UnimplementedQueryServer) AnnualProvisions(ctx context.Context, req *QueryAnnualProvisionsRequest) (*QueryAnnualProvisionsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method AnnualProvisions not implemented") +} + +func RegisterQueryServer(s grpc1.Server, srv QueryServer) { + s.RegisterService(&_Query_serviceDesc, srv) +} + +func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryParamsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).Params(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.mint.v1beta1.Query/Params", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_Inflation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryInflationRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).Inflation(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.mint.v1beta1.Query/Inflation", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).Inflation(ctx, req.(*QueryInflationRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_AnnualProvisions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAnnualProvisionsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).AnnualProvisions(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.mint.v1beta1.Query/AnnualProvisions", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).AnnualProvisions(ctx, req.(*QueryAnnualProvisionsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _Query_serviceDesc = grpc.ServiceDesc{ + ServiceName: "cosmos.mint.v1beta1.Query", + HandlerType: (*QueryServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Params", + Handler: _Query_Params_Handler, + }, + { + MethodName: "Inflation", + Handler: _Query_Inflation_Handler, + }, + { + MethodName: "AnnualProvisions", + Handler: _Query_AnnualProvisions_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "cosmos/mint/v1beta1/query.proto", +} + +func (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryParamsRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *QueryParamsResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryParamsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *QueryInflationRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryInflationRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryInflationRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *QueryInflationResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryInflationResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryInflationResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size := m.Inflation.Size() + i -= size + if _, err := m.Inflation.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *QueryAnnualProvisionsRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryAnnualProvisionsRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryAnnualProvisionsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *QueryAnnualProvisionsResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryAnnualProvisionsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryAnnualProvisionsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size := m.AnnualProvisions.Size() + i -= size + if _, err := m.AnnualProvisions.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { + offset -= sovQuery(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *QueryParamsRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *QueryParamsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Params.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func (m *QueryInflationRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *QueryInflationResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Inflation.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func (m *QueryAnnualProvisionsRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *QueryAnnualProvisionsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.AnnualProvisions.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func sovQuery(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozQuery(x uint64) (n int) { + return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryParamsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryInflationRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryInflationRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryInflationRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryInflationResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryInflationResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryInflationResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Inflation", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Inflation.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryAnnualProvisionsRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryAnnualProvisionsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryAnnualProvisionsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryAnnualProvisionsResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryAnnualProvisionsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryAnnualProvisionsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AnnualProvisions", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.AnnualProvisions.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipQuery(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthQuery + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupQuery + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthQuery + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthQuery = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowQuery = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupQuery = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/mint/types/query.pb.gw.go b/x/mint/types/query.pb.gw.go new file mode 100644 index 00000000..7ed551a6 --- /dev/null +++ b/x/mint/types/query.pb.gw.go @@ -0,0 +1,283 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: cosmos/mint/v1beta1/query.proto + +/* +Package types is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package types + +import ( + "context" + "io" + "net/http" + + "github.com/golang/protobuf/descriptor" + "github.com/golang/protobuf/proto" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/grpc-ecosystem/grpc-gateway/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = descriptor.ForMessage +var _ = metadata.Join + +func request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryParamsRequest + var metadata runtime.ServerMetadata + + msg, err := client.Params(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryParamsRequest + var metadata runtime.ServerMetadata + + msg, err := server.Params(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Query_Inflation_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryInflationRequest + var metadata runtime.ServerMetadata + + msg, err := client.Inflation(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_Inflation_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryInflationRequest + var metadata runtime.ServerMetadata + + msg, err := server.Inflation(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Query_AnnualProvisions_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAnnualProvisionsRequest + var metadata runtime.ServerMetadata + + msg, err := client.AnnualProvisions(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_AnnualProvisions_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAnnualProvisionsRequest + var metadata runtime.ServerMetadata + + msg, err := server.AnnualProvisions(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterQueryHandlerServer registers the http handlers for service Query to "mux". +// UnaryRPC :call QueryServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterQueryHandlerFromEndpoint instead. +func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, server QueryServer) error { + + mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_Params_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_Inflation_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_Inflation_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_Inflation_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_AnnualProvisions_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_AnnualProvisions_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_AnnualProvisions_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterQueryHandlerFromEndpoint is same as RegisterQueryHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterQueryHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterQueryHandler(ctx, mux, conn) +} + +// RegisterQueryHandler registers the http handlers for service Query to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterQueryHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterQueryHandlerClient(ctx, mux, NewQueryClient(conn)) +} + +// RegisterQueryHandlerClient registers the http handlers for service Query +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "QueryClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "QueryClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "QueryClient" to call the correct interceptors. +func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, client QueryClient) error { + + mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_Params_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_Inflation_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_Inflation_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_Inflation_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_AnnualProvisions_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_AnnualProvisions_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_AnnualProvisions_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"cosmos", "mint", "v1beta1", "params"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_Inflation_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"cosmos", "mint", "v1beta1", "inflation"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_AnnualProvisions_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"cosmos", "mint", "v1beta1", "annual_provisions"}, "", runtime.AssumeColonVerbOpt(false))) +) + +var ( + forward_Query_Params_0 = runtime.ForwardResponseMessage + + forward_Query_Inflation_0 = runtime.ForwardResponseMessage + + forward_Query_AnnualProvisions_0 = runtime.ForwardResponseMessage +) diff --git a/x/mint/types/tx.pb.go b/x/mint/types/tx.pb.go new file mode 100644 index 00000000..e4a8f909 --- /dev/null +++ b/x/mint/types/tx.pb.go @@ -0,0 +1,606 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: cosmos/mint/v1beta1/tx.proto + +package types + +import ( + context "context" + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + _ "github.com/cosmos/cosmos-sdk/types/msgservice" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" + _ "github.com/cosmos/gogoproto/gogoproto" + grpc1 "github.com/cosmos/gogoproto/grpc" + proto "github.com/cosmos/gogoproto/proto" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// MsgUpdateParams is the Msg/UpdateParams request type. +// +// Since: cosmos-sdk 0.47 +type MsgUpdateParams struct { + // authority is the address that controls the module (defaults to x/gov unless overwritten). + Authority string `protobuf:"bytes,1,opt,name=authority,proto3" json:"authority,omitempty"` + // params defines the x/mint parameters to update. + // + // NOTE: All parameters must be supplied. + Params Params `protobuf:"bytes,2,opt,name=params,proto3" json:"params"` +} + +func (m *MsgUpdateParams) Reset() { *m = MsgUpdateParams{} } +func (m *MsgUpdateParams) String() string { return proto.CompactTextString(m) } +func (*MsgUpdateParams) ProtoMessage() {} +func (*MsgUpdateParams) Descriptor() ([]byte, []int) { + return fileDescriptor_a0d933a8bf5e188a, []int{0} +} +func (m *MsgUpdateParams) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgUpdateParams) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgUpdateParams.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgUpdateParams) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgUpdateParams.Merge(m, src) +} +func (m *MsgUpdateParams) XXX_Size() int { + return m.Size() +} +func (m *MsgUpdateParams) XXX_DiscardUnknown() { + xxx_messageInfo_MsgUpdateParams.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgUpdateParams proto.InternalMessageInfo + +func (m *MsgUpdateParams) GetAuthority() string { + if m != nil { + return m.Authority + } + return "" +} + +func (m *MsgUpdateParams) GetParams() Params { + if m != nil { + return m.Params + } + return Params{} +} + +// MsgUpdateParamsResponse defines the response structure for executing a +// MsgUpdateParams message. +// +// Since: cosmos-sdk 0.47 +type MsgUpdateParamsResponse struct { +} + +func (m *MsgUpdateParamsResponse) Reset() { *m = MsgUpdateParamsResponse{} } +func (m *MsgUpdateParamsResponse) String() string { return proto.CompactTextString(m) } +func (*MsgUpdateParamsResponse) ProtoMessage() {} +func (*MsgUpdateParamsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_a0d933a8bf5e188a, []int{1} +} +func (m *MsgUpdateParamsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgUpdateParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgUpdateParamsResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgUpdateParamsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgUpdateParamsResponse.Merge(m, src) +} +func (m *MsgUpdateParamsResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgUpdateParamsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgUpdateParamsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgUpdateParamsResponse proto.InternalMessageInfo + +func init() { + proto.RegisterType((*MsgUpdateParams)(nil), "cosmos.mint.v1beta1.MsgUpdateParams") + proto.RegisterType((*MsgUpdateParamsResponse)(nil), "cosmos.mint.v1beta1.MsgUpdateParamsResponse") +} + +func init() { proto.RegisterFile("cosmos/mint/v1beta1/tx.proto", fileDescriptor_a0d933a8bf5e188a) } + +var fileDescriptor_a0d933a8bf5e188a = []byte{ + // 343 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x49, 0xce, 0x2f, 0xce, + 0xcd, 0x2f, 0xd6, 0xcf, 0xcd, 0xcc, 0x2b, 0xd1, 0x2f, 0x33, 0x4c, 0x4a, 0x2d, 0x49, 0x34, 0xd4, + 0x2f, 0xa9, 0xd0, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x86, 0xc8, 0xea, 0x81, 0x64, 0xf5, + 0xa0, 0xb2, 0x52, 0xe2, 0x30, 0x2d, 0xc5, 0xe9, 0xfa, 0x65, 0x86, 0x20, 0x0a, 0xa2, 0x5a, 0x4a, + 0x30, 0x31, 0x37, 0x33, 0x2f, 0x5f, 0x1f, 0x4c, 0x42, 0x85, 0xe4, 0xb0, 0x19, 0x0f, 0x36, 0x0d, + 0x22, 0x2f, 0x92, 0x9e, 0x9f, 0x9e, 0x0f, 0x66, 0xea, 0x83, 0x58, 0x50, 0x51, 0x49, 0x88, 0xae, + 0x78, 0x88, 0x04, 0xd4, 0x0d, 0x60, 0x8e, 0xd2, 0x7e, 0x46, 0x2e, 0x7e, 0xdf, 0xe2, 0xf4, 0xd0, + 0x82, 0x94, 0xc4, 0x92, 0xd4, 0x80, 0xc4, 0xa2, 0xc4, 0xdc, 0x62, 0x21, 0x33, 0x2e, 0xce, 0xc4, + 0xd2, 0x92, 0x8c, 0xfc, 0xa2, 0xcc, 0x92, 0x4a, 0x09, 0x46, 0x05, 0x46, 0x0d, 0x4e, 0x27, 0x89, + 0x4b, 0x5b, 0x74, 0x45, 0xa0, 0x1a, 0x1d, 0x53, 0x52, 0x8a, 0x52, 0x8b, 0x8b, 0x83, 0x4b, 0x8a, + 0x32, 0xf3, 0xd2, 0x83, 0x10, 0x4a, 0x85, 0xec, 0xb8, 0xd8, 0x0a, 0xc0, 0x26, 0x48, 0x30, 0x29, + 0x30, 0x6a, 0x70, 0x1b, 0x49, 0xeb, 0x61, 0xf1, 0xae, 0x1e, 0xc4, 0x12, 0x27, 0xce, 0x13, 0xf7, + 0xe4, 0x19, 0x56, 0x3c, 0xdf, 0xa0, 0xc5, 0x18, 0x04, 0xd5, 0x65, 0x65, 0xd2, 0xf4, 0x7c, 0x83, + 0x16, 0xc2, 0xbc, 0xae, 0xe7, 0x1b, 0xb4, 0x14, 0x21, 0x26, 0xe8, 0x16, 0xa7, 0x64, 0xeb, 0x57, + 0x40, 0x7c, 0x8d, 0xe6, 0x5a, 0x25, 0x49, 0x2e, 0x71, 0x34, 0xa1, 0xa0, 0xd4, 0xe2, 0x82, 0xfc, + 0xbc, 0xe2, 0x54, 0xa3, 0x02, 0x2e, 0x66, 0xdf, 0xe2, 0x74, 0xa1, 0x24, 0x2e, 0x1e, 0x14, 0xff, + 0xa9, 0x60, 0x75, 0x17, 0x9a, 0x21, 0x52, 0x3a, 0xc4, 0xa8, 0x82, 0x59, 0x25, 0xc5, 0xda, 0x00, + 0xf2, 0x8a, 0x93, 0xf3, 0x89, 0x47, 0x72, 0x8c, 0x17, 0x1e, 0xc9, 0x31, 0x3e, 0x78, 0x24, 0xc7, + 0x38, 0xe1, 0xb1, 0x1c, 0xc3, 0x85, 0xc7, 0x72, 0x0c, 0x37, 0x1e, 0xcb, 0x31, 0x44, 0x69, 0xa6, + 0x67, 0x96, 0x64, 0x94, 0x26, 0xe9, 0x25, 0xe7, 0xe7, 0x42, 0x63, 0x40, 0x1f, 0xd3, 0x6f, 0x25, + 0x95, 0x05, 0xa9, 0xc5, 0x49, 0x6c, 0xe0, 0xa8, 0x31, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, 0x13, + 0x9e, 0x4f, 0xda, 0x4c, 0x02, 0x00, 0x00, +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// MsgClient is the client API for Msg service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type MsgClient interface { + // UpdateParams defines a governance operation for updating the x/mint module + // parameters. The authority is defaults to the x/gov module account. + // + // Since: cosmos-sdk 0.47 + UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) +} + +type msgClient struct { + cc grpc1.ClientConn +} + +func NewMsgClient(cc grpc1.ClientConn) MsgClient { + return &msgClient{cc} +} + +func (c *msgClient) UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) { + out := new(MsgUpdateParamsResponse) + err := c.cc.Invoke(ctx, "/cosmos.mint.v1beta1.Msg/UpdateParams", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// MsgServer is the server API for Msg service. +type MsgServer interface { + // UpdateParams defines a governance operation for updating the x/mint module + // parameters. The authority is defaults to the x/gov module account. + // + // Since: cosmos-sdk 0.47 + UpdateParams(context.Context, *MsgUpdateParams) (*MsgUpdateParamsResponse, error) +} + +// UnimplementedMsgServer can be embedded to have forward compatible implementations. +type UnimplementedMsgServer struct { +} + +func (*UnimplementedMsgServer) UpdateParams(ctx context.Context, req *MsgUpdateParams) (*MsgUpdateParamsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateParams not implemented") +} + +func RegisterMsgServer(s grpc1.Server, srv MsgServer) { + s.RegisterService(&_Msg_serviceDesc, srv) +} + +func _Msg_UpdateParams_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgUpdateParams) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).UpdateParams(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.mint.v1beta1.Msg/UpdateParams", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).UpdateParams(ctx, req.(*MsgUpdateParams)) + } + return interceptor(ctx, in, info, handler) +} + +var _Msg_serviceDesc = grpc.ServiceDesc{ + ServiceName: "cosmos.mint.v1beta1.Msg", + HandlerType: (*MsgServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "UpdateParams", + Handler: _Msg_UpdateParams_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "cosmos/mint/v1beta1/tx.proto", +} + +func (m *MsgUpdateParams) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgUpdateParams) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgUpdateParams) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + if len(m.Authority) > 0 { + i -= len(m.Authority) + copy(dAtA[i:], m.Authority) + i = encodeVarintTx(dAtA, i, uint64(len(m.Authority))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgUpdateParamsResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgUpdateParamsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgUpdateParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func encodeVarintTx(dAtA []byte, offset int, v uint64) int { + offset -= sovTx(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *MsgUpdateParams) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Authority) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = m.Params.Size() + n += 1 + l + sovTx(uint64(l)) + return n +} + +func (m *MsgUpdateParamsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func sovTx(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozTx(x uint64) (n int) { + return sovTx(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *MsgUpdateParams) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgUpdateParams: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgUpdateParams: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Authority", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Authority = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgUpdateParamsResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgUpdateParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgUpdateParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipTx(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthTx + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupTx + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthTx + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthTx = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowTx = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupTx = fmt.Errorf("proto: unexpected end of group") +) From 6368905fc81b3391ef9a7a3f5a6f88093d24fadb Mon Sep 17 00:00:00 2001 From: Cole Brown Date: Fri, 31 Mar 2023 12:18:49 -0400 Subject: [PATCH 006/501] Generate mint protos, fix protogen script --- proto/cosmos/msg/v1/msg.proto | 31 --------- scripts/protocgen.sh | 10 --- x/mint/types/event.pb.go | 61 +++++++++--------- x/mint/types/genesis.pb.go | 42 ++++++------- x/mint/types/mint.pb.go | 70 ++++++++++----------- x/mint/types/query.pb.go | 114 +++++++++++++++++----------------- x/mint/types/query.pb.gw.go | 6 +- x/mint/types/tx.pb.go | 77 +++++++++++------------ 8 files changed, 186 insertions(+), 225 deletions(-) delete mode 100644 proto/cosmos/msg/v1/msg.proto diff --git a/proto/cosmos/msg/v1/msg.proto b/proto/cosmos/msg/v1/msg.proto deleted file mode 100644 index bceff0f6..00000000 --- a/proto/cosmos/msg/v1/msg.proto +++ /dev/null @@ -1,31 +0,0 @@ -syntax = "proto3"; - -package cosmos.msg.v1; - -import "google/protobuf/descriptor.proto"; - -// TODO(fdymylja): once we fully migrate to protov2 the go_package needs to be -// updated. We need this right now because gogoproto codegen needs to import the -// extension. -option go_package = "github.com/cosmos/cosmos-sdk/types/msgservice"; - -extend google.protobuf.ServiceOptions { - // service indicates that the service is a Msg service and that requests - // must be transported via blockchain transactions rather than gRPC. - // Tooling can use this annotation to distinguish between Msg services and - // other types of services via reflection. - bool service = 11110000; -} - -extend google.protobuf.MessageOptions { - // signer must be used in cosmos messages in order - // to signal to external clients which fields in a - // given cosmos message must be filled with signer - // information (address). - // The field must be the protobuf name of the message - // field extended with this MessageOption. - // The field must either be of string kind, or of message - // kind in case the signer information is contained within - // a message inside the cosmos message. - repeated string signer = 11110000; -} diff --git a/scripts/protocgen.sh b/scripts/protocgen.sh index b3729e73..cb496f9a 100755 --- a/scripts/protocgen.sh +++ b/scripts/protocgen.sh @@ -2,11 +2,6 @@ set -eo pipefail -protoc_install_proto_gen_doc() { - echo "Installing protobuf protoc-gen-doc plugin" - (go install github.com/pseudomuto/protoc-gen-doc/cmd/protoc-gen-doc@latest 2> /dev/null) -} - echo "Generating gogo proto code" cd proto proto_dirs=$(find ./xion -path -prune -o -name '*.proto' -print0 | xargs -0 -n1 dirname | sort | uniq) @@ -18,11 +13,6 @@ for dir in $proto_dirs; do done done -protoc_install_proto_gen_doc - -echo "Generating proto docs" -buf generate --template buf.gen.doc.yml - cd .. # move proto files to the right places diff --git a/x/mint/types/event.pb.go b/x/mint/types/event.pb.go index b985392b..680d5f03 100644 --- a/x/mint/types/event.pb.go +++ b/x/mint/types/event.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: cosmos/mint/v1beta1/event.proto +// source: xion/mint/v1/event.proto package types @@ -40,7 +40,7 @@ func (m *MintIncentiveTokens) Reset() { *m = MintIncentiveTokens{} } func (m *MintIncentiveTokens) String() string { return proto.CompactTextString(m) } func (*MintIncentiveTokens) ProtoMessage() {} func (*MintIncentiveTokens) Descriptor() ([]byte, []int) { - return fileDescriptor_0c2a1b6cb72c04df, []int{0} + return fileDescriptor_a4b507e362b6edbc, []int{0} } func (m *MintIncentiveTokens) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -98,36 +98,37 @@ func (m *MintIncentiveTokens) GetBurnedAmount() uint64 { } func init() { - proto.RegisterType((*MintIncentiveTokens)(nil), "cosmos.mint.v1beta1.MintIncentiveTokens") + proto.RegisterType((*MintIncentiveTokens)(nil), "mint.v1.MintIncentiveTokens") } -func init() { proto.RegisterFile("cosmos/mint/v1beta1/event.proto", fileDescriptor_0c2a1b6cb72c04df) } +func init() { proto.RegisterFile("xion/mint/v1/event.proto", fileDescriptor_a4b507e362b6edbc) } -var fileDescriptor_0c2a1b6cb72c04df = []byte{ - // 368 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x92, 0xc1, 0x4a, 0xeb, 0x40, - 0x14, 0x86, 0x93, 0xdb, 0xde, 0x5e, 0x3a, 0xb7, 0xc5, 0x9a, 0xba, 0x08, 0x2e, 0x92, 0x92, 0x82, - 0xb4, 0x0b, 0x13, 0x8a, 0x3b, 0x77, 0x56, 0x5d, 0x28, 0x08, 0x12, 0x5c, 0xb9, 0xa9, 0x49, 0x3a, - 0xb6, 0x43, 0x93, 0x33, 0x25, 0x99, 0x44, 0xfb, 0x16, 0x3e, 0x56, 0x97, 0x5d, 0x8a, 0x8b, 0x22, - 0xed, 0x1b, 0x88, 0x0f, 0x20, 0x99, 0x53, 0x1a, 0x41, 0x10, 0xba, 0xca, 0x39, 0x7f, 0x3e, 0xfe, - 0x7f, 0xe6, 0xcc, 0x21, 0x66, 0xc0, 0x93, 0x88, 0x27, 0x4e, 0xc4, 0x40, 0x38, 0x59, 0xcf, 0xa7, - 0xc2, 0xeb, 0x39, 0x34, 0xa3, 0x20, 0xec, 0x69, 0xcc, 0x05, 0xd7, 0x9a, 0x08, 0xd8, 0x39, 0x60, - 0x6f, 0x80, 0xc3, 0x83, 0x11, 0x1f, 0x71, 0xf9, 0xdf, 0xc9, 0x2b, 0x44, 0xad, 0xcf, 0x12, 0x69, - 0xde, 0x30, 0x10, 0x57, 0x10, 0x50, 0x10, 0x2c, 0xa3, 0x77, 0x7c, 0x42, 0x21, 0xd1, 0xc6, 0xa4, - 0xe6, 0x73, 0x18, 0xd2, 0xe1, 0x20, 0xf6, 0x04, 0xe3, 0xba, 0xda, 0x52, 0x3b, 0xd5, 0xfe, 0xe5, - 0x7c, 0x69, 0x2a, 0x6f, 0x4b, 0xf3, 0x68, 0xc4, 0xc4, 0x38, 0xf5, 0xed, 0x80, 0x47, 0xce, 0xe6, - 0x30, 0xf8, 0x39, 0x4e, 0x86, 0x13, 0x47, 0xcc, 0xa6, 0x34, 0xb1, 0x2f, 0x68, 0xf0, 0xb1, 0x34, - 0x9b, 0x33, 0x2f, 0x0a, 0x4f, 0xad, 0xef, 0x5e, 0x96, 0xfb, 0x1f, 0x5b, 0x37, 0xef, 0xb4, 0x07, - 0x52, 0x65, 0xf0, 0x18, 0xe6, 0x35, 0xe8, 0x7f, 0x64, 0x4c, 0x7f, 0xe7, 0x98, 0x06, 0xc6, 0x6c, - 0x8d, 0x2c, 0xb7, 0x30, 0xd5, 0x9e, 0xc8, 0xbe, 0x07, 0x90, 0x7a, 0xe1, 0x60, 0x1a, 0xf3, 0x8c, - 0x25, 0x8c, 0x43, 0xa2, 0x97, 0x64, 0xd2, 0xf5, 0xce, 0x49, 0x3a, 0x26, 0xfd, 0x30, 0xb4, 0xdc, - 0x06, 0x6a, 0xb7, 0x5b, 0x49, 0x6b, 0x93, 0x3a, 0x50, 0x9a, 0x5f, 0xdc, 0x8b, 0x78, 0x0a, 0x42, - 0x2f, 0xb7, 0xd4, 0x4e, 0xd9, 0xad, 0xa1, 0x78, 0x26, 0x35, 0xad, 0x4b, 0x1a, 0x01, 0x0f, 0x43, - 0x1a, 0x88, 0x82, 0xfb, 0x2b, 0xb9, 0xbd, 0xad, 0xbe, 0x41, 0xdb, 0xa4, 0x9e, 0x3f, 0x69, 0xc1, - 0x55, 0xd0, 0x0f, 0xc5, 0x02, 0xf2, 0xd3, 0x18, 0x0a, 0xe8, 0x1f, 0x42, 0x28, 0x22, 0xd4, 0x3f, - 0x9f, 0xaf, 0x0c, 0x75, 0xb1, 0x32, 0xd4, 0xf7, 0x95, 0xa1, 0xbe, 0xac, 0x0d, 0x65, 0xb1, 0x36, - 0x94, 0xd7, 0xb5, 0xa1, 0xdc, 0x77, 0x7f, 0x9d, 0xc4, 0x33, 0x2e, 0x9d, 0x1c, 0x88, 0x5f, 0x91, - 0x2b, 0x74, 0xf2, 0x15, 0x00, 0x00, 0xff, 0xff, 0x97, 0x38, 0x19, 0x3a, 0x90, 0x02, 0x00, 0x00, +var fileDescriptor_a4b507e362b6edbc = []byte{ + // 372 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x92, 0xb1, 0x6e, 0xda, 0x40, + 0x18, 0xc7, 0xed, 0x42, 0x41, 0x5c, 0x41, 0xa5, 0xa6, 0x83, 0xd5, 0xc1, 0x20, 0x23, 0xb5, 0x74, + 0xc0, 0x16, 0xea, 0xd6, 0x0d, 0xd4, 0x0e, 0x89, 0x14, 0x29, 0xb2, 0x32, 0x65, 0x21, 0xb6, 0xb9, + 0xc0, 0x09, 0xfb, 0xfb, 0x90, 0xef, 0xec, 0xc0, 0x5b, 0xe4, 0xb1, 0x18, 0x19, 0xa3, 0x0c, 0x28, + 0x82, 0x37, 0x88, 0xf2, 0x00, 0x91, 0xef, 0x10, 0x46, 0xca, 0xc4, 0xe4, 0xbb, 0x9f, 0x7f, 0xfe, + 0xff, 0xe5, 0xbb, 0x8f, 0x98, 0x4b, 0x86, 0xe0, 0xc6, 0x0c, 0x84, 0x9b, 0x0d, 0x5c, 0x9a, 0x51, + 0x10, 0xce, 0x22, 0x41, 0x81, 0x46, 0x35, 0x87, 0x4e, 0x36, 0xf8, 0xf1, 0x7d, 0x8a, 0x53, 0x94, + 0xcc, 0xcd, 0x57, 0xea, 0xb5, 0xfd, 0x56, 0x22, 0xad, 0x2b, 0x06, 0xe2, 0x02, 0x42, 0x0a, 0x82, + 0x65, 0xf4, 0x06, 0xe7, 0x14, 0xb8, 0x31, 0x23, 0xf5, 0x00, 0x61, 0x42, 0x27, 0xe3, 0xc4, 0x17, + 0x0c, 0x4d, 0xbd, 0xa3, 0xf7, 0x6a, 0xa3, 0xff, 0xeb, 0x6d, 0x5b, 0x7b, 0xde, 0xb6, 0x7f, 0x4e, + 0x99, 0x98, 0xa5, 0x81, 0x13, 0x62, 0xec, 0x86, 0xc8, 0x63, 0xe4, 0x87, 0x47, 0x9f, 0x4f, 0xe6, + 0xae, 0x58, 0x2d, 0x28, 0x77, 0xfe, 0xd1, 0xf0, 0x75, 0xdb, 0x6e, 0xad, 0xfc, 0x38, 0xfa, 0x6b, + 0x9f, 0x66, 0xd9, 0xde, 0x17, 0xb5, 0xf5, 0xf2, 0x9d, 0x71, 0x47, 0x6a, 0x0c, 0xee, 0xa3, 0x7c, + 0x0d, 0xe6, 0x27, 0x59, 0x33, 0x3a, 0xbb, 0xa6, 0xa9, 0x6a, 0x8e, 0x41, 0xb6, 0x57, 0x84, 0x1a, + 0x0f, 0xe4, 0x9b, 0x0f, 0x90, 0xfa, 0xd1, 0x78, 0x91, 0x60, 0xc6, 0x38, 0x43, 0xe0, 0x66, 0x49, + 0x36, 0x5d, 0x9e, 0xdd, 0x64, 0xaa, 0xa6, 0x0f, 0x81, 0xb6, 0xd7, 0x54, 0xec, 0xfa, 0x88, 0x8c, + 0x2e, 0x69, 0x00, 0xa5, 0xf9, 0x8f, 0xfb, 0x31, 0xa6, 0x20, 0xcc, 0x72, 0x47, 0xef, 0x95, 0xbd, + 0xba, 0x82, 0x43, 0xc9, 0x8c, 0xdf, 0xa4, 0x19, 0x62, 0x14, 0xd1, 0x50, 0x14, 0xde, 0x67, 0xe9, + 0x7d, 0x3d, 0xf2, 0x83, 0xda, 0x25, 0x8d, 0xfc, 0x36, 0x0b, 0xaf, 0xa2, 0xf2, 0x14, 0x2c, 0xa4, + 0x20, 0x4d, 0xa0, 0x90, 0xaa, 0x4a, 0x52, 0x50, 0x49, 0xa3, 0xe1, 0x7a, 0x67, 0xe9, 0x9b, 0x9d, + 0xa5, 0xbf, 0xec, 0x2c, 0xfd, 0x71, 0x6f, 0x69, 0x9b, 0xbd, 0xa5, 0x3d, 0xed, 0x2d, 0xed, 0xf6, + 0xd7, 0xc9, 0x49, 0xe4, 0x9f, 0x88, 0x7e, 0xe4, 0x07, 0xdc, 0x95, 0xf3, 0xb5, 0x54, 0x13, 0x26, + 0x8f, 0x23, 0xa8, 0xc8, 0x01, 0xfa, 0xf3, 0x1e, 0x00, 0x00, 0xff, 0xff, 0xc9, 0x55, 0x16, 0x32, + 0x7b, 0x02, 0x00, 0x00, } func (m *MintIncentiveTokens) Marshal() (dAtA []byte, err error) { @@ -558,4 +559,4 @@ var ( ErrInvalidLengthEvent = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowEvent = fmt.Errorf("proto: integer overflow") ErrUnexpectedEndOfGroupEvent = fmt.Errorf("proto: unexpected end of group") -) \ No newline at end of file +) diff --git a/x/mint/types/genesis.pb.go b/x/mint/types/genesis.pb.go index 7a46bbf2..cc8f15a2 100644 --- a/x/mint/types/genesis.pb.go +++ b/x/mint/types/genesis.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: cosmos/mint/v1beta1/genesis.proto +// source: xion/mint/v1/genesis.proto package types @@ -36,7 +36,7 @@ func (m *GenesisState) Reset() { *m = GenesisState{} } func (m *GenesisState) String() string { return proto.CompactTextString(m) } func (*GenesisState) ProtoMessage() {} func (*GenesisState) Descriptor() ([]byte, []int) { - return fileDescriptor_0e215eb1d09cd648, []int{0} + return fileDescriptor_5e073f67b8a7b0c3, []int{0} } func (m *GenesisState) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -80,28 +80,28 @@ func (m *GenesisState) GetParams() Params { } func init() { - proto.RegisterType((*GenesisState)(nil), "cosmos.mint.v1beta1.GenesisState") + proto.RegisterType((*GenesisState)(nil), "xion.mint.v1.GenesisState") } -func init() { proto.RegisterFile("cosmos/mint/v1beta1/genesis.proto", fileDescriptor_0e215eb1d09cd648) } +func init() { proto.RegisterFile("xion/mint/v1/genesis.proto", fileDescriptor_5e073f67b8a7b0c3) } -var fileDescriptor_0e215eb1d09cd648 = []byte{ - // 234 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x4c, 0xce, 0x2f, 0xce, - 0xcd, 0x2f, 0xd6, 0xcf, 0xcd, 0xcc, 0x2b, 0xd1, 0x2f, 0x33, 0x4c, 0x4a, 0x2d, 0x49, 0x34, 0xd4, - 0x4f, 0x4f, 0xcd, 0x4b, 0x2d, 0xce, 0x2c, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x86, - 0x28, 0xd1, 0x03, 0x29, 0xd1, 0x83, 0x2a, 0x91, 0x12, 0x49, 0xcf, 0x4f, 0xcf, 0x07, 0xcb, 0xeb, - 0x83, 0x58, 0x10, 0xa5, 0x52, 0x72, 0xd8, 0x4c, 0x03, 0xeb, 0x83, 0xc8, 0x0b, 0x26, 0xe6, 0x66, - 0xe6, 0xe5, 0xeb, 0x83, 0x49, 0x88, 0x90, 0x52, 0x1f, 0x23, 0x17, 0x8f, 0x3b, 0xc4, 0xbe, 0xe0, - 0x92, 0xc4, 0x92, 0x54, 0x21, 0x3b, 0x2e, 0x36, 0x90, 0x8e, 0xd4, 0x22, 0x09, 0x46, 0x05, 0x46, - 0x0d, 0x6e, 0x23, 0x69, 0x3d, 0x2c, 0xf6, 0xeb, 0xf9, 0x82, 0x95, 0x38, 0x71, 0x9e, 0xb8, 0x27, - 0xcf, 0xb0, 0xe2, 0xf9, 0x06, 0x2d, 0xc6, 0x20, 0xa8, 0x2e, 0x90, 0xfe, 0x82, 0xc4, 0xa2, 0xc4, - 0xdc, 0x62, 0x09, 0x26, 0x3c, 0xfa, 0x03, 0xc0, 0x4a, 0x50, 0xf4, 0x43, 0x74, 0x39, 0x39, 0x9f, - 0x78, 0x24, 0xc7, 0x78, 0xe1, 0x91, 0x1c, 0xe3, 0x83, 0x47, 0x72, 0x8c, 0x13, 0x1e, 0xcb, 0x31, - 0x5c, 0x78, 0x2c, 0xc7, 0x70, 0xe3, 0xb1, 0x1c, 0x43, 0x94, 0x66, 0x7a, 0x66, 0x49, 0x46, 0x69, - 0x92, 0x5e, 0x72, 0x7e, 0xae, 0x3e, 0xd4, 0xa3, 0x10, 0x4a, 0xb7, 0x38, 0x25, 0x5b, 0xbf, 0x02, - 0xe2, 0xeb, 0x92, 0xca, 0x82, 0xd4, 0xe2, 0x24, 0x36, 0xb0, 0xe7, 0x8c, 0x01, 0x01, 0x00, 0x00, - 0xff, 0xff, 0xf3, 0xd5, 0x6f, 0x47, 0x5f, 0x01, 0x00, 0x00, +var fileDescriptor_5e073f67b8a7b0c3 = []byte{ + // 230 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0xaa, 0xc8, 0xcc, 0xcf, + 0xd3, 0xcf, 0xcd, 0xcc, 0x2b, 0xd1, 0x2f, 0x33, 0xd4, 0x4f, 0x4f, 0xcd, 0x4b, 0x2d, 0xce, 0x2c, + 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x01, 0xc9, 0xe9, 0x81, 0xe4, 0xf4, 0xca, 0x0c, + 0xa5, 0x44, 0xd2, 0xf3, 0xd3, 0xf3, 0xc1, 0x12, 0xfa, 0x20, 0x16, 0x44, 0x8d, 0x94, 0x38, 0x8a, + 0x7e, 0xb0, 0x5a, 0x88, 0x84, 0x60, 0x62, 0x6e, 0x66, 0x5e, 0xbe, 0x3e, 0x98, 0x84, 0x08, 0x29, + 0x35, 0x30, 0x72, 0xf1, 0xb8, 0x43, 0x6c, 0x08, 0x2e, 0x49, 0x2c, 0x49, 0x15, 0x32, 0xe7, 0x62, + 0x03, 0xe9, 0x48, 0x2d, 0x92, 0x60, 0x54, 0x60, 0xd4, 0xe0, 0x36, 0x12, 0xd1, 0x43, 0xb6, 0x51, + 0xcf, 0x17, 0x2c, 0xe7, 0xc4, 0x79, 0xe2, 0x9e, 0x3c, 0xc3, 0x8a, 0xe7, 0x1b, 0xb4, 0x18, 0x83, + 0xa0, 0xca, 0x41, 0x1a, 0x0b, 0x12, 0x8b, 0x12, 0x73, 0x8b, 0x25, 0x98, 0xb0, 0x69, 0x0c, 0x00, + 0xcb, 0xa1, 0x68, 0x84, 0x28, 0x77, 0x72, 0x3c, 0xf1, 0x48, 0x8e, 0xf1, 0xc2, 0x23, 0x39, 0xc6, + 0x07, 0x8f, 0xe4, 0x18, 0x27, 0x3c, 0x96, 0x63, 0xb8, 0xf0, 0x58, 0x8e, 0xe1, 0xc6, 0x63, 0x39, + 0x86, 0x28, 0xf5, 0xf4, 0xcc, 0x92, 0x8c, 0xd2, 0x24, 0xbd, 0xe4, 0xfc, 0x5c, 0xfd, 0xa4, 0xd2, + 0xa2, 0xbc, 0x12, 0xdd, 0x9c, 0xc4, 0xa4, 0x62, 0x7d, 0xb0, 0xf7, 0x2a, 0x20, 0x1e, 0x2c, 0xa9, + 0x2c, 0x48, 0x2d, 0x4e, 0x62, 0x03, 0x7b, 0xc6, 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, 0x57, 0xcd, + 0x9d, 0x62, 0x3a, 0x01, 0x00, 0x00, } func (m *GenesisState) Marshal() (dAtA []byte, err error) { diff --git a/x/mint/types/mint.pb.go b/x/mint/types/mint.pb.go index 26633296..7ae7123f 100644 --- a/x/mint/types/mint.pb.go +++ b/x/mint/types/mint.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: cosmos/mint/v1beta1/mint.proto +// source: xion/mint/v1/mint.proto package types @@ -38,7 +38,7 @@ func (m *Minter) Reset() { *m = Minter{} } func (m *Minter) String() string { return proto.CompactTextString(m) } func (*Minter) ProtoMessage() {} func (*Minter) Descriptor() ([]byte, []int) { - return fileDescriptor_2df116d183c1e223, []int{0} + return fileDescriptor_caf2043dad411a0e, []int{0} } func (m *Minter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -86,7 +86,7 @@ type Params struct { func (m *Params) Reset() { *m = Params{} } func (*Params) ProtoMessage() {} func (*Params) Descriptor() ([]byte, []int) { - return fileDescriptor_2df116d183c1e223, []int{1} + return fileDescriptor_caf2043dad411a0e, []int{1} } func (m *Params) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -130,41 +130,41 @@ func (m *Params) GetBlocksPerYear() uint64 { } func init() { - proto.RegisterType((*Minter)(nil), "cosmos.mint.v1beta1.Minter") - proto.RegisterType((*Params)(nil), "cosmos.mint.v1beta1.Params") + proto.RegisterType((*Minter)(nil), "xion.mint.v1.Minter") + proto.RegisterType((*Params)(nil), "xion.mint.v1.Params") } -func init() { proto.RegisterFile("cosmos/mint/v1beta1/mint.proto", fileDescriptor_2df116d183c1e223) } +func init() { proto.RegisterFile("xion/mint/v1/mint.proto", fileDescriptor_caf2043dad411a0e) } -var fileDescriptor_2df116d183c1e223 = []byte{ - // 418 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x93, 0x4f, 0x8b, 0xd3, 0x40, - 0x18, 0xc6, 0x13, 0xad, 0x81, 0x8e, 0x2e, 0xba, 0xb3, 0x0a, 0x71, 0xc1, 0x74, 0xdd, 0xc3, 0xb2, - 0x0a, 0x9b, 0x50, 0xbc, 0x89, 0xa7, 0xb6, 0xd7, 0x42, 0xc9, 0xcd, 0x82, 0x84, 0x37, 0xc9, 0x98, - 0x0e, 0x4d, 0x66, 0xc2, 0xcc, 0xb4, 0xb4, 0x1f, 0x41, 0x4f, 0x1e, 0x3d, 0xfa, 0x11, 0x3c, 0xf8, - 0x21, 0x7a, 0xb3, 0x78, 0x12, 0x0f, 0x45, 0xda, 0x83, 0x5f, 0x43, 0x32, 0x13, 0x52, 0xf1, 0xb0, - 0xa7, 0x5c, 0xf2, 0xe7, 0x79, 0xde, 0xfc, 0x9e, 0x27, 0x21, 0x2f, 0xf2, 0x12, 0x2e, 0x0b, 0x2e, - 0x83, 0x82, 0x32, 0x15, 0x2c, 0xfb, 0x31, 0x51, 0xd0, 0xd7, 0x37, 0x7e, 0x29, 0xb8, 0xe2, 0xf8, - 0xcc, 0xf8, 0xbe, 0x96, 0x6a, 0xff, 0xfc, 0x71, 0xc6, 0x33, 0xae, 0xfd, 0xa0, 0xba, 0x32, 0xa3, - 0xe7, 0x4f, 0xcd, 0x68, 0x64, 0x8c, 0xfa, 0x39, 0x63, 0x9d, 0x42, 0x41, 0x19, 0x0f, 0xf4, 0xd1, - 0x48, 0x97, 0xdf, 0x6d, 0xe4, 0x8c, 0x29, 0x53, 0x44, 0xe0, 0x29, 0xea, 0x52, 0xf6, 0x3e, 0x07, - 0x45, 0x39, 0x73, 0xed, 0x0b, 0xfb, 0xba, 0x3b, 0x78, 0xb3, 0xd9, 0xf5, 0xac, 0x5f, 0xbb, 0xde, - 0x55, 0x46, 0xd5, 0x6c, 0x11, 0xfb, 0x09, 0x2f, 0x6a, 0x62, 0x7d, 0xba, 0x91, 0xe9, 0x3c, 0x50, - 0xeb, 0x92, 0x48, 0x7f, 0x44, 0x92, 0x1f, 0xdf, 0x6e, 0x50, 0x1d, 0x38, 0x22, 0x49, 0x78, 0xc4, - 0x61, 0x8a, 0x4e, 0x81, 0xb1, 0x05, 0xe4, 0x55, 0xad, 0x25, 0x95, 0x94, 0x33, 0xe9, 0xde, 0x69, - 0x21, 0xe3, 0x91, 0xc1, 0x4e, 0x1a, 0xea, 0xe5, 0x87, 0x0e, 0x72, 0x26, 0x20, 0xa0, 0x90, 0xf8, - 0x19, 0x42, 0xd5, 0x07, 0x8b, 0x52, 0xc2, 0x78, 0x61, 0x5e, 0x29, 0xec, 0x56, 0xca, 0xa8, 0x12, - 0x70, 0x89, 0x9e, 0x34, 0x0d, 0x23, 0x01, 0x8a, 0x44, 0xc9, 0x0c, 0x58, 0x46, 0x5a, 0x29, 0x76, - 0xd6, 0xa0, 0x43, 0x50, 0x64, 0xa8, 0xc1, 0x18, 0xd0, 0xc9, 0x31, 0xb1, 0x80, 0x95, 0x7b, 0xb7, - 0x85, 0xa4, 0x07, 0x0d, 0x72, 0x0c, 0xab, 0xff, 0x22, 0x28, 0x73, 0x3b, 0xed, 0x46, 0x50, 0x86, - 0xdf, 0xa1, 0xfb, 0x19, 0x87, 0x3c, 0x8a, 0x39, 0x4b, 0x49, 0xea, 0xde, 0x6b, 0x21, 0x00, 0x55, - 0xc0, 0x81, 0xe6, 0xe1, 0x2b, 0xf4, 0x30, 0xce, 0x79, 0x32, 0x97, 0x51, 0x49, 0x44, 0xb4, 0x26, - 0x20, 0x5c, 0xe7, 0xc2, 0xbe, 0xee, 0x84, 0x27, 0x46, 0x9e, 0x10, 0xf1, 0x96, 0x80, 0x78, 0xfd, - 0xfc, 0xf3, 0x97, 0x9e, 0xf5, 0xf1, 0xcf, 0xd7, 0x97, 0xee, 0x3f, 0x01, 0x2b, 0xb3, 0x42, 0xe6, - 0x07, 0x18, 0x0c, 0x37, 0x7b, 0xcf, 0xde, 0xee, 0x3d, 0xfb, 0xf7, 0xde, 0xb3, 0x3f, 0x1d, 0x3c, - 0x6b, 0x7b, 0xf0, 0xac, 0x9f, 0x07, 0xcf, 0x9a, 0xbe, 0xb8, 0xb5, 0x66, 0x4d, 0xd1, 0x6d, 0x63, - 0x47, 0x6f, 0xca, 0xab, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0xc2, 0x18, 0xb9, 0xae, 0xa4, 0x03, - 0x00, 0x00, +var fileDescriptor_caf2043dad411a0e = []byte{ + // 424 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x93, 0xc1, 0x8a, 0xd3, 0x40, + 0x1c, 0xc6, 0x13, 0xad, 0x81, 0x8e, 0xbb, 0xe8, 0x8e, 0x8a, 0x71, 0xc1, 0x74, 0xdd, 0xc3, 0xba, + 0x08, 0x4d, 0x58, 0xbc, 0x89, 0x17, 0x6b, 0xaf, 0x0b, 0x25, 0x37, 0x17, 0x24, 0xfc, 0x93, 0x8c, + 0xe9, 0xd0, 0x64, 0x26, 0xcc, 0x4c, 0x4b, 0xfa, 0x08, 0x7a, 0xf2, 0xe8, 0xd1, 0x47, 0xf0, 0xe0, + 0x43, 0xf4, 0x66, 0xf1, 0x24, 0x1e, 0x8a, 0xb4, 0x07, 0x5f, 0x43, 0x32, 0x13, 0xd2, 0xe2, 0x39, + 0x97, 0xfc, 0x93, 0xef, 0x0b, 0xbf, 0xef, 0x4b, 0x98, 0x3f, 0x7a, 0x5c, 0x51, 0xce, 0x82, 0x82, + 0x32, 0x15, 0x2c, 0xae, 0xf4, 0xf4, 0x4b, 0xc1, 0x15, 0xc7, 0x47, 0xb5, 0xe1, 0x6b, 0x61, 0x71, + 0x75, 0xfa, 0x30, 0xe3, 0x19, 0xd7, 0x46, 0x50, 0xdf, 0x99, 0x77, 0x4e, 0x9f, 0x24, 0x5c, 0x16, + 0x5c, 0x46, 0xc6, 0x30, 0x0f, 0x8d, 0x75, 0x02, 0x05, 0x65, 0x3c, 0xd0, 0x57, 0x23, 0x9d, 0xff, + 0xb0, 0x91, 0x73, 0x4d, 0x99, 0x22, 0x02, 0xdf, 0xa0, 0x3e, 0x65, 0x1f, 0x72, 0x50, 0x94, 0x33, + 0xd7, 0x3e, 0xb3, 0x2f, 0xfb, 0xa3, 0xd7, 0xab, 0xcd, 0xc0, 0xfa, 0xbd, 0x19, 0x5c, 0x64, 0x54, + 0x4d, 0xe7, 0xb1, 0x9f, 0xf0, 0xa2, 0x21, 0x36, 0x63, 0x28, 0xd3, 0x59, 0xa0, 0x96, 0x25, 0x91, + 0xfe, 0x98, 0x24, 0x3f, 0xbf, 0x0f, 0x51, 0x13, 0x38, 0x26, 0x49, 0xb8, 0xc7, 0x61, 0x8a, 0x4e, + 0x80, 0xb1, 0x39, 0xe4, 0x75, 0xad, 0x05, 0x95, 0x94, 0x33, 0xe9, 0xde, 0xea, 0x20, 0xe3, 0xbe, + 0xc1, 0x4e, 0x5a, 0xea, 0xf9, 0xc7, 0x1e, 0x72, 0x26, 0x20, 0xa0, 0x90, 0xf8, 0x29, 0x42, 0xf5, + 0xbf, 0x8a, 0x52, 0xc2, 0x78, 0x61, 0x3e, 0x29, 0xec, 0xd7, 0xca, 0xb8, 0x16, 0x70, 0x89, 0x1e, + 0xb5, 0x0d, 0x23, 0x01, 0x8a, 0x44, 0xc9, 0x14, 0x58, 0x46, 0x3a, 0x29, 0xf6, 0xa0, 0x45, 0x87, + 0xa0, 0xc8, 0x5b, 0x0d, 0xc6, 0x80, 0x8e, 0xf7, 0x89, 0x05, 0x54, 0xee, 0xed, 0x0e, 0x92, 0x8e, + 0x5a, 0xe4, 0x35, 0x54, 0xff, 0x45, 0x50, 0xe6, 0xf6, 0xba, 0x8d, 0xa0, 0x0c, 0xbf, 0x47, 0x77, + 0x33, 0x0e, 0x79, 0x14, 0x73, 0x96, 0x92, 0xd4, 0xbd, 0xd3, 0x41, 0x00, 0xaa, 0x81, 0x23, 0xcd, + 0xc3, 0x17, 0xe8, 0x5e, 0x9c, 0xf3, 0x64, 0x26, 0xa3, 0x92, 0x88, 0x68, 0x49, 0x40, 0xb8, 0xce, + 0x99, 0x7d, 0xd9, 0x0b, 0x8f, 0x8d, 0x3c, 0x21, 0xe2, 0x1d, 0x01, 0xf1, 0xea, 0xd9, 0x97, 0xaf, + 0x03, 0xeb, 0xd3, 0xdf, 0x6f, 0x2f, 0xdc, 0x83, 0x80, 0xca, 0xac, 0x8d, 0x39, 0x00, 0xa3, 0x37, + 0xab, 0xad, 0x67, 0xaf, 0xb7, 0x9e, 0xfd, 0x67, 0xeb, 0xd9, 0x9f, 0x77, 0x9e, 0xb5, 0xde, 0x79, + 0xd6, 0xaf, 0x9d, 0x67, 0xdd, 0x3c, 0x3f, 0xa8, 0x19, 0xcf, 0x05, 0x53, 0xc3, 0x1c, 0x62, 0x19, + 0xe8, 0xc5, 0x6b, 0x18, 0xba, 0x6b, 0xec, 0xe8, 0x3d, 0x79, 0xf9, 0x2f, 0x00, 0x00, 0xff, 0xff, + 0x9d, 0x42, 0x30, 0x5b, 0x94, 0x03, 0x00, 0x00, } func (m *Minter) Marshal() (dAtA []byte, err error) { diff --git a/x/mint/types/query.pb.go b/x/mint/types/query.pb.go index fd255a02..641e22e3 100644 --- a/x/mint/types/query.pb.go +++ b/x/mint/types/query.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: cosmos/mint/v1beta1/query.proto +// source: xion/mint/v1/query.proto package types @@ -39,7 +39,7 @@ func (m *QueryParamsRequest) Reset() { *m = QueryParamsRequest{} } func (m *QueryParamsRequest) String() string { return proto.CompactTextString(m) } func (*QueryParamsRequest) ProtoMessage() {} func (*QueryParamsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d0a1e393be338aea, []int{0} + return fileDescriptor_cb90e843d441617e, []int{0} } func (m *QueryParamsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -78,7 +78,7 @@ func (m *QueryParamsResponse) Reset() { *m = QueryParamsResponse{} } func (m *QueryParamsResponse) String() string { return proto.CompactTextString(m) } func (*QueryParamsResponse) ProtoMessage() {} func (*QueryParamsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d0a1e393be338aea, []int{1} + return fileDescriptor_cb90e843d441617e, []int{1} } func (m *QueryParamsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -122,7 +122,7 @@ func (m *QueryInflationRequest) Reset() { *m = QueryInflationRequest{} } func (m *QueryInflationRequest) String() string { return proto.CompactTextString(m) } func (*QueryInflationRequest) ProtoMessage() {} func (*QueryInflationRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d0a1e393be338aea, []int{2} + return fileDescriptor_cb90e843d441617e, []int{2} } func (m *QueryInflationRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -162,7 +162,7 @@ func (m *QueryInflationResponse) Reset() { *m = QueryInflationResponse{} func (m *QueryInflationResponse) String() string { return proto.CompactTextString(m) } func (*QueryInflationResponse) ProtoMessage() {} func (*QueryInflationResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d0a1e393be338aea, []int{3} + return fileDescriptor_cb90e843d441617e, []int{3} } func (m *QueryInflationResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -200,7 +200,7 @@ func (m *QueryAnnualProvisionsRequest) Reset() { *m = QueryAnnualProvisi func (m *QueryAnnualProvisionsRequest) String() string { return proto.CompactTextString(m) } func (*QueryAnnualProvisionsRequest) ProtoMessage() {} func (*QueryAnnualProvisionsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d0a1e393be338aea, []int{4} + return fileDescriptor_cb90e843d441617e, []int{4} } func (m *QueryAnnualProvisionsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -240,7 +240,7 @@ func (m *QueryAnnualProvisionsResponse) Reset() { *m = QueryAnnualProvis func (m *QueryAnnualProvisionsResponse) String() string { return proto.CompactTextString(m) } func (*QueryAnnualProvisionsResponse) ProtoMessage() {} func (*QueryAnnualProvisionsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d0a1e393be338aea, []int{5} + return fileDescriptor_cb90e843d441617e, []int{5} } func (m *QueryAnnualProvisionsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -270,48 +270,48 @@ func (m *QueryAnnualProvisionsResponse) XXX_DiscardUnknown() { var xxx_messageInfo_QueryAnnualProvisionsResponse proto.InternalMessageInfo func init() { - proto.RegisterType((*QueryParamsRequest)(nil), "cosmos.mint.v1beta1.QueryParamsRequest") - proto.RegisterType((*QueryParamsResponse)(nil), "cosmos.mint.v1beta1.QueryParamsResponse") - proto.RegisterType((*QueryInflationRequest)(nil), "cosmos.mint.v1beta1.QueryInflationRequest") - proto.RegisterType((*QueryInflationResponse)(nil), "cosmos.mint.v1beta1.QueryInflationResponse") - proto.RegisterType((*QueryAnnualProvisionsRequest)(nil), "cosmos.mint.v1beta1.QueryAnnualProvisionsRequest") - proto.RegisterType((*QueryAnnualProvisionsResponse)(nil), "cosmos.mint.v1beta1.QueryAnnualProvisionsResponse") -} - -func init() { proto.RegisterFile("cosmos/mint/v1beta1/query.proto", fileDescriptor_d0a1e393be338aea) } - -var fileDescriptor_d0a1e393be338aea = []byte{ - // 465 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4f, 0xce, 0x2f, 0xce, - 0xcd, 0x2f, 0xd6, 0xcf, 0xcd, 0xcc, 0x2b, 0xd1, 0x2f, 0x33, 0x4c, 0x4a, 0x2d, 0x49, 0x34, 0xd4, - 0x2f, 0x2c, 0x4d, 0x2d, 0xaa, 0xd4, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x86, 0x28, 0xd0, - 0x03, 0x29, 0xd0, 0x83, 0x2a, 0x90, 0x12, 0x49, 0xcf, 0x4f, 0xcf, 0x07, 0xcb, 0xeb, 0x83, 0x58, - 0x10, 0xa5, 0x52, 0x32, 0xe9, 0xf9, 0xf9, 0xe9, 0x39, 0xa9, 0xfa, 0x89, 0x05, 0x99, 0xfa, 0x89, - 0x79, 0x79, 0xf9, 0x25, 0x89, 0x25, 0x99, 0xf9, 0x79, 0xc5, 0x50, 0x59, 0x39, 0x6c, 0x36, 0x81, - 0x4d, 0x85, 0xc8, 0x0b, 0x26, 0xe6, 0x66, 0xe6, 0xe5, 0xeb, 0x83, 0x49, 0x88, 0x90, 0x92, 0x08, - 0x97, 0x50, 0x20, 0xc8, 0x29, 0x01, 0x89, 0x45, 0x89, 0xb9, 0xc5, 0x41, 0xa9, 0x85, 0xa5, 0xa9, - 0xc5, 0x25, 0x4a, 0xa1, 0x5c, 0xc2, 0x28, 0xa2, 0xc5, 0x05, 0xf9, 0x79, 0xc5, 0xa9, 0x42, 0x76, - 0x5c, 0x6c, 0x05, 0x60, 0x11, 0x09, 0x46, 0x05, 0x46, 0x0d, 0x6e, 0x23, 0x69, 0x3d, 0x2c, 0x2e, - 0xd7, 0x83, 0x68, 0x72, 0xe2, 0x3c, 0x71, 0x4f, 0x9e, 0x61, 0xc5, 0xf3, 0x0d, 0x5a, 0x8c, 0x41, - 0x50, 0x5d, 0x4a, 0xe2, 0x5c, 0xa2, 0x60, 0x63, 0x3d, 0xf3, 0xd2, 0x72, 0xc0, 0x0e, 0x87, 0xd9, - 0x97, 0xcd, 0x25, 0x86, 0x2e, 0x01, 0xb5, 0x32, 0x90, 0x8b, 0x33, 0x13, 0x26, 0x08, 0xb6, 0x95, - 0xc7, 0xc9, 0x18, 0x64, 0xf0, 0xad, 0x7b, 0xf2, 0x6a, 0xe9, 0x99, 0x25, 0x19, 0xa5, 0x49, 0x7a, - 0xc9, 0xf9, 0xb9, 0xfa, 0x50, 0x8f, 0x43, 0x28, 0xdd, 0xe2, 0x94, 0x6c, 0xfd, 0x92, 0xca, 0x82, - 0xd4, 0x62, 0x3d, 0x97, 0xd4, 0x64, 0x88, 0x13, 0x10, 0xa6, 0x28, 0xc9, 0x71, 0xc9, 0x80, 0x2d, - 0x73, 0xcc, 0xcb, 0x2b, 0x4d, 0xcc, 0x09, 0x28, 0xca, 0x2f, 0xcb, 0x2c, 0x06, 0x05, 0x22, 0xcc, - 0x31, 0x8d, 0x8c, 0x5c, 0xb2, 0x38, 0x14, 0x40, 0x1d, 0x95, 0xc0, 0x25, 0x98, 0x08, 0x96, 0x8b, - 0x2f, 0x80, 0x4b, 0x52, 0xe2, 0x38, 0x81, 0x44, 0x34, 0x9b, 0x8c, 0x8e, 0x32, 0x73, 0xb1, 0x82, - 0xdd, 0x20, 0xd4, 0xc0, 0xc8, 0xc5, 0x06, 0x09, 0x51, 0x21, 0x75, 0xac, 0xc1, 0x8d, 0x19, 0x7d, - 0x52, 0x1a, 0x84, 0x15, 0x42, 0x7c, 0xa2, 0xa4, 0xdc, 0x74, 0xf9, 0xc9, 0x64, 0x26, 0x59, 0x21, - 0x69, 0x7d, 0x6c, 0x49, 0x07, 0x12, 0x6d, 0x42, 0x3d, 0x8c, 0x5c, 0x9c, 0xf0, 0x98, 0x11, 0xd2, - 0xc2, 0x6d, 0x38, 0x7a, 0xbc, 0x4a, 0x69, 0x13, 0xa5, 0x16, 0xea, 0x16, 0x35, 0xb0, 0x5b, 0x14, - 0x84, 0xe4, 0xb0, 0xba, 0x05, 0x1e, 0x7f, 0x42, 0x2b, 0x19, 0xb9, 0x04, 0xd0, 0xa3, 0x46, 0xc8, - 0x10, 0xb7, 0x4d, 0x38, 0xe2, 0x59, 0xca, 0x88, 0x14, 0x2d, 0x50, 0x37, 0xea, 0x81, 0xdd, 0xa8, - 0x21, 0xa4, 0x86, 0xd5, 0x8d, 0x18, 0x89, 0xc2, 0xc9, 0xf9, 0xc4, 0x23, 0x39, 0xc6, 0x0b, 0x8f, - 0xe4, 0x18, 0x1f, 0x3c, 0x92, 0x63, 0x9c, 0xf0, 0x58, 0x8e, 0xe1, 0xc2, 0x63, 0x39, 0x86, 0x1b, - 0x8f, 0xe5, 0x18, 0xa2, 0x34, 0xf1, 0x26, 0x90, 0x0a, 0x88, 0xc1, 0xe0, 0x74, 0x92, 0xc4, 0x06, - 0xce, 0xaa, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x39, 0xdf, 0xd1, 0xc0, 0x49, 0x04, 0x00, - 0x00, + proto.RegisterType((*QueryParamsRequest)(nil), "xion.mint.v1.QueryParamsRequest") + proto.RegisterType((*QueryParamsResponse)(nil), "xion.mint.v1.QueryParamsResponse") + proto.RegisterType((*QueryInflationRequest)(nil), "xion.mint.v1.QueryInflationRequest") + proto.RegisterType((*QueryInflationResponse)(nil), "xion.mint.v1.QueryInflationResponse") + proto.RegisterType((*QueryAnnualProvisionsRequest)(nil), "xion.mint.v1.QueryAnnualProvisionsRequest") + proto.RegisterType((*QueryAnnualProvisionsResponse)(nil), "xion.mint.v1.QueryAnnualProvisionsResponse") +} + +func init() { proto.RegisterFile("xion/mint/v1/query.proto", fileDescriptor_cb90e843d441617e) } + +var fileDescriptor_cb90e843d441617e = []byte{ + // 471 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x53, 0x31, 0x6f, 0xd3, 0x40, + 0x18, 0xf5, 0x81, 0x88, 0x94, 0xa3, 0x43, 0x7b, 0x04, 0x52, 0x4c, 0x6b, 0xb7, 0x2e, 0xa2, 0xa8, + 0xa8, 0x3e, 0xa5, 0x1d, 0x98, 0x1b, 0xb1, 0xb0, 0xa0, 0xb6, 0x23, 0x0b, 0x9c, 0xc3, 0x61, 0x4e, + 0xb5, 0xef, 0x5c, 0xdf, 0x39, 0xb4, 0x23, 0xac, 0x2c, 0x48, 0xf0, 0x23, 0x18, 0xf9, 0x19, 0x1d, + 0x2b, 0xb1, 0x20, 0x86, 0x0a, 0x25, 0x48, 0xfc, 0x0d, 0xe4, 0xbb, 0x73, 0xa8, 0xdd, 0x24, 0x42, + 0x62, 0xb1, 0xad, 0xef, 0x3d, 0xbd, 0xf7, 0xf4, 0xbd, 0xcf, 0x70, 0xf9, 0x84, 0x09, 0x8e, 0x53, + 0xc6, 0x15, 0x1e, 0xf6, 0xf0, 0x71, 0x41, 0xf3, 0xd3, 0x30, 0xcb, 0x85, 0x12, 0x68, 0xa1, 0x44, + 0xc2, 0x12, 0x09, 0x87, 0x3d, 0xb7, 0x13, 0x8b, 0x58, 0x68, 0x00, 0x97, 0x5f, 0x86, 0xe3, 0xae, + 0xc4, 0x42, 0xc4, 0x09, 0xc5, 0x24, 0x63, 0x98, 0x70, 0x2e, 0x14, 0x51, 0x4c, 0x70, 0x69, 0xd1, + 0x6e, 0x4d, 0x5b, 0x2b, 0x19, 0x60, 0x89, 0xa4, 0x8c, 0x0b, 0xac, 0x9f, 0x66, 0x14, 0x74, 0x20, + 0x3a, 0x28, 0xcd, 0xf7, 0x49, 0x4e, 0x52, 0x79, 0x48, 0x8f, 0x0b, 0x2a, 0x55, 0xf0, 0x0c, 0xde, + 0xaa, 0x4d, 0x65, 0x26, 0xb8, 0xa4, 0xe8, 0x31, 0x6c, 0x65, 0x7a, 0xb2, 0x0c, 0xd6, 0xc0, 0xc3, + 0x9b, 0x3b, 0x9d, 0xf0, 0x72, 0xd6, 0xd0, 0xb0, 0xfb, 0xed, 0xb3, 0x0b, 0xdf, 0xf9, 0xf2, 0xfb, + 0xeb, 0x16, 0x38, 0xb4, 0xf4, 0xa0, 0x0b, 0x6f, 0x6b, 0xbd, 0xa7, 0xfc, 0x75, 0xa2, 0xa3, 0x56, + 0x46, 0x47, 0xf0, 0x4e, 0x13, 0xb0, 0x5e, 0x07, 0xb0, 0xcd, 0xaa, 0xa1, 0xb6, 0x5b, 0xe8, 0xef, + 0x96, 0xc2, 0x3f, 0x2e, 0xfc, 0x07, 0x31, 0x53, 0x6f, 0x8a, 0x28, 0x1c, 0x88, 0x14, 0x0f, 0x84, + 0x4c, 0x85, 0xb4, 0xaf, 0x6d, 0xf9, 0xea, 0x08, 0xab, 0xd3, 0x8c, 0xca, 0xf0, 0x09, 0x1d, 0x98, + 0x08, 0x7f, 0x55, 0x02, 0x0f, 0xae, 0x68, 0xb3, 0x3d, 0xce, 0x0b, 0x92, 0xec, 0xe7, 0x62, 0xc8, + 0x64, 0xb9, 0xb6, 0x2a, 0xcc, 0x3b, 0x00, 0x57, 0x67, 0x10, 0x6c, 0xa8, 0x97, 0x70, 0x89, 0x68, + 0xec, 0x45, 0x36, 0x01, 0xff, 0x27, 0xdc, 0x22, 0x69, 0x38, 0xed, 0x7c, 0xb8, 0x0e, 0x6f, 0xe8, + 0x0c, 0x28, 0x87, 0x2d, 0xb3, 0x50, 0xb4, 0x56, 0x5f, 0xf3, 0xd5, 0xbe, 0xdc, 0xf5, 0x39, 0x0c, + 0x13, 0x3d, 0xd8, 0x78, 0xff, 0xed, 0xd7, 0xa7, 0x6b, 0xab, 0xe8, 0x5e, 0x95, 0xca, 0xde, 0x47, + 0x44, 0x15, 0xe9, 0x61, 0xd3, 0x13, 0x7a, 0x0b, 0xdb, 0x93, 0x26, 0xd0, 0xc6, 0x14, 0xd1, 0x66, + 0x81, 0xee, 0xfd, 0xf9, 0x24, 0x6b, 0xee, 0x6b, 0xf3, 0xbb, 0xa8, 0x8b, 0x6b, 0xa7, 0x39, 0xa9, + 0x06, 0x7d, 0x06, 0x70, 0xb1, 0xb9, 0x75, 0xb4, 0x35, 0x45, 0x7b, 0x46, 0x77, 0xee, 0xa3, 0x7f, + 0xe2, 0xda, 0x38, 0x9b, 0x3a, 0xce, 0x3a, 0xf2, 0xeb, 0x71, 0xae, 0x54, 0xdb, 0xdf, 0x3b, 0x1b, + 0x79, 0xe0, 0x7c, 0xe4, 0x81, 0x9f, 0x23, 0x0f, 0x7c, 0x1c, 0x7b, 0xce, 0xf9, 0xd8, 0x73, 0xbe, + 0x8f, 0x3d, 0xe7, 0xf9, 0xe6, 0xa5, 0x9a, 0xa3, 0x22, 0xe7, 0x6a, 0x3b, 0x21, 0x91, 0x34, 0x7a, + 0x27, 0x46, 0x51, 0x77, 0x1d, 0xb5, 0xf4, 0x7f, 0xb6, 0xfb, 0x27, 0x00, 0x00, 0xff, 0xff, 0xd2, + 0x00, 0x23, 0x36, 0xf1, 0x03, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -344,7 +344,7 @@ func NewQueryClient(cc grpc1.ClientConn) QueryClient { func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) { out := new(QueryParamsResponse) - err := c.cc.Invoke(ctx, "/cosmos.mint.v1beta1.Query/Params", in, out, opts...) + err := c.cc.Invoke(ctx, "/xion.mint.v1.Query/Params", in, out, opts...) if err != nil { return nil, err } @@ -353,7 +353,7 @@ func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts . func (c *queryClient) Inflation(ctx context.Context, in *QueryInflationRequest, opts ...grpc.CallOption) (*QueryInflationResponse, error) { out := new(QueryInflationResponse) - err := c.cc.Invoke(ctx, "/cosmos.mint.v1beta1.Query/Inflation", in, out, opts...) + err := c.cc.Invoke(ctx, "/xion.mint.v1.Query/Inflation", in, out, opts...) if err != nil { return nil, err } @@ -362,7 +362,7 @@ func (c *queryClient) Inflation(ctx context.Context, in *QueryInflationRequest, func (c *queryClient) AnnualProvisions(ctx context.Context, in *QueryAnnualProvisionsRequest, opts ...grpc.CallOption) (*QueryAnnualProvisionsResponse, error) { out := new(QueryAnnualProvisionsResponse) - err := c.cc.Invoke(ctx, "/cosmos.mint.v1beta1.Query/AnnualProvisions", in, out, opts...) + err := c.cc.Invoke(ctx, "/xion.mint.v1.Query/AnnualProvisions", in, out, opts...) if err != nil { return nil, err } @@ -407,7 +407,7 @@ func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interf } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/cosmos.mint.v1beta1.Query/Params", + FullMethod: "/xion.mint.v1.Query/Params", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest)) @@ -425,7 +425,7 @@ func _Query_Inflation_Handler(srv interface{}, ctx context.Context, dec func(int } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/cosmos.mint.v1beta1.Query/Inflation", + FullMethod: "/xion.mint.v1.Query/Inflation", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(QueryServer).Inflation(ctx, req.(*QueryInflationRequest)) @@ -443,7 +443,7 @@ func _Query_AnnualProvisions_Handler(srv interface{}, ctx context.Context, dec f } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/cosmos.mint.v1beta1.Query/AnnualProvisions", + FullMethod: "/xion.mint.v1.Query/AnnualProvisions", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(QueryServer).AnnualProvisions(ctx, req.(*QueryAnnualProvisionsRequest)) @@ -452,7 +452,7 @@ func _Query_AnnualProvisions_Handler(srv interface{}, ctx context.Context, dec f } var _Query_serviceDesc = grpc.ServiceDesc{ - ServiceName: "cosmos.mint.v1beta1.Query", + ServiceName: "xion.mint.v1.Query", HandlerType: (*QueryServer)(nil), Methods: []grpc.MethodDesc{ { @@ -469,7 +469,7 @@ var _Query_serviceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: "cosmos/mint/v1beta1/query.proto", + Metadata: "xion/mint/v1/query.proto", } func (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) { diff --git a/x/mint/types/query.pb.gw.go b/x/mint/types/query.pb.gw.go index 7ed551a6..13fc5293 100644 --- a/x/mint/types/query.pb.gw.go +++ b/x/mint/types/query.pb.gw.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: cosmos/mint/v1beta1/query.proto +// source: xion/mint/v1/query.proto /* Package types is a reverse proxy. @@ -269,9 +269,9 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie var ( pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"cosmos", "mint", "v1beta1", "params"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_Inflation_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"cosmos", "mint", "v1beta1", "inflation"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_Inflation_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"xion", "mint", "v1", "inflation"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_AnnualProvisions_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"cosmos", "mint", "v1beta1", "annual_provisions"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_AnnualProvisions_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"xion", "mint", "v1", "annual_provisions"}, "", runtime.AssumeColonVerbOpt(false))) ) var ( diff --git a/x/mint/types/tx.pb.go b/x/mint/types/tx.pb.go index e4a8f909..d50ec3d9 100644 --- a/x/mint/types/tx.pb.go +++ b/x/mint/types/tx.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: cosmos/mint/v1beta1/tx.proto +// source: xion/mint/v1/tx.proto package types @@ -35,7 +35,8 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package // // Since: cosmos-sdk 0.47 type MsgUpdateParams struct { - // authority is the address that controls the module (defaults to x/gov unless overwritten). + // authority is the address that controls the module (defaults to x/gov unless + // overwritten). Authority string `protobuf:"bytes,1,opt,name=authority,proto3" json:"authority,omitempty"` // params defines the x/mint parameters to update. // @@ -47,7 +48,7 @@ func (m *MsgUpdateParams) Reset() { *m = MsgUpdateParams{} } func (m *MsgUpdateParams) String() string { return proto.CompactTextString(m) } func (*MsgUpdateParams) ProtoMessage() {} func (*MsgUpdateParams) Descriptor() ([]byte, []int) { - return fileDescriptor_a0d933a8bf5e188a, []int{0} + return fileDescriptor_b2853045c47be63f, []int{0} } func (m *MsgUpdateParams) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -101,7 +102,7 @@ func (m *MsgUpdateParamsResponse) Reset() { *m = MsgUpdateParamsResponse func (m *MsgUpdateParamsResponse) String() string { return proto.CompactTextString(m) } func (*MsgUpdateParamsResponse) ProtoMessage() {} func (*MsgUpdateParamsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_a0d933a8bf5e188a, []int{1} + return fileDescriptor_b2853045c47be63f, []int{1} } func (m *MsgUpdateParamsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -131,36 +132,36 @@ func (m *MsgUpdateParamsResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgUpdateParamsResponse proto.InternalMessageInfo func init() { - proto.RegisterType((*MsgUpdateParams)(nil), "cosmos.mint.v1beta1.MsgUpdateParams") - proto.RegisterType((*MsgUpdateParamsResponse)(nil), "cosmos.mint.v1beta1.MsgUpdateParamsResponse") -} - -func init() { proto.RegisterFile("cosmos/mint/v1beta1/tx.proto", fileDescriptor_a0d933a8bf5e188a) } - -var fileDescriptor_a0d933a8bf5e188a = []byte{ - // 343 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x49, 0xce, 0x2f, 0xce, - 0xcd, 0x2f, 0xd6, 0xcf, 0xcd, 0xcc, 0x2b, 0xd1, 0x2f, 0x33, 0x4c, 0x4a, 0x2d, 0x49, 0x34, 0xd4, - 0x2f, 0xa9, 0xd0, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x86, 0xc8, 0xea, 0x81, 0x64, 0xf5, - 0xa0, 0xb2, 0x52, 0xe2, 0x30, 0x2d, 0xc5, 0xe9, 0xfa, 0x65, 0x86, 0x20, 0x0a, 0xa2, 0x5a, 0x4a, - 0x30, 0x31, 0x37, 0x33, 0x2f, 0x5f, 0x1f, 0x4c, 0x42, 0x85, 0xe4, 0xb0, 0x19, 0x0f, 0x36, 0x0d, - 0x22, 0x2f, 0x92, 0x9e, 0x9f, 0x9e, 0x0f, 0x66, 0xea, 0x83, 0x58, 0x50, 0x51, 0x49, 0x88, 0xae, - 0x78, 0x88, 0x04, 0xd4, 0x0d, 0x60, 0x8e, 0xd2, 0x7e, 0x46, 0x2e, 0x7e, 0xdf, 0xe2, 0xf4, 0xd0, - 0x82, 0x94, 0xc4, 0x92, 0xd4, 0x80, 0xc4, 0xa2, 0xc4, 0xdc, 0x62, 0x21, 0x33, 0x2e, 0xce, 0xc4, - 0xd2, 0x92, 0x8c, 0xfc, 0xa2, 0xcc, 0x92, 0x4a, 0x09, 0x46, 0x05, 0x46, 0x0d, 0x4e, 0x27, 0x89, - 0x4b, 0x5b, 0x74, 0x45, 0xa0, 0x1a, 0x1d, 0x53, 0x52, 0x8a, 0x52, 0x8b, 0x8b, 0x83, 0x4b, 0x8a, - 0x32, 0xf3, 0xd2, 0x83, 0x10, 0x4a, 0x85, 0xec, 0xb8, 0xd8, 0x0a, 0xc0, 0x26, 0x48, 0x30, 0x29, - 0x30, 0x6a, 0x70, 0x1b, 0x49, 0xeb, 0x61, 0xf1, 0xae, 0x1e, 0xc4, 0x12, 0x27, 0xce, 0x13, 0xf7, - 0xe4, 0x19, 0x56, 0x3c, 0xdf, 0xa0, 0xc5, 0x18, 0x04, 0xd5, 0x65, 0x65, 0xd2, 0xf4, 0x7c, 0x83, - 0x16, 0xc2, 0xbc, 0xae, 0xe7, 0x1b, 0xb4, 0x14, 0x21, 0x26, 0xe8, 0x16, 0xa7, 0x64, 0xeb, 0x57, - 0x40, 0x7c, 0x8d, 0xe6, 0x5a, 0x25, 0x49, 0x2e, 0x71, 0x34, 0xa1, 0xa0, 0xd4, 0xe2, 0x82, 0xfc, - 0xbc, 0xe2, 0x54, 0xa3, 0x02, 0x2e, 0x66, 0xdf, 0xe2, 0x74, 0xa1, 0x24, 0x2e, 0x1e, 0x14, 0xff, - 0xa9, 0x60, 0x75, 0x17, 0x9a, 0x21, 0x52, 0x3a, 0xc4, 0xa8, 0x82, 0x59, 0x25, 0xc5, 0xda, 0x00, - 0xf2, 0x8a, 0x93, 0xf3, 0x89, 0x47, 0x72, 0x8c, 0x17, 0x1e, 0xc9, 0x31, 0x3e, 0x78, 0x24, 0xc7, - 0x38, 0xe1, 0xb1, 0x1c, 0xc3, 0x85, 0xc7, 0x72, 0x0c, 0x37, 0x1e, 0xcb, 0x31, 0x44, 0x69, 0xa6, - 0x67, 0x96, 0x64, 0x94, 0x26, 0xe9, 0x25, 0xe7, 0xe7, 0x42, 0x63, 0x40, 0x1f, 0xd3, 0x6f, 0x25, - 0x95, 0x05, 0xa9, 0xc5, 0x49, 0x6c, 0xe0, 0xa8, 0x31, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, 0x13, - 0x9e, 0x4f, 0xda, 0x4c, 0x02, 0x00, 0x00, + proto.RegisterType((*MsgUpdateParams)(nil), "xion.mint.v1.MsgUpdateParams") + proto.RegisterType((*MsgUpdateParamsResponse)(nil), "xion.mint.v1.MsgUpdateParamsResponse") +} + +func init() { proto.RegisterFile("xion/mint/v1/tx.proto", fileDescriptor_b2853045c47be63f) } + +var fileDescriptor_b2853045c47be63f = []byte{ + // 345 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0xad, 0xc8, 0xcc, 0xcf, + 0xd3, 0xcf, 0xcd, 0xcc, 0x2b, 0xd1, 0x2f, 0x33, 0xd4, 0x2f, 0xa9, 0xd0, 0x2b, 0x28, 0xca, 0x2f, + 0xc9, 0x17, 0xe2, 0x01, 0x09, 0xeb, 0x81, 0x84, 0xf5, 0xca, 0x0c, 0xa5, 0xc4, 0x93, 0xf3, 0x8b, + 0x73, 0xf3, 0x8b, 0xf5, 0x73, 0x8b, 0xd3, 0x41, 0xaa, 0x72, 0x8b, 0xd3, 0x21, 0xca, 0xa4, 0x04, + 0x13, 0x73, 0x33, 0xf3, 0xf2, 0xf5, 0xc1, 0x24, 0x54, 0x48, 0x1c, 0xc5, 0x40, 0xb0, 0x09, 0x10, + 0x09, 0x91, 0xf4, 0xfc, 0xf4, 0x7c, 0x30, 0x53, 0x1f, 0xc4, 0x82, 0x8a, 0x4a, 0x42, 0x8c, 0x8e, + 0x87, 0x48, 0x40, 0x38, 0x10, 0x29, 0xa5, 0x4d, 0x8c, 0x5c, 0xfc, 0xbe, 0xc5, 0xe9, 0xa1, 0x05, + 0x29, 0x89, 0x25, 0xa9, 0x01, 0x89, 0x45, 0x89, 0xb9, 0xc5, 0x42, 0x66, 0x5c, 0x9c, 0x89, 0xa5, + 0x25, 0x19, 0xf9, 0x45, 0x99, 0x25, 0x95, 0x12, 0x8c, 0x0a, 0x8c, 0x1a, 0x9c, 0x4e, 0x12, 0x97, + 0xb6, 0xe8, 0x8a, 0x40, 0x35, 0x3a, 0xa6, 0xa4, 0x14, 0xa5, 0x16, 0x17, 0x07, 0x97, 0x14, 0x65, + 0xe6, 0xa5, 0x07, 0x21, 0x94, 0x0a, 0x99, 0x73, 0xb1, 0x15, 0x80, 0x4d, 0x90, 0x60, 0x52, 0x60, + 0xd4, 0xe0, 0x36, 0x12, 0xd1, 0x43, 0xf6, 0xa0, 0x1e, 0xc4, 0x74, 0x27, 0xce, 0x13, 0xf7, 0xe4, + 0x19, 0x56, 0x3c, 0xdf, 0xa0, 0xc5, 0x18, 0x04, 0x55, 0x6e, 0xa5, 0xd7, 0xf4, 0x7c, 0x83, 0x16, + 0xc2, 0xa0, 0xae, 0xe7, 0x1b, 0xb4, 0xa4, 0xc1, 0x3e, 0xac, 0x80, 0xf8, 0x11, 0xcd, 0x81, 0x4a, + 0x92, 0x5c, 0xe2, 0x68, 0x42, 0x41, 0xa9, 0xc5, 0x05, 0xf9, 0x79, 0xc5, 0xa9, 0x46, 0x49, 0x5c, + 0xcc, 0xbe, 0xc5, 0xe9, 0x42, 0x21, 0x5c, 0x3c, 0x28, 0x5e, 0x92, 0x45, 0x75, 0x0a, 0x9a, 0x6e, + 0x29, 0x55, 0xbc, 0xd2, 0x30, 0xc3, 0xa5, 0x58, 0x1b, 0x40, 0xce, 0x76, 0x72, 0x3c, 0xf1, 0x48, + 0x8e, 0xf1, 0xc2, 0x23, 0x39, 0xc6, 0x07, 0x8f, 0xe4, 0x18, 0x27, 0x3c, 0x96, 0x63, 0xb8, 0xf0, + 0x58, 0x8e, 0xe1, 0xc6, 0x63, 0x39, 0x86, 0x28, 0xf5, 0xf4, 0xcc, 0x92, 0x8c, 0xd2, 0x24, 0xbd, + 0xe4, 0xfc, 0x5c, 0xfd, 0xa4, 0xd2, 0xa2, 0xbc, 0x12, 0xdd, 0x9c, 0xc4, 0xa4, 0x62, 0x7d, 0x64, + 0xbf, 0x94, 0x54, 0x16, 0xa4, 0x16, 0x27, 0xb1, 0x81, 0x43, 0xdf, 0x18, 0x10, 0x00, 0x00, 0xff, + 0xff, 0xca, 0x18, 0x5d, 0x0b, 0x1a, 0x02, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -192,7 +193,7 @@ func NewMsgClient(cc grpc1.ClientConn) MsgClient { func (c *msgClient) UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) { out := new(MsgUpdateParamsResponse) - err := c.cc.Invoke(ctx, "/cosmos.mint.v1beta1.Msg/UpdateParams", in, out, opts...) + err := c.cc.Invoke(ctx, "/xion.mint.v1.Msg/UpdateParams", in, out, opts...) if err != nil { return nil, err } @@ -230,7 +231,7 @@ func _Msg_UpdateParams_Handler(srv interface{}, ctx context.Context, dec func(in } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/cosmos.mint.v1beta1.Msg/UpdateParams", + FullMethod: "/xion.mint.v1.Msg/UpdateParams", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).UpdateParams(ctx, req.(*MsgUpdateParams)) @@ -239,7 +240,7 @@ func _Msg_UpdateParams_Handler(srv interface{}, ctx context.Context, dec func(in } var _Msg_serviceDesc = grpc.ServiceDesc{ - ServiceName: "cosmos.mint.v1beta1.Msg", + ServiceName: "xion.mint.v1.Msg", HandlerType: (*MsgServer)(nil), Methods: []grpc.MethodDesc{ { @@ -248,7 +249,7 @@ var _Msg_serviceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: "cosmos/mint/v1beta1/tx.proto", + Metadata: "xion/mint/v1/tx.proto", } func (m *MsgUpdateParams) Marshal() (dAtA []byte, err error) { From f0c707fc1b44ca8d530643da1e702a397ad365bb Mon Sep 17 00:00:00 2001 From: Ash Date: Fri, 31 Mar 2023 17:24:00 +0100 Subject: [PATCH 007/501] protos fixed --- Makefile | 3 ++- x/mint/module.go | 8 +------- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/Makefile b/Makefile index 2688eed4..8c1f7a7b 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,8 @@ #!/usr/bin/make -f PACKAGES_SIMTEST=$(shell go list ./... | grep '/simulation') -VERSION := $(shell echo $(shell git describe --tags) | sed 's/^v//') +#VERSION := $(shell echo $(shell git describe --tags) | sed 's/^v//') +VERSION := 0.1.0 COMMIT := $(shell git log -1 --format='%H') LEDGER_ENABLED ?= true SDK_PACK := $(shell go list -m github.com/cosmos/cosmos-sdk | sed 's/ /\@/g') diff --git a/x/mint/module.go b/x/mint/module.go index 1bf22005..3133542d 100644 --- a/x/mint/module.go +++ b/x/mint/module.go @@ -31,7 +31,7 @@ import ( ) // ConsensusVersion defines the current x/mint module consensus version. -const ConsensusVersion = 2 +const ConsensusVersion = 1 var ( _ module.BeginBlockAppModule = AppModule{} @@ -150,12 +150,6 @@ func (am AppModule) RegisterInvariants(_ sdk.InvariantRegistry) {} func (am AppModule) RegisterServices(cfg module.Configurator) { types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.keeper)) types.RegisterQueryServer(cfg.QueryServer(), am.keeper) - - m := keeper.NewMigrator(am.keeper, am.legacySubspace) - - if err := cfg.RegisterMigration(types.ModuleName, 1, m.Migrate1to2); err != nil { - panic(fmt.Sprintf("failed to migrate x/%s from version 1 to 2: %v", types.ModuleName, err)) - } } // InitGenesis performs genesis initialization for the mint module. It returns From 0bab8d5ca2340e59f2f4d7675b9f5b3a7a33714b Mon Sep 17 00:00:00 2001 From: Ash Date: Fri, 31 Mar 2023 17:47:21 +0100 Subject: [PATCH 008/501] codec issues in integration tests --- proto/xion/mint/v1/event.proto | 2 +- proto/xion/mint/v1/mint.proto | 2 +- x/mint/types/event.pb.go | 52 +++++++++++++++++----------------- x/mint/types/mint.pb.go | 52 +++++++++++++++++----------------- 4 files changed, 54 insertions(+), 54 deletions(-) diff --git a/proto/xion/mint/v1/event.proto b/proto/xion/mint/v1/event.proto index f04fe84a..6f7ac75d 100644 --- a/proto/xion/mint/v1/event.proto +++ b/proto/xion/mint/v1/event.proto @@ -1,5 +1,5 @@ syntax = "proto3"; -package mint.v1; +package xion.mint.v1; import "gogoproto/gogo.proto"; diff --git a/proto/xion/mint/v1/mint.proto b/proto/xion/mint/v1/mint.proto index e87548ad..72cc2b9f 100644 --- a/proto/xion/mint/v1/mint.proto +++ b/proto/xion/mint/v1/mint.proto @@ -26,7 +26,7 @@ message Minter { // Params defines the parameters for the x/mint module. message Params { option (gogoproto.goproto_stringer) = false; - option (amino.name) = "cosmos-sdk/x/mint/Params"; + option (amino.name) = "xion/x/mint/Params"; // type of coin to mint string mint_denom = 1; diff --git a/x/mint/types/event.pb.go b/x/mint/types/event.pb.go index 680d5f03..552ff324 100644 --- a/x/mint/types/event.pb.go +++ b/x/mint/types/event.pb.go @@ -98,37 +98,37 @@ func (m *MintIncentiveTokens) GetBurnedAmount() uint64 { } func init() { - proto.RegisterType((*MintIncentiveTokens)(nil), "mint.v1.MintIncentiveTokens") + proto.RegisterType((*MintIncentiveTokens)(nil), "xion.mint.v1.MintIncentiveTokens") } func init() { proto.RegisterFile("xion/mint/v1/event.proto", fileDescriptor_a4b507e362b6edbc) } var fileDescriptor_a4b507e362b6edbc = []byte{ - // 372 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x92, 0xb1, 0x6e, 0xda, 0x40, - 0x18, 0xc7, 0xed, 0x42, 0x41, 0x5c, 0x41, 0xa5, 0xa6, 0x83, 0xd5, 0xc1, 0x20, 0x23, 0xb5, 0x74, - 0xc0, 0x16, 0xea, 0xd6, 0x0d, 0xd4, 0x0e, 0x89, 0x14, 0x29, 0xb2, 0x32, 0x65, 0x21, 0xb6, 0xb9, - 0xc0, 0x09, 0xfb, 0xfb, 0x90, 0xef, 0xec, 0xc0, 0x5b, 0xe4, 0xb1, 0x18, 0x19, 0xa3, 0x0c, 0x28, - 0x82, 0x37, 0x88, 0xf2, 0x00, 0x91, 0xef, 0x10, 0x46, 0xca, 0xc4, 0xe4, 0xbb, 0x9f, 0x7f, 0xfe, - 0xff, 0xe5, 0xbb, 0x8f, 0x98, 0x4b, 0x86, 0xe0, 0xc6, 0x0c, 0x84, 0x9b, 0x0d, 0x5c, 0x9a, 0x51, - 0x10, 0xce, 0x22, 0x41, 0x81, 0x46, 0x35, 0x87, 0x4e, 0x36, 0xf8, 0xf1, 0x7d, 0x8a, 0x53, 0x94, - 0xcc, 0xcd, 0x57, 0xea, 0xb5, 0xfd, 0x56, 0x22, 0xad, 0x2b, 0x06, 0xe2, 0x02, 0x42, 0x0a, 0x82, - 0x65, 0xf4, 0x06, 0xe7, 0x14, 0xb8, 0x31, 0x23, 0xf5, 0x00, 0x61, 0x42, 0x27, 0xe3, 0xc4, 0x17, - 0x0c, 0x4d, 0xbd, 0xa3, 0xf7, 0x6a, 0xa3, 0xff, 0xeb, 0x6d, 0x5b, 0x7b, 0xde, 0xb6, 0x7f, 0x4e, - 0x99, 0x98, 0xa5, 0x81, 0x13, 0x62, 0xec, 0x86, 0xc8, 0x63, 0xe4, 0x87, 0x47, 0x9f, 0x4f, 0xe6, - 0xae, 0x58, 0x2d, 0x28, 0x77, 0xfe, 0xd1, 0xf0, 0x75, 0xdb, 0x6e, 0xad, 0xfc, 0x38, 0xfa, 0x6b, - 0x9f, 0x66, 0xd9, 0xde, 0x17, 0xb5, 0xf5, 0xf2, 0x9d, 0x71, 0x47, 0x6a, 0x0c, 0xee, 0xa3, 0x7c, - 0x0d, 0xe6, 0x27, 0x59, 0x33, 0x3a, 0xbb, 0xa6, 0xa9, 0x6a, 0x8e, 0x41, 0xb6, 0x57, 0x84, 0x1a, - 0x0f, 0xe4, 0x9b, 0x0f, 0x90, 0xfa, 0xd1, 0x78, 0x91, 0x60, 0xc6, 0x38, 0x43, 0xe0, 0x66, 0x49, - 0x36, 0x5d, 0x9e, 0xdd, 0x64, 0xaa, 0xa6, 0x0f, 0x81, 0xb6, 0xd7, 0x54, 0xec, 0xfa, 0x88, 0x8c, - 0x2e, 0x69, 0x00, 0xa5, 0xf9, 0x8f, 0xfb, 0x31, 0xa6, 0x20, 0xcc, 0x72, 0x47, 0xef, 0x95, 0xbd, - 0xba, 0x82, 0x43, 0xc9, 0x8c, 0xdf, 0xa4, 0x19, 0x62, 0x14, 0xd1, 0x50, 0x14, 0xde, 0x67, 0xe9, - 0x7d, 0x3d, 0xf2, 0x83, 0xda, 0x25, 0x8d, 0xfc, 0x36, 0x0b, 0xaf, 0xa2, 0xf2, 0x14, 0x2c, 0xa4, - 0x20, 0x4d, 0xa0, 0x90, 0xaa, 0x4a, 0x52, 0x50, 0x49, 0xa3, 0xe1, 0x7a, 0x67, 0xe9, 0x9b, 0x9d, - 0xa5, 0xbf, 0xec, 0x2c, 0xfd, 0x71, 0x6f, 0x69, 0x9b, 0xbd, 0xa5, 0x3d, 0xed, 0x2d, 0xed, 0xf6, - 0xd7, 0xc9, 0x49, 0xe4, 0x9f, 0x88, 0x7e, 0xe4, 0x07, 0xdc, 0x95, 0xf3, 0xb5, 0x54, 0x13, 0x26, - 0x8f, 0x23, 0xa8, 0xc8, 0x01, 0xfa, 0xf3, 0x1e, 0x00, 0x00, 0xff, 0xff, 0xc9, 0x55, 0x16, 0x32, - 0x7b, 0x02, 0x00, 0x00, + // 374 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x92, 0xc1, 0x4e, 0xea, 0x40, + 0x14, 0x86, 0xdb, 0x0b, 0x97, 0x1b, 0xe6, 0x42, 0xc4, 0xe2, 0xa2, 0x71, 0x51, 0x48, 0x49, 0x14, + 0x17, 0xb4, 0x21, 0xee, 0xdc, 0x41, 0x74, 0xa1, 0x89, 0x89, 0x69, 0x5c, 0xb9, 0xc1, 0xb6, 0x8c, + 0x30, 0xa1, 0x3d, 0x43, 0x3a, 0xd3, 0x0a, 0x6f, 0xe1, 0x63, 0xb1, 0x64, 0x69, 0x5c, 0x10, 0x03, + 0x6f, 0x60, 0x7c, 0x00, 0x33, 0x33, 0x84, 0x92, 0xb8, 0x62, 0xd5, 0x73, 0xfe, 0xf3, 0xf5, 0xff, + 0xd3, 0xd3, 0x83, 0xcc, 0x19, 0xa1, 0xe0, 0xc6, 0x04, 0xb8, 0x9b, 0x75, 0x5d, 0x9c, 0x61, 0xe0, + 0xce, 0x34, 0xa1, 0x9c, 0x1a, 0x15, 0x31, 0x71, 0xc4, 0xc4, 0xc9, 0xba, 0xa7, 0x27, 0x23, 0x3a, + 0xa2, 0x72, 0xe0, 0x8a, 0x4a, 0x31, 0xf6, 0x77, 0x01, 0xd5, 0xef, 0x09, 0xf0, 0x5b, 0x08, 0x31, + 0x70, 0x92, 0xe1, 0x47, 0x3a, 0xc1, 0xc0, 0x8c, 0x31, 0xaa, 0x04, 0x14, 0x86, 0x78, 0x38, 0x48, + 0x7c, 0x4e, 0xa8, 0xa9, 0x37, 0xf5, 0x76, 0xb9, 0x7f, 0xb3, 0x58, 0x35, 0xb4, 0x8f, 0x55, 0xe3, + 0x6c, 0x44, 0xf8, 0x38, 0x0d, 0x9c, 0x90, 0xc6, 0x6e, 0x48, 0x59, 0x4c, 0xd9, 0xf6, 0xd1, 0x61, + 0xc3, 0x89, 0xcb, 0xe7, 0x53, 0xcc, 0x9c, 0x6b, 0x1c, 0x7e, 0xad, 0x1a, 0xf5, 0xb9, 0x1f, 0x47, + 0x57, 0xf6, 0xbe, 0x97, 0xed, 0xfd, 0x57, 0xad, 0x27, 0x3a, 0xe3, 0x19, 0x95, 0x09, 0xbc, 0x44, + 0xa2, 0x06, 0xf3, 0x8f, 0x8c, 0xe9, 0x1f, 0x1c, 0x53, 0x53, 0x31, 0x3b, 0x23, 0xdb, 0xcb, 0x4d, + 0x8d, 0x57, 0x74, 0xec, 0x03, 0xa4, 0x7e, 0x34, 0x98, 0x26, 0x34, 0x23, 0x8c, 0x50, 0x60, 0x66, + 0x41, 0x26, 0xdd, 0x1d, 0x9c, 0x64, 0xaa, 0xa4, 0x5f, 0x86, 0xb6, 0x57, 0x53, 0xda, 0xc3, 0x4e, + 0x32, 0x5a, 0xa8, 0x0a, 0x18, 0x8b, 0x0f, 0xf7, 0x63, 0x9a, 0x02, 0x37, 0x8b, 0x4d, 0xbd, 0x5d, + 0xf4, 0x2a, 0x4a, 0xec, 0x49, 0xcd, 0xb8, 0x40, 0xb5, 0x90, 0x46, 0x11, 0x0e, 0x79, 0xce, 0xfd, + 0x95, 0xdc, 0xd1, 0x4e, 0xdf, 0xa2, 0x2d, 0x54, 0x15, 0x7f, 0x33, 0xe7, 0x4a, 0xca, 0x4f, 0x89, + 0x39, 0x14, 0xa4, 0x09, 0xe4, 0xd0, 0x3f, 0x05, 0x29, 0x51, 0x41, 0xfd, 0xde, 0x62, 0x6d, 0xe9, + 0xcb, 0xb5, 0xa5, 0x7f, 0xae, 0x2d, 0xfd, 0x6d, 0x63, 0x69, 0xcb, 0x8d, 0xa5, 0xbd, 0x6f, 0x2c, + 0xed, 0xe9, 0x7c, 0x6f, 0x13, 0xe2, 0x15, 0xde, 0x89, 0xfc, 0x80, 0xb9, 0xf2, 0xc8, 0x66, 0xea, + 0xcc, 0xe4, 0x3a, 0x82, 0x92, 0x3c, 0xa0, 0xcb, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xfb, 0xb9, + 0xb8, 0x9d, 0x80, 0x02, 0x00, 0x00, } func (m *MintIncentiveTokens) Marshal() (dAtA []byte, err error) { diff --git a/x/mint/types/mint.pb.go b/x/mint/types/mint.pb.go index 7ae7123f..252168b0 100644 --- a/x/mint/types/mint.pb.go +++ b/x/mint/types/mint.pb.go @@ -137,34 +137,34 @@ func init() { func init() { proto.RegisterFile("xion/mint/v1/mint.proto", fileDescriptor_caf2043dad411a0e) } var fileDescriptor_caf2043dad411a0e = []byte{ - // 424 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x93, 0xc1, 0x8a, 0xd3, 0x40, - 0x1c, 0xc6, 0x13, 0xad, 0x81, 0x8e, 0xbb, 0xe8, 0x8e, 0x8a, 0x71, 0xc1, 0x74, 0xdd, 0xc3, 0xba, + // 423 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x93, 0x41, 0x8b, 0xd3, 0x40, + 0x1c, 0xc5, 0x13, 0xad, 0x81, 0x8e, 0xbb, 0xe8, 0x8e, 0x8a, 0x71, 0xc5, 0x74, 0xd9, 0xc3, 0xba, 0x08, 0x4d, 0x58, 0xbc, 0x89, 0x17, 0x6b, 0xaf, 0x0b, 0x25, 0x37, 0x17, 0x24, 0xfc, 0x93, 0x8c, - 0xe9, 0xd0, 0x64, 0x26, 0xcc, 0x4c, 0x4b, 0xfa, 0x08, 0x7a, 0xf2, 0xe8, 0xd1, 0x47, 0xf0, 0xe0, - 0x43, 0xf4, 0x66, 0xf1, 0x24, 0x1e, 0x8a, 0xb4, 0x07, 0x5f, 0x43, 0x32, 0x13, 0xd2, 0xe2, 0x39, - 0x97, 0xfc, 0x93, 0xef, 0x0b, 0xbf, 0xef, 0x4b, 0x98, 0x3f, 0x7a, 0x5c, 0x51, 0xce, 0x82, 0x82, - 0x32, 0x15, 0x2c, 0xae, 0xf4, 0xf4, 0x4b, 0xc1, 0x15, 0xc7, 0x47, 0xb5, 0xe1, 0x6b, 0x61, 0x71, - 0x75, 0xfa, 0x30, 0xe3, 0x19, 0xd7, 0x46, 0x50, 0xdf, 0x99, 0x77, 0x4e, 0x9f, 0x24, 0x5c, 0x16, - 0x5c, 0x46, 0xc6, 0x30, 0x0f, 0x8d, 0x75, 0x02, 0x05, 0x65, 0x3c, 0xd0, 0x57, 0x23, 0x9d, 0xff, - 0xb0, 0x91, 0x73, 0x4d, 0x99, 0x22, 0x02, 0xdf, 0xa0, 0x3e, 0x65, 0x1f, 0x72, 0x50, 0x94, 0x33, - 0xd7, 0x3e, 0xb3, 0x2f, 0xfb, 0xa3, 0xd7, 0xab, 0xcd, 0xc0, 0xfa, 0xbd, 0x19, 0x5c, 0x64, 0x54, - 0x4d, 0xe7, 0xb1, 0x9f, 0xf0, 0xa2, 0x21, 0x36, 0x63, 0x28, 0xd3, 0x59, 0xa0, 0x96, 0x25, 0x91, - 0xfe, 0x98, 0x24, 0x3f, 0xbf, 0x0f, 0x51, 0x13, 0x38, 0x26, 0x49, 0xb8, 0xc7, 0x61, 0x8a, 0x4e, - 0x80, 0xb1, 0x39, 0xe4, 0x75, 0xad, 0x05, 0x95, 0x94, 0x33, 0xe9, 0xde, 0xea, 0x20, 0xe3, 0xbe, - 0xc1, 0x4e, 0x5a, 0xea, 0xf9, 0xc7, 0x1e, 0x72, 0x26, 0x20, 0xa0, 0x90, 0xf8, 0x29, 0x42, 0xf5, - 0xbf, 0x8a, 0x52, 0xc2, 0x78, 0x61, 0x3e, 0x29, 0xec, 0xd7, 0xca, 0xb8, 0x16, 0x70, 0x89, 0x1e, - 0xb5, 0x0d, 0x23, 0x01, 0x8a, 0x44, 0xc9, 0x14, 0x58, 0x46, 0x3a, 0x29, 0xf6, 0xa0, 0x45, 0x87, - 0xa0, 0xc8, 0x5b, 0x0d, 0xc6, 0x80, 0x8e, 0xf7, 0x89, 0x05, 0x54, 0xee, 0xed, 0x0e, 0x92, 0x8e, - 0x5a, 0xe4, 0x35, 0x54, 0xff, 0x45, 0x50, 0xe6, 0xf6, 0xba, 0x8d, 0xa0, 0x0c, 0xbf, 0x47, 0x77, - 0x33, 0x0e, 0x79, 0x14, 0x73, 0x96, 0x92, 0xd4, 0xbd, 0xd3, 0x41, 0x00, 0xaa, 0x81, 0x23, 0xcd, - 0xc3, 0x17, 0xe8, 0x5e, 0x9c, 0xf3, 0x64, 0x26, 0xa3, 0x92, 0x88, 0x68, 0x49, 0x40, 0xb8, 0xce, - 0x99, 0x7d, 0xd9, 0x0b, 0x8f, 0x8d, 0x3c, 0x21, 0xe2, 0x1d, 0x01, 0xf1, 0xea, 0xd9, 0x97, 0xaf, - 0x03, 0xeb, 0xd3, 0xdf, 0x6f, 0x2f, 0xdc, 0x83, 0x80, 0xca, 0xac, 0x8d, 0x39, 0x00, 0xa3, 0x37, + 0xe9, 0xd0, 0x64, 0x26, 0xcc, 0x4c, 0x4b, 0x7a, 0xf6, 0xe6, 0xc9, 0xa3, 0x47, 0x3f, 0x82, 0x07, + 0x3f, 0x44, 0x6f, 0x16, 0x4f, 0xe2, 0xa1, 0x48, 0x7b, 0xf0, 0x6b, 0x48, 0x66, 0x42, 0x5a, 0x3c, + 0xe7, 0x92, 0x7f, 0xf2, 0x5e, 0xf8, 0xbd, 0x97, 0x0c, 0x7f, 0xf4, 0xb8, 0xa2, 0x9c, 0x05, 0x05, + 0x65, 0x2a, 0x58, 0x5c, 0xe9, 0xe9, 0x97, 0x82, 0x2b, 0x8e, 0x8f, 0x6a, 0xc3, 0xd7, 0xc2, 0xe2, + 0xea, 0xf4, 0x61, 0xc6, 0x33, 0xae, 0x8d, 0xa0, 0xbe, 0x33, 0xef, 0x9c, 0x3e, 0x49, 0xb8, 0x2c, + 0xb8, 0x8c, 0x8c, 0x61, 0x1e, 0x1a, 0xeb, 0x04, 0x0a, 0xca, 0x78, 0xa0, 0xaf, 0x46, 0x3a, 0xff, + 0x61, 0x23, 0xe7, 0x9a, 0x32, 0x45, 0x04, 0xbe, 0x41, 0x7d, 0xca, 0x3e, 0xe4, 0xa0, 0x28, 0x67, + 0xae, 0x7d, 0x66, 0x5f, 0xf6, 0x47, 0xaf, 0x57, 0x9b, 0x81, 0xf5, 0x7b, 0x33, 0xb8, 0xc8, 0xa8, + 0x9a, 0xce, 0x63, 0x3f, 0xe1, 0x45, 0x43, 0x6c, 0xc6, 0x50, 0xa6, 0xb3, 0x40, 0x2d, 0x4b, 0x22, + 0xfd, 0x31, 0x49, 0x7e, 0x7e, 0x1f, 0xa2, 0x26, 0x70, 0x4c, 0x92, 0x70, 0x8f, 0xc3, 0x14, 0x9d, + 0x00, 0x63, 0x73, 0xc8, 0xeb, 0x5a, 0x0b, 0x2a, 0x29, 0x67, 0xd2, 0xbd, 0xd5, 0x41, 0xc6, 0x7d, + 0x83, 0x9d, 0xb4, 0xd4, 0xf3, 0x8f, 0x3d, 0xe4, 0x4c, 0x40, 0x40, 0x21, 0xf1, 0x33, 0x84, 0xea, + 0x7f, 0x15, 0xa5, 0x84, 0xf1, 0xc2, 0x7c, 0x52, 0xd8, 0xaf, 0x95, 0x71, 0x2d, 0xe0, 0x12, 0x3d, + 0x6a, 0x1b, 0x46, 0x02, 0x14, 0x89, 0x92, 0x29, 0xb0, 0x8c, 0x74, 0x52, 0xec, 0x41, 0x8b, 0x0e, + 0x41, 0x91, 0xb7, 0x1a, 0x8c, 0x01, 0x1d, 0xef, 0x13, 0x0b, 0xa8, 0xdc, 0xdb, 0x1d, 0x24, 0x1d, + 0xb5, 0xc8, 0x6b, 0xa8, 0xfe, 0x8b, 0xa0, 0xcc, 0xed, 0x75, 0x1b, 0x41, 0x19, 0x7e, 0x8f, 0xee, + 0x66, 0x1c, 0xf2, 0x28, 0xe6, 0x2c, 0x25, 0xa9, 0x7b, 0xa7, 0x83, 0x00, 0x54, 0x03, 0x47, 0x9a, + 0x87, 0x2f, 0xd0, 0xbd, 0x38, 0xe7, 0xc9, 0x4c, 0x46, 0x25, 0x11, 0xd1, 0x92, 0x80, 0x70, 0x9d, + 0x33, 0xfb, 0xb2, 0x17, 0x1e, 0x1b, 0x79, 0x42, 0xc4, 0x3b, 0x02, 0xe2, 0xd5, 0xd3, 0x2f, 0x5f, + 0x07, 0xd6, 0xa7, 0xbf, 0xdf, 0x5e, 0x60, 0xbd, 0x2e, 0x95, 0x59, 0x18, 0x73, 0xf4, 0xa3, 0x37, 0xab, 0xad, 0x67, 0xaf, 0xb7, 0x9e, 0xfd, 0x67, 0xeb, 0xd9, 0x9f, 0x77, 0x9e, 0xb5, 0xde, 0x79, - 0xd6, 0xaf, 0x9d, 0x67, 0xdd, 0x3c, 0x3f, 0xa8, 0x19, 0xcf, 0x05, 0x53, 0xc3, 0x1c, 0x62, 0x19, - 0xe8, 0xc5, 0x6b, 0x18, 0xba, 0x6b, 0xec, 0xe8, 0x3d, 0x79, 0xf9, 0x2f, 0x00, 0x00, 0xff, 0xff, - 0x9d, 0x42, 0x30, 0x5b, 0x94, 0x03, 0x00, 0x00, + 0xd6, 0xaf, 0x9d, 0x67, 0xdd, 0x3c, 0x3f, 0x28, 0x18, 0xcf, 0x05, 0x53, 0xc3, 0x1c, 0x62, 0x19, + 0x1c, 0x32, 0x74, 0xcb, 0xd8, 0xd1, 0x1b, 0xf2, 0xf2, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf6, + 0x07, 0x8f, 0x80, 0x8e, 0x03, 0x00, 0x00, } func (m *Minter) Marshal() (dAtA []byte, err error) { From f596e1384690ba26e19cfe0950ae3bb0557ca495 Mon Sep 17 00:00:00 2001 From: Ash Date: Mon, 3 Apr 2023 18:21:04 +0100 Subject: [PATCH 009/501] proper codec definition --- x/mint/types/codec.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/x/mint/types/codec.go b/x/mint/types/codec.go index 00026595..c945c035 100644 --- a/x/mint/types/codec.go +++ b/x/mint/types/codec.go @@ -32,8 +32,8 @@ func init() { // RegisterLegacyAminoCodec registers concrete types on the LegacyAmino codec func RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { - cdc.RegisterConcrete(Params{}, "cosmos-sdk/x/mint/Params", nil) - legacy.RegisterAminoMsg(cdc, &MsgUpdateParams{}, "cosmos-sdk/x/mint/MsgUpdateParams") + cdc.RegisterConcrete(Params{}, "xion/x/mint/Params", nil) + legacy.RegisterAminoMsg(cdc, &MsgUpdateParams{}, "xion/x/mint/MsgUpdateParams") } // RegisterInterfaces registers the interfaces types with the interface registry. From 25ff08e89b667a2669085cd8d74147fe078df428 Mon Sep 17 00:00:00 2001 From: Ash Date: Mon, 3 Apr 2023 19:01:38 +0100 Subject: [PATCH 010/501] proposal issue --- app/app.go | 2 +- integration_tests/dungeon_test.go | 42 ++++++++++++++++++------------- 2 files changed, 25 insertions(+), 19 deletions(-) diff --git a/app/app.go b/app/app.go index 34535120..e7213f8b 100644 --- a/app/app.go +++ b/app/app.go @@ -226,7 +226,7 @@ var ( // module account permissions maccPerms = map[string][]string{ - authtypes.FeeCollectorName: nil, + authtypes.FeeCollectorName: {authtypes.Burner}, distrtypes.ModuleName: nil, minttypes.ModuleName: {authtypes.Minter}, stakingtypes.BondedPoolName: {authtypes.Burner, authtypes.Staking}, diff --git a/integration_tests/dungeon_test.go b/integration_tests/dungeon_test.go index ca6d07c1..b110b389 100644 --- a/integration_tests/dungeon_test.go +++ b/integration_tests/dungeon_test.go @@ -94,15 +94,16 @@ func TestDungeonTransferBlock(t *testing.T) { UidGid: "1025:1025", }, }, - GasPrices: "0.0uxion", - GasAdjustment: 1.3, - Type: "cosmos", - ChainID: "xion-1", - Bin: "xiond", - Bech32Prefix: "xion", - Denom: "uxion", - TrustingPeriod: "336h", - ModifyGenesis: modifyGenesisShortProposals(votingPeriod, maxDepositPeriod), + GasPrices: "0.0uxion", + GasAdjustment: 1.3, + Type: "cosmos", + ChainID: "xion-1", + Bin: "xiond", + Bech32Prefix: "xion", + Denom: "uxion", + TrustingPeriod: "336h", + ModifyGenesis: modifyGenesisShortProposals(votingPeriod, maxDepositPeriod), + UsingNewGenesisCommand: true, }, NumValidators: &numValidators, NumFullNodes: &numFullNodes, @@ -343,17 +344,22 @@ func modifyGenesisShortProposals(votingPeriod string, maxDepositPeriod string) f if err := json.Unmarshal(genbz, &g); err != nil { return nil, fmt.Errorf("failed to unmarshal genesis file: %w", err) } - if err := dyno.Set(g, votingPeriod, "app_state", "gov", "voting_params", "voting_period"); err != nil { - return nil, fmt.Errorf("failed to set voting period in genesis json: %w", err) - } - if err := dyno.Set(g, maxDepositPeriod, "app_state", "gov", "deposit_params", "max_deposit_period"); err != nil { - return nil, fmt.Errorf("failed to set max deposit period in genesis json: %w", err) + votingParams := map[string]interface{}{"voting_period": votingPeriod} + if err := dyno.Set(g, votingParams, "app_state", "gov", "voting_params"); err != nil { + return nil, fmt.Errorf("failed to set voting params in genesis json: %w", err) + }q + minDeposit := []interface{}{ + map[string]interface{}{ + "denom": chainConfig.Denom, + "amount": "100", + }, } - if err := dyno.Set(g, chainConfig.Denom, "app_state", "gov", "deposit_params", "min_deposit", 0, "denom"); err != nil { - return nil, fmt.Errorf("failed to set min deposit denom in genesis json: %w", err) + depositParams := map[string]interface{}{ + "max_deposit_period": maxDepositPeriod, + "min_deposit": minDeposit, } - if err := dyno.Set(g, "100", "app_state", "gov", "deposit_params", "min_deposit", 0, "amount"); err != nil { - return nil, fmt.Errorf("failed to set min deposit amount in genesis json: %w", err) + if err := dyno.Set(g, depositParams, "app_state", "gov", "deposit_params"); err != nil { + return nil, fmt.Errorf("failed to set deposit params in genesis json: %w", err) } out, err := json.Marshal(g) if err != nil { From 522e05c73b85fc04b3b9b462a5ac06571337c24a Mon Sep 17 00:00:00 2001 From: Ash Date: Mon, 3 Apr 2023 21:51:40 +0100 Subject: [PATCH 011/501] go ball --- integration_tests/dungeon_test.go | 6 ++++-- integration_tests/go.mod | 1 + 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/integration_tests/dungeon_test.go b/integration_tests/dungeon_test.go index b110b389..e97e60d3 100644 --- a/integration_tests/dungeon_test.go +++ b/integration_tests/dungeon_test.go @@ -211,7 +211,9 @@ func TestDungeonTransferBlock(t *testing.T) { Deposit: "100uxion", } - paramChangeTx, err := xion.ParamChangeProposal(ctx, xionUser.KeyName(), &prop) + //prop := govtypes.NewMsgSubmitProposal() + + paramChangeTx, err := xion.LegacyParamChangeProposal(ctx, xionUser.KeyName(), &prop) require.NoError(t, err) t.Logf("Param change proposal submitted with ID %s in transaction %s", paramChangeTx.ProposalID, paramChangeTx.TxHash) @@ -347,7 +349,7 @@ func modifyGenesisShortProposals(votingPeriod string, maxDepositPeriod string) f votingParams := map[string]interface{}{"voting_period": votingPeriod} if err := dyno.Set(g, votingParams, "app_state", "gov", "voting_params"); err != nil { return nil, fmt.Errorf("failed to set voting params in genesis json: %w", err) - }q + } minDeposit := []interface{}{ map[string]interface{}{ "denom": chainConfig.Denom, diff --git a/integration_tests/go.mod b/integration_tests/go.mod index 4712ce43..c731aa47 100644 --- a/integration_tests/go.mod +++ b/integration_tests/go.mod @@ -236,4 +236,5 @@ replace ( github.com/ChainSafe/go-schnorrkel/1 => github.com/ChainSafe/go-schnorrkel v1.0.0 github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 github.com/vedhavyas/go-subkey => github.com/strangelove-ventures/go-subkey v1.0.7 + github.com/strangelove-ventures/interchaintest/v7 => ../../interchaintest ) From 932b235b956ea3333b9582f850550e66d5135010 Mon Sep 17 00:00:00 2001 From: Ash Date: Mon, 3 Apr 2023 21:55:30 +0100 Subject: [PATCH 012/501] broken --- integration_tests/dungeon_test.go | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/integration_tests/dungeon_test.go b/integration_tests/dungeon_test.go index e97e60d3..6ed0c849 100644 --- a/integration_tests/dungeon_test.go +++ b/integration_tests/dungeon_test.go @@ -4,6 +4,7 @@ import ( "context" "encoding/json" "fmt" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1" "os" "strings" "testing" @@ -211,7 +212,18 @@ func TestDungeonTransferBlock(t *testing.T) { Deposit: "100uxion", } - //prop := govtypes.NewMsgSubmitProposal() + prop := govtypes.NewMsgSubmitProposal( + []types.Msg{ + + }, + types.Coins{ + { + Denom: "uxion", + Amount: "100" + }, + + } + ) paramChangeTx, err := xion.LegacyParamChangeProposal(ctx, xionUser.KeyName(), &prop) require.NoError(t, err) From f68881b9e67861a0f27d516d8f1dc75c416e5a12 Mon Sep 17 00:00:00 2001 From: Ash Date: Mon, 3 Apr 2023 21:56:31 +0100 Subject: [PATCH 013/501] merge conflict --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index a45b65ee..ff984726 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.19 require ( github.com/CosmWasm/wasmvm v1.2.1 - github.com/cosmos/cosmos-proto v1.0.0-beta.3 // indirect + github.com/cosmos/cosmos-proto v1.0.0-beta.2 github.com/cosmos/cosmos-sdk v0.47.0 github.com/cosmos/gogogateway v1.2.0 // indirect github.com/cosmos/gogoproto v1.4.6 diff --git a/go.sum b/go.sum index 0da37061..332c51e9 100644 --- a/go.sum +++ b/go.sum @@ -317,8 +317,8 @@ github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7 github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= 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-proto v1.0.0-beta.3 h1:VitvZ1lPORTVxkmF2fAp3IiA61xVwArQYKXTdEcpW6o= -github.com/cosmos/cosmos-proto v1.0.0-beta.3/go.mod h1:t8IASdLaAq+bbHbjq4p960BvcTqtwuAxid3b/2rOD6I= +github.com/cosmos/cosmos-proto v1.0.0-beta.2 h1:X3OKvWgK9Gsejo0F1qs5l8Qn6xJV/AzgIWR2wZ8Nua8= +github.com/cosmos/cosmos-proto v1.0.0-beta.2/go.mod h1:+XRCLJ14pr5HFEHIUcn51IKXD1Fy3rkEQqt4WqmN4V0= github.com/cosmos/cosmos-sdk v0.47.0 h1:GKYtBpvjwuDEVix1vdnQpq7PuEOnItuEK0vdAL2cZ5g= github.com/cosmos/cosmos-sdk v0.47.0/go.mod h1:FTtZbqiHCZ2vun9WrPq6qLQafNKkAuIhLAxzLjr2TiI= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= From 2cbb121afcb8c550357ac2cbc997ccaae32632dc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Apr 2023 21:21:32 +0000 Subject: [PATCH 014/501] Bump github.com/cosmos/gogoproto from 1.4.6 to 1.4.7 Bumps [github.com/cosmos/gogoproto](https://github.com/cosmos/gogoproto) from 1.4.6 to 1.4.7. - [Release notes](https://github.com/cosmos/gogoproto/releases) - [Changelog](https://github.com/cosmos/gogoproto/blob/main/CHANGELOG.md) - [Commits](https://github.com/cosmos/gogoproto/compare/v1.4.6...v1.4.7) --- updated-dependencies: - dependency-name: github.com/cosmos/gogoproto dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index ff984726..011fa666 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,7 @@ require ( github.com/cosmos/cosmos-proto v1.0.0-beta.2 github.com/cosmos/cosmos-sdk v0.47.0 github.com/cosmos/gogogateway v1.2.0 // indirect - github.com/cosmos/gogoproto v1.4.6 + github.com/cosmos/gogoproto v1.4.7 github.com/cosmos/iavl v0.20.0 // indirect github.com/cosmos/ibc-go/v7 v7.0.0 github.com/cosmos/ics23/go v0.9.1-0.20221207100636-b1abd8678aab // indirect diff --git a/go.sum b/go.sum index 332c51e9..22244c6a 100644 --- a/go.sum +++ b/go.sum @@ -327,8 +327,8 @@ github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4x 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.4.2/go.mod h1:cLxOsn1ljAHSV527CHOtaIP91kK6cCrZETRBrkzItWU= -github.com/cosmos/gogoproto v1.4.6 h1:Ee7z15dWJaGlgM2rWrK8N2IX7PQcuccu8oG68jp5RL4= -github.com/cosmos/gogoproto v1.4.6/go.mod h1:VS/ASYmPgv6zkPKLjR9EB91lwbLHOzaGCirmKKhncfI= +github.com/cosmos/gogoproto v1.4.7 h1:RzYKVnsEC7UIkDnhTIkqEB7LnIQbsySvmNEqPCiPevk= +github.com/cosmos/gogoproto v1.4.7/go.mod h1:gxGePp9qedovvl/StQL2BIJ6qlIBn1+9YxR0IulGBKA= github.com/cosmos/iavl v0.20.0 h1:fTVznVlepH0KK8NyKq8w+U7c2L6jofa27aFX6YGlm38= github.com/cosmos/iavl v0.20.0/go.mod h1:WO7FyvaZJoH65+HFOsDir7xU9FWk2w9cHXNW1XHcl7A= github.com/cosmos/ibc-go/v7 v7.0.0 h1:j4kyywlG0hhDmT9FmSaR5iCIka7Pz7kJTxGWY1nlV9Q= From c91884294dddbb6dc6d91e842b726a0975cb7040 Mon Sep 17 00:00:00 2001 From: Ash Date: Mon, 3 Apr 2023 23:33:40 +0100 Subject: [PATCH 015/501] proposal submitted --- integration_tests/dungeon_test.go | 51 +++++++++++++++---------------- 1 file changed, 24 insertions(+), 27 deletions(-) diff --git a/integration_tests/dungeon_test.go b/integration_tests/dungeon_test.go index 6ed0c849..925f28ca 100644 --- a/integration_tests/dungeon_test.go +++ b/integration_tests/dungeon_test.go @@ -4,7 +4,9 @@ import ( "context" "encoding/json" "fmt" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1" + "github.com/cosmos/cosmos-sdk/codec" + cdctypes "github.com/cosmos/cosmos-sdk/codec/types" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" "os" "strings" "testing" @@ -12,7 +14,6 @@ import ( "github.com/cosmos/cosmos-sdk/types" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" - paramsutils "github.com/cosmos/cosmos-sdk/x/params/client/utils" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" transfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" "github.com/icza/dyno" @@ -196,36 +197,32 @@ func TestDungeonTransferBlock(t *testing.T) { Enabled: false, }, } - data, err := json.Marshal(sendEnableds) - require.NoError(t, err) - - prop := paramsutils.ParamChangeProposalJSON{ - Title: "Disable sendability of uxion", - Description: "This proposal prevents uxion from being sent in the bank module", - Changes: []paramsutils.ParamChangeJSON{ - { - Subspace: banktypes.ModuleName, - Key: "SendEnabled", - Value: data, - }, - }, - Deposit: "100uxion", - } - prop := govtypes.NewMsgSubmitProposal( - []types.Msg{ + config := types.GetConfig() + config.SetBech32PrefixForAccount("xion", "xionpub") - }, - types.Coins{ - { - Denom: "uxion", - Amount: "100" - }, + setSendEnabledMsg := banktypes.MsgSetSendEnabled{ + Authority: authtypes.NewModuleAddress("gov").String(), + SendEnabled: sendEnableds, + } - } + registry := cdctypes.NewInterfaceRegistry() + registry.RegisterImplementations( + (*types.Msg)(nil), + &banktypes.MsgSetSendEnabled{}, ) + cdc := codec.NewProtoCodec(registry) - paramChangeTx, err := xion.LegacyParamChangeProposal(ctx, xionUser.KeyName(), &prop) + msg, err := cdc.MarshalInterfaceJSON(&setSendEnabledMsg) + + prop := cosmos.Proposal{ + Messages: []json.RawMessage{msg}, + Metadata: "", + Deposit: "100uxion", + Title: "Disable sendability of uxion", + Summary: "This proposal prevents uxion from being sent in the bank module", + } + paramChangeTx, err := xion.SubmitProposal(ctx, xionUser.KeyName(), &prop) require.NoError(t, err) t.Logf("Param change proposal submitted with ID %s in transaction %s", paramChangeTx.ProposalID, paramChangeTx.TxHash) From e93e1afb387359d8a3cb687abddc5587adec238e Mon Sep 17 00:00:00 2001 From: Francis Roch Date: Mon, 3 Apr 2023 19:23:07 -0400 Subject: [PATCH 016/501] Add Docker, Skaffold and Github Actions build configs --- .github/workflows/aws-ecr.yml | 58 +++++++++++++++++++++++++++++++++++ Dockerfile | 51 ++++++++++++++++++++++-------- skaffold.yaml | 25 +++++++++++++++ 3 files changed, 121 insertions(+), 13 deletions(-) create mode 100644 .github/workflows/aws-ecr.yml create mode 100644 skaffold.yaml diff --git a/.github/workflows/aws-ecr.yml b/.github/workflows/aws-ecr.yml new file mode 100644 index 00000000..d5dd110e --- /dev/null +++ b/.github/workflows/aws-ecr.yml @@ -0,0 +1,58 @@ +--- +name: Build and Push to Amazon ECR + +on: + push: + branches: + - main + workflow_dispatch: + +jobs: + + build: + name: Build Image + runs-on: ubuntu-latest + environment: CI + + steps: + - name: Check out code + uses: actions/checkout@v2 + + - name: Configure AWS credentials + uses: aws-actions/configure-aws-credentials@v1 + with: + aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} + aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + aws-region: us-east-1 + + - name: Login to Amazon ECR + id: login-ecr + uses: aws-actions/amazon-ecr-login@v1 + + - name: Compute short SHA + id: vars + run: echo "sha_short=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT + + - name: Check short SHA + run: echo ${{ steps.vars.outputs.sha_short }} + + - name: Install Skaffold + run: | + curl -Lo skaffold https://storage.googleapis.com/skaffold/releases/latest/skaffold-linux-amd64 && \ + sudo install skaffold /usr/local/bin/ + skaffold version + + - name: Cache skaffold image builds & config + uses: actions/cache@v2 + with: + path: ~/.skaffold/ + key: sha-${{ steps.vars.outputs.sha_short }} + restore-keys: | + sha-${{ steps.vars.outputs.sha_short }} + sha- + + - name: Build, tag, and push image to Amazon ECR + env: + IMAGE_TAG: sha-${{ steps.vars.outputs.sha_short }} + run: | + skaffold build diff --git a/Dockerfile b/Dockerfile index 13a8ed6d..3b6ad025 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ # docker build . -t cosmwasm/xiond:latest # docker run --rm -it cosmwasm/xiond:latest /bin/sh -FROM golang:1.19-alpine3.15 AS go-builder +FROM golang:1.19-alpine3.17 AS go-builder ARG arch=x86_64 # this comes from standard alpine nightly file @@ -29,20 +29,45 @@ RUN echo "Ensuring binary is statically linked ..." \ && (file /code/build/xiond | grep "statically linked") # -------------------------------------------------------- -FROM alpine:3.15 +FROM alpine:3.17 -COPY --from=go-builder /code/build/wasmd /usr/bin/wasmd + COPY --from=go-builder /code/build/xiond /usr/bin/xiond -COPY docker/* /opt/ -RUN chmod +x /opt/*.sh + # rest server + EXPOSE 1317 + # tendermint grpc + EXPOSE 9090 + # tendermint p2p + EXPOSE 26656 + # tendermint rpc + EXPOSE 26657 + # tendermint prometheus + EXPOSE 26660 -WORKDIR /opt + RUN set -euxo pipefail \ + && apk add --no-cache \ + aria2 \ + aws-cli \ + bash \ + curl \ + htop \ + jq \ + lz4 \ + tini -# rest server -EXPOSE 1317 -# tendermint p2p -EXPOSE 26656 -# tendermint rpc -EXPOSE 26657 + RUN set -euxo pipefail \ + && addgroup -S xiond \ + && adduser \ + --disabled-password \ + --gecos xiond \ + --ingroup xiond \ + xiond + + RUN set -eux \ + && chown -R xiond:xiond /home/xiond + + USER xiond:xiond + WORKDIR /home/xiond/.xiond + + CMD ["/usr/bin/xiond", "version"] -CMD ["/usr/bin/wasmd", "version"] \ No newline at end of file diff --git a/skaffold.yaml b/skaffold.yaml new file mode 100644 index 00000000..9522df44 --- /dev/null +++ b/skaffold.yaml @@ -0,0 +1,25 @@ +--- +apiVersion: skaffold/v4beta2 +kind: Config + +build: + local: + push: true + useBuildkit: true + concurrency: 0 + tryImportMissing: true + tagPolicy: + envTemplate: + template: "{{ .IMAGE_TAG }}" + platforms: ["linux/amd64"] + artifacts: + - image: 385156030167.dkr.ecr.us-east-1.amazonaws.com/burnt/xiond + context: . + docker: + cacheFrom: + - 385156030167.dkr.ecr.us-east-1.amazonaws.com/burnt/xiond + +deploy: + docker: + images: + - 385156030167.dkr.ecr.us-east-1.amazonaws.com/burnt/xiond From a059203f6c3905fb33892238f2f49f704fc40544 Mon Sep 17 00:00:00 2001 From: Ash Date: Wed, 5 Apr 2023 01:39:20 +0200 Subject: [PATCH 017/501] test passes --- integration_tests/dungeon_test.go | 21 ++++++++------------- integration_tests/go.mod | 2 +- 2 files changed, 9 insertions(+), 14 deletions(-) diff --git a/integration_tests/dungeon_test.go b/integration_tests/dungeon_test.go index 925f28ca..c117034f 100644 --- a/integration_tests/dungeon_test.go +++ b/integration_tests/dungeon_test.go @@ -355,22 +355,17 @@ func modifyGenesisShortProposals(votingPeriod string, maxDepositPeriod string) f if err := json.Unmarshal(genbz, &g); err != nil { return nil, fmt.Errorf("failed to unmarshal genesis file: %w", err) } - votingParams := map[string]interface{}{"voting_period": votingPeriod} - if err := dyno.Set(g, votingParams, "app_state", "gov", "voting_params"); err != nil { - return nil, fmt.Errorf("failed to set voting params in genesis json: %w", err) + if err := dyno.Set(g, votingPeriod, "app_state", "gov", "params", "voting_period"); err != nil { + return nil, fmt.Errorf("failed to set voting period in genesis json: %w", err) } - minDeposit := []interface{}{ - map[string]interface{}{ - "denom": chainConfig.Denom, - "amount": "100", - }, + if err := dyno.Set(g, maxDepositPeriod, "app_state", "gov", "params", "max_deposit_period"); err != nil { + return nil, fmt.Errorf("failed to set voting period in genesis json: %w", err) } - depositParams := map[string]interface{}{ - "max_deposit_period": maxDepositPeriod, - "min_deposit": minDeposit, + if err := dyno.Set(g, chainConfig.Denom, "app_state", "gov", "params", "min_deposit", 0, "denom"); err != nil { + return nil, fmt.Errorf("failed to set voting period in genesis json: %w", err) } - if err := dyno.Set(g, depositParams, "app_state", "gov", "deposit_params"); err != nil { - return nil, fmt.Errorf("failed to set deposit params in genesis json: %w", err) + if err := dyno.Set(g, "100", "app_state", "gov", "params", "min_deposit", 0, "amount"); err != nil { + return nil, fmt.Errorf("failed to set voting period in genesis json: %w", err) } out, err := json.Marshal(g) if err != nil { diff --git a/integration_tests/go.mod b/integration_tests/go.mod index c731aa47..029f483d 100644 --- a/integration_tests/go.mod +++ b/integration_tests/go.mod @@ -236,5 +236,5 @@ replace ( github.com/ChainSafe/go-schnorrkel/1 => github.com/ChainSafe/go-schnorrkel v1.0.0 github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 github.com/vedhavyas/go-subkey => github.com/strangelove-ventures/go-subkey v1.0.7 - github.com/strangelove-ventures/interchaintest/v7 => ../../interchaintest + github.com/strangelove-ventures/interchaintest/v7 => github.com/burnt-labs/interchaintest/v7 v7.0.0-20230404233655-f37b60cca9b6 ) From 77da6cf817774252d422b1745e06593e4db5e850 Mon Sep 17 00:00:00 2001 From: Ash Date: Wed, 5 Apr 2023 19:35:14 +0200 Subject: [PATCH 018/501] cleanup --- .github/integration-tests.yml | 1 - integration_tests/dungeon_test.go | 6 +++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/.github/integration-tests.yml b/.github/integration-tests.yml index fcc0274b..c7e479ef 100644 --- a/.github/integration-tests.yml +++ b/.github/integration-tests.yml @@ -61,7 +61,6 @@ jobs: matrix: test_type: - "DungeonTransferBlock" - - "ScheduledCall" steps: - name: Set up Go 1.18 diff --git a/integration_tests/dungeon_test.go b/integration_tests/dungeon_test.go index c117034f..3ff58970 100644 --- a/integration_tests/dungeon_test.go +++ b/integration_tests/dungeon_test.go @@ -4,15 +4,15 @@ import ( "context" "encoding/json" "fmt" - "github.com/cosmos/cosmos-sdk/codec" - cdctypes "github.com/cosmos/cosmos-sdk/codec/types" - authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" "os" "strings" "testing" "time" + "github.com/cosmos/cosmos-sdk/codec" + cdctypes "github.com/cosmos/cosmos-sdk/codec/types" "github.com/cosmos/cosmos-sdk/types" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" transfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" From 32999e0ddfbb4975f3ae19095b2848f16716239a Mon Sep 17 00:00:00 2001 From: Ash Date: Wed, 5 Apr 2023 19:57:51 +0200 Subject: [PATCH 019/501] move workflow --- .github/{ => workflows}/integration-tests.yml | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/{ => workflows}/integration-tests.yml (100%) diff --git a/.github/integration-tests.yml b/.github/workflows/integration-tests.yml similarity index 100% rename from .github/integration-tests.yml rename to .github/workflows/integration-tests.yml From 924800b8cd1f511f8b978164e1670432f5c57ecc Mon Sep 17 00:00:00 2001 From: Ash Date: Wed, 5 Apr 2023 20:22:32 +0200 Subject: [PATCH 020/501] wrong dir --- .github/workflows/integration-tests.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index c7e479ef..4a6b2284 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -94,9 +94,9 @@ jobs: - name: rename xion image run: docker tag ghcr.io/burnt-labs/xion/xion:${{ steps.meta-xion.outputs.version }} xion:prebuilt - name: build go test binary - run: cd ibc_tests && go test -c + run: cd integration_tests && go test -c - name: Run all up ci test - run: ./ibc_tests/ibc_tests.test -test.failfast -test.v -test.run Test${{ matrix.test_type }} + run: ./integration_tests/integration_tests.test -test.failfast -test.v -test.run Test${{ matrix.test_type }} env: E2E_SKIP_CLEANUP: true XION_IMAGE: xion:prebuilt From 3dd5ba04e3d5d89e20405f2b5018bfd7f807036e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 5 Apr 2023 22:05:20 +0000 Subject: [PATCH 021/501] Bump actions/cache from 2 to 3 Bumps [actions/cache](https://github.com/actions/cache) from 2 to 3. - [Release notes](https://github.com/actions/cache/releases) - [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md) - [Commits](https://github.com/actions/cache/compare/v2...v3) --- updated-dependencies: - dependency-name: actions/cache dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/aws-ecr.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/aws-ecr.yml b/.github/workflows/aws-ecr.yml index d5dd110e..986565f9 100644 --- a/.github/workflows/aws-ecr.yml +++ b/.github/workflows/aws-ecr.yml @@ -43,7 +43,7 @@ jobs: skaffold version - name: Cache skaffold image builds & config - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: ~/.skaffold/ key: sha-${{ steps.vars.outputs.sha_short }} From 09542b57c2a9625abfa08a177dbdddc8f136a38f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 5 Apr 2023 22:05:24 +0000 Subject: [PATCH 022/501] Bump actions/checkout from 2 to 3 Bumps [actions/checkout](https://github.com/actions/checkout) from 2 to 3. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v2...v3) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/aws-ecr.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/aws-ecr.yml b/.github/workflows/aws-ecr.yml index d5dd110e..08caff2f 100644 --- a/.github/workflows/aws-ecr.yml +++ b/.github/workflows/aws-ecr.yml @@ -16,7 +16,7 @@ jobs: steps: - name: Check out code - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@v1 From b65856ac3b1d2c16dffd01279e060769cf3bc697 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 6 Apr 2023 22:07:01 +0000 Subject: [PATCH 023/501] Bump github.com/CosmWasm/wasmvm from 1.2.1 to 1.2.2 Bumps [github.com/CosmWasm/wasmvm](https://github.com/CosmWasm/wasmvm) from 1.2.1 to 1.2.2. - [Release notes](https://github.com/CosmWasm/wasmvm/releases) - [Changelog](https://github.com/CosmWasm/wasmvm/blob/main/CHANGELOG.md) - [Commits](https://github.com/CosmWasm/wasmvm/compare/v1.2.1...v1.2.2) --- updated-dependencies: - dependency-name: github.com/CosmWasm/wasmvm dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index ff984726..add4cb3e 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/burnt-labs/xion go 1.19 require ( - github.com/CosmWasm/wasmvm v1.2.1 + github.com/CosmWasm/wasmvm v1.2.2 github.com/cosmos/cosmos-proto v1.0.0-beta.2 github.com/cosmos/cosmos-sdk v0.47.0 github.com/cosmos/gogogateway v1.2.0 // indirect diff --git a/go.sum b/go.sum index 332c51e9..1bbbab6c 100644 --- a/go.sum +++ b/go.sum @@ -212,8 +212,8 @@ github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQ github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= github.com/CosmWasm/wasmd v0.40.0-rc.0 h1:QhJzLSWQCjUjrEPO2dc61WgafnaxetuKZRBHUfKJR84= github.com/CosmWasm/wasmd v0.40.0-rc.0/go.mod h1:9MispMuIWmjs6HlgRx+XPLfOD0y1k7iQx5KIE2cNGTc= -github.com/CosmWasm/wasmvm v1.2.1 h1:si0tRsRDdUShV0k51Wn6zRKlmj3/WWP9Yr4cLmDTf+8= -github.com/CosmWasm/wasmvm v1.2.1/go.mod h1:vW/E3h8j9xBQs9bCoijDuawKo9kCtxOaS8N8J7KFtkc= +github.com/CosmWasm/wasmvm v1.2.2 h1:F1lTaMRYxk91V9ufV8gYhzLea7sd6AG/GvY1h2JtZsY= +github.com/CosmWasm/wasmvm v1.2.2/go.mod h1:vW/E3h8j9xBQs9bCoijDuawKo9kCtxOaS8N8J7KFtkc= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= From 496f39641b6337794de72b4edd2b5255da50aaa4 Mon Sep 17 00:00:00 2001 From: Ash Date: Fri, 7 Apr 2023 09:07:33 -0700 Subject: [PATCH 024/501] go mod --- integration_tests/go.mod | 4 ++-- integration_tests/go.sum | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/integration_tests/go.mod b/integration_tests/go.mod index 029f483d..947a4dc6 100644 --- a/integration_tests/go.mod +++ b/integration_tests/go.mod @@ -26,6 +26,7 @@ require ( github.com/mr-tron/base58 v1.2.0 github.com/pelletier/go-toml v1.9.5 github.com/rivo/tview v0.0.0-20220307222120-9994674d60a8 + github.com/strangelove-ventures/interchaintest/v7 v7.0.0-20230326163644-f0ba01f43314 github.com/stretchr/testify v1.8.2 go.uber.org/multierr v1.8.0 go.uber.org/zap v1.24.0 @@ -188,7 +189,6 @@ require ( github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/spf13/viper v1.15.0 // indirect - github.com/strangelove-ventures/interchaintest/v7 v7.0.0-20230326163644-f0ba01f43314 // indirect github.com/subosito/gotenv v1.4.2 // indirect github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c // indirect @@ -235,6 +235,6 @@ replace ( github.com/ChainSafe/go-schnorrkel => github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d github.com/ChainSafe/go-schnorrkel/1 => github.com/ChainSafe/go-schnorrkel v1.0.0 github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 - github.com/vedhavyas/go-subkey => github.com/strangelove-ventures/go-subkey v1.0.7 github.com/strangelove-ventures/interchaintest/v7 => github.com/burnt-labs/interchaintest/v7 v7.0.0-20230404233655-f37b60cca9b6 + github.com/vedhavyas/go-subkey => github.com/strangelove-ventures/go-subkey v1.0.7 ) diff --git a/integration_tests/go.sum b/integration_tests/go.sum index a7700cce..a2c2a952 100644 --- a/integration_tests/go.sum +++ b/integration_tests/go.sum @@ -318,6 +318,8 @@ github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOF github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce h1:YtWJF7RHm2pYCvA5t0RPmAaLUhREsKuKd+SLhxFbFeQ= github.com/burnt-labs/interchaintest/v6 v6.0.0-20230314191219-148474820e92 h1:8PjVIQPom8OhDLy2lh4REpPqil3egD8vDAyF4+s5VTc= github.com/burnt-labs/interchaintest/v6 v6.0.0-20230314191219-148474820e92/go.mod h1:5aNprRJ5FQSL7KP2uhgukg3yhVvVtKvbSrwM6KWORtY= +github.com/burnt-labs/interchaintest/v7 v7.0.0-20230404233655-f37b60cca9b6 h1:ek5Y7blC3YSDZ34GrGxjT7wo4F6PgrdSDYYKf2ILOOw= +github.com/burnt-labs/interchaintest/v7 v7.0.0-20230404233655-f37b60cca9b6/go.mod h1:+Tg2jC5C0eI2iOTs24OYs0NgSjU4Bw5XAQ5HVkVMwzc= github.com/c-bata/go-prompt v0.2.2/go.mod h1:VzqtzE2ksDBcdln8G7mk2RX9QyGjH+OVqOCSiVIqS34= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= From 2a77afe78e50711541d41a3393d6095079a82b0b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 7 Apr 2023 16:09:07 +0000 Subject: [PATCH 025/501] Bump aws-actions/configure-aws-credentials from 1 to 2 Bumps [aws-actions/configure-aws-credentials](https://github.com/aws-actions/configure-aws-credentials) from 1 to 2. - [Release notes](https://github.com/aws-actions/configure-aws-credentials/releases) - [Changelog](https://github.com/aws-actions/configure-aws-credentials/blob/main/CHANGELOG.md) - [Commits](https://github.com/aws-actions/configure-aws-credentials/compare/v1...v2) --- updated-dependencies: - dependency-name: aws-actions/configure-aws-credentials dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/aws-ecr.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/aws-ecr.yml b/.github/workflows/aws-ecr.yml index 0959beda..98847006 100644 --- a/.github/workflows/aws-ecr.yml +++ b/.github/workflows/aws-ecr.yml @@ -19,7 +19,7 @@ jobs: uses: actions/checkout@v3 - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@v1 + uses: aws-actions/configure-aws-credentials@v2 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} From 2722f0fb1234db97e9bf9b98f744675eb8fb1b26 Mon Sep 17 00:00:00 2001 From: bigs Date: Tue, 11 Apr 2023 15:57:17 -0400 Subject: [PATCH 026/501] Fix libwasmvm dependency (#17) --- Dockerfile | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index 3b6ad025..463b7d67 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,10 +15,10 @@ RUN apk add git WORKDIR /code COPY . /code/ # See https://github.com/CosmWasm/wasmvm/releases -ADD https://github.com/CosmWasm/wasmvm/releases/download/v1.2.1/libwasmvm_muslc.aarch64.a /lib/libwasmvm_muslc.aarch64.a -ADD https://github.com/CosmWasm/wasmvm/releases/download/v1.2.1/libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.x86_64.a -RUN sha256sum /lib/libwasmvm_muslc.aarch64.a | grep 86bc5fdc0f01201481c36e17cd3dfed6e9650d22e1c5c8983a5b78c231789ee0 -RUN sha256sum /lib/libwasmvm_muslc.x86_64.a | grep a00700aa19f5bfe0f46290ddf69bf51eb03a6dfcd88b905e1081af2e42dbbafc +ADD https://github.com/CosmWasm/wasmvm/releases/download/v1.2.2/libwasmvm_muslc.aarch64.a /lib/libwasmvm_muslc.aarch64.a +ADD https://github.com/CosmWasm/wasmvm/releases/download/v1.2.2/libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.x86_64.a +RUN sha256sum /lib/libwasmvm_muslc.aarch64.a | grep 20ab42fceddd5347b973c254717eed62b2d46925c098f58304d09488ed59464a +RUN sha256sum /lib/libwasmvm_muslc.x86_64.a | grep fc859817a1c548ceb0e02ad8cf5c8e374d240caac547d04dd02b284ace8ab33d # Copy the library you want to the final location that will be found by the linker flag `-lwasmvm_muslc` RUN cp /lib/libwasmvm_muslc.${arch}.a /lib/libwasmvm_muslc.a From a000ccf7cd63cae2d2bc807616428f15988e9f81 Mon Sep 17 00:00:00 2001 From: Francis Roch Date: Wed, 12 Apr 2023 15:54:53 -0400 Subject: [PATCH 027/501] Add Github Workflow for dockerhub --- .github/workflows/docker-hub.yml | 45 ++++++++++++++++++++++++++++++++ Dockerfile | 2 +- 2 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/docker-hub.yml diff --git a/.github/workflows/docker-hub.yml b/.github/workflows/docker-hub.yml new file mode 100644 index 00000000..1fe9e213 --- /dev/null +++ b/.github/workflows/docker-hub.yml @@ -0,0 +1,45 @@ +--- +name: Build and Push to Docker Hub + +on: + push: + branches: + - main + workflow_dispatch: + +jobs: + release: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + fetch-depth: 0 + + - name: Login to Docker Hub + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKER_HUB_USERNAME }} + password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} + + - name: Set up docker buildx + uses: docker/setup-buildx-action@v1 + + - name: Extract metadata for docker + id: meta + uses: docker/metadata-action@v4 + with: + images: burntnetwork/xion + tags: | + type=semver,pattern={{version}},priority=1000 + type=sha,priority=700 + + - name: Build and push docker image + uses: docker/build-push-action@v2 + with: + context: . + push: true + tags: ${{ steps.meta.outputs.tags }} + cache-from: type=gha + cache-to: type=gha,mode=max + target: xion-release diff --git a/Dockerfile b/Dockerfile index 463b7d67..8df91813 100644 --- a/Dockerfile +++ b/Dockerfile @@ -29,7 +29,7 @@ RUN echo "Ensuring binary is statically linked ..." \ && (file /code/build/xiond | grep "statically linked") # -------------------------------------------------------- -FROM alpine:3.17 +FROM alpine:3.17 AS xion-release COPY --from=go-builder /code/build/xiond /usr/bin/xiond From 185d83b3d6c161416e0ccd56a8a8c953bf30144b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 12 Apr 2023 22:04:33 +0000 Subject: [PATCH 028/501] Bump docker/login-action from 1 to 2 Bumps [docker/login-action](https://github.com/docker/login-action) from 1 to 2. - [Release notes](https://github.com/docker/login-action/releases) - [Commits](https://github.com/docker/login-action/compare/v1...v2) --- updated-dependencies: - dependency-name: docker/login-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/docker-hub.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker-hub.yml b/.github/workflows/docker-hub.yml index 1fe9e213..26dd3c41 100644 --- a/.github/workflows/docker-hub.yml +++ b/.github/workflows/docker-hub.yml @@ -17,7 +17,7 @@ jobs: fetch-depth: 0 - name: Login to Docker Hub - uses: docker/login-action@v1 + uses: docker/login-action@v2 with: username: ${{ secrets.DOCKER_HUB_USERNAME }} password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} From 3697251a1915394a0686d9bb060378e7902a0827 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 12 Apr 2023 22:04:43 +0000 Subject: [PATCH 029/501] Bump actions/checkout from 2 to 3 Bumps [actions/checkout](https://github.com/actions/checkout) from 2 to 3. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v2...v3) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/docker-hub.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker-hub.yml b/.github/workflows/docker-hub.yml index 1fe9e213..b272feaf 100644 --- a/.github/workflows/docker-hub.yml +++ b/.github/workflows/docker-hub.yml @@ -12,7 +12,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: fetch-depth: 0 From cd24dceda44d701c22cb6450e6d4a98431a7e013 Mon Sep 17 00:00:00 2001 From: bigs Date: Wed, 19 Apr 2023 14:10:26 -0400 Subject: [PATCH 030/501] Add local docker-compose based testnet (#25) * Add local account script * Add local config for local testnet * Add docker-compose config * Fix xiond command line args --- Dockerfile | 24 + docker-compose.yml | 31 ++ docker/entrypoint.sh | 10 + docker/local-config/app.toml | 276 ++++++++++ docker/local-config/client.toml | 17 + docker/local-config/config.toml | 471 ++++++++++++++++++ docker/local-config/genesis.json | 359 +++++++++++++ ...df872a848b4715331eb8e8ff11343c9f90806.json | 1 + docker/local-config/node_key.json | 1 + docker/local-config/priv_validator_key.json | 11 + scripts/setup_local_testnet_accounts.sh | 28 ++ 11 files changed, 1229 insertions(+) create mode 100644 docker-compose.yml create mode 100644 docker/entrypoint.sh create mode 100644 docker/local-config/app.toml create mode 100644 docker/local-config/client.toml create mode 100644 docker/local-config/config.toml create mode 100644 docker/local-config/genesis.json create mode 100644 docker/local-config/gentx/gentx-9e5df872a848b4715331eb8e8ff11343c9f90806.json create mode 100644 docker/local-config/node_key.json create mode 100644 docker/local-config/priv_validator_key.json create mode 100755 scripts/setup_local_testnet_accounts.sh diff --git a/Dockerfile b/Dockerfile index 8df91813..f73a7404 100644 --- a/Dockerfile +++ b/Dockerfile @@ -28,6 +28,30 @@ RUN LEDGER_ENABLED=false BUILD_TAGS=muslc LINK_STATICALLY=true make build RUN echo "Ensuring binary is statically linked ..." \ && (file /code/build/xiond | grep "statically linked") +# -------------------------------------------------------- +FROM alpine:3.16 AS localdev + + COPY --from=go-builder /code/build/xiond /usr/bin/xiond + + COPY ./docker/local-config /xion/config + COPY ./docker/entrypoint.sh /root/entrypoint.sh + RUN chmod +x /root/entrypoint.sh + + # rest server + EXPOSE 1317 + # tendermint grpc + EXPOSE 9090 + # tendermint p2p + EXPOSE 26656 + # tendermint rpc + EXPOSE 26657 + # tendermint prometheus + EXPOSE 26660 + + VOLUME [ "/xion/data" ] + + CMD ["/root/entrypoint.sh"] + # -------------------------------------------------------- FROM alpine:3.17 AS xion-release diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..f941109e --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,31 @@ +version: "3.9" +services: + + testnet: + build: + context: . + dockerfile: Dockerfile + target: localdev + platform: linux/amd64 + volumes: + - testnet-data:/xion/data + ports: + - "1317:1317" + - "26656:26656" + - "26657:26657" + + release: + build: + context: . + dockerfile: Dockerfile + target: xion-release + platform: linux/amd64 + volumes: + - testnet-data:/xion/data + ports: + - "1317:1317" + - "26656:26656" + - "26657:26657" + +volumes: + testnet-data: diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh new file mode 100644 index 00000000..42ed1ad6 --- /dev/null +++ b/docker/entrypoint.sh @@ -0,0 +1,10 @@ +#!/bin/sh + +if [[ ! -f /xion/data/priv_validator_state.json ]]; then + mv /xion/config /xion-config + xiond init fogo --chain-id xion-local-testnet-1 --home /xion + rm -r /xion/config + mv /xion-config /xion/config +fi + +xiond start --home /xion --trace diff --git a/docker/local-config/app.toml b/docker/local-config/app.toml new file mode 100644 index 00000000..f750ecb1 --- /dev/null +++ b/docker/local-config/app.toml @@ -0,0 +1,276 @@ +# This is a TOML config file. +# For more information, see https://github.com/toml-lang/toml + +############################################################################### +### Base Configuration ### +############################################################################### + +# The minimum gas prices a validator is willing to accept for processing a +# transaction. A transaction's fees must meet the minimum of any denomination +# specified in this config (e.g. 0.25token1;0.0001token2). +minimum-gas-prices = "0uxion" + +# default: the last 362880 states are kept, pruning at 10 block intervals +# nothing: all historic states will be saved, nothing will be deleted (i.e. archiving node) +# everything: 2 latest states will be kept; pruning at 10 block intervals. +# custom: allow pruning options to be manually specified through 'pruning-keep-recent', and 'pruning-interval' +pruning = "default" + +# These are applied if and only if the pruning strategy is custom. +pruning-keep-recent = "0" +pruning-interval = "0" + +# HaltHeight contains a non-zero block height at which a node will gracefully +# halt and shutdown that can be used to assist upgrades and testing. +# +# Note: Commitment of state will be attempted on the corresponding block. +halt-height = 0 + +# HaltTime contains a non-zero minimum block time (in Unix seconds) at which +# a node will gracefully halt and shutdown that can be used to assist upgrades +# and testing. +# +# Note: Commitment of state will be attempted on the corresponding block. +halt-time = 0 + +# MinRetainBlocks defines the minimum block height offset from the current +# block being committed, such that all blocks past this offset are pruned +# from Tendermint. It is used as part of the process of determining the +# ResponseCommit.RetainHeight value during ABCI Commit. A value of 0 indicates +# that no blocks should be pruned. +# +# This configuration value is only responsible for pruning Tendermint blocks. +# It has no bearing on application state pruning which is determined by the +# "pruning-*" configurations. +# +# Note: Tendermint block pruning is dependant on this parameter in conunction +# with the unbonding (safety threshold) period, state pruning and state sync +# snapshot parameters to determine the correct minimum value of +# ResponseCommit.RetainHeight. +min-retain-blocks = 0 + +# InterBlockCache enables inter-block caching. +inter-block-cache = true + +# IndexEvents defines the set of events in the form {eventType}.{attributeKey}, +# which informs Tendermint what to index. If empty, all events will be indexed. +# +# Example: +# ["message.sender", "message.recipient"] +index-events = [] + +# IavlCacheSize set the size of the iavl tree cache (in number of nodes). +iavl-cache-size = 781250 + +# IAVLDisableFastNode enables or disables the fast node feature of IAVL. +# Default is false. +iavl-disable-fastnode = false + +# IAVLLazyLoading enable/disable the lazy loading of iavl store. +# Default is false. +iavl-lazy-loading = false + +# AppDBBackend defines the database backend type to use for the application and snapshots DBs. +# An empty string indicates that a fallback will be used. +# First fallback is the deprecated compile-time types.DBBackend value. +# Second fallback (if the types.DBBackend also isn't set), is the db-backend value set in Tendermint's config.toml. +app-db-backend = "" + +############################################################################### +### Telemetry Configuration ### +############################################################################### + +[telemetry] + +# Prefixed with keys to separate services. +service-name = "" + +# Enabled enables the application telemetry functionality. When enabled, +# an in-memory sink is also enabled by default. Operators may also enabled +# other sinks such as Prometheus. +enabled = false + +# Enable prefixing gauge values with hostname. +enable-hostname = false + +# Enable adding hostname to labels. +enable-hostname-label = false + +# Enable adding service to labels. +enable-service-label = false + +# PrometheusRetentionTime, when positive, enables a Prometheus metrics sink. +prometheus-retention-time = 0 + +# GlobalLabels defines a global set of name/value label tuples applied to all +# metrics emitted using the wrapper functions defined in telemetry package. +# +# Example: +# [["chain_id", "cosmoshub-1"]] +global-labels = [ +] + +############################################################################### +### API Configuration ### +############################################################################### + +[api] + +# Enable defines if the API server should be enabled. +enable = false + +# Swagger defines if swagger documentation should automatically be registered. +swagger = false + +# Address defines the API server to listen on. +address = "tcp://localhost:1317" + +# MaxOpenConnections defines the number of maximum open connections. +max-open-connections = 1000 + +# RPCReadTimeout defines the Tendermint RPC read timeout (in seconds). +rpc-read-timeout = 10 + +# RPCWriteTimeout defines the Tendermint RPC write timeout (in seconds). +rpc-write-timeout = 0 + +# RPCMaxBodyBytes defines the Tendermint maximum request body (in bytes). +rpc-max-body-bytes = 1000000 + +# EnableUnsafeCORS defines if CORS should be enabled (unsafe - use it at your own risk). +enabled-unsafe-cors = false + +############################################################################### +### Rosetta Configuration ### +############################################################################### + +[rosetta] + +# Enable defines if the Rosetta API server should be enabled. +enable = false + +# Address defines the Rosetta API server to listen on. +address = ":8080" + +# Network defines the name of the blockchain that will be returned by Rosetta. +blockchain = "app" + +# Network defines the name of the network that will be returned by Rosetta. +network = "network" + +# Retries defines the number of retries when connecting to the node before failing. +retries = 3 + +# Offline defines if Rosetta server should run in offline mode. +offline = false + +# EnableDefaultSuggestedFee defines if the server should suggest fee by default. +# If 'construction/medata' is called without gas limit and gas price, +# suggested fee based on gas-to-suggest and denom-to-suggest will be given. +enable-fee-suggestion = false + +# GasToSuggest defines gas limit when calculating the fee +gas-to-suggest = 200000 + +# DenomToSuggest defines the defult denom for fee suggestion. +# Price must be in minimum-gas-prices. +denom-to-suggest = "uatom" + +############################################################################### +### gRPC Configuration ### +############################################################################### + +[grpc] + +# Enable defines if the gRPC server should be enabled. +enable = true + +# Address defines the gRPC server address to bind to. +address = "localhost:9090" + +# MaxRecvMsgSize defines the max message size in bytes the server can receive. +# The default value is 10MB. +max-recv-msg-size = "10485760" + +# MaxSendMsgSize defines the max message size in bytes the server can send. +# The default value is math.MaxInt32. +max-send-msg-size = "2147483647" + +############################################################################### +### gRPC Web Configuration ### +############################################################################### + +[grpc-web] + +# GRPCWebEnable defines if the gRPC-web should be enabled. +# NOTE: gRPC must also be enabled, otherwise, this configuration is a no-op. +enable = true + +# Address defines the gRPC-web server address to bind to. +address = "localhost:9091" + +# EnableUnsafeCORS defines if CORS should be enabled (unsafe - use it at your own risk). +enable-unsafe-cors = false + +############################################################################### +### State Sync Configuration ### +############################################################################### + +# State sync snapshots allow other nodes to rapidly join the network without replaying historical +# blocks, instead downloading and applying a snapshot of the application state at a given height. +[state-sync] + +# snapshot-interval specifies the block interval at which local state sync snapshots are +# taken (0 to disable). +snapshot-interval = 0 + +# snapshot-keep-recent specifies the number of recent snapshots to keep and serve (0 to keep all). +snapshot-keep-recent = 2 + +############################################################################### +### Store / State Streaming ### +############################################################################### + +[store] +streamers = [] + +[streamers] +[streamers.file] +keys = ["*", ] +write_dir = "" +prefix = "" + +# output-metadata specifies if output the metadata file which includes the abci request/responses +# during processing the block. +output-metadata = "true" + +# stop-node-on-error specifies if propagate the file streamer errors to consensus state machine. +stop-node-on-error = "true" + +# fsync specifies if call fsync after writing the files. +fsync = "false" + +############################################################################### +### Mempool ### +############################################################################### + +[mempool] +# Setting max-txs to 0 will allow for a unbounded amount of transactions in the mempool. +# Setting max_txs to negative 1 (-1) will disable transactions from being inserted into the mempool. +# Setting max_txs to a positive number (> 0) will limit the number of transactions in the mempool, by the specified amount. +# +# Note, this configuration only applies to SDK built-in app-side mempool +# implementations. +max-txs = "5000" + +[wasm] +# Smart query gas limit is the max gas to be used in a smart query contract call +query_gas_limit = 3000000 + +# in-memory cache for Wasm contracts. Set to 0 to disable. +# The value is in MiB not bytes +memory_cache_size = 100 + +# Simulation gas limit is the max gas to be used in a tx simulation call. +# When not set the consensus max block gas is used instead +# simulation_gas_limit = diff --git a/docker/local-config/client.toml b/docker/local-config/client.toml new file mode 100644 index 00000000..462cfa99 --- /dev/null +++ b/docker/local-config/client.toml @@ -0,0 +1,17 @@ +# This is a TOML config file. +# For more information, see https://github.com/toml-lang/toml + +############################################################################### +### Client Configuration ### +############################################################################### + +# The network chain ID +chain-id = "xion-local-testnet-1" +# The keyring's backend, where the keys are stored (os|file|kwallet|pass|test|memory) +keyring-backend = "os" +# CLI output format (text|json) +output = "text" +# : to Tendermint RPC interface for this chain +node = "tcp://localhost:26657" +# Transaction broadcasting mode (sync|async) +broadcast-mode = "sync" diff --git a/docker/local-config/config.toml b/docker/local-config/config.toml new file mode 100644 index 00000000..8f651203 --- /dev/null +++ b/docker/local-config/config.toml @@ -0,0 +1,471 @@ +# This is a TOML config file. +# For more information, see https://github.com/toml-lang/toml + +# NOTE: Any path below can be absolute (e.g. "/var/myawesomeapp/data") or +# relative to the home directory (e.g. "data"). The home directory is +# "$HOME/.cometbft" by default, but could be changed via $CMTHOME env variable +# or --home cmd flag. + +####################################################################### +### Main Base Config Options ### +####################################################################### + +# TCP or UNIX socket address of the ABCI application, +# or the name of an ABCI application compiled in with the CometBFT binary +proxy_app = "tcp://127.0.0.1:26658" + +# A custom human readable name for this node +moniker = "validator" + +# If this node is many blocks behind the tip of the chain, BlockSync +# allows them to catchup quickly by downloading blocks in parallel +# and verifying their commits +# +# Deprecated: this key will be removed and BlockSync will be enabled +# unconditionally in the next major release. +block_sync = true + +# Database backend: goleveldb | cleveldb | boltdb | rocksdb | badgerdb +# * goleveldb (github.com/syndtr/goleveldb - most popular implementation) +# - pure go +# - stable +# * cleveldb (uses levigo wrapper) +# - fast +# - requires gcc +# - use cleveldb build tag (go build -tags cleveldb) +# * boltdb (uses etcd's fork of bolt - github.com/etcd-io/bbolt) +# - EXPERIMENTAL +# - may be faster is some use-cases (random reads - indexer) +# - use boltdb build tag (go build -tags boltdb) +# * rocksdb (uses github.com/tecbot/gorocksdb) +# - EXPERIMENTAL +# - requires gcc +# - use rocksdb build tag (go build -tags rocksdb) +# * badgerdb (uses github.com/dgraph-io/badger) +# - EXPERIMENTAL +# - use badgerdb build tag (go build -tags badgerdb) +db_backend = "goleveldb" + +# Database directory +db_dir = "data" + +# Output level for logging, including package level options +log_level = "info" + +# Output format: 'plain' (colored text) or 'json' +log_format = "plain" + +##### additional base config options ##### + +# Path to the JSON file containing the initial validator set and other meta data +genesis_file = "config/genesis.json" + +# Path to the JSON file containing the private key to use as a validator in the consensus protocol +priv_validator_key_file = "config/priv_validator_key.json" + +# Path to the JSON file containing the last sign state of a validator +priv_validator_state_file = "data/priv_validator_state.json" + +# TCP or UNIX socket address for CometBFT to listen on for +# connections from an external PrivValidator process +priv_validator_laddr = "" + +# Path to the JSON file containing the private key to use for node authentication in the p2p protocol +node_key_file = "config/node_key.json" + +# Mechanism to connect to the ABCI application: socket | grpc +abci = "socket" + +# If true, query the ABCI app on connecting to a new peer +# so the app can decide if we should keep the connection or not +filter_peers = false + + +####################################################################### +### Advanced Configuration Options ### +####################################################################### + +####################################################### +### RPC Server Configuration Options ### +####################################################### +[rpc] + +# TCP or UNIX socket address for the RPC server to listen on +laddr = "tcp://127.0.0.1:26657" + +# A list of origins a cross-domain request can be executed from +# Default value '[]' disables cors support +# Use '["*"]' to allow any origin +cors_allowed_origins = [] + +# A list of methods the client is allowed to use with cross-domain requests +cors_allowed_methods = ["HEAD", "GET", "POST", ] + +# A list of non simple headers the client is allowed to use with cross-domain requests +cors_allowed_headers = ["Origin", "Accept", "Content-Type", "X-Requested-With", "X-Server-Time", ] + +# TCP or UNIX socket address for the gRPC server to listen on +# NOTE: This server only supports /broadcast_tx_commit +grpc_laddr = "" + +# Maximum number of simultaneous connections. +# Does not include RPC (HTTP&WebSocket) connections. See max_open_connections +# If you want to accept a larger number than the default, make sure +# you increase your OS limits. +# 0 - unlimited. +# Should be < {ulimit -Sn} - {MaxNumInboundPeers} - {MaxNumOutboundPeers} - {N of wal, db and other open files} +# 1024 - 40 - 10 - 50 = 924 = ~900 +grpc_max_open_connections = 900 + +# Activate unsafe RPC commands like /dial_seeds and /unsafe_flush_mempool +unsafe = false + +# Maximum number of simultaneous connections (including WebSocket). +# Does not include gRPC connections. See grpc_max_open_connections +# If you want to accept a larger number than the default, make sure +# you increase your OS limits. +# 0 - unlimited. +# Should be < {ulimit -Sn} - {MaxNumInboundPeers} - {MaxNumOutboundPeers} - {N of wal, db and other open files} +# 1024 - 40 - 10 - 50 = 924 = ~900 +max_open_connections = 900 + +# Maximum number of unique clientIDs that can /subscribe +# If you're using /broadcast_tx_commit, set to the estimated maximum number +# of broadcast_tx_commit calls per block. +max_subscription_clients = 100 + +# Maximum number of unique queries a given client can /subscribe to +# If you're using GRPC (or Local RPC client) and /broadcast_tx_commit, set to +# the estimated # maximum number of broadcast_tx_commit calls per block. +max_subscriptions_per_client = 5 + +# Experimental parameter to specify the maximum number of events a node will +# buffer, per subscription, before returning an error and closing the +# subscription. Must be set to at least 100, but higher values will accommodate +# higher event throughput rates (and will use more memory). +experimental_subscription_buffer_size = 200 + +# Experimental parameter to specify the maximum number of RPC responses that +# can be buffered per WebSocket client. If clients cannot read from the +# WebSocket endpoint fast enough, they will be disconnected, so increasing this +# parameter may reduce the chances of them being disconnected (but will cause +# the node to use more memory). +# +# Must be at least the same as "experimental_subscription_buffer_size", +# otherwise connections could be dropped unnecessarily. This value should +# ideally be somewhat higher than "experimental_subscription_buffer_size" to +# accommodate non-subscription-related RPC responses. +experimental_websocket_write_buffer_size = 200 + +# If a WebSocket client cannot read fast enough, at present we may +# silently drop events instead of generating an error or disconnecting the +# client. +# +# Enabling this experimental parameter will cause the WebSocket connection to +# be closed instead if it cannot read fast enough, allowing for greater +# predictability in subscription behavior. +experimental_close_on_slow_client = false + +# How long to wait for a tx to be committed during /broadcast_tx_commit. +# WARNING: Using a value larger than 10s will result in increasing the +# global HTTP write timeout, which applies to all connections and endpoints. +# See https://github.com/tendermint/tendermint/issues/3435 +timeout_broadcast_tx_commit = "10s" + +# Maximum size of request body, in bytes +max_body_bytes = 1000000 + +# Maximum size of request header, in bytes +max_header_bytes = 1048576 + +# The path to a file containing certificate that is used to create the HTTPS server. +# Might be either absolute path or path related to CometBFT's config directory. +# If the certificate is signed by a certificate authority, +# the certFile should be the concatenation of the server's certificate, any intermediates, +# and the CA's certificate. +# NOTE: both tls_cert_file and tls_key_file must be present for CometBFT to create HTTPS server. +# Otherwise, HTTP server is run. +tls_cert_file = "" + +# The path to a file containing matching private key that is used to create the HTTPS server. +# Might be either absolute path or path related to CometBFT's config directory. +# NOTE: both tls-cert-file and tls-key-file must be present for CometBFT to create HTTPS server. +# Otherwise, HTTP server is run. +tls_key_file = "" + +# pprof listen address (https://golang.org/pkg/net/http/pprof) +pprof_laddr = "localhost:6060" + +####################################################### +### P2P Configuration Options ### +####################################################### +[p2p] + +# Address to listen for incoming connections +laddr = "tcp://0.0.0.0:26656" + +# Address to advertise to peers for them to dial +# If empty, will use the same port as the laddr, +# and will introspect on the listener or use UPnP +# to figure out the address. ip and port are required +# example: 159.89.10.97:26656 +external_address = "" + +# Comma separated list of seed nodes to connect to +seeds = "" + +# Comma separated list of nodes to keep persistent connections to +persistent_peers = "" + +# UPNP port forwarding +upnp = false + +# Path to address book +addr_book_file = "config/addrbook.json" + +# Set true for strict address routability rules +# Set false for private or local networks +addr_book_strict = true + +# Maximum number of inbound peers +max_num_inbound_peers = 40 + +# Maximum number of outbound peers to connect to, excluding persistent peers +max_num_outbound_peers = 10 + +# List of node IDs, to which a connection will be (re)established ignoring any existing limits +unconditional_peer_ids = "" + +# Maximum pause when redialing a persistent peer (if zero, exponential backoff is used) +persistent_peers_max_dial_period = "0s" + +# Time to wait before flushing messages out on the connection +flush_throttle_timeout = "100ms" + +# Maximum size of a message packet payload, in bytes +max_packet_msg_payload_size = 1024 + +# Rate at which packets can be sent, in bytes/second +send_rate = 5120000 + +# Rate at which packets can be received, in bytes/second +recv_rate = 5120000 + +# Set true to enable the peer-exchange reactor +pex = true + +# Seed mode, in which node constantly crawls the network and looks for +# peers. If another node asks it for addresses, it responds and disconnects. +# +# Does not work if the peer-exchange reactor is disabled. +seed_mode = false + +# Comma separated list of peer IDs to keep private (will not be gossiped to other peers) +private_peer_ids = "" + +# Toggle to disable guard against peers connecting from the same ip. +allow_duplicate_ip = false + +# Peer connection configuration. +handshake_timeout = "20s" +dial_timeout = "3s" + +####################################################### +### Mempool Configuration Option ### +####################################################### +[mempool] + +# Mempool version to use: +# 1) "v0" - (default) FIFO mempool. +# 2) "v1" - prioritized mempool (deprecated; will be removed in the next release). +version = "v0" + +recheck = true +broadcast = true +wal_dir = "" + +# Maximum number of transactions in the mempool +size = 5000 + +# Limit the total size of all txs in the mempool. +# This only accounts for raw transactions (e.g. given 1MB transactions and +# max_txs_bytes=5MB, mempool will only accept 5 transactions). +max_txs_bytes = 1073741824 + +# Size of the cache (used to filter transactions we saw earlier) in transactions +cache_size = 10000 + +# Do not remove invalid transactions from the cache (default: false) +# Set to true if it's not possible for any invalid transaction to become valid +# again in the future. +keep-invalid-txs-in-cache = false + +# Maximum size of a single transaction. +# NOTE: the max size of a tx transmitted over the network is {max_tx_bytes}. +max_tx_bytes = 1048576 + +# Maximum size of a batch of transactions to send to a peer +# Including space needed by encoding (one varint per transaction). +# XXX: Unused due to https://github.com/tendermint/tendermint/issues/5796 +max_batch_bytes = 0 + +# ttl-duration, if non-zero, defines the maximum amount of time a transaction +# can exist for in the mempool. +# +# Note, if ttl-num-blocks is also defined, a transaction will be removed if it +# has existed in the mempool at least ttl-num-blocks number of blocks or if it's +# insertion time into the mempool is beyond ttl-duration. +ttl-duration = "0s" + +# ttl-num-blocks, if non-zero, defines the maximum number of blocks a transaction +# can exist for in the mempool. +# +# Note, if ttl-duration is also defined, a transaction will be removed if it +# has existed in the mempool at least ttl-num-blocks number of blocks or if +# it's insertion time into the mempool is beyond ttl-duration. +ttl-num-blocks = 0 + +####################################################### +### State Sync Configuration Options ### +####################################################### +[statesync] +# State sync rapidly bootstraps a new node by discovering, fetching, and restoring a state machine +# snapshot from peers instead of fetching and replaying historical blocks. Requires some peers in +# the network to take and serve state machine snapshots. State sync is not attempted if the node +# has any local state (LastBlockHeight > 0). The node will have a truncated block history, +# starting from the height of the snapshot. +enable = false + +# RPC servers (comma-separated) for light client verification of the synced state machine and +# retrieval of state data for node bootstrapping. Also needs a trusted height and corresponding +# header hash obtained from a trusted source, and a period during which validators can be trusted. +# +# For Cosmos SDK-based chains, trust_period should usually be about 2/3 of the unbonding time (~2 +# weeks) during which they can be financially punished (slashed) for misbehavior. +rpc_servers = "" +trust_height = 0 +trust_hash = "" +trust_period = "168h0m0s" + +# Time to spend discovering snapshots before initiating a restore. +discovery_time = "15s" + +# Temporary directory for state sync snapshot chunks, defaults to the OS tempdir (typically /tmp). +# Will create a new, randomly named directory within, and remove it when done. +temp_dir = "" + +# The timeout duration before re-requesting a chunk, possibly from a different +# peer (default: 1 minute). +chunk_request_timeout = "10s" + +# The number of concurrent chunk fetchers to run (default: 1). +chunk_fetchers = "4" + +####################################################### +### Block Sync Configuration Options ### +####################################################### +[blocksync] + +# Block Sync version to use: +# +# In v0.37, v1 and v2 of the block sync protocols were deprecated. +# Please use v0 instead. +# +# 1) "v0" - the default block sync implementation +version = "v0" + +####################################################### +### Consensus Configuration Options ### +####################################################### +[consensus] + +wal_file = "data/cs.wal/wal" + +# How long we wait for a proposal block before prevoting nil +timeout_propose = "3s" +# How much timeout_propose increases with each round +timeout_propose_delta = "500ms" +# How long we wait after receiving +2/3 prevotes for “anything” (ie. not a single block or nil) +timeout_prevote = "1s" +# How much the timeout_prevote increases with each round +timeout_prevote_delta = "500ms" +# How long we wait after receiving +2/3 precommits for “anything” (ie. not a single block or nil) +timeout_precommit = "1s" +# How much the timeout_precommit increases with each round +timeout_precommit_delta = "500ms" +# How long we wait after committing a block, before starting on the new +# height (this gives us a chance to receive some more precommits, even +# though we already have +2/3). +timeout_commit = "5s" + +# How many blocks to look back to check existence of the node's consensus votes before joining consensus +# When non-zero, the node will panic upon restart +# if the same consensus key was used to sign {double_sign_check_height} last blocks. +# So, validators should stop the state machine, wait for some blocks, and then restart the state machine to avoid panic. +double_sign_check_height = 0 + +# Make progress as soon as we have all the precommits (as if TimeoutCommit = 0) +skip_timeout_commit = false + +# EmptyBlocks mode and possible interval between empty blocks +create_empty_blocks = true +create_empty_blocks_interval = "0s" + +# Reactor sleep duration parameters +peer_gossip_sleep_duration = "100ms" +peer_query_maj23_sleep_duration = "2s" + +####################################################### +### Storage Configuration Options ### +####################################################### +[storage] + +# Set to true to discard ABCI responses from the state store, which can save a +# considerable amount of disk space. Set to false to ensure ABCI responses are +# persisted. ABCI responses are required for /block_results RPC queries, and to +# reindex events in the command-line tool. +discard_abci_responses = false + +####################################################### +### Transaction Indexer Configuration Options ### +####################################################### +[tx_index] + +# What indexer to use for transactions +# +# The application will set which txs to index. In some cases a node operator will be able +# to decide which txs to index based on configuration set in the application. +# +# Options: +# 1) "null" +# 2) "kv" (default) - the simplest possible indexer, backed by key-value storage (defaults to levelDB; see DBBackend). +# - When "kv" is chosen "tx.height" and "tx.hash" will always be indexed. +# 3) "psql" - the indexer services backed by PostgreSQL. +# When "kv" or "psql" is chosen "tx.height" and "tx.hash" will always be indexed. +indexer = "kv" + +# The PostgreSQL connection configuration, the connection format: +# postgresql://:@:/? +psql-conn = "" + +####################################################### +### Instrumentation Configuration Options ### +####################################################### +[instrumentation] + +# When true, Prometheus metrics are served under /metrics on +# PrometheusListenAddr. +# Check out the documentation for the list of available metrics. +prometheus = false + +# Address to listen for Prometheus collector(s) connections +prometheus_listen_addr = ":26660" + +# Maximum number of simultaneous connections. +# If you want to accept a larger number than the default, make sure +# you increase your OS limits. +# 0 - unlimited. +max_open_connections = 3 + +# Instrumentation namespace +namespace = "cometbft" diff --git a/docker/local-config/genesis.json b/docker/local-config/genesis.json new file mode 100644 index 00000000..c39dacd4 --- /dev/null +++ b/docker/local-config/genesis.json @@ -0,0 +1,359 @@ +{ + "genesis_time": "2023-04-18T22:37:59.196799Z", + "chain_id": "xion-local-testnet-1", + "initial_height": "1", + "consensus_params": { + "block": { + "max_bytes": "22020096", + "max_gas": "-1" + }, + "evidence": { + "max_age_num_blocks": "100000", + "max_age_duration": "172800000000000", + "max_bytes": "1048576" + }, + "validator": { + "pub_key_types": [ + "ed25519" + ] + }, + "version": { + "app": "0" + } + }, + "app_hash": "", + "app_state": { + "07-tendermint": null, + "auth": { + "params": { + "max_memo_characters": "256", + "tx_sig_limit": "7", + "tx_size_cost_per_byte": "10", + "sig_verify_cost_ed25519": "590", + "sig_verify_cost_secp256k1": "1000" + }, + "accounts": [ + { + "@type": "/cosmos.auth.v1beta1.BaseAccount", + "address": "xion1h495zmkgm92664jfnc80n9p64xs5xf56qrg4vc", + "pub_key": null, + "account_number": "0", + "sequence": "0" + }, + { + "@type": "/cosmos.auth.v1beta1.BaseAccount", + "address": "xion1e2fuwe3uhq8zd9nkkk876nawrwdulgv460vzg7", + "pub_key": null, + "account_number": "1", + "sequence": "0" + } + ] + }, + "authz": { + "authorization": [] + }, + "bank": { + "params": { + "send_enabled": [], + "default_send_enabled": true + }, + "balances": [ + { + "address": "xion1h495zmkgm92664jfnc80n9p64xs5xf56qrg4vc", + "coins": [ + { + "denom": "uxion", + "amount": "100000000000000" + } + ] + }, + { + "address": "xion1e2fuwe3uhq8zd9nkkk876nawrwdulgv460vzg7", + "coins": [ + { + "denom": "uxion", + "amount": "10000000000000" + } + ] + } + ], + "supply": [ + { + "denom": "uxion", + "amount": "110000000000000" + } + ], + "denom_metadata": [], + "send_enabled": [] + }, + "capability": { + "index": "1", + "owners": [] + }, + "consensus": null, + "crisis": { + "constant_fee": { + "denom": "uxion", + "amount": "1000" + } + }, + "distribution": { + "params": { + "community_tax": "0.020000000000000000", + "base_proposer_reward": "0.000000000000000000", + "bonus_proposer_reward": "0.000000000000000000", + "withdraw_addr_enabled": true + }, + "fee_pool": { + "community_pool": [] + }, + "delegator_withdraw_infos": [], + "previous_proposer": "", + "outstanding_rewards": [], + "validator_accumulated_commissions": [], + "validator_historical_rewards": [], + "validator_current_rewards": [], + "delegator_starting_infos": [], + "validator_slash_events": [] + }, + "evidence": { + "evidence": [] + }, + "feegrant": { + "allowances": [] + }, + "feeibc": { + "identified_fees": [], + "fee_enabled_channels": [], + "registered_payees": [], + "registered_counterparty_payees": [], + "forward_relayers": [] + }, + "genutil": { + "gen_txs": [ + { + "body": { + "messages": [ + { + "@type": "/cosmos.staking.v1beta1.MsgCreateValidator", + "description": { + "moniker": "validator", + "identity": "", + "website": "", + "security_contact": "", + "details": "" + }, + "commission": { + "rate": "0.100000000000000000", + "max_rate": "0.200000000000000000", + "max_change_rate": "0.010000000000000000" + }, + "min_self_delegation": "1", + "delegator_address": "xion1h495zmkgm92664jfnc80n9p64xs5xf56qrg4vc", + "validator_address": "xionvaloper1h495zmkgm92664jfnc80n9p64xs5xf56tqrnyt", + "pubkey": { + "@type": "/cosmos.crypto.ed25519.PubKey", + "key": "J+w4I9te0WwqXnIIx8OPK8mPOYq9KRWstHMsf3iIS+s=" + }, + "value": { + "denom": "uxion", + "amount": "100000000000000" + } + } + ], + "memo": "9e5df872a848b4715331eb8e8ff11343c9f90806@10.0.168.176:26656", + "timeout_height": "0", + "extension_options": [], + "non_critical_extension_options": [] + }, + "auth_info": { + "signer_infos": [ + { + "public_key": { + "@type": "/cosmos.crypto.secp256k1.PubKey", + "key": "AiBl5S4fP+Ra2LD/EZ2XtWwNu9otOCFMTs8tfq5fwIXm" + }, + "mode_info": { + "single": { + "mode": "SIGN_MODE_DIRECT" + } + }, + "sequence": "0" + } + ], + "fee": { + "amount": [], + "gas_limit": "200000", + "payer": "", + "granter": "" + }, + "tip": null + }, + "signatures": [ + "eFmg4yi8LhCOfIMla33JE7MMZX6ZjXFaCKngM0IovY5Vm9MYFFUnbLbUJoMEPWrD7ub2x5mGIw2wxqqSyexwzg==" + ] + } + ] + }, + "gov": { + "starting_proposal_id": "1", + "deposits": [], + "votes": [], + "proposals": [], + "deposit_params": null, + "voting_params": null, + "tally_params": null, + "params": { + "min_deposit": [ + { + "denom": "uxion", + "amount": "10000000" + } + ], + "max_deposit_period": "172800s", + "voting_period": "172800s", + "quorum": "0.334000000000000000", + "threshold": "0.500000000000000000", + "veto_threshold": "0.334000000000000000", + "min_initial_deposit_ratio": "0.000000000000000000", + "burn_vote_quorum": false, + "burn_proposal_deposit_prevote": false, + "burn_vote_veto": true + } + }, + "group": { + "group_seq": "0", + "groups": [], + "group_members": [], + "group_policy_seq": "0", + "group_policies": [], + "proposal_seq": "0", + "proposals": [], + "votes": [] + }, + "ibc": { + "client_genesis": { + "clients": [], + "clients_consensus": [], + "clients_metadata": [], + "params": { + "allowed_clients": [ + "06-solomachine", + "07-tendermint" + ] + }, + "create_localhost": false, + "next_client_sequence": "0" + }, + "connection_genesis": { + "connections": [], + "client_connection_paths": [], + "next_connection_sequence": "0", + "params": { + "max_expected_time_per_block": "30000000000" + } + }, + "channel_genesis": { + "channels": [], + "acknowledgements": [], + "commitments": [], + "receipts": [], + "send_sequences": [], + "recv_sequences": [], + "ack_sequences": [], + "next_channel_sequence": "0" + } + }, + "interchainaccounts": { + "controller_genesis_state": { + "active_channels": [], + "interchain_accounts": [], + "ports": [], + "params": { + "controller_enabled": true + } + }, + "host_genesis_state": { + "active_channels": [], + "interchain_accounts": [], + "port": "icahost", + "params": { + "host_enabled": true, + "allow_messages": [ + "*" + ] + } + } + }, + "mint": { + "minter": { + "inflation": "0.130000000000000000", + "annual_provisions": "0.000000000000000000" + }, + "params": { + "mint_denom": "uxion", + "inflation_rate_change": "0.130000000000000000", + "inflation_max": "0.200000000000000000", + "inflation_min": "0.070000000000000000", + "goal_bonded": "0.670000000000000000", + "blocks_per_year": "6311520" + } + }, + "nft": { + "classes": [], + "entries": [] + }, + "params": null, + "slashing": { + "params": { + "signed_blocks_window": "100", + "min_signed_per_window": "0.500000000000000000", + "downtime_jail_duration": "600s", + "slash_fraction_double_sign": "0.050000000000000000", + "slash_fraction_downtime": "0.010000000000000000" + }, + "signing_infos": [], + "missed_blocks": [] + }, + "staking": { + "params": { + "unbonding_time": "1814400s", + "max_validators": 100, + "max_entries": 7, + "historical_entries": 10000, + "bond_denom": "uxion", + "min_commission_rate": "0.000000000000000000" + }, + "last_total_power": "0", + "last_validator_powers": [], + "validators": [], + "delegations": [], + "unbonding_delegations": [], + "redelegations": [], + "exported": false + }, + "transfer": { + "port_id": "transfer", + "denom_traces": [], + "params": { + "send_enabled": true, + "receive_enabled": true + } + }, + "upgrade": {}, + "vesting": {}, + "wasm": { + "params": { + "code_upload_access": { + "permission": "Everybody", + "address": "", + "addresses": [] + }, + "instantiate_default_permission": "Everybody" + }, + "codes": [], + "contracts": [], + "sequences": [] + } + } +} \ No newline at end of file diff --git a/docker/local-config/gentx/gentx-9e5df872a848b4715331eb8e8ff11343c9f90806.json b/docker/local-config/gentx/gentx-9e5df872a848b4715331eb8e8ff11343c9f90806.json new file mode 100644 index 00000000..8e1694ff --- /dev/null +++ b/docker/local-config/gentx/gentx-9e5df872a848b4715331eb8e8ff11343c9f90806.json @@ -0,0 +1 @@ +{"body":{"messages":[{"@type":"/cosmos.staking.v1beta1.MsgCreateValidator","description":{"moniker":"validator","identity":"","website":"","security_contact":"","details":""},"commission":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"min_self_delegation":"1","delegator_address":"xion1h495zmkgm92664jfnc80n9p64xs5xf56qrg4vc","validator_address":"xionvaloper1h495zmkgm92664jfnc80n9p64xs5xf56tqrnyt","pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"J+w4I9te0WwqXnIIx8OPK8mPOYq9KRWstHMsf3iIS+s="},"value":{"denom":"uxion","amount":"100000000000000"}}],"memo":"9e5df872a848b4715331eb8e8ff11343c9f90806@10.0.168.176:26656","timeout_height":"0","extension_options":[],"non_critical_extension_options":[]},"auth_info":{"signer_infos":[{"public_key":{"@type":"/cosmos.crypto.secp256k1.PubKey","key":"AiBl5S4fP+Ra2LD/EZ2XtWwNu9otOCFMTs8tfq5fwIXm"},"mode_info":{"single":{"mode":"SIGN_MODE_DIRECT"}},"sequence":"0"}],"fee":{"amount":[],"gas_limit":"200000","payer":"","granter":""},"tip":null},"signatures":["eFmg4yi8LhCOfIMla33JE7MMZX6ZjXFaCKngM0IovY5Vm9MYFFUnbLbUJoMEPWrD7ub2x5mGIw2wxqqSyexwzg=="]} diff --git a/docker/local-config/node_key.json b/docker/local-config/node_key.json new file mode 100644 index 00000000..93196814 --- /dev/null +++ b/docker/local-config/node_key.json @@ -0,0 +1 @@ +{"priv_key":{"type":"tendermint/PrivKeyEd25519","value":"LYQqiPQ5xy1dRF0Oj4m75HzgGyM0/AdSKfkF/8fmRNDs0aSRTUOASSAlKx7brTiBPrWF9LMfTFikXlWB2gsaNg=="}} \ No newline at end of file diff --git a/docker/local-config/priv_validator_key.json b/docker/local-config/priv_validator_key.json new file mode 100644 index 00000000..d200772f --- /dev/null +++ b/docker/local-config/priv_validator_key.json @@ -0,0 +1,11 @@ +{ + "address": "B12C7535FED46099221557F3CAD92FDBA61DAAEB", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "J+w4I9te0WwqXnIIx8OPK8mPOYq9KRWstHMsf3iIS+s=" + }, + "priv_key": { + "type": "tendermint/PrivKeyEd25519", + "value": "cBIIzH+2gEhxKZRZaQgHxSdt/vHUU2l/gRP4gqQsPdMn7Dgj217RbCpecgjHw48ryY85ir0pFay0cyx/eIhL6w==" + } +} \ No newline at end of file diff --git a/scripts/setup_local_testnet_accounts.sh b/scripts/setup_local_testnet_accounts.sh new file mode 100755 index 00000000..59a1bd9a --- /dev/null +++ b/scripts/setup_local_testnet_accounts.sh @@ -0,0 +1,28 @@ +VALIDATOR_MNEMONIC="clinic tube choose fade collect fish original recipe pumpkin fantasy enrich sunny pattern regret blouse organ april carpet guitar skin work moon fatigue hurdle" +FAUCET_MNEMONIC="decorate corn happy degree artist trouble color mountain shadow hazard canal zone hunt unfold deny glove famous area arrow cup under sadness salute item" + +VALIDATOR_KEY_NAME="${VALIDATOR_KEY_NAME:-local-testnet-validator}" +FAUCET_KEY_NAME="${FAUCET_KEY_NAME:-local-testnet-faucet}" + +key_exists() { + local key_name="$1"; + local keys_output="$(xiond keys list --output json)"; + if [[ "$keys_output" == "No records were found in keyring" ]]; then + return "0"; + else + return "$(echo $keys_output | jq "map(select(.name == \"$key_name\")) | length")" + fi +} + +# Create keys locally if necessary +key_exists $VALIDATOR_KEY_NAME +if [[ "$?" == "0" ]]; then + echo "Validator key not present, creating..." + echo $VALIDATOR_MNEMONIC | xiond keys add $VALIDATOR_KEY_NAME --recover +fi + +key_exists $FAUCET_KEY_NAME +if [[ "$?" == "0" ]]; then + echo "Faucert key not present, creating..." + echo $FAUCET_MNEMONIC | xiond keys add $FAUCET_KEY_NAME --recover +fi From c007c6db269431a8304376902c6b302d149693d2 Mon Sep 17 00:00:00 2001 From: bigs Date: Thu, 20 Apr 2023 15:45:41 -0400 Subject: [PATCH 031/501] Add heighliner chain spec (#26) * Add heighliner chain spec * De-listify chain spec * Add quotation around string * I am dumb * Revert old code * Escape lists * Bump heighliner-action --- .github/workflows/integration-tests.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index 4a6b2284..ebba53b8 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -42,11 +42,17 @@ jobs: type=semver,pattern=v{{version}} - name: Heighliner build and push id: heighlinerbuild - uses: burnt-labs/heighliner-action@v1.0.0-alpha9 + uses: burnt-labs/heighliner-action@v1.0.0-alpha10 with: local: true tag: ${{ steps.meta.outputs.version }} chain: xion + github-organization: burnt-labs + github-repo: xion + dockerfile: cosmos + build-target: make install + binaries: "[\"/go/bin/xiond\"]" + build-env: "[\"BUILD_TAGS=muslc\"]" - name: Push docker image run: | docker tag ${{ steps.heighlinerbuild.outputs.tag }} ghcr.io/burnt-labs/xion/${{ steps.heighlinerbuild.outputs.tag }} From 6bca3adf359323325cdb10a24b0be53a9b626167 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 20 Apr 2023 22:04:37 +0000 Subject: [PATCH 032/501] Bump docker/metadata-action from 3 to 4 Bumps [docker/metadata-action](https://github.com/docker/metadata-action) from 3 to 4. - [Release notes](https://github.com/docker/metadata-action/releases) - [Upgrade guide](https://github.com/docker/metadata-action/blob/master/UPGRADE.md) - [Commits](https://github.com/docker/metadata-action/compare/v3...v4) --- updated-dependencies: - dependency-name: docker/metadata-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/integration-tests.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index ebba53b8..876a2ffd 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -33,7 +33,7 @@ jobs: password: ${{ secrets.GITHUB_TOKEN }} - name: labels id: meta - uses: docker/metadata-action@v3 + uses: docker/metadata-action@v4 with: images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}-heighliner tags: | @@ -92,7 +92,7 @@ jobs: password: ${{ secrets.GITHUB_TOKEN }} - name: docker xion metadata id: meta-xion - uses: docker/metadata-action@v3 + uses: docker/metadata-action@v4 with: images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}-heighliner - name: pull xion image From 69bc0166b4bad2a5c7c933b42b7b276c83598ec7 Mon Sep 17 00:00:00 2001 From: Ash Date: Fri, 21 Apr 2023 18:07:40 -0400 Subject: [PATCH 033/501] new bank types for platform fee collection --- cmd/xiond/root.go | 2 +- proto/xion/xion/v1/genesis.proto | 14 +++++ proto/xion/xion/v1/tx.proto | 59 +++++++++++++++++++ x/xion/keeper/keeper.go | 58 +++++++++++++++++++ x/xion/keeper/msg_server.go | 98 ++++++++++++++++++++++++++++++++ x/xion/types/expected_keepers.go | 38 +++++++++++++ x/xion/types/keys.go | 15 +++++ x/xion/types/params.go | 55 ++++++++++++++++++ 8 files changed, 338 insertions(+), 1 deletion(-) create mode 100644 proto/xion/xion/v1/genesis.proto create mode 100644 proto/xion/xion/v1/tx.proto create mode 100644 x/xion/keeper/keeper.go create mode 100644 x/xion/keeper/msg_server.go create mode 100644 x/xion/types/expected_keepers.go create mode 100644 x/xion/types/keys.go create mode 100644 x/xion/types/params.go diff --git a/cmd/xiond/root.go b/cmd/xiond/root.go index 47c7480b..03c12fe1 100644 --- a/cmd/xiond/root.go +++ b/cmd/xiond/root.go @@ -131,7 +131,7 @@ func initAppConfig() (string, interface{}) { // own app.toml to override, or use this default value. // // In simapp, we set the min gas prices to 0. - srvCfg.MinGasPrices = "0stake" + srvCfg.MinGasPrices = "0uxion" // srvCfg.BaseConfig.IAVLDisableFastNode = true // disable fastnode by default customAppConfig := CustomAppConfig{ diff --git a/proto/xion/xion/v1/genesis.proto b/proto/xion/xion/v1/genesis.proto new file mode 100644 index 00000000..5bb96065 --- /dev/null +++ b/proto/xion/xion/v1/genesis.proto @@ -0,0 +1,14 @@ +syntax = "proto3"; +package xion.v1; + +import "gogoproto/gogo.proto"; + +option go_package = "github.com/burnt-labs/xion/x/xion/types"; + +message GenesisState { + Params params = 1; +} + +message Params { + uint32 platform_percentage = 1 [(gogoproto.moretags) = "yaml:\"platform_percentage\""]; +} \ No newline at end of file diff --git a/proto/xion/xion/v1/tx.proto b/proto/xion/xion/v1/tx.proto new file mode 100644 index 00000000..ca83aaa8 --- /dev/null +++ b/proto/xion/xion/v1/tx.proto @@ -0,0 +1,59 @@ +syntax = "proto3"; +package xion.v1; + +import "gogoproto/gogo.proto"; +import "cosmos/msg/v1/msg.proto"; +import "amino/amino.proto"; +import "cosmos_proto/cosmos.proto"; +import "cosmos/base/v1beta1/coin.proto"; +import "cosmos/bank/v1beta1/bank.proto"; + + +option go_package = "github.com/burnt-labs/xion/x/xion/types"; + +service Msg { + option (cosmos.msg.v1.service) = true; + + // Send defines a method for sending coins from one account to another account. + rpc Send(MsgSend) returns (MsgSendResponse); + + // MultiSend defines a method for sending coins from some accounts to other accounts. + rpc MultiSend(MsgMultiSend) returns (MsgMultiSendResponse); +} + +// MsgSend represents a message to send coins from one account to another. +message MsgSend { + option (cosmos.msg.v1.signer) = "from_address"; + option (amino.name) = "xion/MsgSend"; + + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string from_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string to_address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + repeated cosmos.base.v1beta1.Coin amount = 3 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; +} + +// MsgSendResponse defines the Msg/Send response type. +message MsgSendResponse {} + +// MsgMultiSend represents an arbitrary multi-in, multi-out send message. +message MsgMultiSend { + option (cosmos.msg.v1.signer) = "inputs"; + option (amino.name) = "xion/MsgMultiSend"; + + option (gogoproto.equal) = false; + + // Inputs, despite being `repeated`, only allows one sender input. This is + // checked in MsgMultiSend's ValidateBasic. + repeated cosmos.bank.v1beta1.Input inputs = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + repeated cosmos.bank.v1beta1.Output outputs = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// MsgMultiSendResponse defines the Msg/MultiSend response type. +message MsgMultiSendResponse {} + diff --git a/x/xion/keeper/keeper.go b/x/xion/keeper/keeper.go new file mode 100644 index 00000000..6efbd317 --- /dev/null +++ b/x/xion/keeper/keeper.go @@ -0,0 +1,58 @@ +package keeper + +import ( + "github.com/burnt-labs/xion/x/xion/types" + "github.com/cometbft/cometbft/libs/log" + "github.com/cosmos/cosmos-sdk/codec" + storetypes "github.com/cosmos/cosmos-sdk/store/types" + sdktypes "github.com/cosmos/cosmos-sdk/types" + paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" +) + +type Keeper struct { + cdc codec.BinaryCodec + storeKey storetypes.StoreKey + paramSpace paramtypes.Subspace + bankKeeper types.BankKeeper + accountKeeper types.AccountKeeper +} + +func NewKeeper(cdc codec.BinaryCodec, + key storetypes.StoreKey, + paramSpace paramtypes.Subspace, + bankKeeper types.BankKeeper, + accountKeeper types.AccountKeeper) Keeper { + // set KeyTable if it has not already been set + if !paramSpace.HasKeyTable() { + paramSpace = paramSpace.WithKeyTable(types.ParamKeyTable()) + } + + return Keeper{ + storeKey: key, + cdc: cdc, + paramSpace: paramSpace, + bankKeeper: bankKeeper, + accountKeeper: accountKeeper, + } +} + +// Logger returns a module-specific logger. +func (k Keeper) Logger(ctx sdktypes.Context) log.Logger { + return ctx.Logger().With("module", "x/"+types.ModuleName) +} + +//////////// +// Params // +//////////// + +// GetParamSet returns the vote period from the parameters +func (k Keeper) GetParamSet(ctx sdktypes.Context) types.Params { + var p types.Params + k.paramSpace.GetParamSet(ctx, &p) + return p +} + +// setParams sets the parameters in the store +func (k Keeper) setParams(ctx sdktypes.Context, params types.Params) { + k.paramSpace.SetParamSet(ctx, ¶ms) +} diff --git a/x/xion/keeper/msg_server.go b/x/xion/keeper/msg_server.go new file mode 100644 index 00000000..ec2f2442 --- /dev/null +++ b/x/xion/keeper/msg_server.go @@ -0,0 +1,98 @@ +package keeper + +import ( + "context" + "fmt" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" + + "github.com/burnt-labs/xion/x/xion/types" + sdk "github.com/cosmos/cosmos-sdk/types" +) + +type msgServer struct { + Keeper +} + +var _ types.MsgServer = msgServer{} + +// NewMsgServerImpl returns an implementation of the bank MsgServer interface +// for the provided Keeper. +func NewMsgServerImpl(keeper Keeper) types.MsgServer { + return &msgServer{Keeper: keeper} +} + +func (k msgServer) Send(goCtx context.Context, msg *types.MsgSend) (*types.MsgSendResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + + percentage := k.GetParamSet(ctx).PlatformPercentage + throughCoins := msg.Amount + + if percentage > 0 { + sendAddress, err := sdk.AccAddressFromBech32(msg.FromAddress) + if err != nil { + return nil, err + } + + platformCoins := msg.Amount.MulInt(sdk.NewIntFromUint64(uint64(percentage))).QuoInt(sdk.NewInt(10000)) + throughCoins, ok := throughCoins.SafeSub(platformCoins...) + if !ok { + return nil, fmt.Errorf("unable to subtract %v from %v", platformCoins, throughCoins) + } + + if err := k.bankKeeper.SendCoinsFromAccountToModule(ctx, sendAddress, authtypes.FeeCollectorName, platformCoins); err != nil { + return nil, err + } + } + + newMsg := banktypes.MsgSend{ + FromAddress: msg.FromAddress, + ToAddress: msg.ToAddress, + Amount: throughCoins, + } + + if _, err := k.bankKeeper.Send(goCtx, &newMsg); err != nil { + return nil, err + } + + return &types.MsgSendResponse{}, nil +} + +func (k msgServer) MultiSend(goCtx context.Context, msg *types.MsgMultiSend) (*types.MsgMultiSendResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + + if k.GetParamSet(ctx).PlatformPercentage > 0 { + feeCollectorAcc := k.accountKeeper.GetModuleAccount(ctx, authtypes.FeeCollectorName).GetAddress() + percentage := sdk.NewIntFromUint64(uint64(k.GetParamSet(ctx).PlatformPercentage)) + var newOutputs []banktypes.Output + for _, output := range msg.Outputs { + platformCoins := output.Coins.MulInt(percentage).QuoInt(sdk.NewInt(10000)) + throughCoins, ok := output.Coins.SafeSub(platformCoins...) + if !ok { + return nil, fmt.Errorf("unable to subtract %v from %v", platformCoins, throughCoins) + } + + newOutputs = append(newOutputs, + banktypes.NewOutput(feeCollectorAcc, platformCoins), + banktypes.Output{ + Address: output.Address, + Coins: throughCoins, + }) + } + + if _, err := k.bankKeeper.MultiSend(goCtx, banktypes.NewMsgMultiSend(msg.Inputs, newOutputs)); err != nil { + return nil, err + } + + } else { + newMsg := banktypes.MsgMultiSend{ + Inputs: msg.Inputs, + Outputs: msg.Outputs, + } + if _, err := k.bankKeeper.MultiSend(goCtx, &newMsg); err != nil { + return nil, err + } + } + + return &types.MsgMultiSendResponse{}, nil +} diff --git a/x/xion/types/expected_keepers.go b/x/xion/types/expected_keepers.go new file mode 100644 index 00000000..9a42cb95 --- /dev/null +++ b/x/xion/types/expected_keepers.go @@ -0,0 +1,38 @@ +package types // noalias + +import ( + "context" + + sdktypes "github.com/cosmos/cosmos-sdk/types" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" +) + +// BankKeeper defines the contract needed to be fulfilled for banking and supply +// dependencies. +type BankKeeper interface { + SendCoinsFromModuleToAccount( + ctx sdktypes.Context, + senderModule string, + recipientAddr sdktypes.AccAddress, + amt sdktypes.Coins, + ) error + SendCoinsFromModuleToModule( + ctx sdktypes.Context, + senderModule, + recipientModule string, + amt sdktypes.Coins, + ) error + SendCoinsFromAccountToModule( + ctx sdktypes.Context, + senderAddr sdktypes.AccAddress, + recipientModule string, + amt sdktypes.Coins, + ) error + Send(goCtx context.Context, msg *banktypes.MsgSend) (*banktypes.MsgSendResponse, error) + MultiSend(goCtx context.Context, msg *banktypes.MsgMultiSend) (*banktypes.MsgMultiSendResponse, error) +} + +type AccountKeeper interface { + GetModuleAccount(ctx sdktypes.Context, moduleName string) authtypes.ModuleAccountI +} diff --git a/x/xion/types/keys.go b/x/xion/types/keys.go new file mode 100644 index 00000000..86bcedc0 --- /dev/null +++ b/x/xion/types/keys.go @@ -0,0 +1,15 @@ +package types + +const ( + // ModuleName is the module name constant used in many places + ModuleName = "xion" + + // StoreKey is the store key string for oracle + StoreKey = ModuleName + + // RouterKey is the message route for oracle + RouterKey = ModuleName + + // QuerierRoute is the querier route for oracle + QuerierRoute = ModuleName +) diff --git a/x/xion/types/params.go b/x/xion/types/params.go new file mode 100644 index 00000000..019a29b3 --- /dev/null +++ b/x/xion/types/params.go @@ -0,0 +1,55 @@ +package types + +import ( + "errors" + "fmt" + + paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" +) + +// Parameter keys +var ( + KeyPlatformPercentage = []byte("platform-percentage") +) + +var _ paramtypes.ParamSet = &Params{} + +// ParamKeyTable returns the parameter key table. +func ParamKeyTable() paramtypes.KeyTable { + return paramtypes.NewKeyTable().RegisterParamSet(&Params{}) +} + +// DefaultParams returns default oracle parameters +func DefaultParams() Params { + return Params{ + PlatformPercentage: 500, + } +} + +// ParamSetPairs returns the parameter set pairs. +func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs { + return paramtypes.ParamSetPairs{ + paramtypes.NewParamSetPair(KeyPlatformPercentage, &p.PlatformPercentage, validatePlatformPercentage), + } +} + +// ValidateBasic performs basic validation on oracle parameters. +func (p *Params) ValidateBasic() error { + if err := validatePlatformPercentage(p.PlatformPercentage); err != nil { + return err + } + return nil +} + +func validatePlatformPercentage(i interface{}) error { + percentage, ok := i.(uint32) + if !ok { + return fmt.Errorf("invalid parameter type: %T", i) + } + + if percentage > 10000 { + return errors.New("platform fee can not exceed 100%") + } + + return nil +} From 0956589be252e21f9b981fb547a7acf10d7ad8b7 Mon Sep 17 00:00:00 2001 From: bigs Date: Mon, 24 Apr 2023 18:44:00 -0400 Subject: [PATCH 034/501] Fix the local testnet config (#31) * fixed some config * Update client.toml --------- Co-authored-by: Burnt Val --- docker/local-config/config.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/local-config/config.toml b/docker/local-config/config.toml index 8f651203..6fd450b7 100644 --- a/docker/local-config/config.toml +++ b/docker/local-config/config.toml @@ -91,12 +91,12 @@ filter_peers = false [rpc] # TCP or UNIX socket address for the RPC server to listen on -laddr = "tcp://127.0.0.1:26657" +laddr = "tcp://0.0.0.0:26657" # A list of origins a cross-domain request can be executed from # Default value '[]' disables cors support # Use '["*"]' to allow any origin -cors_allowed_origins = [] +cors_allowed_origins = ["*"] # A list of methods the client is allowed to use with cross-domain requests cors_allowed_methods = ["HEAD", "GET", "POST", ] From 38029b5beecfd47b262db03575e5a19a22eb8249 Mon Sep 17 00:00:00 2001 From: bigs Date: Wed, 26 Apr 2023 11:50:11 -0400 Subject: [PATCH 035/501] Update API server bind --- docker/local-config/app.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/local-config/app.toml b/docker/local-config/app.toml index f750ecb1..c64ac9d4 100644 --- a/docker/local-config/app.toml +++ b/docker/local-config/app.toml @@ -123,7 +123,7 @@ enable = false swagger = false # Address defines the API server to listen on. -address = "tcp://localhost:1317" +address = "tcp://0.0.0.0:1317" # MaxOpenConnections defines the number of maximum open connections. max-open-connections = 1000 From ce048343a5622d4f4fbafe32d81ae3aadb0fbf43 Mon Sep 17 00:00:00 2001 From: Cole Brown Date: Wed, 26 Apr 2023 14:05:27 -0400 Subject: [PATCH 036/501] Optimize build step to avoid unnecessary rebuilds --- Dockerfile | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index f73a7404..da935e9b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -13,7 +13,15 @@ RUN apk add git # RUN apk add libusb-dev linux-headers WORKDIR /code -COPY . /code/ +COPY ./.git /code/.git +COPY ./app /code/app +COPY ./cmd /code/cmd +COPY ./contrib /code/contrib +COPY ./proto /code/proto +COPY ./x /code/x +COPY go.mod /code/ +COPY go.sum /code/ +COPY Makefile /code/ # See https://github.com/CosmWasm/wasmvm/releases ADD https://github.com/CosmWasm/wasmvm/releases/download/v1.2.2/libwasmvm_muslc.aarch64.a /lib/libwasmvm_muslc.aarch64.a ADD https://github.com/CosmWasm/wasmvm/releases/download/v1.2.2/libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.x86_64.a From d0328bc8d4842d9d0ca2cdc5876471881e35bef1 Mon Sep 17 00:00:00 2001 From: Ash Date: Thu, 27 Apr 2023 11:25:24 -0400 Subject: [PATCH 037/501] initial xion module --- app/app.go | 17 +- x/xion/module.go | 142 +++++ x/xion/types/genesis.pb.go | 483 +++++++++++++++++ x/xion/types/tx.pb.go | 1047 ++++++++++++++++++++++++++++++++++++ 4 files changed, 1688 insertions(+), 1 deletion(-) create mode 100644 x/xion/module.go create mode 100644 x/xion/types/genesis.pb.go create mode 100644 x/xion/types/tx.pb.go diff --git a/app/app.go b/app/app.go index e7213f8b..813f93f0 100644 --- a/app/app.go +++ b/app/app.go @@ -126,6 +126,9 @@ import ( "github.com/burnt-labs/xion/x/mint" mintkeeper "github.com/burnt-labs/xion/x/mint/keeper" minttypes "github.com/burnt-labs/xion/x/mint/types" + "github.com/burnt-labs/xion/x/xion" + xionkeeper "github.com/burnt-labs/xion/x/xion/keeper" + xiontypes "github.com/burnt-labs/xion/x/xion/types" ) const appName = "XionApp" @@ -222,6 +225,7 @@ var ( transfer.AppModuleBasic{}, ica.AppModuleBasic{}, ibcfee.AppModuleBasic{}, + xion.AppModuleBasic{}, ) // module account permissions @@ -237,6 +241,7 @@ var ( ibcfeetypes.ModuleName: nil, icatypes.ModuleName: nil, wasm.ModuleName: {authtypes.Burner}, + xiontypes.ModuleName: nil, } ) @@ -284,6 +289,8 @@ type WasmApp struct { TransferKeeper ibctransferkeeper.Keeper WasmKeeper wasm.Keeper + XionKeeper xionkeeper.Keeper + ScopedIBCKeeper capabilitykeeper.ScopedKeeper ScopedICAHostKeeper capabilitykeeper.ScopedKeeper ScopedICAControllerKeeper capabilitykeeper.ScopedKeeper @@ -333,7 +340,7 @@ func NewWasmApp( // non sdk store keys ibcexported.StoreKey, ibctransfertypes.StoreKey, ibcfeetypes.StoreKey, wasm.StoreKey, icahosttypes.StoreKey, - icacontrollertypes.StoreKey, + icacontrollertypes.StoreKey, xiontypes.StoreKey, ) tkeys := sdk.NewTransientStoreKeys(paramstypes.TStoreKey) @@ -533,6 +540,13 @@ func NewWasmApp( // If evidence needs to be handled for the app, set routes in router here and seal app.EvidenceKeeper = *evidenceKeeper + app.XionKeeper = xionkeeper.NewKeeper( + appCodec, + keys[xiontypes.StoreKey], + app.GetSubspace(xiontypes.ModuleName), + app.BankKeeper, + app.AccountKeeper) + // IBC Fee Module keeper app.IBCFeeKeeper = ibcfeekeeper.NewKeeper( appCodec, keys[ibcfeetypes.StoreKey], @@ -679,6 +693,7 @@ func NewWasmApp( groupmodule.NewAppModule(appCodec, app.GroupKeeper, app.AccountKeeper, app.BankKeeper, app.interfaceRegistry), nftmodule.NewAppModule(appCodec, app.NFTKeeper, app.AccountKeeper, app.BankKeeper, app.interfaceRegistry), consensus.NewAppModule(appCodec, app.ConsensusParamsKeeper), + xion.NewAppModule(app.XionKeeper), wasm.NewAppModule(appCodec, &app.WasmKeeper, app.StakingKeeper, app.AccountKeeper, app.BankKeeper, app.MsgServiceRouter(), app.GetSubspace(wasmtypes.ModuleName)), ibc.NewAppModule(app.IBCKeeper), transfer.NewAppModule(app.TransferKeeper), diff --git a/x/xion/module.go b/x/xion/module.go new file mode 100644 index 00000000..827285a2 --- /dev/null +++ b/x/xion/module.go @@ -0,0 +1,142 @@ +package xion + +import ( + "context" + "encoding/json" + "fmt" + + abci "github.com/cometbft/cometbft/abci/types" + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/codec" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" + simtypes "github.com/cosmos/cosmos-sdk/types/simulation" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/spf13/cobra" + + "github.com/burnt-labs/xion/x/xion/client/cli" + "github.com/burnt-labs/xion/x/xion/keeper" + "github.com/burnt-labs/xion/x/xion/types" +) + +var ( + _ module.AppModule = AppModule{} + _ module.AppModuleBasic = AppModuleBasic{} +) + +// AppModuleBasic is the 29-fee AppModuleBasic +type AppModuleBasic struct{} + +// Name implements AppModuleBasic interface +func (AppModuleBasic) Name() string { + return types.ModuleName +} + +// RegisterLegacyAminoCodec implements AppModuleBasic interface +func (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) {} + +// RegisterInterfaces registers module concrete types into protobuf Any. +func (AppModuleBasic) RegisterInterfaces(registry codectypes.InterfaceRegistry) { + types.RegisterInterfaces(registry) +} + +// DefaultGenesis returns default genesis state as raw bytes for the ibc +// 29-fee module. +func (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage { + return cdc.MustMarshalJSON(types.DefaultGenesisState()) +} + +// ValidateGenesis performs genesis state validation for the 29-fee module. +func (AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, config client.TxEncodingConfig, bz json.RawMessage) error { + var gs types.GenesisState + if err := cdc.UnmarshalJSON(bz, &gs); err != nil { + return fmt.Errorf("failed to unmarshal %s genesis state: %w", types.ModuleName, err) + } + + return gs.Validate() +} + +// RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for ics29 fee module. +func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) { + err := types.RegisterQueryHandlerClient(context.Background(), mux, types.NewQueryClient(clientCtx)) + if err != nil { + panic(err) + } +} + +// GetTxCmd implements AppModuleBasic interface +func (AppModuleBasic) GetTxCmd() *cobra.Command { + return cli.NewTxCmd() +} + +// GetQueryCmd implements AppModuleBasic interface +func (AppModuleBasic) GetQueryCmd() *cobra.Command { + return cli.GetQueryCmd() +} + +// AppModule represents the AppModule for this module +type AppModule struct { + AppModuleBasic + keeper keeper.Keeper +} + +// NewAppModule creates a new 29-fee module +func NewAppModule(k keeper.Keeper) AppModule { + return AppModule{ + keeper: k, + } +} + +// RegisterInvariants implements the AppModule interface +func (AppModule) RegisterInvariants(ir sdk.InvariantRegistry) { +} + +// RegisterServices registers module services. +func (am AppModule) RegisterServices(cfg module.Configurator) { + types.RegisterMsgServer(cfg.MsgServer(), am.keeper) + types.RegisterQueryServer(cfg.QueryServer(), am.keeper) +} + +// InitGenesis performs genesis initialization for the ibc-29-fee module. It returns +// no validator updates. +func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, data json.RawMessage) []abci.ValidatorUpdate { + var genesisState types.GenesisState + cdc.MustUnmarshalJSON(data, &genesisState) + am.keeper.InitGenesis(ctx, genesisState) + return []abci.ValidatorUpdate{} +} + +// ExportGenesis returns the exported genesis state as raw bytes for the ibc-29-fee +// module. +func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage { + gs := am.keeper.ExportGenesis(ctx) + return cdc.MustMarshalJSON(gs) +} + +// ConsensusVersion implements AppModule/ConsensusVersion. +func (AppModule) ConsensusVersion() uint64 { return 1 } + +// BeginBlock implements the AppModule interface +func (am AppModule) BeginBlock(ctx sdk.Context, req abci.RequestBeginBlock) { +} + +// EndBlock implements the AppModule interface +func (am AppModule) EndBlock(ctx sdk.Context, req abci.RequestEndBlock) []abci.ValidatorUpdate { + return []abci.ValidatorUpdate{} +} + +// AppModuleSimulation functions + +// GenerateGenesisState creates a randomized GenState of the 29-fee module. +func (AppModule) GenerateGenesisState(_ *module.SimulationState) { +} + +// RegisterStoreDecoder registers a decoder for 29-fee module's types +func (am AppModule) RegisterStoreDecoder(_ sdk.StoreDecoderRegistry) { +} + +// WeightedOperations returns the all the 29-fee module operations with their respective weights. +func (am AppModule) WeightedOperations(_ module.SimulationState) []simtypes.WeightedOperation { + return nil +} diff --git a/x/xion/types/genesis.pb.go b/x/xion/types/genesis.pb.go new file mode 100644 index 00000000..749121e7 --- /dev/null +++ b/x/xion/types/genesis.pb.go @@ -0,0 +1,483 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: xion/xion/v1/genesis.proto + +package types + +import ( + fmt "fmt" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +type GenesisState struct { + Params *Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params,omitempty"` +} + +func (m *GenesisState) Reset() { *m = GenesisState{} } +func (m *GenesisState) String() string { return proto.CompactTextString(m) } +func (*GenesisState) ProtoMessage() {} +func (*GenesisState) Descriptor() ([]byte, []int) { + return fileDescriptor_d94107830e1c4574, []int{0} +} +func (m *GenesisState) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GenesisState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_GenesisState.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *GenesisState) XXX_Merge(src proto.Message) { + xxx_messageInfo_GenesisState.Merge(m, src) +} +func (m *GenesisState) XXX_Size() int { + return m.Size() +} +func (m *GenesisState) XXX_DiscardUnknown() { + xxx_messageInfo_GenesisState.DiscardUnknown(m) +} + +var xxx_messageInfo_GenesisState proto.InternalMessageInfo + +func (m *GenesisState) GetParams() *Params { + if m != nil { + return m.Params + } + return nil +} + +type Params struct { + PlatformPercentage uint32 `protobuf:"varint,1,opt,name=platform_percentage,json=platformPercentage,proto3" json:"platform_percentage,omitempty" yaml:"platform_percentage"` +} + +func (m *Params) Reset() { *m = Params{} } +func (m *Params) String() string { return proto.CompactTextString(m) } +func (*Params) ProtoMessage() {} +func (*Params) Descriptor() ([]byte, []int) { + return fileDescriptor_d94107830e1c4574, []int{1} +} +func (m *Params) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Params) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Params.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Params) XXX_Merge(src proto.Message) { + xxx_messageInfo_Params.Merge(m, src) +} +func (m *Params) XXX_Size() int { + return m.Size() +} +func (m *Params) XXX_DiscardUnknown() { + xxx_messageInfo_Params.DiscardUnknown(m) +} + +var xxx_messageInfo_Params proto.InternalMessageInfo + +func (m *Params) GetPlatformPercentage() uint32 { + if m != nil { + return m.PlatformPercentage + } + return 0 +} + +func init() { + proto.RegisterType((*GenesisState)(nil), "xion.v1.GenesisState") + proto.RegisterType((*Params)(nil), "xion.v1.Params") +} + +func init() { proto.RegisterFile("xion/xion/v1/genesis.proto", fileDescriptor_d94107830e1c4574) } + +var fileDescriptor_d94107830e1c4574 = []byte{ + // 228 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0xaa, 0xc8, 0xcc, 0xcf, + 0xd3, 0x07, 0x13, 0x65, 0x86, 0xfa, 0xe9, 0xa9, 0x79, 0xa9, 0xc5, 0x99, 0xc5, 0x7a, 0x05, 0x45, + 0xf9, 0x25, 0xf9, 0x42, 0xec, 0x20, 0x61, 0xbd, 0x32, 0x43, 0x29, 0x91, 0xf4, 0xfc, 0xf4, 0x7c, + 0xb0, 0x98, 0x3e, 0x88, 0x05, 0x91, 0x56, 0x32, 0xe7, 0xe2, 0x71, 0x87, 0xa8, 0x0f, 0x2e, 0x49, + 0x2c, 0x49, 0x15, 0x52, 0xe7, 0x62, 0x2b, 0x48, 0x2c, 0x4a, 0xcc, 0x2d, 0x96, 0x60, 0x54, 0x60, + 0xd4, 0xe0, 0x36, 0xe2, 0xd7, 0x83, 0xea, 0xd7, 0x0b, 0x00, 0x0b, 0x07, 0x41, 0xa5, 0x95, 0x22, + 0xb9, 0xd8, 0x20, 0x22, 0x42, 0xfe, 0x5c, 0xc2, 0x05, 0x39, 0x89, 0x25, 0x69, 0xf9, 0x45, 0xb9, + 0xf1, 0x05, 0xa9, 0x45, 0xc9, 0xa9, 0x79, 0x25, 0x89, 0xe9, 0xa9, 0x60, 0xfd, 0xbc, 0x4e, 0x72, + 0x9f, 0xee, 0xc9, 0x4b, 0x55, 0x26, 0xe6, 0xe6, 0x58, 0x29, 0x61, 0x51, 0xa4, 0x14, 0x24, 0x04, + 0x13, 0x0d, 0x80, 0x0b, 0x3a, 0x39, 0x9e, 0x78, 0x24, 0xc7, 0x78, 0xe1, 0x91, 0x1c, 0xe3, 0x83, + 0x47, 0x72, 0x8c, 0x13, 0x1e, 0xcb, 0x31, 0x5c, 0x78, 0x2c, 0xc7, 0x70, 0xe3, 0xb1, 0x1c, 0x43, + 0x94, 0x7a, 0x7a, 0x66, 0x49, 0x46, 0x69, 0x92, 0x5e, 0x72, 0x7e, 0xae, 0x7e, 0x52, 0x69, 0x51, + 0x5e, 0x89, 0x6e, 0x4e, 0x62, 0x52, 0x31, 0xc4, 0xe7, 0x15, 0x10, 0xaa, 0xa4, 0xb2, 0x20, 0xb5, + 0x38, 0x89, 0x0d, 0xec, 0x3b, 0x63, 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0x3f, 0x0a, 0x43, 0x20, + 0x1a, 0x01, 0x00, 0x00, +} + +func (m *GenesisState) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GenesisState) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Params != nil { + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *Params) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Params) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.PlatformPercentage != 0 { + i = encodeVarintGenesis(dAtA, i, uint64(m.PlatformPercentage)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func encodeVarintGenesis(dAtA []byte, offset int, v uint64) int { + offset -= sovGenesis(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *GenesisState) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Params != nil { + l = m.Params.Size() + n += 1 + l + sovGenesis(uint64(l)) + } + return n +} + +func (m *Params) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.PlatformPercentage != 0 { + n += 1 + sovGenesis(uint64(m.PlatformPercentage)) + } + return n +} + +func sovGenesis(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozGenesis(x uint64) (n int) { + return sovGenesis(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *GenesisState) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GenesisState: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GenesisState: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Params == nil { + m.Params = &Params{} + } + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenesis(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenesis + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Params) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Params: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Params: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PlatformPercentage", wireType) + } + m.PlatformPercentage = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.PlatformPercentage |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipGenesis(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenesis + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenesis(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthGenesis + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupGenesis + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthGenesis + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthGenesis = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenesis = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupGenesis = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/xion/types/tx.pb.go b/x/xion/types/tx.pb.go new file mode 100644 index 00000000..17e3b644 --- /dev/null +++ b/x/xion/types/tx.pb.go @@ -0,0 +1,1047 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: xion/xion/v1/tx.proto + +package types + +import ( + context "context" + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" + types "github.com/cosmos/cosmos-sdk/types" + _ "github.com/cosmos/cosmos-sdk/types/msgservice" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" + types1 "github.com/cosmos/cosmos-sdk/x/bank/types" + _ "github.com/cosmos/gogoproto/gogoproto" + grpc1 "github.com/cosmos/gogoproto/grpc" + proto "github.com/cosmos/gogoproto/proto" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// MsgSend represents a message to send coins from one account to another. +type MsgSend struct { + FromAddress string `protobuf:"bytes,1,opt,name=from_address,json=fromAddress,proto3" json:"from_address,omitempty"` + ToAddress string `protobuf:"bytes,2,opt,name=to_address,json=toAddress,proto3" json:"to_address,omitempty"` + Amount github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,3,rep,name=amount,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"amount"` +} + +func (m *MsgSend) Reset() { *m = MsgSend{} } +func (m *MsgSend) String() string { return proto.CompactTextString(m) } +func (*MsgSend) ProtoMessage() {} +func (*MsgSend) Descriptor() ([]byte, []int) { + return fileDescriptor_780dee9ad54baf68, []int{0} +} +func (m *MsgSend) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgSend) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgSend.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgSend) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgSend.Merge(m, src) +} +func (m *MsgSend) XXX_Size() int { + return m.Size() +} +func (m *MsgSend) XXX_DiscardUnknown() { + xxx_messageInfo_MsgSend.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgSend proto.InternalMessageInfo + +// MsgSendResponse defines the Msg/Send response type. +type MsgSendResponse struct { +} + +func (m *MsgSendResponse) Reset() { *m = MsgSendResponse{} } +func (m *MsgSendResponse) String() string { return proto.CompactTextString(m) } +func (*MsgSendResponse) ProtoMessage() {} +func (*MsgSendResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_780dee9ad54baf68, []int{1} +} +func (m *MsgSendResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgSendResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgSendResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgSendResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgSendResponse.Merge(m, src) +} +func (m *MsgSendResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgSendResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgSendResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgSendResponse proto.InternalMessageInfo + +// MsgMultiSend represents an arbitrary multi-in, multi-out send message. +type MsgMultiSend struct { + // Inputs, despite being `repeated`, only allows one sender input. This is + // checked in MsgMultiSend's ValidateBasic. + Inputs []types1.Input `protobuf:"bytes,1,rep,name=inputs,proto3" json:"inputs"` + Outputs []types1.Output `protobuf:"bytes,2,rep,name=outputs,proto3" json:"outputs"` +} + +func (m *MsgMultiSend) Reset() { *m = MsgMultiSend{} } +func (m *MsgMultiSend) String() string { return proto.CompactTextString(m) } +func (*MsgMultiSend) ProtoMessage() {} +func (*MsgMultiSend) Descriptor() ([]byte, []int) { + return fileDescriptor_780dee9ad54baf68, []int{2} +} +func (m *MsgMultiSend) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgMultiSend) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgMultiSend.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgMultiSend) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgMultiSend.Merge(m, src) +} +func (m *MsgMultiSend) XXX_Size() int { + return m.Size() +} +func (m *MsgMultiSend) XXX_DiscardUnknown() { + xxx_messageInfo_MsgMultiSend.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgMultiSend proto.InternalMessageInfo + +func (m *MsgMultiSend) GetInputs() []types1.Input { + if m != nil { + return m.Inputs + } + return nil +} + +func (m *MsgMultiSend) GetOutputs() []types1.Output { + if m != nil { + return m.Outputs + } + return nil +} + +// MsgMultiSendResponse defines the Msg/MultiSend response type. +type MsgMultiSendResponse struct { +} + +func (m *MsgMultiSendResponse) Reset() { *m = MsgMultiSendResponse{} } +func (m *MsgMultiSendResponse) String() string { return proto.CompactTextString(m) } +func (*MsgMultiSendResponse) ProtoMessage() {} +func (*MsgMultiSendResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_780dee9ad54baf68, []int{3} +} +func (m *MsgMultiSendResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgMultiSendResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgMultiSendResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgMultiSendResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgMultiSendResponse.Merge(m, src) +} +func (m *MsgMultiSendResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgMultiSendResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgMultiSendResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgMultiSendResponse proto.InternalMessageInfo + +func init() { + proto.RegisterType((*MsgSend)(nil), "xion.v1.MsgSend") + proto.RegisterType((*MsgSendResponse)(nil), "xion.v1.MsgSendResponse") + proto.RegisterType((*MsgMultiSend)(nil), "xion.v1.MsgMultiSend") + proto.RegisterType((*MsgMultiSendResponse)(nil), "xion.v1.MsgMultiSendResponse") +} + +func init() { proto.RegisterFile("xion/xion/v1/tx.proto", fileDescriptor_780dee9ad54baf68) } + +var fileDescriptor_780dee9ad54baf68 = []byte{ + // 510 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x53, 0x31, 0x8b, 0x13, 0x41, + 0x14, 0xde, 0x4d, 0x34, 0x21, 0x73, 0x07, 0x9a, 0x25, 0xa7, 0xb9, 0x15, 0x37, 0x47, 0x40, 0x0c, + 0x81, 0xec, 0x92, 0x88, 0x08, 0x27, 0x82, 0x89, 0x95, 0x45, 0x10, 0x72, 0x9d, 0xcd, 0xb1, 0x9b, + 0xac, 0x73, 0x4b, 0x6e, 0xe7, 0x85, 0x9d, 0xd9, 0x10, 0x3b, 0xd1, 0x46, 0xac, 0x6c, 0xec, 0xaf, + 0x14, 0xab, 0x2b, 0xc4, 0xdf, 0x70, 0xe5, 0x61, 0x65, 0xa5, 0x92, 0x14, 0xe7, 0xcf, 0x90, 0x99, + 0x79, 0xbb, 0x17, 0x35, 0x60, 0xb3, 0x33, 0xf3, 0x7d, 0xef, 0x7b, 0xf9, 0xbe, 0x37, 0x13, 0xb2, + 0xb3, 0x88, 0x80, 0x79, 0xea, 0x33, 0xef, 0x7a, 0x62, 0xe1, 0xce, 0x12, 0x10, 0x60, 0x95, 0x25, + 0xe2, 0xce, 0xbb, 0x76, 0x8d, 0x02, 0x05, 0x85, 0x79, 0x72, 0xa7, 0x69, 0xfb, 0xe6, 0x18, 0x78, + 0x0c, 0xdc, 0x8b, 0x39, 0x95, 0xb2, 0x98, 0x53, 0x24, 0xaa, 0x7e, 0x1c, 0x31, 0xf0, 0xd4, 0x17, + 0xa1, 0x5d, 0x5d, 0x7b, 0xa8, 0x9b, 0xe8, 0x03, 0x52, 0x0e, 0xb6, 0x09, 0x7c, 0x1e, 0x7a, 0xf3, + 0x6e, 0x10, 0x0a, 0xbf, 0xeb, 0x8d, 0x21, 0x62, 0xff, 0xf0, 0x6c, 0x9a, 0xf3, 0xf2, 0xa0, 0xf9, + 0xe6, 0x87, 0x02, 0x29, 0x0f, 0x39, 0x3d, 0x08, 0xd9, 0xc4, 0x7a, 0x48, 0xb6, 0x5f, 0x24, 0x10, + 0x1f, 0xfa, 0x93, 0x49, 0x12, 0x72, 0x5e, 0x37, 0xf7, 0xcc, 0x56, 0x65, 0x50, 0xff, 0xfa, 0xb9, + 0x53, 0xc3, 0xdf, 0xec, 0x6b, 0xe6, 0x40, 0x24, 0x11, 0xa3, 0xa3, 0x2d, 0x59, 0x8d, 0x90, 0xf5, + 0x80, 0x10, 0x01, 0xb9, 0xb4, 0xf0, 0x1f, 0x69, 0x45, 0x40, 0x26, 0x3c, 0x22, 0x25, 0x3f, 0x86, + 0x94, 0x89, 0x7a, 0x71, 0xaf, 0xd8, 0xda, 0xea, 0xed, 0xba, 0xa8, 0x90, 0x91, 0x5c, 0xb4, 0xec, + 0x3e, 0x81, 0x88, 0x0d, 0xee, 0x9f, 0x7d, 0x6f, 0x18, 0x9f, 0x7e, 0x34, 0x5a, 0x34, 0x12, 0x47, + 0x69, 0xe0, 0x8e, 0x21, 0xc6, 0x69, 0xe0, 0xd2, 0xe1, 0x93, 0xa9, 0x27, 0x5e, 0xce, 0x42, 0xae, + 0x04, 0xfc, 0xe3, 0xc5, 0x69, 0xdb, 0x1c, 0x61, 0xff, 0xfd, 0xf6, 0xdb, 0x93, 0x86, 0xf1, 0xeb, + 0xa4, 0x61, 0xbc, 0xbe, 0x38, 0x6d, 0xff, 0x11, 0xf5, 0x9d, 0x04, 0xd4, 0x0d, 0xe2, 0x2c, 0x9a, + 0x55, 0x72, 0x0d, 0xb7, 0xa3, 0x90, 0xcf, 0x80, 0xf1, 0xb0, 0xf9, 0xc5, 0x24, 0xdb, 0x43, 0x4e, + 0x87, 0xe9, 0xb1, 0x88, 0xd4, 0xbc, 0x1e, 0x91, 0x52, 0xc4, 0x66, 0xa9, 0x90, 0x93, 0x92, 0xce, + 0xed, 0x4b, 0xe7, 0x6c, 0x9a, 0x3b, 0x7f, 0x2a, 0x4b, 0x06, 0x15, 0x69, 0x1d, 0xed, 0x68, 0x91, + 0xf5, 0x98, 0x94, 0x21, 0x15, 0x4a, 0x5f, 0x50, 0xfa, 0x5b, 0x1b, 0xf5, 0xcf, 0x54, 0xcd, 0x7a, + 0x83, 0x4c, 0xb6, 0x7f, 0x27, 0x0b, 0x83, 0x2d, 0x65, 0x8c, 0x6a, 0x16, 0x23, 0xf7, 0xd9, 0xbc, + 0x41, 0x6a, 0xeb, 0xe7, 0x2c, 0x50, 0xef, 0x8d, 0x49, 0x8a, 0x43, 0x4e, 0xad, 0x1e, 0xb9, 0xa2, + 0xf2, 0x5c, 0x77, 0xf1, 0xc9, 0xba, 0x18, 0xdd, 0xae, 0xff, 0x8d, 0x64, 0x5a, 0xab, 0x4f, 0x2a, + 0x97, 0x83, 0xd8, 0x59, 0x2f, 0xcb, 0x61, 0xfb, 0xf6, 0x46, 0x38, 0x6b, 0x61, 0x5f, 0x7d, 0x25, + 0xd3, 0x0c, 0xfa, 0x67, 0x4b, 0xc7, 0x3c, 0x5f, 0x3a, 0xe6, 0xcf, 0xa5, 0x63, 0xbe, 0x5f, 0x39, + 0xc6, 0xf9, 0xca, 0x31, 0xbe, 0xad, 0x1c, 0xe3, 0xf9, 0xdd, 0xb5, 0x6b, 0x0e, 0xd2, 0x84, 0x89, + 0xce, 0xb1, 0x1f, 0x70, 0xfd, 0x4f, 0x5b, 0xe8, 0x45, 0xdd, 0x75, 0x50, 0x52, 0x6f, 0xf9, 0xde, + 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0x20, 0x8d, 0x9a, 0x01, 0x8a, 0x03, 0x00, 0x00, +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// MsgClient is the client API for Msg service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type MsgClient interface { + // Send defines a method for sending coins from one account to another account. + Send(ctx context.Context, in *MsgSend, opts ...grpc.CallOption) (*MsgSendResponse, error) + // MultiSend defines a method for sending coins from some accounts to other accounts. + MultiSend(ctx context.Context, in *MsgMultiSend, opts ...grpc.CallOption) (*MsgMultiSendResponse, error) +} + +type msgClient struct { + cc grpc1.ClientConn +} + +func NewMsgClient(cc grpc1.ClientConn) MsgClient { + return &msgClient{cc} +} + +func (c *msgClient) Send(ctx context.Context, in *MsgSend, opts ...grpc.CallOption) (*MsgSendResponse, error) { + out := new(MsgSendResponse) + err := c.cc.Invoke(ctx, "/xion.v1.Msg/Send", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) MultiSend(ctx context.Context, in *MsgMultiSend, opts ...grpc.CallOption) (*MsgMultiSendResponse, error) { + out := new(MsgMultiSendResponse) + err := c.cc.Invoke(ctx, "/xion.v1.Msg/MultiSend", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// MsgServer is the server API for Msg service. +type MsgServer interface { + // Send defines a method for sending coins from one account to another account. + Send(context.Context, *MsgSend) (*MsgSendResponse, error) + // MultiSend defines a method for sending coins from some accounts to other accounts. + MultiSend(context.Context, *MsgMultiSend) (*MsgMultiSendResponse, error) +} + +// UnimplementedMsgServer can be embedded to have forward compatible implementations. +type UnimplementedMsgServer struct { +} + +func (*UnimplementedMsgServer) Send(ctx context.Context, req *MsgSend) (*MsgSendResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Send not implemented") +} +func (*UnimplementedMsgServer) MultiSend(ctx context.Context, req *MsgMultiSend) (*MsgMultiSendResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method MultiSend not implemented") +} + +func RegisterMsgServer(s grpc1.Server, srv MsgServer) { + s.RegisterService(&_Msg_serviceDesc, srv) +} + +func _Msg_Send_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgSend) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).Send(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/xion.v1.Msg/Send", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).Send(ctx, req.(*MsgSend)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_MultiSend_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgMultiSend) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).MultiSend(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/xion.v1.Msg/MultiSend", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).MultiSend(ctx, req.(*MsgMultiSend)) + } + return interceptor(ctx, in, info, handler) +} + +var _Msg_serviceDesc = grpc.ServiceDesc{ + ServiceName: "xion.v1.Msg", + HandlerType: (*MsgServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Send", + Handler: _Msg_Send_Handler, + }, + { + MethodName: "MultiSend", + Handler: _Msg_MultiSend_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "xion/xion/v1/tx.proto", +} + +func (m *MsgSend) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgSend) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgSend) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Amount) > 0 { + for iNdEx := len(m.Amount) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Amount[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + } + if len(m.ToAddress) > 0 { + i -= len(m.ToAddress) + copy(dAtA[i:], m.ToAddress) + i = encodeVarintTx(dAtA, i, uint64(len(m.ToAddress))) + i-- + dAtA[i] = 0x12 + } + if len(m.FromAddress) > 0 { + i -= len(m.FromAddress) + copy(dAtA[i:], m.FromAddress) + i = encodeVarintTx(dAtA, i, uint64(len(m.FromAddress))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgSendResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgSendResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgSendResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgMultiSend) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgMultiSend) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgMultiSend) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Outputs) > 0 { + for iNdEx := len(m.Outputs) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Outputs[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + if len(m.Inputs) > 0 { + for iNdEx := len(m.Inputs) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Inputs[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *MsgMultiSendResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgMultiSendResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgMultiSendResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func encodeVarintTx(dAtA []byte, offset int, v uint64) int { + offset -= sovTx(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *MsgSend) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.FromAddress) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.ToAddress) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + if len(m.Amount) > 0 { + for _, e := range m.Amount { + l = e.Size() + n += 1 + l + sovTx(uint64(l)) + } + } + return n +} + +func (m *MsgSendResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgMultiSend) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Inputs) > 0 { + for _, e := range m.Inputs { + l = e.Size() + n += 1 + l + sovTx(uint64(l)) + } + } + if len(m.Outputs) > 0 { + for _, e := range m.Outputs { + l = e.Size() + n += 1 + l + sovTx(uint64(l)) + } + } + return n +} + +func (m *MsgMultiSendResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func sovTx(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozTx(x uint64) (n int) { + return sovTx(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *MsgSend) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgSend: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgSend: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FromAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.FromAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ToAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ToAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Amount", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Amount = append(m.Amount, types.Coin{}) + if err := m.Amount[len(m.Amount)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgSendResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgSendResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgSendResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgMultiSend) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgMultiSend: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgMultiSend: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Inputs", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Inputs = append(m.Inputs, types1.Input{}) + if err := m.Inputs[len(m.Inputs)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Outputs", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Outputs = append(m.Outputs, types1.Output{}) + if err := m.Outputs[len(m.Outputs)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgMultiSendResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgMultiSendResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgMultiSendResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipTx(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthTx + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupTx + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthTx + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthTx = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowTx = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupTx = fmt.Errorf("proto: unexpected end of group") +) From 82b87d99e45e7f82f2f9504162cfeb743523a056 Mon Sep 17 00:00:00 2001 From: Ash Date: Mon, 1 May 2023 20:46:47 -0500 Subject: [PATCH 038/501] compiles --- x/xion/client/cli/suite_test.go | 39 ++++++ x/xion/client/cli/tx.go | 145 +++++++++++++++++++++ x/xion/client/cli/tx_test.go | 212 +++++++++++++++++++++++++++++++ x/xion/keeper/genesis.go | 19 +++ x/xion/keeper/msg_server.go | 111 ++++++++++------ x/xion/module.go | 18 +-- x/xion/types/codec.go | 47 +++++++ x/xion/types/expected_keepers.go | 8 +- x/xion/types/genesis.go | 42 ++++++ x/xion/types/msgs.go | 110 ++++++++++++++++ 10 files changed, 702 insertions(+), 49 deletions(-) create mode 100644 x/xion/client/cli/suite_test.go create mode 100644 x/xion/client/cli/tx.go create mode 100644 x/xion/client/cli/tx_test.go create mode 100644 x/xion/keeper/genesis.go create mode 100644 x/xion/types/codec.go create mode 100644 x/xion/types/genesis.go create mode 100644 x/xion/types/msgs.go diff --git a/x/xion/client/cli/suite_test.go b/x/xion/client/cli/suite_test.go new file mode 100644 index 00000000..648a701c --- /dev/null +++ b/x/xion/client/cli/suite_test.go @@ -0,0 +1,39 @@ +package cli_test + +import ( + "io" + "testing" + + rpcclientmock "github.com/cometbft/cometbft/rpc/client/mock" + "github.com/stretchr/testify/suite" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/crypto/keyring" + clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli" + testutilmod "github.com/cosmos/cosmos-sdk/types/module/testutil" + "github.com/cosmos/cosmos-sdk/x/bank" +) + +type CLITestSuite struct { + suite.Suite + + kr keyring.Keyring + encCfg testutilmod.TestEncodingConfig + baseCtx client.Context +} + +func TestMigrateTestSuite(t *testing.T) { + suite.Run(t, new(CLITestSuite)) +} + +func (s *CLITestSuite) SetupSuite() { + s.encCfg = testutilmod.MakeTestEncodingConfig(bank.AppModuleBasic{}) + s.kr = keyring.NewInMemory(s.encCfg.Codec) + s.baseCtx = client.Context{}. + WithKeyring(s.kr). + WithTxConfig(s.encCfg.TxConfig). + WithCodec(s.encCfg.Codec). + WithClient(clitestutil.MockTendermintRPC{Client: rpcclientmock.Client{}}). + WithAccountRetriever(client.MockAccountRetriever{}). + WithOutput(io.Discard) +} diff --git a/x/xion/client/cli/tx.go b/x/xion/client/cli/tx.go new file mode 100644 index 00000000..6d267a6a --- /dev/null +++ b/x/xion/client/cli/tx.go @@ -0,0 +1,145 @@ +package cli + +import ( + "fmt" + "github.com/burnt-labs/xion/x/xion/types" + + "github.com/spf13/cobra" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/flags" + "github.com/cosmos/cosmos-sdk/client/tx" + sdk "github.com/cosmos/cosmos-sdk/types" + banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" +) + +var FlagSplit = "split" + +// NewTxCmd returns a root CLI command handler for all x/xion transaction commands. +func NewTxCmd() *cobra.Command { + txCmd := &cobra.Command{ + Use: types.ModuleName, + Short: "Xion transaction subcommands", + DisableFlagParsing: true, + SuggestionsMinimumDistance: 2, + RunE: client.ValidateCmd, + } + + txCmd.AddCommand( + NewSendTxCmd(), + NewMultiSendTxCmd(), + ) + + return txCmd +} + +// NewSendTxCmd returns a CLI command handler for creating a MsgSend transaction. +func NewSendTxCmd() *cobra.Command { + cmd := &cobra.Command{ + Use: "send [from_key_or_address] [to_address] [amount]", + Short: "Send funds from one account to another.", + Long: `Send funds from one account to another. +Note, the '--from' flag is ignored as it is implied from [from_key_or_address]. +When using '--dry-run' a key name cannot be used, only a bech32 address. +`, + Args: cobra.ExactArgs(3), + RunE: func(cmd *cobra.Command, args []string) error { + cmd.Flags().Set(flags.FlagFrom, args[0]) + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + + toAddr, err := sdk.AccAddressFromBech32(args[1]) + if err != nil { + return err + } + + coins, err := sdk.ParseCoinsNormalized(args[2]) + if err != nil { + return err + } + + msg := types.NewMsgSend(clientCtx.GetFromAddress(), toAddr, coins) + + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + + flags.AddTxFlagsToCmd(cmd) + + return cmd +} + +// NewMultiSendTxCmd returns a CLI command handler for creating a MsgMultiSend transaction. +// For a better UX this command is limited to send funds from one account to two or more accounts. +func NewMultiSendTxCmd() *cobra.Command { + cmd := &cobra.Command{ + Use: "multi-send [from_key_or_address] [to_address_1, to_address_2, ...] [amount]", + Short: "Send funds from one account to two or more accounts.", + Long: `Send funds from one account to two or more accounts. +By default, sends the [amount] to each address of the list. +Using the '--split' flag, the [amount] is split equally between the addresses. +Note, the '--from' flag is ignored as it is implied from [from_key_or_address]. +When using '--dry-run' a key name cannot be used, only a bech32 address. +`, + Args: cobra.MinimumNArgs(4), + RunE: func(cmd *cobra.Command, args []string) error { + cmd.Flags().Set(flags.FlagFrom, args[0]) + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + + coins, err := sdk.ParseCoinsNormalized(args[len(args)-1]) + if err != nil { + return err + } + + if coins.IsZero() { + return fmt.Errorf("must send positive amount") + } + + split, err := cmd.Flags().GetBool(FlagSplit) + if err != nil { + return err + } + + totalAddrs := sdk.NewInt(int64(len(args) - 2)) + // coins to be received by the addresses + sendCoins := coins + if split { + sendCoins = coins.QuoInt(totalAddrs) + } + + var output []banktypes.Output + for _, arg := range args[1 : len(args)-1] { + toAddr, err := sdk.AccAddressFromBech32(arg) + if err != nil { + return err + } + + output = append(output, banktypes.NewOutput(toAddr, sendCoins)) + } + + // amount to be send from the from address + var amount sdk.Coins + if split { + // user input: 1000stake to send to 3 addresses + // actual: 333stake to each address (=> 999stake actually sent) + amount = sendCoins.MulInt(totalAddrs) + } else { + amount = coins.MulInt(totalAddrs) + } + + msg := types.NewMsgMultiSend([]banktypes.Input{banktypes.NewInput(clientCtx.FromAddress, amount)}, output) + + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + + cmd.Flags().Bool(FlagSplit, false, "Send the equally split token amount to each address") + flags.AddTxFlagsToCmd(cmd) + + return cmd +} diff --git a/x/xion/client/cli/tx_test.go b/x/xion/client/cli/tx_test.go new file mode 100644 index 00000000..0df5630c --- /dev/null +++ b/x/xion/client/cli/tx_test.go @@ -0,0 +1,212 @@ +package cli_test + +import ( + "context" + "fmt" + "io" + + "github.com/burnt-labs/xion/x/xion/client/cli" + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/flags" + svrcmd "github.com/cosmos/cosmos-sdk/server/cmd" + "github.com/cosmos/cosmos-sdk/testutil" + sdk "github.com/cosmos/cosmos-sdk/types" +) + +func (s *CLITestSuite) TestSendTxCmd() { + accounts := testutil.CreateKeyringAccounts(s.T(), s.kr, 1) + cmd := cli.NewSendTxCmd() + cmd.SetOutput(io.Discard) + + extraArgs := []string{ + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), + fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin("photon", sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=test-chain", flags.FlagChainID), + } + + testCases := []struct { + name string + ctxGen func() client.Context + from, to sdk.AccAddress + amount sdk.Coins + extraArgs []string + expectErr bool + }{ + { + "valid transaction", + func() client.Context { + return s.baseCtx + }, + accounts[0].Address, + accounts[0].Address, + sdk.NewCoins( + sdk.NewCoin("stake", sdk.NewInt(10)), + sdk.NewCoin("photon", sdk.NewInt(40)), + ), + extraArgs, + false, + }, + { + "invalid to Address", + func() client.Context { + return s.baseCtx + }, + accounts[0].Address, + sdk.AccAddress{}, + sdk.NewCoins( + sdk.NewCoin("stake", sdk.NewInt(10)), + sdk.NewCoin("photon", sdk.NewInt(40)), + ), + extraArgs, + true, + }, + { + "invalid coins", + func() client.Context { + return s.baseCtx + }, + accounts[0].Address, + accounts[0].Address, + nil, + extraArgs, + true, + }, + } + + for _, tc := range testCases { + tc := tc + s.Run(tc.name, func() { + ctx := svrcmd.CreateExecuteContext(context.Background()) + + cmd.SetContext(ctx) + cmd.SetArgs(append([]string{tc.from.String(), tc.to.String(), tc.amount.String()}, tc.extraArgs...)) + + s.Require().NoError(client.SetCmdClientContextHandler(tc.ctxGen(), cmd)) + + err := cmd.Execute() + if tc.expectErr { + s.Require().Error(err) + } else { + s.Require().NoError(err) + } + }) + } +} + +func (s *CLITestSuite) TestMultiSendTxCmd() { + accounts := testutil.CreateKeyringAccounts(s.T(), s.kr, 3) + + cmd := cli.NewMultiSendTxCmd() + cmd.SetOutput(io.Discard) + + extraArgs := []string{ + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), + fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin("photon", sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=test-chain", flags.FlagChainID), + } + + testCases := []struct { + name string + ctxGen func() client.Context + from string + to []string + amount sdk.Coins + extraArgs []string + expectErr bool + }{ + { + "valid transaction", + func() client.Context { + return s.baseCtx + }, + accounts[0].Address.String(), + []string{ + accounts[1].Address.String(), + accounts[2].Address.String(), + }, + sdk.NewCoins( + sdk.NewCoin("stake", sdk.NewInt(10)), + sdk.NewCoin("photon", sdk.NewInt(40)), + ), + extraArgs, + false, + }, + { + "invalid from Address", + func() client.Context { + return s.baseCtx + }, + "foo", + []string{ + accounts[1].Address.String(), + accounts[2].Address.String(), + }, + sdk.NewCoins( + sdk.NewCoin("stake", sdk.NewInt(10)), + sdk.NewCoin("photon", sdk.NewInt(40)), + ), + extraArgs, + true, + }, + { + "invalid recipients", + func() client.Context { + return s.baseCtx + }, + accounts[0].Address.String(), + []string{ + accounts[1].Address.String(), + "bar", + }, + sdk.NewCoins( + sdk.NewCoin("stake", sdk.NewInt(10)), + sdk.NewCoin("photon", sdk.NewInt(40)), + ), + extraArgs, + true, + }, + { + "invalid amount", + func() client.Context { + return s.baseCtx + }, + accounts[0].Address.String(), + []string{ + accounts[1].Address.String(), + accounts[2].Address.String(), + }, + nil, + extraArgs, + true, + }, + } + + for _, tc := range testCases { + tc := tc + s.Run(tc.name, func() { + ctx := svrcmd.CreateExecuteContext(context.Background()) + + var args []string + args = append(args, tc.from) + args = append(args, tc.to...) + args = append(args, tc.amount.String()) + args = append(args, tc.extraArgs...) + + cmd.SetContext(ctx) + cmd.SetArgs(args) + + s.Require().NoError(client.SetCmdClientContextHandler(tc.ctxGen(), cmd)) + + err := cmd.Execute() + if tc.expectErr { + s.Require().Error(err) + } else { + s.Require().NoError(err) + } + }) + } +} diff --git a/x/xion/keeper/genesis.go b/x/xion/keeper/genesis.go new file mode 100644 index 00000000..02148df0 --- /dev/null +++ b/x/xion/keeper/genesis.go @@ -0,0 +1,19 @@ +package keeper + +import ( + "github.com/burnt-labs/xion/x/xion/types" + sdk "github.com/cosmos/cosmos-sdk/types" +) + +// InitGenesis initializes the bank module's state from a given genesis state. +func (k Keeper) InitGenesis(ctx sdk.Context, genState *types.GenesisState) { + k.setParams(ctx, *genState.Params) +} + +// ExportGenesis returns the bank module's genesis state. +func (k Keeper) ExportGenesis(ctx sdk.Context) *types.GenesisState { + rv := types.NewGenesisState( + k.GetParamSet(ctx), + ) + return rv +} diff --git a/x/xion/keeper/msg_server.go b/x/xion/keeper/msg_server.go index ec2f2442..9f4ff1a5 100644 --- a/x/xion/keeper/msg_server.go +++ b/x/xion/keeper/msg_server.go @@ -3,6 +3,9 @@ package keeper import ( "context" "fmt" + "github.com/armon/go-metrics" + "github.com/cosmos/cosmos-sdk/telemetry" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" @@ -25,73 +28,109 @@ func NewMsgServerImpl(keeper Keeper) types.MsgServer { func (k msgServer) Send(goCtx context.Context, msg *types.MsgSend) (*types.MsgSendResponse, error) { ctx := sdk.UnwrapSDKContext(goCtx) + if err := k.bankKeeper.IsSendEnabledCoins(ctx, msg.Amount...); err != nil { + return nil, err + } + + from, err := sdk.AccAddressFromBech32(msg.FromAddress) + if err != nil { + return nil, err + } + to, err := sdk.AccAddressFromBech32(msg.ToAddress) + if err != nil { + return nil, err + } + + if k.bankKeeper.BlockedAddr(to) { + return nil, sdkerrors.Wrapf(sdkerrors.ErrUnauthorized, "%s is not allowed to receive funds", msg.ToAddress) + } + percentage := k.GetParamSet(ctx).PlatformPercentage throughCoins := msg.Amount if percentage > 0 { - sendAddress, err := sdk.AccAddressFromBech32(msg.FromAddress) - if err != nil { - return nil, err - } - platformCoins := msg.Amount.MulInt(sdk.NewIntFromUint64(uint64(percentage))).QuoInt(sdk.NewInt(10000)) throughCoins, ok := throughCoins.SafeSub(platformCoins...) if !ok { return nil, fmt.Errorf("unable to subtract %v from %v", platformCoins, throughCoins) } - if err := k.bankKeeper.SendCoinsFromAccountToModule(ctx, sendAddress, authtypes.FeeCollectorName, platformCoins); err != nil { + if err := k.bankKeeper.SendCoinsFromAccountToModule(ctx, from, authtypes.FeeCollectorName, platformCoins); err != nil { + return nil, err + } + + err = k.bankKeeper.SendCoins(ctx, from, to, msg.Amount) + if err != nil { return nil, err } - } - newMsg := banktypes.MsgSend{ - FromAddress: msg.FromAddress, - ToAddress: msg.ToAddress, - Amount: throughCoins, } - if _, err := k.bankKeeper.Send(goCtx, &newMsg); err != nil { + err = k.bankKeeper.SendCoins(ctx, from, to, msg.Amount) + if err != nil { return nil, err } + defer func() { + for _, a := range msg.Amount { + if a.Amount.IsInt64() { + telemetry.SetGaugeWithLabels( + []string{"tx", "msg", "send"}, + float32(a.Amount.Int64()), + []metrics.Label{telemetry.NewLabel("denom", a.Denom)}, + ) + } + } + }() + return &types.MsgSendResponse{}, nil } func (k msgServer) MultiSend(goCtx context.Context, msg *types.MsgMultiSend) (*types.MsgMultiSendResponse, error) { ctx := sdk.UnwrapSDKContext(goCtx) - if k.GetParamSet(ctx).PlatformPercentage > 0 { - feeCollectorAcc := k.accountKeeper.GetModuleAccount(ctx, authtypes.FeeCollectorName).GetAddress() - percentage := sdk.NewIntFromUint64(uint64(k.GetParamSet(ctx).PlatformPercentage)) - var newOutputs []banktypes.Output - for _, output := range msg.Outputs { - platformCoins := output.Coins.MulInt(percentage).QuoInt(sdk.NewInt(10000)) - throughCoins, ok := output.Coins.SafeSub(platformCoins...) + // NOTE: totalIn == totalOut should already have been checked + for _, in := range msg.Inputs { + if err := k.bankKeeper.IsSendEnabledCoins(ctx, in.Coins...); err != nil { + return nil, err + } + } + + percentage := sdk.NewIntFromUint64(uint64(k.GetParamSet(ctx).PlatformPercentage)) + var outputs []banktypes.Output + totalPlatformCoins := sdk.NewCoins() + + for _, out := range msg.Outputs { + accAddr := sdk.MustAccAddressFromBech32(out.Address) + + if k.bankKeeper.BlockedAddr(accAddr) { + return nil, sdkerrors.Wrapf(sdkerrors.ErrUnauthorized, "%s is not allowed to receive funds", out.Address) + } + + // if there is a platform fee set, reduce it from each output + if !percentage.IsZero() { + platformCoins := out.Coins.MulInt(percentage).QuoInt(sdk.NewInt(10000)) + throughCoins, ok := out.Coins.SafeSub(platformCoins...) if !ok { return nil, fmt.Errorf("unable to subtract %v from %v", platformCoins, throughCoins) } - newOutputs = append(newOutputs, - banktypes.NewOutput(feeCollectorAcc, platformCoins), - banktypes.Output{ - Address: output.Address, - Coins: throughCoins, - }) + outputs = append(outputs, banktypes.NewOutput(accAddr, throughCoins)) + totalPlatformCoins = totalPlatformCoins.Add(platformCoins...) + } else { + outputs = append(outputs, out) } + } - if _, err := k.bankKeeper.MultiSend(goCtx, banktypes.NewMsgMultiSend(msg.Inputs, newOutputs)); err != nil { - return nil, err - } + // if there is a platform fee set, create the final total output for module account + if !totalPlatformCoins.IsZero() { + feeCollectorAcc := k.accountKeeper.GetModuleAccount(ctx, authtypes.FeeCollectorName).GetAddress() + outputs = append(outputs, banktypes.NewOutput(feeCollectorAcc, totalPlatformCoins)) + } - } else { - newMsg := banktypes.MsgMultiSend{ - Inputs: msg.Inputs, - Outputs: msg.Outputs, - } - if _, err := k.bankKeeper.MultiSend(goCtx, &newMsg); err != nil { - return nil, err - } + err := k.bankKeeper.InputOutputCoins(ctx, msg.Inputs, outputs) + if err != nil { + return nil, err } return &types.MsgMultiSendResponse{}, nil diff --git a/x/xion/module.go b/x/xion/module.go index 827285a2..0a4e09c9 100644 --- a/x/xion/module.go +++ b/x/xion/module.go @@ -1,7 +1,6 @@ package xion import ( - "context" "encoding/json" "fmt" @@ -59,10 +58,10 @@ func (AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, config client.TxEncod // RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for ics29 fee module. func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) { - err := types.RegisterQueryHandlerClient(context.Background(), mux, types.NewQueryClient(clientCtx)) - if err != nil { - panic(err) - } + //err := types.RegisterQueryHandlerClient(context.Background(), mux, types.NewQueryClient(clientCtx)) + //if err != nil { + // panic(err) + //} } // GetTxCmd implements AppModuleBasic interface @@ -72,7 +71,8 @@ func (AppModuleBasic) GetTxCmd() *cobra.Command { // GetQueryCmd implements AppModuleBasic interface func (AppModuleBasic) GetQueryCmd() *cobra.Command { - return cli.GetQueryCmd() + //return cli.GetQueryCmd() + return nil } // AppModule represents the AppModule for this module @@ -94,8 +94,8 @@ func (AppModule) RegisterInvariants(ir sdk.InvariantRegistry) { // RegisterServices registers module services. func (am AppModule) RegisterServices(cfg module.Configurator) { - types.RegisterMsgServer(cfg.MsgServer(), am.keeper) - types.RegisterQueryServer(cfg.QueryServer(), am.keeper) + types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.keeper)) + //types.RegisterQueryServer(cfg.QueryServer(), am.keeper) } // InitGenesis performs genesis initialization for the ibc-29-fee module. It returns @@ -103,7 +103,7 @@ func (am AppModule) RegisterServices(cfg module.Configurator) { func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, data json.RawMessage) []abci.ValidatorUpdate { var genesisState types.GenesisState cdc.MustUnmarshalJSON(data, &genesisState) - am.keeper.InitGenesis(ctx, genesisState) + am.keeper.InitGenesis(ctx, &genesisState) return []abci.ValidatorUpdate{} } diff --git a/x/xion/types/codec.go b/x/xion/types/codec.go new file mode 100644 index 00000000..5d4f0ad7 --- /dev/null +++ b/x/xion/types/codec.go @@ -0,0 +1,47 @@ +package types + +import ( + "github.com/cosmos/cosmos-sdk/codec" + "github.com/cosmos/cosmos-sdk/codec/legacy" + "github.com/cosmos/cosmos-sdk/codec/types" + cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/msgservice" + authzcodec "github.com/cosmos/cosmos-sdk/x/authz/codec" + govcodec "github.com/cosmos/cosmos-sdk/x/gov/codec" + groupcodec "github.com/cosmos/cosmos-sdk/x/group/codec" +) + +// RegisterLegacyAminoCodec registers the necessary x/bank interfaces and concrete types +// on the provided LegacyAmino codec. These types are used for Amino JSON serialization. +func RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { + legacy.RegisterAminoMsg(cdc, &MsgSend{}, "xion/MsgSend") + legacy.RegisterAminoMsg(cdc, &MsgMultiSend{}, "xion/MsgMultiSend") + cdc.RegisterConcrete(&Params{}, "xion/x/xion/Params", nil) +} + +func RegisterInterfaces(registry types.InterfaceRegistry) { + registry.RegisterImplementations((*sdk.Msg)(nil), + &MsgSend{}, + &MsgMultiSend{}, + ) + + msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc) +} + +var ( + amino = codec.NewLegacyAmino() + ModuleCdc = codec.NewAminoCodec(amino) +) + +func init() { + RegisterLegacyAminoCodec(amino) + cryptocodec.RegisterCrypto(amino) + sdk.RegisterLegacyAminoCodec(amino) + + // Register all Amino interfaces and concrete types on the authz and gov Amino codec so that this can later be + // used to properly serialize MsgGrant, MsgExec and MsgSubmitProposal instances + RegisterLegacyAminoCodec(authzcodec.Amino) + RegisterLegacyAminoCodec(govcodec.Amino) + RegisterLegacyAminoCodec(groupcodec.Amino) +} diff --git a/x/xion/types/expected_keepers.go b/x/xion/types/expected_keepers.go index 9a42cb95..51ee91fb 100644 --- a/x/xion/types/expected_keepers.go +++ b/x/xion/types/expected_keepers.go @@ -1,8 +1,6 @@ package types // noalias import ( - "context" - sdktypes "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" @@ -29,8 +27,10 @@ type BankKeeper interface { recipientModule string, amt sdktypes.Coins, ) error - Send(goCtx context.Context, msg *banktypes.MsgSend) (*banktypes.MsgSendResponse, error) - MultiSend(goCtx context.Context, msg *banktypes.MsgMultiSend) (*banktypes.MsgMultiSendResponse, error) + IsSendEnabledCoins(ctx sdktypes.Context, coins ...sdktypes.Coin) error + BlockedAddr(addr sdktypes.AccAddress) bool + SendCoins(ctx sdktypes.Context, fromAddr sdktypes.AccAddress, toAddr sdktypes.AccAddress, amt sdktypes.Coins) error + InputOutputCoins(ctx sdktypes.Context, inputs []banktypes.Input, outputs []banktypes.Output) error } type AccountKeeper interface { diff --git a/x/xion/types/genesis.go b/x/xion/types/genesis.go new file mode 100644 index 00000000..c0924b75 --- /dev/null +++ b/x/xion/types/genesis.go @@ -0,0 +1,42 @@ +package types + +import ( + "encoding/json" + + "github.com/cosmos/cosmos-sdk/codec" +) + +// Validate performs basic validation of supply genesis data returning an +// error for any failed validation criteria. +func (gs GenesisState) Validate() error { + if err := gs.Params.ValidateBasic(); err != nil { + return err + } + + return nil +} + +// NewGenesisState creates a new genesis state. +func NewGenesisState(params Params) *GenesisState { + rv := &GenesisState{ + Params: ¶ms, + } + return rv +} + +// DefaultGenesisState returns a default bank module genesis state. +func DefaultGenesisState() *GenesisState { + return NewGenesisState(DefaultParams()) +} + +// GetGenesisStateFromAppState returns x/bank GenesisState given raw application +// genesis state. +func GetGenesisStateFromAppState(cdc codec.JSONCodec, appState map[string]json.RawMessage) *GenesisState { + var genesisState GenesisState + + if appState[ModuleName] != nil { + cdc.MustUnmarshalJSON(appState[ModuleName], &genesisState) + } + + return &genesisState +} diff --git a/x/xion/types/msgs.go b/x/xion/types/msgs.go new file mode 100644 index 00000000..4618742f --- /dev/null +++ b/x/xion/types/msgs.go @@ -0,0 +1,110 @@ +package types + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" +) + +// bank message types +const ( + TypeMsgSend = "send" + TypeMsgMultiSend = "multisend" +) + +var ( + _ sdk.Msg = &MsgSend{} + _ sdk.Msg = &MsgMultiSend{} +) + +// NewMsgSend - construct a msg to send coins from one account to another. +// +//nolint:interfacer +func NewMsgSend(fromAddr, toAddr sdk.AccAddress, amount sdk.Coins) *MsgSend { + return &MsgSend{FromAddress: fromAddr.String(), ToAddress: toAddr.String(), Amount: amount} +} + +// Route Implements Msg. +func (msg MsgSend) Route() string { return RouterKey } + +// Type Implements Msg. +func (msg MsgSend) Type() string { return TypeMsgSend } + +// ValidateBasic Implements Msg. +func (msg MsgSend) ValidateBasic() error { + if _, err := sdk.AccAddressFromBech32(msg.FromAddress); err != nil { + return sdkerrors.ErrInvalidAddress.Wrapf("invalid from address: %s", err) + } + + if _, err := sdk.AccAddressFromBech32(msg.ToAddress); err != nil { + return sdkerrors.ErrInvalidAddress.Wrapf("invalid to address: %s", err) + } + + if !msg.Amount.IsValid() { + return sdkerrors.Wrap(sdkerrors.ErrInvalidCoins, msg.Amount.String()) + } + + if !msg.Amount.IsAllPositive() { + return sdkerrors.Wrap(sdkerrors.ErrInvalidCoins, msg.Amount.String()) + } + + return nil +} + +// GetSignBytes Implements Msg. +func (msg MsgSend) GetSignBytes() []byte { + return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&msg)) +} + +// GetSigners Implements Msg. +func (msg MsgSend) GetSigners() []sdk.AccAddress { + fromAddress, _ := sdk.AccAddressFromBech32(msg.FromAddress) + return []sdk.AccAddress{fromAddress} +} + +// NewMsgMultiSend - construct arbitrary multi-in, multi-out send msg. +func NewMsgMultiSend(in []banktypes.Input, out []banktypes.Output) *MsgMultiSend { + return &MsgMultiSend{Inputs: in, Outputs: out} +} + +// Route Implements Msg +func (msg MsgMultiSend) Route() string { return RouterKey } + +// Type Implements Msg +func (msg MsgMultiSend) Type() string { return TypeMsgMultiSend } + +// ValidateBasic Implements Msg. +func (msg MsgMultiSend) ValidateBasic() error { + // this just makes sure the input and all the outputs are properly formatted, + // not that they actually have the money inside + + if len(msg.Inputs) == 0 { + return banktypes.ErrNoInputs + } + + if len(msg.Inputs) != 1 { + return banktypes.ErrMultipleSenders + } + + if len(msg.Outputs) == 0 { + return banktypes.ErrNoOutputs + } + + return banktypes.ValidateInputsOutputs(msg.Inputs, msg.Outputs) +} + +// GetSignBytes Implements Msg. +func (msg MsgMultiSend) GetSignBytes() []byte { + return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&msg)) +} + +// GetSigners Implements Msg. +func (msg MsgMultiSend) GetSigners() []sdk.AccAddress { + addrs := make([]sdk.AccAddress, len(msg.Inputs)) + for i, in := range msg.Inputs { + inAddr, _ := sdk.AccAddressFromBech32(in.Address) + addrs[i] = inAddr + } + + return addrs +} From 9f44e23676590a2e1bd8b5eb84de4fa32d7eb0e2 Mon Sep 17 00:00:00 2001 From: Ash Date: Tue, 2 May 2023 21:12:45 -0500 Subject: [PATCH 039/501] compiles --- app/app.go | 25 +++++++++++-------- x/xion/keeper/genesis.go | 6 +++-- x/xion/keeper/keeper.go | 33 +++++++++++++++---------- x/xion/keeper/msg_server.go | 4 ++-- x/xion/types/genesis.go | 2 +- x/xion/types/keys.go | 4 ++++ x/xion/types/params.go | 48 ++++++++----------------------------- 7 files changed, 57 insertions(+), 65 deletions(-) diff --git a/app/app.go b/app/app.go index 813f93f0..e9bd7fed 100644 --- a/app/app.go +++ b/app/app.go @@ -519,7 +519,7 @@ func NewWasmApp( app.GovKeeper = *govKeeper.SetHooks( govtypes.NewMultiGovHooks( - // register the governance hooks + // register the governance hooks ), ) @@ -708,11 +708,14 @@ func NewWasmApp( // NOTE: staking module is required if HistoricalEntries param > 0 // NOTE: capability module's beginblocker must come before any modules using capabilities (e.g. IBC) app.ModuleManager.SetOrderBeginBlockers( - upgradetypes.ModuleName, capabilitytypes.ModuleName, minttypes.ModuleName, distrtypes.ModuleName, slashingtypes.ModuleName, - evidencetypes.ModuleName, stakingtypes.ModuleName, - authtypes.ModuleName, banktypes.ModuleName, govtypes.ModuleName, crisistypes.ModuleName, genutiltypes.ModuleName, - authz.ModuleName, feegrant.ModuleName, nft.ModuleName, group.ModuleName, - paramstypes.ModuleName, vestingtypes.ModuleName, consensusparamtypes.ModuleName, + upgradetypes.ModuleName, capabilitytypes.ModuleName, + minttypes.ModuleName, distrtypes.ModuleName, slashingtypes.ModuleName, + evidencetypes.ModuleName, stakingtypes.ModuleName, authtypes.ModuleName, + banktypes.ModuleName, govtypes.ModuleName, crisistypes.ModuleName, + genutiltypes.ModuleName, authz.ModuleName, feegrant.ModuleName, + nft.ModuleName, group.ModuleName, paramstypes.ModuleName, + vestingtypes.ModuleName, consensusparamtypes.ModuleName, + xiontypes.ModuleName, // additional non simd modules ibctransfertypes.ModuleName, ibcexported.ModuleName, @@ -723,11 +726,12 @@ func NewWasmApp( app.ModuleManager.SetOrderEndBlockers( crisistypes.ModuleName, govtypes.ModuleName, stakingtypes.ModuleName, - capabilitytypes.ModuleName, authtypes.ModuleName, banktypes.ModuleName, distrtypes.ModuleName, - slashingtypes.ModuleName, minttypes.ModuleName, + capabilitytypes.ModuleName, authtypes.ModuleName, banktypes.ModuleName, + distrtypes.ModuleName, slashingtypes.ModuleName, minttypes.ModuleName, genutiltypes.ModuleName, evidencetypes.ModuleName, authz.ModuleName, feegrant.ModuleName, nft.ModuleName, group.ModuleName, - paramstypes.ModuleName, upgradetypes.ModuleName, vestingtypes.ModuleName, consensusparamtypes.ModuleName, + paramstypes.ModuleName, upgradetypes.ModuleName, vestingtypes.ModuleName, + consensusparamtypes.ModuleName, xiontypes.ModuleName, // additional non simd modules ibctransfertypes.ModuleName, ibcexported.ModuleName, @@ -749,7 +753,7 @@ func NewWasmApp( distrtypes.ModuleName, stakingtypes.ModuleName, slashingtypes.ModuleName, govtypes.ModuleName, minttypes.ModuleName, crisistypes.ModuleName, genutiltypes.ModuleName, evidencetypes.ModuleName, authz.ModuleName, feegrant.ModuleName, nft.ModuleName, group.ModuleName, paramstypes.ModuleName, upgradetypes.ModuleName, - vestingtypes.ModuleName, consensusparamtypes.ModuleName, + vestingtypes.ModuleName, consensusparamtypes.ModuleName, xiontypes.ModuleName, // additional non simd modules ibctransfertypes.ModuleName, ibcexported.ModuleName, @@ -1070,6 +1074,7 @@ func initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino paramsKeeper.Subspace(ibcexported.ModuleName) paramsKeeper.Subspace(icahosttypes.SubModuleName) paramsKeeper.Subspace(icacontrollertypes.SubModuleName) + paramsKeeper.Subspace(xiontypes.ModuleName) paramsKeeper.Subspace(wasm.ModuleName) return paramsKeeper diff --git a/x/xion/keeper/genesis.go b/x/xion/keeper/genesis.go index 02148df0..c03b639b 100644 --- a/x/xion/keeper/genesis.go +++ b/x/xion/keeper/genesis.go @@ -7,13 +7,15 @@ import ( // InitGenesis initializes the bank module's state from a given genesis state. func (k Keeper) InitGenesis(ctx sdk.Context, genState *types.GenesisState) { - k.setParams(ctx, *genState.Params) + if err := k.SetParams(ctx, *genState.Params); err != nil { + panic(err) + } } // ExportGenesis returns the bank module's genesis state. func (k Keeper) ExportGenesis(ctx sdk.Context) *types.GenesisState { rv := types.NewGenesisState( - k.GetParamSet(ctx), + k.GetParams(ctx), ) return rv } diff --git a/x/xion/keeper/keeper.go b/x/xion/keeper/keeper.go index 6efbd317..61b03101 100644 --- a/x/xion/keeper/keeper.go +++ b/x/xion/keeper/keeper.go @@ -22,10 +22,6 @@ func NewKeeper(cdc codec.BinaryCodec, paramSpace paramtypes.Subspace, bankKeeper types.BankKeeper, accountKeeper types.AccountKeeper) Keeper { - // set KeyTable if it has not already been set - if !paramSpace.HasKeyTable() { - paramSpace = paramSpace.WithKeyTable(types.ParamKeyTable()) - } return Keeper{ storeKey: key, @@ -45,14 +41,27 @@ func (k Keeper) Logger(ctx sdktypes.Context) log.Logger { // Params // //////////// -// GetParamSet returns the vote period from the parameters -func (k Keeper) GetParamSet(ctx sdktypes.Context) types.Params { - var p types.Params - k.paramSpace.GetParamSet(ctx, &p) - return p +// SetParams sets the x/mint module parameters. +func (k Keeper) SetParams(ctx sdktypes.Context, p types.Params) error { + if err := p.Validate(); err != nil { + return err + } + + store := ctx.KVStore(k.storeKey) + bz := k.cdc.MustMarshal(&p) + store.Set(types.ParamsKey, bz) + + return nil } -// setParams sets the parameters in the store -func (k Keeper) setParams(ctx sdktypes.Context, params types.Params) { - k.paramSpace.SetParamSet(ctx, ¶ms) +// GetParams returns the current x/mint module parameters. +func (k Keeper) GetParams(ctx sdktypes.Context) (p types.Params) { + store := ctx.KVStore(k.storeKey) + bz := store.Get(types.ParamsKey) + if bz == nil { + return p + } + + k.cdc.MustUnmarshal(bz, &p) + return p } diff --git a/x/xion/keeper/msg_server.go b/x/xion/keeper/msg_server.go index 9f4ff1a5..160c3520 100644 --- a/x/xion/keeper/msg_server.go +++ b/x/xion/keeper/msg_server.go @@ -45,7 +45,7 @@ func (k msgServer) Send(goCtx context.Context, msg *types.MsgSend) (*types.MsgSe return nil, sdkerrors.Wrapf(sdkerrors.ErrUnauthorized, "%s is not allowed to receive funds", msg.ToAddress) } - percentage := k.GetParamSet(ctx).PlatformPercentage + percentage := k.GetParams(ctx).PlatformPercentage throughCoins := msg.Amount if percentage > 0 { @@ -96,7 +96,7 @@ func (k msgServer) MultiSend(goCtx context.Context, msg *types.MsgMultiSend) (*t } } - percentage := sdk.NewIntFromUint64(uint64(k.GetParamSet(ctx).PlatformPercentage)) + percentage := sdk.NewIntFromUint64(uint64(k.GetParams(ctx).PlatformPercentage)) var outputs []banktypes.Output totalPlatformCoins := sdk.NewCoins() diff --git a/x/xion/types/genesis.go b/x/xion/types/genesis.go index c0924b75..9e26a333 100644 --- a/x/xion/types/genesis.go +++ b/x/xion/types/genesis.go @@ -9,7 +9,7 @@ import ( // Validate performs basic validation of supply genesis data returning an // error for any failed validation criteria. func (gs GenesisState) Validate() error { - if err := gs.Params.ValidateBasic(); err != nil { + if err := gs.Params.Validate(); err != nil { return err } diff --git a/x/xion/types/keys.go b/x/xion/types/keys.go index 86bcedc0..794b30d6 100644 --- a/x/xion/types/keys.go +++ b/x/xion/types/keys.go @@ -1,5 +1,9 @@ package types +var ( + ParamsKey = []byte{0x00} +) + const ( // ModuleName is the module name constant used in many places ModuleName = "xion" diff --git a/x/xion/types/params.go b/x/xion/types/params.go index 019a29b3..b405f6d1 100644 --- a/x/xion/types/params.go +++ b/x/xion/types/params.go @@ -2,54 +2,26 @@ package types import ( "errors" - "fmt" - - paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" -) - -// Parameter keys -var ( - KeyPlatformPercentage = []byte("platform-percentage") ) -var _ paramtypes.ParamSet = &Params{} - -// ParamKeyTable returns the parameter key table. -func ParamKeyTable() paramtypes.KeyTable { - return paramtypes.NewKeyTable().RegisterParamSet(&Params{}) +// NewParams creates a new parameter configuration for the xion module +func NewParams() Params { + return Params{ + PlatformPercentage: 0, + } } -// DefaultParams returns default oracle parameters +// DefaultParams is the default parameter configuration for the bank module func DefaultParams() Params { return Params{ PlatformPercentage: 500, } } -// ParamSetPairs returns the parameter set pairs. -func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs { - return paramtypes.ParamSetPairs{ - paramtypes.NewParamSetPair(KeyPlatformPercentage, &p.PlatformPercentage, validatePlatformPercentage), - } -} - -// ValidateBasic performs basic validation on oracle parameters. -func (p *Params) ValidateBasic() error { - if err := validatePlatformPercentage(p.PlatformPercentage); err != nil { - return err - } - return nil -} - -func validatePlatformPercentage(i interface{}) error { - percentage, ok := i.(uint32) - if !ok { - return fmt.Errorf("invalid parameter type: %T", i) - } - - if percentage > 10000 { - return errors.New("platform fee can not exceed 100%") +// Validate all bank module parameters +func (p Params) Validate() error { + if p.PlatformPercentage > 10000 { + return errors.New("platform fee cannot exceed 100%") } - return nil } From 610c65510a51a92889af84434f6ab116e0483d35 Mon Sep 17 00:00:00 2001 From: Ash Date: Tue, 2 May 2023 21:53:28 -0500 Subject: [PATCH 040/501] test for platform fee enforcement --- .github/workflows/integration-tests.yml | 1 + integration_tests/send_test.go | 196 ++++++++++++++++++++++++ x/xion/types/params.go | 6 +- 3 files changed, 200 insertions(+), 3 deletions(-) create mode 100644 integration_tests/send_test.go diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index ebba53b8..37f2da2a 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -67,6 +67,7 @@ jobs: matrix: test_type: - "DungeonTransferBlock" + - "XionSendPlatformFee" steps: - name: Set up Go 1.18 diff --git a/integration_tests/send_test.go b/integration_tests/send_test.go new file mode 100644 index 00000000..99e3b4fe --- /dev/null +++ b/integration_tests/send_test.go @@ -0,0 +1,196 @@ +package integration_tests + +import ( + "context" + "fmt" + "github.com/cosmos/cosmos-sdk/types" + paramsutils "github.com/cosmos/cosmos-sdk/x/params/client/utils" + "os" + "strings" + "testing" + "time" + + ibctest "github.com/strangelove-ventures/interchaintest/v7" + "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" + "github.com/strangelove-ventures/interchaintest/v7/ibc" + "github.com/strangelove-ventures/interchaintest/v7/testreporter" + "github.com/stretchr/testify/require" + "go.uber.org/zap/zaptest" +) + +func TestXionSendPlatformFee(t *testing.T) { + if testing.Short() { + t.Skip("skipping in short mode") + } + + t.Parallel() + + ctx := context.Background() + + var numFullNodes = 1 + var numValidators = 3 + + // pulling image from env to foster local dev + imageTag := os.Getenv("XION_IMAGE") + imageTagComponents := strings.Split(imageTag, ":") + + // Chain factory + cf := ibctest.NewBuiltinChainFactory(zaptest.NewLogger(t), []*ibctest.ChainSpec{ + { + Name: imageTagComponents[0], + Version: imageTagComponents[1], + ChainConfig: ibc.ChainConfig{ + Images: []ibc.DockerImage{ + { + Repository: imageTagComponents[0], + Version: imageTagComponents[1], + UidGid: "1025:1025", + }, + }, + GasPrices: "0.0uxion", + GasAdjustment: 1.3, + Type: "cosmos", + ChainID: "xion-1", + Bin: "xiond", + Bech32Prefix: "xion", + Denom: "uxion", + TrustingPeriod: "336h", + ModifyGenesis: modifyGenesisShortProposals(votingPeriod, maxDepositPeriod), + UsingNewGenesisCommand: true, + }, + NumValidators: &numValidators, + NumFullNodes: &numFullNodes, + }, + }) + + chains, err := cf.Chains(t.Name()) + require.NoError(t, err) + + xion := chains[0].(*cosmos.CosmosChain) + + // Relayer Factory + client, network := ibctest.DockerSetup(t) + //relayer := ibctest.NewBuiltinRelayerFactory(ibc.CosmosRly, zaptest.NewLogger(t)).Build( + // t, client, network) + + // Prep Interchain + const ibcPath = "xion-osmo-dungeon-test" + ic := ibctest.NewInterchain(). + AddChain(xion) + //AddRelayer(relayer, "relayer"). + //AddLink(ibctest.InterchainLink{ + // Chain1: xion, + // Chain2: osmosis, + // Relayer: relayer, + // Path: ibcPath, + //}) + + // Log location + f, err := ibctest.CreateLogFile(fmt.Sprintf("%d.json", time.Now().Unix())) + require.NoError(t, err) + // Reporter/logs + rep := testreporter.NewReporter(f) + eRep := rep.RelayerExecReporter(t) + + // Build Interchain + require.NoError(t, ic.Build(ctx, eRep, ibctest.InterchainBuildOptions{ + TestName: t.Name(), + Client: client, + NetworkID: network, + BlockDatabaseFile: ibctest.DefaultBlockDatabaseFilepath(), + + SkipPathCreation: false}, + ), + ) + + // Create and Fund User Wallets + t.Log("creating and funding user accounts") + fundAmount := int64(10_000_000) + users := ibctest.GetAndFundTestUsers(t, ctx, "default", fundAmount, xion) + xionUser := users[0] + t.Logf("created xion user %s", xionUser.FormattedAddress()) + + xionUserBalInitial, err := xion.GetBalance(ctx, xionUser.FormattedAddress(), xion.Config().Denom) + require.NoError(t, err) + require.Equal(t, fundAmount, xionUserBalInitial) + + // step 1: send a xion message with default (0%) platform fee + recipientKeyName := "recipient-key" + err = xion.CreateKey(ctx, recipientKeyName) + require.NoError(t, err) + receipientKeyAddressBytes, err := xion.GetAddress(ctx, recipientKeyName) + require.NoError(t, err) + recipientKeyAddress, err := types.Bech32ifyAddressBytes(xion.Config().Bech32Prefix, receipientKeyAddressBytes) + require.NoError(t, err) + + _, err = xion.FullNodes[0].ExecTx(ctx, + xionUser.KeyName(), + "xion", "send", xionUser.KeyName(), + "--chain-id", xion.Config().ChainID, + recipientKeyAddress, fmt.Sprintf("%d%s", 100, xion.Config().Denom), + ) + require.NoError(t, err) + balance, err := xion.GetBalance(ctx, recipientKeyAddress, xion.Config().Denom) + require.NoError(t, err) + require.Equal(t, 100, balance) + + // step 2: update the platform percentage to 5% + + prop := paramsutils.ParamChangeProposalJSON{ + Title: "5% Platform Fee", + Description: "Test 5% platform fee", + Changes: paramsutils.ParamChangesJSON{ + { + Subspace: "xion", + Key: "platform-percentage", + Value: []byte("500"), + }, + }, + Deposit: fmt.Sprintf("%d%s", 1000, xion.Config().Denom), + } + paramChangeTx, err := xion.LegacyParamChangeProposal(ctx, "xion", &prop) + require.NoError(t, err) + t.Logf("Param change proposal submitted with ID %s in transaction %s", paramChangeTx.ProposalID, paramChangeTx.TxHash) + + require.Eventuallyf(t, func() bool { + proposalInfo, err := xion.QueryProposal(ctx, paramChangeTx.ProposalID) + if err != nil { + require.NoError(t, err) + } else { + if proposalInfo.Status == cosmos.ProposalStatusVotingPeriod { + return true + } + t.Logf("Waiting for proposal to enter voting status VOTING, current status: %s", proposalInfo.Status) + } + return false + }, time.Second*11, time.Second, "failed to reach status VOTING after 11s") + + err = xion.VoteOnProposalAllValidators(ctx, paramChangeTx.ProposalID, cosmos.ProposalVoteYes) + require.NoError(t, err) + + require.Eventuallyf(t, func() bool { + proposalInfo, err := xion.QueryProposal(ctx, paramChangeTx.ProposalID) + if err != nil { + require.NoError(t, err) + } else { + if proposalInfo.Status == cosmos.ProposalStatusPassed { + return true + } + t.Logf("Waiting for proposal to enter voting status PASSED, current status: %s", proposalInfo.Status) + } + return false + }, time.Second*11, time.Second, "failed to reach status PASSED after 11s") + + // step 3: transfer and verify platform fees is extracted + _, err = xion.FullNodes[0].ExecTx(ctx, + xionUser.KeyName(), + "xion", "send", xionUser.KeyName(), + "--chain-id", xion.Config().ChainID, + recipientKeyAddress, fmt.Sprintf("%d%s", 100, xion.Config().Denom), + ) + require.NoError(t, err) + balance, err = xion.GetBalance(ctx, recipientKeyAddress, xion.Config().Denom) + require.NoError(t, err) + require.Equal(t, 195, balance) + +} diff --git a/x/xion/types/params.go b/x/xion/types/params.go index b405f6d1..1aaec70e 100644 --- a/x/xion/types/params.go +++ b/x/xion/types/params.go @@ -5,16 +5,16 @@ import ( ) // NewParams creates a new parameter configuration for the xion module -func NewParams() Params { +func NewParams(platformPercentage uint32) Params { return Params{ - PlatformPercentage: 0, + PlatformPercentage: platformPercentage, } } // DefaultParams is the default parameter configuration for the bank module func DefaultParams() Params { return Params{ - PlatformPercentage: 500, + PlatformPercentage: 0, } } From fa6b77933f9fac8032f783f751657b7461d0f846 Mon Sep 17 00:00:00 2001 From: Ash Date: Thu, 4 May 2023 00:14:44 -0500 Subject: [PATCH 041/501] integration tests --- app/app.go | 7 +- go.mod | 2 +- integration_tests/go.mod | 6 +- integration_tests/go.sum | 4 + integration_tests/send_test.go | 46 ++-- proto/xion/xion/v1/genesis.proto | 6 +- proto/xion/xion/v1/tx.proto | 14 + x/xion/keeper/genesis.go | 6 +- x/xion/keeper/keeper.go | 43 ++- x/xion/keeper/msg_server.go | 28 +- x/xion/module.go | 4 +- x/xion/types/codec.go | 3 +- x/xion/types/genesis.go | 11 +- x/xion/types/genesis.pb.go | 206 +-------------- x/xion/types/keys.go | 2 +- x/xion/types/msgs.go | 41 ++- x/xion/types/params.go | 27 -- x/xion/types/tx.pb.go | 435 ++++++++++++++++++++++++++++--- 18 files changed, 566 insertions(+), 325 deletions(-) delete mode 100644 x/xion/types/params.go diff --git a/app/app.go b/app/app.go index e9bd7fed..58ef5e23 100644 --- a/app/app.go +++ b/app/app.go @@ -220,12 +220,12 @@ var ( consensus.AppModuleBasic{}, // non sdk modules wasm.AppModuleBasic{}, + xion.AppModuleBasic{}, ibc.AppModuleBasic{}, ibctm.AppModuleBasic{}, transfer.AppModuleBasic{}, ica.AppModuleBasic{}, ibcfee.AppModuleBasic{}, - xion.AppModuleBasic{}, ) // module account permissions @@ -519,7 +519,7 @@ func NewWasmApp( app.GovKeeper = *govKeeper.SetHooks( govtypes.NewMultiGovHooks( - // register the governance hooks + // register the governance hooks ), ) @@ -545,7 +545,8 @@ func NewWasmApp( keys[xiontypes.StoreKey], app.GetSubspace(xiontypes.ModuleName), app.BankKeeper, - app.AccountKeeper) + app.AccountKeeper, + authtypes.NewModuleAddress(govtypes.ModuleName).String()) // IBC Fee Module keeper app.IBCFeeKeeper = ibcfeekeeper.NewKeeper( diff --git a/go.mod b/go.mod index ba4a73c0..c4c6cabd 100644 --- a/go.mod +++ b/go.mod @@ -39,6 +39,7 @@ require ( cosmossdk.io/math v1.0.0 cosmossdk.io/tools/rosetta v0.2.1 github.com/CosmWasm/wasmd v0.40.0-rc.0 + github.com/armon/go-metrics v0.4.1 github.com/cometbft/cometbft v0.37.0 github.com/cometbft/cometbft-db v0.7.0 github.com/golang/mock v1.6.0 @@ -57,7 +58,6 @@ require ( github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect github.com/99designs/keyring v1.2.1 // indirect github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d // indirect - github.com/armon/go-metrics v0.4.1 // indirect github.com/aws/aws-sdk-go v1.44.203 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect diff --git a/integration_tests/go.mod b/integration_tests/go.mod index 947a4dc6..f5aab8b8 100644 --- a/integration_tests/go.mod +++ b/integration_tests/go.mod @@ -48,7 +48,7 @@ require ( cosmossdk.io/core v0.5.1 // indirect cosmossdk.io/depinject v1.0.0-alpha.3 // indirect cosmossdk.io/errors v1.0.0-beta.7 // indirect - cosmossdk.io/math v1.0.0-rc.0 // indirect + cosmossdk.io/math v1.0.0 // indirect cosmossdk.io/tools/rosetta v0.2.1 // indirect filippo.io/edwards25519 v1.0.0 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect @@ -61,6 +61,7 @@ require ( github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 // indirect github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect + github.com/burnt-labs/xion v0.1.0 // indirect github.com/cenkalti/backoff/v4 v4.1.3 // indirect github.com/cespare/xxhash v1.1.0 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect @@ -71,7 +72,7 @@ require ( github.com/cosmos/btcutil v1.0.5 // indirect github.com/cosmos/cosmos-proto v1.0.0-beta.2 // indirect github.com/cosmos/gogogateway v1.2.0 // indirect - github.com/cosmos/gogoproto v1.4.6 // indirect + github.com/cosmos/gogoproto v1.4.7 // indirect github.com/cosmos/iavl v0.20.0 // indirect github.com/cosmos/ics23/go v0.9.1-0.20221207100636-b1abd8678aab // indirect github.com/cosmos/ledger-cosmos-go v0.12.1 // indirect @@ -234,6 +235,7 @@ require ( replace ( github.com/ChainSafe/go-schnorrkel => github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d github.com/ChainSafe/go-schnorrkel/1 => github.com/ChainSafe/go-schnorrkel v1.0.0 + github.com/burnt-labs/xion => ../ github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 github.com/strangelove-ventures/interchaintest/v7 => github.com/burnt-labs/interchaintest/v7 v7.0.0-20230404233655-f37b60cca9b6 github.com/vedhavyas/go-subkey => github.com/strangelove-ventures/go-subkey v1.0.7 diff --git a/integration_tests/go.sum b/integration_tests/go.sum index a2c2a952..13b3d188 100644 --- a/integration_tests/go.sum +++ b/integration_tests/go.sum @@ -211,6 +211,8 @@ cosmossdk.io/math v1.0.0-beta.3 h1:TbZxSopz2LqjJ7aXYfn7nJSb8vNaBklW6BLpcei1qwM= cosmossdk.io/math v1.0.0-beta.3/go.mod h1:3LYasri3Zna4XpbrTNdKsWmD5fHHkaNAod/mNT9XdE4= cosmossdk.io/math v1.0.0-rc.0 h1:ml46ukocrAAoBpYKMidF0R2tQJ1Uxfns0yH8wqgMAFc= cosmossdk.io/math v1.0.0-rc.0/go.mod h1:Ygz4wBHrgc7g0N+8+MrnTfS9LLn9aaTGa9hKopuym5k= +cosmossdk.io/math v1.0.0 h1:ro9w7eKx23om2tZz/VM2Pf+z2WAbGX1yDQQOJ6iGeJw= +cosmossdk.io/math v1.0.0/go.mod h1:Ygz4wBHrgc7g0N+8+MrnTfS9LLn9aaTGa9hKopuym5k= cosmossdk.io/tools/rosetta v0.2.1 h1:ddOMatOH+pbxWbrGJKRAawdBkPYLfKXutK9IETnjYxw= cosmossdk.io/tools/rosetta v0.2.1/go.mod h1:Pqdc1FdvkNV3LcNIkYWt2RQY6IP1ge6YWZk8MhhO9Hw= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= @@ -403,6 +405,8 @@ github.com/cosmos/gogogateway v1.2.0/go.mod h1:iQpLkGWxYcnCdz5iAdLcRBSw3h7NXeOkZ github.com/cosmos/gogoproto v1.4.2/go.mod h1:cLxOsn1ljAHSV527CHOtaIP91kK6cCrZETRBrkzItWU= github.com/cosmos/gogoproto v1.4.6 h1:Ee7z15dWJaGlgM2rWrK8N2IX7PQcuccu8oG68jp5RL4= github.com/cosmos/gogoproto v1.4.6/go.mod h1:VS/ASYmPgv6zkPKLjR9EB91lwbLHOzaGCirmKKhncfI= +github.com/cosmos/gogoproto v1.4.7 h1:RzYKVnsEC7UIkDnhTIkqEB7LnIQbsySvmNEqPCiPevk= +github.com/cosmos/gogoproto v1.4.7/go.mod h1:gxGePp9qedovvl/StQL2BIJ6qlIBn1+9YxR0IulGBKA= github.com/cosmos/gorocksdb v1.2.0 h1:d0l3jJG8M4hBouIZq0mDUHZ+zjOx044J3nGRskwTb4Y= github.com/cosmos/gorocksdb v1.2.0/go.mod h1:aaKvKItm514hKfNJpUJXnnOWeBnk2GL4+Qw9NHizILw= github.com/cosmos/iavl v0.19.4 h1:t82sN+Y0WeqxDLJRSpNd8YFX5URIrT+p8n6oJbJ2Dok= diff --git a/integration_tests/send_test.go b/integration_tests/send_test.go index 99e3b4fe..697b5ada 100644 --- a/integration_tests/send_test.go +++ b/integration_tests/send_test.go @@ -2,14 +2,18 @@ package integration_tests import ( "context" + "encoding/json" "fmt" - "github.com/cosmos/cosmos-sdk/types" - paramsutils "github.com/cosmos/cosmos-sdk/x/params/client/utils" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" "os" "strings" "testing" "time" + xiontypes "github.com/burnt-labs/xion/x/xion/types" + "github.com/cosmos/cosmos-sdk/codec" + cdctypes "github.com/cosmos/cosmos-sdk/codec/types" + "github.com/cosmos/cosmos-sdk/types" ibctest "github.com/strangelove-ventures/interchaintest/v7" "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" "github.com/strangelove-ventures/interchaintest/v7/ibc" @@ -132,23 +136,35 @@ func TestXionSendPlatformFee(t *testing.T) { require.NoError(t, err) balance, err := xion.GetBalance(ctx, recipientKeyAddress, xion.Config().Denom) require.NoError(t, err) - require.Equal(t, 100, balance) + require.Equal(t, uint64(100), uint64(balance)) // step 2: update the platform percentage to 5% - prop := paramsutils.ParamChangeProposalJSON{ - Title: "5% Platform Fee", - Description: "Test 5% platform fee", - Changes: paramsutils.ParamChangesJSON{ - { - Subspace: "xion", - Key: "platform-percentage", - Value: []byte("500"), - }, - }, - Deposit: fmt.Sprintf("%d%s", 1000, xion.Config().Denom), + config := types.GetConfig() + config.SetBech32PrefixForAccount("xion", "xionpub") + + setPlatformPercentageMsg := xiontypes.MsgSetPlatformPercentage{ + Authority: authtypes.NewModuleAddress("gov").String(), + PlatformPercentage: 500, + } + + registry := cdctypes.NewInterfaceRegistry() + registry.RegisterImplementations( + (*types.Msg)(nil), + &xiontypes.MsgSetPlatformPercentage{}, + ) + cdc := codec.NewProtoCodec(registry) + + msg, err := cdc.MarshalInterfaceJSON(&setPlatformPercentageMsg) + + prop := cosmos.Proposal{ + Messages: []json.RawMessage{msg}, + Metadata: "", + Deposit: "100uxion", + Title: "Set platform percentage to 5%", + Summary: "Ups the platform fee to 5% for the integration test", } - paramChangeTx, err := xion.LegacyParamChangeProposal(ctx, "xion", &prop) + paramChangeTx, err := xion.SubmitProposal(ctx, xionUser.KeyName(), &prop) require.NoError(t, err) t.Logf("Param change proposal submitted with ID %s in transaction %s", paramChangeTx.ProposalID, paramChangeTx.TxHash) diff --git a/proto/xion/xion/v1/genesis.proto b/proto/xion/xion/v1/genesis.proto index 5bb96065..5b2461ff 100644 --- a/proto/xion/xion/v1/genesis.proto +++ b/proto/xion/xion/v1/genesis.proto @@ -6,9 +6,5 @@ import "gogoproto/gogo.proto"; option go_package = "github.com/burnt-labs/xion/x/xion/types"; message GenesisState { - Params params = 1; + uint32 platform_percentage = 1; } - -message Params { - uint32 platform_percentage = 1 [(gogoproto.moretags) = "yaml:\"platform_percentage\""]; -} \ No newline at end of file diff --git a/proto/xion/xion/v1/tx.proto b/proto/xion/xion/v1/tx.proto index ca83aaa8..e2fd5e96 100644 --- a/proto/xion/xion/v1/tx.proto +++ b/proto/xion/xion/v1/tx.proto @@ -19,6 +19,9 @@ service Msg { // MultiSend defines a method for sending coins from some accounts to other accounts. rpc MultiSend(MsgMultiSend) returns (MsgMultiSendResponse); + + // SetPlatformPercentage defines the method for updating the platform percentage fee + rpc SetPlatformPercentage(MsgSetPlatformPercentage) returns (MsgSetPlatformPercentageResponse); } // MsgSend represents a message to send coins from one account to another. @@ -57,3 +60,14 @@ message MsgMultiSend { // MsgMultiSendResponse defines the Msg/MultiSend response type. message MsgMultiSendResponse {} +message MsgSetPlatformPercentage { + option (cosmos.msg.v1.signer) = "authority"; + option (amino.name) = "xion/MsgSetPlatformPercentage"; + + string authority = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // platform_percentage is the platform fee percentage to multiplied by 10000 + uint32 platform_percentage = 2; +} + +message MsgSetPlatformPercentageResponse {} diff --git a/x/xion/keeper/genesis.go b/x/xion/keeper/genesis.go index c03b639b..035e500c 100644 --- a/x/xion/keeper/genesis.go +++ b/x/xion/keeper/genesis.go @@ -7,15 +7,13 @@ import ( // InitGenesis initializes the bank module's state from a given genesis state. func (k Keeper) InitGenesis(ctx sdk.Context, genState *types.GenesisState) { - if err := k.SetParams(ctx, *genState.Params); err != nil { - panic(err) - } + k.OverwritePlatformPercentage(ctx, genState.PlatformPercentage) } // ExportGenesis returns the bank module's genesis state. func (k Keeper) ExportGenesis(ctx sdk.Context) *types.GenesisState { rv := types.NewGenesisState( - k.GetParams(ctx), + uint32(k.GetPlatformPercentage(ctx).Uint64()), ) return rv } diff --git a/x/xion/keeper/keeper.go b/x/xion/keeper/keeper.go index 61b03101..1d46d59b 100644 --- a/x/xion/keeper/keeper.go +++ b/x/xion/keeper/keeper.go @@ -1,6 +1,7 @@ package keeper import ( + "cosmossdk.io/math" "github.com/burnt-labs/xion/x/xion/types" "github.com/cometbft/cometbft/libs/log" "github.com/cosmos/cosmos-sdk/codec" @@ -15,13 +16,18 @@ type Keeper struct { paramSpace paramtypes.Subspace bankKeeper types.BankKeeper accountKeeper types.AccountKeeper + + // the address capable of executing a MsgSetPlatformPercentage message. + // Typically, this should be the x/gov module account + authority string } func NewKeeper(cdc codec.BinaryCodec, key storetypes.StoreKey, paramSpace paramtypes.Subspace, bankKeeper types.BankKeeper, - accountKeeper types.AccountKeeper) Keeper { + accountKeeper types.AccountKeeper, + authority string) Keeper { return Keeper{ storeKey: key, @@ -29,6 +35,7 @@ func NewKeeper(cdc codec.BinaryCodec, paramSpace: paramSpace, bankKeeper: bankKeeper, accountKeeper: accountKeeper, + authority: authority, } } @@ -37,31 +44,21 @@ func (k Keeper) Logger(ctx sdktypes.Context) log.Logger { return ctx.Logger().With("module", "x/"+types.ModuleName) } -//////////// -// Params // -//////////// - -// SetParams sets the x/mint module parameters. -func (k Keeper) SetParams(ctx sdktypes.Context, p types.Params) error { - if err := p.Validate(); err != nil { - return err - } +// Platform Percentage - store := ctx.KVStore(k.storeKey) - bz := k.cdc.MustMarshal(&p) - store.Set(types.ParamsKey, bz) +func (k Keeper) GetPlatformPercentage(ctx sdktypes.Context) math.Int { + bz := ctx.KVStore(k.storeKey).Get(types.PlatformPercentageKey) + percentage := sdktypes.BigEndianToUint64(bz) + return math.NewIntFromUint64(percentage) +} - return nil +func (k Keeper) OverwritePlatformPercentage(ctx sdktypes.Context, percentage uint32) { + ctx.KVStore(k.storeKey).Set(types.PlatformPercentageKey, sdktypes.Uint64ToBigEndian(uint64(percentage))) } -// GetParams returns the current x/mint module parameters. -func (k Keeper) GetParams(ctx sdktypes.Context) (p types.Params) { - store := ctx.KVStore(k.storeKey) - bz := store.Get(types.ParamsKey) - if bz == nil { - return p - } +// Authority - k.cdc.MustUnmarshal(bz, &p) - return p +// GetAuthority returns the x/xion module's authority. +func (k Keeper) GetAuthority() string { + return k.authority } diff --git a/x/xion/keeper/msg_server.go b/x/xion/keeper/msg_server.go index 160c3520..d159b35b 100644 --- a/x/xion/keeper/msg_server.go +++ b/x/xion/keeper/msg_server.go @@ -8,6 +8,7 @@ import ( sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" "github.com/burnt-labs/xion/x/xion/types" sdk "github.com/cosmos/cosmos-sdk/types" @@ -45,13 +46,13 @@ func (k msgServer) Send(goCtx context.Context, msg *types.MsgSend) (*types.MsgSe return nil, sdkerrors.Wrapf(sdkerrors.ErrUnauthorized, "%s is not allowed to receive funds", msg.ToAddress) } - percentage := k.GetParams(ctx).PlatformPercentage + percentage := k.GetPlatformPercentage(ctx) throughCoins := msg.Amount - if percentage > 0 { - platformCoins := msg.Amount.MulInt(sdk.NewIntFromUint64(uint64(percentage))).QuoInt(sdk.NewInt(10000)) - throughCoins, ok := throughCoins.SafeSub(platformCoins...) - if !ok { + if !percentage.IsZero() { + platformCoins := msg.Amount.MulInt(percentage).QuoInt(sdk.NewInt(10000)) + throughCoins, wentNegative := throughCoins.SafeSub(platformCoins...) + if wentNegative { return nil, fmt.Errorf("unable to subtract %v from %v", platformCoins, throughCoins) } @@ -96,7 +97,7 @@ func (k msgServer) MultiSend(goCtx context.Context, msg *types.MsgMultiSend) (*t } } - percentage := sdk.NewIntFromUint64(uint64(k.GetParams(ctx).PlatformPercentage)) + percentage := k.GetPlatformPercentage(ctx) var outputs []banktypes.Output totalPlatformCoins := sdk.NewCoins() @@ -110,8 +111,8 @@ func (k msgServer) MultiSend(goCtx context.Context, msg *types.MsgMultiSend) (*t // if there is a platform fee set, reduce it from each output if !percentage.IsZero() { platformCoins := out.Coins.MulInt(percentage).QuoInt(sdk.NewInt(10000)) - throughCoins, ok := out.Coins.SafeSub(platformCoins...) - if !ok { + throughCoins, wentNegative := out.Coins.SafeSub(platformCoins...) + if wentNegative { return nil, fmt.Errorf("unable to subtract %v from %v", platformCoins, throughCoins) } @@ -135,3 +136,14 @@ func (k msgServer) MultiSend(goCtx context.Context, msg *types.MsgMultiSend) (*t return &types.MsgMultiSendResponse{}, nil } + +func (k msgServer) SetPlatformPercentage(goCtx context.Context, msg *types.MsgSetPlatformPercentage) (*types.MsgSetPlatformPercentageResponse, error) { + if k.GetAuthority() != msg.Authority { + return nil, sdkerrors.Wrapf(govtypes.ErrInvalidSigner, "invalid authority; expected %s, got %s", k.GetAuthority(), msg.Authority) + } + + ctx := sdk.UnwrapSDKContext(goCtx) + k.OverwritePlatformPercentage(ctx, msg.PlatformPercentage) + + return &types.MsgSetPlatformPercentageResponse{}, nil +} diff --git a/x/xion/module.go b/x/xion/module.go index 0a4e09c9..c6aea777 100644 --- a/x/xion/module.go +++ b/x/xion/module.go @@ -33,7 +33,9 @@ func (AppModuleBasic) Name() string { } // RegisterLegacyAminoCodec implements AppModuleBasic interface -func (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) {} +func (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { + types.RegisterLegacyAminoCodec(cdc) +} // RegisterInterfaces registers module concrete types into protobuf Any. func (AppModuleBasic) RegisterInterfaces(registry codectypes.InterfaceRegistry) { diff --git a/x/xion/types/codec.go b/x/xion/types/codec.go index 5d4f0ad7..81459294 100644 --- a/x/xion/types/codec.go +++ b/x/xion/types/codec.go @@ -17,13 +17,14 @@ import ( func RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { legacy.RegisterAminoMsg(cdc, &MsgSend{}, "xion/MsgSend") legacy.RegisterAminoMsg(cdc, &MsgMultiSend{}, "xion/MsgMultiSend") - cdc.RegisterConcrete(&Params{}, "xion/x/xion/Params", nil) + legacy.RegisterAminoMsg(cdc, &MsgSetPlatformPercentage{}, "xion/MsgSetPlatformPercentage") } func RegisterInterfaces(registry types.InterfaceRegistry) { registry.RegisterImplementations((*sdk.Msg)(nil), &MsgSend{}, &MsgMultiSend{}, + &MsgSetPlatformPercentage{}, ) msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc) diff --git a/x/xion/types/genesis.go b/x/xion/types/genesis.go index 9e26a333..b37c748c 100644 --- a/x/xion/types/genesis.go +++ b/x/xion/types/genesis.go @@ -2,6 +2,7 @@ package types import ( "encoding/json" + "fmt" "github.com/cosmos/cosmos-sdk/codec" ) @@ -9,24 +10,24 @@ import ( // Validate performs basic validation of supply genesis data returning an // error for any failed validation criteria. func (gs GenesisState) Validate() error { - if err := gs.Params.Validate(); err != nil { - return err + if gs.PlatformPercentage > 10000 { + return fmt.Errorf("unable to set platform percentage to greater than 100%") } return nil } // NewGenesisState creates a new genesis state. -func NewGenesisState(params Params) *GenesisState { +func NewGenesisState(platformPercentage uint32) *GenesisState { rv := &GenesisState{ - Params: ¶ms, + PlatformPercentage: platformPercentage, } return rv } // DefaultGenesisState returns a default bank module genesis state. func DefaultGenesisState() *GenesisState { - return NewGenesisState(DefaultParams()) + return NewGenesisState(0) } // GetGenesisStateFromAppState returns x/bank GenesisState given raw application diff --git a/x/xion/types/genesis.pb.go b/x/xion/types/genesis.pb.go index 749121e7..e115e4b8 100644 --- a/x/xion/types/genesis.pb.go +++ b/x/xion/types/genesis.pb.go @@ -24,7 +24,7 @@ var _ = math.Inf const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package type GenesisState struct { - Params *Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params,omitempty"` + PlatformPercentage uint32 `protobuf:"varint,1,opt,name=platform_percentage,json=platformPercentage,proto3" json:"platform_percentage,omitempty"` } func (m *GenesisState) Reset() { *m = GenesisState{} } @@ -60,51 +60,7 @@ func (m *GenesisState) XXX_DiscardUnknown() { var xxx_messageInfo_GenesisState proto.InternalMessageInfo -func (m *GenesisState) GetParams() *Params { - if m != nil { - return m.Params - } - return nil -} - -type Params struct { - PlatformPercentage uint32 `protobuf:"varint,1,opt,name=platform_percentage,json=platformPercentage,proto3" json:"platform_percentage,omitempty" yaml:"platform_percentage"` -} - -func (m *Params) Reset() { *m = Params{} } -func (m *Params) String() string { return proto.CompactTextString(m) } -func (*Params) ProtoMessage() {} -func (*Params) Descriptor() ([]byte, []int) { - return fileDescriptor_d94107830e1c4574, []int{1} -} -func (m *Params) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Params) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Params.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *Params) XXX_Merge(src proto.Message) { - xxx_messageInfo_Params.Merge(m, src) -} -func (m *Params) XXX_Size() int { - return m.Size() -} -func (m *Params) XXX_DiscardUnknown() { - xxx_messageInfo_Params.DiscardUnknown(m) -} - -var xxx_messageInfo_Params proto.InternalMessageInfo - -func (m *Params) GetPlatformPercentage() uint32 { +func (m *GenesisState) GetPlatformPercentage() uint32 { if m != nil { return m.PlatformPercentage } @@ -113,28 +69,24 @@ func (m *Params) GetPlatformPercentage() uint32 { func init() { proto.RegisterType((*GenesisState)(nil), "xion.v1.GenesisState") - proto.RegisterType((*Params)(nil), "xion.v1.Params") } func init() { proto.RegisterFile("xion/xion/v1/genesis.proto", fileDescriptor_d94107830e1c4574) } var fileDescriptor_d94107830e1c4574 = []byte{ - // 228 bytes of a gzipped FileDescriptorProto + // 181 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0xaa, 0xc8, 0xcc, 0xcf, 0xd3, 0x07, 0x13, 0x65, 0x86, 0xfa, 0xe9, 0xa9, 0x79, 0xa9, 0xc5, 0x99, 0xc5, 0x7a, 0x05, 0x45, 0xf9, 0x25, 0xf9, 0x42, 0xec, 0x20, 0x61, 0xbd, 0x32, 0x43, 0x29, 0x91, 0xf4, 0xfc, 0xf4, 0x7c, - 0xb0, 0x98, 0x3e, 0x88, 0x05, 0x91, 0x56, 0x32, 0xe7, 0xe2, 0x71, 0x87, 0xa8, 0x0f, 0x2e, 0x49, - 0x2c, 0x49, 0x15, 0x52, 0xe7, 0x62, 0x2b, 0x48, 0x2c, 0x4a, 0xcc, 0x2d, 0x96, 0x60, 0x54, 0x60, - 0xd4, 0xe0, 0x36, 0xe2, 0xd7, 0x83, 0xea, 0xd7, 0x0b, 0x00, 0x0b, 0x07, 0x41, 0xa5, 0x95, 0x22, - 0xb9, 0xd8, 0x20, 0x22, 0x42, 0xfe, 0x5c, 0xc2, 0x05, 0x39, 0x89, 0x25, 0x69, 0xf9, 0x45, 0xb9, - 0xf1, 0x05, 0xa9, 0x45, 0xc9, 0xa9, 0x79, 0x25, 0x89, 0xe9, 0xa9, 0x60, 0xfd, 0xbc, 0x4e, 0x72, - 0x9f, 0xee, 0xc9, 0x4b, 0x55, 0x26, 0xe6, 0xe6, 0x58, 0x29, 0x61, 0x51, 0xa4, 0x14, 0x24, 0x04, - 0x13, 0x0d, 0x80, 0x0b, 0x3a, 0x39, 0x9e, 0x78, 0x24, 0xc7, 0x78, 0xe1, 0x91, 0x1c, 0xe3, 0x83, - 0x47, 0x72, 0x8c, 0x13, 0x1e, 0xcb, 0x31, 0x5c, 0x78, 0x2c, 0xc7, 0x70, 0xe3, 0xb1, 0x1c, 0x43, - 0x94, 0x7a, 0x7a, 0x66, 0x49, 0x46, 0x69, 0x92, 0x5e, 0x72, 0x7e, 0xae, 0x7e, 0x52, 0x69, 0x51, - 0x5e, 0x89, 0x6e, 0x4e, 0x62, 0x52, 0x31, 0xc4, 0xe7, 0x15, 0x10, 0xaa, 0xa4, 0xb2, 0x20, 0xb5, - 0x38, 0x89, 0x0d, 0xec, 0x3b, 0x63, 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0x3f, 0x0a, 0x43, 0x20, - 0x1a, 0x01, 0x00, 0x00, + 0xb0, 0x98, 0x3e, 0x88, 0x05, 0x91, 0x56, 0xb2, 0xe7, 0xe2, 0x71, 0x87, 0xa8, 0x0f, 0x2e, 0x49, + 0x2c, 0x49, 0x15, 0xd2, 0xe7, 0x12, 0x2e, 0xc8, 0x49, 0x2c, 0x49, 0xcb, 0x2f, 0xca, 0x8d, 0x2f, + 0x48, 0x2d, 0x4a, 0x4e, 0xcd, 0x2b, 0x49, 0x4c, 0x4f, 0x95, 0x60, 0x54, 0x60, 0xd4, 0xe0, 0x0d, + 0x12, 0x82, 0x49, 0x05, 0xc0, 0x65, 0x9c, 0x1c, 0x4f, 0x3c, 0x92, 0x63, 0xbc, 0xf0, 0x48, 0x8e, + 0xf1, 0xc1, 0x23, 0x39, 0xc6, 0x09, 0x8f, 0xe5, 0x18, 0x2e, 0x3c, 0x96, 0x63, 0xb8, 0xf1, 0x58, + 0x8e, 0x21, 0x4a, 0x3d, 0x3d, 0xb3, 0x24, 0xa3, 0x34, 0x49, 0x2f, 0x39, 0x3f, 0x57, 0x3f, 0xa9, + 0xb4, 0x28, 0xaf, 0x44, 0x37, 0x27, 0x31, 0xa9, 0x18, 0xe2, 0xcc, 0x0a, 0x08, 0x55, 0x52, 0x59, + 0x90, 0x5a, 0x9c, 0xc4, 0x06, 0x76, 0x8a, 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0x95, 0x9b, 0xfd, + 0xef, 0xc7, 0x00, 0x00, 0x00, } func (m *GenesisState) Marshal() (dAtA []byte, err error) { @@ -153,41 +105,6 @@ func (m *GenesisState) MarshalTo(dAtA []byte) (int, error) { } func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Params != nil { - { - size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenesis(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *Params) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Params) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -212,19 +129,6 @@ func encodeVarintGenesis(dAtA []byte, offset int, v uint64) int { return base } func (m *GenesisState) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Params != nil { - l = m.Params.Size() - n += 1 + l + sovGenesis(uint64(l)) - } - return n -} - -func (m *Params) Size() (n int) { if m == nil { return 0 } @@ -271,92 +175,6 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { return fmt.Errorf("proto: GenesisState: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenesis - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenesis - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenesis - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Params == nil { - m.Params = &Params{} - } - if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenesis(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenesis - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Params) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenesis - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Params: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Params: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { case 1: if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field PlatformPercentage", wireType) diff --git a/x/xion/types/keys.go b/x/xion/types/keys.go index 794b30d6..1dcb9d3c 100644 --- a/x/xion/types/keys.go +++ b/x/xion/types/keys.go @@ -1,7 +1,7 @@ package types var ( - ParamsKey = []byte{0x00} + PlatformPercentageKey = []byte{0x00} ) const ( diff --git a/x/xion/types/msgs.go b/x/xion/types/msgs.go index 4618742f..4c91056d 100644 --- a/x/xion/types/msgs.go +++ b/x/xion/types/msgs.go @@ -1,6 +1,7 @@ package types import ( + "fmt" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" @@ -8,13 +9,15 @@ import ( // bank message types const ( - TypeMsgSend = "send" - TypeMsgMultiSend = "multisend" + TypeMsgSend = "send" + TypeMsgMultiSend = "multisend" + TypeMsgSetPlatformPercentage = "setplatformpercentage" ) var ( _ sdk.Msg = &MsgSend{} _ sdk.Msg = &MsgMultiSend{} + _ sdk.Msg = &MsgSetPlatformPercentage{} ) // NewMsgSend - construct a msg to send coins from one account to another. @@ -108,3 +111,37 @@ func (msg MsgMultiSend) GetSigners() []sdk.AccAddress { return addrs } + +// NewMsgMultiSend - construct arbitrary multi-in, multi-out send msg. +func NewMsgSetPlatformPercentage(percentage uint32) *MsgSetPlatformPercentage { + return &MsgSetPlatformPercentage{PlatformPercentage: percentage} +} + +// Route Implements Msg +func (msg MsgSetPlatformPercentage) Route() string { return RouterKey } + +// Type Implements Msg +func (msg MsgSetPlatformPercentage) Type() string { return TypeMsgSetPlatformPercentage } + +// ValidateBasic Implements Msg. +func (msg MsgSetPlatformPercentage) ValidateBasic() error { + // this just makes sure the input and all the outputs are properly formatted, + // not that they actually have the money inside + + if msg.PlatformPercentage > 10000 { + return fmt.Errorf("unable to have a platform percentage that exceeds 100%") + } + + return nil +} + +// GetSignBytes Implements Msg. +func (msg MsgSetPlatformPercentage) GetSignBytes() []byte { + return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&msg)) +} + +// GetSigners Implements Msg. +func (msg MsgSetPlatformPercentage) GetSigners() []sdk.AccAddress { + addr, _ := sdk.AccAddressFromBech32(msg.Authority) + return []sdk.AccAddress{addr} +} diff --git a/x/xion/types/params.go b/x/xion/types/params.go deleted file mode 100644 index 1aaec70e..00000000 --- a/x/xion/types/params.go +++ /dev/null @@ -1,27 +0,0 @@ -package types - -import ( - "errors" -) - -// NewParams creates a new parameter configuration for the xion module -func NewParams(platformPercentage uint32) Params { - return Params{ - PlatformPercentage: platformPercentage, - } -} - -// DefaultParams is the default parameter configuration for the bank module -func DefaultParams() Params { - return Params{ - PlatformPercentage: 0, - } -} - -// Validate all bank module parameters -func (p Params) Validate() error { - if p.PlatformPercentage > 10000 { - return errors.New("platform fee cannot exceed 100%") - } - return nil -} diff --git a/x/xion/types/tx.pb.go b/x/xion/types/tx.pb.go index 17e3b644..bdd6e730 100644 --- a/x/xion/types/tx.pb.go +++ b/x/xion/types/tx.pb.go @@ -203,49 +203,146 @@ func (m *MsgMultiSendResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgMultiSendResponse proto.InternalMessageInfo +type MsgSetPlatformPercentage struct { + Authority string `protobuf:"bytes,1,opt,name=authority,proto3" json:"authority,omitempty"` + // platform_percentage is the platform fee percentage to multiplied by 10000 + PlatformPercentage uint32 `protobuf:"varint,2,opt,name=platform_percentage,json=platformPercentage,proto3" json:"platform_percentage,omitempty"` +} + +func (m *MsgSetPlatformPercentage) Reset() { *m = MsgSetPlatformPercentage{} } +func (m *MsgSetPlatformPercentage) String() string { return proto.CompactTextString(m) } +func (*MsgSetPlatformPercentage) ProtoMessage() {} +func (*MsgSetPlatformPercentage) Descriptor() ([]byte, []int) { + return fileDescriptor_780dee9ad54baf68, []int{4} +} +func (m *MsgSetPlatformPercentage) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgSetPlatformPercentage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgSetPlatformPercentage.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgSetPlatformPercentage) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgSetPlatformPercentage.Merge(m, src) +} +func (m *MsgSetPlatformPercentage) XXX_Size() int { + return m.Size() +} +func (m *MsgSetPlatformPercentage) XXX_DiscardUnknown() { + xxx_messageInfo_MsgSetPlatformPercentage.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgSetPlatformPercentage proto.InternalMessageInfo + +func (m *MsgSetPlatformPercentage) GetAuthority() string { + if m != nil { + return m.Authority + } + return "" +} + +func (m *MsgSetPlatformPercentage) GetPlatformPercentage() uint32 { + if m != nil { + return m.PlatformPercentage + } + return 0 +} + +type MsgSetPlatformPercentageResponse struct { +} + +func (m *MsgSetPlatformPercentageResponse) Reset() { *m = MsgSetPlatformPercentageResponse{} } +func (m *MsgSetPlatformPercentageResponse) String() string { return proto.CompactTextString(m) } +func (*MsgSetPlatformPercentageResponse) ProtoMessage() {} +func (*MsgSetPlatformPercentageResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_780dee9ad54baf68, []int{5} +} +func (m *MsgSetPlatformPercentageResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgSetPlatformPercentageResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgSetPlatformPercentageResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgSetPlatformPercentageResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgSetPlatformPercentageResponse.Merge(m, src) +} +func (m *MsgSetPlatformPercentageResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgSetPlatformPercentageResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgSetPlatformPercentageResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgSetPlatformPercentageResponse proto.InternalMessageInfo + func init() { proto.RegisterType((*MsgSend)(nil), "xion.v1.MsgSend") proto.RegisterType((*MsgSendResponse)(nil), "xion.v1.MsgSendResponse") proto.RegisterType((*MsgMultiSend)(nil), "xion.v1.MsgMultiSend") proto.RegisterType((*MsgMultiSendResponse)(nil), "xion.v1.MsgMultiSendResponse") + proto.RegisterType((*MsgSetPlatformPercentage)(nil), "xion.v1.MsgSetPlatformPercentage") + proto.RegisterType((*MsgSetPlatformPercentageResponse)(nil), "xion.v1.MsgSetPlatformPercentageResponse") } func init() { proto.RegisterFile("xion/xion/v1/tx.proto", fileDescriptor_780dee9ad54baf68) } var fileDescriptor_780dee9ad54baf68 = []byte{ - // 510 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x53, 0x31, 0x8b, 0x13, 0x41, - 0x14, 0xde, 0x4d, 0x34, 0x21, 0x73, 0x07, 0x9a, 0x25, 0xa7, 0xb9, 0x15, 0x37, 0x47, 0x40, 0x0c, - 0x81, 0xec, 0x92, 0x88, 0x08, 0x27, 0x82, 0x89, 0x95, 0x45, 0x10, 0x72, 0x9d, 0xcd, 0xb1, 0x9b, - 0xac, 0x73, 0x4b, 0x6e, 0xe7, 0x85, 0x9d, 0xd9, 0x10, 0x3b, 0xd1, 0x46, 0xac, 0x6c, 0xec, 0xaf, - 0x14, 0xab, 0x2b, 0xc4, 0xdf, 0x70, 0xe5, 0x61, 0x65, 0xa5, 0x92, 0x14, 0xe7, 0xcf, 0x90, 0x99, - 0x79, 0xbb, 0x17, 0x35, 0x60, 0xb3, 0x33, 0xf3, 0x7d, 0xef, 0x7b, 0xf9, 0xbe, 0x37, 0x13, 0xb2, - 0xb3, 0x88, 0x80, 0x79, 0xea, 0x33, 0xef, 0x7a, 0x62, 0xe1, 0xce, 0x12, 0x10, 0x60, 0x95, 0x25, - 0xe2, 0xce, 0xbb, 0x76, 0x8d, 0x02, 0x05, 0x85, 0x79, 0x72, 0xa7, 0x69, 0xfb, 0xe6, 0x18, 0x78, - 0x0c, 0xdc, 0x8b, 0x39, 0x95, 0xb2, 0x98, 0x53, 0x24, 0xaa, 0x7e, 0x1c, 0x31, 0xf0, 0xd4, 0x17, - 0xa1, 0x5d, 0x5d, 0x7b, 0xa8, 0x9b, 0xe8, 0x03, 0x52, 0x0e, 0xb6, 0x09, 0x7c, 0x1e, 0x7a, 0xf3, - 0x6e, 0x10, 0x0a, 0xbf, 0xeb, 0x8d, 0x21, 0x62, 0xff, 0xf0, 0x6c, 0x9a, 0xf3, 0xf2, 0xa0, 0xf9, - 0xe6, 0x87, 0x02, 0x29, 0x0f, 0x39, 0x3d, 0x08, 0xd9, 0xc4, 0x7a, 0x48, 0xb6, 0x5f, 0x24, 0x10, - 0x1f, 0xfa, 0x93, 0x49, 0x12, 0x72, 0x5e, 0x37, 0xf7, 0xcc, 0x56, 0x65, 0x50, 0xff, 0xfa, 0xb9, - 0x53, 0xc3, 0xdf, 0xec, 0x6b, 0xe6, 0x40, 0x24, 0x11, 0xa3, 0xa3, 0x2d, 0x59, 0x8d, 0x90, 0xf5, - 0x80, 0x10, 0x01, 0xb9, 0xb4, 0xf0, 0x1f, 0x69, 0x45, 0x40, 0x26, 0x3c, 0x22, 0x25, 0x3f, 0x86, - 0x94, 0x89, 0x7a, 0x71, 0xaf, 0xd8, 0xda, 0xea, 0xed, 0xba, 0xa8, 0x90, 0x91, 0x5c, 0xb4, 0xec, - 0x3e, 0x81, 0x88, 0x0d, 0xee, 0x9f, 0x7d, 0x6f, 0x18, 0x9f, 0x7e, 0x34, 0x5a, 0x34, 0x12, 0x47, - 0x69, 0xe0, 0x8e, 0x21, 0xc6, 0x69, 0xe0, 0xd2, 0xe1, 0x93, 0xa9, 0x27, 0x5e, 0xce, 0x42, 0xae, - 0x04, 0xfc, 0xe3, 0xc5, 0x69, 0xdb, 0x1c, 0x61, 0xff, 0xfd, 0xf6, 0xdb, 0x93, 0x86, 0xf1, 0xeb, - 0xa4, 0x61, 0xbc, 0xbe, 0x38, 0x6d, 0xff, 0x11, 0xf5, 0x9d, 0x04, 0xd4, 0x0d, 0xe2, 0x2c, 0x9a, - 0x55, 0x72, 0x0d, 0xb7, 0xa3, 0x90, 0xcf, 0x80, 0xf1, 0xb0, 0xf9, 0xc5, 0x24, 0xdb, 0x43, 0x4e, - 0x87, 0xe9, 0xb1, 0x88, 0xd4, 0xbc, 0x1e, 0x91, 0x52, 0xc4, 0x66, 0xa9, 0x90, 0x93, 0x92, 0xce, - 0xed, 0x4b, 0xe7, 0x6c, 0x9a, 0x3b, 0x7f, 0x2a, 0x4b, 0x06, 0x15, 0x69, 0x1d, 0xed, 0x68, 0x91, - 0xf5, 0x98, 0x94, 0x21, 0x15, 0x4a, 0x5f, 0x50, 0xfa, 0x5b, 0x1b, 0xf5, 0xcf, 0x54, 0xcd, 0x7a, - 0x83, 0x4c, 0xb6, 0x7f, 0x27, 0x0b, 0x83, 0x2d, 0x65, 0x8c, 0x6a, 0x16, 0x23, 0xf7, 0xd9, 0xbc, - 0x41, 0x6a, 0xeb, 0xe7, 0x2c, 0x50, 0xef, 0x8d, 0x49, 0x8a, 0x43, 0x4e, 0xad, 0x1e, 0xb9, 0xa2, - 0xf2, 0x5c, 0x77, 0xf1, 0xc9, 0xba, 0x18, 0xdd, 0xae, 0xff, 0x8d, 0x64, 0x5a, 0xab, 0x4f, 0x2a, - 0x97, 0x83, 0xd8, 0x59, 0x2f, 0xcb, 0x61, 0xfb, 0xf6, 0x46, 0x38, 0x6b, 0x61, 0x5f, 0x7d, 0x25, - 0xd3, 0x0c, 0xfa, 0x67, 0x4b, 0xc7, 0x3c, 0x5f, 0x3a, 0xe6, 0xcf, 0xa5, 0x63, 0xbe, 0x5f, 0x39, - 0xc6, 0xf9, 0xca, 0x31, 0xbe, 0xad, 0x1c, 0xe3, 0xf9, 0xdd, 0xb5, 0x6b, 0x0e, 0xd2, 0x84, 0x89, - 0xce, 0xb1, 0x1f, 0x70, 0xfd, 0x4f, 0x5b, 0xe8, 0x45, 0xdd, 0x75, 0x50, 0x52, 0x6f, 0xf9, 0xde, - 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0x20, 0x8d, 0x9a, 0x01, 0x8a, 0x03, 0x00, 0x00, + // 602 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x54, 0x41, 0x8f, 0xd2, 0x40, + 0x14, 0x6e, 0x41, 0x21, 0xcc, 0xae, 0x51, 0x2a, 0x28, 0x5b, 0xb3, 0x05, 0x9b, 0x18, 0x91, 0x84, + 0x56, 0x30, 0x6a, 0x82, 0x31, 0x11, 0x3c, 0x79, 0x20, 0x6e, 0xd8, 0x9b, 0x17, 0xd2, 0xc2, 0x6c, + 0x69, 0xa0, 0x33, 0x4d, 0x67, 0x4a, 0xd8, 0x9b, 0xf1, 0x64, 0x3c, 0x79, 0xf1, 0xbe, 0x47, 0xe3, + 0x69, 0x0f, 0xea, 0x6f, 0xd8, 0xe3, 0xc6, 0x93, 0x27, 0x35, 0x70, 0x58, 0xe3, 0xaf, 0x30, 0x33, + 0x9d, 0x16, 0xd6, 0xc5, 0x70, 0x69, 0x3b, 0xef, 0xbd, 0xef, 0x9b, 0xef, 0x7b, 0x6f, 0xa6, 0xa0, + 0x38, 0x73, 0x31, 0x32, 0xf9, 0x63, 0xda, 0x30, 0xe9, 0xcc, 0xf0, 0x03, 0x4c, 0xb1, 0x92, 0x65, + 0x11, 0x63, 0xda, 0x50, 0x0b, 0x0e, 0x76, 0x30, 0x8f, 0x99, 0xec, 0x2b, 0x4a, 0xab, 0x37, 0x07, + 0x98, 0x78, 0x98, 0x98, 0x1e, 0x71, 0x18, 0xcc, 0x23, 0x8e, 0x48, 0xe4, 0x2d, 0xcf, 0x45, 0xd8, + 0xe4, 0x4f, 0x11, 0xda, 0x89, 0x6a, 0xfb, 0x11, 0x49, 0xb4, 0x10, 0x29, 0x4d, 0xd0, 0xd8, 0x16, + 0x81, 0xe6, 0xb4, 0x61, 0x43, 0x6a, 0x35, 0xcc, 0x01, 0x76, 0xd1, 0x85, 0x3c, 0x1a, 0x27, 0x79, + 0xb6, 0x88, 0xf2, 0xfa, 0x87, 0x14, 0xc8, 0x76, 0x89, 0xb3, 0x0f, 0xd1, 0x50, 0x79, 0x02, 0xb6, + 0x0f, 0x02, 0xec, 0xf5, 0xad, 0xe1, 0x30, 0x80, 0x84, 0x94, 0xe4, 0x8a, 0x5c, 0xcd, 0x75, 0x4a, + 0xdf, 0x3e, 0xd7, 0x0b, 0x62, 0xcf, 0x76, 0x94, 0xd9, 0xa7, 0x81, 0x8b, 0x9c, 0xde, 0x16, 0xab, + 0x16, 0x21, 0xe5, 0x31, 0x00, 0x14, 0x27, 0xd0, 0xd4, 0x06, 0x68, 0x8e, 0xe2, 0x18, 0x38, 0x02, + 0x19, 0xcb, 0xc3, 0x21, 0xa2, 0xa5, 0x74, 0x25, 0x5d, 0xdd, 0x6a, 0xee, 0x18, 0x02, 0xc1, 0x2c, + 0x19, 0x42, 0xb2, 0xf1, 0x1c, 0xbb, 0xa8, 0xf3, 0xf0, 0xe4, 0x47, 0x59, 0xfa, 0xf4, 0xb3, 0x5c, + 0x75, 0x5c, 0x3a, 0x0a, 0x6d, 0x63, 0x80, 0x3d, 0xd1, 0x0d, 0xf1, 0xaa, 0x93, 0xe1, 0xd8, 0xa4, + 0x87, 0x3e, 0x24, 0x1c, 0x40, 0x3e, 0x9e, 0x1d, 0xd7, 0xe4, 0x9e, 0xe0, 0x6f, 0xd5, 0xde, 0x1e, + 0x95, 0xa5, 0xdf, 0x47, 0x65, 0xe9, 0xcd, 0xd9, 0x71, 0xed, 0x9c, 0xd5, 0x77, 0x2c, 0xc0, 0x27, + 0x28, 0x7a, 0xa1, 0xe7, 0xc1, 0x55, 0xf1, 0xd9, 0x83, 0xc4, 0xc7, 0x88, 0x40, 0xfd, 0xab, 0x0c, + 0xb6, 0xbb, 0xc4, 0xe9, 0x86, 0x13, 0xea, 0xf2, 0x7e, 0x3d, 0x05, 0x19, 0x17, 0xf9, 0x21, 0x65, + 0x9d, 0x62, 0xca, 0xd5, 0xa5, 0x72, 0x34, 0x4e, 0x94, 0xbf, 0x60, 0x25, 0x9d, 0x1c, 0x93, 0x2e, + 0xe4, 0x44, 0x20, 0xe5, 0x19, 0xc8, 0xe2, 0x90, 0x72, 0x7c, 0x8a, 0xe3, 0x6f, 0xad, 0xc5, 0xbf, + 0xe4, 0x35, 0xab, 0x04, 0x31, 0xac, 0x75, 0x27, 0x36, 0x23, 0x28, 0x99, 0x8d, 0x7c, 0x6c, 0x23, + 0xd1, 0xa9, 0xdf, 0x00, 0x85, 0xd5, 0x75, 0x62, 0xe8, 0x8b, 0x0c, 0x4a, 0xdc, 0x24, 0xdd, 0x9b, + 0x58, 0xf4, 0x00, 0x07, 0xde, 0x1e, 0x0c, 0x06, 0x10, 0x51, 0xcb, 0x81, 0xca, 0x23, 0x90, 0xb3, + 0x42, 0x3a, 0xc2, 0x81, 0x4b, 0x0f, 0x37, 0x9e, 0x84, 0x65, 0xa9, 0x62, 0x82, 0xeb, 0xbe, 0x60, + 0xeb, 0xfb, 0x09, 0x1d, 0x3f, 0x10, 0x57, 0x7a, 0x8a, 0x7f, 0x61, 0xa3, 0xd6, 0x7d, 0x66, 0x60, + 0x49, 0xc0, 0x3c, 0xec, 0x2e, 0x47, 0xb1, 0x46, 0x9a, 0xae, 0x83, 0xca, 0xff, 0x72, 0xb1, 0xb7, + 0xe6, 0x1f, 0x19, 0xa4, 0xbb, 0xc4, 0x51, 0x9a, 0xe0, 0x12, 0x9f, 0xd5, 0x35, 0x43, 0x5c, 0x47, + 0x43, 0x8c, 0x55, 0x2d, 0xfd, 0x1b, 0x89, 0xb1, 0x4a, 0x1b, 0xe4, 0x96, 0x43, 0x2e, 0xae, 0x96, + 0x25, 0x61, 0x75, 0x77, 0x6d, 0x38, 0xa1, 0x80, 0xa0, 0xb8, 0xbe, 0xad, 0xb7, 0xcf, 0xef, 0xba, + 0xa6, 0x44, 0xbd, 0xb7, 0xb1, 0x24, 0xde, 0x46, 0xbd, 0xfc, 0x9a, 0x1d, 0x88, 0x4e, 0xfb, 0x64, + 0xae, 0xc9, 0xa7, 0x73, 0x4d, 0xfe, 0x35, 0xd7, 0xe4, 0xf7, 0x0b, 0x4d, 0x3a, 0x5d, 0x68, 0xd2, + 0xf7, 0x85, 0x26, 0xbd, 0xba, 0xbb, 0x72, 0x53, 0xec, 0x30, 0x40, 0xb4, 0x3e, 0xb1, 0x6c, 0x12, + 0xfd, 0xac, 0x66, 0xd1, 0x8b, 0x5f, 0x17, 0x3b, 0xc3, 0x7f, 0x07, 0x0f, 0xfe, 0x06, 0x00, 0x00, + 0xff, 0xff, 0xb4, 0x5c, 0x42, 0xc2, 0xcd, 0x04, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -264,6 +361,8 @@ type MsgClient interface { Send(ctx context.Context, in *MsgSend, opts ...grpc.CallOption) (*MsgSendResponse, error) // MultiSend defines a method for sending coins from some accounts to other accounts. MultiSend(ctx context.Context, in *MsgMultiSend, opts ...grpc.CallOption) (*MsgMultiSendResponse, error) + // SetPlatformPercentage defines the method for updating the platform percentage fee + SetPlatformPercentage(ctx context.Context, in *MsgSetPlatformPercentage, opts ...grpc.CallOption) (*MsgSetPlatformPercentageResponse, error) } type msgClient struct { @@ -292,12 +391,23 @@ func (c *msgClient) MultiSend(ctx context.Context, in *MsgMultiSend, opts ...grp return out, nil } +func (c *msgClient) SetPlatformPercentage(ctx context.Context, in *MsgSetPlatformPercentage, opts ...grpc.CallOption) (*MsgSetPlatformPercentageResponse, error) { + out := new(MsgSetPlatformPercentageResponse) + err := c.cc.Invoke(ctx, "/xion.v1.Msg/SetPlatformPercentage", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // MsgServer is the server API for Msg service. type MsgServer interface { // Send defines a method for sending coins from one account to another account. Send(context.Context, *MsgSend) (*MsgSendResponse, error) // MultiSend defines a method for sending coins from some accounts to other accounts. MultiSend(context.Context, *MsgMultiSend) (*MsgMultiSendResponse, error) + // SetPlatformPercentage defines the method for updating the platform percentage fee + SetPlatformPercentage(context.Context, *MsgSetPlatformPercentage) (*MsgSetPlatformPercentageResponse, error) } // UnimplementedMsgServer can be embedded to have forward compatible implementations. @@ -310,6 +420,9 @@ func (*UnimplementedMsgServer) Send(ctx context.Context, req *MsgSend) (*MsgSend func (*UnimplementedMsgServer) MultiSend(ctx context.Context, req *MsgMultiSend) (*MsgMultiSendResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method MultiSend not implemented") } +func (*UnimplementedMsgServer) SetPlatformPercentage(ctx context.Context, req *MsgSetPlatformPercentage) (*MsgSetPlatformPercentageResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SetPlatformPercentage not implemented") +} func RegisterMsgServer(s grpc1.Server, srv MsgServer) { s.RegisterService(&_Msg_serviceDesc, srv) @@ -351,6 +464,24 @@ func _Msg_MultiSend_Handler(srv interface{}, ctx context.Context, dec func(inter return interceptor(ctx, in, info, handler) } +func _Msg_SetPlatformPercentage_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgSetPlatformPercentage) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).SetPlatformPercentage(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/xion.v1.Msg/SetPlatformPercentage", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).SetPlatformPercentage(ctx, req.(*MsgSetPlatformPercentage)) + } + return interceptor(ctx, in, info, handler) +} + var _Msg_serviceDesc = grpc.ServiceDesc{ ServiceName: "xion.v1.Msg", HandlerType: (*MsgServer)(nil), @@ -363,6 +494,10 @@ var _Msg_serviceDesc = grpc.ServiceDesc{ MethodName: "MultiSend", Handler: _Msg_MultiSend_Handler, }, + { + MethodName: "SetPlatformPercentage", + Handler: _Msg_SetPlatformPercentage_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "xion/xion/v1/tx.proto", @@ -516,6 +651,64 @@ func (m *MsgMultiSendResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *MsgSetPlatformPercentage) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgSetPlatformPercentage) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgSetPlatformPercentage) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.PlatformPercentage != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.PlatformPercentage)) + i-- + dAtA[i] = 0x10 + } + if len(m.Authority) > 0 { + i -= len(m.Authority) + copy(dAtA[i:], m.Authority) + i = encodeVarintTx(dAtA, i, uint64(len(m.Authority))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgSetPlatformPercentageResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgSetPlatformPercentageResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgSetPlatformPercentageResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + func encodeVarintTx(dAtA []byte, offset int, v uint64) int { offset -= sovTx(v) base := offset @@ -589,6 +782,31 @@ func (m *MsgMultiSendResponse) Size() (n int) { return n } +func (m *MsgSetPlatformPercentage) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Authority) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + if m.PlatformPercentage != 0 { + n += 1 + sovTx(uint64(m.PlatformPercentage)) + } + return n +} + +func (m *MsgSetPlatformPercentageResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + func sovTx(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } @@ -961,6 +1179,157 @@ func (m *MsgMultiSendResponse) Unmarshal(dAtA []byte) error { } return nil } +func (m *MsgSetPlatformPercentage) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgSetPlatformPercentage: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgSetPlatformPercentage: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Authority", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Authority = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PlatformPercentage", wireType) + } + m.PlatformPercentage = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.PlatformPercentage |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgSetPlatformPercentageResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgSetPlatformPercentageResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgSetPlatformPercentageResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func skipTx(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 From 960c039977bfe3265bf8d8ebb064a372260954a5 Mon Sep 17 00:00:00 2001 From: Ash Date: Thu, 4 May 2023 00:51:10 -0500 Subject: [PATCH 042/501] well that's not right --- integration_tests/send_test.go | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/integration_tests/send_test.go b/integration_tests/send_test.go index 697b5ada..1d3392c0 100644 --- a/integration_tests/send_test.go +++ b/integration_tests/send_test.go @@ -12,7 +12,6 @@ import ( xiontypes "github.com/burnt-labs/xion/x/xion/types" "github.com/cosmos/cosmos-sdk/codec" - cdctypes "github.com/cosmos/cosmos-sdk/codec/types" "github.com/cosmos/cosmos-sdk/types" ibctest "github.com/strangelove-ventures/interchaintest/v7" "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" @@ -139,7 +138,6 @@ func TestXionSendPlatformFee(t *testing.T) { require.Equal(t, uint64(100), uint64(balance)) // step 2: update the platform percentage to 5% - config := types.GetConfig() config.SetBech32PrefixForAccount("xion", "xionpub") @@ -148,12 +146,11 @@ func TestXionSendPlatformFee(t *testing.T) { PlatformPercentage: 500, } - registry := cdctypes.NewInterfaceRegistry() - registry.RegisterImplementations( + xion.Config().EncodingConfig.InterfaceRegistry.RegisterImplementations( (*types.Msg)(nil), &xiontypes.MsgSetPlatformPercentage{}, ) - cdc := codec.NewProtoCodec(registry) + cdc := codec.NewProtoCodec(xion.Config().EncodingConfig.InterfaceRegistry) msg, err := cdc.MarshalInterfaceJSON(&setPlatformPercentageMsg) @@ -166,7 +163,7 @@ func TestXionSendPlatformFee(t *testing.T) { } paramChangeTx, err := xion.SubmitProposal(ctx, xionUser.KeyName(), &prop) require.NoError(t, err) - t.Logf("Param change proposal submitted with ID %s in transaction %s", paramChangeTx.ProposalID, paramChangeTx.TxHash) + t.Logf("Platform percentage change proposal submitted with ID %s in transaction %s", paramChangeTx.ProposalID, paramChangeTx.TxHash) require.Eventuallyf(t, func() bool { proposalInfo, err := xion.QueryProposal(ctx, paramChangeTx.ProposalID) @@ -198,15 +195,27 @@ func TestXionSendPlatformFee(t *testing.T) { }, time.Second*11, time.Second, "failed to reach status PASSED after 11s") // step 3: transfer and verify platform fees is extracted + initialSendingBalance, err := xion.GetBalance(ctx, xionUser.FormattedAddress(), xion.Config().Denom) + require.NoError(t, err) + initialReceivingBalance, err := xion.GetBalance(ctx, recipientKeyAddress, xion.Config().Denom) + require.NoError(t, err) + require.Equal(t, uint64(100), uint64(initialReceivingBalance)) + _, err = xion.FullNodes[0].ExecTx(ctx, xionUser.KeyName(), "xion", "send", xionUser.KeyName(), "--chain-id", xion.Config().ChainID, - recipientKeyAddress, fmt.Sprintf("%d%s", 100, xion.Config().Denom), + recipientKeyAddress, fmt.Sprintf("%d%s", 200, xion.Config().Denom), ) require.NoError(t, err) - balance, err = xion.GetBalance(ctx, recipientKeyAddress, xion.Config().Denom) + + postSendingBalance, err := xion.GetBalance(ctx, xionUser.FormattedAddress(), xion.Config().Denom) + require.NoError(t, err) + t.Log("initial balance:", initialSendingBalance) + t.Log("post balance:", postSendingBalance) + //require.Equal(t, uint64(initialSendingBalance-200), uint64(postSendingBalance)) + postReceivingBalance, err := xion.GetBalance(ctx, recipientKeyAddress, xion.Config().Denom) require.NoError(t, err) - require.Equal(t, 195, balance) + require.Equal(t, uint64(290), uint64(postReceivingBalance)) } From 3297474e50748081f389908a591940597a64ad4f Mon Sep 17 00:00:00 2001 From: Ash Date: Thu, 4 May 2023 01:08:00 -0500 Subject: [PATCH 043/501] we did it boys --- integration_tests/send_test.go | 5 +---- x/xion/keeper/msg_server.go | 13 ++----------- 2 files changed, 3 insertions(+), 15 deletions(-) diff --git a/integration_tests/send_test.go b/integration_tests/send_test.go index 1d3392c0..31a4f30b 100644 --- a/integration_tests/send_test.go +++ b/integration_tests/send_test.go @@ -211,11 +211,8 @@ func TestXionSendPlatformFee(t *testing.T) { postSendingBalance, err := xion.GetBalance(ctx, xionUser.FormattedAddress(), xion.Config().Denom) require.NoError(t, err) - t.Log("initial balance:", initialSendingBalance) - t.Log("post balance:", postSendingBalance) - //require.Equal(t, uint64(initialSendingBalance-200), uint64(postSendingBalance)) + require.Equal(t, uint64(initialSendingBalance-200), uint64(postSendingBalance)) postReceivingBalance, err := xion.GetBalance(ctx, recipientKeyAddress, xion.Config().Denom) require.NoError(t, err) require.Equal(t, uint64(290), uint64(postReceivingBalance)) - } diff --git a/x/xion/keeper/msg_server.go b/x/xion/keeper/msg_server.go index d159b35b..73122d11 100644 --- a/x/xion/keeper/msg_server.go +++ b/x/xion/keeper/msg_server.go @@ -51,23 +51,14 @@ func (k msgServer) Send(goCtx context.Context, msg *types.MsgSend) (*types.MsgSe if !percentage.IsZero() { platformCoins := msg.Amount.MulInt(percentage).QuoInt(sdk.NewInt(10000)) - throughCoins, wentNegative := throughCoins.SafeSub(platformCoins...) - if wentNegative { - return nil, fmt.Errorf("unable to subtract %v from %v", platformCoins, throughCoins) - } + throughCoins = throughCoins.Sub(platformCoins...) if err := k.bankKeeper.SendCoinsFromAccountToModule(ctx, from, authtypes.FeeCollectorName, platformCoins); err != nil { return nil, err } - - err = k.bankKeeper.SendCoins(ctx, from, to, msg.Amount) - if err != nil { - return nil, err - } - } - err = k.bankKeeper.SendCoins(ctx, from, to, msg.Amount) + err = k.bankKeeper.SendCoins(ctx, from, to, throughCoins) if err != nil { return nil, err } From bdc28c964b2ca6d3a4dc2c8148bd226293087b4c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 11 May 2023 20:49:18 +0000 Subject: [PATCH 044/501] Bump github.com/docker/distribution Bumps [github.com/docker/distribution](https://github.com/docker/distribution) from 2.8.1+incompatible to 2.8.2+incompatible. - [Release notes](https://github.com/docker/distribution/releases) - [Commits](https://github.com/docker/distribution/compare/v2.8.1...v2.8.2) --- updated-dependencies: - dependency-name: github.com/docker/distribution dependency-type: indirect ... Signed-off-by: dependabot[bot] --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index ba4a73c0..4ad933f4 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/cosmos/iavl v0.20.0 // indirect github.com/cosmos/ibc-go/v7 v7.0.0 github.com/cosmos/ics23/go v0.9.1-0.20221207100636-b1abd8678aab // indirect - github.com/docker/distribution v2.8.1+incompatible // indirect + github.com/docker/distribution v2.8.2+incompatible // indirect github.com/dvsekhvalnov/jose2go v1.5.0 // indirect github.com/golang/protobuf v1.5.3 github.com/google/gofuzz v1.2.0 // indirect diff --git a/go.sum b/go.sum index e95e3c03..3f2c861c 100644 --- a/go.sum +++ b/go.sum @@ -368,8 +368,8 @@ github.com/dgraph-io/ristretto v0.1.1/go.mod h1:S1GPSBCYCIhmVNfcth17y2zZtQT6wzkz github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68= -github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8= +github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= From b32d474ee9861b26599c32a8defa85bbb2ed828b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 12 May 2023 21:14:40 +0000 Subject: [PATCH 045/501] Bump github.com/docker/distribution in /integration_tests Bumps [github.com/docker/distribution](https://github.com/docker/distribution) from 2.8.1+incompatible to 2.8.2+incompatible. - [Release notes](https://github.com/docker/distribution/releases) - [Commits](https://github.com/docker/distribution/compare/v2.8.1...v2.8.2) --- updated-dependencies: - dependency-name: github.com/docker/distribution dependency-type: indirect ... Signed-off-by: dependabot[bot] --- integration_tests/go.mod | 57 ++++----- integration_tests/go.sum | 260 ++++++--------------------------------- 2 files changed, 66 insertions(+), 251 deletions(-) diff --git a/integration_tests/go.mod b/integration_tests/go.mod index f5aab8b8..bd242f2d 100644 --- a/integration_tests/go.mod +++ b/integration_tests/go.mod @@ -3,39 +3,14 @@ module integration_tests go 1.19 require ( - github.com/99designs/keyring v1.2.1 - github.com/BurntSushi/toml v1.2.1 - github.com/ChainSafe/go-schnorrkel/1 v0.0.0-00010101000000-000000000000 - github.com/StirlingMarketingGroup/go-namecase v1.0.0 - github.com/atotto/clipboard v0.1.4 - github.com/avast/retry-go/v4 v4.3.3 - github.com/centrifuge/go-substrate-rpc-client/v4 v4.0.12 - github.com/cometbft/cometbft v0.37.0 + github.com/burnt-labs/xion v0.1.0 github.com/cosmos/cosmos-sdk v0.47.0 - github.com/cosmos/go-bip39 v1.0.0 github.com/cosmos/ibc-go/v7 v7.0.0 - github.com/davecgh/go-spew v1.1.1 - github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.0 - github.com/docker/docker v20.10.19+incompatible - github.com/docker/go-connections v0.4.0 - github.com/gdamore/tcell/v2 v2.6.0 - github.com/google/go-cmp v0.5.9 - github.com/hashicorp/go-version v1.6.0 github.com/icza/dyno v0.0.0-20220812133438-f0b6f8a18845 - github.com/libp2p/go-libp2p-core v0.20.1 - github.com/mr-tron/base58 v1.2.0 - github.com/pelletier/go-toml v1.9.5 - github.com/rivo/tview v0.0.0-20220307222120-9994674d60a8 github.com/strangelove-ventures/interchaintest/v7 v7.0.0-20230326163644-f0ba01f43314 github.com/stretchr/testify v1.8.2 - go.uber.org/multierr v1.8.0 go.uber.org/zap v1.24.0 - golang.org/x/crypto v0.7.0 - golang.org/x/sync v0.1.0 - golang.org/x/tools v0.7.0 google.golang.org/grpc v1.53.0 - gopkg.in/yaml.v3 v3.0.1 - modernc.org/sqlite v1.21.0 ) require ( @@ -52,25 +27,32 @@ require ( cosmossdk.io/tools/rosetta v0.2.1 // indirect filippo.io/edwards25519 v1.0.0 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect + github.com/99designs/keyring v1.2.1 // indirect + github.com/BurntSushi/toml v1.2.1 // indirect github.com/ChainSafe/go-schnorrkel v1.0.0 // indirect + github.com/ChainSafe/go-schnorrkel/1 v0.0.0-00010101000000-000000000000 // indirect github.com/Microsoft/go-winio v0.6.0 // indirect + github.com/StirlingMarketingGroup/go-namecase v1.0.0 // indirect github.com/armon/go-metrics v0.4.1 // indirect + github.com/avast/retry-go/v4 v4.3.3 // indirect github.com/aws/aws-sdk-go v1.44.203 // indirect github.com/benbjohnson/clock v1.3.0 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 // indirect github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect - github.com/burnt-labs/xion v0.1.0 // indirect github.com/cenkalti/backoff/v4 v4.1.3 // indirect + github.com/centrifuge/go-substrate-rpc-client/v4 v4.0.12 // indirect github.com/cespare/xxhash v1.1.0 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/chzyer/readline v1.5.1 // indirect github.com/coinbase/rosetta-sdk-go/types v1.0.0 // indirect + github.com/cometbft/cometbft v0.37.0 // indirect github.com/cometbft/cometbft-db v0.7.0 // indirect github.com/confio/ics23/go v0.9.0 // indirect github.com/cosmos/btcutil v1.0.5 // indirect github.com/cosmos/cosmos-proto v1.0.0-beta.2 // indirect + github.com/cosmos/go-bip39 v1.0.0 // indirect github.com/cosmos/gogogateway v1.2.0 // indirect github.com/cosmos/gogoproto v1.4.7 // indirect github.com/cosmos/iavl v0.20.0 // indirect @@ -79,22 +61,25 @@ require ( github.com/cosmos/rosetta-sdk-go v0.10.0 // indirect github.com/creachadair/taskgroup v0.4.2 // indirect github.com/danieljoos/wincred v1.1.2 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect github.com/deckarep/golang-set v1.8.0 // indirect github.com/decred/base58 v1.0.4 // indirect github.com/decred/dcrd/crypto/blake256 v1.0.0 // indirect + github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.0 // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 // indirect github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f // indirect github.com/dgraph-io/badger/v2 v2.2007.4 // indirect github.com/dgraph-io/ristretto v0.1.1 // indirect github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect - github.com/docker/distribution v2.8.1+incompatible // indirect + github.com/docker/distribution v2.8.2+incompatible // indirect + github.com/docker/docker v20.10.19+incompatible // indirect + github.com/docker/go-connections v0.4.0 // indirect github.com/docker/go-units v0.5.0 // indirect github.com/dustin/go-humanize v1.0.1 // indirect github.com/dvsekhvalnov/jose2go v1.5.0 // indirect github.com/ethereum/go-ethereum v1.10.17 // indirect github.com/felixge/httpsnoop v1.0.2 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect - github.com/gdamore/encoding v1.0.0 // indirect github.com/go-kit/kit v0.12.0 // indirect github.com/go-kit/log v0.2.1 // indirect github.com/go-logfmt/logfmt v0.6.0 // indirect @@ -108,6 +93,7 @@ require ( github.com/golang/protobuf v1.5.3 // indirect github.com/golang/snappy v0.0.4 // indirect github.com/google/btree v1.1.2 // indirect + github.com/google/go-cmp v0.5.9 // indirect github.com/google/orderedcode v0.0.1 // indirect github.com/google/uuid v1.3.0 // indirect github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect @@ -124,6 +110,7 @@ require ( github.com/hashicorp/go-getter v1.7.0 // indirect github.com/hashicorp/go-immutable-radix v1.3.1 // indirect github.com/hashicorp/go-safetemp v1.0.0 // indirect + github.com/hashicorp/go-version v1.6.0 // indirect github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/hdevalence/ed25519consensus v0.1.0 // indirect @@ -140,13 +127,12 @@ require ( github.com/lib/pq v1.10.7 // indirect github.com/libp2p/go-buffer-pool v0.1.0 // indirect github.com/libp2p/go-libp2p v0.22.0 // indirect + github.com/libp2p/go-libp2p-core v0.20.1 // indirect github.com/libp2p/go-openssl v0.1.0 // indirect - github.com/lucasb-eyer/go-colorful v1.2.0 // indirect github.com/magiconair/properties v1.8.7 // indirect github.com/manifoldco/promptui v0.9.0 // indirect github.com/mattn/go-isatty v0.0.17 // indirect github.com/mattn/go-pointer v0.0.1 // indirect - github.com/mattn/go-runewidth v0.0.14 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect github.com/mimoo/StrobeGo v0.0.0-20220103164710-9a04d6ca976b // indirect github.com/minio/highwayhash v1.0.2 // indirect @@ -156,6 +142,7 @@ require ( github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/mr-tron/base58 v1.2.0 // indirect github.com/mtibben/percent v0.2.1 // indirect github.com/multiformats/go-base32 v0.0.4 // indirect github.com/multiformats/go-base36 v0.1.0 // indirect @@ -166,6 +153,7 @@ require ( github.com/multiformats/go-varint v0.0.6 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect github.com/opencontainers/image-spec v1.1.0-rc2 // indirect + github.com/pelletier/go-toml v1.9.5 // indirect github.com/pelletier/go-toml/v2 v2.0.6 // indirect github.com/petermattis/goid v0.0.0-20221215004737-a150e88a970d // indirect github.com/pierrec/xxHash v0.1.5 // indirect @@ -178,7 +166,6 @@ require ( github.com/rakyll/statik v0.1.7 // indirect github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect - github.com/rivo/uniseg v0.4.3 // indirect github.com/rs/cors v1.8.3 // indirect github.com/sasha-s/go-deadlock v0.3.1 // indirect github.com/sirupsen/logrus v1.9.0 // indirect @@ -202,13 +189,17 @@ require ( go.etcd.io/bbolt v1.3.7 // indirect go.opencensus.io v0.24.0 // indirect go.uber.org/atomic v1.10.0 // indirect + go.uber.org/multierr v1.8.0 // indirect + golang.org/x/crypto v0.7.0 // indirect golang.org/x/exp v0.0.0-20230310171629-522b1b587ee0 // indirect golang.org/x/mod v0.9.0 // indirect golang.org/x/net v0.8.0 // indirect golang.org/x/oauth2 v0.5.0 // indirect + golang.org/x/sync v0.1.0 // indirect golang.org/x/sys v0.6.0 // indirect golang.org/x/term v0.6.0 // indirect golang.org/x/text v0.8.0 // indirect + golang.org/x/tools v0.7.0 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect google.golang.org/api v0.110.0 // indirect google.golang.org/appengine v1.6.7 // indirect @@ -217,6 +208,7 @@ require ( gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect gopkg.in/yaml.v2 v2.4.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect lukechampine.com/blake3 v1.1.7 // indirect lukechampine.com/uint128 v1.2.0 // indirect modernc.org/cc/v3 v3.40.0 // indirect @@ -225,6 +217,7 @@ require ( modernc.org/mathutil v1.5.0 // indirect modernc.org/memory v1.5.0 // indirect modernc.org/opt v0.1.3 // indirect + modernc.org/sqlite v1.21.0 // indirect modernc.org/strutil v1.1.3 // indirect modernc.org/token v1.0.1 // indirect nhooyr.io/websocket v1.8.6 // indirect diff --git a/integration_tests/go.sum b/integration_tests/go.sum index 13b3d188..fe787939 100644 --- a/integration_tests/go.sum +++ b/integration_tests/go.sum @@ -33,7 +33,6 @@ cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2Z cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= -cloud.google.com/go v0.104.0 h1:gSmWO7DY1vOm0MVU6DNXM11BWHHsTUmsC5cv1fuW5X8= cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= cloud.google.com/go v0.110.0 h1:Zc8gqp3+a9/Eyph2KDmcGaPtbKRIoqq4YTlL4NMD0Ys= cloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY= @@ -74,12 +73,8 @@ cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= -cloud.google.com/go/compute v1.12.1 h1:gKVJMEyqV5c/UnpzjjQbo3Rjvvqpr9B1DFSbJC4OXr0= -cloud.google.com/go/compute v1.12.1/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= cloud.google.com/go/compute v1.18.0 h1:FEigFqoDbys2cvFkZ9Fjq4gnHBP55anJ0yQyau2f9oY= cloud.google.com/go/compute v1.18.0/go.mod h1:1X7yHxec2Ga+Ss6jPyjxRxpu2uu7PLgsOVXvgU0yacs= -cloud.google.com/go/compute/metadata v0.2.1 h1:efOwf5ymceDhK6PKMnnrTHP4pppY5L22mle96M1yP48= -cloud.google.com/go/compute/metadata v0.2.1/go.mod h1:jgHgmJd2RKBGzXqF5LR2EZMGxBkeanZ9wwa75XHJgOM= cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= @@ -118,8 +113,6 @@ cloud.google.com/go/gkehub v0.9.0/go.mod h1:WYHN6WG8w9bXU0hqNxt8rm5uxnk8IH+lPY9J cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y977wO+hBH0= cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= -cloud.google.com/go/iam v0.4.0 h1:YBYU00SCDzZJdHqVc4I5d6lsklcYIjQZa1YmEz4jlSE= -cloud.google.com/go/iam v0.4.0/go.mod h1:cbaZxyScUhxl7ZAkNWiALgihfP75wS/fUsVNaa1r3vA= cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= cloud.google.com/go/iam v0.12.0 h1:DRtTY29b75ciH6Ov1PHb4/iat2CLCvrOm40Q0a6DFpE= cloud.google.com/go/iam v0.12.0/go.mod h1:knyHGviacl11zrtZUoDuYpDgLjvr28sLQaG0YB2GYAY= @@ -127,6 +120,7 @@ cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= +cloud.google.com/go/longrunning v0.3.0 h1:NjljC+FYPV3uh5/OwWT6pVU+doBqMg2x/rZlE+CamDs= cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= @@ -182,7 +176,6 @@ cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RX cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= -cloud.google.com/go/storage v1.23.0 h1:wWRIaDURQA8xxHguFCshYepGlrWIrbBnAmc7wfg07qY= cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= cloud.google.com/go/storage v1.29.0 h1:6weCgzRvMg7lzuUurI4697AqIRPU1SvzHhynwpW31jI= @@ -207,17 +200,11 @@ cosmossdk.io/depinject v1.0.0-alpha.3 h1:6evFIgj//Y3w09bqOUOzEpFj5tsxBqdc5CfkO7z cosmossdk.io/depinject v1.0.0-alpha.3/go.mod h1:eRbcdQ7MRpIPEM5YUJh8k97nxHpYbc3sMUnEtt8HPWU= cosmossdk.io/errors v1.0.0-beta.7 h1:gypHW76pTQGVnHKo6QBkb4yFOJjC+sUGRc5Al3Odj1w= cosmossdk.io/errors v1.0.0-beta.7/go.mod h1:mz6FQMJRku4bY7aqS/Gwfcmr/ue91roMEKAmDUDpBfE= -cosmossdk.io/math v1.0.0-beta.3 h1:TbZxSopz2LqjJ7aXYfn7nJSb8vNaBklW6BLpcei1qwM= -cosmossdk.io/math v1.0.0-beta.3/go.mod h1:3LYasri3Zna4XpbrTNdKsWmD5fHHkaNAod/mNT9XdE4= -cosmossdk.io/math v1.0.0-rc.0 h1:ml46ukocrAAoBpYKMidF0R2tQJ1Uxfns0yH8wqgMAFc= -cosmossdk.io/math v1.0.0-rc.0/go.mod h1:Ygz4wBHrgc7g0N+8+MrnTfS9LLn9aaTGa9hKopuym5k= cosmossdk.io/math v1.0.0 h1:ro9w7eKx23om2tZz/VM2Pf+z2WAbGX1yDQQOJ6iGeJw= cosmossdk.io/math v1.0.0/go.mod h1:Ygz4wBHrgc7g0N+8+MrnTfS9LLn9aaTGa9hKopuym5k= cosmossdk.io/tools/rosetta v0.2.1 h1:ddOMatOH+pbxWbrGJKRAawdBkPYLfKXutK9IETnjYxw= cosmossdk.io/tools/rosetta v0.2.1/go.mod h1:Pqdc1FdvkNV3LcNIkYWt2RQY6IP1ge6YWZk8MhhO9Hw= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -filippo.io/edwards25519 v1.0.0-rc.1 h1:m0VOOB23frXZvAOK44usCgLWvtsxIoMCTBGJZlpmGfU= -filippo.io/edwards25519 v1.0.0-rc.1/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek= filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs= @@ -241,6 +228,7 @@ github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3 github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= +github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= @@ -252,9 +240,10 @@ github.com/StirlingMarketingGroup/go-namecase v1.0.0/go.mod h1:ZsoSKcafcAzuBx+sn github.com/VictoriaMetrics/fastcache v1.6.0/go.mod h1:0qHz5QP0GMX4pfmMA/zt5RgfNuXJrTP0zS7DqpHGGTw= 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/Workiva/go-datastructures v1.0.53 h1:J6Y/52yX10Xc5JjXmGtWoSSxs3mZnGSaq37xZZh7Yig= +github.com/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= +github.com/alecthomas/participle/v2 v2.0.0-alpha7 h1:cK4vjj0VSgb3lN1nuKA5F7dw+1s1pWBe5bx7nNCnN+c= 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= @@ -273,16 +262,10 @@ github.com/armon/go-metrics v0.4.1 h1:hR91U9KYmb6bLBYLQjyM+3j+rcd/UhE+G78SFnF8gJ 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/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= -github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI= -github.com/avast/retry-go/v4 v4.0.4 h1:38hLf0DsRXh+hOF6HbTni0+5QGTNdw9zbaMD7KAO830= -github.com/avast/retry-go/v4 v4.0.4/go.mod h1:HqmLvS2VLdStPCGDFjSuZ9pzlTqVRldCI4w2dO4m1Ms= github.com/avast/retry-go/v4 v4.3.3 h1:G56Bp6mU0b5HE1SkaoVjscZjlQb0oy4mezwY/cGH19w= github.com/avast/retry-go/v4 v4.3.3/go.mod h1:rg6XFaiuFYII0Xu3RDbZQkxCofFwruZKW8oEF1jpWiU= github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= -github.com/aws/aws-sdk-go v1.15.78/go.mod h1:E3/ieXAlvM0XWO57iftYVDLLvQ824smPP3ATZkfNZeM= github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.40.45 h1:QN1nsY27ssD/JmW4s83qmSb+uL6DG4GmCDzjmJB4xUI= -github.com/aws/aws-sdk-go v1.40.45/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q= github.com/aws/aws-sdk-go v1.44.122/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= github.com/aws/aws-sdk-go v1.44.203 h1:pcsP805b9acL3wUqa4JR2vg1k2wnItkDYNvfmcy6F+U= github.com/aws/aws-sdk-go v1.44.203/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= @@ -304,22 +287,19 @@ 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/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas= github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4= -github.com/bgentry/speakeasy v0.1.0 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY= 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/bmizerany/pat v0.0.0-20170815010413-6226ea591a40/go.mod h1:8rLXio+WjiTceGBHIoTvn60HIbs7Hm7bcHjyrSqYB9c= github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= -github.com/btcsuite/btcd v0.22.1 h1:CnwP9LM/M9xuRrGSCGeMVs9iv09uMqwsVX7EeIpgV2c= -github.com/btcsuite/btcd v0.22.1/go.mod h1:wqgTSL29+50LRkmOVknEdmt8ZojIzhuWvgu/iptuN7Y= +github.com/btcsuite/btcd v0.22.0-beta h1:LTDpDKUM5EeOFBPM8IXpinEcmZ6FWfNZbE3lfrfdnWo= github.com/btcsuite/btcd/btcec/v2 v2.1.2/go.mod h1:ctjw4H1kknNJmRN4iP1R7bTQ+v3GJkZBd6mui8ZsAZE= github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= +github.com/btcsuite/btcd/btcutil v1.1.2 h1:XLMbX8JQEiwMcYft2EGi8zPUkoa0abKIU6/BJSRsjzQ= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce h1:YtWJF7RHm2pYCvA5t0RPmAaLUhREsKuKd+SLhxFbFeQ= -github.com/burnt-labs/interchaintest/v6 v6.0.0-20230314191219-148474820e92 h1:8PjVIQPom8OhDLy2lh4REpPqil3egD8vDAyF4+s5VTc= -github.com/burnt-labs/interchaintest/v6 v6.0.0-20230314191219-148474820e92/go.mod h1:5aNprRJ5FQSL7KP2uhgukg3yhVvVtKvbSrwM6KWORtY= github.com/burnt-labs/interchaintest/v7 v7.0.0-20230404233655-f37b60cca9b6 h1:ek5Y7blC3YSDZ34GrGxjT7wo4F6PgrdSDYYKf2ILOOw= github.com/burnt-labs/interchaintest/v7 v7.0.0-20230404233655-f37b60cca9b6/go.mod h1:+Tg2jC5C0eI2iOTs24OYs0NgSjU4Bw5XAQ5HVkVMwzc= github.com/c-bata/go-prompt v0.2.2/go.mod h1:VzqtzE2ksDBcdln8G7mk2RX9QyGjH+OVqOCSiVIqS34= @@ -330,28 +310,23 @@ github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInq github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/centrifuge/go-substrate-rpc-client/v4 v4.0.10 h1:HW3XP9G3mXr0gYPfxCAQLD29u+Ys0uIeotv9RWfnhrM= -github.com/centrifuge/go-substrate-rpc-client/v4 v4.0.10/go.mod h1:5g1oM4Zu3BOaLpsKQ+O8PAv2kNuq+kPcA1VzFbsSqxE= github.com/centrifuge/go-substrate-rpc-client/v4 v4.0.12 h1:DCYWIBOalB0mKKfUg2HhtGgIkBbMA1fnlnkZp7fHB18= github.com/centrifuge/go-substrate-rpc-client/v4 v4.0.12/go.mod h1:5g1oM4Zu3BOaLpsKQ+O8PAv2kNuq+kPcA1VzFbsSqxE= github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= -github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= -github.com/chzyer/logex v1.1.10 h1:Swpa1K6QvQznwJRcfTfQJmTE72DqScAa40E+fbHEXEE= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/logex v1.2.1 h1:XHDu3E6q+gdHgsdTPH6ImJMIp436vR6MPtH8gP05QzM= github.com/chzyer/logex v1.2.1/go.mod h1:JLbx6lG2kDbNRFnfkgvh4eRJRPX1QCoOIWomwysCBrQ= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e h1:fY5BOSpyZCqRo5OhCuC+XN+r/bBCmeuuJtjz+bCNIf8= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/readline v1.5.1 h1:upd/6fQk4src78LMRzh5vItIt361/o4uq553V8B5sGI= github.com/chzyer/readline v1.5.1/go.mod h1:Eh+b79XXUwfKfcPLepksvw2tcLE/Ct21YObkaSkeBlk= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1 h1:q763qf9huN11kDQavWsoZXJNW3xEE4JJyHa5Q25/sd8= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/chzyer/test v1.0.0 h1:p3BQDXSxOhOG0P9z6/hGnII4LGiEPOYBhs8asl/fC04= github.com/chzyer/test v1.0.0/go.mod h1:2JlltgoNkt4TW/z9V/IzDdFaMTM2JPIi26O1pF38GC8= 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= @@ -368,10 +343,9 @@ github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cockroachdb/apd/v2 v2.0.2 h1:weh8u7Cneje73dDh+2tEVLUvyBc89iwepWCD8b8034E= -github.com/cockroachdb/apd/v2 v2.0.2/go.mod h1:DDxRlzC2lo3/vSlmSoS7JkqbbrARPuFOGr0B9pvN3Gw= +github.com/cockroachdb/apd/v3 v3.1.0 h1:MK3Ow7LH0W8zkd5GMKA1PvS9qG3bWFI95WaVNfyZJ/w= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= -github.com/coinbase/rosetta-sdk-go v0.7.9 h1:lqllBjMnazTjIqYrOGv8h8jxjg9+hJazIGZr9ZvoCcA= github.com/coinbase/rosetta-sdk-go/types v1.0.0 h1:jpVIwLcPoOeCR6o1tU+Xv7r5bMONNbHU7MuEHboiFuA= github.com/coinbase/rosetta-sdk-go/types v1.0.0/go.mod h1:eq7W2TMRH22GTW0N0beDnN931DW0/WOI1R2sdHNHG4c= github.com/cometbft/cometbft v0.37.0 h1:M005vBaSaugvYYmNZwJOopynQSjwLoDTwflnQ/I/eYk= @@ -382,6 +356,7 @@ github.com/confio/ics23/go v0.9.0 h1:cWs+wdbS2KRPZezoaaj+qBleXgUk5WOQFMP3CQFGTr4 github.com/confio/ics23/go v0.9.0/go.mod h1:4LPZ2NYqnYIVRklaozjNR1FScgDJ2s5Xrp+e/mYVRak= github.com/consensys/bavard v0.1.8-0.20210406032232-f3452dc9b572/go.mod h1:Bpd0/3mZuaj6Sj+PqrmIquiOKy397AKGThQPaGzNXAQ= github.com/consensys/gnark-crypto v0.4.1-0.20210426202927-39ac3d4b3f1f/go.mod h1:815PAHg3wvysy0SyIqanF8gZ0Y1wjk/hrDHD/iT88+Q= +github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= @@ -389,12 +364,8 @@ github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7 github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= 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-proto v1.0.0-alpha8 h1:d3pCRuMYYvGA5bM0ZbbjKn+AoQD4A7dyNG2wzwWalUw= -github.com/cosmos/cosmos-proto v1.0.0-alpha8/go.mod h1:6/p+Bc4O8JKeZqe0VqUGTX31eoYqemTT4C1hLCWsO7I= github.com/cosmos/cosmos-proto v1.0.0-beta.2 h1:X3OKvWgK9Gsejo0F1qs5l8Qn6xJV/AzgIWR2wZ8Nua8= github.com/cosmos/cosmos-proto v1.0.0-beta.2/go.mod h1:+XRCLJ14pr5HFEHIUcn51IKXD1Fy3rkEQqt4WqmN4V0= -github.com/cosmos/cosmos-sdk v0.46.7 h1:dkGy9y2ewgqvawrUOuWb2oz3MdotVduokyreXC4bS0s= -github.com/cosmos/cosmos-sdk v0.46.7/go.mod h1:fqKqz39U5IlEFb4nbQ72951myztsDzFKKDtffYJ63nk= github.com/cosmos/cosmos-sdk v0.47.0 h1:GKYtBpvjwuDEVix1vdnQpq7PuEOnItuEK0vdAL2cZ5g= github.com/cosmos/cosmos-sdk v0.47.0/go.mod h1:FTtZbqiHCZ2vun9WrPq6qLQafNKkAuIhLAxzLjr2TiI= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= @@ -403,18 +374,10 @@ github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4x 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.4.2/go.mod h1:cLxOsn1ljAHSV527CHOtaIP91kK6cCrZETRBrkzItWU= -github.com/cosmos/gogoproto v1.4.6 h1:Ee7z15dWJaGlgM2rWrK8N2IX7PQcuccu8oG68jp5RL4= -github.com/cosmos/gogoproto v1.4.6/go.mod h1:VS/ASYmPgv6zkPKLjR9EB91lwbLHOzaGCirmKKhncfI= github.com/cosmos/gogoproto v1.4.7 h1:RzYKVnsEC7UIkDnhTIkqEB7LnIQbsySvmNEqPCiPevk= github.com/cosmos/gogoproto v1.4.7/go.mod h1:gxGePp9qedovvl/StQL2BIJ6qlIBn1+9YxR0IulGBKA= -github.com/cosmos/gorocksdb v1.2.0 h1:d0l3jJG8M4hBouIZq0mDUHZ+zjOx044J3nGRskwTb4Y= -github.com/cosmos/gorocksdb v1.2.0/go.mod h1:aaKvKItm514hKfNJpUJXnnOWeBnk2GL4+Qw9NHizILw= -github.com/cosmos/iavl v0.19.4 h1:t82sN+Y0WeqxDLJRSpNd8YFX5URIrT+p8n6oJbJ2Dok= -github.com/cosmos/iavl v0.19.4/go.mod h1:X9PKD3J0iFxdmgNLa7b2LYWdsGd90ToV5cAONApkEPw= github.com/cosmos/iavl v0.20.0 h1:fTVznVlepH0KK8NyKq8w+U7c2L6jofa27aFX6YGlm38= github.com/cosmos/iavl v0.20.0/go.mod h1:WO7FyvaZJoH65+HFOsDir7xU9FWk2w9cHXNW1XHcl7A= -github.com/cosmos/ibc-go/v6 v6.1.0 h1:o7oXws2vKkKfOFzJI+oNylRn44PCNt5wzHd/zKQKbvQ= -github.com/cosmos/ibc-go/v6 v6.1.0/go.mod h1:CY3zh2HLfetRiW8LY6kVHMATe90Wj/UOoY8T6cuB0is= github.com/cosmos/ibc-go/v7 v7.0.0 h1:j4kyywlG0hhDmT9FmSaR5iCIka7Pz7kJTxGWY1nlV9Q= github.com/cosmos/ibc-go/v7 v7.0.0/go.mod h1:BFh8nKWjr5zeR2OZfhkzdgDzj1+KjRn3aJLpwapStj8= github.com/cosmos/ics23/go v0.9.1-0.20221207100636-b1abd8678aab h1:I9ialKTQo7248V827Bba4OuKPmk+FPzmTVHsLXaIJWw= @@ -426,11 +389,12 @@ github.com/cosmos/rosetta-sdk-go v0.10.0/go.mod h1:SImAZkb96YbwvoRkzSMQB6noNJXFg github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/creachadair/taskgroup v0.3.2 h1:zlfutDS+5XG40AOxcHDSThxKzns8Tnr9jnr6VqkYlkM= github.com/creachadair/taskgroup v0.4.2 h1:jsBLdAJE42asreGss2xZGZ8fJra7WtwnHWeJFxv2Li8= github.com/creachadair/taskgroup v0.4.2/go.mod h1:qiXUOSrbwAY3u0JPGTzObbE3yf9hcXHDKBZ2ZjpCbgM= 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/common/gherkin/go/v22 v22.0.0 h1:4K8NqptbvdOrjL9DEea6HFjSpbdT9+Q5kgLpmmsHYl0= +github.com/cucumber/common/messages/go/v17 v17.1.1 h1:RNqopvIFyLWnKv0LfATh34SWBhXeoFTJnSrgm9cT/Ts= github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= @@ -448,7 +412,6 @@ github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.0 h1:3GIJYXQDAKpLEFriGFN8SbSffak10UXHGdIcFaMPykY= github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.0/go.mod h1:3s92l0paYkZoIHuj4X93Teg/HB7eGM9x/zokGw+u4mY= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 h1:YLtO71vCjJRCBcrPMtQ9nqBsqpA1m5sE92cU+pd5Mcc= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 h1:HbphB4TFFXpv7MNrT52FGrrgVXF1owhMVTHFZIlnvd4= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0/go.mod h1:DZGJHZMqrU4JJqFAWUS2UO1+lbSKsdiOoYi9Zzey7Fc= @@ -459,8 +422,6 @@ github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f/go.mod h1:xH/i4TFM github.com/dgraph-io/badger/v2 v2.2007.4 h1:TRWBQg8UrlUhaFdco01nO2uXwzKS7zd+HVdwV/GHc4o= github.com/dgraph-io/badger/v2 v2.2007.4/go.mod h1:vSw/ax2qojzbN6eXHIx6KPKtCSHJN/Uz0X0VPruTIhk= github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= -github.com/dgraph-io/ristretto v0.1.0 h1:Jv3CGQHp9OjuMBSne1485aDpUkTKEcUqF+jm/LuerPI= -github.com/dgraph-io/ristretto v0.1.0/go.mod h1:fux0lOrBhrVCJd3lcTHsIJhq1T2rokOu6v9Vcb3Q9ug= github.com/dgraph-io/ristretto v0.1.1 h1:6CWw5tJNgpegArSHpNHJKldNeq03FQCwYvfMVWajOK8= github.com/dgraph-io/ristretto v0.1.1/go.mod h1:S1GPSBCYCIhmVNfcth17y2zZtQT6wzkzgwUve0VDWWA= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= @@ -472,8 +433,8 @@ github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8 github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= github.com/dnaeon/go-vcr v1.1.0/go.mod h1:M7tiix8f0r6mKKJ3Yq/kqU1OYf3MnfmBWVbPx/yU9ko= github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= -github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68= -github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8= +github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/docker v1.4.2-0.20180625184442-8e610b2b55bf/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker v20.10.19+incompatible h1:lzEmjivyNHFHMNAFLXORMBXyGIhw/UP4DvJwvyKYq64= github.com/docker/docker v20.10.19+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= @@ -484,7 +445,6 @@ github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDD github.com/dop251/goja v0.0.0-20211011172007-d99e4b8cbf48/go.mod h1:R9ET47fwRVRPZnOGvHxxhuZcbrMCuiqOz3Rlrh4KSnk= github.com/dop251/goja_nodejs v0.0.0-20210225215109-d91c329300e7/go.mod h1:hn7BA7c8pLvoGndExHudxTDKZ84Pyvv+90pbBjbTz0Y= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= 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= @@ -508,13 +468,10 @@ github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go. github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/ethereum/go-ethereum v1.10.17 h1:XEcumY+qSr1cZQaWsQs5Kck3FHB0V2RiMHPdTBJ+oT8= github.com/ethereum/go-ethereum v1.10.17/go.mod h1:Lt5WzjM07XlXc95YzrhosmR4J9Ahd6X2wyEV2SvGhk0= -github.com/ethereum/go-ethereum v1.10.20 h1:75IW830ClSS40yrQC1ZCMZCt5I+zU16oqId2SiQwdQ4= -github.com/ethereum/go-ethereum v1.10.20/go.mod h1:LWUN82TCHGpxB3En5HVmLLzPD7YSrEUFmFfN1nKkVN0= github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c h1:8ISkoahWXwZR41ois5lSJBSVw4D0OV19Ht/JSTzvSv0= github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A= github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4 h1:7HZCaLC5+BZpmbhCOZJ293Lz68O7PYrF2EzeiFMwCLk= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/felixge/httpsnoop v1.0.1 h1:lvB5Jl89CsZtGIWuTcDM1E/vkVs49/Ml7JJe07l8SPQ= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/felixge/httpsnoop v1.0.2 h1:+nS9g82KMXccJ/wp0zyRW9ZBHFETmMGtkk+2CTTrW4o= github.com/felixge/httpsnoop v1.0.2/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= @@ -530,14 +487,13 @@ github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmV github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= -github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg= -github.com/gdamore/tcell/v2 v2.4.1-0.20210905002822-f057f0a857a1/go.mod h1:Az6Jt+M5idSED2YPGtwnfJV0kXohgdCBPmHGSYc1r04= -github.com/gdamore/tcell/v2 v2.6.0/go.mod h1:be9omFATkdr0D9qewWW3d+MEvl5dha+Etb5y65J2H8Y= github.com/getkin/kin-openapi v0.53.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= github.com/getkin/kin-openapi v0.61.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +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.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= +github.com/gin-gonic/gin v1.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8= github.com/glycerine/go-unsnap-stream v0.0.0-20180323001048-9f0cb55181dd/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE= github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24= github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJpoZOs= @@ -549,15 +505,11 @@ github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2 github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= github.com/go-kit/kit v0.12.0 h1:e4o3o3IsBfAKQh5Qbbiqyfu97Ku7jrO/JbohvztANh4= github.com/go-kit/kit v0.12.0/go.mod h1:lHd+EkCZPIwYItmGDDRdhinkzX2A1sj+M9biaEaizzs= -github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= -github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= 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-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.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA= -github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= 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-ole/go-ole v1.2.1 h1:2lOsA72HgjxAuMlKpFiCbHTvu44PIVkZ5hqm3RSdI/E= @@ -565,9 +517,12 @@ github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dT github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= +github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= +github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD876Lmtgy7VtROAbHHXk8no= github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= +github.com/go-playground/validator/v10 v10.11.1 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJWXmqUsHwfTRRkQ= github.com/go-sourcemap/sourcemap v2.1.3+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= @@ -575,14 +530,17 @@ github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/me github.com/go-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw= github.com/go-stack/stack v1.8.1/go.mod h1:dcoOX6HbPZSZptuspn9bctJ+N/CnF5gGygcUP3XYfe4= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= +github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee h1:s+21KNqlpePfkah2I+gwHF8xmJWRjooY+5248k6m4A0= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= +github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8= github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= +github.com/gobwas/ws v1.0.2 h1:CoAavW/wd/kulfZmSIBt6p24n4j7tHgNVCjsfHVNUbo= github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= +github.com/goccy/go-json v0.9.11 h1:/pAaQDLHEoCq/5FFmSKBswWmK6H0e8g4159Kc/X/nqk= 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/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= -github.com/gogo/gateway v1.1.0 h1:u0SuhL9+Il+UbjM9VIE3ntfRujKbvVpFvNB4HbjeVQ0= -github.com/gogo/gateway v1.1.0/go.mod h1:S7rR8FRQyG3QFESeSv4l2WnsyzlCLG0CzBbUUo/mbic= +github.com/gofrs/uuid v4.3.0+incompatible h1:CaSVZxm5B+7o45rtab4jC2G37WGYX1zQfuU2i6DSvnc= github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/gogo/googleapis v1.4.1-0.20201022092350-68b0159b7869/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= github.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0= @@ -591,8 +549,6 @@ github.com/golang-jwt/jwt/v4 v4.3.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzw github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/geo v0.0.0-20190916061304-5b978397cfec/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/glog v1.0.0 h1:nfP3RFugxnNRyKgeWd4oI1nYvXpxrx8ck8ZrcizshdQ= -github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= github.com/golang/glog v1.1.0 h1:/d3pCKDPWNnvIWe0vVUpNP32qc8U3PDVxySP/y360qE= github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -628,7 +584,6 @@ github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw 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 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= @@ -666,8 +621,8 @@ github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPg 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/martian/v3 v3.2.1 h1:d8MncMlErDFTwQGBK1xhv026j9kqhvw1Qv9IbWT1VLQ= github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= +github.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw= 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= @@ -695,7 +650,6 @@ github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= -github.com/googleapis/enterprise-certificate-proxy v0.2.0 h1:y8Yozv7SZtlU//QXbezB6QkpuE6jMD2/gfzk4AftXjs= github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= github.com/googleapis/enterprise-certificate-proxy v0.2.3 h1:yk9/cqRKtT9wXZSsRH9aurXEpJX+U6FLtpYTdC3R06k= github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= @@ -707,11 +661,9 @@ github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/Oth github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= -github.com/googleapis/gax-go/v2 v2.6.0 h1:SXk3ABtQYDT/OH8jAyvEOQ58mgawq5C4o/4/89qN2ZU= github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= github.com/googleapis/gax-go/v2 v2.7.0 h1:IcsPKeInNvYi7eqSaDjiZqDDKu5rsmunY0Y1YupQSSQ= github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8= -github.com/googleapis/go-type-adapters v1.0.0 h1:9XdMn+d/G57qq1s8dNc5IesGCXHf6V2HZ2JwRxfA2tA= github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= @@ -733,7 +685,6 @@ github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaD github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.8.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= 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= @@ -752,8 +703,6 @@ github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtng 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-getter v1.6.1 h1:NASsgP4q6tL94WH6nJxKWj8As2H/2kop/bB1d8JMyRY= -github.com/hashicorp/go-getter v1.6.1/go.mod h1:IZCrswsZPeWv9IkVnLElzRU/gz/QPi6pZHn4tv6vbwA= github.com/hashicorp/go-getter v1.7.0 h1:bzrYP+qu/gMrL1au7/aDvkoOVGUJpeKBgbqRHACAFDY= github.com/hashicorp/go-getter v1.7.0/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= @@ -767,10 +716,9 @@ github.com/hashicorp/go-safetemp v1.0.0 h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhE github.com/hashicorp/go-safetemp v1.0.0/go.mod h1:oaerMy3BhqiTbVye6QuFhFtIceqFoDHxNAB65b+Rj1I= 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 h1:RS8zrF7PhGwyNPOtxSClXXj9HA8feRnJzgnI1RJCSnM= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-version v1.1.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= @@ -785,13 +733,12 @@ github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO 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/hdevalence/ed25519consensus v0.0.0-20220222234857-c00d1f31bab3 h1:aSVUgRRRtOrZOC1fYmY9gV0e9z/Iu+xNVSASWjsuyGU= -github.com/hdevalence/ed25519consensus v0.0.0-20220222234857-c00d1f31bab3/go.mod h1:5PC6ZNPde8bBqU/ewGZig35+UIZtw9Ytxez8/q5ZyFE= github.com/hdevalence/ed25519consensus v0.1.0 h1:jtBwzzcHuTmFrQN6xQZn6CQEO/V9f7HsjsjeEZ6auqU= github.com/hdevalence/ed25519consensus v0.1.0/go.mod h1:w3BHWjwJbFU29IRHL1Iqkw3sus+7FctEyM4RqDxYNzo= github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= github.com/holiman/uint256 v1.2.0/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/huandu/go-assert v1.1.5 h1:fjemmA7sSfYHJD7CUqs9qTwwfdNAx7/j2/ZlHXzNB3c= github.com/huandu/go-assert v1.1.5/go.mod h1:yOLvuqZwmcHIC5rIzrBhT7D3Q9c3GFnd0JrPVhn/06U= github.com/huandu/skiplist v1.2.0 h1:gox56QD77HzSC0w+Ws3MH3iie755GBJU1OER3h5VsYw= github.com/huandu/skiplist v1.2.0/go.mod h1:7v3iFjLcSAzO4fN5B8dvebvo/qsfumiLiDXMrPiHF9w= @@ -805,7 +752,6 @@ github.com/icza/dyno v0.0.0-20220812133438-f0b6f8a18845/go.mod h1:c1tRKs5Tx7E2+u 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.0.1 h1:U3uMjPSQEBMNp1lFxmllqCPM6P5u/Xq7Pgzkat/bFNc= github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= @@ -821,13 +767,11 @@ github.com/influxdata/promql/v2 v2.12.0/go.mod h1:fxOPu+DY0bqCTCECchSRtWfc+0X19y github.com/influxdata/roaring v0.4.13-0.20180809181101-fc520f41fab6/go.mod h1:bSgUQ7q5ZLSO+bKBGqJiCBGAl+9DxyW63zLTujjUlOE= github.com/influxdata/tdigest v0.0.0-20181121200506-bf2b5ad3c0a9/go.mod h1:Js0mqiSBE6Ffsg94weZZ2c+v/ciT8QRHFOap7EKDrR0= github.com/influxdata/usage-client v0.0.0-20160829180054-6d3895376368/go.mod h1:Wbbw6tYNvwa5dlB6304Sd+82Z3f7PmVZHVKU637d4po= -github.com/ipfs/go-cid v0.0.7 h1:ysQJVJA3fNDF1qigJbsSQOdjhVLsOEoPdh0+R97k3jY= -github.com/ipfs/go-cid v0.0.7/go.mod h1:6Ux9z5e+HpkQdckYoX1PG/6xqKspzlEIR5SDmgqgC/I= github.com/ipfs/go-cid v0.2.0 h1:01JTiihFq9en9Vz0lc0VDWvZe/uBonGpzo4THP0vcQ0= github.com/ipfs/go-cid v0.2.0/go.mod h1:P+HXFDF4CVhaVayiEb4wkAy7zBHxBwsJyt0Y5U6MLro= github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/jedisct1/go-minisign v0.0.0-20190909160543-45766022959e/go.mod h1:G1CVv03EnqU1wYL2dFwXxW2An0az9JTl/ZsqXQeBlkU= -github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jhump/protoreflect v1.12.1-0.20220721211354-060cc04fc18b h1:izTof8BKh/nE1wrKOrloNA5q4odOarjf+Xpe+4qow98= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= @@ -842,7 +786,6 @@ github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/u github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= 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= @@ -860,10 +803,8 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.4.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.11.2/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= -github.com/klauspost/compress v1.15.11 h1:Lcadnb3RKGin4FYM/orgq0qde+nc15E5Cbqg4B9Sx9c= github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= github.com/klauspost/compress v1.16.3 h1:XuJt9zzcnaz6a16/OU53ZjWp/v7/42WcR5t2a0PcNQY= github.com/klauspost/compress v1.16.3/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= @@ -880,7 +821,7 @@ 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 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= 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= @@ -889,30 +830,23 @@ github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+ github.com/labstack/echo/v4 v4.2.1/go.mod h1:AA49e0DZ8kk5jTOOCKNuPR6oTnBS0dYiM4FW1e6jwpg= github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= +github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.10.6 h1:jbk+ZieJ0D7EVGJYpL9QTz7/YW6UHbmdnZWYyK5cdBs= github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw= github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= github.com/libp2p/go-libp2p v0.22.0 h1:2Tce0kHOp5zASFKJbNzRElvh0iZwdtG5uZheNW8chIw= github.com/libp2p/go-libp2p v0.22.0/go.mod h1:UDolmweypBSjQb2f7xutPnwZ/fxioLbMBxSjRksxxU4= -github.com/libp2p/go-libp2p-core v0.15.1 h1:0RY+Mi/ARK9DgG1g9xVQLb8dDaaU8tCePMtGALEfBnM= -github.com/libp2p/go-libp2p-core v0.15.1/go.mod h1:agSaboYM4hzB1cWekgVReqV5M4g5M+2eNNejV+1EEhs= github.com/libp2p/go-libp2p-core v0.20.1 h1:fQz4BJyIFmSZAiTbKV8qoYhEH5Dtv/cVhZbG3Ib/+Cw= github.com/libp2p/go-libp2p-core v0.20.1/go.mod h1:6zR8H7CvQWgYLsbG4on6oLNSGcyKaYFSEYyDt51+bIY= -github.com/libp2p/go-openssl v0.0.7 h1:eCAzdLejcNVBzP/iZM9vqHnQm+XyCEbSSIheIPRGNsw= -github.com/libp2p/go-openssl v0.0.7/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= github.com/libp2p/go-openssl v0.1.0 h1:LBkKEcUv6vtZIQLVTegAil8jbNpJErQ9AnT+bWV+Ooo= github.com/libp2p/go-openssl v0.1.0/go.mod h1:OiOxwPpL3n4xlenjx2h7AwSGaFSC/KZvf6gNdOBQMtc= github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= -github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/magiconair/properties v1.8.6 h1:5ibWZ6iY0NctNGWo87LalDlEZ6R41TqbbDamhfG/Qzo= -github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= @@ -924,14 +858,11 @@ github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaO github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ= -github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-pointer v0.0.1 h1:n+XhsuGeVO6MEAp7xyEukFINEa+Quek5psIR/ylA6o0= @@ -940,32 +871,24 @@ github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzp github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/mattn/go-sqlite3 v1.14.16 h1:yOQRA0RpS5PFz/oikGwBEqvAWhWg5ufRz4ETLjwpU1Y= github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= -github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= github.com/mimoo/StrobeGo v0.0.0-20220103164710-9a04d6ca976b h1:QrHweqAtyJ9EwCaGHBu1fghwxIPiopAHV06JlXrMHjk= github.com/mimoo/StrobeGo v0.0.0-20220103164710-9a04d6ca976b/go.mod h1:xxLb2ip6sSUts3g1irPVHyk/DGslwQsNOo9I7smJfNU= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g= github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= -github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= github.com/minio/sha256-simd v1.0.0 h1:v1ta+49hkWZyvaKwrQB8elexRqm6Y0aMLjCNsrYxo6g= github.com/minio/sha256-simd v1.0.0/go.mod h1:OuYzVNI5vcoYIAmbIvHPl3N3jUzVedXbKy5RFepssQM= 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 h1:fzU/JVNcaqHQEcVFAKeR41fkiLdIPrefOvVG1VZ96U0= 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= @@ -987,41 +910,27 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8= github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= -github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= -github.com/mr-tron/base58 v1.1.3/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae/go.mod h1:qAyveg+e4CE+eKJXWVjKXM4ck2QobLqTDytGJbLLhJg= 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/multiformats/go-base32 v0.0.3 h1:tw5+NhuwaOjJCC5Pp82QuXbrmLzWg7uxlMFp8Nq/kkI= -github.com/multiformats/go-base32 v0.0.3/go.mod h1:pLiuGC8y0QR3Ue4Zug5UzK9LjgbkL8NSQj0zQ5Nz/AA= github.com/multiformats/go-base32 v0.0.4 h1:+qMh4a2f37b4xTNs6mqitDinryCI+tfO2dRVMN9mjSE= github.com/multiformats/go-base32 v0.0.4/go.mod h1:jNLFzjPZtp3aIARHbJRZIaPuspdH0J6q39uUM5pnABM= github.com/multiformats/go-base36 v0.1.0 h1:JR6TyF7JjGd3m6FbLU2cOxhC0Li8z8dLNGQ89tUg4F4= github.com/multiformats/go-base36 v0.1.0/go.mod h1:kFGE83c6s80PklsHO9sRn2NCoffoRdUUOENyW/Vv6sM= -github.com/multiformats/go-multiaddr v0.4.1 h1:Pq37uLx3hsyNlTDir7FZyU8+cFCTqd5y1KiM2IzOutI= -github.com/multiformats/go-multiaddr v0.4.1/go.mod h1:3afI9HfVW8csiF8UZqtpYRiDyew8pRX7qLIGHu9FLuM= github.com/multiformats/go-multiaddr v0.6.0 h1:qMnoOPj2s8xxPU5kZ57Cqdr0hHhARz7mFsPMIiYNqzg= github.com/multiformats/go-multiaddr v0.6.0/go.mod h1:F4IpaKZuPP360tOMn2Tpyu0At8w23aRyVqeK0DbFeGM= -github.com/multiformats/go-multibase v0.0.3 h1:l/B6bJDQjvQ5G52jw4QGSYeOTZoAwIO77RblWplfIqk= -github.com/multiformats/go-multibase v0.0.3/go.mod h1:5+1R4eQrT3PkYZ24C3W2Ue2tPwIdYQD509ZjSb5y9Oc= github.com/multiformats/go-multibase v0.1.1 h1:3ASCDsuLX8+j4kx58qnJ4YFq/JWTJpCyDW27ztsVTOI= github.com/multiformats/go-multibase v0.1.1/go.mod h1:ZEjHE+IsUrgp5mhlEAYjMtZwK1k4haNkcaPg9aoe1a8= -github.com/multiformats/go-multicodec v0.4.1 h1:BSJbf+zpghcZMZrwTYBGwy0CPcVZGWiC72Cp8bBd4R4= -github.com/multiformats/go-multicodec v0.4.1/go.mod h1:1Hj/eHRaVWSXiSNNfcEPcwZleTmdNP81xlxDLnWU9GQ= github.com/multiformats/go-multicodec v0.5.0 h1:EgU6cBe/D7WRwQb1KmnBvU7lrcFGMggZVTPtOW9dDHs= github.com/multiformats/go-multicodec v0.5.0/go.mod h1:DiY2HFaEp5EhEXb/iYzVAunmyX/aSFMxq2KMKfWEues= -github.com/multiformats/go-multihash v0.0.13/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-multihash v0.0.14/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-multihash v0.1.0 h1:CgAgwqk3//SVEw3T+6DqI4mWMyRuDwZtOWcJT0q9+EA= -github.com/multiformats/go-multihash v0.1.0/go.mod h1:RJlXsxt6vHGaia+S8We0ErjhojtKzPP2AH4+kYM7k84= github.com/multiformats/go-multihash v0.2.1 h1:aem8ZT0VA2nCHHk7bPJ1BjUbHNciqZC/d16Vve9l108= github.com/multiformats/go-multihash v0.2.1/go.mod h1:WxoMcYG85AZVQUyRyo9s4wULvW5qrI9vb2Lt6evduFc= -github.com/multiformats/go-varint v0.0.5/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= github.com/multiformats/go-varint v0.0.6 h1:gk85QWKxh3TazbLxED/NlDVv8+q+ReFJk7Y2W/KhfNY= github.com/multiformats/go-varint v0.0.6/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= 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 h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/grpc-proxy v0.0.0-20181017164139-0f1106ef9c76/go.mod h1:x5OoJHDHqxHS801UIuhqGl6QdSAEJvtausosHSdazIo= github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= @@ -1054,13 +963,14 @@ github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1Cpa 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 h1:4ieX6qQjPP/BfC3mpsAtIGGlxTWPeA3Inl/7DtXw1tw= github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= +github.com/onsi/gomega v1.20.0 h1:8W0cWlwFkflGPLltQvLRB7ZVD5HuP6ng320w2IS245Q= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= 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.0-rc2 h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034= github.com/opencontainers/image-spec v1.1.0-rc2/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ= +github.com/opencontainers/runc v1.1.3 h1:vIXrkId+0/J2Ymu2m7VjGvbSlAId9XNRPhn2p4b+d8w= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= @@ -1070,6 +980,7 @@ github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxS github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= +github.com/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA= github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= @@ -1079,14 +990,11 @@ github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtP github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= 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.5 h1:ipoSadvV8oGUjnUbMub59IDPPwfxF694nG/jwbMiyQg= -github.com/pelletier/go-toml/v2 v2.0.5/go.mod h1:OMHamSCAODeSsVrwwvcJOaoN0LIUIaFVNZzmWyNfXas= github.com/pelletier/go-toml/v2 v2.0.6 h1:nrzqCb7j9cDFj2coyLNLaZuJTLjWjlaz6nvTvIwycIU= github.com/pelletier/go-toml/v2 v2.0.6/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= github.com/peterh/liner v1.0.1-0.20180619022028-8c1271fcf47f/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc= github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= -github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 h1:q2e307iGHPdTGp0hoxKjt1H5pDo6utceo3dQVK3I5XQ= github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= github.com/petermattis/goid v0.0.0-20221215004737-a150e88a970d h1:htwtWgtQo8YS6JFWWi2DNgY0RwSGJ1ruMoxY6CUUclk= github.com/petermattis/goid v0.0.0-20221215004737-a150e88a970d/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= @@ -1095,7 +1003,6 @@ github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0 github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pierrec/xxHash v0.1.5 h1:n/jBpwTHiER4xYvK3/CdPVnLDPchj8eTJFFLUb4QHBo= github.com/pierrec/xxHash v0.1.5/go.mod h1:w2waW5Zoa/Wc4Yqe0wgrIYAGKqRMf7czn2HNKXmuL+I= -github.com/pierrre/gotestcover v0.0.0-20160517101806-924dca7d15f0/go.mod h1:4xpMLz7RBWyB+ElzHu8Llua96TRCB3YwX+l5EP1wmHk= 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= @@ -1112,8 +1019,6 @@ github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5Fsn github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= 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.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= -github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= github.com/prometheus/client_golang v1.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw= github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= @@ -1132,10 +1037,6 @@ github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt2 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.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= -github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= -github.com/prometheus/common v0.37.0 h1:ccBbHCgIiT9uSoFY0vX8H3zsNR5eLt17/RQLUvn8pXE= -github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= github.com/prometheus/common v0.40.0 h1:Afz7EVRqGg2Mqqf4JuF9vdvp1pi220m55Pi9T2JnO4Q= github.com/prometheus/common v0.40.0/go.mod h1:L65ZJPSmfn/UBWLQIHV7dBrKFidB/wPlF1y5TlSt9OE= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= @@ -1144,10 +1045,6 @@ github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsT github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.8.0 h1:ODq8ZFEaYeCaZOJlZZdJA2AbQR98dSHSM1KW/You5mo= -github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI= github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= @@ -1156,29 +1053,21 @@ github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Ung github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= 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/regen-network/cosmos-proto v0.3.1 h1:rV7iM4SSFAagvy8RiyhiACbWEGotmqzywPxOvwMdxcg= -github.com/regen-network/cosmos-proto v0.3.1/go.mod h1:jO0sVX6a1B36nmE8C9xBFXpNwWejXC7QqCOnH3O0+YM= +github.com/regen-network/gocuke v0.6.2 h1:pHviZ0kKAq2U2hN2q3smKNxct6hS0mGByFMHGnWA97M= github.com/regen-network/protobuf v1.3.3-alpha.regen.1 h1:OHEc+q5iIAXpqiqFKeLpu5NwTIkVXUs48vFMwzqpqY4= github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI= github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= 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/retailnext/hllpp v1.0.1-0.20180308014038-101a6d2f8b52/go.mod h1:RDpi1RftBQPUCDRw6SmxeaREsAaRKnOclghuzp/WRzc= -github.com/rivo/tview v0.0.0-20220307222120-9994674d60a8/go.mod h1:WIfMkQNY+oq/mWwtsjOYHIZBuwthioY2srOmljJkTnk= -github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= -github.com/rivo/uniseg v0.4.3/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rjeczalik/notify v0.9.1/go.mod h1:rKwnCoCGeuQnwBtTSPL9Dad03Vh2n40ePRrjvIXnJho= -github.com/robertkrimen/godocdown v0.0.0-20130622164427-0bfa04905481/go.mod h1:C9WhFzY47SzYBIvzFqSvHIR6ROgDo4TtdTuRaOMjF/s= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= 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 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k= +github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= -github.com/rs/cors v1.8.2 h1:KCooALfAYGs415Cwu5ABvv9n9509fSiG5SQJn/AQo4U= -github.com/rs/cors v1.8.2/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/rs/cors v1.8.3 h1:O+qNyWn7Z+F9M0ILBHgMVPuB1xTOucVd5gtaYyXBpRo= github.com/rs/cors v1.8.3/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= -github.com/rs/zerolog v1.27.0 h1:1T7qCieN22GVc8S4Q2yuexzBb1EqjbgjSH9RohbMjKs= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= @@ -1209,8 +1098,6 @@ github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasO github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/afero v1.9.2 h1:j49Hj62F0n+DaZ1dDCvhABaPNSGNkt32oRFxI33IEMw= -github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= github.com/spf13/afero v1.9.3 h1:41FoI0fD7OR7mGcKE/aOiLkGreyf8ifIOQmJANWogMk= github.com/spf13/afero v1.9.3/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= @@ -1228,15 +1115,11 @@ github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnIn github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/spf13/viper v1.14.0 h1:Rg7d3Lo706X9tHsJMUjdiwMpHB7W8WnSVOssIY+JElU= -github.com/spf13/viper v1.14.0/go.mod h1:WT//axPky3FdvXHzGw33dNdXXXfFQqmEalje+egj8As= github.com/spf13/viper v1.15.0 h1:js3yy885G8xwJa6iOISGFwd+qlUo5AvyXb7CiihdtiU= github.com/spf13/viper v1.15.0/go.mod h1:fFcTBJxvhhzSJiZy8n+PeW6t8l+KeT/uTARa0jHOQLA= github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q= github.com/strangelove-ventures/go-subkey v1.0.7 h1:cOP/Lajg3uxV/tvspu0m6+0Cu+DJgygkEAbx/s+f35I= github.com/strangelove-ventures/go-subkey v1.0.7/go.mod h1:E34izOIEm+sZ1YmYawYRquqBQWeZBjVB4pF7bMuhc1c= -github.com/strangelove-ventures/interchaintest/v7 v7.0.0-20230326163644-f0ba01f43314 h1:8CwqFPbiUZCz1KTeWB+peF2RMbFva2wL0Z6fjHJyEdc= -github.com/strangelove-ventures/interchaintest/v7 v7.0.0-20230326163644-f0ba01f43314/go.mod h1:+Tg2jC5C0eI2iOTs24OYs0NgSjU4Bw5XAQ5HVkVMwzc= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= @@ -1255,31 +1138,18 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ 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 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/subosito/gotenv v1.4.1 h1:jyEFiXpy21Wm81FBN71l9VoMMV8H8jG+qIK3GCpY6Qs= -github.com/subosito/gotenv v1.4.1/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8= github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= -github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a h1:1ur3QoCqvE5fl+nylMaIr9PVV1w343YRDtsy+Rwu7XI= -github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a/go.mod h1:RRCYJbIwD5jmqPI9XoAFR0OcDxqUctll6zUj/+B4S48= 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/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c h1:g+WoO5jjkqGAzHWCjJB1zZfXPIAaDpzXIEJ0eS6B5Ok= github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c/go.mod h1:ahpPrc7HpcfEWDQRZEmnXMzHY03mLDYMCxeDzy46i+8= -github.com/tendermint/btcd v0.1.1 h1:0VcxPfflS2zZ3RiOAHkBiFUcPvbtRj5O7zHmcJWHV7s= -github.com/tendermint/btcd v0.1.1/go.mod h1:DC6/m53jtQzr/NFmMNEu0rxf18/ktVoVtMrnDD5pN+U= -github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15 h1:hqAk8riJvK4RMWx1aInLzndwxKalgi5rTqgfXxOxbEI= -github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15/go.mod h1:z4YtwM70uOnk8h0pjJYlj3zdYwi9l03By6iAIF5j/Pk= 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/tendermint/tendermint v0.34.24 h1:879MKKJWYYPJEMMKME+DWUTY4V9f/FBpnZDI82ky+4k= -github.com/tendermint/tendermint v0.34.24/go.mod h1:rXVrl4OYzmIa1I91av3iLv2HS0fGSiucyW9J4aMTpKI= -github.com/tendermint/tm-db v0.6.7 h1:fE00Cbl0jayAoqlExN6oyQJ7fR/ZtoVOmvPJ//+shu8= -github.com/tendermint/tm-db v0.6.7/go.mod h1:byQDzFkZV1syXr/ReXS808NxA2xvyuuVgXOJ/088L6I= github.com/tidwall/btree v1.6.0 h1:LDZfKfQIBHGHWSwckhXI0RPSXzlo+KYdjK7FWSqOzzg= github.com/tidwall/btree v1.6.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= @@ -1290,11 +1160,11 @@ github.com/tklauser/numcpus v0.2.2/go.mod h1:x3qojaO3uyYt0i56EW/VUYs7uBvdl2fkfZF github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= +github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= +github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= -github.com/ulikunitz/xz v0.5.8 h1:ERv8V6GKqVi23rgu5cj9pVfVzJbOqAY2Ntl88O6c2nQ= -github.com/ulikunitz/xz v0.5.8/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= @@ -1313,17 +1183,12 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de 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.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/zondax/hid v0.9.1 h1:gQe66rtmyZ8VeGFcOpbuH3r7erYtNEAezCAYu8LdkJo= github.com/zondax/hid v0.9.1/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= -github.com/zondax/ledger-go v0.14.0 h1:dlMC7aO8Wss1CxBq2I96kZ69Nh1ligzbs8UWOtq/AsA= -github.com/zondax/ledger-go v0.14.0/go.mod h1:fZ3Dqg6qcdXWSOJFKMG8GCTnD7slO/RL2feOQv8K320= github.com/zondax/ledger-go v0.14.1 h1:Pip65OOl4iJ84WTpA4BKChvOufMhhbxED3BaihoZN4c= github.com/zondax/ledger-go v0.14.1/go.mod h1:fZ3Dqg6qcdXWSOJFKMG8GCTnD7slO/RL2feOQv8K320= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU= -go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= go.etcd.io/bbolt v1.3.7 h1:j+zJOnnEjF/kyHlDDgGnVL/AIqIJPq8UoB2GSNfkUfQ= go.etcd.io/bbolt v1.3.7/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= @@ -1335,7 +1200,6 @@ 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 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= @@ -1363,7 +1227,6 @@ golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnf golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= 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-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190909091759-094676da4a83/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -1372,13 +1235,10 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.2.0 h1:BRXPfhNivWL5Yq0BGQ39a2sW6t44aODpfxkWjYdzewE= -golang.org/x/crypto v0.2.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.7.0 h1:AvwMYaRytfdeVt3u6mLaxYtErKYjxA2OXjJ1HHq6t3A= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -1395,8 +1255,6 @@ golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u0 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-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= -golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e h1:+WEEuIdZHnUeJJmEUjyYC2gfUMj69yZXw17EnHg/otA= -golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA= golang.org/x/exp v0.0.0-20230310171629-522b1b587ee0 h1:LGJsf5LRplCck6jUCH3dBL2dmycNruWNF5xugkSlfXw= golang.org/x/exp v0.0.0-20230310171629-522b1b587ee0/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= @@ -1426,8 +1284,6 @@ 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.6.0 h1:b9gGHsz9/HhJ3HF5DHQytPpuwocVTChQJK3AvoLRD5I= -golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI= golang.org/x/mod v0.9.0 h1:KENHtAZL2y3NLMYZeHY9DW8HW8V+kQyJsY/V9JlKvCs= golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1480,9 +1336,7 @@ golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLd 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-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210610132358-84b48f89b13b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= @@ -1496,8 +1350,6 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= -golang.org/x/net v0.2.0 h1:sZfSu1wtKLGlWI4ZZayP0ck9Y73K1ynO6gqzTdBVdPU= -golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -1523,7 +1375,6 @@ golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7Lm golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= -golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783 h1:nt+Q6cXKz4MosCSpnbMtqiQ8Oz0pxTef2B4Vca2lvfk= golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= golang.org/x/oauth2 v0.5.0 h1:HuArIo48skDwlrvM3sEdHXElYslAMsf3KwRkkW4MC4s= @@ -1598,7 +1449,6 @@ golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200826173525-f9321e4c35a6/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/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= @@ -1609,7 +1459,6 @@ golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210309074719-68d13333faf2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210316164454-77fc1eacc6aa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1620,7 +1469,6 @@ golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/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-20210514084401-e8d321eab015/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-20210603125802-9665404d3644/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-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1631,11 +1479,9 @@ golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210819135213-f52c844e1c1c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211107104306-e0b2ad06fe42/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211210111614-af8b64212486/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-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1645,7 +1491,6 @@ golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/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-20220517195934-5e4e11fc645e/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-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1658,20 +1503,12 @@ golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.2.0 h1:ljd4t30dBnAvMZaQCevtY0xLLD0A+bRZXbgLMLU1F/A= -golang.org/x/sys v0.2.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 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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-20201210144234-2321bbc49cbf/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.2.0 h1:z85xZCsEl7bi/KwbNADeBYoOP0++7W1ipu+aGnpwzRM= -golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= -golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0 h1:clScbb1cHjoCkyRbWwBEUZ5H/tIFu5TAXIqaZD0Gcjw= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1683,9 +1520,7 @@ 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.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1694,7 +1529,7 @@ golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20220609170525-579cf78fd858 h1:Dpdu/EMxGMFgq0CeYMh4fazTD2vtlZRYE7wyynxJb9U= +golang.org/x/time v0.1.0 h1:xYY+Bajn2a7VBmTM5GikTmnK8ZuX8YgnQCqZpbBNtmA= golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -1758,10 +1593,7 @@ golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.7/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.2.0 h1:G6AHpWxTMGY1KyEYoAQ5WTtIekUUvDNjan3ugu60JvE= -golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA= golang.org/x/tools v0.7.0 h1:W4OVu8VVOaIO0yzWMNdepAulS7YfoS3Zabrm8DOXXU4= golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1828,8 +1660,6 @@ google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= -google.golang.org/api v0.102.0 h1:JxJl2qQ85fRMPNvlZY/enexbxpCjLwGhZUtgfGeQ51I= -google.golang.org/api v0.102.0/go.mod h1:3VFl6/fzoA+qNuS1N1/VfXY4LjoXN/wzeIp7TweWwGo= google.golang.org/api v0.110.0 h1:l+rh0KYUooe9JGbGVx71tbFo4SMbMTXK3I3ia2QSEeU= google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= @@ -1951,14 +1781,11 @@ google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce/go.mod h1:woMGP53B google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqwhZAwq4wsRUaVG555sVgsNmIjRtO7t/JH29U= google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= -google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e h1:S9GbmC1iCgvbLyAokVCwiO6tVIrU9Y7c5oMx1V/ki/Y= -google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44 h1:EfLuoKW5WfkgVdDy7dTK8qSbH37AX5mj/MFh+bGPz14= google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44/go.mod h1:8B0gmkoRebU8ukX6HP+4wrVQUY1+6PkQ44BSyIlflHA= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.19.1/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -1997,7 +1824,6 @@ google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACu google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.50.1 h1:DS/BukOZWp8s6p4Dt/tOaJaTQyPyOoCcrjroHuCeLzY= google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.53.0 h1:LAv2ds7cmFV/XTS3XG1NneeENYrXGmorPxsBbptIjNc= google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= @@ -2017,8 +1843,6 @@ google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.28.2-0.20220831092852-f930b1dc76e8 h1:KR8+MyP7/qOlV+8Af01LtjL04bu7on42eVsxT4EyBQk= -google.golang.org/protobuf v1.28.2-0.20220831092852-f930b1dc76e8/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.29.1 h1:7QBf+IK2gx70Ap/hDsOmam3GE0v9HicjfEdAxE62UoM= google.golang.org/protobuf v1.29.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= @@ -2057,8 +1881,9 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C 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 v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= -gotest.tools/v3 v3.3.0 h1:MfDY1b1/0xN1CyMlQDac0ziEy9zJQd9CXBRRDHw2jJo= +gotest.tools/v3 v3.4.0 h1:ZazjZUfuVeZGLAmlKKuyv3IKP5orXcwtOwDQH6YVr6o= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= 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= @@ -2068,8 +1893,6 @@ honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt 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= -lukechampine.com/blake3 v1.1.6 h1:H3cROdztr7RCfoaTpGZFQsrqvweFLrqS73j7L7cmR5c= -lukechampine.com/blake3 v1.1.6/go.mod h1:tkKEOtDkNtklkXtLNEOGNq5tcV90tJiA1vAA12R78LA= lukechampine.com/blake3 v1.1.7 h1:GgRMhmdsuK8+ii6UZFDL8Nb+VyMwadAgcJyfYHxG6n0= lukechampine.com/blake3 v1.1.7/go.mod h1:tkKEOtDkNtklkXtLNEOGNq5tcV90tJiA1vAA12R78LA= lukechampine.com/uint128 v1.2.0 h1:mBi/5l91vocEN8otkC5bDLhi2KdCticRiwbdB0O+rjI= @@ -2098,7 +1921,6 @@ modernc.org/token v1.0.1/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= modernc.org/z v1.7.0 h1:xkDw/KepgEjeizO2sNco+hqYkU12taxQFqPEmgm1GWE= nhooyr.io/websocket v1.8.6 h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k= nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= -pgregory.net/rapid v0.5.3 h1:163N50IHFqr1phZens4FQOdPgfJscR7a562mjQqeo4M= pgregory.net/rapid v0.5.5 h1:jkgx1TjbQPD/feRoK+S/mXw9e1uj6WilpHrXJowi6oA= pgregory.net/rapid v0.5.5/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= From d4661c5593c5042512166df9e5c843a173aacf3a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 12 May 2023 21:17:20 +0000 Subject: [PATCH 046/501] Bump github.com/cometbft/cometbft-db from 0.7.0 to 0.8.0 Bumps [github.com/cometbft/cometbft-db](https://github.com/cometbft/cometbft-db) from 0.7.0 to 0.8.0. - [Release notes](https://github.com/cometbft/cometbft-db/releases) - [Changelog](https://github.com/cometbft/cometbft-db/blob/main/CHANGELOG.md) - [Commits](https://github.com/cometbft/cometbft-db/compare/v0.7.0...v0.8.0) --- updated-dependencies: - dependency-name: github.com/cometbft/cometbft-db dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- go.mod | 4 ++-- go.sum | 11 ++++------- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/go.mod b/go.mod index 63e54593..265283f7 100644 --- a/go.mod +++ b/go.mod @@ -41,7 +41,7 @@ require ( github.com/CosmWasm/wasmd v0.40.0-rc.0 github.com/armon/go-metrics v0.4.1 github.com/cometbft/cometbft v0.37.0 - github.com/cometbft/cometbft-db v0.7.0 + github.com/cometbft/cometbft-db v0.8.0 github.com/golang/mock v1.6.0 github.com/spf13/viper v1.15.0 gotest.tools/v3 v3.4.0 @@ -123,6 +123,7 @@ require ( github.com/klauspost/compress v1.16.3 // indirect github.com/lib/pq v1.10.7 // indirect github.com/libp2p/go-buffer-pool v0.1.0 // indirect + github.com/linxGnu/grocksdb v1.7.16 // indirect github.com/magiconair/properties v1.8.7 // indirect github.com/manifoldco/promptui v0.9.0 // indirect github.com/mattn/go-isatty v0.0.17 // indirect @@ -148,7 +149,6 @@ require ( github.com/spf13/afero v1.9.3 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/subosito/gotenv v1.4.2 // indirect - github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c // indirect github.com/tendermint/go-amino v0.16.0 // indirect github.com/tidwall/btree v1.6.0 // indirect github.com/ulikunitz/xz v0.5.11 // indirect diff --git a/go.sum b/go.sum index 3f2c861c..e1c31f9e 100644 --- a/go.sum +++ b/go.sum @@ -305,8 +305,8 @@ github.com/coinbase/rosetta-sdk-go/types v1.0.0 h1:jpVIwLcPoOeCR6o1tU+Xv7r5bMONN github.com/coinbase/rosetta-sdk-go/types v1.0.0/go.mod h1:eq7W2TMRH22GTW0N0beDnN931DW0/WOI1R2sdHNHG4c= github.com/cometbft/cometbft v0.37.0 h1:M005vBaSaugvYYmNZwJOopynQSjwLoDTwflnQ/I/eYk= github.com/cometbft/cometbft v0.37.0/go.mod h1:Y2MMMN//O5K4YKd8ze4r9jmk4Y7h0ajqILXbH5JQFVs= -github.com/cometbft/cometbft-db v0.7.0 h1:uBjbrBx4QzU0zOEnU8KxoDl18dMNgDh+zZRUE0ucsbo= -github.com/cometbft/cometbft-db v0.7.0/go.mod h1:yiKJIm2WKrt6x8Cyxtq9YTEcIMPcEe4XPxhgX59Fzf0= +github.com/cometbft/cometbft-db v0.8.0 h1:vUMDaH3ApkX8m0KZvOFFy9b5DZHBAjsnEuo9AKVZpjo= +github.com/cometbft/cometbft-db v0.8.0/go.mod h1:6ASCP4pfhmrCBpfk01/9E1SI29nD3HfVHrY4PG8x5c0= github.com/confio/ics23/go v0.9.0 h1:cWs+wdbS2KRPZezoaaj+qBleXgUk5WOQFMP3CQFGTr4= github.com/confio/ics23/go v0.9.0/go.mod h1:4LPZ2NYqnYIVRklaozjNR1FScgDJ2s5Xrp+e/mYVRak= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= @@ -393,9 +393,6 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.m github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c h1:8ISkoahWXwZR41ois5lSJBSVw4D0OV19Ht/JSTzvSv0= -github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A= -github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4 h1:7HZCaLC5+BZpmbhCOZJ293Lz68O7PYrF2EzeiFMwCLk= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/felixge/httpsnoop v1.0.2 h1:+nS9g82KMXccJ/wp0zyRW9ZBHFETmMGtkk+2CTTrW4o= @@ -705,6 +702,8 @@ github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6 github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= +github.com/linxGnu/grocksdb v1.7.16 h1:Q2co1xrpdkr5Hx3Fp+f+f7fRGhQFQhvi/+226dtLmA8= +github.com/linxGnu/grocksdb v1.7.16/go.mod h1:JkS7pl5qWpGpuVb3bPqTz8nC12X3YtPZT+Xq7+QfQo4= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= @@ -928,8 +927,6 @@ github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8 github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= -github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c h1:g+WoO5jjkqGAzHWCjJB1zZfXPIAaDpzXIEJ0eS6B5Ok= -github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c/go.mod h1:ahpPrc7HpcfEWDQRZEmnXMzHY03mLDYMCxeDzy46i+8= 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/tidwall/btree v1.6.0 h1:LDZfKfQIBHGHWSwckhXI0RPSXzlo+KYdjK7FWSqOzzg= From 91becb21ee5ccad585357ee8948992549be92217 Mon Sep 17 00:00:00 2001 From: peartes Date: Tue, 16 May 2023 01:09:13 +0100 Subject: [PATCH 047/501] WIP: testing mint module base case --- go.work | 6 + go.work.sum | 2014 +++++++++++++++++++++++++++++ integration_tests/dungeon_test.go | 6 + integration_tests/send_test.go | 76 +- 4 files changed, 2094 insertions(+), 8 deletions(-) create mode 100644 go.work create mode 100644 go.work.sum diff --git a/go.work b/go.work new file mode 100644 index 00000000..6a397f52 --- /dev/null +++ b/go.work @@ -0,0 +1,6 @@ +go 1.20 + +use ( + . + ./integration_tests +) diff --git a/go.work.sum b/go.work.sum new file mode 100644 index 00000000..78eed32e --- /dev/null +++ b/go.work.sum @@ -0,0 +1,2014 @@ +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.43.0/go.mod h1:BOSR3VbTLkk6FDC/TcffxP4NF/FFBGA5ku+jvKOP7pg= +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.44.3/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.51.0/go.mod h1:hWtGJ6gnXH+KgDv+V0zFGDvpi07n3z8ZNj3T1RW0Gcw= +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.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= +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 v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= +cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= +cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= +cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= +cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= +cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= +cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= +cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= +cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= +cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= +cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= +cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= +cloud.google.com/go v0.107.0/go.mod h1:wpc2eNrD7hXUTy8EKS10jkxpZBjASrORK7goS+3YX2I= +cloud.google.com/go v0.110.0 h1:Zc8gqp3+a9/Eyph2KDmcGaPtbKRIoqq4YTlL4NMD0Ys= +cloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY= +cloud.google.com/go/accessapproval v1.5.0/go.mod h1:HFy3tuiGvMdcd/u+Cu5b9NkO1pEICJ46IR82PoUdplw= +cloud.google.com/go/accesscontextmanager v1.4.0/go.mod h1:/Kjh7BBu/Gh83sv+K60vN9QE5NJcd80sU33vIe2IFPE= +cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= +cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= +cloud.google.com/go/aiplatform v1.27.0/go.mod h1:Bvxqtl40l0WImSb04d0hXFU7gDOiq9jQmorivIiWcKg= +cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= +cloud.google.com/go/analytics v0.12.0/go.mod h1:gkfj9h6XRf9+TS4bmuhPEShsh3hH8PAZzm/41OOhQd4= +cloud.google.com/go/apigateway v1.4.0/go.mod h1:pHVY9MKGaH9PQ3pJ4YLzoj6U5FUDeDFBllIz7WmzJoc= +cloud.google.com/go/apigeeconnect v1.4.0/go.mod h1:kV4NwOKqjvt2JYR0AoIWo2QGfoRtn/pkS3QlHp0Ni04= +cloud.google.com/go/apigeeregistry v0.4.0/go.mod h1:EUG4PGcsZvxOXAdyEghIdXwAEi/4MEaoqLMLDMIwKXY= +cloud.google.com/go/apikeys v0.4.0/go.mod h1:XATS/yqZbaBK0HOssf+ALHp8jAlNHUgyfprvNcBIszU= +cloud.google.com/go/appengine v1.5.0/go.mod h1:TfasSozdkFI0zeoxW3PTBLiNqRmzraodCWatWI9Dmak= +cloud.google.com/go/area120 v0.5.0/go.mod h1:DE/n4mp+iqVyvxHN41Vf1CR602GiHQjFPusMFW6bGR4= +cloud.google.com/go/area120 v0.6.0/go.mod h1:39yFJqWVgm0UZqWTOdqkLhjoC7uFfgXRC8g/ZegeAh0= +cloud.google.com/go/artifactregistry v1.6.0/go.mod h1:IYt0oBPSAGYj/kprzsBjZ/4LnG/zOcHyFHjWPCi6SAQ= +cloud.google.com/go/artifactregistry v1.7.0/go.mod h1:mqTOFOnGZx8EtSqK/ZWcsm/4U8B77rbcLP6ruDU2Ixk= +cloud.google.com/go/artifactregistry v1.9.0/go.mod h1:2K2RqvA2CYvAeARHRkLDhMDJ3OXy26h3XW+3/Jh2uYc= +cloud.google.com/go/asset v1.5.0/go.mod h1:5mfs8UvcM5wHhqtSv8J1CtxxaQq3AdBxxQi2jGW/K4o= +cloud.google.com/go/asset v1.7.0/go.mod h1:YbENsRK4+xTiL+Ofoj5Ckf+O17kJtgp3Y3nn4uzZz5s= +cloud.google.com/go/asset v1.8.0/go.mod h1:mUNGKhiqIdbr8X7KNayoYvyc4HbbFO9URsjbytpUaW0= +cloud.google.com/go/asset v1.10.0/go.mod h1:pLz7uokL80qKhzKr4xXGvBQXnzHn5evJAEAtZiIb0wY= +cloud.google.com/go/assuredworkloads v1.5.0/go.mod h1:n8HOZ6pff6re5KYfBXcFvSViQjDwxFkAkmUFffJRbbY= +cloud.google.com/go/assuredworkloads v1.6.0/go.mod h1:yo2YOk37Yc89Rsd5QMVECvjaMKymF9OP+QXWlKXUkXw= +cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVoYoxeLBoj4XkKYscNI= +cloud.google.com/go/assuredworkloads v1.9.0/go.mod h1:kFuI1P78bplYtT77Tb1hi0FMxM0vVpRC7VVoJC3ZoT0= +cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= +cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8= +cloud.google.com/go/automl v1.8.0/go.mod h1:xWx7G/aPEe/NP+qzYXktoBSDfjO+vnKMGgsApGJJquM= +cloud.google.com/go/baremetalsolution v0.4.0/go.mod h1:BymplhAadOO/eBa7KewQ0Ppg4A4Wplbn+PsFKRLo0uI= +cloud.google.com/go/batch v0.4.0/go.mod h1:WZkHnP43R/QCGQsZ+0JyG4i79ranE2u8xvjq/9+STPE= +cloud.google.com/go/beyondcorp v0.3.0/go.mod h1:E5U5lcrcXMsCuoDNyGrpyTm/hn7ne941Jz2vmksAxW8= +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/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA= +cloud.google.com/go/bigquery v1.44.0/go.mod h1:0Y33VqXTEsbamHJvJHdFmtqHvMIY28aK1+dFsvaChGc= +cloud.google.com/go/bigtable v1.2.0/go.mod h1:JcVAOl45lrTmQfLj7T6TxyMzIN/3FGGcFm+2xVAli2o= +cloud.google.com/go/billing v1.4.0/go.mod h1:g9IdKBEFlItS8bTtlrZdVLWSSdSyFUZKXNS02zKMOZY= +cloud.google.com/go/billing v1.5.0/go.mod h1:mztb1tBc3QekhjSgmpf/CV4LzWXLzCArwpLmP2Gm88s= +cloud.google.com/go/billing v1.7.0/go.mod h1:q457N3Hbj9lYwwRbnlD7vUpyjq6u5U1RAOArInEiD5Y= +cloud.google.com/go/binaryauthorization v1.1.0/go.mod h1:xwnoWu3Y84jbuHa0zd526MJYmtnVXn0syOjaJgy4+dM= +cloud.google.com/go/binaryauthorization v1.2.0/go.mod h1:86WKkJHtRcv5ViNABtYMhhNWRrD1Vpi//uKEy7aYEfI= +cloud.google.com/go/binaryauthorization v1.4.0/go.mod h1:tsSPQrBd77VLplV70GUhBf/Zm3FsKmgSqgm4UmiDItk= +cloud.google.com/go/certificatemanager v1.4.0/go.mod h1:vowpercVFyqs8ABSmrdV+GiFf2H/ch3KyudYQEMM590= +cloud.google.com/go/channel v1.9.0/go.mod h1:jcu05W0my9Vx4mt3/rEHpfxc9eKi9XwsdDL8yBMbKUk= +cloud.google.com/go/cloudbuild v1.4.0/go.mod h1:5Qwa40LHiOXmz3386FrjrYM93rM/hdRr7b53sySrTqA= +cloud.google.com/go/clouddms v1.4.0/go.mod h1:Eh7sUGCC+aKry14O1NRljhjyrr0NFC0G2cjwX0cByRk= +cloud.google.com/go/cloudtasks v1.5.0/go.mod h1:fD92REy1x5woxkKEkLdvavGnPJGEn8Uic9nWuLzqCpY= +cloud.google.com/go/cloudtasks v1.6.0/go.mod h1:C6Io+sxuke9/KNRkbQpihnW93SWDU3uXt92nu85HkYI= +cloud.google.com/go/cloudtasks v1.8.0/go.mod h1:gQXUIwCSOI4yPVK7DgTVFiiP0ZW/eQkydWzwVMdHxrI= +cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= +cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= +cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= +cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s= +cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= +cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= +cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= +cloud.google.com/go/compute v1.14.0/go.mod h1:YfLtxrj9sU4Yxv+sXzZkyPjEyPBZfXHUvjxega5vAdo= +cloud.google.com/go/compute v1.15.1/go.mod h1:bjjoF/NtFUrkD/urWfdHaKuOPDR5nWIs63rR+SXhcpA= +cloud.google.com/go/compute v1.18.0 h1:FEigFqoDbys2cvFkZ9Fjq4gnHBP55anJ0yQyau2f9oY= +cloud.google.com/go/compute v1.18.0/go.mod h1:1X7yHxec2Ga+Ss6jPyjxRxpu2uu7PLgsOVXvgU0yacs= +cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= +cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= +cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= +cloud.google.com/go/contactcenterinsights v1.4.0/go.mod h1:L2YzkGbPsv+vMQMCADxJoT9YiTTnSEd6fEvCeHTYVck= +cloud.google.com/go/container v1.7.0/go.mod h1:Dp5AHtmothHGX3DwwIHPgq45Y8KmNsgN3amoYfxVkLo= +cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= +cloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4= +cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0= +cloud.google.com/go/datacatalog v1.5.0/go.mod h1:M7GPLNQeLfWqeIm3iuiruhPzkt65+Bx8dAKvScX8jvs= +cloud.google.com/go/datacatalog v1.6.0/go.mod h1:+aEyF8JKg+uXcIdAmmaMUmZ3q1b/lKLtXCmXdnc0lbc= +cloud.google.com/go/datacatalog v1.8.0/go.mod h1:KYuoVOv9BM8EYz/4eMFxrr4DUKhGIOXxZoKYF5wdISM= +cloud.google.com/go/dataflow v0.6.0/go.mod h1:9QwV89cGoxjjSR9/r7eFDqqjtvbKxAK2BaYU6PVk9UM= +cloud.google.com/go/dataflow v0.7.0/go.mod h1:PX526vb4ijFMesO1o202EaUmouZKBpjHsTlCtB4parQ= +cloud.google.com/go/dataform v0.3.0/go.mod h1:cj8uNliRlHpa6L3yVhDOBrUXH+BPAO1+KFMQQNSThKo= +cloud.google.com/go/dataform v0.4.0/go.mod h1:fwV6Y4Ty2yIFL89huYlEkwUPtS7YZinZbzzj5S9FzCE= +cloud.google.com/go/dataform v0.5.0/go.mod h1:GFUYRe8IBa2hcomWplodVmUx/iTL0FrsauObOM3Ipr0= +cloud.google.com/go/datafusion v1.5.0/go.mod h1:Kz+l1FGHB0J+4XF2fud96WMmRiq/wj8N9u007vyXZ2w= +cloud.google.com/go/datalabeling v0.5.0/go.mod h1:TGcJ0G2NzcsXSE/97yWjIZO0bXj0KbVlINXMG9ud42I= +cloud.google.com/go/datalabeling v0.6.0/go.mod h1:WqdISuk/+WIGeMkpw/1q7bK/tFEZxsrFJOJdY2bXvTQ= +cloud.google.com/go/dataplex v1.4.0/go.mod h1:X51GfLXEMVJ6UN47ESVqvlsRplbLhcsAt0kZCCKsU0A= +cloud.google.com/go/dataproc v1.8.0/go.mod h1:5OW+zNAH0pMpw14JVrPONsxMQYMBqJuzORhIBfBn9uI= +cloud.google.com/go/dataqna v0.5.0/go.mod h1:90Hyk596ft3zUQ8NkFfvICSIfHFh1Bc7C4cK3vbhkeo= +cloud.google.com/go/dataqna v0.6.0/go.mod h1:1lqNpM7rqNLVgWBJyk5NF6Uen2PHym0jtVJonplVsDA= +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/datastore v1.10.0/go.mod h1:PC5UzAmDEkAmkfaknstTYbNpgE49HAgW2J1gcgUfmdM= +cloud.google.com/go/datastream v1.2.0/go.mod h1:i/uTP8/fZwgATHS/XFu0TcNUhuA0twZxxQ3EyCUQMwo= +cloud.google.com/go/datastream v1.3.0/go.mod h1:cqlOX8xlyYF/uxhiKn6Hbv6WjwPPuI9W2M9SAXwaLLQ= +cloud.google.com/go/datastream v1.5.0/go.mod h1:6TZMMNPwjUqZHBKPQ1wwXpb0d5VDVPl2/XoS5yi88q4= +cloud.google.com/go/deploy v1.5.0/go.mod h1:ffgdD0B89tToyW/U/D2eL0jN2+IEV/3EMuXHA0l4r+s= +cloud.google.com/go/dialogflow v1.15.0/go.mod h1:HbHDWs33WOGJgn6rfzBW1Kv807BE3O1+xGbn59zZWI4= +cloud.google.com/go/dialogflow v1.16.1/go.mod h1:po6LlzGfK+smoSmTBnbkIZY2w8ffjz/RcGSS+sh1el0= +cloud.google.com/go/dialogflow v1.17.0/go.mod h1:YNP09C/kXA1aZdBgC/VtXX74G/TKn7XVCcVumTflA+8= +cloud.google.com/go/dialogflow v1.29.0/go.mod h1:b+2bzMe+k1s9V+F2jbJwpHPzrnIyHihAdRFMtn2WXuM= +cloud.google.com/go/dlp v1.7.0/go.mod h1:68ak9vCiMBjbasxeVD17hVPxDEck+ExiHavX8kiHG+Q= +cloud.google.com/go/documentai v1.7.0/go.mod h1:lJvftZB5NRiFSX4moiye1SMxHx0Bc3x1+p9e/RfXYiU= +cloud.google.com/go/documentai v1.8.0/go.mod h1:xGHNEB7CtsnySCNrCFdCyyMz44RhFEEX2Q7UD0c5IhU= +cloud.google.com/go/documentai v1.10.0/go.mod h1:vod47hKQIPeCfN2QS/jULIvQTugbmdc0ZvxxfQY1bg4= +cloud.google.com/go/domains v0.6.0/go.mod h1:T9Rz3GasrpYk6mEGHh4rymIhjlnIuB4ofT1wTxDeT4Y= +cloud.google.com/go/domains v0.7.0/go.mod h1:PtZeqS1xjnXuRPKE/88Iru/LdfoRyEHYA9nFQf4UKpg= +cloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk= +cloud.google.com/go/edgecontainer v0.2.0/go.mod h1:RTmLijy+lGpQ7BXuTDa4C4ssxyXT34NIuHIgKuP4s5w= +cloud.google.com/go/errorreporting v0.3.0/go.mod h1:xsP2yaAp+OAW4OIm60An2bbLpqIhKXdWR/tawvl7QzU= +cloud.google.com/go/essentialcontacts v1.4.0/go.mod h1:8tRldvHYsmnBCHdFpvU+GL75oWiBKl80BiqlFh9tp+8= +cloud.google.com/go/eventarc v1.8.0/go.mod h1:imbzxkyAU4ubfsaKYdQg04WS1NvncblHEup4kvF+4gw= +cloud.google.com/go/filestore v1.4.0/go.mod h1:PaG5oDfo9r224f8OYXURtAsY+Fbyq/bLYoINEK8XQAI= +cloud.google.com/go/firestore v1.9.0/go.mod h1:HMkjKHNTtRyZNiMzu7YAsLr9K3X2udY2AMwDaMEQiiE= +cloud.google.com/go/functions v1.6.0/go.mod h1:3H1UA3qiIPRWD7PeZKLvHZ9SaQhR26XIJcC0A5GbvAk= +cloud.google.com/go/functions v1.7.0/go.mod h1:+d+QBcWM+RsrgZfV9xo6KfA1GlzJfxcfZcRPEhDDfzg= +cloud.google.com/go/functions v1.9.0/go.mod h1:Y+Dz8yGguzO3PpIjhLTbnqV1CWmgQ5UwtlpzoyquQ08= +cloud.google.com/go/gaming v1.5.0/go.mod h1:ol7rGcxP/qHTRQE/RO4bxkXq+Fix0j6D4LFPzYTIrDM= +cloud.google.com/go/gaming v1.6.0/go.mod h1:YMU1GEvA39Qt3zWGyAVA9bpYz/yAhTvaQ1t2sK4KPUA= +cloud.google.com/go/gaming v1.8.0/go.mod h1:xAqjS8b7jAVW0KFYeRUxngo9My3f33kFmua++Pi+ggM= +cloud.google.com/go/gkebackup v0.3.0/go.mod h1:n/E671i1aOQvUxT541aTkCwExO/bTer2HDlj4TsBRAo= +cloud.google.com/go/gkeconnect v0.5.0/go.mod h1:c5lsNAg5EwAy7fkqX/+goqFsU1Da/jQFqArp+wGNr/o= +cloud.google.com/go/gkeconnect v0.6.0/go.mod h1:Mln67KyU/sHJEBY8kFZ0xTeyPtzbq9StAVvEULYK16A= +cloud.google.com/go/gkehub v0.9.0/go.mod h1:WYHN6WG8w9bXU0hqNxt8rm5uxnk8IH+lPY9J2TV7BK0= +cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y977wO+hBH0= +cloud.google.com/go/gkemulticloud v0.4.0/go.mod h1:E9gxVBnseLWCk24ch+P9+B2CoDFJZTyIgLKSalC7tuI= +cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= +cloud.google.com/go/gsuiteaddons v1.4.0/go.mod h1:rZK5I8hht7u7HxFQcFei0+AtfS9uSushomRlg+3ua1o= +cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= +cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= +cloud.google.com/go/iam v0.8.0/go.mod h1:lga0/y3iH6CX7sYqypWJ33hf7kkfXJag67naqGESjkE= +cloud.google.com/go/iam v0.11.0/go.mod h1:9PiLDanza5D+oWFZiH1uG+RnRCfEGKoyl6yo4cgWZGY= +cloud.google.com/go/iam v0.12.0 h1:DRtTY29b75ciH6Ov1PHb4/iat2CLCvrOm40Q0a6DFpE= +cloud.google.com/go/iam v0.12.0/go.mod h1:knyHGviacl11zrtZUoDuYpDgLjvr28sLQaG0YB2GYAY= +cloud.google.com/go/iap v1.5.0/go.mod h1:UH/CGgKd4KyohZL5Pt0jSKE4m3FR51qg6FKQ/z/Ix9A= +cloud.google.com/go/ids v1.2.0/go.mod h1:5WXvp4n25S0rA/mQWAg1YEEBBq6/s+7ml1RDCW1IrcY= +cloud.google.com/go/iot v1.4.0/go.mod h1:dIDxPOn0UvNDUMD8Ger7FIaTuvMkj+aGk94RPP0iV+g= +cloud.google.com/go/kms v1.6.0/go.mod h1:Jjy850yySiasBUDi6KFUwUv2n1+o7QZFyuUJg6OgjA0= +cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= +cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= +cloud.google.com/go/language v1.8.0/go.mod h1:qYPVHf7SPoNNiCL2Dr0FfEFNil1qi3pQEyygwpgVKB8= +cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= +cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= +cloud.google.com/go/logging v1.6.1/go.mod h1:5ZO0mHHbvm8gEmeEUHrmDlTDSu5imF6MUP9OfilNXBw= +cloud.google.com/go/longrunning v0.3.0/go.mod h1:qth9Y41RRSUE69rDcOn6DdK3HfQfsUI0YSmW3iIlLJc= +cloud.google.com/go/managedidentities v1.4.0/go.mod h1:NWSBYbEMgqmbZsLIyKvxrYbtqOsxY1ZrGM+9RgDqInM= +cloud.google.com/go/maps v0.1.0/go.mod h1:BQM97WGyfw9FWEmQMpZ5T6cpovXXSd1cGmFma94eubI= +cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= +cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= +cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= +cloud.google.com/go/memcache v1.5.0/go.mod h1:dk3fCK7dVo0cUU2c36jKb4VqKPS22BTkf81Xq617aWM= +cloud.google.com/go/memcache v1.7.0/go.mod h1:ywMKfjWhNtkQTxrWxCkCFkoPjLHPW6A7WOTVI8xy3LY= +cloud.google.com/go/metastore v1.5.0/go.mod h1:2ZNrDcQwghfdtCwJ33nM0+GrBGlVuh8rakL3vdPY3XY= +cloud.google.com/go/metastore v1.6.0/go.mod h1:6cyQTls8CWXzk45G55x57DVQ9gWg7RiH65+YgPsNh9s= +cloud.google.com/go/metastore v1.8.0/go.mod h1:zHiMc4ZUpBiM7twCIFQmJ9JMEkDSyZS9U12uf7wHqSI= +cloud.google.com/go/monitoring v1.8.0/go.mod h1:E7PtoMJ1kQXWxPjB6mv2fhC5/15jInuulFdYYtlcvT4= +cloud.google.com/go/networkconnectivity v1.4.0/go.mod h1:nOl7YL8odKyAOtzNX73/M5/mGZgqqMeryi6UPZTk/rA= +cloud.google.com/go/networkconnectivity v1.5.0/go.mod h1:3GzqJx7uhtlM3kln0+x5wyFvuVH1pIBJjhCpjzSt75o= +cloud.google.com/go/networkconnectivity v1.7.0/go.mod h1:RMuSbkdbPwNMQjB5HBWD5MpTBnNm39iAVpC3TmsExt8= +cloud.google.com/go/networkmanagement v1.5.0/go.mod h1:ZnOeZ/evzUdUsnvRt792H0uYEnHQEMaz+REhhzJRcf4= +cloud.google.com/go/networksecurity v0.5.0/go.mod h1:xS6fOCoqpVC5zx15Z/MqkfDwH4+m/61A3ODiDV1xmiQ= +cloud.google.com/go/networksecurity v0.6.0/go.mod h1:Q5fjhTr9WMI5mbpRYEbiexTzROf7ZbDzvzCrNl14nyU= +cloud.google.com/go/notebooks v1.2.0/go.mod h1:9+wtppMfVPUeJ8fIWPOq1UnATHISkGXGqTkxeieQ6UY= +cloud.google.com/go/notebooks v1.3.0/go.mod h1:bFR5lj07DtCPC7YAAJ//vHskFBxA5JzYlH68kXVdk34= +cloud.google.com/go/notebooks v1.5.0/go.mod h1:q8mwhnP9aR8Hpfnrc5iN5IBhrXUy8S2vuYs+kBJ/gu0= +cloud.google.com/go/optimization v1.2.0/go.mod h1:Lr7SOHdRDENsh+WXVmQhQTrzdu9ybg0NecjHidBq6xs= +cloud.google.com/go/orchestration v1.4.0/go.mod h1:6W5NLFWs2TlniBphAViZEVhrXRSMgUGDfW7vrWKvsBk= +cloud.google.com/go/orgpolicy v1.5.0/go.mod h1:hZEc5q3wzwXJaKrsx5+Ewg0u1LxJ51nNFlext7Tanwc= +cloud.google.com/go/osconfig v1.7.0/go.mod h1:oVHeCeZELfJP7XLxcBGTMBvRO+1nQ5tFG9VQTmYS2Fs= +cloud.google.com/go/osconfig v1.8.0/go.mod h1:EQqZLu5w5XA7eKizepumcvWx+m8mJUhEwiPqWiZeEdg= +cloud.google.com/go/osconfig v1.10.0/go.mod h1:uMhCzqC5I8zfD9zDEAfvgVhDS8oIjySWh+l4WK6GnWw= +cloud.google.com/go/oslogin v1.4.0/go.mod h1:YdgMXWRaElXz/lDk1Na6Fh5orF7gvmJ0FGLIs9LId4E= +cloud.google.com/go/oslogin v1.5.0/go.mod h1:D260Qj11W2qx/HVF29zBg+0fd6YCSjSqLUkY/qEenQU= +cloud.google.com/go/oslogin v1.7.0/go.mod h1:e04SN0xO1UNJ1M5GP0vzVBFicIe4O53FOfcixIqTyXo= +cloud.google.com/go/phishingprotection v0.5.0/go.mod h1:Y3HZknsK9bc9dMi+oE8Bim0lczMU6hrX0UpADuMefr0= +cloud.google.com/go/phishingprotection v0.6.0/go.mod h1:9Y3LBLgy0kDTcYET8ZH3bq/7qni15yVUoAxiFxnlSUA= +cloud.google.com/go/policytroubleshooter v1.4.0/go.mod h1:DZT4BcRw3QoO8ota9xw/LKtPa8lKeCByYeKTIf/vxdE= +cloud.google.com/go/privatecatalog v0.5.0/go.mod h1:XgosMUvvPyxDjAVNDYxJ7wBW8//hLDDYmnsNcMGq1K0= +cloud.google.com/go/privatecatalog v0.6.0/go.mod h1:i/fbkZR0hLN29eEWiiwue8Pb+GforiEIBnV9yrRUOKI= +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/pubsub v1.27.1/go.mod h1:hQN39ymbV9geqBnfQq6Xf63yNhUAhv9CZhzp5O6qsW0= +cloud.google.com/go/pubsublite v1.5.0/go.mod h1:xapqNQ1CuLfGi23Yda/9l4bBCKz/wC3KIJ5gKcxveZg= +cloud.google.com/go/recaptchaenterprise v1.3.1/go.mod h1:OdD+q+y4XGeAlxRaMn1Y7/GveP6zmq76byL6tjPE7d4= +cloud.google.com/go/recaptchaenterprise/v2 v2.1.0/go.mod h1:w9yVqajwroDNTfGuhmOjPDN//rZGySaf6PtFVcSCa7o= +cloud.google.com/go/recaptchaenterprise/v2 v2.2.0/go.mod h1:/Zu5jisWGeERrd5HnlS3EUGb/D335f9k51B/FVil0jk= +cloud.google.com/go/recaptchaenterprise/v2 v2.3.0/go.mod h1:O9LwGCjrhGHBQET5CA7dd5NwwNQUErSgEDit1DLNTdo= +cloud.google.com/go/recaptchaenterprise/v2 v2.5.0/go.mod h1:O8LzcHXN3rz0j+LBC91jrwI3R+1ZSZEWrfL7XHgNo9U= +cloud.google.com/go/recommendationengine v0.5.0/go.mod h1:E5756pJcVFeVgaQv3WNpImkFP8a+RptV6dDLGPILjvg= +cloud.google.com/go/recommendationengine v0.6.0/go.mod h1:08mq2umu9oIqc7tDy8sx+MNJdLG0fUi3vaSVbztHgJ4= +cloud.google.com/go/recommender v1.5.0/go.mod h1:jdoeiBIVrJe9gQjwd759ecLJbxCDED4A6p+mqoqDvTg= +cloud.google.com/go/recommender v1.6.0/go.mod h1:+yETpm25mcoiECKh9DEScGzIRyDKpZ0cEhWGo+8bo+c= +cloud.google.com/go/recommender v1.8.0/go.mod h1:PkjXrTT05BFKwxaUxQmtIlrtj0kph108r02ZZQ5FE70= +cloud.google.com/go/redis v1.7.0/go.mod h1:V3x5Jq1jzUcg+UNsRvdmsfuFnit1cfe3Z/PGyq/lm4Y= +cloud.google.com/go/redis v1.8.0/go.mod h1:Fm2szCDavWzBk2cDKxrkmWBqoCiL1+Ctwq7EyqBCA/A= +cloud.google.com/go/redis v1.10.0/go.mod h1:ThJf3mMBQtW18JzGgh41/Wld6vnDDc/F/F35UolRZPM= +cloud.google.com/go/resourcemanager v1.4.0/go.mod h1:MwxuzkumyTX7/a3n37gmsT3py7LIXwrShilPh3P1tR0= +cloud.google.com/go/resourcesettings v1.4.0/go.mod h1:ldiH9IJpcrlC3VSuCGvjR5of/ezRrOxFtpJoJo5SmXg= +cloud.google.com/go/retail v1.8.0/go.mod h1:QblKS8waDmNUhghY2TI9O3JLlFk8jybHeV4BF19FrE4= +cloud.google.com/go/retail v1.9.0/go.mod h1:g6jb6mKuCS1QKnH/dpu7isX253absFl6iE92nHwlBUY= +cloud.google.com/go/retail v1.11.0/go.mod h1:MBLk1NaWPmh6iVFSz9MeKG/Psyd7TAgm6y/9L2B4x9Y= +cloud.google.com/go/run v0.3.0/go.mod h1:TuyY1+taHxTjrD0ZFk2iAR+xyOXEA0ztb7U3UNA0zBo= +cloud.google.com/go/scheduler v1.4.0/go.mod h1:drcJBmxF3aqZJRhmkHQ9b3uSSpQoltBPGPxGAWROx6s= +cloud.google.com/go/scheduler v1.5.0/go.mod h1:ri073ym49NW3AfT6DZi21vLZrG07GXr5p3H1KxN5QlI= +cloud.google.com/go/scheduler v1.7.0/go.mod h1:jyCiBqWW956uBjjPMMuX09n3x37mtyPJegEWKxRsn44= +cloud.google.com/go/secretmanager v1.6.0/go.mod h1:awVa/OXF6IiyaU1wQ34inzQNc4ISIDIrId8qE5QGgKA= +cloud.google.com/go/secretmanager v1.9.0/go.mod h1:b71qH2l1yHmWQHt9LC80akm86mX8AL6X1MA01dW8ht4= +cloud.google.com/go/security v1.5.0/go.mod h1:lgxGdyOKKjHL4YG3/YwIL2zLqMFCKs0UbQwgyZmfJl4= +cloud.google.com/go/security v1.7.0/go.mod h1:mZklORHl6Bg7CNnnjLH//0UlAlaXqiG7Lb9PsPXLfD0= +cloud.google.com/go/security v1.8.0/go.mod h1:hAQOwgmaHhztFhiQ41CjDODdWP0+AE1B3sX4OFlq+GU= +cloud.google.com/go/security v1.10.0/go.mod h1:QtOMZByJVlibUT2h9afNDWRZ1G96gVywH8T5GUSb9IA= +cloud.google.com/go/securitycenter v1.13.0/go.mod h1:cv5qNAqjY84FCN6Y9z28WlkKXyWsgLO832YiWwkCWcU= +cloud.google.com/go/securitycenter v1.14.0/go.mod h1:gZLAhtyKv85n52XYWt6RmeBdydyxfPeTrpToDPw4Auc= +cloud.google.com/go/securitycenter v1.16.0/go.mod h1:Q9GMaLQFUD+5ZTabrbujNWLtSLZIZF7SAR0wWECrjdk= +cloud.google.com/go/servicecontrol v1.5.0/go.mod h1:qM0CnXHhyqKVuiZnGKrIurvVImCs8gmqWsDoqe9sU1s= +cloud.google.com/go/servicedirectory v1.4.0/go.mod h1:gH1MUaZCgtP7qQiI+F+A+OpeKF/HQWgtAddhTbhL2bs= +cloud.google.com/go/servicedirectory v1.5.0/go.mod h1:QMKFL0NUySbpZJ1UZs3oFAmdvVxhhxB6eJ/Vlp73dfg= +cloud.google.com/go/servicedirectory v1.7.0/go.mod h1:5p/U5oyvgYGYejufvxhgwjL8UVXjkuw7q5XcG10wx1U= +cloud.google.com/go/servicemanagement v1.5.0/go.mod h1:XGaCRe57kfqu4+lRxaFEAuqmjzF0r+gWHjWqKqBvKFo= +cloud.google.com/go/serviceusage v1.4.0/go.mod h1:SB4yxXSaYVuUBYUml6qklyONXNLt83U0Rb+CXyhjEeU= +cloud.google.com/go/shell v1.4.0/go.mod h1:HDxPzZf3GkDdhExzD/gs8Grqk+dmYcEjGShZgYa9URw= +cloud.google.com/go/spanner v1.41.0/go.mod h1:MLYDBJR/dY4Wt7ZaMIQ7rXOTLjYrmxLE/5ve9vFfWos= +cloud.google.com/go/speech v1.6.0/go.mod h1:79tcr4FHCimOp56lwC01xnt/WPJZc4v3gzyT7FoBkCM= +cloud.google.com/go/speech v1.7.0/go.mod h1:KptqL+BAQIhMsj1kOP2la5DSEEerPDuOP/2mmkhHhZQ= +cloud.google.com/go/speech v1.9.0/go.mod h1:xQ0jTcmnRFFM2RfX/U+rk6FQNUF6DQlydUSyoooSpco= +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= +cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= +cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= +cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= +cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= +cloud.google.com/go/storage v1.28.1/go.mod h1:Qnisd4CqDdo6BGs2AD5LLnEsmSQ80wQ5ogcBBKhU86Y= +cloud.google.com/go/storage v1.29.0 h1:6weCgzRvMg7lzuUurI4697AqIRPU1SvzHhynwpW31jI= +cloud.google.com/go/storage v1.29.0/go.mod h1:4puEjyTKnku6gfKoTfNOU/W+a9JyuVNxjpS5GBrB8h4= +cloud.google.com/go/storagetransfer v1.6.0/go.mod h1:y77xm4CQV/ZhFZH75PLEXY0ROiS7Gh6pSKrM8dJyg6I= +cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= +cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= +cloud.google.com/go/talent v1.4.0/go.mod h1:ezFtAgVuRf8jRsvyE6EwmbTK5LKciD4KVnHuDEFmOOA= +cloud.google.com/go/texttospeech v1.5.0/go.mod h1:oKPLhR4n4ZdQqWKURdwxMy0uiTS1xU161C8W57Wkea4= +cloud.google.com/go/tpu v1.4.0/go.mod h1:mjZaX8p0VBgllCzF6wcU2ovUXN9TONFLd7iz227X2Xg= +cloud.google.com/go/trace v1.4.0/go.mod h1:UG0v8UBqzusp+z63o7FK74SdFE+AXpCLdFb1rshXG+Y= +cloud.google.com/go/translate v1.4.0/go.mod h1:06Dn/ppvLD6WvA5Rhdp029IX2Mi3Mn7fpMRLPvXT5Wg= +cloud.google.com/go/video v1.9.0/go.mod h1:0RhNKFRF5v92f8dQt0yhaHrEuH95m068JYOvLZYnJSw= +cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= +cloud.google.com/go/videointelligence v1.7.0/go.mod h1:k8pI/1wAhjznARtVT9U1llUaFNPh7muw8QyOUpavru4= +cloud.google.com/go/videointelligence v1.9.0/go.mod h1:29lVRMPDYHikk3v8EdPSaL8Ku+eMzDljjuvRs105XoU= +cloud.google.com/go/vision v1.2.0/go.mod h1:SmNwgObm5DpFBme2xpyOyasvBc1aPdjvMk2bBk0tKD0= +cloud.google.com/go/vision/v2 v2.2.0/go.mod h1:uCdV4PpN1S0jyCyq8sIM42v2Y6zOLkZs+4R9LrGYwFo= +cloud.google.com/go/vision/v2 v2.3.0/go.mod h1:UO61abBx9QRMFkNBbf1D8B1LXdS2cGiiCRx0vSpZoUo= +cloud.google.com/go/vision/v2 v2.5.0/go.mod h1:MmaezXOOE+IWa+cS7OhRRLK2cNv1ZL98zhqFFZaaH2E= +cloud.google.com/go/vmmigration v1.3.0/go.mod h1:oGJ6ZgGPQOFdjHuocGcLqX4lc98YQ7Ygq8YQwHh9A7g= +cloud.google.com/go/vmwareengine v0.1.0/go.mod h1:RsdNEf/8UDvKllXhMz5J40XxDrNJNN4sagiox+OI208= +cloud.google.com/go/vpcaccess v1.5.0/go.mod h1:drmg4HLk9NkZpGfCmZ3Tz0Bwnm2+DKqViEpeEpOq0m8= +cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xXZmFiHmGE= +cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= +cloud.google.com/go/webrisk v1.7.0/go.mod h1:mVMHgEYH0r337nmt1JyLthzMr6YxwN1aAIEc2fTcq7A= +cloud.google.com/go/websecurityscanner v1.4.0/go.mod h1:ebit/Fp0a+FWu5j4JOmJEV8S8CzdTkAS77oDsiSqYWQ= +cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= +cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= +cloud.google.com/go/workflows v1.9.0/go.mod h1:ZGkj1aFIOd9c8Gerkjjq7OW7I5+l6cSvT3ujaO/WwSA= +collectd.org v0.3.0/go.mod h1:A/8DzQBkF6abtvrT2j/AU/4tiBgJWYyh0y/oB/4MlWE= +cosmossdk.io/api v0.3.1 h1:NNiOclKRR0AOlO4KIqeaG6PS6kswOMhHD0ir0SscNXE= +cosmossdk.io/api v0.3.1/go.mod h1:DfHfMkiNA2Uhy8fj0JJlOCYOBp4eWUUJ1te5zBGNyIw= +cosmossdk.io/core v0.5.1 h1:vQVtFrIYOQJDV3f7rw4pjjVqc1id4+mE0L9hHP66pyI= +cosmossdk.io/core v0.5.1/go.mod h1:KZtwHCLjcFuo0nmDc24Xy6CRNEL9Vl/MeimQ2aC7NLE= +cosmossdk.io/depinject v1.0.0-alpha.3 h1:6evFIgj//Y3w09bqOUOzEpFj5tsxBqdc5CfkO7z+zfw= +cosmossdk.io/depinject v1.0.0-alpha.3/go.mod h1:eRbcdQ7MRpIPEM5YUJh8k97nxHpYbc3sMUnEtt8HPWU= +cosmossdk.io/errors v1.0.0-beta.7 h1:gypHW76pTQGVnHKo6QBkb4yFOJjC+sUGRc5Al3Odj1w= +cosmossdk.io/errors v1.0.0-beta.7/go.mod h1:mz6FQMJRku4bY7aqS/Gwfcmr/ue91roMEKAmDUDpBfE= +cosmossdk.io/math v1.0.0 h1:ro9w7eKx23om2tZz/VM2Pf+z2WAbGX1yDQQOJ6iGeJw= +cosmossdk.io/math v1.0.0/go.mod h1:Ygz4wBHrgc7g0N+8+MrnTfS9LLn9aaTGa9hKopuym5k= +cosmossdk.io/tools/rosetta v0.2.1 h1:ddOMatOH+pbxWbrGJKRAawdBkPYLfKXutK9IETnjYxw= +cosmossdk.io/tools/rosetta v0.2.1/go.mod h1:Pqdc1FdvkNV3LcNIkYWt2RQY6IP1ge6YWZk8MhhO9Hw= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek= +filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= +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/Azure/azure-sdk-for-go/sdk/azcore v0.21.1/go.mod h1:fBF9PQNqB8scdgpZ3ufzaLntG0AG7C1WjPMsiFOmfHM= +github.com/Azure/azure-sdk-for-go/sdk/internal v0.8.3/go.mod h1:KLF4gFr6DcKFZwSuH8w8yEK6DpFl3LP5rhdvAb7Yz5I= +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.3.0/go.mod h1:tPaiy8S5bQ+S5sOiDlINkp7+Ef339+Nz5L5XO+cnOHo= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak= +github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= +github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= +github.com/ChainSafe/go-schnorrkel v1.0.0 h1:3aDA67lAykLaG1y3AOjs88dMxC88PgUuHRrLeDnvGIM= +github.com/ChainSafe/go-schnorrkel v1.0.0/go.mod h1:dpzHYVxLZcp8pjlV+O+UR8K0Hp/z7vcchBSbMBEhCw4= +github.com/CosmWasm/wasmd v0.40.0-rc.0 h1:QhJzLSWQCjUjrEPO2dc61WgafnaxetuKZRBHUfKJR84= +github.com/CosmWasm/wasmd v0.40.0-rc.0/go.mod h1:9MispMuIWmjs6HlgRx+XPLfOD0y1k7iQx5KIE2cNGTc= +github.com/CosmWasm/wasmvm v1.2.2 h1:F1lTaMRYxk91V9ufV8gYhzLea7sd6AG/GvY1h2JtZsY= +github.com/CosmWasm/wasmvm v1.2.2/go.mod h1:vW/E3h8j9xBQs9bCoijDuawKo9kCtxOaS8N8J7KFtkc= +github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= +github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= +github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= +github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= +github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= +github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= +github.com/StirlingMarketingGroup/go-namecase v1.0.0 h1:2CzaNtCzc4iNHirR+5ru9OzGg8rQp860gqLBFqRI02Y= +github.com/StirlingMarketingGroup/go-namecase v1.0.0/go.mod h1:ZsoSKcafcAzuBx+sndbxHu/RjDcDTrEdT4UvhniHfio= +github.com/VictoriaMetrics/fastcache v1.6.0/go.mod h1:0qHz5QP0GMX4pfmMA/zt5RgfNuXJrTP0zS7DqpHGGTw= +github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= +github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= +github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= +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/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= +github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/apache/arrow/go/arrow v0.0.0-20191024131854-af6fa24be0db/go.mod h1:VTxUBvSJ3s3eHAg65PNgrsn5BtqCRPdmyXh6rAfdxN0= +github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= +github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= +github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= +github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= +github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= +github.com/armon/go-metrics v0.4.1 h1:hR91U9KYmb6bLBYLQjyM+3j+rcd/UhE+G78SFnF8gJA= +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/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= +github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI= +github.com/avast/retry-go/v4 v4.3.3 h1:G56Bp6mU0b5HE1SkaoVjscZjlQb0oy4mezwY/cGH19w= +github.com/avast/retry-go/v4 v4.3.3/go.mod h1:rg6XFaiuFYII0Xu3RDbZQkxCofFwruZKW8oEF1jpWiU= +github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= +github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.44.122/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= +github.com/aws/aws-sdk-go v1.44.203 h1:pcsP805b9acL3wUqa4JR2vg1k2wnItkDYNvfmcy6F+U= +github.com/aws/aws-sdk-go v1.44.203/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= +github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= +github.com/aws/aws-sdk-go-v2 v1.2.0/go.mod h1:zEQs02YRBw1DjK0PoJv3ygDYOFTre1ejlJWl8FwAuQo= +github.com/aws/aws-sdk-go-v2/config v1.1.1/go.mod h1:0XsVy9lBI/BCXm+2Tuvt39YmdHwS5unDQmxZOYe8F5Y= +github.com/aws/aws-sdk-go-v2/credentials v1.1.1/go.mod h1:mM2iIjwl7LULWtS6JCACyInboHirisUUdkBPoTHMOUo= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.0.2/go.mod h1:3hGg3PpiEjHnrkrlasTfxFqUsZ2GCk/fMUn4CbKgSkM= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.0.2/go.mod h1:45MfaXZ0cNbeuT0KQ1XJylq8A6+OpVV2E5kvY/Kq+u8= +github.com/aws/aws-sdk-go-v2/service/route53 v1.1.1/go.mod h1:rLiOUrPLW/Er5kRcQ7NkwbjlijluLsrIbu/iyl35RO4= +github.com/aws/aws-sdk-go-v2/service/sso v1.1.1/go.mod h1:SuZJxklHxLAXgLTc1iFXbEWkXs7QRTQpCLGaKIprQW0= +github.com/aws/aws-sdk-go-v2/service/sts v1.1.1/go.mod h1:Wi0EBZwiz/K44YliU0EKxqTCJGUfYTWXrrBwkq736bM= +github.com/aws/smithy-go v1.1.0/go.mod h1:EzMw8dbp/YJL4A5/sbhGddag+NPT7q084agLbB9LgIw= +github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= +github.com/benbjohnson/clock v1.3.0/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/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas= +github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4= +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/bmizerany/pat v0.0.0-20170815010413-6226ea591a40/go.mod h1:8rLXio+WjiTceGBHIoTvn60HIbs7Hm7bcHjyrSqYB9c= +github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= +github.com/btcsuite/btcd v0.22.0-beta h1:LTDpDKUM5EeOFBPM8IXpinEcmZ6FWfNZbE3lfrfdnWo= +github.com/btcsuite/btcd/btcec/v2 v2.1.2/go.mod h1:ctjw4H1kknNJmRN4iP1R7bTQ+v3GJkZBd6mui8ZsAZE= +github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= +github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= +github.com/burnt-labs/interchaintest/v7 v7.0.0-20230404233655-f37b60cca9b6 h1:ek5Y7blC3YSDZ34GrGxjT7wo4F6PgrdSDYYKf2ILOOw= +github.com/burnt-labs/interchaintest/v7 v7.0.0-20230404233655-f37b60cca9b6/go.mod h1:+Tg2jC5C0eI2iOTs24OYs0NgSjU4Bw5XAQ5HVkVMwzc= +github.com/c-bata/go-prompt v0.2.2/go.mod h1:VzqtzE2ksDBcdln8G7mk2RX9QyGjH+OVqOCSiVIqS34= +github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= +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.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= +github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw= +github.com/centrifuge/go-substrate-rpc-client/v4 v4.0.12 h1:DCYWIBOalB0mKKfUg2HhtGgIkBbMA1fnlnkZp7fHB18= +github.com/centrifuge/go-substrate-rpc-client/v4 v4.0.12/go.mod h1:5g1oM4Zu3BOaLpsKQ+O8PAv2kNuq+kPcA1VzFbsSqxE= +github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= +github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= +github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/logex v1.2.1/go.mod h1:JLbx6lG2kDbNRFnfkgvh4eRJRPX1QCoOIWomwysCBrQ= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/readline v1.5.1 h1:upd/6fQk4src78LMRzh5vItIt361/o4uq553V8B5sGI= +github.com/chzyer/readline v1.5.1/go.mod h1:Eh+b79XXUwfKfcPLepksvw2tcLE/Ct21YObkaSkeBlk= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/chzyer/test v1.0.0/go.mod h1:2JlltgoNkt4TW/z9V/IzDdFaMTM2JPIi26O1pF38GC8= +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/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cloudflare/cloudflare-go v0.14.0/go.mod h1:EnwdgGMaFOruiPZRFSgn+TsQ3hQ7C/YWzIGLeu5c304= +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/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20220314180256-7f1daf1720fc/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20230105202645-06c439db220b/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cockroachdb/apd/v2 v2.0.2 h1:weh8u7Cneje73dDh+2tEVLUvyBc89iwepWCD8b8034E= +github.com/cockroachdb/apd/v2 v2.0.2/go.mod h1:DDxRlzC2lo3/vSlmSoS7JkqbbrARPuFOGr0B9pvN3Gw= +github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= +github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= +github.com/coinbase/rosetta-sdk-go/types v1.0.0 h1:jpVIwLcPoOeCR6o1tU+Xv7r5bMONNbHU7MuEHboiFuA= +github.com/coinbase/rosetta-sdk-go/types v1.0.0/go.mod h1:eq7W2TMRH22GTW0N0beDnN931DW0/WOI1R2sdHNHG4c= +github.com/cometbft/cometbft v0.37.0 h1:M005vBaSaugvYYmNZwJOopynQSjwLoDTwflnQ/I/eYk= +github.com/cometbft/cometbft v0.37.0/go.mod h1:Y2MMMN//O5K4YKd8ze4r9jmk4Y7h0ajqILXbH5JQFVs= +github.com/cometbft/cometbft-db v0.7.0 h1:uBjbrBx4QzU0zOEnU8KxoDl18dMNgDh+zZRUE0ucsbo= +github.com/cometbft/cometbft-db v0.7.0/go.mod h1:yiKJIm2WKrt6x8Cyxtq9YTEcIMPcEe4XPxhgX59Fzf0= +github.com/confio/ics23/go v0.9.0 h1:cWs+wdbS2KRPZezoaaj+qBleXgUk5WOQFMP3CQFGTr4= +github.com/confio/ics23/go v0.9.0/go.mod h1:4LPZ2NYqnYIVRklaozjNR1FScgDJ2s5Xrp+e/mYVRak= +github.com/consensys/bavard v0.1.8-0.20210406032232-f3452dc9b572/go.mod h1:Bpd0/3mZuaj6Sj+PqrmIquiOKy397AKGThQPaGzNXAQ= +github.com/consensys/gnark-crypto v0.4.1-0.20210426202927-39ac3d4b3f1f/go.mod h1:815PAHg3wvysy0SyIqanF8gZ0Y1wjk/hrDHD/iT88+Q= +github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= +github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +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-proto v1.0.0-beta.2 h1:X3OKvWgK9Gsejo0F1qs5l8Qn6xJV/AzgIWR2wZ8Nua8= +github.com/cosmos/cosmos-proto v1.0.0-beta.2/go.mod h1:+XRCLJ14pr5HFEHIUcn51IKXD1Fy3rkEQqt4WqmN4V0= +github.com/cosmos/cosmos-sdk v0.47.0 h1:GKYtBpvjwuDEVix1vdnQpq7PuEOnItuEK0vdAL2cZ5g= +github.com/cosmos/cosmos-sdk v0.47.0/go.mod h1:FTtZbqiHCZ2vun9WrPq6qLQafNKkAuIhLAxzLjr2TiI= +github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= +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.4.2/go.mod h1:cLxOsn1ljAHSV527CHOtaIP91kK6cCrZETRBrkzItWU= +github.com/cosmos/gogoproto v1.4.7 h1:RzYKVnsEC7UIkDnhTIkqEB7LnIQbsySvmNEqPCiPevk= +github.com/cosmos/gogoproto v1.4.7/go.mod h1:gxGePp9qedovvl/StQL2BIJ6qlIBn1+9YxR0IulGBKA= +github.com/cosmos/iavl v0.20.0 h1:fTVznVlepH0KK8NyKq8w+U7c2L6jofa27aFX6YGlm38= +github.com/cosmos/iavl v0.20.0/go.mod h1:WO7FyvaZJoH65+HFOsDir7xU9FWk2w9cHXNW1XHcl7A= +github.com/cosmos/ibc-go/v7 v7.0.0 h1:j4kyywlG0hhDmT9FmSaR5iCIka7Pz7kJTxGWY1nlV9Q= +github.com/cosmos/ibc-go/v7 v7.0.0/go.mod h1:BFh8nKWjr5zeR2OZfhkzdgDzj1+KjRn3aJLpwapStj8= +github.com/cosmos/ics23/go v0.9.1-0.20221207100636-b1abd8678aab h1:I9ialKTQo7248V827Bba4OuKPmk+FPzmTVHsLXaIJWw= +github.com/cosmos/ics23/go v0.9.1-0.20221207100636-b1abd8678aab/go.mod h1:2CwqasX5dSD7Hbp/9b6lhK6BwoBDCBldx7gPKRukR60= +github.com/cosmos/keyring v1.2.0 h1:8C1lBP9xhImmIabyXW4c3vFjjLiBdGCmfLUfeZlV1Yo= +github.com/cosmos/keyring v1.2.0/go.mod h1:fc+wB5KTk9wQ9sDx0kFXB3A0MaeGHM9AwRStKOQ5vOA= +github.com/cosmos/ledger-cosmos-go v0.12.1/go.mod h1:dhO6kj+Y+AHIOgAe4L9HL/6NDdyyth4q238I9yFpD2g= +github.com/cosmos/rosetta-sdk-go v0.10.0 h1:E5RhTruuoA7KTIXUcMicL76cffyeoyvNybzUGSKFTcM= +github.com/cosmos/rosetta-sdk-go v0.10.0/go.mod h1:SImAZkb96YbwvoRkzSMQB6noNJXFgWl/ENIznEoYQI4= +github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/creachadair/taskgroup v0.4.2 h1:jsBLdAJE42asreGss2xZGZ8fJra7WtwnHWeJFxv2Li8= +github.com/creachadair/taskgroup v0.4.2/go.mod h1:qiXUOSrbwAY3u0JPGTzObbE3yf9hcXHDKBZ2ZjpCbgM= +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/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= +github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= +github.com/dave/jennifer v1.2.0/go.mod h1:fIb+770HOpJ2fmN9EPPKOqm1vMGhB+TwXKMZhrIygKg= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/deckarep/golang-set v1.8.0 h1:sk9/l/KqpunDwP7pSjUg0keiOOLEnOBHzykLrsPppp4= +github.com/deckarep/golang-set v1.8.0/go.mod h1:5nI87KwE7wgsBU1F4GKAw2Qod7p5kyS383rP6+o6qqo= +github.com/decred/base58 v1.0.4 h1:QJC6B0E0rXOPA8U/kw2rP+qiRJsUaE2Er+pYb3siUeA= +github.com/decred/base58 v1.0.4/go.mod h1:jJswKPEdvpFpvf7dsDvFZyLT22xZ9lWqEByX38oGd9E= +github.com/decred/dcrd/chaincfg/chainhash v1.0.2/go.mod h1:BpbrGgrPTr3YJYRN3Bm+D9NuaFd+zGyNeIKgrhCXK60= +github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= +github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= +github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.0 h1:3GIJYXQDAKpLEFriGFN8SbSffak10UXHGdIcFaMPykY= +github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.0/go.mod h1:3s92l0paYkZoIHuj4X93Teg/HB7eGM9x/zokGw+u4mY= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 h1:HbphB4TFFXpv7MNrT52FGrrgVXF1owhMVTHFZIlnvd4= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0/go.mod h1:DZGJHZMqrU4JJqFAWUS2UO1+lbSKsdiOoYi9Zzey7Fc= +github.com/deepmap/oapi-codegen v1.6.0/go.mod h1:ryDa9AgbELGeB+YEXE1dR53yAjHwFvE9iAUlWl9Al3M= +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/v2 v2.2007.4/go.mod h1:vSw/ax2qojzbN6eXHIx6KPKtCSHJN/Uz0X0VPruTIhk= +github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= +github.com/dgraph-io/ristretto v0.1.1/go.mod h1:S1GPSBCYCIhmVNfcth17y2zZtQT6wzkzgwUve0VDWWA= +github.com/dgryski/go-bitstream v0.0.0-20180413035011-3522498ce2c8/go.mod h1:VMaSuZ+SZcx/wljOQKvp5srsbCiKDEb6K2wC4+PiBmQ= +github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= +github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= +github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= +github.com/dnaeon/go-vcr v1.1.0/go.mod h1:M7tiix8f0r6mKKJ3Yq/kqU1OYf3MnfmBWVbPx/yU9ko= +github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= +github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68= +github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/docker v1.4.2-0.20180625184442-8e610b2b55bf/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v20.10.19+incompatible h1:lzEmjivyNHFHMNAFLXORMBXyGIhw/UP4DvJwvyKYq64= +github.com/docker/docker v20.10.19+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= +github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= +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/dop251/goja v0.0.0-20211011172007-d99e4b8cbf48/go.mod h1:R9ET47fwRVRPZnOGvHxxhuZcbrMCuiqOz3Rlrh4KSnk= +github.com/dop251/goja_nodejs v0.0.0-20210225215109-d91c329300e7/go.mod h1:hn7BA7c8pLvoGndExHudxTDKZ84Pyvv+90pbBjbTz0Y= +github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +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.5.0 h1:3j8ya4Z4kMCwT5nXIKFSV84YS+HdqSSO0VsTQxaLAeM= +github.com/dvsekhvalnov/jose2go v1.5.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB/mPZadG+mhXU= +github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= +github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= +github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= +github.com/eclipse/paho.mqtt.golang v1.2.0/go.mod h1:H9keYFcgq3Qr5OUJm/JZI/i6U7joQ8SYLhZwfeOo6Ts= +github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= +github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= +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/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= +github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= +github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= +github.com/envoyproxy/go-control-plane v0.10.3/go.mod h1:fJJn/j26vwOu972OllsvAgJJM//w9BV6Fxbg2LuVd34= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/envoyproxy/protoc-gen-validate v0.6.7/go.mod h1:dyJXwwfPK2VSqiB9Klm1J6romD608Ba7Hij42vrOBCo= +github.com/envoyproxy/protoc-gen-validate v0.9.1/go.mod h1:OKNgG7TCp5pF4d6XftA0++PMirau2/yoOwVac3AbF2w= +github.com/ethereum/go-ethereum v1.10.17 h1:XEcumY+qSr1cZQaWsQs5Kck3FHB0V2RiMHPdTBJ+oT8= +github.com/ethereum/go-ethereum v1.10.17/go.mod h1:Lt5WzjM07XlXc95YzrhosmR4J9Ahd6X2wyEV2SvGhk0= +github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/felixge/httpsnoop v1.0.2 h1:+nS9g82KMXccJ/wp0zyRW9ZBHFETmMGtkk+2CTTrW4o= +github.com/felixge/httpsnoop v1.0.2/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= +github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= +github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= +github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= +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.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= +github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= +github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= +github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg= +github.com/gdamore/tcell/v2 v2.4.1-0.20210905002822-f057f0a857a1/go.mod h1:Az6Jt+M5idSED2YPGtwnfJV0kXohgdCBPmHGSYc1r04= +github.com/gdamore/tcell/v2 v2.6.0/go.mod h1:be9omFATkdr0D9qewWW3d+MEvl5dha+Etb5y65J2H8Y= +github.com/getkin/kin-openapi v0.53.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= +github.com/getkin/kin-openapi v0.61.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= +github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk= +github.com/glycerine/go-unsnap-stream v0.0.0-20180323001048-9f0cb55181dd/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE= +github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24= +github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJpoZOs= +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-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.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= +github.com/go-kit/kit v0.12.0 h1:e4o3o3IsBfAKQh5Qbbiqyfu97Ku7jrO/JbohvztANh4= +github.com/go-kit/kit v0.12.0/go.mod h1:lHd+EkCZPIwYItmGDDRdhinkzX2A1sj+M9biaEaizzs= +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-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-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= +github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= +github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= +github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= +github.com/go-playground/validator/v10 v10.10.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos= +github.com/go-sourcemap/sourcemap v2.1.3+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= +github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= +github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw= +github.com/go-stack/stack v1.8.1/go.mod h1:dcoOX6HbPZSZptuspn9bctJ+N/CnF5gGygcUP3XYfe4= +github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= +github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= +github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= +github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= +github.com/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= +github.com/gogo/googleapis v1.4.1-0.20201022092350-68b0159b7869/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= +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.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= +github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang-jwt/jwt/v4 v4.3.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= +github.com/golang-jwt/jwt/v4 v4.4.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= +github.com/golang/geo v0.0.0-20190916061304-5b978397cfec/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= +github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ= +github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +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/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/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.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= +github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= +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.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= +github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golangci/lint-1 v0.0.0-20181222135242-d2cdd8c08219/go.mod h1:/X8TswGSh1pIozq4ZwCfxS0WA5JGXguxk94ar/4c87Y= +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.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= +github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= +github.com/google/flatbuffers v1.11.0/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.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +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.1.1-0.20200604201612-c04b05f3adfa/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/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= +github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= +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-20201218002935-b9804c9f04c2/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-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= +github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= +github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= +github.com/googleapis/enterprise-certificate-proxy v0.2.1/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= +github.com/googleapis/enterprise-certificate-proxy v0.2.3 h1:yk9/cqRKtT9wXZSsRH9aurXEpJX+U6FLtpYTdC3R06k= +github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= +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/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= +github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= +github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= +github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= +github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= +github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= +github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= +github.com/googleapis/gax-go/v2 v2.7.0 h1:IcsPKeInNvYi7eqSaDjiZqDDKu5rsmunY0Y1YupQSSQ= +github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8= +github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= +github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= +github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= +github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= +github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= +github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= +github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= +github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/graph-gophers/graphql-go v1.3.0/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= +github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= +github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= +github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +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.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks= +github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c/go.mod h1:NMPJylDgVpX0MLRlPy15sqSwOFv/U1GZ2m21JhFfek0= +github.com/gtank/merlin v0.1.1-0.20191105220539-8318aed1a79f/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= +github.com/gtank/merlin v0.1.1 h1:eQ90iG7K9pOhtereWsmyRJ6RAwcP4tHTDBHXNg+u5is= +github.com/gtank/merlin v0.1.1/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= +github.com/gtank/ristretto255 v0.1.2 h1:JEqUCPA1NvLq5DwYtuzigd7ss8fwbYay9fi4/5uMzcc= +github.com/gtank/ristretto255 v0.1.2/go.mod h1:Ph5OpO6c7xKUGROZfWVLiJf9icMDwUeIvY4OmlYW69o= +github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= +github.com/hashicorp/consul/sdk v0.3.0/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/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-getter v1.7.0 h1:bzrYP+qu/gMrL1au7/aDvkoOVGUJpeKBgbqRHACAFDY= +github.com/hashicorp/go-getter v1.7.0/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744= +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-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-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= +github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= +github.com/hashicorp/go-safetemp v1.0.0 h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhEyExpmo= +github.com/hashicorp/go-safetemp v1.0.0/go.mod h1:oaerMy3BhqiTbVye6QuFhFtIceqFoDHxNAB65b+Rj1I= +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-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= +github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +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 v0.5.5-0.20210104140557-80c98217689d h1:dg1dEPuWpEqDnvIw251EVy4zlP8gWbsGj4BsUKCRpYs= +github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= +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/hdevalence/ed25519consensus v0.1.0 h1:jtBwzzcHuTmFrQN6xQZn6CQEO/V9f7HsjsjeEZ6auqU= +github.com/hdevalence/ed25519consensus v0.1.0/go.mod h1:w3BHWjwJbFU29IRHL1Iqkw3sus+7FctEyM4RqDxYNzo= +github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= +github.com/holiman/uint256 v1.2.0/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/huandu/go-assert v1.1.5/go.mod h1:yOLvuqZwmcHIC5rIzrBhT7D3Q9c3GFnd0JrPVhn/06U= +github.com/huandu/skiplist v1.2.0 h1:gox56QD77HzSC0w+Ws3MH3iie755GBJU1OER3h5VsYw= +github.com/huandu/skiplist v1.2.0/go.mod h1:7v3iFjLcSAzO4fN5B8dvebvo/qsfumiLiDXMrPiHF9w= +github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= +github.com/huin/goupnp v1.0.3-0.20220313090229-ca81a64b4204/go.mod h1:ZxNlw5WqJj6wSsRK5+YfflQGXYfccj5VgQsMNixHM7Y= +github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= +github.com/iancoleman/strcase v0.2.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/icza/dyno v0.0.0-20220812133438-f0b6f8a18845 h1:H+uM0Bv88eur3ZSsd2NGKg3YIiuXxwxtlN7HjE66UTU= +github.com/icza/dyno v0.0.0-20220812133438-f0b6f8a18845/go.mod h1:c1tRKs5Tx7E2+uHGSyyncziFjvGpgv4H2HrqXeUQ/Uk= +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.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/influxdata/flux v0.65.1/go.mod h1:J754/zds0vvpfwuq7Gc2wRdVwEodfpCFM7mYlOw2LqY= +github.com/influxdata/influxdb v1.8.3/go.mod h1:JugdFhsvvI8gadxOI6noqNeeBHvWNTbfYGtiAn+2jhI= +github.com/influxdata/influxdb-client-go/v2 v2.4.0/go.mod h1:vLNHdxTJkIf2mSLvGrpj8TCcISApPoXkaxP8g9uRlW8= +github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= +github.com/influxdata/influxql v1.1.1-0.20200828144457-65d3ef77d385/go.mod h1:gHp9y86a/pxhjJ+zMjNXiQAA197Xk9wLxaz+fGG+kWk= +github.com/influxdata/line-protocol v0.0.0-20180522152040-32c6aa80de5e/go.mod h1:4kt73NQhadE3daL3WhR5EJ/J2ocX0PZzwxQ0gXJ7oFE= +github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= +github.com/influxdata/line-protocol v0.0.0-20210311194329-9aa0e372d097/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= +github.com/influxdata/promql/v2 v2.12.0/go.mod h1:fxOPu+DY0bqCTCECchSRtWfc+0X19ybifQhZoQNF5D8= +github.com/influxdata/roaring v0.4.13-0.20180809181101-fc520f41fab6/go.mod h1:bSgUQ7q5ZLSO+bKBGqJiCBGAl+9DxyW63zLTujjUlOE= +github.com/influxdata/tdigest v0.0.0-20181121200506-bf2b5ad3c0a9/go.mod h1:Js0mqiSBE6Ffsg94weZZ2c+v/ciT8QRHFOap7EKDrR0= +github.com/influxdata/usage-client v0.0.0-20160829180054-6d3895376368/go.mod h1:Wbbw6tYNvwa5dlB6304Sd+82Z3f7PmVZHVKU637d4po= +github.com/ipfs/go-cid v0.2.0 h1:01JTiihFq9en9Vz0lc0VDWvZe/uBonGpzo4THP0vcQ0= +github.com/ipfs/go-cid v0.2.0/go.mod h1:P+HXFDF4CVhaVayiEb4wkAy7zBHxBwsJyt0Y5U6MLro= +github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= +github.com/jedisct1/go-minisign v0.0.0-20190909160543-45766022959e/go.mod h1:G1CVv03EnqU1wYL2dFwXxW2An0az9JTl/ZsqXQeBlkU= +github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= +github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= +github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= +github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= +github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= +github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +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.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/jsternberg/zap-logfmt v1.0.0/go.mod h1:uvPs/4X51zdkcm5jXl5SYoN+4RK21K8mysFmDaM/h+o= +github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +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/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= +github.com/jwilder/encoding v0.0.0-20170811194829-b4e1701a28ef/go.mod h1:Ct9fl0F6iIOGgxJ5npU/IUOhOhqlVrGjyIZc8/MagT0= +github.com/karalabe/usb v0.0.2/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= +github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= +github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= +github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/errcheck v1.6.2/go.mod h1:nXw/i/MfnvRHqXa7XXmQMUB0oNFGuBrNI8d8NLy0LPw= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.4.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= +github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= +github.com/klauspost/compress v1.16.3 h1:XuJt9zzcnaz6a16/OU53ZjWp/v7/42WcR5t2a0PcNQY= +github.com/klauspost/compress v1.16.3/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5 h1:2U0HzY8BJ8hVwDKIzp7y4voR9CX/nvcfymLmg2UiOio= +github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/klauspost/cpuid/v2 v2.2.3 h1:sxCkb+qR91z4vsqw4vGGZlDgPz3G7gjaLyK3V8y70BU= +github.com/klauspost/cpuid/v2 v2.2.3/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= +github.com/klauspost/crc32 v0.0.0-20161016154125-cb6bfca970f6/go.mod h1:+ZoRqAPRLkC4NPOvfYeR5KNOrY6TD+/sAC3HXPZgDYg= +github.com/klauspost/pgzip v1.0.2-0.20170402124221-0bf5dcad4ada/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= +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.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/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= +github.com/labstack/echo/v4 v4.2.1/go.mod h1:AA49e0DZ8kk5jTOOCKNuPR6oTnBS0dYiM4FW1e6jwpg= +github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= +github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= +github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= +github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw= +github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= +github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= +github.com/libp2p/go-libp2p v0.22.0 h1:2Tce0kHOp5zASFKJbNzRElvh0iZwdtG5uZheNW8chIw= +github.com/libp2p/go-libp2p v0.22.0/go.mod h1:UDolmweypBSjQb2f7xutPnwZ/fxioLbMBxSjRksxxU4= +github.com/libp2p/go-libp2p-core v0.20.1 h1:fQz4BJyIFmSZAiTbKV8qoYhEH5Dtv/cVhZbG3Ib/+Cw= +github.com/libp2p/go-libp2p-core v0.20.1/go.mod h1:6zR8H7CvQWgYLsbG4on6oLNSGcyKaYFSEYyDt51+bIY= +github.com/libp2p/go-openssl v0.1.0/go.mod h1:OiOxwPpL3n4xlenjx2h7AwSGaFSC/KZvf6gNdOBQMtc= +github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= +github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= +github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= +github.com/lyft/protoc-gen-star v0.6.0/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= +github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= +github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= +github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= +github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/manifoldco/promptui v0.9.0 h1:3V4HzJk1TtXW1MTZMP7mdlwbBpIinw3HztaIlYthEiA= +github.com/manifoldco/promptui v0.9.0/go.mod h1:ka04sppxSGFAtxX0qhlYQjISsg9mR4GWtQEhdbn6Pgg= +github.com/matryer/moq v0.0.0-20190312154309-6cfb0558e1bd/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ= +github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= +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.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= +github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-pointer v0.0.1/go.mod h1:2zXcozF6qYGgmsG+SeTZz3oAbFLdD3OWqnUbNvJZAlc= +github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= +github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= +github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= +github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= +github.com/mimoo/StrobeGo v0.0.0-20220103164710-9a04d6ca976b h1:QrHweqAtyJ9EwCaGHBu1fghwxIPiopAHV06JlXrMHjk= +github.com/mimoo/StrobeGo v0.0.0-20220103164710-9a04d6ca976b/go.mod h1:xxLb2ip6sSUts3g1irPVHyk/DGslwQsNOo9I7smJfNU= +github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g= +github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= +github.com/minio/sha256-simd v1.0.0 h1:v1ta+49hkWZyvaKwrQB8elexRqm6Y0aMLjCNsrYxo6g= +github.com/minio/sha256-simd v1.0.0/go.mod h1:OuYzVNI5vcoYIAmbIvHPl3N3jUzVedXbKy5RFepssQM= +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/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.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= +github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/pointerstructure v1.2.0/go.mod h1:BRAsLI5zgXmw97Lf6s25bs8ohIXc3tViBH44KcwB2g4= +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 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8= +github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= +github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= +github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae/go.mod h1:qAyveg+e4CE+eKJXWVjKXM4ck2QobLqTDytGJbLLhJg= +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/multiformats/go-base32 v0.0.4 h1:+qMh4a2f37b4xTNs6mqitDinryCI+tfO2dRVMN9mjSE= +github.com/multiformats/go-base32 v0.0.4/go.mod h1:jNLFzjPZtp3aIARHbJRZIaPuspdH0J6q39uUM5pnABM= +github.com/multiformats/go-base36 v0.1.0 h1:JR6TyF7JjGd3m6FbLU2cOxhC0Li8z8dLNGQ89tUg4F4= +github.com/multiformats/go-base36 v0.1.0/go.mod h1:kFGE83c6s80PklsHO9sRn2NCoffoRdUUOENyW/Vv6sM= +github.com/multiformats/go-multiaddr v0.6.0 h1:qMnoOPj2s8xxPU5kZ57Cqdr0hHhARz7mFsPMIiYNqzg= +github.com/multiformats/go-multiaddr v0.6.0/go.mod h1:F4IpaKZuPP360tOMn2Tpyu0At8w23aRyVqeK0DbFeGM= +github.com/multiformats/go-multibase v0.1.1 h1:3ASCDsuLX8+j4kx58qnJ4YFq/JWTJpCyDW27ztsVTOI= +github.com/multiformats/go-multibase v0.1.1/go.mod h1:ZEjHE+IsUrgp5mhlEAYjMtZwK1k4haNkcaPg9aoe1a8= +github.com/multiformats/go-multicodec v0.5.0 h1:EgU6cBe/D7WRwQb1KmnBvU7lrcFGMggZVTPtOW9dDHs= +github.com/multiformats/go-multicodec v0.5.0/go.mod h1:DiY2HFaEp5EhEXb/iYzVAunmyX/aSFMxq2KMKfWEues= +github.com/multiformats/go-multihash v0.2.1 h1:aem8ZT0VA2nCHHk7bPJ1BjUbHNciqZC/d16Vve9l108= +github.com/multiformats/go-multihash v0.2.1/go.mod h1:WxoMcYG85AZVQUyRyo9s4wULvW5qrI9vb2Lt6evduFc= +github.com/multiformats/go-varint v0.0.6 h1:gk85QWKxh3TazbLxED/NlDVv8+q+ReFJk7Y2W/KhfNY= +github.com/multiformats/go-varint v0.0.6/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= +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/mwitkow/grpc-proxy v0.0.0-20181017164139-0f1106ef9c76/go.mod h1:x5OoJHDHqxHS801UIuhqGl6QdSAEJvtausosHSdazIo= +github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= +github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= +github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= +github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= +github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= +github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= +github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= +github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= +github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= +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/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= +github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= +github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= +github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= +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/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/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= +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.0-rc2 h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034= +github.com/opencontainers/image-spec v1.1.0-rc2/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ= +github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= +github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= +github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/opentracing/opentracing-go v1.0.3-0.20180606204148-bd9c31933947/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= +github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= +github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= +github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= +github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= +github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/paulbellamy/ratecounter v0.2.0/go.mod h1:Hfx1hDpSGoqxkVVpBi/IlYD7kChlfo5C6hzIHwPqfFE= +github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= +github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +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.0.6 h1:nrzqCb7j9cDFj2coyLNLaZuJTLjWjlaz6nvTvIwycIU= +github.com/pelletier/go-toml/v2 v2.0.6/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek= +github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= +github.com/peterh/liner v1.0.1-0.20180619022028-8c1271fcf47f/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc= +github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= +github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= +github.com/petermattis/goid v0.0.0-20221215004737-a150e88a970d/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= +github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= +github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= +github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pierrec/xxHash v0.1.5 h1:n/jBpwTHiER4xYvK3/CdPVnLDPchj8eTJFFLUb4QHBo= +github.com/pierrec/xxHash v0.1.5/go.mod h1:w2waW5Zoa/Wc4Yqe0wgrIYAGKqRMf7czn2HNKXmuL+I= +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/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= +github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= +github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= +github.com/pkg/term v0.0.0-20180730021639-bffc007b7fd5/go.mod h1:eCbImbZ95eXtAUIbLAuAVnBnwf83mjf6QIVH8SHYwqQ= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= +github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= +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.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw= +github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/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.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4= +github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= +github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= +github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= +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.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= +github.com/prometheus/common v0.40.0 h1:Afz7EVRqGg2Mqqf4JuF9vdvp1pi220m55Pi9T2JnO4Q= +github.com/prometheus/common v0.40.0/go.mod h1:L65ZJPSmfn/UBWLQIHV7dBrKFidB/wPlF1y5TlSt9OE= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/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.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI= +github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY= +github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ= +github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Unghqrcc= +github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= +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/regen-network/protobuf v1.3.3-alpha.regen.1 h1:OHEc+q5iIAXpqiqFKeLpu5NwTIkVXUs48vFMwzqpqY4= +github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI= +github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= +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/retailnext/hllpp v1.0.1-0.20180308014038-101a6d2f8b52/go.mod h1:RDpi1RftBQPUCDRw6SmxeaREsAaRKnOclghuzp/WRzc= +github.com/rivo/tview v0.0.0-20220307222120-9994674d60a8/go.mod h1:WIfMkQNY+oq/mWwtsjOYHIZBuwthioY2srOmljJkTnk= +github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +github.com/rivo/uniseg v0.4.3/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/rjeczalik/notify v0.9.1/go.mod h1:rKwnCoCGeuQnwBtTSPL9Dad03Vh2n40ePRrjvIXnJho= +github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= +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/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= +github.com/rs/cors v1.8.3 h1:O+qNyWn7Z+F9M0ILBHgMVPuB1xTOucVd5gtaYyXBpRo= +github.com/rs/cors v1.8.3/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= +github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +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/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= +github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/segmentio/kafka-go v0.1.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= +github.com/segmentio/kafka-go v0.2.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= +github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +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.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= +github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +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/snikch/goodman v0.0.0-20171125024755-10e37e294daa h1:YJfZp12Z3AFhSBeXOlv4BO55RMwPn2NoQeDsrdWnBtY= +github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa/go.mod h1:oJyF+mSPHbB5mVY2iO9KV3pTt/QbIkGaO8gQ2WrDbP4= +github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= +github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572/go.mod h1:w0SWMsp6j9O/dk4/ZpIhL+3CkG8ofA2vuv7k+ltqUMc= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= +github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= +github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= +github.com/spf13/afero v1.9.3 h1:41FoI0fD7OR7mGcKE/aOiLkGreyf8ifIOQmJANWogMk= +github.com/spf13/afero v1.9.3/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= +github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= +github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= +github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= +github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= +github.com/spf13/cobra v1.6.1 h1:o94oiPyS4KD1mPy2fmcYYHHfCxLqYjJOhGsCHFZtEzA= +github.com/spf13/cobra v1.6.1/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY= +github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= +github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= +github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= +github.com/spf13/viper v1.15.0 h1:js3yy885G8xwJa6iOISGFwd+qlUo5AvyXb7CiihdtiU= +github.com/spf13/viper v1.15.0/go.mod h1:fFcTBJxvhhzSJiZy8n+PeW6t8l+KeT/uTARa0jHOQLA= +github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q= +github.com/strangelove-ventures/go-subkey v1.0.7 h1:cOP/Lajg3uxV/tvspu0m6+0Cu+DJgygkEAbx/s+f35I= +github.com/strangelove-ventures/go-subkey v1.0.7/go.mod h1:E34izOIEm+sZ1YmYawYRquqBQWeZBjVB4pF7bMuhc1c= +github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= +github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= +github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= +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.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.2.0/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.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.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= +github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8= +github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= +github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= +github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= +github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c/go.mod h1:ahpPrc7HpcfEWDQRZEmnXMzHY03mLDYMCxeDzy46i+8= +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/tidwall/btree v1.6.0 h1:LDZfKfQIBHGHWSwckhXI0RPSXzlo+KYdjK7FWSqOzzg= +github.com/tidwall/btree v1.6.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= +github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= +github.com/tklauser/go-sysconf v0.3.5/go.mod h1:MkWzOF4RMCshBAMXuhXJs64Rte09mITnppBXY/rYEFI= +github.com/tklauser/numcpus v0.2.2/go.mod h1:x3qojaO3uyYt0i56EW/VUYs7uBvdl2fkfZFu0T9wgjM= +github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= +github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= +github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M= +github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= +github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= +github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= +github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= +github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= +github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= +github.com/willf/bitset v1.1.3/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= +github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= +github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +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.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/zondax/hid v0.9.1/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= +github.com/zondax/ledger-go v0.14.1/go.mod h1:fZ3Dqg6qcdXWSOJFKMG8GCTnD7slO/RL2feOQv8K320= +go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/bbolt v1.3.7/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= +go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= +go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= +go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= +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.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= +go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= +go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.opentelemetry.io/proto/otlp v0.15.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= +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.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= +go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= +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.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= +go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= +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.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= +go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= +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-20181203042331-505ab145d0a9/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-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-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190909091759-094676da4a83/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/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-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= +golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +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-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.7.0 h1:AvwMYaRytfdeVt3u6mLaxYtErKYjxA2OXjJ1HHq6t3A= +golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= +golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/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-20190125153040-c74c464bbbf2/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-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= +golang.org/x/exp v0.0.0-20230310171629-522b1b587ee0 h1:LGJsf5LRplCck6jUCH3dBL2dmycNruWNF5xugkSlfXw= +golang.org/x/exp v0.0.0-20230310171629-522b1b587ee0/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= +golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= +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.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= +golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= +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/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-20181220203305-927f97764cc3/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-20190125091013-d26f9f9a57f3/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-20200421231249-e086a090c8fd/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-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +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-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210220033124-5f55cee0dc0d/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-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210610132358-84b48f89b13b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/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-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/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.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= +golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ= +golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= +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-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= +golang.org/x/oauth2 v0.4.0/go.mod h1:RznEsdpjGAINPTOF0UH/t+xJ75L18YO3Ho6Pyn+uRec= +golang.org/x/oauth2 v0.5.0 h1:HuArIo48skDwlrvM3sEdHXElYslAMsf3KwRkkW4MC4s= +golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I= +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-20220601150217-0de741cfad7f/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.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +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-20181107165924-66b7b1311ac8/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-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190130150945-aca44879d564/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-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-20190626221950-04f50cda93cb/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-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/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-20191220142924-d4481acd189f/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-20200107162124-548cf772de50/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-20200420163511-1957bb5e6d1f/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-20200826173525-f9321e4c35a6/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-20210104204734-6f8348627aad/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-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210309074719-68d13333faf2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210316164454-77fc1eacc6aa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210420205809-ac73e9fd8988/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/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-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210603125802-9665404d3644/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-20210616094352-59db8d763f22/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-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210819135213-f52c844e1c1c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211210111614-af8b64212486/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-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220315194320-039c03cc5b86/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/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-20220502124256-b6088ccd6cba/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-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.4.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 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +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-20201210144234-2321bbc49cbf/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.1.0/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 h1:clScbb1cHjoCkyRbWwBEUZ5H/tIFu5TAXIqaZD0Gcjw= +golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= +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.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68= +golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-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.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/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-20181030221726-6c7e314b6563/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-20190206041539-40960b6deb8e/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-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-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-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-20200108203644-89082a384178/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-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= +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/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-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= +golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= +gonum.org/v1/gonum v0.0.0-20181121035319-3f7ecaa7e8ca/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= +gonum.org/v1/gonum v0.6.0/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU= +gonum.org/v1/netlib v0.0.0-20181029234149-ec6d1f5cefe6/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= +gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= +gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= +google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= +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.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= +google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= +google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= +google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= +google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= +google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= +google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= +google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= +google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= +google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= +google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= +google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= +google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= +google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= +google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= +google.golang.org/api v0.77.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= +google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= +google.golang.org/api v0.80.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg= +google.golang.org/api v0.84.0/go.mod h1:NTsGnUFJMYROtiquksZHBWtHfeMC7iYthki7Eq3pa8o= +google.golang.org/api v0.85.0/go.mod h1:AqZf8Ep9uZ2pyTvgL+x0D3Zt0eoT9b5E8fmzfu6FO2g= +google.golang.org/api v0.90.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= +google.golang.org/api v0.93.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= +google.golang.org/api v0.95.0/go.mod h1:eADj+UBuxkh5zlrSntJghuNeg8HwQ1w5lTKkuqaETEI= +google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= +google.golang.org/api v0.106.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= +google.golang.org/api v0.108.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= +google.golang.org/api v0.110.0 h1:l+rh0KYUooe9JGbGVx71tbFo4SMbMTXK3I3ia2QSEeU= +google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +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-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= +google.golang.org/genproto v0.0.0-20190716160619-c506a9f90610/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +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-20200108215221-bd8f9a0ef82f/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-20200324203455-a04cca1dde73/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/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-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210126160654-44e461bb6506/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-20210226172003-ab064af71705/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-20210329143202-679c6ae281ee/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-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= +google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= +google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= +google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220314164441-57ef72a4c106/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= +google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= +google.golang.org/genproto v0.0.0-20220329172620-7be39ac1afc7/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220628213854-d9e0b6570c03/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220722212130-b98a9ff5e252/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE= +google.golang.org/genproto v0.0.0-20220801145646-83ce21fca29f/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= +google.golang.org/genproto v0.0.0-20220815135757-37a418bb8959/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220817144833-d7fd3f11b9b1/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220829144015-23454907ede3/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220829175752-36a9c930ecbf/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220913154956-18f8339a66a5/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220914142337-ca0e39ece12f/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220915135415-7fd63a7952de/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220916172020-2692e8806bfa/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220919141832-68c03719ef51/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220920201722-2b89144ce006/go.mod h1:ht8XFiar2npT/g4vkk7O0WYS1sHOHbdujxbEp7CJWbw= +google.golang.org/genproto v0.0.0-20220926165614-551eb538f295/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= +google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= +google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqwhZAwq4wsRUaVG555sVgsNmIjRtO7t/JH29U= +google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= +google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= +google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= +google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230124163310-31e0e69b6fc2/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230209215440-0dfe4f8abfcc/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44 h1:EfLuoKW5WfkgVdDy7dTK8qSbH37AX5mj/MFh+bGPz14= +google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44/go.mod h1:8B0gmkoRebU8ukX6HP+4wrVQUY1+6PkQ44BSyIlflHA= +google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.23.1/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.32.0/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.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= +google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= +google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= +google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= +google.golang.org/grpc v1.53.0 h1:LAv2ds7cmFV/XTS3XG1NneeENYrXGmorPxsBbptIjNc= +google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= +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.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.29.1 h1:7QBf+IK2gx70Ap/hDsOmam3GE0v9HicjfEdAxE62UoM= +google.golang.org/protobuf v1.29.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +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/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= +gopkg.in/cheggaaa/pb.v1 v1.0.27/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= +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/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= +gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= +gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= +gopkg.in/olebedev/go-duktape.v3 v3.0.0-20200619000410-60c24ae608a6/go.mod h1:uAJfkITjFhyEEuUfm7bsmCZRbW5WRq8s9EY8HZ6hCns= +gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/urfave/cli.v1 v1.20.0/go.mod h1:vuBzUtMdQeixQj8LVd+/98pzhxNGQoyuPBlsXHOQNO0= +gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= +gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= +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 v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= +gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= +gotest.tools/v3 v3.4.0 h1:ZazjZUfuVeZGLAmlKKuyv3IKP5orXcwtOwDQH6YVr6o= +gotest.tools/v3 v3.4.0/go.mod h1:CtbdzLSsqVhDgMtKsx03ird5YTGB3ar27v0u/yKBW5g= +honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +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= +lukechampine.com/blake3 v1.1.7 h1:GgRMhmdsuK8+ii6UZFDL8Nb+VyMwadAgcJyfYHxG6n0= +lukechampine.com/blake3 v1.1.7/go.mod h1:tkKEOtDkNtklkXtLNEOGNq5tcV90tJiA1vAA12R78LA= +lukechampine.com/uint128 v1.2.0/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= +modernc.org/cc/v3 v3.40.0/go.mod h1:/bTg4dnWkSXowUO6ssQKnOV0yMVxDYNIsIrzqTFDGH0= +modernc.org/ccgo/v3 v3.16.13/go.mod h1:2Quk+5YgpImhPjv2Qsob1DnZ/4som1lJTodubIcoUkY= +modernc.org/libc v1.22.3 h1:D/g6O5ftAfavceqlLOFwaZuA5KYafKwmr30A6iSqoyY= +modernc.org/libc v1.22.3/go.mod h1:MQrloYP209xa2zHome2a8HLiLm6k0UT8CoHpV74tOFw= +modernc.org/mathutil v1.5.0 h1:rV0Ko/6SfM+8G+yKiyI830l3Wuz1zRutdslNoQ0kfiQ= +modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/memory v1.5.0 h1:N+/8c5rE6EqugZwHii4IFsaJ7MUhoWX07J5tC/iI5Ds= +modernc.org/memory v1.5.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= +modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= +modernc.org/sqlite v1.21.0 h1:4aP4MdUf15i3R3M2mx6Q90WHKz3nZLoz96zlB6tNdow= +modernc.org/sqlite v1.21.0/go.mod h1:XwQ0wZPIh1iKb5mkvCJ3szzbhk+tykC8ZWqTRTgYRwI= +modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw= +modernc.org/token v1.0.1/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= +nhooyr.io/websocket v1.8.6 h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k= +nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= +pgregory.net/rapid v0.5.5 h1:jkgx1TjbQPD/feRoK+S/mXw9e1uj6WilpHrXJowi6oA= +pgregory.net/rapid v0.5.5/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= +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.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= +sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= +sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= +sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= diff --git a/integration_tests/dungeon_test.go b/integration_tests/dungeon_test.go index 3ff58970..81ca2390 100644 --- a/integration_tests/dungeon_test.go +++ b/integration_tests/dungeon_test.go @@ -367,6 +367,12 @@ func modifyGenesisShortProposals(votingPeriod string, maxDepositPeriod string) f if err := dyno.Set(g, "100", "app_state", "gov", "params", "min_deposit", 0, "amount"); err != nil { return nil, fmt.Errorf("failed to set voting period in genesis json: %w", err) } + if err := dyno.Set(g, "0.0", "app_state", "mint", "minter", "inflation"); err != nil { + return nil, fmt.Errorf("failed to set inflation change in genesis json: %w", err) + } + if err := dyno.Set(g, "0.0", "app_state", "mint", "params", "inflation_rate_change"); err != nil { + return nil, fmt.Errorf("failed to set rate of inflation change in genesis json: %w", err) + } out, err := json.Marshal(g) if err != nil { return nil, fmt.Errorf("failed to marshal genesis bytes to json: %w", err) diff --git a/integration_tests/send_test.go b/integration_tests/send_test.go index 31a4f30b..5357e095 100644 --- a/integration_tests/send_test.go +++ b/integration_tests/send_test.go @@ -4,12 +4,13 @@ import ( "context" "encoding/json" "fmt" - authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" "os" "strings" "testing" "time" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + xiontypes "github.com/burnt-labs/xion/x/xion/types" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/types" @@ -17,17 +18,12 @@ import ( "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" "github.com/strangelove-ventures/interchaintest/v7/ibc" "github.com/strangelove-ventures/interchaintest/v7/testreporter" + "github.com/strangelove-ventures/interchaintest/v7/testutil" "github.com/stretchr/testify/require" "go.uber.org/zap/zaptest" ) -func TestXionSendPlatformFee(t *testing.T) { - if testing.Short() { - t.Skip("skipping in short mode") - } - - t.Parallel() - +func BuildXionChain(t *testing.T) (*cosmos.CosmosChain, context.Context){ ctx := context.Background() var numFullNodes = 1 @@ -105,7 +101,18 @@ func TestXionSendPlatformFee(t *testing.T) { SkipPathCreation: false}, ), ) + return xion, ctx +} + +func TestXionSendPlatformFee(t *testing.T) { + if testing.Short() { + t.Skip("skipping in short mode") + } + t.Parallel() + + xion, ctx := BuildXionChain(t) + // Create and Fund User Wallets t.Log("creating and funding user accounts") fundAmount := int64(10_000_000) @@ -216,3 +223,56 @@ func TestXionSendPlatformFee(t *testing.T) { require.NoError(t, err) require.Equal(t, uint64(290), uint64(postReceivingBalance)) } + +func TestMintModuleInflationNoTransaction(t *testing.T) { + if testing.Short() { + t.Skip("skipping in short mode") + } + + t.Parallel() + + xion, ctx := BuildXionChain(t) + // Get the total bank supply + jsonRes := make(map[string]interface{}) + queryRes, _, err := xion.FullNodes[0].ExecQuery(ctx, "bank", "total") + require.NoError(t, err) + + require.NoError(t, json.Unmarshal(queryRes, &jsonRes)) + + // Presuming we are the only denom on the chain + totalSupply := jsonRes["supply"] + xionCoins, ok := totalSupply.([]interface{}) + require.True(t, ok) + require.NotEmpty(t, xionCoins) + xionCoin, ok := xionCoins[0].(map[string]interface{}) + require.True(t, ok) + + // Make sure we selected the uxion denom + require.Equal(t, xionCoin["denom"], xion.Config().Denom) + initialXionSupply := xionCoin["amount"] + require.NotNil(t, initialXionSupply) + t.Logf("Initial Xion supply: %s", initialXionSupply) + + // Wait for some blocks and check if the supply increases + chainHeight, _ := xion.Height(ctx) + testutil.WaitForBlocks(ctx, int(chainHeight) + 10, xion) + // Get the total bank supply + currentResJson := make(map[string]interface{}) + currentSupplyRes, _, queryErr := xion.FullNodes[0].ExecQuery(ctx, "bank", "total") + require.NoError(t, queryErr) + require.NoError(t, json.Unmarshal(currentSupplyRes, ¤tResJson)) + + newTotalSupply := currentResJson["supply"] + currentXionCoins, ok := newTotalSupply.([]interface{}) + require.True(t, ok) + require.NotEmpty(t, currentXionCoins) + currentXionCoin, ok := currentXionCoins[0].(map[string]interface{}) + require.True(t, ok) + require.NotEmpty(t, currentXionCoin) + + currentXionSupply := currentXionCoin["amount"] + require.NotNil(t, currentXionSupply) + t.Logf("Current Xion supply: %s", currentXionSupply) + + require.Equal(t, initialXionSupply, currentXionSupply) +} \ No newline at end of file From 187e30280aca521924f9e047337ebc6704e51483 Mon Sep 17 00:00:00 2001 From: peartes Date: Tue, 16 May 2023 01:25:36 +0100 Subject: [PATCH 048/501] chore: use dyno to handle dynamic json type --- integration_tests/send_test.go | 34 +++++++++++++++------------------- 1 file changed, 15 insertions(+), 19 deletions(-) diff --git a/integration_tests/send_test.go b/integration_tests/send_test.go index 5357e095..b60db299 100644 --- a/integration_tests/send_test.go +++ b/integration_tests/send_test.go @@ -10,6 +10,7 @@ import ( "time" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + "github.com/icza/dyno" xiontypes "github.com/burnt-labs/xion/x/xion/types" "github.com/cosmos/cosmos-sdk/codec" @@ -240,17 +241,16 @@ func TestMintModuleInflationNoTransaction(t *testing.T) { require.NoError(t, json.Unmarshal(queryRes, &jsonRes)) // Presuming we are the only denom on the chain - totalSupply := jsonRes["supply"] - xionCoins, ok := totalSupply.([]interface{}) - require.True(t, ok) - require.NotEmpty(t, xionCoins) - xionCoin, ok := xionCoins[0].(map[string]interface{}) - require.True(t, ok) - + totalSupply, err := dyno.GetSlice(jsonRes, "supply") + require.NoError(t, err) + xionCoin := totalSupply[0] + require.NotEmpty(t, xionCoin) // Make sure we selected the uxion denom - require.Equal(t, xionCoin["denom"], xion.Config().Denom) - initialXionSupply := xionCoin["amount"] - require.NotNil(t, initialXionSupply) + xionCoinDenom, err := dyno.GetString(xionCoin, "denom") + require.NoError(t, err) + require.Equal(t, xionCoinDenom, xion.Config().Denom) + initialXionSupply, err := dyno.GetString(xionCoin, "amount") + require.NoError(t, err) t.Logf("Initial Xion supply: %s", initialXionSupply) // Wait for some blocks and check if the supply increases @@ -262,16 +262,12 @@ func TestMintModuleInflationNoTransaction(t *testing.T) { require.NoError(t, queryErr) require.NoError(t, json.Unmarshal(currentSupplyRes, ¤tResJson)) - newTotalSupply := currentResJson["supply"] - currentXionCoins, ok := newTotalSupply.([]interface{}) - require.True(t, ok) - require.NotEmpty(t, currentXionCoins) - currentXionCoin, ok := currentXionCoins[0].(map[string]interface{}) - require.True(t, ok) - require.NotEmpty(t, currentXionCoin) + newTotalSupply, err := dyno.GetSlice(currentResJson, "supply") + require.NoError(t, err) + currentXionCoin := newTotalSupply[0] - currentXionSupply := currentXionCoin["amount"] - require.NotNil(t, currentXionSupply) + currentXionSupply, err := dyno.GetString(currentXionCoin, "amount") + require.NoError(t, err) t.Logf("Current Xion supply: %s", currentXionSupply) require.Equal(t, initialXionSupply, currentXionSupply) From 8df850f1f62cae7d7461dc9fa447082cfdefe58d Mon Sep 17 00:00:00 2001 From: peartes Date: Tue, 16 May 2023 02:09:55 +0100 Subject: [PATCH 049/501] chore: properly set inflation to 0 --- integration_tests/dungeon_test.go | 9 ++++++--- integration_tests/send_test.go | 27 ++++++++++++++++++++++++++- 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/integration_tests/dungeon_test.go b/integration_tests/dungeon_test.go index 81ca2390..bbf02f02 100644 --- a/integration_tests/dungeon_test.go +++ b/integration_tests/dungeon_test.go @@ -367,10 +367,13 @@ func modifyGenesisShortProposals(votingPeriod string, maxDepositPeriod string) f if err := dyno.Set(g, "100", "app_state", "gov", "params", "min_deposit", 0, "amount"); err != nil { return nil, fmt.Errorf("failed to set voting period in genesis json: %w", err) } - if err := dyno.Set(g, "0.0", "app_state", "mint", "minter", "inflation"); err != nil { - return nil, fmt.Errorf("failed to set inflation change in genesis json: %w", err) + if err := dyno.Set(g, "0", "app_state", "mint", "params", "inflation_min"); err != nil { + return nil, fmt.Errorf("failed to set inflation in genesis json: %w", err) } - if err := dyno.Set(g, "0.0", "app_state", "mint", "params", "inflation_rate_change"); err != nil { + if err := dyno.Set(g, "0", "app_state", "mint", "params", "inflation_max"); err != nil { + return nil, fmt.Errorf("failed to set inflation in genesis json: %w", err) + } + if err := dyno.Set(g, "0", "app_state", "mint", "params", "inflation_rate_change"); err != nil { return nil, fmt.Errorf("failed to set rate of inflation change in genesis json: %w", err) } out, err := json.Marshal(g) diff --git a/integration_tests/send_test.go b/integration_tests/send_test.go index b60db299..f41d9adf 100644 --- a/integration_tests/send_test.go +++ b/integration_tests/send_test.go @@ -5,6 +5,7 @@ import ( "encoding/json" "fmt" "os" + "strconv" "strings" "testing" "time" @@ -233,9 +234,33 @@ func TestMintModuleInflationNoTransaction(t *testing.T) { t.Parallel() xion, ctx := BuildXionChain(t) + // Query the mint module for the current inflation + var inflation json.Number + queryRes, _, err := xion.FullNodes[0].ExecQuery(ctx, "mint", "inflation") + require.NoError(t, err) + require.NoError(t, json.Unmarshal(queryRes, &inflation)) + inflationValue, err := inflation.Float64() + t.Logf("Current inflation: %f", inflationValue) + require.NoError(t, err, "inflation should be a float") + // Make sure inflation is 0 + require.Equal(t, 0.0, inflationValue) + + // Query the mint module for inflation rate change + var params = make(map[string]interface{}) + queryRes, _, err = xion.FullNodes[0].ExecQuery(ctx, "mint", "params") + require.NoError(t, err) + require.NoError(t, json.Unmarshal(queryRes, ¶ms)) + inflationRateChange, err := dyno.GetString(params, "inflation_rate_change") + require.NoError(t, err, "inflation_rate_change should be a string") + inflationRateChangeValue, err := strconv.ParseFloat(inflationRateChange, 64) + require.NoError(t, err, "inflation_rate_change should be convertible to float") + t.Logf("Current inflation rate change: %f", inflationRateChangeValue) + // Make sure inflation rate change is 0 + require.Equal(t, 0.0, inflationRateChangeValue) + // Get the total bank supply jsonRes := make(map[string]interface{}) - queryRes, _, err := xion.FullNodes[0].ExecQuery(ctx, "bank", "total") + queryRes, _, err = xion.FullNodes[0].ExecQuery(ctx, "bank", "total") require.NoError(t, err) require.NoError(t, json.Unmarshal(queryRes, &jsonRes)) From 2c97643e9e128a0159148a3dfbdec69182fd24da Mon Sep 17 00:00:00 2001 From: peartes Date: Tue, 16 May 2023 02:11:19 +0100 Subject: [PATCH 050/501] chore: rewording --- integration_tests/send_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integration_tests/send_test.go b/integration_tests/send_test.go index f41d9adf..fe40c1d2 100644 --- a/integration_tests/send_test.go +++ b/integration_tests/send_test.go @@ -278,7 +278,7 @@ func TestMintModuleInflationNoTransaction(t *testing.T) { require.NoError(t, err) t.Logf("Initial Xion supply: %s", initialXionSupply) - // Wait for some blocks and check if the supply increases + // Wait for some blocks and check if that supply stays the same chainHeight, _ := xion.Height(ctx) testutil.WaitForBlocks(ctx, int(chainHeight) + 10, xion) // Get the total bank supply From 411a91ba6a49dd0999c4e698f2980eb2584d8a49 Mon Sep 17 00:00:00 2001 From: peartes Date: Tue, 16 May 2023 11:48:53 +0100 Subject: [PATCH 051/501] chore: rename test --- integration_tests/send_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integration_tests/send_test.go b/integration_tests/send_test.go index fe40c1d2..9134b9c7 100644 --- a/integration_tests/send_test.go +++ b/integration_tests/send_test.go @@ -226,7 +226,7 @@ func TestXionSendPlatformFee(t *testing.T) { require.Equal(t, uint64(290), uint64(postReceivingBalance)) } -func TestMintModuleInflationNoTransaction(t *testing.T) { +func TestMintModuleNoInflationNoFees(t *testing.T) { if testing.Short() { t.Skip("skipping in short mode") } From 31e3d63e241901b57b9b849de21a26a53ddda97e Mon Sep 17 00:00:00 2001 From: peartes Date: Tue, 16 May 2023 12:31:23 +0100 Subject: [PATCH 052/501] chore: make sure distribution balance remains the same when inflation is off --- integration_tests/send_test.go | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/integration_tests/send_test.go b/integration_tests/send_test.go index 9134b9c7..47f4b96a 100644 --- a/integration_tests/send_test.go +++ b/integration_tests/send_test.go @@ -234,9 +234,22 @@ func TestMintModuleNoInflationNoFees(t *testing.T) { t.Parallel() xion, ctx := BuildXionChain(t) + // Get the distribution module account address + var moduleAccount map[string]interface{} + // Query the distribution module account + queryRes, _, err := xion.FullNodes[0].ExecQuery(ctx, "auth", "module-account", "distribution") + require.NoError(t, err) + require.NoError(t, json.Unmarshal(queryRes, &moduleAccount)) + moduleAccountAddress, err := dyno.GetString(moduleAccount, "account", "base_account", "address") + require.NoError(t, err) + // Get the distribution module account balance + initialModuleAccountBalance, err := xion.GetBalance(ctx, moduleAccountAddress, xion.Config().Denom) + require.NoError(t, err) + t.Logf("Initial distribution address balance: %d", initialModuleAccountBalance) + // Query the mint module for the current inflation var inflation json.Number - queryRes, _, err := xion.FullNodes[0].ExecQuery(ctx, "mint", "inflation") + queryRes, _, err = xion.FullNodes[0].ExecQuery(ctx, "mint", "inflation") require.NoError(t, err) require.NoError(t, json.Unmarshal(queryRes, &inflation)) inflationValue, err := inflation.Float64() @@ -281,6 +294,12 @@ func TestMintModuleNoInflationNoFees(t *testing.T) { // Wait for some blocks and check if that supply stays the same chainHeight, _ := xion.Height(ctx) testutil.WaitForBlocks(ctx, int(chainHeight) + 10, xion) + + // Get the distribution module account balance + currentModuleAccountBalance, err := xion.GetBalance(ctx, moduleAccountAddress, xion.Config().Denom) + require.NoError(t, err) + t.Logf("Current distribution address balance: %d", currentModuleAccountBalance) + // Get the total bank supply currentResJson := make(map[string]interface{}) currentSupplyRes, _, queryErr := xion.FullNodes[0].ExecQuery(ctx, "bank", "total") @@ -296,4 +315,5 @@ func TestMintModuleNoInflationNoFees(t *testing.T) { t.Logf("Current Xion supply: %s", currentXionSupply) require.Equal(t, initialXionSupply, currentXionSupply) + require.Equal(t, initialModuleAccountBalance, currentModuleAccountBalance) } \ No newline at end of file From bb9bde9571bc4b7169180ba58c830c2cfbd4f0cb Mon Sep 17 00:00:00 2001 From: peartes Date: Tue, 16 May 2023 12:32:06 +0100 Subject: [PATCH 053/501] chore: formatting --- integration_tests/send_test.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/integration_tests/send_test.go b/integration_tests/send_test.go index 47f4b96a..4b8cac2d 100644 --- a/integration_tests/send_test.go +++ b/integration_tests/send_test.go @@ -75,7 +75,7 @@ func BuildXionChain(t *testing.T) (*cosmos.CosmosChain, context.Context){ // t, client, network) // Prep Interchain - const ibcPath = "xion-osmo-dungeon-test" + // const ibcPath = "xion-osmo-dungeon-test" ic := ibctest.NewInterchain(). AddChain(xion) //AddRelayer(relayer, "relayer"). @@ -162,6 +162,7 @@ func TestXionSendPlatformFee(t *testing.T) { cdc := codec.NewProtoCodec(xion.Config().EncodingConfig.InterfaceRegistry) msg, err := cdc.MarshalInterfaceJSON(&setPlatformPercentageMsg) + require.NoError(t, err) prop := cosmos.Proposal{ Messages: []json.RawMessage{msg}, From 6a6e40409cdcbe9bedd984b2bfbb047812820d75 Mon Sep 17 00:00:00 2001 From: Eduardo Diaz Date: Tue, 16 May 2023 14:36:49 -0400 Subject: [PATCH 054/501] initial test-integration command --- Makefile | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 8c1f7a7b..a760e318 100644 --- a/Makefile +++ b/Makefile @@ -8,6 +8,7 @@ LEDGER_ENABLED ?= true SDK_PACK := $(shell go list -m github.com/cosmos/cosmos-sdk | sed 's/ /\@/g') BINDIR ?= $(GOPATH)/bin SIMAPP = ./app +XION_IMAGE=xion:local # for dockerized protobuf tools DOCKER := $(shell which docker) @@ -123,7 +124,10 @@ test: test-unit test-all: check test-race test-cover test-unit: - @VERSION=$(VERSION) go test -mod=readonly -tags='ledger test_ledger_mock' ./... + @version=$(version) go test -mod=readonly -tags='ledger test_ledger_mock' ./... + +test-integration: + @XION_IMAGE=$(XION_IMAGE) cd integration_tests && go test -mod=readonly -tags='ledger test_ledger_mock' ./... test-race: @VERSION=$(VERSION) go test -mod=readonly -race -tags='ledger test_ledger_mock' ./... @@ -144,7 +148,7 @@ test-sim-multi-seed-short: runsim test-sim-deterministic: runsim @echo "Running short multi-seed application simulation. This may take awhile!" - @$(BINDIR)/runsim -Jobs=4 -SimAppPkg=$(SIMAPP) -ExitOnFail 1 1 TestAppStateDeterminism + @$(BINDIR)/runsim -obs=4 -SimAppPkg=$(SIMAPP) -ExitOnFail 1 1 TestAppStateDeterminism ############################################################################### ### Linting ### From f1ca353bbf83eb99c3ae7eea88ccf4b08430ddc8 Mon Sep 17 00:00:00 2001 From: Eduardo Diaz Date: Tue, 16 May 2023 14:44:45 -0400 Subject: [PATCH 055/501] runn all tests on CI --- .github/workflows/tests.yml | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 .github/workflows/tests.yml diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml new file mode 100644 index 00000000..2fea9a6f --- /dev/null +++ b/.github/workflows/tests.yml @@ -0,0 +1,35 @@ +name: Test + +on: + push: + branches: [main] + pull_request: + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: technote-space/get-diff-action@v4 + with: + PATTERNS: | + **/**.go + go.mod + go.sum + - name: Set up Golang + uses: actions/setup-go@v3 + with: + go-version: ~1.19 + - name: Setup Golang caches + uses: actions/cache@v3 + with: + path: | + ~/.cache/go-build + ~/go/pkg/mod + key: ${{ runner.os }}-golang-${{ hashFiles('**/go.sum') }} + restore-keys: | + ${{ runner.os }}-golang- + - name: Build + run: go build -v ./... + - name: Test + run: go test -v ./... From b6e71d17bd8d4115e9f47b3299df70527413b3a8 Mon Sep 17 00:00:00 2001 From: peartes Date: Tue, 16 May 2023 20:07:52 +0100 Subject: [PATCH 056/501] chore: add more integration tests --- integration_tests/send_test.go | 220 ++++++++++++++++++++++----------- 1 file changed, 149 insertions(+), 71 deletions(-) diff --git a/integration_tests/send_test.go b/integration_tests/send_test.go index 4b8cac2d..7c6b198e 100644 --- a/integration_tests/send_test.go +++ b/integration_tests/send_test.go @@ -4,12 +4,14 @@ import ( "context" "encoding/json" "fmt" + "math/rand" "os" "strconv" "strings" "testing" "time" + "cosmossdk.io/math" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" "github.com/icza/dyno" @@ -25,7 +27,7 @@ import ( "go.uber.org/zap/zaptest" ) -func BuildXionChain(t *testing.T) (*cosmos.CosmosChain, context.Context){ +func BuildXionChain(t *testing.T) (*cosmos.CosmosChain, context.Context) { ctx := context.Background() var numFullNodes = 1 @@ -114,7 +116,7 @@ func TestXionSendPlatformFee(t *testing.T) { t.Parallel() xion, ctx := BuildXionChain(t) - + // Create and Fund User Wallets t.Log("creating and funding user accounts") fundAmount := int64(10_000_000) @@ -227,54 +229,13 @@ func TestXionSendPlatformFee(t *testing.T) { require.Equal(t, uint64(290), uint64(postReceivingBalance)) } -func TestMintModuleNoInflationNoFees(t *testing.T) { - if testing.Short() { - t.Skip("skipping in short mode") +func getTotalCoinSupplyInBank(t *testing.T, xion *cosmos.CosmosChain, ctx context.Context, denom string, blockHeight uint64) string { + if blockHeight == 0 { + blockHeight, _ = xion.Height(ctx) + require.Greater(t, blockHeight, 0) } - - t.Parallel() - - xion, ctx := BuildXionChain(t) - // Get the distribution module account address - var moduleAccount map[string]interface{} - // Query the distribution module account - queryRes, _, err := xion.FullNodes[0].ExecQuery(ctx, "auth", "module-account", "distribution") - require.NoError(t, err) - require.NoError(t, json.Unmarshal(queryRes, &moduleAccount)) - moduleAccountAddress, err := dyno.GetString(moduleAccount, "account", "base_account", "address") - require.NoError(t, err) - // Get the distribution module account balance - initialModuleAccountBalance, err := xion.GetBalance(ctx, moduleAccountAddress, xion.Config().Denom) - require.NoError(t, err) - t.Logf("Initial distribution address balance: %d", initialModuleAccountBalance) - - // Query the mint module for the current inflation - var inflation json.Number - queryRes, _, err = xion.FullNodes[0].ExecQuery(ctx, "mint", "inflation") - require.NoError(t, err) - require.NoError(t, json.Unmarshal(queryRes, &inflation)) - inflationValue, err := inflation.Float64() - t.Logf("Current inflation: %f", inflationValue) - require.NoError(t, err, "inflation should be a float") - // Make sure inflation is 0 - require.Equal(t, 0.0, inflationValue) - - // Query the mint module for inflation rate change - var params = make(map[string]interface{}) - queryRes, _, err = xion.FullNodes[0].ExecQuery(ctx, "mint", "params") - require.NoError(t, err) - require.NoError(t, json.Unmarshal(queryRes, ¶ms)) - inflationRateChange, err := dyno.GetString(params, "inflation_rate_change") - require.NoError(t, err, "inflation_rate_change should be a string") - inflationRateChangeValue, err := strconv.ParseFloat(inflationRateChange, 64) - require.NoError(t, err, "inflation_rate_change should be convertible to float") - t.Logf("Current inflation rate change: %f", inflationRateChangeValue) - // Make sure inflation rate change is 0 - require.Equal(t, 0.0, inflationRateChangeValue) - - // Get the total bank supply jsonRes := make(map[string]interface{}) - queryRes, _, err = xion.FullNodes[0].ExecQuery(ctx, "bank", "total") + queryRes, _, err := xion.FullNodes[0].ExecQuery(ctx, "bank", "total", "--height", strconv.FormatInt(int64(blockHeight), 10)) require.NoError(t, err) require.NoError(t, json.Unmarshal(queryRes, &jsonRes)) @@ -287,34 +248,151 @@ func TestMintModuleNoInflationNoFees(t *testing.T) { // Make sure we selected the uxion denom xionCoinDenom, err := dyno.GetString(xionCoin, "denom") require.NoError(t, err) - require.Equal(t, xionCoinDenom, xion.Config().Denom) + require.Equal(t, xionCoinDenom, denom) initialXionSupply, err := dyno.GetString(xionCoin, "amount") require.NoError(t, err) - t.Logf("Initial Xion supply: %s", initialXionSupply) + return initialXionSupply +} - // Wait for some blocks and check if that supply stays the same - chainHeight, _ := xion.Height(ctx) - testutil.WaitForBlocks(ctx, int(chainHeight) + 10, xion) - - // Get the distribution module account balance - currentModuleAccountBalance, err := xion.GetBalance(ctx, moduleAccountAddress, xion.Config().Denom) +func getAddressBankBalanceAtHeight(t *testing.T, xion *cosmos.CosmosChain, ctx context.Context, address string, denom string, blockHeight uint64) string { + if blockHeight == 0 { + blockHeight, _ = xion.Height(ctx) + require.Greater(t, blockHeight, 0) + } + jsonRes := make(map[string]interface{}) + queryRes, _, err := xion.FullNodes[0].ExecQuery(ctx, "bank", "balances", address, "--height", strconv.FormatInt(int64(blockHeight), 10)) + require.NoError(t, err) + + require.NoError(t, json.Unmarshal(queryRes, &jsonRes)) + + balances, err := dyno.GetSlice(jsonRes, "balances") + require.NoError(t, err) + if len(balances) == 0 { + return "0" + } + // Make sure we selected the uxion denom + balanceDenom, err := dyno.GetString(balances[0], "denom") require.NoError(t, err) - t.Logf("Current distribution address balance: %d", currentModuleAccountBalance) - - // Get the total bank supply - currentResJson := make(map[string]interface{}) - currentSupplyRes, _, queryErr := xion.FullNodes[0].ExecQuery(ctx, "bank", "total") - require.NoError(t, queryErr) - require.NoError(t, json.Unmarshal(currentSupplyRes, ¤tResJson)) - - newTotalSupply, err := dyno.GetSlice(currentResJson, "supply") + require.Equal(t, balanceDenom, denom) + balance, err := dyno.GetString(balances[0], "amount") + require.NoError(t, err) + t.Logf("Balance for address %s: %s", address, balance) + return balance +} + +func GetModuleAddress(t *testing.T, xion *cosmos.CosmosChain, ctx context.Context, moduleName string) string { + jsonRes := make(map[string]interface{}) + queryRes, _, err := xion.FullNodes[0].ExecQuery(ctx, "auth", "module-account", moduleName) + require.NoError(t, err) + + require.NoError(t, json.Unmarshal(queryRes, &jsonRes)) + + moduleAddress, err := dyno.GetString(jsonRes, "account", "base_account", "address") require.NoError(t, err) - currentXionCoin := newTotalSupply[0] + t.Logf("%s module address: %s", moduleName, moduleAddress) + return moduleAddress +} + +// This test confirms the property of the module described at +// https://www.notion.so/burntlabs/Mint-Module-Blog-Post-78f59fb108c04e9ea5fa826dda30a340 +// Chain must have at least 12 blocks +func MintTestHarness(t *testing.T, xion *cosmos.CosmosChain, ctx context.Context) { + + // We pick a random block height and 10 contiguous blocks from that height + // and then test the property over these blocks - currentXionSupply, err := dyno.GetString(currentXionCoin, "amount") + currentBlockHeight, err := xion.Height(ctx) require.NoError(t, err) - t.Logf("Current Xion supply: %s", currentXionSupply) + require.GreaterOrEqual(t, currentBlockHeight, uint64(12)) + // Get a random number from 1 to the (currentBlockHeight - 10) + randomHeight := rand.Intn(int(currentBlockHeight)-11) + 2 + + for i := randomHeight; i < randomHeight+10; i++ { + t.Logf("Current random height: %d", randomHeight) + // Get bank supply at previous height + previousXionBankSupply, err := strconv.ParseUint(getTotalCoinSupplyInBank(t, xion, ctx, xion.Config().Denom, uint64(randomHeight-1)), 10, 64) + t.Logf("Previous Xion bank supply: %d", previousXionBankSupply) + require.NoError(t, err, "bank supply should be convertible to an int64") + // Get bank supply at current height + currentXionBankSupply, err := strconv.ParseUint(getTotalCoinSupplyInBank(t, xion, ctx, xion.Config().Denom, uint64(randomHeight)), 10, 64) + t.Logf("Current Xion bank supply: %d", currentXionBankSupply) + require.NoError(t, err, "bank supply should be convertible to an int64") + tokenChange := currentXionBankSupply - previousXionBankSupply + + // Get the distribution module account address + distributionModuleAddress := GetModuleAddress(t, xion, ctx, "distribution") + // Get distribution module account balance in previous height + previousDistributionModuleBalance, err := xion.GetBalance(ctx, distributionModuleAddress, xion.Config().Denom) + require.NoError(t, err, "distribution module balance should be convertible to an int64") + // Get distribution module account balance in current height + currentDistributionModuleBalance, err := strconv.ParseUint(getAddressBankBalanceAtHeight(t, xion, ctx, distributionModuleAddress, xion.Config().Denom, uint64(randomHeight)), 10, 64) + require.NoError(t, err, "distribution module balance should be convertible to an int64") + + delta := currentDistributionModuleBalance - uint64(previousDistributionModuleBalance) + + feesAccrued := delta - tokenChange + + // Query the current block provision + var annualProvision json.Number + queryRes, _, err := xion.FullNodes[0].ExecQuery(ctx, "mint", "annual-provisions", "--height", strconv.FormatInt(int64(randomHeight), 10)) + require.NoError(t, err) + require.NoError(t, json.Unmarshal(queryRes, &annualProvision)) + // Query the block per year + var params = make(map[string]interface{}) + queryRes, _, err = xion.FullNodes[0].ExecQuery(ctx, "mint", "params") + require.NoError(t, err) + require.NoError(t, json.Unmarshal(queryRes, ¶ms)) + blocksPerYear, err := dyno.GetInteger(params, "blocks_per_year") + require.NoError(t, err) + // Calculate the block provision + blockProvision := math.LegacyMustNewDecFromStr(annualProvision.String()).QuoInt(math.NewInt(blocksPerYear)) // This ideally is the minted tokens for the block + + // Make sure the minted tokens is equal to the block provision - fees accrued + if blockProvision.TruncateInt().GT(math.NewIntFromUint64(feesAccrued)) { + // We have minted tokens + mintedTokens := blockProvision.TruncateInt().Sub(math.NewIntFromUint64(feesAccrued)) + require.Equal(t, mintedTokens, math.NewInt(int64(tokenChange))) + } else if blockProvision.TruncateInt().LT(math.NewIntFromUint64(feesAccrued)) { + // We have burned tokens + burnedTokens := math.NewIntFromUint64(feesAccrued).Sub(blockProvision.TruncateInt()) + require.Equal(t, burnedTokens, math.NewInt(int64(tokenChange))) + } else { + // We have not minted or burned tokens + require.Equal(t, math.NewInt(0), math.NewInt(int64(tokenChange))) + } + } +} - require.Equal(t, initialXionSupply, currentXionSupply) - require.Equal(t, initialModuleAccountBalance, currentModuleAccountBalance) -} \ No newline at end of file +func TestMintModuleNoInflationNoFees(t *testing.T) { + if testing.Short() { + t.Skip("skipping in short mode") + } + + t.Parallel() + + xion, ctx := BuildXionChain(t) + + // Wait for some blocks and check if that supply stays the same + chainHeight, _ := xion.Height(ctx) + testutil.WaitForBlocks(ctx, int(chainHeight)+10, xion) + + // Run test harness + MintTestHarness(t, xion, ctx) +} + +func TestMintModuleInflationNoFees(t *testing.T) { + if testing.Short() { + t.Skip("skipping in short mode") + } + + t.Parallel() + + xion, ctx := BuildXionChain(t) + + // Wait for some blocks and check if that supply stays the same + chainHeight, _ := xion.Height(ctx) + testutil.WaitForBlocks(ctx, int(chainHeight)+10, xion) + + // Run test harness + MintTestHarness(t, xion, ctx) +} From 0f3b18318eed8c38489789439aee72217f918b85 Mon Sep 17 00:00:00 2001 From: Kehinde Faleye Date: Tue, 16 May 2023 20:08:59 +0100 Subject: [PATCH 057/501] DAPP-531: Feat/mint test (#45) * WIP: testing mint module base case * chore: use dyno to handle dynamic json type * chore: properly set inflation to 0 * chore: rewording * chore: rename test * chore: make sure distribution balance remains the same when inflation is off * chore: formatting * re-org of mint test * clear comments --------- Co-authored-by: Ash --- .github/workflows/integration-tests.yml | 1 + go.work | 6 + go.work.sum | 2014 +++++++++++++++++++++++ integration_tests/dungeon_test.go | 32 - integration_tests/mint_test.go | 104 ++ integration_tests/send_test.go | 87 +- integration_tests/utils.go | 129 ++ 7 files changed, 2257 insertions(+), 116 deletions(-) create mode 100644 go.work create mode 100644 go.work.sum create mode 100644 integration_tests/mint_test.go create mode 100644 integration_tests/utils.go diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index 37f2da2a..b9ad8fa8 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -68,6 +68,7 @@ jobs: test_type: - "DungeonTransferBlock" - "XionSendPlatformFee" + - "MintModuleNoInflationNoFees" steps: - name: Set up Go 1.18 diff --git a/go.work b/go.work new file mode 100644 index 00000000..6a397f52 --- /dev/null +++ b/go.work @@ -0,0 +1,6 @@ +go 1.20 + +use ( + . + ./integration_tests +) diff --git a/go.work.sum b/go.work.sum new file mode 100644 index 00000000..78eed32e --- /dev/null +++ b/go.work.sum @@ -0,0 +1,2014 @@ +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.43.0/go.mod h1:BOSR3VbTLkk6FDC/TcffxP4NF/FFBGA5ku+jvKOP7pg= +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.44.3/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.51.0/go.mod h1:hWtGJ6gnXH+KgDv+V0zFGDvpi07n3z8ZNj3T1RW0Gcw= +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.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= +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 v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= +cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= +cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= +cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= +cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= +cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= +cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= +cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= +cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= +cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= +cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= +cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= +cloud.google.com/go v0.107.0/go.mod h1:wpc2eNrD7hXUTy8EKS10jkxpZBjASrORK7goS+3YX2I= +cloud.google.com/go v0.110.0 h1:Zc8gqp3+a9/Eyph2KDmcGaPtbKRIoqq4YTlL4NMD0Ys= +cloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY= +cloud.google.com/go/accessapproval v1.5.0/go.mod h1:HFy3tuiGvMdcd/u+Cu5b9NkO1pEICJ46IR82PoUdplw= +cloud.google.com/go/accesscontextmanager v1.4.0/go.mod h1:/Kjh7BBu/Gh83sv+K60vN9QE5NJcd80sU33vIe2IFPE= +cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= +cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= +cloud.google.com/go/aiplatform v1.27.0/go.mod h1:Bvxqtl40l0WImSb04d0hXFU7gDOiq9jQmorivIiWcKg= +cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= +cloud.google.com/go/analytics v0.12.0/go.mod h1:gkfj9h6XRf9+TS4bmuhPEShsh3hH8PAZzm/41OOhQd4= +cloud.google.com/go/apigateway v1.4.0/go.mod h1:pHVY9MKGaH9PQ3pJ4YLzoj6U5FUDeDFBllIz7WmzJoc= +cloud.google.com/go/apigeeconnect v1.4.0/go.mod h1:kV4NwOKqjvt2JYR0AoIWo2QGfoRtn/pkS3QlHp0Ni04= +cloud.google.com/go/apigeeregistry v0.4.0/go.mod h1:EUG4PGcsZvxOXAdyEghIdXwAEi/4MEaoqLMLDMIwKXY= +cloud.google.com/go/apikeys v0.4.0/go.mod h1:XATS/yqZbaBK0HOssf+ALHp8jAlNHUgyfprvNcBIszU= +cloud.google.com/go/appengine v1.5.0/go.mod h1:TfasSozdkFI0zeoxW3PTBLiNqRmzraodCWatWI9Dmak= +cloud.google.com/go/area120 v0.5.0/go.mod h1:DE/n4mp+iqVyvxHN41Vf1CR602GiHQjFPusMFW6bGR4= +cloud.google.com/go/area120 v0.6.0/go.mod h1:39yFJqWVgm0UZqWTOdqkLhjoC7uFfgXRC8g/ZegeAh0= +cloud.google.com/go/artifactregistry v1.6.0/go.mod h1:IYt0oBPSAGYj/kprzsBjZ/4LnG/zOcHyFHjWPCi6SAQ= +cloud.google.com/go/artifactregistry v1.7.0/go.mod h1:mqTOFOnGZx8EtSqK/ZWcsm/4U8B77rbcLP6ruDU2Ixk= +cloud.google.com/go/artifactregistry v1.9.0/go.mod h1:2K2RqvA2CYvAeARHRkLDhMDJ3OXy26h3XW+3/Jh2uYc= +cloud.google.com/go/asset v1.5.0/go.mod h1:5mfs8UvcM5wHhqtSv8J1CtxxaQq3AdBxxQi2jGW/K4o= +cloud.google.com/go/asset v1.7.0/go.mod h1:YbENsRK4+xTiL+Ofoj5Ckf+O17kJtgp3Y3nn4uzZz5s= +cloud.google.com/go/asset v1.8.0/go.mod h1:mUNGKhiqIdbr8X7KNayoYvyc4HbbFO9URsjbytpUaW0= +cloud.google.com/go/asset v1.10.0/go.mod h1:pLz7uokL80qKhzKr4xXGvBQXnzHn5evJAEAtZiIb0wY= +cloud.google.com/go/assuredworkloads v1.5.0/go.mod h1:n8HOZ6pff6re5KYfBXcFvSViQjDwxFkAkmUFffJRbbY= +cloud.google.com/go/assuredworkloads v1.6.0/go.mod h1:yo2YOk37Yc89Rsd5QMVECvjaMKymF9OP+QXWlKXUkXw= +cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVoYoxeLBoj4XkKYscNI= +cloud.google.com/go/assuredworkloads v1.9.0/go.mod h1:kFuI1P78bplYtT77Tb1hi0FMxM0vVpRC7VVoJC3ZoT0= +cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= +cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8= +cloud.google.com/go/automl v1.8.0/go.mod h1:xWx7G/aPEe/NP+qzYXktoBSDfjO+vnKMGgsApGJJquM= +cloud.google.com/go/baremetalsolution v0.4.0/go.mod h1:BymplhAadOO/eBa7KewQ0Ppg4A4Wplbn+PsFKRLo0uI= +cloud.google.com/go/batch v0.4.0/go.mod h1:WZkHnP43R/QCGQsZ+0JyG4i79ranE2u8xvjq/9+STPE= +cloud.google.com/go/beyondcorp v0.3.0/go.mod h1:E5U5lcrcXMsCuoDNyGrpyTm/hn7ne941Jz2vmksAxW8= +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/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA= +cloud.google.com/go/bigquery v1.44.0/go.mod h1:0Y33VqXTEsbamHJvJHdFmtqHvMIY28aK1+dFsvaChGc= +cloud.google.com/go/bigtable v1.2.0/go.mod h1:JcVAOl45lrTmQfLj7T6TxyMzIN/3FGGcFm+2xVAli2o= +cloud.google.com/go/billing v1.4.0/go.mod h1:g9IdKBEFlItS8bTtlrZdVLWSSdSyFUZKXNS02zKMOZY= +cloud.google.com/go/billing v1.5.0/go.mod h1:mztb1tBc3QekhjSgmpf/CV4LzWXLzCArwpLmP2Gm88s= +cloud.google.com/go/billing v1.7.0/go.mod h1:q457N3Hbj9lYwwRbnlD7vUpyjq6u5U1RAOArInEiD5Y= +cloud.google.com/go/binaryauthorization v1.1.0/go.mod h1:xwnoWu3Y84jbuHa0zd526MJYmtnVXn0syOjaJgy4+dM= +cloud.google.com/go/binaryauthorization v1.2.0/go.mod h1:86WKkJHtRcv5ViNABtYMhhNWRrD1Vpi//uKEy7aYEfI= +cloud.google.com/go/binaryauthorization v1.4.0/go.mod h1:tsSPQrBd77VLplV70GUhBf/Zm3FsKmgSqgm4UmiDItk= +cloud.google.com/go/certificatemanager v1.4.0/go.mod h1:vowpercVFyqs8ABSmrdV+GiFf2H/ch3KyudYQEMM590= +cloud.google.com/go/channel v1.9.0/go.mod h1:jcu05W0my9Vx4mt3/rEHpfxc9eKi9XwsdDL8yBMbKUk= +cloud.google.com/go/cloudbuild v1.4.0/go.mod h1:5Qwa40LHiOXmz3386FrjrYM93rM/hdRr7b53sySrTqA= +cloud.google.com/go/clouddms v1.4.0/go.mod h1:Eh7sUGCC+aKry14O1NRljhjyrr0NFC0G2cjwX0cByRk= +cloud.google.com/go/cloudtasks v1.5.0/go.mod h1:fD92REy1x5woxkKEkLdvavGnPJGEn8Uic9nWuLzqCpY= +cloud.google.com/go/cloudtasks v1.6.0/go.mod h1:C6Io+sxuke9/KNRkbQpihnW93SWDU3uXt92nu85HkYI= +cloud.google.com/go/cloudtasks v1.8.0/go.mod h1:gQXUIwCSOI4yPVK7DgTVFiiP0ZW/eQkydWzwVMdHxrI= +cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= +cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= +cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= +cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s= +cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= +cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= +cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= +cloud.google.com/go/compute v1.14.0/go.mod h1:YfLtxrj9sU4Yxv+sXzZkyPjEyPBZfXHUvjxega5vAdo= +cloud.google.com/go/compute v1.15.1/go.mod h1:bjjoF/NtFUrkD/urWfdHaKuOPDR5nWIs63rR+SXhcpA= +cloud.google.com/go/compute v1.18.0 h1:FEigFqoDbys2cvFkZ9Fjq4gnHBP55anJ0yQyau2f9oY= +cloud.google.com/go/compute v1.18.0/go.mod h1:1X7yHxec2Ga+Ss6jPyjxRxpu2uu7PLgsOVXvgU0yacs= +cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= +cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= +cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= +cloud.google.com/go/contactcenterinsights v1.4.0/go.mod h1:L2YzkGbPsv+vMQMCADxJoT9YiTTnSEd6fEvCeHTYVck= +cloud.google.com/go/container v1.7.0/go.mod h1:Dp5AHtmothHGX3DwwIHPgq45Y8KmNsgN3amoYfxVkLo= +cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= +cloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4= +cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0= +cloud.google.com/go/datacatalog v1.5.0/go.mod h1:M7GPLNQeLfWqeIm3iuiruhPzkt65+Bx8dAKvScX8jvs= +cloud.google.com/go/datacatalog v1.6.0/go.mod h1:+aEyF8JKg+uXcIdAmmaMUmZ3q1b/lKLtXCmXdnc0lbc= +cloud.google.com/go/datacatalog v1.8.0/go.mod h1:KYuoVOv9BM8EYz/4eMFxrr4DUKhGIOXxZoKYF5wdISM= +cloud.google.com/go/dataflow v0.6.0/go.mod h1:9QwV89cGoxjjSR9/r7eFDqqjtvbKxAK2BaYU6PVk9UM= +cloud.google.com/go/dataflow v0.7.0/go.mod h1:PX526vb4ijFMesO1o202EaUmouZKBpjHsTlCtB4parQ= +cloud.google.com/go/dataform v0.3.0/go.mod h1:cj8uNliRlHpa6L3yVhDOBrUXH+BPAO1+KFMQQNSThKo= +cloud.google.com/go/dataform v0.4.0/go.mod h1:fwV6Y4Ty2yIFL89huYlEkwUPtS7YZinZbzzj5S9FzCE= +cloud.google.com/go/dataform v0.5.0/go.mod h1:GFUYRe8IBa2hcomWplodVmUx/iTL0FrsauObOM3Ipr0= +cloud.google.com/go/datafusion v1.5.0/go.mod h1:Kz+l1FGHB0J+4XF2fud96WMmRiq/wj8N9u007vyXZ2w= +cloud.google.com/go/datalabeling v0.5.0/go.mod h1:TGcJ0G2NzcsXSE/97yWjIZO0bXj0KbVlINXMG9ud42I= +cloud.google.com/go/datalabeling v0.6.0/go.mod h1:WqdISuk/+WIGeMkpw/1q7bK/tFEZxsrFJOJdY2bXvTQ= +cloud.google.com/go/dataplex v1.4.0/go.mod h1:X51GfLXEMVJ6UN47ESVqvlsRplbLhcsAt0kZCCKsU0A= +cloud.google.com/go/dataproc v1.8.0/go.mod h1:5OW+zNAH0pMpw14JVrPONsxMQYMBqJuzORhIBfBn9uI= +cloud.google.com/go/dataqna v0.5.0/go.mod h1:90Hyk596ft3zUQ8NkFfvICSIfHFh1Bc7C4cK3vbhkeo= +cloud.google.com/go/dataqna v0.6.0/go.mod h1:1lqNpM7rqNLVgWBJyk5NF6Uen2PHym0jtVJonplVsDA= +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/datastore v1.10.0/go.mod h1:PC5UzAmDEkAmkfaknstTYbNpgE49HAgW2J1gcgUfmdM= +cloud.google.com/go/datastream v1.2.0/go.mod h1:i/uTP8/fZwgATHS/XFu0TcNUhuA0twZxxQ3EyCUQMwo= +cloud.google.com/go/datastream v1.3.0/go.mod h1:cqlOX8xlyYF/uxhiKn6Hbv6WjwPPuI9W2M9SAXwaLLQ= +cloud.google.com/go/datastream v1.5.0/go.mod h1:6TZMMNPwjUqZHBKPQ1wwXpb0d5VDVPl2/XoS5yi88q4= +cloud.google.com/go/deploy v1.5.0/go.mod h1:ffgdD0B89tToyW/U/D2eL0jN2+IEV/3EMuXHA0l4r+s= +cloud.google.com/go/dialogflow v1.15.0/go.mod h1:HbHDWs33WOGJgn6rfzBW1Kv807BE3O1+xGbn59zZWI4= +cloud.google.com/go/dialogflow v1.16.1/go.mod h1:po6LlzGfK+smoSmTBnbkIZY2w8ffjz/RcGSS+sh1el0= +cloud.google.com/go/dialogflow v1.17.0/go.mod h1:YNP09C/kXA1aZdBgC/VtXX74G/TKn7XVCcVumTflA+8= +cloud.google.com/go/dialogflow v1.29.0/go.mod h1:b+2bzMe+k1s9V+F2jbJwpHPzrnIyHihAdRFMtn2WXuM= +cloud.google.com/go/dlp v1.7.0/go.mod h1:68ak9vCiMBjbasxeVD17hVPxDEck+ExiHavX8kiHG+Q= +cloud.google.com/go/documentai v1.7.0/go.mod h1:lJvftZB5NRiFSX4moiye1SMxHx0Bc3x1+p9e/RfXYiU= +cloud.google.com/go/documentai v1.8.0/go.mod h1:xGHNEB7CtsnySCNrCFdCyyMz44RhFEEX2Q7UD0c5IhU= +cloud.google.com/go/documentai v1.10.0/go.mod h1:vod47hKQIPeCfN2QS/jULIvQTugbmdc0ZvxxfQY1bg4= +cloud.google.com/go/domains v0.6.0/go.mod h1:T9Rz3GasrpYk6mEGHh4rymIhjlnIuB4ofT1wTxDeT4Y= +cloud.google.com/go/domains v0.7.0/go.mod h1:PtZeqS1xjnXuRPKE/88Iru/LdfoRyEHYA9nFQf4UKpg= +cloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk= +cloud.google.com/go/edgecontainer v0.2.0/go.mod h1:RTmLijy+lGpQ7BXuTDa4C4ssxyXT34NIuHIgKuP4s5w= +cloud.google.com/go/errorreporting v0.3.0/go.mod h1:xsP2yaAp+OAW4OIm60An2bbLpqIhKXdWR/tawvl7QzU= +cloud.google.com/go/essentialcontacts v1.4.0/go.mod h1:8tRldvHYsmnBCHdFpvU+GL75oWiBKl80BiqlFh9tp+8= +cloud.google.com/go/eventarc v1.8.0/go.mod h1:imbzxkyAU4ubfsaKYdQg04WS1NvncblHEup4kvF+4gw= +cloud.google.com/go/filestore v1.4.0/go.mod h1:PaG5oDfo9r224f8OYXURtAsY+Fbyq/bLYoINEK8XQAI= +cloud.google.com/go/firestore v1.9.0/go.mod h1:HMkjKHNTtRyZNiMzu7YAsLr9K3X2udY2AMwDaMEQiiE= +cloud.google.com/go/functions v1.6.0/go.mod h1:3H1UA3qiIPRWD7PeZKLvHZ9SaQhR26XIJcC0A5GbvAk= +cloud.google.com/go/functions v1.7.0/go.mod h1:+d+QBcWM+RsrgZfV9xo6KfA1GlzJfxcfZcRPEhDDfzg= +cloud.google.com/go/functions v1.9.0/go.mod h1:Y+Dz8yGguzO3PpIjhLTbnqV1CWmgQ5UwtlpzoyquQ08= +cloud.google.com/go/gaming v1.5.0/go.mod h1:ol7rGcxP/qHTRQE/RO4bxkXq+Fix0j6D4LFPzYTIrDM= +cloud.google.com/go/gaming v1.6.0/go.mod h1:YMU1GEvA39Qt3zWGyAVA9bpYz/yAhTvaQ1t2sK4KPUA= +cloud.google.com/go/gaming v1.8.0/go.mod h1:xAqjS8b7jAVW0KFYeRUxngo9My3f33kFmua++Pi+ggM= +cloud.google.com/go/gkebackup v0.3.0/go.mod h1:n/E671i1aOQvUxT541aTkCwExO/bTer2HDlj4TsBRAo= +cloud.google.com/go/gkeconnect v0.5.0/go.mod h1:c5lsNAg5EwAy7fkqX/+goqFsU1Da/jQFqArp+wGNr/o= +cloud.google.com/go/gkeconnect v0.6.0/go.mod h1:Mln67KyU/sHJEBY8kFZ0xTeyPtzbq9StAVvEULYK16A= +cloud.google.com/go/gkehub v0.9.0/go.mod h1:WYHN6WG8w9bXU0hqNxt8rm5uxnk8IH+lPY9J2TV7BK0= +cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y977wO+hBH0= +cloud.google.com/go/gkemulticloud v0.4.0/go.mod h1:E9gxVBnseLWCk24ch+P9+B2CoDFJZTyIgLKSalC7tuI= +cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= +cloud.google.com/go/gsuiteaddons v1.4.0/go.mod h1:rZK5I8hht7u7HxFQcFei0+AtfS9uSushomRlg+3ua1o= +cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= +cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= +cloud.google.com/go/iam v0.8.0/go.mod h1:lga0/y3iH6CX7sYqypWJ33hf7kkfXJag67naqGESjkE= +cloud.google.com/go/iam v0.11.0/go.mod h1:9PiLDanza5D+oWFZiH1uG+RnRCfEGKoyl6yo4cgWZGY= +cloud.google.com/go/iam v0.12.0 h1:DRtTY29b75ciH6Ov1PHb4/iat2CLCvrOm40Q0a6DFpE= +cloud.google.com/go/iam v0.12.0/go.mod h1:knyHGviacl11zrtZUoDuYpDgLjvr28sLQaG0YB2GYAY= +cloud.google.com/go/iap v1.5.0/go.mod h1:UH/CGgKd4KyohZL5Pt0jSKE4m3FR51qg6FKQ/z/Ix9A= +cloud.google.com/go/ids v1.2.0/go.mod h1:5WXvp4n25S0rA/mQWAg1YEEBBq6/s+7ml1RDCW1IrcY= +cloud.google.com/go/iot v1.4.0/go.mod h1:dIDxPOn0UvNDUMD8Ger7FIaTuvMkj+aGk94RPP0iV+g= +cloud.google.com/go/kms v1.6.0/go.mod h1:Jjy850yySiasBUDi6KFUwUv2n1+o7QZFyuUJg6OgjA0= +cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= +cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= +cloud.google.com/go/language v1.8.0/go.mod h1:qYPVHf7SPoNNiCL2Dr0FfEFNil1qi3pQEyygwpgVKB8= +cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= +cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= +cloud.google.com/go/logging v1.6.1/go.mod h1:5ZO0mHHbvm8gEmeEUHrmDlTDSu5imF6MUP9OfilNXBw= +cloud.google.com/go/longrunning v0.3.0/go.mod h1:qth9Y41RRSUE69rDcOn6DdK3HfQfsUI0YSmW3iIlLJc= +cloud.google.com/go/managedidentities v1.4.0/go.mod h1:NWSBYbEMgqmbZsLIyKvxrYbtqOsxY1ZrGM+9RgDqInM= +cloud.google.com/go/maps v0.1.0/go.mod h1:BQM97WGyfw9FWEmQMpZ5T6cpovXXSd1cGmFma94eubI= +cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= +cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= +cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= +cloud.google.com/go/memcache v1.5.0/go.mod h1:dk3fCK7dVo0cUU2c36jKb4VqKPS22BTkf81Xq617aWM= +cloud.google.com/go/memcache v1.7.0/go.mod h1:ywMKfjWhNtkQTxrWxCkCFkoPjLHPW6A7WOTVI8xy3LY= +cloud.google.com/go/metastore v1.5.0/go.mod h1:2ZNrDcQwghfdtCwJ33nM0+GrBGlVuh8rakL3vdPY3XY= +cloud.google.com/go/metastore v1.6.0/go.mod h1:6cyQTls8CWXzk45G55x57DVQ9gWg7RiH65+YgPsNh9s= +cloud.google.com/go/metastore v1.8.0/go.mod h1:zHiMc4ZUpBiM7twCIFQmJ9JMEkDSyZS9U12uf7wHqSI= +cloud.google.com/go/monitoring v1.8.0/go.mod h1:E7PtoMJ1kQXWxPjB6mv2fhC5/15jInuulFdYYtlcvT4= +cloud.google.com/go/networkconnectivity v1.4.0/go.mod h1:nOl7YL8odKyAOtzNX73/M5/mGZgqqMeryi6UPZTk/rA= +cloud.google.com/go/networkconnectivity v1.5.0/go.mod h1:3GzqJx7uhtlM3kln0+x5wyFvuVH1pIBJjhCpjzSt75o= +cloud.google.com/go/networkconnectivity v1.7.0/go.mod h1:RMuSbkdbPwNMQjB5HBWD5MpTBnNm39iAVpC3TmsExt8= +cloud.google.com/go/networkmanagement v1.5.0/go.mod h1:ZnOeZ/evzUdUsnvRt792H0uYEnHQEMaz+REhhzJRcf4= +cloud.google.com/go/networksecurity v0.5.0/go.mod h1:xS6fOCoqpVC5zx15Z/MqkfDwH4+m/61A3ODiDV1xmiQ= +cloud.google.com/go/networksecurity v0.6.0/go.mod h1:Q5fjhTr9WMI5mbpRYEbiexTzROf7ZbDzvzCrNl14nyU= +cloud.google.com/go/notebooks v1.2.0/go.mod h1:9+wtppMfVPUeJ8fIWPOq1UnATHISkGXGqTkxeieQ6UY= +cloud.google.com/go/notebooks v1.3.0/go.mod h1:bFR5lj07DtCPC7YAAJ//vHskFBxA5JzYlH68kXVdk34= +cloud.google.com/go/notebooks v1.5.0/go.mod h1:q8mwhnP9aR8Hpfnrc5iN5IBhrXUy8S2vuYs+kBJ/gu0= +cloud.google.com/go/optimization v1.2.0/go.mod h1:Lr7SOHdRDENsh+WXVmQhQTrzdu9ybg0NecjHidBq6xs= +cloud.google.com/go/orchestration v1.4.0/go.mod h1:6W5NLFWs2TlniBphAViZEVhrXRSMgUGDfW7vrWKvsBk= +cloud.google.com/go/orgpolicy v1.5.0/go.mod h1:hZEc5q3wzwXJaKrsx5+Ewg0u1LxJ51nNFlext7Tanwc= +cloud.google.com/go/osconfig v1.7.0/go.mod h1:oVHeCeZELfJP7XLxcBGTMBvRO+1nQ5tFG9VQTmYS2Fs= +cloud.google.com/go/osconfig v1.8.0/go.mod h1:EQqZLu5w5XA7eKizepumcvWx+m8mJUhEwiPqWiZeEdg= +cloud.google.com/go/osconfig v1.10.0/go.mod h1:uMhCzqC5I8zfD9zDEAfvgVhDS8oIjySWh+l4WK6GnWw= +cloud.google.com/go/oslogin v1.4.0/go.mod h1:YdgMXWRaElXz/lDk1Na6Fh5orF7gvmJ0FGLIs9LId4E= +cloud.google.com/go/oslogin v1.5.0/go.mod h1:D260Qj11W2qx/HVF29zBg+0fd6YCSjSqLUkY/qEenQU= +cloud.google.com/go/oslogin v1.7.0/go.mod h1:e04SN0xO1UNJ1M5GP0vzVBFicIe4O53FOfcixIqTyXo= +cloud.google.com/go/phishingprotection v0.5.0/go.mod h1:Y3HZknsK9bc9dMi+oE8Bim0lczMU6hrX0UpADuMefr0= +cloud.google.com/go/phishingprotection v0.6.0/go.mod h1:9Y3LBLgy0kDTcYET8ZH3bq/7qni15yVUoAxiFxnlSUA= +cloud.google.com/go/policytroubleshooter v1.4.0/go.mod h1:DZT4BcRw3QoO8ota9xw/LKtPa8lKeCByYeKTIf/vxdE= +cloud.google.com/go/privatecatalog v0.5.0/go.mod h1:XgosMUvvPyxDjAVNDYxJ7wBW8//hLDDYmnsNcMGq1K0= +cloud.google.com/go/privatecatalog v0.6.0/go.mod h1:i/fbkZR0hLN29eEWiiwue8Pb+GforiEIBnV9yrRUOKI= +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/pubsub v1.27.1/go.mod h1:hQN39ymbV9geqBnfQq6Xf63yNhUAhv9CZhzp5O6qsW0= +cloud.google.com/go/pubsublite v1.5.0/go.mod h1:xapqNQ1CuLfGi23Yda/9l4bBCKz/wC3KIJ5gKcxveZg= +cloud.google.com/go/recaptchaenterprise v1.3.1/go.mod h1:OdD+q+y4XGeAlxRaMn1Y7/GveP6zmq76byL6tjPE7d4= +cloud.google.com/go/recaptchaenterprise/v2 v2.1.0/go.mod h1:w9yVqajwroDNTfGuhmOjPDN//rZGySaf6PtFVcSCa7o= +cloud.google.com/go/recaptchaenterprise/v2 v2.2.0/go.mod h1:/Zu5jisWGeERrd5HnlS3EUGb/D335f9k51B/FVil0jk= +cloud.google.com/go/recaptchaenterprise/v2 v2.3.0/go.mod h1:O9LwGCjrhGHBQET5CA7dd5NwwNQUErSgEDit1DLNTdo= +cloud.google.com/go/recaptchaenterprise/v2 v2.5.0/go.mod h1:O8LzcHXN3rz0j+LBC91jrwI3R+1ZSZEWrfL7XHgNo9U= +cloud.google.com/go/recommendationengine v0.5.0/go.mod h1:E5756pJcVFeVgaQv3WNpImkFP8a+RptV6dDLGPILjvg= +cloud.google.com/go/recommendationengine v0.6.0/go.mod h1:08mq2umu9oIqc7tDy8sx+MNJdLG0fUi3vaSVbztHgJ4= +cloud.google.com/go/recommender v1.5.0/go.mod h1:jdoeiBIVrJe9gQjwd759ecLJbxCDED4A6p+mqoqDvTg= +cloud.google.com/go/recommender v1.6.0/go.mod h1:+yETpm25mcoiECKh9DEScGzIRyDKpZ0cEhWGo+8bo+c= +cloud.google.com/go/recommender v1.8.0/go.mod h1:PkjXrTT05BFKwxaUxQmtIlrtj0kph108r02ZZQ5FE70= +cloud.google.com/go/redis v1.7.0/go.mod h1:V3x5Jq1jzUcg+UNsRvdmsfuFnit1cfe3Z/PGyq/lm4Y= +cloud.google.com/go/redis v1.8.0/go.mod h1:Fm2szCDavWzBk2cDKxrkmWBqoCiL1+Ctwq7EyqBCA/A= +cloud.google.com/go/redis v1.10.0/go.mod h1:ThJf3mMBQtW18JzGgh41/Wld6vnDDc/F/F35UolRZPM= +cloud.google.com/go/resourcemanager v1.4.0/go.mod h1:MwxuzkumyTX7/a3n37gmsT3py7LIXwrShilPh3P1tR0= +cloud.google.com/go/resourcesettings v1.4.0/go.mod h1:ldiH9IJpcrlC3VSuCGvjR5of/ezRrOxFtpJoJo5SmXg= +cloud.google.com/go/retail v1.8.0/go.mod h1:QblKS8waDmNUhghY2TI9O3JLlFk8jybHeV4BF19FrE4= +cloud.google.com/go/retail v1.9.0/go.mod h1:g6jb6mKuCS1QKnH/dpu7isX253absFl6iE92nHwlBUY= +cloud.google.com/go/retail v1.11.0/go.mod h1:MBLk1NaWPmh6iVFSz9MeKG/Psyd7TAgm6y/9L2B4x9Y= +cloud.google.com/go/run v0.3.0/go.mod h1:TuyY1+taHxTjrD0ZFk2iAR+xyOXEA0ztb7U3UNA0zBo= +cloud.google.com/go/scheduler v1.4.0/go.mod h1:drcJBmxF3aqZJRhmkHQ9b3uSSpQoltBPGPxGAWROx6s= +cloud.google.com/go/scheduler v1.5.0/go.mod h1:ri073ym49NW3AfT6DZi21vLZrG07GXr5p3H1KxN5QlI= +cloud.google.com/go/scheduler v1.7.0/go.mod h1:jyCiBqWW956uBjjPMMuX09n3x37mtyPJegEWKxRsn44= +cloud.google.com/go/secretmanager v1.6.0/go.mod h1:awVa/OXF6IiyaU1wQ34inzQNc4ISIDIrId8qE5QGgKA= +cloud.google.com/go/secretmanager v1.9.0/go.mod h1:b71qH2l1yHmWQHt9LC80akm86mX8AL6X1MA01dW8ht4= +cloud.google.com/go/security v1.5.0/go.mod h1:lgxGdyOKKjHL4YG3/YwIL2zLqMFCKs0UbQwgyZmfJl4= +cloud.google.com/go/security v1.7.0/go.mod h1:mZklORHl6Bg7CNnnjLH//0UlAlaXqiG7Lb9PsPXLfD0= +cloud.google.com/go/security v1.8.0/go.mod h1:hAQOwgmaHhztFhiQ41CjDODdWP0+AE1B3sX4OFlq+GU= +cloud.google.com/go/security v1.10.0/go.mod h1:QtOMZByJVlibUT2h9afNDWRZ1G96gVywH8T5GUSb9IA= +cloud.google.com/go/securitycenter v1.13.0/go.mod h1:cv5qNAqjY84FCN6Y9z28WlkKXyWsgLO832YiWwkCWcU= +cloud.google.com/go/securitycenter v1.14.0/go.mod h1:gZLAhtyKv85n52XYWt6RmeBdydyxfPeTrpToDPw4Auc= +cloud.google.com/go/securitycenter v1.16.0/go.mod h1:Q9GMaLQFUD+5ZTabrbujNWLtSLZIZF7SAR0wWECrjdk= +cloud.google.com/go/servicecontrol v1.5.0/go.mod h1:qM0CnXHhyqKVuiZnGKrIurvVImCs8gmqWsDoqe9sU1s= +cloud.google.com/go/servicedirectory v1.4.0/go.mod h1:gH1MUaZCgtP7qQiI+F+A+OpeKF/HQWgtAddhTbhL2bs= +cloud.google.com/go/servicedirectory v1.5.0/go.mod h1:QMKFL0NUySbpZJ1UZs3oFAmdvVxhhxB6eJ/Vlp73dfg= +cloud.google.com/go/servicedirectory v1.7.0/go.mod h1:5p/U5oyvgYGYejufvxhgwjL8UVXjkuw7q5XcG10wx1U= +cloud.google.com/go/servicemanagement v1.5.0/go.mod h1:XGaCRe57kfqu4+lRxaFEAuqmjzF0r+gWHjWqKqBvKFo= +cloud.google.com/go/serviceusage v1.4.0/go.mod h1:SB4yxXSaYVuUBYUml6qklyONXNLt83U0Rb+CXyhjEeU= +cloud.google.com/go/shell v1.4.0/go.mod h1:HDxPzZf3GkDdhExzD/gs8Grqk+dmYcEjGShZgYa9URw= +cloud.google.com/go/spanner v1.41.0/go.mod h1:MLYDBJR/dY4Wt7ZaMIQ7rXOTLjYrmxLE/5ve9vFfWos= +cloud.google.com/go/speech v1.6.0/go.mod h1:79tcr4FHCimOp56lwC01xnt/WPJZc4v3gzyT7FoBkCM= +cloud.google.com/go/speech v1.7.0/go.mod h1:KptqL+BAQIhMsj1kOP2la5DSEEerPDuOP/2mmkhHhZQ= +cloud.google.com/go/speech v1.9.0/go.mod h1:xQ0jTcmnRFFM2RfX/U+rk6FQNUF6DQlydUSyoooSpco= +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= +cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= +cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= +cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= +cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= +cloud.google.com/go/storage v1.28.1/go.mod h1:Qnisd4CqDdo6BGs2AD5LLnEsmSQ80wQ5ogcBBKhU86Y= +cloud.google.com/go/storage v1.29.0 h1:6weCgzRvMg7lzuUurI4697AqIRPU1SvzHhynwpW31jI= +cloud.google.com/go/storage v1.29.0/go.mod h1:4puEjyTKnku6gfKoTfNOU/W+a9JyuVNxjpS5GBrB8h4= +cloud.google.com/go/storagetransfer v1.6.0/go.mod h1:y77xm4CQV/ZhFZH75PLEXY0ROiS7Gh6pSKrM8dJyg6I= +cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= +cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= +cloud.google.com/go/talent v1.4.0/go.mod h1:ezFtAgVuRf8jRsvyE6EwmbTK5LKciD4KVnHuDEFmOOA= +cloud.google.com/go/texttospeech v1.5.0/go.mod h1:oKPLhR4n4ZdQqWKURdwxMy0uiTS1xU161C8W57Wkea4= +cloud.google.com/go/tpu v1.4.0/go.mod h1:mjZaX8p0VBgllCzF6wcU2ovUXN9TONFLd7iz227X2Xg= +cloud.google.com/go/trace v1.4.0/go.mod h1:UG0v8UBqzusp+z63o7FK74SdFE+AXpCLdFb1rshXG+Y= +cloud.google.com/go/translate v1.4.0/go.mod h1:06Dn/ppvLD6WvA5Rhdp029IX2Mi3Mn7fpMRLPvXT5Wg= +cloud.google.com/go/video v1.9.0/go.mod h1:0RhNKFRF5v92f8dQt0yhaHrEuH95m068JYOvLZYnJSw= +cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= +cloud.google.com/go/videointelligence v1.7.0/go.mod h1:k8pI/1wAhjznARtVT9U1llUaFNPh7muw8QyOUpavru4= +cloud.google.com/go/videointelligence v1.9.0/go.mod h1:29lVRMPDYHikk3v8EdPSaL8Ku+eMzDljjuvRs105XoU= +cloud.google.com/go/vision v1.2.0/go.mod h1:SmNwgObm5DpFBme2xpyOyasvBc1aPdjvMk2bBk0tKD0= +cloud.google.com/go/vision/v2 v2.2.0/go.mod h1:uCdV4PpN1S0jyCyq8sIM42v2Y6zOLkZs+4R9LrGYwFo= +cloud.google.com/go/vision/v2 v2.3.0/go.mod h1:UO61abBx9QRMFkNBbf1D8B1LXdS2cGiiCRx0vSpZoUo= +cloud.google.com/go/vision/v2 v2.5.0/go.mod h1:MmaezXOOE+IWa+cS7OhRRLK2cNv1ZL98zhqFFZaaH2E= +cloud.google.com/go/vmmigration v1.3.0/go.mod h1:oGJ6ZgGPQOFdjHuocGcLqX4lc98YQ7Ygq8YQwHh9A7g= +cloud.google.com/go/vmwareengine v0.1.0/go.mod h1:RsdNEf/8UDvKllXhMz5J40XxDrNJNN4sagiox+OI208= +cloud.google.com/go/vpcaccess v1.5.0/go.mod h1:drmg4HLk9NkZpGfCmZ3Tz0Bwnm2+DKqViEpeEpOq0m8= +cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xXZmFiHmGE= +cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= +cloud.google.com/go/webrisk v1.7.0/go.mod h1:mVMHgEYH0r337nmt1JyLthzMr6YxwN1aAIEc2fTcq7A= +cloud.google.com/go/websecurityscanner v1.4.0/go.mod h1:ebit/Fp0a+FWu5j4JOmJEV8S8CzdTkAS77oDsiSqYWQ= +cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= +cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= +cloud.google.com/go/workflows v1.9.0/go.mod h1:ZGkj1aFIOd9c8Gerkjjq7OW7I5+l6cSvT3ujaO/WwSA= +collectd.org v0.3.0/go.mod h1:A/8DzQBkF6abtvrT2j/AU/4tiBgJWYyh0y/oB/4MlWE= +cosmossdk.io/api v0.3.1 h1:NNiOclKRR0AOlO4KIqeaG6PS6kswOMhHD0ir0SscNXE= +cosmossdk.io/api v0.3.1/go.mod h1:DfHfMkiNA2Uhy8fj0JJlOCYOBp4eWUUJ1te5zBGNyIw= +cosmossdk.io/core v0.5.1 h1:vQVtFrIYOQJDV3f7rw4pjjVqc1id4+mE0L9hHP66pyI= +cosmossdk.io/core v0.5.1/go.mod h1:KZtwHCLjcFuo0nmDc24Xy6CRNEL9Vl/MeimQ2aC7NLE= +cosmossdk.io/depinject v1.0.0-alpha.3 h1:6evFIgj//Y3w09bqOUOzEpFj5tsxBqdc5CfkO7z+zfw= +cosmossdk.io/depinject v1.0.0-alpha.3/go.mod h1:eRbcdQ7MRpIPEM5YUJh8k97nxHpYbc3sMUnEtt8HPWU= +cosmossdk.io/errors v1.0.0-beta.7 h1:gypHW76pTQGVnHKo6QBkb4yFOJjC+sUGRc5Al3Odj1w= +cosmossdk.io/errors v1.0.0-beta.7/go.mod h1:mz6FQMJRku4bY7aqS/Gwfcmr/ue91roMEKAmDUDpBfE= +cosmossdk.io/math v1.0.0 h1:ro9w7eKx23om2tZz/VM2Pf+z2WAbGX1yDQQOJ6iGeJw= +cosmossdk.io/math v1.0.0/go.mod h1:Ygz4wBHrgc7g0N+8+MrnTfS9LLn9aaTGa9hKopuym5k= +cosmossdk.io/tools/rosetta v0.2.1 h1:ddOMatOH+pbxWbrGJKRAawdBkPYLfKXutK9IETnjYxw= +cosmossdk.io/tools/rosetta v0.2.1/go.mod h1:Pqdc1FdvkNV3LcNIkYWt2RQY6IP1ge6YWZk8MhhO9Hw= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek= +filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= +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/Azure/azure-sdk-for-go/sdk/azcore v0.21.1/go.mod h1:fBF9PQNqB8scdgpZ3ufzaLntG0AG7C1WjPMsiFOmfHM= +github.com/Azure/azure-sdk-for-go/sdk/internal v0.8.3/go.mod h1:KLF4gFr6DcKFZwSuH8w8yEK6DpFl3LP5rhdvAb7Yz5I= +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.3.0/go.mod h1:tPaiy8S5bQ+S5sOiDlINkp7+Ef339+Nz5L5XO+cnOHo= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak= +github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= +github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= +github.com/ChainSafe/go-schnorrkel v1.0.0 h1:3aDA67lAykLaG1y3AOjs88dMxC88PgUuHRrLeDnvGIM= +github.com/ChainSafe/go-schnorrkel v1.0.0/go.mod h1:dpzHYVxLZcp8pjlV+O+UR8K0Hp/z7vcchBSbMBEhCw4= +github.com/CosmWasm/wasmd v0.40.0-rc.0 h1:QhJzLSWQCjUjrEPO2dc61WgafnaxetuKZRBHUfKJR84= +github.com/CosmWasm/wasmd v0.40.0-rc.0/go.mod h1:9MispMuIWmjs6HlgRx+XPLfOD0y1k7iQx5KIE2cNGTc= +github.com/CosmWasm/wasmvm v1.2.2 h1:F1lTaMRYxk91V9ufV8gYhzLea7sd6AG/GvY1h2JtZsY= +github.com/CosmWasm/wasmvm v1.2.2/go.mod h1:vW/E3h8j9xBQs9bCoijDuawKo9kCtxOaS8N8J7KFtkc= +github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= +github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= +github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= +github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= +github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= +github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= +github.com/StirlingMarketingGroup/go-namecase v1.0.0 h1:2CzaNtCzc4iNHirR+5ru9OzGg8rQp860gqLBFqRI02Y= +github.com/StirlingMarketingGroup/go-namecase v1.0.0/go.mod h1:ZsoSKcafcAzuBx+sndbxHu/RjDcDTrEdT4UvhniHfio= +github.com/VictoriaMetrics/fastcache v1.6.0/go.mod h1:0qHz5QP0GMX4pfmMA/zt5RgfNuXJrTP0zS7DqpHGGTw= +github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= +github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= +github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= +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/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= +github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/apache/arrow/go/arrow v0.0.0-20191024131854-af6fa24be0db/go.mod h1:VTxUBvSJ3s3eHAg65PNgrsn5BtqCRPdmyXh6rAfdxN0= +github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= +github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= +github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= +github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= +github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= +github.com/armon/go-metrics v0.4.1 h1:hR91U9KYmb6bLBYLQjyM+3j+rcd/UhE+G78SFnF8gJA= +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/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= +github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI= +github.com/avast/retry-go/v4 v4.3.3 h1:G56Bp6mU0b5HE1SkaoVjscZjlQb0oy4mezwY/cGH19w= +github.com/avast/retry-go/v4 v4.3.3/go.mod h1:rg6XFaiuFYII0Xu3RDbZQkxCofFwruZKW8oEF1jpWiU= +github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= +github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.44.122/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= +github.com/aws/aws-sdk-go v1.44.203 h1:pcsP805b9acL3wUqa4JR2vg1k2wnItkDYNvfmcy6F+U= +github.com/aws/aws-sdk-go v1.44.203/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= +github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= +github.com/aws/aws-sdk-go-v2 v1.2.0/go.mod h1:zEQs02YRBw1DjK0PoJv3ygDYOFTre1ejlJWl8FwAuQo= +github.com/aws/aws-sdk-go-v2/config v1.1.1/go.mod h1:0XsVy9lBI/BCXm+2Tuvt39YmdHwS5unDQmxZOYe8F5Y= +github.com/aws/aws-sdk-go-v2/credentials v1.1.1/go.mod h1:mM2iIjwl7LULWtS6JCACyInboHirisUUdkBPoTHMOUo= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.0.2/go.mod h1:3hGg3PpiEjHnrkrlasTfxFqUsZ2GCk/fMUn4CbKgSkM= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.0.2/go.mod h1:45MfaXZ0cNbeuT0KQ1XJylq8A6+OpVV2E5kvY/Kq+u8= +github.com/aws/aws-sdk-go-v2/service/route53 v1.1.1/go.mod h1:rLiOUrPLW/Er5kRcQ7NkwbjlijluLsrIbu/iyl35RO4= +github.com/aws/aws-sdk-go-v2/service/sso v1.1.1/go.mod h1:SuZJxklHxLAXgLTc1iFXbEWkXs7QRTQpCLGaKIprQW0= +github.com/aws/aws-sdk-go-v2/service/sts v1.1.1/go.mod h1:Wi0EBZwiz/K44YliU0EKxqTCJGUfYTWXrrBwkq736bM= +github.com/aws/smithy-go v1.1.0/go.mod h1:EzMw8dbp/YJL4A5/sbhGddag+NPT7q084agLbB9LgIw= +github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= +github.com/benbjohnson/clock v1.3.0/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/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas= +github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4= +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/bmizerany/pat v0.0.0-20170815010413-6226ea591a40/go.mod h1:8rLXio+WjiTceGBHIoTvn60HIbs7Hm7bcHjyrSqYB9c= +github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= +github.com/btcsuite/btcd v0.22.0-beta h1:LTDpDKUM5EeOFBPM8IXpinEcmZ6FWfNZbE3lfrfdnWo= +github.com/btcsuite/btcd/btcec/v2 v2.1.2/go.mod h1:ctjw4H1kknNJmRN4iP1R7bTQ+v3GJkZBd6mui8ZsAZE= +github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= +github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= +github.com/burnt-labs/interchaintest/v7 v7.0.0-20230404233655-f37b60cca9b6 h1:ek5Y7blC3YSDZ34GrGxjT7wo4F6PgrdSDYYKf2ILOOw= +github.com/burnt-labs/interchaintest/v7 v7.0.0-20230404233655-f37b60cca9b6/go.mod h1:+Tg2jC5C0eI2iOTs24OYs0NgSjU4Bw5XAQ5HVkVMwzc= +github.com/c-bata/go-prompt v0.2.2/go.mod h1:VzqtzE2ksDBcdln8G7mk2RX9QyGjH+OVqOCSiVIqS34= +github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= +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.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= +github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw= +github.com/centrifuge/go-substrate-rpc-client/v4 v4.0.12 h1:DCYWIBOalB0mKKfUg2HhtGgIkBbMA1fnlnkZp7fHB18= +github.com/centrifuge/go-substrate-rpc-client/v4 v4.0.12/go.mod h1:5g1oM4Zu3BOaLpsKQ+O8PAv2kNuq+kPcA1VzFbsSqxE= +github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= +github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= +github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/logex v1.2.1/go.mod h1:JLbx6lG2kDbNRFnfkgvh4eRJRPX1QCoOIWomwysCBrQ= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/readline v1.5.1 h1:upd/6fQk4src78LMRzh5vItIt361/o4uq553V8B5sGI= +github.com/chzyer/readline v1.5.1/go.mod h1:Eh+b79XXUwfKfcPLepksvw2tcLE/Ct21YObkaSkeBlk= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/chzyer/test v1.0.0/go.mod h1:2JlltgoNkt4TW/z9V/IzDdFaMTM2JPIi26O1pF38GC8= +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/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cloudflare/cloudflare-go v0.14.0/go.mod h1:EnwdgGMaFOruiPZRFSgn+TsQ3hQ7C/YWzIGLeu5c304= +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/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20220314180256-7f1daf1720fc/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20230105202645-06c439db220b/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cockroachdb/apd/v2 v2.0.2 h1:weh8u7Cneje73dDh+2tEVLUvyBc89iwepWCD8b8034E= +github.com/cockroachdb/apd/v2 v2.0.2/go.mod h1:DDxRlzC2lo3/vSlmSoS7JkqbbrARPuFOGr0B9pvN3Gw= +github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= +github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= +github.com/coinbase/rosetta-sdk-go/types v1.0.0 h1:jpVIwLcPoOeCR6o1tU+Xv7r5bMONNbHU7MuEHboiFuA= +github.com/coinbase/rosetta-sdk-go/types v1.0.0/go.mod h1:eq7W2TMRH22GTW0N0beDnN931DW0/WOI1R2sdHNHG4c= +github.com/cometbft/cometbft v0.37.0 h1:M005vBaSaugvYYmNZwJOopynQSjwLoDTwflnQ/I/eYk= +github.com/cometbft/cometbft v0.37.0/go.mod h1:Y2MMMN//O5K4YKd8ze4r9jmk4Y7h0ajqILXbH5JQFVs= +github.com/cometbft/cometbft-db v0.7.0 h1:uBjbrBx4QzU0zOEnU8KxoDl18dMNgDh+zZRUE0ucsbo= +github.com/cometbft/cometbft-db v0.7.0/go.mod h1:yiKJIm2WKrt6x8Cyxtq9YTEcIMPcEe4XPxhgX59Fzf0= +github.com/confio/ics23/go v0.9.0 h1:cWs+wdbS2KRPZezoaaj+qBleXgUk5WOQFMP3CQFGTr4= +github.com/confio/ics23/go v0.9.0/go.mod h1:4LPZ2NYqnYIVRklaozjNR1FScgDJ2s5Xrp+e/mYVRak= +github.com/consensys/bavard v0.1.8-0.20210406032232-f3452dc9b572/go.mod h1:Bpd0/3mZuaj6Sj+PqrmIquiOKy397AKGThQPaGzNXAQ= +github.com/consensys/gnark-crypto v0.4.1-0.20210426202927-39ac3d4b3f1f/go.mod h1:815PAHg3wvysy0SyIqanF8gZ0Y1wjk/hrDHD/iT88+Q= +github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= +github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +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-proto v1.0.0-beta.2 h1:X3OKvWgK9Gsejo0F1qs5l8Qn6xJV/AzgIWR2wZ8Nua8= +github.com/cosmos/cosmos-proto v1.0.0-beta.2/go.mod h1:+XRCLJ14pr5HFEHIUcn51IKXD1Fy3rkEQqt4WqmN4V0= +github.com/cosmos/cosmos-sdk v0.47.0 h1:GKYtBpvjwuDEVix1vdnQpq7PuEOnItuEK0vdAL2cZ5g= +github.com/cosmos/cosmos-sdk v0.47.0/go.mod h1:FTtZbqiHCZ2vun9WrPq6qLQafNKkAuIhLAxzLjr2TiI= +github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= +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.4.2/go.mod h1:cLxOsn1ljAHSV527CHOtaIP91kK6cCrZETRBrkzItWU= +github.com/cosmos/gogoproto v1.4.7 h1:RzYKVnsEC7UIkDnhTIkqEB7LnIQbsySvmNEqPCiPevk= +github.com/cosmos/gogoproto v1.4.7/go.mod h1:gxGePp9qedovvl/StQL2BIJ6qlIBn1+9YxR0IulGBKA= +github.com/cosmos/iavl v0.20.0 h1:fTVznVlepH0KK8NyKq8w+U7c2L6jofa27aFX6YGlm38= +github.com/cosmos/iavl v0.20.0/go.mod h1:WO7FyvaZJoH65+HFOsDir7xU9FWk2w9cHXNW1XHcl7A= +github.com/cosmos/ibc-go/v7 v7.0.0 h1:j4kyywlG0hhDmT9FmSaR5iCIka7Pz7kJTxGWY1nlV9Q= +github.com/cosmos/ibc-go/v7 v7.0.0/go.mod h1:BFh8nKWjr5zeR2OZfhkzdgDzj1+KjRn3aJLpwapStj8= +github.com/cosmos/ics23/go v0.9.1-0.20221207100636-b1abd8678aab h1:I9ialKTQo7248V827Bba4OuKPmk+FPzmTVHsLXaIJWw= +github.com/cosmos/ics23/go v0.9.1-0.20221207100636-b1abd8678aab/go.mod h1:2CwqasX5dSD7Hbp/9b6lhK6BwoBDCBldx7gPKRukR60= +github.com/cosmos/keyring v1.2.0 h1:8C1lBP9xhImmIabyXW4c3vFjjLiBdGCmfLUfeZlV1Yo= +github.com/cosmos/keyring v1.2.0/go.mod h1:fc+wB5KTk9wQ9sDx0kFXB3A0MaeGHM9AwRStKOQ5vOA= +github.com/cosmos/ledger-cosmos-go v0.12.1/go.mod h1:dhO6kj+Y+AHIOgAe4L9HL/6NDdyyth4q238I9yFpD2g= +github.com/cosmos/rosetta-sdk-go v0.10.0 h1:E5RhTruuoA7KTIXUcMicL76cffyeoyvNybzUGSKFTcM= +github.com/cosmos/rosetta-sdk-go v0.10.0/go.mod h1:SImAZkb96YbwvoRkzSMQB6noNJXFgWl/ENIznEoYQI4= +github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/creachadair/taskgroup v0.4.2 h1:jsBLdAJE42asreGss2xZGZ8fJra7WtwnHWeJFxv2Li8= +github.com/creachadair/taskgroup v0.4.2/go.mod h1:qiXUOSrbwAY3u0JPGTzObbE3yf9hcXHDKBZ2ZjpCbgM= +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/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= +github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= +github.com/dave/jennifer v1.2.0/go.mod h1:fIb+770HOpJ2fmN9EPPKOqm1vMGhB+TwXKMZhrIygKg= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/deckarep/golang-set v1.8.0 h1:sk9/l/KqpunDwP7pSjUg0keiOOLEnOBHzykLrsPppp4= +github.com/deckarep/golang-set v1.8.0/go.mod h1:5nI87KwE7wgsBU1F4GKAw2Qod7p5kyS383rP6+o6qqo= +github.com/decred/base58 v1.0.4 h1:QJC6B0E0rXOPA8U/kw2rP+qiRJsUaE2Er+pYb3siUeA= +github.com/decred/base58 v1.0.4/go.mod h1:jJswKPEdvpFpvf7dsDvFZyLT22xZ9lWqEByX38oGd9E= +github.com/decred/dcrd/chaincfg/chainhash v1.0.2/go.mod h1:BpbrGgrPTr3YJYRN3Bm+D9NuaFd+zGyNeIKgrhCXK60= +github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= +github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= +github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.0 h1:3GIJYXQDAKpLEFriGFN8SbSffak10UXHGdIcFaMPykY= +github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.0/go.mod h1:3s92l0paYkZoIHuj4X93Teg/HB7eGM9x/zokGw+u4mY= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 h1:HbphB4TFFXpv7MNrT52FGrrgVXF1owhMVTHFZIlnvd4= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0/go.mod h1:DZGJHZMqrU4JJqFAWUS2UO1+lbSKsdiOoYi9Zzey7Fc= +github.com/deepmap/oapi-codegen v1.6.0/go.mod h1:ryDa9AgbELGeB+YEXE1dR53yAjHwFvE9iAUlWl9Al3M= +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/v2 v2.2007.4/go.mod h1:vSw/ax2qojzbN6eXHIx6KPKtCSHJN/Uz0X0VPruTIhk= +github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= +github.com/dgraph-io/ristretto v0.1.1/go.mod h1:S1GPSBCYCIhmVNfcth17y2zZtQT6wzkzgwUve0VDWWA= +github.com/dgryski/go-bitstream v0.0.0-20180413035011-3522498ce2c8/go.mod h1:VMaSuZ+SZcx/wljOQKvp5srsbCiKDEb6K2wC4+PiBmQ= +github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= +github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= +github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= +github.com/dnaeon/go-vcr v1.1.0/go.mod h1:M7tiix8f0r6mKKJ3Yq/kqU1OYf3MnfmBWVbPx/yU9ko= +github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= +github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68= +github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/docker v1.4.2-0.20180625184442-8e610b2b55bf/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v20.10.19+incompatible h1:lzEmjivyNHFHMNAFLXORMBXyGIhw/UP4DvJwvyKYq64= +github.com/docker/docker v20.10.19+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= +github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= +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/dop251/goja v0.0.0-20211011172007-d99e4b8cbf48/go.mod h1:R9ET47fwRVRPZnOGvHxxhuZcbrMCuiqOz3Rlrh4KSnk= +github.com/dop251/goja_nodejs v0.0.0-20210225215109-d91c329300e7/go.mod h1:hn7BA7c8pLvoGndExHudxTDKZ84Pyvv+90pbBjbTz0Y= +github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +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.5.0 h1:3j8ya4Z4kMCwT5nXIKFSV84YS+HdqSSO0VsTQxaLAeM= +github.com/dvsekhvalnov/jose2go v1.5.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB/mPZadG+mhXU= +github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= +github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= +github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= +github.com/eclipse/paho.mqtt.golang v1.2.0/go.mod h1:H9keYFcgq3Qr5OUJm/JZI/i6U7joQ8SYLhZwfeOo6Ts= +github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= +github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= +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/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= +github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= +github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= +github.com/envoyproxy/go-control-plane v0.10.3/go.mod h1:fJJn/j26vwOu972OllsvAgJJM//w9BV6Fxbg2LuVd34= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/envoyproxy/protoc-gen-validate v0.6.7/go.mod h1:dyJXwwfPK2VSqiB9Klm1J6romD608Ba7Hij42vrOBCo= +github.com/envoyproxy/protoc-gen-validate v0.9.1/go.mod h1:OKNgG7TCp5pF4d6XftA0++PMirau2/yoOwVac3AbF2w= +github.com/ethereum/go-ethereum v1.10.17 h1:XEcumY+qSr1cZQaWsQs5Kck3FHB0V2RiMHPdTBJ+oT8= +github.com/ethereum/go-ethereum v1.10.17/go.mod h1:Lt5WzjM07XlXc95YzrhosmR4J9Ahd6X2wyEV2SvGhk0= +github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/felixge/httpsnoop v1.0.2 h1:+nS9g82KMXccJ/wp0zyRW9ZBHFETmMGtkk+2CTTrW4o= +github.com/felixge/httpsnoop v1.0.2/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= +github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= +github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= +github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= +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.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= +github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= +github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= +github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg= +github.com/gdamore/tcell/v2 v2.4.1-0.20210905002822-f057f0a857a1/go.mod h1:Az6Jt+M5idSED2YPGtwnfJV0kXohgdCBPmHGSYc1r04= +github.com/gdamore/tcell/v2 v2.6.0/go.mod h1:be9omFATkdr0D9qewWW3d+MEvl5dha+Etb5y65J2H8Y= +github.com/getkin/kin-openapi v0.53.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= +github.com/getkin/kin-openapi v0.61.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= +github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk= +github.com/glycerine/go-unsnap-stream v0.0.0-20180323001048-9f0cb55181dd/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE= +github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24= +github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJpoZOs= +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-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.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= +github.com/go-kit/kit v0.12.0 h1:e4o3o3IsBfAKQh5Qbbiqyfu97Ku7jrO/JbohvztANh4= +github.com/go-kit/kit v0.12.0/go.mod h1:lHd+EkCZPIwYItmGDDRdhinkzX2A1sj+M9biaEaizzs= +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-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-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= +github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= +github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= +github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= +github.com/go-playground/validator/v10 v10.10.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos= +github.com/go-sourcemap/sourcemap v2.1.3+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= +github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= +github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw= +github.com/go-stack/stack v1.8.1/go.mod h1:dcoOX6HbPZSZptuspn9bctJ+N/CnF5gGygcUP3XYfe4= +github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= +github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= +github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= +github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= +github.com/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= +github.com/gogo/googleapis v1.4.1-0.20201022092350-68b0159b7869/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= +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.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= +github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang-jwt/jwt/v4 v4.3.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= +github.com/golang-jwt/jwt/v4 v4.4.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= +github.com/golang/geo v0.0.0-20190916061304-5b978397cfec/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= +github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ= +github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +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/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/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.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= +github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= +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.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= +github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golangci/lint-1 v0.0.0-20181222135242-d2cdd8c08219/go.mod h1:/X8TswGSh1pIozq4ZwCfxS0WA5JGXguxk94ar/4c87Y= +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.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= +github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= +github.com/google/flatbuffers v1.11.0/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.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +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.1.1-0.20200604201612-c04b05f3adfa/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/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= +github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= +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-20201218002935-b9804c9f04c2/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-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= +github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= +github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= +github.com/googleapis/enterprise-certificate-proxy v0.2.1/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= +github.com/googleapis/enterprise-certificate-proxy v0.2.3 h1:yk9/cqRKtT9wXZSsRH9aurXEpJX+U6FLtpYTdC3R06k= +github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= +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/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= +github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= +github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= +github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= +github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= +github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= +github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= +github.com/googleapis/gax-go/v2 v2.7.0 h1:IcsPKeInNvYi7eqSaDjiZqDDKu5rsmunY0Y1YupQSSQ= +github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8= +github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= +github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= +github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= +github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= +github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= +github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= +github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= +github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/graph-gophers/graphql-go v1.3.0/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= +github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= +github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= +github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +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.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks= +github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c/go.mod h1:NMPJylDgVpX0MLRlPy15sqSwOFv/U1GZ2m21JhFfek0= +github.com/gtank/merlin v0.1.1-0.20191105220539-8318aed1a79f/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= +github.com/gtank/merlin v0.1.1 h1:eQ90iG7K9pOhtereWsmyRJ6RAwcP4tHTDBHXNg+u5is= +github.com/gtank/merlin v0.1.1/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= +github.com/gtank/ristretto255 v0.1.2 h1:JEqUCPA1NvLq5DwYtuzigd7ss8fwbYay9fi4/5uMzcc= +github.com/gtank/ristretto255 v0.1.2/go.mod h1:Ph5OpO6c7xKUGROZfWVLiJf9icMDwUeIvY4OmlYW69o= +github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= +github.com/hashicorp/consul/sdk v0.3.0/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/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-getter v1.7.0 h1:bzrYP+qu/gMrL1au7/aDvkoOVGUJpeKBgbqRHACAFDY= +github.com/hashicorp/go-getter v1.7.0/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744= +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-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-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= +github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= +github.com/hashicorp/go-safetemp v1.0.0 h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhEyExpmo= +github.com/hashicorp/go-safetemp v1.0.0/go.mod h1:oaerMy3BhqiTbVye6QuFhFtIceqFoDHxNAB65b+Rj1I= +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-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= +github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +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 v0.5.5-0.20210104140557-80c98217689d h1:dg1dEPuWpEqDnvIw251EVy4zlP8gWbsGj4BsUKCRpYs= +github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= +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/hdevalence/ed25519consensus v0.1.0 h1:jtBwzzcHuTmFrQN6xQZn6CQEO/V9f7HsjsjeEZ6auqU= +github.com/hdevalence/ed25519consensus v0.1.0/go.mod h1:w3BHWjwJbFU29IRHL1Iqkw3sus+7FctEyM4RqDxYNzo= +github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= +github.com/holiman/uint256 v1.2.0/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/huandu/go-assert v1.1.5/go.mod h1:yOLvuqZwmcHIC5rIzrBhT7D3Q9c3GFnd0JrPVhn/06U= +github.com/huandu/skiplist v1.2.0 h1:gox56QD77HzSC0w+Ws3MH3iie755GBJU1OER3h5VsYw= +github.com/huandu/skiplist v1.2.0/go.mod h1:7v3iFjLcSAzO4fN5B8dvebvo/qsfumiLiDXMrPiHF9w= +github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= +github.com/huin/goupnp v1.0.3-0.20220313090229-ca81a64b4204/go.mod h1:ZxNlw5WqJj6wSsRK5+YfflQGXYfccj5VgQsMNixHM7Y= +github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= +github.com/iancoleman/strcase v0.2.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/icza/dyno v0.0.0-20220812133438-f0b6f8a18845 h1:H+uM0Bv88eur3ZSsd2NGKg3YIiuXxwxtlN7HjE66UTU= +github.com/icza/dyno v0.0.0-20220812133438-f0b6f8a18845/go.mod h1:c1tRKs5Tx7E2+uHGSyyncziFjvGpgv4H2HrqXeUQ/Uk= +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.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/influxdata/flux v0.65.1/go.mod h1:J754/zds0vvpfwuq7Gc2wRdVwEodfpCFM7mYlOw2LqY= +github.com/influxdata/influxdb v1.8.3/go.mod h1:JugdFhsvvI8gadxOI6noqNeeBHvWNTbfYGtiAn+2jhI= +github.com/influxdata/influxdb-client-go/v2 v2.4.0/go.mod h1:vLNHdxTJkIf2mSLvGrpj8TCcISApPoXkaxP8g9uRlW8= +github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= +github.com/influxdata/influxql v1.1.1-0.20200828144457-65d3ef77d385/go.mod h1:gHp9y86a/pxhjJ+zMjNXiQAA197Xk9wLxaz+fGG+kWk= +github.com/influxdata/line-protocol v0.0.0-20180522152040-32c6aa80de5e/go.mod h1:4kt73NQhadE3daL3WhR5EJ/J2ocX0PZzwxQ0gXJ7oFE= +github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= +github.com/influxdata/line-protocol v0.0.0-20210311194329-9aa0e372d097/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= +github.com/influxdata/promql/v2 v2.12.0/go.mod h1:fxOPu+DY0bqCTCECchSRtWfc+0X19ybifQhZoQNF5D8= +github.com/influxdata/roaring v0.4.13-0.20180809181101-fc520f41fab6/go.mod h1:bSgUQ7q5ZLSO+bKBGqJiCBGAl+9DxyW63zLTujjUlOE= +github.com/influxdata/tdigest v0.0.0-20181121200506-bf2b5ad3c0a9/go.mod h1:Js0mqiSBE6Ffsg94weZZ2c+v/ciT8QRHFOap7EKDrR0= +github.com/influxdata/usage-client v0.0.0-20160829180054-6d3895376368/go.mod h1:Wbbw6tYNvwa5dlB6304Sd+82Z3f7PmVZHVKU637d4po= +github.com/ipfs/go-cid v0.2.0 h1:01JTiihFq9en9Vz0lc0VDWvZe/uBonGpzo4THP0vcQ0= +github.com/ipfs/go-cid v0.2.0/go.mod h1:P+HXFDF4CVhaVayiEb4wkAy7zBHxBwsJyt0Y5U6MLro= +github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= +github.com/jedisct1/go-minisign v0.0.0-20190909160543-45766022959e/go.mod h1:G1CVv03EnqU1wYL2dFwXxW2An0az9JTl/ZsqXQeBlkU= +github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= +github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= +github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= +github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= +github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= +github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +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.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/jsternberg/zap-logfmt v1.0.0/go.mod h1:uvPs/4X51zdkcm5jXl5SYoN+4RK21K8mysFmDaM/h+o= +github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +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/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= +github.com/jwilder/encoding v0.0.0-20170811194829-b4e1701a28ef/go.mod h1:Ct9fl0F6iIOGgxJ5npU/IUOhOhqlVrGjyIZc8/MagT0= +github.com/karalabe/usb v0.0.2/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= +github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= +github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= +github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/errcheck v1.6.2/go.mod h1:nXw/i/MfnvRHqXa7XXmQMUB0oNFGuBrNI8d8NLy0LPw= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.4.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= +github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= +github.com/klauspost/compress v1.16.3 h1:XuJt9zzcnaz6a16/OU53ZjWp/v7/42WcR5t2a0PcNQY= +github.com/klauspost/compress v1.16.3/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5 h1:2U0HzY8BJ8hVwDKIzp7y4voR9CX/nvcfymLmg2UiOio= +github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/klauspost/cpuid/v2 v2.2.3 h1:sxCkb+qR91z4vsqw4vGGZlDgPz3G7gjaLyK3V8y70BU= +github.com/klauspost/cpuid/v2 v2.2.3/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= +github.com/klauspost/crc32 v0.0.0-20161016154125-cb6bfca970f6/go.mod h1:+ZoRqAPRLkC4NPOvfYeR5KNOrY6TD+/sAC3HXPZgDYg= +github.com/klauspost/pgzip v1.0.2-0.20170402124221-0bf5dcad4ada/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= +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.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/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= +github.com/labstack/echo/v4 v4.2.1/go.mod h1:AA49e0DZ8kk5jTOOCKNuPR6oTnBS0dYiM4FW1e6jwpg= +github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= +github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= +github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= +github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw= +github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= +github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= +github.com/libp2p/go-libp2p v0.22.0 h1:2Tce0kHOp5zASFKJbNzRElvh0iZwdtG5uZheNW8chIw= +github.com/libp2p/go-libp2p v0.22.0/go.mod h1:UDolmweypBSjQb2f7xutPnwZ/fxioLbMBxSjRksxxU4= +github.com/libp2p/go-libp2p-core v0.20.1 h1:fQz4BJyIFmSZAiTbKV8qoYhEH5Dtv/cVhZbG3Ib/+Cw= +github.com/libp2p/go-libp2p-core v0.20.1/go.mod h1:6zR8H7CvQWgYLsbG4on6oLNSGcyKaYFSEYyDt51+bIY= +github.com/libp2p/go-openssl v0.1.0/go.mod h1:OiOxwPpL3n4xlenjx2h7AwSGaFSC/KZvf6gNdOBQMtc= +github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= +github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= +github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= +github.com/lyft/protoc-gen-star v0.6.0/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= +github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= +github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= +github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= +github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/manifoldco/promptui v0.9.0 h1:3V4HzJk1TtXW1MTZMP7mdlwbBpIinw3HztaIlYthEiA= +github.com/manifoldco/promptui v0.9.0/go.mod h1:ka04sppxSGFAtxX0qhlYQjISsg9mR4GWtQEhdbn6Pgg= +github.com/matryer/moq v0.0.0-20190312154309-6cfb0558e1bd/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ= +github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= +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.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= +github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-pointer v0.0.1/go.mod h1:2zXcozF6qYGgmsG+SeTZz3oAbFLdD3OWqnUbNvJZAlc= +github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= +github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= +github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= +github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= +github.com/mimoo/StrobeGo v0.0.0-20220103164710-9a04d6ca976b h1:QrHweqAtyJ9EwCaGHBu1fghwxIPiopAHV06JlXrMHjk= +github.com/mimoo/StrobeGo v0.0.0-20220103164710-9a04d6ca976b/go.mod h1:xxLb2ip6sSUts3g1irPVHyk/DGslwQsNOo9I7smJfNU= +github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g= +github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= +github.com/minio/sha256-simd v1.0.0 h1:v1ta+49hkWZyvaKwrQB8elexRqm6Y0aMLjCNsrYxo6g= +github.com/minio/sha256-simd v1.0.0/go.mod h1:OuYzVNI5vcoYIAmbIvHPl3N3jUzVedXbKy5RFepssQM= +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/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.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= +github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/pointerstructure v1.2.0/go.mod h1:BRAsLI5zgXmw97Lf6s25bs8ohIXc3tViBH44KcwB2g4= +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 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8= +github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= +github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= +github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae/go.mod h1:qAyveg+e4CE+eKJXWVjKXM4ck2QobLqTDytGJbLLhJg= +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/multiformats/go-base32 v0.0.4 h1:+qMh4a2f37b4xTNs6mqitDinryCI+tfO2dRVMN9mjSE= +github.com/multiformats/go-base32 v0.0.4/go.mod h1:jNLFzjPZtp3aIARHbJRZIaPuspdH0J6q39uUM5pnABM= +github.com/multiformats/go-base36 v0.1.0 h1:JR6TyF7JjGd3m6FbLU2cOxhC0Li8z8dLNGQ89tUg4F4= +github.com/multiformats/go-base36 v0.1.0/go.mod h1:kFGE83c6s80PklsHO9sRn2NCoffoRdUUOENyW/Vv6sM= +github.com/multiformats/go-multiaddr v0.6.0 h1:qMnoOPj2s8xxPU5kZ57Cqdr0hHhARz7mFsPMIiYNqzg= +github.com/multiformats/go-multiaddr v0.6.0/go.mod h1:F4IpaKZuPP360tOMn2Tpyu0At8w23aRyVqeK0DbFeGM= +github.com/multiformats/go-multibase v0.1.1 h1:3ASCDsuLX8+j4kx58qnJ4YFq/JWTJpCyDW27ztsVTOI= +github.com/multiformats/go-multibase v0.1.1/go.mod h1:ZEjHE+IsUrgp5mhlEAYjMtZwK1k4haNkcaPg9aoe1a8= +github.com/multiformats/go-multicodec v0.5.0 h1:EgU6cBe/D7WRwQb1KmnBvU7lrcFGMggZVTPtOW9dDHs= +github.com/multiformats/go-multicodec v0.5.0/go.mod h1:DiY2HFaEp5EhEXb/iYzVAunmyX/aSFMxq2KMKfWEues= +github.com/multiformats/go-multihash v0.2.1 h1:aem8ZT0VA2nCHHk7bPJ1BjUbHNciqZC/d16Vve9l108= +github.com/multiformats/go-multihash v0.2.1/go.mod h1:WxoMcYG85AZVQUyRyo9s4wULvW5qrI9vb2Lt6evduFc= +github.com/multiformats/go-varint v0.0.6 h1:gk85QWKxh3TazbLxED/NlDVv8+q+ReFJk7Y2W/KhfNY= +github.com/multiformats/go-varint v0.0.6/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= +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/mwitkow/grpc-proxy v0.0.0-20181017164139-0f1106ef9c76/go.mod h1:x5OoJHDHqxHS801UIuhqGl6QdSAEJvtausosHSdazIo= +github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= +github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= +github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= +github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= +github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= +github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= +github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= +github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= +github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= +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/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= +github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= +github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= +github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= +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/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/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= +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.0-rc2 h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034= +github.com/opencontainers/image-spec v1.1.0-rc2/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ= +github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= +github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= +github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/opentracing/opentracing-go v1.0.3-0.20180606204148-bd9c31933947/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= +github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= +github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= +github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= +github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= +github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/paulbellamy/ratecounter v0.2.0/go.mod h1:Hfx1hDpSGoqxkVVpBi/IlYD7kChlfo5C6hzIHwPqfFE= +github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= +github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +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.0.6 h1:nrzqCb7j9cDFj2coyLNLaZuJTLjWjlaz6nvTvIwycIU= +github.com/pelletier/go-toml/v2 v2.0.6/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek= +github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= +github.com/peterh/liner v1.0.1-0.20180619022028-8c1271fcf47f/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc= +github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= +github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= +github.com/petermattis/goid v0.0.0-20221215004737-a150e88a970d/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= +github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= +github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= +github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pierrec/xxHash v0.1.5 h1:n/jBpwTHiER4xYvK3/CdPVnLDPchj8eTJFFLUb4QHBo= +github.com/pierrec/xxHash v0.1.5/go.mod h1:w2waW5Zoa/Wc4Yqe0wgrIYAGKqRMf7czn2HNKXmuL+I= +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/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= +github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= +github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= +github.com/pkg/term v0.0.0-20180730021639-bffc007b7fd5/go.mod h1:eCbImbZ95eXtAUIbLAuAVnBnwf83mjf6QIVH8SHYwqQ= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= +github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= +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.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw= +github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/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.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4= +github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= +github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= +github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= +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.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= +github.com/prometheus/common v0.40.0 h1:Afz7EVRqGg2Mqqf4JuF9vdvp1pi220m55Pi9T2JnO4Q= +github.com/prometheus/common v0.40.0/go.mod h1:L65ZJPSmfn/UBWLQIHV7dBrKFidB/wPlF1y5TlSt9OE= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/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.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI= +github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY= +github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ= +github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Unghqrcc= +github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= +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/regen-network/protobuf v1.3.3-alpha.regen.1 h1:OHEc+q5iIAXpqiqFKeLpu5NwTIkVXUs48vFMwzqpqY4= +github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI= +github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= +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/retailnext/hllpp v1.0.1-0.20180308014038-101a6d2f8b52/go.mod h1:RDpi1RftBQPUCDRw6SmxeaREsAaRKnOclghuzp/WRzc= +github.com/rivo/tview v0.0.0-20220307222120-9994674d60a8/go.mod h1:WIfMkQNY+oq/mWwtsjOYHIZBuwthioY2srOmljJkTnk= +github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +github.com/rivo/uniseg v0.4.3/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/rjeczalik/notify v0.9.1/go.mod h1:rKwnCoCGeuQnwBtTSPL9Dad03Vh2n40ePRrjvIXnJho= +github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= +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/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= +github.com/rs/cors v1.8.3 h1:O+qNyWn7Z+F9M0ILBHgMVPuB1xTOucVd5gtaYyXBpRo= +github.com/rs/cors v1.8.3/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= +github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +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/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= +github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/segmentio/kafka-go v0.1.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= +github.com/segmentio/kafka-go v0.2.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= +github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +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.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= +github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +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/snikch/goodman v0.0.0-20171125024755-10e37e294daa h1:YJfZp12Z3AFhSBeXOlv4BO55RMwPn2NoQeDsrdWnBtY= +github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa/go.mod h1:oJyF+mSPHbB5mVY2iO9KV3pTt/QbIkGaO8gQ2WrDbP4= +github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= +github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572/go.mod h1:w0SWMsp6j9O/dk4/ZpIhL+3CkG8ofA2vuv7k+ltqUMc= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= +github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= +github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= +github.com/spf13/afero v1.9.3 h1:41FoI0fD7OR7mGcKE/aOiLkGreyf8ifIOQmJANWogMk= +github.com/spf13/afero v1.9.3/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= +github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= +github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= +github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= +github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= +github.com/spf13/cobra v1.6.1 h1:o94oiPyS4KD1mPy2fmcYYHHfCxLqYjJOhGsCHFZtEzA= +github.com/spf13/cobra v1.6.1/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY= +github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= +github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= +github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= +github.com/spf13/viper v1.15.0 h1:js3yy885G8xwJa6iOISGFwd+qlUo5AvyXb7CiihdtiU= +github.com/spf13/viper v1.15.0/go.mod h1:fFcTBJxvhhzSJiZy8n+PeW6t8l+KeT/uTARa0jHOQLA= +github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q= +github.com/strangelove-ventures/go-subkey v1.0.7 h1:cOP/Lajg3uxV/tvspu0m6+0Cu+DJgygkEAbx/s+f35I= +github.com/strangelove-ventures/go-subkey v1.0.7/go.mod h1:E34izOIEm+sZ1YmYawYRquqBQWeZBjVB4pF7bMuhc1c= +github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= +github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= +github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= +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.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.2.0/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.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.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= +github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8= +github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= +github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= +github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= +github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c/go.mod h1:ahpPrc7HpcfEWDQRZEmnXMzHY03mLDYMCxeDzy46i+8= +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/tidwall/btree v1.6.0 h1:LDZfKfQIBHGHWSwckhXI0RPSXzlo+KYdjK7FWSqOzzg= +github.com/tidwall/btree v1.6.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= +github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= +github.com/tklauser/go-sysconf v0.3.5/go.mod h1:MkWzOF4RMCshBAMXuhXJs64Rte09mITnppBXY/rYEFI= +github.com/tklauser/numcpus v0.2.2/go.mod h1:x3qojaO3uyYt0i56EW/VUYs7uBvdl2fkfZFu0T9wgjM= +github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= +github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= +github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M= +github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= +github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= +github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= +github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= +github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= +github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= +github.com/willf/bitset v1.1.3/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= +github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= +github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +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.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/zondax/hid v0.9.1/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= +github.com/zondax/ledger-go v0.14.1/go.mod h1:fZ3Dqg6qcdXWSOJFKMG8GCTnD7slO/RL2feOQv8K320= +go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/bbolt v1.3.7/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= +go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= +go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= +go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= +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.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= +go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= +go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.opentelemetry.io/proto/otlp v0.15.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= +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.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= +go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= +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.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= +go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= +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.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= +go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= +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-20181203042331-505ab145d0a9/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-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-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190909091759-094676da4a83/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/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-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= +golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +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-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.7.0 h1:AvwMYaRytfdeVt3u6mLaxYtErKYjxA2OXjJ1HHq6t3A= +golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= +golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/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-20190125153040-c74c464bbbf2/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-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= +golang.org/x/exp v0.0.0-20230310171629-522b1b587ee0 h1:LGJsf5LRplCck6jUCH3dBL2dmycNruWNF5xugkSlfXw= +golang.org/x/exp v0.0.0-20230310171629-522b1b587ee0/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= +golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= +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.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= +golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= +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/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-20181220203305-927f97764cc3/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-20190125091013-d26f9f9a57f3/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-20200421231249-e086a090c8fd/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-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +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-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210220033124-5f55cee0dc0d/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-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210610132358-84b48f89b13b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/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-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/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.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= +golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ= +golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= +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-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= +golang.org/x/oauth2 v0.4.0/go.mod h1:RznEsdpjGAINPTOF0UH/t+xJ75L18YO3Ho6Pyn+uRec= +golang.org/x/oauth2 v0.5.0 h1:HuArIo48skDwlrvM3sEdHXElYslAMsf3KwRkkW4MC4s= +golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I= +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-20220601150217-0de741cfad7f/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.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +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-20181107165924-66b7b1311ac8/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-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190130150945-aca44879d564/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-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-20190626221950-04f50cda93cb/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-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/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-20191220142924-d4481acd189f/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-20200107162124-548cf772de50/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-20200420163511-1957bb5e6d1f/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-20200826173525-f9321e4c35a6/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-20210104204734-6f8348627aad/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-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210309074719-68d13333faf2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210316164454-77fc1eacc6aa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210420205809-ac73e9fd8988/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/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-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210603125802-9665404d3644/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-20210616094352-59db8d763f22/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-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210819135213-f52c844e1c1c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211210111614-af8b64212486/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-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220315194320-039c03cc5b86/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/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-20220502124256-b6088ccd6cba/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-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.4.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 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +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-20201210144234-2321bbc49cbf/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.1.0/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 h1:clScbb1cHjoCkyRbWwBEUZ5H/tIFu5TAXIqaZD0Gcjw= +golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= +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.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68= +golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-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.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/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-20181030221726-6c7e314b6563/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-20190206041539-40960b6deb8e/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-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-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-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-20200108203644-89082a384178/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-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= +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/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-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= +golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= +gonum.org/v1/gonum v0.0.0-20181121035319-3f7ecaa7e8ca/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= +gonum.org/v1/gonum v0.6.0/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU= +gonum.org/v1/netlib v0.0.0-20181029234149-ec6d1f5cefe6/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= +gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= +gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= +google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= +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.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= +google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= +google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= +google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= +google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= +google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= +google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= +google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= +google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= +google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= +google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= +google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= +google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= +google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= +google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= +google.golang.org/api v0.77.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= +google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= +google.golang.org/api v0.80.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg= +google.golang.org/api v0.84.0/go.mod h1:NTsGnUFJMYROtiquksZHBWtHfeMC7iYthki7Eq3pa8o= +google.golang.org/api v0.85.0/go.mod h1:AqZf8Ep9uZ2pyTvgL+x0D3Zt0eoT9b5E8fmzfu6FO2g= +google.golang.org/api v0.90.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= +google.golang.org/api v0.93.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= +google.golang.org/api v0.95.0/go.mod h1:eADj+UBuxkh5zlrSntJghuNeg8HwQ1w5lTKkuqaETEI= +google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= +google.golang.org/api v0.106.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= +google.golang.org/api v0.108.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= +google.golang.org/api v0.110.0 h1:l+rh0KYUooe9JGbGVx71tbFo4SMbMTXK3I3ia2QSEeU= +google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +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-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= +google.golang.org/genproto v0.0.0-20190716160619-c506a9f90610/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +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-20200108215221-bd8f9a0ef82f/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-20200324203455-a04cca1dde73/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/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-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210126160654-44e461bb6506/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-20210226172003-ab064af71705/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-20210329143202-679c6ae281ee/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-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= +google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= +google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= +google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220314164441-57ef72a4c106/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= +google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= +google.golang.org/genproto v0.0.0-20220329172620-7be39ac1afc7/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220628213854-d9e0b6570c03/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220722212130-b98a9ff5e252/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE= +google.golang.org/genproto v0.0.0-20220801145646-83ce21fca29f/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= +google.golang.org/genproto v0.0.0-20220815135757-37a418bb8959/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220817144833-d7fd3f11b9b1/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220829144015-23454907ede3/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220829175752-36a9c930ecbf/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220913154956-18f8339a66a5/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220914142337-ca0e39ece12f/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220915135415-7fd63a7952de/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220916172020-2692e8806bfa/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220919141832-68c03719ef51/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220920201722-2b89144ce006/go.mod h1:ht8XFiar2npT/g4vkk7O0WYS1sHOHbdujxbEp7CJWbw= +google.golang.org/genproto v0.0.0-20220926165614-551eb538f295/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= +google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= +google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqwhZAwq4wsRUaVG555sVgsNmIjRtO7t/JH29U= +google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= +google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= +google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= +google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230124163310-31e0e69b6fc2/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230209215440-0dfe4f8abfcc/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44 h1:EfLuoKW5WfkgVdDy7dTK8qSbH37AX5mj/MFh+bGPz14= +google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44/go.mod h1:8B0gmkoRebU8ukX6HP+4wrVQUY1+6PkQ44BSyIlflHA= +google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.23.1/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.32.0/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.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= +google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= +google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= +google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= +google.golang.org/grpc v1.53.0 h1:LAv2ds7cmFV/XTS3XG1NneeENYrXGmorPxsBbptIjNc= +google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= +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.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.29.1 h1:7QBf+IK2gx70Ap/hDsOmam3GE0v9HicjfEdAxE62UoM= +google.golang.org/protobuf v1.29.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +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/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= +gopkg.in/cheggaaa/pb.v1 v1.0.27/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= +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/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= +gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= +gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= +gopkg.in/olebedev/go-duktape.v3 v3.0.0-20200619000410-60c24ae608a6/go.mod h1:uAJfkITjFhyEEuUfm7bsmCZRbW5WRq8s9EY8HZ6hCns= +gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/urfave/cli.v1 v1.20.0/go.mod h1:vuBzUtMdQeixQj8LVd+/98pzhxNGQoyuPBlsXHOQNO0= +gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= +gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= +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 v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= +gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= +gotest.tools/v3 v3.4.0 h1:ZazjZUfuVeZGLAmlKKuyv3IKP5orXcwtOwDQH6YVr6o= +gotest.tools/v3 v3.4.0/go.mod h1:CtbdzLSsqVhDgMtKsx03ird5YTGB3ar27v0u/yKBW5g= +honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +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= +lukechampine.com/blake3 v1.1.7 h1:GgRMhmdsuK8+ii6UZFDL8Nb+VyMwadAgcJyfYHxG6n0= +lukechampine.com/blake3 v1.1.7/go.mod h1:tkKEOtDkNtklkXtLNEOGNq5tcV90tJiA1vAA12R78LA= +lukechampine.com/uint128 v1.2.0/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= +modernc.org/cc/v3 v3.40.0/go.mod h1:/bTg4dnWkSXowUO6ssQKnOV0yMVxDYNIsIrzqTFDGH0= +modernc.org/ccgo/v3 v3.16.13/go.mod h1:2Quk+5YgpImhPjv2Qsob1DnZ/4som1lJTodubIcoUkY= +modernc.org/libc v1.22.3 h1:D/g6O5ftAfavceqlLOFwaZuA5KYafKwmr30A6iSqoyY= +modernc.org/libc v1.22.3/go.mod h1:MQrloYP209xa2zHome2a8HLiLm6k0UT8CoHpV74tOFw= +modernc.org/mathutil v1.5.0 h1:rV0Ko/6SfM+8G+yKiyI830l3Wuz1zRutdslNoQ0kfiQ= +modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/memory v1.5.0 h1:N+/8c5rE6EqugZwHii4IFsaJ7MUhoWX07J5tC/iI5Ds= +modernc.org/memory v1.5.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= +modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= +modernc.org/sqlite v1.21.0 h1:4aP4MdUf15i3R3M2mx6Q90WHKz3nZLoz96zlB6tNdow= +modernc.org/sqlite v1.21.0/go.mod h1:XwQ0wZPIh1iKb5mkvCJ3szzbhk+tykC8ZWqTRTgYRwI= +modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw= +modernc.org/token v1.0.1/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= +nhooyr.io/websocket v1.8.6 h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k= +nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= +pgregory.net/rapid v0.5.5 h1:jkgx1TjbQPD/feRoK+S/mXw9e1uj6WilpHrXJowi6oA= +pgregory.net/rapid v0.5.5/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= +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.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= +sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= +sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= +sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= diff --git a/integration_tests/dungeon_test.go b/integration_tests/dungeon_test.go index 3ff58970..e5be52df 100644 --- a/integration_tests/dungeon_test.go +++ b/integration_tests/dungeon_test.go @@ -16,7 +16,6 @@ import ( banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" transfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" - "github.com/icza/dyno" ibctest "github.com/strangelove-ventures/interchaintest/v7" "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" "github.com/strangelove-ventures/interchaintest/v7/ibc" @@ -28,11 +27,6 @@ import ( "google.golang.org/grpc/credentials/insecure" ) -const ( - votingPeriod = "10s" - maxDepositPeriod = "10s" -) - func TestDungeonTransferBlock(t *testing.T) { if testing.Short() { t.Skip("skipping in short mode") @@ -348,29 +342,3 @@ func TestDungeonTransferBlock(t *testing.T) { require.NoError(t, err) require.Equal(t, int64(10_000_000), osmoUserBalAfterIbcReturnTransfer) } - -func modifyGenesisShortProposals(votingPeriod string, maxDepositPeriod string) func(ibc.ChainConfig, []byte) ([]byte, error) { - return func(chainConfig ibc.ChainConfig, genbz []byte) ([]byte, error) { - g := make(map[string]interface{}) - if err := json.Unmarshal(genbz, &g); err != nil { - return nil, fmt.Errorf("failed to unmarshal genesis file: %w", err) - } - if err := dyno.Set(g, votingPeriod, "app_state", "gov", "params", "voting_period"); err != nil { - return nil, fmt.Errorf("failed to set voting period in genesis json: %w", err) - } - if err := dyno.Set(g, maxDepositPeriod, "app_state", "gov", "params", "max_deposit_period"); err != nil { - return nil, fmt.Errorf("failed to set voting period in genesis json: %w", err) - } - if err := dyno.Set(g, chainConfig.Denom, "app_state", "gov", "params", "min_deposit", 0, "denom"); err != nil { - return nil, fmt.Errorf("failed to set voting period in genesis json: %w", err) - } - if err := dyno.Set(g, "100", "app_state", "gov", "params", "min_deposit", 0, "amount"); err != nil { - return nil, fmt.Errorf("failed to set voting period in genesis json: %w", err) - } - out, err := json.Marshal(g) - if err != nil { - return nil, fmt.Errorf("failed to marshal genesis bytes to json: %w", err) - } - return out, nil - } -} diff --git a/integration_tests/mint_test.go b/integration_tests/mint_test.go new file mode 100644 index 00000000..4a785eed --- /dev/null +++ b/integration_tests/mint_test.go @@ -0,0 +1,104 @@ +package integration_tests + +import ( + "encoding/json" + "strconv" + "testing" + + "github.com/icza/dyno" + "github.com/strangelove-ventures/interchaintest/v7/testutil" + "github.com/stretchr/testify/require" +) + +func TestMintModuleNoInflationNoFees(t *testing.T) { + if testing.Short() { + t.Skip("skipping in short mode") + } + + t.Parallel() + + xion, ctx := BuildXionChain(t) + // Get the distribution module account address + var moduleAccount map[string]interface{} + // Query the distribution module account + queryRes, _, err := xion.FullNodes[0].ExecQuery(ctx, "auth", "module-account", "distribution") + require.NoError(t, err) + require.NoError(t, json.Unmarshal(queryRes, &moduleAccount)) + moduleAccountAddress, err := dyno.GetString(moduleAccount, "account", "base_account", "address") + require.NoError(t, err) + // Get the distribution module account balance + initialModuleAccountBalance, err := xion.GetBalance(ctx, moduleAccountAddress, xion.Config().Denom) + require.NoError(t, err) + t.Logf("Initial distribution address balance: %d", initialModuleAccountBalance) + + // Query the mint module for the current inflation + var inflation json.Number + queryRes, _, err = xion.FullNodes[0].ExecQuery(ctx, "mint", "inflation") + require.NoError(t, err) + require.NoError(t, json.Unmarshal(queryRes, &inflation)) + inflationValue, err := inflation.Float64() + t.Logf("Current inflation: %f", inflationValue) + require.NoError(t, err, "inflation should be a float") + // Make sure inflation is 0 + require.Equal(t, 0.0, inflationValue) + + // Query the mint module for inflation rate change + var params = make(map[string]interface{}) + queryRes, _, err = xion.FullNodes[0].ExecQuery(ctx, "mint", "params") + require.NoError(t, err) + require.NoError(t, json.Unmarshal(queryRes, ¶ms)) + inflationRateChange, err := dyno.GetString(params, "inflation_rate_change") + require.NoError(t, err, "inflation_rate_change should be a string") + inflationRateChangeValue, err := strconv.ParseFloat(inflationRateChange, 64) + require.NoError(t, err, "inflation_rate_change should be convertible to float") + t.Logf("Current inflation rate change: %f", inflationRateChangeValue) + // Make sure inflation rate change is 0 + require.Equal(t, 0.0, inflationRateChangeValue) + + // Get the total bank supply + jsonRes := make(map[string]interface{}) + queryRes, _, err = xion.FullNodes[0].ExecQuery(ctx, "bank", "total") + require.NoError(t, err) + + require.NoError(t, json.Unmarshal(queryRes, &jsonRes)) + + // Presuming we are the only denom on the chain + totalSupply, err := dyno.GetSlice(jsonRes, "supply") + require.NoError(t, err) + xionCoin := totalSupply[0] + require.NotEmpty(t, xionCoin) + // Make sure we selected the uxion denom + xionCoinDenom, err := dyno.GetString(xionCoin, "denom") + require.NoError(t, err) + require.Equal(t, xionCoinDenom, xion.Config().Denom) + initialXionSupply, err := dyno.GetString(xionCoin, "amount") + require.NoError(t, err) + t.Logf("Initial Xion supply: %s", initialXionSupply) + + // Wait for some blocks and check if that supply stays the same + chainHeight, _ := xion.Height(ctx) + err = testutil.WaitForBlocks(ctx, int(chainHeight)+10, xion) + require.NoError(t, err) + + // Get the distribution module account balance + currentModuleAccountBalance, err := xion.GetBalance(ctx, moduleAccountAddress, xion.Config().Denom) + require.NoError(t, err) + t.Logf("Current distribution address balance: %d", currentModuleAccountBalance) + + // Get the total bank supply + currentResJson := make(map[string]interface{}) + currentSupplyRes, _, queryErr := xion.FullNodes[0].ExecQuery(ctx, "bank", "total") + require.NoError(t, queryErr) + require.NoError(t, json.Unmarshal(currentSupplyRes, ¤tResJson)) + + newTotalSupply, err := dyno.GetSlice(currentResJson, "supply") + require.NoError(t, err) + currentXionCoin := newTotalSupply[0] + + currentXionSupply, err := dyno.GetString(currentXionCoin, "amount") + require.NoError(t, err) + t.Logf("Current Xion supply: %s", currentXionSupply) + + require.Equal(t, initialXionSupply, currentXionSupply) + require.Equal(t, initialModuleAccountBalance, currentModuleAccountBalance) +} diff --git a/integration_tests/send_test.go b/integration_tests/send_test.go index 31a4f30b..0ce0a01f 100644 --- a/integration_tests/send_test.go +++ b/integration_tests/send_test.go @@ -1,24 +1,18 @@ package integration_tests import ( - "context" "encoding/json" "fmt" - authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - "os" - "strings" "testing" "time" xiontypes "github.com/burnt-labs/xion/x/xion/types" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/types" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" ibctest "github.com/strangelove-ventures/interchaintest/v7" "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" - "github.com/strangelove-ventures/interchaintest/v7/ibc" - "github.com/strangelove-ventures/interchaintest/v7/testreporter" "github.com/stretchr/testify/require" - "go.uber.org/zap/zaptest" ) func TestXionSendPlatformFee(t *testing.T) { @@ -28,83 +22,7 @@ func TestXionSendPlatformFee(t *testing.T) { t.Parallel() - ctx := context.Background() - - var numFullNodes = 1 - var numValidators = 3 - - // pulling image from env to foster local dev - imageTag := os.Getenv("XION_IMAGE") - imageTagComponents := strings.Split(imageTag, ":") - - // Chain factory - cf := ibctest.NewBuiltinChainFactory(zaptest.NewLogger(t), []*ibctest.ChainSpec{ - { - Name: imageTagComponents[0], - Version: imageTagComponents[1], - ChainConfig: ibc.ChainConfig{ - Images: []ibc.DockerImage{ - { - Repository: imageTagComponents[0], - Version: imageTagComponents[1], - UidGid: "1025:1025", - }, - }, - GasPrices: "0.0uxion", - GasAdjustment: 1.3, - Type: "cosmos", - ChainID: "xion-1", - Bin: "xiond", - Bech32Prefix: "xion", - Denom: "uxion", - TrustingPeriod: "336h", - ModifyGenesis: modifyGenesisShortProposals(votingPeriod, maxDepositPeriod), - UsingNewGenesisCommand: true, - }, - NumValidators: &numValidators, - NumFullNodes: &numFullNodes, - }, - }) - - chains, err := cf.Chains(t.Name()) - require.NoError(t, err) - - xion := chains[0].(*cosmos.CosmosChain) - - // Relayer Factory - client, network := ibctest.DockerSetup(t) - //relayer := ibctest.NewBuiltinRelayerFactory(ibc.CosmosRly, zaptest.NewLogger(t)).Build( - // t, client, network) - - // Prep Interchain - const ibcPath = "xion-osmo-dungeon-test" - ic := ibctest.NewInterchain(). - AddChain(xion) - //AddRelayer(relayer, "relayer"). - //AddLink(ibctest.InterchainLink{ - // Chain1: xion, - // Chain2: osmosis, - // Relayer: relayer, - // Path: ibcPath, - //}) - - // Log location - f, err := ibctest.CreateLogFile(fmt.Sprintf("%d.json", time.Now().Unix())) - require.NoError(t, err) - // Reporter/logs - rep := testreporter.NewReporter(f) - eRep := rep.RelayerExecReporter(t) - - // Build Interchain - require.NoError(t, ic.Build(ctx, eRep, ibctest.InterchainBuildOptions{ - TestName: t.Name(), - Client: client, - NetworkID: network, - BlockDatabaseFile: ibctest.DefaultBlockDatabaseFilepath(), - - SkipPathCreation: false}, - ), - ) + xion, ctx := BuildXionChain(t) // Create and Fund User Wallets t.Log("creating and funding user accounts") @@ -153,6 +71,7 @@ func TestXionSendPlatformFee(t *testing.T) { cdc := codec.NewProtoCodec(xion.Config().EncodingConfig.InterfaceRegistry) msg, err := cdc.MarshalInterfaceJSON(&setPlatformPercentageMsg) + require.NoError(t, err) prop := cosmos.Proposal{ Messages: []json.RawMessage{msg}, diff --git a/integration_tests/utils.go b/integration_tests/utils.go new file mode 100644 index 00000000..df5de449 --- /dev/null +++ b/integration_tests/utils.go @@ -0,0 +1,129 @@ +package integration_tests + +import ( + "context" + "encoding/json" + "fmt" + "github.com/icza/dyno" + "os" + "strings" + "testing" + "time" + + "github.com/strangelove-ventures/interchaintest/v7" + "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" + "github.com/strangelove-ventures/interchaintest/v7/ibc" + "github.com/strangelove-ventures/interchaintest/v7/testreporter" + "github.com/stretchr/testify/require" + "go.uber.org/zap/zaptest" +) + +func BuildXionChain(t *testing.T) (*cosmos.CosmosChain, context.Context) { + ctx := context.Background() + + var numFullNodes = 1 + var numValidators = 3 + + // pulling image from env to foster local dev + imageTag := os.Getenv("XION_IMAGE") + imageTagComponents := strings.Split(imageTag, ":") + + // Chain factory + cf := interchaintest.NewBuiltinChainFactory(zaptest.NewLogger(t), []*interchaintest.ChainSpec{ + { + Name: imageTagComponents[0], + Version: imageTagComponents[1], + ChainConfig: ibc.ChainConfig{ + Images: []ibc.DockerImage{ + { + Repository: imageTagComponents[0], + Version: imageTagComponents[1], + UidGid: "1025:1025", + }, + }, + GasPrices: "0.0uxion", + GasAdjustment: 1.3, + Type: "cosmos", + ChainID: "xion-1", + Bin: "xiond", + Bech32Prefix: "xion", + Denom: "uxion", + TrustingPeriod: "336h", + ModifyGenesis: modifyGenesisShortProposals(votingPeriod, maxDepositPeriod), + UsingNewGenesisCommand: true, + }, + NumValidators: &numValidators, + NumFullNodes: &numFullNodes, + }, + }) + + chains, err := cf.Chains(t.Name()) + require.NoError(t, err) + + xion := chains[0].(*cosmos.CosmosChain) + + client, network := interchaintest.DockerSetup(t) + + // Prep Interchain + ic := interchaintest.NewInterchain(). + AddChain(xion) + + // Log location + f, err := interchaintest.CreateLogFile(fmt.Sprintf("%d.json", time.Now().Unix())) + require.NoError(t, err) + // Reporter/logs + rep := testreporter.NewReporter(f) + eRep := rep.RelayerExecReporter(t) + + // Build Interchain + require.NoError(t, ic.Build(ctx, eRep, interchaintest.InterchainBuildOptions{ + TestName: t.Name(), + Client: client, + NetworkID: network, + BlockDatabaseFile: interchaintest.DefaultBlockDatabaseFilepath(), + + SkipPathCreation: false}, + ), + ) + return xion, ctx +} + +const ( + votingPeriod = "10s" + maxDepositPeriod = "10s" +) + +func modifyGenesisShortProposals(votingPeriod string, maxDepositPeriod string) func(ibc.ChainConfig, []byte) ([]byte, error) { + return func(chainConfig ibc.ChainConfig, genbz []byte) ([]byte, error) { + g := make(map[string]interface{}) + if err := json.Unmarshal(genbz, &g); err != nil { + return nil, fmt.Errorf("failed to unmarshal genesis file: %w", err) + } + if err := dyno.Set(g, votingPeriod, "app_state", "gov", "params", "voting_period"); err != nil { + return nil, fmt.Errorf("failed to set voting period in genesis json: %w", err) + } + if err := dyno.Set(g, maxDepositPeriod, "app_state", "gov", "params", "max_deposit_period"); err != nil { + return nil, fmt.Errorf("failed to set voting period in genesis json: %w", err) + } + if err := dyno.Set(g, chainConfig.Denom, "app_state", "gov", "params", "min_deposit", 0, "denom"); err != nil { + return nil, fmt.Errorf("failed to set voting period in genesis json: %w", err) + } + if err := dyno.Set(g, "100", "app_state", "gov", "params", "min_deposit", 0, "amount"); err != nil { + return nil, fmt.Errorf("failed to set voting period in genesis json: %w", err) + } + if err := dyno.Set(g, "0", "app_state", "mint", "params", "inflation_min"); err != nil { + return nil, fmt.Errorf("failed to set inflation in genesis json: %w", err) + } + if err := dyno.Set(g, "0", "app_state", "mint", "params", "inflation_max"); err != nil { + return nil, fmt.Errorf("failed to set inflation in genesis json: %w", err) + } + if err := dyno.Set(g, "0", "app_state", "mint", "params", "inflation_rate_change"); err != nil { + return nil, fmt.Errorf("failed to set rate of inflation change in genesis json: %w", err) + } + out, err := json.Marshal(g) + if err != nil { + return nil, fmt.Errorf("failed to marshal genesis bytes to json: %w", err) + } + return out, nil + } +} From 274a097af8098787c4c5a10c4268d94ee4f1f8a2 Mon Sep 17 00:00:00 2001 From: peartes Date: Tue, 16 May 2023 20:13:14 +0100 Subject: [PATCH 058/501] chore: re-organize functions --- integration_tests/mint_test.go | 86 ++-------------------------------- 1 file changed, 3 insertions(+), 83 deletions(-) diff --git a/integration_tests/mint_test.go b/integration_tests/mint_test.go index 4a785eed..6d51f3b8 100644 --- a/integration_tests/mint_test.go +++ b/integration_tests/mint_test.go @@ -1,13 +1,9 @@ package integration_tests import ( - "encoding/json" - "strconv" "testing" - "github.com/icza/dyno" "github.com/strangelove-ventures/interchaintest/v7/testutil" - "github.com/stretchr/testify/require" ) func TestMintModuleNoInflationNoFees(t *testing.T) { @@ -18,87 +14,11 @@ func TestMintModuleNoInflationNoFees(t *testing.T) { t.Parallel() xion, ctx := BuildXionChain(t) - // Get the distribution module account address - var moduleAccount map[string]interface{} - // Query the distribution module account - queryRes, _, err := xion.FullNodes[0].ExecQuery(ctx, "auth", "module-account", "distribution") - require.NoError(t, err) - require.NoError(t, json.Unmarshal(queryRes, &moduleAccount)) - moduleAccountAddress, err := dyno.GetString(moduleAccount, "account", "base_account", "address") - require.NoError(t, err) - // Get the distribution module account balance - initialModuleAccountBalance, err := xion.GetBalance(ctx, moduleAccountAddress, xion.Config().Denom) - require.NoError(t, err) - t.Logf("Initial distribution address balance: %d", initialModuleAccountBalance) - - // Query the mint module for the current inflation - var inflation json.Number - queryRes, _, err = xion.FullNodes[0].ExecQuery(ctx, "mint", "inflation") - require.NoError(t, err) - require.NoError(t, json.Unmarshal(queryRes, &inflation)) - inflationValue, err := inflation.Float64() - t.Logf("Current inflation: %f", inflationValue) - require.NoError(t, err, "inflation should be a float") - // Make sure inflation is 0 - require.Equal(t, 0.0, inflationValue) - - // Query the mint module for inflation rate change - var params = make(map[string]interface{}) - queryRes, _, err = xion.FullNodes[0].ExecQuery(ctx, "mint", "params") - require.NoError(t, err) - require.NoError(t, json.Unmarshal(queryRes, ¶ms)) - inflationRateChange, err := dyno.GetString(params, "inflation_rate_change") - require.NoError(t, err, "inflation_rate_change should be a string") - inflationRateChangeValue, err := strconv.ParseFloat(inflationRateChange, 64) - require.NoError(t, err, "inflation_rate_change should be convertible to float") - t.Logf("Current inflation rate change: %f", inflationRateChangeValue) - // Make sure inflation rate change is 0 - require.Equal(t, 0.0, inflationRateChangeValue) - - // Get the total bank supply - jsonRes := make(map[string]interface{}) - queryRes, _, err = xion.FullNodes[0].ExecQuery(ctx, "bank", "total") - require.NoError(t, err) - - require.NoError(t, json.Unmarshal(queryRes, &jsonRes)) - - // Presuming we are the only denom on the chain - totalSupply, err := dyno.GetSlice(jsonRes, "supply") - require.NoError(t, err) - xionCoin := totalSupply[0] - require.NotEmpty(t, xionCoin) - // Make sure we selected the uxion denom - xionCoinDenom, err := dyno.GetString(xionCoin, "denom") - require.NoError(t, err) - require.Equal(t, xionCoinDenom, xion.Config().Denom) - initialXionSupply, err := dyno.GetString(xionCoin, "amount") - require.NoError(t, err) - t.Logf("Initial Xion supply: %s", initialXionSupply) // Wait for some blocks and check if that supply stays the same chainHeight, _ := xion.Height(ctx) - err = testutil.WaitForBlocks(ctx, int(chainHeight)+10, xion) - require.NoError(t, err) - - // Get the distribution module account balance - currentModuleAccountBalance, err := xion.GetBalance(ctx, moduleAccountAddress, xion.Config().Denom) - require.NoError(t, err) - t.Logf("Current distribution address balance: %d", currentModuleAccountBalance) - - // Get the total bank supply - currentResJson := make(map[string]interface{}) - currentSupplyRes, _, queryErr := xion.FullNodes[0].ExecQuery(ctx, "bank", "total") - require.NoError(t, queryErr) - require.NoError(t, json.Unmarshal(currentSupplyRes, ¤tResJson)) - - newTotalSupply, err := dyno.GetSlice(currentResJson, "supply") - require.NoError(t, err) - currentXionCoin := newTotalSupply[0] - - currentXionSupply, err := dyno.GetString(currentXionCoin, "amount") - require.NoError(t, err) - t.Logf("Current Xion supply: %s", currentXionSupply) + testutil.WaitForBlocks(ctx, int(chainHeight)+10, xion) - require.Equal(t, initialXionSupply, currentXionSupply) - require.Equal(t, initialModuleAccountBalance, currentModuleAccountBalance) + // Run test harness + MintTestHarness(t, xion, ctx) } From 956e1a81714684735628a341de7d6f1d1e7ee7bb Mon Sep 17 00:00:00 2001 From: peartes Date: Tue, 16 May 2023 20:15:24 +0100 Subject: [PATCH 059/501] chore: re-organize --- integration_tests/mint_test.go | 17 ++++ integration_tests/send_test.go | 157 --------------------------------- integration_tests/utils.go | 140 ++++++++++++++++++++++++++++- 3 files changed, 156 insertions(+), 158 deletions(-) diff --git a/integration_tests/mint_test.go b/integration_tests/mint_test.go index 6d51f3b8..b5411816 100644 --- a/integration_tests/mint_test.go +++ b/integration_tests/mint_test.go @@ -22,3 +22,20 @@ func TestMintModuleNoInflationNoFees(t *testing.T) { // Run test harness MintTestHarness(t, xion, ctx) } + +func TestMintModuleInflationNoFees(t *testing.T) { + if testing.Short() { + t.Skip("skipping in short mode") + } + + t.Parallel() + + xion, ctx := BuildXionChain(t) + + // Wait for some blocks and check if that supply stays the same + chainHeight, _ := xion.Height(ctx) + testutil.WaitForBlocks(ctx, int(chainHeight)+10, xion) + + // Run test harness + MintTestHarness(t, xion, ctx) +} diff --git a/integration_tests/send_test.go b/integration_tests/send_test.go index c31ba2d6..f79c6c16 100644 --- a/integration_tests/send_test.go +++ b/integration_tests/send_test.go @@ -1,24 +1,18 @@ package integration_tests import ( - "context" "encoding/json" "fmt" - "math/rand" - "strconv" "testing" "time" - "cosmossdk.io/math" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - "github.com/icza/dyno" xiontypes "github.com/burnt-labs/xion/x/xion/types" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/types" ibctest "github.com/strangelove-ventures/interchaintest/v7" "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" - "github.com/strangelove-ventures/interchaintest/v7/testutil" "github.com/stretchr/testify/require" ) @@ -142,154 +136,3 @@ func TestXionSendPlatformFee(t *testing.T) { require.NoError(t, err) require.Equal(t, uint64(290), uint64(postReceivingBalance)) } - -func getTotalCoinSupplyInBank(t *testing.T, xion *cosmos.CosmosChain, ctx context.Context, denom string, blockHeight uint64) string { - if blockHeight == 0 { - blockHeight, _ = xion.Height(ctx) - require.Greater(t, blockHeight, 0) - } - jsonRes := make(map[string]interface{}) - queryRes, _, err := xion.FullNodes[0].ExecQuery(ctx, "bank", "total", "--height", strconv.FormatInt(int64(blockHeight), 10)) - require.NoError(t, err) - - require.NoError(t, json.Unmarshal(queryRes, &jsonRes)) - - // Presuming we are the only denom on the chain - totalSupply, err := dyno.GetSlice(jsonRes, "supply") - require.NoError(t, err) - xionCoin := totalSupply[0] - require.NotEmpty(t, xionCoin) - // Make sure we selected the uxion denom - xionCoinDenom, err := dyno.GetString(xionCoin, "denom") - require.NoError(t, err) - require.Equal(t, xionCoinDenom, denom) - initialXionSupply, err := dyno.GetString(xionCoin, "amount") - require.NoError(t, err) - return initialXionSupply -} - -func getAddressBankBalanceAtHeight(t *testing.T, xion *cosmos.CosmosChain, ctx context.Context, address string, denom string, blockHeight uint64) string { - if blockHeight == 0 { - blockHeight, _ = xion.Height(ctx) - require.Greater(t, blockHeight, 0) - } - jsonRes := make(map[string]interface{}) - queryRes, _, err := xion.FullNodes[0].ExecQuery(ctx, "bank", "balances", address, "--height", strconv.FormatInt(int64(blockHeight), 10)) - require.NoError(t, err) - - require.NoError(t, json.Unmarshal(queryRes, &jsonRes)) - - balances, err := dyno.GetSlice(jsonRes, "balances") - require.NoError(t, err) - if len(balances) == 0 { - return "0" - } - // Make sure we selected the uxion denom - balanceDenom, err := dyno.GetString(balances[0], "denom") - require.NoError(t, err) - require.Equal(t, balanceDenom, denom) - balance, err := dyno.GetString(balances[0], "amount") - require.NoError(t, err) - t.Logf("Balance for address %s: %s", address, balance) - return balance -} - -func GetModuleAddress(t *testing.T, xion *cosmos.CosmosChain, ctx context.Context, moduleName string) string { - jsonRes := make(map[string]interface{}) - queryRes, _, err := xion.FullNodes[0].ExecQuery(ctx, "auth", "module-account", moduleName) - require.NoError(t, err) - - require.NoError(t, json.Unmarshal(queryRes, &jsonRes)) - - moduleAddress, err := dyno.GetString(jsonRes, "account", "base_account", "address") - require.NoError(t, err) - t.Logf("%s module address: %s", moduleName, moduleAddress) - return moduleAddress -} - -// This test confirms the property of the module described at -// https://www.notion.so/burntlabs/Mint-Module-Blog-Post-78f59fb108c04e9ea5fa826dda30a340 -// Chain must have at least 12 blocks -func MintTestHarness(t *testing.T, xion *cosmos.CosmosChain, ctx context.Context) { - - // We pick a random block height and 10 contiguous blocks from that height - // and then test the property over these blocks - - currentBlockHeight, err := xion.Height(ctx) - require.NoError(t, err) - require.GreaterOrEqual(t, currentBlockHeight, uint64(12)) - // Get a random number from 1 to the (currentBlockHeight - 10) - randomHeight := rand.Intn(int(currentBlockHeight)-11) + 2 - - for i := randomHeight; i < randomHeight+10; i++ { - t.Logf("Current random height: %d", randomHeight) - // Get bank supply at previous height - previousXionBankSupply, err := strconv.ParseUint(getTotalCoinSupplyInBank(t, xion, ctx, xion.Config().Denom, uint64(randomHeight-1)), 10, 64) - t.Logf("Previous Xion bank supply: %d", previousXionBankSupply) - require.NoError(t, err, "bank supply should be convertible to an int64") - // Get bank supply at current height - currentXionBankSupply, err := strconv.ParseUint(getTotalCoinSupplyInBank(t, xion, ctx, xion.Config().Denom, uint64(randomHeight)), 10, 64) - t.Logf("Current Xion bank supply: %d", currentXionBankSupply) - require.NoError(t, err, "bank supply should be convertible to an int64") - tokenChange := currentXionBankSupply - previousXionBankSupply - - // Get the distribution module account address - distributionModuleAddress := GetModuleAddress(t, xion, ctx, "distribution") - // Get distribution module account balance in previous height - previousDistributionModuleBalance, err := xion.GetBalance(ctx, distributionModuleAddress, xion.Config().Denom) - require.NoError(t, err, "distribution module balance should be convertible to an int64") - // Get distribution module account balance in current height - currentDistributionModuleBalance, err := strconv.ParseUint(getAddressBankBalanceAtHeight(t, xion, ctx, distributionModuleAddress, xion.Config().Denom, uint64(randomHeight)), 10, 64) - require.NoError(t, err, "distribution module balance should be convertible to an int64") - - delta := currentDistributionModuleBalance - uint64(previousDistributionModuleBalance) - - feesAccrued := delta - tokenChange - - // Query the current block provision - var annualProvision json.Number - queryRes, _, err := xion.FullNodes[0].ExecQuery(ctx, "mint", "annual-provisions", "--height", strconv.FormatInt(int64(randomHeight), 10)) - require.NoError(t, err) - require.NoError(t, json.Unmarshal(queryRes, &annualProvision)) - // Query the block per year - var params = make(map[string]interface{}) - queryRes, _, err = xion.FullNodes[0].ExecQuery(ctx, "mint", "params") - require.NoError(t, err) - require.NoError(t, json.Unmarshal(queryRes, ¶ms)) - blocksPerYear, err := dyno.GetInteger(params, "blocks_per_year") - require.NoError(t, err) - // Calculate the block provision - blockProvision := math.LegacyMustNewDecFromStr(annualProvision.String()).QuoInt(math.NewInt(blocksPerYear)) // This ideally is the minted tokens for the block - - // Make sure the minted tokens is equal to the block provision - fees accrued - if blockProvision.TruncateInt().GT(math.NewIntFromUint64(feesAccrued)) { - // We have minted tokens - mintedTokens := blockProvision.TruncateInt().Sub(math.NewIntFromUint64(feesAccrued)) - require.Equal(t, mintedTokens, math.NewInt(int64(tokenChange))) - } else if blockProvision.TruncateInt().LT(math.NewIntFromUint64(feesAccrued)) { - // We have burned tokens - burnedTokens := math.NewIntFromUint64(feesAccrued).Sub(blockProvision.TruncateInt()) - require.Equal(t, burnedTokens, math.NewInt(int64(tokenChange))) - } else { - // We have not minted or burned tokens - require.Equal(t, math.NewInt(0), math.NewInt(int64(tokenChange))) - } - } -} - -func TestMintModuleInflationNoFees(t *testing.T) { - if testing.Short() { - t.Skip("skipping in short mode") - } - - t.Parallel() - - xion, ctx := BuildXionChain(t) - - // Wait for some blocks and check if that supply stays the same - chainHeight, _ := xion.Height(ctx) - testutil.WaitForBlocks(ctx, int(chainHeight)+10, xion) - - // Run test harness - MintTestHarness(t, xion, ctx) -} diff --git a/integration_tests/utils.go b/integration_tests/utils.go index df5de449..06449f0c 100644 --- a/integration_tests/utils.go +++ b/integration_tests/utils.go @@ -4,12 +4,16 @@ import ( "context" "encoding/json" "fmt" - "github.com/icza/dyno" + "math/rand" "os" + "strconv" "strings" "testing" "time" + "cosmossdk.io/math" + "github.com/icza/dyno" + "github.com/strangelove-ventures/interchaintest/v7" "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" "github.com/strangelove-ventures/interchaintest/v7/ibc" @@ -127,3 +131,137 @@ func modifyGenesisShortProposals(votingPeriod string, maxDepositPeriod string) f return out, nil } } + +func getTotalCoinSupplyInBank(t *testing.T, xion *cosmos.CosmosChain, ctx context.Context, denom string, blockHeight uint64) string { + if blockHeight == 0 { + blockHeight, _ = xion.Height(ctx) + require.Greater(t, blockHeight, 0) + } + jsonRes := make(map[string]interface{}) + queryRes, _, err := xion.FullNodes[0].ExecQuery(ctx, "bank", "total", "--height", strconv.FormatInt(int64(blockHeight), 10)) + require.NoError(t, err) + + require.NoError(t, json.Unmarshal(queryRes, &jsonRes)) + + // Presuming we are the only denom on the chain + totalSupply, err := dyno.GetSlice(jsonRes, "supply") + require.NoError(t, err) + xionCoin := totalSupply[0] + require.NotEmpty(t, xionCoin) + // Make sure we selected the uxion denom + xionCoinDenom, err := dyno.GetString(xionCoin, "denom") + require.NoError(t, err) + require.Equal(t, xionCoinDenom, denom) + initialXionSupply, err := dyno.GetString(xionCoin, "amount") + require.NoError(t, err) + return initialXionSupply +} + +func getAddressBankBalanceAtHeight(t *testing.T, xion *cosmos.CosmosChain, ctx context.Context, address string, denom string, blockHeight uint64) string { + if blockHeight == 0 { + blockHeight, _ = xion.Height(ctx) + require.Greater(t, blockHeight, 0) + } + jsonRes := make(map[string]interface{}) + queryRes, _, err := xion.FullNodes[0].ExecQuery(ctx, "bank", "balances", address, "--height", strconv.FormatInt(int64(blockHeight), 10)) + require.NoError(t, err) + + require.NoError(t, json.Unmarshal(queryRes, &jsonRes)) + + balances, err := dyno.GetSlice(jsonRes, "balances") + require.NoError(t, err) + if len(balances) == 0 { + return "0" + } + // Make sure we selected the uxion denom + balanceDenom, err := dyno.GetString(balances[0], "denom") + require.NoError(t, err) + require.Equal(t, balanceDenom, denom) + balance, err := dyno.GetString(balances[0], "amount") + require.NoError(t, err) + t.Logf("Balance for address %s: %s", address, balance) + return balance +} + +func GetModuleAddress(t *testing.T, xion *cosmos.CosmosChain, ctx context.Context, moduleName string) string { + jsonRes := make(map[string]interface{}) + queryRes, _, err := xion.FullNodes[0].ExecQuery(ctx, "auth", "module-account", moduleName) + require.NoError(t, err) + + require.NoError(t, json.Unmarshal(queryRes, &jsonRes)) + + moduleAddress, err := dyno.GetString(jsonRes, "account", "base_account", "address") + require.NoError(t, err) + t.Logf("%s module address: %s", moduleName, moduleAddress) + return moduleAddress +} + +// This test confirms the property of the module described at +// https://www.notion.so/burntlabs/Mint-Module-Blog-Post-78f59fb108c04e9ea5fa826dda30a340 +// Chain must have at least 12 blocks +func MintTestHarness(t *testing.T, xion *cosmos.CosmosChain, ctx context.Context) { + + // We pick a random block height and 10 contiguous blocks from that height + // and then test the property over these blocks + + currentBlockHeight, err := xion.Height(ctx) + require.NoError(t, err) + require.GreaterOrEqual(t, currentBlockHeight, uint64(12)) + // Get a random number from 1 to the (currentBlockHeight - 10) + randomHeight := rand.Intn(int(currentBlockHeight)-11) + 2 + + for i := randomHeight; i < randomHeight+10; i++ { + t.Logf("Current random height: %d", randomHeight) + // Get bank supply at previous height + previousXionBankSupply, err := strconv.ParseUint(getTotalCoinSupplyInBank(t, xion, ctx, xion.Config().Denom, uint64(randomHeight-1)), 10, 64) + t.Logf("Previous Xion bank supply: %d", previousXionBankSupply) + require.NoError(t, err, "bank supply should be convertible to an int64") + // Get bank supply at current height + currentXionBankSupply, err := strconv.ParseUint(getTotalCoinSupplyInBank(t, xion, ctx, xion.Config().Denom, uint64(randomHeight)), 10, 64) + t.Logf("Current Xion bank supply: %d", currentXionBankSupply) + require.NoError(t, err, "bank supply should be convertible to an int64") + tokenChange := currentXionBankSupply - previousXionBankSupply + + // Get the distribution module account address + distributionModuleAddress := GetModuleAddress(t, xion, ctx, "distribution") + // Get distribution module account balance in previous height + previousDistributionModuleBalance, err := xion.GetBalance(ctx, distributionModuleAddress, xion.Config().Denom) + require.NoError(t, err, "distribution module balance should be convertible to an int64") + // Get distribution module account balance in current height + currentDistributionModuleBalance, err := strconv.ParseUint(getAddressBankBalanceAtHeight(t, xion, ctx, distributionModuleAddress, xion.Config().Denom, uint64(randomHeight)), 10, 64) + require.NoError(t, err, "distribution module balance should be convertible to an int64") + + delta := currentDistributionModuleBalance - uint64(previousDistributionModuleBalance) + + feesAccrued := delta - tokenChange + + // Query the current block provision + var annualProvision json.Number + queryRes, _, err := xion.FullNodes[0].ExecQuery(ctx, "mint", "annual-provisions", "--height", strconv.FormatInt(int64(randomHeight), 10)) + require.NoError(t, err) + require.NoError(t, json.Unmarshal(queryRes, &annualProvision)) + // Query the block per year + var params = make(map[string]interface{}) + queryRes, _, err = xion.FullNodes[0].ExecQuery(ctx, "mint", "params") + require.NoError(t, err) + require.NoError(t, json.Unmarshal(queryRes, ¶ms)) + blocksPerYear, err := dyno.GetInteger(params, "blocks_per_year") + require.NoError(t, err) + // Calculate the block provision + blockProvision := math.LegacyMustNewDecFromStr(annualProvision.String()).QuoInt(math.NewInt(blocksPerYear)) // This ideally is the minted tokens for the block + + // Make sure the minted tokens is equal to the block provision - fees accrued + if blockProvision.TruncateInt().GT(math.NewIntFromUint64(feesAccrued)) { + // We have minted tokens + mintedTokens := blockProvision.TruncateInt().Sub(math.NewIntFromUint64(feesAccrued)) + require.Equal(t, mintedTokens, math.NewInt(int64(tokenChange))) + } else if blockProvision.TruncateInt().LT(math.NewIntFromUint64(feesAccrued)) { + // We have burned tokens + burnedTokens := math.NewIntFromUint64(feesAccrued).Sub(blockProvision.TruncateInt()) + require.Equal(t, burnedTokens, math.NewInt(int64(tokenChange))) + } else { + // We have not minted or burned tokens + require.Equal(t, math.NewInt(0), math.NewInt(int64(tokenChange))) + } + } +} From 376562baa2378eccc865c2e4486c5d6b43d7623e Mon Sep 17 00:00:00 2001 From: peartes Date: Wed, 17 May 2023 17:02:07 +0100 Subject: [PATCH 060/501] chore: add in 2 more test cases --- integration_tests/dungeon_test.go | 7 +- integration_tests/mint_test.go | 147 +++++++++++++++++- integration_tests/send_test.go | 2 +- integration_tests/utils.go | 237 ++++++++++++++++++------------ 4 files changed, 291 insertions(+), 102 deletions(-) diff --git a/integration_tests/dungeon_test.go b/integration_tests/dungeon_test.go index e5be52df..4a902abc 100644 --- a/integration_tests/dungeon_test.go +++ b/integration_tests/dungeon_test.go @@ -27,6 +27,11 @@ import ( "google.golang.org/grpc/credentials/insecure" ) +const ( + votingPeriod = "10s" + maxDepositPeriod = "10s" +) + func TestDungeonTransferBlock(t *testing.T) { if testing.Short() { t.Skip("skipping in short mode") @@ -98,7 +103,7 @@ func TestDungeonTransferBlock(t *testing.T) { Bech32Prefix: "xion", Denom: "uxion", TrustingPeriod: "336h", - ModifyGenesis: modifyGenesisShortProposals(votingPeriod, maxDepositPeriod), + ModifyGenesis: ModifyInterChainGenesis(ModifyInterChainGenesisFn{ModifyGenesisShortProposals}, [][]string{{votingPeriod, maxDepositPeriod}}), UsingNewGenesisCommand: true, }, NumValidators: &numValidators, diff --git a/integration_tests/mint_test.go b/integration_tests/mint_test.go index b5411816..f820ef35 100644 --- a/integration_tests/mint_test.go +++ b/integration_tests/mint_test.go @@ -1,9 +1,24 @@ package integration_tests import ( + "context" + "encoding/json" + "fmt" + "sync" "testing" + "time" + "cosmossdk.io/math" + "github.com/cosmos/cosmos-sdk/crypto/keyring" + "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" "github.com/strangelove-ventures/interchaintest/v7/testutil" + "github.com/stretchr/testify/require" +) + +const ( + inflationMin = "0.0" + inflationMax = "0.0" + inflationRateChange = "0.0" ) func TestMintModuleNoInflationNoFees(t *testing.T) { @@ -11,16 +26,14 @@ func TestMintModuleNoInflationNoFees(t *testing.T) { t.Skip("skipping in short mode") } - t.Parallel() - - xion, ctx := BuildXionChain(t) + xion, ctx := BuildXionChain(t, ModifyInterChainGenesis(ModifyInterChainGenesisFn{ModifyGenesisInflation}, [][]string{{inflationMin, inflationMax, inflationRateChange}})) // Wait for some blocks and check if that supply stays the same chainHeight, _ := xion.Height(ctx) testutil.WaitForBlocks(ctx, int(chainHeight)+10, xion) // Run test harness - MintTestHarness(t, xion, ctx) + VerifyMintModuleTestRandomBlocks(t, xion, ctx) } func TestMintModuleInflationNoFees(t *testing.T) { @@ -30,12 +43,132 @@ func TestMintModuleInflationNoFees(t *testing.T) { t.Parallel() - xion, ctx := BuildXionChain(t) + xion, ctx := BuildXionChain(t, ModifyInterChainGenesis(ModifyInterChainGenesisFn{}, [][]string{{}})) - // Wait for some blocks and check if that supply stays the same chainHeight, _ := xion.Height(ctx) testutil.WaitForBlocks(ctx, int(chainHeight)+10, xion) // Run test harness - MintTestHarness(t, xion, ctx) + VerifyMintModuleTestRandomBlocks(t, xion, ctx) +} + +// TxCommand is a helper to retrieve a full command for broadcasting a tx +// with the chain node binary. +func feeTxCommand(chain *cosmos.CosmosChain, fee string, address ...string) []string { + command := []string{"tx"} + return chain.FullNodes[0].NodeCommand(append(command, + "bank", "send", address[0], address[1], + fmt.Sprintf("%s%s", "1000000", chain.Config().Denom), + "--from", "faucet", + "--fees", fmt.Sprintf("%s%s", fee, chain.Config().Denom), + "--chain-id", chain.Config().ChainID, + "--keyring-backend", keyring.BackendTest, + "--output", "json", + "-y", + )...) +} + +// Send bank send txs at duration intervals +func sendPeriodicBankTx(t *testing.T, chain *cosmos.CosmosChain, ctx context.Context, chainHeight uint64, duration int, txHashes *MintModuleTest, feeTypeHigh bool) { + // Create a test wallet to send funds to + err := chain.CreateKey(ctx, "testAccount") + require.NoError(t, err) + testAccountAddress, err := chain.FullNodes[0].AccountKeyBech32(ctx, "testAccount") + require.NoError(t, err) + faucet, err := chain.FullNodes[0].AccountKeyBech32(ctx, "faucet") + require.NoError(t, err) + curHeight, _ := chain.Height(ctx) + + for curHeight < chainHeight { + // Get the current block provision + blockProvisionDec := GetBlockAnnualProvision(t, chain, ctx, chain.Config().Denom, curHeight) // This the minted amount for the current block + var blockProvision math.Int + if feeTypeHigh { + // we are testing high fees + blockProvision = blockProvisionDec.TruncateInt().Mul(math.NewInt(2)) + } else { + // we are testing low fees + blockProvision = blockProvisionDec.TruncateInt().Quo(math.NewInt(2)) + } + // We send a fee that is 2x the block provision since the inflation rate cannot increase that much + stdout, ee, err := chain.Exec(ctx, feeTxCommand(chain, blockProvision.String(), faucet, testAccountAddress), nil) + if err != nil { + t.Log(string(stdout)) + t.Log(string(ee)) + t.Fatal(err) + break + } + + output := cosmos.CosmosTx{} + err = json.Unmarshal([]byte(stdout), &output) + if err != nil { + t.Fatal(err) + break + } + + txHashes.TxHashes = append(txHashes.TxHashes, output.TxHash) + + time.Sleep(time.Duration(duration) * time.Second) + curHeight, _ = chain.Height(ctx) + } +} + +type MintModuleTest struct { + TxHashes []string +} + +func TestMintModuleInflationHighFees(t *testing.T) { + if testing.Short() { + t.Skip("skipping in short mode") + } + + t.Parallel() + + xion, ctx := BuildXionChain(t, ModifyInterChainGenesis(ModifyInterChainGenesisFn{}, [][]string{{}})) + + txHashes := MintModuleTest{ + TxHashes: []string{}, + } + var mu sync.Mutex + + mu.Lock() + go func(t *testing.T, chain *cosmos.CosmosChain, ctx context.Context, blockHeight uint64, duration int, txHashes *MintModuleTest) { + sendPeriodicBankTx(t, xion, ctx, blockHeight, duration, txHashes, true) + }(t, xion, ctx, 20, 4, &txHashes) + mu.Unlock() + + // Wait some blocks + testutil.WaitForBlocks(ctx, 25, xion) + + require.NotEmpty(t, txHashes.TxHashes) + // Run test harness + VerifyMintModuleTest(t, xion, ctx, txHashes.TxHashes) +} + +func TestMintModuleInflationLowFees(t *testing.T) { + if testing.Short() { + t.Skip("skipping in short mode") + } + + t.Parallel() + + xion, ctx := BuildXionChain(t, ModifyInterChainGenesis(ModifyInterChainGenesisFn{}, [][]string{{}})) + + txHashes := MintModuleTest{ + TxHashes: []string{}, + } + var mu sync.Mutex + + mu.Lock() + go func(t *testing.T, chain *cosmos.CosmosChain, ctx context.Context, blockHeight uint64, duration int, txHashes *MintModuleTest) { + sendPeriodicBankTx(t, xion, ctx, blockHeight, duration, txHashes, false) + }(t, xion, ctx, 20, 4, &txHashes) + mu.Unlock() + + // Wait some blocks + testutil.WaitForBlocks(ctx, 25, xion) + + require.NotEmpty(t, txHashes.TxHashes) + // Run test harness + VerifyMintModuleTest(t, xion, ctx, txHashes.TxHashes) } diff --git a/integration_tests/send_test.go b/integration_tests/send_test.go index f79c6c16..95e61a74 100644 --- a/integration_tests/send_test.go +++ b/integration_tests/send_test.go @@ -23,7 +23,7 @@ func TestXionSendPlatformFee(t *testing.T) { t.Parallel() - xion, ctx := BuildXionChain(t) + xion, ctx := BuildXionChain(t, ModifyInterChainGenesis(ModifyInterChainGenesisFn{ModifyGenesisShortProposals}, [][]string{{votingPeriod, maxDepositPeriod}})) // Create and Fund User Wallets t.Log("creating and funding user accounts") diff --git a/integration_tests/utils.go b/integration_tests/utils.go index 06449f0c..4c76f958 100644 --- a/integration_tests/utils.go +++ b/integration_tests/utils.go @@ -12,6 +12,7 @@ import ( "time" "cosmossdk.io/math" + authTx "github.com/cosmos/cosmos-sdk/x/auth/tx" "github.com/icza/dyno" "github.com/strangelove-ventures/interchaintest/v7" @@ -22,11 +23,13 @@ import ( "go.uber.org/zap/zaptest" ) -func BuildXionChain(t *testing.T) (*cosmos.CosmosChain, context.Context) { +type ModifyInterChainGenesisFn []func(ibc.ChainConfig, []byte, ...string) ([]byte, error) + +func BuildXionChain(t *testing.T, modifyGenesis func(ibc.ChainConfig, []byte) ([]byte, error)) (*cosmos.CosmosChain, context.Context) { ctx := context.Background() var numFullNodes = 1 - var numValidators = 3 + var numValidators = 1 // pulling image from env to foster local dev imageTag := os.Getenv("XION_IMAGE") @@ -53,7 +56,7 @@ func BuildXionChain(t *testing.T) (*cosmos.CosmosChain, context.Context) { Bech32Prefix: "xion", Denom: "uxion", TrustingPeriod: "336h", - ModifyGenesis: modifyGenesisShortProposals(votingPeriod, maxDepositPeriod), + ModifyGenesis: modifyGenesis, UsingNewGenesisCommand: true, }, NumValidators: &numValidators, @@ -92,44 +95,64 @@ func BuildXionChain(t *testing.T) (*cosmos.CosmosChain, context.Context) { return xion, ctx } -const ( - votingPeriod = "10s" - maxDepositPeriod = "10s" -) - -func modifyGenesisShortProposals(votingPeriod string, maxDepositPeriod string) func(ibc.ChainConfig, []byte) ([]byte, error) { +func ModifyInterChainGenesis(fns ModifyInterChainGenesisFn, params [][]string) func(ibc.ChainConfig, []byte) ([]byte, error) { return func(chainConfig ibc.ChainConfig, genbz []byte) ([]byte, error) { - g := make(map[string]interface{}) - if err := json.Unmarshal(genbz, &g); err != nil { - return nil, fmt.Errorf("failed to unmarshal genesis file: %w", err) - } - if err := dyno.Set(g, votingPeriod, "app_state", "gov", "params", "voting_period"); err != nil { - return nil, fmt.Errorf("failed to set voting period in genesis json: %w", err) - } - if err := dyno.Set(g, maxDepositPeriod, "app_state", "gov", "params", "max_deposit_period"); err != nil { - return nil, fmt.Errorf("failed to set voting period in genesis json: %w", err) - } - if err := dyno.Set(g, chainConfig.Denom, "app_state", "gov", "params", "min_deposit", 0, "denom"); err != nil { - return nil, fmt.Errorf("failed to set voting period in genesis json: %w", err) + res := genbz + var err error + + for i, fn := range fns { + res, err = fn(chainConfig, res, params[i]...) + if err != nil { + return nil, fmt.Errorf("failed to modify genesis: %w", err) + } } - if err := dyno.Set(g, "100", "app_state", "gov", "params", "min_deposit", 0, "amount"); err != nil { - return nil, fmt.Errorf("failed to set voting period in genesis json: %w", err) - } - if err := dyno.Set(g, "0", "app_state", "mint", "params", "inflation_min"); err != nil { - return nil, fmt.Errorf("failed to set inflation in genesis json: %w", err) - } - if err := dyno.Set(g, "0", "app_state", "mint", "params", "inflation_max"); err != nil { - return nil, fmt.Errorf("failed to set inflation in genesis json: %w", err) - } - if err := dyno.Set(g, "0", "app_state", "mint", "params", "inflation_rate_change"); err != nil { - return nil, fmt.Errorf("failed to set rate of inflation change in genesis json: %w", err) - } - out, err := json.Marshal(g) - if err != nil { - return nil, fmt.Errorf("failed to marshal genesis bytes to json: %w", err) - } - return out, nil + return res, nil + } +} + +func ModifyGenesisShortProposals(chainConfig ibc.ChainConfig, genbz []byte, params ...string) ([]byte, error) { + g := make(map[string]interface{}) + if err := json.Unmarshal(genbz, &g); err != nil { + return nil, fmt.Errorf("failed to unmarshal genesis file: %w", err) + } + if err := dyno.Set(g, params[0], "app_state", "gov", "params", "voting_period"); err != nil { + return nil, fmt.Errorf("failed to set voting period in genesis json: %w", err) + } + if err := dyno.Set(g, params[1], "app_state", "gov", "params", "max_deposit_period"); err != nil { + return nil, fmt.Errorf("failed to set voting period in genesis json: %w", err) + } + if err := dyno.Set(g, chainConfig.Denom, "app_state", "gov", "params", "min_deposit", 0, "denom"); err != nil { + return nil, fmt.Errorf("failed to set voting period in genesis json: %w", err) + } + if err := dyno.Set(g, "100", "app_state", "gov", "params", "min_deposit", 0, "amount"); err != nil { + return nil, fmt.Errorf("failed to set voting period in genesis json: %w", err) } + out, err := json.Marshal(g) + if err != nil { + return nil, fmt.Errorf("failed to marshal genesis bytes to json: %w", err) + } + return out, nil +} + +func ModifyGenesisInflation(chainConfig ibc.ChainConfig, genbz []byte, params ...string) ([]byte, error) { + g := make(map[string]interface{}) + if err := json.Unmarshal(genbz, &g); err != nil { + return nil, fmt.Errorf("failed to unmarshal genesis file: %w", err) + } + if err := dyno.Set(g, params[0], "app_state", "mint", "params", "inflation_min"); err != nil { + return nil, fmt.Errorf("failed to set inflation in genesis json: %w", err) + } + if err := dyno.Set(g, params[1], "app_state", "mint", "params", "inflation_max"); err != nil { + return nil, fmt.Errorf("failed to set inflation in genesis json: %w", err) + } + if err := dyno.Set(g, params[2], "app_state", "mint", "params", "inflation_rate_change"); err != nil { + return nil, fmt.Errorf("failed to set rate of inflation change in genesis json: %w", err) + } + out, err := json.Marshal(g) + if err != nil { + return nil, fmt.Errorf("failed to marshal genesis bytes to json: %w", err) + } + return out, nil } func getTotalCoinSupplyInBank(t *testing.T, xion *cosmos.CosmosChain, ctx context.Context, denom string, blockHeight uint64) string { @@ -196,13 +219,80 @@ func GetModuleAddress(t *testing.T, xion *cosmos.CosmosChain, ctx context.Contex return moduleAddress } +// Retrieve a block annual provision +func GetBlockAnnualProvision(t *testing.T, xion *cosmos.CosmosChain, ctx context.Context, denom string, blockHeight uint64) math.LegacyDec { + if blockHeight == 0 { + blockHeight, _ = xion.Height(ctx) + require.Greater(t, blockHeight, 0) + } + + // Query the current block provision + var annualProvision json.Number + queryRes, _, err := xion.FullNodes[0].ExecQuery(ctx, "mint", "annual-provisions", "--height", strconv.FormatInt(int64(blockHeight), 10)) + require.NoError(t, err) + require.NoError(t, json.Unmarshal(queryRes, &annualProvision)) + // Query the block per year + var params = make(map[string]interface{}) + queryRes, _, err = xion.FullNodes[0].ExecQuery(ctx, "mint", "params") + require.NoError(t, err) + require.NoError(t, json.Unmarshal(queryRes, ¶ms)) + blocksPerYear, err := dyno.GetInteger(params, "blocks_per_year") + require.NoError(t, err) + // Calculate the block provision + return math.LegacyMustNewDecFromStr(annualProvision.String()).QuoInt(math.NewInt(blocksPerYear)) // This ideally is the minted tokens for the block +} + // This test confirms the property of the module described at // https://www.notion.so/burntlabs/Mint-Module-Blog-Post-78f59fb108c04e9ea5fa826dda30a340 -// Chain must have at least 12 blocks -func MintTestHarness(t *testing.T, xion *cosmos.CosmosChain, ctx context.Context) { +func MintModuleTestHarness(t *testing.T, xion *cosmos.CosmosChain, ctx context.Context, blockHeight int) { + // Get bank supply at previous height + previousXionBankSupply, err := strconv.ParseInt(getTotalCoinSupplyInBank(t, xion, ctx, xion.Config().Denom, uint64(blockHeight-1)), 10, 64) + t.Logf("Previous Xion bank supply: %d", previousXionBankSupply) + require.NoError(t, err, "bank supply should be convertible to an int64") + // Get bank supply at current height + currentXionBankSupply, err := strconv.ParseInt(getTotalCoinSupplyInBank(t, xion, ctx, xion.Config().Denom, uint64(blockHeight)), 10, 64) + t.Logf("Current Xion bank supply: %d", currentXionBankSupply) + require.NoError(t, err, "bank supply should be convertible to an int64") + tokenChange := currentXionBankSupply - previousXionBankSupply + + // Get the distribution module account address + distributionModuleAddress := GetModuleAddress(t, xion, ctx, "distribution") + // Get distribution module account balance in previous height + previousDistributionModuleBalance, err := strconv.ParseInt(getAddressBankBalanceAtHeight(t, xion, ctx, distributionModuleAddress, xion.Config().Denom, uint64(blockHeight-1)), 10, 64) + require.NoError(t, err, "distribution module balance should be convertible to an int64") + // Get distribution module account balance in current height + currentDistributionModuleBalance, err := strconv.ParseInt(getAddressBankBalanceAtHeight(t, xion, ctx, distributionModuleAddress, xion.Config().Denom, uint64(blockHeight)), 10, 64) + require.NoError(t, err, "distribution module balance should be convertible to an int64") + + delta := currentDistributionModuleBalance - previousDistributionModuleBalance + + feesAccrued := delta - tokenChange + t.Logf("Fees accrued: %d", feesAccrued) + + // Get the block provision + blockProvision := GetBlockAnnualProvision(t, xion, ctx, xion.Config().Denom, uint64(blockHeight)) + + // Make sure the minted tokens is equal to the block provision - fees accrued + if blockProvision.TruncateInt().GT(math.NewInt(feesAccrued)) { + // We have minted tokens + mintedTokens := blockProvision.TruncateInt().Sub(math.NewInt(feesAccrued)) + t.Logf("Minted tokens: %d and Token change: %d", mintedTokens.Int64(), int64(tokenChange)) + require.Equal(t, mintedTokens, math.NewInt(int64(tokenChange))) + } else if blockProvision.TruncateInt().LT(math.NewInt(feesAccrued)) { + // We have burned tokens + burnedTokens := math.NewInt(feesAccrued).Sub(blockProvision.TruncateInt()) + t.Logf("Burned tokens: %d and Token change: %d", burnedTokens.Int64(), tokenChange) + require.Equal(t, burnedTokens, math.NewInt(tokenChange).Abs()) + } else { + // We have not minted or burned tokens + require.Equal(t, math.NewInt(0), math.NewInt(tokenChange)) + t.Logf("No minted or Burned tokens. Token change: %d", tokenChange) + } +} - // We pick a random block height and 10 contiguous blocks from that height - // and then test the property over these blocks +// Run Mint module test over some random block height +// Chain must have at least 12 blocks +func VerifyMintModuleTestRandomBlocks(t *testing.T, xion *cosmos.CosmosChain, ctx context.Context) { currentBlockHeight, err := xion.Height(ctx) require.NoError(t, err) @@ -211,57 +301,18 @@ func MintTestHarness(t *testing.T, xion *cosmos.CosmosChain, ctx context.Context randomHeight := rand.Intn(int(currentBlockHeight)-11) + 2 for i := randomHeight; i < randomHeight+10; i++ { - t.Logf("Current random height: %d", randomHeight) - // Get bank supply at previous height - previousXionBankSupply, err := strconv.ParseUint(getTotalCoinSupplyInBank(t, xion, ctx, xion.Config().Denom, uint64(randomHeight-1)), 10, 64) - t.Logf("Previous Xion bank supply: %d", previousXionBankSupply) - require.NoError(t, err, "bank supply should be convertible to an int64") - // Get bank supply at current height - currentXionBankSupply, err := strconv.ParseUint(getTotalCoinSupplyInBank(t, xion, ctx, xion.Config().Denom, uint64(randomHeight)), 10, 64) - t.Logf("Current Xion bank supply: %d", currentXionBankSupply) - require.NoError(t, err, "bank supply should be convertible to an int64") - tokenChange := currentXionBankSupply - previousXionBankSupply - - // Get the distribution module account address - distributionModuleAddress := GetModuleAddress(t, xion, ctx, "distribution") - // Get distribution module account balance in previous height - previousDistributionModuleBalance, err := xion.GetBalance(ctx, distributionModuleAddress, xion.Config().Denom) - require.NoError(t, err, "distribution module balance should be convertible to an int64") - // Get distribution module account balance in current height - currentDistributionModuleBalance, err := strconv.ParseUint(getAddressBankBalanceAtHeight(t, xion, ctx, distributionModuleAddress, xion.Config().Denom, uint64(randomHeight)), 10, 64) - require.NoError(t, err, "distribution module balance should be convertible to an int64") - - delta := currentDistributionModuleBalance - uint64(previousDistributionModuleBalance) - - feesAccrued := delta - tokenChange - - // Query the current block provision - var annualProvision json.Number - queryRes, _, err := xion.FullNodes[0].ExecQuery(ctx, "mint", "annual-provisions", "--height", strconv.FormatInt(int64(randomHeight), 10)) - require.NoError(t, err) - require.NoError(t, json.Unmarshal(queryRes, &annualProvision)) - // Query the block per year - var params = make(map[string]interface{}) - queryRes, _, err = xion.FullNodes[0].ExecQuery(ctx, "mint", "params") - require.NoError(t, err) - require.NoError(t, json.Unmarshal(queryRes, ¶ms)) - blocksPerYear, err := dyno.GetInteger(params, "blocks_per_year") + t.Logf("Current random height: %d", i) + MintModuleTestHarness(t, xion, ctx, i) + } +} + +// Run Mint module test over some txHash +func VerifyMintModuleTest(t *testing.T, xion *cosmos.CosmosChain, ctx context.Context, txHashes []string) { + + for i, txHash := range txHashes { + txResp, err := authTx.QueryTx(xion.FullNodes[0].CliContext(), txHash) require.NoError(t, err) - // Calculate the block provision - blockProvision := math.LegacyMustNewDecFromStr(annualProvision.String()).QuoInt(math.NewInt(blocksPerYear)) // This ideally is the minted tokens for the block - - // Make sure the minted tokens is equal to the block provision - fees accrued - if blockProvision.TruncateInt().GT(math.NewIntFromUint64(feesAccrued)) { - // We have minted tokens - mintedTokens := blockProvision.TruncateInt().Sub(math.NewIntFromUint64(feesAccrued)) - require.Equal(t, mintedTokens, math.NewInt(int64(tokenChange))) - } else if blockProvision.TruncateInt().LT(math.NewIntFromUint64(feesAccrued)) { - // We have burned tokens - burnedTokens := math.NewIntFromUint64(feesAccrued).Sub(blockProvision.TruncateInt()) - require.Equal(t, burnedTokens, math.NewInt(int64(tokenChange))) - } else { - // We have not minted or burned tokens - require.Equal(t, math.NewInt(0), math.NewInt(int64(tokenChange))) - } + t.Logf("Bank send msg %d BH: %d", i, txResp.Height) + MintModuleTestHarness(t, xion, ctx, int(txResp.Height)+1) // check my block and the next one } } From 18a2bd23853c0042fa9e03fd52c4a5451d4a0125 Mon Sep 17 00:00:00 2001 From: peartes Date: Wed, 17 May 2023 17:18:09 +0100 Subject: [PATCH 061/501] chore: move back to using 3 validators --- integration_tests/utils.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integration_tests/utils.go b/integration_tests/utils.go index 4c76f958..d425f3de 100644 --- a/integration_tests/utils.go +++ b/integration_tests/utils.go @@ -29,7 +29,7 @@ func BuildXionChain(t *testing.T, modifyGenesis func(ibc.ChainConfig, []byte) ([ ctx := context.Background() var numFullNodes = 1 - var numValidators = 1 + var numValidators = 3 // pulling image from env to foster local dev imageTag := os.Getenv("XION_IMAGE") From caf126d5fab547b09dfc5fda2f4c9300d26fe9c9 Mon Sep 17 00:00:00 2001 From: Eduardo Diaz Date: Thu, 18 May 2023 10:41:45 -0400 Subject: [PATCH 062/501] update expected keeper mocks fmt.Errorf Errors --- x/mint/testutil/expected_keepers_mocks.go | 46 ++++++++++++++++++++++- x/xion/types/genesis.go | 4 +- x/xion/types/msgs.go | 5 ++- 3 files changed, 49 insertions(+), 6 deletions(-) diff --git a/x/mint/testutil/expected_keepers_mocks.go b/x/mint/testutil/expected_keepers_mocks.go index c174f75d..f378dadf 100644 --- a/x/mint/testutil/expected_keepers_mocks.go +++ b/x/mint/testutil/expected_keepers_mocks.go @@ -1,7 +1,7 @@ // Code generated by MockGen. DO NOT EDIT. -// Source: x/mint/types/expected_keepers.go +// Source: expected_keepers.go -// Package testutil is a generated GoMock package. +// Package mock_types is a generated GoMock package. package testutil import ( @@ -64,6 +64,20 @@ func (mr *MockStakingKeeperMockRecorder) StakingTokenSupply(ctx interface{}) *go return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StakingTokenSupply", reflect.TypeOf((*MockStakingKeeper)(nil).StakingTokenSupply), ctx) } +// TotalBondedTokens mocks base method. +func (m *MockStakingKeeper) TotalBondedTokens(ctx types.Context) math.Int { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "TotalBondedTokens", ctx) + ret0, _ := ret[0].(math.Int) + return ret0 +} + +// TotalBondedTokens indicates an expected call of TotalBondedTokens. +func (mr *MockStakingKeeperMockRecorder) TotalBondedTokens(ctx interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "TotalBondedTokens", reflect.TypeOf((*MockStakingKeeper)(nil).TotalBondedTokens), ctx) +} + // MockAccountKeeper is a mock of AccountKeeper interface. type MockAccountKeeper struct { ctrl *gomock.Controller @@ -150,6 +164,34 @@ func (m *MockBankKeeper) EXPECT() *MockBankKeeperMockRecorder { return m.recorder } +// BurnCoins mocks base method. +func (m *MockBankKeeper) BurnCoins(ctx types.Context, moduleName string, amt types.Coins) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "BurnCoins", ctx, moduleName, amt) + ret0, _ := ret[0].(error) + return ret0 +} + +// BurnCoins indicates an expected call of BurnCoins. +func (mr *MockBankKeeperMockRecorder) BurnCoins(ctx, moduleName, amt interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BurnCoins", reflect.TypeOf((*MockBankKeeper)(nil).BurnCoins), ctx, moduleName, amt) +} + +// GetBalance mocks base method. +func (m *MockBankKeeper) GetBalance(ctx types.Context, addr types.AccAddress, denom string) types.Coin { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetBalance", ctx, addr, denom) + ret0, _ := ret[0].(types.Coin) + return ret0 +} + +// GetBalance indicates an expected call of GetBalance. +func (mr *MockBankKeeperMockRecorder) GetBalance(ctx, addr, denom interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetBalance", reflect.TypeOf((*MockBankKeeper)(nil).GetBalance), ctx, addr, denom) +} + // MintCoins mocks base method. func (m *MockBankKeeper) MintCoins(ctx types.Context, name string, amt types.Coins) error { m.ctrl.T.Helper() diff --git a/x/xion/types/genesis.go b/x/xion/types/genesis.go index b37c748c..205801ee 100644 --- a/x/xion/types/genesis.go +++ b/x/xion/types/genesis.go @@ -2,7 +2,7 @@ package types import ( "encoding/json" - "fmt" + "errors" "github.com/cosmos/cosmos-sdk/codec" ) @@ -11,7 +11,7 @@ import ( // error for any failed validation criteria. func (gs GenesisState) Validate() error { if gs.PlatformPercentage > 10000 { - return fmt.Errorf("unable to set platform percentage to greater than 100%") + return errors.New("unable to set platform percentage to greater than 100%") } return nil diff --git a/x/xion/types/msgs.go b/x/xion/types/msgs.go index 4c91056d..8cd7cdba 100644 --- a/x/xion/types/msgs.go +++ b/x/xion/types/msgs.go @@ -1,7 +1,8 @@ package types import ( - "fmt" + "errors" + sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" @@ -129,7 +130,7 @@ func (msg MsgSetPlatformPercentage) ValidateBasic() error { // not that they actually have the money inside if msg.PlatformPercentage > 10000 { - return fmt.Errorf("unable to have a platform percentage that exceeds 100%") + return errors.New("unable to have a platform percentage that exceeds 100%") } return nil From a9fcc5d3043dadf07a3879bf02d67198d774d0f0 Mon Sep 17 00:00:00 2001 From: Eduardo Diaz Date: Thu, 18 May 2023 15:14:49 -0400 Subject: [PATCH 063/501] remove ported tests from juno --- tests/e2e/README.md | 3 - tests/e2e/gov_test.go | 135 ---------------- tests/e2e/grants_test.go | 119 -------------- tests/e2e/group_test.go | 71 --------- tests/e2e/ibc_fees_test.go | 214 -------------------------- tests/e2e/ica_test.go | 101 ------------ tests/e2e/reflect_helper.go | 68 -------- tests/e2e/testdata/cw20_base.wasm.gz | Bin 105532 -> 0 bytes tests/e2e/testdata/cw20_ics20.wasm.gz | Bin 119250 -> 0 bytes 9 files changed, 711 deletions(-) delete mode 100644 tests/e2e/README.md delete mode 100644 tests/e2e/gov_test.go delete mode 100644 tests/e2e/grants_test.go delete mode 100644 tests/e2e/group_test.go delete mode 100644 tests/e2e/ibc_fees_test.go delete mode 100644 tests/e2e/ica_test.go delete mode 100644 tests/e2e/reflect_helper.go delete mode 100644 tests/e2e/testdata/cw20_base.wasm.gz delete mode 100644 tests/e2e/testdata/cw20_ics20.wasm.gz diff --git a/tests/e2e/README.md b/tests/e2e/README.md deleted file mode 100644 index dae38fe2..00000000 --- a/tests/e2e/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# End To End Testing - e2e - -Scenario tests that run against on or multiple chain instances. diff --git a/tests/e2e/gov_test.go b/tests/e2e/gov_test.go deleted file mode 100644 index 06a5ee47..00000000 --- a/tests/e2e/gov_test.go +++ /dev/null @@ -1,135 +0,0 @@ -package e2e_test - -import ( - "testing" - "time" - - wasmvmtypes "github.com/CosmWasm/wasmvm/types" - "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" - sdk "github.com/cosmos/cosmos-sdk/types" - distributiontypes "github.com/cosmos/cosmos-sdk/x/distribution/types" - v1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/CosmWasm/wasmd/x/wasm/ibctesting" - "github.com/burnt-labs/xion/tests/e2e" -) - -func TestGovVoteByContract(t *testing.T) { - // Given a contract with delegation - // And a gov proposal - // When the contract sends a vote for the proposal - // Then the vote is taken into account - - coord := ibctesting.NewCoordinator(t, 1) - chain := coord.GetChain(ibctesting.GetChainID(1)) - contractAddr := e2e.InstantiateReflectContract(t, chain) - chain.Fund(contractAddr, sdk.NewIntFromUint64(1_000_000_000)) - // a contract with a high delegation amount - delegateMsg := wasmvmtypes.CosmosMsg{ - Staking: &wasmvmtypes.StakingMsg{ - Delegate: &wasmvmtypes.DelegateMsg{ - Validator: sdk.ValAddress(chain.Vals.Validators[0].Address).String(), - Amount: wasmvmtypes.Coin{ - Denom: sdk.DefaultBondDenom, - Amount: "1000000000", - }, - }, - }, - } - e2e.MustExecViaReflectContract(t, chain, contractAddr, delegateMsg) - - signer := chain.SenderAccount.GetAddress().String() - govKeeper, accountKeeper := chain.App.GovKeeper, chain.App.AccountKeeper - communityPoolBalance := chain.Balance(accountKeeper.GetModuleAccount(chain.GetContext(), distributiontypes.ModuleName).GetAddress(), sdk.DefaultBondDenom) - require.False(t, communityPoolBalance.IsZero()) - - initialDeposit := govKeeper.GetParams(chain.GetContext()).MinDeposit - govAcctAddr := govKeeper.GetGovernanceAccount(chain.GetContext()).GetAddress() - - specs := map[string]struct { - vote *wasmvmtypes.VoteMsg - expPass bool - }{ - "yes": { - vote: &wasmvmtypes.VoteMsg{ - Vote: wasmvmtypes.Yes, - }, - expPass: true, - }, - "no": { - vote: &wasmvmtypes.VoteMsg{ - Vote: wasmvmtypes.No, - }, - expPass: false, - }, - "abstain": { - vote: &wasmvmtypes.VoteMsg{ - Vote: wasmvmtypes.Abstain, - }, - expPass: true, - }, - "no with veto": { - vote: &wasmvmtypes.VoteMsg{ - Vote: wasmvmtypes.NoWithVeto, - }, - expPass: false, - }, - } - for name, spec := range specs { - t.Run(name, func(t *testing.T) { - // given a unique recipient - recipientAddr := sdk.AccAddress(secp256k1.GenPrivKey().PubKey().Address().Bytes()) - // and a new proposal - payloadMsg := &distributiontypes.MsgCommunityPoolSpend{ - Authority: govAcctAddr.String(), - Recipient: recipientAddr.String(), - Amount: sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, sdk.OneInt())), - } - msg, err := v1.NewMsgSubmitProposal( - []sdk.Msg{payloadMsg}, - initialDeposit, - signer, - "", - "my proposal", - "testing", - ) - require.NoError(t, err) - rsp, gotErr := chain.SendMsgs(msg) - require.NoError(t, gotErr) - require.Len(t, rsp.MsgResponses, 1) - got, ok := rsp.MsgResponses[0].GetCachedValue().(*v1.MsgSubmitProposalResponse) - require.True(t, ok) - propID := got.ProposalId - - // with other delegators voted yes - _, err = chain.SendMsgs(v1.NewMsgVote(chain.SenderAccount.GetAddress(), propID, v1.VoteOption_VOTE_OPTION_YES, "")) - require.NoError(t, err) - - // when contract votes - spec.vote.ProposalId = propID - voteMsg := wasmvmtypes.CosmosMsg{ - Gov: &wasmvmtypes.GovMsg{ - Vote: spec.vote, - }, - } - e2e.MustExecViaReflectContract(t, chain, contractAddr, voteMsg) - - // then proposal executed after voting period - proposal, ok := govKeeper.GetProposal(chain.GetContext(), propID) - require.True(t, ok) - coord.IncrementTimeBy(proposal.VotingEndTime.Sub(chain.GetContext().BlockTime()) + time.Minute) - coord.CommitBlock(chain) - - // and recipient balance updated - recipientBalance := chain.Balance(recipientAddr, sdk.DefaultBondDenom) - if !spec.expPass { - assert.True(t, recipientBalance.IsZero()) - return - } - expBalanceAmount := sdk.NewCoin(sdk.DefaultBondDenom, sdk.OneInt()) - assert.Equal(t, expBalanceAmount.String(), recipientBalance.String()) - }) - } -} diff --git a/tests/e2e/grants_test.go b/tests/e2e/grants_test.go deleted file mode 100644 index 43e878bb..00000000 --- a/tests/e2e/grants_test.go +++ /dev/null @@ -1,119 +0,0 @@ -package e2e_test - -import ( - "fmt" - "testing" - "time" - - errorsmod "cosmossdk.io/errors" - "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" - cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" - sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - "github.com/cosmos/cosmos-sdk/x/authz" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/CosmWasm/wasmd/x/wasm/ibctesting" - "github.com/CosmWasm/wasmd/x/wasm/types" - "github.com/burnt-labs/xion/tests/e2e" -) - -func TestGrants(t *testing.T) { - // Given a contract by address A - // And a grant for address B by A created - // When B sends an execute with tokens from A - // Then the grant is executed as defined - // And - // - balance A reduced (on success) - // - balance B not touched - - coord := ibctesting.NewCoordinator(t, 1) - chain := coord.GetChain(ibctesting.GetChainID(1)) - contractAddr := e2e.InstantiateReflectContract(t, chain) - require.NotEmpty(t, contractAddr) - - granterAddr := chain.SenderAccount.GetAddress() - granteePrivKey := secp256k1.GenPrivKey() - granteeAddr := sdk.AccAddress(granteePrivKey.PubKey().Address().Bytes()) - otherPrivKey := secp256k1.GenPrivKey() - otherAddr := sdk.AccAddress(otherPrivKey.PubKey().Address().Bytes()) - - chain.Fund(granteeAddr, sdk.NewInt(1_000_000)) - chain.Fund(otherAddr, sdk.NewInt(1_000_000)) - assert.Equal(t, sdk.NewInt(1_000_000), chain.Balance(granteeAddr, sdk.DefaultBondDenom).Amount) - - myAmount := sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(2_000_000)) - - specs := map[string]struct { - limit types.ContractAuthzLimitX - filter types.ContractAuthzFilterX - transferAmount sdk.Coin - senderKey cryptotypes.PrivKey - expErr *errorsmod.Error - }{ - "in limits and filter": { - limit: types.NewMaxFundsLimit(myAmount), - filter: types.NewAllowAllMessagesFilter(), - transferAmount: myAmount, - senderKey: granteePrivKey, - }, - "exceed limits": { - limit: types.NewMaxFundsLimit(myAmount), - filter: types.NewAllowAllMessagesFilter(), - transferAmount: myAmount.Add(sdk.NewCoin(sdk.DefaultBondDenom, sdk.OneInt())), - senderKey: granteePrivKey, - expErr: sdkerrors.ErrUnauthorized, - }, - "not match filter": { - limit: types.NewMaxFundsLimit(myAmount), - filter: types.NewAcceptedMessageKeysFilter("foo"), - transferAmount: sdk.NewCoin(sdk.DefaultBondDenom, sdk.OneInt()), - senderKey: granteePrivKey, - expErr: sdkerrors.ErrUnauthorized, - }, - "non authorized sender address": { // sanity check - testing sdk - limit: types.NewMaxFundsLimit(myAmount), - filter: types.NewAllowAllMessagesFilter(), - senderKey: otherPrivKey, - transferAmount: myAmount, - expErr: authz.ErrNoAuthorizationFound, - }, - } - for name, spec := range specs { - t.Run(name, func(t *testing.T) { - // setup grant - grant, err := types.NewContractGrant(contractAddr, spec.limit, spec.filter) - require.NoError(t, err) - authorization := types.NewContractExecutionAuthorization(*grant) - expiry := time.Now().Add(time.Hour) - grantMsg, err := authz.NewMsgGrant(granterAddr, granteeAddr, authorization, &expiry) - require.NoError(t, err) - _, err = chain.SendMsgs(grantMsg) - require.NoError(t, err) - - granterStartBalance := chain.Balance(granterAddr, sdk.DefaultBondDenom).Amount - - // when - anyValidReflectMsg := []byte(fmt.Sprintf(`{"reflect_msg": {"msgs": [{"bank":{"burn":{"amount":[{"denom":%q, "amount": %q}]}}}]}}`, sdk.DefaultBondDenom, myAmount.Amount.String())) - execMsg := authz.NewMsgExec(spec.senderKey.PubKey().Address().Bytes(), []sdk.Msg{&types.MsgExecuteContract{ - Sender: granterAddr.String(), - Contract: contractAddr.String(), - Msg: anyValidReflectMsg, - Funds: sdk.NewCoins(spec.transferAmount), - }}) - _, gotErr := chain.SendNonDefaultSenderMsgs(spec.senderKey, &execMsg) - - // then - if spec.expErr != nil { - require.True(t, spec.expErr.Is(gotErr)) - assert.Equal(t, sdk.NewInt(1_000_000), chain.Balance(granteeAddr, sdk.DefaultBondDenom).Amount) - assert.Equal(t, granterStartBalance, chain.Balance(granterAddr, sdk.DefaultBondDenom).Amount) - return - } - require.NoError(t, gotErr) - assert.Equal(t, sdk.NewInt(1_000_000), chain.Balance(granteeAddr, sdk.DefaultBondDenom).Amount) - assert.Equal(t, granterStartBalance.Sub(spec.transferAmount.Amount), chain.Balance(granterAddr, sdk.DefaultBondDenom).Amount) - }) - } -} diff --git a/tests/e2e/group_test.go b/tests/e2e/group_test.go deleted file mode 100644 index d72421df..00000000 --- a/tests/e2e/group_test.go +++ /dev/null @@ -1,71 +0,0 @@ -package e2e_test - -import ( - "testing" - "time" - - "github.com/CosmWasm/wasmd/x/wasm/types" - - "github.com/cometbft/cometbft/libs/rand" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/address" - banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" - "github.com/cosmos/cosmos-sdk/x/group" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/CosmWasm/wasmd/x/wasm/ibctesting" - "github.com/burnt-labs/xion/tests/e2e" -) - -func TestGroupWithContract(t *testing.T) { - // Given a group with a contract as only member - // When contract submits a proposal with try_execute - // Then the payload msg is executed - - coord := ibctesting.NewCoordinator(t, 1) - chain := coord.GetChain(ibctesting.GetChainID(1)) - contractAddr := e2e.InstantiateReflectContract(t, chain) - chain.Fund(contractAddr, sdk.NewIntFromUint64(1_000_000_000)) - - members := []group.MemberRequest{ - { - Address: contractAddr.String(), - Weight: "1", - Metadata: "my contract", - }, - } - msg, err := group.NewMsgCreateGroupWithPolicy( - chain.SenderAccount.GetAddress().String(), - members, - "my group", - "my metadata", - false, - group.NewPercentageDecisionPolicy("1", time.Second, 0), - ) - require.NoError(t, err) - rsp, err := chain.SendMsgs(msg) - require.NoError(t, err) - - createRsp := rsp.MsgResponses[0].GetCachedValue().(*group.MsgCreateGroupWithPolicyResponse) - groupID, policyAddr := createRsp.GroupId, sdk.MustAccAddressFromBech32(createRsp.GroupPolicyAddress) - require.NotEmpty(t, groupID) - chain.Fund(policyAddr, sdk.NewIntFromUint64(1_000_000_000)) - // and a proposal submitted - recipientAddr := sdk.AccAddress(rand.Bytes(address.Len)) - - payload := []sdk.Msg{banktypes.NewMsgSend(policyAddr, recipientAddr, sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, sdk.OneInt())))} - propMsg, err := group.NewMsgSubmitProposal(policyAddr.String(), []string{contractAddr.String()}, payload, "my proposal", group.Exec_EXEC_TRY, "my title", "my description") - require.NoError(t, err) - - rsp = e2e.MustExecViaStargateReflectContract(t, chain, contractAddr, propMsg) - bz := rsp.MsgResponses[0].GetCachedValue().(*types.MsgExecuteContractResponse).Data - var groupRsp group.MsgSubmitProposalResponse - require.NoError(t, chain.Codec.Unmarshal(bz, &groupRsp)) - // require.NotEmpty(t, groupRsp.ProposalId) - - // and coins received - recipientBalance := chain.Balance(recipientAddr, sdk.DefaultBondDenom) - expBalanceAmount := sdk.NewCoin(sdk.DefaultBondDenom, sdk.OneInt()) - assert.Equal(t, expBalanceAmount.String(), recipientBalance.String()) -} diff --git a/tests/e2e/ibc_fees_test.go b/tests/e2e/ibc_fees_test.go deleted file mode 100644 index efceff0d..00000000 --- a/tests/e2e/ibc_fees_test.go +++ /dev/null @@ -1,214 +0,0 @@ -package e2e - -import ( - "bytes" - "encoding/base64" - "fmt" - "testing" - "time" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/address" - ibcfee "github.com/cosmos/ibc-go/v7/modules/apps/29-fee/types" - ibctransfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" - clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" - channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" - ibctesting "github.com/cosmos/ibc-go/v7/testing" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - wasmibctesting "github.com/CosmWasm/wasmd/x/wasm/ibctesting" - wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" - "github.com/burnt-labs/xion/app" -) - -func TestIBCFeesTransfer(t *testing.T) { - // scenario: - // given 2 chains - // with an ics-20 channel established - // when an ics-29 fee is attached to an ibc package - // then the relayer's payee is receiving the fee(s) on success - marshaler := app.MakeEncodingConfig().Marshaler - coord := wasmibctesting.NewCoordinator(t, 2) - chainA := coord.GetChain(wasmibctesting.GetChainID(1)) - chainB := coord.GetChain(wasmibctesting.GetChainID(2)) - - actorChainA := sdk.AccAddress(chainA.SenderPrivKey.PubKey().Address()) - actorChainB := sdk.AccAddress(chainB.SenderPrivKey.PubKey().Address()) - receiver := sdk.AccAddress(bytes.Repeat([]byte{1}, address.Len)) - payee := sdk.AccAddress(bytes.Repeat([]byte{2}, address.Len)) - oneToken := sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(1))) - - path := wasmibctesting.NewPath(chainA, chainB) - path.EndpointA.ChannelConfig = &ibctesting.ChannelConfig{ - PortID: ibctransfertypes.PortID, - Version: string(marshaler.MustMarshalJSON(&ibcfee.Metadata{FeeVersion: ibcfee.Version, AppVersion: ibctransfertypes.Version})), - Order: channeltypes.UNORDERED, - } - path.EndpointB.ChannelConfig = &ibctesting.ChannelConfig{ - PortID: ibctransfertypes.PortID, - Version: string(marshaler.MustMarshalJSON(&ibcfee.Metadata{FeeVersion: ibcfee.Version, AppVersion: ibctransfertypes.Version})), - Order: channeltypes.UNORDERED, - } - // with an ics-20 transfer channel setup between both chains - coord.Setup(path) - require.True(t, chainA.App.IBCFeeKeeper.IsFeeEnabled(chainA.GetContext(), ibctransfertypes.PortID, path.EndpointA.ChannelID)) - // and with a payee registered on both chains - _, err := chainA.SendMsgs(ibcfee.NewMsgRegisterPayee(ibctransfertypes.PortID, path.EndpointA.ChannelID, actorChainA.String(), payee.String())) - require.NoError(t, err) - _, err = chainB.SendMsgs(ibcfee.NewMsgRegisterCounterpartyPayee(ibctransfertypes.PortID, path.EndpointB.ChannelID, actorChainB.String(), payee.String())) - require.NoError(t, err) - - // when a transfer package is sent - transferCoin := sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(1)) - ibcPayloadMsg := ibctransfertypes.NewMsgTransfer(path.EndpointA.ChannelConfig.PortID, path.EndpointA.ChannelID, transferCoin, actorChainA.String(), receiver.String(), clienttypes.Height{}, uint64(time.Now().Add(time.Minute).UnixNano()), "testing") - ibcPackageFee := ibcfee.NewFee(oneToken, oneToken, sdk.Coins{}) - feeMsg := ibcfee.NewMsgPayPacketFee(ibcPackageFee, ibctransfertypes.PortID, path.EndpointA.ChannelID, actorChainA.String(), nil) - _, err = chainA.SendMsgs(feeMsg, ibcPayloadMsg) - require.NoError(t, err) - pendingIncentivisedPackages := chainA.App.IBCFeeKeeper.GetIdentifiedPacketFeesForChannel(chainA.GetContext(), ibctransfertypes.PortID, path.EndpointA.ChannelID) - assert.Len(t, pendingIncentivisedPackages, 1) - - // and packages relayed - require.NoError(t, coord.RelayAndAckPendingPackets(path)) - - // then - expBalance := ibctransfertypes.GetTransferCoin(path.EndpointB.ChannelConfig.PortID, path.EndpointB.ChannelID, transferCoin.Denom, transferCoin.Amount) - gotBalance := chainB.Balance(receiver, expBalance.Denom) - assert.Equal(t, expBalance.String(), gotBalance.String()) - payeeBalance := chainA.AllBalances(payee) - assert.Equal(t, oneToken.Add(oneToken...).String(), payeeBalance.String()) - - // and with a payee registered for chain B to A - _, err = chainA.SendMsgs(ibcfee.NewMsgRegisterCounterpartyPayee(ibctransfertypes.PortID, path.EndpointA.ChannelID, actorChainA.String(), payee.String())) - require.NoError(t, err) - _, err = chainB.SendMsgs(ibcfee.NewMsgRegisterPayee(ibctransfertypes.PortID, path.EndpointB.ChannelID, actorChainB.String(), payee.String())) - require.NoError(t, err) - - // and transfer from B to A - ibcPayloadMsg = ibctransfertypes.NewMsgTransfer(path.EndpointB.ChannelConfig.PortID, path.EndpointB.ChannelID, transferCoin, actorChainB.String(), receiver.String(), clienttypes.Height{}, uint64(time.Now().Add(time.Minute).UnixNano()), "more testing") - ibcPackageFee = ibcfee.NewFee(oneToken, oneToken, sdk.Coins{}) - feeMsg = ibcfee.NewMsgPayPacketFee(ibcPackageFee, ibctransfertypes.PortID, path.EndpointB.ChannelID, actorChainB.String(), nil) - _, err = chainB.SendMsgs(feeMsg, ibcPayloadMsg) - require.NoError(t, err) - pendingIncentivisedPackages = chainB.App.IBCFeeKeeper.GetIdentifiedPacketFeesForChannel(chainB.GetContext(), ibctransfertypes.PortID, path.EndpointB.ChannelID) - assert.Len(t, pendingIncentivisedPackages, 1) - - // when packages relayed - require.NoError(t, coord.RelayAndAckPendingPackets(path)) - - // then - expBalance = ibctransfertypes.GetTransferCoin(path.EndpointA.ChannelConfig.PortID, path.EndpointA.ChannelID, transferCoin.Denom, transferCoin.Amount) - gotBalance = chainA.Balance(receiver, expBalance.Denom) - assert.Equal(t, expBalance.String(), gotBalance.String()) - payeeBalance = chainB.AllBalances(payee) - assert.Equal(t, sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(2)).String(), payeeBalance.String()) -} - -func TestIBCFeesWasm(t *testing.T) { - // scenario: - // given 2 chains with cw20-ibc on chain A and native ics20 module on B - // and an ibc channel established - // when an ics-29 fee is attached to an ibc package - // then the relayer's payee is receiving the fee(s) on success - marshaler := app.MakeEncodingConfig().Marshaler - coord := wasmibctesting.NewCoordinator(t, 2) - chainA := coord.GetChain(wasmibctesting.GetChainID(1)) - chainB := coord.GetChain(ibctesting.GetChainID(2)) - actorChainA := sdk.AccAddress(chainA.SenderPrivKey.PubKey().Address()) - actorChainB := sdk.AccAddress(chainB.SenderPrivKey.PubKey().Address()) - - // setup chain A - codeID := chainA.StoreCodeFile("./testdata/cw20_base.wasm.gz").CodeID - - initMsg := []byte(fmt.Sprintf(`{"decimals": 6, "name": "test", "symbol":"ALX", "initial_balances": [{"address": %q,"amount":"100000000"}] }`, actorChainA.String())) - cw20ContractAddr := chainA.InstantiateContract(codeID, initMsg) - - initMsg = []byte(fmt.Sprintf(`{"default_timeout": 360, "gov_contract": %q, "allowlist":[{"contract":%q}]}`, actorChainA.String(), cw20ContractAddr.String())) - codeID = chainA.StoreCodeFile("./testdata/cw20_ics20.wasm.gz").CodeID - ibcContractAddr := chainA.InstantiateContract(codeID, initMsg) - ibcContractPortID := chainA.ContractInfo(ibcContractAddr).IBCPortID - - payee := sdk.AccAddress(bytes.Repeat([]byte{2}, address.Len)) - oneToken := sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(1))) - - path := wasmibctesting.NewPath(chainA, chainB) - path.EndpointA.ChannelConfig = &ibctesting.ChannelConfig{ - PortID: ibcContractPortID, - Version: string(marshaler.MustMarshalJSON(&ibcfee.Metadata{FeeVersion: ibcfee.Version, AppVersion: ibctransfertypes.Version})), - Order: channeltypes.UNORDERED, - } - path.EndpointB.ChannelConfig = &ibctesting.ChannelConfig{ - PortID: ibctransfertypes.PortID, - Version: string(marshaler.MustMarshalJSON(&ibcfee.Metadata{FeeVersion: ibcfee.Version, AppVersion: ibctransfertypes.Version})), - Order: channeltypes.UNORDERED, - } - // with an ics-29 fee enabled channel setup between both chains - coord.Setup(path) - require.True(t, chainA.App.IBCFeeKeeper.IsFeeEnabled(chainA.GetContext(), ibcContractPortID, path.EndpointA.ChannelID)) - require.True(t, chainB.App.IBCFeeKeeper.IsFeeEnabled(chainB.GetContext(), ibctransfertypes.PortID, path.EndpointB.ChannelID)) - // and with a payee registered for A -> B - _, err := chainA.SendMsgs(ibcfee.NewMsgRegisterPayee(ibcContractPortID, path.EndpointA.ChannelID, actorChainA.String(), payee.String())) - require.NoError(t, err) - _, err = chainB.SendMsgs(ibcfee.NewMsgRegisterCounterpartyPayee(ibctransfertypes.PortID, path.EndpointB.ChannelID, actorChainB.String(), payee.String())) - require.NoError(t, err) - - // when a transfer package is sent from ics20 contract on A to B - transfer := base64.StdEncoding.EncodeToString([]byte(fmt.Sprintf(`{"channel": %q, "remote_address": %q}`, path.EndpointA.ChannelID, actorChainB.String()))) - exec := []byte(fmt.Sprintf(`{"send":{"contract": %q, "amount": "100", "msg": %q}}`, ibcContractAddr.String(), transfer)) - execMsg := wasmtypes.MsgExecuteContract{ - Sender: actorChainA.String(), - Contract: cw20ContractAddr.String(), - Msg: exec, - } - ibcPackageFee := ibcfee.NewFee(oneToken, oneToken, sdk.Coins{}) - feeMsg := ibcfee.NewMsgPayPacketFee(ibcPackageFee, ibcContractPortID, path.EndpointA.ChannelID, actorChainA.String(), nil) - _, err = chainA.SendMsgs(feeMsg, &execMsg) - require.NoError(t, err) - pendingIncentivisedPackages := chainA.App.IBCFeeKeeper.GetIdentifiedPacketFeesForChannel(chainA.GetContext(), ibcContractPortID, path.EndpointA.ChannelID) - assert.Len(t, pendingIncentivisedPackages, 1) - - // and packages relayed - require.NoError(t, coord.RelayAndAckPendingPackets(path)) - - // then - // on chain A - gotCW20Balance, err := chainA.App.WasmKeeper.QuerySmart(chainA.GetContext(), cw20ContractAddr, []byte(fmt.Sprintf(`{"balance":{"address": %q}}`, actorChainA.String()))) - require.NoError(t, err) - assert.JSONEq(t, `{"balance":"99999900"}`, string(gotCW20Balance)) - payeeBalance := chainA.AllBalances(payee) - assert.Equal(t, sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(2)).String(), payeeBalance.String()) - // and on chain B - pendingIncentivisedPackages = chainA.App.IBCFeeKeeper.GetIdentifiedPacketFeesForChannel(chainA.GetContext(), ibcContractPortID, path.EndpointA.ChannelID) - assert.Len(t, pendingIncentivisedPackages, 0) - expBalance := ibctransfertypes.GetTransferCoin(path.EndpointB.ChannelConfig.PortID, path.EndpointB.ChannelID, "cw20:"+cw20ContractAddr.String(), sdk.NewInt(100)) - gotBalance := chainB.Balance(actorChainB, expBalance.Denom) - assert.Equal(t, expBalance.String(), gotBalance.String(), chainB.AllBalances(actorChainB)) - - // and with a payee registered for chain B to A - _, err = chainA.SendMsgs(ibcfee.NewMsgRegisterCounterpartyPayee(ibcContractPortID, path.EndpointA.ChannelID, actorChainA.String(), payee.String())) - require.NoError(t, err) - _, err = chainB.SendMsgs(ibcfee.NewMsgRegisterPayee(ibctransfertypes.PortID, path.EndpointB.ChannelID, actorChainB.String(), payee.String())) - require.NoError(t, err) - - // and when sent back from chain B to A - ibcPayloadMsg := ibctransfertypes.NewMsgTransfer(path.EndpointB.ChannelConfig.PortID, path.EndpointB.ChannelID, gotBalance, actorChainB.String(), actorChainA.String(), clienttypes.Height{}, uint64(time.Now().Add(time.Minute).UnixNano()), "even more tests") - ibcPackageFee = ibcfee.NewFee(oneToken, oneToken, sdk.Coins{}) - feeMsg = ibcfee.NewMsgPayPacketFee(ibcPackageFee, ibctransfertypes.PortID, path.EndpointB.ChannelID, actorChainB.String(), nil) - _, err = chainB.SendMsgs(feeMsg, ibcPayloadMsg) - require.NoError(t, err) - pendingIncentivisedPackages = chainB.App.IBCFeeKeeper.GetIdentifiedPacketFeesForChannel(chainB.GetContext(), ibctransfertypes.PortID, path.EndpointB.ChannelID) - assert.Len(t, pendingIncentivisedPackages, 1) - - // when packages relayed - require.NoError(t, coord.RelayAndAckPendingPackets(path)) - - // then - // on chain A - gotCW20Balance, err = chainA.App.WasmKeeper.QuerySmart(chainA.GetContext(), cw20ContractAddr, []byte(fmt.Sprintf(`{"balance":{"address": %q}}`, actorChainA.String()))) - require.NoError(t, err) - assert.JSONEq(t, `{"balance":"100000000"}`, string(gotCW20Balance)) - // and on chain B - payeeBalance = chainB.AllBalances(payee) - assert.Equal(t, sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(2)).String(), payeeBalance.String()) -} diff --git a/tests/e2e/ica_test.go b/tests/e2e/ica_test.go deleted file mode 100644 index 3ac2fdb8..00000000 --- a/tests/e2e/ica_test.go +++ /dev/null @@ -1,101 +0,0 @@ -package e2e - -import ( - "bytes" - "testing" - "time" - - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/address" - banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" - "github.com/cosmos/gogoproto/proto" - icacontrollertypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/controller/types" - hosttypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/host/types" - icatypes "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/types" - channeltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" - ibctesting "github.com/cosmos/ibc-go/v7/testing" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - wasmibctesting "github.com/CosmWasm/wasmd/x/wasm/ibctesting" -) - -func TestICA(t *testing.T) { - // scenario: - // given a host and controller chain - // when an ica is registered on the controller chain - // and the channel is established to the host chain - // then the ICA owner can submit a message via IBC - // to control their account on the host chain - coord := wasmibctesting.NewCoordinator(t, 2) - hostChain := coord.GetChain(ibctesting.GetChainID(1)) - hostParams := hosttypes.NewParams(true, []string{sdk.MsgTypeURL(&banktypes.MsgSend{})}) - hostChain.App.ICAHostKeeper.SetParams(hostChain.GetContext(), hostParams) - - controllerChain := coord.GetChain(ibctesting.GetChainID(2)) - - path := wasmibctesting.NewPath(controllerChain, hostChain) - coord.SetupConnections(path) - - ownerAddr := sdk.AccAddress(controllerChain.SenderPrivKey.PubKey().Address()) - msg := icacontrollertypes.NewMsgRegisterInterchainAccount(path.EndpointA.ConnectionID, ownerAddr.String(), "") - res, err := controllerChain.SendMsgs(msg) - require.NoError(t, err) - chanID, portID, version := parseIBCChannelEvents(t, res) - - // next open channels on both sides - path.EndpointA.ChannelID = chanID - path.EndpointA.ChannelConfig = &ibctesting.ChannelConfig{ - PortID: portID, - Version: version, - Order: channeltypes.ORDERED, - } - path.EndpointB.ChannelConfig = &ibctesting.ChannelConfig{ - PortID: icatypes.HostPortID, - Version: icatypes.Version, - Order: channeltypes.ORDERED, - } - coord.CreateChannels(path) - - // assert ICA exists on controller - icaRsp, err := controllerChain.App.ICAControllerKeeper.InterchainAccount(sdk.WrapSDKContext(controllerChain.GetContext()), &icacontrollertypes.QueryInterchainAccountRequest{ - Owner: ownerAddr.String(), - ConnectionId: path.EndpointA.ConnectionID, - }) - require.NoError(t, err) - icaAddr := sdk.MustAccAddressFromBech32(icaRsp.GetAddress()) - hostChain.Fund(icaAddr, sdk.NewInt(1_000)) - - // submit a tx - targetAddr := sdk.AccAddress(bytes.Repeat([]byte{1}, address.Len)) - sendCoin := sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(100)) - payloadMsg := banktypes.NewMsgSend(icaAddr, targetAddr, sdk.NewCoins(sendCoin)) - rawPayloadData, err := icatypes.SerializeCosmosTx(controllerChain.Codec, []proto.Message{payloadMsg}) - require.NoError(t, err) - payloadPacket := icatypes.InterchainAccountPacketData{ - Type: icatypes.EXECUTE_TX, - Data: rawPayloadData, - Memo: "testing", - } - relativeTimeout := uint64(time.Minute.Nanoseconds()) // note this is in nanoseconds - msgSendTx := icacontrollertypes.NewMsgSendTx(ownerAddr.String(), path.EndpointA.ConnectionID, relativeTimeout, payloadPacket) - _, err = controllerChain.SendMsgs(msgSendTx) - require.NoError(t, err) - - assert.Equal(t, 1, len(controllerChain.PendingSendPackets)) - require.NoError(t, coord.RelayAndAckPendingPackets(path)) - - gotBalance := hostChain.Balance(targetAddr, sdk.DefaultBondDenom) - assert.Equal(t, sendCoin.String(), gotBalance.String()) -} - -func parseIBCChannelEvents(t *testing.T, res *sdk.Result) (string, string, string) { - t.Helper() - chanID, err := ibctesting.ParseChannelIDFromEvents(res.GetEvents()) - require.NoError(t, err) - portID, err := wasmibctesting.ParsePortIDFromEvents(res.GetEvents()) - require.NoError(t, err) - version, err := wasmibctesting.ParseChannelVersionFromEvents(res.GetEvents()) - require.NoError(t, err) - return chanID, portID, version -} diff --git a/tests/e2e/reflect_helper.go b/tests/e2e/reflect_helper.go deleted file mode 100644 index c2ebcadb..00000000 --- a/tests/e2e/reflect_helper.go +++ /dev/null @@ -1,68 +0,0 @@ -package e2e - -import ( - "encoding/json" - "testing" - - wasmvmtypes "github.com/CosmWasm/wasmvm/types" - "github.com/cosmos/cosmos-sdk/codec" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/require" - - "github.com/CosmWasm/wasmd/x/wasm/ibctesting" - "github.com/CosmWasm/wasmd/x/wasm/keeper/testdata" - "github.com/CosmWasm/wasmd/x/wasm/types" -) - -// InstantiateReflectContract store and instantiate a reflect contract instance -func InstantiateReflectContract(t *testing.T, chain *ibctesting.TestChain) sdk.AccAddress { - codeID := chain.StoreCodeFile("../../x/wasm/keeper/testdata/reflect_1_1.wasm").CodeID - contractAddr := chain.InstantiateContract(codeID, []byte(`{}`)) - require.NotEmpty(t, contractAddr) - return contractAddr -} - -// MustExecViaReflectContract submit execute message to send payload to reflect contract -func MustExecViaReflectContract(t *testing.T, chain *ibctesting.TestChain, contractAddr sdk.AccAddress, msgs ...wasmvmtypes.CosmosMsg) *sdk.Result { - rsp, err := ExecViaReflectContract(t, chain, contractAddr, msgs) - require.NoError(t, err) - return rsp -} - -type sdkMessageType interface { - codec.ProtoMarshaler - sdk.Msg -} - -func MustExecViaStargateReflectContract[T sdkMessageType](t *testing.T, chain *ibctesting.TestChain, contractAddr sdk.AccAddress, msgs ...T) *sdk.Result { - vmMsgs := make([]wasmvmtypes.CosmosMsg, len(msgs)) - for i, m := range msgs { - bz, err := chain.Codec.Marshal(m) - require.NoError(t, err) - vmMsgs[i] = wasmvmtypes.CosmosMsg{ - Stargate: &wasmvmtypes.StargateMsg{ - TypeURL: sdk.MsgTypeURL(m), - Value: bz, - }, - } - } - rsp, err := ExecViaReflectContract(t, chain, contractAddr, vmMsgs) - require.NoError(t, err) - return rsp -} - -// ExecViaReflectContract submit execute message to send payload to reflect contract -func ExecViaReflectContract(t *testing.T, chain *ibctesting.TestChain, contractAddr sdk.AccAddress, msgs []wasmvmtypes.CosmosMsg) (*sdk.Result, error) { - require.NotEmpty(t, msgs) - reflectSend := testdata.ReflectHandleMsg{ - Reflect: &testdata.ReflectPayload{Msgs: msgs}, - } - reflectSendBz, err := json.Marshal(reflectSend) - require.NoError(t, err) - execMsg := &types.MsgExecuteContract{ - Sender: chain.SenderAccount.GetAddress().String(), - Contract: contractAddr.String(), - Msg: reflectSendBz, - } - return chain.SendMsgs(execMsg) -} diff --git a/tests/e2e/testdata/cw20_base.wasm.gz b/tests/e2e/testdata/cw20_base.wasm.gz deleted file mode 100644 index 7745e80f6db3d5420a9fac311cf3b9de314fac34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 105532 zcmV(@K-Rw>iwFq)6HQ|P17mkGFkfO}b7d}fVRLN&?7e@yUe#GAy4Tu2-*><7Ir}7s z3ypqNbJ^ zm??2mtrfi0No%gAEo$swOKo*hMU6@|TJDIJUgr5e&suA*{hl8=3AFmhgb(N4zt*p3 zJ?mM|dVU5syzMP22myO`d;|;e5p}o8P=DT)D z(e4d5-L&)iJ8!t{)|+mi^89RspHYFg-hS(i^ybHJ4pjZ^EpLCz4Y#{z#oKPa@s96% z)rRR;UVrD!J8%8rACpGL>c=~8zL9#e^ZGm9{^seMe=Hcm>!F)(`o34a>XolGP;cDDv0T0e4hqUl(t(@8bw@02U*t5vP>(b;`$%n(UUNYPzd#fTB}eg z`a4Ybct`&QDy3rdqv%N#MJkE$3CadR-U+CEs;Y&m@T8zWTA6=Rh@YbY^eok_4)v?u zYPYHH=ATBLxENAHMMCA{#Sx8@hNWZs4eCJGxLNvKB{bmCIOs4OR3iVlHf8Rl=?;pb zR~R6VSmlxKO2^VLN-j`c#p71PA(f26B%wRCWGOyKhQd%ssk%e`2K^TkJVugb;civ! z*>fz&cL&v@PkfqxkK#9dOm&jC5QgsjF&*T$-u|{-H{8DKR^Z?No!)%c%{RWCuHLC) zp6K9RDt*hXKe7{V?@^0yy?xisJAe3w8*c`FyzSPv-hTb2;2D+OaNBKfy%C@My=vcd zv%7m<6+3U<@%CGH-u$-fsgdbhZ~qbcdc-}WB|{azbtgS+Uw=KVfE%vA`SzP=y6t_sXtL)Q-7@fRQ;Lyb9Gw% zh5AeNSL#{yb@k?@W4FEK#<$&Z{m!@Ucp&^)wfv;I@ql{2dav64KDA#xfV&T$JO@#qJCL@LXCY={feSCKBczr z{5AFK>Wk`4+rOaxAN5=6^E3hfsD58PsXj*^{I=TuS@oOhg!)zW-_$>-�%=PpIwB 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ˈgGFs=P!zw{CJ+ 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 M0N}#7cTmU#05(?*h5!Hn diff --git a/tests/e2e/testdata/cw20_ics20.wasm.gz b/tests/e2e/testdata/cw20_ics20.wasm.gz deleted file mode 100644 index 07517a2fb5d8f3adf35b32173f2b25763beeeb1b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 119250 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

T_oD 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

{>NVz3P?ishb_(Z}E?_9TsF2I>%fFrsFc(R0iK z{1c$sLzff1-t49S^)z%dW$iB)(Nvd*mZMOkzy3CD*6D6)BZm_CU_JPtVf-9Mcl94k zH~{E;suS6 zpq+2A9%!PM3H!tbrUJ#~iITO1^&K)jbh(q2V;%p95h=Ta@N5>z$2t2fB5i1)9PibS zada5$x7=@(6JF9ndi|14 zM1XeHzAAnuFM-v>lICikXwj+y9Z$9s_wU6zq(;NrCwbsX!7#~H+k#IN~m#Osb$BY09eF)|>W6m`31 z>C&&+nAdEN!$D*A{58@jP}PEXVO9k5G{)EwB(lf*Y3}K*kFj2bzS(8EFvSZGj=JCX zdKdTzkH6jpV%cAOksYn`H;dXE{A6sOjOj_}n%{hbpMULnkZ|A}z9|nT{9s;gezSyn z=5@T2xObrTn3=g2*#@%kmQFQs_Mle>k*OJ*mKcVdTizXUU87^V$8XkoTTs^`8qJ>B zFMH`@OtjE70efW5$aO77*TAcD*HY~oo{a62m9E9MYbkdP4@%ck-!)V1TI#xn2C`g+ zt~JoLRJ%s}E%*c4(R6}7i}U)0Ub=(vNr?eKf51HysZKjMi9u3@#vWtNqE1T;f3%EO zgDfL*$(+fwgNUmw`1h zurz*?ako_%!R!*q$RdM3TG2XrI8J#N?~V5}(ysp8LOG8I`&4(wr2AO=aQ>Pu4GjVh z0La7IFT)ZvIYXb0*Bzql053usBEuqZFhrRfBDV&sL&O3?HZVl-z!1d)LzGpADE342 z!x*DjK&Z4ICK#h&EIKk4nH!7v{$t@@-V}(~p9_YCGxG`!)zw4OeW0^oCQnH6=nf8M zx@k|&@Qg(kr=~wOc|xR;!d*>hY7LfLI!I%Kwa zl{zdIBc=IF31{TDNV2Xs)p6K4IKn7UvY9IN?wT}rrBO~^;dRTIUz?B0o#o0u)D$Wk zPJGR!M8=6IGuw^XH&bF2+J}>V(S93Te|r*0!hhw@zfRLUlQ$7vQ_#;7a{6L9?CUJ> zI;;0maf5BGIf?0?P2#(nL=HLHXtG+EtQJpJ%S~1?IaBW3w6+(`Xm9-W*S{eq6?WPFk#2*K<9Q$?bc$0mO? zmtXq)OS=BC;@_wTZ#0@O>L*InuCaL?6a$`=&@l8VaAiBHLa2l{3UPraDR6FCUeOjtjkPvP~wGYnQ(Xe>G{Ta=h$NXhofM5pl4f?i)UE?Ke=?dJnT$HW4*PIU=MMb0 z5ER}UAu4xp`kl#dn=gE}*CXUH$S^-J`Q^b z*7%!vsD^rf{ltF>hhzR&5qExuG0M7(1U^2+dPbp#9W`At#cL47lLUD2Fi}s1$<3Ia zKa0wPF;T`p9HrE9x>h`JKb@R3_^qi2X)b!rf1jE9I%GBUE93M42^%EXI}PR}aSMy9DbfgejGl?cEOKFh$}HITfFnF!W`!bZU}%O)9N z1>CKsL&%E!<8YiFZECA}^^)zsFZ60Vx~wQFY7kSJXyHiM!VzlW8^`F6ZR55VScB|8 zLT%|b(2Nn=>IRhi{s9FZPg!uJ!sA8bjW(-*ivWYMvYhpyMW*Y! zr5qivZ^>4{tiV`Pr0*ir#-fV4c64CB=WZpJGnYZ(>{r|;jQxaVGxQU}nT)xvUbkKS zVr*hH@}$sf;)Rw_HV!^x<83+9d0ryLHYkj6%#$Ai=^3S-R+a*(L zDy1JwBMaHT-L}uq^V_8ew!s5qe7E^CL|oRY-hJJFFKxou`68wY%H1gqpDYppw6L-O z%JgZmXJnSirhR`tCeDgAxH2BZUU5hnMuUxBrFmAgs~tAJDAr<&=dU%TgBIzaMLKAa z9W)$RzS+3*gND1|L8DSPXyMy!`+PWP;R9oQ=Lc<|diV8k&^lj|qp#0_y=t_hu5L1s zL;}zV{as^hFRhvldmCC~C@c3zrczec-Ym=;@=IL(Wz_$YRDXHI|B~8Y=sFXf7pwHj zo$?H|mR9sUgr42y#b47E{WoY9y)NDi=;GzHXI(gJLyfB6O;!DFL=$eR(jRcEKCW&j zV@}*UXTRL+Ga@T}7TY&|vlo@OuFgwpm#AFSOE49$2oGOO3lGol2q@A2%ih~S+jZ6T zqHE5%*4k_Dwf8wI$!UA?0bP3&<@DYnxzFAv7prESK@wuDMF&s&9E>4j+~<(D50^{Q zyj;f{wK>qdQng@xRxKEyKrgM*LeP5c^A<@;)%vU&e1+Chute$W5+$9+_aSl#!k%g|htOaf-T=Pqwkcge+elc;fouAKK| z4be0?D`IHH-r`rR@%Lb5I2JigXvEgHnd)d_$YP+BCdA9?8cEsBW(5_!C_ZGMsAht} zup5zPO|XK50rnsyho1~F$9&T8DB{q6qSX>5GgRj9H^wz40Vs6G$jvYSpO?UY>RM08TcUo&eOsTOO&rysJ7^g~vZv10uq zJe}&`O1Agm94GHL0xC;Y_;9c6M2GF_9VVz09~4e{P7(yQJIrb+?XdH{!i^5QMu%}d zw5<-SDx}fjKer~XJItm9_gJhEIA#n5;Kg>WHKSzYRrLX!V)|ARXy&QRck34lB8WIXj=uj1WSrh zLNd|JT+GCxB(MolcI%z%r!#-Z%2q9Ot11vQ3hF%?P>648h;Ldj*R&wMnF8@S=BO(} z%uy&cT=6#yRI;Sh2%0n^3F8?tQbGVtK^LZlBFst@VOl7{v`~bZL=k2ZMGUd4eTYxY zEay8Ixurd<%*FmXZX~T+9qW^EW00!>Azy3*MxmX*$FLgobk*8v)dJ8-omT3ky8g@v zTveT{oVC8_8xizovqDn`K9SB~b@Nd`Q%Jt=rr!%$D7G+WbtE4EmU&4)We2myEi8o@ z8PRS&_$Ol7$O3Lt{Ej1<<0L(+wyHMs5LI8D`cR0ah|mpNIIKoB7mk67C;8)`%XT91-3ly3Aw8j>bsG(h zF;#KB^Jx52EdW$1UHTjxdIsUp&rU8KFYPn3dM{THCj^Z~NDkeOxZ4QJU&A@U@HDt4 zoQqiWj=p{)F)2E`#WQW_64$O#*2-91*hDaeyER0aTqqtf-{!z+=0#D=wga+;=sWZb zj76*E_=gOOU$_+3{)3iHBTKY^`oyoz;j%00NCQJ)m{(B~Bi|Am?KGNzZ%dy;4j|NS zbG}_GK%AGX1?t2G>colT9QWnJLilWgt<(v7&Gp4CDx<+BJ9I))7)@IfAvoFv z)WpNbIQrC24!RPi>jd44$#h37;*1Or2C^bY(Fzi%gOiC$SZ2_y#AzigJVOR=Mt-L%yMM+9F{_Y_%w)u@D>uue^Ho6msCRF4v# z#e7U-0^4+w-T*w&W@uR63Qb4CnhvJqGNo5FqBKnms5-F&iQycg*A7k>dQCh_=C4g& z6?zR|BQ&NkI8lBHb)lM*2xu@Q=WF32cs|NVbH?!}qB#&4VdH!dE&l3>&;90C?)?FS|+>MX){CVl#W@a%9ci* zL6m!|w{(X}OWDeZB?NUqH7jS6Wnfv!$$Qbyj_6!56avB7uJ~Xbdwi4%&P@DtV8+WN zM6*vShS8A#99{>cJ1RS4Bw&M}`iTy-j`REXRmA}bai3sZoSrK60Chl$ztstzqCsk9 zTuUTI(g>wPFW9JC=7GP(rY7su z?p85I@%N^F`hR{=YYJfC^ke(I6$$noyT$?nLZ?#OxW zz;3>S{`K|@*e{^$jYpkJ*$8+JBK!`aj&3!#1p7XSSwoNR@;&kouA6*tn}5*gXGbbe#j_uHryh7``oJe}iJinHRwf_&P&ysb2F*O`d%__}~#dSaSgbDBZG3~gh!k&jVk+c7|t*`^I@pviE0 zkiAnRPf?jnHj%70JMc%T!3+#fZnp%ngKYuO7Kl(_0V1Q;L{U9YY~{w(K;`}5O-*zm z)T3<%3D`2``5U#ow+AnFj z-CnfS%|jX`37%9fGa-jmVbKL{UTBrMF_YlR96z1w7^SyC#-P zq+y8#e`XuFgr=D4YwS3z10Ll!Skr6D6jeY={f8$=m{Y|^nO_T5dl|>kmPArVaCHs# zt{74g_A?vAyv_iNaK}-qT-YFCNw<@?i?!^JTSi}f@*3^Pa6*W4~{51Bd zjJ&x&>s%r%#=JKYtL_l|mP3)w*BjJ<<1eQ z@DedJrQyNw%4g=wfJ$SCu{+>A3M8;qGJ~JbW4;sF?L)Dx!ve9(Q*T=3Nu%=4nJOou zv0G;GK>~aQpjZX~*TL5A;-`SQ7fh#n^hUm-!vXUf(62oWL)z{W&@>d>zSEc|%Svu!L)L5FXk-;jdzde~<@b1coo zfiy@P6Ods7vS|~LumwROU|c4k01dFby+_h0ACJ9fnQ(Goe zMiaj@O2p%h8v&Z4XE2u>qW~T=;E|;x%C0V@Uqio%H_IB9lWVvD zzDU=wY_4G`Yq$`wbhojF!VD~|T*Z1{>!^oGds@2nsY~V5`Q({tqo*l)ny&0A9brCh zt)4DOPfKP*COVo)M>!s&RtW1}&H zqkGGFhTO2rJNjM7PhU9JOgL7seN19g6PsfnVS#QCl+9A|NDW^cM_Z zYxduV$Ni~Q1q3T41B_jiySHUX1DA>0U#ud9r!F5~{tGW3|LD_@k1zlEO8NMWf8LOf z-*zwE9KQD{%g3MBR*+XW{+;N=D+jIkdJ%MtgrrhIsVR=Q{8x1RE%`T#hEF{}JsA}5 zcRYRbYO?wI2kB{-MZP0bT}OAtZz4!d8Oi&@cn@0ofW?}c-+r6=j$0G0|$Ow9Q zb`Lm@14GN)J~SvJ8k7q8mj%63|L(f^7)_&8N@a*_jFyUbxrWZ=%-wh(de-}Kn&rC< zQ+=K;pUnQ_AEigRU%Pu6YsdQ*Mc(`|E;8}9(6{%a&SbUayUST~ReaEQVsZiTZ zoi&KpIm9%E%h9E2M56A-G>So3Bo3BlNmliik;8@rHya#Gng1B`uah79P4IMwf}L>|V|gI@ zmm5s}mm54vx5YTh_&ve034iYGTUc?T>#>y0@jR zpXy6zY8xR0c|86R0se3R2k@6zj=u6fH>kETTtAD}|6{BEF#JtT(`vMK@h!B1cH#+}F)u)ir+&4K=mu!A z+Z5#g6kE7zo9}-H+8l@_ULRBe*7r>&I3VaHtAb=n4Z}s6`0Bmdw2{@n#BW{fNwoRI zyH3;QFxa|VjWNm6BH3v~Vf9;D0NbLeL=ja;9BvkY$md?}ArzFSA&?4Wf`s7OK_fkN z6OQjqO6NPaHsN45HW^34;}E4R15t0vkpxqYL`IfWPw2=J9a#c;_7V`ivT})z6IWu# zkuY0}5hr5Dk%%2fqIMh!>^S_86F+2Vf#LAB!i*!S%{YW*_LCpF_(-dZFXawwU-F$o zSGG%6wn$eN8eLf!Pw9%0t}LwV%9gR0$|Zri(UnTrqNKf2Z+oH5u9{U`aZWApC?oi% zdexzd)@LiYy}7;RENn$*VY-=D?zNCrXvthSk#jK*Jz+u4<$zh|AUa$D-o51kt$zqvH0(^s13vEU&!<^3Pk~FU#2lh@pf0 z_8izSgWoy_HJ*!~4Dnd<@?20^1{`v)xZ9QI68oBul|j|QhMo-9p^NLNQ>eCj@HaSg z5yJ1ZWIxo;y(2S|Mi6`_ER2T>T-6g}&Rl{(5I7==l7?lLI4aTXo{gjPAiA6{&qHsE z;aUWciiSP*(C^VqmE%zkF@0XnBG?xFa2T5E_@9Z+>94%1XHB(XT&~+QV0xq+(8qH$ zbC3%3$Nvtt#*0sypBx}52DGyEbBE_}mxuJRhvgZthhbeJ4kc`(glm*YLJ8L>5jRSt zp+wv$ku*wlLW!hNB5jn&LW#6dqSGkRr4l~{UY?!~dwJQveKEVH>`96h3qPMVwC;nt=-+JdT>7`WSX^_6=58B`FI>Y}i$|-1F41>=eb;ZiOZDAA-whh?I{I!# z-_11MW%_Pb-_17O>6+x_j4VdkA2-%xEv@DE+G-Sy)hMQ{#u^>vnklQXR^P3ivKs63 z-MT5OF{kh5rmV&}`tF=5t8uQrJ9o-zoTu;3dkU-3|DIcoc^$?4ij}a{dVRNk#Y)&} zgTC9aVkK;~QQvJ`u@Xcf>bp%VR>D@#(|6BXu@bg=zP@|@ij}a{`TFksiIt#tH0Nu- z*XFz|%A$&wMr$FaSOY_|HRal2QO=k7sJDC2W6l0egn6oAbt)jB*+Bx6tCbt8BN(4e zC9WsVs``QID7eYrs?nCNjHb$XhL|KFTzgg z92R6RLTg3m_&nH4%n*hp>^XDUz8!H3brW@$i~c>|&7tjP;n=x`;L@m9u7Mc_@ZP8> zdk9Kd;89FJ4NRK@(-zY(Z7~(o=D@VM;ICpTriBqmU1A!h&4Fn{iD{TN2c``rreWF~ zm^PG{hG}zP+E8K|rpT_^@7YLQVbW;^ zB3P#E1s7doW9ToHqPAR^86RG?k!P*!6kX_1F=HNV9_Kr@tru9~$->G3;JB zJ0A5byL&L#I2L&WU}GlirE~!6Gm$r7wxib$fl=!NkvG70La*aX>3r6wA#XtL4!uq; z9b}E8kT-yLmtLor4tkAqkT>8r7OHdUpx-zIc>{zGU>-z^R?dL7#NmGG+kVvzPK?bD z)5fLazI4`G{YN6?8>N#wQ>r19f#a^F*7H=@-zj z*%ylT!oCkh9sRwdQPgSCEO05IXiR_aZxoHSXzGie2t^b6d#X`1(V}tatH%>nN`G&- zuP&NuQ5*UiigxJl9gU(LF1j1~#=MP7`eDXSh2uL*n|^p6@BQH#Jx_(6Bb=!@oG%A< z(16XDrFxY?TqF9~AKt}aHTrQzHMHs3n9fM6i_71P(DH1~9Hrf>$bx#9!}zUF?dPCf z)(&S0ZUK23S7BGa1;v|i7u>}(8sCWL1#Q8I-9=%u1fmz(LiGCkEev}<6ruSZ zwCU$c&}qL4^~h<=)$&I?EQ%ljQ`gIN!G5VHu9rS40wiRtdU<7Ao6%4+7*R8b4&&*m z8Gbcu*1kF|!V+qjd**eJq@2zEE^KyZ6Fs>0qjJt{^>^YGR7&(27W8|O`kch8V)YIJ z%j8q5dhC8*)k9}rRc~rl_l2rHcJ@_ur&e{x)2S*GHEs3r5V}|+C8@5qC|TWs`mYQ1 ze>~J*OshW&+KFaMovEFE^e%DfK^v@yBQ1(uu$Q zu3B zaaMgu<%_p)Ym;BR6HnubFB19UnyFu?4T$!-Wye#ryHUTDAY`U`4C~OJtg&r)a+Wo! zzw7-Uoz}IQ7?Jm?W@|KxHM~tcRWh2)8YHQBK z6A=%rtI=o=PpbWR!qIGDrN_479X1~icFGcA%$tIj97Rl`4YQg^?Y-j__TKq#JDVLe zSJlxAS!W*=3CD>Q4LhrsFJStFmB~b4^AU&EbDnk8BXPf44B| ziA(Ob@u;Kbb=4)~QKrru3-%&)8z}Xo9%7Qhx{)f)B(z0G3@N!V=cK(bX4i)Wv6vP6 zSh2rmJ9x*_kzfR=nq&IN7t#vbZg=IXXc>36LSZx<4_Jw>K=05$9aR$(4Vm}wNgw5I zVO*U!sZ{^zzq#Sdjc*QrS-*K*Gf)UaL(9HL6Wb!*Ax7}JEmFTN*a09|P$J6R$g(p~ z#2>fK)OjZ$UC<)DL-Plx#MUUMc(h-}@#;?JS#G}@zjbyHfP60$*XLh-N zc0AfAoIZ~{{ERt$wySD6eSW|p`%{fo+36E*n&KxBkCF9*ojx6mcd;5Hw`U;U;*ZnD~>Q5Lw43lr5Xh zt4HpUM}HdP+kJwW*2BJxc!qd0=6jvV4u*isx^C)3J#v+!J;;aBL8*fHjtroRGcDsw{l>Bga94H^_I?A27U;ITYia;I2QOJHLB>h2G@vqDd~Z@nnp6)zBot;M9BNWM z@=4)PVdqjk`bmYP!gh*Rwrhd@O-iyypkv>pf*pstqUyvuj;Z4}UTkJ@jul_0SmZbWb@jM=_Z2q6$Cer#cOo=%7Vu9nE?5t2y3ESrRm54$oqp-Il>10$bf7%Bk zz)E~tI~hh8F8+P!0q?dj1CjK#6*z%*gk&(w@4{dq74kTu9w{6b%Z{v2M^>oAE0j0q zLx(Gl@dDY6QcfKJcZjtLAhFncVQ>^2=Lt0lt_v3~GWnOB zgo4|m`)h)gbk#BkpsbfK5wpEaeqvcg#QaQ0F`sEIYtg^-vVfq49+o0lCG8czbZptVq-z zMW$)279{^n!jp?=M3Xy&k2CfSC%E&c)yZjfXFRQJ!aikjj+|+6R$CRT?#>#&XmW8L zTCq4!XH7n3n>2u*&5SvROeQ~*$&1L=Sg-qTNbEaYb^Sw8;vOu>)Cg@-q#x;_=UT+9`xp zsx+lVEIt7eR5%1!s+32MWr-`3gF)tf#NZ}t5<2y=yx)1KST>+yz~$^cyb_f+CfZD$ z=#}$`FBPr#Mj6bdM{cHLB1C^lc$lt*u`pfPEm)~69FJ}rukm)5F+SDlz4o*9^hOtJ z!1+p|-^#VUxQ;5%6WEzbDV`x=cdiuif``!Y~!1U zKifJ-&)mUzQr7_iE`TnK`WHWK)oiTYUn-Xr|wW{n#YiWRq-@O+tEYDrOYo0v?t=eQF$SsIoj?QupMDd;Ctrp*wAZw(+BPJB+jq&bBV^XxsT*rP>bXB;>QMu@arAFE-ci zW1=tNV=7utEkMH>y@T!~{fK<*8=95AJSoSV zy|g2v>{IDJw>3(5MazC2LKN2sAgW%V**;He*~OANEGd8L!jigxLF%dC^k~c> z($aE23mG)h_@r3BWaPM~P(PHZE^vwkwo<@hfm1ASj}{o=<0N{}@C67gjyIb)`Ud?X zP}@~|`NPfHa}=i0(9k`$K)}@UyX93|X z`o^8+WQ!8#o!!?k3|U89t>KugG}FXiNbYiGRW+|Xeyg120W?)Gye(rw21w@ImCV?w z9yOSL^-4=euFH1oh{_xLdsq-Nnkl$5JjB3!7U3*#v=ScRTkKOAV779ASr}mVsSnVx zqM*y+=fVIxIzTruK(}&$ohbu!y!8sUf1*0KNP<2+GX(V9JWh-UTYVioc4w)4V;_U> zDrD{J;QMl@?y)$L5`x#@5~D_Dd*0z$=u{Rum4(fgi5NT+DW}Wp2Sy5>=3~xuQ^W0& z@rhFjP*&wkl>|j-rU$SuuqdnIeM4fC0hCIKHUNW47P|ouLv?KUQ9RCRQs$(;Ecf8n zI+BAt)3~x8Yw%$vbR-b03_xf--LEIC7SPlBfS%R^J#_>jNxX-+*Q7pE@jKus|y;ZM+m=2uncwho^O!R;52w-HLb%muK;OX zfHXRWvP6>4la?rL#H5Hh1MfuiXT%s@kj0{_3uuiH7|Kc*>JsJuJBOj(Jj^(jG$b13 zs0XkBAcR=OK0r0645zKPmM%}qwJmf99mumpkv#}kja)P+cImX4T1ks*VD3jqK zK^g#$wYl8V&MxG(C*7q3)zhfi1$V08fZXhN!jS$CYh-3}=oFCnVM;zQ*Naf1ru&WI;@9d1VF@j~60~qHHI$l>I#F zM1e6kheIsLU9hi1~VtkK@uXF;Q(LTnnU=8(boEdTy_^Nz}=vDXqsO)>dHym zSgzBqZNze}^Ff}#SrO=cWf&QK{1#rl%O%7m4{dD#cvO5XUtRKyHTMyt&Dqm6M-XB_ zvzH^WT3pT`+DTl_!>K>!NT0<~?)5egS{Oys>|e6gN>V+kTYHfT)JR22a2~vIL{v)* zD01M@??qT|8e_^PBJ{Z>rxgtPxo?KB61^}7;T+YGyat_Xu zb1-0H0MDN<&*$a&4Cg1)$?-FLxu4l}Iw28HDo<5&W?v^WE6Z{tPs!_;Sj@vNeLUij zll(<|fqNZq&zV7r?H2PvuV8RMCmgXh%TBzV9QzV5x1Dj z<@P1bCX6}1q@3Z%1@qwTXL#z*+d;>me4eBw)YYKnW6HI!tEVGR0qJ91#N5Z_@$ngk z$jo=45^{;sH!*@NZVq9<6G8tH&SDe7|FK$~V_|UQTL_*drUh<$5??|R7)#tn#umtV z?kS+8rhu&EF50AHM^H~8!d%Fy>;j3yn5%p71mF|&6K`Y2(Zh|LIw zoq$QwnK&{op{lzB$!N`G=Ef5FxQi_Dt%pW6&8?@RU14>ph}9(>JJVp?Zb#Z}1nJh6 z<7UepsV-}^93Hk>_D?xrUWDC~d4ay?wGy^lqy6|CzW*M__p$A*MEG%JSH<|qaPiJl ztOoq4r;hVaeU9y8zxQ!|YnT&QUkC9V)_=CK{<1{Ld=B$Jhxwnw{QpB?em4#C9}Sp) z%Sy~IxPME){r|3w`xk25e<7rG9D{hlE{yU9?k@xGztIHTf5gcGSs};2(rHk@=E$WYy|7yXcX=DeX<-z{#h08LQs$e z0x;K~Vk;h`uy(+haN}sb*+oqtVGoB0F9(2UGdnm~`{RO>p8!UTfe~kk%<0e4ctc3> z(BHeQ^asEc61Ot|(<7{in`tbkZ-!C-Ap@{UM5`R4;(ou7tR4;umfGEzaTHyXvPXmbi?y%H{8adoXxl*I){ z9S^+;tO|N#m_DM#tgbUY+g!}y^FYDgU_wU_&#+f^LJ@nhy;A1oN@OtL)e89f7m56A z;p-~{zV1xoY6dC5_Qh{=fTa|ZwoR~rmLzbSh0oyKqVvn>qbD~!Uf!wa=}w*1ojRi= zZ!Y++C+XxePyJ58e`y>4B?13oItO7o73=Y2_5uRD68o37>OKx3rJM8-#?Ob0YS^4^ zsVhgDx4O$^94`?3x4Dh~jy{L~p2L3=_zzEp2}J5ptwOOR_%LGy2;oB?jagKWQ}7{_ zSX+WRtA!2IfDKb%L&vHzD8?2>1MG{`V?ylGM?Dvu0{!*S(Y&?_g!YziQZQa7>e8N~NMf87enHg$-Tdf_)8@r=M5jVD)yCjt;lwxc;0Pg5ce7 zhPrglu0dCFMR4#`sgOY;zNMj`BauyDr*eUP4YqKOex}u_z{2Em4stQ8NEIyh5ZEGB zu$Wg`auYs1-uQG55AF?2K+cIAY0oHxBpgHo#=!G1+Pk%Ly)*D2@M`5{rEhNJZ!YI= zkb;f5Apx$ltRBTqU@dLz^`-!_R72ioGV&IaK^2|g!O&!;fS97AOj*Xj+EG?o6FtV$ z!68xobYU82F7{(~a+L`HLB+yGWC}(dU3oB?1u&X5!DyynG!rnI2^h_&xPZ|Pz$k7T zU^EM0Gz(xftHEeC0Y;MmMw0+W0Rja6B|)v71W1?!Fq#O|Oad4U56l@qW-EmT7|jHn zWdLVx6)>6!gyI}_&I7adLl4YaPdzY`Wb+{{PAN1;E=6TP^#i z9)L$4faf|nSRDqV<~cUve;hXA(5h_2p|fNomLL5WVI#De=h%p|Vb-gmS&)-tGtLs2_GmKkSY^c1NOJ?Cb96%kJpQ?&wqT26cqnZ9Zg1K{uCZ zs=j{M9n%fWcy|W%SpTE5ADm@g69`?g$Ue89&Ap7meM)rkt>u zYf(o@Yj?n=mCH1#qxM6;My;pf{X0P&6|y_T)K%JTQb$Q^cl2em^;`S0{jk-te>#Oa zDuN{)b_ZgF?vpUVVkph7Ct}R(ZRO^~Y&al|IV=>XWcBw@s?tLRx^p2-=A70Mi=A|< z4sV1eSFo{$mqfg8w8|$i(BmGjk=;foV2x};+P`abPsin&1$*I;sX1IOU`%VU^qc9Y z1E2RbRCxOm`>bJ4<5o0F$TBxicao=Kn9`-}ggO%Cg+N6{kejA z&J7`8&c&`y)fz0&uwnZP^~$0ahgKDS#yECaH}t^Gb1IX5*)I) zWUq8~jPB|_T*GFL^s{+9v^D)3wqJ)sK+j7V+N8`2cLveKL#hciwx8D9&-(4RM*J73 zTfFbgf_)W7>80j*4++Mz5qsA7T}F71pUi~~G5S7!!uxCV{o-gouUL`8F>Lk@q~-UC z-{SY=Ip&O>V_@me0|94V&oLTpOCHEeT*Tyov^z4RkAks#A8GUUMmT0 zCB#ftT1i5L&W{rMS=Q7f1hb1jvj77ew99yOwFP5@oa;$`!3_d9hzHbAfw#SV#kDgzn{# z^DvrXWC5q6nS5r(*cpkr#si}fAu}7!IDzNBtol$qMX?1rvf_$oy(!PSQ=Vn=Y=ILo z8&Nyw+L}z?kmC)WxlnpGg_0>uL#24s# z&bf94R<03OgbK~X$P=UPQ{q^f)v2vx4XRL##ieTcD|N5RM;iAC9q=im@~;fcz^8!{ zZ<1{Y@iNKtPi!aqqG+4CtjOJe7`f`>(bCKdVw0NF{Ygy95dua_Gr5iYAISjEA+Y|` zvKNcU7cAHd$MLZ)+)4j@BHFo6MF|i~YWM#)MWy z_>uaV8`8Y(zf(JRCq@#Sv2^l+GjKw|3Z#JnbZoOi`- z!v~diVM6JuJL<5=1aOijbeD*6VkWcWF@sdFX~H4FQxGRB#ufYDcA0G{eG8~D3UwPH zz!LA=CrJ*~wU2QlmJloz9s03~j+~WA`PmqDWLlK`&lL&5z^mGq9tuI%>BPv!>lDDa2wM^K(N2l)I{A_k_4~GZx3SfNw zFbe>-6OIt1wmpQST zGVmWvh{7l-K5KmE5s2U(1FT^DdCUS*m~XgDDoRk-BZHak3v$S?`83rnp@R2W8Ji(i z^nC>CIDxjh%SCM`sHp9}>0|2o7%W9_-ET#-Y0WX+iCw7jW zrQk=uitDem>H0&Rfv|>O`d8VfM;iO|$mBkqoK!nyQcZhOSKF#GBS~}9{ubhuX~u7f zR2ntI$}^)3&pC%I4p{#8eBmgP5xc9Zu+H^vkyTwdD-`YDRoJ^yoyyx8t8b>O%llnGXbh+Ar={ z@r6CZ7dNc{~vwyxo<`i4N+$0!m=F~(TD%n+E5pV{C)vX3qosR2C(%i z3Dvn#Gs^#g%hyDl44c2D-$O6wkhJvfoi6_wYp$Xi43`+0E0Om16^ML!yDvVXje6yk zV3=P40mM&ktPG*7>I4)_o2uo1^y$Iq#Bpll(r$IxWPbas&Ts!SAuNj~cV@W{Q{5`F zQ`rP_b^ac4k|POoOq=|%FCG=I`{H`%cka(l*2}2p8L4^`PnQxOa(V*s;pg&dm;by3 z%G*9>h9IglKC|!y(}L)>XcOf22>N8t7hw{0=p zr~k$?_O{K~hd7f)qj5Q8@LF{=O$c+( zmnR_1k*`lenDh)^9A5E7a)vJst@t87!xxW!?F_JW#TWOk_`;syiO${7gMHgcIwm>GC}=SCuq%CPte+@H9_m9Pte@-2|D+?-a+S0orZH( z-9hs*L2Fl?p!H`xK^vad1Z|u?L7S#e(DT0g9rS$NLGk3&oi9_-nmUeZ!)mCJyG%tk z0BL2)fJUWLv|SbFV-5Lej!)g^oLAsai5K_G;pr5hua8}(@q zCl+>BVCzKjLGB;&A;7w(gn9eWI!-SGq3#cJbT68!A-aRyF<84LqO7qO2#HgbV`Q;R zAjm@ms2jpGK%jARxWg13y0P(2G7Dl4AN7x`>#&CZrn(adnYl33cu%Xw`@37b0Or%yi!##w!YTCMs# zl_Y@v#}hG zcsmD30vvRR$q0&2wdL*t`_fU2-b$!o;dbJ!A%Zn4UbqMN~JdJTbZ<2=cz+WxA~U13!6%jTyiocZEC*Rlw`ZBGcO5;*2uhcz1G+K#+;!K zr@s7@`rwU7$|(O!6SXlGz3ME@3`{J4h^2}h^ZW1m>QSVsJL=e^=lA{H04LHy&+4Vo zM#KeoqXY*OEewdfzu!D0!$uyg2>4NiU2)a?CPt${)i(_u)ts&CAR8KqbsRYgmDJ^{IO}nlg81`H_4AJjclX z?4y6Sj>~N0Q`_RA(QRzj=E4p9QiT+Wrd?o`@9N}+6Du1QzLDHeaF_H-5mqb+3!NBh zzmN~F!@5;QSgwSfUo2KkyM+Hp;rUnjUpv^$AX<$mGG0C%CLb>N0N9( z^X`Gx;JkZ|g}y!)W$Bc56tbMy-0Gh`|A9}ZL@MM1W{o%^{~y@=f94Vy+s8I=sO2tm zVoB@!`*C6KRk`G)^~8G_VW3UOILSJ{v#$4BXJ7AcSm725p?|oAq}@VNw~(}2sLU{F z)y9b>Wg0A79z{DuFXnsAQ@wh>U()K{h=bcZp6#<9>$E{uL>Gwy%BQUn^9cG!S=dso zdSclkP)M>_kX*qaATJ^zJOk}`Uag>P#^29>fVGPlGs{!2z{Dy4Z`Py-VcTKrl|T~&xK$C8dWr{jbk$leY0H#FKnXQDvpI@7ooFQi)O_SL z9FPptnhEn=UO6Zo!&{8W4nj^>-Sw`ck)-;_#3v)hvTJTmN#0vq0P|X;myMDE8#G3~ zqg_r($B5r7!3t}b80cM|5Fq> zNB>R!nes^goNk)^G}T)V$xByGrjZ003K2fG&h`&lP2QDF2v~S5oryCHVP~HiA6NEu z7c01c2btX4wZ(y zp22U~*)0cT&p>?jOBi*FlyV-@d$!@!6cdtXnYH)$E|%{S@$u&*xqznhe_CgQ2x2A{ zoM4=ip<6gSb*6E#CTNBj#;}w|^V3vf?0}z59uUEc5IkbJn?t`RbR<^rXI(M0WgmN{ zN*~6Fq1o#pqDnu@nR4B-1P+tvvH<~oq&usQMN2c^AMu}j)j$3{^c_ezY&l4WP*9cO z!~?VvDcsjPEF>DCDIx&1u~-`7+Z6Nfs!#db%LZ%c_JL@LdWpnO!!CMOX@-IZ|2bNk zc||na_|v*M(;q2p=zptE9Q_~9CUBXD<(yDcY-`5^6+J7Mnu0x@5{r1o#~ik@Xa1a{;g&+4N=`=jKnKI*nVqUQtJm1}5Mp4FU8Oe7*@3WSfVlmC3w z>k_K1v>jy2W(NpDAmK>ZxfVtXVLM&Mjs=bF1SJKwQz}jdTXALb{y?fLw7T9?t*#fU z>ouyIKOkE@X;$aj)wyh4-C+oZ zXclhR!HRbDizALlhDN9(y9QY`%RpoKUZOSGIwh@o`}cwK9dkF_6)gH$lD?=Qh&_93 zgLm4z9A*n07>;|c?E;uM3;ksX<8K% zSgBG-RYN!@NoPkTI1eiofp#FttLwkXvfJfv2C_kA&Z2>vKz-tl*+PAl$w%O92{Gpo zlB&OUE}Tss47xcS61Wv67RrR(uAnu_t69znlwVxubduOOLCtvln_kWMJYknU@Xb}# zjQ!K986SU~)r@^rGg9O6KB^$o)H9hk5nT{BY-Eyw`R8Z`qV%Ya*~`SoOz;H_d1D$T zruZg&Kg-`^GUTIjc5Cn|U>=VtqLXH;#0QdOp|Bz=t`l0$vg&^2lmA3)((2SGcpKLy z^QW*Ob~>#Y39Xs3vVyTe{)5c*wOVt#Cq~#hSJ2=6JJw^YzFnzfg_(bGZGK-mdSj!|k8y?Ir{+x7F|I?M6h) zw$-od?fLxzx1U*-+wW&OqxzuUF2IS=R@dn5R`Fc>`zKjvRlQJL3~$lfZQ^3~rSJIL z9&V56?GG^Gt$tT;=b6l?-m15=Oh8m`*4w`L@qG2$N43uhyTFB8K#}T~_4aSrHOE$e z^@QACB8s{j^!7j0IyjabNDkWtB)EyhgjY3^zhYo6$)?#Cih>S@{<{KW#*0fHY9-oeeB(WxpaxRTgre8)0BVs_n_D zW{F?p;s91JJ$vERC!(gbttnI5B=BTmrSbY7xTn&>w^wc9mnNiPXOJs>J9-*|rPW)% z!%jPhWyIbrOEcEksI^Pjmi|SNc}difO`^)`3&+))RDVS?HAk_4I}1J`FPKjvFB_roL1WtQd_gGT<|{tgOx&u-lA((U2h~=YnaYC zkvWI2gIyqvGR{w#@h>RrwU0qXq3ighye<7xwwoizfD8M!p74L6^j)Tb|l&b z24dS;f?i0XRUx=l{KNi9j_4vd+_8TJsCe;tYiMcMgg0nuw8dIW!&b{JEsb~1SW)JY zsZ|UrM^nWMD@qicbaB~tLa4)Dp;*HT03RC({T3rGCem53H5So3%iODH%>C#-TJ3Ve z{pgL3)~%M(RWM$yiYhBk(8qfQVrf!5U^(cMz8IRE=J!h4D!8lW_-Cvy$4k|J*;_e? z<0E}k+5NEcBC2oC#?ma6(WL{n%Vt39%Ov!C&qlr;g{R{xUZTb|Z+3CY0=@`~LL*=q z7c6XrpCY(LweLkK>w8L2sdyB?Lex;vQt9?=gkc-vVJz|MFIbTUy5cbl2((71jcC)DDtCnlpkbin;XT{*A z2+~uUps(TNoW*S0_G~90$ainVR0}?n>4>W%$Bs#q5(87nrJ>=KKgf2G%aEOJsLrR$ zC!c(>vxjcrSO7zv1HUkemJSdz2!>++QuQO_oTz-ezq;$g$HXuZfl1=BQ+&?uX9=iv zJOE5j!deH!*+a(+#NPl`3E0dE>&I>}b7H*%wj3-$^}GXBymu`2ZKG({M&{Q!ShJxP z$_PfU5S@CPF~S~bmidn2GuDrE?})9{qT;jm)$I<$m&LLENxBJ@imVhJ(%pMU)Eb{x zG)oI#e9exyQLFJJ@4DxhKQ*s^J7|^gVk*^j1e(frQ1JpdsS};aX8*#TJ|v_%vs44iD79J5Pe^m z)J#qZZOL)*Ma%$dK$X82Z9PT`e6CkJikvofyHz{wx-&F<>Z&;~iYmv)Figj#@c5?P zrPGgT?o63|i(`rXM;*b$vZf`HhnRnyxIH7sGmpcKwFpa)`&mwSmK*RY@pGK;9M@~K zgYEFB&uKlqQFV{JCM@Yk)}d)m_m9%OaP9{E#PW6e^xzfP{ZJ)VScdAZV>%Mg%L5y6 zy(5;#S&#d%7 zR~p%)qC?8LS`pr$c@gMXnU_>6OUsV0EY(d7TRs_ZBtPl2%0klD$?ZQdE0rhp!8TBO z9rcqz*lS=F3R5kUfEW}9a2MgV1KWWzGEsqNKs^B90G$VSj?6|)8w~Wmzr?M?uS9Pc z8g}zA$5GhYSRC#TUNM#DyE!y`rM3*Tm%fOT!V}kJ%{~r_ttUbzN9a}oM3I6e`3T`( zKwu@+eJIGzf{w4j{4p(C9Y=%5b!Jcj)wO%0x*AsZ$_wi3{d6^q_+&p$jqTJk#fKPh z=h1LH(epj~1{^UgD!vZ4!>IU%g`io9V(aT2rI$jdz|`otO!vU?0d9$?tgew^vf)lK zMMYB}y-_uqP*J;d!%~mLv8UBG!o2ua8{dbo8G2)6b`MZO7#h4InUSP-qgmZ4qnV}Z zJR*y+@lsjUlmIQ8;`n8@P9zqHK9<8m-w8gUfG9<+pEtR4v`@+866M(k1Y4!z9Si8lInHKF z!=cUg3`BdrlNAVQY2jvyIsUROPJ+l0Y>Fp@O*v`}P*ekSH2{_aoZUY%D*zU46%S*K znx+W5)EB0et&nptiG$KY3-8s2Sl@Nvfiw-oPECOar;?Nb3 z!NEp;^X<}u&wSy|0Y_mV47|58y9S9Tvz(_V2qlWwa$iZR$h#ABplR`I;b{8PPy_+{ z1BxY}FhDnmHpWhbF#q1LX4qREI+n2j2F7W;t32%Puv4c?|5 z21pt13G>51`L31o1Bk1W!zLIsT~kLC-mk}^X7Wo;0bQ7Yu?<5 zo9p!EhUU#pxVb@Z4mWRZ#m!;8xw(0B1UEP9&27z_J8^TH-rUi=If|P*^yXgN+@&{n zHQyY^%{_W^PqWyAxVcYn?rRo%1UL8V&Hc?{kK*QGy?MA<>?CeZ=*@{{vBz=qnBF|r zEVle%tb*R0Y8JZ|Z=TSbC+=<(yB=>2eOMQ(S?osKT&HiYYZki+H#g|b4b5V=;^wg4 z9Bvjnf}5N5=H_OxJ8^TH-rUwKc1QEgB#22oh)G-cyoO!?J3@EW_&jBe+n5*<0cOt- z2m|S2nl$gFgXp^j;G(mH32pvRY~q933m4k+3Vig6U8MxJ&fV zjQ$+VngV58GH@qgI?EPckR6C@U^UDb2h5o4@`(WYaE?7AX0*jWS`Dd%2C0#n?kz3z ze~tbMRtQ9UzzW1o`hF8un9Xa9)W)uja(;rFwFmOQW)7fVWSW4!9kMs6Cy#UrY?uPi zNlLH%6xcIPfl4t}^hBi6v-yO4V^+l*cDi^21ex7GvMa3GgTB1}Epxlw(2%|Oja^e$p~ ziWjPYk*B(NA$YIH9Bu~DRjnB62aAgNTC^t8dW4C}}wXKp3^rQJXMoFXfXi`cbbUWoto6I{_sdvk!)0 z3h>SuCG&*9Nbk(T|EMkeSIGxt{5rF^RI(uQWP$NyfvpHU1)LwVlq_QEU}S;*y#T~C z1t6v^05Q`9AYPWDTfdLz#mDUu7FL_{BfXR!F&%PHkrzWC=D-Pe$YFa-KQT+fOHo5q z+lJYk%dajux2s9c8>r>9lJoq3i$ptbHWL|0U%n{fNcF+0#Xy$~#pWHqqXq?RAFx>} zy$}>#uw^kmBpAy{sJstF&l=zdjhF(Isz0r6)lG!}U>&47J1MgO$<$$ehhLsJz@?jy z`PITz_25U23Z;9@OR;dp-IniEVQj=N8PIA?%=+edhq%FH8)ywA_Cm=vV-vySPP|og z-jNTDcGF>RoIoSI=dh0OI_n+E#mqsxpJQn$`1F*LI6^HD5U!$*NHE8?K^);B=sU|X zlfyyZ>G*1%tpmKia~}H64dQN|Eck3;_5zn}^}$I;j$i9boOIcdCs+EO;$ynibG2WQ|!6HL1peJ@mGgslvJ`&%RXe_=JuZ_PgKoP{xdz zg~ahc>5u;y$(BSv+Nq+Km1$-7>=XSW>}3-)j>KIcg8UhQe)MGn+48{NRV@DB6dRMVDXtosb8>j^w`%7yC?!l7;jn;7^F=@XERcB9S!VTQy=0kM^rg| zBl_xmHe#hJpg3`R`|_S#l+oUNEg<`Pygoqp)%iO&(pwS!{o-Esu6$7xS9UMG4=>E# zJl7X)?~eS1UNXt*t9_MK2F<7sXe@{^f4*Qzx612&<2BoZ7j>1--4NILhzqxujK zL7PuZLiOgG0S6h1FTf~3|iRm!%ylF=8y&z3UfxN+4ZZ{tI-#zaD5ZmFJpH}?@~Ty##^iUv_2>%wfHj^47q z787kW;0h>X(8Gk}6CvPfUg=<(L}nBGU3HVp7Ih^sr2X}J zwQpKB5=e_UVOc7!mdenHwoApk97hUZEP94cJP`d0^a8-w>U1^C1o?RU^Z!ksb|;Pp z2w6TJR8j5lTY4+_>J5KP9|^NSJn{*uqWDe7pPdA>t={yvz69y6Lx7&!?f*t*--7Sx2-f(+aNgSMsHS9{Wk5Hjf9A!e0ykB ztYaIr>Dwk~)0^MkpiOUkyV9nAADgrhU7M*R2=@LP{A}EUm_+yWmT3XRJli6)Xz@ou z+M!^d3U3*uBIvki2*`ek7)yfX2jEX6ev|YrW*HQl-V=$!ZW17@61Fnpz-=YeIT!{T zlK>{$J?yeH&n9oQOu!Cs##*o?Kx-^fj*NQ!z~}+=PRa4o2n1C2QvDu`lYC!l%DQ=Q zfH=K3zT+5jF^tk5iXx6~SiSWf%=(NZ`wl+!)nZl(;0c|T1sVSw6E<|!hlW8ukXNp8gFXi0tx{him}QhyipcZ>dRTaweRf0!uR z4$PCmqB;|lbIB4RbpqJnT&!=)N#P8=NrA&t%%~m=LR(B7k;;B~upy^sZ3HfxgFH z!zg$RWQ^Tf*5+!te#7sowYf5d3uR#OM8yB52IJAFxvsB{l85>pxpme0f{FU8gSEK} zHp40zlYrtXH)Bwy4(?(wDJbQbWBKID+yS$?sNOm7=VdNy9;&+YCYtO4BIE}`{4gFR zOpz1By6z?+DtNB@V=3}ZDPpQy!`tE=&eMxC!Xj*N+xrnQZAWcjMkQOG5f4nm9JgPo z8<@66<@esi=%gl{7>^og5m-nJ*+}(otNRc8h`sEY6E|L+I9vzwwXI2!#3~Cb{5cvy zPCXoP4GMzqpk}ACGshrT(4NC)bV^2+f}ky=`uC9i6A?ZpJJ1b_$I%cvJYm{ zF(?~lmDwe%GBN49)C$+^l86?_lI;~gDVBX0tDb9K43OGvFDqDByMlPmot*=VU=;`w z?Jndv$8?*yaAr6!xQ)s=hMke;7lVR$L34;}omF|SPH#x`$UxM3eC7A&S! z>}M5BR=YL{BP|Kt1KUlL?@5df8wUGeNEP#|3E5x2w^Lt%_p zX>RK?-x^btUYb&0#Uec^qkK6ry(YRtCU3!N2kE97+&ZF?vRi=pBA zM==bu8|ERBO}I+-4>@=-ci>0S{;;FnYjh%Nbs}nZ!m%-F*@JFplTg7693?&m`Mp^F zvWVB`HT^sfIn&q_x*6#;&y9c^Yd8SW{*vgeK19y9vk5_;4=@5;5V&9q))b_h6Vffw z^muiR{dSF!)|l2crdlJj8HkmFs&L%9SjJ3ZM!NmuQDc(nYs|3qQ=3cLn-KH>R?(1? z?-s92o-^j3!2K~#zmW}9Smn}~#vKFW$Hmlm3Fy+uAy`Q;I~>kmb8PJ4VXcz) zv4$`7Atk?JFL;q)(_^lSML?2n*X4s~@%U#Rf8(!y`uD!}r6~Us+l&SW_L>kEOl(!d$ATUjK$e*=rCA zjgRf9!@K?pB8d)OL0l@{F72h+6yX-V=-@?1Ul1uk7r&?!69ivndg%c9D_qIJ{}4*$ zTFzR5Cp+cI66b3Mw~Me_Iuzdiejpr%M~5+1e*%bNI7kNK4oTz{pYM~?yXFritg^t| z?cfATh%e4sc$&2#Cwbx-B}j$?p{fNJ;4}3|0;kRIujc>vQ7Y_m#sP8=&iUZZeFGSP z5kkL=F+WR#oNQK}A3q&PLn5=$+3lUIE*)6?1k?gCbvy?gkQEEn&vJoq<*+M}OWKjT z!a2K{SXGWyXP0Ii(F(J<)Z!4YEnP%ZvO$iY@c6O;+bE-5#`}+eG}*xsm-|?3lNY-2(vp6CftHU$$>B5Q~?Sk-XhPZOgX%wSzx4z#<~I zN4pVFPJ@iP(1U^YWRL0Xj}H>ffD_eogHRqs#qOZ}r+;t$t?GD>U87wQb+CtkttvquzxF9VLijCC_0rNe ziyR{;Drv@VKUDS()#9<)Jn)aqmI-snb}YZ)Y$EEo?PJ#Na?Wy=_>1l`p%oOD9{iK3 zs6P$5uB+*vvb(V&utGmHCruR@!)77f(x3^_r`2DH8mjezkbw}4Migrzk>cV{ptzgX zKs3y9NmhOy{WLUdoTWTb&011sfTqO1sAesNX03;xVhC;_Rn1z0I$5)plsP1(N!f#D zEn(&ID1&Z|Jx+?Z0RrQpjzu0g#*%&*B0>vFx1?6O`Er zZCghWHFX4$%IDmqZs1(s+^E&&oa%-}ej+oL|IC>?^0fM}tinIp=@4CumklG;mQ4aJ zg%{;Pa9bS_6|+e7lIr-o1v4i+&lmB|*uu1a!g~%`D`dA|ugGrTN&nl#bP;aBiZe*8 zXNz_r%Z)mYEhY#E0~7bE$FXPPvg=8Uh?y*=zM5EuW-lFsO%3jmnS{j?w3IAyUQj$< zlC*%V-!9o;e9uNE)P*sVSf#z4gQS#Lon^F3sm+)Jd;-jC5oR2TDiEFzT)aNCJ2fd( z0xn-4x}BPHDS-$;AI5kX%fr||Oz<#~hlzif;$bQe)2g?NfG6wUVvZj|08+ff6FQyP zVmU~Oy!w?JZap4d;Yp25Nnj;FS}&XAMkKMfosb)1UymPUF+gm9wT;>POGt-_`D2q| zoxw2+!&zfNtgetNDOelW$du7;K*rtsBnY>D&FLID4zvZ)L*++NX#&oYz>j6R#L;UJ zq7eD%IeSRSx#?+lj97}o%0r@IinpWZJsdK>mmmk8Wv}T{4Ztl#Dw1|OG$lGtkjLVp zCA2Y{GfMylRQy<%sLMJCcPxr#F;5r!%UI<5k*F$}*N12`#+K)Yeb)4zj3yE=MH~pW z*4b&KlGmfh_F%P4(DcG+*)sBsHV|IM{gcMue~0hC6YjrlAjRS&00z;`nBg(Pdmx<@ z6WoZsCyANj#+whlm)|70@D*aqU79^3b`_-c!_?YKHTSx3WIlAZQ8QNTm0C(=h4o>6 zlgdcIUD*{7-*CJL)JbGHkzZ`R0>4T?EzVy_TfMWyKGxXuN;26~tMAIlZi_?jbTY z5h254bopKtIGku)KTOxR>Gl0|eThigldXhLTy^X1z%W}>(*ENtv$_`vxwZ%Km1OAx zvUwF>El5@`mT+8bUmk?>FJn%$I)1yiV_n&g_cr>WB7Yu&Ym(xo9_u&G(gt3OF}vZcpG^xxp_CehkA{GPUzO7?>%F;E)U&$d6+8g%yQ@q zwaq~ltK;tywa;x{?UOLPGu+K9+4zm{)sV$^9Kcf8Om@t8W-Vhz2-)xX>1bE}o|K7o zQ6-77RZ`7?nT!^neDdn=yyugjT64MF9ed!#KRuvBB_V$;$dV;VOJQ)*XbUfa03iP1 z5P!Bjs;{s5rBSwcB3d4G>EAcpQknhLpHTP4FODMU>RpvCmD%F;e;qBa@;<}+qlbQY zwf8-|U%vZ+7cbvJd+~KE3-r0bz3;#2`&KJ4!zFII;lIA=c~peM-%cq9t{CN(|MBV% zeDYirG*ioEC5C#{FWmyA!Zq(Xh8XHMzb9w}F=KIIeu85Z7nS zn;*Ry@y}~GO0)FqwXoz}IeBO$CF%k#OVO1rYFOjA`ZPDHY7~siYNIhX5U*Yfhclwb zJqZuMUs~C$tj(J8&8+Nd(=NCLLgoC;v5BuDKESaK1H6F~V>0A;6yE8D7u)L$^AYx{ z($Wqof0hyOmN8PMEq?X)A3XNJeQm=zc*ga@c|9^kt2Wf zjz2p5wP^7mcj^LHl<}3+#%Ch%Q`ebsag$^)aED&bg2sP_3?HEFI#bOp6?ba}NK7MD z_#(7Q?Tq5k5~Lo}8lnMAHdKbMUcqgBw$YZ6wn`_d=YC#97uT^314yOrM*}F-ch;{;u-Kx9Tr3}tga+l*$UmD1ZQFw3@8QDrc$sp za?n^I*u|ZLd@l(qzoe-QOq$BTq^S(dSlUjsP8a93%M!j+l!1-fxR{yH#CFPzhLH!= zvsijSw9w-b{GMYfG!WAruLd2ZOnCxVWqX;&Ly(IO^4cQM5-SoBBB!B9G#0TM+m(YW zK~jY>m8nRfQsf@8aI_9PLry(% zE6%3ll+!T0cF-1=to{hogG~pKFw_5CnSzXMB;ldywYA(-iV=hV-$#0H+UeSrcDl_1vwTBG5=h9GR2d!3ce5j|C!Hc$Xt2alwQPqHg90B17@A5VeX!lzrk9O z6Wv2z{$$5wGP#k6*G4QFA({;OikQ8e=)8ck;)seVkOdMpK*7VAMID}GR?H0#UNII7 z5)D<2b|tgCL(%EjfG2DdgV-hpu}usj=Hi@uJQh_k8@)vB+PIh*v$?1db5WI0MOMu| z(eo?!jz|6*0wx{E`yhazXGZG5LmM7ieFzv~4=A0=I&kR7kt`Q9uHk=nZzLQHJPLHU zUlH&Vgp@Njh!8~Vjp)a$WCpN|#K%W09u8hnbq>%-(gXWgj<+``&sTeyo$h6S)t79b zP(Ui!)r@{fi^P)tC9$SGP(AtjCpz%A=ihPl`sMgFRdGO~Go=hT4MZ*b@mrdLA=Z_1x*;)?tX za|RLP4mA=o*d~_eMaeBem{*Ewmkvuf3Q_ZrM9o7IwQa6Kf8x*|Z*vv3im|JcWiCT( zuJS#wOgN~R6+yp@H%|)au3%rQ4LQ3KaGVV;VM|xGQR4b&HPfcH3M2|DkSM4?&Iu7c5pw~?8r^E+ZI2A0Fa@==sv zSU)wI=L0=cBIS!x95kOPM1R&Bl0%>pGXcW1q>2JzMSMP9SV^l4v0a($?Qme z(zPv>c~e_}Q$Fm`NQSO5?fF0wnxz>>V{Nb)vy0`mB5{F&KZQ*Jb$NCXP~+ELbu|yS z)X`Sof`w~m^7R(~`fGTdPQE_sCkxC6TeBtQ>@A}nf!PBvG_!1IW?^I4LxkbkMe|Es z!R*y^jT&BewXY!-dOQ(B+YZa};#&9{H-*2k3V%na8uGQ!E$!~NBQddTcel{CFvqU! zD?tr)PNy6!F&|3o(*OY*cllVCCFjLc38`R3r-lRnUw2;u9!GH{+}GTaH8S!kA8lc< zWa}8+qwzVGWm{ldw&jDwXLAj^8?pLo~y{oFHpXgbjzMaOQL=8v$>%*3O1(^*RB zy1*Q?$)>^<2EUL#Y6CXK*D4n=KOQGh?J6Rz^rQbN$F{hs0tQQ6_BX1%cG|fQ=|;P$2H?%BotRG zl2EqD1$JXT6#t6Mv?XHh%`_GHU`fc71u3COOuZ^wo{FSZVPsGN@!oc6u__f1LO~HF z8BMr3n!)IWfVDF#SuufR#F3Jn#mRxoi8xZSqc|A}q=Xck(iKi6fgQN3O0=k?z^J6a z7$W4+B^#BLa#WIy9-)Ra>tqMSu|8I}$S?RWrgp51k1mVn)DBrF^lEMtxK}f~Yr*~r z;x8(qi*B-D2Q=w&Cg$eAyrb~cgT$^qW#=5ZPo0}iKNKOAYl>5wo2-;fZ^%sVm6-Un zh{7j+3=rHSH1uw4dxn+Ol2wEj0F8&hTnikBQtK|Zk5@Nb9YDi z&IE434cl=^m55()7wLQRZrbbI-6+YT2q==itc%VBv(1iua+qy%YUvibXUT&Lv#2&! z9eu>j4cs96tedlo+xOWS40cRZWQgzJS1!~s9+@y6&->t|aJaaT2Vg!pXexni!414F zv!Ve1%8ZvF<)CM%gcnMi%RDH!at_0?c3yG6W$nT*)B2v0BuDNlAZ57_Ucp2#0j+*} zn7RVJ^H5+4dk*3`-kd=Z&4N`fe4ug6k+&~7ryB935ghJ}W+BvNu)_gl&Qx8?=*t2w zG;#flK%Z4aOA+hELH3?oqgadbNz7JcZL-%;Y*6Fej6DNcnDV9v4gesEbZ>(~hcFkB zFctp&WBhERUAil=lzIMZW#2Cq%LCJ&JCw>cLv#bPY{#!Z#yr8M*p4Mi{@FCiA;GOm z){RCG^N@m2VH=&qWZUAaQrPiGq_1^?TVe8?0<0O)cJ|wLU5aHc5pDOLT#3G*3i^Tq zCRVD2*QJOH*$pFKIA+~2LT+VrAYp#^6UU}roI=N~Na@J#T5)if$$9Xw`FRTD14w?J z0v*H`3U5$x(G4n$E#`inLhc3?0k2NMqqHvc^CY^{CI!MspwMs9)@g3t&-rr-Ie$(c z0bF5lRhan?!3m&bS~ZDX(r^154)Ws?Kk9&pw}q~z@pM^IxpD#5+lQ|r=K!G)o}^X? zzkB=CMB+`k*MOx;eZ+S0%1p!>e*1u0pewjK7_S(IBh- z&Baw-)X3mz67Rk*qfzTHWcTd(GNh@H;fl*Iz8DC!av1l#!xvu+`0DFqpL?=2QtUbh zg?1;$X6_`mEVsvS-Bj)*!w8-Ok$sQiwuqI$K2f$kuU}@yQapB0C8PFMrWDmW?BQg` zegw<(BQdR{>Y%d*jL8@QR_o#ms$6s#Bf78Soql+4AMnH5XwT0;qw~=airQ>cgyY5U z=rM_J74q1|_Rv=5870JXs!E1#`eWIdArwE6)Xn`*S?w?fOy}odWoF2YjEs!!&<^dR zPu!s*mOg?i@-gNC$S*WtN^sv7*nK+^U=iIilLwcA;9`EJB7IzuUBIPu^TU|Pv{a!5 z81o_?3TIf(LHsNXKO)LJA+f_iB={)~rsDLe{OV1*t)Z|P8k*1d(9>cG3U*HmzS}#x z2O`_ep-9{?^}fikmQ3n#{^*NEO+6XyOKFi2JrmV3S|*mzjcg{9){^F+p3WG3S~Qy0 zO;bx4*<_|?_olAheS3GXXV)f*@`!Mz;1|k(hdl?LrSLSwS6FOEK8;T{hI3KwIo#=}tWAr1F9tRfB zFL+=KtKjK|CqWOha5x&t!B{#WY=U$zr0)=E%(nXA7kgS+g*310LU@+I6FR(6Gh>n6 zx|uSPrmg|lV*}ZYZtA1ZM-$R_>k&ORs#`e(p+cZPlojScmW7BWtLKK1~V@Zz3dU`OMjG8!-Ls)lAPpjs*nb8xfo=zL-kShE^ z@-vuO$yQZXh6>rwVA%`FT0C}PEIFjwK>}3>EszIc+mJQW4S;G|ydeS*G8)qQ5I`Y4 z-T;{2FcixSX9wydMxw4!k3`yz#NaJ|6W0dxxPC~Fz!KUA4fdoES&~NI7)(Xq zC@f2D0LsMR)wpgNBW%iX4LSTEcf%Tjrvv9cI{>|jMTa!AFCI(8GJv+(cxJbrijVgI zej_=`Mj}WQ<73*m*_B9T#=CII;>g3+Dz+AF82g`F;|zftu*VHZE3_fqY=9+|h97mQ zc-CZyfM}0cAP6@=pH?8P;AVh5 zSr?Fyfw+vc*}ie`y`qz^>wOeu{VU=1*W>sh1Q3?$rkI(EYvXDxk&3gu zLBknR(|QK5Q;(`zl4ygPO~U$w{YQ_+#~ac>2O|wF109W8o36DtwFb40mUg|hBhuE| z)D(%f20Ma!dnBN>X~E!NLp(N+)_^boJv1T=z(6N}wy;U=b@^fM6okh;1k=b^Q=l&v zF`ELR5Rl(cs2hLpWIKyJ4TxeWw1@B1xPEMDfae)K6zasiXJ|^HZ9t~N(3LSgY9Zz{ zg;|bnMwN+N^#QpGg=jUHkS#lqz(oKE6biA`QJC=pq?@4-ZWf`?Mk4#U<_dDsC}WL|#Hky-8Ag|; z0SBveC(!wB8|?eoK4iq>P;V&2C?3GyPB>sVKE^h1S40TZ@v3SyjKp|Etu9&pUb z&2lG1>MdfTt2p1&uEQb-_kb`l1-u-9b{2J}_K;_Qtc+V(SHbr}42=+)kT=A=2X-jf^!j@^ zeP zv#GeDMf>8$kij`Y5CUNGVaEh6@*vqou7=SaDEKbMXqXeZV2J~oD zj{@_XN)DN$Lv}KNViX8AgU}_$RVHGliQ>gzOpgQ9`i0Myk^FooJQ1eZB+9JGT!vaT zGYp+jH3&(AUL%kAC@=Ry8Ob(~(c)B8EA4n0$(&IDZ7c#{vT8-X$nO`*r)hUo0~sip znc6Z>z_tUtY}ik7lNGnxizQ*cV^MVg;MLX=QZI&dzwP~An4Gp2b;Sy`PQ8(*9fK$0 zq`PddMx`fv3i8;^J4tTSSuW%^L$ zga;`V7!9*lzuAD%Iz~WP>!dM(h7UlU$luQ9yzSZLBxmH5Ft7`-Vx%eB<1Bw&V;Xm% zJ`ik8-i=H;tK0M_gIe6wt+E$$m?mK5$AFPmEmeSuIuPszKo9DO;4Wm=$BaZ7$u__h?>1RYwnt+&EMjh5hb#*}3 zlZg0$-?0p2)o9;V2gcPQl#G(NQlFab7q&w`d$2Mie6{q-_jKVvS zG%_mInx?Xvsj{W44uX83bDo&)Z3F=u7^=yF(G&RpTs|?B{zFF%o77eLa z@pe0@O)mbbNS+{{nN6Xl00zg!9fk`}LYbNw%0y#>K;D1=<~xbp6f1We%AtI;Qv-q+ zwPuc&L!FRXT?6pY&EyKGRm((%RZ?@I{8r&-I;PGFqCLD0>|H?x@d~03Rz3!Q4TR`a z#w?ghu9<^=Ga$xHm1%ftRU8uGkd@yU1n4C|(5EcIjZk+l%De!d!9lsj#Y5~PE z>P{$&dt{gq1vL)KiXjnTTGPsvZ7npu{Ja9vvhp0#=2cKW2<11$qBsj|8EDCI8XmlV z5z=w(a$X@fUHYLIQ(FBR(&w?=+Ry&QW^7`m5O$DEZRtR;H#vz|kLGB^!w@i?7@{Z; z0a);TTx$$#sn0?$$aBtI+IwPiX)j>Q0at@nET>?Zn)iyiq<_7BF45yxB%*UcN8$VM zY|;%h3zYsMr>%dlP(6eomJ(YK4scz;fyyAu83Pz?R^6=2QQlnMXQqYmO|~+k}|hnC=n?55L820686k zZSHd7jSZI762ZvQ?Q|k9nO0%>BPKF|Sa=xva|+_%e8S;9NF6LXiU^Oq3DK0?x_Axp zqJDda!6^a45aP-L>R&I?hy*YUv=)K8C5nY42=zvb77*TZu_IbQe2KQLK)zuU7s z{{rHnwgc-zs}%4KEf_?!7>|*GJPT}jKWskdwgrWJ&WBQe!iX|u)k4x$9g|4kryoK+ zC=%sl7MR~O5@m}3MvO#CgDuENn|a+C(o3Wdkd?8*KsV#jh?b73v1G1fTE8Io8h+#c zlR$tD=xkqQoIt*IEQzmerG>99r1kv_JOhlUou&g&PN}4Qi3vxr^8z}=2ASPJA41ZH zd6rkw+%m}p2dLtxbwH*pu(YA=;j;u`YbD|Ku1Z=P7H=8XHC#>Vg?idx{j}Q4^~Ojf zG!BYd;3EJ@aZkRnlGf2Zl|(b9?LRN}EYJJnN?J?m*l-LuFn|t|F9a+7cqOf0TV05t zFrZj6mCY0v6a0((gg<|=ox@~|YF%SJa&la+4EzBg(gvt|57KGIbA}&$>}kRGoM_W* z1H~>>YFj1#MIi04760E5%5CvK3Sv0rLZMd9b zESt4DXq^IqgN0M{PCGc|-J6Sv)~+}&u%d$Z6$A2cxV{2QU~NEfL-=>di}|P3l=3LA zU05sR_3`TWv~L&V)6Z0* zlW(d-0}%#pUf(v{kC6wky~F)+X6x6m9#28V08w?BKWB?7$Iqt2%0A*f(aN@$z#YMg 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 z Date: Thu, 18 May 2023 13:41:52 -0600 Subject: [PATCH 064/501] Update Makefile --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index a760e318..d163f8b5 100644 --- a/Makefile +++ b/Makefile @@ -148,7 +148,7 @@ test-sim-multi-seed-short: runsim test-sim-deterministic: runsim @echo "Running short multi-seed application simulation. This may take awhile!" - @$(BINDIR)/runsim -obs=4 -SimAppPkg=$(SIMAPP) -ExitOnFail 1 1 TestAppStateDeterminism + @$(BINDIR)/runsim -Jobs=4 -SimAppPkg=$(SIMAPP) -ExitOnFail 1 1 TestAppStateDeterminism ############################################################################### ### Linting ### From 4641f2989b514650fd0178a555240461209f264b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 18 May 2023 19:46:13 +0000 Subject: [PATCH 065/501] Bump actions/setup-go from 2 to 4 Bumps [actions/setup-go](https://github.com/actions/setup-go) from 2 to 4. - [Release notes](https://github.com/actions/setup-go/releases) - [Commits](https://github.com/actions/setup-go/compare/v2...v4) --- updated-dependencies: - dependency-name: actions/setup-go dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/integration-tests.yml | 2 +- .github/workflows/tests.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index b9ad8fa8..cfd486d8 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -72,7 +72,7 @@ jobs: steps: - name: Set up Go 1.18 - uses: actions/setup-go@v2 + uses: actions/setup-go@v4 with: go-version: ^1.18 - name: checkout diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 2fea9a6f..c9c9303c 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -17,7 +17,7 @@ jobs: go.mod go.sum - name: Set up Golang - uses: actions/setup-go@v3 + uses: actions/setup-go@v4 with: go-version: ~1.19 - name: Setup Golang caches From 118966b99fcb0a1cbd97a99efa737c4845725426 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 18 May 2023 22:06:45 +0000 Subject: [PATCH 066/501] Bump technote-space/get-diff-action from 4 to 6 Bumps [technote-space/get-diff-action](https://github.com/technote-space/get-diff-action) from 4 to 6. - [Release notes](https://github.com/technote-space/get-diff-action/releases) - [Changelog](https://github.com/technote-space/get-diff-action/blob/main/.releasegarc) - [Commits](https://github.com/technote-space/get-diff-action/compare/v4...v6) --- updated-dependencies: - dependency-name: technote-space/get-diff-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 2fea9a6f..257c680c 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -10,7 +10,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - uses: technote-space/get-diff-action@v4 + - uses: technote-space/get-diff-action@v6 with: PATTERNS: | **/**.go From 503c375af23aae1f1eb1b77406c0da91a0cb858f Mon Sep 17 00:00:00 2001 From: peartes Date: Fri, 19 May 2023 13:10:45 +0100 Subject: [PATCH 067/501] chore: added code comments --- integration_tests/mint_test.go | 48 ++++++++++++++++---- integration_tests/utils.go | 81 +++++++++++++++++++++++++++++----- 2 files changed, 110 insertions(+), 19 deletions(-) diff --git a/integration_tests/mint_test.go b/integration_tests/mint_test.go index f820ef35..c04d3bdb 100644 --- a/integration_tests/mint_test.go +++ b/integration_tests/mint_test.go @@ -21,6 +21,12 @@ const ( inflationRateChange = "0.0" ) +// In this test case, the mint module inflation is set to 0 by setting the inflation rate +// and inflation max and min values to 0 in the genesis file. We then send a bunch of +// transactions without fees and check if the total supply stays the same. +// The supply should remain constants because no token would be minted and there are no +// tx fees to pay validators with. This is a base test case to ensure that the mint module +// is not minting tokens when it shouldn't. func TestMintModuleNoInflationNoFees(t *testing.T) { if testing.Short() { t.Skip("skipping in short mode") @@ -36,6 +42,10 @@ func TestMintModuleNoInflationNoFees(t *testing.T) { VerifyMintModuleTestRandomBlocks(t, xion, ctx) } +// In this test case, the mint module inflation is left to the default value in +// the genesis file. We then send a bunch of transactions without fees and check +// if the total supply increases. The supply should increase because the mint module +// is minting tokens to pay validators with. func TestMintModuleInflationNoFees(t *testing.T) { if testing.Short() { t.Skip("skipping in short mode") @@ -54,10 +64,10 @@ func TestMintModuleInflationNoFees(t *testing.T) { // TxCommand is a helper to retrieve a full command for broadcasting a tx // with the chain node binary. -func feeTxCommand(chain *cosmos.CosmosChain, fee string, address ...string) []string { +func feeTxCommand(chain *cosmos.CosmosChain, fee string, sender string, receiver string) []string { command := []string{"tx"} return chain.FullNodes[0].NodeCommand(append(command, - "bank", "send", address[0], address[1], + "bank", "send", sender, receiver, fmt.Sprintf("%s%s", "1000000", chain.Config().Denom), "--from", "faucet", "--fees", fmt.Sprintf("%s%s", fee, chain.Config().Denom), @@ -68,29 +78,45 @@ func feeTxCommand(chain *cosmos.CosmosChain, fee string, address ...string) []st )...) } -// Send bank send txs at duration intervals +/* +Send bank send txs at some intervals + + chainHeight is the block height at which to stop sending txs (instead of using a clock) + duration is the time in seconds between each tx + txHashes is a pointer to a struct that contains the tx hashes of the bank send txs + feeTypeHigh is a boolean that determines whether the test is for high fees or low fees + - High fees are 2x the previous block provision since the rate of change of inflation is << 2x block_provision. This way we can be sure that we accrue more fees than block provision + - Low fees are 0.5x the previous block provision. This way we can be sure that we accrue less fees than block provision +*/ func sendPeriodicBankTx(t *testing.T, chain *cosmos.CosmosChain, ctx context.Context, chainHeight uint64, duration int, txHashes *MintModuleTest, feeTypeHigh bool) { // Create a test wallet to send funds to err := chain.CreateKey(ctx, "testAccount") require.NoError(t, err) + // Retrieve the test wallet address testAccountAddress, err := chain.FullNodes[0].AccountKeyBech32(ctx, "testAccount") require.NoError(t, err) + // Retrieve the faucet address. Every chain has a faucet account faucet, err := chain.FullNodes[0].AccountKeyBech32(ctx, "faucet") require.NoError(t, err) + // Get the current chain height curHeight, _ := chain.Height(ctx) for curHeight < chainHeight { - // Get the current block provision - blockProvisionDec := GetBlockAnnualProvision(t, chain, ctx, chain.Config().Denom, curHeight) // This the minted amount for the current block + // Get the current block provision at some height + blockProvisionDec := GetBlockAnnualProvision(t, chain, ctx, chain.Config().Denom, curHeight) // This the minted token amount for the current block var blockProvision math.Int if feeTypeHigh { // we are testing high fees + // We send a fee that is 2x the block provision since + // the inflation rate cannot increase that much blockProvision = blockProvisionDec.TruncateInt().Mul(math.NewInt(2)) } else { // we are testing low fees + // We send a fee that is 0.5x the block provision since + // the inflation rate cannot decrease that much blockProvision = blockProvisionDec.TruncateInt().Quo(math.NewInt(2)) } - // We send a fee that is 2x the block provision since the inflation rate cannot increase that much + stdout, ee, err := chain.Exec(ctx, feeTxCommand(chain, blockProvision.String(), faucet, testAccountAddress), nil) if err != nil { t.Log(string(stdout)) @@ -106,6 +132,7 @@ func sendPeriodicBankTx(t *testing.T, chain *cosmos.CosmosChain, ctx context.Con break } + // Save the hash of the send tx for later analysis txHashes.TxHashes = append(txHashes.TxHashes, output.TxHash) time.Sleep(time.Duration(duration) * time.Second) @@ -117,6 +144,9 @@ type MintModuleTest struct { TxHashes []string } +// Here we test the mint module by sending a bunch of transactions with extra high fees +// and checking if the total supply increases. We also check if the total supply +// increases by the correct amount. func TestMintModuleInflationHighFees(t *testing.T) { if testing.Short() { t.Skip("skipping in short mode") @@ -129,13 +159,10 @@ func TestMintModuleInflationHighFees(t *testing.T) { txHashes := MintModuleTest{ TxHashes: []string{}, } - var mu sync.Mutex - mu.Lock() go func(t *testing.T, chain *cosmos.CosmosChain, ctx context.Context, blockHeight uint64, duration int, txHashes *MintModuleTest) { sendPeriodicBankTx(t, xion, ctx, blockHeight, duration, txHashes, true) }(t, xion, ctx, 20, 4, &txHashes) - mu.Unlock() // Wait some blocks testutil.WaitForBlocks(ctx, 25, xion) @@ -145,6 +172,9 @@ func TestMintModuleInflationHighFees(t *testing.T) { VerifyMintModuleTest(t, xion, ctx, txHashes.TxHashes) } +// Here we test the mint module by sending a bunch of transactions with extra low fees +// and checking if the total supply increases. We also check if the total supply +// increases by the correct amount. func TestMintModuleInflationLowFees(t *testing.T) { if testing.Short() { t.Skip("skipping in short mode") diff --git a/integration_tests/utils.go b/integration_tests/utils.go index d425f3de..a7b6aefa 100644 --- a/integration_tests/utils.go +++ b/integration_tests/utils.go @@ -23,6 +23,7 @@ import ( "go.uber.org/zap/zaptest" ) +// Function type for any function that modify the genesis file type ModifyInterChainGenesisFn []func(ibc.ChainConfig, []byte, ...string) ([]byte, error) func BuildXionChain(t *testing.T, modifyGenesis func(ibc.ChainConfig, []byte) ([]byte, error)) (*cosmos.CosmosChain, context.Context) { @@ -95,6 +96,11 @@ func BuildXionChain(t *testing.T, modifyGenesis func(ibc.ChainConfig, []byte) ([ return xion, ctx } +/* + * This function is a helper to run all functions that modify the genesis file + * in a chain. It takes a list of functions of the type ModifyInterChainGenesisFn and a list of list of parameters for each + * function. Each array in the parameter list are the parameters for a functions of the same index + */ func ModifyInterChainGenesis(fns ModifyInterChainGenesisFn, params [][]string) func(ibc.ChainConfig, []byte) ([]byte, error) { return func(chainConfig ibc.ChainConfig, genbz []byte) ([]byte, error) { res := genbz @@ -110,6 +116,7 @@ func ModifyInterChainGenesis(fns ModifyInterChainGenesisFn, params [][]string) f } } +// This function modifies the proposal parameters of the gov module in the genesis file func ModifyGenesisShortProposals(chainConfig ibc.ChainConfig, genbz []byte, params ...string) ([]byte, error) { g := make(map[string]interface{}) if err := json.Unmarshal(genbz, &g); err != nil { @@ -134,6 +141,7 @@ func ModifyGenesisShortProposals(chainConfig ibc.ChainConfig, genbz []byte, para return out, nil } +// This function modifies the inflation parameters of the mint module in the genesis file func ModifyGenesisInflation(chainConfig ibc.ChainConfig, genbz []byte, params ...string) ([]byte, error) { g := make(map[string]interface{}) if err := json.Unmarshal(genbz, &g); err != nil { @@ -155,18 +163,25 @@ func ModifyGenesisInflation(chainConfig ibc.ChainConfig, genbz []byte, params .. return out, nil } +// Helper method to retrieve the total token supply for a chain at some particular history denoted by the block height func getTotalCoinSupplyInBank(t *testing.T, xion *cosmos.CosmosChain, ctx context.Context, denom string, blockHeight uint64) string { if blockHeight == 0 { + // No history is required so use the most recent block height blockHeight, _ = xion.Height(ctx) require.Greater(t, blockHeight, 0) } + + /* + * Response is of the structure + * {"supply":[{"denom":"uxion","amount":"110000002059725"}]} + */ jsonRes := make(map[string]interface{}) queryRes, _, err := xion.FullNodes[0].ExecQuery(ctx, "bank", "total", "--height", strconv.FormatInt(int64(blockHeight), 10)) require.NoError(t, err) require.NoError(t, json.Unmarshal(queryRes, &jsonRes)) - // Presuming we are the only denom on the chain + // Presuming we are the only denom on the chain then the returned array only has one Coin type ours (uxion) totalSupply, err := dyno.GetSlice(jsonRes, "supply") require.NoError(t, err) xionCoin := totalSupply[0] @@ -175,16 +190,23 @@ func getTotalCoinSupplyInBank(t *testing.T, xion *cosmos.CosmosChain, ctx contex xionCoinDenom, err := dyno.GetString(xionCoin, "denom") require.NoError(t, err) require.Equal(t, xionCoinDenom, denom) + // Get the returned amount initialXionSupply, err := dyno.GetString(xionCoin, "amount") require.NoError(t, err) return initialXionSupply } +// This function gets the bank balance for an address at some particular history denoted by the block height func getAddressBankBalanceAtHeight(t *testing.T, xion *cosmos.CosmosChain, ctx context.Context, address string, denom string, blockHeight uint64) string { if blockHeight == 0 { blockHeight, _ = xion.Height(ctx) require.Greater(t, blockHeight, 0) } + + /* + * Response is of the structure + * {"supply":[{"denom":"uxion","amount":"110000002059725"}]} + */ jsonRes := make(map[string]interface{}) queryRes, _, err := xion.FullNodes[0].ExecQuery(ctx, "bank", "balances", address, "--height", strconv.FormatInt(int64(blockHeight), 10)) require.NoError(t, err) @@ -206,7 +228,24 @@ func getAddressBankBalanceAtHeight(t *testing.T, xion *cosmos.CosmosChain, ctx c return balance } +// This function gets the module address for a module name func GetModuleAddress(t *testing.T, xion *cosmos.CosmosChain, ctx context.Context, moduleName string) string { + /* + * Response is of the type + * { + "account": { + "@type": "/cosmos.auth.v1beta1.ModuleAccount", + "base_account": { + "address": "xion1jv65s3grqf6v6jl3dp4t6c9t9rk99cd89k77l5", + "pub_key": null, + "account_number": "3", + "sequence": "0" + }, + "name": "distribution", + "permissions": [] + } + } + */ jsonRes := make(map[string]interface{}) queryRes, _, err := xion.FullNodes[0].ExecQuery(ctx, "auth", "module-account", moduleName) require.NoError(t, err) @@ -219,7 +258,7 @@ func GetModuleAddress(t *testing.T, xion *cosmos.CosmosChain, ctx context.Contex return moduleAddress } -// Retrieve a block annual provision +// Retrieve a block annual provision. This is the minted tokens for the block for validators and delegator func GetBlockAnnualProvision(t *testing.T, xion *cosmos.CosmosChain, ctx context.Context, denom string, blockHeight uint64) math.LegacyDec { if blockHeight == 0 { blockHeight, _ = xion.Height(ctx) @@ -227,6 +266,7 @@ func GetBlockAnnualProvision(t *testing.T, xion *cosmos.CosmosChain, ctx context } // Query the current block provision + // Response is a string var annualProvision json.Number queryRes, _, err := xion.FullNodes[0].ExecQuery(ctx, "mint", "annual-provisions", "--height", strconv.FormatInt(int64(blockHeight), 10)) require.NoError(t, err) @@ -239,11 +279,29 @@ func GetBlockAnnualProvision(t *testing.T, xion *cosmos.CosmosChain, ctx context blocksPerYear, err := dyno.GetInteger(params, "blocks_per_year") require.NoError(t, err) // Calculate the block provision - return math.LegacyMustNewDecFromStr(annualProvision.String()).QuoInt(math.NewInt(blocksPerYear)) // This ideally is the minted tokens for the block + return math.LegacyMustNewDecFromStr(annualProvision.String()).QuoInt(math.NewInt(blocksPerYear)) } // This test confirms the property of the module described at // https://www.notion.so/burntlabs/Mint-Module-Blog-Post-78f59fb108c04e9ea5fa826dda30a340 +/* + * The mint harness test logic is as follows + * Given a particular block height, we compute the minted or burned tokens at that block using the following algorithm + + * Get the total token supply at the previous height + * Get the total token supply at the current height + * Compute the change in the total supply (d) + * Get the balance of the distribution module account in the previous block + * Get the balance of the distribution module account at the current block + * The difference (f) is the sum of the total fees and minted token at the current block + * The difference ( d - f )is the total fees accrued at the current block + * Get the block provision at the current height (this is the number of tokens to be minted for validators and delegators at that block + * Perform the following checks + * If we have more fees accrued than the block provision, we burn the excess tokens + * If instead there are fewer fees than block provision, we only mint (provision - fees) tokens to meet expectations + * Otherwise, we had equal fees and provisions. We do not mint or burn any tokens + * If these checks passes then the mint module functions as expected + */ func MintModuleTestHarness(t *testing.T, xion *cosmos.CosmosChain, ctx context.Context, blockHeight int) { // Get bank supply at previous height previousXionBankSupply, err := strconv.ParseInt(getTotalCoinSupplyInBank(t, xion, ctx, xion.Config().Denom, uint64(blockHeight-1)), 10, 64) @@ -266,31 +324,34 @@ func MintModuleTestHarness(t *testing.T, xion *cosmos.CosmosChain, ctx context.C delta := currentDistributionModuleBalance - previousDistributionModuleBalance + // Fees Accrued is the total fees in a block. Since the tokens in the distribution module account + // are the fees and the minted tokens, we can compute the fees accrued by subtracting the token change + // from the delta feesAccrued := delta - tokenChange t.Logf("Fees accrued: %d", feesAccrued) - // Get the block provision + // Get the block provision. This is the minted tokens for the block for validators and delegator blockProvision := GetBlockAnnualProvision(t, xion, ctx, xion.Config().Denom, uint64(blockHeight)) - // Make sure the minted tokens is equal to the block provision - fees accrued if blockProvision.TruncateInt().GT(math.NewInt(feesAccrued)) { - // We have minted tokens + // We have minted tokens because the fees accrued is less than the block provision mintedTokens := blockProvision.TruncateInt().Sub(math.NewInt(feesAccrued)) t.Logf("Minted tokens: %d and Token change: %d", mintedTokens.Int64(), int64(tokenChange)) require.Equal(t, mintedTokens, math.NewInt(int64(tokenChange))) } else if blockProvision.TruncateInt().LT(math.NewInt(feesAccrued)) { - // We have burned tokens + // We have burned tokens because the fees accrued is greater than the block provision so the fees + // accrued are used to pay validators and the remaining is burned burnedTokens := math.NewInt(feesAccrued).Sub(blockProvision.TruncateInt()) t.Logf("Burned tokens: %d and Token change: %d", burnedTokens.Int64(), tokenChange) require.Equal(t, burnedTokens, math.NewInt(tokenChange).Abs()) } else { - // We have not minted or burned tokens + // We have not minted or burned tokens but just used all fees accrued to pay validators require.Equal(t, math.NewInt(0), math.NewInt(tokenChange)) t.Logf("No minted or Burned tokens. Token change: %d", tokenChange) } } -// Run Mint module test over some random block height +// Run Mint module test harness over some random block height // Chain must have at least 12 blocks func VerifyMintModuleTestRandomBlocks(t *testing.T, xion *cosmos.CosmosChain, ctx context.Context) { @@ -298,7 +359,7 @@ func VerifyMintModuleTestRandomBlocks(t *testing.T, xion *cosmos.CosmosChain, ct require.NoError(t, err) require.GreaterOrEqual(t, currentBlockHeight, uint64(12)) // Get a random number from 1 to the (currentBlockHeight - 10) - randomHeight := rand.Intn(int(currentBlockHeight)-11) + 2 + randomHeight := rand.Intn(int(currentBlockHeight)-11) + 2 // we start from 2 because we need at least 2 blocks to run the test for i := randomHeight; i < randomHeight+10; i++ { t.Logf("Current random height: %d", i) From 9a9ed983fc5e4d1b345d8bfa530e5f6e6d8111d7 Mon Sep 17 00:00:00 2001 From: peartes Date: Fri, 19 May 2023 13:12:55 +0100 Subject: [PATCH 068/501] chore: fix minor code organization --- integration_tests/dungeon_test.go | 5 ----- integration_tests/mint_test.go | 2 -- integration_tests/utils.go | 5 +++++ 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/integration_tests/dungeon_test.go b/integration_tests/dungeon_test.go index 4a902abc..daf6a97e 100644 --- a/integration_tests/dungeon_test.go +++ b/integration_tests/dungeon_test.go @@ -27,11 +27,6 @@ import ( "google.golang.org/grpc/credentials/insecure" ) -const ( - votingPeriod = "10s" - maxDepositPeriod = "10s" -) - func TestDungeonTransferBlock(t *testing.T) { if testing.Short() { t.Skip("skipping in short mode") diff --git a/integration_tests/mint_test.go b/integration_tests/mint_test.go index c04d3bdb..82326d1f 100644 --- a/integration_tests/mint_test.go +++ b/integration_tests/mint_test.go @@ -122,14 +122,12 @@ func sendPeriodicBankTx(t *testing.T, chain *cosmos.CosmosChain, ctx context.Con t.Log(string(stdout)) t.Log(string(ee)) t.Fatal(err) - break } output := cosmos.CosmosTx{} err = json.Unmarshal([]byte(stdout), &output) if err != nil { t.Fatal(err) - break } // Save the hash of the send tx for later analysis diff --git a/integration_tests/utils.go b/integration_tests/utils.go index a7b6aefa..7e64b021 100644 --- a/integration_tests/utils.go +++ b/integration_tests/utils.go @@ -23,6 +23,11 @@ import ( "go.uber.org/zap/zaptest" ) +const ( + votingPeriod = "10s" + maxDepositPeriod = "10s" +) + // Function type for any function that modify the genesis file type ModifyInterChainGenesisFn []func(ibc.ChainConfig, []byte, ...string) ([]byte, error) From 589cd5c52b6913553cd4c403294f5ab62c40ee05 Mon Sep 17 00:00:00 2001 From: Eduardo Diaz Date: Mon, 29 May 2023 10:34:46 -0400 Subject: [PATCH 069/501] add setup test --- x/mint/common_test.go | 61 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 x/mint/common_test.go diff --git a/x/mint/common_test.go b/x/mint/common_test.go new file mode 100644 index 00000000..57c79353 --- /dev/null +++ b/x/mint/common_test.go @@ -0,0 +1,61 @@ +package mint + +import ( + "testing" + + "github.com/cosmos/cosmos-sdk/testutil" + sdk "github.com/cosmos/cosmos-sdk/types" + moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" + + //banktestutil "github.com/cosmos/cosmos-sdk/x/bank/testutil" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + "github.com/cosmos/cosmos-sdk/x/mint" + "github.com/golang/mock/gomock" + + "github.com/burnt-labs/xion/x/mint/keeper" + minttestutil "github.com/burnt-labs/xion/x/mint/testutil" + "github.com/burnt-labs/xion/x/mint/types" + minttypes "github.com/burnt-labs/xion/x/mint/types" +) + +type mocks struct { + minttestutil.MockAccountKeeper + minttestutil.MockBankKeeper + minttestutil.MockStakingKeeper + moduleAccount authtypes.ModuleAccountI +} + +func createTestBaseKeeperAndContextWithMocks(t *testing.T) (testutil.TestContext, *keeper.Keeper, mocks) { + encCfg := moduletestutil.MakeTestEncodingConfig(mint.AppModuleBasic{}) + key := sdk.NewKVStoreKey(types.StoreKey) + testCtx := testutil.DefaultContextWithDB(t, key, sdk.NewTransientStoreKey("transient_test")) + + // gomock initializations + ctrl := gomock.NewController(t) + accountKeeper := minttestutil.NewMockAccountKeeper(ctrl) + bankKeeper := minttestutil.NewMockBankKeeper(ctrl) + stakingKeeper := minttestutil.NewMockStakingKeeper(ctrl) + + mintAcc := authtypes.NewEmptyModuleAccount(authtypes.FeeCollectorName, "fee_collector") + accountKeeper.EXPECT().GetModuleAddress(types.ModuleName).Return(sdk.AccAddress{}) + accountKeeper.EXPECT().GetModuleAccount(testCtx.Ctx, authtypes.FeeCollectorName).Return(mintAcc) + + keeper := keeper.NewKeeper( + encCfg.Codec, + key, + stakingKeeper, + accountKeeper, + bankKeeper, + authtypes.FeeCollectorName, + authtypes.NewModuleAddress(govtypes.ModuleName).String(), + ) + + params := minttypes.DefaultParams() + if err := keeper.SetParams(testCtx.Ctx, params); err != nil { + t.FailNow() + } + //keeper.SetMinter(testCtx.Ctx, minttypes.DefaultInitialMinter()) // TODO: minter needs to be parametrized!! + + return testCtx, &keeper, mocks{*accountKeeper, *bankKeeper, *stakingKeeper, mintAcc} +} From 297789dbe31a51a8413798f5ad76981ab43b9d76 Mon Sep 17 00:00:00 2001 From: Eduardo Diaz Date: Mon, 29 May 2023 10:35:23 -0400 Subject: [PATCH 070/501] add mint module tests --- x/mint/abci_test.go | 169 ++++++++++++++++++++++++++++++++++ x/mint/testutil/app_config.go | 1 - 2 files changed, 169 insertions(+), 1 deletion(-) create mode 100644 x/mint/abci_test.go diff --git a/x/mint/abci_test.go b/x/mint/abci_test.go new file mode 100644 index 00000000..2ddfdff0 --- /dev/null +++ b/x/mint/abci_test.go @@ -0,0 +1,169 @@ +package mint + +import ( + "fmt" + "strconv" + "strings" + "testing" + + "github.com/burnt-labs/xion/x/mint/types" + minttypes "github.com/burnt-labs/xion/x/mint/types" + sdk "github.com/cosmos/cosmos-sdk/types" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + "github.com/stretchr/testify/assert" +) + +func TestBeginBlocker(t *testing.T) { + type expected struct { + annualProvisions sdk.Dec + bondedRatio sdk.Dec + burnedAmount uint64 + collectedAmount uint64 + inflation sdk.Dec + minted uint64 + needed uint64 + } + type parameters struct { + bonded sdk.Int + bondedRatio sdk.Dec + fees sdk.Coins + collectedFees sdk.Coin + burn bool + } + + stakingTokenSupply := sdk.NewIntFromUint64(100000000000) + + tt := []struct { + name string + parameters parameters + expected expected + }{ + { + name: "full bonded tokens", + parameters: parameters{ + bonded: stakingTokenSupply, + bondedRatio: sdk.NewDecWithPrec(1, 4), + fees: sdk.NewCoins(sdk.NewCoin("stake", sdk.NewInt(109))), + collectedFees: sdk.NewCoin("stake", sdk.NewInt(1000)), + burn: false, + }, + expected: expected{ + annualProvisions: sdk.NewDecWithPrec(7000000000, 0), + bondedRatio: sdk.NewDecWithPrec(1, 4), + burnedAmount: 0, + collectedAmount: 1000, + inflation: sdk.NewDecWithPrec(7, 2), + minted: 109, + needed: 1109, + }, + }, + { + name: "less than ideal bonded tokens", + parameters: parameters{ + bonded: sdk.NewInt(int64(100000000000 * 0.33)), + bondedRatio: sdk.NewDecWithPrec(33, 2), + fees: sdk.NewCoins(sdk.NewCoin("stake", sdk.NewInt(1045))), + collectedFees: sdk.NewCoin("stake", sdk.NewInt(0)), + burn: false, + }, + expected: expected{ + annualProvisions: sdk.NewDec(6600000000), + bondedRatio: sdk.NewDecWithPrec(33, 2), + burnedAmount: 0, + collectedAmount: 0, + inflation: sdk.NewDecWithPrec(20, 2), + minted: 1045, + needed: 1045, + }, + }, + //{ + // name: "above staking threshold, feegrant has values", + // parameters: parameters{ + // bonded: stakingTokenSupply, + // bondedRatio: sdk.NewDecWithPrec(1, 4), + // fees: sdk.NewCoins(sdk.NewCoin("stake", sdk.NewInt(109))), + // collectedFees: sdk.NewCoin("stake", sdk.NewInt(10000)), + // burn: true, + // }, + // expected: expected{ + // annualProvisions: sdk.NewDecWithPrec(7000000000, 0), + // bondedRatio: sdk.NewDecWithPrec(1, 4), + // burnedAmount: 8891, + // collectedAmount: 10000, + // inflation: sdk.NewDecWithPrec(7, 2), + // minted: 0, + // needed: 1109, + // }, + //}, + } + + for _, tc := range tt { + t.Run(tc.name, func(t *testing.T) { + testcontext, keeper, mocks := createTestBaseKeeperAndContextWithMocks(t) + ctx := testcontext.Ctx + stakingKeeper := mocks.MockStakingKeeper + bankKeeper := mocks.MockBankKeeper + + /* + Populate mock + */ + + keeper.SetMinter(ctx, minttypes.InitialMinter(tc.parameters.bondedRatio)) + + stakingKeeper.EXPECT().TotalBondedTokens(ctx).Return(tc.parameters.bonded) + stakingKeeper.EXPECT().BondedRatio(ctx).Return(tc.parameters.bondedRatio) + + bankKeeper.EXPECT().MintCoins(ctx, minttypes.ModuleName, tc.parameters.fees).Return(nil) + bankKeeper.EXPECT().SendCoinsFromModuleToModule(ctx, types.ModuleName, authtypes.FeeCollectorName, tc.parameters.fees).Return(nil) + bankKeeper.EXPECT().GetBalance(ctx, mocks.moduleAccount.GetAddress(), "stake").Return(tc.parameters.collectedFees) + + if tc.parameters.burn { + c := sdk.NewCoin("stake", sdk.NewInt(int64(tc.expected.needed))) + bankKeeper.EXPECT().BurnCoins(ctx, authtypes.FeeCollectorName, sdk.NewCoins(tc.parameters.collectedFees.Sub(c))).Return(nil) + } + + BeginBlocker(ctx, *keeper, minttypes.DefaultInflationCalculationFn) + + events := ctx.EventManager().Events() + assert.Equalf(t, 1, len(events), "A single event must be emitted. However %d events were emitted", len(events)) + event := events[0] + assert.Equalf(t, "xion.mint.v1.MintIncentiveTokens", event.Type, "Expected event to be xion.mint.v1.MintIncentiveTokens but found: %s", event.Type) + assert.Equalf(t, 7, len(event.Attributes), "Expcted 7 attributes but found %d", len(event.Attributes)) + + assert.Equal(t, "annual_provisions", event.Attributes[0].Key) + assert.Equal(t, tc.expected.annualProvisions, sdk.MustNewDecFromStr(stripValue(t, event.Attributes[0].Value))) + + assert.Equal(t, "bonded_ratio", event.Attributes[1].Key) + assert.Equal(t, tc.expected.bondedRatio, sdk.MustNewDecFromStr(stripValue(t, event.Attributes[1].Value))) + + assert.Equal(t, "burned_amount", event.Attributes[2].Key) + assert.Equal(t, tc.expected.burnedAmount, stringToU64(t, event.Attributes[2].Value)) + + assert.Equal(t, "collected_amount", event.Attributes[3].Key) + assert.Equal(t, tc.expected.collectedAmount, stringToU64(t, event.Attributes[3].Value)) + + assert.Equal(t, "inflation", event.Attributes[4].Key) + assert.Equal(t, tc.expected.inflation, sdk.MustNewDecFromStr(stripValue(t, event.Attributes[4].Value))) + + assert.Equal(t, "minted_amount", event.Attributes[5].Key) + assert.Equal(t, tc.expected.minted, stringToU64(t, event.Attributes[5].Value)) + + assert.Equal(t, "needed_amount", event.Attributes[6].Key) + assert.Equal(t, tc.expected.needed, stringToU64(t, event.Attributes[6].Value)) + }) + } +} +func stripValue(t *testing.T, s string) string { + stripped := strings.Replace(s, "\\", "", -1) + return strings.Replace(stripped, "\"", "", -1) +} + +func stringToU64(t *testing.T, s string) uint64 { + stripped := stripValue(t, s) + ui64, err := strconv.ParseUint(stripped, 10, 64) + if err != nil { + fmt.Println(err) + t.FailNow() // Could not convert + } + return ui64 +} diff --git a/x/mint/testutil/app_config.go b/x/mint/testutil/app_config.go index e3e8b1c1..d232200b 100644 --- a/x/mint/testutil/app_config.go +++ b/x/mint/testutil/app_config.go @@ -2,7 +2,6 @@ package testutil import ( "cosmossdk.io/core/appconfig" - _ "github.com/burnt-labs/xion/x/mint" _ "github.com/cosmos/cosmos-sdk/x/auth" _ "github.com/cosmos/cosmos-sdk/x/auth/tx/config" _ "github.com/cosmos/cosmos-sdk/x/bank" From 7ad93225bb7b59d5027f37c10c9aa78a30717baa Mon Sep 17 00:00:00 2001 From: Eduardo Diaz Date: Wed, 31 May 2023 09:44:46 -0400 Subject: [PATCH 071/501] add test branches --- x/mint/abci_test.go | 50 +++++++++++++++++++++++++-------------------- 1 file changed, 28 insertions(+), 22 deletions(-) diff --git a/x/mint/abci_test.go b/x/mint/abci_test.go index 2ddfdff0..a94bebaf 100644 --- a/x/mint/abci_test.go +++ b/x/mint/abci_test.go @@ -29,6 +29,7 @@ func TestBeginBlocker(t *testing.T) { fees sdk.Coins collectedFees sdk.Coin burn bool + mint bool } stakingTokenSupply := sdk.NewIntFromUint64(100000000000) @@ -45,6 +46,7 @@ func TestBeginBlocker(t *testing.T) { bondedRatio: sdk.NewDecWithPrec(1, 4), fees: sdk.NewCoins(sdk.NewCoin("stake", sdk.NewInt(109))), collectedFees: sdk.NewCoin("stake", sdk.NewInt(1000)), + mint: true, burn: false, }, expected: expected{ @@ -64,6 +66,7 @@ func TestBeginBlocker(t *testing.T) { bondedRatio: sdk.NewDecWithPrec(33, 2), fees: sdk.NewCoins(sdk.NewCoin("stake", sdk.NewInt(1045))), collectedFees: sdk.NewCoin("stake", sdk.NewInt(0)), + mint: true, burn: false, }, expected: expected{ @@ -76,25 +79,26 @@ func TestBeginBlocker(t *testing.T) { needed: 1045, }, }, - //{ - // name: "above staking threshold, feegrant has values", - // parameters: parameters{ - // bonded: stakingTokenSupply, - // bondedRatio: sdk.NewDecWithPrec(1, 4), - // fees: sdk.NewCoins(sdk.NewCoin("stake", sdk.NewInt(109))), - // collectedFees: sdk.NewCoin("stake", sdk.NewInt(10000)), - // burn: true, - // }, - // expected: expected{ - // annualProvisions: sdk.NewDecWithPrec(7000000000, 0), - // bondedRatio: sdk.NewDecWithPrec(1, 4), - // burnedAmount: 8891, - // collectedAmount: 10000, - // inflation: sdk.NewDecWithPrec(7, 2), - // minted: 0, - // needed: 1109, - // }, - //}, + { + name: "above staking threshold, feegrant has values", + parameters: parameters{ + bonded: stakingTokenSupply, + bondedRatio: sdk.NewDecWithPrec(1, 4), + fees: sdk.NewCoins(sdk.NewCoin("stake", sdk.NewInt(109))), + collectedFees: sdk.NewCoin("stake", sdk.NewInt(10000)), + mint: false, + burn: true, + }, + expected: expected{ + annualProvisions: sdk.NewDecWithPrec(7000000000, 0), + bondedRatio: sdk.NewDecWithPrec(1, 4), + burnedAmount: 8891, + collectedAmount: 10000, + inflation: sdk.NewDecWithPrec(7, 2), + minted: 0, + needed: 1109, + }, + }, } for _, tc := range tt { @@ -112,11 +116,13 @@ func TestBeginBlocker(t *testing.T) { stakingKeeper.EXPECT().TotalBondedTokens(ctx).Return(tc.parameters.bonded) stakingKeeper.EXPECT().BondedRatio(ctx).Return(tc.parameters.bondedRatio) - - bankKeeper.EXPECT().MintCoins(ctx, minttypes.ModuleName, tc.parameters.fees).Return(nil) - bankKeeper.EXPECT().SendCoinsFromModuleToModule(ctx, types.ModuleName, authtypes.FeeCollectorName, tc.parameters.fees).Return(nil) bankKeeper.EXPECT().GetBalance(ctx, mocks.moduleAccount.GetAddress(), "stake").Return(tc.parameters.collectedFees) + if tc.parameters.mint { + bankKeeper.EXPECT().MintCoins(ctx, minttypes.ModuleName, tc.parameters.fees).Return(nil) + bankKeeper.EXPECT().SendCoinsFromModuleToModule(ctx, types.ModuleName, authtypes.FeeCollectorName, tc.parameters.fees).Return(nil) + } + if tc.parameters.burn { c := sdk.NewCoin("stake", sdk.NewInt(int64(tc.expected.needed))) bankKeeper.EXPECT().BurnCoins(ctx, authtypes.FeeCollectorName, sdk.NewCoins(tc.parameters.collectedFees.Sub(c))).Return(nil) From 09151c0ffb453380e68d0e734f7e2694081c5d28 Mon Sep 17 00:00:00 2001 From: Eduardo Diaz Date: Sat, 3 Jun 2023 14:36:11 -0400 Subject: [PATCH 072/501] add globalfee module WIP --- app/ante.go | 6 + app/app.go | 3 + x/globalfee/README.md | 5 + x/globalfee/alias.go | 9 + x/globalfee/ante/antetest/fee_test.go | 814 ++++++++++++++++++ x/globalfee/ante/antetest/fee_test_setup.go | 125 +++ x/globalfee/ante/fee.go | 276 ++++++ x/globalfee/ante/fee_utils.go | 113 +++ x/globalfee/ante/fee_utils_test.go | 298 +++++++ x/globalfee/client/cli/query.go | 47 + x/globalfee/genesis_test.go | 161 ++++ x/globalfee/keeper/migrations.go | 22 + x/globalfee/migrations/v2/migration.go | 37 + .../migrations/v2/v2_test/migration_test.go | 107 +++ x/globalfee/module.go | 146 ++++ x/globalfee/querier.go | 52 ++ x/globalfee/querier_test.go | 56 ++ x/globalfee/types/genesis.go | 40 + x/globalfee/types/genesis.pb.go | 622 +++++++++++++ x/globalfee/types/keys.go | 8 + x/globalfee/types/params.go | 154 ++++ x/globalfee/types/params_test.go | 156 ++++ x/globalfee/types/query.pb.go | 536 ++++++++++++ x/globalfee/types/query.pb.gw.go | 153 ++++ 24 files changed, 3946 insertions(+) create mode 100644 x/globalfee/README.md create mode 100644 x/globalfee/alias.go create mode 100644 x/globalfee/ante/antetest/fee_test.go create mode 100644 x/globalfee/ante/antetest/fee_test_setup.go create mode 100644 x/globalfee/ante/fee.go create mode 100644 x/globalfee/ante/fee_utils.go create mode 100644 x/globalfee/ante/fee_utils_test.go create mode 100644 x/globalfee/client/cli/query.go create mode 100644 x/globalfee/genesis_test.go create mode 100644 x/globalfee/keeper/migrations.go create mode 100644 x/globalfee/migrations/v2/migration.go create mode 100644 x/globalfee/migrations/v2/v2_test/migration_test.go create mode 100644 x/globalfee/module.go create mode 100644 x/globalfee/querier.go create mode 100644 x/globalfee/querier_test.go create mode 100644 x/globalfee/types/genesis.go create mode 100644 x/globalfee/types/genesis.pb.go create mode 100644 x/globalfee/types/keys.go create mode 100644 x/globalfee/types/params.go create mode 100644 x/globalfee/types/params_test.go create mode 100644 x/globalfee/types/query.pb.go create mode 100644 x/globalfee/types/query.pb.gw.go diff --git a/app/ante.go b/app/ante.go index e408372f..679e0a0d 100644 --- a/app/ante.go +++ b/app/ante.go @@ -6,6 +6,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/x/auth/ante" + paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" ibcante "github.com/cosmos/ibc-go/v7/modules/core/ante" "github.com/cosmos/ibc-go/v7/modules/core/keeper" @@ -21,6 +22,7 @@ type HandlerOptions struct { IBCKeeper *keeper.Keeper WasmConfig *wasmTypes.WasmConfig TXCounterStoreKey storetypes.StoreKey + GlobalFeeSubpsace paramtypes.Subspace } func NewAnteHandler(options HandlerOptions) (sdk.AnteHandler, error) { @@ -36,6 +38,9 @@ func NewAnteHandler(options HandlerOptions) (sdk.AnteHandler, error) { if options.WasmConfig == nil { return nil, errorsmod.Wrap(sdkerrors.ErrLogic, "wasm config is required for ante builder") } + if opts.GlobalFeeSubspace.Name() == "" { + return nil, sdkerrors.Wrap(sdkerrors.ErrNotFound, "globalfee param store is required for AnteHandler") + } if options.TXCounterStoreKey == nil { return nil, errorsmod.Wrap(sdkerrors.ErrLogic, "tx counter key is required for ante builder") } @@ -49,6 +54,7 @@ func NewAnteHandler(options HandlerOptions) (sdk.AnteHandler, error) { ante.NewTxTimeoutHeightDecorator(), ante.NewValidateMemoDecorator(options.AccountKeeper), ante.NewConsumeGasForTxSizeDecorator(options.AccountKeeper), + gaiafeeante.NewFeeDecorator(opts.GlobalFeeSubspace, opts.StakingSubspace), ante.NewDeductFeeDecorator(options.AccountKeeper, options.BankKeeper, options.FeegrantKeeper, options.TxFeeChecker), ante.NewSetPubKeyDecorator(options.AccountKeeper), // SetPubKeyDecorator must be called before all signature verification decorators ante.NewValidateSigCountDecorator(options.AccountKeeper), diff --git a/app/app.go b/app/app.go index 58ef5e23..825d89f2 100644 --- a/app/app.go +++ b/app/app.go @@ -129,6 +129,8 @@ import ( "github.com/burnt-labs/xion/x/xion" xionkeeper "github.com/burnt-labs/xion/x/xion/keeper" xiontypes "github.com/burnt-labs/xion/x/xion/types" + + "github.com/cosmos/gaia/v11/x/globalfee" ) const appName = "XionApp" @@ -877,6 +879,7 @@ func (app *WasmApp) setAnteHandler(txConfig client.TxConfig, wasmConfig wasmtype IBCKeeper: app.IBCKeeper, WasmConfig: &wasmConfig, TXCounterStoreKey: txCounterStoreKey, + GlobalFeeSubspace: app.GetSubspace(globalfee.ModuleName), }, ) if err != nil { diff --git a/x/globalfee/README.md b/x/globalfee/README.md new file mode 100644 index 00000000..746d5c14 --- /dev/null +++ b/x/globalfee/README.md @@ -0,0 +1,5 @@ +# Global fee module + +The Global fee module was supplied by the great folks at [TGrade](https://github.com/confio/tgrade) 👋, with minor modifications. All credits and big thanks go to the original authors. + +More information about Cosmoshub fee system please check [here](../../docs/modules/globalfee.md). diff --git a/x/globalfee/alias.go b/x/globalfee/alias.go new file mode 100644 index 00000000..e6ddaab8 --- /dev/null +++ b/x/globalfee/alias.go @@ -0,0 +1,9 @@ +package globalfee + +import ( + "github.com/burnt-labs/xion/x/globalfee/types" +) + +const ( + ModuleName = types.ModuleName +) diff --git a/x/globalfee/ante/antetest/fee_test.go b/x/globalfee/ante/antetest/fee_test.go new file mode 100644 index 00000000..60e57679 --- /dev/null +++ b/x/globalfee/ante/antetest/fee_test.go @@ -0,0 +1,814 @@ +package antetest + +import ( + "testing" + + cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" + "github.com/cosmos/cosmos-sdk/testutil/testdata" + sdk "github.com/cosmos/cosmos-sdk/types" + stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" + ibcclienttypes "github.com/cosmos/ibc-go/v4/modules/core/02-client/types" + ibcchanneltypes "github.com/cosmos/ibc-go/v4/modules/core/04-channel/types" + "github.com/stretchr/testify/suite" + + xionfeeante "github.com/burnt-labs/xion/x/globalfee/ante" +) + +var testGasLimit uint64 = 200_000 + +func TestIntegrationTestSuite(t *testing.T) { + suite.Run(t, new(IntegrationTestSuite)) +} + +func (s *IntegrationTestSuite) TestGetDefaultGlobalFees() { + // set globalfees and min gas price + feeDecorator, _ := s.SetupTestGlobalFeeStoreAndMinGasPrice([]sdk.DecCoin{}, &globfeetypes.Params{}) + defaultGlobalFees, err := feeDecorator.DefaultZeroGlobalFee(s.ctx) + s.Require().NoError(err) + s.Require().Greater(len(defaultGlobalFees), 0) + + if defaultGlobalFees[0].Denom != testBondDenom { + s.T().Fatalf("bond denom: %s, default global fee denom: %s", testBondDenom, defaultGlobalFees[0].Denom) + } +} + +// Test global fees and min_gas_price with bypass msg types. +// Please note even globalfee=0, min_gas_price=0, we do not let fee=0random_denom pass. +// Paid fees are already sanitized by removing zero coins(through feeFlag parsing), so use sdk.NewCoins() to create it. +func (s *IntegrationTestSuite) TestGlobalFeeMinimumGasFeeAnteHandler() { + s.txBuilder = s.clientCtx.TxConfig.NewTxBuilder() + priv1, _, addr1 := testdata.KeyTestPubAddr() + privs, accNums, accSeqs := []cryptotypes.PrivKey{priv1}, []uint64{0}, []uint64{0} + + denominator := int64(100000) + high := sdk.NewDec(400).Quo(sdk.NewDec(denominator)) // 0.004 + med := sdk.NewDec(200).Quo(sdk.NewDec(denominator)) // 0.002 + low := sdk.NewDec(100).Quo(sdk.NewDec(denominator)) // 0.001 + + highFeeAmt := sdk.NewInt(high.MulInt64(int64(2) * denominator).RoundInt64()) + medFeeAmt := sdk.NewInt(med.MulInt64(int64(2) * denominator).RoundInt64()) + lowFeeAmt := sdk.NewInt(low.MulInt64(int64(2) * denominator).RoundInt64()) + + globalfeeParamsEmpty := []sdk.DecCoin{} + minGasPriceEmpty := []sdk.DecCoin{} + globalfeeParams0 := []sdk.DecCoin{ + sdk.NewDecCoinFromDec("photon", sdk.NewDec(0)), + sdk.NewDecCoinFromDec("uatom", sdk.NewDec(0)), + } + globalfeeParamsContain0 := []sdk.DecCoin{ + sdk.NewDecCoinFromDec("photon", med), + sdk.NewDecCoinFromDec("uatom", sdk.NewDec(0)), + } + minGasPrice0 := []sdk.DecCoin{ + sdk.NewDecCoinFromDec("stake", sdk.NewDec(0)), + sdk.NewDecCoinFromDec("uatom", sdk.NewDec(0)), + } + globalfeeParamsHigh := []sdk.DecCoin{ + sdk.NewDecCoinFromDec("uatom", high), + } + minGasPrice := []sdk.DecCoin{ + sdk.NewDecCoinFromDec("uatom", med), + sdk.NewDecCoinFromDec("stake", med), + } + globalfeeParamsLow := []sdk.DecCoin{ + sdk.NewDecCoinFromDec("uatom", low), + } + // global fee must be sorted in denom + globalfeeParamsNewDenom := []sdk.DecCoin{ + sdk.NewDecCoinFromDec("photon", high), + sdk.NewDecCoinFromDec("quark", high), + } + + testCases := map[string]struct { + minGasPrice []sdk.DecCoin + globalFee []sdk.DecCoin + gasPrice sdk.Coins + gasLimit sdk.Gas + txMsg sdk.Msg + txCheck bool + expErr bool + }{ + // test fees + // empty min_gas_price or empty global fee + "empty min_gas_price, nonempty global fee, fee higher/equal than global_fee": { + minGasPrice: minGasPriceEmpty, + globalFee: globalfeeParamsHigh, + // sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()) + gasPrice: sdk.NewCoins(sdk.NewCoin("uatom", highFeeAmt)), + gasLimit: testGasLimit, + txMsg: testdata.NewTestMsg(addr1), + txCheck: true, + expErr: false, + }, + "empty min_gas_price, nonempty global fee, fee lower than global_fee": { + minGasPrice: minGasPriceEmpty, + globalFee: globalfeeParamsHigh, + gasPrice: sdk.NewCoins(sdk.NewCoin("uatom", lowFeeAmt)), + gasLimit: testGasLimit, + txMsg: testdata.NewTestMsg(addr1), + txCheck: true, + expErr: true, + }, + "nonempty min_gas_price with defaultGlobalFee denom, empty global fee, fee higher/equal than min_gas_price": { + minGasPrice: minGasPrice, + globalFee: globalfeeParamsEmpty, // default 0uatom + gasPrice: sdk.NewCoins(sdk.NewCoin("uatom", medFeeAmt)), + gasLimit: testGasLimit, + txMsg: testdata.NewTestMsg(addr1), + txCheck: true, + expErr: false, + }, + "nonempty min_gas_price with defaultGlobalFee denom, empty global fee, fee lower than min_gas_price": { + minGasPrice: minGasPrice, + globalFee: globalfeeParamsEmpty, + gasPrice: sdk.NewCoins(sdk.NewCoin("uatom", lowFeeAmt)), + gasLimit: testGasLimit, + txMsg: testdata.NewTestMsg(addr1), + txCheck: true, + expErr: true, + }, + "empty min_gas_price, empty global fee, empty fee": { + minGasPrice: minGasPriceEmpty, + globalFee: globalfeeParamsEmpty, + gasPrice: sdk.Coins{}, + gasLimit: testGasLimit, + txMsg: testdata.NewTestMsg(addr1), + txCheck: true, + expErr: false, + }, + // zero min_gas_price or zero global fee + "zero min_gas_price, zero global fee, zero fee in global fee denom": { + minGasPrice: minGasPrice0, + globalFee: globalfeeParams0, + gasPrice: sdk.NewCoins(sdk.NewCoin("uatom", sdk.ZeroInt()), sdk.NewCoin("photon", sdk.ZeroInt())), + gasLimit: testGasLimit, + txMsg: testdata.NewTestMsg(addr1), + txCheck: true, + expErr: false, + }, + "zero min_gas_price, zero global fee, empty fee": { + minGasPrice: minGasPrice0, + globalFee: globalfeeParams0, + gasPrice: sdk.Coins{}, + gasLimit: testGasLimit, + txMsg: testdata.NewTestMsg(addr1), + txCheck: true, + expErr: false, + }, + // zero global fee + "zero min_gas_price, zero global fee, zero fee not in globalfee denom": { + minGasPrice: minGasPrice0, + globalFee: globalfeeParams0, + gasPrice: sdk.NewCoins(sdk.NewCoin("stake", sdk.ZeroInt())), + gasLimit: testGasLimit, + txMsg: testdata.NewTestMsg(addr1), + txCheck: true, + expErr: false, + }, + "zero min_gas_price, zero global fee, zero fees one in, one not in globalfee denom": { + minGasPrice: minGasPrice0, + globalFee: globalfeeParams0, + gasPrice: sdk.NewCoins( + sdk.NewCoin("stake", sdk.ZeroInt()), + sdk.NewCoin("uatom", sdk.ZeroInt())), + gasLimit: testGasLimit, + txMsg: testdata.NewTestMsg(addr1), + txCheck: true, + expErr: false, + }, + // zero min_gas_price and empty global fee + "zero min_gas_price, empty global fee, zero fee in min_gas_price_denom": { + minGasPrice: minGasPrice0, + globalFee: globalfeeParamsEmpty, + gasPrice: sdk.NewCoins(sdk.NewCoin("stake", sdk.ZeroInt())), + gasLimit: testGasLimit, + txMsg: testdata.NewTestMsg(addr1), + txCheck: true, + expErr: false, + }, + "zero min_gas_price, empty global fee, zero fee not in min_gas_price denom, not in defaultZeroGlobalFee denom": { + minGasPrice: minGasPrice0, + globalFee: globalfeeParamsEmpty, + gasPrice: sdk.NewCoins(sdk.NewCoin("quark", sdk.ZeroInt())), + gasLimit: testGasLimit, + txMsg: testdata.NewTestMsg(addr1), + txCheck: true, + expErr: false, + }, + "zero min_gas_price, empty global fee, zero fee in defaultZeroGlobalFee denom": { + minGasPrice: minGasPrice0, + globalFee: globalfeeParamsEmpty, + gasPrice: sdk.NewCoins(sdk.NewCoin("uatom", sdk.ZeroInt())), + gasLimit: testGasLimit, + txMsg: testdata.NewTestMsg(addr1), + txCheck: true, + expErr: false, + }, + "zero min_gas_price, empty global fee, nonzero fee in defaultZeroGlobalFee denom": { + minGasPrice: minGasPrice0, + globalFee: globalfeeParamsEmpty, + gasPrice: sdk.NewCoins(sdk.NewCoin("uatom", lowFeeAmt)), + gasLimit: testGasLimit, + txMsg: testdata.NewTestMsg(addr1), + txCheck: true, + expErr: false, + }, + "zero min_gas_price, empty global fee, nonzero fee not in defaultZeroGlobalFee denom": { + minGasPrice: minGasPrice0, + globalFee: globalfeeParamsEmpty, + gasPrice: sdk.NewCoins(sdk.NewCoin("quark", highFeeAmt)), + gasLimit: testGasLimit, + txMsg: testdata.NewTestMsg(addr1), + txCheck: true, + expErr: true, + }, + // empty min_gas_price, zero global fee + "empty min_gas_price, zero global fee, zero fee in global fee denom": { + minGasPrice: minGasPriceEmpty, + globalFee: globalfeeParams0, + gasPrice: sdk.NewCoins(sdk.NewCoin("uatom", sdk.ZeroInt())), + gasLimit: testGasLimit, + txMsg: testdata.NewTestMsg(addr1), + txCheck: true, + expErr: false, + }, + "empty min_gas_price, zero global fee, zero fee not in global fee denom": { + minGasPrice: minGasPriceEmpty, + globalFee: globalfeeParams0, + gasPrice: sdk.NewCoins(sdk.NewCoin("stake", sdk.ZeroInt())), + gasLimit: testGasLimit, + txMsg: testdata.NewTestMsg(addr1), + txCheck: true, + expErr: false, + }, + "empty min_gas_price, zero global fee, nonzero fee in global fee denom": { + minGasPrice: minGasPriceEmpty, + globalFee: globalfeeParams0, + gasPrice: sdk.NewCoins(sdk.NewCoin("uatom", lowFeeAmt)), + gasLimit: testGasLimit, + txMsg: testdata.NewTestMsg(addr1), + txCheck: true, + expErr: false, + }, + "empty min_gas_price, zero global fee, nonzero fee not in global fee denom": { + minGasPrice: minGasPriceEmpty, + globalFee: globalfeeParams0, + gasPrice: sdk.NewCoins(sdk.NewCoin("stake", highFeeAmt)), + gasLimit: testGasLimit, + txMsg: testdata.NewTestMsg(addr1), + txCheck: true, + expErr: true, + }, + // zero min_gas_price, nonzero global fee + "zero min_gas_price, nonzero global fee, fee is higher than global fee": { + minGasPrice: minGasPrice0, + globalFee: globalfeeParamsLow, + gasPrice: sdk.NewCoins(sdk.NewCoin("uatom", lowFeeAmt)), + gasLimit: testGasLimit, + txMsg: testdata.NewTestMsg(addr1), + txCheck: true, + expErr: false, + }, + // nonzero min_gas_price, nonzero global fee + "fee higher/equal than globalfee and min_gas_price": { + minGasPrice: minGasPrice, + globalFee: globalfeeParamsHigh, + gasPrice: sdk.NewCoins(sdk.NewCoin("uatom", highFeeAmt)), + gasLimit: testGasLimit, + txMsg: testdata.NewTestMsg(addr1), + txCheck: true, + expErr: false, + }, + "fee lower than globalfee and min_gas_price": { + minGasPrice: minGasPrice, + globalFee: globalfeeParamsHigh, + gasPrice: sdk.NewCoins(sdk.NewCoin("uatom", lowFeeAmt)), + gasLimit: testGasLimit, + txMsg: testdata.NewTestMsg(addr1), + txCheck: true, + expErr: true, + }, + "fee with one denom higher/equal, one denom lower than globalfee and min_gas_price": { + minGasPrice: minGasPrice, + globalFee: globalfeeParamsNewDenom, + gasPrice: sdk.NewCoins( + sdk.NewCoin("photon", lowFeeAmt), + sdk.NewCoin("quark", highFeeAmt)), + gasLimit: testGasLimit, + txMsg: testdata.NewTestMsg(addr1), + txCheck: true, + expErr: false, + }, + "globalfee > min_gas_price, fee higher/equal than min_gas_price, lower than globalfee": { + minGasPrice: minGasPrice, + globalFee: globalfeeParamsHigh, + gasPrice: sdk.NewCoins(sdk.NewCoin("uatom", medFeeAmt)), + gasLimit: testGasLimit, + txMsg: testdata.NewTestMsg(addr1), + txCheck: true, + expErr: true, + }, + "globalfee < min_gas_price, fee higher/equal than globalfee and lower than min_gas_price": { + minGasPrice: minGasPrice, + globalFee: globalfeeParamsLow, + gasPrice: sdk.NewCoins(sdk.NewCoin("uatom", lowFeeAmt)), + gasLimit: testGasLimit, + txMsg: testdata.NewTestMsg(addr1), + txCheck: true, + expErr: true, + }, + // nonzero min_gas_price, zero global fee + "nonzero min_gas_price, zero global fee, fee is in global fee denom and lower than min_gas_price": { + minGasPrice: minGasPrice, + globalFee: globalfeeParams0, + gasPrice: sdk.NewCoins(sdk.NewCoin("uatom", lowFeeAmt)), + gasLimit: testGasLimit, + txMsg: testdata.NewTestMsg(addr1), + txCheck: true, + expErr: true, + }, + "nonzero min_gas_price, zero global fee, fee is in global fee denom and higher/equal than min_gas_price": { + minGasPrice: minGasPrice, + globalFee: globalfeeParams0, + gasPrice: sdk.NewCoins(sdk.NewCoin("uatom", medFeeAmt)), + gasLimit: testGasLimit, + txMsg: testdata.NewTestMsg(addr1), + txCheck: true, + expErr: false, + }, + "nonzero min_gas_price, zero global fee, fee is in min_gas_price denom which is not in global fee default, but higher/equal than min_gas_price": { + minGasPrice: minGasPrice, + globalFee: globalfeeParams0, + gasPrice: sdk.NewCoins(sdk.NewCoin("stake", highFeeAmt)), + gasLimit: testGasLimit, + txMsg: testdata.NewTestMsg(addr1), + txCheck: true, + expErr: true, + }, + // fee denom tests + "min_gas_price denom is not subset of global fee denom , fee paying in global fee denom": { + minGasPrice: minGasPrice, + globalFee: globalfeeParamsNewDenom, + gasPrice: sdk.NewCoins(sdk.NewCoin("photon", highFeeAmt)), + gasLimit: testGasLimit, + txMsg: testdata.NewTestMsg(addr1), + txCheck: true, + expErr: false, + }, + "min_gas_price denom is not subset of global fee denom, fee paying in min_gas_price denom": { + minGasPrice: minGasPrice, + globalFee: globalfeeParamsNewDenom, + gasPrice: sdk.NewCoins(sdk.NewCoin("stake", highFeeAmt)), + gasLimit: testGasLimit, + txMsg: testdata.NewTestMsg(addr1), + txCheck: true, + expErr: true, + }, + "fees contain denom not in globalfee": { + minGasPrice: minGasPrice, + globalFee: globalfeeParamsLow, + gasPrice: sdk.NewCoins( + sdk.NewCoin("uatom", highFeeAmt), + sdk.NewCoin("quark", highFeeAmt)), + gasLimit: testGasLimit, + txMsg: testdata.NewTestMsg(addr1), + txCheck: true, + expErr: true, + }, + "fees contain denom not in globalfee with zero amount": { + minGasPrice: minGasPrice, + globalFee: globalfeeParamsLow, + gasPrice: sdk.NewCoins(sdk.NewCoin("uatom", highFeeAmt), + sdk.NewCoin("quark", sdk.ZeroInt())), + gasLimit: testGasLimit, + txMsg: testdata.NewTestMsg(addr1), + txCheck: true, + expErr: false, + }, + // cases from https://github.com/cosmos/gaia/pull/1570#issuecomment-1190524402 + // note: this is kind of a silly scenario but technically correct + // if there is a zero coin in the globalfee, the user could pay 0fees + // if the user includes any fee at all in the non-zero denom, it must be higher than that non-zero fee + // unlikely we will ever see zero and non-zero together but technically possible + "globalfee contains zero coin and non-zero coin, fee is lower than the nonzero coin": { + minGasPrice: minGasPrice0, + globalFee: globalfeeParamsContain0, + gasPrice: sdk.NewCoins(sdk.NewCoin("photon", lowFeeAmt)), + gasLimit: testGasLimit, + txMsg: testdata.NewTestMsg(addr1), + txCheck: true, + expErr: true, + }, + "globalfee contains zero coin, fee contains zero coins of the same denom and a lower fee of the other denom in global fee": { + minGasPrice: minGasPrice0, + globalFee: globalfeeParamsContain0, + gasPrice: sdk.NewCoins( + sdk.NewCoin("photon", lowFeeAmt), + sdk.NewCoin("uatom", sdk.ZeroInt())), + gasLimit: testGasLimit, + txMsg: testdata.NewTestMsg(addr1), + txCheck: true, + expErr: true, + }, + "globalfee contains zero coin, fee is empty": { + minGasPrice: minGasPrice0, + globalFee: globalfeeParamsContain0, + gasPrice: sdk.Coins{}, + gasLimit: testGasLimit, + txMsg: testdata.NewTestMsg(addr1), + txCheck: true, + expErr: false, + }, + "globalfee contains zero coin, fee contains lower fee of zero coins's denom, globalfee also contains nonzero coin,fee contains higher fee of nonzero coins's denom, ": { + minGasPrice: minGasPrice0, + globalFee: globalfeeParamsContain0, + gasPrice: sdk.NewCoins( + sdk.NewCoin("photon", lowFeeAmt), + sdk.NewCoin("uatom", highFeeAmt)), + gasLimit: testGasLimit, + txMsg: testdata.NewTestMsg(addr1), + txCheck: true, + expErr: false, + }, + "globalfee contains zero coin, fee is all zero coins but in global fee's denom": { + minGasPrice: minGasPrice0, + globalFee: globalfeeParamsContain0, + gasPrice: sdk.NewCoins( + sdk.NewCoin("photon", sdk.ZeroInt()), + sdk.NewCoin("uatom", sdk.ZeroInt()), + ), + gasLimit: testGasLimit, + txMsg: testdata.NewTestMsg(addr1), + txCheck: true, + expErr: false, + }, + "globalfee contains zero coin, fee is higher than the nonzero coin": { + minGasPrice: minGasPrice0, + globalFee: globalfeeParamsContain0, + gasPrice: sdk.NewCoins(sdk.NewCoin("photon", highFeeAmt)), + gasLimit: testGasLimit, + txMsg: testdata.NewTestMsg(addr1), + txCheck: true, + expErr: false, + }, + "bypass msg type: ibc.core.channel.v1.MsgRecvPacket": { + minGasPrice: minGasPrice, + globalFee: globalfeeParamsLow, + gasPrice: sdk.NewCoins(sdk.NewCoin("uatom", sdk.ZeroInt())), + gasLimit: testGasLimit, + txMsg: ibcchanneltypes.NewMsgRecvPacket( + ibcchanneltypes.Packet{}, nil, ibcclienttypes.Height{}, ""), + txCheck: true, + expErr: false, + }, + "bypass msg type: ibc.core.channel.v1.MsgTimeout": { + minGasPrice: minGasPrice, + globalFee: globalfeeParamsLow, + gasPrice: sdk.NewCoins(sdk.NewCoin("uatom", sdk.ZeroInt())), + gasLimit: testGasLimit, + txMsg: ibcchanneltypes.NewMsgTimeout( + // todo check here + ibcchanneltypes.Packet{}, 1, nil, ibcclienttypes.Height{}, ""), + txCheck: true, + expErr: false, + }, + "bypass msg type: ibc.core.channel.v1.MsgTimeoutOnClose": { + minGasPrice: minGasPrice, + globalFee: globalfeeParamsLow, + gasPrice: sdk.NewCoins(sdk.NewCoin("uatom", sdk.ZeroInt())), + gasLimit: testGasLimit, + txMsg: ibcchanneltypes.NewMsgTimeout( + ibcchanneltypes.Packet{}, 2, nil, ibcclienttypes.Height{}, ""), + txCheck: true, + expErr: false, + }, + "bypass msg gas usage exceeds maxTotalBypassMinFeeMsgGasUsage": { + minGasPrice: minGasPrice, + globalFee: globalfeeParamsLow, + gasPrice: sdk.NewCoins(sdk.NewCoin("uatom", sdk.ZeroInt())), + gasLimit: 2 * globfeetypes.DefaultmaxTotalBypassMinFeeMsgGasUsage, + txMsg: ibcchanneltypes.NewMsgTimeout( + ibcchanneltypes.Packet{}, 2, nil, ibcclienttypes.Height{}, ""), + txCheck: true, + expErr: true, + }, + "bypass msg gas usage equals to maxTotalBypassMinFeeMsgGasUsage": { + minGasPrice: minGasPrice, + globalFee: globalfeeParamsLow, + gasPrice: sdk.NewCoins(sdk.NewCoin("uatom", sdk.ZeroInt())), + gasLimit: globfeetypes.DefaultmaxTotalBypassMinFeeMsgGasUsage, + txMsg: ibcchanneltypes.NewMsgTimeout( + ibcchanneltypes.Packet{}, 3, nil, ibcclienttypes.Height{}, ""), + txCheck: true, + expErr: false, + }, + "msg type ibc, zero fee not in globalfee denom": { + minGasPrice: minGasPrice, + globalFee: globalfeeParamsLow, + gasPrice: sdk.NewCoins(sdk.NewCoin("photon", sdk.ZeroInt())), + gasLimit: testGasLimit, + txMsg: ibcchanneltypes.NewMsgRecvPacket( + ibcchanneltypes.Packet{}, nil, ibcclienttypes.Height{}, ""), + txCheck: true, + expErr: false, + }, + "msg type ibc, nonzero fee in globalfee denom": { + minGasPrice: minGasPrice, + globalFee: globalfeeParamsLow, + gasPrice: sdk.NewCoins(sdk.NewCoin("uatom", highFeeAmt)), + gasLimit: testGasLimit, + txMsg: ibcchanneltypes.NewMsgRecvPacket( + ibcchanneltypes.Packet{}, nil, ibcclienttypes.Height{}, ""), + txCheck: true, + expErr: false, + }, + "msg type ibc, nonzero fee not in globalfee denom": { + minGasPrice: minGasPrice, + globalFee: globalfeeParamsLow, + gasPrice: sdk.NewCoins(sdk.NewCoin("photon", highFeeAmt)), + gasLimit: testGasLimit, + txMsg: ibcchanneltypes.NewMsgRecvPacket( + ibcchanneltypes.Packet{}, nil, ibcclienttypes.Height{}, ""), + txCheck: true, + expErr: true, + }, + "msg type ibc, empty fee": { + minGasPrice: minGasPrice, + globalFee: globalfeeParamsLow, + gasPrice: sdk.Coins{}, + gasLimit: testGasLimit, + txMsg: ibcchanneltypes.NewMsgRecvPacket( + ibcchanneltypes.Packet{}, nil, ibcclienttypes.Height{}, ""), + txCheck: true, + expErr: false, + }, + "msg type non-ibc, nonzero fee in globalfee denom": { + minGasPrice: minGasPrice, + globalFee: globalfeeParamsLow, + gasPrice: sdk.NewCoins(sdk.NewCoin("uatom", highFeeAmt)), + gasLimit: testGasLimit, + txMsg: testdata.NewTestMsg(addr1), + txCheck: true, + expErr: false, + }, + "msg type non-ibc, empty fee": { + minGasPrice: minGasPrice, + globalFee: globalfeeParamsLow, + gasPrice: sdk.Coins{}, + gasLimit: testGasLimit, + txMsg: testdata.NewTestMsg(addr1), + txCheck: true, + expErr: true, + }, + "msg type non-ibc, nonzero fee not in globalfee denom": { + minGasPrice: minGasPrice, + globalFee: globalfeeParamsLow, + gasPrice: sdk.NewCoins(sdk.NewCoin("photon", highFeeAmt)), + gasLimit: testGasLimit, + txMsg: testdata.NewTestMsg(addr1), + txCheck: true, + expErr: true, + }, + "disable checkTx: min_gas_price is medium, global fee is low, tx fee is low": { + minGasPrice: minGasPrice, + globalFee: globalfeeParamsLow, + gasPrice: sdk.NewCoins(sdk.NewCoin("uatom", lowFeeAmt)), + gasLimit: testGasLimit, + txMsg: testdata.NewTestMsg(addr1), + txCheck: false, + expErr: false, + }, + "disable checkTx: min_gas_price is medium, global fee is low, tx is zero": { + minGasPrice: minGasPrice, + globalFee: globalfeeParamsLow, + gasPrice: sdk.NewCoins(sdk.NewCoin("uatom", sdk.ZeroInt())), + gasLimit: testGasLimit, + txMsg: testdata.NewTestMsg(addr1), + txCheck: false, + expErr: true, + }, + "disable checkTx: min_gas_price is low, global fee is low, tx fee's denom is not in global fees denoms set": { + minGasPrice: minGasPrice, + globalFee: globalfeeParamsLow, + gasPrice: sdk.NewCoins(sdk.NewCoin("quark", sdk.ZeroInt())), + gasLimit: testGasLimit, + txMsg: testdata.NewTestMsg(addr1), + txCheck: false, + expErr: true, + }, + } + + globalfeeParams := &globfeetypes.Params{ + BypassMinFeeMsgTypes: globfeetypes.DefaultBypassMinFeeMsgTypes, + MaxTotalBypassMinFeeMsgGasUsage: globfeetypes.DefaultmaxTotalBypassMinFeeMsgGasUsage, + } + + for name, tc := range testCases { + s.Run(name, func() { + // set globalfees and min gas price + globalfeeParams.MinimumGasPrices = tc.globalFee + _, antehandler := s.SetupTestGlobalFeeStoreAndMinGasPrice(tc.minGasPrice, globalfeeParams) + + // set fee decorator to ante handler + + s.Require().NoError(s.txBuilder.SetMsgs(tc.txMsg)) + s.txBuilder.SetFeeAmount(tc.gasPrice) + s.txBuilder.SetGasLimit(tc.gasLimit) + tx, err := s.CreateTestTx(privs, accNums, accSeqs, s.ctx.ChainID()) + s.Require().NoError(err) + + s.ctx = s.ctx.WithIsCheckTx(tc.txCheck) + _, err = antehandler(s.ctx, tx, false) + if !tc.expErr { + s.Require().NoError(err) + } else { + s.Require().Error(err) + } + }) + } +} + +// Test how the operator fees are determined using various min gas prices. +// +// Note that in a real Gaia deployment all zero coins can be removed from minGasPrice. +// This sanitizing happens when the minGasPrice is set into the context. +// (see baseapp.SetMinGasPrices in gaia/cmd/root.go line 221) +func (s *IntegrationTestSuite) TestGetMinGasPrice() { + expCoins := sdk.Coins{ + sdk.NewCoin("photon", sdk.NewInt(2000)), + sdk.NewCoin("uatom", sdk.NewInt(3000)), + } + + testCases := []struct { + name string + minGasPrice []sdk.DecCoin + feeTxGasLimit uint64 + expCoins sdk.Coins + }{ + { + "empty min gas price should return empty coins", + []sdk.DecCoin{}, + uint64(1000), + sdk.Coins{}, + }, + { + "zero coins min gas price should return empty coins", + []sdk.DecCoin{ + sdk.NewDecCoinFromDec("stake", sdk.NewDec(0)), + sdk.NewDecCoinFromDec("uatom", sdk.NewDec(0)), + }, + uint64(1000), + sdk.Coins{}, + }, + { + "zero coins, non-zero coins mix should return zero coin and non-zero coins", + []sdk.DecCoin{ + sdk.NewDecCoinFromDec("stake", sdk.NewDec(0)), + sdk.NewDecCoinFromDec("uatom", sdk.NewDec(1)), + }, + uint64(1000), + sdk.Coins{ + sdk.NewCoin("stake", sdk.NewInt(0)), + sdk.NewCoin("uatom", sdk.NewInt(1000)), + }, + }, + + { + "unsorted min gas price should return sorted coins", + []sdk.DecCoin{ + sdk.NewDecCoinFromDec("uatom", sdk.NewDec(3)), + sdk.NewDecCoinFromDec("photon", sdk.NewDec(2)), + }, + uint64(1000), + expCoins, + }, + { + "sorted min gas price should return same conins", + []sdk.DecCoin{ + sdk.NewDecCoinFromDec("photon", sdk.NewDec(2)), + sdk.NewDecCoinFromDec("uatom", sdk.NewDec(3)), + }, + uint64(1000), + expCoins, + }, + } + + for _, tc := range testCases { + s.Run(tc.name, func() { + s.SetupTestGlobalFeeStoreAndMinGasPrice(tc.minGasPrice, &globfeetypes.Params{}) + + fees := xionfeeante.GetMinGasPrice(s.ctx, int64(tc.feeTxGasLimit)) + s.Require().True(tc.expCoins.Sort().IsEqual(fees)) + }) + } +} + +func (s *IntegrationTestSuite) TestContainsOnlyBypassMinFeeMsgs() { + // set globalfees params and min gas price + globalfeeParams := &globfeetypes.Params{ + BypassMinFeeMsgTypes: globfeetypes.DefaultBypassMinFeeMsgTypes, + MaxTotalBypassMinFeeMsgGasUsage: globfeetypes.DefaultmaxTotalBypassMinFeeMsgGasUsage, + } + feeDecorator, _ := s.SetupTestGlobalFeeStoreAndMinGasPrice([]sdk.DecCoin{}, globalfeeParams) + testCases := []struct { + name string + msgs []sdk.Msg + expPass bool + }{ + { + "expect empty msgs to pass", + []sdk.Msg{}, + true, + }, + { + "expect default bypass msg to pass", + []sdk.Msg{ + ibcchanneltypes.NewMsgRecvPacket(ibcchanneltypes.Packet{}, nil, ibcclienttypes.Height{}, ""), + ibcchanneltypes.NewMsgAcknowledgement(ibcchanneltypes.Packet{}, []byte{1}, []byte{1}, ibcclienttypes.Height{}, ""), + }, + true, + }, + { + "expect default bypass msgs to pass", + []sdk.Msg{ + ibcchanneltypes.NewMsgRecvPacket(ibcchanneltypes.Packet{}, nil, ibcclienttypes.Height{}, ""), + ibcchanneltypes.NewMsgAcknowledgement(ibcchanneltypes.Packet{}, []byte{1}, []byte{1}, ibcclienttypes.Height{}, ""), + }, + true, + }, + { + "msgs contain non-bypass msg - should not pass", + []sdk.Msg{ + ibcchanneltypes.NewMsgRecvPacket(ibcchanneltypes.Packet{}, nil, ibcclienttypes.Height{}, ""), + stakingtypes.NewMsgDelegate(sdk.AccAddress{}, sdk.ValAddress{}, sdk.Coin{}), + }, + false, + }, + { + "msgs contain only non-bypass msgs - should not pass", + []sdk.Msg{ + stakingtypes.NewMsgDelegate(sdk.AccAddress{}, sdk.ValAddress{}, sdk.Coin{}), + }, + false, + }, + } + + for _, tc := range testCases { + s.Run(tc.name, func() { + res := feeDecorator.ContainsOnlyBypassMinFeeMsgs(s.ctx, tc.msgs) + s.Require().True(tc.expPass == res) + }) + } +} + +func (s *IntegrationTestSuite) TestGetTxFeeRequired() { + // create global fee params + globalfeeParamsEmpty := &globfeetypes.Params{MinimumGasPrices: []sdk.DecCoin{}} + + // setup tests with default global fee i.e. "0uatom" and empty local min gas prices + feeDecorator, _ := s.SetupTestGlobalFeeStoreAndMinGasPrice([]sdk.DecCoin{}, globalfeeParamsEmpty) + + // set a subspace that doesn't have the stakingtypes.KeyBondDenom key registred + feeDecorator.StakingSubspace = s.app.GetSubspace(globfeetypes.ModuleName) + + // check that an error is returned when staking bond denom is empty + _, err := feeDecorator.GetTxFeeRequired(s.ctx, nil) + s.Require().Equal(err.Error(), "empty staking bond denomination") + + // set non-zero local min gas prices + localMinGasPrices := sdk.NewCoins(sdk.NewCoin("uatom", sdk.NewInt(1))) + + // setup tests with non-empty local min gas prices + feeDecorator, _ = s.SetupTestGlobalFeeStoreAndMinGasPrice( + sdk.NewDecCoinsFromCoins(localMinGasPrices...), + globalfeeParamsEmpty, + ) + + // mock tx data + s.txBuilder = s.clientCtx.TxConfig.NewTxBuilder() + priv1, _, addr1 := testdata.KeyTestPubAddr() + privs, accNums, accSeqs := []cryptotypes.PrivKey{priv1}, []uint64{0}, []uint64{0} + + s.Require().NoError(s.txBuilder.SetMsgs(testdata.NewTestMsg(addr1))) + s.txBuilder.SetFeeAmount(sdk.NewCoins(sdk.NewCoin("uatom", sdk.ZeroInt()))) + + s.txBuilder.SetGasLimit(uint64(1)) + tx, err := s.CreateTestTx(privs, accNums, accSeqs, s.ctx.ChainID()) + s.Require().NoError(err) + + // check that the required fees returned in CheckTx mode are equal to + // local min gas prices since they're greater than the default global fee values. + s.Require().True(s.ctx.IsCheckTx()) + res, err := feeDecorator.GetTxFeeRequired(s.ctx, tx) + s.Require().True(res.IsEqual(localMinGasPrices)) + s.Require().NoError(err) + + // check that the global fee is returned in DeliverTx mode. + globalFee, err := feeDecorator.GetGlobalFee(s.ctx, tx) + s.Require().NoError(err) + + ctx := s.ctx.WithIsCheckTx(false) + res, err = feeDecorator.GetTxFeeRequired(ctx, tx) + s.Require().NoError(err) + s.Require().True(res.IsEqual(globalFee)) +} diff --git a/x/globalfee/ante/antetest/fee_test_setup.go b/x/globalfee/ante/antetest/fee_test_setup.go new file mode 100644 index 00000000..80f80f42 --- /dev/null +++ b/x/globalfee/ante/antetest/fee_test_setup.go @@ -0,0 +1,125 @@ +package antetest + +import ( + "fmt" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/tx" + cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" + "github.com/cosmos/cosmos-sdk/testutil/testdata" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/tx/signing" + xauthsigning "github.com/cosmos/cosmos-sdk/x/auth/signing" + "github.com/cosmos/cosmos-sdk/x/params/types" + stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" + "github.com/stretchr/testify/suite" + tmrand "github.com/tendermint/tendermint/libs/rand" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + + xionfeeante "github.com/burnt-labs/xion/x/globalfee/ante" + + xionapp "github.com/burnt-labs/xion/app" + "github.com/burnt-labs/xion/x/globalfee" + + globfeetypes "github.com/burnt-labs/xion/x/globalfee/types" +) + +type IntegrationTestSuite struct { + suite.Suite + + app *xionapp.WasmApp + ctx sdk.Context + clientCtx client.Context + txBuilder client.TxBuilder +} + +var testBondDenom = "uatom" + +func (s *IntegrationTestSuite) SetupTest() { + app := xionapp.Setup(s.T()) + ctx := app.BaseApp.NewContext(false, tmproto.Header{ + ChainID: fmt.Sprintf("test-chain-%s", tmrand.Str(4)), + Height: 1, + }) + + encodingConfig := xionapp.MakeTestEncodingConfig() + encodingConfig.Amino.RegisterConcrete(&testdata.TestMsg{}, "testdata.TestMsg", nil) + testdata.RegisterInterfaces(encodingConfig.InterfaceRegistry) + + s.app = app + s.ctx = ctx + s.clientCtx = client.Context{}.WithTxConfig(encodingConfig.TxConfig) +} + +func (s *IntegrationTestSuite) SetupTestGlobalFeeStoreAndMinGasPrice(minGasPrice []sdk.DecCoin, globalFeeParams *globfeetypes.Params) (xionfeeante.FeeDecorator, sdk.AnteHandler) { + subspace := s.app.GetSubspace(globalfee.ModuleName) + subspace.SetParamSet(s.ctx, globalFeeParams) + s.ctx = s.ctx.WithMinGasPrices(minGasPrice).WithIsCheckTx(true) + + // set staking params + stakingParam := stakingtypes.DefaultParams() + stakingParam.BondDenom = testBondDenom + stakingSubspace := s.SetupTestStakingSubspace(stakingParam) + + // build fee decorator + feeDecorator := xionfeeante.NewFeeDecorator(subspace, stakingSubspace) + + // chain fee decorator to antehandler + antehandler := sdk.ChainAnteDecorators(feeDecorator) + + return feeDecorator, antehandler +} + +// SetupTestStakingSubspace sets uatom as bond denom for the fee tests. +func (s *IntegrationTestSuite) SetupTestStakingSubspace(params stakingtypes.Params) types.Subspace { + s.app.GetSubspace(stakingtypes.ModuleName).SetParamSet(s.ctx, ¶ms) + return s.app.GetSubspace(stakingtypes.ModuleName) +} + +func (s *IntegrationTestSuite) CreateTestTx(privs []cryptotypes.PrivKey, accNums []uint64, accSeqs []uint64, chainID string) (xauthsigning.Tx, error) { + var sigsV2 []signing.SignatureV2 + for i, priv := range privs { + sigV2 := signing.SignatureV2{ + PubKey: priv.PubKey(), + Data: &signing.SingleSignatureData{ + SignMode: s.clientCtx.TxConfig.SignModeHandler().DefaultMode(), + Signature: nil, + }, + Sequence: accSeqs[i], + } + + sigsV2 = append(sigsV2, sigV2) + } + + if err := s.txBuilder.SetSignatures(sigsV2...); err != nil { + return nil, err + } + + sigsV2 = []signing.SignatureV2{} + for i, priv := range privs { + signerData := xauthsigning.SignerData{ + ChainID: chainID, + AccountNumber: accNums[i], + Sequence: accSeqs[i], + } + sigV2, err := tx.SignWithPrivKey( + s.clientCtx.TxConfig.SignModeHandler().DefaultMode(), + signerData, + s.txBuilder, + priv, + s.clientCtx.TxConfig, + accSeqs[i], + ) + if err != nil { + return nil, err + } + + sigsV2 = append(sigsV2, sigV2) + } + + if err := s.txBuilder.SetSignatures(sigsV2...); err != nil { + return nil, err + } + + return s.txBuilder.GetTx(), nil +} diff --git a/x/globalfee/ante/fee.go b/x/globalfee/ante/fee.go new file mode 100644 index 00000000..499f486c --- /dev/null +++ b/x/globalfee/ante/fee.go @@ -0,0 +1,276 @@ +package ante + +import ( + "errors" + "fmt" + + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" + stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" + tmstrings "github.com/tendermint/tendermint/libs/strings" + + "github.com/burnt-labs/xion/x/globalfee" + "github.com/burnt-labs/xion/x/globalfee/types" +) + +// FeeWithBypassDecorator checks if the transaction's fee is at least as large +// as the local validator's minimum gasFee (defined in validator config) and global fee, and the fee denom should be in the global fees' denoms. +// +// If fee is too low, decorator returns error and tx is rejected from mempool. +// Note this only applies when ctx.CheckTx = true. If fee is high enough or not +// CheckTx, then call next AnteHandler. +// +// CONTRACT: Tx must implement FeeTx to use FeeDecorator +// If the tx msg type is one of the bypass msg types, the tx is valid even if the min fee is lower than normally required. +// If the bypass tx still carries fees, the fee denom should be the same as global fee required. + +var _ sdk.AnteDecorator = FeeDecorator{} + +type FeeDecorator struct { + GlobalMinFeeParamSource globalfee.ParamSource + StakingSubspace paramtypes.Subspace +} + +func NewFeeDecorator(globalfeeSubspace, stakingSubspace paramtypes.Subspace) FeeDecorator { + if !globalfeeSubspace.HasKeyTable() { + panic("global fee paramspace was not set up via module") + } + + if !stakingSubspace.HasKeyTable() { + panic("staking paramspace was not set up via module") + } + + return FeeDecorator{ + GlobalMinFeeParamSource: globalfeeSubspace, + StakingSubspace: stakingSubspace, + } +} + +// AnteHandle implements the AnteDecorator interface +func (mfd FeeDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler) (newCtx sdk.Context, err error) { + feeTx, ok := tx.(sdk.FeeTx) + if !ok { + return ctx, sdkerrors.Wrap(sdkerrors.ErrTxDecode, "Tx must implement the sdk.FeeTx interface") + } + + // Do not check minimum-gas-prices and global fees during simulations + if simulate { + return next(ctx, tx, simulate) + } + + // Get the required fees according to the CheckTx or DeliverTx modes + feeRequired, err := mfd.GetTxFeeRequired(ctx, feeTx) + if err != nil { + return ctx, err + } + + // reject the transaction early if the feeCoins have more denoms than the fee requirement + // feeRequired cannot be empty + if feeTx.GetFee().Len() > feeRequired.Len() { + return ctx, sdkerrors.Wrapf(sdkerrors.ErrInvalidCoins, "fee is not a subset of required fees; got %s, required: %s", feeTx.GetFee().String(), feeRequired.String()) + } + + // Sort fee tx's coins, zero coins in feeCoins are already removed + feeCoins := feeTx.GetFee().Sort() + gas := feeTx.GetGas() + msgs := feeTx.GetMsgs() + + // split feeRequired into zero and non-zero coins(nonZeroCoinFeesReq, zeroCoinFeesDenomReq), split feeCoins according to + // nonZeroCoinFeesReq, zeroCoinFeesDenomReq, + // so that feeCoins can be checked separately against them. + nonZeroCoinFeesReq, zeroCoinFeesDenomReq := getNonZeroFees(feeRequired) + + // feeCoinsNonZeroDenom contains non-zero denominations from the feeRequired + // feeCoinsNonZeroDenom is used to check if the fees meets the requirement imposed by nonZeroCoinFeesReq + // when feeCoins does not contain zero coins' denoms in feeRequired + feeCoinsNonZeroDenom, feeCoinsZeroDenom := splitCoinsByDenoms(feeCoins, zeroCoinFeesDenomReq) + + // Check that the fees are in expected denominations. + // according to splitCoinsByDenoms(), feeCoinsZeroDenom must be in denom subset of zeroCoinFeesDenomReq. + // check if feeCoinsNonZeroDenom is a subset of nonZeroCoinFeesReq. + // special case: if feeCoinsNonZeroDenom=[], DenomsSubsetOf returns true + // special case: if feeCoinsNonZeroDenom is not empty, but nonZeroCoinFeesReq empty, return false + if !feeCoinsNonZeroDenom.DenomsSubsetOf(nonZeroCoinFeesReq) { + return ctx, sdkerrors.Wrapf(sdkerrors.ErrInsufficientFee, "fee is not a subset of required fees; got %s, required: %s", feeCoins.String(), feeRequired.String()) + } + + // If the feeCoins pass the denoms check, check they are bypass-msg types. + // + // Bypass min fee requires: + // - the tx contains only message types that can bypass the minimum fee, + // see BypassMinFeeMsgTypes; + // - the total gas limit per message does not exceed MaxTotalBypassMinFeeMsgGasUsage, + // i.e., totalGas <= MaxTotalBypassMinFeeMsgGasUsage + // Otherwise, minimum fees and global fees are checked to prevent spam. + maxTotalBypassMinFeeMsgGasUsage := mfd.GetMaxTotalBypassMinFeeMsgGasUsage(ctx) + doesNotExceedMaxGasUsage := gas <= maxTotalBypassMinFeeMsgGasUsage + allBypassMsgs := mfd.ContainsOnlyBypassMinFeeMsgs(ctx, msgs) + allowedToBypassMinFee := allBypassMsgs && doesNotExceedMaxGasUsage + + if allowedToBypassMinFee { + return next(ctx, tx, simulate) + } + + // if the msg does not satisfy bypass condition and the feeCoins denoms are subset of feeRequired, + // check the feeCoins amount against feeRequired + // + // when feeCoins=[] + // special case: and there is zero coin in fee requirement, pass, + // otherwise, err + if len(feeCoins) == 0 { + if len(zeroCoinFeesDenomReq) != 0 { + return next(ctx, tx, simulate) + } + return ctx, sdkerrors.Wrapf(sdkerrors.ErrInsufficientFee, "insufficient fees; got: %s required: %s", feeCoins.String(), feeRequired.String()) + } + + // when feeCoins != [] + // special case: if TX has at least one of the zeroCoinFeesDenomReq, then it should pass + if len(feeCoinsZeroDenom) > 0 { + return next(ctx, tx, simulate) + } + + // After all the checks, the tx is confirmed: + // feeCoins denoms subset off feeRequired + // Not bypass + // feeCoins != [] + // Not contain zeroCoinFeesDenomReq's denoms + // + // check if the feeCoins's feeCoinsNonZeroDenom part has coins' amount higher/equal to nonZeroCoinFeesReq + if !feeCoinsNonZeroDenom.IsAnyGTE(nonZeroCoinFeesReq) { + errMsg := fmt.Sprintf("Insufficient fees; got: %s required: %s", feeCoins.String(), feeRequired.String()) + if allBypassMsgs && !doesNotExceedMaxGasUsage { + errMsg = fmt.Sprintf("Insufficient fees; bypass-min-fee-msg-types with gas consumption %v exceeds the maximum allowed gas value of %v.", gas, maxTotalBypassMinFeeMsgGasUsage) + } + + return ctx, sdkerrors.Wrap(sdkerrors.ErrInsufficientFee, errMsg) + } + + return next(ctx, tx, simulate) +} + +// GetTxFeeRequired returns the required fees for the given FeeTx. +// In case the FeeTx's mode is CheckTx, it returns the combined requirements +// of local min gas prices and global fees. Otherwise, in DeliverTx, it returns the global fee. +func (mfd FeeDecorator) GetTxFeeRequired(ctx sdk.Context, tx sdk.FeeTx) (sdk.Coins, error) { + // Get required global fee min gas prices + // Note that it should never be empty since its default value is set to coin={"StakingBondDenom", 0} + globalFees, err := mfd.GetGlobalFee(ctx, tx) + if err != nil { + return sdk.Coins{}, err + } + + // In DeliverTx, the global fee min gas prices are the only tx fee requirements. + if !ctx.IsCheckTx() { + return globalFees, nil + } + + // In CheckTx mode, the local and global fee min gas prices are combined + // to form the tx fee requirements + + // Get local minimum-gas-prices + localFees := GetMinGasPrice(ctx, int64(tx.GetGas())) + + // Return combined fee requirements + return CombinedFeeRequirement(globalFees, localFees) +} + +// GetGlobalFee returns the global fees for a given fee tx's gas +// (might also return 0denom if globalMinGasPrice is 0) +// sorted in ascending order. +// Note that ParamStoreKeyMinGasPrices type requires coins sorted. +func (mfd FeeDecorator) GetGlobalFee(ctx sdk.Context, feeTx sdk.FeeTx) (sdk.Coins, error) { + var ( + globalMinGasPrices sdk.DecCoins + err error + ) + + if mfd.GlobalMinFeeParamSource.Has(ctx, types.ParamStoreKeyMinGasPrices) { + mfd.GlobalMinFeeParamSource.Get(ctx, types.ParamStoreKeyMinGasPrices, &globalMinGasPrices) + } + // global fee is empty set, set global fee to 0uatom + if len(globalMinGasPrices) == 0 { + globalMinGasPrices, err = mfd.DefaultZeroGlobalFee(ctx) + if err != nil { + return sdk.Coins{}, err + } + } + requiredGlobalFees := make(sdk.Coins, len(globalMinGasPrices)) + // Determine the required fees by multiplying each required minimum gas + // price by the gas limit, where fee = ceil(minGasPrice * gasLimit). + glDec := sdk.NewDec(int64(feeTx.GetGas())) + for i, gp := range globalMinGasPrices { + fee := gp.Amount.Mul(glDec) + requiredGlobalFees[i] = sdk.NewCoin(gp.Denom, fee.Ceil().RoundInt()) + } + + return requiredGlobalFees.Sort(), nil +} + +// DefaultZeroGlobalFee returns a zero coin with the staking module bond denom +func (mfd FeeDecorator) DefaultZeroGlobalFee(ctx sdk.Context) ([]sdk.DecCoin, error) { + bondDenom := mfd.getBondDenom(ctx) + if bondDenom == "" { + return nil, errors.New("empty staking bond denomination") + } + + return []sdk.DecCoin{sdk.NewDecCoinFromDec(bondDenom, sdk.NewDec(0))}, nil +} + +func (mfd FeeDecorator) getBondDenom(ctx sdk.Context) (bondDenom string) { + if mfd.StakingSubspace.Has(ctx, stakingtypes.KeyBondDenom) { + mfd.StakingSubspace.Get(ctx, stakingtypes.KeyBondDenom, &bondDenom) + } + + return +} + +func (mfd FeeDecorator) ContainsOnlyBypassMinFeeMsgs(ctx sdk.Context, msgs []sdk.Msg) bool { + bypassMsgTypes := mfd.GetBypassMsgTypes(ctx) + for _, msg := range msgs { + if tmstrings.StringInSlice(sdk.MsgTypeURL(msg), bypassMsgTypes) { + continue + } + return false + } + + return true +} + +func (mfd FeeDecorator) GetBypassMsgTypes(ctx sdk.Context) (res []string) { + if mfd.GlobalMinFeeParamSource.Has(ctx, types.ParamStoreKeyBypassMinFeeMsgTypes) { + mfd.GlobalMinFeeParamSource.Get(ctx, types.ParamStoreKeyBypassMinFeeMsgTypes, &res) + } + + return +} + +func (mfd FeeDecorator) GetMaxTotalBypassMinFeeMsgGasUsage(ctx sdk.Context) (res uint64) { + if mfd.GlobalMinFeeParamSource.Has(ctx, types.ParamStoreKeyMaxTotalBypassMinFeeMsgGasUsage) { + mfd.GlobalMinFeeParamSource.Get(ctx, types.ParamStoreKeyMaxTotalBypassMinFeeMsgGasUsage, &res) + } + + return +} + +// GetMinGasPrice returns a nodes's local minimum gas prices +// fees given a gas limit +func GetMinGasPrice(ctx sdk.Context, gasLimit int64) sdk.Coins { + minGasPrices := ctx.MinGasPrices() + // special case: if minGasPrices=[], requiredFees=[] + if minGasPrices.IsZero() { + return sdk.Coins{} + } + + requiredFees := make(sdk.Coins, len(minGasPrices)) + // Determine the required fees by multiplying each required minimum gas + // price by the gas limit, where fee = ceil(minGasPrice * gasLimit). + glDec := sdk.NewDec(gasLimit) + for i, gp := range minGasPrices { + fee := gp.Amount.Mul(glDec) + requiredFees[i] = sdk.NewCoin(gp.Denom, fee.Ceil().RoundInt()) + } + + return requiredFees.Sort() +} diff --git a/x/globalfee/ante/fee_utils.go b/x/globalfee/ante/fee_utils.go new file mode 100644 index 00000000..31c44aa3 --- /dev/null +++ b/x/globalfee/ante/fee_utils.go @@ -0,0 +1,113 @@ +package ante + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" +) + +// ContainZeroCoins returns true if the given coins are empty or contain zero coins, +// Note that the coins denoms must be validated, see sdk.ValidateDenom +func ContainZeroCoins(coins sdk.Coins) bool { + if len(coins) == 0 { + return true + } + for _, coin := range coins { + if coin.IsZero() { + return true + } + } + + return false +} + +// CombinedFeeRequirement returns the global fee and min_gas_price combined and sorted. +// Both globalFees and minGasPrices must be valid, but CombinedFeeRequirement +// does not validate them, so it may return 0denom. +// if globalfee is empty, CombinedFeeRequirement return sdk.Coins{} +func CombinedFeeRequirement(globalFees, minGasPrices sdk.Coins) (sdk.Coins, error) { + // global fees should never be empty + // since it has a default value using the staking module's bond denom + if len(globalFees) == 0 { + return sdk.Coins{}, sdkerrors.Wrapf(sdkerrors.ErrNotFound, "global fee cannot be empty") + } + + // empty min_gas_price + if len(minGasPrices) == 0 { + return globalFees, nil + } + + // if min_gas_price denom is in globalfee, and the amount is higher than globalfee, add min_gas_price to allFees + var allFees sdk.Coins + for _, fee := range globalFees { + // min_gas_price denom in global fee + ok, c := Find(minGasPrices, fee.Denom) + if ok && c.Amount.GT(fee.Amount) { + allFees = append(allFees, c) + } else { + allFees = append(allFees, fee) + } + } + + return allFees.Sort(), nil +} + +// Find replaces the functionality of Coins.Find from SDK v0.46.x +func Find(coins sdk.Coins, denom string) (bool, sdk.Coin) { + switch len(coins) { + case 0: + return false, sdk.Coin{} + + case 1: + coin := coins[0] + if coin.Denom == denom { + return true, coin + } + return false, sdk.Coin{} + + default: + midIdx := len(coins) / 2 // 2:1, 3:1, 4:2 + coin := coins[midIdx] + switch { + case denom < coin.Denom: + return Find(coins[:midIdx], denom) + case denom == coin.Denom: + return true, coin + default: + return Find(coins[midIdx+1:], denom) + } + } +} + +// splitCoinsByDenoms returns the given coins split in two whether +// their demon is or isn't found in the given denom map. +func splitCoinsByDenoms(feeCoins sdk.Coins, denomMap map[string]struct{}) (sdk.Coins, sdk.Coins) { + feeCoinsNonZeroDenom, feeCoinsZeroDenom := sdk.Coins{}, sdk.Coins{} + + for _, fc := range feeCoins { + _, found := denomMap[fc.Denom] + if found { + feeCoinsZeroDenom = append(feeCoinsZeroDenom, fc) + } else { + feeCoinsNonZeroDenom = append(feeCoinsNonZeroDenom, fc) + } + } + + return feeCoinsNonZeroDenom.Sort(), feeCoinsZeroDenom.Sort() +} + +// getNonZeroFees returns the given fees nonzero coins +// and a map storing the zero coins's denoms +func getNonZeroFees(fees sdk.Coins) (sdk.Coins, map[string]struct{}) { + requiredFeesNonZero := sdk.Coins{} + requiredFeesZeroDenom := map[string]struct{}{} + + for _, gf := range fees { + if gf.IsZero() { + requiredFeesZeroDenom[gf.Denom] = struct{}{} + } else { + requiredFeesNonZero = append(requiredFeesNonZero, gf) + } + } + + return requiredFeesNonZero.Sort(), requiredFeesZeroDenom +} diff --git a/x/globalfee/ante/fee_utils_test.go b/x/globalfee/ante/fee_utils_test.go new file mode 100644 index 00000000..8378e467 --- /dev/null +++ b/x/globalfee/ante/fee_utils_test.go @@ -0,0 +1,298 @@ +package ante + +import ( + "testing" + + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/stretchr/testify/require" +) + +func TestContainZeroCoins(t *testing.T) { + zeroCoin1 := sdk.NewCoin("photon", sdk.ZeroInt()) + zeroCoin2 := sdk.NewCoin("stake", sdk.ZeroInt()) + coin1 := sdk.NewCoin("photon", sdk.NewInt(1)) + coin2 := sdk.NewCoin("stake", sdk.NewInt(2)) + coin3 := sdk.NewCoin("quark", sdk.NewInt(3)) + // coins must be valid !!! + coinsEmpty := sdk.Coins{} + coinsNonEmpty := sdk.Coins{coin1, coin2} + coinsCointainZero := sdk.Coins{coin1, zeroCoin2} + coinsCointainTwoZero := sdk.Coins{zeroCoin1, zeroCoin2, coin3} + coinsAllZero := sdk.Coins{zeroCoin1, zeroCoin2} + + tests := []struct { + c sdk.Coins + ok bool + }{ + { + coinsEmpty, + true, + }, + { + coinsNonEmpty, + false, + }, + { + coinsCointainZero, + true, + }, + { + coinsCointainTwoZero, + true, + }, + { + coinsAllZero, + true, + }, + } + + for _, test := range tests { + ok := ContainZeroCoins(test.c) + require.Equal(t, test.ok, ok) + } +} + +// Note that in a real Gaia deployment all zero coins can be removed from minGasPrice. +// This sanitizing happens when the minGasPrice is set into the context. +// (see baseapp.SetMinGasPrices in gaia/cmd/root.go line 221) +func TestCombinedFeeRequirement(t *testing.T) { + zeroCoin1 := sdk.NewCoin("photon", sdk.ZeroInt()) + zeroCoin2 := sdk.NewCoin("stake", sdk.ZeroInt()) + zeroCoin3 := sdk.NewCoin("quark", sdk.ZeroInt()) + coin1 := sdk.NewCoin("photon", sdk.NewInt(1)) + coin2 := sdk.NewCoin("stake", sdk.NewInt(2)) + coin1High := sdk.NewCoin("photon", sdk.NewInt(10)) + coin2High := sdk.NewCoin("stake", sdk.NewInt(20)) + coinNewDenom1 := sdk.NewCoin("Newphoton", sdk.NewInt(1)) + coinNewDenom2 := sdk.NewCoin("Newstake", sdk.NewInt(1)) + // coins must be valid !!! and sorted!!! + coinsEmpty := sdk.Coins{} + coinsNonEmpty := sdk.Coins{coin1, coin2}.Sort() + coinsNonEmptyHigh := sdk.Coins{coin1High, coin2High}.Sort() + coinsNonEmptyOneHigh := sdk.Coins{coin1High, coin2}.Sort() + coinsNewDenom := sdk.Coins{coinNewDenom1, coinNewDenom2}.Sort() + coinsNewOldDenom := sdk.Coins{coin1, coinNewDenom1}.Sort() + coinsNewOldDenomHigh := sdk.Coins{coin1High, coinNewDenom1}.Sort() + coinsCointainZero := sdk.Coins{coin1, zeroCoin2}.Sort() + coinsCointainZeroNewDenom := sdk.Coins{coin1, zeroCoin3}.Sort() + coinsAllZero := sdk.Coins{zeroCoin1, zeroCoin2}.Sort() + tests := map[string]struct { + cGlobal sdk.Coins + c sdk.Coins + combined sdk.Coins + }{ + "global fee invalid, return combined fee empty and non-nil error": { + cGlobal: coinsEmpty, + c: coinsEmpty, + combined: coinsEmpty, + }, + "global fee nonempty, min fee empty, combined fee = global fee": { + cGlobal: coinsNonEmpty, + c: coinsNonEmpty, + combined: coinsNonEmpty, + }, + "global fee and min fee have overlapping denom, min fees amounts are all higher": { + cGlobal: coinsNonEmpty, + c: coinsNonEmptyHigh, + combined: coinsNonEmptyHigh, + }, + "global fee and min fee have overlapping denom, one of min fees amounts is higher": { + cGlobal: coinsNonEmpty, + c: coinsNonEmptyOneHigh, + combined: coinsNonEmptyOneHigh, + }, + "global fee and min fee have no overlapping denom, combined fee = global fee": { + cGlobal: coinsNonEmpty, + c: coinsNewDenom, + combined: coinsNonEmpty, + }, + "global fees and min fees have partial overlapping denom, min fee amount <= global fee amount, combined fees = global fees": { + cGlobal: coinsNonEmpty, + c: coinsNewOldDenom, + combined: coinsNonEmpty, + }, + "global fees and min fees have partial overlapping denom, one min fee amount > global fee amount, combined fee = overlapping highest": { + cGlobal: coinsNonEmpty, + c: coinsNewOldDenomHigh, + combined: sdk.Coins{coin1High, coin2}, + }, + "global fees have zero fees, min fees have overlapping non-zero fees, combined fees = overlapping highest": { + cGlobal: coinsCointainZero, + c: coinsNonEmpty, + combined: sdk.Coins{coin1, coin2}, + }, + "global fees have zero fees, min fees have overlapping zero fees": { + cGlobal: coinsCointainZero, + c: coinsCointainZero, + combined: coinsCointainZero, + }, + "global fees have zero fees, min fees have non-overlapping zero fees": { + cGlobal: coinsCointainZero, + c: coinsCointainZeroNewDenom, + combined: coinsCointainZero, + }, + "global fees are all zero fees, min fees have overlapping zero fees": { + cGlobal: coinsAllZero, + c: coinsAllZero, + combined: coinsAllZero, + }, + "global fees are all zero fees, min fees have overlapping non-zero fees, combined fee = overlapping highest": { + cGlobal: coinsAllZero, + c: coinsCointainZeroNewDenom, + combined: sdk.Coins{coin1, zeroCoin2}, + }, + "global fees are all zero fees, fees have one overlapping non-zero fee": { + cGlobal: coinsAllZero, + c: coinsCointainZero, + combined: coinsCointainZero, + }, + } + + for name, test := range tests { + t.Run(name, func(t *testing.T) { + allFees, err := CombinedFeeRequirement(test.cGlobal, test.c) + if len(test.cGlobal) == 0 { + require.Error(t, err) + } else { + require.NoError(t, err) + } + require.Equal(t, test.combined, allFees) + }) + } +} + +func TestSplitCoinsByDenoms(t *testing.T) { + zeroGlobalFeesDenom0 := map[string]struct{}{} + zeroGlobalFeesDenom1 := map[string]struct{}{ + "uatom": {}, + "photon": {}, + } + zeroGlobalFeesDenom2 := map[string]struct{}{ + "uatom": {}, + } + zeroGlobalFeesDenom3 := map[string]struct{}{ + "stake": {}, + } + + photon := sdk.NewCoin("photon", sdk.OneInt()) + uatom := sdk.NewCoin("uatom", sdk.OneInt()) + feeCoins := sdk.NewCoins(photon, uatom) + + tests := map[string]struct { + feeCoins sdk.Coins + zeroGlobalFeesDenom map[string]struct{} + expectedNonZeroCoins sdk.Coins + expectedZeroCoins sdk.Coins + }{ + "no zero coins in global fees": { + feeCoins: feeCoins, + zeroGlobalFeesDenom: zeroGlobalFeesDenom0, + expectedNonZeroCoins: feeCoins, + expectedZeroCoins: sdk.Coins{}, + }, + "no split of fee coins": { + feeCoins: feeCoins, + zeroGlobalFeesDenom: zeroGlobalFeesDenom3, + expectedNonZeroCoins: feeCoins, + expectedZeroCoins: sdk.Coins{}, + }, + "split the fee coins": { + feeCoins: feeCoins, + zeroGlobalFeesDenom: zeroGlobalFeesDenom2, + expectedNonZeroCoins: sdk.NewCoins(photon), + expectedZeroCoins: sdk.NewCoins(uatom), + }, + "remove all of the fee coins": { + feeCoins: feeCoins, + zeroGlobalFeesDenom: zeroGlobalFeesDenom1, + expectedNonZeroCoins: sdk.Coins{}, + expectedZeroCoins: feeCoins, + }, + "fee coins are empty": { + feeCoins: sdk.Coins{}, + zeroGlobalFeesDenom: zeroGlobalFeesDenom1, + expectedNonZeroCoins: sdk.Coins{}, + expectedZeroCoins: sdk.Coins{}, + }, + } + + for name, test := range tests { + t.Run(name, func(t *testing.T) { + feeCoinsNoZeroDenoms, feeCoinsZeroDenoms := splitCoinsByDenoms(test.feeCoins, test.zeroGlobalFeesDenom) + require.Equal(t, test.expectedNonZeroCoins, feeCoinsNoZeroDenoms) + require.Equal(t, test.expectedZeroCoins, feeCoinsZeroDenoms) + }) + } +} + +func TestSplitGlobalFees(t *testing.T) { + photon0 := sdk.NewCoin("photon", sdk.ZeroInt()) + uatom0 := sdk.NewCoin("uatom", sdk.ZeroInt()) + photon1 := sdk.NewCoin("photon", sdk.OneInt()) + uatom1 := sdk.NewCoin("uatom", sdk.OneInt()) + + globalFeesEmpty := sdk.Coins{} + globalFees := sdk.Coins{photon1, uatom1}.Sort() + globalFeesZeroCoins := sdk.Coins{photon0, uatom0}.Sort() + globalFeesMix := sdk.Coins{photon0, uatom1}.Sort() + + tests := map[string]struct { + globalfees sdk.Coins + zeroGlobalFeesDenom map[string]struct{} + globalfeesNonZero sdk.Coins + }{ + "empty global fees": { + globalfees: globalFeesEmpty, + zeroGlobalFeesDenom: map[string]struct{}{}, + globalfeesNonZero: sdk.Coins{}, + }, + "nonzero coins global fees": { + globalfees: globalFees, + zeroGlobalFeesDenom: map[string]struct{}{}, + globalfeesNonZero: globalFees, + }, + "zero coins global fees": { + globalfees: globalFeesZeroCoins, + zeroGlobalFeesDenom: map[string]struct{}{ + "photon": {}, + "uatom": {}, + }, + globalfeesNonZero: sdk.Coins{}, + }, + "mix zero, nonzero coins global fees": { + globalfees: globalFeesMix, + zeroGlobalFeesDenom: map[string]struct{}{ + "photon": {}, + }, + globalfeesNonZero: sdk.NewCoins(uatom1), + }, + } + + for name, test := range tests { + t.Run(name, func(t *testing.T) { + nonZeroCoins, zeroCoinsMap := getNonZeroFees(test.globalfees) + require.True(t, nonZeroCoins.IsEqual(test.globalfeesNonZero)) + require.True(t, equalMap(zeroCoinsMap, test.zeroGlobalFeesDenom)) + }) + } +} + +func equalMap(a, b map[string]struct{}) bool { + if len(a) != len(b) { + return false + } + if len(a) == 0 && len(b) == 0 { + return true + } + if len(a) == 0 { + return false + } + + for k := range a { + if _, ok := b[k]; !ok { + return false + } + } + + return true +} diff --git a/x/globalfee/client/cli/query.go b/x/globalfee/client/cli/query.go new file mode 100644 index 00000000..7401d5df --- /dev/null +++ b/x/globalfee/client/cli/query.go @@ -0,0 +1,47 @@ +package cli + +import ( + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/flags" + "github.com/spf13/cobra" + + "github.com/burnt-labs/xion/x/globalfee/types" +) + +func GetQueryCmd() *cobra.Command { + queryCmd := &cobra.Command{ + Use: types.ModuleName, + Short: "Querying commands for the global fee module", + DisableFlagParsing: true, + SuggestionsMinimumDistance: 2, + RunE: client.ValidateCmd, + } + queryCmd.AddCommand( + GetCmdShowGlobalFeeParams(), + ) + return queryCmd +} + +func GetCmdShowGlobalFeeParams() *cobra.Command { + cmd := &cobra.Command{ + Use: "params", + Short: "Show globalfee params", + Long: "Show globalfee requirement: minimum_gas_prices, bypass_min_fee_msg_types, max_total_bypass_minFee_msg_gas_usage", + Args: cobra.ExactArgs(0), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientQueryContext(cmd) + if err != nil { + return err + } + + queryClient := types.NewQueryClient(clientCtx) + res, err := queryClient.Params(cmd.Context(), &types.QueryParamsRequest{}) + if err != nil { + return err + } + return clientCtx.PrintProto(&res.Params) + }, + } + flags.AddQueryFlagsToCmd(cmd) + return cmd +} diff --git a/x/globalfee/genesis_test.go b/x/globalfee/genesis_test.go new file mode 100644 index 00000000..a9bae63a --- /dev/null +++ b/x/globalfee/genesis_test.go @@ -0,0 +1,161 @@ +package globalfee + +import ( + "testing" + "time" + + "github.com/cosmos/cosmos-sdk/simapp" + simappparams "github.com/cosmos/cosmos-sdk/simapp/params" + "github.com/cosmos/cosmos-sdk/store" + storetypes "github.com/cosmos/cosmos-sdk/store/types" + sdk "github.com/cosmos/cosmos-sdk/types" + paramskeeper "github.com/cosmos/cosmos-sdk/x/params/keeper" + paramstypes "github.com/cosmos/cosmos-sdk/x/params/types" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "github.com/tendermint/tendermint/libs/log" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + dbm "github.com/tendermint/tm-db" + + "github.com/burnt-labs/xion/x/globalfee/types" +) + +func TestDefaultGenesis(t *testing.T) { + encCfg := simapp.MakeTestEncodingConfig() + gotJSON := AppModuleBasic{}.DefaultGenesis(encCfg.Marshaler) + assert.JSONEq(t, + `{"params":{"minimum_gas_prices":[],"bypass_min_fee_msg_types":["/ibc.core.channel.v1.MsgRecvPacket","/ibc.core.channel.v1.MsgAcknowledgement","/ibc.core.client.v1.MsgUpdateClient","/ibc.core.channel.v1.MsgTimeout","/ibc.core.channel.v1.MsgTimeoutOnClose"], "max_total_bypass_min_fee_msg_gas_usage":"1000000"}}`, + string(gotJSON), string(gotJSON)) +} + +func TestValidateGenesis(t *testing.T) { + encCfg := simapp.MakeTestEncodingConfig() + specs := map[string]struct { + src string + expErr bool + }{ + "all good": { + src: `{"params":{"minimum_gas_prices":[{"denom":"ALX", "amount":"1"}], "bypass_min_fee_msg_types":["/ibc.core.channel.v1.MsgRecvPacket"]}}`, + expErr: false, + }, + "empty minimum": { + src: `{"params":{"minimum_gas_prices":[], "bypass_min_fee_msg_types":[]}}`, + expErr: false, + }, + "minimum and bypass not set": { + src: `{"params":{}}`, + expErr: false, + }, + "minimum not set": { + src: `{"params":{"bypass_min_fee_msg_types":[]}}`, + expErr: false, + }, + "bypass not set": { + src: `{"params":{"minimum_gas_prices":[]}}`, + expErr: false, + }, + "zero amount allowed": { + src: `{"params":{"minimum_gas_prices":[{"denom":"ALX", "amount":"0"}]}}`, + expErr: false, + }, + "duplicate denoms not allowed": { + src: `{"params":{"minimum_gas_prices":[{"denom":"ALX", "amount":"1"},{"denom":"ALX", "amount":"2"}]}}`, + expErr: true, + }, + "negative amounts not allowed": { + src: `{"params":{"minimum_gas_prices":[{"denom":"ALX", "amount":"-1"}]}}`, + expErr: true, + }, + "denom must be sorted": { + src: `{"params":{"minimum_gas_prices":[{"denom":"ZLX", "amount":"1"},{"denom":"ALX", "amount":"2"}]}}`, + expErr: true, + }, + "empty bypass msg types not allowed": { + src: `{"params":{"bypass_min_fee_msg_types":[""]}}`, + expErr: true, + }, + "sorted denoms is allowed": { + src: `{"params":{"minimum_gas_prices":[{"denom":"ALX", "amount":"1"},{"denom":"ZLX", "amount":"2"}]}}`, + expErr: false, + }, + } + for name, spec := range specs { + t.Run(name, func(t *testing.T) { + gotErr := AppModuleBasic{}.ValidateGenesis(encCfg.Marshaler, nil, []byte(spec.src)) + if spec.expErr { + require.Error(t, gotErr) + return + } + require.NoError(t, gotErr) + }) + } +} + +func TestInitExportGenesis(t *testing.T) { + specs := map[string]struct { + src string + exp types.GenesisState + }{ + "single fee": { + src: `{"params":{"minimum_gas_prices":[{"denom":"ALX", "amount":"1"}], "bypass_min_fee_msg_types":["/ibc.core.channel.v1.MsgRecvPacket"]}}`, + exp: types.GenesisState{ + Params: types.Params{ + MinimumGasPrices: sdk.NewDecCoins(sdk.NewDecCoin("ALX", sdk.NewInt(1))), + BypassMinFeeMsgTypes: []string{"/ibc.core.channel.v1.MsgRecvPacket"}, + }, + }, + }, + "multiple fee options": { + src: `{"params":{"minimum_gas_prices":[{"denom":"ALX", "amount":"1"}, {"denom":"BLX", "amount":"0.001"}], "bypass_min_fee_msg_types":["/ibc.core.channel.v1.MsgRecvPacket","/ibc.core.channel.v1.MsgTimeoutOnClose"]}}`, + exp: types.GenesisState{ + Params: types.Params{ + MinimumGasPrices: sdk.NewDecCoins(sdk.NewDecCoin("ALX", sdk.NewInt(1)), + sdk.NewDecCoinFromDec("BLX", sdk.NewDecWithPrec(1, 3))), + BypassMinFeeMsgTypes: []string{"/ibc.core.channel.v1.MsgRecvPacket", "/ibc.core.channel.v1.MsgTimeoutOnClose"}, + }, + }, + }, + "no fee set": { + src: `{"params":{}}`, + exp: types.GenesisState{ + Params: types.Params{ + MinimumGasPrices: sdk.DecCoins{}, + BypassMinFeeMsgTypes: []string{}, + }, + }, + }, + } + for name, spec := range specs { + t.Run(name, func(t *testing.T) { + ctx, encCfg, subspace := setupTestStore(t) + m := NewAppModule(subspace) + m.InitGenesis(ctx, encCfg.Marshaler, []byte(spec.src)) + gotJSON := m.ExportGenesis(ctx, encCfg.Marshaler) + var got types.GenesisState + require.NoError(t, encCfg.Marshaler.UnmarshalJSON(gotJSON, &got)) + assert.Equal(t, spec.exp, got, string(gotJSON)) + }) + } +} + +func setupTestStore(t *testing.T) (sdk.Context, simappparams.EncodingConfig, paramstypes.Subspace) { + t.Helper() + db := dbm.NewMemDB() + ms := store.NewCommitMultiStore(db) + encCfg := simapp.MakeTestEncodingConfig() + keyParams := sdk.NewKVStoreKey(paramstypes.StoreKey) + tkeyParams := sdk.NewTransientStoreKey(paramstypes.TStoreKey) + ms.MountStoreWithDB(keyParams, storetypes.StoreTypeIAVL, db) + ms.MountStoreWithDB(tkeyParams, storetypes.StoreTypeTransient, db) + require.NoError(t, ms.LoadLatestVersion()) + + paramsKeeper := paramskeeper.NewKeeper(encCfg.Marshaler, encCfg.Amino, keyParams, tkeyParams) + + ctx := sdk.NewContext(ms, tmproto.Header{ + Height: 1234567, + Time: time.Date(2020, time.April, 22, 12, 0, 0, 0, time.UTC), + }, false, log.NewNopLogger()) + + subspace := paramsKeeper.Subspace(ModuleName).WithKeyTable(types.ParamKeyTable()) + return ctx, encCfg, subspace +} diff --git a/x/globalfee/keeper/migrations.go b/x/globalfee/keeper/migrations.go new file mode 100644 index 00000000..92ec456c --- /dev/null +++ b/x/globalfee/keeper/migrations.go @@ -0,0 +1,22 @@ +package keeper + +import ( + v2 "github.com/burnt-labs/xion/x/globalfee/migrations/v2" + sdk "github.com/cosmos/cosmos-sdk/types" + paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" +) + +// Migrator is a struct for handling in-place store migrations. +type Migrator struct { + globalfeeSubspace paramtypes.Subspace +} + +// NewMigrator returns a new Migrator. +func NewMigrator(globalfeeSubspace paramtypes.Subspace) Migrator { + return Migrator{globalfeeSubspace: globalfeeSubspace} +} + +// Migrate1to2 migrates from version 1 to 2. +func (m Migrator) Migrate1to2(ctx sdk.Context) error { + return v2.MigrateStore(ctx, m.globalfeeSubspace) +} diff --git a/x/globalfee/migrations/v2/migration.go b/x/globalfee/migrations/v2/migration.go new file mode 100644 index 00000000..0dee420e --- /dev/null +++ b/x/globalfee/migrations/v2/migration.go @@ -0,0 +1,37 @@ +package v2 + +import ( + "github.com/burnt-labs/xion/x/globalfee/types" + sdk "github.com/cosmos/cosmos-sdk/types" + paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" +) + +// MigrateStore performs in-place params migrations of +// BypassMinFeeMsgTypes and MaxTotalBypassMinFeeMsgGasUsage +// from app.toml to globalfee params. +// The migration includes: +// Add bypass-min-fee-msg-types params that are set +// ["/ibc.core.channel.v1.MsgRecvPacket", +// "/ibc.core.channel.v1.MsgAcknowledgement", +// "/ibc.core.client.v1.MsgUpdateClient", +// "/ibc.core.channel.v1.MsgTimeout", +// "/ibc.core.channel.v1.MsgTimeoutOnClose"] as default and +// add MaxTotalBypassMinFeeMsgGasUsage that is set 1_000_000 as default. +func MigrateStore(ctx sdk.Context, globalfeeSubspace paramtypes.Subspace) error { + var oldGlobalMinGasPrices sdk.DecCoins + globalfeeSubspace.Get(ctx, types.ParamStoreKeyMinGasPrices, &oldGlobalMinGasPrices) + defaultParams := types.DefaultParams() + params := types.Params{ + MinimumGasPrices: oldGlobalMinGasPrices, + BypassMinFeeMsgTypes: defaultParams.BypassMinFeeMsgTypes, + MaxTotalBypassMinFeeMsgGasUsage: defaultParams.MaxTotalBypassMinFeeMsgGasUsage, + } + + if !globalfeeSubspace.HasKeyTable() { + globalfeeSubspace = globalfeeSubspace.WithKeyTable(types.ParamKeyTable()) + } + + globalfeeSubspace.SetParamSet(ctx, ¶ms) + + return nil +} diff --git a/x/globalfee/migrations/v2/v2_test/migration_test.go b/x/globalfee/migrations/v2/v2_test/migration_test.go new file mode 100644 index 00000000..632e5789 --- /dev/null +++ b/x/globalfee/migrations/v2/v2_test/migration_test.go @@ -0,0 +1,107 @@ +package v2_test + +import ( + "testing" + + "github.com/cosmos/cosmos-sdk/codec" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" + "github.com/cosmos/cosmos-sdk/store" + storetypes "github.com/cosmos/cosmos-sdk/store/types" + sdk "github.com/cosmos/cosmos-sdk/types" + paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" + v2 "github.com/cosmos/gaia/v11/x/globalfee/migrations/v2" + globalfeetypes "github.com/cosmos/gaia/v11/x/globalfee/types" + "github.com/stretchr/testify/require" + "github.com/tendermint/tendermint/libs/log" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + tmdb "github.com/tendermint/tm-db" +) + +func TestMigrateStore(t *testing.T) { + db := tmdb.NewMemDB() + stateStore := store.NewCommitMultiStore(db) + + storeKey := sdk.NewKVStoreKey(paramtypes.StoreKey) + memStoreKey := storetypes.NewMemoryStoreKey("mem_key") + + stateStore.MountStoreWithDB(storeKey, sdk.StoreTypeIAVL, db) + stateStore.MountStoreWithDB(memStoreKey, sdk.StoreTypeMemory, nil) + require.NoError(t, stateStore.LoadLatestVersion()) + + registry := codectypes.NewInterfaceRegistry() + cdc := codec.NewProtoCodec(registry) + ctx := sdk.NewContext(stateStore, tmproto.Header{}, false, log.NewNopLogger()) + + require.NoError(t, stateStore.LoadLatestVersion()) + + // Create new empty subspace + newSubspace := paramtypes.NewSubspace(cdc, + codec.NewLegacyAmino(), + storeKey, + memStoreKey, + paramtypes.ModuleName, + ) + + // register the subspace with the v11 paramKeyTable + newSubspace = newSubspace.WithKeyTable(globalfeetypes.ParamKeyTable()) + + // check MinGasPrices isn't set + _, ok := getMinGasPrice(newSubspace, ctx) + require.Equal(t, ok, false) + + // set a minGasPrice different that default value + minGasPrices := sdk.NewDecCoins(sdk.NewDecCoin("uatom", sdk.OneInt())) + newSubspace.Set(ctx, globalfeetypes.ParamStoreKeyMinGasPrices, minGasPrices) + require.False(t, minGasPrices.IsEqual(globalfeetypes.DefaultMinGasPrices)) + + // check that the new parameters aren't set + _, ok = getBypassMsgTypes(newSubspace, ctx) + require.Equal(t, ok, false) + _, ok = getMaxTotalBypassMinFeeMsgGasUsage(newSubspace, ctx) + require.Equal(t, ok, false) + + // run global fee migration + err := v2.MigrateStore(ctx, newSubspace) + require.NoError(t, err) + + newMinGasPrices, _ := getMinGasPrice(newSubspace, ctx) + bypassMsgTypes, _ := getBypassMsgTypes(newSubspace, ctx) + maxGas, _ := getMaxTotalBypassMinFeeMsgGasUsage(newSubspace, ctx) + + require.Equal(t, bypassMsgTypes, globalfeetypes.DefaultBypassMinFeeMsgTypes) + require.Equal(t, maxGas, globalfeetypes.DefaultmaxTotalBypassMinFeeMsgGasUsage) + require.Equal(t, minGasPrices, newMinGasPrices) +} + +func getBypassMsgTypes(globalfeeSubspace paramtypes.Subspace, ctx sdk.Context) ([]string, bool) { + bypassMsgs := []string{} + if globalfeeSubspace.Has(ctx, globalfeetypes.ParamStoreKeyBypassMinFeeMsgTypes) { + globalfeeSubspace.Get(ctx, globalfeetypes.ParamStoreKeyBypassMinFeeMsgTypes, &bypassMsgs) + } else { + return bypassMsgs, false + } + + return bypassMsgs, true +} + +func getMaxTotalBypassMinFeeMsgGasUsage(globalfeeSubspace paramtypes.Subspace, ctx sdk.Context) (uint64, bool) { + var maxTotalBypassMinFeeMsgGasUsage uint64 + if globalfeeSubspace.Has(ctx, globalfeetypes.ParamStoreKeyMaxTotalBypassMinFeeMsgGasUsage) { + globalfeeSubspace.Get(ctx, globalfeetypes.ParamStoreKeyMaxTotalBypassMinFeeMsgGasUsage, &maxTotalBypassMinFeeMsgGasUsage) + } else { + return maxTotalBypassMinFeeMsgGasUsage, false + } + + return maxTotalBypassMinFeeMsgGasUsage, true +} + +func getMinGasPrice(globalfeeSubspace paramtypes.Subspace, ctx sdk.Context) (sdk.DecCoins, bool) { + var globalMinGasPrices sdk.DecCoins + if globalfeeSubspace.Has(ctx, globalfeetypes.ParamStoreKeyMinGasPrices) { + globalfeeSubspace.Get(ctx, globalfeetypes.ParamStoreKeyMinGasPrices, &globalMinGasPrices) + } else { + return globalMinGasPrices, false + } + + return globalMinGasPrices, true +} diff --git a/x/globalfee/module.go b/x/globalfee/module.go new file mode 100644 index 00000000..83642601 --- /dev/null +++ b/x/globalfee/module.go @@ -0,0 +1,146 @@ +package globalfee + +import ( + "context" + "encoding/json" + "fmt" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/codec" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + "github.com/cosmos/cosmos-sdk/types/module" + paramstypes "github.com/cosmos/cosmos-sdk/x/params/types" + "github.com/gorilla/mux" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/spf13/cobra" + abci "github.com/tendermint/tendermint/abci/types" + + "github.com/burnt-labs/xion/x/globalfee/client/cli" + "github.com/burnt-labs/xion/x/globalfee/keeper" + "github.com/burnt-labs/xion/x/globalfee/types" +) + +var ( + _ module.AppModuleBasic = AppModuleBasic{} + _ module.AppModuleGenesis = AppModule{} + _ module.AppModule = AppModule{} +) + +// AppModuleBasic defines the basic application module used by the wasm module. +type AppModuleBasic struct{} + +func (a AppModuleBasic) Name() string { + return types.ModuleName +} + +func (a AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage { + return cdc.MustMarshalJSON(&types.GenesisState{ + Params: types.DefaultParams(), + }) +} + +func (a AppModuleBasic) ValidateGenesis(marshaler codec.JSONCodec, _ client.TxEncodingConfig, message json.RawMessage) error { + var data types.GenesisState + err := marshaler.UnmarshalJSON(message, &data) + if err != nil { + return err + } + if err := data.Params.ValidateBasic(); err != nil { + return sdkerrors.Wrap(err, "params") + } + return nil +} + +func (a AppModuleBasic) RegisterInterfaces(_ codectypes.InterfaceRegistry) { +} + +func (a AppModuleBasic) RegisterRESTRoutes(_ client.Context, _ *mux.Router) { +} + +func (a AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) { + err := types.RegisterQueryHandlerClient(context.Background(), mux, types.NewQueryClient(clientCtx)) + if err != nil { + // same behavior as in cosmos-sdk + panic(err) + } +} + +func (a AppModuleBasic) GetTxCmd() *cobra.Command { + return nil +} + +func (a AppModuleBasic) GetQueryCmd() *cobra.Command { + return cli.GetQueryCmd() +} + +func (a AppModuleBasic) RegisterLegacyAminoCodec(_ *codec.LegacyAmino) { +} + +type AppModule struct { + AppModuleBasic + paramSpace paramstypes.Subspace +} + +// NewAppModule constructor +func NewAppModule(paramSpace paramstypes.Subspace) *AppModule { + if !paramSpace.HasKeyTable() { + paramSpace = paramSpace.WithKeyTable(types.ParamKeyTable()) + } + + return &AppModule{paramSpace: paramSpace} +} + +func (a AppModule) InitGenesis(ctx sdk.Context, marshaler codec.JSONCodec, message json.RawMessage) []abci.ValidatorUpdate { + var genesisState types.GenesisState + marshaler.MustUnmarshalJSON(message, &genesisState) + + a.paramSpace.SetParamSet(ctx, &genesisState.Params) + return nil +} + +func (a AppModule) ExportGenesis(ctx sdk.Context, marshaler codec.JSONCodec) json.RawMessage { + var genState types.GenesisState + a.paramSpace.GetParamSet(ctx, &genState.Params) + return marshaler.MustMarshalJSON(&genState) +} + +func (a AppModule) RegisterInvariants(_ sdk.InvariantRegistry) { +} + +func (a AppModule) Route() sdk.Route { + return sdk.Route{} +} + +func (a AppModule) QuerierRoute() string { + return types.QuerierRoute +} + +func (a AppModule) LegacyQuerierHandler(_ *codec.LegacyAmino) sdk.Querier { + return nil +} + +func (a AppModule) RegisterServices(cfg module.Configurator) { + types.RegisterQueryServer(cfg.QueryServer(), NewGrpcQuerier(a.paramSpace)) + + m := keeper.NewMigrator(a.paramSpace) + if err := cfg.RegisterMigration(types.ModuleName, 1, m.Migrate1to2); err != nil { + panic(fmt.Sprintf("failed to migrate x/globalfee from version 1 to 2: %v", err)) + } +} + +func (a AppModule) BeginBlock(_ sdk.Context, _ abci.RequestBeginBlock) { +} + +func (a AppModule) EndBlock(_ sdk.Context, _ abci.RequestEndBlock) []abci.ValidatorUpdate { + return nil +} + +// ConsensusVersion is a sequence number for state-breaking change of the +// module. It should be incremented on each consensus-breaking change +// introduced by the module. To avoid wrong/empty versions, the initial version +// should be set to 1. +func (a AppModule) ConsensusVersion() uint64 { + return 2 +} diff --git a/x/globalfee/querier.go b/x/globalfee/querier.go new file mode 100644 index 00000000..34500227 --- /dev/null +++ b/x/globalfee/querier.go @@ -0,0 +1,52 @@ +package globalfee + +import ( + "context" + + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/burnt-labs/xion/x/globalfee/types" +) + +var _ types.QueryServer = &GrpcQuerier{} + +// ParamSource is a read only subset of paramtypes.Subspace +type ParamSource interface { + Get(ctx sdk.Context, key []byte, ptr interface{}) + Has(ctx sdk.Context, key []byte) bool +} + +type GrpcQuerier struct { + paramSource ParamSource +} + +func NewGrpcQuerier(paramSource ParamSource) GrpcQuerier { + return GrpcQuerier{paramSource: paramSource} +} + +// MinimumGasPrices return minimum gas prices +func (g GrpcQuerier) Params(stdCtx context.Context, _ *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { + var minGasPrices sdk.DecCoins + var bypassMinFeeMsgTypes []string + var maxTotalBypassMinFeeMsgGasUsage uint64 + ctx := sdk.UnwrapSDKContext(stdCtx) + + // todo: if return err if not exist? + if g.paramSource.Has(ctx, types.ParamStoreKeyMinGasPrices) { + g.paramSource.Get(ctx, types.ParamStoreKeyMinGasPrices, &minGasPrices) + } + if g.paramSource.Has(ctx, types.ParamStoreKeyBypassMinFeeMsgTypes) { + g.paramSource.Get(ctx, types.ParamStoreKeyBypassMinFeeMsgTypes, &bypassMinFeeMsgTypes) + } + if g.paramSource.Has(ctx, types.ParamStoreKeyMaxTotalBypassMinFeeMsgGasUsage) { + g.paramSource.Get(ctx, types.ParamStoreKeyMaxTotalBypassMinFeeMsgGasUsage, &maxTotalBypassMinFeeMsgGasUsage) + } + + return &types.QueryParamsResponse{ + Params: types.Params{ + MinimumGasPrices: minGasPrices, + BypassMinFeeMsgTypes: bypassMinFeeMsgTypes, + MaxTotalBypassMinFeeMsgGasUsage: maxTotalBypassMinFeeMsgGasUsage, + }, + }, nil +} diff --git a/x/globalfee/querier_test.go b/x/globalfee/querier_test.go new file mode 100644 index 00000000..88ff5af0 --- /dev/null +++ b/x/globalfee/querier_test.go @@ -0,0 +1,56 @@ +package globalfee + +import ( + "testing" + + sdk "github.com/cosmos/cosmos-sdk/types" + paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/burnt-labs/xion/x/globalfee/types" +) + +func TestQueryMinimumGasPrices(t *testing.T) { + specs := map[string]struct { + setupStore func(ctx sdk.Context, s paramtypes.Subspace) + expMin sdk.DecCoins + }{ + "one coin": { + setupStore: func(ctx sdk.Context, s paramtypes.Subspace) { + s.SetParamSet(ctx, &types.Params{ + MinimumGasPrices: sdk.NewDecCoins(sdk.NewDecCoin("ALX", sdk.OneInt())), + }) + }, + expMin: sdk.NewDecCoins(sdk.NewDecCoin("ALX", sdk.OneInt())), + }, + "multiple coins": { + setupStore: func(ctx sdk.Context, s paramtypes.Subspace) { + s.SetParamSet(ctx, &types.Params{ + MinimumGasPrices: sdk.NewDecCoins(sdk.NewDecCoin("ALX", sdk.OneInt()), sdk.NewDecCoin("BLX", sdk.NewInt(2))), + }) + }, + expMin: sdk.NewDecCoins(sdk.NewDecCoin("ALX", sdk.OneInt()), sdk.NewDecCoin("BLX", sdk.NewInt(2))), + }, + "no min gas price set": { + setupStore: func(ctx sdk.Context, s paramtypes.Subspace) { + s.SetParamSet(ctx, &types.Params{}) + }, + }, + "no param set": { + setupStore: func(ctx sdk.Context, s paramtypes.Subspace) { + }, + }, + } + for name, spec := range specs { + t.Run(name, func(t *testing.T) { + ctx, _, subspace := setupTestStore(t) + spec.setupStore(ctx, subspace) + q := NewGrpcQuerier(subspace) + gotResp, gotErr := q.Params(sdk.WrapSDKContext(ctx), nil) + require.NoError(t, gotErr) + require.NotNil(t, gotResp) + assert.Equal(t, spec.expMin, gotResp.Params.MinimumGasPrices) + }) + } +} diff --git a/x/globalfee/types/genesis.go b/x/globalfee/types/genesis.go new file mode 100644 index 00000000..a87d8d98 --- /dev/null +++ b/x/globalfee/types/genesis.go @@ -0,0 +1,40 @@ +package types + +import ( + "encoding/json" + + "github.com/cosmos/cosmos-sdk/codec" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" +) + +// NewGenesisState - Create a new genesis state +func NewGenesisState(params Params) *GenesisState { + return &GenesisState{ + Params: params, + } +} + +// DefaultGenesisState - Return a default genesis state +func DefaultGenesisState() *GenesisState { + return NewGenesisState(DefaultParams()) +} + +// GetGenesisStateFromAppState returns x/auth GenesisState given raw application +// genesis state. +func GetGenesisStateFromAppState(cdc codec.Codec, appState map[string]json.RawMessage) *GenesisState { + var genesisState GenesisState + + if appState[ModuleName] != nil { + cdc.MustUnmarshalJSON(appState[ModuleName], &genesisState) + } + + return &genesisState +} + +func ValidateGenesis(data GenesisState) error { + if err := data.Params.ValidateBasic(); err != nil { + return sdkerrors.Wrap(err, "globalfee params") + } + + return nil +} diff --git a/x/globalfee/types/genesis.pb.go b/x/globalfee/types/genesis.pb.go new file mode 100644 index 00000000..1e9188ad --- /dev/null +++ b/x/globalfee/types/genesis.pb.go @@ -0,0 +1,622 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: gaia/globalfee/v1beta1/genesis.proto + +package types + +import ( + fmt "fmt" + github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" + types "github.com/cosmos/cosmos-sdk/types" + _ "github.com/gogo/protobuf/gogoproto" + proto "github.com/gogo/protobuf/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// GenesisState - initial state of module +type GenesisState struct { + // Params of this module + Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params,omitempty"` +} + +func (m *GenesisState) Reset() { *m = GenesisState{} } +func (m *GenesisState) String() string { return proto.CompactTextString(m) } +func (*GenesisState) ProtoMessage() {} +func (*GenesisState) Descriptor() ([]byte, []int) { + return fileDescriptor_015b3e8b7a7c65c5, []int{0} +} +func (m *GenesisState) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GenesisState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_GenesisState.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *GenesisState) XXX_Merge(src proto.Message) { + xxx_messageInfo_GenesisState.Merge(m, src) +} +func (m *GenesisState) XXX_Size() int { + return m.Size() +} +func (m *GenesisState) XXX_DiscardUnknown() { + xxx_messageInfo_GenesisState.DiscardUnknown(m) +} + +var xxx_messageInfo_GenesisState proto.InternalMessageInfo + +func (m *GenesisState) GetParams() Params { + if m != nil { + return m.Params + } + return Params{} +} + +// Params defines the set of module parameters. +type Params struct { + // minimum_gas_prices stores the minimum gas price(s) for all TX on the chain. + // When multiple coins are defined then they are accepted alternatively. + // The list must be sorted by denoms asc. No duplicate denoms or zero amount + // values allowed. For more information see + // https://docs.cosmos.network/main/modules/auth#concepts + MinimumGasPrices github_com_cosmos_cosmos_sdk_types.DecCoins `protobuf:"bytes,1,rep,name=minimum_gas_prices,json=minimumGasPrices,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.DecCoins" json:"minimum_gas_prices,omitempty" yaml:"minimum_gas_prices"` + // bypass_min_fee_msg_types defines a list of message type urls + // that are free of fee charge. + BypassMinFeeMsgTypes []string `protobuf:"bytes,2,rep,name=bypass_min_fee_msg_types,json=bypassMinFeeMsgTypes,proto3" json:"bypass_min_fee_msg_types,omitempty" yaml:"bypass_min_fee_msg_types"` + // max_total_bypass_min_fee_msg_gas_usage defines the total maximum gas usage + // allowed for a transaction containing only messages of types in bypass_min_fee_msg_types + // to bypass fee charge. + MaxTotalBypassMinFeeMsgGasUsage uint64 `protobuf:"varint,3,opt,name=max_total_bypass_min_fee_msg_gas_usage,json=maxTotalBypassMinFeeMsgGasUsage,proto3" json:"max_total_bypass_min_fee_msg_gas_usage,omitempty"` +} + +func (m *Params) Reset() { *m = Params{} } +func (m *Params) String() string { return proto.CompactTextString(m) } +func (*Params) ProtoMessage() {} +func (*Params) Descriptor() ([]byte, []int) { + return fileDescriptor_015b3e8b7a7c65c5, []int{1} +} +func (m *Params) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Params) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Params.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Params) XXX_Merge(src proto.Message) { + xxx_messageInfo_Params.Merge(m, src) +} +func (m *Params) XXX_Size() int { + return m.Size() +} +func (m *Params) XXX_DiscardUnknown() { + xxx_messageInfo_Params.DiscardUnknown(m) +} + +var xxx_messageInfo_Params proto.InternalMessageInfo + +func (m *Params) GetMinimumGasPrices() github_com_cosmos_cosmos_sdk_types.DecCoins { + if m != nil { + return m.MinimumGasPrices + } + return nil +} + +func (m *Params) GetBypassMinFeeMsgTypes() []string { + if m != nil { + return m.BypassMinFeeMsgTypes + } + return nil +} + +func (m *Params) GetMaxTotalBypassMinFeeMsgGasUsage() uint64 { + if m != nil { + return m.MaxTotalBypassMinFeeMsgGasUsage + } + return 0 +} + +func init() { + proto.RegisterType((*GenesisState)(nil), "gaia.globalfee.v1beta1.GenesisState") + proto.RegisterType((*Params)(nil), "gaia.globalfee.v1beta1.Params") +} + +func init() { + proto.RegisterFile("gaia/globalfee/v1beta1/genesis.proto", fileDescriptor_015b3e8b7a7c65c5) +} + +var fileDescriptor_015b3e8b7a7c65c5 = []byte{ + // 428 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x92, 0x4d, 0x6e, 0xd3, 0x40, + 0x14, 0xc7, 0x33, 0x04, 0x45, 0xc2, 0x65, 0x51, 0x59, 0x15, 0x32, 0x55, 0x35, 0x8e, 0x2c, 0x84, + 0x2c, 0x01, 0x63, 0xb5, 0xec, 0x58, 0x1a, 0x44, 0xc4, 0xa2, 0x22, 0x0a, 0x65, 0xc3, 0x66, 0x78, + 0x36, 0xd3, 0x61, 0x44, 0xc6, 0x63, 0xe5, 0x4d, 0x50, 0xb2, 0xe4, 0x06, 0x1c, 0x80, 0x13, 0x70, + 0x06, 0x0e, 0xd0, 0x65, 0x97, 0xac, 0x0c, 0x4a, 0x76, 0x5d, 0x72, 0x02, 0x34, 0x1e, 0xd3, 0x52, + 0xa5, 0x59, 0xd9, 0xf2, 0xfb, 0xfd, 0x3f, 0xfc, 0xf4, 0x82, 0x07, 0x12, 0x14, 0x64, 0x72, 0x6a, + 0x0a, 0x98, 0x9e, 0x0a, 0x91, 0x7d, 0x3e, 0x2c, 0x84, 0x85, 0xc3, 0x4c, 0x8a, 0x4a, 0xa0, 0x42, + 0x56, 0xcf, 0x8c, 0x35, 0xe1, 0x3d, 0x47, 0xb1, 0x4b, 0x8a, 0x75, 0xd4, 0xfe, 0x9e, 0x34, 0xd2, + 0xb4, 0x48, 0xe6, 0xde, 0x3c, 0xbd, 0x4f, 0x4b, 0x83, 0xda, 0x60, 0x56, 0x00, 0x5e, 0x19, 0x96, + 0x46, 0x55, 0x7e, 0x9e, 0xbc, 0x0f, 0xee, 0x8e, 0xbc, 0xfd, 0x1b, 0x0b, 0x56, 0x84, 0xe3, 0x60, + 0x50, 0xc3, 0x0c, 0x34, 0x46, 0x64, 0x48, 0xd2, 0x9d, 0x23, 0xca, 0x6e, 0x8e, 0x63, 0xe3, 0x96, + 0xca, 0xa3, 0xb3, 0x26, 0xee, 0x5d, 0x34, 0xf1, 0xae, 0x57, 0x3d, 0x36, 0x5a, 0x59, 0xa1, 0x6b, + 0xbb, 0x9c, 0x74, 0x3e, 0xc9, 0xb7, 0x7e, 0x30, 0xf0, 0x70, 0xf8, 0x83, 0x04, 0xa1, 0x56, 0x95, + 0xd2, 0x73, 0xcd, 0x25, 0x20, 0xaf, 0x67, 0xaa, 0x14, 0x2e, 0xa9, 0x9f, 0xee, 0x1c, 0x1d, 0x30, + 0x5f, 0x95, 0xb9, 0xaa, 0x97, 0x31, 0x2f, 0x44, 0xf9, 0xdc, 0xa8, 0x2a, 0xaf, 0xbb, 0x9c, 0x83, + 0x4d, 0xfd, 0x55, 0xe6, 0x9f, 0x26, 0xbe, 0xbf, 0x04, 0x3d, 0x7d, 0x96, 0x6c, 0x52, 0xc9, 0xf7, + 0x5f, 0xf1, 0x23, 0xa9, 0xec, 0xc7, 0x79, 0xc1, 0x4a, 0xa3, 0xb3, 0x6e, 0x2f, 0xfe, 0xf1, 0x04, + 0x3f, 0x7c, 0xca, 0xec, 0xb2, 0x16, 0xf8, 0x2f, 0x10, 0x27, 0xbb, 0x9d, 0xc7, 0x08, 0x70, 0xdc, + 0x3a, 0x84, 0x5f, 0x48, 0x10, 0x15, 0xcb, 0x1a, 0x10, 0xb9, 0x56, 0x15, 0x3f, 0x15, 0x82, 0x6b, + 0x94, 0xbc, 0xd5, 0x45, 0xb7, 0x86, 0xfd, 0xf4, 0x4e, 0xfe, 0xea, 0xa2, 0x89, 0x93, 0x6d, 0xcc, + 0xb5, 0xa2, 0xb1, 0x2f, 0xba, 0x8d, 0x4d, 0x26, 0x7b, 0x7e, 0x74, 0xac, 0xaa, 0x97, 0x42, 0x1c, + 0xa3, 0x3c, 0x71, 0x9f, 0xc3, 0xd7, 0xc1, 0x43, 0x0d, 0x0b, 0x6e, 0x8d, 0x85, 0x29, 0xbf, 0x41, + 0xec, 0x7e, 0x78, 0x8e, 0x20, 0x45, 0xd4, 0x1f, 0x92, 0xf4, 0xf6, 0x24, 0xd6, 0xb0, 0x38, 0x71, + 0x70, 0x7e, 0xdd, 0x6d, 0x04, 0xf8, 0xd6, 0x61, 0x79, 0x7e, 0xb6, 0xa2, 0xe4, 0x7c, 0x45, 0xc9, + 0xef, 0x15, 0x25, 0x5f, 0xd7, 0xb4, 0x77, 0xbe, 0xa6, 0xbd, 0x9f, 0x6b, 0xda, 0x7b, 0x97, 0x6e, + 0x6e, 0xab, 0x3d, 0xd0, 0xc5, 0x7f, 0x27, 0xda, 0x76, 0x2d, 0x06, 0xed, 0x2d, 0x3d, 0xfd, 0x1b, + 0x00, 0x00, 0xff, 0xff, 0x90, 0xb9, 0xb2, 0x8a, 0xc1, 0x02, 0x00, 0x00, +} + +func (m *GenesisState) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GenesisState) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *Params) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Params) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.MaxTotalBypassMinFeeMsgGasUsage != 0 { + i = encodeVarintGenesis(dAtA, i, uint64(m.MaxTotalBypassMinFeeMsgGasUsage)) + i-- + dAtA[i] = 0x18 + } + if len(m.BypassMinFeeMsgTypes) > 0 { + for iNdEx := len(m.BypassMinFeeMsgTypes) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.BypassMinFeeMsgTypes[iNdEx]) + copy(dAtA[i:], m.BypassMinFeeMsgTypes[iNdEx]) + i = encodeVarintGenesis(dAtA, i, uint64(len(m.BypassMinFeeMsgTypes[iNdEx]))) + i-- + dAtA[i] = 0x12 + } + } + if len(m.MinimumGasPrices) > 0 { + for iNdEx := len(m.MinimumGasPrices) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.MinimumGasPrices[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func encodeVarintGenesis(dAtA []byte, offset int, v uint64) int { + offset -= sovGenesis(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *GenesisState) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Params.Size() + n += 1 + l + sovGenesis(uint64(l)) + return n +} + +func (m *Params) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.MinimumGasPrices) > 0 { + for _, e := range m.MinimumGasPrices { + l = e.Size() + n += 1 + l + sovGenesis(uint64(l)) + } + } + if len(m.BypassMinFeeMsgTypes) > 0 { + for _, s := range m.BypassMinFeeMsgTypes { + l = len(s) + n += 1 + l + sovGenesis(uint64(l)) + } + } + if m.MaxTotalBypassMinFeeMsgGasUsage != 0 { + n += 1 + sovGenesis(uint64(m.MaxTotalBypassMinFeeMsgGasUsage)) + } + return n +} + +func sovGenesis(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozGenesis(x uint64) (n int) { + return sovGenesis(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *GenesisState) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GenesisState: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GenesisState: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenesis(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenesis + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Params) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Params: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Params: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MinimumGasPrices", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.MinimumGasPrices = append(m.MinimumGasPrices, types.DecCoin{}) + if err := m.MinimumGasPrices[len(m.MinimumGasPrices)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field BypassMinFeeMsgTypes", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.BypassMinFeeMsgTypes = append(m.BypassMinFeeMsgTypes, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxTotalBypassMinFeeMsgGasUsage", wireType) + } + m.MaxTotalBypassMinFeeMsgGasUsage = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.MaxTotalBypassMinFeeMsgGasUsage |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipGenesis(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenesis + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenesis(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthGenesis + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupGenesis + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthGenesis + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthGenesis = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenesis = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupGenesis = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/globalfee/types/keys.go b/x/globalfee/types/keys.go new file mode 100644 index 00000000..71b43267 --- /dev/null +++ b/x/globalfee/types/keys.go @@ -0,0 +1,8 @@ +package types + +const ( + // ModuleName is the name of the this module + ModuleName = "globalfee" + + QuerierRoute = ModuleName +) diff --git a/x/globalfee/types/params.go b/x/globalfee/types/params.go new file mode 100644 index 00000000..07e67a98 --- /dev/null +++ b/x/globalfee/types/params.go @@ -0,0 +1,154 @@ +package types + +import ( + "fmt" + "strings" + + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" + ibcclienttypes "github.com/cosmos/ibc-go/v4/modules/core/02-client/types" + ibcchanneltypes "github.com/cosmos/ibc-go/v4/modules/core/04-channel/types" +) + +var ( + // ParamStoreKeyMinGasPrices store key + ParamStoreKeyMinGasPrices = []byte("MinimumGasPricesParam") + ParamStoreKeyBypassMinFeeMsgTypes = []byte("BypassMinFeeMsgTypes") + ParamStoreKeyMaxTotalBypassMinFeeMsgGasUsage = []byte("MaxTotalBypassMinFeeMsgGasUsage") + + // DefaultMinGasPrices is set at runtime to the staking token with zero amount i.e. "0uatom" + // see DefaultZeroGlobalFee method in gaia/x/globalfee/ante/fee.go. + DefaultMinGasPrices = sdk.DecCoins{} + DefaultBypassMinFeeMsgTypes = []string{ + sdk.MsgTypeURL(&ibcchanneltypes.MsgRecvPacket{}), + sdk.MsgTypeURL(&ibcchanneltypes.MsgAcknowledgement{}), + sdk.MsgTypeURL(&ibcclienttypes.MsgUpdateClient{}), + sdk.MsgTypeURL(&ibcchanneltypes.MsgTimeout{}), + sdk.MsgTypeURL(&ibcchanneltypes.MsgTimeoutOnClose{}), + } + + // maxTotalBypassMinFeeMsgGasUsage is the allowed maximum gas usage + // for all the bypass msgs in a transactions. + // A transaction that contains only bypass message types and the gas usage does not + // exceed maxTotalBypassMinFeeMsgGasUsage can be accepted with a zero fee. + // For details, see gaiafeeante.NewFeeDecorator() + DefaultmaxTotalBypassMinFeeMsgGasUsage uint64 = 1_000_000 +) + +// DefaultParams returns default parameters +func DefaultParams() Params { + return Params{ + MinimumGasPrices: DefaultMinGasPrices, + BypassMinFeeMsgTypes: DefaultBypassMinFeeMsgTypes, + MaxTotalBypassMinFeeMsgGasUsage: DefaultmaxTotalBypassMinFeeMsgGasUsage, + } +} + +func ParamKeyTable() paramtypes.KeyTable { + return paramtypes.NewKeyTable().RegisterParamSet(&Params{}) +} + +// ValidateBasic performs basic validation. +func (p Params) ValidateBasic() error { + if err := validateMinimumGasPrices(p.MinimumGasPrices); err != nil { + return err + } + + if err := validateBypassMinFeeMsgTypes(p.BypassMinFeeMsgTypes); err != nil { + return err + } + + return validateMaxTotalBypassMinFeeMsgGasUsage(p.MaxTotalBypassMinFeeMsgGasUsage) +} + +// ParamSetPairs returns the parameter set pairs. +func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs { + return paramtypes.ParamSetPairs{ + paramtypes.NewParamSetPair( + ParamStoreKeyMinGasPrices, &p.MinimumGasPrices, validateMinimumGasPrices, + ), + paramtypes.NewParamSetPair( + ParamStoreKeyBypassMinFeeMsgTypes, &p.BypassMinFeeMsgTypes, validateBypassMinFeeMsgTypes, + ), + paramtypes.NewParamSetPair( + ParamStoreKeyMaxTotalBypassMinFeeMsgGasUsage, &p.MaxTotalBypassMinFeeMsgGasUsage, validateMaxTotalBypassMinFeeMsgGasUsage, + ), + } +} + +func validateMinimumGasPrices(i interface{}) error { + v, ok := i.(sdk.DecCoins) + if !ok { + return sdkerrors.Wrapf(sdkerrors.ErrInvalidType, "type: %T, expected sdk.DecCoins", i) + } + + dec := DecCoins(v) + return dec.Validate() +} + +type BypassMinFeeMsgTypes []string + +// validateBypassMinFeeMsgTypes checks that bypass msg types aren't empty +func validateBypassMinFeeMsgTypes(i interface{}) error { + bypassMinFeeMsgTypes, ok := i.([]string) + if !ok { + return sdkerrors.Wrapf(sdkerrors.ErrInvalidType, "type: %T, expected []sdk.Msg", i) + } + + for _, msgType := range bypassMinFeeMsgTypes { + if msgType == "" { + return fmt.Errorf("invalid empty bypass msg type") + } + + if !strings.HasPrefix(msgType, sdk.MsgTypeURL(nil)) { + return fmt.Errorf("invalid bypass msg type name %s", msgType) + } + } + + return nil +} + +func validateMaxTotalBypassMinFeeMsgGasUsage(i interface{}) error { + _, ok := i.(uint64) + if !ok { + return sdkerrors.Wrapf(sdkerrors.ErrInvalidType, "type: %T, expected uint64", i) + } + + return nil +} + +type DecCoins sdk.DecCoins + +// Validate checks that the DecCoins are sorted, have nonnegtive amount, with a valid and unique +// denomination (i.e no duplicates). Otherwise, it returns an error. +func (coins DecCoins) Validate() error { + if len(coins) == 0 { + return nil + } + + lowDenom := "" + seenDenoms := make(map[string]bool) + + for i, coin := range coins { + if seenDenoms[coin.Denom] { + return fmt.Errorf("duplicate denomination %s", coin.Denom) + } + if err := sdk.ValidateDenom(coin.Denom); err != nil { + return err + } + // skip the denom order check for the first denom in the coins list + if i != 0 && coin.Denom <= lowDenom { + return fmt.Errorf("denomination %s is not sorted", coin.Denom) + } + if coin.IsNegative() { + return fmt.Errorf("coin %s amount is negative", coin.Amount) + } + + // we compare each coin against the last denom + lowDenom = coin.Denom + seenDenoms[coin.Denom] = true + } + + return nil +} diff --git a/x/globalfee/types/params_test.go b/x/globalfee/types/params_test.go new file mode 100644 index 00000000..b2c29316 --- /dev/null +++ b/x/globalfee/types/params_test.go @@ -0,0 +1,156 @@ +package types + +import ( + "testing" + + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/stretchr/testify/require" +) + +func TestDefaultParams(t *testing.T) { + p := DefaultParams() + require.EqualValues(t, p.MinimumGasPrices, sdk.DecCoins{}) + require.EqualValues(t, p.BypassMinFeeMsgTypes, DefaultBypassMinFeeMsgTypes) + require.EqualValues(t, p.MaxTotalBypassMinFeeMsgGasUsage, DefaultmaxTotalBypassMinFeeMsgGasUsage) +} + +func Test_validateMinGasPrices(t *testing.T) { + tests := map[string]struct { + coins interface{} + expectErr bool + }{ + "DefaultParams, pass": { + DefaultParams().MinimumGasPrices, + false, + }, + "DecCoins conversion fails, fail": { + sdk.Coins{sdk.NewCoin("photon", sdk.OneInt())}, + true, + }, + "coins amounts are zero, pass": { + sdk.DecCoins{ + sdk.NewDecCoin("atom", sdk.ZeroInt()), + sdk.NewDecCoin("photon", sdk.ZeroInt()), + }, + false, + }, + "duplicate coins denoms, fail": { + sdk.DecCoins{ + sdk.NewDecCoin("photon", sdk.OneInt()), + sdk.NewDecCoin("photon", sdk.OneInt()), + }, + true, + }, + "coins are not sorted by denom alphabetically, fail": { + sdk.DecCoins{ + sdk.NewDecCoin("photon", sdk.OneInt()), + sdk.NewDecCoin("atom", sdk.OneInt()), + }, + true, + }, + "negative amount, fail": { + sdk.DecCoins{ + sdk.DecCoin{Denom: "photon", Amount: sdk.OneDec().Neg()}, + }, + true, + }, + "invalid denom, fail": { + sdk.DecCoins{ + sdk.DecCoin{Denom: "photon!", Amount: sdk.OneDec().Neg()}, + }, + true, + }, + } + + for name, test := range tests { + t.Run(name, func(t *testing.T) { + err := validateMinimumGasPrices(test.coins) + if test.expectErr { + require.Error(t, err) + return + } + require.NoError(t, err) + }) + } +} + +func Test_validateBypassMinFeeMsgTypes(t *testing.T) { + tests := map[string]struct { + msgTypes interface{} + expectErr bool + }{ + "DefaultParams, pass": { + DefaultParams().BypassMinFeeMsgTypes, + false, + }, + "wrong msg type should make conversion fail, fail": { + []int{0, 1, 2, 3}, + true, + }, + "empty msg types, pass": { + []string{}, + false, + }, + "empty msg type, fail": { + []string{""}, + true, + }, + "invalid msg type name, fail": { + []string{"ibc.core.channel.v1.MsgRecvPacket"}, + true, + }, + "mixed valid and invalid msgs, fail": { + []string{ + "/ibc.core.channel.v1.MsgRecvPacket", + "", + }, + true, + }, + } + + for name, test := range tests { + t.Run(name, func(t *testing.T) { + err := validateBypassMinFeeMsgTypes(test.msgTypes) + if test.expectErr { + require.Error(t, err) + return + } + require.NoError(t, err) + }) + } +} + +func Test_validateMaxTotalBypassMinFeeMsgGasUsage(t *testing.T) { + tests := map[string]struct { + msgTypes interface{} + expectErr bool + }{ + "DefaultParams, pass": { + DefaultParams().MaxTotalBypassMinFeeMsgGasUsage, + false, + }, + "zero value, pass": { + uint64(0), + false, + }, + "negative value, fail": { + -1, + true, + }, + "invalid type, fail": { + "5", + true, + }, + } + + for name, test := range tests { + t.Run(name, func(t *testing.T) { + err := validateMaxTotalBypassMinFeeMsgGasUsage(test.msgTypes) + if test.expectErr { + require.Error(t, err) + return + } + require.NoError(t, err) + }) + } +} diff --git a/x/globalfee/types/query.pb.go b/x/globalfee/types/query.pb.go new file mode 100644 index 00000000..3b73bc45 --- /dev/null +++ b/x/globalfee/types/query.pb.go @@ -0,0 +1,536 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: gaia/globalfee/v1beta1/query.proto + +package types + +import ( + context "context" + fmt "fmt" + _ "github.com/gogo/protobuf/gogoproto" + grpc1 "github.com/gogo/protobuf/grpc" + proto "github.com/gogo/protobuf/proto" + _ "google.golang.org/genproto/googleapis/api/annotations" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// QueryMinimumGasPricesRequest is the request type for the +// Query/MinimumGasPrices RPC method. +type QueryParamsRequest struct { +} + +func (m *QueryParamsRequest) Reset() { *m = QueryParamsRequest{} } +func (m *QueryParamsRequest) String() string { return proto.CompactTextString(m) } +func (*QueryParamsRequest) ProtoMessage() {} +func (*QueryParamsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_12a736cede25d10a, []int{0} +} +func (m *QueryParamsRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryParamsRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryParamsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryParamsRequest.Merge(m, src) +} +func (m *QueryParamsRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryParamsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryParamsRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryParamsRequest proto.InternalMessageInfo + +// QueryMinimumGasPricesResponse is the response type for the +// Query/MinimumGasPrices RPC method. +type QueryParamsResponse struct { + Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` +} + +func (m *QueryParamsResponse) Reset() { *m = QueryParamsResponse{} } +func (m *QueryParamsResponse) String() string { return proto.CompactTextString(m) } +func (*QueryParamsResponse) ProtoMessage() {} +func (*QueryParamsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_12a736cede25d10a, []int{1} +} +func (m *QueryParamsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryParamsResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryParamsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryParamsResponse.Merge(m, src) +} +func (m *QueryParamsResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryParamsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryParamsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryParamsResponse proto.InternalMessageInfo + +func (m *QueryParamsResponse) GetParams() Params { + if m != nil { + return m.Params + } + return Params{} +} + +func init() { + proto.RegisterType((*QueryParamsRequest)(nil), "gaia.globalfee.v1beta1.QueryParamsRequest") + proto.RegisterType((*QueryParamsResponse)(nil), "gaia.globalfee.v1beta1.QueryParamsResponse") +} + +func init() { + proto.RegisterFile("gaia/globalfee/v1beta1/query.proto", fileDescriptor_12a736cede25d10a) +} + +var fileDescriptor_12a736cede25d10a = []byte{ + // 286 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x90, 0x31, 0x4b, 0xc3, 0x40, + 0x14, 0xc7, 0x73, 0xa2, 0x1d, 0xce, 0xed, 0x2c, 0x22, 0x41, 0xce, 0x12, 0x44, 0x8a, 0xc2, 0x1d, + 0xad, 0xab, 0x53, 0x3e, 0x81, 0xd6, 0xcd, 0xed, 0x52, 0x9e, 0x67, 0x20, 0xc9, 0x4b, 0x73, 0x17, + 0xb1, 0xab, 0x9b, 0x9b, 0xd0, 0x2f, 0xd5, 0xb1, 0xe0, 0xe2, 0x24, 0x92, 0xf8, 0x41, 0x24, 0xb9, + 0x20, 0x8a, 0x06, 0xdc, 0x8e, 0x77, 0xbf, 0xf7, 0x7f, 0x3f, 0xfe, 0x34, 0xd0, 0x2a, 0x56, 0x52, + 0x27, 0x18, 0xa9, 0xe4, 0x16, 0x40, 0xde, 0x4f, 0x22, 0xb0, 0x6a, 0x22, 0x17, 0x25, 0x14, 0x4b, + 0x91, 0x17, 0x68, 0x91, 0xed, 0x37, 0x8c, 0xf8, 0x62, 0x44, 0xc7, 0xf8, 0x43, 0x8d, 0x1a, 0x5b, + 0x44, 0x36, 0x2f, 0x47, 0xfb, 0x87, 0x1a, 0x51, 0x27, 0x20, 0x55, 0x1e, 0x4b, 0x95, 0x65, 0x68, + 0x95, 0x8d, 0x31, 0x33, 0xdd, 0xef, 0x71, 0xcf, 0x3d, 0x0d, 0x19, 0x98, 0xb8, 0xa3, 0x82, 0x21, + 0x65, 0x57, 0x8d, 0xc0, 0xa5, 0x2a, 0x54, 0x6a, 0x66, 0xb0, 0x28, 0xc1, 0xd8, 0xe0, 0x9a, 0xee, + 0xfd, 0x98, 0x9a, 0x1c, 0x33, 0x03, 0xec, 0x82, 0x0e, 0xf2, 0x76, 0x72, 0x40, 0x46, 0x64, 0xbc, + 0x3b, 0xe5, 0xe2, 0x6f, 0x5f, 0xe1, 0xf6, 0xc2, 0xed, 0xf5, 0xdb, 0x91, 0x37, 0xeb, 0x76, 0xa6, + 0x2b, 0x42, 0x77, 0xda, 0x54, 0xf6, 0x44, 0xe8, 0xc0, 0x21, 0xec, 0xb4, 0x2f, 0xe2, 0xb7, 0x95, + 0x7f, 0xf6, 0x2f, 0xd6, 0xb9, 0x06, 0x27, 0x8f, 0x2f, 0x1f, 0xab, 0xad, 0x11, 0xe3, 0xb2, 0xa7, + 0x07, 0x67, 0x15, 0x86, 0xeb, 0x8a, 0x93, 0x4d, 0xc5, 0xc9, 0x7b, 0xc5, 0xc9, 0x73, 0xcd, 0xbd, + 0x4d, 0xcd, 0xbd, 0xd7, 0x9a, 0x7b, 0x37, 0x63, 0x1d, 0xdb, 0xbb, 0x32, 0x12, 0x73, 0x4c, 0xe5, + 0x1c, 0x4d, 0x8a, 0xc6, 0x45, 0x3d, 0x7c, 0x0b, 0xb3, 0xcb, 0x1c, 0x4c, 0x34, 0x68, 0xbb, 0x3c, + 0xff, 0x0c, 0x00, 0x00, 0xff, 0xff, 0x01, 0xc5, 0x11, 0x71, 0xe3, 0x01, 0x00, 0x00, +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// QueryClient is the client API for Query service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type QueryClient interface { + Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) +} + +type queryClient struct { + cc grpc1.ClientConn +} + +func NewQueryClient(cc grpc1.ClientConn) QueryClient { + return &queryClient{cc} +} + +func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) { + out := new(QueryParamsResponse) + err := c.cc.Invoke(ctx, "/gaia.globalfee.v1beta1.Query/Params", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// QueryServer is the server API for Query service. +type QueryServer interface { + Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) +} + +// UnimplementedQueryServer can be embedded to have forward compatible implementations. +type UnimplementedQueryServer struct { +} + +func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Params not implemented") +} + +func RegisterQueryServer(s grpc1.Server, srv QueryServer) { + s.RegisterService(&_Query_serviceDesc, srv) +} + +func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryParamsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).Params(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/gaia.globalfee.v1beta1.Query/Params", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _Query_serviceDesc = grpc.ServiceDesc{ + ServiceName: "gaia.globalfee.v1beta1.Query", + HandlerType: (*QueryServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Params", + Handler: _Query_Params_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "gaia/globalfee/v1beta1/query.proto", +} + +func (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryParamsRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *QueryParamsResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryParamsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { + offset -= sovQuery(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *QueryParamsRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *QueryParamsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Params.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func sovQuery(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozQuery(x uint64) (n int) { + return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryParamsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipQuery(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthQuery + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupQuery + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthQuery + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthQuery = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowQuery = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupQuery = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/globalfee/types/query.pb.gw.go b/x/globalfee/types/query.pb.gw.go new file mode 100644 index 00000000..5a24a95a --- /dev/null +++ b/x/globalfee/types/query.pb.gw.go @@ -0,0 +1,153 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: gaia/globalfee/v1beta1/query.proto + +/* +Package types is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package types + +import ( + "context" + "io" + "net/http" + + "github.com/golang/protobuf/descriptor" + "github.com/golang/protobuf/proto" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/grpc-ecosystem/grpc-gateway/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = descriptor.ForMessage +var _ = metadata.Join + +func request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryParamsRequest + var metadata runtime.ServerMetadata + + msg, err := client.Params(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryParamsRequest + var metadata runtime.ServerMetadata + + msg, err := server.Params(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterQueryHandlerServer registers the http handlers for service Query to "mux". +// UnaryRPC :call QueryServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterQueryHandlerFromEndpoint instead. +func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, server QueryServer) error { + + mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_Params_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterQueryHandlerFromEndpoint is same as RegisterQueryHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterQueryHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterQueryHandler(ctx, mux, conn) +} + +// RegisterQueryHandler registers the http handlers for service Query to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterQueryHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterQueryHandlerClient(ctx, mux, NewQueryClient(conn)) +} + +// RegisterQueryHandlerClient registers the http handlers for service Query +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "QueryClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "QueryClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "QueryClient" to call the correct interceptors. +func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, client QueryClient) error { + + mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_Params_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"gaia", "globalfee", "v1beta1", "params"}, "", runtime.AssumeColonVerbOpt(true))) +) + +var ( + forward_Query_Params_0 = runtime.ForwardResponseMessage +) From b0488bfc342a6d0447b46889e283ca3f55bffeed Mon Sep 17 00:00:00 2001 From: Eduardo Diaz Date: Sat, 3 Jun 2023 19:35:25 -0400 Subject: [PATCH 073/501] replace globalfee from gaia --- app/app.go | 2 +- go.work.sum | 1844 +-------------------------------------------------- 2 files changed, 2 insertions(+), 1844 deletions(-) diff --git a/app/app.go b/app/app.go index 825d89f2..3d0e27c4 100644 --- a/app/app.go +++ b/app/app.go @@ -130,7 +130,7 @@ import ( xionkeeper "github.com/burnt-labs/xion/x/xion/keeper" xiontypes "github.com/burnt-labs/xion/x/xion/types" - "github.com/cosmos/gaia/v11/x/globalfee" + "github.com/burnt-labs/xion/x/globalfee" ) const appName = "XionApp" diff --git a/go.work.sum b/go.work.sum index 78eed32e..1a8dec69 100644 --- a/go.work.sum +++ b/go.work.sum @@ -1,2014 +1,172 @@ -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.43.0/go.mod h1:BOSR3VbTLkk6FDC/TcffxP4NF/FFBGA5ku+jvKOP7pg= -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.44.3/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.51.0/go.mod h1:hWtGJ6gnXH+KgDv+V0zFGDvpi07n3z8ZNj3T1RW0Gcw= -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.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= -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 v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= -cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= -cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= -cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= -cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= -cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= -cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= -cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= -cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= -cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= -cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= -cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= cloud.google.com/go v0.107.0/go.mod h1:wpc2eNrD7hXUTy8EKS10jkxpZBjASrORK7goS+3YX2I= -cloud.google.com/go v0.110.0 h1:Zc8gqp3+a9/Eyph2KDmcGaPtbKRIoqq4YTlL4NMD0Ys= -cloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY= cloud.google.com/go/accessapproval v1.5.0/go.mod h1:HFy3tuiGvMdcd/u+Cu5b9NkO1pEICJ46IR82PoUdplw= cloud.google.com/go/accesscontextmanager v1.4.0/go.mod h1:/Kjh7BBu/Gh83sv+K60vN9QE5NJcd80sU33vIe2IFPE= -cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= -cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= cloud.google.com/go/aiplatform v1.27.0/go.mod h1:Bvxqtl40l0WImSb04d0hXFU7gDOiq9jQmorivIiWcKg= -cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= -cloud.google.com/go/analytics v0.12.0/go.mod h1:gkfj9h6XRf9+TS4bmuhPEShsh3hH8PAZzm/41OOhQd4= cloud.google.com/go/apigateway v1.4.0/go.mod h1:pHVY9MKGaH9PQ3pJ4YLzoj6U5FUDeDFBllIz7WmzJoc= cloud.google.com/go/apigeeconnect v1.4.0/go.mod h1:kV4NwOKqjvt2JYR0AoIWo2QGfoRtn/pkS3QlHp0Ni04= cloud.google.com/go/apigeeregistry v0.4.0/go.mod h1:EUG4PGcsZvxOXAdyEghIdXwAEi/4MEaoqLMLDMIwKXY= cloud.google.com/go/apikeys v0.4.0/go.mod h1:XATS/yqZbaBK0HOssf+ALHp8jAlNHUgyfprvNcBIszU= cloud.google.com/go/appengine v1.5.0/go.mod h1:TfasSozdkFI0zeoxW3PTBLiNqRmzraodCWatWI9Dmak= -cloud.google.com/go/area120 v0.5.0/go.mod h1:DE/n4mp+iqVyvxHN41Vf1CR602GiHQjFPusMFW6bGR4= -cloud.google.com/go/area120 v0.6.0/go.mod h1:39yFJqWVgm0UZqWTOdqkLhjoC7uFfgXRC8g/ZegeAh0= -cloud.google.com/go/artifactregistry v1.6.0/go.mod h1:IYt0oBPSAGYj/kprzsBjZ/4LnG/zOcHyFHjWPCi6SAQ= -cloud.google.com/go/artifactregistry v1.7.0/go.mod h1:mqTOFOnGZx8EtSqK/ZWcsm/4U8B77rbcLP6ruDU2Ixk= cloud.google.com/go/artifactregistry v1.9.0/go.mod h1:2K2RqvA2CYvAeARHRkLDhMDJ3OXy26h3XW+3/Jh2uYc= -cloud.google.com/go/asset v1.5.0/go.mod h1:5mfs8UvcM5wHhqtSv8J1CtxxaQq3AdBxxQi2jGW/K4o= -cloud.google.com/go/asset v1.7.0/go.mod h1:YbENsRK4+xTiL+Ofoj5Ckf+O17kJtgp3Y3nn4uzZz5s= -cloud.google.com/go/asset v1.8.0/go.mod h1:mUNGKhiqIdbr8X7KNayoYvyc4HbbFO9URsjbytpUaW0= cloud.google.com/go/asset v1.10.0/go.mod h1:pLz7uokL80qKhzKr4xXGvBQXnzHn5evJAEAtZiIb0wY= -cloud.google.com/go/assuredworkloads v1.5.0/go.mod h1:n8HOZ6pff6re5KYfBXcFvSViQjDwxFkAkmUFffJRbbY= -cloud.google.com/go/assuredworkloads v1.6.0/go.mod h1:yo2YOk37Yc89Rsd5QMVECvjaMKymF9OP+QXWlKXUkXw= -cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVoYoxeLBoj4XkKYscNI= cloud.google.com/go/assuredworkloads v1.9.0/go.mod h1:kFuI1P78bplYtT77Tb1hi0FMxM0vVpRC7VVoJC3ZoT0= -cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= -cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8= cloud.google.com/go/automl v1.8.0/go.mod h1:xWx7G/aPEe/NP+qzYXktoBSDfjO+vnKMGgsApGJJquM= cloud.google.com/go/baremetalsolution v0.4.0/go.mod h1:BymplhAadOO/eBa7KewQ0Ppg4A4Wplbn+PsFKRLo0uI= cloud.google.com/go/batch v0.4.0/go.mod h1:WZkHnP43R/QCGQsZ+0JyG4i79ranE2u8xvjq/9+STPE= cloud.google.com/go/beyondcorp v0.3.0/go.mod h1:E5U5lcrcXMsCuoDNyGrpyTm/hn7ne941Jz2vmksAxW8= -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/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA= cloud.google.com/go/bigquery v1.44.0/go.mod h1:0Y33VqXTEsbamHJvJHdFmtqHvMIY28aK1+dFsvaChGc= -cloud.google.com/go/bigtable v1.2.0/go.mod h1:JcVAOl45lrTmQfLj7T6TxyMzIN/3FGGcFm+2xVAli2o= -cloud.google.com/go/billing v1.4.0/go.mod h1:g9IdKBEFlItS8bTtlrZdVLWSSdSyFUZKXNS02zKMOZY= -cloud.google.com/go/billing v1.5.0/go.mod h1:mztb1tBc3QekhjSgmpf/CV4LzWXLzCArwpLmP2Gm88s= cloud.google.com/go/billing v1.7.0/go.mod h1:q457N3Hbj9lYwwRbnlD7vUpyjq6u5U1RAOArInEiD5Y= -cloud.google.com/go/binaryauthorization v1.1.0/go.mod h1:xwnoWu3Y84jbuHa0zd526MJYmtnVXn0syOjaJgy4+dM= -cloud.google.com/go/binaryauthorization v1.2.0/go.mod h1:86WKkJHtRcv5ViNABtYMhhNWRrD1Vpi//uKEy7aYEfI= cloud.google.com/go/binaryauthorization v1.4.0/go.mod h1:tsSPQrBd77VLplV70GUhBf/Zm3FsKmgSqgm4UmiDItk= cloud.google.com/go/certificatemanager v1.4.0/go.mod h1:vowpercVFyqs8ABSmrdV+GiFf2H/ch3KyudYQEMM590= cloud.google.com/go/channel v1.9.0/go.mod h1:jcu05W0my9Vx4mt3/rEHpfxc9eKi9XwsdDL8yBMbKUk= cloud.google.com/go/cloudbuild v1.4.0/go.mod h1:5Qwa40LHiOXmz3386FrjrYM93rM/hdRr7b53sySrTqA= cloud.google.com/go/clouddms v1.4.0/go.mod h1:Eh7sUGCC+aKry14O1NRljhjyrr0NFC0G2cjwX0cByRk= -cloud.google.com/go/cloudtasks v1.5.0/go.mod h1:fD92REy1x5woxkKEkLdvavGnPJGEn8Uic9nWuLzqCpY= -cloud.google.com/go/cloudtasks v1.6.0/go.mod h1:C6Io+sxuke9/KNRkbQpihnW93SWDU3uXt92nu85HkYI= cloud.google.com/go/cloudtasks v1.8.0/go.mod h1:gQXUIwCSOI4yPVK7DgTVFiiP0ZW/eQkydWzwVMdHxrI= -cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= -cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= -cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= -cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s= -cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= -cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= -cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= cloud.google.com/go/compute v1.14.0/go.mod h1:YfLtxrj9sU4Yxv+sXzZkyPjEyPBZfXHUvjxega5vAdo= cloud.google.com/go/compute v1.15.1/go.mod h1:bjjoF/NtFUrkD/urWfdHaKuOPDR5nWIs63rR+SXhcpA= -cloud.google.com/go/compute v1.18.0 h1:FEigFqoDbys2cvFkZ9Fjq4gnHBP55anJ0yQyau2f9oY= -cloud.google.com/go/compute v1.18.0/go.mod h1:1X7yHxec2Ga+Ss6jPyjxRxpu2uu7PLgsOVXvgU0yacs= cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= -cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= -cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= cloud.google.com/go/contactcenterinsights v1.4.0/go.mod h1:L2YzkGbPsv+vMQMCADxJoT9YiTTnSEd6fEvCeHTYVck= cloud.google.com/go/container v1.7.0/go.mod h1:Dp5AHtmothHGX3DwwIHPgq45Y8KmNsgN3amoYfxVkLo= -cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= -cloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4= -cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0= -cloud.google.com/go/datacatalog v1.5.0/go.mod h1:M7GPLNQeLfWqeIm3iuiruhPzkt65+Bx8dAKvScX8jvs= -cloud.google.com/go/datacatalog v1.6.0/go.mod h1:+aEyF8JKg+uXcIdAmmaMUmZ3q1b/lKLtXCmXdnc0lbc= cloud.google.com/go/datacatalog v1.8.0/go.mod h1:KYuoVOv9BM8EYz/4eMFxrr4DUKhGIOXxZoKYF5wdISM= -cloud.google.com/go/dataflow v0.6.0/go.mod h1:9QwV89cGoxjjSR9/r7eFDqqjtvbKxAK2BaYU6PVk9UM= -cloud.google.com/go/dataflow v0.7.0/go.mod h1:PX526vb4ijFMesO1o202EaUmouZKBpjHsTlCtB4parQ= -cloud.google.com/go/dataform v0.3.0/go.mod h1:cj8uNliRlHpa6L3yVhDOBrUXH+BPAO1+KFMQQNSThKo= -cloud.google.com/go/dataform v0.4.0/go.mod h1:fwV6Y4Ty2yIFL89huYlEkwUPtS7YZinZbzzj5S9FzCE= cloud.google.com/go/dataform v0.5.0/go.mod h1:GFUYRe8IBa2hcomWplodVmUx/iTL0FrsauObOM3Ipr0= cloud.google.com/go/datafusion v1.5.0/go.mod h1:Kz+l1FGHB0J+4XF2fud96WMmRiq/wj8N9u007vyXZ2w= -cloud.google.com/go/datalabeling v0.5.0/go.mod h1:TGcJ0G2NzcsXSE/97yWjIZO0bXj0KbVlINXMG9ud42I= -cloud.google.com/go/datalabeling v0.6.0/go.mod h1:WqdISuk/+WIGeMkpw/1q7bK/tFEZxsrFJOJdY2bXvTQ= cloud.google.com/go/dataplex v1.4.0/go.mod h1:X51GfLXEMVJ6UN47ESVqvlsRplbLhcsAt0kZCCKsU0A= cloud.google.com/go/dataproc v1.8.0/go.mod h1:5OW+zNAH0pMpw14JVrPONsxMQYMBqJuzORhIBfBn9uI= -cloud.google.com/go/dataqna v0.5.0/go.mod h1:90Hyk596ft3zUQ8NkFfvICSIfHFh1Bc7C4cK3vbhkeo= -cloud.google.com/go/dataqna v0.6.0/go.mod h1:1lqNpM7rqNLVgWBJyk5NF6Uen2PHym0jtVJonplVsDA= -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/datastore v1.10.0/go.mod h1:PC5UzAmDEkAmkfaknstTYbNpgE49HAgW2J1gcgUfmdM= -cloud.google.com/go/datastream v1.2.0/go.mod h1:i/uTP8/fZwgATHS/XFu0TcNUhuA0twZxxQ3EyCUQMwo= -cloud.google.com/go/datastream v1.3.0/go.mod h1:cqlOX8xlyYF/uxhiKn6Hbv6WjwPPuI9W2M9SAXwaLLQ= cloud.google.com/go/datastream v1.5.0/go.mod h1:6TZMMNPwjUqZHBKPQ1wwXpb0d5VDVPl2/XoS5yi88q4= cloud.google.com/go/deploy v1.5.0/go.mod h1:ffgdD0B89tToyW/U/D2eL0jN2+IEV/3EMuXHA0l4r+s= -cloud.google.com/go/dialogflow v1.15.0/go.mod h1:HbHDWs33WOGJgn6rfzBW1Kv807BE3O1+xGbn59zZWI4= -cloud.google.com/go/dialogflow v1.16.1/go.mod h1:po6LlzGfK+smoSmTBnbkIZY2w8ffjz/RcGSS+sh1el0= -cloud.google.com/go/dialogflow v1.17.0/go.mod h1:YNP09C/kXA1aZdBgC/VtXX74G/TKn7XVCcVumTflA+8= cloud.google.com/go/dialogflow v1.29.0/go.mod h1:b+2bzMe+k1s9V+F2jbJwpHPzrnIyHihAdRFMtn2WXuM= cloud.google.com/go/dlp v1.7.0/go.mod h1:68ak9vCiMBjbasxeVD17hVPxDEck+ExiHavX8kiHG+Q= -cloud.google.com/go/documentai v1.7.0/go.mod h1:lJvftZB5NRiFSX4moiye1SMxHx0Bc3x1+p9e/RfXYiU= -cloud.google.com/go/documentai v1.8.0/go.mod h1:xGHNEB7CtsnySCNrCFdCyyMz44RhFEEX2Q7UD0c5IhU= cloud.google.com/go/documentai v1.10.0/go.mod h1:vod47hKQIPeCfN2QS/jULIvQTugbmdc0ZvxxfQY1bg4= -cloud.google.com/go/domains v0.6.0/go.mod h1:T9Rz3GasrpYk6mEGHh4rymIhjlnIuB4ofT1wTxDeT4Y= -cloud.google.com/go/domains v0.7.0/go.mod h1:PtZeqS1xjnXuRPKE/88Iru/LdfoRyEHYA9nFQf4UKpg= -cloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk= -cloud.google.com/go/edgecontainer v0.2.0/go.mod h1:RTmLijy+lGpQ7BXuTDa4C4ssxyXT34NIuHIgKuP4s5w= cloud.google.com/go/errorreporting v0.3.0/go.mod h1:xsP2yaAp+OAW4OIm60An2bbLpqIhKXdWR/tawvl7QzU= cloud.google.com/go/essentialcontacts v1.4.0/go.mod h1:8tRldvHYsmnBCHdFpvU+GL75oWiBKl80BiqlFh9tp+8= cloud.google.com/go/eventarc v1.8.0/go.mod h1:imbzxkyAU4ubfsaKYdQg04WS1NvncblHEup4kvF+4gw= cloud.google.com/go/filestore v1.4.0/go.mod h1:PaG5oDfo9r224f8OYXURtAsY+Fbyq/bLYoINEK8XQAI= cloud.google.com/go/firestore v1.9.0/go.mod h1:HMkjKHNTtRyZNiMzu7YAsLr9K3X2udY2AMwDaMEQiiE= -cloud.google.com/go/functions v1.6.0/go.mod h1:3H1UA3qiIPRWD7PeZKLvHZ9SaQhR26XIJcC0A5GbvAk= -cloud.google.com/go/functions v1.7.0/go.mod h1:+d+QBcWM+RsrgZfV9xo6KfA1GlzJfxcfZcRPEhDDfzg= cloud.google.com/go/functions v1.9.0/go.mod h1:Y+Dz8yGguzO3PpIjhLTbnqV1CWmgQ5UwtlpzoyquQ08= -cloud.google.com/go/gaming v1.5.0/go.mod h1:ol7rGcxP/qHTRQE/RO4bxkXq+Fix0j6D4LFPzYTIrDM= -cloud.google.com/go/gaming v1.6.0/go.mod h1:YMU1GEvA39Qt3zWGyAVA9bpYz/yAhTvaQ1t2sK4KPUA= cloud.google.com/go/gaming v1.8.0/go.mod h1:xAqjS8b7jAVW0KFYeRUxngo9My3f33kFmua++Pi+ggM= cloud.google.com/go/gkebackup v0.3.0/go.mod h1:n/E671i1aOQvUxT541aTkCwExO/bTer2HDlj4TsBRAo= -cloud.google.com/go/gkeconnect v0.5.0/go.mod h1:c5lsNAg5EwAy7fkqX/+goqFsU1Da/jQFqArp+wGNr/o= -cloud.google.com/go/gkeconnect v0.6.0/go.mod h1:Mln67KyU/sHJEBY8kFZ0xTeyPtzbq9StAVvEULYK16A= -cloud.google.com/go/gkehub v0.9.0/go.mod h1:WYHN6WG8w9bXU0hqNxt8rm5uxnk8IH+lPY9J2TV7BK0= -cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y977wO+hBH0= cloud.google.com/go/gkemulticloud v0.4.0/go.mod h1:E9gxVBnseLWCk24ch+P9+B2CoDFJZTyIgLKSalC7tuI= -cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= cloud.google.com/go/gsuiteaddons v1.4.0/go.mod h1:rZK5I8hht7u7HxFQcFei0+AtfS9uSushomRlg+3ua1o= -cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= -cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= cloud.google.com/go/iam v0.8.0/go.mod h1:lga0/y3iH6CX7sYqypWJ33hf7kkfXJag67naqGESjkE= cloud.google.com/go/iam v0.11.0/go.mod h1:9PiLDanza5D+oWFZiH1uG+RnRCfEGKoyl6yo4cgWZGY= -cloud.google.com/go/iam v0.12.0 h1:DRtTY29b75ciH6Ov1PHb4/iat2CLCvrOm40Q0a6DFpE= -cloud.google.com/go/iam v0.12.0/go.mod h1:knyHGviacl11zrtZUoDuYpDgLjvr28sLQaG0YB2GYAY= cloud.google.com/go/iap v1.5.0/go.mod h1:UH/CGgKd4KyohZL5Pt0jSKE4m3FR51qg6FKQ/z/Ix9A= cloud.google.com/go/ids v1.2.0/go.mod h1:5WXvp4n25S0rA/mQWAg1YEEBBq6/s+7ml1RDCW1IrcY= cloud.google.com/go/iot v1.4.0/go.mod h1:dIDxPOn0UvNDUMD8Ger7FIaTuvMkj+aGk94RPP0iV+g= cloud.google.com/go/kms v1.6.0/go.mod h1:Jjy850yySiasBUDi6KFUwUv2n1+o7QZFyuUJg6OgjA0= -cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= -cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= cloud.google.com/go/language v1.8.0/go.mod h1:qYPVHf7SPoNNiCL2Dr0FfEFNil1qi3pQEyygwpgVKB8= -cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= -cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= cloud.google.com/go/logging v1.6.1/go.mod h1:5ZO0mHHbvm8gEmeEUHrmDlTDSu5imF6MUP9OfilNXBw= cloud.google.com/go/longrunning v0.3.0/go.mod h1:qth9Y41RRSUE69rDcOn6DdK3HfQfsUI0YSmW3iIlLJc= cloud.google.com/go/managedidentities v1.4.0/go.mod h1:NWSBYbEMgqmbZsLIyKvxrYbtqOsxY1ZrGM+9RgDqInM= cloud.google.com/go/maps v0.1.0/go.mod h1:BQM97WGyfw9FWEmQMpZ5T6cpovXXSd1cGmFma94eubI= -cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= -cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= -cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= -cloud.google.com/go/memcache v1.5.0/go.mod h1:dk3fCK7dVo0cUU2c36jKb4VqKPS22BTkf81Xq617aWM= cloud.google.com/go/memcache v1.7.0/go.mod h1:ywMKfjWhNtkQTxrWxCkCFkoPjLHPW6A7WOTVI8xy3LY= -cloud.google.com/go/metastore v1.5.0/go.mod h1:2ZNrDcQwghfdtCwJ33nM0+GrBGlVuh8rakL3vdPY3XY= -cloud.google.com/go/metastore v1.6.0/go.mod h1:6cyQTls8CWXzk45G55x57DVQ9gWg7RiH65+YgPsNh9s= cloud.google.com/go/metastore v1.8.0/go.mod h1:zHiMc4ZUpBiM7twCIFQmJ9JMEkDSyZS9U12uf7wHqSI= cloud.google.com/go/monitoring v1.8.0/go.mod h1:E7PtoMJ1kQXWxPjB6mv2fhC5/15jInuulFdYYtlcvT4= -cloud.google.com/go/networkconnectivity v1.4.0/go.mod h1:nOl7YL8odKyAOtzNX73/M5/mGZgqqMeryi6UPZTk/rA= -cloud.google.com/go/networkconnectivity v1.5.0/go.mod h1:3GzqJx7uhtlM3kln0+x5wyFvuVH1pIBJjhCpjzSt75o= cloud.google.com/go/networkconnectivity v1.7.0/go.mod h1:RMuSbkdbPwNMQjB5HBWD5MpTBnNm39iAVpC3TmsExt8= cloud.google.com/go/networkmanagement v1.5.0/go.mod h1:ZnOeZ/evzUdUsnvRt792H0uYEnHQEMaz+REhhzJRcf4= -cloud.google.com/go/networksecurity v0.5.0/go.mod h1:xS6fOCoqpVC5zx15Z/MqkfDwH4+m/61A3ODiDV1xmiQ= -cloud.google.com/go/networksecurity v0.6.0/go.mod h1:Q5fjhTr9WMI5mbpRYEbiexTzROf7ZbDzvzCrNl14nyU= -cloud.google.com/go/notebooks v1.2.0/go.mod h1:9+wtppMfVPUeJ8fIWPOq1UnATHISkGXGqTkxeieQ6UY= -cloud.google.com/go/notebooks v1.3.0/go.mod h1:bFR5lj07DtCPC7YAAJ//vHskFBxA5JzYlH68kXVdk34= cloud.google.com/go/notebooks v1.5.0/go.mod h1:q8mwhnP9aR8Hpfnrc5iN5IBhrXUy8S2vuYs+kBJ/gu0= cloud.google.com/go/optimization v1.2.0/go.mod h1:Lr7SOHdRDENsh+WXVmQhQTrzdu9ybg0NecjHidBq6xs= cloud.google.com/go/orchestration v1.4.0/go.mod h1:6W5NLFWs2TlniBphAViZEVhrXRSMgUGDfW7vrWKvsBk= cloud.google.com/go/orgpolicy v1.5.0/go.mod h1:hZEc5q3wzwXJaKrsx5+Ewg0u1LxJ51nNFlext7Tanwc= -cloud.google.com/go/osconfig v1.7.0/go.mod h1:oVHeCeZELfJP7XLxcBGTMBvRO+1nQ5tFG9VQTmYS2Fs= -cloud.google.com/go/osconfig v1.8.0/go.mod h1:EQqZLu5w5XA7eKizepumcvWx+m8mJUhEwiPqWiZeEdg= cloud.google.com/go/osconfig v1.10.0/go.mod h1:uMhCzqC5I8zfD9zDEAfvgVhDS8oIjySWh+l4WK6GnWw= -cloud.google.com/go/oslogin v1.4.0/go.mod h1:YdgMXWRaElXz/lDk1Na6Fh5orF7gvmJ0FGLIs9LId4E= -cloud.google.com/go/oslogin v1.5.0/go.mod h1:D260Qj11W2qx/HVF29zBg+0fd6YCSjSqLUkY/qEenQU= cloud.google.com/go/oslogin v1.7.0/go.mod h1:e04SN0xO1UNJ1M5GP0vzVBFicIe4O53FOfcixIqTyXo= -cloud.google.com/go/phishingprotection v0.5.0/go.mod h1:Y3HZknsK9bc9dMi+oE8Bim0lczMU6hrX0UpADuMefr0= -cloud.google.com/go/phishingprotection v0.6.0/go.mod h1:9Y3LBLgy0kDTcYET8ZH3bq/7qni15yVUoAxiFxnlSUA= cloud.google.com/go/policytroubleshooter v1.4.0/go.mod h1:DZT4BcRw3QoO8ota9xw/LKtPa8lKeCByYeKTIf/vxdE= -cloud.google.com/go/privatecatalog v0.5.0/go.mod h1:XgosMUvvPyxDjAVNDYxJ7wBW8//hLDDYmnsNcMGq1K0= -cloud.google.com/go/privatecatalog v0.6.0/go.mod h1:i/fbkZR0hLN29eEWiiwue8Pb+GforiEIBnV9yrRUOKI= -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/pubsub v1.27.1/go.mod h1:hQN39ymbV9geqBnfQq6Xf63yNhUAhv9CZhzp5O6qsW0= cloud.google.com/go/pubsublite v1.5.0/go.mod h1:xapqNQ1CuLfGi23Yda/9l4bBCKz/wC3KIJ5gKcxveZg= -cloud.google.com/go/recaptchaenterprise v1.3.1/go.mod h1:OdD+q+y4XGeAlxRaMn1Y7/GveP6zmq76byL6tjPE7d4= -cloud.google.com/go/recaptchaenterprise/v2 v2.1.0/go.mod h1:w9yVqajwroDNTfGuhmOjPDN//rZGySaf6PtFVcSCa7o= -cloud.google.com/go/recaptchaenterprise/v2 v2.2.0/go.mod h1:/Zu5jisWGeERrd5HnlS3EUGb/D335f9k51B/FVil0jk= -cloud.google.com/go/recaptchaenterprise/v2 v2.3.0/go.mod h1:O9LwGCjrhGHBQET5CA7dd5NwwNQUErSgEDit1DLNTdo= cloud.google.com/go/recaptchaenterprise/v2 v2.5.0/go.mod h1:O8LzcHXN3rz0j+LBC91jrwI3R+1ZSZEWrfL7XHgNo9U= -cloud.google.com/go/recommendationengine v0.5.0/go.mod h1:E5756pJcVFeVgaQv3WNpImkFP8a+RptV6dDLGPILjvg= -cloud.google.com/go/recommendationengine v0.6.0/go.mod h1:08mq2umu9oIqc7tDy8sx+MNJdLG0fUi3vaSVbztHgJ4= -cloud.google.com/go/recommender v1.5.0/go.mod h1:jdoeiBIVrJe9gQjwd759ecLJbxCDED4A6p+mqoqDvTg= -cloud.google.com/go/recommender v1.6.0/go.mod h1:+yETpm25mcoiECKh9DEScGzIRyDKpZ0cEhWGo+8bo+c= cloud.google.com/go/recommender v1.8.0/go.mod h1:PkjXrTT05BFKwxaUxQmtIlrtj0kph108r02ZZQ5FE70= -cloud.google.com/go/redis v1.7.0/go.mod h1:V3x5Jq1jzUcg+UNsRvdmsfuFnit1cfe3Z/PGyq/lm4Y= -cloud.google.com/go/redis v1.8.0/go.mod h1:Fm2szCDavWzBk2cDKxrkmWBqoCiL1+Ctwq7EyqBCA/A= cloud.google.com/go/redis v1.10.0/go.mod h1:ThJf3mMBQtW18JzGgh41/Wld6vnDDc/F/F35UolRZPM= cloud.google.com/go/resourcemanager v1.4.0/go.mod h1:MwxuzkumyTX7/a3n37gmsT3py7LIXwrShilPh3P1tR0= cloud.google.com/go/resourcesettings v1.4.0/go.mod h1:ldiH9IJpcrlC3VSuCGvjR5of/ezRrOxFtpJoJo5SmXg= -cloud.google.com/go/retail v1.8.0/go.mod h1:QblKS8waDmNUhghY2TI9O3JLlFk8jybHeV4BF19FrE4= -cloud.google.com/go/retail v1.9.0/go.mod h1:g6jb6mKuCS1QKnH/dpu7isX253absFl6iE92nHwlBUY= cloud.google.com/go/retail v1.11.0/go.mod h1:MBLk1NaWPmh6iVFSz9MeKG/Psyd7TAgm6y/9L2B4x9Y= cloud.google.com/go/run v0.3.0/go.mod h1:TuyY1+taHxTjrD0ZFk2iAR+xyOXEA0ztb7U3UNA0zBo= -cloud.google.com/go/scheduler v1.4.0/go.mod h1:drcJBmxF3aqZJRhmkHQ9b3uSSpQoltBPGPxGAWROx6s= -cloud.google.com/go/scheduler v1.5.0/go.mod h1:ri073ym49NW3AfT6DZi21vLZrG07GXr5p3H1KxN5QlI= cloud.google.com/go/scheduler v1.7.0/go.mod h1:jyCiBqWW956uBjjPMMuX09n3x37mtyPJegEWKxRsn44= -cloud.google.com/go/secretmanager v1.6.0/go.mod h1:awVa/OXF6IiyaU1wQ34inzQNc4ISIDIrId8qE5QGgKA= cloud.google.com/go/secretmanager v1.9.0/go.mod h1:b71qH2l1yHmWQHt9LC80akm86mX8AL6X1MA01dW8ht4= -cloud.google.com/go/security v1.5.0/go.mod h1:lgxGdyOKKjHL4YG3/YwIL2zLqMFCKs0UbQwgyZmfJl4= -cloud.google.com/go/security v1.7.0/go.mod h1:mZklORHl6Bg7CNnnjLH//0UlAlaXqiG7Lb9PsPXLfD0= -cloud.google.com/go/security v1.8.0/go.mod h1:hAQOwgmaHhztFhiQ41CjDODdWP0+AE1B3sX4OFlq+GU= cloud.google.com/go/security v1.10.0/go.mod h1:QtOMZByJVlibUT2h9afNDWRZ1G96gVywH8T5GUSb9IA= -cloud.google.com/go/securitycenter v1.13.0/go.mod h1:cv5qNAqjY84FCN6Y9z28WlkKXyWsgLO832YiWwkCWcU= -cloud.google.com/go/securitycenter v1.14.0/go.mod h1:gZLAhtyKv85n52XYWt6RmeBdydyxfPeTrpToDPw4Auc= cloud.google.com/go/securitycenter v1.16.0/go.mod h1:Q9GMaLQFUD+5ZTabrbujNWLtSLZIZF7SAR0wWECrjdk= cloud.google.com/go/servicecontrol v1.5.0/go.mod h1:qM0CnXHhyqKVuiZnGKrIurvVImCs8gmqWsDoqe9sU1s= -cloud.google.com/go/servicedirectory v1.4.0/go.mod h1:gH1MUaZCgtP7qQiI+F+A+OpeKF/HQWgtAddhTbhL2bs= -cloud.google.com/go/servicedirectory v1.5.0/go.mod h1:QMKFL0NUySbpZJ1UZs3oFAmdvVxhhxB6eJ/Vlp73dfg= cloud.google.com/go/servicedirectory v1.7.0/go.mod h1:5p/U5oyvgYGYejufvxhgwjL8UVXjkuw7q5XcG10wx1U= cloud.google.com/go/servicemanagement v1.5.0/go.mod h1:XGaCRe57kfqu4+lRxaFEAuqmjzF0r+gWHjWqKqBvKFo= cloud.google.com/go/serviceusage v1.4.0/go.mod h1:SB4yxXSaYVuUBYUml6qklyONXNLt83U0Rb+CXyhjEeU= cloud.google.com/go/shell v1.4.0/go.mod h1:HDxPzZf3GkDdhExzD/gs8Grqk+dmYcEjGShZgYa9URw= cloud.google.com/go/spanner v1.41.0/go.mod h1:MLYDBJR/dY4Wt7ZaMIQ7rXOTLjYrmxLE/5ve9vFfWos= -cloud.google.com/go/speech v1.6.0/go.mod h1:79tcr4FHCimOp56lwC01xnt/WPJZc4v3gzyT7FoBkCM= -cloud.google.com/go/speech v1.7.0/go.mod h1:KptqL+BAQIhMsj1kOP2la5DSEEerPDuOP/2mmkhHhZQ= cloud.google.com/go/speech v1.9.0/go.mod h1:xQ0jTcmnRFFM2RfX/U+rk6FQNUF6DQlydUSyoooSpco= -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= -cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= -cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= -cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= -cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= cloud.google.com/go/storage v1.28.1/go.mod h1:Qnisd4CqDdo6BGs2AD5LLnEsmSQ80wQ5ogcBBKhU86Y= -cloud.google.com/go/storage v1.29.0 h1:6weCgzRvMg7lzuUurI4697AqIRPU1SvzHhynwpW31jI= -cloud.google.com/go/storage v1.29.0/go.mod h1:4puEjyTKnku6gfKoTfNOU/W+a9JyuVNxjpS5GBrB8h4= cloud.google.com/go/storagetransfer v1.6.0/go.mod h1:y77xm4CQV/ZhFZH75PLEXY0ROiS7Gh6pSKrM8dJyg6I= -cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= -cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= cloud.google.com/go/talent v1.4.0/go.mod h1:ezFtAgVuRf8jRsvyE6EwmbTK5LKciD4KVnHuDEFmOOA= cloud.google.com/go/texttospeech v1.5.0/go.mod h1:oKPLhR4n4ZdQqWKURdwxMy0uiTS1xU161C8W57Wkea4= cloud.google.com/go/tpu v1.4.0/go.mod h1:mjZaX8p0VBgllCzF6wcU2ovUXN9TONFLd7iz227X2Xg= cloud.google.com/go/trace v1.4.0/go.mod h1:UG0v8UBqzusp+z63o7FK74SdFE+AXpCLdFb1rshXG+Y= cloud.google.com/go/translate v1.4.0/go.mod h1:06Dn/ppvLD6WvA5Rhdp029IX2Mi3Mn7fpMRLPvXT5Wg= cloud.google.com/go/video v1.9.0/go.mod h1:0RhNKFRF5v92f8dQt0yhaHrEuH95m068JYOvLZYnJSw= -cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= -cloud.google.com/go/videointelligence v1.7.0/go.mod h1:k8pI/1wAhjznARtVT9U1llUaFNPh7muw8QyOUpavru4= cloud.google.com/go/videointelligence v1.9.0/go.mod h1:29lVRMPDYHikk3v8EdPSaL8Ku+eMzDljjuvRs105XoU= -cloud.google.com/go/vision v1.2.0/go.mod h1:SmNwgObm5DpFBme2xpyOyasvBc1aPdjvMk2bBk0tKD0= -cloud.google.com/go/vision/v2 v2.2.0/go.mod h1:uCdV4PpN1S0jyCyq8sIM42v2Y6zOLkZs+4R9LrGYwFo= -cloud.google.com/go/vision/v2 v2.3.0/go.mod h1:UO61abBx9QRMFkNBbf1D8B1LXdS2cGiiCRx0vSpZoUo= cloud.google.com/go/vision/v2 v2.5.0/go.mod h1:MmaezXOOE+IWa+cS7OhRRLK2cNv1ZL98zhqFFZaaH2E= cloud.google.com/go/vmmigration v1.3.0/go.mod h1:oGJ6ZgGPQOFdjHuocGcLqX4lc98YQ7Ygq8YQwHh9A7g= cloud.google.com/go/vmwareengine v0.1.0/go.mod h1:RsdNEf/8UDvKllXhMz5J40XxDrNJNN4sagiox+OI208= cloud.google.com/go/vpcaccess v1.5.0/go.mod h1:drmg4HLk9NkZpGfCmZ3Tz0Bwnm2+DKqViEpeEpOq0m8= -cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xXZmFiHmGE= -cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= cloud.google.com/go/webrisk v1.7.0/go.mod h1:mVMHgEYH0r337nmt1JyLthzMr6YxwN1aAIEc2fTcq7A= cloud.google.com/go/websecurityscanner v1.4.0/go.mod h1:ebit/Fp0a+FWu5j4JOmJEV8S8CzdTkAS77oDsiSqYWQ= -cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= -cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= cloud.google.com/go/workflows v1.9.0/go.mod h1:ZGkj1aFIOd9c8Gerkjjq7OW7I5+l6cSvT3ujaO/WwSA= -collectd.org v0.3.0/go.mod h1:A/8DzQBkF6abtvrT2j/AU/4tiBgJWYyh0y/oB/4MlWE= -cosmossdk.io/api v0.3.1 h1:NNiOclKRR0AOlO4KIqeaG6PS6kswOMhHD0ir0SscNXE= -cosmossdk.io/api v0.3.1/go.mod h1:DfHfMkiNA2Uhy8fj0JJlOCYOBp4eWUUJ1te5zBGNyIw= -cosmossdk.io/core v0.5.1 h1:vQVtFrIYOQJDV3f7rw4pjjVqc1id4+mE0L9hHP66pyI= -cosmossdk.io/core v0.5.1/go.mod h1:KZtwHCLjcFuo0nmDc24Xy6CRNEL9Vl/MeimQ2aC7NLE= -cosmossdk.io/depinject v1.0.0-alpha.3 h1:6evFIgj//Y3w09bqOUOzEpFj5tsxBqdc5CfkO7z+zfw= -cosmossdk.io/depinject v1.0.0-alpha.3/go.mod h1:eRbcdQ7MRpIPEM5YUJh8k97nxHpYbc3sMUnEtt8HPWU= -cosmossdk.io/errors v1.0.0-beta.7 h1:gypHW76pTQGVnHKo6QBkb4yFOJjC+sUGRc5Al3Odj1w= -cosmossdk.io/errors v1.0.0-beta.7/go.mod h1:mz6FQMJRku4bY7aqS/Gwfcmr/ue91roMEKAmDUDpBfE= -cosmossdk.io/math v1.0.0 h1:ro9w7eKx23om2tZz/VM2Pf+z2WAbGX1yDQQOJ6iGeJw= -cosmossdk.io/math v1.0.0/go.mod h1:Ygz4wBHrgc7g0N+8+MrnTfS9LLn9aaTGa9hKopuym5k= -cosmossdk.io/tools/rosetta v0.2.1 h1:ddOMatOH+pbxWbrGJKRAawdBkPYLfKXutK9IETnjYxw= -cosmossdk.io/tools/rosetta v0.2.1/go.mod h1:Pqdc1FdvkNV3LcNIkYWt2RQY6IP1ge6YWZk8MhhO9Hw= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek= -filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= -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/Azure/azure-sdk-for-go/sdk/azcore v0.21.1/go.mod h1:fBF9PQNqB8scdgpZ3ufzaLntG0AG7C1WjPMsiFOmfHM= -github.com/Azure/azure-sdk-for-go/sdk/internal v0.8.3/go.mod h1:KLF4gFr6DcKFZwSuH8w8yEK6DpFl3LP5rhdvAb7Yz5I= -github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.3.0/go.mod h1:tPaiy8S5bQ+S5sOiDlINkp7+Ef339+Nz5L5XO+cnOHo= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak= -github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= -github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= -github.com/ChainSafe/go-schnorrkel v1.0.0 h1:3aDA67lAykLaG1y3AOjs88dMxC88PgUuHRrLeDnvGIM= -github.com/ChainSafe/go-schnorrkel v1.0.0/go.mod h1:dpzHYVxLZcp8pjlV+O+UR8K0Hp/z7vcchBSbMBEhCw4= -github.com/CosmWasm/wasmd v0.40.0-rc.0 h1:QhJzLSWQCjUjrEPO2dc61WgafnaxetuKZRBHUfKJR84= -github.com/CosmWasm/wasmd v0.40.0-rc.0/go.mod h1:9MispMuIWmjs6HlgRx+XPLfOD0y1k7iQx5KIE2cNGTc= -github.com/CosmWasm/wasmvm v1.2.2 h1:F1lTaMRYxk91V9ufV8gYhzLea7sd6AG/GvY1h2JtZsY= -github.com/CosmWasm/wasmvm v1.2.2/go.mod h1:vW/E3h8j9xBQs9bCoijDuawKo9kCtxOaS8N8J7KFtkc= -github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= -github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= -github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= -github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= -github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= -github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= -github.com/StirlingMarketingGroup/go-namecase v1.0.0 h1:2CzaNtCzc4iNHirR+5ru9OzGg8rQp860gqLBFqRI02Y= -github.com/StirlingMarketingGroup/go-namecase v1.0.0/go.mod h1:ZsoSKcafcAzuBx+sndbxHu/RjDcDTrEdT4UvhniHfio= -github.com/VictoriaMetrics/fastcache v1.6.0/go.mod h1:0qHz5QP0GMX4pfmMA/zt5RgfNuXJrTP0zS7DqpHGGTw= -github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= -github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= -github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= -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/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= -github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= -github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/apache/arrow/go/arrow v0.0.0-20191024131854-af6fa24be0db/go.mod h1:VTxUBvSJ3s3eHAg65PNgrsn5BtqCRPdmyXh6rAfdxN0= -github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= -github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= -github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= -github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= -github.com/armon/go-metrics v0.4.1 h1:hR91U9KYmb6bLBYLQjyM+3j+rcd/UhE+G78SFnF8gJA= -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/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= +cosmossdk.io/simapp v0.0.0-20230224204036-a6adb0821462 h1:g8muUHnXL8vhld2Sjilyhb1UQObc+x9GVuDK43TYZns= github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI= -github.com/avast/retry-go/v4 v4.3.3 h1:G56Bp6mU0b5HE1SkaoVjscZjlQb0oy4mezwY/cGH19w= -github.com/avast/retry-go/v4 v4.3.3/go.mod h1:rg6XFaiuFYII0Xu3RDbZQkxCofFwruZKW8oEF1jpWiU= -github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= -github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.44.122/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= -github.com/aws/aws-sdk-go v1.44.203 h1:pcsP805b9acL3wUqa4JR2vg1k2wnItkDYNvfmcy6F+U= -github.com/aws/aws-sdk-go v1.44.203/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= -github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= -github.com/aws/aws-sdk-go-v2 v1.2.0/go.mod h1:zEQs02YRBw1DjK0PoJv3ygDYOFTre1ejlJWl8FwAuQo= -github.com/aws/aws-sdk-go-v2/config v1.1.1/go.mod h1:0XsVy9lBI/BCXm+2Tuvt39YmdHwS5unDQmxZOYe8F5Y= -github.com/aws/aws-sdk-go-v2/credentials v1.1.1/go.mod h1:mM2iIjwl7LULWtS6JCACyInboHirisUUdkBPoTHMOUo= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.0.2/go.mod h1:3hGg3PpiEjHnrkrlasTfxFqUsZ2GCk/fMUn4CbKgSkM= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.0.2/go.mod h1:45MfaXZ0cNbeuT0KQ1XJylq8A6+OpVV2E5kvY/Kq+u8= -github.com/aws/aws-sdk-go-v2/service/route53 v1.1.1/go.mod h1:rLiOUrPLW/Er5kRcQ7NkwbjlijluLsrIbu/iyl35RO4= -github.com/aws/aws-sdk-go-v2/service/sso v1.1.1/go.mod h1:SuZJxklHxLAXgLTc1iFXbEWkXs7QRTQpCLGaKIprQW0= -github.com/aws/aws-sdk-go-v2/service/sts v1.1.1/go.mod h1:Wi0EBZwiz/K44YliU0EKxqTCJGUfYTWXrrBwkq736bM= -github.com/aws/smithy-go v1.1.0/go.mod h1:EzMw8dbp/YJL4A5/sbhGddag+NPT7q084agLbB9LgIw= -github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= -github.com/benbjohnson/clock v1.3.0/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/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas= -github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4= -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/bmizerany/pat v0.0.0-20170815010413-6226ea591a40/go.mod h1:8rLXio+WjiTceGBHIoTvn60HIbs7Hm7bcHjyrSqYB9c= -github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= -github.com/btcsuite/btcd v0.22.0-beta h1:LTDpDKUM5EeOFBPM8IXpinEcmZ6FWfNZbE3lfrfdnWo= -github.com/btcsuite/btcd/btcec/v2 v2.1.2/go.mod h1:ctjw4H1kknNJmRN4iP1R7bTQ+v3GJkZBd6mui8ZsAZE= -github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= -github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= -github.com/btcsuite/btcd/chaincfg/chainhash v1.0.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= -github.com/burnt-labs/interchaintest/v7 v7.0.0-20230404233655-f37b60cca9b6 h1:ek5Y7blC3YSDZ34GrGxjT7wo4F6PgrdSDYYKf2ILOOw= -github.com/burnt-labs/interchaintest/v7 v7.0.0-20230404233655-f37b60cca9b6/go.mod h1:+Tg2jC5C0eI2iOTs24OYs0NgSjU4Bw5XAQ5HVkVMwzc= -github.com/c-bata/go-prompt v0.2.2/go.mod h1:VzqtzE2ksDBcdln8G7mk2RX9QyGjH+OVqOCSiVIqS34= -github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= -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.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= -github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= -github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw= -github.com/centrifuge/go-substrate-rpc-client/v4 v4.0.12 h1:DCYWIBOalB0mKKfUg2HhtGgIkBbMA1fnlnkZp7fHB18= -github.com/centrifuge/go-substrate-rpc-client/v4 v4.0.12/go.mod h1:5g1oM4Zu3BOaLpsKQ+O8PAv2kNuq+kPcA1VzFbsSqxE= -github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= -github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= -github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/logex v1.2.1/go.mod h1:JLbx6lG2kDbNRFnfkgvh4eRJRPX1QCoOIWomwysCBrQ= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/readline v1.5.1 h1:upd/6fQk4src78LMRzh5vItIt361/o4uq553V8B5sGI= -github.com/chzyer/readline v1.5.1/go.mod h1:Eh+b79XXUwfKfcPLepksvw2tcLE/Ct21YObkaSkeBlk= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/chzyer/test v1.0.0/go.mod h1:2JlltgoNkt4TW/z9V/IzDdFaMTM2JPIi26O1pF38GC8= -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/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cloudflare/cloudflare-go v0.14.0/go.mod h1:EnwdgGMaFOruiPZRFSgn+TsQ3hQ7C/YWzIGLeu5c304= -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/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= -github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20220314180256-7f1daf1720fc/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20230105202645-06c439db220b/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cockroachdb/apd/v2 v2.0.2 h1:weh8u7Cneje73dDh+2tEVLUvyBc89iwepWCD8b8034E= -github.com/cockroachdb/apd/v2 v2.0.2/go.mod h1:DDxRlzC2lo3/vSlmSoS7JkqbbrARPuFOGr0B9pvN3Gw= -github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= -github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= -github.com/coinbase/rosetta-sdk-go/types v1.0.0 h1:jpVIwLcPoOeCR6o1tU+Xv7r5bMONNbHU7MuEHboiFuA= -github.com/coinbase/rosetta-sdk-go/types v1.0.0/go.mod h1:eq7W2TMRH22GTW0N0beDnN931DW0/WOI1R2sdHNHG4c= -github.com/cometbft/cometbft v0.37.0 h1:M005vBaSaugvYYmNZwJOopynQSjwLoDTwflnQ/I/eYk= -github.com/cometbft/cometbft v0.37.0/go.mod h1:Y2MMMN//O5K4YKd8ze4r9jmk4Y7h0ajqILXbH5JQFVs= -github.com/cometbft/cometbft-db v0.7.0 h1:uBjbrBx4QzU0zOEnU8KxoDl18dMNgDh+zZRUE0ucsbo= -github.com/cometbft/cometbft-db v0.7.0/go.mod h1:yiKJIm2WKrt6x8Cyxtq9YTEcIMPcEe4XPxhgX59Fzf0= -github.com/confio/ics23/go v0.9.0 h1:cWs+wdbS2KRPZezoaaj+qBleXgUk5WOQFMP3CQFGTr4= -github.com/confio/ics23/go v0.9.0/go.mod h1:4LPZ2NYqnYIVRklaozjNR1FScgDJ2s5Xrp+e/mYVRak= -github.com/consensys/bavard v0.1.8-0.20210406032232-f3452dc9b572/go.mod h1:Bpd0/3mZuaj6Sj+PqrmIquiOKy397AKGThQPaGzNXAQ= -github.com/consensys/gnark-crypto v0.4.1-0.20210426202927-39ac3d4b3f1f/go.mod h1:815PAHg3wvysy0SyIqanF8gZ0Y1wjk/hrDHD/iT88+Q= -github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= -github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -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-proto v1.0.0-beta.2 h1:X3OKvWgK9Gsejo0F1qs5l8Qn6xJV/AzgIWR2wZ8Nua8= -github.com/cosmos/cosmos-proto v1.0.0-beta.2/go.mod h1:+XRCLJ14pr5HFEHIUcn51IKXD1Fy3rkEQqt4WqmN4V0= -github.com/cosmos/cosmos-sdk v0.47.0 h1:GKYtBpvjwuDEVix1vdnQpq7PuEOnItuEK0vdAL2cZ5g= -github.com/cosmos/cosmos-sdk v0.47.0/go.mod h1:FTtZbqiHCZ2vun9WrPq6qLQafNKkAuIhLAxzLjr2TiI= -github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= -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.4.2/go.mod h1:cLxOsn1ljAHSV527CHOtaIP91kK6cCrZETRBrkzItWU= -github.com/cosmos/gogoproto v1.4.7 h1:RzYKVnsEC7UIkDnhTIkqEB7LnIQbsySvmNEqPCiPevk= -github.com/cosmos/gogoproto v1.4.7/go.mod h1:gxGePp9qedovvl/StQL2BIJ6qlIBn1+9YxR0IulGBKA= -github.com/cosmos/iavl v0.20.0 h1:fTVznVlepH0KK8NyKq8w+U7c2L6jofa27aFX6YGlm38= -github.com/cosmos/iavl v0.20.0/go.mod h1:WO7FyvaZJoH65+HFOsDir7xU9FWk2w9cHXNW1XHcl7A= -github.com/cosmos/ibc-go/v7 v7.0.0 h1:j4kyywlG0hhDmT9FmSaR5iCIka7Pz7kJTxGWY1nlV9Q= -github.com/cosmos/ibc-go/v7 v7.0.0/go.mod h1:BFh8nKWjr5zeR2OZfhkzdgDzj1+KjRn3aJLpwapStj8= -github.com/cosmos/ics23/go v0.9.1-0.20221207100636-b1abd8678aab h1:I9ialKTQo7248V827Bba4OuKPmk+FPzmTVHsLXaIJWw= -github.com/cosmos/ics23/go v0.9.1-0.20221207100636-b1abd8678aab/go.mod h1:2CwqasX5dSD7Hbp/9b6lhK6BwoBDCBldx7gPKRukR60= -github.com/cosmos/keyring v1.2.0 h1:8C1lBP9xhImmIabyXW4c3vFjjLiBdGCmfLUfeZlV1Yo= -github.com/cosmos/keyring v1.2.0/go.mod h1:fc+wB5KTk9wQ9sDx0kFXB3A0MaeGHM9AwRStKOQ5vOA= -github.com/cosmos/ledger-cosmos-go v0.12.1/go.mod h1:dhO6kj+Y+AHIOgAe4L9HL/6NDdyyth4q238I9yFpD2g= -github.com/cosmos/rosetta-sdk-go v0.10.0 h1:E5RhTruuoA7KTIXUcMicL76cffyeoyvNybzUGSKFTcM= -github.com/cosmos/rosetta-sdk-go v0.10.0/go.mod h1:SImAZkb96YbwvoRkzSMQB6noNJXFgWl/ENIznEoYQI4= -github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= -github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/creachadair/taskgroup v0.4.2 h1:jsBLdAJE42asreGss2xZGZ8fJra7WtwnHWeJFxv2Li8= -github.com/creachadair/taskgroup v0.4.2/go.mod h1:qiXUOSrbwAY3u0JPGTzObbE3yf9hcXHDKBZ2ZjpCbgM= -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/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= -github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= -github.com/dave/jennifer v1.2.0/go.mod h1:fIb+770HOpJ2fmN9EPPKOqm1vMGhB+TwXKMZhrIygKg= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/deckarep/golang-set v1.8.0 h1:sk9/l/KqpunDwP7pSjUg0keiOOLEnOBHzykLrsPppp4= -github.com/deckarep/golang-set v1.8.0/go.mod h1:5nI87KwE7wgsBU1F4GKAw2Qod7p5kyS383rP6+o6qqo= -github.com/decred/base58 v1.0.4 h1:QJC6B0E0rXOPA8U/kw2rP+qiRJsUaE2Er+pYb3siUeA= -github.com/decred/base58 v1.0.4/go.mod h1:jJswKPEdvpFpvf7dsDvFZyLT22xZ9lWqEByX38oGd9E= -github.com/decred/dcrd/chaincfg/chainhash v1.0.2/go.mod h1:BpbrGgrPTr3YJYRN3Bm+D9NuaFd+zGyNeIKgrhCXK60= -github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= -github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= -github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.0 h1:3GIJYXQDAKpLEFriGFN8SbSffak10UXHGdIcFaMPykY= -github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.0/go.mod h1:3s92l0paYkZoIHuj4X93Teg/HB7eGM9x/zokGw+u4mY= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 h1:HbphB4TFFXpv7MNrT52FGrrgVXF1owhMVTHFZIlnvd4= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0/go.mod h1:DZGJHZMqrU4JJqFAWUS2UO1+lbSKsdiOoYi9Zzey7Fc= -github.com/deepmap/oapi-codegen v1.6.0/go.mod h1:ryDa9AgbELGeB+YEXE1dR53yAjHwFvE9iAUlWl9Al3M= -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/v2 v2.2007.4/go.mod h1:vSw/ax2qojzbN6eXHIx6KPKtCSHJN/Uz0X0VPruTIhk= -github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= -github.com/dgraph-io/ristretto v0.1.1/go.mod h1:S1GPSBCYCIhmVNfcth17y2zZtQT6wzkzgwUve0VDWWA= -github.com/dgryski/go-bitstream v0.0.0-20180413035011-3522498ce2c8/go.mod h1:VMaSuZ+SZcx/wljOQKvp5srsbCiKDEb6K2wC4+PiBmQ= -github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= -github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= -github.com/dnaeon/go-vcr v1.1.0/go.mod h1:M7tiix8f0r6mKKJ3Yq/kqU1OYf3MnfmBWVbPx/yU9ko= -github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68= github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v1.4.2-0.20180625184442-8e610b2b55bf/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker v20.10.19+incompatible h1:lzEmjivyNHFHMNAFLXORMBXyGIhw/UP4DvJwvyKYq64= -github.com/docker/docker v20.10.19+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= -github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= -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/dop251/goja v0.0.0-20211011172007-d99e4b8cbf48/go.mod h1:R9ET47fwRVRPZnOGvHxxhuZcbrMCuiqOz3Rlrh4KSnk= -github.com/dop251/goja_nodejs v0.0.0-20210225215109-d91c329300e7/go.mod h1:hn7BA7c8pLvoGndExHudxTDKZ84Pyvv+90pbBjbTz0Y= -github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -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.5.0 h1:3j8ya4Z4kMCwT5nXIKFSV84YS+HdqSSO0VsTQxaLAeM= -github.com/dvsekhvalnov/jose2go v1.5.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB/mPZadG+mhXU= -github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= -github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= -github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= -github.com/eclipse/paho.mqtt.golang v1.2.0/go.mod h1:H9keYFcgq3Qr5OUJm/JZI/i6U7joQ8SYLhZwfeOo6Ts= -github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= -github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= -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/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= -github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= -github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= github.com/envoyproxy/go-control-plane v0.10.3/go.mod h1:fJJn/j26vwOu972OllsvAgJJM//w9BV6Fxbg2LuVd34= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v0.6.7/go.mod h1:dyJXwwfPK2VSqiB9Klm1J6romD608Ba7Hij42vrOBCo= github.com/envoyproxy/protoc-gen-validate v0.9.1/go.mod h1:OKNgG7TCp5pF4d6XftA0++PMirau2/yoOwVac3AbF2w= -github.com/ethereum/go-ethereum v1.10.17 h1:XEcumY+qSr1cZQaWsQs5Kck3FHB0V2RiMHPdTBJ+oT8= -github.com/ethereum/go-ethereum v1.10.17/go.mod h1:Lt5WzjM07XlXc95YzrhosmR4J9Ahd6X2wyEV2SvGhk0= -github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/felixge/httpsnoop v1.0.2 h1:+nS9g82KMXccJ/wp0zyRW9ZBHFETmMGtkk+2CTTrW4o= -github.com/felixge/httpsnoop v1.0.2/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= -github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= -github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= -github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= -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.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= -github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= -github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg= github.com/gdamore/tcell/v2 v2.4.1-0.20210905002822-f057f0a857a1/go.mod h1:Az6Jt+M5idSED2YPGtwnfJV0kXohgdCBPmHGSYc1r04= github.com/gdamore/tcell/v2 v2.6.0/go.mod h1:be9omFATkdr0D9qewWW3d+MEvl5dha+Etb5y65J2H8Y= -github.com/getkin/kin-openapi v0.53.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= -github.com/getkin/kin-openapi v0.61.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= -github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk= -github.com/glycerine/go-unsnap-stream v0.0.0-20180323001048-9f0cb55181dd/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE= -github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24= -github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJpoZOs= -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-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.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= -github.com/go-kit/kit v0.12.0 h1:e4o3o3IsBfAKQh5Qbbiqyfu97Ku7jrO/JbohvztANh4= -github.com/go-kit/kit v0.12.0/go.mod h1:lHd+EkCZPIwYItmGDDRdhinkzX2A1sj+M9biaEaizzs= -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-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-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= -github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= -github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= -github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= -github.com/go-playground/validator/v10 v10.10.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos= -github.com/go-sourcemap/sourcemap v2.1.3+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= -github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= -github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/go-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw= -github.com/go-stack/stack v1.8.1/go.mod h1:dcoOX6HbPZSZptuspn9bctJ+N/CnF5gGygcUP3XYfe4= -github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= -github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= -github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= -github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= -github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= -github.com/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= -github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= -github.com/gogo/googleapis v1.4.1-0.20201022092350-68b0159b7869/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= -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.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= -github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang-jwt/jwt/v4 v4.3.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= -github.com/golang-jwt/jwt/v4 v4.4.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= -github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= -github.com/golang/geo v0.0.0-20190916061304-5b978397cfec/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= -github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ= -github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -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/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= -github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/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.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= -github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= -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.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= -github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= -github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golangci/lint-1 v0.0.0-20181222135242-d2cdd8c08219/go.mod h1:/X8TswGSh1pIozq4ZwCfxS0WA5JGXguxk94ar/4c87Y= -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.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= -github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= -github.com/google/flatbuffers v1.11.0/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.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= -github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -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.1.1-0.20200604201612-c04b05f3adfa/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/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= -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-20201218002935-b9804c9f04c2/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-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= -github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= -github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= -github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= github.com/googleapis/enterprise-certificate-proxy v0.2.1/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= -github.com/googleapis/enterprise-certificate-proxy v0.2.3 h1:yk9/cqRKtT9wXZSsRH9aurXEpJX+U6FLtpYTdC3R06k= -github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= -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/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= -github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= -github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= -github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= -github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= -github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= -github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= -github.com/googleapis/gax-go/v2 v2.7.0 h1:IcsPKeInNvYi7eqSaDjiZqDDKu5rsmunY0Y1YupQSSQ= -github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8= -github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= -github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= -github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= -github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= -github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= -github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= -github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= -github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/graph-gophers/graphql-go v1.3.0/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= -github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= -github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= -github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -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.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks= -github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c/go.mod h1:NMPJylDgVpX0MLRlPy15sqSwOFv/U1GZ2m21JhFfek0= -github.com/gtank/merlin v0.1.1-0.20191105220539-8318aed1a79f/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= -github.com/gtank/merlin v0.1.1 h1:eQ90iG7K9pOhtereWsmyRJ6RAwcP4tHTDBHXNg+u5is= -github.com/gtank/merlin v0.1.1/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= -github.com/gtank/ristretto255 v0.1.2 h1:JEqUCPA1NvLq5DwYtuzigd7ss8fwbYay9fi4/5uMzcc= -github.com/gtank/ristretto255 v0.1.2/go.mod h1:Ph5OpO6c7xKUGROZfWVLiJf9icMDwUeIvY4OmlYW69o= -github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= -github.com/hashicorp/consul/sdk v0.3.0/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/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-getter v1.7.0 h1:bzrYP+qu/gMrL1au7/aDvkoOVGUJpeKBgbqRHACAFDY= -github.com/hashicorp/go-getter v1.7.0/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744= -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-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-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= -github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= -github.com/hashicorp/go-safetemp v1.0.0 h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhEyExpmo= -github.com/hashicorp/go-safetemp v1.0.0/go.mod h1:oaerMy3BhqiTbVye6QuFhFtIceqFoDHxNAB65b+Rj1I= -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-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= -github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -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 v0.5.5-0.20210104140557-80c98217689d h1:dg1dEPuWpEqDnvIw251EVy4zlP8gWbsGj4BsUKCRpYs= -github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= -github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= -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/hdevalence/ed25519consensus v0.1.0 h1:jtBwzzcHuTmFrQN6xQZn6CQEO/V9f7HsjsjeEZ6auqU= -github.com/hdevalence/ed25519consensus v0.1.0/go.mod h1:w3BHWjwJbFU29IRHL1Iqkw3sus+7FctEyM4RqDxYNzo= -github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= -github.com/holiman/uint256 v1.2.0/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/huandu/go-assert v1.1.5/go.mod h1:yOLvuqZwmcHIC5rIzrBhT7D3Q9c3GFnd0JrPVhn/06U= -github.com/huandu/skiplist v1.2.0 h1:gox56QD77HzSC0w+Ws3MH3iie755GBJU1OER3h5VsYw= -github.com/huandu/skiplist v1.2.0/go.mod h1:7v3iFjLcSAzO4fN5B8dvebvo/qsfumiLiDXMrPiHF9w= -github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= -github.com/huin/goupnp v1.0.3-0.20220313090229-ca81a64b4204/go.mod h1:ZxNlw5WqJj6wSsRK5+YfflQGXYfccj5VgQsMNixHM7Y= -github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= github.com/iancoleman/strcase v0.2.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/icza/dyno v0.0.0-20220812133438-f0b6f8a18845 h1:H+uM0Bv88eur3ZSsd2NGKg3YIiuXxwxtlN7HjE66UTU= -github.com/icza/dyno v0.0.0-20220812133438-f0b6f8a18845/go.mod h1:c1tRKs5Tx7E2+uHGSyyncziFjvGpgv4H2HrqXeUQ/Uk= -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.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -github.com/influxdata/flux v0.65.1/go.mod h1:J754/zds0vvpfwuq7Gc2wRdVwEodfpCFM7mYlOw2LqY= -github.com/influxdata/influxdb v1.8.3/go.mod h1:JugdFhsvvI8gadxOI6noqNeeBHvWNTbfYGtiAn+2jhI= -github.com/influxdata/influxdb-client-go/v2 v2.4.0/go.mod h1:vLNHdxTJkIf2mSLvGrpj8TCcISApPoXkaxP8g9uRlW8= -github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= -github.com/influxdata/influxql v1.1.1-0.20200828144457-65d3ef77d385/go.mod h1:gHp9y86a/pxhjJ+zMjNXiQAA197Xk9wLxaz+fGG+kWk= -github.com/influxdata/line-protocol v0.0.0-20180522152040-32c6aa80de5e/go.mod h1:4kt73NQhadE3daL3WhR5EJ/J2ocX0PZzwxQ0gXJ7oFE= -github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= -github.com/influxdata/line-protocol v0.0.0-20210311194329-9aa0e372d097/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= -github.com/influxdata/promql/v2 v2.12.0/go.mod h1:fxOPu+DY0bqCTCECchSRtWfc+0X19ybifQhZoQNF5D8= -github.com/influxdata/roaring v0.4.13-0.20180809181101-fc520f41fab6/go.mod h1:bSgUQ7q5ZLSO+bKBGqJiCBGAl+9DxyW63zLTujjUlOE= -github.com/influxdata/tdigest v0.0.0-20181121200506-bf2b5ad3c0a9/go.mod h1:Js0mqiSBE6Ffsg94weZZ2c+v/ciT8QRHFOap7EKDrR0= -github.com/influxdata/usage-client v0.0.0-20160829180054-6d3895376368/go.mod h1:Wbbw6tYNvwa5dlB6304Sd+82Z3f7PmVZHVKU637d4po= -github.com/ipfs/go-cid v0.2.0 h1:01JTiihFq9en9Vz0lc0VDWvZe/uBonGpzo4THP0vcQ0= -github.com/ipfs/go-cid v0.2.0/go.mod h1:P+HXFDF4CVhaVayiEb4wkAy7zBHxBwsJyt0Y5U6MLro= -github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= -github.com/jedisct1/go-minisign v0.0.0-20190909160543-45766022959e/go.mod h1:G1CVv03EnqU1wYL2dFwXxW2An0az9JTl/ZsqXQeBlkU= -github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= -github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= -github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= -github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= -github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= -github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= -github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -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.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/jsternberg/zap-logfmt v1.0.0/go.mod h1:uvPs/4X51zdkcm5jXl5SYoN+4RK21K8mysFmDaM/h+o= -github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -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/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= -github.com/jwilder/encoding v0.0.0-20170811194829-b4e1701a28ef/go.mod h1:Ct9fl0F6iIOGgxJ5npU/IUOhOhqlVrGjyIZc8/MagT0= -github.com/karalabe/usb v0.0.2/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= -github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= -github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= -github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= -github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/errcheck v1.6.2/go.mod h1:nXw/i/MfnvRHqXa7XXmQMUB0oNFGuBrNI8d8NLy0LPw= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.4.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= -github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= -github.com/klauspost/compress v1.16.3 h1:XuJt9zzcnaz6a16/OU53ZjWp/v7/42WcR5t2a0PcNQY= -github.com/klauspost/compress v1.16.3/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5 h1:2U0HzY8BJ8hVwDKIzp7y4voR9CX/nvcfymLmg2UiOio= -github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= -github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/klauspost/cpuid/v2 v2.2.3 h1:sxCkb+qR91z4vsqw4vGGZlDgPz3G7gjaLyK3V8y70BU= -github.com/klauspost/cpuid/v2 v2.2.3/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= -github.com/klauspost/crc32 v0.0.0-20161016154125-cb6bfca970f6/go.mod h1:+ZoRqAPRLkC4NPOvfYeR5KNOrY6TD+/sAC3HXPZgDYg= -github.com/klauspost/pgzip v1.0.2-0.20170402124221-0bf5dcad4ada/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= -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.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/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= -github.com/labstack/echo/v4 v4.2.1/go.mod h1:AA49e0DZ8kk5jTOOCKNuPR6oTnBS0dYiM4FW1e6jwpg= -github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= -github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= -github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= -github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw= -github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= -github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= -github.com/libp2p/go-libp2p v0.22.0 h1:2Tce0kHOp5zASFKJbNzRElvh0iZwdtG5uZheNW8chIw= -github.com/libp2p/go-libp2p v0.22.0/go.mod h1:UDolmweypBSjQb2f7xutPnwZ/fxioLbMBxSjRksxxU4= -github.com/libp2p/go-libp2p-core v0.20.1 h1:fQz4BJyIFmSZAiTbKV8qoYhEH5Dtv/cVhZbG3Ib/+Cw= -github.com/libp2p/go-libp2p-core v0.20.1/go.mod h1:6zR8H7CvQWgYLsbG4on6oLNSGcyKaYFSEYyDt51+bIY= -github.com/libp2p/go-openssl v0.1.0/go.mod h1:OiOxwPpL3n4xlenjx2h7AwSGaFSC/KZvf6gNdOBQMtc= -github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= -github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= github.com/lyft/protoc-gen-star v0.6.0/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= -github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= -github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= -github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/manifoldco/promptui v0.9.0 h1:3V4HzJk1TtXW1MTZMP7mdlwbBpIinw3HztaIlYthEiA= -github.com/manifoldco/promptui v0.9.0/go.mod h1:ka04sppxSGFAtxX0qhlYQjISsg9mR4GWtQEhdbn6Pgg= -github.com/matryer/moq v0.0.0-20190312154309-6cfb0558e1bd/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= -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.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= -github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-pointer v0.0.1/go.mod h1:2zXcozF6qYGgmsG+SeTZz3oAbFLdD3OWqnUbNvJZAlc= -github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= -github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= -github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= -github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= -github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= -github.com/mimoo/StrobeGo v0.0.0-20220103164710-9a04d6ca976b h1:QrHweqAtyJ9EwCaGHBu1fghwxIPiopAHV06JlXrMHjk= -github.com/mimoo/StrobeGo v0.0.0-20220103164710-9a04d6ca976b/go.mod h1:xxLb2ip6sSUts3g1irPVHyk/DGslwQsNOo9I7smJfNU= -github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g= -github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= -github.com/minio/sha256-simd v1.0.0 h1:v1ta+49hkWZyvaKwrQB8elexRqm6Y0aMLjCNsrYxo6g= -github.com/minio/sha256-simd v1.0.0/go.mod h1:OuYzVNI5vcoYIAmbIvHPl3N3jUzVedXbKy5RFepssQM= -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/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.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= -github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/pointerstructure v1.2.0/go.mod h1:BRAsLI5zgXmw97Lf6s25bs8ohIXc3tViBH44KcwB2g4= -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 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= -github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8= -github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= -github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae/go.mod h1:qAyveg+e4CE+eKJXWVjKXM4ck2QobLqTDytGJbLLhJg= -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/multiformats/go-base32 v0.0.4 h1:+qMh4a2f37b4xTNs6mqitDinryCI+tfO2dRVMN9mjSE= -github.com/multiformats/go-base32 v0.0.4/go.mod h1:jNLFzjPZtp3aIARHbJRZIaPuspdH0J6q39uUM5pnABM= -github.com/multiformats/go-base36 v0.1.0 h1:JR6TyF7JjGd3m6FbLU2cOxhC0Li8z8dLNGQ89tUg4F4= -github.com/multiformats/go-base36 v0.1.0/go.mod h1:kFGE83c6s80PklsHO9sRn2NCoffoRdUUOENyW/Vv6sM= -github.com/multiformats/go-multiaddr v0.6.0 h1:qMnoOPj2s8xxPU5kZ57Cqdr0hHhARz7mFsPMIiYNqzg= -github.com/multiformats/go-multiaddr v0.6.0/go.mod h1:F4IpaKZuPP360tOMn2Tpyu0At8w23aRyVqeK0DbFeGM= -github.com/multiformats/go-multibase v0.1.1 h1:3ASCDsuLX8+j4kx58qnJ4YFq/JWTJpCyDW27ztsVTOI= -github.com/multiformats/go-multibase v0.1.1/go.mod h1:ZEjHE+IsUrgp5mhlEAYjMtZwK1k4haNkcaPg9aoe1a8= -github.com/multiformats/go-multicodec v0.5.0 h1:EgU6cBe/D7WRwQb1KmnBvU7lrcFGMggZVTPtOW9dDHs= -github.com/multiformats/go-multicodec v0.5.0/go.mod h1:DiY2HFaEp5EhEXb/iYzVAunmyX/aSFMxq2KMKfWEues= -github.com/multiformats/go-multihash v0.2.1 h1:aem8ZT0VA2nCHHk7bPJ1BjUbHNciqZC/d16Vve9l108= -github.com/multiformats/go-multihash v0.2.1/go.mod h1:WxoMcYG85AZVQUyRyo9s4wULvW5qrI9vb2Lt6evduFc= -github.com/multiformats/go-varint v0.0.6 h1:gk85QWKxh3TazbLxED/NlDVv8+q+ReFJk7Y2W/KhfNY= -github.com/multiformats/go-varint v0.0.6/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -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/mwitkow/grpc-proxy v0.0.0-20181017164139-0f1106ef9c76/go.mod h1:x5OoJHDHqxHS801UIuhqGl6QdSAEJvtausosHSdazIo= -github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= -github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= -github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= -github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= -github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= -github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= -github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= -github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= -github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= -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/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= -github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= -github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= -github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -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/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/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= -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.0-rc2 h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034= -github.com/opencontainers/image-spec v1.1.0-rc2/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ= -github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= -github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= -github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/opentracing/opentracing-go v1.0.3-0.20180606204148-bd9c31933947/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= -github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= -github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= -github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= -github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= -github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/paulbellamy/ratecounter v0.2.0/go.mod h1:Hfx1hDpSGoqxkVVpBi/IlYD7kChlfo5C6hzIHwPqfFE= -github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -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.0.6 h1:nrzqCb7j9cDFj2coyLNLaZuJTLjWjlaz6nvTvIwycIU= -github.com/pelletier/go-toml/v2 v2.0.6/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek= -github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= -github.com/peterh/liner v1.0.1-0.20180619022028-8c1271fcf47f/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc= -github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= -github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= -github.com/petermattis/goid v0.0.0-20221215004737-a150e88a970d/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= -github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= -github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= -github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pierrec/xxHash v0.1.5 h1:n/jBpwTHiER4xYvK3/CdPVnLDPchj8eTJFFLUb4QHBo= -github.com/pierrec/xxHash v0.1.5/go.mod h1:w2waW5Zoa/Wc4Yqe0wgrIYAGKqRMf7czn2HNKXmuL+I= -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/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= -github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= -github.com/pkg/term v0.0.0-20180730021639-bffc007b7fd5/go.mod h1:eCbImbZ95eXtAUIbLAuAVnBnwf83mjf6QIVH8SHYwqQ= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= -github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= -github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= -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.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw= -github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/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.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4= -github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= -github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= -github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= -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.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= -github.com/prometheus/common v0.40.0 h1:Afz7EVRqGg2Mqqf4JuF9vdvp1pi220m55Pi9T2JnO4Q= -github.com/prometheus/common v0.40.0/go.mod h1:L65ZJPSmfn/UBWLQIHV7dBrKFidB/wPlF1y5TlSt9OE= -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/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.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI= -github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY= -github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ= -github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Unghqrcc= -github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= -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/regen-network/protobuf v1.3.3-alpha.regen.1 h1:OHEc+q5iIAXpqiqFKeLpu5NwTIkVXUs48vFMwzqpqY4= -github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI= -github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= -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/retailnext/hllpp v1.0.1-0.20180308014038-101a6d2f8b52/go.mod h1:RDpi1RftBQPUCDRw6SmxeaREsAaRKnOclghuzp/WRzc= github.com/rivo/tview v0.0.0-20220307222120-9994674d60a8/go.mod h1:WIfMkQNY+oq/mWwtsjOYHIZBuwthioY2srOmljJkTnk= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.3/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= -github.com/rjeczalik/notify v0.9.1/go.mod h1:rKwnCoCGeuQnwBtTSPL9Dad03Vh2n40ePRrjvIXnJho= -github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= -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/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= -github.com/rs/cors v1.8.3 h1:O+qNyWn7Z+F9M0ILBHgMVPuB1xTOucVd5gtaYyXBpRo= -github.com/rs/cors v1.8.3/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= -github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -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/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= -github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= -github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/segmentio/kafka-go v0.1.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= -github.com/segmentio/kafka-go v0.2.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= -github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -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.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= -github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= -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/snikch/goodman v0.0.0-20171125024755-10e37e294daa h1:YJfZp12Z3AFhSBeXOlv4BO55RMwPn2NoQeDsrdWnBtY= -github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa/go.mod h1:oJyF+mSPHbB5mVY2iO9KV3pTt/QbIkGaO8gQ2WrDbP4= -github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= -github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572/go.mod h1:w0SWMsp6j9O/dk4/ZpIhL+3CkG8ofA2vuv7k+ltqUMc= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= -github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= -github.com/spf13/afero v1.9.3 h1:41FoI0fD7OR7mGcKE/aOiLkGreyf8ifIOQmJANWogMk= -github.com/spf13/afero v1.9.3/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= -github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= -github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/cobra v1.6.1 h1:o94oiPyS4KD1mPy2fmcYYHHfCxLqYjJOhGsCHFZtEzA= -github.com/spf13/cobra v1.6.1/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= -github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= -github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= -github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/spf13/viper v1.15.0 h1:js3yy885G8xwJa6iOISGFwd+qlUo5AvyXb7CiihdtiU= -github.com/spf13/viper v1.15.0/go.mod h1:fFcTBJxvhhzSJiZy8n+PeW6t8l+KeT/uTARa0jHOQLA= -github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q= -github.com/strangelove-ventures/go-subkey v1.0.7 h1:cOP/Lajg3uxV/tvspu0m6+0Cu+DJgygkEAbx/s+f35I= -github.com/strangelove-ventures/go-subkey v1.0.7/go.mod h1:E34izOIEm+sZ1YmYawYRquqBQWeZBjVB4pF7bMuhc1c= -github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= -github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= -github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= -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.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/testify v1.2.0/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.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.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= -github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8= -github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= -github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= -github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= -github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c/go.mod h1:ahpPrc7HpcfEWDQRZEmnXMzHY03mLDYMCxeDzy46i+8= -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/tidwall/btree v1.6.0 h1:LDZfKfQIBHGHWSwckhXI0RPSXzlo+KYdjK7FWSqOzzg= -github.com/tidwall/btree v1.6.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= -github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= -github.com/tklauser/go-sysconf v0.3.5/go.mod h1:MkWzOF4RMCshBAMXuhXJs64Rte09mITnppBXY/rYEFI= -github.com/tklauser/numcpus v0.2.2/go.mod h1:x3qojaO3uyYt0i56EW/VUYs7uBvdl2fkfZFu0T9wgjM= -github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= -github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= -github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M= -github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= -github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= -github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= -github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= -github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= -github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= -github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= -github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= -github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= -github.com/willf/bitset v1.1.3/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= -github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= -github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= -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.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -github.com/zondax/hid v0.9.1/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= -github.com/zondax/ledger-go v0.14.1/go.mod h1:fZ3Dqg6qcdXWSOJFKMG8GCTnD7slO/RL2feOQv8K320= -go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.7/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= -go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= -go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= -go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= -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.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= -go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.opentelemetry.io/proto/otlp v0.15.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= -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.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= -go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= -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.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= -go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= -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.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= -go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= -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-20181203042331-505ab145d0a9/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-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-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190909091759-094676da4a83/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/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-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -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-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.7.0 h1:AvwMYaRytfdeVt3u6mLaxYtErKYjxA2OXjJ1HHq6t3A= -golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/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-20190125153040-c74c464bbbf2/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-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= -golang.org/x/exp v0.0.0-20230310171629-522b1b587ee0 h1:LGJsf5LRplCck6jUCH3dBL2dmycNruWNF5xugkSlfXw= -golang.org/x/exp v0.0.0-20230310171629-522b1b587ee0/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= -golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= -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.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= -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/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-20181220203305-927f97764cc3/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-20190125091013-d26f9f9a57f3/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-20200421231249-e086a090c8fd/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-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -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-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210220033124-5f55cee0dc0d/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-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210610132358-84b48f89b13b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/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-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/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.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= -golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= -golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ= -golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= -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-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= -golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= -golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= -golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= -golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= -golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= golang.org/x/oauth2 v0.4.0/go.mod h1:RznEsdpjGAINPTOF0UH/t+xJ75L18YO3Ho6Pyn+uRec= -golang.org/x/oauth2 v0.5.0 h1:HuArIo48skDwlrvM3sEdHXElYslAMsf3KwRkkW4MC4s= -golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I= -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-20220601150217-0de741cfad7f/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.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= -golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -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-20181107165924-66b7b1311ac8/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-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190130150945-aca44879d564/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-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-20190626221950-04f50cda93cb/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-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/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-20191220142924-d4481acd189f/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-20200107162124-548cf772de50/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-20200420163511-1957bb5e6d1f/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-20200826173525-f9321e4c35a6/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-20210104204734-6f8348627aad/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-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210309074719-68d13333faf2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210316164454-77fc1eacc6aa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210420205809-ac73e9fd8988/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/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-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210603125802-9665404d3644/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-20210616094352-59db8d763f22/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-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210819135213-f52c844e1c1c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211210111614-af8b64212486/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-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220315194320-039c03cc5b86/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/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-20220502124256-b6088ccd6cba/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-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.4.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 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= -golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -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-20201210144234-2321bbc49cbf/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.1.0/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 h1:clScbb1cHjoCkyRbWwBEUZ5H/tIFu5TAXIqaZD0Gcjw= -golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= -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.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68= -golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-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.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/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-20181030221726-6c7e314b6563/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-20190206041539-40960b6deb8e/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-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-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-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-20200108203644-89082a384178/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-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= -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/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-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= -golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= -gonum.org/v1/gonum v0.0.0-20181121035319-3f7ecaa7e8ca/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= -gonum.org/v1/gonum v0.6.0/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU= -gonum.org/v1/netlib v0.0.0-20181029234149-ec6d1f5cefe6/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= -gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= -gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= -google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= -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.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= -google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= -google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= -google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= -google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= -google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= -google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= -google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= -google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= -google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= -google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= -google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= -google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= -google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= -google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= -google.golang.org/api v0.77.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= -google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= -google.golang.org/api v0.80.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg= -google.golang.org/api v0.84.0/go.mod h1:NTsGnUFJMYROtiquksZHBWtHfeMC7iYthki7Eq3pa8o= -google.golang.org/api v0.85.0/go.mod h1:AqZf8Ep9uZ2pyTvgL+x0D3Zt0eoT9b5E8fmzfu6FO2g= -google.golang.org/api v0.90.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= -google.golang.org/api v0.93.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= -google.golang.org/api v0.95.0/go.mod h1:eADj+UBuxkh5zlrSntJghuNeg8HwQ1w5lTKkuqaETEI= -google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= -google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= -google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= -google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= google.golang.org/api v0.106.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= google.golang.org/api v0.108.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= -google.golang.org/api v0.110.0 h1:l+rh0KYUooe9JGbGVx71tbFo4SMbMTXK3I3ia2QSEeU= -google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -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-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= -google.golang.org/genproto v0.0.0-20190716160619-c506a9f90610/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -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-20200108215221-bd8f9a0ef82f/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-20200324203455-a04cca1dde73/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/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-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210126160654-44e461bb6506/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-20210226172003-ab064af71705/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-20210329143202-679c6ae281ee/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-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= -google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= -google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= -google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= -google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= -google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= -google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= -google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220314164441-57ef72a4c106/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= -google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= google.golang.org/genproto v0.0.0-20220329172620-7be39ac1afc7/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220628213854-d9e0b6570c03/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220722212130-b98a9ff5e252/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE= -google.golang.org/genproto v0.0.0-20220801145646-83ce21fca29f/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= -google.golang.org/genproto v0.0.0-20220815135757-37a418bb8959/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220817144833-d7fd3f11b9b1/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220829144015-23454907ede3/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220829175752-36a9c930ecbf/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220913154956-18f8339a66a5/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220914142337-ca0e39ece12f/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220915135415-7fd63a7952de/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220916172020-2692e8806bfa/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220919141832-68c03719ef51/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220920201722-2b89144ce006/go.mod h1:ht8XFiar2npT/g4vkk7O0WYS1sHOHbdujxbEp7CJWbw= -google.golang.org/genproto v0.0.0-20220926165614-551eb538f295/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= -google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= -google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqwhZAwq4wsRUaVG555sVgsNmIjRtO7t/JH29U= -google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= -google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= -google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= google.golang.org/genproto v0.0.0-20230124163310-31e0e69b6fc2/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= google.golang.org/genproto v0.0.0-20230209215440-0dfe4f8abfcc/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44 h1:EfLuoKW5WfkgVdDy7dTK8qSbH37AX5mj/MFh+bGPz14= -google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44/go.mod h1:8B0gmkoRebU8ukX6HP+4wrVQUY1+6PkQ44BSyIlflHA= -google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.23.1/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.32.0/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.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= -google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= -google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= -google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= -google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= -google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= -google.golang.org/grpc v1.53.0 h1:LAv2ds7cmFV/XTS3XG1NneeENYrXGmorPxsBbptIjNc= -google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= -google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= -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.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.29.1 h1:7QBf+IK2gx70Ap/hDsOmam3GE0v9HicjfEdAxE62UoM= -google.golang.org/protobuf v1.29.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -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/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= -gopkg.in/cheggaaa/pb.v1 v1.0.27/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= -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/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= -gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= -gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= -gopkg.in/olebedev/go-duktape.v3 v3.0.0-20200619000410-60c24ae608a6/go.mod h1:uAJfkITjFhyEEuUfm7bsmCZRbW5WRq8s9EY8HZ6hCns= -gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/urfave/cli.v1 v1.20.0/go.mod h1:vuBzUtMdQeixQj8LVd+/98pzhxNGQoyuPBlsXHOQNO0= -gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= -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 v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= -gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= -gotest.tools/v3 v3.4.0 h1:ZazjZUfuVeZGLAmlKKuyv3IKP5orXcwtOwDQH6YVr6o= -gotest.tools/v3 v3.4.0/go.mod h1:CtbdzLSsqVhDgMtKsx03ird5YTGB3ar27v0u/yKBW5g= -honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -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= -lukechampine.com/blake3 v1.1.7 h1:GgRMhmdsuK8+ii6UZFDL8Nb+VyMwadAgcJyfYHxG6n0= -lukechampine.com/blake3 v1.1.7/go.mod h1:tkKEOtDkNtklkXtLNEOGNq5tcV90tJiA1vAA12R78LA= -lukechampine.com/uint128 v1.2.0/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= -modernc.org/cc/v3 v3.40.0/go.mod h1:/bTg4dnWkSXowUO6ssQKnOV0yMVxDYNIsIrzqTFDGH0= -modernc.org/ccgo/v3 v3.16.13/go.mod h1:2Quk+5YgpImhPjv2Qsob1DnZ/4som1lJTodubIcoUkY= -modernc.org/libc v1.22.3 h1:D/g6O5ftAfavceqlLOFwaZuA5KYafKwmr30A6iSqoyY= -modernc.org/libc v1.22.3/go.mod h1:MQrloYP209xa2zHome2a8HLiLm6k0UT8CoHpV74tOFw= -modernc.org/mathutil v1.5.0 h1:rV0Ko/6SfM+8G+yKiyI830l3Wuz1zRutdslNoQ0kfiQ= -modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= -modernc.org/memory v1.5.0 h1:N+/8c5rE6EqugZwHii4IFsaJ7MUhoWX07J5tC/iI5Ds= -modernc.org/memory v1.5.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= -modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= -modernc.org/sqlite v1.21.0 h1:4aP4MdUf15i3R3M2mx6Q90WHKz3nZLoz96zlB6tNdow= -modernc.org/sqlite v1.21.0/go.mod h1:XwQ0wZPIh1iKb5mkvCJ3szzbhk+tykC8ZWqTRTgYRwI= -modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw= -modernc.org/token v1.0.1/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= -nhooyr.io/websocket v1.8.6 h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k= -nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= -pgregory.net/rapid v0.5.5 h1:jkgx1TjbQPD/feRoK+S/mXw9e1uj6WilpHrXJowi6oA= -pgregory.net/rapid v0.5.5/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= -rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= -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.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= -sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= -sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= -sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= From 68da91bd0982ac5500cd09c15b2e2f6d76347c81 Mon Sep 17 00:00:00 2001 From: Eduardo Diaz Date: Sat, 3 Jun 2023 20:51:11 -0400 Subject: [PATCH 074/501] fix deprecated dependencies --- x/globalfee/ante/antetest/fee_test.go | 4 ++-- x/globalfee/ante/antetest/fee_test_setup.go | 4 ++-- x/globalfee/ante/fee.go | 2 +- x/globalfee/genesis_test.go | 7 ++++--- x/globalfee/migrations/v2/v2_test/migration_test.go | 4 ++-- x/globalfee/module.go | 2 +- x/globalfee/types/params.go | 4 ++-- 7 files changed, 14 insertions(+), 13 deletions(-) diff --git a/x/globalfee/ante/antetest/fee_test.go b/x/globalfee/ante/antetest/fee_test.go index 60e57679..207ec52d 100644 --- a/x/globalfee/ante/antetest/fee_test.go +++ b/x/globalfee/ante/antetest/fee_test.go @@ -7,8 +7,8 @@ import ( "github.com/cosmos/cosmos-sdk/testutil/testdata" sdk "github.com/cosmos/cosmos-sdk/types" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" - ibcclienttypes "github.com/cosmos/ibc-go/v4/modules/core/02-client/types" - ibcchanneltypes "github.com/cosmos/ibc-go/v4/modules/core/04-channel/types" + ibcclienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" + ibcchanneltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" "github.com/stretchr/testify/suite" xionfeeante "github.com/burnt-labs/xion/x/globalfee/ante" diff --git a/x/globalfee/ante/antetest/fee_test_setup.go b/x/globalfee/ante/antetest/fee_test_setup.go index 80f80f42..e8316e93 100644 --- a/x/globalfee/ante/antetest/fee_test_setup.go +++ b/x/globalfee/ante/antetest/fee_test_setup.go @@ -3,6 +3,8 @@ package antetest import ( "fmt" + tmrand "github.com/cometbft/cometbft/libs/rand" + tmproto "github.com/cometbft/cometbft/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/tx" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" @@ -13,8 +15,6 @@ import ( "github.com/cosmos/cosmos-sdk/x/params/types" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" "github.com/stretchr/testify/suite" - tmrand "github.com/tendermint/tendermint/libs/rand" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" xionfeeante "github.com/burnt-labs/xion/x/globalfee/ante" diff --git a/x/globalfee/ante/fee.go b/x/globalfee/ante/fee.go index 499f486c..4c44a977 100644 --- a/x/globalfee/ante/fee.go +++ b/x/globalfee/ante/fee.go @@ -4,11 +4,11 @@ import ( "errors" "fmt" + tmstrings "github.com/cometbft/cometbft/libs/strings" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" - tmstrings "github.com/tendermint/tendermint/libs/strings" "github.com/burnt-labs/xion/x/globalfee" "github.com/burnt-labs/xion/x/globalfee/types" diff --git a/x/globalfee/genesis_test.go b/x/globalfee/genesis_test.go index a9bae63a..07f76052 100644 --- a/x/globalfee/genesis_test.go +++ b/x/globalfee/genesis_test.go @@ -1,4 +1,5 @@ -package globalfee + +ackage globalfee import ( "testing" @@ -13,8 +14,8 @@ import ( paramstypes "github.com/cosmos/cosmos-sdk/x/params/types" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/tendermint/tendermint/libs/log" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + "github.com/cometbft/cometbft/libs/log" + tmproto "github.com/cometbft/cometbft/proto/tendermint/types" dbm "github.com/tendermint/tm-db" "github.com/burnt-labs/xion/x/globalfee/types" diff --git a/x/globalfee/migrations/v2/v2_test/migration_test.go b/x/globalfee/migrations/v2/v2_test/migration_test.go index 632e5789..1d4a874f 100644 --- a/x/globalfee/migrations/v2/v2_test/migration_test.go +++ b/x/globalfee/migrations/v2/v2_test/migration_test.go @@ -3,6 +3,8 @@ package v2_test import ( "testing" + "github.com/cometbft/cometbft/libs/log" + tmproto "github.com/cometbft/cometbft/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/codec" codectypes "github.com/cosmos/cosmos-sdk/codec/types" "github.com/cosmos/cosmos-sdk/store" @@ -12,8 +14,6 @@ import ( v2 "github.com/cosmos/gaia/v11/x/globalfee/migrations/v2" globalfeetypes "github.com/cosmos/gaia/v11/x/globalfee/types" "github.com/stretchr/testify/require" - "github.com/tendermint/tendermint/libs/log" - tmproto "github.com/tendermint/tendermint/proto/tendermint/types" tmdb "github.com/tendermint/tm-db" ) diff --git a/x/globalfee/module.go b/x/globalfee/module.go index 83642601..ebf16973 100644 --- a/x/globalfee/module.go +++ b/x/globalfee/module.go @@ -5,6 +5,7 @@ import ( "encoding/json" "fmt" + abci "github.com/cometbft/cometbft/abci/types" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/codec" codectypes "github.com/cosmos/cosmos-sdk/codec/types" @@ -15,7 +16,6 @@ import ( "github.com/gorilla/mux" "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/spf13/cobra" - abci "github.com/tendermint/tendermint/abci/types" "github.com/burnt-labs/xion/x/globalfee/client/cli" "github.com/burnt-labs/xion/x/globalfee/keeper" diff --git a/x/globalfee/types/params.go b/x/globalfee/types/params.go index 07e67a98..da530b17 100644 --- a/x/globalfee/types/params.go +++ b/x/globalfee/types/params.go @@ -7,8 +7,8 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" - ibcclienttypes "github.com/cosmos/ibc-go/v4/modules/core/02-client/types" - ibcchanneltypes "github.com/cosmos/ibc-go/v4/modules/core/04-channel/types" + ibcclienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" + ibcchanneltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" ) var ( From df8009f589482948c6abc6cfb9adf0e8d3a8da70 Mon Sep 17 00:00:00 2001 From: Eduardo Diaz Date: Sat, 3 Jun 2023 21:00:39 -0400 Subject: [PATCH 075/501] remove migrations from module --- x/globalfee/genesis_test.go | 162 ------------------ x/globalfee/keeper/migrations.go | 22 --- x/globalfee/migrations/v2/migration.go | 37 ---- .../migrations/v2/v2_test/migration_test.go | 107 ------------ x/globalfee/module.go | 15 -- x/globalfee/querier_test.go | 32 ++++ 6 files changed, 32 insertions(+), 343 deletions(-) delete mode 100644 x/globalfee/genesis_test.go delete mode 100644 x/globalfee/keeper/migrations.go delete mode 100644 x/globalfee/migrations/v2/migration.go delete mode 100644 x/globalfee/migrations/v2/v2_test/migration_test.go diff --git a/x/globalfee/genesis_test.go b/x/globalfee/genesis_test.go deleted file mode 100644 index 07f76052..00000000 --- a/x/globalfee/genesis_test.go +++ /dev/null @@ -1,162 +0,0 @@ - -ackage globalfee - -import ( - "testing" - "time" - - "github.com/cosmos/cosmos-sdk/simapp" - simappparams "github.com/cosmos/cosmos-sdk/simapp/params" - "github.com/cosmos/cosmos-sdk/store" - storetypes "github.com/cosmos/cosmos-sdk/store/types" - sdk "github.com/cosmos/cosmos-sdk/types" - paramskeeper "github.com/cosmos/cosmos-sdk/x/params/keeper" - paramstypes "github.com/cosmos/cosmos-sdk/x/params/types" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - "github.com/cometbft/cometbft/libs/log" - tmproto "github.com/cometbft/cometbft/proto/tendermint/types" - dbm "github.com/tendermint/tm-db" - - "github.com/burnt-labs/xion/x/globalfee/types" -) - -func TestDefaultGenesis(t *testing.T) { - encCfg := simapp.MakeTestEncodingConfig() - gotJSON := AppModuleBasic{}.DefaultGenesis(encCfg.Marshaler) - assert.JSONEq(t, - `{"params":{"minimum_gas_prices":[],"bypass_min_fee_msg_types":["/ibc.core.channel.v1.MsgRecvPacket","/ibc.core.channel.v1.MsgAcknowledgement","/ibc.core.client.v1.MsgUpdateClient","/ibc.core.channel.v1.MsgTimeout","/ibc.core.channel.v1.MsgTimeoutOnClose"], "max_total_bypass_min_fee_msg_gas_usage":"1000000"}}`, - string(gotJSON), string(gotJSON)) -} - -func TestValidateGenesis(t *testing.T) { - encCfg := simapp.MakeTestEncodingConfig() - specs := map[string]struct { - src string - expErr bool - }{ - "all good": { - src: `{"params":{"minimum_gas_prices":[{"denom":"ALX", "amount":"1"}], "bypass_min_fee_msg_types":["/ibc.core.channel.v1.MsgRecvPacket"]}}`, - expErr: false, - }, - "empty minimum": { - src: `{"params":{"minimum_gas_prices":[], "bypass_min_fee_msg_types":[]}}`, - expErr: false, - }, - "minimum and bypass not set": { - src: `{"params":{}}`, - expErr: false, - }, - "minimum not set": { - src: `{"params":{"bypass_min_fee_msg_types":[]}}`, - expErr: false, - }, - "bypass not set": { - src: `{"params":{"minimum_gas_prices":[]}}`, - expErr: false, - }, - "zero amount allowed": { - src: `{"params":{"minimum_gas_prices":[{"denom":"ALX", "amount":"0"}]}}`, - expErr: false, - }, - "duplicate denoms not allowed": { - src: `{"params":{"minimum_gas_prices":[{"denom":"ALX", "amount":"1"},{"denom":"ALX", "amount":"2"}]}}`, - expErr: true, - }, - "negative amounts not allowed": { - src: `{"params":{"minimum_gas_prices":[{"denom":"ALX", "amount":"-1"}]}}`, - expErr: true, - }, - "denom must be sorted": { - src: `{"params":{"minimum_gas_prices":[{"denom":"ZLX", "amount":"1"},{"denom":"ALX", "amount":"2"}]}}`, - expErr: true, - }, - "empty bypass msg types not allowed": { - src: `{"params":{"bypass_min_fee_msg_types":[""]}}`, - expErr: true, - }, - "sorted denoms is allowed": { - src: `{"params":{"minimum_gas_prices":[{"denom":"ALX", "amount":"1"},{"denom":"ZLX", "amount":"2"}]}}`, - expErr: false, - }, - } - for name, spec := range specs { - t.Run(name, func(t *testing.T) { - gotErr := AppModuleBasic{}.ValidateGenesis(encCfg.Marshaler, nil, []byte(spec.src)) - if spec.expErr { - require.Error(t, gotErr) - return - } - require.NoError(t, gotErr) - }) - } -} - -func TestInitExportGenesis(t *testing.T) { - specs := map[string]struct { - src string - exp types.GenesisState - }{ - "single fee": { - src: `{"params":{"minimum_gas_prices":[{"denom":"ALX", "amount":"1"}], "bypass_min_fee_msg_types":["/ibc.core.channel.v1.MsgRecvPacket"]}}`, - exp: types.GenesisState{ - Params: types.Params{ - MinimumGasPrices: sdk.NewDecCoins(sdk.NewDecCoin("ALX", sdk.NewInt(1))), - BypassMinFeeMsgTypes: []string{"/ibc.core.channel.v1.MsgRecvPacket"}, - }, - }, - }, - "multiple fee options": { - src: `{"params":{"minimum_gas_prices":[{"denom":"ALX", "amount":"1"}, {"denom":"BLX", "amount":"0.001"}], "bypass_min_fee_msg_types":["/ibc.core.channel.v1.MsgRecvPacket","/ibc.core.channel.v1.MsgTimeoutOnClose"]}}`, - exp: types.GenesisState{ - Params: types.Params{ - MinimumGasPrices: sdk.NewDecCoins(sdk.NewDecCoin("ALX", sdk.NewInt(1)), - sdk.NewDecCoinFromDec("BLX", sdk.NewDecWithPrec(1, 3))), - BypassMinFeeMsgTypes: []string{"/ibc.core.channel.v1.MsgRecvPacket", "/ibc.core.channel.v1.MsgTimeoutOnClose"}, - }, - }, - }, - "no fee set": { - src: `{"params":{}}`, - exp: types.GenesisState{ - Params: types.Params{ - MinimumGasPrices: sdk.DecCoins{}, - BypassMinFeeMsgTypes: []string{}, - }, - }, - }, - } - for name, spec := range specs { - t.Run(name, func(t *testing.T) { - ctx, encCfg, subspace := setupTestStore(t) - m := NewAppModule(subspace) - m.InitGenesis(ctx, encCfg.Marshaler, []byte(spec.src)) - gotJSON := m.ExportGenesis(ctx, encCfg.Marshaler) - var got types.GenesisState - require.NoError(t, encCfg.Marshaler.UnmarshalJSON(gotJSON, &got)) - assert.Equal(t, spec.exp, got, string(gotJSON)) - }) - } -} - -func setupTestStore(t *testing.T) (sdk.Context, simappparams.EncodingConfig, paramstypes.Subspace) { - t.Helper() - db := dbm.NewMemDB() - ms := store.NewCommitMultiStore(db) - encCfg := simapp.MakeTestEncodingConfig() - keyParams := sdk.NewKVStoreKey(paramstypes.StoreKey) - tkeyParams := sdk.NewTransientStoreKey(paramstypes.TStoreKey) - ms.MountStoreWithDB(keyParams, storetypes.StoreTypeIAVL, db) - ms.MountStoreWithDB(tkeyParams, storetypes.StoreTypeTransient, db) - require.NoError(t, ms.LoadLatestVersion()) - - paramsKeeper := paramskeeper.NewKeeper(encCfg.Marshaler, encCfg.Amino, keyParams, tkeyParams) - - ctx := sdk.NewContext(ms, tmproto.Header{ - Height: 1234567, - Time: time.Date(2020, time.April, 22, 12, 0, 0, 0, time.UTC), - }, false, log.NewNopLogger()) - - subspace := paramsKeeper.Subspace(ModuleName).WithKeyTable(types.ParamKeyTable()) - return ctx, encCfg, subspace -} diff --git a/x/globalfee/keeper/migrations.go b/x/globalfee/keeper/migrations.go deleted file mode 100644 index 92ec456c..00000000 --- a/x/globalfee/keeper/migrations.go +++ /dev/null @@ -1,22 +0,0 @@ -package keeper - -import ( - v2 "github.com/burnt-labs/xion/x/globalfee/migrations/v2" - sdk "github.com/cosmos/cosmos-sdk/types" - paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" -) - -// Migrator is a struct for handling in-place store migrations. -type Migrator struct { - globalfeeSubspace paramtypes.Subspace -} - -// NewMigrator returns a new Migrator. -func NewMigrator(globalfeeSubspace paramtypes.Subspace) Migrator { - return Migrator{globalfeeSubspace: globalfeeSubspace} -} - -// Migrate1to2 migrates from version 1 to 2. -func (m Migrator) Migrate1to2(ctx sdk.Context) error { - return v2.MigrateStore(ctx, m.globalfeeSubspace) -} diff --git a/x/globalfee/migrations/v2/migration.go b/x/globalfee/migrations/v2/migration.go deleted file mode 100644 index 0dee420e..00000000 --- a/x/globalfee/migrations/v2/migration.go +++ /dev/null @@ -1,37 +0,0 @@ -package v2 - -import ( - "github.com/burnt-labs/xion/x/globalfee/types" - sdk "github.com/cosmos/cosmos-sdk/types" - paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" -) - -// MigrateStore performs in-place params migrations of -// BypassMinFeeMsgTypes and MaxTotalBypassMinFeeMsgGasUsage -// from app.toml to globalfee params. -// The migration includes: -// Add bypass-min-fee-msg-types params that are set -// ["/ibc.core.channel.v1.MsgRecvPacket", -// "/ibc.core.channel.v1.MsgAcknowledgement", -// "/ibc.core.client.v1.MsgUpdateClient", -// "/ibc.core.channel.v1.MsgTimeout", -// "/ibc.core.channel.v1.MsgTimeoutOnClose"] as default and -// add MaxTotalBypassMinFeeMsgGasUsage that is set 1_000_000 as default. -func MigrateStore(ctx sdk.Context, globalfeeSubspace paramtypes.Subspace) error { - var oldGlobalMinGasPrices sdk.DecCoins - globalfeeSubspace.Get(ctx, types.ParamStoreKeyMinGasPrices, &oldGlobalMinGasPrices) - defaultParams := types.DefaultParams() - params := types.Params{ - MinimumGasPrices: oldGlobalMinGasPrices, - BypassMinFeeMsgTypes: defaultParams.BypassMinFeeMsgTypes, - MaxTotalBypassMinFeeMsgGasUsage: defaultParams.MaxTotalBypassMinFeeMsgGasUsage, - } - - if !globalfeeSubspace.HasKeyTable() { - globalfeeSubspace = globalfeeSubspace.WithKeyTable(types.ParamKeyTable()) - } - - globalfeeSubspace.SetParamSet(ctx, ¶ms) - - return nil -} diff --git a/x/globalfee/migrations/v2/v2_test/migration_test.go b/x/globalfee/migrations/v2/v2_test/migration_test.go deleted file mode 100644 index 1d4a874f..00000000 --- a/x/globalfee/migrations/v2/v2_test/migration_test.go +++ /dev/null @@ -1,107 +0,0 @@ -package v2_test - -import ( - "testing" - - "github.com/cometbft/cometbft/libs/log" - tmproto "github.com/cometbft/cometbft/proto/tendermint/types" - "github.com/cosmos/cosmos-sdk/codec" - codectypes "github.com/cosmos/cosmos-sdk/codec/types" - "github.com/cosmos/cosmos-sdk/store" - storetypes "github.com/cosmos/cosmos-sdk/store/types" - sdk "github.com/cosmos/cosmos-sdk/types" - paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" - v2 "github.com/cosmos/gaia/v11/x/globalfee/migrations/v2" - globalfeetypes "github.com/cosmos/gaia/v11/x/globalfee/types" - "github.com/stretchr/testify/require" - tmdb "github.com/tendermint/tm-db" -) - -func TestMigrateStore(t *testing.T) { - db := tmdb.NewMemDB() - stateStore := store.NewCommitMultiStore(db) - - storeKey := sdk.NewKVStoreKey(paramtypes.StoreKey) - memStoreKey := storetypes.NewMemoryStoreKey("mem_key") - - stateStore.MountStoreWithDB(storeKey, sdk.StoreTypeIAVL, db) - stateStore.MountStoreWithDB(memStoreKey, sdk.StoreTypeMemory, nil) - require.NoError(t, stateStore.LoadLatestVersion()) - - registry := codectypes.NewInterfaceRegistry() - cdc := codec.NewProtoCodec(registry) - ctx := sdk.NewContext(stateStore, tmproto.Header{}, false, log.NewNopLogger()) - - require.NoError(t, stateStore.LoadLatestVersion()) - - // Create new empty subspace - newSubspace := paramtypes.NewSubspace(cdc, - codec.NewLegacyAmino(), - storeKey, - memStoreKey, - paramtypes.ModuleName, - ) - - // register the subspace with the v11 paramKeyTable - newSubspace = newSubspace.WithKeyTable(globalfeetypes.ParamKeyTable()) - - // check MinGasPrices isn't set - _, ok := getMinGasPrice(newSubspace, ctx) - require.Equal(t, ok, false) - - // set a minGasPrice different that default value - minGasPrices := sdk.NewDecCoins(sdk.NewDecCoin("uatom", sdk.OneInt())) - newSubspace.Set(ctx, globalfeetypes.ParamStoreKeyMinGasPrices, minGasPrices) - require.False(t, minGasPrices.IsEqual(globalfeetypes.DefaultMinGasPrices)) - - // check that the new parameters aren't set - _, ok = getBypassMsgTypes(newSubspace, ctx) - require.Equal(t, ok, false) - _, ok = getMaxTotalBypassMinFeeMsgGasUsage(newSubspace, ctx) - require.Equal(t, ok, false) - - // run global fee migration - err := v2.MigrateStore(ctx, newSubspace) - require.NoError(t, err) - - newMinGasPrices, _ := getMinGasPrice(newSubspace, ctx) - bypassMsgTypes, _ := getBypassMsgTypes(newSubspace, ctx) - maxGas, _ := getMaxTotalBypassMinFeeMsgGasUsage(newSubspace, ctx) - - require.Equal(t, bypassMsgTypes, globalfeetypes.DefaultBypassMinFeeMsgTypes) - require.Equal(t, maxGas, globalfeetypes.DefaultmaxTotalBypassMinFeeMsgGasUsage) - require.Equal(t, minGasPrices, newMinGasPrices) -} - -func getBypassMsgTypes(globalfeeSubspace paramtypes.Subspace, ctx sdk.Context) ([]string, bool) { - bypassMsgs := []string{} - if globalfeeSubspace.Has(ctx, globalfeetypes.ParamStoreKeyBypassMinFeeMsgTypes) { - globalfeeSubspace.Get(ctx, globalfeetypes.ParamStoreKeyBypassMinFeeMsgTypes, &bypassMsgs) - } else { - return bypassMsgs, false - } - - return bypassMsgs, true -} - -func getMaxTotalBypassMinFeeMsgGasUsage(globalfeeSubspace paramtypes.Subspace, ctx sdk.Context) (uint64, bool) { - var maxTotalBypassMinFeeMsgGasUsage uint64 - if globalfeeSubspace.Has(ctx, globalfeetypes.ParamStoreKeyMaxTotalBypassMinFeeMsgGasUsage) { - globalfeeSubspace.Get(ctx, globalfeetypes.ParamStoreKeyMaxTotalBypassMinFeeMsgGasUsage, &maxTotalBypassMinFeeMsgGasUsage) - } else { - return maxTotalBypassMinFeeMsgGasUsage, false - } - - return maxTotalBypassMinFeeMsgGasUsage, true -} - -func getMinGasPrice(globalfeeSubspace paramtypes.Subspace, ctx sdk.Context) (sdk.DecCoins, bool) { - var globalMinGasPrices sdk.DecCoins - if globalfeeSubspace.Has(ctx, globalfeetypes.ParamStoreKeyMinGasPrices) { - globalfeeSubspace.Get(ctx, globalfeetypes.ParamStoreKeyMinGasPrices, &globalMinGasPrices) - } else { - return globalMinGasPrices, false - } - - return globalMinGasPrices, true -} diff --git a/x/globalfee/module.go b/x/globalfee/module.go index ebf16973..3ca36792 100644 --- a/x/globalfee/module.go +++ b/x/globalfee/module.go @@ -3,7 +3,6 @@ package globalfee import ( "context" "encoding/json" - "fmt" abci "github.com/cometbft/cometbft/abci/types" "github.com/cosmos/cosmos-sdk/client" @@ -18,7 +17,6 @@ import ( "github.com/spf13/cobra" "github.com/burnt-labs/xion/x/globalfee/client/cli" - "github.com/burnt-labs/xion/x/globalfee/keeper" "github.com/burnt-labs/xion/x/globalfee/types" ) @@ -109,25 +107,12 @@ func (a AppModule) ExportGenesis(ctx sdk.Context, marshaler codec.JSONCodec) jso func (a AppModule) RegisterInvariants(_ sdk.InvariantRegistry) { } -func (a AppModule) Route() sdk.Route { - return sdk.Route{} -} - func (a AppModule) QuerierRoute() string { return types.QuerierRoute } -func (a AppModule) LegacyQuerierHandler(_ *codec.LegacyAmino) sdk.Querier { - return nil -} - func (a AppModule) RegisterServices(cfg module.Configurator) { types.RegisterQueryServer(cfg.QueryServer(), NewGrpcQuerier(a.paramSpace)) - - m := keeper.NewMigrator(a.paramSpace) - if err := cfg.RegisterMigration(types.ModuleName, 1, m.Migrate1to2); err != nil { - panic(fmt.Sprintf("failed to migrate x/globalfee from version 1 to 2: %v", err)) - } } func (a AppModule) BeginBlock(_ sdk.Context, _ abci.RequestBeginBlock) { diff --git a/x/globalfee/querier_test.go b/x/globalfee/querier_test.go index 88ff5af0..a225e916 100644 --- a/x/globalfee/querier_test.go +++ b/x/globalfee/querier_test.go @@ -2,8 +2,18 @@ package globalfee import ( "testing" + "time" + "cosmossdk.io/simapp" + simappparams "cosmossdk.io/simapp/params" + dbm "github.com/cometbft/cometbft-db" + "github.com/cometbft/cometbft/libs/log" + tmproto "github.com/cometbft/cometbft/proto/tendermint/types" + "github.com/cosmos/cosmos-sdk/store" + storetypes "github.com/cosmos/cosmos-sdk/store/types" sdk "github.com/cosmos/cosmos-sdk/types" + paramskeeper "github.com/cosmos/cosmos-sdk/x/params/keeper" + paramstypes "github.com/cosmos/cosmos-sdk/x/params/types" paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -54,3 +64,25 @@ func TestQueryMinimumGasPrices(t *testing.T) { }) } } + +func setupTestStore(t *testing.T) (sdk.Context, simappparams.EncodingConfig, paramstypes.Subspace) { + t.Helper() + db := dbm.NewMemDB() + ms := store.NewCommitMultiStore(db) + encCfg := simapp.MakeTestEncodingConfig() + keyParams := sdk.NewKVStoreKey(paramstypes.StoreKey) + tkeyParams := sdk.NewTransientStoreKey(paramstypes.TStoreKey) + ms.MountStoreWithDB(keyParams, storetypes.StoreTypeIAVL, db) + ms.MountStoreWithDB(tkeyParams, storetypes.StoreTypeTransient, db) + require.NoError(t, ms.LoadLatestVersion()) + + paramsKeeper := paramskeeper.NewKeeper(encCfg.Marshaler, encCfg.Amino, keyParams, tkeyParams) + + ctx := sdk.NewContext(ms, tmproto.Header{ + Height: 1234567, + Time: time.Date(2020, time.April, 22, 12, 0, 0, 0, time.UTC), + }, false, log.NewNopLogger()) + + subspace := paramsKeeper.Subspace(ModuleName).WithKeyTable(types.ParamKeyTable()) + return ctx, encCfg, subspace +} From e190b2750734144a00397830df98348eadb4d606 Mon Sep 17 00:00:00 2001 From: Eduardo Diaz Date: Sun, 4 Jun 2023 14:36:28 -0400 Subject: [PATCH 076/501] [WIP] build app --- app/ante.go | 9 ++++++--- app/app.go | 2 ++ x/globalfee/types/params.go | 2 +- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/app/ante.go b/app/ante.go index 679e0a0d..7c6c3459 100644 --- a/app/ante.go +++ b/app/ante.go @@ -12,6 +12,8 @@ import ( wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" wasmTypes "github.com/CosmWasm/wasmd/x/wasm/types" + + globalfeeante "github.com/burnt-labs/xion/x/globalfee/ante" ) // HandlerOptions extend the SDK's AnteHandler options by requiring the IBC @@ -22,7 +24,8 @@ type HandlerOptions struct { IBCKeeper *keeper.Keeper WasmConfig *wasmTypes.WasmConfig TXCounterStoreKey storetypes.StoreKey - GlobalFeeSubpsace paramtypes.Subspace + GlobalFeeSubspace paramtypes.Subspace + StakingSubspace paramtypes.Subspace } func NewAnteHandler(options HandlerOptions) (sdk.AnteHandler, error) { @@ -38,7 +41,7 @@ func NewAnteHandler(options HandlerOptions) (sdk.AnteHandler, error) { if options.WasmConfig == nil { return nil, errorsmod.Wrap(sdkerrors.ErrLogic, "wasm config is required for ante builder") } - if opts.GlobalFeeSubspace.Name() == "" { + if options.GlobalFeeSubspace.Name() == "" { return nil, sdkerrors.Wrap(sdkerrors.ErrNotFound, "globalfee param store is required for AnteHandler") } if options.TXCounterStoreKey == nil { @@ -54,7 +57,7 @@ func NewAnteHandler(options HandlerOptions) (sdk.AnteHandler, error) { ante.NewTxTimeoutHeightDecorator(), ante.NewValidateMemoDecorator(options.AccountKeeper), ante.NewConsumeGasForTxSizeDecorator(options.AccountKeeper), - gaiafeeante.NewFeeDecorator(opts.GlobalFeeSubspace, opts.StakingSubspace), + globalfeeante.NewFeeDecorator(options.GlobalFeeSubspace, options.StakingSubspace), ante.NewDeductFeeDecorator(options.AccountKeeper, options.BankKeeper, options.FeegrantKeeper, options.TxFeeChecker), ante.NewSetPubKeyDecorator(options.AccountKeeper), // SetPubKeyDecorator must be called before all signature verification decorators ante.NewValidateSigCountDecorator(options.AccountKeeper), diff --git a/app/app.go b/app/app.go index 3d0e27c4..a66dadea 100644 --- a/app/app.go +++ b/app/app.go @@ -880,6 +880,7 @@ func (app *WasmApp) setAnteHandler(txConfig client.TxConfig, wasmConfig wasmtype WasmConfig: &wasmConfig, TXCounterStoreKey: txCounterStoreKey, GlobalFeeSubspace: app.GetSubspace(globalfee.ModuleName), + StakingSubspace: app.GetSubspace(stakingtypes.ModuleName), }, ) if err != nil { @@ -1080,6 +1081,7 @@ func initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino paramsKeeper.Subspace(icacontrollertypes.SubModuleName) paramsKeeper.Subspace(xiontypes.ModuleName) paramsKeeper.Subspace(wasm.ModuleName) + paramsKeeper.Subspace(globalfee.ModuleName) return paramsKeeper } diff --git a/x/globalfee/types/params.go b/x/globalfee/types/params.go index da530b17..a365e915 100644 --- a/x/globalfee/types/params.go +++ b/x/globalfee/types/params.go @@ -18,7 +18,7 @@ var ( ParamStoreKeyMaxTotalBypassMinFeeMsgGasUsage = []byte("MaxTotalBypassMinFeeMsgGasUsage") // DefaultMinGasPrices is set at runtime to the staking token with zero amount i.e. "0uatom" - // see DefaultZeroGlobalFee method in gaia/x/globalfee/ante/fee.go. + // see DefaultZeroGlobalFee method in xion/x/globalfee/ante/fee.go. DefaultMinGasPrices = sdk.DecCoins{} DefaultBypassMinFeeMsgTypes = []string{ sdk.MsgTypeURL(&ibcchanneltypes.MsgRecvPacket{}), From abfe2b16f1ab0962c767760a2508ca44a492678b Mon Sep 17 00:00:00 2001 From: Ash Date: Fri, 9 Jun 2023 00:22:35 +0200 Subject: [PATCH 077/501] go mod bump --- go.mod | 44 +- go.sum | 88 +- go.work.sum | 2407 ++++++++++++--------------------------------------- 3 files changed, 637 insertions(+), 1902 deletions(-) diff --git a/go.mod b/go.mod index 63e54593..5df84811 100644 --- a/go.mod +++ b/go.mod @@ -3,11 +3,11 @@ module github.com/burnt-labs/xion go 1.19 require ( - github.com/CosmWasm/wasmvm v1.2.2 + github.com/CosmWasm/wasmvm v1.2.2 // indirect github.com/cosmos/cosmos-proto v1.0.0-beta.2 - github.com/cosmos/cosmos-sdk v0.47.0 + github.com/cosmos/cosmos-sdk v0.47.3 github.com/cosmos/gogogateway v1.2.0 // indirect - github.com/cosmos/gogoproto v1.4.7 + github.com/cosmos/gogoproto v1.4.10 github.com/cosmos/iavl v0.20.0 // indirect github.com/cosmos/ibc-go/v7 v7.0.0 github.com/cosmos/ics23/go v0.9.1-0.20221207100636-b1abd8678aab // indirect @@ -26,8 +26,8 @@ require ( github.com/spf13/pflag v1.0.5 // indirect github.com/stretchr/testify v1.8.2 github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d - google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44 - google.golang.org/grpc v1.53.0 + google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4 + google.golang.org/grpc v1.55.0 gopkg.in/yaml.v2 v2.4.0 // indirect ) @@ -36,11 +36,11 @@ require ( cosmossdk.io/core v0.5.1 cosmossdk.io/depinject v1.0.0-alpha.3 cosmossdk.io/errors v1.0.0-beta.7 - cosmossdk.io/math v1.0.0 + cosmossdk.io/math v1.0.1 cosmossdk.io/tools/rosetta v0.2.1 github.com/CosmWasm/wasmd v0.40.0-rc.0 github.com/armon/go-metrics v0.4.1 - github.com/cometbft/cometbft v0.37.0 + github.com/cometbft/cometbft v0.37.1 github.com/cometbft/cometbft-db v0.7.0 github.com/golang/mock v1.6.0 github.com/spf13/viper v1.15.0 @@ -54,6 +54,7 @@ require ( cloud.google.com/go/compute/metadata v0.2.3 // indirect cloud.google.com/go/iam v0.12.0 // indirect cloud.google.com/go/storage v1.29.0 // indirect + cosmossdk.io/log v1.1.0 // indirect filippo.io/edwards25519 v1.0.0 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect github.com/99designs/keyring v1.2.1 // indirect @@ -107,7 +108,7 @@ require ( github.com/gtank/merlin v0.1.1 // indirect github.com/gtank/ristretto255 v0.1.2 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect - github.com/hashicorp/go-getter v1.7.0 // indirect + github.com/hashicorp/go-getter v1.7.1 // indirect github.com/hashicorp/go-immutable-radix v1.3.1 // indirect github.com/hashicorp/go-safetemp v1.0.0 // indirect github.com/hashicorp/go-version v1.6.0 // indirect @@ -119,31 +120,30 @@ require ( github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect - github.com/json-iterator/go v1.1.12 // indirect github.com/klauspost/compress v1.16.3 // indirect github.com/lib/pq v1.10.7 // indirect github.com/libp2p/go-buffer-pool v0.1.0 // indirect github.com/magiconair/properties v1.8.7 // indirect github.com/manifoldco/promptui v0.9.0 // indirect - github.com/mattn/go-isatty v0.0.17 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-isatty v0.0.18 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 // indirect github.com/minio/highwayhash v1.0.2 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mitchellh/go-testing-interface v1.14.1 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect - github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect - github.com/modern-go/reflect2 v1.0.2 // indirect github.com/mtibben/percent v0.2.1 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect - github.com/pelletier/go-toml/v2 v2.0.6 // indirect - github.com/petermattis/goid v0.0.0-20221215004737-a150e88a970d // indirect + github.com/pelletier/go-toml/v2 v2.0.7 // indirect + github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_model v0.3.0 // indirect - github.com/prometheus/common v0.40.0 // indirect + github.com/prometheus/common v0.42.0 // indirect github.com/prometheus/procfs v0.9.0 // indirect github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect github.com/rs/cors v1.8.3 // indirect + github.com/rs/zerolog v1.29.1 // indirect github.com/sasha-s/go-deadlock v0.3.1 // indirect github.com/spf13/afero v1.9.3 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect @@ -157,16 +157,16 @@ require ( go.etcd.io/bbolt v1.3.7 // indirect go.opencensus.io v0.24.0 // indirect golang.org/x/crypto v0.7.0 // indirect - golang.org/x/exp v0.0.0-20230310171629-522b1b587ee0 // indirect - golang.org/x/net v0.8.0 // indirect - golang.org/x/oauth2 v0.5.0 // indirect - golang.org/x/sys v0.6.0 // indirect - golang.org/x/term v0.6.0 // indirect - golang.org/x/text v0.8.0 // indirect + golang.org/x/exp v0.0.0-20230515195305-f3d0a9c9a5cc // indirect + golang.org/x/net v0.9.0 // indirect + golang.org/x/oauth2 v0.6.0 // indirect + golang.org/x/sys v0.7.0 // indirect + golang.org/x/term v0.7.0 // indirect + golang.org/x/text v0.9.0 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect google.golang.org/api v0.110.0 // indirect google.golang.org/appengine v1.6.7 // indirect - google.golang.org/protobuf v1.29.1 // indirect + google.golang.org/protobuf v1.30.0 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect nhooyr.io/websocket v1.8.6 // indirect diff --git a/go.sum b/go.sum index 3f2c861c..12af6343 100644 --- a/go.sum +++ b/go.sum @@ -117,7 +117,7 @@ cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= -cloud.google.com/go/longrunning v0.3.0 h1:NjljC+FYPV3uh5/OwWT6pVU+doBqMg2x/rZlE+CamDs= +cloud.google.com/go/longrunning v0.4.1 h1:v+yFJOfKC3yZdY6ZUI933pIYdhyhV8S3NpWrXWmg7jM= cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= @@ -196,8 +196,10 @@ cosmossdk.io/depinject v1.0.0-alpha.3 h1:6evFIgj//Y3w09bqOUOzEpFj5tsxBqdc5CfkO7z cosmossdk.io/depinject v1.0.0-alpha.3/go.mod h1:eRbcdQ7MRpIPEM5YUJh8k97nxHpYbc3sMUnEtt8HPWU= cosmossdk.io/errors v1.0.0-beta.7 h1:gypHW76pTQGVnHKo6QBkb4yFOJjC+sUGRc5Al3Odj1w= cosmossdk.io/errors v1.0.0-beta.7/go.mod h1:mz6FQMJRku4bY7aqS/Gwfcmr/ue91roMEKAmDUDpBfE= -cosmossdk.io/math v1.0.0 h1:ro9w7eKx23om2tZz/VM2Pf+z2WAbGX1yDQQOJ6iGeJw= -cosmossdk.io/math v1.0.0/go.mod h1:Ygz4wBHrgc7g0N+8+MrnTfS9LLn9aaTGa9hKopuym5k= +cosmossdk.io/log v1.1.0 h1:v0ogPHYeTzPcBTcPR1A3j1hkei4pZama8kz8LKlCMv0= +cosmossdk.io/log v1.1.0/go.mod h1:6zjroETlcDs+mm62gd8Ig7mZ+N+fVOZS91V17H+M4N4= +cosmossdk.io/math v1.0.1 h1:Qx3ifyOPaMLNH/89WeZFH268yCvU4xEcnPLu3sJqPPg= +cosmossdk.io/math v1.0.1/go.mod h1:Ygz4wBHrgc7g0N+8+MrnTfS9LLn9aaTGa9hKopuym5k= cosmossdk.io/tools/rosetta v0.2.1 h1:ddOMatOH+pbxWbrGJKRAawdBkPYLfKXutK9IETnjYxw= cosmossdk.io/tools/rosetta v0.2.1/go.mod h1:Pqdc1FdvkNV3LcNIkYWt2RQY6IP1ge6YWZk8MhhO9Hw= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= @@ -261,6 +263,7 @@ github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= github.com/btcsuite/btcd/btcutil v1.1.2 h1:XLMbX8JQEiwMcYft2EGi8zPUkoa0abKIU6/BJSRsjzQ= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= +github.com/bufbuild/protocompile v0.4.0 h1:LbFKd2XowZvQ/kajzguUp2DC9UEIQhIq77fZZlaQsNA= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= @@ -303,8 +306,8 @@ github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:z github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/coinbase/rosetta-sdk-go/types v1.0.0 h1:jpVIwLcPoOeCR6o1tU+Xv7r5bMONNbHU7MuEHboiFuA= github.com/coinbase/rosetta-sdk-go/types v1.0.0/go.mod h1:eq7W2TMRH22GTW0N0beDnN931DW0/WOI1R2sdHNHG4c= -github.com/cometbft/cometbft v0.37.0 h1:M005vBaSaugvYYmNZwJOopynQSjwLoDTwflnQ/I/eYk= -github.com/cometbft/cometbft v0.37.0/go.mod h1:Y2MMMN//O5K4YKd8ze4r9jmk4Y7h0ajqILXbH5JQFVs= +github.com/cometbft/cometbft v0.37.1 h1:KLxkQTK2hICXYq21U2hn1W5hOVYUdQgDQ1uB+90xPIg= +github.com/cometbft/cometbft v0.37.1/go.mod h1:Y2MMMN//O5K4YKd8ze4r9jmk4Y7h0ajqILXbH5JQFVs= github.com/cometbft/cometbft-db v0.7.0 h1:uBjbrBx4QzU0zOEnU8KxoDl18dMNgDh+zZRUE0ucsbo= github.com/cometbft/cometbft-db v0.7.0/go.mod h1:yiKJIm2WKrt6x8Cyxtq9YTEcIMPcEe4XPxhgX59Fzf0= github.com/confio/ics23/go v0.9.0 h1:cWs+wdbS2KRPZezoaaj+qBleXgUk5WOQFMP3CQFGTr4= @@ -314,21 +317,22 @@ github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= 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-proto v1.0.0-beta.2 h1:X3OKvWgK9Gsejo0F1qs5l8Qn6xJV/AzgIWR2wZ8Nua8= github.com/cosmos/cosmos-proto v1.0.0-beta.2/go.mod h1:+XRCLJ14pr5HFEHIUcn51IKXD1Fy3rkEQqt4WqmN4V0= -github.com/cosmos/cosmos-sdk v0.47.0 h1:GKYtBpvjwuDEVix1vdnQpq7PuEOnItuEK0vdAL2cZ5g= -github.com/cosmos/cosmos-sdk v0.47.0/go.mod h1:FTtZbqiHCZ2vun9WrPq6qLQafNKkAuIhLAxzLjr2TiI= +github.com/cosmos/cosmos-sdk v0.47.3 h1:r0hGmZoAzP2D+MaPaFGHwAaTdFQq3pNpHaUp1BsffbM= +github.com/cosmos/cosmos-sdk v0.47.3/go.mod h1:c4OfLdAykA9zsj1CqrxBRqXzVz48I++JSvIMPSPcEmk= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= 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.4.2/go.mod h1:cLxOsn1ljAHSV527CHOtaIP91kK6cCrZETRBrkzItWU= -github.com/cosmos/gogoproto v1.4.7 h1:RzYKVnsEC7UIkDnhTIkqEB7LnIQbsySvmNEqPCiPevk= -github.com/cosmos/gogoproto v1.4.7/go.mod h1:gxGePp9qedovvl/StQL2BIJ6qlIBn1+9YxR0IulGBKA= +github.com/cosmos/gogoproto v1.4.10 h1:QH/yT8X+c0F4ZDacDv3z+xE3WU1P1Z3wQoLMBRJoKuI= +github.com/cosmos/gogoproto v1.4.10/go.mod h1:3aAZzeRWpAwr+SS/LLkICX2/kDFyaYVzckBDzygIxek= github.com/cosmos/iavl v0.20.0 h1:fTVznVlepH0KK8NyKq8w+U7c2L6jofa27aFX6YGlm38= github.com/cosmos/iavl v0.20.0/go.mod h1:WO7FyvaZJoH65+HFOsDir7xU9FWk2w9cHXNW1XHcl7A= github.com/cosmos/ibc-go/v7 v7.0.0 h1:j4kyywlG0hhDmT9FmSaR5iCIka7Pz7kJTxGWY1nlV9Q= @@ -447,6 +451,7 @@ github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGF github.com/goccy/go-json v0.9.11 h1:/pAaQDLHEoCq/5FFmSKBswWmK6H0e8g4159Kc/X/nqk= 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/uuid v4.3.0+incompatible h1:CaSVZxm5B+7o45rtab4jC2G37WGYX1zQfuU2i6DSvnc= github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/gogo/googleapis v1.4.1-0.20201022092350-68b0159b7869/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= @@ -606,8 +611,8 @@ github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtng 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-getter v1.7.0 h1:bzrYP+qu/gMrL1au7/aDvkoOVGUJpeKBgbqRHACAFDY= -github.com/hashicorp/go-getter v1.7.0/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744= +github.com/hashicorp/go-getter v1.7.1 h1:SWiSWN/42qdpR0MdhaOc/bLR48PLuP1ZQtYLRlM69uY= +github.com/hashicorp/go-getter v1.7.1/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744= 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= @@ -653,7 +658,7 @@ github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLf 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/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= -github.com/jhump/protoreflect v1.12.1-0.20220721211354-060cc04fc18b h1:izTof8BKh/nE1wrKOrloNA5q4odOarjf+Xpe+4qow98= +github.com/jhump/protoreflect v1.15.1 h1:HUMERORf3I3ZdX05WaQ6MIpd/NJ434hTp5YiKgfCL6c= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= @@ -712,11 +717,15 @@ github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3v github.com/manifoldco/promptui v0.9.0 h1:3V4HzJk1TtXW1MTZMP7mdlwbBpIinw3HztaIlYthEiA= github.com/manifoldco/promptui v0.9.0/go.mod h1:ka04sppxSGFAtxX0qhlYQjISsg9mR4GWtQEhdbn6Pgg= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= -github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= -github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.18 h1:DOKFKCQ7FNG2L1rbrmstDN4QVRdS89Nkh85u68Uwp98= +github.com/mattn/go-isatty v0.0.18/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= @@ -797,12 +806,12 @@ github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144T github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= -github.com/pelletier/go-toml/v2 v2.0.6 h1:nrzqCb7j9cDFj2coyLNLaZuJTLjWjlaz6nvTvIwycIU= -github.com/pelletier/go-toml/v2 v2.0.6/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek= +github.com/pelletier/go-toml/v2 v2.0.7 h1:muncTPStnKRos5dpVKULv2FVd4bMOhNePj9CjgDb8Us= +github.com/pelletier/go-toml/v2 v2.0.7/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= -github.com/petermattis/goid v0.0.0-20221215004737-a150e88a970d h1:htwtWgtQo8YS6JFWWi2DNgY0RwSGJ1ruMoxY6CUUclk= -github.com/petermattis/goid v0.0.0-20221215004737-a150e88a970d/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= +github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08 h1:hDSdbBuw3Lefr6R18ax0tZ2BJeNB3NehB3trOwYBsdU= +github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= @@ -837,8 +846,8 @@ github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt2 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.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= -github.com/prometheus/common v0.40.0 h1:Afz7EVRqGg2Mqqf4JuF9vdvp1pi220m55Pi9T2JnO4Q= -github.com/prometheus/common v0.40.0/go.mod h1:L65ZJPSmfn/UBWLQIHV7dBrKFidB/wPlF1y5TlSt9OE= +github.com/prometheus/common v0.42.0 h1:EKsfXEYo4JpWMHH5cg+KOUWeuJSov1Id8zGR8eeI1YM= +github.com/prometheus/common v0.42.0/go.mod h1:xBwqVerjNdUDjgODMpudtOMwlOwf2SaTr1yjz4b7Zbc= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= @@ -862,6 +871,9 @@ github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZV github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.8.3 h1:O+qNyWn7Z+F9M0ILBHgMVPuB1xTOucVd5gtaYyXBpRo= github.com/rs/cors v1.8.3/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= +github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= +github.com/rs/zerolog v1.29.1 h1:cO+d60CHkknCbvzEWxP0S9K6KqyTjrCNUy1LdQLCGPc= +github.com/rs/zerolog v1.29.1/go.mod h1:Le6ESbR7hc+DP6Lt1THiV8CQSdkkNrd3R0XbEgp3ZBU= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= @@ -1010,8 +1022,8 @@ golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u0 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-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= -golang.org/x/exp v0.0.0-20230310171629-522b1b587ee0 h1:LGJsf5LRplCck6jUCH3dBL2dmycNruWNF5xugkSlfXw= -golang.org/x/exp v0.0.0-20230310171629-522b1b587ee0/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= +golang.org/x/exp v0.0.0-20230515195305-f3d0a9c9a5cc h1:mCRnTeVUjcrhlRmO0VK8a6k6Rrf6TF9htwo2pJVSjIU= +golang.org/x/exp v0.0.0-20230515195305-f3d0a9c9a5cc/go.mod h1:V1LtkGg67GoY2N1AnLN78QLrzxkLyJw7RJb1gzOOz9w= 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= @@ -1099,8 +1111,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= -golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ= -golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= +golang.org/x/net v0.9.0 h1:aWJ/m6xSmxWBx+V0XRHTlrYrPG56jKsLdTFmsSsCzOM= +golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= 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= @@ -1126,8 +1138,8 @@ golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= -golang.org/x/oauth2 v0.5.0 h1:HuArIo48skDwlrvM3sEdHXElYslAMsf3KwRkkW4MC4s= -golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I= +golang.org/x/oauth2 v0.6.0 h1:Lh8GPgSKBfWSwFvtuWOfeI3aAAnbXTSutYxJiOJFgIw= +golang.org/x/oauth2 v0.6.0/go.mod h1:ycmewcwgD4Rpr3eZJLSB4Kyyljb3qDh40vJ8STE5HKw= 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= @@ -1215,6 +1227,7 @@ golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210819135213-f52c844e1c1c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/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-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1237,13 +1250,14 @@ golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU= +golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.6.0 h1:clScbb1cHjoCkyRbWwBEUZ5H/tIFu5TAXIqaZD0Gcjw= -golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= +golang.org/x/term v0.7.0 h1:BEvjmm5fURWqcfbSKTdpkDXYBrUS1c0m8agp14W48vQ= +golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= 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= @@ -1254,8 +1268,8 @@ 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.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68= -golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1500,8 +1514,8 @@ google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqw google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= -google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44 h1:EfLuoKW5WfkgVdDy7dTK8qSbH37AX5mj/MFh+bGPz14= -google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44/go.mod h1:8B0gmkoRebU8ukX6HP+4wrVQUY1+6PkQ44BSyIlflHA= +google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4 h1:DdoeryqhaXp1LtT/emMP1BRJPHHKFi5akj/nbx/zNTA= +google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= @@ -1543,8 +1557,8 @@ google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACu google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.53.0 h1:LAv2ds7cmFV/XTS3XG1NneeENYrXGmorPxsBbptIjNc= -google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= +google.golang.org/grpc v1.55.0 h1:3Oj82/tFSCeUrRTg/5E/7d/W5A1tj6Ky1ABAuZuv5ag= +google.golang.org/grpc v1.55.0/go.mod h1:iYEXKGkEBhg1PjZQvoYEVPTDkHo1/bjTnfwTeGONTY8= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= 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= @@ -1561,8 +1575,8 @@ google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.29.1 h1:7QBf+IK2gx70Ap/hDsOmam3GE0v9HicjfEdAxE62UoM= -google.golang.org/protobuf v1.29.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= +google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= 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= diff --git a/go.work.sum b/go.work.sum index 78eed32e..7d86aa7a 100644 --- a/go.work.sum +++ b/go.work.sum @@ -1,2014 +1,735 @@ -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.43.0/go.mod h1:BOSR3VbTLkk6FDC/TcffxP4NF/FFBGA5ku+jvKOP7pg= -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.44.3/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.51.0/go.mod h1:hWtGJ6gnXH+KgDv+V0zFGDvpi07n3z8ZNj3T1RW0Gcw= -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.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= -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 v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= -cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= -cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= -cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= -cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= -cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= -cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= -cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= -cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= -cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= -cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= -cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= +4d63.com/gochecknoglobals v0.1.0/go.mod h1:wfdC5ZjKSPr7CybKEcgJhUOgeAQW1+7WcyK8OvUilfo= +cloud.google.com/go v0.105.0/go.mod h1:PrLgOJNe5nfE9UMxKxgXj4mD3voiP+YQ6gdt6KMFOKM= cloud.google.com/go v0.107.0/go.mod h1:wpc2eNrD7hXUTy8EKS10jkxpZBjASrORK7goS+3YX2I= -cloud.google.com/go v0.110.0 h1:Zc8gqp3+a9/Eyph2KDmcGaPtbKRIoqq4YTlL4NMD0Ys= -cloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY= cloud.google.com/go/accessapproval v1.5.0/go.mod h1:HFy3tuiGvMdcd/u+Cu5b9NkO1pEICJ46IR82PoUdplw= +cloud.google.com/go/accessapproval v1.6.0/go.mod h1:R0EiYnwV5fsRFiKZkPHr6mwyk2wxUJ30nL4j2pcFY2E= cloud.google.com/go/accesscontextmanager v1.4.0/go.mod h1:/Kjh7BBu/Gh83sv+K60vN9QE5NJcd80sU33vIe2IFPE= -cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= -cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= +cloud.google.com/go/accesscontextmanager v1.6.0/go.mod h1:8XCvZWfYw3K/ji0iVnp+6pu7huxoQTLmxAbVjbloTtM= cloud.google.com/go/aiplatform v1.27.0/go.mod h1:Bvxqtl40l0WImSb04d0hXFU7gDOiq9jQmorivIiWcKg= -cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= -cloud.google.com/go/analytics v0.12.0/go.mod h1:gkfj9h6XRf9+TS4bmuhPEShsh3hH8PAZzm/41OOhQd4= +cloud.google.com/go/aiplatform v1.35.0/go.mod h1:7MFT/vCaOyZT/4IIFfxH4ErVg/4ku6lKv3w0+tFTgXQ= +cloud.google.com/go/analytics v0.18.0/go.mod h1:ZkeHGQlcIPkw0R/GW+boWHhCOR43xz9RN/jn7WcqfIE= cloud.google.com/go/apigateway v1.4.0/go.mod h1:pHVY9MKGaH9PQ3pJ4YLzoj6U5FUDeDFBllIz7WmzJoc= +cloud.google.com/go/apigateway v1.5.0/go.mod h1:GpnZR3Q4rR7LVu5951qfXPJCHquZt02jf7xQx7kpqN8= cloud.google.com/go/apigeeconnect v1.4.0/go.mod h1:kV4NwOKqjvt2JYR0AoIWo2QGfoRtn/pkS3QlHp0Ni04= +cloud.google.com/go/apigeeconnect v1.5.0/go.mod h1:KFaCqvBRU6idyhSNyn3vlHXc8VMDJdRmwDF6JyFRqZ8= cloud.google.com/go/apigeeregistry v0.4.0/go.mod h1:EUG4PGcsZvxOXAdyEghIdXwAEi/4MEaoqLMLDMIwKXY= +cloud.google.com/go/apigeeregistry v0.5.0/go.mod h1:YR5+s0BVNZfVOUkMa5pAR2xGd0A473vA5M7j247o1wM= cloud.google.com/go/apikeys v0.4.0/go.mod h1:XATS/yqZbaBK0HOssf+ALHp8jAlNHUgyfprvNcBIszU= +cloud.google.com/go/apikeys v0.5.0/go.mod h1:5aQfwY4D+ewMMWScd3hm2en3hCj+BROlyrt3ytS7KLI= cloud.google.com/go/appengine v1.5.0/go.mod h1:TfasSozdkFI0zeoxW3PTBLiNqRmzraodCWatWI9Dmak= -cloud.google.com/go/area120 v0.5.0/go.mod h1:DE/n4mp+iqVyvxHN41Vf1CR602GiHQjFPusMFW6bGR4= -cloud.google.com/go/area120 v0.6.0/go.mod h1:39yFJqWVgm0UZqWTOdqkLhjoC7uFfgXRC8g/ZegeAh0= -cloud.google.com/go/artifactregistry v1.6.0/go.mod h1:IYt0oBPSAGYj/kprzsBjZ/4LnG/zOcHyFHjWPCi6SAQ= -cloud.google.com/go/artifactregistry v1.7.0/go.mod h1:mqTOFOnGZx8EtSqK/ZWcsm/4U8B77rbcLP6ruDU2Ixk= +cloud.google.com/go/appengine v1.6.0/go.mod h1:hg6i0J/BD2cKmDJbaFSYHFyZkgBEfQrDg/X0V5fJn84= +cloud.google.com/go/area120 v0.7.1/go.mod h1:j84i4E1RboTWjKtZVWXPqvK5VHQFJRF2c1Nm69pWm9k= cloud.google.com/go/artifactregistry v1.9.0/go.mod h1:2K2RqvA2CYvAeARHRkLDhMDJ3OXy26h3XW+3/Jh2uYc= -cloud.google.com/go/asset v1.5.0/go.mod h1:5mfs8UvcM5wHhqtSv8J1CtxxaQq3AdBxxQi2jGW/K4o= -cloud.google.com/go/asset v1.7.0/go.mod h1:YbENsRK4+xTiL+Ofoj5Ckf+O17kJtgp3Y3nn4uzZz5s= -cloud.google.com/go/asset v1.8.0/go.mod h1:mUNGKhiqIdbr8X7KNayoYvyc4HbbFO9URsjbytpUaW0= +cloud.google.com/go/artifactregistry v1.11.2/go.mod h1:nLZns771ZGAwVLzTX/7Al6R9ehma4WUEhZGWV6CeQNQ= cloud.google.com/go/asset v1.10.0/go.mod h1:pLz7uokL80qKhzKr4xXGvBQXnzHn5evJAEAtZiIb0wY= -cloud.google.com/go/assuredworkloads v1.5.0/go.mod h1:n8HOZ6pff6re5KYfBXcFvSViQjDwxFkAkmUFffJRbbY= -cloud.google.com/go/assuredworkloads v1.6.0/go.mod h1:yo2YOk37Yc89Rsd5QMVECvjaMKymF9OP+QXWlKXUkXw= -cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVoYoxeLBoj4XkKYscNI= +cloud.google.com/go/asset v1.11.1/go.mod h1:fSwLhbRvC9p9CXQHJ3BgFeQNM4c9x10lqlrdEUYXlJo= cloud.google.com/go/assuredworkloads v1.9.0/go.mod h1:kFuI1P78bplYtT77Tb1hi0FMxM0vVpRC7VVoJC3ZoT0= -cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= -cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8= +cloud.google.com/go/assuredworkloads v1.10.0/go.mod h1:kwdUQuXcedVdsIaKgKTp9t0UJkE5+PAVNhdQm4ZVq2E= cloud.google.com/go/automl v1.8.0/go.mod h1:xWx7G/aPEe/NP+qzYXktoBSDfjO+vnKMGgsApGJJquM= +cloud.google.com/go/automl v1.12.0/go.mod h1:tWDcHDp86aMIuHmyvjuKeeHEGq76lD7ZqfGLN6B0NuU= cloud.google.com/go/baremetalsolution v0.4.0/go.mod h1:BymplhAadOO/eBa7KewQ0Ppg4A4Wplbn+PsFKRLo0uI= +cloud.google.com/go/baremetalsolution v0.5.0/go.mod h1:dXGxEkmR9BMwxhzBhV0AioD0ULBmuLZI8CdwalUxuss= cloud.google.com/go/batch v0.4.0/go.mod h1:WZkHnP43R/QCGQsZ+0JyG4i79ranE2u8xvjq/9+STPE= +cloud.google.com/go/batch v0.7.0/go.mod h1:vLZN95s6teRUqRQ4s3RLDsH8PvboqBK+rn1oevL159g= cloud.google.com/go/beyondcorp v0.3.0/go.mod h1:E5U5lcrcXMsCuoDNyGrpyTm/hn7ne941Jz2vmksAxW8= -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/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA= +cloud.google.com/go/beyondcorp v0.4.0/go.mod h1:3ApA0mbhHx6YImmuubf5pyW8srKnCEPON32/5hj+RmM= cloud.google.com/go/bigquery v1.44.0/go.mod h1:0Y33VqXTEsbamHJvJHdFmtqHvMIY28aK1+dFsvaChGc= -cloud.google.com/go/bigtable v1.2.0/go.mod h1:JcVAOl45lrTmQfLj7T6TxyMzIN/3FGGcFm+2xVAli2o= -cloud.google.com/go/billing v1.4.0/go.mod h1:g9IdKBEFlItS8bTtlrZdVLWSSdSyFUZKXNS02zKMOZY= -cloud.google.com/go/billing v1.5.0/go.mod h1:mztb1tBc3QekhjSgmpf/CV4LzWXLzCArwpLmP2Gm88s= +cloud.google.com/go/bigquery v1.48.0/go.mod h1:QAwSz+ipNgfL5jxiaK7weyOhzdoAy1zFm0Nf1fysJac= cloud.google.com/go/billing v1.7.0/go.mod h1:q457N3Hbj9lYwwRbnlD7vUpyjq6u5U1RAOArInEiD5Y= -cloud.google.com/go/binaryauthorization v1.1.0/go.mod h1:xwnoWu3Y84jbuHa0zd526MJYmtnVXn0syOjaJgy4+dM= -cloud.google.com/go/binaryauthorization v1.2.0/go.mod h1:86WKkJHtRcv5ViNABtYMhhNWRrD1Vpi//uKEy7aYEfI= +cloud.google.com/go/billing v1.12.0/go.mod h1:yKrZio/eu+okO/2McZEbch17O5CB5NpZhhXG6Z766ss= cloud.google.com/go/binaryauthorization v1.4.0/go.mod h1:tsSPQrBd77VLplV70GUhBf/Zm3FsKmgSqgm4UmiDItk= +cloud.google.com/go/binaryauthorization v1.5.0/go.mod h1:OSe4OU1nN/VswXKRBmciKpo9LulY41gch5c68htf3/Q= cloud.google.com/go/certificatemanager v1.4.0/go.mod h1:vowpercVFyqs8ABSmrdV+GiFf2H/ch3KyudYQEMM590= +cloud.google.com/go/certificatemanager v1.6.0/go.mod h1:3Hh64rCKjRAX8dXgRAyOcY5vQ/fE1sh8o+Mdd6KPgY8= cloud.google.com/go/channel v1.9.0/go.mod h1:jcu05W0my9Vx4mt3/rEHpfxc9eKi9XwsdDL8yBMbKUk= +cloud.google.com/go/channel v1.11.0/go.mod h1:IdtI0uWGqhEeatSB62VOoJ8FSUhJ9/+iGkJVqp74CGE= cloud.google.com/go/cloudbuild v1.4.0/go.mod h1:5Qwa40LHiOXmz3386FrjrYM93rM/hdRr7b53sySrTqA= +cloud.google.com/go/cloudbuild v1.7.0/go.mod h1:zb5tWh2XI6lR9zQmsm1VRA+7OCuve5d8S+zJUul8KTg= cloud.google.com/go/clouddms v1.4.0/go.mod h1:Eh7sUGCC+aKry14O1NRljhjyrr0NFC0G2cjwX0cByRk= -cloud.google.com/go/cloudtasks v1.5.0/go.mod h1:fD92REy1x5woxkKEkLdvavGnPJGEn8Uic9nWuLzqCpY= -cloud.google.com/go/cloudtasks v1.6.0/go.mod h1:C6Io+sxuke9/KNRkbQpihnW93SWDU3uXt92nu85HkYI= +cloud.google.com/go/clouddms v1.5.0/go.mod h1:QSxQnhikCLUw13iAbffF2CZxAER3xDGNHjsTAkQJcQA= cloud.google.com/go/cloudtasks v1.8.0/go.mod h1:gQXUIwCSOI4yPVK7DgTVFiiP0ZW/eQkydWzwVMdHxrI= -cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= -cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= -cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= -cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s= -cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= -cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= -cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= +cloud.google.com/go/cloudtasks v1.9.0/go.mod h1:w+EyLsVkLWHcOaqNEyvcKAsWp9p29dL6uL9Nst1cI7Y= cloud.google.com/go/compute v1.14.0/go.mod h1:YfLtxrj9sU4Yxv+sXzZkyPjEyPBZfXHUvjxega5vAdo= cloud.google.com/go/compute v1.15.1/go.mod h1:bjjoF/NtFUrkD/urWfdHaKuOPDR5nWIs63rR+SXhcpA= -cloud.google.com/go/compute v1.18.0 h1:FEigFqoDbys2cvFkZ9Fjq4gnHBP55anJ0yQyau2f9oY= -cloud.google.com/go/compute v1.18.0/go.mod h1:1X7yHxec2Ga+Ss6jPyjxRxpu2uu7PLgsOVXvgU0yacs= cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= -cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= -cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= cloud.google.com/go/contactcenterinsights v1.4.0/go.mod h1:L2YzkGbPsv+vMQMCADxJoT9YiTTnSEd6fEvCeHTYVck= +cloud.google.com/go/contactcenterinsights v1.6.0/go.mod h1:IIDlT6CLcDoyv79kDv8iWxMSTZhLxSCofVV5W6YFM/w= cloud.google.com/go/container v1.7.0/go.mod h1:Dp5AHtmothHGX3DwwIHPgq45Y8KmNsgN3amoYfxVkLo= -cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= -cloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4= -cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0= -cloud.google.com/go/datacatalog v1.5.0/go.mod h1:M7GPLNQeLfWqeIm3iuiruhPzkt65+Bx8dAKvScX8jvs= -cloud.google.com/go/datacatalog v1.6.0/go.mod h1:+aEyF8JKg+uXcIdAmmaMUmZ3q1b/lKLtXCmXdnc0lbc= +cloud.google.com/go/container v1.13.1/go.mod h1:6wgbMPeQRw9rSnKBCAJXnds3Pzj03C4JHamr8asWKy4= +cloud.google.com/go/containeranalysis v0.7.0/go.mod h1:9aUL+/vZ55P2CXfuZjS4UjQ9AgXoSw8Ts6lemfmxBxI= cloud.google.com/go/datacatalog v1.8.0/go.mod h1:KYuoVOv9BM8EYz/4eMFxrr4DUKhGIOXxZoKYF5wdISM= -cloud.google.com/go/dataflow v0.6.0/go.mod h1:9QwV89cGoxjjSR9/r7eFDqqjtvbKxAK2BaYU6PVk9UM= -cloud.google.com/go/dataflow v0.7.0/go.mod h1:PX526vb4ijFMesO1o202EaUmouZKBpjHsTlCtB4parQ= -cloud.google.com/go/dataform v0.3.0/go.mod h1:cj8uNliRlHpa6L3yVhDOBrUXH+BPAO1+KFMQQNSThKo= -cloud.google.com/go/dataform v0.4.0/go.mod h1:fwV6Y4Ty2yIFL89huYlEkwUPtS7YZinZbzzj5S9FzCE= +cloud.google.com/go/datacatalog v1.12.0/go.mod h1:CWae8rFkfp6LzLumKOnmVh4+Zle4A3NXLzVJ1d1mRm0= +cloud.google.com/go/dataflow v0.8.0/go.mod h1:Rcf5YgTKPtQyYz8bLYhFoIV/vP39eL7fWNcSOyFfLJE= cloud.google.com/go/dataform v0.5.0/go.mod h1:GFUYRe8IBa2hcomWplodVmUx/iTL0FrsauObOM3Ipr0= +cloud.google.com/go/dataform v0.6.0/go.mod h1:QPflImQy33e29VuapFdf19oPbE4aYTJxr31OAPV+ulA= cloud.google.com/go/datafusion v1.5.0/go.mod h1:Kz+l1FGHB0J+4XF2fud96WMmRiq/wj8N9u007vyXZ2w= -cloud.google.com/go/datalabeling v0.5.0/go.mod h1:TGcJ0G2NzcsXSE/97yWjIZO0bXj0KbVlINXMG9ud42I= -cloud.google.com/go/datalabeling v0.6.0/go.mod h1:WqdISuk/+WIGeMkpw/1q7bK/tFEZxsrFJOJdY2bXvTQ= +cloud.google.com/go/datafusion v1.6.0/go.mod h1:WBsMF8F1RhSXvVM8rCV3AeyWVxcC2xY6vith3iw3S+8= +cloud.google.com/go/datalabeling v0.7.0/go.mod h1:WPQb1y08RJbmpM3ww0CSUAGweL0SxByuW2E+FU+wXcM= cloud.google.com/go/dataplex v1.4.0/go.mod h1:X51GfLXEMVJ6UN47ESVqvlsRplbLhcsAt0kZCCKsU0A= +cloud.google.com/go/dataplex v1.5.2/go.mod h1:cVMgQHsmfRoI5KFYq4JtIBEUbYwc3c7tXmIDhRmNNVQ= cloud.google.com/go/dataproc v1.8.0/go.mod h1:5OW+zNAH0pMpw14JVrPONsxMQYMBqJuzORhIBfBn9uI= -cloud.google.com/go/dataqna v0.5.0/go.mod h1:90Hyk596ft3zUQ8NkFfvICSIfHFh1Bc7C4cK3vbhkeo= -cloud.google.com/go/dataqna v0.6.0/go.mod h1:1lqNpM7rqNLVgWBJyk5NF6Uen2PHym0jtVJonplVsDA= -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/dataproc v1.12.0/go.mod h1:zrF3aX0uV3ikkMz6z4uBbIKyhRITnxvr4i3IjKsKrw4= +cloud.google.com/go/dataqna v0.7.0/go.mod h1:Lx9OcIIeqCrw1a6KdO3/5KMP1wAmTc0slZWwP12Qq3c= cloud.google.com/go/datastore v1.10.0/go.mod h1:PC5UzAmDEkAmkfaknstTYbNpgE49HAgW2J1gcgUfmdM= -cloud.google.com/go/datastream v1.2.0/go.mod h1:i/uTP8/fZwgATHS/XFu0TcNUhuA0twZxxQ3EyCUQMwo= -cloud.google.com/go/datastream v1.3.0/go.mod h1:cqlOX8xlyYF/uxhiKn6Hbv6WjwPPuI9W2M9SAXwaLLQ= cloud.google.com/go/datastream v1.5.0/go.mod h1:6TZMMNPwjUqZHBKPQ1wwXpb0d5VDVPl2/XoS5yi88q4= +cloud.google.com/go/datastream v1.6.0/go.mod h1:6LQSuswqLa7S4rPAOZFVjHIG3wJIjZcZrw8JDEDJuIs= cloud.google.com/go/deploy v1.5.0/go.mod h1:ffgdD0B89tToyW/U/D2eL0jN2+IEV/3EMuXHA0l4r+s= -cloud.google.com/go/dialogflow v1.15.0/go.mod h1:HbHDWs33WOGJgn6rfzBW1Kv807BE3O1+xGbn59zZWI4= -cloud.google.com/go/dialogflow v1.16.1/go.mod h1:po6LlzGfK+smoSmTBnbkIZY2w8ffjz/RcGSS+sh1el0= -cloud.google.com/go/dialogflow v1.17.0/go.mod h1:YNP09C/kXA1aZdBgC/VtXX74G/TKn7XVCcVumTflA+8= +cloud.google.com/go/deploy v1.6.0/go.mod h1:f9PTHehG/DjCom3QH0cntOVRm93uGBDt2vKzAPwpXQI= cloud.google.com/go/dialogflow v1.29.0/go.mod h1:b+2bzMe+k1s9V+F2jbJwpHPzrnIyHihAdRFMtn2WXuM= +cloud.google.com/go/dialogflow v1.31.0/go.mod h1:cuoUccuL1Z+HADhyIA7dci3N5zUssgpBJmCzI6fNRB4= cloud.google.com/go/dlp v1.7.0/go.mod h1:68ak9vCiMBjbasxeVD17hVPxDEck+ExiHavX8kiHG+Q= -cloud.google.com/go/documentai v1.7.0/go.mod h1:lJvftZB5NRiFSX4moiye1SMxHx0Bc3x1+p9e/RfXYiU= -cloud.google.com/go/documentai v1.8.0/go.mod h1:xGHNEB7CtsnySCNrCFdCyyMz44RhFEEX2Q7UD0c5IhU= +cloud.google.com/go/dlp v1.9.0/go.mod h1:qdgmqgTyReTz5/YNSSuueR8pl7hO0o9bQ39ZhtgkWp4= cloud.google.com/go/documentai v1.10.0/go.mod h1:vod47hKQIPeCfN2QS/jULIvQTugbmdc0ZvxxfQY1bg4= -cloud.google.com/go/domains v0.6.0/go.mod h1:T9Rz3GasrpYk6mEGHh4rymIhjlnIuB4ofT1wTxDeT4Y= -cloud.google.com/go/domains v0.7.0/go.mod h1:PtZeqS1xjnXuRPKE/88Iru/LdfoRyEHYA9nFQf4UKpg= -cloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk= -cloud.google.com/go/edgecontainer v0.2.0/go.mod h1:RTmLijy+lGpQ7BXuTDa4C4ssxyXT34NIuHIgKuP4s5w= +cloud.google.com/go/documentai v1.16.0/go.mod h1:o0o0DLTEZ+YnJZ+J4wNfTxmDVyrkzFvttBXXtYRMHkM= +cloud.google.com/go/domains v0.8.0/go.mod h1:M9i3MMDzGFXsydri9/vW+EWz9sWb4I6WyHqdlAk0idE= +cloud.google.com/go/edgecontainer v0.3.0/go.mod h1:FLDpP4nykgwwIfcLt6zInhprzw0lEi2P1fjO6Ie0qbc= cloud.google.com/go/errorreporting v0.3.0/go.mod h1:xsP2yaAp+OAW4OIm60An2bbLpqIhKXdWR/tawvl7QzU= cloud.google.com/go/essentialcontacts v1.4.0/go.mod h1:8tRldvHYsmnBCHdFpvU+GL75oWiBKl80BiqlFh9tp+8= +cloud.google.com/go/essentialcontacts v1.5.0/go.mod h1:ay29Z4zODTuwliK7SnX8E86aUF2CTzdNtvv42niCX0M= cloud.google.com/go/eventarc v1.8.0/go.mod h1:imbzxkyAU4ubfsaKYdQg04WS1NvncblHEup4kvF+4gw= +cloud.google.com/go/eventarc v1.10.0/go.mod h1:u3R35tmZ9HvswGRBnF48IlYgYeBcPUCjkr4BTdem2Kw= cloud.google.com/go/filestore v1.4.0/go.mod h1:PaG5oDfo9r224f8OYXURtAsY+Fbyq/bLYoINEK8XQAI= +cloud.google.com/go/filestore v1.5.0/go.mod h1:FqBXDWBp4YLHqRnVGveOkHDf8svj9r5+mUDLupOWEDs= cloud.google.com/go/firestore v1.9.0/go.mod h1:HMkjKHNTtRyZNiMzu7YAsLr9K3X2udY2AMwDaMEQiiE= -cloud.google.com/go/functions v1.6.0/go.mod h1:3H1UA3qiIPRWD7PeZKLvHZ9SaQhR26XIJcC0A5GbvAk= -cloud.google.com/go/functions v1.7.0/go.mod h1:+d+QBcWM+RsrgZfV9xo6KfA1GlzJfxcfZcRPEhDDfzg= cloud.google.com/go/functions v1.9.0/go.mod h1:Y+Dz8yGguzO3PpIjhLTbnqV1CWmgQ5UwtlpzoyquQ08= -cloud.google.com/go/gaming v1.5.0/go.mod h1:ol7rGcxP/qHTRQE/RO4bxkXq+Fix0j6D4LFPzYTIrDM= -cloud.google.com/go/gaming v1.6.0/go.mod h1:YMU1GEvA39Qt3zWGyAVA9bpYz/yAhTvaQ1t2sK4KPUA= +cloud.google.com/go/functions v1.10.0/go.mod h1:0D3hEOe3DbEvCXtYOZHQZmD+SzYsi1YbI7dGvHfldXw= cloud.google.com/go/gaming v1.8.0/go.mod h1:xAqjS8b7jAVW0KFYeRUxngo9My3f33kFmua++Pi+ggM= +cloud.google.com/go/gaming v1.9.0/go.mod h1:Fc7kEmCObylSWLO334NcO+O9QMDyz+TKC4v1D7X+Bc0= cloud.google.com/go/gkebackup v0.3.0/go.mod h1:n/E671i1aOQvUxT541aTkCwExO/bTer2HDlj4TsBRAo= -cloud.google.com/go/gkeconnect v0.5.0/go.mod h1:c5lsNAg5EwAy7fkqX/+goqFsU1Da/jQFqArp+wGNr/o= -cloud.google.com/go/gkeconnect v0.6.0/go.mod h1:Mln67KyU/sHJEBY8kFZ0xTeyPtzbq9StAVvEULYK16A= -cloud.google.com/go/gkehub v0.9.0/go.mod h1:WYHN6WG8w9bXU0hqNxt8rm5uxnk8IH+lPY9J2TV7BK0= -cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y977wO+hBH0= +cloud.google.com/go/gkebackup v0.4.0/go.mod h1:byAyBGUwYGEEww7xsbnUTBHIYcOPy/PgUWUtOeRm9Vg= +cloud.google.com/go/gkeconnect v0.7.0/go.mod h1:SNfmVqPkaEi3bF/B3CNZOAYPYdg7sU+obZ+QTky2Myw= +cloud.google.com/go/gkehub v0.11.0/go.mod h1:JOWHlmN+GHyIbuWQPl47/C2RFhnFKH38jH9Ascu3n0E= cloud.google.com/go/gkemulticloud v0.4.0/go.mod h1:E9gxVBnseLWCk24ch+P9+B2CoDFJZTyIgLKSalC7tuI= -cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= +cloud.google.com/go/gkemulticloud v0.5.0/go.mod h1:W0JDkiyi3Tqh0TJr//y19wyb1yf8llHVto2Htf2Ja3Y= cloud.google.com/go/gsuiteaddons v1.4.0/go.mod h1:rZK5I8hht7u7HxFQcFei0+AtfS9uSushomRlg+3ua1o= -cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= -cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= +cloud.google.com/go/gsuiteaddons v1.5.0/go.mod h1:TFCClYLd64Eaa12sFVmUyG62tk4mdIsI7pAnSXRkcFo= cloud.google.com/go/iam v0.8.0/go.mod h1:lga0/y3iH6CX7sYqypWJ33hf7kkfXJag67naqGESjkE= cloud.google.com/go/iam v0.11.0/go.mod h1:9PiLDanza5D+oWFZiH1uG+RnRCfEGKoyl6yo4cgWZGY= -cloud.google.com/go/iam v0.12.0 h1:DRtTY29b75ciH6Ov1PHb4/iat2CLCvrOm40Q0a6DFpE= -cloud.google.com/go/iam v0.12.0/go.mod h1:knyHGviacl11zrtZUoDuYpDgLjvr28sLQaG0YB2GYAY= cloud.google.com/go/iap v1.5.0/go.mod h1:UH/CGgKd4KyohZL5Pt0jSKE4m3FR51qg6FKQ/z/Ix9A= +cloud.google.com/go/iap v1.6.0/go.mod h1:NSuvI9C/j7UdjGjIde7t7HBz+QTwBcapPE07+sSRcLk= cloud.google.com/go/ids v1.2.0/go.mod h1:5WXvp4n25S0rA/mQWAg1YEEBBq6/s+7ml1RDCW1IrcY= +cloud.google.com/go/ids v1.3.0/go.mod h1:JBdTYwANikFKaDP6LtW5JAi4gubs57SVNQjemdt6xV4= cloud.google.com/go/iot v1.4.0/go.mod h1:dIDxPOn0UvNDUMD8Ger7FIaTuvMkj+aGk94RPP0iV+g= +cloud.google.com/go/iot v1.5.0/go.mod h1:mpz5259PDl3XJthEmh9+ap0affn/MqNSP4My77Qql9o= cloud.google.com/go/kms v1.6.0/go.mod h1:Jjy850yySiasBUDi6KFUwUv2n1+o7QZFyuUJg6OgjA0= -cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= -cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= +cloud.google.com/go/kms v1.9.0/go.mod h1:qb1tPTgfF9RQP8e1wq4cLFErVuTJv7UsSC915J8dh3w= cloud.google.com/go/language v1.8.0/go.mod h1:qYPVHf7SPoNNiCL2Dr0FfEFNil1qi3pQEyygwpgVKB8= -cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= -cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= +cloud.google.com/go/language v1.9.0/go.mod h1:Ns15WooPM5Ad/5no/0n81yUetis74g3zrbeJBE+ptUY= +cloud.google.com/go/lifesciences v0.8.0/go.mod h1:lFxiEOMqII6XggGbOnKiyZ7IBwoIqA84ClvoezaA/bo= cloud.google.com/go/logging v1.6.1/go.mod h1:5ZO0mHHbvm8gEmeEUHrmDlTDSu5imF6MUP9OfilNXBw= +cloud.google.com/go/logging v1.7.0/go.mod h1:3xjP2CjkM3ZkO73aj4ASA5wRPGGCRrPIAeNqVNkzY8M= cloud.google.com/go/longrunning v0.3.0/go.mod h1:qth9Y41RRSUE69rDcOn6DdK3HfQfsUI0YSmW3iIlLJc= +cloud.google.com/go/longrunning v0.4.1/go.mod h1:4iWDqhBZ70CvZ6BfETbvam3T8FMvLK+eFj0E6AaRQTo= cloud.google.com/go/managedidentities v1.4.0/go.mod h1:NWSBYbEMgqmbZsLIyKvxrYbtqOsxY1ZrGM+9RgDqInM= +cloud.google.com/go/managedidentities v1.5.0/go.mod h1:+dWcZ0JlUmpuxpIDfyP5pP5y0bLdRwOS4Lp7gMni/LA= cloud.google.com/go/maps v0.1.0/go.mod h1:BQM97WGyfw9FWEmQMpZ5T6cpovXXSd1cGmFma94eubI= -cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= -cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= -cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= -cloud.google.com/go/memcache v1.5.0/go.mod h1:dk3fCK7dVo0cUU2c36jKb4VqKPS22BTkf81Xq617aWM= +cloud.google.com/go/maps v0.6.0/go.mod h1:o6DAMMfb+aINHz/p/jbcY+mYeXBoZoxTfdSQ8VAJaCw= +cloud.google.com/go/mediatranslation v0.7.0/go.mod h1:LCnB/gZr90ONOIQLgSXagp8XUW1ODs2UmUMvcgMfI2I= cloud.google.com/go/memcache v1.7.0/go.mod h1:ywMKfjWhNtkQTxrWxCkCFkoPjLHPW6A7WOTVI8xy3LY= -cloud.google.com/go/metastore v1.5.0/go.mod h1:2ZNrDcQwghfdtCwJ33nM0+GrBGlVuh8rakL3vdPY3XY= -cloud.google.com/go/metastore v1.6.0/go.mod h1:6cyQTls8CWXzk45G55x57DVQ9gWg7RiH65+YgPsNh9s= +cloud.google.com/go/memcache v1.9.0/go.mod h1:8oEyzXCu+zo9RzlEaEjHl4KkgjlNDaXbCQeQWlzNFJM= cloud.google.com/go/metastore v1.8.0/go.mod h1:zHiMc4ZUpBiM7twCIFQmJ9JMEkDSyZS9U12uf7wHqSI= +cloud.google.com/go/metastore v1.10.0/go.mod h1:fPEnH3g4JJAk+gMRnrAnoqyv2lpUCqJPWOodSaf45Eo= cloud.google.com/go/monitoring v1.8.0/go.mod h1:E7PtoMJ1kQXWxPjB6mv2fhC5/15jInuulFdYYtlcvT4= -cloud.google.com/go/networkconnectivity v1.4.0/go.mod h1:nOl7YL8odKyAOtzNX73/M5/mGZgqqMeryi6UPZTk/rA= -cloud.google.com/go/networkconnectivity v1.5.0/go.mod h1:3GzqJx7uhtlM3kln0+x5wyFvuVH1pIBJjhCpjzSt75o= +cloud.google.com/go/monitoring v1.12.0/go.mod h1:yx8Jj2fZNEkL/GYZyTLS4ZtZEZN8WtDEiEqG4kLK50w= cloud.google.com/go/networkconnectivity v1.7.0/go.mod h1:RMuSbkdbPwNMQjB5HBWD5MpTBnNm39iAVpC3TmsExt8= +cloud.google.com/go/networkconnectivity v1.10.0/go.mod h1:UP4O4sWXJG13AqrTdQCD9TnLGEbtNRqjuaaA7bNjF5E= cloud.google.com/go/networkmanagement v1.5.0/go.mod h1:ZnOeZ/evzUdUsnvRt792H0uYEnHQEMaz+REhhzJRcf4= -cloud.google.com/go/networksecurity v0.5.0/go.mod h1:xS6fOCoqpVC5zx15Z/MqkfDwH4+m/61A3ODiDV1xmiQ= -cloud.google.com/go/networksecurity v0.6.0/go.mod h1:Q5fjhTr9WMI5mbpRYEbiexTzROf7ZbDzvzCrNl14nyU= -cloud.google.com/go/notebooks v1.2.0/go.mod h1:9+wtppMfVPUeJ8fIWPOq1UnATHISkGXGqTkxeieQ6UY= -cloud.google.com/go/notebooks v1.3.0/go.mod h1:bFR5lj07DtCPC7YAAJ//vHskFBxA5JzYlH68kXVdk34= +cloud.google.com/go/networkmanagement v1.6.0/go.mod h1:5pKPqyXjB/sgtvB5xqOemumoQNB7y95Q7S+4rjSOPYY= +cloud.google.com/go/networksecurity v0.7.0/go.mod h1:mAnzoxx/8TBSyXEeESMy9OOYwo1v+gZ5eMRnsT5bC8k= cloud.google.com/go/notebooks v1.5.0/go.mod h1:q8mwhnP9aR8Hpfnrc5iN5IBhrXUy8S2vuYs+kBJ/gu0= +cloud.google.com/go/notebooks v1.7.0/go.mod h1:PVlaDGfJgj1fl1S3dUwhFMXFgfYGhYQt2164xOMONmE= cloud.google.com/go/optimization v1.2.0/go.mod h1:Lr7SOHdRDENsh+WXVmQhQTrzdu9ybg0NecjHidBq6xs= +cloud.google.com/go/optimization v1.3.1/go.mod h1:IvUSefKiwd1a5p0RgHDbWCIbDFgKuEdB+fPPuP0IDLI= cloud.google.com/go/orchestration v1.4.0/go.mod h1:6W5NLFWs2TlniBphAViZEVhrXRSMgUGDfW7vrWKvsBk= +cloud.google.com/go/orchestration v1.6.0/go.mod h1:M62Bevp7pkxStDfFfTuCOaXgaaqRAga1yKyoMtEoWPQ= cloud.google.com/go/orgpolicy v1.5.0/go.mod h1:hZEc5q3wzwXJaKrsx5+Ewg0u1LxJ51nNFlext7Tanwc= -cloud.google.com/go/osconfig v1.7.0/go.mod h1:oVHeCeZELfJP7XLxcBGTMBvRO+1nQ5tFG9VQTmYS2Fs= -cloud.google.com/go/osconfig v1.8.0/go.mod h1:EQqZLu5w5XA7eKizepumcvWx+m8mJUhEwiPqWiZeEdg= +cloud.google.com/go/orgpolicy v1.10.0/go.mod h1:w1fo8b7rRqlXlIJbVhOMPrwVljyuW5mqssvBtU18ONc= cloud.google.com/go/osconfig v1.10.0/go.mod h1:uMhCzqC5I8zfD9zDEAfvgVhDS8oIjySWh+l4WK6GnWw= -cloud.google.com/go/oslogin v1.4.0/go.mod h1:YdgMXWRaElXz/lDk1Na6Fh5orF7gvmJ0FGLIs9LId4E= -cloud.google.com/go/oslogin v1.5.0/go.mod h1:D260Qj11W2qx/HVF29zBg+0fd6YCSjSqLUkY/qEenQU= +cloud.google.com/go/osconfig v1.11.0/go.mod h1:aDICxrur2ogRd9zY5ytBLV89KEgT2MKB2L/n6x1ooPw= cloud.google.com/go/oslogin v1.7.0/go.mod h1:e04SN0xO1UNJ1M5GP0vzVBFicIe4O53FOfcixIqTyXo= -cloud.google.com/go/phishingprotection v0.5.0/go.mod h1:Y3HZknsK9bc9dMi+oE8Bim0lczMU6hrX0UpADuMefr0= -cloud.google.com/go/phishingprotection v0.6.0/go.mod h1:9Y3LBLgy0kDTcYET8ZH3bq/7qni15yVUoAxiFxnlSUA= +cloud.google.com/go/oslogin v1.9.0/go.mod h1:HNavntnH8nzrn8JCTT5fj18FuJLFJc4NaZJtBnQtKFs= +cloud.google.com/go/phishingprotection v0.7.0/go.mod h1:8qJI4QKHoda/sb/7/YmMQ2omRLSLYSu9bU0EKCNI+Lk= cloud.google.com/go/policytroubleshooter v1.4.0/go.mod h1:DZT4BcRw3QoO8ota9xw/LKtPa8lKeCByYeKTIf/vxdE= -cloud.google.com/go/privatecatalog v0.5.0/go.mod h1:XgosMUvvPyxDjAVNDYxJ7wBW8//hLDDYmnsNcMGq1K0= -cloud.google.com/go/privatecatalog v0.6.0/go.mod h1:i/fbkZR0hLN29eEWiiwue8Pb+GforiEIBnV9yrRUOKI= -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/policytroubleshooter v1.5.0/go.mod h1:Rz1WfV+1oIpPdN2VvvuboLVRsB1Hclg3CKQ53j9l8vw= +cloud.google.com/go/privatecatalog v0.7.0/go.mod h1:2s5ssIFO69F5csTXcwBP7NPFTZvps26xGzvQ2PQaBYg= cloud.google.com/go/pubsub v1.27.1/go.mod h1:hQN39ymbV9geqBnfQq6Xf63yNhUAhv9CZhzp5O6qsW0= +cloud.google.com/go/pubsub v1.28.0/go.mod h1:vuXFpwaVoIPQMGXqRyUQigu/AX1S3IWugR9xznmcXX8= cloud.google.com/go/pubsublite v1.5.0/go.mod h1:xapqNQ1CuLfGi23Yda/9l4bBCKz/wC3KIJ5gKcxveZg= -cloud.google.com/go/recaptchaenterprise v1.3.1/go.mod h1:OdD+q+y4XGeAlxRaMn1Y7/GveP6zmq76byL6tjPE7d4= -cloud.google.com/go/recaptchaenterprise/v2 v2.1.0/go.mod h1:w9yVqajwroDNTfGuhmOjPDN//rZGySaf6PtFVcSCa7o= -cloud.google.com/go/recaptchaenterprise/v2 v2.2.0/go.mod h1:/Zu5jisWGeERrd5HnlS3EUGb/D335f9k51B/FVil0jk= -cloud.google.com/go/recaptchaenterprise/v2 v2.3.0/go.mod h1:O9LwGCjrhGHBQET5CA7dd5NwwNQUErSgEDit1DLNTdo= +cloud.google.com/go/pubsublite v1.6.0/go.mod h1:1eFCS0U11xlOuMFV/0iBqw3zP12kddMeCbj/F3FSj9k= cloud.google.com/go/recaptchaenterprise/v2 v2.5.0/go.mod h1:O8LzcHXN3rz0j+LBC91jrwI3R+1ZSZEWrfL7XHgNo9U= -cloud.google.com/go/recommendationengine v0.5.0/go.mod h1:E5756pJcVFeVgaQv3WNpImkFP8a+RptV6dDLGPILjvg= -cloud.google.com/go/recommendationengine v0.6.0/go.mod h1:08mq2umu9oIqc7tDy8sx+MNJdLG0fUi3vaSVbztHgJ4= -cloud.google.com/go/recommender v1.5.0/go.mod h1:jdoeiBIVrJe9gQjwd759ecLJbxCDED4A6p+mqoqDvTg= -cloud.google.com/go/recommender v1.6.0/go.mod h1:+yETpm25mcoiECKh9DEScGzIRyDKpZ0cEhWGo+8bo+c= +cloud.google.com/go/recaptchaenterprise/v2 v2.6.0/go.mod h1:RPauz9jeLtB3JVzg6nCbe12qNoaa8pXc4d/YukAmcnA= +cloud.google.com/go/recommendationengine v0.7.0/go.mod h1:1reUcE3GIu6MeBz/h5xZJqNLuuVjNg1lmWMPyjatzac= cloud.google.com/go/recommender v1.8.0/go.mod h1:PkjXrTT05BFKwxaUxQmtIlrtj0kph108r02ZZQ5FE70= -cloud.google.com/go/redis v1.7.0/go.mod h1:V3x5Jq1jzUcg+UNsRvdmsfuFnit1cfe3Z/PGyq/lm4Y= -cloud.google.com/go/redis v1.8.0/go.mod h1:Fm2szCDavWzBk2cDKxrkmWBqoCiL1+Ctwq7EyqBCA/A= +cloud.google.com/go/recommender v1.9.0/go.mod h1:PnSsnZY7q+VL1uax2JWkt/UegHssxjUVVCrX52CuEmQ= cloud.google.com/go/redis v1.10.0/go.mod h1:ThJf3mMBQtW18JzGgh41/Wld6vnDDc/F/F35UolRZPM= +cloud.google.com/go/redis v1.11.0/go.mod h1:/X6eicana+BWcUda5PpwZC48o37SiFVTFSs0fWAJ7uQ= cloud.google.com/go/resourcemanager v1.4.0/go.mod h1:MwxuzkumyTX7/a3n37gmsT3py7LIXwrShilPh3P1tR0= +cloud.google.com/go/resourcemanager v1.5.0/go.mod h1:eQoXNAiAvCf5PXxWxXjhKQoTMaUSNrEfg+6qdf/wots= cloud.google.com/go/resourcesettings v1.4.0/go.mod h1:ldiH9IJpcrlC3VSuCGvjR5of/ezRrOxFtpJoJo5SmXg= -cloud.google.com/go/retail v1.8.0/go.mod h1:QblKS8waDmNUhghY2TI9O3JLlFk8jybHeV4BF19FrE4= -cloud.google.com/go/retail v1.9.0/go.mod h1:g6jb6mKuCS1QKnH/dpu7isX253absFl6iE92nHwlBUY= +cloud.google.com/go/resourcesettings v1.5.0/go.mod h1:+xJF7QSG6undsQDfsCJyqWXyBwUoJLhetkRMDRnIoXA= cloud.google.com/go/retail v1.11.0/go.mod h1:MBLk1NaWPmh6iVFSz9MeKG/Psyd7TAgm6y/9L2B4x9Y= +cloud.google.com/go/retail v1.12.0/go.mod h1:UMkelN/0Z8XvKymXFbD4EhFJlYKRx1FGhQkVPU5kF14= cloud.google.com/go/run v0.3.0/go.mod h1:TuyY1+taHxTjrD0ZFk2iAR+xyOXEA0ztb7U3UNA0zBo= -cloud.google.com/go/scheduler v1.4.0/go.mod h1:drcJBmxF3aqZJRhmkHQ9b3uSSpQoltBPGPxGAWROx6s= -cloud.google.com/go/scheduler v1.5.0/go.mod h1:ri073ym49NW3AfT6DZi21vLZrG07GXr5p3H1KxN5QlI= +cloud.google.com/go/run v0.8.0/go.mod h1:VniEnuBwqjigv0A7ONfQUaEItaiCRVujlMqerPPiktM= cloud.google.com/go/scheduler v1.7.0/go.mod h1:jyCiBqWW956uBjjPMMuX09n3x37mtyPJegEWKxRsn44= -cloud.google.com/go/secretmanager v1.6.0/go.mod h1:awVa/OXF6IiyaU1wQ34inzQNc4ISIDIrId8qE5QGgKA= +cloud.google.com/go/scheduler v1.8.0/go.mod h1:TCET+Y5Gp1YgHT8py4nlg2Sew8nUHMqcpousDgXJVQc= cloud.google.com/go/secretmanager v1.9.0/go.mod h1:b71qH2l1yHmWQHt9LC80akm86mX8AL6X1MA01dW8ht4= -cloud.google.com/go/security v1.5.0/go.mod h1:lgxGdyOKKjHL4YG3/YwIL2zLqMFCKs0UbQwgyZmfJl4= -cloud.google.com/go/security v1.7.0/go.mod h1:mZklORHl6Bg7CNnnjLH//0UlAlaXqiG7Lb9PsPXLfD0= -cloud.google.com/go/security v1.8.0/go.mod h1:hAQOwgmaHhztFhiQ41CjDODdWP0+AE1B3sX4OFlq+GU= +cloud.google.com/go/secretmanager v1.10.0/go.mod h1:MfnrdvKMPNra9aZtQFvBcvRU54hbPD8/HayQdlUgJpU= cloud.google.com/go/security v1.10.0/go.mod h1:QtOMZByJVlibUT2h9afNDWRZ1G96gVywH8T5GUSb9IA= -cloud.google.com/go/securitycenter v1.13.0/go.mod h1:cv5qNAqjY84FCN6Y9z28WlkKXyWsgLO832YiWwkCWcU= -cloud.google.com/go/securitycenter v1.14.0/go.mod h1:gZLAhtyKv85n52XYWt6RmeBdydyxfPeTrpToDPw4Auc= +cloud.google.com/go/security v1.12.0/go.mod h1:rV6EhrpbNHrrxqlvW0BWAIawFWq3X90SduMJdFwtLB8= cloud.google.com/go/securitycenter v1.16.0/go.mod h1:Q9GMaLQFUD+5ZTabrbujNWLtSLZIZF7SAR0wWECrjdk= +cloud.google.com/go/securitycenter v1.18.1/go.mod h1:0/25gAzCM/9OL9vVx4ChPeM/+DlfGQJDwBy/UC8AKK0= cloud.google.com/go/servicecontrol v1.5.0/go.mod h1:qM0CnXHhyqKVuiZnGKrIurvVImCs8gmqWsDoqe9sU1s= -cloud.google.com/go/servicedirectory v1.4.0/go.mod h1:gH1MUaZCgtP7qQiI+F+A+OpeKF/HQWgtAddhTbhL2bs= -cloud.google.com/go/servicedirectory v1.5.0/go.mod h1:QMKFL0NUySbpZJ1UZs3oFAmdvVxhhxB6eJ/Vlp73dfg= +cloud.google.com/go/servicecontrol v1.11.0/go.mod h1:kFmTzYzTUIuZs0ycVqRHNaNhgR+UMUpw9n02l/pY+mc= cloud.google.com/go/servicedirectory v1.7.0/go.mod h1:5p/U5oyvgYGYejufvxhgwjL8UVXjkuw7q5XcG10wx1U= +cloud.google.com/go/servicedirectory v1.8.0/go.mod h1:srXodfhY1GFIPvltunswqXpVxFPpZjf8nkKQT7XcXaY= cloud.google.com/go/servicemanagement v1.5.0/go.mod h1:XGaCRe57kfqu4+lRxaFEAuqmjzF0r+gWHjWqKqBvKFo= +cloud.google.com/go/servicemanagement v1.6.0/go.mod h1:aWns7EeeCOtGEX4OvZUWCCJONRZeFKiptqKf1D0l/Jc= cloud.google.com/go/serviceusage v1.4.0/go.mod h1:SB4yxXSaYVuUBYUml6qklyONXNLt83U0Rb+CXyhjEeU= +cloud.google.com/go/serviceusage v1.5.0/go.mod h1:w8U1JvqUqwJNPEOTQjrMHkw3IaIFLoLsPLvsE3xueec= cloud.google.com/go/shell v1.4.0/go.mod h1:HDxPzZf3GkDdhExzD/gs8Grqk+dmYcEjGShZgYa9URw= +cloud.google.com/go/shell v1.6.0/go.mod h1:oHO8QACS90luWgxP3N9iZVuEiSF84zNyLytb+qE2f9A= cloud.google.com/go/spanner v1.41.0/go.mod h1:MLYDBJR/dY4Wt7ZaMIQ7rXOTLjYrmxLE/5ve9vFfWos= -cloud.google.com/go/speech v1.6.0/go.mod h1:79tcr4FHCimOp56lwC01xnt/WPJZc4v3gzyT7FoBkCM= -cloud.google.com/go/speech v1.7.0/go.mod h1:KptqL+BAQIhMsj1kOP2la5DSEEerPDuOP/2mmkhHhZQ= +cloud.google.com/go/spanner v1.44.0/go.mod h1:G8XIgYdOK+Fbcpbs7p2fiprDw4CaZX63whnSMLVBxjk= cloud.google.com/go/speech v1.9.0/go.mod h1:xQ0jTcmnRFFM2RfX/U+rk6FQNUF6DQlydUSyoooSpco= -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= -cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= -cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= -cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= -cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= +cloud.google.com/go/speech v1.14.1/go.mod h1:gEosVRPJ9waG7zqqnsHpYTOoAS4KouMRLDFMekpJ0J0= cloud.google.com/go/storage v1.28.1/go.mod h1:Qnisd4CqDdo6BGs2AD5LLnEsmSQ80wQ5ogcBBKhU86Y= -cloud.google.com/go/storage v1.29.0 h1:6weCgzRvMg7lzuUurI4697AqIRPU1SvzHhynwpW31jI= -cloud.google.com/go/storage v1.29.0/go.mod h1:4puEjyTKnku6gfKoTfNOU/W+a9JyuVNxjpS5GBrB8h4= cloud.google.com/go/storagetransfer v1.6.0/go.mod h1:y77xm4CQV/ZhFZH75PLEXY0ROiS7Gh6pSKrM8dJyg6I= -cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= -cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= +cloud.google.com/go/storagetransfer v1.7.0/go.mod h1:8Giuj1QNb1kfLAiWM1bN6dHzfdlDAVC9rv9abHot2W4= cloud.google.com/go/talent v1.4.0/go.mod h1:ezFtAgVuRf8jRsvyE6EwmbTK5LKciD4KVnHuDEFmOOA= +cloud.google.com/go/talent v1.5.0/go.mod h1:G+ODMj9bsasAEJkQSzO2uHQWXHHXUomArjWQQYkqK6c= cloud.google.com/go/texttospeech v1.5.0/go.mod h1:oKPLhR4n4ZdQqWKURdwxMy0uiTS1xU161C8W57Wkea4= +cloud.google.com/go/texttospeech v1.6.0/go.mod h1:YmwmFT8pj1aBblQOI3TfKmwibnsfvhIBzPXcW4EBovc= cloud.google.com/go/tpu v1.4.0/go.mod h1:mjZaX8p0VBgllCzF6wcU2ovUXN9TONFLd7iz227X2Xg= +cloud.google.com/go/tpu v1.5.0/go.mod h1:8zVo1rYDFuW2l4yZVY0R0fb/v44xLh3llq7RuV61fPM= cloud.google.com/go/trace v1.4.0/go.mod h1:UG0v8UBqzusp+z63o7FK74SdFE+AXpCLdFb1rshXG+Y= +cloud.google.com/go/trace v1.8.0/go.mod h1:zH7vcsbAhklH8hWFig58HvxcxyQbaIqMarMg9hn5ECA= cloud.google.com/go/translate v1.4.0/go.mod h1:06Dn/ppvLD6WvA5Rhdp029IX2Mi3Mn7fpMRLPvXT5Wg= +cloud.google.com/go/translate v1.6.0/go.mod h1:lMGRudH1pu7I3n3PETiOB2507gf3HnfLV8qlkHZEyos= cloud.google.com/go/video v1.9.0/go.mod h1:0RhNKFRF5v92f8dQt0yhaHrEuH95m068JYOvLZYnJSw= -cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= -cloud.google.com/go/videointelligence v1.7.0/go.mod h1:k8pI/1wAhjznARtVT9U1llUaFNPh7muw8QyOUpavru4= +cloud.google.com/go/video v1.13.0/go.mod h1:ulzkYlYgCp15N2AokzKjy7MQ9ejuynOJdf1tR5lGthk= cloud.google.com/go/videointelligence v1.9.0/go.mod h1:29lVRMPDYHikk3v8EdPSaL8Ku+eMzDljjuvRs105XoU= -cloud.google.com/go/vision v1.2.0/go.mod h1:SmNwgObm5DpFBme2xpyOyasvBc1aPdjvMk2bBk0tKD0= -cloud.google.com/go/vision/v2 v2.2.0/go.mod h1:uCdV4PpN1S0jyCyq8sIM42v2Y6zOLkZs+4R9LrGYwFo= -cloud.google.com/go/vision/v2 v2.3.0/go.mod h1:UO61abBx9QRMFkNBbf1D8B1LXdS2cGiiCRx0vSpZoUo= +cloud.google.com/go/videointelligence v1.10.0/go.mod h1:LHZngX1liVtUhZvi2uNS0VQuOzNi2TkY1OakiuoUOjU= cloud.google.com/go/vision/v2 v2.5.0/go.mod h1:MmaezXOOE+IWa+cS7OhRRLK2cNv1ZL98zhqFFZaaH2E= +cloud.google.com/go/vision/v2 v2.6.0/go.mod h1:158Hes0MvOS9Z/bDMSFpjwsUrZ5fPrdwuyyvKSGAGMY= cloud.google.com/go/vmmigration v1.3.0/go.mod h1:oGJ6ZgGPQOFdjHuocGcLqX4lc98YQ7Ygq8YQwHh9A7g= +cloud.google.com/go/vmmigration v1.5.0/go.mod h1:E4YQ8q7/4W9gobHjQg4JJSgXXSgY21nA5r8swQV+Xxc= cloud.google.com/go/vmwareengine v0.1.0/go.mod h1:RsdNEf/8UDvKllXhMz5J40XxDrNJNN4sagiox+OI208= +cloud.google.com/go/vmwareengine v0.2.2/go.mod h1:sKdctNJxb3KLZkE/6Oui94iw/xs9PRNC2wnNLXsHvH8= cloud.google.com/go/vpcaccess v1.5.0/go.mod h1:drmg4HLk9NkZpGfCmZ3Tz0Bwnm2+DKqViEpeEpOq0m8= -cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xXZmFiHmGE= -cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= +cloud.google.com/go/vpcaccess v1.6.0/go.mod h1:wX2ILaNhe7TlVa4vC5xce1bCnqE3AeH27RV31lnmZes= cloud.google.com/go/webrisk v1.7.0/go.mod h1:mVMHgEYH0r337nmt1JyLthzMr6YxwN1aAIEc2fTcq7A= +cloud.google.com/go/webrisk v1.8.0/go.mod h1:oJPDuamzHXgUc+b8SiHRcVInZQuybnvEW72PqTc7sSg= cloud.google.com/go/websecurityscanner v1.4.0/go.mod h1:ebit/Fp0a+FWu5j4JOmJEV8S8CzdTkAS77oDsiSqYWQ= -cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= -cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= +cloud.google.com/go/websecurityscanner v1.5.0/go.mod h1:Y6xdCPy81yi0SQnDY1xdNTNpfY1oAgXUlcfN3B3eSng= cloud.google.com/go/workflows v1.9.0/go.mod h1:ZGkj1aFIOd9c8Gerkjjq7OW7I5+l6cSvT3ujaO/WwSA= -collectd.org v0.3.0/go.mod h1:A/8DzQBkF6abtvrT2j/AU/4tiBgJWYyh0y/oB/4MlWE= -cosmossdk.io/api v0.3.1 h1:NNiOclKRR0AOlO4KIqeaG6PS6kswOMhHD0ir0SscNXE= -cosmossdk.io/api v0.3.1/go.mod h1:DfHfMkiNA2Uhy8fj0JJlOCYOBp4eWUUJ1te5zBGNyIw= -cosmossdk.io/core v0.5.1 h1:vQVtFrIYOQJDV3f7rw4pjjVqc1id4+mE0L9hHP66pyI= -cosmossdk.io/core v0.5.1/go.mod h1:KZtwHCLjcFuo0nmDc24Xy6CRNEL9Vl/MeimQ2aC7NLE= -cosmossdk.io/depinject v1.0.0-alpha.3 h1:6evFIgj//Y3w09bqOUOzEpFj5tsxBqdc5CfkO7z+zfw= -cosmossdk.io/depinject v1.0.0-alpha.3/go.mod h1:eRbcdQ7MRpIPEM5YUJh8k97nxHpYbc3sMUnEtt8HPWU= -cosmossdk.io/errors v1.0.0-beta.7 h1:gypHW76pTQGVnHKo6QBkb4yFOJjC+sUGRc5Al3Odj1w= -cosmossdk.io/errors v1.0.0-beta.7/go.mod h1:mz6FQMJRku4bY7aqS/Gwfcmr/ue91roMEKAmDUDpBfE= -cosmossdk.io/math v1.0.0 h1:ro9w7eKx23om2tZz/VM2Pf+z2WAbGX1yDQQOJ6iGeJw= -cosmossdk.io/math v1.0.0/go.mod h1:Ygz4wBHrgc7g0N+8+MrnTfS9LLn9aaTGa9hKopuym5k= -cosmossdk.io/tools/rosetta v0.2.1 h1:ddOMatOH+pbxWbrGJKRAawdBkPYLfKXutK9IETnjYxw= -cosmossdk.io/tools/rosetta v0.2.1/go.mod h1:Pqdc1FdvkNV3LcNIkYWt2RQY6IP1ge6YWZk8MhhO9Hw= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek= -filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= -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/Azure/azure-sdk-for-go/sdk/azcore v0.21.1/go.mod h1:fBF9PQNqB8scdgpZ3ufzaLntG0AG7C1WjPMsiFOmfHM= -github.com/Azure/azure-sdk-for-go/sdk/internal v0.8.3/go.mod h1:KLF4gFr6DcKFZwSuH8w8yEK6DpFl3LP5rhdvAb7Yz5I= -github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.3.0/go.mod h1:tPaiy8S5bQ+S5sOiDlINkp7+Ef339+Nz5L5XO+cnOHo= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak= -github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= -github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= -github.com/ChainSafe/go-schnorrkel v1.0.0 h1:3aDA67lAykLaG1y3AOjs88dMxC88PgUuHRrLeDnvGIM= -github.com/ChainSafe/go-schnorrkel v1.0.0/go.mod h1:dpzHYVxLZcp8pjlV+O+UR8K0Hp/z7vcchBSbMBEhCw4= -github.com/CosmWasm/wasmd v0.40.0-rc.0 h1:QhJzLSWQCjUjrEPO2dc61WgafnaxetuKZRBHUfKJR84= -github.com/CosmWasm/wasmd v0.40.0-rc.0/go.mod h1:9MispMuIWmjs6HlgRx+XPLfOD0y1k7iQx5KIE2cNGTc= -github.com/CosmWasm/wasmvm v1.2.2 h1:F1lTaMRYxk91V9ufV8gYhzLea7sd6AG/GvY1h2JtZsY= -github.com/CosmWasm/wasmvm v1.2.2/go.mod h1:vW/E3h8j9xBQs9bCoijDuawKo9kCtxOaS8N8J7KFtkc= -github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= -github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= -github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= -github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= -github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= -github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= -github.com/StirlingMarketingGroup/go-namecase v1.0.0 h1:2CzaNtCzc4iNHirR+5ru9OzGg8rQp860gqLBFqRI02Y= -github.com/StirlingMarketingGroup/go-namecase v1.0.0/go.mod h1:ZsoSKcafcAzuBx+sndbxHu/RjDcDTrEdT4UvhniHfio= -github.com/VictoriaMetrics/fastcache v1.6.0/go.mod h1:0qHz5QP0GMX4pfmMA/zt5RgfNuXJrTP0zS7DqpHGGTw= -github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= -github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= -github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= -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/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= -github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= -github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/apache/arrow/go/arrow v0.0.0-20191024131854-af6fa24be0db/go.mod h1:VTxUBvSJ3s3eHAg65PNgrsn5BtqCRPdmyXh6rAfdxN0= -github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= -github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= -github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= -github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= -github.com/armon/go-metrics v0.4.1 h1:hR91U9KYmb6bLBYLQjyM+3j+rcd/UhE+G78SFnF8gJA= -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/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= +cloud.google.com/go/workflows v1.10.0/go.mod h1:fZ8LmRmZQWacon9UCX1r/g/DfAXx5VcPALq2CxzdePw= +cosmossdk.io/log v1.1.0/go.mod h1:6zjroETlcDs+mm62gd8Ig7mZ+N+fVOZS91V17H+M4N4= +github.com/Abirdcfly/dupword v0.0.7/go.mod h1:K/4M1kj+Zh39d2aotRwypvasonOyAMH1c/IZJzE0dmk= +github.com/Antonboom/errname v0.1.7/go.mod h1:g0ONh16msHIPgJSGsecu1G/dcF2hlYR/0SddnIAGavU= +github.com/Antonboom/nilnil v0.1.1/go.mod h1:L1jBqoWM7AOeTD+tSquifKSesRHs4ZdaxvZR+xdJEaI= +github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= +github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= +github.com/GaijinEntertainment/go-exhaustruct/v2 v2.3.0/go.mod h1:b3g59n2Y+T5xmcxJL+UEG2f8cQploZm1mR/v6BW0mU0= +github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= +github.com/Masterminds/semver/v3 v3.2.0/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ= +github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= +github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= +github.com/OpenPeeDeeP/depguard v1.1.1/go.mod h1:JtAMzWkmFEzDPyAd+W0NHl1lvpQKTvT9jnRVsohBKpc= +github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4/go.mod h1:UBYPn8k0D56RtnR8RFQMjmh4KrZzWJ5o7Z9SYjossQ8= +github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= +github.com/adlio/schema v1.3.3/go.mod h1:1EsRssiv9/Ce2CMzq5DoL7RiMshhuigQxrR4DMV9fHg= +github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= +github.com/alecthomas/kingpin/v2 v2.3.1/go.mod h1:oYL5vtsvEHZGHxU7DMp32Dvx+qL+ptGn6lWaot2vCNE= +github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE= +github.com/alexkohler/prealloc v1.0.0/go.mod h1:VetnK3dIgFBBKmg0YnD9F9x6Icjd+9cvfHR56wJVlKE= +github.com/alingse/asasalint v0.0.11/go.mod h1:nCaoMhw7a9kSJObvQyVzNTPBDbNpdocqrSP7t/cW5+I= +github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= +github.com/armon/go-metrics v0.4.0/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= +github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= +github.com/ashanbrown/forbidigo v1.3.0/go.mod h1:vVW7PEdqEFqapJe95xHkTfB1+XvZXBFg8t0sG2FIxmI= +github.com/ashanbrown/makezero v1.1.1/go.mod h1:i1bJLCRSCHOcOa9Y6MyF2FTfMZMFdHvxKHxgO5Z1axI= github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI= -github.com/avast/retry-go/v4 v4.3.3 h1:G56Bp6mU0b5HE1SkaoVjscZjlQb0oy4mezwY/cGH19w= -github.com/avast/retry-go/v4 v4.3.3/go.mod h1:rg6XFaiuFYII0Xu3RDbZQkxCofFwruZKW8oEF1jpWiU= -github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= -github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.44.122/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= -github.com/aws/aws-sdk-go v1.44.203 h1:pcsP805b9acL3wUqa4JR2vg1k2wnItkDYNvfmcy6F+U= -github.com/aws/aws-sdk-go v1.44.203/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= -github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= -github.com/aws/aws-sdk-go-v2 v1.2.0/go.mod h1:zEQs02YRBw1DjK0PoJv3ygDYOFTre1ejlJWl8FwAuQo= -github.com/aws/aws-sdk-go-v2/config v1.1.1/go.mod h1:0XsVy9lBI/BCXm+2Tuvt39YmdHwS5unDQmxZOYe8F5Y= -github.com/aws/aws-sdk-go-v2/credentials v1.1.1/go.mod h1:mM2iIjwl7LULWtS6JCACyInboHirisUUdkBPoTHMOUo= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.0.2/go.mod h1:3hGg3PpiEjHnrkrlasTfxFqUsZ2GCk/fMUn4CbKgSkM= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.0.2/go.mod h1:45MfaXZ0cNbeuT0KQ1XJylq8A6+OpVV2E5kvY/Kq+u8= -github.com/aws/aws-sdk-go-v2/service/route53 v1.1.1/go.mod h1:rLiOUrPLW/Er5kRcQ7NkwbjlijluLsrIbu/iyl35RO4= -github.com/aws/aws-sdk-go-v2/service/sso v1.1.1/go.mod h1:SuZJxklHxLAXgLTc1iFXbEWkXs7QRTQpCLGaKIprQW0= -github.com/aws/aws-sdk-go-v2/service/sts v1.1.1/go.mod h1:Wi0EBZwiz/K44YliU0EKxqTCJGUfYTWXrrBwkq736bM= -github.com/aws/smithy-go v1.1.0/go.mod h1:EzMw8dbp/YJL4A5/sbhGddag+NPT7q084agLbB9LgIw= -github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= -github.com/benbjohnson/clock v1.3.0/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/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas= -github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4= -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/bmizerany/pat v0.0.0-20170815010413-6226ea591a40/go.mod h1:8rLXio+WjiTceGBHIoTvn60HIbs7Hm7bcHjyrSqYB9c= -github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= -github.com/btcsuite/btcd v0.22.0-beta h1:LTDpDKUM5EeOFBPM8IXpinEcmZ6FWfNZbE3lfrfdnWo= -github.com/btcsuite/btcd/btcec/v2 v2.1.2/go.mod h1:ctjw4H1kknNJmRN4iP1R7bTQ+v3GJkZBd6mui8ZsAZE= -github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= -github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= -github.com/btcsuite/btcd/chaincfg/chainhash v1.0.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= -github.com/burnt-labs/interchaintest/v7 v7.0.0-20230404233655-f37b60cca9b6 h1:ek5Y7blC3YSDZ34GrGxjT7wo4F6PgrdSDYYKf2ILOOw= -github.com/burnt-labs/interchaintest/v7 v7.0.0-20230404233655-f37b60cca9b6/go.mod h1:+Tg2jC5C0eI2iOTs24OYs0NgSjU4Bw5XAQ5HVkVMwzc= -github.com/c-bata/go-prompt v0.2.2/go.mod h1:VzqtzE2ksDBcdln8G7mk2RX9QyGjH+OVqOCSiVIqS34= -github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= -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.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= -github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= -github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +github.com/bkielbasa/cyclop v1.2.0/go.mod h1:qOI0yy6A7dYC4Zgsa72Ppm9kONl0RoIlPbzot9mhmeI= +github.com/blizzy78/varnamelen v0.8.0/go.mod h1:V9TzQZ4fLJ1DSrjVDfl89H7aMnTvKkApdHeyESmyR7k= +github.com/bombsimon/wsl/v3 v3.3.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc= +github.com/breml/bidichk v0.2.3/go.mod h1:8u2C6DnAy0g2cEq+k/A2+tr9O1s+vHGxWn0LTc70T2A= +github.com/breml/errchkjson v0.3.0/go.mod h1:9Cogkyv9gcT8HREpzi3TiqBxCqDzo8awa92zSDFcofU= +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.0/go.mod h1:0QJIIN1wwIXF/3G/m87gIwGniDMDQqjVn4SZgnFpsYY= +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.2.1/go.mod h1:9/CSmJxmuvqzX9Wh2fXMWToLOHhPd11lSPuIupwTkI8= +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.2/go.mod h1:UR7dsSJzJUfMmFiiLlIrMq1lS9jh9EdCV7FStZSnpi0= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/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/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/buf v1.7.0/go.mod h1:Go40fMAF46PnPLC7jJgTQhAI95pmC0+VtxFKVC0qLq0= +github.com/bufbuild/connect-go v1.0.0/go.mod h1:9iNvh/NOsfhNBUH5CtvXeVUskQO1xsrEviH7ZArwZ3I= +github.com/bufbuild/protocompile v0.4.0/go.mod h1:3v93+mbWn/v3xzN+31nwkJfrEpAUwp+BagBSZWx+TP8= +github.com/butuzov/ireturn v0.1.1/go.mod h1:Wh6Zl3IMtTpaIKbmwzqi6olnM9ptYQxxVacMsOEFPoc= +github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw= -github.com/centrifuge/go-substrate-rpc-client/v4 v4.0.12 h1:DCYWIBOalB0mKKfUg2HhtGgIkBbMA1fnlnkZp7fHB18= -github.com/centrifuge/go-substrate-rpc-client/v4 v4.0.12/go.mod h1:5g1oM4Zu3BOaLpsKQ+O8PAv2kNuq+kPcA1VzFbsSqxE= -github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= -github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= -github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/logex v1.2.1/go.mod h1:JLbx6lG2kDbNRFnfkgvh4eRJRPX1QCoOIWomwysCBrQ= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/readline v1.5.1 h1:upd/6fQk4src78LMRzh5vItIt361/o4uq553V8B5sGI= -github.com/chzyer/readline v1.5.1/go.mod h1:Eh+b79XXUwfKfcPLepksvw2tcLE/Ct21YObkaSkeBlk= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/chzyer/test v1.0.0/go.mod h1:2JlltgoNkt4TW/z9V/IzDdFaMTM2JPIi26O1pF38GC8= -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/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cloudflare/cloudflare-go v0.14.0/go.mod h1:EnwdgGMaFOruiPZRFSgn+TsQ3hQ7C/YWzIGLeu5c304= -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/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/charithe/durationcheck v0.0.9/go.mod h1:SSbRIBVfMjCi/kEB6K65XEA83D6prSM8ap1UCpNKtgg= +github.com/chavacava/garif v0.0.0-20220630083739-93517212f375/go.mod h1:4m1Rv7xfuwWPNKXlThldNuJvutYM6J95wNuuVmn55To= +github.com/checkpoint-restore/go-criu/v5 v5.3.0/go.mod h1:E/eQpaFtUKGOOSEBZgmKAcn+zUUwWxqcaKZlF54wK8E= +github.com/cilium/ebpf v0.7.0/go.mod h1:/oI2+1shJiTGAMgl6/RgJr36Eo1jzrRcAWbcXO2usCA= +github.com/cloudflare/circl v1.1.0/go.mod h1:prBCrKB9DV4poKZY1l9zBXg2QJY7mvgRvtMxxK7fi4I= github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= -github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20220314180256-7f1daf1720fc/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20230105202645-06c439db220b/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cockroachdb/apd/v2 v2.0.2 h1:weh8u7Cneje73dDh+2tEVLUvyBc89iwepWCD8b8034E= -github.com/cockroachdb/apd/v2 v2.0.2/go.mod h1:DDxRlzC2lo3/vSlmSoS7JkqbbrARPuFOGr0B9pvN3Gw= -github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= -github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= -github.com/coinbase/rosetta-sdk-go/types v1.0.0 h1:jpVIwLcPoOeCR6o1tU+Xv7r5bMONNbHU7MuEHboiFuA= -github.com/coinbase/rosetta-sdk-go/types v1.0.0/go.mod h1:eq7W2TMRH22GTW0N0beDnN931DW0/WOI1R2sdHNHG4c= -github.com/cometbft/cometbft v0.37.0 h1:M005vBaSaugvYYmNZwJOopynQSjwLoDTwflnQ/I/eYk= -github.com/cometbft/cometbft v0.37.0/go.mod h1:Y2MMMN//O5K4YKd8ze4r9jmk4Y7h0ajqILXbH5JQFVs= -github.com/cometbft/cometbft-db v0.7.0 h1:uBjbrBx4QzU0zOEnU8KxoDl18dMNgDh+zZRUE0ucsbo= -github.com/cometbft/cometbft-db v0.7.0/go.mod h1:yiKJIm2WKrt6x8Cyxtq9YTEcIMPcEe4XPxhgX59Fzf0= -github.com/confio/ics23/go v0.9.0 h1:cWs+wdbS2KRPZezoaaj+qBleXgUk5WOQFMP3CQFGTr4= -github.com/confio/ics23/go v0.9.0/go.mod h1:4LPZ2NYqnYIVRklaozjNR1FScgDJ2s5Xrp+e/mYVRak= -github.com/consensys/bavard v0.1.8-0.20210406032232-f3452dc9b572/go.mod h1:Bpd0/3mZuaj6Sj+PqrmIquiOKy397AKGThQPaGzNXAQ= -github.com/consensys/gnark-crypto v0.4.1-0.20210426202927-39ac3d4b3f1f/go.mod h1:815PAHg3wvysy0SyIqanF8gZ0Y1wjk/hrDHD/iT88+Q= -github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= -github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -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-proto v1.0.0-beta.2 h1:X3OKvWgK9Gsejo0F1qs5l8Qn6xJV/AzgIWR2wZ8Nua8= -github.com/cosmos/cosmos-proto v1.0.0-beta.2/go.mod h1:+XRCLJ14pr5HFEHIUcn51IKXD1Fy3rkEQqt4WqmN4V0= -github.com/cosmos/cosmos-sdk v0.47.0 h1:GKYtBpvjwuDEVix1vdnQpq7PuEOnItuEK0vdAL2cZ5g= -github.com/cosmos/cosmos-sdk v0.47.0/go.mod h1:FTtZbqiHCZ2vun9WrPq6qLQafNKkAuIhLAxzLjr2TiI= -github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= -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.4.2/go.mod h1:cLxOsn1ljAHSV527CHOtaIP91kK6cCrZETRBrkzItWU= -github.com/cosmos/gogoproto v1.4.7 h1:RzYKVnsEC7UIkDnhTIkqEB7LnIQbsySvmNEqPCiPevk= -github.com/cosmos/gogoproto v1.4.7/go.mod h1:gxGePp9qedovvl/StQL2BIJ6qlIBn1+9YxR0IulGBKA= -github.com/cosmos/iavl v0.20.0 h1:fTVznVlepH0KK8NyKq8w+U7c2L6jofa27aFX6YGlm38= -github.com/cosmos/iavl v0.20.0/go.mod h1:WO7FyvaZJoH65+HFOsDir7xU9FWk2w9cHXNW1XHcl7A= -github.com/cosmos/ibc-go/v7 v7.0.0 h1:j4kyywlG0hhDmT9FmSaR5iCIka7Pz7kJTxGWY1nlV9Q= -github.com/cosmos/ibc-go/v7 v7.0.0/go.mod h1:BFh8nKWjr5zeR2OZfhkzdgDzj1+KjRn3aJLpwapStj8= -github.com/cosmos/ics23/go v0.9.1-0.20221207100636-b1abd8678aab h1:I9ialKTQo7248V827Bba4OuKPmk+FPzmTVHsLXaIJWw= -github.com/cosmos/ics23/go v0.9.1-0.20221207100636-b1abd8678aab/go.mod h1:2CwqasX5dSD7Hbp/9b6lhK6BwoBDCBldx7gPKRukR60= -github.com/cosmos/keyring v1.2.0 h1:8C1lBP9xhImmIabyXW4c3vFjjLiBdGCmfLUfeZlV1Yo= -github.com/cosmos/keyring v1.2.0/go.mod h1:fc+wB5KTk9wQ9sDx0kFXB3A0MaeGHM9AwRStKOQ5vOA= -github.com/cosmos/ledger-cosmos-go v0.12.1/go.mod h1:dhO6kj+Y+AHIOgAe4L9HL/6NDdyyth4q238I9yFpD2g= -github.com/cosmos/rosetta-sdk-go v0.10.0 h1:E5RhTruuoA7KTIXUcMicL76cffyeoyvNybzUGSKFTcM= -github.com/cosmos/rosetta-sdk-go v0.10.0/go.mod h1:SImAZkb96YbwvoRkzSMQB6noNJXFgWl/ENIznEoYQI4= -github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= -github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/creachadair/taskgroup v0.4.2 h1:jsBLdAJE42asreGss2xZGZ8fJra7WtwnHWeJFxv2Li8= -github.com/creachadair/taskgroup v0.4.2/go.mod h1:qiXUOSrbwAY3u0JPGTzObbE3yf9hcXHDKBZ2ZjpCbgM= -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/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= -github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= -github.com/dave/jennifer v1.2.0/go.mod h1:fIb+770HOpJ2fmN9EPPKOqm1vMGhB+TwXKMZhrIygKg= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/deckarep/golang-set v1.8.0 h1:sk9/l/KqpunDwP7pSjUg0keiOOLEnOBHzykLrsPppp4= -github.com/deckarep/golang-set v1.8.0/go.mod h1:5nI87KwE7wgsBU1F4GKAw2Qod7p5kyS383rP6+o6qqo= -github.com/decred/base58 v1.0.4 h1:QJC6B0E0rXOPA8U/kw2rP+qiRJsUaE2Er+pYb3siUeA= -github.com/decred/base58 v1.0.4/go.mod h1:jJswKPEdvpFpvf7dsDvFZyLT22xZ9lWqEByX38oGd9E= -github.com/decred/dcrd/chaincfg/chainhash v1.0.2/go.mod h1:BpbrGgrPTr3YJYRN3Bm+D9NuaFd+zGyNeIKgrhCXK60= -github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= -github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= -github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.0 h1:3GIJYXQDAKpLEFriGFN8SbSffak10UXHGdIcFaMPykY= -github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.0/go.mod h1:3s92l0paYkZoIHuj4X93Teg/HB7eGM9x/zokGw+u4mY= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 h1:HbphB4TFFXpv7MNrT52FGrrgVXF1owhMVTHFZIlnvd4= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0/go.mod h1:DZGJHZMqrU4JJqFAWUS2UO1+lbSKsdiOoYi9Zzey7Fc= -github.com/deepmap/oapi-codegen v1.6.0/go.mod h1:ryDa9AgbELGeB+YEXE1dR53yAjHwFvE9iAUlWl9Al3M= -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/v2 v2.2007.4/go.mod h1:vSw/ax2qojzbN6eXHIx6KPKtCSHJN/Uz0X0VPruTIhk= -github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= -github.com/dgraph-io/ristretto v0.1.1/go.mod h1:S1GPSBCYCIhmVNfcth17y2zZtQT6wzkzgwUve0VDWWA= -github.com/dgryski/go-bitstream v0.0.0-20180413035011-3522498ce2c8/go.mod h1:VMaSuZ+SZcx/wljOQKvp5srsbCiKDEb6K2wC4+PiBmQ= -github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= -github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= -github.com/dnaeon/go-vcr v1.1.0/go.mod h1:M7tiix8f0r6mKKJ3Yq/kqU1OYf3MnfmBWVbPx/yU9ko= -github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= +github.com/cncf/xds/go v0.0.0-20230310173818-32f1caf87195/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U= +github.com/containerd/containerd v1.6.8/go.mod h1:By6p5KqPK0/7/CgO/A6t/Gz+CUYUu2zf1hUaaymVXB0= +github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= +github.com/containerd/typeurl v1.0.2/go.mod h1:9trJWW2sRlGub4wZJRTW83VtbOLS6hwcDZXTn6oPz9s= +github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= +github.com/coreos/go-systemd/v22 v22.3.3-0.20220203105225-a9a7ef127534/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= +github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= +github.com/cosmos/cosmos-sdk/db v1.0.0-beta.1.0.20220726092710-f848e4300a8a/go.mod h1:c8IO23vgNxueCCJlSI9awQtcxsvc+buzaeThB85qfBU= +github.com/cosmos/gogoproto v1.4.1/go.mod h1:Ac9lzL4vFpBMcptJROQ6dQ4M3pOEK5Z/l0Q9p+LoCr4= +github.com/creachadair/taskgroup v0.3.2/go.mod h1:wieWwecHVzsidg2CsUnFinW1faVN4+kq+TDlRJQ0Wbk= +github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/cristalhq/acmd v0.8.1/go.mod h1:LG5oa43pE/BbxtfMoImHCQN++0Su7dzipdgBjMCBVDQ= +github.com/curioswitch/go-reassign v0.2.0/go.mod h1:x6OpXuWvgfQaMGks2BZybTngWjT84hqJfKoO8Tt/Roc= +github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= +github.com/daixiang0/gci v0.8.1/go.mod h1:EpVfrztufwVgQRXjnX4zuNinEpLj5OmMjtu/+MB0V0c= +github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= +github.com/denis-tingaikin/go-header v0.4.3/go.mod h1:0wOCWuN71D5qIgE2nz9KrKmuYBAC2Mra5RassOIQ2/c= github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68= github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v1.4.2-0.20180625184442-8e610b2b55bf/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker v20.10.19+incompatible h1:lzEmjivyNHFHMNAFLXORMBXyGIhw/UP4DvJwvyKYq64= -github.com/docker/docker v20.10.19+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= -github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= -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/dop251/goja v0.0.0-20211011172007-d99e4b8cbf48/go.mod h1:R9ET47fwRVRPZnOGvHxxhuZcbrMCuiqOz3Rlrh4KSnk= -github.com/dop251/goja_nodejs v0.0.0-20210225215109-d91c329300e7/go.mod h1:hn7BA7c8pLvoGndExHudxTDKZ84Pyvv+90pbBjbTz0Y= -github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -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.5.0 h1:3j8ya4Z4kMCwT5nXIKFSV84YS+HdqSSO0VsTQxaLAeM= -github.com/dvsekhvalnov/jose2go v1.5.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB/mPZadG+mhXU= -github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= -github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= -github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= -github.com/eclipse/paho.mqtt.golang v1.2.0/go.mod h1:H9keYFcgq3Qr5OUJm/JZI/i6U7joQ8SYLhZwfeOo6Ts= -github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= -github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= -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/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= -github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= -github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= +github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= github.com/envoyproxy/go-control-plane v0.10.3/go.mod h1:fJJn/j26vwOu972OllsvAgJJM//w9BV6Fxbg2LuVd34= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/envoyproxy/go-control-plane v0.11.0/go.mod h1:VnHyVMpzcLvCFt9yUz1UnCwHLhwx1WguiVDV7pTG/tI= github.com/envoyproxy/protoc-gen-validate v0.6.7/go.mod h1:dyJXwwfPK2VSqiB9Klm1J6romD608Ba7Hij42vrOBCo= github.com/envoyproxy/protoc-gen-validate v0.9.1/go.mod h1:OKNgG7TCp5pF4d6XftA0++PMirau2/yoOwVac3AbF2w= -github.com/ethereum/go-ethereum v1.10.17 h1:XEcumY+qSr1cZQaWsQs5Kck3FHB0V2RiMHPdTBJ+oT8= -github.com/ethereum/go-ethereum v1.10.17/go.mod h1:Lt5WzjM07XlXc95YzrhosmR4J9Ahd6X2wyEV2SvGhk0= -github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/felixge/httpsnoop v1.0.2 h1:+nS9g82KMXccJ/wp0zyRW9ZBHFETmMGtkk+2CTTrW4o= -github.com/felixge/httpsnoop v1.0.2/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= -github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= -github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= -github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= -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.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= -github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= -github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= +github.com/envoyproxy/protoc-gen-validate v0.10.0/go.mod h1:DRjgyB0I43LtJapqN6NiRwroiAU2PaFuvk/vjgh61ss= +github.com/esimonov/ifshort v1.0.4/go.mod h1:Pe8zjlRrJ80+q2CxHLfEOfTwxCZ4O+MuhcHcfgNWTk0= +github.com/ettle/strcase v0.1.1/go.mod h1:hzDLsPC7/lwKyBOywSHEP89nt2pDgdy+No1NBA9o9VY= +github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= +github.com/facebookgo/stack v0.0.0-20160209184415-751773369052/go.mod h1:UbMTZqLaRiH3MsBH8va0n7s1pQYcu3uTb8G4tygF4Zg= +github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0= +github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= +github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= +github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= +github.com/firefart/nonamedreturns v1.0.4/go.mod h1:TDhe/tjI1BXo48CmYbUduTV7BdIga8MAO/xbKdcVsGI= +github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= +github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= +github.com/fzipp/gocyclo v0.6.0/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlyaLkLoA= github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg= github.com/gdamore/tcell/v2 v2.4.1-0.20210905002822-f057f0a857a1/go.mod h1:Az6Jt+M5idSED2YPGtwnfJV0kXohgdCBPmHGSYc1r04= github.com/gdamore/tcell/v2 v2.6.0/go.mod h1:be9omFATkdr0D9qewWW3d+MEvl5dha+Etb5y65J2H8Y= -github.com/getkin/kin-openapi v0.53.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= -github.com/getkin/kin-openapi v0.61.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= -github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk= -github.com/glycerine/go-unsnap-stream v0.0.0-20180323001048-9f0cb55181dd/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE= -github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24= -github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJpoZOs= -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-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.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= -github.com/go-kit/kit v0.12.0 h1:e4o3o3IsBfAKQh5Qbbiqyfu97Ku7jrO/JbohvztANh4= -github.com/go-kit/kit v0.12.0/go.mod h1:lHd+EkCZPIwYItmGDDRdhinkzX2A1sj+M9biaEaizzs= -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-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-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= -github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= -github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= -github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= -github.com/go-playground/validator/v10 v10.10.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos= -github.com/go-sourcemap/sourcemap v2.1.3+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= -github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= -github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/go-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw= -github.com/go-stack/stack v1.8.1/go.mod h1:dcoOX6HbPZSZptuspn9bctJ+N/CnF5gGygcUP3XYfe4= -github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= -github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= -github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= -github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= -github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= -github.com/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= -github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= -github.com/gogo/googleapis v1.4.1-0.20201022092350-68b0159b7869/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= -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.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= -github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang-jwt/jwt/v4 v4.3.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= -github.com/golang-jwt/jwt/v4 v4.4.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= -github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= -github.com/golang/geo v0.0.0-20190916061304-5b978397cfec/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/gliderlabs/ssh v0.3.5/go.mod h1:8XB4KraRrX39qHhT6yxPsHedjA08I/uBVwj4xC+/+z4= +github.com/go-chi/chi/v5 v5.0.7/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= +github.com/go-critic/go-critic v0.6.5/go.mod h1:ezfP/Lh7MA6dBNn4c6ab5ALv3sKnZVLx37tr00uuaOY= +github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= +github.com/go-git/go-billy/v5 v5.3.1/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= +github.com/go-git/go-billy/v5 v5.4.0/go.mod h1:vjbugF6Fz7JIflbVpl1hJsGjSHNltrSw45YK/ukIvQg= +github.com/go-git/go-git-fixtures/v4 v4.3.1/go.mod h1:8LHG1a3SRW71ettAD/jW13h8c6AqjVSeL11RAdgaqpo= +github.com/go-git/go-git/v5 v5.5.2/go.mod h1:BE5hUJ5yaV2YMxhmaP4l6RBQ08kMxKSPD4BlxtH7OjI= +github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= +github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= +github.com/go-logfmt/logfmt v0.5.1/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/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/go-toolsmith/astcast v1.0.0/go.mod h1:mt2OdQTeAQcY4DQgPSArJjHCcOwlX+Wl/kwN+LbLGQ4= +github.com/go-toolsmith/astcopy v1.0.2/go.mod h1:4TcEdbElGc9twQEYpVo/aieIXfHhiuLh4aLAck6dO7Y= +github.com/go-toolsmith/astequal v1.0.0/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= +github.com/go-toolsmith/astequal v1.0.2/go.mod h1:9Ai4UglvtR+4up+bAD4+hCj7iTo4m/OXVTSLnCyTAx4= +github.com/go-toolsmith/astequal v1.0.3/go.mod h1:9Ai4UglvtR+4up+bAD4+hCj7iTo4m/OXVTSLnCyTAx4= +github.com/go-toolsmith/astfmt v1.0.0/go.mod h1:cnWmsOAuq4jJY6Ct5YWlVLmcmLMn1JUPuQIHCY7CJDw= +github.com/go-toolsmith/astp v1.0.0/go.mod h1:RSyrtpVlfTFGDYRbrjyWP1pYu//tSFcvdYrA8meBmLI= +github.com/go-toolsmith/pkgload v1.0.2-0.20220101231613-e814995d17c5/go.mod h1:3NAwwmD4uY/yggRxoEjk/S00MIV3A+H7rrE3i87eYxM= +github.com/go-toolsmith/strparse v1.0.0/go.mod h1:YI2nUKP9YGZnL/L1/DLFBfixrcjslWct4wyljWhSRy8= +github.com/go-toolsmith/typep v1.0.2/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= +github.com/go-xmlfmt/xmlfmt v0.0.0-20191208150333-d5b6f63a941b/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM= +github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= +github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/godbus/dbus/v5 v5.0.6/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= +github.com/gofrs/uuid v4.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= -github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ= -github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -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/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= -github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/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.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= -github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= -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.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= -github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= -github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golangci/lint-1 v0.0.0-20181222135242-d2cdd8c08219/go.mod h1:/X8TswGSh1pIozq4ZwCfxS0WA5JGXguxk94ar/4c87Y= -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.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= -github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= -github.com/google/flatbuffers v1.11.0/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.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= -github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -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.1.1-0.20200604201612-c04b05f3adfa/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/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= +github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4= +github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk= +github.com/golangci/go-misc v0.0.0-20220329215616-d24fe342adfe/go.mod h1:gjqyPShc/m8pEMpk0a3SeagVb0kaqvhscv+i9jI5ZhQ= +github.com/golangci/gofmt v0.0.0-20220901101216-f2edd75033f2/go.mod h1:9wOXstvyDRshQ9LggQuzBCGysxs3b6Uo/1MvYCR2NMs= +github.com/golangci/golangci-lint v1.50.1/go.mod h1:AQjHBopYS//oB8xs0y0M/dtxdKHkdhl0RvmjUct0/4w= +github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0/go.mod h1:66R6K6P6VWk9I95jvqGxkqJxVWGFy9XlDwLwVz1RCFg= +github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca/go.mod h1:tvlJhZqDe4LMs4ZHD0oMUlt9G2LWuDGoisJTBzLMV9o= +github.com/golangci/misspell v0.3.5/go.mod h1:dEbvlSfYbMQDtrpRMQU675gSDLDNa8sCPPChZ7PhiVA= +github.com/golangci/revgrep v0.0.0-20220804021717-745bb2f7c2e6/go.mod h1:0AKcRCkMoKvUvlf89F6O7H2LYdhr1zBh736mBItOdRs= +github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ= github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= -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-20201218002935-b9804c9f04c2/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-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= -github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= -github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= -github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= github.com/googleapis/enterprise-certificate-proxy v0.2.1/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= -github.com/googleapis/enterprise-certificate-proxy v0.2.3 h1:yk9/cqRKtT9wXZSsRH9aurXEpJX+U6FLtpYTdC3R06k= -github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= -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/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= -github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= -github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= -github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= -github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= -github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= -github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= -github.com/googleapis/gax-go/v2 v2.7.0 h1:IcsPKeInNvYi7eqSaDjiZqDDKu5rsmunY0Y1YupQSSQ= -github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8= -github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= -github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= -github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= -github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= -github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= -github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= -github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= -github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/graph-gophers/graphql-go v1.3.0/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= -github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= -github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= -github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -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/gordonklaus/ineffassign v0.0.0-20210914165742-4cc7213b9bc8/go.mod h1:Qcp2HIAYhR7mNUVSIxZww3Guk4it82ghYcEXIAk+QT0= +github.com/gostaticanalysis/analysisutil v0.0.0-20190318220348-4088753ea4d3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= +github.com/gostaticanalysis/analysisutil v0.0.3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= +github.com/gostaticanalysis/analysisutil v0.1.0/go.mod h1:dMhHRU9KTiDcuLGdy87/2gTR8WruwYZrKdRq9m1O6uw= +github.com/gostaticanalysis/analysisutil v0.7.1/go.mod h1:v21E3hY37WKMGSnbsw2S/ojApNWb6C1//mXO48CXbVc= +github.com/gostaticanalysis/comment v1.3.0/go.mod h1:xMicKDx7XRXYdVwY9f9wQpDJVnqWxw9wCauCMKp+IBI= +github.com/gostaticanalysis/comment v1.4.1/go.mod h1:ih6ZxzTHLdadaiSnF5WY3dxUoXfXAlTaRzuaNDlSado= +github.com/gostaticanalysis/comment v1.4.2/go.mod h1:KLUTGDv6HOCotCH8h2erHKmpci2ZoR8VPu34YA2uzdM= +github.com/gostaticanalysis/forcetypeassert v0.1.0/go.mod h1:qZEedyP/sY1lTGV1uJ3VhWZ2mqag3IkWsDHVbplHXak= +github.com/gostaticanalysis/nilerr v0.1.1/go.mod h1:wZYb6YI5YAxxq0i1+VJbY0s2YONW0HU0GPE3+5PWN4A= +github.com/gostaticanalysis/testutil v0.3.1-0.20210208050101-bfb5c8eec0e4/go.mod h1:D+FIZ+7OahH3ePw/izIEeH5I06eKs1IKI4Xr64/Am3M= +github.com/gotestyourself/gotestyourself v2.2.0+incompatible/go.mod h1:zZKM6oeNM8k+FRljX1mnzVYeS8wiGgQyvST1/GafPbY= github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks= -github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c/go.mod h1:NMPJylDgVpX0MLRlPy15sqSwOFv/U1GZ2m21JhFfek0= -github.com/gtank/merlin v0.1.1-0.20191105220539-8318aed1a79f/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= -github.com/gtank/merlin v0.1.1 h1:eQ90iG7K9pOhtereWsmyRJ6RAwcP4tHTDBHXNg+u5is= -github.com/gtank/merlin v0.1.1/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= -github.com/gtank/ristretto255 v0.1.2 h1:JEqUCPA1NvLq5DwYtuzigd7ss8fwbYay9fi4/5uMzcc= -github.com/gtank/ristretto255 v0.1.2/go.mod h1:Ph5OpO6c7xKUGROZfWVLiJf9icMDwUeIvY4OmlYW69o= -github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= -github.com/hashicorp/consul/sdk v0.3.0/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/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-getter v1.7.0 h1:bzrYP+qu/gMrL1au7/aDvkoOVGUJpeKBgbqRHACAFDY= -github.com/hashicorp/go-getter v1.7.0/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744= -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-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-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= -github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= -github.com/hashicorp/go-safetemp v1.0.0 h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhEyExpmo= -github.com/hashicorp/go-safetemp v1.0.0/go.mod h1:oaerMy3BhqiTbVye6QuFhFtIceqFoDHxNAB65b+Rj1I= -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-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= -github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -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 v0.5.5-0.20210104140557-80c98217689d h1:dg1dEPuWpEqDnvIw251EVy4zlP8gWbsGj4BsUKCRpYs= -github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= -github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= -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/hdevalence/ed25519consensus v0.1.0 h1:jtBwzzcHuTmFrQN6xQZn6CQEO/V9f7HsjsjeEZ6auqU= -github.com/hdevalence/ed25519consensus v0.1.0/go.mod h1:w3BHWjwJbFU29IRHL1Iqkw3sus+7FctEyM4RqDxYNzo= -github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= -github.com/holiman/uint256 v1.2.0/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/huandu/go-assert v1.1.5/go.mod h1:yOLvuqZwmcHIC5rIzrBhT7D3Q9c3GFnd0JrPVhn/06U= -github.com/huandu/skiplist v1.2.0 h1:gox56QD77HzSC0w+Ws3MH3iie755GBJU1OER3h5VsYw= -github.com/huandu/skiplist v1.2.0/go.mod h1:7v3iFjLcSAzO4fN5B8dvebvo/qsfumiLiDXMrPiHF9w= -github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= -github.com/huin/goupnp v1.0.3-0.20220313090229-ca81a64b4204/go.mod h1:ZxNlw5WqJj6wSsRK5+YfflQGXYfccj5VgQsMNixHM7Y= -github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= +github.com/hashicorp/consul/api v1.18.0/go.mod h1:owRRGJ9M5xReDC5nfT8FTJrNAPbT4NM6p/k+d03q2v4= +github.com/hashicorp/consul/sdk v0.13.0/go.mod h1:0hs/l5fOVhJy/VdcoaNqUSi2AUs95eF5WKtv+EYIQqE= +github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= +github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-hclog v1.2.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= +github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= +github.com/hashicorp/go-retryablehttp v0.7.0/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= +github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= +github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A= +github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-version v1.2.1/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc= +github.com/hashicorp/memberlist v0.5.0/go.mod h1:yvyXLpo0QaGE59Y7hDTsTzDD25JYBZ4mHgHUZ8lrOI0= +github.com/hashicorp/serf v0.10.1/go.mod h1:yL2t6BqATOLGc5HF7qbFkTfXoPIY0WZdWHfEvMqbG+4= +github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= github.com/iancoleman/strcase v0.2.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/icza/dyno v0.0.0-20220812133438-f0b6f8a18845 h1:H+uM0Bv88eur3ZSsd2NGKg3YIiuXxwxtlN7HjE66UTU= -github.com/icza/dyno v0.0.0-20220812133438-f0b6f8a18845/go.mod h1:c1tRKs5Tx7E2+uHGSyyncziFjvGpgv4H2HrqXeUQ/Uk= -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.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -github.com/influxdata/flux v0.65.1/go.mod h1:J754/zds0vvpfwuq7Gc2wRdVwEodfpCFM7mYlOw2LqY= -github.com/influxdata/influxdb v1.8.3/go.mod h1:JugdFhsvvI8gadxOI6noqNeeBHvWNTbfYGtiAn+2jhI= -github.com/influxdata/influxdb-client-go/v2 v2.4.0/go.mod h1:vLNHdxTJkIf2mSLvGrpj8TCcISApPoXkaxP8g9uRlW8= -github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= -github.com/influxdata/influxql v1.1.1-0.20200828144457-65d3ef77d385/go.mod h1:gHp9y86a/pxhjJ+zMjNXiQAA197Xk9wLxaz+fGG+kWk= -github.com/influxdata/line-protocol v0.0.0-20180522152040-32c6aa80de5e/go.mod h1:4kt73NQhadE3daL3WhR5EJ/J2ocX0PZzwxQ0gXJ7oFE= -github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= -github.com/influxdata/line-protocol v0.0.0-20210311194329-9aa0e372d097/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= -github.com/influxdata/promql/v2 v2.12.0/go.mod h1:fxOPu+DY0bqCTCECchSRtWfc+0X19ybifQhZoQNF5D8= -github.com/influxdata/roaring v0.4.13-0.20180809181101-fc520f41fab6/go.mod h1:bSgUQ7q5ZLSO+bKBGqJiCBGAl+9DxyW63zLTujjUlOE= -github.com/influxdata/tdigest v0.0.0-20181121200506-bf2b5ad3c0a9/go.mod h1:Js0mqiSBE6Ffsg94weZZ2c+v/ciT8QRHFOap7EKDrR0= -github.com/influxdata/usage-client v0.0.0-20160829180054-6d3895376368/go.mod h1:Wbbw6tYNvwa5dlB6304Sd+82Z3f7PmVZHVKU637d4po= -github.com/ipfs/go-cid v0.2.0 h1:01JTiihFq9en9Vz0lc0VDWvZe/uBonGpzo4THP0vcQ0= -github.com/ipfs/go-cid v0.2.0/go.mod h1:P+HXFDF4CVhaVayiEb4wkAy7zBHxBwsJyt0Y5U6MLro= -github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= -github.com/jedisct1/go-minisign v0.0.0-20190909160543-45766022959e/go.mod h1:G1CVv03EnqU1wYL2dFwXxW2An0az9JTl/ZsqXQeBlkU= -github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= -github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= -github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= -github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= -github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= -github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= -github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -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.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/jsternberg/zap-logfmt v1.0.0/go.mod h1:uvPs/4X51zdkcm5jXl5SYoN+4RK21K8mysFmDaM/h+o= -github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -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/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= -github.com/jwilder/encoding v0.0.0-20170811194829-b4e1701a28ef/go.mod h1:Ct9fl0F6iIOGgxJ5npU/IUOhOhqlVrGjyIZc8/MagT0= -github.com/karalabe/usb v0.0.2/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= -github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= -github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= -github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= -github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= +github.com/informalsystems/tm-load-test v1.3.0/go.mod h1:OQ5AQ9TbT5hKWBNIwsMjn6Bf4O0U4b1kRc+0qZlQJKw= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= +github.com/jdxcode/netrc v0.0.0-20210204082910-926c7f70242a/go.mod h1:Zi/ZFkEqFHTm7qkjyNJjaWH4LQA9LQhGJyF0lTYGpxw= +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/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= +github.com/jgautheron/goconst v1.5.1/go.mod h1:aAosetZ5zaeC/2EfMeRswtxUFBpe2Hr7HzkgX4fanO4= +github.com/jhump/gopoet v0.0.0-20190322174617-17282ff210b3/go.mod h1:me9yfT6IJSlOL3FCfrg+L6yzUEZ+5jW6WHt4Sk+UPUI= +github.com/jhump/gopoet v0.1.0/go.mod h1:me9yfT6IJSlOL3FCfrg+L6yzUEZ+5jW6WHt4Sk+UPUI= +github.com/jhump/goprotoc v0.5.0/go.mod h1:VrbvcYrQOrTi3i0Vf+m+oqQWk9l72mjkJCYo7UvLHRQ= +github.com/jhump/protocompile v0.0.0-20220216033700-d705409f108f/go.mod h1:qr2b5kx4HbFS7/g4uYO5qv9ei8303JMsC7ESbYiqr2Q= +github.com/jhump/protoreflect v1.11.0/go.mod h1:U7aMIjN0NWq9swDP7xDdoMfRHb35uiuTd3Z9nFXJf5E= +github.com/jhump/protoreflect v1.12.1-0.20220721211354-060cc04fc18b/go.mod h1:JytZfP5d0r8pVNLZvai7U/MCuTWITgrI4tTg7puQFKI= +github.com/jhump/protoreflect v1.15.1/go.mod h1:jD/2GMKKE6OqX8qTjhADU1e6DShO+gavG9e0Q693nKo= +github.com/jingyugao/rowserrcheck v1.1.1/go.mod h1:4yvlZSDb3IyDTUZJUmpZfm2Hwok+Dtp+nu2qOq+er9c= +github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af/go.mod h1:HEWGJkRDzjJY2sqdDwxccsGicWEf9BQOZsq2tV+xzM0= +github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= +github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= +github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/julz/importas v0.1.0/go.mod h1:oSFU2R4XK/P7kNBrnL/FEQlDGN1/6WoxXEjSSXO0DV0= +github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/kisielk/errcheck v1.6.2/go.mod h1:nXw/i/MfnvRHqXa7XXmQMUB0oNFGuBrNI8d8NLy0LPw= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.4.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= -github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= -github.com/klauspost/compress v1.16.3 h1:XuJt9zzcnaz6a16/OU53ZjWp/v7/42WcR5t2a0PcNQY= -github.com/klauspost/compress v1.16.3/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/kkHAIKE/contextcheck v1.1.3/go.mod h1:PG/cwd6c0705/LM0KTr1acO2gORUxkSVWyLJOFW5qoo= +github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5 h1:2U0HzY8BJ8hVwDKIzp7y4voR9CX/nvcfymLmg2UiOio= -github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= -github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/klauspost/cpuid/v2 v2.2.3 h1:sxCkb+qR91z4vsqw4vGGZlDgPz3G7gjaLyK3V8y70BU= -github.com/klauspost/cpuid/v2 v2.2.3/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= -github.com/klauspost/crc32 v0.0.0-20161016154125-cb6bfca970f6/go.mod h1:+ZoRqAPRLkC4NPOvfYeR5KNOrY6TD+/sAC3HXPZgDYg= -github.com/klauspost/pgzip v1.0.2-0.20170402124221-0bf5dcad4ada/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= -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.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/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= -github.com/labstack/echo/v4 v4.2.1/go.mod h1:AA49e0DZ8kk5jTOOCKNuPR6oTnBS0dYiM4FW1e6jwpg= -github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= -github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= -github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= -github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw= -github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= -github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= -github.com/libp2p/go-libp2p v0.22.0 h1:2Tce0kHOp5zASFKJbNzRElvh0iZwdtG5uZheNW8chIw= -github.com/libp2p/go-libp2p v0.22.0/go.mod h1:UDolmweypBSjQb2f7xutPnwZ/fxioLbMBxSjRksxxU4= -github.com/libp2p/go-libp2p-core v0.20.1 h1:fQz4BJyIFmSZAiTbKV8qoYhEH5Dtv/cVhZbG3Ib/+Cw= -github.com/libp2p/go-libp2p-core v0.20.1/go.mod h1:6zR8H7CvQWgYLsbG4on6oLNSGcyKaYFSEYyDt51+bIY= -github.com/libp2p/go-openssl v0.1.0/go.mod h1:OiOxwPpL3n4xlenjx2h7AwSGaFSC/KZvf6gNdOBQMtc= -github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= -github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= +github.com/klauspost/pgzip v1.2.5/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= +github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kulti/thelper v0.6.3/go.mod h1:DsqKShOvP40epevkFrvIwkCMNYxMeTNjdWL4dqWHZ6I= +github.com/kunwardeep/paralleltest v1.0.6/go.mod h1:Y0Y0XISdZM5IKm3TREQMZ6iteqn1YuwCsJO/0kL9Zes= +github.com/kyoh86/exportloopref v0.1.8/go.mod h1:1tUcJeiioIs7VWe5gcOObrux3lb66+sBqGZrRkMwPgg= +github.com/ldez/gomoddirectives v0.2.3/go.mod h1:cpgBogWITnCfRq2qGoDkKMEVSaarhdBr6g8G04uz6d0= +github.com/ldez/tagliatelle v0.3.1/go.mod h1:8s6WJQwEYHbKZDsp/LjArytKOG8qaMrKQQ3mFukHs88= +github.com/leonklingele/grouper v1.1.0/go.mod h1:uk3I3uDfi9B6PeUjsCKi6ndcf63Uy7snXgR4yDYQVDY= github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= +github.com/lufeee/execinquery v1.2.1/go.mod h1:EC7DrEKView09ocscGHC+apXMIaorh4xqSxS/dy8SbM= github.com/lyft/protoc-gen-star v0.6.0/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= -github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= -github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= -github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/manifoldco/promptui v0.9.0 h1:3V4HzJk1TtXW1MTZMP7mdlwbBpIinw3HztaIlYthEiA= -github.com/manifoldco/promptui v0.9.0/go.mod h1:ka04sppxSGFAtxX0qhlYQjISsg9mR4GWtQEhdbn6Pgg= -github.com/matryer/moq v0.0.0-20190312154309-6cfb0558e1bd/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= -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.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= -github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-pointer v0.0.1/go.mod h1:2zXcozF6qYGgmsG+SeTZz3oAbFLdD3OWqnUbNvJZAlc= -github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= +github.com/maratori/testableexamples v1.0.0/go.mod h1:4rhjL1n20TUTT4vdh3RDqSizKLyXp7K2u6HgraZCGzE= +github.com/maratori/testpackage v1.1.0/go.mod h1:PeAhzU8qkCwdGEMTEupsHJNlQu2gZopMC6RjbhmHeDc= +github.com/matoous/godox v0.0.0-20210227103229-6504466cf951/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= +github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA= +github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= +github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +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.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= +github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= -github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= -github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= -github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= -github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= -github.com/mimoo/StrobeGo v0.0.0-20220103164710-9a04d6ca976b h1:QrHweqAtyJ9EwCaGHBu1fghwxIPiopAHV06JlXrMHjk= -github.com/mimoo/StrobeGo v0.0.0-20220103164710-9a04d6ca976b/go.mod h1:xxLb2ip6sSUts3g1irPVHyk/DGslwQsNOo9I7smJfNU= -github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g= -github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= -github.com/minio/sha256-simd v1.0.0 h1:v1ta+49hkWZyvaKwrQB8elexRqm6Y0aMLjCNsrYxo6g= -github.com/minio/sha256-simd v1.0.0/go.mod h1:OuYzVNI5vcoYIAmbIvHPl3N3jUzVedXbKy5RFepssQM= -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/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.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= -github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/pointerstructure v1.2.0/go.mod h1:BRAsLI5zgXmw97Lf6s25bs8ohIXc3tViBH44KcwB2g4= -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 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= -github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8= -github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= -github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae/go.mod h1:qAyveg+e4CE+eKJXWVjKXM4ck2QobLqTDytGJbLLhJg= -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/multiformats/go-base32 v0.0.4 h1:+qMh4a2f37b4xTNs6mqitDinryCI+tfO2dRVMN9mjSE= -github.com/multiformats/go-base32 v0.0.4/go.mod h1:jNLFzjPZtp3aIARHbJRZIaPuspdH0J6q39uUM5pnABM= -github.com/multiformats/go-base36 v0.1.0 h1:JR6TyF7JjGd3m6FbLU2cOxhC0Li8z8dLNGQ89tUg4F4= -github.com/multiformats/go-base36 v0.1.0/go.mod h1:kFGE83c6s80PklsHO9sRn2NCoffoRdUUOENyW/Vv6sM= -github.com/multiformats/go-multiaddr v0.6.0 h1:qMnoOPj2s8xxPU5kZ57Cqdr0hHhARz7mFsPMIiYNqzg= -github.com/multiformats/go-multiaddr v0.6.0/go.mod h1:F4IpaKZuPP360tOMn2Tpyu0At8w23aRyVqeK0DbFeGM= -github.com/multiformats/go-multibase v0.1.1 h1:3ASCDsuLX8+j4kx58qnJ4YFq/JWTJpCyDW27ztsVTOI= -github.com/multiformats/go-multibase v0.1.1/go.mod h1:ZEjHE+IsUrgp5mhlEAYjMtZwK1k4haNkcaPg9aoe1a8= -github.com/multiformats/go-multicodec v0.5.0 h1:EgU6cBe/D7WRwQb1KmnBvU7lrcFGMggZVTPtOW9dDHs= -github.com/multiformats/go-multicodec v0.5.0/go.mod h1:DiY2HFaEp5EhEXb/iYzVAunmyX/aSFMxq2KMKfWEues= -github.com/multiformats/go-multihash v0.2.1 h1:aem8ZT0VA2nCHHk7bPJ1BjUbHNciqZC/d16Vve9l108= -github.com/multiformats/go-multihash v0.2.1/go.mod h1:WxoMcYG85AZVQUyRyo9s4wULvW5qrI9vb2Lt6evduFc= -github.com/multiformats/go-varint v0.0.6 h1:gk85QWKxh3TazbLxED/NlDVv8+q+ReFJk7Y2W/KhfNY= -github.com/multiformats/go-varint v0.0.6/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -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/mwitkow/grpc-proxy v0.0.0-20181017164139-0f1106ef9c76/go.mod h1:x5OoJHDHqxHS801UIuhqGl6QdSAEJvtausosHSdazIo= -github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= -github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= -github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= -github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= -github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= -github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= -github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= -github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= -github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= -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/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= -github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= -github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= -github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -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/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/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= -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.0-rc2 h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034= -github.com/opencontainers/image-spec v1.1.0-rc2/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ= -github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= -github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= -github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/opentracing/opentracing-go v1.0.3-0.20180606204148-bd9c31933947/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= -github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= -github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= -github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= -github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= -github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/paulbellamy/ratecounter v0.2.0/go.mod h1:Hfx1hDpSGoqxkVVpBi/IlYD7kChlfo5C6hzIHwPqfFE= -github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -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.0.6 h1:nrzqCb7j9cDFj2coyLNLaZuJTLjWjlaz6nvTvIwycIU= -github.com/pelletier/go-toml/v2 v2.0.6/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek= -github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= -github.com/peterh/liner v1.0.1-0.20180619022028-8c1271fcf47f/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc= -github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= -github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= -github.com/petermattis/goid v0.0.0-20221215004737-a150e88a970d/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= -github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= -github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= -github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pierrec/xxHash v0.1.5 h1:n/jBpwTHiER4xYvK3/CdPVnLDPchj8eTJFFLUb4QHBo= -github.com/pierrec/xxHash v0.1.5/go.mod h1:w2waW5Zoa/Wc4Yqe0wgrIYAGKqRMf7czn2HNKXmuL+I= -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/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= +github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= +github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/mbilski/exhaustivestruct v1.2.0/go.mod h1:OeTBVxQWoEmB2J2JCHmXWPJ0aksxSUOUy+nvtVEfzXc= +github.com/mgechev/revive v1.2.4/go.mod h1:iAWlQishqCuj4yhV24FTnKSXGpbAA+0SckXB8GQMX/Q= +github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= +github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= +github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= +github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= +github.com/moby/buildkit v0.10.4/go.mod h1:Yajz9vt1Zw5q9Pp4pdb3TCSUXJBIroIQGQ3TTs/sLug= +github.com/moby/sys/mountinfo v0.5.0/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU= +github.com/moby/term v0.0.0-20220808134915-39b0c02b01ae/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw= +github.com/moricho/tparallel v0.2.1/go.mod h1:fXEIZxG2vdfl0ZF8b42f5a78EhjjD5mX8qUplsoSU4k= +github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= +github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ= +github.com/nakabonne/nestif v0.3.1/go.mod h1:9EtoZochLn5iUprVDmDjqGKPofoUEBL8U4Ngq6aY7OE= +github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354/go.mod h1:KSVJerMDfblTH7p5MZaTt+8zaT2iEk3AkVb9PQdZuE8= +github.com/nishanths/exhaustive v0.8.3/go.mod h1:qj+zJJUgJ76tR92+25+03oYUhzF4R7/2Wk7fGTfCHmg= +github.com/nishanths/predeclared v0.2.2/go.mod h1:RROzoN6TnGQupbC+lqggsOlcgysk3LMK/HI84Mp280c= +github.com/onsi/ginkgo/v2 v2.1.4/go.mod h1:um6tUpWM/cxCK3/FK8BXqEiUMUwRgSM4JXG47RKZmLU= +github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +github.com/onsi/gomega v1.20.0/go.mod h1:DtrZpjmvpn2mPm4YWQa0/ALMDj9v4YxLgojwPeREyVo= +github.com/opencontainers/runc v1.1.3/go.mod h1:1J5XiS+vdZ3wCyZybsuxXZWGrgSr8fFJHLXuG2PsnNg= +github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/selinux v1.10.0/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI= +github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= +github.com/otiai10/copy v1.2.0/go.mod h1:rrF5dJ5F0t/EWSYODDu4j9/vEeYHMkc8jt0zJChqQWw= +github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= +github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs= +github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo= +github.com/otiai10/mint v1.3.1/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= +github.com/pelletier/go-toml/v2 v2.0.5/go.mod h1:OMHamSCAODeSsVrwwvcJOaoN0LIUIaFVNZzmWyNfXas= +github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d/go.mod h1:3OzsM7FXDQlpCiw2j81fOmAwQLnZnLGXVKUzeKQXIAw= +github.com/pjbgf/sha1cd v0.2.3/go.mod h1:HOK9QrgzdHpbc2Kzip0Q1yi3M2MFGPADtR6HjG65m5M= +github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= +github.com/pkg/profile v1.6.0/go.mod h1:qBsxPvzyUincmltOk6iyRVxHYg4adc0OFOv72ZdLa18= github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= -github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= -github.com/pkg/term v0.0.0-20180730021639-bffc007b7fd5/go.mod h1:eCbImbZ95eXtAUIbLAuAVnBnwf83mjf6QIVH8SHYwqQ= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= -github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= -github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= -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.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw= -github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/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.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4= -github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= -github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= -github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= -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.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= -github.com/prometheus/common v0.40.0 h1:Afz7EVRqGg2Mqqf4JuF9vdvp1pi220m55Pi9T2JnO4Q= -github.com/prometheus/common v0.40.0/go.mod h1:L65ZJPSmfn/UBWLQIHV7dBrKFidB/wPlF1y5TlSt9OE= -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/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.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI= -github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY= -github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ= -github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Unghqrcc= -github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= -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/regen-network/protobuf v1.3.3-alpha.regen.1 h1:OHEc+q5iIAXpqiqFKeLpu5NwTIkVXUs48vFMwzqpqY4= -github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI= -github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= -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/retailnext/hllpp v1.0.1-0.20180308014038-101a6d2f8b52/go.mod h1:RDpi1RftBQPUCDRw6SmxeaREsAaRKnOclghuzp/WRzc= +github.com/pointlander/compress v1.1.1-0.20190518213731-ff44bd196cc3/go.mod h1:q5NXNGzqj5uPnVuhGkZfmgHqNUhf15VLi6L9kW0VEc0= +github.com/pointlander/jetset v1.0.1-0.20190518214125-eee7eff80bd4/go.mod h1:RdR1j20Aj5pB6+fw6Y9Ur7lMHpegTEjY1vc19hEZL40= +github.com/pointlander/peg v1.0.1/go.mod h1:5hsGDQR2oZI4QoWz0/Kdg3VSVEC31iJw/b7WjqCBGRI= +github.com/polyfloyd/go-errorlint v1.0.5/go.mod h1:APVvOesVSAnne5SClsPxPdfvZTVDojXh1/G3qb5wjGI= +github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= +github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= +github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= +github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= +github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= +github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= +github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= +github.com/quasilyte/go-ruleguard v0.3.1-0.20210203134552-1b5a410e1cc8/go.mod h1:KsAh3x0e7Fkpgs+Q9pNLS5XpFSvYCEVl5gP9Pp1xp30= +github.com/quasilyte/go-ruleguard v0.3.18/go.mod h1:lOIzcYlgxrQ2sGJ735EHXmf/e9MJ516j16K/Ifcttvs= +github.com/quasilyte/go-ruleguard/dsl v0.3.0/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= +github.com/quasilyte/go-ruleguard/dsl v0.3.21/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= +github.com/quasilyte/go-ruleguard/rules v0.0.0-20201231183845-9e62ed36efe1/go.mod h1:7JTjp89EGyU1d6XfBiXihJNG37wB2VRkd125Q1u7Plc= +github.com/quasilyte/go-ruleguard/rules v0.0.0-20211022131956-028d6511ab71/go.mod h1:4cgAphtvu7Ftv7vOT2ZOYhC6CvBxZixcasr8qIOTA50= +github.com/quasilyte/gogrep v0.0.0-20220828223005-86e4605de09f/go.mod h1:Cm9lpz9NZjEoL1tgZ2OgeUKPIxL1meE7eo60Z6Sk+Ng= +github.com/quasilyte/regex/syntax v0.0.0-20200407221936-30656e2c4a95/go.mod h1:rlzQ04UMyJXu/aOvhd8qT+hvDrFpiwqp8MRXDY9szc0= +github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567/go.mod h1:DWNGW8A4Y+GyBgPuaQJuWiy0XYftx4Xm/y5Jqk9I6VQ= github.com/rivo/tview v0.0.0-20220307222120-9994674d60a8/go.mod h1:WIfMkQNY+oq/mWwtsjOYHIZBuwthioY2srOmljJkTnk= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.3/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= -github.com/rjeczalik/notify v0.9.1/go.mod h1:rKwnCoCGeuQnwBtTSPL9Dad03Vh2n40ePRrjvIXnJho= -github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= -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/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= -github.com/rs/cors v1.8.3 h1:O+qNyWn7Z+F9M0ILBHgMVPuB1xTOucVd5gtaYyXBpRo= -github.com/rs/cors v1.8.3/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= -github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -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/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= -github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= -github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/segmentio/kafka-go v0.1.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= -github.com/segmentio/kafka-go v0.2.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= -github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -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.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= -github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= -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/snikch/goodman v0.0.0-20171125024755-10e37e294daa h1:YJfZp12Z3AFhSBeXOlv4BO55RMwPn2NoQeDsrdWnBtY= -github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa/go.mod h1:oJyF+mSPHbB5mVY2iO9KV3pTt/QbIkGaO8gQ2WrDbP4= -github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= -github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572/go.mod h1:w0SWMsp6j9O/dk4/ZpIhL+3CkG8ofA2vuv7k+ltqUMc= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= -github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/rs/cors v1.8.2/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= +github.com/rs/xid v1.3.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= +github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= +github.com/rs/zerolog v1.27.0/go.mod h1:7frBqO0oezxmnO7GF86FY++uy8I0Tk/If5ni1G9Qc0U= +github.com/rs/zerolog v1.29.1/go.mod h1:Le6ESbR7hc+DP6Lt1THiV8CQSdkkNrd3R0XbEgp3ZBU= +github.com/ryancurrah/gomodguard v1.2.4/go.mod h1:+Kem4VjWwvFpUJRJSwa16s1tBJe+vbv02+naTow2f6M= +github.com/ryanrolds/sqlclosecheck v0.3.0/go.mod h1:1gREqxyTGR3lVtpngyFo3hZAgk0KCtEdgEkHwDbigdA= +github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/sagikazarmark/crypt v0.9.0/go.mod h1:RnH7sEhxfdnPm1z+XMgSLjWTEIjyK4z2dw6+4vHTMuo= +github.com/sanposhiho/wastedassign/v2 v2.0.6/go.mod h1:KyZ0MWTwxxBmfwn33zh3k1dmsbF2ud9pAAGfoLfjhtI= +github.com/sashamelentyev/interfacebloat v1.1.0/go.mod h1:+Y9yU5YdTkrNvoX0xHc84dxiN1iBi9+G8zZIhPVoNjQ= +github.com/sashamelentyev/usestdlibvars v1.20.0/go.mod h1:0GaP+ecfZMXShS0A94CJn6aEuPRILv8h/VuWI9n1ygg= +github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= +github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg= +github.com/securego/gosec/v2 v2.13.1/go.mod h1:EO1sImBMBWFjOTFzMWfTRrZW6M15gm60ljzrmy/wtHo= +github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c/go.mod h1:/PevMnwAxekIXwN8qQyfc5gl2NlkB3CQlkizAbOkeBs= +github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= +github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= +github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/sivchari/containedctx v1.0.2/go.mod h1:PwZOeqm4/DLoJOqMSIJs3aKqXRX4YO+uXww087KZ7Bw= +github.com/sivchari/nosnakecase v1.7.0/go.mod h1:CwDzrzPea40/GB6uynrNLiorAlgFRvRbFSgJx2Gs+QY= +github.com/sivchari/tenv v1.7.0/go.mod h1:64yStXKSOxDfX47NlhVwND4dHwfZDdbp2Lyl018Icvg= +github.com/skeema/knownhosts v1.1.0/go.mod h1:sKFq3RD6/TKZkSWn8boUbDC7Qkgcv+8XXijpFO6roag= +github.com/sonatard/noctx v0.0.1/go.mod h1:9D2D/EoULe8Yy2joDHJj7bv3sZoq9AaSb8B4lqBjiZI= +github.com/sourcegraph/go-diff v0.6.1/go.mod h1:iBszgVvyxdc8SFZ7gm69go2KDdt3ag071iBaWPF6cjs= github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= -github.com/spf13/afero v1.9.3 h1:41FoI0fD7OR7mGcKE/aOiLkGreyf8ifIOQmJANWogMk= -github.com/spf13/afero v1.9.3/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= -github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= -github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/cobra v1.6.1 h1:o94oiPyS4KD1mPy2fmcYYHHfCxLqYjJOhGsCHFZtEzA= -github.com/spf13/cobra v1.6.1/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= -github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= -github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= -github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/spf13/viper v1.15.0 h1:js3yy885G8xwJa6iOISGFwd+qlUo5AvyXb7CiihdtiU= -github.com/spf13/viper v1.15.0/go.mod h1:fFcTBJxvhhzSJiZy8n+PeW6t8l+KeT/uTARa0jHOQLA= -github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q= -github.com/strangelove-ventures/go-subkey v1.0.7 h1:cOP/Lajg3uxV/tvspu0m6+0Cu+DJgygkEAbx/s+f35I= -github.com/strangelove-ventures/go-subkey v1.0.7/go.mod h1:E34izOIEm+sZ1YmYawYRquqBQWeZBjVB4pF7bMuhc1c= -github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= -github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= -github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= -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.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/testify v1.2.0/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.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.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= -github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8= -github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= -github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= -github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= -github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c/go.mod h1:ahpPrc7HpcfEWDQRZEmnXMzHY03mLDYMCxeDzy46i+8= -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/tidwall/btree v1.6.0 h1:LDZfKfQIBHGHWSwckhXI0RPSXzlo+KYdjK7FWSqOzzg= -github.com/tidwall/btree v1.6.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= -github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= -github.com/tklauser/go-sysconf v0.3.5/go.mod h1:MkWzOF4RMCshBAMXuhXJs64Rte09mITnppBXY/rYEFI= -github.com/tklauser/numcpus v0.2.2/go.mod h1:x3qojaO3uyYt0i56EW/VUYs7uBvdl2fkfZFu0T9wgjM= -github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= -github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= -github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M= -github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= -github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= -github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= -github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= -github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= -github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= -github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= -github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= -github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= -github.com/willf/bitset v1.1.3/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= -github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= -github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= -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/spf13/afero v1.8.2/go.mod h1:CtAatgMJh6bJEIs48Ay/FOnkljP3WeGUG0MC1RfAqwo= +github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= +github.com/spf13/viper v1.13.0/go.mod h1:Icm2xNL3/8uyh/wFuB1jI7TiTNKp8632Nwegu+zgdYw= +github.com/spf13/viper v1.14.0/go.mod h1:WT//axPky3FdvXHzGw33dNdXXXfFQqmEalje+egj8As= +github.com/ssgreg/nlreturn/v2 v2.2.1/go.mod h1:E/iiPB78hV7Szg2YfRgyIrk1AD6JVMTRkkxBiELzh2I= +github.com/stbenjam/no-sprintf-host-port v0.1.1/go.mod h1:TLhvtIvONRzdmkFiio4O8LHsN9N74I+PhRquPsxpL0I= +github.com/stretchr/testify v1.1.4/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.7.5/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/subosito/gotenv v1.4.1/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= +github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= +github.com/tdakkota/asciicheck v0.1.1/go.mod h1:yHp0ai0Z9gUljN3o0xMhYJnH/IcvkdTBOX2fmJ93JEM= +github.com/tenntenn/modver v1.0.1/go.mod h1:bePIyQPb7UeioSRkw3Q0XeMhYZSMx9B8ePqg6SAMGH0= +github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3/go.mod h1:ON8b8w4BN/kE1EOhwT0o+d62W65a6aPw1nouo9LMgyY= +github.com/tetafro/godot v1.4.11/go.mod h1:LR3CJpxDVGlYOWn3ZZg1PgNZdTUvzsZWu8xaEohUpn8= +github.com/timakin/bodyclose v0.0.0-20210704033933-f49887972144/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= +github.com/timonwong/loggercheck v0.9.3/go.mod h1:wUqnk9yAOIKtGA39l1KLE9Iz0QiTocu/YZoOf+OzFdw= +github.com/tomarrell/wrapcheck/v2 v2.7.0/go.mod h1:ao7l5p0aOlUNJKI0qVwB4Yjlqutd0IvAB9Rdwyilxvg= +github.com/tommy-muehle/go-mnd/v2 v2.5.1/go.mod h1:WsUAkMJMYww6l/ufffCD3m+P7LEvr8TnZn9lwVDlgzw= +github.com/ultraware/funlen v0.0.3/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= +github.com/ultraware/whitespace v0.0.5/go.mod h1:aVMh/gQve5Maj9hQ/hg+F75lr/X5A89uZnzAmWSineA= +github.com/uudashr/gocognit v1.0.6/go.mod h1:nAIUuVBnYU7pcninia3BHOvQkpQCeO76Uscky5BOwcY= +github.com/vektra/mockery/v2 v2.14.0/go.mod h1:bnD1T8tExSgPD1ripLkDbr60JA9VtQeu12P3wgLZd7M= +github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= +github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= +github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= +github.com/xhit/go-str2duration v1.2.0/go.mod h1:3cPSlfZlUHVlneIVfePFWcJZsuwf+P1v2SRTV4cUmp4= +github.com/yagipy/maintidx v1.0.0/go.mod h1:0qNf/I/CCZXSMhsRsrEPDZ+DkekpKLXAJfsTACwgXLk= +github.com/yeya24/promlinter v0.2.0/go.mod h1:u54lkmBOZrpEbQQ6gox2zWKKLKu2SGe+2KOiextY+IA= github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -github.com/zondax/hid v0.9.1/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= -github.com/zondax/ledger-go v0.14.1/go.mod h1:fZ3Dqg6qcdXWSOJFKMG8GCTnD7slO/RL2feOQv8K320= -go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.7/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= -go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= -go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= -go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= -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.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= -go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +github.com/zondax/ledger-go v0.14.0/go.mod h1:fZ3Dqg6qcdXWSOJFKMG8GCTnD7slO/RL2feOQv8K320= +gitlab.com/bosi/decorder v0.2.3/go.mod h1:9K1RB5+VPNQYtXtTDAzd2OEftsZb1oV0IrJrzChSdGE= +go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= +go.etcd.io/etcd/api/v3 v3.5.6/go.mod h1:KFtNaxGDw4Yx/BA4iPPwevUTAuqcsPxzyX8PHydchN8= +go.etcd.io/etcd/client/pkg/v3 v3.5.6/go.mod h1:ggrwbk069qxpKPq8/FKkQ3Xq9y39kbFR4LnKszpRXeQ= +go.etcd.io/etcd/client/v2 v2.305.6/go.mod h1:BHha8XJGe8vCIBfWBpbBLVZ4QjOIlfoouvOwydu63E0= +go.etcd.io/etcd/client/v3 v3.5.6/go.mod h1:f6GRinRMCsFVv9Ht42EyY7nfsVGwrNO0WEoS2pRKzQk= +go.etcd.io/gofail v0.1.0/go.mod h1:VZBCXYGZhHAinaBiiqYvuDynvahNsAyLFwB3kEHKz1M= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.36.3/go.mod h1:Dts42MGkzZne2yCru741+bFiTMWkIj/LLRizad7b9tw= +go.opentelemetry.io/otel v1.11.0/go.mod h1:H2KtuEphyMvlhZ+F7tg9GRhAOe60moNx61Ex+WmiKkk= +go.opentelemetry.io/otel/trace v1.11.0/go.mod h1:nyYjis9jy0gytE9LXGU+/m1sHTKbRY0fX0hulNNDP1U= go.opentelemetry.io/proto/otlp v0.15.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= -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.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= -go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= -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.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= -go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= -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.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= -go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= -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-20181203042331-505ab145d0a9/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-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-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= +go.uber.org/goleak v1.1.12/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= +go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= +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.23.0/go.mod h1:D+nX8jyLsMHMYrln8A0rJjFt/T/9/bGgIhAqxv5URuY= +golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190909091759-094676da4a83/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/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-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -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-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.7.0 h1:AvwMYaRytfdeVt3u6mLaxYtErKYjxA2OXjJ1HHq6t3A= -golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/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-20190125153040-c74c464bbbf2/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-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= -golang.org/x/exp v0.0.0-20230310171629-522b1b587ee0 h1:LGJsf5LRplCck6jUCH3dBL2dmycNruWNF5xugkSlfXw= -golang.org/x/exp v0.0.0-20230310171629-522b1b587ee0/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= -golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= -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/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= +golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220826181053-bd7e27e6170d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= +golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= +golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA= +golang.org/x/exp v0.0.0-20221205204356-47842c84f3db/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= +golang.org/x/exp v0.0.0-20230131160201-f062dba9d201/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= +golang.org/x/exp/typeparams v0.0.0-20220428152302-39d4317da171/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= +golang.org/x/exp/typeparams v0.0.0-20220827204233-334a2380cb91/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= golang.org/x/mod v0.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= +golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI= 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/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-20181220203305-927f97764cc3/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-20190125091013-d26f9f9a57f3/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-20200421231249-e086a090c8fd/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-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -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-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210220033124-5f55cee0dc0d/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-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210610132358-84b48f89b13b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= +golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/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-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/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.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= -golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= -golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211216030914-fe4d6282115f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220826154423-83b083e8dc8b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= +golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ= -golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= -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-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= -golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= -golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= -golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= -golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= -golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= +golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/oauth2 v0.4.0/go.mod h1:RznEsdpjGAINPTOF0UH/t+xJ75L18YO3Ho6Pyn+uRec= -golang.org/x/oauth2 v0.5.0 h1:HuArIo48skDwlrvM3sEdHXElYslAMsf3KwRkkW4MC4s= -golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I= -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-20220601150217-0de741cfad7f/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.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= -golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -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-20181107165924-66b7b1311ac8/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-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190130150945-aca44879d564/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-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-20190626221950-04f50cda93cb/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-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/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-20191220142924-d4481acd189f/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-20200107162124-548cf772de50/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-20200420163511-1957bb5e6d1f/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-20200826173525-f9321e4c35a6/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-20210104204734-6f8348627aad/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-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sync v0.0.0-20220819030929-7fc1605a5dde/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210309074719-68d13333faf2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210316164454-77fc1eacc6aa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210420205809-ac73e9fd8988/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/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-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210603125802-9665404d3644/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-20210616094352-59db8d763f22/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-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210819135213-f52c844e1c1c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34/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-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211210111614-af8b64212486/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-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220315194320-039c03cc5b86/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/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-20220502124256-b6088ccd6cba/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-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211105183446-c75c47738b0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211116061358-0a5406a5449c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220702020025-31831981b65f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220825204002-c680a09ffe64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.4.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 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= -golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -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-20201210144234-2321bbc49cbf/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.6.0 h1:clScbb1cHjoCkyRbWwBEUZ5H/tIFu5TAXIqaZD0Gcjw= -golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= -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.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68= -golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-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.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/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-20181030221726-6c7e314b6563/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-20190206041539-40960b6deb8e/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-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-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-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-20200108203644-89082a384178/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-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/time v0.1.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20190307163923-6a08e3108db3/go.mod h1:25r3+/G6/xytQM8iWZKq3Hn0kr0rgFKPUNVEL/dr3z4= +golang.org/x/tools v0.0.0-20190311215038-5c2858a9cfe5/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190321232350-e250d351ecad/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190322203728-c1a832b0ad89/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190910044552-dd2b5c81c578/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190916130336-e45ffcd953cc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200117220505-0cba7a3a9ee9/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200324003944-a576cf524670/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200329025819-fd4102a86c65/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200414032229-332987a829c3/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200622203043-20e05c1c8ffa/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200624225443-88f3c62a19ff/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200625211823-6506e20df31f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200724022722-7017fd6b1305/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200812195022-5ae4c3c160a0/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200820010801-b793a1359eac/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200831203904-5a2aa26beb65/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= +golang.org/x/tools v0.0.0-20201001104356-43ebab892c4c/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= +golang.org/x/tools v0.0.0-20201002184944-ecd9fd270d5d/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= +golang.org/x/tools v0.0.0-20201023174141-c8cfbd0f21e6/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201230224404-63754364767c/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.1-0.20210205202024-ef80cdb6ec6d/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU= +golang.org/x/tools v0.1.1-0.20210302220138-2ac05c832e1a/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU= +golang.org/x/tools v0.1.9-0.20211228192929-ee1ca4ffc4da/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= +golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= -golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.1.11/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4= +golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA= 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/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-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= -golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= -gonum.org/v1/gonum v0.0.0-20181121035319-3f7ecaa7e8ca/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= -gonum.org/v1/gonum v0.6.0/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU= -gonum.org/v1/netlib v0.0.0-20181029234149-ec6d1f5cefe6/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= -gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= -gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= -google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= -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.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= -google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= -google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= -google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= -google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= -google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= -google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= -google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= -google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= -google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= -google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= -google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= -google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= -google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= -google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= -google.golang.org/api v0.77.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= -google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= -google.golang.org/api v0.80.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg= -google.golang.org/api v0.84.0/go.mod h1:NTsGnUFJMYROtiquksZHBWtHfeMC7iYthki7Eq3pa8o= -google.golang.org/api v0.85.0/go.mod h1:AqZf8Ep9uZ2pyTvgL+x0D3Zt0eoT9b5E8fmzfu6FO2g= -google.golang.org/api v0.90.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= -google.golang.org/api v0.93.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= -google.golang.org/api v0.95.0/go.mod h1:eADj+UBuxkh5zlrSntJghuNeg8HwQ1w5lTKkuqaETEI= -google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= -google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= -google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= -google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= +gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= google.golang.org/api v0.106.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= +google.golang.org/api v0.107.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= google.golang.org/api v0.108.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= -google.golang.org/api v0.110.0 h1:l+rh0KYUooe9JGbGVx71tbFo4SMbMTXK3I3ia2QSEeU= -google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -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-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= -google.golang.org/genproto v0.0.0-20190716160619-c506a9f90610/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -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-20200108215221-bd8f9a0ef82f/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-20200324203455-a04cca1dde73/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/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-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210126160654-44e461bb6506/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-20210226172003-ab064af71705/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-20210329143202-679c6ae281ee/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-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= -google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= -google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= -google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= -google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= -google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= -google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= -google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220314164441-57ef72a4c106/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= -google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= google.golang.org/genproto v0.0.0-20220329172620-7be39ac1afc7/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220628213854-d9e0b6570c03/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220722212130-b98a9ff5e252/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE= -google.golang.org/genproto v0.0.0-20220801145646-83ce21fca29f/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= -google.golang.org/genproto v0.0.0-20220815135757-37a418bb8959/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220817144833-d7fd3f11b9b1/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220829144015-23454907ede3/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220829175752-36a9c930ecbf/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220913154956-18f8339a66a5/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220914142337-ca0e39ece12f/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220915135415-7fd63a7952de/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220916172020-2692e8806bfa/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220919141832-68c03719ef51/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220920201722-2b89144ce006/go.mod h1:ht8XFiar2npT/g4vkk7O0WYS1sHOHbdujxbEp7CJWbw= -google.golang.org/genproto v0.0.0-20220926165614-551eb538f295/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= -google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= -google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqwhZAwq4wsRUaVG555sVgsNmIjRtO7t/JH29U= -google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= -google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= -google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= +google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221227171554-f9683d7f8bef/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= google.golang.org/genproto v0.0.0-20230124163310-31e0e69b6fc2/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= google.golang.org/genproto v0.0.0-20230209215440-0dfe4f8abfcc/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44 h1:EfLuoKW5WfkgVdDy7dTK8qSbH37AX5mj/MFh+bGPz14= -google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44/go.mod h1:8B0gmkoRebU8ukX6HP+4wrVQUY1+6PkQ44BSyIlflHA= -google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.23.1/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.32.0/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.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= -google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= -google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.41.0/go.mod h1:U3l9uK9J0sini8mHphKoXyaqDA/8VyGnDee1zzIUK6k= google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= -google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= -google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= -google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= -google.golang.org/grpc v1.53.0 h1:LAv2ds7cmFV/XTS3XG1NneeENYrXGmorPxsBbptIjNc= -google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= -google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= -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.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.29.1 h1:7QBf+IK2gx70Ap/hDsOmam3GE0v9HicjfEdAxE62UoM= -google.golang.org/protobuf v1.29.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -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/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= -gopkg.in/cheggaaa/pb.v1 v1.0.27/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= -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/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= -gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= -gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= -gopkg.in/olebedev/go-duktape.v3 v3.0.0-20200619000410-60c24ae608a6/go.mod h1:uAJfkITjFhyEEuUfm7bsmCZRbW5WRq8s9EY8HZ6hCns= -gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/urfave/cli.v1 v1.20.0/go.mod h1:vuBzUtMdQeixQj8LVd+/98pzhxNGQoyuPBlsXHOQNO0= -gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= -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 v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= -gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= -gotest.tools/v3 v3.4.0 h1:ZazjZUfuVeZGLAmlKKuyv3IKP5orXcwtOwDQH6YVr6o= -gotest.tools/v3 v3.4.0/go.mod h1:CtbdzLSsqVhDgMtKsx03ird5YTGB3ar27v0u/yKBW5g= -honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -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= -lukechampine.com/blake3 v1.1.7 h1:GgRMhmdsuK8+ii6UZFDL8Nb+VyMwadAgcJyfYHxG6n0= -lukechampine.com/blake3 v1.1.7/go.mod h1:tkKEOtDkNtklkXtLNEOGNq5tcV90tJiA1vAA12R78LA= -lukechampine.com/uint128 v1.2.0/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= -modernc.org/cc/v3 v3.40.0/go.mod h1:/bTg4dnWkSXowUO6ssQKnOV0yMVxDYNIsIrzqTFDGH0= -modernc.org/ccgo/v3 v3.16.13/go.mod h1:2Quk+5YgpImhPjv2Qsob1DnZ/4som1lJTodubIcoUkY= -modernc.org/libc v1.22.3 h1:D/g6O5ftAfavceqlLOFwaZuA5KYafKwmr30A6iSqoyY= -modernc.org/libc v1.22.3/go.mod h1:MQrloYP209xa2zHome2a8HLiLm6k0UT8CoHpV74tOFw= -modernc.org/mathutil v1.5.0 h1:rV0Ko/6SfM+8G+yKiyI830l3Wuz1zRutdslNoQ0kfiQ= -modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= -modernc.org/memory v1.5.0 h1:N+/8c5rE6EqugZwHii4IFsaJ7MUhoWX07J5tC/iI5Ds= -modernc.org/memory v1.5.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= -modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= -modernc.org/sqlite v1.21.0 h1:4aP4MdUf15i3R3M2mx6Q90WHKz3nZLoz96zlB6tNdow= -modernc.org/sqlite v1.21.0/go.mod h1:XwQ0wZPIh1iKb5mkvCJ3szzbhk+tykC8ZWqTRTgYRwI= -modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw= -modernc.org/token v1.0.1/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= -nhooyr.io/websocket v1.8.6 h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k= -nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= -pgregory.net/rapid v0.5.5 h1:jkgx1TjbQPD/feRoK+S/mXw9e1uj6WilpHrXJowi6oA= -pgregory.net/rapid v0.5.5/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= -rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= -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.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= -sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= -sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= -sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= +google.golang.org/grpc v1.52.0/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY= +google.golang.org/protobuf v1.27.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.2-0.20220831092852-f930b1dc76e8/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.28.2-0.20230222093303-bc1253ad3743/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= +gotest.tools/v3 v3.2.0/go.mod h1:Mcr9QNxkg0uMvy/YElmo4SpXgJKWgQvYrT7Kw5RzJ1A= +honnef.co/go/tools v0.3.3/go.mod h1:jzwdWgg7Jdq75wlfblQxO4neNaFFSvgc1tD5Wv8U0Yw= +mvdan.cc/gofumpt v0.4.0/go.mod h1:PljLOHDeZqgS8opHRKLzp2It2VBuSdteAgqUfzMTxlQ= +mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc= +mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4= +mvdan.cc/unparam v0.0.0-20220706161116-678bad134442/go.mod h1:F/Cxw/6mVrNKqrR2YjFf5CaW0Bw4RL8RfbEf4GRggJk= +sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= From 2f00f7f6162f730a2a622bb4dea3d3e14c6fb6de Mon Sep 17 00:00:00 2001 From: Eduardo Diaz Date: Sun, 11 Jun 2023 23:06:41 -0400 Subject: [PATCH 078/501] add MsgExecute to the bypass of fees --- Makefile | 2 +- proto/xion/globalfee/genesis.proto | 43 +++++++++++++++++++++++++++ proto/xion/globalfee/query.proto | 27 +++++++++++++++++ x/globalfee/ante/antetest/fee_test.go | 2 ++ x/globalfee/types/params.go | 5 +++- 5 files changed, 77 insertions(+), 2 deletions(-) create mode 100644 proto/xion/globalfee/genesis.proto create mode 100644 proto/xion/globalfee/query.proto diff --git a/Makefile b/Makefile index d163f8b5..a8f6bab0 100644 --- a/Makefile +++ b/Makefile @@ -13,7 +13,7 @@ XION_IMAGE=xion:local # for dockerized protobuf tools DOCKER := $(shell which docker) BUF_IMAGE=bufbuild/buf@sha256:3cb1f8a4b48bd5ad8f09168f10f607ddc318af202f5c057d52a45216793d85e5 #v1.4.0 -DOCKER_BUF := $(DOCKER) run --rm -v $(CURDIR):/workspace --workdir /workspace $(BUF_IMAGE) +DOCKER_BUF := $(DOCKER) run --rm -v $(CURDIR):/workspace --workdir /workspace --platform linux/amd64 $(BUF_IMAGE) HTTPS_GIT := https://github.com/burnt-labs/xiond.git export GO111MODULE = on diff --git a/proto/xion/globalfee/genesis.proto b/proto/xion/globalfee/genesis.proto new file mode 100644 index 00000000..b1500790 --- /dev/null +++ b/proto/xion/globalfee/genesis.proto @@ -0,0 +1,43 @@ +syntax = "proto3"; +package xion.globalfee.v1; + +import "gogoproto/gogo.proto"; +import "cosmos/base/v1beta1/coin.proto"; + +option go_package = "github.com/burnt-labs/xion/x/globalfee/types"; + +// GenesisState - initial state of module +message GenesisState { + // Params of this module + Params params = 1 [ + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "params,omitempty" + ]; +} + +// Params defines the set of module parameters. +message Params { + // minimum_gas_prices stores the minimum gas price(s) for all TX on the chain. + // When multiple coins are defined then they are accepted alternatively. + // The list must be sorted by denoms asc. No duplicate denoms or zero amount + // values allowed. For more information see + // https://docs.cosmos.network/main/modules/auth#concepts + repeated cosmos.base.v1beta1.DecCoin minimum_gas_prices = 1 [ + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "minimum_gas_prices,omitempty", + (gogoproto.moretags) = "yaml:\"minimum_gas_prices\"", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.DecCoins" + ]; + + // bypass_min_fee_msg_types defines a list of message type urls + // that are free of fee charge. + repeated string bypass_min_fee_msg_types = 2 [ + (gogoproto.jsontag) = "bypass_min_fee_msg_types,omitempty", + (gogoproto.moretags) = "yaml:\"bypass_min_fee_msg_types\"" + ]; + + // max_total_bypass_min_fee_msg_gas_usage defines the total maximum gas usage + // allowed for a transaction containing only messages of types in bypass_min_fee_msg_types + // to bypass fee charge. + uint64 max_total_bypass_min_fee_msg_gas_usage = 3; +} diff --git a/proto/xion/globalfee/query.proto b/proto/xion/globalfee/query.proto new file mode 100644 index 00000000..cb187644 --- /dev/null +++ b/proto/xion/globalfee/query.proto @@ -0,0 +1,27 @@ +syntax = "proto3"; +package xion.globalfee.v1; + +import "xion/globalfee/v1/genesis.proto"; +import "gogoproto/gogo.proto"; +import "google/api/annotations.proto"; + +option go_package = "github.com/burnt-labs/xion/x/globalfee/types"; + +// Query defines the gRPC querier service. +service Query { + rpc Params(QueryParamsRequest) + returns (QueryParamsResponse) { + option (google.api.http).get = + "/xion/globalfee/v1/params"; + } +} + +// QueryMinimumGasPricesRequest is the request type for the +// Query/MinimumGasPrices RPC method. +message QueryParamsRequest {} + +// QueryMinimumGasPricesResponse is the response type for the +// Query/MinimumGasPrices RPC method. +message QueryParamsResponse { + Params params = 1 [(gogoproto.nullable) = false]; +} diff --git a/x/globalfee/ante/antetest/fee_test.go b/x/globalfee/ante/antetest/fee_test.go index 207ec52d..49254210 100644 --- a/x/globalfee/ante/antetest/fee_test.go +++ b/x/globalfee/ante/antetest/fee_test.go @@ -12,6 +12,8 @@ import ( "github.com/stretchr/testify/suite" xionfeeante "github.com/burnt-labs/xion/x/globalfee/ante" + + globfeetypes "github.com/burnt-labs/xion/x/globalfee/types" ) var testGasLimit uint64 = 200_000 diff --git a/x/globalfee/types/params.go b/x/globalfee/types/params.go index a365e915..a713e67a 100644 --- a/x/globalfee/types/params.go +++ b/x/globalfee/types/params.go @@ -4,6 +4,7 @@ import ( "fmt" "strings" + wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" @@ -19,8 +20,10 @@ var ( // DefaultMinGasPrices is set at runtime to the staking token with zero amount i.e. "0uatom" // see DefaultZeroGlobalFee method in xion/x/globalfee/ante/fee.go. - DefaultMinGasPrices = sdk.DecCoins{} + DefaultMinGasPrices = sdk.DecCoins{} + DefaultBypassMinFeeMsgTypes = []string{ + sdk.MsgTypeURL(&wasmtypes.MsgExecuteContract{}), sdk.MsgTypeURL(&ibcchanneltypes.MsgRecvPacket{}), sdk.MsgTypeURL(&ibcchanneltypes.MsgAcknowledgement{}), sdk.MsgTypeURL(&ibcclienttypes.MsgUpdateClient{}), From cf5b1e4af5f5bd93ce7b7860cab4234ea8488ee7 Mon Sep 17 00:00:00 2001 From: Eduardo Diaz Date: Mon, 12 Jun 2023 10:53:30 -0400 Subject: [PATCH 079/501] add globalfeemodule --- app/app.go | 8 ++++++-- x/globalfee/module.go | 22 ++++++++++++++-------- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/app/app.go b/app/app.go index a66dadea..7a058f79 100644 --- a/app/app.go +++ b/app/app.go @@ -697,6 +697,7 @@ func NewWasmApp( nftmodule.NewAppModule(appCodec, app.NFTKeeper, app.AccountKeeper, app.BankKeeper, app.interfaceRegistry), consensus.NewAppModule(appCodec, app.ConsensusParamsKeeper), xion.NewAppModule(app.XionKeeper), + globalfee.NewAppModule(app.GetSubspace(globalfee.ModuleName), app.GetSubspace(stakingtypes.ModuleName)), wasm.NewAppModule(appCodec, &app.WasmKeeper, app.StakingKeeper, app.AccountKeeper, app.BankKeeper, app.MsgServiceRouter(), app.GetSubspace(wasmtypes.ModuleName)), ibc.NewAppModule(app.IBCKeeper), transfer.NewAppModule(app.TransferKeeper), @@ -718,6 +719,7 @@ func NewWasmApp( genutiltypes.ModuleName, authz.ModuleName, feegrant.ModuleName, nft.ModuleName, group.ModuleName, paramstypes.ModuleName, vestingtypes.ModuleName, consensusparamtypes.ModuleName, + globalfee.ModuleName, xiontypes.ModuleName, // additional non simd modules ibctransfertypes.ModuleName, @@ -734,7 +736,9 @@ func NewWasmApp( genutiltypes.ModuleName, evidencetypes.ModuleName, authz.ModuleName, feegrant.ModuleName, nft.ModuleName, group.ModuleName, paramstypes.ModuleName, upgradetypes.ModuleName, vestingtypes.ModuleName, - consensusparamtypes.ModuleName, xiontypes.ModuleName, + consensusparamtypes.ModuleName, + globalfee.ModuleName, + xiontypes.ModuleName, // additional non simd modules ibctransfertypes.ModuleName, ibcexported.ModuleName, @@ -756,7 +760,7 @@ func NewWasmApp( distrtypes.ModuleName, stakingtypes.ModuleName, slashingtypes.ModuleName, govtypes.ModuleName, minttypes.ModuleName, crisistypes.ModuleName, genutiltypes.ModuleName, evidencetypes.ModuleName, authz.ModuleName, feegrant.ModuleName, nft.ModuleName, group.ModuleName, paramstypes.ModuleName, upgradetypes.ModuleName, - vestingtypes.ModuleName, consensusparamtypes.ModuleName, xiontypes.ModuleName, + vestingtypes.ModuleName, consensusparamtypes.ModuleName, globalfee.ModuleName, xiontypes.ModuleName, // additional non simd modules ibctransfertypes.ModuleName, ibcexported.ModuleName, diff --git a/x/globalfee/module.go b/x/globalfee/module.go index 3ca36792..e70555b9 100644 --- a/x/globalfee/module.go +++ b/x/globalfee/module.go @@ -16,6 +16,8 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/spf13/cobra" + stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" + "github.com/burnt-labs/xion/x/globalfee/client/cli" "github.com/burnt-labs/xion/x/globalfee/types" ) @@ -78,29 +80,33 @@ func (a AppModuleBasic) RegisterLegacyAminoCodec(_ *codec.LegacyAmino) { type AppModule struct { AppModuleBasic - paramSpace paramstypes.Subspace + globalfeeSubspace paramstypes.Subspace + stakingSubspace paramstypes.Subspace } // NewAppModule constructor -func NewAppModule(paramSpace paramstypes.Subspace) *AppModule { - if !paramSpace.HasKeyTable() { - paramSpace = paramSpace.WithKeyTable(types.ParamKeyTable()) +func NewAppModule(globalfeeSubspace paramstypes.Subspace, stakingSubspace paramstypes.Subspace) *AppModule { + if !globalfeeSubspace.HasKeyTable() { + globalfeeSubspace = globalfeeSubspace.WithKeyTable(types.ParamKeyTable()) + } + if !stakingSubspace.HasKeyTable() { + stakingSubspace = stakingSubspace.WithKeyTable(stakingtypes.ParamKeyTable()) } - return &AppModule{paramSpace: paramSpace} + return &AppModule{globalfeeSubspace: globalfeeSubspace, stakingSubspace: stakingSubspace} } func (a AppModule) InitGenesis(ctx sdk.Context, marshaler codec.JSONCodec, message json.RawMessage) []abci.ValidatorUpdate { var genesisState types.GenesisState marshaler.MustUnmarshalJSON(message, &genesisState) - a.paramSpace.SetParamSet(ctx, &genesisState.Params) + a.globalfeeSubspace.SetParamSet(ctx, &genesisState.Params) return nil } func (a AppModule) ExportGenesis(ctx sdk.Context, marshaler codec.JSONCodec) json.RawMessage { var genState types.GenesisState - a.paramSpace.GetParamSet(ctx, &genState.Params) + a.globalfeeSubspace.GetParamSet(ctx, &genState.Params) return marshaler.MustMarshalJSON(&genState) } @@ -112,7 +118,7 @@ func (a AppModule) QuerierRoute() string { } func (a AppModule) RegisterServices(cfg module.Configurator) { - types.RegisterQueryServer(cfg.QueryServer(), NewGrpcQuerier(a.paramSpace)) + types.RegisterQueryServer(cfg.QueryServer(), NewGrpcQuerier(a.globalfeeSubspace)) } func (a AppModule) BeginBlock(_ sdk.Context, _ abci.RequestBeginBlock) { From 718633bcc54c8a14e0d8fa6851975ea1f78bb2d2 Mon Sep 17 00:00:00 2001 From: Ash Date: Mon, 12 Jun 2023 15:39:25 -0400 Subject: [PATCH 080/501] move protos for warnings --- proto/xion/{xion => }/v1/genesis.proto | 0 proto/xion/{xion => }/v1/tx.proto | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename proto/xion/{xion => }/v1/genesis.proto (100%) rename proto/xion/{xion => }/v1/tx.proto (100%) diff --git a/proto/xion/xion/v1/genesis.proto b/proto/xion/v1/genesis.proto similarity index 100% rename from proto/xion/xion/v1/genesis.proto rename to proto/xion/v1/genesis.proto diff --git a/proto/xion/xion/v1/tx.proto b/proto/xion/v1/tx.proto similarity index 100% rename from proto/xion/xion/v1/tx.proto rename to proto/xion/v1/tx.proto From a36acb6e9ed96e64f081273f3b5c8cbbc0392705 Mon Sep 17 00:00:00 2001 From: Ash Date: Mon, 12 Jun 2023 15:53:39 -0400 Subject: [PATCH 081/501] update proto path --- x/xion/types/genesis.pb.go | 32 ++++++------- x/xion/types/tx.pb.go | 96 +++++++++++++++++++------------------- 2 files changed, 64 insertions(+), 64 deletions(-) diff --git a/x/xion/types/genesis.pb.go b/x/xion/types/genesis.pb.go index e115e4b8..3346616f 100644 --- a/x/xion/types/genesis.pb.go +++ b/x/xion/types/genesis.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: xion/xion/v1/genesis.proto +// source: xion/v1/genesis.proto package types @@ -31,7 +31,7 @@ func (m *GenesisState) Reset() { *m = GenesisState{} } func (m *GenesisState) String() string { return proto.CompactTextString(m) } func (*GenesisState) ProtoMessage() {} func (*GenesisState) Descriptor() ([]byte, []int) { - return fileDescriptor_d94107830e1c4574, []int{0} + return fileDescriptor_9a0f59b6b1baf029, []int{0} } func (m *GenesisState) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -71,22 +71,22 @@ func init() { proto.RegisterType((*GenesisState)(nil), "xion.v1.GenesisState") } -func init() { proto.RegisterFile("xion/xion/v1/genesis.proto", fileDescriptor_d94107830e1c4574) } +func init() { proto.RegisterFile("xion/v1/genesis.proto", fileDescriptor_9a0f59b6b1baf029) } -var fileDescriptor_d94107830e1c4574 = []byte{ +var fileDescriptor_9a0f59b6b1baf029 = []byte{ // 181 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0xaa, 0xc8, 0xcc, 0xcf, - 0xd3, 0x07, 0x13, 0x65, 0x86, 0xfa, 0xe9, 0xa9, 0x79, 0xa9, 0xc5, 0x99, 0xc5, 0x7a, 0x05, 0x45, - 0xf9, 0x25, 0xf9, 0x42, 0xec, 0x20, 0x61, 0xbd, 0x32, 0x43, 0x29, 0x91, 0xf4, 0xfc, 0xf4, 0x7c, - 0xb0, 0x98, 0x3e, 0x88, 0x05, 0x91, 0x56, 0xb2, 0xe7, 0xe2, 0x71, 0x87, 0xa8, 0x0f, 0x2e, 0x49, - 0x2c, 0x49, 0x15, 0xd2, 0xe7, 0x12, 0x2e, 0xc8, 0x49, 0x2c, 0x49, 0xcb, 0x2f, 0xca, 0x8d, 0x2f, - 0x48, 0x2d, 0x4a, 0x4e, 0xcd, 0x2b, 0x49, 0x4c, 0x4f, 0x95, 0x60, 0x54, 0x60, 0xd4, 0xe0, 0x0d, - 0x12, 0x82, 0x49, 0x05, 0xc0, 0x65, 0x9c, 0x1c, 0x4f, 0x3c, 0x92, 0x63, 0xbc, 0xf0, 0x48, 0x8e, - 0xf1, 0xc1, 0x23, 0x39, 0xc6, 0x09, 0x8f, 0xe5, 0x18, 0x2e, 0x3c, 0x96, 0x63, 0xb8, 0xf1, 0x58, - 0x8e, 0x21, 0x4a, 0x3d, 0x3d, 0xb3, 0x24, 0xa3, 0x34, 0x49, 0x2f, 0x39, 0x3f, 0x57, 0x3f, 0xa9, - 0xb4, 0x28, 0xaf, 0x44, 0x37, 0x27, 0x31, 0xa9, 0x18, 0xe2, 0xcc, 0x0a, 0x08, 0x55, 0x52, 0x59, - 0x90, 0x5a, 0x9c, 0xc4, 0x06, 0x76, 0x8a, 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0x95, 0x9b, 0xfd, - 0xef, 0xc7, 0x00, 0x00, 0x00, + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0xad, 0xc8, 0xcc, 0xcf, + 0xd3, 0x2f, 0x33, 0xd4, 0x4f, 0x4f, 0xcd, 0x4b, 0x2d, 0xce, 0x2c, 0xd6, 0x2b, 0x28, 0xca, 0x2f, + 0xc9, 0x17, 0x62, 0x07, 0x09, 0xeb, 0x95, 0x19, 0x4a, 0x89, 0xa4, 0xe7, 0xa7, 0xe7, 0x83, 0xc5, + 0xf4, 0x41, 0x2c, 0x88, 0xb4, 0x92, 0x3d, 0x17, 0x8f, 0x3b, 0x44, 0x7d, 0x70, 0x49, 0x62, 0x49, + 0xaa, 0x90, 0x3e, 0x97, 0x70, 0x41, 0x4e, 0x62, 0x49, 0x5a, 0x7e, 0x51, 0x6e, 0x7c, 0x41, 0x6a, + 0x51, 0x72, 0x6a, 0x5e, 0x49, 0x62, 0x7a, 0xaa, 0x04, 0xa3, 0x02, 0xa3, 0x06, 0x6f, 0x90, 0x10, + 0x4c, 0x2a, 0x00, 0x2e, 0xe3, 0xe4, 0x78, 0xe2, 0x91, 0x1c, 0xe3, 0x85, 0x47, 0x72, 0x8c, 0x0f, + 0x1e, 0xc9, 0x31, 0x4e, 0x78, 0x2c, 0xc7, 0x70, 0xe1, 0xb1, 0x1c, 0xc3, 0x8d, 0xc7, 0x72, 0x0c, + 0x51, 0xea, 0xe9, 0x99, 0x25, 0x19, 0xa5, 0x49, 0x7a, 0xc9, 0xf9, 0xb9, 0xfa, 0x49, 0xa5, 0x45, + 0x79, 0x25, 0xba, 0x39, 0x89, 0x49, 0xc5, 0xfa, 0x60, 0x67, 0x56, 0x40, 0xa8, 0x92, 0xca, 0x82, + 0xd4, 0xe2, 0x24, 0x36, 0xb0, 0x53, 0x8c, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xf1, 0x35, 0xe8, + 0xba, 0xc2, 0x00, 0x00, 0x00, } func (m *GenesisState) Marshal() (dAtA []byte, err error) { diff --git a/x/xion/types/tx.pb.go b/x/xion/types/tx.pb.go index bdd6e730..f8ae0d29 100644 --- a/x/xion/types/tx.pb.go +++ b/x/xion/types/tx.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: xion/xion/v1/tx.proto +// source: xion/v1/tx.proto package types @@ -45,7 +45,7 @@ func (m *MsgSend) Reset() { *m = MsgSend{} } func (m *MsgSend) String() string { return proto.CompactTextString(m) } func (*MsgSend) ProtoMessage() {} func (*MsgSend) Descriptor() ([]byte, []int) { - return fileDescriptor_780dee9ad54baf68, []int{0} + return fileDescriptor_5076275aa290c9b8, []int{0} } func (m *MsgSend) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -82,7 +82,7 @@ func (m *MsgSendResponse) Reset() { *m = MsgSendResponse{} } func (m *MsgSendResponse) String() string { return proto.CompactTextString(m) } func (*MsgSendResponse) ProtoMessage() {} func (*MsgSendResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_780dee9ad54baf68, []int{1} + return fileDescriptor_5076275aa290c9b8, []int{1} } func (m *MsgSendResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -123,7 +123,7 @@ func (m *MsgMultiSend) Reset() { *m = MsgMultiSend{} } func (m *MsgMultiSend) String() string { return proto.CompactTextString(m) } func (*MsgMultiSend) ProtoMessage() {} func (*MsgMultiSend) Descriptor() ([]byte, []int) { - return fileDescriptor_780dee9ad54baf68, []int{2} + return fileDescriptor_5076275aa290c9b8, []int{2} } func (m *MsgMultiSend) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -174,7 +174,7 @@ func (m *MsgMultiSendResponse) Reset() { *m = MsgMultiSendResponse{} } func (m *MsgMultiSendResponse) String() string { return proto.CompactTextString(m) } func (*MsgMultiSendResponse) ProtoMessage() {} func (*MsgMultiSendResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_780dee9ad54baf68, []int{3} + return fileDescriptor_5076275aa290c9b8, []int{3} } func (m *MsgMultiSendResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -213,7 +213,7 @@ func (m *MsgSetPlatformPercentage) Reset() { *m = MsgSetPlatformPercenta func (m *MsgSetPlatformPercentage) String() string { return proto.CompactTextString(m) } func (*MsgSetPlatformPercentage) ProtoMessage() {} func (*MsgSetPlatformPercentage) Descriptor() ([]byte, []int) { - return fileDescriptor_780dee9ad54baf68, []int{4} + return fileDescriptor_5076275aa290c9b8, []int{4} } func (m *MsgSetPlatformPercentage) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -263,7 +263,7 @@ func (m *MsgSetPlatformPercentageResponse) Reset() { *m = MsgSetPlatform func (m *MsgSetPlatformPercentageResponse) String() string { return proto.CompactTextString(m) } func (*MsgSetPlatformPercentageResponse) ProtoMessage() {} func (*MsgSetPlatformPercentageResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_780dee9ad54baf68, []int{5} + return fileDescriptor_5076275aa290c9b8, []int{5} } func (m *MsgSetPlatformPercentageResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -301,48 +301,48 @@ func init() { proto.RegisterType((*MsgSetPlatformPercentageResponse)(nil), "xion.v1.MsgSetPlatformPercentageResponse") } -func init() { proto.RegisterFile("xion/xion/v1/tx.proto", fileDescriptor_780dee9ad54baf68) } +func init() { proto.RegisterFile("xion/v1/tx.proto", fileDescriptor_5076275aa290c9b8) } -var fileDescriptor_780dee9ad54baf68 = []byte{ - // 602 bytes of a gzipped FileDescriptorProto +var fileDescriptor_5076275aa290c9b8 = []byte{ + // 601 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x54, 0x41, 0x8f, 0xd2, 0x40, - 0x14, 0x6e, 0x41, 0x21, 0xcc, 0xae, 0x51, 0x2a, 0x28, 0x5b, 0xb3, 0x05, 0x9b, 0x18, 0x91, 0x84, - 0x56, 0x30, 0x6a, 0x82, 0x31, 0x11, 0x3c, 0x79, 0x20, 0x6e, 0xd8, 0x9b, 0x17, 0xd2, 0xc2, 0x6c, - 0x69, 0xa0, 0x33, 0x4d, 0x67, 0x4a, 0xd8, 0x9b, 0xf1, 0x64, 0x3c, 0x79, 0xf1, 0xbe, 0x47, 0xe3, - 0x69, 0x0f, 0xea, 0x6f, 0xd8, 0xe3, 0xc6, 0x93, 0x27, 0x35, 0x70, 0x58, 0xe3, 0xaf, 0x30, 0x33, - 0x9d, 0x16, 0xd6, 0xc5, 0x70, 0x69, 0x3b, 0xef, 0xbd, 0xef, 0x9b, 0xef, 0x7b, 0x6f, 0xa6, 0xa0, - 0x38, 0x73, 0x31, 0x32, 0xf9, 0x63, 0xda, 0x30, 0xe9, 0xcc, 0xf0, 0x03, 0x4c, 0xb1, 0x92, 0x65, - 0x11, 0x63, 0xda, 0x50, 0x0b, 0x0e, 0x76, 0x30, 0x8f, 0x99, 0xec, 0x2b, 0x4a, 0xab, 0x37, 0x07, - 0x98, 0x78, 0x98, 0x98, 0x1e, 0x71, 0x18, 0xcc, 0x23, 0x8e, 0x48, 0xe4, 0x2d, 0xcf, 0x45, 0xd8, - 0xe4, 0x4f, 0x11, 0xda, 0x89, 0x6a, 0xfb, 0x11, 0x49, 0xb4, 0x10, 0x29, 0x4d, 0xd0, 0xd8, 0x16, - 0x81, 0xe6, 0xb4, 0x61, 0x43, 0x6a, 0x35, 0xcc, 0x01, 0x76, 0xd1, 0x85, 0x3c, 0x1a, 0x27, 0x79, - 0xb6, 0x88, 0xf2, 0xfa, 0x87, 0x14, 0xc8, 0x76, 0x89, 0xb3, 0x0f, 0xd1, 0x50, 0x79, 0x02, 0xb6, - 0x0f, 0x02, 0xec, 0xf5, 0xad, 0xe1, 0x30, 0x80, 0x84, 0x94, 0xe4, 0x8a, 0x5c, 0xcd, 0x75, 0x4a, - 0xdf, 0x3e, 0xd7, 0x0b, 0x62, 0xcf, 0x76, 0x94, 0xd9, 0xa7, 0x81, 0x8b, 0x9c, 0xde, 0x16, 0xab, - 0x16, 0x21, 0xe5, 0x31, 0x00, 0x14, 0x27, 0xd0, 0xd4, 0x06, 0x68, 0x8e, 0xe2, 0x18, 0x38, 0x02, - 0x19, 0xcb, 0xc3, 0x21, 0xa2, 0xa5, 0x74, 0x25, 0x5d, 0xdd, 0x6a, 0xee, 0x18, 0x02, 0xc1, 0x2c, - 0x19, 0x42, 0xb2, 0xf1, 0x1c, 0xbb, 0xa8, 0xf3, 0xf0, 0xe4, 0x47, 0x59, 0xfa, 0xf4, 0xb3, 0x5c, - 0x75, 0x5c, 0x3a, 0x0a, 0x6d, 0x63, 0x80, 0x3d, 0xd1, 0x0d, 0xf1, 0xaa, 0x93, 0xe1, 0xd8, 0xa4, - 0x87, 0x3e, 0x24, 0x1c, 0x40, 0x3e, 0x9e, 0x1d, 0xd7, 0xe4, 0x9e, 0xe0, 0x6f, 0xd5, 0xde, 0x1e, - 0x95, 0xa5, 0xdf, 0x47, 0x65, 0xe9, 0xcd, 0xd9, 0x71, 0xed, 0x9c, 0xd5, 0x77, 0x2c, 0xc0, 0x27, - 0x28, 0x7a, 0xa1, 0xe7, 0xc1, 0x55, 0xf1, 0xd9, 0x83, 0xc4, 0xc7, 0x88, 0x40, 0xfd, 0xab, 0x0c, - 0xb6, 0xbb, 0xc4, 0xe9, 0x86, 0x13, 0xea, 0xf2, 0x7e, 0x3d, 0x05, 0x19, 0x17, 0xf9, 0x21, 0x65, - 0x9d, 0x62, 0xca, 0xd5, 0xa5, 0x72, 0x34, 0x4e, 0x94, 0xbf, 0x60, 0x25, 0x9d, 0x1c, 0x93, 0x2e, - 0xe4, 0x44, 0x20, 0xe5, 0x19, 0xc8, 0xe2, 0x90, 0x72, 0x7c, 0x8a, 0xe3, 0x6f, 0xad, 0xc5, 0xbf, - 0xe4, 0x35, 0xab, 0x04, 0x31, 0xac, 0x75, 0x27, 0x36, 0x23, 0x28, 0x99, 0x8d, 0x7c, 0x6c, 0x23, - 0xd1, 0xa9, 0xdf, 0x00, 0x85, 0xd5, 0x75, 0x62, 0xe8, 0x8b, 0x0c, 0x4a, 0xdc, 0x24, 0xdd, 0x9b, - 0x58, 0xf4, 0x00, 0x07, 0xde, 0x1e, 0x0c, 0x06, 0x10, 0x51, 0xcb, 0x81, 0xca, 0x23, 0x90, 0xb3, - 0x42, 0x3a, 0xc2, 0x81, 0x4b, 0x0f, 0x37, 0x9e, 0x84, 0x65, 0xa9, 0x62, 0x82, 0xeb, 0xbe, 0x60, - 0xeb, 0xfb, 0x09, 0x1d, 0x3f, 0x10, 0x57, 0x7a, 0x8a, 0x7f, 0x61, 0xa3, 0xd6, 0x7d, 0x66, 0x60, - 0x49, 0xc0, 0x3c, 0xec, 0x2e, 0x47, 0xb1, 0x46, 0x9a, 0xae, 0x83, 0xca, 0xff, 0x72, 0xb1, 0xb7, - 0xe6, 0x1f, 0x19, 0xa4, 0xbb, 0xc4, 0x51, 0x9a, 0xe0, 0x12, 0x9f, 0xd5, 0x35, 0x43, 0x5c, 0x47, - 0x43, 0x8c, 0x55, 0x2d, 0xfd, 0x1b, 0x89, 0xb1, 0x4a, 0x1b, 0xe4, 0x96, 0x43, 0x2e, 0xae, 0x96, - 0x25, 0x61, 0x75, 0x77, 0x6d, 0x38, 0xa1, 0x80, 0xa0, 0xb8, 0xbe, 0xad, 0xb7, 0xcf, 0xef, 0xba, - 0xa6, 0x44, 0xbd, 0xb7, 0xb1, 0x24, 0xde, 0x46, 0xbd, 0xfc, 0x9a, 0x1d, 0x88, 0x4e, 0xfb, 0x64, - 0xae, 0xc9, 0xa7, 0x73, 0x4d, 0xfe, 0x35, 0xd7, 0xe4, 0xf7, 0x0b, 0x4d, 0x3a, 0x5d, 0x68, 0xd2, - 0xf7, 0x85, 0x26, 0xbd, 0xba, 0xbb, 0x72, 0x53, 0xec, 0x30, 0x40, 0xb4, 0x3e, 0xb1, 0x6c, 0x12, - 0xfd, 0xac, 0x66, 0xd1, 0x8b, 0x5f, 0x17, 0x3b, 0xc3, 0x7f, 0x07, 0x0f, 0xfe, 0x06, 0x00, 0x00, - 0xff, 0xff, 0xb4, 0x5c, 0x42, 0xc2, 0xcd, 0x04, 0x00, 0x00, + 0x14, 0x6e, 0x41, 0x21, 0xcc, 0xae, 0x71, 0xa9, 0xac, 0xb2, 0x35, 0x5b, 0xb0, 0x89, 0x11, 0x49, + 0x68, 0x05, 0xa3, 0x26, 0x18, 0x13, 0xc1, 0x93, 0x07, 0xe2, 0x86, 0xbd, 0x79, 0x21, 0x2d, 0xcc, + 0x96, 0x06, 0x3a, 0xd3, 0x74, 0xa6, 0x84, 0xbd, 0x19, 0x4f, 0xc6, 0x93, 0x17, 0xef, 0x7b, 0x34, + 0x9e, 0xf6, 0xa0, 0xfe, 0x86, 0x3d, 0x6e, 0x3c, 0x79, 0x52, 0x03, 0x87, 0x35, 0xfe, 0x0a, 0x33, + 0xd3, 0x69, 0x61, 0x5d, 0x36, 0x5c, 0xe8, 0xcc, 0x7b, 0xef, 0xfb, 0xe6, 0xfb, 0xde, 0x9b, 0x01, + 0x6c, 0x4d, 0x5d, 0x8c, 0xcc, 0x49, 0xdd, 0xa4, 0x53, 0xc3, 0x0f, 0x30, 0xc5, 0x4a, 0x96, 0x45, + 0x8c, 0x49, 0x5d, 0x2d, 0x38, 0xd8, 0xc1, 0x3c, 0x66, 0xb2, 0x55, 0x94, 0x56, 0x6f, 0xf5, 0x31, + 0xf1, 0x30, 0x31, 0x3d, 0xe2, 0x30, 0x98, 0x47, 0x1c, 0x91, 0xc8, 0x5b, 0x9e, 0x8b, 0xb0, 0xc9, + 0x7f, 0x45, 0x68, 0x27, 0xaa, 0xed, 0x45, 0x24, 0xd1, 0x46, 0xa4, 0x34, 0x41, 0x63, 0x5b, 0x04, + 0x9a, 0x93, 0xba, 0x0d, 0xa9, 0x55, 0x37, 0xfb, 0xd8, 0x45, 0x17, 0xf2, 0x68, 0x94, 0xe4, 0xd9, + 0x26, 0xca, 0xeb, 0x1f, 0x53, 0x20, 0xdb, 0x21, 0xce, 0x3e, 0x44, 0x03, 0xe5, 0x29, 0xd8, 0x3c, + 0x08, 0xb0, 0xd7, 0xb3, 0x06, 0x83, 0x00, 0x12, 0x52, 0x94, 0xcb, 0x72, 0x25, 0xd7, 0x2e, 0x7e, + 0xff, 0x52, 0x2b, 0x88, 0x33, 0x5b, 0x51, 0x66, 0x9f, 0x06, 0x2e, 0x72, 0xba, 0x1b, 0xac, 0x5a, + 0x84, 0x94, 0x27, 0x00, 0x50, 0x9c, 0x40, 0x53, 0x6b, 0xa0, 0x39, 0x8a, 0x63, 0xe0, 0x10, 0x64, + 0x2c, 0x0f, 0x87, 0x88, 0x16, 0xd3, 0xe5, 0x74, 0x65, 0xa3, 0xb1, 0x63, 0x08, 0x04, 0xb3, 0x64, + 0x08, 0xc9, 0xc6, 0x0b, 0xec, 0xa2, 0xf6, 0xa3, 0x93, 0x9f, 0x25, 0xe9, 0xf3, 0xaf, 0x52, 0xc5, + 0x71, 0xe9, 0x30, 0xb4, 0x8d, 0x3e, 0xf6, 0x44, 0x37, 0xc4, 0xa7, 0x46, 0x06, 0x23, 0x93, 0x1e, + 0xfa, 0x90, 0x70, 0x00, 0xf9, 0x74, 0x76, 0x5c, 0x95, 0xbb, 0x82, 0xbf, 0x59, 0x7d, 0x77, 0x54, + 0x92, 0xfe, 0x1c, 0x95, 0xa4, 0xb7, 0x67, 0xc7, 0xd5, 0x73, 0x56, 0xdf, 0xb3, 0x00, 0x9f, 0xa0, + 0xe8, 0x85, 0x9e, 0x07, 0xd7, 0xc5, 0xb2, 0x0b, 0x89, 0x8f, 0x11, 0x81, 0xfa, 0x37, 0x19, 0x6c, + 0x76, 0x88, 0xd3, 0x09, 0xc7, 0xd4, 0xe5, 0xfd, 0x7a, 0x06, 0x32, 0x2e, 0xf2, 0x43, 0xca, 0x3a, + 0xc5, 0x94, 0xab, 0x0b, 0xe5, 0x68, 0x94, 0x28, 0x7f, 0xc9, 0x4a, 0xda, 0x39, 0x26, 0x5d, 0xc8, + 0x89, 0x40, 0xca, 0x73, 0x90, 0xc5, 0x21, 0xe5, 0xf8, 0x14, 0xc7, 0xdf, 0x5e, 0x89, 0x7f, 0xc5, + 0x6b, 0x96, 0x09, 0x62, 0x58, 0xf3, 0x6e, 0x6c, 0x46, 0x50, 0x32, 0x1b, 0xf9, 0xd8, 0x46, 0xa2, + 0x53, 0xbf, 0x09, 0x0a, 0xcb, 0xfb, 0xc4, 0xd0, 0x57, 0x19, 0x14, 0xb9, 0x49, 0xba, 0x37, 0xb6, + 0xe8, 0x01, 0x0e, 0xbc, 0x3d, 0x18, 0xf4, 0x21, 0xa2, 0x96, 0x03, 0x95, 0xc7, 0x20, 0x67, 0x85, + 0x74, 0x88, 0x03, 0x97, 0x1e, 0xae, 0xbd, 0x09, 0x8b, 0x52, 0xc5, 0x04, 0x37, 0x7c, 0xc1, 0xd6, + 0xf3, 0x13, 0x3a, 0x7e, 0x21, 0xae, 0x75, 0x15, 0xff, 0xc2, 0x41, 0xcd, 0x07, 0xcc, 0xc0, 0x82, + 0x80, 0x79, 0xd8, 0x5d, 0x8c, 0x62, 0x85, 0x34, 0x5d, 0x07, 0xe5, 0xcb, 0x72, 0xb1, 0xb7, 0xc6, + 0x5f, 0x19, 0xa4, 0x3b, 0xc4, 0x51, 0x1a, 0xe0, 0x0a, 0x9f, 0xd5, 0x96, 0x21, 0x9e, 0xa3, 0x21, + 0xc6, 0xaa, 0x16, 0xff, 0x8f, 0xc4, 0x58, 0xa5, 0x05, 0x72, 0x8b, 0x21, 0x6f, 0x2f, 0x97, 0x25, + 0x61, 0x75, 0x77, 0x65, 0x38, 0xa1, 0x80, 0x60, 0x7b, 0x75, 0x5b, 0xef, 0x9c, 0x3f, 0x75, 0x45, + 0x89, 0x7a, 0x7f, 0x6d, 0x49, 0x7c, 0x8c, 0x7a, 0xf5, 0x0d, 0xbb, 0x10, 0xed, 0xd6, 0xc9, 0x4c, + 0x93, 0x4f, 0x67, 0x9a, 0xfc, 0x7b, 0xa6, 0xc9, 0x1f, 0xe6, 0x9a, 0x74, 0x3a, 0xd7, 0xa4, 0x1f, + 0x73, 0x4d, 0x7a, 0x7d, 0x6f, 0xe9, 0xa5, 0xd8, 0x61, 0x80, 0x68, 0x6d, 0x6c, 0xd9, 0xc4, 0xe4, + 0xfd, 0x9d, 0x46, 0x1f, 0xfe, 0x5c, 0xec, 0x0c, 0xff, 0x3b, 0x78, 0xf8, 0x2f, 0x00, 0x00, 0xff, + 0xff, 0x33, 0x6e, 0xe5, 0xa1, 0xc8, 0x04, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -500,7 +500,7 @@ var _Msg_serviceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: "xion/xion/v1/tx.proto", + Metadata: "xion/v1/tx.proto", } func (m *MsgSend) Marshal() (dAtA []byte, err error) { From 51ef9bae8d33e9268458d93b8f271dd3422156be Mon Sep 17 00:00:00 2001 From: Ash Date: Mon, 12 Jun 2023 16:26:25 -0400 Subject: [PATCH 082/501] upgrade interchain test --- go.work.sum | 807 +++++++++++++++++++++++++++++- integration_tests/dungeon_test.go | 2 +- integration_tests/go.mod | 86 ++-- integration_tests/go.sum | 394 ++++----------- integration_tests/send_test.go | 2 +- 5 files changed, 954 insertions(+), 337 deletions(-) diff --git a/go.work.sum b/go.work.sum index 7d86aa7a..19e6bb7a 100644 --- a/go.work.sum +++ b/go.work.sum @@ -1,559 +1,1197 @@ +4d63.com/gochecknoglobals v0.1.0 h1:zeZSRqj5yCg28tCkIV/z/lWbwvNm5qnKVS15PI8nhD0= 4d63.com/gochecknoglobals v0.1.0/go.mod h1:wfdC5ZjKSPr7CybKEcgJhUOgeAQW1+7WcyK8OvUilfo= cloud.google.com/go v0.105.0/go.mod h1:PrLgOJNe5nfE9UMxKxgXj4mD3voiP+YQ6gdt6KMFOKM= cloud.google.com/go v0.107.0/go.mod h1:wpc2eNrD7hXUTy8EKS10jkxpZBjASrORK7goS+3YX2I= cloud.google.com/go/accessapproval v1.5.0/go.mod h1:HFy3tuiGvMdcd/u+Cu5b9NkO1pEICJ46IR82PoUdplw= +cloud.google.com/go/accessapproval v1.6.0 h1:x0cEHro/JFPd7eS4BlEWNTMecIj2HdXjOVB5BtvwER0= cloud.google.com/go/accessapproval v1.6.0/go.mod h1:R0EiYnwV5fsRFiKZkPHr6mwyk2wxUJ30nL4j2pcFY2E= cloud.google.com/go/accesscontextmanager v1.4.0/go.mod h1:/Kjh7BBu/Gh83sv+K60vN9QE5NJcd80sU33vIe2IFPE= +cloud.google.com/go/accesscontextmanager v1.6.0 h1:r7DpDlWkCMtH/w+gu6Yq//EeYgNWSUbR1+n8ZYr4YWk= cloud.google.com/go/accesscontextmanager v1.6.0/go.mod h1:8XCvZWfYw3K/ji0iVnp+6pu7huxoQTLmxAbVjbloTtM= cloud.google.com/go/aiplatform v1.27.0/go.mod h1:Bvxqtl40l0WImSb04d0hXFU7gDOiq9jQmorivIiWcKg= +cloud.google.com/go/aiplatform v1.35.0 h1:8frB0cIswlhVnYnGrMr+JjZaNC7DHZahvoGHpU9n+RY= cloud.google.com/go/aiplatform v1.35.0/go.mod h1:7MFT/vCaOyZT/4IIFfxH4ErVg/4ku6lKv3w0+tFTgXQ= +cloud.google.com/go/analytics v0.18.0 h1:uN80RHQeT2jGA3uAFDZSBnKdful4bFw0IHJV6t3EkqU= cloud.google.com/go/analytics v0.18.0/go.mod h1:ZkeHGQlcIPkw0R/GW+boWHhCOR43xz9RN/jn7WcqfIE= cloud.google.com/go/apigateway v1.4.0/go.mod h1:pHVY9MKGaH9PQ3pJ4YLzoj6U5FUDeDFBllIz7WmzJoc= +cloud.google.com/go/apigateway v1.5.0 h1:ZI9mVO7x3E9RK/BURm2p1aw9YTBSCQe3klmyP1WxWEg= cloud.google.com/go/apigateway v1.5.0/go.mod h1:GpnZR3Q4rR7LVu5951qfXPJCHquZt02jf7xQx7kpqN8= cloud.google.com/go/apigeeconnect v1.4.0/go.mod h1:kV4NwOKqjvt2JYR0AoIWo2QGfoRtn/pkS3QlHp0Ni04= +cloud.google.com/go/apigeeconnect v1.5.0 h1:sWOmgDyAsi1AZ48XRHcATC0tsi9SkPT7DA/+VCfkaeA= cloud.google.com/go/apigeeconnect v1.5.0/go.mod h1:KFaCqvBRU6idyhSNyn3vlHXc8VMDJdRmwDF6JyFRqZ8= cloud.google.com/go/apigeeregistry v0.4.0/go.mod h1:EUG4PGcsZvxOXAdyEghIdXwAEi/4MEaoqLMLDMIwKXY= +cloud.google.com/go/apigeeregistry v0.5.0 h1:BwTPDPTBlYIoQGiwtRUsNFRDZ24cT/02Xb3yFH614YQ= cloud.google.com/go/apigeeregistry v0.5.0/go.mod h1:YR5+s0BVNZfVOUkMa5pAR2xGd0A473vA5M7j247o1wM= cloud.google.com/go/apikeys v0.4.0/go.mod h1:XATS/yqZbaBK0HOssf+ALHp8jAlNHUgyfprvNcBIszU= +cloud.google.com/go/apikeys v0.5.0 h1:+77+/BhFuU476/s78kYiWHObxaYBHsC6Us+Gd7W9pJ4= cloud.google.com/go/apikeys v0.5.0/go.mod h1:5aQfwY4D+ewMMWScd3hm2en3hCj+BROlyrt3ytS7KLI= cloud.google.com/go/appengine v1.5.0/go.mod h1:TfasSozdkFI0zeoxW3PTBLiNqRmzraodCWatWI9Dmak= +cloud.google.com/go/appengine v1.6.0 h1:uTDtjzuHpig1lrf8lycxNSKrthiTDgXnadu+WxYEKxQ= cloud.google.com/go/appengine v1.6.0/go.mod h1:hg6i0J/BD2cKmDJbaFSYHFyZkgBEfQrDg/X0V5fJn84= +cloud.google.com/go/area120 v0.7.1 h1:ugckkFh4XkHJMPhTIx0CyvdoBxmOpMe8rNs4Ok8GAag= cloud.google.com/go/area120 v0.7.1/go.mod h1:j84i4E1RboTWjKtZVWXPqvK5VHQFJRF2c1Nm69pWm9k= cloud.google.com/go/artifactregistry v1.9.0/go.mod h1:2K2RqvA2CYvAeARHRkLDhMDJ3OXy26h3XW+3/Jh2uYc= +cloud.google.com/go/artifactregistry v1.11.2 h1:G9kjfHsDto5AdKK93hkHWHsY9Oe+6Nv66i7o/KgUO8E= cloud.google.com/go/artifactregistry v1.11.2/go.mod h1:nLZns771ZGAwVLzTX/7Al6R9ehma4WUEhZGWV6CeQNQ= cloud.google.com/go/asset v1.10.0/go.mod h1:pLz7uokL80qKhzKr4xXGvBQXnzHn5evJAEAtZiIb0wY= +cloud.google.com/go/asset v1.11.1 h1:yObuRcVfexhYQuIWbjNt+9PVPikXIRhERXZxga7qAAY= cloud.google.com/go/asset v1.11.1/go.mod h1:fSwLhbRvC9p9CXQHJ3BgFeQNM4c9x10lqlrdEUYXlJo= cloud.google.com/go/assuredworkloads v1.9.0/go.mod h1:kFuI1P78bplYtT77Tb1hi0FMxM0vVpRC7VVoJC3ZoT0= +cloud.google.com/go/assuredworkloads v1.10.0 h1:VLGnVFta+N4WM+ASHbhc14ZOItOabDLH1MSoDv+Xuag= cloud.google.com/go/assuredworkloads v1.10.0/go.mod h1:kwdUQuXcedVdsIaKgKTp9t0UJkE5+PAVNhdQm4ZVq2E= cloud.google.com/go/automl v1.8.0/go.mod h1:xWx7G/aPEe/NP+qzYXktoBSDfjO+vnKMGgsApGJJquM= +cloud.google.com/go/automl v1.12.0 h1:50VugllC+U4IGl3tDNcZaWvApHBTrn/TvyHDJ0wM+Uw= cloud.google.com/go/automl v1.12.0/go.mod h1:tWDcHDp86aMIuHmyvjuKeeHEGq76lD7ZqfGLN6B0NuU= cloud.google.com/go/baremetalsolution v0.4.0/go.mod h1:BymplhAadOO/eBa7KewQ0Ppg4A4Wplbn+PsFKRLo0uI= +cloud.google.com/go/baremetalsolution v0.5.0 h1:2AipdYXL0VxMboelTTw8c1UJ7gYu35LZYUbuRv9Q28s= cloud.google.com/go/baremetalsolution v0.5.0/go.mod h1:dXGxEkmR9BMwxhzBhV0AioD0ULBmuLZI8CdwalUxuss= cloud.google.com/go/batch v0.4.0/go.mod h1:WZkHnP43R/QCGQsZ+0JyG4i79ranE2u8xvjq/9+STPE= +cloud.google.com/go/batch v0.7.0 h1:YbMt0E6BtqeD5FvSv1d56jbVsWEzlGm55lYte+M6Mzs= cloud.google.com/go/batch v0.7.0/go.mod h1:vLZN95s6teRUqRQ4s3RLDsH8PvboqBK+rn1oevL159g= cloud.google.com/go/beyondcorp v0.3.0/go.mod h1:E5U5lcrcXMsCuoDNyGrpyTm/hn7ne941Jz2vmksAxW8= +cloud.google.com/go/beyondcorp v0.4.0 h1:qwXDVYf4fQ9DrKci8/40X1zaKYxzYK07vSdPeI9mEQw= cloud.google.com/go/beyondcorp v0.4.0/go.mod h1:3ApA0mbhHx6YImmuubf5pyW8srKnCEPON32/5hj+RmM= cloud.google.com/go/bigquery v1.44.0/go.mod h1:0Y33VqXTEsbamHJvJHdFmtqHvMIY28aK1+dFsvaChGc= +cloud.google.com/go/bigquery v1.48.0 h1:u+fhS1jJOkPO9vdM84M8HO5VznTfVUicBeoXNKD26ho= cloud.google.com/go/bigquery v1.48.0/go.mod h1:QAwSz+ipNgfL5jxiaK7weyOhzdoAy1zFm0Nf1fysJac= cloud.google.com/go/billing v1.7.0/go.mod h1:q457N3Hbj9lYwwRbnlD7vUpyjq6u5U1RAOArInEiD5Y= +cloud.google.com/go/billing v1.12.0 h1:k8pngyiI8uAFhVAhH5+iXSa3Me406XW17LYWZ/3Fr84= cloud.google.com/go/billing v1.12.0/go.mod h1:yKrZio/eu+okO/2McZEbch17O5CB5NpZhhXG6Z766ss= cloud.google.com/go/binaryauthorization v1.4.0/go.mod h1:tsSPQrBd77VLplV70GUhBf/Zm3FsKmgSqgm4UmiDItk= +cloud.google.com/go/binaryauthorization v1.5.0 h1:d3pMDBCCNivxt5a4eaV7FwL7cSH0H7RrEnFrTb1QKWs= cloud.google.com/go/binaryauthorization v1.5.0/go.mod h1:OSe4OU1nN/VswXKRBmciKpo9LulY41gch5c68htf3/Q= cloud.google.com/go/certificatemanager v1.4.0/go.mod h1:vowpercVFyqs8ABSmrdV+GiFf2H/ch3KyudYQEMM590= +cloud.google.com/go/certificatemanager v1.6.0 h1:5C5UWeSt8Jkgp7OWn2rCkLmYurar/vIWIoSQ2+LaTOc= cloud.google.com/go/certificatemanager v1.6.0/go.mod h1:3Hh64rCKjRAX8dXgRAyOcY5vQ/fE1sh8o+Mdd6KPgY8= cloud.google.com/go/channel v1.9.0/go.mod h1:jcu05W0my9Vx4mt3/rEHpfxc9eKi9XwsdDL8yBMbKUk= +cloud.google.com/go/channel v1.11.0 h1:/ToBJYu+7wATtd3h8T7hpc4+5NfzlJMDRZjPLIm4EZk= cloud.google.com/go/channel v1.11.0/go.mod h1:IdtI0uWGqhEeatSB62VOoJ8FSUhJ9/+iGkJVqp74CGE= cloud.google.com/go/cloudbuild v1.4.0/go.mod h1:5Qwa40LHiOXmz3386FrjrYM93rM/hdRr7b53sySrTqA= +cloud.google.com/go/cloudbuild v1.7.0 h1:osBOHQJqLPqNfHfkRQXz6sCKAIEKRrupA9NaAGiLN4s= cloud.google.com/go/cloudbuild v1.7.0/go.mod h1:zb5tWh2XI6lR9zQmsm1VRA+7OCuve5d8S+zJUul8KTg= cloud.google.com/go/clouddms v1.4.0/go.mod h1:Eh7sUGCC+aKry14O1NRljhjyrr0NFC0G2cjwX0cByRk= +cloud.google.com/go/clouddms v1.5.0 h1:E7v4TpDGUyEm1C/4KIrpVSOCTm0P6vWdHT0I4mostRA= cloud.google.com/go/clouddms v1.5.0/go.mod h1:QSxQnhikCLUw13iAbffF2CZxAER3xDGNHjsTAkQJcQA= cloud.google.com/go/cloudtasks v1.8.0/go.mod h1:gQXUIwCSOI4yPVK7DgTVFiiP0ZW/eQkydWzwVMdHxrI= +cloud.google.com/go/cloudtasks v1.9.0 h1:Cc2/20hMhGLV2pBGk/i6zNY+eTT9IsV3mrK6TKBu3gs= cloud.google.com/go/cloudtasks v1.9.0/go.mod h1:w+EyLsVkLWHcOaqNEyvcKAsWp9p29dL6uL9Nst1cI7Y= cloud.google.com/go/compute v1.14.0/go.mod h1:YfLtxrj9sU4Yxv+sXzZkyPjEyPBZfXHUvjxega5vAdo= cloud.google.com/go/compute v1.15.1/go.mod h1:bjjoF/NtFUrkD/urWfdHaKuOPDR5nWIs63rR+SXhcpA= cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= cloud.google.com/go/contactcenterinsights v1.4.0/go.mod h1:L2YzkGbPsv+vMQMCADxJoT9YiTTnSEd6fEvCeHTYVck= +cloud.google.com/go/contactcenterinsights v1.6.0 h1:jXIpfcH/VYSE1SYcPzO0n1VVb+sAamiLOgCw45JbOQk= cloud.google.com/go/contactcenterinsights v1.6.0/go.mod h1:IIDlT6CLcDoyv79kDv8iWxMSTZhLxSCofVV5W6YFM/w= cloud.google.com/go/container v1.7.0/go.mod h1:Dp5AHtmothHGX3DwwIHPgq45Y8KmNsgN3amoYfxVkLo= +cloud.google.com/go/container v1.13.1 h1:q8lTpyAsjcJZQCjGI8JJfcOG4ixl998vwe6TAgQROcM= cloud.google.com/go/container v1.13.1/go.mod h1:6wgbMPeQRw9rSnKBCAJXnds3Pzj03C4JHamr8asWKy4= +cloud.google.com/go/containeranalysis v0.7.0 h1:kw0dDRJPIN8L50Nwm8qa5VuGKPrbVup5lM3ULrvuWrg= cloud.google.com/go/containeranalysis v0.7.0/go.mod h1:9aUL+/vZ55P2CXfuZjS4UjQ9AgXoSw8Ts6lemfmxBxI= cloud.google.com/go/datacatalog v1.8.0/go.mod h1:KYuoVOv9BM8EYz/4eMFxrr4DUKhGIOXxZoKYF5wdISM= +cloud.google.com/go/datacatalog v1.12.0 h1:3uaYULZRLByPdbuUvacGeqneudztEM4xqKQsBcxbDnY= cloud.google.com/go/datacatalog v1.12.0/go.mod h1:CWae8rFkfp6LzLumKOnmVh4+Zle4A3NXLzVJ1d1mRm0= +cloud.google.com/go/dataflow v0.8.0 h1:eYyD9o/8Nm6EttsKZaEGD84xC17bNgSKCu0ZxwqUbpg= cloud.google.com/go/dataflow v0.8.0/go.mod h1:Rcf5YgTKPtQyYz8bLYhFoIV/vP39eL7fWNcSOyFfLJE= cloud.google.com/go/dataform v0.5.0/go.mod h1:GFUYRe8IBa2hcomWplodVmUx/iTL0FrsauObOM3Ipr0= +cloud.google.com/go/dataform v0.6.0 h1:HBegGOzStIXPWo49FaVTzJOD4EPo8BndPFBUfsuoYe0= cloud.google.com/go/dataform v0.6.0/go.mod h1:QPflImQy33e29VuapFdf19oPbE4aYTJxr31OAPV+ulA= cloud.google.com/go/datafusion v1.5.0/go.mod h1:Kz+l1FGHB0J+4XF2fud96WMmRiq/wj8N9u007vyXZ2w= +cloud.google.com/go/datafusion v1.6.0 h1:sZjRnS3TWkGsu1LjYPFD/fHeMLZNXDK6PDHi2s2s/bk= cloud.google.com/go/datafusion v1.6.0/go.mod h1:WBsMF8F1RhSXvVM8rCV3AeyWVxcC2xY6vith3iw3S+8= +cloud.google.com/go/datalabeling v0.7.0 h1:ch4qA2yvddGRUrlfwrNJCr79qLqhS9QBwofPHfFlDIk= cloud.google.com/go/datalabeling v0.7.0/go.mod h1:WPQb1y08RJbmpM3ww0CSUAGweL0SxByuW2E+FU+wXcM= cloud.google.com/go/dataplex v1.4.0/go.mod h1:X51GfLXEMVJ6UN47ESVqvlsRplbLhcsAt0kZCCKsU0A= +cloud.google.com/go/dataplex v1.5.2 h1:uSkmPwbgOWp3IFtCVEM0Xew80dczVyhNXkvAtTapRn8= cloud.google.com/go/dataplex v1.5.2/go.mod h1:cVMgQHsmfRoI5KFYq4JtIBEUbYwc3c7tXmIDhRmNNVQ= cloud.google.com/go/dataproc v1.8.0/go.mod h1:5OW+zNAH0pMpw14JVrPONsxMQYMBqJuzORhIBfBn9uI= +cloud.google.com/go/dataproc v1.12.0 h1:W47qHL3W4BPkAIbk4SWmIERwsWBaNnWm0P2sdx3YgGU= cloud.google.com/go/dataproc v1.12.0/go.mod h1:zrF3aX0uV3ikkMz6z4uBbIKyhRITnxvr4i3IjKsKrw4= +cloud.google.com/go/dataqna v0.7.0 h1:yFzi/YU4YAdjyo7pXkBE2FeHbgz5OQQBVDdbErEHmVQ= cloud.google.com/go/dataqna v0.7.0/go.mod h1:Lx9OcIIeqCrw1a6KdO3/5KMP1wAmTc0slZWwP12Qq3c= +cloud.google.com/go/datastore v1.10.0 h1:4siQRf4zTiAVt/oeH4GureGkApgb2vtPQAtOmhpqQwE= cloud.google.com/go/datastore v1.10.0/go.mod h1:PC5UzAmDEkAmkfaknstTYbNpgE49HAgW2J1gcgUfmdM= cloud.google.com/go/datastream v1.5.0/go.mod h1:6TZMMNPwjUqZHBKPQ1wwXpb0d5VDVPl2/XoS5yi88q4= +cloud.google.com/go/datastream v1.6.0 h1:v6j8C4p0TfXA9Wcea3iH7ZUm05Cx4BiPsH4vEkH7A9g= cloud.google.com/go/datastream v1.6.0/go.mod h1:6LQSuswqLa7S4rPAOZFVjHIG3wJIjZcZrw8JDEDJuIs= cloud.google.com/go/deploy v1.5.0/go.mod h1:ffgdD0B89tToyW/U/D2eL0jN2+IEV/3EMuXHA0l4r+s= +cloud.google.com/go/deploy v1.6.0 h1:hdXxUdVw+NOrCQeqg9eQPB3hF1mFEchoS3h+K4IAU9s= cloud.google.com/go/deploy v1.6.0/go.mod h1:f9PTHehG/DjCom3QH0cntOVRm93uGBDt2vKzAPwpXQI= cloud.google.com/go/dialogflow v1.29.0/go.mod h1:b+2bzMe+k1s9V+F2jbJwpHPzrnIyHihAdRFMtn2WXuM= +cloud.google.com/go/dialogflow v1.31.0 h1:TwmxDsdFcQdExfShoLRlTtdPTor8qSxNu9KZ13o+TUQ= cloud.google.com/go/dialogflow v1.31.0/go.mod h1:cuoUccuL1Z+HADhyIA7dci3N5zUssgpBJmCzI6fNRB4= cloud.google.com/go/dlp v1.7.0/go.mod h1:68ak9vCiMBjbasxeVD17hVPxDEck+ExiHavX8kiHG+Q= +cloud.google.com/go/dlp v1.9.0 h1:1JoJqezlgu6NWCroBxr4rOZnwNFILXr4cB9dMaSKO4A= cloud.google.com/go/dlp v1.9.0/go.mod h1:qdgmqgTyReTz5/YNSSuueR8pl7hO0o9bQ39ZhtgkWp4= cloud.google.com/go/documentai v1.10.0/go.mod h1:vod47hKQIPeCfN2QS/jULIvQTugbmdc0ZvxxfQY1bg4= +cloud.google.com/go/documentai v1.16.0 h1:tHZA9dB2xo3VaCP4JPxs5jHRntJnmg38kZ0UxlT/u90= cloud.google.com/go/documentai v1.16.0/go.mod h1:o0o0DLTEZ+YnJZ+J4wNfTxmDVyrkzFvttBXXtYRMHkM= +cloud.google.com/go/domains v0.8.0 h1:2ti/o9tlWL4N+wIuWUNH+LbfgpwxPr8J1sv9RHA4bYQ= cloud.google.com/go/domains v0.8.0/go.mod h1:M9i3MMDzGFXsydri9/vW+EWz9sWb4I6WyHqdlAk0idE= +cloud.google.com/go/edgecontainer v0.3.0 h1:i57Q4zg9j8h4UQoKTD7buXbLCvofmmV8+8owwSmM3ew= cloud.google.com/go/edgecontainer v0.3.0/go.mod h1:FLDpP4nykgwwIfcLt6zInhprzw0lEi2P1fjO6Ie0qbc= +cloud.google.com/go/errorreporting v0.3.0 h1:kj1XEWMu8P0qlLhm3FwcaFsUvXChV/OraZwA70trRR0= cloud.google.com/go/errorreporting v0.3.0/go.mod h1:xsP2yaAp+OAW4OIm60An2bbLpqIhKXdWR/tawvl7QzU= cloud.google.com/go/essentialcontacts v1.4.0/go.mod h1:8tRldvHYsmnBCHdFpvU+GL75oWiBKl80BiqlFh9tp+8= +cloud.google.com/go/essentialcontacts v1.5.0 h1:gIzEhCoOT7bi+6QZqZIzX1Erj4SswMPIteNvYVlu+pM= cloud.google.com/go/essentialcontacts v1.5.0/go.mod h1:ay29Z4zODTuwliK7SnX8E86aUF2CTzdNtvv42niCX0M= cloud.google.com/go/eventarc v1.8.0/go.mod h1:imbzxkyAU4ubfsaKYdQg04WS1NvncblHEup4kvF+4gw= +cloud.google.com/go/eventarc v1.10.0 h1:4cELkxrOYntz1VRNi2deLRkOr+R6u175kF4hUyd/4Ms= cloud.google.com/go/eventarc v1.10.0/go.mod h1:u3R35tmZ9HvswGRBnF48IlYgYeBcPUCjkr4BTdem2Kw= cloud.google.com/go/filestore v1.4.0/go.mod h1:PaG5oDfo9r224f8OYXURtAsY+Fbyq/bLYoINEK8XQAI= +cloud.google.com/go/filestore v1.5.0 h1:M/iQpbNJw+ELfEvFAW2mAhcHOn1HQQzIkzqmA4njTwg= cloud.google.com/go/filestore v1.5.0/go.mod h1:FqBXDWBp4YLHqRnVGveOkHDf8svj9r5+mUDLupOWEDs= +cloud.google.com/go/firestore v1.9.0 h1:IBlRyxgGySXu5VuW0RgGFlTtLukSnNkpDiEOMkQkmpA= cloud.google.com/go/firestore v1.9.0/go.mod h1:HMkjKHNTtRyZNiMzu7YAsLr9K3X2udY2AMwDaMEQiiE= cloud.google.com/go/functions v1.9.0/go.mod h1:Y+Dz8yGguzO3PpIjhLTbnqV1CWmgQ5UwtlpzoyquQ08= +cloud.google.com/go/functions v1.10.0 h1:WC0JiI5ZBTPSgjzFccqZ8TMkhoPRpDClN99KXhHJp6I= cloud.google.com/go/functions v1.10.0/go.mod h1:0D3hEOe3DbEvCXtYOZHQZmD+SzYsi1YbI7dGvHfldXw= cloud.google.com/go/gaming v1.8.0/go.mod h1:xAqjS8b7jAVW0KFYeRUxngo9My3f33kFmua++Pi+ggM= +cloud.google.com/go/gaming v1.9.0 h1:7vEhFnZmd931Mo7sZ6pJy7uQPDxF7m7v8xtBheG08tc= cloud.google.com/go/gaming v1.9.0/go.mod h1:Fc7kEmCObylSWLO334NcO+O9QMDyz+TKC4v1D7X+Bc0= cloud.google.com/go/gkebackup v0.3.0/go.mod h1:n/E671i1aOQvUxT541aTkCwExO/bTer2HDlj4TsBRAo= +cloud.google.com/go/gkebackup v0.4.0 h1:za3QZvw6ujR0uyqkhomKKKNoXDyqYGPJies3voUK8DA= cloud.google.com/go/gkebackup v0.4.0/go.mod h1:byAyBGUwYGEEww7xsbnUTBHIYcOPy/PgUWUtOeRm9Vg= +cloud.google.com/go/gkeconnect v0.7.0 h1:gXYKciHS/Lgq0GJ5Kc9SzPA35NGc3yqu6SkjonpEr2Q= cloud.google.com/go/gkeconnect v0.7.0/go.mod h1:SNfmVqPkaEi3bF/B3CNZOAYPYdg7sU+obZ+QTky2Myw= +cloud.google.com/go/gkehub v0.11.0 h1:C4p1ZboBOexyCgZSCq+QdP+xfta9+puxgHFy8cjbgYI= cloud.google.com/go/gkehub v0.11.0/go.mod h1:JOWHlmN+GHyIbuWQPl47/C2RFhnFKH38jH9Ascu3n0E= cloud.google.com/go/gkemulticloud v0.4.0/go.mod h1:E9gxVBnseLWCk24ch+P9+B2CoDFJZTyIgLKSalC7tuI= +cloud.google.com/go/gkemulticloud v0.5.0 h1:8I84Q4vl02rJRsFiinBxl7WCozfdLlUVBQuSrqr9Wtk= cloud.google.com/go/gkemulticloud v0.5.0/go.mod h1:W0JDkiyi3Tqh0TJr//y19wyb1yf8llHVto2Htf2Ja3Y= +cloud.google.com/go/grafeas v0.2.0 h1:CYjC+xzdPvbV65gi6Dr4YowKcmLo045pm18L0DhdELM= cloud.google.com/go/gsuiteaddons v1.4.0/go.mod h1:rZK5I8hht7u7HxFQcFei0+AtfS9uSushomRlg+3ua1o= +cloud.google.com/go/gsuiteaddons v1.5.0 h1:1mvhXqJzV0Vg5Fa95QwckljODJJfDFXV4pn+iL50zzA= cloud.google.com/go/gsuiteaddons v1.5.0/go.mod h1:TFCClYLd64Eaa12sFVmUyG62tk4mdIsI7pAnSXRkcFo= cloud.google.com/go/iam v0.8.0/go.mod h1:lga0/y3iH6CX7sYqypWJ33hf7kkfXJag67naqGESjkE= cloud.google.com/go/iam v0.11.0/go.mod h1:9PiLDanza5D+oWFZiH1uG+RnRCfEGKoyl6yo4cgWZGY= cloud.google.com/go/iap v1.5.0/go.mod h1:UH/CGgKd4KyohZL5Pt0jSKE4m3FR51qg6FKQ/z/Ix9A= +cloud.google.com/go/iap v1.6.0 h1:a6Heb3z12tUHJqXvmYqLhr7cWz3zzl566xtlbavD5Q0= cloud.google.com/go/iap v1.6.0/go.mod h1:NSuvI9C/j7UdjGjIde7t7HBz+QTwBcapPE07+sSRcLk= cloud.google.com/go/ids v1.2.0/go.mod h1:5WXvp4n25S0rA/mQWAg1YEEBBq6/s+7ml1RDCW1IrcY= +cloud.google.com/go/ids v1.3.0 h1:fodnCDtOXuMmS8LTC2y3h8t24U8F3eKWfhi+3LY6Qf0= cloud.google.com/go/ids v1.3.0/go.mod h1:JBdTYwANikFKaDP6LtW5JAi4gubs57SVNQjemdt6xV4= cloud.google.com/go/iot v1.4.0/go.mod h1:dIDxPOn0UvNDUMD8Ger7FIaTuvMkj+aGk94RPP0iV+g= +cloud.google.com/go/iot v1.5.0 h1:so1XASBu64OWGylrv5xjvsi6U+/CIR2KiRuZt+WLyKk= cloud.google.com/go/iot v1.5.0/go.mod h1:mpz5259PDl3XJthEmh9+ap0affn/MqNSP4My77Qql9o= cloud.google.com/go/kms v1.6.0/go.mod h1:Jjy850yySiasBUDi6KFUwUv2n1+o7QZFyuUJg6OgjA0= +cloud.google.com/go/kms v1.9.0 h1:b0votJQa/9DSsxgHwN33/tTLA7ZHVzfWhDCrfiXijSo= cloud.google.com/go/kms v1.9.0/go.mod h1:qb1tPTgfF9RQP8e1wq4cLFErVuTJv7UsSC915J8dh3w= cloud.google.com/go/language v1.8.0/go.mod h1:qYPVHf7SPoNNiCL2Dr0FfEFNil1qi3pQEyygwpgVKB8= +cloud.google.com/go/language v1.9.0 h1:7Ulo2mDk9huBoBi8zCE3ONOoBrL6UXfAI71CLQ9GEIM= cloud.google.com/go/language v1.9.0/go.mod h1:Ns15WooPM5Ad/5no/0n81yUetis74g3zrbeJBE+ptUY= +cloud.google.com/go/lifesciences v0.8.0 h1:uWrMjWTsGjLZpCTWEAzYvyXj+7fhiZST45u9AgasasI= cloud.google.com/go/lifesciences v0.8.0/go.mod h1:lFxiEOMqII6XggGbOnKiyZ7IBwoIqA84ClvoezaA/bo= cloud.google.com/go/logging v1.6.1/go.mod h1:5ZO0mHHbvm8gEmeEUHrmDlTDSu5imF6MUP9OfilNXBw= +cloud.google.com/go/logging v1.7.0 h1:CJYxlNNNNAMkHp9em/YEXcfJg+rPDg7YfwoRpMU+t5I= cloud.google.com/go/logging v1.7.0/go.mod h1:3xjP2CjkM3ZkO73aj4ASA5wRPGGCRrPIAeNqVNkzY8M= cloud.google.com/go/longrunning v0.3.0/go.mod h1:qth9Y41RRSUE69rDcOn6DdK3HfQfsUI0YSmW3iIlLJc= cloud.google.com/go/longrunning v0.4.1/go.mod h1:4iWDqhBZ70CvZ6BfETbvam3T8FMvLK+eFj0E6AaRQTo= cloud.google.com/go/managedidentities v1.4.0/go.mod h1:NWSBYbEMgqmbZsLIyKvxrYbtqOsxY1ZrGM+9RgDqInM= +cloud.google.com/go/managedidentities v1.5.0 h1:ZRQ4k21/jAhrHBVKl/AY7SjgzeJwG1iZa+mJ82P+VNg= cloud.google.com/go/managedidentities v1.5.0/go.mod h1:+dWcZ0JlUmpuxpIDfyP5pP5y0bLdRwOS4Lp7gMni/LA= cloud.google.com/go/maps v0.1.0/go.mod h1:BQM97WGyfw9FWEmQMpZ5T6cpovXXSd1cGmFma94eubI= +cloud.google.com/go/maps v0.6.0 h1:soPzd0NABgCOGZavyZCAKrJ9L1JAwg3To6n5kuMCm98= cloud.google.com/go/maps v0.6.0/go.mod h1:o6DAMMfb+aINHz/p/jbcY+mYeXBoZoxTfdSQ8VAJaCw= +cloud.google.com/go/mediatranslation v0.7.0 h1:anPxH+/WWt8Yc3EdoEJhPMBRF7EhIdz426A+tuoA0OU= cloud.google.com/go/mediatranslation v0.7.0/go.mod h1:LCnB/gZr90ONOIQLgSXagp8XUW1ODs2UmUMvcgMfI2I= cloud.google.com/go/memcache v1.7.0/go.mod h1:ywMKfjWhNtkQTxrWxCkCFkoPjLHPW6A7WOTVI8xy3LY= +cloud.google.com/go/memcache v1.9.0 h1:8/VEmWCpnETCrBwS3z4MhT+tIdKgR1Z4Tr2tvYH32rg= cloud.google.com/go/memcache v1.9.0/go.mod h1:8oEyzXCu+zo9RzlEaEjHl4KkgjlNDaXbCQeQWlzNFJM= cloud.google.com/go/metastore v1.8.0/go.mod h1:zHiMc4ZUpBiM7twCIFQmJ9JMEkDSyZS9U12uf7wHqSI= +cloud.google.com/go/metastore v1.10.0 h1:QCFhZVe2289KDBQ7WxaHV2rAmPrmRAdLC6gbjUd3HPo= cloud.google.com/go/metastore v1.10.0/go.mod h1:fPEnH3g4JJAk+gMRnrAnoqyv2lpUCqJPWOodSaf45Eo= cloud.google.com/go/monitoring v1.8.0/go.mod h1:E7PtoMJ1kQXWxPjB6mv2fhC5/15jInuulFdYYtlcvT4= +cloud.google.com/go/monitoring v1.12.0 h1:+X79DyOP/Ny23XIqSIb37AvFWSxDN15w/ktklVvPLso= cloud.google.com/go/monitoring v1.12.0/go.mod h1:yx8Jj2fZNEkL/GYZyTLS4ZtZEZN8WtDEiEqG4kLK50w= cloud.google.com/go/networkconnectivity v1.7.0/go.mod h1:RMuSbkdbPwNMQjB5HBWD5MpTBnNm39iAVpC3TmsExt8= +cloud.google.com/go/networkconnectivity v1.10.0 h1:DJwVcr97sd9XPc9rei0z1vUI2ExJyXpA11DSi+Yh7h4= cloud.google.com/go/networkconnectivity v1.10.0/go.mod h1:UP4O4sWXJG13AqrTdQCD9TnLGEbtNRqjuaaA7bNjF5E= cloud.google.com/go/networkmanagement v1.5.0/go.mod h1:ZnOeZ/evzUdUsnvRt792H0uYEnHQEMaz+REhhzJRcf4= +cloud.google.com/go/networkmanagement v1.6.0 h1:8KWEUNGcpSX9WwZXq7FtciuNGPdPdPN/ruDm769yAEM= cloud.google.com/go/networkmanagement v1.6.0/go.mod h1:5pKPqyXjB/sgtvB5xqOemumoQNB7y95Q7S+4rjSOPYY= +cloud.google.com/go/networksecurity v0.7.0 h1:sAKgrzvEslukcwezyEIoXocU2vxWR1Zn7xMTp4uLR0E= cloud.google.com/go/networksecurity v0.7.0/go.mod h1:mAnzoxx/8TBSyXEeESMy9OOYwo1v+gZ5eMRnsT5bC8k= cloud.google.com/go/notebooks v1.5.0/go.mod h1:q8mwhnP9aR8Hpfnrc5iN5IBhrXUy8S2vuYs+kBJ/gu0= +cloud.google.com/go/notebooks v1.7.0 h1:mMI+/ETVBmCZjdiSYYkN6VFgFTR68kh3frJ8zWvg6go= cloud.google.com/go/notebooks v1.7.0/go.mod h1:PVlaDGfJgj1fl1S3dUwhFMXFgfYGhYQt2164xOMONmE= cloud.google.com/go/optimization v1.2.0/go.mod h1:Lr7SOHdRDENsh+WXVmQhQTrzdu9ybg0NecjHidBq6xs= +cloud.google.com/go/optimization v1.3.1 h1:dj8O4VOJRB4CUwZXdmwNViH1OtI0WtWL867/lnYH248= cloud.google.com/go/optimization v1.3.1/go.mod h1:IvUSefKiwd1a5p0RgHDbWCIbDFgKuEdB+fPPuP0IDLI= cloud.google.com/go/orchestration v1.4.0/go.mod h1:6W5NLFWs2TlniBphAViZEVhrXRSMgUGDfW7vrWKvsBk= +cloud.google.com/go/orchestration v1.6.0 h1:Vw+CEXo8M/FZ1rb4EjcLv0gJqqw89b7+g+C/EmniTb8= cloud.google.com/go/orchestration v1.6.0/go.mod h1:M62Bevp7pkxStDfFfTuCOaXgaaqRAga1yKyoMtEoWPQ= cloud.google.com/go/orgpolicy v1.5.0/go.mod h1:hZEc5q3wzwXJaKrsx5+Ewg0u1LxJ51nNFlext7Tanwc= +cloud.google.com/go/orgpolicy v1.10.0 h1:XDriMWug7sd0kYT1QKofRpRHzjad0bK8Q8uA9q+XrU4= cloud.google.com/go/orgpolicy v1.10.0/go.mod h1:w1fo8b7rRqlXlIJbVhOMPrwVljyuW5mqssvBtU18ONc= cloud.google.com/go/osconfig v1.10.0/go.mod h1:uMhCzqC5I8zfD9zDEAfvgVhDS8oIjySWh+l4WK6GnWw= +cloud.google.com/go/osconfig v1.11.0 h1:PkSQx4OHit5xz2bNyr11KGcaFccL5oqglFPdTboyqwQ= cloud.google.com/go/osconfig v1.11.0/go.mod h1:aDICxrur2ogRd9zY5ytBLV89KEgT2MKB2L/n6x1ooPw= cloud.google.com/go/oslogin v1.7.0/go.mod h1:e04SN0xO1UNJ1M5GP0vzVBFicIe4O53FOfcixIqTyXo= +cloud.google.com/go/oslogin v1.9.0 h1:whP7vhpmc+ufZa90eVpkfbgzJRK/Xomjz+XCD4aGwWw= cloud.google.com/go/oslogin v1.9.0/go.mod h1:HNavntnH8nzrn8JCTT5fj18FuJLFJc4NaZJtBnQtKFs= +cloud.google.com/go/phishingprotection v0.7.0 h1:l6tDkT7qAEV49MNEJkEJTB6vOO/onbSOcNtAT09HPuA= cloud.google.com/go/phishingprotection v0.7.0/go.mod h1:8qJI4QKHoda/sb/7/YmMQ2omRLSLYSu9bU0EKCNI+Lk= cloud.google.com/go/policytroubleshooter v1.4.0/go.mod h1:DZT4BcRw3QoO8ota9xw/LKtPa8lKeCByYeKTIf/vxdE= +cloud.google.com/go/policytroubleshooter v1.5.0 h1:/fRzv4eqv9PDCEL7nBgJiA1EZxhdKMQ4/JIfheCdUZI= cloud.google.com/go/policytroubleshooter v1.5.0/go.mod h1:Rz1WfV+1oIpPdN2VvvuboLVRsB1Hclg3CKQ53j9l8vw= +cloud.google.com/go/privatecatalog v0.7.0 h1:7d0gcifTV9As6zzBQo34ZsFiRRlENjD3kw0o3uHn+fY= cloud.google.com/go/privatecatalog v0.7.0/go.mod h1:2s5ssIFO69F5csTXcwBP7NPFTZvps26xGzvQ2PQaBYg= cloud.google.com/go/pubsub v1.27.1/go.mod h1:hQN39ymbV9geqBnfQq6Xf63yNhUAhv9CZhzp5O6qsW0= +cloud.google.com/go/pubsub v1.28.0 h1:XzabfdPx/+eNrsVVGLFgeUnQQKPGkMb8klRCeYK52is= cloud.google.com/go/pubsub v1.28.0/go.mod h1:vuXFpwaVoIPQMGXqRyUQigu/AX1S3IWugR9xznmcXX8= cloud.google.com/go/pubsublite v1.5.0/go.mod h1:xapqNQ1CuLfGi23Yda/9l4bBCKz/wC3KIJ5gKcxveZg= +cloud.google.com/go/pubsublite v1.6.0 h1:qh04RCSOnQDVHYmzT74ANu8WR9czAXG3Jl3TV4iR5no= cloud.google.com/go/pubsublite v1.6.0/go.mod h1:1eFCS0U11xlOuMFV/0iBqw3zP12kddMeCbj/F3FSj9k= +cloud.google.com/go/recaptchaenterprise v1.3.1 h1:u6EznTGzIdsyOsvm+Xkw0aSuKFXQlyjGE9a4exk6iNQ= cloud.google.com/go/recaptchaenterprise/v2 v2.5.0/go.mod h1:O8LzcHXN3rz0j+LBC91jrwI3R+1ZSZEWrfL7XHgNo9U= +cloud.google.com/go/recaptchaenterprise/v2 v2.6.0 h1:E9VgcQxj9M3HS945E3Jb53qd14xcpHBaEG1LgQhnxW8= cloud.google.com/go/recaptchaenterprise/v2 v2.6.0/go.mod h1:RPauz9jeLtB3JVzg6nCbe12qNoaa8pXc4d/YukAmcnA= +cloud.google.com/go/recommendationengine v0.7.0 h1:VibRFCwWXrFebEWKHfZAt2kta6pS7Tlimsnms0fjv7k= cloud.google.com/go/recommendationengine v0.7.0/go.mod h1:1reUcE3GIu6MeBz/h5xZJqNLuuVjNg1lmWMPyjatzac= cloud.google.com/go/recommender v1.8.0/go.mod h1:PkjXrTT05BFKwxaUxQmtIlrtj0kph108r02ZZQ5FE70= +cloud.google.com/go/recommender v1.9.0 h1:ZnFRY5R6zOVk2IDS1Jbv5Bw+DExCI5rFumsTnMXiu/A= cloud.google.com/go/recommender v1.9.0/go.mod h1:PnSsnZY7q+VL1uax2JWkt/UegHssxjUVVCrX52CuEmQ= cloud.google.com/go/redis v1.10.0/go.mod h1:ThJf3mMBQtW18JzGgh41/Wld6vnDDc/F/F35UolRZPM= +cloud.google.com/go/redis v1.11.0 h1:JoAd3SkeDt3rLFAAxEvw6wV4t+8y4ZzfZcZmddqphQ8= cloud.google.com/go/redis v1.11.0/go.mod h1:/X6eicana+BWcUda5PpwZC48o37SiFVTFSs0fWAJ7uQ= cloud.google.com/go/resourcemanager v1.4.0/go.mod h1:MwxuzkumyTX7/a3n37gmsT3py7LIXwrShilPh3P1tR0= +cloud.google.com/go/resourcemanager v1.5.0 h1:m2RQU8UzBCIO+wsdwoehpuyAaF1i7ahFhj7TLocxuJE= cloud.google.com/go/resourcemanager v1.5.0/go.mod h1:eQoXNAiAvCf5PXxWxXjhKQoTMaUSNrEfg+6qdf/wots= cloud.google.com/go/resourcesettings v1.4.0/go.mod h1:ldiH9IJpcrlC3VSuCGvjR5of/ezRrOxFtpJoJo5SmXg= +cloud.google.com/go/resourcesettings v1.5.0 h1:8Dua37kQt27CCWHm4h/Q1XqCF6ByD7Ouu49xg95qJzI= cloud.google.com/go/resourcesettings v1.5.0/go.mod h1:+xJF7QSG6undsQDfsCJyqWXyBwUoJLhetkRMDRnIoXA= cloud.google.com/go/retail v1.11.0/go.mod h1:MBLk1NaWPmh6iVFSz9MeKG/Psyd7TAgm6y/9L2B4x9Y= +cloud.google.com/go/retail v1.12.0 h1:1Dda2OpFNzIb4qWgFZjYlpP7sxX3aLeypKG6A3H4Yys= cloud.google.com/go/retail v1.12.0/go.mod h1:UMkelN/0Z8XvKymXFbD4EhFJlYKRx1FGhQkVPU5kF14= cloud.google.com/go/run v0.3.0/go.mod h1:TuyY1+taHxTjrD0ZFk2iAR+xyOXEA0ztb7U3UNA0zBo= +cloud.google.com/go/run v0.8.0 h1:monNAz/FXgo8A31aR9sbrsv+bEbqy6H/arSgLOfA2Fk= cloud.google.com/go/run v0.8.0/go.mod h1:VniEnuBwqjigv0A7ONfQUaEItaiCRVujlMqerPPiktM= cloud.google.com/go/scheduler v1.7.0/go.mod h1:jyCiBqWW956uBjjPMMuX09n3x37mtyPJegEWKxRsn44= +cloud.google.com/go/scheduler v1.8.0 h1:NRzIXqVxpyoiyonpYOKJmVJ9iif/Acw36Jri+cVHZ9U= cloud.google.com/go/scheduler v1.8.0/go.mod h1:TCET+Y5Gp1YgHT8py4nlg2Sew8nUHMqcpousDgXJVQc= cloud.google.com/go/secretmanager v1.9.0/go.mod h1:b71qH2l1yHmWQHt9LC80akm86mX8AL6X1MA01dW8ht4= +cloud.google.com/go/secretmanager v1.10.0 h1:pu03bha7ukxF8otyPKTFdDz+rr9sE3YauS5PliDXK60= cloud.google.com/go/secretmanager v1.10.0/go.mod h1:MfnrdvKMPNra9aZtQFvBcvRU54hbPD8/HayQdlUgJpU= cloud.google.com/go/security v1.10.0/go.mod h1:QtOMZByJVlibUT2h9afNDWRZ1G96gVywH8T5GUSb9IA= +cloud.google.com/go/security v1.12.0 h1:WIyVxhrdex1geaAV0pC/4yXy/sZdurjHXLzMopcjers= cloud.google.com/go/security v1.12.0/go.mod h1:rV6EhrpbNHrrxqlvW0BWAIawFWq3X90SduMJdFwtLB8= cloud.google.com/go/securitycenter v1.16.0/go.mod h1:Q9GMaLQFUD+5ZTabrbujNWLtSLZIZF7SAR0wWECrjdk= +cloud.google.com/go/securitycenter v1.18.1 h1:DRUo2MFSq3Kt0a4hWRysdMHcu2obPwnSQNgHfOuwR4Q= cloud.google.com/go/securitycenter v1.18.1/go.mod h1:0/25gAzCM/9OL9vVx4ChPeM/+DlfGQJDwBy/UC8AKK0= cloud.google.com/go/servicecontrol v1.5.0/go.mod h1:qM0CnXHhyqKVuiZnGKrIurvVImCs8gmqWsDoqe9sU1s= +cloud.google.com/go/servicecontrol v1.11.0 h1:iEiMJgD1bzRL9Zu4JYDQUWfqZ+kRLX8wWZSCMBK8Qzs= cloud.google.com/go/servicecontrol v1.11.0/go.mod h1:kFmTzYzTUIuZs0ycVqRHNaNhgR+UMUpw9n02l/pY+mc= cloud.google.com/go/servicedirectory v1.7.0/go.mod h1:5p/U5oyvgYGYejufvxhgwjL8UVXjkuw7q5XcG10wx1U= +cloud.google.com/go/servicedirectory v1.8.0 h1:DPvPdb6O/lg7xK+BFKlzZN+w6upeJ/bbfcUnnqU66b8= cloud.google.com/go/servicedirectory v1.8.0/go.mod h1:srXodfhY1GFIPvltunswqXpVxFPpZjf8nkKQT7XcXaY= cloud.google.com/go/servicemanagement v1.5.0/go.mod h1:XGaCRe57kfqu4+lRxaFEAuqmjzF0r+gWHjWqKqBvKFo= +cloud.google.com/go/servicemanagement v1.6.0 h1:flWoX0eJy21+34I/7HPUbpr6xTHPVzws1xnecLFlUm0= cloud.google.com/go/servicemanagement v1.6.0/go.mod h1:aWns7EeeCOtGEX4OvZUWCCJONRZeFKiptqKf1D0l/Jc= cloud.google.com/go/serviceusage v1.4.0/go.mod h1:SB4yxXSaYVuUBYUml6qklyONXNLt83U0Rb+CXyhjEeU= +cloud.google.com/go/serviceusage v1.5.0 h1:fl1AGgOx7E2eyBmH5ofDXT9w8xGvEaEnHYyNYGkxaqg= cloud.google.com/go/serviceusage v1.5.0/go.mod h1:w8U1JvqUqwJNPEOTQjrMHkw3IaIFLoLsPLvsE3xueec= cloud.google.com/go/shell v1.4.0/go.mod h1:HDxPzZf3GkDdhExzD/gs8Grqk+dmYcEjGShZgYa9URw= +cloud.google.com/go/shell v1.6.0 h1:wT0Uw7ib7+AgZST9eCDygwTJn4+bHMDtZo5fh7kGWDU= cloud.google.com/go/shell v1.6.0/go.mod h1:oHO8QACS90luWgxP3N9iZVuEiSF84zNyLytb+qE2f9A= cloud.google.com/go/spanner v1.41.0/go.mod h1:MLYDBJR/dY4Wt7ZaMIQ7rXOTLjYrmxLE/5ve9vFfWos= +cloud.google.com/go/spanner v1.44.0 h1:fba7k2apz4aI0BE59/kbeaJ78dPOXSz2PSuBIfe7SBM= cloud.google.com/go/spanner v1.44.0/go.mod h1:G8XIgYdOK+Fbcpbs7p2fiprDw4CaZX63whnSMLVBxjk= cloud.google.com/go/speech v1.9.0/go.mod h1:xQ0jTcmnRFFM2RfX/U+rk6FQNUF6DQlydUSyoooSpco= +cloud.google.com/go/speech v1.14.1 h1:x4ZJWhop/sLtnIP97IMmPtD6ZF003eD8hykJ0lOgEtw= cloud.google.com/go/speech v1.14.1/go.mod h1:gEosVRPJ9waG7zqqnsHpYTOoAS4KouMRLDFMekpJ0J0= cloud.google.com/go/storage v1.28.1/go.mod h1:Qnisd4CqDdo6BGs2AD5LLnEsmSQ80wQ5ogcBBKhU86Y= cloud.google.com/go/storagetransfer v1.6.0/go.mod h1:y77xm4CQV/ZhFZH75PLEXY0ROiS7Gh6pSKrM8dJyg6I= +cloud.google.com/go/storagetransfer v1.7.0 h1:doREJk5f36gq7yJDJ2HVGaYTuQ8Nh6JWm+6tPjdfh+g= cloud.google.com/go/storagetransfer v1.7.0/go.mod h1:8Giuj1QNb1kfLAiWM1bN6dHzfdlDAVC9rv9abHot2W4= cloud.google.com/go/talent v1.4.0/go.mod h1:ezFtAgVuRf8jRsvyE6EwmbTK5LKciD4KVnHuDEFmOOA= +cloud.google.com/go/talent v1.5.0 h1:nI9sVZPjMKiO2q3Uu0KhTDVov3Xrlpt63fghP9XjyEM= cloud.google.com/go/talent v1.5.0/go.mod h1:G+ODMj9bsasAEJkQSzO2uHQWXHHXUomArjWQQYkqK6c= cloud.google.com/go/texttospeech v1.5.0/go.mod h1:oKPLhR4n4ZdQqWKURdwxMy0uiTS1xU161C8W57Wkea4= +cloud.google.com/go/texttospeech v1.6.0 h1:H4g1ULStsbVtalbZGktyzXzw6jP26RjVGYx9RaYjBzc= cloud.google.com/go/texttospeech v1.6.0/go.mod h1:YmwmFT8pj1aBblQOI3TfKmwibnsfvhIBzPXcW4EBovc= cloud.google.com/go/tpu v1.4.0/go.mod h1:mjZaX8p0VBgllCzF6wcU2ovUXN9TONFLd7iz227X2Xg= +cloud.google.com/go/tpu v1.5.0 h1:/34T6CbSi+kTv5E19Q9zbU/ix8IviInZpzwz3rsFE+A= cloud.google.com/go/tpu v1.5.0/go.mod h1:8zVo1rYDFuW2l4yZVY0R0fb/v44xLh3llq7RuV61fPM= cloud.google.com/go/trace v1.4.0/go.mod h1:UG0v8UBqzusp+z63o7FK74SdFE+AXpCLdFb1rshXG+Y= +cloud.google.com/go/trace v1.8.0 h1:GFPLxbp5/FzdgTzor3nlNYNxMd6hLmzkE7sA9F0qQcA= cloud.google.com/go/trace v1.8.0/go.mod h1:zH7vcsbAhklH8hWFig58HvxcxyQbaIqMarMg9hn5ECA= cloud.google.com/go/translate v1.4.0/go.mod h1:06Dn/ppvLD6WvA5Rhdp029IX2Mi3Mn7fpMRLPvXT5Wg= +cloud.google.com/go/translate v1.6.0 h1:oBW4KVgcUq4OAXGdKEdyV7lqWiA3keQ3+8FKreAQv4g= cloud.google.com/go/translate v1.6.0/go.mod h1:lMGRudH1pu7I3n3PETiOB2507gf3HnfLV8qlkHZEyos= cloud.google.com/go/video v1.9.0/go.mod h1:0RhNKFRF5v92f8dQt0yhaHrEuH95m068JYOvLZYnJSw= +cloud.google.com/go/video v1.13.0 h1:FL+xG+4vgZASVIxcWACxneKPhFOnOX75GJhhTP7yUkQ= cloud.google.com/go/video v1.13.0/go.mod h1:ulzkYlYgCp15N2AokzKjy7MQ9ejuynOJdf1tR5lGthk= cloud.google.com/go/videointelligence v1.9.0/go.mod h1:29lVRMPDYHikk3v8EdPSaL8Ku+eMzDljjuvRs105XoU= +cloud.google.com/go/videointelligence v1.10.0 h1:Uh5BdoET8XXqXX2uXIahGb+wTKbLkGH7s4GXR58RrG8= cloud.google.com/go/videointelligence v1.10.0/go.mod h1:LHZngX1liVtUhZvi2uNS0VQuOzNi2TkY1OakiuoUOjU= +cloud.google.com/go/vision v1.2.0 h1:/CsSTkbmO9HC8iQpxbK8ATms3OQaX3YQUeTMGCxlaK4= cloud.google.com/go/vision/v2 v2.5.0/go.mod h1:MmaezXOOE+IWa+cS7OhRRLK2cNv1ZL98zhqFFZaaH2E= +cloud.google.com/go/vision/v2 v2.6.0 h1:WKt7VNhMLKaT9NmdisWnU2LVO5CaHvisssTaAqfV3dg= cloud.google.com/go/vision/v2 v2.6.0/go.mod h1:158Hes0MvOS9Z/bDMSFpjwsUrZ5fPrdwuyyvKSGAGMY= cloud.google.com/go/vmmigration v1.3.0/go.mod h1:oGJ6ZgGPQOFdjHuocGcLqX4lc98YQ7Ygq8YQwHh9A7g= +cloud.google.com/go/vmmigration v1.5.0 h1:+2zAH2Di1FB02kAv8L9In2chYRP2Mw0bl41MiWwF+Fc= cloud.google.com/go/vmmigration v1.5.0/go.mod h1:E4YQ8q7/4W9gobHjQg4JJSgXXSgY21nA5r8swQV+Xxc= cloud.google.com/go/vmwareengine v0.1.0/go.mod h1:RsdNEf/8UDvKllXhMz5J40XxDrNJNN4sagiox+OI208= +cloud.google.com/go/vmwareengine v0.2.2 h1:ZM35wN4xuxDZSpKFypLMTsB02M+NEIZ2wr7/VpT3osw= cloud.google.com/go/vmwareengine v0.2.2/go.mod h1:sKdctNJxb3KLZkE/6Oui94iw/xs9PRNC2wnNLXsHvH8= cloud.google.com/go/vpcaccess v1.5.0/go.mod h1:drmg4HLk9NkZpGfCmZ3Tz0Bwnm2+DKqViEpeEpOq0m8= +cloud.google.com/go/vpcaccess v1.6.0 h1:FOe6CuiQD3BhHJWt7E8QlbBcaIzVRddupwJlp7eqmn4= cloud.google.com/go/vpcaccess v1.6.0/go.mod h1:wX2ILaNhe7TlVa4vC5xce1bCnqE3AeH27RV31lnmZes= cloud.google.com/go/webrisk v1.7.0/go.mod h1:mVMHgEYH0r337nmt1JyLthzMr6YxwN1aAIEc2fTcq7A= +cloud.google.com/go/webrisk v1.8.0 h1:IY+L2+UwxcVm2zayMAtBhZleecdIFLiC+QJMzgb0kT0= cloud.google.com/go/webrisk v1.8.0/go.mod h1:oJPDuamzHXgUc+b8SiHRcVInZQuybnvEW72PqTc7sSg= cloud.google.com/go/websecurityscanner v1.4.0/go.mod h1:ebit/Fp0a+FWu5j4JOmJEV8S8CzdTkAS77oDsiSqYWQ= +cloud.google.com/go/websecurityscanner v1.5.0 h1:AHC1xmaNMOZtNqxI9Rmm87IJEyPaRkOxeI0gpAacXGk= cloud.google.com/go/websecurityscanner v1.5.0/go.mod h1:Y6xdCPy81yi0SQnDY1xdNTNpfY1oAgXUlcfN3B3eSng= cloud.google.com/go/workflows v1.9.0/go.mod h1:ZGkj1aFIOd9c8Gerkjjq7OW7I5+l6cSvT3ujaO/WwSA= +cloud.google.com/go/workflows v1.10.0 h1:FfGp9w0cYnaKZJhUOMqCOJCYT/WlvYBfTQhFWV3sRKI= cloud.google.com/go/workflows v1.10.0/go.mod h1:fZ8LmRmZQWacon9UCX1r/g/DfAXx5VcPALq2CxzdePw= -cosmossdk.io/log v1.1.0/go.mod h1:6zjroETlcDs+mm62gd8Ig7mZ+N+fVOZS91V17H+M4N4= +cosmossdk.io/math v1.0.0-rc.0/go.mod h1:Ygz4wBHrgc7g0N+8+MrnTfS9LLn9aaTGa9hKopuym5k= +cosmossdk.io/math v1.0.0/go.mod h1:Ygz4wBHrgc7g0N+8+MrnTfS9LLn9aaTGa9hKopuym5k= +cosmossdk.io/simapp v0.0.0-20230224204036-a6adb0821462 h1:g8muUHnXL8vhld2Sjilyhb1UQObc+x9GVuDK43TYZns= +cosmossdk.io/simapp v0.0.0-20230224204036-a6adb0821462/go.mod h1:4Dd3NLoLYoN90kZ0uyHoTHzVVk9+J0v4HhZRBNTAq2c= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9 h1:VpgP7xuJadIUuKccphEpTJnWhS2jkQyMt6Y7pJCD7fY= +github.com/Abirdcfly/dupword v0.0.7 h1:z14n0yytA3wNO2gpCD/jVtp/acEXPGmYu0esewpBt6Q= github.com/Abirdcfly/dupword v0.0.7/go.mod h1:K/4M1kj+Zh39d2aotRwypvasonOyAMH1c/IZJzE0dmk= +github.com/AdaLogics/go-fuzz-headers v0.0.0-20210715213245-6c3934b029d8 h1:V8krnnfGj4pV65YLUm3C0/8bl7V5Nry2Pwvy3ru/wLc= +github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96 h1:cTp8I5+VIoKjsnZuH8vjyaysT/ses3EvZeaV/1UkF2M= +github.com/Antonboom/errname v0.1.7 h1:mBBDKvEYwPl4WFFNwec1CZO096G6vzK9vvDQzAwkako= github.com/Antonboom/errname v0.1.7/go.mod h1:g0ONh16msHIPgJSGsecu1G/dcF2hlYR/0SddnIAGavU= +github.com/Antonboom/nilnil v0.1.1 h1:PHhrh5ANKFWRBh7TdYmyyq2gyT2lotnvFvvFbylF81Q= github.com/Antonboom/nilnil v0.1.1/go.mod h1:L1jBqoWM7AOeTD+tSquifKSesRHs4ZdaxvZR+xdJEaI= +github.com/Azure/azure-sdk-for-go/sdk/azcore v0.21.1 h1:qoVeMsc9/fh/yhxVaA0obYjVH/oI/ihrOoMwsLS9KSA= +github.com/Azure/azure-sdk-for-go/sdk/internal v0.8.3 h1:E+m3SkZCN0Bf5q7YdTs5lSm2CYY3CK4spn5OmUIiQtk= +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.3.0 h1:Px2UA+2RvSSvv+RvJNuUB6n7rs5Wsel4dXLe90Um2n4= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= +github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802 h1:1BDTz0u9nC3//pOCMdNH+CiXJVYJh5UQNCOBG7jbELc= +github.com/CosmWasm/wasmd v0.40.0-rc.1 h1:prIM2vP1jNh0zgs9seua5BgKdayBgp3FiHtwxFcZSGs= +github.com/CosmWasm/wasmd v0.40.0-rc.1/go.mod h1:uacdue6EGn9JA1TqBNHB3iCe4PCIChuFT23AzIl2VME= +github.com/CosmWasm/wasmvm v1.2.3 h1:OKYlobwmVGbl0eSn0mXoAAjE5hIuXnQCLPjbNd91sVY= +github.com/CosmWasm/wasmvm v1.2.3/go.mod h1:vW/E3h8j9xBQs9bCoijDuawKo9kCtxOaS8N8J7KFtkc= +github.com/DATA-DOG/go-sqlmock v1.5.0 h1:Shsta01QNfFxHCfpW6YH2STWB0MudeXXEWMr20OEh60= +github.com/DataDog/datadog-go v3.2.0+incompatible h1:qSG2N4FghB1He/r2mFrWKCaL7dXCilEuNEeAn20fdD4= +github.com/DataDog/zstd v1.4.5 h1:EndNeuB0l9syBZhut0wns3gV1hL8zX8LIu6ZiVHWLIQ= +github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24 h1:sHglBQTwgx+rWPdisA5ynNEsoARbiCBOyGcJM4/OzsM= github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= +github.com/GaijinEntertainment/go-exhaustruct/v2 v2.3.0 h1:+r1rSv4gvYn0wmRjC8X7IAzX8QezqtFV9m0MUHFJgts= github.com/GaijinEntertainment/go-exhaustruct/v2 v2.3.0/go.mod h1:b3g59n2Y+T5xmcxJL+UEG2f8cQploZm1mR/v6BW0mU0= +github.com/HdrHistogram/hdrhistogram-go v1.1.2 h1:5IcZpTvzydCQeHzK4Ef/D5rrSqwxob0t8PQPMybUNFM= +github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible h1:1G1pk05UrOh0NlF1oeaaix1x8XzrfjIDK47TY0Zehcw= +github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= +github.com/Masterminds/semver/v3 v3.2.0 h1:3MEsd0SM6jqZojhjLWWeBY+Kcjy9i6MQAeY7YgDP83g= github.com/Masterminds/semver/v3 v3.2.0/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ= github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= +github.com/Microsoft/hcsshim v0.9.4 h1:mnUj0ivWy6UzbB1uLFqKR6F+ZyiDc7j4iGgHTpO+5+I= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= +github.com/OpenPeeDeeP/depguard v1.1.1 h1:TSUznLjvp/4IUP+OQ0t/4jF4QUyxIcVX8YnghZdunyA= github.com/OpenPeeDeeP/depguard v1.1.1/go.mod h1:JtAMzWkmFEzDPyAd+W0NHl1lvpQKTvT9jnRVsohBKpc= +github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4 h1:ra2OtmuW0AE5csawV4YXMNGNQQXvLRps3z2Z59OPO+I= github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4/go.mod h1:UBYPn8k0D56RtnR8RFQMjmh4KrZzWJ5o7Z9SYjossQ8= +github.com/Shopify/sarama v1.19.0 h1:9oksLxC6uxVPHPVYUmq6xhr1BOF/hHobWH2UzO67z1s= +github.com/Shopify/toxiproxy v2.1.4+incompatible h1:TKdv8HiTLgE5wdJuEML90aBgNWsokNbMijUGhmcoBJc= +github.com/VictoriaMetrics/fastcache v1.6.0 h1:C/3Oi3EiBCqufydp1neRZkqcwmEiuRT9c3fqvvgKm5o= +github.com/acomagu/bufpipe v1.0.3 h1:fxAGrHZTgQ9w5QqVItgzwj235/uYZYgbXitB+dLupOk= github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= github.com/adlio/schema v1.3.3/go.mod h1:1EsRssiv9/Ce2CMzq5DoL7RiMshhuigQxrR4DMV9fHg= +github.com/aead/siphash v1.0.1 h1:FwHfE/T45KPKYuuSAKyyvE+oPWcaQ+CUmFW0bPlM+kg= github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= +github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5 h1:rFw4nCn9iMW+Vajsk51NtYIcwSTkXr+JGrMd36kTDJw= +github.com/agext/levenshtein v1.2.3 h1:YB2fHEn0UJagG8T1rrWknE3ZQzWM06O8AMAatNn7lmo= +github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af h1:wVe6/Ea46ZMeNkQjjBW6xcqyQA/j5e0D6GytH95g0gQ= +github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= +github.com/alecthomas/kingpin/v2 v2.3.1 h1:ANLJcKmQm4nIaog7xdr/id6FM6zm5hHnfZrvtKPxqGg= github.com/alecthomas/kingpin/v2 v2.3.1/go.mod h1:oYL5vtsvEHZGHxU7DMp32Dvx+qL+ptGn6lWaot2vCNE= +github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafoB+tBA3gMyHYHrpOtNuDiK/uB5uXxq5wM= +github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 h1:s6gZFSlWYmbqAuRjVTiNNhvNRfY2Wxp9nhfyel4rklc= github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE= +github.com/alexkohler/prealloc v1.0.0 h1:Hbq0/3fJPQhNkN0dR95AVrr6R7tou91y0uHG5pOcUuw= github.com/alexkohler/prealloc v1.0.0/go.mod h1:VetnK3dIgFBBKmg0YnD9F9x6Icjd+9cvfHR56wJVlKE= +github.com/alingse/asasalint v0.0.11 h1:SFwnQXJ49Kx/1GghOFz1XGqHYKp21Kq1nHad/0WQRnw= github.com/alingse/asasalint v0.0.11/go.mod h1:nCaoMhw7a9kSJObvQyVzNTPBDbNpdocqrSP7t/cW5+I= +github.com/andybalholm/brotli v1.0.4 h1:V7DdXeJtZscaqfNuAdSRuRFzuiKlHSC/Zh3zl9qY3JY= +github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= +github.com/antihax/optional v1.0.0 h1:xK2lYat7ZLaVVcIuj82J8kIro4V6kDe0AUDFboUCwcg= +github.com/apache/arrow/go/v10 v10.0.1 h1:n9dERvixoC/1JjDmBcs9FPaEryoANa2sCgVFo6ez9cI= +github.com/apache/thrift v0.16.0 h1:qEy6UW60iVOlUy+b9ZR0d5WzUWYGOo4HfopoyBaNmoY= +github.com/armon/circbuf v0.0.0-20190214190532-5111143e8da2 h1:7Ip0wMmLHLRJdrloDxZfhMm0xrLXZS8+COSu2bXmEQs= +github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6 h1:G1bPvciwNyF7IUmKXNt9Ak3m6u9DE1rF+RmtIkBpVdA= github.com/armon/go-metrics v0.4.0/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= +github.com/armon/go-radix v1.0.0 h1:F4z6KzEeeQIMeLFa97iZU6vupzoecKdU5TX24SNppXI= github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= +github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a h1:pv34s756C4pEXnjgPfGYgdhg/ZdajGhyOvzx8k+23nw= +github.com/ashanbrown/forbidigo v1.3.0 h1:VkYIwb/xxdireGAdJNZoo24O4lmnEWkactplBlWTShc= github.com/ashanbrown/forbidigo v1.3.0/go.mod h1:vVW7PEdqEFqapJe95xHkTfB1+XvZXBFg8t0sG2FIxmI= +github.com/ashanbrown/makezero v1.1.1 h1:iCQ87C0V0vSyO+M9E/FZYbu65auqH0lnsOkf5FcB28s= github.com/ashanbrown/makezero v1.1.1/go.mod h1:i1bJLCRSCHOcOa9Y6MyF2FTfMZMFdHvxKHxgO5Z1axI= +github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4= github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI= +github.com/aws/aws-lambda-go v1.13.3 h1:SuCy7H3NLyp+1Mrfp+m80jcbi9KYWAs9/BXwppwRDzY= +github.com/aws/aws-sdk-go-v2 v1.9.1 h1:ZbovGV/qo40nrOJ4q8G33AGICzaPI45FHQWJ9650pF4= +github.com/aws/aws-sdk-go-v2 v1.9.1/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4= +github.com/aws/aws-sdk-go-v2/config v1.1.1 h1:ZAoq32boMzcaTW9bcUacBswAmHTbvlvDJICgHFZuECo= +github.com/aws/aws-sdk-go-v2/credentials v1.1.1 h1:NbvWIM1Mx6sNPTxowHgS2ewXCRp+NGTzUYb/96FZJbY= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.0.2 h1:EtEU7WRaWliitZh2nmuxEXrN0Cb8EgPUFGIoTMeqbzI= +github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.8.1 h1:w/fPGB0t5rWwA43mux4e9ozFSH5zF1moQemlA131PWc= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.0.2 h1:4AH9fFjUlVktQMznF+YN33aWNXaR4VgDXyP28qokJC0= +github.com/aws/aws-sdk-go-v2/service/route53 v1.1.1 h1:cKr6St+CtC3/dl/rEBJvlk7A/IN5D5F02GNkGzfbtVU= +github.com/aws/aws-sdk-go-v2/service/sso v1.1.1 h1:37QubsarExl5ZuCBlnRP+7l1tNwZPBSTqpTBrPH98RU= +github.com/aws/aws-sdk-go-v2/service/sts v1.1.1 h1:TJoIfnIFubCX0ACVeJ0w46HEH5MwjwYN4iFhuYIhfIY= +github.com/aws/smithy-go v1.8.0 h1:AEwwwXQZtUwP5Mz506FeXXrKBe0jA8gVM+1gEcSRooc= +github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +github.com/bkielbasa/cyclop v1.2.0 h1:7Jmnh0yL2DjKfw28p86YTd/B4lRGcNuu12sKE35sM7A= github.com/bkielbasa/cyclop v1.2.0/go.mod h1:qOI0yy6A7dYC4Zgsa72Ppm9kONl0RoIlPbzot9mhmeI= +github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ= +github.com/blizzy78/varnamelen v0.8.0 h1:oqSblyuQvFsW1hbBHh1zfwrKe3kcSj0rnXkKzsQ089M= github.com/blizzy78/varnamelen v0.8.0/go.mod h1:V9TzQZ4fLJ1DSrjVDfl89H7aMnTvKkApdHeyESmyR7k= +github.com/bombsimon/wsl/v3 v3.3.0 h1:Mka/+kRLoQJq7g2rggtgQsjuI/K5Efd87WX96EWFxjM= github.com/bombsimon/wsl/v3 v3.3.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc= +github.com/breml/bidichk v0.2.3 h1:qe6ggxpTfA8E75hdjWPZ581sY3a2lnl0IRxLQFelECI= github.com/breml/bidichk v0.2.3/go.mod h1:8u2C6DnAy0g2cEq+k/A2+tr9O1s+vHGxWn0LTc70T2A= +github.com/breml/errchkjson v0.3.0 h1:YdDqhfqMT+I1vIxPSas44P+9Z9HzJwCeAzjB8PxP1xw= github.com/breml/errchkjson v0.3.0/go.mod h1:9Cogkyv9gcT8HREpzi3TiqBxCqDzo8awa92zSDFcofU= 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.0 h1:V2/ZgjfDFIygAX3ZapeigkVBoVUtOJKSwrhZdlpSvaA= github.com/btcsuite/btcd v0.23.0/go.mod h1:0QJIIN1wwIXF/3G/m87gIwGniDMDQqjVn4SZgnFpsYY= 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.2.0/go.mod h1:U7MHm051Al6XmscBQ0BoNydpOTsFAn707034b5nY8zU= github.com/btcsuite/btcd/btcec/v2 v2.2.1/go.mod h1:9/CSmJxmuvqzX9Wh2fXMWToLOHhPd11lSPuIupwTkI8= 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.2/go.mod h1:UR7dsSJzJUfMmFiiLlIrMq1lS9jh9EdCV7FStZSnpi0= +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/btclog v0.0.0-20170628155309-84c8d2346e9f h1:bAs4lUbRJpnnkd9VhRV3jjAVU7DJVjMaK+IsvSeZvFo= 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/go-socks v0.0.0-20170105172521-4720035b7bfd h1:R/opQEbFEy9JGkIguV40SvRY1uliPX8ifOvi6ICsFCw= 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 h1:Tvd0BfvqX9o823q1j2UZ/epQo09eJh6dTcRp79ilIN4= 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 h1:ZxaA6lo2EpxGddsA8JwWOcxlzRybb444sgmeJQMJGQE= github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= +github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792 h1:R8vQdOQdZ9Y3SkEwmHoWBmX1DNXhXZqlTpq6s4tyJGc= github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= +github.com/btcsuite/winsvc v1.0.0 h1:J9B4L7e3oqhXOcm+2IuNApwzQec85lE+QaikUcCs+dk= github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= +github.com/bufbuild/buf v1.7.0 h1:uWRjhIXcrWkzIkA5TqXGyJbF51VW54QJsQZ3nwaes5Q= github.com/bufbuild/buf v1.7.0/go.mod h1:Go40fMAF46PnPLC7jJgTQhAI95pmC0+VtxFKVC0qLq0= +github.com/bufbuild/connect-go v1.0.0 h1:htSflKUT8y1jxhoPhPYTZMrsY3ipUXjjrbcZR5O2cVo= github.com/bufbuild/connect-go v1.0.0/go.mod h1:9iNvh/NOsfhNBUH5CtvXeVUskQO1xsrEviH7ZArwZ3I= github.com/bufbuild/protocompile v0.4.0/go.mod h1:3v93+mbWn/v3xzN+31nwkJfrEpAUwp+BagBSZWx+TP8= +github.com/butuzov/ireturn v0.1.1 h1:QvrO2QF2+/Cx1WA/vETCIYBKtRjc30vesdoPUNo1EbY= github.com/butuzov/ireturn v0.1.1/go.mod h1:Wh6Zl3IMtTpaIKbmwzqi6olnM9ptYQxxVacMsOEFPoc= +github.com/bwesterb/go-ristretto v1.2.0 h1:xxWOVbN5m8NNKiSDZXE1jtZvZnC6JSJ9cYFADiZcWtw= github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= +github.com/casbin/casbin/v2 v2.37.0 h1:/poEwPSovi4bTOcP752/CsTQiRz2xycyVKFG7GUhbDw= github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/census-instrumentation/opencensus-proto v0.4.1 h1:iKLQ0xPNFxR/2hzXZMrBo8f1j86j5WHzznCCQxV/b8g= github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw= +github.com/cespare/cp v0.1.0 h1:SE+dxFebS7Iik5LK0tsi1k9ZCxEaFX4AjQmoyA+1dJk= github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/charithe/durationcheck v0.0.9 h1:mPP4ucLrf/rKZiIG/a9IPXHGlh8p4CzgpyTy6EEutYk= github.com/charithe/durationcheck v0.0.9/go.mod h1:SSbRIBVfMjCi/kEB6K65XEA83D6prSM8ap1UCpNKtgg= +github.com/chavacava/garif v0.0.0-20220630083739-93517212f375 h1:E7LT642ysztPWE0dfz43cWOvMiF42DyTRC+eZIaO4yI= github.com/chavacava/garif v0.0.0-20220630083739-93517212f375/go.mod h1:4m1Rv7xfuwWPNKXlThldNuJvutYM6J95wNuuVmn55To= +github.com/checkpoint-restore/go-criu/v5 v5.3.0 h1:wpFFOoomK3389ue2lAb0Boag6XPht5QYpipxmSNL4d8= github.com/checkpoint-restore/go-criu/v5 v5.3.0/go.mod h1:E/eQpaFtUKGOOSEBZgmKAcn+zUUwWxqcaKZlF54wK8E= +github.com/cheekybits/genny v1.0.0 h1:uGGa4nei+j20rOSeDeP5Of12XVm7TGUd4dJA9RDitfE= +github.com/cheggaaa/pb v1.0.27 h1:wIkZHkNfC7R6GI5w7l/PdAdzXzlrbcI3p8OAlnkTsnc= +github.com/cilium/ebpf v0.7.0 h1:1k/q3ATgxSXRdrmPfH8d7YK0GfqVsEKZAX9dQZvs56k= github.com/cilium/ebpf v0.7.0/go.mod h1:/oI2+1shJiTGAMgl6/RgJr36Eo1jzrRcAWbcXO2usCA= +github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible h1:C29Ae4G5GtYyYMm1aztcyj/J5ckgJm2zwdDajFbx1NY= +github.com/circonus-labs/circonusllhist v0.1.3 h1:TJH+oke8D16535+jHExHj4nQvzlZrj7ug5D7I/orNUA= +github.com/clbanning/mxj v1.8.4 h1:HuhwZtbyvyOw+3Z1AowPkU87JkJUSv751ELWaiTpj8I= +github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec h1:EdRZT3IeKQmfCSrgo8SZ8V3MEnskuJP0wCYNpe+aiXo= +github.com/client9/misspell v0.3.4 h1:ta993UF76GwbvJcIo3Y68y/M3WxlpEHPWIGDkJYwzJI= +github.com/cloudflare/circl v1.1.0 h1:bZgT/A+cikZnKIwn7xL2OBj012Bmvho/o6RpRvv3GKY= github.com/cloudflare/circl v1.1.0/go.mod h1:prBCrKB9DV4poKZY1l9zBXg2QJY7mvgRvtMxxK7fi4I= +github.com/cloudflare/cloudflare-go v0.14.0 h1:gFqGlGl/5f9UGXAaKapCGUfaTCgRKKnzu2VvzMZlOFA= +github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe h1:QQ3GSy+MqSHxm/d8nCtnAiZdYFd45cYZPs8vOOIYKfk= github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= github.com/cncf/xds/go v0.0.0-20220314180256-7f1daf1720fc/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20230105202645-06c439db220b/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20230310173818-32f1caf87195 h1:58f1tJ1ra+zFINPlwLWvQsR9CzAKt2e+EWV2yX9oXQ4= github.com/cncf/xds/go v0.0.0-20230310173818-32f1caf87195/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa h1:OaNxuTZr7kxeODyLWsRMC+OD03aFUH+mW6r2d+MWa5Y= +github.com/cockroachdb/errors v1.9.1 h1:yFVvsI0VxmRShfawbt/laCIDy/mtTqqnvoNgiy5bEV8= +github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= +github.com/cockroachdb/pebble v0.0.0-20220817183557-09c6e030a677 h1:qbb/AE938DFhOajUYh9+OXELpSF9KZw2ZivtmW6eX1Q= +github.com/cockroachdb/redact v1.1.3 h1:AKZds10rFSIj7qADf0g46UixK8NNLwWTNdCIGS5wfSQ= +github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd h1:qMd81Ts1T2OTKmB4acZcyKaMtRnY5Y44NuXGX2GFJ1w= +github.com/cometbft/cometbft v0.37.0/go.mod h1:Y2MMMN//O5K4YKd8ze4r9jmk4Y7h0ajqILXbH5JQFVs= +github.com/consensys/gnark-crypto v0.4.1-0.20210426202927-39ac3d4b3f1f h1:C43yEtQ6NIf4ftFXD/V55gnGFgPbMQobd//YlnLjUJ8= +github.com/containerd/aufs v1.0.0 h1:2oeJiwX5HstO7shSrPZjrohJZLzK36wvpdmzDRkL/LY= +github.com/containerd/btrfs v1.0.0 h1:osn1exbzdub9L5SouXO5swW4ea/xVdJZ3wokxN5GrnA= +github.com/containerd/cgroups v1.0.4 h1:jN/mbWBEaz+T1pi5OFtnkQ+8qnmEbAr1Oo1FRm5B0dA= +github.com/containerd/console v1.0.3 h1:lIr7SlA5PxZyMV30bDW0MGbiOPXwc63yRuCP0ARubLw= github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U= +github.com/containerd/containerd v1.6.8 h1:h4dOFDwzHmqFEP754PgfgTeVXFnLiRc6kiqC7tplDJs= github.com/containerd/containerd v1.6.8/go.mod h1:By6p5KqPK0/7/CgO/A6t/Gz+CUYUu2zf1hUaaymVXB0= github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= +github.com/containerd/fifo v1.0.0 h1:6PirWBr9/L7GDamKr+XM0IeUFXu5mf3M/BPpH9gaLBU= +github.com/containerd/fuse-overlayfs-snapshotter v1.0.2 h1:Xy9Tkx0tk/SsMfLDFc69wzqSrxQHYEFELHBO/Z8XO3M= +github.com/containerd/go-cni v1.1.6 h1:el5WPymG5nRRLQF1EfB97FWob4Tdc8INg8RZMaXWZlo= +github.com/containerd/go-runc v1.0.0 h1:oU+lLv1ULm5taqgV/CJivypVODI4SUz1znWjv3nNYS0= +github.com/containerd/imgcrypt v1.1.4 h1:iKTstFebwy3Ak5UF0RHSeuCTahC5OIrPJa6vjMAM81s= +github.com/containerd/nri v0.1.0 h1:6QioHRlThlKh2RkRTR4kIT3PKAcrLo3gIWnjkM4dQmQ= +github.com/containerd/stargz-snapshotter v0.11.3 h1:D3PoF563XmOBdtfx2G6AkhbHueqwIVPBFn2mrsWLa3w= +github.com/containerd/stargz-snapshotter/estargz v0.11.3 h1:k2kN16Px6LYuv++qFqK+JTcYqc8bEVxzGpf8/gFBL5M= +github.com/containerd/ttrpc v1.1.0 h1:GbtyLRxb0gOLR0TYQWt3O6B0NvT8tMdorEHqIQo/lWI= +github.com/containerd/typeurl v1.0.2 h1:Chlt8zIieDbzQFzXzAeBEF92KhExuE4p9p92/QmY7aY= github.com/containerd/typeurl v1.0.2/go.mod h1:9trJWW2sRlGub4wZJRTW83VtbOLS6hwcDZXTn6oPz9s= +github.com/containerd/zfs v1.0.0 h1:cXLJbx+4Jj7rNsTiqVfm6i+RNLx6FFA2fMmDlEf+Wm8= +github.com/containernetworking/cni v1.1.1 h1:ky20T7c0MvKvbMOwS/FrlbNwjEoqJEUUYfsL4b0mc4k= +github.com/containernetworking/plugins v1.1.1 h1:+AGfFigZ5TiQH00vhR8qPeSatj53eNGz0C1d3wVYlHE= +github.com/containers/ocicrypt v1.1.3 h1:uMxn2wTb4nDR7GqG3rnZSfpJXqWURfzZ7nKydzIeKpA= +github.com/coreos/etcd v3.3.10+incompatible h1:jFneRYjIvLMLhDLCzuTuU4rSJUjRplcJQ7pD7MnhC04= +github.com/coreos/go-etcd v2.0.0+incompatible h1:bXhRBIXoTm9BYHS3gE0TtQuyNZyeEMux2sDi4oo5YOo= +github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7 h1:u9SHYsPQNyt5tgDm3YN7+9dYrpK96E5wFilTFWIDZOM= github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/go-systemd/v22 v22.3.3-0.20220203105225-a9a7ef127534/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= +github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= +github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf h1:CAKfRE2YtTUIjjh1bkBtyYFaUT/WmOqsJjgtihT0vMI= +github.com/cosmos/cosmos-db v0.0.0-20221226095112-f3c38ecb5e32 h1:zlCp9n3uwQieELltZWHRmwPmPaZ8+XoL2Sj+A2YJlr8= +github.com/cosmos/cosmos-sdk v0.47.0/go.mod h1:FTtZbqiHCZ2vun9WrPq6qLQafNKkAuIhLAxzLjr2TiI= +github.com/cosmos/cosmos-sdk v0.47.1/go.mod h1:14tO5KQaTrl2q3OxBnDRfue7TRN9zkXS0cLutrSqkOo= +github.com/cosmos/cosmos-sdk/db v1.0.0-beta.1.0.20220726092710-f848e4300a8a h1:2humuGPw3O5riJVFq/E2FRjF57UrO97W1qJcGVmK+6k= github.com/cosmos/cosmos-sdk/db v1.0.0-beta.1.0.20220726092710-f848e4300a8a/go.mod h1:c8IO23vgNxueCCJlSI9awQtcxsvc+buzaeThB85qfBU= github.com/cosmos/gogoproto v1.4.1/go.mod h1:Ac9lzL4vFpBMcptJROQ6dQ4M3pOEK5Z/l0Q9p+LoCr4= +github.com/cosmos/gogoproto v1.4.6/go.mod h1:VS/ASYmPgv6zkPKLjR9EB91lwbLHOzaGCirmKKhncfI= +github.com/cosmos/gogoproto v1.4.8/go.mod h1:hnb0DIEWTv+wdNzNcqus5xCQXq5+CXauq1FJuurRfVY= +github.com/cosmos/gorocksdb v1.2.0 h1:d0l3jJG8M4hBouIZq0mDUHZ+zjOx044J3nGRskwTb4Y= +github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk= +github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= github.com/creachadair/taskgroup v0.3.2/go.mod h1:wieWwecHVzsidg2CsUnFinW1faVN4+kq+TDlRJQ0Wbk= +github.com/creack/pty v1.1.11 h1:07n33Z8lZxZ2qwegKbObQohDhXDQxiMMz1NOUGYlesw= github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/cristalhq/acmd v0.8.1 h1:mtFp/cbeJNY5jokF9zPz5mRllGHropRrOkOVxeGS6FI= github.com/cristalhq/acmd v0.8.1/go.mod h1:LG5oa43pE/BbxtfMoImHCQN++0Su7dzipdgBjMCBVDQ= +github.com/curioswitch/go-reassign v0.2.0 h1:G9UZyOcpk/d7Gd6mqYgd8XYWFMw/znxwGDUstnC9DIo= github.com/curioswitch/go-reassign v0.2.0/go.mod h1:x6OpXuWvgfQaMGks2BZybTngWjT84hqJfKoO8Tt/Roc= +github.com/cyphar/filepath-securejoin v0.2.3 h1:YX6ebbZCZP7VkM3scTTokDgBL2TY741X51MTk3ycuNI= github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= +github.com/daixiang0/gci v0.8.1 h1:T4xpSC+hmsi4CSyuYfIJdMZAr9o7xZmHpQVygMghGZ4= github.com/daixiang0/gci v0.8.1/go.mod h1:EpVfrztufwVgQRXjnX4zuNinEpLj5OmMjtu/+MB0V0c= github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c h1:pFUpOrbxDR6AkioZ1ySsx5yxlDQZ8stG2b88gTPxgJU= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs= +github.com/decred/dcrd/lru v1.0.0 h1:Kbsb1SFDsIlaupWPwsPp+dkxiBY1frcS07PCPgotKz8= 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/denis-tingaikin/go-header v0.4.3 h1:tEaZKAlqql6SKCY++utLmkPLd6K8IBM20Ha7UVm+mtU= github.com/denis-tingaikin/go-header v0.4.3/go.mod h1:0wOCWuN71D5qIgE2nz9KrKmuYBAC2Mra5RassOIQ2/c= +github.com/denisenkom/go-mssqldb v0.12.0 h1:VtrkII767ttSPNRfFekePK3sctr+joXgO58stqQbtUA= +github.com/dgraph-io/badger v1.6.2 h1:mNw0qs90GVgGGWylh0umH5iag1j6n/PeJtNvL6KY/x8= +github.com/dgraph-io/badger/v3 v3.2103.2 h1:dpyM5eCJAtQCBcMCZcT4UBZchuTJgCywerHHgmxfxM8= +github.com/dimchansky/utfbom v1.1.1 h1:vV6w1AhK4VMnhBno/TPVCoK9U/LP0PkLCS9tbxHdi/U= +github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91 h1:Izz0+t1Z5nI16/II7vuEo/nHjodOg0p7+OiDpjX5t1E= +github.com/docker/cli v20.10.17+incompatible h1:eO2KS7ZFeov5UJeaDmIs1NFEDRf32PaqRpvoEkKBy5M= github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68= github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/docker v1.6.2/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v20.10.19+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker-credential-helpers v0.6.4 h1:axCks+yV+2MR3/kZhAmy07yC56WZ2Pwu/fKWtKuZB0o= +github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c h1:+pKlWGMw7gf6bQ+oDZB4KHQFypsfjYlq/C4rfL7D3g8= +github.com/docker/go-metrics v0.0.1 h1:AgB/0SvBxihN0X8OR4SjsblXkbMvalQ8cjmtKQ2rQV8= github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/dop251/goja v0.0.0-20220405120441-9037c2b61cbf h1:Yt+4K30SdjOkRoRRm3vYNQgR+/ZIy0RmeUDZo7Y8zeQ= +github.com/dop251/goja v0.0.0-20220405120441-9037c2b61cbf/go.mod h1:R9ET47fwRVRPZnOGvHxxhuZcbrMCuiqOz3Rlrh4KSnk= +github.com/eapache/go-resiliency v1.1.0 h1:1NtRmCAqadE2FN4ZcN6g90TP3uk8cg9rn9eNK2197aU= +github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21 h1:YEetp8/yCZMuEPMUDHG0CW/brkkEp8mzqk2+ODEitlw= +github.com/eapache/queue v1.1.0 h1:YOEu7KNc61ntiQlcEeUIoDTJ2o8mQznoNvUhiigpIqc= +github.com/edsrzf/mmap-go v1.0.0 h1:CEBF7HpRnUCSJgGUb5h1Gm7e3VkmVDrR8lvWVLtrOFw= +github.com/elastic/gosigar v0.14.2 h1:Dg80n8cr90OZ7x+bAax/QjoW/XqTI11RmA79ZwIm9/4= +github.com/emicklei/go-restful v2.9.5+incompatible h1:spTtZBk5DYEvbxMVutUuTyh1Ao2r4iyvLdACqsl/Ljk= +github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= github.com/envoyproxy/go-control-plane v0.10.3/go.mod h1:fJJn/j26vwOu972OllsvAgJJM//w9BV6Fxbg2LuVd34= +github.com/envoyproxy/go-control-plane v0.11.0 h1:jtLewhRR2vMRNnq2ZZUoCjUlgut+Y0+sDDWPOfwOi1o= github.com/envoyproxy/go-control-plane v0.11.0/go.mod h1:VnHyVMpzcLvCFt9yUz1UnCwHLhwx1WguiVDV7pTG/tI= github.com/envoyproxy/protoc-gen-validate v0.6.7/go.mod h1:dyJXwwfPK2VSqiB9Klm1J6romD608Ba7Hij42vrOBCo= github.com/envoyproxy/protoc-gen-validate v0.9.1/go.mod h1:OKNgG7TCp5pF4d6XftA0++PMirau2/yoOwVac3AbF2w= +github.com/envoyproxy/protoc-gen-validate v0.10.0 h1:oIfnZFdC0YhpNNEX+SuIqko4cqqVZeN9IGTrhZje83Y= github.com/envoyproxy/protoc-gen-validate v0.10.0/go.mod h1:DRjgyB0I43LtJapqN6NiRwroiAU2PaFuvk/vjgh61ss= +github.com/esimonov/ifshort v1.0.4 h1:6SID4yGWfRae/M7hkVDVVyppy8q/v9OuxNdmjLQStBA= github.com/esimonov/ifshort v1.0.4/go.mod h1:Pe8zjlRrJ80+q2CxHLfEOfTwxCZ4O+MuhcHcfgNWTk0= +github.com/ettle/strcase v0.1.1 h1:htFueZyVeE1XNnMEfbqp5r67qAN/4r6ya1ysq8Q+Zcw= github.com/ettle/strcase v0.1.1/go.mod h1:hzDLsPC7/lwKyBOywSHEP89nt2pDgdy+No1NBA9o9VY= github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= github.com/facebookgo/stack v0.0.0-20160209184415-751773369052/go.mod h1:UbMTZqLaRiH3MsBH8va0n7s1pQYcu3uTb8G4tygF4Zg= github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0= github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= +github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= +github.com/fatih/structtag v1.2.0 h1:/OdNE99OxoI/PqaW/SuSK9uxxT3f/tcSZgon/ssNSx4= github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= +github.com/firefart/nonamedreturns v1.0.4 h1:abzI1p7mAEPYuR4A+VLKn4eNDOycjYo2phmY9sfv40Y= github.com/firefart/nonamedreturns v1.0.4/go.mod h1:TDhe/tjI1BXo48CmYbUduTV7BdIga8MAO/xbKdcVsGI= +github.com/fjl/gencodec v0.0.0-20220412091415-8bb9e558978c h1:CndMRAH4JIwxbW8KYq6Q+cGWcGHz0FjGR3QqcInWcW0= +github.com/fjl/gencodec v0.0.0-20220412091415-8bb9e558978c/go.mod h1:AzA8Lj6YtixmJWL+wkKoBGsLWy9gFrAzi4g+5bCKwpY= +github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5 h1:FtmdgXiUlNeRsoNMFlKLDt+S+6hbjVMEW6RGQ7aUf7c= +github.com/flynn/noise v1.0.0 h1:DlTHqmzmvcEiKj+4RYo/imoswx/4r6iBlCMfVtrMXpQ= +github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90 h1:WXb3TSNmHp2vHoCroCIB1foO/yQ36swABL8aOVeDpgg= +github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= +github.com/francoispqt/gojay v1.2.13 h1:d2m3sFjloqoIUQU3TsHBgj6qg/BVGlTBeHDUmyJnXKk= +github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db h1:gb2Z18BhTPJPpLQWj4T+rfKHYCHxRHCtRxhKKjRidVw= +github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8 h1:a9ENSRDFBUPkJ5lCgVZh26+ZbGyoVJG7yb5SSzF5H54= github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= +github.com/fzipp/gocyclo v0.6.0 h1:lsblElZG7d3ALtGMx9fmxeTKZaLLpU8mET09yN4BBLo= github.com/fzipp/gocyclo v0.6.0/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlyaLkLoA= +github.com/garslo/gogen v0.0.0-20170306192744-1d203ffc1f61 h1:IZqZOB2fydHte3kUgxrzK5E1fW7RQGeDwE8F/ZZnUYc= +github.com/garslo/gogen v0.0.0-20170306192744-1d203ffc1f61/go.mod h1:Q0X6pkwTILDlzrGEckF6HKjXe48EgsY/l7K7vhY4MW8= +github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff h1:tY80oXqGNY4FhTFhk+o9oFHGINQ/+vhlm8HFzi6znCI= +github.com/gdamore/encoding v1.0.0 h1:+7OoQ1Bc6eTm5niUzBa0Ctsh6JbMW6Ra+YNuAtDBdko= github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg= github.com/gdamore/tcell/v2 v2.4.1-0.20210905002822-f057f0a857a1/go.mod h1:Az6Jt+M5idSED2YPGtwnfJV0kXohgdCBPmHGSYc1r04= +github.com/gdamore/tcell/v2 v2.6.0 h1:OKbluoP9VYmJwZwq/iLb4BxwKcwGthaa1YNBJIyCySg= github.com/gdamore/tcell/v2 v2.6.0/go.mod h1:be9omFATkdr0D9qewWW3d+MEvl5dha+Etb5y65J2H8Y= +github.com/getsentry/sentry-go v0.17.0 h1:UustVWnOoDFHBS7IJUB2QK/nB5pap748ZEp0swnQJak= +github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= +github.com/gliderlabs/ssh v0.3.5 h1:OcaySEmAQJgyYcArR+gGGTHCyE7nvhEMTlYY+Dp8CpY= github.com/gliderlabs/ssh v0.3.5/go.mod h1:8XB4KraRrX39qHhT6yxPsHedjA08I/uBVwj4xC+/+z4= +github.com/go-chi/chi/v5 v5.0.7 h1:rDTPXLDHGATaeHvVlLcR4Qe0zftYethFucbjVQ1PxU8= github.com/go-chi/chi/v5 v5.0.7/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= +github.com/go-critic/go-critic v0.6.5 h1:fDaR/5GWURljXwF8Eh31T2GZNz9X4jeboS912mWF8Uo= github.com/go-critic/go-critic v0.6.5/go.mod h1:ezfP/Lh7MA6dBNn4c6ab5ALv3sKnZVLx37tr00uuaOY= +github.com/go-git/gcfg v1.5.0 h1:Q5ViNfGF8zFgyJWPqYwA7qGFoMTEiBmdlkcfRmpIMa4= github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= github.com/go-git/go-billy/v5 v5.3.1/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= +github.com/go-git/go-billy/v5 v5.4.0 h1:Vaw7LaSTRJOUric7pe4vnzBSgyuf2KrLsu2Y4ZpQBDE= github.com/go-git/go-billy/v5 v5.4.0/go.mod h1:vjbugF6Fz7JIflbVpl1hJsGjSHNltrSw45YK/ukIvQg= +github.com/go-git/go-git-fixtures/v4 v4.3.1 h1:y5z6dd3qi8Hl+stezc8p3JxDkoTRqMAlKnXHuzrfjTQ= github.com/go-git/go-git-fixtures/v4 v4.3.1/go.mod h1:8LHG1a3SRW71ettAD/jW13h8c6AqjVSeL11RAdgaqpo= +github.com/go-git/go-git/v5 v5.5.2 h1:v8lgZa5k9ylUw+OR/roJHTxR4QItsNFI5nKtAXFuynw= github.com/go-git/go-git/v5 v5.5.2/go.mod h1:BE5hUJ5yaV2YMxhmaP4l6RBQ08kMxKSPD4BlxtH7OjI= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1 h1:QbL/5oDUmRBzO9/Z7Seo6zf912W/a6Sr4Eu0G/3Jho0= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4 h1:WtGNWLvXpe6ZudgnXrq0barxBImvnnJoMEhXAzcbM0I= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= github.com/go-logfmt/logfmt v0.5.1/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 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +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-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A= +github.com/go-playground/validator/v10 v10.11.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= +github.com/go-sourcemap/sourcemap v2.1.3+incompatible h1:W1iEw64niKVGogNgBN3ePyLFfuisuzeidWPMPWmECqU= +github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE= +github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 h1:p104kn46Q8WdvHunIJ9dAyjPVtrBPhSr3KT2yUst43I= +github.com/go-toolsmith/astcast v1.0.0 h1:JojxlmI6STnFVG9yOImLeGREv8W2ocNUM+iOhR6jE7g= github.com/go-toolsmith/astcast v1.0.0/go.mod h1:mt2OdQTeAQcY4DQgPSArJjHCcOwlX+Wl/kwN+LbLGQ4= +github.com/go-toolsmith/astcopy v1.0.2 h1:YnWf5Rnh1hUudj11kei53kI57quN/VH6Hp1n+erozn0= github.com/go-toolsmith/astcopy v1.0.2/go.mod h1:4TcEdbElGc9twQEYpVo/aieIXfHhiuLh4aLAck6dO7Y= github.com/go-toolsmith/astequal v1.0.0/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= github.com/go-toolsmith/astequal v1.0.2/go.mod h1:9Ai4UglvtR+4up+bAD4+hCj7iTo4m/OXVTSLnCyTAx4= +github.com/go-toolsmith/astequal v1.0.3 h1:+LVdyRatFS+XO78SGV4I3TCEA0AC7fKEGma+fH+674o= github.com/go-toolsmith/astequal v1.0.3/go.mod h1:9Ai4UglvtR+4up+bAD4+hCj7iTo4m/OXVTSLnCyTAx4= +github.com/go-toolsmith/astfmt v1.0.0 h1:A0vDDXt+vsvLEdbMFJAUBI/uTbRw1ffOPnxsILnFL6k= github.com/go-toolsmith/astfmt v1.0.0/go.mod h1:cnWmsOAuq4jJY6Ct5YWlVLmcmLMn1JUPuQIHCY7CJDw= +github.com/go-toolsmith/astp v1.0.0 h1:alXE75TXgcmupDsMK1fRAy0YUzLzqPVvBKoyWV+KPXg= github.com/go-toolsmith/astp v1.0.0/go.mod h1:RSyrtpVlfTFGDYRbrjyWP1pYu//tSFcvdYrA8meBmLI= +github.com/go-toolsmith/pkgload v1.0.2-0.20220101231613-e814995d17c5 h1:eD9POs68PHkwrx7hAB78z1cb6PfGq/jyWn3wJywsH1o= github.com/go-toolsmith/pkgload v1.0.2-0.20220101231613-e814995d17c5/go.mod h1:3NAwwmD4uY/yggRxoEjk/S00MIV3A+H7rrE3i87eYxM= +github.com/go-toolsmith/strparse v1.0.0 h1:Vcw78DnpCAKlM20kSbAyO4mPfJn/lyYA4BJUDxe2Jb4= github.com/go-toolsmith/strparse v1.0.0/go.mod h1:YI2nUKP9YGZnL/L1/DLFBfixrcjslWct4wyljWhSRy8= +github.com/go-toolsmith/typep v1.0.2 h1:8xdsa1+FSIH/RhEkgnD1j2CJOy5mNllW1Q9tRiYwvlk= github.com/go-toolsmith/typep v1.0.2/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= +github.com/go-xmlfmt/xmlfmt v0.0.0-20191208150333-d5b6f63a941b h1:khEcpUM4yFcxg4/FHQWkvVRmgijNXRfzkIDHh23ggEo= github.com/go-xmlfmt/xmlfmt v0.0.0-20191208150333-d5b6f63a941b/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM= +github.com/go-zookeeper/zk v1.0.2 h1:4mx0EYENAdX/B/rbunjlt5+4RTA/a9SMHBRuSKdGxPM= +github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= -github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/godbus/dbus/v5 v5.0.6/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= github.com/gofrs/uuid v4.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/golang-jwt/jwt/v4 v4.3.0 h1:kHL1vqdqWNfATmA0FNMdmZNMyZI1U6O31X4rlIPoBog= +github.com/golang-jwt/jwt/v4 v4.4.2 h1:rcc4lwaZgFMCZ5jxF9ABolDcIHdBytAFgqFPbSJQAYs= +github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe h1:lXe2qZdvpiX5WZkZR4hgp4KJVfY3nMkvmwbVkpv1rVY= +github.com/golang-sql/sqlexp v0.0.0-20170517235910-f1bb20e5a188 h1:+eHOFJl1BaXrQxKX+T06f78590z4qA2ZzBTqahsKSE4= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= +github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2 h1:23T5iq8rbUYlhpt5DB4XJkc6BU31uODLD1o1gKvZmD0= github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4= +github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a h1:w8hkcTqaFpzKqonE9uMCefW1WDie15eSP/4MssdenaM= github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk= +github.com/golangci/go-misc v0.0.0-20220329215616-d24fe342adfe h1:6RGUuS7EGotKx6J5HIP8ZtyMdiDscjMLfRBSPuzVVeo= github.com/golangci/go-misc v0.0.0-20220329215616-d24fe342adfe/go.mod h1:gjqyPShc/m8pEMpk0a3SeagVb0kaqvhscv+i9jI5ZhQ= +github.com/golangci/gofmt v0.0.0-20220901101216-f2edd75033f2 h1:amWTbTGqOZ71ruzrdA+Nx5WA3tV1N0goTspwmKCQvBY= github.com/golangci/gofmt v0.0.0-20220901101216-f2edd75033f2/go.mod h1:9wOXstvyDRshQ9LggQuzBCGysxs3b6Uo/1MvYCR2NMs= +github.com/golangci/golangci-lint v1.50.1 h1:C829clMcZXEORakZlwpk7M4iDw2XiwxxKaG504SZ9zY= github.com/golangci/golangci-lint v1.50.1/go.mod h1:AQjHBopYS//oB8xs0y0M/dtxdKHkdhl0RvmjUct0/4w= +github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0 h1:MfyDlzVjl1hoaPzPD4Gpb/QgoRfSBR0jdhwGyAWwMSA= github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0/go.mod h1:66R6K6P6VWk9I95jvqGxkqJxVWGFy9XlDwLwVz1RCFg= +github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca h1:kNY3/svz5T29MYHubXix4aDDuE3RWHkPvopM/EDv/MA= github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca/go.mod h1:tvlJhZqDe4LMs4ZHD0oMUlt9G2LWuDGoisJTBzLMV9o= +github.com/golangci/misspell v0.3.5 h1:pLzmVdl3VxTOncgzHcvLOKirdvcx/TydsClUQXTehjo= github.com/golangci/misspell v0.3.5/go.mod h1:dEbvlSfYbMQDtrpRMQU675gSDLDNa8sCPPChZ7PhiVA= +github.com/golangci/revgrep v0.0.0-20220804021717-745bb2f7c2e6 h1:DIPQnGy2Gv2FSA4B/hh8Q7xx3B7AIDk3DAMeHclH1vQ= github.com/golangci/revgrep v0.0.0-20220804021717-745bb2f7c2e6/go.mod h1:0AKcRCkMoKvUvlf89F6O7H2LYdhr1zBh736mBItOdRs= +github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4 h1:zwtduBRr5SSWhqsYNgcuWO2kFlpdOZbP0+yRjmvPGys= github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ= +github.com/google/flatbuffers v2.0.8+incompatible h1:ivUb1cGomAB101ZM1T0nOiWz9pSrTMoa9+EiY7igmkM= +github.com/google/gopacket v1.1.19 h1:ves8RnFZPGiFnTS0uPQStjwru6uO6h+nlr9j6fL7kF8= github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= +github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26/go.mod h1:dDKJzRmX4S37WGHujM7tX//fmj1uioxKzKxz3lo4HJo= +github.com/google/renameio v0.1.0 h1:GOZbcHa3HfsPKPlmyPyN2KEohoMXOhdMbHrvbpl2QaA= +github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= github.com/googleapis/enterprise-certificate-proxy v0.2.1/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= +github.com/googleapis/go-type-adapters v1.0.0 h1:9XdMn+d/G57qq1s8dNc5IesGCXHf6V2HZ2JwRxfA2tA= +github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8 h1:tlyzajkF3030q6M8SvmJSemC9DTHL/xaMa18b65+JM4= +github.com/gookit/color v1.5.1 h1:Vjg2VEcdHpwq+oY63s/ksHrgJYCTo0bwWvmmYWdE9fQ= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= +github.com/gordonklaus/ineffassign v0.0.0-20210914165742-4cc7213b9bc8 h1:PVRE9d4AQKmbelZ7emNig1+NT27DUmKZn5qXxfio54U= github.com/gordonklaus/ineffassign v0.0.0-20210914165742-4cc7213b9bc8/go.mod h1:Qcp2HIAYhR7mNUVSIxZww3Guk4it82ghYcEXIAk+QT0= +github.com/gorilla/context v1.1.1 h1:AWwleXJkX/nhcU9bZSnZoi3h/qGYqQAGhq6zZe/aQW8= github.com/gostaticanalysis/analysisutil v0.0.0-20190318220348-4088753ea4d3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= github.com/gostaticanalysis/analysisutil v0.0.3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= github.com/gostaticanalysis/analysisutil v0.1.0/go.mod h1:dMhHRU9KTiDcuLGdy87/2gTR8WruwYZrKdRq9m1O6uw= +github.com/gostaticanalysis/analysisutil v0.7.1 h1:ZMCjoue3DtDWQ5WyU16YbjbQEQ3VuzwxALrpYd+HeKk= github.com/gostaticanalysis/analysisutil v0.7.1/go.mod h1:v21E3hY37WKMGSnbsw2S/ojApNWb6C1//mXO48CXbVc= github.com/gostaticanalysis/comment v1.3.0/go.mod h1:xMicKDx7XRXYdVwY9f9wQpDJVnqWxw9wCauCMKp+IBI= github.com/gostaticanalysis/comment v1.4.1/go.mod h1:ih6ZxzTHLdadaiSnF5WY3dxUoXfXAlTaRzuaNDlSado= +github.com/gostaticanalysis/comment v1.4.2 h1:hlnx5+S2fY9Zo9ePo4AhgYsYHbM2+eAv8m/s1JiCd6Q= github.com/gostaticanalysis/comment v1.4.2/go.mod h1:KLUTGDv6HOCotCH8h2erHKmpci2ZoR8VPu34YA2uzdM= +github.com/gostaticanalysis/forcetypeassert v0.1.0 h1:6eUflI3DiGusXGK6X7cCcIgVCpZ2CiZ1Q7jl6ZxNV70= github.com/gostaticanalysis/forcetypeassert v0.1.0/go.mod h1:qZEedyP/sY1lTGV1uJ3VhWZ2mqag3IkWsDHVbplHXak= +github.com/gostaticanalysis/nilerr v0.1.1 h1:ThE+hJP0fEp4zWLkWHWcRyI2Od0p7DlgYG3Uqrmrcpk= github.com/gostaticanalysis/nilerr v0.1.1/go.mod h1:wZYb6YI5YAxxq0i1+VJbY0s2YONW0HU0GPE3+5PWN4A= github.com/gostaticanalysis/testutil v0.3.1-0.20210208050101-bfb5c8eec0e4/go.mod h1:D+FIZ+7OahH3ePw/izIEeH5I06eKs1IKI4Xr64/Am3M= +github.com/gostaticanalysis/testutil v0.4.0 h1:nhdCmubdmDF6VEatUNjgUZBJKWRqugoISdUv3PPQgHY= +github.com/gotestyourself/gotestyourself v2.2.0+incompatible h1:AQwinXlbQR2HvPjQZOmDhRqsv5mZf+Jb1RnSLxcqZcI= github.com/gotestyourself/gotestyourself v2.2.0+incompatible/go.mod h1:zZKM6oeNM8k+FRljX1mnzVYeS8wiGgQyvST1/GafPbY= +github.com/graph-gophers/graphql-go v1.3.0 h1:Eb9x/q6MFpCLz7jBCiP/WTxjSDrYLR1QY41SORZyNJ0= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho= github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3 h1:lLT7ZLSzGLI08vc9cpd+tYmNWjdKDqyr/2L+f6U12Fk= +github.com/hanwen/go-fuse/v2 v2.1.1-0.20220112183258-f57e95bda82d h1:ibbzF2InxMOS+lLCphY9PHNKPURDUBNKaG6ErSq8gJQ= +github.com/hashicorp/consul/api v1.18.0 h1:R7PPNzTCeN6VuQNDwwhZWJvzCtGSrNpJqfb22h3yH9g= github.com/hashicorp/consul/api v1.18.0/go.mod h1:owRRGJ9M5xReDC5nfT8FTJrNAPbT4NM6p/k+d03q2v4= +github.com/hashicorp/consul/sdk v0.13.0 h1:lce3nFlpv8humJL8rNrrGHYSKc3q+Kxfeg3Ii1m6ZWU= github.com/hashicorp/consul/sdk v0.13.0/go.mod h1:0hs/l5fOVhJy/VdcoaNqUSi2AUs95eF5WKtv+EYIQqE= +github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-bexpr v0.1.10 h1:9kuI5PFotCboP3dkDYFr/wi0gg0QVbSNz5oFRpxn4uE= +github.com/hashicorp/go-getter v1.7.0/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744= github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-hclog v1.2.0 h1:La19f8d7WIlm4ogzNHB0JGqs5AUDAZ2UfCY4sJXcJdM= github.com/hashicorp/go-hclog v1.2.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-msgpack v0.5.3 h1:zKjpN5BK/P5lMYrLmBHdBULWbJ0XpYR+7NGzqkZzoD4= github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= +github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= +github.com/hashicorp/go-retryablehttp v0.7.0 h1:eu1EI/mbirUgP5C8hVsTNaGZreBDlYiwC1FZWkvQPQ4= github.com/hashicorp/go-retryablehttp v0.7.0/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= +github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc= github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= +github.com/hashicorp/go-sockaddr v1.0.2 h1:ztczhD1jLxIRjVejw8gFomI1BQZOe2WoVOu0SyteCQc= github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A= +github.com/hashicorp/go-syslog v1.0.0 h1:KaodqZuhUoZereWVIYmpUgZysurB1kBLX2j0MwMrUAE= +github.com/hashicorp/go-uuid v1.0.2 h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2IGE= github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.2.1/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go.net v0.0.1 h1:sNCoNyDEvN1xa+X0baata4RdcpKwcMS6DH+xwfqPgjw= github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/logutils v1.0.0 h1:dLEQVugN8vlakKOUE3ihGLTZJRB4j+M2cdTm/ORI65Y= +github.com/hashicorp/mdns v1.0.4 h1:sY0CMhFmjIPDMlTB+HfymFHCaYLhgifZ0QhjaYKD/UQ= github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc= +github.com/hashicorp/memberlist v0.5.0 h1:EtYPN8DpAURiapus508I4n9CzHs2W+8NZGbmmR/prTM= github.com/hashicorp/memberlist v0.5.0/go.mod h1:yvyXLpo0QaGE59Y7hDTsTzDD25JYBZ4mHgHUZ8lrOI0= +github.com/hashicorp/serf v0.10.1 h1:Z1H2J60yRKvfDYAOZLd2MU0ND4AH/WDz7xYHDWQsIPY= github.com/hashicorp/serf v0.10.1/go.mod h1:yL2t6BqATOLGc5HF7qbFkTfXoPIY0WZdWHfEvMqbG+4= +github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= +github.com/holiman/bloomfilter/v2 v2.0.3 h1:73e0e/V0tCydx14a0SCYS/EWCxgwLZ18CZcZKVu0fao= +github.com/holiman/uint256 v1.2.0 h1:gpSYcPLWGv4sG43I2mVLiDZCNDh/EpGjSk8tmtxitHM= +github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= +github.com/hudl/fargo v1.4.0 h1:ZDDILMbB37UlAVLlWcJ2Iz1XuahZZTDZfdCKeclfq2s= +github.com/huin/goupnp v1.0.3 h1:N8No57ls+MnjlB+JPiCVSOyy/ot7MJTqlo7rn+NYSqQ= +github.com/huin/goupnp v1.0.3/go.mod h1:ZxNlw5WqJj6wSsRK5+YfflQGXYfccj5VgQsMNixHM7Y= +github.com/iancoleman/strcase v0.2.0 h1:05I4QRnGpI0m37iZQRuskXh+w77mr6Z41lwQzuHLwW0= github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= +github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639 h1:mV02weKRL81bEnm8A0HT1/CAelMQDBuQIfLw8n+d6xI= +github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk= github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= +github.com/influxdata/influxdb v1.8.3 h1:WEypI1BQFTT4teLM+1qkEcvUi0dAvopAI/ir0vAiBg8= +github.com/influxdata/influxdb-client-go/v2 v2.4.0 h1:HGBfZYStlx3Kqvsv1h2pJixbCl/jhnFtxpKFAv9Tu5k= +github.com/influxdata/influxdb1-client v0.0.0-20200827194710-b269163b24ab h1:HqW4xhhynfjrtEiiSGcQUd6vrK23iMam1FO8rI7mwig= +github.com/influxdata/line-protocol v0.0.0-20210311194329-9aa0e372d097 h1:vilfsDSy7TDxedi9gyBkMvAirat/oRcL0lFdJBf6tdM= +github.com/informalsystems/tm-load-test v1.3.0 h1:FGjKy7vBw6mXNakt+wmNWKggQZRsKkEYpaFk/zR64VA= github.com/informalsystems/tm-load-test v1.3.0/go.mod h1:OQ5AQ9TbT5hKWBNIwsMjn6Bf4O0U4b1kRc+0qZlQJKw= +github.com/intel/goresctrl v0.2.0 h1:JyZjdMQu9Kl/wLXe9xA6s1X+tF6BWsQPFGJMEeCfWzE= +github.com/ipfs/go-datastore v0.5.1 h1:WkRhLuISI+XPD0uk3OskB0fYFSyqK8Ob5ZYew9Qa1nQ= +github.com/ipfs/go-ds-badger v0.3.0 h1:xREL3V0EH9S219kFFueOYJJTcjgNSZ2HY1iSvN7U1Ro= +github.com/ipfs/go-ds-leveldb v0.5.0 h1:s++MEBbD3ZKc9/8/njrn4flZLnCuY9I79v94gBUNumo= +github.com/ipfs/go-log/v2 v2.5.1 h1:1XdUzF7048prq4aBjDQQ4SL5RxftpRGdXhNRwKSAlcY= +github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= +github.com/jbenet/go-temp-err-catcher v0.1.0 h1:zpb3ZH6wIE8Shj2sKS+khgRvf7T7RABoLk/+KKHggpk= +github.com/jbenet/goprocess v0.1.4 h1:DRGOFReOMqqDNXwW70QkacFW0YN9QnwLV0Vqk+3oU0o= +github.com/jdxcode/netrc v0.0.0-20210204082910-926c7f70242a h1:d4+I1YEKVmWZrgkt6jpXBnLgV2ZjO0YxEtLDdfIZfH4= github.com/jdxcode/netrc v0.0.0-20210204082910-926c7f70242a/go.mod h1:Zi/ZFkEqFHTm7qkjyNJjaWH4LQA9LQhGJyF0lTYGpxw= +github.com/jedisct1/go-minisign v0.0.0-20190909160543-45766022959e h1:UvSe12bq+Uj2hWd8aOlwPmoZ+CITRFrdit+sDGfAg8U= 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/jessevdk/go-flags v1.5.0 h1:1jKYvbxEjfUl0fmqTCOfonvskHHXMjBySTLW4y9LFvc= github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= +github.com/jgautheron/goconst v1.5.1 h1:HxVbL1MhydKs8R8n/HE5NPvzfaYmQJA3o879lE4+WcM= github.com/jgautheron/goconst v1.5.1/go.mod h1:aAosetZ5zaeC/2EfMeRswtxUFBpe2Hr7HzkgX4fanO4= github.com/jhump/gopoet v0.0.0-20190322174617-17282ff210b3/go.mod h1:me9yfT6IJSlOL3FCfrg+L6yzUEZ+5jW6WHt4Sk+UPUI= +github.com/jhump/gopoet v0.1.0 h1:gYjOPnzHd2nzB37xYQZxj4EIQNpBrBskRqQQ3q4ZgSg= github.com/jhump/gopoet v0.1.0/go.mod h1:me9yfT6IJSlOL3FCfrg+L6yzUEZ+5jW6WHt4Sk+UPUI= +github.com/jhump/goprotoc v0.5.0 h1:Y1UgUX+txUznfqcGdDef8ZOVlyQvnV0pKWZH08RmZuo= github.com/jhump/goprotoc v0.5.0/go.mod h1:VrbvcYrQOrTi3i0Vf+m+oqQWk9l72mjkJCYo7UvLHRQ= +github.com/jhump/protocompile v0.0.0-20220216033700-d705409f108f h1:BNuUg9k2EiJmlMwjoef3e8vZLHplbVw6DrjGFjLL+Yo= github.com/jhump/protocompile v0.0.0-20220216033700-d705409f108f/go.mod h1:qr2b5kx4HbFS7/g4uYO5qv9ei8303JMsC7ESbYiqr2Q= github.com/jhump/protoreflect v1.11.0/go.mod h1:U7aMIjN0NWq9swDP7xDdoMfRHb35uiuTd3Z9nFXJf5E= github.com/jhump/protoreflect v1.12.1-0.20220721211354-060cc04fc18b/go.mod h1:JytZfP5d0r8pVNLZvai7U/MCuTWITgrI4tTg7puQFKI= github.com/jhump/protoreflect v1.15.1/go.mod h1:jD/2GMKKE6OqX8qTjhADU1e6DShO+gavG9e0Q693nKo= +github.com/jingyugao/rowserrcheck v1.1.1 h1:zibz55j/MJtLsjP1OF4bSdgXxwL1b+Vn7Tjzq7gFzUs= github.com/jingyugao/rowserrcheck v1.1.1/go.mod h1:4yvlZSDb3IyDTUZJUmpZfm2Hwok+Dtp+nu2qOq+er9c= +github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af h1:KA9BjwUk7KlCh6S9EAGWBt1oExIUv9WyNCiRz5amv48= github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af/go.mod h1:HEWGJkRDzjJY2sqdDwxccsGicWEf9BQOZsq2tV+xzM0= +github.com/jmoiron/sqlx v1.2.0 h1:41Ip0zITnmWNR/vHV+S4m+VoUivnWY5E4OJfLZjCJMA= github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= +github.com/jonboulle/clockwork v0.1.0 h1:VKV+ZcuP6l3yW9doeqz6ziZGgcynBVQO+obU0+0hcPo= +github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA= +github.com/jrick/logrotate v1.0.0 h1:lQ1bL/n9mBNeIXoTUoYRlK4dHuNJVofX9oWqBtPnSzI= github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/jstemmer/go-junit-report v0.9.1 h1:6QPYqodiu3GuPL+7mfx+NwDdp2eTkp9IfEUpgAwUN0o= +github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= +github.com/julienschmidt/httprouter v1.3.0 h1:U0609e9tgbseu3rBINet9P48AI/D3oJs4dN7jwJOQ1U= +github.com/julz/importas v0.1.0 h1:F78HnrsjY3cR7j0etXy5+TU1Zuy7Xt08X/1aJnH5xXY= github.com/julz/importas v0.1.0/go.mod h1:oSFU2R4XK/P7kNBrnL/FEQlDGN1/6WoxXEjSSXO0DV0= +github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5 h1:PJr+ZMXIecYc1Ey2zucXdR73SMBtgjPgwa31099IMv0= +github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= +github.com/karalabe/usb v0.0.2 h1:M6QQBNxF+CQ8OFvxrT90BA0qBOXymndZnk5q235mFc4= +github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= +github.com/kisielk/errcheck v1.6.2 h1:uGQ9xI8/pgc9iOoCe7kWQgRE6SBTrCGmTSf0LrEtY7c= github.com/kisielk/errcheck v1.6.2/go.mod h1:nXw/i/MfnvRHqXa7XXmQMUB0oNFGuBrNI8d8NLy0LPw= +github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg= +github.com/kkHAIKE/contextcheck v1.1.3 h1:l4pNvrb8JSwRd51ojtcOxOeHJzHek+MtOyXbaR0uvmw= github.com/kkHAIKE/contextcheck v1.1.3/go.mod h1:PG/cwd6c0705/LM0KTr1acO2gORUxkSVWyLJOFW5qoo= +github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23 h1:FOOIBWrEkLgmlgGfMuZT83xIwfPDxEI2OHu6xUmJMFE= github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= +github.com/klauspost/asmfmt v1.3.2 h1:4Ri7ox3EwapiOjCki+hw14RyKk201CN4rzyCJRFLpK4= github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5 h1:2U0HzY8BJ8hVwDKIzp7y4voR9CX/nvcfymLmg2UiOio= +github.com/klauspost/pgzip v1.2.5 h1:qnWYvvKqedOF2ulHpMG72XQol4ILEJ8k2wwRl/Km8oE= github.com/klauspost/pgzip v1.2.5/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= +github.com/konsorten/go-windows-terminal-sequences v1.0.3 h1:CE8S1cTafDpPvMhIxNJKvHsGVBgn1xWYf1NbHQhywc8= +github.com/koron/go-ssdp v0.0.3 h1:JivLMY45N76b4p/vsWGOKewBQu6uf39y8l+AQ7sDKx8= +github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515 h1:T+h1c/A9Gawja4Y9mFVWj2vyii2bbUNDw3kt9VxK2EY= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/pty v1.1.1 h1:VkoXIwSboBpnk99O/KFauAEILuNHv5DVFKZMBN/gUgw= +github.com/kulti/thelper v0.6.3 h1:ElhKf+AlItIu+xGnI990no4cE2+XaSu1ULymV2Yulxs= github.com/kulti/thelper v0.6.3/go.mod h1:DsqKShOvP40epevkFrvIwkCMNYxMeTNjdWL4dqWHZ6I= +github.com/kunwardeep/paralleltest v1.0.6 h1:FCKYMF1OF2+RveWlABsdnmsvJrei5aoyZoaGS+Ugg8g= github.com/kunwardeep/paralleltest v1.0.6/go.mod h1:Y0Y0XISdZM5IKm3TREQMZ6iteqn1YuwCsJO/0kL9Zes= +github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= +github.com/kyoh86/exportloopref v0.1.8 h1:5Ry/at+eFdkX9Vsdw3qU4YkvGtzuVfzT4X7S77LoN/M= github.com/kyoh86/exportloopref v0.1.8/go.mod h1:1tUcJeiioIs7VWe5gcOObrux3lb66+sBqGZrRkMwPgg= +github.com/ldez/gomoddirectives v0.2.3 h1:y7MBaisZVDYmKvt9/l1mjNCiSA1BVn34U0ObUcJwlhA= github.com/ldez/gomoddirectives v0.2.3/go.mod h1:cpgBogWITnCfRq2qGoDkKMEVSaarhdBr6g8G04uz6d0= +github.com/ldez/tagliatelle v0.3.1 h1:3BqVVlReVUZwafJUwQ+oxbx2BEX2vUG4Yu/NOfMiKiM= github.com/ldez/tagliatelle v0.3.1/go.mod h1:8s6WJQwEYHbKZDsp/LjArytKOG8qaMrKQQ3mFukHs88= +github.com/leonklingele/grouper v1.1.0 h1:tC2y/ygPbMFSBOs3DcyaEMKnnwH7eYKzohOtRrf0SAg= github.com/leonklingele/grouper v1.1.0/go.mod h1:uk3I3uDfi9B6PeUjsCKi6ndcf63Uy7snXgR4yDYQVDY= +github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/libp2p/go-cidranger v1.1.0 h1:ewPN8EZ0dd1LSnrtuwd4709PXVcITVeuwbag38yPW7c= +github.com/libp2p/go-flow-metrics v0.1.0 h1:0iPhMI8PskQwzh57jB9WxIuIOQ0r+15PChFGkx3Q3WM= +github.com/libp2p/go-libp2p-asn-util v0.2.0 h1:rg3+Os8jbnO5DxkC7K/Utdi+DkY3q/d1/1q+8WeNAsw= +github.com/libp2p/go-libp2p-testing v0.11.0 h1:+R7FRl/U3Y00neyBSM2qgDzqz3HkWH24U9nMlascHL4= +github.com/libp2p/go-mplex v0.7.0 h1:BDhFZdlk5tbr0oyFq/xv/NPGfjbnrsDam1EvutpBDbY= +github.com/libp2p/go-msgio v0.2.0 h1:W6shmB+FeynDrUVl2dgFQvzfBZcXiyqY4VmpQLu9FqU= +github.com/libp2p/go-nat v0.1.0 h1:MfVsH6DLcpa04Xr+p8hmVRG4juse0s3J8HyNWYHffXg= +github.com/libp2p/go-netroute v0.2.0 h1:0FpsbsvuSnAhXFnCY0VLFbJOzaK0VnP0r1QT/o4nWRE= +github.com/libp2p/go-reuseport v0.2.0 h1:18PRvIMlpY6ZK85nIAicSBuXXvrYoSw3dsBAR7zc560= +github.com/libp2p/go-yamux/v3 v3.1.2 h1:lNEy28MBk1HavUAlzKgShp+F6mn/ea1nDYWftZhFW9Q= +github.com/libp2p/zeroconf/v2 v2.2.0 h1:Cup06Jv6u81HLhIj1KasuNM/RHHrJ8T7wOTS4+Tv53Q= +github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743 h1:143Bb8f8DuGWck/xpNUOckBVYfFbBTnLevfRZ1aVVqo= +github.com/lightstep/lightstep-tracer-go v0.18.1 h1:vi1F1IQ8N7hNWytK9DpJsUfQhGuNSc19z330K6vl4zk= +github.com/linxGnu/grocksdb v1.7.10 h1:dz7RY7GnFUA+GJO6jodyxgkUeGMEkPp3ikt9hAcNGEw= +github.com/lucas-clemente/quic-go v0.28.1 h1:Uo0lvVxWg5la9gflIF9lwa39ONq85Xq2D91YNEIslzU= +github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= +github.com/lufeee/execinquery v1.2.1 h1:hf0Ems4SHcUGBxpGN7Jz78z1ppVkP/837ZlETPCEtOM= github.com/lufeee/execinquery v1.2.1/go.mod h1:EC7DrEKView09ocscGHC+apXMIaorh4xqSxS/dy8SbM= +github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4= github.com/lyft/protoc-gen-star v0.6.0/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= +github.com/lyft/protoc-gen-star/v2 v2.0.1 h1:keaAo8hRuAT0O3DfJ/wM3rufbAjGeJ1lAtWZHDjKGB0= +github.com/lyft/protoc-gen-validate v0.0.13 h1:KNt/RhmQTOLr7Aj8PsJ7mTronaFyx80mRTT9qF261dA= +github.com/magefile/mage v1.14.0 h1:6QDX3g6z1YvJ4olPhT1wksUcSa/V0a1B+pJb73fBjyo= github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= +github.com/maratori/testableexamples v1.0.0 h1:dU5alXRrD8WKSjOUnmJZuzdxWOEQ57+7s93SLMxb2vI= github.com/maratori/testableexamples v1.0.0/go.mod h1:4rhjL1n20TUTT4vdh3RDqSizKLyXp7K2u6HgraZCGzE= +github.com/maratori/testpackage v1.1.0 h1:GJY4wlzQhuBusMF1oahQCBtUV/AQ/k69IZ68vxaac2Q= github.com/maratori/testpackage v1.1.0/go.mod h1:PeAhzU8qkCwdGEMTEupsHJNlQu2gZopMC6RjbhmHeDc= +github.com/marten-seemann/qtls-go1-16 v0.1.5 h1:o9JrYPPco/Nukd/HpOHMHZoBDXQqoNtUCmny98/1uqQ= +github.com/marten-seemann/qtls-go1-17 v0.1.2 h1:JADBlm0LYiVbuSySCHeY863dNkcpMmDR7s0bLKJeYlQ= +github.com/marten-seemann/qtls-go1-18 v0.1.2 h1:JH6jmzbduz0ITVQ7ShevK10Av5+jBEKAHMntXmIV7kM= +github.com/marten-seemann/qtls-go1-19 v0.1.0 h1:rLFKD/9mp/uq1SYGYuVZhm83wkmU95pK5df3GufyYYU= +github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd h1:br0buuQ854V8u83wA0rVZ8ttrq5CpaPZdvrK0LP2lOk= +github.com/matoous/godox v0.0.0-20210227103229-6504466cf951 h1:pWxk9e//NbPwfxat7RXkts09K+dEBJWakUWwICVqYbA= github.com/matoous/godox v0.0.0-20210227103229-6504466cf951/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA= +github.com/matryer/is v1.4.0 h1:sosSmIWwkYITGrxZ25ULNDeKiMNzFSr4V/eqBQP0PeE= github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= 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.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= -github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU= github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= +github.com/mattn/go-sqlite3 v1.14.16/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/mbilski/exhaustivestruct v1.2.0 h1:wCBmUnSYufAHO6J4AVWY6ff+oxWxsVFrwgOdMUQePUo= github.com/mbilski/exhaustivestruct v1.2.0/go.mod h1:OeTBVxQWoEmB2J2JCHmXWPJ0aksxSUOUy+nvtVEfzXc= +github.com/mgechev/dots v0.0.0-20210922191527-e955255bf517 h1:zpIH83+oKzcpryru8ceC6BxnoG8TBrhgAvRg8obzup0= +github.com/mgechev/revive v1.2.4 h1:+2Hd/S8oO2H0Ikq2+egtNwQsVhAeELHjxjIUFX5ajLI= github.com/mgechev/revive v1.2.4/go.mod h1:iAWlQishqCuj4yhV24FTnKSXGpbAA+0SckXB8GQMX/Q= github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= +github.com/miekg/dns v1.1.50 h1:DQUfb9uc6smULcREF09Uc+/Gd46YWqJd5DbpPE9xkcA= +github.com/miekg/pkcs11 v1.1.1 h1:Ugu9pdy6vAYku5DEpVWVFPYnzV+bxB+iRdbuFSu7TvU= +github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b h1:z78hV3sbSMAUoyUMM0I83AUIT6Hu17AWfgjzIbtrYFc= +github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc h1:PTfri+PuQmWDqERdnNMiD9ZejrlswWrCpBEZgWOiTrc= +github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8 h1:AMFGa4R4MiIpspGNG7Z948v4n35fFGB3RR3G/ry4FWs= +github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= +github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3 h1:+n/aFZefKZp7spd8DFdX7uMikMLXX4oubIzJF4kv/wI= +github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible h1:aKW/4cBs+yK6gpqU3K/oIwk9Q/XICqd3zOX/UFuvqmk= +github.com/mitchellh/cli v1.1.0 h1:tEElEatulEHDeedTxwckzyYMA5c86fbmNIUL1hBIiTg= github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= +github.com/mitchellh/go-ps v1.0.0 h1:i6ampVEEF4wQFF+bkYfwYgY+F/uYJDktmvLPf7qIgjc= +github.com/mitchellh/go-wordwrap v1.0.0 h1:6GlHJ/LTGMrIJbwgdqdl2eEH8o+Exx/0m8ir9Gns0u4= github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= +github.com/mitchellh/gox v0.4.0 h1:lfGJxY7ToLJQjHHwi0EX6uYBdK78egf954SQl13PQJc= +github.com/mitchellh/hashstructure/v2 v2.0.2 h1:vGKWl0YJqUNxE8d+h8f6NJLcCJrgbhC4NcD46KavDd4= +github.com/mitchellh/iochan v1.0.0 h1:C+X3KsSTLFVBr/tK1eYN/vs4rJcvsiLU338UhYPJWeY= +github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/pointerstructure v1.2.0 h1:O+i9nHnXS3l/9Wu7r4NrEdwA2VFTicjUEN1uBnDo34A= +github.com/moby/buildkit v0.10.4 h1:FvC+buO8isGpUFZ1abdSLdGHZVqg9sqI4BbFL8tlzP4= github.com/moby/buildkit v0.10.4/go.mod h1:Yajz9vt1Zw5q9Pp4pdb3TCSUXJBIroIQGQ3TTs/sLug= +github.com/moby/locker v1.0.1 h1:fOXqR41zeveg4fFODix+1Ch4mj/gT0NE1XJbp/epuBg= +github.com/moby/spdystream v0.2.0 h1:cjW1zVyyoiM0T7b6UoySUFqzXMoqRckQtXwGPiBhOM8= +github.com/moby/sys/mount v0.3.0 h1:bXZYMmq7DBQPwHRxH/MG+u9+XF90ZOwoXpHTOznMGp0= github.com/moby/sys/mountinfo v0.5.0/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU= +github.com/moby/sys/mountinfo v0.6.0 h1:gUDhXQx58YNrpHlK4nSL+7y2pxFZkUcXqzFDKWdC0Oo= +github.com/moby/sys/signal v0.6.0 h1:aDpY94H8VlhTGa9sNYUFCFsMZIUh5wm0B6XkIoJj/iY= +github.com/moby/sys/symlink v0.2.0 h1:tk1rOM+Ljp0nFmfOIBtlV3rTDlWOwFRhjEeAhZB0nZc= github.com/moby/term v0.0.0-20220808134915-39b0c02b01ae/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw= +github.com/moricho/tparallel v0.2.1 h1:95FytivzT6rYzdJLdtfn6m1bfFJylOJK41+lgv/EHf4= github.com/moricho/tparallel v0.2.1/go.mod h1:fXEIZxG2vdfl0ZF8b42f5a78EhjjD5mX8qUplsoSU4k= github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= +github.com/mozilla/tls-observatory v0.0.0-20210609171429-7bc42856d2e5 h1:0KqC6/sLy7fDpBdybhVkkv4Yz+PmB7c9Dz9z3dLW804= +github.com/mrunalp/fileutils v0.5.0 h1:NKzVxiH7eSk+OQ4M+ZYW1K6h27RUV3MI6NUTsHhU6Z4= github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ= +github.com/multiformats/go-multiaddr-dns v0.3.1 h1:QgQgR+LQVt3NPTjbrLLpsaT2ufAA2y0Mkk+QRVJbW3A= +github.com/multiformats/go-multiaddr-fmt v0.1.0 h1:WLEFClPycPkp4fnIzoFoV9FVd49/eQsuaL3/CWe167E= +github.com/multiformats/go-multistream v0.3.3 h1:d5PZpjwRgVlbwfdTDjife7XszfZd8KYWfROYFlGcR8o= +github.com/mwitkow/grpc-proxy v0.0.0-20181017164139-0f1106ef9c76 h1:0xuRacu/Zr+jX+KyLLPPktbwXqyOvnOPUQmMLzX1jxU= +github.com/nakabonne/nestif v0.3.1 h1:wm28nZjhQY5HyYPx+weN3Q65k6ilSBxDb8v5S81B81U= github.com/nakabonne/nestif v0.3.1/go.mod h1:9EtoZochLn5iUprVDmDjqGKPofoUEBL8U4Ngq6aY7OE= +github.com/naoina/go-stringutil v0.1.0 h1:rCUeRUHjBjGTSHl0VC00jUPLz8/F9dDzYI70Hzifhks= +github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416 h1:shk/vn9oCoOTmwcouEdwIeOtOGA/ELRUw/GwvxwfT+0= +github.com/nats-io/jwt v0.3.2 h1:+RB5hMpXUUA2dfxuhBTEkMOrYmM+gKIZYS1KjSostMI= +github.com/nats-io/jwt/v2 v2.0.3 h1:i/O6cmIsjpcQyWDYNcq2JyZ3/VTF8SJ4JWluI5OhpvI= +github.com/nats-io/nats-server/v2 v2.5.0 h1:wsnVaaXH9VRSg+A2MVg5Q727/CqxnmPLGFQ3YZYKTQg= +github.com/nats-io/nats.go v1.12.1 h1:+0ndxwUPz3CmQ2vjbXdkC1fo3FdiOQDim4gl3Mge8Qo= +github.com/nats-io/nkeys v0.3.0 h1:cgM5tL53EvYRU+2YLXIK0G2mJtK12Ft9oeooSZMA2G8= +github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw= +github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354 h1:4kuARK6Y6FxaNu/BnU2OAaLF86eTVhP2hjTB6iMvItA= github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354/go.mod h1:KSVJerMDfblTH7p5MZaTt+8zaT2iEk3AkVb9PQdZuE8= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= +github.com/nishanths/exhaustive v0.8.3 h1:pw5O09vwg8ZaditDp/nQRqVnrMczSJDxRDJMowvhsrM= github.com/nishanths/exhaustive v0.8.3/go.mod h1:qj+zJJUgJ76tR92+25+03oYUhzF4R7/2Wk7fGTfCHmg= +github.com/nishanths/predeclared v0.2.2 h1:V2EPdZPliZymNAn79T8RkNApBjMmVKh5XRpLm/w98Vk= github.com/nishanths/predeclared v0.2.2/go.mod h1:RROzoN6TnGQupbC+lqggsOlcgysk3LMK/HI84Mp280c= +github.com/oklog/oklog v0.3.2 h1:wVfs8F+in6nTBMkA7CbRw+zZMIB7nNM825cM1wuzoTk= +github.com/oklog/run v1.0.0 h1:Ru7dDtJNOyC66gQ5dQmaCa0qIsAUFY3sFpK1Xk8igrw= +github.com/oklog/ulid/v2 v2.1.0 h1:+9lhoxAP56we25tyYETBBY1YLA2SaoLvUFgrP2miPJU= +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/v2 v2.1.4 h1:GNapqRSid3zijZ9H77KrgVG4/8KqiyRsxcSxe+7ApXY= github.com/onsi/ginkgo/v2 v2.1.4/go.mod h1:um6tUpWM/cxCK3/FK8BXqEiUMUwRgSM4JXG47RKZmLU= github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.20.0/go.mod h1:DtrZpjmvpn2mPm4YWQa0/ALMDj9v4YxLgojwPeREyVo= +github.com/op/go-logging v0.0.0-20160315200505-970db520ece7 h1:lDH9UUVJtmYCjyT0CI4q8xvlXPxeZ0gYCVvWbmPlp88= github.com/opencontainers/runc v1.1.3/go.mod h1:1J5XiS+vdZ3wCyZybsuxXZWGrgSr8fFJHLXuG2PsnNg= +github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417 h1:3snG66yBm59tKhhSPQrQ/0bCrv1LQbKt40LnUPiUxdc= github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opencontainers/selinux v1.10.0/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI= +github.com/opencontainers/selinux v1.10.1 h1:09LIPVRP3uuZGQvgR+SgMSNBd1Eb3vlRbGqQpoHsF8w= +github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492 h1:lM6RxxfUMrYL/f8bWEUqdXrANWtrL7Nndbm9iFN0DlU= +github.com/opentracing/basictracer-go v1.0.0 h1:YyUAhaEfjoWXclZVJ9sGoNct7j4TVk7lZWlQw5UXuoo= +github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= +github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= +github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5 h1:ZCnq+JUrvXcDVhX/xRolRBZifmabN1HcS1wrPSvxhrU= +github.com/openzipkin/zipkin-go v0.2.5 h1:UwtQQx2pyPIgWYHRg+epgdx1/HnBQTgN3/oIYEJTQzU= github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= +github.com/ory/dockertest/v3 v3.9.1 h1:v4dkG+dlu76goxMiTT2j8zV7s4oPPEppKT8K8p2f1kY= +github.com/otiai10/copy v1.2.0 h1:HvG945u96iNadPoG2/Ja2+AUJeW5YuFQMixq9yirC+k= github.com/otiai10/copy v1.2.0/go.mod h1:rrF5dJ5F0t/EWSYODDu4j9/vEeYHMkc8jt0zJChqQWw= github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= +github.com/otiai10/curr v1.0.0 h1:TJIWdbX0B+kpNagQrjgq8bCMrbhiuX73M2XwgtDMoOI= github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs= github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo= +github.com/otiai10/mint v1.3.1 h1:BCmzIS3n71sGfHB5NMNDB3lHYPz8fWSkCAErHed//qc= github.com/otiai10/mint v1.3.1/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= +github.com/pact-foundation/pact-go v1.0.4 h1:OYkFijGHoZAYbOIb1LWXrwKQbMMRUv1oQ89blD2Mh2Q= +github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 h1:onHthvaw9LFnH4t2DcNVpwGmV9E1BkGknEliJkfwQj0= +github.com/pborman/uuid v1.2.0 h1:J7Q5mO4ysT1dv8hyrUGHb9+ooztCXu1D8MY8DZYsu3g= github.com/pelletier/go-toml/v2 v2.0.5/go.mod h1:OMHamSCAODeSsVrwwvcJOaoN0LIUIaFVNZzmWyNfXas= +github.com/pelletier/go-toml/v2 v2.0.6/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek= +github.com/performancecopilot/speed v3.0.0+incompatible h1:2WnRzIquHa5QxaJKShDkLM+sc0JPuwhXzK8OYOyt3Vg= +github.com/performancecopilot/speed/v4 v4.0.0 h1:VxEDCmdkfbQYDlcr/GC9YoN9PQ6p8ulk9xVsepYy9ZY= +github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7 h1:oYW+YCJ1pachXTQmzR3rNLYGGz4g/UgFcjb28p/viDM= +github.com/petermattis/goid v0.0.0-20221215004737-a150e88a970d/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= +github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d h1:CdDQnGF8Nq9ocOS/xlSptM1N3BbrA6/kmaep5ggwaIA= github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d/go.mod h1:3OzsM7FXDQlpCiw2j81fOmAwQLnZnLGXVKUzeKQXIAw= +github.com/pierrec/lz4 v2.0.5+incompatible h1:2xWsjqPFWcplujydGg4WmhC/6fZqK42wMM8aXeqhl0I= +github.com/pierrec/lz4/v4 v4.1.15 h1:MO0/ucJhngq7299dKLwIMtgTfbkoSPF6AoMYDd8Q4q0= +github.com/pjbgf/sha1cd v0.2.3 h1:uKQP/7QOzNtKYH7UTohZLcjF5/55EnTw0jO/Ru4jZwI= github.com/pjbgf/sha1cd v0.2.3/go.mod h1:HOK9QrgzdHpbc2Kzip0Q1yi3M2MFGPADtR6HjG65m5M= +github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU= github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e h1:aoZm08cpOy4WuID//EZDgcC4zIxODThtZNPirFr42+A= +github.com/pkg/profile v1.6.0 h1:hUDfIISABYI59DyeB3OTay/HxSRwTQ8rB/H83k6r5dM= github.com/pkg/profile v1.6.0/go.mod h1:qBsxPvzyUincmltOk6iyRVxHYg4adc0OFOv72ZdLa18= github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= +github.com/pkg/sftp v1.13.1 h1:I2qBYMChEhIjOgazfJmV3/mZM256btk6wkCDRmW7JYs= +github.com/pointlander/compress v1.1.1-0.20190518213731-ff44bd196cc3 h1:hUmXhbljNFtrH5hzV9kiRoddZ5nfPTq3K0Sb2hYYiqE= github.com/pointlander/compress v1.1.1-0.20190518213731-ff44bd196cc3/go.mod h1:q5NXNGzqj5uPnVuhGkZfmgHqNUhf15VLi6L9kW0VEc0= +github.com/pointlander/jetset v1.0.1-0.20190518214125-eee7eff80bd4 h1:RHHRCZeaNyBXdYPMjZNH8/XHDBH38TZzw8izrW7dmBE= github.com/pointlander/jetset v1.0.1-0.20190518214125-eee7eff80bd4/go.mod h1:RdR1j20Aj5pB6+fw6Y9Ur7lMHpegTEjY1vc19hEZL40= +github.com/pointlander/peg v1.0.1 h1:mgA/GQE8TeS9MdkU6Xn6iEzBmQUQCNuWD7rHCK6Mjs0= github.com/pointlander/peg v1.0.1/go.mod h1:5hsGDQR2oZI4QoWz0/Kdg3VSVEC31iJw/b7WjqCBGRI= +github.com/polyfloyd/go-errorlint v1.0.5 h1:AHB5JRCjlmelh9RrLxT9sgzpalIwwq4hqE8EkwIwKdY= github.com/polyfloyd/go-errorlint v1.0.5/go.mod h1:APVvOesVSAnne5SClsPxPdfvZTVDojXh1/G3qb5wjGI= +github.com/posener/complete v1.2.3 h1:NP0eAhjcjImqslEwo/1hq7gpajME0fTLTezBKDqfXqo= github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= +github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw= github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= +github.com/prometheus/common v0.40.0/go.mod h1:L65ZJPSmfn/UBWLQIHV7dBrKFidB/wPlF1y5TlSt9OE= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= +github.com/prometheus/tsdb v0.7.1 h1:YZcsG11NqnK4czYLrWd9mpEuAJIHVQLwdrleYfszMAA= github.com/quasilyte/go-ruleguard v0.3.1-0.20210203134552-1b5a410e1cc8/go.mod h1:KsAh3x0e7Fkpgs+Q9pNLS5XpFSvYCEVl5gP9Pp1xp30= +github.com/quasilyte/go-ruleguard v0.3.18 h1:sd+abO1PEI9fkYennwzHn9kl3nqP6M5vE7FiOzZ+5CE= github.com/quasilyte/go-ruleguard v0.3.18/go.mod h1:lOIzcYlgxrQ2sGJ735EHXmf/e9MJ516j16K/Ifcttvs= github.com/quasilyte/go-ruleguard/dsl v0.3.0/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= +github.com/quasilyte/go-ruleguard/dsl v0.3.21 h1:vNkC6fC6qMLzCOGbnIHOd5ixUGgTbp3Z4fGnUgULlDA= github.com/quasilyte/go-ruleguard/dsl v0.3.21/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= github.com/quasilyte/go-ruleguard/rules v0.0.0-20201231183845-9e62ed36efe1/go.mod h1:7JTjp89EGyU1d6XfBiXihJNG37wB2VRkd125Q1u7Plc= +github.com/quasilyte/go-ruleguard/rules v0.0.0-20211022131956-028d6511ab71 h1:CNooiryw5aisadVfzneSZPswRWvnVW8hF1bS/vo8ReI= github.com/quasilyte/go-ruleguard/rules v0.0.0-20211022131956-028d6511ab71/go.mod h1:4cgAphtvu7Ftv7vOT2ZOYhC6CvBxZixcasr8qIOTA50= +github.com/quasilyte/gogrep v0.0.0-20220828223005-86e4605de09f h1:6Gtn2i04RD0gVyYf2/IUMTIs+qYleBt4zxDqkLTcu4U= github.com/quasilyte/gogrep v0.0.0-20220828223005-86e4605de09f/go.mod h1:Cm9lpz9NZjEoL1tgZ2OgeUKPIxL1meE7eo60Z6Sk+Ng= +github.com/quasilyte/regex/syntax v0.0.0-20200407221936-30656e2c4a95 h1:L8QM9bvf68pVdQ3bCFZMDmnt9yqcMBro1pC7F+IPYMY= github.com/quasilyte/regex/syntax v0.0.0-20200407221936-30656e2c4a95/go.mod h1:rlzQ04UMyJXu/aOvhd8qT+hvDrFpiwqp8MRXDY9szc0= +github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567 h1:M8mH9eK4OUR4lu7Gd+PU1fV2/qnDNfzT635KRSObncs= github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567/go.mod h1:DWNGW8A4Y+GyBgPuaQJuWiy0XYftx4Xm/y5Jqk9I6VQ= +github.com/raulk/go-watchdog v1.3.0 h1:oUmdlHxdkXRJlwfG0O9omj8ukerm8MEQavSiDTEtBsk= +github.com/remyoudompheng/go-dbus v0.0.0-20121104212943-b7232d34b1d5 h1:CvqZS4QYHBRvx7AeFdimd16HCbLlYsvQMcKDACpJW/c= +github.com/remyoudompheng/go-liblzma v0.0.0-20190506200333-81bf2d431b96 h1:J8J/cgLDRuqXJnwIrRDBvtl+LLsdg7De74znW/BRRq4= +github.com/remyoudompheng/go-misc v0.0.0-20190427085024-2d6ac652a50e h1:eTWZyPUnHcuGRDiryS/l2I7FfKjbU3IBx3IjqHPxuKU= +github.com/rivo/tview v0.0.0-20220307222120-9994674d60a8 h1:xe+mmCnDN82KhC010l3NfYlA8ZbOuzbXAzSYBa6wbMc= github.com/rivo/tview v0.0.0-20220307222120-9994674d60a8/go.mod h1:WIfMkQNY+oq/mWwtsjOYHIZBuwthioY2srOmljJkTnk= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +github.com/rivo/uniseg v0.4.3 h1:utMvzDsuh3suAEnhH0RdHmoPbU648o6CvXxTx4SBMOw= github.com/rivo/uniseg v0.4.3/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/rjeczalik/notify v0.9.1 h1:CLCKso/QK1snAlnhNR/CNvNiFU2saUtjV0bx3EwNeCE= +github.com/rogpeppe/fastuuid v1.2.0 h1:Ppwyp6VYCF1nvBTXL3trRso7mXMlRrw9ooo375wvi2s= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rs/cors v1.8.2/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/rs/xid v1.3.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= -github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= +github.com/rs/xid v1.4.0 h1:qd7wPTDkN6KQx2VmMBLrpHkiyQwgFXRnkOLacUiaSNY= github.com/rs/zerolog v1.27.0/go.mod h1:7frBqO0oezxmnO7GF86FY++uy8I0Tk/If5ni1G9Qc0U= -github.com/rs/zerolog v1.29.1/go.mod h1:Le6ESbR7hc+DP6Lt1THiV8CQSdkkNrd3R0XbEgp3ZBU= +github.com/russross/blackfriday v1.6.0 h1:KqfZb0pUVN2lYqZUYRddxF4OR8ZMURnJIG5Y3VRLtww= +github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= +github.com/ryancurrah/gomodguard v1.2.4 h1:CpMSDKan0LtNGGhPrvupAoLeObRFjND8/tU1rEOtBp4= github.com/ryancurrah/gomodguard v1.2.4/go.mod h1:+Kem4VjWwvFpUJRJSwa16s1tBJe+vbv02+naTow2f6M= +github.com/ryanrolds/sqlclosecheck v0.3.0 h1:AZx+Bixh8zdUBxUA1NxbxVAS78vTPq4rCb8OUZI9xFw= github.com/ryanrolds/sqlclosecheck v0.3.0/go.mod h1:1gREqxyTGR3lVtpngyFo3hZAgk0KCtEdgEkHwDbigdA= +github.com/ryanuber/columnize v2.1.0+incompatible h1:j1Wcmh8OrK4Q7GXY+V7SVSY8nUWQxHW5TkBe7YUl+2s= github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/sagikazarmark/crypt v0.9.0 h1:fipzMFW34hFUEc4D7fsLQFtE7yElkpgyS2zruedRdZk= github.com/sagikazarmark/crypt v0.9.0/go.mod h1:RnH7sEhxfdnPm1z+XMgSLjWTEIjyK4z2dw6+4vHTMuo= +github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da h1:p3Vo3i64TCLY7gIfzeQaUJ+kppEO5WQG3cL8iE8tGHU= +github.com/sanposhiho/wastedassign/v2 v2.0.6 h1:+6/hQIHKNJAUixEj6EmOngGIisyeI+T3335lYTyxRoA= github.com/sanposhiho/wastedassign/v2 v2.0.6/go.mod h1:KyZ0MWTwxxBmfwn33zh3k1dmsbF2ud9pAAGfoLfjhtI= +github.com/sashamelentyev/interfacebloat v1.1.0 h1:xdRdJp0irL086OyW1H/RTZTr1h/tMEOsumirXcOJqAw= github.com/sashamelentyev/interfacebloat v1.1.0/go.mod h1:+Y9yU5YdTkrNvoX0xHc84dxiN1iBi9+G8zZIhPVoNjQ= +github.com/sashamelentyev/usestdlibvars v1.20.0 h1:K6CXjqqtSYSsuyRDDC7Sjn6vTMLiSJa4ZmDkiokoqtw= github.com/sashamelentyev/usestdlibvars v1.20.0/go.mod h1:0GaP+ecfZMXShS0A94CJn6aEuPRILv8h/VuWI9n1ygg= +github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I= +github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646 h1:RpforrEYXWkmGwJHIGnLZ3tTWStkjVVstwzNGqxX2Ds= github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg= +github.com/securego/gosec/v2 v2.13.1 h1:7mU32qn2dyC81MH9L2kefnQyRMUarfDER3iQyMHcjYM= github.com/securego/gosec/v2 v2.13.1/go.mod h1:EO1sImBMBWFjOTFzMWfTRrZW6M15gm60ljzrmy/wtHo= +github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/serialx/hashring v0.0.0-20190422032157-8b2912629002 h1:ka9QPuQg2u4LGipiZGsgkg3rJCo4iIUCy75FddM0GRQ= +github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c h1:W65qqJCIOVP4jpqPQ0YvHYKwcMEMVWIzWC5iNQQfBTU= github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c/go.mod h1:/PevMnwAxekIXwN8qQyfc5gl2NlkB3CQlkizAbOkeBs= +github.com/shirou/gopsutil/v3 v3.22.9 h1:yibtJhIVEMcdw+tCTbOPiF1VcsuDeTE4utJ8Dm4c5eA= +github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e h1:MZM7FHLqUHYI0Y/mQAt3d2aYa0SiNms/hFqC9qJYolM= github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= +github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041 h1:llrF3Fs4018ePo4+G/HV/uQUqEI1HMDjCeOf2V6puPc= github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= +github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/sivchari/containedctx v1.0.2 h1:0hLQKpgC53OVF1VT7CeoFHk9YKstur1XOgfYIc1yrHI= github.com/sivchari/containedctx v1.0.2/go.mod h1:PwZOeqm4/DLoJOqMSIJs3aKqXRX4YO+uXww087KZ7Bw= +github.com/sivchari/nosnakecase v1.7.0 h1:7QkpWIRMe8x25gckkFd2A5Pi6Ymo0qgr4JrhGt95do8= github.com/sivchari/nosnakecase v1.7.0/go.mod h1:CwDzrzPea40/GB6uynrNLiorAlgFRvRbFSgJx2Gs+QY= +github.com/sivchari/tenv v1.7.0 h1:d4laZMBK6jpe5PWepxlV9S+LC0yXqvYHiq8E6ceoVVE= github.com/sivchari/tenv v1.7.0/go.mod h1:64yStXKSOxDfX47NlhVwND4dHwfZDdbp2Lyl018Icvg= +github.com/skeema/knownhosts v1.1.0 h1:Wvr9V0MxhjRbl3f9nMnKnFfiWTJmtECJ9Njkea3ysW0= github.com/skeema/knownhosts v1.1.0/go.mod h1:sKFq3RD6/TKZkSWn8boUbDC7Qkgcv+8XXijpFO6roag= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= +github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= +github.com/soheilhy/cmux v0.1.4 h1:0HKaf1o97UwFjHH9o5XsHUOF+tqmdA7KEzXLpiyaw0E= +github.com/sonatard/noctx v0.0.1 h1:VC1Qhl6Oxx9vvWo3UDgrGXYCeKCe3Wbw7qAWL6FrmTY= github.com/sonatard/noctx v0.0.1/go.mod h1:9D2D/EoULe8Yy2joDHJj7bv3sZoq9AaSb8B4lqBjiZI= +github.com/sony/gobreaker v0.4.1 h1:oMnRNZXX5j85zso6xCPRNPtmAycat+WcoKbklScLDgQ= +github.com/sourcegraph/go-diff v0.6.1 h1:hmA1LzxW0n1c3Q4YbrFgg4P99GSnebYa3x8gr0HZqLQ= github.com/sourcegraph/go-diff v0.6.1/go.mod h1:iBszgVvyxdc8SFZ7gm69go2KDdt3ag071iBaWPF6cjs= github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= @@ -561,65 +1199,159 @@ github.com/spf13/afero v1.8.2/go.mod h1:CtAatgMJh6bJEIs48Ay/FOnkljP3WeGUG0MC1RfA github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= github.com/spf13/viper v1.13.0/go.mod h1:Icm2xNL3/8uyh/wFuB1jI7TiTNKp8632Nwegu+zgdYw= github.com/spf13/viper v1.14.0/go.mod h1:WT//axPky3FdvXHzGw33dNdXXXfFQqmEalje+egj8As= +github.com/ssgreg/nlreturn/v2 v2.2.1 h1:X4XDI7jstt3ySqGU86YGAURbxw3oTDPK9sPEi6YEwQ0= github.com/ssgreg/nlreturn/v2 v2.2.1/go.mod h1:E/iiPB78hV7Szg2YfRgyIrk1AD6JVMTRkkxBiELzh2I= +github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4 h1:Gb2Tyox57NRNuZ2d3rmvB3pcmbu7O1RS3m8WRx7ilrg= +github.com/stbenjam/no-sprintf-host-port v0.1.1 h1:tYugd/yrm1O0dV+ThCbaKZh195Dfm07ysF0U6JQXczc= github.com/stbenjam/no-sprintf-host-port v0.1.1/go.mod h1:TLhvtIvONRzdmkFiio4O8LHsN9N74I+PhRquPsxpL0I= +github.com/stefanberger/go-pkcs11uri v0.0.0-20201008174630-78d3cae3a980 h1:lIOOHPEbXzO3vnmx2gok1Tfs31Q8GQqKLc8vVqyQq/I= +github.com/streadway/amqp v1.0.0 h1:kuuDrUJFZL1QYL9hUNuCxNObNzB0bV/ZG5jV3RWAQgo= +github.com/streadway/handy v0.0.0-20200128134331-0f66f006fb2e h1:mOtuXaRAbVZsxAHVdPR3IjfmN8T1h2iczJLynhLybf8= +github.com/stretchr/objx v0.3.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/testify v1.1.4/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.7.5/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/subosito/gotenv v1.4.1/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= +github.com/supranational/blst v0.3.8-0.20220526154634-513d2456b344 h1:m+8fKfQwCAy1QjzINvKe/pYtLjo2dl59x2w9YSEJxuY= +github.com/supranational/blst v0.3.8-0.20220526154634-513d2456b344/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= +github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 h1:kdXcSzyDtseVEc4yCz2qF8ZrQvIDBJLl4S1c3GCXmoI= github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= +github.com/tchap/go-patricia v2.2.6+incompatible h1:JvoDL7JSoIP2HDE8AbDH3zC8QBPxmzYe32HHy5yQ+Ck= +github.com/tdakkota/asciicheck v0.1.1 h1:PKzG7JUTUmVspQTDqtkX9eSiLGossXTybutHwTXuO0A= github.com/tdakkota/asciicheck v0.1.1/go.mod h1:yHp0ai0Z9gUljN3o0xMhYJnH/IcvkdTBOX2fmJ93JEM= +github.com/tendermint/tendermint v0.37.0-rc2 h1:2n1em+jfbhSv6QnBj8F6KHCpbIzZCB8KgcjidJUQNlY= +github.com/tendermint/tm-db v0.6.7 h1:fE00Cbl0jayAoqlExN6oyQJ7fR/ZtoVOmvPJ//+shu8= +github.com/tenntenn/modver v1.0.1 h1:2klLppGhDgzJrScMpkj9Ujy3rXPUspSjAcev9tSEBgA= github.com/tenntenn/modver v1.0.1/go.mod h1:bePIyQPb7UeioSRkw3Q0XeMhYZSMx9B8ePqg6SAMGH0= +github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3 h1:f+jULpRQGxTSkNYKJ51yaw6ChIqO+Je8UqsTKN/cDag= github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3/go.mod h1:ON8b8w4BN/kE1EOhwT0o+d62W65a6aPw1nouo9LMgyY= +github.com/tetafro/godot v1.4.11 h1:BVoBIqAf/2QdbFmSwAWnaIqDivZdOV0ZRwEm6jivLKw= github.com/tetafro/godot v1.4.11/go.mod h1:LR3CJpxDVGlYOWn3ZZg1PgNZdTUvzsZWu8xaEohUpn8= +github.com/timakin/bodyclose v0.0.0-20210704033933-f49887972144 h1:kl4KhGNsJIbDHS9/4U9yQo1UcPQM0kOMJHn29EoH/Ro= github.com/timakin/bodyclose v0.0.0-20210704033933-f49887972144/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= +github.com/timonwong/loggercheck v0.9.3 h1:ecACo9fNiHxX4/Bc02rW2+kaJIAMAes7qJ7JKxt0EZI= github.com/timonwong/loggercheck v0.9.3/go.mod h1:wUqnk9yAOIKtGA39l1KLE9Iz0QiTocu/YZoOf+OzFdw= +github.com/tklauser/go-sysconf v0.3.10/go.mod h1:C8XykCvCb+Gn0oNCWPIlcb0RuglQTYaQ2hGm7jmxEFk= +github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hMwiKKqXCQ= +github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8 h1:ndzgwNDnKIqyCvHTXaCqh9KlOWKvBry6nuXMJmonVsE= +github.com/tomarrell/wrapcheck/v2 v2.7.0 h1:J/F8DbSKJC83bAvC6FoZaRjZiZ/iKoueSdrEkmGeacA= github.com/tomarrell/wrapcheck/v2 v2.7.0/go.mod h1:ao7l5p0aOlUNJKI0qVwB4Yjlqutd0IvAB9Rdwyilxvg= +github.com/tommy-muehle/go-mnd/v2 v2.5.1 h1:NowYhSdyE/1zwK9QCLeRb6USWdoif80Ie+v+yU8u1Zw= github.com/tommy-muehle/go-mnd/v2 v2.5.1/go.mod h1:WsUAkMJMYww6l/ufffCD3m+P7LEvr8TnZn9lwVDlgzw= +github.com/tonistiigi/fsutil v0.0.0-20220115021204-b19f7f9cb274 h1:wbyZxD6IPFp0sl5uscMOJRsz5UKGFiNiD16e+MVfKZY= +github.com/tonistiigi/go-actions-cache v0.0.0-20220404170428-0bdeb6e1eac7 h1:8eY6m1mjgyB8XySUR7WvebTM8D/Vs86jLJzD/Tw7zkc= +github.com/tonistiigi/go-archvariant v1.0.0 h1:5LC1eDWiBNflnTF1prCiX09yfNHIxDC/aukdhCdTyb0= +github.com/tonistiigi/units v0.0.0-20180711220420-6950e57a87ea h1:SXhTLE6pb6eld/v/cCndK0AMpt1wiVFb/YYmqB3/QG0= +github.com/tonistiigi/vt100 v0.0.0-20210615222946-8066bb97264f h1:DLpt6B5oaaS8jyXHa9VA4rrZloBVPVXeCtrOsrFauxc= +github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926 h1:G3dpKMzFDjgEh2q1Z7zUUtKa8ViPtH+ocF0bE0g00O8= +github.com/ultraware/funlen v0.0.3 h1:5ylVWm8wsNwH5aWo9438pwvsK0QiqVuUrt9bn7S/iLA= github.com/ultraware/funlen v0.0.3/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= +github.com/ultraware/whitespace v0.0.5 h1:hh+/cpIcopyMYbZNVov9iSxvJU3OYQg78Sfaqzi/CzI= github.com/ultraware/whitespace v0.0.5/go.mod h1:aVMh/gQve5Maj9hQ/hg+F75lr/X5A89uZnzAmWSineA= +github.com/urfave/cli v1.22.4 h1:u7tSpNPPswAFymm8IehJhy4uJMlUuU/GmqSkvJ1InXA= +github.com/urfave/cli/v2 v2.10.2 h1:x3p8awjp/2arX+Nl/G2040AZpOCHS/eMJJ1/a+mye4Y= +github.com/urfave/cli/v2 v2.10.2/go.mod h1:f8iq5LtQ/bLxafbdBSLPPNsgaW0l/2fYYEHhAyPlwvo= +github.com/uudashr/gocognit v1.0.6 h1:2Cgi6MweCsdB6kpcVQp7EW4U23iBFQWfTXiWlyp842Y= github.com/uudashr/gocognit v1.0.6/go.mod h1:nAIUuVBnYU7pcninia3BHOvQkpQCeO76Uscky5BOwcY= +github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= +github.com/valyala/quicktemplate v1.7.0 h1:LUPTJmlVcb46OOUY3IeD9DojFpAVbsG+5WFTcjMJzCM= +github.com/vbatts/tar-split v0.11.2 h1:Via6XqJr0hceW4wff3QRzD5gAk/tatMw/4ZA7cTlIME= +github.com/vektra/mockery/v2 v2.14.0 h1:KZ1p5Hrn8tiY+LErRMr14HHle6khxo+JKOXLBW/yfqs= github.com/vektra/mockery/v2 v2.14.0/go.mod h1:bnD1T8tExSgPD1ripLkDbr60JA9VtQeu12P3wgLZd7M= github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= +github.com/vishvananda/netlink v1.1.1-0.20210330154013-f5de75959ad5 h1:+UB2BJA852UkGH42H+Oee69djmxS3ANzl2b/JtT1YiA= github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= +github.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f h1:p4VB7kIXpOQvVn1ZaTIVp+3vuYAXFe3OJEvjbUYJLaA= +github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= +github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= +github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74= +github.com/xhit/go-str2duration v1.2.0 h1:BcV5u025cITWxEQKGWr1URRzrcXtu7uk8+luz3Yuhwc= github.com/xhit/go-str2duration v1.2.0/go.mod h1:3cPSlfZlUHVlneIVfePFWcJZsuwf+P1v2SRTV4cUmp4= +github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8= +github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 h1:QldyIu/L63oPpyvQmHgvgickp1Yw510KJOqX7H24mg8= +github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77 h1:ESFSdwYZvkeru3RtdrYueztKhOBCSAAzS4Gf+k0tEow= +github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= +github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8= +github.com/yagipy/maintidx v1.0.0 h1:h5NvIsCz+nRDapQ0exNv4aJ0yXSI0420omVANTv3GJM= github.com/yagipy/maintidx v1.0.0/go.mod h1:0qNf/I/CCZXSMhsRsrEPDZ+DkekpKLXAJfsTACwgXLk= +github.com/yeya24/promlinter v0.2.0 h1:xFKDQ82orCU5jQujdaD8stOHiv8UN68BSdn2a8u8Y3o= github.com/yeya24/promlinter v0.2.0/go.mod h1:u54lkmBOZrpEbQQ6gox2zWKKLKu2SGe+2KOiextY+IA= github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.13 h1:fVcFKWvrslecOb/tg+Cc05dkeYx540o0FuFt3nUVDoE= +github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg= +github.com/zeebo/xxh3 v1.0.2 h1:xZmwmqxHZA8AI603jOQ0tMqmBr9lPeFwGg6d+xy9DC0= github.com/zondax/ledger-go v0.14.0/go.mod h1:fZ3Dqg6qcdXWSOJFKMG8GCTnD7slO/RL2feOQv8K320= +gitlab.com/bosi/decorder v0.2.3 h1:gX4/RgK16ijY8V+BRQHAySfQAb354T7/xQpDB2n10P0= gitlab.com/bosi/decorder v0.2.3/go.mod h1:9K1RB5+VPNQYtXtTDAzd2OEftsZb1oV0IrJrzChSdGE= go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= +go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738 h1:VcrIfasaLFkyjk6KNlXQSzO+B0fZcnECiDrKJsfxka0= +go.etcd.io/etcd/api/v3 v3.5.6 h1:Cy2qx3npLcYqTKqGJzMypnMv2tiRyifZJ17BlWIWA7A= go.etcd.io/etcd/api/v3 v3.5.6/go.mod h1:KFtNaxGDw4Yx/BA4iPPwevUTAuqcsPxzyX8PHydchN8= +go.etcd.io/etcd/client/pkg/v3 v3.5.6 h1:TXQWYceBKqLp4sa87rcPs11SXxUA/mHwH975v+BDvLU= go.etcd.io/etcd/client/pkg/v3 v3.5.6/go.mod h1:ggrwbk069qxpKPq8/FKkQ3Xq9y39kbFR4LnKszpRXeQ= +go.etcd.io/etcd/client/v2 v2.305.6 h1:fIDR0p4KMjw01MJMfUIDWdQbjo06PD6CeYM5z4EHLi0= go.etcd.io/etcd/client/v2 v2.305.6/go.mod h1:BHha8XJGe8vCIBfWBpbBLVZ4QjOIlfoouvOwydu63E0= +go.etcd.io/etcd/client/v3 v3.5.6 h1:coLs69PWCXE9G4FKquzNaSHrRyMCAXwF+IX1tAPVO8E= go.etcd.io/etcd/client/v3 v3.5.6/go.mod h1:f6GRinRMCsFVv9Ht42EyY7nfsVGwrNO0WEoS2pRKzQk= +go.etcd.io/gofail v0.1.0 h1:XItAMIhOojXFQMgrxjnd2EIIHun/d5qL0Pf7FzVTkFg= go.etcd.io/gofail v0.1.0/go.mod h1:VZBCXYGZhHAinaBiiqYvuDynvahNsAyLFwB3kEHKz1M= +go.mozilla.org/pkcs7 v0.0.0-20200128120323-432b2356ecb1 h1:A/5uWzF44DlIgdm/PQFwfMkW0JX+cIcQi/SwLAmZP5M= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.36.3 h1:syAz40OyelLZo42+3U68Phisvrx4qh+4wpdZw7eUUdY= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.36.3/go.mod h1:Dts42MGkzZne2yCru741+bFiTMWkIj/LLRizad7b9tw= +go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.29.0 h1:Wjp9vsVSIEyvdiaECfqxY9xBqQ7JaSCGtvHgR4doXZk= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.29.0 h1:SLme4Porm+UwX0DdHMxlwRt7FzPSE0sys81bet2o0pU= +go.opentelemetry.io/otel v1.11.0 h1:kfToEGMDq6TrVrJ9Vht84Y8y9enykSZzDDZglV0kIEk= go.opentelemetry.io/otel v1.11.0/go.mod h1:H2KtuEphyMvlhZ+F7tg9GRhAOe60moNx61Ex+WmiKkk= +go.opentelemetry.io/otel/exporters/jaeger v1.4.1 h1:VHCK+2yTZDqDaVXj7JH2Z/khptuydo6C0ttBh2bxAbc= +go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.4.1 h1:imIM3vRDMyZK1ypQlQlO+brE22I9lRhJsBDXpDWjlz8= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.4.1 h1:WPpPsAAs8I2rA47v5u0558meKmmwm1Dj99ZbqCV8sZ8= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.4.1 h1:AxqDiGk8CorEXStMDZF5Hz9vo9Z7ZZ+I5m8JRl/ko40= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.4.1 h1:8qOago/OqoFclMUUj/184tZyRdDZFpcejSjbk5Jrl6Y= +go.opentelemetry.io/otel/internal/metric v0.27.0 h1:9dAVGAfFiiEq5NVB9FUJ5et+btbDQAUIJehJ+ikyryk= +go.opentelemetry.io/otel/metric v0.27.0 h1:HhJPsGhJoKRSegPQILFbODU56NS/L1UE4fS1sC5kIwQ= +go.opentelemetry.io/otel/sdk v1.4.1 h1:J7EaW71E0v87qflB4cDolaqq3AcujGrtyIPGQoZOB0Y= +go.opentelemetry.io/otel/trace v1.11.0 h1:20U/Vj42SX+mASlXLmSGBg6jpI1jQtv682lZtTAOVFI= go.opentelemetry.io/otel/trace v1.11.0/go.mod h1:nyYjis9jy0gytE9LXGU+/m1sHTKbRY0fX0hulNNDP1U= go.opentelemetry.io/proto/otlp v0.15.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= +go.opentelemetry.io/proto/otlp v0.19.0 h1:IVN6GR+mhC4s5yfcTbmzHYODqvWAp3ZedA2SJPI1Nnw= +go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/goleak v1.1.12/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= +go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= +go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee h1:0mgffUl7nfd+FpvXMVz4IDEaUSmT1ysygQC7qYo7sG4= 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.23.0/go.mod h1:D+nX8jyLsMHMYrln8A0rJjFt/T/9/bGgIhAqxv5URuY= golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= +golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220826181053-bd7e27e6170d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= +golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA= golang.org/x/exp v0.0.0-20221205204356-47842c84f3db/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/exp v0.0.0-20230131160201-f062dba9d201/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= +golang.org/x/exp v0.0.0-20230310171629-522b1b587ee0/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= +golang.org/x/exp v0.0.0-20230321023759-10a507213a29/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/exp/typeparams v0.0.0-20220428152302-39d4317da171/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= +golang.org/x/exp/typeparams v0.0.0-20220827204233-334a2380cb91 h1:Ic/qN6TEifvObMGQy72k0n1LlJr7DjWWEi+MOsDOiSk= golang.org/x/exp/typeparams v0.0.0-20220827204233-334a2380cb91/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= +golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b h1:+qEpEAPhDZ1o0x3tHzZTQDArnOixOzGD9HUJfcg0mb4= +golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 h1:VLliZ0d+/avPrXXH+OakdXhpJuEoBZuwh1m2j7U6Iug= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028 h1:4+4C/Iv2U4fMZBiMCc98MG1In4gJY5YRhtpDNeDeHWs= golang.org/x/mod v0.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= +golang.org/x/mod v0.6.0-dev.0.20211013180041-c96bc1413d57/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= @@ -637,29 +1369,36 @@ golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= golang.org/x/oauth2 v0.4.0/go.mod h1:RznEsdpjGAINPTOF0UH/t+xJ75L18YO3Ho6Pyn+uRec= +golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I= golang.org/x/sync v0.0.0-20220819030929-7fc1605a5dde/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210309074719-68d13333faf2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34/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-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211105183446-c75c47738b0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211116061358-0a5406a5449c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220204135822-1c1b9b1eba6a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220702020025-31831981b65f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220825204002-c680a09ffe64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -670,10 +1409,14 @@ golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9sn golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= 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/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= 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/time v0.1.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190307163923-6a08e3108db3/go.mod h1:25r3+/G6/xytQM8iWZKq3Hn0kr0rgFKPUNVEL/dr3z4= golang.org/x/tools v0.0.0-20190311215038-5c2858a9cfe5/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190321232350-e250d351ecad/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= @@ -697,16 +1440,24 @@ golang.org/x/tools v0.0.0-20200831203904-5a2aa26beb65/go.mod h1:Cj7w3i3Rnn0Xh82u golang.org/x/tools v0.0.0-20201001104356-43ebab892c4c/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= golang.org/x/tools v0.0.0-20201002184944-ecd9fd270d5d/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= golang.org/x/tools v0.0.0-20201023174141-c8cfbd0f21e6/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201230224404-63754364767c/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.1-0.20210205202024-ef80cdb6ec6d/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU= golang.org/x/tools v0.1.1-0.20210302220138-2ac05c832e1a/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU= +golang.org/x/tools v0.1.8-0.20211029000441-d6a9af8af023/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= golang.org/x/tools v0.1.9-0.20211228192929-ee1ca4ffc4da/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= golang.org/x/tools v0.1.11/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4= golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= +gonum.org/v1/gonum v0.8.2 h1:CCXrcPKiGGotvnN6jfUsKk4rRqm7q09/YbKb5xCEvtM= gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= +gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0 h1:OE9mWmgKkjJyEmDAAtGMPjXu+YNeGvK9VTSHY6+Qihc= +gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= +gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b h1:Qh4dB5D/WpoUUp3lSod7qgoyEHbDGPUWjIbnqdqqe1k= +gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= google.golang.org/api v0.106.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= google.golang.org/api v0.107.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= google.golang.org/api v0.108.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= @@ -716,20 +1467,58 @@ google.golang.org/genproto v0.0.0-20221227171554-f9683d7f8bef/go.mod h1:RGgjbofJ google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= google.golang.org/genproto v0.0.0-20230124163310-31e0e69b6fc2/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= google.golang.org/genproto v0.0.0-20230209215440-0dfe4f8abfcc/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44/go.mod h1:8B0gmkoRebU8ukX6HP+4wrVQUY1+6PkQ44BSyIlflHA= google.golang.org/grpc v1.41.0/go.mod h1:U3l9uK9J0sini8mHphKoXyaqDA/8VyGnDee1zzIUK6k= google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= google.golang.org/grpc v1.52.0/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY= +google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= +google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0 h1:M1YKkFIboKNieVO5DLUEVzQfGwJD30Nv2jfUgzb5UcE= google.golang.org/protobuf v1.27.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.2-0.20220831092852-f930b1dc76e8/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.2-0.20230222093303-bc1253ad3743/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.29.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +gopkg.in/alecthomas/kingpin.v2 v2.2.6 h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/cheggaaa/pb.v1 v1.0.27 h1:kJdccidYzt3CaHD1crCFTS1hxyhSi059NhOFUf03YFo= +gopkg.in/errgo.v2 v2.1.0 h1:0vLT13EuvQ0hNvakwLuFZ/jYrLp5F3kcWHXdRggjCE8= +gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= +gopkg.in/gcfg.v1 v1.2.3 h1:m8OOJ4ccYHnx2f4gQwpno8nAX5OGOh7RLaaz0pj3Ogs= +gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= +gopkg.in/resty.v1 v1.12.0 h1:CuXP0Pjfw9rOuY6EP+UvtNvt5DSqHpIxILZKT/quCZI= +gopkg.in/square/go-jose.v2 v2.5.1 h1:7odma5RETjNHWJnR32wx8t+Io4djHE1PqxCFx3iiZ2w= +gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= gotest.tools/v3 v3.2.0/go.mod h1:Mcr9QNxkg0uMvy/YElmo4SpXgJKWgQvYrT7Kw5RzJ1A= +honnef.co/go/tools v0.3.3 h1:oDx7VAwstgpYpb3wv0oxiZlxY+foCpRAwY7Vk6XpAgA= honnef.co/go/tools v0.3.3/go.mod h1:jzwdWgg7Jdq75wlfblQxO4neNaFFSvgc1tD5Wv8U0Yw= +k8s.io/api v0.22.5 h1:xk7C+rMjF/EGELiD560jdmwzrB788mfcHiNbMQLIVI8= +k8s.io/apimachinery v0.22.5 h1:cIPwldOYm1Slq9VLBRPtEYpyhjIm1C6aAMAoENuvN9s= +k8s.io/apiserver v0.22.5 h1:71krQxCUz218ecb+nPhfDsNB6QgP1/4EMvi1a2uYBlg= +k8s.io/client-go v0.22.5 h1:I8Zn/UqIdi2r02aZmhaJ1hqMxcpfJ3t5VqvHtctHYFo= +k8s.io/component-base v0.22.5 h1:U0eHqZm7mAFE42hFwYhY6ze/MmVaW00JpMrzVsQmzYE= +k8s.io/cri-api v0.23.1 h1:0DHL/hpTf4Fp+QkUXFefWcp1fhjXr9OlNdY9X99c+O8= +k8s.io/klog/v2 v2.30.0 h1:bUO6drIvCIsvZ/XFgfxoGFQU/a4Qkh0iAlvUR7vlHJw= +k8s.io/utils v0.0.0-20210930125809-cb0fa318a74b h1:wxEMGetGMur3J1xuGLQY7GEQYg9bZxKn3tKo5k/eYcs= +modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM= +modernc.org/tcl v1.15.2/go.mod h1:3+k/ZaEbKrC8ePv8zJWPtBSW0V7Gg9g8rkmhI1Kfs3c= +modernc.org/z v1.7.3/go.mod h1:Ipv4tsdxZRbQyLq9Q1M6gdbkxYzdlrciF2Hi/lS7nWE= +mvdan.cc/gofumpt v0.4.0 h1:JVf4NN1mIpHogBj7ABpgOyZc65/UUOkKQFkoURsz4MM= mvdan.cc/gofumpt v0.4.0/go.mod h1:PljLOHDeZqgS8opHRKLzp2It2VBuSdteAgqUfzMTxlQ= +mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed h1:WX1yoOaKQfddO/mLzdV4wptyWgoH/6hwLs7QHTixo0I= mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc= +mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b h1:DxJ5nJdkhDlLok9K6qO+5290kphDJbHOQO1DFFFTeBo= mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4= +mvdan.cc/unparam v0.0.0-20220706161116-678bad134442 h1:seuXWbRB1qPrS3NQnHmFKLJLtskWyueeIzmLXghMGgk= mvdan.cc/unparam v0.0.0-20220706161116-678bad134442/go.mod h1:F/Cxw/6mVrNKqrR2YjFf5CaW0Bw4RL8RfbEf4GRggJk= +rsc.io/binaryregexp v0.2.0 h1:HfqmD5MEmC0zvwBuF187nq9mdnXjXsSivRiXN7SmRkE= +rsc.io/pdf v0.1.1 h1:k1MczvYDUvJBe93bYd7wrZLLUEcLZAuF824/I4e5Xr4= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= +rsc.io/quote/v3 v3.1.0 h1:9JKUTTIUgS6kzR9mK1YuGKv6Nl+DijDNIc0ghT58FaY= +rsc.io/sampler v1.3.0 h1:7uVkIFmeBqHfdjD+gZwtXXI+RODJ2Wc4O7MPEh/QiW4= +sigs.k8s.io/structured-merge-diff/v4 v4.1.2 h1:Hr/htKFmJEbtMgS/UD0N+gtgctAqz81t3nu+sPzynno= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= +sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0 h1:ucqkfpjg9WzSUubAO62csmucvxl4/JeW3F4I4909XkM= diff --git a/integration_tests/dungeon_test.go b/integration_tests/dungeon_test.go index e5be52df..b7b1f50e 100644 --- a/integration_tests/dungeon_test.go +++ b/integration_tests/dungeon_test.go @@ -209,7 +209,7 @@ func TestDungeonTransferBlock(t *testing.T) { msg, err := cdc.MarshalInterfaceJSON(&setSendEnabledMsg) - prop := cosmos.Proposal{ + prop := cosmos.TxProposalv1{ Messages: []json.RawMessage{msg}, Metadata: "", Deposit: "100uxion", diff --git a/integration_tests/go.mod b/integration_tests/go.mod index bd242f2d..be8ef33e 100644 --- a/integration_tests/go.mod +++ b/integration_tests/go.mod @@ -4,13 +4,13 @@ go 1.19 require ( github.com/burnt-labs/xion v0.1.0 - github.com/cosmos/cosmos-sdk v0.47.0 - github.com/cosmos/ibc-go/v7 v7.0.0 + github.com/cosmos/cosmos-sdk v0.47.3 + github.com/cosmos/ibc-go/v7 v7.0.1 github.com/icza/dyno v0.0.0-20220812133438-f0b6f8a18845 github.com/strangelove-ventures/interchaintest/v7 v7.0.0-20230326163644-f0ba01f43314 - github.com/stretchr/testify v1.8.2 + github.com/stretchr/testify v1.8.4 go.uber.org/zap v1.24.0 - google.golang.org/grpc v1.53.0 + google.golang.org/grpc v1.55.0 ) require ( @@ -23,18 +23,22 @@ require ( cosmossdk.io/core v0.5.1 // indirect cosmossdk.io/depinject v1.0.0-alpha.3 // indirect cosmossdk.io/errors v1.0.0-beta.7 // indirect - cosmossdk.io/math v1.0.0 // indirect + cosmossdk.io/log v1.1.0 // indirect + cosmossdk.io/math v1.0.1 // indirect cosmossdk.io/tools/rosetta v0.2.1 // indirect filippo.io/edwards25519 v1.0.0 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect - github.com/99designs/keyring v1.2.1 // indirect - github.com/BurntSushi/toml v1.2.1 // indirect + github.com/99designs/keyring v1.2.2 // indirect + github.com/BurntSushi/toml v1.3.0 // indirect github.com/ChainSafe/go-schnorrkel v1.0.0 // indirect github.com/ChainSafe/go-schnorrkel/1 v0.0.0-00010101000000-000000000000 // indirect + github.com/ComposableFi/go-subkey/v2 v2.0.0-tm03420 // indirect + github.com/FactomProject/basen v0.0.0-20150613233007-fe3947df716e // indirect + github.com/FactomProject/btcutilecc v0.0.0-20130527213604-d3a63a5752ec // indirect github.com/Microsoft/go-winio v0.6.0 // indirect github.com/StirlingMarketingGroup/go-namecase v1.0.0 // indirect github.com/armon/go-metrics v0.4.1 // indirect - github.com/avast/retry-go/v4 v4.3.3 // indirect + github.com/avast/retry-go/v4 v4.3.4 // indirect github.com/aws/aws-sdk-go v1.44.203 // indirect github.com/benbjohnson/clock v1.3.0 // indirect github.com/beorn7/perks v1.0.1 // indirect @@ -42,19 +46,18 @@ require ( github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 // indirect github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect github.com/cenkalti/backoff/v4 v4.1.3 // indirect - github.com/centrifuge/go-substrate-rpc-client/v4 v4.0.12 // indirect github.com/cespare/xxhash v1.1.0 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/chzyer/readline v1.5.1 // indirect github.com/coinbase/rosetta-sdk-go/types v1.0.0 // indirect - github.com/cometbft/cometbft v0.37.0 // indirect + github.com/cometbft/cometbft v0.37.1 // indirect github.com/cometbft/cometbft-db v0.7.0 // indirect github.com/confio/ics23/go v0.9.0 // indirect github.com/cosmos/btcutil v1.0.5 // indirect github.com/cosmos/cosmos-proto v1.0.0-beta.2 // indirect github.com/cosmos/go-bip39 v1.0.0 // indirect github.com/cosmos/gogogateway v1.2.0 // indirect - github.com/cosmos/gogoproto v1.4.7 // indirect + github.com/cosmos/gogoproto v1.4.10 // indirect github.com/cosmos/iavl v0.20.0 // indirect github.com/cosmos/ics23/go v0.9.1-0.20221207100636-b1abd8678aab // indirect github.com/cosmos/ledger-cosmos-go v0.12.1 // indirect @@ -72,12 +75,12 @@ require ( github.com/dgraph-io/ristretto v0.1.1 // indirect github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect github.com/docker/distribution v2.8.2+incompatible // indirect - github.com/docker/docker v20.10.19+incompatible // indirect + github.com/docker/docker v24.0.1+incompatible // indirect github.com/docker/go-connections v0.4.0 // indirect github.com/docker/go-units v0.5.0 // indirect github.com/dustin/go-humanize v1.0.1 // indirect github.com/dvsekhvalnov/jose2go v1.5.0 // indirect - github.com/ethereum/go-ethereum v1.10.17 // indirect + github.com/ethereum/go-ethereum v1.10.20 // indirect github.com/felixge/httpsnoop v1.0.2 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/go-kit/kit v0.12.0 // indirect @@ -107,7 +110,7 @@ require ( github.com/gtank/merlin v0.1.1 // indirect github.com/gtank/ristretto255 v0.1.2 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect - github.com/hashicorp/go-getter v1.7.0 // indirect + github.com/hashicorp/go-getter v1.7.1 // indirect github.com/hashicorp/go-immutable-radix v1.3.1 // indirect github.com/hashicorp/go-safetemp v1.0.0 // indirect github.com/hashicorp/go-version v1.6.0 // indirect @@ -120,28 +123,26 @@ require ( github.com/ipfs/go-cid v0.2.0 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect - github.com/json-iterator/go v1.1.12 // indirect github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect github.com/klauspost/compress v1.16.3 // indirect github.com/klauspost/cpuid/v2 v2.2.3 // indirect github.com/lib/pq v1.10.7 // indirect github.com/libp2p/go-buffer-pool v0.1.0 // indirect github.com/libp2p/go-libp2p v0.22.0 // indirect - github.com/libp2p/go-libp2p-core v0.20.1 // indirect github.com/libp2p/go-openssl v0.1.0 // indirect github.com/magiconair/properties v1.8.7 // indirect github.com/manifoldco/promptui v0.9.0 // indirect - github.com/mattn/go-isatty v0.0.17 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-isatty v0.0.18 // indirect github.com/mattn/go-pointer v0.0.1 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect github.com/mimoo/StrobeGo v0.0.0-20220103164710-9a04d6ca976b // indirect github.com/minio/highwayhash v1.0.2 // indirect github.com/minio/sha256-simd v1.0.0 // indirect + github.com/misko9/go-substrate-rpc-client/v4 v4.0.0-20230413215336-5bd2aea337ae // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mitchellh/go-testing-interface v1.14.1 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect - github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect - github.com/modern-go/reflect2 v1.0.2 // indirect github.com/mr-tron/base58 v1.2.0 // indirect github.com/mtibben/percent v0.2.1 // indirect github.com/multiformats/go-base32 v0.0.4 // indirect @@ -154,26 +155,26 @@ require ( github.com/opencontainers/go-digest v1.0.0 // indirect github.com/opencontainers/image-spec v1.1.0-rc2 // indirect github.com/pelletier/go-toml v1.9.5 // indirect - github.com/pelletier/go-toml/v2 v2.0.6 // indirect - github.com/petermattis/goid v0.0.0-20221215004737-a150e88a970d // indirect + github.com/pelletier/go-toml/v2 v2.0.8 // indirect + github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08 // indirect github.com/pierrec/xxHash v0.1.5 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/prometheus/client_golang v1.14.0 // indirect + github.com/prometheus/client_golang v1.15.0 // indirect github.com/prometheus/client_model v0.3.0 // indirect - github.com/prometheus/common v0.40.0 // indirect + github.com/prometheus/common v0.42.0 // indirect github.com/prometheus/procfs v0.9.0 // indirect github.com/rakyll/statik v0.1.7 // indirect github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/rs/cors v1.8.3 // indirect + github.com/rs/zerolog v1.29.1 // indirect github.com/sasha-s/go-deadlock v0.3.1 // indirect - github.com/sirupsen/logrus v1.9.0 // indirect github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 // indirect github.com/spaolacci/murmur3 v1.1.0 // indirect github.com/spf13/afero v1.9.3 // indirect github.com/spf13/cast v1.5.0 // indirect - github.com/spf13/cobra v1.6.1 // indirect + github.com/spf13/cobra v1.7.0 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/spf13/viper v1.15.0 // indirect @@ -182,29 +183,30 @@ require ( github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c // indirect github.com/tendermint/go-amino v0.16.0 // indirect github.com/tidwall/btree v1.6.0 // indirect + github.com/tyler-smith/go-bip32 v1.0.0 // indirect + github.com/tyler-smith/go-bip39 v1.1.0 // indirect github.com/ulikunitz/xz v0.5.11 // indirect - github.com/vedhavyas/go-subkey v1.0.3 // indirect github.com/zondax/hid v0.9.1 // indirect github.com/zondax/ledger-go v0.14.1 // indirect go.etcd.io/bbolt v1.3.7 // indirect go.opencensus.io v0.24.0 // indirect go.uber.org/atomic v1.10.0 // indirect - go.uber.org/multierr v1.8.0 // indirect - golang.org/x/crypto v0.7.0 // indirect - golang.org/x/exp v0.0.0-20230310171629-522b1b587ee0 // indirect - golang.org/x/mod v0.9.0 // indirect - golang.org/x/net v0.8.0 // indirect - golang.org/x/oauth2 v0.5.0 // indirect - golang.org/x/sync v0.1.0 // indirect - golang.org/x/sys v0.6.0 // indirect - golang.org/x/term v0.6.0 // indirect - golang.org/x/text v0.8.0 // indirect - golang.org/x/tools v0.7.0 // indirect + go.uber.org/multierr v1.11.0 // indirect + golang.org/x/crypto v0.9.0 // indirect + golang.org/x/exp v0.0.0-20230515195305-f3d0a9c9a5cc // indirect + golang.org/x/mod v0.10.0 // indirect + golang.org/x/net v0.10.0 // indirect + golang.org/x/oauth2 v0.6.0 // indirect + golang.org/x/sync v0.2.0 // indirect + golang.org/x/sys v0.8.0 // indirect + golang.org/x/term v0.8.0 // indirect + golang.org/x/text v0.9.0 // indirect + golang.org/x/tools v0.9.3 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect google.golang.org/api v0.110.0 // indirect google.golang.org/appengine v1.6.7 // indirect - google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44 // indirect - google.golang.org/protobuf v1.29.1 // indirect + google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4 // indirect + google.golang.org/protobuf v1.30.0 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect gopkg.in/yaml.v2 v2.4.0 // indirect @@ -213,11 +215,11 @@ require ( lukechampine.com/uint128 v1.2.0 // indirect modernc.org/cc/v3 v3.40.0 // indirect modernc.org/ccgo/v3 v3.16.13 // indirect - modernc.org/libc v1.22.3 // indirect + modernc.org/libc v1.22.5 // indirect modernc.org/mathutil v1.5.0 // indirect modernc.org/memory v1.5.0 // indirect modernc.org/opt v0.1.3 // indirect - modernc.org/sqlite v1.21.0 // indirect + modernc.org/sqlite v1.23.0 // indirect modernc.org/strutil v1.1.3 // indirect modernc.org/token v1.0.1 // indirect nhooyr.io/websocket v1.8.6 // indirect @@ -230,6 +232,6 @@ replace ( github.com/ChainSafe/go-schnorrkel/1 => github.com/ChainSafe/go-schnorrkel v1.0.0 github.com/burnt-labs/xion => ../ github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 - github.com/strangelove-ventures/interchaintest/v7 => github.com/burnt-labs/interchaintest/v7 v7.0.0-20230404233655-f37b60cca9b6 + github.com/strangelove-ventures/interchaintest/v7 => github.com/burnt-labs/interchaintest/v7 v7.0.0-20230612202143-1c7c5cc80b3b github.com/vedhavyas/go-subkey => github.com/strangelove-ventures/go-subkey v1.0.7 ) diff --git a/integration_tests/go.sum b/integration_tests/go.sum index fe787939..c671df64 100644 --- a/integration_tests/go.sum +++ b/integration_tests/go.sum @@ -1,14 +1,12 @@ 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.43.0/go.mod h1:BOSR3VbTLkk6FDC/TcffxP4NF/FFBGA5ku+jvKOP7pg= 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.44.3/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.51.0/go.mod h1:hWtGJ6gnXH+KgDv+V0zFGDvpi07n3z8ZNj3T1RW0Gcw= 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= @@ -59,7 +57,6 @@ cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUM 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/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA= -cloud.google.com/go/bigtable v1.2.0/go.mod h1:JcVAOl45lrTmQfLj7T6TxyMzIN/3FGGcFm+2xVAli2o= cloud.google.com/go/billing v1.4.0/go.mod h1:g9IdKBEFlItS8bTtlrZdVLWSSdSyFUZKXNS02zKMOZY= cloud.google.com/go/billing v1.5.0/go.mod h1:mztb1tBc3QekhjSgmpf/CV4LzWXLzCArwpLmP2Gm88s= cloud.google.com/go/binaryauthorization v1.1.0/go.mod h1:xwnoWu3Y84jbuHa0zd526MJYmtnVXn0syOjaJgy4+dM= @@ -120,7 +117,7 @@ cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= -cloud.google.com/go/longrunning v0.3.0 h1:NjljC+FYPV3uh5/OwWT6pVU+doBqMg2x/rZlE+CamDs= +cloud.google.com/go/longrunning v0.4.1 h1:v+yFJOfKC3yZdY6ZUI933pIYdhyhV8S3NpWrXWmg7jM= cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= @@ -191,7 +188,6 @@ cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xX cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= -collectd.org v0.3.0/go.mod h1:A/8DzQBkF6abtvrT2j/AU/4tiBgJWYyh0y/oB/4MlWE= cosmossdk.io/api v0.3.1 h1:NNiOclKRR0AOlO4KIqeaG6PS6kswOMhHD0ir0SscNXE= cosmossdk.io/api v0.3.1/go.mod h1:DfHfMkiNA2Uhy8fj0JJlOCYOBp4eWUUJ1te5zBGNyIw= cosmossdk.io/core v0.5.1 h1:vQVtFrIYOQJDV3f7rw4pjjVqc1id4+mE0L9hHP66pyI= @@ -200,8 +196,10 @@ cosmossdk.io/depinject v1.0.0-alpha.3 h1:6evFIgj//Y3w09bqOUOzEpFj5tsxBqdc5CfkO7z cosmossdk.io/depinject v1.0.0-alpha.3/go.mod h1:eRbcdQ7MRpIPEM5YUJh8k97nxHpYbc3sMUnEtt8HPWU= cosmossdk.io/errors v1.0.0-beta.7 h1:gypHW76pTQGVnHKo6QBkb4yFOJjC+sUGRc5Al3Odj1w= cosmossdk.io/errors v1.0.0-beta.7/go.mod h1:mz6FQMJRku4bY7aqS/Gwfcmr/ue91roMEKAmDUDpBfE= -cosmossdk.io/math v1.0.0 h1:ro9w7eKx23om2tZz/VM2Pf+z2WAbGX1yDQQOJ6iGeJw= -cosmossdk.io/math v1.0.0/go.mod h1:Ygz4wBHrgc7g0N+8+MrnTfS9LLn9aaTGa9hKopuym5k= +cosmossdk.io/log v1.1.0 h1:v0ogPHYeTzPcBTcPR1A3j1hkei4pZama8kz8LKlCMv0= +cosmossdk.io/log v1.1.0/go.mod h1:6zjroETlcDs+mm62gd8Ig7mZ+N+fVOZS91V17H+M4N4= +cosmossdk.io/math v1.0.1 h1:Qx3ifyOPaMLNH/89WeZFH268yCvU4xEcnPLu3sJqPPg= +cosmossdk.io/math v1.0.1/go.mod h1:Ygz4wBHrgc7g0N+8+MrnTfS9LLn9aaTGa9hKopuym5k= cosmossdk.io/tools/rosetta v0.2.1 h1:ddOMatOH+pbxWbrGJKRAawdBkPYLfKXutK9IETnjYxw= cosmossdk.io/tools/rosetta v0.2.1/go.mod h1:Pqdc1FdvkNV3LcNIkYWt2RQY6IP1ge6YWZk8MhhO9Hw= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= @@ -209,22 +207,24 @@ filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek= filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= 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/Azure/azure-sdk-for-go/sdk/azcore v0.21.1/go.mod h1:fBF9PQNqB8scdgpZ3ufzaLntG0AG7C1WjPMsiFOmfHM= -github.com/Azure/azure-sdk-for-go/sdk/internal v0.8.3/go.mod h1:KLF4gFr6DcKFZwSuH8w8yEK6DpFl3LP5rhdvAb7Yz5I= -github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.3.0/go.mod h1:tPaiy8S5bQ+S5sOiDlINkp7+Ef339+Nz5L5XO+cnOHo= +github.com/99designs/keyring v1.2.2 h1:pZd3neh/EmUzWONb35LxQfvuY7kiSXAq3HQd97+XBn0= +github.com/99designs/keyring v1.2.2/go.mod h1:wes/FrByc8j7lFOAGLGSNEg8f/PaI3cgTBqhFkHUrPk= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak= -github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/BurntSushi/toml v1.3.0 h1:Ws8e5YmnrGEHzZEzg0YvK/7COGYtTC5PbaH9oSSbgfA= +github.com/BurntSushi/toml v1.3.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= github.com/ChainSafe/go-schnorrkel v1.0.0 h1:3aDA67lAykLaG1y3AOjs88dMxC88PgUuHRrLeDnvGIM= github.com/ChainSafe/go-schnorrkel v1.0.0/go.mod h1:dpzHYVxLZcp8pjlV+O+UR8K0Hp/z7vcchBSbMBEhCw4= -github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= +github.com/ComposableFi/go-subkey/v2 v2.0.0-tm03420 h1:oknQF/iIhf5lVjbwjsVDzDByupRhga8nhA3NAmwyHDA= +github.com/ComposableFi/go-subkey/v2 v2.0.0-tm03420/go.mod h1:KYkiMX5AbOlXXYfxkrYPrRPV6EbVUALTQh5ptUOJzu8= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= +github.com/FactomProject/basen v0.0.0-20150613233007-fe3947df716e h1:ahyvB3q25YnZWly5Gq1ekg6jcmWaGj/vG/MhF4aisoc= +github.com/FactomProject/basen v0.0.0-20150613233007-fe3947df716e/go.mod h1:kGUqhHd//musdITWjFvNTHn90WG9bMLBEPQZ17Cmlpw= +github.com/FactomProject/btcutilecc v0.0.0-20130527213604-d3a63a5752ec h1:1Qb69mGp/UtRPn422BH4/Y4Q3SLUrD9KHuDkm8iodFc= +github.com/FactomProject/btcutilecc v0.0.0-20130527213604-d3a63a5752ec/go.mod h1:CD8UlnlLDiqb36L110uqiP2iSflVjx9g/3U9hCI4q2U= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= @@ -234,25 +234,19 @@ github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAE github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 h1:fLjPD/aNc3UIOA6tDi6QXUemppXK3P9BI7mr2hd6gx8= -github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= github.com/StirlingMarketingGroup/go-namecase v1.0.0 h1:2CzaNtCzc4iNHirR+5ru9OzGg8rQp860gqLBFqRI02Y= github.com/StirlingMarketingGroup/go-namecase v1.0.0/go.mod h1:ZsoSKcafcAzuBx+sndbxHu/RjDcDTrEdT4UvhniHfio= -github.com/VictoriaMetrics/fastcache v1.6.0/go.mod h1:0qHz5QP0GMX4pfmMA/zt5RgfNuXJrTP0zS7DqpHGGTw= 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/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= -github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= github.com/alecthomas/participle/v2 v2.0.0-alpha7 h1:cK4vjj0VSgb3lN1nuKA5F7dw+1s1pWBe5bx7nNCnN+c= 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/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= -github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/apache/arrow/go/arrow v0.0.0-20191024131854-af6fa24be0db/go.mod h1:VTxUBvSJ3s3eHAg65PNgrsn5BtqCRPdmyXh6rAfdxN0= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= @@ -262,23 +256,14 @@ github.com/armon/go-metrics v0.4.1 h1:hR91U9KYmb6bLBYLQjyM+3j+rcd/UhE+G78SFnF8gJ 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/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= -github.com/avast/retry-go/v4 v4.3.3 h1:G56Bp6mU0b5HE1SkaoVjscZjlQb0oy4mezwY/cGH19w= -github.com/avast/retry-go/v4 v4.3.3/go.mod h1:rg6XFaiuFYII0Xu3RDbZQkxCofFwruZKW8oEF1jpWiU= +github.com/avast/retry-go/v4 v4.3.4 h1:pHLkL7jvCvP317I8Ge+Km2Yhntv3SdkJm7uekkqbKhM= +github.com/avast/retry-go/v4 v4.3.4/go.mod h1:rv+Nla6Vk3/ilU0H51VHddWHiwimzX66yZ0JT6T+UvE= github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.44.122/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= github.com/aws/aws-sdk-go v1.44.203 h1:pcsP805b9acL3wUqa4JR2vg1k2wnItkDYNvfmcy6F+U= github.com/aws/aws-sdk-go v1.44.203/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= -github.com/aws/aws-sdk-go-v2 v1.2.0/go.mod h1:zEQs02YRBw1DjK0PoJv3ygDYOFTre1ejlJWl8FwAuQo= -github.com/aws/aws-sdk-go-v2/config v1.1.1/go.mod h1:0XsVy9lBI/BCXm+2Tuvt39YmdHwS5unDQmxZOYe8F5Y= -github.com/aws/aws-sdk-go-v2/credentials v1.1.1/go.mod h1:mM2iIjwl7LULWtS6JCACyInboHirisUUdkBPoTHMOUo= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.0.2/go.mod h1:3hGg3PpiEjHnrkrlasTfxFqUsZ2GCk/fMUn4CbKgSkM= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.0.2/go.mod h1:45MfaXZ0cNbeuT0KQ1XJylq8A6+OpVV2E5kvY/Kq+u8= -github.com/aws/aws-sdk-go-v2/service/route53 v1.1.1/go.mod h1:rLiOUrPLW/Er5kRcQ7NkwbjlijluLsrIbu/iyl35RO4= -github.com/aws/aws-sdk-go-v2/service/sso v1.1.1/go.mod h1:SuZJxklHxLAXgLTc1iFXbEWkXs7QRTQpCLGaKIprQW0= -github.com/aws/aws-sdk-go-v2/service/sts v1.1.1/go.mod h1:Wi0EBZwiz/K44YliU0EKxqTCJGUfYTWXrrBwkq736bM= -github.com/aws/smithy-go v1.1.0/go.mod h1:EzMw8dbp/YJL4A5/sbhGddag+NPT7q084agLbB9LgIw= github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= @@ -290,19 +275,14 @@ github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ 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/bmizerany/pat v0.0.0-20170815010413-6226ea591a40/go.mod h1:8rLXio+WjiTceGBHIoTvn60HIbs7Hm7bcHjyrSqYB9c= -github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= -github.com/btcsuite/btcd v0.22.0-beta h1:LTDpDKUM5EeOFBPM8IXpinEcmZ6FWfNZbE3lfrfdnWo= -github.com/btcsuite/btcd/btcec/v2 v2.1.2/go.mod h1:ctjw4H1kknNJmRN4iP1R7bTQ+v3GJkZBd6mui8ZsAZE= github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= github.com/btcsuite/btcd/btcutil v1.1.2 h1:XLMbX8JQEiwMcYft2EGi8zPUkoa0abKIU6/BJSRsjzQ= -github.com/btcsuite/btcd/chaincfg/chainhash v1.0.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce h1:YtWJF7RHm2pYCvA5t0RPmAaLUhREsKuKd+SLhxFbFeQ= -github.com/burnt-labs/interchaintest/v7 v7.0.0-20230404233655-f37b60cca9b6 h1:ek5Y7blC3YSDZ34GrGxjT7wo4F6PgrdSDYYKf2ILOOw= -github.com/burnt-labs/interchaintest/v7 v7.0.0-20230404233655-f37b60cca9b6/go.mod h1:+Tg2jC5C0eI2iOTs24OYs0NgSjU4Bw5XAQ5HVkVMwzc= -github.com/c-bata/go-prompt v0.2.2/go.mod h1:VzqtzE2ksDBcdln8G7mk2RX9QyGjH+OVqOCSiVIqS34= +github.com/bufbuild/protocompile v0.4.0 h1:LbFKd2XowZvQ/kajzguUp2DC9UEIQhIq77fZZlaQsNA= +github.com/burnt-labs/interchaintest/v7 v7.0.0-20230612202143-1c7c5cc80b3b h1:39rWmeock7xN0YridEgEgvUN4yyMcv+5djiwgMUGQHY= +github.com/burnt-labs/interchaintest/v7 v7.0.0-20230612202143-1c7c5cc80b3b/go.mod h1:PQHTFpUmM/meGRt87JNtCQp5k+D1Vgb/vS9+Faup6UA= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= @@ -310,9 +290,6 @@ github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInq github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/centrifuge/go-substrate-rpc-client/v4 v4.0.12 h1:DCYWIBOalB0mKKfUg2HhtGgIkBbMA1fnlnkZp7fHB18= -github.com/centrifuge/go-substrate-rpc-client/v4 v4.0.12/go.mod h1:5g1oM4Zu3BOaLpsKQ+O8PAv2kNuq+kPcA1VzFbsSqxE= -github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -332,7 +309,8 @@ github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6D github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cloudflare/cloudflare-go v0.14.0/go.mod h1:EnwdgGMaFOruiPZRFSgn+TsQ3hQ7C/YWzIGLeu5c304= +github.com/cmars/basen v0.0.0-20150613233007-fe3947df716e h1:0XBUw73chJ1VYSsfvcPvVT7auykAJce9FpRr10L6Qhw= +github.com/cmars/basen v0.0.0-20150613233007-fe3947df716e/go.mod h1:P13beTBKr5Q18lJe1rIoLUqjM+CB1zYrRg44ZqGuQSA= 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= @@ -348,38 +326,37 @@ github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:z github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/coinbase/rosetta-sdk-go/types v1.0.0 h1:jpVIwLcPoOeCR6o1tU+Xv7r5bMONNbHU7MuEHboiFuA= github.com/coinbase/rosetta-sdk-go/types v1.0.0/go.mod h1:eq7W2TMRH22GTW0N0beDnN931DW0/WOI1R2sdHNHG4c= -github.com/cometbft/cometbft v0.37.0 h1:M005vBaSaugvYYmNZwJOopynQSjwLoDTwflnQ/I/eYk= -github.com/cometbft/cometbft v0.37.0/go.mod h1:Y2MMMN//O5K4YKd8ze4r9jmk4Y7h0ajqILXbH5JQFVs= +github.com/cometbft/cometbft v0.37.1 h1:KLxkQTK2hICXYq21U2hn1W5hOVYUdQgDQ1uB+90xPIg= +github.com/cometbft/cometbft v0.37.1/go.mod h1:Y2MMMN//O5K4YKd8ze4r9jmk4Y7h0ajqILXbH5JQFVs= github.com/cometbft/cometbft-db v0.7.0 h1:uBjbrBx4QzU0zOEnU8KxoDl18dMNgDh+zZRUE0ucsbo= github.com/cometbft/cometbft-db v0.7.0/go.mod h1:yiKJIm2WKrt6x8Cyxtq9YTEcIMPcEe4XPxhgX59Fzf0= github.com/confio/ics23/go v0.9.0 h1:cWs+wdbS2KRPZezoaaj+qBleXgUk5WOQFMP3CQFGTr4= github.com/confio/ics23/go v0.9.0/go.mod h1:4LPZ2NYqnYIVRklaozjNR1FScgDJ2s5Xrp+e/mYVRak= -github.com/consensys/bavard v0.1.8-0.20210406032232-f3452dc9b572/go.mod h1:Bpd0/3mZuaj6Sj+PqrmIquiOKy397AKGThQPaGzNXAQ= -github.com/consensys/gnark-crypto v0.4.1-0.20210426202927-39ac3d4b3f1f/go.mod h1:815PAHg3wvysy0SyIqanF8gZ0Y1wjk/hrDHD/iT88+Q= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= 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-proto v1.0.0-beta.2 h1:X3OKvWgK9Gsejo0F1qs5l8Qn6xJV/AzgIWR2wZ8Nua8= github.com/cosmos/cosmos-proto v1.0.0-beta.2/go.mod h1:+XRCLJ14pr5HFEHIUcn51IKXD1Fy3rkEQqt4WqmN4V0= -github.com/cosmos/cosmos-sdk v0.47.0 h1:GKYtBpvjwuDEVix1vdnQpq7PuEOnItuEK0vdAL2cZ5g= -github.com/cosmos/cosmos-sdk v0.47.0/go.mod h1:FTtZbqiHCZ2vun9WrPq6qLQafNKkAuIhLAxzLjr2TiI= +github.com/cosmos/cosmos-sdk v0.47.3 h1:r0hGmZoAzP2D+MaPaFGHwAaTdFQq3pNpHaUp1BsffbM= +github.com/cosmos/cosmos-sdk v0.47.3/go.mod h1:c4OfLdAykA9zsj1CqrxBRqXzVz48I++JSvIMPSPcEmk= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= 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.4.2/go.mod h1:cLxOsn1ljAHSV527CHOtaIP91kK6cCrZETRBrkzItWU= -github.com/cosmos/gogoproto v1.4.7 h1:RzYKVnsEC7UIkDnhTIkqEB7LnIQbsySvmNEqPCiPevk= -github.com/cosmos/gogoproto v1.4.7/go.mod h1:gxGePp9qedovvl/StQL2BIJ6qlIBn1+9YxR0IulGBKA= +github.com/cosmos/gogoproto v1.4.10 h1:QH/yT8X+c0F4ZDacDv3z+xE3WU1P1Z3wQoLMBRJoKuI= +github.com/cosmos/gogoproto v1.4.10/go.mod h1:3aAZzeRWpAwr+SS/LLkICX2/kDFyaYVzckBDzygIxek= github.com/cosmos/iavl v0.20.0 h1:fTVznVlepH0KK8NyKq8w+U7c2L6jofa27aFX6YGlm38= github.com/cosmos/iavl v0.20.0/go.mod h1:WO7FyvaZJoH65+HFOsDir7xU9FWk2w9cHXNW1XHcl7A= -github.com/cosmos/ibc-go/v7 v7.0.0 h1:j4kyywlG0hhDmT9FmSaR5iCIka7Pz7kJTxGWY1nlV9Q= -github.com/cosmos/ibc-go/v7 v7.0.0/go.mod h1:BFh8nKWjr5zeR2OZfhkzdgDzj1+KjRn3aJLpwapStj8= +github.com/cosmos/ibc-go/v7 v7.0.1 h1:NIBNRWjlOoFvFQu1ZlgwkaSeHO5avf4C1YQiWegt8jw= +github.com/cosmos/ibc-go/v7 v7.0.1/go.mod h1:vEaapV6nuLPQlS+g8IKmxMo6auPi0i7HMv1PhViht/E= github.com/cosmos/ics23/go v0.9.1-0.20221207100636-b1abd8678aab h1:I9ialKTQo7248V827Bba4OuKPmk+FPzmTVHsLXaIJWw= github.com/cosmos/ics23/go v0.9.1-0.20221207100636-b1abd8678aab/go.mod h1:2CwqasX5dSD7Hbp/9b6lhK6BwoBDCBldx7gPKRukR60= github.com/cosmos/ledger-cosmos-go v0.12.1 h1:sMBxza5p/rNK/06nBSNmsI/WDqI0pVJFVNihy1Y984w= @@ -392,13 +369,10 @@ github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46t github.com/creachadair/taskgroup v0.4.2 h1:jsBLdAJE42asreGss2xZGZ8fJra7WtwnHWeJFxv2Li8= github.com/creachadair/taskgroup v0.4.2/go.mod h1:qiXUOSrbwAY3u0JPGTzObbE3yf9hcXHDKBZ2ZjpCbgM= 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/common/gherkin/go/v22 v22.0.0 h1:4K8NqptbvdOrjL9DEea6HFjSpbdT9+Q5kgLpmmsHYl0= github.com/cucumber/common/messages/go/v17 v17.1.1 h1:RNqopvIFyLWnKv0LfATh34SWBhXeoFTJnSrgm9cT/Ts= -github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= -github.com/dave/jennifer v1.2.0/go.mod h1:fIb+770HOpJ2fmN9EPPKOqm1vMGhB+TwXKMZhrIygKg= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -412,11 +386,8 @@ github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.0 h1:3GIJYXQDAKpLEFriGFN8SbSffak10UXHGdIcFaMPykY= github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.0/go.mod h1:3s92l0paYkZoIHuj4X93Teg/HB7eGM9x/zokGw+u4mY= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 h1:HbphB4TFFXpv7MNrT52FGrrgVXF1owhMVTHFZIlnvd4= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0/go.mod h1:DZGJHZMqrU4JJqFAWUS2UO1+lbSKsdiOoYi9Zzey7Fc= -github.com/deepmap/oapi-codegen v1.6.0/go.mod h1:ryDa9AgbELGeB+YEXE1dR53yAjHwFvE9iAUlWl9Al3M= -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/v2 v2.2007.4 h1:TRWBQg8UrlUhaFdco01nO2uXwzKS7zd+HVdwV/GHc4o= @@ -425,25 +396,17 @@ github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KP github.com/dgraph-io/ristretto v0.1.1 h1:6CWw5tJNgpegArSHpNHJKldNeq03FQCwYvfMVWajOK8= github.com/dgraph-io/ristretto v0.1.1/go.mod h1:S1GPSBCYCIhmVNfcth17y2zZtQT6wzkzgwUve0VDWWA= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-bitstream v0.0.0-20180413035011-3522498ce2c8/go.mod h1:VMaSuZ+SZcx/wljOQKvp5srsbCiKDEb6K2wC4+PiBmQ= github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= -github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= -github.com/dnaeon/go-vcr v1.1.0/go.mod h1:M7tiix8f0r6mKKJ3Yq/kqU1OYf3MnfmBWVbPx/yU9ko= -github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8= github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v1.4.2-0.20180625184442-8e610b2b55bf/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker v20.10.19+incompatible h1:lzEmjivyNHFHMNAFLXORMBXyGIhw/UP4DvJwvyKYq64= -github.com/docker/docker v20.10.19+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v24.0.1+incompatible h1:NxN81beIxDlUaVt46iUQrYHD9/W3u9EGl52r86O/IGw= +github.com/docker/docker v24.0.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= 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/dop251/goja v0.0.0-20211011172007-d99e4b8cbf48/go.mod h1:R9ET47fwRVRPZnOGvHxxhuZcbrMCuiqOz3Rlrh4KSnk= -github.com/dop251/goja_nodejs v0.0.0-20210225215109-d91c329300e7/go.mod h1:hn7BA7c8pLvoGndExHudxTDKZ84Pyvv+90pbBjbTz0Y= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= @@ -453,7 +416,6 @@ github.com/dvsekhvalnov/jose2go v1.5.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= -github.com/eclipse/paho.mqtt.golang v1.2.0/go.mod h1:H9keYFcgq3Qr5OUJm/JZI/i6U7joQ8SYLhZwfeOo6Ts= github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= @@ -466,8 +428,8 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.m github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/ethereum/go-ethereum v1.10.17 h1:XEcumY+qSr1cZQaWsQs5Kck3FHB0V2RiMHPdTBJ+oT8= -github.com/ethereum/go-ethereum v1.10.17/go.mod h1:Lt5WzjM07XlXc95YzrhosmR4J9Ahd6X2wyEV2SvGhk0= +github.com/ethereum/go-ethereum v1.10.20 h1:75IW830ClSS40yrQC1ZCMZCt5I+zU16oqId2SiQwdQ4= +github.com/ethereum/go-ethereum v1.10.20/go.mod h1:LWUN82TCHGpxB3En5HVmLLzPD7YSrEUFmFfN1nKkVN0= github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c h1:8ISkoahWXwZR41ois5lSJBSVw4D0OV19Ht/JSTzvSv0= github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A= github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4 h1:7HZCaLC5+BZpmbhCOZJ293Lz68O7PYrF2EzeiFMwCLk= @@ -475,8 +437,6 @@ github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5Kwzbycv github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/felixge/httpsnoop v1.0.2 h1:+nS9g82KMXccJ/wp0zyRW9ZBHFETmMGtkk+2CTTrW4o= github.com/felixge/httpsnoop v1.0.2/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= -github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= @@ -486,17 +446,11 @@ github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4 github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= -github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= -github.com/getkin/kin-openapi v0.53.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= -github.com/getkin/kin-openapi v0.61.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= 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.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= github.com/gin-gonic/gin v1.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8= -github.com/glycerine/go-unsnap-stream v0.0.0-20180323001048-9f0cb55181dd/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE= -github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24= -github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJpoZOs= 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= @@ -512,10 +466,7 @@ github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V 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-ole/go-ole v1.2.1 h1:2lOsA72HgjxAuMlKpFiCbHTvu44PIVkZ5hqm3RSdI/E= -github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= -github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= @@ -523,9 +474,7 @@ github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD87 github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= github.com/go-playground/validator/v10 v10.11.1 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJWXmqUsHwfTRRkQ= -github.com/go-sourcemap/sourcemap v2.1.3+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= -github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw= github.com/go-stack/stack v1.8.1/go.mod h1:dcoOX6HbPZSZptuspn9bctJ+N/CnF5gGygcUP3XYfe4= @@ -539,15 +488,12 @@ github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/E github.com/goccy/go-json v0.9.11 h1:/pAaQDLHEoCq/5FFmSKBswWmK6H0e8g4159Kc/X/nqk= 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/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gofrs/uuid v4.3.0+incompatible h1:CaSVZxm5B+7o45rtab4jC2G37WGYX1zQfuU2i6DSvnc= github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/gogo/googleapis v1.4.1-0.20201022092350-68b0159b7869/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= 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/golang-jwt/jwt/v4 v4.3.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= -github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= -github.com/golang/geo v0.0.0-20190916061304-5b978397cfec/go.mod h1:QZ0nwyI2jOfgRAoBvP+ab5aRr7c9x7lhGEJrKvBwjWI= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v1.1.0 h1:/d3pCKDPWNnvIWe0vVUpNP32qc8U3PDVxySP/y360qE= github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ= @@ -591,12 +537,10 @@ github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8l github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golangci/lint-1 v0.0.0-20181222135242-d2cdd8c08219/go.mod h1:/X8TswGSh1pIozq4ZwCfxS0WA5JGXguxk94ar/4c87Y= 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.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= -github.com/google/flatbuffers v1.11.0/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= @@ -615,7 +559,6 @@ github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= 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.1.1-0.20200604201612-c04b05f3adfa/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= @@ -645,7 +588,6 @@ github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26 h1:Xim43kblpZXfIBQsbu github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= @@ -676,10 +618,8 @@ github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/graph-gophers/graphql-go v1.3.0/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= @@ -698,13 +638,12 @@ github.com/gtank/ristretto255 v0.1.2/go.mod h1:Ph5OpO6c7xKUGROZfWVLiJf9icMDwUeIv github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= github.com/hashicorp/consul/sdk v0.3.0/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/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-getter v1.7.0 h1:bzrYP+qu/gMrL1au7/aDvkoOVGUJpeKBgbqRHACAFDY= -github.com/hashicorp/go-getter v1.7.0/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744= +github.com/hashicorp/go-getter v1.7.1 h1:SWiSWN/42qdpR0MdhaOc/bLR48PLuP1ZQtYLRlM69uY= +github.com/hashicorp/go-getter v1.7.1/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744= 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= @@ -735,16 +674,12 @@ github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2p github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= github.com/hdevalence/ed25519consensus v0.1.0 h1:jtBwzzcHuTmFrQN6xQZn6CQEO/V9f7HsjsjeEZ6auqU= github.com/hdevalence/ed25519consensus v0.1.0/go.mod h1:w3BHWjwJbFU29IRHL1Iqkw3sus+7FctEyM4RqDxYNzo= -github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= -github.com/holiman/uint256 v1.2.0/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/huandu/go-assert v1.1.5 h1:fjemmA7sSfYHJD7CUqs9qTwwfdNAx7/j2/ZlHXzNB3c= github.com/huandu/go-assert v1.1.5/go.mod h1:yOLvuqZwmcHIC5rIzrBhT7D3Q9c3GFnd0JrPVhn/06U= github.com/huandu/skiplist v1.2.0 h1:gox56QD77HzSC0w+Ws3MH3iie755GBJU1OER3h5VsYw= github.com/huandu/skiplist v1.2.0/go.mod h1:7v3iFjLcSAzO4fN5B8dvebvo/qsfumiLiDXMrPiHF9w= github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= -github.com/huin/goupnp v1.0.3-0.20220313090229-ca81a64b4204/go.mod h1:ZxNlw5WqJj6wSsRK5+YfflQGXYfccj5VgQsMNixHM7Y= -github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= 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/icza/dyno v0.0.0-20220812133438-f0b6f8a18845 h1:H+uM0Bv88eur3ZSsd2NGKg3YIiuXxwxtlN7HjE66UTU= @@ -752,26 +687,12 @@ github.com/icza/dyno v0.0.0-20220812133438-f0b6f8a18845/go.mod h1:c1tRKs5Tx7E2+u 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.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= 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/flux v0.65.1/go.mod h1:J754/zds0vvpfwuq7Gc2wRdVwEodfpCFM7mYlOw2LqY= -github.com/influxdata/influxdb v1.8.3/go.mod h1:JugdFhsvvI8gadxOI6noqNeeBHvWNTbfYGtiAn+2jhI= -github.com/influxdata/influxdb-client-go/v2 v2.4.0/go.mod h1:vLNHdxTJkIf2mSLvGrpj8TCcISApPoXkaxP8g9uRlW8= github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= -github.com/influxdata/influxql v1.1.1-0.20200828144457-65d3ef77d385/go.mod h1:gHp9y86a/pxhjJ+zMjNXiQAA197Xk9wLxaz+fGG+kWk= -github.com/influxdata/line-protocol v0.0.0-20180522152040-32c6aa80de5e/go.mod h1:4kt73NQhadE3daL3WhR5EJ/J2ocX0PZzwxQ0gXJ7oFE= -github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= -github.com/influxdata/line-protocol v0.0.0-20210311194329-9aa0e372d097/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo= -github.com/influxdata/promql/v2 v2.12.0/go.mod h1:fxOPu+DY0bqCTCECchSRtWfc+0X19ybifQhZoQNF5D8= -github.com/influxdata/roaring v0.4.13-0.20180809181101-fc520f41fab6/go.mod h1:bSgUQ7q5ZLSO+bKBGqJiCBGAl+9DxyW63zLTujjUlOE= -github.com/influxdata/tdigest v0.0.0-20181121200506-bf2b5ad3c0a9/go.mod h1:Js0mqiSBE6Ffsg94weZZ2c+v/ciT8QRHFOap7EKDrR0= -github.com/influxdata/usage-client v0.0.0-20160829180054-6d3895376368/go.mod h1:Wbbw6tYNvwa5dlB6304Sd+82Z3f7PmVZHVKU637d4po= github.com/ipfs/go-cid v0.2.0 h1:01JTiihFq9en9Vz0lc0VDWvZe/uBonGpzo4THP0vcQ0= github.com/ipfs/go-cid v0.2.0/go.mod h1:P+HXFDF4CVhaVayiEb4wkAy7zBHxBwsJyt0Y5U6MLro= -github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= -github.com/jedisct1/go-minisign v0.0.0-20190909160543-45766022959e/go.mod h1:G1CVv03EnqU1wYL2dFwXxW2An0az9JTl/ZsqXQeBlkU= -github.com/jhump/protoreflect v1.12.1-0.20220721211354-060cc04fc18b h1:izTof8BKh/nE1wrKOrloNA5q4odOarjf+Xpe+4qow98= +github.com/jhump/protoreflect v1.15.1 h1:HUMERORf3I3ZdX05WaQ6MIpd/NJ434hTp5YiKgfCL6c= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= @@ -787,60 +708,42 @@ github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/u 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.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/jsternberg/zap-logfmt v1.0.0/go.mod h1:uvPs/4X51zdkcm5jXl5SYoN+4RK21K8mysFmDaM/h+o= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= 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/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= -github.com/jwilder/encoding v0.0.0-20170811194829-b4e1701a28ef/go.mod h1:Ct9fl0F6iIOGgxJ5npU/IUOhOhqlVrGjyIZc8/MagT0= -github.com/karalabe/usb v0.0.2/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs= github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= 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/klauspost/compress v1.4.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= github.com/klauspost/compress v1.16.3 h1:XuJt9zzcnaz6a16/OU53ZjWp/v7/42WcR5t2a0PcNQY= github.com/klauspost/compress v1.16.3/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= -github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.2.3 h1:sxCkb+qR91z4vsqw4vGGZlDgPz3G7gjaLyK3V8y70BU= github.com/klauspost/cpuid/v2 v2.2.3/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= -github.com/klauspost/crc32 v0.0.0-20161016154125-cb6bfca970f6/go.mod h1:+ZoRqAPRLkC4NPOvfYeR5KNOrY6TD+/sAC3HXPZgDYg= -github.com/klauspost/pgzip v1.0.2-0.20170402124221-0bf5dcad4ada/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= 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.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.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= 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/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= -github.com/labstack/echo/v4 v4.2.1/go.mod h1:AA49e0DZ8kk5jTOOCKNuPR6oTnBS0dYiM4FW1e6jwpg= -github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= -github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= -github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw= github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= github.com/libp2p/go-libp2p v0.22.0 h1:2Tce0kHOp5zASFKJbNzRElvh0iZwdtG5uZheNW8chIw= github.com/libp2p/go-libp2p v0.22.0/go.mod h1:UDolmweypBSjQb2f7xutPnwZ/fxioLbMBxSjRksxxU4= -github.com/libp2p/go-libp2p-core v0.20.1 h1:fQz4BJyIFmSZAiTbKV8qoYhEH5Dtv/cVhZbG3Ib/+Cw= -github.com/libp2p/go-libp2p-core v0.20.1/go.mod h1:6zR8H7CvQWgYLsbG4on6oLNSGcyKaYFSEYyDt51+bIY= github.com/libp2p/go-openssl v0.1.0 h1:LBkKEcUv6vtZIQLVTegAil8jbNpJErQ9AnT+bWV+Ooo= github.com/libp2p/go-openssl v0.1.0/go.mod h1:OiOxwPpL3n4xlenjx2h7AwSGaFSC/KZvf6gNdOBQMtc= github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= @@ -849,31 +752,24 @@ github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0Q github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= -github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/manifoldco/promptui v0.9.0 h1:3V4HzJk1TtXW1MTZMP7mdlwbBpIinw3HztaIlYthEiA= github.com/manifoldco/promptui v0.9.0/go.mod h1:ka04sppxSGFAtxX0qhlYQjISsg9mR4GWtQEhdbn6Pgg= -github.com/matryer/moq v0.0.0-20190312154309-6cfb0558e1bd/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.8/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.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= -github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.18 h1:DOKFKCQ7FNG2L1rbrmstDN4QVRdS89Nkh85u68Uwp98= +github.com/mattn/go-isatty v0.0.18/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-pointer v0.0.1 h1:n+XhsuGeVO6MEAp7xyEukFINEa+Quek5psIR/ylA6o0= github.com/mattn/go-pointer v0.0.1/go.mod h1:2zXcozF6qYGgmsG+SeTZz3oAbFLdD3OWqnUbNvJZAlc= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/mattn/go-sqlite3 v1.14.16 h1:yOQRA0RpS5PFz/oikGwBEqvAWhWg5ufRz4ETLjwpU1Y= -github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= @@ -885,6 +781,8 @@ github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= github.com/minio/sha256-simd v1.0.0 h1:v1ta+49hkWZyvaKwrQB8elexRqm6Y0aMLjCNsrYxo6g= github.com/minio/sha256-simd v1.0.0/go.mod h1:OuYzVNI5vcoYIAmbIvHPl3N3jUzVedXbKy5RFepssQM= +github.com/misko9/go-substrate-rpc-client/v4 v4.0.0-20230413215336-5bd2aea337ae h1:ZYbJh4TLwfSuSQe6DT/1982SfNNBcmvzrX5FycfSrmo= +github.com/misko9/go-substrate-rpc-client/v4 v4.0.0-20230413215336-5bd2aea337ae/go.mod h1:XexEkZgpnQ3sqUYz84DFoVUcDake6G/tYHrwdbdERhM= 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= @@ -896,10 +794,8 @@ github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS4 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.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/pointerstructure v1.2.0/go.mod h1:BRAsLI5zgXmw97Lf6s25bs8ohIXc3tViBH44KcwB2g4= github.com/moby/term v0.0.0-20220808134915-39b0c02b01ae h1:O4SWKdcHVCvYqyDV+9CJA1fcDN2L11Bule0iFy3YlAI= 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= @@ -907,12 +803,9 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJ 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 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= -github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8= github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae/go.mod h1:qAyveg+e4CE+eKJXWVjKXM4ck2QobLqTDytGJbLLhJg= 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/multiformats/go-base32 v0.0.4 h1:+qMh4a2f37b4xTNs6mqitDinryCI+tfO2dRVMN9mjSE= @@ -933,8 +826,6 @@ github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRW github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/grpc-proxy v0.0.0-20181017164139-0f1106ef9c76/go.mod h1:x5OoJHDHqxHS801UIuhqGl6QdSAEJvtausosHSdazIo= -github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= -github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= @@ -948,13 +839,10 @@ github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= -github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -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= @@ -974,7 +862,6 @@ github.com/opencontainers/runc v1.1.3 h1:vIXrkId+0/J2Ymu2m7VjGvbSlAId9XNRPhn2p4b github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/opentracing/opentracing-go v1.0.3-0.20180606204148-bd9c31933947/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= @@ -985,20 +872,16 @@ github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIw 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/paulbellamy/ratecounter v0.2.0/go.mod h1:Hfx1hDpSGoqxkVVpBi/IlYD7kChlfo5C6hzIHwPqfFE= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= 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.6 h1:nrzqCb7j9cDFj2coyLNLaZuJTLjWjlaz6nvTvIwycIU= -github.com/pelletier/go-toml/v2 v2.0.6/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek= +github.com/pelletier/go-toml/v2 v2.0.8 h1:0ctb6s9mE31h0/lhu+J6OPmVeDxJn+kYnJc2jZR9tGQ= +github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= -github.com/peterh/liner v1.0.1-0.20180619022028-8c1271fcf47f/go.mod h1:xIteQHvHuaLYG9IFj6mSxM0fCKrs34IrEQUhOYuGPHc= -github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= -github.com/petermattis/goid v0.0.0-20221215004737-a150e88a970d h1:htwtWgtQo8YS6JFWWi2DNgY0RwSGJ1ruMoxY6CUUclk= -github.com/petermattis/goid v0.0.0-20221215004737-a150e88a970d/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= -github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= +github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08 h1:hDSdbBuw3Lefr6R18ax0tZ2BJeNB3NehB3trOwYBsdU= +github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pierrec/xxHash v0.1.5 h1:n/jBpwTHiER4xYvK3/CdPVnLDPchj8eTJFFLUb4QHBo= @@ -1009,7 +892,6 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= -github.com/pkg/term v0.0.0-20180730021639-bffc007b7fd5/go.mod h1:eCbImbZ95eXtAUIbLAuAVnBnwf83mjf6QIVH8SHYwqQ= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= @@ -1019,8 +901,8 @@ github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5Fsn github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= 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.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw= -github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y= +github.com/prometheus/client_golang v1.15.0 h1:5fCgGYogn0hFdhyhLbw7hEsWxufKtY9klyvdNfFlFhM= +github.com/prometheus/client_golang v1.15.0/go.mod h1:e9yaBhRPU2pPNsZwE+JdQl0KEt1N9XgF6zxWmaC0xOk= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= @@ -1029,16 +911,14 @@ github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6T github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4= github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= -github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= 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.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= -github.com/prometheus/common v0.40.0 h1:Afz7EVRqGg2Mqqf4JuF9vdvp1pi220m55Pi9T2JnO4Q= -github.com/prometheus/common v0.40.0/go.mod h1:L65ZJPSmfn/UBWLQIHV7dBrKFidB/wPlF1y5TlSt9OE= +github.com/prometheus/common v0.42.0 h1:EKsfXEYo4JpWMHH5cg+KOUWeuJSov1Id8zGR8eeI1YM= +github.com/prometheus/common v0.42.0/go.mod h1:xBwqVerjNdUDjgODMpudtOMwlOwf2SaTr1yjz4b7Zbc= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= @@ -1047,7 +927,6 @@ github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4O github.com/prometheus/procfs v0.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI= github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY= -github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ= github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Unghqrcc= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= @@ -1059,8 +938,6 @@ github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= 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/retailnext/hllpp v1.0.1-0.20180308014038-101a6d2f8b52/go.mod h1:RDpi1RftBQPUCDRw6SmxeaREsAaRKnOclghuzp/WRzc= -github.com/rjeczalik/notify v0.9.1/go.mod h1:rKwnCoCGeuQnwBtTSPL9Dad03Vh2n40ePRrjvIXnJho= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= 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= @@ -1068,6 +945,9 @@ github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZV github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.8.3 h1:O+qNyWn7Z+F9M0ILBHgMVPuB1xTOucVd5gtaYyXBpRo= github.com/rs/cors v1.8.3/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= +github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= +github.com/rs/zerolog v1.29.1 h1:cO+d60CHkknCbvzEWxP0S9K6KqyTjrCNUy1LdQLCGPc= +github.com/rs/zerolog v1.29.1/go.mod h1:Le6ESbR7hc+DP6Lt1THiV8CQSdkkNrd3R0XbEgp3ZBU= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= @@ -1076,18 +956,13 @@ github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0 github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71efZx0= github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/segmentio/kafka-go v0.1.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= -github.com/segmentio/kafka-go v0.2.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo= -github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible h1:Bn1aCHHRnjv4Bl16T8rcaFjYSrGrIZvpiGO6P3Q4GpU= -github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= 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.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= -github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= 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/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= @@ -1105,8 +980,8 @@ github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/cobra v1.6.1 h1:o94oiPyS4KD1mPy2fmcYYHHfCxLqYjJOhGsCHFZtEzA= -github.com/spf13/cobra v1.6.1/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY= +github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= +github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= @@ -1117,9 +992,6 @@ github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= github.com/spf13/viper v1.15.0 h1:js3yy885G8xwJa6iOISGFwd+qlUo5AvyXb7CiihdtiU= github.com/spf13/viper v1.15.0/go.mod h1:fFcTBJxvhhzSJiZy8n+PeW6t8l+KeT/uTARa0jHOQLA= -github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q= -github.com/strangelove-ventures/go-subkey v1.0.7 h1:cOP/Lajg3uxV/tvspu0m6+0Cu+DJgygkEAbx/s+f35I= -github.com/strangelove-ventures/go-subkey v1.0.7/go.mod h1:E34izOIEm+sZ1YmYawYRquqBQWeZBjVB4pF7bMuhc1c= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= @@ -1128,7 +1000,7 @@ github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/testify v1.2.0/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.1.5-0.20170601210322-f6abca593680/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= @@ -1139,11 +1011,12 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ 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.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8= github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= -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/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c h1:g+WoO5jjkqGAzHWCjJB1zZfXPIAaDpzXIEJ0eS6B5Ok= @@ -1152,14 +1025,14 @@ github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2l github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME= github.com/tidwall/btree v1.6.0 h1:LDZfKfQIBHGHWSwckhXI0RPSXzlo+KYdjK7FWSqOzzg= github.com/tidwall/btree v1.6.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= -github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= -github.com/tklauser/go-sysconf v0.3.5 h1:uu3Xl4nkLzQfXNsWn15rPc/HQCJKObbt1dKJeWp3vU4= -github.com/tklauser/go-sysconf v0.3.5/go.mod h1:MkWzOF4RMCshBAMXuhXJs64Rte09mITnppBXY/rYEFI= -github.com/tklauser/numcpus v0.2.2 h1:oyhllyrScuYI6g+h/zUvNXNp1wy7x8qQy3t/piefldA= -github.com/tklauser/numcpus v0.2.2/go.mod h1:x3qojaO3uyYt0i56EW/VUYs7uBvdl2fkfZFu0T9wgjM= +github.com/tklauser/go-sysconf v0.3.10 h1:IJ1AZGZRWbY8T5Vfk04D9WOA5WSejdflXxP03OUqALw= +github.com/tklauser/numcpus v0.4.0 h1:E53Dm1HjH1/R2/aoCtXtPgzmElmn51aOkhCFSuZq//o= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= -github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= +github.com/tyler-smith/go-bip32 v1.0.0 h1:sDR9juArbUgX+bO/iblgZnMPeWY1KZMUC2AFUJdv5KE= +github.com/tyler-smith/go-bip32 v1.0.0/go.mod h1:onot+eHknzV4BVPwrzqY5OoVpyCvnwD7lMawL5aQupE= +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.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= @@ -1170,13 +1043,7 @@ github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= -github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= -github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= -github.com/willf/bitset v1.1.3/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= -github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -1207,20 +1074,19 @@ go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqe 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.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/goleak v1.1.12 h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA= 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.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= -go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= +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/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.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= +golang.org/x/crypto v0.0.0-20170613210332-850760c427c5/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-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -1228,23 +1094,16 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk 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-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190909091759-094676da4a83/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/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-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.7.0 h1:AvwMYaRytfdeVt3u6mLaxYtErKYjxA2OXjJ1HHq6t3A= -golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/crypto v0.9.0 h1:LF6fAI+IutBocDJ2OT0Q1g8plpYljMZ4+lty+dsqw3g= +golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/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= @@ -1255,9 +1114,8 @@ golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u0 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-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= -golang.org/x/exp v0.0.0-20230310171629-522b1b587ee0 h1:LGJsf5LRplCck6jUCH3dBL2dmycNruWNF5xugkSlfXw= -golang.org/x/exp v0.0.0-20230310171629-522b1b587ee0/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= -golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= +golang.org/x/exp v0.0.0-20230515195305-f3d0a9c9a5cc h1:mCRnTeVUjcrhlRmO0VK8a6k6Rrf6TF9htwo2pJVSjIU= +golang.org/x/exp v0.0.0-20230515195305-f3d0a9c9a5cc/go.mod h1:V1LtkGg67GoY2N1AnLN78QLrzxkLyJw7RJb1gzOOz9w= 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= @@ -1284,8 +1142,8 @@ 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.9.0 h1:KENHtAZL2y3NLMYZeHY9DW8HW8V+kQyJsY/V9JlKvCs= -golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.10.0 h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk= +golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= 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= @@ -1321,22 +1179,18 @@ golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/ 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-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= 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-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210220033124-5f55cee0dc0d/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-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-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210610132358-84b48f89b13b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= @@ -1350,8 +1204,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= -golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ= -golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= +golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= 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= @@ -1377,8 +1231,8 @@ golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= -golang.org/x/oauth2 v0.5.0 h1:HuArIo48skDwlrvM3sEdHXElYslAMsf3KwRkkW4MC4s= -golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I= +golang.org/x/oauth2 v0.6.0 h1:Lh8GPgSKBfWSwFvtuWOfeI3aAAnbXTSutYxJiOJFgIw= +golang.org/x/oauth2 v0.6.0/go.mod h1:ycmewcwgD4Rpr3eZJLSB4Kyyljb3qDh40vJ8STE5HKw= 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= @@ -1393,8 +1247,8 @@ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/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.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= -golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI= +golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 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= @@ -1406,7 +1260,6 @@ golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190130150945-aca44879d564/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-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1416,7 +1269,6 @@ golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/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-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1427,7 +1279,6 @@ golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/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-20200107162124-548cf772de50/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= @@ -1441,13 +1292,10 @@ golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7w 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-20200826173525-f9321e4c35a6/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= @@ -1455,16 +1303,12 @@ golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7w 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-20210225134936-a50acf3fe073/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-20210316164454-77fc1eacc6aa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210420205809-ac73e9fd8988/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1475,10 +1319,10 @@ golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBc 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-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210819135213-f52c844e1c1c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/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-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1496,21 +1340,20 @@ golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= +golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.6.0 h1:clScbb1cHjoCkyRbWwBEUZ5H/tIFu5TAXIqaZD0Gcjw= -golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= +golang.org/x/term v0.8.0 h1:n5xxQn2i3PC0yLAbjTpNT85q/Kgzcr2gIoX9OrJUols= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= 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= @@ -1521,20 +1364,16 @@ 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.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68= -golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-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.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.1.0 h1:xYY+Bajn2a7VBmTM5GikTmnK8ZuX8YgnQCqZpbBNtmA= -golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/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-20190206041539-40960b6deb8e/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= @@ -1559,7 +1398,6 @@ golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtn 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-20200108203644-89082a384178/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= @@ -1594,8 +1432,8 @@ golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.4/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.7.0 h1:W4OVu8VVOaIO0yzWMNdepAulS7YfoS3Zabrm8DOXXU4= -golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= +golang.org/x/tools v0.9.3 h1:Gn1I8+64MsuTb/HpH+LmQtNas23LhUVr3rYZ0eKuaMM= +golang.org/x/tools v0.9.3/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= 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= @@ -1605,12 +1443,6 @@ golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNq golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= -gonum.org/v1/gonum v0.0.0-20181121035319-3f7ecaa7e8ca/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= -gonum.org/v1/gonum v0.6.0/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU= -gonum.org/v1/netlib v0.0.0-20181029234149-ec6d1f5cefe6/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= -gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= -gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= 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= @@ -1678,7 +1510,6 @@ google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRn 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-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= -google.golang.org/genproto v0.0.0-20190716160619-c506a9f90610/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= 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= @@ -1686,7 +1517,6 @@ google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvx 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-20200108215221-bd8f9a0ef82f/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= @@ -1782,8 +1612,8 @@ google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqw google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= -google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44 h1:EfLuoKW5WfkgVdDy7dTK8qSbH37AX5mj/MFh+bGPz14= -google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44/go.mod h1:8B0gmkoRebU8ukX6HP+4wrVQUY1+6PkQ44BSyIlflHA= +google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4 h1:DdoeryqhaXp1LtT/emMP1BRJPHHKFi5akj/nbx/zNTA= +google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= @@ -1825,8 +1655,8 @@ google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACu google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.53.0 h1:LAv2ds7cmFV/XTS3XG1NneeENYrXGmorPxsBbptIjNc= -google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= +google.golang.org/grpc v1.55.0 h1:3Oj82/tFSCeUrRTg/5E/7d/W5A1tj6Ky1ABAuZuv5ag= +google.golang.org/grpc v1.55.0/go.mod h1:iYEXKGkEBhg1PjZQvoYEVPTDkHo1/bjTnfwTeGONTY8= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= 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= @@ -1843,15 +1673,14 @@ google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.29.1 h1:7QBf+IK2gx70Ap/hDsOmam3GE0v9HicjfEdAxE62UoM= -google.golang.org/protobuf v1.29.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= +google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= 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/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/cheggaaa/pb.v1 v1.0.27/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= @@ -1861,11 +1690,9 @@ gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce h1:+JknDZhAj8YMt7GC73Ei8pv4MzjDUNPHgQWJdtMAaDU= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= -gopkg.in/olebedev/go-duktape.v3 v3.0.0-20200619000410-60c24ae608a6/go.mod h1:uAJfkITjFhyEEuUfm7bsmCZRbW5WRq8s9EY8HZ6hCns= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= 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/urfave/cli.v1 v1.20.0/go.mod h1:vuBzUtMdQeixQj8LVd+/98pzhxNGQoyuPBlsXHOQNO0= gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= @@ -1882,7 +1709,6 @@ gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C 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 v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= -gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= gotest.tools/v3 v3.4.0 h1:ZazjZUfuVeZGLAmlKKuyv3IKP5orXcwtOwDQH6YVr6o= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -1892,7 +1718,8 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh 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= +launchpad.net/gocheck v0.0.0-20140225173054-000000000087 h1:Izowp2XBH6Ya6rv+hqbceQyw/gSGoXfH/UPoTGduL54= +launchpad.net/gocheck v0.0.0-20140225173054-000000000087/go.mod h1:hj7XX3B/0A+80Vse0e+BUHsHMTEhd0O4cpUHr/e/BUM= lukechampine.com/blake3 v1.1.7 h1:GgRMhmdsuK8+ii6UZFDL8Nb+VyMwadAgcJyfYHxG6n0= lukechampine.com/blake3 v1.1.7/go.mod h1:tkKEOtDkNtklkXtLNEOGNq5tcV90tJiA1vAA12R78LA= lukechampine.com/uint128 v1.2.0 h1:mBi/5l91vocEN8otkC5bDLhi2KdCticRiwbdB0O+rjI= @@ -1903,28 +1730,27 @@ modernc.org/ccgo/v3 v3.16.13 h1:Mkgdzl46i5F/CNR/Kj80Ri59hC8TKAhZrYSaqvkwzUw= modernc.org/ccgo/v3 v3.16.13/go.mod h1:2Quk+5YgpImhPjv2Qsob1DnZ/4som1lJTodubIcoUkY= modernc.org/ccorpus v1.11.6 h1:J16RXiiqiCgua6+ZvQot4yUuUy8zxgqbqEEUuGPlISk= modernc.org/httpfs v1.0.6 h1:AAgIpFZRXuYnkjftxTAZwMIiwEqAfk8aVB2/oA6nAeM= -modernc.org/libc v1.22.3 h1:D/g6O5ftAfavceqlLOFwaZuA5KYafKwmr30A6iSqoyY= -modernc.org/libc v1.22.3/go.mod h1:MQrloYP209xa2zHome2a8HLiLm6k0UT8CoHpV74tOFw= +modernc.org/libc v1.22.5 h1:91BNch/e5B0uPbJFgqbxXuOnxBQjlS//icfQEGmvyjE= +modernc.org/libc v1.22.5/go.mod h1:jj+Z7dTNX8fBScMVNRAYZ/jF91K8fdT2hYMThc3YjBY= modernc.org/mathutil v1.5.0 h1:rV0Ko/6SfM+8G+yKiyI830l3Wuz1zRutdslNoQ0kfiQ= modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= modernc.org/memory v1.5.0 h1:N+/8c5rE6EqugZwHii4IFsaJ7MUhoWX07J5tC/iI5Ds= modernc.org/memory v1.5.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= modernc.org/opt v0.1.3 h1:3XOZf2yznlhC+ibLltsDGzABUGVx8J6pnFMS3E4dcq4= modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= -modernc.org/sqlite v1.21.0 h1:4aP4MdUf15i3R3M2mx6Q90WHKz3nZLoz96zlB6tNdow= -modernc.org/sqlite v1.21.0/go.mod h1:XwQ0wZPIh1iKb5mkvCJ3szzbhk+tykC8ZWqTRTgYRwI= +modernc.org/sqlite v1.23.0 h1:MWTFBI5H1WLnXpNBh/BTruBVqzzoh28DA0iOnlkkRaM= +modernc.org/sqlite v1.23.0/go.mod h1:OrDj17Mggn6MhE+iPbBNf7RGKODDE9NFT0f3EwDzJqk= modernc.org/strutil v1.1.3 h1:fNMm+oJklMGYfU9Ylcywl0CO5O6nTfaowNsh2wpPjzY= modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw= -modernc.org/tcl v1.15.1 h1:mOQwiEK4p7HruMZcwKTZPw/aqtGM4aY00uzWhlKKYws= +modernc.org/tcl v1.15.2 h1:C4ybAYCGJw968e+Me18oW55kD/FexcHbqH2xak1ROSY= modernc.org/token v1.0.1 h1:A3qvTqOwexpfZZeyI0FeGPDlSWX5pjZu9hF4lU+EKWg= modernc.org/token v1.0.1/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= -modernc.org/z v1.7.0 h1:xkDw/KepgEjeizO2sNco+hqYkU12taxQFqPEmgm1GWE= +modernc.org/z v1.7.3 h1:zDJf6iHjrnB+WRD88stbXokugjyc0/pB91ri1gO6LZY= nhooyr.io/websocket v1.8.6 h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k= nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= pgregory.net/rapid v0.5.5 h1:jkgx1TjbQPD/feRoK+S/mXw9e1uj6WilpHrXJowi6oA= pgregory.net/rapid v0.5.5/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= 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.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= diff --git a/integration_tests/send_test.go b/integration_tests/send_test.go index 0ce0a01f..8016a871 100644 --- a/integration_tests/send_test.go +++ b/integration_tests/send_test.go @@ -73,7 +73,7 @@ func TestXionSendPlatformFee(t *testing.T) { msg, err := cdc.MarshalInterfaceJSON(&setPlatformPercentageMsg) require.NoError(t, err) - prop := cosmos.Proposal{ + prop := cosmos.TxProposalv1{ Messages: []json.RawMessage{msg}, Metadata: "", Deposit: "100uxion", From a8ce3d96fc2f12500857b582d011617158b0b6bc Mon Sep 17 00:00:00 2001 From: Eduardo Diaz Date: Mon, 12 Jun 2023 18:56:43 -0400 Subject: [PATCH 083/501] fix proto type generation --- proto/xion/globalfee/{ => v1}/genesis.proto | 0 proto/xion/globalfee/{ => v1}/query.proto | 0 x/globalfee/types/genesis.pb.go | 75 ++++++++++----------- x/globalfee/types/query.pb.go | 66 +++++++++--------- x/globalfee/types/query.pb.gw.go | 4 +- 5 files changed, 71 insertions(+), 74 deletions(-) rename proto/xion/globalfee/{ => v1}/genesis.proto (100%) rename proto/xion/globalfee/{ => v1}/query.proto (100%) diff --git a/proto/xion/globalfee/genesis.proto b/proto/xion/globalfee/v1/genesis.proto similarity index 100% rename from proto/xion/globalfee/genesis.proto rename to proto/xion/globalfee/v1/genesis.proto diff --git a/proto/xion/globalfee/query.proto b/proto/xion/globalfee/v1/query.proto similarity index 100% rename from proto/xion/globalfee/query.proto rename to proto/xion/globalfee/v1/query.proto diff --git a/x/globalfee/types/genesis.pb.go b/x/globalfee/types/genesis.pb.go index 1e9188ad..0c453d81 100644 --- a/x/globalfee/types/genesis.pb.go +++ b/x/globalfee/types/genesis.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: gaia/globalfee/v1beta1/genesis.proto +// source: xion/globalfee/v1/genesis.proto package types @@ -7,8 +7,8 @@ import ( fmt "fmt" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" types "github.com/cosmos/cosmos-sdk/types" - _ "github.com/gogo/protobuf/gogoproto" - proto "github.com/gogo/protobuf/proto" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" io "io" math "math" math_bits "math/bits" @@ -35,7 +35,7 @@ func (m *GenesisState) Reset() { *m = GenesisState{} } func (m *GenesisState) String() string { return proto.CompactTextString(m) } func (*GenesisState) ProtoMessage() {} func (*GenesisState) Descriptor() ([]byte, []int) { - return fileDescriptor_015b3e8b7a7c65c5, []int{0} + return fileDescriptor_a27689c4e7986e7d, []int{0} } func (m *GenesisState) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -92,7 +92,7 @@ func (m *Params) Reset() { *m = Params{} } func (m *Params) String() string { return proto.CompactTextString(m) } func (*Params) ProtoMessage() {} func (*Params) Descriptor() ([]byte, []int) { - return fileDescriptor_015b3e8b7a7c65c5, []int{1} + return fileDescriptor_a27689c4e7986e7d, []int{1} } func (m *Params) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -143,43 +143,42 @@ func (m *Params) GetMaxTotalBypassMinFeeMsgGasUsage() uint64 { } func init() { - proto.RegisterType((*GenesisState)(nil), "gaia.globalfee.v1beta1.GenesisState") - proto.RegisterType((*Params)(nil), "gaia.globalfee.v1beta1.Params") + proto.RegisterType((*GenesisState)(nil), "xion.globalfee.v1.GenesisState") + proto.RegisterType((*Params)(nil), "xion.globalfee.v1.Params") } -func init() { - proto.RegisterFile("gaia/globalfee/v1beta1/genesis.proto", fileDescriptor_015b3e8b7a7c65c5) -} +func init() { proto.RegisterFile("xion/globalfee/v1/genesis.proto", fileDescriptor_a27689c4e7986e7d) } -var fileDescriptor_015b3e8b7a7c65c5 = []byte{ - // 428 bytes of a gzipped FileDescriptorProto +var fileDescriptor_a27689c4e7986e7d = []byte{ + // 440 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x92, 0x4d, 0x6e, 0xd3, 0x40, - 0x14, 0xc7, 0x33, 0x04, 0x45, 0xc2, 0x65, 0x51, 0x59, 0x15, 0x32, 0x55, 0x35, 0x8e, 0x2c, 0x84, - 0x2c, 0x01, 0x63, 0xb5, 0xec, 0x58, 0x1a, 0x44, 0xc4, 0xa2, 0x22, 0x0a, 0x65, 0xc3, 0x66, 0x78, - 0x36, 0xd3, 0x61, 0x44, 0xc6, 0x63, 0xe5, 0x4d, 0x50, 0xb2, 0xe4, 0x06, 0x1c, 0x80, 0x13, 0x70, - 0x06, 0x0e, 0xd0, 0x65, 0x97, 0xac, 0x0c, 0x4a, 0x76, 0x5d, 0x72, 0x02, 0x34, 0x1e, 0xd3, 0x52, - 0xa5, 0x59, 0xd9, 0xf2, 0xfb, 0xfd, 0x3f, 0xfc, 0xf4, 0x82, 0x07, 0x12, 0x14, 0x64, 0x72, 0x6a, - 0x0a, 0x98, 0x9e, 0x0a, 0x91, 0x7d, 0x3e, 0x2c, 0x84, 0x85, 0xc3, 0x4c, 0x8a, 0x4a, 0xa0, 0x42, - 0x56, 0xcf, 0x8c, 0x35, 0xe1, 0x3d, 0x47, 0xb1, 0x4b, 0x8a, 0x75, 0xd4, 0xfe, 0x9e, 0x34, 0xd2, - 0xb4, 0x48, 0xe6, 0xde, 0x3c, 0xbd, 0x4f, 0x4b, 0x83, 0xda, 0x60, 0x56, 0x00, 0x5e, 0x19, 0x96, - 0x46, 0x55, 0x7e, 0x9e, 0xbc, 0x0f, 0xee, 0x8e, 0xbc, 0xfd, 0x1b, 0x0b, 0x56, 0x84, 0xe3, 0x60, - 0x50, 0xc3, 0x0c, 0x34, 0x46, 0x64, 0x48, 0xd2, 0x9d, 0x23, 0xca, 0x6e, 0x8e, 0x63, 0xe3, 0x96, - 0xca, 0xa3, 0xb3, 0x26, 0xee, 0x5d, 0x34, 0xf1, 0xae, 0x57, 0x3d, 0x36, 0x5a, 0x59, 0xa1, 0x6b, - 0xbb, 0x9c, 0x74, 0x3e, 0xc9, 0xb7, 0x7e, 0x30, 0xf0, 0x70, 0xf8, 0x83, 0x04, 0xa1, 0x56, 0x95, - 0xd2, 0x73, 0xcd, 0x25, 0x20, 0xaf, 0x67, 0xaa, 0x14, 0x2e, 0xa9, 0x9f, 0xee, 0x1c, 0x1d, 0x30, - 0x5f, 0x95, 0xb9, 0xaa, 0x97, 0x31, 0x2f, 0x44, 0xf9, 0xdc, 0xa8, 0x2a, 0xaf, 0xbb, 0x9c, 0x83, - 0x4d, 0xfd, 0x55, 0xe6, 0x9f, 0x26, 0xbe, 0xbf, 0x04, 0x3d, 0x7d, 0x96, 0x6c, 0x52, 0xc9, 0xf7, - 0x5f, 0xf1, 0x23, 0xa9, 0xec, 0xc7, 0x79, 0xc1, 0x4a, 0xa3, 0xb3, 0x6e, 0x2f, 0xfe, 0xf1, 0x04, - 0x3f, 0x7c, 0xca, 0xec, 0xb2, 0x16, 0xf8, 0x2f, 0x10, 0x27, 0xbb, 0x9d, 0xc7, 0x08, 0x70, 0xdc, - 0x3a, 0x84, 0x5f, 0x48, 0x10, 0x15, 0xcb, 0x1a, 0x10, 0xb9, 0x56, 0x15, 0x3f, 0x15, 0x82, 0x6b, - 0x94, 0xbc, 0xd5, 0x45, 0xb7, 0x86, 0xfd, 0xf4, 0x4e, 0xfe, 0xea, 0xa2, 0x89, 0x93, 0x6d, 0xcc, - 0xb5, 0xa2, 0xb1, 0x2f, 0xba, 0x8d, 0x4d, 0x26, 0x7b, 0x7e, 0x74, 0xac, 0xaa, 0x97, 0x42, 0x1c, - 0xa3, 0x3c, 0x71, 0x9f, 0xc3, 0xd7, 0xc1, 0x43, 0x0d, 0x0b, 0x6e, 0x8d, 0x85, 0x29, 0xbf, 0x41, - 0xec, 0x7e, 0x78, 0x8e, 0x20, 0x45, 0xd4, 0x1f, 0x92, 0xf4, 0xf6, 0x24, 0xd6, 0xb0, 0x38, 0x71, - 0x70, 0x7e, 0xdd, 0x6d, 0x04, 0xf8, 0xd6, 0x61, 0x79, 0x7e, 0xb6, 0xa2, 0xe4, 0x7c, 0x45, 0xc9, - 0xef, 0x15, 0x25, 0x5f, 0xd7, 0xb4, 0x77, 0xbe, 0xa6, 0xbd, 0x9f, 0x6b, 0xda, 0x7b, 0x97, 0x6e, - 0x6e, 0xab, 0x3d, 0xd0, 0xc5, 0x7f, 0x27, 0xda, 0x76, 0x2d, 0x06, 0xed, 0x2d, 0x3d, 0xfd, 0x1b, - 0x00, 0x00, 0xff, 0xff, 0x90, 0xb9, 0xb2, 0x8a, 0xc1, 0x02, 0x00, 0x00, + 0x14, 0xc7, 0x63, 0x82, 0x22, 0xe1, 0xb2, 0x28, 0x56, 0x17, 0x6e, 0x55, 0xd9, 0x91, 0x17, 0x28, + 0x12, 0xed, 0x8c, 0x52, 0x76, 0x2c, 0x0d, 0x6a, 0x84, 0x50, 0x45, 0x15, 0xca, 0x06, 0x16, 0xd6, + 0x1b, 0x33, 0x1d, 0x46, 0x78, 0x66, 0xac, 0xbc, 0x49, 0x95, 0x2c, 0xb9, 0x01, 0x07, 0xe0, 0x04, + 0x9c, 0x81, 0x03, 0x74, 0xd9, 0x25, 0xab, 0x80, 0x92, 0x5d, 0x97, 0x9c, 0x00, 0x8d, 0xc7, 0x40, + 0xab, 0x34, 0x2b, 0x5b, 0x7e, 0xbf, 0xff, 0x87, 0x9f, 0x5e, 0x98, 0xce, 0xa4, 0xd1, 0x54, 0x54, + 0x86, 0x41, 0x75, 0xce, 0x39, 0xbd, 0x18, 0x52, 0xc1, 0x35, 0x47, 0x89, 0xa4, 0x9e, 0x18, 0x6b, + 0xa2, 0x47, 0x0e, 0x20, 0xff, 0x00, 0x72, 0x31, 0xdc, 0xdb, 0x11, 0x46, 0x98, 0x66, 0x4a, 0xdd, + 0x9b, 0x07, 0xf7, 0x92, 0xd2, 0xa0, 0x32, 0x48, 0x19, 0xa0, 0xb3, 0x61, 0xdc, 0xc2, 0x90, 0x96, + 0x46, 0x6a, 0x3f, 0xcf, 0xde, 0x87, 0x0f, 0x47, 0xde, 0xf9, 0x8d, 0x05, 0xcb, 0xa3, 0x57, 0x61, + 0xaf, 0x86, 0x09, 0x28, 0x8c, 0x83, 0x7e, 0x30, 0xd8, 0x3a, 0xda, 0x25, 0x6b, 0x49, 0xe4, 0xb4, + 0x01, 0xf2, 0xf8, 0x72, 0x91, 0x76, 0xae, 0x17, 0xe9, 0xb6, 0x17, 0x1c, 0x18, 0x25, 0x2d, 0x57, + 0xb5, 0x9d, 0x8f, 0x5b, 0x8b, 0xec, 0x6b, 0x37, 0xec, 0x79, 0x38, 0xfa, 0x1e, 0x84, 0x91, 0x92, + 0x5a, 0xaa, 0xa9, 0x2a, 0x04, 0x60, 0x51, 0x4f, 0x64, 0xc9, 0x5d, 0x48, 0x77, 0xb0, 0x75, 0xb4, + 0x4f, 0x7c, 0x4b, 0xe2, 0x5a, 0x92, 0xb6, 0x25, 0x79, 0xc1, 0xcb, 0xe7, 0x46, 0xea, 0xbc, 0x6e, + 0x73, 0xf6, 0xd7, 0xf5, 0xff, 0x33, 0x7f, 0x2f, 0xd2, 0xdd, 0x39, 0xa8, 0xea, 0x59, 0xb6, 0x4e, + 0x65, 0xdf, 0x7e, 0xa6, 0x4f, 0x84, 0xb4, 0x1f, 0xa7, 0x8c, 0x94, 0x46, 0xd1, 0x76, 0x25, 0xfe, + 0x71, 0x88, 0x1f, 0x3e, 0x51, 0x3b, 0xaf, 0x39, 0xfe, 0x0d, 0xc4, 0xf1, 0x76, 0xeb, 0x31, 0x02, + 0x3c, 0x6d, 0x1c, 0xa2, 0xcf, 0x41, 0x18, 0xb3, 0x79, 0x0d, 0x88, 0x85, 0x92, 0xba, 0x38, 0xe7, + 0xbc, 0x50, 0x28, 0x8a, 0x46, 0x17, 0xdf, 0xeb, 0x77, 0x07, 0x0f, 0xf2, 0x97, 0xd7, 0x8b, 0x34, + 0xdb, 0xc4, 0xdc, 0x2a, 0x9a, 0xfa, 0xa2, 0x9b, 0xd8, 0x6c, 0xbc, 0xe3, 0x47, 0x27, 0x52, 0x1f, + 0x73, 0x7e, 0x82, 0xe2, 0xcc, 0x7d, 0x8e, 0x5e, 0x87, 0x8f, 0x15, 0xcc, 0x0a, 0x6b, 0x2c, 0x54, + 0xc5, 0x1d, 0x62, 0xf7, 0xc3, 0x53, 0x04, 0xc1, 0xe3, 0x6e, 0x3f, 0x18, 0xdc, 0x1f, 0xa7, 0x0a, + 0x66, 0x67, 0x0e, 0xce, 0x6f, 0xbb, 0x8d, 0x00, 0xdf, 0x3a, 0x2c, 0x3f, 0xbe, 0x5c, 0x26, 0xc1, + 0xd5, 0x32, 0x09, 0x7e, 0x2d, 0x93, 0xe0, 0xcb, 0x2a, 0xe9, 0x5c, 0xad, 0x92, 0xce, 0x8f, 0x55, + 0xd2, 0x79, 0x77, 0x70, 0x63, 0x5b, 0x6c, 0x3a, 0xd1, 0xf6, 0xb0, 0x02, 0x86, 0xb4, 0xb9, 0xca, + 0xd9, 0x8d, 0xbb, 0x6c, 0xfa, 0xb2, 0x5e, 0x73, 0x4a, 0x4f, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, + 0xa9, 0x65, 0x13, 0x6c, 0xb6, 0x02, 0x00, 0x00, } func (m *GenesisState) Marshal() (dAtA []byte, err error) { diff --git a/x/globalfee/types/query.pb.go b/x/globalfee/types/query.pb.go index 3b73bc45..e972a982 100644 --- a/x/globalfee/types/query.pb.go +++ b/x/globalfee/types/query.pb.go @@ -1,14 +1,14 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: gaia/globalfee/v1beta1/query.proto +// source: xion/globalfee/v1/query.proto package types import ( context "context" fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" - grpc1 "github.com/gogo/protobuf/grpc" - proto "github.com/gogo/protobuf/proto" + _ "github.com/cosmos/gogoproto/gogoproto" + grpc1 "github.com/cosmos/gogoproto/grpc" + proto "github.com/cosmos/gogoproto/proto" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" @@ -38,7 +38,7 @@ func (m *QueryParamsRequest) Reset() { *m = QueryParamsRequest{} } func (m *QueryParamsRequest) String() string { return proto.CompactTextString(m) } func (*QueryParamsRequest) ProtoMessage() {} func (*QueryParamsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_12a736cede25d10a, []int{0} + return fileDescriptor_203903f37d385498, []int{0} } func (m *QueryParamsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -77,7 +77,7 @@ func (m *QueryParamsResponse) Reset() { *m = QueryParamsResponse{} } func (m *QueryParamsResponse) String() string { return proto.CompactTextString(m) } func (*QueryParamsResponse) ProtoMessage() {} func (*QueryParamsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_12a736cede25d10a, []int{1} + return fileDescriptor_203903f37d385498, []int{1} } func (m *QueryParamsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -114,34 +114,32 @@ func (m *QueryParamsResponse) GetParams() Params { } func init() { - proto.RegisterType((*QueryParamsRequest)(nil), "gaia.globalfee.v1beta1.QueryParamsRequest") - proto.RegisterType((*QueryParamsResponse)(nil), "gaia.globalfee.v1beta1.QueryParamsResponse") + proto.RegisterType((*QueryParamsRequest)(nil), "xion.globalfee.v1.QueryParamsRequest") + proto.RegisterType((*QueryParamsResponse)(nil), "xion.globalfee.v1.QueryParamsResponse") } -func init() { - proto.RegisterFile("gaia/globalfee/v1beta1/query.proto", fileDescriptor_12a736cede25d10a) -} +func init() { proto.RegisterFile("xion/globalfee/v1/query.proto", fileDescriptor_203903f37d385498) } -var fileDescriptor_12a736cede25d10a = []byte{ +var fileDescriptor_203903f37d385498 = []byte{ // 286 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x90, 0x31, 0x4b, 0xc3, 0x40, - 0x14, 0xc7, 0x73, 0xa2, 0x1d, 0xce, 0xed, 0x2c, 0x22, 0x41, 0xce, 0x12, 0x44, 0x8a, 0xc2, 0x1d, - 0xad, 0xab, 0x53, 0x3e, 0x81, 0xd6, 0xcd, 0xed, 0x52, 0x9e, 0x67, 0x20, 0xc9, 0x4b, 0x73, 0x17, - 0xb1, 0xab, 0x9b, 0x9b, 0xd0, 0x2f, 0xd5, 0xb1, 0xe0, 0xe2, 0x24, 0x92, 0xf8, 0x41, 0x24, 0xb9, - 0x20, 0x8a, 0x06, 0xdc, 0x8e, 0x77, 0xbf, 0xf7, 0x7f, 0x3f, 0xfe, 0x34, 0xd0, 0x2a, 0x56, 0x52, - 0x27, 0x18, 0xa9, 0xe4, 0x16, 0x40, 0xde, 0x4f, 0x22, 0xb0, 0x6a, 0x22, 0x17, 0x25, 0x14, 0x4b, - 0x91, 0x17, 0x68, 0x91, 0xed, 0x37, 0x8c, 0xf8, 0x62, 0x44, 0xc7, 0xf8, 0x43, 0x8d, 0x1a, 0x5b, - 0x44, 0x36, 0x2f, 0x47, 0xfb, 0x87, 0x1a, 0x51, 0x27, 0x20, 0x55, 0x1e, 0x4b, 0x95, 0x65, 0x68, - 0x95, 0x8d, 0x31, 0x33, 0xdd, 0xef, 0x71, 0xcf, 0x3d, 0x0d, 0x19, 0x98, 0xb8, 0xa3, 0x82, 0x21, - 0x65, 0x57, 0x8d, 0xc0, 0xa5, 0x2a, 0x54, 0x6a, 0x66, 0xb0, 0x28, 0xc1, 0xd8, 0xe0, 0x9a, 0xee, - 0xfd, 0x98, 0x9a, 0x1c, 0x33, 0x03, 0xec, 0x82, 0x0e, 0xf2, 0x76, 0x72, 0x40, 0x46, 0x64, 0xbc, - 0x3b, 0xe5, 0xe2, 0x6f, 0x5f, 0xe1, 0xf6, 0xc2, 0xed, 0xf5, 0xdb, 0x91, 0x37, 0xeb, 0x76, 0xa6, - 0x2b, 0x42, 0x77, 0xda, 0x54, 0xf6, 0x44, 0xe8, 0xc0, 0x21, 0xec, 0xb4, 0x2f, 0xe2, 0xb7, 0x95, - 0x7f, 0xf6, 0x2f, 0xd6, 0xb9, 0x06, 0x27, 0x8f, 0x2f, 0x1f, 0xab, 0xad, 0x11, 0xe3, 0xb2, 0xa7, - 0x07, 0x67, 0x15, 0x86, 0xeb, 0x8a, 0x93, 0x4d, 0xc5, 0xc9, 0x7b, 0xc5, 0xc9, 0x73, 0xcd, 0xbd, - 0x4d, 0xcd, 0xbd, 0xd7, 0x9a, 0x7b, 0x37, 0x63, 0x1d, 0xdb, 0xbb, 0x32, 0x12, 0x73, 0x4c, 0xe5, - 0x1c, 0x4d, 0x8a, 0xc6, 0x45, 0x3d, 0x7c, 0x0b, 0xb3, 0xcb, 0x1c, 0x4c, 0x34, 0x68, 0xbb, 0x3c, - 0xff, 0x0c, 0x00, 0x00, 0xff, 0xff, 0x01, 0xc5, 0x11, 0x71, 0xe3, 0x01, 0x00, 0x00, + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0xad, 0xc8, 0xcc, 0xcf, + 0xd3, 0x4f, 0xcf, 0xc9, 0x4f, 0x4a, 0xcc, 0x49, 0x4b, 0x4d, 0xd5, 0x2f, 0x33, 0xd4, 0x2f, 0x2c, + 0x4d, 0x2d, 0xaa, 0xd4, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x04, 0x49, 0xeb, 0xc1, 0xa5, + 0xf5, 0xca, 0x0c, 0xa5, 0xe4, 0x31, 0x75, 0xa4, 0xa7, 0xe6, 0xa5, 0x16, 0x67, 0x16, 0x43, 0xf4, + 0x48, 0x89, 0xa4, 0xe7, 0xa7, 0xe7, 0x83, 0x99, 0xfa, 0x20, 0x16, 0x54, 0x54, 0x26, 0x3d, 0x3f, + 0x3f, 0x3d, 0x27, 0x55, 0x3f, 0xb1, 0x20, 0x53, 0x3f, 0x31, 0x2f, 0x2f, 0xbf, 0x24, 0xb1, 0x24, + 0x33, 0x3f, 0x0f, 0xaa, 0x47, 0x49, 0x84, 0x4b, 0x28, 0x10, 0x64, 0x6d, 0x40, 0x62, 0x51, 0x62, + 0x6e, 0x71, 0x50, 0x6a, 0x61, 0x69, 0x6a, 0x71, 0x89, 0x92, 0x1f, 0x97, 0x30, 0x8a, 0x68, 0x71, + 0x41, 0x7e, 0x5e, 0x71, 0xaa, 0x90, 0x39, 0x17, 0x5b, 0x01, 0x58, 0x44, 0x82, 0x51, 0x81, 0x51, + 0x83, 0xdb, 0x48, 0x52, 0x0f, 0xc3, 0x95, 0x7a, 0x10, 0x2d, 0x4e, 0x2c, 0x27, 0xee, 0xc9, 0x33, + 0x04, 0x41, 0x95, 0x1b, 0x35, 0x33, 0x72, 0xb1, 0x82, 0x0d, 0x14, 0xaa, 0xe2, 0x62, 0x83, 0xa8, + 0x10, 0x52, 0xc5, 0xa2, 0x19, 0xd3, 0x29, 0x52, 0x6a, 0x84, 0x94, 0x41, 0xdc, 0xa6, 0xa4, 0xd8, + 0x74, 0xf9, 0xc9, 0x64, 0x26, 0x69, 0x21, 0x49, 0x7d, 0xcc, 0x60, 0x82, 0xb8, 0xc2, 0xc9, 0xed, + 0xc4, 0x23, 0x39, 0xc6, 0x0b, 0x8f, 0xe4, 0x18, 0x1f, 0x3c, 0x92, 0x63, 0x9c, 0xf0, 0x58, 0x8e, + 0xe1, 0xc2, 0x63, 0x39, 0x86, 0x1b, 0x8f, 0xe5, 0x18, 0xa2, 0x74, 0xd2, 0x33, 0x4b, 0x32, 0x4a, + 0x93, 0xf4, 0x92, 0xf3, 0x73, 0xf5, 0x93, 0x4a, 0x8b, 0xf2, 0x4a, 0x74, 0x73, 0x12, 0x93, 0x8a, + 0x21, 0x26, 0x55, 0x20, 0x99, 0x55, 0x52, 0x59, 0x90, 0x5a, 0x9c, 0xc4, 0x06, 0x0e, 0x3a, 0x63, + 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0x7a, 0xec, 0x41, 0xfc, 0xc3, 0x01, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -169,7 +167,7 @@ func NewQueryClient(cc grpc1.ClientConn) QueryClient { func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) { out := new(QueryParamsResponse) - err := c.cc.Invoke(ctx, "/gaia.globalfee.v1beta1.Query/Params", in, out, opts...) + err := c.cc.Invoke(ctx, "/xion.globalfee.v1.Query/Params", in, out, opts...) if err != nil { return nil, err } @@ -203,7 +201,7 @@ func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interf } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/gaia.globalfee.v1beta1.Query/Params", + FullMethod: "/xion.globalfee.v1.Query/Params", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest)) @@ -212,7 +210,7 @@ func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interf } var _Query_serviceDesc = grpc.ServiceDesc{ - ServiceName: "gaia.globalfee.v1beta1.Query", + ServiceName: "xion.globalfee.v1.Query", HandlerType: (*QueryServer)(nil), Methods: []grpc.MethodDesc{ { @@ -221,7 +219,7 @@ var _Query_serviceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: "gaia/globalfee/v1beta1/query.proto", + Metadata: "xion/globalfee/v1/query.proto", } func (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) { diff --git a/x/globalfee/types/query.pb.gw.go b/x/globalfee/types/query.pb.gw.go index 5a24a95a..9533dffc 100644 --- a/x/globalfee/types/query.pb.gw.go +++ b/x/globalfee/types/query.pb.gw.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: gaia/globalfee/v1beta1/query.proto +// source: xion/globalfee/v1/query.proto /* Package types is a reverse proxy. @@ -145,7 +145,7 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie } var ( - pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"gaia", "globalfee", "v1beta1", "params"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"xion", "globalfee", "v1", "params"}, "", runtime.AssumeColonVerbOpt(false))) ) var ( From c3cebbcb1b0c0628bc322b5e30a70166120f82da Mon Sep 17 00:00:00 2001 From: Ash Date: Tue, 13 Jun 2023 09:40:49 -0700 Subject: [PATCH 084/501] upgrades --- app/app.go | 8 ++++---- go.mod | 12 ++++++------ go.sum | 26 +++++++++++++------------- go.work.sum | 17 +++++++++++++++++ integration_tests/go.mod | 5 +++-- integration_tests/go.sum | 10 +++++----- 6 files changed, 48 insertions(+), 30 deletions(-) diff --git a/app/app.go b/app/app.go index 58ef5e23..66374f4a 100644 --- a/app/app.go +++ b/app/app.go @@ -70,6 +70,7 @@ import ( "github.com/cosmos/cosmos-sdk/x/genutil" genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types" "github.com/cosmos/cosmos-sdk/x/gov" + govclient "github.com/cosmos/cosmos-sdk/x/gov/client" govkeeper "github.com/cosmos/cosmos-sdk/x/gov/keeper" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" govv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" @@ -119,7 +120,6 @@ import ( "github.com/spf13/cast" "github.com/CosmWasm/wasmd/x/wasm" - wasmclient "github.com/CosmWasm/wasmd/x/wasm/client" wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" @@ -198,14 +198,13 @@ var ( mint.AppModuleBasic{}, distr.AppModuleBasic{}, gov.NewAppModuleBasic( - append( - wasmclient.ProposalHandlers, + []govclient.ProposalHandler{ paramsclient.ProposalHandler, upgradeclient.LegacyProposalHandler, upgradeclient.LegacyCancelProposalHandler, ibcclientclient.UpdateClientProposalHandler, ibcclientclient.UpgradeProposalHandler, - ), + }, ), params.AppModuleBasic{}, crisis.AppModuleBasic{}, @@ -608,6 +607,7 @@ func NewWasmApp( app.BankKeeper, app.StakingKeeper, distrkeeper.NewQuerier(app.DistrKeeper), + app.IBCFeeKeeper, // ISC4 Wrapper: fee IBC middleware app.IBCKeeper.ChannelKeeper, &app.IBCKeeper.PortKeeper, scopedWasmKeeper, diff --git a/go.mod b/go.mod index 5df84811..66fb310d 100644 --- a/go.mod +++ b/go.mod @@ -3,13 +3,13 @@ module github.com/burnt-labs/xion go 1.19 require ( - github.com/CosmWasm/wasmvm v1.2.2 // indirect + github.com/CosmWasm/wasmvm v1.2.4 // indirect github.com/cosmos/cosmos-proto v1.0.0-beta.2 github.com/cosmos/cosmos-sdk v0.47.3 github.com/cosmos/gogogateway v1.2.0 // indirect github.com/cosmos/gogoproto v1.4.10 github.com/cosmos/iavl v0.20.0 // indirect - github.com/cosmos/ibc-go/v7 v7.0.0 + github.com/cosmos/ibc-go/v7 v7.0.1 github.com/cosmos/ics23/go v0.9.1-0.20221207100636-b1abd8678aab // indirect github.com/docker/distribution v2.8.2+incompatible // indirect github.com/dvsekhvalnov/jose2go v1.5.0 // indirect @@ -18,13 +18,13 @@ require ( github.com/gorilla/mux v1.8.0 // indirect github.com/grpc-ecosystem/grpc-gateway v1.16.0 github.com/pkg/errors v0.9.1 // indirect - github.com/prometheus/client_golang v1.14.0 + github.com/prometheus/client_golang v1.15.0 github.com/rakyll/statik v0.1.7 // indirect github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa - github.com/spf13/cast v1.5.0 + github.com/spf13/cast v1.5.1 github.com/spf13/cobra v1.6.1 github.com/spf13/pflag v1.0.5 // indirect - github.com/stretchr/testify v1.8.2 + github.com/stretchr/testify v1.8.3 github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4 google.golang.org/grpc v1.55.0 @@ -38,7 +38,7 @@ require ( cosmossdk.io/errors v1.0.0-beta.7 cosmossdk.io/math v1.0.1 cosmossdk.io/tools/rosetta v0.2.1 - github.com/CosmWasm/wasmd v0.40.0-rc.0 + github.com/CosmWasm/wasmd v0.40.1 github.com/armon/go-metrics v0.4.1 github.com/cometbft/cometbft v0.37.1 github.com/cometbft/cometbft-db v0.7.0 diff --git a/go.sum b/go.sum index 12af6343..02f3b3ae 100644 --- a/go.sum +++ b/go.sum @@ -212,10 +212,10 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03 github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= -github.com/CosmWasm/wasmd v0.40.0-rc.0 h1:QhJzLSWQCjUjrEPO2dc61WgafnaxetuKZRBHUfKJR84= -github.com/CosmWasm/wasmd v0.40.0-rc.0/go.mod h1:9MispMuIWmjs6HlgRx+XPLfOD0y1k7iQx5KIE2cNGTc= -github.com/CosmWasm/wasmvm v1.2.2 h1:F1lTaMRYxk91V9ufV8gYhzLea7sd6AG/GvY1h2JtZsY= -github.com/CosmWasm/wasmvm v1.2.2/go.mod h1:vW/E3h8j9xBQs9bCoijDuawKo9kCtxOaS8N8J7KFtkc= +github.com/CosmWasm/wasmd v0.40.1 h1:LxbO78t/6S8TkeQlUrJ0m5O87HtAwLx4RGHq3rdrOEU= +github.com/CosmWasm/wasmd v0.40.1/go.mod h1:6EOwnv7MpuFaEqxcUOdFV9i4yvrdOciaY6VQ1o7A3yg= +github.com/CosmWasm/wasmvm v1.2.4 h1:6OfeZuEcEH/9iqwrg2pkeVtDCkMoj9U6PpKtcrCyVrQ= +github.com/CosmWasm/wasmvm v1.2.4/go.mod h1:vW/E3h8j9xBQs9bCoijDuawKo9kCtxOaS8N8J7KFtkc= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= @@ -335,8 +335,8 @@ github.com/cosmos/gogoproto v1.4.10 h1:QH/yT8X+c0F4ZDacDv3z+xE3WU1P1Z3wQoLMBRJoK github.com/cosmos/gogoproto v1.4.10/go.mod h1:3aAZzeRWpAwr+SS/LLkICX2/kDFyaYVzckBDzygIxek= github.com/cosmos/iavl v0.20.0 h1:fTVznVlepH0KK8NyKq8w+U7c2L6jofa27aFX6YGlm38= github.com/cosmos/iavl v0.20.0/go.mod h1:WO7FyvaZJoH65+HFOsDir7xU9FWk2w9cHXNW1XHcl7A= -github.com/cosmos/ibc-go/v7 v7.0.0 h1:j4kyywlG0hhDmT9FmSaR5iCIka7Pz7kJTxGWY1nlV9Q= -github.com/cosmos/ibc-go/v7 v7.0.0/go.mod h1:BFh8nKWjr5zeR2OZfhkzdgDzj1+KjRn3aJLpwapStj8= +github.com/cosmos/ibc-go/v7 v7.0.1 h1:NIBNRWjlOoFvFQu1ZlgwkaSeHO5avf4C1YQiWegt8jw= +github.com/cosmos/ibc-go/v7 v7.0.1/go.mod h1:vEaapV6nuLPQlS+g8IKmxMo6auPi0i7HMv1PhViht/E= github.com/cosmos/ics23/go v0.9.1-0.20221207100636-b1abd8678aab h1:I9ialKTQo7248V827Bba4OuKPmk+FPzmTVHsLXaIJWw= github.com/cosmos/ics23/go v0.9.1-0.20221207100636-b1abd8678aab/go.mod h1:2CwqasX5dSD7Hbp/9b6lhK6BwoBDCBldx7gPKRukR60= github.com/cosmos/keyring v1.2.0 h1:8C1lBP9xhImmIabyXW4c3vFjjLiBdGCmfLUfeZlV1Yo= @@ -407,7 +407,7 @@ github.com/felixge/httpsnoop v1.0.2/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSw github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= -github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= +github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= 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.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= @@ -830,8 +830,8 @@ github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5Fsn github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= 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.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw= -github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y= +github.com/prometheus/client_golang v1.15.0 h1:5fCgGYogn0hFdhyhLbw7hEsWxufKtY9klyvdNfFlFhM= +github.com/prometheus/client_golang v1.15.0/go.mod h1:e9yaBhRPU2pPNsZwE+JdQl0KEt1N9XgF6zxWmaC0xOk= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= @@ -901,8 +901,8 @@ github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B github.com/spf13/afero v1.9.3 h1:41FoI0fD7OR7mGcKE/aOiLkGreyf8ifIOQmJANWogMk= github.com/spf13/afero v1.9.3/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= -github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= +github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA= +github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= github.com/spf13/cobra v1.6.1 h1:o94oiPyS4KD1mPy2fmcYYHHfCxLqYjJOhGsCHFZtEzA= @@ -934,8 +934,8 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= 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.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= -github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY= +github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8= github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= diff --git a/go.work.sum b/go.work.sum index 19e6bb7a..09a20d41 100644 --- a/go.work.sum +++ b/go.work.sum @@ -415,9 +415,11 @@ github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuW github.com/antihax/optional v1.0.0 h1:xK2lYat7ZLaVVcIuj82J8kIro4V6kDe0AUDFboUCwcg= github.com/apache/arrow/go/v10 v10.0.1 h1:n9dERvixoC/1JjDmBcs9FPaEryoANa2sCgVFo6ez9cI= github.com/apache/thrift v0.16.0 h1:qEy6UW60iVOlUy+b9ZR0d5WzUWYGOo4HfopoyBaNmoY= +github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e h1:QEF07wC0T1rKkctt1RINW/+RMTVmiwxETico2l3gxJA= github.com/armon/circbuf v0.0.0-20190214190532-5111143e8da2 h1:7Ip0wMmLHLRJdrloDxZfhMm0xrLXZS8+COSu2bXmEQs= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6 h1:G1bPvciwNyF7IUmKXNt9Ak3m6u9DE1rF+RmtIkBpVdA= github.com/armon/go-metrics v0.4.0/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= +github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310 h1:BUAU3CGlLvorLI26FmByPp2eC2qla6E1Tw+scpcg/to= github.com/armon/go-radix v1.0.0 h1:F4z6KzEeeQIMeLFa97iZU6vupzoecKdU5TX24SNppXI= github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= @@ -487,6 +489,7 @@ github.com/bufbuild/buf v1.7.0/go.mod h1:Go40fMAF46PnPLC7jJgTQhAI95pmC0+VtxFKVC0 github.com/bufbuild/connect-go v1.0.0 h1:htSflKUT8y1jxhoPhPYTZMrsY3ipUXjjrbcZR5O2cVo= github.com/bufbuild/connect-go v1.0.0/go.mod h1:9iNvh/NOsfhNBUH5CtvXeVUskQO1xsrEviH7ZArwZ3I= github.com/bufbuild/protocompile v0.4.0/go.mod h1:3v93+mbWn/v3xzN+31nwkJfrEpAUwp+BagBSZWx+TP8= +github.com/burnt-labs/interchaintest/v7 v7.0.0-20230613163648-aa1862315549/go.mod h1:PQHTFpUmM/meGRt87JNtCQp5k+D1Vgb/vS9+Faup6UA= github.com/butuzov/ireturn v0.1.1 h1:QvrO2QF2+/Cx1WA/vETCIYBKtRjc30vesdoPUNo1EbY= github.com/butuzov/ireturn v0.1.1/go.mod h1:Wh6Zl3IMtTpaIKbmwzqi6olnM9ptYQxxVacMsOEFPoc= github.com/bwesterb/go-ristretto v1.2.0 h1:xxWOVbN5m8NNKiSDZXE1jtZvZnC6JSJ9cYFADiZcWtw= @@ -573,6 +576,7 @@ github.com/cosmos/gorocksdb v1.2.0 h1:d0l3jJG8M4hBouIZq0mDUHZ+zjOx044J3nGRskwTb4 github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk= github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= github.com/creachadair/taskgroup v0.3.2/go.mod h1:wieWwecHVzsidg2CsUnFinW1faVN4+kq+TDlRJQ0Wbk= +github.com/creack/pty v1.1.9 h1:uDmaGzcdjhF4i/plgjmEsriH11Y0o7RKapEf/LDaM3w= github.com/creack/pty v1.1.11 h1:07n33Z8lZxZ2qwegKbObQohDhXDQxiMMz1NOUGYlesw= github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cristalhq/acmd v0.8.1 h1:mtFp/cbeJNY5jokF9zPz5mRllGHropRrOkOVxeGS6FI= @@ -647,6 +651,7 @@ github.com/francoispqt/gojay v1.2.13 h1:d2m3sFjloqoIUQU3TsHBgj6qg/BVGlTBeHDUmyJn github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db h1:gb2Z18BhTPJPpLQWj4T+rfKHYCHxRHCtRxhKKjRidVw= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8 h1:a9ENSRDFBUPkJ5lCgVZh26+ZbGyoVJG7yb5SSzF5H54= github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= +github.com/frankban/quicktest v1.14.4/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fzipp/gocyclo v0.6.0 h1:lsblElZG7d3ALtGMx9fmxeTKZaLLpU8mET09yN4BBLo= github.com/fzipp/gocyclo v0.6.0/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlyaLkLoA= github.com/garslo/gogen v0.0.0-20170306192744-1d203ffc1f61 h1:IZqZOB2fydHte3kUgxrzK5E1fW7RQGeDwE8F/ZZnUYc= @@ -688,6 +693,7 @@ github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiU github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A= github.com/go-playground/validator/v10 v10.11.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= github.com/go-sourcemap/sourcemap v2.1.3+incompatible h1:W1iEw64niKVGogNgBN3ePyLFfuisuzeidWPMPWmECqU= +github.com/go-sql-driver/mysql v1.4.0 h1:7LxgVwFb2hIQtMm87NdgAVfXjnt4OePseqT1tKx+opk= github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 h1:p104kn46Q8WdvHunIJ9dAyjPVtrBPhSr3KT2yUst43I= github.com/go-toolsmith/astcast v1.0.0 h1:JojxlmI6STnFVG9yOImLeGREv8W2ocNUM+iOhR6jE7g= @@ -785,6 +791,7 @@ github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3 h1:lLT7ZLSzGLI08vc9cpd+tYmNWjd github.com/hanwen/go-fuse/v2 v2.1.1-0.20220112183258-f57e95bda82d h1:ibbzF2InxMOS+lLCphY9PHNKPURDUBNKaG6ErSq8gJQ= github.com/hashicorp/consul/api v1.18.0 h1:R7PPNzTCeN6VuQNDwwhZWJvzCtGSrNpJqfb22h3yH9g= github.com/hashicorp/consul/api v1.18.0/go.mod h1:owRRGJ9M5xReDC5nfT8FTJrNAPbT4NM6p/k+d03q2v4= +github.com/hashicorp/consul/sdk v0.3.0 h1:UOxjlb4xVNF93jak1mzzoBatyFju9nrkxpVwIp/QqxQ= github.com/hashicorp/consul/sdk v0.13.0 h1:lce3nFlpv8humJL8rNrrGHYSKc3q+Kxfeg3Ii1m6ZWU= github.com/hashicorp/consul/sdk v0.13.0/go.mod h1:0hs/l5fOVhJy/VdcoaNqUSi2AUs95eF5WKtv+EYIQqE= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= @@ -799,10 +806,12 @@ github.com/hashicorp/go-msgpack v0.5.3 h1:zKjpN5BK/P5lMYrLmBHdBULWbJ0XpYR+7NGzqk github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= +github.com/hashicorp/go-retryablehttp v0.5.3 h1:QlWt0KvWT0lq8MFppF9tsJGF+ynG7ztc2KIPhzRGk7s= github.com/hashicorp/go-retryablehttp v0.7.0 h1:eu1EI/mbirUgP5C8hVsTNaGZreBDlYiwC1FZWkvQPQ4= github.com/hashicorp/go-retryablehttp v0.7.0/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc= github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= +github.com/hashicorp/go-sockaddr v1.0.0 h1:GeH6tui99pF4NJgfnhp+L6+FfobzVW3Ah46sLo0ICXs= github.com/hashicorp/go-sockaddr v1.0.2 h1:ztczhD1jLxIRjVejw8gFomI1BQZOe2WoVOu0SyteCQc= github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A= github.com/hashicorp/go-syslog v1.0.0 h1:KaodqZuhUoZereWVIYmpUgZysurB1kBLX2j0MwMrUAE= @@ -812,8 +821,10 @@ github.com/hashicorp/go-version v1.2.1/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09 github.com/hashicorp/go.net v0.0.1 h1:sNCoNyDEvN1xa+X0baata4RdcpKwcMS6DH+xwfqPgjw= github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/logutils v1.0.0 h1:dLEQVugN8vlakKOUE3ihGLTZJRB4j+M2cdTm/ORI65Y= +github.com/hashicorp/mdns v1.0.0 h1:WhIgCr5a7AaVH6jPUwjtRuuE7/RDufnUvzIr48smyxs= github.com/hashicorp/mdns v1.0.4 h1:sY0CMhFmjIPDMlTB+HfymFHCaYLhgifZ0QhjaYKD/UQ= github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc= +github.com/hashicorp/memberlist v0.1.3 h1:EmmoJme1matNzb+hMpDuR/0sbJSUisxyqBGG676r31M= github.com/hashicorp/memberlist v0.5.0 h1:EtYPN8DpAURiapus508I4n9CzHs2W+8NZGbmmR/prTM= github.com/hashicorp/memberlist v0.5.0/go.mod h1:yvyXLpo0QaGE59Y7hDTsTzDD25JYBZ4mHgHUZ8lrOI0= github.com/hashicorp/serf v0.10.1 h1:Z1H2J60yRKvfDYAOZLd2MU0ND4AH/WDz7xYHDWQsIPY= @@ -987,6 +998,7 @@ github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8 h1:AMFGa4R4MiIpsp github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3 h1:+n/aFZefKZp7spd8DFdX7uMikMLXX4oubIzJF4kv/wI= github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible h1:aKW/4cBs+yK6gpqU3K/oIwk9Q/XICqd3zOX/UFuvqmk= +github.com/mitchellh/cli v1.0.0 h1:iGBIsUe3+HZ/AD/Vd7DErOt5sU9fa8Uj7A2s1aggv1Y= github.com/mitchellh/cli v1.1.0 h1:tEElEatulEHDeedTxwckzyYMA5c86fbmNIUL1hBIiTg= github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= github.com/mitchellh/go-ps v1.0.0 h1:i6ampVEEF4wQFF+bkYfwYgY+F/uYJDktmvLPf7qIgjc= @@ -1045,6 +1057,7 @@ github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5 github.com/onsi/gomega v1.20.0/go.mod h1:DtrZpjmvpn2mPm4YWQa0/ALMDj9v4YxLgojwPeREyVo= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7 h1:lDH9UUVJtmYCjyT0CI4q8xvlXPxeZ0gYCVvWbmPlp88= github.com/opencontainers/runc v1.1.3/go.mod h1:1J5XiS+vdZ3wCyZybsuxXZWGrgSr8fFJHLXuG2PsnNg= +github.com/opencontainers/runtime-spec v1.0.2 h1:UfAcuLBJB9Coz72x1hgl8O5RVzTdNiaglX6v2DM6FI0= github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417 h1:3snG66yBm59tKhhSPQrQ/0bCrv1LQbKt40LnUPiUxdc= github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opencontainers/selinux v1.10.0/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI= @@ -1095,6 +1108,7 @@ github.com/pointlander/peg v1.0.1 h1:mgA/GQE8TeS9MdkU6Xn6iEzBmQUQCNuWD7rHCK6Mjs0 github.com/pointlander/peg v1.0.1/go.mod h1:5hsGDQR2oZI4QoWz0/Kdg3VSVEC31iJw/b7WjqCBGRI= github.com/polyfloyd/go-errorlint v1.0.5 h1:AHB5JRCjlmelh9RrLxT9sgzpalIwwq4hqE8EkwIwKdY= github.com/polyfloyd/go-errorlint v1.0.5/go.mod h1:APVvOesVSAnne5SClsPxPdfvZTVDojXh1/G3qb5wjGI= +github.com/posener/complete v1.1.1 h1:ccV59UEOTzVDnDUEFdT95ZzHVZ+5+158q8+SJb2QV5w= github.com/posener/complete v1.2.3 h1:NP0eAhjcjImqslEwo/1hq7gpajME0fTLTezBKDqfXqo= github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw= @@ -1146,6 +1160,7 @@ github.com/ryancurrah/gomodguard v1.2.4 h1:CpMSDKan0LtNGGhPrvupAoLeObRFjND8/tU1r github.com/ryancurrah/gomodguard v1.2.4/go.mod h1:+Kem4VjWwvFpUJRJSwa16s1tBJe+vbv02+naTow2f6M= github.com/ryanrolds/sqlclosecheck v0.3.0 h1:AZx+Bixh8zdUBxUA1NxbxVAS78vTPq4rCb8OUZI9xFw= github.com/ryanrolds/sqlclosecheck v0.3.0/go.mod h1:1gREqxyTGR3lVtpngyFo3hZAgk0KCtEdgEkHwDbigdA= +github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f h1:UFr9zpz4xgTnIE5yIMtWAMngCdZ9p/+q6lTbgelo80M= github.com/ryanuber/columnize v2.1.0+incompatible h1:j1Wcmh8OrK4Q7GXY+V7SVSY8nUWQxHW5TkBe7YUl+2s= github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/sagikazarmark/crypt v0.9.0 h1:fipzMFW34hFUEc4D7fsLQFtE7yElkpgyS2zruedRdZk= @@ -1247,6 +1262,7 @@ github.com/ultraware/funlen v0.0.3 h1:5ylVWm8wsNwH5aWo9438pwvsK0QiqVuUrt9bn7S/iL github.com/ultraware/funlen v0.0.3/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= github.com/ultraware/whitespace v0.0.5 h1:hh+/cpIcopyMYbZNVov9iSxvJU3OYQg78Sfaqzi/CzI= github.com/ultraware/whitespace v0.0.5/go.mod h1:aVMh/gQve5Maj9hQ/hg+F75lr/X5A89uZnzAmWSineA= +github.com/urfave/cli v1.22.1 h1:+mkCCcOFKPnCmVYVcURKps1Xe+3zP90gSYGNfRkjoIY= github.com/urfave/cli v1.22.4 h1:u7tSpNPPswAFymm8IehJhy4uJMlUuU/GmqSkvJ1InXA= github.com/urfave/cli/v2 v2.10.2 h1:x3p8awjp/2arX+Nl/G2040AZpOCHS/eMJJ1/a+mye4Y= github.com/urfave/cli/v2 v2.10.2/go.mod h1:f8iq5LtQ/bLxafbdBSLPPNsgaW0l/2fYYEHhAyPlwvo= @@ -1263,6 +1279,7 @@ github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17 github.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f h1:p4VB7kIXpOQvVn1ZaTIVp+3vuYAXFe3OJEvjbUYJLaA= github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= +github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f h1:J9EGpcZtP0E/raorCMxlFGSTBrsSlaDGf3jU/qvAE2c= github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo= github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74= diff --git a/integration_tests/go.mod b/integration_tests/go.mod index be8ef33e..c4a23c74 100644 --- a/integration_tests/go.mod +++ b/integration_tests/go.mod @@ -173,7 +173,7 @@ require ( github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 // indirect github.com/spaolacci/murmur3 v1.1.0 // indirect github.com/spf13/afero v1.9.3 // indirect - github.com/spf13/cast v1.5.0 // indirect + github.com/spf13/cast v1.5.1 // indirect github.com/spf13/cobra v1.7.0 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/spf13/pflag v1.0.5 // indirect @@ -232,6 +232,7 @@ replace ( github.com/ChainSafe/go-schnorrkel/1 => github.com/ChainSafe/go-schnorrkel v1.0.0 github.com/burnt-labs/xion => ../ github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 - github.com/strangelove-ventures/interchaintest/v7 => github.com/burnt-labs/interchaintest/v7 v7.0.0-20230612202143-1c7c5cc80b3b + github.com/strangelove-ventures/interchaintest/v7 => github.com/burnt-labs/interchaintest/v7 v7.0.0-20230613163648-aa1862315549 + //github.com/strangelove-ventures/interchaintest/v7 => ../../interchaintest github.com/vedhavyas/go-subkey => github.com/strangelove-ventures/go-subkey v1.0.7 ) diff --git a/integration_tests/go.sum b/integration_tests/go.sum index c671df64..df1d293c 100644 --- a/integration_tests/go.sum +++ b/integration_tests/go.sum @@ -281,8 +281,8 @@ github.com/btcsuite/btcd/btcutil v1.1.2 h1:XLMbX8JQEiwMcYft2EGi8zPUkoa0abKIU6/BJ github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce h1:YtWJF7RHm2pYCvA5t0RPmAaLUhREsKuKd+SLhxFbFeQ= github.com/bufbuild/protocompile v0.4.0 h1:LbFKd2XowZvQ/kajzguUp2DC9UEIQhIq77fZZlaQsNA= -github.com/burnt-labs/interchaintest/v7 v7.0.0-20230612202143-1c7c5cc80b3b h1:39rWmeock7xN0YridEgEgvUN4yyMcv+5djiwgMUGQHY= -github.com/burnt-labs/interchaintest/v7 v7.0.0-20230612202143-1c7c5cc80b3b/go.mod h1:PQHTFpUmM/meGRt87JNtCQp5k+D1Vgb/vS9+Faup6UA= +github.com/burnt-labs/interchaintest/v7 v7.0.0-20230613163648-aa1862315549 h1:M4hMShIbILWq7oBIIn2ZGet5PXj82UkF0tBQyqbupGw= +github.com/burnt-labs/interchaintest/v7 v7.0.0-20230613163648-aa1862315549/go.mod h1:PQHTFpUmM/meGRt87JNtCQp5k+D1Vgb/vS9+Faup6UA= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= @@ -440,7 +440,7 @@ github.com/felixge/httpsnoop v1.0.2/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSw github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= -github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= +github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= 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= @@ -976,8 +976,8 @@ github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B github.com/spf13/afero v1.9.3 h1:41FoI0fD7OR7mGcKE/aOiLkGreyf8ifIOQmJANWogMk= github.com/spf13/afero v1.9.3/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= -github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= +github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA= +github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= From c888b630637eeee8242821e458bb97864aa6e4e4 Mon Sep 17 00:00:00 2001 From: Ash Date: Tue, 13 Jun 2023 10:34:56 -0700 Subject: [PATCH 085/501] add type to registry to avoid annoying logs --- integration_tests/send_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/integration_tests/send_test.go b/integration_tests/send_test.go index 8016a871..0f2a0d9e 100644 --- a/integration_tests/send_test.go +++ b/integration_tests/send_test.go @@ -67,6 +67,7 @@ func TestXionSendPlatformFee(t *testing.T) { xion.Config().EncodingConfig.InterfaceRegistry.RegisterImplementations( (*types.Msg)(nil), &xiontypes.MsgSetPlatformPercentage{}, + &xiontypes.MsgSend{}, ) cdc := codec.NewProtoCodec(xion.Config().EncodingConfig.InterfaceRegistry) From b4471cdaaff8f375ba8e3d1b107cc4022e7d1eec Mon Sep 17 00:00:00 2001 From: Ash Date: Tue, 13 Jun 2023 10:49:22 -0700 Subject: [PATCH 086/501] change where registry is set --- integration_tests/send_test.go | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/integration_tests/send_test.go b/integration_tests/send_test.go index 0f2a0d9e..58ca8513 100644 --- a/integration_tests/send_test.go +++ b/integration_tests/send_test.go @@ -44,6 +44,13 @@ func TestXionSendPlatformFee(t *testing.T) { recipientKeyAddress, err := types.Bech32ifyAddressBytes(xion.Config().Bech32Prefix, receipientKeyAddressBytes) require.NoError(t, err) + xion.Config().EncodingConfig.InterfaceRegistry.RegisterImplementations( + (*types.Msg)(nil), + &xiontypes.MsgSetPlatformPercentage{}, + &xiontypes.MsgSend{}, + ) + cdc := codec.NewProtoCodec(xion.Config().EncodingConfig.InterfaceRegistry) + _, err = xion.FullNodes[0].ExecTx(ctx, xionUser.KeyName(), "xion", "send", xionUser.KeyName(), @@ -64,13 +71,6 @@ func TestXionSendPlatformFee(t *testing.T) { PlatformPercentage: 500, } - xion.Config().EncodingConfig.InterfaceRegistry.RegisterImplementations( - (*types.Msg)(nil), - &xiontypes.MsgSetPlatformPercentage{}, - &xiontypes.MsgSend{}, - ) - cdc := codec.NewProtoCodec(xion.Config().EncodingConfig.InterfaceRegistry) - msg, err := cdc.MarshalInterfaceJSON(&setPlatformPercentageMsg) require.NoError(t, err) From 1b5a6bcf3ed3c9aa948bff9a49d0fda27a93111f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 13 Jun 2023 20:22:46 +0000 Subject: [PATCH 087/501] Bump docker/build-push-action from 2 to 4 Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 2 to 4. - [Release notes](https://github.com/docker/build-push-action/releases) - [Commits](https://github.com/docker/build-push-action/compare/v2...v4) --- updated-dependencies: - dependency-name: docker/build-push-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/docker-hub.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker-hub.yml b/.github/workflows/docker-hub.yml index 1fe9e213..25c67da2 100644 --- a/.github/workflows/docker-hub.yml +++ b/.github/workflows/docker-hub.yml @@ -35,7 +35,7 @@ jobs: type=sha,priority=700 - name: Build and push docker image - uses: docker/build-push-action@v2 + uses: docker/build-push-action@v4 with: context: . push: true From 0a495b0e61e3f4955cdf3c5dac15f2ab972f746a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 13 Jun 2023 20:28:49 +0000 Subject: [PATCH 088/501] Bump docker/setup-buildx-action from 1 to 2 Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 1 to 2. - [Release notes](https://github.com/docker/setup-buildx-action/releases) - [Commits](https://github.com/docker/setup-buildx-action/compare/v1...v2) --- updated-dependencies: - dependency-name: docker/setup-buildx-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/docker-hub.yml | 2 +- .github/workflows/integration-tests.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/docker-hub.yml b/.github/workflows/docker-hub.yml index 1fe9e213..0acd017b 100644 --- a/.github/workflows/docker-hub.yml +++ b/.github/workflows/docker-hub.yml @@ -23,7 +23,7 @@ jobs: password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} - name: Set up docker buildx - uses: docker/setup-buildx-action@v1 + uses: docker/setup-buildx-action@v2 - name: Extract metadata for docker id: meta diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index cfd486d8..2be9d47d 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -24,7 +24,7 @@ jobs: - name: checkout uses: actions/checkout@v2 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2.4.1 + uses: docker/setup-buildx-action@v2 - name: container-login uses: docker/login-action@v1 with: From f070fdd8c50d7af4054d24ced34d0749fb293527 Mon Sep 17 00:00:00 2001 From: ash-burnt <96692350+ash-burnt@users.noreply.github.com> Date: Tue, 13 Jun 2023 13:41:31 -0700 Subject: [PATCH 089/501] Revert "Bump technote-space/get-diff-action from 4 to 6" --- .github/workflows/tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 07fba01b..c9c9303c 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -10,7 +10,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - uses: technote-space/get-diff-action@v6 + - uses: technote-space/get-diff-action@v4 with: PATTERNS: | **/**.go From 74f18e0a1baa4a4d5ff93e4bc7ac786e456aefa4 Mon Sep 17 00:00:00 2001 From: justin <328965+justinbarry@users.noreply.github.com> Date: Tue, 13 Jun 2023 14:02:24 -0700 Subject: [PATCH 090/501] Add steps to run integrations tests to README.md --- README.md | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/README.md b/README.md index fbe94050..f53e1ad5 100644 --- a/README.md +++ b/README.md @@ -3,3 +3,27 @@ The Xion Daemon is scaffolded off of [CosmWasm/wasmd](https://github.com/CosmWasm/wasmd) rather than being scaffolded with ignite in order to more easily achieve compatibility with the latest cosmos-sdk and CosmWasm releases. + + + + + +## Running integration tests + +### Prerequisites +* [docker](https://docs.docker.com/get-docker/) +* [heighliner](https://github.com/strangelove-ventures/heighliner) + +### Build and run +At the root of the project, run: +```bash +heighliner build -c xion --local --no-cache --no-build-cache && XION_IMAGE=xion:local make test-integration +``` + +> **Note** +> This will take some time (10+ minutes) to run the as it will need to build the docker image and pull dependencies. + +The final line of output should read as follows if successful: +```bash +ok integration_tests 164.191s +``` From 2822f0378df4f32084ac0b18feaa29a63bc89b44 Mon Sep 17 00:00:00 2001 From: justin <328965+justinbarry@users.noreply.github.com> Date: Tue, 13 Jun 2023 14:05:45 -0700 Subject: [PATCH 091/501] Add Golang to prereqs --- README.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/README.md b/README.md index f53e1ad5..e8fe1f5f 100644 --- a/README.md +++ b/README.md @@ -4,13 +4,10 @@ The Xion Daemon is scaffolded off of [CosmWasm/wasmd](https://github.com/CosmWas rather than being scaffolded with ignite in order to more easily achieve compatibility with the latest cosmos-sdk and CosmWasm releases. - - - - ## Running integration tests ### Prerequisites +* [golang](https://golang.org) * [docker](https://docs.docker.com/get-docker/) * [heighliner](https://github.com/strangelove-ventures/heighliner) From 0da414c31525d58fac097fc0aa7d92b149e4987a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 13 Jun 2023 22:06:41 +0000 Subject: [PATCH 092/501] Bump technote-space/get-diff-action from 4 to 6 Bumps [technote-space/get-diff-action](https://github.com/technote-space/get-diff-action) from 4 to 6. - [Release notes](https://github.com/technote-space/get-diff-action/releases) - [Changelog](https://github.com/technote-space/get-diff-action/blob/main/.releasegarc) - [Commits](https://github.com/technote-space/get-diff-action/compare/v4...v6) --- updated-dependencies: - dependency-name: technote-space/get-diff-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index c9c9303c..07fba01b 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -10,7 +10,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - uses: technote-space/get-diff-action@v4 + - uses: technote-space/get-diff-action@v6 with: PATTERNS: | **/**.go From 3fe0a50c76aec16bb8397190241b32e756c4fa8d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 13 Jun 2023 22:09:01 +0000 Subject: [PATCH 093/501] Bump github.com/stretchr/testify from 1.8.3 to 1.8.4 Bumps [github.com/stretchr/testify](https://github.com/stretchr/testify) from 1.8.3 to 1.8.4. - [Release notes](https://github.com/stretchr/testify/releases) - [Commits](https://github.com/stretchr/testify/compare/v1.8.3...v1.8.4) --- updated-dependencies: - dependency-name: github.com/stretchr/testify dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 66fb310d..607a030a 100644 --- a/go.mod +++ b/go.mod @@ -24,7 +24,7 @@ require ( github.com/spf13/cast v1.5.1 github.com/spf13/cobra v1.6.1 github.com/spf13/pflag v1.0.5 // indirect - github.com/stretchr/testify v1.8.3 + github.com/stretchr/testify v1.8.4 github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4 google.golang.org/grpc v1.55.0 diff --git a/go.sum b/go.sum index 02f3b3ae..89a01256 100644 --- a/go.sum +++ b/go.sum @@ -934,8 +934,8 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= 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.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY= -github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8= github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= From af586cff7fe1cc4b270ccd6d2df18b2df868d6a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eduardo=20D=C3=ADaz?= Date: Wed, 14 Jun 2023 09:48:09 -0400 Subject: [PATCH 094/501] Update x/mint/abci_test.go --- x/mint/abci_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x/mint/abci_test.go b/x/mint/abci_test.go index a94bebaf..9fb9f3f5 100644 --- a/x/mint/abci_test.go +++ b/x/mint/abci_test.go @@ -80,7 +80,7 @@ func TestBeginBlocker(t *testing.T) { }, }, { - name: "above staking threshold, feegrant has values", + name: "above staking threshold, fee collector has values", parameters: parameters{ bonded: stakingTokenSupply, bondedRatio: sdk.NewDecWithPrec(1, 4), From d2acc1586d3990e748df4abb3de47a05c482b902 Mon Sep 17 00:00:00 2001 From: Ash Date: Wed, 14 Jun 2023 11:09:40 -0700 Subject: [PATCH 095/501] run more tests in CI --- .github/workflows/integration-tests.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index cfd486d8..6ea204f4 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -69,6 +69,8 @@ jobs: - "DungeonTransferBlock" - "XionSendPlatformFee" - "MintModuleNoInflationNoFees" + - "MintModuleInflationHighFees" + - "MintModuleInflationLowFees" steps: - name: Set up Go 1.18 From 9a5015f5c2baef91084b1b6b04ffa5e582435c1e Mon Sep 17 00:00:00 2001 From: peartes Date: Thu, 15 Jun 2023 13:35:24 +0100 Subject: [PATCH 096/501] chore: wait some blocks for tx processing --- integration_tests/go.mod | 2 +- integration_tests/send_test.go | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/integration_tests/go.mod b/integration_tests/go.mod index c4a23c74..4b0b7124 100644 --- a/integration_tests/go.mod +++ b/integration_tests/go.mod @@ -3,6 +3,7 @@ module integration_tests go 1.19 require ( + cosmossdk.io/math v1.0.1 github.com/burnt-labs/xion v0.1.0 github.com/cosmos/cosmos-sdk v0.47.3 github.com/cosmos/ibc-go/v7 v7.0.1 @@ -24,7 +25,6 @@ require ( cosmossdk.io/depinject v1.0.0-alpha.3 // indirect cosmossdk.io/errors v1.0.0-beta.7 // indirect cosmossdk.io/log v1.1.0 // indirect - cosmossdk.io/math v1.0.1 // indirect cosmossdk.io/tools/rosetta v0.2.1 // indirect filippo.io/edwards25519 v1.0.0 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect diff --git a/integration_tests/send_test.go b/integration_tests/send_test.go index 2e73e3e2..adfc0b18 100644 --- a/integration_tests/send_test.go +++ b/integration_tests/send_test.go @@ -13,6 +13,7 @@ import ( "github.com/cosmos/cosmos-sdk/types" ibctest "github.com/strangelove-ventures/interchaintest/v7" "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" + "github.com/strangelove-ventures/interchaintest/v7/testutil" "github.com/stretchr/testify/require" ) @@ -30,6 +31,8 @@ func TestXionSendPlatformFee(t *testing.T) { fundAmount := int64(10_000_000) users := ibctest.GetAndFundTestUsers(t, ctx, "default", fundAmount, xion) xionUser := users[0] + currentHeight, _ := xion.Height(ctx) + testutil.WaitForBlocks(ctx, int(currentHeight)+4, xion) t.Logf("created xion user %s", xionUser.FormattedAddress()) xionUserBalInitial, err := xion.GetBalance(ctx, xionUser.FormattedAddress(), xion.Config().Denom) From c6e5c10119966479a82be1b80eee495a9cb06765 Mon Sep 17 00:00:00 2001 From: Eduardo Diaz Date: Thu, 15 Jun 2023 13:40:19 -0400 Subject: [PATCH 097/501] replace deprecated MakeConfigtest --- x/globalfee/ante/antetest/fee_test_setup.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/x/globalfee/ante/antetest/fee_test_setup.go b/x/globalfee/ante/antetest/fee_test_setup.go index e8316e93..d2f6e7d7 100644 --- a/x/globalfee/ante/antetest/fee_test_setup.go +++ b/x/globalfee/ante/antetest/fee_test_setup.go @@ -10,6 +10,7 @@ import ( cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" "github.com/cosmos/cosmos-sdk/testutil/testdata" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module/testutil" "github.com/cosmos/cosmos-sdk/types/tx/signing" xauthsigning "github.com/cosmos/cosmos-sdk/x/auth/signing" "github.com/cosmos/cosmos-sdk/x/params/types" @@ -42,7 +43,8 @@ func (s *IntegrationTestSuite) SetupTest() { Height: 1, }) - encodingConfig := xionapp.MakeTestEncodingConfig() + //encodingConfig := xionapp.MakeTestEncodingConfig() // ?? How to Replace.... + encodingConfig := testutil.MakeTestEncodingConfig() encodingConfig.Amino.RegisterConcrete(&testdata.TestMsg{}, "testdata.TestMsg", nil) testdata.RegisterInterfaces(encodingConfig.InterfaceRegistry) From 8527006f80f626ed780c7d3b5562d77b731b656f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 15 Jun 2023 18:13:47 +0000 Subject: [PATCH 098/501] Bump github.com/prometheus/client_golang from 1.15.0 to 1.16.0 Bumps [github.com/prometheus/client_golang](https://github.com/prometheus/client_golang) from 1.15.0 to 1.16.0. - [Release notes](https://github.com/prometheus/client_golang/releases) - [Changelog](https://github.com/prometheus/client_golang/blob/main/CHANGELOG.md) - [Commits](https://github.com/prometheus/client_golang/compare/v1.15.0...v1.16.0) --- updated-dependencies: - dependency-name: github.com/prometheus/client_golang dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- go.mod | 6 +++--- go.sum | 12 ++++++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/go.mod b/go.mod index 607a030a..90ee8bb1 100644 --- a/go.mod +++ b/go.mod @@ -18,7 +18,7 @@ require ( github.com/gorilla/mux v1.8.0 // indirect github.com/grpc-ecosystem/grpc-gateway v1.16.0 github.com/pkg/errors v0.9.1 // indirect - github.com/prometheus/client_golang v1.15.0 + github.com/prometheus/client_golang v1.16.0 github.com/rakyll/statik v0.1.7 // indirect github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa github.com/spf13/cast v1.5.1 @@ -140,7 +140,7 @@ require ( github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_model v0.3.0 // indirect github.com/prometheus/common v0.42.0 // indirect - github.com/prometheus/procfs v0.9.0 // indirect + github.com/prometheus/procfs v0.10.1 // indirect github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect github.com/rs/cors v1.8.3 // indirect github.com/rs/zerolog v1.29.1 // indirect @@ -160,7 +160,7 @@ require ( golang.org/x/exp v0.0.0-20230515195305-f3d0a9c9a5cc // indirect golang.org/x/net v0.9.0 // indirect golang.org/x/oauth2 v0.6.0 // indirect - golang.org/x/sys v0.7.0 // indirect + golang.org/x/sys v0.8.0 // indirect golang.org/x/term v0.7.0 // indirect golang.org/x/text v0.9.0 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect diff --git a/go.sum b/go.sum index 89a01256..67dc79a5 100644 --- a/go.sum +++ b/go.sum @@ -830,8 +830,8 @@ github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5Fsn github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= 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.15.0 h1:5fCgGYogn0hFdhyhLbw7hEsWxufKtY9klyvdNfFlFhM= -github.com/prometheus/client_golang v1.15.0/go.mod h1:e9yaBhRPU2pPNsZwE+JdQl0KEt1N9XgF6zxWmaC0xOk= +github.com/prometheus/client_golang v1.16.0 h1:yk/hx9hDbrGHovbci4BY+pRMfSuuat626eFsHb7tmT8= +github.com/prometheus/client_golang v1.16.0/go.mod h1:Zsulrv/L9oM40tJ7T815tM89lFEugiJ9HzIqaAx4LKc= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= @@ -854,8 +854,8 @@ github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsT github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI= -github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY= +github.com/prometheus/procfs v0.10.1 h1:kYK1Va/YMlutzCGazswoHKo//tZVlFpKYh+PymziUAg= +github.com/prometheus/procfs v0.10.1/go.mod h1:nwNm2aOCAYw8uTR/9bWRREkZFxAUcWzPHWJq+XBB/FM= github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ= github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Unghqrcc= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= @@ -1251,8 +1251,8 @@ golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU= -golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= From 4277dda076c4670e61888c73a871a824959672f1 Mon Sep 17 00:00:00 2001 From: ash-burnt <96692350+ash-burnt@users.noreply.github.com> Date: Thu, 15 Jun 2023 11:22:19 -0700 Subject: [PATCH 099/501] Revert "Bump github.com/stretchr/testify from 1.8.3 to 1.8.4" --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 607a030a..66fb310d 100644 --- a/go.mod +++ b/go.mod @@ -24,7 +24,7 @@ require ( github.com/spf13/cast v1.5.1 github.com/spf13/cobra v1.6.1 github.com/spf13/pflag v1.0.5 // indirect - github.com/stretchr/testify v1.8.4 + github.com/stretchr/testify v1.8.3 github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4 google.golang.org/grpc v1.55.0 diff --git a/go.sum b/go.sum index 89a01256..02f3b3ae 100644 --- a/go.sum +++ b/go.sum @@ -934,8 +934,8 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= 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 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= -github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY= +github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8= github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= From 82d9cd1b326b90d2a302661cef505ae10036a097 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 15 Jun 2023 18:23:48 +0000 Subject: [PATCH 100/501] Bump github.com/stretchr/testify from 1.8.3 to 1.8.4 Bumps [github.com/stretchr/testify](https://github.com/stretchr/testify) from 1.8.3 to 1.8.4. - [Release notes](https://github.com/stretchr/testify/releases) - [Commits](https://github.com/stretchr/testify/compare/v1.8.3...v1.8.4) --- updated-dependencies: - dependency-name: github.com/stretchr/testify dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 66fb310d..607a030a 100644 --- a/go.mod +++ b/go.mod @@ -24,7 +24,7 @@ require ( github.com/spf13/cast v1.5.1 github.com/spf13/cobra v1.6.1 github.com/spf13/pflag v1.0.5 // indirect - github.com/stretchr/testify v1.8.3 + github.com/stretchr/testify v1.8.4 github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4 google.golang.org/grpc v1.55.0 diff --git a/go.sum b/go.sum index 02f3b3ae..89a01256 100644 --- a/go.sum +++ b/go.sum @@ -934,8 +934,8 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= 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.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY= -github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8= github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= From 0ab15942fba7d9b0c2079235f1652904b3b3b4cb Mon Sep 17 00:00:00 2001 From: Ash Date: Fri, 16 Jun 2023 09:51:33 -0700 Subject: [PATCH 101/501] update to wasmvm 1.2.4 --- Dockerfile | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index da935e9b..ce2cf092 100644 --- a/Dockerfile +++ b/Dockerfile @@ -23,10 +23,10 @@ COPY go.mod /code/ COPY go.sum /code/ COPY Makefile /code/ # See https://github.com/CosmWasm/wasmvm/releases -ADD https://github.com/CosmWasm/wasmvm/releases/download/v1.2.2/libwasmvm_muslc.aarch64.a /lib/libwasmvm_muslc.aarch64.a -ADD https://github.com/CosmWasm/wasmvm/releases/download/v1.2.2/libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.x86_64.a -RUN sha256sum /lib/libwasmvm_muslc.aarch64.a | grep 20ab42fceddd5347b973c254717eed62b2d46925c098f58304d09488ed59464a -RUN sha256sum /lib/libwasmvm_muslc.x86_64.a | grep fc859817a1c548ceb0e02ad8cf5c8e374d240caac547d04dd02b284ace8ab33d +ADD https://github.com/CosmWasm/wasmvm/releases/download/v1.2.4/libwasmvm_muslc.aarch64.a /lib/libwasmvm_muslc.aarch64.a +ADD https://github.com/CosmWasm/wasmvm/releases/download/v1.2.4/libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.x86_64.a +RUN sha256sum /lib/libwasmvm_muslc.aarch64.a | grep 682a54082e131eaff9beec80ba3e5908113916fcb8ddf7c668cb2d97cb94c13c +RUN sha256sum /lib/libwasmvm_muslc.x86_64.a | grep ce3d892377d2523cf563e01120cb1436f9343f80be952c93f66aa94f5737b661 # Copy the library you want to the final location that will be found by the linker flag `-lwasmvm_muslc` RUN cp /lib/libwasmvm_muslc.${arch}.a /lib/libwasmvm_muslc.a From e4132119739ccfed06fe5a0240b1958ae2bc5deb Mon Sep 17 00:00:00 2001 From: Eduardo Diaz Date: Sat, 17 Jun 2023 20:39:25 -0400 Subject: [PATCH 102/501] replace stakingsubspace, DEPRECATED as of sdk 0.47 should be replace before 0.48 --- app/ante.go | 8 ++++++-- app/app.go | 4 ++-- x/globalfee/ante/antetest/fee_test.go | 13 +++++++------ x/globalfee/ante/antetest/fee_test_setup.go | 12 +++++++++--- x/globalfee/ante/fee.go | 19 +++++-------------- x/globalfee/module.go | 10 ++-------- 6 files changed, 31 insertions(+), 35 deletions(-) diff --git a/app/ante.go b/app/ante.go index 7c6c3459..faad8e1d 100644 --- a/app/ante.go +++ b/app/ante.go @@ -12,6 +12,7 @@ import ( wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" wasmTypes "github.com/CosmWasm/wasmd/x/wasm/types" + stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper" globalfeeante "github.com/burnt-labs/xion/x/globalfee/ante" ) @@ -25,7 +26,7 @@ type HandlerOptions struct { WasmConfig *wasmTypes.WasmConfig TXCounterStoreKey storetypes.StoreKey GlobalFeeSubspace paramtypes.Subspace - StakingSubspace paramtypes.Subspace + StakingKeeper *stakingkeeper.Keeper } func NewAnteHandler(options HandlerOptions) (sdk.AnteHandler, error) { @@ -35,6 +36,9 @@ func NewAnteHandler(options HandlerOptions) (sdk.AnteHandler, error) { if options.BankKeeper == nil { return nil, errorsmod.Wrap(sdkerrors.ErrLogic, "bank keeper is required for AnteHandler") } + if options.StakingKeeper == nil { + return nil, errorsmod.Wrap(sdkerrors.ErrLogic, "stakin keeper is required for AnteHandler") + } if options.SignModeHandler == nil { return nil, errorsmod.Wrap(sdkerrors.ErrLogic, "sign mode handler is required for ante builder") } @@ -57,7 +61,7 @@ func NewAnteHandler(options HandlerOptions) (sdk.AnteHandler, error) { ante.NewTxTimeoutHeightDecorator(), ante.NewValidateMemoDecorator(options.AccountKeeper), ante.NewConsumeGasForTxSizeDecorator(options.AccountKeeper), - globalfeeante.NewFeeDecorator(options.GlobalFeeSubspace, options.StakingSubspace), + globalfeeante.NewFeeDecorator(options.GlobalFeeSubspace, options.StakingKeeper.BondDenom), ante.NewDeductFeeDecorator(options.AccountKeeper, options.BankKeeper, options.FeegrantKeeper, options.TxFeeChecker), ante.NewSetPubKeyDecorator(options.AccountKeeper), // SetPubKeyDecorator must be called before all signature verification decorators ante.NewValidateSigCountDecorator(options.AccountKeeper), diff --git a/app/app.go b/app/app.go index 7e756dd8..cb5d6520 100644 --- a/app/app.go +++ b/app/app.go @@ -697,7 +697,7 @@ func NewWasmApp( nftmodule.NewAppModule(appCodec, app.NFTKeeper, app.AccountKeeper, app.BankKeeper, app.interfaceRegistry), consensus.NewAppModule(appCodec, app.ConsensusParamsKeeper), xion.NewAppModule(app.XionKeeper), - globalfee.NewAppModule(app.GetSubspace(globalfee.ModuleName), app.GetSubspace(stakingtypes.ModuleName)), + globalfee.NewAppModule(app.GetSubspace(globalfee.ModuleName)), wasm.NewAppModule(appCodec, &app.WasmKeeper, app.StakingKeeper, app.AccountKeeper, app.BankKeeper, app.MsgServiceRouter(), app.GetSubspace(wasmtypes.ModuleName)), ibc.NewAppModule(app.IBCKeeper), transfer.NewAppModule(app.TransferKeeper), @@ -884,7 +884,7 @@ func (app *WasmApp) setAnteHandler(txConfig client.TxConfig, wasmConfig wasmtype WasmConfig: &wasmConfig, TXCounterStoreKey: txCounterStoreKey, GlobalFeeSubspace: app.GetSubspace(globalfee.ModuleName), - StakingSubspace: app.GetSubspace(stakingtypes.ModuleName), + StakingKeeper: app.StakingKeeper, }, ) if err != nil { diff --git a/x/globalfee/ante/antetest/fee_test.go b/x/globalfee/ante/antetest/fee_test.go index 49254210..85795cbd 100644 --- a/x/globalfee/ante/antetest/fee_test.go +++ b/x/globalfee/ante/antetest/fee_test.go @@ -24,7 +24,7 @@ func TestIntegrationTestSuite(t *testing.T) { func (s *IntegrationTestSuite) TestGetDefaultGlobalFees() { // set globalfees and min gas price - feeDecorator, _ := s.SetupTestGlobalFeeStoreAndMinGasPrice([]sdk.DecCoin{}, &globfeetypes.Params{}) + feeDecorator, _ := s.SetupTestGlobalFeeStoreAndMinGasPrice([]sdk.DecCoin{}, &globfeetypes.Params{}, bondDenom) defaultGlobalFees, err := feeDecorator.DefaultZeroGlobalFee(s.ctx) s.Require().NoError(err) s.Require().Greater(len(defaultGlobalFees), 0) @@ -609,7 +609,7 @@ func (s *IntegrationTestSuite) TestGlobalFeeMinimumGasFeeAnteHandler() { s.Run(name, func() { // set globalfees and min gas price globalfeeParams.MinimumGasPrices = tc.globalFee - _, antehandler := s.SetupTestGlobalFeeStoreAndMinGasPrice(tc.minGasPrice, globalfeeParams) + _, antehandler := s.SetupTestGlobalFeeStoreAndMinGasPrice(tc.minGasPrice, globalfeeParams, bondDenom) // set fee decorator to ante handler @@ -697,7 +697,7 @@ func (s *IntegrationTestSuite) TestGetMinGasPrice() { for _, tc := range testCases { s.Run(tc.name, func() { - s.SetupTestGlobalFeeStoreAndMinGasPrice(tc.minGasPrice, &globfeetypes.Params{}) + s.SetupTestGlobalFeeStoreAndMinGasPrice(tc.minGasPrice, &globfeetypes.Params{}, bondDenom) fees := xionfeeante.GetMinGasPrice(s.ctx, int64(tc.feeTxGasLimit)) s.Require().True(tc.expCoins.Sort().IsEqual(fees)) @@ -711,7 +711,7 @@ func (s *IntegrationTestSuite) TestContainsOnlyBypassMinFeeMsgs() { BypassMinFeeMsgTypes: globfeetypes.DefaultBypassMinFeeMsgTypes, MaxTotalBypassMinFeeMsgGasUsage: globfeetypes.DefaultmaxTotalBypassMinFeeMsgGasUsage, } - feeDecorator, _ := s.SetupTestGlobalFeeStoreAndMinGasPrice([]sdk.DecCoin{}, globalfeeParams) + feeDecorator, _ := s.SetupTestGlobalFeeStoreAndMinGasPrice([]sdk.DecCoin{}, globalfeeParams, bondDenom) testCases := []struct { name string msgs []sdk.Msg @@ -768,10 +768,10 @@ func (s *IntegrationTestSuite) TestGetTxFeeRequired() { globalfeeParamsEmpty := &globfeetypes.Params{MinimumGasPrices: []sdk.DecCoin{}} // setup tests with default global fee i.e. "0uatom" and empty local min gas prices - feeDecorator, _ := s.SetupTestGlobalFeeStoreAndMinGasPrice([]sdk.DecCoin{}, globalfeeParamsEmpty) + feeDecorator, _ := s.SetupTestGlobalFeeStoreAndMinGasPrice([]sdk.DecCoin{}, globalfeeParamsEmpty, noBondDenom) // set a subspace that doesn't have the stakingtypes.KeyBondDenom key registred - feeDecorator.StakingSubspace = s.app.GetSubspace(globfeetypes.ModuleName) + //feeDecorator.StakingSubspace = s.app.GetSubspace(globfeetypes.ModuleName) // check that an error is returned when staking bond denom is empty _, err := feeDecorator.GetTxFeeRequired(s.ctx, nil) @@ -784,6 +784,7 @@ func (s *IntegrationTestSuite) TestGetTxFeeRequired() { feeDecorator, _ = s.SetupTestGlobalFeeStoreAndMinGasPrice( sdk.NewDecCoinsFromCoins(localMinGasPrices...), globalfeeParamsEmpty, + bondDenom, ) // mock tx data diff --git a/x/globalfee/ante/antetest/fee_test_setup.go b/x/globalfee/ante/antetest/fee_test_setup.go index d2f6e7d7..46267e57 100644 --- a/x/globalfee/ante/antetest/fee_test_setup.go +++ b/x/globalfee/ante/antetest/fee_test_setup.go @@ -52,8 +52,15 @@ func (s *IntegrationTestSuite) SetupTest() { s.ctx = ctx s.clientCtx = client.Context{}.WithTxConfig(encodingConfig.TxConfig) } +func bondDenom(_ sdk.Context) string { + return testBondDenom +} + +func noBondDenom(_ sdk.Context) string { + return "" +} -func (s *IntegrationTestSuite) SetupTestGlobalFeeStoreAndMinGasPrice(minGasPrice []sdk.DecCoin, globalFeeParams *globfeetypes.Params) (xionfeeante.FeeDecorator, sdk.AnteHandler) { +func (s *IntegrationTestSuite) SetupTestGlobalFeeStoreAndMinGasPrice(minGasPrice []sdk.DecCoin, globalFeeParams *globfeetypes.Params, bondDenom func(sdk.Context) string) (xionfeeante.FeeDecorator, sdk.AnteHandler) { subspace := s.app.GetSubspace(globalfee.ModuleName) subspace.SetParamSet(s.ctx, globalFeeParams) s.ctx = s.ctx.WithMinGasPrices(minGasPrice).WithIsCheckTx(true) @@ -61,10 +68,9 @@ func (s *IntegrationTestSuite) SetupTestGlobalFeeStoreAndMinGasPrice(minGasPrice // set staking params stakingParam := stakingtypes.DefaultParams() stakingParam.BondDenom = testBondDenom - stakingSubspace := s.SetupTestStakingSubspace(stakingParam) // build fee decorator - feeDecorator := xionfeeante.NewFeeDecorator(subspace, stakingSubspace) + feeDecorator := xionfeeante.NewFeeDecorator(subspace, bondDenom) // chain fee decorator to antehandler antehandler := sdk.ChainAnteDecorators(feeDecorator) diff --git a/x/globalfee/ante/fee.go b/x/globalfee/ante/fee.go index 4c44a977..984392dc 100644 --- a/x/globalfee/ante/fee.go +++ b/x/globalfee/ante/fee.go @@ -8,7 +8,6 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" - stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" "github.com/burnt-labs/xion/x/globalfee" "github.com/burnt-labs/xion/x/globalfee/types" @@ -29,21 +28,17 @@ var _ sdk.AnteDecorator = FeeDecorator{} type FeeDecorator struct { GlobalMinFeeParamSource globalfee.ParamSource - StakingSubspace paramtypes.Subspace + StakingKeeperBondDenom func(sdk.Context) string } -func NewFeeDecorator(globalfeeSubspace, stakingSubspace paramtypes.Subspace) FeeDecorator { +func NewFeeDecorator(globalfeeSubspace paramtypes.Subspace, stakingKeeperDenom func(sdk.Context) string) FeeDecorator { if !globalfeeSubspace.HasKeyTable() { panic("global fee paramspace was not set up via module") } - if !stakingSubspace.HasKeyTable() { - panic("staking paramspace was not set up via module") - } - return FeeDecorator{ GlobalMinFeeParamSource: globalfeeSubspace, - StakingSubspace: stakingSubspace, + StakingKeeperBondDenom: stakingKeeperDenom, } } @@ -189,7 +184,7 @@ func (mfd FeeDecorator) GetGlobalFee(ctx sdk.Context, feeTx sdk.FeeTx) (sdk.Coin if mfd.GlobalMinFeeParamSource.Has(ctx, types.ParamStoreKeyMinGasPrices) { mfd.GlobalMinFeeParamSource.Get(ctx, types.ParamStoreKeyMinGasPrices, &globalMinGasPrices) } - // global fee is empty set, set global fee to 0uatom + // global fee is empty set, set global fee to 0uxion if len(globalMinGasPrices) == 0 { globalMinGasPrices, err = mfd.DefaultZeroGlobalFee(ctx) if err != nil { @@ -219,11 +214,7 @@ func (mfd FeeDecorator) DefaultZeroGlobalFee(ctx sdk.Context) ([]sdk.DecCoin, er } func (mfd FeeDecorator) getBondDenom(ctx sdk.Context) (bondDenom string) { - if mfd.StakingSubspace.Has(ctx, stakingtypes.KeyBondDenom) { - mfd.StakingSubspace.Get(ctx, stakingtypes.KeyBondDenom, &bondDenom) - } - - return + return mfd.StakingKeeperBondDenom(ctx) } func (mfd FeeDecorator) ContainsOnlyBypassMinFeeMsgs(ctx sdk.Context, msgs []sdk.Msg) bool { diff --git a/x/globalfee/module.go b/x/globalfee/module.go index e70555b9..f491c83d 100644 --- a/x/globalfee/module.go +++ b/x/globalfee/module.go @@ -16,8 +16,6 @@ import ( "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/spf13/cobra" - stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" - "github.com/burnt-labs/xion/x/globalfee/client/cli" "github.com/burnt-labs/xion/x/globalfee/types" ) @@ -85,15 +83,11 @@ type AppModule struct { } // NewAppModule constructor -func NewAppModule(globalfeeSubspace paramstypes.Subspace, stakingSubspace paramstypes.Subspace) *AppModule { +func NewAppModule(globalfeeSubspace paramstypes.Subspace) *AppModule { if !globalfeeSubspace.HasKeyTable() { globalfeeSubspace = globalfeeSubspace.WithKeyTable(types.ParamKeyTable()) } - if !stakingSubspace.HasKeyTable() { - stakingSubspace = stakingSubspace.WithKeyTable(stakingtypes.ParamKeyTable()) - } - - return &AppModule{globalfeeSubspace: globalfeeSubspace, stakingSubspace: stakingSubspace} + return &AppModule{globalfeeSubspace: globalfeeSubspace} } func (a AppModule) InitGenesis(ctx sdk.Context, marshaler codec.JSONCodec, message json.RawMessage) []abci.ValidatorUpdate { From a8a053e07ecc2f0fbbd6a846332f5debeed0b131 Mon Sep 17 00:00:00 2001 From: Eduardo Diaz Date: Tue, 27 Jun 2023 09:52:37 -0400 Subject: [PATCH 103/501] [WIP] Merge DeductFee Handler onto globalfee; highly experimental --- app/ante.go | 4 +- integration_tests/minimum_fee_test.go | 69 ++++++++ integration_tests/mint_test.go | 8 +- integration_tests/send_test.go | 8 +- integration_tests/utils.go | 41 ++++- x/globalfee/ante/expected_keepers.go | 20 +++ x/globalfee/ante/fee.go | 224 ++++++++++++++++++++++++-- x/globalfee/ante/fee_utils.go | 1 + x/globalfee/ante/validator_tx_fee.go | 66 ++++++++ 9 files changed, 420 insertions(+), 21 deletions(-) create mode 100644 integration_tests/minimum_fee_test.go create mode 100644 x/globalfee/ante/expected_keepers.go create mode 100644 x/globalfee/ante/validator_tx_fee.go diff --git a/app/ante.go b/app/ante.go index faad8e1d..090d4fb3 100644 --- a/app/ante.go +++ b/app/ante.go @@ -61,8 +61,8 @@ func NewAnteHandler(options HandlerOptions) (sdk.AnteHandler, error) { ante.NewTxTimeoutHeightDecorator(), ante.NewValidateMemoDecorator(options.AccountKeeper), ante.NewConsumeGasForTxSizeDecorator(options.AccountKeeper), - globalfeeante.NewFeeDecorator(options.GlobalFeeSubspace, options.StakingKeeper.BondDenom), - ante.NewDeductFeeDecorator(options.AccountKeeper, options.BankKeeper, options.FeegrantKeeper, options.TxFeeChecker), + globalfeeante.NewFeeDecorator(options.GlobalFeeSubspace, options.AccountKeeper, options.BankKeeper, options.FeegrantKeeper, options.TxFeeChecker, options.StakingKeeper.BondDenom), // + //ante.NewDeductFeeDecorator(options.AccountKeeper, options.BankKeeper, options.FeegrantKeeper, options.TxFeeChecker), ante.NewSetPubKeyDecorator(options.AccountKeeper), // SetPubKeyDecorator must be called before all signature verification decorators ante.NewValidateSigCountDecorator(options.AccountKeeper), ante.NewSigGasConsumeDecorator(options.AccountKeeper, options.SigGasConsumer), diff --git a/integration_tests/minimum_fee_test.go b/integration_tests/minimum_fee_test.go new file mode 100644 index 00000000..f93b9ac5 --- /dev/null +++ b/integration_tests/minimum_fee_test.go @@ -0,0 +1,69 @@ +package integration_tests + +import ( + "fmt" + "testing" + + xiontypes "github.com/burnt-labs/xion/x/xion/types" + "github.com/cosmos/cosmos-sdk/types" + ibctest "github.com/strangelove-ventures/interchaintest/v7" + "github.com/strangelove-ventures/interchaintest/v7/testutil" + "github.com/stretchr/testify/require" +) + +func TestXionMinimumFee(t *testing.T) { + if testing.Short() { + t.Skip("skipping in short mode") + } + + t.Parallel() + + xion, ctx := BuildXionChain(t, "0.1uxion", ModifyInterChainGenesis(ModifyInterChainGenesisFn{ModifyGenesisShortProposals}, [][]string{{votingPeriod, maxDepositPeriod}})) + + // Create and Fund User Wallets + t.Log("creating and funding user accounts") + fundAmount := int64(10_000_000) + users := ibctest.GetAndFundTestUsers(t, ctx, "default", fundAmount, xion) + xionUser := users[0] + currentHeight, _ := xion.Height(ctx) + testutil.WaitForBlocks(ctx, int(currentHeight)+8, xion) + t.Logf("created xion user %s", xionUser.FormattedAddress()) + + xionUserBalInitial, err := xion.GetBalance(ctx, xionUser.FormattedAddress(), xion.Config().Denom) + require.NoError(t, err) + require.Equal(t, fundAmount, xionUserBalInitial) + + // step 1: send a xion message with default (0%) platform fee + recipientKeyName := "recipient-key" + err = xion.CreateKey(ctx, recipientKeyName) + require.NoError(t, err) + receipientKeyAddressBytes, err := xion.GetAddress(ctx, recipientKeyName) + require.NoError(t, err) + recipientKeyAddress, err := types.Bech32ifyAddressBytes(xion.Config().Bech32Prefix, receipientKeyAddressBytes) + require.NoError(t, err) + + xion.Config().EncodingConfig.InterfaceRegistry.RegisterImplementations( + (*types.Msg)(nil), + &xiontypes.MsgSetPlatformPercentage{}, + &xiontypes.MsgSend{}, + ) + //_, err = xion.FullNodes[0].ExecTx(ctx, + // xionUser.KeyName(), + // "xion", "send", xionUser.KeyName(), + // "--chain-id", xion.Config().ChainID, + // recipientKeyAddress, fmt.Sprintf("%d%s", 100, xion.Config().Denom), + //) + + currentHeight, _ = xion.Height(ctx) + fmt.Println(fmt.Sprintf("Height Before TX: %d", currentHeight)) + _, err = ExecTx(t, ctx, xion.FullNodes[0], + xionUser.KeyName(), + "xion", "send", xionUser.KeyName(), + "--chain-id", xion.Config().ChainID, + recipientKeyAddress, fmt.Sprintf("%d%s", 100, xion.Config().Denom), + ) + require.NoError(t, err) + balance, err := xion.GetBalance(ctx, recipientKeyAddress, xion.Config().Denom) + require.NoError(t, err) + require.Equal(t, uint64(100), uint64(balance)) +} diff --git a/integration_tests/mint_test.go b/integration_tests/mint_test.go index 82326d1f..90a24b44 100644 --- a/integration_tests/mint_test.go +++ b/integration_tests/mint_test.go @@ -32,7 +32,7 @@ func TestMintModuleNoInflationNoFees(t *testing.T) { t.Skip("skipping in short mode") } - xion, ctx := BuildXionChain(t, ModifyInterChainGenesis(ModifyInterChainGenesisFn{ModifyGenesisInflation}, [][]string{{inflationMin, inflationMax, inflationRateChange}})) + xion, ctx := BuildXionChain(t, "0.0uxion", ModifyInterChainGenesis(ModifyInterChainGenesisFn{ModifyGenesisInflation}, [][]string{{inflationMin, inflationMax, inflationRateChange}})) // Wait for some blocks and check if that supply stays the same chainHeight, _ := xion.Height(ctx) @@ -53,7 +53,7 @@ func TestMintModuleInflationNoFees(t *testing.T) { t.Parallel() - xion, ctx := BuildXionChain(t, ModifyInterChainGenesis(ModifyInterChainGenesisFn{}, [][]string{{}})) + xion, ctx := BuildXionChain(t, "0.0uxion", ModifyInterChainGenesis(ModifyInterChainGenesisFn{}, [][]string{{}})) chainHeight, _ := xion.Height(ctx) testutil.WaitForBlocks(ctx, int(chainHeight)+10, xion) @@ -152,7 +152,7 @@ func TestMintModuleInflationHighFees(t *testing.T) { t.Parallel() - xion, ctx := BuildXionChain(t, ModifyInterChainGenesis(ModifyInterChainGenesisFn{}, [][]string{{}})) + xion, ctx := BuildXionChain(t, "0.0uxion", ModifyInterChainGenesis(ModifyInterChainGenesisFn{}, [][]string{{}})) txHashes := MintModuleTest{ TxHashes: []string{}, @@ -180,7 +180,7 @@ func TestMintModuleInflationLowFees(t *testing.T) { t.Parallel() - xion, ctx := BuildXionChain(t, ModifyInterChainGenesis(ModifyInterChainGenesisFn{}, [][]string{{}})) + xion, ctx := BuildXionChain(t, "0.0uxion", ModifyInterChainGenesis(ModifyInterChainGenesisFn{}, [][]string{{}})) txHashes := MintModuleTest{ TxHashes: []string{}, diff --git a/integration_tests/send_test.go b/integration_tests/send_test.go index adfc0b18..769ca67b 100644 --- a/integration_tests/send_test.go +++ b/integration_tests/send_test.go @@ -24,7 +24,7 @@ func TestXionSendPlatformFee(t *testing.T) { t.Parallel() - xion, ctx := BuildXionChain(t, ModifyInterChainGenesis(ModifyInterChainGenesisFn{ModifyGenesisShortProposals}, [][]string{{votingPeriod, maxDepositPeriod}})) + xion, ctx := BuildXionChain(t, "0.0uxion", ModifyInterChainGenesis(ModifyInterChainGenesisFn{ModifyGenesisShortProposals}, [][]string{{votingPeriod, maxDepositPeriod}})) // Create and Fund User Wallets t.Log("creating and funding user accounts") @@ -32,7 +32,7 @@ func TestXionSendPlatformFee(t *testing.T) { users := ibctest.GetAndFundTestUsers(t, ctx, "default", fundAmount, xion) xionUser := users[0] currentHeight, _ := xion.Height(ctx) - testutil.WaitForBlocks(ctx, int(currentHeight)+4, xion) + testutil.WaitForBlocks(ctx, int(currentHeight)+8, xion) t.Logf("created xion user %s", xionUser.FormattedAddress()) xionUserBalInitial, err := xion.GetBalance(ctx, xionUser.FormattedAddress(), xion.Config().Denom) @@ -131,11 +131,13 @@ func TestXionSendPlatformFee(t *testing.T) { "--chain-id", xion.Config().ChainID, recipientKeyAddress, fmt.Sprintf("%d%s", 200, xion.Config().Denom), ) + require.NoError(t, err) + testutil.WaitForBlocks(ctx, int(currentHeight)+100, xion) postSendingBalance, err := xion.GetBalance(ctx, xionUser.FormattedAddress(), xion.Config().Denom) require.NoError(t, err) - require.Equal(t, uint64(initialSendingBalance-200), uint64(postSendingBalance)) + require.Equalf(t, uint64(initialSendingBalance-200), uint64(postSendingBalance), "Wanted %d, got %d", uint64(initialSendingBalance-200), uint64(postSendingBalance)) postReceivingBalance, err := xion.GetBalance(ctx, recipientKeyAddress, xion.Config().Denom) require.NoError(t, err) require.Equal(t, uint64(290), uint64(postReceivingBalance)) diff --git a/integration_tests/utils.go b/integration_tests/utils.go index 7e64b021..3b887f09 100644 --- a/integration_tests/utils.go +++ b/integration_tests/utils.go @@ -12,6 +12,7 @@ import ( "time" "cosmossdk.io/math" + "github.com/cosmos/cosmos-sdk/crypto/keyring" authTx "github.com/cosmos/cosmos-sdk/x/auth/tx" "github.com/icza/dyno" @@ -19,6 +20,7 @@ import ( "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" "github.com/strangelove-ventures/interchaintest/v7/ibc" "github.com/strangelove-ventures/interchaintest/v7/testreporter" + "github.com/strangelove-ventures/interchaintest/v7/testutil" "github.com/stretchr/testify/require" "go.uber.org/zap/zaptest" ) @@ -31,7 +33,7 @@ const ( // Function type for any function that modify the genesis file type ModifyInterChainGenesisFn []func(ibc.ChainConfig, []byte, ...string) ([]byte, error) -func BuildXionChain(t *testing.T, modifyGenesis func(ibc.ChainConfig, []byte) ([]byte, error)) (*cosmos.CosmosChain, context.Context) { +func BuildXionChain(t *testing.T, gas string, modifyGenesis func(ibc.ChainConfig, []byte) ([]byte, error)) (*cosmos.CosmosChain, context.Context) { ctx := context.Background() var numFullNodes = 1 @@ -54,8 +56,9 @@ func BuildXionChain(t *testing.T, modifyGenesis func(ibc.ChainConfig, []byte) ([ UidGid: "1025:1025", }, }, - GasPrices: "0.0uxion", - GasAdjustment: 1.3, + //GasPrices: "0.1uxion", + GasPrices: gas, + GasAdjustment: 2.0, Type: "cosmos", ChainID: "xion-1", Bin: "xiond", @@ -382,3 +385,35 @@ func VerifyMintModuleTest(t *testing.T, xion *cosmos.CosmosChain, ctx context.Co MintModuleTestHarness(t, xion, ctx, int(txResp.Height)+1) // check my block and the next one } } + +func TxCommandOverrideGas(t *testing.T, tn *cosmos.ChainNode, keyName, gas string, command ...string) []string { + command = append([]string{"tx"}, command...) + return tn.NodeCommand(append(command, + "--from", keyName, + "--gas-prices", gas, + "--gas-adjustment", fmt.Sprint(tn.Chain.Config().GasAdjustment), + "--gas", "auto", + "--keyring-backend", keyring.BackendTest, + "--output", "json", + "-y", + )...) +} + +func ExecTx(t *testing.T, ctx context.Context, tn *cosmos.ChainNode, keyName string, command ...string) (string, error) { + stdout, _, err := tn.Exec(ctx, TxCommandOverrideGas(t, tn, keyName, "0.0uxion", command...), nil) + if err != nil { + return "", err + } + output := cosmos.CosmosTx{} + err = json.Unmarshal([]byte(stdout), &output) + if err != nil { + return "", err + } + if output.Code != 0 { + return output.TxHash, fmt.Errorf("transaction failed with code %d: %s", output.Code, output.RawLog) + } + if err := testutil.WaitForBlocks(ctx, 2, tn); err != nil { + return "", err + } + return output.TxHash, nil +} diff --git a/x/globalfee/ante/expected_keepers.go b/x/globalfee/ante/expected_keepers.go new file mode 100644 index 00000000..4dbbbd21 --- /dev/null +++ b/x/globalfee/ante/expected_keepers.go @@ -0,0 +1,20 @@ +package ante + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/x/auth/types" +) + +// AccountKeeper defines the contract needed for AccountKeeper related APIs. +// Interface provides support to use non-sdk AccountKeeper for AnteHandler's decorators. +type AccountKeeper interface { + GetParams(ctx sdk.Context) (params types.Params) + GetAccount(ctx sdk.Context, addr sdk.AccAddress) types.AccountI + SetAccount(ctx sdk.Context, acc types.AccountI) + GetModuleAddress(moduleName string) sdk.AccAddress +} + +// FeegrantKeeper defines the expected feegrant keeper. +type FeegrantKeeper interface { + UseGrantedFees(ctx sdk.Context, granter, grantee sdk.AccAddress, fee sdk.Coins, msgs []sdk.Msg) error +} diff --git a/x/globalfee/ante/fee.go b/x/globalfee/ante/fee.go index 984392dc..2902cee3 100644 --- a/x/globalfee/ante/fee.go +++ b/x/globalfee/ante/fee.go @@ -10,7 +10,12 @@ import ( paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" "github.com/burnt-labs/xion/x/globalfee" + "github.com/burnt-labs/xion/x/globalfee/types" + + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + + authante "github.com/cosmos/cosmos-sdk/x/auth/ante" ) // FeeWithBypassDecorator checks if the transaction's fee is at least as large @@ -26,19 +31,34 @@ import ( var _ sdk.AnteDecorator = FeeDecorator{} +// TxFeeChecker check if the provided fee is enough and returns the effective fee and tx priority, +// the effective fee should be deducted later, and the priority should be returned in abci response. +type TxFeeChecker func(ctx sdk.Context, tx sdk.Tx) (sdk.Coins, int64, error) + type FeeDecorator struct { GlobalMinFeeParamSource globalfee.ParamSource StakingKeeperBondDenom func(sdk.Context) string + accountKeeper authante.AccountKeeper + bankKeeper authtypes.BankKeeper + feegrantKeeper FeegrantKeeper + txFeeChecker TxFeeChecker } -func NewFeeDecorator(globalfeeSubspace paramtypes.Subspace, stakingKeeperDenom func(sdk.Context) string) FeeDecorator { +func NewFeeDecorator(globalfeeSubspace paramtypes.Subspace, ak authante.AccountKeeper, bk authtypes.BankKeeper, fk authante.FeegrantKeeper, tfc authante.TxFeeChecker, stakingKeeperDenom func(sdk.Context) string) FeeDecorator { if !globalfeeSubspace.HasKeyTable() { panic("global fee paramspace was not set up via module") } + if tfc == nil { + tfc = checkTxFeeWithValidatorMinGasPrices + } + return FeeDecorator{ GlobalMinFeeParamSource: globalfeeSubspace, StakingKeeperBondDenom: stakingKeeperDenom, + accountKeeper: ak, + bankKeeper: bk, + feegrantKeeper: fk, } } @@ -51,10 +71,12 @@ func (mfd FeeDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, ne // Do not check minimum-gas-prices and global fees during simulations if simulate { - return next(ctx, tx, simulate) + //return next(ctx, tx, simulate) + return mfd.Deduct(ctx, tx, simulate, next) // TODO: call DeductFee } - // Get the required fees according to the CheckTx or DeliverTx modes + // Get the required fees according to the CheckTx or DeliverTx modes // TODO: deleete + // Get the required fees, as per xion specification max(network_fees, local_validator_fees) feeRequired, err := mfd.GetTxFeeRequired(ctx, feeTx) if err != nil { return ctx, err @@ -71,6 +93,9 @@ func (mfd FeeDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, ne gas := feeTx.GetGas() msgs := feeTx.GetMsgs() + msg := fmt.Sprintf("SOMETHING SHOULD BE HERE!!! \n\n Gas:%d \nFee Coins: %s\nMsgs: %+v \n\n", gas, feeCoins.String(), msgs) + ctx.Logger().Info(msg) + // split feeRequired into zero and non-zero coins(nonZeroCoinFeesReq, zeroCoinFeesDenomReq), split feeCoins according to // nonZeroCoinFeesReq, zeroCoinFeesDenomReq, // so that feeCoins can be checked separately against them. @@ -104,7 +129,9 @@ func (mfd FeeDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, ne allowedToBypassMinFee := allBypassMsgs && doesNotExceedMaxGasUsage if allowedToBypassMinFee { - return next(ctx, tx, simulate) + ctx.Logger().Info("We are Bypassing\n\n") + //return next(ctx, tx, simulate) + return mfd.Deduct(ctx, tx, simulate, next) // TODO: call DeductFee } // if the msg does not satisfy bypass condition and the feeCoins denoms are subset of feeRequired, @@ -115,7 +142,9 @@ func (mfd FeeDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, ne // otherwise, err if len(feeCoins) == 0 { if len(zeroCoinFeesDenomReq) != 0 { - return next(ctx, tx, simulate) + ctx.Logger().Info("Fees are Zero\n\n") + // TODO: Add Modified FeeDeduct AnteHandle Behavior + return mfd.Deduct(ctx, tx, simulate, next) } return ctx, sdkerrors.Wrapf(sdkerrors.ErrInsufficientFee, "insufficient fees; got: %s required: %s", feeCoins.String(), feeRequired.String()) } @@ -123,7 +152,10 @@ func (mfd FeeDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, ne // when feeCoins != [] // special case: if TX has at least one of the zeroCoinFeesDenomReq, then it should pass if len(feeCoinsZeroDenom) > 0 { - return next(ctx, tx, simulate) + ctx.Logger().Info("Fees are greater than zero\n\n") + // TODO: Add Modified FeeDeduct AnteHandle Behavior + //return next(ctx, tx, simulate) + return mfd.Deduct(ctx, tx, simulate, next) } // After all the checks, the tx is confirmed: @@ -142,7 +174,10 @@ func (mfd FeeDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, ne return ctx, sdkerrors.Wrap(sdkerrors.ErrInsufficientFee, errMsg) } - return next(ctx, tx, simulate) + ctx.Logger().Info("All checks have passed\n\n") + // TODO: Add Modified FeeDeduct AnteHandle Behavior + //return next(ctx, tx, simulate) + return mfd.DeductFee(ctx, tx, simulate, next) } // GetTxFeeRequired returns the required fees for the given FeeTx. @@ -158,6 +193,8 @@ func (mfd FeeDecorator) GetTxFeeRequired(ctx sdk.Context, tx sdk.FeeTx) (sdk.Coi // In DeliverTx, the global fee min gas prices are the only tx fee requirements. if !ctx.IsCheckTx() { + ctx.Logger().Info(fmt.Sprintf("Height: %d\nGlobalFees: %s \n", ctx.BlockHeight(), globalFees.String())) + ctx.Logger().Info("We are ignoring local fees!!!") return globalFees, nil } @@ -167,8 +204,18 @@ func (mfd FeeDecorator) GetTxFeeRequired(ctx sdk.Context, tx sdk.FeeTx) (sdk.Coi // Get local minimum-gas-prices localFees := GetMinGasPrice(ctx, int64(tx.GetGas())) - // Return combined fee requirements - return CombinedFeeRequirement(globalFees, localFees) + ctx.Logger().Info(fmt.Sprintf("GlobalFees: %s \n", globalFees.String())) + ctx.Logger().Info(fmt.Sprintf("LocalFees: %s \n", localFees.String())) + + return MaxCoins(globalFees, localFees), nil + // return CombinedFeeRequirement(globalFees, localFees) // TODO: delete +} + +func MaxCoins(a, b sdk.Coins) sdk.Coins { + if a.IsAllGT(b) { + return a + } + return b } // GetGlobalFee returns the global fees for a given fee tx's gas @@ -265,3 +312,162 @@ func GetMinGasPrice(ctx sdk.Context, gasLimit int64) sdk.Coins { return requiredFees.Sort() } + +func (mfd FeeDecorator) HeightGuard(ctx sdk.Context, tx sdk.FeeTx, simulate bool) (sdk.Context, error) { + if !simulate && ctx.BlockHeight() > 0 && tx.GetGas() == 0 { + return ctx, sdkerrors.Wrap(sdkerrors.ErrInvalidGasLimit, "must provide positive gas") + } + return ctx, nil +} + +func (mfd FeeDecorator) TxGuard(ctx sdk.Context, tx sdk.Tx) (sdk.FeeTx, error) { + feeTx, ok := tx.(sdk.FeeTx) + if !ok { + return nil, sdkerrors.Wrap(sdkerrors.ErrTxDecode, "Tx must be a FeeTx") + } + return feeTx, nil +} + +func (mfd FeeDecorator) DeductFee(ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler) (sdk.Context, error) { + feeTx, err := mfd.TxGuard(ctx, tx) + if err != nil { + return ctx, err + } + + ctx, err = mfd.HeightGuard(ctx, feeTx, simulate) // We have to convert to FeeTx to extract Gas + if err != nil { + return ctx, err + } + + var priority int64 + + // Fee should be provided + if err := mfd.checkDeductFee(ctx, tx, feeTx.GetFee()); err != nil { + return ctx, err + } + + newCtx := ctx.WithPriority(priority) + + return next(newCtx, tx, simulate) +} + +func (mfd FeeDecorator) Deduct(ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler) (sdk.Context, error) { + feeTx, err := mfd.TxGuard(ctx, tx) + if err != nil { + return ctx, err + } + + ctx, err = mfd.HeightGuard(ctx, feeTx, simulate) // We have to convert to FeeTx to extract Gas + if err != nil { + return ctx, err + } + + var priority int64 + + fee := feeTx.GetFee() + + if !simulate { + fee, priority, err = mfd.txFeeChecker(ctx, tx) + if err != nil { + return ctx, err + } + } + if err := mfd.checkDeductFee(ctx, tx, fee); err != nil { + return ctx, err + } + + newCtx := ctx.WithPriority(priority) + + return next(newCtx, tx, simulate) +} + +// TODO: Must modify to be wary of global fee. +// +// func (mfd FeeDecorator) feegrantGuard(ctx sdk.Context, feeTx sdk.FeeTx, fee sdk.Coins) (sdk.AccAddress, error) { +// feePayer := feeTx.FeePayer() +// feeGranter := feeTx.FeeGranter() +// deductFeesFrom := feePayer +// +// // if feegranter set deduct fee from feegranter account. +// // this works with only when feegrant enabled. +// if feeGranter != nil { +// if mfd.feegrantKeeper == nil { +// return nil, sdkerrors.ErrInvalidRequest.Wrap("fee grants are not enabled") +// } else if !feeGranter.Equals(feePayer) { +// err := mfd.feegrantKeeper.UseGrantedFees(ctx, feeGranter, feePayer, fee, sdkTx.GetMsgs()) +// if err != nil { +// return nil, sdkerrors.Wrapf(err, "%s does not allow to pay fees for %s", feeGranter, feePayer) +// } +// } +// +// deductFeesFrom = feeGranter +// } +// return deductFeesFrom, nil +// } +func (mfd FeeDecorator) checkDeductFee(ctx sdk.Context, sdkTx sdk.Tx, fee sdk.Coins) error { + feeTx, ok := sdkTx.(sdk.FeeTx) + if !ok { + return sdkerrors.Wrap(sdkerrors.ErrTxDecode, "Tx must be a FeeTx") + } + + if addr := mfd.accountKeeper.GetModuleAddress(authtypes.FeeCollectorName); addr == nil { + return fmt.Errorf("fee collector module account (%s) has not been set", authtypes.FeeCollectorName) + } + + feePayer := feeTx.FeePayer() + feeGranter := feeTx.FeeGranter() + deductFeesFrom := feePayer + + // if feegranter set deduct fee from feegranter account. + // this works with only when feegrant enabled. + if feeGranter != nil { + if mfd.feegrantKeeper == nil { + return sdkerrors.ErrInvalidRequest.Wrap("fee grants are not enabled") + } else if !feeGranter.Equals(feePayer) { + err := mfd.feegrantKeeper.UseGrantedFees(ctx, feeGranter, feePayer, fee, sdkTx.GetMsgs()) + if err != nil { + return sdkerrors.Wrapf(err, "%s does not allow to pay fees for %s", feeGranter, feePayer) + } + } + + deductFeesFrom = feeGranter + } + + deductFeesFromAcc := mfd.accountKeeper.GetAccount(ctx, deductFeesFrom) + if deductFeesFromAcc == nil { + return sdkerrors.ErrUnknownAddress.Wrapf("fee payer address: %s does not exist", deductFeesFrom) + } + + // deduct the fees + if !fee.IsZero() { + err := DeductFees(mfd.bankKeeper, ctx, deductFeesFromAcc, fee) + if err != nil { + return err + } + } + + events := sdk.Events{ + sdk.NewEvent( + sdk.EventTypeTx, + sdk.NewAttribute(sdk.AttributeKeyFee, fee.String()), + sdk.NewAttribute(sdk.AttributeKeyFeePayer, deductFeesFrom.String()), + ), + } + ctx.EventManager().EmitEvents(events) + + return nil +} + +// DeductFees deducts fees from the given account. +func DeductFees(bankKeeper authtypes.BankKeeper, ctx sdk.Context, acc authtypes.AccountI, fees sdk.Coins) error { + if !fees.IsValid() { + return sdkerrors.Wrapf(sdkerrors.ErrInsufficientFee, "invalid fee amount: %s", fees) + } + + err := bankKeeper.SendCoinsFromAccountToModule(ctx, acc.GetAddress(), authtypes.FeeCollectorName, fees) + if err != nil { + return sdkerrors.Wrapf(sdkerrors.ErrInsufficientFunds, err.Error()) + } + + return nil +} diff --git a/x/globalfee/ante/fee_utils.go b/x/globalfee/ante/fee_utils.go index 31c44aa3..a5d0a763 100644 --- a/x/globalfee/ante/fee_utils.go +++ b/x/globalfee/ante/fee_utils.go @@ -97,6 +97,7 @@ func splitCoinsByDenoms(feeCoins sdk.Coins, denomMap map[string]struct{}) (sdk.C // getNonZeroFees returns the given fees nonzero coins // and a map storing the zero coins's denoms +// TODO: document func getNonZeroFees(fees sdk.Coins) (sdk.Coins, map[string]struct{}) { requiredFeesNonZero := sdk.Coins{} requiredFeesZeroDenom := map[string]struct{}{} diff --git a/x/globalfee/ante/validator_tx_fee.go b/x/globalfee/ante/validator_tx_fee.go new file mode 100644 index 00000000..e8c865b7 --- /dev/null +++ b/x/globalfee/ante/validator_tx_fee.go @@ -0,0 +1,66 @@ +package ante + +import ( + "math" + + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" +) + +// checkTxFeeWithValidatorMinGasPrices implements the default fee logic, where the minimum price per +// unit of gas is fixed and set by each validator, can the tx priority is computed from the gas price. +func checkTxFeeWithValidatorMinGasPrices(ctx sdk.Context, tx sdk.Tx) (sdk.Coins, int64, error) { + feeTx, ok := tx.(sdk.FeeTx) + if !ok { + return nil, 0, sdkerrors.Wrap(sdkerrors.ErrTxDecode, "Tx must be a FeeTx") + } + + feeCoins := feeTx.GetFee() + gas := feeTx.GetGas() + + // Ensure that the provided fees meet a minimum threshold for the validator, + // if this is a CheckTx. This is only for local mempool purposes, and thus + // is only ran on check tx. + if ctx.IsCheckTx() { + minGasPrices := ctx.MinGasPrices() + if !minGasPrices.IsZero() { + requiredFees := make(sdk.Coins, len(minGasPrices)) + + // Determine the required fees by multiplying each required minimum gas + // price by the gas limit, where fee = ceil(minGasPrice * gasLimit). + glDec := sdkmath.LegacyNewDec(int64(gas)) + for i, gp := range minGasPrices { + fee := gp.Amount.Mul(glDec) + requiredFees[i] = sdk.NewCoin(gp.Denom, fee.Ceil().RoundInt()) + } + + if !feeCoins.IsAnyGTE(requiredFees) { + return nil, 0, sdkerrors.Wrapf(sdkerrors.ErrInsufficientFee, "insufficient fees; got: %s required: %s", feeCoins, requiredFees) + } + } + } + + priority := getTxPriority(feeCoins, int64(gas)) + return feeCoins, priority, nil +} + +// getTxPriority returns a naive tx priority based on the amount of the smallest denomination of the gas price +// provided in a transaction. +// NOTE: This implementation should be used with a great consideration as it opens potential attack vectors +// where txs with multiple coins could not be prioritize as expected. +func getTxPriority(fee sdk.Coins, gas int64) int64 { + var priority int64 + for _, c := range fee { + p := int64(math.MaxInt64) + gasPrice := c.Amount.QuoRaw(gas) + if gasPrice.IsInt64() { + p = gasPrice.Int64() + } + if priority == 0 || p < priority { + priority = p + } + } + + return priority +} From 654af107ac1be731c2dbf841223de3cd8317fa3f Mon Sep 17 00:00:00 2001 From: Eduardo Diaz Date: Thu, 29 Jun 2023 10:12:11 -0400 Subject: [PATCH 104/501] inject ante tx checker function --- x/globalfee/ante/fee.go | 102 +++++----------------------------- x/globalfee/ante/fee_utils.go | 42 +++++++++++++- 2 files changed, 55 insertions(+), 89 deletions(-) diff --git a/x/globalfee/ante/fee.go b/x/globalfee/ante/fee.go index 2902cee3..af51ccfc 100644 --- a/x/globalfee/ante/fee.go +++ b/x/globalfee/ante/fee.go @@ -31,17 +31,13 @@ import ( var _ sdk.AnteDecorator = FeeDecorator{} -// TxFeeChecker check if the provided fee is enough and returns the effective fee and tx priority, -// the effective fee should be deducted later, and the priority should be returned in abci response. -type TxFeeChecker func(ctx sdk.Context, tx sdk.Tx) (sdk.Coins, int64, error) - type FeeDecorator struct { GlobalMinFeeParamSource globalfee.ParamSource StakingKeeperBondDenom func(sdk.Context) string accountKeeper authante.AccountKeeper bankKeeper authtypes.BankKeeper feegrantKeeper FeegrantKeeper - txFeeChecker TxFeeChecker + txFeeChecker authante.TxFeeChecker } func NewFeeDecorator(globalfeeSubspace paramtypes.Subspace, ak authante.AccountKeeper, bk authtypes.BankKeeper, fk authante.FeegrantKeeper, tfc authante.TxFeeChecker, stakingKeeperDenom func(sdk.Context) string) FeeDecorator { @@ -56,6 +52,7 @@ func NewFeeDecorator(globalfeeSubspace paramtypes.Subspace, ak authante.AccountK return FeeDecorator{ GlobalMinFeeParamSource: globalfeeSubspace, StakingKeeperBondDenom: stakingKeeperDenom, + txFeeChecker: tfc, accountKeeper: ak, bankKeeper: bk, feegrantKeeper: fk, @@ -71,11 +68,9 @@ func (mfd FeeDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, ne // Do not check minimum-gas-prices and global fees during simulations if simulate { - //return next(ctx, tx, simulate) - return mfd.Deduct(ctx, tx, simulate, next) // TODO: call DeductFee + return mfd.Deduct(ctx, tx, simulate, next) } - // Get the required fees according to the CheckTx or DeliverTx modes // TODO: deleete // Get the required fees, as per xion specification max(network_fees, local_validator_fees) feeRequired, err := mfd.GetTxFeeRequired(ctx, feeTx) if err != nil { @@ -93,9 +88,6 @@ func (mfd FeeDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, ne gas := feeTx.GetGas() msgs := feeTx.GetMsgs() - msg := fmt.Sprintf("SOMETHING SHOULD BE HERE!!! \n\n Gas:%d \nFee Coins: %s\nMsgs: %+v \n\n", gas, feeCoins.String(), msgs) - ctx.Logger().Info(msg) - // split feeRequired into zero and non-zero coins(nonZeroCoinFeesReq, zeroCoinFeesDenomReq), split feeCoins according to // nonZeroCoinFeesReq, zeroCoinFeesDenomReq, // so that feeCoins can be checked separately against them. @@ -129,9 +121,7 @@ func (mfd FeeDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, ne allowedToBypassMinFee := allBypassMsgs && doesNotExceedMaxGasUsage if allowedToBypassMinFee { - ctx.Logger().Info("We are Bypassing\n\n") - //return next(ctx, tx, simulate) - return mfd.Deduct(ctx, tx, simulate, next) // TODO: call DeductFee + return mfd.Deduct(ctx, tx, simulate, next) } // if the msg does not satisfy bypass condition and the feeCoins denoms are subset of feeRequired, @@ -143,7 +133,6 @@ func (mfd FeeDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, ne if len(feeCoins) == 0 { if len(zeroCoinFeesDenomReq) != 0 { ctx.Logger().Info("Fees are Zero\n\n") - // TODO: Add Modified FeeDeduct AnteHandle Behavior return mfd.Deduct(ctx, tx, simulate, next) } return ctx, sdkerrors.Wrapf(sdkerrors.ErrInsufficientFee, "insufficient fees; got: %s required: %s", feeCoins.String(), feeRequired.String()) @@ -153,8 +142,6 @@ func (mfd FeeDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, ne // special case: if TX has at least one of the zeroCoinFeesDenomReq, then it should pass if len(feeCoinsZeroDenom) > 0 { ctx.Logger().Info("Fees are greater than zero\n\n") - // TODO: Add Modified FeeDeduct AnteHandle Behavior - //return next(ctx, tx, simulate) return mfd.Deduct(ctx, tx, simulate, next) } @@ -174,10 +161,7 @@ func (mfd FeeDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, ne return ctx, sdkerrors.Wrap(sdkerrors.ErrInsufficientFee, errMsg) } - ctx.Logger().Info("All checks have passed\n\n") - // TODO: Add Modified FeeDeduct AnteHandle Behavior - //return next(ctx, tx, simulate) - return mfd.DeductFee(ctx, tx, simulate, next) + return mfd.DeductFee(ctx, tx, feeRequired, simulate, next) // needs to deduct requried fee } // GetTxFeeRequired returns the required fees for the given FeeTx. @@ -208,14 +192,6 @@ func (mfd FeeDecorator) GetTxFeeRequired(ctx sdk.Context, tx sdk.FeeTx) (sdk.Coi ctx.Logger().Info(fmt.Sprintf("LocalFees: %s \n", localFees.String())) return MaxCoins(globalFees, localFees), nil - // return CombinedFeeRequirement(globalFees, localFees) // TODO: delete -} - -func MaxCoins(a, b sdk.Coins) sdk.Coins { - if a.IsAllGT(b) { - return a - } - return b } // GetGlobalFee returns the global fees for a given fee tx's gas @@ -313,36 +289,22 @@ func GetMinGasPrice(ctx sdk.Context, gasLimit int64) sdk.Coins { return requiredFees.Sort() } -func (mfd FeeDecorator) HeightGuard(ctx sdk.Context, tx sdk.FeeTx, simulate bool) (sdk.Context, error) { - if !simulate && ctx.BlockHeight() > 0 && tx.GetGas() == 0 { - return ctx, sdkerrors.Wrap(sdkerrors.ErrInvalidGasLimit, "must provide positive gas") - } - return ctx, nil -} - -func (mfd FeeDecorator) TxGuard(ctx sdk.Context, tx sdk.Tx) (sdk.FeeTx, error) { - feeTx, ok := tx.(sdk.FeeTx) - if !ok { - return nil, sdkerrors.Wrap(sdkerrors.ErrTxDecode, "Tx must be a FeeTx") - } - return feeTx, nil -} - -func (mfd FeeDecorator) DeductFee(ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler) (sdk.Context, error) { - feeTx, err := mfd.TxGuard(ctx, tx) +// Deduct Fee - Replaces Standard auth ante handler behavior by passing a network fee +// CONTRACT: the network fee in the xion network is determined by max(local_validator_fee, minimum_gas_param) +func (mfd FeeDecorator) DeductFee(ctx sdk.Context, tx sdk.Tx, networkFee sdk.Coins, simulate bool, next sdk.AnteHandler) (sdk.Context, error) { + feeTx, err := CheckFeeTx(ctx, tx) if err != nil { return ctx, err } - ctx, err = mfd.HeightGuard(ctx, feeTx, simulate) // We have to convert to FeeTx to extract Gas + ctx, err = CheckGas(ctx, feeTx, simulate) if err != nil { return ctx, err } var priority int64 - // Fee should be provided - if err := mfd.checkDeductFee(ctx, tx, feeTx.GetFee()); err != nil { + if err := mfd.checkDeductFee(ctx, tx, networkFee); err != nil { return ctx, err } @@ -351,13 +313,14 @@ func (mfd FeeDecorator) DeductFee(ctx sdk.Context, tx sdk.Tx, simulate bool, nex return next(newCtx, tx, simulate) } +// Deduct Fee - Replaces Standard auth ante handler. func (mfd FeeDecorator) Deduct(ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler) (sdk.Context, error) { - feeTx, err := mfd.TxGuard(ctx, tx) + feeTx, err := CheckFeeTx(ctx, tx) if err != nil { return ctx, err } - ctx, err = mfd.HeightGuard(ctx, feeTx, simulate) // We have to convert to FeeTx to extract Gas + ctx, err = CheckGas(ctx, feeTx, simulate) if err != nil { return ctx, err } @@ -381,29 +344,6 @@ func (mfd FeeDecorator) Deduct(ctx sdk.Context, tx sdk.Tx, simulate bool, next s return next(newCtx, tx, simulate) } -// TODO: Must modify to be wary of global fee. -// -// func (mfd FeeDecorator) feegrantGuard(ctx sdk.Context, feeTx sdk.FeeTx, fee sdk.Coins) (sdk.AccAddress, error) { -// feePayer := feeTx.FeePayer() -// feeGranter := feeTx.FeeGranter() -// deductFeesFrom := feePayer -// -// // if feegranter set deduct fee from feegranter account. -// // this works with only when feegrant enabled. -// if feeGranter != nil { -// if mfd.feegrantKeeper == nil { -// return nil, sdkerrors.ErrInvalidRequest.Wrap("fee grants are not enabled") -// } else if !feeGranter.Equals(feePayer) { -// err := mfd.feegrantKeeper.UseGrantedFees(ctx, feeGranter, feePayer, fee, sdkTx.GetMsgs()) -// if err != nil { -// return nil, sdkerrors.Wrapf(err, "%s does not allow to pay fees for %s", feeGranter, feePayer) -// } -// } -// -// deductFeesFrom = feeGranter -// } -// return deductFeesFrom, nil -// } func (mfd FeeDecorator) checkDeductFee(ctx sdk.Context, sdkTx sdk.Tx, fee sdk.Coins) error { feeTx, ok := sdkTx.(sdk.FeeTx) if !ok { @@ -457,17 +397,3 @@ func (mfd FeeDecorator) checkDeductFee(ctx sdk.Context, sdkTx sdk.Tx, fee sdk.Co return nil } - -// DeductFees deducts fees from the given account. -func DeductFees(bankKeeper authtypes.BankKeeper, ctx sdk.Context, acc authtypes.AccountI, fees sdk.Coins) error { - if !fees.IsValid() { - return sdkerrors.Wrapf(sdkerrors.ErrInsufficientFee, "invalid fee amount: %s", fees) - } - - err := bankKeeper.SendCoinsFromAccountToModule(ctx, acc.GetAddress(), authtypes.FeeCollectorName, fees) - if err != nil { - return sdkerrors.Wrapf(sdkerrors.ErrInsufficientFunds, err.Error()) - } - - return nil -} diff --git a/x/globalfee/ante/fee_utils.go b/x/globalfee/ante/fee_utils.go index a5d0a763..6c6e4e7d 100644 --- a/x/globalfee/ante/fee_utils.go +++ b/x/globalfee/ante/fee_utils.go @@ -3,6 +3,7 @@ package ante import ( sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" ) // ContainZeroCoins returns true if the given coins are empty or contain zero coins, @@ -97,7 +98,6 @@ func splitCoinsByDenoms(feeCoins sdk.Coins, denomMap map[string]struct{}) (sdk.C // getNonZeroFees returns the given fees nonzero coins // and a map storing the zero coins's denoms -// TODO: document func getNonZeroFees(fees sdk.Coins) (sdk.Coins, map[string]struct{}) { requiredFeesNonZero := sdk.Coins{} requiredFeesZeroDenom := map[string]struct{}{} @@ -112,3 +112,43 @@ func getNonZeroFees(fees sdk.Coins) (sdk.Coins, map[string]struct{}) { return requiredFeesNonZero.Sort(), requiredFeesZeroDenom } + +// Returns the largest coins given 2 sets of coins +func MaxCoins(a, b sdk.Coins) sdk.Coins { + if a.IsAllGT(b) { + return a + } + return b +} + +// CheckGas returns an error if there are incongruences between the height +// and the gas provided by the FeeTx +func CheckGas(ctx sdk.Context, tx sdk.FeeTx, simulate bool) (sdk.Context, error) { + if !simulate && ctx.BlockHeight() > 0 && tx.GetGas() == 0 { + return ctx, sdkerrors.Wrap(sdkerrors.ErrInvalidGasLimit, "must provide positive gas") + } + return ctx, nil +} + +// CheckFeeTx returns a Fee tx if the Tx satisifies the valid interface +func CheckFeeTx(ctx sdk.Context, tx sdk.Tx) (sdk.FeeTx, error) { + feeTx, ok := tx.(sdk.FeeTx) + if !ok { + return nil, sdkerrors.Wrap(sdkerrors.ErrTxDecode, "Tx must be a FeeTx") + } + return feeTx, nil +} + +// DeductFees deducts fees from the given account and send it to fee collector +func DeductFees(bankKeeper authtypes.BankKeeper, ctx sdk.Context, acc authtypes.AccountI, fees sdk.Coins) error { + if !fees.IsValid() { + return sdkerrors.Wrapf(sdkerrors.ErrInsufficientFee, "invalid fee amount: %s", fees) + } + + err := bankKeeper.SendCoinsFromAccountToModule(ctx, acc.GetAddress(), authtypes.FeeCollectorName, fees) + if err != nil { + return sdkerrors.Wrapf(sdkerrors.ErrInsufficientFunds, err.Error()) + } + + return nil +} From d1b5596774deb3fb0a6fb00e9beab48cb07724a2 Mon Sep 17 00:00:00 2001 From: Ash Date: Sat, 1 Jul 2023 12:52:48 -0700 Subject: [PATCH 105/501] pass for audit comments --- proto/xion/mint/v1/query.proto | 2 +- x/mint/types/query.pb.go | 62 +++++++++++++++++----------------- x/mint/types/query.pb.gw.go | 2 +- x/xion/keeper/msg_server.go | 2 +- x/xion/module.go | 9 +---- 5 files changed, 35 insertions(+), 42 deletions(-) diff --git a/proto/xion/mint/v1/query.proto b/proto/xion/mint/v1/query.proto index 983db83e..c38ba665 100644 --- a/proto/xion/mint/v1/query.proto +++ b/proto/xion/mint/v1/query.proto @@ -12,7 +12,7 @@ option go_package = "github.com/burnt-labs/xion/x/mint/types"; service Query { // Params returns the total set of minting parameters. rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { - option (google.api.http).get = "/cosmos/mint/v1beta1/params"; + option (google.api.http).get = "/cosmos/mint/v1/params"; } // Inflation returns the current minting inflation value. diff --git a/x/mint/types/query.pb.go b/x/mint/types/query.pb.go index 641e22e3..75ee6524 100644 --- a/x/mint/types/query.pb.go +++ b/x/mint/types/query.pb.go @@ -281,37 +281,37 @@ func init() { func init() { proto.RegisterFile("xion/mint/v1/query.proto", fileDescriptor_cb90e843d441617e) } var fileDescriptor_cb90e843d441617e = []byte{ - // 471 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x53, 0x31, 0x6f, 0xd3, 0x40, - 0x18, 0xf5, 0x81, 0x88, 0x94, 0xa3, 0x43, 0x7b, 0x04, 0x52, 0x4c, 0x6b, 0xb7, 0x2e, 0xa2, 0xa8, - 0xa8, 0x3e, 0xa5, 0x1d, 0x98, 0x1b, 0xb1, 0xb0, 0xa0, 0xb6, 0x23, 0x0b, 0x9c, 0xc3, 0x61, 0x4e, - 0xb5, 0xef, 0x5c, 0xdf, 0x39, 0xb4, 0x23, 0xac, 0x2c, 0x48, 0xf0, 0x23, 0x18, 0xf9, 0x19, 0x1d, - 0x2b, 0xb1, 0x20, 0x86, 0x0a, 0x25, 0x48, 0xfc, 0x0d, 0xe4, 0xbb, 0x73, 0xa8, 0xdd, 0x24, 0x42, - 0x62, 0xb1, 0xad, 0xef, 0x3d, 0xbd, 0xf7, 0xf4, 0xbd, 0xcf, 0x70, 0xf9, 0x84, 0x09, 0x8e, 0x53, - 0xc6, 0x15, 0x1e, 0xf6, 0xf0, 0x71, 0x41, 0xf3, 0xd3, 0x30, 0xcb, 0x85, 0x12, 0x68, 0xa1, 0x44, - 0xc2, 0x12, 0x09, 0x87, 0x3d, 0xb7, 0x13, 0x8b, 0x58, 0x68, 0x00, 0x97, 0x5f, 0x86, 0xe3, 0xae, - 0xc4, 0x42, 0xc4, 0x09, 0xc5, 0x24, 0x63, 0x98, 0x70, 0x2e, 0x14, 0x51, 0x4c, 0x70, 0x69, 0xd1, - 0x6e, 0x4d, 0x5b, 0x2b, 0x19, 0x60, 0x89, 0xa4, 0x8c, 0x0b, 0xac, 0x9f, 0x66, 0x14, 0x74, 0x20, - 0x3a, 0x28, 0xcd, 0xf7, 0x49, 0x4e, 0x52, 0x79, 0x48, 0x8f, 0x0b, 0x2a, 0x55, 0xf0, 0x0c, 0xde, - 0xaa, 0x4d, 0x65, 0x26, 0xb8, 0xa4, 0xe8, 0x31, 0x6c, 0x65, 0x7a, 0xb2, 0x0c, 0xd6, 0xc0, 0xc3, - 0x9b, 0x3b, 0x9d, 0xf0, 0x72, 0xd6, 0xd0, 0xb0, 0xfb, 0xed, 0xb3, 0x0b, 0xdf, 0xf9, 0xf2, 0xfb, - 0xeb, 0x16, 0x38, 0xb4, 0xf4, 0xa0, 0x0b, 0x6f, 0x6b, 0xbd, 0xa7, 0xfc, 0x75, 0xa2, 0xa3, 0x56, - 0x46, 0x47, 0xf0, 0x4e, 0x13, 0xb0, 0x5e, 0x07, 0xb0, 0xcd, 0xaa, 0xa1, 0xb6, 0x5b, 0xe8, 0xef, - 0x96, 0xc2, 0x3f, 0x2e, 0xfc, 0x07, 0x31, 0x53, 0x6f, 0x8a, 0x28, 0x1c, 0x88, 0x14, 0x0f, 0x84, - 0x4c, 0x85, 0xb4, 0xaf, 0x6d, 0xf9, 0xea, 0x08, 0xab, 0xd3, 0x8c, 0xca, 0xf0, 0x09, 0x1d, 0x98, - 0x08, 0x7f, 0x55, 0x02, 0x0f, 0xae, 0x68, 0xb3, 0x3d, 0xce, 0x0b, 0x92, 0xec, 0xe7, 0x62, 0xc8, - 0x64, 0xb9, 0xb6, 0x2a, 0xcc, 0x3b, 0x00, 0x57, 0x67, 0x10, 0x6c, 0xa8, 0x97, 0x70, 0x89, 0x68, - 0xec, 0x45, 0x36, 0x01, 0xff, 0x27, 0xdc, 0x22, 0x69, 0x38, 0xed, 0x7c, 0xb8, 0x0e, 0x6f, 0xe8, - 0x0c, 0x28, 0x87, 0x2d, 0xb3, 0x50, 0xb4, 0x56, 0x5f, 0xf3, 0xd5, 0xbe, 0xdc, 0xf5, 0x39, 0x0c, - 0x13, 0x3d, 0xd8, 0x78, 0xff, 0xed, 0xd7, 0xa7, 0x6b, 0xab, 0xe8, 0x5e, 0x95, 0xca, 0xde, 0x47, - 0x44, 0x15, 0xe9, 0x61, 0xd3, 0x13, 0x7a, 0x0b, 0xdb, 0x93, 0x26, 0xd0, 0xc6, 0x14, 0xd1, 0x66, - 0x81, 0xee, 0xfd, 0xf9, 0x24, 0x6b, 0xee, 0x6b, 0xf3, 0xbb, 0xa8, 0x8b, 0x6b, 0xa7, 0x39, 0xa9, - 0x06, 0x7d, 0x06, 0x70, 0xb1, 0xb9, 0x75, 0xb4, 0x35, 0x45, 0x7b, 0x46, 0x77, 0xee, 0xa3, 0x7f, - 0xe2, 0xda, 0x38, 0x9b, 0x3a, 0xce, 0x3a, 0xf2, 0xeb, 0x71, 0xae, 0x54, 0xdb, 0xdf, 0x3b, 0x1b, - 0x79, 0xe0, 0x7c, 0xe4, 0x81, 0x9f, 0x23, 0x0f, 0x7c, 0x1c, 0x7b, 0xce, 0xf9, 0xd8, 0x73, 0xbe, - 0x8f, 0x3d, 0xe7, 0xf9, 0xe6, 0xa5, 0x9a, 0xa3, 0x22, 0xe7, 0x6a, 0x3b, 0x21, 0x91, 0x34, 0x7a, - 0x27, 0x46, 0x51, 0x77, 0x1d, 0xb5, 0xf4, 0x7f, 0xb6, 0xfb, 0x27, 0x00, 0x00, 0xff, 0xff, 0xd2, - 0x00, 0x23, 0x36, 0xf1, 0x03, 0x00, 0x00, + // 467 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x53, 0x3f, 0x6f, 0xd3, 0x40, + 0x1c, 0xf5, 0x81, 0x88, 0x94, 0xa3, 0x43, 0x7b, 0x84, 0x26, 0x58, 0xe5, 0xdc, 0x1a, 0x44, 0x51, + 0x51, 0x7d, 0x6a, 0x3b, 0x30, 0x37, 0x62, 0x61, 0x41, 0x6d, 0x47, 0x16, 0x38, 0x07, 0x63, 0x4e, + 0xb5, 0xef, 0x5c, 0xdf, 0x39, 0xb4, 0x23, 0x0c, 0xcc, 0x48, 0xf0, 0x21, 0x18, 0xf9, 0x18, 0x19, + 0x23, 0xb1, 0x20, 0x86, 0x08, 0x25, 0x48, 0x7c, 0x0d, 0xe4, 0x3b, 0x3b, 0xc4, 0xce, 0x1f, 0x21, + 0xb1, 0xd8, 0xd6, 0xef, 0x3d, 0xbd, 0xf7, 0xf4, 0x7b, 0x3f, 0xc3, 0xce, 0x25, 0x13, 0x9c, 0xc4, + 0x8c, 0x2b, 0xd2, 0x3f, 0x20, 0x17, 0x59, 0x90, 0x5e, 0x79, 0x49, 0x2a, 0x94, 0x40, 0x6b, 0x39, + 0xe2, 0xe5, 0x88, 0xd7, 0x3f, 0xb0, 0x5b, 0xa1, 0x08, 0x85, 0x06, 0x48, 0xfe, 0x65, 0x38, 0xf6, + 0x56, 0x28, 0x44, 0x18, 0x05, 0x84, 0x26, 0x8c, 0x50, 0xce, 0x85, 0xa2, 0x8a, 0x09, 0x2e, 0x0b, + 0xb4, 0x5d, 0xd1, 0xd6, 0x4a, 0x06, 0xd8, 0xa0, 0x31, 0xe3, 0x82, 0xe8, 0xa7, 0x19, 0xb9, 0x2d, + 0x88, 0x4e, 0x73, 0xf3, 0x13, 0x9a, 0xd2, 0x58, 0x9e, 0x05, 0x17, 0x59, 0x20, 0x95, 0xfb, 0x0c, + 0xde, 0xaa, 0x4c, 0x65, 0x22, 0xb8, 0x0c, 0xd0, 0x63, 0xd8, 0x48, 0xf4, 0xa4, 0x03, 0xb6, 0xc1, + 0xc3, 0x9b, 0x87, 0x2d, 0x6f, 0x36, 0xab, 0x67, 0xd8, 0xdd, 0xe6, 0x60, 0xe4, 0x58, 0x5f, 0x7e, + 0x7f, 0xdd, 0x03, 0x67, 0x05, 0xdd, 0x6d, 0xc3, 0xdb, 0x5a, 0xef, 0x29, 0x7f, 0x1d, 0xe9, 0xa8, + 0xa5, 0xd1, 0x39, 0xdc, 0xac, 0x03, 0x85, 0xd7, 0x29, 0x6c, 0xb2, 0x72, 0xa8, 0xed, 0xd6, 0xba, + 0x47, 0xb9, 0xf0, 0x8f, 0x91, 0xf3, 0x20, 0x64, 0xea, 0x4d, 0xe6, 0x7b, 0x3d, 0x11, 0x93, 0x9e, + 0x90, 0xb1, 0x90, 0xc5, 0x6b, 0x5f, 0xbe, 0x3a, 0x27, 0xea, 0x2a, 0x09, 0xa4, 0xf7, 0x24, 0xe8, + 0x99, 0x08, 0x7f, 0x55, 0x5c, 0x0c, 0xb7, 0xb4, 0xd9, 0x31, 0xe7, 0x19, 0x8d, 0x4e, 0x52, 0xd1, + 0x67, 0x32, 0x5f, 0x5b, 0x19, 0xe6, 0x1d, 0x80, 0x77, 0x97, 0x10, 0x8a, 0x50, 0x2f, 0xe1, 0x06, + 0xd5, 0xd8, 0x8b, 0x64, 0x0a, 0xfe, 0x4f, 0xb8, 0x75, 0x5a, 0x73, 0x3a, 0xfc, 0x70, 0x1d, 0xde, + 0xd0, 0x19, 0x50, 0x0c, 0x1b, 0x66, 0xa1, 0x68, 0xbb, 0xba, 0xe6, 0xf9, 0xbe, 0xec, 0x9d, 0x15, + 0x0c, 0x13, 0xdd, 0xc5, 0xef, 0xbf, 0xfd, 0xfa, 0x74, 0xad, 0x83, 0x36, 0xcb, 0x54, 0xe5, 0x7d, + 0x98, 0x8a, 0xd0, 0x5b, 0xd8, 0x9c, 0x96, 0x80, 0xee, 0x2d, 0xd0, 0xab, 0x77, 0x67, 0xdf, 0x5f, + 0x4d, 0x2a, 0x7c, 0x1d, 0xed, 0x7b, 0x07, 0xb5, 0x49, 0xe5, 0x2a, 0xa7, 0xad, 0xa0, 0xcf, 0x00, + 0xae, 0xd7, 0x17, 0x8e, 0xf6, 0x16, 0x68, 0x2f, 0xa9, 0xcd, 0x7e, 0xf4, 0x4f, 0xdc, 0x22, 0xce, + 0xae, 0x8e, 0xb3, 0x83, 0x9c, 0x6a, 0x9c, 0xb9, 0x56, 0xbb, 0xc7, 0x83, 0x31, 0x06, 0xc3, 0x31, + 0x06, 0x3f, 0xc7, 0x18, 0x7c, 0x9c, 0x60, 0x6b, 0x38, 0xc1, 0xd6, 0xf7, 0x09, 0xb6, 0x9e, 0xef, + 0xce, 0x34, 0xec, 0x67, 0x29, 0x57, 0xfb, 0x11, 0xf5, 0xa5, 0xd1, 0xbb, 0x34, 0x8a, 0xba, 0x66, + 0xbf, 0xa1, 0x7f, 0xb1, 0xa3, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xec, 0x2a, 0x9b, 0xec, 0xec, + 0x03, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/mint/types/query.pb.gw.go b/x/mint/types/query.pb.gw.go index 13fc5293..5f62c38f 100644 --- a/x/mint/types/query.pb.gw.go +++ b/x/mint/types/query.pb.gw.go @@ -267,7 +267,7 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie } var ( - pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"cosmos", "mint", "v1beta1", "params"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"cosmos", "mint", "v1", "params"}, "", runtime.AssumeColonVerbOpt(false))) pattern_Query_Inflation_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"xion", "mint", "v1", "inflation"}, "", runtime.AssumeColonVerbOpt(false))) diff --git a/x/xion/keeper/msg_server.go b/x/xion/keeper/msg_server.go index 73122d11..f68fffa7 100644 --- a/x/xion/keeper/msg_server.go +++ b/x/xion/keeper/msg_server.go @@ -64,7 +64,7 @@ func (k msgServer) Send(goCtx context.Context, msg *types.MsgSend) (*types.MsgSe } defer func() { - for _, a := range msg.Amount { + for _, a := range throughCoins { if a.Amount.IsInt64() { telemetry.SetGaugeWithLabels( []string{"tx", "msg", "send"}, diff --git a/x/xion/module.go b/x/xion/module.go index c6aea777..9f07bcd2 100644 --- a/x/xion/module.go +++ b/x/xion/module.go @@ -59,12 +59,7 @@ func (AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, config client.TxEncod } // RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for ics29 fee module. -func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) { - //err := types.RegisterQueryHandlerClient(context.Background(), mux, types.NewQueryClient(clientCtx)) - //if err != nil { - // panic(err) - //} -} +func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) {} // GetTxCmd implements AppModuleBasic interface func (AppModuleBasic) GetTxCmd() *cobra.Command { @@ -73,7 +68,6 @@ func (AppModuleBasic) GetTxCmd() *cobra.Command { // GetQueryCmd implements AppModuleBasic interface func (AppModuleBasic) GetQueryCmd() *cobra.Command { - //return cli.GetQueryCmd() return nil } @@ -97,7 +91,6 @@ func (AppModule) RegisterInvariants(ir sdk.InvariantRegistry) { // RegisterServices registers module services. func (am AppModule) RegisterServices(cfg module.Configurator) { types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.keeper)) - //types.RegisterQueryServer(cfg.QueryServer(), am.keeper) } // InitGenesis performs genesis initialization for the ibc-29-fee module. It returns From 861c07aeb58c5d895d6106e28d25f6f28b9aef5e Mon Sep 17 00:00:00 2001 From: Ash Date: Wed, 5 Jul 2023 10:42:04 -0700 Subject: [PATCH 106/501] integrate aa module --- app/ante.go | 37 ++++++-- app/app.go | 41 +++++++-- go.mod | 5 +- go.sum | 18 ++-- go.work.sum | 247 +++++++++++++++++++++++++++++++++++++++++++++++++++- 5 files changed, 322 insertions(+), 26 deletions(-) diff --git a/app/ante.go b/app/ante.go index e408372f..c14c91db 100644 --- a/app/ante.go +++ b/app/ante.go @@ -6,8 +6,11 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/x/auth/ante" + "github.com/cosmos/cosmos-sdk/x/auth/posthandler" ibcante "github.com/cosmos/ibc-go/v7/modules/core/ante" "github.com/cosmos/ibc-go/v7/modules/core/keeper" + "github.com/larry0x/abstract-account/x/abstractaccount" + aakeeper "github.com/larry0x/abstract-account/x/abstractaccount/keeper" wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" wasmTypes "github.com/CosmWasm/wasmd/x/wasm/types" @@ -18,9 +21,10 @@ import ( type HandlerOptions struct { ante.HandlerOptions - IBCKeeper *keeper.Keeper - WasmConfig *wasmTypes.WasmConfig - TXCounterStoreKey storetypes.StoreKey + IBCKeeper *keeper.Keeper + WasmConfig *wasmTypes.WasmConfig + TXCounterStoreKey storetypes.StoreKey + AbstractAccountKeeper aakeeper.Keeper } func NewAnteHandler(options HandlerOptions) (sdk.AnteHandler, error) { @@ -53,10 +57,33 @@ func NewAnteHandler(options HandlerOptions) (sdk.AnteHandler, error) { ante.NewSetPubKeyDecorator(options.AccountKeeper), // SetPubKeyDecorator must be called before all signature verification decorators ante.NewValidateSigCountDecorator(options.AccountKeeper), ante.NewSigGasConsumeDecorator(options.AccountKeeper, options.SigGasConsumer), - ante.NewSigVerificationDecorator(options.AccountKeeper, options.SignModeHandler), - ante.NewIncrementSequenceDecorator(options.AccountKeeper), + // BeforeTxDecorator replaces the default NewSigVerificationDecorator + abstractaccount.NewBeforeTxDecorator( + options.AbstractAccountKeeper, + options.AccountKeeper, + options.SignModeHandler, + ), ante.NewIncrementSequenceDecorator(options.AccountKeeper), ibcante.NewRedundantRelayDecorator(options.IBCKeeper), } return sdk.ChainAnteDecorators(anteDecorators...), nil } + +type PostHandlerOptions struct { + posthandler.HandlerOptions + + AccountKeeper ante.AccountKeeper + AbstractAccountKeeper aakeeper.Keeper +} + +func NewPostHandler(options PostHandlerOptions) (sdk.PostHandler, error) { + if options.AccountKeeper == nil { + return nil, sdkerrors.ErrLogic.Wrap("account keeper is required for AnteHandler") + } + + postDecorators := []sdk.PostDecorator{ + abstractaccount.NewAfterTxDecorator(options.AbstractAccountKeeper), + } + + return sdk.ChainPostDecorators(postDecorators...), nil +} diff --git a/app/app.go b/app/app.go index 66374f4a..5662ff81 100644 --- a/app/app.go +++ b/app/app.go @@ -117,6 +117,9 @@ import ( ibcexported "github.com/cosmos/ibc-go/v7/modules/core/exported" ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper" ibctm "github.com/cosmos/ibc-go/v7/modules/light-clients/07-tendermint" + aa "github.com/larry0x/abstract-account/x/abstractaccount" + aakeeper "github.com/larry0x/abstract-account/x/abstractaccount/keeper" + aatypes "github.com/larry0x/abstract-account/x/abstractaccount/types" "github.com/spf13/cast" "github.com/CosmWasm/wasmd/x/wasm" @@ -219,6 +222,7 @@ var ( consensus.AppModuleBasic{}, // non sdk modules wasm.AppModuleBasic{}, + aa.AppModuleBasic{}, xion.AppModuleBasic{}, ibc.AppModuleBasic{}, ibctm.AppModuleBasic{}, @@ -240,6 +244,7 @@ var ( ibcfeetypes.ModuleName: nil, icatypes.ModuleName: nil, wasm.ModuleName: {authtypes.Burner}, + aatypes.ModuleName: nil, xiontypes.ModuleName: nil, } ) @@ -281,12 +286,13 @@ type WasmApp struct { NFTKeeper nftkeeper.Keeper ConsensusParamsKeeper consensusparamkeeper.Keeper - IBCKeeper *ibckeeper.Keeper // IBC Keeper must be a pointer in the app, so we can SetRouter on it correctly - IBCFeeKeeper ibcfeekeeper.Keeper - ICAControllerKeeper icacontrollerkeeper.Keeper - ICAHostKeeper icahostkeeper.Keeper - TransferKeeper ibctransferkeeper.Keeper - WasmKeeper wasm.Keeper + IBCKeeper *ibckeeper.Keeper // IBC Keeper must be a pointer in the app, so we can SetRouter on it correctly + IBCFeeKeeper ibcfeekeeper.Keeper + ICAControllerKeeper icacontrollerkeeper.Keeper + ICAHostKeeper icahostkeeper.Keeper + TransferKeeper ibctransferkeeper.Keeper + WasmKeeper wasm.Keeper + AbstractAccountKeeper aakeeper.Keeper XionKeeper xionkeeper.Keeper @@ -338,7 +344,7 @@ func NewWasmApp( authzkeeper.StoreKey, nftkeeper.StoreKey, group.StoreKey, // non sdk store keys ibcexported.StoreKey, ibctransfertypes.StoreKey, ibcfeetypes.StoreKey, - wasm.StoreKey, icahosttypes.StoreKey, + wasm.StoreKey, icahosttypes.StoreKey, aatypes.StoreKey, icacontrollertypes.StoreKey, xiontypes.StoreKey, ) @@ -621,6 +627,14 @@ func NewWasmApp( wasmOpts..., ) + app.AbstractAccountKeeper = aakeeper.NewKeeper( + appCodec, + keys[aatypes.StoreKey], + app.AccountKeeper, + wasmkeeper.NewGovPermissionKeeper(app.WasmKeeper), + authtypes.NewModuleAddress(govtypes.ModuleName).String(), + ) + // The gov proposal types can be individually enabled if len(enabledProposals) != 0 { govRouter.AddRoute(wasm.RouterKey, wasm.NewWasmProposalHandler(app.WasmKeeper, enabledProposals)) @@ -696,6 +710,7 @@ func NewWasmApp( consensus.NewAppModule(appCodec, app.ConsensusParamsKeeper), xion.NewAppModule(app.XionKeeper), wasm.NewAppModule(appCodec, &app.WasmKeeper, app.StakingKeeper, app.AccountKeeper, app.BankKeeper, app.MsgServiceRouter(), app.GetSubspace(wasmtypes.ModuleName)), + aa.NewAppModule(app.AbstractAccountKeeper), ibc.NewAppModule(app.IBCKeeper), transfer.NewAppModule(app.TransferKeeper), ibcfee.NewAppModule(app.IBCFeeKeeper), @@ -723,6 +738,7 @@ func NewWasmApp( icatypes.ModuleName, ibcfeetypes.ModuleName, wasm.ModuleName, + aatypes.ModuleName, ) app.ModuleManager.SetOrderEndBlockers( @@ -739,6 +755,7 @@ func NewWasmApp( icatypes.ModuleName, ibcfeetypes.ModuleName, wasm.ModuleName, + aatypes.ModuleName, ) // NOTE: The genutils module must occur after staking so that pools are @@ -762,6 +779,7 @@ func NewWasmApp( ibcfeetypes.ModuleName, // wasm after ibc transfer wasm.ModuleName, + aatypes.ModuleName, } app.ModuleManager.SetOrderInitGenesis(genesisModuleOrder...) app.ModuleManager.SetOrderExportGenesis(genesisModuleOrder...) @@ -886,8 +904,12 @@ func (app *WasmApp) setAnteHandler(txConfig client.TxConfig, wasmConfig wasmtype } func (app *WasmApp) setPostHandler() { - postHandler, err := posthandler.NewPostHandler( - posthandler.HandlerOptions{}, + postHandler, err := NewPostHandler( + PostHandlerOptions{ + HandlerOptions: posthandler.HandlerOptions{}, + AccountKeeper: app.AccountKeeper, + AbstractAccountKeeper: app.AbstractAccountKeeper, + }, ) if err != nil { panic(err) @@ -1077,6 +1099,7 @@ func initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino paramsKeeper.Subspace(icacontrollertypes.SubModuleName) paramsKeeper.Subspace(xiontypes.ModuleName) paramsKeeper.Subspace(wasm.ModuleName) + paramsKeeper.Subspace(aatypes.ModuleName) return paramsKeeper } diff --git a/go.mod b/go.mod index 66fb310d..959ccfb1 100644 --- a/go.mod +++ b/go.mod @@ -41,8 +41,9 @@ require ( github.com/CosmWasm/wasmd v0.40.1 github.com/armon/go-metrics v0.4.1 github.com/cometbft/cometbft v0.37.1 - github.com/cometbft/cometbft-db v0.7.0 + github.com/cometbft/cometbft-db v0.8.0 github.com/golang/mock v1.6.0 + github.com/larry0x/abstract-account v0.0.0-20230628224848-53cfac67f249 github.com/spf13/viper v1.15.0 gotest.tools/v3 v3.4.0 sigs.k8s.io/yaml v1.3.0 @@ -123,6 +124,7 @@ require ( github.com/klauspost/compress v1.16.3 // indirect github.com/lib/pq v1.10.7 // indirect github.com/libp2p/go-buffer-pool v0.1.0 // indirect + github.com/linxGnu/grocksdb v1.7.16 // indirect github.com/magiconair/properties v1.8.7 // indirect github.com/manifoldco/promptui v0.9.0 // indirect github.com/mattn/go-colorable v0.1.13 // indirect @@ -148,7 +150,6 @@ require ( github.com/spf13/afero v1.9.3 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/subosito/gotenv v1.4.2 // indirect - github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c // indirect github.com/tendermint/go-amino v0.16.0 // indirect github.com/tidwall/btree v1.6.0 // indirect github.com/ulikunitz/xz v0.5.11 // indirect diff --git a/go.sum b/go.sum index 02f3b3ae..380424f0 100644 --- a/go.sum +++ b/go.sum @@ -308,8 +308,8 @@ github.com/coinbase/rosetta-sdk-go/types v1.0.0 h1:jpVIwLcPoOeCR6o1tU+Xv7r5bMONN github.com/coinbase/rosetta-sdk-go/types v1.0.0/go.mod h1:eq7W2TMRH22GTW0N0beDnN931DW0/WOI1R2sdHNHG4c= github.com/cometbft/cometbft v0.37.1 h1:KLxkQTK2hICXYq21U2hn1W5hOVYUdQgDQ1uB+90xPIg= github.com/cometbft/cometbft v0.37.1/go.mod h1:Y2MMMN//O5K4YKd8ze4r9jmk4Y7h0ajqILXbH5JQFVs= -github.com/cometbft/cometbft-db v0.7.0 h1:uBjbrBx4QzU0zOEnU8KxoDl18dMNgDh+zZRUE0ucsbo= -github.com/cometbft/cometbft-db v0.7.0/go.mod h1:yiKJIm2WKrt6x8Cyxtq9YTEcIMPcEe4XPxhgX59Fzf0= +github.com/cometbft/cometbft-db v0.8.0 h1:vUMDaH3ApkX8m0KZvOFFy9b5DZHBAjsnEuo9AKVZpjo= +github.com/cometbft/cometbft-db v0.8.0/go.mod h1:6ASCP4pfhmrCBpfk01/9E1SI29nD3HfVHrY4PG8x5c0= github.com/confio/ics23/go v0.9.0 h1:cWs+wdbS2KRPZezoaaj+qBleXgUk5WOQFMP3CQFGTr4= github.com/confio/ics23/go v0.9.0/go.mod h1:4LPZ2NYqnYIVRklaozjNR1FScgDJ2s5Xrp+e/mYVRak= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= @@ -397,9 +397,6 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.m github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c h1:8ISkoahWXwZR41ois5lSJBSVw4D0OV19Ht/JSTzvSv0= -github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A= -github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4 h1:7HZCaLC5+BZpmbhCOZJ293Lz68O7PYrF2EzeiFMwCLk= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/felixge/httpsnoop v1.0.2 h1:+nS9g82KMXccJ/wp0zyRW9ZBHFETmMGtkk+2CTTrW4o= @@ -702,6 +699,9 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= 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/larry0x/abstract-account v0.0.0-20230628224848-53cfac67f249 h1:ITVgrJOu1gnI7dzJQqik1L19qRYb2ebOvjQEvrd90n0= +github.com/larry0x/abstract-account v0.0.0-20230628224848-53cfac67f249/go.mod h1:mRL3ko+eOFguJHzhVZatNZOvaiVHumGAWxoLlyIo+Ow= +github.com/larry0x/simapp v0.0.0-20230527213943-e57d94ffca4c h1:HxMMvjvPKv+Xttad2Blw6c9XKzg/Pk5TIZL8T04lUN0= github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw= @@ -710,6 +710,8 @@ github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6 github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= +github.com/linxGnu/grocksdb v1.7.16 h1:Q2co1xrpdkr5Hx3Fp+f+f7fRGhQFQhvi/+226dtLmA8= +github.com/linxGnu/grocksdb v1.7.16/go.mod h1:JkS7pl5qWpGpuVb3bPqTz8nC12X3YtPZT+Xq7+QfQo4= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= @@ -940,8 +942,6 @@ github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8 github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= -github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c h1:g+WoO5jjkqGAzHWCjJB1zZfXPIAaDpzXIEJ0eS6B5Ok= -github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c/go.mod h1:ahpPrc7HpcfEWDQRZEmnXMzHY03mLDYMCxeDzy46i+8= 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/tidwall/btree v1.6.0 h1:LDZfKfQIBHGHWSwckhXI0RPSXzlo+KYdjK7FWSqOzzg= @@ -1050,7 +1050,7 @@ 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 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8= +golang.org/x/mod v0.9.0 h1:KENHtAZL2y3NLMYZeHY9DW8HW8V+kQyJsY/V9JlKvCs= 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= @@ -1336,7 +1336,7 @@ golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.4/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 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM= +golang.org/x/tools v0.7.0 h1:W4OVu8VVOaIO0yzWMNdepAulS7YfoS3Zabrm8DOXXU4= 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= diff --git a/go.work.sum b/go.work.sum index 09a20d41..e0cdd5b9 100644 --- a/go.work.sum +++ b/go.work.sum @@ -1,5 +1,9 @@ +4d63.com/gocheckcompilerdirectives v1.2.1 h1:AHcMYuw56NPjq/2y615IGg2kYkBdTvOaojYCBcRE7MA= +4d63.com/gocheckcompilerdirectives v1.2.1/go.mod h1:yjDJSxmDTtIHHCqX0ufRYZDL6vQtMG7tJdKVeWwsqvs= 4d63.com/gochecknoglobals v0.1.0 h1:zeZSRqj5yCg28tCkIV/z/lWbwvNm5qnKVS15PI8nhD0= 4d63.com/gochecknoglobals v0.1.0/go.mod h1:wfdC5ZjKSPr7CybKEcgJhUOgeAQW1+7WcyK8OvUilfo= +4d63.com/gochecknoglobals v0.2.1 h1:1eiorGsgHOFOuoOiJDy2psSrQbRdIHrlge0IJIkUgDc= +4d63.com/gochecknoglobals v0.2.1/go.mod h1:KRE8wtJB3CXCsb1xy421JfTHIIbmT3U5ruxw2Qu8fSU= cloud.google.com/go v0.105.0/go.mod h1:PrLgOJNe5nfE9UMxKxgXj4mD3voiP+YQ6gdt6KMFOKM= cloud.google.com/go v0.107.0/go.mod h1:wpc2eNrD7hXUTy8EKS10jkxpZBjASrORK7goS+3YX2I= cloud.google.com/go/accessapproval v1.5.0/go.mod h1:HFy3tuiGvMdcd/u+Cu5b9NkO1pEICJ46IR82PoUdplw= @@ -352,15 +356,25 @@ cosmossdk.io/simapp v0.0.0-20230224204036-a6adb0821462/go.mod h1:4Dd3NLoLYoN90kZ dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9 h1:VpgP7xuJadIUuKccphEpTJnWhS2jkQyMt6Y7pJCD7fY= github.com/Abirdcfly/dupword v0.0.7 h1:z14n0yytA3wNO2gpCD/jVtp/acEXPGmYu0esewpBt6Q= github.com/Abirdcfly/dupword v0.0.7/go.mod h1:K/4M1kj+Zh39d2aotRwypvasonOyAMH1c/IZJzE0dmk= +github.com/Abirdcfly/dupword v0.0.11 h1:z6v8rMETchZXUIuHxYNmlUAuKuB21PeaSymTed16wgU= +github.com/Abirdcfly/dupword v0.0.11/go.mod h1:wH8mVGuf3CP5fsBTkfWwwwKTjDnVVCxtU8d8rgeVYXA= github.com/AdaLogics/go-fuzz-headers v0.0.0-20210715213245-6c3934b029d8 h1:V8krnnfGj4pV65YLUm3C0/8bl7V5Nry2Pwvy3ru/wLc= github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96 h1:cTp8I5+VIoKjsnZuH8vjyaysT/ses3EvZeaV/1UkF2M= +github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= github.com/Antonboom/errname v0.1.7 h1:mBBDKvEYwPl4WFFNwec1CZO096G6vzK9vvDQzAwkako= github.com/Antonboom/errname v0.1.7/go.mod h1:g0ONh16msHIPgJSGsecu1G/dcF2hlYR/0SddnIAGavU= +github.com/Antonboom/errname v0.1.9 h1:BZDX4r3l4TBZxZ2o2LNrlGxSHran4d1u4veZdoORTT4= +github.com/Antonboom/errname v0.1.9/go.mod h1:nLTcJzevREuAsgTbG85UsuiWpMpAqbKD1HNZ29OzE58= github.com/Antonboom/nilnil v0.1.1 h1:PHhrh5ANKFWRBh7TdYmyyq2gyT2lotnvFvvFbylF81Q= github.com/Antonboom/nilnil v0.1.1/go.mod h1:L1jBqoWM7AOeTD+tSquifKSesRHs4ZdaxvZR+xdJEaI= +github.com/Antonboom/nilnil v0.1.3 h1:6RTbx3d2mcEu3Zwq9TowQpQMVpP75zugwOtqY1RTtcE= +github.com/Antonboom/nilnil v0.1.3/go.mod h1:iOov/7gRcXkeEU+EMGpBu2ORih3iyVEiWjeste1SJm8= github.com/Azure/azure-sdk-for-go/sdk/azcore v0.21.1 h1:qoVeMsc9/fh/yhxVaA0obYjVH/oI/ihrOoMwsLS9KSA= +github.com/Azure/azure-sdk-for-go/sdk/azcore v0.21.1/go.mod h1:fBF9PQNqB8scdgpZ3ufzaLntG0AG7C1WjPMsiFOmfHM= github.com/Azure/azure-sdk-for-go/sdk/internal v0.8.3 h1:E+m3SkZCN0Bf5q7YdTs5lSm2CYY3CK4spn5OmUIiQtk= +github.com/Azure/azure-sdk-for-go/sdk/internal v0.8.3/go.mod h1:KLF4gFr6DcKFZwSuH8w8yEK6DpFl3LP5rhdvAb7Yz5I= github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.3.0 h1:Px2UA+2RvSSvv+RvJNuUB6n7rs5Wsel4dXLe90Um2n4= +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.3.0/go.mod h1:tPaiy8S5bQ+S5sOiDlINkp7+Ef339+Nz5L5XO+cnOHo= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802 h1:1BDTz0u9nC3//pOCMdNH+CiXJVYJh5UQNCOBG7jbELc= @@ -371,11 +385,13 @@ github.com/CosmWasm/wasmvm v1.2.3/go.mod h1:vW/E3h8j9xBQs9bCoijDuawKo9kCtxOaS8N8 github.com/DATA-DOG/go-sqlmock v1.5.0 h1:Shsta01QNfFxHCfpW6YH2STWB0MudeXXEWMr20OEh60= github.com/DataDog/datadog-go v3.2.0+incompatible h1:qSG2N4FghB1He/r2mFrWKCaL7dXCilEuNEeAn20fdD4= github.com/DataDog/zstd v1.4.5 h1:EndNeuB0l9syBZhut0wns3gV1hL8zX8LIu6ZiVHWLIQ= +github.com/DataDog/zstd v1.4.5/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24 h1:sHglBQTwgx+rWPdisA5ynNEsoARbiCBOyGcJM4/OzsM= github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= github.com/GaijinEntertainment/go-exhaustruct/v2 v2.3.0 h1:+r1rSv4gvYn0wmRjC8X7IAzX8QezqtFV9m0MUHFJgts= github.com/GaijinEntertainment/go-exhaustruct/v2 v2.3.0/go.mod h1:b3g59n2Y+T5xmcxJL+UEG2f8cQploZm1mR/v6BW0mU0= github.com/HdrHistogram/hdrhistogram-go v1.1.2 h1:5IcZpTvzydCQeHzK4Ef/D5rrSqwxob0t8PQPMybUNFM= +github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible h1:1G1pk05UrOh0NlF1oeaaix1x8XzrfjIDK47TY0Zehcw= github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= @@ -390,7 +406,9 @@ github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4 h1:ra2OtmuW0A github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4/go.mod h1:UBYPn8k0D56RtnR8RFQMjmh4KrZzWJ5o7Z9SYjossQ8= github.com/Shopify/sarama v1.19.0 h1:9oksLxC6uxVPHPVYUmq6xhr1BOF/hHobWH2UzO67z1s= github.com/Shopify/toxiproxy v2.1.4+incompatible h1:TKdv8HiTLgE5wdJuEML90aBgNWsokNbMijUGhmcoBJc= +github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= github.com/VictoriaMetrics/fastcache v1.6.0 h1:C/3Oi3EiBCqufydp1neRZkqcwmEiuRT9c3fqvvgKm5o= +github.com/VictoriaMetrics/fastcache v1.6.0/go.mod h1:0qHz5QP0GMX4pfmMA/zt5RgfNuXJrTP0zS7DqpHGGTw= github.com/acomagu/bufpipe v1.0.3 h1:fxAGrHZTgQ9w5QqVItgzwj235/uYZYgbXitB+dLupOk= github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= github.com/adlio/schema v1.3.3/go.mod h1:1EsRssiv9/Ce2CMzq5DoL7RiMshhuigQxrR4DMV9fHg= @@ -402,6 +420,7 @@ github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af h1:wVe6/Ea46ZMeNkQjj github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= github.com/alecthomas/kingpin/v2 v2.3.1 h1:ANLJcKmQm4nIaog7xdr/id6FM6zm5hHnfZrvtKPxqGg= github.com/alecthomas/kingpin/v2 v2.3.1/go.mod h1:oYL5vtsvEHZGHxU7DMp32Dvx+qL+ptGn6lWaot2vCNE= +github.com/alecthomas/participle/v2 v2.0.0-alpha7/go.mod h1:NumScqsC42o9x+dGj8/YqsIfhrIQjFEOFovxotbBirA= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafoB+tBA3gMyHYHrpOtNuDiK/uB5uXxq5wM= github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 h1:s6gZFSlWYmbqAuRjVTiNNhvNRfY2Wxp9nhfyel4rklc= github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE= @@ -410,11 +429,14 @@ github.com/alexkohler/prealloc v1.0.0/go.mod h1:VetnK3dIgFBBKmg0YnD9F9x6Icjd+9cv github.com/alingse/asasalint v0.0.11 h1:SFwnQXJ49Kx/1GghOFz1XGqHYKp21Kq1nHad/0WQRnw= github.com/alingse/asasalint v0.0.11/go.mod h1:nCaoMhw7a9kSJObvQyVzNTPBDbNpdocqrSP7t/cW5+I= github.com/andybalholm/brotli v1.0.4 h1:V7DdXeJtZscaqfNuAdSRuRFzuiKlHSC/Zh3zl9qY3JY= +github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= github.com/antihax/optional v1.0.0 h1:xK2lYat7ZLaVVcIuj82J8kIro4V6kDe0AUDFboUCwcg= github.com/apache/arrow/go/v10 v10.0.1 h1:n9dERvixoC/1JjDmBcs9FPaEryoANa2sCgVFo6ez9cI= +github.com/apache/arrow/go/v10 v10.0.1/go.mod h1:YvhnlEePVnBS4+0z3fhPfUy7W1Ikj0Ih0vcRo/gZ1M0= github.com/apache/thrift v0.16.0 h1:qEy6UW60iVOlUy+b9ZR0d5WzUWYGOo4HfopoyBaNmoY= +github.com/apache/thrift v0.16.0/go.mod h1:PHK3hniurgQaNMZYaCLEqXKsYK8upmhPbmdP2FXSqgU= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e h1:QEF07wC0T1rKkctt1RINW/+RMTVmiwxETico2l3gxJA= github.com/armon/circbuf v0.0.0-20190214190532-5111143e8da2 h1:7Ip0wMmLHLRJdrloDxZfhMm0xrLXZS8+COSu2bXmEQs= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6 h1:G1bPvciwNyF7IUmKXNt9Ak3m6u9DE1rF+RmtIkBpVdA= @@ -427,6 +449,8 @@ github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkY github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a h1:pv34s756C4pEXnjgPfGYgdhg/ZdajGhyOvzx8k+23nw= github.com/ashanbrown/forbidigo v1.3.0 h1:VkYIwb/xxdireGAdJNZoo24O4lmnEWkactplBlWTShc= github.com/ashanbrown/forbidigo v1.3.0/go.mod h1:vVW7PEdqEFqapJe95xHkTfB1+XvZXBFg8t0sG2FIxmI= +github.com/ashanbrown/forbidigo v1.5.1 h1:WXhzLjOlnuDYPYQo/eFlcFMi8X/kLfvWLYu6CSoebis= +github.com/ashanbrown/forbidigo v1.5.1/go.mod h1:Y8j9jy9ZYAEHXdu723cUlraTqbzjKF1MUyfOKL+AjcU= github.com/ashanbrown/makezero v1.1.1 h1:iCQ87C0V0vSyO+M9E/FZYbu65auqH0lnsOkf5FcB28s= github.com/ashanbrown/makezero v1.1.1/go.mod h1:i1bJLCRSCHOcOa9Y6MyF2FTfMZMFdHvxKHxgO5Z1axI= github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4= @@ -435,13 +459,21 @@ github.com/aws/aws-lambda-go v1.13.3 h1:SuCy7H3NLyp+1Mrfp+m80jcbi9KYWAs9/BXwppwR github.com/aws/aws-sdk-go-v2 v1.9.1 h1:ZbovGV/qo40nrOJ4q8G33AGICzaPI45FHQWJ9650pF4= github.com/aws/aws-sdk-go-v2 v1.9.1/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4= github.com/aws/aws-sdk-go-v2/config v1.1.1 h1:ZAoq32boMzcaTW9bcUacBswAmHTbvlvDJICgHFZuECo= +github.com/aws/aws-sdk-go-v2/config v1.1.1/go.mod h1:0XsVy9lBI/BCXm+2Tuvt39YmdHwS5unDQmxZOYe8F5Y= github.com/aws/aws-sdk-go-v2/credentials v1.1.1 h1:NbvWIM1Mx6sNPTxowHgS2ewXCRp+NGTzUYb/96FZJbY= +github.com/aws/aws-sdk-go-v2/credentials v1.1.1/go.mod h1:mM2iIjwl7LULWtS6JCACyInboHirisUUdkBPoTHMOUo= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.0.2 h1:EtEU7WRaWliitZh2nmuxEXrN0Cb8EgPUFGIoTMeqbzI= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.0.2/go.mod h1:3hGg3PpiEjHnrkrlasTfxFqUsZ2GCk/fMUn4CbKgSkM= github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.8.1 h1:w/fPGB0t5rWwA43mux4e9ozFSH5zF1moQemlA131PWc= +github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.8.1/go.mod h1:CM+19rL1+4dFWnOQKwDc7H1KwXTz+h61oUSHyhV0b3o= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.0.2 h1:4AH9fFjUlVktQMznF+YN33aWNXaR4VgDXyP28qokJC0= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.0.2/go.mod h1:45MfaXZ0cNbeuT0KQ1XJylq8A6+OpVV2E5kvY/Kq+u8= github.com/aws/aws-sdk-go-v2/service/route53 v1.1.1 h1:cKr6St+CtC3/dl/rEBJvlk7A/IN5D5F02GNkGzfbtVU= +github.com/aws/aws-sdk-go-v2/service/route53 v1.1.1/go.mod h1:rLiOUrPLW/Er5kRcQ7NkwbjlijluLsrIbu/iyl35RO4= github.com/aws/aws-sdk-go-v2/service/sso v1.1.1 h1:37QubsarExl5ZuCBlnRP+7l1tNwZPBSTqpTBrPH98RU= +github.com/aws/aws-sdk-go-v2/service/sso v1.1.1/go.mod h1:SuZJxklHxLAXgLTc1iFXbEWkXs7QRTQpCLGaKIprQW0= github.com/aws/aws-sdk-go-v2/service/sts v1.1.1 h1:TJoIfnIFubCX0ACVeJ0w46HEH5MwjwYN4iFhuYIhfIY= +github.com/aws/aws-sdk-go-v2/service/sts v1.1.1/go.mod h1:Wi0EBZwiz/K44YliU0EKxqTCJGUfYTWXrrBwkq736bM= github.com/aws/smithy-go v1.8.0 h1:AEwwwXQZtUwP5Mz506FeXXrKBe0jA8gVM+1gEcSRooc= github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= @@ -452,10 +484,16 @@ github.com/blizzy78/varnamelen v0.8.0 h1:oqSblyuQvFsW1hbBHh1zfwrKe3kcSj0rnXkKzsQ github.com/blizzy78/varnamelen v0.8.0/go.mod h1:V9TzQZ4fLJ1DSrjVDfl89H7aMnTvKkApdHeyESmyR7k= github.com/bombsimon/wsl/v3 v3.3.0 h1:Mka/+kRLoQJq7g2rggtgQsjuI/K5Efd87WX96EWFxjM= github.com/bombsimon/wsl/v3 v3.3.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc= +github.com/bombsimon/wsl/v3 v3.4.0 h1:RkSxjT3tmlptwfgEgTgU+KYKLI35p/tviNXNXiL2aNU= +github.com/bombsimon/wsl/v3 v3.4.0/go.mod h1:KkIB+TXkqy6MvK9BDZVbZxKNYsE1/oLRJbIFtf14qqo= github.com/breml/bidichk v0.2.3 h1:qe6ggxpTfA8E75hdjWPZ581sY3a2lnl0IRxLQFelECI= github.com/breml/bidichk v0.2.3/go.mod h1:8u2C6DnAy0g2cEq+k/A2+tr9O1s+vHGxWn0LTc70T2A= +github.com/breml/bidichk v0.2.4 h1:i3yedFWWQ7YzjdZJHnPo9d/xURinSq3OM+gyM43K4/8= +github.com/breml/bidichk v0.2.4/go.mod h1:7Zk0kRFt1LIZxtQdl9W9JwGAcLTTkOs+tN7wuEYGJ3s= github.com/breml/errchkjson v0.3.0 h1:YdDqhfqMT+I1vIxPSas44P+9Z9HzJwCeAzjB8PxP1xw= github.com/breml/errchkjson v0.3.0/go.mod h1:9Cogkyv9gcT8HREpzi3TiqBxCqDzo8awa92zSDFcofU= +github.com/breml/errchkjson v0.3.1 h1:hlIeXuspTyt8Y/UmP5qy1JocGNR00KQHgfaNtRAjoxQ= +github.com/breml/errchkjson v0.3.1/go.mod h1:XroxrzKjdiutFyW3nWhw34VGg7kiMsDQox73yWCGI2U= 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.0 h1:V2/ZgjfDFIygAX3ZapeigkVBoVUtOJKSwrhZdlpSvaA= @@ -472,6 +510,7 @@ github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtyd github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f h1:bAs4lUbRJpnnkd9VhRV3jjAVU7DJVjMaK+IsvSeZvFo= 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/go.mod h1:0DVlHczLPewLcPGEIeUEzfOJhqGPQ0mJJRDBtD307+o= github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd h1:R/opQEbFEy9JGkIguV40SvRY1uliPX8ifOvi6ICsFCw= 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= @@ -489,52 +528,67 @@ github.com/bufbuild/buf v1.7.0/go.mod h1:Go40fMAF46PnPLC7jJgTQhAI95pmC0+VtxFKVC0 github.com/bufbuild/connect-go v1.0.0 h1:htSflKUT8y1jxhoPhPYTZMrsY3ipUXjjrbcZR5O2cVo= github.com/bufbuild/connect-go v1.0.0/go.mod h1:9iNvh/NOsfhNBUH5CtvXeVUskQO1xsrEviH7ZArwZ3I= github.com/bufbuild/protocompile v0.4.0/go.mod h1:3v93+mbWn/v3xzN+31nwkJfrEpAUwp+BagBSZWx+TP8= -github.com/burnt-labs/interchaintest/v7 v7.0.0-20230613163648-aa1862315549/go.mod h1:PQHTFpUmM/meGRt87JNtCQp5k+D1Vgb/vS9+Faup6UA= github.com/butuzov/ireturn v0.1.1 h1:QvrO2QF2+/Cx1WA/vETCIYBKtRjc30vesdoPUNo1EbY= github.com/butuzov/ireturn v0.1.1/go.mod h1:Wh6Zl3IMtTpaIKbmwzqi6olnM9ptYQxxVacMsOEFPoc= github.com/bwesterb/go-ristretto v1.2.0 h1:xxWOVbN5m8NNKiSDZXE1jtZvZnC6JSJ9cYFADiZcWtw= github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= github.com/casbin/casbin/v2 v2.37.0 h1:/poEwPSovi4bTOcP752/CsTQiRz2xycyVKFG7GUhbDw= +github.com/casbin/casbin/v2 v2.37.0/go.mod h1:vByNa/Fchek0KZUgG5wEsl7iFsiviAYKRtgrQfcJqHg= github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/census-instrumentation/opencensus-proto v0.4.1 h1:iKLQ0xPNFxR/2hzXZMrBo8f1j86j5WHzznCCQxV/b8g= github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw= github.com/cespare/cp v0.1.0 h1:SE+dxFebS7Iik5LK0tsi1k9ZCxEaFX4AjQmoyA+1dJk= +github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/charithe/durationcheck v0.0.9 h1:mPP4ucLrf/rKZiIG/a9IPXHGlh8p4CzgpyTy6EEutYk= github.com/charithe/durationcheck v0.0.9/go.mod h1:SSbRIBVfMjCi/kEB6K65XEA83D6prSM8ap1UCpNKtgg= +github.com/charithe/durationcheck v0.0.10 h1:wgw73BiocdBDQPik+zcEoBG/ob8uyBHf2iyoHGPf5w4= +github.com/charithe/durationcheck v0.0.10/go.mod h1:bCWXb7gYRysD1CU3C+u4ceO49LoGOY1C1L6uouGNreQ= github.com/chavacava/garif v0.0.0-20220630083739-93517212f375 h1:E7LT642ysztPWE0dfz43cWOvMiF42DyTRC+eZIaO4yI= github.com/chavacava/garif v0.0.0-20220630083739-93517212f375/go.mod h1:4m1Rv7xfuwWPNKXlThldNuJvutYM6J95wNuuVmn55To= +github.com/chavacava/garif v0.0.0-20230227094218-b8c73b2037b8 h1:W9o46d2kbNL06lq7UNDPV0zYLzkrde/bjIqO02eoll0= +github.com/chavacava/garif v0.0.0-20230227094218-b8c73b2037b8/go.mod h1:gakxgyXaaPkxvLw1XQxNGK4I37ys9iBRzNUx/B7pUCo= github.com/checkpoint-restore/go-criu/v5 v5.3.0 h1:wpFFOoomK3389ue2lAb0Boag6XPht5QYpipxmSNL4d8= github.com/checkpoint-restore/go-criu/v5 v5.3.0/go.mod h1:E/eQpaFtUKGOOSEBZgmKAcn+zUUwWxqcaKZlF54wK8E= github.com/cheekybits/genny v1.0.0 h1:uGGa4nei+j20rOSeDeP5Of12XVm7TGUd4dJA9RDitfE= +github.com/cheekybits/genny v1.0.0/go.mod h1:+tQajlRqAUrPI7DOSpB0XAqZYtQakVtB7wXkRAgjxjQ= github.com/cheggaaa/pb v1.0.27 h1:wIkZHkNfC7R6GI5w7l/PdAdzXzlrbcI3p8OAlnkTsnc= github.com/cilium/ebpf v0.7.0 h1:1k/q3ATgxSXRdrmPfH8d7YK0GfqVsEKZAX9dQZvs56k= github.com/cilium/ebpf v0.7.0/go.mod h1:/oI2+1shJiTGAMgl6/RgJr36Eo1jzrRcAWbcXO2usCA= github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible h1:C29Ae4G5GtYyYMm1aztcyj/J5ckgJm2zwdDajFbx1NY= github.com/circonus-labs/circonusllhist v0.1.3 h1:TJH+oke8D16535+jHExHj4nQvzlZrj7ug5D7I/orNUA= github.com/clbanning/mxj v1.8.4 h1:HuhwZtbyvyOw+3Z1AowPkU87JkJUSv751ELWaiTpj8I= +github.com/clbanning/mxj v1.8.4/go.mod h1:BVjHeAH+rl9rs6f+QIpeRl0tfu10SXn1pUSa5PVGJng= github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec h1:EdRZT3IeKQmfCSrgo8SZ8V3MEnskuJP0wCYNpe+aiXo= github.com/client9/misspell v0.3.4 h1:ta993UF76GwbvJcIo3Y68y/M3WxlpEHPWIGDkJYwzJI= github.com/cloudflare/circl v1.1.0 h1:bZgT/A+cikZnKIwn7xL2OBj012Bmvho/o6RpRvv3GKY= github.com/cloudflare/circl v1.1.0/go.mod h1:prBCrKB9DV4poKZY1l9zBXg2QJY7mvgRvtMxxK7fi4I= github.com/cloudflare/cloudflare-go v0.14.0 h1:gFqGlGl/5f9UGXAaKapCGUfaTCgRKKnzu2VvzMZlOFA= +github.com/cloudflare/cloudflare-go v0.14.0/go.mod h1:EnwdgGMaFOruiPZRFSgn+TsQ3hQ7C/YWzIGLeu5c304= github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe h1:QQ3GSy+MqSHxm/d8nCtnAiZdYFd45cYZPs8vOOIYKfk= github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= github.com/cncf/xds/go v0.0.0-20220314180256-7f1daf1720fc/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20230105202645-06c439db220b/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20230310173818-32f1caf87195 h1:58f1tJ1ra+zFINPlwLWvQsR9CzAKt2e+EWV2yX9oXQ4= github.com/cncf/xds/go v0.0.0-20230310173818-32f1caf87195/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cockroachdb/apd/v3 v3.1.0/go.mod h1:6qgPBMXjATAdD/VefbRP9NoSLKjbB4LCoA7gN4LpHs4= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa h1:OaNxuTZr7kxeODyLWsRMC+OD03aFUH+mW6r2d+MWa5Y= github.com/cockroachdb/errors v1.9.1 h1:yFVvsI0VxmRShfawbt/laCIDy/mtTqqnvoNgiy5bEV8= +github.com/cockroachdb/errors v1.9.1/go.mod h1:2sxOtL2WIc096WSZqZ5h8fa17rdDq9HZOZLBCor4mBk= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= +github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= github.com/cockroachdb/pebble v0.0.0-20220817183557-09c6e030a677 h1:qbb/AE938DFhOajUYh9+OXELpSF9KZw2ZivtmW6eX1Q= +github.com/cockroachdb/pebble v0.0.0-20220817183557-09c6e030a677/go.mod h1:890yq1fUb9b6dGNwssgeUO5vQV9qfXnCPxAJhBQfXw0= github.com/cockroachdb/redact v1.1.3 h1:AKZds10rFSIj7qADf0g46UixK8NNLwWTNdCIGS5wfSQ= +github.com/cockroachdb/redact v1.1.3/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd h1:qMd81Ts1T2OTKmB4acZcyKaMtRnY5Y44NuXGX2GFJ1w= github.com/cometbft/cometbft v0.37.0/go.mod h1:Y2MMMN//O5K4YKd8ze4r9jmk4Y7h0ajqILXbH5JQFVs= github.com/consensys/gnark-crypto v0.4.1-0.20210426202927-39ac3d4b3f1f h1:C43yEtQ6NIf4ftFXD/V55gnGFgPbMQobd//YlnLjUJ8= +github.com/consensys/gnark-crypto v0.4.1-0.20210426202927-39ac3d4b3f1f/go.mod h1:815PAHg3wvysy0SyIqanF8gZ0Y1wjk/hrDHD/iT88+Q= github.com/containerd/aufs v1.0.0 h1:2oeJiwX5HstO7shSrPZjrohJZLzK36wvpdmzDRkL/LY= github.com/containerd/btrfs v1.0.0 h1:osn1exbzdub9L5SouXO5swW4ea/xVdJZ3wokxN5GrnA= github.com/containerd/cgroups v1.0.4 h1:jN/mbWBEaz+T1pi5OFtnkQ+8qnmEbAr1Oo1FRm5B0dA= +github.com/containerd/cgroups v1.0.4/go.mod h1:nLNQtsF7Sl2HxNebu77i1R0oDlhiTG+kO4JTrUzo6IA= github.com/containerd/console v1.0.3 h1:lIr7SlA5PxZyMV30bDW0MGbiOPXwc63yRuCP0ARubLw= github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U= github.com/containerd/containerd v1.6.8 h1:h4dOFDwzHmqFEP754PgfgTeVXFnLiRc6kiqC7tplDJs= @@ -565,6 +619,7 @@ github.com/coreos/go-systemd/v22 v22.3.3-0.20220203105225-a9a7ef127534/go.mod h1 github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf h1:CAKfRE2YtTUIjjh1bkBtyYFaUT/WmOqsJjgtihT0vMI= github.com/cosmos/cosmos-db v0.0.0-20221226095112-f3c38ecb5e32 h1:zlCp9n3uwQieELltZWHRmwPmPaZ8+XoL2Sj+A2YJlr8= +github.com/cosmos/cosmos-db v0.0.0-20221226095112-f3c38ecb5e32/go.mod h1:kwMlEC4wWvB48zAShGKVqboJL6w4zCLesaNQ3YLU2BQ= github.com/cosmos/cosmos-sdk v0.47.0/go.mod h1:FTtZbqiHCZ2vun9WrPq6qLQafNKkAuIhLAxzLjr2TiI= github.com/cosmos/cosmos-sdk v0.47.1/go.mod h1:14tO5KQaTrl2q3OxBnDRfue7TRN9zkXS0cLutrSqkOo= github.com/cosmos/cosmos-sdk/db v1.0.0-beta.1.0.20220726092710-f848e4300a8a h1:2humuGPw3O5riJVFq/E2FRjF57UrO97W1qJcGVmK+6k= @@ -573,6 +628,7 @@ github.com/cosmos/gogoproto v1.4.1/go.mod h1:Ac9lzL4vFpBMcptJROQ6dQ4M3pOEK5Z/l0Q github.com/cosmos/gogoproto v1.4.6/go.mod h1:VS/ASYmPgv6zkPKLjR9EB91lwbLHOzaGCirmKKhncfI= github.com/cosmos/gogoproto v1.4.8/go.mod h1:hnb0DIEWTv+wdNzNcqus5xCQXq5+CXauq1FJuurRfVY= github.com/cosmos/gorocksdb v1.2.0 h1:d0l3jJG8M4hBouIZq0mDUHZ+zjOx044J3nGRskwTb4Y= +github.com/cosmos/gorocksdb v1.2.0/go.mod h1:aaKvKItm514hKfNJpUJXnnOWeBnk2GL4+Qw9NHizILw= github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk= github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= github.com/creachadair/taskgroup v0.3.2/go.mod h1:wieWwecHVzsidg2CsUnFinW1faVN4+kq+TDlRJQ0Wbk= @@ -581,25 +637,33 @@ github.com/creack/pty v1.1.11 h1:07n33Z8lZxZ2qwegKbObQohDhXDQxiMMz1NOUGYlesw= github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cristalhq/acmd v0.8.1 h1:mtFp/cbeJNY5jokF9zPz5mRllGHropRrOkOVxeGS6FI= github.com/cristalhq/acmd v0.8.1/go.mod h1:LG5oa43pE/BbxtfMoImHCQN++0Su7dzipdgBjMCBVDQ= +github.com/cucumber/common/gherkin/go/v22 v22.0.0/go.mod h1:3mJT10B2GGn3MvVPd3FwR7m2u4tLhSRhWUqJU4KN4Fg= +github.com/cucumber/common/messages/go/v17 v17.1.1/go.mod h1:bpGxb57tDE385Rb2EohgUadLkAbhoC4IyCFi89u/JQI= github.com/curioswitch/go-reassign v0.2.0 h1:G9UZyOcpk/d7Gd6mqYgd8XYWFMw/znxwGDUstnC9DIo= github.com/curioswitch/go-reassign v0.2.0/go.mod h1:x6OpXuWvgfQaMGks2BZybTngWjT84hqJfKoO8Tt/Roc= github.com/cyphar/filepath-securejoin v0.2.3 h1:YX6ebbZCZP7VkM3scTTokDgBL2TY741X51MTk3ycuNI= github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= github.com/daixiang0/gci v0.8.1 h1:T4xpSC+hmsi4CSyuYfIJdMZAr9o7xZmHpQVygMghGZ4= github.com/daixiang0/gci v0.8.1/go.mod h1:EpVfrztufwVgQRXjnX4zuNinEpLj5OmMjtu/+MB0V0c= +github.com/daixiang0/gci v0.10.1 h1:eheNA3ljF6SxnPD/vE4lCBusVHmV3Rs3dkKvFrJ7MR0= +github.com/daixiang0/gci v0.10.1/go.mod h1:xtHP9N7AHdNvtRNfcx9gwTDfw7FRJx4bZUsiEfiNNAI= github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c h1:pFUpOrbxDR6AkioZ1ySsx5yxlDQZ8stG2b88gTPxgJU= +github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c/go.mod h1:6UhI8N9EjYm1c2odKpFpAYeR8dsBeM7PtzQhRgxRr9U= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs= github.com/decred/dcrd/lru v1.0.0 h1:Kbsb1SFDsIlaupWPwsPp+dkxiBY1frcS07PCPgotKz8= 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/denis-tingaikin/go-header v0.4.3 h1:tEaZKAlqql6SKCY++utLmkPLd6K8IBM20Ha7UVm+mtU= github.com/denis-tingaikin/go-header v0.4.3/go.mod h1:0wOCWuN71D5qIgE2nz9KrKmuYBAC2Mra5RassOIQ2/c= github.com/denisenkom/go-mssqldb v0.12.0 h1:VtrkII767ttSPNRfFekePK3sctr+joXgO58stqQbtUA= github.com/dgraph-io/badger v1.6.2 h1:mNw0qs90GVgGGWylh0umH5iag1j6n/PeJtNvL6KY/x8= +github.com/dgraph-io/badger v1.6.2/go.mod h1:JW2yswe3V058sS0kZ2h/AXeDSqFjxnZcRrVH//y2UQE= github.com/dgraph-io/badger/v3 v3.2103.2 h1:dpyM5eCJAtQCBcMCZcT4UBZchuTJgCywerHHgmxfxM8= github.com/dimchansky/utfbom v1.1.1 h1:vV6w1AhK4VMnhBno/TPVCoK9U/LP0PkLCS9tbxHdi/U= github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91 h1:Izz0+t1Z5nI16/II7vuEo/nHjodOg0p7+OiDpjX5t1E= +github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= github.com/docker/cli v20.10.17+incompatible h1:eO2KS7ZFeov5UJeaDmIs1NFEDRf32PaqRpvoEkKBy5M= github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68= github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= @@ -616,6 +680,7 @@ github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21 h1:YEetp8 github.com/eapache/queue v1.1.0 h1:YOEu7KNc61ntiQlcEeUIoDTJ2o8mQznoNvUhiigpIqc= github.com/edsrzf/mmap-go v1.0.0 h1:CEBF7HpRnUCSJgGUb5h1Gm7e3VkmVDrR8lvWVLtrOFw= github.com/elastic/gosigar v0.14.2 h1:Dg80n8cr90OZ7x+bAax/QjoW/XqTI11RmA79ZwIm9/4= +github.com/elastic/gosigar v0.14.2/go.mod h1:iXRIGg2tLnu7LBdpqzyQfGDEidKCfWcCMS0WKyPWoMs= github.com/emicklei/go-restful v2.9.5+incompatible h1:spTtZBk5DYEvbxMVutUuTyh1Ao2r4iyvLdACqsl/Ljk= github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= @@ -636,6 +701,8 @@ github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4/go.mod h1:5tD+ne github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= +github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= +github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw= github.com/fatih/structtag v1.2.0 h1:/OdNE99OxoI/PqaW/SuSK9uxxT3f/tcSZgon/ssNSx4= github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= github.com/firefart/nonamedreturns v1.0.4 h1:abzI1p7mAEPYuR4A+VLKn4eNDOycjYo2phmY9sfv40Y= @@ -643,11 +710,14 @@ github.com/firefart/nonamedreturns v1.0.4/go.mod h1:TDhe/tjI1BXo48CmYbUduTV7BdIg github.com/fjl/gencodec v0.0.0-20220412091415-8bb9e558978c h1:CndMRAH4JIwxbW8KYq6Q+cGWcGHz0FjGR3QqcInWcW0= github.com/fjl/gencodec v0.0.0-20220412091415-8bb9e558978c/go.mod h1:AzA8Lj6YtixmJWL+wkKoBGsLWy9gFrAzi4g+5bCKwpY= github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5 h1:FtmdgXiUlNeRsoNMFlKLDt+S+6hbjVMEW6RGQ7aUf7c= +github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= github.com/flynn/noise v1.0.0 h1:DlTHqmzmvcEiKj+4RYo/imoswx/4r6iBlCMfVtrMXpQ= +github.com/flynn/noise v1.0.0/go.mod h1:xbMo+0i6+IGbYdJhF31t2eR1BIU0CYc12+BNAKwUTag= github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90 h1:WXb3TSNmHp2vHoCroCIB1foO/yQ36swABL8aOVeDpgg= github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/francoispqt/gojay v1.2.13 h1:d2m3sFjloqoIUQU3TsHBgj6qg/BVGlTBeHDUmyJnXKk= +github.com/francoispqt/gojay v1.2.13/go.mod h1:ehT5mTG4ua4581f1++1WLG0vPdaA9HaiDsoyrBGkyDY= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db h1:gb2Z18BhTPJPpLQWj4T+rfKHYCHxRHCtRxhKKjRidVw= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8 h1:a9ENSRDFBUPkJ5lCgVZh26+ZbGyoVJG7yb5SSzF5H54= github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= @@ -657,12 +727,14 @@ github.com/fzipp/gocyclo v0.6.0/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlya github.com/garslo/gogen v0.0.0-20170306192744-1d203ffc1f61 h1:IZqZOB2fydHte3kUgxrzK5E1fW7RQGeDwE8F/ZZnUYc= github.com/garslo/gogen v0.0.0-20170306192744-1d203ffc1f61/go.mod h1:Q0X6pkwTILDlzrGEckF6HKjXe48EgsY/l7K7vhY4MW8= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff h1:tY80oXqGNY4FhTFhk+o9oFHGINQ/+vhlm8HFzi6znCI= +github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= github.com/gdamore/encoding v1.0.0 h1:+7OoQ1Bc6eTm5niUzBa0Ctsh6JbMW6Ra+YNuAtDBdko= github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg= github.com/gdamore/tcell/v2 v2.4.1-0.20210905002822-f057f0a857a1/go.mod h1:Az6Jt+M5idSED2YPGtwnfJV0kXohgdCBPmHGSYc1r04= github.com/gdamore/tcell/v2 v2.6.0 h1:OKbluoP9VYmJwZwq/iLb4BxwKcwGthaa1YNBJIyCySg= github.com/gdamore/tcell/v2 v2.6.0/go.mod h1:be9omFATkdr0D9qewWW3d+MEvl5dha+Etb5y65J2H8Y= github.com/getsentry/sentry-go v0.17.0 h1:UustVWnOoDFHBS7IJUB2QK/nB5pap748ZEp0swnQJak= +github.com/getsentry/sentry-go v0.17.0/go.mod h1:B82dxtBvxG0KaPD8/hfSV+VcHD+Lg/xUS4JuQn1P4cM= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/gliderlabs/ssh v0.3.5 h1:OcaySEmAQJgyYcArR+gGGTHCyE7nvhEMTlYY+Dp8CpY= github.com/gliderlabs/ssh v0.3.5/go.mod h1:8XB4KraRrX39qHhT6yxPsHedjA08I/uBVwj4xC+/+z4= @@ -670,6 +742,8 @@ github.com/go-chi/chi/v5 v5.0.7 h1:rDTPXLDHGATaeHvVlLcR4Qe0zftYethFucbjVQ1PxU8= github.com/go-chi/chi/v5 v5.0.7/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= github.com/go-critic/go-critic v0.6.5 h1:fDaR/5GWURljXwF8Eh31T2GZNz9X4jeboS912mWF8Uo= github.com/go-critic/go-critic v0.6.5/go.mod h1:ezfP/Lh7MA6dBNn4c6ab5ALv3sKnZVLx37tr00uuaOY= +github.com/go-critic/go-critic v0.7.0 h1:tqbKzB8pqi0NsRZ+1pyU4aweAF7A7QN0Pi4Q02+rYnQ= +github.com/go-critic/go-critic v0.7.0/go.mod h1:moYzd7GdVXE2C2hYTwd7h0CPcqlUeclsyBRwMa38v64= github.com/go-git/gcfg v1.5.0 h1:Q5ViNfGF8zFgyJWPqYwA7qGFoMTEiBmdlkcfRmpIMa4= github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= github.com/go-git/go-billy/v5 v5.3.1/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= @@ -693,30 +767,48 @@ github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiU github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A= github.com/go-playground/validator/v10 v10.11.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= github.com/go-sourcemap/sourcemap v2.1.3+incompatible h1:W1iEw64niKVGogNgBN3ePyLFfuisuzeidWPMPWmECqU= +github.com/go-sourcemap/sourcemap v2.1.3+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= github.com/go-sql-driver/mysql v1.4.0 h1:7LxgVwFb2hIQtMm87NdgAVfXjnt4OePseqT1tKx+opk= github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 h1:p104kn46Q8WdvHunIJ9dAyjPVtrBPhSr3KT2yUst43I= github.com/go-toolsmith/astcast v1.0.0 h1:JojxlmI6STnFVG9yOImLeGREv8W2ocNUM+iOhR6jE7g= github.com/go-toolsmith/astcast v1.0.0/go.mod h1:mt2OdQTeAQcY4DQgPSArJjHCcOwlX+Wl/kwN+LbLGQ4= +github.com/go-toolsmith/astcast v1.1.0 h1:+JN9xZV1A+Re+95pgnMgDboWNVnIMMQXwfBwLRPgSC8= +github.com/go-toolsmith/astcast v1.1.0/go.mod h1:qdcuFWeGGS2xX5bLM/c3U9lewg7+Zu4mr+xPwZIB4ZU= github.com/go-toolsmith/astcopy v1.0.2 h1:YnWf5Rnh1hUudj11kei53kI57quN/VH6Hp1n+erozn0= github.com/go-toolsmith/astcopy v1.0.2/go.mod h1:4TcEdbElGc9twQEYpVo/aieIXfHhiuLh4aLAck6dO7Y= +github.com/go-toolsmith/astcopy v1.1.0 h1:YGwBN0WM+ekI/6SS6+52zLDEf8Yvp3n2seZITCUBt5s= +github.com/go-toolsmith/astcopy v1.1.0/go.mod h1:hXM6gan18VA1T/daUEHCFcYiW8Ai1tIwIzHY6srfEAw= github.com/go-toolsmith/astequal v1.0.0/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= github.com/go-toolsmith/astequal v1.0.2/go.mod h1:9Ai4UglvtR+4up+bAD4+hCj7iTo4m/OXVTSLnCyTAx4= github.com/go-toolsmith/astequal v1.0.3 h1:+LVdyRatFS+XO78SGV4I3TCEA0AC7fKEGma+fH+674o= github.com/go-toolsmith/astequal v1.0.3/go.mod h1:9Ai4UglvtR+4up+bAD4+hCj7iTo4m/OXVTSLnCyTAx4= +github.com/go-toolsmith/astequal v1.1.0 h1:kHKm1AWqClYn15R0K1KKE4RG614D46n+nqUQ06E1dTw= +github.com/go-toolsmith/astequal v1.1.0/go.mod h1:sedf7VIdCL22LD8qIvv7Nn9MuWJruQA/ysswh64lffQ= github.com/go-toolsmith/astfmt v1.0.0 h1:A0vDDXt+vsvLEdbMFJAUBI/uTbRw1ffOPnxsILnFL6k= github.com/go-toolsmith/astfmt v1.0.0/go.mod h1:cnWmsOAuq4jJY6Ct5YWlVLmcmLMn1JUPuQIHCY7CJDw= +github.com/go-toolsmith/astfmt v1.1.0 h1:iJVPDPp6/7AaeLJEruMsBUlOYCmvg0MoCfJprsOmcco= +github.com/go-toolsmith/astfmt v1.1.0/go.mod h1:OrcLlRwu0CuiIBp/8b5PYF9ktGVZUjlNMV634mhwuQ4= github.com/go-toolsmith/astp v1.0.0 h1:alXE75TXgcmupDsMK1fRAy0YUzLzqPVvBKoyWV+KPXg= github.com/go-toolsmith/astp v1.0.0/go.mod h1:RSyrtpVlfTFGDYRbrjyWP1pYu//tSFcvdYrA8meBmLI= +github.com/go-toolsmith/astp v1.1.0 h1:dXPuCl6u2llURjdPLLDxJeZInAeZ0/eZwFJmqZMnpQA= +github.com/go-toolsmith/astp v1.1.0/go.mod h1:0T1xFGz9hicKs8Z5MfAqSUitoUYS30pDMsRVIDHs8CA= github.com/go-toolsmith/pkgload v1.0.2-0.20220101231613-e814995d17c5 h1:eD9POs68PHkwrx7hAB78z1cb6PfGq/jyWn3wJywsH1o= github.com/go-toolsmith/pkgload v1.0.2-0.20220101231613-e814995d17c5/go.mod h1:3NAwwmD4uY/yggRxoEjk/S00MIV3A+H7rrE3i87eYxM= github.com/go-toolsmith/strparse v1.0.0 h1:Vcw78DnpCAKlM20kSbAyO4mPfJn/lyYA4BJUDxe2Jb4= github.com/go-toolsmith/strparse v1.0.0/go.mod h1:YI2nUKP9YGZnL/L1/DLFBfixrcjslWct4wyljWhSRy8= +github.com/go-toolsmith/strparse v1.1.0 h1:GAioeZUK9TGxnLS+qfdqNbA4z0SSm5zVNtCQiyP2Bvw= +github.com/go-toolsmith/strparse v1.1.0/go.mod h1:7ksGy58fsaQkGQlY8WVoBFNyEPMGuJin1rfoPS4lBSQ= github.com/go-toolsmith/typep v1.0.2 h1:8xdsa1+FSIH/RhEkgnD1j2CJOy5mNllW1Q9tRiYwvlk= github.com/go-toolsmith/typep v1.0.2/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= +github.com/go-toolsmith/typep v1.1.0 h1:fIRYDyF+JywLfqzyhdiHzRop/GQDxxNhLGQ6gFUNHus= +github.com/go-toolsmith/typep v1.1.0/go.mod h1:fVIw+7zjdsMxDA3ITWnH1yOiw1rnTQKCsF/sk2H/qig= github.com/go-xmlfmt/xmlfmt v0.0.0-20191208150333-d5b6f63a941b h1:khEcpUM4yFcxg4/FHQWkvVRmgijNXRfzkIDHh23ggEo= github.com/go-xmlfmt/xmlfmt v0.0.0-20191208150333-d5b6f63a941b/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM= +github.com/go-xmlfmt/xmlfmt v1.1.2 h1:Nea7b4icn8s57fTx1M5AI4qQT5HEM3rVUO8MuE6g80U= +github.com/go-xmlfmt/xmlfmt v1.1.2/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM= github.com/go-zookeeper/zk v1.0.2 h1:4mx0EYENAdX/B/rbunjlt5+4RTA/a9SMHBRuSKdGxPM= +github.com/go-zookeeper/zk v1.0.2/go.mod h1:nOB03cncLtlp4t+UAkGSV+9beXP/akpekBwL+UX1Qcw= github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= @@ -727,6 +819,7 @@ github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= github.com/gofrs/uuid v4.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/golang-jwt/jwt/v4 v4.3.0 h1:kHL1vqdqWNfATmA0FNMdmZNMyZI1U6O31X4rlIPoBog= +github.com/golang-jwt/jwt/v4 v4.3.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= github.com/golang-jwt/jwt/v4 v4.4.2 h1:rcc4lwaZgFMCZ5jxF9ABolDcIHdBytAFgqFPbSJQAYs= github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe h1:lXe2qZdvpiX5WZkZR4hgp4KJVfY3nMkvmwbVkpv1rVY= github.com/golang-sql/sqlexp v0.0.0-20170517235910-f1bb20e5a188 h1:+eHOFJl1BaXrQxKX+T06f78590z4qA2ZzBTqahsKSE4= @@ -743,18 +836,24 @@ github.com/golangci/gofmt v0.0.0-20220901101216-f2edd75033f2 h1:amWTbTGqOZ71ruzr github.com/golangci/gofmt v0.0.0-20220901101216-f2edd75033f2/go.mod h1:9wOXstvyDRshQ9LggQuzBCGysxs3b6Uo/1MvYCR2NMs= github.com/golangci/golangci-lint v1.50.1 h1:C829clMcZXEORakZlwpk7M4iDw2XiwxxKaG504SZ9zY= github.com/golangci/golangci-lint v1.50.1/go.mod h1:AQjHBopYS//oB8xs0y0M/dtxdKHkdhl0RvmjUct0/4w= +github.com/golangci/golangci-lint v1.52.2 h1:FrPElUUI5rrHXg1mQ7KxI1MXPAw5lBVskiz7U7a8a1A= +github.com/golangci/golangci-lint v1.52.2/go.mod h1:S5fhC5sHM5kE22/HcATKd1XLWQxX+y7mHj8B5H91Q/0= github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0 h1:MfyDlzVjl1hoaPzPD4Gpb/QgoRfSBR0jdhwGyAWwMSA= github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0/go.mod h1:66R6K6P6VWk9I95jvqGxkqJxVWGFy9XlDwLwVz1RCFg= github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca h1:kNY3/svz5T29MYHubXix4aDDuE3RWHkPvopM/EDv/MA= github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca/go.mod h1:tvlJhZqDe4LMs4ZHD0oMUlt9G2LWuDGoisJTBzLMV9o= github.com/golangci/misspell v0.3.5 h1:pLzmVdl3VxTOncgzHcvLOKirdvcx/TydsClUQXTehjo= github.com/golangci/misspell v0.3.5/go.mod h1:dEbvlSfYbMQDtrpRMQU675gSDLDNa8sCPPChZ7PhiVA= +github.com/golangci/misspell v0.4.0 h1:KtVB/hTK4bbL/S6bs64rYyk8adjmh1BygbBiaAiX+a0= +github.com/golangci/misspell v0.4.0/go.mod h1:W6O/bwV6lGDxUCChm2ykw9NQdd5bYd1Xkjo88UcWyJc= github.com/golangci/revgrep v0.0.0-20220804021717-745bb2f7c2e6 h1:DIPQnGy2Gv2FSA4B/hh8Q7xx3B7AIDk3DAMeHclH1vQ= github.com/golangci/revgrep v0.0.0-20220804021717-745bb2f7c2e6/go.mod h1:0AKcRCkMoKvUvlf89F6O7H2LYdhr1zBh736mBItOdRs= github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4 h1:zwtduBRr5SSWhqsYNgcuWO2kFlpdOZbP0+yRjmvPGys= github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ= github.com/google/flatbuffers v2.0.8+incompatible h1:ivUb1cGomAB101ZM1T0nOiWz9pSrTMoa9+EiY7igmkM= +github.com/google/flatbuffers v2.0.8+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= github.com/google/gopacket v1.1.19 h1:ves8RnFZPGiFnTS0uPQStjwru6uO6h+nlr9j6fL7kF8= +github.com/google/gopacket v1.1.19/go.mod h1:iJ8V8n6KS+z2U1A8pUwu8bW5SyEMkXJB8Yo/Vo+TKTo= github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26/go.mod h1:dDKJzRmX4S37WGHujM7tX//fmj1uioxKzKxz3lo4HJo= github.com/google/renameio v0.1.0 h1:GOZbcHa3HfsPKPlmyPyN2KEohoMXOhdMbHrvbpl2QaA= @@ -766,6 +865,8 @@ github.com/gookit/color v1.5.1 h1:Vjg2VEcdHpwq+oY63s/ksHrgJYCTo0bwWvmmYWdE9fQ= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= github.com/gordonklaus/ineffassign v0.0.0-20210914165742-4cc7213b9bc8 h1:PVRE9d4AQKmbelZ7emNig1+NT27DUmKZn5qXxfio54U= github.com/gordonklaus/ineffassign v0.0.0-20210914165742-4cc7213b9bc8/go.mod h1:Qcp2HIAYhR7mNUVSIxZww3Guk4it82ghYcEXIAk+QT0= +github.com/gordonklaus/ineffassign v0.0.0-20230107090616-13ace0543b28 h1:9alfqbrhuD+9fLZ4iaAVwhlp5PEhmnBt7yvK2Oy5C1U= +github.com/gordonklaus/ineffassign v0.0.0-20230107090616-13ace0543b28/go.mod h1:Qcp2HIAYhR7mNUVSIxZww3Guk4it82ghYcEXIAk+QT0= github.com/gorilla/context v1.1.1 h1:AWwleXJkX/nhcU9bZSnZoi3h/qGYqQAGhq6zZe/aQW8= github.com/gostaticanalysis/analysisutil v0.0.0-20190318220348-4088753ea4d3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= github.com/gostaticanalysis/analysisutil v0.0.3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= @@ -785,9 +886,11 @@ github.com/gostaticanalysis/testutil v0.4.0 h1:nhdCmubdmDF6VEatUNjgUZBJKWRqugoIS github.com/gotestyourself/gotestyourself v2.2.0+incompatible h1:AQwinXlbQR2HvPjQZOmDhRqsv5mZf+Jb1RnSLxcqZcI= github.com/gotestyourself/gotestyourself v2.2.0+incompatible/go.mod h1:zZKM6oeNM8k+FRljX1mnzVYeS8wiGgQyvST1/GafPbY= github.com/graph-gophers/graphql-go v1.3.0 h1:Eb9x/q6MFpCLz7jBCiP/WTxjSDrYLR1QY41SORZyNJ0= +github.com/graph-gophers/graphql-go v1.3.0/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho= github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks= github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3 h1:lLT7ZLSzGLI08vc9cpd+tYmNWjdKDqyr/2L+f6U12Fk= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3/go.mod h1:o//XUCC/F+yRGJoPO/VU0GSB0f8Nhgmxx0VIRUvaC0w= github.com/hanwen/go-fuse/v2 v2.1.1-0.20220112183258-f57e95bda82d h1:ibbzF2InxMOS+lLCphY9PHNKPURDUBNKaG6ErSq8gJQ= github.com/hashicorp/consul/api v1.18.0 h1:R7PPNzTCeN6VuQNDwwhZWJvzCtGSrNpJqfb22h3yH9g= github.com/hashicorp/consul/api v1.18.0/go.mod h1:owRRGJ9M5xReDC5nfT8FTJrNAPbT4NM6p/k+d03q2v4= @@ -797,6 +900,7 @@ github.com/hashicorp/consul/sdk v0.13.0/go.mod h1:0hs/l5fOVhJy/VdcoaNqUSi2AUs95e github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.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-getter v1.7.0/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744= github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= @@ -832,9 +936,12 @@ github.com/hashicorp/serf v0.10.1/go.mod h1:yL2t6BqATOLGc5HF7qbFkTfXoPIY0WZdWHfE github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= github.com/holiman/bloomfilter/v2 v2.0.3 h1:73e0e/V0tCydx14a0SCYS/EWCxgwLZ18CZcZKVu0fao= +github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= github.com/holiman/uint256 v1.2.0 h1:gpSYcPLWGv4sG43I2mVLiDZCNDh/EpGjSk8tmtxitHM= +github.com/holiman/uint256 v1.2.0/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hudl/fargo v1.4.0 h1:ZDDILMbB37UlAVLlWcJ2Iz1XuahZZTDZfdCKeclfq2s= +github.com/hudl/fargo v1.4.0/go.mod h1:9Ai6uvFy5fQNq6VPKtg+Ceq1+eTY4nKUlR2JElEOcDo= github.com/huin/goupnp v1.0.3 h1:N8No57ls+MnjlB+JPiCVSOyy/ot7MJTqlo7rn+NYSqQ= github.com/huin/goupnp v1.0.3/go.mod h1:ZxNlw5WqJj6wSsRK5+YfflQGXYfccj5VgQsMNixHM7Y= github.com/iancoleman/strcase v0.2.0 h1:05I4QRnGpI0m37iZQRuskXh+w77mr6Z41lwQzuHLwW0= @@ -843,24 +950,36 @@ github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639 h1:mV02weK github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk= github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= github.com/influxdata/influxdb v1.8.3 h1:WEypI1BQFTT4teLM+1qkEcvUi0dAvopAI/ir0vAiBg8= +github.com/influxdata/influxdb v1.8.3/go.mod h1:JugdFhsvvI8gadxOI6noqNeeBHvWNTbfYGtiAn+2jhI= 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-20200827194710-b269163b24ab h1:HqW4xhhynfjrtEiiSGcQUd6vrK23iMam1FO8rI7mwig= +github.com/influxdata/influxdb1-client v0.0.0-20200827194710-b269163b24ab/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/informalsystems/tm-load-test v1.3.0 h1:FGjKy7vBw6mXNakt+wmNWKggQZRsKkEYpaFk/zR64VA= github.com/informalsystems/tm-load-test v1.3.0/go.mod h1:OQ5AQ9TbT5hKWBNIwsMjn6Bf4O0U4b1kRc+0qZlQJKw= github.com/intel/goresctrl v0.2.0 h1:JyZjdMQu9Kl/wLXe9xA6s1X+tF6BWsQPFGJMEeCfWzE= github.com/ipfs/go-datastore v0.5.1 h1:WkRhLuISI+XPD0uk3OskB0fYFSyqK8Ob5ZYew9Qa1nQ= +github.com/ipfs/go-datastore v0.5.1/go.mod h1:9zhEApYMTl17C8YDp7JmU7sQZi2/wqiYh73hakZ90Bk= github.com/ipfs/go-ds-badger v0.3.0 h1:xREL3V0EH9S219kFFueOYJJTcjgNSZ2HY1iSvN7U1Ro= +github.com/ipfs/go-ds-badger v0.3.0/go.mod h1:1ke6mXNqeV8K3y5Ak2bAA0osoTfmxUdupVCGm4QUIek= github.com/ipfs/go-ds-leveldb v0.5.0 h1:s++MEBbD3ZKc9/8/njrn4flZLnCuY9I79v94gBUNumo= +github.com/ipfs/go-ds-leveldb v0.5.0/go.mod h1:d3XG9RUDzQ6V4SHi8+Xgj9j1XuEk1z82lquxrVbml/Q= github.com/ipfs/go-log/v2 v2.5.1 h1:1XdUzF7048prq4aBjDQQ4SL5RxftpRGdXhNRwKSAlcY= +github.com/ipfs/go-log/v2 v2.5.1/go.mod h1:prSpmC1Gpllc9UYWxDiZDreBYw7zp4Iqp1kOLU9U5UI= 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/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= github.com/jbenet/go-temp-err-catcher v0.1.0 h1:zpb3ZH6wIE8Shj2sKS+khgRvf7T7RABoLk/+KKHggpk= +github.com/jbenet/go-temp-err-catcher v0.1.0/go.mod h1:0kJRvmDZXNMIiJirNPEYfhpPwbGVtZVWC34vc5WLsDk= github.com/jbenet/goprocess v0.1.4 h1:DRGOFReOMqqDNXwW70QkacFW0YN9QnwLV0Vqk+3oU0o= +github.com/jbenet/goprocess v0.1.4/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4= github.com/jdxcode/netrc v0.0.0-20210204082910-926c7f70242a h1:d4+I1YEKVmWZrgkt6jpXBnLgV2ZjO0YxEtLDdfIZfH4= github.com/jdxcode/netrc v0.0.0-20210204082910-926c7f70242a/go.mod h1:Zi/ZFkEqFHTm7qkjyNJjaWH4LQA9LQhGJyF0lTYGpxw= github.com/jedisct1/go-minisign v0.0.0-20190909160543-45766022959e h1:UvSe12bq+Uj2hWd8aOlwPmoZ+CITRFrdit+sDGfAg8U= +github.com/jedisct1/go-minisign v0.0.0-20190909160543-45766022959e/go.mod h1:G1CVv03EnqU1wYL2dFwXxW2An0az9JTl/ZsqXQeBlkU= 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/jessevdk/go-flags v1.5.0 h1:1jKYvbxEjfUl0fmqTCOfonvskHHXMjBySTLW4y9LFvc= @@ -895,22 +1014,31 @@ github.com/julz/importas v0.1.0 h1:F78HnrsjY3cR7j0etXy5+TU1Zuy7Xt08X/1aJnH5xXY= github.com/julz/importas v0.1.0/go.mod h1:oSFU2R4XK/P7kNBrnL/FEQlDGN1/6WoxXEjSSXO0DV0= github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5 h1:PJr+ZMXIecYc1Ey2zucXdR73SMBtgjPgwa31099IMv0= github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= +github.com/junk1tm/musttag v0.5.0 h1:bV1DTdi38Hi4pG4OVWa7Kap0hi0o7EczuK6wQt9zPOM= +github.com/junk1tm/musttag v0.5.0/go.mod h1:PcR7BA+oREQYvHwgjIDmw3exJeds5JzRcvEJTfjrA0M= github.com/karalabe/usb v0.0.2 h1:M6QQBNxF+CQ8OFvxrT90BA0qBOXymndZnk5q235mFc4= +github.com/karalabe/usb v0.0.2/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/kisielk/errcheck v1.6.2 h1:uGQ9xI8/pgc9iOoCe7kWQgRE6SBTrCGmTSf0LrEtY7c= github.com/kisielk/errcheck v1.6.2/go.mod h1:nXw/i/MfnvRHqXa7XXmQMUB0oNFGuBrNI8d8NLy0LPw= +github.com/kisielk/errcheck v1.6.3 h1:dEKh+GLHcWm2oN34nMvDzn1sqI0i0WxPvrgiJA5JuM8= +github.com/kisielk/errcheck v1.6.3/go.mod h1:nXw/i/MfnvRHqXa7XXmQMUB0oNFGuBrNI8d8NLy0LPw= github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg= github.com/kkHAIKE/contextcheck v1.1.3 h1:l4pNvrb8JSwRd51ojtcOxOeHJzHek+MtOyXbaR0uvmw= github.com/kkHAIKE/contextcheck v1.1.3/go.mod h1:PG/cwd6c0705/LM0KTr1acO2gORUxkSVWyLJOFW5qoo= +github.com/kkHAIKE/contextcheck v1.1.4 h1:B6zAaLhOEEcjvUgIYEqystmnFk1Oemn8bvJhbt0GMb8= +github.com/kkHAIKE/contextcheck v1.1.4/go.mod h1:1+i/gWqokIa+dm31mqGLZhZJ7Uh44DJGZVmr6QRBNJg= github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23 h1:FOOIBWrEkLgmlgGfMuZT83xIwfPDxEI2OHu6xUmJMFE= github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= github.com/klauspost/asmfmt v1.3.2 h1:4Ri7ox3EwapiOjCki+hw14RyKk201CN4rzyCJRFLpK4= +github.com/klauspost/asmfmt v1.3.2/go.mod h1:AG8TuvYojzulgDAMCnYn50l/5QV3Bs/tp6j0HLHbNSE= github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5 h1:2U0HzY8BJ8hVwDKIzp7y4voR9CX/nvcfymLmg2UiOio= github.com/klauspost/pgzip v1.2.5 h1:qnWYvvKqedOF2ulHpMG72XQol4ILEJ8k2wwRl/Km8oE= github.com/klauspost/pgzip v1.2.5/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/konsorten/go-windows-terminal-sequences v1.0.3 h1:CE8S1cTafDpPvMhIxNJKvHsGVBgn1xWYf1NbHQhywc8= github.com/koron/go-ssdp v0.0.3 h1:JivLMY45N76b4p/vsWGOKewBQu6uf39y8l+AQ7sDKx8= +github.com/koron/go-ssdp v0.0.3/go.mod h1:b2MxI6yh02pKrsyNoQUsk4+YNikaGhe4894J+Q5lDvA= github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515 h1:T+h1c/A9Gawja4Y9mFVWj2vyii2bbUNDw3kt9VxK2EY= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= @@ -921,30 +1049,50 @@ github.com/kulti/thelper v0.6.3/go.mod h1:DsqKShOvP40epevkFrvIwkCMNYxMeTNjdWL4dq github.com/kunwardeep/paralleltest v1.0.6 h1:FCKYMF1OF2+RveWlABsdnmsvJrei5aoyZoaGS+Ugg8g= github.com/kunwardeep/paralleltest v1.0.6/go.mod h1:Y0Y0XISdZM5IKm3TREQMZ6iteqn1YuwCsJO/0kL9Zes= 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/kyoh86/exportloopref v0.1.8 h1:5Ry/at+eFdkX9Vsdw3qU4YkvGtzuVfzT4X7S77LoN/M= github.com/kyoh86/exportloopref v0.1.8/go.mod h1:1tUcJeiioIs7VWe5gcOObrux3lb66+sBqGZrRkMwPgg= +github.com/kyoh86/exportloopref v0.1.11 h1:1Z0bcmTypkL3Q4k+IDHMWTcnCliEZcaPiIe0/ymEyhQ= +github.com/kyoh86/exportloopref v0.1.11/go.mod h1:qkV4UF1zGl6EkF1ox8L5t9SwyeBAZ3qLMd6up458uqA= +github.com/larry0x/simapp v0.0.0-20230527213943-e57d94ffca4c/go.mod h1:dPMXlnAbUE79idlpKD0z01+vBVvTiKceZZHztq2B34c= github.com/ldez/gomoddirectives v0.2.3 h1:y7MBaisZVDYmKvt9/l1mjNCiSA1BVn34U0ObUcJwlhA= github.com/ldez/gomoddirectives v0.2.3/go.mod h1:cpgBogWITnCfRq2qGoDkKMEVSaarhdBr6g8G04uz6d0= github.com/ldez/tagliatelle v0.3.1 h1:3BqVVlReVUZwafJUwQ+oxbx2BEX2vUG4Yu/NOfMiKiM= github.com/ldez/tagliatelle v0.3.1/go.mod h1:8s6WJQwEYHbKZDsp/LjArytKOG8qaMrKQQ3mFukHs88= +github.com/ldez/tagliatelle v0.4.0 h1:sylp7d9kh6AdXN2DpVGHBRb5guTVAgOxqNGhbqc4b1c= +github.com/ldez/tagliatelle v0.4.0/go.mod h1:mNtTfrHy2haaBAw+VT7IBV6VXBThS7TCreYWbBcJ87I= github.com/leonklingele/grouper v1.1.0 h1:tC2y/ygPbMFSBOs3DcyaEMKnnwH7eYKzohOtRrf0SAg= github.com/leonklingele/grouper v1.1.0/go.mod h1:uk3I3uDfi9B6PeUjsCKi6ndcf63Uy7snXgR4yDYQVDY= +github.com/leonklingele/grouper v1.1.1 h1:suWXRU57D4/Enn6pXR0QVqqWWrnJ9Osrz+5rjt8ivzU= +github.com/leonklingele/grouper v1.1.1/go.mod h1:uk3I3uDfi9B6PeUjsCKi6ndcf63Uy7snXgR4yDYQVDY= github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/libp2p/go-cidranger v1.1.0 h1:ewPN8EZ0dd1LSnrtuwd4709PXVcITVeuwbag38yPW7c= +github.com/libp2p/go-cidranger v1.1.0/go.mod h1:KWZTfSr+r9qEo9OkI9/SIEeAtw+NNoU0dXIXt15Okic= github.com/libp2p/go-flow-metrics v0.1.0 h1:0iPhMI8PskQwzh57jB9WxIuIOQ0r+15PChFGkx3Q3WM= +github.com/libp2p/go-flow-metrics v0.1.0/go.mod h1:4Xi8MX8wj5aWNDAZttg6UPmc0ZrnFNsMtpsYUClFtro= github.com/libp2p/go-libp2p-asn-util v0.2.0 h1:rg3+Os8jbnO5DxkC7K/Utdi+DkY3q/d1/1q+8WeNAsw= +github.com/libp2p/go-libp2p-asn-util v0.2.0/go.mod h1:WoaWxbHKBymSN41hWSq/lGKJEca7TNm58+gGJi2WsLI= github.com/libp2p/go-libp2p-testing v0.11.0 h1:+R7FRl/U3Y00neyBSM2qgDzqz3HkWH24U9nMlascHL4= +github.com/libp2p/go-libp2p-testing v0.11.0/go.mod h1:qG4sF27dfKFoK9KlVzK2y52LQKhp0VEmLjV5aDqr1Hg= github.com/libp2p/go-mplex v0.7.0 h1:BDhFZdlk5tbr0oyFq/xv/NPGfjbnrsDam1EvutpBDbY= +github.com/libp2p/go-mplex v0.7.0/go.mod h1:rW8ThnRcYWft/Jb2jeORBmPd6xuG3dGxWN/W168L9EU= github.com/libp2p/go-msgio v0.2.0 h1:W6shmB+FeynDrUVl2dgFQvzfBZcXiyqY4VmpQLu9FqU= +github.com/libp2p/go-msgio v0.2.0/go.mod h1:dBVM1gW3Jk9XqHkU4eKdGvVHdLa51hoGfll6jMJMSlY= github.com/libp2p/go-nat v0.1.0 h1:MfVsH6DLcpa04Xr+p8hmVRG4juse0s3J8HyNWYHffXg= +github.com/libp2p/go-nat v0.1.0/go.mod h1:X7teVkwRHNInVNWQiO/tAiAVRwSr5zoRz4YSTC3uRBM= github.com/libp2p/go-netroute v0.2.0 h1:0FpsbsvuSnAhXFnCY0VLFbJOzaK0VnP0r1QT/o4nWRE= +github.com/libp2p/go-netroute v0.2.0/go.mod h1:Vio7LTzZ+6hoT4CMZi5/6CpY3Snzh2vgZhWgxMNwlQI= github.com/libp2p/go-reuseport v0.2.0 h1:18PRvIMlpY6ZK85nIAicSBuXXvrYoSw3dsBAR7zc560= +github.com/libp2p/go-reuseport v0.2.0/go.mod h1:bvVho6eLMm6Bz5hmU0LYN3ixd3nPPvtIlaURZZgOY4k= github.com/libp2p/go-yamux/v3 v3.1.2 h1:lNEy28MBk1HavUAlzKgShp+F6mn/ea1nDYWftZhFW9Q= +github.com/libp2p/go-yamux/v3 v3.1.2/go.mod h1:jeLEQgLXqE2YqX1ilAClIfCMDY+0uXQUKmmb/qp0gT4= github.com/libp2p/zeroconf/v2 v2.2.0 h1:Cup06Jv6u81HLhIj1KasuNM/RHHrJ8T7wOTS4+Tv53Q= +github.com/libp2p/zeroconf/v2 v2.2.0/go.mod h1:fuJqLnUwZTshS3U/bMRJ3+ow/v9oid1n0DmyYyNO1Xs= github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743 h1:143Bb8f8DuGWck/xpNUOckBVYfFbBTnLevfRZ1aVVqo= github.com/lightstep/lightstep-tracer-go v0.18.1 h1:vi1F1IQ8N7hNWytK9DpJsUfQhGuNSc19z330K6vl4zk= github.com/linxGnu/grocksdb v1.7.10 h1:dz7RY7GnFUA+GJO6jodyxgkUeGMEkPp3ikt9hAcNGEw= github.com/lucas-clemente/quic-go v0.28.1 h1:Uo0lvVxWg5la9gflIF9lwa39ONq85Xq2D91YNEIslzU= +github.com/lucas-clemente/quic-go v0.28.1/go.mod h1:oGz5DKK41cJt5+773+BSO9BXDsREY4HLf7+0odGAPO0= github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= github.com/lufeee/execinquery v1.2.1 h1:hf0Ems4SHcUGBxpGN7Jz78z1ppVkP/837ZlETPCEtOM= @@ -952,6 +1100,7 @@ github.com/lufeee/execinquery v1.2.1/go.mod h1:EC7DrEKView09ocscGHC+apXMIaorh4xq github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4= github.com/lyft/protoc-gen-star v0.6.0/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= github.com/lyft/protoc-gen-star/v2 v2.0.1 h1:keaAo8hRuAT0O3DfJ/wM3rufbAjGeJ1lAtWZHDjKGB0= +github.com/lyft/protoc-gen-star/v2 v2.0.1/go.mod h1:RcCdONR2ScXaYnQC5tUzxzlpA3WVYF7/opLeUgcQs/o= github.com/lyft/protoc-gen-validate v0.0.13 h1:KNt/RhmQTOLr7Aj8PsJ7mTronaFyx80mRTT9qF261dA= github.com/magefile/mage v1.14.0 h1:6QDX3g6z1YvJ4olPhT1wksUcSa/V0a1B+pJb73fBjyo= github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= @@ -959,13 +1108,22 @@ github.com/maratori/testableexamples v1.0.0 h1:dU5alXRrD8WKSjOUnmJZuzdxWOEQ57+7s github.com/maratori/testableexamples v1.0.0/go.mod h1:4rhjL1n20TUTT4vdh3RDqSizKLyXp7K2u6HgraZCGzE= github.com/maratori/testpackage v1.1.0 h1:GJY4wlzQhuBusMF1oahQCBtUV/AQ/k69IZ68vxaac2Q= github.com/maratori/testpackage v1.1.0/go.mod h1:PeAhzU8qkCwdGEMTEupsHJNlQu2gZopMC6RjbhmHeDc= +github.com/maratori/testpackage v1.1.1 h1:S58XVV5AD7HADMmD0fNnziNHqKvSdDuEKdPD1rNTU04= +github.com/maratori/testpackage v1.1.1/go.mod h1:s4gRK/ym6AMrqpOa/kEbQTV4Q4jb7WeLZzVhVVVOQMc= github.com/marten-seemann/qtls-go1-16 v0.1.5 h1:o9JrYPPco/Nukd/HpOHMHZoBDXQqoNtUCmny98/1uqQ= +github.com/marten-seemann/qtls-go1-16 v0.1.5/go.mod h1:gNpI2Ol+lRS3WwSOtIUUtRwZEQMXjYK+dQSBFbethAk= github.com/marten-seemann/qtls-go1-17 v0.1.2 h1:JADBlm0LYiVbuSySCHeY863dNkcpMmDR7s0bLKJeYlQ= +github.com/marten-seemann/qtls-go1-17 v0.1.2/go.mod h1:C2ekUKcDdz9SDWxec1N/MvcXBpaX9l3Nx67XaR84L5s= github.com/marten-seemann/qtls-go1-18 v0.1.2 h1:JH6jmzbduz0ITVQ7ShevK10Av5+jBEKAHMntXmIV7kM= +github.com/marten-seemann/qtls-go1-18 v0.1.2/go.mod h1:mJttiymBAByA49mhlNZZGrH5u1uXYZJ+RW28Py7f4m4= github.com/marten-seemann/qtls-go1-19 v0.1.0 h1:rLFKD/9mp/uq1SYGYuVZhm83wkmU95pK5df3GufyYYU= +github.com/marten-seemann/qtls-go1-19 v0.1.0/go.mod h1:5HTDWtVudo/WFsHKRNuOhWlbdjrfs5JHrYb0wIJqGpI= github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd h1:br0buuQ854V8u83wA0rVZ8ttrq5CpaPZdvrK0LP2lOk= +github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd/go.mod h1:QuCEs1Nt24+FYQEqAAncTDPJIuGs+LxK1MCiFL25pMU= github.com/matoous/godox v0.0.0-20210227103229-6504466cf951 h1:pWxk9e//NbPwfxat7RXkts09K+dEBJWakUWwICVqYbA= github.com/matoous/godox v0.0.0-20210227103229-6504466cf951/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= +github.com/matoous/godox v0.0.0-20230222163458-006bad1f9d26 h1:gWg6ZQ4JhDfJPqlo2srm/LN17lpybq15AryXIRcWYLE= +github.com/matoous/godox v0.0.0-20230222163458-006bad1f9d26/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA= github.com/matryer/is v1.4.0 h1:sosSmIWwkYITGrxZ25ULNDeKiMNzFSr4V/eqBQP0PeE= github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= @@ -988,15 +1146,23 @@ github.com/mbilski/exhaustivestruct v1.2.0/go.mod h1:OeTBVxQWoEmB2J2JCHmXWPJ0aks github.com/mgechev/dots v0.0.0-20210922191527-e955255bf517 h1:zpIH83+oKzcpryru8ceC6BxnoG8TBrhgAvRg8obzup0= github.com/mgechev/revive v1.2.4 h1:+2Hd/S8oO2H0Ikq2+egtNwQsVhAeELHjxjIUFX5ajLI= github.com/mgechev/revive v1.2.4/go.mod h1:iAWlQishqCuj4yhV24FTnKSXGpbAA+0SckXB8GQMX/Q= +github.com/mgechev/revive v1.3.1 h1:OlQkcH40IB2cGuprTPcjB0iIUddgVZgGmDX3IAMR8D4= +github.com/mgechev/revive v1.3.1/go.mod h1:YlD6TTWl2B8A103R9KWJSPVI9DrEf+oqr15q21Ld+5I= github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= github.com/miekg/dns v1.1.50 h1:DQUfb9uc6smULcREF09Uc+/Gd46YWqJd5DbpPE9xkcA= +github.com/miekg/dns v1.1.50/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7XnME= github.com/miekg/pkcs11 v1.1.1 h1:Ugu9pdy6vAYku5DEpVWVFPYnzV+bxB+iRdbuFSu7TvU= github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b h1:z78hV3sbSMAUoyUMM0I83AUIT6Hu17AWfgjzIbtrYFc= +github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b/go.mod h1:lxPUiZwKoFL8DUUmalo2yJJUCxbPKtm8OKfqr2/FTNU= github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc h1:PTfri+PuQmWDqERdnNMiD9ZejrlswWrCpBEZgWOiTrc= +github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc/go.mod h1:cGKTAVKx4SxOuR/czcZ/E2RSJ3sfHs8FpHhQ5CWMf9s= github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8 h1:AMFGa4R4MiIpspGNG7Z948v4n35fFGB3RR3G/ry4FWs= +github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8/go.mod h1:mC1jAcsrzbxHt8iiaC+zU4b1ylILSosueou12R++wfY= github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= +github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3 h1:+n/aFZefKZp7spd8DFdX7uMikMLXX4oubIzJF4kv/wI= +github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3/go.mod h1:RagcQ7I8IeTMnF8JTXieKnO4Z6JCsikNEzj0DwauVzE= github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible h1:aKW/4cBs+yK6gpqU3K/oIwk9Q/XICqd3zOX/UFuvqmk= github.com/mitchellh/cli v1.0.0 h1:iGBIsUe3+HZ/AD/Vd7DErOt5sU9fa8Uj7A2s1aggv1Y= github.com/mitchellh/cli v1.1.0 h1:tEElEatulEHDeedTxwckzyYMA5c86fbmNIUL1hBIiTg= @@ -1009,6 +1175,7 @@ github.com/mitchellh/hashstructure/v2 v2.0.2 h1:vGKWl0YJqUNxE8d+h8f6NJLcCJrgbhC4 github.com/mitchellh/iochan v1.0.0 h1:C+X3KsSTLFVBr/tK1eYN/vs4rJcvsiLU338UhYPJWeY= github.com/mitchellh/mapstructure v1.4.1/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/buildkit v0.10.4 h1:FvC+buO8isGpUFZ1abdSLdGHZVqg9sqI4BbFL8tlzP4= github.com/moby/buildkit v0.10.4/go.mod h1:Yajz9vt1Zw5q9Pp4pdb3TCSUXJBIroIQGQ3TTs/sLug= github.com/moby/locker v1.0.1 h1:fOXqR41zeveg4fFODix+1Ch4mj/gT0NE1XJbp/epuBg= @@ -1021,31 +1188,46 @@ github.com/moby/sys/symlink v0.2.0 h1:tk1rOM+Ljp0nFmfOIBtlV3rTDlWOwFRhjEeAhZB0nZ github.com/moby/term v0.0.0-20220808134915-39b0c02b01ae/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw= github.com/moricho/tparallel v0.2.1 h1:95FytivzT6rYzdJLdtfn6m1bfFJylOJK41+lgv/EHf4= github.com/moricho/tparallel v0.2.1/go.mod h1:fXEIZxG2vdfl0ZF8b42f5a78EhjjD5mX8qUplsoSU4k= +github.com/moricho/tparallel v0.3.1 h1:fQKD4U1wRMAYNngDonW5XupoB/ZGJHdpzrWqgyg9krA= +github.com/moricho/tparallel v0.3.1/go.mod h1:leENX2cUv7Sv2qDgdi0D0fCftN8fRC67Bcn8pqzeYNI= github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= github.com/mozilla/tls-observatory v0.0.0-20210609171429-7bc42856d2e5 h1:0KqC6/sLy7fDpBdybhVkkv4Yz+PmB7c9Dz9z3dLW804= github.com/mrunalp/fileutils v0.5.0 h1:NKzVxiH7eSk+OQ4M+ZYW1K6h27RUV3MI6NUTsHhU6Z4= github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ= github.com/multiformats/go-multiaddr-dns v0.3.1 h1:QgQgR+LQVt3NPTjbrLLpsaT2ufAA2y0Mkk+QRVJbW3A= +github.com/multiformats/go-multiaddr-dns v0.3.1/go.mod h1:G/245BRQ6FJGmryJCrOuTdB37AMA5AMOVuO6NY3JwTk= github.com/multiformats/go-multiaddr-fmt v0.1.0 h1:WLEFClPycPkp4fnIzoFoV9FVd49/eQsuaL3/CWe167E= +github.com/multiformats/go-multiaddr-fmt v0.1.0/go.mod h1:hGtDIW4PU4BqJ50gW2quDuPVjyWNZxToGUh/HwTZYJo= github.com/multiformats/go-multistream v0.3.3 h1:d5PZpjwRgVlbwfdTDjife7XszfZd8KYWfROYFlGcR8o= +github.com/multiformats/go-multistream v0.3.3/go.mod h1:ODRoqamLUsETKS9BNcII4gcRsJBU5VAwRIv7O39cEXg= github.com/mwitkow/grpc-proxy v0.0.0-20181017164139-0f1106ef9c76 h1:0xuRacu/Zr+jX+KyLLPPktbwXqyOvnOPUQmMLzX1jxU= github.com/nakabonne/nestif v0.3.1 h1:wm28nZjhQY5HyYPx+weN3Q65k6ilSBxDb8v5S81B81U= github.com/nakabonne/nestif v0.3.1/go.mod h1:9EtoZochLn5iUprVDmDjqGKPofoUEBL8U4Ngq6aY7OE= github.com/naoina/go-stringutil v0.1.0 h1:rCUeRUHjBjGTSHl0VC00jUPLz8/F9dDzYI70Hzifhks= +github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416 h1:shk/vn9oCoOTmwcouEdwIeOtOGA/ELRUw/GwvxwfT+0= +github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= github.com/nats-io/jwt v0.3.2 h1:+RB5hMpXUUA2dfxuhBTEkMOrYmM+gKIZYS1KjSostMI= github.com/nats-io/jwt/v2 v2.0.3 h1:i/O6cmIsjpcQyWDYNcq2JyZ3/VTF8SJ4JWluI5OhpvI= +github.com/nats-io/jwt/v2 v2.0.3/go.mod h1:VRP+deawSXyhNjXmxPCHskrR6Mq50BqpEI5SEcNiGlY= github.com/nats-io/nats-server/v2 v2.5.0 h1:wsnVaaXH9VRSg+A2MVg5Q727/CqxnmPLGFQ3YZYKTQg= +github.com/nats-io/nats-server/v2 v2.5.0/go.mod h1:Kj86UtrXAL6LwYRA6H4RqzkHhK0Vcv2ZnKD5WbQ1t3g= github.com/nats-io/nats.go v1.12.1 h1:+0ndxwUPz3CmQ2vjbXdkC1fo3FdiOQDim4gl3Mge8Qo= +github.com/nats-io/nats.go v1.12.1/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/zMCxRT6w= github.com/nats-io/nkeys v0.3.0 h1:cgM5tL53EvYRU+2YLXIK0G2mJtK12Ft9oeooSZMA2G8= +github.com/nats-io/nkeys v0.3.0/go.mod h1:gvUNGjVcM2IPr5rCsRsC6Wb3Hr2CQAm08dsxtV6A5y4= github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw= github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354 h1:4kuARK6Y6FxaNu/BnU2OAaLF86eTVhP2hjTB6iMvItA= github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354/go.mod h1:KSVJerMDfblTH7p5MZaTt+8zaT2iEk3AkVb9PQdZuE8= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= github.com/nishanths/exhaustive v0.8.3 h1:pw5O09vwg8ZaditDp/nQRqVnrMczSJDxRDJMowvhsrM= github.com/nishanths/exhaustive v0.8.3/go.mod h1:qj+zJJUgJ76tR92+25+03oYUhzF4R7/2Wk7fGTfCHmg= +github.com/nishanths/exhaustive v0.9.5 h1:TzssWan6orBiLYVqewCG8faud9qlFntJE30ACpzmGME= +github.com/nishanths/exhaustive v0.9.5/go.mod h1:IbwrGdVMizvDcIxPYGVdQn5BqWJaOwpCvg4RGb8r/TA= github.com/nishanths/predeclared v0.2.2 h1:V2EPdZPliZymNAn79T8RkNApBjMmVKh5XRpLm/w98Vk= github.com/nishanths/predeclared v0.2.2/go.mod h1:RROzoN6TnGQupbC+lqggsOlcgysk3LMK/HI84Mp280c= +github.com/nunnatsa/ginkgolinter v0.9.0 h1:Sm0zX5QfjJzkeCjEp+t6d3Ha0jwvoDjleP9XCsrEzOA= +github.com/nunnatsa/ginkgolinter v0.9.0/go.mod h1:FHaMLURXP7qImeH6bvxWJUpyH+2tuqe5j4rW1gxJRmI= github.com/oklog/oklog v0.3.2 h1:wVfs8F+in6nTBMkA7CbRw+zZMIB7nNM825cM1wuzoTk= github.com/oklog/run v1.0.0 h1:Ru7dDtJNOyC66gQ5dQmaCa0qIsAUFY3sFpK1Xk8igrw= github.com/oklog/ulid/v2 v2.1.0 h1:+9lhoxAP56we25tyYETBBY1YLA2SaoLvUFgrP2miPJU= @@ -1058,6 +1240,7 @@ github.com/onsi/gomega v1.20.0/go.mod h1:DtrZpjmvpn2mPm4YWQa0/ALMDj9v4YxLgojwPeR github.com/op/go-logging v0.0.0-20160315200505-970db520ece7 h1:lDH9UUVJtmYCjyT0CI4q8xvlXPxeZ0gYCVvWbmPlp88= github.com/opencontainers/runc v1.1.3/go.mod h1:1J5XiS+vdZ3wCyZybsuxXZWGrgSr8fFJHLXuG2PsnNg= github.com/opencontainers/runtime-spec v1.0.2 h1:UfAcuLBJB9Coz72x1hgl8O5RVzTdNiaglX6v2DM6FI0= +github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417 h1:3snG66yBm59tKhhSPQrQ/0bCrv1LQbKt40LnUPiUxdc= github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opencontainers/selinux v1.10.0/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI= @@ -1068,6 +1251,7 @@ github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+ github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5 h1:ZCnq+JUrvXcDVhX/xRolRBZifmabN1HcS1wrPSvxhrU= github.com/openzipkin/zipkin-go v0.2.5 h1:UwtQQx2pyPIgWYHRg+epgdx1/HnBQTgN3/oIYEJTQzU= +github.com/openzipkin/zipkin-go v0.2.5/go.mod h1:KpXfKdgRDnnhsxw4pNIH9Md5lyFqKUa4YDFlwRYAMyE= github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= github.com/ory/dockertest/v3 v3.9.1 h1:v4dkG+dlu76goxMiTT2j8zV7s4oPPEppKT8K8p2f1kY= github.com/otiai10/copy v1.2.0 h1:HvG945u96iNadPoG2/Ja2+AUJeW5YuFQMixq9yirC+k= @@ -1080,17 +1264,21 @@ github.com/otiai10/mint v1.3.1 h1:BCmzIS3n71sGfHB5NMNDB3lHYPz8fWSkCAErHed//qc= github.com/otiai10/mint v1.3.1/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= github.com/pact-foundation/pact-go v1.0.4 h1:OYkFijGHoZAYbOIb1LWXrwKQbMMRUv1oQ89blD2Mh2Q= github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 h1:onHthvaw9LFnH4t2DcNVpwGmV9E1BkGknEliJkfwQj0= +github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58/go.mod h1:DXv8WO4yhMYhSNPKjeNKa5WY9YCIEBRbNzFFPJbWO6Y= github.com/pborman/uuid v1.2.0 h1:J7Q5mO4ysT1dv8hyrUGHb9+ooztCXu1D8MY8DZYsu3g= github.com/pelletier/go-toml/v2 v2.0.5/go.mod h1:OMHamSCAODeSsVrwwvcJOaoN0LIUIaFVNZzmWyNfXas= github.com/pelletier/go-toml/v2 v2.0.6/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek= github.com/performancecopilot/speed v3.0.0+incompatible h1:2WnRzIquHa5QxaJKShDkLM+sc0JPuwhXzK8OYOyt3Vg= github.com/performancecopilot/speed/v4 v4.0.0 h1:VxEDCmdkfbQYDlcr/GC9YoN9PQ6p8ulk9xVsepYy9ZY= +github.com/performancecopilot/speed/v4 v4.0.0/go.mod h1:qxrSyuDGrTOWfV+uKRFhfxw6h/4HXRGUiZiufxo49BM= 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/petermattis/goid v0.0.0-20221215004737-a150e88a970d/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d h1:CdDQnGF8Nq9ocOS/xlSptM1N3BbrA6/kmaep5ggwaIA= github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d/go.mod h1:3OzsM7FXDQlpCiw2j81fOmAwQLnZnLGXVKUzeKQXIAw= github.com/pierrec/lz4 v2.0.5+incompatible h1:2xWsjqPFWcplujydGg4WmhC/6fZqK42wMM8aXeqhl0I= github.com/pierrec/lz4/v4 v4.1.15 h1:MO0/ucJhngq7299dKLwIMtgTfbkoSPF6AoMYDd8Q4q0= +github.com/pierrec/lz4/v4 v4.1.15/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pjbgf/sha1cd v0.2.3 h1:uKQP/7QOzNtKYH7UTohZLcjF5/55EnTw0jO/Ru4jZwI= github.com/pjbgf/sha1cd v0.2.3/go.mod h1:HOK9QrgzdHpbc2Kzip0Q1yi3M2MFGPADtR6HjG65m5M= github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU= @@ -1108,6 +1296,8 @@ github.com/pointlander/peg v1.0.1 h1:mgA/GQE8TeS9MdkU6Xn6iEzBmQUQCNuWD7rHCK6Mjs0 github.com/pointlander/peg v1.0.1/go.mod h1:5hsGDQR2oZI4QoWz0/Kdg3VSVEC31iJw/b7WjqCBGRI= github.com/polyfloyd/go-errorlint v1.0.5 h1:AHB5JRCjlmelh9RrLxT9sgzpalIwwq4hqE8EkwIwKdY= github.com/polyfloyd/go-errorlint v1.0.5/go.mod h1:APVvOesVSAnne5SClsPxPdfvZTVDojXh1/G3qb5wjGI= +github.com/polyfloyd/go-errorlint v1.4.0 h1:b+sQ5HibPIAjEZwtuwU8Wz/u0dMZ7YL+bk+9yWyHVJk= +github.com/polyfloyd/go-errorlint v1.4.0/go.mod h1:qJCkPeBn+0EXkdKTrUCcuFStM2xrDKfxI3MGLXPexUs= github.com/posener/complete v1.1.1 h1:ccV59UEOTzVDnDUEFdT95ZzHVZ+5+158q8+SJb2QV5w= github.com/posener/complete v1.2.3 h1:NP0eAhjcjImqslEwo/1hq7gpajME0fTLTezBKDqfXqo= github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= @@ -1123,9 +1313,12 @@ github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1 github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= github.com/prometheus/tsdb v0.7.1 h1:YZcsG11NqnK4czYLrWd9mpEuAJIHVQLwdrleYfszMAA= +github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/quasilyte/go-ruleguard v0.3.1-0.20210203134552-1b5a410e1cc8/go.mod h1:KsAh3x0e7Fkpgs+Q9pNLS5XpFSvYCEVl5gP9Pp1xp30= github.com/quasilyte/go-ruleguard v0.3.18 h1:sd+abO1PEI9fkYennwzHn9kl3nqP6M5vE7FiOzZ+5CE= github.com/quasilyte/go-ruleguard v0.3.18/go.mod h1:lOIzcYlgxrQ2sGJ735EHXmf/e9MJ516j16K/Ifcttvs= +github.com/quasilyte/go-ruleguard v0.3.19 h1:tfMnabXle/HzOb5Xe9CUZYWXKfkS1KwRmZyPmD9nVcc= +github.com/quasilyte/go-ruleguard v0.3.19/go.mod h1:lHSn69Scl48I7Gt9cX3VrbsZYvYiBYszZOZW4A+oTEw= github.com/quasilyte/go-ruleguard/dsl v0.3.0/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= github.com/quasilyte/go-ruleguard/dsl v0.3.21 h1:vNkC6fC6qMLzCOGbnIHOd5ixUGgTbp3Z4fGnUgULlDA= github.com/quasilyte/go-ruleguard/dsl v0.3.21/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= @@ -1134,11 +1327,17 @@ github.com/quasilyte/go-ruleguard/rules v0.0.0-20211022131956-028d6511ab71 h1:CN github.com/quasilyte/go-ruleguard/rules v0.0.0-20211022131956-028d6511ab71/go.mod h1:4cgAphtvu7Ftv7vOT2ZOYhC6CvBxZixcasr8qIOTA50= github.com/quasilyte/gogrep v0.0.0-20220828223005-86e4605de09f h1:6Gtn2i04RD0gVyYf2/IUMTIs+qYleBt4zxDqkLTcu4U= github.com/quasilyte/gogrep v0.0.0-20220828223005-86e4605de09f/go.mod h1:Cm9lpz9NZjEoL1tgZ2OgeUKPIxL1meE7eo60Z6Sk+Ng= +github.com/quasilyte/gogrep v0.5.0 h1:eTKODPXbI8ffJMN+W2aE0+oL0z/nh8/5eNdiO34SOAo= +github.com/quasilyte/gogrep v0.5.0/go.mod h1:Cm9lpz9NZjEoL1tgZ2OgeUKPIxL1meE7eo60Z6Sk+Ng= github.com/quasilyte/regex/syntax v0.0.0-20200407221936-30656e2c4a95 h1:L8QM9bvf68pVdQ3bCFZMDmnt9yqcMBro1pC7F+IPYMY= github.com/quasilyte/regex/syntax v0.0.0-20200407221936-30656e2c4a95/go.mod h1:rlzQ04UMyJXu/aOvhd8qT+hvDrFpiwqp8MRXDY9szc0= +github.com/quasilyte/regex/syntax v0.0.0-20210819130434-b3f0c404a727 h1:TCg2WBOl980XxGFEZSS6KlBGIV0diGdySzxATTWoqaU= +github.com/quasilyte/regex/syntax v0.0.0-20210819130434-b3f0c404a727/go.mod h1:rlzQ04UMyJXu/aOvhd8qT+hvDrFpiwqp8MRXDY9szc0= github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567 h1:M8mH9eK4OUR4lu7Gd+PU1fV2/qnDNfzT635KRSObncs= github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567/go.mod h1:DWNGW8A4Y+GyBgPuaQJuWiy0XYftx4Xm/y5Jqk9I6VQ= github.com/raulk/go-watchdog v1.3.0 h1:oUmdlHxdkXRJlwfG0O9omj8ukerm8MEQavSiDTEtBsk= +github.com/raulk/go-watchdog v1.3.0/go.mod h1:fIvOnLbF0b0ZwkB9YU4mOW9Did//4vPZtDqv66NfsMU= +github.com/regen-network/gocuke v0.6.2/go.mod h1:zYaqIHZobHyd0xOrHGPQjbhGJsuZ1oElx150u2o1xuk= github.com/remyoudompheng/go-dbus v0.0.0-20121104212943-b7232d34b1d5 h1:CvqZS4QYHBRvx7AeFdimd16HCbLlYsvQMcKDACpJW/c= github.com/remyoudompheng/go-liblzma v0.0.0-20190506200333-81bf2d431b96 h1:J8J/cgLDRuqXJnwIrRDBvtl+LLsdg7De74znW/BRRq4= github.com/remyoudompheng/go-misc v0.0.0-20190427085024-2d6ac652a50e h1:eTWZyPUnHcuGRDiryS/l2I7FfKjbU3IBx3IjqHPxuKU= @@ -1148,6 +1347,7 @@ github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJ github.com/rivo/uniseg v0.4.3 h1:utMvzDsuh3suAEnhH0RdHmoPbU648o6CvXxTx4SBMOw= github.com/rivo/uniseg v0.4.3/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rjeczalik/notify v0.9.1 h1:CLCKso/QK1snAlnhNR/CNvNiFU2saUtjV0bx3EwNeCE= +github.com/rjeczalik/notify v0.9.1/go.mod h1:rKwnCoCGeuQnwBtTSPL9Dad03Vh2n40ePRrjvIXnJho= github.com/rogpeppe/fastuuid v1.2.0 h1:Ppwyp6VYCF1nvBTXL3trRso7mXMlRrw9ooo375wvi2s= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rs/cors v1.8.2/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= @@ -1155,11 +1355,16 @@ github.com/rs/xid v1.3.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= github.com/rs/xid v1.4.0 h1:qd7wPTDkN6KQx2VmMBLrpHkiyQwgFXRnkOLacUiaSNY= github.com/rs/zerolog v1.27.0/go.mod h1:7frBqO0oezxmnO7GF86FY++uy8I0Tk/If5ni1G9Qc0U= github.com/russross/blackfriday v1.6.0 h1:KqfZb0pUVN2lYqZUYRddxF4OR8ZMURnJIG5Y3VRLtww= +github.com/russross/blackfriday v1.6.0/go.mod h1:ti0ldHuxg49ri4ksnFxlkCfN+hvslNlmVHqNRXXJNAY= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/ryancurrah/gomodguard v1.2.4 h1:CpMSDKan0LtNGGhPrvupAoLeObRFjND8/tU1rEOtBp4= github.com/ryancurrah/gomodguard v1.2.4/go.mod h1:+Kem4VjWwvFpUJRJSwa16s1tBJe+vbv02+naTow2f6M= +github.com/ryancurrah/gomodguard v1.3.0 h1:q15RT/pd6UggBXVBuLps8BXRvl5GPBcwVA7BJHMLuTw= +github.com/ryancurrah/gomodguard v1.3.0/go.mod h1:ggBxb3luypPEzqVtq33ee7YSN35V28XeGnid8dnni50= github.com/ryanrolds/sqlclosecheck v0.3.0 h1:AZx+Bixh8zdUBxUA1NxbxVAS78vTPq4rCb8OUZI9xFw= github.com/ryanrolds/sqlclosecheck v0.3.0/go.mod h1:1gREqxyTGR3lVtpngyFo3hZAgk0KCtEdgEkHwDbigdA= +github.com/ryanrolds/sqlclosecheck v0.4.0 h1:i8SX60Rppc1wRuyQjMciLqIzV3xnoHB7/tXbr6RGYNI= +github.com/ryanrolds/sqlclosecheck v0.4.0/go.mod h1:TBRRjzL31JONc9i4XMinicuo+s+E8yKZ5FN8X3G6CKQ= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f h1:UFr9zpz4xgTnIE5yIMtWAMngCdZ9p/+q6lTbgelo80M= github.com/ryanuber/columnize v2.1.0+incompatible h1:j1Wcmh8OrK4Q7GXY+V7SVSY8nUWQxHW5TkBe7YUl+2s= github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= @@ -1168,10 +1373,14 @@ github.com/sagikazarmark/crypt v0.9.0/go.mod h1:RnH7sEhxfdnPm1z+XMgSLjWTEIjyK4z2 github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da h1:p3Vo3i64TCLY7gIfzeQaUJ+kppEO5WQG3cL8iE8tGHU= github.com/sanposhiho/wastedassign/v2 v2.0.6 h1:+6/hQIHKNJAUixEj6EmOngGIisyeI+T3335lYTyxRoA= github.com/sanposhiho/wastedassign/v2 v2.0.6/go.mod h1:KyZ0MWTwxxBmfwn33zh3k1dmsbF2ud9pAAGfoLfjhtI= +github.com/sanposhiho/wastedassign/v2 v2.0.7 h1:J+6nrY4VW+gC9xFzUc+XjPD3g3wF3je/NsJFwFK7Uxc= +github.com/sanposhiho/wastedassign/v2 v2.0.7/go.mod h1:KyZ0MWTwxxBmfwn33zh3k1dmsbF2ud9pAAGfoLfjhtI= github.com/sashamelentyev/interfacebloat v1.1.0 h1:xdRdJp0irL086OyW1H/RTZTr1h/tMEOsumirXcOJqAw= github.com/sashamelentyev/interfacebloat v1.1.0/go.mod h1:+Y9yU5YdTkrNvoX0xHc84dxiN1iBi9+G8zZIhPVoNjQ= github.com/sashamelentyev/usestdlibvars v1.20.0 h1:K6CXjqqtSYSsuyRDDC7Sjn6vTMLiSJa4ZmDkiokoqtw= github.com/sashamelentyev/usestdlibvars v1.20.0/go.mod h1:0GaP+ecfZMXShS0A94CJn6aEuPRILv8h/VuWI9n1ygg= +github.com/sashamelentyev/usestdlibvars v1.23.0 h1:01h+/2Kd+NblNItNeux0veSL5cBF1jbEOPrEhDzGYq0= +github.com/sashamelentyev/usestdlibvars v1.23.0/go.mod h1:YPwr/Y1LATzHI93CqoPUN/2BzGQ/6N/cl/KwgR0B/aU= github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I= @@ -1179,11 +1388,14 @@ github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646 h1:Rpf github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg= github.com/securego/gosec/v2 v2.13.1 h1:7mU32qn2dyC81MH9L2kefnQyRMUarfDER3iQyMHcjYM= github.com/securego/gosec/v2 v2.13.1/go.mod h1:EO1sImBMBWFjOTFzMWfTRrZW6M15gm60ljzrmy/wtHo= +github.com/securego/gosec/v2 v2.15.0 h1:v4Ym7FF58/jlykYmmhZ7mTm7FQvN/setNm++0fgIAtw= +github.com/securego/gosec/v2 v2.15.0/go.mod h1:VOjTrZOkUtSDt2QLSJmQBMWnvwiQPEjg0l+5juIqGk8= github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/serialx/hashring v0.0.0-20190422032157-8b2912629002 h1:ka9QPuQg2u4LGipiZGsgkg3rJCo4iIUCy75FddM0GRQ= github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c h1:W65qqJCIOVP4jpqPQ0YvHYKwcMEMVWIzWC5iNQQfBTU= github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c/go.mod h1:/PevMnwAxekIXwN8qQyfc5gl2NlkB3CQlkizAbOkeBs= +github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shirou/gopsutil/v3 v3.22.9 h1:yibtJhIVEMcdw+tCTbOPiF1VcsuDeTE4utJ8Dm4c5eA= github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e h1:MZM7FHLqUHYI0Y/mQAt3d2aYa0SiNms/hFqC9qJYolM= github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= @@ -1198,6 +1410,8 @@ github.com/sivchari/nosnakecase v1.7.0 h1:7QkpWIRMe8x25gckkFd2A5Pi6Ymo0qgr4JrhGt github.com/sivchari/nosnakecase v1.7.0/go.mod h1:CwDzrzPea40/GB6uynrNLiorAlgFRvRbFSgJx2Gs+QY= github.com/sivchari/tenv v1.7.0 h1:d4laZMBK6jpe5PWepxlV9S+LC0yXqvYHiq8E6ceoVVE= github.com/sivchari/tenv v1.7.0/go.mod h1:64yStXKSOxDfX47NlhVwND4dHwfZDdbp2Lyl018Icvg= +github.com/sivchari/tenv v1.7.1 h1:PSpuD4bu6fSmtWMxSGWcvqUUgIn7k3yOJhOIzVWn8Ak= +github.com/sivchari/tenv v1.7.1/go.mod h1:64yStXKSOxDfX47NlhVwND4dHwfZDdbp2Lyl018Icvg= github.com/skeema/knownhosts v1.1.0 h1:Wvr9V0MxhjRbl3f9nMnKnFfiWTJmtECJ9Njkea3ysW0= github.com/skeema/knownhosts v1.1.0/go.mod h1:sKFq3RD6/TKZkSWn8boUbDC7Qkgcv+8XXijpFO6roag= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= @@ -1205,9 +1419,13 @@ github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIK github.com/soheilhy/cmux v0.1.4 h1:0HKaf1o97UwFjHH9o5XsHUOF+tqmdA7KEzXLpiyaw0E= github.com/sonatard/noctx v0.0.1 h1:VC1Qhl6Oxx9vvWo3UDgrGXYCeKCe3Wbw7qAWL6FrmTY= github.com/sonatard/noctx v0.0.1/go.mod h1:9D2D/EoULe8Yy2joDHJj7bv3sZoq9AaSb8B4lqBjiZI= +github.com/sonatard/noctx v0.0.2 h1:L7Dz4De2zDQhW8S0t+KUjY0MAQJd6SgVwhzNIc4ok00= +github.com/sonatard/noctx v0.0.2/go.mod h1:kzFz+CzWSjQ2OzIm46uJZoXuBpa2+0y3T36U18dWqIo= github.com/sony/gobreaker v0.4.1 h1:oMnRNZXX5j85zso6xCPRNPtmAycat+WcoKbklScLDgQ= github.com/sourcegraph/go-diff v0.6.1 h1:hmA1LzxW0n1c3Q4YbrFgg4P99GSnebYa3x8gr0HZqLQ= github.com/sourcegraph/go-diff v0.6.1/go.mod h1:iBszgVvyxdc8SFZ7gm69go2KDdt3ag071iBaWPF6cjs= +github.com/sourcegraph/go-diff v0.7.0 h1:9uLlrd5T46OXs5qpp8L/MTltk0zikUGi0sNNyCpA8G0= +github.com/sourcegraph/go-diff v0.7.0/go.mod h1:iBszgVvyxdc8SFZ7gm69go2KDdt3ag071iBaWPF6cjs= github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= github.com/spf13/afero v1.8.2/go.mod h1:CtAatgMJh6bJEIs48Ay/FOnkljP3WeGUG0MC1RfAqwo= @@ -1217,11 +1435,14 @@ github.com/spf13/viper v1.14.0/go.mod h1:WT//axPky3FdvXHzGw33dNdXXXfFQqmEalje+eg github.com/ssgreg/nlreturn/v2 v2.2.1 h1:X4XDI7jstt3ySqGU86YGAURbxw3oTDPK9sPEi6YEwQ0= github.com/ssgreg/nlreturn/v2 v2.2.1/go.mod h1:E/iiPB78hV7Szg2YfRgyIrk1AD6JVMTRkkxBiELzh2I= github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4 h1:Gb2Tyox57NRNuZ2d3rmvB3pcmbu7O1RS3m8WRx7ilrg= +github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q= github.com/stbenjam/no-sprintf-host-port v0.1.1 h1:tYugd/yrm1O0dV+ThCbaKZh195Dfm07ysF0U6JQXczc= github.com/stbenjam/no-sprintf-host-port v0.1.1/go.mod h1:TLhvtIvONRzdmkFiio4O8LHsN9N74I+PhRquPsxpL0I= github.com/stefanberger/go-pkcs11uri v0.0.0-20201008174630-78d3cae3a980 h1:lIOOHPEbXzO3vnmx2gok1Tfs31Q8GQqKLc8vVqyQq/I= github.com/streadway/amqp v1.0.0 h1:kuuDrUJFZL1QYL9hUNuCxNObNzB0bV/ZG5jV3RWAQgo= +github.com/streadway/amqp v1.0.0/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/handy v0.0.0-20200128134331-0f66f006fb2e h1:mOtuXaRAbVZsxAHVdPR3IjfmN8T1h2iczJLynhLybf8= +github.com/streadway/handy v0.0.0-20200128134331-0f66f006fb2e/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= github.com/stretchr/objx v0.3.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/testify v1.1.4/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.7.5/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= @@ -1230,11 +1451,17 @@ github.com/supranational/blst v0.3.8-0.20220526154634-513d2456b344 h1:m+8fKfQwCA github.com/supranational/blst v0.3.8-0.20220526154634-513d2456b344/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 h1:kdXcSzyDtseVEc4yCz2qF8ZrQvIDBJLl4S1c3GCXmoI= github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= +github.com/t-yuki/gocover-cobertura v0.0.0-20180217150009-aaee18c8195c h1:+aPplBwWcHBo6q9xrfWdMrT9o4kltkmmvpemgIjep/8= +github.com/t-yuki/gocover-cobertura v0.0.0-20180217150009-aaee18c8195c/go.mod h1:SbErYREK7xXdsRiigaQiQkI9McGRzYMvlKYaP3Nimdk= github.com/tchap/go-patricia v2.2.6+incompatible h1:JvoDL7JSoIP2HDE8AbDH3zC8QBPxmzYe32HHy5yQ+Ck= github.com/tdakkota/asciicheck v0.1.1 h1:PKzG7JUTUmVspQTDqtkX9eSiLGossXTybutHwTXuO0A= github.com/tdakkota/asciicheck v0.1.1/go.mod h1:yHp0ai0Z9gUljN3o0xMhYJnH/IcvkdTBOX2fmJ93JEM= +github.com/tdakkota/asciicheck v0.2.0 h1:o8jvnUANo0qXtnslk2d3nMKTFNlOnJjRrNcj0j9qkHM= +github.com/tdakkota/asciicheck v0.2.0/go.mod h1:Qb7Y9EgjCLJGup51gDHFzbI08/gbGhL/UVhYIPWG2rg= github.com/tendermint/tendermint v0.37.0-rc2 h1:2n1em+jfbhSv6QnBj8F6KHCpbIzZCB8KgcjidJUQNlY= +github.com/tendermint/tendermint v0.37.0-rc2/go.mod h1:uYQO9DRNPeZROa9X3hJOZpYcVREDC2/HST+EiU5g2+A= github.com/tendermint/tm-db v0.6.7 h1:fE00Cbl0jayAoqlExN6oyQJ7fR/ZtoVOmvPJ//+shu8= +github.com/tendermint/tm-db v0.6.7/go.mod h1:byQDzFkZV1syXr/ReXS808NxA2xvyuuVgXOJ/088L6I= github.com/tenntenn/modver v1.0.1 h1:2klLppGhDgzJrScMpkj9Ujy3rXPUspSjAcev9tSEBgA= github.com/tenntenn/modver v1.0.1/go.mod h1:bePIyQPb7UeioSRkw3Q0XeMhYZSMx9B8ePqg6SAMGH0= github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3 h1:f+jULpRQGxTSkNYKJ51yaw6ChIqO+Je8UqsTKN/cDag= @@ -1243,13 +1470,19 @@ github.com/tetafro/godot v1.4.11 h1:BVoBIqAf/2QdbFmSwAWnaIqDivZdOV0ZRwEm6jivLKw= github.com/tetafro/godot v1.4.11/go.mod h1:LR3CJpxDVGlYOWn3ZZg1PgNZdTUvzsZWu8xaEohUpn8= github.com/timakin/bodyclose v0.0.0-20210704033933-f49887972144 h1:kl4KhGNsJIbDHS9/4U9yQo1UcPQM0kOMJHn29EoH/Ro= github.com/timakin/bodyclose v0.0.0-20210704033933-f49887972144/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= +github.com/timakin/bodyclose v0.0.0-20221125081123-e39cf3fc478e h1:MV6KaVu/hzByHP0UvJ4HcMGE/8a6A4Rggc/0wx2AvJo= +github.com/timakin/bodyclose v0.0.0-20221125081123-e39cf3fc478e/go.mod h1:27bSVNWSBOHm+qRp1T9qzaIpsWEP6TbUnei/43HK+PQ= github.com/timonwong/loggercheck v0.9.3 h1:ecACo9fNiHxX4/Bc02rW2+kaJIAMAes7qJ7JKxt0EZI= github.com/timonwong/loggercheck v0.9.3/go.mod h1:wUqnk9yAOIKtGA39l1KLE9Iz0QiTocu/YZoOf+OzFdw= +github.com/timonwong/loggercheck v0.9.4 h1:HKKhqrjcVj8sxL7K77beXh0adEm6DLjV/QOGeMXEVi4= +github.com/timonwong/loggercheck v0.9.4/go.mod h1:caz4zlPcgvpEkXgVnAJGowHAMW2NwHaNlpS8xDbVhTg= github.com/tklauser/go-sysconf v0.3.10/go.mod h1:C8XykCvCb+Gn0oNCWPIlcb0RuglQTYaQ2hGm7jmxEFk= github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hMwiKKqXCQ= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8 h1:ndzgwNDnKIqyCvHTXaCqh9KlOWKvBry6nuXMJmonVsE= github.com/tomarrell/wrapcheck/v2 v2.7.0 h1:J/F8DbSKJC83bAvC6FoZaRjZiZ/iKoueSdrEkmGeacA= github.com/tomarrell/wrapcheck/v2 v2.7.0/go.mod h1:ao7l5p0aOlUNJKI0qVwB4Yjlqutd0IvAB9Rdwyilxvg= +github.com/tomarrell/wrapcheck/v2 v2.8.1 h1:HxSqDSN0sAt0yJYsrcYVoEeyM4aI9yAm3KQpIXDJRhQ= +github.com/tomarrell/wrapcheck/v2 v2.8.1/go.mod h1:/n2Q3NZ4XFT50ho6Hbxg+RV1uyo2Uow/Vdm9NQcl5SE= github.com/tommy-muehle/go-mnd/v2 v2.5.1 h1:NowYhSdyE/1zwK9QCLeRb6USWdoif80Ie+v+yU8u1Zw= github.com/tommy-muehle/go-mnd/v2 v2.5.1/go.mod h1:WsUAkMJMYww6l/ufffCD3m+P7LEvr8TnZn9lwVDlgzw= github.com/tonistiigi/fsutil v0.0.0-20220115021204-b19f7f9cb274 h1:wbyZxD6IPFp0sl5uscMOJRsz5UKGFiNiD16e+MVfKZY= @@ -1280,9 +1513,12 @@ github.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f h1:p4VB7kIXpOQvV github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f h1:J9EGpcZtP0E/raorCMxlFGSTBrsSlaDGf3jU/qvAE2c= +github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo= github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74= +github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= github.com/xhit/go-str2duration v1.2.0 h1:BcV5u025cITWxEQKGWr1URRzrcXtu7uk8+luz3Yuhwc= github.com/xhit/go-str2duration v1.2.0/go.mod h1:3cPSlfZlUHVlneIVfePFWcJZsuwf+P1v2SRTV4cUmp4= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8= @@ -1298,6 +1534,7 @@ github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1 github.com/yuin/goldmark v1.4.13 h1:fVcFKWvrslecOb/tg+Cc05dkeYx540o0FuFt3nUVDoE= github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg= github.com/zeebo/xxh3 v1.0.2 h1:xZmwmqxHZA8AI603jOQ0tMqmBr9lPeFwGg6d+xy9DC0= +github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA= github.com/zondax/ledger-go v0.14.0/go.mod h1:fZ3Dqg6qcdXWSOJFKMG8GCTnD7slO/RL2feOQv8K320= gitlab.com/bosi/decorder v0.2.3 h1:gX4/RgK16ijY8V+BRQHAySfQAb354T7/xQpDB2n10P0= gitlab.com/bosi/decorder v0.2.3/go.mod h1:9K1RB5+VPNQYtXtTDAzd2OEftsZb1oV0IrJrzChSdGE= @@ -1332,6 +1569,7 @@ go.opentelemetry.io/otel/trace v1.11.0 h1:20U/Vj42SX+mASlXLmSGBg6jpI1jQtv682lZtT go.opentelemetry.io/otel/trace v1.11.0/go.mod h1:nyYjis9jy0gytE9LXGU+/m1sHTKbRY0fX0hulNNDP1U= go.opentelemetry.io/proto/otlp v0.15.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= go.opentelemetry.io/proto/otlp v0.19.0 h1:IVN6GR+mhC4s5yfcTbmzHYODqvWAp3ZedA2SJPI1Nnw= +go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= @@ -1362,6 +1600,8 @@ golang.org/x/exp v0.0.0-20230321023759-10a507213a29/go.mod h1:CxIveKay+FTh1D0yPZ golang.org/x/exp/typeparams v0.0.0-20220428152302-39d4317da171/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= golang.org/x/exp/typeparams v0.0.0-20220827204233-334a2380cb91 h1:Ic/qN6TEifvObMGQy72k0n1LlJr7DjWWEi+MOsDOiSk= golang.org/x/exp/typeparams v0.0.0-20220827204233-334a2380cb91/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= +golang.org/x/exp/typeparams v0.0.0-20230224173230-c95f2b4c22f2 h1:J74nGeMgeFnYQJN59eFwh06jX/V8g0lB7LWpjSLxtgU= +golang.org/x/exp/typeparams v0.0.0-20230224173230-c95f2b4c22f2/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190802002840-cff245a6509b h1:+qEpEAPhDZ1o0x3tHzZTQDArnOixOzGD9HUJfcg0mb4= golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 h1:VLliZ0d+/avPrXXH+OakdXhpJuEoBZuwh1m2j7U6Iug= @@ -1512,6 +1752,8 @@ gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= gotest.tools/v3 v3.2.0/go.mod h1:Mcr9QNxkg0uMvy/YElmo4SpXgJKWgQvYrT7Kw5RzJ1A= honnef.co/go/tools v0.3.3 h1:oDx7VAwstgpYpb3wv0oxiZlxY+foCpRAwY7Vk6XpAgA= honnef.co/go/tools v0.3.3/go.mod h1:jzwdWgg7Jdq75wlfblQxO4neNaFFSvgc1tD5Wv8U0Yw= +honnef.co/go/tools v0.4.3 h1:o/n5/K5gXqk8Gozvs2cnL0F2S1/g1vcGCAx2vETjITw= +honnef.co/go/tools v0.4.3/go.mod h1:36ZgoUOrqOk1GxwHhyryEkq8FQWkUO2xGuSMhUCcdvA= k8s.io/api v0.22.5 h1:xk7C+rMjF/EGELiD560jdmwzrB788mfcHiNbMQLIVI8= k8s.io/apimachinery v0.22.5 h1:cIPwldOYm1Slq9VLBRPtEYpyhjIm1C6aAMAoENuvN9s= k8s.io/apiserver v0.22.5 h1:71krQxCUz218ecb+nPhfDsNB6QgP1/4EMvi1a2uYBlg= @@ -1520,6 +1762,7 @@ k8s.io/component-base v0.22.5 h1:U0eHqZm7mAFE42hFwYhY6ze/MmVaW00JpMrzVsQmzYE= k8s.io/cri-api v0.23.1 h1:0DHL/hpTf4Fp+QkUXFefWcp1fhjXr9OlNdY9X99c+O8= k8s.io/klog/v2 v2.30.0 h1:bUO6drIvCIsvZ/XFgfxoGFQU/a4Qkh0iAlvUR7vlHJw= k8s.io/utils v0.0.0-20210930125809-cb0fa318a74b h1:wxEMGetGMur3J1xuGLQY7GEQYg9bZxKn3tKo5k/eYcs= +modernc.org/ccorpus v1.11.6/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ= modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM= modernc.org/tcl v1.15.2/go.mod h1:3+k/ZaEbKrC8ePv8zJWPtBSW0V7Gg9g8rkmhI1Kfs3c= modernc.org/z v1.7.3/go.mod h1:Ipv4tsdxZRbQyLq9Q1M6gdbkxYzdlrciF2Hi/lS7nWE= @@ -1531,6 +1774,8 @@ mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b h1:DxJ5nJdkhDlLok9K6qO+5290kphD mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4= mvdan.cc/unparam v0.0.0-20220706161116-678bad134442 h1:seuXWbRB1qPrS3NQnHmFKLJLtskWyueeIzmLXghMGgk= mvdan.cc/unparam v0.0.0-20220706161116-678bad134442/go.mod h1:F/Cxw/6mVrNKqrR2YjFf5CaW0Bw4RL8RfbEf4GRggJk= +mvdan.cc/unparam v0.0.0-20221223090309-7455f1af531d h1:3rvTIIM22r9pvXk+q3swxUQAQOxksVMGK7sml4nG57w= +mvdan.cc/unparam v0.0.0-20221223090309-7455f1af531d/go.mod h1:IeHQjmn6TOD+e4Z3RFiZMMsLVL+A96Nvptar8Fj71is= rsc.io/binaryregexp v0.2.0 h1:HfqmD5MEmC0zvwBuF187nq9mdnXjXsSivRiXN7SmRkE= rsc.io/pdf v0.1.1 h1:k1MczvYDUvJBe93bYd7wrZLLUEcLZAuF824/I4e5Xr4= rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= From cf3097f9e6a3c27ffae5fb6cde12d851bd6e7c49 Mon Sep 17 00:00:00 2001 From: Ash Date: Wed, 5 Jul 2023 10:52:20 -0700 Subject: [PATCH 107/501] correct gas consumer --- app/app.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/app.go b/app/app.go index 5662ff81..00525f40 100644 --- a/app/app.go +++ b/app/app.go @@ -890,7 +890,7 @@ func (app *WasmApp) setAnteHandler(txConfig client.TxConfig, wasmConfig wasmtype BankKeeper: app.BankKeeper, SignModeHandler: txConfig.SignModeHandler(), FeegrantKeeper: app.FeeGrantKeeper, - SigGasConsumer: ante.DefaultSigVerificationGasConsumer, + SigGasConsumer: aa.SigVerificationGasConsumer, }, IBCKeeper: app.IBCKeeper, WasmConfig: &wasmConfig, From e3a74a99f96f8b5a764dced85f51e3f93b53fa6f Mon Sep 17 00:00:00 2001 From: Eduardo Diaz Date: Wed, 5 Jul 2023 16:34:27 -0400 Subject: [PATCH 108/501] cleanup logger --- integration_tests/utils.go | 2 +- x/globalfee/ante/fee.go | 7 ------- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/integration_tests/utils.go b/integration_tests/utils.go index 3b887f09..f845cbd8 100644 --- a/integration_tests/utils.go +++ b/integration_tests/utils.go @@ -400,7 +400,7 @@ func TxCommandOverrideGas(t *testing.T, tn *cosmos.ChainNode, keyName, gas strin } func ExecTx(t *testing.T, ctx context.Context, tn *cosmos.ChainNode, keyName string, command ...string) (string, error) { - stdout, _, err := tn.Exec(ctx, TxCommandOverrideGas(t, tn, keyName, "0.0uxion", command...), nil) + stdout, _, err := tn.Exec(ctx, TxCommandOverrideGas(t, tn, keyName, "0.1uxion", command...), nil) if err != nil { return "", err } diff --git a/x/globalfee/ante/fee.go b/x/globalfee/ante/fee.go index af51ccfc..421ca717 100644 --- a/x/globalfee/ante/fee.go +++ b/x/globalfee/ante/fee.go @@ -132,7 +132,6 @@ func (mfd FeeDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, ne // otherwise, err if len(feeCoins) == 0 { if len(zeroCoinFeesDenomReq) != 0 { - ctx.Logger().Info("Fees are Zero\n\n") return mfd.Deduct(ctx, tx, simulate, next) } return ctx, sdkerrors.Wrapf(sdkerrors.ErrInsufficientFee, "insufficient fees; got: %s required: %s", feeCoins.String(), feeRequired.String()) @@ -141,7 +140,6 @@ func (mfd FeeDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, ne // when feeCoins != [] // special case: if TX has at least one of the zeroCoinFeesDenomReq, then it should pass if len(feeCoinsZeroDenom) > 0 { - ctx.Logger().Info("Fees are greater than zero\n\n") return mfd.Deduct(ctx, tx, simulate, next) } @@ -177,8 +175,6 @@ func (mfd FeeDecorator) GetTxFeeRequired(ctx sdk.Context, tx sdk.FeeTx) (sdk.Coi // In DeliverTx, the global fee min gas prices are the only tx fee requirements. if !ctx.IsCheckTx() { - ctx.Logger().Info(fmt.Sprintf("Height: %d\nGlobalFees: %s \n", ctx.BlockHeight(), globalFees.String())) - ctx.Logger().Info("We are ignoring local fees!!!") return globalFees, nil } @@ -188,9 +184,6 @@ func (mfd FeeDecorator) GetTxFeeRequired(ctx sdk.Context, tx sdk.FeeTx) (sdk.Coi // Get local minimum-gas-prices localFees := GetMinGasPrice(ctx, int64(tx.GetGas())) - ctx.Logger().Info(fmt.Sprintf("GlobalFees: %s \n", globalFees.String())) - ctx.Logger().Info(fmt.Sprintf("LocalFees: %s \n", localFees.String())) - return MaxCoins(globalFees, localFees), nil } From 834f2691cd3bfbe0475fe84632f5ebe88f0133a8 Mon Sep 17 00:00:00 2001 From: Eduardo Diaz Date: Wed, 5 Jul 2023 19:51:57 -0400 Subject: [PATCH 109/501] [WIP] fix unit tests --- x/globalfee/ante/antetest/fee_test_setup.go | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/x/globalfee/ante/antetest/fee_test_setup.go b/x/globalfee/ante/antetest/fee_test_setup.go index 46267e57..d58aac6d 100644 --- a/x/globalfee/ante/antetest/fee_test_setup.go +++ b/x/globalfee/ante/antetest/fee_test_setup.go @@ -15,9 +15,12 @@ import ( xauthsigning "github.com/cosmos/cosmos-sdk/x/auth/signing" "github.com/cosmos/cosmos-sdk/x/params/types" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" + "github.com/golang/mock/gomock" "github.com/stretchr/testify/suite" xionfeeante "github.com/burnt-labs/xion/x/globalfee/ante" + antetestutil "github.com/cosmos/cosmos-sdk/x/auth/ante/testutil" + authtestutil "github.com/cosmos/cosmos-sdk/x/auth/testutil" xionapp "github.com/burnt-labs/xion/app" "github.com/burnt-labs/xion/x/globalfee" @@ -43,7 +46,6 @@ func (s *IntegrationTestSuite) SetupTest() { Height: 1, }) - //encodingConfig := xionapp.MakeTestEncodingConfig() // ?? How to Replace.... encodingConfig := testutil.MakeTestEncodingConfig() encodingConfig.Amino.RegisterConcrete(&testdata.TestMsg{}, "testdata.TestMsg", nil) testdata.RegisterInterfaces(encodingConfig.InterfaceRegistry) @@ -69,8 +71,15 @@ func (s *IntegrationTestSuite) SetupTestGlobalFeeStoreAndMinGasPrice(minGasPrice stakingParam := stakingtypes.DefaultParams() stakingParam.BondDenom = testBondDenom + ctrl := gomock.NewController(nil) + //authKeeper = authtestutil. + //bankKeeper = authtestutil.NewMockBankKeeper(ctrl) + ak := antetestutil.NewMockAccountKeeper(ctrl) + bk := authtestutil.NewMockBankKeeper(ctrl) + fgk := antetestutil.NewMockFeegrantKeeper(ctrl) + // build fee decorator - feeDecorator := xionfeeante.NewFeeDecorator(subspace, bondDenom) + feeDecorator := xionfeeante.NewFeeDecorator(subspace, ak, bk, fgk, nil, bondDenom) // chain fee decorator to antehandler antehandler := sdk.ChainAnteDecorators(feeDecorator) From 1f30b91bd2b69692aebe6521ad14add0a30c50d3 Mon Sep 17 00:00:00 2001 From: Ash Date: Thu, 6 Jul 2023 11:59:02 -0700 Subject: [PATCH 110/501] update for tests --- go.mod | 2 +- go.sum | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 959ccfb1..b7ff5079 100644 --- a/go.mod +++ b/go.mod @@ -43,7 +43,7 @@ require ( github.com/cometbft/cometbft v0.37.1 github.com/cometbft/cometbft-db v0.8.0 github.com/golang/mock v1.6.0 - github.com/larry0x/abstract-account v0.0.0-20230628224848-53cfac67f249 + github.com/larry0x/abstract-account v0.0.0-20230706184728-2cae2b52b439 github.com/spf13/viper v1.15.0 gotest.tools/v3 v3.4.0 sigs.k8s.io/yaml v1.3.0 diff --git a/go.sum b/go.sum index 380424f0..ddca7375 100644 --- a/go.sum +++ b/go.sum @@ -360,6 +360,7 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= +github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 h1:HbphB4TFFXpv7MNrT52FGrrgVXF1owhMVTHFZIlnvd4= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0/go.mod h1:DZGJHZMqrU4JJqFAWUS2UO1+lbSKsdiOoYi9Zzey7Fc= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= @@ -701,6 +702,8 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/larry0x/abstract-account v0.0.0-20230628224848-53cfac67f249 h1:ITVgrJOu1gnI7dzJQqik1L19qRYb2ebOvjQEvrd90n0= github.com/larry0x/abstract-account v0.0.0-20230628224848-53cfac67f249/go.mod h1:mRL3ko+eOFguJHzhVZatNZOvaiVHumGAWxoLlyIo+Ow= +github.com/larry0x/abstract-account v0.0.0-20230706184728-2cae2b52b439 h1:2MhdJ8qynqeJsSxo0MxYJvA9dJvp/NdJkDYzejhH+lU= +github.com/larry0x/abstract-account v0.0.0-20230706184728-2cae2b52b439/go.mod h1:mRL3ko+eOFguJHzhVZatNZOvaiVHumGAWxoLlyIo+Ow= github.com/larry0x/simapp v0.0.0-20230527213943-e57d94ffca4c h1:HxMMvjvPKv+Xttad2Blw6c9XKzg/Pk5TIZL8T04lUN0= github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= From 96129387f7e9f5e9a9d82b8c780c764d0ea0ae95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eduardo=20D=C3=ADaz?= Date: Fri, 7 Jul 2023 12:30:12 -0400 Subject: [PATCH 111/501] Remove CI cache Cache has been causing uncertainty on the reliability of the tests. --- .github/workflows/integration-tests.yml | 9 --------- 1 file changed, 9 deletions(-) diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index 6ea204f4..81c9f301 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -79,15 +79,6 @@ jobs: go-version: ^1.18 - name: checkout uses: actions/checkout@v2 - - name: go-cache - uses: actions/cache@v2 - with: - path: | - ~/.cache/go-build - ~/go/pkg/mod - key: ${{ runner.os }}-go-${{ hashFiles('module/go.sum') }} - restore-keys: | - ${{ runner.os }}-go- - name: container-login uses: docker/login-action@v1 with: From 3f8bb9ed901abcb4d4a24adf73e52809bb15fa51 Mon Sep 17 00:00:00 2001 From: Eduardo Diaz Date: Sun, 9 Jul 2023 20:14:28 -0400 Subject: [PATCH 112/501] efactor decorator, split fee deduction --- app/ante.go | 4 +- x/globalfee/ante/antetest/fee_test.go | 118 +++++++++-------- x/globalfee/ante/antetest/fee_test_setup.go | 14 +- x/globalfee/ante/fee.go | 139 +------------------- x/globalfee/ante/fee_utils.go | 15 --- 5 files changed, 75 insertions(+), 215 deletions(-) diff --git a/app/ante.go b/app/ante.go index 090d4fb3..c5547155 100644 --- a/app/ante.go +++ b/app/ante.go @@ -61,8 +61,8 @@ func NewAnteHandler(options HandlerOptions) (sdk.AnteHandler, error) { ante.NewTxTimeoutHeightDecorator(), ante.NewValidateMemoDecorator(options.AccountKeeper), ante.NewConsumeGasForTxSizeDecorator(options.AccountKeeper), - globalfeeante.NewFeeDecorator(options.GlobalFeeSubspace, options.AccountKeeper, options.BankKeeper, options.FeegrantKeeper, options.TxFeeChecker, options.StakingKeeper.BondDenom), // - //ante.NewDeductFeeDecorator(options.AccountKeeper, options.BankKeeper, options.FeegrantKeeper, options.TxFeeChecker), + globalfeeante.NewFeeDecorator(options.GlobalFeeSubspace, options.StakingKeeper.BondDenom), // + ante.NewDeductFeeDecorator(options.AccountKeeper, options.BankKeeper, options.FeegrantKeeper, options.TxFeeChecker), ante.NewSetPubKeyDecorator(options.AccountKeeper), // SetPubKeyDecorator must be called before all signature verification decorators ante.NewValidateSigCountDecorator(options.AccountKeeper), ante.NewSigGasConsumeDecorator(options.AccountKeeper, options.SigGasConsumer), diff --git a/x/globalfee/ante/antetest/fee_test.go b/x/globalfee/ante/antetest/fee_test.go index 85795cbd..92924efc 100644 --- a/x/globalfee/ante/antetest/fee_test.go +++ b/x/globalfee/ante/antetest/fee_test.go @@ -1,6 +1,7 @@ package antetest import ( + "fmt" "testing" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" @@ -34,6 +35,8 @@ func (s *IntegrationTestSuite) TestGetDefaultGlobalFees() { } } +// TODO: investigate globalfeeParamsContain0, consider removing the secondary denom + // Test global fees and min_gas_price with bypass msg types. // Please note even globalfee=0, min_gas_price=0, we do not let fee=0random_denom pass. // Paid fees are already sanitized by removing zero coins(through feeFlag parsing), so use sdk.NewCoins() to create it. @@ -55,25 +58,26 @@ func (s *IntegrationTestSuite) TestGlobalFeeMinimumGasFeeAnteHandler() { minGasPriceEmpty := []sdk.DecCoin{} globalfeeParams0 := []sdk.DecCoin{ sdk.NewDecCoinFromDec("photon", sdk.NewDec(0)), - sdk.NewDecCoinFromDec("uatom", sdk.NewDec(0)), + sdk.NewDecCoinFromDec("uxion", sdk.NewDec(0)), } globalfeeParamsContain0 := []sdk.DecCoin{ sdk.NewDecCoinFromDec("photon", med), - sdk.NewDecCoinFromDec("uatom", sdk.NewDec(0)), + sdk.NewDecCoinFromDec("uxion", sdk.NewDec(0)), } minGasPrice0 := []sdk.DecCoin{ sdk.NewDecCoinFromDec("stake", sdk.NewDec(0)), - sdk.NewDecCoinFromDec("uatom", sdk.NewDec(0)), + sdk.NewDecCoinFromDec("uxion", sdk.NewDec(0)), } + globalfeeParamsHigh := []sdk.DecCoin{ - sdk.NewDecCoinFromDec("uatom", high), + sdk.NewDecCoinFromDec("uxion", high), } minGasPrice := []sdk.DecCoin{ - sdk.NewDecCoinFromDec("uatom", med), - sdk.NewDecCoinFromDec("stake", med), + sdk.NewDecCoinFromDec("uxion", med), + //sdk.NewDecCoinFromDec("stake", med), } globalfeeParamsLow := []sdk.DecCoin{ - sdk.NewDecCoinFromDec("uatom", low), + sdk.NewDecCoinFromDec("uxion", low), } // global fee must be sorted in denom globalfeeParamsNewDenom := []sdk.DecCoin{ @@ -89,6 +93,7 @@ func (s *IntegrationTestSuite) TestGlobalFeeMinimumGasFeeAnteHandler() { txMsg sdk.Msg txCheck bool expErr bool + networkFee bool }{ // test fees // empty min_gas_price or empty global fee @@ -96,34 +101,37 @@ func (s *IntegrationTestSuite) TestGlobalFeeMinimumGasFeeAnteHandler() { minGasPrice: minGasPriceEmpty, globalFee: globalfeeParamsHigh, // sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()) - gasPrice: sdk.NewCoins(sdk.NewCoin("uatom", highFeeAmt)), - gasLimit: testGasLimit, - txMsg: testdata.NewTestMsg(addr1), - txCheck: true, - expErr: false, + gasPrice: sdk.NewCoins(sdk.NewCoin("uxion", highFeeAmt)), + gasLimit: testGasLimit, + txMsg: testdata.NewTestMsg(addr1), + txCheck: true, + expErr: false, + networkFee: false, }, "empty min_gas_price, nonempty global fee, fee lower than global_fee": { minGasPrice: minGasPriceEmpty, globalFee: globalfeeParamsHigh, - gasPrice: sdk.NewCoins(sdk.NewCoin("uatom", lowFeeAmt)), + gasPrice: sdk.NewCoins(sdk.NewCoin("uxion", lowFeeAmt)), gasLimit: testGasLimit, txMsg: testdata.NewTestMsg(addr1), txCheck: true, expErr: true, + networkFee: false, }, "nonempty min_gas_price with defaultGlobalFee denom, empty global fee, fee higher/equal than min_gas_price": { minGasPrice: minGasPrice, - globalFee: globalfeeParamsEmpty, // default 0uatom - gasPrice: sdk.NewCoins(sdk.NewCoin("uatom", medFeeAmt)), + globalFee: globalfeeParamsEmpty, // default 0uxion + gasPrice: sdk.NewCoins(sdk.NewCoin("uxion", medFeeAmt)), gasLimit: testGasLimit, txMsg: testdata.NewTestMsg(addr1), txCheck: true, expErr: false, + networkFee: true, }, "nonempty min_gas_price with defaultGlobalFee denom, empty global fee, fee lower than min_gas_price": { minGasPrice: minGasPrice, globalFee: globalfeeParamsEmpty, - gasPrice: sdk.NewCoins(sdk.NewCoin("uatom", lowFeeAmt)), + gasPrice: sdk.NewCoins(sdk.NewCoin("uxion", lowFeeAmt)), gasLimit: testGasLimit, txMsg: testdata.NewTestMsg(addr1), txCheck: true, @@ -142,7 +150,7 @@ func (s *IntegrationTestSuite) TestGlobalFeeMinimumGasFeeAnteHandler() { "zero min_gas_price, zero global fee, zero fee in global fee denom": { minGasPrice: minGasPrice0, globalFee: globalfeeParams0, - gasPrice: sdk.NewCoins(sdk.NewCoin("uatom", sdk.ZeroInt()), sdk.NewCoin("photon", sdk.ZeroInt())), + gasPrice: sdk.NewCoins(sdk.NewCoin("uxion", sdk.ZeroInt()), sdk.NewCoin("photon", sdk.ZeroInt())), gasLimit: testGasLimit, txMsg: testdata.NewTestMsg(addr1), txCheck: true, @@ -172,7 +180,7 @@ func (s *IntegrationTestSuite) TestGlobalFeeMinimumGasFeeAnteHandler() { globalFee: globalfeeParams0, gasPrice: sdk.NewCoins( sdk.NewCoin("stake", sdk.ZeroInt()), - sdk.NewCoin("uatom", sdk.ZeroInt())), + sdk.NewCoin("uxion", sdk.ZeroInt())), gasLimit: testGasLimit, txMsg: testdata.NewTestMsg(addr1), txCheck: true, @@ -200,7 +208,7 @@ func (s *IntegrationTestSuite) TestGlobalFeeMinimumGasFeeAnteHandler() { "zero min_gas_price, empty global fee, zero fee in defaultZeroGlobalFee denom": { minGasPrice: minGasPrice0, globalFee: globalfeeParamsEmpty, - gasPrice: sdk.NewCoins(sdk.NewCoin("uatom", sdk.ZeroInt())), + gasPrice: sdk.NewCoins(sdk.NewCoin("uxion", sdk.ZeroInt())), gasLimit: testGasLimit, txMsg: testdata.NewTestMsg(addr1), txCheck: true, @@ -209,7 +217,7 @@ func (s *IntegrationTestSuite) TestGlobalFeeMinimumGasFeeAnteHandler() { "zero min_gas_price, empty global fee, nonzero fee in defaultZeroGlobalFee denom": { minGasPrice: minGasPrice0, globalFee: globalfeeParamsEmpty, - gasPrice: sdk.NewCoins(sdk.NewCoin("uatom", lowFeeAmt)), + gasPrice: sdk.NewCoins(sdk.NewCoin("uxion", lowFeeAmt)), gasLimit: testGasLimit, txMsg: testdata.NewTestMsg(addr1), txCheck: true, @@ -228,7 +236,7 @@ func (s *IntegrationTestSuite) TestGlobalFeeMinimumGasFeeAnteHandler() { "empty min_gas_price, zero global fee, zero fee in global fee denom": { minGasPrice: minGasPriceEmpty, globalFee: globalfeeParams0, - gasPrice: sdk.NewCoins(sdk.NewCoin("uatom", sdk.ZeroInt())), + gasPrice: sdk.NewCoins(sdk.NewCoin("uxion", sdk.ZeroInt())), gasLimit: testGasLimit, txMsg: testdata.NewTestMsg(addr1), txCheck: true, @@ -246,7 +254,7 @@ func (s *IntegrationTestSuite) TestGlobalFeeMinimumGasFeeAnteHandler() { "empty min_gas_price, zero global fee, nonzero fee in global fee denom": { minGasPrice: minGasPriceEmpty, globalFee: globalfeeParams0, - gasPrice: sdk.NewCoins(sdk.NewCoin("uatom", lowFeeAmt)), + gasPrice: sdk.NewCoins(sdk.NewCoin("uxion", lowFeeAmt)), gasLimit: testGasLimit, txMsg: testdata.NewTestMsg(addr1), txCheck: true, @@ -265,7 +273,7 @@ func (s *IntegrationTestSuite) TestGlobalFeeMinimumGasFeeAnteHandler() { "zero min_gas_price, nonzero global fee, fee is higher than global fee": { minGasPrice: minGasPrice0, globalFee: globalfeeParamsLow, - gasPrice: sdk.NewCoins(sdk.NewCoin("uatom", lowFeeAmt)), + gasPrice: sdk.NewCoins(sdk.NewCoin("uxion", lowFeeAmt)), gasLimit: testGasLimit, txMsg: testdata.NewTestMsg(addr1), txCheck: true, @@ -275,7 +283,7 @@ func (s *IntegrationTestSuite) TestGlobalFeeMinimumGasFeeAnteHandler() { "fee higher/equal than globalfee and min_gas_price": { minGasPrice: minGasPrice, globalFee: globalfeeParamsHigh, - gasPrice: sdk.NewCoins(sdk.NewCoin("uatom", highFeeAmt)), + gasPrice: sdk.NewCoins(sdk.NewCoin("uxion", highFeeAmt)), gasLimit: testGasLimit, txMsg: testdata.NewTestMsg(addr1), txCheck: true, @@ -284,7 +292,7 @@ func (s *IntegrationTestSuite) TestGlobalFeeMinimumGasFeeAnteHandler() { "fee lower than globalfee and min_gas_price": { minGasPrice: minGasPrice, globalFee: globalfeeParamsHigh, - gasPrice: sdk.NewCoins(sdk.NewCoin("uatom", lowFeeAmt)), + gasPrice: sdk.NewCoins(sdk.NewCoin("uxion", lowFeeAmt)), gasLimit: testGasLimit, txMsg: testdata.NewTestMsg(addr1), txCheck: true, @@ -299,12 +307,12 @@ func (s *IntegrationTestSuite) TestGlobalFeeMinimumGasFeeAnteHandler() { gasLimit: testGasLimit, txMsg: testdata.NewTestMsg(addr1), txCheck: true, - expErr: false, + expErr: true, // NOTE: expect error gas price is not a subset of the standard test min gas price }, "globalfee > min_gas_price, fee higher/equal than min_gas_price, lower than globalfee": { minGasPrice: minGasPrice, globalFee: globalfeeParamsHigh, - gasPrice: sdk.NewCoins(sdk.NewCoin("uatom", medFeeAmt)), + gasPrice: sdk.NewCoins(sdk.NewCoin("uxion", medFeeAmt)), gasLimit: testGasLimit, txMsg: testdata.NewTestMsg(addr1), txCheck: true, @@ -313,7 +321,7 @@ func (s *IntegrationTestSuite) TestGlobalFeeMinimumGasFeeAnteHandler() { "globalfee < min_gas_price, fee higher/equal than globalfee and lower than min_gas_price": { minGasPrice: minGasPrice, globalFee: globalfeeParamsLow, - gasPrice: sdk.NewCoins(sdk.NewCoin("uatom", lowFeeAmt)), + gasPrice: sdk.NewCoins(sdk.NewCoin("uxion", lowFeeAmt)), gasLimit: testGasLimit, txMsg: testdata.NewTestMsg(addr1), txCheck: true, @@ -323,7 +331,7 @@ func (s *IntegrationTestSuite) TestGlobalFeeMinimumGasFeeAnteHandler() { "nonzero min_gas_price, zero global fee, fee is in global fee denom and lower than min_gas_price": { minGasPrice: minGasPrice, globalFee: globalfeeParams0, - gasPrice: sdk.NewCoins(sdk.NewCoin("uatom", lowFeeAmt)), + gasPrice: sdk.NewCoins(sdk.NewCoin("uxion", lowFeeAmt)), gasLimit: testGasLimit, txMsg: testdata.NewTestMsg(addr1), txCheck: true, @@ -332,7 +340,7 @@ func (s *IntegrationTestSuite) TestGlobalFeeMinimumGasFeeAnteHandler() { "nonzero min_gas_price, zero global fee, fee is in global fee denom and higher/equal than min_gas_price": { minGasPrice: minGasPrice, globalFee: globalfeeParams0, - gasPrice: sdk.NewCoins(sdk.NewCoin("uatom", medFeeAmt)), + gasPrice: sdk.NewCoins(sdk.NewCoin("uxion", medFeeAmt)), gasLimit: testGasLimit, txMsg: testdata.NewTestMsg(addr1), txCheck: true, @@ -355,7 +363,7 @@ func (s *IntegrationTestSuite) TestGlobalFeeMinimumGasFeeAnteHandler() { gasLimit: testGasLimit, txMsg: testdata.NewTestMsg(addr1), txCheck: true, - expErr: false, + expErr: true, // NOTE: is not a subset it should return error, due to changes we no longer merge local fees + network fees }, "min_gas_price denom is not subset of global fee denom, fee paying in min_gas_price denom": { minGasPrice: minGasPrice, @@ -370,7 +378,7 @@ func (s *IntegrationTestSuite) TestGlobalFeeMinimumGasFeeAnteHandler() { minGasPrice: minGasPrice, globalFee: globalfeeParamsLow, gasPrice: sdk.NewCoins( - sdk.NewCoin("uatom", highFeeAmt), + sdk.NewCoin("uxion", highFeeAmt), sdk.NewCoin("quark", highFeeAmt)), gasLimit: testGasLimit, txMsg: testdata.NewTestMsg(addr1), @@ -380,7 +388,7 @@ func (s *IntegrationTestSuite) TestGlobalFeeMinimumGasFeeAnteHandler() { "fees contain denom not in globalfee with zero amount": { minGasPrice: minGasPrice, globalFee: globalfeeParamsLow, - gasPrice: sdk.NewCoins(sdk.NewCoin("uatom", highFeeAmt), + gasPrice: sdk.NewCoins(sdk.NewCoin("uxion", highFeeAmt), sdk.NewCoin("quark", sdk.ZeroInt())), gasLimit: testGasLimit, txMsg: testdata.NewTestMsg(addr1), @@ -406,7 +414,7 @@ func (s *IntegrationTestSuite) TestGlobalFeeMinimumGasFeeAnteHandler() { globalFee: globalfeeParamsContain0, gasPrice: sdk.NewCoins( sdk.NewCoin("photon", lowFeeAmt), - sdk.NewCoin("uatom", sdk.ZeroInt())), + sdk.NewCoin("uxion", sdk.ZeroInt())), gasLimit: testGasLimit, txMsg: testdata.NewTestMsg(addr1), txCheck: true, @@ -426,7 +434,7 @@ func (s *IntegrationTestSuite) TestGlobalFeeMinimumGasFeeAnteHandler() { globalFee: globalfeeParamsContain0, gasPrice: sdk.NewCoins( sdk.NewCoin("photon", lowFeeAmt), - sdk.NewCoin("uatom", highFeeAmt)), + sdk.NewCoin("uxion", highFeeAmt)), gasLimit: testGasLimit, txMsg: testdata.NewTestMsg(addr1), txCheck: true, @@ -437,7 +445,7 @@ func (s *IntegrationTestSuite) TestGlobalFeeMinimumGasFeeAnteHandler() { globalFee: globalfeeParamsContain0, gasPrice: sdk.NewCoins( sdk.NewCoin("photon", sdk.ZeroInt()), - sdk.NewCoin("uatom", sdk.ZeroInt()), + sdk.NewCoin("uxion", sdk.ZeroInt()), ), gasLimit: testGasLimit, txMsg: testdata.NewTestMsg(addr1), @@ -456,7 +464,7 @@ func (s *IntegrationTestSuite) TestGlobalFeeMinimumGasFeeAnteHandler() { "bypass msg type: ibc.core.channel.v1.MsgRecvPacket": { minGasPrice: minGasPrice, globalFee: globalfeeParamsLow, - gasPrice: sdk.NewCoins(sdk.NewCoin("uatom", sdk.ZeroInt())), + gasPrice: sdk.NewCoins(sdk.NewCoin("uxion", sdk.ZeroInt())), gasLimit: testGasLimit, txMsg: ibcchanneltypes.NewMsgRecvPacket( ibcchanneltypes.Packet{}, nil, ibcclienttypes.Height{}, ""), @@ -466,7 +474,7 @@ func (s *IntegrationTestSuite) TestGlobalFeeMinimumGasFeeAnteHandler() { "bypass msg type: ibc.core.channel.v1.MsgTimeout": { minGasPrice: minGasPrice, globalFee: globalfeeParamsLow, - gasPrice: sdk.NewCoins(sdk.NewCoin("uatom", sdk.ZeroInt())), + gasPrice: sdk.NewCoins(sdk.NewCoin("uxion", sdk.ZeroInt())), gasLimit: testGasLimit, txMsg: ibcchanneltypes.NewMsgTimeout( // todo check here @@ -477,7 +485,7 @@ func (s *IntegrationTestSuite) TestGlobalFeeMinimumGasFeeAnteHandler() { "bypass msg type: ibc.core.channel.v1.MsgTimeoutOnClose": { minGasPrice: minGasPrice, globalFee: globalfeeParamsLow, - gasPrice: sdk.NewCoins(sdk.NewCoin("uatom", sdk.ZeroInt())), + gasPrice: sdk.NewCoins(sdk.NewCoin("uxion", sdk.ZeroInt())), gasLimit: testGasLimit, txMsg: ibcchanneltypes.NewMsgTimeout( ibcchanneltypes.Packet{}, 2, nil, ibcclienttypes.Height{}, ""), @@ -487,7 +495,7 @@ func (s *IntegrationTestSuite) TestGlobalFeeMinimumGasFeeAnteHandler() { "bypass msg gas usage exceeds maxTotalBypassMinFeeMsgGasUsage": { minGasPrice: minGasPrice, globalFee: globalfeeParamsLow, - gasPrice: sdk.NewCoins(sdk.NewCoin("uatom", sdk.ZeroInt())), + gasPrice: sdk.NewCoins(sdk.NewCoin("uxion", sdk.ZeroInt())), gasLimit: 2 * globfeetypes.DefaultmaxTotalBypassMinFeeMsgGasUsage, txMsg: ibcchanneltypes.NewMsgTimeout( ibcchanneltypes.Packet{}, 2, nil, ibcclienttypes.Height{}, ""), @@ -497,7 +505,7 @@ func (s *IntegrationTestSuite) TestGlobalFeeMinimumGasFeeAnteHandler() { "bypass msg gas usage equals to maxTotalBypassMinFeeMsgGasUsage": { minGasPrice: minGasPrice, globalFee: globalfeeParamsLow, - gasPrice: sdk.NewCoins(sdk.NewCoin("uatom", sdk.ZeroInt())), + gasPrice: sdk.NewCoins(sdk.NewCoin("uxion", sdk.ZeroInt())), gasLimit: globfeetypes.DefaultmaxTotalBypassMinFeeMsgGasUsage, txMsg: ibcchanneltypes.NewMsgTimeout( ibcchanneltypes.Packet{}, 3, nil, ibcclienttypes.Height{}, ""), @@ -517,7 +525,7 @@ func (s *IntegrationTestSuite) TestGlobalFeeMinimumGasFeeAnteHandler() { "msg type ibc, nonzero fee in globalfee denom": { minGasPrice: minGasPrice, globalFee: globalfeeParamsLow, - gasPrice: sdk.NewCoins(sdk.NewCoin("uatom", highFeeAmt)), + gasPrice: sdk.NewCoins(sdk.NewCoin("uxion", highFeeAmt)), gasLimit: testGasLimit, txMsg: ibcchanneltypes.NewMsgRecvPacket( ibcchanneltypes.Packet{}, nil, ibcclienttypes.Height{}, ""), @@ -547,7 +555,7 @@ func (s *IntegrationTestSuite) TestGlobalFeeMinimumGasFeeAnteHandler() { "msg type non-ibc, nonzero fee in globalfee denom": { minGasPrice: minGasPrice, globalFee: globalfeeParamsLow, - gasPrice: sdk.NewCoins(sdk.NewCoin("uatom", highFeeAmt)), + gasPrice: sdk.NewCoins(sdk.NewCoin("uxion", highFeeAmt)), gasLimit: testGasLimit, txMsg: testdata.NewTestMsg(addr1), txCheck: true, @@ -574,7 +582,7 @@ func (s *IntegrationTestSuite) TestGlobalFeeMinimumGasFeeAnteHandler() { "disable checkTx: min_gas_price is medium, global fee is low, tx fee is low": { minGasPrice: minGasPrice, globalFee: globalfeeParamsLow, - gasPrice: sdk.NewCoins(sdk.NewCoin("uatom", lowFeeAmt)), + gasPrice: sdk.NewCoins(sdk.NewCoin("uxion", lowFeeAmt)), gasLimit: testGasLimit, txMsg: testdata.NewTestMsg(addr1), txCheck: false, @@ -583,7 +591,7 @@ func (s *IntegrationTestSuite) TestGlobalFeeMinimumGasFeeAnteHandler() { "disable checkTx: min_gas_price is medium, global fee is low, tx is zero": { minGasPrice: minGasPrice, globalFee: globalfeeParamsLow, - gasPrice: sdk.NewCoins(sdk.NewCoin("uatom", sdk.ZeroInt())), + gasPrice: sdk.NewCoins(sdk.NewCoin("uxion", sdk.ZeroInt())), gasLimit: testGasLimit, txMsg: testdata.NewTestMsg(addr1), txCheck: false, @@ -609,6 +617,7 @@ func (s *IntegrationTestSuite) TestGlobalFeeMinimumGasFeeAnteHandler() { s.Run(name, func() { // set globalfees and min gas price globalfeeParams.MinimumGasPrices = tc.globalFee + fmt.Printf("Networkfee: %v\ngasPrice: %v\n", tc.globalFee, tc.gasPrice) _, antehandler := s.SetupTestGlobalFeeStoreAndMinGasPrice(tc.minGasPrice, globalfeeParams, bondDenom) // set fee decorator to ante handler @@ -638,7 +647,7 @@ func (s *IntegrationTestSuite) TestGlobalFeeMinimumGasFeeAnteHandler() { func (s *IntegrationTestSuite) TestGetMinGasPrice() { expCoins := sdk.Coins{ sdk.NewCoin("photon", sdk.NewInt(2000)), - sdk.NewCoin("uatom", sdk.NewInt(3000)), + sdk.NewCoin("uxion", sdk.NewInt(3000)), } testCases := []struct { @@ -657,7 +666,7 @@ func (s *IntegrationTestSuite) TestGetMinGasPrice() { "zero coins min gas price should return empty coins", []sdk.DecCoin{ sdk.NewDecCoinFromDec("stake", sdk.NewDec(0)), - sdk.NewDecCoinFromDec("uatom", sdk.NewDec(0)), + sdk.NewDecCoinFromDec("uxion", sdk.NewDec(0)), }, uint64(1000), sdk.Coins{}, @@ -666,19 +675,19 @@ func (s *IntegrationTestSuite) TestGetMinGasPrice() { "zero coins, non-zero coins mix should return zero coin and non-zero coins", []sdk.DecCoin{ sdk.NewDecCoinFromDec("stake", sdk.NewDec(0)), - sdk.NewDecCoinFromDec("uatom", sdk.NewDec(1)), + sdk.NewDecCoinFromDec("uxion", sdk.NewDec(1)), }, uint64(1000), sdk.Coins{ sdk.NewCoin("stake", sdk.NewInt(0)), - sdk.NewCoin("uatom", sdk.NewInt(1000)), + sdk.NewCoin("uxion", sdk.NewInt(1000)), }, }, { "unsorted min gas price should return sorted coins", []sdk.DecCoin{ - sdk.NewDecCoinFromDec("uatom", sdk.NewDec(3)), + sdk.NewDecCoinFromDec("uxion", sdk.NewDec(3)), sdk.NewDecCoinFromDec("photon", sdk.NewDec(2)), }, uint64(1000), @@ -688,7 +697,7 @@ func (s *IntegrationTestSuite) TestGetMinGasPrice() { "sorted min gas price should return same conins", []sdk.DecCoin{ sdk.NewDecCoinFromDec("photon", sdk.NewDec(2)), - sdk.NewDecCoinFromDec("uatom", sdk.NewDec(3)), + sdk.NewDecCoinFromDec("uxion", sdk.NewDec(3)), }, uint64(1000), expCoins, @@ -767,7 +776,7 @@ func (s *IntegrationTestSuite) TestGetTxFeeRequired() { // create global fee params globalfeeParamsEmpty := &globfeetypes.Params{MinimumGasPrices: []sdk.DecCoin{}} - // setup tests with default global fee i.e. "0uatom" and empty local min gas prices + // setup tests with default global fee i.e. "0uxion" and empty local min gas prices feeDecorator, _ := s.SetupTestGlobalFeeStoreAndMinGasPrice([]sdk.DecCoin{}, globalfeeParamsEmpty, noBondDenom) // set a subspace that doesn't have the stakingtypes.KeyBondDenom key registred @@ -778,7 +787,7 @@ func (s *IntegrationTestSuite) TestGetTxFeeRequired() { s.Require().Equal(err.Error(), "empty staking bond denomination") // set non-zero local min gas prices - localMinGasPrices := sdk.NewCoins(sdk.NewCoin("uatom", sdk.NewInt(1))) + localMinGasPrices := sdk.NewCoins(sdk.NewCoin("uxion", sdk.NewInt(1))) // setup tests with non-empty local min gas prices feeDecorator, _ = s.SetupTestGlobalFeeStoreAndMinGasPrice( @@ -792,8 +801,9 @@ func (s *IntegrationTestSuite) TestGetTxFeeRequired() { priv1, _, addr1 := testdata.KeyTestPubAddr() privs, accNums, accSeqs := []cryptotypes.PrivKey{priv1}, []uint64{0}, []uint64{0} + //privfee, accNums, accSeqs := []cryptotypes.PrivKey{priv2}, []uint64{0}, []uint64{0} s.Require().NoError(s.txBuilder.SetMsgs(testdata.NewTestMsg(addr1))) - s.txBuilder.SetFeeAmount(sdk.NewCoins(sdk.NewCoin("uatom", sdk.ZeroInt()))) + s.txBuilder.SetFeeAmount(sdk.NewCoins(sdk.NewCoin("uxion", sdk.ZeroInt()))) s.txBuilder.SetGasLimit(uint64(1)) tx, err := s.CreateTestTx(privs, accNums, accSeqs, s.ctx.ChainID()) diff --git a/x/globalfee/ante/antetest/fee_test_setup.go b/x/globalfee/ante/antetest/fee_test_setup.go index d58aac6d..754c07a0 100644 --- a/x/globalfee/ante/antetest/fee_test_setup.go +++ b/x/globalfee/ante/antetest/fee_test_setup.go @@ -15,12 +15,9 @@ import ( xauthsigning "github.com/cosmos/cosmos-sdk/x/auth/signing" "github.com/cosmos/cosmos-sdk/x/params/types" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" - "github.com/golang/mock/gomock" "github.com/stretchr/testify/suite" xionfeeante "github.com/burnt-labs/xion/x/globalfee/ante" - antetestutil "github.com/cosmos/cosmos-sdk/x/auth/ante/testutil" - authtestutil "github.com/cosmos/cosmos-sdk/x/auth/testutil" xionapp "github.com/burnt-labs/xion/app" "github.com/burnt-labs/xion/x/globalfee" @@ -37,7 +34,7 @@ type IntegrationTestSuite struct { txBuilder client.TxBuilder } -var testBondDenom = "uatom" +var testBondDenom = "uxion" func (s *IntegrationTestSuite) SetupTest() { app := xionapp.Setup(s.T()) @@ -71,15 +68,8 @@ func (s *IntegrationTestSuite) SetupTestGlobalFeeStoreAndMinGasPrice(minGasPrice stakingParam := stakingtypes.DefaultParams() stakingParam.BondDenom = testBondDenom - ctrl := gomock.NewController(nil) - //authKeeper = authtestutil. - //bankKeeper = authtestutil.NewMockBankKeeper(ctrl) - ak := antetestutil.NewMockAccountKeeper(ctrl) - bk := authtestutil.NewMockBankKeeper(ctrl) - fgk := antetestutil.NewMockFeegrantKeeper(ctrl) - // build fee decorator - feeDecorator := xionfeeante.NewFeeDecorator(subspace, ak, bk, fgk, nil, bondDenom) + feeDecorator := xionfeeante.NewFeeDecorator(subspace, bondDenom) // chain fee decorator to antehandler antehandler := sdk.ChainAnteDecorators(feeDecorator) diff --git a/x/globalfee/ante/fee.go b/x/globalfee/ante/fee.go index 421ca717..c9a3d313 100644 --- a/x/globalfee/ante/fee.go +++ b/x/globalfee/ante/fee.go @@ -12,10 +12,6 @@ import ( "github.com/burnt-labs/xion/x/globalfee" "github.com/burnt-labs/xion/x/globalfee/types" - - authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - - authante "github.com/cosmos/cosmos-sdk/x/auth/ante" ) // FeeWithBypassDecorator checks if the transaction's fee is at least as large @@ -34,28 +30,16 @@ var _ sdk.AnteDecorator = FeeDecorator{} type FeeDecorator struct { GlobalMinFeeParamSource globalfee.ParamSource StakingKeeperBondDenom func(sdk.Context) string - accountKeeper authante.AccountKeeper - bankKeeper authtypes.BankKeeper - feegrantKeeper FeegrantKeeper - txFeeChecker authante.TxFeeChecker } -func NewFeeDecorator(globalfeeSubspace paramtypes.Subspace, ak authante.AccountKeeper, bk authtypes.BankKeeper, fk authante.FeegrantKeeper, tfc authante.TxFeeChecker, stakingKeeperDenom func(sdk.Context) string) FeeDecorator { +func NewFeeDecorator(globalfeeSubspace paramtypes.Subspace, stakingKeeperDenom func(sdk.Context) string) FeeDecorator { if !globalfeeSubspace.HasKeyTable() { panic("global fee paramspace was not set up via module") } - if tfc == nil { - tfc = checkTxFeeWithValidatorMinGasPrices - } - return FeeDecorator{ GlobalMinFeeParamSource: globalfeeSubspace, StakingKeeperBondDenom: stakingKeeperDenom, - txFeeChecker: tfc, - accountKeeper: ak, - bankKeeper: bk, - feegrantKeeper: fk, } } @@ -68,7 +52,7 @@ func (mfd FeeDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, ne // Do not check minimum-gas-prices and global fees during simulations if simulate { - return mfd.Deduct(ctx, tx, simulate, next) + return next(ctx, tx, simulate) } // Get the required fees, as per xion specification max(network_fees, local_validator_fees) @@ -121,7 +105,7 @@ func (mfd FeeDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, ne allowedToBypassMinFee := allBypassMsgs && doesNotExceedMaxGasUsage if allowedToBypassMinFee { - return mfd.Deduct(ctx, tx, simulate, next) + return next(ctx, tx, simulate) } // if the msg does not satisfy bypass condition and the feeCoins denoms are subset of feeRequired, @@ -132,7 +116,7 @@ func (mfd FeeDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, ne // otherwise, err if len(feeCoins) == 0 { if len(zeroCoinFeesDenomReq) != 0 { - return mfd.Deduct(ctx, tx, simulate, next) + return next(ctx, tx, simulate) } return ctx, sdkerrors.Wrapf(sdkerrors.ErrInsufficientFee, "insufficient fees; got: %s required: %s", feeCoins.String(), feeRequired.String()) } @@ -140,7 +124,7 @@ func (mfd FeeDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, ne // when feeCoins != [] // special case: if TX has at least one of the zeroCoinFeesDenomReq, then it should pass if len(feeCoinsZeroDenom) > 0 { - return mfd.Deduct(ctx, tx, simulate, next) + return next(ctx, tx, simulate) } // After all the checks, the tx is confirmed: @@ -159,7 +143,8 @@ func (mfd FeeDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, ne return ctx, sdkerrors.Wrap(sdkerrors.ErrInsufficientFee, errMsg) } - return mfd.DeductFee(ctx, tx, feeRequired, simulate, next) // needs to deduct requried fee + // we should pick max between feeRequired & tx Fee + return next(ctx, tx, simulate) } // GetTxFeeRequired returns the required fees for the given FeeTx. @@ -183,7 +168,6 @@ func (mfd FeeDecorator) GetTxFeeRequired(ctx sdk.Context, tx sdk.FeeTx) (sdk.Coi // Get local minimum-gas-prices localFees := GetMinGasPrice(ctx, int64(tx.GetGas())) - return MaxCoins(globalFees, localFees), nil } @@ -281,112 +265,3 @@ func GetMinGasPrice(ctx sdk.Context, gasLimit int64) sdk.Coins { return requiredFees.Sort() } - -// Deduct Fee - Replaces Standard auth ante handler behavior by passing a network fee -// CONTRACT: the network fee in the xion network is determined by max(local_validator_fee, minimum_gas_param) -func (mfd FeeDecorator) DeductFee(ctx sdk.Context, tx sdk.Tx, networkFee sdk.Coins, simulate bool, next sdk.AnteHandler) (sdk.Context, error) { - feeTx, err := CheckFeeTx(ctx, tx) - if err != nil { - return ctx, err - } - - ctx, err = CheckGas(ctx, feeTx, simulate) - if err != nil { - return ctx, err - } - - var priority int64 - - if err := mfd.checkDeductFee(ctx, tx, networkFee); err != nil { - return ctx, err - } - - newCtx := ctx.WithPriority(priority) - - return next(newCtx, tx, simulate) -} - -// Deduct Fee - Replaces Standard auth ante handler. -func (mfd FeeDecorator) Deduct(ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler) (sdk.Context, error) { - feeTx, err := CheckFeeTx(ctx, tx) - if err != nil { - return ctx, err - } - - ctx, err = CheckGas(ctx, feeTx, simulate) - if err != nil { - return ctx, err - } - - var priority int64 - - fee := feeTx.GetFee() - - if !simulate { - fee, priority, err = mfd.txFeeChecker(ctx, tx) - if err != nil { - return ctx, err - } - } - if err := mfd.checkDeductFee(ctx, tx, fee); err != nil { - return ctx, err - } - - newCtx := ctx.WithPriority(priority) - - return next(newCtx, tx, simulate) -} - -func (mfd FeeDecorator) checkDeductFee(ctx sdk.Context, sdkTx sdk.Tx, fee sdk.Coins) error { - feeTx, ok := sdkTx.(sdk.FeeTx) - if !ok { - return sdkerrors.Wrap(sdkerrors.ErrTxDecode, "Tx must be a FeeTx") - } - - if addr := mfd.accountKeeper.GetModuleAddress(authtypes.FeeCollectorName); addr == nil { - return fmt.Errorf("fee collector module account (%s) has not been set", authtypes.FeeCollectorName) - } - - feePayer := feeTx.FeePayer() - feeGranter := feeTx.FeeGranter() - deductFeesFrom := feePayer - - // if feegranter set deduct fee from feegranter account. - // this works with only when feegrant enabled. - if feeGranter != nil { - if mfd.feegrantKeeper == nil { - return sdkerrors.ErrInvalidRequest.Wrap("fee grants are not enabled") - } else if !feeGranter.Equals(feePayer) { - err := mfd.feegrantKeeper.UseGrantedFees(ctx, feeGranter, feePayer, fee, sdkTx.GetMsgs()) - if err != nil { - return sdkerrors.Wrapf(err, "%s does not allow to pay fees for %s", feeGranter, feePayer) - } - } - - deductFeesFrom = feeGranter - } - - deductFeesFromAcc := mfd.accountKeeper.GetAccount(ctx, deductFeesFrom) - if deductFeesFromAcc == nil { - return sdkerrors.ErrUnknownAddress.Wrapf("fee payer address: %s does not exist", deductFeesFrom) - } - - // deduct the fees - if !fee.IsZero() { - err := DeductFees(mfd.bankKeeper, ctx, deductFeesFromAcc, fee) - if err != nil { - return err - } - } - - events := sdk.Events{ - sdk.NewEvent( - sdk.EventTypeTx, - sdk.NewAttribute(sdk.AttributeKeyFee, fee.String()), - sdk.NewAttribute(sdk.AttributeKeyFeePayer, deductFeesFrom.String()), - ), - } - ctx.EventManager().EmitEvents(events) - - return nil -} diff --git a/x/globalfee/ante/fee_utils.go b/x/globalfee/ante/fee_utils.go index 6c6e4e7d..96284b5d 100644 --- a/x/globalfee/ante/fee_utils.go +++ b/x/globalfee/ante/fee_utils.go @@ -3,7 +3,6 @@ package ante import ( sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" ) // ContainZeroCoins returns true if the given coins are empty or contain zero coins, @@ -138,17 +137,3 @@ func CheckFeeTx(ctx sdk.Context, tx sdk.Tx) (sdk.FeeTx, error) { } return feeTx, nil } - -// DeductFees deducts fees from the given account and send it to fee collector -func DeductFees(bankKeeper authtypes.BankKeeper, ctx sdk.Context, acc authtypes.AccountI, fees sdk.Coins) error { - if !fees.IsValid() { - return sdkerrors.Wrapf(sdkerrors.ErrInsufficientFee, "invalid fee amount: %s", fees) - } - - err := bankKeeper.SendCoinsFromAccountToModule(ctx, acc.GetAddress(), authtypes.FeeCollectorName, fees) - if err != nil { - return sdkerrors.Wrapf(sdkerrors.ErrInsufficientFunds, err.Error()) - } - - return nil -} From f47a25cf4cf118cdd3265aee55253c89d74524d7 Mon Sep 17 00:00:00 2001 From: Eduardo Diaz Date: Sun, 9 Jul 2023 22:48:08 -0400 Subject: [PATCH 113/501] fix genesis test --- app/app.go | 6 ++++-- x/globalfee/alias.go | 2 ++ x/globalfee/ante/antetest/fee_test.go | 4 ---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/app.go b/app/app.go index cb5d6520..efff9300 100644 --- a/app/app.go +++ b/app/app.go @@ -221,6 +221,7 @@ var ( consensus.AppModuleBasic{}, // non sdk modules wasm.AppModuleBasic{}, + globalfee.AppModuleBasic{}, xion.AppModuleBasic{}, ibc.AppModuleBasic{}, ibctm.AppModuleBasic{}, @@ -242,6 +243,7 @@ var ( ibcfeetypes.ModuleName: nil, icatypes.ModuleName: nil, wasm.ModuleName: {authtypes.Burner}, + globalfee.ModuleName: nil, xiontypes.ModuleName: nil, } ) @@ -341,7 +343,7 @@ func NewWasmApp( // non sdk store keys ibcexported.StoreKey, ibctransfertypes.StoreKey, ibcfeetypes.StoreKey, wasm.StoreKey, icahosttypes.StoreKey, - icacontrollertypes.StoreKey, xiontypes.StoreKey, + icacontrollertypes.StoreKey, globalfee.StoreKey, xiontypes.StoreKey, ) tkeys := sdk.NewTransientStoreKeys(paramstypes.TStoreKey) @@ -1083,9 +1085,9 @@ func initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino paramsKeeper.Subspace(ibcexported.ModuleName) paramsKeeper.Subspace(icahosttypes.SubModuleName) paramsKeeper.Subspace(icacontrollertypes.SubModuleName) + paramsKeeper.Subspace(globalfee.ModuleName) paramsKeeper.Subspace(xiontypes.ModuleName) paramsKeeper.Subspace(wasm.ModuleName) - paramsKeeper.Subspace(globalfee.ModuleName) return paramsKeeper } diff --git a/x/globalfee/alias.go b/x/globalfee/alias.go index e6ddaab8..c789fb46 100644 --- a/x/globalfee/alias.go +++ b/x/globalfee/alias.go @@ -6,4 +6,6 @@ import ( const ( ModuleName = types.ModuleName + + StoreKey = ModuleName ) diff --git a/x/globalfee/ante/antetest/fee_test.go b/x/globalfee/ante/antetest/fee_test.go index 92924efc..89357b06 100644 --- a/x/globalfee/ante/antetest/fee_test.go +++ b/x/globalfee/ante/antetest/fee_test.go @@ -1,7 +1,6 @@ package antetest import ( - "fmt" "testing" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" @@ -35,8 +34,6 @@ func (s *IntegrationTestSuite) TestGetDefaultGlobalFees() { } } -// TODO: investigate globalfeeParamsContain0, consider removing the secondary denom - // Test global fees and min_gas_price with bypass msg types. // Please note even globalfee=0, min_gas_price=0, we do not let fee=0random_denom pass. // Paid fees are already sanitized by removing zero coins(through feeFlag parsing), so use sdk.NewCoins() to create it. @@ -617,7 +614,6 @@ func (s *IntegrationTestSuite) TestGlobalFeeMinimumGasFeeAnteHandler() { s.Run(name, func() { // set globalfees and min gas price globalfeeParams.MinimumGasPrices = tc.globalFee - fmt.Printf("Networkfee: %v\ngasPrice: %v\n", tc.globalFee, tc.gasPrice) _, antehandler := s.SetupTestGlobalFeeStoreAndMinGasPrice(tc.minGasPrice, globalfeeParams, bondDenom) // set fee decorator to ante handler From 72a3e770724d968542d93b8d23220f571927d3bb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 12 Jul 2023 21:45:38 +0000 Subject: [PATCH 114/501] Bump gotest.tools/v3 from 3.4.0 to 3.5.0 Bumps [gotest.tools/v3](https://github.com/gotestyourself/gotest.tools) from 3.4.0 to 3.5.0. - [Release notes](https://github.com/gotestyourself/gotest.tools/releases) - [Commits](https://github.com/gotestyourself/gotest.tools/compare/v3.4.0...v3.5.0) --- updated-dependencies: - dependency-name: gotest.tools/v3 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 5011aae4..517afde2 100644 --- a/go.mod +++ b/go.mod @@ -44,7 +44,7 @@ require ( github.com/cometbft/cometbft-db v0.8.0 github.com/golang/mock v1.6.0 github.com/spf13/viper v1.15.0 - gotest.tools/v3 v3.4.0 + gotest.tools/v3 v3.5.0 sigs.k8s.io/yaml v1.3.0 ) diff --git a/go.sum b/go.sum index df8a9cac..cac18d7f 100644 --- a/go.sum +++ b/go.sum @@ -1606,8 +1606,8 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C 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.4.0 h1:ZazjZUfuVeZGLAmlKKuyv3IKP5orXcwtOwDQH6YVr6o= -gotest.tools/v3 v3.4.0/go.mod h1:CtbdzLSsqVhDgMtKsx03ird5YTGB3ar27v0u/yKBW5g= +gotest.tools/v3 v3.5.0 h1:Ljk6PdHdOhAb5aDMWXjDLMMhph+BpztA4v1QdqEW2eY= +gotest.tools/v3 v3.5.0/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= 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= From 4484a71d00b14f0f8f194299c9de4bc6f300582e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 Jul 2023 10:14:03 +0000 Subject: [PATCH 115/501] Bump docker/login-action from 1 to 2 Bumps [docker/login-action](https://github.com/docker/login-action) from 1 to 2. - [Release notes](https://github.com/docker/login-action/releases) - [Commits](https://github.com/docker/login-action/compare/v1...v2) --- updated-dependencies: - dependency-name: docker/login-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/integration-tests.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index a3581d03..78f5f0b3 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -26,7 +26,7 @@ jobs: - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 - name: container-login - uses: docker/login-action@v1 + uses: docker/login-action@v2 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} @@ -80,7 +80,7 @@ jobs: - name: checkout uses: actions/checkout@v2 - name: container-login - uses: docker/login-action@v1 + uses: docker/login-action@v2 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} From 3148f4e259ab298ac1aaee8b769f5e150f84235c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 Jul 2023 10:18:44 +0000 Subject: [PATCH 116/501] Bump github.com/spf13/viper from 1.15.0 to 1.16.0 Bumps [github.com/spf13/viper](https://github.com/spf13/viper) from 1.15.0 to 1.16.0. - [Release notes](https://github.com/spf13/viper/releases) - [Commits](https://github.com/spf13/viper/compare/v1.15.0...v1.16.0) --- updated-dependencies: - dependency-name: github.com/spf13/viper dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- go.mod | 25 +++++++++++++------------ go.sum | 56 +++++++++++++++++++++++++++++++------------------------- 2 files changed, 44 insertions(+), 37 deletions(-) diff --git a/go.mod b/go.mod index b5f72514..6cf3a9c9 100644 --- a/go.mod +++ b/go.mod @@ -26,7 +26,7 @@ require ( github.com/spf13/pflag v1.0.5 // indirect github.com/stretchr/testify v1.8.3 github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d - google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4 + google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 google.golang.org/grpc v1.55.0 gopkg.in/yaml.v2 v2.4.0 // indirect ) @@ -43,16 +43,16 @@ require ( github.com/cometbft/cometbft v0.37.1 github.com/cometbft/cometbft-db v0.8.0 github.com/golang/mock v1.6.0 - github.com/spf13/viper v1.15.0 + github.com/spf13/viper v1.16.0 gotest.tools/v3 v3.5.0 sigs.k8s.io/yaml v1.3.0 ) require ( cloud.google.com/go v0.110.0 // indirect - cloud.google.com/go/compute v1.18.0 // indirect + cloud.google.com/go/compute v1.19.0 // indirect cloud.google.com/go/compute/metadata v0.2.3 // indirect - cloud.google.com/go/iam v0.12.0 // indirect + cloud.google.com/go/iam v0.13.0 // indirect cloud.google.com/go/storage v1.29.0 // indirect cosmossdk.io/log v1.1.0 // indirect filippo.io/edwards25519 v1.0.0 // indirect @@ -98,9 +98,10 @@ require ( github.com/google/btree v1.1.2 // indirect github.com/google/go-cmp v0.5.9 // indirect github.com/google/orderedcode v0.0.1 // indirect + github.com/google/s2a-go v0.1.3 // indirect github.com/google/uuid v1.3.0 // indirect github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect - github.com/googleapis/gax-go/v2 v2.7.0 // indirect + github.com/googleapis/gax-go/v2 v2.8.0 // indirect github.com/gorilla/handlers v1.5.1 // indirect github.com/gorilla/websocket v1.5.0 // indirect github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 // indirect @@ -136,7 +137,7 @@ require ( github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/mtibben/percent v0.2.1 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect - github.com/pelletier/go-toml/v2 v2.0.7 // indirect + github.com/pelletier/go-toml/v2 v2.0.8 // indirect github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_model v0.3.0 // indirect @@ -146,7 +147,7 @@ require ( github.com/rs/cors v1.8.3 // indirect github.com/rs/zerolog v1.29.1 // indirect github.com/sasha-s/go-deadlock v0.3.1 // indirect - github.com/spf13/afero v1.9.3 // indirect + github.com/spf13/afero v1.9.5 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/subosito/gotenv v1.4.2 // indirect github.com/tendermint/go-amino v0.16.0 // indirect @@ -156,15 +157,15 @@ require ( github.com/zondax/ledger-go v0.14.1 // indirect go.etcd.io/bbolt v1.3.7 // indirect go.opencensus.io v0.24.0 // indirect - golang.org/x/crypto v0.7.0 // indirect + golang.org/x/crypto v0.9.0 // indirect golang.org/x/exp v0.0.0-20230515195305-f3d0a9c9a5cc // indirect - golang.org/x/net v0.9.0 // indirect - golang.org/x/oauth2 v0.6.0 // indirect + golang.org/x/net v0.10.0 // indirect + golang.org/x/oauth2 v0.7.0 // indirect golang.org/x/sys v0.8.0 // indirect - golang.org/x/term v0.7.0 // indirect + golang.org/x/term v0.8.0 // indirect golang.org/x/text v0.9.0 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect - google.golang.org/api v0.110.0 // indirect + google.golang.org/api v0.122.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/protobuf v1.30.0 // indirect gopkg.in/ini.v1 v1.67.0 // indirect diff --git a/go.sum b/go.sum index 0ca6b8d5..df4038f9 100644 --- a/go.sum +++ b/go.sum @@ -70,8 +70,8 @@ cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= -cloud.google.com/go/compute v1.18.0 h1:FEigFqoDbys2cvFkZ9Fjq4gnHBP55anJ0yQyau2f9oY= -cloud.google.com/go/compute v1.18.0/go.mod h1:1X7yHxec2Ga+Ss6jPyjxRxpu2uu7PLgsOVXvgU0yacs= +cloud.google.com/go/compute v1.19.0 h1:+9zda3WGgW1ZSTlVppLCYFIr48Pa35q1uG2N1itbCEQ= +cloud.google.com/go/compute v1.19.0/go.mod h1:rikpw2y+UMidAe9tISo04EHNOIf42RLYF/q8Bs93scU= cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= @@ -111,8 +111,8 @@ cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y97 cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= -cloud.google.com/go/iam v0.12.0 h1:DRtTY29b75ciH6Ov1PHb4/iat2CLCvrOm40Q0a6DFpE= -cloud.google.com/go/iam v0.12.0/go.mod h1:knyHGviacl11zrtZUoDuYpDgLjvr28sLQaG0YB2GYAY= +cloud.google.com/go/iam v0.13.0 h1:+CmB+K0J/33d0zSQ9SlFWUeCCEn5XJA0ZMZ3pHE9u8k= +cloud.google.com/go/iam v0.13.0/go.mod h1:ljOg+rcNfzZ5d6f1nAUJ8ZIxOaZUVoS14bKCtaLZ/D0= cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= @@ -552,6 +552,8 @@ github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/s2a-go v0.1.3 h1:FAgZmpLl/SXurPEZyCMPBIiiYeTbqfjlbdnCNTAkbGE= +github.com/google/s2a-go v0.1.3/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= @@ -570,8 +572,8 @@ github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99 github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= -github.com/googleapis/gax-go/v2 v2.7.0 h1:IcsPKeInNvYi7eqSaDjiZqDDKu5rsmunY0Y1YupQSSQ= -github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8= +github.com/googleapis/gax-go/v2 v2.8.0 h1:UBtEZqx1bjXtOQ5BVTkuYghXrr3N4V123VKJK67vJZc= +github.com/googleapis/gax-go/v2 v2.8.0/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI= github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= @@ -805,8 +807,8 @@ github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144T github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= -github.com/pelletier/go-toml/v2 v2.0.7 h1:muncTPStnKRos5dpVKULv2FVd4bMOhNePj9CjgDb8Us= -github.com/pelletier/go-toml/v2 v2.0.7/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek= +github.com/pelletier/go-toml/v2 v2.0.8 h1:0ctb6s9mE31h0/lhu+J6OPmVeDxJn+kYnJc2jZR9tGQ= +github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08 h1:hDSdbBuw3Lefr6R18ax0tZ2BJeNB3NehB3trOwYBsdU= @@ -897,8 +899,8 @@ github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasO github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/afero v1.9.3 h1:41FoI0fD7OR7mGcKE/aOiLkGreyf8ifIOQmJANWogMk= -github.com/spf13/afero v1.9.3/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= +github.com/spf13/afero v1.9.5 h1:stMpOSZFs//0Lv29HduCmli3GUfpFoF3Y1Q/aXj/wVM= +github.com/spf13/afero v1.9.5/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA= github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48= @@ -914,8 +916,8 @@ github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnIn github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/spf13/viper v1.15.0 h1:js3yy885G8xwJa6iOISGFwd+qlUo5AvyXb7CiihdtiU= -github.com/spf13/viper v1.15.0/go.mod h1:fFcTBJxvhhzSJiZy8n+PeW6t8l+KeT/uTARa0jHOQLA= +github.com/spf13/viper v1.16.0 h1:rGGH0XDZhdUOryiDWjmIvUSWpbNqisK8Wk0Vyefw8hc= +github.com/spf13/viper v1.16.0/go.mod h1:yg78JgCJcbrQOvV9YLXgkLaZqUidkY9K+Dd1FofRzQg= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= @@ -1005,9 +1007,10 @@ golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= 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-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.7.0 h1:AvwMYaRytfdeVt3u6mLaxYtErKYjxA2OXjJ1HHq6t3A= -golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= +golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.9.0 h1:LF6fAI+IutBocDJ2OT0Q1g8plpYljMZ4+lty+dsqw3g= +golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= 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= @@ -1096,6 +1099,7 @@ golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLd golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= @@ -1108,8 +1112,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= -golang.org/x/net v0.9.0 h1:aWJ/m6xSmxWBx+V0XRHTlrYrPG56jKsLdTFmsSsCzOM= -golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= +golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= 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= @@ -1135,8 +1139,8 @@ golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= -golang.org/x/oauth2 v0.6.0 h1:Lh8GPgSKBfWSwFvtuWOfeI3aAAnbXTSutYxJiOJFgIw= -golang.org/x/oauth2 v0.6.0/go.mod h1:ycmewcwgD4Rpr3eZJLSB4Kyyljb3qDh40vJ8STE5HKw= +golang.org/x/oauth2 v0.7.0 h1:qe6s0zUXlPX80/dITx3440hWZ7GwMwgDDyrSGTPJG/g= +golang.org/x/oauth2 v0.7.0/go.mod h1:hPLQkd9LyjfXTiRohC/41GhcFqxisoUQ99sCUOHO9x4= 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= @@ -1151,6 +1155,7 @@ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/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.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI= 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= @@ -1253,8 +1258,8 @@ golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.7.0 h1:BEvjmm5fURWqcfbSKTdpkDXYBrUS1c0m8agp14W48vQ= -golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= +golang.org/x/term v0.8.0 h1:n5xxQn2i3PC0yLAbjTpNT85q/Kgzcr2gIoX9OrJUols= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= 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= @@ -1264,6 +1269,7 @@ 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.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= @@ -1392,8 +1398,8 @@ google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= -google.golang.org/api v0.110.0 h1:l+rh0KYUooe9JGbGVx71tbFo4SMbMTXK3I3ia2QSEeU= -google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= +google.golang.org/api v0.122.0 h1:zDobeejm3E7pEG1mNHvdxvjs5XJoCMzyNH+CmwL94Es= +google.golang.org/api v0.122.0/go.mod h1:gcitW0lvnyWjSp9nKxAbdHKIZ6vF4aajGueeslZOyms= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1511,8 +1517,8 @@ google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqw google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= -google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4 h1:DdoeryqhaXp1LtT/emMP1BRJPHHKFi5akj/nbx/zNTA= -google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s= +google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 h1:KpwkzHKEF7B9Zxg18WzOa7djJ+Ha5DzthMyZYQfEn2A= +google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= From 6d92aae1d7b133cc91476f4e877f3970ff36bfc0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 Jul 2023 10:29:04 +0000 Subject: [PATCH 117/501] Bump actions/checkout from 2 to 3 Bumps [actions/checkout](https://github.com/actions/checkout) from 2 to 3. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v2...v3) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/integration-tests.yml | 4 ++-- .github/workflows/tests.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index 78f5f0b3..bfa2d53b 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -22,7 +22,7 @@ jobs: runs-on: ubuntu-latest steps: - name: checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 - name: container-login @@ -78,7 +78,7 @@ jobs: with: go-version: ^1.18 - name: checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: container-login uses: docker/login-action@v2 with: diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 07fba01b..2875e246 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -9,7 +9,7 @@ jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - uses: technote-space/get-diff-action@v6 with: PATTERNS: | From 166de93ed633e6056c9cd7cae6976d4c835669c8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 Jul 2023 10:40:05 +0000 Subject: [PATCH 118/501] Bump github.com/cometbft/cometbft from 0.37.1 to 0.37.2 Bumps [github.com/cometbft/cometbft](https://github.com/cometbft/cometbft) from 0.37.1 to 0.37.2. - [Release notes](https://github.com/cometbft/cometbft/releases) - [Changelog](https://github.com/cometbft/cometbft/blob/v0.37.2/CHANGELOG.md) - [Commits](https://github.com/cometbft/cometbft/compare/v0.37.1...v0.37.2) --- updated-dependencies: - dependency-name: github.com/cometbft/cometbft dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- go.mod | 2 +- go.sum | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 6b8c2220..a3131ad6 100644 --- a/go.mod +++ b/go.mod @@ -40,7 +40,7 @@ require ( cosmossdk.io/tools/rosetta v0.2.1 github.com/CosmWasm/wasmd v0.40.1 github.com/armon/go-metrics v0.4.1 - github.com/cometbft/cometbft v0.37.1 + github.com/cometbft/cometbft v0.37.2 github.com/cometbft/cometbft-db v0.8.0 github.com/golang/mock v1.6.0 github.com/spf13/viper v1.16.0 diff --git a/go.sum b/go.sum index 35f2e0b1..be25895a 100644 --- a/go.sum +++ b/go.sum @@ -306,8 +306,8 @@ github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:z github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/coinbase/rosetta-sdk-go/types v1.0.0 h1:jpVIwLcPoOeCR6o1tU+Xv7r5bMONNbHU7MuEHboiFuA= github.com/coinbase/rosetta-sdk-go/types v1.0.0/go.mod h1:eq7W2TMRH22GTW0N0beDnN931DW0/WOI1R2sdHNHG4c= -github.com/cometbft/cometbft v0.37.1 h1:KLxkQTK2hICXYq21U2hn1W5hOVYUdQgDQ1uB+90xPIg= -github.com/cometbft/cometbft v0.37.1/go.mod h1:Y2MMMN//O5K4YKd8ze4r9jmk4Y7h0ajqILXbH5JQFVs= +github.com/cometbft/cometbft v0.37.2 h1:XB0yyHGT0lwmJlFmM4+rsRnczPlHoAKFX6K8Zgc2/Jc= +github.com/cometbft/cometbft v0.37.2/go.mod h1:Y2MMMN//O5K4YKd8ze4r9jmk4Y7h0ajqILXbH5JQFVs= github.com/cometbft/cometbft-db v0.8.0 h1:vUMDaH3ApkX8m0KZvOFFy9b5DZHBAjsnEuo9AKVZpjo= github.com/cometbft/cometbft-db v0.8.0/go.mod h1:6ASCP4pfhmrCBpfk01/9E1SI29nD3HfVHrY4PG8x5c0= github.com/confio/ics23/go v0.9.0 h1:cWs+wdbS2KRPZezoaaj+qBleXgUk5WOQFMP3CQFGTr4= @@ -935,6 +935,7 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= 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.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8= From 687dc2a2efd24fc0066ba998d56bb78f3cfd44a6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 Jul 2023 10:40:29 +0000 Subject: [PATCH 119/501] Bump cosmossdk.io/errors from 1.0.0-beta.7 to 1.0.0 Bumps [cosmossdk.io/errors](https://github.com/cosmos/cosmos-sdk) from 1.0.0-beta.7 to 1.0.0. - [Release notes](https://github.com/cosmos/cosmos-sdk/releases) - [Changelog](https://github.com/cosmos/cosmos-sdk/blob/main/CHANGELOG.md) - [Commits](https://github.com/cosmos/cosmos-sdk/compare/errors/v1.0.0-beta.7...log/v1.0.0) --- updated-dependencies: - dependency-name: cosmossdk.io/errors dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- go.mod | 18 +++++++++--------- go.sum | 37 +++++++++++++++++++------------------ 2 files changed, 28 insertions(+), 27 deletions(-) diff --git a/go.mod b/go.mod index 6b8c2220..f6373001 100644 --- a/go.mod +++ b/go.mod @@ -27,7 +27,7 @@ require ( github.com/stretchr/testify v1.8.4 github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 - google.golang.org/grpc v1.55.0 + google.golang.org/grpc v1.56.2 gopkg.in/yaml.v2 v2.4.0 // indirect ) @@ -35,7 +35,7 @@ require ( cosmossdk.io/api v0.3.1 cosmossdk.io/core v0.5.1 cosmossdk.io/depinject v1.0.0-alpha.3 - cosmossdk.io/errors v1.0.0-beta.7 + cosmossdk.io/errors v1.0.0 cosmossdk.io/math v1.0.1 cosmossdk.io/tools/rosetta v0.2.1 github.com/CosmWasm/wasmd v0.40.1 @@ -50,7 +50,7 @@ require ( require ( cloud.google.com/go v0.110.0 // indirect - cloud.google.com/go/compute v1.19.0 // indirect + cloud.google.com/go/compute v1.19.1 // indirect cloud.google.com/go/compute/metadata v0.2.3 // indirect cloud.google.com/go/iam v0.13.0 // indirect cloud.google.com/go/storage v1.29.0 // indirect @@ -157,17 +157,17 @@ require ( github.com/zondax/ledger-go v0.14.1 // indirect go.etcd.io/bbolt v1.3.7 // indirect go.opencensus.io v0.24.0 // indirect - golang.org/x/crypto v0.9.0 // indirect + golang.org/x/crypto v0.11.0 // indirect golang.org/x/exp v0.0.0-20230515195305-f3d0a9c9a5cc // indirect - golang.org/x/net v0.10.0 // indirect + golang.org/x/net v0.12.0 // indirect golang.org/x/oauth2 v0.7.0 // indirect - golang.org/x/sys v0.8.0 // indirect - golang.org/x/term v0.8.0 // indirect - golang.org/x/text v0.9.0 // indirect + golang.org/x/sys v0.10.0 // indirect + golang.org/x/term v0.10.0 // indirect + golang.org/x/text v0.11.0 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect google.golang.org/api v0.122.0 // indirect google.golang.org/appengine v1.6.7 // indirect - google.golang.org/protobuf v1.30.0 // indirect + google.golang.org/protobuf v1.31.0 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect nhooyr.io/websocket v1.8.6 // indirect diff --git a/go.sum b/go.sum index 35f2e0b1..96686956 100644 --- a/go.sum +++ b/go.sum @@ -70,8 +70,8 @@ cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= -cloud.google.com/go/compute v1.19.0 h1:+9zda3WGgW1ZSTlVppLCYFIr48Pa35q1uG2N1itbCEQ= -cloud.google.com/go/compute v1.19.0/go.mod h1:rikpw2y+UMidAe9tISo04EHNOIf42RLYF/q8Bs93scU= +cloud.google.com/go/compute v1.19.1 h1:am86mquDUgjGNWxiGn+5PGLbmgiWXlE/yNWpIpNvuXY= +cloud.google.com/go/compute v1.19.1/go.mod h1:6ylj3a05WF8leseCdIf77NK0g1ey+nj5IKd5/kvShxE= cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= @@ -194,8 +194,8 @@ cosmossdk.io/core v0.5.1 h1:vQVtFrIYOQJDV3f7rw4pjjVqc1id4+mE0L9hHP66pyI= cosmossdk.io/core v0.5.1/go.mod h1:KZtwHCLjcFuo0nmDc24Xy6CRNEL9Vl/MeimQ2aC7NLE= cosmossdk.io/depinject v1.0.0-alpha.3 h1:6evFIgj//Y3w09bqOUOzEpFj5tsxBqdc5CfkO7z+zfw= cosmossdk.io/depinject v1.0.0-alpha.3/go.mod h1:eRbcdQ7MRpIPEM5YUJh8k97nxHpYbc3sMUnEtt8HPWU= -cosmossdk.io/errors v1.0.0-beta.7 h1:gypHW76pTQGVnHKo6QBkb4yFOJjC+sUGRc5Al3Odj1w= -cosmossdk.io/errors v1.0.0-beta.7/go.mod h1:mz6FQMJRku4bY7aqS/Gwfcmr/ue91roMEKAmDUDpBfE= +cosmossdk.io/errors v1.0.0 h1:nxF07lmlBbB8NKQhtJ+sJm6ef5uV1XkvPXG2bUntb04= +cosmossdk.io/errors v1.0.0/go.mod h1:+hJZLuhdDE0pYN8HkOrVNwrIOYvUGnn6+4fjnJs/oV0= cosmossdk.io/log v1.1.0 h1:v0ogPHYeTzPcBTcPR1A3j1hkei4pZama8kz8LKlCMv0= cosmossdk.io/log v1.1.0/go.mod h1:6zjroETlcDs+mm62gd8Ig7mZ+N+fVOZS91V17H+M4N4= cosmossdk.io/math v1.0.1 h1:Qx3ifyOPaMLNH/89WeZFH268yCvU4xEcnPLu3sJqPPg= @@ -935,6 +935,7 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= 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.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8= @@ -1009,8 +1010,8 @@ golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.9.0 h1:LF6fAI+IutBocDJ2OT0Q1g8plpYljMZ4+lty+dsqw3g= -golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= +golang.org/x/crypto v0.11.0 h1:6Ewdq3tDic1mg5xRO4milcWCfMVQhI4NkqWWvqejpuA= +golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= 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= @@ -1112,8 +1113,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= -golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= -golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.12.0 h1:cfawfvKITfUsFCeJIHJrbSxpeu/E81khclypR0GVT50= +golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= 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= @@ -1253,13 +1254,13 @@ golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.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 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU= -golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA= +golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.8.0 h1:n5xxQn2i3PC0yLAbjTpNT85q/Kgzcr2gIoX9OrJUols= -golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.10.0 h1:3R7pNqamzBraeqj/Tj8qt1aQ2HpmlC+Cx/qL/7hn4/c= +golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o= 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= @@ -1271,8 +1272,8 @@ 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.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= -golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.11.0 h1:LAntKIrcmeSKERyiOh0XMV39LXS8IE9UL2yP7+f5ij4= +golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1560,8 +1561,8 @@ google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACu google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.55.0 h1:3Oj82/tFSCeUrRTg/5E/7d/W5A1tj6Ky1ABAuZuv5ag= -google.golang.org/grpc v1.55.0/go.mod h1:iYEXKGkEBhg1PjZQvoYEVPTDkHo1/bjTnfwTeGONTY8= +google.golang.org/grpc v1.56.2 h1:fVRFRnXvU+x6C4IlHZewvJOVHoOv1TUuQyoRsYnB4bI= +google.golang.org/grpc v1.56.2/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= 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= @@ -1578,8 +1579,8 @@ google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= -google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= +google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= 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= From 4ac4bc69891a4b63c07c1f381d991e69f449e77d Mon Sep 17 00:00:00 2001 From: Eduardo Diaz Date: Thu, 13 Jul 2023 08:55:14 -0400 Subject: [PATCH 120/501] add go.work to gitignore, provide default .go.work for VSCode compatibility --- .gitignore | 4 + go.work => .go.work | 0 go.work.sum | 1541 ------------------------------------------- 3 files changed, 4 insertions(+), 1541 deletions(-) rename go.work => .go.work (100%) delete mode 100644 go.work.sum diff --git a/.gitignore b/.gitignore index f5f5405d..9a538199 100644 --- a/.gitignore +++ b/.gitignore @@ -46,3 +46,7 @@ dependency-graph.png *.out *.synctex.gz contract_tests/* + +# Go +go.work +go.work.sum diff --git a/go.work b/.go.work similarity index 100% rename from go.work rename to .go.work diff --git a/go.work.sum b/go.work.sum deleted file mode 100644 index 09a20d41..00000000 --- a/go.work.sum +++ /dev/null @@ -1,1541 +0,0 @@ -4d63.com/gochecknoglobals v0.1.0 h1:zeZSRqj5yCg28tCkIV/z/lWbwvNm5qnKVS15PI8nhD0= -4d63.com/gochecknoglobals v0.1.0/go.mod h1:wfdC5ZjKSPr7CybKEcgJhUOgeAQW1+7WcyK8OvUilfo= -cloud.google.com/go v0.105.0/go.mod h1:PrLgOJNe5nfE9UMxKxgXj4mD3voiP+YQ6gdt6KMFOKM= -cloud.google.com/go v0.107.0/go.mod h1:wpc2eNrD7hXUTy8EKS10jkxpZBjASrORK7goS+3YX2I= -cloud.google.com/go/accessapproval v1.5.0/go.mod h1:HFy3tuiGvMdcd/u+Cu5b9NkO1pEICJ46IR82PoUdplw= -cloud.google.com/go/accessapproval v1.6.0 h1:x0cEHro/JFPd7eS4BlEWNTMecIj2HdXjOVB5BtvwER0= -cloud.google.com/go/accessapproval v1.6.0/go.mod h1:R0EiYnwV5fsRFiKZkPHr6mwyk2wxUJ30nL4j2pcFY2E= -cloud.google.com/go/accesscontextmanager v1.4.0/go.mod h1:/Kjh7BBu/Gh83sv+K60vN9QE5NJcd80sU33vIe2IFPE= -cloud.google.com/go/accesscontextmanager v1.6.0 h1:r7DpDlWkCMtH/w+gu6Yq//EeYgNWSUbR1+n8ZYr4YWk= -cloud.google.com/go/accesscontextmanager v1.6.0/go.mod h1:8XCvZWfYw3K/ji0iVnp+6pu7huxoQTLmxAbVjbloTtM= -cloud.google.com/go/aiplatform v1.27.0/go.mod h1:Bvxqtl40l0WImSb04d0hXFU7gDOiq9jQmorivIiWcKg= -cloud.google.com/go/aiplatform v1.35.0 h1:8frB0cIswlhVnYnGrMr+JjZaNC7DHZahvoGHpU9n+RY= -cloud.google.com/go/aiplatform v1.35.0/go.mod h1:7MFT/vCaOyZT/4IIFfxH4ErVg/4ku6lKv3w0+tFTgXQ= -cloud.google.com/go/analytics v0.18.0 h1:uN80RHQeT2jGA3uAFDZSBnKdful4bFw0IHJV6t3EkqU= -cloud.google.com/go/analytics v0.18.0/go.mod h1:ZkeHGQlcIPkw0R/GW+boWHhCOR43xz9RN/jn7WcqfIE= -cloud.google.com/go/apigateway v1.4.0/go.mod h1:pHVY9MKGaH9PQ3pJ4YLzoj6U5FUDeDFBllIz7WmzJoc= -cloud.google.com/go/apigateway v1.5.0 h1:ZI9mVO7x3E9RK/BURm2p1aw9YTBSCQe3klmyP1WxWEg= -cloud.google.com/go/apigateway v1.5.0/go.mod h1:GpnZR3Q4rR7LVu5951qfXPJCHquZt02jf7xQx7kpqN8= -cloud.google.com/go/apigeeconnect v1.4.0/go.mod h1:kV4NwOKqjvt2JYR0AoIWo2QGfoRtn/pkS3QlHp0Ni04= -cloud.google.com/go/apigeeconnect v1.5.0 h1:sWOmgDyAsi1AZ48XRHcATC0tsi9SkPT7DA/+VCfkaeA= -cloud.google.com/go/apigeeconnect v1.5.0/go.mod h1:KFaCqvBRU6idyhSNyn3vlHXc8VMDJdRmwDF6JyFRqZ8= -cloud.google.com/go/apigeeregistry v0.4.0/go.mod h1:EUG4PGcsZvxOXAdyEghIdXwAEi/4MEaoqLMLDMIwKXY= -cloud.google.com/go/apigeeregistry v0.5.0 h1:BwTPDPTBlYIoQGiwtRUsNFRDZ24cT/02Xb3yFH614YQ= -cloud.google.com/go/apigeeregistry v0.5.0/go.mod h1:YR5+s0BVNZfVOUkMa5pAR2xGd0A473vA5M7j247o1wM= -cloud.google.com/go/apikeys v0.4.0/go.mod h1:XATS/yqZbaBK0HOssf+ALHp8jAlNHUgyfprvNcBIszU= -cloud.google.com/go/apikeys v0.5.0 h1:+77+/BhFuU476/s78kYiWHObxaYBHsC6Us+Gd7W9pJ4= -cloud.google.com/go/apikeys v0.5.0/go.mod h1:5aQfwY4D+ewMMWScd3hm2en3hCj+BROlyrt3ytS7KLI= -cloud.google.com/go/appengine v1.5.0/go.mod h1:TfasSozdkFI0zeoxW3PTBLiNqRmzraodCWatWI9Dmak= -cloud.google.com/go/appengine v1.6.0 h1:uTDtjzuHpig1lrf8lycxNSKrthiTDgXnadu+WxYEKxQ= -cloud.google.com/go/appengine v1.6.0/go.mod h1:hg6i0J/BD2cKmDJbaFSYHFyZkgBEfQrDg/X0V5fJn84= -cloud.google.com/go/area120 v0.7.1 h1:ugckkFh4XkHJMPhTIx0CyvdoBxmOpMe8rNs4Ok8GAag= -cloud.google.com/go/area120 v0.7.1/go.mod h1:j84i4E1RboTWjKtZVWXPqvK5VHQFJRF2c1Nm69pWm9k= -cloud.google.com/go/artifactregistry v1.9.0/go.mod h1:2K2RqvA2CYvAeARHRkLDhMDJ3OXy26h3XW+3/Jh2uYc= -cloud.google.com/go/artifactregistry v1.11.2 h1:G9kjfHsDto5AdKK93hkHWHsY9Oe+6Nv66i7o/KgUO8E= -cloud.google.com/go/artifactregistry v1.11.2/go.mod h1:nLZns771ZGAwVLzTX/7Al6R9ehma4WUEhZGWV6CeQNQ= -cloud.google.com/go/asset v1.10.0/go.mod h1:pLz7uokL80qKhzKr4xXGvBQXnzHn5evJAEAtZiIb0wY= -cloud.google.com/go/asset v1.11.1 h1:yObuRcVfexhYQuIWbjNt+9PVPikXIRhERXZxga7qAAY= -cloud.google.com/go/asset v1.11.1/go.mod h1:fSwLhbRvC9p9CXQHJ3BgFeQNM4c9x10lqlrdEUYXlJo= -cloud.google.com/go/assuredworkloads v1.9.0/go.mod h1:kFuI1P78bplYtT77Tb1hi0FMxM0vVpRC7VVoJC3ZoT0= -cloud.google.com/go/assuredworkloads v1.10.0 h1:VLGnVFta+N4WM+ASHbhc14ZOItOabDLH1MSoDv+Xuag= -cloud.google.com/go/assuredworkloads v1.10.0/go.mod h1:kwdUQuXcedVdsIaKgKTp9t0UJkE5+PAVNhdQm4ZVq2E= -cloud.google.com/go/automl v1.8.0/go.mod h1:xWx7G/aPEe/NP+qzYXktoBSDfjO+vnKMGgsApGJJquM= -cloud.google.com/go/automl v1.12.0 h1:50VugllC+U4IGl3tDNcZaWvApHBTrn/TvyHDJ0wM+Uw= -cloud.google.com/go/automl v1.12.0/go.mod h1:tWDcHDp86aMIuHmyvjuKeeHEGq76lD7ZqfGLN6B0NuU= -cloud.google.com/go/baremetalsolution v0.4.0/go.mod h1:BymplhAadOO/eBa7KewQ0Ppg4A4Wplbn+PsFKRLo0uI= -cloud.google.com/go/baremetalsolution v0.5.0 h1:2AipdYXL0VxMboelTTw8c1UJ7gYu35LZYUbuRv9Q28s= -cloud.google.com/go/baremetalsolution v0.5.0/go.mod h1:dXGxEkmR9BMwxhzBhV0AioD0ULBmuLZI8CdwalUxuss= -cloud.google.com/go/batch v0.4.0/go.mod h1:WZkHnP43R/QCGQsZ+0JyG4i79ranE2u8xvjq/9+STPE= -cloud.google.com/go/batch v0.7.0 h1:YbMt0E6BtqeD5FvSv1d56jbVsWEzlGm55lYte+M6Mzs= -cloud.google.com/go/batch v0.7.0/go.mod h1:vLZN95s6teRUqRQ4s3RLDsH8PvboqBK+rn1oevL159g= -cloud.google.com/go/beyondcorp v0.3.0/go.mod h1:E5U5lcrcXMsCuoDNyGrpyTm/hn7ne941Jz2vmksAxW8= -cloud.google.com/go/beyondcorp v0.4.0 h1:qwXDVYf4fQ9DrKci8/40X1zaKYxzYK07vSdPeI9mEQw= -cloud.google.com/go/beyondcorp v0.4.0/go.mod h1:3ApA0mbhHx6YImmuubf5pyW8srKnCEPON32/5hj+RmM= -cloud.google.com/go/bigquery v1.44.0/go.mod h1:0Y33VqXTEsbamHJvJHdFmtqHvMIY28aK1+dFsvaChGc= -cloud.google.com/go/bigquery v1.48.0 h1:u+fhS1jJOkPO9vdM84M8HO5VznTfVUicBeoXNKD26ho= -cloud.google.com/go/bigquery v1.48.0/go.mod h1:QAwSz+ipNgfL5jxiaK7weyOhzdoAy1zFm0Nf1fysJac= -cloud.google.com/go/billing v1.7.0/go.mod h1:q457N3Hbj9lYwwRbnlD7vUpyjq6u5U1RAOArInEiD5Y= -cloud.google.com/go/billing v1.12.0 h1:k8pngyiI8uAFhVAhH5+iXSa3Me406XW17LYWZ/3Fr84= -cloud.google.com/go/billing v1.12.0/go.mod h1:yKrZio/eu+okO/2McZEbch17O5CB5NpZhhXG6Z766ss= -cloud.google.com/go/binaryauthorization v1.4.0/go.mod h1:tsSPQrBd77VLplV70GUhBf/Zm3FsKmgSqgm4UmiDItk= -cloud.google.com/go/binaryauthorization v1.5.0 h1:d3pMDBCCNivxt5a4eaV7FwL7cSH0H7RrEnFrTb1QKWs= -cloud.google.com/go/binaryauthorization v1.5.0/go.mod h1:OSe4OU1nN/VswXKRBmciKpo9LulY41gch5c68htf3/Q= -cloud.google.com/go/certificatemanager v1.4.0/go.mod h1:vowpercVFyqs8ABSmrdV+GiFf2H/ch3KyudYQEMM590= -cloud.google.com/go/certificatemanager v1.6.0 h1:5C5UWeSt8Jkgp7OWn2rCkLmYurar/vIWIoSQ2+LaTOc= -cloud.google.com/go/certificatemanager v1.6.0/go.mod h1:3Hh64rCKjRAX8dXgRAyOcY5vQ/fE1sh8o+Mdd6KPgY8= -cloud.google.com/go/channel v1.9.0/go.mod h1:jcu05W0my9Vx4mt3/rEHpfxc9eKi9XwsdDL8yBMbKUk= -cloud.google.com/go/channel v1.11.0 h1:/ToBJYu+7wATtd3h8T7hpc4+5NfzlJMDRZjPLIm4EZk= -cloud.google.com/go/channel v1.11.0/go.mod h1:IdtI0uWGqhEeatSB62VOoJ8FSUhJ9/+iGkJVqp74CGE= -cloud.google.com/go/cloudbuild v1.4.0/go.mod h1:5Qwa40LHiOXmz3386FrjrYM93rM/hdRr7b53sySrTqA= -cloud.google.com/go/cloudbuild v1.7.0 h1:osBOHQJqLPqNfHfkRQXz6sCKAIEKRrupA9NaAGiLN4s= -cloud.google.com/go/cloudbuild v1.7.0/go.mod h1:zb5tWh2XI6lR9zQmsm1VRA+7OCuve5d8S+zJUul8KTg= -cloud.google.com/go/clouddms v1.4.0/go.mod h1:Eh7sUGCC+aKry14O1NRljhjyrr0NFC0G2cjwX0cByRk= -cloud.google.com/go/clouddms v1.5.0 h1:E7v4TpDGUyEm1C/4KIrpVSOCTm0P6vWdHT0I4mostRA= -cloud.google.com/go/clouddms v1.5.0/go.mod h1:QSxQnhikCLUw13iAbffF2CZxAER3xDGNHjsTAkQJcQA= -cloud.google.com/go/cloudtasks v1.8.0/go.mod h1:gQXUIwCSOI4yPVK7DgTVFiiP0ZW/eQkydWzwVMdHxrI= -cloud.google.com/go/cloudtasks v1.9.0 h1:Cc2/20hMhGLV2pBGk/i6zNY+eTT9IsV3mrK6TKBu3gs= -cloud.google.com/go/cloudtasks v1.9.0/go.mod h1:w+EyLsVkLWHcOaqNEyvcKAsWp9p29dL6uL9Nst1cI7Y= -cloud.google.com/go/compute v1.14.0/go.mod h1:YfLtxrj9sU4Yxv+sXzZkyPjEyPBZfXHUvjxega5vAdo= -cloud.google.com/go/compute v1.15.1/go.mod h1:bjjoF/NtFUrkD/urWfdHaKuOPDR5nWIs63rR+SXhcpA= -cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= -cloud.google.com/go/contactcenterinsights v1.4.0/go.mod h1:L2YzkGbPsv+vMQMCADxJoT9YiTTnSEd6fEvCeHTYVck= -cloud.google.com/go/contactcenterinsights v1.6.0 h1:jXIpfcH/VYSE1SYcPzO0n1VVb+sAamiLOgCw45JbOQk= -cloud.google.com/go/contactcenterinsights v1.6.0/go.mod h1:IIDlT6CLcDoyv79kDv8iWxMSTZhLxSCofVV5W6YFM/w= -cloud.google.com/go/container v1.7.0/go.mod h1:Dp5AHtmothHGX3DwwIHPgq45Y8KmNsgN3amoYfxVkLo= -cloud.google.com/go/container v1.13.1 h1:q8lTpyAsjcJZQCjGI8JJfcOG4ixl998vwe6TAgQROcM= -cloud.google.com/go/container v1.13.1/go.mod h1:6wgbMPeQRw9rSnKBCAJXnds3Pzj03C4JHamr8asWKy4= -cloud.google.com/go/containeranalysis v0.7.0 h1:kw0dDRJPIN8L50Nwm8qa5VuGKPrbVup5lM3ULrvuWrg= -cloud.google.com/go/containeranalysis v0.7.0/go.mod h1:9aUL+/vZ55P2CXfuZjS4UjQ9AgXoSw8Ts6lemfmxBxI= -cloud.google.com/go/datacatalog v1.8.0/go.mod h1:KYuoVOv9BM8EYz/4eMFxrr4DUKhGIOXxZoKYF5wdISM= -cloud.google.com/go/datacatalog v1.12.0 h1:3uaYULZRLByPdbuUvacGeqneudztEM4xqKQsBcxbDnY= -cloud.google.com/go/datacatalog v1.12.0/go.mod h1:CWae8rFkfp6LzLumKOnmVh4+Zle4A3NXLzVJ1d1mRm0= -cloud.google.com/go/dataflow v0.8.0 h1:eYyD9o/8Nm6EttsKZaEGD84xC17bNgSKCu0ZxwqUbpg= -cloud.google.com/go/dataflow v0.8.0/go.mod h1:Rcf5YgTKPtQyYz8bLYhFoIV/vP39eL7fWNcSOyFfLJE= -cloud.google.com/go/dataform v0.5.0/go.mod h1:GFUYRe8IBa2hcomWplodVmUx/iTL0FrsauObOM3Ipr0= -cloud.google.com/go/dataform v0.6.0 h1:HBegGOzStIXPWo49FaVTzJOD4EPo8BndPFBUfsuoYe0= -cloud.google.com/go/dataform v0.6.0/go.mod h1:QPflImQy33e29VuapFdf19oPbE4aYTJxr31OAPV+ulA= -cloud.google.com/go/datafusion v1.5.0/go.mod h1:Kz+l1FGHB0J+4XF2fud96WMmRiq/wj8N9u007vyXZ2w= -cloud.google.com/go/datafusion v1.6.0 h1:sZjRnS3TWkGsu1LjYPFD/fHeMLZNXDK6PDHi2s2s/bk= -cloud.google.com/go/datafusion v1.6.0/go.mod h1:WBsMF8F1RhSXvVM8rCV3AeyWVxcC2xY6vith3iw3S+8= -cloud.google.com/go/datalabeling v0.7.0 h1:ch4qA2yvddGRUrlfwrNJCr79qLqhS9QBwofPHfFlDIk= -cloud.google.com/go/datalabeling v0.7.0/go.mod h1:WPQb1y08RJbmpM3ww0CSUAGweL0SxByuW2E+FU+wXcM= -cloud.google.com/go/dataplex v1.4.0/go.mod h1:X51GfLXEMVJ6UN47ESVqvlsRplbLhcsAt0kZCCKsU0A= -cloud.google.com/go/dataplex v1.5.2 h1:uSkmPwbgOWp3IFtCVEM0Xew80dczVyhNXkvAtTapRn8= -cloud.google.com/go/dataplex v1.5.2/go.mod h1:cVMgQHsmfRoI5KFYq4JtIBEUbYwc3c7tXmIDhRmNNVQ= -cloud.google.com/go/dataproc v1.8.0/go.mod h1:5OW+zNAH0pMpw14JVrPONsxMQYMBqJuzORhIBfBn9uI= -cloud.google.com/go/dataproc v1.12.0 h1:W47qHL3W4BPkAIbk4SWmIERwsWBaNnWm0P2sdx3YgGU= -cloud.google.com/go/dataproc v1.12.0/go.mod h1:zrF3aX0uV3ikkMz6z4uBbIKyhRITnxvr4i3IjKsKrw4= -cloud.google.com/go/dataqna v0.7.0 h1:yFzi/YU4YAdjyo7pXkBE2FeHbgz5OQQBVDdbErEHmVQ= -cloud.google.com/go/dataqna v0.7.0/go.mod h1:Lx9OcIIeqCrw1a6KdO3/5KMP1wAmTc0slZWwP12Qq3c= -cloud.google.com/go/datastore v1.10.0 h1:4siQRf4zTiAVt/oeH4GureGkApgb2vtPQAtOmhpqQwE= -cloud.google.com/go/datastore v1.10.0/go.mod h1:PC5UzAmDEkAmkfaknstTYbNpgE49HAgW2J1gcgUfmdM= -cloud.google.com/go/datastream v1.5.0/go.mod h1:6TZMMNPwjUqZHBKPQ1wwXpb0d5VDVPl2/XoS5yi88q4= -cloud.google.com/go/datastream v1.6.0 h1:v6j8C4p0TfXA9Wcea3iH7ZUm05Cx4BiPsH4vEkH7A9g= -cloud.google.com/go/datastream v1.6.0/go.mod h1:6LQSuswqLa7S4rPAOZFVjHIG3wJIjZcZrw8JDEDJuIs= -cloud.google.com/go/deploy v1.5.0/go.mod h1:ffgdD0B89tToyW/U/D2eL0jN2+IEV/3EMuXHA0l4r+s= -cloud.google.com/go/deploy v1.6.0 h1:hdXxUdVw+NOrCQeqg9eQPB3hF1mFEchoS3h+K4IAU9s= -cloud.google.com/go/deploy v1.6.0/go.mod h1:f9PTHehG/DjCom3QH0cntOVRm93uGBDt2vKzAPwpXQI= -cloud.google.com/go/dialogflow v1.29.0/go.mod h1:b+2bzMe+k1s9V+F2jbJwpHPzrnIyHihAdRFMtn2WXuM= -cloud.google.com/go/dialogflow v1.31.0 h1:TwmxDsdFcQdExfShoLRlTtdPTor8qSxNu9KZ13o+TUQ= -cloud.google.com/go/dialogflow v1.31.0/go.mod h1:cuoUccuL1Z+HADhyIA7dci3N5zUssgpBJmCzI6fNRB4= -cloud.google.com/go/dlp v1.7.0/go.mod h1:68ak9vCiMBjbasxeVD17hVPxDEck+ExiHavX8kiHG+Q= -cloud.google.com/go/dlp v1.9.0 h1:1JoJqezlgu6NWCroBxr4rOZnwNFILXr4cB9dMaSKO4A= -cloud.google.com/go/dlp v1.9.0/go.mod h1:qdgmqgTyReTz5/YNSSuueR8pl7hO0o9bQ39ZhtgkWp4= -cloud.google.com/go/documentai v1.10.0/go.mod h1:vod47hKQIPeCfN2QS/jULIvQTugbmdc0ZvxxfQY1bg4= -cloud.google.com/go/documentai v1.16.0 h1:tHZA9dB2xo3VaCP4JPxs5jHRntJnmg38kZ0UxlT/u90= -cloud.google.com/go/documentai v1.16.0/go.mod h1:o0o0DLTEZ+YnJZ+J4wNfTxmDVyrkzFvttBXXtYRMHkM= -cloud.google.com/go/domains v0.8.0 h1:2ti/o9tlWL4N+wIuWUNH+LbfgpwxPr8J1sv9RHA4bYQ= -cloud.google.com/go/domains v0.8.0/go.mod h1:M9i3MMDzGFXsydri9/vW+EWz9sWb4I6WyHqdlAk0idE= -cloud.google.com/go/edgecontainer v0.3.0 h1:i57Q4zg9j8h4UQoKTD7buXbLCvofmmV8+8owwSmM3ew= -cloud.google.com/go/edgecontainer v0.3.0/go.mod h1:FLDpP4nykgwwIfcLt6zInhprzw0lEi2P1fjO6Ie0qbc= -cloud.google.com/go/errorreporting v0.3.0 h1:kj1XEWMu8P0qlLhm3FwcaFsUvXChV/OraZwA70trRR0= -cloud.google.com/go/errorreporting v0.3.0/go.mod h1:xsP2yaAp+OAW4OIm60An2bbLpqIhKXdWR/tawvl7QzU= -cloud.google.com/go/essentialcontacts v1.4.0/go.mod h1:8tRldvHYsmnBCHdFpvU+GL75oWiBKl80BiqlFh9tp+8= -cloud.google.com/go/essentialcontacts v1.5.0 h1:gIzEhCoOT7bi+6QZqZIzX1Erj4SswMPIteNvYVlu+pM= -cloud.google.com/go/essentialcontacts v1.5.0/go.mod h1:ay29Z4zODTuwliK7SnX8E86aUF2CTzdNtvv42niCX0M= -cloud.google.com/go/eventarc v1.8.0/go.mod h1:imbzxkyAU4ubfsaKYdQg04WS1NvncblHEup4kvF+4gw= -cloud.google.com/go/eventarc v1.10.0 h1:4cELkxrOYntz1VRNi2deLRkOr+R6u175kF4hUyd/4Ms= -cloud.google.com/go/eventarc v1.10.0/go.mod h1:u3R35tmZ9HvswGRBnF48IlYgYeBcPUCjkr4BTdem2Kw= -cloud.google.com/go/filestore v1.4.0/go.mod h1:PaG5oDfo9r224f8OYXURtAsY+Fbyq/bLYoINEK8XQAI= -cloud.google.com/go/filestore v1.5.0 h1:M/iQpbNJw+ELfEvFAW2mAhcHOn1HQQzIkzqmA4njTwg= -cloud.google.com/go/filestore v1.5.0/go.mod h1:FqBXDWBp4YLHqRnVGveOkHDf8svj9r5+mUDLupOWEDs= -cloud.google.com/go/firestore v1.9.0 h1:IBlRyxgGySXu5VuW0RgGFlTtLukSnNkpDiEOMkQkmpA= -cloud.google.com/go/firestore v1.9.0/go.mod h1:HMkjKHNTtRyZNiMzu7YAsLr9K3X2udY2AMwDaMEQiiE= -cloud.google.com/go/functions v1.9.0/go.mod h1:Y+Dz8yGguzO3PpIjhLTbnqV1CWmgQ5UwtlpzoyquQ08= -cloud.google.com/go/functions v1.10.0 h1:WC0JiI5ZBTPSgjzFccqZ8TMkhoPRpDClN99KXhHJp6I= -cloud.google.com/go/functions v1.10.0/go.mod h1:0D3hEOe3DbEvCXtYOZHQZmD+SzYsi1YbI7dGvHfldXw= -cloud.google.com/go/gaming v1.8.0/go.mod h1:xAqjS8b7jAVW0KFYeRUxngo9My3f33kFmua++Pi+ggM= -cloud.google.com/go/gaming v1.9.0 h1:7vEhFnZmd931Mo7sZ6pJy7uQPDxF7m7v8xtBheG08tc= -cloud.google.com/go/gaming v1.9.0/go.mod h1:Fc7kEmCObylSWLO334NcO+O9QMDyz+TKC4v1D7X+Bc0= -cloud.google.com/go/gkebackup v0.3.0/go.mod h1:n/E671i1aOQvUxT541aTkCwExO/bTer2HDlj4TsBRAo= -cloud.google.com/go/gkebackup v0.4.0 h1:za3QZvw6ujR0uyqkhomKKKNoXDyqYGPJies3voUK8DA= -cloud.google.com/go/gkebackup v0.4.0/go.mod h1:byAyBGUwYGEEww7xsbnUTBHIYcOPy/PgUWUtOeRm9Vg= -cloud.google.com/go/gkeconnect v0.7.0 h1:gXYKciHS/Lgq0GJ5Kc9SzPA35NGc3yqu6SkjonpEr2Q= -cloud.google.com/go/gkeconnect v0.7.0/go.mod h1:SNfmVqPkaEi3bF/B3CNZOAYPYdg7sU+obZ+QTky2Myw= -cloud.google.com/go/gkehub v0.11.0 h1:C4p1ZboBOexyCgZSCq+QdP+xfta9+puxgHFy8cjbgYI= -cloud.google.com/go/gkehub v0.11.0/go.mod h1:JOWHlmN+GHyIbuWQPl47/C2RFhnFKH38jH9Ascu3n0E= -cloud.google.com/go/gkemulticloud v0.4.0/go.mod h1:E9gxVBnseLWCk24ch+P9+B2CoDFJZTyIgLKSalC7tuI= -cloud.google.com/go/gkemulticloud v0.5.0 h1:8I84Q4vl02rJRsFiinBxl7WCozfdLlUVBQuSrqr9Wtk= -cloud.google.com/go/gkemulticloud v0.5.0/go.mod h1:W0JDkiyi3Tqh0TJr//y19wyb1yf8llHVto2Htf2Ja3Y= -cloud.google.com/go/grafeas v0.2.0 h1:CYjC+xzdPvbV65gi6Dr4YowKcmLo045pm18L0DhdELM= -cloud.google.com/go/gsuiteaddons v1.4.0/go.mod h1:rZK5I8hht7u7HxFQcFei0+AtfS9uSushomRlg+3ua1o= -cloud.google.com/go/gsuiteaddons v1.5.0 h1:1mvhXqJzV0Vg5Fa95QwckljODJJfDFXV4pn+iL50zzA= -cloud.google.com/go/gsuiteaddons v1.5.0/go.mod h1:TFCClYLd64Eaa12sFVmUyG62tk4mdIsI7pAnSXRkcFo= -cloud.google.com/go/iam v0.8.0/go.mod h1:lga0/y3iH6CX7sYqypWJ33hf7kkfXJag67naqGESjkE= -cloud.google.com/go/iam v0.11.0/go.mod h1:9PiLDanza5D+oWFZiH1uG+RnRCfEGKoyl6yo4cgWZGY= -cloud.google.com/go/iap v1.5.0/go.mod h1:UH/CGgKd4KyohZL5Pt0jSKE4m3FR51qg6FKQ/z/Ix9A= -cloud.google.com/go/iap v1.6.0 h1:a6Heb3z12tUHJqXvmYqLhr7cWz3zzl566xtlbavD5Q0= -cloud.google.com/go/iap v1.6.0/go.mod h1:NSuvI9C/j7UdjGjIde7t7HBz+QTwBcapPE07+sSRcLk= -cloud.google.com/go/ids v1.2.0/go.mod h1:5WXvp4n25S0rA/mQWAg1YEEBBq6/s+7ml1RDCW1IrcY= -cloud.google.com/go/ids v1.3.0 h1:fodnCDtOXuMmS8LTC2y3h8t24U8F3eKWfhi+3LY6Qf0= -cloud.google.com/go/ids v1.3.0/go.mod h1:JBdTYwANikFKaDP6LtW5JAi4gubs57SVNQjemdt6xV4= -cloud.google.com/go/iot v1.4.0/go.mod h1:dIDxPOn0UvNDUMD8Ger7FIaTuvMkj+aGk94RPP0iV+g= -cloud.google.com/go/iot v1.5.0 h1:so1XASBu64OWGylrv5xjvsi6U+/CIR2KiRuZt+WLyKk= -cloud.google.com/go/iot v1.5.0/go.mod h1:mpz5259PDl3XJthEmh9+ap0affn/MqNSP4My77Qql9o= -cloud.google.com/go/kms v1.6.0/go.mod h1:Jjy850yySiasBUDi6KFUwUv2n1+o7QZFyuUJg6OgjA0= -cloud.google.com/go/kms v1.9.0 h1:b0votJQa/9DSsxgHwN33/tTLA7ZHVzfWhDCrfiXijSo= -cloud.google.com/go/kms v1.9.0/go.mod h1:qb1tPTgfF9RQP8e1wq4cLFErVuTJv7UsSC915J8dh3w= -cloud.google.com/go/language v1.8.0/go.mod h1:qYPVHf7SPoNNiCL2Dr0FfEFNil1qi3pQEyygwpgVKB8= -cloud.google.com/go/language v1.9.0 h1:7Ulo2mDk9huBoBi8zCE3ONOoBrL6UXfAI71CLQ9GEIM= -cloud.google.com/go/language v1.9.0/go.mod h1:Ns15WooPM5Ad/5no/0n81yUetis74g3zrbeJBE+ptUY= -cloud.google.com/go/lifesciences v0.8.0 h1:uWrMjWTsGjLZpCTWEAzYvyXj+7fhiZST45u9AgasasI= -cloud.google.com/go/lifesciences v0.8.0/go.mod h1:lFxiEOMqII6XggGbOnKiyZ7IBwoIqA84ClvoezaA/bo= -cloud.google.com/go/logging v1.6.1/go.mod h1:5ZO0mHHbvm8gEmeEUHrmDlTDSu5imF6MUP9OfilNXBw= -cloud.google.com/go/logging v1.7.0 h1:CJYxlNNNNAMkHp9em/YEXcfJg+rPDg7YfwoRpMU+t5I= -cloud.google.com/go/logging v1.7.0/go.mod h1:3xjP2CjkM3ZkO73aj4ASA5wRPGGCRrPIAeNqVNkzY8M= -cloud.google.com/go/longrunning v0.3.0/go.mod h1:qth9Y41RRSUE69rDcOn6DdK3HfQfsUI0YSmW3iIlLJc= -cloud.google.com/go/longrunning v0.4.1/go.mod h1:4iWDqhBZ70CvZ6BfETbvam3T8FMvLK+eFj0E6AaRQTo= -cloud.google.com/go/managedidentities v1.4.0/go.mod h1:NWSBYbEMgqmbZsLIyKvxrYbtqOsxY1ZrGM+9RgDqInM= -cloud.google.com/go/managedidentities v1.5.0 h1:ZRQ4k21/jAhrHBVKl/AY7SjgzeJwG1iZa+mJ82P+VNg= -cloud.google.com/go/managedidentities v1.5.0/go.mod h1:+dWcZ0JlUmpuxpIDfyP5pP5y0bLdRwOS4Lp7gMni/LA= -cloud.google.com/go/maps v0.1.0/go.mod h1:BQM97WGyfw9FWEmQMpZ5T6cpovXXSd1cGmFma94eubI= -cloud.google.com/go/maps v0.6.0 h1:soPzd0NABgCOGZavyZCAKrJ9L1JAwg3To6n5kuMCm98= -cloud.google.com/go/maps v0.6.0/go.mod h1:o6DAMMfb+aINHz/p/jbcY+mYeXBoZoxTfdSQ8VAJaCw= -cloud.google.com/go/mediatranslation v0.7.0 h1:anPxH+/WWt8Yc3EdoEJhPMBRF7EhIdz426A+tuoA0OU= -cloud.google.com/go/mediatranslation v0.7.0/go.mod h1:LCnB/gZr90ONOIQLgSXagp8XUW1ODs2UmUMvcgMfI2I= -cloud.google.com/go/memcache v1.7.0/go.mod h1:ywMKfjWhNtkQTxrWxCkCFkoPjLHPW6A7WOTVI8xy3LY= -cloud.google.com/go/memcache v1.9.0 h1:8/VEmWCpnETCrBwS3z4MhT+tIdKgR1Z4Tr2tvYH32rg= -cloud.google.com/go/memcache v1.9.0/go.mod h1:8oEyzXCu+zo9RzlEaEjHl4KkgjlNDaXbCQeQWlzNFJM= -cloud.google.com/go/metastore v1.8.0/go.mod h1:zHiMc4ZUpBiM7twCIFQmJ9JMEkDSyZS9U12uf7wHqSI= -cloud.google.com/go/metastore v1.10.0 h1:QCFhZVe2289KDBQ7WxaHV2rAmPrmRAdLC6gbjUd3HPo= -cloud.google.com/go/metastore v1.10.0/go.mod h1:fPEnH3g4JJAk+gMRnrAnoqyv2lpUCqJPWOodSaf45Eo= -cloud.google.com/go/monitoring v1.8.0/go.mod h1:E7PtoMJ1kQXWxPjB6mv2fhC5/15jInuulFdYYtlcvT4= -cloud.google.com/go/monitoring v1.12.0 h1:+X79DyOP/Ny23XIqSIb37AvFWSxDN15w/ktklVvPLso= -cloud.google.com/go/monitoring v1.12.0/go.mod h1:yx8Jj2fZNEkL/GYZyTLS4ZtZEZN8WtDEiEqG4kLK50w= -cloud.google.com/go/networkconnectivity v1.7.0/go.mod h1:RMuSbkdbPwNMQjB5HBWD5MpTBnNm39iAVpC3TmsExt8= -cloud.google.com/go/networkconnectivity v1.10.0 h1:DJwVcr97sd9XPc9rei0z1vUI2ExJyXpA11DSi+Yh7h4= -cloud.google.com/go/networkconnectivity v1.10.0/go.mod h1:UP4O4sWXJG13AqrTdQCD9TnLGEbtNRqjuaaA7bNjF5E= -cloud.google.com/go/networkmanagement v1.5.0/go.mod h1:ZnOeZ/evzUdUsnvRt792H0uYEnHQEMaz+REhhzJRcf4= -cloud.google.com/go/networkmanagement v1.6.0 h1:8KWEUNGcpSX9WwZXq7FtciuNGPdPdPN/ruDm769yAEM= -cloud.google.com/go/networkmanagement v1.6.0/go.mod h1:5pKPqyXjB/sgtvB5xqOemumoQNB7y95Q7S+4rjSOPYY= -cloud.google.com/go/networksecurity v0.7.0 h1:sAKgrzvEslukcwezyEIoXocU2vxWR1Zn7xMTp4uLR0E= -cloud.google.com/go/networksecurity v0.7.0/go.mod h1:mAnzoxx/8TBSyXEeESMy9OOYwo1v+gZ5eMRnsT5bC8k= -cloud.google.com/go/notebooks v1.5.0/go.mod h1:q8mwhnP9aR8Hpfnrc5iN5IBhrXUy8S2vuYs+kBJ/gu0= -cloud.google.com/go/notebooks v1.7.0 h1:mMI+/ETVBmCZjdiSYYkN6VFgFTR68kh3frJ8zWvg6go= -cloud.google.com/go/notebooks v1.7.0/go.mod h1:PVlaDGfJgj1fl1S3dUwhFMXFgfYGhYQt2164xOMONmE= -cloud.google.com/go/optimization v1.2.0/go.mod h1:Lr7SOHdRDENsh+WXVmQhQTrzdu9ybg0NecjHidBq6xs= -cloud.google.com/go/optimization v1.3.1 h1:dj8O4VOJRB4CUwZXdmwNViH1OtI0WtWL867/lnYH248= -cloud.google.com/go/optimization v1.3.1/go.mod h1:IvUSefKiwd1a5p0RgHDbWCIbDFgKuEdB+fPPuP0IDLI= -cloud.google.com/go/orchestration v1.4.0/go.mod h1:6W5NLFWs2TlniBphAViZEVhrXRSMgUGDfW7vrWKvsBk= -cloud.google.com/go/orchestration v1.6.0 h1:Vw+CEXo8M/FZ1rb4EjcLv0gJqqw89b7+g+C/EmniTb8= -cloud.google.com/go/orchestration v1.6.0/go.mod h1:M62Bevp7pkxStDfFfTuCOaXgaaqRAga1yKyoMtEoWPQ= -cloud.google.com/go/orgpolicy v1.5.0/go.mod h1:hZEc5q3wzwXJaKrsx5+Ewg0u1LxJ51nNFlext7Tanwc= -cloud.google.com/go/orgpolicy v1.10.0 h1:XDriMWug7sd0kYT1QKofRpRHzjad0bK8Q8uA9q+XrU4= -cloud.google.com/go/orgpolicy v1.10.0/go.mod h1:w1fo8b7rRqlXlIJbVhOMPrwVljyuW5mqssvBtU18ONc= -cloud.google.com/go/osconfig v1.10.0/go.mod h1:uMhCzqC5I8zfD9zDEAfvgVhDS8oIjySWh+l4WK6GnWw= -cloud.google.com/go/osconfig v1.11.0 h1:PkSQx4OHit5xz2bNyr11KGcaFccL5oqglFPdTboyqwQ= -cloud.google.com/go/osconfig v1.11.0/go.mod h1:aDICxrur2ogRd9zY5ytBLV89KEgT2MKB2L/n6x1ooPw= -cloud.google.com/go/oslogin v1.7.0/go.mod h1:e04SN0xO1UNJ1M5GP0vzVBFicIe4O53FOfcixIqTyXo= -cloud.google.com/go/oslogin v1.9.0 h1:whP7vhpmc+ufZa90eVpkfbgzJRK/Xomjz+XCD4aGwWw= -cloud.google.com/go/oslogin v1.9.0/go.mod h1:HNavntnH8nzrn8JCTT5fj18FuJLFJc4NaZJtBnQtKFs= -cloud.google.com/go/phishingprotection v0.7.0 h1:l6tDkT7qAEV49MNEJkEJTB6vOO/onbSOcNtAT09HPuA= -cloud.google.com/go/phishingprotection v0.7.0/go.mod h1:8qJI4QKHoda/sb/7/YmMQ2omRLSLYSu9bU0EKCNI+Lk= -cloud.google.com/go/policytroubleshooter v1.4.0/go.mod h1:DZT4BcRw3QoO8ota9xw/LKtPa8lKeCByYeKTIf/vxdE= -cloud.google.com/go/policytroubleshooter v1.5.0 h1:/fRzv4eqv9PDCEL7nBgJiA1EZxhdKMQ4/JIfheCdUZI= -cloud.google.com/go/policytroubleshooter v1.5.0/go.mod h1:Rz1WfV+1oIpPdN2VvvuboLVRsB1Hclg3CKQ53j9l8vw= -cloud.google.com/go/privatecatalog v0.7.0 h1:7d0gcifTV9As6zzBQo34ZsFiRRlENjD3kw0o3uHn+fY= -cloud.google.com/go/privatecatalog v0.7.0/go.mod h1:2s5ssIFO69F5csTXcwBP7NPFTZvps26xGzvQ2PQaBYg= -cloud.google.com/go/pubsub v1.27.1/go.mod h1:hQN39ymbV9geqBnfQq6Xf63yNhUAhv9CZhzp5O6qsW0= -cloud.google.com/go/pubsub v1.28.0 h1:XzabfdPx/+eNrsVVGLFgeUnQQKPGkMb8klRCeYK52is= -cloud.google.com/go/pubsub v1.28.0/go.mod h1:vuXFpwaVoIPQMGXqRyUQigu/AX1S3IWugR9xznmcXX8= -cloud.google.com/go/pubsublite v1.5.0/go.mod h1:xapqNQ1CuLfGi23Yda/9l4bBCKz/wC3KIJ5gKcxveZg= -cloud.google.com/go/pubsublite v1.6.0 h1:qh04RCSOnQDVHYmzT74ANu8WR9czAXG3Jl3TV4iR5no= -cloud.google.com/go/pubsublite v1.6.0/go.mod h1:1eFCS0U11xlOuMFV/0iBqw3zP12kddMeCbj/F3FSj9k= -cloud.google.com/go/recaptchaenterprise v1.3.1 h1:u6EznTGzIdsyOsvm+Xkw0aSuKFXQlyjGE9a4exk6iNQ= -cloud.google.com/go/recaptchaenterprise/v2 v2.5.0/go.mod h1:O8LzcHXN3rz0j+LBC91jrwI3R+1ZSZEWrfL7XHgNo9U= -cloud.google.com/go/recaptchaenterprise/v2 v2.6.0 h1:E9VgcQxj9M3HS945E3Jb53qd14xcpHBaEG1LgQhnxW8= -cloud.google.com/go/recaptchaenterprise/v2 v2.6.0/go.mod h1:RPauz9jeLtB3JVzg6nCbe12qNoaa8pXc4d/YukAmcnA= -cloud.google.com/go/recommendationengine v0.7.0 h1:VibRFCwWXrFebEWKHfZAt2kta6pS7Tlimsnms0fjv7k= -cloud.google.com/go/recommendationengine v0.7.0/go.mod h1:1reUcE3GIu6MeBz/h5xZJqNLuuVjNg1lmWMPyjatzac= -cloud.google.com/go/recommender v1.8.0/go.mod h1:PkjXrTT05BFKwxaUxQmtIlrtj0kph108r02ZZQ5FE70= -cloud.google.com/go/recommender v1.9.0 h1:ZnFRY5R6zOVk2IDS1Jbv5Bw+DExCI5rFumsTnMXiu/A= -cloud.google.com/go/recommender v1.9.0/go.mod h1:PnSsnZY7q+VL1uax2JWkt/UegHssxjUVVCrX52CuEmQ= -cloud.google.com/go/redis v1.10.0/go.mod h1:ThJf3mMBQtW18JzGgh41/Wld6vnDDc/F/F35UolRZPM= -cloud.google.com/go/redis v1.11.0 h1:JoAd3SkeDt3rLFAAxEvw6wV4t+8y4ZzfZcZmddqphQ8= -cloud.google.com/go/redis v1.11.0/go.mod h1:/X6eicana+BWcUda5PpwZC48o37SiFVTFSs0fWAJ7uQ= -cloud.google.com/go/resourcemanager v1.4.0/go.mod h1:MwxuzkumyTX7/a3n37gmsT3py7LIXwrShilPh3P1tR0= -cloud.google.com/go/resourcemanager v1.5.0 h1:m2RQU8UzBCIO+wsdwoehpuyAaF1i7ahFhj7TLocxuJE= -cloud.google.com/go/resourcemanager v1.5.0/go.mod h1:eQoXNAiAvCf5PXxWxXjhKQoTMaUSNrEfg+6qdf/wots= -cloud.google.com/go/resourcesettings v1.4.0/go.mod h1:ldiH9IJpcrlC3VSuCGvjR5of/ezRrOxFtpJoJo5SmXg= -cloud.google.com/go/resourcesettings v1.5.0 h1:8Dua37kQt27CCWHm4h/Q1XqCF6ByD7Ouu49xg95qJzI= -cloud.google.com/go/resourcesettings v1.5.0/go.mod h1:+xJF7QSG6undsQDfsCJyqWXyBwUoJLhetkRMDRnIoXA= -cloud.google.com/go/retail v1.11.0/go.mod h1:MBLk1NaWPmh6iVFSz9MeKG/Psyd7TAgm6y/9L2B4x9Y= -cloud.google.com/go/retail v1.12.0 h1:1Dda2OpFNzIb4qWgFZjYlpP7sxX3aLeypKG6A3H4Yys= -cloud.google.com/go/retail v1.12.0/go.mod h1:UMkelN/0Z8XvKymXFbD4EhFJlYKRx1FGhQkVPU5kF14= -cloud.google.com/go/run v0.3.0/go.mod h1:TuyY1+taHxTjrD0ZFk2iAR+xyOXEA0ztb7U3UNA0zBo= -cloud.google.com/go/run v0.8.0 h1:monNAz/FXgo8A31aR9sbrsv+bEbqy6H/arSgLOfA2Fk= -cloud.google.com/go/run v0.8.0/go.mod h1:VniEnuBwqjigv0A7ONfQUaEItaiCRVujlMqerPPiktM= -cloud.google.com/go/scheduler v1.7.0/go.mod h1:jyCiBqWW956uBjjPMMuX09n3x37mtyPJegEWKxRsn44= -cloud.google.com/go/scheduler v1.8.0 h1:NRzIXqVxpyoiyonpYOKJmVJ9iif/Acw36Jri+cVHZ9U= -cloud.google.com/go/scheduler v1.8.0/go.mod h1:TCET+Y5Gp1YgHT8py4nlg2Sew8nUHMqcpousDgXJVQc= -cloud.google.com/go/secretmanager v1.9.0/go.mod h1:b71qH2l1yHmWQHt9LC80akm86mX8AL6X1MA01dW8ht4= -cloud.google.com/go/secretmanager v1.10.0 h1:pu03bha7ukxF8otyPKTFdDz+rr9sE3YauS5PliDXK60= -cloud.google.com/go/secretmanager v1.10.0/go.mod h1:MfnrdvKMPNra9aZtQFvBcvRU54hbPD8/HayQdlUgJpU= -cloud.google.com/go/security v1.10.0/go.mod h1:QtOMZByJVlibUT2h9afNDWRZ1G96gVywH8T5GUSb9IA= -cloud.google.com/go/security v1.12.0 h1:WIyVxhrdex1geaAV0pC/4yXy/sZdurjHXLzMopcjers= -cloud.google.com/go/security v1.12.0/go.mod h1:rV6EhrpbNHrrxqlvW0BWAIawFWq3X90SduMJdFwtLB8= -cloud.google.com/go/securitycenter v1.16.0/go.mod h1:Q9GMaLQFUD+5ZTabrbujNWLtSLZIZF7SAR0wWECrjdk= -cloud.google.com/go/securitycenter v1.18.1 h1:DRUo2MFSq3Kt0a4hWRysdMHcu2obPwnSQNgHfOuwR4Q= -cloud.google.com/go/securitycenter v1.18.1/go.mod h1:0/25gAzCM/9OL9vVx4ChPeM/+DlfGQJDwBy/UC8AKK0= -cloud.google.com/go/servicecontrol v1.5.0/go.mod h1:qM0CnXHhyqKVuiZnGKrIurvVImCs8gmqWsDoqe9sU1s= -cloud.google.com/go/servicecontrol v1.11.0 h1:iEiMJgD1bzRL9Zu4JYDQUWfqZ+kRLX8wWZSCMBK8Qzs= -cloud.google.com/go/servicecontrol v1.11.0/go.mod h1:kFmTzYzTUIuZs0ycVqRHNaNhgR+UMUpw9n02l/pY+mc= -cloud.google.com/go/servicedirectory v1.7.0/go.mod h1:5p/U5oyvgYGYejufvxhgwjL8UVXjkuw7q5XcG10wx1U= -cloud.google.com/go/servicedirectory v1.8.0 h1:DPvPdb6O/lg7xK+BFKlzZN+w6upeJ/bbfcUnnqU66b8= -cloud.google.com/go/servicedirectory v1.8.0/go.mod h1:srXodfhY1GFIPvltunswqXpVxFPpZjf8nkKQT7XcXaY= -cloud.google.com/go/servicemanagement v1.5.0/go.mod h1:XGaCRe57kfqu4+lRxaFEAuqmjzF0r+gWHjWqKqBvKFo= -cloud.google.com/go/servicemanagement v1.6.0 h1:flWoX0eJy21+34I/7HPUbpr6xTHPVzws1xnecLFlUm0= -cloud.google.com/go/servicemanagement v1.6.0/go.mod h1:aWns7EeeCOtGEX4OvZUWCCJONRZeFKiptqKf1D0l/Jc= -cloud.google.com/go/serviceusage v1.4.0/go.mod h1:SB4yxXSaYVuUBYUml6qklyONXNLt83U0Rb+CXyhjEeU= -cloud.google.com/go/serviceusage v1.5.0 h1:fl1AGgOx7E2eyBmH5ofDXT9w8xGvEaEnHYyNYGkxaqg= -cloud.google.com/go/serviceusage v1.5.0/go.mod h1:w8U1JvqUqwJNPEOTQjrMHkw3IaIFLoLsPLvsE3xueec= -cloud.google.com/go/shell v1.4.0/go.mod h1:HDxPzZf3GkDdhExzD/gs8Grqk+dmYcEjGShZgYa9URw= -cloud.google.com/go/shell v1.6.0 h1:wT0Uw7ib7+AgZST9eCDygwTJn4+bHMDtZo5fh7kGWDU= -cloud.google.com/go/shell v1.6.0/go.mod h1:oHO8QACS90luWgxP3N9iZVuEiSF84zNyLytb+qE2f9A= -cloud.google.com/go/spanner v1.41.0/go.mod h1:MLYDBJR/dY4Wt7ZaMIQ7rXOTLjYrmxLE/5ve9vFfWos= -cloud.google.com/go/spanner v1.44.0 h1:fba7k2apz4aI0BE59/kbeaJ78dPOXSz2PSuBIfe7SBM= -cloud.google.com/go/spanner v1.44.0/go.mod h1:G8XIgYdOK+Fbcpbs7p2fiprDw4CaZX63whnSMLVBxjk= -cloud.google.com/go/speech v1.9.0/go.mod h1:xQ0jTcmnRFFM2RfX/U+rk6FQNUF6DQlydUSyoooSpco= -cloud.google.com/go/speech v1.14.1 h1:x4ZJWhop/sLtnIP97IMmPtD6ZF003eD8hykJ0lOgEtw= -cloud.google.com/go/speech v1.14.1/go.mod h1:gEosVRPJ9waG7zqqnsHpYTOoAS4KouMRLDFMekpJ0J0= -cloud.google.com/go/storage v1.28.1/go.mod h1:Qnisd4CqDdo6BGs2AD5LLnEsmSQ80wQ5ogcBBKhU86Y= -cloud.google.com/go/storagetransfer v1.6.0/go.mod h1:y77xm4CQV/ZhFZH75PLEXY0ROiS7Gh6pSKrM8dJyg6I= -cloud.google.com/go/storagetransfer v1.7.0 h1:doREJk5f36gq7yJDJ2HVGaYTuQ8Nh6JWm+6tPjdfh+g= -cloud.google.com/go/storagetransfer v1.7.0/go.mod h1:8Giuj1QNb1kfLAiWM1bN6dHzfdlDAVC9rv9abHot2W4= -cloud.google.com/go/talent v1.4.0/go.mod h1:ezFtAgVuRf8jRsvyE6EwmbTK5LKciD4KVnHuDEFmOOA= -cloud.google.com/go/talent v1.5.0 h1:nI9sVZPjMKiO2q3Uu0KhTDVov3Xrlpt63fghP9XjyEM= -cloud.google.com/go/talent v1.5.0/go.mod h1:G+ODMj9bsasAEJkQSzO2uHQWXHHXUomArjWQQYkqK6c= -cloud.google.com/go/texttospeech v1.5.0/go.mod h1:oKPLhR4n4ZdQqWKURdwxMy0uiTS1xU161C8W57Wkea4= -cloud.google.com/go/texttospeech v1.6.0 h1:H4g1ULStsbVtalbZGktyzXzw6jP26RjVGYx9RaYjBzc= -cloud.google.com/go/texttospeech v1.6.0/go.mod h1:YmwmFT8pj1aBblQOI3TfKmwibnsfvhIBzPXcW4EBovc= -cloud.google.com/go/tpu v1.4.0/go.mod h1:mjZaX8p0VBgllCzF6wcU2ovUXN9TONFLd7iz227X2Xg= -cloud.google.com/go/tpu v1.5.0 h1:/34T6CbSi+kTv5E19Q9zbU/ix8IviInZpzwz3rsFE+A= -cloud.google.com/go/tpu v1.5.0/go.mod h1:8zVo1rYDFuW2l4yZVY0R0fb/v44xLh3llq7RuV61fPM= -cloud.google.com/go/trace v1.4.0/go.mod h1:UG0v8UBqzusp+z63o7FK74SdFE+AXpCLdFb1rshXG+Y= -cloud.google.com/go/trace v1.8.0 h1:GFPLxbp5/FzdgTzor3nlNYNxMd6hLmzkE7sA9F0qQcA= -cloud.google.com/go/trace v1.8.0/go.mod h1:zH7vcsbAhklH8hWFig58HvxcxyQbaIqMarMg9hn5ECA= -cloud.google.com/go/translate v1.4.0/go.mod h1:06Dn/ppvLD6WvA5Rhdp029IX2Mi3Mn7fpMRLPvXT5Wg= -cloud.google.com/go/translate v1.6.0 h1:oBW4KVgcUq4OAXGdKEdyV7lqWiA3keQ3+8FKreAQv4g= -cloud.google.com/go/translate v1.6.0/go.mod h1:lMGRudH1pu7I3n3PETiOB2507gf3HnfLV8qlkHZEyos= -cloud.google.com/go/video v1.9.0/go.mod h1:0RhNKFRF5v92f8dQt0yhaHrEuH95m068JYOvLZYnJSw= -cloud.google.com/go/video v1.13.0 h1:FL+xG+4vgZASVIxcWACxneKPhFOnOX75GJhhTP7yUkQ= -cloud.google.com/go/video v1.13.0/go.mod h1:ulzkYlYgCp15N2AokzKjy7MQ9ejuynOJdf1tR5lGthk= -cloud.google.com/go/videointelligence v1.9.0/go.mod h1:29lVRMPDYHikk3v8EdPSaL8Ku+eMzDljjuvRs105XoU= -cloud.google.com/go/videointelligence v1.10.0 h1:Uh5BdoET8XXqXX2uXIahGb+wTKbLkGH7s4GXR58RrG8= -cloud.google.com/go/videointelligence v1.10.0/go.mod h1:LHZngX1liVtUhZvi2uNS0VQuOzNi2TkY1OakiuoUOjU= -cloud.google.com/go/vision v1.2.0 h1:/CsSTkbmO9HC8iQpxbK8ATms3OQaX3YQUeTMGCxlaK4= -cloud.google.com/go/vision/v2 v2.5.0/go.mod h1:MmaezXOOE+IWa+cS7OhRRLK2cNv1ZL98zhqFFZaaH2E= -cloud.google.com/go/vision/v2 v2.6.0 h1:WKt7VNhMLKaT9NmdisWnU2LVO5CaHvisssTaAqfV3dg= -cloud.google.com/go/vision/v2 v2.6.0/go.mod h1:158Hes0MvOS9Z/bDMSFpjwsUrZ5fPrdwuyyvKSGAGMY= -cloud.google.com/go/vmmigration v1.3.0/go.mod h1:oGJ6ZgGPQOFdjHuocGcLqX4lc98YQ7Ygq8YQwHh9A7g= -cloud.google.com/go/vmmigration v1.5.0 h1:+2zAH2Di1FB02kAv8L9In2chYRP2Mw0bl41MiWwF+Fc= -cloud.google.com/go/vmmigration v1.5.0/go.mod h1:E4YQ8q7/4W9gobHjQg4JJSgXXSgY21nA5r8swQV+Xxc= -cloud.google.com/go/vmwareengine v0.1.0/go.mod h1:RsdNEf/8UDvKllXhMz5J40XxDrNJNN4sagiox+OI208= -cloud.google.com/go/vmwareengine v0.2.2 h1:ZM35wN4xuxDZSpKFypLMTsB02M+NEIZ2wr7/VpT3osw= -cloud.google.com/go/vmwareengine v0.2.2/go.mod h1:sKdctNJxb3KLZkE/6Oui94iw/xs9PRNC2wnNLXsHvH8= -cloud.google.com/go/vpcaccess v1.5.0/go.mod h1:drmg4HLk9NkZpGfCmZ3Tz0Bwnm2+DKqViEpeEpOq0m8= -cloud.google.com/go/vpcaccess v1.6.0 h1:FOe6CuiQD3BhHJWt7E8QlbBcaIzVRddupwJlp7eqmn4= -cloud.google.com/go/vpcaccess v1.6.0/go.mod h1:wX2ILaNhe7TlVa4vC5xce1bCnqE3AeH27RV31lnmZes= -cloud.google.com/go/webrisk v1.7.0/go.mod h1:mVMHgEYH0r337nmt1JyLthzMr6YxwN1aAIEc2fTcq7A= -cloud.google.com/go/webrisk v1.8.0 h1:IY+L2+UwxcVm2zayMAtBhZleecdIFLiC+QJMzgb0kT0= -cloud.google.com/go/webrisk v1.8.0/go.mod h1:oJPDuamzHXgUc+b8SiHRcVInZQuybnvEW72PqTc7sSg= -cloud.google.com/go/websecurityscanner v1.4.0/go.mod h1:ebit/Fp0a+FWu5j4JOmJEV8S8CzdTkAS77oDsiSqYWQ= -cloud.google.com/go/websecurityscanner v1.5.0 h1:AHC1xmaNMOZtNqxI9Rmm87IJEyPaRkOxeI0gpAacXGk= -cloud.google.com/go/websecurityscanner v1.5.0/go.mod h1:Y6xdCPy81yi0SQnDY1xdNTNpfY1oAgXUlcfN3B3eSng= -cloud.google.com/go/workflows v1.9.0/go.mod h1:ZGkj1aFIOd9c8Gerkjjq7OW7I5+l6cSvT3ujaO/WwSA= -cloud.google.com/go/workflows v1.10.0 h1:FfGp9w0cYnaKZJhUOMqCOJCYT/WlvYBfTQhFWV3sRKI= -cloud.google.com/go/workflows v1.10.0/go.mod h1:fZ8LmRmZQWacon9UCX1r/g/DfAXx5VcPALq2CxzdePw= -cosmossdk.io/math v1.0.0-rc.0/go.mod h1:Ygz4wBHrgc7g0N+8+MrnTfS9LLn9aaTGa9hKopuym5k= -cosmossdk.io/math v1.0.0/go.mod h1:Ygz4wBHrgc7g0N+8+MrnTfS9LLn9aaTGa9hKopuym5k= -cosmossdk.io/simapp v0.0.0-20230224204036-a6adb0821462 h1:g8muUHnXL8vhld2Sjilyhb1UQObc+x9GVuDK43TYZns= -cosmossdk.io/simapp v0.0.0-20230224204036-a6adb0821462/go.mod h1:4Dd3NLoLYoN90kZ0uyHoTHzVVk9+J0v4HhZRBNTAq2c= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9 h1:VpgP7xuJadIUuKccphEpTJnWhS2jkQyMt6Y7pJCD7fY= -github.com/Abirdcfly/dupword v0.0.7 h1:z14n0yytA3wNO2gpCD/jVtp/acEXPGmYu0esewpBt6Q= -github.com/Abirdcfly/dupword v0.0.7/go.mod h1:K/4M1kj+Zh39d2aotRwypvasonOyAMH1c/IZJzE0dmk= -github.com/AdaLogics/go-fuzz-headers v0.0.0-20210715213245-6c3934b029d8 h1:V8krnnfGj4pV65YLUm3C0/8bl7V5Nry2Pwvy3ru/wLc= -github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96 h1:cTp8I5+VIoKjsnZuH8vjyaysT/ses3EvZeaV/1UkF2M= -github.com/Antonboom/errname v0.1.7 h1:mBBDKvEYwPl4WFFNwec1CZO096G6vzK9vvDQzAwkako= -github.com/Antonboom/errname v0.1.7/go.mod h1:g0ONh16msHIPgJSGsecu1G/dcF2hlYR/0SddnIAGavU= -github.com/Antonboom/nilnil v0.1.1 h1:PHhrh5ANKFWRBh7TdYmyyq2gyT2lotnvFvvFbylF81Q= -github.com/Antonboom/nilnil v0.1.1/go.mod h1:L1jBqoWM7AOeTD+tSquifKSesRHs4ZdaxvZR+xdJEaI= -github.com/Azure/azure-sdk-for-go/sdk/azcore v0.21.1 h1:qoVeMsc9/fh/yhxVaA0obYjVH/oI/ihrOoMwsLS9KSA= -github.com/Azure/azure-sdk-for-go/sdk/internal v0.8.3 h1:E+m3SkZCN0Bf5q7YdTs5lSm2CYY3CK4spn5OmUIiQtk= -github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.3.0 h1:Px2UA+2RvSSvv+RvJNuUB6n7rs5Wsel4dXLe90Um2n4= -github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= -github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802 h1:1BDTz0u9nC3//pOCMdNH+CiXJVYJh5UQNCOBG7jbELc= -github.com/CosmWasm/wasmd v0.40.0-rc.1 h1:prIM2vP1jNh0zgs9seua5BgKdayBgp3FiHtwxFcZSGs= -github.com/CosmWasm/wasmd v0.40.0-rc.1/go.mod h1:uacdue6EGn9JA1TqBNHB3iCe4PCIChuFT23AzIl2VME= -github.com/CosmWasm/wasmvm v1.2.3 h1:OKYlobwmVGbl0eSn0mXoAAjE5hIuXnQCLPjbNd91sVY= -github.com/CosmWasm/wasmvm v1.2.3/go.mod h1:vW/E3h8j9xBQs9bCoijDuawKo9kCtxOaS8N8J7KFtkc= -github.com/DATA-DOG/go-sqlmock v1.5.0 h1:Shsta01QNfFxHCfpW6YH2STWB0MudeXXEWMr20OEh60= -github.com/DataDog/datadog-go v3.2.0+incompatible h1:qSG2N4FghB1He/r2mFrWKCaL7dXCilEuNEeAn20fdD4= -github.com/DataDog/zstd v1.4.5 h1:EndNeuB0l9syBZhut0wns3gV1hL8zX8LIu6ZiVHWLIQ= -github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24 h1:sHglBQTwgx+rWPdisA5ynNEsoARbiCBOyGcJM4/OzsM= -github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= -github.com/GaijinEntertainment/go-exhaustruct/v2 v2.3.0 h1:+r1rSv4gvYn0wmRjC8X7IAzX8QezqtFV9m0MUHFJgts= -github.com/GaijinEntertainment/go-exhaustruct/v2 v2.3.0/go.mod h1:b3g59n2Y+T5xmcxJL+UEG2f8cQploZm1mR/v6BW0mU0= -github.com/HdrHistogram/hdrhistogram-go v1.1.2 h1:5IcZpTvzydCQeHzK4Ef/D5rrSqwxob0t8PQPMybUNFM= -github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible h1:1G1pk05UrOh0NlF1oeaaix1x8XzrfjIDK47TY0Zehcw= -github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= -github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= -github.com/Masterminds/semver/v3 v3.2.0 h1:3MEsd0SM6jqZojhjLWWeBY+Kcjy9i6MQAeY7YgDP83g= -github.com/Masterminds/semver/v3 v3.2.0/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ= -github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= -github.com/Microsoft/hcsshim v0.9.4 h1:mnUj0ivWy6UzbB1uLFqKR6F+ZyiDc7j4iGgHTpO+5+I= -github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= -github.com/OpenPeeDeeP/depguard v1.1.1 h1:TSUznLjvp/4IUP+OQ0t/4jF4QUyxIcVX8YnghZdunyA= -github.com/OpenPeeDeeP/depguard v1.1.1/go.mod h1:JtAMzWkmFEzDPyAd+W0NHl1lvpQKTvT9jnRVsohBKpc= -github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4 h1:ra2OtmuW0AE5csawV4YXMNGNQQXvLRps3z2Z59OPO+I= -github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4/go.mod h1:UBYPn8k0D56RtnR8RFQMjmh4KrZzWJ5o7Z9SYjossQ8= -github.com/Shopify/sarama v1.19.0 h1:9oksLxC6uxVPHPVYUmq6xhr1BOF/hHobWH2UzO67z1s= -github.com/Shopify/toxiproxy v2.1.4+incompatible h1:TKdv8HiTLgE5wdJuEML90aBgNWsokNbMijUGhmcoBJc= -github.com/VictoriaMetrics/fastcache v1.6.0 h1:C/3Oi3EiBCqufydp1neRZkqcwmEiuRT9c3fqvvgKm5o= -github.com/acomagu/bufpipe v1.0.3 h1:fxAGrHZTgQ9w5QqVItgzwj235/uYZYgbXitB+dLupOk= -github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= -github.com/adlio/schema v1.3.3/go.mod h1:1EsRssiv9/Ce2CMzq5DoL7RiMshhuigQxrR4DMV9fHg= -github.com/aead/siphash v1.0.1 h1:FwHfE/T45KPKYuuSAKyyvE+oPWcaQ+CUmFW0bPlM+kg= -github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= -github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5 h1:rFw4nCn9iMW+Vajsk51NtYIcwSTkXr+JGrMd36kTDJw= -github.com/agext/levenshtein v1.2.3 h1:YB2fHEn0UJagG8T1rrWknE3ZQzWM06O8AMAatNn7lmo= -github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af h1:wVe6/Ea46ZMeNkQjjBW6xcqyQA/j5e0D6GytH95g0gQ= -github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= -github.com/alecthomas/kingpin/v2 v2.3.1 h1:ANLJcKmQm4nIaog7xdr/id6FM6zm5hHnfZrvtKPxqGg= -github.com/alecthomas/kingpin/v2 v2.3.1/go.mod h1:oYL5vtsvEHZGHxU7DMp32Dvx+qL+ptGn6lWaot2vCNE= -github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafoB+tBA3gMyHYHrpOtNuDiK/uB5uXxq5wM= -github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 h1:s6gZFSlWYmbqAuRjVTiNNhvNRfY2Wxp9nhfyel4rklc= -github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE= -github.com/alexkohler/prealloc v1.0.0 h1:Hbq0/3fJPQhNkN0dR95AVrr6R7tou91y0uHG5pOcUuw= -github.com/alexkohler/prealloc v1.0.0/go.mod h1:VetnK3dIgFBBKmg0YnD9F9x6Icjd+9cvfHR56wJVlKE= -github.com/alingse/asasalint v0.0.11 h1:SFwnQXJ49Kx/1GghOFz1XGqHYKp21Kq1nHad/0WQRnw= -github.com/alingse/asasalint v0.0.11/go.mod h1:nCaoMhw7a9kSJObvQyVzNTPBDbNpdocqrSP7t/cW5+I= -github.com/andybalholm/brotli v1.0.4 h1:V7DdXeJtZscaqfNuAdSRuRFzuiKlHSC/Zh3zl9qY3JY= -github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= -github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= -github.com/antihax/optional v1.0.0 h1:xK2lYat7ZLaVVcIuj82J8kIro4V6kDe0AUDFboUCwcg= -github.com/apache/arrow/go/v10 v10.0.1 h1:n9dERvixoC/1JjDmBcs9FPaEryoANa2sCgVFo6ez9cI= -github.com/apache/thrift v0.16.0 h1:qEy6UW60iVOlUy+b9ZR0d5WzUWYGOo4HfopoyBaNmoY= -github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e h1:QEF07wC0T1rKkctt1RINW/+RMTVmiwxETico2l3gxJA= -github.com/armon/circbuf v0.0.0-20190214190532-5111143e8da2 h1:7Ip0wMmLHLRJdrloDxZfhMm0xrLXZS8+COSu2bXmEQs= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6 h1:G1bPvciwNyF7IUmKXNt9Ak3m6u9DE1rF+RmtIkBpVdA= -github.com/armon/go-metrics v0.4.0/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= -github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310 h1:BUAU3CGlLvorLI26FmByPp2eC2qla6E1Tw+scpcg/to= -github.com/armon/go-radix v1.0.0 h1:F4z6KzEeeQIMeLFa97iZU6vupzoecKdU5TX24SNppXI= -github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= -github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= -github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a h1:pv34s756C4pEXnjgPfGYgdhg/ZdajGhyOvzx8k+23nw= -github.com/ashanbrown/forbidigo v1.3.0 h1:VkYIwb/xxdireGAdJNZoo24O4lmnEWkactplBlWTShc= -github.com/ashanbrown/forbidigo v1.3.0/go.mod h1:vVW7PEdqEFqapJe95xHkTfB1+XvZXBFg8t0sG2FIxmI= -github.com/ashanbrown/makezero v1.1.1 h1:iCQ87C0V0vSyO+M9E/FZYbu65auqH0lnsOkf5FcB28s= -github.com/ashanbrown/makezero v1.1.1/go.mod h1:i1bJLCRSCHOcOa9Y6MyF2FTfMZMFdHvxKHxgO5Z1axI= -github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4= -github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI= -github.com/aws/aws-lambda-go v1.13.3 h1:SuCy7H3NLyp+1Mrfp+m80jcbi9KYWAs9/BXwppwRDzY= -github.com/aws/aws-sdk-go-v2 v1.9.1 h1:ZbovGV/qo40nrOJ4q8G33AGICzaPI45FHQWJ9650pF4= -github.com/aws/aws-sdk-go-v2 v1.9.1/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4= -github.com/aws/aws-sdk-go-v2/config v1.1.1 h1:ZAoq32boMzcaTW9bcUacBswAmHTbvlvDJICgHFZuECo= -github.com/aws/aws-sdk-go-v2/credentials v1.1.1 h1:NbvWIM1Mx6sNPTxowHgS2ewXCRp+NGTzUYb/96FZJbY= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.0.2 h1:EtEU7WRaWliitZh2nmuxEXrN0Cb8EgPUFGIoTMeqbzI= -github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.8.1 h1:w/fPGB0t5rWwA43mux4e9ozFSH5zF1moQemlA131PWc= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.0.2 h1:4AH9fFjUlVktQMznF+YN33aWNXaR4VgDXyP28qokJC0= -github.com/aws/aws-sdk-go-v2/service/route53 v1.1.1 h1:cKr6St+CtC3/dl/rEBJvlk7A/IN5D5F02GNkGzfbtVU= -github.com/aws/aws-sdk-go-v2/service/sso v1.1.1 h1:37QubsarExl5ZuCBlnRP+7l1tNwZPBSTqpTBrPH98RU= -github.com/aws/aws-sdk-go-v2/service/sts v1.1.1 h1:TJoIfnIFubCX0ACVeJ0w46HEH5MwjwYN4iFhuYIhfIY= -github.com/aws/smithy-go v1.8.0 h1:AEwwwXQZtUwP5Mz506FeXXrKBe0jA8gVM+1gEcSRooc= -github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= -github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/bkielbasa/cyclop v1.2.0 h1:7Jmnh0yL2DjKfw28p86YTd/B4lRGcNuu12sKE35sM7A= -github.com/bkielbasa/cyclop v1.2.0/go.mod h1:qOI0yy6A7dYC4Zgsa72Ppm9kONl0RoIlPbzot9mhmeI= -github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ= -github.com/blizzy78/varnamelen v0.8.0 h1:oqSblyuQvFsW1hbBHh1zfwrKe3kcSj0rnXkKzsQ089M= -github.com/blizzy78/varnamelen v0.8.0/go.mod h1:V9TzQZ4fLJ1DSrjVDfl89H7aMnTvKkApdHeyESmyR7k= -github.com/bombsimon/wsl/v3 v3.3.0 h1:Mka/+kRLoQJq7g2rggtgQsjuI/K5Efd87WX96EWFxjM= -github.com/bombsimon/wsl/v3 v3.3.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc= -github.com/breml/bidichk v0.2.3 h1:qe6ggxpTfA8E75hdjWPZ581sY3a2lnl0IRxLQFelECI= -github.com/breml/bidichk v0.2.3/go.mod h1:8u2C6DnAy0g2cEq+k/A2+tr9O1s+vHGxWn0LTc70T2A= -github.com/breml/errchkjson v0.3.0 h1:YdDqhfqMT+I1vIxPSas44P+9Z9HzJwCeAzjB8PxP1xw= -github.com/breml/errchkjson v0.3.0/go.mod h1:9Cogkyv9gcT8HREpzi3TiqBxCqDzo8awa92zSDFcofU= -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.0 h1:V2/ZgjfDFIygAX3ZapeigkVBoVUtOJKSwrhZdlpSvaA= -github.com/btcsuite/btcd v0.23.0/go.mod h1:0QJIIN1wwIXF/3G/m87gIwGniDMDQqjVn4SZgnFpsYY= -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.2.0/go.mod h1:U7MHm051Al6XmscBQ0BoNydpOTsFAn707034b5nY8zU= -github.com/btcsuite/btcd/btcec/v2 v2.2.1/go.mod h1:9/CSmJxmuvqzX9Wh2fXMWToLOHhPd11lSPuIupwTkI8= -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.2/go.mod h1:UR7dsSJzJUfMmFiiLlIrMq1lS9jh9EdCV7FStZSnpi0= -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/btclog v0.0.0-20170628155309-84c8d2346e9f h1:bAs4lUbRJpnnkd9VhRV3jjAVU7DJVjMaK+IsvSeZvFo= -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/go-socks v0.0.0-20170105172521-4720035b7bfd h1:R/opQEbFEy9JGkIguV40SvRY1uliPX8ifOvi6ICsFCw= -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 h1:Tvd0BfvqX9o823q1j2UZ/epQo09eJh6dTcRp79ilIN4= -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 h1:ZxaA6lo2EpxGddsA8JwWOcxlzRybb444sgmeJQMJGQE= -github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= -github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792 h1:R8vQdOQdZ9Y3SkEwmHoWBmX1DNXhXZqlTpq6s4tyJGc= -github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= -github.com/btcsuite/winsvc v1.0.0 h1:J9B4L7e3oqhXOcm+2IuNApwzQec85lE+QaikUcCs+dk= -github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= -github.com/bufbuild/buf v1.7.0 h1:uWRjhIXcrWkzIkA5TqXGyJbF51VW54QJsQZ3nwaes5Q= -github.com/bufbuild/buf v1.7.0/go.mod h1:Go40fMAF46PnPLC7jJgTQhAI95pmC0+VtxFKVC0qLq0= -github.com/bufbuild/connect-go v1.0.0 h1:htSflKUT8y1jxhoPhPYTZMrsY3ipUXjjrbcZR5O2cVo= -github.com/bufbuild/connect-go v1.0.0/go.mod h1:9iNvh/NOsfhNBUH5CtvXeVUskQO1xsrEviH7ZArwZ3I= -github.com/bufbuild/protocompile v0.4.0/go.mod h1:3v93+mbWn/v3xzN+31nwkJfrEpAUwp+BagBSZWx+TP8= -github.com/burnt-labs/interchaintest/v7 v7.0.0-20230613163648-aa1862315549/go.mod h1:PQHTFpUmM/meGRt87JNtCQp5k+D1Vgb/vS9+Faup6UA= -github.com/butuzov/ireturn v0.1.1 h1:QvrO2QF2+/Cx1WA/vETCIYBKtRjc30vesdoPUNo1EbY= -github.com/butuzov/ireturn v0.1.1/go.mod h1:Wh6Zl3IMtTpaIKbmwzqi6olnM9ptYQxxVacMsOEFPoc= -github.com/bwesterb/go-ristretto v1.2.0 h1:xxWOVbN5m8NNKiSDZXE1jtZvZnC6JSJ9cYFADiZcWtw= -github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= -github.com/casbin/casbin/v2 v2.37.0 h1:/poEwPSovi4bTOcP752/CsTQiRz2xycyVKFG7GUhbDw= -github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/census-instrumentation/opencensus-proto v0.4.1 h1:iKLQ0xPNFxR/2hzXZMrBo8f1j86j5WHzznCCQxV/b8g= -github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw= -github.com/cespare/cp v0.1.0 h1:SE+dxFebS7Iik5LK0tsi1k9ZCxEaFX4AjQmoyA+1dJk= -github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/charithe/durationcheck v0.0.9 h1:mPP4ucLrf/rKZiIG/a9IPXHGlh8p4CzgpyTy6EEutYk= -github.com/charithe/durationcheck v0.0.9/go.mod h1:SSbRIBVfMjCi/kEB6K65XEA83D6prSM8ap1UCpNKtgg= -github.com/chavacava/garif v0.0.0-20220630083739-93517212f375 h1:E7LT642ysztPWE0dfz43cWOvMiF42DyTRC+eZIaO4yI= -github.com/chavacava/garif v0.0.0-20220630083739-93517212f375/go.mod h1:4m1Rv7xfuwWPNKXlThldNuJvutYM6J95wNuuVmn55To= -github.com/checkpoint-restore/go-criu/v5 v5.3.0 h1:wpFFOoomK3389ue2lAb0Boag6XPht5QYpipxmSNL4d8= -github.com/checkpoint-restore/go-criu/v5 v5.3.0/go.mod h1:E/eQpaFtUKGOOSEBZgmKAcn+zUUwWxqcaKZlF54wK8E= -github.com/cheekybits/genny v1.0.0 h1:uGGa4nei+j20rOSeDeP5Of12XVm7TGUd4dJA9RDitfE= -github.com/cheggaaa/pb v1.0.27 h1:wIkZHkNfC7R6GI5w7l/PdAdzXzlrbcI3p8OAlnkTsnc= -github.com/cilium/ebpf v0.7.0 h1:1k/q3ATgxSXRdrmPfH8d7YK0GfqVsEKZAX9dQZvs56k= -github.com/cilium/ebpf v0.7.0/go.mod h1:/oI2+1shJiTGAMgl6/RgJr36Eo1jzrRcAWbcXO2usCA= -github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible h1:C29Ae4G5GtYyYMm1aztcyj/J5ckgJm2zwdDajFbx1NY= -github.com/circonus-labs/circonusllhist v0.1.3 h1:TJH+oke8D16535+jHExHj4nQvzlZrj7ug5D7I/orNUA= -github.com/clbanning/mxj v1.8.4 h1:HuhwZtbyvyOw+3Z1AowPkU87JkJUSv751ELWaiTpj8I= -github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec h1:EdRZT3IeKQmfCSrgo8SZ8V3MEnskuJP0wCYNpe+aiXo= -github.com/client9/misspell v0.3.4 h1:ta993UF76GwbvJcIo3Y68y/M3WxlpEHPWIGDkJYwzJI= -github.com/cloudflare/circl v1.1.0 h1:bZgT/A+cikZnKIwn7xL2OBj012Bmvho/o6RpRvv3GKY= -github.com/cloudflare/circl v1.1.0/go.mod h1:prBCrKB9DV4poKZY1l9zBXg2QJY7mvgRvtMxxK7fi4I= -github.com/cloudflare/cloudflare-go v0.14.0 h1:gFqGlGl/5f9UGXAaKapCGUfaTCgRKKnzu2VvzMZlOFA= -github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe h1:QQ3GSy+MqSHxm/d8nCtnAiZdYFd45cYZPs8vOOIYKfk= -github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= -github.com/cncf/xds/go v0.0.0-20220314180256-7f1daf1720fc/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20230105202645-06c439db220b/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20230310173818-32f1caf87195 h1:58f1tJ1ra+zFINPlwLWvQsR9CzAKt2e+EWV2yX9oXQ4= -github.com/cncf/xds/go v0.0.0-20230310173818-32f1caf87195/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa h1:OaNxuTZr7kxeODyLWsRMC+OD03aFUH+mW6r2d+MWa5Y= -github.com/cockroachdb/errors v1.9.1 h1:yFVvsI0VxmRShfawbt/laCIDy/mtTqqnvoNgiy5bEV8= -github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= -github.com/cockroachdb/pebble v0.0.0-20220817183557-09c6e030a677 h1:qbb/AE938DFhOajUYh9+OXELpSF9KZw2ZivtmW6eX1Q= -github.com/cockroachdb/redact v1.1.3 h1:AKZds10rFSIj7qADf0g46UixK8NNLwWTNdCIGS5wfSQ= -github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd h1:qMd81Ts1T2OTKmB4acZcyKaMtRnY5Y44NuXGX2GFJ1w= -github.com/cometbft/cometbft v0.37.0/go.mod h1:Y2MMMN//O5K4YKd8ze4r9jmk4Y7h0ajqILXbH5JQFVs= -github.com/consensys/gnark-crypto v0.4.1-0.20210426202927-39ac3d4b3f1f h1:C43yEtQ6NIf4ftFXD/V55gnGFgPbMQobd//YlnLjUJ8= -github.com/containerd/aufs v1.0.0 h1:2oeJiwX5HstO7shSrPZjrohJZLzK36wvpdmzDRkL/LY= -github.com/containerd/btrfs v1.0.0 h1:osn1exbzdub9L5SouXO5swW4ea/xVdJZ3wokxN5GrnA= -github.com/containerd/cgroups v1.0.4 h1:jN/mbWBEaz+T1pi5OFtnkQ+8qnmEbAr1Oo1FRm5B0dA= -github.com/containerd/console v1.0.3 h1:lIr7SlA5PxZyMV30bDW0MGbiOPXwc63yRuCP0ARubLw= -github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U= -github.com/containerd/containerd v1.6.8 h1:h4dOFDwzHmqFEP754PgfgTeVXFnLiRc6kiqC7tplDJs= -github.com/containerd/containerd v1.6.8/go.mod h1:By6p5KqPK0/7/CgO/A6t/Gz+CUYUu2zf1hUaaymVXB0= -github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= -github.com/containerd/fifo v1.0.0 h1:6PirWBr9/L7GDamKr+XM0IeUFXu5mf3M/BPpH9gaLBU= -github.com/containerd/fuse-overlayfs-snapshotter v1.0.2 h1:Xy9Tkx0tk/SsMfLDFc69wzqSrxQHYEFELHBO/Z8XO3M= -github.com/containerd/go-cni v1.1.6 h1:el5WPymG5nRRLQF1EfB97FWob4Tdc8INg8RZMaXWZlo= -github.com/containerd/go-runc v1.0.0 h1:oU+lLv1ULm5taqgV/CJivypVODI4SUz1znWjv3nNYS0= -github.com/containerd/imgcrypt v1.1.4 h1:iKTstFebwy3Ak5UF0RHSeuCTahC5OIrPJa6vjMAM81s= -github.com/containerd/nri v0.1.0 h1:6QioHRlThlKh2RkRTR4kIT3PKAcrLo3gIWnjkM4dQmQ= -github.com/containerd/stargz-snapshotter v0.11.3 h1:D3PoF563XmOBdtfx2G6AkhbHueqwIVPBFn2mrsWLa3w= -github.com/containerd/stargz-snapshotter/estargz v0.11.3 h1:k2kN16Px6LYuv++qFqK+JTcYqc8bEVxzGpf8/gFBL5M= -github.com/containerd/ttrpc v1.1.0 h1:GbtyLRxb0gOLR0TYQWt3O6B0NvT8tMdorEHqIQo/lWI= -github.com/containerd/typeurl v1.0.2 h1:Chlt8zIieDbzQFzXzAeBEF92KhExuE4p9p92/QmY7aY= -github.com/containerd/typeurl v1.0.2/go.mod h1:9trJWW2sRlGub4wZJRTW83VtbOLS6hwcDZXTn6oPz9s= -github.com/containerd/zfs v1.0.0 h1:cXLJbx+4Jj7rNsTiqVfm6i+RNLx6FFA2fMmDlEf+Wm8= -github.com/containernetworking/cni v1.1.1 h1:ky20T7c0MvKvbMOwS/FrlbNwjEoqJEUUYfsL4b0mc4k= -github.com/containernetworking/plugins v1.1.1 h1:+AGfFigZ5TiQH00vhR8qPeSatj53eNGz0C1d3wVYlHE= -github.com/containers/ocicrypt v1.1.3 h1:uMxn2wTb4nDR7GqG3rnZSfpJXqWURfzZ7nKydzIeKpA= -github.com/coreos/etcd v3.3.10+incompatible h1:jFneRYjIvLMLhDLCzuTuU4rSJUjRplcJQ7pD7MnhC04= -github.com/coreos/go-etcd v2.0.0+incompatible h1:bXhRBIXoTm9BYHS3gE0TtQuyNZyeEMux2sDi4oo5YOo= -github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7 h1:u9SHYsPQNyt5tgDm3YN7+9dYrpK96E5wFilTFWIDZOM= -github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/coreos/go-systemd/v22 v22.3.3-0.20220203105225-a9a7ef127534/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= -github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf h1:CAKfRE2YtTUIjjh1bkBtyYFaUT/WmOqsJjgtihT0vMI= -github.com/cosmos/cosmos-db v0.0.0-20221226095112-f3c38ecb5e32 h1:zlCp9n3uwQieELltZWHRmwPmPaZ8+XoL2Sj+A2YJlr8= -github.com/cosmos/cosmos-sdk v0.47.0/go.mod h1:FTtZbqiHCZ2vun9WrPq6qLQafNKkAuIhLAxzLjr2TiI= -github.com/cosmos/cosmos-sdk v0.47.1/go.mod h1:14tO5KQaTrl2q3OxBnDRfue7TRN9zkXS0cLutrSqkOo= -github.com/cosmos/cosmos-sdk/db v1.0.0-beta.1.0.20220726092710-f848e4300a8a h1:2humuGPw3O5riJVFq/E2FRjF57UrO97W1qJcGVmK+6k= -github.com/cosmos/cosmos-sdk/db v1.0.0-beta.1.0.20220726092710-f848e4300a8a/go.mod h1:c8IO23vgNxueCCJlSI9awQtcxsvc+buzaeThB85qfBU= -github.com/cosmos/gogoproto v1.4.1/go.mod h1:Ac9lzL4vFpBMcptJROQ6dQ4M3pOEK5Z/l0Q9p+LoCr4= -github.com/cosmos/gogoproto v1.4.6/go.mod h1:VS/ASYmPgv6zkPKLjR9EB91lwbLHOzaGCirmKKhncfI= -github.com/cosmos/gogoproto v1.4.8/go.mod h1:hnb0DIEWTv+wdNzNcqus5xCQXq5+CXauq1FJuurRfVY= -github.com/cosmos/gorocksdb v1.2.0 h1:d0l3jJG8M4hBouIZq0mDUHZ+zjOx044J3nGRskwTb4Y= -github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk= -github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= -github.com/creachadair/taskgroup v0.3.2/go.mod h1:wieWwecHVzsidg2CsUnFinW1faVN4+kq+TDlRJQ0Wbk= -github.com/creack/pty v1.1.9 h1:uDmaGzcdjhF4i/plgjmEsriH11Y0o7RKapEf/LDaM3w= -github.com/creack/pty v1.1.11 h1:07n33Z8lZxZ2qwegKbObQohDhXDQxiMMz1NOUGYlesw= -github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/cristalhq/acmd v0.8.1 h1:mtFp/cbeJNY5jokF9zPz5mRllGHropRrOkOVxeGS6FI= -github.com/cristalhq/acmd v0.8.1/go.mod h1:LG5oa43pE/BbxtfMoImHCQN++0Su7dzipdgBjMCBVDQ= -github.com/curioswitch/go-reassign v0.2.0 h1:G9UZyOcpk/d7Gd6mqYgd8XYWFMw/znxwGDUstnC9DIo= -github.com/curioswitch/go-reassign v0.2.0/go.mod h1:x6OpXuWvgfQaMGks2BZybTngWjT84hqJfKoO8Tt/Roc= -github.com/cyphar/filepath-securejoin v0.2.3 h1:YX6ebbZCZP7VkM3scTTokDgBL2TY741X51MTk3ycuNI= -github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= -github.com/daixiang0/gci v0.8.1 h1:T4xpSC+hmsi4CSyuYfIJdMZAr9o7xZmHpQVygMghGZ4= -github.com/daixiang0/gci v0.8.1/go.mod h1:EpVfrztufwVgQRXjnX4zuNinEpLj5OmMjtu/+MB0V0c= -github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c h1:pFUpOrbxDR6AkioZ1ySsx5yxlDQZ8stG2b88gTPxgJU= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs= -github.com/decred/dcrd/lru v1.0.0 h1:Kbsb1SFDsIlaupWPwsPp+dkxiBY1frcS07PCPgotKz8= -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/denis-tingaikin/go-header v0.4.3 h1:tEaZKAlqql6SKCY++utLmkPLd6K8IBM20Ha7UVm+mtU= -github.com/denis-tingaikin/go-header v0.4.3/go.mod h1:0wOCWuN71D5qIgE2nz9KrKmuYBAC2Mra5RassOIQ2/c= -github.com/denisenkom/go-mssqldb v0.12.0 h1:VtrkII767ttSPNRfFekePK3sctr+joXgO58stqQbtUA= -github.com/dgraph-io/badger v1.6.2 h1:mNw0qs90GVgGGWylh0umH5iag1j6n/PeJtNvL6KY/x8= -github.com/dgraph-io/badger/v3 v3.2103.2 h1:dpyM5eCJAtQCBcMCZcT4UBZchuTJgCywerHHgmxfxM8= -github.com/dimchansky/utfbom v1.1.1 h1:vV6w1AhK4VMnhBno/TPVCoK9U/LP0PkLCS9tbxHdi/U= -github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91 h1:Izz0+t1Z5nI16/II7vuEo/nHjodOg0p7+OiDpjX5t1E= -github.com/docker/cli v20.10.17+incompatible h1:eO2KS7ZFeov5UJeaDmIs1NFEDRf32PaqRpvoEkKBy5M= -github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68= -github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v1.6.2/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker v20.10.19+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker-credential-helpers v0.6.4 h1:axCks+yV+2MR3/kZhAmy07yC56WZ2Pwu/fKWtKuZB0o= -github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c h1:+pKlWGMw7gf6bQ+oDZB4KHQFypsfjYlq/C4rfL7D3g8= -github.com/docker/go-metrics v0.0.1 h1:AgB/0SvBxihN0X8OR4SjsblXkbMvalQ8cjmtKQ2rQV8= -github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/dop251/goja v0.0.0-20220405120441-9037c2b61cbf h1:Yt+4K30SdjOkRoRRm3vYNQgR+/ZIy0RmeUDZo7Y8zeQ= -github.com/dop251/goja v0.0.0-20220405120441-9037c2b61cbf/go.mod h1:R9ET47fwRVRPZnOGvHxxhuZcbrMCuiqOz3Rlrh4KSnk= -github.com/eapache/go-resiliency v1.1.0 h1:1NtRmCAqadE2FN4ZcN6g90TP3uk8cg9rn9eNK2197aU= -github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21 h1:YEetp8/yCZMuEPMUDHG0CW/brkkEp8mzqk2+ODEitlw= -github.com/eapache/queue v1.1.0 h1:YOEu7KNc61ntiQlcEeUIoDTJ2o8mQznoNvUhiigpIqc= -github.com/edsrzf/mmap-go v1.0.0 h1:CEBF7HpRnUCSJgGUb5h1Gm7e3VkmVDrR8lvWVLtrOFw= -github.com/elastic/gosigar v0.14.2 h1:Dg80n8cr90OZ7x+bAax/QjoW/XqTI11RmA79ZwIm9/4= -github.com/emicklei/go-restful v2.9.5+incompatible h1:spTtZBk5DYEvbxMVutUuTyh1Ao2r4iyvLdACqsl/Ljk= -github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= -github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= -github.com/envoyproxy/go-control-plane v0.10.3/go.mod h1:fJJn/j26vwOu972OllsvAgJJM//w9BV6Fxbg2LuVd34= -github.com/envoyproxy/go-control-plane v0.11.0 h1:jtLewhRR2vMRNnq2ZZUoCjUlgut+Y0+sDDWPOfwOi1o= -github.com/envoyproxy/go-control-plane v0.11.0/go.mod h1:VnHyVMpzcLvCFt9yUz1UnCwHLhwx1WguiVDV7pTG/tI= -github.com/envoyproxy/protoc-gen-validate v0.6.7/go.mod h1:dyJXwwfPK2VSqiB9Klm1J6romD608Ba7Hij42vrOBCo= -github.com/envoyproxy/protoc-gen-validate v0.9.1/go.mod h1:OKNgG7TCp5pF4d6XftA0++PMirau2/yoOwVac3AbF2w= -github.com/envoyproxy/protoc-gen-validate v0.10.0 h1:oIfnZFdC0YhpNNEX+SuIqko4cqqVZeN9IGTrhZje83Y= -github.com/envoyproxy/protoc-gen-validate v0.10.0/go.mod h1:DRjgyB0I43LtJapqN6NiRwroiAU2PaFuvk/vjgh61ss= -github.com/esimonov/ifshort v1.0.4 h1:6SID4yGWfRae/M7hkVDVVyppy8q/v9OuxNdmjLQStBA= -github.com/esimonov/ifshort v1.0.4/go.mod h1:Pe8zjlRrJ80+q2CxHLfEOfTwxCZ4O+MuhcHcfgNWTk0= -github.com/ettle/strcase v0.1.1 h1:htFueZyVeE1XNnMEfbqp5r67qAN/4r6ya1ysq8Q+Zcw= -github.com/ettle/strcase v0.1.1/go.mod h1:hzDLsPC7/lwKyBOywSHEP89nt2pDgdy+No1NBA9o9VY= -github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= -github.com/facebookgo/stack v0.0.0-20160209184415-751773369052/go.mod h1:UbMTZqLaRiH3MsBH8va0n7s1pQYcu3uTb8G4tygF4Zg= -github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0= -github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= -github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= -github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= -github.com/fatih/structtag v1.2.0 h1:/OdNE99OxoI/PqaW/SuSK9uxxT3f/tcSZgon/ssNSx4= -github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= -github.com/firefart/nonamedreturns v1.0.4 h1:abzI1p7mAEPYuR4A+VLKn4eNDOycjYo2phmY9sfv40Y= -github.com/firefart/nonamedreturns v1.0.4/go.mod h1:TDhe/tjI1BXo48CmYbUduTV7BdIga8MAO/xbKdcVsGI= -github.com/fjl/gencodec v0.0.0-20220412091415-8bb9e558978c h1:CndMRAH4JIwxbW8KYq6Q+cGWcGHz0FjGR3QqcInWcW0= -github.com/fjl/gencodec v0.0.0-20220412091415-8bb9e558978c/go.mod h1:AzA8Lj6YtixmJWL+wkKoBGsLWy9gFrAzi4g+5bCKwpY= -github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5 h1:FtmdgXiUlNeRsoNMFlKLDt+S+6hbjVMEW6RGQ7aUf7c= -github.com/flynn/noise v1.0.0 h1:DlTHqmzmvcEiKj+4RYo/imoswx/4r6iBlCMfVtrMXpQ= -github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90 h1:WXb3TSNmHp2vHoCroCIB1foO/yQ36swABL8aOVeDpgg= -github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= -github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= -github.com/francoispqt/gojay v1.2.13 h1:d2m3sFjloqoIUQU3TsHBgj6qg/BVGlTBeHDUmyJnXKk= -github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db h1:gb2Z18BhTPJPpLQWj4T+rfKHYCHxRHCtRxhKKjRidVw= -github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8 h1:a9ENSRDFBUPkJ5lCgVZh26+ZbGyoVJG7yb5SSzF5H54= -github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= -github.com/frankban/quicktest v1.14.4/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= -github.com/fzipp/gocyclo v0.6.0 h1:lsblElZG7d3ALtGMx9fmxeTKZaLLpU8mET09yN4BBLo= -github.com/fzipp/gocyclo v0.6.0/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlyaLkLoA= -github.com/garslo/gogen v0.0.0-20170306192744-1d203ffc1f61 h1:IZqZOB2fydHte3kUgxrzK5E1fW7RQGeDwE8F/ZZnUYc= -github.com/garslo/gogen v0.0.0-20170306192744-1d203ffc1f61/go.mod h1:Q0X6pkwTILDlzrGEckF6HKjXe48EgsY/l7K7vhY4MW8= -github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff h1:tY80oXqGNY4FhTFhk+o9oFHGINQ/+vhlm8HFzi6znCI= -github.com/gdamore/encoding v1.0.0 h1:+7OoQ1Bc6eTm5niUzBa0Ctsh6JbMW6Ra+YNuAtDBdko= -github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg= -github.com/gdamore/tcell/v2 v2.4.1-0.20210905002822-f057f0a857a1/go.mod h1:Az6Jt+M5idSED2YPGtwnfJV0kXohgdCBPmHGSYc1r04= -github.com/gdamore/tcell/v2 v2.6.0 h1:OKbluoP9VYmJwZwq/iLb4BxwKcwGthaa1YNBJIyCySg= -github.com/gdamore/tcell/v2 v2.6.0/go.mod h1:be9omFATkdr0D9qewWW3d+MEvl5dha+Etb5y65J2H8Y= -github.com/getsentry/sentry-go v0.17.0 h1:UustVWnOoDFHBS7IJUB2QK/nB5pap748ZEp0swnQJak= -github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= -github.com/gliderlabs/ssh v0.3.5 h1:OcaySEmAQJgyYcArR+gGGTHCyE7nvhEMTlYY+Dp8CpY= -github.com/gliderlabs/ssh v0.3.5/go.mod h1:8XB4KraRrX39qHhT6yxPsHedjA08I/uBVwj4xC+/+z4= -github.com/go-chi/chi/v5 v5.0.7 h1:rDTPXLDHGATaeHvVlLcR4Qe0zftYethFucbjVQ1PxU8= -github.com/go-chi/chi/v5 v5.0.7/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= -github.com/go-critic/go-critic v0.6.5 h1:fDaR/5GWURljXwF8Eh31T2GZNz9X4jeboS912mWF8Uo= -github.com/go-critic/go-critic v0.6.5/go.mod h1:ezfP/Lh7MA6dBNn4c6ab5ALv3sKnZVLx37tr00uuaOY= -github.com/go-git/gcfg v1.5.0 h1:Q5ViNfGF8zFgyJWPqYwA7qGFoMTEiBmdlkcfRmpIMa4= -github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= -github.com/go-git/go-billy/v5 v5.3.1/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= -github.com/go-git/go-billy/v5 v5.4.0 h1:Vaw7LaSTRJOUric7pe4vnzBSgyuf2KrLsu2Y4ZpQBDE= -github.com/go-git/go-billy/v5 v5.4.0/go.mod h1:vjbugF6Fz7JIflbVpl1hJsGjSHNltrSw45YK/ukIvQg= -github.com/go-git/go-git-fixtures/v4 v4.3.1 h1:y5z6dd3qi8Hl+stezc8p3JxDkoTRqMAlKnXHuzrfjTQ= -github.com/go-git/go-git-fixtures/v4 v4.3.1/go.mod h1:8LHG1a3SRW71ettAD/jW13h8c6AqjVSeL11RAdgaqpo= -github.com/go-git/go-git/v5 v5.5.2 h1:v8lgZa5k9ylUw+OR/roJHTxR4QItsNFI5nKtAXFuynw= -github.com/go-git/go-git/v5 v5.5.2/go.mod h1:BE5hUJ5yaV2YMxhmaP4l6RBQ08kMxKSPD4BlxtH7OjI= -github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1 h1:QbL/5oDUmRBzO9/Z7Seo6zf912W/a6Sr4Eu0G/3Jho0= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4 h1:WtGNWLvXpe6ZudgnXrq0barxBImvnnJoMEhXAzcbM0I= -github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= -github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= -github.com/go-logfmt/logfmt v0.5.1/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 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= -github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -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-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A= -github.com/go-playground/validator/v10 v10.11.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= -github.com/go-sourcemap/sourcemap v2.1.3+incompatible h1:W1iEw64niKVGogNgBN3ePyLFfuisuzeidWPMPWmECqU= -github.com/go-sql-driver/mysql v1.4.0 h1:7LxgVwFb2hIQtMm87NdgAVfXjnt4OePseqT1tKx+opk= -github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 h1:p104kn46Q8WdvHunIJ9dAyjPVtrBPhSr3KT2yUst43I= -github.com/go-toolsmith/astcast v1.0.0 h1:JojxlmI6STnFVG9yOImLeGREv8W2ocNUM+iOhR6jE7g= -github.com/go-toolsmith/astcast v1.0.0/go.mod h1:mt2OdQTeAQcY4DQgPSArJjHCcOwlX+Wl/kwN+LbLGQ4= -github.com/go-toolsmith/astcopy v1.0.2 h1:YnWf5Rnh1hUudj11kei53kI57quN/VH6Hp1n+erozn0= -github.com/go-toolsmith/astcopy v1.0.2/go.mod h1:4TcEdbElGc9twQEYpVo/aieIXfHhiuLh4aLAck6dO7Y= -github.com/go-toolsmith/astequal v1.0.0/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= -github.com/go-toolsmith/astequal v1.0.2/go.mod h1:9Ai4UglvtR+4up+bAD4+hCj7iTo4m/OXVTSLnCyTAx4= -github.com/go-toolsmith/astequal v1.0.3 h1:+LVdyRatFS+XO78SGV4I3TCEA0AC7fKEGma+fH+674o= -github.com/go-toolsmith/astequal v1.0.3/go.mod h1:9Ai4UglvtR+4up+bAD4+hCj7iTo4m/OXVTSLnCyTAx4= -github.com/go-toolsmith/astfmt v1.0.0 h1:A0vDDXt+vsvLEdbMFJAUBI/uTbRw1ffOPnxsILnFL6k= -github.com/go-toolsmith/astfmt v1.0.0/go.mod h1:cnWmsOAuq4jJY6Ct5YWlVLmcmLMn1JUPuQIHCY7CJDw= -github.com/go-toolsmith/astp v1.0.0 h1:alXE75TXgcmupDsMK1fRAy0YUzLzqPVvBKoyWV+KPXg= -github.com/go-toolsmith/astp v1.0.0/go.mod h1:RSyrtpVlfTFGDYRbrjyWP1pYu//tSFcvdYrA8meBmLI= -github.com/go-toolsmith/pkgload v1.0.2-0.20220101231613-e814995d17c5 h1:eD9POs68PHkwrx7hAB78z1cb6PfGq/jyWn3wJywsH1o= -github.com/go-toolsmith/pkgload v1.0.2-0.20220101231613-e814995d17c5/go.mod h1:3NAwwmD4uY/yggRxoEjk/S00MIV3A+H7rrE3i87eYxM= -github.com/go-toolsmith/strparse v1.0.0 h1:Vcw78DnpCAKlM20kSbAyO4mPfJn/lyYA4BJUDxe2Jb4= -github.com/go-toolsmith/strparse v1.0.0/go.mod h1:YI2nUKP9YGZnL/L1/DLFBfixrcjslWct4wyljWhSRy8= -github.com/go-toolsmith/typep v1.0.2 h1:8xdsa1+FSIH/RhEkgnD1j2CJOy5mNllW1Q9tRiYwvlk= -github.com/go-toolsmith/typep v1.0.2/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= -github.com/go-xmlfmt/xmlfmt v0.0.0-20191208150333-d5b6f63a941b h1:khEcpUM4yFcxg4/FHQWkvVRmgijNXRfzkIDHh23ggEo= -github.com/go-xmlfmt/xmlfmt v0.0.0-20191208150333-d5b6f63a941b/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM= -github.com/go-zookeeper/zk v1.0.2 h1:4mx0EYENAdX/B/rbunjlt5+4RTA/a9SMHBRuSKdGxPM= -github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= -github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= -github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= -github.com/godbus/dbus/v5 v5.0.6/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= -github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= -github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= -github.com/gofrs/uuid v4.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= -github.com/golang-jwt/jwt/v4 v4.3.0 h1:kHL1vqdqWNfATmA0FNMdmZNMyZI1U6O31X4rlIPoBog= -github.com/golang-jwt/jwt/v4 v4.4.2 h1:rcc4lwaZgFMCZ5jxF9ABolDcIHdBytAFgqFPbSJQAYs= -github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe h1:lXe2qZdvpiX5WZkZR4hgp4KJVfY3nMkvmwbVkpv1rVY= -github.com/golang-sql/sqlexp v0.0.0-20170517235910-f1bb20e5a188 h1:+eHOFJl1BaXrQxKX+T06f78590z4qA2ZzBTqahsKSE4= -github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g= -github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= -github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= -github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2 h1:23T5iq8rbUYlhpt5DB4XJkc6BU31uODLD1o1gKvZmD0= -github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4= -github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a h1:w8hkcTqaFpzKqonE9uMCefW1WDie15eSP/4MssdenaM= -github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk= -github.com/golangci/go-misc v0.0.0-20220329215616-d24fe342adfe h1:6RGUuS7EGotKx6J5HIP8ZtyMdiDscjMLfRBSPuzVVeo= -github.com/golangci/go-misc v0.0.0-20220329215616-d24fe342adfe/go.mod h1:gjqyPShc/m8pEMpk0a3SeagVb0kaqvhscv+i9jI5ZhQ= -github.com/golangci/gofmt v0.0.0-20220901101216-f2edd75033f2 h1:amWTbTGqOZ71ruzrdA+Nx5WA3tV1N0goTspwmKCQvBY= -github.com/golangci/gofmt v0.0.0-20220901101216-f2edd75033f2/go.mod h1:9wOXstvyDRshQ9LggQuzBCGysxs3b6Uo/1MvYCR2NMs= -github.com/golangci/golangci-lint v1.50.1 h1:C829clMcZXEORakZlwpk7M4iDw2XiwxxKaG504SZ9zY= -github.com/golangci/golangci-lint v1.50.1/go.mod h1:AQjHBopYS//oB8xs0y0M/dtxdKHkdhl0RvmjUct0/4w= -github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0 h1:MfyDlzVjl1hoaPzPD4Gpb/QgoRfSBR0jdhwGyAWwMSA= -github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0/go.mod h1:66R6K6P6VWk9I95jvqGxkqJxVWGFy9XlDwLwVz1RCFg= -github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca h1:kNY3/svz5T29MYHubXix4aDDuE3RWHkPvopM/EDv/MA= -github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca/go.mod h1:tvlJhZqDe4LMs4ZHD0oMUlt9G2LWuDGoisJTBzLMV9o= -github.com/golangci/misspell v0.3.5 h1:pLzmVdl3VxTOncgzHcvLOKirdvcx/TydsClUQXTehjo= -github.com/golangci/misspell v0.3.5/go.mod h1:dEbvlSfYbMQDtrpRMQU675gSDLDNa8sCPPChZ7PhiVA= -github.com/golangci/revgrep v0.0.0-20220804021717-745bb2f7c2e6 h1:DIPQnGy2Gv2FSA4B/hh8Q7xx3B7AIDk3DAMeHclH1vQ= -github.com/golangci/revgrep v0.0.0-20220804021717-745bb2f7c2e6/go.mod h1:0AKcRCkMoKvUvlf89F6O7H2LYdhr1zBh736mBItOdRs= -github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4 h1:zwtduBRr5SSWhqsYNgcuWO2kFlpdOZbP0+yRjmvPGys= -github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ= -github.com/google/flatbuffers v2.0.8+incompatible h1:ivUb1cGomAB101ZM1T0nOiWz9pSrTMoa9+EiY7igmkM= -github.com/google/gopacket v1.1.19 h1:ves8RnFZPGiFnTS0uPQStjwru6uO6h+nlr9j6fL7kF8= -github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= -github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26/go.mod h1:dDKJzRmX4S37WGHujM7tX//fmj1uioxKzKxz3lo4HJo= -github.com/google/renameio v0.1.0 h1:GOZbcHa3HfsPKPlmyPyN2KEohoMXOhdMbHrvbpl2QaA= -github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= -github.com/googleapis/enterprise-certificate-proxy v0.2.1/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= -github.com/googleapis/go-type-adapters v1.0.0 h1:9XdMn+d/G57qq1s8dNc5IesGCXHf6V2HZ2JwRxfA2tA= -github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8 h1:tlyzajkF3030q6M8SvmJSemC9DTHL/xaMa18b65+JM4= -github.com/gookit/color v1.5.1 h1:Vjg2VEcdHpwq+oY63s/ksHrgJYCTo0bwWvmmYWdE9fQ= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= -github.com/gordonklaus/ineffassign v0.0.0-20210914165742-4cc7213b9bc8 h1:PVRE9d4AQKmbelZ7emNig1+NT27DUmKZn5qXxfio54U= -github.com/gordonklaus/ineffassign v0.0.0-20210914165742-4cc7213b9bc8/go.mod h1:Qcp2HIAYhR7mNUVSIxZww3Guk4it82ghYcEXIAk+QT0= -github.com/gorilla/context v1.1.1 h1:AWwleXJkX/nhcU9bZSnZoi3h/qGYqQAGhq6zZe/aQW8= -github.com/gostaticanalysis/analysisutil v0.0.0-20190318220348-4088753ea4d3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= -github.com/gostaticanalysis/analysisutil v0.0.3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= -github.com/gostaticanalysis/analysisutil v0.1.0/go.mod h1:dMhHRU9KTiDcuLGdy87/2gTR8WruwYZrKdRq9m1O6uw= -github.com/gostaticanalysis/analysisutil v0.7.1 h1:ZMCjoue3DtDWQ5WyU16YbjbQEQ3VuzwxALrpYd+HeKk= -github.com/gostaticanalysis/analysisutil v0.7.1/go.mod h1:v21E3hY37WKMGSnbsw2S/ojApNWb6C1//mXO48CXbVc= -github.com/gostaticanalysis/comment v1.3.0/go.mod h1:xMicKDx7XRXYdVwY9f9wQpDJVnqWxw9wCauCMKp+IBI= -github.com/gostaticanalysis/comment v1.4.1/go.mod h1:ih6ZxzTHLdadaiSnF5WY3dxUoXfXAlTaRzuaNDlSado= -github.com/gostaticanalysis/comment v1.4.2 h1:hlnx5+S2fY9Zo9ePo4AhgYsYHbM2+eAv8m/s1JiCd6Q= -github.com/gostaticanalysis/comment v1.4.2/go.mod h1:KLUTGDv6HOCotCH8h2erHKmpci2ZoR8VPu34YA2uzdM= -github.com/gostaticanalysis/forcetypeassert v0.1.0 h1:6eUflI3DiGusXGK6X7cCcIgVCpZ2CiZ1Q7jl6ZxNV70= -github.com/gostaticanalysis/forcetypeassert v0.1.0/go.mod h1:qZEedyP/sY1lTGV1uJ3VhWZ2mqag3IkWsDHVbplHXak= -github.com/gostaticanalysis/nilerr v0.1.1 h1:ThE+hJP0fEp4zWLkWHWcRyI2Od0p7DlgYG3Uqrmrcpk= -github.com/gostaticanalysis/nilerr v0.1.1/go.mod h1:wZYb6YI5YAxxq0i1+VJbY0s2YONW0HU0GPE3+5PWN4A= -github.com/gostaticanalysis/testutil v0.3.1-0.20210208050101-bfb5c8eec0e4/go.mod h1:D+FIZ+7OahH3ePw/izIEeH5I06eKs1IKI4Xr64/Am3M= -github.com/gostaticanalysis/testutil v0.4.0 h1:nhdCmubdmDF6VEatUNjgUZBJKWRqugoISdUv3PPQgHY= -github.com/gotestyourself/gotestyourself v2.2.0+incompatible h1:AQwinXlbQR2HvPjQZOmDhRqsv5mZf+Jb1RnSLxcqZcI= -github.com/gotestyourself/gotestyourself v2.2.0+incompatible/go.mod h1:zZKM6oeNM8k+FRljX1mnzVYeS8wiGgQyvST1/GafPbY= -github.com/graph-gophers/graphql-go v1.3.0 h1:Eb9x/q6MFpCLz7jBCiP/WTxjSDrYLR1QY41SORZyNJ0= -github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3 h1:lLT7ZLSzGLI08vc9cpd+tYmNWjdKDqyr/2L+f6U12Fk= -github.com/hanwen/go-fuse/v2 v2.1.1-0.20220112183258-f57e95bda82d h1:ibbzF2InxMOS+lLCphY9PHNKPURDUBNKaG6ErSq8gJQ= -github.com/hashicorp/consul/api v1.18.0 h1:R7PPNzTCeN6VuQNDwwhZWJvzCtGSrNpJqfb22h3yH9g= -github.com/hashicorp/consul/api v1.18.0/go.mod h1:owRRGJ9M5xReDC5nfT8FTJrNAPbT4NM6p/k+d03q2v4= -github.com/hashicorp/consul/sdk v0.3.0 h1:UOxjlb4xVNF93jak1mzzoBatyFju9nrkxpVwIp/QqxQ= -github.com/hashicorp/consul/sdk v0.13.0 h1:lce3nFlpv8humJL8rNrrGHYSKc3q+Kxfeg3Ii1m6ZWU= -github.com/hashicorp/consul/sdk v0.13.0/go.mod h1:0hs/l5fOVhJy/VdcoaNqUSi2AUs95eF5WKtv+EYIQqE= -github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= -github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-bexpr v0.1.10 h1:9kuI5PFotCboP3dkDYFr/wi0gg0QVbSNz5oFRpxn4uE= -github.com/hashicorp/go-getter v1.7.0/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744= -github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= -github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-hclog v1.2.0 h1:La19f8d7WIlm4ogzNHB0JGqs5AUDAZ2UfCY4sJXcJdM= -github.com/hashicorp/go-hclog v1.2.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-msgpack v0.5.3 h1:zKjpN5BK/P5lMYrLmBHdBULWbJ0XpYR+7NGzqkZzoD4= -github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= -github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= -github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= -github.com/hashicorp/go-retryablehttp v0.5.3 h1:QlWt0KvWT0lq8MFppF9tsJGF+ynG7ztc2KIPhzRGk7s= -github.com/hashicorp/go-retryablehttp v0.7.0 h1:eu1EI/mbirUgP5C8hVsTNaGZreBDlYiwC1FZWkvQPQ4= -github.com/hashicorp/go-retryablehttp v0.7.0/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= -github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc= -github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= -github.com/hashicorp/go-sockaddr v1.0.0 h1:GeH6tui99pF4NJgfnhp+L6+FfobzVW3Ah46sLo0ICXs= -github.com/hashicorp/go-sockaddr v1.0.2 h1:ztczhD1jLxIRjVejw8gFomI1BQZOe2WoVOu0SyteCQc= -github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A= -github.com/hashicorp/go-syslog v1.0.0 h1:KaodqZuhUoZereWVIYmpUgZysurB1kBLX2j0MwMrUAE= -github.com/hashicorp/go-uuid v1.0.2 h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2IGE= -github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-version v1.2.1/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go.net v0.0.1 h1:sNCoNyDEvN1xa+X0baata4RdcpKwcMS6DH+xwfqPgjw= -github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= -github.com/hashicorp/logutils v1.0.0 h1:dLEQVugN8vlakKOUE3ihGLTZJRB4j+M2cdTm/ORI65Y= -github.com/hashicorp/mdns v1.0.0 h1:WhIgCr5a7AaVH6jPUwjtRuuE7/RDufnUvzIr48smyxs= -github.com/hashicorp/mdns v1.0.4 h1:sY0CMhFmjIPDMlTB+HfymFHCaYLhgifZ0QhjaYKD/UQ= -github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc= -github.com/hashicorp/memberlist v0.1.3 h1:EmmoJme1matNzb+hMpDuR/0sbJSUisxyqBGG676r31M= -github.com/hashicorp/memberlist v0.5.0 h1:EtYPN8DpAURiapus508I4n9CzHs2W+8NZGbmmR/prTM= -github.com/hashicorp/memberlist v0.5.0/go.mod h1:yvyXLpo0QaGE59Y7hDTsTzDD25JYBZ4mHgHUZ8lrOI0= -github.com/hashicorp/serf v0.10.1 h1:Z1H2J60yRKvfDYAOZLd2MU0ND4AH/WDz7xYHDWQsIPY= -github.com/hashicorp/serf v0.10.1/go.mod h1:yL2t6BqATOLGc5HF7qbFkTfXoPIY0WZdWHfEvMqbG+4= -github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= -github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= -github.com/holiman/bloomfilter/v2 v2.0.3 h1:73e0e/V0tCydx14a0SCYS/EWCxgwLZ18CZcZKVu0fao= -github.com/holiman/uint256 v1.2.0 h1:gpSYcPLWGv4sG43I2mVLiDZCNDh/EpGjSk8tmtxitHM= -github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= -github.com/hudl/fargo v1.4.0 h1:ZDDILMbB37UlAVLlWcJ2Iz1XuahZZTDZfdCKeclfq2s= -github.com/huin/goupnp v1.0.3 h1:N8No57ls+MnjlB+JPiCVSOyy/ot7MJTqlo7rn+NYSqQ= -github.com/huin/goupnp v1.0.3/go.mod h1:ZxNlw5WqJj6wSsRK5+YfflQGXYfccj5VgQsMNixHM7Y= -github.com/iancoleman/strcase v0.2.0 h1:05I4QRnGpI0m37iZQRuskXh+w77mr6Z41lwQzuHLwW0= -github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= -github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639 h1:mV02weKRL81bEnm8A0HT1/CAelMQDBuQIfLw8n+d6xI= -github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk= -github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= -github.com/influxdata/influxdb v1.8.3 h1:WEypI1BQFTT4teLM+1qkEcvUi0dAvopAI/ir0vAiBg8= -github.com/influxdata/influxdb-client-go/v2 v2.4.0 h1:HGBfZYStlx3Kqvsv1h2pJixbCl/jhnFtxpKFAv9Tu5k= -github.com/influxdata/influxdb1-client v0.0.0-20200827194710-b269163b24ab h1:HqW4xhhynfjrtEiiSGcQUd6vrK23iMam1FO8rI7mwig= -github.com/influxdata/line-protocol v0.0.0-20210311194329-9aa0e372d097 h1:vilfsDSy7TDxedi9gyBkMvAirat/oRcL0lFdJBf6tdM= -github.com/informalsystems/tm-load-test v1.3.0 h1:FGjKy7vBw6mXNakt+wmNWKggQZRsKkEYpaFk/zR64VA= -github.com/informalsystems/tm-load-test v1.3.0/go.mod h1:OQ5AQ9TbT5hKWBNIwsMjn6Bf4O0U4b1kRc+0qZlQJKw= -github.com/intel/goresctrl v0.2.0 h1:JyZjdMQu9Kl/wLXe9xA6s1X+tF6BWsQPFGJMEeCfWzE= -github.com/ipfs/go-datastore v0.5.1 h1:WkRhLuISI+XPD0uk3OskB0fYFSyqK8Ob5ZYew9Qa1nQ= -github.com/ipfs/go-ds-badger v0.3.0 h1:xREL3V0EH9S219kFFueOYJJTcjgNSZ2HY1iSvN7U1Ro= -github.com/ipfs/go-ds-leveldb v0.5.0 h1:s++MEBbD3ZKc9/8/njrn4flZLnCuY9I79v94gBUNumo= -github.com/ipfs/go-log/v2 v2.5.1 h1:1XdUzF7048prq4aBjDQQ4SL5RxftpRGdXhNRwKSAlcY= -github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= -github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= -github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= -github.com/jbenet/go-temp-err-catcher v0.1.0 h1:zpb3ZH6wIE8Shj2sKS+khgRvf7T7RABoLk/+KKHggpk= -github.com/jbenet/goprocess v0.1.4 h1:DRGOFReOMqqDNXwW70QkacFW0YN9QnwLV0Vqk+3oU0o= -github.com/jdxcode/netrc v0.0.0-20210204082910-926c7f70242a h1:d4+I1YEKVmWZrgkt6jpXBnLgV2ZjO0YxEtLDdfIZfH4= -github.com/jdxcode/netrc v0.0.0-20210204082910-926c7f70242a/go.mod h1:Zi/ZFkEqFHTm7qkjyNJjaWH4LQA9LQhGJyF0lTYGpxw= -github.com/jedisct1/go-minisign v0.0.0-20190909160543-45766022959e h1:UvSe12bq+Uj2hWd8aOlwPmoZ+CITRFrdit+sDGfAg8U= -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/jessevdk/go-flags v1.5.0 h1:1jKYvbxEjfUl0fmqTCOfonvskHHXMjBySTLW4y9LFvc= -github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= -github.com/jgautheron/goconst v1.5.1 h1:HxVbL1MhydKs8R8n/HE5NPvzfaYmQJA3o879lE4+WcM= -github.com/jgautheron/goconst v1.5.1/go.mod h1:aAosetZ5zaeC/2EfMeRswtxUFBpe2Hr7HzkgX4fanO4= -github.com/jhump/gopoet v0.0.0-20190322174617-17282ff210b3/go.mod h1:me9yfT6IJSlOL3FCfrg+L6yzUEZ+5jW6WHt4Sk+UPUI= -github.com/jhump/gopoet v0.1.0 h1:gYjOPnzHd2nzB37xYQZxj4EIQNpBrBskRqQQ3q4ZgSg= -github.com/jhump/gopoet v0.1.0/go.mod h1:me9yfT6IJSlOL3FCfrg+L6yzUEZ+5jW6WHt4Sk+UPUI= -github.com/jhump/goprotoc v0.5.0 h1:Y1UgUX+txUznfqcGdDef8ZOVlyQvnV0pKWZH08RmZuo= -github.com/jhump/goprotoc v0.5.0/go.mod h1:VrbvcYrQOrTi3i0Vf+m+oqQWk9l72mjkJCYo7UvLHRQ= -github.com/jhump/protocompile v0.0.0-20220216033700-d705409f108f h1:BNuUg9k2EiJmlMwjoef3e8vZLHplbVw6DrjGFjLL+Yo= -github.com/jhump/protocompile v0.0.0-20220216033700-d705409f108f/go.mod h1:qr2b5kx4HbFS7/g4uYO5qv9ei8303JMsC7ESbYiqr2Q= -github.com/jhump/protoreflect v1.11.0/go.mod h1:U7aMIjN0NWq9swDP7xDdoMfRHb35uiuTd3Z9nFXJf5E= -github.com/jhump/protoreflect v1.12.1-0.20220721211354-060cc04fc18b/go.mod h1:JytZfP5d0r8pVNLZvai7U/MCuTWITgrI4tTg7puQFKI= -github.com/jhump/protoreflect v1.15.1/go.mod h1:jD/2GMKKE6OqX8qTjhADU1e6DShO+gavG9e0Q693nKo= -github.com/jingyugao/rowserrcheck v1.1.1 h1:zibz55j/MJtLsjP1OF4bSdgXxwL1b+Vn7Tjzq7gFzUs= -github.com/jingyugao/rowserrcheck v1.1.1/go.mod h1:4yvlZSDb3IyDTUZJUmpZfm2Hwok+Dtp+nu2qOq+er9c= -github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af h1:KA9BjwUk7KlCh6S9EAGWBt1oExIUv9WyNCiRz5amv48= -github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af/go.mod h1:HEWGJkRDzjJY2sqdDwxccsGicWEf9BQOZsq2tV+xzM0= -github.com/jmoiron/sqlx v1.2.0 h1:41Ip0zITnmWNR/vHV+S4m+VoUivnWY5E4OJfLZjCJMA= -github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= -github.com/jonboulle/clockwork v0.1.0 h1:VKV+ZcuP6l3yW9doeqz6ziZGgcynBVQO+obU0+0hcPo= -github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA= -github.com/jrick/logrotate v1.0.0 h1:lQ1bL/n9mBNeIXoTUoYRlK4dHuNJVofX9oWqBtPnSzI= -github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= -github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/jstemmer/go-junit-report v0.9.1 h1:6QPYqodiu3GuPL+7mfx+NwDdp2eTkp9IfEUpgAwUN0o= -github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= -github.com/julienschmidt/httprouter v1.3.0 h1:U0609e9tgbseu3rBINet9P48AI/D3oJs4dN7jwJOQ1U= -github.com/julz/importas v0.1.0 h1:F78HnrsjY3cR7j0etXy5+TU1Zuy7Xt08X/1aJnH5xXY= -github.com/julz/importas v0.1.0/go.mod h1:oSFU2R4XK/P7kNBrnL/FEQlDGN1/6WoxXEjSSXO0DV0= -github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5 h1:PJr+ZMXIecYc1Ey2zucXdR73SMBtgjPgwa31099IMv0= -github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= -github.com/karalabe/usb v0.0.2 h1:M6QQBNxF+CQ8OFvxrT90BA0qBOXymndZnk5q235mFc4= -github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= -github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= -github.com/kisielk/errcheck v1.6.2 h1:uGQ9xI8/pgc9iOoCe7kWQgRE6SBTrCGmTSf0LrEtY7c= -github.com/kisielk/errcheck v1.6.2/go.mod h1:nXw/i/MfnvRHqXa7XXmQMUB0oNFGuBrNI8d8NLy0LPw= -github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg= -github.com/kkHAIKE/contextcheck v1.1.3 h1:l4pNvrb8JSwRd51ojtcOxOeHJzHek+MtOyXbaR0uvmw= -github.com/kkHAIKE/contextcheck v1.1.3/go.mod h1:PG/cwd6c0705/LM0KTr1acO2gORUxkSVWyLJOFW5qoo= -github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23 h1:FOOIBWrEkLgmlgGfMuZT83xIwfPDxEI2OHu6xUmJMFE= -github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= -github.com/klauspost/asmfmt v1.3.2 h1:4Ri7ox3EwapiOjCki+hw14RyKk201CN4rzyCJRFLpK4= -github.com/klauspost/cpuid v0.0.0-20170728055534-ae7887de9fa5 h1:2U0HzY8BJ8hVwDKIzp7y4voR9CX/nvcfymLmg2UiOio= -github.com/klauspost/pgzip v1.2.5 h1:qnWYvvKqedOF2ulHpMG72XQol4ILEJ8k2wwRl/Km8oE= -github.com/klauspost/pgzip v1.2.5/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= -github.com/konsorten/go-windows-terminal-sequences v1.0.3 h1:CE8S1cTafDpPvMhIxNJKvHsGVBgn1xWYf1NbHQhywc8= -github.com/koron/go-ssdp v0.0.3 h1:JivLMY45N76b4p/vsWGOKewBQu6uf39y8l+AQ7sDKx8= -github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515 h1:T+h1c/A9Gawja4Y9mFVWj2vyii2bbUNDw3kt9VxK2EY= -github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= -github.com/kr/pty v1.1.1 h1:VkoXIwSboBpnk99O/KFauAEILuNHv5DVFKZMBN/gUgw= -github.com/kulti/thelper v0.6.3 h1:ElhKf+AlItIu+xGnI990no4cE2+XaSu1ULymV2Yulxs= -github.com/kulti/thelper v0.6.3/go.mod h1:DsqKShOvP40epevkFrvIwkCMNYxMeTNjdWL4dqWHZ6I= -github.com/kunwardeep/paralleltest v1.0.6 h1:FCKYMF1OF2+RveWlABsdnmsvJrei5aoyZoaGS+Ugg8g= -github.com/kunwardeep/paralleltest v1.0.6/go.mod h1:Y0Y0XISdZM5IKm3TREQMZ6iteqn1YuwCsJO/0kL9Zes= -github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= -github.com/kyoh86/exportloopref v0.1.8 h1:5Ry/at+eFdkX9Vsdw3qU4YkvGtzuVfzT4X7S77LoN/M= -github.com/kyoh86/exportloopref v0.1.8/go.mod h1:1tUcJeiioIs7VWe5gcOObrux3lb66+sBqGZrRkMwPgg= -github.com/ldez/gomoddirectives v0.2.3 h1:y7MBaisZVDYmKvt9/l1mjNCiSA1BVn34U0ObUcJwlhA= -github.com/ldez/gomoddirectives v0.2.3/go.mod h1:cpgBogWITnCfRq2qGoDkKMEVSaarhdBr6g8G04uz6d0= -github.com/ldez/tagliatelle v0.3.1 h1:3BqVVlReVUZwafJUwQ+oxbx2BEX2vUG4Yu/NOfMiKiM= -github.com/ldez/tagliatelle v0.3.1/go.mod h1:8s6WJQwEYHbKZDsp/LjArytKOG8qaMrKQQ3mFukHs88= -github.com/leonklingele/grouper v1.1.0 h1:tC2y/ygPbMFSBOs3DcyaEMKnnwH7eYKzohOtRrf0SAg= -github.com/leonklingele/grouper v1.1.0/go.mod h1:uk3I3uDfi9B6PeUjsCKi6ndcf63Uy7snXgR4yDYQVDY= -github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/libp2p/go-cidranger v1.1.0 h1:ewPN8EZ0dd1LSnrtuwd4709PXVcITVeuwbag38yPW7c= -github.com/libp2p/go-flow-metrics v0.1.0 h1:0iPhMI8PskQwzh57jB9WxIuIOQ0r+15PChFGkx3Q3WM= -github.com/libp2p/go-libp2p-asn-util v0.2.0 h1:rg3+Os8jbnO5DxkC7K/Utdi+DkY3q/d1/1q+8WeNAsw= -github.com/libp2p/go-libp2p-testing v0.11.0 h1:+R7FRl/U3Y00neyBSM2qgDzqz3HkWH24U9nMlascHL4= -github.com/libp2p/go-mplex v0.7.0 h1:BDhFZdlk5tbr0oyFq/xv/NPGfjbnrsDam1EvutpBDbY= -github.com/libp2p/go-msgio v0.2.0 h1:W6shmB+FeynDrUVl2dgFQvzfBZcXiyqY4VmpQLu9FqU= -github.com/libp2p/go-nat v0.1.0 h1:MfVsH6DLcpa04Xr+p8hmVRG4juse0s3J8HyNWYHffXg= -github.com/libp2p/go-netroute v0.2.0 h1:0FpsbsvuSnAhXFnCY0VLFbJOzaK0VnP0r1QT/o4nWRE= -github.com/libp2p/go-reuseport v0.2.0 h1:18PRvIMlpY6ZK85nIAicSBuXXvrYoSw3dsBAR7zc560= -github.com/libp2p/go-yamux/v3 v3.1.2 h1:lNEy28MBk1HavUAlzKgShp+F6mn/ea1nDYWftZhFW9Q= -github.com/libp2p/zeroconf/v2 v2.2.0 h1:Cup06Jv6u81HLhIj1KasuNM/RHHrJ8T7wOTS4+Tv53Q= -github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743 h1:143Bb8f8DuGWck/xpNUOckBVYfFbBTnLevfRZ1aVVqo= -github.com/lightstep/lightstep-tracer-go v0.18.1 h1:vi1F1IQ8N7hNWytK9DpJsUfQhGuNSc19z330K6vl4zk= -github.com/linxGnu/grocksdb v1.7.10 h1:dz7RY7GnFUA+GJO6jodyxgkUeGMEkPp3ikt9hAcNGEw= -github.com/lucas-clemente/quic-go v0.28.1 h1:Uo0lvVxWg5la9gflIF9lwa39ONq85Xq2D91YNEIslzU= -github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= -github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= -github.com/lufeee/execinquery v1.2.1 h1:hf0Ems4SHcUGBxpGN7Jz78z1ppVkP/837ZlETPCEtOM= -github.com/lufeee/execinquery v1.2.1/go.mod h1:EC7DrEKView09ocscGHC+apXMIaorh4xqSxS/dy8SbM= -github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4= -github.com/lyft/protoc-gen-star v0.6.0/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= -github.com/lyft/protoc-gen-star/v2 v2.0.1 h1:keaAo8hRuAT0O3DfJ/wM3rufbAjGeJ1lAtWZHDjKGB0= -github.com/lyft/protoc-gen-validate v0.0.13 h1:KNt/RhmQTOLr7Aj8PsJ7mTronaFyx80mRTT9qF261dA= -github.com/magefile/mage v1.14.0 h1:6QDX3g6z1YvJ4olPhT1wksUcSa/V0a1B+pJb73fBjyo= -github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= -github.com/maratori/testableexamples v1.0.0 h1:dU5alXRrD8WKSjOUnmJZuzdxWOEQ57+7s93SLMxb2vI= -github.com/maratori/testableexamples v1.0.0/go.mod h1:4rhjL1n20TUTT4vdh3RDqSizKLyXp7K2u6HgraZCGzE= -github.com/maratori/testpackage v1.1.0 h1:GJY4wlzQhuBusMF1oahQCBtUV/AQ/k69IZ68vxaac2Q= -github.com/maratori/testpackage v1.1.0/go.mod h1:PeAhzU8qkCwdGEMTEupsHJNlQu2gZopMC6RjbhmHeDc= -github.com/marten-seemann/qtls-go1-16 v0.1.5 h1:o9JrYPPco/Nukd/HpOHMHZoBDXQqoNtUCmny98/1uqQ= -github.com/marten-seemann/qtls-go1-17 v0.1.2 h1:JADBlm0LYiVbuSySCHeY863dNkcpMmDR7s0bLKJeYlQ= -github.com/marten-seemann/qtls-go1-18 v0.1.2 h1:JH6jmzbduz0ITVQ7ShevK10Av5+jBEKAHMntXmIV7kM= -github.com/marten-seemann/qtls-go1-19 v0.1.0 h1:rLFKD/9mp/uq1SYGYuVZhm83wkmU95pK5df3GufyYYU= -github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd h1:br0buuQ854V8u83wA0rVZ8ttrq5CpaPZdvrK0LP2lOk= -github.com/matoous/godox v0.0.0-20210227103229-6504466cf951 h1:pWxk9e//NbPwfxat7RXkts09K+dEBJWakUWwICVqYbA= -github.com/matoous/godox v0.0.0-20210227103229-6504466cf951/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= -github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA= -github.com/matryer/is v1.4.0 h1:sosSmIWwkYITGrxZ25ULNDeKiMNzFSr4V/eqBQP0PeE= -github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= -github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -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-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= -github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= -github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU= -github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= -github.com/mattn/go-sqlite3 v1.14.16/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= -github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= -github.com/mbilski/exhaustivestruct v1.2.0 h1:wCBmUnSYufAHO6J4AVWY6ff+oxWxsVFrwgOdMUQePUo= -github.com/mbilski/exhaustivestruct v1.2.0/go.mod h1:OeTBVxQWoEmB2J2JCHmXWPJ0aksxSUOUy+nvtVEfzXc= -github.com/mgechev/dots v0.0.0-20210922191527-e955255bf517 h1:zpIH83+oKzcpryru8ceC6BxnoG8TBrhgAvRg8obzup0= -github.com/mgechev/revive v1.2.4 h1:+2Hd/S8oO2H0Ikq2+egtNwQsVhAeELHjxjIUFX5ajLI= -github.com/mgechev/revive v1.2.4/go.mod h1:iAWlQishqCuj4yhV24FTnKSXGpbAA+0SckXB8GQMX/Q= -github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= -github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= -github.com/miekg/dns v1.1.50 h1:DQUfb9uc6smULcREF09Uc+/Gd46YWqJd5DbpPE9xkcA= -github.com/miekg/pkcs11 v1.1.1 h1:Ugu9pdy6vAYku5DEpVWVFPYnzV+bxB+iRdbuFSu7TvU= -github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b h1:z78hV3sbSMAUoyUMM0I83AUIT6Hu17AWfgjzIbtrYFc= -github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc h1:PTfri+PuQmWDqERdnNMiD9ZejrlswWrCpBEZgWOiTrc= -github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8 h1:AMFGa4R4MiIpspGNG7Z948v4n35fFGB3RR3G/ry4FWs= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= -github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3 h1:+n/aFZefKZp7spd8DFdX7uMikMLXX4oubIzJF4kv/wI= -github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible h1:aKW/4cBs+yK6gpqU3K/oIwk9Q/XICqd3zOX/UFuvqmk= -github.com/mitchellh/cli v1.0.0 h1:iGBIsUe3+HZ/AD/Vd7DErOt5sU9fa8Uj7A2s1aggv1Y= -github.com/mitchellh/cli v1.1.0 h1:tEElEatulEHDeedTxwckzyYMA5c86fbmNIUL1hBIiTg= -github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= -github.com/mitchellh/go-ps v1.0.0 h1:i6ampVEEF4wQFF+bkYfwYgY+F/uYJDktmvLPf7qIgjc= -github.com/mitchellh/go-wordwrap v1.0.0 h1:6GlHJ/LTGMrIJbwgdqdl2eEH8o+Exx/0m8ir9Gns0u4= -github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= -github.com/mitchellh/gox v0.4.0 h1:lfGJxY7ToLJQjHHwi0EX6uYBdK78egf954SQl13PQJc= -github.com/mitchellh/hashstructure/v2 v2.0.2 h1:vGKWl0YJqUNxE8d+h8f6NJLcCJrgbhC4NcD46KavDd4= -github.com/mitchellh/iochan v1.0.0 h1:C+X3KsSTLFVBr/tK1eYN/vs4rJcvsiLU338UhYPJWeY= -github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/pointerstructure v1.2.0 h1:O+i9nHnXS3l/9Wu7r4NrEdwA2VFTicjUEN1uBnDo34A= -github.com/moby/buildkit v0.10.4 h1:FvC+buO8isGpUFZ1abdSLdGHZVqg9sqI4BbFL8tlzP4= -github.com/moby/buildkit v0.10.4/go.mod h1:Yajz9vt1Zw5q9Pp4pdb3TCSUXJBIroIQGQ3TTs/sLug= -github.com/moby/locker v1.0.1 h1:fOXqR41zeveg4fFODix+1Ch4mj/gT0NE1XJbp/epuBg= -github.com/moby/spdystream v0.2.0 h1:cjW1zVyyoiM0T7b6UoySUFqzXMoqRckQtXwGPiBhOM8= -github.com/moby/sys/mount v0.3.0 h1:bXZYMmq7DBQPwHRxH/MG+u9+XF90ZOwoXpHTOznMGp0= -github.com/moby/sys/mountinfo v0.5.0/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU= -github.com/moby/sys/mountinfo v0.6.0 h1:gUDhXQx58YNrpHlK4nSL+7y2pxFZkUcXqzFDKWdC0Oo= -github.com/moby/sys/signal v0.6.0 h1:aDpY94H8VlhTGa9sNYUFCFsMZIUh5wm0B6XkIoJj/iY= -github.com/moby/sys/symlink v0.2.0 h1:tk1rOM+Ljp0nFmfOIBtlV3rTDlWOwFRhjEeAhZB0nZc= -github.com/moby/term v0.0.0-20220808134915-39b0c02b01ae/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw= -github.com/moricho/tparallel v0.2.1 h1:95FytivzT6rYzdJLdtfn6m1bfFJylOJK41+lgv/EHf4= -github.com/moricho/tparallel v0.2.1/go.mod h1:fXEIZxG2vdfl0ZF8b42f5a78EhjjD5mX8qUplsoSU4k= -github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= -github.com/mozilla/tls-observatory v0.0.0-20210609171429-7bc42856d2e5 h1:0KqC6/sLy7fDpBdybhVkkv4Yz+PmB7c9Dz9z3dLW804= -github.com/mrunalp/fileutils v0.5.0 h1:NKzVxiH7eSk+OQ4M+ZYW1K6h27RUV3MI6NUTsHhU6Z4= -github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ= -github.com/multiformats/go-multiaddr-dns v0.3.1 h1:QgQgR+LQVt3NPTjbrLLpsaT2ufAA2y0Mkk+QRVJbW3A= -github.com/multiformats/go-multiaddr-fmt v0.1.0 h1:WLEFClPycPkp4fnIzoFoV9FVd49/eQsuaL3/CWe167E= -github.com/multiformats/go-multistream v0.3.3 h1:d5PZpjwRgVlbwfdTDjife7XszfZd8KYWfROYFlGcR8o= -github.com/mwitkow/grpc-proxy v0.0.0-20181017164139-0f1106ef9c76 h1:0xuRacu/Zr+jX+KyLLPPktbwXqyOvnOPUQmMLzX1jxU= -github.com/nakabonne/nestif v0.3.1 h1:wm28nZjhQY5HyYPx+weN3Q65k6ilSBxDb8v5S81B81U= -github.com/nakabonne/nestif v0.3.1/go.mod h1:9EtoZochLn5iUprVDmDjqGKPofoUEBL8U4Ngq6aY7OE= -github.com/naoina/go-stringutil v0.1.0 h1:rCUeRUHjBjGTSHl0VC00jUPLz8/F9dDzYI70Hzifhks= -github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416 h1:shk/vn9oCoOTmwcouEdwIeOtOGA/ELRUw/GwvxwfT+0= -github.com/nats-io/jwt v0.3.2 h1:+RB5hMpXUUA2dfxuhBTEkMOrYmM+gKIZYS1KjSostMI= -github.com/nats-io/jwt/v2 v2.0.3 h1:i/O6cmIsjpcQyWDYNcq2JyZ3/VTF8SJ4JWluI5OhpvI= -github.com/nats-io/nats-server/v2 v2.5.0 h1:wsnVaaXH9VRSg+A2MVg5Q727/CqxnmPLGFQ3YZYKTQg= -github.com/nats-io/nats.go v1.12.1 h1:+0ndxwUPz3CmQ2vjbXdkC1fo3FdiOQDim4gl3Mge8Qo= -github.com/nats-io/nkeys v0.3.0 h1:cgM5tL53EvYRU+2YLXIK0G2mJtK12Ft9oeooSZMA2G8= -github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw= -github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354 h1:4kuARK6Y6FxaNu/BnU2OAaLF86eTVhP2hjTB6iMvItA= -github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354/go.mod h1:KSVJerMDfblTH7p5MZaTt+8zaT2iEk3AkVb9PQdZuE8= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= -github.com/nishanths/exhaustive v0.8.3 h1:pw5O09vwg8ZaditDp/nQRqVnrMczSJDxRDJMowvhsrM= -github.com/nishanths/exhaustive v0.8.3/go.mod h1:qj+zJJUgJ76tR92+25+03oYUhzF4R7/2Wk7fGTfCHmg= -github.com/nishanths/predeclared v0.2.2 h1:V2EPdZPliZymNAn79T8RkNApBjMmVKh5XRpLm/w98Vk= -github.com/nishanths/predeclared v0.2.2/go.mod h1:RROzoN6TnGQupbC+lqggsOlcgysk3LMK/HI84Mp280c= -github.com/oklog/oklog v0.3.2 h1:wVfs8F+in6nTBMkA7CbRw+zZMIB7nNM825cM1wuzoTk= -github.com/oklog/run v1.0.0 h1:Ru7dDtJNOyC66gQ5dQmaCa0qIsAUFY3sFpK1Xk8igrw= -github.com/oklog/ulid/v2 v2.1.0 h1:+9lhoxAP56we25tyYETBBY1YLA2SaoLvUFgrP2miPJU= -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/v2 v2.1.4 h1:GNapqRSid3zijZ9H77KrgVG4/8KqiyRsxcSxe+7ApXY= -github.com/onsi/ginkgo/v2 v2.1.4/go.mod h1:um6tUpWM/cxCK3/FK8BXqEiUMUwRgSM4JXG47RKZmLU= -github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= -github.com/onsi/gomega v1.20.0/go.mod h1:DtrZpjmvpn2mPm4YWQa0/ALMDj9v4YxLgojwPeREyVo= -github.com/op/go-logging v0.0.0-20160315200505-970db520ece7 h1:lDH9UUVJtmYCjyT0CI4q8xvlXPxeZ0gYCVvWbmPlp88= -github.com/opencontainers/runc v1.1.3/go.mod h1:1J5XiS+vdZ3wCyZybsuxXZWGrgSr8fFJHLXuG2PsnNg= -github.com/opencontainers/runtime-spec v1.0.2 h1:UfAcuLBJB9Coz72x1hgl8O5RVzTdNiaglX6v2DM6FI0= -github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417 h1:3snG66yBm59tKhhSPQrQ/0bCrv1LQbKt40LnUPiUxdc= -github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/selinux v1.10.0/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI= -github.com/opencontainers/selinux v1.10.1 h1:09LIPVRP3uuZGQvgR+SgMSNBd1Eb3vlRbGqQpoHsF8w= -github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492 h1:lM6RxxfUMrYL/f8bWEUqdXrANWtrL7Nndbm9iFN0DlU= -github.com/opentracing/basictracer-go v1.0.0 h1:YyUAhaEfjoWXclZVJ9sGoNct7j4TVk7lZWlQw5UXuoo= -github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= -github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= -github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5 h1:ZCnq+JUrvXcDVhX/xRolRBZifmabN1HcS1wrPSvxhrU= -github.com/openzipkin/zipkin-go v0.2.5 h1:UwtQQx2pyPIgWYHRg+epgdx1/HnBQTgN3/oIYEJTQzU= -github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= -github.com/ory/dockertest/v3 v3.9.1 h1:v4dkG+dlu76goxMiTT2j8zV7s4oPPEppKT8K8p2f1kY= -github.com/otiai10/copy v1.2.0 h1:HvG945u96iNadPoG2/Ja2+AUJeW5YuFQMixq9yirC+k= -github.com/otiai10/copy v1.2.0/go.mod h1:rrF5dJ5F0t/EWSYODDu4j9/vEeYHMkc8jt0zJChqQWw= -github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= -github.com/otiai10/curr v1.0.0 h1:TJIWdbX0B+kpNagQrjgq8bCMrbhiuX73M2XwgtDMoOI= -github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs= -github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo= -github.com/otiai10/mint v1.3.1 h1:BCmzIS3n71sGfHB5NMNDB3lHYPz8fWSkCAErHed//qc= -github.com/otiai10/mint v1.3.1/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= -github.com/pact-foundation/pact-go v1.0.4 h1:OYkFijGHoZAYbOIb1LWXrwKQbMMRUv1oQ89blD2Mh2Q= -github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 h1:onHthvaw9LFnH4t2DcNVpwGmV9E1BkGknEliJkfwQj0= -github.com/pborman/uuid v1.2.0 h1:J7Q5mO4ysT1dv8hyrUGHb9+ooztCXu1D8MY8DZYsu3g= -github.com/pelletier/go-toml/v2 v2.0.5/go.mod h1:OMHamSCAODeSsVrwwvcJOaoN0LIUIaFVNZzmWyNfXas= -github.com/pelletier/go-toml/v2 v2.0.6/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek= -github.com/performancecopilot/speed v3.0.0+incompatible h1:2WnRzIquHa5QxaJKShDkLM+sc0JPuwhXzK8OYOyt3Vg= -github.com/performancecopilot/speed/v4 v4.0.0 h1:VxEDCmdkfbQYDlcr/GC9YoN9PQ6p8ulk9xVsepYy9ZY= -github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7 h1:oYW+YCJ1pachXTQmzR3rNLYGGz4g/UgFcjb28p/viDM= -github.com/petermattis/goid v0.0.0-20221215004737-a150e88a970d/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= -github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d h1:CdDQnGF8Nq9ocOS/xlSptM1N3BbrA6/kmaep5ggwaIA= -github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d/go.mod h1:3OzsM7FXDQlpCiw2j81fOmAwQLnZnLGXVKUzeKQXIAw= -github.com/pierrec/lz4 v2.0.5+incompatible h1:2xWsjqPFWcplujydGg4WmhC/6fZqK42wMM8aXeqhl0I= -github.com/pierrec/lz4/v4 v4.1.15 h1:MO0/ucJhngq7299dKLwIMtgTfbkoSPF6AoMYDd8Q4q0= -github.com/pjbgf/sha1cd v0.2.3 h1:uKQP/7QOzNtKYH7UTohZLcjF5/55EnTw0jO/Ru4jZwI= -github.com/pjbgf/sha1cd v0.2.3/go.mod h1:HOK9QrgzdHpbc2Kzip0Q1yi3M2MFGPADtR6HjG65m5M= -github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU= -github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= -github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e h1:aoZm08cpOy4WuID//EZDgcC4zIxODThtZNPirFr42+A= -github.com/pkg/profile v1.6.0 h1:hUDfIISABYI59DyeB3OTay/HxSRwTQ8rB/H83k6r5dM= -github.com/pkg/profile v1.6.0/go.mod h1:qBsxPvzyUincmltOk6iyRVxHYg4adc0OFOv72ZdLa18= -github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= -github.com/pkg/sftp v1.13.1 h1:I2qBYMChEhIjOgazfJmV3/mZM256btk6wkCDRmW7JYs= -github.com/pointlander/compress v1.1.1-0.20190518213731-ff44bd196cc3 h1:hUmXhbljNFtrH5hzV9kiRoddZ5nfPTq3K0Sb2hYYiqE= -github.com/pointlander/compress v1.1.1-0.20190518213731-ff44bd196cc3/go.mod h1:q5NXNGzqj5uPnVuhGkZfmgHqNUhf15VLi6L9kW0VEc0= -github.com/pointlander/jetset v1.0.1-0.20190518214125-eee7eff80bd4 h1:RHHRCZeaNyBXdYPMjZNH8/XHDBH38TZzw8izrW7dmBE= -github.com/pointlander/jetset v1.0.1-0.20190518214125-eee7eff80bd4/go.mod h1:RdR1j20Aj5pB6+fw6Y9Ur7lMHpegTEjY1vc19hEZL40= -github.com/pointlander/peg v1.0.1 h1:mgA/GQE8TeS9MdkU6Xn6iEzBmQUQCNuWD7rHCK6Mjs0= -github.com/pointlander/peg v1.0.1/go.mod h1:5hsGDQR2oZI4QoWz0/Kdg3VSVEC31iJw/b7WjqCBGRI= -github.com/polyfloyd/go-errorlint v1.0.5 h1:AHB5JRCjlmelh9RrLxT9sgzpalIwwq4hqE8EkwIwKdY= -github.com/polyfloyd/go-errorlint v1.0.5/go.mod h1:APVvOesVSAnne5SClsPxPdfvZTVDojXh1/G3qb5wjGI= -github.com/posener/complete v1.1.1 h1:ccV59UEOTzVDnDUEFdT95ZzHVZ+5+158q8+SJb2QV5w= -github.com/posener/complete v1.2.3 h1:NP0eAhjcjImqslEwo/1hq7gpajME0fTLTezBKDqfXqo= -github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= -github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw= -github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= -github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= -github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= -github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= -github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= -github.com/prometheus/common v0.40.0/go.mod h1:L65ZJPSmfn/UBWLQIHV7dBrKFidB/wPlF1y5TlSt9OE= -github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= -github.com/prometheus/tsdb v0.7.1 h1:YZcsG11NqnK4czYLrWd9mpEuAJIHVQLwdrleYfszMAA= -github.com/quasilyte/go-ruleguard v0.3.1-0.20210203134552-1b5a410e1cc8/go.mod h1:KsAh3x0e7Fkpgs+Q9pNLS5XpFSvYCEVl5gP9Pp1xp30= -github.com/quasilyte/go-ruleguard v0.3.18 h1:sd+abO1PEI9fkYennwzHn9kl3nqP6M5vE7FiOzZ+5CE= -github.com/quasilyte/go-ruleguard v0.3.18/go.mod h1:lOIzcYlgxrQ2sGJ735EHXmf/e9MJ516j16K/Ifcttvs= -github.com/quasilyte/go-ruleguard/dsl v0.3.0/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= -github.com/quasilyte/go-ruleguard/dsl v0.3.21 h1:vNkC6fC6qMLzCOGbnIHOd5ixUGgTbp3Z4fGnUgULlDA= -github.com/quasilyte/go-ruleguard/dsl v0.3.21/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= -github.com/quasilyte/go-ruleguard/rules v0.0.0-20201231183845-9e62ed36efe1/go.mod h1:7JTjp89EGyU1d6XfBiXihJNG37wB2VRkd125Q1u7Plc= -github.com/quasilyte/go-ruleguard/rules v0.0.0-20211022131956-028d6511ab71 h1:CNooiryw5aisadVfzneSZPswRWvnVW8hF1bS/vo8ReI= -github.com/quasilyte/go-ruleguard/rules v0.0.0-20211022131956-028d6511ab71/go.mod h1:4cgAphtvu7Ftv7vOT2ZOYhC6CvBxZixcasr8qIOTA50= -github.com/quasilyte/gogrep v0.0.0-20220828223005-86e4605de09f h1:6Gtn2i04RD0gVyYf2/IUMTIs+qYleBt4zxDqkLTcu4U= -github.com/quasilyte/gogrep v0.0.0-20220828223005-86e4605de09f/go.mod h1:Cm9lpz9NZjEoL1tgZ2OgeUKPIxL1meE7eo60Z6Sk+Ng= -github.com/quasilyte/regex/syntax v0.0.0-20200407221936-30656e2c4a95 h1:L8QM9bvf68pVdQ3bCFZMDmnt9yqcMBro1pC7F+IPYMY= -github.com/quasilyte/regex/syntax v0.0.0-20200407221936-30656e2c4a95/go.mod h1:rlzQ04UMyJXu/aOvhd8qT+hvDrFpiwqp8MRXDY9szc0= -github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567 h1:M8mH9eK4OUR4lu7Gd+PU1fV2/qnDNfzT635KRSObncs= -github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567/go.mod h1:DWNGW8A4Y+GyBgPuaQJuWiy0XYftx4Xm/y5Jqk9I6VQ= -github.com/raulk/go-watchdog v1.3.0 h1:oUmdlHxdkXRJlwfG0O9omj8ukerm8MEQavSiDTEtBsk= -github.com/remyoudompheng/go-dbus v0.0.0-20121104212943-b7232d34b1d5 h1:CvqZS4QYHBRvx7AeFdimd16HCbLlYsvQMcKDACpJW/c= -github.com/remyoudompheng/go-liblzma v0.0.0-20190506200333-81bf2d431b96 h1:J8J/cgLDRuqXJnwIrRDBvtl+LLsdg7De74znW/BRRq4= -github.com/remyoudompheng/go-misc v0.0.0-20190427085024-2d6ac652a50e h1:eTWZyPUnHcuGRDiryS/l2I7FfKjbU3IBx3IjqHPxuKU= -github.com/rivo/tview v0.0.0-20220307222120-9994674d60a8 h1:xe+mmCnDN82KhC010l3NfYlA8ZbOuzbXAzSYBa6wbMc= -github.com/rivo/tview v0.0.0-20220307222120-9994674d60a8/go.mod h1:WIfMkQNY+oq/mWwtsjOYHIZBuwthioY2srOmljJkTnk= -github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= -github.com/rivo/uniseg v0.4.3 h1:utMvzDsuh3suAEnhH0RdHmoPbU648o6CvXxTx4SBMOw= -github.com/rivo/uniseg v0.4.3/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= -github.com/rjeczalik/notify v0.9.1 h1:CLCKso/QK1snAlnhNR/CNvNiFU2saUtjV0bx3EwNeCE= -github.com/rogpeppe/fastuuid v1.2.0 h1:Ppwyp6VYCF1nvBTXL3trRso7mXMlRrw9ooo375wvi2s= -github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= -github.com/rs/cors v1.8.2/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= -github.com/rs/xid v1.3.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= -github.com/rs/xid v1.4.0 h1:qd7wPTDkN6KQx2VmMBLrpHkiyQwgFXRnkOLacUiaSNY= -github.com/rs/zerolog v1.27.0/go.mod h1:7frBqO0oezxmnO7GF86FY++uy8I0Tk/If5ni1G9Qc0U= -github.com/russross/blackfriday v1.6.0 h1:KqfZb0pUVN2lYqZUYRddxF4OR8ZMURnJIG5Y3VRLtww= -github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= -github.com/ryancurrah/gomodguard v1.2.4 h1:CpMSDKan0LtNGGhPrvupAoLeObRFjND8/tU1rEOtBp4= -github.com/ryancurrah/gomodguard v1.2.4/go.mod h1:+Kem4VjWwvFpUJRJSwa16s1tBJe+vbv02+naTow2f6M= -github.com/ryanrolds/sqlclosecheck v0.3.0 h1:AZx+Bixh8zdUBxUA1NxbxVAS78vTPq4rCb8OUZI9xFw= -github.com/ryanrolds/sqlclosecheck v0.3.0/go.mod h1:1gREqxyTGR3lVtpngyFo3hZAgk0KCtEdgEkHwDbigdA= -github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f h1:UFr9zpz4xgTnIE5yIMtWAMngCdZ9p/+q6lTbgelo80M= -github.com/ryanuber/columnize v2.1.0+incompatible h1:j1Wcmh8OrK4Q7GXY+V7SVSY8nUWQxHW5TkBe7YUl+2s= -github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/sagikazarmark/crypt v0.9.0 h1:fipzMFW34hFUEc4D7fsLQFtE7yElkpgyS2zruedRdZk= -github.com/sagikazarmark/crypt v0.9.0/go.mod h1:RnH7sEhxfdnPm1z+XMgSLjWTEIjyK4z2dw6+4vHTMuo= -github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da h1:p3Vo3i64TCLY7gIfzeQaUJ+kppEO5WQG3cL8iE8tGHU= -github.com/sanposhiho/wastedassign/v2 v2.0.6 h1:+6/hQIHKNJAUixEj6EmOngGIisyeI+T3335lYTyxRoA= -github.com/sanposhiho/wastedassign/v2 v2.0.6/go.mod h1:KyZ0MWTwxxBmfwn33zh3k1dmsbF2ud9pAAGfoLfjhtI= -github.com/sashamelentyev/interfacebloat v1.1.0 h1:xdRdJp0irL086OyW1H/RTZTr1h/tMEOsumirXcOJqAw= -github.com/sashamelentyev/interfacebloat v1.1.0/go.mod h1:+Y9yU5YdTkrNvoX0xHc84dxiN1iBi9+G8zZIhPVoNjQ= -github.com/sashamelentyev/usestdlibvars v1.20.0 h1:K6CXjqqtSYSsuyRDDC7Sjn6vTMLiSJa4ZmDkiokoqtw= -github.com/sashamelentyev/usestdlibvars v1.20.0/go.mod h1:0GaP+ecfZMXShS0A94CJn6aEuPRILv8h/VuWI9n1ygg= -github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww= -github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= -github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I= -github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646 h1:RpforrEYXWkmGwJHIGnLZ3tTWStkjVVstwzNGqxX2Ds= -github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg= -github.com/securego/gosec/v2 v2.13.1 h1:7mU32qn2dyC81MH9L2kefnQyRMUarfDER3iQyMHcjYM= -github.com/securego/gosec/v2 v2.13.1/go.mod h1:EO1sImBMBWFjOTFzMWfTRrZW6M15gm60ljzrmy/wtHo= -github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0= -github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= -github.com/serialx/hashring v0.0.0-20190422032157-8b2912629002 h1:ka9QPuQg2u4LGipiZGsgkg3rJCo4iIUCy75FddM0GRQ= -github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c h1:W65qqJCIOVP4jpqPQ0YvHYKwcMEMVWIzWC5iNQQfBTU= -github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c/go.mod h1:/PevMnwAxekIXwN8qQyfc5gl2NlkB3CQlkizAbOkeBs= -github.com/shirou/gopsutil/v3 v3.22.9 h1:yibtJhIVEMcdw+tCTbOPiF1VcsuDeTE4utJ8Dm4c5eA= -github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e h1:MZM7FHLqUHYI0Y/mQAt3d2aYa0SiNms/hFqC9qJYolM= -github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= -github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041 h1:llrF3Fs4018ePo4+G/HV/uQUqEI1HMDjCeOf2V6puPc= -github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= -github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= -github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= -github.com/sivchari/containedctx v1.0.2 h1:0hLQKpgC53OVF1VT7CeoFHk9YKstur1XOgfYIc1yrHI= -github.com/sivchari/containedctx v1.0.2/go.mod h1:PwZOeqm4/DLoJOqMSIJs3aKqXRX4YO+uXww087KZ7Bw= -github.com/sivchari/nosnakecase v1.7.0 h1:7QkpWIRMe8x25gckkFd2A5Pi6Ymo0qgr4JrhGt95do8= -github.com/sivchari/nosnakecase v1.7.0/go.mod h1:CwDzrzPea40/GB6uynrNLiorAlgFRvRbFSgJx2Gs+QY= -github.com/sivchari/tenv v1.7.0 h1:d4laZMBK6jpe5PWepxlV9S+LC0yXqvYHiq8E6ceoVVE= -github.com/sivchari/tenv v1.7.0/go.mod h1:64yStXKSOxDfX47NlhVwND4dHwfZDdbp2Lyl018Icvg= -github.com/skeema/knownhosts v1.1.0 h1:Wvr9V0MxhjRbl3f9nMnKnFfiWTJmtECJ9Njkea3ysW0= -github.com/skeema/knownhosts v1.1.0/go.mod h1:sKFq3RD6/TKZkSWn8boUbDC7Qkgcv+8XXijpFO6roag= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= -github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= -github.com/soheilhy/cmux v0.1.4 h1:0HKaf1o97UwFjHH9o5XsHUOF+tqmdA7KEzXLpiyaw0E= -github.com/sonatard/noctx v0.0.1 h1:VC1Qhl6Oxx9vvWo3UDgrGXYCeKCe3Wbw7qAWL6FrmTY= -github.com/sonatard/noctx v0.0.1/go.mod h1:9D2D/EoULe8Yy2joDHJj7bv3sZoq9AaSb8B4lqBjiZI= -github.com/sony/gobreaker v0.4.1 h1:oMnRNZXX5j85zso6xCPRNPtmAycat+WcoKbklScLDgQ= -github.com/sourcegraph/go-diff v0.6.1 h1:hmA1LzxW0n1c3Q4YbrFgg4P99GSnebYa3x8gr0HZqLQ= -github.com/sourcegraph/go-diff v0.6.1/go.mod h1:iBszgVvyxdc8SFZ7gm69go2KDdt3ag071iBaWPF6cjs= -github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= -github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= -github.com/spf13/afero v1.8.2/go.mod h1:CtAatgMJh6bJEIs48Ay/FOnkljP3WeGUG0MC1RfAqwo= -github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= -github.com/spf13/viper v1.13.0/go.mod h1:Icm2xNL3/8uyh/wFuB1jI7TiTNKp8632Nwegu+zgdYw= -github.com/spf13/viper v1.14.0/go.mod h1:WT//axPky3FdvXHzGw33dNdXXXfFQqmEalje+egj8As= -github.com/ssgreg/nlreturn/v2 v2.2.1 h1:X4XDI7jstt3ySqGU86YGAURbxw3oTDPK9sPEi6YEwQ0= -github.com/ssgreg/nlreturn/v2 v2.2.1/go.mod h1:E/iiPB78hV7Szg2YfRgyIrk1AD6JVMTRkkxBiELzh2I= -github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4 h1:Gb2Tyox57NRNuZ2d3rmvB3pcmbu7O1RS3m8WRx7ilrg= -github.com/stbenjam/no-sprintf-host-port v0.1.1 h1:tYugd/yrm1O0dV+ThCbaKZh195Dfm07ysF0U6JQXczc= -github.com/stbenjam/no-sprintf-host-port v0.1.1/go.mod h1:TLhvtIvONRzdmkFiio4O8LHsN9N74I+PhRquPsxpL0I= -github.com/stefanberger/go-pkcs11uri v0.0.0-20201008174630-78d3cae3a980 h1:lIOOHPEbXzO3vnmx2gok1Tfs31Q8GQqKLc8vVqyQq/I= -github.com/streadway/amqp v1.0.0 h1:kuuDrUJFZL1QYL9hUNuCxNObNzB0bV/ZG5jV3RWAQgo= -github.com/streadway/handy v0.0.0-20200128134331-0f66f006fb2e h1:mOtuXaRAbVZsxAHVdPR3IjfmN8T1h2iczJLynhLybf8= -github.com/stretchr/objx v0.3.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= -github.com/stretchr/testify v1.1.4/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.7.5/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/subosito/gotenv v1.4.1/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= -github.com/supranational/blst v0.3.8-0.20220526154634-513d2456b344 h1:m+8fKfQwCAy1QjzINvKe/pYtLjo2dl59x2w9YSEJxuY= -github.com/supranational/blst v0.3.8-0.20220526154634-513d2456b344/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= -github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 h1:kdXcSzyDtseVEc4yCz2qF8ZrQvIDBJLl4S1c3GCXmoI= -github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= -github.com/tchap/go-patricia v2.2.6+incompatible h1:JvoDL7JSoIP2HDE8AbDH3zC8QBPxmzYe32HHy5yQ+Ck= -github.com/tdakkota/asciicheck v0.1.1 h1:PKzG7JUTUmVspQTDqtkX9eSiLGossXTybutHwTXuO0A= -github.com/tdakkota/asciicheck v0.1.1/go.mod h1:yHp0ai0Z9gUljN3o0xMhYJnH/IcvkdTBOX2fmJ93JEM= -github.com/tendermint/tendermint v0.37.0-rc2 h1:2n1em+jfbhSv6QnBj8F6KHCpbIzZCB8KgcjidJUQNlY= -github.com/tendermint/tm-db v0.6.7 h1:fE00Cbl0jayAoqlExN6oyQJ7fR/ZtoVOmvPJ//+shu8= -github.com/tenntenn/modver v1.0.1 h1:2klLppGhDgzJrScMpkj9Ujy3rXPUspSjAcev9tSEBgA= -github.com/tenntenn/modver v1.0.1/go.mod h1:bePIyQPb7UeioSRkw3Q0XeMhYZSMx9B8ePqg6SAMGH0= -github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3 h1:f+jULpRQGxTSkNYKJ51yaw6ChIqO+Je8UqsTKN/cDag= -github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3/go.mod h1:ON8b8w4BN/kE1EOhwT0o+d62W65a6aPw1nouo9LMgyY= -github.com/tetafro/godot v1.4.11 h1:BVoBIqAf/2QdbFmSwAWnaIqDivZdOV0ZRwEm6jivLKw= -github.com/tetafro/godot v1.4.11/go.mod h1:LR3CJpxDVGlYOWn3ZZg1PgNZdTUvzsZWu8xaEohUpn8= -github.com/timakin/bodyclose v0.0.0-20210704033933-f49887972144 h1:kl4KhGNsJIbDHS9/4U9yQo1UcPQM0kOMJHn29EoH/Ro= -github.com/timakin/bodyclose v0.0.0-20210704033933-f49887972144/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= -github.com/timonwong/loggercheck v0.9.3 h1:ecACo9fNiHxX4/Bc02rW2+kaJIAMAes7qJ7JKxt0EZI= -github.com/timonwong/loggercheck v0.9.3/go.mod h1:wUqnk9yAOIKtGA39l1KLE9Iz0QiTocu/YZoOf+OzFdw= -github.com/tklauser/go-sysconf v0.3.10/go.mod h1:C8XykCvCb+Gn0oNCWPIlcb0RuglQTYaQ2hGm7jmxEFk= -github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hMwiKKqXCQ= -github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8 h1:ndzgwNDnKIqyCvHTXaCqh9KlOWKvBry6nuXMJmonVsE= -github.com/tomarrell/wrapcheck/v2 v2.7.0 h1:J/F8DbSKJC83bAvC6FoZaRjZiZ/iKoueSdrEkmGeacA= -github.com/tomarrell/wrapcheck/v2 v2.7.0/go.mod h1:ao7l5p0aOlUNJKI0qVwB4Yjlqutd0IvAB9Rdwyilxvg= -github.com/tommy-muehle/go-mnd/v2 v2.5.1 h1:NowYhSdyE/1zwK9QCLeRb6USWdoif80Ie+v+yU8u1Zw= -github.com/tommy-muehle/go-mnd/v2 v2.5.1/go.mod h1:WsUAkMJMYww6l/ufffCD3m+P7LEvr8TnZn9lwVDlgzw= -github.com/tonistiigi/fsutil v0.0.0-20220115021204-b19f7f9cb274 h1:wbyZxD6IPFp0sl5uscMOJRsz5UKGFiNiD16e+MVfKZY= -github.com/tonistiigi/go-actions-cache v0.0.0-20220404170428-0bdeb6e1eac7 h1:8eY6m1mjgyB8XySUR7WvebTM8D/Vs86jLJzD/Tw7zkc= -github.com/tonistiigi/go-archvariant v1.0.0 h1:5LC1eDWiBNflnTF1prCiX09yfNHIxDC/aukdhCdTyb0= -github.com/tonistiigi/units v0.0.0-20180711220420-6950e57a87ea h1:SXhTLE6pb6eld/v/cCndK0AMpt1wiVFb/YYmqB3/QG0= -github.com/tonistiigi/vt100 v0.0.0-20210615222946-8066bb97264f h1:DLpt6B5oaaS8jyXHa9VA4rrZloBVPVXeCtrOsrFauxc= -github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926 h1:G3dpKMzFDjgEh2q1Z7zUUtKa8ViPtH+ocF0bE0g00O8= -github.com/ultraware/funlen v0.0.3 h1:5ylVWm8wsNwH5aWo9438pwvsK0QiqVuUrt9bn7S/iLA= -github.com/ultraware/funlen v0.0.3/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= -github.com/ultraware/whitespace v0.0.5 h1:hh+/cpIcopyMYbZNVov9iSxvJU3OYQg78Sfaqzi/CzI= -github.com/ultraware/whitespace v0.0.5/go.mod h1:aVMh/gQve5Maj9hQ/hg+F75lr/X5A89uZnzAmWSineA= -github.com/urfave/cli v1.22.1 h1:+mkCCcOFKPnCmVYVcURKps1Xe+3zP90gSYGNfRkjoIY= -github.com/urfave/cli v1.22.4 h1:u7tSpNPPswAFymm8IehJhy4uJMlUuU/GmqSkvJ1InXA= -github.com/urfave/cli/v2 v2.10.2 h1:x3p8awjp/2arX+Nl/G2040AZpOCHS/eMJJ1/a+mye4Y= -github.com/urfave/cli/v2 v2.10.2/go.mod h1:f8iq5LtQ/bLxafbdBSLPPNsgaW0l/2fYYEHhAyPlwvo= -github.com/uudashr/gocognit v1.0.6 h1:2Cgi6MweCsdB6kpcVQp7EW4U23iBFQWfTXiWlyp842Y= -github.com/uudashr/gocognit v1.0.6/go.mod h1:nAIUuVBnYU7pcninia3BHOvQkpQCeO76Uscky5BOwcY= -github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= -github.com/valyala/quicktemplate v1.7.0 h1:LUPTJmlVcb46OOUY3IeD9DojFpAVbsG+5WFTcjMJzCM= -github.com/vbatts/tar-split v0.11.2 h1:Via6XqJr0hceW4wff3QRzD5gAk/tatMw/4ZA7cTlIME= -github.com/vektra/mockery/v2 v2.14.0 h1:KZ1p5Hrn8tiY+LErRMr14HHle6khxo+JKOXLBW/yfqs= -github.com/vektra/mockery/v2 v2.14.0/go.mod h1:bnD1T8tExSgPD1ripLkDbr60JA9VtQeu12P3wgLZd7M= -github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= -github.com/vishvananda/netlink v1.1.1-0.20210330154013-f5de75959ad5 h1:+UB2BJA852UkGH42H+Oee69djmxS3ANzl2b/JtT1YiA= -github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= -github.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f h1:p4VB7kIXpOQvVn1ZaTIVp+3vuYAXFe3OJEvjbUYJLaA= -github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= -github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= -github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f h1:J9EGpcZtP0E/raorCMxlFGSTBrsSlaDGf3jU/qvAE2c= -github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo= -github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= -github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74= -github.com/xhit/go-str2duration v1.2.0 h1:BcV5u025cITWxEQKGWr1URRzrcXtu7uk8+luz3Yuhwc= -github.com/xhit/go-str2duration v1.2.0/go.mod h1:3cPSlfZlUHVlneIVfePFWcJZsuwf+P1v2SRTV4cUmp4= -github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8= -github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 h1:QldyIu/L63oPpyvQmHgvgickp1Yw510KJOqX7H24mg8= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77 h1:ESFSdwYZvkeru3RtdrYueztKhOBCSAAzS4Gf+k0tEow= -github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= -github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8= -github.com/yagipy/maintidx v1.0.0 h1:h5NvIsCz+nRDapQ0exNv4aJ0yXSI0420omVANTv3GJM= -github.com/yagipy/maintidx v1.0.0/go.mod h1:0qNf/I/CCZXSMhsRsrEPDZ+DkekpKLXAJfsTACwgXLk= -github.com/yeya24/promlinter v0.2.0 h1:xFKDQ82orCU5jQujdaD8stOHiv8UN68BSdn2a8u8Y3o= -github.com/yeya24/promlinter v0.2.0/go.mod h1:u54lkmBOZrpEbQQ6gox2zWKKLKu2SGe+2KOiextY+IA= -github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.13 h1:fVcFKWvrslecOb/tg+Cc05dkeYx540o0FuFt3nUVDoE= -github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg= -github.com/zeebo/xxh3 v1.0.2 h1:xZmwmqxHZA8AI603jOQ0tMqmBr9lPeFwGg6d+xy9DC0= -github.com/zondax/ledger-go v0.14.0/go.mod h1:fZ3Dqg6qcdXWSOJFKMG8GCTnD7slO/RL2feOQv8K320= -gitlab.com/bosi/decorder v0.2.3 h1:gX4/RgK16ijY8V+BRQHAySfQAb354T7/xQpDB2n10P0= -gitlab.com/bosi/decorder v0.2.3/go.mod h1:9K1RB5+VPNQYtXtTDAzd2OEftsZb1oV0IrJrzChSdGE= -go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= -go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738 h1:VcrIfasaLFkyjk6KNlXQSzO+B0fZcnECiDrKJsfxka0= -go.etcd.io/etcd/api/v3 v3.5.6 h1:Cy2qx3npLcYqTKqGJzMypnMv2tiRyifZJ17BlWIWA7A= -go.etcd.io/etcd/api/v3 v3.5.6/go.mod h1:KFtNaxGDw4Yx/BA4iPPwevUTAuqcsPxzyX8PHydchN8= -go.etcd.io/etcd/client/pkg/v3 v3.5.6 h1:TXQWYceBKqLp4sa87rcPs11SXxUA/mHwH975v+BDvLU= -go.etcd.io/etcd/client/pkg/v3 v3.5.6/go.mod h1:ggrwbk069qxpKPq8/FKkQ3Xq9y39kbFR4LnKszpRXeQ= -go.etcd.io/etcd/client/v2 v2.305.6 h1:fIDR0p4KMjw01MJMfUIDWdQbjo06PD6CeYM5z4EHLi0= -go.etcd.io/etcd/client/v2 v2.305.6/go.mod h1:BHha8XJGe8vCIBfWBpbBLVZ4QjOIlfoouvOwydu63E0= -go.etcd.io/etcd/client/v3 v3.5.6 h1:coLs69PWCXE9G4FKquzNaSHrRyMCAXwF+IX1tAPVO8E= -go.etcd.io/etcd/client/v3 v3.5.6/go.mod h1:f6GRinRMCsFVv9Ht42EyY7nfsVGwrNO0WEoS2pRKzQk= -go.etcd.io/gofail v0.1.0 h1:XItAMIhOojXFQMgrxjnd2EIIHun/d5qL0Pf7FzVTkFg= -go.etcd.io/gofail v0.1.0/go.mod h1:VZBCXYGZhHAinaBiiqYvuDynvahNsAyLFwB3kEHKz1M= -go.mozilla.org/pkcs7 v0.0.0-20200128120323-432b2356ecb1 h1:A/5uWzF44DlIgdm/PQFwfMkW0JX+cIcQi/SwLAmZP5M= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.36.3 h1:syAz40OyelLZo42+3U68Phisvrx4qh+4wpdZw7eUUdY= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.36.3/go.mod h1:Dts42MGkzZne2yCru741+bFiTMWkIj/LLRizad7b9tw= -go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.29.0 h1:Wjp9vsVSIEyvdiaECfqxY9xBqQ7JaSCGtvHgR4doXZk= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.29.0 h1:SLme4Porm+UwX0DdHMxlwRt7FzPSE0sys81bet2o0pU= -go.opentelemetry.io/otel v1.11.0 h1:kfToEGMDq6TrVrJ9Vht84Y8y9enykSZzDDZglV0kIEk= -go.opentelemetry.io/otel v1.11.0/go.mod h1:H2KtuEphyMvlhZ+F7tg9GRhAOe60moNx61Ex+WmiKkk= -go.opentelemetry.io/otel/exporters/jaeger v1.4.1 h1:VHCK+2yTZDqDaVXj7JH2Z/khptuydo6C0ttBh2bxAbc= -go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.4.1 h1:imIM3vRDMyZK1ypQlQlO+brE22I9lRhJsBDXpDWjlz8= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.4.1 h1:WPpPsAAs8I2rA47v5u0558meKmmwm1Dj99ZbqCV8sZ8= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.4.1 h1:AxqDiGk8CorEXStMDZF5Hz9vo9Z7ZZ+I5m8JRl/ko40= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.4.1 h1:8qOago/OqoFclMUUj/184tZyRdDZFpcejSjbk5Jrl6Y= -go.opentelemetry.io/otel/internal/metric v0.27.0 h1:9dAVGAfFiiEq5NVB9FUJ5et+btbDQAUIJehJ+ikyryk= -go.opentelemetry.io/otel/metric v0.27.0 h1:HhJPsGhJoKRSegPQILFbODU56NS/L1UE4fS1sC5kIwQ= -go.opentelemetry.io/otel/sdk v1.4.1 h1:J7EaW71E0v87qflB4cDolaqq3AcujGrtyIPGQoZOB0Y= -go.opentelemetry.io/otel/trace v1.11.0 h1:20U/Vj42SX+mASlXLmSGBg6jpI1jQtv682lZtTAOVFI= -go.opentelemetry.io/otel/trace v1.11.0/go.mod h1:nyYjis9jy0gytE9LXGU+/m1sHTKbRY0fX0hulNNDP1U= -go.opentelemetry.io/proto/otlp v0.15.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= -go.opentelemetry.io/proto/otlp v0.19.0 h1:IVN6GR+mhC4s5yfcTbmzHYODqvWAp3ZedA2SJPI1Nnw= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/goleak v1.1.12/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= -go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee h1:0mgffUl7nfd+FpvXMVz4IDEaUSmT1ysygQC7qYo7sG4= -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.23.0/go.mod h1:D+nX8jyLsMHMYrln8A0rJjFt/T/9/bGgIhAqxv5URuY= -golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= -golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220826181053-bd7e27e6170d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= -golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= -golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA= -golang.org/x/exp v0.0.0-20221205204356-47842c84f3db/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= -golang.org/x/exp v0.0.0-20230131160201-f062dba9d201/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= -golang.org/x/exp v0.0.0-20230310171629-522b1b587ee0/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= -golang.org/x/exp v0.0.0-20230321023759-10a507213a29/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= -golang.org/x/exp/typeparams v0.0.0-20220428152302-39d4317da171/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= -golang.org/x/exp/typeparams v0.0.0-20220827204233-334a2380cb91 h1:Ic/qN6TEifvObMGQy72k0n1LlJr7DjWWEi+MOsDOiSk= -golang.org/x/exp/typeparams v0.0.0-20220827204233-334a2380cb91/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= -golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= -golang.org/x/image v0.0.0-20190802002840-cff245a6509b h1:+qEpEAPhDZ1o0x3tHzZTQDArnOixOzGD9HUJfcg0mb4= -golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 h1:VLliZ0d+/avPrXXH+OakdXhpJuEoBZuwh1m2j7U6Iug= -golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028 h1:4+4C/Iv2U4fMZBiMCc98MG1In4gJY5YRhtpDNeDeHWs= -golang.org/x/mod v0.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= -golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= -golang.org/x/mod v0.6.0-dev.0.20211013180041-c96bc1413d57/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= -golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= -golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI= -golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= -golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211216030914-fe4d6282115f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220826154423-83b083e8dc8b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= -golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= -golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= -golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= -golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= -golang.org/x/oauth2 v0.4.0/go.mod h1:RznEsdpjGAINPTOF0UH/t+xJ75L18YO3Ho6Pyn+uRec= -golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I= -golang.org/x/sync v0.0.0-20220819030929-7fc1605a5dde/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210309074719-68d13333faf2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211105183446-c75c47738b0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211116061358-0a5406a5449c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220204135822-1c1b9b1eba6a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220702020025-31831981b65f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220825204002-c680a09ffe64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= -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/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -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/time v0.1.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190307163923-6a08e3108db3/go.mod h1:25r3+/G6/xytQM8iWZKq3Hn0kr0rgFKPUNVEL/dr3z4= -golang.org/x/tools v0.0.0-20190311215038-5c2858a9cfe5/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190321232350-e250d351ecad/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190322203728-c1a832b0ad89/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190910044552-dd2b5c81c578/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190916130336-e45ffcd953cc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20200117220505-0cba7a3a9ee9/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200324003944-a576cf524670/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200329025819-fd4102a86c65/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200414032229-332987a829c3/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200622203043-20e05c1c8ffa/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200624225443-88f3c62a19ff/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200625211823-6506e20df31f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200724022722-7017fd6b1305/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200812195022-5ae4c3c160a0/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200820010801-b793a1359eac/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200831203904-5a2aa26beb65/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= -golang.org/x/tools v0.0.0-20201001104356-43ebab892c4c/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= -golang.org/x/tools v0.0.0-20201002184944-ecd9fd270d5d/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= -golang.org/x/tools v0.0.0-20201023174141-c8cfbd0f21e6/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201230224404-63754364767c/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.1-0.20210205202024-ef80cdb6ec6d/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU= -golang.org/x/tools v0.1.1-0.20210302220138-2ac05c832e1a/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU= -golang.org/x/tools v0.1.8-0.20211029000441-d6a9af8af023/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= -golang.org/x/tools v0.1.9-0.20211228192929-ee1ca4ffc4da/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= -golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= -golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= -golang.org/x/tools v0.1.11/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4= -golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA= -golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= -gonum.org/v1/gonum v0.8.2 h1:CCXrcPKiGGotvnN6jfUsKk4rRqm7q09/YbKb5xCEvtM= -gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= -gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0 h1:OE9mWmgKkjJyEmDAAtGMPjXu+YNeGvK9VTSHY6+Qihc= -gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= -gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b h1:Qh4dB5D/WpoUUp3lSod7qgoyEHbDGPUWjIbnqdqqe1k= -gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= -google.golang.org/api v0.106.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= -google.golang.org/api v0.107.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= -google.golang.org/api v0.108.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= -google.golang.org/genproto v0.0.0-20220329172620-7be39ac1afc7/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= -google.golang.org/genproto v0.0.0-20221227171554-f9683d7f8bef/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230124163310-31e0e69b6fc2/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230209215440-0dfe4f8abfcc/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44/go.mod h1:8B0gmkoRebU8ukX6HP+4wrVQUY1+6PkQ44BSyIlflHA= -google.golang.org/grpc v1.41.0/go.mod h1:U3l9uK9J0sini8mHphKoXyaqDA/8VyGnDee1zzIUK6k= -google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= -google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= -google.golang.org/grpc v1.52.0/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY= -google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= -google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g= -google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0 h1:M1YKkFIboKNieVO5DLUEVzQfGwJD30Nv2jfUgzb5UcE= -google.golang.org/protobuf v1.27.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.2-0.20220831092852-f930b1dc76e8/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.28.2-0.20230222093303-bc1253ad3743/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.29.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -gopkg.in/alecthomas/kingpin.v2 v2.2.6 h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc= -gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/cheggaaa/pb.v1 v1.0.27 h1:kJdccidYzt3CaHD1crCFTS1hxyhSi059NhOFUf03YFo= -gopkg.in/errgo.v2 v2.1.0 h1:0vLT13EuvQ0hNvakwLuFZ/jYrLp5F3kcWHXdRggjCE8= -gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= -gopkg.in/gcfg.v1 v1.2.3 h1:m8OOJ4ccYHnx2f4gQwpno8nAX5OGOh7RLaaz0pj3Ogs= -gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= -gopkg.in/resty.v1 v1.12.0 h1:CuXP0Pjfw9rOuY6EP+UvtNvt5DSqHpIxILZKT/quCZI= -gopkg.in/square/go-jose.v2 v2.5.1 h1:7odma5RETjNHWJnR32wx8t+Io4djHE1PqxCFx3iiZ2w= -gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= -gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= -gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= -gotest.tools/v3 v3.2.0/go.mod h1:Mcr9QNxkg0uMvy/YElmo4SpXgJKWgQvYrT7Kw5RzJ1A= -honnef.co/go/tools v0.3.3 h1:oDx7VAwstgpYpb3wv0oxiZlxY+foCpRAwY7Vk6XpAgA= -honnef.co/go/tools v0.3.3/go.mod h1:jzwdWgg7Jdq75wlfblQxO4neNaFFSvgc1tD5Wv8U0Yw= -k8s.io/api v0.22.5 h1:xk7C+rMjF/EGELiD560jdmwzrB788mfcHiNbMQLIVI8= -k8s.io/apimachinery v0.22.5 h1:cIPwldOYm1Slq9VLBRPtEYpyhjIm1C6aAMAoENuvN9s= -k8s.io/apiserver v0.22.5 h1:71krQxCUz218ecb+nPhfDsNB6QgP1/4EMvi1a2uYBlg= -k8s.io/client-go v0.22.5 h1:I8Zn/UqIdi2r02aZmhaJ1hqMxcpfJ3t5VqvHtctHYFo= -k8s.io/component-base v0.22.5 h1:U0eHqZm7mAFE42hFwYhY6ze/MmVaW00JpMrzVsQmzYE= -k8s.io/cri-api v0.23.1 h1:0DHL/hpTf4Fp+QkUXFefWcp1fhjXr9OlNdY9X99c+O8= -k8s.io/klog/v2 v2.30.0 h1:bUO6drIvCIsvZ/XFgfxoGFQU/a4Qkh0iAlvUR7vlHJw= -k8s.io/utils v0.0.0-20210930125809-cb0fa318a74b h1:wxEMGetGMur3J1xuGLQY7GEQYg9bZxKn3tKo5k/eYcs= -modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM= -modernc.org/tcl v1.15.2/go.mod h1:3+k/ZaEbKrC8ePv8zJWPtBSW0V7Gg9g8rkmhI1Kfs3c= -modernc.org/z v1.7.3/go.mod h1:Ipv4tsdxZRbQyLq9Q1M6gdbkxYzdlrciF2Hi/lS7nWE= -mvdan.cc/gofumpt v0.4.0 h1:JVf4NN1mIpHogBj7ABpgOyZc65/UUOkKQFkoURsz4MM= -mvdan.cc/gofumpt v0.4.0/go.mod h1:PljLOHDeZqgS8opHRKLzp2It2VBuSdteAgqUfzMTxlQ= -mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed h1:WX1yoOaKQfddO/mLzdV4wptyWgoH/6hwLs7QHTixo0I= -mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc= -mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b h1:DxJ5nJdkhDlLok9K6qO+5290kphDJbHOQO1DFFFTeBo= -mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4= -mvdan.cc/unparam v0.0.0-20220706161116-678bad134442 h1:seuXWbRB1qPrS3NQnHmFKLJLtskWyueeIzmLXghMGgk= -mvdan.cc/unparam v0.0.0-20220706161116-678bad134442/go.mod h1:F/Cxw/6mVrNKqrR2YjFf5CaW0Bw4RL8RfbEf4GRggJk= -rsc.io/binaryregexp v0.2.0 h1:HfqmD5MEmC0zvwBuF187nq9mdnXjXsSivRiXN7SmRkE= -rsc.io/pdf v0.1.1 h1:k1MczvYDUvJBe93bYd7wrZLLUEcLZAuF824/I4e5Xr4= -rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= -rsc.io/quote/v3 v3.1.0 h1:9JKUTTIUgS6kzR9mK1YuGKv6Nl+DijDNIc0ghT58FaY= -rsc.io/sampler v1.3.0 h1:7uVkIFmeBqHfdjD+gZwtXXI+RODJ2Wc4O7MPEh/QiW4= -sigs.k8s.io/structured-merge-diff/v4 v4.1.2 h1:Hr/htKFmJEbtMgS/UD0N+gtgctAqz81t3nu+sPzynno= -sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= -sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0 h1:ucqkfpjg9WzSUubAO62csmucvxl4/JeW3F4I4909XkM= From ad6310c022f13ff78ff1e223397455675fd36cf5 Mon Sep 17 00:00:00 2001 From: Eduardo Diaz Date: Fri, 14 Jul 2023 12:06:41 -0400 Subject: [PATCH 121/501] use custom image for relayer in dungeon test --- integration_tests/dungeon_test.go | 5 +- integration_tests/go.mod | 43 +++++++------- integration_tests/go.sum | 96 ++++++++++++++++--------------- 3 files changed, 75 insertions(+), 69 deletions(-) diff --git a/integration_tests/dungeon_test.go b/integration_tests/dungeon_test.go index 614705ce..a12b2c36 100644 --- a/integration_tests/dungeon_test.go +++ b/integration_tests/dungeon_test.go @@ -19,6 +19,8 @@ import ( ibctest "github.com/strangelove-ventures/interchaintest/v7" "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" "github.com/strangelove-ventures/interchaintest/v7/ibc" + interchainRelayer "github.com/strangelove-ventures/interchaintest/v7/relayer" + "github.com/strangelove-ventures/interchaintest/v7/relayer/rly" "github.com/strangelove-ventures/interchaintest/v7/testreporter" "github.com/strangelove-ventures/interchaintest/v7/testutil" "github.com/stretchr/testify/require" @@ -113,7 +115,8 @@ func TestDungeonTransferBlock(t *testing.T) { // Relayer Factory client, network := ibctest.DockerSetup(t) - relayer := ibctest.NewBuiltinRelayerFactory(ibc.CosmosRly, zaptest.NewLogger(t)).Build( + relayerImage := interchainRelayer.CustomDockerImage("ghcr.io/cosmos/relayer", "main", rly.RlyDefaultUidGid) + relayer := ibctest.NewBuiltinRelayerFactory(ibc.CosmosRly, zaptest.NewLogger(t), relayerImage).Build( t, client, network) // Prep Interchain diff --git a/integration_tests/go.mod b/integration_tests/go.mod index 4b0b7124..c0435501 100644 --- a/integration_tests/go.mod +++ b/integration_tests/go.mod @@ -11,19 +11,19 @@ require ( github.com/strangelove-ventures/interchaintest/v7 v7.0.0-20230326163644-f0ba01f43314 github.com/stretchr/testify v1.8.4 go.uber.org/zap v1.24.0 - google.golang.org/grpc v1.55.0 + google.golang.org/grpc v1.56.2 ) require ( cloud.google.com/go v0.110.0 // indirect - cloud.google.com/go/compute v1.18.0 // indirect + cloud.google.com/go/compute v1.19.1 // indirect cloud.google.com/go/compute/metadata v0.2.3 // indirect - cloud.google.com/go/iam v0.12.0 // indirect + cloud.google.com/go/iam v0.13.0 // indirect cloud.google.com/go/storage v1.29.0 // indirect cosmossdk.io/api v0.3.1 // indirect cosmossdk.io/core v0.5.1 // indirect cosmossdk.io/depinject v1.0.0-alpha.3 // indirect - cosmossdk.io/errors v1.0.0-beta.7 // indirect + cosmossdk.io/errors v1.0.0 // indirect cosmossdk.io/log v1.1.0 // indirect cosmossdk.io/tools/rosetta v0.2.1 // indirect filippo.io/edwards25519 v1.0.0 // indirect @@ -50,8 +50,8 @@ require ( github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/chzyer/readline v1.5.1 // indirect github.com/coinbase/rosetta-sdk-go/types v1.0.0 // indirect - github.com/cometbft/cometbft v0.37.1 // indirect - github.com/cometbft/cometbft-db v0.7.0 // indirect + github.com/cometbft/cometbft v0.37.2 // indirect + github.com/cometbft/cometbft-db v0.8.0 // indirect github.com/confio/ics23/go v0.9.0 // indirect github.com/cosmos/btcutil v1.0.5 // indirect github.com/cosmos/cosmos-proto v1.0.0-beta.2 // indirect @@ -98,9 +98,10 @@ require ( github.com/google/btree v1.1.2 // indirect github.com/google/go-cmp v0.5.9 // indirect github.com/google/orderedcode v0.0.1 // indirect + github.com/google/s2a-go v0.1.3 // indirect github.com/google/uuid v1.3.0 // indirect github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect - github.com/googleapis/gax-go/v2 v2.7.0 // indirect + github.com/googleapis/gax-go/v2 v2.8.0 // indirect github.com/gorilla/handlers v1.5.1 // indirect github.com/gorilla/mux v1.8.0 // indirect github.com/gorilla/websocket v1.5.0 // indirect @@ -130,6 +131,7 @@ require ( github.com/libp2p/go-buffer-pool v0.1.0 // indirect github.com/libp2p/go-libp2p v0.22.0 // indirect github.com/libp2p/go-openssl v0.1.0 // indirect + github.com/linxGnu/grocksdb v1.7.16 // indirect github.com/magiconair/properties v1.8.7 // indirect github.com/manifoldco/promptui v0.9.0 // indirect github.com/mattn/go-colorable v0.1.13 // indirect @@ -160,10 +162,10 @@ require ( github.com/pierrec/xxHash v0.1.5 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/prometheus/client_golang v1.15.0 // indirect + github.com/prometheus/client_golang v1.16.0 // indirect github.com/prometheus/client_model v0.3.0 // indirect github.com/prometheus/common v0.42.0 // indirect - github.com/prometheus/procfs v0.9.0 // indirect + github.com/prometheus/procfs v0.10.1 // indirect github.com/rakyll/statik v0.1.7 // indirect github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect @@ -172,15 +174,14 @@ require ( github.com/sasha-s/go-deadlock v0.3.1 // indirect github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 // indirect github.com/spaolacci/murmur3 v1.1.0 // indirect - github.com/spf13/afero v1.9.3 // indirect + github.com/spf13/afero v1.9.5 // indirect github.com/spf13/cast v1.5.1 // indirect github.com/spf13/cobra v1.7.0 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/spf13/pflag v1.0.5 // indirect - github.com/spf13/viper v1.15.0 // indirect + github.com/spf13/viper v1.16.0 // indirect github.com/subosito/gotenv v1.4.2 // indirect github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect - github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c // indirect github.com/tendermint/go-amino v0.16.0 // indirect github.com/tidwall/btree v1.6.0 // indirect github.com/tyler-smith/go-bip32 v1.0.0 // indirect @@ -192,21 +193,21 @@ require ( go.opencensus.io v0.24.0 // indirect go.uber.org/atomic v1.10.0 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/crypto v0.9.0 // indirect + golang.org/x/crypto v0.11.0 // indirect golang.org/x/exp v0.0.0-20230515195305-f3d0a9c9a5cc // indirect golang.org/x/mod v0.10.0 // indirect - golang.org/x/net v0.10.0 // indirect - golang.org/x/oauth2 v0.6.0 // indirect + golang.org/x/net v0.12.0 // indirect + golang.org/x/oauth2 v0.7.0 // indirect golang.org/x/sync v0.2.0 // indirect - golang.org/x/sys v0.8.0 // indirect - golang.org/x/term v0.8.0 // indirect - golang.org/x/text v0.9.0 // indirect + golang.org/x/sys v0.10.0 // indirect + golang.org/x/term v0.10.0 // indirect + golang.org/x/text v0.11.0 // indirect golang.org/x/tools v0.9.3 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect - google.golang.org/api v0.110.0 // indirect + google.golang.org/api v0.122.0 // indirect google.golang.org/appengine v1.6.7 // indirect - google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4 // indirect - google.golang.org/protobuf v1.30.0 // indirect + google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect + google.golang.org/protobuf v1.31.0 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/integration_tests/go.sum b/integration_tests/go.sum index df1d293c..968bd4a4 100644 --- a/integration_tests/go.sum +++ b/integration_tests/go.sum @@ -70,8 +70,8 @@ cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= -cloud.google.com/go/compute v1.18.0 h1:FEigFqoDbys2cvFkZ9Fjq4gnHBP55anJ0yQyau2f9oY= -cloud.google.com/go/compute v1.18.0/go.mod h1:1X7yHxec2Ga+Ss6jPyjxRxpu2uu7PLgsOVXvgU0yacs= +cloud.google.com/go/compute v1.19.1 h1:am86mquDUgjGNWxiGn+5PGLbmgiWXlE/yNWpIpNvuXY= +cloud.google.com/go/compute v1.19.1/go.mod h1:6ylj3a05WF8leseCdIf77NK0g1ey+nj5IKd5/kvShxE= cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= @@ -111,8 +111,8 @@ cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y97 cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= -cloud.google.com/go/iam v0.12.0 h1:DRtTY29b75ciH6Ov1PHb4/iat2CLCvrOm40Q0a6DFpE= -cloud.google.com/go/iam v0.12.0/go.mod h1:knyHGviacl11zrtZUoDuYpDgLjvr28sLQaG0YB2GYAY= +cloud.google.com/go/iam v0.13.0 h1:+CmB+K0J/33d0zSQ9SlFWUeCCEn5XJA0ZMZ3pHE9u8k= +cloud.google.com/go/iam v0.13.0/go.mod h1:ljOg+rcNfzZ5d6f1nAUJ8ZIxOaZUVoS14bKCtaLZ/D0= cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= @@ -194,8 +194,8 @@ cosmossdk.io/core v0.5.1 h1:vQVtFrIYOQJDV3f7rw4pjjVqc1id4+mE0L9hHP66pyI= cosmossdk.io/core v0.5.1/go.mod h1:KZtwHCLjcFuo0nmDc24Xy6CRNEL9Vl/MeimQ2aC7NLE= cosmossdk.io/depinject v1.0.0-alpha.3 h1:6evFIgj//Y3w09bqOUOzEpFj5tsxBqdc5CfkO7z+zfw= cosmossdk.io/depinject v1.0.0-alpha.3/go.mod h1:eRbcdQ7MRpIPEM5YUJh8k97nxHpYbc3sMUnEtt8HPWU= -cosmossdk.io/errors v1.0.0-beta.7 h1:gypHW76pTQGVnHKo6QBkb4yFOJjC+sUGRc5Al3Odj1w= -cosmossdk.io/errors v1.0.0-beta.7/go.mod h1:mz6FQMJRku4bY7aqS/Gwfcmr/ue91roMEKAmDUDpBfE= +cosmossdk.io/errors v1.0.0 h1:nxF07lmlBbB8NKQhtJ+sJm6ef5uV1XkvPXG2bUntb04= +cosmossdk.io/errors v1.0.0/go.mod h1:+hJZLuhdDE0pYN8HkOrVNwrIOYvUGnn6+4fjnJs/oV0= cosmossdk.io/log v1.1.0 h1:v0ogPHYeTzPcBTcPR1A3j1hkei4pZama8kz8LKlCMv0= cosmossdk.io/log v1.1.0/go.mod h1:6zjroETlcDs+mm62gd8Ig7mZ+N+fVOZS91V17H+M4N4= cosmossdk.io/math v1.0.1 h1:Qx3ifyOPaMLNH/89WeZFH268yCvU4xEcnPLu3sJqPPg= @@ -326,10 +326,10 @@ github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:z github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/coinbase/rosetta-sdk-go/types v1.0.0 h1:jpVIwLcPoOeCR6o1tU+Xv7r5bMONNbHU7MuEHboiFuA= github.com/coinbase/rosetta-sdk-go/types v1.0.0/go.mod h1:eq7W2TMRH22GTW0N0beDnN931DW0/WOI1R2sdHNHG4c= -github.com/cometbft/cometbft v0.37.1 h1:KLxkQTK2hICXYq21U2hn1W5hOVYUdQgDQ1uB+90xPIg= -github.com/cometbft/cometbft v0.37.1/go.mod h1:Y2MMMN//O5K4YKd8ze4r9jmk4Y7h0ajqILXbH5JQFVs= -github.com/cometbft/cometbft-db v0.7.0 h1:uBjbrBx4QzU0zOEnU8KxoDl18dMNgDh+zZRUE0ucsbo= -github.com/cometbft/cometbft-db v0.7.0/go.mod h1:yiKJIm2WKrt6x8Cyxtq9YTEcIMPcEe4XPxhgX59Fzf0= +github.com/cometbft/cometbft v0.37.2 h1:XB0yyHGT0lwmJlFmM4+rsRnczPlHoAKFX6K8Zgc2/Jc= +github.com/cometbft/cometbft v0.37.2/go.mod h1:Y2MMMN//O5K4YKd8ze4r9jmk4Y7h0ajqILXbH5JQFVs= +github.com/cometbft/cometbft-db v0.8.0 h1:vUMDaH3ApkX8m0KZvOFFy9b5DZHBAjsnEuo9AKVZpjo= +github.com/cometbft/cometbft-db v0.8.0/go.mod h1:6ASCP4pfhmrCBpfk01/9E1SI29nD3HfVHrY4PG8x5c0= github.com/confio/ics23/go v0.9.0 h1:cWs+wdbS2KRPZezoaaj+qBleXgUk5WOQFMP3CQFGTr4= github.com/confio/ics23/go v0.9.0/go.mod h1:4LPZ2NYqnYIVRklaozjNR1FScgDJ2s5Xrp+e/mYVRak= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= @@ -430,9 +430,6 @@ github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go. github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/ethereum/go-ethereum v1.10.20 h1:75IW830ClSS40yrQC1ZCMZCt5I+zU16oqId2SiQwdQ4= github.com/ethereum/go-ethereum v1.10.20/go.mod h1:LWUN82TCHGpxB3En5HVmLLzPD7YSrEUFmFfN1nKkVN0= -github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c h1:8ISkoahWXwZR41ois5lSJBSVw4D0OV19Ht/JSTzvSv0= -github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A= -github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4 h1:7HZCaLC5+BZpmbhCOZJ293Lz68O7PYrF2EzeiFMwCLk= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/felixge/httpsnoop v1.0.2 h1:+nS9g82KMXccJ/wp0zyRW9ZBHFETmMGtkk+2CTTrW4o= @@ -586,6 +583,8 @@ github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26 h1:Xim43kblpZXfIBQsbuBVKCudVG457BR2GZFIz3uw3hQ= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/s2a-go v0.1.3 h1:FAgZmpLl/SXurPEZyCMPBIiiYeTbqfjlbdnCNTAkbGE= +github.com/google/s2a-go v0.1.3/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= @@ -604,8 +603,8 @@ github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99 github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= -github.com/googleapis/gax-go/v2 v2.7.0 h1:IcsPKeInNvYi7eqSaDjiZqDDKu5rsmunY0Y1YupQSSQ= -github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8= +github.com/googleapis/gax-go/v2 v2.8.0 h1:UBtEZqx1bjXtOQ5BVTkuYghXrr3N4V123VKJK67vJZc= +github.com/googleapis/gax-go/v2 v2.8.0/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI= github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= @@ -748,6 +747,8 @@ github.com/libp2p/go-openssl v0.1.0 h1:LBkKEcUv6vtZIQLVTegAil8jbNpJErQ9AnT+bWV+O github.com/libp2p/go-openssl v0.1.0/go.mod h1:OiOxwPpL3n4xlenjx2h7AwSGaFSC/KZvf6gNdOBQMtc= github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= +github.com/linxGnu/grocksdb v1.7.16 h1:Q2co1xrpdkr5Hx3Fp+f+f7fRGhQFQhvi/+226dtLmA8= +github.com/linxGnu/grocksdb v1.7.16/go.mod h1:JkS7pl5qWpGpuVb3bPqTz8nC12X3YtPZT+Xq7+QfQo4= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= @@ -901,8 +902,8 @@ github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5Fsn github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= 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.15.0 h1:5fCgGYogn0hFdhyhLbw7hEsWxufKtY9klyvdNfFlFhM= -github.com/prometheus/client_golang v1.15.0/go.mod h1:e9yaBhRPU2pPNsZwE+JdQl0KEt1N9XgF6zxWmaC0xOk= +github.com/prometheus/client_golang v1.16.0 h1:yk/hx9hDbrGHovbci4BY+pRMfSuuat626eFsHb7tmT8= +github.com/prometheus/client_golang v1.16.0/go.mod h1:Zsulrv/L9oM40tJ7T815tM89lFEugiJ9HzIqaAx4LKc= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= @@ -925,8 +926,8 @@ github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsT github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI= -github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY= +github.com/prometheus/procfs v0.10.1 h1:kYK1Va/YMlutzCGazswoHKo//tZVlFpKYh+PymziUAg= +github.com/prometheus/procfs v0.10.1/go.mod h1:nwNm2aOCAYw8uTR/9bWRREkZFxAUcWzPHWJq+XBB/FM= github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ= github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Unghqrcc= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= @@ -973,8 +974,8 @@ github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasO github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/afero v1.9.3 h1:41FoI0fD7OR7mGcKE/aOiLkGreyf8ifIOQmJANWogMk= -github.com/spf13/afero v1.9.3/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= +github.com/spf13/afero v1.9.5 h1:stMpOSZFs//0Lv29HduCmli3GUfpFoF3Y1Q/aXj/wVM= +github.com/spf13/afero v1.9.5/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA= github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48= @@ -990,8 +991,8 @@ github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnIn github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/spf13/viper v1.15.0 h1:js3yy885G8xwJa6iOISGFwd+qlUo5AvyXb7CiihdtiU= -github.com/spf13/viper v1.15.0/go.mod h1:fFcTBJxvhhzSJiZy8n+PeW6t8l+KeT/uTARa0jHOQLA= +github.com/spf13/viper v1.16.0 h1:rGGH0XDZhdUOryiDWjmIvUSWpbNqisK8Wk0Vyefw8hc= +github.com/spf13/viper v1.16.0/go.mod h1:yg78JgCJcbrQOvV9YLXgkLaZqUidkY9K+Dd1FofRzQg= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= @@ -1019,8 +1020,6 @@ github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8 github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= 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/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c h1:g+WoO5jjkqGAzHWCjJB1zZfXPIAaDpzXIEJ0eS6B5Ok= -github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c/go.mod h1:ahpPrc7HpcfEWDQRZEmnXMzHY03mLDYMCxeDzy46i+8= 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/tidwall/btree v1.6.0 h1:LDZfKfQIBHGHWSwckhXI0RPSXzlo+KYdjK7FWSqOzzg= @@ -1100,9 +1099,10 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.9.0 h1:LF6fAI+IutBocDJ2OT0Q1g8plpYljMZ4+lty+dsqw3g= -golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= +golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.11.0 h1:6Ewdq3tDic1mg5xRO4milcWCfMVQhI4NkqWWvqejpuA= +golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= 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= @@ -1192,6 +1192,7 @@ golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96b golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= @@ -1204,8 +1205,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= -golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= -golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.12.0 h1:cfawfvKITfUsFCeJIHJrbSxpeu/E81khclypR0GVT50= +golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= 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= @@ -1231,8 +1232,8 @@ golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= -golang.org/x/oauth2 v0.6.0 h1:Lh8GPgSKBfWSwFvtuWOfeI3aAAnbXTSutYxJiOJFgIw= -golang.org/x/oauth2 v0.6.0/go.mod h1:ycmewcwgD4Rpr3eZJLSB4Kyyljb3qDh40vJ8STE5HKw= +golang.org/x/oauth2 v0.7.0 h1:qe6s0zUXlPX80/dITx3440hWZ7GwMwgDDyrSGTPJG/g= +golang.org/x/oauth2 v0.7.0/go.mod h1:hPLQkd9LyjfXTiRohC/41GhcFqxisoUQ99sCUOHO9x4= 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= @@ -1347,13 +1348,13 @@ golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.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 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU= -golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA= +golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.8.0 h1:n5xxQn2i3PC0yLAbjTpNT85q/Kgzcr2gIoX9OrJUols= -golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.10.0 h1:3R7pNqamzBraeqj/Tj8qt1aQ2HpmlC+Cx/qL/7hn4/c= +golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o= 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= @@ -1363,9 +1364,10 @@ 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.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= -golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.11.0 h1:LAntKIrcmeSKERyiOh0XMV39LXS8IE9UL2yP7+f5ij4= +golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1492,8 +1494,8 @@ google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= -google.golang.org/api v0.110.0 h1:l+rh0KYUooe9JGbGVx71tbFo4SMbMTXK3I3ia2QSEeU= -google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= +google.golang.org/api v0.122.0 h1:zDobeejm3E7pEG1mNHvdxvjs5XJoCMzyNH+CmwL94Es= +google.golang.org/api v0.122.0/go.mod h1:gcitW0lvnyWjSp9nKxAbdHKIZ6vF4aajGueeslZOyms= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1612,8 +1614,8 @@ google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqw google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= -google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4 h1:DdoeryqhaXp1LtT/emMP1BRJPHHKFi5akj/nbx/zNTA= -google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s= +google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 h1:KpwkzHKEF7B9Zxg18WzOa7djJ+Ha5DzthMyZYQfEn2A= +google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= @@ -1655,8 +1657,8 @@ google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACu google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.55.0 h1:3Oj82/tFSCeUrRTg/5E/7d/W5A1tj6Ky1ABAuZuv5ag= -google.golang.org/grpc v1.55.0/go.mod h1:iYEXKGkEBhg1PjZQvoYEVPTDkHo1/bjTnfwTeGONTY8= +google.golang.org/grpc v1.56.2 h1:fVRFRnXvU+x6C4IlHZewvJOVHoOv1TUuQyoRsYnB4bI= +google.golang.org/grpc v1.56.2/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= 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= @@ -1673,8 +1675,8 @@ google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= -google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= +google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= 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= @@ -1709,7 +1711,7 @@ gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C 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 v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= -gotest.tools/v3 v3.4.0 h1:ZazjZUfuVeZGLAmlKKuyv3IKP5orXcwtOwDQH6YVr6o= +gotest.tools/v3 v3.5.0 h1:Ljk6PdHdOhAb5aDMWXjDLMMhph+BpztA4v1QdqEW2eY= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= 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= From a03000159a9dd88a651d205ed4a4803021758cc4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 14 Jul 2023 16:37:39 +0000 Subject: [PATCH 122/501] Bump github.com/cosmos/ibc-go/v7 from 7.0.1 to 7.2.0 Bumps [github.com/cosmos/ibc-go/v7](https://github.com/cosmos/ibc-go) from 7.0.1 to 7.2.0. - [Release notes](https://github.com/cosmos/ibc-go/releases) - [Changelog](https://github.com/cosmos/ibc-go/blob/v7.2.0/CHANGELOG.md) - [Commits](https://github.com/cosmos/ibc-go/compare/v7.0.1...v7.2.0) --- updated-dependencies: - dependency-name: github.com/cosmos/ibc-go/v7 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- go.mod | 6 +++--- go.sum | 17 ++++++++--------- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/go.mod b/go.mod index 6591bd8a..074dd989 100644 --- a/go.mod +++ b/go.mod @@ -9,8 +9,8 @@ require ( github.com/cosmos/gogogateway v1.2.0 // indirect github.com/cosmos/gogoproto v1.4.10 github.com/cosmos/iavl v0.20.0 // indirect - github.com/cosmos/ibc-go/v7 v7.0.1 - github.com/cosmos/ics23/go v0.9.1-0.20221207100636-b1abd8678aab // indirect + github.com/cosmos/ibc-go/v7 v7.2.0 + github.com/cosmos/ics23/go v0.10.0 // indirect github.com/docker/distribution v2.8.2+incompatible // indirect github.com/dvsekhvalnov/jose2go v1.5.0 // indirect github.com/golang/protobuf v1.5.3 @@ -22,7 +22,7 @@ require ( github.com/rakyll/statik v0.1.7 // indirect github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa github.com/spf13/cast v1.5.1 - github.com/spf13/cobra v1.6.1 + github.com/spf13/cobra v1.7.0 github.com/spf13/pflag v1.0.5 // indirect github.com/stretchr/testify v1.8.4 github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d diff --git a/go.sum b/go.sum index 8f92e58e..a10aec3b 100644 --- a/go.sum +++ b/go.sum @@ -335,10 +335,10 @@ github.com/cosmos/gogoproto v1.4.10 h1:QH/yT8X+c0F4ZDacDv3z+xE3WU1P1Z3wQoLMBRJoK github.com/cosmos/gogoproto v1.4.10/go.mod h1:3aAZzeRWpAwr+SS/LLkICX2/kDFyaYVzckBDzygIxek= github.com/cosmos/iavl v0.20.0 h1:fTVznVlepH0KK8NyKq8w+U7c2L6jofa27aFX6YGlm38= github.com/cosmos/iavl v0.20.0/go.mod h1:WO7FyvaZJoH65+HFOsDir7xU9FWk2w9cHXNW1XHcl7A= -github.com/cosmos/ibc-go/v7 v7.0.1 h1:NIBNRWjlOoFvFQu1ZlgwkaSeHO5avf4C1YQiWegt8jw= -github.com/cosmos/ibc-go/v7 v7.0.1/go.mod h1:vEaapV6nuLPQlS+g8IKmxMo6auPi0i7HMv1PhViht/E= -github.com/cosmos/ics23/go v0.9.1-0.20221207100636-b1abd8678aab h1:I9ialKTQo7248V827Bba4OuKPmk+FPzmTVHsLXaIJWw= -github.com/cosmos/ics23/go v0.9.1-0.20221207100636-b1abd8678aab/go.mod h1:2CwqasX5dSD7Hbp/9b6lhK6BwoBDCBldx7gPKRukR60= +github.com/cosmos/ibc-go/v7 v7.2.0 h1:dx0DLUl7rxdyZ8NiT6UsrbzKOJx/w7s+BOaewFRH6cg= +github.com/cosmos/ibc-go/v7 v7.2.0/go.mod h1:OOcjKIRku/j1Xs1RgKK0yvKRrJ5iFuZYMetR1n3yMlc= +github.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZDM= +github.com/cosmos/ics23/go v0.10.0/go.mod h1:ZfJSmng/TBNTBkFemHHHj5YY7VAU/MBU980F4VU1NG0= github.com/cosmos/keyring v1.2.0 h1:8C1lBP9xhImmIabyXW4c3vFjjLiBdGCmfLUfeZlV1Yo= github.com/cosmos/keyring v1.2.0/go.mod h1:fc+wB5KTk9wQ9sDx0kFXB3A0MaeGHM9AwRStKOQ5vOA= github.com/cosmos/ledger-cosmos-go v0.12.1 h1:sMBxza5p/rNK/06nBSNmsI/WDqI0pVJFVNihy1Y984w= @@ -434,8 +434,8 @@ github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho= github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= +github.com/go-playground/validator/v10 v10.10.0 h1:I7mrTYv78z8k8VXa/qJlOlEXn/nBh+BF8dHX5nt/dr0= github.com/go-playground/validator/v10 v10.10.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos= -github.com/go-playground/validator/v10 v10.11.1 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJWXmqUsHwfTRRkQ= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee h1:s+21KNqlpePfkah2I+gwHF8xmJWRjooY+5248k6m4A0= @@ -444,8 +444,8 @@ github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8= github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= github.com/gobwas/ws v1.0.2 h1:CoAavW/wd/kulfZmSIBt6p24n4j7tHgNVCjsfHVNUbo= github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= +github.com/goccy/go-json v0.9.7 h1:IcB+Aqpx/iMHu5Yooh7jEzJk1JZ7Pjtmys2ukPr7EeM= github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= -github.com/goccy/go-json v0.9.11 h1:/pAaQDLHEoCq/5FFmSKBswWmK6H0e8g4159Kc/X/nqk= 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= @@ -653,7 +653,6 @@ github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1: 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.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= 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/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= @@ -906,8 +905,8 @@ github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA= github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/cobra v1.6.1 h1:o94oiPyS4KD1mPy2fmcYYHHfCxLqYjJOhGsCHFZtEzA= -github.com/spf13/cobra v1.6.1/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY= +github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= +github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= From 3cb0bcaf856bb2b09c86be6837608e0c1af9a3bc Mon Sep 17 00:00:00 2001 From: Eduardo Diaz Date: Fri, 14 Jul 2023 12:53:30 -0400 Subject: [PATCH 123/501] go mod tidy --- integration_tests/go.mod | 4 ++-- integration_tests/go.sum | 19 +++++++++---------- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/integration_tests/go.mod b/integration_tests/go.mod index c0435501..d28f7ee9 100644 --- a/integration_tests/go.mod +++ b/integration_tests/go.mod @@ -6,7 +6,7 @@ require ( cosmossdk.io/math v1.0.1 github.com/burnt-labs/xion v0.1.0 github.com/cosmos/cosmos-sdk v0.47.3 - github.com/cosmos/ibc-go/v7 v7.0.1 + github.com/cosmos/ibc-go/v7 v7.2.0 github.com/icza/dyno v0.0.0-20220812133438-f0b6f8a18845 github.com/strangelove-ventures/interchaintest/v7 v7.0.0-20230326163644-f0ba01f43314 github.com/stretchr/testify v1.8.4 @@ -59,7 +59,7 @@ require ( github.com/cosmos/gogogateway v1.2.0 // indirect github.com/cosmos/gogoproto v1.4.10 // indirect github.com/cosmos/iavl v0.20.0 // indirect - github.com/cosmos/ics23/go v0.9.1-0.20221207100636-b1abd8678aab // indirect + github.com/cosmos/ics23/go v0.10.0 // indirect github.com/cosmos/ledger-cosmos-go v0.12.1 // indirect github.com/cosmos/rosetta-sdk-go v0.10.0 // indirect github.com/creachadair/taskgroup v0.4.2 // indirect diff --git a/integration_tests/go.sum b/integration_tests/go.sum index 968bd4a4..64b238c4 100644 --- a/integration_tests/go.sum +++ b/integration_tests/go.sum @@ -355,10 +355,10 @@ github.com/cosmos/gogoproto v1.4.10 h1:QH/yT8X+c0F4ZDacDv3z+xE3WU1P1Z3wQoLMBRJoK github.com/cosmos/gogoproto v1.4.10/go.mod h1:3aAZzeRWpAwr+SS/LLkICX2/kDFyaYVzckBDzygIxek= github.com/cosmos/iavl v0.20.0 h1:fTVznVlepH0KK8NyKq8w+U7c2L6jofa27aFX6YGlm38= github.com/cosmos/iavl v0.20.0/go.mod h1:WO7FyvaZJoH65+HFOsDir7xU9FWk2w9cHXNW1XHcl7A= -github.com/cosmos/ibc-go/v7 v7.0.1 h1:NIBNRWjlOoFvFQu1ZlgwkaSeHO5avf4C1YQiWegt8jw= -github.com/cosmos/ibc-go/v7 v7.0.1/go.mod h1:vEaapV6nuLPQlS+g8IKmxMo6auPi0i7HMv1PhViht/E= -github.com/cosmos/ics23/go v0.9.1-0.20221207100636-b1abd8678aab h1:I9ialKTQo7248V827Bba4OuKPmk+FPzmTVHsLXaIJWw= -github.com/cosmos/ics23/go v0.9.1-0.20221207100636-b1abd8678aab/go.mod h1:2CwqasX5dSD7Hbp/9b6lhK6BwoBDCBldx7gPKRukR60= +github.com/cosmos/ibc-go/v7 v7.2.0 h1:dx0DLUl7rxdyZ8NiT6UsrbzKOJx/w7s+BOaewFRH6cg= +github.com/cosmos/ibc-go/v7 v7.2.0/go.mod h1:OOcjKIRku/j1Xs1RgKK0yvKRrJ5iFuZYMetR1n3yMlc= +github.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZDM= +github.com/cosmos/ics23/go v0.10.0/go.mod h1:ZfJSmng/TBNTBkFemHHHj5YY7VAU/MBU980F4VU1NG0= github.com/cosmos/ledger-cosmos-go v0.12.1 h1:sMBxza5p/rNK/06nBSNmsI/WDqI0pVJFVNihy1Y984w= github.com/cosmos/ledger-cosmos-go v0.12.1/go.mod h1:dhO6kj+Y+AHIOgAe4L9HL/6NDdyyth4q238I9yFpD2g= github.com/cosmos/rosetta-sdk-go v0.10.0 h1:E5RhTruuoA7KTIXUcMicL76cffyeoyvNybzUGSKFTcM= @@ -446,8 +446,8 @@ github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbS github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= 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.6.3 h1:ahKqKTFpO5KTPHxWZjEdPScmYaGtLo8Y4DMHoEsnp14= github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= -github.com/gin-gonic/gin v1.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8= 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= @@ -467,10 +467,10 @@ github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= -github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD876Lmtgy7VtROAbHHXk8no= github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= +github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho= +github.com/go-playground/validator/v10 v10.2.0 h1:KgJ0snyC2R9VXYN2rneOtQcw5aHQB1Vv0sFl1UcHBOY= github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= -github.com/go-playground/validator/v10 v10.11.1 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJWXmqUsHwfTRRkQ= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw= @@ -482,7 +482,6 @@ github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8= github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= github.com/gobwas/ws v1.0.2 h1:CoAavW/wd/kulfZmSIBt6p24n4j7tHgNVCjsfHVNUbo= github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= -github.com/goccy/go-json v0.9.11 h1:/pAaQDLHEoCq/5FFmSKBswWmK6H0e8g4159Kc/X/nqk= 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= @@ -735,8 +734,8 @@ github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= 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/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= +github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw= github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= @@ -1035,8 +1034,8 @@ github.com/tyler-smith/go-bip39 v1.1.0/go.mod h1:gUYDtqQw1JS3ZJ8UWVcGTGqqr6YIN3C github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= -github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= +github.com/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0= github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= From 44feb055e2d5514db70056a23b461e35912ae4a7 Mon Sep 17 00:00:00 2001 From: Ash Date: Mon, 17 Jul 2023 21:34:51 +0200 Subject: [PATCH 124/501] upgraded account abstraction --- app/ante.go | 3 ++- go.mod | 2 +- go.sum | 2 ++ 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/app/ante.go b/app/ante.go index c14c91db..6bfa4f2e 100644 --- a/app/ante.go +++ b/app/ante.go @@ -62,7 +62,8 @@ func NewAnteHandler(options HandlerOptions) (sdk.AnteHandler, error) { options.AbstractAccountKeeper, options.AccountKeeper, options.SignModeHandler, - ), ante.NewIncrementSequenceDecorator(options.AccountKeeper), + ), + ante.NewIncrementSequenceDecorator(options.AccountKeeper), ibcante.NewRedundantRelayDecorator(options.IBCKeeper), } diff --git a/go.mod b/go.mod index b7ff5079..7bc4933b 100644 --- a/go.mod +++ b/go.mod @@ -43,7 +43,7 @@ require ( github.com/cometbft/cometbft v0.37.1 github.com/cometbft/cometbft-db v0.8.0 github.com/golang/mock v1.6.0 - github.com/larry0x/abstract-account v0.0.0-20230706184728-2cae2b52b439 + github.com/larry0x/abstract-account v0.0.0-20230708200055-2ea462db913f github.com/spf13/viper v1.15.0 gotest.tools/v3 v3.4.0 sigs.k8s.io/yaml v1.3.0 diff --git a/go.sum b/go.sum index ddca7375..b8032229 100644 --- a/go.sum +++ b/go.sum @@ -704,6 +704,8 @@ github.com/larry0x/abstract-account v0.0.0-20230628224848-53cfac67f249 h1:ITVgrJ github.com/larry0x/abstract-account v0.0.0-20230628224848-53cfac67f249/go.mod h1:mRL3ko+eOFguJHzhVZatNZOvaiVHumGAWxoLlyIo+Ow= github.com/larry0x/abstract-account v0.0.0-20230706184728-2cae2b52b439 h1:2MhdJ8qynqeJsSxo0MxYJvA9dJvp/NdJkDYzejhH+lU= github.com/larry0x/abstract-account v0.0.0-20230706184728-2cae2b52b439/go.mod h1:mRL3ko+eOFguJHzhVZatNZOvaiVHumGAWxoLlyIo+Ow= +github.com/larry0x/abstract-account v0.0.0-20230708200055-2ea462db913f h1:5bbME0rK2j2cCwRzoc2dX1/SDo3guFgyNyph+c+ulI4= +github.com/larry0x/abstract-account v0.0.0-20230708200055-2ea462db913f/go.mod h1:mRL3ko+eOFguJHzhVZatNZOvaiVHumGAWxoLlyIo+Ow= github.com/larry0x/simapp v0.0.0-20230527213943-e57d94ffca4c h1:HxMMvjvPKv+Xttad2Blw6c9XKzg/Pk5TIZL8T04lUN0= github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= From f6e2a8e20992b7f961156563bdd0f5c5a1da5c82 Mon Sep 17 00:00:00 2001 From: Eduardo Diaz Date: Mon, 17 Jul 2023 17:08:49 -0400 Subject: [PATCH 125/501] update README, remove platform from dockerfile --- Makefile | 2 +- x/globalfee/README.md | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index a8f6bab0..d163f8b5 100644 --- a/Makefile +++ b/Makefile @@ -13,7 +13,7 @@ XION_IMAGE=xion:local # for dockerized protobuf tools DOCKER := $(shell which docker) BUF_IMAGE=bufbuild/buf@sha256:3cb1f8a4b48bd5ad8f09168f10f607ddc318af202f5c057d52a45216793d85e5 #v1.4.0 -DOCKER_BUF := $(DOCKER) run --rm -v $(CURDIR):/workspace --workdir /workspace --platform linux/amd64 $(BUF_IMAGE) +DOCKER_BUF := $(DOCKER) run --rm -v $(CURDIR):/workspace --workdir /workspace $(BUF_IMAGE) HTTPS_GIT := https://github.com/burnt-labs/xiond.git export GO111MODULE = on diff --git a/x/globalfee/README.md b/x/globalfee/README.md index 746d5c14..c3ea2016 100644 --- a/x/globalfee/README.md +++ b/x/globalfee/README.md @@ -1,5 +1,3 @@ # Global fee module -The Global fee module was supplied by the great folks at [TGrade](https://github.com/confio/tgrade) 👋, with minor modifications. All credits and big thanks go to the original authors. - -More information about Cosmoshub fee system please check [here](../../docs/modules/globalfee.md). +The Global fee module is based on [Gaia's implementation](https://github.com/cosmos/gaia). Whitch is supplied by the great folks at [TGrade](https://github.com/confio/tgrade) 👋, with minor modifications. All credits and big thanks go to the original authors. From 70b6a01e0f364e27f245d32603a3e1de090621d2 Mon Sep 17 00:00:00 2001 From: Eduardo Diaz Date: Mon, 17 Jul 2023 17:09:57 -0400 Subject: [PATCH 126/501] add docs reference --- x/globalfee/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/x/globalfee/README.md b/x/globalfee/README.md index c3ea2016..d3ae619f 100644 --- a/x/globalfee/README.md +++ b/x/globalfee/README.md @@ -1,3 +1,5 @@ # Global fee module The Global fee module is based on [Gaia's implementation](https://github.com/cosmos/gaia). Whitch is supplied by the great folks at [TGrade](https://github.com/confio/tgrade) 👋, with minor modifications. All credits and big thanks go to the original authors. + +More information about Cosmoshub fee system please check [here](https://github.com/cosmos/gaia/blob/main/docs/modules/globalfee.md). From f837652daa3ac88e5e1c854124d1c14cfc13a677 Mon Sep 17 00:00:00 2001 From: Eduardo Diaz Date: Wed, 19 Jul 2023 18:15:58 -0400 Subject: [PATCH 127/501] add migration for globalfee module --- x/globalfee/keeper/migrations.go | 23 ++++ x/globalfee/migrations/v2/migration.go | 38 ++++++ .../migrations/v2/v2_test/migration_test.go | 111 ++++++++++++++++++ 3 files changed, 172 insertions(+) create mode 100644 x/globalfee/keeper/migrations.go create mode 100644 x/globalfee/migrations/v2/migration.go create mode 100644 x/globalfee/migrations/v2/v2_test/migration_test.go diff --git a/x/globalfee/keeper/migrations.go b/x/globalfee/keeper/migrations.go new file mode 100644 index 00000000..5d445e29 --- /dev/null +++ b/x/globalfee/keeper/migrations.go @@ -0,0 +1,23 @@ +package keeper + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" + + v2 "github.com/burnt-labs/xion/x/globalfee/migrations/v2" +) + +// Migrator is a struct for handling in-place store migrations. +type Migrator struct { + globalfeeSubspace paramtypes.Subspace +} + +// NewMigrator returns a new Migrator. +func NewMigrator(globalfeeSubspace paramtypes.Subspace) Migrator { + return Migrator{globalfeeSubspace: globalfeeSubspace} +} + +// Migrate1to2 migrates from version 1 to 2. +func (m Migrator) Migrate1to2(ctx sdk.Context) error { + return v2.MigrateStore(ctx, m.globalfeeSubspace) +} diff --git a/x/globalfee/migrations/v2/migration.go b/x/globalfee/migrations/v2/migration.go new file mode 100644 index 00000000..057b8bbd --- /dev/null +++ b/x/globalfee/migrations/v2/migration.go @@ -0,0 +1,38 @@ +package v2 + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" + + "github.com/burnt-labs/xion/x/globalfee/types" +) + +// MigrateStore performs in-place params migrations of +// BypassMinFeeMsgTypes and MaxTotalBypassMinFeeMsgGasUsage +// from app.toml to globalfee params. +// The migration includes: +// Add bypass-min-fee-msg-types params that are set +// ["/ibc.core.channel.v1.MsgRecvPacket", +// "/ibc.core.channel.v1.MsgAcknowledgement", +// "/ibc.core.client.v1.MsgUpdateClient", +// "/ibc.core.channel.v1.MsgTimeout", +// "/ibc.core.channel.v1.MsgTimeoutOnClose"] as default and +// add MaxTotalBypassMinFeeMsgGasUsage that is set 1_000_000 as default. +func MigrateStore(ctx sdk.Context, globalfeeSubspace paramtypes.Subspace) error { + var oldGlobalMinGasPrices sdk.DecCoins + globalfeeSubspace.Get(ctx, types.ParamStoreKeyMinGasPrices, &oldGlobalMinGasPrices) + defaultParams := types.DefaultParams() + params := types.Params{ + MinimumGasPrices: oldGlobalMinGasPrices, + BypassMinFeeMsgTypes: defaultParams.BypassMinFeeMsgTypes, + MaxTotalBypassMinFeeMsgGasUsage: defaultParams.MaxTotalBypassMinFeeMsgGasUsage, + } + + if !globalfeeSubspace.HasKeyTable() { + globalfeeSubspace = globalfeeSubspace.WithKeyTable(types.ParamKeyTable()) + } + + globalfeeSubspace.SetParamSet(ctx, ¶ms) + + return nil +} diff --git a/x/globalfee/migrations/v2/v2_test/migration_test.go b/x/globalfee/migrations/v2/v2_test/migration_test.go new file mode 100644 index 00000000..7eedbba6 --- /dev/null +++ b/x/globalfee/migrations/v2/v2_test/migration_test.go @@ -0,0 +1,111 @@ +package v2_test + +import ( + "testing" + + cometdb "github.com/cometbft/cometbft-db" + "github.com/cometbft/cometbft/libs/log" + tmproto "github.com/cometbft/cometbft/proto/tendermint/types" + "github.com/stretchr/testify/require" + + "github.com/cosmos/cosmos-sdk/codec" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" + "github.com/cosmos/cosmos-sdk/store" + + storetypes "github.com/cosmos/cosmos-sdk/store/types" + sdk "github.com/cosmos/cosmos-sdk/types" + paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" + + v2 "github.com/burnt-labs/xion/x/globalfee/migrations/v2" + + globalfeetypes "github.com/burnt-labs/xion/x/globalfee/types" +) + +func TestMigrateStore(t *testing.T) { + db := cometdb.NewMemDB() + stateStore := store.NewCommitMultiStore(db) + + storeKey := sdk.NewKVStoreKey(paramtypes.StoreKey) + memStoreKey := storetypes.NewMemoryStoreKey("mem_key") + + stateStore.MountStoreWithDB(storeKey, storetypes.StoreTypeIAVL, db) + stateStore.MountStoreWithDB(memStoreKey, storetypes.StoreTypeMemory, nil) + require.NoError(t, stateStore.LoadLatestVersion()) + + registry := codectypes.NewInterfaceRegistry() + cdc := codec.NewProtoCodec(registry) + ctx := sdk.NewContext(stateStore, tmproto.Header{}, false, log.NewNopLogger()) + + require.NoError(t, stateStore.LoadLatestVersion()) + + // Create new empty subspace + newSubspace := paramtypes.NewSubspace(cdc, + codec.NewLegacyAmino(), + storeKey, + memStoreKey, + paramtypes.ModuleName, + ) + + // register the subspace with the v11 paramKeyTable + newSubspace = newSubspace.WithKeyTable(globalfeetypes.ParamKeyTable()) + + // check MinGasPrices isn't set + _, ok := getMinGasPrice(newSubspace, ctx) + require.Equal(t, ok, false) + + // set a minGasPrice different that default value + minGasPrices := sdk.NewDecCoins(sdk.NewDecCoin("uatom", sdk.OneInt())) + newSubspace.Set(ctx, globalfeetypes.ParamStoreKeyMinGasPrices, minGasPrices) + require.False(t, minGasPrices.IsEqual(globalfeetypes.DefaultMinGasPrices)) + + // check that the new parameters aren't set + _, ok = getBypassMsgTypes(newSubspace, ctx) + require.Equal(t, ok, false) + _, ok = getMaxTotalBypassMinFeeMsgGasUsage(newSubspace, ctx) + require.Equal(t, ok, false) + + // run global fee migration + err := v2.MigrateStore(ctx, newSubspace) + require.NoError(t, err) + + newMinGasPrices, _ := getMinGasPrice(newSubspace, ctx) + bypassMsgTypes, _ := getBypassMsgTypes(newSubspace, ctx) + maxGas, _ := getMaxTotalBypassMinFeeMsgGasUsage(newSubspace, ctx) + + require.Equal(t, bypassMsgTypes, globalfeetypes.DefaultBypassMinFeeMsgTypes) + require.Equal(t, maxGas, globalfeetypes.DefaultmaxTotalBypassMinFeeMsgGasUsage) + require.Equal(t, minGasPrices, newMinGasPrices) +} + +func getBypassMsgTypes(globalfeeSubspace paramtypes.Subspace, ctx sdk.Context) ([]string, bool) { + bypassMsgs := []string{} + if globalfeeSubspace.Has(ctx, globalfeetypes.ParamStoreKeyBypassMinFeeMsgTypes) { + globalfeeSubspace.Get(ctx, globalfeetypes.ParamStoreKeyBypassMinFeeMsgTypes, &bypassMsgs) + } else { + return bypassMsgs, false + } + + return bypassMsgs, true +} + +func getMaxTotalBypassMinFeeMsgGasUsage(globalfeeSubspace paramtypes.Subspace, ctx sdk.Context) (uint64, bool) { + var maxTotalBypassMinFeeMsgGasUsage uint64 + if globalfeeSubspace.Has(ctx, globalfeetypes.ParamStoreKeyMaxTotalBypassMinFeeMsgGasUsage) { + globalfeeSubspace.Get(ctx, globalfeetypes.ParamStoreKeyMaxTotalBypassMinFeeMsgGasUsage, &maxTotalBypassMinFeeMsgGasUsage) + } else { + return maxTotalBypassMinFeeMsgGasUsage, false + } + + return maxTotalBypassMinFeeMsgGasUsage, true +} + +func getMinGasPrice(globalfeeSubspace paramtypes.Subspace, ctx sdk.Context) (sdk.DecCoins, bool) { + var globalMinGasPrices sdk.DecCoins + if globalfeeSubspace.Has(ctx, globalfeetypes.ParamStoreKeyMinGasPrices) { + globalfeeSubspace.Get(ctx, globalfeetypes.ParamStoreKeyMinGasPrices, &globalMinGasPrices) + } else { + return globalMinGasPrices, false + } + + return globalMinGasPrices, true +} From 6fa35f0e6be724fd40931ec436eda8f12625bba6 Mon Sep 17 00:00:00 2001 From: Eduardo Diaz Date: Thu, 20 Jul 2023 11:51:30 -0400 Subject: [PATCH 128/501] add migration to register serivce --- x/globalfee/module.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/x/globalfee/module.go b/x/globalfee/module.go index f491c83d..f18b1efd 100644 --- a/x/globalfee/module.go +++ b/x/globalfee/module.go @@ -3,6 +3,7 @@ package globalfee import ( "context" "encoding/json" + "fmt" abci "github.com/cometbft/cometbft/abci/types" "github.com/cosmos/cosmos-sdk/client" @@ -17,6 +18,7 @@ import ( "github.com/spf13/cobra" "github.com/burnt-labs/xion/x/globalfee/client/cli" + "github.com/burnt-labs/xion/x/globalfee/keeper" "github.com/burnt-labs/xion/x/globalfee/types" ) @@ -113,6 +115,11 @@ func (a AppModule) QuerierRoute() string { func (a AppModule) RegisterServices(cfg module.Configurator) { types.RegisterQueryServer(cfg.QueryServer(), NewGrpcQuerier(a.globalfeeSubspace)) + + m := keeper.NewMigrator(a.globalfeeSubspace) + if err := cfg.RegisterMigration(types.ModuleName, 1, m.Migrate1to2); err != nil { + panic(fmt.Sprintf("failed to migrate x/globalfee from version 1 to 2: %v", err)) + } } func (a AppModule) BeginBlock(_ sdk.Context, _ abci.RequestBeginBlock) { From 188f891837f9aa4a3e3a258d47d0535976b5ce40 Mon Sep 17 00:00:00 2001 From: Eduardo Diaz Date: Thu, 20 Jul 2023 21:45:25 -0400 Subject: [PATCH 129/501] add upgrade plan strategy --- app/app.go | 37 ++++++++++++++++++++++++++++++++++++ app/upgrades/types.go | 22 +++++++++++++++++++++ app/upgrades/v2/constants.go | 26 +++++++++++++++++++++++++ app/upgrades/v2/upgrades.go | 24 +++++++++++++++++++++++ 4 files changed, 109 insertions(+) create mode 100644 app/upgrades/types.go create mode 100644 app/upgrades/v2/constants.go create mode 100644 app/upgrades/v2/upgrades.go diff --git a/app/app.go b/app/app.go index 474b697f..57c1edab 100644 --- a/app/app.go +++ b/app/app.go @@ -126,6 +126,7 @@ import ( wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" + "github.com/burnt-labs/xion/app/upgrades" "github.com/burnt-labs/xion/x/mint" mintkeeper "github.com/burnt-labs/xion/x/mint/keeper" minttypes "github.com/burnt-labs/xion/x/mint/types" @@ -133,6 +134,7 @@ import ( xionkeeper "github.com/burnt-labs/xion/x/xion/keeper" xiontypes "github.com/burnt-labs/xion/x/xion/types" + v2 "github.com/burnt-labs/xion/app/upgrades/v2" "github.com/burnt-labs/xion/x/globalfee" ) @@ -150,6 +152,7 @@ var ( // of "EnableAllProposals" (takes precedence over ProposalsEnabled) // https://github.com/CosmWasm/wasmd/blob/02a54d33ff2c064f3539ae12d75d027d9c665f05/x/wasm/internal/types/proposal.go#L28-L34 EnableSpecificProposals = "" + Upgrades = []upgrades.Upgrade{v2.Upgrade} ) // GetEnabledProposals parses the ProposalsEnabled / EnableSpecificProposals values to @@ -874,6 +877,10 @@ func NewWasmApp( // upgrade. app.setPostHandler() + /* upgrade network */ + app.setupUpgradeHandlers() + app.setupUpgradeStoreLoaders() + if loadLatest { if err := app.LoadLatestVersion(); err != nil { logger.Error("error on loading last version", "err", err) @@ -1066,6 +1073,36 @@ func (app *WasmApp) RegisterNodeService(clientCtx client.Context) { nodeservice.RegisterNodeService(clientCtx, app.GRPCQueryRouter()) } +func (app *WasmApp) setupUpgradeHandlers() { + for _, upgrade := range Upgrades { + app.UpgradeKeeper.SetUpgradeHandler( + upgrade.UpgradeName, + upgrade.CreateUpgradeHandler( + app.ModuleManager, + app.configurator, + ), + ) + } +} + +// configure store loader that checks if version == upgradeHeight and applies store upgrades +func (app *WasmApp) setupUpgradeStoreLoaders() { + upgradeInfo, err := app.UpgradeKeeper.ReadUpgradeInfoFromDisk() + if err != nil { + panic(fmt.Sprintf("failed to read upgrade info from disk %s", err)) + } + + if app.UpgradeKeeper.IsSkipHeight(upgradeInfo.Height) { + return + } + + for _, upgrade := range Upgrades { + if upgradeInfo.Name == upgrade.UpgradeName { + app.SetStoreLoader(upgradetypes.UpgradeStoreLoader(upgradeInfo.Height, &upgrade.StoreUpgrades)) + } + } +} + // GetMaccPerms returns a copy of the module account permissions // // NOTE: This is solely to be used for testing purposes. diff --git a/app/upgrades/types.go b/app/upgrades/types.go new file mode 100644 index 00000000..2b9a2b36 --- /dev/null +++ b/app/upgrades/types.go @@ -0,0 +1,22 @@ +package upgrades + +import ( + store "github.com/cosmos/cosmos-sdk/store/types" + "github.com/cosmos/cosmos-sdk/types/module" + upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" +) + +// Upgrade defines a struct containing necessary fields that a SoftwareUpgradeProposal +// must have written, in order for the state migration to go smoothly. +// An upgrade must implement this struct, and then set it in the app.go. +// The app.go will then define the handler. +type Upgrade struct { + // Upgrade version name, for the upgrade handler, e.g. `v7` + UpgradeName string + + // CreateUpgradeHandler defines the function that creates an upgrade handler + CreateUpgradeHandler func(*module.Manager, module.Configurator) upgradetypes.UpgradeHandler + + // Store upgrades, should be used for any new modules introduced, new modules deleted, or store names renamed. + StoreUpgrades store.StoreUpgrades +} diff --git a/app/upgrades/v2/constants.go b/app/upgrades/v2/constants.go new file mode 100644 index 00000000..06134703 --- /dev/null +++ b/app/upgrades/v2/constants.go @@ -0,0 +1,26 @@ +package v2 + +import ( + store "github.com/cosmos/cosmos-sdk/store/types" + + "github.com/burnt-labs/xion/app/upgrades" + + "github.com/burnt-labs/xion/x/globalfee" + aatypes "github.com/larry0x/abstract-account/x/abstractaccount/types" +) + +const ( + // UpgradeName defines the on-chain upgrade name. + UpgradeName = "v3.0.0" +) + +var Upgrade = upgrades.Upgrade{ + UpgradeName: UpgradeName, + CreateUpgradeHandler: CreateUpgradeHandler, + StoreUpgrades: store.StoreUpgrades{ + Added: []string{ + globalfee.ModuleName, + aatypes.ModuleName, + }, + }, +} diff --git a/app/upgrades/v2/upgrades.go b/app/upgrades/v2/upgrades.go new file mode 100644 index 00000000..f185b771 --- /dev/null +++ b/app/upgrades/v2/upgrades.go @@ -0,0 +1,24 @@ +package v2 + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" + upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" +) + +func CreateUpgradeHandler( + mm *module.Manager, + configurator module.Configurator, +) upgradetypes.UpgradeHandler { + return func(ctx sdk.Context, plan upgradetypes.Plan, vm module.VersionMap) (module.VersionMap, error) { + ctx.Logger().Info("Starting module migrations...") + + vm, err := mm.RunMigrations(ctx, configurator, vm) + if err != nil { + return vm, err + } + + ctx.Logger().Info("Upgrade complete") + return vm, err + } +} From 6f84e1809eaa120a21a1d41078d81a9eca515ca3 Mon Sep 17 00:00:00 2001 From: Eduardo Diaz Date: Fri, 21 Jul 2023 00:22:40 -0400 Subject: [PATCH 130/501] update aa to implement migration --- go.mod | 3 +++ go.sum | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/go.mod b/go.mod index b150cc5f..be2f4163 100644 --- a/go.mod +++ b/go.mod @@ -186,4 +186,7 @@ replace ( // pin version! 126854af5e6d has issues with the store so that queries fail github.com/syndtr/goleveldb => github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 + ) + +replace github.com/larry0x/abstract-account => github.com/burnt-labs/abstract-account v0.0.0-20230721040454-68904221c088 diff --git a/go.sum b/go.sum index c3796c18..ca127e2b 100644 --- a/go.sum +++ b/go.sum @@ -264,6 +264,8 @@ github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY github.com/btcsuite/btcd/btcutil v1.1.2 h1:XLMbX8JQEiwMcYft2EGi8zPUkoa0abKIU6/BJSRsjzQ= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= github.com/bufbuild/protocompile v0.4.0 h1:LbFKd2XowZvQ/kajzguUp2DC9UEIQhIq77fZZlaQsNA= +github.com/burnt-labs/abstract-account v0.0.0-20230721040454-68904221c088 h1:De75nngNzTFaPn/rEpkjsv80JRfwqf1Qbdel2I1nZ8c= +github.com/burnt-labs/abstract-account v0.0.0-20230721040454-68904221c088/go.mod h1:j9fogRoUYXYodprxCpD+m/bh6mWXRDEcpL4Gwo4NarE= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= @@ -700,8 +702,6 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= 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/larry0x/abstract-account v0.0.0-20230708200055-2ea462db913f h1:5bbME0rK2j2cCwRzoc2dX1/SDo3guFgyNyph+c+ulI4= -github.com/larry0x/abstract-account v0.0.0-20230708200055-2ea462db913f/go.mod h1:mRL3ko+eOFguJHzhVZatNZOvaiVHumGAWxoLlyIo+Ow= github.com/larry0x/simapp v0.0.0-20230527213943-e57d94ffca4c h1:HxMMvjvPKv+Xttad2Blw6c9XKzg/Pk5TIZL8T04lUN0= github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= From 8cc80c949ce921798f5d57364b18e954635d1625 Mon Sep 17 00:00:00 2001 From: Eduardo Diaz Date: Fri, 21 Jul 2023 00:33:25 -0400 Subject: [PATCH 131/501] upgrade AA consensus version --- app/upgrades/v2/constants.go | 2 +- go.mod | 2 +- go.sum | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/upgrades/v2/constants.go b/app/upgrades/v2/constants.go index 06134703..4dae332e 100644 --- a/app/upgrades/v2/constants.go +++ b/app/upgrades/v2/constants.go @@ -11,7 +11,7 @@ import ( const ( // UpgradeName defines the on-chain upgrade name. - UpgradeName = "v3.0.0" + UpgradeName = "v0.3.0" ) var Upgrade = upgrades.Upgrade{ diff --git a/go.mod b/go.mod index be2f4163..6513af99 100644 --- a/go.mod +++ b/go.mod @@ -189,4 +189,4 @@ replace ( ) -replace github.com/larry0x/abstract-account => github.com/burnt-labs/abstract-account v0.0.0-20230721040454-68904221c088 +replace github.com/larry0x/abstract-account => github.com/burnt-labs/abstract-account v0.0.0-20230721042501-ef9e3f63d0cd diff --git a/go.sum b/go.sum index ca127e2b..ae2de133 100644 --- a/go.sum +++ b/go.sum @@ -264,8 +264,8 @@ github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY github.com/btcsuite/btcd/btcutil v1.1.2 h1:XLMbX8JQEiwMcYft2EGi8zPUkoa0abKIU6/BJSRsjzQ= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= github.com/bufbuild/protocompile v0.4.0 h1:LbFKd2XowZvQ/kajzguUp2DC9UEIQhIq77fZZlaQsNA= -github.com/burnt-labs/abstract-account v0.0.0-20230721040454-68904221c088 h1:De75nngNzTFaPn/rEpkjsv80JRfwqf1Qbdel2I1nZ8c= -github.com/burnt-labs/abstract-account v0.0.0-20230721040454-68904221c088/go.mod h1:j9fogRoUYXYodprxCpD+m/bh6mWXRDEcpL4Gwo4NarE= +github.com/burnt-labs/abstract-account v0.0.0-20230721042501-ef9e3f63d0cd h1:y8O1OFv/FFMo/r3xK1mpLIuWk3zGOVCgvZ3MpczF7hQ= +github.com/burnt-labs/abstract-account v0.0.0-20230721042501-ef9e3f63d0cd/go.mod h1:j9fogRoUYXYodprxCpD+m/bh6mWXRDEcpL4Gwo4NarE= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= From c7a6ec3b3b7a8547f70b1ef53215786177399452 Mon Sep 17 00:00:00 2001 From: Eduardo Diaz Date: Mon, 24 Jul 2023 11:26:38 -0400 Subject: [PATCH 132/501] update interchain test --- integration_tests/dungeon_test.go | 2 +- integration_tests/go.mod | 46 ++++++++-------- integration_tests/go.sum | 90 ++++++++++++++++--------------- integration_tests/send_test.go | 2 +- 4 files changed, 71 insertions(+), 69 deletions(-) diff --git a/integration_tests/dungeon_test.go b/integration_tests/dungeon_test.go index a12b2c36..6284925f 100644 --- a/integration_tests/dungeon_test.go +++ b/integration_tests/dungeon_test.go @@ -219,7 +219,7 @@ func TestDungeonTransferBlock(t *testing.T) { Title: "Disable sendability of uxion", Summary: "This proposal prevents uxion from being sent in the bank module", } - paramChangeTx, err := xion.SubmitProposal(ctx, xionUser.KeyName(), &prop) + paramChangeTx, err := xion.SubmitProposal(ctx, xionUser.KeyName(), prop) require.NoError(t, err) t.Logf("Param change proposal submitted with ID %s in transaction %s", paramChangeTx.ProposalID, paramChangeTx.TxHash) diff --git a/integration_tests/go.mod b/integration_tests/go.mod index d28f7ee9..215b0672 100644 --- a/integration_tests/go.mod +++ b/integration_tests/go.mod @@ -5,31 +5,31 @@ go 1.19 require ( cosmossdk.io/math v1.0.1 github.com/burnt-labs/xion v0.1.0 - github.com/cosmos/cosmos-sdk v0.47.3 + github.com/cosmos/cosmos-sdk v0.47.4 github.com/cosmos/ibc-go/v7 v7.2.0 github.com/icza/dyno v0.0.0-20220812133438-f0b6f8a18845 - github.com/strangelove-ventures/interchaintest/v7 v7.0.0-20230326163644-f0ba01f43314 + github.com/strangelove-ventures/interchaintest/v7 v7.0.0-20230721183422-fb937bb0e165 github.com/stretchr/testify v1.8.4 go.uber.org/zap v1.24.0 google.golang.org/grpc v1.56.2 ) require ( - cloud.google.com/go v0.110.0 // indirect - cloud.google.com/go/compute v1.19.1 // indirect + cloud.google.com/go v0.110.4 // indirect + cloud.google.com/go/compute v1.20.1 // indirect cloud.google.com/go/compute/metadata v0.2.3 // indirect - cloud.google.com/go/iam v0.13.0 // indirect - cloud.google.com/go/storage v1.29.0 // indirect + cloud.google.com/go/iam v1.1.0 // indirect + cloud.google.com/go/storage v1.30.1 // indirect cosmossdk.io/api v0.3.1 // indirect cosmossdk.io/core v0.5.1 // indirect cosmossdk.io/depinject v1.0.0-alpha.3 // indirect cosmossdk.io/errors v1.0.0 // indirect - cosmossdk.io/log v1.1.0 // indirect + cosmossdk.io/log v1.1.1-0.20230704160919-88f2c830b0ca // indirect cosmossdk.io/tools/rosetta v0.2.1 // indirect filippo.io/edwards25519 v1.0.0 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect github.com/99designs/keyring v1.2.2 // indirect - github.com/BurntSushi/toml v1.3.0 // indirect + github.com/BurntSushi/toml v1.3.2 // indirect github.com/ChainSafe/go-schnorrkel v1.0.0 // indirect github.com/ChainSafe/go-schnorrkel/1 v0.0.0-00010101000000-000000000000 // indirect github.com/ComposableFi/go-subkey/v2 v2.0.0-tm03420 // indirect @@ -68,14 +68,14 @@ require ( github.com/deckarep/golang-set v1.8.0 // indirect github.com/decred/base58 v1.0.4 // indirect github.com/decred/dcrd/crypto/blake256 v1.0.0 // indirect - github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.0 // indirect + github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.1 // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 // indirect github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f // indirect github.com/dgraph-io/badger/v2 v2.2007.4 // indirect github.com/dgraph-io/ristretto v0.1.1 // indirect github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect github.com/docker/distribution v2.8.2+incompatible // indirect - github.com/docker/docker v24.0.1+incompatible // indirect + github.com/docker/docker v24.0.4+incompatible // indirect github.com/docker/go-connections v0.4.0 // indirect github.com/docker/go-units v0.5.0 // indirect github.com/dustin/go-humanize v1.0.1 // indirect @@ -98,10 +98,10 @@ require ( github.com/google/btree v1.1.2 // indirect github.com/google/go-cmp v0.5.9 // indirect github.com/google/orderedcode v0.0.1 // indirect - github.com/google/s2a-go v0.1.3 // indirect + github.com/google/s2a-go v0.1.4 // indirect github.com/google/uuid v1.3.0 // indirect github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect - github.com/googleapis/gax-go/v2 v2.8.0 // indirect + github.com/googleapis/gax-go/v2 v2.11.0 // indirect github.com/gorilla/handlers v1.5.1 // indirect github.com/gorilla/mux v1.8.0 // indirect github.com/gorilla/websocket v1.5.0 // indirect @@ -135,7 +135,7 @@ require ( github.com/magiconair/properties v1.8.7 // indirect github.com/manifoldco/promptui v0.9.0 // indirect github.com/mattn/go-colorable v0.1.13 // indirect - github.com/mattn/go-isatty v0.0.18 // indirect + github.com/mattn/go-isatty v0.0.19 // indirect github.com/mattn/go-pointer v0.0.1 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect github.com/mimoo/StrobeGo v0.0.0-20220103164710-9a04d6ca976b // indirect @@ -157,7 +157,7 @@ require ( github.com/opencontainers/go-digest v1.0.0 // indirect github.com/opencontainers/image-spec v1.1.0-rc2 // indirect github.com/pelletier/go-toml v1.9.5 // indirect - github.com/pelletier/go-toml/v2 v2.0.8 // indirect + github.com/pelletier/go-toml/v2 v2.0.9 // indirect github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08 // indirect github.com/pierrec/xxHash v0.1.5 // indirect github.com/pkg/errors v0.9.1 // indirect @@ -195,18 +195,20 @@ require ( go.uber.org/multierr v1.11.0 // indirect golang.org/x/crypto v0.11.0 // indirect golang.org/x/exp v0.0.0-20230515195305-f3d0a9c9a5cc // indirect - golang.org/x/mod v0.10.0 // indirect + golang.org/x/mod v0.12.0 // indirect golang.org/x/net v0.12.0 // indirect - golang.org/x/oauth2 v0.7.0 // indirect - golang.org/x/sync v0.2.0 // indirect + golang.org/x/oauth2 v0.8.0 // indirect + golang.org/x/sync v0.3.0 // indirect golang.org/x/sys v0.10.0 // indirect golang.org/x/term v0.10.0 // indirect golang.org/x/text v0.11.0 // indirect - golang.org/x/tools v0.9.3 // indirect + golang.org/x/tools v0.11.0 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect - google.golang.org/api v0.122.0 // indirect + google.golang.org/api v0.126.0 // indirect google.golang.org/appengine v1.6.7 // indirect - google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect + google.golang.org/genproto v0.0.0-20230706204954-ccb25ca9f130 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98 // indirect google.golang.org/protobuf v1.31.0 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect @@ -220,7 +222,7 @@ require ( modernc.org/mathutil v1.5.0 // indirect modernc.org/memory v1.5.0 // indirect modernc.org/opt v0.1.3 // indirect - modernc.org/sqlite v1.23.0 // indirect + modernc.org/sqlite v1.24.0 // indirect modernc.org/strutil v1.1.3 // indirect modernc.org/token v1.0.1 // indirect nhooyr.io/websocket v1.8.6 // indirect @@ -233,7 +235,5 @@ replace ( github.com/ChainSafe/go-schnorrkel/1 => github.com/ChainSafe/go-schnorrkel v1.0.0 github.com/burnt-labs/xion => ../ github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 - github.com/strangelove-ventures/interchaintest/v7 => github.com/burnt-labs/interchaintest/v7 v7.0.0-20230613163648-aa1862315549 - //github.com/strangelove-ventures/interchaintest/v7 => ../../interchaintest github.com/vedhavyas/go-subkey => github.com/strangelove-ventures/go-subkey v1.0.7 ) diff --git a/integration_tests/go.sum b/integration_tests/go.sum index 64b238c4..d055d5c3 100644 --- a/integration_tests/go.sum +++ b/integration_tests/go.sum @@ -32,8 +32,8 @@ cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w9 cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= -cloud.google.com/go v0.110.0 h1:Zc8gqp3+a9/Eyph2KDmcGaPtbKRIoqq4YTlL4NMD0Ys= -cloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY= +cloud.google.com/go v0.110.4 h1:1JYyxKMN9hd5dR2MYTPWkGUgcoxVVhg0LKNKEo0qvmk= +cloud.google.com/go v0.110.4/go.mod h1:+EYjdK8e5RME/VY/qLCAtuyALQ9q67dvuum8i+H5xsI= cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= @@ -70,8 +70,8 @@ cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= -cloud.google.com/go/compute v1.19.1 h1:am86mquDUgjGNWxiGn+5PGLbmgiWXlE/yNWpIpNvuXY= -cloud.google.com/go/compute v1.19.1/go.mod h1:6ylj3a05WF8leseCdIf77NK0g1ey+nj5IKd5/kvShxE= +cloud.google.com/go/compute v1.20.1 h1:6aKEtlUiwEpJzM001l0yFkpXmUVXaN8W+fbkb2AZNbg= +cloud.google.com/go/compute v1.20.1/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= @@ -111,13 +111,12 @@ cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y97 cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= -cloud.google.com/go/iam v0.13.0 h1:+CmB+K0J/33d0zSQ9SlFWUeCCEn5XJA0ZMZ3pHE9u8k= -cloud.google.com/go/iam v0.13.0/go.mod h1:ljOg+rcNfzZ5d6f1nAUJ8ZIxOaZUVoS14bKCtaLZ/D0= +cloud.google.com/go/iam v1.1.0 h1:67gSqaPukx7O8WLLHMa0PNs3EBGd2eE4d+psbO/CO94= +cloud.google.com/go/iam v1.1.0/go.mod h1:nxdHjaKfCr7fNYx/HJMM8LgiMugmveWlkatear5gVyk= cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= -cloud.google.com/go/longrunning v0.4.1 h1:v+yFJOfKC3yZdY6ZUI933pIYdhyhV8S3NpWrXWmg7jM= cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= @@ -175,8 +174,8 @@ cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3f cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= -cloud.google.com/go/storage v1.29.0 h1:6weCgzRvMg7lzuUurI4697AqIRPU1SvzHhynwpW31jI= -cloud.google.com/go/storage v1.29.0/go.mod h1:4puEjyTKnku6gfKoTfNOU/W+a9JyuVNxjpS5GBrB8h4= +cloud.google.com/go/storage v1.30.1 h1:uOdMxAs8HExqBlnLtnQyP0YkvbiDpdGShGKtx6U/oNM= +cloud.google.com/go/storage v1.30.1/go.mod h1:NfxhC0UJE1aXSx7CIIbCf7y9HKT7BiccwkR7+P7gN8E= cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= @@ -196,8 +195,8 @@ cosmossdk.io/depinject v1.0.0-alpha.3 h1:6evFIgj//Y3w09bqOUOzEpFj5tsxBqdc5CfkO7z cosmossdk.io/depinject v1.0.0-alpha.3/go.mod h1:eRbcdQ7MRpIPEM5YUJh8k97nxHpYbc3sMUnEtt8HPWU= cosmossdk.io/errors v1.0.0 h1:nxF07lmlBbB8NKQhtJ+sJm6ef5uV1XkvPXG2bUntb04= cosmossdk.io/errors v1.0.0/go.mod h1:+hJZLuhdDE0pYN8HkOrVNwrIOYvUGnn6+4fjnJs/oV0= -cosmossdk.io/log v1.1.0 h1:v0ogPHYeTzPcBTcPR1A3j1hkei4pZama8kz8LKlCMv0= -cosmossdk.io/log v1.1.0/go.mod h1:6zjroETlcDs+mm62gd8Ig7mZ+N+fVOZS91V17H+M4N4= +cosmossdk.io/log v1.1.1-0.20230704160919-88f2c830b0ca h1:msenprh2BLLRwNT7zN56TbBHOGk/7ARQckXHxXyvjoQ= +cosmossdk.io/log v1.1.1-0.20230704160919-88f2c830b0ca/go.mod h1:PkIAKXZvaxrTRc++z53XMRvFk8AcGGWYHcMIPzVYX9c= cosmossdk.io/math v1.0.1 h1:Qx3ifyOPaMLNH/89WeZFH268yCvU4xEcnPLu3sJqPPg= cosmossdk.io/math v1.0.1/go.mod h1:Ygz4wBHrgc7g0N+8+MrnTfS9LLn9aaTGa9hKopuym5k= cosmossdk.io/tools/rosetta v0.2.1 h1:ddOMatOH+pbxWbrGJKRAawdBkPYLfKXutK9IETnjYxw= @@ -211,8 +210,8 @@ github.com/99designs/keyring v1.2.2 h1:pZd3neh/EmUzWONb35LxQfvuY7kiSXAq3HQd97+XB github.com/99designs/keyring v1.2.2/go.mod h1:wes/FrByc8j7lFOAGLGSNEg8f/PaI3cgTBqhFkHUrPk= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/toml v1.3.0 h1:Ws8e5YmnrGEHzZEzg0YvK/7COGYtTC5PbaH9oSSbgfA= -github.com/BurntSushi/toml v1.3.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8= +github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= @@ -281,8 +280,6 @@ github.com/btcsuite/btcd/btcutil v1.1.2 h1:XLMbX8JQEiwMcYft2EGi8zPUkoa0abKIU6/BJ github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce h1:YtWJF7RHm2pYCvA5t0RPmAaLUhREsKuKd+SLhxFbFeQ= github.com/bufbuild/protocompile v0.4.0 h1:LbFKd2XowZvQ/kajzguUp2DC9UEIQhIq77fZZlaQsNA= -github.com/burnt-labs/interchaintest/v7 v7.0.0-20230613163648-aa1862315549 h1:M4hMShIbILWq7oBIIn2ZGet5PXj82UkF0tBQyqbupGw= -github.com/burnt-labs/interchaintest/v7 v7.0.0-20230613163648-aa1862315549/go.mod h1:PQHTFpUmM/meGRt87JNtCQp5k+D1Vgb/vS9+Faup6UA= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= @@ -343,8 +340,8 @@ 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-proto v1.0.0-beta.2 h1:X3OKvWgK9Gsejo0F1qs5l8Qn6xJV/AzgIWR2wZ8Nua8= github.com/cosmos/cosmos-proto v1.0.0-beta.2/go.mod h1:+XRCLJ14pr5HFEHIUcn51IKXD1Fy3rkEQqt4WqmN4V0= -github.com/cosmos/cosmos-sdk v0.47.3 h1:r0hGmZoAzP2D+MaPaFGHwAaTdFQq3pNpHaUp1BsffbM= -github.com/cosmos/cosmos-sdk v0.47.3/go.mod h1:c4OfLdAykA9zsj1CqrxBRqXzVz48I++JSvIMPSPcEmk= +github.com/cosmos/cosmos-sdk v0.47.4 h1:FVUpEprm58nMmBX4xkRdMDaIG5Nr4yy92HZAfGAw9bg= +github.com/cosmos/cosmos-sdk v0.47.4/go.mod h1:R5n+uM7vguVPFap4pgkdvQCT1nVo/OtPwrlAU40rvok= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= @@ -384,8 +381,8 @@ github.com/decred/dcrd/chaincfg/chainhash v1.0.2 h1:rt5Vlq/jM3ZawwiacWjPa+smINyL github.com/decred/dcrd/chaincfg/chainhash v1.0.2/go.mod h1:BpbrGgrPTr3YJYRN3Bm+D9NuaFd+zGyNeIKgrhCXK60= github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= -github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.0 h1:3GIJYXQDAKpLEFriGFN8SbSffak10UXHGdIcFaMPykY= -github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.0/go.mod h1:3s92l0paYkZoIHuj4X93Teg/HB7eGM9x/zokGw+u4mY= +github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.1 h1:18HurQ6DfHeNvwIjvOmrgr44bPdtVaQAe/WWwHg9goM= +github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.1/go.mod h1:XmyzkaXBy7ZvHdrTAlXAjpog8qKSAWa3ze7yqzWmgmc= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 h1:HbphB4TFFXpv7MNrT52FGrrgVXF1owhMVTHFZIlnvd4= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0/go.mod h1:DZGJHZMqrU4JJqFAWUS2UO1+lbSKsdiOoYi9Zzey7Fc= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= @@ -401,8 +398,8 @@ github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WA github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8= github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v24.0.1+incompatible h1:NxN81beIxDlUaVt46iUQrYHD9/W3u9EGl52r86O/IGw= -github.com/docker/docker v24.0.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v24.0.4+incompatible h1:s/LVDftw9hjblvqIeTiGYXBCD95nOEEl7qRsRrIOuQI= +github.com/docker/docker v24.0.4+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= @@ -582,8 +579,8 @@ github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26 h1:Xim43kblpZXfIBQsbuBVKCudVG457BR2GZFIz3uw3hQ= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/s2a-go v0.1.3 h1:FAgZmpLl/SXurPEZyCMPBIiiYeTbqfjlbdnCNTAkbGE= -github.com/google/s2a-go v0.1.3/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= +github.com/google/s2a-go v0.1.4 h1:1kZ/sQM3srePvKs3tXAvQzo66XfcReoqFpIpIccE7Oc= +github.com/google/s2a-go v0.1.4/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= @@ -602,8 +599,8 @@ github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99 github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= -github.com/googleapis/gax-go/v2 v2.8.0 h1:UBtEZqx1bjXtOQ5BVTkuYghXrr3N4V123VKJK67vJZc= -github.com/googleapis/gax-go/v2 v2.8.0/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI= +github.com/googleapis/gax-go/v2 v2.11.0 h1:9V9PWXEsWnPpQhu/PeQIkS4eGzMlTLGgt80cUUI8Ki4= +github.com/googleapis/gax-go/v2 v2.11.0/go.mod h1:DxmR61SGKkGLa2xigwuZIQpkCI2S5iydzRfb3peWZJI= github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= @@ -763,8 +760,8 @@ github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNx 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.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-isatty v0.0.18 h1:DOKFKCQ7FNG2L1rbrmstDN4QVRdS89Nkh85u68Uwp98= -github.com/mattn/go-isatty v0.0.18/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= +github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-pointer v0.0.1 h1:n+XhsuGeVO6MEAp7xyEukFINEa+Quek5psIR/ylA6o0= github.com/mattn/go-pointer v0.0.1/go.mod h1:2zXcozF6qYGgmsG+SeTZz3oAbFLdD3OWqnUbNvJZAlc= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= @@ -876,8 +873,8 @@ github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtP github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= 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.8 h1:0ctb6s9mE31h0/lhu+J6OPmVeDxJn+kYnJc2jZR9tGQ= -github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4= +github.com/pelletier/go-toml/v2 v2.0.9 h1:uH2qQXheeefCCkuBBSLi7jCiSmj3VRh2+Goq2N7Xxu0= +github.com/pelletier/go-toml/v2 v2.0.9/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08 h1:hDSdbBuw3Lefr6R18ax0tZ2BJeNB3NehB3trOwYBsdU= @@ -992,6 +989,8 @@ github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= github.com/spf13/viper v1.16.0 h1:rGGH0XDZhdUOryiDWjmIvUSWpbNqisK8Wk0Vyefw8hc= github.com/spf13/viper v1.16.0/go.mod h1:yg78JgCJcbrQOvV9YLXgkLaZqUidkY9K+Dd1FofRzQg= +github.com/strangelove-ventures/interchaintest/v7 v7.0.0-20230721183422-fb937bb0e165 h1:uVCHoklBlbAy77RT6iQBaK7oo8rTn5uI0hrRn1LL5Sw= +github.com/strangelove-ventures/interchaintest/v7 v7.0.0-20230721183422-fb937bb0e165/go.mod h1:WUglvTs5dOXiI7z+VRiVibkFcd2pvTfoDEcXnjYONrw= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= @@ -1012,7 +1011,6 @@ github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1F 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.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8= @@ -1141,8 +1139,8 @@ 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.10.0 h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk= -golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc= +golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= 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= @@ -1231,8 +1229,8 @@ golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= -golang.org/x/oauth2 v0.7.0 h1:qe6s0zUXlPX80/dITx3440hWZ7GwMwgDDyrSGTPJG/g= -golang.org/x/oauth2 v0.7.0/go.mod h1:hPLQkd9LyjfXTiRohC/41GhcFqxisoUQ99sCUOHO9x4= +golang.org/x/oauth2 v0.8.0 h1:6dkIjl3j3LtZ/O3sTgZTMsLKSftL/B8Zgq4huOIIUu8= +golang.org/x/oauth2 v0.8.0/go.mod h1:yr7u4HXZRm1R1kBWqr/xKNqewf0plRYoB7sla+BCIXE= 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= @@ -1247,8 +1245,8 @@ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/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.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI= -golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= +golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= 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= @@ -1433,8 +1431,8 @@ golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.4/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.9.3 h1:Gn1I8+64MsuTb/HpH+LmQtNas23LhUVr3rYZ0eKuaMM= -golang.org/x/tools v0.9.3/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= +golang.org/x/tools v0.11.0 h1:EMCa6U9S2LtZXLAMoWiR/R8dAQFRqbAitmbJ2UKhoi8= +golang.org/x/tools v0.11.0/go.mod h1:anzJrxPjNtfgiYQYirP2CPGzGLxrH2u2QBhn6Bf3qY8= 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= @@ -1493,8 +1491,8 @@ google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= -google.golang.org/api v0.122.0 h1:zDobeejm3E7pEG1mNHvdxvjs5XJoCMzyNH+CmwL94Es= -google.golang.org/api v0.122.0/go.mod h1:gcitW0lvnyWjSp9nKxAbdHKIZ6vF4aajGueeslZOyms= +google.golang.org/api v0.126.0 h1:q4GJq+cAdMAC7XP7njvQ4tvohGLiSlytuL4BQxbIZ+o= +google.golang.org/api v0.126.0/go.mod h1:mBwVAtz+87bEN6CbA1GtZPDOqY2R5ONPqJeIlvyo4Aw= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1613,8 +1611,12 @@ google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqw google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= -google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 h1:KpwkzHKEF7B9Zxg18WzOa7djJ+Ha5DzthMyZYQfEn2A= -google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU= +google.golang.org/genproto v0.0.0-20230706204954-ccb25ca9f130 h1:Au6te5hbKUV8pIYWHqOUZ1pva5qK/rwbIhoXEUB9Lu8= +google.golang.org/genproto v0.0.0-20230706204954-ccb25ca9f130/go.mod h1:O9kGHb51iE/nOGvQaDUuadVYqovW56s5emA88lQnj6Y= +google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529 h1:s5YSX+ZH5b5vS9rnpGymvIyMpLRJizowqDlOuyjXnTk= +google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98 h1:bVf09lpb+OJbByTj913DRJioFFAjf/ZGxEz7MajTp2U= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98/go.mod h1:TUfxEVdsvPg18p6AslUXFoLdpED4oBnGwyqk3dV1XzM= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= @@ -1739,8 +1741,8 @@ modernc.org/memory v1.5.0 h1:N+/8c5rE6EqugZwHii4IFsaJ7MUhoWX07J5tC/iI5Ds= modernc.org/memory v1.5.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= modernc.org/opt v0.1.3 h1:3XOZf2yznlhC+ibLltsDGzABUGVx8J6pnFMS3E4dcq4= modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= -modernc.org/sqlite v1.23.0 h1:MWTFBI5H1WLnXpNBh/BTruBVqzzoh28DA0iOnlkkRaM= -modernc.org/sqlite v1.23.0/go.mod h1:OrDj17Mggn6MhE+iPbBNf7RGKODDE9NFT0f3EwDzJqk= +modernc.org/sqlite v1.24.0 h1:EsClRIWHGhLTCX44p+Ri/JLD+vFGo0QGjasg2/F9TlI= +modernc.org/sqlite v1.24.0/go.mod h1:OrDj17Mggn6MhE+iPbBNf7RGKODDE9NFT0f3EwDzJqk= modernc.org/strutil v1.1.3 h1:fNMm+oJklMGYfU9Ylcywl0CO5O6nTfaowNsh2wpPjzY= modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw= modernc.org/tcl v1.15.2 h1:C4ybAYCGJw968e+Me18oW55kD/FexcHbqH2xak1ROSY= diff --git a/integration_tests/send_test.go b/integration_tests/send_test.go index 769ca67b..1597b0b9 100644 --- a/integration_tests/send_test.go +++ b/integration_tests/send_test.go @@ -85,7 +85,7 @@ func TestXionSendPlatformFee(t *testing.T) { Title: "Set platform percentage to 5%", Summary: "Ups the platform fee to 5% for the integration test", } - paramChangeTx, err := xion.SubmitProposal(ctx, xionUser.KeyName(), &prop) + paramChangeTx, err := xion.SubmitProposal(ctx, xionUser.KeyName(), prop) require.NoError(t, err) t.Logf("Platform percentage change proposal submitted with ID %s in transaction %s", paramChangeTx.ProposalID, paramChangeTx.TxHash) From 99e7a53b6293ad3c5f7c93cd974778cb9d0f7220 Mon Sep 17 00:00:00 2001 From: Eduardo Diaz Date: Tue, 25 Jul 2023 16:59:10 -0400 Subject: [PATCH 133/501] add upgrade test, simulate network upgrades --- Makefile | 6 ++ integration_tests/go.mod | 3 +- integration_tests/go.sum | 4 +- integration_tests/minimum_fee_test.go | 4 +- integration_tests/mint_test.go | 12 ++- integration_tests/send_test.go | 3 +- integration_tests/upgrade_test.go | 106 ++++++++++++++++++++++++++ integration_tests/utils.go | 11 ++- 8 files changed, 137 insertions(+), 12 deletions(-) create mode 100644 integration_tests/upgrade_test.go diff --git a/Makefile b/Makefile index d163f8b5..a507f8eb 100644 --- a/Makefile +++ b/Makefile @@ -129,6 +129,12 @@ test-unit: test-integration: @XION_IMAGE=$(XION_IMAGE) cd integration_tests && go test -mod=readonly -tags='ledger test_ledger_mock' ./... +test-integration-min: + @XION_IMAGE=$(XION_IMAGE) cd integration_tests && go test -run TestXionMinimumFee -mod=readonly -tags='ledger test_ledger_mock' ./... + +test-integration-upgrade: + @XION_IMAGE=$(XION_IMAGE) cd integration_tests && go test -run TestXionUpgradeIBC -mod=readonly -tags='ledger test_ledger_mock' ./... + test-race: @VERSION=$(VERSION) go test -mod=readonly -race -tags='ledger test_ledger_mock' ./... diff --git a/integration_tests/go.mod b/integration_tests/go.mod index 215b0672..a613906c 100644 --- a/integration_tests/go.mod +++ b/integration_tests/go.mod @@ -7,6 +7,7 @@ require ( github.com/burnt-labs/xion v0.1.0 github.com/cosmos/cosmos-sdk v0.47.4 github.com/cosmos/ibc-go/v7 v7.2.0 + github.com/docker/docker v24.0.4+incompatible github.com/icza/dyno v0.0.0-20220812133438-f0b6f8a18845 github.com/strangelove-ventures/interchaintest/v7 v7.0.0-20230721183422-fb937bb0e165 github.com/stretchr/testify v1.8.4 @@ -75,7 +76,6 @@ require ( github.com/dgraph-io/ristretto v0.1.1 // indirect github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect github.com/docker/distribution v2.8.2+incompatible // indirect - github.com/docker/docker v24.0.4+incompatible // indirect github.com/docker/go-connections v0.4.0 // indirect github.com/docker/go-units v0.5.0 // indirect github.com/dustin/go-humanize v1.0.1 // indirect @@ -235,5 +235,6 @@ replace ( github.com/ChainSafe/go-schnorrkel/1 => github.com/ChainSafe/go-schnorrkel v1.0.0 github.com/burnt-labs/xion => ../ github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 + github.com/strangelove-ventures/interchaintest/v7 => github.com/burnt-labs/interchaintest/v7 v7.0.0-20230725204927-990da9d6e272 github.com/vedhavyas/go-subkey => github.com/strangelove-ventures/go-subkey v1.0.7 ) diff --git a/integration_tests/go.sum b/integration_tests/go.sum index d055d5c3..26531839 100644 --- a/integration_tests/go.sum +++ b/integration_tests/go.sum @@ -280,6 +280,8 @@ github.com/btcsuite/btcd/btcutil v1.1.2 h1:XLMbX8JQEiwMcYft2EGi8zPUkoa0abKIU6/BJ github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce h1:YtWJF7RHm2pYCvA5t0RPmAaLUhREsKuKd+SLhxFbFeQ= github.com/bufbuild/protocompile v0.4.0 h1:LbFKd2XowZvQ/kajzguUp2DC9UEIQhIq77fZZlaQsNA= +github.com/burnt-labs/interchaintest/v7 v7.0.0-20230725204927-990da9d6e272 h1:R3QMfw3FomFGiuE+bg8snhyZP7ygMbPxwh/7awtJvgM= +github.com/burnt-labs/interchaintest/v7 v7.0.0-20230725204927-990da9d6e272/go.mod h1:WUglvTs5dOXiI7z+VRiVibkFcd2pvTfoDEcXnjYONrw= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= @@ -989,8 +991,6 @@ github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= github.com/spf13/viper v1.16.0 h1:rGGH0XDZhdUOryiDWjmIvUSWpbNqisK8Wk0Vyefw8hc= github.com/spf13/viper v1.16.0/go.mod h1:yg78JgCJcbrQOvV9YLXgkLaZqUidkY9K+Dd1FofRzQg= -github.com/strangelove-ventures/interchaintest/v7 v7.0.0-20230721183422-fb937bb0e165 h1:uVCHoklBlbAy77RT6iQBaK7oo8rTn5uI0hrRn1LL5Sw= -github.com/strangelove-ventures/interchaintest/v7 v7.0.0-20230721183422-fb937bb0e165/go.mod h1:WUglvTs5dOXiI7z+VRiVibkFcd2pvTfoDEcXnjYONrw= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= diff --git a/integration_tests/minimum_fee_test.go b/integration_tests/minimum_fee_test.go index f93b9ac5..7c23184a 100644 --- a/integration_tests/minimum_fee_test.go +++ b/integration_tests/minimum_fee_test.go @@ -18,7 +18,8 @@ func TestXionMinimumFee(t *testing.T) { t.Parallel() - xion, ctx := BuildXionChain(t, "0.1uxion", ModifyInterChainGenesis(ModifyInterChainGenesisFn{ModifyGenesisShortProposals}, [][]string{{votingPeriod, maxDepositPeriod}})) + td := BuildXionChain(t, "0.1uxion", ModifyInterChainGenesis(ModifyInterChainGenesisFn{ModifyGenesisShortProposals}, [][]string{{votingPeriod, maxDepositPeriod}})) + xion, ctx := td.xionChain, td.ctx // Create and Fund User Wallets t.Log("creating and funding user accounts") @@ -55,7 +56,6 @@ func TestXionMinimumFee(t *testing.T) { //) currentHeight, _ = xion.Height(ctx) - fmt.Println(fmt.Sprintf("Height Before TX: %d", currentHeight)) _, err = ExecTx(t, ctx, xion.FullNodes[0], xionUser.KeyName(), "xion", "send", xionUser.KeyName(), diff --git a/integration_tests/mint_test.go b/integration_tests/mint_test.go index 90a24b44..5fe69b41 100644 --- a/integration_tests/mint_test.go +++ b/integration_tests/mint_test.go @@ -32,7 +32,8 @@ func TestMintModuleNoInflationNoFees(t *testing.T) { t.Skip("skipping in short mode") } - xion, ctx := BuildXionChain(t, "0.0uxion", ModifyInterChainGenesis(ModifyInterChainGenesisFn{ModifyGenesisInflation}, [][]string{{inflationMin, inflationMax, inflationRateChange}})) + td := BuildXionChain(t, "0.0uxion", ModifyInterChainGenesis(ModifyInterChainGenesisFn{ModifyGenesisShortProposals}, [][]string{{votingPeriod, maxDepositPeriod}})) + xion, ctx := td.xionChain, td.ctx // Wait for some blocks and check if that supply stays the same chainHeight, _ := xion.Height(ctx) @@ -53,7 +54,8 @@ func TestMintModuleInflationNoFees(t *testing.T) { t.Parallel() - xion, ctx := BuildXionChain(t, "0.0uxion", ModifyInterChainGenesis(ModifyInterChainGenesisFn{}, [][]string{{}})) + td := BuildXionChain(t, "0.0uxion", ModifyInterChainGenesis(ModifyInterChainGenesisFn{ModifyGenesisShortProposals}, [][]string{{votingPeriod, maxDepositPeriod}})) + xion, ctx := td.xionChain, td.ctx chainHeight, _ := xion.Height(ctx) testutil.WaitForBlocks(ctx, int(chainHeight)+10, xion) @@ -152,7 +154,8 @@ func TestMintModuleInflationHighFees(t *testing.T) { t.Parallel() - xion, ctx := BuildXionChain(t, "0.0uxion", ModifyInterChainGenesis(ModifyInterChainGenesisFn{}, [][]string{{}})) + td := BuildXionChain(t, "0.0uxion", ModifyInterChainGenesis(ModifyInterChainGenesisFn{ModifyGenesisShortProposals}, [][]string{{votingPeriod, maxDepositPeriod}})) + xion, ctx := td.xionChain, td.ctx txHashes := MintModuleTest{ TxHashes: []string{}, @@ -180,7 +183,8 @@ func TestMintModuleInflationLowFees(t *testing.T) { t.Parallel() - xion, ctx := BuildXionChain(t, "0.0uxion", ModifyInterChainGenesis(ModifyInterChainGenesisFn{}, [][]string{{}})) + td := BuildXionChain(t, "0.0uxion", ModifyInterChainGenesis(ModifyInterChainGenesisFn{ModifyGenesisShortProposals}, [][]string{{votingPeriod, maxDepositPeriod}})) + xion, ctx := td.xionChain, td.ctx txHashes := MintModuleTest{ TxHashes: []string{}, diff --git a/integration_tests/send_test.go b/integration_tests/send_test.go index 1597b0b9..11304a36 100644 --- a/integration_tests/send_test.go +++ b/integration_tests/send_test.go @@ -24,7 +24,8 @@ func TestXionSendPlatformFee(t *testing.T) { t.Parallel() - xion, ctx := BuildXionChain(t, "0.0uxion", ModifyInterChainGenesis(ModifyInterChainGenesisFn{ModifyGenesisShortProposals}, [][]string{{votingPeriod, maxDepositPeriod}})) + td := BuildXionChain(t, "0.0uxion", ModifyInterChainGenesis(ModifyInterChainGenesisFn{ModifyGenesisShortProposals}, [][]string{{votingPeriod, maxDepositPeriod}})) + xion, ctx := td.xionChain, td.ctx // Create and Fund User Wallets t.Log("creating and funding user accounts") diff --git a/integration_tests/upgrade_test.go b/integration_tests/upgrade_test.go new file mode 100644 index 00000000..63daf841 --- /dev/null +++ b/integration_tests/upgrade_test.go @@ -0,0 +1,106 @@ +package integration_tests + +import ( + "context" + "fmt" + "testing" + "time" + + interchaintest "github.com/strangelove-ventures/interchaintest/v7" + "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" + "github.com/strangelove-ventures/interchaintest/v7/testutil" + "github.com/stretchr/testify/require" +) + +const ( + haltHeightDelta = uint64(10) // will propose upgrade this many blocks in the future + blocksAfterUpgrade = uint64(10) +) + +/* +* CONTRACT: This test requires manual setup before running +* 1- Git checkout to current version of the network +* 2- Build current using heighliner pass in the flag `-t current`. (for instructions on how to build check README.md on the root of the project) +* 3- Git checkout to upgrade-version version of the network +* 4- Build using heighliner pass in the flag `-t upgrade`. (for instructions on how to build check README.md on the root of the project) +* 5- Mark upgrade name as the last parameter of the function +* 6- cd integration_test +* 7- XION_IMAGE=[current version of the network] go test -run TestXionUpgradeIBC ./... + +As of July 25 2023 this is the necceary process to run this test, this is due to the fact that AWS & docker-hub auto deleting old images, therefore you might lose what the version currently running is image wise +current-testnet: 2722f0f +upgrade-version: c7a6ec3 +*/ +func TestXionUpgradeIBC(t *testing.T) { + CosmosChainUpgradeIBCTest(t, "xion", "current", "xion", "upgrade", "v0.3.0") +} + +func CosmosChainUpgradeIBCTest(t *testing.T, chainName, initialVersion, upgradeContainerRepo, upgradeVersion string, upgradeName string) { + t.Skip("ComosChainUpgradeTest should be run manually, please comment skip and follow instructions when running") + + t.Parallel() + + td := BuildXionChain(t, "0.0uxion", ModifyInterChainGenesis(ModifyInterChainGenesisFn{ModifyGenesisShortProposals}, [][]string{{votingPeriod, maxDepositPeriod}})) + chain, ctx, client := td.xionChain, td.ctx, td.client + + fundAmount := int64(10_000_000_000) + users := interchaintest.GetAndFundTestUsers(t, ctx, "default", fundAmount, chain) + chainUser := users[0] + + height, err := chain.Height(ctx) + require.NoError(t, err, "error fetching height before submit upgrade proposal") + + haltHeight := height + haltHeightDelta - 3 + + proposal := cosmos.SoftwareUpgradeProposal{ + Deposit: "500000000" + chain.Config().Denom, // greater than min deposit + Title: "Chain Upgrade 1", + Name: upgradeName, + Description: "First chain software upgrade", + Height: haltHeight, + } + + upgradeTx, err := chain.LegacyUpgradeProposal(ctx, chainUser.KeyName(), proposal) + require.NoError(t, err, "error submitting software upgrade proposal tx") + + err = chain.VoteOnProposalAllValidators(ctx, upgradeTx.ProposalID, cosmos.ProposalVoteYes) + require.NoError(t, err, "failed to submit votes") + + _, err = cosmos.PollForProposalStatus(ctx, chain, height, height+haltHeightDelta, upgradeTx.ProposalID, cosmos.ProposalStatusPassed) + require.NoError(t, err, "proposal status did not change to passed in expected number of blocks") + + height, err = chain.Height(ctx) + require.NoError(t, err, "error fetching height before upgrade") + + timeoutCtx, timeoutCtxCancel := context.WithTimeout(ctx, time.Second*45) + defer timeoutCtxCancel() + + // this should timeout due to chain halt at upgrade height. + _ = testutil.WaitForBlocks(timeoutCtx, int(haltHeight-height), chain) + + height, err = chain.Height(ctx) + require.NoError(t, err, "error fetching height after chain should have halted") + + // make sure that chain is halted + require.Equal(t, haltHeight, height, fmt.Sprintf("height: %d is not equal to halt height: %d", height, haltHeight)) + + // bring down nodes to prepare for upgrade + err = chain.StopAllNodes(ctx) + require.NoError(t, err, "error stopping node(s)") + + // upgrade version on all nodes + chain.UpgradeVersion(ctx, client, upgradeContainerRepo, upgradeVersion) + + // start all nodes back up. + // validators reach consensus on first block after upgrade height + // and chain block production resumes. + err = chain.StartAllNodes(ctx) + require.NoError(t, err, "error starting upgraded node(s)") + + timeoutCtx, timeoutCtxCancel = context.WithTimeout(ctx, time.Second*45) + defer timeoutCtxCancel() + + err = testutil.WaitForBlocks(timeoutCtx, int(blocksAfterUpgrade), chain) + require.NoError(t, err, "chain did not produce blocks after upgrade") + +} diff --git a/integration_tests/utils.go b/integration_tests/utils.go index f845cbd8..7c6b512e 100644 --- a/integration_tests/utils.go +++ b/integration_tests/utils.go @@ -16,6 +16,7 @@ import ( authTx "github.com/cosmos/cosmos-sdk/x/auth/tx" "github.com/icza/dyno" + "github.com/docker/docker/client" "github.com/strangelove-ventures/interchaintest/v7" "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" "github.com/strangelove-ventures/interchaintest/v7/ibc" @@ -33,7 +34,13 @@ const ( // Function type for any function that modify the genesis file type ModifyInterChainGenesisFn []func(ibc.ChainConfig, []byte, ...string) ([]byte, error) -func BuildXionChain(t *testing.T, gas string, modifyGenesis func(ibc.ChainConfig, []byte) ([]byte, error)) (*cosmos.CosmosChain, context.Context) { +type TestData struct { + xionChain *cosmos.CosmosChain + ctx context.Context + client *client.Client +} + +func BuildXionChain(t *testing.T, gas string, modifyGenesis func(ibc.ChainConfig, []byte) ([]byte, error)) TestData { ctx := context.Background() var numFullNodes = 1 @@ -101,7 +108,7 @@ func BuildXionChain(t *testing.T, gas string, modifyGenesis func(ibc.ChainConfig SkipPathCreation: false}, ), ) - return xion, ctx + return TestData{xion, ctx, client} } /* From 5743f425ecd19cb95ef36f63b634683c09e913e7 Mon Sep 17 00:00:00 2001 From: Eduardo Diaz Date: Tue, 25 Jul 2023 17:01:31 -0400 Subject: [PATCH 134/501] correct commits --- integration_tests/upgrade_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/integration_tests/upgrade_test.go b/integration_tests/upgrade_test.go index 63daf841..9cfa24dd 100644 --- a/integration_tests/upgrade_test.go +++ b/integration_tests/upgrade_test.go @@ -28,8 +28,8 @@ const ( * 7- XION_IMAGE=[current version of the network] go test -run TestXionUpgradeIBC ./... As of July 25 2023 this is the necceary process to run this test, this is due to the fact that AWS & docker-hub auto deleting old images, therefore you might lose what the version currently running is image wise -current-testnet: 2722f0f -upgrade-version: c7a6ec3 +current-testnet: 2722f0fb1234db97e9bf9b98f744675eb8fb1b26 +upgrade-version: 990da9d6e272552ac73e1abef81418f294838b03 */ func TestXionUpgradeIBC(t *testing.T) { CosmosChainUpgradeIBCTest(t, "xion", "current", "xion", "upgrade", "v0.3.0") From 94811c77d61cdedee142f7aac57f88bf3d51831e Mon Sep 17 00:00:00 2001 From: Ash Date: Thu, 27 Jul 2023 23:57:20 +0200 Subject: [PATCH 135/501] initial fee-abs integration --- app/ante.go | 19 ++++++++++--- app/app.go | 41 ++++++++++++++++++++++++++-- go.mod | 15 ++++++++-- go.sum | 6 ++++ integration_tests/go.mod | 2 +- integration_tests/go.sum | 1 + x/globalfee/ante/fee.go | 3 +- x/globalfee/ante/validator_tx_fee.go | 2 +- 8 files changed, 77 insertions(+), 12 deletions(-) diff --git a/app/ante.go b/app/ante.go index 3fadc096..731928d8 100644 --- a/app/ante.go +++ b/app/ante.go @@ -2,6 +2,7 @@ package app import ( errorsmod "cosmossdk.io/errors" + globalfeeante "github.com/burnt-labs/xion/x/globalfee/ante" storetypes "github.com/cosmos/cosmos-sdk/store/types" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" @@ -12,12 +13,12 @@ import ( "github.com/cosmos/ibc-go/v7/modules/core/keeper" "github.com/larry0x/abstract-account/x/abstractaccount" aakeeper "github.com/larry0x/abstract-account/x/abstractaccount/keeper" + feeabsante "github.com/notional-labs/fee-abstraction/v2/x/feeabs/ante" + feeabskeeper "github.com/notional-labs/fee-abstraction/v2/x/feeabs/keeper" wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" wasmTypes "github.com/CosmWasm/wasmd/x/wasm/types" stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper" - - globalfeeante "github.com/burnt-labs/xion/x/globalfee/ante" ) // HandlerOptions extend the SDK's AnteHandler options by requiring the IBC @@ -31,6 +32,7 @@ type HandlerOptions struct { GlobalFeeSubspace paramtypes.Subspace StakingKeeper *stakingkeeper.Keeper AbstractAccountKeeper aakeeper.Keeper + FeeAbsKeeper *feeabskeeper.Keeper } func NewAnteHandler(options HandlerOptions) (sdk.AnteHandler, error) { @@ -55,18 +57,27 @@ func NewAnteHandler(options HandlerOptions) (sdk.AnteHandler, error) { if options.TXCounterStoreKey == nil { return nil, errorsmod.Wrap(sdkerrors.ErrLogic, "tx counter key is required for ante builder") } + if options.FeeAbsKeeper == nil { + return nil, errorsmod.Wrap(sdkerrors.ErrLogic, "fee abstraction keeper is required for AnteHandler") + } anteDecorators := []sdk.AnteDecorator{ ante.NewSetUpContextDecorator(), // outermost AnteDecorator. SetUpContext must be called first wasmkeeper.NewLimitSimulationGasDecorator(options.WasmConfig.SimulationGasLimit), // after setup context to enforce limits early wasmkeeper.NewCountTXDecorator(options.TXCounterStoreKey), ante.NewExtensionOptionsDecorator(options.ExtensionOptionChecker), + // this changes the minGasFees, + // and must occur before gas fee checks + globalfeeante.NewFeeDecorator(options.GlobalFeeSubspace, options.StakingKeeper.BondDenom), + feeabsante.NewFeeAbstrationMempoolFeeDecorator(*options.FeeAbsKeeper), + + // validation checks ante.NewValidateBasicDecorator(), ante.NewTxTimeoutHeightDecorator(), ante.NewValidateMemoDecorator(options.AccountKeeper), ante.NewConsumeGasForTxSizeDecorator(options.AccountKeeper), - globalfeeante.NewFeeDecorator(options.GlobalFeeSubspace, options.StakingKeeper.BondDenom), // - ante.NewDeductFeeDecorator(options.AccountKeeper, options.BankKeeper, options.FeegrantKeeper, options.TxFeeChecker), + // fee abstraction fee deduction replaces sdk fee deduction + feeabsante.NewFeeAbstractionDeductFeeDecorate(options.AccountKeeper, options.BankKeeper, *options.FeeAbsKeeper, options.FeegrantKeeper), ante.NewSetPubKeyDecorator(options.AccountKeeper), // SetPubKeyDecorator must be called before all signature verification decorators ante.NewValidateSigCountDecorator(options.AccountKeeper), ante.NewSigGasConsumeDecorator(options.AccountKeeper, options.SigGasConsumer), diff --git a/app/app.go b/app/app.go index 474b697f..87d07996 100644 --- a/app/app.go +++ b/app/app.go @@ -3,6 +3,9 @@ package app import ( "encoding/json" "fmt" + "github.com/notional-labs/fee-abstraction/v2/x/feeabs" + feeabskeeper "github.com/notional-labs/fee-abstraction/v2/x/feeabs/keeper" + feeabstypes "github.com/notional-labs/fee-abstraction/v2/x/feeabs/types" "io" "os" "path/filepath" @@ -120,6 +123,7 @@ import ( aa "github.com/larry0x/abstract-account/x/abstractaccount" aakeeper "github.com/larry0x/abstract-account/x/abstractaccount/keeper" aatypes "github.com/larry0x/abstract-account/x/abstractaccount/types" + "github.com/spf13/cast" "github.com/CosmWasm/wasmd/x/wasm" @@ -209,6 +213,9 @@ var ( upgradeclient.LegacyCancelProposalHandler, ibcclientclient.UpdateClientProposalHandler, ibcclientclient.UpgradeProposalHandler, + feeabs.UpdateAddHostZoneClientProposalHandler, + feeabs.UpdateDeleteHostZoneClientProposalHandler, + feeabs.UpdateSetHostZoneClientProposalHandler, }, ), params.AppModuleBasic{}, @@ -232,6 +239,7 @@ var ( transfer.AppModuleBasic{}, ica.AppModuleBasic{}, ibcfee.AppModuleBasic{}, + feeabs.AppModuleBasic{}, ) // module account permissions @@ -297,6 +305,7 @@ type WasmApp struct { TransferKeeper ibctransferkeeper.Keeper WasmKeeper wasm.Keeper AbstractAccountKeeper aakeeper.Keeper + FeeAbsKeeper feeabskeeper.Keeper XionKeeper xionkeeper.Keeper @@ -306,6 +315,7 @@ type WasmApp struct { ScopedTransferKeeper capabilitykeeper.ScopedKeeper ScopedIBCFeeKeeper capabilitykeeper.ScopedKeeper ScopedWasmKeeper capabilitykeeper.ScopedKeeper + ScopedFeeabsKeeper capabilitykeeper.ScopedKeeper // the module manager ModuleManager *module.Manager @@ -350,6 +360,7 @@ func NewWasmApp( ibcexported.StoreKey, ibctransfertypes.StoreKey, ibcfeetypes.StoreKey, wasm.StoreKey, icahosttypes.StoreKey, aatypes.StoreKey, icacontrollertypes.StoreKey, globalfee.StoreKey, xiontypes.StoreKey, + feeabstypes.StoreKey, ) tkeys := sdk.NewTransientStoreKeys(paramstypes.TStoreKey) @@ -395,6 +406,7 @@ func NewWasmApp( scopedICAControllerKeeper := app.CapabilityKeeper.ScopeToModule(icacontrollertypes.SubModuleName) scopedTransferKeeper := app.CapabilityKeeper.ScopeToModule(ibctransfertypes.ModuleName) scopedWasmKeeper := app.CapabilityKeeper.ScopeToModule(wasm.ModuleName) + scopedFeeabsKeeper := app.CapabilityKeeper.ScopeToModule(feeabstypes.ModuleName) app.CapabilityKeeper.Seal() // add keepers @@ -500,6 +512,23 @@ func NewWasmApp( scopedIBCKeeper, ) + app.FeeAbsKeeper = feeabskeeper.NewKeeper( + appCodec, + keys[feeabstypes.StoreKey], + keys[feeabstypes.MemStoreKey], + app.GetSubspace(feeabstypes.ModuleName), + app.StakingKeeper, + app.AccountKeeper, + app.BankKeeper, + app.TransferKeeper, + app.IBCKeeper.ChannelKeeper, + &app.IBCKeeper.PortKeeper, + scopedFeeabsKeeper, + ) + + feeabsModule := feeabs.NewAppModule(appCodec, app.FeeAbsKeeper) + feeabsIBCModule := feeabs.NewIBCModule(appCodec, app.FeeAbsKeeper) + // Register the proposal types // Deprecated: Avoid adding new handlers, instead use the new proposal flow // by granting the governance module the right to execute the message. @@ -508,7 +537,8 @@ func NewWasmApp( govRouter.AddRoute(govtypes.RouterKey, govv1beta1.ProposalHandler). AddRoute(paramproposal.RouterKey, params.NewParamChangeProposalHandler(app.ParamsKeeper)). // This should be removed. It is still in place to avoid failures of modules that have not yet been upgraded. AddRoute(upgradetypes.RouterKey, upgrade.NewSoftwareUpgradeProposalHandler(app.UpgradeKeeper)). - AddRoute(ibcclienttypes.RouterKey, ibcclient.NewClientProposalHandler(app.IBCKeeper.ClientKeeper)) + AddRoute(ibcclienttypes.RouterKey, ibcclient.NewClientProposalHandler(app.IBCKeeper.ClientKeeper)). + AddRoute(feeabstypes.RouterKey, feeabs.NewHostZoneProposal(app.FeeAbsKeeper)) govConfig := govtypes.DefaultConfig() /* @@ -677,7 +707,8 @@ func NewWasmApp( AddRoute(ibctransfertypes.ModuleName, transferStack). AddRoute(wasm.ModuleName, wasmStack). AddRoute(icacontrollertypes.SubModuleName, icaControllerStack). - AddRoute(icahosttypes.SubModuleName, icaHostStack) + AddRoute(icahosttypes.SubModuleName, icaHostStack). + AddRoute(feeabstypes.ModuleName, feeabsIBCModule) app.IBCKeeper.SetRouter(ibcRouter) /**** Module Options ****/ @@ -720,6 +751,7 @@ func NewWasmApp( transfer.NewAppModule(app.TransferKeeper), ibcfee.NewAppModule(app.IBCFeeKeeper), ica.NewAppModule(&app.ICAControllerKeeper, &app.ICAHostKeeper), + feeabsModule, crisis.NewAppModule(app.CrisisKeeper, skipGenesisInvariants, app.GetSubspace(crisistypes.ModuleName)), // always be last to make sure that it checks for all invariants and not only part of them ) @@ -741,6 +773,7 @@ func NewWasmApp( // additional non simd modules ibctransfertypes.ModuleName, ibcexported.ModuleName, + feeabstypes.ModuleName, icatypes.ModuleName, ibcfeetypes.ModuleName, wasm.ModuleName, @@ -760,6 +793,7 @@ func NewWasmApp( // additional non simd modules ibctransfertypes.ModuleName, ibcexported.ModuleName, + feeabstypes.ModuleName, icatypes.ModuleName, ibcfeetypes.ModuleName, wasm.ModuleName, @@ -783,6 +817,7 @@ func NewWasmApp( // additional non simd modules ibctransfertypes.ModuleName, ibcexported.ModuleName, + feeabstypes.ModuleName, icatypes.ModuleName, ibcfeetypes.ModuleName, // wasm after ibc transfer @@ -905,6 +940,7 @@ func (app *WasmApp) setAnteHandler(txConfig client.TxConfig, wasmConfig wasmtype TXCounterStoreKey: txCounterStoreKey, GlobalFeeSubspace: app.GetSubspace(globalfee.ModuleName), StakingKeeper: app.StakingKeeper, + FeeAbsKeeper: &app.FeeAbsKeeper, }, ) if err != nil { @@ -1087,6 +1123,7 @@ func BlockedAddresses() map[string]bool { // allow the following addresses to receive funds delete(modAccAddrs, authtypes.NewModuleAddress(govtypes.ModuleName).String()) + delete(modAccAddrs, authtypes.NewModuleAddress(feeabstypes.ModuleName).String()) return modAccAddrs } diff --git a/go.mod b/go.mod index b150cc5f..2087effb 100644 --- a/go.mod +++ b/go.mod @@ -49,6 +49,8 @@ require ( sigs.k8s.io/yaml v1.3.0 ) +require github.com/notional-labs/fee-abstraction/v2 v2.1.1 // indirect + require ( cloud.google.com/go v0.110.0 // indirect cloud.google.com/go/compute v1.19.1 // indirect @@ -67,14 +69,14 @@ require ( github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect github.com/cenkalti/backoff/v4 v4.1.3 // indirect github.com/cespare/xxhash v1.1.0 // indirect - github.com/cespare/xxhash/v2 v2.2.0 // indirect + github.com/cespare/xxhash/v2 v2.2.0 // indirectg github.com/chzyer/readline v1.5.1 // indirect github.com/cockroachdb/apd/v2 v2.0.2 // indirect github.com/coinbase/rosetta-sdk-go/types v1.0.0 // indirect github.com/confio/ics23/go v0.9.0 // indirect github.com/cosmos/btcutil v1.0.5 // indirect github.com/cosmos/go-bip39 v1.0.0 // indirect - github.com/cosmos/ledger-cosmos-go v0.12.1 // indirect + github.com/cosmos/ledger-cosmos-go v0.12.2 // indirect github.com/cosmos/rosetta-sdk-go v0.10.0 // indirect github.com/creachadair/taskgroup v0.4.2 // indirect github.com/danieljoos/wincred v1.1.2 // indirect @@ -92,7 +94,7 @@ require ( github.com/go-logfmt/logfmt v0.6.0 // indirect github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect github.com/gogo/googleapis v1.4.1 // indirect - github.com/gogo/protobuf v1.3.2 // indirect + github.com/gogo/protobuf v1.3.3 // indirect github.com/golang/glog v1.1.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/snappy v0.0.4 // indirect @@ -184,6 +186,13 @@ replace ( // See: https://github.com/cosmos/cosmos-sdk/issues/10409 github.com/gin-gonic/gin => github.com/gin-gonic/gin v1.8.1 + github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 + + github.com/tendermint/tendermint => github.com/cometbft/cometbft v0.37.2 + + github.com/notional-labs/fee-abstraction/v2 => github.com/osmosis-labs/fee-abstraction/v2 v2.0.0-20230718172125-87710739dbbc + // pin version! 126854af5e6d has issues with the store so that queries fail github.com/syndtr/goleveldb => github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 + ) diff --git a/go.sum b/go.sum index c3796c18..1ffc2793 100644 --- a/go.sum +++ b/go.sum @@ -343,6 +343,7 @@ github.com/cosmos/keyring v1.2.0 h1:8C1lBP9xhImmIabyXW4c3vFjjLiBdGCmfLUfeZlV1Yo= github.com/cosmos/keyring v1.2.0/go.mod h1:fc+wB5KTk9wQ9sDx0kFXB3A0MaeGHM9AwRStKOQ5vOA= github.com/cosmos/ledger-cosmos-go v0.12.1 h1:sMBxza5p/rNK/06nBSNmsI/WDqI0pVJFVNihy1Y984w= github.com/cosmos/ledger-cosmos-go v0.12.1/go.mod h1:dhO6kj+Y+AHIOgAe4L9HL/6NDdyyth4q238I9yFpD2g= +github.com/cosmos/ledger-cosmos-go v0.12.2/go.mod h1:ZcqYgnfNJ6lAXe4HPtWgarNEY+B74i+2/8MhZw4ziiI= github.com/cosmos/rosetta-sdk-go v0.10.0 h1:E5RhTruuoA7KTIXUcMicL76cffyeoyvNybzUGSKFTcM= github.com/cosmos/rosetta-sdk-go v0.10.0/go.mod h1:SImAZkb96YbwvoRkzSMQB6noNJXFgWl/ENIznEoYQI4= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= @@ -360,6 +361,7 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= +github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 h1:HbphB4TFFXpv7MNrT52FGrrgVXF1owhMVTHFZIlnvd4= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0/go.mod h1:DZGJHZMqrU4JJqFAWUS2UO1+lbSKsdiOoYi9Zzey7Fc= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= @@ -802,6 +804,8 @@ github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJ github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA= +github.com/osmosis-labs/fee-abstraction/v2 v2.0.0-20230718172125-87710739dbbc h1:z+Kjnv0lja2vZdIXUS7wbScW0CZcgKjE31V6xPVOIOQ= +github.com/osmosis-labs/fee-abstraction/v2 v2.0.0-20230718172125-87710739dbbc/go.mod h1:ZceG2QlMAdSVELrhSA7BfjVxoEoYkoNS3A4tGE6nd0I= github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= @@ -865,6 +869,7 @@ github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqn 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/regen-network/gocuke v0.6.2 h1:pHviZ0kKAq2U2hN2q3smKNxct6hS0mGByFMHGnWA97M= +github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= 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= @@ -1434,6 +1439,7 @@ google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfG 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-20200324203455-a04cca1dde73/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= diff --git a/integration_tests/go.mod b/integration_tests/go.mod index d28f7ee9..39b40abf 100644 --- a/integration_tests/go.mod +++ b/integration_tests/go.mod @@ -60,7 +60,7 @@ require ( github.com/cosmos/gogoproto v1.4.10 // indirect github.com/cosmos/iavl v0.20.0 // indirect github.com/cosmos/ics23/go v0.10.0 // indirect - github.com/cosmos/ledger-cosmos-go v0.12.1 // indirect + github.com/cosmos/ledger-cosmos-go v0.12.2 // indirect github.com/cosmos/rosetta-sdk-go v0.10.0 // indirect github.com/creachadair/taskgroup v0.4.2 // indirect github.com/danieljoos/wincred v1.1.2 // indirect diff --git a/integration_tests/go.sum b/integration_tests/go.sum index 64b238c4..f6471545 100644 --- a/integration_tests/go.sum +++ b/integration_tests/go.sum @@ -361,6 +361,7 @@ github.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZD github.com/cosmos/ics23/go v0.10.0/go.mod h1:ZfJSmng/TBNTBkFemHHHj5YY7VAU/MBU980F4VU1NG0= github.com/cosmos/ledger-cosmos-go v0.12.1 h1:sMBxza5p/rNK/06nBSNmsI/WDqI0pVJFVNihy1Y984w= github.com/cosmos/ledger-cosmos-go v0.12.1/go.mod h1:dhO6kj+Y+AHIOgAe4L9HL/6NDdyyth4q238I9yFpD2g= +github.com/cosmos/ledger-cosmos-go v0.12.2/go.mod h1:ZcqYgnfNJ6lAXe4HPtWgarNEY+B74i+2/8MhZw4ziiI= github.com/cosmos/rosetta-sdk-go v0.10.0 h1:E5RhTruuoA7KTIXUcMicL76cffyeoyvNybzUGSKFTcM= github.com/cosmos/rosetta-sdk-go v0.10.0/go.mod h1:SImAZkb96YbwvoRkzSMQB6noNJXFgWl/ENIznEoYQI4= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= diff --git a/x/globalfee/ante/fee.go b/x/globalfee/ante/fee.go index c9a3d313..758ad4bc 100644 --- a/x/globalfee/ante/fee.go +++ b/x/globalfee/ante/fee.go @@ -105,7 +105,8 @@ func (mfd FeeDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, ne allowedToBypassMinFee := allBypassMsgs && doesNotExceedMaxGasUsage if allowedToBypassMinFee { - return next(ctx, tx, simulate) + // if allowed to bypass, update context with zero min gas + return next(ctx.WithMinGasPrices(sdk.DecCoins{}), tx, simulate) } // if the msg does not satisfy bypass condition and the feeCoins denoms are subset of feeRequired, diff --git a/x/globalfee/ante/validator_tx_fee.go b/x/globalfee/ante/validator_tx_fee.go index e8c865b7..7da487d1 100644 --- a/x/globalfee/ante/validator_tx_fee.go +++ b/x/globalfee/ante/validator_tx_fee.go @@ -48,7 +48,7 @@ func checkTxFeeWithValidatorMinGasPrices(ctx sdk.Context, tx sdk.Tx) (sdk.Coins, // getTxPriority returns a naive tx priority based on the amount of the smallest denomination of the gas price // provided in a transaction. // NOTE: This implementation should be used with a great consideration as it opens potential attack vectors -// where txs with multiple coins could not be prioritize as expected. +// where txs with multiple coins could not be prioritized as expected. func getTxPriority(fee sdk.Coins, gas int64) int64 { var priority int64 for _, c := range fee { From 9f27e34d23f3da13a8dc5e3bb27a6e5d732f5909 Mon Sep 17 00:00:00 2001 From: Ash Date: Sat, 29 Jul 2023 00:22:40 +0200 Subject: [PATCH 136/501] upgrade name change --- app/upgrades/v2/constants.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/upgrades/v2/constants.go b/app/upgrades/v2/constants.go index 4dae332e..7a3124f9 100644 --- a/app/upgrades/v2/constants.go +++ b/app/upgrades/v2/constants.go @@ -11,7 +11,7 @@ import ( const ( // UpgradeName defines the on-chain upgrade name. - UpgradeName = "v0.3.0" + UpgradeName = "v2" ) var Upgrade = upgrades.Upgrade{ From e31b46bacb9a07e4342e5ce85a69b74b8068f8a8 Mon Sep 17 00:00:00 2001 From: Ash Date: Mon, 31 Jul 2023 14:28:57 +0200 Subject: [PATCH 137/501] ibc hooks and packet forward middleware --- app/app.go | 65 ++++++++++++++++++++++++++++++++++-- app/upgrades/v2/constants.go | 2 ++ go.mod | 14 +++++--- go.sum | 31 +++++++++-------- integration_tests/go.mod | 6 ++-- integration_tests/go.sum | 3 ++ 6 files changed, 95 insertions(+), 26 deletions(-) diff --git a/app/app.go b/app/app.go index 57c1edab..82fa312f 100644 --- a/app/app.go +++ b/app/app.go @@ -95,6 +95,12 @@ import ( upgradeclient "github.com/cosmos/cosmos-sdk/x/upgrade/client" upgradekeeper "github.com/cosmos/cosmos-sdk/x/upgrade/keeper" upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" + packetforward "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/router" + packetforwardkeeper "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/router/keeper" + packetforwardtypes "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/router/types" + ibchooks "github.com/cosmos/ibc-apps/modules/ibc-hooks/v7" + ibchookskeeper "github.com/cosmos/ibc-apps/modules/ibc-hooks/v7/keeper" + ibchookstypes "github.com/cosmos/ibc-apps/modules/ibc-hooks/v7/types" ica "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts" icacontroller "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/controller" icacontrollerkeeper "github.com/cosmos/ibc-go/v7/modules/apps/27-interchain-accounts/controller/keeper" @@ -235,6 +241,7 @@ var ( transfer.AppModuleBasic{}, ica.AppModuleBasic{}, ibcfee.AppModuleBasic{}, + ibchooks.AppModuleBasic{}, ) // module account permissions @@ -300,6 +307,9 @@ type WasmApp struct { TransferKeeper ibctransferkeeper.Keeper WasmKeeper wasm.Keeper AbstractAccountKeeper aakeeper.Keeper + IBCHooksKeeper *ibchookskeeper.Keeper + ContractKeeper *wasmkeeper.PermissionedKeeper + PacketForwardKeeper *packetforwardkeeper.Keeper XionKeeper xionkeeper.Keeper @@ -310,6 +320,10 @@ type WasmApp struct { ScopedIBCFeeKeeper capabilitykeeper.ScopedKeeper ScopedWasmKeeper capabilitykeeper.ScopedKeeper + // IBC middleware wrappers + Ics20WasmHooks *ibchooks.WasmHooks + HooksICS4Wrapper ibchooks.ICS4Middleware + // the module manager ModuleManager *module.Manager @@ -353,6 +367,7 @@ func NewWasmApp( ibcexported.StoreKey, ibctransfertypes.StoreKey, ibcfeetypes.StoreKey, wasm.StoreKey, icahosttypes.StoreKey, aatypes.StoreKey, icacontrollertypes.StoreKey, globalfee.StoreKey, xiontypes.StoreKey, + ibchookstypes.StoreKey, packetforwardtypes.StoreKey, ) tkeys := sdk.NewTransientStoreKeys(paramstypes.TStoreKey) @@ -560,20 +575,47 @@ func NewWasmApp( app.AccountKeeper, authtypes.NewModuleAddress(govtypes.ModuleName).String()) + // Configure the hooks keeper + hooksKeeper := ibchookskeeper.NewKeeper( + keys[ibchookstypes.StoreKey], + ) + app.IBCHooksKeeper = &hooksKeeper + + xionPrefix := sdk.GetConfig().GetBech32AccountAddrPrefix() + wasmHooks := ibchooks.NewWasmHooks(app.IBCHooksKeeper, nil, xionPrefix) // The contract keeper needs to be set later + app.Ics20WasmHooks = &wasmHooks + app.HooksICS4Wrapper = ibchooks.NewICS4Middleware( + app.IBCKeeper.ChannelKeeper, + app.Ics20WasmHooks, + ) + // IBC Fee Module keeper app.IBCFeeKeeper = ibcfeekeeper.NewKeeper( appCodec, keys[ibcfeetypes.StoreKey], - app.IBCKeeper.ChannelKeeper, // may be replaced with IBC middleware + app.HooksICS4Wrapper, // replaced with IBC middleware app.IBCKeeper.ChannelKeeper, &app.IBCKeeper.PortKeeper, app.AccountKeeper, app.BankKeeper, ) + // Initialize packet forward middleware router + app.PacketForwardKeeper = packetforwardkeeper.NewKeeper( + appCodec, + keys[packetforwardtypes.StoreKey], + app.GetSubspace(packetforwardtypes.ModuleName), + app.TransferKeeper, // Will be zero-value here. Reference is set later on with SetTransferKeeper. + app.IBCKeeper.ChannelKeeper, + app.DistrKeeper, + app.BankKeeper, + app.IBCKeeper.ChannelKeeper, + ) + // Create Transfer Keepers app.TransferKeeper = ibctransferkeeper.NewKeeper( appCodec, keys[ibctransfertypes.StoreKey], app.GetSubspace(ibctransfertypes.ModuleName), - app.IBCFeeKeeper, // ISC4 Wrapper: fee IBC middleware + // The ICS4Wrapper is replaced by the PacketForwardKeeper instead of the channel so that sending can be overridden by the middleware + app.PacketForwardKeeper, app.IBCKeeper.ChannelKeeper, &app.IBCKeeper.PortKeeper, app.AccountKeeper, @@ -581,6 +623,8 @@ func NewWasmApp( scopedTransferKeeper, ) + app.PacketForwardKeeper.SetTransferKeeper(app.TransferKeeper) + app.ICAHostKeeper = icahostkeeper.NewKeeper( appCodec, keys[icahosttypes.StoreKey], @@ -653,6 +697,14 @@ func NewWasmApp( var transferStack porttypes.IBCModule transferStack = transfer.NewIBCModule(app.TransferKeeper) transferStack = ibcfee.NewIBCMiddleware(transferStack, app.IBCFeeKeeper) + transferStack = ibchooks.NewIBCMiddleware(transferStack, &app.HooksICS4Wrapper) + transferStack = packetforward.NewIBCMiddleware( + transferStack, + app.PacketForwardKeeper, + 0, + packetforwardkeeper.DefaultForwardTransferPacketTimeoutTimestamp, + packetforwardkeeper.DefaultRefundTransferPacketTimeoutTimestamp, + ) // Create Interchain Accounts Stack // SendPacket, since it is originating from the application to core IBC: @@ -723,6 +775,8 @@ func NewWasmApp( transfer.NewAppModule(app.TransferKeeper), ibcfee.NewAppModule(app.IBCFeeKeeper), ica.NewAppModule(&app.ICAControllerKeeper, &app.ICAHostKeeper), + ibchooks.NewAppModule(app.AccountKeeper), + packetforward.NewAppModule(app.PacketForwardKeeper), crisis.NewAppModule(app.CrisisKeeper, skipGenesisInvariants, app.GetSubspace(crisistypes.ModuleName)), // always be last to make sure that it checks for all invariants and not only part of them ) @@ -748,6 +802,8 @@ func NewWasmApp( ibcfeetypes.ModuleName, wasm.ModuleName, aatypes.ModuleName, + ibchookstypes.ModuleName, + packetforwardtypes.ModuleName, ) app.ModuleManager.SetOrderEndBlockers( @@ -767,6 +823,8 @@ func NewWasmApp( ibcfeetypes.ModuleName, wasm.ModuleName, aatypes.ModuleName, + ibchookstypes.ModuleName, + packetforwardtypes.ModuleName, ) // NOTE: The genutils module must occur after staking so that pools are @@ -791,6 +849,8 @@ func NewWasmApp( // wasm after ibc transfer wasm.ModuleName, aatypes.ModuleName, + ibchookstypes.ModuleName, + packetforwardtypes.ModuleName, } app.ModuleManager.SetOrderInitGenesis(genesisModuleOrder...) app.ModuleManager.SetOrderExportGenesis(genesisModuleOrder...) @@ -1148,6 +1208,7 @@ func initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino paramsKeeper.Subspace(xiontypes.ModuleName) paramsKeeper.Subspace(wasm.ModuleName) paramsKeeper.Subspace(aatypes.ModuleName) + paramsKeeper.Subspace(packetforwardtypes.ModuleName) return paramsKeeper } diff --git a/app/upgrades/v2/constants.go b/app/upgrades/v2/constants.go index 7a3124f9..0ccdb116 100644 --- a/app/upgrades/v2/constants.go +++ b/app/upgrades/v2/constants.go @@ -6,6 +6,7 @@ import ( "github.com/burnt-labs/xion/app/upgrades" "github.com/burnt-labs/xion/x/globalfee" + ibchookstypes "github.com/cosmos/ibc-apps/modules/ibc-hooks/v7/types" aatypes "github.com/larry0x/abstract-account/x/abstractaccount/types" ) @@ -21,6 +22,7 @@ var Upgrade = upgrades.Upgrade{ Added: []string{ globalfee.ModuleName, aatypes.ModuleName, + ibchookstypes.ModuleName, }, }, } diff --git a/go.mod b/go.mod index 6513af99..36c336d0 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.19 require ( github.com/CosmWasm/wasmvm v1.2.4 // indirect - github.com/cosmos/cosmos-proto v1.0.0-beta.2 + github.com/cosmos/cosmos-proto v1.0.0-beta.3 github.com/cosmos/cosmos-sdk v0.47.3 github.com/cosmos/gogogateway v1.2.0 // indirect github.com/cosmos/gogoproto v1.4.10 @@ -33,7 +33,7 @@ require ( require ( cosmossdk.io/api v0.3.1 - cosmossdk.io/core v0.5.1 + cosmossdk.io/core v0.6.1 cosmossdk.io/depinject v1.0.0-alpha.3 cosmossdk.io/errors v1.0.0 cosmossdk.io/math v1.0.1 @@ -42,6 +42,8 @@ require ( github.com/armon/go-metrics v0.4.1 github.com/cometbft/cometbft v0.37.2 github.com/cometbft/cometbft-db v0.8.0 + github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.0.0-20230726182236-3a9d46a7c2a4 + github.com/cosmos/ibc-apps/modules/ibc-hooks/v7 v7.0.0-20230726182236-3a9d46a7c2a4 github.com/golang/mock v1.6.0 github.com/larry0x/abstract-account v0.0.0-20230708200055-2ea462db913f github.com/spf13/viper v1.16.0 @@ -58,7 +60,7 @@ require ( cosmossdk.io/log v1.1.0 // indirect filippo.io/edwards25519 v1.0.0 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect - github.com/99designs/keyring v1.2.1 // indirect + github.com/99designs/keyring v1.2.2 // indirect github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d // indirect github.com/aws/aws-sdk-go v1.44.203 // indirect github.com/beorn7/perks v1.0.1 // indirect @@ -74,7 +76,7 @@ require ( github.com/confio/ics23/go v0.9.0 // indirect github.com/cosmos/btcutil v1.0.5 // indirect github.com/cosmos/go-bip39 v1.0.0 // indirect - github.com/cosmos/ledger-cosmos-go v0.12.1 // indirect + github.com/cosmos/ledger-cosmos-go v0.12.2 // indirect github.com/cosmos/rosetta-sdk-go v0.10.0 // indirect github.com/creachadair/taskgroup v0.4.2 // indirect github.com/danieljoos/wincred v1.1.2 // indirect @@ -118,6 +120,7 @@ require ( github.com/hashicorp/hcl v1.0.0 // indirect github.com/hdevalence/ed25519consensus v0.1.0 // indirect github.com/huandu/skiplist v1.2.0 // indirect + github.com/iancoleman/orderedmap v0.2.0 // indirect github.com/improbable-eng/grpc-web v0.15.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect @@ -184,9 +187,10 @@ replace ( // See: https://github.com/cosmos/cosmos-sdk/issues/10409 github.com/gin-gonic/gin => github.com/gin-gonic/gin v1.8.1 + github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 + // pin version! 126854af5e6d has issues with the store so that queries fail github.com/syndtr/goleveldb => github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 - ) replace github.com/larry0x/abstract-account => github.com/burnt-labs/abstract-account v0.0.0-20230721042501-ef9e3f63d0cd diff --git a/go.sum b/go.sum index ae2de133..916748cf 100644 --- a/go.sum +++ b/go.sum @@ -190,8 +190,8 @@ cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1V cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= cosmossdk.io/api v0.3.1 h1:NNiOclKRR0AOlO4KIqeaG6PS6kswOMhHD0ir0SscNXE= cosmossdk.io/api v0.3.1/go.mod h1:DfHfMkiNA2Uhy8fj0JJlOCYOBp4eWUUJ1te5zBGNyIw= -cosmossdk.io/core v0.5.1 h1:vQVtFrIYOQJDV3f7rw4pjjVqc1id4+mE0L9hHP66pyI= -cosmossdk.io/core v0.5.1/go.mod h1:KZtwHCLjcFuo0nmDc24Xy6CRNEL9Vl/MeimQ2aC7NLE= +cosmossdk.io/core v0.6.1 h1:OBy7TI2W+/gyn2z40vVvruK3di+cAluinA6cybFbE7s= +cosmossdk.io/core v0.6.1/go.mod h1:g3MMBCBXtxbDWBURDVnJE7XML4BG5qENhs0gzkcpuFA= cosmossdk.io/depinject v1.0.0-alpha.3 h1:6evFIgj//Y3w09bqOUOzEpFj5tsxBqdc5CfkO7z+zfw= cosmossdk.io/depinject v1.0.0-alpha.3/go.mod h1:eRbcdQ7MRpIPEM5YUJh8k97nxHpYbc3sMUnEtt8HPWU= cosmossdk.io/errors v1.0.0 h1:nxF07lmlBbB8NKQhtJ+sJm6ef5uV1XkvPXG2bUntb04= @@ -323,8 +323,8 @@ github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSV github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= 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-proto v1.0.0-beta.2 h1:X3OKvWgK9Gsejo0F1qs5l8Qn6xJV/AzgIWR2wZ8Nua8= -github.com/cosmos/cosmos-proto v1.0.0-beta.2/go.mod h1:+XRCLJ14pr5HFEHIUcn51IKXD1Fy3rkEQqt4WqmN4V0= +github.com/cosmos/cosmos-proto v1.0.0-beta.3 h1:VitvZ1lPORTVxkmF2fAp3IiA61xVwArQYKXTdEcpW6o= +github.com/cosmos/cosmos-proto v1.0.0-beta.3/go.mod h1:t8IASdLaAq+bbHbjq4p960BvcTqtwuAxid3b/2rOD6I= github.com/cosmos/cosmos-sdk v0.47.3 h1:r0hGmZoAzP2D+MaPaFGHwAaTdFQq3pNpHaUp1BsffbM= github.com/cosmos/cosmos-sdk v0.47.3/go.mod h1:c4OfLdAykA9zsj1CqrxBRqXzVz48I++JSvIMPSPcEmk= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= @@ -337,14 +337,18 @@ github.com/cosmos/gogoproto v1.4.10 h1:QH/yT8X+c0F4ZDacDv3z+xE3WU1P1Z3wQoLMBRJoK github.com/cosmos/gogoproto v1.4.10/go.mod h1:3aAZzeRWpAwr+SS/LLkICX2/kDFyaYVzckBDzygIxek= github.com/cosmos/iavl v0.20.0 h1:fTVznVlepH0KK8NyKq8w+U7c2L6jofa27aFX6YGlm38= github.com/cosmos/iavl v0.20.0/go.mod h1:WO7FyvaZJoH65+HFOsDir7xU9FWk2w9cHXNW1XHcl7A= +github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.0.0-20230726182236-3a9d46a7c2a4 h1:MR2xuH8zn6j79CPALQFSKFJKEASMWClUUvB764XKLfw= +github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.0.0-20230726182236-3a9d46a7c2a4/go.mod h1:fctjEnz9xaBFOlmYYPdKL8Hs1Y3GUKilSwsJdqBb5QU= +github.com/cosmos/ibc-apps/modules/ibc-hooks/v7 v7.0.0-20230726182236-3a9d46a7c2a4 h1:NuFmpHnENcTtZDEQf2vZzZluk5rQl3f7J4tqo9FlH/c= +github.com/cosmos/ibc-apps/modules/ibc-hooks/v7 v7.0.0-20230726182236-3a9d46a7c2a4/go.mod h1:JwHFbo1oX/ht4fPpnPvmhZr+dCkYK1Vihw+vZE9umR4= github.com/cosmos/ibc-go/v7 v7.2.0 h1:dx0DLUl7rxdyZ8NiT6UsrbzKOJx/w7s+BOaewFRH6cg= github.com/cosmos/ibc-go/v7 v7.2.0/go.mod h1:OOcjKIRku/j1Xs1RgKK0yvKRrJ5iFuZYMetR1n3yMlc= github.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZDM= github.com/cosmos/ics23/go v0.10.0/go.mod h1:ZfJSmng/TBNTBkFemHHHj5YY7VAU/MBU980F4VU1NG0= github.com/cosmos/keyring v1.2.0 h1:8C1lBP9xhImmIabyXW4c3vFjjLiBdGCmfLUfeZlV1Yo= github.com/cosmos/keyring v1.2.0/go.mod h1:fc+wB5KTk9wQ9sDx0kFXB3A0MaeGHM9AwRStKOQ5vOA= -github.com/cosmos/ledger-cosmos-go v0.12.1 h1:sMBxza5p/rNK/06nBSNmsI/WDqI0pVJFVNihy1Y984w= -github.com/cosmos/ledger-cosmos-go v0.12.1/go.mod h1:dhO6kj+Y+AHIOgAe4L9HL/6NDdyyth4q238I9yFpD2g= +github.com/cosmos/ledger-cosmos-go v0.12.2 h1:/XYaBlE2BJxtvpkHiBm97gFGSGmYGKunKyF3nNqAXZA= +github.com/cosmos/ledger-cosmos-go v0.12.2/go.mod h1:ZcqYgnfNJ6lAXe4HPtWgarNEY+B74i+2/8MhZw4ziiI= github.com/cosmos/rosetta-sdk-go v0.10.0 h1:E5RhTruuoA7KTIXUcMicL76cffyeoyvNybzUGSKFTcM= github.com/cosmos/rosetta-sdk-go v0.10.0/go.mod h1:SImAZkb96YbwvoRkzSMQB6noNJXFgWl/ENIznEoYQI4= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= @@ -456,12 +460,6 @@ github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFG github.com/gogo/googleapis v1.4.1-0.20201022092350-68b0159b7869/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= 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.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= -github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -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.4.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v1.1.0 h1:/d3pCKDPWNnvIWe0vVUpNP32qc8U3PDVxySP/y360qE= @@ -650,6 +648,8 @@ github.com/huandu/go-assert v1.1.5/go.mod h1:yOLvuqZwmcHIC5rIzrBhT7D3Q9c3GFnd0Jr github.com/huandu/skiplist v1.2.0 h1:gox56QD77HzSC0w+Ws3MH3iie755GBJU1OER3h5VsYw= github.com/huandu/skiplist v1.2.0/go.mod h1:7v3iFjLcSAzO4fN5B8dvebvo/qsfumiLiDXMrPiHF9w= github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= +github.com/iancoleman/orderedmap v0.2.0 h1:sq1N/TFpYH++aViPcaKjys3bDClUEU7s5B+z6jq8pNA= +github.com/iancoleman/orderedmap v0.2.0/go.mod h1:N0Wam8K1arqPXNWjMo21EXnBPOPp36vB07FNRdD2geA= 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/improbable-eng/grpc-web v0.15.0 h1:BN+7z6uNXZ1tQGcNAuaU1YjsLTApzkjt2tzCixLaUPQ= @@ -680,8 +680,6 @@ github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/X github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= 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.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= -github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= @@ -865,6 +863,8 @@ github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqn 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/regen-network/gocuke v0.6.2 h1:pHviZ0kKAq2U2hN2q3smKNxct6hS0mGByFMHGnWA97M= +github.com/regen-network/protobuf v1.3.3-alpha.regen.1 h1:OHEc+q5iIAXpqiqFKeLpu5NwTIkVXUs48vFMwzqpqY4= +github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= 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= @@ -1280,10 +1280,8 @@ golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxb 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/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/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-20181030221726-6c7e314b6563/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= @@ -1434,6 +1432,7 @@ google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfG 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-20200324203455-a04cca1dde73/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= diff --git a/integration_tests/go.mod b/integration_tests/go.mod index a613906c..70c92f8b 100644 --- a/integration_tests/go.mod +++ b/integration_tests/go.mod @@ -22,7 +22,7 @@ require ( cloud.google.com/go/iam v1.1.0 // indirect cloud.google.com/go/storage v1.30.1 // indirect cosmossdk.io/api v0.3.1 // indirect - cosmossdk.io/core v0.5.1 // indirect + cosmossdk.io/core v0.6.1 // indirect cosmossdk.io/depinject v1.0.0-alpha.3 // indirect cosmossdk.io/errors v1.0.0 // indirect cosmossdk.io/log v1.1.1-0.20230704160919-88f2c830b0ca // indirect @@ -55,13 +55,13 @@ require ( github.com/cometbft/cometbft-db v0.8.0 // indirect github.com/confio/ics23/go v0.9.0 // indirect github.com/cosmos/btcutil v1.0.5 // indirect - github.com/cosmos/cosmos-proto v1.0.0-beta.2 // indirect + github.com/cosmos/cosmos-proto v1.0.0-beta.3 // indirect github.com/cosmos/go-bip39 v1.0.0 // indirect github.com/cosmos/gogogateway v1.2.0 // indirect github.com/cosmos/gogoproto v1.4.10 // indirect github.com/cosmos/iavl v0.20.0 // indirect github.com/cosmos/ics23/go v0.10.0 // indirect - github.com/cosmos/ledger-cosmos-go v0.12.1 // indirect + github.com/cosmos/ledger-cosmos-go v0.12.2 // indirect github.com/cosmos/rosetta-sdk-go v0.10.0 // indirect github.com/creachadair/taskgroup v0.4.2 // indirect github.com/danieljoos/wincred v1.1.2 // indirect diff --git a/integration_tests/go.sum b/integration_tests/go.sum index 26531839..55cafa64 100644 --- a/integration_tests/go.sum +++ b/integration_tests/go.sum @@ -191,6 +191,7 @@ cosmossdk.io/api v0.3.1 h1:NNiOclKRR0AOlO4KIqeaG6PS6kswOMhHD0ir0SscNXE= cosmossdk.io/api v0.3.1/go.mod h1:DfHfMkiNA2Uhy8fj0JJlOCYOBp4eWUUJ1te5zBGNyIw= cosmossdk.io/core v0.5.1 h1:vQVtFrIYOQJDV3f7rw4pjjVqc1id4+mE0L9hHP66pyI= cosmossdk.io/core v0.5.1/go.mod h1:KZtwHCLjcFuo0nmDc24Xy6CRNEL9Vl/MeimQ2aC7NLE= +cosmossdk.io/core v0.6.1/go.mod h1:g3MMBCBXtxbDWBURDVnJE7XML4BG5qENhs0gzkcpuFA= cosmossdk.io/depinject v1.0.0-alpha.3 h1:6evFIgj//Y3w09bqOUOzEpFj5tsxBqdc5CfkO7z+zfw= cosmossdk.io/depinject v1.0.0-alpha.3/go.mod h1:eRbcdQ7MRpIPEM5YUJh8k97nxHpYbc3sMUnEtt8HPWU= cosmossdk.io/errors v1.0.0 h1:nxF07lmlBbB8NKQhtJ+sJm6ef5uV1XkvPXG2bUntb04= @@ -342,6 +343,7 @@ 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-proto v1.0.0-beta.2 h1:X3OKvWgK9Gsejo0F1qs5l8Qn6xJV/AzgIWR2wZ8Nua8= github.com/cosmos/cosmos-proto v1.0.0-beta.2/go.mod h1:+XRCLJ14pr5HFEHIUcn51IKXD1Fy3rkEQqt4WqmN4V0= +github.com/cosmos/cosmos-proto v1.0.0-beta.3/go.mod h1:t8IASdLaAq+bbHbjq4p960BvcTqtwuAxid3b/2rOD6I= github.com/cosmos/cosmos-sdk v0.47.4 h1:FVUpEprm58nMmBX4xkRdMDaIG5Nr4yy92HZAfGAw9bg= github.com/cosmos/cosmos-sdk v0.47.4/go.mod h1:R5n+uM7vguVPFap4pgkdvQCT1nVo/OtPwrlAU40rvok= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= @@ -360,6 +362,7 @@ github.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZD github.com/cosmos/ics23/go v0.10.0/go.mod h1:ZfJSmng/TBNTBkFemHHHj5YY7VAU/MBU980F4VU1NG0= github.com/cosmos/ledger-cosmos-go v0.12.1 h1:sMBxza5p/rNK/06nBSNmsI/WDqI0pVJFVNihy1Y984w= github.com/cosmos/ledger-cosmos-go v0.12.1/go.mod h1:dhO6kj+Y+AHIOgAe4L9HL/6NDdyyth4q238I9yFpD2g= +github.com/cosmos/ledger-cosmos-go v0.12.2/go.mod h1:ZcqYgnfNJ6lAXe4HPtWgarNEY+B74i+2/8MhZw4ziiI= github.com/cosmos/rosetta-sdk-go v0.10.0 h1:E5RhTruuoA7KTIXUcMicL76cffyeoyvNybzUGSKFTcM= github.com/cosmos/rosetta-sdk-go v0.10.0/go.mod h1:SImAZkb96YbwvoRkzSMQB6noNJXFgWl/ENIznEoYQI4= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= From 83c32efef15efacac7ee71b6b8788ae71b352b80 Mon Sep 17 00:00:00 2001 From: Ash Date: Mon, 31 Jul 2023 14:33:15 +0200 Subject: [PATCH 138/501] set contract keeper --- app/app.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/app.go b/app/app.go index 82fa312f..5ccb3fc2 100644 --- a/app/app.go +++ b/app/app.go @@ -242,6 +242,7 @@ var ( ica.AppModuleBasic{}, ibcfee.AppModuleBasic{}, ibchooks.AppModuleBasic{}, + packetforward.AppModuleBasic{}, ) // module account permissions @@ -917,6 +918,10 @@ func NewWasmApp( app.ScopedICAHostKeeper = scopedICAHostKeeper app.ScopedICAControllerKeeper = scopedICAControllerKeeper + // set the contract keeper for the Ics20WasmHooks + app.ContractKeeper = wasmkeeper.NewDefaultPermissionKeeper(app.WasmKeeper) + app.Ics20WasmHooks.ContractKeeper = &app.WasmKeeper + // In v0.46, the SDK introduces _postHandlers_. PostHandlers are like // antehandlers, but are run _after_ the `runMsgs` execution. They are also // defined as a chain, and have the same signature as antehandlers. From 0f89986cc0d58c8c754ed6bffb96a1856670283e Mon Sep 17 00:00:00 2001 From: Ash Date: Mon, 31 Jul 2023 14:44:42 +0200 Subject: [PATCH 139/501] clean up test deps --- integration_tests/go.sum | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/integration_tests/go.sum b/integration_tests/go.sum index 55cafa64..2c74455b 100644 --- a/integration_tests/go.sum +++ b/integration_tests/go.sum @@ -189,8 +189,7 @@ cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1V cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= cosmossdk.io/api v0.3.1 h1:NNiOclKRR0AOlO4KIqeaG6PS6kswOMhHD0ir0SscNXE= cosmossdk.io/api v0.3.1/go.mod h1:DfHfMkiNA2Uhy8fj0JJlOCYOBp4eWUUJ1te5zBGNyIw= -cosmossdk.io/core v0.5.1 h1:vQVtFrIYOQJDV3f7rw4pjjVqc1id4+mE0L9hHP66pyI= -cosmossdk.io/core v0.5.1/go.mod h1:KZtwHCLjcFuo0nmDc24Xy6CRNEL9Vl/MeimQ2aC7NLE= +cosmossdk.io/core v0.6.1 h1:OBy7TI2W+/gyn2z40vVvruK3di+cAluinA6cybFbE7s= cosmossdk.io/core v0.6.1/go.mod h1:g3MMBCBXtxbDWBURDVnJE7XML4BG5qENhs0gzkcpuFA= cosmossdk.io/depinject v1.0.0-alpha.3 h1:6evFIgj//Y3w09bqOUOzEpFj5tsxBqdc5CfkO7z+zfw= cosmossdk.io/depinject v1.0.0-alpha.3/go.mod h1:eRbcdQ7MRpIPEM5YUJh8k97nxHpYbc3sMUnEtt8HPWU= @@ -341,8 +340,7 @@ github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSV github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= 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-proto v1.0.0-beta.2 h1:X3OKvWgK9Gsejo0F1qs5l8Qn6xJV/AzgIWR2wZ8Nua8= -github.com/cosmos/cosmos-proto v1.0.0-beta.2/go.mod h1:+XRCLJ14pr5HFEHIUcn51IKXD1Fy3rkEQqt4WqmN4V0= +github.com/cosmos/cosmos-proto v1.0.0-beta.3 h1:VitvZ1lPORTVxkmF2fAp3IiA61xVwArQYKXTdEcpW6o= github.com/cosmos/cosmos-proto v1.0.0-beta.3/go.mod h1:t8IASdLaAq+bbHbjq4p960BvcTqtwuAxid3b/2rOD6I= github.com/cosmos/cosmos-sdk v0.47.4 h1:FVUpEprm58nMmBX4xkRdMDaIG5Nr4yy92HZAfGAw9bg= github.com/cosmos/cosmos-sdk v0.47.4/go.mod h1:R5n+uM7vguVPFap4pgkdvQCT1nVo/OtPwrlAU40rvok= @@ -360,8 +358,7 @@ github.com/cosmos/ibc-go/v7 v7.2.0 h1:dx0DLUl7rxdyZ8NiT6UsrbzKOJx/w7s+BOaewFRH6c github.com/cosmos/ibc-go/v7 v7.2.0/go.mod h1:OOcjKIRku/j1Xs1RgKK0yvKRrJ5iFuZYMetR1n3yMlc= github.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZDM= github.com/cosmos/ics23/go v0.10.0/go.mod h1:ZfJSmng/TBNTBkFemHHHj5YY7VAU/MBU980F4VU1NG0= -github.com/cosmos/ledger-cosmos-go v0.12.1 h1:sMBxza5p/rNK/06nBSNmsI/WDqI0pVJFVNihy1Y984w= -github.com/cosmos/ledger-cosmos-go v0.12.1/go.mod h1:dhO6kj+Y+AHIOgAe4L9HL/6NDdyyth4q238I9yFpD2g= +github.com/cosmos/ledger-cosmos-go v0.12.2 h1:/XYaBlE2BJxtvpkHiBm97gFGSGmYGKunKyF3nNqAXZA= github.com/cosmos/ledger-cosmos-go v0.12.2/go.mod h1:ZcqYgnfNJ6lAXe4HPtWgarNEY+B74i+2/8MhZw4ziiI= github.com/cosmos/rosetta-sdk-go v0.10.0 h1:E5RhTruuoA7KTIXUcMicL76cffyeoyvNybzUGSKFTcM= github.com/cosmos/rosetta-sdk-go v0.10.0/go.mod h1:SImAZkb96YbwvoRkzSMQB6noNJXFgWl/ENIznEoYQI4= From 81814ae190e8f20467e056fa7e81602746a0783d Mon Sep 17 00:00:00 2001 From: Ash Date: Tue, 1 Aug 2023 18:14:21 +0200 Subject: [PATCH 140/501] add pfm to store upgrade --- app/upgrades/v2/constants.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/upgrades/v2/constants.go b/app/upgrades/v2/constants.go index 0ccdb116..8c206a65 100644 --- a/app/upgrades/v2/constants.go +++ b/app/upgrades/v2/constants.go @@ -2,6 +2,7 @@ package v2 import ( store "github.com/cosmos/cosmos-sdk/store/types" + packetforwardtypes "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/router/types" "github.com/burnt-labs/xion/app/upgrades" @@ -23,6 +24,7 @@ var Upgrade = upgrades.Upgrade{ globalfee.ModuleName, aatypes.ModuleName, ibchookstypes.ModuleName, + packetforwardtypes.ModuleName, }, }, } From e871738ed64e7379e43721a0dec6446aeaeede9e Mon Sep 17 00:00:00 2001 From: Ash Date: Tue, 1 Aug 2023 18:21:04 +0200 Subject: [PATCH 141/501] ibchooks requires storekey for upgrade --- app/upgrades/v2/constants.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/upgrades/v2/constants.go b/app/upgrades/v2/constants.go index 8c206a65..9963d6d0 100644 --- a/app/upgrades/v2/constants.go +++ b/app/upgrades/v2/constants.go @@ -23,7 +23,7 @@ var Upgrade = upgrades.Upgrade{ Added: []string{ globalfee.ModuleName, aatypes.ModuleName, - ibchookstypes.ModuleName, + ibchookstypes.StoreKey, packetforwardtypes.ModuleName, }, }, From ee61f6e9483b24b9ae0d3942db2e5916e5cd5b67 Mon Sep 17 00:00:00 2001 From: Ash Date: Tue, 1 Aug 2023 18:40:07 +0200 Subject: [PATCH 142/501] change send test to repeatedly check balance, prevent race condition --- integration_tests/send_test.go | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/integration_tests/send_test.go b/integration_tests/send_test.go index 11304a36..9390492e 100644 --- a/integration_tests/send_test.go +++ b/integration_tests/send_test.go @@ -63,9 +63,15 @@ func TestXionSendPlatformFee(t *testing.T) { recipientKeyAddress, fmt.Sprintf("%d%s", 100, xion.Config().Denom), ) require.NoError(t, err) - balance, err := xion.GetBalance(ctx, recipientKeyAddress, xion.Config().Denom) - require.NoError(t, err) - require.Equal(t, uint64(100), uint64(balance)) + + require.Eventuallyf(t, func() bool { + balance, err := xion.GetBalance(ctx, recipientKeyAddress, xion.Config().Denom) + require.NoError(t, err) + return uint64(balance) == uint64(100) + }, + time.Second*20, + time.Second*6, + "balance never correctly changed") // step 2: update the platform percentage to 5% config := types.GetConfig() From 3d8e774e08e97ae43ff8630e19eda0863d7f5f0d Mon Sep 17 00:00:00 2001 From: Ash Date: Tue, 1 Aug 2023 18:45:04 +0200 Subject: [PATCH 143/501] remove race condition from sendtest --- integration_tests/send_test.go | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/integration_tests/send_test.go b/integration_tests/send_test.go index 11304a36..9390492e 100644 --- a/integration_tests/send_test.go +++ b/integration_tests/send_test.go @@ -63,9 +63,15 @@ func TestXionSendPlatformFee(t *testing.T) { recipientKeyAddress, fmt.Sprintf("%d%s", 100, xion.Config().Denom), ) require.NoError(t, err) - balance, err := xion.GetBalance(ctx, recipientKeyAddress, xion.Config().Denom) - require.NoError(t, err) - require.Equal(t, uint64(100), uint64(balance)) + + require.Eventuallyf(t, func() bool { + balance, err := xion.GetBalance(ctx, recipientKeyAddress, xion.Config().Denom) + require.NoError(t, err) + return uint64(balance) == uint64(100) + }, + time.Second*20, + time.Second*6, + "balance never correctly changed") // step 2: update the platform percentage to 5% config := types.GetConfig() From 643da2757d2d1ea9dc2ed9dd830c07637dacfa4a Mon Sep 17 00:00:00 2001 From: Ash Date: Tue, 1 Aug 2023 19:35:02 +0200 Subject: [PATCH 144/501] add xion module --- app/upgrades/v2/constants.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/upgrades/v2/constants.go b/app/upgrades/v2/constants.go index 9963d6d0..3f3c1fde 100644 --- a/app/upgrades/v2/constants.go +++ b/app/upgrades/v2/constants.go @@ -1,6 +1,7 @@ package v2 import ( + xiontypes "github.com/burnt-labs/xion/x/xion/types" store "github.com/cosmos/cosmos-sdk/store/types" packetforwardtypes "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/router/types" @@ -25,6 +26,7 @@ var Upgrade = upgrades.Upgrade{ aatypes.ModuleName, ibchookstypes.StoreKey, packetforwardtypes.ModuleName, + xiontypes.ModuleName, }, }, } From 5d6cf3dc9d052ed7a418fb2f2788511dce38beb3 Mon Sep 17 00:00:00 2001 From: Ash Date: Tue, 1 Aug 2023 23:07:29 +0200 Subject: [PATCH 145/501] remove tendermint replace --- go.mod | 2 -- 1 file changed, 2 deletions(-) diff --git a/go.mod b/go.mod index 2087effb..dc2a559e 100644 --- a/go.mod +++ b/go.mod @@ -188,8 +188,6 @@ replace ( github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 - github.com/tendermint/tendermint => github.com/cometbft/cometbft v0.37.2 - github.com/notional-labs/fee-abstraction/v2 => github.com/osmosis-labs/fee-abstraction/v2 v2.0.0-20230718172125-87710739dbbc // pin version! 126854af5e6d has issues with the store so that queries fail From 0e423a98b14d939f0ba14c7b7805ffd01b79380d Mon Sep 17 00:00:00 2001 From: Ash Date: Tue, 1 Aug 2023 23:10:42 +0200 Subject: [PATCH 146/501] gomod cleanup --- go.mod | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/go.mod b/go.mod index dc2a559e..558c4f12 100644 --- a/go.mod +++ b/go.mod @@ -69,7 +69,7 @@ require ( github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect github.com/cenkalti/backoff/v4 v4.1.3 // indirect github.com/cespare/xxhash v1.1.0 // indirect - github.com/cespare/xxhash/v2 v2.2.0 // indirectg + github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/chzyer/readline v1.5.1 // indirect github.com/cockroachdb/apd/v2 v2.0.2 // indirect github.com/coinbase/rosetta-sdk-go/types v1.0.0 // indirect @@ -192,5 +192,4 @@ replace ( // pin version! 126854af5e6d has issues with the store so that queries fail github.com/syndtr/goleveldb => github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 - ) From 62ec6586a34dbd5502b5c39decca2a3901c87790 Mon Sep 17 00:00:00 2001 From: Ash Date: Wed, 2 Aug 2023 17:30:01 +0200 Subject: [PATCH 147/501] currently blocked on v4 ibcgo --- app/app.go | 6 +++--- go.mod | 3 +++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/app/app.go b/app/app.go index 87d07996..c7e0747c 100644 --- a/app/app.go +++ b/app/app.go @@ -3,9 +3,6 @@ package app import ( "encoding/json" "fmt" - "github.com/notional-labs/fee-abstraction/v2/x/feeabs" - feeabskeeper "github.com/notional-labs/fee-abstraction/v2/x/feeabs/keeper" - feeabstypes "github.com/notional-labs/fee-abstraction/v2/x/feeabs/types" "io" "os" "path/filepath" @@ -123,6 +120,9 @@ import ( aa "github.com/larry0x/abstract-account/x/abstractaccount" aakeeper "github.com/larry0x/abstract-account/x/abstractaccount/keeper" aatypes "github.com/larry0x/abstract-account/x/abstractaccount/types" + "github.com/notional-labs/fee-abstraction/v2/x/feeabs" + feeabskeeper "github.com/notional-labs/fee-abstraction/v2/x/feeabs/keeper" + feeabstypes "github.com/notional-labs/fee-abstraction/v2/x/feeabs/types" "github.com/spf13/cast" diff --git a/go.mod b/go.mod index 558c4f12..d0eafd08 100644 --- a/go.mod +++ b/go.mod @@ -190,6 +190,9 @@ replace ( github.com/notional-labs/fee-abstraction/v2 => github.com/osmosis-labs/fee-abstraction/v2 v2.0.0-20230718172125-87710739dbbc + github.com/tendermint/tendermint => github.com/informalsystems/tendermint v0.34.24 + + // pin version! 126854af5e6d has issues with the store so that queries fail github.com/syndtr/goleveldb => github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 ) From fea049d291dde5dd76d55aca6312d59a0aee414d Mon Sep 17 00:00:00 2001 From: Ash Date: Thu, 3 Aug 2023 15:15:24 +0200 Subject: [PATCH 148/501] we have tags now, generate version dynamically --- Makefile | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Makefile b/Makefile index a507f8eb..d8d61cd4 100644 --- a/Makefile +++ b/Makefile @@ -1,8 +1,7 @@ #!/usr/bin/make -f PACKAGES_SIMTEST=$(shell go list ./... | grep '/simulation') -#VERSION := $(shell echo $(shell git describe --tags) | sed 's/^v//') -VERSION := 0.1.0 +VERSION := $(shell echo $(shell git describe --tags) | sed 's/^v//') COMMIT := $(shell git log -1 --format='%H') LEDGER_ENABLED ?= true SDK_PACK := $(shell go list -m github.com/cosmos/cosmos-sdk | sed 's/ /\@/g') From 0aa385aa19db501c7b86f244bc6dcd49bc61ee77 Mon Sep 17 00:00:00 2001 From: Ash Date: Thu, 3 Aug 2023 15:22:53 +0200 Subject: [PATCH 149/501] upgrade test version target --- integration_tests/upgrade_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integration_tests/upgrade_test.go b/integration_tests/upgrade_test.go index 9cfa24dd..84327c38 100644 --- a/integration_tests/upgrade_test.go +++ b/integration_tests/upgrade_test.go @@ -29,7 +29,7 @@ const ( As of July 25 2023 this is the necceary process to run this test, this is due to the fact that AWS & docker-hub auto deleting old images, therefore you might lose what the version currently running is image wise current-testnet: 2722f0fb1234db97e9bf9b98f744675eb8fb1b26 -upgrade-version: 990da9d6e272552ac73e1abef81418f294838b03 +upgrade-version: fea049d291dde5dd76d55aca6312d59a0aee414d */ func TestXionUpgradeIBC(t *testing.T) { CosmosChainUpgradeIBCTest(t, "xion", "current", "xion", "upgrade", "v0.3.0") From 7a54b88550772a37ab5cc371146aab3e5f561e7b Mon Sep 17 00:00:00 2001 From: Ash Date: Thu, 3 Aug 2023 16:01:55 +0200 Subject: [PATCH 150/501] updates for sdk47 --- app/app.go | 6 +- go.mod | 8 +- go.sum | 245 +---------------------------------------------------- 3 files changed, 10 insertions(+), 249 deletions(-) diff --git a/app/app.go b/app/app.go index c7e0747c..83a6b8f0 100644 --- a/app/app.go +++ b/app/app.go @@ -120,9 +120,9 @@ import ( aa "github.com/larry0x/abstract-account/x/abstractaccount" aakeeper "github.com/larry0x/abstract-account/x/abstractaccount/keeper" aatypes "github.com/larry0x/abstract-account/x/abstractaccount/types" - "github.com/notional-labs/fee-abstraction/v2/x/feeabs" - feeabskeeper "github.com/notional-labs/fee-abstraction/v2/x/feeabs/keeper" - feeabstypes "github.com/notional-labs/fee-abstraction/v2/x/feeabs/types" + "github.com/notional-labs/fee-abstraction/v4/x/feeabs" + feeabskeeper "github.com/notional-labs/fee-abstraction/v4/x/feeabs/keeper" + feeabstypes "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" "github.com/spf13/cast" diff --git a/go.mod b/go.mod index d0eafd08..b5f48665 100644 --- a/go.mod +++ b/go.mod @@ -49,7 +49,6 @@ require ( sigs.k8s.io/yaml v1.3.0 ) -require github.com/notional-labs/fee-abstraction/v2 v2.1.1 // indirect require ( cloud.google.com/go v0.110.0 // indirect @@ -139,6 +138,7 @@ require ( github.com/mitchellh/go-testing-interface v1.14.1 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/mtibben/percent v0.2.1 // indirect + github.com/notional-labs/fee-abstraction/v4 v4.0.0-20230803105745-1ff2732e1405 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect github.com/pelletier/go-toml/v2 v2.0.8 // indirect github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08 // indirect @@ -188,11 +188,11 @@ replace ( github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 - github.com/notional-labs/fee-abstraction/v2 => github.com/osmosis-labs/fee-abstraction/v2 v2.0.0-20230718172125-87710739dbbc - - github.com/tendermint/tendermint => github.com/informalsystems/tendermint v0.34.24 + github.com/strangelove-ventures/packet-forward-middleware/v7 => github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.0.1 // pin version! 126854af5e6d has issues with the store so that queries fail github.com/syndtr/goleveldb => github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 + + github.com/tendermint/tendermint => github.com/informalsystems/tendermint v0.34.24 ) diff --git a/go.sum b/go.sum index 1ffc2793..989e3fd7 100644 --- a/go.sum +++ b/go.sum @@ -32,7 +32,6 @@ cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w9 cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= -cloud.google.com/go v0.110.0 h1:Zc8gqp3+a9/Eyph2KDmcGaPtbKRIoqq4YTlL4NMD0Ys= cloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY= cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= @@ -70,9 +69,7 @@ cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= -cloud.google.com/go/compute v1.19.1 h1:am86mquDUgjGNWxiGn+5PGLbmgiWXlE/yNWpIpNvuXY= cloud.google.com/go/compute v1.19.1/go.mod h1:6ylj3a05WF8leseCdIf77NK0g1ey+nj5IKd5/kvShxE= -cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= cloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4= @@ -111,13 +108,11 @@ cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y97 cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= -cloud.google.com/go/iam v0.13.0 h1:+CmB+K0J/33d0zSQ9SlFWUeCCEn5XJA0ZMZ3pHE9u8k= cloud.google.com/go/iam v0.13.0/go.mod h1:ljOg+rcNfzZ5d6f1nAUJ8ZIxOaZUVoS14bKCtaLZ/D0= cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= -cloud.google.com/go/longrunning v0.4.1 h1:v+yFJOfKC3yZdY6ZUI933pIYdhyhV8S3NpWrXWmg7jM= cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= @@ -175,7 +170,6 @@ cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3f cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= -cloud.google.com/go/storage v1.29.0 h1:6weCgzRvMg7lzuUurI4697AqIRPU1SvzHhynwpW31jI= cloud.google.com/go/storage v1.29.0/go.mod h1:4puEjyTKnku6gfKoTfNOU/W+a9JyuVNxjpS5GBrB8h4= cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= @@ -188,47 +182,28 @@ cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xX cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= -cosmossdk.io/api v0.3.1 h1:NNiOclKRR0AOlO4KIqeaG6PS6kswOMhHD0ir0SscNXE= cosmossdk.io/api v0.3.1/go.mod h1:DfHfMkiNA2Uhy8fj0JJlOCYOBp4eWUUJ1te5zBGNyIw= -cosmossdk.io/core v0.5.1 h1:vQVtFrIYOQJDV3f7rw4pjjVqc1id4+mE0L9hHP66pyI= cosmossdk.io/core v0.5.1/go.mod h1:KZtwHCLjcFuo0nmDc24Xy6CRNEL9Vl/MeimQ2aC7NLE= -cosmossdk.io/depinject v1.0.0-alpha.3 h1:6evFIgj//Y3w09bqOUOzEpFj5tsxBqdc5CfkO7z+zfw= cosmossdk.io/depinject v1.0.0-alpha.3/go.mod h1:eRbcdQ7MRpIPEM5YUJh8k97nxHpYbc3sMUnEtt8HPWU= -cosmossdk.io/errors v1.0.0 h1:nxF07lmlBbB8NKQhtJ+sJm6ef5uV1XkvPXG2bUntb04= cosmossdk.io/errors v1.0.0/go.mod h1:+hJZLuhdDE0pYN8HkOrVNwrIOYvUGnn6+4fjnJs/oV0= -cosmossdk.io/log v1.1.0 h1:v0ogPHYeTzPcBTcPR1A3j1hkei4pZama8kz8LKlCMv0= cosmossdk.io/log v1.1.0/go.mod h1:6zjroETlcDs+mm62gd8Ig7mZ+N+fVOZS91V17H+M4N4= -cosmossdk.io/math v1.0.1 h1:Qx3ifyOPaMLNH/89WeZFH268yCvU4xEcnPLu3sJqPPg= cosmossdk.io/math v1.0.1/go.mod h1:Ygz4wBHrgc7g0N+8+MrnTfS9LLn9aaTGa9hKopuym5k= -cosmossdk.io/tools/rosetta v0.2.1 h1:ddOMatOH+pbxWbrGJKRAawdBkPYLfKXutK9IETnjYxw= cosmossdk.io/tools/rosetta v0.2.1/go.mod h1:Pqdc1FdvkNV3LcNIkYWt2RQY6IP1ge6YWZk8MhhO9Hw= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek= filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= -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/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= -github.com/CosmWasm/wasmd v0.40.1 h1:LxbO78t/6S8TkeQlUrJ0m5O87HtAwLx4RGHq3rdrOEU= github.com/CosmWasm/wasmd v0.40.1/go.mod h1:6EOwnv7MpuFaEqxcUOdFV9i4yvrdOciaY6VQ1o7A3yg= -github.com/CosmWasm/wasmvm v1.2.4 h1:6OfeZuEcEH/9iqwrg2pkeVtDCkMoj9U6PpKtcrCyVrQ= github.com/CosmWasm/wasmvm v1.2.4/go.mod h1:vW/E3h8j9xBQs9bCoijDuawKo9kCtxOaS8N8J7KFtkc= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= -github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= -github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= -github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= -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/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= -github.com/alecthomas/participle/v2 v2.0.0-alpha7 h1:cK4vjj0VSgb3lN1nuKA5F7dw+1s1pWBe5bx7nNCnN+c= 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= @@ -240,51 +215,35 @@ github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= -github.com/armon/go-metrics v0.4.1 h1:hR91U9KYmb6bLBYLQjyM+3j+rcd/UhE+G78SFnF8gJA= 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/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.44.122/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= -github.com/aws/aws-sdk-go v1.44.203 h1:pcsP805b9acL3wUqa4JR2vg1k2wnItkDYNvfmcy6F+U= github.com/aws/aws-sdk-go v1.44.203/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= 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/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas= github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4= 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/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= -github.com/btcsuite/btcd/btcutil v1.1.2 h1:XLMbX8JQEiwMcYft2EGi8zPUkoa0abKIU6/BJSRsjzQ= -github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= -github.com/bufbuild/protocompile v0.4.0 h1:LbFKd2XowZvQ/kajzguUp2DC9UEIQhIq77fZZlaQsNA= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= -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.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= -github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/logex v1.2.1 h1:XHDu3E6q+gdHgsdTPH6ImJMIp436vR6MPtH8gP05QzM= github.com/chzyer/logex v1.2.1/go.mod h1:JLbx6lG2kDbNRFnfkgvh4eRJRPX1QCoOIWomwysCBrQ= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/readline v1.5.1 h1:upd/6fQk4src78LMRzh5vItIt361/o4uq553V8B5sGI= github.com/chzyer/readline v1.5.1/go.mod h1:Eh+b79XXUwfKfcPLepksvw2tcLE/Ct21YObkaSkeBlk= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/chzyer/test v1.0.0 h1:p3BQDXSxOhOG0P9z6/hGnII4LGiEPOYBhs8asl/fC04= github.com/chzyer/test v1.0.0/go.mod h1:2JlltgoNkt4TW/z9V/IzDdFaMTM2JPIi26O1pF38GC8= 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= @@ -299,90 +258,54 @@ github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cockroachdb/apd/v2 v2.0.2 h1:weh8u7Cneje73dDh+2tEVLUvyBc89iwepWCD8b8034E= github.com/cockroachdb/apd/v2 v2.0.2/go.mod h1:DDxRlzC2lo3/vSlmSoS7JkqbbrARPuFOGr0B9pvN3Gw= -github.com/cockroachdb/apd/v3 v3.1.0 h1:MK3Ow7LH0W8zkd5GMKA1PvS9qG3bWFI95WaVNfyZJ/w= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= -github.com/coinbase/rosetta-sdk-go/types v1.0.0 h1:jpVIwLcPoOeCR6o1tU+Xv7r5bMONNbHU7MuEHboiFuA= github.com/coinbase/rosetta-sdk-go/types v1.0.0/go.mod h1:eq7W2TMRH22GTW0N0beDnN931DW0/WOI1R2sdHNHG4c= -github.com/cometbft/cometbft v0.37.2 h1:XB0yyHGT0lwmJlFmM4+rsRnczPlHoAKFX6K8Zgc2/Jc= github.com/cometbft/cometbft v0.37.2/go.mod h1:Y2MMMN//O5K4YKd8ze4r9jmk4Y7h0ajqILXbH5JQFVs= -github.com/cometbft/cometbft-db v0.8.0 h1:vUMDaH3ApkX8m0KZvOFFy9b5DZHBAjsnEuo9AKVZpjo= github.com/cometbft/cometbft-db v0.8.0/go.mod h1:6ASCP4pfhmrCBpfk01/9E1SI29nD3HfVHrY4PG8x5c0= -github.com/confio/ics23/go v0.9.0 h1:cWs+wdbS2KRPZezoaaj+qBleXgUk5WOQFMP3CQFGTr4= github.com/confio/ics23/go v0.9.0/go.mod h1:4LPZ2NYqnYIVRklaozjNR1FScgDJ2s5Xrp+e/mYVRak= -github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -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-proto v1.0.0-beta.2 h1:X3OKvWgK9Gsejo0F1qs5l8Qn6xJV/AzgIWR2wZ8Nua8= github.com/cosmos/cosmos-proto v1.0.0-beta.2/go.mod h1:+XRCLJ14pr5HFEHIUcn51IKXD1Fy3rkEQqt4WqmN4V0= -github.com/cosmos/cosmos-sdk v0.47.3 h1:r0hGmZoAzP2D+MaPaFGHwAaTdFQq3pNpHaUp1BsffbM= github.com/cosmos/cosmos-sdk v0.47.3/go.mod h1:c4OfLdAykA9zsj1CqrxBRqXzVz48I++JSvIMPSPcEmk= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= -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.4.2/go.mod h1:cLxOsn1ljAHSV527CHOtaIP91kK6cCrZETRBrkzItWU= -github.com/cosmos/gogoproto v1.4.10 h1:QH/yT8X+c0F4ZDacDv3z+xE3WU1P1Z3wQoLMBRJoKuI= github.com/cosmos/gogoproto v1.4.10/go.mod h1:3aAZzeRWpAwr+SS/LLkICX2/kDFyaYVzckBDzygIxek= -github.com/cosmos/iavl v0.20.0 h1:fTVznVlepH0KK8NyKq8w+U7c2L6jofa27aFX6YGlm38= github.com/cosmos/iavl v0.20.0/go.mod h1:WO7FyvaZJoH65+HFOsDir7xU9FWk2w9cHXNW1XHcl7A= -github.com/cosmos/ibc-go/v7 v7.2.0 h1:dx0DLUl7rxdyZ8NiT6UsrbzKOJx/w7s+BOaewFRH6cg= github.com/cosmos/ibc-go/v7 v7.2.0/go.mod h1:OOcjKIRku/j1Xs1RgKK0yvKRrJ5iFuZYMetR1n3yMlc= -github.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZDM= github.com/cosmos/ics23/go v0.10.0/go.mod h1:ZfJSmng/TBNTBkFemHHHj5YY7VAU/MBU980F4VU1NG0= -github.com/cosmos/keyring v1.2.0 h1:8C1lBP9xhImmIabyXW4c3vFjjLiBdGCmfLUfeZlV1Yo= github.com/cosmos/keyring v1.2.0/go.mod h1:fc+wB5KTk9wQ9sDx0kFXB3A0MaeGHM9AwRStKOQ5vOA= -github.com/cosmos/ledger-cosmos-go v0.12.1 h1:sMBxza5p/rNK/06nBSNmsI/WDqI0pVJFVNihy1Y984w= -github.com/cosmos/ledger-cosmos-go v0.12.1/go.mod h1:dhO6kj+Y+AHIOgAe4L9HL/6NDdyyth4q238I9yFpD2g= github.com/cosmos/ledger-cosmos-go v0.12.2/go.mod h1:ZcqYgnfNJ6lAXe4HPtWgarNEY+B74i+2/8MhZw4ziiI= -github.com/cosmos/rosetta-sdk-go v0.10.0 h1:E5RhTruuoA7KTIXUcMicL76cffyeoyvNybzUGSKFTcM= github.com/cosmos/rosetta-sdk-go v0.10.0/go.mod h1:SImAZkb96YbwvoRkzSMQB6noNJXFgWl/ENIznEoYQI4= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/creachadair/taskgroup v0.4.2 h1:jsBLdAJE42asreGss2xZGZ8fJra7WtwnHWeJFxv2Li8= github.com/creachadair/taskgroup v0.4.2/go.mod h1:qiXUOSrbwAY3u0JPGTzObbE3yf9hcXHDKBZ2ZjpCbgM= 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/common/gherkin/go/v22 v22.0.0 h1:4K8NqptbvdOrjL9DEea6HFjSpbdT9+Q5kgLpmmsHYl0= -github.com/cucumber/common/messages/go/v17 v17.1.1 h1:RNqopvIFyLWnKv0LfATh34SWBhXeoFTJnSrgm9cT/Ts= -github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 h1:HbphB4TFFXpv7MNrT52FGrrgVXF1owhMVTHFZIlnvd4= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0/go.mod h1:DZGJHZMqrU4JJqFAWUS2UO1+lbSKsdiOoYi9Zzey7Fc= -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/v2 v2.2007.4 h1:TRWBQg8UrlUhaFdco01nO2uXwzKS7zd+HVdwV/GHc4o= github.com/dgraph-io/badger/v2 v2.2007.4/go.mod h1:vSw/ax2qojzbN6eXHIx6KPKtCSHJN/Uz0X0VPruTIhk= github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= -github.com/dgraph-io/ristretto v0.1.1 h1:6CWw5tJNgpegArSHpNHJKldNeq03FQCwYvfMVWajOK8= github.com/dgraph-io/ristretto v0.1.1/go.mod h1:S1GPSBCYCIhmVNfcth17y2zZtQT6wzkzgwUve0VDWWA= github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8= github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= -github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -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.5.0 h1:3j8ya4Z4kMCwT5nXIKFSV84YS+HdqSSO0VsTQxaLAeM= github.com/dvsekhvalnov/jose2go v1.5.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB/mPZadG+mhXU= github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= @@ -401,20 +324,14 @@ github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go. github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/felixge/httpsnoop v1.0.2 h1:+nS9g82KMXccJ/wp0zyRW9ZBHFETmMGtkk+2CTTrW4o= github.com/felixge/httpsnoop v1.0.2/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= -github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= 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.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -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.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8= github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk= 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= @@ -422,55 +339,34 @@ github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2 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.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= -github.com/go-kit/kit v0.12.0 h1:e4o3o3IsBfAKQh5Qbbiqyfu97Ku7jrO/JbohvztANh4= github.com/go-kit/kit v0.12.0/go.mod h1:lHd+EkCZPIwYItmGDDRdhinkzX2A1sj+M9biaEaizzs= -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-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-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= -github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU= github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= -github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho= github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= -github.com/go-playground/validator/v10 v10.10.0 h1:I7mrTYv78z8k8VXa/qJlOlEXn/nBh+BF8dHX5nt/dr0= github.com/go-playground/validator/v10 v10.10.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee h1:s+21KNqlpePfkah2I+gwHF8xmJWRjooY+5248k6m4A0= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= -github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8= github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= -github.com/gobwas/ws v1.0.2 h1:CoAavW/wd/kulfZmSIBt6p24n4j7tHgNVCjsfHVNUbo= github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= -github.com/goccy/go-json v0.9.7 h1:IcB+Aqpx/iMHu5Yooh7jEzJk1JZ7Pjtmys2ukPr7EeM= github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= -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/uuid v4.3.0+incompatible h1:CaSVZxm5B+7o45rtab4jC2G37WGYX1zQfuU2i6DSvnc= github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/gogo/googleapis v1.4.1-0.20201022092350-68b0159b7869/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= -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.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= -github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -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.4.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/glog v1.1.0 h1:/d3pCKDPWNnvIWe0vVUpNP32qc8U3PDVxySP/y360qE= github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= 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/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/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= @@ -480,7 +376,6 @@ github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt 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.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= 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= @@ -500,15 +395,12 @@ github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw 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.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/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.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= 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= @@ -524,19 +416,14 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ 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.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= 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 h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= 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/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= -github.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw= -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= @@ -554,16 +441,13 @@ github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/s2a-go v0.1.3 h1:FAgZmpLl/SXurPEZyCMPBIiiYeTbqfjlbdnCNTAkbGE= github.com/google/s2a-go v0.1.3/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= -github.com/googleapis/enterprise-certificate-proxy v0.2.3 h1:yk9/cqRKtT9wXZSsRH9aurXEpJX+U6FLtpYTdC3R06k= github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= 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= @@ -574,97 +458,71 @@ github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99 github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= -github.com/googleapis/gax-go/v2 v2.8.0 h1:UBtEZqx1bjXtOQ5BVTkuYghXrr3N4V123VKJK67vJZc= github.com/googleapis/gax-go/v2 v2.8.0/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI= github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= -github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= -github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -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/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/gtank/merlin v0.1.1-0.20191105220539-8318aed1a79f/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= -github.com/gtank/merlin v0.1.1 h1:eQ90iG7K9pOhtereWsmyRJ6RAwcP4tHTDBHXNg+u5is= github.com/gtank/merlin v0.1.1/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= -github.com/gtank/ristretto255 v0.1.2 h1:JEqUCPA1NvLq5DwYtuzigd7ss8fwbYay9fi4/5uMzcc= github.com/gtank/ristretto255 v0.1.2/go.mod h1:Ph5OpO6c7xKUGROZfWVLiJf9icMDwUeIvY4OmlYW69o= github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= 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-getter v1.7.1 h1:SWiSWN/42qdpR0MdhaOc/bLR48PLuP1ZQtYLRlM69uY= github.com/hashicorp/go-getter v1.7.1/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744= 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-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-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= -github.com/hashicorp/go-safetemp v1.0.0 h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhEyExpmo= github.com/hashicorp/go-safetemp v1.0.0/go.mod h1:oaerMy3BhqiTbVye6QuFhFtIceqFoDHxNAB65b+Rj1I= 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 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= 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 v0.5.5-0.20210104140557-80c98217689d h1:dg1dEPuWpEqDnvIw251EVy4zlP8gWbsGj4BsUKCRpYs= github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= -github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= 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/hdevalence/ed25519consensus v0.1.0 h1:jtBwzzcHuTmFrQN6xQZn6CQEO/V9f7HsjsjeEZ6auqU= github.com/hdevalence/ed25519consensus v0.1.0/go.mod h1:w3BHWjwJbFU29IRHL1Iqkw3sus+7FctEyM4RqDxYNzo= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/huandu/go-assert v1.1.5 h1:fjemmA7sSfYHJD7CUqs9qTwwfdNAx7/j2/ZlHXzNB3c= github.com/huandu/go-assert v1.1.5/go.mod h1:yOLvuqZwmcHIC5rIzrBhT7D3Q9c3GFnd0JrPVhn/06U= -github.com/huandu/skiplist v1.2.0 h1:gox56QD77HzSC0w+Ws3MH3iie755GBJU1OER3h5VsYw= github.com/huandu/skiplist v1.2.0/go.mod h1:7v3iFjLcSAzO4fN5B8dvebvo/qsfumiLiDXMrPiHF9w= github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= 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/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/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= -github.com/jhump/protoreflect v1.15.1 h1:HUMERORf3I3ZdX05WaQ6MIpd/NJ434hTp5YiKgfCL6c= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= -github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= -github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U= github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= @@ -673,22 +531,18 @@ github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/u github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= 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.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/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.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= -github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= -github.com/klauspost/compress v1.16.3 h1:XuJt9zzcnaz6a16/OU53ZjWp/v7/42WcR5t2a0PcNQY= github.com/klauspost/compress v1.16.3/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= 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.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= @@ -697,75 +551,53 @@ github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFB 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/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= 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/larry0x/abstract-account v0.0.0-20230708200055-2ea462db913f h1:5bbME0rK2j2cCwRzoc2dX1/SDo3guFgyNyph+c+ulI4= github.com/larry0x/abstract-account v0.0.0-20230708200055-2ea462db913f/go.mod h1:mRL3ko+eOFguJHzhVZatNZOvaiVHumGAWxoLlyIo+Ow= -github.com/larry0x/simapp v0.0.0-20230527213943-e57d94ffca4c h1:HxMMvjvPKv+Xttad2Blw6c9XKzg/Pk5TIZL8T04lUN0= -github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= -github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw= github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= -github.com/linxGnu/grocksdb v1.7.16 h1:Q2co1xrpdkr5Hx3Fp+f+f7fRGhQFQhvi/+226dtLmA8= github.com/linxGnu/grocksdb v1.7.16/go.mod h1:JkS7pl5qWpGpuVb3bPqTz8nC12X3YtPZT+Xq7+QfQo4= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= -github.com/manifoldco/promptui v0.9.0 h1:3V4HzJk1TtXW1MTZMP7mdlwbBpIinw3HztaIlYthEiA= github.com/manifoldco/promptui v0.9.0/go.mod h1:ka04sppxSGFAtxX0qhlYQjISsg9mR4GWtQEhdbn6Pgg= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= -github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-isatty v0.0.18 h1:DOKFKCQ7FNG2L1rbrmstDN4QVRdS89Nkh85u68Uwp98= github.com/mattn/go-isatty v0.0.18/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= -github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 h1:QRUSJEgZn2Snx0EmT/QLXibWjSUDjKWvXIT19NBVp94= github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= -github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g= github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= 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/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.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= 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 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -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/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/grpc-proxy v0.0.0-20181017164139-0f1106ef9c76/go.mod h1:x5OoJHDHqxHS801UIuhqGl6QdSAEJvtausosHSdazIo= github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= @@ -776,8 +608,10 @@ github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxzi github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/notional-labs/fee-abstraction/v2 v2.1.1/go.mod h1:ZceG2QlMAdSVELrhSA7BfjVxoEoYkoNS3A4tGE6nd0I= +github.com/notional-labs/fee-abstraction/v4 v4.0.0-20230803105745-1ff2732e1405 h1:+J3rDDnUcBzThKC6qqoZvQYczQgEj48GWcSwFPZpqrs= +github.com/notional-labs/fee-abstraction/v4 v4.0.0-20230803105745-1ff2732e1405/go.mod h1:g0nuQH+2MWIaTKnApw9y8h0Fb79FpG+XtcxHAxjQdY4= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= @@ -785,16 +619,11 @@ github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+W 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 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= 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.20.0 h1:8W0cWlwFkflGPLltQvLRB7ZVD5HuP6ng320w2IS245Q= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= -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.0-rc2 h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034= -github.com/opencontainers/runc v1.1.3 h1:vIXrkId+0/J2Ymu2m7VjGvbSlAId9XNRPhn2p4b+d8w= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= @@ -803,32 +632,24 @@ github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxS github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= -github.com/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA= -github.com/osmosis-labs/fee-abstraction/v2 v2.0.0-20230718172125-87710739dbbc h1:z+Kjnv0lja2vZdIXUS7wbScW0CZcgKjE31V6xPVOIOQ= -github.com/osmosis-labs/fee-abstraction/v2 v2.0.0-20230718172125-87710739dbbc/go.mod h1:ZceG2QlMAdSVELrhSA7BfjVxoEoYkoNS3A4tGE6nd0I= github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= 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/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= -github.com/pelletier/go-toml/v2 v2.0.8 h1:0ctb6s9mE31h0/lhu+J6OPmVeDxJn+kYnJc2jZR9tGQ= github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= -github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08 h1:hDSdbBuw3Lefr6R18ax0tZ2BJeNB3NehB3trOwYBsdU= github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= 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/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= @@ -837,7 +658,6 @@ github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5Fsn github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= 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.16.0 h1:yk/hx9hDbrGHovbci4BY+pRMfSuuat626eFsHb7tmT8= github.com/prometheus/client_golang v1.16.0/go.mod h1:Zsulrv/L9oM40tJ7T815tM89lFEugiJ9HzIqaAx4LKc= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= @@ -845,7 +665,6 @@ github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1: github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4= github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= @@ -853,7 +672,6 @@ github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt2 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.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= -github.com/prometheus/common v0.42.0 h1:EKsfXEYo4JpWMHH5cg+KOUWeuJSov1Id8zGR8eeI1YM= github.com/prometheus/common v0.42.0/go.mod h1:xBwqVerjNdUDjgODMpudtOMwlOwf2SaTr1yjz4b7Zbc= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= @@ -861,33 +679,25 @@ github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsT github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.10.1 h1:kYK1Va/YMlutzCGazswoHKo//tZVlFpKYh+PymziUAg= github.com/prometheus/procfs v0.10.1/go.mod h1:nwNm2aOCAYw8uTR/9bWRREkZFxAUcWzPHWJq+XBB/FM= -github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ= github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Unghqrcc= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= -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/regen-network/gocuke v0.6.2 h1:pHviZ0kKAq2U2hN2q3smKNxct6hS0mGByFMHGnWA97M= github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= 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 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= -github.com/rs/cors v1.8.3 h1:O+qNyWn7Z+F9M0ILBHgMVPuB1xTOucVd5gtaYyXBpRo= github.com/rs/cors v1.8.3/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= -github.com/rs/zerolog v1.29.1 h1:cO+d60CHkknCbvzEWxP0S9K6KqyTjrCNUy1LdQLCGPc= github.com/rs/zerolog v1.29.1/go.mod h1:Le6ESbR7hc+DP6Lt1THiV8CQSdkkNrd3R0XbEgp3ZBU= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= 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/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= -github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71efZx0= github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= @@ -895,35 +705,26 @@ github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPx 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.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= 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/snikch/goodman v0.0.0-20171125024755-10e37e294daa h1:YJfZp12Z3AFhSBeXOlv4BO55RMwPn2NoQeDsrdWnBtY= github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa/go.mod h1:oJyF+mSPHbB5mVY2iO9KV3pTt/QbIkGaO8gQ2WrDbP4= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/afero v1.9.5 h1:stMpOSZFs//0Lv29HduCmli3GUfpFoF3Y1Q/aXj/wVM= github.com/spf13/afero v1.9.5/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA= github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/spf13/viper v1.16.0 h1:rGGH0XDZhdUOryiDWjmIvUSWpbNqisK8Wk0Vyefw8hc= github.com/spf13/viper v1.16.0/go.mod h1:yg78JgCJcbrQOvV9YLXgkLaZqUidkY9K+Dd1FofRzQg= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= @@ -931,7 +732,6 @@ github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5J 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.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= @@ -943,25 +743,17 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ 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.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8= github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= -github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= -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/tidwall/btree v1.6.0 h1:LDZfKfQIBHGHWSwckhXI0RPSXzlo+KYdjK7FWSqOzzg= github.com/tidwall/btree v1.6.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= -github.com/ugorji/go v1.2.7 h1:qYhyWUUd6WbiM+C6JZAUkIJt/1WrjzNHY9+KCIjVqTo= github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= -github.com/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0= github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= -github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= @@ -973,12 +765,9 @@ github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de 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/zondax/hid v0.9.1 h1:gQe66rtmyZ8VeGFcOpbuH3r7erYtNEAezCAYu8LdkJo= github.com/zondax/hid v0.9.1/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= -github.com/zondax/ledger-go v0.14.1 h1:Pip65OOl4iJ84WTpA4BKChvOufMhhbxED3BaihoZN4c= github.com/zondax/ledger-go v0.14.1/go.mod h1:fZ3Dqg6qcdXWSOJFKMG8GCTnD7slO/RL2feOQv8K320= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.7 h1:j+zJOnnEjF/kyHlDDgGnVL/AIqIJPq8UoB2GSNfkUfQ= go.etcd.io/bbolt v1.3.7/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= @@ -990,7 +779,6 @@ 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.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= @@ -1017,7 +805,6 @@ golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.11.0 h1:6Ewdq3tDic1mg5xRO4milcWCfMVQhI4NkqWWvqejpuA= golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= 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= @@ -1030,7 +817,6 @@ golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u0 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-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= -golang.org/x/exp v0.0.0-20230515195305-f3d0a9c9a5cc h1:mCRnTeVUjcrhlRmO0VK8a6k6Rrf6TF9htwo2pJVSjIU= golang.org/x/exp v0.0.0-20230515195305-f3d0a9c9a5cc/go.mod h1:V1LtkGg67GoY2N1AnLN78QLrzxkLyJw7RJb1gzOOz9w= 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= @@ -1058,7 +844,6 @@ 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.9.0 h1:KENHtAZL2y3NLMYZeHY9DW8HW8V+kQyJsY/V9JlKvCs= 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= @@ -1120,7 +905,6 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= -golang.org/x/net v0.12.0 h1:cfawfvKITfUsFCeJIHJrbSxpeu/E81khclypR0GVT50= golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= 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= @@ -1147,7 +931,6 @@ golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= -golang.org/x/oauth2 v0.7.0 h1:qe6s0zUXlPX80/dITx3440hWZ7GwMwgDDyrSGTPJG/g= golang.org/x/oauth2 v0.7.0/go.mod h1:hPLQkd9LyjfXTiRohC/41GhcFqxisoUQ99sCUOHO9x4= 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= @@ -1163,7 +946,6 @@ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/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.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI= 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= @@ -1261,12 +1043,10 @@ golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA= golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.10.0 h1:3R7pNqamzBraeqj/Tj8qt1aQ2HpmlC+Cx/qL/7hn4/c= golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o= 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= @@ -1279,16 +1059,13 @@ 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.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.11.0 h1:LAntKIrcmeSKERyiOh0XMV39LXS8IE9UL2yP7+f5ij4= golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-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/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/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-20181030221726-6c7e314b6563/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= @@ -1347,7 +1124,6 @@ golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.4/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.7.0 h1:W4OVu8VVOaIO0yzWMNdepAulS7YfoS3Zabrm8DOXXU4= 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= @@ -1355,7 +1131,6 @@ golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= @@ -1406,7 +1181,6 @@ google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= -google.golang.org/api v0.122.0 h1:zDobeejm3E7pEG1mNHvdxvjs5XJoCMzyNH+CmwL94Es= google.golang.org/api v0.122.0/go.mod h1:gcitW0lvnyWjSp9nKxAbdHKIZ6vF4aajGueeslZOyms= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1415,7 +1189,6 @@ google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7 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 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= 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= @@ -1526,7 +1299,6 @@ google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqw google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= -google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 h1:KpwkzHKEF7B9Zxg18WzOa7djJ+Ha5DzthMyZYQfEn2A= google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= @@ -1569,7 +1341,6 @@ google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACu google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.56.2 h1:fVRFRnXvU+x6C4IlHZewvJOVHoOv1TUuQyoRsYnB4bI= google.golang.org/grpc v1.56.2/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= @@ -1587,24 +1358,20 @@ google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= 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/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/cheggaaa/pb.v1 v1.0.27/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= 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/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= -gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= -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/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= @@ -1615,13 +1382,10 @@ 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.0 h1:Ljk6PdHdOhAb5aDMWXjDLMMhph+BpztA4v1QdqEW2eY= gotest.tools/v3 v3.5.0/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -1631,14 +1395,11 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh 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= -nhooyr.io/websocket v1.8.6 h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k= nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= -pgregory.net/rapid v0.5.5 h1:jkgx1TjbQPD/feRoK+S/mXw9e1uj6WilpHrXJowi6oA= pgregory.net/rapid v0.5.5/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.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= -sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= From 5c27a7bbae933038144bb8e5a2afff2af71eaea7 Mon Sep 17 00:00:00 2001 From: Ash Date: Thu, 3 Aug 2023 23:51:19 +0200 Subject: [PATCH 151/501] pfm updated --- app/app.go | 1 + go.mod | 8 +++----- go.sum | 12 ++++-------- 3 files changed, 8 insertions(+), 13 deletions(-) diff --git a/app/app.go b/app/app.go index 066289c7..b9748eb2 100644 --- a/app/app.go +++ b/app/app.go @@ -1256,6 +1256,7 @@ func initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino paramsKeeper.Subspace(wasm.ModuleName) paramsKeeper.Subspace(aatypes.ModuleName) paramsKeeper.Subspace(packetforwardtypes.ModuleName) + paramsKeeper.Subspace(feeabstypes.ModuleName) return paramsKeeper } diff --git a/go.mod b/go.mod index 7310fc20..03a02538 100644 --- a/go.mod +++ b/go.mod @@ -42,8 +42,11 @@ require ( github.com/armon/go-metrics v0.4.1 github.com/cometbft/cometbft v0.37.2 github.com/cometbft/cometbft-db v0.8.0 + github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.0.0-20230803181732-7c8f814d3b79 + github.com/cosmos/ibc-apps/modules/ibc-hooks/v7 v7.0.0-20230802211043-d72e83c94350 github.com/golang/mock v1.6.0 github.com/larry0x/abstract-account v0.0.0-20230708200055-2ea462db913f + github.com/notional-labs/fee-abstraction/v4 v4.0.0-20230803210815-7afad2bae25c github.com/spf13/viper v1.16.0 gotest.tools/v3 v3.5.0 sigs.k8s.io/yaml v1.3.0 @@ -74,8 +77,6 @@ require ( github.com/confio/ics23/go v0.9.0 // indirect github.com/cosmos/btcutil v1.0.5 // indirect github.com/cosmos/go-bip39 v1.0.0 // indirect - github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.0.0-20230802211043-d72e83c94350 // indirect - github.com/cosmos/ibc-apps/modules/ibc-hooks/v7 v7.0.0-20230802211043-d72e83c94350 // indirect github.com/cosmos/ledger-cosmos-go v0.12.2 // indirect github.com/cosmos/rosetta-sdk-go v0.10.0 // indirect github.com/creachadair/taskgroup v0.4.2 // indirect @@ -140,7 +141,6 @@ require ( github.com/mitchellh/go-testing-interface v1.14.1 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/mtibben/percent v0.2.1 // indirect - github.com/notional-labs/fee-abstraction/v4 v4.0.0-20230803105745-1ff2732e1405 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect github.com/pelletier/go-toml/v2 v2.0.8 // indirect github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08 // indirect @@ -190,8 +190,6 @@ replace ( github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 - github.com/strangelove-ventures/packet-forward-middleware/v7 => github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.0.0-20230802211043-d72e83c94350 - // pin version! 126854af5e6d has issues with the store so that queries fail github.com/syndtr/goleveldb => github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 diff --git a/go.sum b/go.sum index 47d7be3a..a0372d0b 100644 --- a/go.sum +++ b/go.sum @@ -337,12 +337,8 @@ github.com/cosmos/gogoproto v1.4.10 h1:QH/yT8X+c0F4ZDacDv3z+xE3WU1P1Z3wQoLMBRJoK github.com/cosmos/gogoproto v1.4.10/go.mod h1:3aAZzeRWpAwr+SS/LLkICX2/kDFyaYVzckBDzygIxek= github.com/cosmos/iavl v0.20.0 h1:fTVznVlepH0KK8NyKq8w+U7c2L6jofa27aFX6YGlm38= github.com/cosmos/iavl v0.20.0/go.mod h1:WO7FyvaZJoH65+HFOsDir7xU9FWk2w9cHXNW1XHcl7A= -github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.0.0-20230726182236-3a9d46a7c2a4 h1:MR2xuH8zn6j79CPALQFSKFJKEASMWClUUvB764XKLfw= -github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.0.0-20230726182236-3a9d46a7c2a4/go.mod h1:fctjEnz9xaBFOlmYYPdKL8Hs1Y3GUKilSwsJdqBb5QU= -github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.0.0-20230802211043-d72e83c94350 h1:45xwglI8MOs44dUfErsDX6UJIH02PmK3aYmKZMj1GAA= -github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.0.0-20230802211043-d72e83c94350/go.mod h1:fctjEnz9xaBFOlmYYPdKL8Hs1Y3GUKilSwsJdqBb5QU= -github.com/cosmos/ibc-apps/modules/ibc-hooks/v7 v7.0.0-20230726182236-3a9d46a7c2a4 h1:NuFmpHnENcTtZDEQf2vZzZluk5rQl3f7J4tqo9FlH/c= -github.com/cosmos/ibc-apps/modules/ibc-hooks/v7 v7.0.0-20230726182236-3a9d46a7c2a4/go.mod h1:JwHFbo1oX/ht4fPpnPvmhZr+dCkYK1Vihw+vZE9umR4= +github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.0.0-20230803181732-7c8f814d3b79 h1:n+PjYB3JnbKN+sGmX6khST4xMP+D0UdrMNj7O91fuOg= +github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.0.0-20230803181732-7c8f814d3b79/go.mod h1:fctjEnz9xaBFOlmYYPdKL8Hs1Y3GUKilSwsJdqBb5QU= github.com/cosmos/ibc-apps/modules/ibc-hooks/v7 v7.0.0-20230802211043-d72e83c94350 h1:NyXIgMKsCTnmD8fcuuuX+45Py9xh/mfpPJ8yr3MI3zg= github.com/cosmos/ibc-apps/modules/ibc-hooks/v7 v7.0.0-20230802211043-d72e83c94350/go.mod h1:JwHFbo1oX/ht4fPpnPvmhZr+dCkYK1Vihw+vZE9umR4= github.com/cosmos/ibc-go/v7 v7.2.0 h1:dx0DLUl7rxdyZ8NiT6UsrbzKOJx/w7s+BOaewFRH6cg= @@ -370,7 +366,6 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= -github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 h1:HbphB4TFFXpv7MNrT52FGrrgVXF1owhMVTHFZIlnvd4= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0/go.mod h1:DZGJHZMqrU4JJqFAWUS2UO1+lbSKsdiOoYi9Zzey7Fc= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= @@ -777,7 +772,8 @@ github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxzi github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/notional-labs/fee-abstraction/v4 v4.0.0-20230803105745-1ff2732e1405/go.mod h1:g0nuQH+2MWIaTKnApw9y8h0Fb79FpG+XtcxHAxjQdY4= +github.com/notional-labs/fee-abstraction/v4 v4.0.0-20230803210815-7afad2bae25c h1:UJ1Ww4n33Q4nNrU+8WzYxlt/nXCF1OlhTlG4IcYZs7Y= +github.com/notional-labs/fee-abstraction/v4 v4.0.0-20230803210815-7afad2bae25c/go.mod h1:yxwbFZEeQ+G7egDdOip9NQnfEhzCVzCZ5dI6sQELsrs= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= From 2268be1fbf3ffbe9f1551accc3fb39a0e70608b3 Mon Sep 17 00:00:00 2001 From: Ash Date: Thu, 3 Aug 2023 23:55:57 +0200 Subject: [PATCH 152/501] double defined --- app/app.go | 3 --- 1 file changed, 3 deletions(-) diff --git a/app/app.go b/app/app.go index b9748eb2..93779e5c 100644 --- a/app/app.go +++ b/app/app.go @@ -840,7 +840,6 @@ func NewWasmApp( aatypes.ModuleName, ibchookstypes.ModuleName, packetforwardtypes.ModuleName, - feeabstypes.ModuleName, ) app.ModuleManager.SetOrderEndBlockers( @@ -863,7 +862,6 @@ func NewWasmApp( aatypes.ModuleName, ibchookstypes.ModuleName, packetforwardtypes.ModuleName, - feeabstypes.ModuleName, ) // NOTE: The genutils module must occur after staking so that pools are @@ -891,7 +889,6 @@ func NewWasmApp( aatypes.ModuleName, ibchookstypes.ModuleName, packetforwardtypes.ModuleName, - feeabstypes.ModuleName, } app.ModuleManager.SetOrderInitGenesis(genesisModuleOrder...) app.ModuleManager.SetOrderExportGenesis(genesisModuleOrder...) From 0e29492de92ef03408256dbce6ba75d36cf8ac0d Mon Sep 17 00:00:00 2001 From: Eduardo Diaz Date: Tue, 8 Aug 2023 18:40:22 -0400 Subject: [PATCH 153/501] refactor Ante Handler, set gas consumption --- x/globalfee/ante/antetest/fee_test.go | 566 +------------------------- x/globalfee/ante/fee.go | 86 +--- 2 files changed, 20 insertions(+), 632 deletions(-) diff --git a/x/globalfee/ante/antetest/fee_test.go b/x/globalfee/ante/antetest/fee_test.go index 89357b06..aee6e554 100644 --- a/x/globalfee/ante/antetest/fee_test.go +++ b/x/globalfee/ante/antetest/fee_test.go @@ -6,13 +6,10 @@ import ( cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" "github.com/cosmos/cosmos-sdk/testutil/testdata" sdk "github.com/cosmos/cosmos-sdk/types" - stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" ibcclienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" ibcchanneltypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" "github.com/stretchr/testify/suite" - xionfeeante "github.com/burnt-labs/xion/x/globalfee/ante" - globfeetypes "github.com/burnt-labs/xion/x/globalfee/types" ) @@ -34,10 +31,7 @@ func (s *IntegrationTestSuite) TestGetDefaultGlobalFees() { } } -// Test global fees and min_gas_price with bypass msg types. -// Please note even globalfee=0, min_gas_price=0, we do not let fee=0random_denom pass. -// Paid fees are already sanitized by removing zero coins(through feeFlag parsing), so use sdk.NewCoins() to create it. -func (s *IntegrationTestSuite) TestGlobalFeeMinimumGasFeeAnteHandler() { +func (s *IntegrationTestSuite) TestGlobalFeeSetAnteHandler() { s.txBuilder = s.clientCtx.TxConfig.NewTxBuilder() priv1, _, addr1 := testdata.KeyTestPubAddr() privs, accNums, accSeqs := []cryptotypes.PrivKey{priv1}, []uint64{0}, []uint64{0} @@ -57,10 +51,10 @@ func (s *IntegrationTestSuite) TestGlobalFeeMinimumGasFeeAnteHandler() { sdk.NewDecCoinFromDec("photon", sdk.NewDec(0)), sdk.NewDecCoinFromDec("uxion", sdk.NewDec(0)), } - globalfeeParamsContain0 := []sdk.DecCoin{ - sdk.NewDecCoinFromDec("photon", med), - sdk.NewDecCoinFromDec("uxion", sdk.NewDec(0)), - } + // globalfeeParamsContain0 := []sdk.DecCoin{ + // sdk.NewDecCoinFromDec("photon", med), + // sdk.NewDecCoinFromDec("uxion", sdk.NewDec(0)), + // } minGasPrice0 := []sdk.DecCoin{ sdk.NewDecCoinFromDec("stake", sdk.NewDec(0)), sdk.NewDecCoinFromDec("uxion", sdk.NewDec(0)), @@ -77,10 +71,10 @@ func (s *IntegrationTestSuite) TestGlobalFeeMinimumGasFeeAnteHandler() { sdk.NewDecCoinFromDec("uxion", low), } // global fee must be sorted in denom - globalfeeParamsNewDenom := []sdk.DecCoin{ - sdk.NewDecCoinFromDec("photon", high), - sdk.NewDecCoinFromDec("quark", high), - } + // globalfeeParamsNewDenom := []sdk.DecCoin{ + // sdk.NewDecCoinFromDec("photon", high), + // sdk.NewDecCoinFromDec("quark", high), + // } testCases := map[string]struct { minGasPrice []sdk.DecCoin @@ -92,30 +86,17 @@ func (s *IntegrationTestSuite) TestGlobalFeeMinimumGasFeeAnteHandler() { expErr bool networkFee bool }{ - // test fees - // empty min_gas_price or empty global fee - "empty min_gas_price, nonempty global fee, fee higher/equal than global_fee": { + "empty_min_gas_price, nonempty global fee": { minGasPrice: minGasPriceEmpty, globalFee: globalfeeParamsHigh, - // sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()) - gasPrice: sdk.NewCoins(sdk.NewCoin("uxion", highFeeAmt)), - gasLimit: testGasLimit, - txMsg: testdata.NewTestMsg(addr1), - txCheck: true, - expErr: false, - networkFee: false, - }, - "empty min_gas_price, nonempty global fee, fee lower than global_fee": { - minGasPrice: minGasPriceEmpty, - globalFee: globalfeeParamsHigh, - gasPrice: sdk.NewCoins(sdk.NewCoin("uxion", lowFeeAmt)), + gasPrice: sdk.NewCoins(sdk.NewCoin("uxion", highFeeAmt)), gasLimit: testGasLimit, txMsg: testdata.NewTestMsg(addr1), txCheck: true, - expErr: true, + expErr: false, networkFee: false, }, - "nonempty min_gas_price with defaultGlobalFee denom, empty global fee, fee higher/equal than min_gas_price": { + "nonempty min_gas_price with defaultGlobalFee denom, empty global fee": { minGasPrice: minGasPrice, globalFee: globalfeeParamsEmpty, // default 0uxion gasPrice: sdk.NewCoins(sdk.NewCoin("uxion", medFeeAmt)), @@ -125,45 +106,7 @@ func (s *IntegrationTestSuite) TestGlobalFeeMinimumGasFeeAnteHandler() { expErr: false, networkFee: true, }, - "nonempty min_gas_price with defaultGlobalFee denom, empty global fee, fee lower than min_gas_price": { - minGasPrice: minGasPrice, - globalFee: globalfeeParamsEmpty, - gasPrice: sdk.NewCoins(sdk.NewCoin("uxion", lowFeeAmt)), - gasLimit: testGasLimit, - txMsg: testdata.NewTestMsg(addr1), - txCheck: true, - expErr: true, - }, - "empty min_gas_price, empty global fee, empty fee": { - minGasPrice: minGasPriceEmpty, - globalFee: globalfeeParamsEmpty, - gasPrice: sdk.Coins{}, - gasLimit: testGasLimit, - txMsg: testdata.NewTestMsg(addr1), - txCheck: true, - expErr: false, - }, - // zero min_gas_price or zero global fee - "zero min_gas_price, zero global fee, zero fee in global fee denom": { - minGasPrice: minGasPrice0, - globalFee: globalfeeParams0, - gasPrice: sdk.NewCoins(sdk.NewCoin("uxion", sdk.ZeroInt()), sdk.NewCoin("photon", sdk.ZeroInt())), - gasLimit: testGasLimit, - txMsg: testdata.NewTestMsg(addr1), - txCheck: true, - expErr: false, - }, - "zero min_gas_price, zero global fee, empty fee": { - minGasPrice: minGasPrice0, - globalFee: globalfeeParams0, - gasPrice: sdk.Coins{}, - gasLimit: testGasLimit, - txMsg: testdata.NewTestMsg(addr1), - txCheck: true, - expErr: false, - }, - // zero global fee - "zero min_gas_price, zero global fee, zero fee not in globalfee denom": { + "zero min_gas_price, zero global fee": { minGasPrice: minGasPrice0, globalFee: globalfeeParams0, gasPrice: sdk.NewCoins(sdk.NewCoin("stake", sdk.ZeroInt())), @@ -172,17 +115,6 @@ func (s *IntegrationTestSuite) TestGlobalFeeMinimumGasFeeAnteHandler() { txCheck: true, expErr: false, }, - "zero min_gas_price, zero global fee, zero fees one in, one not in globalfee denom": { - minGasPrice: minGasPrice0, - globalFee: globalfeeParams0, - gasPrice: sdk.NewCoins( - sdk.NewCoin("stake", sdk.ZeroInt()), - sdk.NewCoin("uxion", sdk.ZeroInt())), - gasLimit: testGasLimit, - txMsg: testdata.NewTestMsg(addr1), - txCheck: true, - expErr: false, - }, // zero min_gas_price and empty global fee "zero min_gas_price, empty global fee, zero fee in min_gas_price_denom": { minGasPrice: minGasPrice0, @@ -193,44 +125,8 @@ func (s *IntegrationTestSuite) TestGlobalFeeMinimumGasFeeAnteHandler() { txCheck: true, expErr: false, }, - "zero min_gas_price, empty global fee, zero fee not in min_gas_price denom, not in defaultZeroGlobalFee denom": { - minGasPrice: minGasPrice0, - globalFee: globalfeeParamsEmpty, - gasPrice: sdk.NewCoins(sdk.NewCoin("quark", sdk.ZeroInt())), - gasLimit: testGasLimit, - txMsg: testdata.NewTestMsg(addr1), - txCheck: true, - expErr: false, - }, - "zero min_gas_price, empty global fee, zero fee in defaultZeroGlobalFee denom": { - minGasPrice: minGasPrice0, - globalFee: globalfeeParamsEmpty, - gasPrice: sdk.NewCoins(sdk.NewCoin("uxion", sdk.ZeroInt())), - gasLimit: testGasLimit, - txMsg: testdata.NewTestMsg(addr1), - txCheck: true, - expErr: false, - }, - "zero min_gas_price, empty global fee, nonzero fee in defaultZeroGlobalFee denom": { - minGasPrice: minGasPrice0, - globalFee: globalfeeParamsEmpty, - gasPrice: sdk.NewCoins(sdk.NewCoin("uxion", lowFeeAmt)), - gasLimit: testGasLimit, - txMsg: testdata.NewTestMsg(addr1), - txCheck: true, - expErr: false, - }, - "zero min_gas_price, empty global fee, nonzero fee not in defaultZeroGlobalFee denom": { - minGasPrice: minGasPrice0, - globalFee: globalfeeParamsEmpty, - gasPrice: sdk.NewCoins(sdk.NewCoin("quark", highFeeAmt)), - gasLimit: testGasLimit, - txMsg: testdata.NewTestMsg(addr1), - txCheck: true, - expErr: true, - }, // empty min_gas_price, zero global fee - "empty min_gas_price, zero global fee, zero fee in global fee denom": { + "empty min_gas_price, zero global fee": { minGasPrice: minGasPriceEmpty, globalFee: globalfeeParams0, gasPrice: sdk.NewCoins(sdk.NewCoin("uxion", sdk.ZeroInt())), @@ -239,35 +135,8 @@ func (s *IntegrationTestSuite) TestGlobalFeeMinimumGasFeeAnteHandler() { txCheck: true, expErr: false, }, - "empty min_gas_price, zero global fee, zero fee not in global fee denom": { - minGasPrice: minGasPriceEmpty, - globalFee: globalfeeParams0, - gasPrice: sdk.NewCoins(sdk.NewCoin("stake", sdk.ZeroInt())), - gasLimit: testGasLimit, - txMsg: testdata.NewTestMsg(addr1), - txCheck: true, - expErr: false, - }, - "empty min_gas_price, zero global fee, nonzero fee in global fee denom": { - minGasPrice: minGasPriceEmpty, - globalFee: globalfeeParams0, - gasPrice: sdk.NewCoins(sdk.NewCoin("uxion", lowFeeAmt)), - gasLimit: testGasLimit, - txMsg: testdata.NewTestMsg(addr1), - txCheck: true, - expErr: false, - }, - "empty min_gas_price, zero global fee, nonzero fee not in global fee denom": { - minGasPrice: minGasPriceEmpty, - globalFee: globalfeeParams0, - gasPrice: sdk.NewCoins(sdk.NewCoin("stake", highFeeAmt)), - gasLimit: testGasLimit, - txMsg: testdata.NewTestMsg(addr1), - txCheck: true, - expErr: true, - }, // zero min_gas_price, nonzero global fee - "zero min_gas_price, nonzero global fee, fee is higher than global fee": { + "zero min_gas_price, nonzero global fee": { minGasPrice: minGasPrice0, globalFee: globalfeeParamsLow, gasPrice: sdk.NewCoins(sdk.NewCoin("uxion", lowFeeAmt)), @@ -276,16 +145,6 @@ func (s *IntegrationTestSuite) TestGlobalFeeMinimumGasFeeAnteHandler() { txCheck: true, expErr: false, }, - // nonzero min_gas_price, nonzero global fee - "fee higher/equal than globalfee and min_gas_price": { - minGasPrice: minGasPrice, - globalFee: globalfeeParamsHigh, - gasPrice: sdk.NewCoins(sdk.NewCoin("uxion", highFeeAmt)), - gasLimit: testGasLimit, - txMsg: testdata.NewTestMsg(addr1), - txCheck: true, - expErr: false, - }, "fee lower than globalfee and min_gas_price": { minGasPrice: minGasPrice, globalFee: globalfeeParamsHigh, @@ -293,169 +152,6 @@ func (s *IntegrationTestSuite) TestGlobalFeeMinimumGasFeeAnteHandler() { gasLimit: testGasLimit, txMsg: testdata.NewTestMsg(addr1), txCheck: true, - expErr: true, - }, - "fee with one denom higher/equal, one denom lower than globalfee and min_gas_price": { - minGasPrice: minGasPrice, - globalFee: globalfeeParamsNewDenom, - gasPrice: sdk.NewCoins( - sdk.NewCoin("photon", lowFeeAmt), - sdk.NewCoin("quark", highFeeAmt)), - gasLimit: testGasLimit, - txMsg: testdata.NewTestMsg(addr1), - txCheck: true, - expErr: true, // NOTE: expect error gas price is not a subset of the standard test min gas price - }, - "globalfee > min_gas_price, fee higher/equal than min_gas_price, lower than globalfee": { - minGasPrice: minGasPrice, - globalFee: globalfeeParamsHigh, - gasPrice: sdk.NewCoins(sdk.NewCoin("uxion", medFeeAmt)), - gasLimit: testGasLimit, - txMsg: testdata.NewTestMsg(addr1), - txCheck: true, - expErr: true, - }, - "globalfee < min_gas_price, fee higher/equal than globalfee and lower than min_gas_price": { - minGasPrice: minGasPrice, - globalFee: globalfeeParamsLow, - gasPrice: sdk.NewCoins(sdk.NewCoin("uxion", lowFeeAmt)), - gasLimit: testGasLimit, - txMsg: testdata.NewTestMsg(addr1), - txCheck: true, - expErr: true, - }, - // nonzero min_gas_price, zero global fee - "nonzero min_gas_price, zero global fee, fee is in global fee denom and lower than min_gas_price": { - minGasPrice: minGasPrice, - globalFee: globalfeeParams0, - gasPrice: sdk.NewCoins(sdk.NewCoin("uxion", lowFeeAmt)), - gasLimit: testGasLimit, - txMsg: testdata.NewTestMsg(addr1), - txCheck: true, - expErr: true, - }, - "nonzero min_gas_price, zero global fee, fee is in global fee denom and higher/equal than min_gas_price": { - minGasPrice: minGasPrice, - globalFee: globalfeeParams0, - gasPrice: sdk.NewCoins(sdk.NewCoin("uxion", medFeeAmt)), - gasLimit: testGasLimit, - txMsg: testdata.NewTestMsg(addr1), - txCheck: true, - expErr: false, - }, - "nonzero min_gas_price, zero global fee, fee is in min_gas_price denom which is not in global fee default, but higher/equal than min_gas_price": { - minGasPrice: minGasPrice, - globalFee: globalfeeParams0, - gasPrice: sdk.NewCoins(sdk.NewCoin("stake", highFeeAmt)), - gasLimit: testGasLimit, - txMsg: testdata.NewTestMsg(addr1), - txCheck: true, - expErr: true, - }, - // fee denom tests - "min_gas_price denom is not subset of global fee denom , fee paying in global fee denom": { - minGasPrice: minGasPrice, - globalFee: globalfeeParamsNewDenom, - gasPrice: sdk.NewCoins(sdk.NewCoin("photon", highFeeAmt)), - gasLimit: testGasLimit, - txMsg: testdata.NewTestMsg(addr1), - txCheck: true, - expErr: true, // NOTE: is not a subset it should return error, due to changes we no longer merge local fees + network fees - }, - "min_gas_price denom is not subset of global fee denom, fee paying in min_gas_price denom": { - minGasPrice: minGasPrice, - globalFee: globalfeeParamsNewDenom, - gasPrice: sdk.NewCoins(sdk.NewCoin("stake", highFeeAmt)), - gasLimit: testGasLimit, - txMsg: testdata.NewTestMsg(addr1), - txCheck: true, - expErr: true, - }, - "fees contain denom not in globalfee": { - minGasPrice: minGasPrice, - globalFee: globalfeeParamsLow, - gasPrice: sdk.NewCoins( - sdk.NewCoin("uxion", highFeeAmt), - sdk.NewCoin("quark", highFeeAmt)), - gasLimit: testGasLimit, - txMsg: testdata.NewTestMsg(addr1), - txCheck: true, - expErr: true, - }, - "fees contain denom not in globalfee with zero amount": { - minGasPrice: minGasPrice, - globalFee: globalfeeParamsLow, - gasPrice: sdk.NewCoins(sdk.NewCoin("uxion", highFeeAmt), - sdk.NewCoin("quark", sdk.ZeroInt())), - gasLimit: testGasLimit, - txMsg: testdata.NewTestMsg(addr1), - txCheck: true, - expErr: false, - }, - // cases from https://github.com/cosmos/gaia/pull/1570#issuecomment-1190524402 - // note: this is kind of a silly scenario but technically correct - // if there is a zero coin in the globalfee, the user could pay 0fees - // if the user includes any fee at all in the non-zero denom, it must be higher than that non-zero fee - // unlikely we will ever see zero and non-zero together but technically possible - "globalfee contains zero coin and non-zero coin, fee is lower than the nonzero coin": { - minGasPrice: minGasPrice0, - globalFee: globalfeeParamsContain0, - gasPrice: sdk.NewCoins(sdk.NewCoin("photon", lowFeeAmt)), - gasLimit: testGasLimit, - txMsg: testdata.NewTestMsg(addr1), - txCheck: true, - expErr: true, - }, - "globalfee contains zero coin, fee contains zero coins of the same denom and a lower fee of the other denom in global fee": { - minGasPrice: minGasPrice0, - globalFee: globalfeeParamsContain0, - gasPrice: sdk.NewCoins( - sdk.NewCoin("photon", lowFeeAmt), - sdk.NewCoin("uxion", sdk.ZeroInt())), - gasLimit: testGasLimit, - txMsg: testdata.NewTestMsg(addr1), - txCheck: true, - expErr: true, - }, - "globalfee contains zero coin, fee is empty": { - minGasPrice: minGasPrice0, - globalFee: globalfeeParamsContain0, - gasPrice: sdk.Coins{}, - gasLimit: testGasLimit, - txMsg: testdata.NewTestMsg(addr1), - txCheck: true, - expErr: false, - }, - "globalfee contains zero coin, fee contains lower fee of zero coins's denom, globalfee also contains nonzero coin,fee contains higher fee of nonzero coins's denom, ": { - minGasPrice: minGasPrice0, - globalFee: globalfeeParamsContain0, - gasPrice: sdk.NewCoins( - sdk.NewCoin("photon", lowFeeAmt), - sdk.NewCoin("uxion", highFeeAmt)), - gasLimit: testGasLimit, - txMsg: testdata.NewTestMsg(addr1), - txCheck: true, - expErr: false, - }, - "globalfee contains zero coin, fee is all zero coins but in global fee's denom": { - minGasPrice: minGasPrice0, - globalFee: globalfeeParamsContain0, - gasPrice: sdk.NewCoins( - sdk.NewCoin("photon", sdk.ZeroInt()), - sdk.NewCoin("uxion", sdk.ZeroInt()), - ), - gasLimit: testGasLimit, - txMsg: testdata.NewTestMsg(addr1), - txCheck: true, - expErr: false, - }, - "globalfee contains zero coin, fee is higher than the nonzero coin": { - minGasPrice: minGasPrice0, - globalFee: globalfeeParamsContain0, - gasPrice: sdk.NewCoins(sdk.NewCoin("photon", highFeeAmt)), - gasLimit: testGasLimit, - txMsg: testdata.NewTestMsg(addr1), - txCheck: true, expErr: false, }, "bypass msg type: ibc.core.channel.v1.MsgRecvPacket": { @@ -497,7 +193,7 @@ func (s *IntegrationTestSuite) TestGlobalFeeMinimumGasFeeAnteHandler() { txMsg: ibcchanneltypes.NewMsgTimeout( ibcchanneltypes.Packet{}, 2, nil, ibcclienttypes.Height{}, ""), txCheck: true, - expErr: true, + expErr: false, }, "bypass msg gas usage equals to maxTotalBypassMinFeeMsgGasUsage": { minGasPrice: minGasPrice, @@ -509,100 +205,6 @@ func (s *IntegrationTestSuite) TestGlobalFeeMinimumGasFeeAnteHandler() { txCheck: true, expErr: false, }, - "msg type ibc, zero fee not in globalfee denom": { - minGasPrice: minGasPrice, - globalFee: globalfeeParamsLow, - gasPrice: sdk.NewCoins(sdk.NewCoin("photon", sdk.ZeroInt())), - gasLimit: testGasLimit, - txMsg: ibcchanneltypes.NewMsgRecvPacket( - ibcchanneltypes.Packet{}, nil, ibcclienttypes.Height{}, ""), - txCheck: true, - expErr: false, - }, - "msg type ibc, nonzero fee in globalfee denom": { - minGasPrice: minGasPrice, - globalFee: globalfeeParamsLow, - gasPrice: sdk.NewCoins(sdk.NewCoin("uxion", highFeeAmt)), - gasLimit: testGasLimit, - txMsg: ibcchanneltypes.NewMsgRecvPacket( - ibcchanneltypes.Packet{}, nil, ibcclienttypes.Height{}, ""), - txCheck: true, - expErr: false, - }, - "msg type ibc, nonzero fee not in globalfee denom": { - minGasPrice: minGasPrice, - globalFee: globalfeeParamsLow, - gasPrice: sdk.NewCoins(sdk.NewCoin("photon", highFeeAmt)), - gasLimit: testGasLimit, - txMsg: ibcchanneltypes.NewMsgRecvPacket( - ibcchanneltypes.Packet{}, nil, ibcclienttypes.Height{}, ""), - txCheck: true, - expErr: true, - }, - "msg type ibc, empty fee": { - minGasPrice: minGasPrice, - globalFee: globalfeeParamsLow, - gasPrice: sdk.Coins{}, - gasLimit: testGasLimit, - txMsg: ibcchanneltypes.NewMsgRecvPacket( - ibcchanneltypes.Packet{}, nil, ibcclienttypes.Height{}, ""), - txCheck: true, - expErr: false, - }, - "msg type non-ibc, nonzero fee in globalfee denom": { - minGasPrice: minGasPrice, - globalFee: globalfeeParamsLow, - gasPrice: sdk.NewCoins(sdk.NewCoin("uxion", highFeeAmt)), - gasLimit: testGasLimit, - txMsg: testdata.NewTestMsg(addr1), - txCheck: true, - expErr: false, - }, - "msg type non-ibc, empty fee": { - minGasPrice: minGasPrice, - globalFee: globalfeeParamsLow, - gasPrice: sdk.Coins{}, - gasLimit: testGasLimit, - txMsg: testdata.NewTestMsg(addr1), - txCheck: true, - expErr: true, - }, - "msg type non-ibc, nonzero fee not in globalfee denom": { - minGasPrice: minGasPrice, - globalFee: globalfeeParamsLow, - gasPrice: sdk.NewCoins(sdk.NewCoin("photon", highFeeAmt)), - gasLimit: testGasLimit, - txMsg: testdata.NewTestMsg(addr1), - txCheck: true, - expErr: true, - }, - "disable checkTx: min_gas_price is medium, global fee is low, tx fee is low": { - minGasPrice: minGasPrice, - globalFee: globalfeeParamsLow, - gasPrice: sdk.NewCoins(sdk.NewCoin("uxion", lowFeeAmt)), - gasLimit: testGasLimit, - txMsg: testdata.NewTestMsg(addr1), - txCheck: false, - expErr: false, - }, - "disable checkTx: min_gas_price is medium, global fee is low, tx is zero": { - minGasPrice: minGasPrice, - globalFee: globalfeeParamsLow, - gasPrice: sdk.NewCoins(sdk.NewCoin("uxion", sdk.ZeroInt())), - gasLimit: testGasLimit, - txMsg: testdata.NewTestMsg(addr1), - txCheck: false, - expErr: true, - }, - "disable checkTx: min_gas_price is low, global fee is low, tx fee's denom is not in global fees denoms set": { - minGasPrice: minGasPrice, - globalFee: globalfeeParamsLow, - gasPrice: sdk.NewCoins(sdk.NewCoin("quark", sdk.ZeroInt())), - gasLimit: testGasLimit, - txMsg: testdata.NewTestMsg(addr1), - txCheck: false, - expErr: true, - }, } globalfeeParams := &globfeetypes.Params{ @@ -617,7 +219,6 @@ func (s *IntegrationTestSuite) TestGlobalFeeMinimumGasFeeAnteHandler() { _, antehandler := s.SetupTestGlobalFeeStoreAndMinGasPrice(tc.minGasPrice, globalfeeParams, bondDenom) // set fee decorator to ante handler - s.Require().NoError(s.txBuilder.SetMsgs(tc.txMsg)) s.txBuilder.SetFeeAmount(tc.gasPrice) s.txBuilder.SetGasLimit(tc.gasLimit) @@ -635,139 +236,6 @@ func (s *IntegrationTestSuite) TestGlobalFeeMinimumGasFeeAnteHandler() { } } -// Test how the operator fees are determined using various min gas prices. -// -// Note that in a real Gaia deployment all zero coins can be removed from minGasPrice. -// This sanitizing happens when the minGasPrice is set into the context. -// (see baseapp.SetMinGasPrices in gaia/cmd/root.go line 221) -func (s *IntegrationTestSuite) TestGetMinGasPrice() { - expCoins := sdk.Coins{ - sdk.NewCoin("photon", sdk.NewInt(2000)), - sdk.NewCoin("uxion", sdk.NewInt(3000)), - } - - testCases := []struct { - name string - minGasPrice []sdk.DecCoin - feeTxGasLimit uint64 - expCoins sdk.Coins - }{ - { - "empty min gas price should return empty coins", - []sdk.DecCoin{}, - uint64(1000), - sdk.Coins{}, - }, - { - "zero coins min gas price should return empty coins", - []sdk.DecCoin{ - sdk.NewDecCoinFromDec("stake", sdk.NewDec(0)), - sdk.NewDecCoinFromDec("uxion", sdk.NewDec(0)), - }, - uint64(1000), - sdk.Coins{}, - }, - { - "zero coins, non-zero coins mix should return zero coin and non-zero coins", - []sdk.DecCoin{ - sdk.NewDecCoinFromDec("stake", sdk.NewDec(0)), - sdk.NewDecCoinFromDec("uxion", sdk.NewDec(1)), - }, - uint64(1000), - sdk.Coins{ - sdk.NewCoin("stake", sdk.NewInt(0)), - sdk.NewCoin("uxion", sdk.NewInt(1000)), - }, - }, - - { - "unsorted min gas price should return sorted coins", - []sdk.DecCoin{ - sdk.NewDecCoinFromDec("uxion", sdk.NewDec(3)), - sdk.NewDecCoinFromDec("photon", sdk.NewDec(2)), - }, - uint64(1000), - expCoins, - }, - { - "sorted min gas price should return same conins", - []sdk.DecCoin{ - sdk.NewDecCoinFromDec("photon", sdk.NewDec(2)), - sdk.NewDecCoinFromDec("uxion", sdk.NewDec(3)), - }, - uint64(1000), - expCoins, - }, - } - - for _, tc := range testCases { - s.Run(tc.name, func() { - s.SetupTestGlobalFeeStoreAndMinGasPrice(tc.minGasPrice, &globfeetypes.Params{}, bondDenom) - - fees := xionfeeante.GetMinGasPrice(s.ctx, int64(tc.feeTxGasLimit)) - s.Require().True(tc.expCoins.Sort().IsEqual(fees)) - }) - } -} - -func (s *IntegrationTestSuite) TestContainsOnlyBypassMinFeeMsgs() { - // set globalfees params and min gas price - globalfeeParams := &globfeetypes.Params{ - BypassMinFeeMsgTypes: globfeetypes.DefaultBypassMinFeeMsgTypes, - MaxTotalBypassMinFeeMsgGasUsage: globfeetypes.DefaultmaxTotalBypassMinFeeMsgGasUsage, - } - feeDecorator, _ := s.SetupTestGlobalFeeStoreAndMinGasPrice([]sdk.DecCoin{}, globalfeeParams, bondDenom) - testCases := []struct { - name string - msgs []sdk.Msg - expPass bool - }{ - { - "expect empty msgs to pass", - []sdk.Msg{}, - true, - }, - { - "expect default bypass msg to pass", - []sdk.Msg{ - ibcchanneltypes.NewMsgRecvPacket(ibcchanneltypes.Packet{}, nil, ibcclienttypes.Height{}, ""), - ibcchanneltypes.NewMsgAcknowledgement(ibcchanneltypes.Packet{}, []byte{1}, []byte{1}, ibcclienttypes.Height{}, ""), - }, - true, - }, - { - "expect default bypass msgs to pass", - []sdk.Msg{ - ibcchanneltypes.NewMsgRecvPacket(ibcchanneltypes.Packet{}, nil, ibcclienttypes.Height{}, ""), - ibcchanneltypes.NewMsgAcknowledgement(ibcchanneltypes.Packet{}, []byte{1}, []byte{1}, ibcclienttypes.Height{}, ""), - }, - true, - }, - { - "msgs contain non-bypass msg - should not pass", - []sdk.Msg{ - ibcchanneltypes.NewMsgRecvPacket(ibcchanneltypes.Packet{}, nil, ibcclienttypes.Height{}, ""), - stakingtypes.NewMsgDelegate(sdk.AccAddress{}, sdk.ValAddress{}, sdk.Coin{}), - }, - false, - }, - { - "msgs contain only non-bypass msgs - should not pass", - []sdk.Msg{ - stakingtypes.NewMsgDelegate(sdk.AccAddress{}, sdk.ValAddress{}, sdk.Coin{}), - }, - false, - }, - } - - for _, tc := range testCases { - s.Run(tc.name, func() { - res := feeDecorator.ContainsOnlyBypassMinFeeMsgs(s.ctx, tc.msgs) - s.Require().True(tc.expPass == res) - }) - } -} - func (s *IntegrationTestSuite) TestGetTxFeeRequired() { // create global fee params globalfeeParamsEmpty := &globfeetypes.Params{MinimumGasPrices: []sdk.DecCoin{}} diff --git a/x/globalfee/ante/fee.go b/x/globalfee/ante/fee.go index c9a3d313..f7eb3666 100644 --- a/x/globalfee/ante/fee.go +++ b/x/globalfee/ante/fee.go @@ -2,7 +2,6 @@ package ante import ( "errors" - "fmt" tmstrings "github.com/cometbft/cometbft/libs/strings" sdk "github.com/cosmos/cosmos-sdk/types" @@ -61,90 +60,11 @@ func (mfd FeeDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, ne return ctx, err } - // reject the transaction early if the feeCoins have more denoms than the fee requirement - // feeRequired cannot be empty - if feeTx.GetFee().Len() > feeRequired.Len() { - return ctx, sdkerrors.Wrapf(sdkerrors.ErrInvalidCoins, "fee is not a subset of required fees; got %s, required: %s", feeTx.GetFee().String(), feeRequired.String()) - } - - // Sort fee tx's coins, zero coins in feeCoins are already removed - feeCoins := feeTx.GetFee().Sort() - gas := feeTx.GetGas() - msgs := feeTx.GetMsgs() - - // split feeRequired into zero and non-zero coins(nonZeroCoinFeesReq, zeroCoinFeesDenomReq), split feeCoins according to - // nonZeroCoinFeesReq, zeroCoinFeesDenomReq, - // so that feeCoins can be checked separately against them. - nonZeroCoinFeesReq, zeroCoinFeesDenomReq := getNonZeroFees(feeRequired) - - // feeCoinsNonZeroDenom contains non-zero denominations from the feeRequired - // feeCoinsNonZeroDenom is used to check if the fees meets the requirement imposed by nonZeroCoinFeesReq - // when feeCoins does not contain zero coins' denoms in feeRequired - feeCoinsNonZeroDenom, feeCoinsZeroDenom := splitCoinsByDenoms(feeCoins, zeroCoinFeesDenomReq) - - // Check that the fees are in expected denominations. - // according to splitCoinsByDenoms(), feeCoinsZeroDenom must be in denom subset of zeroCoinFeesDenomReq. - // check if feeCoinsNonZeroDenom is a subset of nonZeroCoinFeesReq. - // special case: if feeCoinsNonZeroDenom=[], DenomsSubsetOf returns true - // special case: if feeCoinsNonZeroDenom is not empty, but nonZeroCoinFeesReq empty, return false - if !feeCoinsNonZeroDenom.DenomsSubsetOf(nonZeroCoinFeesReq) { - return ctx, sdkerrors.Wrapf(sdkerrors.ErrInsufficientFee, "fee is not a subset of required fees; got %s, required: %s", feeCoins.String(), feeRequired.String()) - } - - // If the feeCoins pass the denoms check, check they are bypass-msg types. - // - // Bypass min fee requires: - // - the tx contains only message types that can bypass the minimum fee, - // see BypassMinFeeMsgTypes; - // - the total gas limit per message does not exceed MaxTotalBypassMinFeeMsgGasUsage, - // i.e., totalGas <= MaxTotalBypassMinFeeMsgGasUsage - // Otherwise, minimum fees and global fees are checked to prevent spam. - maxTotalBypassMinFeeMsgGasUsage := mfd.GetMaxTotalBypassMinFeeMsgGasUsage(ctx) - doesNotExceedMaxGasUsage := gas <= maxTotalBypassMinFeeMsgGasUsage - allBypassMsgs := mfd.ContainsOnlyBypassMinFeeMsgs(ctx, msgs) - allowedToBypassMinFee := allBypassMsgs && doesNotExceedMaxGasUsage - - if allowedToBypassMinFee { + // If message should be bypassed short-circuit, don't modify gas + if mfd.ContainsOnlyBypassMinFeeMsgs(ctx, feeTx.GetMsgs()) { return next(ctx, tx, simulate) } - - // if the msg does not satisfy bypass condition and the feeCoins denoms are subset of feeRequired, - // check the feeCoins amount against feeRequired - // - // when feeCoins=[] - // special case: and there is zero coin in fee requirement, pass, - // otherwise, err - if len(feeCoins) == 0 { - if len(zeroCoinFeesDenomReq) != 0 { - return next(ctx, tx, simulate) - } - return ctx, sdkerrors.Wrapf(sdkerrors.ErrInsufficientFee, "insufficient fees; got: %s required: %s", feeCoins.String(), feeRequired.String()) - } - - // when feeCoins != [] - // special case: if TX has at least one of the zeroCoinFeesDenomReq, then it should pass - if len(feeCoinsZeroDenom) > 0 { - return next(ctx, tx, simulate) - } - - // After all the checks, the tx is confirmed: - // feeCoins denoms subset off feeRequired - // Not bypass - // feeCoins != [] - // Not contain zeroCoinFeesDenomReq's denoms - // - // check if the feeCoins's feeCoinsNonZeroDenom part has coins' amount higher/equal to nonZeroCoinFeesReq - if !feeCoinsNonZeroDenom.IsAnyGTE(nonZeroCoinFeesReq) { - errMsg := fmt.Sprintf("Insufficient fees; got: %s required: %s", feeCoins.String(), feeRequired.String()) - if allBypassMsgs && !doesNotExceedMaxGasUsage { - errMsg = fmt.Sprintf("Insufficient fees; bypass-min-fee-msg-types with gas consumption %v exceeds the maximum allowed gas value of %v.", gas, maxTotalBypassMinFeeMsgGasUsage) - } - - return ctx, sdkerrors.Wrap(sdkerrors.ErrInsufficientFee, errMsg) - } - - // we should pick max between feeRequired & tx Fee - return next(ctx, tx, simulate) + return next(ctx.WithMinGasPrices(sdk.NewDecCoinsFromCoins(feeRequired...)), tx, simulate) } // GetTxFeeRequired returns the required fees for the given FeeTx. From 97cd1dd8064557274c620ef3ae2e2f5f3022227e Mon Sep 17 00:00:00 2001 From: Eduardo Diaz Date: Tue, 8 Aug 2023 18:43:07 -0400 Subject: [PATCH 154/501] simplify short-circuit --- x/globalfee/ante/antetest/fee_test.go | 10 ---------- x/globalfee/ante/fee.go | 7 ++----- 2 files changed, 2 insertions(+), 15 deletions(-) diff --git a/x/globalfee/ante/antetest/fee_test.go b/x/globalfee/ante/antetest/fee_test.go index aee6e554..0071d5e2 100644 --- a/x/globalfee/ante/antetest/fee_test.go +++ b/x/globalfee/ante/antetest/fee_test.go @@ -51,10 +51,6 @@ func (s *IntegrationTestSuite) TestGlobalFeeSetAnteHandler() { sdk.NewDecCoinFromDec("photon", sdk.NewDec(0)), sdk.NewDecCoinFromDec("uxion", sdk.NewDec(0)), } - // globalfeeParamsContain0 := []sdk.DecCoin{ - // sdk.NewDecCoinFromDec("photon", med), - // sdk.NewDecCoinFromDec("uxion", sdk.NewDec(0)), - // } minGasPrice0 := []sdk.DecCoin{ sdk.NewDecCoinFromDec("stake", sdk.NewDec(0)), sdk.NewDecCoinFromDec("uxion", sdk.NewDec(0)), @@ -65,16 +61,10 @@ func (s *IntegrationTestSuite) TestGlobalFeeSetAnteHandler() { } minGasPrice := []sdk.DecCoin{ sdk.NewDecCoinFromDec("uxion", med), - //sdk.NewDecCoinFromDec("stake", med), } globalfeeParamsLow := []sdk.DecCoin{ sdk.NewDecCoinFromDec("uxion", low), } - // global fee must be sorted in denom - // globalfeeParamsNewDenom := []sdk.DecCoin{ - // sdk.NewDecCoinFromDec("photon", high), - // sdk.NewDecCoinFromDec("quark", high), - // } testCases := map[string]struct { minGasPrice []sdk.DecCoin diff --git a/x/globalfee/ante/fee.go b/x/globalfee/ante/fee.go index f7eb3666..730165a6 100644 --- a/x/globalfee/ante/fee.go +++ b/x/globalfee/ante/fee.go @@ -50,7 +50,8 @@ func (mfd FeeDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, ne } // Do not check minimum-gas-prices and global fees during simulations - if simulate { + // short-circuit bypass messages + if simulate || mfd.ContainsOnlyBypassMinFeeMsgs(ctx, feeTx.GetMsgs()) { return next(ctx, tx, simulate) } @@ -60,10 +61,6 @@ func (mfd FeeDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, ne return ctx, err } - // If message should be bypassed short-circuit, don't modify gas - if mfd.ContainsOnlyBypassMinFeeMsgs(ctx, feeTx.GetMsgs()) { - return next(ctx, tx, simulate) - } return next(ctx.WithMinGasPrices(sdk.NewDecCoinsFromCoins(feeRequired...)), tx, simulate) } From bfa70ec2cbb0e53964dda5bf2bff984592a983e1 Mon Sep 17 00:00:00 2001 From: Ash Date: Sun, 13 Aug 2023 11:52:14 +0200 Subject: [PATCH 155/501] switch to osmosis branch --- app/ante.go | 4 ++-- app/app.go | 6 +++--- go.mod | 2 +- go.sum | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/app/ante.go b/app/ante.go index 1f86dec0..b37c3b3d 100644 --- a/app/ante.go +++ b/app/ante.go @@ -13,8 +13,8 @@ import ( "github.com/cosmos/ibc-go/v7/modules/core/keeper" "github.com/larry0x/abstract-account/x/abstractaccount" aakeeper "github.com/larry0x/abstract-account/x/abstractaccount/keeper" - feeabsante "github.com/notional-labs/fee-abstraction/v4/x/feeabs/ante" - feeabskeeper "github.com/notional-labs/fee-abstraction/v4/x/feeabs/keeper" + feeabsante "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/ante" + feeabskeeper "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/keeper" wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" wasmTypes "github.com/CosmWasm/wasmd/x/wasm/types" diff --git a/app/app.go b/app/app.go index 93779e5c..5894e189 100644 --- a/app/app.go +++ b/app/app.go @@ -126,9 +126,9 @@ import ( aa "github.com/larry0x/abstract-account/x/abstractaccount" aakeeper "github.com/larry0x/abstract-account/x/abstractaccount/keeper" aatypes "github.com/larry0x/abstract-account/x/abstractaccount/types" - "github.com/notional-labs/fee-abstraction/v4/x/feeabs" - feeabskeeper "github.com/notional-labs/fee-abstraction/v4/x/feeabs/keeper" - feeabstypes "github.com/notional-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs" + feeabskeeper "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/keeper" + feeabstypes "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" "github.com/spf13/cast" diff --git a/go.mod b/go.mod index 03a02538..d771ba37 100644 --- a/go.mod +++ b/go.mod @@ -46,7 +46,7 @@ require ( github.com/cosmos/ibc-apps/modules/ibc-hooks/v7 v7.0.0-20230802211043-d72e83c94350 github.com/golang/mock v1.6.0 github.com/larry0x/abstract-account v0.0.0-20230708200055-2ea462db913f - github.com/notional-labs/fee-abstraction/v4 v4.0.0-20230803210815-7afad2bae25c + github.com/osmosis-labs/fee-abstraction/v4 v4.0.0-20230812032455-33dfc391894d github.com/spf13/viper v1.16.0 gotest.tools/v3 v3.5.0 sigs.k8s.io/yaml v1.3.0 diff --git a/go.sum b/go.sum index a0372d0b..ef9ebfbf 100644 --- a/go.sum +++ b/go.sum @@ -772,8 +772,6 @@ github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxzi github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/notional-labs/fee-abstraction/v4 v4.0.0-20230803210815-7afad2bae25c h1:UJ1Ww4n33Q4nNrU+8WzYxlt/nXCF1OlhTlG4IcYZs7Y= -github.com/notional-labs/fee-abstraction/v4 v4.0.0-20230803210815-7afad2bae25c/go.mod h1:yxwbFZEeQ+G7egDdOip9NQnfEhzCVzCZ5dI6sQELsrs= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= @@ -802,6 +800,8 @@ github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJ github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA= +github.com/osmosis-labs/fee-abstraction/v4 v4.0.0-20230812032455-33dfc391894d h1:eZXJY4RbQa91pvCMBlTZTQF/IEze77HDnkiD11XGeK8= +github.com/osmosis-labs/fee-abstraction/v4 v4.0.0-20230812032455-33dfc391894d/go.mod h1:CzRKibzIA2HLYlnTtryB3GTtifCwAVVMgfVzQN1Sirs= github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= From 9f4672971c52bfb22c28250e5d69b9e4228bb559 Mon Sep 17 00:00:00 2001 From: Ash Date: Thu, 17 Aug 2023 15:16:58 +0200 Subject: [PATCH 156/501] add upgrade for fee abstraction --- app/app.go | 5 +++-- app/upgrades/v3/constants.go | 23 +++++++++++++++++++++++ app/upgrades/v3/upgrades.go | 24 ++++++++++++++++++++++++ 3 files changed, 50 insertions(+), 2 deletions(-) create mode 100644 app/upgrades/v3/constants.go create mode 100644 app/upgrades/v3/upgrades.go diff --git a/app/app.go b/app/app.go index 5894e189..d50d91ca 100644 --- a/app/app.go +++ b/app/app.go @@ -11,6 +11,7 @@ import ( autocliv1 "cosmossdk.io/api/cosmos/autocli/v1" reflectionv1 "cosmossdk.io/api/cosmos/reflection/v1" + "github.com/burnt-labs/xion/x/globalfee" dbm "github.com/cometbft/cometbft-db" abci "github.com/cometbft/cometbft/abci/types" "github.com/cometbft/cometbft/libs/log" @@ -145,7 +146,7 @@ import ( xiontypes "github.com/burnt-labs/xion/x/xion/types" v2 "github.com/burnt-labs/xion/app/upgrades/v2" - "github.com/burnt-labs/xion/x/globalfee" + v3 "github.com/burnt-labs/xion/app/upgrades/v3" ) const appName = "XionApp" @@ -162,7 +163,7 @@ var ( // of "EnableAllProposals" (takes precedence over ProposalsEnabled) // https://github.com/CosmWasm/wasmd/blob/02a54d33ff2c064f3539ae12d75d027d9c665f05/x/wasm/internal/types/proposal.go#L28-L34 EnableSpecificProposals = "" - Upgrades = []upgrades.Upgrade{v2.Upgrade} + Upgrades = []upgrades.Upgrade{v2.Upgrade, v3.Upgrade} ) // GetEnabledProposals parses the ProposalsEnabled / EnableSpecificProposals values to diff --git a/app/upgrades/v3/constants.go b/app/upgrades/v3/constants.go new file mode 100644 index 00000000..c42a2252 --- /dev/null +++ b/app/upgrades/v3/constants.go @@ -0,0 +1,23 @@ +package v2 + +import ( + store "github.com/cosmos/cosmos-sdk/store/types" + feeabstypes "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + + "github.com/burnt-labs/xion/app/upgrades" +) + +const ( + // UpgradeName defines the on-chain upgrade name. + UpgradeName = "v3" +) + +var Upgrade = upgrades.Upgrade{ + UpgradeName: UpgradeName, + CreateUpgradeHandler: CreateUpgradeHandler, + StoreUpgrades: store.StoreUpgrades{ + Added: []string{ + feeabstypes.ModuleName, + }, + }, +} diff --git a/app/upgrades/v3/upgrades.go b/app/upgrades/v3/upgrades.go new file mode 100644 index 00000000..f185b771 --- /dev/null +++ b/app/upgrades/v3/upgrades.go @@ -0,0 +1,24 @@ +package v2 + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" + upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" +) + +func CreateUpgradeHandler( + mm *module.Manager, + configurator module.Configurator, +) upgradetypes.UpgradeHandler { + return func(ctx sdk.Context, plan upgradetypes.Plan, vm module.VersionMap) (module.VersionMap, error) { + ctx.Logger().Info("Starting module migrations...") + + vm, err := mm.RunMigrations(ctx, configurator, vm) + if err != nil { + return vm, err + } + + ctx.Logger().Info("Upgrade complete") + return vm, err + } +} From 7e0d629b3e65f524e94cd4aeddb6cfda3f582a5c Mon Sep 17 00:00:00 2001 From: Ash Date: Thu, 17 Aug 2023 18:21:22 +0200 Subject: [PATCH 157/501] incorrect package name --- app/app.go | 3 +- app/upgrades/v3/constants.go | 2 +- app/upgrades/v3/upgrades.go | 2 +- x/xion/client/cli/tx.go | 205 ++++++++++++++++++++++++++++++++++- 4 files changed, 207 insertions(+), 5 deletions(-) diff --git a/app/app.go b/app/app.go index d50d91ca..410ef5d3 100644 --- a/app/app.go +++ b/app/app.go @@ -145,7 +145,6 @@ import ( xionkeeper "github.com/burnt-labs/xion/x/xion/keeper" xiontypes "github.com/burnt-labs/xion/x/xion/types" - v2 "github.com/burnt-labs/xion/app/upgrades/v2" v3 "github.com/burnt-labs/xion/app/upgrades/v3" ) @@ -163,7 +162,7 @@ var ( // of "EnableAllProposals" (takes precedence over ProposalsEnabled) // https://github.com/CosmWasm/wasmd/blob/02a54d33ff2c064f3539ae12d75d027d9c665f05/x/wasm/internal/types/proposal.go#L28-L34 EnableSpecificProposals = "" - Upgrades = []upgrades.Upgrade{v2.Upgrade, v3.Upgrade} + Upgrades = []upgrades.Upgrade{v3.Upgrade} ) // GetEnabledProposals parses the ProposalsEnabled / EnableSpecificProposals values to diff --git a/app/upgrades/v3/constants.go b/app/upgrades/v3/constants.go index c42a2252..aaf1b198 100644 --- a/app/upgrades/v3/constants.go +++ b/app/upgrades/v3/constants.go @@ -1,4 +1,4 @@ -package v2 +package v3 import ( store "github.com/cosmos/cosmos-sdk/store/types" diff --git a/app/upgrades/v3/upgrades.go b/app/upgrades/v3/upgrades.go index f185b771..70eebba8 100644 --- a/app/upgrades/v3/upgrades.go +++ b/app/upgrades/v3/upgrades.go @@ -1,4 +1,4 @@ -package v2 +package v3 import ( sdk "github.com/cosmos/cosmos-sdk/types" diff --git a/x/xion/client/cli/tx.go b/x/xion/client/cli/tx.go index 6d267a6a..227f8675 100644 --- a/x/xion/client/cli/tx.go +++ b/x/xion/client/cli/tx.go @@ -13,7 +13,9 @@ import ( banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" ) -var FlagSplit = "split" +const ( + FlagSplit = "split" +) // NewTxCmd returns a root CLI command handler for all x/xion transaction commands. func NewTxCmd() *cobra.Command { @@ -143,3 +145,204 @@ When using '--dry-run' a key name cannot be used, only a bech32 address. return cmd } + +// GetSignCommand returns the transaction sign command. +func GetSignCommand() *cobra.Command { + cmd := &cobra.Command{ + Use: "sign [file]", + Short: "Sign a transaction generated offline", + Long: `Sign a transaction created with the --generate-only flag. +It will read a transaction from [file], sign it, and print its JSON encoding. + +If the --signature-only flag is set, it will output the signature parts only. + +The --offline flag makes sure that the client will not reach out to full node. +As a result, the account and sequence number queries will not be performed and +it is required to set such parameters manually. Note, invalid values will cause +the transaction to fail. + +The --multisig= flag generates a signature on behalf of a multisig account +key. It implies --signature-only. Full multisig signed transactions may eventually +be generated via the 'multisign' command. +`, + PreRun: preSignCmd, + RunE: makeSignCmd(), + Args: cobra.ExactArgs(1), + } + + cmd.Flags().String(flagMultisig, "", "Address or key name of the multisig account on behalf of which the transaction shall be signed") + cmd.Flags().Bool(flagOverwrite, false, "Overwrite existing signatures with a new one. If disabled, new signature will be appended") + cmd.Flags().Bool(flagSigOnly, false, "Print only the signatures") + cmd.Flags().String(flags.FlagOutputDocument, "", "The document will be written to the given file instead of STDOUT") + cmd.Flags().Bool(flagAmino, false, "Generate Amino encoded JSON suitable for submiting to the txs REST endpoint") + flags.AddTxFlagsToCmd(cmd) + + cmd.MarkFlagRequired(flags.FlagFrom) + + return cmd +} + +func preSignCmd(cmd *cobra.Command, _ []string) { + // Conditionally mark the account and sequence numbers required as no RPC + // query will be done. + if offline, _ := cmd.Flags().GetBool(flags.FlagOffline); offline { + cmd.MarkFlagRequired(flags.FlagAccountNumber) + cmd.MarkFlagRequired(flags.FlagSequence) + } +} + +func makeSignCmd() func(cmd *cobra.Command, args []string) error { + return func(cmd *cobra.Command, args []string) (err error) { + var clientCtx client.Context + + clientCtx, err = client.GetClientTxContext(cmd) + if err != nil { + return err + } + + clientCtx, txF, newTx, err := readTxAndInitContexts(clientCtx, cmd, args[0]) + if err != nil { + return err + } + + return signTx(cmd, clientCtx, txF, newTx) + } +} + +func signTx(cmd *cobra.Command, clientCtx client.Context, txF tx.Factory, newTx sdk.Tx) error { + f := cmd.Flags() + txCfg := clientCtx.TxConfig + txBuilder, err := txCfg.WrapTxBuilder(newTx) + if err != nil { + return err + } + + printSignatureOnly, err := cmd.Flags().GetBool(flagSigOnly) + if err != nil { + return err + } + + multisig, err := cmd.Flags().GetString(flagMultisig) + if err != nil { + return err + } + + from, err := cmd.Flags().GetString(flags.FlagFrom) + if err != nil { + return err + } + + _, fromName, _, err := client.GetFromFields(clientCtx, txF.Keybase(), from) + if err != nil { + return fmt.Errorf("error getting account from keybase: %w", err) + } + + overwrite, err := f.GetBool(flagOverwrite) + if err != nil { + return err + } + + if multisig != "" { + // Bech32 decode error, maybe it's a name, we try to fetch from keyring + multisigAddr, multisigName, _, err := client.GetFromFields(clientCtx, txF.Keybase(), multisig) + if err != nil { + return fmt.Errorf("error getting account from keybase: %w", err) + } + multisigkey, err := getMultisigRecord(clientCtx, multisigName) + if err != nil { + return err + } + multisigPubKey, err := multisigkey.GetPubKey() + if err != nil { + return err + } + multisigLegacyPub := multisigPubKey.(*kmultisig.LegacyAminoPubKey) + + fromRecord, err := clientCtx.Keyring.Key(fromName) + if err != nil { + return fmt.Errorf("error getting account from keybase: %w", err) + } + fromPubKey, err := fromRecord.GetPubKey() + if err != nil { + return err + } + + var found bool + for _, pubkey := range multisigLegacyPub.GetPubKeys() { + if pubkey.Equals(fromPubKey) { + found = true + } + } + if !found { + return fmt.Errorf("signing key is not a part of multisig key") + } + err = authclient.SignTxWithSignerAddress( + txF, clientCtx, multisigAddr, fromName, txBuilder, clientCtx.Offline, overwrite) + if err != nil { + return err + } + printSignatureOnly = true + } else { + err = authclient.SignTx(txF, clientCtx, clientCtx.GetFromName(), txBuilder, clientCtx.Offline, overwrite) + } + if err != nil { + return err + } + + aminoJSON, err := f.GetBool(flagAmino) + if err != nil { + return err + } + + bMode, err := f.GetString(flags.FlagBroadcastMode) + if err != nil { + return err + } + + // set output + closeFunc, err := setOutputFile(cmd) + if err != nil { + return err + } + + defer closeFunc() + clientCtx.WithOutput(cmd.OutOrStdout()) + + var json []byte + if aminoJSON { + stdTx, err := tx.ConvertTxToStdTx(clientCtx.LegacyAmino, txBuilder.GetTx()) + if err != nil { + return err + } + req := BroadcastReq{ + Tx: stdTx, + Mode: bMode, + } + json, err = clientCtx.LegacyAmino.MarshalJSON(req) + if err != nil { + return err + } + } else { + json, err = marshalSignatureJSON(txCfg, txBuilder, printSignatureOnly) + if err != nil { + return err + } + } + + cmd.Printf("%s\n", json) + + return err +} + +func marshalSignatureJSON(txConfig client.TxConfig, txBldr client.TxBuilder, signatureOnly bool) ([]byte, error) { + parsedTx := txBldr.GetTx() + if signatureOnly { + sigs, err := parsedTx.GetSignaturesV2() + if err != nil { + return nil, err + } + return txConfig.MarshalSignatureJSON(sigs) + } + + return txConfig.TxJSONEncoder()(parsedTx) +} From 7f01604f1c45a952d228bd6c578aa35444ced9a7 Mon Sep 17 00:00:00 2001 From: Ash Date: Thu, 17 Aug 2023 18:23:47 +0200 Subject: [PATCH 158/501] test comment --- integration_tests/upgrade_test.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/integration_tests/upgrade_test.go b/integration_tests/upgrade_test.go index 84327c38..442f2940 100644 --- a/integration_tests/upgrade_test.go +++ b/integration_tests/upgrade_test.go @@ -27,9 +27,9 @@ const ( * 6- cd integration_test * 7- XION_IMAGE=[current version of the network] go test -run TestXionUpgradeIBC ./... -As of July 25 2023 this is the necceary process to run this test, this is due to the fact that AWS & docker-hub auto deleting old images, therefore you might lose what the version currently running is image wise -current-testnet: 2722f0fb1234db97e9bf9b98f744675eb8fb1b26 -upgrade-version: fea049d291dde5dd76d55aca6312d59a0aee414d +As of Aug 17 2023 this is the necessary process to run this test, this is due to the fact that AWS & docker-hub auto deleting old images, therefore you might lose what the version currently running is image wise +current-testnet: 455cfa5b78e79e1c50867f6d61a99b0e9df6b9b1 +upgrade-version: 7e0d629b3e65f524e94cd4aeddb6cfda3f582a5c */ func TestXionUpgradeIBC(t *testing.T) { CosmosChainUpgradeIBCTest(t, "xion", "current", "xion", "upgrade", "v0.3.0") From ac20c280ea529e81a89dbd162ca73a5f0ad3b26d Mon Sep 17 00:00:00 2001 From: Ash Date: Thu, 17 Aug 2023 18:32:24 +0200 Subject: [PATCH 159/501] remove cli work --- x/xion/client/cli/tx.go | 205 +--------------------------------------- 1 file changed, 1 insertion(+), 204 deletions(-) diff --git a/x/xion/client/cli/tx.go b/x/xion/client/cli/tx.go index 227f8675..52404e8c 100644 --- a/x/xion/client/cli/tx.go +++ b/x/xion/client/cli/tx.go @@ -13,9 +13,7 @@ import ( banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" ) -const ( - FlagSplit = "split" -) +const FlagSplit = "split" // NewTxCmd returns a root CLI command handler for all x/xion transaction commands. func NewTxCmd() *cobra.Command { @@ -145,204 +143,3 @@ When using '--dry-run' a key name cannot be used, only a bech32 address. return cmd } - -// GetSignCommand returns the transaction sign command. -func GetSignCommand() *cobra.Command { - cmd := &cobra.Command{ - Use: "sign [file]", - Short: "Sign a transaction generated offline", - Long: `Sign a transaction created with the --generate-only flag. -It will read a transaction from [file], sign it, and print its JSON encoding. - -If the --signature-only flag is set, it will output the signature parts only. - -The --offline flag makes sure that the client will not reach out to full node. -As a result, the account and sequence number queries will not be performed and -it is required to set such parameters manually. Note, invalid values will cause -the transaction to fail. - -The --multisig= flag generates a signature on behalf of a multisig account -key. It implies --signature-only. Full multisig signed transactions may eventually -be generated via the 'multisign' command. -`, - PreRun: preSignCmd, - RunE: makeSignCmd(), - Args: cobra.ExactArgs(1), - } - - cmd.Flags().String(flagMultisig, "", "Address or key name of the multisig account on behalf of which the transaction shall be signed") - cmd.Flags().Bool(flagOverwrite, false, "Overwrite existing signatures with a new one. If disabled, new signature will be appended") - cmd.Flags().Bool(flagSigOnly, false, "Print only the signatures") - cmd.Flags().String(flags.FlagOutputDocument, "", "The document will be written to the given file instead of STDOUT") - cmd.Flags().Bool(flagAmino, false, "Generate Amino encoded JSON suitable for submiting to the txs REST endpoint") - flags.AddTxFlagsToCmd(cmd) - - cmd.MarkFlagRequired(flags.FlagFrom) - - return cmd -} - -func preSignCmd(cmd *cobra.Command, _ []string) { - // Conditionally mark the account and sequence numbers required as no RPC - // query will be done. - if offline, _ := cmd.Flags().GetBool(flags.FlagOffline); offline { - cmd.MarkFlagRequired(flags.FlagAccountNumber) - cmd.MarkFlagRequired(flags.FlagSequence) - } -} - -func makeSignCmd() func(cmd *cobra.Command, args []string) error { - return func(cmd *cobra.Command, args []string) (err error) { - var clientCtx client.Context - - clientCtx, err = client.GetClientTxContext(cmd) - if err != nil { - return err - } - - clientCtx, txF, newTx, err := readTxAndInitContexts(clientCtx, cmd, args[0]) - if err != nil { - return err - } - - return signTx(cmd, clientCtx, txF, newTx) - } -} - -func signTx(cmd *cobra.Command, clientCtx client.Context, txF tx.Factory, newTx sdk.Tx) error { - f := cmd.Flags() - txCfg := clientCtx.TxConfig - txBuilder, err := txCfg.WrapTxBuilder(newTx) - if err != nil { - return err - } - - printSignatureOnly, err := cmd.Flags().GetBool(flagSigOnly) - if err != nil { - return err - } - - multisig, err := cmd.Flags().GetString(flagMultisig) - if err != nil { - return err - } - - from, err := cmd.Flags().GetString(flags.FlagFrom) - if err != nil { - return err - } - - _, fromName, _, err := client.GetFromFields(clientCtx, txF.Keybase(), from) - if err != nil { - return fmt.Errorf("error getting account from keybase: %w", err) - } - - overwrite, err := f.GetBool(flagOverwrite) - if err != nil { - return err - } - - if multisig != "" { - // Bech32 decode error, maybe it's a name, we try to fetch from keyring - multisigAddr, multisigName, _, err := client.GetFromFields(clientCtx, txF.Keybase(), multisig) - if err != nil { - return fmt.Errorf("error getting account from keybase: %w", err) - } - multisigkey, err := getMultisigRecord(clientCtx, multisigName) - if err != nil { - return err - } - multisigPubKey, err := multisigkey.GetPubKey() - if err != nil { - return err - } - multisigLegacyPub := multisigPubKey.(*kmultisig.LegacyAminoPubKey) - - fromRecord, err := clientCtx.Keyring.Key(fromName) - if err != nil { - return fmt.Errorf("error getting account from keybase: %w", err) - } - fromPubKey, err := fromRecord.GetPubKey() - if err != nil { - return err - } - - var found bool - for _, pubkey := range multisigLegacyPub.GetPubKeys() { - if pubkey.Equals(fromPubKey) { - found = true - } - } - if !found { - return fmt.Errorf("signing key is not a part of multisig key") - } - err = authclient.SignTxWithSignerAddress( - txF, clientCtx, multisigAddr, fromName, txBuilder, clientCtx.Offline, overwrite) - if err != nil { - return err - } - printSignatureOnly = true - } else { - err = authclient.SignTx(txF, clientCtx, clientCtx.GetFromName(), txBuilder, clientCtx.Offline, overwrite) - } - if err != nil { - return err - } - - aminoJSON, err := f.GetBool(flagAmino) - if err != nil { - return err - } - - bMode, err := f.GetString(flags.FlagBroadcastMode) - if err != nil { - return err - } - - // set output - closeFunc, err := setOutputFile(cmd) - if err != nil { - return err - } - - defer closeFunc() - clientCtx.WithOutput(cmd.OutOrStdout()) - - var json []byte - if aminoJSON { - stdTx, err := tx.ConvertTxToStdTx(clientCtx.LegacyAmino, txBuilder.GetTx()) - if err != nil { - return err - } - req := BroadcastReq{ - Tx: stdTx, - Mode: bMode, - } - json, err = clientCtx.LegacyAmino.MarshalJSON(req) - if err != nil { - return err - } - } else { - json, err = marshalSignatureJSON(txCfg, txBuilder, printSignatureOnly) - if err != nil { - return err - } - } - - cmd.Printf("%s\n", json) - - return err -} - -func marshalSignatureJSON(txConfig client.TxConfig, txBldr client.TxBuilder, signatureOnly bool) ([]byte, error) { - parsedTx := txBldr.GetTx() - if signatureOnly { - sigs, err := parsedTx.GetSignaturesV2() - if err != nil { - return nil, err - } - return txConfig.MarshalSignatureJSON(sigs) - } - - return txConfig.TxJSONEncoder()(parsedTx) -} From f94fb7b878da81ea5e37af00a62337877f24cfff Mon Sep 17 00:00:00 2001 From: Ash Date: Thu, 17 Aug 2023 18:50:48 +0200 Subject: [PATCH 160/501] test passed --- integration_tests/upgrade_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/integration_tests/upgrade_test.go b/integration_tests/upgrade_test.go index 442f2940..facbf764 100644 --- a/integration_tests/upgrade_test.go +++ b/integration_tests/upgrade_test.go @@ -32,11 +32,11 @@ current-testnet: 455cfa5b78e79e1c50867f6d61a99b0e9df6b9b1 upgrade-version: 7e0d629b3e65f524e94cd4aeddb6cfda3f582a5c */ func TestXionUpgradeIBC(t *testing.T) { - CosmosChainUpgradeIBCTest(t, "xion", "current", "xion", "upgrade", "v0.3.0") + CosmosChainUpgradeIBCTest(t, "xion", "current", "xion", "upgrade", "v3") } func CosmosChainUpgradeIBCTest(t *testing.T, chainName, initialVersion, upgradeContainerRepo, upgradeVersion string, upgradeName string) { - t.Skip("ComosChainUpgradeTest should be run manually, please comment skip and follow instructions when running") + //t.Skip("ComosChainUpgradeTest should be run manually, please comment skip and follow instructions when running") t.Parallel() From 22e9de465901d593efad96708fd79e7bc41bde30 Mon Sep 17 00:00:00 2001 From: Ash Date: Thu, 17 Aug 2023 18:51:27 +0200 Subject: [PATCH 161/501] recomment skip --- integration_tests/upgrade_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integration_tests/upgrade_test.go b/integration_tests/upgrade_test.go index facbf764..9e447ab2 100644 --- a/integration_tests/upgrade_test.go +++ b/integration_tests/upgrade_test.go @@ -36,7 +36,7 @@ func TestXionUpgradeIBC(t *testing.T) { } func CosmosChainUpgradeIBCTest(t *testing.T, chainName, initialVersion, upgradeContainerRepo, upgradeVersion string, upgradeName string) { - //t.Skip("ComosChainUpgradeTest should be run manually, please comment skip and follow instructions when running") + t.Skip("ComosChainUpgradeTest should be run manually, please comment skip and follow instructions when running") t.Parallel() From 0d9e5254b69ad9b34fc6ac71a8a1b9f21c206b01 Mon Sep 17 00:00:00 2001 From: Eduardo Diaz Date: Wed, 30 Aug 2023 11:27:43 -0400 Subject: [PATCH 162/501] repalce MaxCoins with Combine --- integration_tests/minimum_fee_test.go | 8 +------- x/globalfee/ante/fee.go | 3 ++- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/integration_tests/minimum_fee_test.go b/integration_tests/minimum_fee_test.go index 7c23184a..c10112fa 100644 --- a/integration_tests/minimum_fee_test.go +++ b/integration_tests/minimum_fee_test.go @@ -18,7 +18,7 @@ func TestXionMinimumFee(t *testing.T) { t.Parallel() - td := BuildXionChain(t, "0.1uxion", ModifyInterChainGenesis(ModifyInterChainGenesisFn{ModifyGenesisShortProposals}, [][]string{{votingPeriod, maxDepositPeriod}})) + td := BuildXionChain(t, "0.0uxion", ModifyInterChainGenesis(ModifyInterChainGenesisFn{ModifyGenesisShortProposals}, [][]string{{votingPeriod, maxDepositPeriod}})) xion, ctx := td.xionChain, td.ctx // Create and Fund User Wallets @@ -48,12 +48,6 @@ func TestXionMinimumFee(t *testing.T) { &xiontypes.MsgSetPlatformPercentage{}, &xiontypes.MsgSend{}, ) - //_, err = xion.FullNodes[0].ExecTx(ctx, - // xionUser.KeyName(), - // "xion", "send", xionUser.KeyName(), - // "--chain-id", xion.Config().ChainID, - // recipientKeyAddress, fmt.Sprintf("%d%s", 100, xion.Config().Denom), - //) currentHeight, _ = xion.Height(ctx) _, err = ExecTx(t, ctx, xion.FullNodes[0], diff --git a/x/globalfee/ante/fee.go b/x/globalfee/ante/fee.go index 730165a6..a965fef9 100644 --- a/x/globalfee/ante/fee.go +++ b/x/globalfee/ante/fee.go @@ -85,7 +85,8 @@ func (mfd FeeDecorator) GetTxFeeRequired(ctx sdk.Context, tx sdk.FeeTx) (sdk.Coi // Get local minimum-gas-prices localFees := GetMinGasPrice(ctx, int64(tx.GetGas())) - return MaxCoins(globalFees, localFees), nil + return CombinedFeeRequirement(globalFees, localFees) + //return MaxCoins(globalFees, localFees), nil } // GetGlobalFee returns the global fees for a given fee tx's gas From 9b7d361a71c8986e3ea6b2dec6eba8fc4a6d3ce8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 31 Aug 2023 21:27:06 +0000 Subject: [PATCH 163/501] Bump github.com/cosmos/ibc-go/v7 from 7.2.0 to 7.3.0 Bumps [github.com/cosmos/ibc-go/v7](https://github.com/cosmos/ibc-go) from 7.2.0 to 7.3.0. - [Release notes](https://github.com/cosmos/ibc-go/releases) - [Changelog](https://github.com/cosmos/ibc-go/blob/v7.3.0/CHANGELOG.md) - [Commits](https://github.com/cosmos/ibc-go/compare/v7.2.0...v7.3.0) --- updated-dependencies: - dependency-name: github.com/cosmos/ibc-go/v7 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- go.mod | 28 +++++++++++++++------------- go.sum | 57 ++++++++++++++++++++++++++++++--------------------------- 2 files changed, 45 insertions(+), 40 deletions(-) diff --git a/go.mod b/go.mod index d771ba37..cb7897c2 100644 --- a/go.mod +++ b/go.mod @@ -5,11 +5,11 @@ go 1.19 require ( github.com/CosmWasm/wasmvm v1.2.4 // indirect github.com/cosmos/cosmos-proto v1.0.0-beta.3 - github.com/cosmos/cosmos-sdk v0.47.3 + github.com/cosmos/cosmos-sdk v0.47.4 github.com/cosmos/gogogateway v1.2.0 // indirect github.com/cosmos/gogoproto v1.4.10 github.com/cosmos/iavl v0.20.0 // indirect - github.com/cosmos/ibc-go/v7 v7.2.0 + github.com/cosmos/ibc-go/v7 v7.3.0 github.com/cosmos/ics23/go v0.10.0 // indirect github.com/docker/distribution v2.8.2+incompatible // indirect github.com/dvsekhvalnov/jose2go v1.5.0 // indirect @@ -26,7 +26,7 @@ require ( github.com/spf13/pflag v1.0.5 // indirect github.com/stretchr/testify v1.8.4 github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d - google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 + google.golang.org/genproto v0.0.0-20230706204954-ccb25ca9f130 // indirect google.golang.org/grpc v1.56.2 gopkg.in/yaml.v2 v2.4.0 // indirect ) @@ -48,17 +48,18 @@ require ( github.com/larry0x/abstract-account v0.0.0-20230708200055-2ea462db913f github.com/osmosis-labs/fee-abstraction/v4 v4.0.0-20230812032455-33dfc391894d github.com/spf13/viper v1.16.0 + google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529 gotest.tools/v3 v3.5.0 sigs.k8s.io/yaml v1.3.0 ) require ( - cloud.google.com/go v0.110.0 // indirect - cloud.google.com/go/compute v1.19.1 // indirect + cloud.google.com/go v0.110.4 // indirect + cloud.google.com/go/compute v1.20.1 // indirect cloud.google.com/go/compute/metadata v0.2.3 // indirect - cloud.google.com/go/iam v0.13.0 // indirect - cloud.google.com/go/storage v1.29.0 // indirect - cosmossdk.io/log v1.1.0 // indirect + cloud.google.com/go/iam v1.1.0 // indirect + cloud.google.com/go/storage v1.30.1 // indirect + cosmossdk.io/log v1.1.1-0.20230704160919-88f2c830b0ca // indirect filippo.io/edwards25519 v1.0.0 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect github.com/99designs/keyring v1.2.2 // indirect @@ -102,10 +103,10 @@ require ( github.com/google/btree v1.1.2 // indirect github.com/google/go-cmp v0.5.9 // indirect github.com/google/orderedcode v0.0.1 // indirect - github.com/google/s2a-go v0.1.3 // indirect + github.com/google/s2a-go v0.1.4 // indirect github.com/google/uuid v1.3.0 // indirect github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect - github.com/googleapis/gax-go/v2 v2.8.0 // indirect + github.com/googleapis/gax-go/v2 v2.11.0 // indirect github.com/gorilla/handlers v1.5.1 // indirect github.com/gorilla/websocket v1.5.0 // indirect github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 // indirect @@ -133,7 +134,7 @@ require ( github.com/magiconair/properties v1.8.7 // indirect github.com/manifoldco/promptui v0.9.0 // indirect github.com/mattn/go-colorable v0.1.13 // indirect - github.com/mattn/go-isatty v0.0.18 // indirect + github.com/mattn/go-isatty v0.0.19 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 // indirect github.com/minio/highwayhash v1.0.2 // indirect @@ -165,13 +166,14 @@ require ( golang.org/x/crypto v0.11.0 // indirect golang.org/x/exp v0.0.0-20230515195305-f3d0a9c9a5cc // indirect golang.org/x/net v0.12.0 // indirect - golang.org/x/oauth2 v0.7.0 // indirect + golang.org/x/oauth2 v0.8.0 // indirect golang.org/x/sys v0.10.0 // indirect golang.org/x/term v0.10.0 // indirect golang.org/x/text v0.11.0 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect - google.golang.org/api v0.122.0 // indirect + google.golang.org/api v0.126.0 // indirect google.golang.org/appengine v1.6.7 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98 // indirect google.golang.org/protobuf v1.31.0 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/go.sum b/go.sum index ef9ebfbf..637900fa 100644 --- a/go.sum +++ b/go.sum @@ -32,8 +32,8 @@ cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w9 cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= -cloud.google.com/go v0.110.0 h1:Zc8gqp3+a9/Eyph2KDmcGaPtbKRIoqq4YTlL4NMD0Ys= -cloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY= +cloud.google.com/go v0.110.4 h1:1JYyxKMN9hd5dR2MYTPWkGUgcoxVVhg0LKNKEo0qvmk= +cloud.google.com/go v0.110.4/go.mod h1:+EYjdK8e5RME/VY/qLCAtuyALQ9q67dvuum8i+H5xsI= cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= @@ -70,8 +70,8 @@ cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= -cloud.google.com/go/compute v1.19.1 h1:am86mquDUgjGNWxiGn+5PGLbmgiWXlE/yNWpIpNvuXY= -cloud.google.com/go/compute v1.19.1/go.mod h1:6ylj3a05WF8leseCdIf77NK0g1ey+nj5IKd5/kvShxE= +cloud.google.com/go/compute v1.20.1 h1:6aKEtlUiwEpJzM001l0yFkpXmUVXaN8W+fbkb2AZNbg= +cloud.google.com/go/compute v1.20.1/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= @@ -111,13 +111,12 @@ cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y97 cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= -cloud.google.com/go/iam v0.13.0 h1:+CmB+K0J/33d0zSQ9SlFWUeCCEn5XJA0ZMZ3pHE9u8k= -cloud.google.com/go/iam v0.13.0/go.mod h1:ljOg+rcNfzZ5d6f1nAUJ8ZIxOaZUVoS14bKCtaLZ/D0= +cloud.google.com/go/iam v1.1.0 h1:67gSqaPukx7O8WLLHMa0PNs3EBGd2eE4d+psbO/CO94= +cloud.google.com/go/iam v1.1.0/go.mod h1:nxdHjaKfCr7fNYx/HJMM8LgiMugmveWlkatear5gVyk= cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= -cloud.google.com/go/longrunning v0.4.1 h1:v+yFJOfKC3yZdY6ZUI933pIYdhyhV8S3NpWrXWmg7jM= cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= @@ -175,8 +174,8 @@ cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3f cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= -cloud.google.com/go/storage v1.29.0 h1:6weCgzRvMg7lzuUurI4697AqIRPU1SvzHhynwpW31jI= -cloud.google.com/go/storage v1.29.0/go.mod h1:4puEjyTKnku6gfKoTfNOU/W+a9JyuVNxjpS5GBrB8h4= +cloud.google.com/go/storage v1.30.1 h1:uOdMxAs8HExqBlnLtnQyP0YkvbiDpdGShGKtx6U/oNM= +cloud.google.com/go/storage v1.30.1/go.mod h1:NfxhC0UJE1aXSx7CIIbCf7y9HKT7BiccwkR7+P7gN8E= cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= @@ -196,8 +195,8 @@ cosmossdk.io/depinject v1.0.0-alpha.3 h1:6evFIgj//Y3w09bqOUOzEpFj5tsxBqdc5CfkO7z cosmossdk.io/depinject v1.0.0-alpha.3/go.mod h1:eRbcdQ7MRpIPEM5YUJh8k97nxHpYbc3sMUnEtt8HPWU= cosmossdk.io/errors v1.0.0 h1:nxF07lmlBbB8NKQhtJ+sJm6ef5uV1XkvPXG2bUntb04= cosmossdk.io/errors v1.0.0/go.mod h1:+hJZLuhdDE0pYN8HkOrVNwrIOYvUGnn6+4fjnJs/oV0= -cosmossdk.io/log v1.1.0 h1:v0ogPHYeTzPcBTcPR1A3j1hkei4pZama8kz8LKlCMv0= -cosmossdk.io/log v1.1.0/go.mod h1:6zjroETlcDs+mm62gd8Ig7mZ+N+fVOZS91V17H+M4N4= +cosmossdk.io/log v1.1.1-0.20230704160919-88f2c830b0ca h1:msenprh2BLLRwNT7zN56TbBHOGk/7ARQckXHxXyvjoQ= +cosmossdk.io/log v1.1.1-0.20230704160919-88f2c830b0ca/go.mod h1:PkIAKXZvaxrTRc++z53XMRvFk8AcGGWYHcMIPzVYX9c= cosmossdk.io/math v1.0.1 h1:Qx3ifyOPaMLNH/89WeZFH268yCvU4xEcnPLu3sJqPPg= cosmossdk.io/math v1.0.1/go.mod h1:Ygz4wBHrgc7g0N+8+MrnTfS9LLn9aaTGa9hKopuym5k= cosmossdk.io/tools/rosetta v0.2.1 h1:ddOMatOH+pbxWbrGJKRAawdBkPYLfKXutK9IETnjYxw= @@ -325,8 +324,8 @@ 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-proto v1.0.0-beta.3 h1:VitvZ1lPORTVxkmF2fAp3IiA61xVwArQYKXTdEcpW6o= github.com/cosmos/cosmos-proto v1.0.0-beta.3/go.mod h1:t8IASdLaAq+bbHbjq4p960BvcTqtwuAxid3b/2rOD6I= -github.com/cosmos/cosmos-sdk v0.47.3 h1:r0hGmZoAzP2D+MaPaFGHwAaTdFQq3pNpHaUp1BsffbM= -github.com/cosmos/cosmos-sdk v0.47.3/go.mod h1:c4OfLdAykA9zsj1CqrxBRqXzVz48I++JSvIMPSPcEmk= +github.com/cosmos/cosmos-sdk v0.47.4 h1:FVUpEprm58nMmBX4xkRdMDaIG5Nr4yy92HZAfGAw9bg= +github.com/cosmos/cosmos-sdk v0.47.4/go.mod h1:R5n+uM7vguVPFap4pgkdvQCT1nVo/OtPwrlAU40rvok= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= @@ -341,8 +340,8 @@ github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.0.0-202308 github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.0.0-20230803181732-7c8f814d3b79/go.mod h1:fctjEnz9xaBFOlmYYPdKL8Hs1Y3GUKilSwsJdqBb5QU= github.com/cosmos/ibc-apps/modules/ibc-hooks/v7 v7.0.0-20230802211043-d72e83c94350 h1:NyXIgMKsCTnmD8fcuuuX+45Py9xh/mfpPJ8yr3MI3zg= github.com/cosmos/ibc-apps/modules/ibc-hooks/v7 v7.0.0-20230802211043-d72e83c94350/go.mod h1:JwHFbo1oX/ht4fPpnPvmhZr+dCkYK1Vihw+vZE9umR4= -github.com/cosmos/ibc-go/v7 v7.2.0 h1:dx0DLUl7rxdyZ8NiT6UsrbzKOJx/w7s+BOaewFRH6cg= -github.com/cosmos/ibc-go/v7 v7.2.0/go.mod h1:OOcjKIRku/j1Xs1RgKK0yvKRrJ5iFuZYMetR1n3yMlc= +github.com/cosmos/ibc-go/v7 v7.3.0 h1:QtGeVMi/3JeLWuvEuC60sBHpAF40Oenx/y+bP8+wRRw= +github.com/cosmos/ibc-go/v7 v7.3.0/go.mod h1:mUmaHFXpXrEdcxfdXyau+utZf14pGKVUiXwYftRZZfQ= github.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZDM= github.com/cosmos/ics23/go v0.10.0/go.mod h1:ZfJSmng/TBNTBkFemHHHj5YY7VAU/MBU980F4VU1NG0= github.com/cosmos/keyring v1.2.0 h1:8C1lBP9xhImmIabyXW4c3vFjjLiBdGCmfLUfeZlV1Yo= @@ -552,8 +551,8 @@ github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/s2a-go v0.1.3 h1:FAgZmpLl/SXurPEZyCMPBIiiYeTbqfjlbdnCNTAkbGE= -github.com/google/s2a-go v0.1.3/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= +github.com/google/s2a-go v0.1.4 h1:1kZ/sQM3srePvKs3tXAvQzo66XfcReoqFpIpIccE7Oc= +github.com/google/s2a-go v0.1.4/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= @@ -572,8 +571,8 @@ github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99 github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= -github.com/googleapis/gax-go/v2 v2.8.0 h1:UBtEZqx1bjXtOQ5BVTkuYghXrr3N4V123VKJK67vJZc= -github.com/googleapis/gax-go/v2 v2.8.0/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI= +github.com/googleapis/gax-go/v2 v2.11.0 h1:9V9PWXEsWnPpQhu/PeQIkS4eGzMlTLGgt80cUUI8Ki4= +github.com/googleapis/gax-go/v2 v2.11.0/go.mod h1:DxmR61SGKkGLa2xigwuZIQpkCI2S5iydzRfb3peWZJI= github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= @@ -725,8 +724,8 @@ github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNx github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-isatty v0.0.18 h1:DOKFKCQ7FNG2L1rbrmstDN4QVRdS89Nkh85u68Uwp98= -github.com/mattn/go-isatty v0.0.18/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= +github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= @@ -1144,8 +1143,8 @@ golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= -golang.org/x/oauth2 v0.7.0 h1:qe6s0zUXlPX80/dITx3440hWZ7GwMwgDDyrSGTPJG/g= -golang.org/x/oauth2 v0.7.0/go.mod h1:hPLQkd9LyjfXTiRohC/41GhcFqxisoUQ99sCUOHO9x4= +golang.org/x/oauth2 v0.8.0 h1:6dkIjl3j3LtZ/O3sTgZTMsLKSftL/B8Zgq4huOIIUu8= +golang.org/x/oauth2 v0.8.0/go.mod h1:yr7u4HXZRm1R1kBWqr/xKNqewf0plRYoB7sla+BCIXE= 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= @@ -1401,8 +1400,8 @@ google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= -google.golang.org/api v0.122.0 h1:zDobeejm3E7pEG1mNHvdxvjs5XJoCMzyNH+CmwL94Es= -google.golang.org/api v0.122.0/go.mod h1:gcitW0lvnyWjSp9nKxAbdHKIZ6vF4aajGueeslZOyms= +google.golang.org/api v0.126.0 h1:q4GJq+cAdMAC7XP7njvQ4tvohGLiSlytuL4BQxbIZ+o= +google.golang.org/api v0.126.0/go.mod h1:mBwVAtz+87bEN6CbA1GtZPDOqY2R5ONPqJeIlvyo4Aw= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1521,8 +1520,12 @@ google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqw google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= -google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 h1:KpwkzHKEF7B9Zxg18WzOa7djJ+Ha5DzthMyZYQfEn2A= -google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU= +google.golang.org/genproto v0.0.0-20230706204954-ccb25ca9f130 h1:Au6te5hbKUV8pIYWHqOUZ1pva5qK/rwbIhoXEUB9Lu8= +google.golang.org/genproto v0.0.0-20230706204954-ccb25ca9f130/go.mod h1:O9kGHb51iE/nOGvQaDUuadVYqovW56s5emA88lQnj6Y= +google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529 h1:s5YSX+ZH5b5vS9rnpGymvIyMpLRJizowqDlOuyjXnTk= +google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98 h1:bVf09lpb+OJbByTj913DRJioFFAjf/ZGxEz7MajTp2U= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98/go.mod h1:TUfxEVdsvPg18p6AslUXFoLdpED4oBnGwyqk3dV1XzM= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= From 4fdc61af8680369aa3663c462d354767bc7effdc Mon Sep 17 00:00:00 2001 From: Eduardo Diaz Date: Mon, 4 Sep 2023 13:50:54 -0400 Subject: [PATCH 164/501] remove dangling todo from globalfee module --- x/globalfee/querier.go | 1 - 1 file changed, 1 deletion(-) diff --git a/x/globalfee/querier.go b/x/globalfee/querier.go index 34500227..9c2edad9 100644 --- a/x/globalfee/querier.go +++ b/x/globalfee/querier.go @@ -31,7 +31,6 @@ func (g GrpcQuerier) Params(stdCtx context.Context, _ *types.QueryParamsRequest) var maxTotalBypassMinFeeMsgGasUsage uint64 ctx := sdk.UnwrapSDKContext(stdCtx) - // todo: if return err if not exist? if g.paramSource.Has(ctx, types.ParamStoreKeyMinGasPrices) { g.paramSource.Get(ctx, types.ParamStoreKeyMinGasPrices, &minGasPrices) } From c03ca746c8244162ec40f5a2126fb0ab05ae69c0 Mon Sep 17 00:00:00 2001 From: Eduardo Diaz Date: Mon, 4 Sep 2023 13:57:46 -0400 Subject: [PATCH 165/501] upstream abstract account fixes --- go.mod | 44 +++++++++--------- go.sum | 97 +++++++++++++++++++++------------------- integration_tests/go.mod | 12 ++--- integration_tests/go.sum | 24 +++++----- 4 files changed, 91 insertions(+), 86 deletions(-) diff --git a/go.mod b/go.mod index d771ba37..2149cea8 100644 --- a/go.mod +++ b/go.mod @@ -3,9 +3,9 @@ module github.com/burnt-labs/xion go 1.19 require ( - github.com/CosmWasm/wasmvm v1.2.4 // indirect + github.com/CosmWasm/wasmvm v1.3.0 // indirect github.com/cosmos/cosmos-proto v1.0.0-beta.3 - github.com/cosmos/cosmos-sdk v0.47.3 + github.com/cosmos/cosmos-sdk v0.47.4 github.com/cosmos/gogogateway v1.2.0 // indirect github.com/cosmos/gogoproto v1.4.10 github.com/cosmos/iavl v0.20.0 // indirect @@ -26,7 +26,7 @@ require ( github.com/spf13/pflag v1.0.5 // indirect github.com/stretchr/testify v1.8.4 github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d - google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 + google.golang.org/genproto v0.0.0-20230706204954-ccb25ca9f130 // indirect google.golang.org/grpc v1.56.2 gopkg.in/yaml.v2 v2.4.0 // indirect ) @@ -38,7 +38,7 @@ require ( cosmossdk.io/errors v1.0.0 cosmossdk.io/math v1.0.1 cosmossdk.io/tools/rosetta v0.2.1 - github.com/CosmWasm/wasmd v0.40.1 + github.com/CosmWasm/wasmd v0.41.0 github.com/armon/go-metrics v0.4.1 github.com/cometbft/cometbft v0.37.2 github.com/cometbft/cometbft-db v0.8.0 @@ -48,17 +48,18 @@ require ( github.com/larry0x/abstract-account v0.0.0-20230708200055-2ea462db913f github.com/osmosis-labs/fee-abstraction/v4 v4.0.0-20230812032455-33dfc391894d github.com/spf13/viper v1.16.0 + google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529 gotest.tools/v3 v3.5.0 sigs.k8s.io/yaml v1.3.0 ) require ( - cloud.google.com/go v0.110.0 // indirect - cloud.google.com/go/compute v1.19.1 // indirect + cloud.google.com/go v0.110.4 // indirect + cloud.google.com/go/compute v1.20.1 // indirect cloud.google.com/go/compute/metadata v0.2.3 // indirect - cloud.google.com/go/iam v0.13.0 // indirect - cloud.google.com/go/storage v1.29.0 // indirect - cosmossdk.io/log v1.1.0 // indirect + cloud.google.com/go/iam v1.1.0 // indirect + cloud.google.com/go/storage v1.30.1 // indirect + cosmossdk.io/log v1.1.1-0.20230704160919-88f2c830b0ca // indirect filippo.io/edwards25519 v1.0.0 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect github.com/99designs/keyring v1.2.2 // indirect @@ -102,10 +103,10 @@ require ( github.com/google/btree v1.1.2 // indirect github.com/google/go-cmp v0.5.9 // indirect github.com/google/orderedcode v0.0.1 // indirect - github.com/google/s2a-go v0.1.3 // indirect + github.com/google/s2a-go v0.1.4 // indirect github.com/google/uuid v1.3.0 // indirect github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect - github.com/googleapis/gax-go/v2 v2.8.0 // indirect + github.com/googleapis/gax-go/v2 v2.11.0 // indirect github.com/gorilla/handlers v1.5.1 // indirect github.com/gorilla/websocket v1.5.0 // indirect github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 // indirect @@ -127,13 +128,13 @@ require ( github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect github.com/klauspost/compress v1.16.3 // indirect - github.com/lib/pq v1.10.7 // indirect + github.com/lib/pq v1.10.9 // indirect github.com/libp2p/go-buffer-pool v0.1.0 // indirect github.com/linxGnu/grocksdb v1.7.16 // indirect github.com/magiconair/properties v1.8.7 // indirect github.com/manifoldco/promptui v0.9.0 // indirect github.com/mattn/go-colorable v0.1.13 // indirect - github.com/mattn/go-isatty v0.0.18 // indirect + github.com/mattn/go-isatty v0.0.19 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 // indirect github.com/minio/highwayhash v1.0.2 // indirect @@ -162,16 +163,17 @@ require ( github.com/zondax/ledger-go v0.14.1 // indirect go.etcd.io/bbolt v1.3.7 // indirect go.opencensus.io v0.24.0 // indirect - golang.org/x/crypto v0.11.0 // indirect + golang.org/x/crypto v0.12.0 // indirect golang.org/x/exp v0.0.0-20230515195305-f3d0a9c9a5cc // indirect - golang.org/x/net v0.12.0 // indirect - golang.org/x/oauth2 v0.7.0 // indirect - golang.org/x/sys v0.10.0 // indirect - golang.org/x/term v0.10.0 // indirect - golang.org/x/text v0.11.0 // indirect + golang.org/x/net v0.14.0 // indirect + golang.org/x/oauth2 v0.8.0 // indirect + golang.org/x/sys v0.11.0 // indirect + golang.org/x/term v0.11.0 // indirect + golang.org/x/text v0.12.0 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect - google.golang.org/api v0.122.0 // indirect + google.golang.org/api v0.126.0 // indirect google.golang.org/appengine v1.6.7 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98 // indirect google.golang.org/protobuf v1.31.0 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect @@ -196,4 +198,4 @@ replace ( github.com/tendermint/tendermint => github.com/informalsystems/tendermint v0.34.24 ) -replace github.com/larry0x/abstract-account => github.com/burnt-labs/abstract-account v0.0.0-20230721042501-ef9e3f63d0cd +replace github.com/larry0x/abstract-account => github.com/burnt-labs/abstract-account v0.0.0-20230904175526-2716f00fddf3 diff --git a/go.sum b/go.sum index ef9ebfbf..dfc69d60 100644 --- a/go.sum +++ b/go.sum @@ -32,8 +32,8 @@ cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w9 cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= -cloud.google.com/go v0.110.0 h1:Zc8gqp3+a9/Eyph2KDmcGaPtbKRIoqq4YTlL4NMD0Ys= -cloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY= +cloud.google.com/go v0.110.4 h1:1JYyxKMN9hd5dR2MYTPWkGUgcoxVVhg0LKNKEo0qvmk= +cloud.google.com/go v0.110.4/go.mod h1:+EYjdK8e5RME/VY/qLCAtuyALQ9q67dvuum8i+H5xsI= cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= @@ -70,8 +70,8 @@ cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= -cloud.google.com/go/compute v1.19.1 h1:am86mquDUgjGNWxiGn+5PGLbmgiWXlE/yNWpIpNvuXY= -cloud.google.com/go/compute v1.19.1/go.mod h1:6ylj3a05WF8leseCdIf77NK0g1ey+nj5IKd5/kvShxE= +cloud.google.com/go/compute v1.20.1 h1:6aKEtlUiwEpJzM001l0yFkpXmUVXaN8W+fbkb2AZNbg= +cloud.google.com/go/compute v1.20.1/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= @@ -111,13 +111,12 @@ cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y97 cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= -cloud.google.com/go/iam v0.13.0 h1:+CmB+K0J/33d0zSQ9SlFWUeCCEn5XJA0ZMZ3pHE9u8k= -cloud.google.com/go/iam v0.13.0/go.mod h1:ljOg+rcNfzZ5d6f1nAUJ8ZIxOaZUVoS14bKCtaLZ/D0= +cloud.google.com/go/iam v1.1.0 h1:67gSqaPukx7O8WLLHMa0PNs3EBGd2eE4d+psbO/CO94= +cloud.google.com/go/iam v1.1.0/go.mod h1:nxdHjaKfCr7fNYx/HJMM8LgiMugmveWlkatear5gVyk= cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= -cloud.google.com/go/longrunning v0.4.1 h1:v+yFJOfKC3yZdY6ZUI933pIYdhyhV8S3NpWrXWmg7jM= cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= @@ -175,8 +174,8 @@ cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3f cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= -cloud.google.com/go/storage v1.29.0 h1:6weCgzRvMg7lzuUurI4697AqIRPU1SvzHhynwpW31jI= -cloud.google.com/go/storage v1.29.0/go.mod h1:4puEjyTKnku6gfKoTfNOU/W+a9JyuVNxjpS5GBrB8h4= +cloud.google.com/go/storage v1.30.1 h1:uOdMxAs8HExqBlnLtnQyP0YkvbiDpdGShGKtx6U/oNM= +cloud.google.com/go/storage v1.30.1/go.mod h1:NfxhC0UJE1aXSx7CIIbCf7y9HKT7BiccwkR7+P7gN8E= cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= @@ -196,8 +195,8 @@ cosmossdk.io/depinject v1.0.0-alpha.3 h1:6evFIgj//Y3w09bqOUOzEpFj5tsxBqdc5CfkO7z cosmossdk.io/depinject v1.0.0-alpha.3/go.mod h1:eRbcdQ7MRpIPEM5YUJh8k97nxHpYbc3sMUnEtt8HPWU= cosmossdk.io/errors v1.0.0 h1:nxF07lmlBbB8NKQhtJ+sJm6ef5uV1XkvPXG2bUntb04= cosmossdk.io/errors v1.0.0/go.mod h1:+hJZLuhdDE0pYN8HkOrVNwrIOYvUGnn6+4fjnJs/oV0= -cosmossdk.io/log v1.1.0 h1:v0ogPHYeTzPcBTcPR1A3j1hkei4pZama8kz8LKlCMv0= -cosmossdk.io/log v1.1.0/go.mod h1:6zjroETlcDs+mm62gd8Ig7mZ+N+fVOZS91V17H+M4N4= +cosmossdk.io/log v1.1.1-0.20230704160919-88f2c830b0ca h1:msenprh2BLLRwNT7zN56TbBHOGk/7ARQckXHxXyvjoQ= +cosmossdk.io/log v1.1.1-0.20230704160919-88f2c830b0ca/go.mod h1:PkIAKXZvaxrTRc++z53XMRvFk8AcGGWYHcMIPzVYX9c= cosmossdk.io/math v1.0.1 h1:Qx3ifyOPaMLNH/89WeZFH268yCvU4xEcnPLu3sJqPPg= cosmossdk.io/math v1.0.1/go.mod h1:Ygz4wBHrgc7g0N+8+MrnTfS9LLn9aaTGa9hKopuym5k= cosmossdk.io/tools/rosetta v0.2.1 h1:ddOMatOH+pbxWbrGJKRAawdBkPYLfKXutK9IETnjYxw= @@ -212,10 +211,10 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03 github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= -github.com/CosmWasm/wasmd v0.40.1 h1:LxbO78t/6S8TkeQlUrJ0m5O87HtAwLx4RGHq3rdrOEU= -github.com/CosmWasm/wasmd v0.40.1/go.mod h1:6EOwnv7MpuFaEqxcUOdFV9i4yvrdOciaY6VQ1o7A3yg= -github.com/CosmWasm/wasmvm v1.2.4 h1:6OfeZuEcEH/9iqwrg2pkeVtDCkMoj9U6PpKtcrCyVrQ= -github.com/CosmWasm/wasmvm v1.2.4/go.mod h1:vW/E3h8j9xBQs9bCoijDuawKo9kCtxOaS8N8J7KFtkc= +github.com/CosmWasm/wasmd v0.41.0 h1:fmwxSbwb50zZDcBaayYFRLIaSFca+EFld1WOaQi49jg= +github.com/CosmWasm/wasmd v0.41.0/go.mod h1:0Sds1q2IsPaTN1gHa3BNOYcUFgtGvxH7CXEXPgoihns= +github.com/CosmWasm/wasmvm v1.3.0 h1:x12X4bKlUPS7TT9QQP45+fJo2sp30GEbiSSgb9jsec8= +github.com/CosmWasm/wasmvm v1.3.0/go.mod h1:vW/E3h8j9xBQs9bCoijDuawKo9kCtxOaS8N8J7KFtkc= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= @@ -264,8 +263,8 @@ github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY github.com/btcsuite/btcd/btcutil v1.1.2 h1:XLMbX8JQEiwMcYft2EGi8zPUkoa0abKIU6/BJSRsjzQ= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= github.com/bufbuild/protocompile v0.4.0 h1:LbFKd2XowZvQ/kajzguUp2DC9UEIQhIq77fZZlaQsNA= -github.com/burnt-labs/abstract-account v0.0.0-20230721042501-ef9e3f63d0cd h1:y8O1OFv/FFMo/r3xK1mpLIuWk3zGOVCgvZ3MpczF7hQ= -github.com/burnt-labs/abstract-account v0.0.0-20230721042501-ef9e3f63d0cd/go.mod h1:j9fogRoUYXYodprxCpD+m/bh6mWXRDEcpL4Gwo4NarE= +github.com/burnt-labs/abstract-account v0.0.0-20230904175526-2716f00fddf3 h1:6FxpgV0kveYp9AESjIUIFWYwIhogX+zW43lNZ8ix0pA= +github.com/burnt-labs/abstract-account v0.0.0-20230904175526-2716f00fddf3/go.mod h1:R+/UYwxE92VUFOWLyyuBa2RRI2lUwb9uHwRWDBrNzx0= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= @@ -325,8 +324,8 @@ 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-proto v1.0.0-beta.3 h1:VitvZ1lPORTVxkmF2fAp3IiA61xVwArQYKXTdEcpW6o= github.com/cosmos/cosmos-proto v1.0.0-beta.3/go.mod h1:t8IASdLaAq+bbHbjq4p960BvcTqtwuAxid3b/2rOD6I= -github.com/cosmos/cosmos-sdk v0.47.3 h1:r0hGmZoAzP2D+MaPaFGHwAaTdFQq3pNpHaUp1BsffbM= -github.com/cosmos/cosmos-sdk v0.47.3/go.mod h1:c4OfLdAykA9zsj1CqrxBRqXzVz48I++JSvIMPSPcEmk= +github.com/cosmos/cosmos-sdk v0.47.4 h1:FVUpEprm58nMmBX4xkRdMDaIG5Nr4yy92HZAfGAw9bg= +github.com/cosmos/cosmos-sdk v0.47.4/go.mod h1:R5n+uM7vguVPFap4pgkdvQCT1nVo/OtPwrlAU40rvok= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= @@ -552,8 +551,8 @@ github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/s2a-go v0.1.3 h1:FAgZmpLl/SXurPEZyCMPBIiiYeTbqfjlbdnCNTAkbGE= -github.com/google/s2a-go v0.1.3/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= +github.com/google/s2a-go v0.1.4 h1:1kZ/sQM3srePvKs3tXAvQzo66XfcReoqFpIpIccE7Oc= +github.com/google/s2a-go v0.1.4/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= @@ -572,8 +571,8 @@ github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99 github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= -github.com/googleapis/gax-go/v2 v2.8.0 h1:UBtEZqx1bjXtOQ5BVTkuYghXrr3N4V123VKJK67vJZc= -github.com/googleapis/gax-go/v2 v2.8.0/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI= +github.com/googleapis/gax-go/v2 v2.11.0 h1:9V9PWXEsWnPpQhu/PeQIkS4eGzMlTLGgt80cUUI8Ki4= +github.com/googleapis/gax-go/v2 v2.11.0/go.mod h1:DxmR61SGKkGLa2xigwuZIQpkCI2S5iydzRfb3peWZJI= github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= @@ -703,8 +702,8 @@ github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/larry0x/simapp v0.0.0-20230527213943-e57d94ffca4c h1:HxMMvjvPKv+Xttad2Blw6c9XKzg/Pk5TIZL8T04lUN0= github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= -github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw= -github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= +github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= @@ -725,8 +724,8 @@ github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNx github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-isatty v0.0.18 h1:DOKFKCQ7FNG2L1rbrmstDN4QVRdS89Nkh85u68Uwp98= -github.com/mattn/go-isatty v0.0.18/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= +github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= @@ -892,7 +891,7 @@ github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPx 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.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= +github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= 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/snikch/goodman v0.0.0-20171125024755-10e37e294daa h1:YJfZp12Z3AFhSBeXOlv4BO55RMwPn2NoQeDsrdWnBtY= @@ -1014,8 +1013,8 @@ golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.11.0 h1:6Ewdq3tDic1mg5xRO4milcWCfMVQhI4NkqWWvqejpuA= -golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= +golang.org/x/crypto v0.12.0 h1:tFM/ta59kqch6LlvYnPa0yx5a83cL2nHflFhYKvv9Yk= +golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= 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= @@ -1055,7 +1054,7 @@ 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.9.0 h1:KENHtAZL2y3NLMYZeHY9DW8HW8V+kQyJsY/V9JlKvCs= +golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc= 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= @@ -1117,8 +1116,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= -golang.org/x/net v0.12.0 h1:cfawfvKITfUsFCeJIHJrbSxpeu/E81khclypR0GVT50= -golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= +golang.org/x/net v0.14.0 h1:BONx9s002vGdD9umnlX1Po8vOZmrgH34qlHcD1MfK14= +golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= 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= @@ -1144,8 +1143,8 @@ golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= -golang.org/x/oauth2 v0.7.0 h1:qe6s0zUXlPX80/dITx3440hWZ7GwMwgDDyrSGTPJG/g= -golang.org/x/oauth2 v0.7.0/go.mod h1:hPLQkd9LyjfXTiRohC/41GhcFqxisoUQ99sCUOHO9x4= +golang.org/x/oauth2 v0.8.0 h1:6dkIjl3j3LtZ/O3sTgZTMsLKSftL/B8Zgq4huOIIUu8= +golang.org/x/oauth2 v0.8.0/go.mod h1:yr7u4HXZRm1R1kBWqr/xKNqewf0plRYoB7sla+BCIXE= 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= @@ -1160,7 +1159,7 @@ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/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.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI= +golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= 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= @@ -1258,13 +1257,13 @@ golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA= -golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM= +golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.10.0 h1:3R7pNqamzBraeqj/Tj8qt1aQ2HpmlC+Cx/qL/7hn4/c= -golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o= +golang.org/x/term v0.11.0 h1:F9tnn/DA/Im8nCwm+fX+1/eBwi4qFjRT++MhtVC4ZX0= +golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= 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= @@ -1276,8 +1275,8 @@ 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.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.11.0 h1:LAntKIrcmeSKERyiOh0XMV39LXS8IE9UL2yP7+f5ij4= -golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc= +golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1342,7 +1341,7 @@ golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.4/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.7.0 h1:W4OVu8VVOaIO0yzWMNdepAulS7YfoS3Zabrm8DOXXU4= +golang.org/x/tools v0.12.0 h1:YW6HUoUmYBpwSgyaGaZq1fHjrBjX1rlpZ54T6mu2kss= 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= @@ -1401,8 +1400,8 @@ google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= -google.golang.org/api v0.122.0 h1:zDobeejm3E7pEG1mNHvdxvjs5XJoCMzyNH+CmwL94Es= -google.golang.org/api v0.122.0/go.mod h1:gcitW0lvnyWjSp9nKxAbdHKIZ6vF4aajGueeslZOyms= +google.golang.org/api v0.126.0 h1:q4GJq+cAdMAC7XP7njvQ4tvohGLiSlytuL4BQxbIZ+o= +google.golang.org/api v0.126.0/go.mod h1:mBwVAtz+87bEN6CbA1GtZPDOqY2R5ONPqJeIlvyo4Aw= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1521,8 +1520,12 @@ google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqw google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= -google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 h1:KpwkzHKEF7B9Zxg18WzOa7djJ+Ha5DzthMyZYQfEn2A= -google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU= +google.golang.org/genproto v0.0.0-20230706204954-ccb25ca9f130 h1:Au6te5hbKUV8pIYWHqOUZ1pva5qK/rwbIhoXEUB9Lu8= +google.golang.org/genproto v0.0.0-20230706204954-ccb25ca9f130/go.mod h1:O9kGHb51iE/nOGvQaDUuadVYqovW56s5emA88lQnj6Y= +google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529 h1:s5YSX+ZH5b5vS9rnpGymvIyMpLRJizowqDlOuyjXnTk= +google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98 h1:bVf09lpb+OJbByTj913DRJioFFAjf/ZGxEz7MajTp2U= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98/go.mod h1:TUfxEVdsvPg18p6AslUXFoLdpED4oBnGwyqk3dV1XzM= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= diff --git a/integration_tests/go.mod b/integration_tests/go.mod index 70c92f8b..87c45977 100644 --- a/integration_tests/go.mod +++ b/integration_tests/go.mod @@ -127,7 +127,7 @@ require ( github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect github.com/klauspost/compress v1.16.3 // indirect github.com/klauspost/cpuid/v2 v2.2.3 // indirect - github.com/lib/pq v1.10.7 // indirect + github.com/lib/pq v1.10.9 // indirect github.com/libp2p/go-buffer-pool v0.1.0 // indirect github.com/libp2p/go-libp2p v0.22.0 // indirect github.com/libp2p/go-openssl v0.1.0 // indirect @@ -193,15 +193,15 @@ require ( go.opencensus.io v0.24.0 // indirect go.uber.org/atomic v1.10.0 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/crypto v0.11.0 // indirect + golang.org/x/crypto v0.12.0 // indirect golang.org/x/exp v0.0.0-20230515195305-f3d0a9c9a5cc // indirect golang.org/x/mod v0.12.0 // indirect - golang.org/x/net v0.12.0 // indirect + golang.org/x/net v0.14.0 // indirect golang.org/x/oauth2 v0.8.0 // indirect golang.org/x/sync v0.3.0 // indirect - golang.org/x/sys v0.10.0 // indirect - golang.org/x/term v0.10.0 // indirect - golang.org/x/text v0.11.0 // indirect + golang.org/x/sys v0.11.0 // indirect + golang.org/x/term v0.11.0 // indirect + golang.org/x/text v0.12.0 // indirect golang.org/x/tools v0.11.0 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect google.golang.org/api v0.126.0 // indirect diff --git a/integration_tests/go.sum b/integration_tests/go.sum index 2c74455b..bd318124 100644 --- a/integration_tests/go.sum +++ b/integration_tests/go.sum @@ -735,8 +735,8 @@ 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/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= -github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw= -github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= +github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= github.com/libp2p/go-libp2p v0.22.0 h1:2Tce0kHOp5zASFKJbNzRElvh0iZwdtG5uZheNW8chIw= @@ -1098,8 +1098,8 @@ golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.11.0 h1:6Ewdq3tDic1mg5xRO4milcWCfMVQhI4NkqWWvqejpuA= -golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= +golang.org/x/crypto v0.12.0 h1:tFM/ta59kqch6LlvYnPa0yx5a83cL2nHflFhYKvv9Yk= +golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= 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= @@ -1202,8 +1202,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= -golang.org/x/net v0.12.0 h1:cfawfvKITfUsFCeJIHJrbSxpeu/E81khclypR0GVT50= -golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= +golang.org/x/net v0.14.0 h1:BONx9s002vGdD9umnlX1Po8vOZmrgH34qlHcD1MfK14= +golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= 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= @@ -1345,13 +1345,13 @@ golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA= -golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM= +golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.10.0 h1:3R7pNqamzBraeqj/Tj8qt1aQ2HpmlC+Cx/qL/7hn4/c= -golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o= +golang.org/x/term v0.11.0 h1:F9tnn/DA/Im8nCwm+fX+1/eBwi4qFjRT++MhtVC4ZX0= +golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= 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= @@ -1363,8 +1363,8 @@ 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.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.11.0 h1:LAntKIrcmeSKERyiOh0XMV39LXS8IE9UL2yP7+f5ij4= -golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc= +golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= From 09f71ed92fa1dc56d091482671f6a32d135914ca Mon Sep 17 00:00:00 2001 From: Eduardo Diaz Date: Wed, 6 Sep 2023 17:00:48 -0400 Subject: [PATCH 166/501] tidy intergration-tests modules --- integration_tests/go.mod | 2 +- integration_tests/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/integration_tests/go.mod b/integration_tests/go.mod index 70c92f8b..56cc7561 100644 --- a/integration_tests/go.mod +++ b/integration_tests/go.mod @@ -6,7 +6,7 @@ require ( cosmossdk.io/math v1.0.1 github.com/burnt-labs/xion v0.1.0 github.com/cosmos/cosmos-sdk v0.47.4 - github.com/cosmos/ibc-go/v7 v7.2.0 + github.com/cosmos/ibc-go/v7 v7.3.0 github.com/docker/docker v24.0.4+incompatible github.com/icza/dyno v0.0.0-20220812133438-f0b6f8a18845 github.com/strangelove-ventures/interchaintest/v7 v7.0.0-20230721183422-fb937bb0e165 diff --git a/integration_tests/go.sum b/integration_tests/go.sum index 2c74455b..46e90e5a 100644 --- a/integration_tests/go.sum +++ b/integration_tests/go.sum @@ -354,8 +354,8 @@ github.com/cosmos/gogoproto v1.4.10 h1:QH/yT8X+c0F4ZDacDv3z+xE3WU1P1Z3wQoLMBRJoK github.com/cosmos/gogoproto v1.4.10/go.mod h1:3aAZzeRWpAwr+SS/LLkICX2/kDFyaYVzckBDzygIxek= github.com/cosmos/iavl v0.20.0 h1:fTVznVlepH0KK8NyKq8w+U7c2L6jofa27aFX6YGlm38= github.com/cosmos/iavl v0.20.0/go.mod h1:WO7FyvaZJoH65+HFOsDir7xU9FWk2w9cHXNW1XHcl7A= -github.com/cosmos/ibc-go/v7 v7.2.0 h1:dx0DLUl7rxdyZ8NiT6UsrbzKOJx/w7s+BOaewFRH6cg= -github.com/cosmos/ibc-go/v7 v7.2.0/go.mod h1:OOcjKIRku/j1Xs1RgKK0yvKRrJ5iFuZYMetR1n3yMlc= +github.com/cosmos/ibc-go/v7 v7.3.0 h1:QtGeVMi/3JeLWuvEuC60sBHpAF40Oenx/y+bP8+wRRw= +github.com/cosmos/ibc-go/v7 v7.3.0/go.mod h1:mUmaHFXpXrEdcxfdXyau+utZf14pGKVUiXwYftRZZfQ= github.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZDM= github.com/cosmos/ics23/go v0.10.0/go.mod h1:ZfJSmng/TBNTBkFemHHHj5YY7VAU/MBU980F4VU1NG0= github.com/cosmos/ledger-cosmos-go v0.12.2 h1:/XYaBlE2BJxtvpkHiBm97gFGSGmYGKunKyF3nNqAXZA= From 5233f8ff59a9b006ac8eef3a0bcc4b94b4109364 Mon Sep 17 00:00:00 2001 From: Ash Date: Thu, 14 Sep 2023 18:49:16 +0200 Subject: [PATCH 167/501] proto update --- proto/xion/globalfee/v1/genesis.proto | 4 +- proto/xion/globalfee/v1/query.proto | 8 ++-- proto/xion/mint/v1/query.proto | 2 +- proto/xion/v1/genesis.proto | 4 +- proto/xion/v1/tx.proto | 37 +++++++++------- x/globalfee/types/genesis.pb.go | 4 +- x/mint/types/query.pb.go | 62 +++++++++++++-------------- x/mint/types/query.pb.gw.go | 2 +- x/xion/types/tx.pb.go | 18 +++++--- 9 files changed, 74 insertions(+), 67 deletions(-) diff --git a/proto/xion/globalfee/v1/genesis.proto b/proto/xion/globalfee/v1/genesis.proto index b1500790..6efc2778 100644 --- a/proto/xion/globalfee/v1/genesis.proto +++ b/proto/xion/globalfee/v1/genesis.proto @@ -37,7 +37,7 @@ message Params { ]; // max_total_bypass_min_fee_msg_gas_usage defines the total maximum gas usage - // allowed for a transaction containing only messages of types in bypass_min_fee_msg_types - // to bypass fee charge. + // allowed for a transaction containing only messages of types in + // bypass_min_fee_msg_types to bypass fee charge. uint64 max_total_bypass_min_fee_msg_gas_usage = 3; } diff --git a/proto/xion/globalfee/v1/query.proto b/proto/xion/globalfee/v1/query.proto index cb187644..aa321688 100644 --- a/proto/xion/globalfee/v1/query.proto +++ b/proto/xion/globalfee/v1/query.proto @@ -9,10 +9,8 @@ option go_package = "github.com/burnt-labs/xion/x/globalfee/types"; // Query defines the gRPC querier service. service Query { - rpc Params(QueryParamsRequest) - returns (QueryParamsResponse) { - option (google.api.http).get = - "/xion/globalfee/v1/params"; + rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { + option (google.api.http).get = "/xion/globalfee/v1/params"; } } @@ -23,5 +21,5 @@ message QueryParamsRequest {} // QueryMinimumGasPricesResponse is the response type for the // Query/MinimumGasPrices RPC method. message QueryParamsResponse { - Params params = 1 [(gogoproto.nullable) = false]; + Params params = 1 [ (gogoproto.nullable) = false ]; } diff --git a/proto/xion/mint/v1/query.proto b/proto/xion/mint/v1/query.proto index c38ba665..a05b0e93 100644 --- a/proto/xion/mint/v1/query.proto +++ b/proto/xion/mint/v1/query.proto @@ -12,7 +12,7 @@ option go_package = "github.com/burnt-labs/xion/x/mint/types"; service Query { // Params returns the total set of minting parameters. rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { - option (google.api.http).get = "/cosmos/mint/v1/params"; + option (google.api.http).get = "/xion/mint/v1/params"; } // Inflation returns the current minting inflation value. diff --git a/proto/xion/v1/genesis.proto b/proto/xion/v1/genesis.proto index 5b2461ff..73dc03c6 100644 --- a/proto/xion/v1/genesis.proto +++ b/proto/xion/v1/genesis.proto @@ -5,6 +5,4 @@ import "gogoproto/gogo.proto"; option go_package = "github.com/burnt-labs/xion/x/xion/types"; -message GenesisState { - uint32 platform_percentage = 1; -} +message GenesisState { uint32 platform_percentage = 1; } diff --git a/proto/xion/v1/tx.proto b/proto/xion/v1/tx.proto index e2fd5e96..f5a0b3ac 100644 --- a/proto/xion/v1/tx.proto +++ b/proto/xion/v1/tx.proto @@ -8,35 +8,38 @@ import "cosmos_proto/cosmos.proto"; import "cosmos/base/v1beta1/coin.proto"; import "cosmos/bank/v1beta1/bank.proto"; - option go_package = "github.com/burnt-labs/xion/x/xion/types"; service Msg { option (cosmos.msg.v1.service) = true; - // Send defines a method for sending coins from one account to another account. + // Send defines a method for sending coins from one account to another + // account. rpc Send(MsgSend) returns (MsgSendResponse); - // MultiSend defines a method for sending coins from some accounts to other accounts. + // MultiSend defines a method for sending coins from some accounts to other + // accounts. rpc MultiSend(MsgMultiSend) returns (MsgMultiSendResponse); - // SetPlatformPercentage defines the method for updating the platform percentage fee - rpc SetPlatformPercentage(MsgSetPlatformPercentage) returns (MsgSetPlatformPercentageResponse); + // SetPlatformPercentage defines the method for updating the platform + // percentage fee + rpc SetPlatformPercentage(MsgSetPlatformPercentage) + returns (MsgSetPlatformPercentageResponse); } // MsgSend represents a message to send coins from one account to another. message MsgSend { option (cosmos.msg.v1.signer) = "from_address"; - option (amino.name) = "xion/MsgSend"; + option (amino.name) = "xion/MsgSend"; - option (gogoproto.equal) = false; + option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; - string from_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - string to_address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string from_address = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + string to_address = 2 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; repeated cosmos.base.v1beta1.Coin amount = 3 [ - (gogoproto.nullable) = false, - (amino.dont_omitempty) = true, + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" ]; } @@ -47,14 +50,16 @@ message MsgSendResponse {} // MsgMultiSend represents an arbitrary multi-in, multi-out send message. message MsgMultiSend { option (cosmos.msg.v1.signer) = "inputs"; - option (amino.name) = "xion/MsgMultiSend"; + option (amino.name) = "xion/MsgMultiSend"; option (gogoproto.equal) = false; // Inputs, despite being `repeated`, only allows one sender input. This is // checked in MsgMultiSend's ValidateBasic. - repeated cosmos.bank.v1beta1.Input inputs = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; - repeated cosmos.bank.v1beta1.Output outputs = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + repeated cosmos.bank.v1beta1.Input inputs = 1 + [ (gogoproto.nullable) = false, (amino.dont_omitempty) = true ]; + repeated cosmos.bank.v1beta1.Output outputs = 2 + [ (gogoproto.nullable) = false, (amino.dont_omitempty) = true ]; } // MsgMultiSendResponse defines the Msg/MultiSend response type. @@ -62,9 +67,9 @@ message MsgMultiSendResponse {} message MsgSetPlatformPercentage { option (cosmos.msg.v1.signer) = "authority"; - option (amino.name) = "xion/MsgSetPlatformPercentage"; + option (amino.name) = "xion/MsgSetPlatformPercentage"; - string authority = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string authority = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; // platform_percentage is the platform fee percentage to multiplied by 10000 uint32 platform_percentage = 2; diff --git a/x/globalfee/types/genesis.pb.go b/x/globalfee/types/genesis.pb.go index 0c453d81..0a603883 100644 --- a/x/globalfee/types/genesis.pb.go +++ b/x/globalfee/types/genesis.pb.go @@ -83,8 +83,8 @@ type Params struct { // that are free of fee charge. BypassMinFeeMsgTypes []string `protobuf:"bytes,2,rep,name=bypass_min_fee_msg_types,json=bypassMinFeeMsgTypes,proto3" json:"bypass_min_fee_msg_types,omitempty" yaml:"bypass_min_fee_msg_types"` // max_total_bypass_min_fee_msg_gas_usage defines the total maximum gas usage - // allowed for a transaction containing only messages of types in bypass_min_fee_msg_types - // to bypass fee charge. + // allowed for a transaction containing only messages of types in + // bypass_min_fee_msg_types to bypass fee charge. MaxTotalBypassMinFeeMsgGasUsage uint64 `protobuf:"varint,3,opt,name=max_total_bypass_min_fee_msg_gas_usage,json=maxTotalBypassMinFeeMsgGasUsage,proto3" json:"max_total_bypass_min_fee_msg_gas_usage,omitempty"` } diff --git a/x/mint/types/query.pb.go b/x/mint/types/query.pb.go index 75ee6524..fb5e9e56 100644 --- a/x/mint/types/query.pb.go +++ b/x/mint/types/query.pb.go @@ -281,37 +281,37 @@ func init() { func init() { proto.RegisterFile("xion/mint/v1/query.proto", fileDescriptor_cb90e843d441617e) } var fileDescriptor_cb90e843d441617e = []byte{ - // 467 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x53, 0x3f, 0x6f, 0xd3, 0x40, - 0x1c, 0xf5, 0x81, 0x88, 0x94, 0xa3, 0x43, 0x7b, 0x84, 0x26, 0x58, 0xe5, 0xdc, 0x1a, 0x44, 0x51, - 0x51, 0x7d, 0x6a, 0x3b, 0x30, 0x37, 0x62, 0x61, 0x41, 0x6d, 0x47, 0x16, 0x38, 0x07, 0x63, 0x4e, - 0xb5, 0xef, 0x5c, 0xdf, 0x39, 0xb4, 0x23, 0x0c, 0xcc, 0x48, 0xf0, 0x21, 0x18, 0xf9, 0x18, 0x19, - 0x23, 0xb1, 0x20, 0x86, 0x08, 0x25, 0x48, 0x7c, 0x0d, 0xe4, 0x3b, 0x3b, 0xc4, 0xce, 0x1f, 0x21, - 0xb1, 0xd8, 0xd6, 0xef, 0x3d, 0xbd, 0xf7, 0xf4, 0x7b, 0x3f, 0xc3, 0xce, 0x25, 0x13, 0x9c, 0xc4, - 0x8c, 0x2b, 0xd2, 0x3f, 0x20, 0x17, 0x59, 0x90, 0x5e, 0x79, 0x49, 0x2a, 0x94, 0x40, 0x6b, 0x39, - 0xe2, 0xe5, 0x88, 0xd7, 0x3f, 0xb0, 0x5b, 0xa1, 0x08, 0x85, 0x06, 0x48, 0xfe, 0x65, 0x38, 0xf6, - 0x56, 0x28, 0x44, 0x18, 0x05, 0x84, 0x26, 0x8c, 0x50, 0xce, 0x85, 0xa2, 0x8a, 0x09, 0x2e, 0x0b, - 0xb4, 0x5d, 0xd1, 0xd6, 0x4a, 0x06, 0xd8, 0xa0, 0x31, 0xe3, 0x82, 0xe8, 0xa7, 0x19, 0xb9, 0x2d, - 0x88, 0x4e, 0x73, 0xf3, 0x13, 0x9a, 0xd2, 0x58, 0x9e, 0x05, 0x17, 0x59, 0x20, 0x95, 0xfb, 0x0c, - 0xde, 0xaa, 0x4c, 0x65, 0x22, 0xb8, 0x0c, 0xd0, 0x63, 0xd8, 0x48, 0xf4, 0xa4, 0x03, 0xb6, 0xc1, - 0xc3, 0x9b, 0x87, 0x2d, 0x6f, 0x36, 0xab, 0x67, 0xd8, 0xdd, 0xe6, 0x60, 0xe4, 0x58, 0x5f, 0x7e, - 0x7f, 0xdd, 0x03, 0x67, 0x05, 0xdd, 0x6d, 0xc3, 0xdb, 0x5a, 0xef, 0x29, 0x7f, 0x1d, 0xe9, 0xa8, - 0xa5, 0xd1, 0x39, 0xdc, 0xac, 0x03, 0x85, 0xd7, 0x29, 0x6c, 0xb2, 0x72, 0xa8, 0xed, 0xd6, 0xba, - 0x47, 0xb9, 0xf0, 0x8f, 0x91, 0xf3, 0x20, 0x64, 0xea, 0x4d, 0xe6, 0x7b, 0x3d, 0x11, 0x93, 0x9e, - 0x90, 0xb1, 0x90, 0xc5, 0x6b, 0x5f, 0xbe, 0x3a, 0x27, 0xea, 0x2a, 0x09, 0xa4, 0xf7, 0x24, 0xe8, - 0x99, 0x08, 0x7f, 0x55, 0x5c, 0x0c, 0xb7, 0xb4, 0xd9, 0x31, 0xe7, 0x19, 0x8d, 0x4e, 0x52, 0xd1, - 0x67, 0x32, 0x5f, 0x5b, 0x19, 0xe6, 0x1d, 0x80, 0x77, 0x97, 0x10, 0x8a, 0x50, 0x2f, 0xe1, 0x06, - 0xd5, 0xd8, 0x8b, 0x64, 0x0a, 0xfe, 0x4f, 0xb8, 0x75, 0x5a, 0x73, 0x3a, 0xfc, 0x70, 0x1d, 0xde, - 0xd0, 0x19, 0x50, 0x0c, 0x1b, 0x66, 0xa1, 0x68, 0xbb, 0xba, 0xe6, 0xf9, 0xbe, 0xec, 0x9d, 0x15, - 0x0c, 0x13, 0xdd, 0xc5, 0xef, 0xbf, 0xfd, 0xfa, 0x74, 0xad, 0x83, 0x36, 0xcb, 0x54, 0xe5, 0x7d, - 0x98, 0x8a, 0xd0, 0x5b, 0xd8, 0x9c, 0x96, 0x80, 0xee, 0x2d, 0xd0, 0xab, 0x77, 0x67, 0xdf, 0x5f, - 0x4d, 0x2a, 0x7c, 0x1d, 0xed, 0x7b, 0x07, 0xb5, 0x49, 0xe5, 0x2a, 0xa7, 0xad, 0xa0, 0xcf, 0x00, - 0xae, 0xd7, 0x17, 0x8e, 0xf6, 0x16, 0x68, 0x2f, 0xa9, 0xcd, 0x7e, 0xf4, 0x4f, 0xdc, 0x22, 0xce, - 0xae, 0x8e, 0xb3, 0x83, 0x9c, 0x6a, 0x9c, 0xb9, 0x56, 0xbb, 0xc7, 0x83, 0x31, 0x06, 0xc3, 0x31, - 0x06, 0x3f, 0xc7, 0x18, 0x7c, 0x9c, 0x60, 0x6b, 0x38, 0xc1, 0xd6, 0xf7, 0x09, 0xb6, 0x9e, 0xef, - 0xce, 0x34, 0xec, 0x67, 0x29, 0x57, 0xfb, 0x11, 0xf5, 0xa5, 0xd1, 0xbb, 0x34, 0x8a, 0xba, 0x66, - 0xbf, 0xa1, 0x7f, 0xb1, 0xa3, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xec, 0x2a, 0x9b, 0xec, 0xec, - 0x03, 0x00, 0x00, + // 465 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x53, 0x4f, 0x6f, 0xd3, 0x30, + 0x1c, 0x8d, 0x41, 0x54, 0xaa, 0xd9, 0x61, 0x33, 0x61, 0x1d, 0x51, 0x49, 0xb6, 0x80, 0x18, 0x1a, + 0x5a, 0xac, 0x6d, 0x07, 0xce, 0xab, 0xb8, 0x70, 0x41, 0xdb, 0x8e, 0x5c, 0xc0, 0x29, 0x21, 0x58, + 0x4d, 0xec, 0x34, 0x76, 0x4a, 0x7b, 0x04, 0xf1, 0x01, 0x90, 0xe0, 0x43, 0x70, 0xe4, 0x63, 0xf4, + 0x58, 0x89, 0x0b, 0xe2, 0x50, 0xa1, 0x16, 0x89, 0xaf, 0x81, 0x62, 0xa7, 0xa5, 0x49, 0xff, 0x08, + 0x89, 0x4b, 0x62, 0xfd, 0xde, 0xd3, 0x7b, 0x4f, 0xbf, 0x67, 0xc3, 0xbd, 0x3e, 0xe5, 0x0c, 0xc7, + 0x94, 0x49, 0xdc, 0x3b, 0xc1, 0xdd, 0x2c, 0x48, 0x07, 0x5e, 0x92, 0x72, 0xc9, 0xd1, 0x56, 0x8e, + 0x78, 0x39, 0xe2, 0xf5, 0x4e, 0x2c, 0x33, 0xe4, 0x21, 0x57, 0x00, 0xce, 0x4f, 0x9a, 0x63, 0x35, + 0x43, 0xce, 0xc3, 0x28, 0xc0, 0x24, 0xa1, 0x98, 0x30, 0xc6, 0x25, 0x91, 0x94, 0x33, 0x51, 0xa0, + 0x8d, 0x92, 0xb6, 0x52, 0xd2, 0xc0, 0x0e, 0x89, 0x29, 0xe3, 0x58, 0x7d, 0xf5, 0xc8, 0x35, 0x21, + 0xba, 0xcc, 0xcd, 0x2f, 0x48, 0x4a, 0x62, 0x71, 0x15, 0x74, 0xb3, 0x40, 0x48, 0xf7, 0x19, 0xbc, + 0x55, 0x9a, 0x8a, 0x84, 0x33, 0x11, 0xa0, 0xc7, 0xb0, 0x96, 0xa8, 0xc9, 0x1e, 0xd8, 0x07, 0x0f, + 0x6f, 0x9e, 0x9a, 0xde, 0x62, 0x56, 0x4f, 0xb3, 0x5b, 0xf5, 0xe1, 0xd8, 0x31, 0xbe, 0xfc, 0xfe, + 0x7a, 0x04, 0xae, 0x0a, 0xba, 0xdb, 0x80, 0xb7, 0x95, 0xde, 0x53, 0xf6, 0x3a, 0x52, 0x51, 0x67, + 0x46, 0x1d, 0xb8, 0x5b, 0x05, 0x0a, 0xaf, 0x4b, 0x58, 0xa7, 0xb3, 0xa1, 0xb2, 0xdb, 0x6a, 0x9d, + 0xe5, 0xc2, 0x3f, 0xc6, 0xce, 0x83, 0x90, 0xca, 0x37, 0x99, 0xef, 0xb5, 0x79, 0x8c, 0xdb, 0x5c, + 0xc4, 0x5c, 0x14, 0xbf, 0x63, 0xf1, 0xaa, 0x83, 0xe5, 0x20, 0x09, 0x84, 0xf7, 0x24, 0x68, 0xeb, + 0x08, 0x7f, 0x55, 0x5c, 0x1b, 0x36, 0x95, 0xd9, 0x39, 0x63, 0x19, 0x89, 0x2e, 0x52, 0xde, 0xa3, + 0x22, 0x5f, 0xdb, 0x2c, 0xcc, 0x3b, 0x00, 0xef, 0xae, 0x21, 0x14, 0xa1, 0x5e, 0xc2, 0x1d, 0xa2, + 0xb0, 0x17, 0xc9, 0x1c, 0xfc, 0x9f, 0x70, 0xdb, 0xa4, 0xe2, 0x74, 0xfa, 0xe1, 0x3a, 0xbc, 0xa1, + 0x32, 0xa0, 0x0e, 0xac, 0xe9, 0x85, 0xa2, 0xfd, 0xf2, 0x9a, 0x97, 0xfb, 0xb2, 0x0e, 0x36, 0x30, + 0x74, 0x74, 0xb7, 0xf9, 0xfe, 0xdb, 0xaf, 0x4f, 0xd7, 0x76, 0x91, 0x89, 0x4b, 0xb7, 0x43, 0x17, + 0x84, 0xde, 0xc2, 0xfa, 0xbc, 0x02, 0x74, 0x6f, 0x85, 0x5a, 0xb5, 0x39, 0xeb, 0xfe, 0x66, 0x52, + 0xe1, 0xea, 0x28, 0xd7, 0x3b, 0xa8, 0x51, 0x76, 0x9d, 0x77, 0x82, 0x3e, 0x03, 0xb8, 0x5d, 0x5d, + 0x37, 0x3a, 0x5a, 0xa1, 0xbd, 0xa6, 0x34, 0xeb, 0xd1, 0x3f, 0x71, 0x8b, 0x38, 0x87, 0x2a, 0xce, + 0x01, 0x72, 0xca, 0x71, 0x96, 0x3a, 0x6d, 0x9d, 0x0f, 0x27, 0x36, 0x18, 0x4d, 0x6c, 0xf0, 0x73, + 0x62, 0x83, 0x8f, 0x53, 0xdb, 0x18, 0x4d, 0x6d, 0xe3, 0xfb, 0xd4, 0x36, 0x9e, 0x1f, 0x2e, 0xf4, + 0xeb, 0x67, 0x29, 0x93, 0xc7, 0x11, 0xf1, 0x85, 0xd6, 0xeb, 0x6b, 0x45, 0x55, 0xb2, 0x5f, 0x53, + 0x0f, 0xec, 0xec, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0x56, 0x80, 0x9e, 0xea, 0x03, 0x00, + 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/mint/types/query.pb.gw.go b/x/mint/types/query.pb.gw.go index 5f62c38f..49530b35 100644 --- a/x/mint/types/query.pb.gw.go +++ b/x/mint/types/query.pb.gw.go @@ -267,7 +267,7 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie } var ( - pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"cosmos", "mint", "v1", "params"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"xion", "mint", "v1", "params"}, "", runtime.AssumeColonVerbOpt(false))) pattern_Query_Inflation_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"xion", "mint", "v1", "inflation"}, "", runtime.AssumeColonVerbOpt(false))) diff --git a/x/xion/types/tx.pb.go b/x/xion/types/tx.pb.go index f8ae0d29..8275d518 100644 --- a/x/xion/types/tx.pb.go +++ b/x/xion/types/tx.pb.go @@ -357,11 +357,14 @@ const _ = grpc.SupportPackageIsVersion4 // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type MsgClient interface { - // Send defines a method for sending coins from one account to another account. + // Send defines a method for sending coins from one account to another + // account. Send(ctx context.Context, in *MsgSend, opts ...grpc.CallOption) (*MsgSendResponse, error) - // MultiSend defines a method for sending coins from some accounts to other accounts. + // MultiSend defines a method for sending coins from some accounts to other + // accounts. MultiSend(ctx context.Context, in *MsgMultiSend, opts ...grpc.CallOption) (*MsgMultiSendResponse, error) - // SetPlatformPercentage defines the method for updating the platform percentage fee + // SetPlatformPercentage defines the method for updating the platform + // percentage fee SetPlatformPercentage(ctx context.Context, in *MsgSetPlatformPercentage, opts ...grpc.CallOption) (*MsgSetPlatformPercentageResponse, error) } @@ -402,11 +405,14 @@ func (c *msgClient) SetPlatformPercentage(ctx context.Context, in *MsgSetPlatfor // MsgServer is the server API for Msg service. type MsgServer interface { - // Send defines a method for sending coins from one account to another account. + // Send defines a method for sending coins from one account to another + // account. Send(context.Context, *MsgSend) (*MsgSendResponse, error) - // MultiSend defines a method for sending coins from some accounts to other accounts. + // MultiSend defines a method for sending coins from some accounts to other + // accounts. MultiSend(context.Context, *MsgMultiSend) (*MsgMultiSendResponse, error) - // SetPlatformPercentage defines the method for updating the platform percentage fee + // SetPlatformPercentage defines the method for updating the platform + // percentage fee SetPlatformPercentage(context.Context, *MsgSetPlatformPercentage) (*MsgSetPlatformPercentageResponse, error) } From c950fce39d9fd45130901025506664d6a49909a9 Mon Sep 17 00:00:00 2001 From: Eduardo Diaz Date: Thu, 14 Sep 2023 16:33:18 -0400 Subject: [PATCH 168/501] remove danglign functions --- x/globalfee/ante/fee_utils.go | 18 -------- x/globalfee/ante/validator_tx_fee.go | 66 ---------------------------- 2 files changed, 84 deletions(-) delete mode 100644 x/globalfee/ante/validator_tx_fee.go diff --git a/x/globalfee/ante/fee_utils.go b/x/globalfee/ante/fee_utils.go index 96284b5d..b49ada31 100644 --- a/x/globalfee/ante/fee_utils.go +++ b/x/globalfee/ante/fee_utils.go @@ -119,21 +119,3 @@ func MaxCoins(a, b sdk.Coins) sdk.Coins { } return b } - -// CheckGas returns an error if there are incongruences between the height -// and the gas provided by the FeeTx -func CheckGas(ctx sdk.Context, tx sdk.FeeTx, simulate bool) (sdk.Context, error) { - if !simulate && ctx.BlockHeight() > 0 && tx.GetGas() == 0 { - return ctx, sdkerrors.Wrap(sdkerrors.ErrInvalidGasLimit, "must provide positive gas") - } - return ctx, nil -} - -// CheckFeeTx returns a Fee tx if the Tx satisifies the valid interface -func CheckFeeTx(ctx sdk.Context, tx sdk.Tx) (sdk.FeeTx, error) { - feeTx, ok := tx.(sdk.FeeTx) - if !ok { - return nil, sdkerrors.Wrap(sdkerrors.ErrTxDecode, "Tx must be a FeeTx") - } - return feeTx, nil -} diff --git a/x/globalfee/ante/validator_tx_fee.go b/x/globalfee/ante/validator_tx_fee.go deleted file mode 100644 index 7da487d1..00000000 --- a/x/globalfee/ante/validator_tx_fee.go +++ /dev/null @@ -1,66 +0,0 @@ -package ante - -import ( - "math" - - sdkmath "cosmossdk.io/math" - sdk "github.com/cosmos/cosmos-sdk/types" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" -) - -// checkTxFeeWithValidatorMinGasPrices implements the default fee logic, where the minimum price per -// unit of gas is fixed and set by each validator, can the tx priority is computed from the gas price. -func checkTxFeeWithValidatorMinGasPrices(ctx sdk.Context, tx sdk.Tx) (sdk.Coins, int64, error) { - feeTx, ok := tx.(sdk.FeeTx) - if !ok { - return nil, 0, sdkerrors.Wrap(sdkerrors.ErrTxDecode, "Tx must be a FeeTx") - } - - feeCoins := feeTx.GetFee() - gas := feeTx.GetGas() - - // Ensure that the provided fees meet a minimum threshold for the validator, - // if this is a CheckTx. This is only for local mempool purposes, and thus - // is only ran on check tx. - if ctx.IsCheckTx() { - minGasPrices := ctx.MinGasPrices() - if !minGasPrices.IsZero() { - requiredFees := make(sdk.Coins, len(minGasPrices)) - - // Determine the required fees by multiplying each required minimum gas - // price by the gas limit, where fee = ceil(minGasPrice * gasLimit). - glDec := sdkmath.LegacyNewDec(int64(gas)) - for i, gp := range minGasPrices { - fee := gp.Amount.Mul(glDec) - requiredFees[i] = sdk.NewCoin(gp.Denom, fee.Ceil().RoundInt()) - } - - if !feeCoins.IsAnyGTE(requiredFees) { - return nil, 0, sdkerrors.Wrapf(sdkerrors.ErrInsufficientFee, "insufficient fees; got: %s required: %s", feeCoins, requiredFees) - } - } - } - - priority := getTxPriority(feeCoins, int64(gas)) - return feeCoins, priority, nil -} - -// getTxPriority returns a naive tx priority based on the amount of the smallest denomination of the gas price -// provided in a transaction. -// NOTE: This implementation should be used with a great consideration as it opens potential attack vectors -// where txs with multiple coins could not be prioritized as expected. -func getTxPriority(fee sdk.Coins, gas int64) int64 { - var priority int64 - for _, c := range fee { - p := int64(math.MaxInt64) - gasPrice := c.Amount.QuoRaw(gas) - if gasPrice.IsInt64() { - p = gasPrice.Int64() - } - if priority == 0 || p < priority { - priority = p - } - } - - return priority -} From bb1d626739f2fca7b7bc5cea0edb38ad106fe214 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eduardo=20D=C3=ADaz?= Date: Wed, 20 Sep 2023 16:32:20 -0400 Subject: [PATCH 169/501] Update x/globalfee/ante/fee.go --- x/globalfee/ante/fee.go | 1 - 1 file changed, 1 deletion(-) diff --git a/x/globalfee/ante/fee.go b/x/globalfee/ante/fee.go index a965fef9..178e28f2 100644 --- a/x/globalfee/ante/fee.go +++ b/x/globalfee/ante/fee.go @@ -86,7 +86,6 @@ func (mfd FeeDecorator) GetTxFeeRequired(ctx sdk.Context, tx sdk.FeeTx) (sdk.Coi // Get local minimum-gas-prices localFees := GetMinGasPrice(ctx, int64(tx.GetGas())) return CombinedFeeRequirement(globalFees, localFees) - //return MaxCoins(globalFees, localFees), nil } // GetGlobalFee returns the global fees for a given fee tx's gas From b1d75e1ec7448e6b2099211b5e5bf2494278b339 Mon Sep 17 00:00:00 2001 From: Eduardo Diaz Date: Thu, 21 Sep 2023 10:21:13 -0400 Subject: [PATCH 170/501] add sign-send command --- x/xion/client/cli/tx.go | 156 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 155 insertions(+), 1 deletion(-) diff --git a/x/xion/client/cli/tx.go b/x/xion/client/cli/tx.go index 52404e8c..944fe8f9 100644 --- a/x/xion/client/cli/tx.go +++ b/x/xion/client/cli/tx.go @@ -1,8 +1,13 @@ package cli import ( + "context" + "errors" "fmt" + "os" + "github.com/burnt-labs/xion/x/xion/types" + "github.com/cosmos/gogoproto/proto" "github.com/spf13/cobra" @@ -10,10 +15,18 @@ import ( "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/client/tx" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/tx/signing" + authsigning "github.com/cosmos/cosmos-sdk/x/auth/signing" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" + + aatypes "github.com/larry0x/abstract-account/x/abstractaccount/types" ) -const FlagSplit = "split" +const ( + FlagSplit = "split" + signMode = signing.SignMode_SIGN_MODE_DIRECT +) // NewTxCmd returns a root CLI command handler for all x/xion transaction commands. func NewTxCmd() *cobra.Command { @@ -28,6 +41,7 @@ func NewTxCmd() *cobra.Command { txCmd.AddCommand( NewSendTxCmd(), NewMultiSendTxCmd(), + NewSignCmd(), ) return txCmd @@ -143,3 +157,143 @@ When using '--dry-run' a key name cannot be used, only a bech32 address. return cmd } + +// NewSendTxCmd returns a CLI command handler for creating a MsgSend transaction. +func NewSignCmd() *cobra.Command { + cmd := &cobra.Command{ + Use: "sign [path/to/tx.json]", + Short: "sign a transaction", + Long: `Sign transaction by retrieving the Smart Contract Account signer.`, + Args: cobra.ExactArgs(3), + RunE: func(cmd *cobra.Command, args []string) error { + cmd.Flags().Set(flags.FlagFrom, args[0]) + + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + + txBz, err := os.ReadFile(args[0]) + if err != nil { + panic(err) + } + + stdTx, err := clientCtx.TxConfig.TxJSONDecoder()(txBz) + if err != nil { + panic(err) + } + + queryClient := authtypes.NewQueryClient(clientCtx) // TODO: determine if the ClientCtx has a qurey client + + signerAcc, err := getSignerOfTx(queryClient, stdTx) + if err != nil { + panic(err) + + } + + signerData := authsigning.SignerData{ + Address: signerAcc.GetAddress().String(), + ChainID: clientCtx.ChainID, // TODO: what's the chain ID ? get it from flag / + AccountNumber: signerAcc.GetAccountNumber(), + Sequence: signerAcc.GetSequence(), + PubKey: signerAcc.GetPubKey(), + } + + txBuilder, err := clientCtx.TxConfig.WrapTxBuilder(stdTx) + if err != nil { + panic(err) + } + + sigData := signing.SingleSignatureData{ + SignMode: signMode, + Signature: nil, + } + + sig := signing.SignatureV2{ + PubKey: signerAcc.GetPubKey(), + Data: &sigData, + Sequence: signerAcc.GetSequence(), + } + + if err := txBuilder.SetSignatures(sig); err != nil { + panic(err) + } + + signBytes, err := clientCtx.TxConfig.SignModeHandler().GetSignBytes(signMode, signerData, txBuilder.GetTx()) + if err != nil { + panic(err) + } + + sigBytes, _, err := clientCtx.Keyring.Sign("foo", signBytes) // TODO: add keyname as either flag or parameter + if err != nil { + panic(err) + } + + sigData = signing.SingleSignatureData{ + SignMode: signMode, + Signature: sigBytes, + } + + sig = signing.SignatureV2{ + PubKey: signerAcc.GetPubKey(), + Data: &sigData, + Sequence: signerAcc.GetSequence(), + } + + if err := txBuilder.SetSignatures(sig); err != nil { + panic(err) + } + + bz, err := clientCtx.TxConfig.TxEncoder()(txBuilder.GetTx()) + if err != nil { + return err + } + res, err := clientCtx.BroadcastTx(bz) + if err != nil { + return err + } + + return clientCtx.PrintProto(res) + }, + } + + flags.AddTxFlagsToCmd(cmd) + + return cmd +} + +func getSignerOfTx(queryClient authtypes.QueryClient, stdTx sdk.Tx) (*aatypes.AbstractAccount, error) { + var signerAddr sdk.AccAddress = nil + for i, msg := range stdTx.GetMsgs() { + signers := msg.GetSigners() + if len(signers) != 1 { + return nil, fmt.Errorf("msg %d has more than one signers", i) + } + + if signerAddr != nil && !signerAddr.Equals(signers[0]) { + return nil, errors.New("tx has more than one signers") + } + + signerAddr = signers[0] + } + + res, err := queryClient.Account(context.Background(), &authtypes.QueryAccountRequest{Address: signerAddr.String()}) + if err != nil { + return nil, err + } + + if res.Account.TypeUrl != typeURL((*aatypes.AbstractAccount)(nil)) { + return nil, fmt.Errorf("signer %s is not an AbstractAccount", signerAddr.String()) + } + + var acc = &aatypes.AbstractAccount{} + if err = proto.Unmarshal(res.Account.Value, acc); err != nil { + return nil, err + } + + return acc, nil +} + +func typeURL(x proto.Message) string { + return "/" + proto.MessageName(x) +} From 7a56cf4a03172990bb599d318e19c80493d4d22e Mon Sep 17 00:00:00 2001 From: Eduardo Diaz Date: Thu, 21 Sep 2023 10:21:30 -0400 Subject: [PATCH 171/501] add test structure --- integration_tests/abstract_account_test.go | 63 ++++++++++++++++++ .../contracts/account_updatable-aarch64.wasm | Bin 0 -> 160787 bytes 2 files changed, 63 insertions(+) create mode 100644 integration_tests/abstract_account_test.go create mode 100644 integration_tests/testdata/contracts/account_updatable-aarch64.wasm diff --git a/integration_tests/abstract_account_test.go b/integration_tests/abstract_account_test.go new file mode 100644 index 00000000..3c30ce63 --- /dev/null +++ b/integration_tests/abstract_account_test.go @@ -0,0 +1,63 @@ +package integration_tests + +import ( + "fmt" + "testing" + + xiontypes "github.com/burnt-labs/xion/x/xion/types" + "github.com/cosmos/cosmos-sdk/types" + ibctest "github.com/strangelove-ventures/interchaintest/v7" + "github.com/strangelove-ventures/interchaintest/v7/testutil" + "github.com/stretchr/testify/require" +) + +func TestXionAbstractAccount(t *testing.T) { + if testing.Short() { + t.Skip("skipping in short mode") + } + + t.Parallel() + + td := BuildXionChain(t, "0.1uxion", ModifyInterChainGenesis(ModifyInterChainGenesisFn{ModifyGenesisShortProposals}, [][]string{{votingPeriod, maxDepositPeriod}})) + xion, ctx := td.xionChain, td.ctx + + // Create and Fund User Wallets + t.Log("creating and funding user accounts") + fundAmount := int64(10_000_000) + users := ibctest.GetAndFundTestUsers(t, ctx, "default", fundAmount, xion) + xionUser := users[0] + currentHeight, _ := xion.Height(ctx) + testutil.WaitForBlocks(ctx, int(currentHeight)+8, xion) + t.Logf("created xion user %s", xionUser.FormattedAddress()) + + xionUserBalInitial, err := xion.GetBalance(ctx, xionUser.FormattedAddress(), xion.Config().Denom) + require.NoError(t, err) + require.Equal(t, fundAmount, xionUserBalInitial) + + // step 1: send a xion message with default (0%) platform fee + recipientKeyName := "recipient-key" + err = xion.CreateKey(ctx, recipientKeyName) + require.NoError(t, err) + receipientKeyAddressBytes, err := xion.GetAddress(ctx, recipientKeyName) + require.NoError(t, err) + recipientKeyAddress, err := types.Bech32ifyAddressBytes(xion.Config().Bech32Prefix, receipientKeyAddressBytes) + require.NoError(t, err) + + xion.Config().EncodingConfig.InterfaceRegistry.RegisterImplementations( + (*types.Msg)(nil), + &xiontypes.MsgSetPlatformPercentage{}, + &xiontypes.MsgSend{}, + ) + + currentHeight, _ = xion.Height(ctx) + _, err = ExecTx(t, ctx, xion.FullNodes[0], + xionUser.KeyName(), + "xion", "send", xionUser.KeyName(), + "--chain-id", xion.Config().ChainID, + recipientKeyAddress, fmt.Sprintf("%d%s", 100, xion.Config().Denom), + ) + require.NoError(t, err) + balance, err := xion.GetBalance(ctx, recipientKeyAddress, xion.Config().Denom) + require.NoError(t, err) + require.Equal(t, uint64(100), uint64(balance)) +} diff --git a/integration_tests/testdata/contracts/account_updatable-aarch64.wasm b/integration_tests/testdata/contracts/account_updatable-aarch64.wasm new file mode 100644 index 0000000000000000000000000000000000000000..0ed245da46d7451f2ce8f43ff9e7374f1e1b9525 GIT binary patch literal 160787 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 MJl8I+Q`+nQFD4%t!~g&Q literal 0 HcmV?d00001 From b9cfc8953e1503d56c8ed207376f3afda8ea8e5b Mon Sep 17 00:00:00 2001 From: Francis Roch Date: Wed, 27 Sep 2023 10:52:45 -0400 Subject: [PATCH 172/501] Update Github Actions workflows --- .github/workflows/aws-ecr.yml | 54 +++++++++++++++----------------- .github/workflows/docker-hub.yml | 22 +++++++------ skaffold.yaml | 25 --------------- 3 files changed, 38 insertions(+), 63 deletions(-) delete mode 100644 skaffold.yaml diff --git a/.github/workflows/aws-ecr.yml b/.github/workflows/aws-ecr.yml index 98847006..65873ae3 100644 --- a/.github/workflows/aws-ecr.yml +++ b/.github/workflows/aws-ecr.yml @@ -2,9 +2,9 @@ name: Build and Push to Amazon ECR on: - push: - branches: - - main +# push: +# branches: +# - main workflow_dispatch: jobs: @@ -16,10 +16,12 @@ jobs: steps: - name: Check out code - uses: actions/checkout@v3 + uses: actions/checkout@v4 + with: + fetch-depth: 0 - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@v2 + uses: aws-actions/configure-aws-credentials@v4 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} @@ -29,30 +31,24 @@ jobs: id: login-ecr uses: aws-actions/amazon-ecr-login@v1 - - name: Compute short SHA - id: vars - run: echo "sha_short=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT - - - name: Check short SHA - run: echo ${{ steps.vars.outputs.sha_short }} + - name: Set up docker buildx + uses: docker/setup-buildx-action@v3 - - name: Install Skaffold - run: | - curl -Lo skaffold https://storage.googleapis.com/skaffold/releases/latest/skaffold-linux-amd64 && \ - sudo install skaffold /usr/local/bin/ - skaffold version + - name: Extract metadata for docker + id: meta + uses: docker/metadata-action@v5 + with: + images: 385156030167.dkr.ecr.us-east-1.amazonaws.com/burnt/xiond + tags: | + type=semver,pattern={{version}},priority=1000 + type=sha,priority=700 - - name: Cache skaffold image builds & config - uses: actions/cache@v3 + - name: Build and push docker image + uses: docker/build-push-action@v5 with: - path: ~/.skaffold/ - key: sha-${{ steps.vars.outputs.sha_short }} - restore-keys: | - sha-${{ steps.vars.outputs.sha_short }} - sha- - - - name: Build, tag, and push image to Amazon ECR - env: - IMAGE_TAG: sha-${{ steps.vars.outputs.sha_short }} - run: | - skaffold build + context: . + push: true + tags: ${{ steps.meta.outputs.tags }} + cache-from: type=gha + cache-to: type=gha,mode=max + target: xion-release diff --git a/.github/workflows/docker-hub.yml b/.github/workflows/docker-hub.yml index 06142e24..00d66596 100644 --- a/.github/workflows/docker-hub.yml +++ b/.github/workflows/docker-hub.yml @@ -2,17 +2,21 @@ name: Build and Push to Docker Hub on: - push: - branches: - - main +# push: +# branches: +# - main workflow_dispatch: jobs: - release: + + build: + name: Build Image runs-on: ubuntu-latest + environment: CI + steps: - - name: Checkout - uses: actions/checkout@v3 + - name: Check out code + uses: actions/checkout@v4 with: fetch-depth: 0 @@ -23,11 +27,11 @@ jobs: password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} - name: Set up docker buildx - uses: docker/setup-buildx-action@v2 + uses: docker/setup-buildx-action@v3 - name: Extract metadata for docker id: meta - uses: docker/metadata-action@v4 + uses: docker/metadata-action@v5 with: images: burntnetwork/xion tags: | @@ -35,7 +39,7 @@ jobs: type=sha,priority=700 - name: Build and push docker image - uses: docker/build-push-action@v4 + uses: docker/build-push-action@v5 with: context: . push: true diff --git a/skaffold.yaml b/skaffold.yaml deleted file mode 100644 index 9522df44..00000000 --- a/skaffold.yaml +++ /dev/null @@ -1,25 +0,0 @@ ---- -apiVersion: skaffold/v4beta2 -kind: Config - -build: - local: - push: true - useBuildkit: true - concurrency: 0 - tryImportMissing: true - tagPolicy: - envTemplate: - template: "{{ .IMAGE_TAG }}" - platforms: ["linux/amd64"] - artifacts: - - image: 385156030167.dkr.ecr.us-east-1.amazonaws.com/burnt/xiond - context: . - docker: - cacheFrom: - - 385156030167.dkr.ecr.us-east-1.amazonaws.com/burnt/xiond - -deploy: - docker: - images: - - 385156030167.dkr.ecr.us-east-1.amazonaws.com/burnt/xiond From 342fb0fd26d80099ce3d37c3ae06b9dbd555de15 Mon Sep 17 00:00:00 2001 From: Francis Roch Date: Wed, 27 Sep 2023 11:08:27 -0400 Subject: [PATCH 173/501] Update Github Actions workflows for ECR and Docker Hub --- .github/workflows/aws-ecr.yml | 6 +++--- .github/workflows/docker-hub.yml | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/aws-ecr.yml b/.github/workflows/aws-ecr.yml index 65873ae3..e54d2119 100644 --- a/.github/workflows/aws-ecr.yml +++ b/.github/workflows/aws-ecr.yml @@ -2,9 +2,9 @@ name: Build and Push to Amazon ECR on: -# push: -# branches: -# - main + push: + branches: + - main workflow_dispatch: jobs: diff --git a/.github/workflows/docker-hub.yml b/.github/workflows/docker-hub.yml index 00d66596..7e242a95 100644 --- a/.github/workflows/docker-hub.yml +++ b/.github/workflows/docker-hub.yml @@ -2,9 +2,9 @@ name: Build and Push to Docker Hub on: -# push: -# branches: -# - main + push: + branches: + - main workflow_dispatch: jobs: From a2c787377a7aa461c90523c57a5a39d02a06c90a Mon Sep 17 00:00:00 2001 From: Francis Roch Date: Wed, 27 Sep 2023 11:09:00 -0400 Subject: [PATCH 174/501] Add `make test-version` target --- Makefile | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Makefile b/Makefile index d8d61cd4..10147c71 100644 --- a/Makefile +++ b/Makefile @@ -122,6 +122,9 @@ distclean: clean test: test-unit test-all: check test-race test-cover +test-version: + @echo $(VERSION) + test-unit: @version=$(version) go test -mod=readonly -tags='ledger test_ledger_mock' ./... From 5ff1e26070c3a3a4a355c26e73b727fb0003e226 Mon Sep 17 00:00:00 2001 From: Francis Roch Date: Wed, 27 Sep 2023 11:19:15 -0400 Subject: [PATCH 175/501] Indent multistage Dockerfile for clarity --- Dockerfile | 73 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 38 insertions(+), 35 deletions(-) diff --git a/Dockerfile b/Dockerfile index ce2cf092..3e065bc3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,40 +1,44 @@ # docker build . -t cosmwasm/xiond:latest # docker run --rm -it cosmwasm/xiond:latest /bin/sh FROM golang:1.19-alpine3.17 AS go-builder -ARG arch=x86_64 - -# this comes from standard alpine nightly file -# https://github.com/rust-lang/docker-rust-nightly/blob/master/alpine3.12/Dockerfile -# with some changes to support our toolchain, etc -RUN set -eux; apk add --no-cache ca-certificates build-base; - -RUN apk add git -# NOTE: add these to run with LEDGER_ENABLED=true -# RUN apk add libusb-dev linux-headers - -WORKDIR /code -COPY ./.git /code/.git -COPY ./app /code/app -COPY ./cmd /code/cmd -COPY ./contrib /code/contrib -COPY ./proto /code/proto -COPY ./x /code/x -COPY go.mod /code/ -COPY go.sum /code/ -COPY Makefile /code/ -# See https://github.com/CosmWasm/wasmvm/releases -ADD https://github.com/CosmWasm/wasmvm/releases/download/v1.2.4/libwasmvm_muslc.aarch64.a /lib/libwasmvm_muslc.aarch64.a -ADD https://github.com/CosmWasm/wasmvm/releases/download/v1.2.4/libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.x86_64.a -RUN sha256sum /lib/libwasmvm_muslc.aarch64.a | grep 682a54082e131eaff9beec80ba3e5908113916fcb8ddf7c668cb2d97cb94c13c -RUN sha256sum /lib/libwasmvm_muslc.x86_64.a | grep ce3d892377d2523cf563e01120cb1436f9343f80be952c93f66aa94f5737b661 - -# Copy the library you want to the final location that will be found by the linker flag `-lwasmvm_muslc` -RUN cp /lib/libwasmvm_muslc.${arch}.a /lib/libwasmvm_muslc.a - -# force it to use static lib (from above) not standard libgo_cosmwasm.so file -RUN LEDGER_ENABLED=false BUILD_TAGS=muslc LINK_STATICALLY=true make build -RUN echo "Ensuring binary is statically linked ..." \ - && (file /code/build/xiond | grep "statically linked") + ARG arch=x86_64 + + # this comes from standard alpine nightly file + # https://github.com/rust-lang/docker-rust-nightly/blob/master/alpine3.12/Dockerfile + # with some changes to support our toolchain, etc + RUN set -eux; apk add --no-cache ca-certificates build-base; + + RUN apk add git + # NOTE: add these to run with LEDGER_ENABLED=true + # RUN apk add libusb-dev linux-headers + + WORKDIR /code + COPY ./.git /code/.git + COPY ./app /code/app + COPY ./cmd /code/cmd + COPY ./contrib /code/contrib + COPY ./proto /code/proto + COPY ./x /code/x + COPY go.mod /code/ + COPY go.sum /code/ + COPY Makefile /code/ + + # See https://github.com/CosmWasm/wasmvm/releases + ADD https://github.com/CosmWasm/wasmvm/releases/download/v1.2.4/libwasmvm_muslc.aarch64.a /lib/libwasmvm_muslc.aarch64.a + ADD https://github.com/CosmWasm/wasmvm/releases/download/v1.2.4/libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.x86_64.a + RUN sha256sum /lib/libwasmvm_muslc.aarch64.a | grep 682a54082e131eaff9beec80ba3e5908113916fcb8ddf7c668cb2d97cb94c13c + RUN sha256sum /lib/libwasmvm_muslc.x86_64.a | grep ce3d892377d2523cf563e01120cb1436f9343f80be952c93f66aa94f5737b661 + + # Copy the library you want to the final location that will be found by the linker flag `-lwasmvm_muslc` + RUN cp -vf /lib/libwasmvm_muslc.${arch}.a /lib/libwasmvm_muslc.a + + # force it to use static lib (from above) not standard libgo_cosmwasm.so file + RUN set -eux \ + && make test-version \ + && LEDGER_ENABLED=false BUILD_TAGS=muslc LINK_STATICALLY=true make build + + RUN echo "Ensuring binary is statically linked ..." \ + && (file /code/build/xiond | grep "statically linked") # -------------------------------------------------------- FROM alpine:3.16 AS localdev @@ -102,4 +106,3 @@ FROM alpine:3.17 AS xion-release WORKDIR /home/xiond/.xiond CMD ["/usr/bin/xiond", "version"] - From ba7a441aaf1924d85b8a8e96b2e1ce77078c978c Mon Sep 17 00:00:00 2001 From: Francis Roch Date: Wed, 27 Sep 2023 11:19:41 -0400 Subject: [PATCH 176/501] Fetch tags in GH Actions workflows to fix `xiond version` in containers --- .github/workflows/aws-ecr.yml | 1 + .github/workflows/docker-hub.yml | 1 + 2 files changed, 2 insertions(+) diff --git a/.github/workflows/aws-ecr.yml b/.github/workflows/aws-ecr.yml index e54d2119..9bd6d2d8 100644 --- a/.github/workflows/aws-ecr.yml +++ b/.github/workflows/aws-ecr.yml @@ -19,6 +19,7 @@ jobs: uses: actions/checkout@v4 with: fetch-depth: 0 + fetch-tags: true - name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@v4 diff --git a/.github/workflows/docker-hub.yml b/.github/workflows/docker-hub.yml index 7e242a95..1244d951 100644 --- a/.github/workflows/docker-hub.yml +++ b/.github/workflows/docker-hub.yml @@ -19,6 +19,7 @@ jobs: uses: actions/checkout@v4 with: fetch-depth: 0 + fetch-tags: true - name: Login to Docker Hub uses: docker/login-action@v2 From 7257162e302f7c0e3547317a2e9dc66aeebba6c3 Mon Sep 17 00:00:00 2001 From: Francis Roch Date: Wed, 27 Sep 2023 11:25:48 -0400 Subject: [PATCH 177/501] Normalize Alpine version in localdev build target --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 3e065bc3..6a0c807b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -41,7 +41,7 @@ FROM golang:1.19-alpine3.17 AS go-builder && (file /code/build/xiond | grep "statically linked") # -------------------------------------------------------- -FROM alpine:3.16 AS localdev +FROM alpine:3.17 AS localdev COPY --from=go-builder /code/build/xiond /usr/bin/xiond From fcdf174de9bdf1d196964bd33c3e4c2ee72f60a8 Mon Sep 17 00:00:00 2001 From: Francis Roch Date: Wed, 27 Sep 2023 15:04:36 -0400 Subject: [PATCH 178/501] Add Github Actions workflow to automate release on tag push --- .github/workflows/release.yml | 71 +++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 .github/workflows/release.yml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000..38694b96 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,71 @@ +name: Create Release and Publish Binary + +on: + push: + tags: + - '*' + +jobs: + release: + name: Release + runs-on: ubuntu-latest + environment: CI + + steps: + - name: Check out code + uses: actions/checkout@v4 + with: + fetch-depth: 0 + fetch-tags: true + + - name: Set up docker buildx + uses: docker/setup-buildx-action@v3 + + - name: Extract metadata for docker + id: meta + uses: docker/metadata-action@v5 + with: + images: burntnetwork/xion + tags: | + type=semver,pattern={{version}},priority=1000 + type=sha,priority=700 + + - name: Build docker image + uses: docker/build-push-action@v5 + with: + context: . + push: false + tags: ${{ steps.meta.outputs.tags }} + cache-from: type=gha + cache-to: type=gha,mode=max + target: xion-release + + - name: Copy xiond binary from container + id: copy-binary + run: | + docker create --name temp_container $(echo ${{ steps.meta.outputs.tags }} | awk '{print $1}') + docker cp temp_container:/usr/bin/xiond ./xiond + ./xiond version --long + docker rm -v temp_container + + - name: Create Release + id: create-release + uses: gh-actions/create-release@v1 + env: + GH_RELEASE_TOKEN: ${{ secrets.GH_RELEASE_TOKEN }} + with: + tag_name: ${{ github.ref }} + release_name: Release ${{ github.ref }} + draft: true + prerelease: true + + - name: Upload Release Asset + id: upload-release-asset + uses: actions/upload-release-asset@v1 + env: + GH_RELEASE_TOKEN: ${{ secrets.GH_RELEASE_TOKEN }} + with: + upload_url: ${{ steps.create-release.outputs.upload_url }} + asset_path: ./xiond + asset_name: xiond-${{ github.ref }}-linux-amd64 + asset_content_type: application/octet-stream From ac105187b3bda4b207353168ab2706f6829a8a64 Mon Sep 17 00:00:00 2001 From: Francis Roch Date: Wed, 27 Sep 2023 15:08:02 -0400 Subject: [PATCH 179/501] Add branch listener to test release workflow --- .github/workflows/release.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 38694b96..0d75d89a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -2,6 +2,8 @@ name: Create Release and Publish Binary on: push: + branches: + - froch/version tags: - '*' @@ -50,7 +52,7 @@ jobs: - name: Create Release id: create-release - uses: gh-actions/create-release@v1 + uses: actions/create-release@v1 env: GH_RELEASE_TOKEN: ${{ secrets.GH_RELEASE_TOKEN }} with: From af54727001627c352914de5c58c4670ad313f439 Mon Sep 17 00:00:00 2001 From: Francis Roch Date: Wed, 27 Sep 2023 15:20:11 -0400 Subject: [PATCH 180/501] Ensure Docker image manifest exists in release step --- .github/workflows/release.yml | 37 ++++++++++++++++------------------- 1 file changed, 17 insertions(+), 20 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0d75d89a..54d33c2f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -20,6 +20,12 @@ jobs: fetch-depth: 0 fetch-tags: true + - name: Login to Docker Hub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKER_HUB_USERNAME }} + password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} + - name: Set up docker buildx uses: docker/setup-buildx-action@v3 @@ -36,7 +42,7 @@ jobs: uses: docker/build-push-action@v5 with: context: . - push: false + push: true tags: ${{ steps.meta.outputs.tags }} cache-from: type=gha cache-to: type=gha,mode=max @@ -46,28 +52,19 @@ jobs: id: copy-binary run: | docker create --name temp_container $(echo ${{ steps.meta.outputs.tags }} | awk '{print $1}') - docker cp temp_container:/usr/bin/xiond ./xiond - ./xiond version --long + docker cp temp_container:/usr/bin/xiond ./xiond-linux-amd64 + ./xiond-linux-amd64 version --long docker rm -v temp_container - - name: Create Release + - name: Create and Update Release id: create-release - uses: actions/create-release@v1 - env: - GH_RELEASE_TOKEN: ${{ secrets.GH_RELEASE_TOKEN }} + uses: ncipollo/release-action@v1 with: - tag_name: ${{ github.ref }} - release_name: Release ${{ github.ref }} + allowUpdates: true draft: true prerelease: true - - - name: Upload Release Asset - id: upload-release-asset - uses: actions/upload-release-asset@v1 - env: - GH_RELEASE_TOKEN: ${{ secrets.GH_RELEASE_TOKEN }} - with: - upload_url: ${{ steps.create-release.outputs.upload_url }} - asset_path: ./xiond - asset_name: xiond-${{ github.ref }}-linux-amd64 - asset_content_type: application/octet-stream + artifacts: ./xiond-linux-amd64 + artifactContentType: application/octet-stream + tag: ${{ github.ref }} + token: ${{ secrets.GH_RELEASE_TOKEN }} + name: Release ${{ github.ref }} From b1e1074e0e998ce27ca8bec4fa377009e3e2ed52 Mon Sep 17 00:00:00 2001 From: Francis Roch Date: Wed, 27 Sep 2023 17:59:39 -0400 Subject: [PATCH 181/501] Build `linux/amd64`, `zip` and `tgz` in parallel for release --- .github/workflows/release.yml | 97 +++++++++++++++++++++++++++++------ 1 file changed, 82 insertions(+), 15 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 54d33c2f..33c4646f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -8,8 +8,8 @@ on: - '*' jobs: - release: - name: Release + + build-amd64: runs-on: ubuntu-latest environment: CI @@ -26,9 +26,6 @@ jobs: username: ${{ secrets.DOCKER_HUB_USERNAME }} password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} - - name: Set up docker buildx - uses: docker/setup-buildx-action@v3 - - name: Extract metadata for docker id: meta uses: docker/metadata-action@v5 @@ -38,23 +35,93 @@ jobs: type=semver,pattern={{version}},priority=1000 type=sha,priority=700 - - name: Build docker image + - name: Build docker image for linux/amd64 uses: docker/build-push-action@v5 with: context: . + platforms: linux/amd64 push: true tags: ${{ steps.meta.outputs.tags }} - cache-from: type=gha - cache-to: type=gha,mode=max - target: xion-release - - name: Copy xiond binary from container - id: copy-binary + - name: Copy xiond binary from linux/amd64 container + id: copy-binary-amd64 run: | - docker create --name temp_container $(echo ${{ steps.meta.outputs.tags }} | awk '{print $1}') - docker cp temp_container:/usr/bin/xiond ./xiond-linux-amd64 + docker create --name temp_container-amd64 $(echo ${{ steps.meta.outputs.tags }} | awk '{print $1}') + docker cp temp_container-amd64:/usr/bin/xiond ./xiond-linux-amd64 ./xiond-linux-amd64 version --long - docker rm -v temp_container + docker rm -v temp_container-amd64 + + - name: Upload binary + uses: actions/upload-artifact@v2 + with: + name: xiond-linux-amd64 + path: ./xiond-linux-amd64 + + build-zip: + runs-on: ubuntu-latest + environment: CI + + steps: + - name: Check out code + uses: actions/checkout@v4 + with: + fetch-depth: 0 + fetch-tags: true + + - name: Zip source + run: | + zip -r xiond.zip . -x '.github/*' 'docker/*' 'xiond.zip' + + - name: Upload zip + uses: actions/upload-artifact@v2 + with: + name: Source code (zip) + path: xiond.zip + + build-tgz: + runs-on: ubuntu-latest + environment: CI + + steps: + - name: Check out code + uses: actions/checkout@v4 + with: + fetch-depth: 0 + fetch-tags: true + + - name: Create tgz + run: | + tar --exclude='./xiond.tgz' -czvf xiond.tgz . + + - name: Upload tgz + uses: actions/upload-artifact@v2 + with: + name: Source code (tgz) + path: xiond.tgz + + release: + runs-on: ubuntu-latest + environment: CI + needs: + - build-amd64 + - build-zip + - build-tgz + + steps: + - name: Download xiond-linux-amd64 + uses: actions/download-artifact@v3 + with: + name: xiond-linux-amd64 + + - name: Download zip + uses: actions/download-artifact@v3 + with: + name: xiond.zip + + - name: Download tgz + uses: actions/download-artifact@v3 + with: + name: xiond.tgz - name: Create and Update Release id: create-release @@ -63,7 +130,7 @@ jobs: allowUpdates: true draft: true prerelease: true - artifacts: ./xiond-linux-amd64 + artifacts: xiond-linux-amd64,xiond.zip,xiond.tgz artifactContentType: application/octet-stream tag: ${{ github.ref }} token: ${{ secrets.GH_RELEASE_TOKEN }} From 1a1dfea3752f5ed00a799ad2235f851f8f0639a6 Mon Sep 17 00:00:00 2001 From: Francis Roch Date: Wed, 27 Sep 2023 18:55:35 -0400 Subject: [PATCH 182/501] Fix tarball generation --- .github/workflows/release.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 33c4646f..060b0a16 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -91,13 +91,13 @@ jobs: - name: Create tgz run: | - tar --exclude='./xiond.tgz' -czvf xiond.tgz . + tar -czvf /tmp/xiond.tgz . - name: Upload tgz uses: actions/upload-artifact@v2 with: name: Source code (tgz) - path: xiond.tgz + path: /tmp/xiond.tgz release: runs-on: ubuntu-latest From 33cc330ed6538d772533d981252fc88c9ba4135e Mon Sep 17 00:00:00 2001 From: Francis Roch Date: Wed, 27 Sep 2023 19:03:39 -0400 Subject: [PATCH 183/501] Fix artifact upload / download --- .github/workflows/release.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 060b0a16..aaf8137b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -52,7 +52,7 @@ jobs: docker rm -v temp_container-amd64 - name: Upload binary - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: xiond-linux-amd64 path: ./xiond-linux-amd64 @@ -73,7 +73,7 @@ jobs: zip -r xiond.zip . -x '.github/*' 'docker/*' 'xiond.zip' - name: Upload zip - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: Source code (zip) path: xiond.zip @@ -94,7 +94,7 @@ jobs: tar -czvf /tmp/xiond.tgz . - name: Upload tgz - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: Source code (tgz) path: /tmp/xiond.tgz @@ -116,12 +116,12 @@ jobs: - name: Download zip uses: actions/download-artifact@v3 with: - name: xiond.zip + name: "Source code (zip)" - name: Download tgz uses: actions/download-artifact@v3 with: - name: xiond.tgz + name: "Source code (tgz)" - name: Create and Update Release id: create-release From 5b82713196c0317f99208ac25527ae6d1527b1d0 Mon Sep 17 00:00:00 2001 From: Francis Roch Date: Wed, 27 Sep 2023 19:19:05 -0400 Subject: [PATCH 184/501] Normalize artifact names and attempt to generate release notes --- .github/workflows/release.yml | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index aaf8137b..75333e10 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -70,13 +70,14 @@ jobs: - name: Zip source run: | - zip -r xiond.zip . -x '.github/*' 'docker/*' 'xiond.zip' + zip -r xiond.src.zip . -x 'docker/**\*' '.github/**\*' 'xiond.src.zip' - name: Upload zip uses: actions/upload-artifact@v3 with: - name: Source code (zip) - path: xiond.zip + name: xiond.src.zip + path: xiond.src.zip + if-no-files-found: error build-tgz: runs-on: ubuntu-latest @@ -91,13 +92,14 @@ jobs: - name: Create tgz run: | - tar -czvf /tmp/xiond.tgz . + tar --exclude='./.github' --exclude='./docker' -czvf /tmp/xiond.src.tgz . - name: Upload tgz uses: actions/upload-artifact@v3 with: - name: Source code (tgz) - path: /tmp/xiond.tgz + name: xiond.src.tgz + path: /tmp/xiond.src.tgz + if-no-files-found: error release: runs-on: ubuntu-latest @@ -116,22 +118,23 @@ jobs: - name: Download zip uses: actions/download-artifact@v3 with: - name: "Source code (zip)" + name: xiond.src.zip - name: Download tgz uses: actions/download-artifact@v3 with: - name: "Source code (tgz)" + name: xiond.src.tgz - name: Create and Update Release id: create-release uses: ncipollo/release-action@v1 with: allowUpdates: true + artifactContentType: application/octet-stream + artifacts: xiond-linux-amd64,xiond.src.zip,xiond.src.tgz draft: true + generateReleaseNotes: true + name: Release ${{ github.ref }} prerelease: true - artifacts: xiond-linux-amd64,xiond.zip,xiond.tgz - artifactContentType: application/octet-stream tag: ${{ github.ref }} token: ${{ secrets.GH_RELEASE_TOKEN }} - name: Release ${{ github.ref }} From 8b4430d7dcfcc48a976522a9123aec68c4e79a9a Mon Sep 17 00:00:00 2001 From: Francis Roch Date: Wed, 27 Sep 2023 19:47:31 -0400 Subject: [PATCH 185/501] Build and Output Changelog --- .github/workflows/release.yml | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 75333e10..8828c5aa 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -26,6 +26,9 @@ jobs: username: ${{ secrets.DOCKER_HUB_USERNAME }} password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} + - name: Set up docker buildx + uses: docker/setup-buildx-action@v3 + - name: Extract metadata for docker id: meta uses: docker/metadata-action@v5 @@ -39,9 +42,11 @@ jobs: uses: docker/build-push-action@v5 with: context: . - platforms: linux/amd64 push: true tags: ${{ steps.meta.outputs.tags }} + cache-from: type=gha + cache-to: type=gha,mode=max + target: xion-release - name: Copy xiond binary from linux/amd64 container id: copy-binary-amd64 @@ -125,6 +130,15 @@ jobs: with: name: xiond.src.tgz + - name: Build Changelog + id: changelog + uses: mikepenz/release-changelog-builder-action@v4 + with: + token: ${{ secrets.GH_RELEASE_TOKEN }} + + - name: Output Changelog + run: echo "${{steps.changelog.outputs.changelog}}" + - name: Create and Update Release id: create-release uses: ncipollo/release-action@v1 @@ -132,8 +146,8 @@ jobs: allowUpdates: true artifactContentType: application/octet-stream artifacts: xiond-linux-amd64,xiond.src.zip,xiond.src.tgz + body: ${{steps.changelog.outputs.changelog}} draft: true - generateReleaseNotes: true name: Release ${{ github.ref }} prerelease: true tag: ${{ github.ref }} From d3206665934bfbde62269181e19d241538753b4a Mon Sep 17 00:00:00 2001 From: Francis Roch Date: Thu, 28 Sep 2023 11:50:14 -0400 Subject: [PATCH 186/501] Address PR comment for indentation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Eduardo Díaz --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 6a0c807b..76eae78a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ # docker build . -t cosmwasm/xiond:latest # docker run --rm -it cosmwasm/xiond:latest /bin/sh FROM golang:1.19-alpine3.17 AS go-builder - ARG arch=x86_64 +ARG arch=x86_64 # this comes from standard alpine nightly file # https://github.com/rust-lang/docker-rust-nightly/blob/master/alpine3.12/Dockerfile From 32844c711a5fb7733759ab56bd0c157fe1f2a209 Mon Sep 17 00:00:00 2001 From: Francis Roch Date: Thu, 28 Sep 2023 11:51:09 -0400 Subject: [PATCH 187/501] Set version string on artifacts and release name --- .github/workflows/release.yml | 63 ++++++++++++++++++++++++++++------- 1 file changed, 51 insertions(+), 12 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 8828c5aa..1dd9c640 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -2,10 +2,9 @@ name: Create Release and Publish Binary on: push: - branches: - - froch/version tags: - '*' + workflow_dispatch: jobs: @@ -20,6 +19,13 @@ jobs: fetch-depth: 0 fetch-tags: true + - name: Get the version and sanitize + id: get_version + run: | + VERSION=${GITHUB_REF#refs/tags/} + SANITIZED_VERSION=$(echo $VERSION | sed 's|/|-|g') + echo "::set-output name=VERSION::$SANITIZED_VERSION" + - name: Login to Docker Hub uses: docker/login-action@v2 with: @@ -59,7 +65,7 @@ jobs: - name: Upload binary uses: actions/upload-artifact@v3 with: - name: xiond-linux-amd64 + name: xiond-${{ steps.get_version.outputs.VERSION }}-linux-amd64 path: ./xiond-linux-amd64 build-zip: @@ -73,6 +79,13 @@ jobs: fetch-depth: 0 fetch-tags: true + - name: Get the version and sanitize + id: get_version + run: | + VERSION=${GITHUB_REF#refs/tags/} + SANITIZED_VERSION=$(echo $VERSION | sed 's|/|-|g') + echo "::set-output name=VERSION::$SANITIZED_VERSION" + - name: Zip source run: | zip -r xiond.src.zip . -x 'docker/**\*' '.github/**\*' 'xiond.src.zip' @@ -80,7 +93,7 @@ jobs: - name: Upload zip uses: actions/upload-artifact@v3 with: - name: xiond.src.zip + name: xiond-${{ steps.get_version.outputs.VERSION }}.src.zip path: xiond.src.zip if-no-files-found: error @@ -95,6 +108,13 @@ jobs: fetch-depth: 0 fetch-tags: true + - name: Get the version and sanitize + id: get_version + run: | + VERSION=${GITHUB_REF#refs/tags/} + SANITIZED_VERSION=$(echo $VERSION | sed 's|/|-|g') + echo "::set-output name=VERSION::$SANITIZED_VERSION" + - name: Create tgz run: | tar --exclude='./.github' --exclude='./docker' -czvf /tmp/xiond.src.tgz . @@ -102,7 +122,7 @@ jobs: - name: Upload tgz uses: actions/upload-artifact@v3 with: - name: xiond.src.tgz + name: xiond-${{ steps.get_version.outputs.VERSION }}.src.tgz path: /tmp/xiond.src.tgz if-no-files-found: error @@ -115,20 +135,27 @@ jobs: - build-tgz steps: + - name: Get the version and sanitize + id: get_version + run: | + VERSION=${GITHUB_REF#refs/tags/} + SANITIZED_VERSION=$(echo $VERSION | sed 's|/|-|g') + echo "::set-output name=VERSION::$SANITIZED_VERSION" + - name: Download xiond-linux-amd64 uses: actions/download-artifact@v3 with: - name: xiond-linux-amd64 + name: xiond-${{ steps.get_version.outputs.VERSION }}-linux-amd64 - name: Download zip uses: actions/download-artifact@v3 with: - name: xiond.src.zip + name: xiond-${{ steps.get_version.outputs.VERSION }}.src.zip - name: Download tgz uses: actions/download-artifact@v3 with: - name: xiond.src.tgz + name: xiond-${{ steps.get_version.outputs.VERSION }}.src.tgz - name: Build Changelog id: changelog @@ -139,16 +166,28 @@ jobs: - name: Output Changelog run: echo "${{steps.changelog.outputs.changelog}}" + - name: List files in workspace + run: ls -R + + - name: Rename files in workspace + run: | + mv -vf xiond-linux-amd64 xiond-${{ steps.get_version.outputs.VERSION }}-linux-amd64 + mv -vf xiond.src.tgz xiond-${{ steps.get_version.outputs.VERSION }}.src.tgz + mv -vf xiond.src.zip xiond-${{ steps.get_version.outputs.VERSION }}.src.zip + - name: Create and Update Release id: create-release uses: ncipollo/release-action@v1 with: allowUpdates: true artifactContentType: application/octet-stream - artifacts: xiond-linux-amd64,xiond.src.zip,xiond.src.tgz - body: ${{steps.changelog.outputs.changelog}} + artifacts: | + ./xiond-${{ steps.get_version.outputs.VERSION }}-linux-amd64 + ./xiond-${{ steps.get_version.outputs.VERSION }}.src.zip + ./xiond-${{ steps.get_version.outputs.VERSION }}.src.tgz + body: ${{ steps.changelog.outputs.changelog }} draft: true - name: Release ${{ github.ref }} - prerelease: true + name: Release ${{ steps.get_version.outputs.VERSION }} + prerelease: false tag: ${{ github.ref }} token: ${{ secrets.GH_RELEASE_TOKEN }} From 9d9d354f7185f51d43d70bbb383ff1c40d25544b Mon Sep 17 00:00:00 2001 From: Eduardo Diaz Date: Sat, 30 Sep 2023 11:23:23 -0400 Subject: [PATCH 188/501] WIP; test outline --- integration_tests/abstract_account_test.go | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/integration_tests/abstract_account_test.go b/integration_tests/abstract_account_test.go index 3c30ce63..efa496a8 100644 --- a/integration_tests/abstract_account_test.go +++ b/integration_tests/abstract_account_test.go @@ -18,7 +18,7 @@ func TestXionAbstractAccount(t *testing.T) { t.Parallel() - td := BuildXionChain(t, "0.1uxion", ModifyInterChainGenesis(ModifyInterChainGenesisFn{ModifyGenesisShortProposals}, [][]string{{votingPeriod, maxDepositPeriod}})) + td := BuildXionChain(t, "0.0uxion", ModifyInterChainGenesis(ModifyInterChainGenesisFn{ModifyGenesisShortProposals}, [][]string{{votingPeriod, maxDepositPeriod}})) xion, ctx := td.xionChain, td.ctx // Create and Fund User Wallets @@ -56,6 +56,21 @@ func TestXionAbstractAccount(t *testing.T) { "--chain-id", xion.Config().ChainID, recipientKeyAddress, fmt.Sprintf("%d%s", 100, xion.Config().Denom), ) + + codeID, err := xion.StoreContract(ctx, xionUser.FormattedAddress(), "../testdata/contracts/account_updatable-aarch64.wasm") + require.NoError(t, err) + _, err = xion.InstantiateContract(ctx, xionUser.FormattedAddress(), codeID, "", false) + require.NoError(t, err) + + /* + _, err = ExecTx(t, ctx, xion.FullNodes[0], + xionUser.KeyName(), + "xion", "wasm", "store", "[path_to_file]", xionUser.KeyName(), + "--chain-id", xion.Config().ChainID, + recipientKeyAddress, fmt.Sprintf("%d%s", 100, xion.Config().Denom), + ) + */ + require.NoError(t, err) balance, err := xion.GetBalance(ctx, recipientKeyAddress, xion.Config().Denom) require.NoError(t, err) From fbfbce469db96a9a87e54ee42dcb357523c84db5 Mon Sep 17 00:00:00 2001 From: Eduardo Diaz Date: Thu, 12 Oct 2023 21:16:14 -0400 Subject: [PATCH 189/501] WIP; aa fix; test outline --- Makefile | 3 + app/app.go | 14 ++-- integration_tests/abstract_account_test.go | 80 +++++++++++++++------- integration_tests/go.mod | 3 + integration_tests/go.sum | 6 ++ integration_tests/utils.go | 41 +++++++++++ 6 files changed, 115 insertions(+), 32 deletions(-) diff --git a/Makefile b/Makefile index d8d61cd4..a80490b9 100644 --- a/Makefile +++ b/Makefile @@ -128,6 +128,9 @@ test-unit: test-integration: @XION_IMAGE=$(XION_IMAGE) cd integration_tests && go test -mod=readonly -tags='ledger test_ledger_mock' ./... +test-integration-aa: + @XION_IMAGE=$(XION_IMAGE) cd integration_tests && go test -run TestXionAbstractAccount -v -mod=readonly -tags='ledger test_ledger_mock' ./... + test-integration-min: @XION_IMAGE=$(XION_IMAGE) cd integration_tests && go test -run TestXionMinimumFee -mod=readonly -tags='ledger test_ledger_mock' ./... diff --git a/app/app.go b/app/app.go index 410ef5d3..d3e1ce59 100644 --- a/app/app.go +++ b/app/app.go @@ -1009,12 +1009,14 @@ func (app *WasmApp) setAnteHandler(txConfig client.TxConfig, wasmConfig wasmtype FeegrantKeeper: app.FeeGrantKeeper, SigGasConsumer: aa.SigVerificationGasConsumer, }, - IBCKeeper: app.IBCKeeper, - WasmConfig: &wasmConfig, - TXCounterStoreKey: txCounterStoreKey, - GlobalFeeSubspace: app.GetSubspace(globalfee.ModuleName), - StakingKeeper: app.StakingKeeper, - FeeAbsKeeper: &app.FeeAbsKeeper, + + AbstractAccountKeeper: app.AbstractAccountKeeper, + IBCKeeper: app.IBCKeeper, + WasmConfig: &wasmConfig, + TXCounterStoreKey: txCounterStoreKey, + GlobalFeeSubspace: app.GetSubspace(globalfee.ModuleName), + StakingKeeper: app.StakingKeeper, + FeeAbsKeeper: &app.FeeAbsKeeper, }, ) if err != nil { diff --git a/integration_tests/abstract_account_test.go b/integration_tests/abstract_account_test.go index efa496a8..24568639 100644 --- a/integration_tests/abstract_account_test.go +++ b/integration_tests/abstract_account_test.go @@ -9,6 +9,10 @@ import ( ibctest "github.com/strangelove-ventures/interchaintest/v7" "github.com/strangelove-ventures/interchaintest/v7/testutil" "github.com/stretchr/testify/require" + + wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" + "github.com/cosmos/cosmos-sdk/crypto/keyring" + aatypes "github.com/larry0x/abstract-account/x/abstractaccount/types" ) func TestXionAbstractAccount(t *testing.T) { @@ -21,6 +25,16 @@ func TestXionAbstractAccount(t *testing.T) { td := BuildXionChain(t, "0.0uxion", ModifyInterChainGenesis(ModifyInterChainGenesisFn{ModifyGenesisShortProposals}, [][]string{{votingPeriod, maxDepositPeriod}})) xion, ctx := td.xionChain, td.ctx + xion.Config().EncodingConfig.InterfaceRegistry.RegisterImplementations( + (*types.Msg)(nil), + &xiontypes.MsgSetPlatformPercentage{}, + &xiontypes.MsgSend{}, + &wasmtypes.MsgInstantiateContract{}, + &wasmtypes.MsgStoreCode{}, + &aatypes.MsgUpdateParams{}, + &aatypes.MsgRegisterAccount{}, + ) + // Create and Fund User Wallets t.Log("creating and funding user accounts") fundAmount := int64(10_000_000) @@ -38,41 +52,55 @@ func TestXionAbstractAccount(t *testing.T) { recipientKeyName := "recipient-key" err = xion.CreateKey(ctx, recipientKeyName) require.NoError(t, err) - receipientKeyAddressBytes, err := xion.GetAddress(ctx, recipientKeyName) - require.NoError(t, err) - recipientKeyAddress, err := types.Bech32ifyAddressBytes(xion.Config().Bech32Prefix, receipientKeyAddressBytes) - require.NoError(t, err) - xion.Config().EncodingConfig.InterfaceRegistry.RegisterImplementations( - (*types.Msg)(nil), - &xiontypes.MsgSetPlatformPercentage{}, - &xiontypes.MsgSend{}, - ) + /* + receipientKeyAddressBytes, err := xion.GetAddress(ctx, recipientKeyName) + require.NoError(t, err) + recipientKeyAddress, err := types.Bech32ifyAddressBytes(xion.Config().Bech32Prefix, receipientKeyAddressBytes) + require.NoError(t, err) + */ currentHeight, _ = xion.Height(ctx) - _, err = ExecTx(t, ctx, xion.FullNodes[0], + account, err := ExecBin(t, ctx, xion.FullNodes[0], xionUser.KeyName(), - "xion", "send", xionUser.KeyName(), - "--chain-id", xion.Config().ChainID, - recipientKeyAddress, fmt.Sprintf("%d%s", 100, xion.Config().Denom), + "keys", "show", + xionUser.KeyName(), + "--keyring-backend", keyring.BackendTest, + "-p", ) + require.NoError(t, err) + fmt.Println("Post Query") + fmt.Println("=======================================================") + fmt.Println(account) + fmt.Println("=======================================================") - codeID, err := xion.StoreContract(ctx, xionUser.FormattedAddress(), "../testdata/contracts/account_updatable-aarch64.wasm") + codeID, err := xion.StoreContract(ctx, xionUser.FormattedAddress(), "./testdata/contracts/account_updatable-aarch64.wasm") require.NoError(t, err) - _, err = xion.InstantiateContract(ctx, xionUser.FormattedAddress(), codeID, "", false) + + /* add register AA using Public key */ + registeredTxHash, err := ExecTx(t, ctx, xion.FullNodes[0], + xionUser.KeyName(), + "abstract-account", "register", + codeID, + fmt.Sprintf(`{"pubkey": "%s"}`, account["key"]), + "--funds", fmt.Sprintf("%d%s", 100000, xion.Config().Denom), + "--salt", "foo", + "--chain-id", xion.Config().ChainID, + ) + + txDetails, err := ExecQuery(t, ctx, xion.FullNodes[0], "tx", registeredTxHash) require.NoError(t, err) + fmt.Println("Post Register?") + fmt.Println("=======================================================") + fmt.Println(r) + fmt.Println("=======================================================") + + //_, err = xion.InstantiateContract(ctx, xionUser.FormattedAddress(), codeID, fmt.Sprintf(`{"new_pubkey:%s"}`, ""), true) /* - _, err = ExecTx(t, ctx, xion.FullNodes[0], - xionUser.KeyName(), - "xion", "wasm", "store", "[path_to_file]", xionUser.KeyName(), - "--chain-id", xion.Config().ChainID, - recipientKeyAddress, fmt.Sprintf("%d%s", 100, xion.Config().Denom), - ) + require.NoError(t, err) + balance, err := xion.GetBalance(ctx, recipientKeyAddress, xion.Config().Denom) + require.NoError(t, err) + require.Equal(t, uint64(100), uint64(balance)) */ - - require.NoError(t, err) - balance, err := xion.GetBalance(ctx, recipientKeyAddress, xion.Config().Denom) - require.NoError(t, err) - require.Equal(t, uint64(100), uint64(balance)) } diff --git a/integration_tests/go.mod b/integration_tests/go.mod index 70c92f8b..817120e3 100644 --- a/integration_tests/go.mod +++ b/integration_tests/go.mod @@ -4,11 +4,13 @@ go 1.19 require ( cosmossdk.io/math v1.0.1 + github.com/CosmWasm/wasmd v0.40.1 github.com/burnt-labs/xion v0.1.0 github.com/cosmos/cosmos-sdk v0.47.4 github.com/cosmos/ibc-go/v7 v7.2.0 github.com/docker/docker v24.0.4+incompatible github.com/icza/dyno v0.0.0-20220812133438-f0b6f8a18845 + github.com/larry0x/abstract-account v0.0.0-20230708200055-2ea462db913f github.com/strangelove-ventures/interchaintest/v7 v7.0.0-20230721183422-fb937bb0e165 github.com/stretchr/testify v1.8.4 go.uber.org/zap v1.24.0 @@ -34,6 +36,7 @@ require ( github.com/ChainSafe/go-schnorrkel v1.0.0 // indirect github.com/ChainSafe/go-schnorrkel/1 v0.0.0-00010101000000-000000000000 // indirect github.com/ComposableFi/go-subkey/v2 v2.0.0-tm03420 // indirect + github.com/CosmWasm/wasmvm v1.2.4 // indirect github.com/FactomProject/basen v0.0.0-20150613233007-fe3947df716e // indirect github.com/FactomProject/btcutilecc v0.0.0-20130527213604-d3a63a5752ec // indirect github.com/Microsoft/go-winio v0.6.0 // indirect diff --git a/integration_tests/go.sum b/integration_tests/go.sum index 2c74455b..b773075e 100644 --- a/integration_tests/go.sum +++ b/integration_tests/go.sum @@ -219,6 +219,10 @@ github.com/ChainSafe/go-schnorrkel v1.0.0 h1:3aDA67lAykLaG1y3AOjs88dMxC88PgUuHRr github.com/ChainSafe/go-schnorrkel v1.0.0/go.mod h1:dpzHYVxLZcp8pjlV+O+UR8K0Hp/z7vcchBSbMBEhCw4= github.com/ComposableFi/go-subkey/v2 v2.0.0-tm03420 h1:oknQF/iIhf5lVjbwjsVDzDByupRhga8nhA3NAmwyHDA= github.com/ComposableFi/go-subkey/v2 v2.0.0-tm03420/go.mod h1:KYkiMX5AbOlXXYfxkrYPrRPV6EbVUALTQh5ptUOJzu8= +github.com/CosmWasm/wasmd v0.40.1 h1:LxbO78t/6S8TkeQlUrJ0m5O87HtAwLx4RGHq3rdrOEU= +github.com/CosmWasm/wasmd v0.40.1/go.mod h1:6EOwnv7MpuFaEqxcUOdFV9i4yvrdOciaY6VQ1o7A3yg= +github.com/CosmWasm/wasmvm v1.2.4 h1:6OfeZuEcEH/9iqwrg2pkeVtDCkMoj9U6PpKtcrCyVrQ= +github.com/CosmWasm/wasmvm v1.2.4/go.mod h1:vW/E3h8j9xBQs9bCoijDuawKo9kCtxOaS8N8J7KFtkc= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/FactomProject/basen v0.0.0-20150613233007-fe3947df716e h1:ahyvB3q25YnZWly5Gq1ekg6jcmWaGj/vG/MhF4aisoc= github.com/FactomProject/basen v0.0.0-20150613233007-fe3947df716e/go.mod h1:kGUqhHd//musdITWjFvNTHn90WG9bMLBEPQZ17Cmlpw= @@ -733,6 +737,8 @@ github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= 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/larry0x/abstract-account v0.0.0-20230708200055-2ea462db913f h1:5bbME0rK2j2cCwRzoc2dX1/SDo3guFgyNyph+c+ulI4= +github.com/larry0x/abstract-account v0.0.0-20230708200055-2ea462db913f/go.mod h1:mRL3ko+eOFguJHzhVZatNZOvaiVHumGAWxoLlyIo+Ow= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw= diff --git a/integration_tests/utils.go b/integration_tests/utils.go index 7c6b512e..3e2e348e 100644 --- a/integration_tests/utils.go +++ b/integration_tests/utils.go @@ -40,6 +40,24 @@ type TestData struct { client *client.Client } +func RawJSONMsg(from, to, denom string) []byte { + msg := fmt.Sprintf(` + { + "@type": "/cosmos.bank.v1beta1.MsgSend", + "from_address": "%s", + "to_address": "%s", + "amount": [ + { + "denom": "%s", + "amount": "12345" + } + ] + } + `, from, to, denom) + var rawMsg json.RawMessage = []byte(msg) + return rawMsg +} + func BuildXionChain(t *testing.T, gas string, modifyGenesis func(ibc.ChainConfig, []byte) ([]byte, error)) TestData { ctx := context.Background() @@ -424,3 +442,26 @@ func ExecTx(t *testing.T, ctx context.Context, tn *cosmos.ChainNode, keyName str } return output.TxHash, nil } + +func ExecQuery(t *testing.T, ctx context.Context, tn *cosmos.ChainNode, keyName string, command ...string) (map[string]interface{}, error) { + jsonRes := make(map[string]interface{}) + output, _, err := tn.ExecQuery(ctx, command...) + if err != nil { + return jsonRes, err + } + require.NoError(t, json.Unmarshal(output, &jsonRes)) + + return jsonRes, nil +} + +func ExecBin(t *testing.T, ctx context.Context, tn *cosmos.ChainNode, keyName string, command ...string) (map[string]interface{}, error) { + jsonRes := make(map[string]interface{}) + output, _, err := tn.ExecBin(ctx, command...) + if err != nil { + return jsonRes, err + } + fmt.Printf("%+s\n", output) + require.NoError(t, json.Unmarshal(output, &jsonRes)) + + return jsonRes, nil +} From 9b6add6451cb616fab4cc30d8cb27ebd78d47e97 Mon Sep 17 00:00:00 2001 From: Eduardo Diaz Date: Fri, 13 Oct 2023 14:46:16 -0400 Subject: [PATCH 190/501] WIP; test outline; upload contract; query contract --- integration_tests/abstract_account_test.go | 67 +++++++++++++++------- integration_tests/utils.go | 2 +- 2 files changed, 48 insertions(+), 21 deletions(-) diff --git a/integration_tests/abstract_account_test.go b/integration_tests/abstract_account_test.go index 24568639..70cebb78 100644 --- a/integration_tests/abstract_account_test.go +++ b/integration_tests/abstract_account_test.go @@ -53,13 +53,6 @@ func TestXionAbstractAccount(t *testing.T) { err = xion.CreateKey(ctx, recipientKeyName) require.NoError(t, err) - /* - receipientKeyAddressBytes, err := xion.GetAddress(ctx, recipientKeyName) - require.NoError(t, err) - recipientKeyAddress, err := types.Bech32ifyAddressBytes(xion.Config().Bech32Prefix, receipientKeyAddressBytes) - require.NoError(t, err) - */ - currentHeight, _ = xion.Height(ctx) account, err := ExecBin(t, ctx, xion.FullNodes[0], xionUser.KeyName(), @@ -69,38 +62,72 @@ func TestXionAbstractAccount(t *testing.T) { "-p", ) require.NoError(t, err) - fmt.Println("Post Query") - fmt.Println("=======================================================") - fmt.Println(account) - fmt.Println("=======================================================") codeID, err := xion.StoreContract(ctx, xionUser.FormattedAddress(), "./testdata/contracts/account_updatable-aarch64.wasm") require.NoError(t, err) + depositedFunds := fmt.Sprintf("%d%s", 100000, xion.Config().Denom) + /* add register AA using Public key */ registeredTxHash, err := ExecTx(t, ctx, xion.FullNodes[0], xionUser.KeyName(), "abstract-account", "register", codeID, fmt.Sprintf(`{"pubkey": "%s"}`, account["key"]), - "--funds", fmt.Sprintf("%d%s", 100000, xion.Config().Denom), + "--funds", depositedFunds, "--salt", "foo", "--chain-id", xion.Config().ChainID, ) txDetails, err := ExecQuery(t, ctx, xion.FullNodes[0], "tx", registeredTxHash) require.NoError(t, err) - fmt.Println("Post Register?") - fmt.Println("=======================================================") - fmt.Println(r) + aaContractAddr := GetAAContractAddress(t, txDetails) + fmt.Println(aaContractAddr) fmt.Println("=======================================================") - //_, err = xion.InstantiateContract(ctx, xionUser.FormattedAddress(), codeID, fmt.Sprintf(`{"new_pubkey:%s"}`, ""), true) + contractBalance, err := xion.GetBalance(ctx, aaContractAddr, xion.Config().Denom) + require.NoError(t, err) + require.Equal(t, uint64(100000), uint64(contractBalance)) /* - require.NoError(t, err) - balance, err := xion.GetBalance(ctx, recipientKeyAddress, xion.Config().Denom) - require.NoError(t, err) - require.Equal(t, uint64(100), uint64(balance)) + NOTE: Ideally we would use this metod, however the QueryContract formats the string making it harder to predict. + var ContractResponse interface{} + require.NoError(t, xion.QueryContract(ctx, aaContractAddr, fmt.Sprintf(`{"pubkey":{}}`), ContractResponse)) */ + + contractState, err := ExecQuery(t, ctx, xion.FullNodes[0], "wasm", "contract-state", "smart", aaContractAddr, fmt.Sprintf(`{"pubkey":{}}`)) + require.NoError(t, err) + + pubkey, ok := contractState["data"].(string) + require.True(t, ok) + require.Equal(t, account["key"], pubkey) + + // TODO: + // - sign and rotate key + +} + +func GetAAContractAddress(t *testing.T, txDetails map[string]interface{}) string { + logs, ok := txDetails["logs"].([]interface{}) + require.True(t, ok) + + log, ok := logs[0].(map[string]interface{}) + require.True(t, ok) + + events, ok := log["events"].([]interface{}) + require.True(t, ok) + + event, ok := events[4].(map[string]interface{}) + require.True(t, ok) + + attributes, ok := event["attributes"].([]interface{}) + require.True(t, ok) + + attribute, ok := attributes[0].(map[string]interface{}) + require.True(t, ok) + + addr, ok := attribute["value"].(string) + require.True(t, ok) + + return addr } diff --git a/integration_tests/utils.go b/integration_tests/utils.go index 3e2e348e..fed0c7d4 100644 --- a/integration_tests/utils.go +++ b/integration_tests/utils.go @@ -443,7 +443,7 @@ func ExecTx(t *testing.T, ctx context.Context, tn *cosmos.ChainNode, keyName str return output.TxHash, nil } -func ExecQuery(t *testing.T, ctx context.Context, tn *cosmos.ChainNode, keyName string, command ...string) (map[string]interface{}, error) { +func ExecQuery(t *testing.T, ctx context.Context, tn *cosmos.ChainNode, command ...string) (map[string]interface{}, error) { jsonRes := make(map[string]interface{}) output, _, err := tn.ExecQuery(ctx, command...) if err != nil { From 21580e5c71dfafccaa4527c29ad309dafb2e4238 Mon Sep 17 00:00:00 2001 From: justin <328965+justinbarry@users.noreply.github.com> Date: Mon, 16 Oct 2023 11:19:05 -0700 Subject: [PATCH 191/501] Add `abstractaccount` params to docker genesis.json --- docker/local-config/genesis.json | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/docker/local-config/genesis.json b/docker/local-config/genesis.json index c39dacd4..161a493c 100644 --- a/docker/local-config/genesis.json +++ b/docker/local-config/genesis.json @@ -24,6 +24,14 @@ "app_hash": "", "app_state": { "07-tendermint": null, + "abstractaccount": { + "params": { + "allow_all_code_ids": true, + "allowed_code_ids": null, + "max_gas_before": 50000000, + "max_gas_after": 50000000 + } + }, "auth": { "params": { "max_memo_characters": "256", @@ -356,4 +364,4 @@ "sequences": [] } } -} \ No newline at end of file +} From 48ba697f5644c66e4e08bd6ff3b76ef7b5496072 Mon Sep 17 00:00:00 2001 From: justin <328965+justinbarry@users.noreply.github.com> Date: Mon, 16 Oct 2023 11:19:13 -0700 Subject: [PATCH 192/501] Fix NPE --- app/app.go | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/app/app.go b/app/app.go index 410ef5d3..d3e1ce59 100644 --- a/app/app.go +++ b/app/app.go @@ -1009,12 +1009,14 @@ func (app *WasmApp) setAnteHandler(txConfig client.TxConfig, wasmConfig wasmtype FeegrantKeeper: app.FeeGrantKeeper, SigGasConsumer: aa.SigVerificationGasConsumer, }, - IBCKeeper: app.IBCKeeper, - WasmConfig: &wasmConfig, - TXCounterStoreKey: txCounterStoreKey, - GlobalFeeSubspace: app.GetSubspace(globalfee.ModuleName), - StakingKeeper: app.StakingKeeper, - FeeAbsKeeper: &app.FeeAbsKeeper, + + AbstractAccountKeeper: app.AbstractAccountKeeper, + IBCKeeper: app.IBCKeeper, + WasmConfig: &wasmConfig, + TXCounterStoreKey: txCounterStoreKey, + GlobalFeeSubspace: app.GetSubspace(globalfee.ModuleName), + StakingKeeper: app.StakingKeeper, + FeeAbsKeeper: &app.FeeAbsKeeper, }, ) if err != nil { From 007aa9bcb7dd8609a50c0cdd5a313cf4dc8adeff Mon Sep 17 00:00:00 2001 From: Eduardo Diaz Date: Tue, 17 Oct 2023 13:50:08 -0400 Subject: [PATCH 193/501] WIP; signature fixes --- Makefile | 3 + integration_tests/abstract_account_test.go | 38 +++++++++++-- .../unsigned_msgs/bank_send_unsigned.json | 32 +++++++++++ integration_tests/utils.go | 55 +++++++++++++++---- x/xion/client/cli/tx.go | 16 +++--- 5 files changed, 120 insertions(+), 24 deletions(-) create mode 100644 integration_tests/testdata/unsigned_msgs/bank_send_unsigned.json diff --git a/Makefile b/Makefile index a80490b9..ad8cc82d 100644 --- a/Makefile +++ b/Makefile @@ -131,6 +131,9 @@ test-integration: test-integration-aa: @XION_IMAGE=$(XION_IMAGE) cd integration_tests && go test -run TestXionAbstractAccount -v -mod=readonly -tags='ledger test_ledger_mock' ./... +test-integration-send: + @XION_IMAGE=$(XION_IMAGE) cd integration_tests && go test -run TestXionSendPlatformFee -v -mod=readonly -tags='ledger test_ledger_mock' ./... + test-integration-min: @XION_IMAGE=$(XION_IMAGE) cd integration_tests && go test -run TestXionMinimumFee -mod=readonly -tags='ledger test_ledger_mock' ./... diff --git a/integration_tests/abstract_account_test.go b/integration_tests/abstract_account_test.go index 70cebb78..7b750bc7 100644 --- a/integration_tests/abstract_account_test.go +++ b/integration_tests/abstract_account_test.go @@ -1,7 +1,11 @@ package integration_tests import ( + "encoding/json" "fmt" + "os" + "path" + "strings" "testing" xiontypes "github.com/burnt-labs/xion/x/xion/types" @@ -21,7 +25,6 @@ func TestXionAbstractAccount(t *testing.T) { } t.Parallel() - td := BuildXionChain(t, "0.0uxion", ModifyInterChainGenesis(ModifyInterChainGenesisFn{ModifyGenesisShortProposals}, [][]string{{votingPeriod, maxDepositPeriod}})) xion, ctx := td.xionChain, td.ctx @@ -82,8 +85,6 @@ func TestXionAbstractAccount(t *testing.T) { txDetails, err := ExecQuery(t, ctx, xion.FullNodes[0], "tx", registeredTxHash) require.NoError(t, err) aaContractAddr := GetAAContractAddress(t, txDetails) - fmt.Println(aaContractAddr) - fmt.Println("=======================================================") contractBalance, err := xion.GetBalance(ctx, aaContractAddr, xion.Config().Denom) require.NoError(t, err) @@ -102,9 +103,38 @@ func TestXionAbstractAccount(t *testing.T) { require.True(t, ok) require.Equal(t, account["key"], pubkey) + receipientKeyAddressBytes, err := xion.GetAddress(ctx, recipientKeyName) + require.NoError(t, err) + recipientKeyAddress, err := types.Bech32ifyAddressBytes(xion.Config().Bech32Prefix, receipientKeyAddressBytes) + require.NoError(t, err) + + jsonMsg := RawJSONMsg(t, aaContractAddr, recipientKeyAddress, xion.Config().Denom) + require.NoError(t, err) + require.True(t, json.Valid(jsonMsg)) + + file, err := os.CreateTemp("", "*-msg-bank-send.json") + require.NoError(t, err) + defer os.Remove(file.Name()) + + _, err = file.Write(jsonMsg) + require.NoError(t, err) + + err = UploadFileToContainer(t, ctx, xion.FullNodes[0], file) + require.NoError(t, err) + + filePath := strings.Split(file.Name(), "/") + broadcastTx, err := ExecTx(t, ctx, xion.FullNodes[0], + xionUser.KeyName(), + "xion", "sign", + xionUser.KeyName(), + path.Join(xion.FullNodes[0].HomeDir(), filePath[len(filePath)-1]), + "--chain-id", xion.Config().ChainID, + ) + require.NoError(t, err) + fmt.Println(broadcastTx) + // TODO: // - sign and rotate key - } func GetAAContractAddress(t *testing.T, txDetails map[string]interface{}) string { diff --git a/integration_tests/testdata/unsigned_msgs/bank_send_unsigned.json b/integration_tests/testdata/unsigned_msgs/bank_send_unsigned.json new file mode 100644 index 00000000..3964ffef --- /dev/null +++ b/integration_tests/testdata/unsigned_msgs/bank_send_unsigned.json @@ -0,0 +1,32 @@ +{ + "body": { + "messages": [ + { + "@type": "/cosmos.bank.v1beta1.MsgSend", + "from_address": "xion1e2fuwe3uhq8zd9nkkk876nawrwdulgv460vzg7", + "to_address": "xion1qaf2xflx5j3agtlvqk5vhjpeuhl6g45hxshwqj", + "amount": [ + { + "denom": "uxion", + "amount": "100000" + } + ] + } + ], + "memo": "", + "timeout_height": "0", + "extension_options": [], + "non_critical_extension_options": [] + }, + "auth_info": { + "signer_infos": [], + "fee": { + "amount": [], + "gas_limit": "200000", + "payer": "", + "granter": "" + }, + "tip": null + }, + "signatures": [] +} diff --git a/integration_tests/utils.go b/integration_tests/utils.go index fed0c7d4..c1d96029 100644 --- a/integration_tests/utils.go +++ b/integration_tests/utils.go @@ -40,19 +40,40 @@ type TestData struct { client *client.Client } -func RawJSONMsg(from, to, denom string) []byte { +func RawJSONMsg(t *testing.T, from, to, denom string) []byte { msg := fmt.Sprintf(` - { - "@type": "/cosmos.bank.v1beta1.MsgSend", - "from_address": "%s", - "to_address": "%s", - "amount": [ - { - "denom": "%s", - "amount": "12345" - } - ] - } +{ + "body": { + "messages": [ + { + "@type": "/cosmos.bank.v1beta1.MsgSend", + "from_address": "%s", + "to_address": "%s", + "amount": [ + { + "denom": "%s", + "amount": "100000" + } + ] + } + ], + "memo": "", + "timeout_height": "0", + "extension_options": [], + "non_critical_extension_options": [] + }, + "auth_info": { + "signer_infos": [], + "fee": { + "amount": [], + "gas_limit": "200000", + "payer": "", + "granter": "" + }, + "tip": null + }, + "signatures": [] +} `, from, to, denom) var rawMsg json.RawMessage = []byte(msg) return rawMsg @@ -465,3 +486,13 @@ func ExecBin(t *testing.T, ctx context.Context, tn *cosmos.ChainNode, keyName st return jsonRes, nil } + +func UploadFileToContainer(t *testing.T, ctx context.Context, tn *cosmos.ChainNode, file *os.File) error { + + content, err := os.ReadFile(file.Name()) + if err != nil { + return err + } + path := strings.Split(file.Name(), "/") + return tn.WriteFile(ctx, content, path[len(path)-1]) +} diff --git a/x/xion/client/cli/tx.go b/x/xion/client/cli/tx.go index 944fe8f9..27bc5632 100644 --- a/x/xion/client/cli/tx.go +++ b/x/xion/client/cli/tx.go @@ -161,19 +161,21 @@ When using '--dry-run' a key name cannot be used, only a bech32 address. // NewSendTxCmd returns a CLI command handler for creating a MsgSend transaction. func NewSignCmd() *cobra.Command { cmd := &cobra.Command{ - Use: "sign [path/to/tx.json]", + Use: "sign [keyname] [path/to/tx.json]", Short: "sign a transaction", Long: `Sign transaction by retrieving the Smart Contract Account signer.`, - Args: cobra.ExactArgs(3), + Args: cobra.ExactArgs(2), RunE: func(cmd *cobra.Command, args []string) error { - cmd.Flags().Set(flags.FlagFrom, args[0]) + if err := cmd.Flags().Set(flags.FlagFrom, args[0]); err != nil { + return err + } clientCtx, err := client.GetClientTxContext(cmd) if err != nil { return err } - txBz, err := os.ReadFile(args[0]) + txBz, err := os.ReadFile(args[1]) if err != nil { panic(err) } @@ -188,12 +190,11 @@ func NewSignCmd() *cobra.Command { signerAcc, err := getSignerOfTx(queryClient, stdTx) if err != nil { panic(err) - } signerData := authsigning.SignerData{ Address: signerAcc.GetAddress().String(), - ChainID: clientCtx.ChainID, // TODO: what's the chain ID ? get it from flag / + ChainID: clientCtx.ChainID, AccountNumber: signerAcc.GetAccountNumber(), Sequence: signerAcc.GetSequence(), PubKey: signerAcc.GetPubKey(), @@ -223,8 +224,7 @@ func NewSignCmd() *cobra.Command { if err != nil { panic(err) } - - sigBytes, _, err := clientCtx.Keyring.Sign("foo", signBytes) // TODO: add keyname as either flag or parameter + sigBytes, _, err := clientCtx.Keyring.Sign(clientCtx.GetFromAddress().String(), signBytes) // TODO: add keyname as either flag or parameter if err != nil { panic(err) } From 9704197cc932fb194f310e0b998b1e12ea3a3e45 Mon Sep 17 00:00:00 2001 From: Coal Date: Wed, 18 Oct 2023 10:21:29 -0400 Subject: [PATCH 194/501] WIP; use keyname rather than address --- x/xion/client/cli/tx.go | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/x/xion/client/cli/tx.go b/x/xion/client/cli/tx.go index 27bc5632..ec86a2bf 100644 --- a/x/xion/client/cli/tx.go +++ b/x/xion/client/cli/tx.go @@ -197,7 +197,7 @@ func NewSignCmd() *cobra.Command { ChainID: clientCtx.ChainID, AccountNumber: signerAcc.GetAccountNumber(), Sequence: signerAcc.GetSequence(), - PubKey: signerAcc.GetPubKey(), + PubKey: signerAcc.GetPubKey(), // NOTE: NilPubKey } txBuilder, err := clientCtx.TxConfig.WrapTxBuilder(stdTx) @@ -211,7 +211,7 @@ func NewSignCmd() *cobra.Command { } sig := signing.SignatureV2{ - PubKey: signerAcc.GetPubKey(), + PubKey: signerAcc.GetPubKey(), // NOTE: NilPubKey Data: &sigData, Sequence: signerAcc.GetSequence(), } @@ -224,7 +224,7 @@ func NewSignCmd() *cobra.Command { if err != nil { panic(err) } - sigBytes, _, err := clientCtx.Keyring.Sign(clientCtx.GetFromAddress().String(), signBytes) // TODO: add keyname as either flag or parameter + sigBytes, _, err := clientCtx.Keyring.Sign(clientCtx.GetFromName(), signBytes) if err != nil { panic(err) } @@ -246,11 +246,11 @@ func NewSignCmd() *cobra.Command { bz, err := clientCtx.TxConfig.TxEncoder()(txBuilder.GetTx()) if err != nil { - return err + panic(err) } res, err := clientCtx.BroadcastTx(bz) if err != nil { - return err + panic(err) } return clientCtx.PrintProto(res) @@ -290,6 +290,7 @@ func getSignerOfTx(queryClient authtypes.QueryClient, stdTx sdk.Tx) (*aatypes.Ab if err = proto.Unmarshal(res.Account.Value, acc); err != nil { return nil, err } + //panic(fmt.Sprintf("Account: %s\nTypeURL: %s\nAcc: %+v", res.Account.TypeUrl, typeURL((*aatypes.AbstractAccount)(nil)), acc)) return acc, nil } From cf056ffe745f8b1ffec2d91431eec5ffda75eda3 Mon Sep 17 00:00:00 2001 From: Francis Roch Date: Wed, 18 Oct 2023 13:27:58 -0400 Subject: [PATCH 195/501] Fix libwasmvm version --- Dockerfile | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 76eae78a..5a2319cc 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,6 +2,7 @@ # docker run --rm -it cosmwasm/xiond:latest /bin/sh FROM golang:1.19-alpine3.17 AS go-builder ARG arch=x86_64 +ENV WASMVM_VERSION=v1.3.0 # this comes from standard alpine nightly file # https://github.com/rust-lang/docker-rust-nightly/blob/master/alpine3.12/Dockerfile @@ -24,8 +25,8 @@ ARG arch=x86_64 COPY Makefile /code/ # See https://github.com/CosmWasm/wasmvm/releases - ADD https://github.com/CosmWasm/wasmvm/releases/download/v1.2.4/libwasmvm_muslc.aarch64.a /lib/libwasmvm_muslc.aarch64.a - ADD https://github.com/CosmWasm/wasmvm/releases/download/v1.2.4/libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.x86_64.a + ADD https://github.com/CosmWasm/wasmvm/releases/download/${WASMVM_VERSION}/libwasmvm_muslc.aarch64.a /lib/libwasmvm_muslc.aarch64.a + ADD https://github.com/CosmWasm/wasmvm/releases/download/${WASMVM_VERSION}/libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.x86_64.a RUN sha256sum /lib/libwasmvm_muslc.aarch64.a | grep 682a54082e131eaff9beec80ba3e5908113916fcb8ddf7c668cb2d97cb94c13c RUN sha256sum /lib/libwasmvm_muslc.x86_64.a | grep ce3d892377d2523cf563e01120cb1436f9343f80be952c93f66aa94f5737b661 From 1f08df04307f3ed4266927e5030a4a36d891cbaa Mon Sep 17 00:00:00 2001 From: Francis Roch Date: Wed, 18 Oct 2023 13:34:05 -0400 Subject: [PATCH 196/501] Set correct libwasmvm checksums --- Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 5a2319cc..41721f45 100644 --- a/Dockerfile +++ b/Dockerfile @@ -27,8 +27,8 @@ ENV WASMVM_VERSION=v1.3.0 # See https://github.com/CosmWasm/wasmvm/releases ADD https://github.com/CosmWasm/wasmvm/releases/download/${WASMVM_VERSION}/libwasmvm_muslc.aarch64.a /lib/libwasmvm_muslc.aarch64.a ADD https://github.com/CosmWasm/wasmvm/releases/download/${WASMVM_VERSION}/libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.x86_64.a - RUN sha256sum /lib/libwasmvm_muslc.aarch64.a | grep 682a54082e131eaff9beec80ba3e5908113916fcb8ddf7c668cb2d97cb94c13c - RUN sha256sum /lib/libwasmvm_muslc.x86_64.a | grep ce3d892377d2523cf563e01120cb1436f9343f80be952c93f66aa94f5737b661 + RUN sha256sum /lib/libwasmvm_muslc.aarch64.a | grep b1610f9c8ad8bdebf5b8f819f71d238466f83521c74a2deb799078932e862722 + RUN sha256sum /lib/libwasmvm_muslc.x86_64.a | grep b4aad4480f9b4c46635b4943beedbb72c929eab1d1b9467fe3b43e6dbf617e32 # Copy the library you want to the final location that will be found by the linker flag `-lwasmvm_muslc` RUN cp -vf /lib/libwasmvm_muslc.${arch}.a /lib/libwasmvm_muslc.a From c0acdb5df1ac577ad995a9e05bf3fa26c7c14d5b Mon Sep 17 00:00:00 2001 From: Francis Roch Date: Wed, 18 Oct 2023 13:48:14 -0400 Subject: [PATCH 197/501] Parameterize libwasmvm checksums --- Dockerfile | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index 41721f45..391b0734 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,11 @@ # docker build . -t cosmwasm/xiond:latest # docker run --rm -it cosmwasm/xiond:latest /bin/sh FROM golang:1.19-alpine3.17 AS go-builder -ARG arch=x86_64 -ENV WASMVM_VERSION=v1.3.0 + ARG arch=x86_64 + + ENV WASMVM_VERSION=v1.3.0 + ENV WASMVM_CHECKSUM_AARCH64=b1610f9c8ad8bdebf5b8f819f71d238466f83521c74a2deb799078932e862722 + ENV WASMVM_CHECKSUM_x86_64=b4aad4480f9b4c46635b4943beedbb72c929eab1d1b9467fe3b43e6dbf617e32 # this comes from standard alpine nightly file # https://github.com/rust-lang/docker-rust-nightly/blob/master/alpine3.12/Dockerfile @@ -27,8 +30,8 @@ ENV WASMVM_VERSION=v1.3.0 # See https://github.com/CosmWasm/wasmvm/releases ADD https://github.com/CosmWasm/wasmvm/releases/download/${WASMVM_VERSION}/libwasmvm_muslc.aarch64.a /lib/libwasmvm_muslc.aarch64.a ADD https://github.com/CosmWasm/wasmvm/releases/download/${WASMVM_VERSION}/libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.x86_64.a - RUN sha256sum /lib/libwasmvm_muslc.aarch64.a | grep b1610f9c8ad8bdebf5b8f819f71d238466f83521c74a2deb799078932e862722 - RUN sha256sum /lib/libwasmvm_muslc.x86_64.a | grep b4aad4480f9b4c46635b4943beedbb72c929eab1d1b9467fe3b43e6dbf617e32 + RUN sha256sum /lib/libwasmvm_muslc.aarch64.a | grep ${WASMVM_CHECKSUM_AARCH64} + RUN sha256sum /lib/libwasmvm_muslc.x86_64.a | grep ${WASMVM_CHECKSUM_x86_64} # Copy the library you want to the final location that will be found by the linker flag `-lwasmvm_muslc` RUN cp -vf /lib/libwasmvm_muslc.${arch}.a /lib/libwasmvm_muslc.a From 4b80a98935d35ba6fbdc21077609af852e377d98 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 28 Sep 2023 17:56:31 +0000 Subject: [PATCH 198/501] Bump actions/checkout from 3 to 4 Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v3...v4) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/integration-tests.yml | 4 ++-- .github/workflows/tests.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index bfa2d53b..3271e371 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -22,7 +22,7 @@ jobs: runs-on: ubuntu-latest steps: - name: checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 - name: container-login @@ -78,7 +78,7 @@ jobs: with: go-version: ^1.18 - name: checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: container-login uses: docker/login-action@v2 with: diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 2875e246..10aa2ae0 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -9,7 +9,7 @@ jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: technote-space/get-diff-action@v6 with: PATTERNS: | From 718d032f6e5f00e90524e97c88fb6fe935a29ffb Mon Sep 17 00:00:00 2001 From: Eduardo Diaz Date: Wed, 18 Oct 2023 16:23:40 -0400 Subject: [PATCH 199/501] rotate public keys --- integration_tests/abstract_account_test.go | 72 ++++++++++++++++++---- integration_tests/utils.go | 41 +++++++++++- 2 files changed, 101 insertions(+), 12 deletions(-) diff --git a/integration_tests/abstract_account_test.go b/integration_tests/abstract_account_test.go index 7b750bc7..cc9c9aba 100644 --- a/integration_tests/abstract_account_test.go +++ b/integration_tests/abstract_account_test.go @@ -16,6 +16,8 @@ import ( wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" "github.com/cosmos/cosmos-sdk/crypto/keyring" + cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" aatypes "github.com/larry0x/abstract-account/x/abstractaccount/types" ) @@ -33,11 +35,15 @@ func TestXionAbstractAccount(t *testing.T) { &xiontypes.MsgSetPlatformPercentage{}, &xiontypes.MsgSend{}, &wasmtypes.MsgInstantiateContract{}, + &wasmtypes.MsgExecuteContract{}, &wasmtypes.MsgStoreCode{}, &aatypes.MsgUpdateParams{}, &aatypes.MsgRegisterAccount{}, ) + xion.Config().EncodingConfig.InterfaceRegistry.RegisterImplementations((*authtypes.AccountI)(nil), &aatypes.AbstractAccount{}) + xion.Config().EncodingConfig.InterfaceRegistry.RegisterImplementations((*cryptotypes.PubKey)(nil), &aatypes.NilPubKey{}) + // Create and Fund User Wallets t.Log("creating and funding user accounts") fundAmount := int64(10_000_000) @@ -108,33 +114,77 @@ func TestXionAbstractAccount(t *testing.T) { recipientKeyAddress, err := types.Bech32ifyAddressBytes(xion.Config().Bech32Prefix, receipientKeyAddressBytes) require.NoError(t, err) - jsonMsg := RawJSONMsg(t, aaContractAddr, recipientKeyAddress, xion.Config().Denom) + // Generate Msg Send without signatures + jsonMsg := RawJSONMsgSend(t, aaContractAddr, recipientKeyAddress, xion.Config().Denom) require.NoError(t, err) require.True(t, json.Valid(jsonMsg)) - file, err := os.CreateTemp("", "*-msg-bank-send.json") + sendFile, err := os.CreateTemp("", "*-msg-bank-send.json") require.NoError(t, err) - defer os.Remove(file.Name()) + defer os.Remove(sendFile.Name()) - _, err = file.Write(jsonMsg) + _, err = sendFile.Write(jsonMsg) require.NoError(t, err) - err = UploadFileToContainer(t, ctx, xion.FullNodes[0], file) + err = UploadFileToContainer(t, ctx, xion.FullNodes[0], sendFile) require.NoError(t, err) - filePath := strings.Split(file.Name(), "/") - broadcastTx, err := ExecTx(t, ctx, xion.FullNodes[0], + // Sign and broadcast a transaction + sendFilePath := strings.Split(sendFile.Name(), "/") + _, err = ExecTx(t, ctx, xion.FullNodes[0], xionUser.KeyName(), "xion", "sign", xionUser.KeyName(), - path.Join(xion.FullNodes[0].HomeDir(), filePath[len(filePath)-1]), + path.Join(xion.FullNodes[0].HomeDir(), sendFilePath[len(sendFilePath)-1]), "--chain-id", xion.Config().ChainID, ) require.NoError(t, err) - fmt.Println(broadcastTx) - // TODO: - // - sign and rotate key + // Confirm the updated balance + balance, err := xion.GetBalance(ctx, recipientKeyAddress, xion.Config().Denom) + require.NoError(t, err) + require.Equal(t, uint64(100000), uint64(balance)) + + // Generate Key Rotation Msg + account, err = ExecBin(t, ctx, xion.FullNodes[0], + xionUser.KeyName(), + "keys", "show", + xionUser.KeyName(), + "--keyring-backend", keyring.BackendTest, + "-p", + ) + + jsonExecMsg := RawJSONMsgExecContractNewPubKey(t, aaContractAddr, aaContractAddr, fmt.Sprintf("%s", account["key"])) + require.NoError(t, err) + require.True(t, json.Valid(jsonExecMsg)) + + rotateFile, err := os.CreateTemp("", "*-msg-exec-rotate-key.json") + require.NoError(t, err) + defer os.Remove(rotateFile.Name()) + + _, err = rotateFile.Write(jsonExecMsg) + require.NoError(t, err) + + err = UploadFileToContainer(t, ctx, xion.FullNodes[0], rotateFile) + require.NoError(t, err) + + rotateFilePath := strings.Split(rotateFile.Name(), "/") + _, err = ExecTx(t, ctx, xion.FullNodes[0], + xionUser.KeyName(), + "xion", "sign", + xionUser.KeyName(), + path.Join(xion.FullNodes[0].HomeDir(), rotateFilePath[len(rotateFilePath)-1]), + "--chain-id", xion.Config().ChainID, + ) + require.NoError(t, err) + + updatedContractstate, err := ExecQuery(t, ctx, xion.FullNodes[0], "wasm", "contract-state", "smart", aaContractAddr, fmt.Sprintf(`{"pubkey":{}}`)) + require.NoError(t, err) + + updatedPubKey, ok := updatedContractstate["data"].(string) + require.True(t, ok) + require.Equal(t, account["key"], updatedPubKey) + } func GetAAContractAddress(t *testing.T, txDetails map[string]interface{}) string { diff --git a/integration_tests/utils.go b/integration_tests/utils.go index c1d96029..079b9fab 100644 --- a/integration_tests/utils.go +++ b/integration_tests/utils.go @@ -40,7 +40,7 @@ type TestData struct { client *client.Client } -func RawJSONMsg(t *testing.T, from, to, denom string) []byte { +func RawJSONMsgSend(t *testing.T, from, to, denom string) []byte { msg := fmt.Sprintf(` { "body": { @@ -79,6 +79,45 @@ func RawJSONMsg(t *testing.T, from, to, denom string) []byte { return rawMsg } +func RawJSONMsgExecContractNewPubKey(t *testing.T, sender, contract, pubkey string) []byte { + msg := fmt.Sprintf(` +{ + "body": { + "messages": [ + { + "@type": "/cosmwasm.wasm.v1.MsgExecuteContract", + "sender": "%s", + "contract": "%s", + "msg": { + "update_pubkey": { + "new_pubkey": "%s" + } + }, + "funds": [] + } + ], + "memo": "", + "timeout_height": "0", + "extension_options": [], + "non_critical_extension_options": [] + }, + "auth_info": { + "signer_infos": [], + "fee": { + "amount": [], + "gas_limit": "200000", + "payer": "", + "granter": "" + }, + "tip": null + }, + "signatures": [] +} + `, sender, contract, pubkey) + var rawMsg json.RawMessage = []byte(msg) + return rawMsg +} + func BuildXionChain(t *testing.T, gas string, modifyGenesis func(ibc.ChainConfig, []byte) ([]byte, error)) TestData { ctx := context.Background() From b411a055d6bc8870ba6e74206b8620296ac642fd Mon Sep 17 00:00:00 2001 From: Eduardo Diaz Date: Wed, 18 Oct 2023 16:27:46 -0400 Subject: [PATCH 200/501] add explainer comments --- integration_tests/abstract_account_test.go | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/integration_tests/abstract_account_test.go b/integration_tests/abstract_account_test.go index cc9c9aba..e4ab7696 100644 --- a/integration_tests/abstract_account_test.go +++ b/integration_tests/abstract_account_test.go @@ -30,6 +30,7 @@ func TestXionAbstractAccount(t *testing.T) { td := BuildXionChain(t, "0.0uxion", ModifyInterChainGenesis(ModifyInterChainGenesisFn{ModifyGenesisShortProposals}, [][]string{{votingPeriod, maxDepositPeriod}})) xion, ctx := td.xionChain, td.ctx + // Register All messages we are interacting. xion.Config().EncodingConfig.InterfaceRegistry.RegisterImplementations( (*types.Msg)(nil), &xiontypes.MsgSetPlatformPercentage{}, @@ -57,12 +58,16 @@ func TestXionAbstractAccount(t *testing.T) { require.NoError(t, err) require.Equal(t, fundAmount, xionUserBalInitial) - // step 1: send a xion message with default (0%) platform fee + // Create a Secondary Key For Rotation recipientKeyName := "recipient-key" err = xion.CreateKey(ctx, recipientKeyName) require.NoError(t, err) + receipientKeyAddressBytes, err := xion.GetAddress(ctx, recipientKeyName) + require.NoError(t, err) + recipientKeyAddress, err := types.Bech32ifyAddressBytes(xion.Config().Bech32Prefix, receipientKeyAddressBytes) + require.NoError(t, err) - currentHeight, _ = xion.Height(ctx) + // Get Public Key For Funded Account account, err := ExecBin(t, ctx, xion.FullNodes[0], xionUser.KeyName(), "keys", "show", @@ -72,12 +77,13 @@ func TestXionAbstractAccount(t *testing.T) { ) require.NoError(t, err) + // Store Wasm Contract codeID, err := xion.StoreContract(ctx, xionUser.FormattedAddress(), "./testdata/contracts/account_updatable-aarch64.wasm") require.NoError(t, err) depositedFunds := fmt.Sprintf("%d%s", 100000, xion.Config().Denom) - /* add register AA using Public key */ + // Register Abstract Account Using Public Key registeredTxHash, err := ExecTx(t, ctx, xion.FullNodes[0], xionUser.KeyName(), "abstract-account", "register", @@ -109,11 +115,6 @@ func TestXionAbstractAccount(t *testing.T) { require.True(t, ok) require.Equal(t, account["key"], pubkey) - receipientKeyAddressBytes, err := xion.GetAddress(ctx, recipientKeyName) - require.NoError(t, err) - recipientKeyAddress, err := types.Bech32ifyAddressBytes(xion.Config().Bech32Prefix, receipientKeyAddressBytes) - require.NoError(t, err) - // Generate Msg Send without signatures jsonMsg := RawJSONMsgSend(t, aaContractAddr, recipientKeyAddress, xion.Config().Denom) require.NoError(t, err) From e9365aef668e69ba2e6b97dea390109a0cb41f4e Mon Sep 17 00:00:00 2001 From: Eduardo Diaz Date: Wed, 18 Oct 2023 16:37:08 -0400 Subject: [PATCH 201/501] update workflow --- .github/workflows/integration-tests.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index bfa2d53b..c8556860 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -71,6 +71,7 @@ jobs: - "MintModuleNoInflationNoFees" - "MintModuleInflationHighFees" - "MintModuleInflationLowFees" + - "XionSendPlatformFee" steps: - name: Set up Go 1.18 From 7ead63aa386b076443b56933b194934932ebbd19 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 28 Sep 2023 17:56:36 +0000 Subject: [PATCH 202/501] Bump docker/login-action from 2 to 3 Bumps [docker/login-action](https://github.com/docker/login-action) from 2 to 3. - [Release notes](https://github.com/docker/login-action/releases) - [Commits](https://github.com/docker/login-action/compare/v2...v3) --- updated-dependencies: - dependency-name: docker/login-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/docker-hub.yml | 2 +- .github/workflows/integration-tests.yml | 4 ++-- .github/workflows/release.yml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/docker-hub.yml b/.github/workflows/docker-hub.yml index 1244d951..ef1fb31f 100644 --- a/.github/workflows/docker-hub.yml +++ b/.github/workflows/docker-hub.yml @@ -22,7 +22,7 @@ jobs: fetch-tags: true - name: Login to Docker Hub - uses: docker/login-action@v2 + uses: docker/login-action@v3 with: username: ${{ secrets.DOCKER_HUB_USERNAME }} password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index 3271e371..52ae7122 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -26,7 +26,7 @@ jobs: - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 - name: container-login - uses: docker/login-action@v2 + uses: docker/login-action@v3 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} @@ -80,7 +80,7 @@ jobs: - name: checkout uses: actions/checkout@v4 - name: container-login - uses: docker/login-action@v2 + uses: docker/login-action@v3 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 1dd9c640..9bfeb894 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -27,7 +27,7 @@ jobs: echo "::set-output name=VERSION::$SANITIZED_VERSION" - name: Login to Docker Hub - uses: docker/login-action@v2 + uses: docker/login-action@v3 with: username: ${{ secrets.DOCKER_HUB_USERNAME }} password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} From 20e9b3ff7a7c727249dd2758c79d5be4d77b8067 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 28 Sep 2023 17:56:46 +0000 Subject: [PATCH 203/501] Bump docker/setup-buildx-action from 2 to 3 Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 2 to 3. - [Release notes](https://github.com/docker/setup-buildx-action/releases) - [Commits](https://github.com/docker/setup-buildx-action/compare/v2...v3) --- updated-dependencies: - dependency-name: docker/setup-buildx-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/integration-tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index 52ae7122..81d4f85a 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -24,7 +24,7 @@ jobs: - name: checkout uses: actions/checkout@v4 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 + uses: docker/setup-buildx-action@v3 - name: container-login uses: docker/login-action@v3 with: From 62b1d3528e636ceb3b97a09ec81819ecc1ffe8db Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 28 Sep 2023 17:56:43 +0000 Subject: [PATCH 204/501] Bump docker/metadata-action from 4 to 5 Bumps [docker/metadata-action](https://github.com/docker/metadata-action) from 4 to 5. - [Release notes](https://github.com/docker/metadata-action/releases) - [Upgrade guide](https://github.com/docker/metadata-action/blob/master/UPGRADE.md) - [Commits](https://github.com/docker/metadata-action/compare/v4...v5) --- updated-dependencies: - dependency-name: docker/metadata-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/integration-tests.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index 81d4f85a..defda641 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -33,7 +33,7 @@ jobs: password: ${{ secrets.GITHUB_TOKEN }} - name: labels id: meta - uses: docker/metadata-action@v4 + uses: docker/metadata-action@v5 with: images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}-heighliner tags: | @@ -87,7 +87,7 @@ jobs: password: ${{ secrets.GITHUB_TOKEN }} - name: docker xion metadata id: meta-xion - uses: docker/metadata-action@v4 + uses: docker/metadata-action@v5 with: images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}-heighliner - name: pull xion image From 35008505c908d2a73613c0c9f21d3951f193a7f8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Oct 2023 21:07:40 +0000 Subject: [PATCH 205/501] Bump aws-actions/amazon-ecr-login from 1 to 2 Bumps [aws-actions/amazon-ecr-login](https://github.com/aws-actions/amazon-ecr-login) from 1 to 2. - [Release notes](https://github.com/aws-actions/amazon-ecr-login/releases) - [Changelog](https://github.com/aws-actions/amazon-ecr-login/blob/main/CHANGELOG.md) - [Commits](https://github.com/aws-actions/amazon-ecr-login/compare/v1...v2) --- updated-dependencies: - dependency-name: aws-actions/amazon-ecr-login dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/aws-ecr.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/aws-ecr.yml b/.github/workflows/aws-ecr.yml index 9bd6d2d8..241c59ae 100644 --- a/.github/workflows/aws-ecr.yml +++ b/.github/workflows/aws-ecr.yml @@ -30,7 +30,7 @@ jobs: - name: Login to Amazon ECR id: login-ecr - uses: aws-actions/amazon-ecr-login@v1 + uses: aws-actions/amazon-ecr-login@v2 - name: Set up docker buildx uses: docker/setup-buildx-action@v3 From 127b8bf83738c50da979916f2679212acac874da Mon Sep 17 00:00:00 2001 From: justin <328965+justinbarry@users.noreply.github.com> Date: Wed, 25 Oct 2023 16:20:42 -0700 Subject: [PATCH 206/501] Build docker image for local development and push to hub in CI --- .github/workflows/docker-hub.yml | 14 +- Dockerfile | 42 +- docker-compose.yml | 4 +- docker/entrypoint.sh | 49 +- docker/local-config/app.toml | 276 ---------- docker/local-config/client.toml | 17 - docker/local-config/config.toml | 471 ------------------ docker/local-config/genesis.json | 367 -------------- ...df872a848b4715331eb8e8ff11343c9f90806.json | 1 - docker/local-config/node_key.json | 1 - docker/local-config/priv_validator_key.json | 11 - 11 files changed, 90 insertions(+), 1163 deletions(-) mode change 100644 => 100755 docker/entrypoint.sh delete mode 100644 docker/local-config/app.toml delete mode 100644 docker/local-config/client.toml delete mode 100644 docker/local-config/config.toml delete mode 100644 docker/local-config/genesis.json delete mode 100644 docker/local-config/gentx/gentx-9e5df872a848b4715331eb8e8ff11343c9f90806.json delete mode 100644 docker/local-config/node_key.json delete mode 100644 docker/local-config/priv_validator_key.json diff --git a/.github/workflows/docker-hub.yml b/.github/workflows/docker-hub.yml index ef1fb31f..765fb9eb 100644 --- a/.github/workflows/docker-hub.yml +++ b/.github/workflows/docker-hub.yml @@ -39,7 +39,7 @@ jobs: type=semver,pattern={{version}},priority=1000 type=sha,priority=700 - - name: Build and push docker image + - name: Build and push release docker image uses: docker/build-push-action@v5 with: context: . @@ -48,3 +48,15 @@ jobs: cache-from: type=gha cache-to: type=gha,mode=max target: xion-release + + - name: Build and push local dev docker image + uses: docker/build-push-action@v5 + with: + context: . + push: true + tags: + - ${{ steps.meta.outputs.tags }}-local-dev + - local-dev + cache-from: type=gha + cache-to: type=gha,mode=max + target: xion-release diff --git a/Dockerfile b/Dockerfile index 391b0734..6c972a29 100644 --- a/Dockerfile +++ b/Dockerfile @@ -17,14 +17,16 @@ FROM golang:1.19-alpine3.17 AS go-builder # RUN apk add libusb-dev linux-headers WORKDIR /code + COPY go.mod /code/ + COPY go.sum /code/ + RUN go mod download + COPY ./.git /code/.git COPY ./app /code/app COPY ./cmd /code/cmd COPY ./contrib /code/contrib COPY ./proto /code/proto COPY ./x /code/x - COPY go.mod /code/ - COPY go.sum /code/ COPY Makefile /code/ # See https://github.com/CosmWasm/wasmvm/releases @@ -45,14 +47,9 @@ FROM golang:1.19-alpine3.17 AS go-builder && (file /code/build/xiond | grep "statically linked") # -------------------------------------------------------- -FROM alpine:3.17 AS localdev - +FROM alpine:3.17 AS xion-dev COPY --from=go-builder /code/build/xiond /usr/bin/xiond - COPY ./docker/local-config /xion/config - COPY ./docker/entrypoint.sh /root/entrypoint.sh - RUN chmod +x /root/entrypoint.sh - # rest server EXPOSE 1317 # tendermint grpc @@ -64,9 +61,34 @@ FROM alpine:3.17 AS localdev # tendermint prometheus EXPOSE 26660 - VOLUME [ "/xion/data" ] + RUN mkdir /xion + + RUN set -euxo pipefail \ + && apk add --no-cache \ + bash \ + curl \ + htop \ + jq \ + lz4 \ + tini + + RUN set -euxo pipefail \ + && addgroup -S xiond \ + && adduser \ + --disabled-password \ + --gecos xiond \ + --ingroup xiond \ + xiond + + RUN set -eux \ + && chown -R xiond:xiond /home/xiond \ + && chown -R xiond:xiond /xion + + USER xiond:xiond + + COPY ./docker/entrypoint.sh /home/xiond/entrypoint.sh - CMD ["/root/entrypoint.sh"] + CMD ["/home/xiond/entrypoint.sh"] # -------------------------------------------------------- FROM alpine:3.17 AS xion-release diff --git a/docker-compose.yml b/docker-compose.yml index f941109e..427043df 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -5,10 +5,10 @@ services: build: context: . dockerfile: Dockerfile - target: localdev + target: xion-dev platform: linux/amd64 volumes: - - testnet-data:/xion/data + - testnet-data:/xion/ ports: - "1317:1317" - "26656:26656" diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh old mode 100644 new mode 100755 index 42ed1ad6..406b2c94 --- a/docker/entrypoint.sh +++ b/docker/entrypoint.sh @@ -1,10 +1,47 @@ #!/bin/sh -if [[ ! -f /xion/data/priv_validator_state.json ]]; then - mv /xion/config /xion-config - xiond init fogo --chain-id xion-local-testnet-1 --home /xion - rm -r /xion/config - mv /xion-config /xion/config +VALIDATOR_MNEMONIC="clinic tube choose fade collect fish original recipe pumpkin fantasy enrich sunny pattern regret blouse organ april carpet guitar skin work moon fatigue hurdle" +FAUCET_MNEMONIC="decorate corn happy degree artist trouble color mountain shadow hazard canal zone hunt unfold deny glove famous area arrow cup under sadness salute item" + +VALIDATOR_KEY_NAME="${VALIDATOR_KEY_NAME:-local-testnet-validator}" +FAUCET_KEY_NAME="${FAUCET_KEY_NAME:-local-testnet-faucet}" + +CHAIN_ID=xion-local-testnet-1 +HOME_DIRECTORY=/xion/chain-data + +if [[ ! -f $HOME_DIRECTORY/data/priv_validator_state.json ]]; then + xiond init validator --chain-id $CHAIN_ID --default-denom uxion \ + --home $HOME_DIRECTORY; + + echo $FAUCET_MNEMONIC | xiond keys add $FAUCET_KEY_NAME --recover \ + --home $HOME_DIRECTORY \ + --keyring-backend test; + + echo $VALIDATOR_MNEMONIC | xiond keys add $VALIDATOR_KEY_NAME --recover \ + --home $HOME_DIRECTORY \ + --keyring-backend test; + + VALIDATOR_ADDRESS=$(xiond keys show $VALIDATOR_KEY_NAME -a --keyring-backend test --home $HOME_DIRECTORY); + xiond genesis add-genesis-account $VALIDATOR_ADDRESS 100000000000uxion \ + --keyring-backend test \ + --home $HOME_DIRECTORY; + + FAUCET_ADDRESS=$(xiond keys show $FAUCET_KEY_NAME -a --keyring-backend test --home $HOME_DIRECTORY); + xiond genesis add-genesis-account $FAUCET_ADDRESS 100000000000uxion \ + --keyring-backend test \ + --home $HOME_DIRECTORY; + + xiond genesis gentx $VALIDATOR_KEY_NAME 100000000uxion --chain-id $CHAIN_ID \ + --home $HOME_DIRECTORY \ + --keyring-backend test; + + xiond genesis collect-gentxs --home $HOME_DIRECTORY; + + # Enable the API. + sed -i '/\[api\]/,+3 s/enable = false/enable = true/' $HOME_DIRECTORY/config/app.toml; + + # Bind API to all the network interfaces. + sed -i '/\[rpc\]/,+3 s/laddr = "tcp\:\/\/127.0.0.1:26657"/laddr = "tcp\:\/\/0.0.0.0:26657"/' $HOME_DIRECTORY/config/config.toml; fi -xiond start --home /xion --trace +xiond start --trace --home $HOME_DIRECTORY diff --git a/docker/local-config/app.toml b/docker/local-config/app.toml deleted file mode 100644 index c64ac9d4..00000000 --- a/docker/local-config/app.toml +++ /dev/null @@ -1,276 +0,0 @@ -# This is a TOML config file. -# For more information, see https://github.com/toml-lang/toml - -############################################################################### -### Base Configuration ### -############################################################################### - -# The minimum gas prices a validator is willing to accept for processing a -# transaction. A transaction's fees must meet the minimum of any denomination -# specified in this config (e.g. 0.25token1;0.0001token2). -minimum-gas-prices = "0uxion" - -# default: the last 362880 states are kept, pruning at 10 block intervals -# nothing: all historic states will be saved, nothing will be deleted (i.e. archiving node) -# everything: 2 latest states will be kept; pruning at 10 block intervals. -# custom: allow pruning options to be manually specified through 'pruning-keep-recent', and 'pruning-interval' -pruning = "default" - -# These are applied if and only if the pruning strategy is custom. -pruning-keep-recent = "0" -pruning-interval = "0" - -# HaltHeight contains a non-zero block height at which a node will gracefully -# halt and shutdown that can be used to assist upgrades and testing. -# -# Note: Commitment of state will be attempted on the corresponding block. -halt-height = 0 - -# HaltTime contains a non-zero minimum block time (in Unix seconds) at which -# a node will gracefully halt and shutdown that can be used to assist upgrades -# and testing. -# -# Note: Commitment of state will be attempted on the corresponding block. -halt-time = 0 - -# MinRetainBlocks defines the minimum block height offset from the current -# block being committed, such that all blocks past this offset are pruned -# from Tendermint. It is used as part of the process of determining the -# ResponseCommit.RetainHeight value during ABCI Commit. A value of 0 indicates -# that no blocks should be pruned. -# -# This configuration value is only responsible for pruning Tendermint blocks. -# It has no bearing on application state pruning which is determined by the -# "pruning-*" configurations. -# -# Note: Tendermint block pruning is dependant on this parameter in conunction -# with the unbonding (safety threshold) period, state pruning and state sync -# snapshot parameters to determine the correct minimum value of -# ResponseCommit.RetainHeight. -min-retain-blocks = 0 - -# InterBlockCache enables inter-block caching. -inter-block-cache = true - -# IndexEvents defines the set of events in the form {eventType}.{attributeKey}, -# which informs Tendermint what to index. If empty, all events will be indexed. -# -# Example: -# ["message.sender", "message.recipient"] -index-events = [] - -# IavlCacheSize set the size of the iavl tree cache (in number of nodes). -iavl-cache-size = 781250 - -# IAVLDisableFastNode enables or disables the fast node feature of IAVL. -# Default is false. -iavl-disable-fastnode = false - -# IAVLLazyLoading enable/disable the lazy loading of iavl store. -# Default is false. -iavl-lazy-loading = false - -# AppDBBackend defines the database backend type to use for the application and snapshots DBs. -# An empty string indicates that a fallback will be used. -# First fallback is the deprecated compile-time types.DBBackend value. -# Second fallback (if the types.DBBackend also isn't set), is the db-backend value set in Tendermint's config.toml. -app-db-backend = "" - -############################################################################### -### Telemetry Configuration ### -############################################################################### - -[telemetry] - -# Prefixed with keys to separate services. -service-name = "" - -# Enabled enables the application telemetry functionality. When enabled, -# an in-memory sink is also enabled by default. Operators may also enabled -# other sinks such as Prometheus. -enabled = false - -# Enable prefixing gauge values with hostname. -enable-hostname = false - -# Enable adding hostname to labels. -enable-hostname-label = false - -# Enable adding service to labels. -enable-service-label = false - -# PrometheusRetentionTime, when positive, enables a Prometheus metrics sink. -prometheus-retention-time = 0 - -# GlobalLabels defines a global set of name/value label tuples applied to all -# metrics emitted using the wrapper functions defined in telemetry package. -# -# Example: -# [["chain_id", "cosmoshub-1"]] -global-labels = [ -] - -############################################################################### -### API Configuration ### -############################################################################### - -[api] - -# Enable defines if the API server should be enabled. -enable = false - -# Swagger defines if swagger documentation should automatically be registered. -swagger = false - -# Address defines the API server to listen on. -address = "tcp://0.0.0.0:1317" - -# MaxOpenConnections defines the number of maximum open connections. -max-open-connections = 1000 - -# RPCReadTimeout defines the Tendermint RPC read timeout (in seconds). -rpc-read-timeout = 10 - -# RPCWriteTimeout defines the Tendermint RPC write timeout (in seconds). -rpc-write-timeout = 0 - -# RPCMaxBodyBytes defines the Tendermint maximum request body (in bytes). -rpc-max-body-bytes = 1000000 - -# EnableUnsafeCORS defines if CORS should be enabled (unsafe - use it at your own risk). -enabled-unsafe-cors = false - -############################################################################### -### Rosetta Configuration ### -############################################################################### - -[rosetta] - -# Enable defines if the Rosetta API server should be enabled. -enable = false - -# Address defines the Rosetta API server to listen on. -address = ":8080" - -# Network defines the name of the blockchain that will be returned by Rosetta. -blockchain = "app" - -# Network defines the name of the network that will be returned by Rosetta. -network = "network" - -# Retries defines the number of retries when connecting to the node before failing. -retries = 3 - -# Offline defines if Rosetta server should run in offline mode. -offline = false - -# EnableDefaultSuggestedFee defines if the server should suggest fee by default. -# If 'construction/medata' is called without gas limit and gas price, -# suggested fee based on gas-to-suggest and denom-to-suggest will be given. -enable-fee-suggestion = false - -# GasToSuggest defines gas limit when calculating the fee -gas-to-suggest = 200000 - -# DenomToSuggest defines the defult denom for fee suggestion. -# Price must be in minimum-gas-prices. -denom-to-suggest = "uatom" - -############################################################################### -### gRPC Configuration ### -############################################################################### - -[grpc] - -# Enable defines if the gRPC server should be enabled. -enable = true - -# Address defines the gRPC server address to bind to. -address = "localhost:9090" - -# MaxRecvMsgSize defines the max message size in bytes the server can receive. -# The default value is 10MB. -max-recv-msg-size = "10485760" - -# MaxSendMsgSize defines the max message size in bytes the server can send. -# The default value is math.MaxInt32. -max-send-msg-size = "2147483647" - -############################################################################### -### gRPC Web Configuration ### -############################################################################### - -[grpc-web] - -# GRPCWebEnable defines if the gRPC-web should be enabled. -# NOTE: gRPC must also be enabled, otherwise, this configuration is a no-op. -enable = true - -# Address defines the gRPC-web server address to bind to. -address = "localhost:9091" - -# EnableUnsafeCORS defines if CORS should be enabled (unsafe - use it at your own risk). -enable-unsafe-cors = false - -############################################################################### -### State Sync Configuration ### -############################################################################### - -# State sync snapshots allow other nodes to rapidly join the network without replaying historical -# blocks, instead downloading and applying a snapshot of the application state at a given height. -[state-sync] - -# snapshot-interval specifies the block interval at which local state sync snapshots are -# taken (0 to disable). -snapshot-interval = 0 - -# snapshot-keep-recent specifies the number of recent snapshots to keep and serve (0 to keep all). -snapshot-keep-recent = 2 - -############################################################################### -### Store / State Streaming ### -############################################################################### - -[store] -streamers = [] - -[streamers] -[streamers.file] -keys = ["*", ] -write_dir = "" -prefix = "" - -# output-metadata specifies if output the metadata file which includes the abci request/responses -# during processing the block. -output-metadata = "true" - -# stop-node-on-error specifies if propagate the file streamer errors to consensus state machine. -stop-node-on-error = "true" - -# fsync specifies if call fsync after writing the files. -fsync = "false" - -############################################################################### -### Mempool ### -############################################################################### - -[mempool] -# Setting max-txs to 0 will allow for a unbounded amount of transactions in the mempool. -# Setting max_txs to negative 1 (-1) will disable transactions from being inserted into the mempool. -# Setting max_txs to a positive number (> 0) will limit the number of transactions in the mempool, by the specified amount. -# -# Note, this configuration only applies to SDK built-in app-side mempool -# implementations. -max-txs = "5000" - -[wasm] -# Smart query gas limit is the max gas to be used in a smart query contract call -query_gas_limit = 3000000 - -# in-memory cache for Wasm contracts. Set to 0 to disable. -# The value is in MiB not bytes -memory_cache_size = 100 - -# Simulation gas limit is the max gas to be used in a tx simulation call. -# When not set the consensus max block gas is used instead -# simulation_gas_limit = diff --git a/docker/local-config/client.toml b/docker/local-config/client.toml deleted file mode 100644 index 462cfa99..00000000 --- a/docker/local-config/client.toml +++ /dev/null @@ -1,17 +0,0 @@ -# This is a TOML config file. -# For more information, see https://github.com/toml-lang/toml - -############################################################################### -### Client Configuration ### -############################################################################### - -# The network chain ID -chain-id = "xion-local-testnet-1" -# The keyring's backend, where the keys are stored (os|file|kwallet|pass|test|memory) -keyring-backend = "os" -# CLI output format (text|json) -output = "text" -# : to Tendermint RPC interface for this chain -node = "tcp://localhost:26657" -# Transaction broadcasting mode (sync|async) -broadcast-mode = "sync" diff --git a/docker/local-config/config.toml b/docker/local-config/config.toml deleted file mode 100644 index 6fd450b7..00000000 --- a/docker/local-config/config.toml +++ /dev/null @@ -1,471 +0,0 @@ -# This is a TOML config file. -# For more information, see https://github.com/toml-lang/toml - -# NOTE: Any path below can be absolute (e.g. "/var/myawesomeapp/data") or -# relative to the home directory (e.g. "data"). The home directory is -# "$HOME/.cometbft" by default, but could be changed via $CMTHOME env variable -# or --home cmd flag. - -####################################################################### -### Main Base Config Options ### -####################################################################### - -# TCP or UNIX socket address of the ABCI application, -# or the name of an ABCI application compiled in with the CometBFT binary -proxy_app = "tcp://127.0.0.1:26658" - -# A custom human readable name for this node -moniker = "validator" - -# If this node is many blocks behind the tip of the chain, BlockSync -# allows them to catchup quickly by downloading blocks in parallel -# and verifying their commits -# -# Deprecated: this key will be removed and BlockSync will be enabled -# unconditionally in the next major release. -block_sync = true - -# Database backend: goleveldb | cleveldb | boltdb | rocksdb | badgerdb -# * goleveldb (github.com/syndtr/goleveldb - most popular implementation) -# - pure go -# - stable -# * cleveldb (uses levigo wrapper) -# - fast -# - requires gcc -# - use cleveldb build tag (go build -tags cleveldb) -# * boltdb (uses etcd's fork of bolt - github.com/etcd-io/bbolt) -# - EXPERIMENTAL -# - may be faster is some use-cases (random reads - indexer) -# - use boltdb build tag (go build -tags boltdb) -# * rocksdb (uses github.com/tecbot/gorocksdb) -# - EXPERIMENTAL -# - requires gcc -# - use rocksdb build tag (go build -tags rocksdb) -# * badgerdb (uses github.com/dgraph-io/badger) -# - EXPERIMENTAL -# - use badgerdb build tag (go build -tags badgerdb) -db_backend = "goleveldb" - -# Database directory -db_dir = "data" - -# Output level for logging, including package level options -log_level = "info" - -# Output format: 'plain' (colored text) or 'json' -log_format = "plain" - -##### additional base config options ##### - -# Path to the JSON file containing the initial validator set and other meta data -genesis_file = "config/genesis.json" - -# Path to the JSON file containing the private key to use as a validator in the consensus protocol -priv_validator_key_file = "config/priv_validator_key.json" - -# Path to the JSON file containing the last sign state of a validator -priv_validator_state_file = "data/priv_validator_state.json" - -# TCP or UNIX socket address for CometBFT to listen on for -# connections from an external PrivValidator process -priv_validator_laddr = "" - -# Path to the JSON file containing the private key to use for node authentication in the p2p protocol -node_key_file = "config/node_key.json" - -# Mechanism to connect to the ABCI application: socket | grpc -abci = "socket" - -# If true, query the ABCI app on connecting to a new peer -# so the app can decide if we should keep the connection or not -filter_peers = false - - -####################################################################### -### Advanced Configuration Options ### -####################################################################### - -####################################################### -### RPC Server Configuration Options ### -####################################################### -[rpc] - -# TCP or UNIX socket address for the RPC server to listen on -laddr = "tcp://0.0.0.0:26657" - -# A list of origins a cross-domain request can be executed from -# Default value '[]' disables cors support -# Use '["*"]' to allow any origin -cors_allowed_origins = ["*"] - -# A list of methods the client is allowed to use with cross-domain requests -cors_allowed_methods = ["HEAD", "GET", "POST", ] - -# A list of non simple headers the client is allowed to use with cross-domain requests -cors_allowed_headers = ["Origin", "Accept", "Content-Type", "X-Requested-With", "X-Server-Time", ] - -# TCP or UNIX socket address for the gRPC server to listen on -# NOTE: This server only supports /broadcast_tx_commit -grpc_laddr = "" - -# Maximum number of simultaneous connections. -# Does not include RPC (HTTP&WebSocket) connections. See max_open_connections -# If you want to accept a larger number than the default, make sure -# you increase your OS limits. -# 0 - unlimited. -# Should be < {ulimit -Sn} - {MaxNumInboundPeers} - {MaxNumOutboundPeers} - {N of wal, db and other open files} -# 1024 - 40 - 10 - 50 = 924 = ~900 -grpc_max_open_connections = 900 - -# Activate unsafe RPC commands like /dial_seeds and /unsafe_flush_mempool -unsafe = false - -# Maximum number of simultaneous connections (including WebSocket). -# Does not include gRPC connections. See grpc_max_open_connections -# If you want to accept a larger number than the default, make sure -# you increase your OS limits. -# 0 - unlimited. -# Should be < {ulimit -Sn} - {MaxNumInboundPeers} - {MaxNumOutboundPeers} - {N of wal, db and other open files} -# 1024 - 40 - 10 - 50 = 924 = ~900 -max_open_connections = 900 - -# Maximum number of unique clientIDs that can /subscribe -# If you're using /broadcast_tx_commit, set to the estimated maximum number -# of broadcast_tx_commit calls per block. -max_subscription_clients = 100 - -# Maximum number of unique queries a given client can /subscribe to -# If you're using GRPC (or Local RPC client) and /broadcast_tx_commit, set to -# the estimated # maximum number of broadcast_tx_commit calls per block. -max_subscriptions_per_client = 5 - -# Experimental parameter to specify the maximum number of events a node will -# buffer, per subscription, before returning an error and closing the -# subscription. Must be set to at least 100, but higher values will accommodate -# higher event throughput rates (and will use more memory). -experimental_subscription_buffer_size = 200 - -# Experimental parameter to specify the maximum number of RPC responses that -# can be buffered per WebSocket client. If clients cannot read from the -# WebSocket endpoint fast enough, they will be disconnected, so increasing this -# parameter may reduce the chances of them being disconnected (but will cause -# the node to use more memory). -# -# Must be at least the same as "experimental_subscription_buffer_size", -# otherwise connections could be dropped unnecessarily. This value should -# ideally be somewhat higher than "experimental_subscription_buffer_size" to -# accommodate non-subscription-related RPC responses. -experimental_websocket_write_buffer_size = 200 - -# If a WebSocket client cannot read fast enough, at present we may -# silently drop events instead of generating an error or disconnecting the -# client. -# -# Enabling this experimental parameter will cause the WebSocket connection to -# be closed instead if it cannot read fast enough, allowing for greater -# predictability in subscription behavior. -experimental_close_on_slow_client = false - -# How long to wait for a tx to be committed during /broadcast_tx_commit. -# WARNING: Using a value larger than 10s will result in increasing the -# global HTTP write timeout, which applies to all connections and endpoints. -# See https://github.com/tendermint/tendermint/issues/3435 -timeout_broadcast_tx_commit = "10s" - -# Maximum size of request body, in bytes -max_body_bytes = 1000000 - -# Maximum size of request header, in bytes -max_header_bytes = 1048576 - -# The path to a file containing certificate that is used to create the HTTPS server. -# Might be either absolute path or path related to CometBFT's config directory. -# If the certificate is signed by a certificate authority, -# the certFile should be the concatenation of the server's certificate, any intermediates, -# and the CA's certificate. -# NOTE: both tls_cert_file and tls_key_file must be present for CometBFT to create HTTPS server. -# Otherwise, HTTP server is run. -tls_cert_file = "" - -# The path to a file containing matching private key that is used to create the HTTPS server. -# Might be either absolute path or path related to CometBFT's config directory. -# NOTE: both tls-cert-file and tls-key-file must be present for CometBFT to create HTTPS server. -# Otherwise, HTTP server is run. -tls_key_file = "" - -# pprof listen address (https://golang.org/pkg/net/http/pprof) -pprof_laddr = "localhost:6060" - -####################################################### -### P2P Configuration Options ### -####################################################### -[p2p] - -# Address to listen for incoming connections -laddr = "tcp://0.0.0.0:26656" - -# Address to advertise to peers for them to dial -# If empty, will use the same port as the laddr, -# and will introspect on the listener or use UPnP -# to figure out the address. ip and port are required -# example: 159.89.10.97:26656 -external_address = "" - -# Comma separated list of seed nodes to connect to -seeds = "" - -# Comma separated list of nodes to keep persistent connections to -persistent_peers = "" - -# UPNP port forwarding -upnp = false - -# Path to address book -addr_book_file = "config/addrbook.json" - -# Set true for strict address routability rules -# Set false for private or local networks -addr_book_strict = true - -# Maximum number of inbound peers -max_num_inbound_peers = 40 - -# Maximum number of outbound peers to connect to, excluding persistent peers -max_num_outbound_peers = 10 - -# List of node IDs, to which a connection will be (re)established ignoring any existing limits -unconditional_peer_ids = "" - -# Maximum pause when redialing a persistent peer (if zero, exponential backoff is used) -persistent_peers_max_dial_period = "0s" - -# Time to wait before flushing messages out on the connection -flush_throttle_timeout = "100ms" - -# Maximum size of a message packet payload, in bytes -max_packet_msg_payload_size = 1024 - -# Rate at which packets can be sent, in bytes/second -send_rate = 5120000 - -# Rate at which packets can be received, in bytes/second -recv_rate = 5120000 - -# Set true to enable the peer-exchange reactor -pex = true - -# Seed mode, in which node constantly crawls the network and looks for -# peers. If another node asks it for addresses, it responds and disconnects. -# -# Does not work if the peer-exchange reactor is disabled. -seed_mode = false - -# Comma separated list of peer IDs to keep private (will not be gossiped to other peers) -private_peer_ids = "" - -# Toggle to disable guard against peers connecting from the same ip. -allow_duplicate_ip = false - -# Peer connection configuration. -handshake_timeout = "20s" -dial_timeout = "3s" - -####################################################### -### Mempool Configuration Option ### -####################################################### -[mempool] - -# Mempool version to use: -# 1) "v0" - (default) FIFO mempool. -# 2) "v1" - prioritized mempool (deprecated; will be removed in the next release). -version = "v0" - -recheck = true -broadcast = true -wal_dir = "" - -# Maximum number of transactions in the mempool -size = 5000 - -# Limit the total size of all txs in the mempool. -# This only accounts for raw transactions (e.g. given 1MB transactions and -# max_txs_bytes=5MB, mempool will only accept 5 transactions). -max_txs_bytes = 1073741824 - -# Size of the cache (used to filter transactions we saw earlier) in transactions -cache_size = 10000 - -# Do not remove invalid transactions from the cache (default: false) -# Set to true if it's not possible for any invalid transaction to become valid -# again in the future. -keep-invalid-txs-in-cache = false - -# Maximum size of a single transaction. -# NOTE: the max size of a tx transmitted over the network is {max_tx_bytes}. -max_tx_bytes = 1048576 - -# Maximum size of a batch of transactions to send to a peer -# Including space needed by encoding (one varint per transaction). -# XXX: Unused due to https://github.com/tendermint/tendermint/issues/5796 -max_batch_bytes = 0 - -# ttl-duration, if non-zero, defines the maximum amount of time a transaction -# can exist for in the mempool. -# -# Note, if ttl-num-blocks is also defined, a transaction will be removed if it -# has existed in the mempool at least ttl-num-blocks number of blocks or if it's -# insertion time into the mempool is beyond ttl-duration. -ttl-duration = "0s" - -# ttl-num-blocks, if non-zero, defines the maximum number of blocks a transaction -# can exist for in the mempool. -# -# Note, if ttl-duration is also defined, a transaction will be removed if it -# has existed in the mempool at least ttl-num-blocks number of blocks or if -# it's insertion time into the mempool is beyond ttl-duration. -ttl-num-blocks = 0 - -####################################################### -### State Sync Configuration Options ### -####################################################### -[statesync] -# State sync rapidly bootstraps a new node by discovering, fetching, and restoring a state machine -# snapshot from peers instead of fetching and replaying historical blocks. Requires some peers in -# the network to take and serve state machine snapshots. State sync is not attempted if the node -# has any local state (LastBlockHeight > 0). The node will have a truncated block history, -# starting from the height of the snapshot. -enable = false - -# RPC servers (comma-separated) for light client verification of the synced state machine and -# retrieval of state data for node bootstrapping. Also needs a trusted height and corresponding -# header hash obtained from a trusted source, and a period during which validators can be trusted. -# -# For Cosmos SDK-based chains, trust_period should usually be about 2/3 of the unbonding time (~2 -# weeks) during which they can be financially punished (slashed) for misbehavior. -rpc_servers = "" -trust_height = 0 -trust_hash = "" -trust_period = "168h0m0s" - -# Time to spend discovering snapshots before initiating a restore. -discovery_time = "15s" - -# Temporary directory for state sync snapshot chunks, defaults to the OS tempdir (typically /tmp). -# Will create a new, randomly named directory within, and remove it when done. -temp_dir = "" - -# The timeout duration before re-requesting a chunk, possibly from a different -# peer (default: 1 minute). -chunk_request_timeout = "10s" - -# The number of concurrent chunk fetchers to run (default: 1). -chunk_fetchers = "4" - -####################################################### -### Block Sync Configuration Options ### -####################################################### -[blocksync] - -# Block Sync version to use: -# -# In v0.37, v1 and v2 of the block sync protocols were deprecated. -# Please use v0 instead. -# -# 1) "v0" - the default block sync implementation -version = "v0" - -####################################################### -### Consensus Configuration Options ### -####################################################### -[consensus] - -wal_file = "data/cs.wal/wal" - -# How long we wait for a proposal block before prevoting nil -timeout_propose = "3s" -# How much timeout_propose increases with each round -timeout_propose_delta = "500ms" -# How long we wait after receiving +2/3 prevotes for “anything” (ie. not a single block or nil) -timeout_prevote = "1s" -# How much the timeout_prevote increases with each round -timeout_prevote_delta = "500ms" -# How long we wait after receiving +2/3 precommits for “anything” (ie. not a single block or nil) -timeout_precommit = "1s" -# How much the timeout_precommit increases with each round -timeout_precommit_delta = "500ms" -# How long we wait after committing a block, before starting on the new -# height (this gives us a chance to receive some more precommits, even -# though we already have +2/3). -timeout_commit = "5s" - -# How many blocks to look back to check existence of the node's consensus votes before joining consensus -# When non-zero, the node will panic upon restart -# if the same consensus key was used to sign {double_sign_check_height} last blocks. -# So, validators should stop the state machine, wait for some blocks, and then restart the state machine to avoid panic. -double_sign_check_height = 0 - -# Make progress as soon as we have all the precommits (as if TimeoutCommit = 0) -skip_timeout_commit = false - -# EmptyBlocks mode and possible interval between empty blocks -create_empty_blocks = true -create_empty_blocks_interval = "0s" - -# Reactor sleep duration parameters -peer_gossip_sleep_duration = "100ms" -peer_query_maj23_sleep_duration = "2s" - -####################################################### -### Storage Configuration Options ### -####################################################### -[storage] - -# Set to true to discard ABCI responses from the state store, which can save a -# considerable amount of disk space. Set to false to ensure ABCI responses are -# persisted. ABCI responses are required for /block_results RPC queries, and to -# reindex events in the command-line tool. -discard_abci_responses = false - -####################################################### -### Transaction Indexer Configuration Options ### -####################################################### -[tx_index] - -# What indexer to use for transactions -# -# The application will set which txs to index. In some cases a node operator will be able -# to decide which txs to index based on configuration set in the application. -# -# Options: -# 1) "null" -# 2) "kv" (default) - the simplest possible indexer, backed by key-value storage (defaults to levelDB; see DBBackend). -# - When "kv" is chosen "tx.height" and "tx.hash" will always be indexed. -# 3) "psql" - the indexer services backed by PostgreSQL. -# When "kv" or "psql" is chosen "tx.height" and "tx.hash" will always be indexed. -indexer = "kv" - -# The PostgreSQL connection configuration, the connection format: -# postgresql://:@:/? -psql-conn = "" - -####################################################### -### Instrumentation Configuration Options ### -####################################################### -[instrumentation] - -# When true, Prometheus metrics are served under /metrics on -# PrometheusListenAddr. -# Check out the documentation for the list of available metrics. -prometheus = false - -# Address to listen for Prometheus collector(s) connections -prometheus_listen_addr = ":26660" - -# Maximum number of simultaneous connections. -# If you want to accept a larger number than the default, make sure -# you increase your OS limits. -# 0 - unlimited. -max_open_connections = 3 - -# Instrumentation namespace -namespace = "cometbft" diff --git a/docker/local-config/genesis.json b/docker/local-config/genesis.json deleted file mode 100644 index 161a493c..00000000 --- a/docker/local-config/genesis.json +++ /dev/null @@ -1,367 +0,0 @@ -{ - "genesis_time": "2023-04-18T22:37:59.196799Z", - "chain_id": "xion-local-testnet-1", - "initial_height": "1", - "consensus_params": { - "block": { - "max_bytes": "22020096", - "max_gas": "-1" - }, - "evidence": { - "max_age_num_blocks": "100000", - "max_age_duration": "172800000000000", - "max_bytes": "1048576" - }, - "validator": { - "pub_key_types": [ - "ed25519" - ] - }, - "version": { - "app": "0" - } - }, - "app_hash": "", - "app_state": { - "07-tendermint": null, - "abstractaccount": { - "params": { - "allow_all_code_ids": true, - "allowed_code_ids": null, - "max_gas_before": 50000000, - "max_gas_after": 50000000 - } - }, - "auth": { - "params": { - "max_memo_characters": "256", - "tx_sig_limit": "7", - "tx_size_cost_per_byte": "10", - "sig_verify_cost_ed25519": "590", - "sig_verify_cost_secp256k1": "1000" - }, - "accounts": [ - { - "@type": "/cosmos.auth.v1beta1.BaseAccount", - "address": "xion1h495zmkgm92664jfnc80n9p64xs5xf56qrg4vc", - "pub_key": null, - "account_number": "0", - "sequence": "0" - }, - { - "@type": "/cosmos.auth.v1beta1.BaseAccount", - "address": "xion1e2fuwe3uhq8zd9nkkk876nawrwdulgv460vzg7", - "pub_key": null, - "account_number": "1", - "sequence": "0" - } - ] - }, - "authz": { - "authorization": [] - }, - "bank": { - "params": { - "send_enabled": [], - "default_send_enabled": true - }, - "balances": [ - { - "address": "xion1h495zmkgm92664jfnc80n9p64xs5xf56qrg4vc", - "coins": [ - { - "denom": "uxion", - "amount": "100000000000000" - } - ] - }, - { - "address": "xion1e2fuwe3uhq8zd9nkkk876nawrwdulgv460vzg7", - "coins": [ - { - "denom": "uxion", - "amount": "10000000000000" - } - ] - } - ], - "supply": [ - { - "denom": "uxion", - "amount": "110000000000000" - } - ], - "denom_metadata": [], - "send_enabled": [] - }, - "capability": { - "index": "1", - "owners": [] - }, - "consensus": null, - "crisis": { - "constant_fee": { - "denom": "uxion", - "amount": "1000" - } - }, - "distribution": { - "params": { - "community_tax": "0.020000000000000000", - "base_proposer_reward": "0.000000000000000000", - "bonus_proposer_reward": "0.000000000000000000", - "withdraw_addr_enabled": true - }, - "fee_pool": { - "community_pool": [] - }, - "delegator_withdraw_infos": [], - "previous_proposer": "", - "outstanding_rewards": [], - "validator_accumulated_commissions": [], - "validator_historical_rewards": [], - "validator_current_rewards": [], - "delegator_starting_infos": [], - "validator_slash_events": [] - }, - "evidence": { - "evidence": [] - }, - "feegrant": { - "allowances": [] - }, - "feeibc": { - "identified_fees": [], - "fee_enabled_channels": [], - "registered_payees": [], - "registered_counterparty_payees": [], - "forward_relayers": [] - }, - "genutil": { - "gen_txs": [ - { - "body": { - "messages": [ - { - "@type": "/cosmos.staking.v1beta1.MsgCreateValidator", - "description": { - "moniker": "validator", - "identity": "", - "website": "", - "security_contact": "", - "details": "" - }, - "commission": { - "rate": "0.100000000000000000", - "max_rate": "0.200000000000000000", - "max_change_rate": "0.010000000000000000" - }, - "min_self_delegation": "1", - "delegator_address": "xion1h495zmkgm92664jfnc80n9p64xs5xf56qrg4vc", - "validator_address": "xionvaloper1h495zmkgm92664jfnc80n9p64xs5xf56tqrnyt", - "pubkey": { - "@type": "/cosmos.crypto.ed25519.PubKey", - "key": "J+w4I9te0WwqXnIIx8OPK8mPOYq9KRWstHMsf3iIS+s=" - }, - "value": { - "denom": "uxion", - "amount": "100000000000000" - } - } - ], - "memo": "9e5df872a848b4715331eb8e8ff11343c9f90806@10.0.168.176:26656", - "timeout_height": "0", - "extension_options": [], - "non_critical_extension_options": [] - }, - "auth_info": { - "signer_infos": [ - { - "public_key": { - "@type": "/cosmos.crypto.secp256k1.PubKey", - "key": "AiBl5S4fP+Ra2LD/EZ2XtWwNu9otOCFMTs8tfq5fwIXm" - }, - "mode_info": { - "single": { - "mode": "SIGN_MODE_DIRECT" - } - }, - "sequence": "0" - } - ], - "fee": { - "amount": [], - "gas_limit": "200000", - "payer": "", - "granter": "" - }, - "tip": null - }, - "signatures": [ - "eFmg4yi8LhCOfIMla33JE7MMZX6ZjXFaCKngM0IovY5Vm9MYFFUnbLbUJoMEPWrD7ub2x5mGIw2wxqqSyexwzg==" - ] - } - ] - }, - "gov": { - "starting_proposal_id": "1", - "deposits": [], - "votes": [], - "proposals": [], - "deposit_params": null, - "voting_params": null, - "tally_params": null, - "params": { - "min_deposit": [ - { - "denom": "uxion", - "amount": "10000000" - } - ], - "max_deposit_period": "172800s", - "voting_period": "172800s", - "quorum": "0.334000000000000000", - "threshold": "0.500000000000000000", - "veto_threshold": "0.334000000000000000", - "min_initial_deposit_ratio": "0.000000000000000000", - "burn_vote_quorum": false, - "burn_proposal_deposit_prevote": false, - "burn_vote_veto": true - } - }, - "group": { - "group_seq": "0", - "groups": [], - "group_members": [], - "group_policy_seq": "0", - "group_policies": [], - "proposal_seq": "0", - "proposals": [], - "votes": [] - }, - "ibc": { - "client_genesis": { - "clients": [], - "clients_consensus": [], - "clients_metadata": [], - "params": { - "allowed_clients": [ - "06-solomachine", - "07-tendermint" - ] - }, - "create_localhost": false, - "next_client_sequence": "0" - }, - "connection_genesis": { - "connections": [], - "client_connection_paths": [], - "next_connection_sequence": "0", - "params": { - "max_expected_time_per_block": "30000000000" - } - }, - "channel_genesis": { - "channels": [], - "acknowledgements": [], - "commitments": [], - "receipts": [], - "send_sequences": [], - "recv_sequences": [], - "ack_sequences": [], - "next_channel_sequence": "0" - } - }, - "interchainaccounts": { - "controller_genesis_state": { - "active_channels": [], - "interchain_accounts": [], - "ports": [], - "params": { - "controller_enabled": true - } - }, - "host_genesis_state": { - "active_channels": [], - "interchain_accounts": [], - "port": "icahost", - "params": { - "host_enabled": true, - "allow_messages": [ - "*" - ] - } - } - }, - "mint": { - "minter": { - "inflation": "0.130000000000000000", - "annual_provisions": "0.000000000000000000" - }, - "params": { - "mint_denom": "uxion", - "inflation_rate_change": "0.130000000000000000", - "inflation_max": "0.200000000000000000", - "inflation_min": "0.070000000000000000", - "goal_bonded": "0.670000000000000000", - "blocks_per_year": "6311520" - } - }, - "nft": { - "classes": [], - "entries": [] - }, - "params": null, - "slashing": { - "params": { - "signed_blocks_window": "100", - "min_signed_per_window": "0.500000000000000000", - "downtime_jail_duration": "600s", - "slash_fraction_double_sign": "0.050000000000000000", - "slash_fraction_downtime": "0.010000000000000000" - }, - "signing_infos": [], - "missed_blocks": [] - }, - "staking": { - "params": { - "unbonding_time": "1814400s", - "max_validators": 100, - "max_entries": 7, - "historical_entries": 10000, - "bond_denom": "uxion", - "min_commission_rate": "0.000000000000000000" - }, - "last_total_power": "0", - "last_validator_powers": [], - "validators": [], - "delegations": [], - "unbonding_delegations": [], - "redelegations": [], - "exported": false - }, - "transfer": { - "port_id": "transfer", - "denom_traces": [], - "params": { - "send_enabled": true, - "receive_enabled": true - } - }, - "upgrade": {}, - "vesting": {}, - "wasm": { - "params": { - "code_upload_access": { - "permission": "Everybody", - "address": "", - "addresses": [] - }, - "instantiate_default_permission": "Everybody" - }, - "codes": [], - "contracts": [], - "sequences": [] - } - } -} diff --git a/docker/local-config/gentx/gentx-9e5df872a848b4715331eb8e8ff11343c9f90806.json b/docker/local-config/gentx/gentx-9e5df872a848b4715331eb8e8ff11343c9f90806.json deleted file mode 100644 index 8e1694ff..00000000 --- a/docker/local-config/gentx/gentx-9e5df872a848b4715331eb8e8ff11343c9f90806.json +++ /dev/null @@ -1 +0,0 @@ -{"body":{"messages":[{"@type":"/cosmos.staking.v1beta1.MsgCreateValidator","description":{"moniker":"validator","identity":"","website":"","security_contact":"","details":""},"commission":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"min_self_delegation":"1","delegator_address":"xion1h495zmkgm92664jfnc80n9p64xs5xf56qrg4vc","validator_address":"xionvaloper1h495zmkgm92664jfnc80n9p64xs5xf56tqrnyt","pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"J+w4I9te0WwqXnIIx8OPK8mPOYq9KRWstHMsf3iIS+s="},"value":{"denom":"uxion","amount":"100000000000000"}}],"memo":"9e5df872a848b4715331eb8e8ff11343c9f90806@10.0.168.176:26656","timeout_height":"0","extension_options":[],"non_critical_extension_options":[]},"auth_info":{"signer_infos":[{"public_key":{"@type":"/cosmos.crypto.secp256k1.PubKey","key":"AiBl5S4fP+Ra2LD/EZ2XtWwNu9otOCFMTs8tfq5fwIXm"},"mode_info":{"single":{"mode":"SIGN_MODE_DIRECT"}},"sequence":"0"}],"fee":{"amount":[],"gas_limit":"200000","payer":"","granter":""},"tip":null},"signatures":["eFmg4yi8LhCOfIMla33JE7MMZX6ZjXFaCKngM0IovY5Vm9MYFFUnbLbUJoMEPWrD7ub2x5mGIw2wxqqSyexwzg=="]} diff --git a/docker/local-config/node_key.json b/docker/local-config/node_key.json deleted file mode 100644 index 93196814..00000000 --- a/docker/local-config/node_key.json +++ /dev/null @@ -1 +0,0 @@ -{"priv_key":{"type":"tendermint/PrivKeyEd25519","value":"LYQqiPQ5xy1dRF0Oj4m75HzgGyM0/AdSKfkF/8fmRNDs0aSRTUOASSAlKx7brTiBPrWF9LMfTFikXlWB2gsaNg=="}} \ No newline at end of file diff --git a/docker/local-config/priv_validator_key.json b/docker/local-config/priv_validator_key.json deleted file mode 100644 index d200772f..00000000 --- a/docker/local-config/priv_validator_key.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "address": "B12C7535FED46099221557F3CAD92FDBA61DAAEB", - "pub_key": { - "type": "tendermint/PubKeyEd25519", - "value": "J+w4I9te0WwqXnIIx8OPK8mPOYq9KRWstHMsf3iIS+s=" - }, - "priv_key": { - "type": "tendermint/PrivKeyEd25519", - "value": "cBIIzH+2gEhxKZRZaQgHxSdt/vHUU2l/gRP4gqQsPdMn7Dgj217RbCpecgjHw48ryY85ir0pFay0cyx/eIhL6w==" - } -} \ No newline at end of file From e419e6b1bb7132daa3f23ed8df7d841b7bd5ea1e Mon Sep 17 00:00:00 2001 From: justin <328965+justinbarry@users.noreply.github.com> Date: Thu, 26 Oct 2023 14:07:36 -0700 Subject: [PATCH 207/501] Fix GH docker push action --- .github/workflows/docker-hub.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.github/workflows/docker-hub.yml b/.github/workflows/docker-hub.yml index 765fb9eb..4c792ada 100644 --- a/.github/workflows/docker-hub.yml +++ b/.github/workflows/docker-hub.yml @@ -54,9 +54,7 @@ jobs: with: context: . push: true - tags: - - ${{ steps.meta.outputs.tags }}-local-dev - - local-dev + tags: dev-${{ steps.meta.outputs.tags }},dev cache-from: type=gha cache-to: type=gha,mode=max - target: xion-release + target: xion-dev From be74c0f0b28c2aa5618fa74cc67f8232354a3f15 Mon Sep 17 00:00:00 2001 From: justin <328965+justinbarry@users.noreply.github.com> Date: Thu, 26 Oct 2023 14:33:21 -0700 Subject: [PATCH 208/501] Postfix 'dev' to docker image label --- .github/workflows/docker-hub.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker-hub.yml b/.github/workflows/docker-hub.yml index 4c792ada..f9e30e38 100644 --- a/.github/workflows/docker-hub.yml +++ b/.github/workflows/docker-hub.yml @@ -54,7 +54,7 @@ jobs: with: context: . push: true - tags: dev-${{ steps.meta.outputs.tags }},dev + tags: ${{ steps.meta.outputs.tags }}-dev,dev cache-from: type=gha cache-to: type=gha,mode=max target: xion-dev From d4a605c22665c18678413e8d046c7264016ae89e Mon Sep 17 00:00:00 2001 From: justin <328965+justinbarry@users.noreply.github.com> Date: Thu, 26 Oct 2023 14:48:32 -0700 Subject: [PATCH 209/501] Use two steps to push separate docker images tags --- .github/workflows/docker-hub.yml | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/.github/workflows/docker-hub.yml b/.github/workflows/docker-hub.yml index f9e30e38..dc9ad34e 100644 --- a/.github/workflows/docker-hub.yml +++ b/.github/workflows/docker-hub.yml @@ -54,7 +54,17 @@ jobs: with: context: . push: true - tags: ${{ steps.meta.outputs.tags }}-dev,dev + tags: dev + cache-from: type=gha + cache-to: type=gha,mode=max + target: xion-dev + + - name: Build and push local dev docker image + uses: docker/build-push-action@v5 + with: + context: . + push: true + tags: ${{ steps.meta.outputs.tags }}-dev cache-from: type=gha cache-to: type=gha,mode=max target: xion-dev From 6962b88f810988c852135e62f4cae0a378872fd9 Mon Sep 17 00:00:00 2001 From: justin <328965+justinbarry@users.noreply.github.com> Date: Thu, 26 Oct 2023 15:06:48 -0700 Subject: [PATCH 210/501] Break docker build into two jobs --- .github/workflows/docker-hub.yml | 39 ++++++++++++++++++++++++-------- 1 file changed, 30 insertions(+), 9 deletions(-) diff --git a/.github/workflows/docker-hub.yml b/.github/workflows/docker-hub.yml index dc9ad34e..354cff2b 100644 --- a/.github/workflows/docker-hub.yml +++ b/.github/workflows/docker-hub.yml @@ -49,22 +49,43 @@ jobs: cache-to: type=gha,mode=max target: xion-release - - name: Build and push local dev docker image - uses: docker/build-push-action@v5 + build-dev: + name: Build Dev Image + runs-on: ubuntu-latest + environment: CI + + steps: + - name: Check out code + uses: actions/checkout@v4 with: - context: . - push: true - tags: dev - cache-from: type=gha - cache-to: type=gha,mode=max - target: xion-dev + fetch-depth: 0 + fetch-tags: true + + - name: Login to Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKER_HUB_USERNAME }} + password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} + + - name: Set up docker buildx + uses: docker/setup-buildx-action@v3 + + - name: Extract metadata for docker + id: meta + uses: docker/metadata-action@v5 + with: + images: burntnetwork/xion + tags: | + type=semver,priority=1000,pattern=dev-{{version}} + type=sha,priority=700,suffix=-dev + type=raw,priority=500,value=dev - name: Build and push local dev docker image uses: docker/build-push-action@v5 with: context: . push: true - tags: ${{ steps.meta.outputs.tags }}-dev + tags: ${{ steps.meta.outputs.tags }} cache-from: type=gha cache-to: type=gha,mode=max target: xion-dev From 4b99e4d51fadfada6b000200086ca75597e1ac50 Mon Sep 17 00:00:00 2001 From: Francis Roch Date: Thu, 26 Oct 2023 19:31:42 -0400 Subject: [PATCH 211/501] Add `cosmwasm_1_3` to capabilities --- app/app.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/app.go b/app/app.go index d3e1ce59..1b58c619 100644 --- a/app/app.go +++ b/app/app.go @@ -689,7 +689,7 @@ func NewWasmApp( // The last arguments can contain custom message handlers, and custom query handlers, // if we want to allow any custom callbacks // See https://github.com/CosmWasm/cosmwasm/blob/main/docs/CAPABILITIES-BUILT-IN.md - availableCapabilities := "iterator,staking,stargate,cosmwasm_1_1,cosmwasm_1_2" + availableCapabilities := "iterator,staking,stargate,cosmwasm_1_1,cosmwasm_1_2,cosmwasm_1_3" app.WasmKeeper = wasm.NewKeeper( appCodec, keys[wasm.StoreKey], From 1db26d4f508df24fa153247cc9035e2d204dc966 Mon Sep 17 00:00:00 2001 From: Francis Roch Date: Tue, 31 Oct 2023 17:06:00 -0400 Subject: [PATCH 212/501] Checkpoint - broken --- go.mod | 25 ++++++++++++++--------- go.sum | 63 ++++++++++++++++++++++++++++++++-------------------------- 2 files changed, 51 insertions(+), 37 deletions(-) diff --git a/go.mod b/go.mod index 00d9c75b..642c3156 100644 --- a/go.mod +++ b/go.mod @@ -3,12 +3,12 @@ module github.com/burnt-labs/xion go 1.19 require ( - github.com/CosmWasm/wasmvm v1.3.0 // indirect + github.com/CosmWasm/wasmvm v1.4.1 // indirect github.com/cosmos/cosmos-proto v1.0.0-beta.3 - github.com/cosmos/cosmos-sdk v0.47.4 + github.com/cosmos/cosmos-sdk v0.47.5 github.com/cosmos/gogogateway v1.2.0 // indirect github.com/cosmos/gogoproto v1.4.10 - github.com/cosmos/iavl v0.20.0 // indirect + github.com/cosmos/iavl v0.20.1 // indirect github.com/cosmos/ibc-go/v7 v7.3.0 github.com/cosmos/ics23/go v0.10.0 // indirect github.com/docker/distribution v2.8.2+incompatible // indirect @@ -34,11 +34,11 @@ require ( require ( cosmossdk.io/api v0.3.1 cosmossdk.io/core v0.6.1 - cosmossdk.io/depinject v1.0.0-alpha.3 + cosmossdk.io/depinject v1.0.0-alpha.4 cosmossdk.io/errors v1.0.0 - cosmossdk.io/math v1.0.1 + cosmossdk.io/math v1.1.2 cosmossdk.io/tools/rosetta v0.2.1 - github.com/CosmWasm/wasmd v0.41.0 + github.com/CosmWasm/wasmd v0.43.0 github.com/armon/go-metrics v0.4.1 github.com/cometbft/cometbft v0.37.2 github.com/cometbft/cometbft-db v0.8.0 @@ -59,7 +59,7 @@ require ( cloud.google.com/go/compute/metadata v0.2.3 // indirect cloud.google.com/go/iam v1.1.0 // indirect cloud.google.com/go/storage v1.30.1 // indirect - cosmossdk.io/log v1.1.1-0.20230704160919-88f2c830b0ca // indirect + cosmossdk.io/log v1.2.1 // indirect filippo.io/edwards25519 v1.0.0 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect github.com/99designs/keyring v1.2.2 // indirect @@ -74,6 +74,9 @@ require ( github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/chzyer/readline v1.5.1 // indirect github.com/cockroachdb/apd/v2 v2.0.2 // indirect + github.com/cockroachdb/errors v1.10.0 // indirect + github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect + github.com/cockroachdb/redact v1.1.5 // indirect github.com/coinbase/rosetta-sdk-go/types v1.0.0 // indirect github.com/confio/ics23/go v0.9.0 // indirect github.com/cosmos/btcutil v1.0.5 // indirect @@ -91,6 +94,7 @@ require ( github.com/dustin/go-humanize v1.0.1 // indirect github.com/felixge/httpsnoop v1.0.2 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect + github.com/getsentry/sentry-go v0.23.0 // indirect github.com/go-kit/kit v0.12.0 // indirect github.com/go-kit/log v0.2.1 // indirect github.com/go-logfmt/logfmt v0.6.0 // indirect @@ -128,6 +132,8 @@ require ( github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect github.com/klauspost/compress v1.16.3 // indirect + github.com/kr/pretty v0.3.1 // indirect + github.com/kr/text v0.2.0 // indirect github.com/lib/pq v1.10.9 // indirect github.com/libp2p/go-buffer-pool v0.1.0 // indirect github.com/linxGnu/grocksdb v1.7.16 // indirect @@ -150,8 +156,9 @@ require ( github.com/prometheus/common v0.42.0 // indirect github.com/prometheus/procfs v0.10.1 // indirect github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect + github.com/rogpeppe/go-internal v1.11.0 // indirect github.com/rs/cors v1.8.3 // indirect - github.com/rs/zerolog v1.29.1 // indirect + github.com/rs/zerolog v1.30.0 // indirect github.com/sasha-s/go-deadlock v0.3.1 // indirect github.com/spf13/afero v1.9.5 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect @@ -164,7 +171,7 @@ require ( go.etcd.io/bbolt v1.3.7 // indirect go.opencensus.io v0.24.0 // indirect golang.org/x/crypto v0.12.0 // indirect - golang.org/x/exp v0.0.0-20230515195305-f3d0a9c9a5cc // indirect + golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb // indirect golang.org/x/net v0.14.0 // indirect golang.org/x/oauth2 v0.8.0 // indirect golang.org/x/sys v0.11.0 // indirect diff --git a/go.sum b/go.sum index 83d9493d..0aa02e0e 100644 --- a/go.sum +++ b/go.sum @@ -191,14 +191,14 @@ cosmossdk.io/api v0.3.1 h1:NNiOclKRR0AOlO4KIqeaG6PS6kswOMhHD0ir0SscNXE= cosmossdk.io/api v0.3.1/go.mod h1:DfHfMkiNA2Uhy8fj0JJlOCYOBp4eWUUJ1te5zBGNyIw= cosmossdk.io/core v0.6.1 h1:OBy7TI2W+/gyn2z40vVvruK3di+cAluinA6cybFbE7s= cosmossdk.io/core v0.6.1/go.mod h1:g3MMBCBXtxbDWBURDVnJE7XML4BG5qENhs0gzkcpuFA= -cosmossdk.io/depinject v1.0.0-alpha.3 h1:6evFIgj//Y3w09bqOUOzEpFj5tsxBqdc5CfkO7z+zfw= -cosmossdk.io/depinject v1.0.0-alpha.3/go.mod h1:eRbcdQ7MRpIPEM5YUJh8k97nxHpYbc3sMUnEtt8HPWU= +cosmossdk.io/depinject v1.0.0-alpha.4 h1:PLNp8ZYAMPTUKyG9IK2hsbciDWqna2z1Wsl98okJopc= +cosmossdk.io/depinject v1.0.0-alpha.4/go.mod h1:HeDk7IkR5ckZ3lMGs/o91AVUc7E596vMaOmslGFM3yU= cosmossdk.io/errors v1.0.0 h1:nxF07lmlBbB8NKQhtJ+sJm6ef5uV1XkvPXG2bUntb04= cosmossdk.io/errors v1.0.0/go.mod h1:+hJZLuhdDE0pYN8HkOrVNwrIOYvUGnn6+4fjnJs/oV0= -cosmossdk.io/log v1.1.1-0.20230704160919-88f2c830b0ca h1:msenprh2BLLRwNT7zN56TbBHOGk/7ARQckXHxXyvjoQ= -cosmossdk.io/log v1.1.1-0.20230704160919-88f2c830b0ca/go.mod h1:PkIAKXZvaxrTRc++z53XMRvFk8AcGGWYHcMIPzVYX9c= -cosmossdk.io/math v1.0.1 h1:Qx3ifyOPaMLNH/89WeZFH268yCvU4xEcnPLu3sJqPPg= -cosmossdk.io/math v1.0.1/go.mod h1:Ygz4wBHrgc7g0N+8+MrnTfS9LLn9aaTGa9hKopuym5k= +cosmossdk.io/log v1.2.1 h1:Xc1GgTCicniwmMiKwDxUjO4eLhPxoVdI9vtMW8Ti/uk= +cosmossdk.io/log v1.2.1/go.mod h1:GNSCc/6+DhFIj1aLn/j7Id7PaO8DzNylUZoOYBL9+I4= +cosmossdk.io/math v1.1.2 h1:ORZetZCTyWkI5GlZ6CZS28fMHi83ZYf+A2vVnHNzZBM= +cosmossdk.io/math v1.1.2/go.mod h1:l2Gnda87F0su8a/7FEKJfFdJrM0JZRXQaohlgJeyQh0= cosmossdk.io/tools/rosetta v0.2.1 h1:ddOMatOH+pbxWbrGJKRAawdBkPYLfKXutK9IETnjYxw= cosmossdk.io/tools/rosetta v0.2.1/go.mod h1:Pqdc1FdvkNV3LcNIkYWt2RQY6IP1ge6YWZk8MhhO9Hw= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= @@ -211,10 +211,10 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03 github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= -github.com/CosmWasm/wasmd v0.41.0 h1:fmwxSbwb50zZDcBaayYFRLIaSFca+EFld1WOaQi49jg= -github.com/CosmWasm/wasmd v0.41.0/go.mod h1:0Sds1q2IsPaTN1gHa3BNOYcUFgtGvxH7CXEXPgoihns= -github.com/CosmWasm/wasmvm v1.3.0 h1:x12X4bKlUPS7TT9QQP45+fJo2sp30GEbiSSgb9jsec8= -github.com/CosmWasm/wasmvm v1.3.0/go.mod h1:vW/E3h8j9xBQs9bCoijDuawKo9kCtxOaS8N8J7KFtkc= +github.com/CosmWasm/wasmd v0.43.0 h1:4xQAiNf6Ej+TuYe4PXwrtVJ9C+xyFrbsdqHH/kU9Vxk= +github.com/CosmWasm/wasmd v0.43.0/go.mod h1:gpri8YvkRErBz+qDme5jOThGZmSlHfyN532bWibXOl4= +github.com/CosmWasm/wasmvm v1.4.1 h1:YgodVlBrXa2HJZzOXjWDH0EIRwQzK3zuA73dDPRRLS4= +github.com/CosmWasm/wasmvm v1.4.1/go.mod h1:fXB+m2gyh4v9839zlIXdMZGeLAxqUdYdFQqYsTha2hc= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= @@ -227,7 +227,6 @@ github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrd github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= github.com/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= -github.com/alecthomas/participle/v2 v2.0.0-alpha7 h1:cK4vjj0VSgb3lN1nuKA5F7dw+1s1pWBe5bx7nNCnN+c= 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= @@ -302,8 +301,13 @@ github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cockroachdb/apd/v2 v2.0.2 h1:weh8u7Cneje73dDh+2tEVLUvyBc89iwepWCD8b8034E= github.com/cockroachdb/apd/v2 v2.0.2/go.mod h1:DDxRlzC2lo3/vSlmSoS7JkqbbrARPuFOGr0B9pvN3Gw= -github.com/cockroachdb/apd/v3 v3.1.0 h1:MK3Ow7LH0W8zkd5GMKA1PvS9qG3bWFI95WaVNfyZJ/w= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= +github.com/cockroachdb/errors v1.10.0 h1:lfxS8zZz1+OjtV4MtNWgboi/W5tyLEB6VQZBXN+0VUU= +github.com/cockroachdb/errors v1.10.0/go.mod h1:lknhIsEVQ9Ss/qKDBQS/UqFSvPQjOwNq2qyKAxtHRqE= +github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= +github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= +github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwPJ30= +github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/coinbase/rosetta-sdk-go/types v1.0.0 h1:jpVIwLcPoOeCR6o1tU+Xv7r5bMONNbHU7MuEHboiFuA= github.com/coinbase/rosetta-sdk-go/types v1.0.0/go.mod h1:eq7W2TMRH22GTW0N0beDnN931DW0/WOI1R2sdHNHG4c= @@ -324,8 +328,8 @@ 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-proto v1.0.0-beta.3 h1:VitvZ1lPORTVxkmF2fAp3IiA61xVwArQYKXTdEcpW6o= github.com/cosmos/cosmos-proto v1.0.0-beta.3/go.mod h1:t8IASdLaAq+bbHbjq4p960BvcTqtwuAxid3b/2rOD6I= -github.com/cosmos/cosmos-sdk v0.47.4 h1:FVUpEprm58nMmBX4xkRdMDaIG5Nr4yy92HZAfGAw9bg= -github.com/cosmos/cosmos-sdk v0.47.4/go.mod h1:R5n+uM7vguVPFap4pgkdvQCT1nVo/OtPwrlAU40rvok= +github.com/cosmos/cosmos-sdk v0.47.5 h1:n1+WjP/VM/gAEOx3TqU2/Ny734rj/MX1kpUnn7zVJP8= +github.com/cosmos/cosmos-sdk v0.47.5/go.mod h1:EHwCeN9IXonsjKcjpS12MqeStdZvIdxt3VYXhus3G3c= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= @@ -334,8 +338,8 @@ github.com/cosmos/gogogateway v1.2.0/go.mod h1:iQpLkGWxYcnCdz5iAdLcRBSw3h7NXeOkZ github.com/cosmos/gogoproto v1.4.2/go.mod h1:cLxOsn1ljAHSV527CHOtaIP91kK6cCrZETRBrkzItWU= github.com/cosmos/gogoproto v1.4.10 h1:QH/yT8X+c0F4ZDacDv3z+xE3WU1P1Z3wQoLMBRJoKuI= github.com/cosmos/gogoproto v1.4.10/go.mod h1:3aAZzeRWpAwr+SS/LLkICX2/kDFyaYVzckBDzygIxek= -github.com/cosmos/iavl v0.20.0 h1:fTVznVlepH0KK8NyKq8w+U7c2L6jofa27aFX6YGlm38= -github.com/cosmos/iavl v0.20.0/go.mod h1:WO7FyvaZJoH65+HFOsDir7xU9FWk2w9cHXNW1XHcl7A= +github.com/cosmos/iavl v0.20.1 h1:rM1kqeG3/HBT85vsZdoSNsehciqUQPWrR4BYmqE2+zg= +github.com/cosmos/iavl v0.20.1/go.mod h1:WO7FyvaZJoH65+HFOsDir7xU9FWk2w9cHXNW1XHcl7A= github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.0.0-20230803181732-7c8f814d3b79 h1:n+PjYB3JnbKN+sGmX6khST4xMP+D0UdrMNj7O91fuOg= github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.0.0-20230803181732-7c8f814d3b79/go.mod h1:fctjEnz9xaBFOlmYYPdKL8Hs1Y3GUKilSwsJdqBb5QU= github.com/cosmos/ibc-apps/modules/ibc-hooks/v7 v7.0.0-20230802211043-d72e83c94350 h1:NyXIgMKsCTnmD8fcuuuX+45Py9xh/mfpPJ8yr3MI3zg= @@ -357,8 +361,6 @@ github.com/creachadair/taskgroup v0.4.2 h1:jsBLdAJE42asreGss2xZGZ8fJra7WtwnHWeJF github.com/creachadair/taskgroup v0.4.2/go.mod h1:qiXUOSrbwAY3u0JPGTzObbE3yf9hcXHDKBZ2ZjpCbgM= 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/common/gherkin/go/v22 v22.0.0 h1:4K8NqptbvdOrjL9DEea6HFjSpbdT9+Q5kgLpmmsHYl0= -github.com/cucumber/common/messages/go/v17 v17.1.1 h1:RNqopvIFyLWnKv0LfATh34SWBhXeoFTJnSrgm9cT/Ts= github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -414,11 +416,14 @@ github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMo github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= +github.com/getsentry/sentry-go v0.23.0 h1:dn+QRCeJv4pPt9OjVXiMcGIBIefaTJPw/h0bZWO05nE= +github.com/getsentry/sentry-go v0.23.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= 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.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8= github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk= +github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= 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= @@ -439,8 +444,8 @@ github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho= github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= -github.com/go-playground/validator/v10 v10.10.0 h1:I7mrTYv78z8k8VXa/qJlOlEXn/nBh+BF8dHX5nt/dr0= github.com/go-playground/validator/v10 v10.10.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos= +github.com/go-playground/validator/v10 v10.11.1 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJWXmqUsHwfTRRkQ= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee h1:s+21KNqlpePfkah2I+gwHF8xmJWRjooY+5248k6m4A0= @@ -449,12 +454,11 @@ github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8= github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= github.com/gobwas/ws v1.0.2 h1:CoAavW/wd/kulfZmSIBt6p24n4j7tHgNVCjsfHVNUbo= github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= -github.com/goccy/go-json v0.9.7 h1:IcB+Aqpx/iMHu5Yooh7jEzJk1JZ7Pjtmys2ukPr7EeM= github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/goccy/go-json v0.9.11 h1:/pAaQDLHEoCq/5FFmSKBswWmK6H0e8g4159Kc/X/nqk= 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/uuid v4.3.0+incompatible h1:CaSVZxm5B+7o45rtab4jC2G37WGYX1zQfuU2i6DSvnc= github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/gogo/googleapis v1.4.1-0.20201022092350-68b0159b7869/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= github.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0= @@ -695,6 +699,7 @@ github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORN 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/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= @@ -816,6 +821,7 @@ github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08 h1:hDSdbBuw3Lefr6 github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= 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= @@ -863,7 +869,6 @@ github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Ung github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= 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/regen-network/gocuke v0.6.2 h1:pHviZ0kKAq2U2hN2q3smKNxct6hS0mGByFMHGnWA97M= github.com/regen-network/protobuf v1.3.3-alpha.regen.1 h1:OHEc+q5iIAXpqiqFKeLpu5NwTIkVXUs48vFMwzqpqY4= github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= @@ -871,13 +876,15 @@ github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6L 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 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= +github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.8.3 h1:O+qNyWn7Z+F9M0ILBHgMVPuB1xTOucVd5gtaYyXBpRo= github.com/rs/cors v1.8.3/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= -github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= -github.com/rs/zerolog v1.29.1 h1:cO+d60CHkknCbvzEWxP0S9K6KqyTjrCNUy1LdQLCGPc= -github.com/rs/zerolog v1.29.1/go.mod h1:Le6ESbR7hc+DP6Lt1THiV8CQSdkkNrd3R0XbEgp3ZBU= +github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= +github.com/rs/zerolog v1.30.0 h1:SymVODrcRsaRaSInD9yQtKbtWqwsfoPcRff/oRXLj4c= +github.com/rs/zerolog v1.30.0/go.mod h1:/tk+P47gFdPXq4QYjvCmT5/Gsug2nagsFWBWhAiSi1w= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= @@ -1026,8 +1033,8 @@ golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u0 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-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= -golang.org/x/exp v0.0.0-20230515195305-f3d0a9c9a5cc h1:mCRnTeVUjcrhlRmO0VK8a6k6Rrf6TF9htwo2pJVSjIU= -golang.org/x/exp v0.0.0-20230515195305-f3d0a9c9a5cc/go.mod h1:V1LtkGg67GoY2N1AnLN78QLrzxkLyJw7RJb1gzOOz9w= +golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb h1:xIApU0ow1zwMa2uL1VDNeQlNVFTWMQxZUZCMDy0Q4Us= +golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc= 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= From e42395dd0eaac3b5904602fb7719263037e4e983 Mon Sep 17 00:00:00 2001 From: Ash Date: Tue, 31 Oct 2023 14:39:48 -0700 Subject: [PATCH 213/501] specific wasm references --- app/app.go | 54 +++++++++++----------------------------- app/sim_test.go | 10 +++----- app/test_helpers.go | 9 +++---- benchmarks/app_test.go | 2 +- cmd/xiond/root.go | 2 -- integration_tests/go.mod | 14 +++++------ integration_tests/go.sum | 8 ++++++ 7 files changed, 39 insertions(+), 60 deletions(-) diff --git a/app/app.go b/app/app.go index 1b58c619..595a9a12 100644 --- a/app/app.go +++ b/app/app.go @@ -1,15 +1,13 @@ package app import ( + autocliv1 "cosmossdk.io/api/cosmos/autocli/v1" + reflectionv1 "cosmossdk.io/api/cosmos/reflection/v1" "encoding/json" "fmt" "io" "os" "path/filepath" - "strings" - - autocliv1 "cosmossdk.io/api/cosmos/autocli/v1" - reflectionv1 "cosmossdk.io/api/cosmos/reflection/v1" "github.com/burnt-labs/xion/x/globalfee" dbm "github.com/cometbft/cometbft-db" @@ -165,23 +163,6 @@ var ( Upgrades = []upgrades.Upgrade{v3.Upgrade} ) -// GetEnabledProposals parses the ProposalsEnabled / EnableSpecificProposals values to -// produce a list of enabled proposals to pass into xiond app. -func GetEnabledProposals() []wasm.ProposalType { - if EnableSpecificProposals == "" { - if ProposalsEnabled == "true" { - return wasm.EnableAllProposals - } - return wasm.DisableAllProposals - } - chunks := strings.Split(EnableSpecificProposals, ",") - proposals, err := wasm.ConvertToProposals(chunks) - if err != nil { - panic(err) - } - return proposals -} - // These constants are derived from the above variables. // These are the ones we will want to use in the code, based on // any overrides above @@ -265,7 +246,7 @@ var ( ibctransfertypes.ModuleName: {authtypes.Minter, authtypes.Burner}, ibcfeetypes.ModuleName: nil, icatypes.ModuleName: nil, - wasm.ModuleName: {authtypes.Burner}, + wasmtypes.ModuleName: {authtypes.Burner}, globalfee.ModuleName: nil, aatypes.ModuleName: nil, xiontypes.ModuleName: nil, @@ -317,7 +298,7 @@ type WasmApp struct { ICAControllerKeeper icacontrollerkeeper.Keeper ICAHostKeeper icahostkeeper.Keeper TransferKeeper ibctransferkeeper.Keeper - WasmKeeper wasm.Keeper + WasmKeeper wasmkeeper.Keeper AbstractAccountKeeper aakeeper.Keeper IBCHooksKeeper *ibchookskeeper.Keeper ContractKeeper *wasmkeeper.PermissionedKeeper @@ -354,9 +335,8 @@ func NewWasmApp( db dbm.DB, traceStore io.Writer, loadLatest bool, - enabledProposals []wasm.ProposalType, appOpts servertypes.AppOptions, - wasmOpts []wasm.Option, + wasmOpts []wasmkeeper.Option, baseAppOptions ...func(*baseapp.BaseApp), ) *WasmApp { encodingConfig := MakeEncodingConfig() @@ -379,7 +359,7 @@ func NewWasmApp( authzkeeper.StoreKey, nftkeeper.StoreKey, group.StoreKey, // non sdk store keys ibcexported.StoreKey, ibctransfertypes.StoreKey, ibcfeetypes.StoreKey, - wasm.StoreKey, icahosttypes.StoreKey, aatypes.StoreKey, + wasmtypes.StoreKey, icahosttypes.StoreKey, aatypes.StoreKey, icacontrollertypes.StoreKey, globalfee.StoreKey, xiontypes.StoreKey, ibchookstypes.StoreKey, packetforwardtypes.StoreKey, feeabstypes.StoreKey, ) @@ -426,7 +406,7 @@ func NewWasmApp( scopedICAHostKeeper := app.CapabilityKeeper.ScopeToModule(icahosttypes.SubModuleName) scopedICAControllerKeeper := app.CapabilityKeeper.ScopeToModule(icacontrollertypes.SubModuleName) scopedTransferKeeper := app.CapabilityKeeper.ScopeToModule(ibctransfertypes.ModuleName) - scopedWasmKeeper := app.CapabilityKeeper.ScopeToModule(wasm.ModuleName) + scopedWasmKeeper := app.CapabilityKeeper.ScopeToModule(wasmtypes.ModuleName) scopedFeeabsKeeper := app.CapabilityKeeper.ScopeToModule(feeabstypes.ModuleName) app.CapabilityKeeper.Seal() @@ -690,9 +670,9 @@ func NewWasmApp( // if we want to allow any custom callbacks // See https://github.com/CosmWasm/cosmwasm/blob/main/docs/CAPABILITIES-BUILT-IN.md availableCapabilities := "iterator,staking,stargate,cosmwasm_1_1,cosmwasm_1_2,cosmwasm_1_3" - app.WasmKeeper = wasm.NewKeeper( + app.WasmKeeper = wasmkeeper.NewKeeper( appCodec, - keys[wasm.StoreKey], + keys[wasmtypes.StoreKey], app.AccountKeeper, app.BankKeeper, app.StakingKeeper, @@ -719,10 +699,6 @@ func NewWasmApp( authtypes.NewModuleAddress(govtypes.ModuleName).String(), ) - // The gov proposal types can be individually enabled - if len(enabledProposals) != 0 { - govRouter.AddRoute(wasm.RouterKey, wasm.NewWasmProposalHandler(app.WasmKeeper, enabledProposals)) - } // Set legacy router for backwards compatibility with gov v1beta1 app.GovKeeper.SetLegacyRouter(govRouter) @@ -763,7 +739,7 @@ func NewWasmApp( // Create static IBC router, add app routes, then set and seal it ibcRouter := porttypes.NewRouter(). AddRoute(ibctransfertypes.ModuleName, transferStack). - AddRoute(wasm.ModuleName, wasmStack). + AddRoute(wasmtypes.ModuleName, wasmStack). AddRoute(icacontrollertypes.SubModuleName, icaControllerStack). AddRoute(icahosttypes.SubModuleName, icaHostStack). AddRoute(feeabstypes.ModuleName, feeabsIBCModule) @@ -836,7 +812,7 @@ func NewWasmApp( feeabstypes.ModuleName, icatypes.ModuleName, ibcfeetypes.ModuleName, - wasm.ModuleName, + wasmtypes.ModuleName, aatypes.ModuleName, ibchookstypes.ModuleName, packetforwardtypes.ModuleName, @@ -858,7 +834,7 @@ func NewWasmApp( feeabstypes.ModuleName, icatypes.ModuleName, ibcfeetypes.ModuleName, - wasm.ModuleName, + wasmtypes.ModuleName, aatypes.ModuleName, ibchookstypes.ModuleName, packetforwardtypes.ModuleName, @@ -885,7 +861,7 @@ func NewWasmApp( icatypes.ModuleName, ibcfeetypes.ModuleName, // wasm after ibc transfer - wasm.ModuleName, + wasmtypes.ModuleName, aatypes.ModuleName, ibchookstypes.ModuleName, packetforwardtypes.ModuleName, @@ -935,7 +911,7 @@ func NewWasmApp( app.SetInitChainer(app.InitChainer) app.SetBeginBlocker(app.BeginBlocker) app.SetEndBlocker(app.EndBlocker) - app.setAnteHandler(encodingConfig.TxConfig, wasmConfig, keys[wasm.StoreKey]) + app.setAnteHandler(encodingConfig.TxConfig, wasmConfig, keys[wasmtypes.StoreKey]) // must be before Loading version // requires the snapshot store to be created and registered as a BaseAppOption @@ -1252,7 +1228,7 @@ func initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino paramsKeeper.Subspace(icacontrollertypes.SubModuleName) paramsKeeper.Subspace(globalfee.ModuleName) paramsKeeper.Subspace(xiontypes.ModuleName) - paramsKeeper.Subspace(wasm.ModuleName) + paramsKeeper.Subspace(wasmtypes.ModuleName) paramsKeeper.Subspace(aatypes.ModuleName) paramsKeeper.Subspace(packetforwardtypes.ModuleName) paramsKeeper.Subspace(feeabstypes.ModuleName) diff --git a/app/sim_test.go b/app/sim_test.go index ce3e9a09..a5a304d1 100644 --- a/app/sim_test.go +++ b/app/sim_test.go @@ -35,8 +35,6 @@ import ( slashingtypes "github.com/cosmos/cosmos-sdk/x/slashing/types" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" "github.com/stretchr/testify/require" - - "github.com/CosmWasm/wasmd/x/wasm" ) // SimAppChainID hardcoded chainID for simulation @@ -130,7 +128,7 @@ func TestAppImportExport(t *testing.T) { require.NoError(t, os.RemoveAll(newDir)) }() - newApp := NewWasmApp(log.NewNopLogger(), newDB, nil, true, wasm.EnableAllProposals, appOptions, emptyWasmOpts, fauxMerkleModeOpt, baseapp.SetChainID(SimAppChainID)) + newApp := NewWasmApp(log.NewNopLogger(), newDB, nil, true, appOptions, emptyWasmOpts, fauxMerkleModeOpt, baseapp.SetChainID(SimAppChainID)) require.Equal(t, "WasmApp", newApp.Name()) var genesisState GenesisState @@ -232,7 +230,7 @@ func TestAppSimulationAfterImport(t *testing.T) { require.NoError(t, os.RemoveAll(newDir)) }() - newApp := NewWasmApp(log.NewNopLogger(), newDB, nil, true, wasm.EnableAllProposals, appOptions, emptyWasmOpts, fauxMerkleModeOpt, baseapp.SetChainID(SimAppChainID)) + newApp := NewWasmApp(log.NewNopLogger(), newDB, nil, true, appOptions, emptyWasmOpts, fauxMerkleModeOpt, baseapp.SetChainID(SimAppChainID)) require.Equal(t, "WasmApp", newApp.Name()) newApp.InitChain(abci.RequestInitChain{ @@ -273,7 +271,7 @@ func setupSimulationApp(t *testing.T, msg string) (simtypes.Config, dbm.DB, simt appOptions[flags.FlagHome] = dir // ensure a unique folder appOptions[server.FlagInvCheckPeriod] = simcli.FlagPeriodValue - app := NewWasmApp(logger, db, nil, true, wasm.EnableAllProposals, appOptions, emptyWasmOpts, fauxMerkleModeOpt, baseapp.SetChainID(SimAppChainID)) + app := NewWasmApp(logger, db, nil, true, appOptions, emptyWasmOpts, fauxMerkleModeOpt, baseapp.SetChainID(SimAppChainID)) require.Equal(t, "WasmApp", app.Name()) return config, db, appOptions, app } @@ -312,7 +310,7 @@ func TestAppStateDeterminism(t *testing.T) { } db := dbm.NewMemDB() - app := NewWasmApp(logger, db, nil, true, wasm.EnableAllProposals, appOptions, emptyWasmOpts, interBlockCacheOpt(), baseapp.SetChainID(SimAppChainID)) + app := NewWasmApp(logger, db, nil, true, appOptions, emptyWasmOpts, interBlockCacheOpt(), baseapp.SetChainID(SimAppChainID)) fmt.Printf( "running non-determinism simulation; seed %d: %d/%d, attempt: %d/%d\n", diff --git a/app/test_helpers.go b/app/test_helpers.go index 1c010443..ad947ee9 100644 --- a/app/test_helpers.go +++ b/app/test_helpers.go @@ -42,7 +42,6 @@ import ( "github.com/stretchr/testify/require" "github.com/CosmWasm/wasmd/x/wasm" - wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" ) // SetupOptions defines arguments that are passed into `WasmApp` constructor. @@ -67,7 +66,7 @@ func setup(t testing.TB, chainID string, withGenesis bool, invCheckPeriod uint, appOptions := make(simtestutil.AppOptionsMap, 0) appOptions[flags.FlagHome] = nodeHome // ensure unique folder appOptions[server.FlagInvCheckPeriod] = invCheckPeriod - app := NewWasmApp(log.NewNopLogger(), db, nil, true, wasmtypes.EnableAllProposals, appOptions, opts, bam.SetChainID(chainID), bam.SetSnapshot(snapshotStore, snapshottypes.SnapshotOptions{KeepRecent: 2})) + app := NewWasmApp(log.NewNopLogger(), db, nil, true, appOptions, opts, bam.SetChainID(chainID), bam.SetSnapshot(snapshotStore, snapshottypes.SnapshotOptions{KeepRecent: 2})) if withGenesis { return app, NewDefaultGenesisState(app.AppCodec()) } @@ -93,7 +92,7 @@ func NewWasmAppWithCustomOptions(t *testing.T, isCheckTx bool, options SetupOpti Coins: sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, sdk.NewInt(100000000000000))), } - app := NewWasmApp(options.Logger, options.DB, nil, true, wasmtypes.EnableAllProposals, options.AppOpts, options.WasmOpts) + app := NewWasmApp(options.Logger, options.DB, nil, true, options.AppOpts, options.WasmOpts) genesisState := NewDefaultGenesisState(app.appCodec) genesisState, err = GenesisStateWithValSet(app.AppCodec(), genesisState, valSet, []authtypes.GenesisAccount{acc}, balance) require.NoError(t, err) @@ -263,10 +262,10 @@ func NewTestNetworkFixture() network.TestFixture { } defer os.RemoveAll(dir) - app := NewWasmApp(log.NewNopLogger(), dbm.NewMemDB(), nil, true, wasmtypes.EnableAllProposals, simtestutil.NewAppOptionsWithFlagHome(dir), emptyWasmOptions) + app := NewWasmApp(log.NewNopLogger(), dbm.NewMemDB(), nil, true, simtestutil.NewAppOptionsWithFlagHome(dir), emptyWasmOptions) appCtr := func(val network.ValidatorI) servertypes.Application { return NewWasmApp( - val.GetCtx().Logger, dbm.NewMemDB(), nil, true, wasmtypes.EnableAllProposals, + val.GetCtx().Logger, dbm.NewMemDB(), nil, true, simtestutil.NewAppOptionsWithFlagHome(val.GetCtx().Config.RootDir), emptyWasmOptions, bam.SetPruning(pruningtypes.NewPruningOptionsFromString(val.GetAppConfig().Pruning)), diff --git a/benchmarks/app_test.go b/benchmarks/app_test.go index 84206f61..35d7fe82 100644 --- a/benchmarks/app_test.go +++ b/benchmarks/app_test.go @@ -35,7 +35,7 @@ import ( ) func setup(db dbm.DB, withGenesis bool, invCheckPeriod uint, opts ...wasm.Option) (*app.WasmApp, app.GenesisState) { //nolint:unparam - wasmApp := app.NewWasmApp(log.NewTMLogger(log.NewSyncWriter(os.Stdout)), db, nil, true, wasm.EnableAllProposals, simtestutil.EmptyAppOptions{}, nil) + wasmApp := app.NewWasmApp(log.NewTMLogger(log.NewSyncWriter(os.Stdout)), db, nil, true, simtestutil.EmptyAppOptions{}, nil) if withGenesis { return wasmApp, app.NewDefaultGenesisState(wasmApp.AppCodec()) diff --git a/cmd/xiond/root.go b/cmd/xiond/root.go index 03c12fe1..69a3aba6 100644 --- a/cmd/xiond/root.go +++ b/cmd/xiond/root.go @@ -248,7 +248,6 @@ func newApp( return app.NewWasmApp( logger, db, traceStore, true, - app.GetEnabledProposals(), appOpts, wasmOpts, baseappOptions..., @@ -287,7 +286,6 @@ func appExport( db, traceStore, height == -1, - app.GetEnabledProposals(), appOpts, emptyWasmOpts, ) diff --git a/integration_tests/go.mod b/integration_tests/go.mod index d26b408d..81b63ad7 100644 --- a/integration_tests/go.mod +++ b/integration_tests/go.mod @@ -3,9 +3,9 @@ module integration_tests go 1.19 require ( - cosmossdk.io/math v1.0.1 + cosmossdk.io/math v1.1.2 github.com/burnt-labs/xion v0.1.0 - github.com/cosmos/cosmos-sdk v0.47.4 + github.com/cosmos/cosmos-sdk v0.47.5 github.com/cosmos/ibc-go/v7 v7.3.0 github.com/docker/docker v24.0.4+incompatible github.com/icza/dyno v0.0.0-20220812133438-f0b6f8a18845 @@ -23,9 +23,9 @@ require ( cloud.google.com/go/storage v1.30.1 // indirect cosmossdk.io/api v0.3.1 // indirect cosmossdk.io/core v0.6.1 // indirect - cosmossdk.io/depinject v1.0.0-alpha.3 // indirect + cosmossdk.io/depinject v1.0.0-alpha.4 // indirect cosmossdk.io/errors v1.0.0 // indirect - cosmossdk.io/log v1.1.1-0.20230704160919-88f2c830b0ca // indirect + cosmossdk.io/log v1.2.1 // indirect cosmossdk.io/tools/rosetta v0.2.1 // indirect filippo.io/edwards25519 v1.0.0 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect @@ -59,7 +59,7 @@ require ( github.com/cosmos/go-bip39 v1.0.0 // indirect github.com/cosmos/gogogateway v1.2.0 // indirect github.com/cosmos/gogoproto v1.4.10 // indirect - github.com/cosmos/iavl v0.20.0 // indirect + github.com/cosmos/iavl v0.20.1 // indirect github.com/cosmos/ics23/go v0.10.0 // indirect github.com/cosmos/ledger-cosmos-go v0.12.2 // indirect github.com/cosmos/rosetta-sdk-go v0.10.0 // indirect @@ -170,7 +170,7 @@ require ( github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/rs/cors v1.8.3 // indirect - github.com/rs/zerolog v1.29.1 // indirect + github.com/rs/zerolog v1.30.0 // indirect github.com/sasha-s/go-deadlock v0.3.1 // indirect github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 // indirect github.com/spaolacci/murmur3 v1.1.0 // indirect @@ -194,7 +194,7 @@ require ( go.uber.org/atomic v1.10.0 // indirect go.uber.org/multierr v1.11.0 // indirect golang.org/x/crypto v0.12.0 // indirect - golang.org/x/exp v0.0.0-20230515195305-f3d0a9c9a5cc // indirect + golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb // indirect golang.org/x/mod v0.12.0 // indirect golang.org/x/net v0.14.0 // indirect golang.org/x/oauth2 v0.8.0 // indirect diff --git a/integration_tests/go.sum b/integration_tests/go.sum index 538c6737..d6e5fb11 100644 --- a/integration_tests/go.sum +++ b/integration_tests/go.sum @@ -193,12 +193,15 @@ cosmossdk.io/core v0.6.1 h1:OBy7TI2W+/gyn2z40vVvruK3di+cAluinA6cybFbE7s= cosmossdk.io/core v0.6.1/go.mod h1:g3MMBCBXtxbDWBURDVnJE7XML4BG5qENhs0gzkcpuFA= cosmossdk.io/depinject v1.0.0-alpha.3 h1:6evFIgj//Y3w09bqOUOzEpFj5tsxBqdc5CfkO7z+zfw= cosmossdk.io/depinject v1.0.0-alpha.3/go.mod h1:eRbcdQ7MRpIPEM5YUJh8k97nxHpYbc3sMUnEtt8HPWU= +cosmossdk.io/depinject v1.0.0-alpha.4/go.mod h1:HeDk7IkR5ckZ3lMGs/o91AVUc7E596vMaOmslGFM3yU= cosmossdk.io/errors v1.0.0 h1:nxF07lmlBbB8NKQhtJ+sJm6ef5uV1XkvPXG2bUntb04= cosmossdk.io/errors v1.0.0/go.mod h1:+hJZLuhdDE0pYN8HkOrVNwrIOYvUGnn6+4fjnJs/oV0= cosmossdk.io/log v1.1.1-0.20230704160919-88f2c830b0ca h1:msenprh2BLLRwNT7zN56TbBHOGk/7ARQckXHxXyvjoQ= cosmossdk.io/log v1.1.1-0.20230704160919-88f2c830b0ca/go.mod h1:PkIAKXZvaxrTRc++z53XMRvFk8AcGGWYHcMIPzVYX9c= +cosmossdk.io/log v1.2.1/go.mod h1:GNSCc/6+DhFIj1aLn/j7Id7PaO8DzNylUZoOYBL9+I4= cosmossdk.io/math v1.0.1 h1:Qx3ifyOPaMLNH/89WeZFH268yCvU4xEcnPLu3sJqPPg= cosmossdk.io/math v1.0.1/go.mod h1:Ygz4wBHrgc7g0N+8+MrnTfS9LLn9aaTGa9hKopuym5k= +cosmossdk.io/math v1.1.2/go.mod h1:l2Gnda87F0su8a/7FEKJfFdJrM0JZRXQaohlgJeyQh0= cosmossdk.io/tools/rosetta v0.2.1 h1:ddOMatOH+pbxWbrGJKRAawdBkPYLfKXutK9IETnjYxw= cosmossdk.io/tools/rosetta v0.2.1/go.mod h1:Pqdc1FdvkNV3LcNIkYWt2RQY6IP1ge6YWZk8MhhO9Hw= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= @@ -344,6 +347,7 @@ github.com/cosmos/cosmos-proto v1.0.0-beta.3 h1:VitvZ1lPORTVxkmF2fAp3IiA61xVwArQ github.com/cosmos/cosmos-proto v1.0.0-beta.3/go.mod h1:t8IASdLaAq+bbHbjq4p960BvcTqtwuAxid3b/2rOD6I= github.com/cosmos/cosmos-sdk v0.47.4 h1:FVUpEprm58nMmBX4xkRdMDaIG5Nr4yy92HZAfGAw9bg= github.com/cosmos/cosmos-sdk v0.47.4/go.mod h1:R5n+uM7vguVPFap4pgkdvQCT1nVo/OtPwrlAU40rvok= +github.com/cosmos/cosmos-sdk v0.47.5/go.mod h1:EHwCeN9IXonsjKcjpS12MqeStdZvIdxt3VYXhus3G3c= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= @@ -354,6 +358,7 @@ github.com/cosmos/gogoproto v1.4.10 h1:QH/yT8X+c0F4ZDacDv3z+xE3WU1P1Z3wQoLMBRJoK github.com/cosmos/gogoproto v1.4.10/go.mod h1:3aAZzeRWpAwr+SS/LLkICX2/kDFyaYVzckBDzygIxek= github.com/cosmos/iavl v0.20.0 h1:fTVznVlepH0KK8NyKq8w+U7c2L6jofa27aFX6YGlm38= github.com/cosmos/iavl v0.20.0/go.mod h1:WO7FyvaZJoH65+HFOsDir7xU9FWk2w9cHXNW1XHcl7A= +github.com/cosmos/iavl v0.20.1/go.mod h1:WO7FyvaZJoH65+HFOsDir7xU9FWk2w9cHXNW1XHcl7A= github.com/cosmos/ibc-go/v7 v7.3.0 h1:QtGeVMi/3JeLWuvEuC60sBHpAF40Oenx/y+bP8+wRRw= github.com/cosmos/ibc-go/v7 v7.3.0/go.mod h1:mUmaHFXpXrEdcxfdXyau+utZf14pGKVUiXwYftRZZfQ= github.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZDM= @@ -945,8 +950,10 @@ github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.8.3 h1:O+qNyWn7Z+F9M0ILBHgMVPuB1xTOucVd5gtaYyXBpRo= github.com/rs/cors v1.8.3/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= +github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= github.com/rs/zerolog v1.29.1 h1:cO+d60CHkknCbvzEWxP0S9K6KqyTjrCNUy1LdQLCGPc= github.com/rs/zerolog v1.29.1/go.mod h1:Le6ESbR7hc+DP6Lt1THiV8CQSdkkNrd3R0XbEgp3ZBU= +github.com/rs/zerolog v1.30.0/go.mod h1:/tk+P47gFdPXq4QYjvCmT5/Gsug2nagsFWBWhAiSi1w= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= @@ -1113,6 +1120,7 @@ golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMk golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= golang.org/x/exp v0.0.0-20230515195305-f3d0a9c9a5cc h1:mCRnTeVUjcrhlRmO0VK8a6k6Rrf6TF9htwo2pJVSjIU= golang.org/x/exp v0.0.0-20230515195305-f3d0a9c9a5cc/go.mod h1:V1LtkGg67GoY2N1AnLN78QLrzxkLyJw7RJb1gzOOz9w= +golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc= 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= From 7c51edd2d5c9afb71d04888dffde9e98aa525a09 Mon Sep 17 00:00:00 2001 From: Ash Date: Tue, 31 Oct 2023 14:56:38 -0700 Subject: [PATCH 214/501] test cleanup --- app/app_test.go | 38 +++----------------------------------- 1 file changed, 3 insertions(+), 35 deletions(-) diff --git a/app/app_test.go b/app/app_test.go index dbcae4ee..fb37c52e 100644 --- a/app/app_test.go +++ b/app/app_test.go @@ -8,13 +8,12 @@ import ( "github.com/cometbft/cometbft/libs/log" simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/CosmWasm/wasmd/x/wasm" + wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" ) -var emptyWasmOpts []wasm.Option +var emptyWasmOpts []wasmkeeper.Option func TestWasmdExport(t *testing.T) { db := dbm.NewMemDB() @@ -26,7 +25,7 @@ func TestWasmdExport(t *testing.T) { gapp.Commit() // Making a new app object with the db, so that initchain hasn't been called - newGapp := NewWasmApp(log.NewTMLogger(log.NewSyncWriter(os.Stdout)), db, nil, true, wasm.EnableAllProposals, simtestutil.NewAppOptionsWithFlagHome(t.TempDir()), emptyWasmOpts) + newGapp := NewWasmApp(log.NewTMLogger(log.NewSyncWriter(os.Stdout)), db, nil, true, simtestutil.NewAppOptionsWithFlagHome(t.TempDir()), emptyWasmOpts) _, err := newGapp.ExportAppStateAndValidators(false, []string{}, nil) require.NoError(t, err, "ExportAppStateAndValidators should not have an error") } @@ -52,34 +51,3 @@ func TestGetMaccPerms(t *testing.T) { dup := GetMaccPerms() require.Equal(t, maccPerms, dup, "duplicated module account permissions differed from actual module account permissions") } - -func TestGetEnabledProposals(t *testing.T) { - cases := map[string]struct { - proposalsEnabled string - specificEnabled string - expected []wasm.ProposalType - }{ - "all disabled": { - proposalsEnabled: "false", - expected: wasm.DisableAllProposals, - }, - "all enabled": { - proposalsEnabled: "true", - expected: wasm.EnableAllProposals, - }, - "some enabled": { - proposalsEnabled: "okay", - specificEnabled: "StoreCode,InstantiateContract", - expected: []wasm.ProposalType{wasm.ProposalTypeStoreCode, wasm.ProposalTypeInstantiateContract}, - }, - } - - for name, tc := range cases { - t.Run(name, func(t *testing.T) { - ProposalsEnabled = tc.proposalsEnabled - EnableSpecificProposals = tc.specificEnabled - proposals := GetEnabledProposals() - assert.Equal(t, tc.expected, proposals) - }) - } -} From 78862ef5e426414b687ae5ad12d6604300a2f906 Mon Sep 17 00:00:00 2001 From: Ash Date: Tue, 31 Oct 2023 15:06:09 -0700 Subject: [PATCH 215/501] go mod tidy --- integration_tests/go.mod | 7 +++++ integration_tests/go.sum | 55 +++++++++++++++++++++------------------- 2 files changed, 36 insertions(+), 26 deletions(-) diff --git a/integration_tests/go.mod b/integration_tests/go.mod index 81b63ad7..d7d341bf 100644 --- a/integration_tests/go.mod +++ b/integration_tests/go.mod @@ -50,6 +50,9 @@ require ( github.com/cespare/xxhash v1.1.0 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/chzyer/readline v1.5.1 // indirect + github.com/cockroachdb/errors v1.10.0 // indirect + github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect + github.com/cockroachdb/redact v1.1.5 // indirect github.com/coinbase/rosetta-sdk-go/types v1.0.0 // indirect github.com/cometbft/cometbft v0.37.2 // indirect github.com/cometbft/cometbft-db v0.8.0 // indirect @@ -83,6 +86,7 @@ require ( github.com/ethereum/go-ethereum v1.10.20 // indirect github.com/felixge/httpsnoop v1.0.2 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect + github.com/getsentry/sentry-go v0.23.0 // indirect github.com/go-kit/kit v0.12.0 // indirect github.com/go-kit/log v0.2.1 // indirect github.com/go-logfmt/logfmt v0.6.0 // indirect @@ -127,6 +131,8 @@ require ( github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect github.com/klauspost/compress v1.16.3 // indirect github.com/klauspost/cpuid/v2 v2.2.3 // indirect + github.com/kr/pretty v0.3.1 // indirect + github.com/kr/text v0.2.0 // indirect github.com/lib/pq v1.10.9 // indirect github.com/libp2p/go-buffer-pool v0.1.0 // indirect github.com/libp2p/go-libp2p v0.22.0 // indirect @@ -169,6 +175,7 @@ require ( github.com/rakyll/statik v0.1.7 // indirect github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect + github.com/rogpeppe/go-internal v1.11.0 // indirect github.com/rs/cors v1.8.3 // indirect github.com/rs/zerolog v1.30.0 // indirect github.com/sasha-s/go-deadlock v0.3.1 // indirect diff --git a/integration_tests/go.sum b/integration_tests/go.sum index d6e5fb11..2685904b 100644 --- a/integration_tests/go.sum +++ b/integration_tests/go.sum @@ -191,16 +191,13 @@ cosmossdk.io/api v0.3.1 h1:NNiOclKRR0AOlO4KIqeaG6PS6kswOMhHD0ir0SscNXE= cosmossdk.io/api v0.3.1/go.mod h1:DfHfMkiNA2Uhy8fj0JJlOCYOBp4eWUUJ1te5zBGNyIw= cosmossdk.io/core v0.6.1 h1:OBy7TI2W+/gyn2z40vVvruK3di+cAluinA6cybFbE7s= cosmossdk.io/core v0.6.1/go.mod h1:g3MMBCBXtxbDWBURDVnJE7XML4BG5qENhs0gzkcpuFA= -cosmossdk.io/depinject v1.0.0-alpha.3 h1:6evFIgj//Y3w09bqOUOzEpFj5tsxBqdc5CfkO7z+zfw= -cosmossdk.io/depinject v1.0.0-alpha.3/go.mod h1:eRbcdQ7MRpIPEM5YUJh8k97nxHpYbc3sMUnEtt8HPWU= +cosmossdk.io/depinject v1.0.0-alpha.4 h1:PLNp8ZYAMPTUKyG9IK2hsbciDWqna2z1Wsl98okJopc= cosmossdk.io/depinject v1.0.0-alpha.4/go.mod h1:HeDk7IkR5ckZ3lMGs/o91AVUc7E596vMaOmslGFM3yU= cosmossdk.io/errors v1.0.0 h1:nxF07lmlBbB8NKQhtJ+sJm6ef5uV1XkvPXG2bUntb04= cosmossdk.io/errors v1.0.0/go.mod h1:+hJZLuhdDE0pYN8HkOrVNwrIOYvUGnn6+4fjnJs/oV0= -cosmossdk.io/log v1.1.1-0.20230704160919-88f2c830b0ca h1:msenprh2BLLRwNT7zN56TbBHOGk/7ARQckXHxXyvjoQ= -cosmossdk.io/log v1.1.1-0.20230704160919-88f2c830b0ca/go.mod h1:PkIAKXZvaxrTRc++z53XMRvFk8AcGGWYHcMIPzVYX9c= +cosmossdk.io/log v1.2.1 h1:Xc1GgTCicniwmMiKwDxUjO4eLhPxoVdI9vtMW8Ti/uk= cosmossdk.io/log v1.2.1/go.mod h1:GNSCc/6+DhFIj1aLn/j7Id7PaO8DzNylUZoOYBL9+I4= -cosmossdk.io/math v1.0.1 h1:Qx3ifyOPaMLNH/89WeZFH268yCvU4xEcnPLu3sJqPPg= -cosmossdk.io/math v1.0.1/go.mod h1:Ygz4wBHrgc7g0N+8+MrnTfS9LLn9aaTGa9hKopuym5k= +cosmossdk.io/math v1.1.2 h1:ORZetZCTyWkI5GlZ6CZS28fMHi83ZYf+A2vVnHNzZBM= cosmossdk.io/math v1.1.2/go.mod h1:l2Gnda87F0su8a/7FEKJfFdJrM0JZRXQaohlgJeyQh0= cosmossdk.io/tools/rosetta v0.2.1 h1:ddOMatOH+pbxWbrGJKRAawdBkPYLfKXutK9IETnjYxw= cosmossdk.io/tools/rosetta v0.2.1/go.mod h1:Pqdc1FdvkNV3LcNIkYWt2RQY6IP1ge6YWZk8MhhO9Hw= @@ -242,7 +239,6 @@ github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrd github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= github.com/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= -github.com/alecthomas/participle/v2 v2.0.0-alpha7 h1:cK4vjj0VSgb3lN1nuKA5F7dw+1s1pWBe5bx7nNCnN+c= 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= @@ -323,8 +319,13 @@ github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cockroachdb/apd/v2 v2.0.2 h1:weh8u7Cneje73dDh+2tEVLUvyBc89iwepWCD8b8034E= -github.com/cockroachdb/apd/v3 v3.1.0 h1:MK3Ow7LH0W8zkd5GMKA1PvS9qG3bWFI95WaVNfyZJ/w= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= +github.com/cockroachdb/errors v1.10.0 h1:lfxS8zZz1+OjtV4MtNWgboi/W5tyLEB6VQZBXN+0VUU= +github.com/cockroachdb/errors v1.10.0/go.mod h1:lknhIsEVQ9Ss/qKDBQS/UqFSvPQjOwNq2qyKAxtHRqE= +github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= +github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= +github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwPJ30= +github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/coinbase/rosetta-sdk-go/types v1.0.0 h1:jpVIwLcPoOeCR6o1tU+Xv7r5bMONNbHU7MuEHboiFuA= github.com/coinbase/rosetta-sdk-go/types v1.0.0/go.mod h1:eq7W2TMRH22GTW0N0beDnN931DW0/WOI1R2sdHNHG4c= @@ -345,8 +346,7 @@ 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-proto v1.0.0-beta.3 h1:VitvZ1lPORTVxkmF2fAp3IiA61xVwArQYKXTdEcpW6o= github.com/cosmos/cosmos-proto v1.0.0-beta.3/go.mod h1:t8IASdLaAq+bbHbjq4p960BvcTqtwuAxid3b/2rOD6I= -github.com/cosmos/cosmos-sdk v0.47.4 h1:FVUpEprm58nMmBX4xkRdMDaIG5Nr4yy92HZAfGAw9bg= -github.com/cosmos/cosmos-sdk v0.47.4/go.mod h1:R5n+uM7vguVPFap4pgkdvQCT1nVo/OtPwrlAU40rvok= +github.com/cosmos/cosmos-sdk v0.47.5 h1:n1+WjP/VM/gAEOx3TqU2/Ny734rj/MX1kpUnn7zVJP8= github.com/cosmos/cosmos-sdk v0.47.5/go.mod h1:EHwCeN9IXonsjKcjpS12MqeStdZvIdxt3VYXhus3G3c= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= @@ -356,8 +356,7 @@ github.com/cosmos/gogogateway v1.2.0/go.mod h1:iQpLkGWxYcnCdz5iAdLcRBSw3h7NXeOkZ github.com/cosmos/gogoproto v1.4.2/go.mod h1:cLxOsn1ljAHSV527CHOtaIP91kK6cCrZETRBrkzItWU= github.com/cosmos/gogoproto v1.4.10 h1:QH/yT8X+c0F4ZDacDv3z+xE3WU1P1Z3wQoLMBRJoKuI= github.com/cosmos/gogoproto v1.4.10/go.mod h1:3aAZzeRWpAwr+SS/LLkICX2/kDFyaYVzckBDzygIxek= -github.com/cosmos/iavl v0.20.0 h1:fTVznVlepH0KK8NyKq8w+U7c2L6jofa27aFX6YGlm38= -github.com/cosmos/iavl v0.20.0/go.mod h1:WO7FyvaZJoH65+HFOsDir7xU9FWk2w9cHXNW1XHcl7A= +github.com/cosmos/iavl v0.20.1 h1:rM1kqeG3/HBT85vsZdoSNsehciqUQPWrR4BYmqE2+zg= github.com/cosmos/iavl v0.20.1/go.mod h1:WO7FyvaZJoH65+HFOsDir7xU9FWk2w9cHXNW1XHcl7A= github.com/cosmos/ibc-go/v7 v7.3.0 h1:QtGeVMi/3JeLWuvEuC60sBHpAF40Oenx/y+bP8+wRRw= github.com/cosmos/ibc-go/v7 v7.3.0/go.mod h1:mUmaHFXpXrEdcxfdXyau+utZf14pGKVUiXwYftRZZfQ= @@ -373,8 +372,7 @@ github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46t github.com/creachadair/taskgroup v0.4.2 h1:jsBLdAJE42asreGss2xZGZ8fJra7WtwnHWeJFxv2Li8= github.com/creachadair/taskgroup v0.4.2/go.mod h1:qiXUOSrbwAY3u0JPGTzObbE3yf9hcXHDKBZ2ZjpCbgM= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= -github.com/cucumber/common/gherkin/go/v22 v22.0.0 h1:4K8NqptbvdOrjL9DEea6HFjSpbdT9+Q5kgLpmmsHYl0= -github.com/cucumber/common/messages/go/v17 v17.1.1 h1:RNqopvIFyLWnKv0LfATh34SWBhXeoFTJnSrgm9cT/Ts= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -447,11 +445,14 @@ github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4 github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= +github.com/getsentry/sentry-go v0.23.0 h1:dn+QRCeJv4pPt9OjVXiMcGIBIefaTJPw/h0bZWO05nE= +github.com/getsentry/sentry-go v0.23.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= 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.6.3 h1:ahKqKTFpO5KTPHxWZjEdPScmYaGtLo8Y4DMHoEsnp14= github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= +github.com/gin-gonic/gin v1.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8= +github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= 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= @@ -469,12 +470,12 @@ github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= -github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= +github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU= github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho= -github.com/go-playground/validator/v10 v10.2.0 h1:KgJ0snyC2R9VXYN2rneOtQcw5aHQB1Vv0sFl1UcHBOY= github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= +github.com/go-playground/validator/v10 v10.11.1 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJWXmqUsHwfTRRkQ= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw= @@ -486,10 +487,10 @@ github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8= github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= github.com/gobwas/ws v1.0.2 h1:CoAavW/wd/kulfZmSIBt6p24n4j7tHgNVCjsfHVNUbo= github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= +github.com/goccy/go-json v0.9.11 h1:/pAaQDLHEoCq/5FFmSKBswWmK6H0e8g4159Kc/X/nqk= 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/uuid v4.3.0+incompatible h1:CaSVZxm5B+7o45rtab4jC2G37WGYX1zQfuU2i6DSvnc= github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/gogo/googleapis v1.4.1-0.20201022092350-68b0159b7869/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= github.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0= @@ -735,9 +736,11 @@ 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.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/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/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= @@ -890,6 +893,8 @@ github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0 github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pierrec/xxHash v0.1.5 h1:n/jBpwTHiER4xYvK3/CdPVnLDPchj8eTJFFLUb4QHBo= github.com/pierrec/xxHash v0.1.5/go.mod h1:w2waW5Zoa/Wc4Yqe0wgrIYAGKqRMf7czn2HNKXmuL+I= +github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= +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= @@ -936,7 +941,6 @@ github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Ung github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= 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/regen-network/gocuke v0.6.2 h1:pHviZ0kKAq2U2hN2q3smKNxct6hS0mGByFMHGnWA97M= github.com/regen-network/protobuf v1.3.3-alpha.regen.1 h1:OHEc+q5iIAXpqiqFKeLpu5NwTIkVXUs48vFMwzqpqY4= github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI= github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= @@ -945,14 +949,14 @@ github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qq github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= 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.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= +github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.8.3 h1:O+qNyWn7Z+F9M0ILBHgMVPuB1xTOucVd5gtaYyXBpRo= github.com/rs/cors v1.8.3/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= -github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= -github.com/rs/zerolog v1.29.1 h1:cO+d60CHkknCbvzEWxP0S9K6KqyTjrCNUy1LdQLCGPc= -github.com/rs/zerolog v1.29.1/go.mod h1:Le6ESbR7hc+DP6Lt1THiV8CQSdkkNrd3R0XbEgp3ZBU= +github.com/rs/zerolog v1.30.0 h1:SymVODrcRsaRaSInD9yQtKbtWqwsfoPcRff/oRXLj4c= github.com/rs/zerolog v1.30.0/go.mod h1:/tk+P47gFdPXq4QYjvCmT5/Gsug2nagsFWBWhAiSi1w= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= @@ -1118,8 +1122,7 @@ golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u0 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-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= -golang.org/x/exp v0.0.0-20230515195305-f3d0a9c9a5cc h1:mCRnTeVUjcrhlRmO0VK8a6k6Rrf6TF9htwo2pJVSjIU= -golang.org/x/exp v0.0.0-20230515195305-f3d0a9c9a5cc/go.mod h1:V1LtkGg67GoY2N1AnLN78QLrzxkLyJw7RJb1gzOOz9w= +golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb h1:xIApU0ow1zwMa2uL1VDNeQlNVFTWMQxZUZCMDy0Q4Us= golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc= 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= @@ -1377,7 +1380,7 @@ golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxb 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.1.0 h1:xYY+Bajn2a7VBmTM5GikTmnK8ZuX8YgnQCqZpbBNtmA= +golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/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= From d6d973bbc97b3a5ddad51585acfbffc69fed98fe Mon Sep 17 00:00:00 2001 From: Francis Roch Date: Thu, 2 Nov 2023 13:13:50 -0400 Subject: [PATCH 216/501] Add `cosmwasm_1_4` to capabilities string --- app/app.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/app.go b/app/app.go index 595a9a12..259ae3b7 100644 --- a/app/app.go +++ b/app/app.go @@ -669,7 +669,7 @@ func NewWasmApp( // The last arguments can contain custom message handlers, and custom query handlers, // if we want to allow any custom callbacks // See https://github.com/CosmWasm/cosmwasm/blob/main/docs/CAPABILITIES-BUILT-IN.md - availableCapabilities := "iterator,staking,stargate,cosmwasm_1_1,cosmwasm_1_2,cosmwasm_1_3" + availableCapabilities := "iterator,staking,stargate,cosmwasm_1_1,cosmwasm_1_2,cosmwasm_1_3,cosmwasm_1_4" app.WasmKeeper = wasmkeeper.NewKeeper( appCodec, keys[wasmtypes.StoreKey], From 001af20a442e5a1a3615f3b8afd7f4c5882c4b5e Mon Sep 17 00:00:00 2001 From: Francis Roch Date: Thu, 2 Nov 2023 13:14:13 -0400 Subject: [PATCH 217/501] Fix libwasmvm version in Docker container --- Dockerfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 6c972a29..8eae0463 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,9 +3,9 @@ FROM golang:1.19-alpine3.17 AS go-builder ARG arch=x86_64 - ENV WASMVM_VERSION=v1.3.0 - ENV WASMVM_CHECKSUM_AARCH64=b1610f9c8ad8bdebf5b8f819f71d238466f83521c74a2deb799078932e862722 - ENV WASMVM_CHECKSUM_x86_64=b4aad4480f9b4c46635b4943beedbb72c929eab1d1b9467fe3b43e6dbf617e32 + ENV WASMVM_VERSION=v1.4.1 + ENV WASMVM_CHECKSUM_AARCH64=a8259ba852f1b68f2a5f8eb666a9c7f1680196562022f71bb361be1472a83cfd + ENV WASMVM_CHECKSUM_x86_64=324c1073cb988478d644861783ed5a7de21cfd090976ccc6b1de0559098fbbad # this comes from standard alpine nightly file # https://github.com/rust-lang/docker-rust-nightly/blob/master/alpine3.12/Dockerfile From 1ad5f0749917bb14364787128d54a8106ebd3068 Mon Sep 17 00:00:00 2001 From: justin <328965+justinbarry@users.noreply.github.com> Date: Tue, 7 Nov 2023 15:14:24 -0800 Subject: [PATCH 218/501] Open up cors on the xion local docker build --- docker/entrypoint.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh index 406b2c94..48f90c40 100755 --- a/docker/entrypoint.sh +++ b/docker/entrypoint.sh @@ -42,6 +42,9 @@ if [[ ! -f $HOME_DIRECTORY/data/priv_validator_state.json ]]; then # Bind API to all the network interfaces. sed -i '/\[rpc\]/,+3 s/laddr = "tcp\:\/\/127.0.0.1:26657"/laddr = "tcp\:\/\/0.0.0.0:26657"/' $HOME_DIRECTORY/config/config.toml; + + # Expand CORS to be accessible from anywhere. + sed -i '/\[rpc\]/,+8 s/cors_allowed_origins = \[\]/cors_allowed_origins = ["*"]/' $HOME_DIRECTORY/config/config.toml; fi xiond start --trace --home $HOME_DIRECTORY From 3f0dd58d63347d2a0d272ff3cfb011efdace61cb Mon Sep 17 00:00:00 2001 From: Eduardo Diaz Date: Tue, 14 Nov 2023 14:06:15 -0400 Subject: [PATCH 219/501] add test to pipeline --- .github/workflows/integration-tests.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index 4c209528..4751bdb7 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -72,6 +72,7 @@ jobs: - "MintModuleInflationHighFees" - "MintModuleInflationLowFees" - "XionSendPlatformFee" + - "XionAbstractAccount" steps: - name: Set up Go 1.18 From e2f2f395a8d47fae5fcb50315e1a0da82d5c0c68 Mon Sep 17 00:00:00 2001 From: Ash Date: Tue, 14 Nov 2023 10:25:38 -0800 Subject: [PATCH 220/501] remove dependabot --- .github/dependabot.yml | 45 ------------------------------------------ 1 file changed, 45 deletions(-) delete mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml deleted file mode 100644 index 376c0123..00000000 --- a/.github/dependabot.yml +++ /dev/null @@ -1,45 +0,0 @@ -version: 2 -updates: -- package-ecosystem: github-actions - directory: "/" - schedule: - interval: daily - open-pull-requests-limit: 10 -- package-ecosystem: gomod - directory: "/" - schedule: - interval: daily - open-pull-requests-limit: 10 - ignore: - - dependency-name: github.com/CosmWasm/wasmvm - versions: - - 0.14.0-beta2 - - 0.14.0-beta3 - - 0.14.0-beta4 - - 0.14.0-beta5 - - 0.14.0-rc1 - - dependency-name: github.com/tendermint/tendermint - versions: - - 0.34.10 - - 0.34.4 - - 0.34.7 - - 0.34.8 - - 0.34.9 - - dependency-name: github.com/cosmos/cosmos-sdk - versions: - - 0.41.4 - - 0.42.0 - - 0.42.1 - - 0.42.2 - - 0.42.4 - - dependency-name: google.golang.org/grpc - versions: - - 1.36.0 - - 1.36.1 - - 1.37.0 - - dependency-name: github.com/spf13/cobra - versions: - - 1.1.2 - - dependency-name: github.com/tendermint/tm-db - versions: - - 0.6.4 From 399db383d9e8e6f23ebba16bdad19a42c461a53e Mon Sep 17 00:00:00 2001 From: Eduardo Diaz Date: Tue, 14 Nov 2023 14:47:20 -0400 Subject: [PATCH 221/501] fix path --- integration_tests/abstract_account_test.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/integration_tests/abstract_account_test.go b/integration_tests/abstract_account_test.go index e4ab7696..98becdfd 100644 --- a/integration_tests/abstract_account_test.go +++ b/integration_tests/abstract_account_test.go @@ -77,8 +77,11 @@ func TestXionAbstractAccount(t *testing.T) { ) require.NoError(t, err) + fp, err := os.Getwd() + require.NoError(t, err) + // Store Wasm Contract - codeID, err := xion.StoreContract(ctx, xionUser.FormattedAddress(), "./testdata/contracts/account_updatable-aarch64.wasm") + codeID, err := xion.StoreContract(ctx, xionUser.FormattedAddress(), path.Join(fp, "integration_tests", "testdata", "contracts", "account_updatable-aarch64.wasm")) require.NoError(t, err) depositedFunds := fmt.Sprintf("%d%s", 100000, xion.Config().Denom) From bff90b45ece6bdd48ed6194ded3335c30e851579 Mon Sep 17 00:00:00 2001 From: ash-burnt <96692350+ash-burnt@users.noreply.github.com> Date: Thu, 14 Dec 2023 08:31:50 -0800 Subject: [PATCH 222/501] JWT Integration Test (#129) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * jwt test * tx created, need to submit * sending works * successful test * integration test in ci * test keys * consolidate contract * WIP * WIP; update test to use burnt contract * WIP; remove sha256 * sign string version, not bytes * WIP; add registry command * WIP; xion register command; public key not the same from keybase? * add register command * fix path for pipeline * fix path for pipeline * remove comment * fix type name * Update x/xion/client/cli/tx.go Co-authored-by: Francis Roch --------- Co-authored-by: Eduardo Diaz Co-authored-by: Eduardo Díaz Co-authored-by: Francis Roch --- .github/workflows/integration-tests.yml | 1 + Makefile | 3 + integration_tests/abstract_account_test.go | 53 ++- integration_tests/go.mod | 18 +- integration_tests/go.sum | 48 ++- integration_tests/jwt_aa_test.go | 313 ++++++++++++++++++ .../contracts/account_updatable-aarch64.wasm | Bin 160787 -> 380742 bytes integration_tests/testdata/keys/jwtRS256.key | 51 +++ .../testdata/keys/jwtRS256.key.pub | 1 + integration_tests/utils.go | 20 +- x/xion/client/cli/tx.go | 154 ++++++++- 11 files changed, 628 insertions(+), 34 deletions(-) create mode 100644 integration_tests/jwt_aa_test.go create mode 100644 integration_tests/testdata/keys/jwtRS256.key create mode 100644 integration_tests/testdata/keys/jwtRS256.key.pub diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index 4751bdb7..878b0e46 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -71,6 +71,7 @@ jobs: - "MintModuleNoInflationNoFees" - "MintModuleInflationHighFees" - "MintModuleInflationLowFees" + - "JWTAbstractAccount" - "XionSendPlatformFee" - "XionAbstractAccount" diff --git a/Makefile b/Makefile index 6e7d9f2f..c29f284e 100644 --- a/Makefile +++ b/Makefile @@ -134,6 +134,9 @@ test-integration: test-integration-aa: @XION_IMAGE=$(XION_IMAGE) cd integration_tests && go test -run TestXionAbstractAccount -v -mod=readonly -tags='ledger test_ledger_mock' ./... +test-integration-aa-jwt: + @XION_IMAGE=$(XION_IMAGE) cd integration_tests && go test -run TestJWTAbstractAccount -v -mod=readonly -tags='ledger test_ledger_mock' ./... + test-integration-send: @XION_IMAGE=$(XION_IMAGE) cd integration_tests && go test -run TestXionSendPlatformFee -v -mod=readonly -tags='ledger test_ledger_mock' ./... diff --git a/integration_tests/abstract_account_test.go b/integration_tests/abstract_account_test.go index 98becdfd..92ca2715 100644 --- a/integration_tests/abstract_account_test.go +++ b/integration_tests/abstract_account_test.go @@ -1,6 +1,7 @@ package integration_tests import ( + "encoding/base64" "encoding/json" "fmt" "os" @@ -21,6 +22,8 @@ import ( aatypes "github.com/larry0x/abstract-account/x/abstractaccount/types" ) +type jsonAuthenticator map[string]map[string]string + func TestXionAbstractAccount(t *testing.T) { if testing.Short() { t.Skip("skipping in short mode") @@ -30,6 +33,9 @@ func TestXionAbstractAccount(t *testing.T) { td := BuildXionChain(t, "0.0uxion", ModifyInterChainGenesis(ModifyInterChainGenesisFn{ModifyGenesisShortProposals}, [][]string{{votingPeriod, maxDepositPeriod}})) xion, ctx := td.xionChain, td.ctx + config := types.GetConfig() + config.SetBech32PrefixForAccount("xion", "xionpub") + // Register All messages we are interacting. xion.Config().EncodingConfig.InterfaceRegistry.RegisterImplementations( (*types.Msg)(nil), @@ -76,6 +82,10 @@ func TestXionAbstractAccount(t *testing.T) { "-p", ) require.NoError(t, err) + t.Log("Funded Account:") + for k, v := range account { + t.Logf("[%s]: %v", k, v) + } fp, err := os.Getwd() require.NoError(t, err) @@ -84,39 +94,46 @@ func TestXionAbstractAccount(t *testing.T) { codeID, err := xion.StoreContract(ctx, xionUser.FormattedAddress(), path.Join(fp, "integration_tests", "testdata", "contracts", "account_updatable-aarch64.wasm")) require.NoError(t, err) + // retrieve the hash + codeResp, err := ExecQuery(t, ctx, xion.FullNodes[0], + "wasm", "code-info", codeID) + require.NoError(t, err) + t.Logf("code response: %s", codeResp) + depositedFunds := fmt.Sprintf("%d%s", 100000, xion.Config().Denom) - // Register Abstract Account Using Public Key registeredTxHash, err := ExecTx(t, ctx, xion.FullNodes[0], xionUser.KeyName(), - "abstract-account", "register", + "xion", "register", codeID, - fmt.Sprintf(`{"pubkey": "%s"}`, account["key"]), + xionUser.KeyName(), "--funds", depositedFunds, - "--salt", "foo", + "--authenticator", "Secp256K1", + "--salt", "0", + "--authenticator-id", "0", "--chain-id", xion.Config().ChainID, ) + require.NoError(t, err) txDetails, err := ExecQuery(t, ctx, xion.FullNodes[0], "tx", registeredTxHash) require.NoError(t, err) + t.Logf("TxDetails: %s", txDetails) aaContractAddr := GetAAContractAddress(t, txDetails) contractBalance, err := xion.GetBalance(ctx, aaContractAddr, xion.Config().Denom) require.NoError(t, err) require.Equal(t, uint64(100000), uint64(contractBalance)) - /* - NOTE: Ideally we would use this metod, however the QueryContract formats the string making it harder to predict. - var ContractResponse interface{} - require.NoError(t, xion.QueryContract(ctx, aaContractAddr, fmt.Sprintf(`{"pubkey":{}}`), ContractResponse)) - */ - - contractState, err := ExecQuery(t, ctx, xion.FullNodes[0], "wasm", "contract-state", "smart", aaContractAddr, fmt.Sprintf(`{"pubkey":{}}`)) + contractState, err := ExecQuery(t, ctx, xion.FullNodes[0], "wasm", "contract-state", "smart", aaContractAddr, fmt.Sprintf(`{"authenticator_by_i_d":{ "id": 0 }}`)) require.NoError(t, err) - pubkey, ok := contractState["data"].(string) + pubkey64, ok := contractState["data"].(string) require.True(t, ok) - require.Equal(t, account["key"], pubkey) + pubkeyRawJSON, err := base64.StdEncoding.DecodeString(pubkey64) + require.NoError(t, err) + var pubKeyMap jsonAuthenticator + json.Unmarshal(pubkeyRawJSON, &pubKeyMap) + require.Equal(t, account["key"], pubKeyMap["Secp256K1"]["pubkey"]) // Generate Msg Send without signatures jsonMsg := RawJSONMsgSend(t, aaContractAddr, recipientKeyAddress, xion.Config().Denom) @@ -182,12 +199,18 @@ func TestXionAbstractAccount(t *testing.T) { ) require.NoError(t, err) - updatedContractstate, err := ExecQuery(t, ctx, xion.FullNodes[0], "wasm", "contract-state", "smart", aaContractAddr, fmt.Sprintf(`{"pubkey":{}}`)) + updatedContractstate, err := ExecQuery(t, ctx, xion.FullNodes[0], "wasm", "contract-state", "smart", aaContractAddr, fmt.Sprintf(`{"authenticator_by_i_d":{ "id": 0 }}`)) require.NoError(t, err) updatedPubKey, ok := updatedContractstate["data"].(string) require.True(t, ok) - require.Equal(t, account["key"], updatedPubKey) + + updatedPubKeyRawJSON, err := base64.StdEncoding.DecodeString(updatedPubKey) + require.NoError(t, err) + var updatedPubKeyMap jsonAuthenticator + + json.Unmarshal(updatedPubKeyRawJSON, &updatedPubKeyMap) + require.Equal(t, account["key"], updatedPubKeyMap["Secp256K1"]["pubkey"]) } diff --git a/integration_tests/go.mod b/integration_tests/go.mod index 4d670cb8..14ad4ac6 100644 --- a/integration_tests/go.mod +++ b/integration_tests/go.mod @@ -9,8 +9,10 @@ require ( github.com/cosmos/cosmos-sdk v0.47.5 github.com/cosmos/ibc-go/v7 v7.3.0 github.com/docker/docker v24.0.4+incompatible + github.com/golang-jwt/jwt/v4 v4.3.0 github.com/icza/dyno v0.0.0-20220812133438-f0b6f8a18845 github.com/larry0x/abstract-account v0.0.0-20230708200055-2ea462db913f + github.com/lestrrat-go/jwx v1.2.26 github.com/strangelove-ventures/interchaintest/v7 v7.0.0-20230721183422-fb937bb0e165 github.com/stretchr/testify v1.8.4 go.uber.org/zap v1.24.0 @@ -53,6 +55,7 @@ require ( github.com/cespare/xxhash v1.1.0 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/chzyer/readline v1.5.1 // indirect + github.com/cockroachdb/apd/v2 v2.0.2 // indirect github.com/cockroachdb/errors v1.10.0 // indirect github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect github.com/cockroachdb/redact v1.1.5 // indirect @@ -66,6 +69,8 @@ require ( github.com/cosmos/gogogateway v1.2.0 // indirect github.com/cosmos/gogoproto v1.4.10 // indirect github.com/cosmos/iavl v0.20.1 // indirect + github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.0.0-20230803181732-7c8f814d3b79 // indirect + github.com/cosmos/ibc-apps/modules/ibc-hooks/v7 v7.0.0-20230802211043-d72e83c94350 // indirect github.com/cosmos/ics23/go v0.10.0 // indirect github.com/cosmos/ledger-cosmos-go v0.12.2 // indirect github.com/cosmos/rosetta-sdk-go v0.10.0 // indirect @@ -74,9 +79,9 @@ require ( github.com/davecgh/go-spew v1.1.1 // indirect github.com/deckarep/golang-set v1.8.0 // indirect github.com/decred/base58 v1.0.4 // indirect - github.com/decred/dcrd/crypto/blake256 v1.0.0 // indirect + github.com/decred/dcrd/crypto/blake256 v1.0.1 // indirect github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.1 // indirect - github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 // indirect + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f // indirect github.com/dgraph-io/badger/v2 v2.2007.4 // indirect github.com/dgraph-io/ristretto v0.1.1 // indirect @@ -94,6 +99,7 @@ require ( github.com/go-kit/log v0.2.1 // indirect github.com/go-logfmt/logfmt v0.6.0 // indirect github.com/go-stack/stack v1.8.1 // indirect + github.com/goccy/go-json v0.10.2 // indirect github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect github.com/gogo/googleapis v1.4.1 // indirect github.com/gogo/protobuf v1.3.3 // indirect @@ -104,6 +110,7 @@ require ( github.com/golang/snappy v0.0.4 // indirect github.com/google/btree v1.1.2 // indirect github.com/google/go-cmp v0.5.9 // indirect + github.com/google/gofuzz v1.2.0 // indirect github.com/google/orderedcode v0.0.1 // indirect github.com/google/s2a-go v0.1.4 // indirect github.com/google/uuid v1.3.0 // indirect @@ -126,6 +133,7 @@ require ( github.com/hashicorp/hcl v1.0.0 // indirect github.com/hdevalence/ed25519consensus v0.1.0 // indirect github.com/huandu/skiplist v1.2.0 // indirect + github.com/iancoleman/orderedmap v0.2.0 // indirect github.com/improbable-eng/grpc-web v0.15.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/ipfs/go-cid v0.2.0 // indirect @@ -136,6 +144,11 @@ require ( github.com/klauspost/cpuid/v2 v2.2.3 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect + github.com/lestrrat-go/backoff/v2 v2.0.8 // indirect + github.com/lestrrat-go/blackmagic v1.0.1 // indirect + github.com/lestrrat-go/httpcc v1.0.1 // indirect + github.com/lestrrat-go/iter v1.0.2 // indirect + github.com/lestrrat-go/option v1.0.1 // indirect github.com/lib/pq v1.10.9 // indirect github.com/libp2p/go-buffer-pool v0.1.0 // indirect github.com/libp2p/go-libp2p v0.22.0 // indirect @@ -165,6 +178,7 @@ require ( github.com/multiformats/go-varint v0.0.6 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect github.com/opencontainers/image-spec v1.1.0-rc2 // indirect + github.com/osmosis-labs/fee-abstraction/v4 v4.0.0-20230812032455-33dfc391894d // indirect github.com/pelletier/go-toml v1.9.5 // indirect github.com/pelletier/go-toml/v2 v2.0.9 // indirect github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08 // indirect diff --git a/integration_tests/go.sum b/integration_tests/go.sum index edb705f8..2d707444 100644 --- a/integration_tests/go.sum +++ b/integration_tests/go.sum @@ -323,6 +323,7 @@ github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cockroachdb/apd/v2 v2.0.2 h1:weh8u7Cneje73dDh+2tEVLUvyBc89iwepWCD8b8034E= +github.com/cockroachdb/apd/v2 v2.0.2/go.mod h1:DDxRlzC2lo3/vSlmSoS7JkqbbrARPuFOGr0B9pvN3Gw= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/cockroachdb/errors v1.10.0 h1:lfxS8zZz1+OjtV4MtNWgboi/W5tyLEB6VQZBXN+0VUU= github.com/cockroachdb/errors v1.10.0/go.mod h1:lknhIsEVQ9Ss/qKDBQS/UqFSvPQjOwNq2qyKAxtHRqE= @@ -362,6 +363,10 @@ github.com/cosmos/gogoproto v1.4.10 h1:QH/yT8X+c0F4ZDacDv3z+xE3WU1P1Z3wQoLMBRJoK github.com/cosmos/gogoproto v1.4.10/go.mod h1:3aAZzeRWpAwr+SS/LLkICX2/kDFyaYVzckBDzygIxek= github.com/cosmos/iavl v0.20.1 h1:rM1kqeG3/HBT85vsZdoSNsehciqUQPWrR4BYmqE2+zg= github.com/cosmos/iavl v0.20.1/go.mod h1:WO7FyvaZJoH65+HFOsDir7xU9FWk2w9cHXNW1XHcl7A= +github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.0.0-20230803181732-7c8f814d3b79 h1:n+PjYB3JnbKN+sGmX6khST4xMP+D0UdrMNj7O91fuOg= +github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.0.0-20230803181732-7c8f814d3b79/go.mod h1:fctjEnz9xaBFOlmYYPdKL8Hs1Y3GUKilSwsJdqBb5QU= +github.com/cosmos/ibc-apps/modules/ibc-hooks/v7 v7.0.0-20230802211043-d72e83c94350 h1:NyXIgMKsCTnmD8fcuuuX+45Py9xh/mfpPJ8yr3MI3zg= +github.com/cosmos/ibc-apps/modules/ibc-hooks/v7 v7.0.0-20230802211043-d72e83c94350/go.mod h1:JwHFbo1oX/ht4fPpnPvmhZr+dCkYK1Vihw+vZE9umR4= github.com/cosmos/ibc-go/v7 v7.3.0 h1:QtGeVMi/3JeLWuvEuC60sBHpAF40Oenx/y+bP8+wRRw= github.com/cosmos/ibc-go/v7 v7.3.0/go.mod h1:mUmaHFXpXrEdcxfdXyau+utZf14pGKVUiXwYftRZZfQ= github.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZDM= @@ -388,12 +393,13 @@ github.com/decred/base58 v1.0.4 h1:QJC6B0E0rXOPA8U/kw2rP+qiRJsUaE2Er+pYb3siUeA= github.com/decred/base58 v1.0.4/go.mod h1:jJswKPEdvpFpvf7dsDvFZyLT22xZ9lWqEByX38oGd9E= github.com/decred/dcrd/chaincfg/chainhash v1.0.2 h1:rt5Vlq/jM3ZawwiacWjPa+smINyLRN07EO0cNBV6DGU= github.com/decred/dcrd/chaincfg/chainhash v1.0.2/go.mod h1:BpbrGgrPTr3YJYRN3Bm+D9NuaFd+zGyNeIKgrhCXK60= -github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= +github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5ilcvdfma9wOH6Y= +github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.1 h1:18HurQ6DfHeNvwIjvOmrgr44bPdtVaQAe/WWwHg9goM= github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.1/go.mod h1:XmyzkaXBy7ZvHdrTAlXAjpog8qKSAWa3ze7yqzWmgmc= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 h1:HbphB4TFFXpv7MNrT52FGrrgVXF1owhMVTHFZIlnvd4= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0/go.mod h1:DZGJHZMqrU4JJqFAWUS2UO1+lbSKsdiOoYi9Zzey7Fc= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 h1:8UrgZ3GkP4i/CLijOJx79Yu+etlyjdBU4sfcs2WYQMs= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= 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/v2 v2.2007.4 h1:TRWBQg8UrlUhaFdco01nO2uXwzKS7zd+HVdwV/GHc4o= @@ -491,7 +497,8 @@ github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8= github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= github.com/gobwas/ws v1.0.2 h1:CoAavW/wd/kulfZmSIBt6p24n4j7tHgNVCjsfHVNUbo= github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= -github.com/goccy/go-json v0.9.11 h1:/pAaQDLHEoCq/5FFmSKBswWmK6H0e8g4159Kc/X/nqk= +github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= +github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= 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= @@ -499,6 +506,8 @@ github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFG github.com/gogo/googleapis v1.4.1-0.20201022092350-68b0159b7869/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= 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/golang-jwt/jwt/v4 v4.3.0 h1:kHL1vqdqWNfATmA0FNMdmZNMyZI1U6O31X4rlIPoBog= +github.com/golang-jwt/jwt/v4 v4.3.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v1.1.0 h1:/d3pCKDPWNnvIWe0vVUpNP32qc8U3PDVxySP/y360qE= github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ= @@ -565,6 +574,7 @@ github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN 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 h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= 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= @@ -687,6 +697,8 @@ github.com/huandu/go-assert v1.1.5/go.mod h1:yOLvuqZwmcHIC5rIzrBhT7D3Q9c3GFnd0Jr github.com/huandu/skiplist v1.2.0 h1:gox56QD77HzSC0w+Ws3MH3iie755GBJU1OER3h5VsYw= github.com/huandu/skiplist v1.2.0/go.mod h1:7v3iFjLcSAzO4fN5B8dvebvo/qsfumiLiDXMrPiHF9w= github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= +github.com/iancoleman/orderedmap v0.2.0 h1:sq1N/TFpYH++aViPcaKjys3bDClUEU7s5B+z6jq8pNA= +github.com/iancoleman/orderedmap v0.2.0/go.mod h1:N0Wam8K1arqPXNWjMo21EXnBPOPp36vB07FNRdD2geA= 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/icza/dyno v0.0.0-20220812133438-f0b6f8a18845 h1:H+uM0Bv88eur3ZSsd2NGKg3YIiuXxwxtlN7HjE66UTU= @@ -747,8 +759,22 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/larry0x/abstract-account v0.0.0-20230708200055-2ea462db913f h1:5bbME0rK2j2cCwRzoc2dX1/SDo3guFgyNyph+c+ulI4= github.com/larry0x/abstract-account v0.0.0-20230708200055-2ea462db913f/go.mod h1:mRL3ko+eOFguJHzhVZatNZOvaiVHumGAWxoLlyIo+Ow= +github.com/larry0x/simapp v0.0.0-20230527213943-e57d94ffca4c h1:HxMMvjvPKv+Xttad2Blw6c9XKzg/Pk5TIZL8T04lUN0= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= +github.com/lestrrat-go/backoff/v2 v2.0.8 h1:oNb5E5isby2kiro9AgdHLv5N5tint1AnDVVf2E2un5A= +github.com/lestrrat-go/backoff/v2 v2.0.8/go.mod h1:rHP/q/r9aT27n24JQLa7JhSQZCKBBOiM/uP402WwN8Y= +github.com/lestrrat-go/blackmagic v1.0.1 h1:lS5Zts+5HIC/8og6cGHb0uCcNCa3OUt1ygh3Qz2Fe80= +github.com/lestrrat-go/blackmagic v1.0.1/go.mod h1:UrEqBzIR2U6CnzVyUtfM6oZNMt/7O7Vohk2J0OGSAtU= +github.com/lestrrat-go/httpcc v1.0.1 h1:ydWCStUeJLkpYyjLDHihupbn2tYmZ7m22BGkcvZZrIE= +github.com/lestrrat-go/httpcc v1.0.1/go.mod h1:qiltp3Mt56+55GPVCbTdM9MlqhvzyuL6W/NMDA8vA5E= +github.com/lestrrat-go/iter v1.0.2 h1:gMXo1q4c2pHmC3dn8LzRhJfP1ceCbgSiT9lUydIzltI= +github.com/lestrrat-go/iter v1.0.2/go.mod h1:Momfcq3AnRlRjI5b5O8/G5/BvpzrhoFTZcn06fEOPt4= +github.com/lestrrat-go/jwx v1.2.26 h1:4iFo8FPRZGDYe1t19mQP0zTRqA7n8HnJ5lkIiDvJcB0= +github.com/lestrrat-go/jwx v1.2.26/go.mod h1:MaiCdGbn3/cckbOFSCluJlJMmp9dmZm5hDuIkx8ftpQ= +github.com/lestrrat-go/option v1.0.0/go.mod h1:5ZHFbivi4xwXxhxY9XHDe2FHo6/Z7WWmtT7T5nBBp3I= +github.com/lestrrat-go/option v1.0.1 h1:oAzP2fvZGQKWkvHa1/SAcFolBEca1oN+mQ7eooNBEYU= +github.com/lestrrat-go/option v1.0.1/go.mod h1:5ZHFbivi4xwXxhxY9XHDe2FHo6/Z7WWmtT7T5nBBp3I= github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= @@ -881,6 +907,8 @@ github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJ github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA= +github.com/osmosis-labs/fee-abstraction/v4 v4.0.0-20230812032455-33dfc391894d h1:eZXJY4RbQa91pvCMBlTZTQF/IEze77HDnkiD11XGeK8= +github.com/osmosis-labs/fee-abstraction/v4 v4.0.0-20230812032455-33dfc391894d/go.mod h1:CzRKibzIA2HLYlnTtryB3GTtifCwAVVMgfVzQN1Sirs= github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= @@ -1115,6 +1143,7 @@ golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= golang.org/x/crypto v0.12.0 h1:tFM/ta59kqch6LlvYnPa0yx5a83cL2nHflFhYKvv9Yk= golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -1156,6 +1185,7 @@ 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.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc= golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1219,6 +1249,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.14.0 h1:BONx9s002vGdD9umnlX1Po8vOZmrgH34qlHcD1MfK14= golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -1262,6 +1294,7 @@ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/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.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1361,12 +1394,16 @@ golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20221010170243-090e33056c14/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 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.11.0 h1:F9tnn/DA/Im8nCwm+fX+1/eBwi4qFjRT++MhtVC4ZX0= golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1380,6 +1417,8 @@ 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.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc= golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1448,6 +1487,7 @@ golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.4/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.11.0 h1:EMCa6U9S2LtZXLAMoWiR/R8dAQFRqbAitmbJ2UKhoi8= golang.org/x/tools v0.11.0/go.mod h1:anzJrxPjNtfgiYQYirP2CPGzGLxrH2u2QBhn6Bf3qY8= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/integration_tests/jwt_aa_test.go b/integration_tests/jwt_aa_test.go new file mode 100644 index 00000000..5171a8a5 --- /dev/null +++ b/integration_tests/jwt_aa_test.go @@ -0,0 +1,313 @@ +package integration_tests + +import ( + "crypto/sha256" + "encoding/base64" + "encoding/hex" + "encoding/json" + "fmt" + "os" + "path" + "testing" + "time" + + wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" + wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" + xionapp "github.com/burnt-labs/xion/app" + xiontypes "github.com/burnt-labs/xion/x/xion/types" + cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" + "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/tx/signing" + authsigning "github.com/cosmos/cosmos-sdk/x/auth/signing" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + "github.com/golang-jwt/jwt/v4" + aatypes "github.com/larry0x/abstract-account/x/abstractaccount/types" + "github.com/lestrrat-go/jwx/jwk" + ibctest "github.com/strangelove-ventures/interchaintest/v7" + "github.com/strangelove-ventures/interchaintest/v7/testutil" + "github.com/stretchr/testify/require" +) + +func TestJWTAbstractAccount(t *testing.T) { + if testing.Short() { + t.Skip("skipping in short mode") + } + t.Parallel() + + td := BuildXionChain(t, "0.0uxion", ModifyInterChainGenesis(ModifyInterChainGenesisFn{ModifyGenesisShortProposals}, [][]string{{votingPeriod, maxDepositPeriod}})) + xion, ctx := td.xionChain, td.ctx + + config := types.GetConfig() + config.SetBech32PrefixForAccount("xion", "xionpub") + + // Create and Fund User Wallets + t.Log("creating and funding user accounts") + fundAmount := int64(10_000_000) + users := ibctest.GetAndFundTestUsers(t, ctx, "default", fundAmount, xion) + xionUser := users[0] + err := testutil.WaitForBlocks(ctx, 8, xion) + require.NoError(t, err) + t.Logf("created xion user %s", xionUser.FormattedAddress()) + + xionUserBalInitial, err := xion.GetBalance(ctx, xionUser.FormattedAddress(), xion.Config().Denom) + require.NoError(t, err) + require.Equal(t, fundAmount, xionUserBalInitial) + + // register any needed msg types + xion.Config().EncodingConfig.InterfaceRegistry.RegisterImplementations( + (*types.Msg)(nil), + &xiontypes.MsgSetPlatformPercentage{}, + &xiontypes.MsgSend{}, + &wasmtypes.MsgInstantiateContract{}, + &wasmtypes.MsgStoreCode{}, + &aatypes.MsgUpdateParams{}, + &aatypes.MsgRegisterAccount{}, + ) + xion.Config().EncodingConfig.InterfaceRegistry.RegisterImplementations((*authtypes.AccountI)(nil), &aatypes.AbstractAccount{}) + xion.Config().EncodingConfig.InterfaceRegistry.RegisterImplementations((*cryptotypes.PubKey)(nil), &aatypes.NilPubKey{}) + + // prepare the JWT key and data + fp, err := os.Getwd() + require.NoError(t, err) + + // deploy the contract + codeIDStr, err := xion.StoreContract(ctx, xionUser.FormattedAddress(), + path.Join(fp, "integration_tests", "testdata", "contracts", "account_updatable-aarch64.wasm")) + require.NoError(t, err) + + // retrieve the hash + codeResp, err := ExecQuery(t, ctx, xion.FullNodes[0], + "wasm", "code-info", codeIDStr) + require.NoError(t, err) + t.Logf("code response: %s", codeResp) + + sub := "integration-test-user" + aud := "integration-test-project" + + authenticatorDetails := map[string]string{} + authenticatorDetails["sub"] = sub + authenticatorDetails["aud"] = aud + + authenticator := map[string]interface{}{} + authenticator["Jwt"] = authenticatorDetails + + instantiateMsg := map[string]interface{}{} + instantiateMsg["id"] = 0 + instantiateMsg["authenticator"] = authenticator + + // predict the contract address so it can be verified + salt := "0" + creatorAddr := types.AccAddress(xionUser.Address()) + codeHash, err := hex.DecodeString(codeResp["data_hash"].(string)) + require.NoError(t, err) + predictedAddr := wasmkeeper.BuildContractAddressPredictable(codeHash, creatorAddr, []byte(salt), []byte{}) + t.Logf("predicted address: %s", predictedAddr.String()) + + privateKeyBz, err := os.ReadFile("./integration_tests/testdata/keys/jwtRS256.key") + require.NoError(t, err) + privateKey, err := jwt.ParseRSAPrivateKeyFromPEM(privateKeyBz) + require.NoError(t, err) + t.Logf("private key: %v", privateKey) + + publicKey, err := jwk.New(privateKey) + require.NoError(t, err) + publicKeyJSON, err := json.Marshal(publicKey) + require.NoError(t, err) + t.Logf("public key: %s", publicKeyJSON) + + // sha256 the contract addr, as it expects + signatureBz := sha256.Sum256([]byte(predictedAddr.String())) + signature := base64.StdEncoding.EncodeToString(signatureBz[:]) + + now := time.Now() + fiveAgo := now.Add(-time.Second * 5) + inFive := now.Add(time.Minute * 5) + + auds := jwt.ClaimStrings{aud} + token := jwt.NewWithClaims(jwt.SigningMethodRS256, jwt.MapClaims{ + "iss": aud, + "sub": sub, + "aud": auds, + "exp": inFive.Unix(), + "nbf": fiveAgo.Unix(), + "iat": fiveAgo.Unix(), + "transaction_hash": signature, + }) + t.Logf("jwt claims: %v", token) + + // sign the JWT with the predefined key + output, err := token.SignedString(privateKey) + require.NoError(t, err) + t.Logf("signed token: %s", output) + + instantiateMsg["signature"] = []byte(output) + instantiateMsgStr, err := json.Marshal(instantiateMsg) + require.NoError(t, err) + t.Logf("inst msg: %s", string(instantiateMsgStr)) + + // register the account + t.Logf("registering account: %s", instantiateMsgStr) + registerCmd := []string{ + "abstract-account", "register", + codeIDStr, string(instantiateMsgStr), + "--salt", salt, + "--funds", "10000uxion", + "--chain-id", xion.Config().ChainID, + } + t.Logf("sender: %s", xionUser.FormattedAddress()) + t.Logf("register cmd: %s", registerCmd) + + txHash, err := ExecTx(t, ctx, xion.FullNodes[0], xionUser.KeyName(), registerCmd...) + require.NoError(t, err) + t.Logf("tx hash: %s", txHash) + + contractsResponse, err := ExecQuery(t, ctx, xion.FullNodes[0], "wasm", "contracts", codeIDStr) + require.NoError(t, err) + + contract := contractsResponse["contracts"].([]interface{})[0].(string) + + err = testutil.WaitForBlocks(ctx, 1, xion) + require.NoError(t, err) + newBalance, err := xion.GetBalance(ctx, contract, xion.Config().Denom) + require.NoError(t, err) + require.Equal(t, int64(10_000), newBalance) + + // get the account from the chain. there might be a better way to do this + accountResponse, err := ExecQuery(t, ctx, xion.FullNodes[0], + "account", contract) + require.NoError(t, err) + t.Logf("account response: %s", accountResponse) + + delete(accountResponse, "@type") + var account aatypes.AbstractAccount + accountJSON, err := json.Marshal(accountResponse) + require.NoError(t, err) + + encodingConfig := xionapp.MakeEncodingConfig() + err = encodingConfig.Marshaler.UnmarshalJSON(accountJSON, &account) + require.NoError(t, err) + + // create the raw tx + sendMsg := fmt.Sprintf(` + { + "body": { + "messages": [ + { + "@type": "/cosmos.bank.v1beta1.MsgSend", + "from_address": "%s", + "to_address": "%s", + "amount": [ + { + "denom": "%s", + "amount": "1337" + } + ] + } + ], + "memo": "", + "timeout_height": "0", + "extension_options": [], + "non_critical_extension_options": [] + }, + "auth_info": { + "signer_infos": [], + "fee": { + "amount": [], + "gas_limit": "200000", + "payer": "", + "granter": "" + }, + "tip": null + }, + "signatures": [] + } + `, contract, xionUser.FormattedAddress(), "uxion") + + tx, err := encodingConfig.TxConfig.TxJSONDecoder()([]byte(sendMsg)) + require.NoError(t, err) + + // create the sign bytes + + signerData := authsigning.SignerData{ + Address: account.GetAddress().String(), + ChainID: xion.Config().ChainID, + AccountNumber: account.GetAccountNumber(), + Sequence: account.GetSequence(), + PubKey: account.GetPubKey(), + } + + txBuilder, err := encodingConfig.TxConfig.WrapTxBuilder(tx) + require.NoError(t, err) + + sigData := signing.SingleSignatureData{ + SignMode: signing.SignMode_SIGN_MODE_DIRECT, + Signature: nil, + } + + sig := signing.SignatureV2{ + PubKey: account.GetPubKey(), + Data: &sigData, + Sequence: account.GetSequence(), + } + + err = txBuilder.SetSignatures(sig) + require.NoError(t, err) + + signBytes, err := encodingConfig.TxConfig.SignModeHandler().GetSignBytes(signing.SignMode_SIGN_MODE_DIRECT, signerData, txBuilder.GetTx()) + require.NoError(t, err) + + // our signature is the sha256 of the signbytes + signatureBz = sha256.Sum256(signBytes) + signature = base64.StdEncoding.EncodeToString(signatureBz[:]) + + // we need to create a new valid token, making sure the time works + now = time.Now() + fiveAgo = now.Add(-time.Second * 5) + inFive = now.Add(time.Minute * 5) + + token = jwt.NewWithClaims(jwt.SigningMethodRS256, jwt.MapClaims{ + "iss": aud, + "sub": sub, + "aud": auds, + "exp": inFive.Unix(), + "nbf": fiveAgo.Unix(), + "iat": fiveAgo.Unix(), + "transaction_hash": signature, + }) + t.Logf("jwt claims: %v", token) + + // sign the JWT with the predefined key + signedTokenStr, err := token.SignedString(privateKey) + require.NoError(t, err) + + // add the auth index to the signature + signedTokenBz := []byte(signedTokenStr) + sigBytes := append([]byte{0}, signedTokenBz...) + + sigData = signing.SingleSignatureData{ + SignMode: signing.SignMode_SIGN_MODE_DIRECT, + Signature: sigBytes, + } + + sig = signing.SignatureV2{ + PubKey: account.GetPubKey(), + Data: &sigData, + Sequence: account.GetSequence(), + } + err = txBuilder.SetSignatures(sig) + require.NoError(t, err) + + jsonTx, err := encodingConfig.TxConfig.TxJSONEncoder()(txBuilder.GetTx()) + require.NoError(t, err) + t.Logf("json tx: %s", jsonTx) + + output, err = ExecBroadcast(t, ctx, xion.FullNodes[0], jsonTx) + require.NoError(t, err) + t.Logf("output: %s", output) + + err = testutil.WaitForBlocks(ctx, 2, xion) + require.NoError(t, err) + newBalance, err = xion.GetBalance(ctx, contract, xion.Config().Denom) + require.NoError(t, err) + require.Equal(t, int64(10_000-1337), newBalance) +} diff --git a/integration_tests/testdata/contracts/account_updatable-aarch64.wasm b/integration_tests/testdata/contracts/account_updatable-aarch64.wasm index 0ed245da46d7451f2ce8f43ff9e7374f1e1b9525..13ddb4fa81ff50bad9bf35f9e2958e144f614a54 100644 GIT binary patch literal 380742 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 z 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 Oz;*g=*n+89uKxiR;36Ub literal 160787 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 MJl8I+Q`+nQFD4%t!~g&Q diff --git a/integration_tests/testdata/keys/jwtRS256.key b/integration_tests/testdata/keys/jwtRS256.key new file mode 100644 index 00000000..f0aecd3a --- /dev/null +++ b/integration_tests/testdata/keys/jwtRS256.key @@ -0,0 +1,51 @@ +-----BEGIN RSA PRIVATE KEY----- +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 +-----END RSA PRIVATE KEY----- diff --git a/integration_tests/testdata/keys/jwtRS256.key.pub b/integration_tests/testdata/keys/jwtRS256.key.pub new file mode 100644 index 00000000..5b2d5f96 --- /dev/null +++ b/integration_tests/testdata/keys/jwtRS256.key.pub @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCiWDtMXdpqL7BHgdMN7mhH5ZGESx1be747cgkeXQGIeSZHgwuyQcb0fOK9aheyWhQGcEysU3E4fTHlw0wjTuiLg95FsfJKKiBFb0Jc+Mlo2VOL6lP8iAoWzIk1ewvLOudqMuQNtBTqlGweY14vSEA5S/jyu1e/xVVZY3yiQl6EPar03ssegUA6YhQQ+D9VMdO3wr/87714xko3h4yOH/j6zFFfo1c9I9PztdGWsrgZnilR2nzorS04UuHA7hSPQmQw18jzZ5VnW0BsOWqN3yMWcBvx9abzC11pM1sv8ABeZsOGzDAk7KvDx8BFkiGtdJ0oFZrp7iTuwvBMjL447yxp5ueUBGyMay3tkLObDkoKbZy0RWXeFiEfDJe78Dms5uUytXcfQbtap4owIxVInXWyyuWyZ9WE0jC7VCW3kZiY9NMmIKAZQZHFmSAPI7KMU0eCVillqYIbIn2jKh+y6QQaioxDpbOMWL+GNVqnNeLsuL5DQ6MSikhRQMOB5SuCNsZjR6IcjqwDPmGhoPRCNz17ceTr7LtVwoJMIBqdk6UlXS8mQcH3wsEuH2oChVR6L9VosV7Yhx9WWsv/jdpeWweGv9JRBjmkc+VQxtCKET/nt2k9GHfWoNf/DrJ7x2KWeI/wmakoza4jCcnTHuF8njlBrSgseasaXNj3CL5EY/RhSQ== mv@invidia-2.local diff --git a/integration_tests/utils.go b/integration_tests/utils.go index 079b9fab..8ba0f548 100644 --- a/integration_tests/utils.go +++ b/integration_tests/utils.go @@ -4,6 +4,8 @@ import ( "context" "encoding/json" "fmt" + "path" + "math/rand" "os" "strconv" @@ -14,9 +16,8 @@ import ( "cosmossdk.io/math" "github.com/cosmos/cosmos-sdk/crypto/keyring" authTx "github.com/cosmos/cosmos-sdk/x/auth/tx" - "github.com/icza/dyno" - "github.com/docker/docker/client" + "github.com/icza/dyno" "github.com/strangelove-ventures/interchaintest/v7" "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" "github.com/strangelove-ventures/interchaintest/v7/ibc" @@ -505,6 +506,7 @@ func ExecTx(t *testing.T, ctx context.Context, tn *cosmos.ChainNode, keyName str func ExecQuery(t *testing.T, ctx context.Context, tn *cosmos.ChainNode, command ...string) (map[string]interface{}, error) { jsonRes := make(map[string]interface{}) + t.Logf("querying with cmd: %s", command) output, _, err := tn.ExecQuery(ctx, command...) if err != nil { return jsonRes, err @@ -520,12 +522,24 @@ func ExecBin(t *testing.T, ctx context.Context, tn *cosmos.ChainNode, keyName st if err != nil { return jsonRes, err } - fmt.Printf("%+s\n", output) require.NoError(t, json.Unmarshal(output, &jsonRes)) return jsonRes, nil } +func ExecBroadcast(_ *testing.T, ctx context.Context, tn *cosmos.ChainNode, tx []byte) (string, error) { + if err := tn.WriteFile(ctx, tx, "tx.json"); err != nil { + return "", err + } + + cmd := tn.NodeCommand("tx", "broadcast", path.Join(tn.HomeDir(), "tx.json")) + + stdout, _, err := tn.Exec(ctx, cmd, nil) + if err != nil { + return "", err + } + return string(stdout), err +} func UploadFileToContainer(t *testing.T, ctx context.Context, tn *cosmos.ChainNode, file *os.File) error { content, err := os.ReadFile(file.Name()) diff --git a/x/xion/client/cli/tx.go b/x/xion/client/cli/tx.go index ec86a2bf..9debb1fa 100644 --- a/x/xion/client/cli/tx.go +++ b/x/xion/client/cli/tx.go @@ -2,10 +2,15 @@ package cli import ( "context" + "encoding/hex" + "encoding/json" "errors" "fmt" "os" + "strconv" + wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" + wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" "github.com/burnt-labs/xion/x/xion/types" "github.com/cosmos/gogoproto/proto" @@ -24,8 +29,12 @@ import ( ) const ( - FlagSplit = "split" - signMode = signing.SignMode_SIGN_MODE_DIRECT + FlagSplit = "split" + signMode = signing.SignMode_SIGN_MODE_DIRECT + flagSalt = "salt" + flagFunds = "funds" + flagAuthenticator = "authenticator" + flagAuthenticatorID = "authenticator-id" ) // NewTxCmd returns a root CLI command handler for all x/xion transaction commands. @@ -42,6 +51,7 @@ func NewTxCmd() *cobra.Command { NewSendTxCmd(), NewMultiSendTxCmd(), NewSignCmd(), + NewRegisterCmd(), ) return txCmd @@ -158,7 +168,109 @@ When using '--dry-run' a key name cannot be used, only a bech32 address. return cmd } -// NewSendTxCmd returns a CLI command handler for creating a MsgSend transaction. +func NewRegisterCmd() *cobra.Command { + cmd := &cobra.Command{ + Use: "register [code-id] [keyname] --salt [string] --funds [coins,optional] --authenticator [Seckp256|Jwt,required] --authenticator-id [uint8]", + Short: "Register an abstract account", + Args: cobra.MaximumNArgs(2), + RunE: func(cmd *cobra.Command, args []string) error { + if err := cmd.Flags().Set(flags.FlagFrom, args[1]); err != nil { + return err + } + + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + + codeID, err := strconv.ParseUint(args[0], 10, 64) + if err != nil { + return err + } + + authenticatorID, err := cmd.Flags().GetUint8(flagAuthenticatorID) + if err != nil { + return err + } + + salt, err := cmd.Flags().GetString(flagSalt) + if err != nil { + return fmt.Errorf("salt: %s", err) + } + + amountStr, err := cmd.Flags().GetString(flagFunds) + if err != nil { + return fmt.Errorf("amount: %s", err) + } + + authenticatorType, err := cmd.Flags().GetString(flagAuthenticator) + if err != nil { + return fmt.Errorf("authenticator: %s", err) + } + + amount, err := sdk.ParseCoinsNormalized(amountStr) + if err != nil { + return fmt.Errorf("amount: %s", err) + } + queryClient := wasmtypes.NewQueryClient(clientCtx) + + codeResp, err := queryClient.Code( + context.Background(), + &wasmtypes.QueryCodeRequest{ + CodeId: codeID, + }, + ) + creatorAddr := sdk.AccAddress(clientCtx.GetFromAddress()) + codeHash, err := hex.DecodeString(codeResp.DataHash.String()) + predictedAddr := wasmkeeper.BuildContractAddressPredictable(codeHash, creatorAddr, []byte(salt), []byte{}) + + signature, pubKey, err := clientCtx.Keyring.SignByAddress(clientCtx.GetFromAddress(), []byte(predictedAddr.String())) + if err != nil { + return fmt.Errorf("error signing predicted address : %s\n", err) + } + + authenticator := map[string]interface{}{} + authenticatorDetails := map[string]interface{}{} + authenticatorDetails["pubkey"] = pubKey.Bytes() + authenticator[authenticatorType] = authenticatorDetails + instantiateMsg := map[string]interface{}{} + instantiateMsg["id"] = authenticatorID + instantiateMsg["authenticator"] = authenticator + + instantiateMsg["signature"] = signature + instantiateMsgStr, err := json.Marshal(instantiateMsg) + if err != nil { + return fmt.Errorf("error signing contract msg : %s", err) + } + + msg := &aatypes.MsgRegisterAccount{ + Sender: clientCtx.GetFromAddress().String(), + CodeID: codeID, + Msg: []byte(string(instantiateMsgStr)), + Funds: amount, + Salt: []byte(salt), + } + + if err := msg.ValidateBasic(); err != nil { + return err + } + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + return nil + }, + SilenceUsage: true, + } + + flags.AddTxFlagsToCmd(cmd) + + cmd.Flags().String(flagSalt, "", "Salt value used in determining account address") + cmd.Flags().String(flagAuthenticator, "", "Authenticator type: Seckp256K1|JWT") + cmd.Flags().String(flagFunds, "", "Coins to send to the account during instantiation") + cmd.Flags().Uint8(flagAuthenticatorID, 0, "Authenticator index locator") + + return cmd +} + +// NewSignCmd returns a CLI command to sign a Tx with the Smart Contract Account signer func NewSignCmd() *cobra.Command { cmd := &cobra.Command{ Use: "sign [keyname] [path/to/tx.json]", @@ -174,22 +286,26 @@ func NewSignCmd() *cobra.Command { if err != nil { return err } + authenticatorID, err := cmd.Flags().GetUint8(flagAuthenticatorID) + if err != nil { + return err + } txBz, err := os.ReadFile(args[1]) if err != nil { - panic(err) + return err } stdTx, err := clientCtx.TxConfig.TxJSONDecoder()(txBz) if err != nil { - panic(err) + return err } - queryClient := authtypes.NewQueryClient(clientCtx) // TODO: determine if the ClientCtx has a qurey client + queryClient := authtypes.NewQueryClient(clientCtx) signerAcc, err := getSignerOfTx(queryClient, stdTx) if err != nil { - panic(err) + return err } signerData := authsigning.SignerData{ @@ -211,7 +327,7 @@ func NewSignCmd() *cobra.Command { } sig := signing.SignatureV2{ - PubKey: signerAcc.GetPubKey(), // NOTE: NilPubKey + PubKey: signerAcc.GetPubKey(), Data: &sigData, Sequence: signerAcc.GetSequence(), } @@ -224,11 +340,12 @@ func NewSignCmd() *cobra.Command { if err != nil { panic(err) } - sigBytes, _, err := clientCtx.Keyring.Sign(clientCtx.GetFromName(), signBytes) + signedBytes, _, err := clientCtx.Keyring.Sign(clientCtx.GetFromName(), signBytes) if err != nil { panic(err) } + sigBytes := append([]byte{authenticatorID}, signedBytes...) sigData = signing.SingleSignatureData{ SignMode: signMode, Signature: sigBytes, @@ -258,10 +375,27 @@ func NewSignCmd() *cobra.Command { } flags.AddTxFlagsToCmd(cmd) - + cmd.Flags().Uint8(flagAuthenticatorID, 0, "Authenticator index locator") return cmd } +func getAccount(queryClient authtypes.QueryClient, address string) (*authtypes.BaseAccount, error) { + res, err := queryClient.Account(context.Background(), &authtypes.QueryAccountRequest{Address: address}) + if err != nil { + return nil, err + } + if res.Account.TypeUrl != typeURL((*authtypes.BaseAccount)(nil)) { + return nil, fmt.Errorf("address %s is not an BaseAccount", address) + } + + var acc = &authtypes.BaseAccount{} + if err = proto.Unmarshal(res.Account.Value, acc); err != nil { + return nil, err + } + + return acc, nil +} + func getSignerOfTx(queryClient authtypes.QueryClient, stdTx sdk.Tx) (*aatypes.AbstractAccount, error) { var signerAddr sdk.AccAddress = nil for i, msg := range stdTx.GetMsgs() { From 70ec86e56b4c9a50717e10408c1e1a89941da894 Mon Sep 17 00:00:00 2001 From: Francis Roch Date: Fri, 2 Feb 2024 00:34:52 -0500 Subject: [PATCH 223/501] Fixes `xiond export` --- go.mod | 4 ++-- go.sum | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/go.mod b/go.mod index 642c3156..95dfcaba 100644 --- a/go.mod +++ b/go.mod @@ -45,7 +45,7 @@ require ( github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.0.0-20230803181732-7c8f814d3b79 github.com/cosmos/ibc-apps/modules/ibc-hooks/v7 v7.0.0-20230802211043-d72e83c94350 github.com/golang/mock v1.6.0 - github.com/larry0x/abstract-account v0.0.0-20230708200055-2ea462db913f + github.com/larry0x/abstract-account v0.0.0-20240202022305-255071ed91ee github.com/osmosis-labs/fee-abstraction/v4 v4.0.0-20230812032455-33dfc391894d github.com/spf13/viper v1.16.0 google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529 @@ -205,4 +205,4 @@ replace ( github.com/tendermint/tendermint => github.com/informalsystems/tendermint v0.34.24 ) -replace github.com/larry0x/abstract-account => github.com/burnt-labs/abstract-account v0.0.0-20230904175526-2716f00fddf3 +replace github.com/larry0x/abstract-account => github.com/burnt-labs/abstract-account v0.0.0-20240202022305-255071ed91ee diff --git a/go.sum b/go.sum index 0aa02e0e..4a799d9f 100644 --- a/go.sum +++ b/go.sum @@ -262,8 +262,8 @@ github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY github.com/btcsuite/btcd/btcutil v1.1.2 h1:XLMbX8JQEiwMcYft2EGi8zPUkoa0abKIU6/BJSRsjzQ= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= github.com/bufbuild/protocompile v0.4.0 h1:LbFKd2XowZvQ/kajzguUp2DC9UEIQhIq77fZZlaQsNA= -github.com/burnt-labs/abstract-account v0.0.0-20230904175526-2716f00fddf3 h1:6FxpgV0kveYp9AESjIUIFWYwIhogX+zW43lNZ8ix0pA= -github.com/burnt-labs/abstract-account v0.0.0-20230904175526-2716f00fddf3/go.mod h1:R+/UYwxE92VUFOWLyyuBa2RRI2lUwb9uHwRWDBrNzx0= +github.com/burnt-labs/abstract-account v0.0.0-20240202022305-255071ed91ee h1:04DdmDV4PnDOIyEeasOcu+fGDPzXpappY8Um8c+PSRI= +github.com/burnt-labs/abstract-account v0.0.0-20240202022305-255071ed91ee/go.mod h1:R+/UYwxE92VUFOWLyyuBa2RRI2lUwb9uHwRWDBrNzx0= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= From a3f5d70f9628792ce625f9af0394b2a127321a0a Mon Sep 17 00:00:00 2001 From: Ash Date: Tue, 13 Feb 2024 15:48:16 -0700 Subject: [PATCH 224/501] initial migration pass --- app/app.go | 3 ++ x/xion/keeper/keeper.go | 32 +++++++++++++------- x/xion/keeper/migrations.go | 22 ++++++++++++++ x/xion/migrations/v1/migration.go | 49 +++++++++++++++++++++++++++++++ x/xion/module.go | 5 ++++ x/xion/types/expected_keepers.go | 13 ++++++++ 6 files changed, 113 insertions(+), 11 deletions(-) create mode 100644 x/xion/keeper/migrations.go create mode 100644 x/xion/migrations/v1/migration.go diff --git a/app/app.go b/app/app.go index 259ae3b7..908ad91f 100644 --- a/app/app.go +++ b/app/app.go @@ -586,6 +586,9 @@ func NewWasmApp( app.GetSubspace(xiontypes.ModuleName), app.BankKeeper, app.AccountKeeper, + app.ContractKeeper, + app.WasmKeeper, + app.AbstractAccountKeeper, authtypes.NewModuleAddress(govtypes.ModuleName).String()) // Configure the hooks keeper diff --git a/x/xion/keeper/keeper.go b/x/xion/keeper/keeper.go index 1d46d59b..aec07a7b 100644 --- a/x/xion/keeper/keeper.go +++ b/x/xion/keeper/keeper.go @@ -2,6 +2,7 @@ package keeper import ( "cosmossdk.io/math" + wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" "github.com/burnt-labs/xion/x/xion/types" "github.com/cometbft/cometbft/libs/log" "github.com/cosmos/cosmos-sdk/codec" @@ -11,11 +12,14 @@ import ( ) type Keeper struct { - cdc codec.BinaryCodec - storeKey storetypes.StoreKey - paramSpace paramtypes.Subspace - bankKeeper types.BankKeeper - accountKeeper types.AccountKeeper + cdc codec.BinaryCodec + storeKey storetypes.StoreKey + paramSpace paramtypes.Subspace + bankKeeper types.BankKeeper + accountKeeper types.AccountKeeper + ContractOpsKeeper wasmtypes.ContractOpsKeeper + ContractViewKeeper wasmtypes.ViewKeeper + AAKeeper types.AbstractAccountKeeper // the address capable of executing a MsgSetPlatformPercentage message. // Typically, this should be the x/gov module account @@ -27,15 +31,21 @@ func NewKeeper(cdc codec.BinaryCodec, paramSpace paramtypes.Subspace, bankKeeper types.BankKeeper, accountKeeper types.AccountKeeper, + wasmOpsKeeper wasmtypes.ContractOpsKeeper, + wasmViewKeeper wasmtypes.ViewKeeper, + aaKeeper types.AbstractAccountKeeper, authority string) Keeper { return Keeper{ - storeKey: key, - cdc: cdc, - paramSpace: paramSpace, - bankKeeper: bankKeeper, - accountKeeper: accountKeeper, - authority: authority, + storeKey: key, + cdc: cdc, + paramSpace: paramSpace, + bankKeeper: bankKeeper, + accountKeeper: accountKeeper, + ContractOpsKeeper: wasmOpsKeeper, + ContractViewKeeper: wasmViewKeeper, + AAKeeper: aaKeeper, + authority: authority, } } diff --git a/x/xion/keeper/migrations.go b/x/xion/keeper/migrations.go new file mode 100644 index 00000000..04ac4dfb --- /dev/null +++ b/x/xion/keeper/migrations.go @@ -0,0 +1,22 @@ +package keeper + +import ( + wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" + v1 "github.com/burnt-labs/xion/x/xion/migrations/v1" + "github.com/burnt-labs/xion/x/xion/types" + sdk "github.com/cosmos/cosmos-sdk/types" +) + +type Migrator struct { + wasmOpsKeeper wasmtypes.ContractOpsKeeper + wasmViewKeeper wasmtypes.ViewKeeper + aaKeeper types.AbstractAccountKeeper +} + +func NewMigrator(wasmOpsKeeper wasmtypes.ContractOpsKeeper, wasmViewKeeper wasmtypes.ViewKeeper, aaKeeper types.AbstractAccountKeeper) Migrator { + return Migrator{wasmOpsKeeper: wasmOpsKeeper, wasmViewKeeper: wasmViewKeeper, aaKeeper: aaKeeper} +} + +func (m Migrator) Migrate1to2(ctx sdk.Context) error { + return v1.MigrateStore(ctx, m.wasmOpsKeeper, m.wasmViewKeeper, m.aaKeeper) +} diff --git a/x/xion/migrations/v1/migration.go b/x/xion/migrations/v1/migration.go new file mode 100644 index 00000000..7f4a49a6 --- /dev/null +++ b/x/xion/migrations/v1/migration.go @@ -0,0 +1,49 @@ +package v1 + +import ( + wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" + "github.com/burnt-labs/xion/x/xion/types" + sdk "github.com/cosmos/cosmos-sdk/types" +) + +func MigrateStore(ctx sdk.Context, wasmOpsKeeper wasmtypes.ContractOpsKeeper, wasmViewKeeper wasmtypes.ViewKeeper, aaKeeper types.AbstractAccountKeeper) error { + const OriginalCodeId = 21 + const NewCodeId = -1 // todo: set + + // the account contract should always be pinned + err := wasmOpsKeeper.PinCode(ctx, NewCodeId) + if err != nil { + return err + } + + // iterate through all existing accounts at this code ID, and migrate them + wasmViewKeeper.IterateContractsByCode(ctx, OriginalCodeId, func(instance sdk.AccAddress) bool { + _, err = wasmOpsKeeper.Migrate(ctx, instance, instance, NewCodeId, nil) + + // if there is an error, abort iteration and report it + return err == nil + }) + if err != nil { + return err + } + + // as the previous contract is no longer the main account target, it doesn't + // need to be pinned + err = wasmOpsKeeper.UnpinCode(ctx, OriginalCodeId) + if err != nil { + return err + } + + // adjust the aa registration endpoint to point at the new code ID + aaParams, err := aaKeeper.GetParams(ctx) + if err != nil { + return err + } + aaParams.AllowedCodeIDs = []uint64{NewCodeId} + err = aaKeeper.SetParams(ctx, aaParams) + if err != nil { + return err + } + + return nil +} diff --git a/x/xion/module.go b/x/xion/module.go index 9f07bcd2..a9764334 100644 --- a/x/xion/module.go +++ b/x/xion/module.go @@ -91,6 +91,11 @@ func (AppModule) RegisterInvariants(ir sdk.InvariantRegistry) { // RegisterServices registers module services. func (am AppModule) RegisterServices(cfg module.Configurator) { types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.keeper)) + + m := keeper.NewMigrator(am.keeper.ContractOpsKeeper, am.keeper.ContractViewKeeper, am.keeper.AAKeeper) + if err := cfg.RegisterMigration(types.ModuleName, 1, m.Migrate1to2); err != nil { + panic(fmt.Sprintf("failed to migrate x/xion from version 1 to 2: %v", err)) + } } // InitGenesis performs genesis initialization for the ibc-29-fee module. It returns diff --git a/x/xion/types/expected_keepers.go b/x/xion/types/expected_keepers.go index 51ee91fb..79e85d05 100644 --- a/x/xion/types/expected_keepers.go +++ b/x/xion/types/expected_keepers.go @@ -4,6 +4,7 @@ import ( sdktypes "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" + aatypes "github.com/larry0x/abstract-account/x/abstractaccount/types" ) // BankKeeper defines the contract needed to be fulfilled for banking and supply @@ -36,3 +37,15 @@ type BankKeeper interface { type AccountKeeper interface { GetModuleAccount(ctx sdktypes.Context, moduleName string) authtypes.ModuleAccountI } + +type WasmKeeper interface { + Migrate(ctx sdktypes.Context, contractAddress, caller sdktypes.AccAddress, newCodeID uint64, msg []byte) ([]byte, error) + IterateContractsByCode(ctx sdktypes.Context, codeID uint64, cb func(address sdktypes.AccAddress) bool) + PinCode(ctx sdktypes.Context, codeID uint64) error + UnpinCode(ctx sdktypes.Context, codeID uint64) error +} + +type AbstractAccountKeeper interface { + GetParams(ctx sdktypes.Context) (*aatypes.Params, error) + SetParams(ctx sdktypes.Context, params *aatypes.Params) error +} From d13e32b6c1d0edc2650bcaa4e06d1c8c8cf7d76b Mon Sep 17 00:00:00 2001 From: Ash Date: Fri, 16 Feb 2024 14:11:36 -0700 Subject: [PATCH 225/501] original contract --- integration_tests/account_migration_test.go | 339 ++++++++++++++++++ .../account_updatable-aarch64-previous.wasm | Bin 0 -> 380742 bytes 2 files changed, 339 insertions(+) create mode 100644 integration_tests/account_migration_test.go create mode 100644 integration_tests/testdata/contracts/account_updatable-aarch64-previous.wasm diff --git a/integration_tests/account_migration_test.go b/integration_tests/account_migration_test.go new file mode 100644 index 00000000..e1f9f530 --- /dev/null +++ b/integration_tests/account_migration_test.go @@ -0,0 +1,339 @@ +package integration_tests + +import ( + "crypto/sha256" + "encoding/base64" + "encoding/hex" + "encoding/json" + "fmt" + "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" + "os" + "path" + "testing" + "time" + + wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" + wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" + xionapp "github.com/burnt-labs/xion/app" + xiontypes "github.com/burnt-labs/xion/x/xion/types" + cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" + "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/tx/signing" + authsigning "github.com/cosmos/cosmos-sdk/x/auth/signing" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + "github.com/golang-jwt/jwt/v4" + aatypes "github.com/larry0x/abstract-account/x/abstractaccount/types" + "github.com/lestrrat-go/jwx/jwk" + ibctest "github.com/strangelove-ventures/interchaintest/v7" + "github.com/strangelove-ventures/interchaintest/v7/testutil" + "github.com/stretchr/testify/require" +) + +func TestAbstractAccountMigration(t *testing.T) { + if testing.Short() { + t.Skip("skipping in short mode") + } + t.Parallel() + + td := BuildXionChain(t, "0.0uxion", ModifyInterChainGenesis(ModifyInterChainGenesisFn{ModifyGenesisShortProposals}, [][]string{{votingPeriod, maxDepositPeriod}})) + xion, ctx := td.xionChain, td.ctx + + config := types.GetConfig() + config.SetBech32PrefixForAccount("xion", "xionpub") + + // Create and Fund User Wallets + t.Log("creating and funding user accounts") + fundAmount := int64(10_000_000) + users := ibctest.GetAndFundTestUsers(t, ctx, "default", fundAmount, xion) + xionUser := users[0] + err := testutil.WaitForBlocks(ctx, 8, xion) + require.NoError(t, err) + t.Logf("created xion user %s", xionUser.FormattedAddress()) + + xionUserBalInitial, err := xion.GetBalance(ctx, xionUser.FormattedAddress(), xion.Config().Denom) + require.NoError(t, err) + require.Equal(t, fundAmount, xionUserBalInitial) + + // register any needed msg types + xion.Config().EncodingConfig.InterfaceRegistry.RegisterImplementations( + (*types.Msg)(nil), + &xiontypes.MsgSetPlatformPercentage{}, + &xiontypes.MsgSend{}, + &wasmtypes.MsgInstantiateContract{}, + &wasmtypes.MsgStoreCode{}, + &aatypes.MsgUpdateParams{}, + &aatypes.MsgRegisterAccount{}, + ) + xion.Config().EncodingConfig.InterfaceRegistry.RegisterImplementations((*authtypes.AccountI)(nil), &aatypes.AbstractAccount{}) + xion.Config().EncodingConfig.InterfaceRegistry.RegisterImplementations((*cryptotypes.PubKey)(nil), &aatypes.NilPubKey{}) + + // prepare the JWT key and data + fp, err := os.Getwd() + require.NoError(t, err) + + // deploy the contract + codeIDStr, err := xion.StoreContract(ctx, xionUser.FormattedAddress(), + path.Join(fp, "integration_tests", "testdata", "contracts", "account_updatable-aarch64-previous.wasm")) + require.NoError(t, err) + + // retrieve the hash + codeResp, err := ExecQuery(t, ctx, xion.FullNodes[0], + "wasm", "code-info", codeIDStr) + require.NoError(t, err) + t.Logf("code response: %s", codeResp) + + sub := "integration-test-user" + aud := "integration-test-project" + + authenticatorDetails := map[string]string{} + authenticatorDetails["sub"] = sub + authenticatorDetails["aud"] = aud + + authenticator := map[string]interface{}{} + authenticator["Jwt"] = authenticatorDetails + + instantiateMsg := map[string]interface{}{} + instantiateMsg["id"] = 0 + instantiateMsg["authenticator"] = authenticator + + // predict the contract address so it can be verified + salt := "0" + creatorAddr := types.AccAddress(xionUser.Address()) + codeHash, err := hex.DecodeString(codeResp["data_hash"].(string)) + require.NoError(t, err) + predictedAddr := wasmkeeper.BuildContractAddressPredictable(codeHash, creatorAddr, []byte(salt), []byte{}) + t.Logf("predicted address: %s", predictedAddr.String()) + + privateKeyBz, err := os.ReadFile("./integration_tests/testdata/keys/jwtRS256.key") + require.NoError(t, err) + privateKey, err := jwt.ParseRSAPrivateKeyFromPEM(privateKeyBz) + require.NoError(t, err) + t.Logf("private key: %v", privateKey) + + publicKey, err := jwk.New(privateKey) + require.NoError(t, err) + publicKeyJSON, err := json.Marshal(publicKey) + require.NoError(t, err) + t.Logf("public key: %s", publicKeyJSON) + + // sha256 the contract addr, as it expects + signatureBz := sha256.Sum256([]byte(predictedAddr.String())) + signature := base64.StdEncoding.EncodeToString(signatureBz[:]) + + now := time.Now() + fiveAgo := now.Add(-time.Second * 5) + inFive := now.Add(time.Minute * 5) + + auds := jwt.ClaimStrings{aud} + token := jwt.NewWithClaims(jwt.SigningMethodRS256, jwt.MapClaims{ + "iss": aud, + "sub": sub, + "aud": auds, + "exp": inFive.Unix(), + "nbf": fiveAgo.Unix(), + "iat": fiveAgo.Unix(), + "transaction_hash": signature, + }) + t.Logf("jwt claims: %v", token) + + // sign the JWT with the predefined key + output, err := token.SignedString(privateKey) + require.NoError(t, err) + t.Logf("signed token: %s", output) + + instantiateMsg["signature"] = []byte(output) + instantiateMsgStr, err := json.Marshal(instantiateMsg) + require.NoError(t, err) + t.Logf("inst msg: %s", string(instantiateMsgStr)) + + // register the account + t.Logf("registering account: %s", instantiateMsgStr) + registerCmd := []string{ + "abstract-account", "register", + codeIDStr, string(instantiateMsgStr), + "--salt", salt, + "--funds", "10000uxion", + "--chain-id", xion.Config().ChainID, + } + t.Logf("sender: %s", xionUser.FormattedAddress()) + t.Logf("register cmd: %s", registerCmd) + + txHash, err := ExecTx(t, ctx, xion.FullNodes[0], xionUser.KeyName(), registerCmd...) + require.NoError(t, err) + t.Logf("tx hash: %s", txHash) + + contractsResponse, err := ExecQuery(t, ctx, xion.FullNodes[0], "wasm", "contracts", codeIDStr) + require.NoError(t, err) + + contract := contractsResponse["contracts"].([]interface{})[0].(string) + + err = testutil.WaitForBlocks(ctx, 1, xion) + require.NoError(t, err) + newBalance, err := xion.GetBalance(ctx, contract, xion.Config().Denom) + require.NoError(t, err) + require.Equal(t, int64(10_000), newBalance) + + // get the account from the chain. there might be a better way to do this + accountResponse, err := ExecQuery(t, ctx, xion.FullNodes[0], + "account", contract) + require.NoError(t, err) + t.Logf("account response: %s", accountResponse) + + delete(accountResponse, "@type") + var account aatypes.AbstractAccount + accountJSON, err := json.Marshal(accountResponse) + require.NoError(t, err) + + encodingConfig := xionapp.MakeEncodingConfig() + err = encodingConfig.Marshaler.UnmarshalJSON(accountJSON, &account) + require.NoError(t, err) + + // create the raw tx + sendMsg := fmt.Sprintf(` + { + "body": { + "messages": [ + { + "@type": "/cosmos.bank.v1beta1.MsgSend", + "from_address": "%s", + "to_address": "%s", + "amount": [ + { + "denom": "%s", + "amount": "1337" + } + ] + } + ], + "memo": "", + "timeout_height": "0", + "extension_options": [], + "non_critical_extension_options": [] + }, + "auth_info": { + "signer_infos": [], + "fee": { + "amount": [], + "gas_limit": "200000", + "payer": "", + "granter": "" + }, + "tip": null + }, + "signatures": [] + } + `, contract, xionUser.FormattedAddress(), "uxion") + + tx, err := encodingConfig.TxConfig.TxJSONDecoder()([]byte(sendMsg)) + require.NoError(t, err) + + // create the sign bytes + + signerData := authsigning.SignerData{ + Address: account.GetAddress().String(), + ChainID: xion.Config().ChainID, + AccountNumber: account.GetAccountNumber(), + Sequence: account.GetSequence(), + PubKey: account.GetPubKey(), + } + + txBuilder, err := encodingConfig.TxConfig.WrapTxBuilder(tx) + require.NoError(t, err) + + sigData := signing.SingleSignatureData{ + SignMode: signing.SignMode_SIGN_MODE_DIRECT, + Signature: nil, + } + + sig := signing.SignatureV2{ + PubKey: account.GetPubKey(), + Data: &sigData, + Sequence: account.GetSequence(), + } + + err = txBuilder.SetSignatures(sig) + require.NoError(t, err) + + signBytes, err := encodingConfig.TxConfig.SignModeHandler().GetSignBytes(signing.SignMode_SIGN_MODE_DIRECT, signerData, txBuilder.GetTx()) + require.NoError(t, err) + + // our signature is the sha256 of the signbytes + signatureBz = sha256.Sum256(signBytes) + signature = base64.StdEncoding.EncodeToString(signatureBz[:]) + + // we need to create a new valid token, making sure the time works + now = time.Now() + fiveAgo = now.Add(-time.Second * 5) + inFive = now.Add(time.Minute * 5) + + token = jwt.NewWithClaims(jwt.SigningMethodRS256, jwt.MapClaims{ + "iss": aud, + "sub": sub, + "aud": auds, + "exp": inFive.Unix(), + "nbf": fiveAgo.Unix(), + "iat": fiveAgo.Unix(), + "transaction_hash": signature, + }) + t.Logf("jwt claims: %v", token) + + // sign the JWT with the predefined key + signedTokenStr, err := token.SignedString(privateKey) + require.NoError(t, err) + + // add the auth index to the signature + signedTokenBz := []byte(signedTokenStr) + sigBytes := append([]byte{0}, signedTokenBz...) + + sigData = signing.SingleSignatureData{ + SignMode: signing.SignMode_SIGN_MODE_DIRECT, + Signature: sigBytes, + } + + sig = signing.SignatureV2{ + PubKey: account.GetPubKey(), + Data: &sigData, + Sequence: account.GetSequence(), + } + err = txBuilder.SetSignatures(sig) + require.NoError(t, err) + + jsonTx, err := encodingConfig.TxConfig.TxJSONEncoder()(txBuilder.GetTx()) + require.NoError(t, err) + t.Logf("json tx: %s", jsonTx) + + output, err = ExecBroadcast(t, ctx, xion.FullNodes[0], jsonTx) + require.NoError(t, err) + t.Logf("output: %s", output) + + err = testutil.WaitForBlocks(ctx, 2, xion) + require.NoError(t, err) + newBalance, err = xion.GetBalance(ctx, contract, xion.Config().Denom) + require.NoError(t, err) + require.Equal(t, int64(10_000-1337), newBalance) + + // test of previous account usage validated. migrate to the new contract + + // deploy the new contract + newCodeIDStr, err := xion.StoreContract(ctx, xionUser.FormattedAddress(), + path.Join(fp, "integration_tests", "testdata", "contracts", "account_updatable-aarch64-previous.wasm")) + require.NoError(t, err) + + // retrieve the new hash + newCodeResp, err := ExecQuery(t, ctx, xion.FullNodes[0], + "wasm", "code-info", newCodeIDStr) + require.NoError(t, err) + t.Logf("code response: %s", newCodeResp) + + proposal := cosmos.SoftwareUpgradeProposal{ + Deposit: "500000000" + chain.Config().Denom, // greater than min deposit + Title: "Chain Upgrade 1", + Name: "account-migration", + Description: "Account migration software upgrade", + Height: haltHeight, + } + + height, err := chain.Height(ctx) + require.NoError(t, err, "error fetching height before submit upgrade proposal") + +} diff --git a/integration_tests/testdata/contracts/account_updatable-aarch64-previous.wasm b/integration_tests/testdata/contracts/account_updatable-aarch64-previous.wasm new file mode 100644 index 0000000000000000000000000000000000000000..13ddb4fa81ff50bad9bf35f9e2958e144f614a54 GIT binary patch literal 380742 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 z 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 Oz;*g=*n+89uKxiR;36Ub literal 0 HcmV?d00001 From dd586f02075c34201ee2291a7145ea1452246de7 Mon Sep 17 00:00:00 2001 From: Ash Date: Fri, 16 Feb 2024 16:03:47 -0700 Subject: [PATCH 226/501] initial pass of migration test --- integration_tests/account_migration_test.go | 43 +++++++++++++++++++-- x/xion/migrations/v1/migration.go | 2 +- 2 files changed, 40 insertions(+), 5 deletions(-) diff --git a/integration_tests/account_migration_test.go b/integration_tests/account_migration_test.go index e1f9f530..4e4c058f 100644 --- a/integration_tests/account_migration_test.go +++ b/integration_tests/account_migration_test.go @@ -1,6 +1,7 @@ package integration_tests import ( + "context" "crypto/sha256" "encoding/base64" "encoding/hex" @@ -325,15 +326,49 @@ func TestAbstractAccountMigration(t *testing.T) { require.NoError(t, err) t.Logf("code response: %s", newCodeResp) + height, err := xion.Height(ctx) + require.NoError(t, err, "error fetching height before submit upgrade proposal") + + haltHeight := height + haltHeightDelta - 3 + proposal := cosmos.SoftwareUpgradeProposal{ - Deposit: "500000000" + chain.Config().Denom, // greater than min deposit + Deposit: "500000000" + xion.Config().Denom, // greater than min deposit Title: "Chain Upgrade 1", - Name: "account-migration", + Name: "v4", Description: "Account migration software upgrade", Height: haltHeight, } - height, err := chain.Height(ctx) - require.NoError(t, err, "error fetching height before submit upgrade proposal") + upgradeTx, err := xion.LegacyUpgradeProposal(ctx, xionUser.KeyName(), proposal) + require.NoError(t, err, "error submitting software upgrade proposal tx") + + err = xion.VoteOnProposalAllValidators(ctx, upgradeTx.ProposalID, cosmos.ProposalVoteYes) + require.NoError(t, err, "failed to submit votes") + + _, err = cosmos.PollForProposalStatus(ctx, xion, height, height+haltHeightDelta, upgradeTx.ProposalID, cosmos.ProposalStatusPassed) + require.NoError(t, err, "proposal status did not change to passed in expected number of blocks") + + height, err = xion.Height(ctx) + require.NoError(t, err, "error fetching height before upgrade") + + timeoutCtx, timeoutCtxCancel := context.WithTimeout(ctx, time.Second*45) + defer timeoutCtxCancel() + + err = testutil.WaitForBlocks(timeoutCtx, int(blocksAfterUpgrade), xion) + require.NoError(t, err, "chain did not produce blocks after upgrade") + + // chain is upgraded. Check the contract is updated + + NEW_CODE_ID := uint64(25) + + // retrieve the new code ID + contractMetadataResp, err := ExecQuery(t, ctx, xion.FullNodes[0], + "wasm", "contract", contract) + require.NoError(t, err) + var contractMetadata wasmtypes.ContractInfo + err = json.Unmarshal(contractMetadataResp["contract_info"].([]byte), &contractMetadata) + require.NoError(t, err) + t.Logf("contract code id: %s", contractMetadata.CodeID) + require.Equal(t, NEW_CODE_ID, contractMetadata.CodeID) } diff --git a/x/xion/migrations/v1/migration.go b/x/xion/migrations/v1/migration.go index 7f4a49a6..db1bff1a 100644 --- a/x/xion/migrations/v1/migration.go +++ b/x/xion/migrations/v1/migration.go @@ -8,7 +8,7 @@ import ( func MigrateStore(ctx sdk.Context, wasmOpsKeeper wasmtypes.ContractOpsKeeper, wasmViewKeeper wasmtypes.ViewKeeper, aaKeeper types.AbstractAccountKeeper) error { const OriginalCodeId = 21 - const NewCodeId = -1 // todo: set + const NewCodeId = 21 // todo: set // the account contract should always be pinned err := wasmOpsKeeper.PinCode(ctx, NewCodeId) From a29fce378551e96e90c21fe9c1e316e274e95a9d Mon Sep 17 00:00:00 2001 From: Ash Date: Fri, 16 Feb 2024 16:11:29 -0700 Subject: [PATCH 227/501] log format --- integration_tests/account_migration_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integration_tests/account_migration_test.go b/integration_tests/account_migration_test.go index 4e4c058f..a7d05644 100644 --- a/integration_tests/account_migration_test.go +++ b/integration_tests/account_migration_test.go @@ -368,7 +368,7 @@ func TestAbstractAccountMigration(t *testing.T) { var contractMetadata wasmtypes.ContractInfo err = json.Unmarshal(contractMetadataResp["contract_info"].([]byte), &contractMetadata) require.NoError(t, err) - t.Logf("contract code id: %s", contractMetadata.CodeID) + t.Logf("contract code id: %d", contractMetadata.CodeID) require.Equal(t, NEW_CODE_ID, contractMetadata.CodeID) } From 7cae0efadadff516884ac6b3d81592953b6559c2 Mon Sep 17 00:00:00 2001 From: Ash Date: Sun, 18 Feb 2024 20:21:21 -0700 Subject: [PATCH 228/501] test in ci --- .github/workflows/integration-tests.yml | 1 + integration_tests/account_migration_test.go | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index 878b0e46..245188e8 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -74,6 +74,7 @@ jobs: - "JWTAbstractAccount" - "XionSendPlatformFee" - "XionAbstractAccount" + - "AbstractAccountMigration" steps: - name: Set up Go 1.18 diff --git a/integration_tests/account_migration_test.go b/integration_tests/account_migration_test.go index a7d05644..6f773a29 100644 --- a/integration_tests/account_migration_test.go +++ b/integration_tests/account_migration_test.go @@ -359,7 +359,7 @@ func TestAbstractAccountMigration(t *testing.T) { // chain is upgraded. Check the contract is updated - NEW_CODE_ID := uint64(25) + NewCodeId := uint64(25) // retrieve the new code ID contractMetadataResp, err := ExecQuery(t, ctx, xion.FullNodes[0], @@ -370,5 +370,5 @@ func TestAbstractAccountMigration(t *testing.T) { require.NoError(t, err) t.Logf("contract code id: %d", contractMetadata.CodeID) - require.Equal(t, NEW_CODE_ID, contractMetadata.CodeID) + require.Equal(t, NewCodeId, contractMetadata.CodeID) } From e46543ce780943a999d53ddb8d9e55cd4ad8b57e Mon Sep 17 00:00:00 2001 From: Ash Date: Mon, 19 Feb 2024 07:55:16 -0700 Subject: [PATCH 229/501] pull code IDs from params --- x/xion/migrations/v1/migration.go | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/x/xion/migrations/v1/migration.go b/x/xion/migrations/v1/migration.go index db1bff1a..c05c23bc 100644 --- a/x/xion/migrations/v1/migration.go +++ b/x/xion/migrations/v1/migration.go @@ -1,23 +1,34 @@ package v1 import ( + "fmt" wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" "github.com/burnt-labs/xion/x/xion/types" sdk "github.com/cosmos/cosmos-sdk/types" ) func MigrateStore(ctx sdk.Context, wasmOpsKeeper wasmtypes.ContractOpsKeeper, wasmViewKeeper wasmtypes.ViewKeeper, aaKeeper types.AbstractAccountKeeper) error { - const OriginalCodeId = 21 const NewCodeId = 21 // todo: set + // get the previous account code ID + aaParams, err := aaKeeper.GetParams(ctx) + if err != nil { + return err + } + if len(aaParams.AllowedCodeIDs) != 1 { + return fmt.Errorf("expected one allowed code id for abstract account") + } + + originalCodeId := aaParams.AllowedCodeIDs[0] + // the account contract should always be pinned - err := wasmOpsKeeper.PinCode(ctx, NewCodeId) + err = wasmOpsKeeper.PinCode(ctx, NewCodeId) if err != nil { return err } // iterate through all existing accounts at this code ID, and migrate them - wasmViewKeeper.IterateContractsByCode(ctx, OriginalCodeId, func(instance sdk.AccAddress) bool { + wasmViewKeeper.IterateContractsByCode(ctx, originalCodeId, func(instance sdk.AccAddress) bool { _, err = wasmOpsKeeper.Migrate(ctx, instance, instance, NewCodeId, nil) // if there is an error, abort iteration and report it @@ -29,16 +40,12 @@ func MigrateStore(ctx sdk.Context, wasmOpsKeeper wasmtypes.ContractOpsKeeper, wa // as the previous contract is no longer the main account target, it doesn't // need to be pinned - err = wasmOpsKeeper.UnpinCode(ctx, OriginalCodeId) + err = wasmOpsKeeper.UnpinCode(ctx, originalCodeId) if err != nil { return err } // adjust the aa registration endpoint to point at the new code ID - aaParams, err := aaKeeper.GetParams(ctx) - if err != nil { - return err - } aaParams.AllowedCodeIDs = []uint64{NewCodeId} err = aaKeeper.SetParams(ctx, aaParams) if err != nil { From a1073354efd4cfb4b5160561f439103637b88987 Mon Sep 17 00:00:00 2001 From: Ash Date: Mon, 19 Feb 2024 08:24:08 -0700 Subject: [PATCH 230/501] notes --- integration_tests/account_migration_test.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/integration_tests/account_migration_test.go b/integration_tests/account_migration_test.go index 6f773a29..f145dc69 100644 --- a/integration_tests/account_migration_test.go +++ b/integration_tests/account_migration_test.go @@ -83,6 +83,8 @@ func TestAbstractAccountMigration(t *testing.T) { require.NoError(t, err) t.Logf("code response: %s", codeResp) + // todo: set the allowed code ID in the aa module params + sub := "integration-test-user" aud := "integration-test-project" @@ -329,7 +331,7 @@ func TestAbstractAccountMigration(t *testing.T) { height, err := xion.Height(ctx) require.NoError(t, err, "error fetching height before submit upgrade proposal") - haltHeight := height + haltHeightDelta - 3 + haltHeight := height + haltHeightDelta proposal := cosmos.SoftwareUpgradeProposal{ Deposit: "500000000" + xion.Config().Denom, // greater than min deposit @@ -371,4 +373,6 @@ func TestAbstractAccountMigration(t *testing.T) { t.Logf("contract code id: %d", contractMetadata.CodeID) require.Equal(t, NewCodeId, contractMetadata.CodeID) + + // todo: validate that verification or tx submission still works } From 7cf7c12f04c81041b1c38cad3c491fd42db67d15 Mon Sep 17 00:00:00 2001 From: Eduardo Diaz Date: Tue, 20 Feb 2024 13:40:39 -0400 Subject: [PATCH 231/501] add upgrade, to execute migration of codeIDs; WIP Signed-off-by: Eduardo Diaz --- app/app.go | 10 +++++----- app/upgrades/v4/constants.go | 18 ++++++++++++++++++ app/upgrades/v4/upgrades.go | 24 ++++++++++++++++++++++++ x/xion/module.go | 4 ++-- 4 files changed, 49 insertions(+), 7 deletions(-) create mode 100644 app/upgrades/v4/constants.go create mode 100644 app/upgrades/v4/upgrades.go diff --git a/app/app.go b/app/app.go index 908ad91f..98f49395 100644 --- a/app/app.go +++ b/app/app.go @@ -1,14 +1,15 @@ package app import ( - autocliv1 "cosmossdk.io/api/cosmos/autocli/v1" - reflectionv1 "cosmossdk.io/api/cosmos/reflection/v1" "encoding/json" "fmt" "io" "os" "path/filepath" + autocliv1 "cosmossdk.io/api/cosmos/autocli/v1" + reflectionv1 "cosmossdk.io/api/cosmos/reflection/v1" + "github.com/burnt-labs/xion/x/globalfee" dbm "github.com/cometbft/cometbft-db" abci "github.com/cometbft/cometbft/abci/types" @@ -136,14 +137,13 @@ import ( wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" "github.com/burnt-labs/xion/app/upgrades" + v4 "github.com/burnt-labs/xion/app/upgrades/v4" "github.com/burnt-labs/xion/x/mint" mintkeeper "github.com/burnt-labs/xion/x/mint/keeper" minttypes "github.com/burnt-labs/xion/x/mint/types" "github.com/burnt-labs/xion/x/xion" xionkeeper "github.com/burnt-labs/xion/x/xion/keeper" xiontypes "github.com/burnt-labs/xion/x/xion/types" - - v3 "github.com/burnt-labs/xion/app/upgrades/v3" ) const appName = "XionApp" @@ -160,7 +160,7 @@ var ( // of "EnableAllProposals" (takes precedence over ProposalsEnabled) // https://github.com/CosmWasm/wasmd/blob/02a54d33ff2c064f3539ae12d75d027d9c665f05/x/wasm/internal/types/proposal.go#L28-L34 EnableSpecificProposals = "" - Upgrades = []upgrades.Upgrade{v3.Upgrade} + Upgrades = []upgrades.Upgrade{v4.Upgrade} ) // These constants are derived from the above variables. diff --git a/app/upgrades/v4/constants.go b/app/upgrades/v4/constants.go new file mode 100644 index 00000000..28318cbd --- /dev/null +++ b/app/upgrades/v4/constants.go @@ -0,0 +1,18 @@ +package v4 + +import ( + store "github.com/cosmos/cosmos-sdk/store/types" + + "github.com/burnt-labs/xion/app/upgrades" +) + +const ( + // UpgradeName defines the on-chain upgrade name. + UpgradeName = "v4" +) + +var Upgrade = upgrades.Upgrade{ + UpgradeName: UpgradeName, + CreateUpgradeHandler: CreateUpgradeHandler, + StoreUpgrades: store.StoreUpgrades{}, +} diff --git a/app/upgrades/v4/upgrades.go b/app/upgrades/v4/upgrades.go new file mode 100644 index 00000000..ce57bc03 --- /dev/null +++ b/app/upgrades/v4/upgrades.go @@ -0,0 +1,24 @@ +package v4 + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" + upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" +) + +func CreateUpgradeHandler( + mm *module.Manager, + configurator module.Configurator, +) upgradetypes.UpgradeHandler { + return func(ctx sdk.Context, plan upgradetypes.Plan, vm module.VersionMap) (module.VersionMap, error) { + ctx.Logger().Info("Starting module migrations...") + + vm, err := mm.RunMigrations(ctx, configurator, vm) + if err != nil { + return vm, err + } + + ctx.Logger().Info("Upgrade complete") + return vm, err + } +} diff --git a/x/xion/module.go b/x/xion/module.go index a9764334..16b9cd53 100644 --- a/x/xion/module.go +++ b/x/xion/module.go @@ -93,8 +93,8 @@ func (am AppModule) RegisterServices(cfg module.Configurator) { types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.keeper)) m := keeper.NewMigrator(am.keeper.ContractOpsKeeper, am.keeper.ContractViewKeeper, am.keeper.AAKeeper) - if err := cfg.RegisterMigration(types.ModuleName, 1, m.Migrate1to2); err != nil { - panic(fmt.Sprintf("failed to migrate x/xion from version 1 to 2: %v", err)) + if err := cfg.RegisterMigration(types.ModuleName, 2, m.Migrate1to2); err != nil { + panic(fmt.Sprintf("failed to migrate x/xion from version 2 to 3: %v", err)) } } From 025d4ad169c49c07be3700692ba3d8b9d8c6132b Mon Sep 17 00:00:00 2001 From: Francis Roch Date: Wed, 21 Feb 2024 11:21:28 -0500 Subject: [PATCH 232/501] Fix `go mod tidy` in integration_tests --- integration_tests/go.mod | 5 +++-- integration_tests/go.sum | 10 +++++----- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/integration_tests/go.mod b/integration_tests/go.mod index 14ad4ac6..b1bca867 100644 --- a/integration_tests/go.mod +++ b/integration_tests/go.mod @@ -11,7 +11,7 @@ require ( github.com/docker/docker v24.0.4+incompatible github.com/golang-jwt/jwt/v4 v4.3.0 github.com/icza/dyno v0.0.0-20220812133438-f0b6f8a18845 - github.com/larry0x/abstract-account v0.0.0-20230708200055-2ea462db913f + github.com/larry0x/abstract-account v0.0.0-20240202022305-255071ed91ee github.com/lestrrat-go/jwx v1.2.26 github.com/strangelove-ventures/interchaintest/v7 v7.0.0-20230721183422-fb937bb0e165 github.com/stretchr/testify v1.8.4 @@ -226,7 +226,7 @@ require ( golang.org/x/sys v0.11.0 // indirect golang.org/x/term v0.11.0 // indirect golang.org/x/text v0.12.0 // indirect - golang.org/x/tools v0.11.0 // indirect + golang.org/x/tools v0.12.0 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect google.golang.org/api v0.126.0 // indirect google.golang.org/appengine v1.6.7 // indirect @@ -259,6 +259,7 @@ replace ( github.com/ChainSafe/go-schnorrkel/1 => github.com/ChainSafe/go-schnorrkel v1.0.0 github.com/burnt-labs/xion => ../ github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 + github.com/larry0x/abstract-account => github.com/burnt-labs/abstract-account v0.0.0-20240202022305-255071ed91ee github.com/strangelove-ventures/interchaintest/v7 => github.com/burnt-labs/interchaintest/v7 v7.0.0-20230725204927-990da9d6e272 github.com/vedhavyas/go-subkey => github.com/strangelove-ventures/go-subkey v1.0.7 ) diff --git a/integration_tests/go.sum b/integration_tests/go.sum index 2d707444..d206d0ea 100644 --- a/integration_tests/go.sum +++ b/integration_tests/go.sum @@ -283,6 +283,8 @@ github.com/btcsuite/btcd/btcutil v1.1.2 h1:XLMbX8JQEiwMcYft2EGi8zPUkoa0abKIU6/BJ github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce h1:YtWJF7RHm2pYCvA5t0RPmAaLUhREsKuKd+SLhxFbFeQ= github.com/bufbuild/protocompile v0.4.0 h1:LbFKd2XowZvQ/kajzguUp2DC9UEIQhIq77fZZlaQsNA= +github.com/burnt-labs/abstract-account v0.0.0-20240202022305-255071ed91ee h1:04DdmDV4PnDOIyEeasOcu+fGDPzXpappY8Um8c+PSRI= +github.com/burnt-labs/abstract-account v0.0.0-20240202022305-255071ed91ee/go.mod h1:R+/UYwxE92VUFOWLyyuBa2RRI2lUwb9uHwRWDBrNzx0= github.com/burnt-labs/interchaintest/v7 v7.0.0-20230725204927-990da9d6e272 h1:R3QMfw3FomFGiuE+bg8snhyZP7ygMbPxwh/7awtJvgM= github.com/burnt-labs/interchaintest/v7 v7.0.0-20230725204927-990da9d6e272/go.mod h1:WUglvTs5dOXiI7z+VRiVibkFcd2pvTfoDEcXnjYONrw= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= @@ -757,8 +759,6 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= 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/larry0x/abstract-account v0.0.0-20230708200055-2ea462db913f h1:5bbME0rK2j2cCwRzoc2dX1/SDo3guFgyNyph+c+ulI4= -github.com/larry0x/abstract-account v0.0.0-20230708200055-2ea462db913f/go.mod h1:mRL3ko+eOFguJHzhVZatNZOvaiVHumGAWxoLlyIo+Ow= github.com/larry0x/simapp v0.0.0-20230527213943-e57d94ffca4c h1:HxMMvjvPKv+Xttad2Blw6c9XKzg/Pk5TIZL8T04lUN0= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= @@ -1006,7 +1006,7 @@ github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPx 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.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= +github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= 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/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= @@ -1488,8 +1488,8 @@ golang.org/x/tools v0.1.4/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.11.0 h1:EMCa6U9S2LtZXLAMoWiR/R8dAQFRqbAitmbJ2UKhoi8= -golang.org/x/tools v0.11.0/go.mod h1:anzJrxPjNtfgiYQYirP2CPGzGLxrH2u2QBhn6Bf3qY8= +golang.org/x/tools v0.12.0 h1:YW6HUoUmYBpwSgyaGaZq1fHjrBjX1rlpZ54T6mu2kss= +golang.org/x/tools v0.12.0/go.mod h1:Sc0INKfu04TlqNoRA1hgpFZbhYXHPr4V5DzpSBTPqQM= 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= From 6c83692940260fd644b3b87c14bedaaa8a4d3722 Mon Sep 17 00:00:00 2001 From: Eduardo Diaz Date: Sun, 25 Feb 2024 14:02:37 -0400 Subject: [PATCH 233/501] run upgrade; WIP Signed-off-by: Eduardo Diaz --- integration_tests/account_migration_test.go | 49 +-------------------- 1 file changed, 1 insertion(+), 48 deletions(-) diff --git a/integration_tests/account_migration_test.go b/integration_tests/account_migration_test.go index f145dc69..c9fd70df 100644 --- a/integration_tests/account_migration_test.go +++ b/integration_tests/account_migration_test.go @@ -1,13 +1,11 @@ package integration_tests import ( - "context" "crypto/sha256" "encoding/base64" "encoding/hex" "encoding/json" "fmt" - "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" "os" "path" "testing" @@ -328,51 +326,6 @@ func TestAbstractAccountMigration(t *testing.T) { require.NoError(t, err) t.Logf("code response: %s", newCodeResp) - height, err := xion.Height(ctx) - require.NoError(t, err, "error fetching height before submit upgrade proposal") - - haltHeight := height + haltHeightDelta - - proposal := cosmos.SoftwareUpgradeProposal{ - Deposit: "500000000" + xion.Config().Denom, // greater than min deposit - Title: "Chain Upgrade 1", - Name: "v4", - Description: "Account migration software upgrade", - Height: haltHeight, - } - - upgradeTx, err := xion.LegacyUpgradeProposal(ctx, xionUser.KeyName(), proposal) - require.NoError(t, err, "error submitting software upgrade proposal tx") - - err = xion.VoteOnProposalAllValidators(ctx, upgradeTx.ProposalID, cosmos.ProposalVoteYes) - require.NoError(t, err, "failed to submit votes") - - _, err = cosmos.PollForProposalStatus(ctx, xion, height, height+haltHeightDelta, upgradeTx.ProposalID, cosmos.ProposalStatusPassed) - require.NoError(t, err, "proposal status did not change to passed in expected number of blocks") - - height, err = xion.Height(ctx) - require.NoError(t, err, "error fetching height before upgrade") - - timeoutCtx, timeoutCtxCancel := context.WithTimeout(ctx, time.Second*45) - defer timeoutCtxCancel() - - err = testutil.WaitForBlocks(timeoutCtx, int(blocksAfterUpgrade), xion) - require.NoError(t, err, "chain did not produce blocks after upgrade") - - // chain is upgraded. Check the contract is updated - - NewCodeId := uint64(25) - - // retrieve the new code ID - contractMetadataResp, err := ExecQuery(t, ctx, xion.FullNodes[0], - "wasm", "contract", contract) - require.NoError(t, err) - var contractMetadata wasmtypes.ContractInfo - err = json.Unmarshal(contractMetadataResp["contract_info"].([]byte), &contractMetadata) - require.NoError(t, err) - t.Logf("contract code id: %d", contractMetadata.CodeID) - - require.Equal(t, NewCodeId, contractMetadata.CodeID) - + CosmosChainUpgradeIBCTest(t, "xion", "current", "xion", "upgrade", "v4") // todo: validate that verification or tx submission still works } From 9c077fbb7560619fe1411f333db8a7781425c2e5 Mon Sep 17 00:00:00 2001 From: Ash Date: Mon, 26 Feb 2024 09:38:52 -0800 Subject: [PATCH 234/501] the second contract should be the new contract --- integration_tests/account_migration_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integration_tests/account_migration_test.go b/integration_tests/account_migration_test.go index c9fd70df..7df0c952 100644 --- a/integration_tests/account_migration_test.go +++ b/integration_tests/account_migration_test.go @@ -317,7 +317,7 @@ func TestAbstractAccountMigration(t *testing.T) { // deploy the new contract newCodeIDStr, err := xion.StoreContract(ctx, xionUser.FormattedAddress(), - path.Join(fp, "integration_tests", "testdata", "contracts", "account_updatable-aarch64-previous.wasm")) + path.Join(fp, "integration_tests", "testdata", "contracts", "account_updatable-aarch64.wasm")) require.NoError(t, err) // retrieve the new hash From 79938fae8b3edd3ee9249b920908113f57f7e922 Mon Sep 17 00:00:00 2001 From: Eduardo Diaz Date: Tue, 27 Feb 2024 15:17:11 -0400 Subject: [PATCH 235/501] modify default params for aa module; WIP Signed-off-by: Eduardo Diaz --- Makefile | 3 ++ app/app.go | 40 ++++++++++++++------- integration_tests/account_migration_test.go | 17 +++++++-- integration_tests/upgrade_test.go | 16 +++++---- integration_tests/utils.go | 19 ++++++++++ x/xion/migrations/v1/migration.go | 5 +-- x/xion/module.go | 6 ++-- 7 files changed, 80 insertions(+), 26 deletions(-) diff --git a/Makefile b/Makefile index c29f284e..34d15b51 100644 --- a/Makefile +++ b/Makefile @@ -146,6 +146,9 @@ test-integration-min: test-integration-upgrade: @XION_IMAGE=$(XION_IMAGE) cd integration_tests && go test -run TestXionUpgradeIBC -mod=readonly -tags='ledger test_ledger_mock' ./... +test-integration-mig: + @XION_IMAGE=$(XION_IMAGE) cd integration_tests && go test -v -run TestAbstractAccountMigration -mod=readonly -tags='ledger test_ledger_mock' ./... + test-race: @VERSION=$(VERSION) go test -mod=readonly -race -tags='ledger test_ledger_mock' ./... diff --git a/app/app.go b/app/app.go index 98f49395..3d4d8c03 100644 --- a/app/app.go +++ b/app/app.go @@ -580,16 +580,18 @@ func NewWasmApp( // If evidence needs to be handled for the app, set routes in router here and seal app.EvidenceKeeper = *evidenceKeeper - app.XionKeeper = xionkeeper.NewKeeper( - appCodec, - keys[xiontypes.StoreKey], - app.GetSubspace(xiontypes.ModuleName), - app.BankKeeper, - app.AccountKeeper, - app.ContractKeeper, - app.WasmKeeper, - app.AbstractAccountKeeper, - authtypes.NewModuleAddress(govtypes.ModuleName).String()) + /* + app.XionKeeper = xionkeeper.NewKeeper( + appCodec, + keys[xiontypes.StoreKey], + app.GetSubspace(xiontypes.ModuleName), + app.BankKeeper, + app.AccountKeeper, + app.ContractKeeper, + app.WasmKeeper, + app.AbstractAccountKeeper, + authtypes.NewModuleAddress(govtypes.ModuleName).String()) + */ // Configure the hooks keeper hooksKeeper := ibchookskeeper.NewKeeper( @@ -702,6 +704,20 @@ func NewWasmApp( authtypes.NewModuleAddress(govtypes.ModuleName).String(), ) + app.ContractKeeper = wasmkeeper.NewDefaultPermissionKeeper(app.WasmKeeper) + app.Ics20WasmHooks.ContractKeeper = &app.WasmKeeper + + app.XionKeeper = xionkeeper.NewKeeper( + appCodec, + keys[xiontypes.StoreKey], + app.GetSubspace(xiontypes.ModuleName), + app.BankKeeper, + app.AccountKeeper, + app.ContractKeeper, + app.WasmKeeper, + app.AbstractAccountKeeper, + authtypes.NewModuleAddress(govtypes.ModuleName).String()) + // Set legacy router for backwards compatibility with gov v1beta1 app.GovKeeper.SetLegacyRouter(govRouter) @@ -780,10 +796,10 @@ func NewWasmApp( groupmodule.NewAppModule(appCodec, app.GroupKeeper, app.AccountKeeper, app.BankKeeper, app.interfaceRegistry), nftmodule.NewAppModule(appCodec, app.NFTKeeper, app.AccountKeeper, app.BankKeeper, app.interfaceRegistry), consensus.NewAppModule(appCodec, app.ConsensusParamsKeeper), - xion.NewAppModule(app.XionKeeper), globalfee.NewAppModule(app.GetSubspace(globalfee.ModuleName)), wasm.NewAppModule(appCodec, &app.WasmKeeper, app.StakingKeeper, app.AccountKeeper, app.BankKeeper, app.MsgServiceRouter(), app.GetSubspace(wasmtypes.ModuleName)), aa.NewAppModule(app.AbstractAccountKeeper), + xion.NewAppModule(app.XionKeeper), ibc.NewAppModule(app.IBCKeeper), transfer.NewAppModule(app.TransferKeeper), ibcfee.NewAppModule(app.IBCFeeKeeper), @@ -808,7 +824,6 @@ func NewWasmApp( nft.ModuleName, group.ModuleName, paramstypes.ModuleName, vestingtypes.ModuleName, consensusparamtypes.ModuleName, globalfee.ModuleName, - xiontypes.ModuleName, // additional non simd modules ibctransfertypes.ModuleName, ibcexported.ModuleName, @@ -817,6 +832,7 @@ func NewWasmApp( ibcfeetypes.ModuleName, wasmtypes.ModuleName, aatypes.ModuleName, + xiontypes.ModuleName, ibchookstypes.ModuleName, packetforwardtypes.ModuleName, ) diff --git a/integration_tests/account_migration_test.go b/integration_tests/account_migration_test.go index c9fd70df..74a7a0d4 100644 --- a/integration_tests/account_migration_test.go +++ b/integration_tests/account_migration_test.go @@ -34,7 +34,7 @@ func TestAbstractAccountMigration(t *testing.T) { } t.Parallel() - td := BuildXionChain(t, "0.0uxion", ModifyInterChainGenesis(ModifyInterChainGenesisFn{ModifyGenesisShortProposals}, [][]string{{votingPeriod, maxDepositPeriod}})) + td := BuildXionChain(t, "0.0uxion", ModifyInterChainGenesis(ModifyInterChainGenesisFn{ModifyGenesisShortProposals, ModifyGenesisAAAllowedCodeIDs}, [][]string{{votingPeriod, maxDepositPeriod}, {votingPeriod, maxDepositPeriod}})) xion, ctx := td.xionChain, td.ctx config := types.GetConfig() @@ -326,6 +326,19 @@ func TestAbstractAccountMigration(t *testing.T) { require.NoError(t, err) t.Logf("code response: %s", newCodeResp) - CosmosChainUpgradeIBCTest(t, "xion", "current", "xion", "upgrade", "v4") + CosmosChainUpgradeIBCTest(t, &td, "xion", "current", "xion", "upgrade", "v4") // todo: validate that verification or tx submission still works + + newCodeResp, err = ExecQuery(t, ctx, td.xionChain.FullNodes[0], + "wasm", "code-info", newCodeIDStr) + require.NoError(t, err) + t.Logf("code response: %s", newCodeResp) + t.Logf("code response: %+v", newCodeResp) + + err = testutil.WaitForBlocks(ctx, int(blocksAfterUpgrade), td.xionChain) + require.NoError(t, err, "chain did not produce blocks after upgrade") + + _, err = ExecQuery(t, ctx, td.xionChain.FullNodes[0], + "wasm", "code-info", "21") + require.NoError(t, err) } diff --git a/integration_tests/upgrade_test.go b/integration_tests/upgrade_test.go index 9e447ab2..25105349 100644 --- a/integration_tests/upgrade_test.go +++ b/integration_tests/upgrade_test.go @@ -32,15 +32,16 @@ current-testnet: 455cfa5b78e79e1c50867f6d61a99b0e9df6b9b1 upgrade-version: 7e0d629b3e65f524e94cd4aeddb6cfda3f582a5c */ func TestXionUpgradeIBC(t *testing.T) { - CosmosChainUpgradeIBCTest(t, "xion", "current", "xion", "upgrade", "v3") -} - -func CosmosChainUpgradeIBCTest(t *testing.T, chainName, initialVersion, upgradeContainerRepo, upgradeVersion string, upgradeName string) { - t.Skip("ComosChainUpgradeTest should be run manually, please comment skip and follow instructions when running") - t.Parallel() - td := BuildXionChain(t, "0.0uxion", ModifyInterChainGenesis(ModifyInterChainGenesisFn{ModifyGenesisShortProposals}, [][]string{{votingPeriod, maxDepositPeriod}})) + td := BuildXionChain(t, "0.0uxion", ModifyInterChainGenesis(ModifyInterChainGenesisFn{ModifyGenesisShortProposals, ModifyGenesisAAAllowedCodeIDs}, [][]string{{votingPeriod, maxDepositPeriod}, {votingPeriod, maxDepositPeriod}})) + CosmosChainUpgradeIBCTest(t, &td, "xion", "current", "xion", "upgrade", "v4") +} + +// we have an error we need to pass testdata pointer +func CosmosChainUpgradeIBCTest(t *testing.T, td *TestData, chainName, initialVersion, upgradeContainerRepo, upgradeVersion string, upgradeName string) { + //t.Skip("ComosChainUpgradeTest should be run manually, please comment skip and follow instructions when running") + //td := BuildXionChain(t, "0.0uxion", ModifyInterChainGenesis(ModifyInterChainGenesisFn{ModifyGenesisShortProposals}, [][]string{{votingPeriod, maxDepositPeriod}})) chain, ctx, client := td.xionChain, td.ctx, td.client fundAmount := int64(10_000_000_000) @@ -103,4 +104,5 @@ func CosmosChainUpgradeIBCTest(t *testing.T, chainName, initialVersion, upgradeC err = testutil.WaitForBlocks(timeoutCtx, int(blocksAfterUpgrade), chain) require.NoError(t, err, "chain did not produce blocks after upgrade") + return } diff --git a/integration_tests/utils.go b/integration_tests/utils.go index 8ba0f548..8aa92730 100644 --- a/integration_tests/utils.go +++ b/integration_tests/utils.go @@ -257,6 +257,25 @@ func ModifyGenesisInflation(chainConfig ibc.ChainConfig, genbz []byte, params .. return out, nil } +func ModifyGenesisAAAllowedCodeIDs(chainConfig ibc.ChainConfig, genbz []byte, params ...string) ([]byte, error) { + g := make(map[string]interface{}) + if err := json.Unmarshal(genbz, &g); err != nil { + return nil, fmt.Errorf("failed to unmarshal genesis file: %w", err) + } + if err := dyno.Set(g, []int64{1}, "app_state", "abstractaccount", "params", "allowed_code_ids"); err != nil { + return nil, fmt.Errorf("failed to set voting period in genesis json: %w", err) + } + + if err := dyno.Set(g, false, "app_state", "abstractaccount", "params", "allow_all_code_ids"); err != nil { + return nil, fmt.Errorf("failed to set voting period in genesis json: %w", err) + } + out, err := json.Marshal(g) + if err != nil { + return nil, fmt.Errorf("failed to marshal genesis bytes to json: %w", err) + } + return out, nil +} + // Helper method to retrieve the total token supply for a chain at some particular history denoted by the block height func getTotalCoinSupplyInBank(t *testing.T, xion *cosmos.CosmosChain, ctx context.Context, denom string, blockHeight uint64) string { if blockHeight == 0 { diff --git a/x/xion/migrations/v1/migration.go b/x/xion/migrations/v1/migration.go index c05c23bc..361cec76 100644 --- a/x/xion/migrations/v1/migration.go +++ b/x/xion/migrations/v1/migration.go @@ -2,13 +2,14 @@ package v1 import ( "fmt" + wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" "github.com/burnt-labs/xion/x/xion/types" sdk "github.com/cosmos/cosmos-sdk/types" ) func MigrateStore(ctx sdk.Context, wasmOpsKeeper wasmtypes.ContractOpsKeeper, wasmViewKeeper wasmtypes.ViewKeeper, aaKeeper types.AbstractAccountKeeper) error { - const NewCodeId = 21 // todo: set + const NewCodeId = 2 // todo: set // get the previous account code ID aaParams, err := aaKeeper.GetParams(ctx) @@ -16,7 +17,7 @@ func MigrateStore(ctx sdk.Context, wasmOpsKeeper wasmtypes.ContractOpsKeeper, wa return err } if len(aaParams.AllowedCodeIDs) != 1 { - return fmt.Errorf("expected one allowed code id for abstract account") + return fmt.Errorf("expected one allowed code id for abstract account, got: %s", aaParams.AllowedCodeIDs) } originalCodeId := aaParams.AllowedCodeIDs[0] diff --git a/x/xion/module.go b/x/xion/module.go index 16b9cd53..fc9e32b5 100644 --- a/x/xion/module.go +++ b/x/xion/module.go @@ -93,8 +93,8 @@ func (am AppModule) RegisterServices(cfg module.Configurator) { types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.keeper)) m := keeper.NewMigrator(am.keeper.ContractOpsKeeper, am.keeper.ContractViewKeeper, am.keeper.AAKeeper) - if err := cfg.RegisterMigration(types.ModuleName, 2, m.Migrate1to2); err != nil { - panic(fmt.Sprintf("failed to migrate x/xion from version 2 to 3: %v", err)) + if err := cfg.RegisterMigration(types.ModuleName, 1, m.Migrate1to2); err != nil { + panic(fmt.Sprintf("failed to migrate x/xion from version 1 to 2: %v", err)) } } @@ -115,7 +115,7 @@ func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.Raw } // ConsensusVersion implements AppModule/ConsensusVersion. -func (AppModule) ConsensusVersion() uint64 { return 1 } +func (AppModule) ConsensusVersion() uint64 { return 2 } // BeginBlock implements the AppModule interface func (am AppModule) BeginBlock(ctx sdk.Context, req abci.RequestBeginBlock) { From c92621d3768b256253c4987f9616019effa5c878 Mon Sep 17 00:00:00 2001 From: Ash Date: Tue, 27 Feb 2024 12:31:11 -0800 Subject: [PATCH 236/501] nil causes errors, try empty byte array --- x/xion/migrations/v1/migration.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x/xion/migrations/v1/migration.go b/x/xion/migrations/v1/migration.go index 361cec76..d08645b0 100644 --- a/x/xion/migrations/v1/migration.go +++ b/x/xion/migrations/v1/migration.go @@ -30,7 +30,7 @@ func MigrateStore(ctx sdk.Context, wasmOpsKeeper wasmtypes.ContractOpsKeeper, wa // iterate through all existing accounts at this code ID, and migrate them wasmViewKeeper.IterateContractsByCode(ctx, originalCodeId, func(instance sdk.AccAddress) bool { - _, err = wasmOpsKeeper.Migrate(ctx, instance, instance, NewCodeId, nil) + _, err = wasmOpsKeeper.Migrate(ctx, instance, instance, NewCodeId, []byte{}) // if there is an error, abort iteration and report it return err == nil From 072de930286631edab09f7e4ae793ba777a79a9a Mon Sep 17 00:00:00 2001 From: Ash Date: Wed, 28 Feb 2024 08:58:44 -0800 Subject: [PATCH 237/501] rebuild account contract --- .../contracts/account_updatable-aarch64.wasm | Bin 380742 -> 457530 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/integration_tests/testdata/contracts/account_updatable-aarch64.wasm b/integration_tests/testdata/contracts/account_updatable-aarch64.wasm index 13ddb4fa81ff50bad9bf35f9e2958e144f614a54..1a9f3623530edfb347dafa2b9002edc690552ea9 100644 GIT binary patch literal 457530 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±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 z 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

Oyn*C|0*5I*O9!Ne%vEI8VQ*suC)jo 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 Date: Wed, 28 Feb 2024 10:41:21 -0800 Subject: [PATCH 239/501] lets try again --- .../contracts/account_updatable-aarch64.wasm | Bin 457040 -> 458328 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/integration_tests/testdata/contracts/account_updatable-aarch64.wasm b/integration_tests/testdata/contracts/account_updatable-aarch64.wasm index c552ddff154836f1315fa2bf031e27b0b10e7db1..189485cc68300db5d089f678cb41152059939055 100644 GIT binary patch delta 117023 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

_ zaMFxxK~GKkteE=(pO{jxMDgATn4}1Gg-J1HFA-nAz*9O0CnOafLo3QlX%cUU?9een zgPYB3>C_6kh^a5~mt&409{SZURgH1C=u*eqI(`z@!We7&_M3>EEf!^`WtMcZOgStq z#sn@Vgxj|5WQ?=i$HR0Y=C+hf{K#l0-mc?)T=U>%0IgjnqPOu;{x^V=TsjVun(_BA zDX|w|QWR4Ge?-&jZj~IUBY`9igBwYc_CcBM0DDJ3CxAh}1+Gr6PB4sH#j$NXybBTA zRoof&8|{iJz$Og4p1NY{8FlriyG4ta_>Y(U2_H(uhrR+mDN4a{bb(t}KsMkQN|)&3 zAQngx922?Q`5@Q1elR zvm?yiqTdd_l&}BOE-j*mIIsiz{f_V8q2jY0SZ(~`Ppj&AH%y9muLoDA-KU1yz3&s{ z^}I{$WZ)5qq6j8^qSf7EQ$6pHQVX1V%fG^;(pV3ZI0XJb)boB`JKQn2)1XXWp@hB* zCJAQHjeZ#u=zUj+%9nZX*h08d?@t{9$;QGJbvs_>AF+g~t5kw|!jXz@QuP9D>MF5m zH&1W}7h`L2a5r!34R-2=5^aaz?GS7XfXsHQ>QeXc3qAV;6Ltq7B{CgArVXo59rFR# L06GIgmwNs$fihv3 delta 115147 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 NR>RDP8L-^*{{ZiskSYKG From 100b698c2e1a8d566e6bf922da338ba9ae445ca6 Mon Sep 17 00:00:00 2001 From: Ash Date: Wed, 28 Feb 2024 12:59:52 -0800 Subject: [PATCH 240/501] define migratemsg type, and then submit empty json --- .../contracts/account_updatable-aarch64.wasm | Bin 458328 -> 457530 bytes x/xion/migrations/v1/migration.go | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/integration_tests/testdata/contracts/account_updatable-aarch64.wasm b/integration_tests/testdata/contracts/account_updatable-aarch64.wasm index 189485cc68300db5d089f678cb41152059939055..1a9f3623530edfb347dafa2b9002edc690552ea9 100644 GIT binary patch delta 112657 zcmeFa378bs)j!;~ZuN9e_bfHczA#ib1Iz#egWwDx%M_~%g1F)i3JL=*;F`pw2Sr6i zMM@}lM}vX^BZvwrnn6)j2$-Re5yJmjo#_Jq6NV8mOjJb?mhu0Sh7gg6VFpxhhA<6O6=$*CIZevK10umysWdPopsKfUl@VtjI+->f6CeC&zN%lw7@Z; zX%|mB{Q|rl8=QT?v^l>B9A}<)!PIjCXNAt1apoKrIlI%Tr=B_O{5ez3o_fw%r=EVn zdFP*VR$#R#oN@N~)8?Ep<@9N%UN~*ec{9#A`_zGfw~X+VS+mYLeaaA2{LqL@ou)tW z^;e@{&a~MV%$PInyi?KtoHN<>TN#Nn(A<>s&zTc=%l*LYocKzLfFq(08ZQ{H8KX}= zWx~WGJTd+n^RUAX8#iv;;fEi7>ZIdOI~}RxCv1|VUNja9zK>rdZV=O_PoFVk20urQ zf8BV~xI^42{%E{m{K?p2{MmThc*l6xc+dEY@xFmFH;N^~72~fEuSwOwE#f9|v$#27 z+$C-o$NyH`BW@FSi>0dd8+4IBir_E;x#3$l&F@C4`r`RSw6CaDe1N!k_ zi7&;62{C?`__rAUFY&ebMvTA87=M{De*Ek5J2CzyV?2Sp+ZeqV?EvVzjPVohH|{sk z_6DQPc*gjfvBFp)o->~10LPDi+Sq73Wjt@(X^h`wTxR^v*k+7>$@swd$QZ5iUokct zFB`8K<39ryzn6=}_!~rG5h1@us;;h+&$Fd#<@m+Sy-|*L^b}61T`(-vrT?1Katm( zpUNHbGr7RL&W!B&W7$=vF>ks1L)I~gWriKCHELt|eDsbGYgf71P79YCCGP z%G~UM2@G4>*=Q+q)Y*>JVbIxVCUeZ$9J7sTsUZh2;@r5mD4 zRRcMO1r(?vKtYTn01i~~C<_k`Oh>~z11;(=P;-3bcHy~SM|u}tC4oep85h8vu�& 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 GdjA)ImTtBH diff --git a/x/xion/migrations/v1/migration.go b/x/xion/migrations/v1/migration.go index d08645b0..11504161 100644 --- a/x/xion/migrations/v1/migration.go +++ b/x/xion/migrations/v1/migration.go @@ -30,7 +30,7 @@ func MigrateStore(ctx sdk.Context, wasmOpsKeeper wasmtypes.ContractOpsKeeper, wa // iterate through all existing accounts at this code ID, and migrate them wasmViewKeeper.IterateContractsByCode(ctx, originalCodeId, func(instance sdk.AccAddress) bool { - _, err = wasmOpsKeeper.Migrate(ctx, instance, instance, NewCodeId, []byte{}) + _, err = wasmOpsKeeper.Migrate(ctx, instance, instance, NewCodeId, []byte("{}")) // if there is an error, abort iteration and report it return err == nil From 64d85a1d1e448eb8e3087862c83e1ea1117330a9 Mon Sep 17 00:00:00 2001 From: Ash Date: Wed, 28 Feb 2024 13:02:31 -0800 Subject: [PATCH 241/501] fmt type --- x/xion/migrations/v1/migration.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x/xion/migrations/v1/migration.go b/x/xion/migrations/v1/migration.go index 11504161..0c76b5d6 100644 --- a/x/xion/migrations/v1/migration.go +++ b/x/xion/migrations/v1/migration.go @@ -17,7 +17,7 @@ func MigrateStore(ctx sdk.Context, wasmOpsKeeper wasmtypes.ContractOpsKeeper, wa return err } if len(aaParams.AllowedCodeIDs) != 1 { - return fmt.Errorf("expected one allowed code id for abstract account, got: %s", aaParams.AllowedCodeIDs) + return fmt.Errorf("expected one allowed code id for abstract account, got: %v", aaParams.AllowedCodeIDs) } originalCodeId := aaParams.AllowedCodeIDs[0] From b9c58cd64f319db6ec30681ec3b573ef2daf422e Mon Sep 17 00:00:00 2001 From: Ash Date: Wed, 28 Feb 2024 13:28:02 -0800 Subject: [PATCH 242/501] change to struct --- .../contracts/account_updatable-aarch64.wasm | Bin 457530 -> 458764 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/integration_tests/testdata/contracts/account_updatable-aarch64.wasm b/integration_tests/testdata/contracts/account_updatable-aarch64.wasm index 1a9f3623530edfb347dafa2b9002edc690552ea9..ba78b8294f07fda0299d9452bedb8fb19b5f41e0 100644 GIT binary patch delta 26678 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 a)qc`gN9|E6wLf+otNqaA(-#=W-SGcSB>1QR From a7c99c4a93960fc3edcba85ca1790207a53d0edf Mon Sep 17 00:00:00 2001 From: Eduardo Diaz Date: Wed, 28 Feb 2024 17:54:09 -0400 Subject: [PATCH 243/501] assert contract has updated codeID after upgrade Signed-off-by: Eduardo Diaz --- integration_tests/account_migration_test.go | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/integration_tests/account_migration_test.go b/integration_tests/account_migration_test.go index 2299af07..1355dc90 100644 --- a/integration_tests/account_migration_test.go +++ b/integration_tests/account_migration_test.go @@ -332,13 +332,17 @@ func TestAbstractAccountMigration(t *testing.T) { newCodeResp, err = ExecQuery(t, ctx, td.xionChain.FullNodes[0], "wasm", "code-info", newCodeIDStr) require.NoError(t, err) - t.Logf("code response: %s", newCodeResp) t.Logf("code response: %+v", newCodeResp) err = testutil.WaitForBlocks(ctx, int(blocksAfterUpgrade), td.xionChain) require.NoError(t, err, "chain did not produce blocks after upgrade") - _, err = ExecQuery(t, ctx, td.xionChain.FullNodes[0], - "wasm", "code-info", "21") + rawUpdatedContractInfo, err := ExecQuery(t, ctx, td.xionChain.FullNodes[0], + "wasm", "contract", predictedAddr.String()) require.NoError(t, err) + t.Logf("updated contract info: %s", rawUpdatedContractInfo) + + updatedContractInfo := rawUpdatedContractInfo["contract_info"].(map[string]interface{}) + updatedCodeID := updatedContractInfo["code_id"].(string) + require.Equal(t, updatedCodeID, newCodeIDStr) } From 3749e8474b0abf3195ab1be1221dfe5945825f8a Mon Sep 17 00:00:00 2001 From: Ash Date: Sat, 2 Mar 2024 08:42:29 -0700 Subject: [PATCH 244/501] minimal upgrades --- app/app.go | 10 +++++----- app/upgrades/v2/constants.go | 2 +- go.mod | 4 ++-- go.sum | 3 +++ integration_tests/go.mod | 4 ++-- integration_tests/go.sum | 2 ++ integration_tests/utils.go | 1 + 7 files changed, 16 insertions(+), 10 deletions(-) diff --git a/app/app.go b/app/app.go index 259ae3b7..0b89c310 100644 --- a/app/app.go +++ b/app/app.go @@ -94,9 +94,9 @@ import ( upgradeclient "github.com/cosmos/cosmos-sdk/x/upgrade/client" upgradekeeper "github.com/cosmos/cosmos-sdk/x/upgrade/keeper" upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" - packetforward "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/router" - packetforwardkeeper "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/router/keeper" - packetforwardtypes "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/router/types" + packetforward "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/packetforward" + packetforwardkeeper "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/packetforward/keeper" + packetforwardtypes "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/packetforward/types" ibchooks "github.com/cosmos/ibc-apps/modules/ibc-hooks/v7" ibchookskeeper "github.com/cosmos/ibc-apps/modules/ibc-hooks/v7/keeper" ibchookstypes "github.com/cosmos/ibc-apps/modules/ibc-hooks/v7/types" @@ -614,12 +614,12 @@ func NewWasmApp( app.PacketForwardKeeper = packetforwardkeeper.NewKeeper( appCodec, keys[packetforwardtypes.StoreKey], - app.GetSubspace(packetforwardtypes.ModuleName), app.TransferKeeper, // Will be zero-value here. Reference is set later on with SetTransferKeeper. app.IBCKeeper.ChannelKeeper, app.DistrKeeper, app.BankKeeper, app.IBCKeeper.ChannelKeeper, + authtypes.NewModuleAddress(govtypes.ModuleName).String(), ) // Create Transfer Keepers @@ -786,7 +786,7 @@ func NewWasmApp( ibcfee.NewAppModule(app.IBCFeeKeeper), ica.NewAppModule(&app.ICAControllerKeeper, &app.ICAHostKeeper), ibchooks.NewAppModule(app.AccountKeeper), - packetforward.NewAppModule(app.PacketForwardKeeper), + packetforward.NewAppModule(app.PacketForwardKeeper, app.GetSubspace(packetforwardtypes.ModuleName)), feeabsModule, crisis.NewAppModule(app.CrisisKeeper, skipGenesisInvariants, app.GetSubspace(crisistypes.ModuleName)), // always be last to make sure that it checks for all invariants and not only part of them ) diff --git a/app/upgrades/v2/constants.go b/app/upgrades/v2/constants.go index 3f3c1fde..5cceb4a5 100644 --- a/app/upgrades/v2/constants.go +++ b/app/upgrades/v2/constants.go @@ -3,7 +3,7 @@ package v2 import ( xiontypes "github.com/burnt-labs/xion/x/xion/types" store "github.com/cosmos/cosmos-sdk/store/types" - packetforwardtypes "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/router/types" + packetforwardtypes "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/packetforward/types" "github.com/burnt-labs/xion/app/upgrades" diff --git a/go.mod b/go.mod index 95dfcaba..26913755 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/cosmos/gogogateway v1.2.0 // indirect github.com/cosmos/gogoproto v1.4.10 github.com/cosmos/iavl v0.20.1 // indirect - github.com/cosmos/ibc-go/v7 v7.3.0 + github.com/cosmos/ibc-go/v7 v7.3.1 github.com/cosmos/ics23/go v0.10.0 // indirect github.com/docker/distribution v2.8.2+incompatible // indirect github.com/dvsekhvalnov/jose2go v1.5.0 // indirect @@ -42,7 +42,7 @@ require ( github.com/armon/go-metrics v0.4.1 github.com/cometbft/cometbft v0.37.2 github.com/cometbft/cometbft-db v0.8.0 - github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.0.0-20230803181732-7c8f814d3b79 + github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.1.3-0.20240228213828-cce7f56d000b github.com/cosmos/ibc-apps/modules/ibc-hooks/v7 v7.0.0-20230802211043-d72e83c94350 github.com/golang/mock v1.6.0 github.com/larry0x/abstract-account v0.0.0-20240202022305-255071ed91ee diff --git a/go.sum b/go.sum index 4a799d9f..111c4199 100644 --- a/go.sum +++ b/go.sum @@ -342,10 +342,13 @@ github.com/cosmos/iavl v0.20.1 h1:rM1kqeG3/HBT85vsZdoSNsehciqUQPWrR4BYmqE2+zg= github.com/cosmos/iavl v0.20.1/go.mod h1:WO7FyvaZJoH65+HFOsDir7xU9FWk2w9cHXNW1XHcl7A= github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.0.0-20230803181732-7c8f814d3b79 h1:n+PjYB3JnbKN+sGmX6khST4xMP+D0UdrMNj7O91fuOg= github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.0.0-20230803181732-7c8f814d3b79/go.mod h1:fctjEnz9xaBFOlmYYPdKL8Hs1Y3GUKilSwsJdqBb5QU= +github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.1.3-0.20240228213828-cce7f56d000b h1:VwhHRRIPdMshBMb2TP7xrkY4Ee8CJWsHZvucYeJ56no= +github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.1.3-0.20240228213828-cce7f56d000b/go.mod h1:UvDmcGIWJPIytq+Q78/ff5NTOsuX/7IrNgEugTW5i0s= github.com/cosmos/ibc-apps/modules/ibc-hooks/v7 v7.0.0-20230802211043-d72e83c94350 h1:NyXIgMKsCTnmD8fcuuuX+45Py9xh/mfpPJ8yr3MI3zg= github.com/cosmos/ibc-apps/modules/ibc-hooks/v7 v7.0.0-20230802211043-d72e83c94350/go.mod h1:JwHFbo1oX/ht4fPpnPvmhZr+dCkYK1Vihw+vZE9umR4= github.com/cosmos/ibc-go/v7 v7.3.0 h1:QtGeVMi/3JeLWuvEuC60sBHpAF40Oenx/y+bP8+wRRw= github.com/cosmos/ibc-go/v7 v7.3.0/go.mod h1:mUmaHFXpXrEdcxfdXyau+utZf14pGKVUiXwYftRZZfQ= +github.com/cosmos/ibc-go/v7 v7.3.1/go.mod h1:wvx4pPBofe5ZdMNV3OFRxSI4auEP5Qfqf8JXLLNV04g= github.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZDM= github.com/cosmos/ics23/go v0.10.0/go.mod h1:ZfJSmng/TBNTBkFemHHHj5YY7VAU/MBU980F4VU1NG0= github.com/cosmos/keyring v1.2.0 h1:8C1lBP9xhImmIabyXW4c3vFjjLiBdGCmfLUfeZlV1Yo= diff --git a/integration_tests/go.mod b/integration_tests/go.mod index b1bca867..363fc486 100644 --- a/integration_tests/go.mod +++ b/integration_tests/go.mod @@ -7,7 +7,7 @@ require ( github.com/CosmWasm/wasmd v0.43.0 github.com/burnt-labs/xion v0.1.0 github.com/cosmos/cosmos-sdk v0.47.5 - github.com/cosmos/ibc-go/v7 v7.3.0 + github.com/cosmos/ibc-go/v7 v7.3.1 github.com/docker/docker v24.0.4+incompatible github.com/golang-jwt/jwt/v4 v4.3.0 github.com/icza/dyno v0.0.0-20220812133438-f0b6f8a18845 @@ -69,7 +69,7 @@ require ( github.com/cosmos/gogogateway v1.2.0 // indirect github.com/cosmos/gogoproto v1.4.10 // indirect github.com/cosmos/iavl v0.20.1 // indirect - github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.0.0-20230803181732-7c8f814d3b79 // indirect + github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.1.3-0.20240228213828-cce7f56d000b // indirect github.com/cosmos/ibc-apps/modules/ibc-hooks/v7 v7.0.0-20230802211043-d72e83c94350 // indirect github.com/cosmos/ics23/go v0.10.0 // indirect github.com/cosmos/ledger-cosmos-go v0.12.2 // indirect diff --git a/integration_tests/go.sum b/integration_tests/go.sum index d206d0ea..41a24474 100644 --- a/integration_tests/go.sum +++ b/integration_tests/go.sum @@ -367,10 +367,12 @@ github.com/cosmos/iavl v0.20.1 h1:rM1kqeG3/HBT85vsZdoSNsehciqUQPWrR4BYmqE2+zg= github.com/cosmos/iavl v0.20.1/go.mod h1:WO7FyvaZJoH65+HFOsDir7xU9FWk2w9cHXNW1XHcl7A= github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.0.0-20230803181732-7c8f814d3b79 h1:n+PjYB3JnbKN+sGmX6khST4xMP+D0UdrMNj7O91fuOg= github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.0.0-20230803181732-7c8f814d3b79/go.mod h1:fctjEnz9xaBFOlmYYPdKL8Hs1Y3GUKilSwsJdqBb5QU= +github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.1.3-0.20240228213828-cce7f56d000b/go.mod h1:UvDmcGIWJPIytq+Q78/ff5NTOsuX/7IrNgEugTW5i0s= github.com/cosmos/ibc-apps/modules/ibc-hooks/v7 v7.0.0-20230802211043-d72e83c94350 h1:NyXIgMKsCTnmD8fcuuuX+45Py9xh/mfpPJ8yr3MI3zg= github.com/cosmos/ibc-apps/modules/ibc-hooks/v7 v7.0.0-20230802211043-d72e83c94350/go.mod h1:JwHFbo1oX/ht4fPpnPvmhZr+dCkYK1Vihw+vZE9umR4= github.com/cosmos/ibc-go/v7 v7.3.0 h1:QtGeVMi/3JeLWuvEuC60sBHpAF40Oenx/y+bP8+wRRw= github.com/cosmos/ibc-go/v7 v7.3.0/go.mod h1:mUmaHFXpXrEdcxfdXyau+utZf14pGKVUiXwYftRZZfQ= +github.com/cosmos/ibc-go/v7 v7.3.1/go.mod h1:wvx4pPBofe5ZdMNV3OFRxSI4auEP5Qfqf8JXLLNV04g= github.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZDM= github.com/cosmos/ics23/go v0.10.0/go.mod h1:ZfJSmng/TBNTBkFemHHHj5YY7VAU/MBU980F4VU1NG0= github.com/cosmos/ledger-cosmos-go v0.12.2 h1:/XYaBlE2BJxtvpkHiBm97gFGSGmYGKunKyF3nNqAXZA= diff --git a/integration_tests/utils.go b/integration_tests/utils.go index 8ba0f548..da39f88a 100644 --- a/integration_tests/utils.go +++ b/integration_tests/utils.go @@ -127,6 +127,7 @@ func BuildXionChain(t *testing.T, gas string, modifyGenesis func(ibc.ChainConfig // pulling image from env to foster local dev imageTag := os.Getenv("XION_IMAGE") + println("image tag:", imageTag) imageTagComponents := strings.Split(imageTag, ":") // Chain factory From 5615f16e17701125cbea50e480675505050d80af Mon Sep 17 00:00:00 2001 From: Ash Date: Sat, 2 Mar 2024 08:50:58 -0700 Subject: [PATCH 245/501] upgrade fee abs --- app/ante.go | 4 +- app/app.go | 10 +- app/upgrades/v3/constants.go | 2 +- go.mod | 73 ++++++++------- go.sum | 172 +++++++++++++++++++++-------------- integration_tests/go.mod | 66 +++++++------- integration_tests/go.sum | 32 +++++++ 7 files changed, 215 insertions(+), 144 deletions(-) diff --git a/app/ante.go b/app/ante.go index b37c3b3d..f0fdcb3e 100644 --- a/app/ante.go +++ b/app/ante.go @@ -13,8 +13,8 @@ import ( "github.com/cosmos/ibc-go/v7/modules/core/keeper" "github.com/larry0x/abstract-account/x/abstractaccount" aakeeper "github.com/larry0x/abstract-account/x/abstractaccount/keeper" - feeabsante "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/ante" - feeabskeeper "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/keeper" + feeabsante "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/ante" + feeabskeeper "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/keeper" wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" wasmTypes "github.com/CosmWasm/wasmd/x/wasm/types" diff --git a/app/app.go b/app/app.go index 0b89c310..894ff9f1 100644 --- a/app/app.go +++ b/app/app.go @@ -1,14 +1,14 @@ package app import ( - autocliv1 "cosmossdk.io/api/cosmos/autocli/v1" - reflectionv1 "cosmossdk.io/api/cosmos/reflection/v1" "encoding/json" "fmt" "io" "os" "path/filepath" + autocliv1 "cosmossdk.io/api/cosmos/autocli/v1" + reflectionv1 "cosmossdk.io/api/cosmos/reflection/v1" "github.com/burnt-labs/xion/x/globalfee" dbm "github.com/cometbft/cometbft-db" abci "github.com/cometbft/cometbft/abci/types" @@ -125,9 +125,9 @@ import ( aa "github.com/larry0x/abstract-account/x/abstractaccount" aakeeper "github.com/larry0x/abstract-account/x/abstractaccount/keeper" aatypes "github.com/larry0x/abstract-account/x/abstractaccount/types" - "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs" - feeabskeeper "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/keeper" - feeabstypes "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs" + feeabskeeper "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/keeper" + feeabstypes "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" "github.com/spf13/cast" diff --git a/app/upgrades/v3/constants.go b/app/upgrades/v3/constants.go index aaf1b198..6a889c95 100644 --- a/app/upgrades/v3/constants.go +++ b/app/upgrades/v3/constants.go @@ -2,7 +2,7 @@ package v3 import ( store "github.com/cosmos/cosmos-sdk/store/types" - feeabstypes "github.com/osmosis-labs/fee-abstraction/v4/x/feeabs/types" + feeabstypes "github.com/osmosis-labs/fee-abstraction/v7/x/feeabs/types" "github.com/burnt-labs/xion/app/upgrades" ) diff --git a/go.mod b/go.mod index 26913755..81897aae 100644 --- a/go.mod +++ b/go.mod @@ -1,11 +1,13 @@ module github.com/burnt-labs/xion -go 1.19 +go 1.21 + +toolchain go1.21.7 require ( github.com/CosmWasm/wasmvm v1.4.1 // indirect github.com/cosmos/cosmos-proto v1.0.0-beta.3 - github.com/cosmos/cosmos-sdk v0.47.5 + github.com/cosmos/cosmos-sdk v0.47.6 github.com/cosmos/gogogateway v1.2.0 // indirect github.com/cosmos/gogoproto v1.4.10 github.com/cosmos/iavl v0.20.1 // indirect @@ -22,12 +24,12 @@ require ( github.com/rakyll/statik v0.1.7 // indirect github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa github.com/spf13/cast v1.5.1 - github.com/spf13/cobra v1.7.0 + github.com/spf13/cobra v1.8.0 github.com/spf13/pflag v1.0.5 // indirect github.com/stretchr/testify v1.8.4 github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d - google.golang.org/genproto v0.0.0-20230706204954-ccb25ca9f130 // indirect - google.golang.org/grpc v1.56.2 + google.golang.org/genproto v0.0.0-20231012201019-e917dd12ba7a // indirect + google.golang.org/grpc v1.59.0 gopkg.in/yaml.v2 v2.4.0 // indirect ) @@ -36,34 +38,34 @@ require ( cosmossdk.io/core v0.6.1 cosmossdk.io/depinject v1.0.0-alpha.4 cosmossdk.io/errors v1.0.0 - cosmossdk.io/math v1.1.2 + cosmossdk.io/math v1.2.0 cosmossdk.io/tools/rosetta v0.2.1 github.com/CosmWasm/wasmd v0.43.0 github.com/armon/go-metrics v0.4.1 - github.com/cometbft/cometbft v0.37.2 - github.com/cometbft/cometbft-db v0.8.0 + github.com/cometbft/cometbft v0.37.4 + github.com/cometbft/cometbft-db v0.9.1 github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.1.3-0.20240228213828-cce7f56d000b github.com/cosmos/ibc-apps/modules/ibc-hooks/v7 v7.0.0-20230802211043-d72e83c94350 github.com/golang/mock v1.6.0 github.com/larry0x/abstract-account v0.0.0-20240202022305-255071ed91ee - github.com/osmosis-labs/fee-abstraction/v4 v4.0.0-20230812032455-33dfc391894d + github.com/osmosis-labs/fee-abstraction/v7 v7.0.0-20240302094915-ba36778366d0 github.com/spf13/viper v1.16.0 - google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529 + google.golang.org/genproto/googleapis/api v0.0.0-20231002182017-d307bd883b97 gotest.tools/v3 v3.5.0 sigs.k8s.io/yaml v1.3.0 ) require ( - cloud.google.com/go v0.110.4 // indirect - cloud.google.com/go/compute v1.20.1 // indirect + cloud.google.com/go v0.110.8 // indirect + cloud.google.com/go/compute v1.23.0 // indirect cloud.google.com/go/compute/metadata v0.2.3 // indirect - cloud.google.com/go/iam v1.1.0 // indirect + cloud.google.com/go/iam v1.1.2 // indirect cloud.google.com/go/storage v1.30.1 // indirect cosmossdk.io/log v1.2.1 // indirect filippo.io/edwards25519 v1.0.0 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect github.com/99designs/keyring v1.2.2 // indirect - github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d // indirect + github.com/ChainSafe/go-schnorrkel v1.0.0 // indirect github.com/aws/aws-sdk-go v1.44.203 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect @@ -81,7 +83,7 @@ require ( github.com/confio/ics23/go v0.9.0 // indirect github.com/cosmos/btcutil v1.0.5 // indirect github.com/cosmos/go-bip39 v1.0.0 // indirect - github.com/cosmos/ledger-cosmos-go v0.12.2 // indirect + github.com/cosmos/ledger-cosmos-go v0.12.4 // indirect github.com/cosmos/rosetta-sdk-go v0.10.0 // indirect github.com/creachadair/taskgroup v0.4.2 // indirect github.com/danieljoos/wincred v1.1.2 // indirect @@ -101,16 +103,16 @@ require ( github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect github.com/gogo/googleapis v1.4.1 // indirect github.com/gogo/protobuf v1.3.3 // indirect - github.com/golang/glog v1.1.0 // indirect + github.com/golang/glog v1.1.2 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/snappy v0.0.4 // indirect github.com/google/btree v1.1.2 // indirect - github.com/google/go-cmp v0.5.9 // indirect + github.com/google/go-cmp v0.6.0 // indirect github.com/google/orderedcode v0.0.1 // indirect github.com/google/s2a-go v0.1.4 // indirect - github.com/google/uuid v1.3.0 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect - github.com/googleapis/gax-go/v2 v2.11.0 // indirect + github.com/google/uuid v1.3.1 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.2.4 // indirect + github.com/googleapis/gax-go/v2 v2.12.0 // indirect github.com/gorilla/handlers v1.5.1 // indirect github.com/gorilla/websocket v1.5.0 // indirect github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 // indirect @@ -131,12 +133,12 @@ require ( github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect - github.com/klauspost/compress v1.16.3 // indirect + github.com/klauspost/compress v1.16.7 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect github.com/lib/pq v1.10.9 // indirect github.com/libp2p/go-buffer-pool v0.1.0 // indirect - github.com/linxGnu/grocksdb v1.7.16 // indirect + github.com/linxGnu/grocksdb v1.8.6 // indirect github.com/magiconair/properties v1.8.7 // indirect github.com/manifoldco/promptui v0.9.0 // indirect github.com/mattn/go-colorable v0.1.13 // indirect @@ -166,26 +168,27 @@ require ( github.com/tendermint/go-amino v0.16.0 // indirect github.com/tidwall/btree v1.6.0 // indirect github.com/ulikunitz/xz v0.5.11 // indirect - github.com/zondax/hid v0.9.1 // indirect - github.com/zondax/ledger-go v0.14.1 // indirect - go.etcd.io/bbolt v1.3.7 // indirect + github.com/zondax/hid v0.9.2 // indirect + github.com/zondax/ledger-go v0.14.3 // indirect + go.etcd.io/bbolt v1.3.8 // indirect go.opencensus.io v0.24.0 // indirect - golang.org/x/crypto v0.12.0 // indirect + golang.org/x/crypto v0.15.0 // indirect golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb // indirect - golang.org/x/net v0.14.0 // indirect - golang.org/x/oauth2 v0.8.0 // indirect - golang.org/x/sys v0.11.0 // indirect - golang.org/x/term v0.11.0 // indirect - golang.org/x/text v0.12.0 // indirect + golang.org/x/net v0.18.0 // indirect + golang.org/x/oauth2 v0.11.0 // indirect + golang.org/x/sync v0.3.0 // indirect + golang.org/x/sys v0.14.0 // indirect + golang.org/x/term v0.14.0 // indirect + golang.org/x/text v0.14.0 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect - google.golang.org/api v0.126.0 // indirect + google.golang.org/api v0.128.0 // indirect google.golang.org/appengine v1.6.7 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b // indirect google.golang.org/protobuf v1.31.0 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect nhooyr.io/websocket v1.8.6 // indirect - pgregory.net/rapid v0.5.5 // indirect + pgregory.net/rapid v1.1.0 // indirect ) replace ( @@ -203,6 +206,8 @@ replace ( github.com/syndtr/goleveldb => github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 github.com/tendermint/tendermint => github.com/informalsystems/tendermint v0.34.24 + + github.com/vektra/mockery/v2 => github.com/vektra/mockery/v2 v2.14.0 ) replace github.com/larry0x/abstract-account => github.com/burnt-labs/abstract-account v0.0.0-20240202022305-255071ed91ee diff --git a/go.sum b/go.sum index 111c4199..fc261c0d 100644 --- a/go.sum +++ b/go.sum @@ -32,8 +32,8 @@ cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w9 cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= -cloud.google.com/go v0.110.4 h1:1JYyxKMN9hd5dR2MYTPWkGUgcoxVVhg0LKNKEo0qvmk= -cloud.google.com/go v0.110.4/go.mod h1:+EYjdK8e5RME/VY/qLCAtuyALQ9q67dvuum8i+H5xsI= +cloud.google.com/go v0.110.8 h1:tyNdfIxjzaWctIiLYOTalaLKZ17SI44SKFW26QbOhME= +cloud.google.com/go v0.110.8/go.mod h1:Iz8AkXJf1qmxC3Oxoep8R1T36w8B92yU29PcBhHO5fk= cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= @@ -70,8 +70,8 @@ cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= -cloud.google.com/go/compute v1.20.1 h1:6aKEtlUiwEpJzM001l0yFkpXmUVXaN8W+fbkb2AZNbg= -cloud.google.com/go/compute v1.20.1/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= +cloud.google.com/go/compute v1.23.0 h1:tP41Zoavr8ptEqaW6j+LQOnyBBhO7OkOMAGrgLopTwY= +cloud.google.com/go/compute v1.23.0/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= @@ -111,8 +111,8 @@ cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y97 cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= -cloud.google.com/go/iam v1.1.0 h1:67gSqaPukx7O8WLLHMa0PNs3EBGd2eE4d+psbO/CO94= -cloud.google.com/go/iam v1.1.0/go.mod h1:nxdHjaKfCr7fNYx/HJMM8LgiMugmveWlkatear5gVyk= +cloud.google.com/go/iam v1.1.2 h1:gacbrBdWcoVmGLozRuStX45YKvJtzIjJdAolzUs1sm4= +cloud.google.com/go/iam v1.1.2/go.mod h1:A5avdyVL2tCppe4unb0951eI9jreack+RJ0/d+KUZOU= cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= @@ -197,8 +197,8 @@ cosmossdk.io/errors v1.0.0 h1:nxF07lmlBbB8NKQhtJ+sJm6ef5uV1XkvPXG2bUntb04= cosmossdk.io/errors v1.0.0/go.mod h1:+hJZLuhdDE0pYN8HkOrVNwrIOYvUGnn6+4fjnJs/oV0= cosmossdk.io/log v1.2.1 h1:Xc1GgTCicniwmMiKwDxUjO4eLhPxoVdI9vtMW8Ti/uk= cosmossdk.io/log v1.2.1/go.mod h1:GNSCc/6+DhFIj1aLn/j7Id7PaO8DzNylUZoOYBL9+I4= -cosmossdk.io/math v1.1.2 h1:ORZetZCTyWkI5GlZ6CZS28fMHi83ZYf+A2vVnHNzZBM= -cosmossdk.io/math v1.1.2/go.mod h1:l2Gnda87F0su8a/7FEKJfFdJrM0JZRXQaohlgJeyQh0= +cosmossdk.io/math v1.2.0 h1:8gudhTkkD3NxOP2YyyJIYYmt6dQ55ZfJkDOaxXpy7Ig= +cosmossdk.io/math v1.2.0/go.mod h1:l2Gnda87F0su8a/7FEKJfFdJrM0JZRXQaohlgJeyQh0= cosmossdk.io/tools/rosetta v0.2.1 h1:ddOMatOH+pbxWbrGJKRAawdBkPYLfKXutK9IETnjYxw= cosmossdk.io/tools/rosetta v0.2.1/go.mod h1:Pqdc1FdvkNV3LcNIkYWt2RQY6IP1ge6YWZk8MhhO9Hw= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= @@ -207,10 +207,11 @@ filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5E 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/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= +github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= -github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= +github.com/ChainSafe/go-schnorrkel v1.0.0 h1:3aDA67lAykLaG1y3AOjs88dMxC88PgUuHRrLeDnvGIM= +github.com/ChainSafe/go-schnorrkel v1.0.0/go.mod h1:dpzHYVxLZcp8pjlV+O+UR8K0Hp/z7vcchBSbMBEhCw4= github.com/CosmWasm/wasmd v0.43.0 h1:4xQAiNf6Ej+TuYe4PXwrtVJ9C+xyFrbsdqHH/kU9Vxk= github.com/CosmWasm/wasmd v0.43.0/go.mod h1:gpri8YvkRErBz+qDme5jOThGZmSlHfyN532bWibXOl4= github.com/CosmWasm/wasmvm v1.4.1 h1:YgodVlBrXa2HJZzOXjWDH0EIRwQzK3zuA73dDPRRLS4= @@ -218,7 +219,9 @@ github.com/CosmWasm/wasmvm v1.4.1/go.mod h1:fXB+m2gyh4v9839zlIXdMZGeLAxqUdYdFQqY github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= +github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= +github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= @@ -226,6 +229,7 @@ github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMx 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/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I= +github.com/adlio/schema v1.3.3/go.mod h1:1EsRssiv9/Ce2CMzq5DoL7RiMshhuigQxrR4DMV9fHg= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= 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= @@ -260,8 +264,11 @@ github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816/go.mod h1:+zsy github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= github.com/btcsuite/btcd/btcutil v1.1.2 h1:XLMbX8JQEiwMcYft2EGi8zPUkoa0abKIU6/BJSRsjzQ= +github.com/btcsuite/btcd/btcutil v1.1.2/go.mod h1:UR7dsSJzJUfMmFiiLlIrMq1lS9jh9EdCV7FStZSnpi0= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= github.com/bufbuild/protocompile v0.4.0 h1:LbFKd2XowZvQ/kajzguUp2DC9UEIQhIq77fZZlaQsNA= +github.com/bufbuild/protocompile v0.4.0/go.mod h1:3v93+mbWn/v3xzN+31nwkJfrEpAUwp+BagBSZWx+TP8= github.com/burnt-labs/abstract-account v0.0.0-20240202022305-255071ed91ee h1:04DdmDV4PnDOIyEeasOcu+fGDPzXpappY8Um8c+PSRI= github.com/burnt-labs/abstract-account v0.0.0-20240202022305-255071ed91ee/go.mod h1:R+/UYwxE92VUFOWLyyuBa2RRI2lUwb9uHwRWDBrNzx0= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= @@ -311,13 +318,14 @@ github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZ github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/coinbase/rosetta-sdk-go/types v1.0.0 h1:jpVIwLcPoOeCR6o1tU+Xv7r5bMONNbHU7MuEHboiFuA= github.com/coinbase/rosetta-sdk-go/types v1.0.0/go.mod h1:eq7W2TMRH22GTW0N0beDnN931DW0/WOI1R2sdHNHG4c= -github.com/cometbft/cometbft v0.37.2 h1:XB0yyHGT0lwmJlFmM4+rsRnczPlHoAKFX6K8Zgc2/Jc= -github.com/cometbft/cometbft v0.37.2/go.mod h1:Y2MMMN//O5K4YKd8ze4r9jmk4Y7h0ajqILXbH5JQFVs= -github.com/cometbft/cometbft-db v0.8.0 h1:vUMDaH3ApkX8m0KZvOFFy9b5DZHBAjsnEuo9AKVZpjo= -github.com/cometbft/cometbft-db v0.8.0/go.mod h1:6ASCP4pfhmrCBpfk01/9E1SI29nD3HfVHrY4PG8x5c0= +github.com/cometbft/cometbft v0.37.4 h1:xyvvEqlyfK8MgNIIKVJaMsuIp03wxOcFmVkT26+Ikpg= +github.com/cometbft/cometbft v0.37.4/go.mod h1:Cmg5Hp4sNpapm7j+x0xRyt2g0juQfmB752ous+pA0G8= +github.com/cometbft/cometbft-db v0.9.1 h1:MIhVX5ja5bXNHF8EYrThkG9F7r9kSfv8BX4LWaxWJ4M= +github.com/cometbft/cometbft-db v0.9.1/go.mod h1:iliyWaoV0mRwBJoizElCwwRA9Tf7jZJOURcRZF9m60U= github.com/confio/ics23/go v0.9.0 h1:cWs+wdbS2KRPZezoaaj+qBleXgUk5WOQFMP3CQFGTr4= github.com/confio/ics23/go v0.9.0/go.mod h1:4LPZ2NYqnYIVRklaozjNR1FScgDJ2s5Xrp+e/mYVRak= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= +github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= @@ -328,8 +336,8 @@ 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-proto v1.0.0-beta.3 h1:VitvZ1lPORTVxkmF2fAp3IiA61xVwArQYKXTdEcpW6o= github.com/cosmos/cosmos-proto v1.0.0-beta.3/go.mod h1:t8IASdLaAq+bbHbjq4p960BvcTqtwuAxid3b/2rOD6I= -github.com/cosmos/cosmos-sdk v0.47.5 h1:n1+WjP/VM/gAEOx3TqU2/Ny734rj/MX1kpUnn7zVJP8= -github.com/cosmos/cosmos-sdk v0.47.5/go.mod h1:EHwCeN9IXonsjKcjpS12MqeStdZvIdxt3VYXhus3G3c= +github.com/cosmos/cosmos-sdk v0.47.6 h1:uyo/eg9NMB66aQZIZUv/LeOPTdSnsU23wZkgFYpjikQ= +github.com/cosmos/cosmos-sdk v0.47.6/go.mod h1:xTc1chW8HyUWCfrgGbjS5jNu9RzlPVrBNfbL9RmZUio= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= @@ -340,26 +348,23 @@ github.com/cosmos/gogoproto v1.4.10 h1:QH/yT8X+c0F4ZDacDv3z+xE3WU1P1Z3wQoLMBRJoK github.com/cosmos/gogoproto v1.4.10/go.mod h1:3aAZzeRWpAwr+SS/LLkICX2/kDFyaYVzckBDzygIxek= github.com/cosmos/iavl v0.20.1 h1:rM1kqeG3/HBT85vsZdoSNsehciqUQPWrR4BYmqE2+zg= github.com/cosmos/iavl v0.20.1/go.mod h1:WO7FyvaZJoH65+HFOsDir7xU9FWk2w9cHXNW1XHcl7A= -github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.0.0-20230803181732-7c8f814d3b79 h1:n+PjYB3JnbKN+sGmX6khST4xMP+D0UdrMNj7O91fuOg= -github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.0.0-20230803181732-7c8f814d3b79/go.mod h1:fctjEnz9xaBFOlmYYPdKL8Hs1Y3GUKilSwsJdqBb5QU= github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.1.3-0.20240228213828-cce7f56d000b h1:VwhHRRIPdMshBMb2TP7xrkY4Ee8CJWsHZvucYeJ56no= github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.1.3-0.20240228213828-cce7f56d000b/go.mod h1:UvDmcGIWJPIytq+Q78/ff5NTOsuX/7IrNgEugTW5i0s= github.com/cosmos/ibc-apps/modules/ibc-hooks/v7 v7.0.0-20230802211043-d72e83c94350 h1:NyXIgMKsCTnmD8fcuuuX+45Py9xh/mfpPJ8yr3MI3zg= github.com/cosmos/ibc-apps/modules/ibc-hooks/v7 v7.0.0-20230802211043-d72e83c94350/go.mod h1:JwHFbo1oX/ht4fPpnPvmhZr+dCkYK1Vihw+vZE9umR4= -github.com/cosmos/ibc-go/v7 v7.3.0 h1:QtGeVMi/3JeLWuvEuC60sBHpAF40Oenx/y+bP8+wRRw= -github.com/cosmos/ibc-go/v7 v7.3.0/go.mod h1:mUmaHFXpXrEdcxfdXyau+utZf14pGKVUiXwYftRZZfQ= +github.com/cosmos/ibc-go/v7 v7.3.1 h1:bil1IjnHdyWDASFYKfwdRiNtFP6WK3osW7QFEAgU4I8= github.com/cosmos/ibc-go/v7 v7.3.1/go.mod h1:wvx4pPBofe5ZdMNV3OFRxSI4auEP5Qfqf8JXLLNV04g= github.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZDM= github.com/cosmos/ics23/go v0.10.0/go.mod h1:ZfJSmng/TBNTBkFemHHHj5YY7VAU/MBU980F4VU1NG0= github.com/cosmos/keyring v1.2.0 h1:8C1lBP9xhImmIabyXW4c3vFjjLiBdGCmfLUfeZlV1Yo= github.com/cosmos/keyring v1.2.0/go.mod h1:fc+wB5KTk9wQ9sDx0kFXB3A0MaeGHM9AwRStKOQ5vOA= -github.com/cosmos/ledger-cosmos-go v0.12.2 h1:/XYaBlE2BJxtvpkHiBm97gFGSGmYGKunKyF3nNqAXZA= -github.com/cosmos/ledger-cosmos-go v0.12.2/go.mod h1:ZcqYgnfNJ6lAXe4HPtWgarNEY+B74i+2/8MhZw4ziiI= +github.com/cosmos/ledger-cosmos-go v0.12.4 h1:drvWt+GJP7Aiw550yeb3ON/zsrgW0jgh5saFCr7pDnw= +github.com/cosmos/ledger-cosmos-go v0.12.4/go.mod h1:fjfVWRf++Xkygt9wzCsjEBdjcf7wiiY35fv3ctT+k4M= github.com/cosmos/rosetta-sdk-go v0.10.0 h1:E5RhTruuoA7KTIXUcMicL76cffyeoyvNybzUGSKFTcM= github.com/cosmos/rosetta-sdk-go v0.10.0/go.mod h1:SImAZkb96YbwvoRkzSMQB6noNJXFgWl/ENIznEoYQI4= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/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.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creachadair/taskgroup v0.4.2 h1:jsBLdAJE42asreGss2xZGZ8fJra7WtwnHWeJFxv2Li8= github.com/creachadair/taskgroup v0.4.2/go.mod h1:qiXUOSrbwAY3u0JPGTzObbE3yf9hcXHDKBZ2ZjpCbgM= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= @@ -370,6 +375,7 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= +github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 h1:HbphB4TFFXpv7MNrT52FGrrgVXF1owhMVTHFZIlnvd4= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0/go.mod h1:DZGJHZMqrU4JJqFAWUS2UO1+lbSKsdiOoYi9Zzey7Fc= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= @@ -385,7 +391,9 @@ github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUn github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8= github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= +github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= 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/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= @@ -412,9 +420,11 @@ github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSw github.com/felixge/httpsnoop v1.0.2 h1:+nS9g82KMXccJ/wp0zyRW9ZBHFETmMGtkk+2CTTrW4o= github.com/felixge/httpsnoop v1.0.2/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= +github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= +github.com/frankban/quicktest v1.14.4/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.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= @@ -427,6 +437,7 @@ github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm github.com/gin-gonic/gin v1.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8= github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk= github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= +github.com/go-errors/errors v1.4.2/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= @@ -449,6 +460,7 @@ github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/j github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= github.com/go-playground/validator/v10 v10.10.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos= github.com/go-playground/validator/v10 v10.11.1 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJWXmqUsHwfTRRkQ= +github.com/go-playground/validator/v10 v10.11.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee h1:s+21KNqlpePfkah2I+gwHF8xmJWRjooY+5248k6m4A0= @@ -459,6 +471,7 @@ github.com/gobwas/ws v1.0.2 h1:CoAavW/wd/kulfZmSIBt6p24n4j7tHgNVCjsfHVNUbo= github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/goccy/go-json v0.9.11 h1:/pAaQDLHEoCq/5FFmSKBswWmK6H0e8g4159Kc/X/nqk= +github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= 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= @@ -468,8 +481,8 @@ 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/golang-jwt/jwt/v4 v4.4.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/glog v1.1.0 h1:/d3pCKDPWNnvIWe0vVUpNP32qc8U3PDVxySP/y360qE= -github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ= +github.com/golang/glog v1.1.2 h1:DVjP2PbBOzHyzA+dn3WhHIq4NdVu3Q+pvivFICf/7fo= +github.com/golang/glog v1.1.2/go.mod h1:zR+okUeTbrL6EL3xHUDxZuEtGv04p5shwip1+mL/rLQ= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= 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= @@ -528,8 +541,9 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ 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.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= 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= @@ -540,6 +554,7 @@ github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIG github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= github.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw= +github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= 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= @@ -562,13 +577,14 @@ github.com/google/s2a-go v0.1.4 h1:1kZ/sQM3srePvKs3tXAvQzo66XfcReoqFpIpIccE7Oc= github.com/google/s2a-go v0.1.4/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4= +github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= -github.com/googleapis/enterprise-certificate-proxy v0.2.3 h1:yk9/cqRKtT9wXZSsRH9aurXEpJX+U6FLtpYTdC3R06k= -github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= +github.com/googleapis/enterprise-certificate-proxy v0.2.4 h1:uGy6JWR/uMIILU8wbf+OkstIrNiMjGpEIyhx8f6W7s4= +github.com/googleapis/enterprise-certificate-proxy v0.2.4/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= 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/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= @@ -578,8 +594,8 @@ github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99 github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= -github.com/googleapis/gax-go/v2 v2.11.0 h1:9V9PWXEsWnPpQhu/PeQIkS4eGzMlTLGgt80cUUI8Ki4= -github.com/googleapis/gax-go/v2 v2.11.0/go.mod h1:DxmR61SGKkGLa2xigwuZIQpkCI2S5iydzRfb3peWZJI= +github.com/googleapis/gax-go/v2 v2.12.0 h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas= +github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU= github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= @@ -630,8 +646,9 @@ github.com/hashicorp/go-safetemp v1.0.0/go.mod h1:oaerMy3BhqiTbVye6QuFhFtIceqFoD 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 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.2 h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2IGE= +github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= @@ -665,6 +682,7 @@ github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2 github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= github.com/jhump/protoreflect v1.15.1 h1:HUMERORf3I3ZdX05WaQ6MIpd/NJ434hTp5YiKgfCL6c= +github.com/jhump/protoreflect v1.15.1/go.mod h1:jD/2GMKKE6OqX8qTjhADU1e6DShO+gavG9e0Q693nKo= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= @@ -692,8 +710,8 @@ github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYs github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= -github.com/klauspost/compress v1.16.3 h1:XuJt9zzcnaz6a16/OU53ZjWp/v7/42WcR5t2a0PcNQY= -github.com/klauspost/compress v1.16.3/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I= +github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= 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.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= @@ -708,6 +726,7 @@ 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/larry0x/simapp v0.0.0-20230527213943-e57d94ffca4c h1:HxMMvjvPKv+Xttad2Blw6c9XKzg/Pk5TIZL8T04lUN0= +github.com/larry0x/simapp v0.0.0-20230527213943-e57d94ffca4c/go.mod h1:dPMXlnAbUE79idlpKD0z01+vBVvTiKceZZHztq2B34c= github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= @@ -716,8 +735,8 @@ github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6 github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= -github.com/linxGnu/grocksdb v1.7.16 h1:Q2co1xrpdkr5Hx3Fp+f+f7fRGhQFQhvi/+226dtLmA8= -github.com/linxGnu/grocksdb v1.7.16/go.mod h1:JkS7pl5qWpGpuVb3bPqTz8nC12X3YtPZT+Xq7+QfQo4= +github.com/linxGnu/grocksdb v1.8.6 h1:O7I6SIGPrypf3f/gmrrLUBQDKfO8uOoYdWf4gLS06tc= +github.com/linxGnu/grocksdb v1.8.6/go.mod h1:xZCIb5Muw+nhbDK4Y5UJuOrin5MceOuiXkVUR7vp4WY= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= @@ -781,6 +800,7 @@ github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OS 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/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= @@ -789,15 +809,19 @@ github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+W 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 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= +github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= 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.20.0 h1:8W0cWlwFkflGPLltQvLRB7ZVD5HuP6ng320w2IS245Q= +github.com/onsi/gomega v1.20.0/go.mod h1:DtrZpjmvpn2mPm4YWQa0/ALMDj9v4YxLgojwPeREyVo= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= 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.0-rc2 h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034= +github.com/opencontainers/image-spec v1.1.0-rc2/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ= github.com/opencontainers/runc v1.1.3 h1:vIXrkId+0/J2Ymu2m7VjGvbSlAId9XNRPhn2p4b+d8w= +github.com/opencontainers/runc v1.1.3/go.mod h1:1J5XiS+vdZ3wCyZybsuxXZWGrgSr8fFJHLXuG2PsnNg= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= @@ -807,8 +831,9 @@ github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJ github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA= -github.com/osmosis-labs/fee-abstraction/v4 v4.0.0-20230812032455-33dfc391894d h1:eZXJY4RbQa91pvCMBlTZTQF/IEze77HDnkiD11XGeK8= -github.com/osmosis-labs/fee-abstraction/v4 v4.0.0-20230812032455-33dfc391894d/go.mod h1:CzRKibzIA2HLYlnTtryB3GTtifCwAVVMgfVzQN1Sirs= +github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= +github.com/osmosis-labs/fee-abstraction/v7 v7.0.0-20240302094915-ba36778366d0 h1:Mny3Mn3gc/n7E8zqKL1Nxrsfimpssxq451Gp3GpWcjw= +github.com/osmosis-labs/fee-abstraction/v7 v7.0.0-20240302094915-ba36778366d0/go.mod h1:KnnbvyVmUnL8maFLilQFiZgijef6u/Rv/wyeNMrhtbk= github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= @@ -825,6 +850,7 @@ github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08/go.mod h1:pxMtw7c github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= +github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= 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= @@ -902,6 +928,7 @@ github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6Mwd github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= +github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= 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/snikch/goodman v0.0.0-20171125024755-10e37e294daa h1:YJfZp12Z3AFhSBeXOlv4BO55RMwPn2NoQeDsrdWnBtY= @@ -919,8 +946,8 @@ github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA= github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= -github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= +github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= +github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= @@ -979,13 +1006,13 @@ github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de 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/zondax/hid v0.9.1 h1:gQe66rtmyZ8VeGFcOpbuH3r7erYtNEAezCAYu8LdkJo= -github.com/zondax/hid v0.9.1/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= -github.com/zondax/ledger-go v0.14.1 h1:Pip65OOl4iJ84WTpA4BKChvOufMhhbxED3BaihoZN4c= -github.com/zondax/ledger-go v0.14.1/go.mod h1:fZ3Dqg6qcdXWSOJFKMG8GCTnD7slO/RL2feOQv8K320= +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.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.7 h1:j+zJOnnEjF/kyHlDDgGnVL/AIqIJPq8UoB2GSNfkUfQ= -go.etcd.io/bbolt v1.3.7/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= +go.etcd.io/bbolt v1.3.8 h1:xs88BrvEv273UsB79e0hcVrlUWmS0a8upikMFhSyAtA= +go.etcd.io/bbolt v1.3.8/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= @@ -1002,6 +1029,8 @@ go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqe 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/mock v0.2.0 h1:TaP3xedm7JaAgScZO7tlvlKrqT0p7I6OsdGB5YNSMDU= +go.uber.org/mock v0.2.0/go.mod h1:J0y0rp9L3xiff1+ZBfKxlC1fz2+aO16tw0tsDOixfuM= 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/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= @@ -1023,8 +1052,8 @@ golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.12.0 h1:tFM/ta59kqch6LlvYnPa0yx5a83cL2nHflFhYKvv9Yk= -golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= +golang.org/x/crypto v0.15.0 h1:frVn1TEaCEaZcn3Tmd7Y2b5KKPaZ+I32Q2OA3kYp5TA= +golang.org/x/crypto v0.15.0/go.mod h1:4ChreQoLWfG3xLDer1WdlH5NdlQ3+mwnQq1YTKY+72g= 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= @@ -1065,6 +1094,7 @@ 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.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc= +golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= 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= @@ -1126,8 +1156,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= -golang.org/x/net v0.14.0 h1:BONx9s002vGdD9umnlX1Po8vOZmrgH34qlHcD1MfK14= -golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= +golang.org/x/net v0.18.0 h1:mIYleuAkSbHh0tCv7RvjL3F6ZVbLjq4+R7zbOn3Kokg= +golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ= 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= @@ -1153,8 +1183,8 @@ golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= -golang.org/x/oauth2 v0.8.0 h1:6dkIjl3j3LtZ/O3sTgZTMsLKSftL/B8Zgq4huOIIUu8= -golang.org/x/oauth2 v0.8.0/go.mod h1:yr7u4HXZRm1R1kBWqr/xKNqewf0plRYoB7sla+BCIXE= +golang.org/x/oauth2 v0.11.0 h1:vPL4xzxBM4niKCW6g9whtaWVXTJf1U5e4aZxxFx/gbU= +golang.org/x/oauth2 v0.11.0/go.mod h1:LdF7O/8bLR/qWK9DrpXmbHLTouvRHK0SgJl0GmDBchk= 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= @@ -1170,6 +1200,7 @@ golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= +golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= 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= @@ -1267,13 +1298,13 @@ golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM= -golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.14.0 h1:Vz7Qs629MkJkGyHxUlRHizWJRG2j8fbQKjELVSNhy7Q= +golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= 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.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.11.0 h1:F9tnn/DA/Im8nCwm+fX+1/eBwi4qFjRT++MhtVC4ZX0= -golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= +golang.org/x/term v0.14.0 h1:LGK9IlZ8T9jvdy6cTdfKUCltatMFOehAQo9SRC46UQ8= +golang.org/x/term v0.14.0/go.mod h1:TySc+nGkYR6qt8km8wUhuFRTVSMIX3XPR58y2lC8vww= 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= @@ -1285,8 +1316,8 @@ 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.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc= -golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1352,6 +1383,7 @@ golang.org/x/tools v0.1.4/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.12.0 h1:YW6HUoUmYBpwSgyaGaZq1fHjrBjX1rlpZ54T6mu2kss= +golang.org/x/tools v0.12.0/go.mod h1:Sc0INKfu04TlqNoRA1hgpFZbhYXHPr4V5DzpSBTPqQM= 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= @@ -1410,8 +1442,8 @@ google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= -google.golang.org/api v0.126.0 h1:q4GJq+cAdMAC7XP7njvQ4tvohGLiSlytuL4BQxbIZ+o= -google.golang.org/api v0.126.0/go.mod h1:mBwVAtz+87bEN6CbA1GtZPDOqY2R5ONPqJeIlvyo4Aw= +google.golang.org/api v0.128.0 h1:RjPESny5CnQRn9V6siglged+DZCgfu9l6mO9dkX9VOg= +google.golang.org/api v0.128.0/go.mod h1:Y611qgqaE92On/7g65MQgxYul3c0rEB894kniWLY750= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1530,12 +1562,12 @@ google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqw google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= -google.golang.org/genproto v0.0.0-20230706204954-ccb25ca9f130 h1:Au6te5hbKUV8pIYWHqOUZ1pva5qK/rwbIhoXEUB9Lu8= -google.golang.org/genproto v0.0.0-20230706204954-ccb25ca9f130/go.mod h1:O9kGHb51iE/nOGvQaDUuadVYqovW56s5emA88lQnj6Y= -google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529 h1:s5YSX+ZH5b5vS9rnpGymvIyMpLRJizowqDlOuyjXnTk= -google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98 h1:bVf09lpb+OJbByTj913DRJioFFAjf/ZGxEz7MajTp2U= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98/go.mod h1:TUfxEVdsvPg18p6AslUXFoLdpED4oBnGwyqk3dV1XzM= +google.golang.org/genproto v0.0.0-20231012201019-e917dd12ba7a h1:fwgW9j3vHirt4ObdHoYNwuO24BEZjSzbh+zPaNWoiY8= +google.golang.org/genproto v0.0.0-20231012201019-e917dd12ba7a/go.mod h1:EMfReVxb80Dq1hhioy0sOsY9jCE46YDgHlJ7fWVUWRE= +google.golang.org/genproto/googleapis/api v0.0.0-20231002182017-d307bd883b97 h1:W18sezcAYs+3tDZX4F80yctqa12jcP1PUS2gQu1zTPU= +google.golang.org/genproto/googleapis/api v0.0.0-20231002182017-d307bd883b97/go.mod h1:iargEX0SFPm3xcfMI0d1domjg0ZF4Aa0p2awqyxhvF0= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b h1:ZlWIi1wSK56/8hn4QcBp/j9M7Gt3U/3hZw3mC7vDICo= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:swOH3j0KzcDDgGUWr+SNpyTen5YrXjS3eyPzFYKc6lc= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= @@ -1577,8 +1609,8 @@ google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACu google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.56.2 h1:fVRFRnXvU+x6C4IlHZewvJOVHoOv1TUuQyoRsYnB4bI= -google.golang.org/grpc v1.56.2/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= +google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk= +google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= 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= @@ -1641,8 +1673,8 @@ honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9 honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= nhooyr.io/websocket v1.8.6 h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k= nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= -pgregory.net/rapid v0.5.5 h1:jkgx1TjbQPD/feRoK+S/mXw9e1uj6WilpHrXJowi6oA= -pgregory.net/rapid v0.5.5/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= +pgregory.net/rapid v1.1.0 h1:CMa0sjHSru3puNx+J0MIAuiiEV4N0qj8/cMWGBBCsjw= +pgregory.net/rapid v1.1.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= diff --git a/integration_tests/go.mod b/integration_tests/go.mod index 363fc486..de0a9a92 100644 --- a/integration_tests/go.mod +++ b/integration_tests/go.mod @@ -1,12 +1,14 @@ module integration_tests -go 1.19 +go 1.21 + +toolchain go1.21.7 require ( - cosmossdk.io/math v1.1.2 + cosmossdk.io/math v1.2.0 github.com/CosmWasm/wasmd v0.43.0 github.com/burnt-labs/xion v0.1.0 - github.com/cosmos/cosmos-sdk v0.47.5 + github.com/cosmos/cosmos-sdk v0.47.6 github.com/cosmos/ibc-go/v7 v7.3.1 github.com/docker/docker v24.0.4+incompatible github.com/golang-jwt/jwt/v4 v4.3.0 @@ -16,14 +18,14 @@ require ( github.com/strangelove-ventures/interchaintest/v7 v7.0.0-20230721183422-fb937bb0e165 github.com/stretchr/testify v1.8.4 go.uber.org/zap v1.24.0 - google.golang.org/grpc v1.56.2 + google.golang.org/grpc v1.59.0 ) require ( - cloud.google.com/go v0.110.4 // indirect - cloud.google.com/go/compute v1.20.1 // indirect + cloud.google.com/go v0.110.8 // indirect + cloud.google.com/go/compute v1.23.0 // indirect cloud.google.com/go/compute/metadata v0.2.3 // indirect - cloud.google.com/go/iam v1.1.0 // indirect + cloud.google.com/go/iam v1.1.2 // indirect cloud.google.com/go/storage v1.30.1 // indirect cosmossdk.io/api v0.3.1 // indirect cosmossdk.io/core v0.6.1 // indirect @@ -60,8 +62,8 @@ require ( github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect github.com/cockroachdb/redact v1.1.5 // indirect github.com/coinbase/rosetta-sdk-go/types v1.0.0 // indirect - github.com/cometbft/cometbft v0.37.2 // indirect - github.com/cometbft/cometbft-db v0.8.0 // indirect + github.com/cometbft/cometbft v0.37.4 // indirect + github.com/cometbft/cometbft-db v0.9.1 // indirect github.com/confio/ics23/go v0.9.0 // indirect github.com/cosmos/btcutil v1.0.5 // indirect github.com/cosmos/cosmos-proto v1.0.0-beta.3 // indirect @@ -72,7 +74,7 @@ require ( github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.1.3-0.20240228213828-cce7f56d000b // indirect github.com/cosmos/ibc-apps/modules/ibc-hooks/v7 v7.0.0-20230802211043-d72e83c94350 // indirect github.com/cosmos/ics23/go v0.10.0 // indirect - github.com/cosmos/ledger-cosmos-go v0.12.2 // indirect + github.com/cosmos/ledger-cosmos-go v0.12.4 // indirect github.com/cosmos/rosetta-sdk-go v0.10.0 // indirect github.com/creachadair/taskgroup v0.4.2 // indirect github.com/danieljoos/wincred v1.1.2 // indirect @@ -103,19 +105,19 @@ require ( github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect github.com/gogo/googleapis v1.4.1 // indirect github.com/gogo/protobuf v1.3.3 // indirect - github.com/golang/glog v1.1.0 // indirect + github.com/golang/glog v1.1.2 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/mock v1.6.0 // indirect github.com/golang/protobuf v1.5.3 // indirect github.com/golang/snappy v0.0.4 // indirect github.com/google/btree v1.1.2 // indirect - github.com/google/go-cmp v0.5.9 // indirect + github.com/google/go-cmp v0.6.0 // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/google/orderedcode v0.0.1 // indirect github.com/google/s2a-go v0.1.4 // indirect - github.com/google/uuid v1.3.0 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect - github.com/googleapis/gax-go/v2 v2.11.0 // indirect + github.com/google/uuid v1.3.1 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.2.4 // indirect + github.com/googleapis/gax-go/v2 v2.12.0 // indirect github.com/gorilla/handlers v1.5.1 // indirect github.com/gorilla/mux v1.8.0 // indirect github.com/gorilla/websocket v1.5.0 // indirect @@ -140,7 +142,7 @@ require ( github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect - github.com/klauspost/compress v1.16.3 // indirect + github.com/klauspost/compress v1.16.7 // indirect github.com/klauspost/cpuid/v2 v2.2.3 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect @@ -153,7 +155,7 @@ require ( github.com/libp2p/go-buffer-pool v0.1.0 // indirect github.com/libp2p/go-libp2p v0.22.0 // indirect github.com/libp2p/go-openssl v0.1.0 // indirect - github.com/linxGnu/grocksdb v1.7.16 // indirect + github.com/linxGnu/grocksdb v1.8.6 // indirect github.com/magiconair/properties v1.8.7 // indirect github.com/manifoldco/promptui v0.9.0 // indirect github.com/mattn/go-colorable v0.1.13 // indirect @@ -200,7 +202,7 @@ require ( github.com/spaolacci/murmur3 v1.1.0 // indirect github.com/spf13/afero v1.9.5 // indirect github.com/spf13/cast v1.5.1 // indirect - github.com/spf13/cobra v1.7.0 // indirect + github.com/spf13/cobra v1.8.0 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/spf13/viper v1.16.0 // indirect @@ -211,28 +213,28 @@ require ( github.com/tyler-smith/go-bip32 v1.0.0 // indirect github.com/tyler-smith/go-bip39 v1.1.0 // indirect github.com/ulikunitz/xz v0.5.11 // indirect - github.com/zondax/hid v0.9.1 // indirect - github.com/zondax/ledger-go v0.14.1 // indirect - go.etcd.io/bbolt v1.3.7 // indirect + github.com/zondax/hid v0.9.2 // indirect + github.com/zondax/ledger-go v0.14.3 // indirect + go.etcd.io/bbolt v1.3.8 // indirect go.opencensus.io v0.24.0 // indirect go.uber.org/atomic v1.10.0 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/crypto v0.12.0 // indirect + golang.org/x/crypto v0.15.0 // indirect golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb // indirect golang.org/x/mod v0.12.0 // indirect - golang.org/x/net v0.14.0 // indirect - golang.org/x/oauth2 v0.8.0 // indirect + golang.org/x/net v0.18.0 // indirect + golang.org/x/oauth2 v0.11.0 // indirect golang.org/x/sync v0.3.0 // indirect - golang.org/x/sys v0.11.0 // indirect - golang.org/x/term v0.11.0 // indirect - golang.org/x/text v0.12.0 // indirect + golang.org/x/sys v0.14.0 // indirect + golang.org/x/term v0.14.0 // indirect + golang.org/x/text v0.14.0 // indirect golang.org/x/tools v0.12.0 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect - google.golang.org/api v0.126.0 // indirect + google.golang.org/api v0.128.0 // indirect google.golang.org/appengine v1.6.7 // indirect - google.golang.org/genproto v0.0.0-20230706204954-ccb25ca9f130 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98 // indirect + google.golang.org/genproto v0.0.0-20231012201019-e917dd12ba7a // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20231002182017-d307bd883b97 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b // indirect google.golang.org/protobuf v1.31.0 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect @@ -250,7 +252,7 @@ require ( modernc.org/strutil v1.1.3 // indirect modernc.org/token v1.0.1 // indirect nhooyr.io/websocket v1.8.6 // indirect - pgregory.net/rapid v0.5.5 // indirect + pgregory.net/rapid v1.1.0 // indirect sigs.k8s.io/yaml v1.3.0 // indirect ) diff --git a/integration_tests/go.sum b/integration_tests/go.sum index 41a24474..2f7c41ce 100644 --- a/integration_tests/go.sum +++ b/integration_tests/go.sum @@ -34,6 +34,7 @@ cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34h cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= cloud.google.com/go v0.110.4 h1:1JYyxKMN9hd5dR2MYTPWkGUgcoxVVhg0LKNKEo0qvmk= cloud.google.com/go v0.110.4/go.mod h1:+EYjdK8e5RME/VY/qLCAtuyALQ9q67dvuum8i+H5xsI= +cloud.google.com/go v0.110.8/go.mod h1:Iz8AkXJf1qmxC3Oxoep8R1T36w8B92yU29PcBhHO5fk= cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= @@ -72,6 +73,7 @@ cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQH cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= cloud.google.com/go/compute v1.20.1 h1:6aKEtlUiwEpJzM001l0yFkpXmUVXaN8W+fbkb2AZNbg= cloud.google.com/go/compute v1.20.1/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= +cloud.google.com/go/compute v1.23.0/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= @@ -113,6 +115,7 @@ cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= cloud.google.com/go/iam v1.1.0 h1:67gSqaPukx7O8WLLHMa0PNs3EBGd2eE4d+psbO/CO94= cloud.google.com/go/iam v1.1.0/go.mod h1:nxdHjaKfCr7fNYx/HJMM8LgiMugmveWlkatear5gVyk= +cloud.google.com/go/iam v1.1.2/go.mod h1:A5avdyVL2tCppe4unb0951eI9jreack+RJ0/d+KUZOU= cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= @@ -199,6 +202,7 @@ cosmossdk.io/log v1.2.1 h1:Xc1GgTCicniwmMiKwDxUjO4eLhPxoVdI9vtMW8Ti/uk= cosmossdk.io/log v1.2.1/go.mod h1:GNSCc/6+DhFIj1aLn/j7Id7PaO8DzNylUZoOYBL9+I4= cosmossdk.io/math v1.1.2 h1:ORZetZCTyWkI5GlZ6CZS28fMHi83ZYf+A2vVnHNzZBM= cosmossdk.io/math v1.1.2/go.mod h1:l2Gnda87F0su8a/7FEKJfFdJrM0JZRXQaohlgJeyQh0= +cosmossdk.io/math v1.2.0/go.mod h1:l2Gnda87F0su8a/7FEKJfFdJrM0JZRXQaohlgJeyQh0= cosmossdk.io/tools/rosetta v0.2.1 h1:ddOMatOH+pbxWbrGJKRAawdBkPYLfKXutK9IETnjYxw= cosmossdk.io/tools/rosetta v0.2.1/go.mod h1:Pqdc1FdvkNV3LcNIkYWt2RQY6IP1ge6YWZk8MhhO9Hw= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= @@ -338,8 +342,10 @@ github.com/coinbase/rosetta-sdk-go/types v1.0.0 h1:jpVIwLcPoOeCR6o1tU+Xv7r5bMONN github.com/coinbase/rosetta-sdk-go/types v1.0.0/go.mod h1:eq7W2TMRH22GTW0N0beDnN931DW0/WOI1R2sdHNHG4c= github.com/cometbft/cometbft v0.37.2 h1:XB0yyHGT0lwmJlFmM4+rsRnczPlHoAKFX6K8Zgc2/Jc= github.com/cometbft/cometbft v0.37.2/go.mod h1:Y2MMMN//O5K4YKd8ze4r9jmk4Y7h0ajqILXbH5JQFVs= +github.com/cometbft/cometbft v0.37.4/go.mod h1:Cmg5Hp4sNpapm7j+x0xRyt2g0juQfmB752ous+pA0G8= github.com/cometbft/cometbft-db v0.8.0 h1:vUMDaH3ApkX8m0KZvOFFy9b5DZHBAjsnEuo9AKVZpjo= github.com/cometbft/cometbft-db v0.8.0/go.mod h1:6ASCP4pfhmrCBpfk01/9E1SI29nD3HfVHrY4PG8x5c0= +github.com/cometbft/cometbft-db v0.9.1/go.mod h1:iliyWaoV0mRwBJoizElCwwRA9Tf7jZJOURcRZF9m60U= github.com/confio/ics23/go v0.9.0 h1:cWs+wdbS2KRPZezoaaj+qBleXgUk5WOQFMP3CQFGTr4= github.com/confio/ics23/go v0.9.0/go.mod h1:4LPZ2NYqnYIVRklaozjNR1FScgDJ2s5Xrp+e/mYVRak= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= @@ -355,6 +361,7 @@ github.com/cosmos/cosmos-proto v1.0.0-beta.3 h1:VitvZ1lPORTVxkmF2fAp3IiA61xVwArQ github.com/cosmos/cosmos-proto v1.0.0-beta.3/go.mod h1:t8IASdLaAq+bbHbjq4p960BvcTqtwuAxid3b/2rOD6I= github.com/cosmos/cosmos-sdk v0.47.5 h1:n1+WjP/VM/gAEOx3TqU2/Ny734rj/MX1kpUnn7zVJP8= github.com/cosmos/cosmos-sdk v0.47.5/go.mod h1:EHwCeN9IXonsjKcjpS12MqeStdZvIdxt3VYXhus3G3c= +github.com/cosmos/cosmos-sdk v0.47.6/go.mod h1:xTc1chW8HyUWCfrgGbjS5jNu9RzlPVrBNfbL9RmZUio= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= @@ -377,11 +384,13 @@ github.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZD github.com/cosmos/ics23/go v0.10.0/go.mod h1:ZfJSmng/TBNTBkFemHHHj5YY7VAU/MBU980F4VU1NG0= github.com/cosmos/ledger-cosmos-go v0.12.2 h1:/XYaBlE2BJxtvpkHiBm97gFGSGmYGKunKyF3nNqAXZA= github.com/cosmos/ledger-cosmos-go v0.12.2/go.mod h1:ZcqYgnfNJ6lAXe4HPtWgarNEY+B74i+2/8MhZw4ziiI= +github.com/cosmos/ledger-cosmos-go v0.12.4/go.mod h1:fjfVWRf++Xkygt9wzCsjEBdjcf7wiiY35fv3ctT+k4M= github.com/cosmos/rosetta-sdk-go v0.10.0 h1:E5RhTruuoA7KTIXUcMicL76cffyeoyvNybzUGSKFTcM= github.com/cosmos/rosetta-sdk-go v0.10.0/go.mod h1:SImAZkb96YbwvoRkzSMQB6noNJXFgWl/ENIznEoYQI4= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/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.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creachadair/taskgroup v0.4.2 h1:jsBLdAJE42asreGss2xZGZ8fJra7WtwnHWeJFxv2Li8= github.com/creachadair/taskgroup v0.4.2/go.mod h1:qiXUOSrbwAY3u0JPGTzObbE3yf9hcXHDKBZ2ZjpCbgM= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= @@ -515,6 +524,7 @@ github.com/golang-jwt/jwt/v4 v4.3.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzw github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v1.1.0 h1:/d3pCKDPWNnvIWe0vVUpNP32qc8U3PDVxySP/y360qE= github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ= +github.com/golang/glog v1.1.2/go.mod h1:zR+okUeTbrL6EL3xHUDxZuEtGv04p5shwip1+mL/rLQ= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= 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= @@ -575,6 +585,7 @@ github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8 github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= 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/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= @@ -611,11 +622,13 @@ github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+ github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= github.com/googleapis/enterprise-certificate-proxy v0.2.3 h1:yk9/cqRKtT9wXZSsRH9aurXEpJX+U6FLtpYTdC3R06k= github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= +github.com/googleapis/enterprise-certificate-proxy v0.2.4/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= 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/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= @@ -627,6 +640,7 @@ github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqE github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= github.com/googleapis/gax-go/v2 v2.11.0 h1:9V9PWXEsWnPpQhu/PeQIkS4eGzMlTLGgt80cUUI8Ki4= github.com/googleapis/gax-go/v2 v2.11.0/go.mod h1:DxmR61SGKkGLa2xigwuZIQpkCI2S5iydzRfb3peWZJI= +github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU= github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= @@ -746,6 +760,7 @@ github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8 github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= github.com/klauspost/compress v1.16.3 h1:XuJt9zzcnaz6a16/OU53ZjWp/v7/42WcR5t2a0PcNQY= github.com/klauspost/compress v1.16.3/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.2.3 h1:sxCkb+qR91z4vsqw4vGGZlDgPz3G7gjaLyK3V8y70BU= @@ -789,6 +804,7 @@ github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-b github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= github.com/linxGnu/grocksdb v1.7.16 h1:Q2co1xrpdkr5Hx3Fp+f+f7fRGhQFQhvi/+226dtLmA8= github.com/linxGnu/grocksdb v1.7.16/go.mod h1:JkS7pl5qWpGpuVb3bPqTz8nC12X3YtPZT+Xq7+QfQo4= +github.com/linxGnu/grocksdb v1.8.6/go.mod h1:xZCIb5Muw+nhbDK4Y5UJuOrin5MceOuiXkVUR7vp4WY= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= @@ -1028,6 +1044,7 @@ github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3 github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= +github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= @@ -1096,11 +1113,14 @@ github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1 github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/zondax/hid v0.9.1 h1:gQe66rtmyZ8VeGFcOpbuH3r7erYtNEAezCAYu8LdkJo= github.com/zondax/hid v0.9.1/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= +github.com/zondax/hid v0.9.2/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= github.com/zondax/ledger-go v0.14.1 h1:Pip65OOl4iJ84WTpA4BKChvOufMhhbxED3BaihoZN4c= github.com/zondax/ledger-go v0.14.1/go.mod h1:fZ3Dqg6qcdXWSOJFKMG8GCTnD7slO/RL2feOQv8K320= +github.com/zondax/ledger-go v0.14.3/go.mod h1:IKKaoxupuB43g4NxeQmbLXv7T9AlQyie1UpHb342ycI= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.7 h1:j+zJOnnEjF/kyHlDDgGnVL/AIqIJPq8UoB2GSNfkUfQ= go.etcd.io/bbolt v1.3.7/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= +go.etcd.io/bbolt v1.3.8/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= @@ -1148,6 +1168,7 @@ golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= golang.org/x/crypto v0.12.0 h1:tFM/ta59kqch6LlvYnPa0yx5a83cL2nHflFhYKvv9Yk= golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= +golang.org/x/crypto v0.15.0/go.mod h1:4ChreQoLWfG3xLDer1WdlH5NdlQ3+mwnQq1YTKY+72g= 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= @@ -1255,6 +1276,7 @@ golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.14.0 h1:BONx9s002vGdD9umnlX1Po8vOZmrgH34qlHcD1MfK14= golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= +golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ= 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= @@ -1282,6 +1304,7 @@ golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= golang.org/x/oauth2 v0.8.0 h1:6dkIjl3j3LtZ/O3sTgZTMsLKSftL/B8Zgq4huOIIUu8= golang.org/x/oauth2 v0.8.0/go.mod h1:yr7u4HXZRm1R1kBWqr/xKNqewf0plRYoB7sla+BCIXE= +golang.org/x/oauth2 v0.11.0/go.mod h1:LdF7O/8bLR/qWK9DrpXmbHLTouvRHK0SgJl0GmDBchk= 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= @@ -1401,6 +1424,7 @@ 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 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/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.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -1408,6 +1432,7 @@ golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.11.0 h1:F9tnn/DA/Im8nCwm+fX+1/eBwi4qFjRT++MhtVC4ZX0= golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= +golang.org/x/term v0.14.0/go.mod h1:TySc+nGkYR6qt8km8wUhuFRTVSMIX3XPR58y2lC8vww= 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= @@ -1423,6 +1448,7 @@ golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc= golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1552,6 +1578,7 @@ google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= google.golang.org/api v0.126.0 h1:q4GJq+cAdMAC7XP7njvQ4tvohGLiSlytuL4BQxbIZ+o= google.golang.org/api v0.126.0/go.mod h1:mBwVAtz+87bEN6CbA1GtZPDOqY2R5ONPqJeIlvyo4Aw= +google.golang.org/api v0.128.0/go.mod h1:Y611qgqaE92On/7g65MQgxYul3c0rEB894kniWLY750= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1672,10 +1699,13 @@ google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= google.golang.org/genproto v0.0.0-20230706204954-ccb25ca9f130 h1:Au6te5hbKUV8pIYWHqOUZ1pva5qK/rwbIhoXEUB9Lu8= google.golang.org/genproto v0.0.0-20230706204954-ccb25ca9f130/go.mod h1:O9kGHb51iE/nOGvQaDUuadVYqovW56s5emA88lQnj6Y= +google.golang.org/genproto v0.0.0-20231012201019-e917dd12ba7a/go.mod h1:EMfReVxb80Dq1hhioy0sOsY9jCE46YDgHlJ7fWVUWRE= google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529 h1:s5YSX+ZH5b5vS9rnpGymvIyMpLRJizowqDlOuyjXnTk= google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= +google.golang.org/genproto/googleapis/api v0.0.0-20231002182017-d307bd883b97/go.mod h1:iargEX0SFPm3xcfMI0d1domjg0ZF4Aa0p2awqyxhvF0= google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98 h1:bVf09lpb+OJbByTj913DRJioFFAjf/ZGxEz7MajTp2U= google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98/go.mod h1:TUfxEVdsvPg18p6AslUXFoLdpED4oBnGwyqk3dV1XzM= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:swOH3j0KzcDDgGUWr+SNpyTen5YrXjS3eyPzFYKc6lc= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= @@ -1719,6 +1749,7 @@ google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCD google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.56.2 h1:fVRFRnXvU+x6C4IlHZewvJOVHoOv1TUuQyoRsYnB4bI= google.golang.org/grpc v1.56.2/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= +google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= 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= @@ -1812,6 +1843,7 @@ nhooyr.io/websocket v1.8.6 h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k= nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= pgregory.net/rapid v0.5.5 h1:jkgx1TjbQPD/feRoK+S/mXw9e1uj6WilpHrXJowi6oA= pgregory.net/rapid v0.5.5/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= +pgregory.net/rapid v1.1.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= From 0f770e6b282fe4f9ad628ab9e8e95c9f06ede3cf Mon Sep 17 00:00:00 2001 From: Ash Date: Sat, 2 Mar 2024 08:52:28 -0700 Subject: [PATCH 246/501] remove toolchain --- go.mod | 2 -- 1 file changed, 2 deletions(-) diff --git a/go.mod b/go.mod index 81897aae..0ee507ce 100644 --- a/go.mod +++ b/go.mod @@ -2,8 +2,6 @@ module github.com/burnt-labs/xion go 1.21 -toolchain go1.21.7 - require ( github.com/CosmWasm/wasmvm v1.4.1 // indirect github.com/cosmos/cosmos-proto v1.0.0-beta.3 From a7458fed402591a3610c9d77f5915348651514f8 Mon Sep 17 00:00:00 2001 From: Ash Date: Sat, 2 Mar 2024 08:57:58 -0700 Subject: [PATCH 247/501] upgrade feeabs keeper --- app/app.go | 1 - go.mod | 4 ++-- go.sum | 2 ++ 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/app/app.go b/app/app.go index 894ff9f1..83a031ed 100644 --- a/app/app.go +++ b/app/app.go @@ -516,7 +516,6 @@ func NewWasmApp( app.FeeAbsKeeper = feeabskeeper.NewKeeper( appCodec, keys[feeabstypes.StoreKey], - keys[feeabstypes.MemStoreKey], app.GetSubspace(feeabstypes.ModuleName), app.StakingKeeper, app.AccountKeeper, diff --git a/go.mod b/go.mod index 0ee507ce..bf842292 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/burnt-labs/xion go 1.21 require ( - github.com/CosmWasm/wasmvm v1.4.1 // indirect + github.com/CosmWasm/wasmvm v1.5.0 // indirect github.com/cosmos/cosmos-proto v1.0.0-beta.3 github.com/cosmos/cosmos-sdk v0.47.6 github.com/cosmos/gogogateway v1.2.0 // indirect @@ -38,7 +38,7 @@ require ( cosmossdk.io/errors v1.0.0 cosmossdk.io/math v1.2.0 cosmossdk.io/tools/rosetta v0.2.1 - github.com/CosmWasm/wasmd v0.43.0 + github.com/CosmWasm/wasmd v0.45.0 github.com/armon/go-metrics v0.4.1 github.com/cometbft/cometbft v0.37.4 github.com/cometbft/cometbft-db v0.9.1 diff --git a/go.sum b/go.sum index fc261c0d..aca0e7f8 100644 --- a/go.sum +++ b/go.sum @@ -214,8 +214,10 @@ github.com/ChainSafe/go-schnorrkel v1.0.0 h1:3aDA67lAykLaG1y3AOjs88dMxC88PgUuHRr github.com/ChainSafe/go-schnorrkel v1.0.0/go.mod h1:dpzHYVxLZcp8pjlV+O+UR8K0Hp/z7vcchBSbMBEhCw4= github.com/CosmWasm/wasmd v0.43.0 h1:4xQAiNf6Ej+TuYe4PXwrtVJ9C+xyFrbsdqHH/kU9Vxk= github.com/CosmWasm/wasmd v0.43.0/go.mod h1:gpri8YvkRErBz+qDme5jOThGZmSlHfyN532bWibXOl4= +github.com/CosmWasm/wasmd v0.45.0/go.mod h1:RnSAiqbNIZu4QhO+0pd7qGZgnYAMBPGmXpzTADag944= github.com/CosmWasm/wasmvm v1.4.1 h1:YgodVlBrXa2HJZzOXjWDH0EIRwQzK3zuA73dDPRRLS4= github.com/CosmWasm/wasmvm v1.4.1/go.mod h1:fXB+m2gyh4v9839zlIXdMZGeLAxqUdYdFQqYsTha2hc= +github.com/CosmWasm/wasmvm v1.5.0/go.mod h1:fXB+m2gyh4v9839zlIXdMZGeLAxqUdYdFQqYsTha2hc= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= From bd4a2c97604483e5351330b127f3bfa621d6f71b Mon Sep 17 00:00:00 2001 From: Ash Date: Sat, 2 Mar 2024 08:58:13 -0700 Subject: [PATCH 248/501] mod tidy --- go.sum | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/go.sum b/go.sum index aca0e7f8..2933fa05 100644 --- a/go.sum +++ b/go.sum @@ -212,11 +212,9 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03 github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/ChainSafe/go-schnorrkel v1.0.0 h1:3aDA67lAykLaG1y3AOjs88dMxC88PgUuHRrLeDnvGIM= github.com/ChainSafe/go-schnorrkel v1.0.0/go.mod h1:dpzHYVxLZcp8pjlV+O+UR8K0Hp/z7vcchBSbMBEhCw4= -github.com/CosmWasm/wasmd v0.43.0 h1:4xQAiNf6Ej+TuYe4PXwrtVJ9C+xyFrbsdqHH/kU9Vxk= -github.com/CosmWasm/wasmd v0.43.0/go.mod h1:gpri8YvkRErBz+qDme5jOThGZmSlHfyN532bWibXOl4= +github.com/CosmWasm/wasmd v0.45.0 h1:9zBqrturKJwC2kVsfHvbrA++EN0PS7UTXCffCGbg6JI= github.com/CosmWasm/wasmd v0.45.0/go.mod h1:RnSAiqbNIZu4QhO+0pd7qGZgnYAMBPGmXpzTADag944= -github.com/CosmWasm/wasmvm v1.4.1 h1:YgodVlBrXa2HJZzOXjWDH0EIRwQzK3zuA73dDPRRLS4= -github.com/CosmWasm/wasmvm v1.4.1/go.mod h1:fXB+m2gyh4v9839zlIXdMZGeLAxqUdYdFQqYsTha2hc= +github.com/CosmWasm/wasmvm v1.5.0 h1:3hKeT9SfwfLhxTGKH3vXaKFzBz1yuvP8SlfwfQXbQfw= github.com/CosmWasm/wasmvm v1.5.0/go.mod h1:fXB+m2gyh4v9839zlIXdMZGeLAxqUdYdFQqYsTha2hc= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= From e5bdeadaeab32deae76d5c01b967803a2fb715db Mon Sep 17 00:00:00 2001 From: Ash Date: Sat, 2 Mar 2024 09:00:29 -0700 Subject: [PATCH 249/501] wasmvm version without memleak --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index bf842292..c0494ccb 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/burnt-labs/xion go 1.21 require ( - github.com/CosmWasm/wasmvm v1.5.0 // indirect + github.com/CosmWasm/wasmvm v1.5.2 // indirect github.com/cosmos/cosmos-proto v1.0.0-beta.3 github.com/cosmos/cosmos-sdk v0.47.6 github.com/cosmos/gogogateway v1.2.0 // indirect diff --git a/go.sum b/go.sum index 2933fa05..b06c63c1 100644 --- a/go.sum +++ b/go.sum @@ -214,8 +214,8 @@ github.com/ChainSafe/go-schnorrkel v1.0.0 h1:3aDA67lAykLaG1y3AOjs88dMxC88PgUuHRr github.com/ChainSafe/go-schnorrkel v1.0.0/go.mod h1:dpzHYVxLZcp8pjlV+O+UR8K0Hp/z7vcchBSbMBEhCw4= github.com/CosmWasm/wasmd v0.45.0 h1:9zBqrturKJwC2kVsfHvbrA++EN0PS7UTXCffCGbg6JI= github.com/CosmWasm/wasmd v0.45.0/go.mod h1:RnSAiqbNIZu4QhO+0pd7qGZgnYAMBPGmXpzTADag944= -github.com/CosmWasm/wasmvm v1.5.0 h1:3hKeT9SfwfLhxTGKH3vXaKFzBz1yuvP8SlfwfQXbQfw= -github.com/CosmWasm/wasmvm v1.5.0/go.mod h1:fXB+m2gyh4v9839zlIXdMZGeLAxqUdYdFQqYsTha2hc= +github.com/CosmWasm/wasmvm v1.5.2 h1:+pKB1Mz9GZVt1vadxB+EDdD1FOz3dMNjIKq/58/lrag= +github.com/CosmWasm/wasmvm v1.5.2/go.mod h1:Q0bSEtlktzh7W2hhEaifrFp1Erx11ckQZmjq8FLCyys= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= From ec512bf4953499e03b6dd79481b370293166e57a Mon Sep 17 00:00:00 2001 From: Ash Date: Sat, 2 Mar 2024 09:01:46 -0700 Subject: [PATCH 250/501] use go 21 --- .github/workflows/integration-tests.yml | 4 ++-- .github/workflows/tests.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index 878b0e46..9e8490db 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -76,10 +76,10 @@ jobs: - "XionAbstractAccount" steps: - - name: Set up Go 1.18 + - name: Set up Go 1.21 uses: actions/setup-go@v4 with: - go-version: ^1.18 + go-version: ^1.21 - name: checkout uses: actions/checkout@v4 - name: container-login diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 10aa2ae0..09b36484 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -19,7 +19,7 @@ jobs: - name: Set up Golang uses: actions/setup-go@v4 with: - go-version: ~1.19 + go-version: ~1.21 - name: Setup Golang caches uses: actions/cache@v3 with: From cb1faea813c4f44cbd36e1d25fd3403c64a830d1 Mon Sep 17 00:00:00 2001 From: Ash Date: Sat, 2 Mar 2024 09:07:51 -0700 Subject: [PATCH 251/501] integration test deps --- integration_tests/go.mod | 8 +- integration_tests/go.sum | 159 +++++++++++++++++++++------------------ 2 files changed, 90 insertions(+), 77 deletions(-) diff --git a/integration_tests/go.mod b/integration_tests/go.mod index de0a9a92..e7eae10b 100644 --- a/integration_tests/go.mod +++ b/integration_tests/go.mod @@ -2,11 +2,9 @@ module integration_tests go 1.21 -toolchain go1.21.7 - require ( cosmossdk.io/math v1.2.0 - github.com/CosmWasm/wasmd v0.43.0 + github.com/CosmWasm/wasmd v0.45.0 github.com/burnt-labs/xion v0.1.0 github.com/cosmos/cosmos-sdk v0.47.6 github.com/cosmos/ibc-go/v7 v7.3.1 @@ -40,7 +38,7 @@ require ( github.com/ChainSafe/go-schnorrkel v1.0.0 // indirect github.com/ChainSafe/go-schnorrkel/1 v0.0.0-00010101000000-000000000000 // indirect github.com/ComposableFi/go-subkey/v2 v2.0.0-tm03420 // indirect - github.com/CosmWasm/wasmvm v1.4.1 // indirect + github.com/CosmWasm/wasmvm v1.5.2 // indirect github.com/FactomProject/basen v0.0.0-20150613233007-fe3947df716e // indirect github.com/FactomProject/btcutilecc v0.0.0-20130527213604-d3a63a5752ec // indirect github.com/Microsoft/go-winio v0.6.0 // indirect @@ -180,7 +178,7 @@ require ( github.com/multiformats/go-varint v0.0.6 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect github.com/opencontainers/image-spec v1.1.0-rc2 // indirect - github.com/osmosis-labs/fee-abstraction/v4 v4.0.0-20230812032455-33dfc391894d // indirect + github.com/osmosis-labs/fee-abstraction/v7 v7.0.0-20240302094915-ba36778366d0 // indirect github.com/pelletier/go-toml v1.9.5 // indirect github.com/pelletier/go-toml/v2 v2.0.9 // indirect github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08 // indirect diff --git a/integration_tests/go.sum b/integration_tests/go.sum index 2f7c41ce..6f920d35 100644 --- a/integration_tests/go.sum +++ b/integration_tests/go.sum @@ -32,8 +32,7 @@ cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w9 cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= -cloud.google.com/go v0.110.4 h1:1JYyxKMN9hd5dR2MYTPWkGUgcoxVVhg0LKNKEo0qvmk= -cloud.google.com/go v0.110.4/go.mod h1:+EYjdK8e5RME/VY/qLCAtuyALQ9q67dvuum8i+H5xsI= +cloud.google.com/go v0.110.8 h1:tyNdfIxjzaWctIiLYOTalaLKZ17SI44SKFW26QbOhME= cloud.google.com/go v0.110.8/go.mod h1:Iz8AkXJf1qmxC3Oxoep8R1T36w8B92yU29PcBhHO5fk= cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= @@ -71,8 +70,7 @@ cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= -cloud.google.com/go/compute v1.20.1 h1:6aKEtlUiwEpJzM001l0yFkpXmUVXaN8W+fbkb2AZNbg= -cloud.google.com/go/compute v1.20.1/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= +cloud.google.com/go/compute v1.23.0 h1:tP41Zoavr8ptEqaW6j+LQOnyBBhO7OkOMAGrgLopTwY= cloud.google.com/go/compute v1.23.0/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= @@ -113,8 +111,7 @@ cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y97 cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= -cloud.google.com/go/iam v1.1.0 h1:67gSqaPukx7O8WLLHMa0PNs3EBGd2eE4d+psbO/CO94= -cloud.google.com/go/iam v1.1.0/go.mod h1:nxdHjaKfCr7fNYx/HJMM8LgiMugmveWlkatear5gVyk= +cloud.google.com/go/iam v1.1.2 h1:gacbrBdWcoVmGLozRuStX45YKvJtzIjJdAolzUs1sm4= cloud.google.com/go/iam v1.1.2/go.mod h1:A5avdyVL2tCppe4unb0951eI9jreack+RJ0/d+KUZOU= cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= @@ -200,8 +197,7 @@ cosmossdk.io/errors v1.0.0 h1:nxF07lmlBbB8NKQhtJ+sJm6ef5uV1XkvPXG2bUntb04= cosmossdk.io/errors v1.0.0/go.mod h1:+hJZLuhdDE0pYN8HkOrVNwrIOYvUGnn6+4fjnJs/oV0= cosmossdk.io/log v1.2.1 h1:Xc1GgTCicniwmMiKwDxUjO4eLhPxoVdI9vtMW8Ti/uk= cosmossdk.io/log v1.2.1/go.mod h1:GNSCc/6+DhFIj1aLn/j7Id7PaO8DzNylUZoOYBL9+I4= -cosmossdk.io/math v1.1.2 h1:ORZetZCTyWkI5GlZ6CZS28fMHi83ZYf+A2vVnHNzZBM= -cosmossdk.io/math v1.1.2/go.mod h1:l2Gnda87F0su8a/7FEKJfFdJrM0JZRXQaohlgJeyQh0= +cosmossdk.io/math v1.2.0 h1:8gudhTkkD3NxOP2YyyJIYYmt6dQ55ZfJkDOaxXpy7Ig= cosmossdk.io/math v1.2.0/go.mod h1:l2Gnda87F0su8a/7FEKJfFdJrM0JZRXQaohlgJeyQh0= cosmossdk.io/tools/rosetta v0.2.1 h1:ddOMatOH+pbxWbrGJKRAawdBkPYLfKXutK9IETnjYxw= cosmossdk.io/tools/rosetta v0.2.1/go.mod h1:Pqdc1FdvkNV3LcNIkYWt2RQY6IP1ge6YWZk8MhhO9Hw= @@ -213,6 +209,7 @@ github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN github.com/99designs/keyring v1.2.2 h1:pZd3neh/EmUzWONb35LxQfvuY7kiSXAq3HQd97+XBn0= github.com/99designs/keyring v1.2.2/go.mod h1:wes/FrByc8j7lFOAGLGSNEg8f/PaI3cgTBqhFkHUrPk= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= +github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8= github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= @@ -223,10 +220,10 @@ github.com/ChainSafe/go-schnorrkel v1.0.0 h1:3aDA67lAykLaG1y3AOjs88dMxC88PgUuHRr github.com/ChainSafe/go-schnorrkel v1.0.0/go.mod h1:dpzHYVxLZcp8pjlV+O+UR8K0Hp/z7vcchBSbMBEhCw4= github.com/ComposableFi/go-subkey/v2 v2.0.0-tm03420 h1:oknQF/iIhf5lVjbwjsVDzDByupRhga8nhA3NAmwyHDA= github.com/ComposableFi/go-subkey/v2 v2.0.0-tm03420/go.mod h1:KYkiMX5AbOlXXYfxkrYPrRPV6EbVUALTQh5ptUOJzu8= -github.com/CosmWasm/wasmd v0.43.0 h1:4xQAiNf6Ej+TuYe4PXwrtVJ9C+xyFrbsdqHH/kU9Vxk= -github.com/CosmWasm/wasmd v0.43.0/go.mod h1:gpri8YvkRErBz+qDme5jOThGZmSlHfyN532bWibXOl4= -github.com/CosmWasm/wasmvm v1.4.1 h1:YgodVlBrXa2HJZzOXjWDH0EIRwQzK3zuA73dDPRRLS4= -github.com/CosmWasm/wasmvm v1.4.1/go.mod h1:fXB+m2gyh4v9839zlIXdMZGeLAxqUdYdFQqYsTha2hc= +github.com/CosmWasm/wasmd v0.45.0 h1:9zBqrturKJwC2kVsfHvbrA++EN0PS7UTXCffCGbg6JI= +github.com/CosmWasm/wasmd v0.45.0/go.mod h1:RnSAiqbNIZu4QhO+0pd7qGZgnYAMBPGmXpzTADag944= +github.com/CosmWasm/wasmvm v1.5.2 h1:+pKB1Mz9GZVt1vadxB+EDdD1FOz3dMNjIKq/58/lrag= +github.com/CosmWasm/wasmvm v1.5.2/go.mod h1:Q0bSEtlktzh7W2hhEaifrFp1Erx11ckQZmjq8FLCyys= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/FactomProject/basen v0.0.0-20150613233007-fe3947df716e h1:ahyvB3q25YnZWly5Gq1ekg6jcmWaGj/vG/MhF4aisoc= github.com/FactomProject/basen v0.0.0-20150613233007-fe3947df716e/go.mod h1:kGUqhHd//musdITWjFvNTHn90WG9bMLBEPQZ17Cmlpw= @@ -236,16 +233,19 @@ github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= +github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 h1:fLjPD/aNc3UIOA6tDi6QXUemppXK3P9BI7mr2hd6gx8= +github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= github.com/StirlingMarketingGroup/go-namecase v1.0.0 h1:2CzaNtCzc4iNHirR+5ru9OzGg8rQp860gqLBFqRI02Y= github.com/StirlingMarketingGroup/go-namecase v1.0.0/go.mod h1:ZsoSKcafcAzuBx+sndbxHu/RjDcDTrEdT4UvhniHfio= 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/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I= +github.com/adlio/schema v1.3.3/go.mod h1:1EsRssiv9/Ce2CMzq5DoL7RiMshhuigQxrR4DMV9fHg= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= 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= @@ -284,9 +284,13 @@ github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816/go.mod h1:+zsy github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= github.com/btcsuite/btcd/btcutil v1.1.2 h1:XLMbX8JQEiwMcYft2EGi8zPUkoa0abKIU6/BJSRsjzQ= +github.com/btcsuite/btcd/btcutil v1.1.2/go.mod h1:UR7dsSJzJUfMmFiiLlIrMq1lS9jh9EdCV7FStZSnpi0= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= 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/bufbuild/protocompile v0.4.0 h1:LbFKd2XowZvQ/kajzguUp2DC9UEIQhIq77fZZlaQsNA= +github.com/bufbuild/protocompile v0.4.0/go.mod h1:3v93+mbWn/v3xzN+31nwkJfrEpAUwp+BagBSZWx+TP8= github.com/burnt-labs/abstract-account v0.0.0-20240202022305-255071ed91ee h1:04DdmDV4PnDOIyEeasOcu+fGDPzXpappY8Um8c+PSRI= github.com/burnt-labs/abstract-account v0.0.0-20240202022305-255071ed91ee/go.mod h1:R+/UYwxE92VUFOWLyyuBa2RRI2lUwb9uHwRWDBrNzx0= github.com/burnt-labs/interchaintest/v7 v7.0.0-20230725204927-990da9d6e272 h1:R3QMfw3FomFGiuE+bg8snhyZP7ygMbPxwh/7awtJvgM= @@ -340,15 +344,14 @@ github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZ github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/coinbase/rosetta-sdk-go/types v1.0.0 h1:jpVIwLcPoOeCR6o1tU+Xv7r5bMONNbHU7MuEHboiFuA= github.com/coinbase/rosetta-sdk-go/types v1.0.0/go.mod h1:eq7W2TMRH22GTW0N0beDnN931DW0/WOI1R2sdHNHG4c= -github.com/cometbft/cometbft v0.37.2 h1:XB0yyHGT0lwmJlFmM4+rsRnczPlHoAKFX6K8Zgc2/Jc= -github.com/cometbft/cometbft v0.37.2/go.mod h1:Y2MMMN//O5K4YKd8ze4r9jmk4Y7h0ajqILXbH5JQFVs= +github.com/cometbft/cometbft v0.37.4 h1:xyvvEqlyfK8MgNIIKVJaMsuIp03wxOcFmVkT26+Ikpg= github.com/cometbft/cometbft v0.37.4/go.mod h1:Cmg5Hp4sNpapm7j+x0xRyt2g0juQfmB752ous+pA0G8= -github.com/cometbft/cometbft-db v0.8.0 h1:vUMDaH3ApkX8m0KZvOFFy9b5DZHBAjsnEuo9AKVZpjo= -github.com/cometbft/cometbft-db v0.8.0/go.mod h1:6ASCP4pfhmrCBpfk01/9E1SI29nD3HfVHrY4PG8x5c0= +github.com/cometbft/cometbft-db v0.9.1 h1:MIhVX5ja5bXNHF8EYrThkG9F7r9kSfv8BX4LWaxWJ4M= github.com/cometbft/cometbft-db v0.9.1/go.mod h1:iliyWaoV0mRwBJoizElCwwRA9Tf7jZJOURcRZF9m60U= github.com/confio/ics23/go v0.9.0 h1:cWs+wdbS2KRPZezoaaj+qBleXgUk5WOQFMP3CQFGTr4= github.com/confio/ics23/go v0.9.0/go.mod h1:4LPZ2NYqnYIVRklaozjNR1FScgDJ2s5Xrp+e/mYVRak= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= +github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= @@ -359,8 +362,7 @@ 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-proto v1.0.0-beta.3 h1:VitvZ1lPORTVxkmF2fAp3IiA61xVwArQYKXTdEcpW6o= github.com/cosmos/cosmos-proto v1.0.0-beta.3/go.mod h1:t8IASdLaAq+bbHbjq4p960BvcTqtwuAxid3b/2rOD6I= -github.com/cosmos/cosmos-sdk v0.47.5 h1:n1+WjP/VM/gAEOx3TqU2/Ny734rj/MX1kpUnn7zVJP8= -github.com/cosmos/cosmos-sdk v0.47.5/go.mod h1:EHwCeN9IXonsjKcjpS12MqeStdZvIdxt3VYXhus3G3c= +github.com/cosmos/cosmos-sdk v0.47.6 h1:uyo/eg9NMB66aQZIZUv/LeOPTdSnsU23wZkgFYpjikQ= github.com/cosmos/cosmos-sdk v0.47.6/go.mod h1:xTc1chW8HyUWCfrgGbjS5jNu9RzlPVrBNfbL9RmZUio= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= @@ -372,24 +374,20 @@ github.com/cosmos/gogoproto v1.4.10 h1:QH/yT8X+c0F4ZDacDv3z+xE3WU1P1Z3wQoLMBRJoK github.com/cosmos/gogoproto v1.4.10/go.mod h1:3aAZzeRWpAwr+SS/LLkICX2/kDFyaYVzckBDzygIxek= github.com/cosmos/iavl v0.20.1 h1:rM1kqeG3/HBT85vsZdoSNsehciqUQPWrR4BYmqE2+zg= github.com/cosmos/iavl v0.20.1/go.mod h1:WO7FyvaZJoH65+HFOsDir7xU9FWk2w9cHXNW1XHcl7A= -github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.0.0-20230803181732-7c8f814d3b79 h1:n+PjYB3JnbKN+sGmX6khST4xMP+D0UdrMNj7O91fuOg= -github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.0.0-20230803181732-7c8f814d3b79/go.mod h1:fctjEnz9xaBFOlmYYPdKL8Hs1Y3GUKilSwsJdqBb5QU= +github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.1.3-0.20240228213828-cce7f56d000b h1:VwhHRRIPdMshBMb2TP7xrkY4Ee8CJWsHZvucYeJ56no= github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.1.3-0.20240228213828-cce7f56d000b/go.mod h1:UvDmcGIWJPIytq+Q78/ff5NTOsuX/7IrNgEugTW5i0s= github.com/cosmos/ibc-apps/modules/ibc-hooks/v7 v7.0.0-20230802211043-d72e83c94350 h1:NyXIgMKsCTnmD8fcuuuX+45Py9xh/mfpPJ8yr3MI3zg= github.com/cosmos/ibc-apps/modules/ibc-hooks/v7 v7.0.0-20230802211043-d72e83c94350/go.mod h1:JwHFbo1oX/ht4fPpnPvmhZr+dCkYK1Vihw+vZE9umR4= -github.com/cosmos/ibc-go/v7 v7.3.0 h1:QtGeVMi/3JeLWuvEuC60sBHpAF40Oenx/y+bP8+wRRw= -github.com/cosmos/ibc-go/v7 v7.3.0/go.mod h1:mUmaHFXpXrEdcxfdXyau+utZf14pGKVUiXwYftRZZfQ= +github.com/cosmos/ibc-go/v7 v7.3.1 h1:bil1IjnHdyWDASFYKfwdRiNtFP6WK3osW7QFEAgU4I8= github.com/cosmos/ibc-go/v7 v7.3.1/go.mod h1:wvx4pPBofe5ZdMNV3OFRxSI4auEP5Qfqf8JXLLNV04g= github.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZDM= github.com/cosmos/ics23/go v0.10.0/go.mod h1:ZfJSmng/TBNTBkFemHHHj5YY7VAU/MBU980F4VU1NG0= -github.com/cosmos/ledger-cosmos-go v0.12.2 h1:/XYaBlE2BJxtvpkHiBm97gFGSGmYGKunKyF3nNqAXZA= -github.com/cosmos/ledger-cosmos-go v0.12.2/go.mod h1:ZcqYgnfNJ6lAXe4HPtWgarNEY+B74i+2/8MhZw4ziiI= +github.com/cosmos/ledger-cosmos-go v0.12.4 h1:drvWt+GJP7Aiw550yeb3ON/zsrgW0jgh5saFCr7pDnw= github.com/cosmos/ledger-cosmos-go v0.12.4/go.mod h1:fjfVWRf++Xkygt9wzCsjEBdjcf7wiiY35fv3ctT+k4M= github.com/cosmos/rosetta-sdk-go v0.10.0 h1:E5RhTruuoA7KTIXUcMicL76cffyeoyvNybzUGSKFTcM= github.com/cosmos/rosetta-sdk-go v0.10.0/go.mod h1:SImAZkb96YbwvoRkzSMQB6noNJXFgWl/ENIznEoYQI4= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/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.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creachadair/taskgroup v0.4.2 h1:jsBLdAJE42asreGss2xZGZ8fJra7WtwnHWeJFxv2Li8= github.com/creachadair/taskgroup v0.4.2/go.mod h1:qiXUOSrbwAY3u0JPGTzObbE3yf9hcXHDKBZ2ZjpCbgM= @@ -460,9 +458,11 @@ github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSw github.com/felixge/httpsnoop v1.0.2 h1:+nS9g82KMXccJ/wp0zyRW9ZBHFETmMGtkk+2CTTrW4o= github.com/felixge/httpsnoop v1.0.2/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= +github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= +github.com/frankban/quicktest v1.14.4/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= @@ -475,7 +475,9 @@ 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.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= github.com/gin-gonic/gin v1.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8= +github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk= github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= +github.com/go-errors/errors v1.4.2/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= @@ -492,13 +494,17 @@ github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG 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-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= +github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU= +github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho= +github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= github.com/go-playground/validator/v10 v10.11.1 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJWXmqUsHwfTRRkQ= +github.com/go-playground/validator/v10 v10.11.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw= @@ -522,8 +528,7 @@ github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6x github.com/golang-jwt/jwt/v4 v4.3.0 h1:kHL1vqdqWNfATmA0FNMdmZNMyZI1U6O31X4rlIPoBog= github.com/golang-jwt/jwt/v4 v4.3.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/glog v1.1.0 h1:/d3pCKDPWNnvIWe0vVUpNP32qc8U3PDVxySP/y360qE= -github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ= +github.com/golang/glog v1.1.2 h1:DVjP2PbBOzHyzA+dn3WhHIq4NdVu3Q+pvivFICf/7fo= github.com/golang/glog v1.1.2/go.mod h1:zR+okUeTbrL6EL3xHUDxZuEtGv04p5shwip1+mL/rLQ= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -583,8 +588,8 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ 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.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= 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= @@ -596,6 +601,7 @@ github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIG github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= github.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw= +github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= 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= @@ -615,19 +621,19 @@ github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26 h1:Xim43kblpZXfIBQsbuBVKCudVG457BR2GZFIz3uw3hQ= +github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26/go.mod h1:dDKJzRmX4S37WGHujM7tX//fmj1uioxKzKxz3lo4HJo= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/s2a-go v0.1.4 h1:1kZ/sQM3srePvKs3tXAvQzo66XfcReoqFpIpIccE7Oc= github.com/google/s2a-go v0.1.4/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4= github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= -github.com/googleapis/enterprise-certificate-proxy v0.2.3 h1:yk9/cqRKtT9wXZSsRH9aurXEpJX+U6FLtpYTdC3R06k= -github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= +github.com/googleapis/enterprise-certificate-proxy v0.2.4 h1:uGy6JWR/uMIILU8wbf+OkstIrNiMjGpEIyhx8f6W7s4= github.com/googleapis/enterprise-certificate-proxy v0.2.4/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= 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= @@ -638,8 +644,7 @@ github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99 github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= -github.com/googleapis/gax-go/v2 v2.11.0 h1:9V9PWXEsWnPpQhu/PeQIkS4eGzMlTLGgt80cUUI8Ki4= -github.com/googleapis/gax-go/v2 v2.11.0/go.mod h1:DxmR61SGKkGLa2xigwuZIQpkCI2S5iydzRfb3peWZJI= +github.com/googleapis/gax-go/v2 v2.12.0 h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas= github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU= github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= @@ -691,8 +696,9 @@ github.com/hashicorp/go-safetemp v1.0.0/go.mod h1:oaerMy3BhqiTbVye6QuFhFtIceqFoD 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 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.2 h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2IGE= +github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= @@ -730,6 +736,7 @@ github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod github.com/ipfs/go-cid v0.2.0 h1:01JTiihFq9en9Vz0lc0VDWvZe/uBonGpzo4THP0vcQ0= github.com/ipfs/go-cid v0.2.0/go.mod h1:P+HXFDF4CVhaVayiEb4wkAy7zBHxBwsJyt0Y5U6MLro= github.com/jhump/protoreflect v1.15.1 h1:HUMERORf3I3ZdX05WaQ6MIpd/NJ434hTp5YiKgfCL6c= +github.com/jhump/protoreflect v1.15.1/go.mod h1:jD/2GMKKE6OqX8qTjhADU1e6DShO+gavG9e0Q693nKo= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= @@ -745,6 +752,7 @@ github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/u 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.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= @@ -758,8 +766,7 @@ github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYs github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= -github.com/klauspost/compress v1.16.3 h1:XuJt9zzcnaz6a16/OU53ZjWp/v7/42WcR5t2a0PcNQY= -github.com/klauspost/compress v1.16.3/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I= github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= @@ -777,8 +784,10 @@ 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/larry0x/simapp v0.0.0-20230527213943-e57d94ffca4c h1:HxMMvjvPKv+Xttad2Blw6c9XKzg/Pk5TIZL8T04lUN0= +github.com/larry0x/simapp v0.0.0-20230527213943-e57d94ffca4c/go.mod h1:dPMXlnAbUE79idlpKD0z01+vBVvTiKceZZHztq2B34c= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= +github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= github.com/lestrrat-go/backoff/v2 v2.0.8 h1:oNb5E5isby2kiro9AgdHLv5N5tint1AnDVVf2E2un5A= github.com/lestrrat-go/backoff/v2 v2.0.8/go.mod h1:rHP/q/r9aT27n24JQLa7JhSQZCKBBOiM/uP402WwN8Y= github.com/lestrrat-go/blackmagic v1.0.1 h1:lS5Zts+5HIC/8og6cGHb0uCcNCa3OUt1ygh3Qz2Fe80= @@ -802,8 +811,7 @@ github.com/libp2p/go-openssl v0.1.0 h1:LBkKEcUv6vtZIQLVTegAil8jbNpJErQ9AnT+bWV+O github.com/libp2p/go-openssl v0.1.0/go.mod h1:OiOxwPpL3n4xlenjx2h7AwSGaFSC/KZvf6gNdOBQMtc= github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= -github.com/linxGnu/grocksdb v1.7.16 h1:Q2co1xrpdkr5Hx3Fp+f+f7fRGhQFQhvi/+226dtLmA8= -github.com/linxGnu/grocksdb v1.7.16/go.mod h1:JkS7pl5qWpGpuVb3bPqTz8nC12X3YtPZT+Xq7+QfQo4= +github.com/linxGnu/grocksdb v1.8.6 h1:O7I6SIGPrypf3f/gmrrLUBQDKfO8uOoYdWf4gLS06tc= github.com/linxGnu/grocksdb v1.8.6/go.mod h1:xZCIb5Muw+nhbDK4Y5UJuOrin5MceOuiXkVUR7vp4WY= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= @@ -827,6 +835,7 @@ github.com/mattn/go-pointer v0.0.1/go.mod h1:2zXcozF6qYGgmsG+SeTZz3oAbFLdD3OWqnU github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-sqlite3 v1.14.16 h1:yOQRA0RpS5PFz/oikGwBEqvAWhWg5ufRz4ETLjwpU1Y= +github.com/mattn/go-sqlite3 v1.14.16/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= @@ -854,13 +863,16 @@ github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/moby/term v0.0.0-20220808134915-39b0c02b01ae h1:O4SWKdcHVCvYqyDV+9CJA1fcDN2L11Bule0iFy3YlAI= +github.com/moby/term v0.0.0-20220808134915-39b0c02b01ae/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw= 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 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= +github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= github.com/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs= @@ -910,12 +922,14 @@ github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1y 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.20.0 h1:8W0cWlwFkflGPLltQvLRB7ZVD5HuP6ng320w2IS245Q= +github.com/onsi/gomega v1.20.0/go.mod h1:DtrZpjmvpn2mPm4YWQa0/ALMDj9v4YxLgojwPeREyVo= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= 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.0-rc2 h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034= github.com/opencontainers/image-spec v1.1.0-rc2/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ= github.com/opencontainers/runc v1.1.3 h1:vIXrkId+0/J2Ymu2m7VjGvbSlAId9XNRPhn2p4b+d8w= +github.com/opencontainers/runc v1.1.3/go.mod h1:1J5XiS+vdZ3wCyZybsuxXZWGrgSr8fFJHLXuG2PsnNg= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= @@ -925,8 +939,9 @@ github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJ github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA= -github.com/osmosis-labs/fee-abstraction/v4 v4.0.0-20230812032455-33dfc391894d h1:eZXJY4RbQa91pvCMBlTZTQF/IEze77HDnkiD11XGeK8= -github.com/osmosis-labs/fee-abstraction/v4 v4.0.0-20230812032455-33dfc391894d/go.mod h1:CzRKibzIA2HLYlnTtryB3GTtifCwAVVMgfVzQN1Sirs= +github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= +github.com/osmosis-labs/fee-abstraction/v7 v7.0.0-20240302094915-ba36778366d0 h1:Mny3Mn3gc/n7E8zqKL1Nxrsfimpssxq451Gp3GpWcjw= +github.com/osmosis-labs/fee-abstraction/v7 v7.0.0-20240302094915-ba36778366d0/go.mod h1:KnnbvyVmUnL8maFLilQFiZgijef6u/Rv/wyeNMrhtbk= github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= @@ -946,6 +961,7 @@ github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi github.com/pierrec/xxHash v0.1.5 h1:n/jBpwTHiER4xYvK3/CdPVnLDPchj8eTJFFLUb4QHBo= github.com/pierrec/xxHash v0.1.5/go.mod h1:w2waW5Zoa/Wc4Yqe0wgrIYAGKqRMf7czn2HNKXmuL+I= github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= +github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= 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= @@ -1019,12 +1035,14 @@ github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71e github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible h1:Bn1aCHHRnjv4Bl16T8rcaFjYSrGrIZvpiGO6P3Q4GpU= +github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= 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.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= +github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= 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/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= @@ -1042,8 +1060,7 @@ github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA= github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= -github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= +github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= @@ -1086,7 +1103,9 @@ github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoM github.com/tidwall/btree v1.6.0 h1:LDZfKfQIBHGHWSwckhXI0RPSXzlo+KYdjK7FWSqOzzg= github.com/tidwall/btree v1.6.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= github.com/tklauser/go-sysconf v0.3.10 h1:IJ1AZGZRWbY8T5Vfk04D9WOA5WSejdflXxP03OUqALw= +github.com/tklauser/go-sysconf v0.3.10/go.mod h1:C8XykCvCb+Gn0oNCWPIlcb0RuglQTYaQ2hGm7jmxEFk= github.com/tklauser/numcpus v0.4.0 h1:E53Dm1HjH1/R2/aoCtXtPgzmElmn51aOkhCFSuZq//o= +github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hMwiKKqXCQ= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/tyler-smith/go-bip32 v1.0.0 h1:sDR9juArbUgX+bO/iblgZnMPeWY1KZMUC2AFUJdv5KE= @@ -1098,6 +1117,7 @@ github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVM github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= github.com/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0= +github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= @@ -1111,15 +1131,12 @@ github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de 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/zondax/hid v0.9.1 h1:gQe66rtmyZ8VeGFcOpbuH3r7erYtNEAezCAYu8LdkJo= -github.com/zondax/hid v0.9.1/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= +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.1 h1:Pip65OOl4iJ84WTpA4BKChvOufMhhbxED3BaihoZN4c= -github.com/zondax/ledger-go v0.14.1/go.mod h1:fZ3Dqg6qcdXWSOJFKMG8GCTnD7slO/RL2feOQv8K320= +github.com/zondax/ledger-go v0.14.3 h1:wEpJt2CEcBJ428md/5MgSLsXLBos98sBOyxNmCjfUCw= github.com/zondax/ledger-go v0.14.3/go.mod h1:IKKaoxupuB43g4NxeQmbLXv7T9AlQyie1UpHb342ycI= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.7 h1:j+zJOnnEjF/kyHlDDgGnVL/AIqIJPq8UoB2GSNfkUfQ= -go.etcd.io/bbolt v1.3.7/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= +go.etcd.io/bbolt v1.3.8 h1:xs88BrvEv273UsB79e0hcVrlUWmS0a8upikMFhSyAtA= go.etcd.io/bbolt v1.3.8/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= @@ -1140,6 +1157,9 @@ go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/goleak v1.1.12 h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA= +go.uber.org/goleak v1.1.12/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= +go.uber.org/mock v0.2.0 h1:TaP3xedm7JaAgScZO7tlvlKrqT0p7I6OsdGB5YNSMDU= +go.uber.org/mock v0.2.0/go.mod h1:J0y0rp9L3xiff1+ZBfKxlC1fz2+aO16tw0tsDOixfuM= 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.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= @@ -1166,8 +1186,7 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= -golang.org/x/crypto v0.12.0 h1:tFM/ta59kqch6LlvYnPa0yx5a83cL2nHflFhYKvv9Yk= -golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= +golang.org/x/crypto v0.15.0 h1:frVn1TEaCEaZcn3Tmd7Y2b5KKPaZ+I32Q2OA3kYp5TA= golang.org/x/crypto v0.15.0/go.mod h1:4ChreQoLWfG3xLDer1WdlH5NdlQ3+mwnQq1YTKY+72g= 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= @@ -1274,8 +1293,7 @@ golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfS golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/net v0.14.0 h1:BONx9s002vGdD9umnlX1Po8vOZmrgH34qlHcD1MfK14= -golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= +golang.org/x/net v0.18.0 h1:mIYleuAkSbHh0tCv7RvjL3F6ZVbLjq4+R7zbOn3Kokg= golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ= 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= @@ -1302,8 +1320,7 @@ golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= -golang.org/x/oauth2 v0.8.0 h1:6dkIjl3j3LtZ/O3sTgZTMsLKSftL/B8Zgq4huOIIUu8= -golang.org/x/oauth2 v0.8.0/go.mod h1:yr7u4HXZRm1R1kBWqr/xKNqewf0plRYoB7sla+BCIXE= +golang.org/x/oauth2 v0.11.0 h1:vPL4xzxBM4niKCW6g9whtaWVXTJf1U5e4aZxxFx/gbU= golang.org/x/oauth2 v0.11.0/go.mod h1:LdF7O/8bLR/qWK9DrpXmbHLTouvRHK0SgJl0GmDBchk= 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= @@ -1422,16 +1439,14 @@ 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 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM= -golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.14.0 h1:Vz7Qs629MkJkGyHxUlRHizWJRG2j8fbQKjELVSNhy7Q= golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= 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.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= -golang.org/x/term v0.11.0 h1:F9tnn/DA/Im8nCwm+fX+1/eBwi4qFjRT++MhtVC4ZX0= -golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= +golang.org/x/term v0.14.0 h1:LGK9IlZ8T9jvdy6cTdfKUCltatMFOehAQo9SRC46UQ8= golang.org/x/term v0.14.0/go.mod h1:TySc+nGkYR6qt8km8wUhuFRTVSMIX3XPR58y2lC8vww= 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= @@ -1446,14 +1461,14 @@ golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc= -golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-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.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= +golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/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= @@ -1576,8 +1591,7 @@ google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= -google.golang.org/api v0.126.0 h1:q4GJq+cAdMAC7XP7njvQ4tvohGLiSlytuL4BQxbIZ+o= -google.golang.org/api v0.126.0/go.mod h1:mBwVAtz+87bEN6CbA1GtZPDOqY2R5ONPqJeIlvyo4Aw= +google.golang.org/api v0.128.0 h1:RjPESny5CnQRn9V6siglged+DZCgfu9l6mO9dkX9VOg= google.golang.org/api v0.128.0/go.mod h1:Y611qgqaE92On/7g65MQgxYul3c0rEB894kniWLY750= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1697,14 +1711,11 @@ google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqw google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= -google.golang.org/genproto v0.0.0-20230706204954-ccb25ca9f130 h1:Au6te5hbKUV8pIYWHqOUZ1pva5qK/rwbIhoXEUB9Lu8= -google.golang.org/genproto v0.0.0-20230706204954-ccb25ca9f130/go.mod h1:O9kGHb51iE/nOGvQaDUuadVYqovW56s5emA88lQnj6Y= +google.golang.org/genproto v0.0.0-20231012201019-e917dd12ba7a h1:fwgW9j3vHirt4ObdHoYNwuO24BEZjSzbh+zPaNWoiY8= google.golang.org/genproto v0.0.0-20231012201019-e917dd12ba7a/go.mod h1:EMfReVxb80Dq1hhioy0sOsY9jCE46YDgHlJ7fWVUWRE= -google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529 h1:s5YSX+ZH5b5vS9rnpGymvIyMpLRJizowqDlOuyjXnTk= -google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= +google.golang.org/genproto/googleapis/api v0.0.0-20231002182017-d307bd883b97 h1:W18sezcAYs+3tDZX4F80yctqa12jcP1PUS2gQu1zTPU= google.golang.org/genproto/googleapis/api v0.0.0-20231002182017-d307bd883b97/go.mod h1:iargEX0SFPm3xcfMI0d1domjg0ZF4Aa0p2awqyxhvF0= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98 h1:bVf09lpb+OJbByTj913DRJioFFAjf/ZGxEz7MajTp2U= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98/go.mod h1:TUfxEVdsvPg18p6AslUXFoLdpED4oBnGwyqk3dV1XzM= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b h1:ZlWIi1wSK56/8hn4QcBp/j9M7Gt3U/3hZw3mC7vDICo= google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:swOH3j0KzcDDgGUWr+SNpyTen5YrXjS3eyPzFYKc6lc= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= @@ -1747,8 +1758,7 @@ google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACu google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.56.2 h1:fVRFRnXvU+x6C4IlHZewvJOVHoOv1TUuQyoRsYnB4bI= -google.golang.org/grpc v1.56.2/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= +google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk= google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= @@ -1774,6 +1784,7 @@ gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8 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/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/cheggaaa/pb.v1 v1.0.27/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= @@ -1803,6 +1814,7 @@ 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 v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= gotest.tools/v3 v3.5.0 h1:Ljk6PdHdOhAb5aDMWXjDLMMhph+BpztA4v1QdqEW2eY= +gotest.tools/v3 v3.5.0/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= 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= @@ -1822,7 +1834,9 @@ modernc.org/cc/v3 v3.40.0/go.mod h1:/bTg4dnWkSXowUO6ssQKnOV0yMVxDYNIsIrzqTFDGH0= modernc.org/ccgo/v3 v3.16.13 h1:Mkgdzl46i5F/CNR/Kj80Ri59hC8TKAhZrYSaqvkwzUw= modernc.org/ccgo/v3 v3.16.13/go.mod h1:2Quk+5YgpImhPjv2Qsob1DnZ/4som1lJTodubIcoUkY= modernc.org/ccorpus v1.11.6 h1:J16RXiiqiCgua6+ZvQot4yUuUy8zxgqbqEEUuGPlISk= +modernc.org/ccorpus v1.11.6/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ= modernc.org/httpfs v1.0.6 h1:AAgIpFZRXuYnkjftxTAZwMIiwEqAfk8aVB2/oA6nAeM= +modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM= modernc.org/libc v1.22.5 h1:91BNch/e5B0uPbJFgqbxXuOnxBQjlS//icfQEGmvyjE= modernc.org/libc v1.22.5/go.mod h1:jj+Z7dTNX8fBScMVNRAYZ/jF91K8fdT2hYMThc3YjBY= modernc.org/mathutil v1.5.0 h1:rV0Ko/6SfM+8G+yKiyI830l3Wuz1zRutdslNoQ0kfiQ= @@ -1836,13 +1850,14 @@ modernc.org/sqlite v1.24.0/go.mod h1:OrDj17Mggn6MhE+iPbBNf7RGKODDE9NFT0f3EwDzJqk modernc.org/strutil v1.1.3 h1:fNMm+oJklMGYfU9Ylcywl0CO5O6nTfaowNsh2wpPjzY= modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw= modernc.org/tcl v1.15.2 h1:C4ybAYCGJw968e+Me18oW55kD/FexcHbqH2xak1ROSY= +modernc.org/tcl v1.15.2/go.mod h1:3+k/ZaEbKrC8ePv8zJWPtBSW0V7Gg9g8rkmhI1Kfs3c= modernc.org/token v1.0.1 h1:A3qvTqOwexpfZZeyI0FeGPDlSWX5pjZu9hF4lU+EKWg= modernc.org/token v1.0.1/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= modernc.org/z v1.7.3 h1:zDJf6iHjrnB+WRD88stbXokugjyc0/pB91ri1gO6LZY= +modernc.org/z v1.7.3/go.mod h1:Ipv4tsdxZRbQyLq9Q1M6gdbkxYzdlrciF2Hi/lS7nWE= nhooyr.io/websocket v1.8.6 h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k= nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= -pgregory.net/rapid v0.5.5 h1:jkgx1TjbQPD/feRoK+S/mXw9e1uj6WilpHrXJowi6oA= -pgregory.net/rapid v0.5.5/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= +pgregory.net/rapid v1.1.0 h1:CMa0sjHSru3puNx+J0MIAuiiEV4N0qj8/cMWGBBCsjw= pgregory.net/rapid v1.1.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= From 32881e204a7326443110fb373f9d436a7592ce77 Mon Sep 17 00:00:00 2001 From: Ash Date: Sat, 2 Mar 2024 13:08:33 -0700 Subject: [PATCH 252/501] final upgrade test --- integration_tests/go.mod | 2 ++ integration_tests/go.sum | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/integration_tests/go.mod b/integration_tests/go.mod index e7eae10b..079687aa 100644 --- a/integration_tests/go.mod +++ b/integration_tests/go.mod @@ -258,8 +258,10 @@ replace ( github.com/ChainSafe/go-schnorrkel => github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d github.com/ChainSafe/go-schnorrkel/1 => github.com/ChainSafe/go-schnorrkel v1.0.0 github.com/burnt-labs/xion => ../ + github.com/cometbft/cometbft => github.com/cometbft/cometbft v0.37.2 github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 github.com/larry0x/abstract-account => github.com/burnt-labs/abstract-account v0.0.0-20240202022305-255071ed91ee github.com/strangelove-ventures/interchaintest/v7 => github.com/burnt-labs/interchaintest/v7 v7.0.0-20230725204927-990da9d6e272 github.com/vedhavyas/go-subkey => github.com/strangelove-ventures/go-subkey v1.0.7 + github.com/vektra/mockery/v2 => github.com/vektra/mockery/v2 v2.14.0 ) diff --git a/integration_tests/go.sum b/integration_tests/go.sum index 6f920d35..afa47cdf 100644 --- a/integration_tests/go.sum +++ b/integration_tests/go.sum @@ -344,8 +344,8 @@ github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZ github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/coinbase/rosetta-sdk-go/types v1.0.0 h1:jpVIwLcPoOeCR6o1tU+Xv7r5bMONNbHU7MuEHboiFuA= github.com/coinbase/rosetta-sdk-go/types v1.0.0/go.mod h1:eq7W2TMRH22GTW0N0beDnN931DW0/WOI1R2sdHNHG4c= -github.com/cometbft/cometbft v0.37.4 h1:xyvvEqlyfK8MgNIIKVJaMsuIp03wxOcFmVkT26+Ikpg= -github.com/cometbft/cometbft v0.37.4/go.mod h1:Cmg5Hp4sNpapm7j+x0xRyt2g0juQfmB752ous+pA0G8= +github.com/cometbft/cometbft v0.37.2 h1:XB0yyHGT0lwmJlFmM4+rsRnczPlHoAKFX6K8Zgc2/Jc= +github.com/cometbft/cometbft v0.37.2/go.mod h1:Y2MMMN//O5K4YKd8ze4r9jmk4Y7h0ajqILXbH5JQFVs= github.com/cometbft/cometbft-db v0.9.1 h1:MIhVX5ja5bXNHF8EYrThkG9F7r9kSfv8BX4LWaxWJ4M= github.com/cometbft/cometbft-db v0.9.1/go.mod h1:iliyWaoV0mRwBJoizElCwwRA9Tf7jZJOURcRZF9m60U= github.com/confio/ics23/go v0.9.0 h1:cWs+wdbS2KRPZezoaaj+qBleXgUk5WOQFMP3CQFGTr4= From 37d6edc89129bbe237e642e98d5309f36b71dd84 Mon Sep 17 00:00:00 2001 From: Francis Roch Date: Mon, 4 Mar 2024 11:33:46 -0500 Subject: [PATCH 253/501] Trigger GH workflows on tags --- .github/workflows/aws-ecr.yml | 2 ++ .github/workflows/docker-hub.yml | 2 ++ 2 files changed, 4 insertions(+) diff --git a/.github/workflows/aws-ecr.yml b/.github/workflows/aws-ecr.yml index 241c59ae..2ebc1d50 100644 --- a/.github/workflows/aws-ecr.yml +++ b/.github/workflows/aws-ecr.yml @@ -5,6 +5,8 @@ on: push: branches: - main + tags: + - '*' workflow_dispatch: jobs: diff --git a/.github/workflows/docker-hub.yml b/.github/workflows/docker-hub.yml index 354cff2b..19581b15 100644 --- a/.github/workflows/docker-hub.yml +++ b/.github/workflows/docker-hub.yml @@ -5,6 +5,8 @@ on: push: branches: - main + tags: + - '*' workflow_dispatch: jobs: From 2db66b2190fb6fd4727fabc656bef196155e7ba1 Mon Sep 17 00:00:00 2001 From: Francis Roch Date: Mon, 4 Mar 2024 12:02:21 -0500 Subject: [PATCH 254/501] Fix Docker build --- Dockerfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 8eae0463..e15fa4ed 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ # docker build . -t cosmwasm/xiond:latest # docker run --rm -it cosmwasm/xiond:latest /bin/sh -FROM golang:1.19-alpine3.17 AS go-builder +FROM golang:1.21-alpine3.19 AS go-builder ARG arch=x86_64 ENV WASMVM_VERSION=v1.4.1 @@ -47,7 +47,7 @@ FROM golang:1.19-alpine3.17 AS go-builder && (file /code/build/xiond | grep "statically linked") # -------------------------------------------------------- -FROM alpine:3.17 AS xion-dev +FROM alpine:3.19 AS xion-dev COPY --from=go-builder /code/build/xiond /usr/bin/xiond # rest server @@ -91,7 +91,7 @@ FROM alpine:3.17 AS xion-dev CMD ["/home/xiond/entrypoint.sh"] # -------------------------------------------------------- -FROM alpine:3.17 AS xion-release +FROM alpine:3.19 AS xion-release COPY --from=go-builder /code/build/xiond /usr/bin/xiond From e242979ea86363db15d3618302326556093e1a18 Mon Sep 17 00:00:00 2001 From: Francis Roch Date: Mon, 4 Mar 2024 12:23:46 -0500 Subject: [PATCH 255/501] Fix wasmvm version and checksums --- Dockerfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index e15fa4ed..f0fe502b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,9 +3,9 @@ FROM golang:1.21-alpine3.19 AS go-builder ARG arch=x86_64 - ENV WASMVM_VERSION=v1.4.1 - ENV WASMVM_CHECKSUM_AARCH64=a8259ba852f1b68f2a5f8eb666a9c7f1680196562022f71bb361be1472a83cfd - ENV WASMVM_CHECKSUM_x86_64=324c1073cb988478d644861783ed5a7de21cfd090976ccc6b1de0559098fbbad + ENV WASMVM_VERSION=v1.5.2 + ENV WASMVM_CHECKSUM_AARCH64=e78b224c15964817a3b75a40e59882b4d0e06fd055b39514d61646689cef8c6e + ENV WASMVM_CHECKSUM_x86_64=e660a38efb2930b34ee6f6b0bb12730adccb040b6ab701b8f82f34453a426ae7 # this comes from standard alpine nightly file # https://github.com/rust-lang/docker-rust-nightly/blob/master/alpine3.12/Dockerfile From 4681c1e672cca7bb8fa5fe5e2af587caef241e83 Mon Sep 17 00:00:00 2001 From: ash-burnt <96692350+ash-burnt@users.noreply.github.com> Date: Tue, 5 Mar 2024 12:28:03 -0500 Subject: [PATCH 256/501] query endpoints for webauthn validation (#147) * jwt test * tx created, need to submit * sending works * successful test * integration test in ci * test keys * consolidate contract * query endpoints for webauthn validation * Bump Go version to 1.21 in Docker container * go mod tidy * Bump Go version in Github Actions workflows * updated contract * merge * go mod tidy * chore: register query services for stargate queries * chore: passing register test case * [WIP] fix: failing test * chore: webAuthN integration test * fix: jwt_aa failing test * fix: failing integration tests * fix: failing jwt aa test * correct account contract * only one contract type * incorrect path * chore: fix failing rotating key integration test * chore: fix failing abstract account rotating key test * fix: failing unit test * add description file for account wasm * update contract * go mod tidy * chore: use recent contract * fix: failing integration test * contract main for aa contract * update contract * run both tests * incorrect path * chore: resign integration tests * back to 3 validators * test updating aa cli for new contract * catch error * salt * chain id * remove old test style * Update contract * Update Makefile to avoid path issues when running tests These tests are now run in the same way they are run in the GH actions * Update signature because contract update --------- Co-authored-by: Eduardo Diaz Co-authored-by: Francis Roch Co-authored-by: peartes Co-authored-by: justin <328965+justinbarry@users.noreply.github.com> --- .github/workflows/integration-tests.yml | 1 + .gitignore | 2 + Makefile | 31 +- app/app.go | 4 + go.mod | 12 +- go.sum | 16 +- integration_tests/abstract_account_test.go | 18 +- integration_tests/go.mod | 8 +- integration_tests/go.sum | 16 +- integration_tests/jwt_aa_test.go | 6 +- .../testdata/contracts/README.md | 2 + .../contracts/account_updatable-aarch64.wasm | Bin 380742 -> 456128 bytes integration_tests/webauthn_test.go | 242 ++++ proto/xion/v1/query.proto | 30 + wasmbindings/query_plugin.go | 65 + wasmbindings/query_plugin_test.go | 136 ++ wasmbindings/stargate_whitelist.go | 107 ++ wasmbindings/wasm.go | 17 + x/xion/client/cli/tx.go | 14 +- x/xion/keeper/grpc_query.go | 65 + x/xion/module.go | 1 + x/xion/types/query.pb.go | 1275 +++++++++++++++++ x/xion/types/webauthn.go | 90 ++ x/xion/types/webauthn_test.go | 45 + 24 files changed, 2169 insertions(+), 34 deletions(-) create mode 100644 integration_tests/testdata/contracts/README.md create mode 100644 integration_tests/webauthn_test.go create mode 100644 proto/xion/v1/query.proto create mode 100644 wasmbindings/query_plugin.go create mode 100644 wasmbindings/query_plugin_test.go create mode 100644 wasmbindings/stargate_whitelist.go create mode 100644 wasmbindings/wasm.go create mode 100644 x/xion/keeper/grpc_query.go create mode 100644 x/xion/types/query.pb.go create mode 100644 x/xion/types/webauthn.go create mode 100644 x/xion/types/webauthn_test.go diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index 9e8490db..737557e8 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -74,6 +74,7 @@ jobs: - "JWTAbstractAccount" - "XionSendPlatformFee" - "XionAbstractAccount" + - "WebAuthNAbstractAccount" steps: - name: Set up Go 1.21 diff --git a/.gitignore b/.gitignore index 9a538199..01744fba 100644 --- a/.gitignore +++ b/.gitignore @@ -27,6 +27,7 @@ mytestnet # Testing coverage.txt profile.out +xion-data # Vagrant .vagrant/ @@ -50,3 +51,4 @@ contract_tests/* # Go go.work go.work.sum +/integration_tests/integration_tests.test diff --git a/Makefile b/Makefile index c29f284e..2aa351a3 100644 --- a/Makefile +++ b/Makefile @@ -128,20 +128,35 @@ test-version: test-unit: @version=$(version) go test -mod=readonly -tags='ledger test_ledger_mock' ./... +compile_integration_tests: + @cd integration_tests && go test -c + test-integration: @XION_IMAGE=$(XION_IMAGE) cd integration_tests && go test -mod=readonly -tags='ledger test_ledger_mock' ./... -test-integration-aa: - @XION_IMAGE=$(XION_IMAGE) cd integration_tests && go test -run TestXionAbstractAccount -v -mod=readonly -tags='ledger test_ledger_mock' ./... +test-integration-dungeon-transfer-block: compile_integration_tests + @XION_IMAGE=$(XION_IMAGE) ./integration_tests/integration_tests.test -test.failfast -test.v -test.run TestDungeonTransferBlock + +test-integration-mint-module-no-inflation-no-fees: compile_integration_tests + @XION_IMAGE=$(XION_IMAGE) ./integration_tests/integration_tests.test -test.failfast -test.v -test.run TestMintModuleNoInflationNoFees + +test-integration-mint-module-inflation-high-fees: compile_integration_tests + @XION_IMAGE=$(XION_IMAGE) ./integration_tests/integration_tests.test -test.failfast -test.v -test.run TestMintModuleInflationHighFees + +test-integration-mint-module-inflation-low-fees: compile_integration_tests + @XION_IMAGE=$(XION_IMAGE) ./integration_tests/integration_tests.test -test.failfast -test.v -test.run TestMintModuleInflationLowFees + +test-integration-jwt-abstract-account: compile_integration_tests + @XION_IMAGE=$(XION_IMAGE) ./integration_tests/integration_tests.test -test.failfast -test.v -test.run TestJWTAbstractAccount -test-integration-aa-jwt: - @XION_IMAGE=$(XION_IMAGE) cd integration_tests && go test -run TestJWTAbstractAccount -v -mod=readonly -tags='ledger test_ledger_mock' ./... +test-integration-xion-send-platform-fee: compile_integration_tests + @XION_IMAGE=$(XION_IMAGE) ./integration_tests/integration_tests.test -test.failfast -test.v -test.run XionSendPlatformFee -test-integration-send: - @XION_IMAGE=$(XION_IMAGE) cd integration_tests && go test -run TestXionSendPlatformFee -v -mod=readonly -tags='ledger test_ledger_mock' ./... +test-integration-xion-abstract-account: compile_integration_tests + @XION_IMAGE=$(XION_IMAGE) ./integration_tests/integration_tests.test -test.failfast -test.v -test.run XionAbstractAccount -test-integration-min: - @XION_IMAGE=$(XION_IMAGE) cd integration_tests && go test -run TestXionMinimumFee -mod=readonly -tags='ledger test_ledger_mock' ./... +test-integration-web-auth-n-abstract-account: compile_integration_tests + @XION_IMAGE=$(XION_IMAGE) ./integration_tests/integration_tests.test -test.failfast -test.v -test.run WebAuthNAbstractAccount test-integration-upgrade: @XION_IMAGE=$(XION_IMAGE) cd integration_tests && go test -run TestXionUpgradeIBC -mod=readonly -tags='ledger test_ledger_mock' ./... diff --git a/app/app.go b/app/app.go index 83a031ed..be876c75 100644 --- a/app/app.go +++ b/app/app.go @@ -9,6 +9,7 @@ import ( autocliv1 "cosmossdk.io/api/cosmos/autocli/v1" reflectionv1 "cosmossdk.io/api/cosmos/reflection/v1" + owasm "github.com/burnt-labs/xion/wasmbindings" "github.com/burnt-labs/xion/x/globalfee" dbm "github.com/cometbft/cometbft-db" abci "github.com/cometbft/cometbft/abci/types" @@ -669,6 +670,9 @@ func NewWasmApp( // if we want to allow any custom callbacks // See https://github.com/CosmWasm/cosmwasm/blob/main/docs/CAPABILITIES-BUILT-IN.md availableCapabilities := "iterator,staking,stargate,cosmwasm_1_1,cosmwasm_1_2,cosmwasm_1_3,cosmwasm_1_4" + + wasmOpts = append(owasm.RegisterStargateQueries(*app.GRPCQueryRouter(), appCodec), wasmOpts...) + app.WasmKeeper = wasmkeeper.NewKeeper( appCodec, keys[wasmtypes.StoreKey], diff --git a/go.mod b/go.mod index c0494ccb..dded8a65 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/burnt-labs/xion go 1.21 require ( - github.com/CosmWasm/wasmvm v1.5.2 // indirect + github.com/CosmWasm/wasmvm v1.5.2 github.com/cosmos/cosmos-proto v1.0.0-beta.3 github.com/cosmos/cosmos-sdk v0.47.6 github.com/cosmos/gogogateway v1.2.0 // indirect @@ -12,7 +12,7 @@ require ( github.com/cosmos/ibc-go/v7 v7.3.1 github.com/cosmos/ics23/go v0.10.0 // indirect github.com/docker/distribution v2.8.2+incompatible // indirect - github.com/dvsekhvalnov/jose2go v1.5.0 // indirect + github.com/dvsekhvalnov/jose2go v1.5.0 github.com/golang/protobuf v1.5.3 github.com/google/gofuzz v1.2.0 // indirect github.com/gorilla/mux v1.8.0 @@ -44,6 +44,7 @@ require ( github.com/cometbft/cometbft-db v0.9.1 github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.1.3-0.20240228213828-cce7f56d000b github.com/cosmos/ibc-apps/modules/ibc-hooks/v7 v7.0.0-20230802211043-d72e83c94350 + github.com/go-webauthn/webauthn v0.9.1 github.com/golang/mock v1.6.0 github.com/larry0x/abstract-account v0.0.0-20240202022305-255071ed91ee github.com/osmosis-labs/fee-abstraction/v7 v7.0.0-20240302094915-ba36778366d0 @@ -94,21 +95,25 @@ require ( github.com/dustin/go-humanize v1.0.1 // indirect github.com/felixge/httpsnoop v1.0.2 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect + github.com/fxamacker/cbor/v2 v2.5.0 // indirect github.com/getsentry/sentry-go v0.23.0 // indirect github.com/go-kit/kit v0.12.0 // indirect github.com/go-kit/log v0.2.1 // indirect github.com/go-logfmt/logfmt v0.6.0 // indirect + github.com/go-webauthn/x v0.1.4 // indirect github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect github.com/gogo/googleapis v1.4.1 // indirect github.com/gogo/protobuf v1.3.3 // indirect + github.com/golang-jwt/jwt/v5 v5.1.0 // indirect github.com/golang/glog v1.1.2 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/snappy v0.0.4 // indirect github.com/google/btree v1.1.2 // indirect github.com/google/go-cmp v0.6.0 // indirect + github.com/google/go-tpm v0.9.0 // indirect github.com/google/orderedcode v0.0.1 // indirect github.com/google/s2a-go v0.1.4 // indirect - github.com/google/uuid v1.3.1 // indirect + github.com/google/uuid v1.4.0 // indirect github.com/googleapis/enterprise-certificate-proxy v0.2.4 // indirect github.com/googleapis/gax-go/v2 v2.12.0 // indirect github.com/gorilla/handlers v1.5.1 // indirect @@ -166,6 +171,7 @@ require ( github.com/tendermint/go-amino v0.16.0 // indirect github.com/tidwall/btree v1.6.0 // indirect github.com/ulikunitz/xz v0.5.11 // indirect + github.com/x448/float16 v0.8.4 // indirect github.com/zondax/hid v0.9.2 // indirect github.com/zondax/ledger-go v0.14.3 // indirect go.etcd.io/bbolt v1.3.8 // indirect diff --git a/go.sum b/go.sum index b06c63c1..9717e7ed 100644 --- a/go.sum +++ b/go.sum @@ -429,6 +429,8 @@ github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMo github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= +github.com/fxamacker/cbor/v2 v2.5.0 h1:oHsG0V/Q6E/wqTS2O1Cozzsy69nqCiguo5Q1a1ADivE= +github.com/fxamacker/cbor/v2 v2.5.0/go.mod h1:TA1xS00nchWmaBnEIxPSE5oHLuJBAVvqrtAnWBwBCVo= github.com/getsentry/sentry-go v0.23.0 h1:dn+QRCeJv4pPt9OjVXiMcGIBIefaTJPw/h0bZWO05nE= github.com/getsentry/sentry-go v0.23.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= @@ -463,6 +465,10 @@ github.com/go-playground/validator/v10 v10.11.1 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJ github.com/go-playground/validator/v10 v10.11.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-webauthn/webauthn v0.9.1 h1:KuZjvUX9JTuFjB2n7kZhM6n76BClLUFbFM8SLKnrXpo= +github.com/go-webauthn/webauthn v0.9.1/go.mod h1:m315kRGbUljOytw8b9FGWG9QzErjI5v02pNFCF3lwpI= +github.com/go-webauthn/x v0.1.4 h1:sGmIFhcY70l6k7JIDfnjVBiAAFEssga5lXIUXe0GtAs= +github.com/go-webauthn/x v0.1.4/go.mod h1:75Ug0oK6KYpANh5hDOanfDI+dvPWHk788naJVG/37H8= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee h1:s+21KNqlpePfkah2I+gwHF8xmJWRjooY+5248k6m4A0= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8= @@ -480,6 +486,8 @@ github.com/gogo/googleapis v1.4.1-0.20201022092350-68b0159b7869/go.mod h1:5YRNX2 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/golang-jwt/jwt/v4 v4.4.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= +github.com/golang-jwt/jwt/v5 v5.1.0 h1:UGKbA/IPjtS6zLcdB7i5TyACMgSbOTiR8qzXgw8HWQU= +github.com/golang-jwt/jwt/v5 v5.1.0/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v1.1.2 h1:DVjP2PbBOzHyzA+dn3WhHIq4NdVu3Q+pvivFICf/7fo= github.com/golang/glog v1.1.2/go.mod h1:zR+okUeTbrL6EL3xHUDxZuEtGv04p5shwip1+mL/rLQ= @@ -544,6 +552,8 @@ github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +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= @@ -578,8 +588,8 @@ github.com/google/s2a-go v0.1.4/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkj github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4= -github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4= +github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= @@ -998,6 +1008,8 @@ github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +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/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= diff --git a/integration_tests/abstract_account_test.go b/integration_tests/abstract_account_test.go index 92ca2715..c74492f7 100644 --- a/integration_tests/abstract_account_test.go +++ b/integration_tests/abstract_account_test.go @@ -54,10 +54,11 @@ func TestXionAbstractAccount(t *testing.T) { // Create and Fund User Wallets t.Log("creating and funding user accounts") fundAmount := int64(10_000_000) - users := ibctest.GetAndFundTestUsers(t, ctx, "default", fundAmount, xion) - xionUser := users[0] + xionUser, err := ibctest.GetAndFundTestUserWithMnemonic(ctx, "default", deployerMnemonic, fundAmount, xion) + require.NoError(t, err) currentHeight, _ := xion.Height(ctx) - testutil.WaitForBlocks(ctx, int(currentHeight)+8, xion) + err = testutil.WaitForBlocks(ctx, int(currentHeight)+8, xion) + require.NoError(t, err) t.Logf("created xion user %s", xionUser.FormattedAddress()) xionUserBalInitial, err := xion.GetBalance(ctx, xionUser.FormattedAddress(), xion.Config().Denom) @@ -91,7 +92,8 @@ func TestXionAbstractAccount(t *testing.T) { require.NoError(t, err) // Store Wasm Contract - codeID, err := xion.StoreContract(ctx, xionUser.FormattedAddress(), path.Join(fp, "integration_tests", "testdata", "contracts", "account_updatable-aarch64.wasm")) + codeID, err := xion.StoreContract(ctx, xionUser.FormattedAddress(), path.Join(fp, + "integration_tests", "testdata", "contracts", "account_updatable-aarch64.wasm")) require.NoError(t, err) // retrieve the hash @@ -108,12 +110,12 @@ func TestXionAbstractAccount(t *testing.T) { codeID, xionUser.KeyName(), "--funds", depositedFunds, - "--authenticator", "Secp256K1", "--salt", "0", - "--authenticator-id", "0", + "--authenticator", "Secp256K1", "--chain-id", xion.Config().ChainID, ) require.NoError(t, err) + t.Logf("tx hash: %s", registeredTxHash) txDetails, err := ExecQuery(t, ctx, xion.FullNodes[0], "tx", registeredTxHash) require.NoError(t, err) @@ -124,7 +126,7 @@ func TestXionAbstractAccount(t *testing.T) { require.NoError(t, err) require.Equal(t, uint64(100000), uint64(contractBalance)) - contractState, err := ExecQuery(t, ctx, xion.FullNodes[0], "wasm", "contract-state", "smart", aaContractAddr, fmt.Sprintf(`{"authenticator_by_i_d":{ "id": 0 }}`)) + contractState, err := ExecQuery(t, ctx, xion.FullNodes[0], "wasm", "contract-state", "smart", aaContractAddr, `{"authenticator_by_i_d":{ "id": 0 }}`) require.NoError(t, err) pubkey64, ok := contractState["data"].(string) @@ -199,7 +201,7 @@ func TestXionAbstractAccount(t *testing.T) { ) require.NoError(t, err) - updatedContractstate, err := ExecQuery(t, ctx, xion.FullNodes[0], "wasm", "contract-state", "smart", aaContractAddr, fmt.Sprintf(`{"authenticator_by_i_d":{ "id": 0 }}`)) + updatedContractstate, err := ExecQuery(t, ctx, xion.FullNodes[0], "wasm", "contract-state", "smart", aaContractAddr, `{"authenticator_by_i_d":{ "id": 0 }}`) require.NoError(t, err) updatedPubKey, ok := updatedContractstate["data"].(string) diff --git a/integration_tests/go.mod b/integration_tests/go.mod index 079687aa..0d719adb 100644 --- a/integration_tests/go.mod +++ b/integration_tests/go.mod @@ -94,15 +94,19 @@ require ( github.com/ethereum/go-ethereum v1.10.20 // indirect github.com/felixge/httpsnoop v1.0.2 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect + github.com/fxamacker/cbor/v2 v2.5.0 // indirect github.com/getsentry/sentry-go v0.23.0 // indirect github.com/go-kit/kit v0.12.0 // indirect github.com/go-kit/log v0.2.1 // indirect github.com/go-logfmt/logfmt v0.6.0 // indirect github.com/go-stack/stack v1.8.1 // indirect + github.com/go-webauthn/webauthn v0.9.1 // indirect + github.com/go-webauthn/x v0.1.4 // indirect github.com/goccy/go-json v0.10.2 // indirect github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect github.com/gogo/googleapis v1.4.1 // indirect github.com/gogo/protobuf v1.3.3 // indirect + github.com/golang-jwt/jwt/v5 v5.1.0 // indirect github.com/golang/glog v1.1.2 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/mock v1.6.0 // indirect @@ -110,10 +114,11 @@ require ( github.com/golang/snappy v0.0.4 // indirect github.com/google/btree v1.1.2 // indirect github.com/google/go-cmp v0.6.0 // indirect + github.com/google/go-tpm v0.9.0 // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/google/orderedcode v0.0.1 // indirect github.com/google/s2a-go v0.1.4 // indirect - github.com/google/uuid v1.3.1 // indirect + github.com/google/uuid v1.4.0 // indirect github.com/googleapis/enterprise-certificate-proxy v0.2.4 // indirect github.com/googleapis/gax-go/v2 v2.12.0 // indirect github.com/gorilla/handlers v1.5.1 // indirect @@ -211,6 +216,7 @@ require ( github.com/tyler-smith/go-bip32 v1.0.0 // indirect github.com/tyler-smith/go-bip39 v1.1.0 // indirect github.com/ulikunitz/xz v0.5.11 // indirect + github.com/x448/float16 v0.8.4 // indirect github.com/zondax/hid v0.9.2 // indirect github.com/zondax/ledger-go v0.14.3 // indirect go.etcd.io/bbolt v1.3.8 // indirect diff --git a/integration_tests/go.sum b/integration_tests/go.sum index afa47cdf..99778698 100644 --- a/integration_tests/go.sum +++ b/integration_tests/go.sum @@ -468,6 +468,8 @@ github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4 github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= +github.com/fxamacker/cbor/v2 v2.5.0 h1:oHsG0V/Q6E/wqTS2O1Cozzsy69nqCiguo5Q1a1ADivE= +github.com/fxamacker/cbor/v2 v2.5.0/go.mod h1:TA1xS00nchWmaBnEIxPSE5oHLuJBAVvqrtAnWBwBCVo= github.com/getsentry/sentry-go v0.23.0 h1:dn+QRCeJv4pPt9OjVXiMcGIBIefaTJPw/h0bZWO05nE= github.com/getsentry/sentry-go v0.23.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= @@ -510,6 +512,10 @@ github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/me github.com/go-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw= github.com/go-stack/stack v1.8.1/go.mod h1:dcoOX6HbPZSZptuspn9bctJ+N/CnF5gGygcUP3XYfe4= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= +github.com/go-webauthn/webauthn v0.9.1 h1:KuZjvUX9JTuFjB2n7kZhM6n76BClLUFbFM8SLKnrXpo= +github.com/go-webauthn/webauthn v0.9.1/go.mod h1:m315kRGbUljOytw8b9FGWG9QzErjI5v02pNFCF3lwpI= +github.com/go-webauthn/x v0.1.4 h1:sGmIFhcY70l6k7JIDfnjVBiAAFEssga5lXIUXe0GtAs= +github.com/go-webauthn/x v0.1.4/go.mod h1:75Ug0oK6KYpANh5hDOanfDI+dvPWHk788naJVG/37H8= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee h1:s+21KNqlpePfkah2I+gwHF8xmJWRjooY+5248k6m4A0= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8= @@ -527,6 +533,8 @@ 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/golang-jwt/jwt/v4 v4.3.0 h1:kHL1vqdqWNfATmA0FNMdmZNMyZI1U6O31X4rlIPoBog= github.com/golang-jwt/jwt/v4 v4.3.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= +github.com/golang-jwt/jwt/v5 v5.1.0 h1:UGKbA/IPjtS6zLcdB7i5TyACMgSbOTiR8qzXgw8HWQU= +github.com/golang-jwt/jwt/v5 v5.1.0/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v1.1.2 h1:DVjP2PbBOzHyzA+dn3WhHIq4NdVu3Q+pvivFICf/7fo= github.com/golang/glog v1.1.2/go.mod h1:zR+okUeTbrL6EL3xHUDxZuEtGv04p5shwip1+mL/rLQ= @@ -591,6 +599,8 @@ github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +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= @@ -628,8 +638,8 @@ github.com/google/s2a-go v0.1.4/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkj github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4= -github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4= +github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= @@ -1123,6 +1133,8 @@ github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +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/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= diff --git a/integration_tests/jwt_aa_test.go b/integration_tests/jwt_aa_test.go index 5171a8a5..33e4ac66 100644 --- a/integration_tests/jwt_aa_test.go +++ b/integration_tests/jwt_aa_test.go @@ -84,15 +84,15 @@ func TestJWTAbstractAccount(t *testing.T) { sub := "integration-test-user" aud := "integration-test-project" - authenticatorDetails := map[string]string{} + authenticatorDetails := map[string]interface{}{} authenticatorDetails["sub"] = sub authenticatorDetails["aud"] = aud + authenticatorDetails["id"] = 0 authenticator := map[string]interface{}{} authenticator["Jwt"] = authenticatorDetails instantiateMsg := map[string]interface{}{} - instantiateMsg["id"] = 0 instantiateMsg["authenticator"] = authenticator // predict the contract address so it can be verified @@ -140,7 +140,7 @@ func TestJWTAbstractAccount(t *testing.T) { require.NoError(t, err) t.Logf("signed token: %s", output) - instantiateMsg["signature"] = []byte(output) + authenticatorDetails["token"] = []byte(output) instantiateMsgStr, err := json.Marshal(instantiateMsg) require.NoError(t, err) t.Logf("inst msg: %s", string(instantiateMsgStr)) diff --git a/integration_tests/testdata/contracts/README.md b/integration_tests/testdata/contracts/README.md new file mode 100644 index 00000000..066695d3 --- /dev/null +++ b/integration_tests/testdata/contracts/README.md @@ -0,0 +1,2 @@ +The account contract is an optimized build of: +https://github.com/burnt-labs/contracts account contract \ No newline at end of file diff --git a/integration_tests/testdata/contracts/account_updatable-aarch64.wasm b/integration_tests/testdata/contracts/account_updatable-aarch64.wasm index 13ddb4fa81ff50bad9bf35f9e2958e144f614a54..4f26cee35e6481518b83f37cbd24ab8b05511b29 100644 GIT binary patch literal 456128 zcmeFa3!GtC#j&vo~ny zSDRnAEnR;gKPHgUAp?#Yi_uH?=_S+ za8s5>f!E%6{k44gxBG%XC0*YAx4h<>8_TrefqmEB^er#ly7=O&Z{4?a{dd34RWeg0 zFYUV)OqQ;`>6TY7?t5J@B}fzd_I}GtU;5&gjg^@$5?_7I!E5)AeQNC8_v%}&bFJy! ze9OM2*Ij+>{%fwk5q!TdxhF}YB#OdQ{nrknC~A_MM-;Y_BuMx#<~?rdU)1EkD2#%j zO}nEg==Dg71wQI@!WQX#2q?uLf#MIano*P_lmd}vGYOgr9|T!HgSgdfwSm|RRC5wU z?Jx}Z-3TL|l;>a41PZJhHi8EK=j#dn0Yb&}hetb%RCO4x;zx^Gf)JvF)Lr~*go6h7 zQY$q^Q7dS+qE53Jbvxaz5cU5=lUS!00f z{}ZYx;n4`ffr_+fko~jrwA%g!AteShouX<;Og#`co>tTPL5rUqe#TK_4G%~i^ka%n zu05kqPm$2H`X+-J!;?Ra#*pmsFlmK1h3{nCG(c&pxh_5w=7$d-33`Wu{KvolL-u?~ z&(=r7iRNqez2>z`uZx1@z%6@U8~p3mzT5X*dkbUXJA2pPc;MhQHy*rRBjdoTtFOLp z-@&D8ZruCY*Ia$=Ee8(1_BFw~!q#i9zivt29}FADn8DA5tFOQD;J&5rzUJC}V&VhW zzxKwfw+A1H+SlB0!)vcq-k*uOd-s*Uem0s~+IRCU*Dvima5eQUU8gJ`s3kJ6sp7Ru zBzCX9nsIu~)%$MT8;8BCuin4!nwzeE^)(0f#Zl)IG&T==?}+CAFr2^avddoi2hse8 zqF;+%_isNO{c7})=#l87(XU7UZ}hR~H=^H+ek*#_|M4B){r$-u?}|SW^EyAju>blu zgx6hn-M`y+XZWV@uJD%I-V%OKc<}DK%)TW|aK;eQC{-x$vShzia>5Po0$${!2$ zzxnruullX{_oL564~2&ghx0!Z>VNYe3I9j<%i(QD!ViY?zZ$+Vd~@`AkvO;opT{ z2>*&~e-qAsF?>V#RQQ$fa5Vo9;Xj6Nh~|GVntwcgQ#AkXX#W1_kD@ys3PJRbqxqkY zej%FwrRbNVUyS~H^l0=LX#Pd?>FCbzccS05w#@%|^h9(tn*T)f?&$I8!m^7UYLc8ccj5=lnnoKtfb*Wzj6Fe$?-o~>6HOS$0;>kRX_CAZ(Qhy$H_fh z=w(9G;Txzx@8fHti9^vH=LGqa!D80f6r>Frm37iEjfQ^{@oW3SsLAJ};bIo^InH-1 zrk&xJqKYafdQ0Q;f*pByGj;No=YJnu#A_$*oEP+SK!)cB{WQ$K65hO<^ybbt9!6?J z+v1?VrbjiOkEn3_0&joK+j+qSBPDEENaNXPdzOGk9*shM*+M0|2a{>UbL5dz`irw} z*2*_u4D?q155dKQus_vHqhv=u9EJVWy)5Q8vJ_`Zs)ymok{6yWAY z-CiDyT4`4}XAvMT8uY0(qXq-1eEI#Mz-<+p_lM+KtNOvT-|1BxC3p{n+2jOLB%=3= zVo!lZS#B^vdRifus-0AojH3R~P#Wcb83=q)d`rFbq<%aQjs|(yhxdGA4ZZvykHiSQ)Z^3_l)t?P<^#-6vZYC z=x*2fVkSB$nA_e3$msK{MX&6=dvtkBYdn4x7%^GL9eCrkOgVur@>hW;4>wNmGI$|{P^ zr~gjY`CYQ8^TU&OzSypxM~;;}RzEDPdSJEocn#F>Xjjy2m((qWM~C4dnR9a1pJZV7 z9rL^KJ2sMx!Q4n97i`+DlkdGkw0#^z3r1auf1AhS-;#TC4|`EL-{(2~y`jXO4Q<9( zAuTR~(1Yb#Q>E{qHx+HaY~i6V}K4`PT) z+WHQ7{+9T;N`(7kCPqZQ3OS?kI7%Wa;@!#xKTaDSH53eD5Nr)T!B5Hi(PY1+`qWD{ zHtHkeFy$@>1l@N#j{z{t$#OwcB{<(cTBRPp%BDgwYG?Sjg$VEEYsKqL22x;yX@h#a znXcLvZ{Y!O)@UOSh&IE6W=!*lb2kFBa4v#eN!rZ&uo9hUzk_~{ zF1Ic%I=G4EGe*E>4lGsP+e-N^XoW99)8XKc)<*O03Hf0?N7YaGHNLH1i9d33~VNvghdfcXP#xT5I^~Ee*v^6N| zm^@#vD)DHzEqE2L;4;ssN4WRW-tIwQZRjzEkoxIxX-Nu5G91TP~L&#BY ztWVX}qv67)Ali{OOs#Q3u)(ySHPOI694usQ6=Ya6(#BkL!M1otS?AG1cwCMs;Bf^E z(U^;`WIE;79%e!wdq=Sn_ro(%>K$7Ic9jkHq&XK_BGwWl4z7-><|@PF-F^sdVUx|g0v&1Kn+VnV~W`3Ofd!2 zZAinjcGK#NYKwMf@G+REwkeHaAu4YPql`v~wlucnAm3E!)~Qe0QYCHnNf%T}+m+P&{i&#bD3n6IWie}_Fl&@# z-IOY%PdCvmMjgH$F7;`8rR((Rv9(4q&yPPPL$)J?X%}xV^ZIl*?XIX#cXpyqOP^*T zk3QXXsxHLsdVTsOBlM>n-IsBBM(n|^6J?KDF^y!8}LRHRXJrpm~r`ukio`CYE z{6;m6C#~jWsjQ|?M|}o%!}RG$0t9fQ5zn5fQw`I8+SKTE>Bt0x3Cd*nQlWSyni4ut zv(TXh;i{}X5n;{HFp^A7hE4;z(y6T7GI^teV2UiM8XGpJYoze&DyMpmgJ=|*CyWK; zS!KK_vs6<&UoZO2Mz=f3b#R2(b@TQ(7{gkWc3@2DyvesE4|)va6?9JYE$N(&Z>4XB zMt1bg$TUTC!Cccanr7O{kW2j<`5AJ>a;8!^3!*PmIJ+pE?$ZjiZWa7j(i*GRv9z`p zO4C2Kg&h&r>6%Eg{8ywYHPMtzOBkn9(KjBCll9oBC1UqA79=F|M+zO*l;?5KPrE18 z#+qU&Eua37eklcriQWw^6d(o{3XmUb(k)!mzJS=K%v^MpM3vWnJ{3q{AZ`WzQB6>@ z(d*sJ#)PZf2bCM4y*1ipVp~rtaG+kd7_7+84G#xW^5`tF(fXs7RRI z+^P{=ASYDK)da6d2t%((F#YY4T7qVT4DUCEp_=2B=wR2kI(-B4+8RoTVdjTD1|nkklK^(hbI+ zG`A=nNDJ#*hMs9*QC$lg?+H;`lCo->5i}uTOtBS;hrKq|oQ-BONiJSCQy-7nQCp8q zK;n_2UGdn+45EqM=6Y#Yq|F%rQPvbDR3vrekOwsF^FXy~^Dy1mw5Xs|oSJjdM)jmA zPEDtXs6PVNEvBv|X%E;=-83yq#0wx^P!dmikI^O&@j#n1{S7GMtTunnA_4AL4qp_kd3n&mOxIfg#2E{$T_ui`m7eUXvBS9tbvNJ#C`S5dwUdhUd@-scM+{#r{NP=vgj%t%oZL-$rbh6geNr%7x zj;2$7)UsqUpO8szvTE;SIw?wo{nSdv%0GkB!eirzwI83ueo3gvQwfa#UN8hjC=;GW zrMRL}(a^B8NLlZS%O)C09ECxnM}r=POA+H2WmCpZ;cUvWBvT)ixG7~jF{vQCGR0&{G(Fhm!B*pJ%kC$tF?rUp z_BGkoH=S52HXKe$Tgq_Tsm8L{3`en0OLF8ob)BO|>@k(nXGcRxv;-clF12Og@6AH5 zEf*!>AuB3#p)ZQQkk|y+9B$Od%d^@?!Ikx4N{=f?4dJHOD`1ND~M0@@i4nzx4; zm{kr;-$2L`C6Tlo%*2Ygt##09A3LHQFnZRr;$csE(}6KNK!K^zM7$%NF!D|m8Z}e1 zbtHQdS}>2oG|HO02ZLHiA|ncDQUYZ;OXvgFZJlhwnQ#RLE1Y$YJ{{XVgH9pIgpKuw zY1Bp5qCeCuVeC7i*4RN$q?XiASkmVodczT!@o%ur3}0UXME!=fy8u$_P0aFR-RS6V zHgg#^4f3xEa%*@4de=0Bjb(*hj^@+uVL+6Glra+`6jntz+zr}NsrF;IP^wp_$y~Ho zGJCb@=J{s}Rab~H^H`fCx03t7W+ zN1L|7#x8qcbChc37qM44O7B>7inQS;?HH`oSf^4qrQ$K8x*}6$5oTK7BuzAY*YZG} zWV$qZuT;c7qO~@Yno^yp-g)w)R9_1n)!VB*_0>|G>End_xAr_Y17w0Y1F^s-#jrKDJ6cN*Qpe%3}xR8gRR-r=|3zS5*9vsN=cPKb3h)F z-beXU2NIS*fZNgp?`e}w%W~+bldahnr!*1*(}PmH)~FYpvZi9J_cm!c>s6Kp+DSty zOUtV(ZtwdP)D$p!|mFh(lRhp&hq>$;V)(+ z7WvOmJ(p`?W!u5hLfl$kG?D?_YzxJ-PYa4^pVukBMqSa6hKw6@Wz+FwDdu|0Rdano zmfC`)nCsmq-`F}eu%4+~PCyNr{*I+a+q58~AT#_=X&%O8CYd;NTVjszO!G$9f+8ML zola&NS&2@x)ww%_%n#sLn}j`6+N_I~>VCR88P>6V3}@N0sn}b#YE!Y9HiX$#lJT)7 zMywMy6*F~czJk>3p1}lhZ8Ftvi)MEw)A2Gk*;sx*nPLtR6jo=YUCSm@v5N3;lc@+l z>PbEsUln9r6lOO#&e`ucXYa_&9LB;IVN-AoaMmIDyV#^=IN44~RsERwX1dy{{+^3= zFe5o$F81aM)f`C!bGddRnb$1gpuA4tw5?p=68OTV|gGmAaAyl)% zX{RXH&= z)SO0{&23gO+hNn!Zjen(4L310+{7ejBb%5S<;29>u@h5c*~HXXHZe8o6BAXPd}3k) zOcN6iH!%s~)1H`43}kF#YG`8ev~d%Y(PaBcCZ>j;n37^*I=z;D&ezf-r$TB=!!L-R zk85eamiyapSZnEJ9xbQW(p@dvzv0%>(dmgvr-x+9dm0l{ z-K_asPE2*1iYHH@uNIJUua;o|s~75EXlKr*|Ju z?>;`CcOT{2bb4a?MxU7ESe)V>Q+hPZTS=bTN@T}-FdOZ{i^H6g1|;GWj!Q!pc~_x9 zI`Esn_QolN*>s>C?rAb=ku4W;xy>7#@=zj$%vC3lXVM_wTzDp#Tl}Ers4jsyV1w9I zSGv)=N`ut$>m&iZ$`5mErYYv~mB$z1;gVdolpIp+8`%-&F=M`3s-gkl86P%7CltL; zy}UC9I!l&&Z-7Qp9xEck{)yUPXa``NRaDO>(aUzMsFpzr=zFYE{lgr?QdA+`PQ64*a=arzVuk72iD<2O3 zo_$l!B$9_!pL2}CF+kA=NWPSBFS~4M5a1eXh0KdO@7{pVS^HLYLBT)==uJ2Q2Y9|uXR*9^ z<&O#TUL+8P+-uL>~z-{qIgM39#Yq<-ZLr^*2}uFh1vzouVwd{u0;q zYT%{jyb1T7xYGgQJAKEZ@ATPdhp-ZmUBEj(xQZXtcO{iQ$r^!*;gWGAD+Fz@TJc+o(mFLLmax(Xdq_v?*FE)ay-vMKN4j1Y z*-MhDGt~#-N}Y={cdcV}T<)YDi>D3&W7M(u>-({f&%GBbxS@OLi|e4l8npyFHuXl+wTr5vE z=P=^bXg}vPsy3@FHs{<=aKNuwQ=%PAsclWb@mvt(KY8zwfaj~ktBg{ThEzicSU5AjXo@eqgvFp_Bia4!+UO zB%hFC;>Cvav;6P0F{x-=g+O!18_{fx?NNmpS|%qeUr0$-G>STyF9}St9E{|}Nx=j; zM!8dHx;kO4Bc4(O!b)%B6qIW#Gs1Wc zO(JzR3AqWwjMdO`JV*^}PSk2>tQT&o!6M3(dL+Zq*I>fOCNsm)lt9E4VrUu#0V=OF zAe|UX7J9jkUb?5T3CXnwk!9G0A16WnmIG}9a%Q2og%tV;%s{Da^7p#Y6|J-@@@!)Rcr zpK|Y$jDHs*1ujCB(Yk;)t%mGPI)%i7>9}Gr=N9e~mKQO7$0Vq6p;6ShP&59CxiIPt zf1Mz6c?dQiRkXS1rAR;~JY$hivgQdz0y5zli-f9%=bcD+_esXUGnM4W<^O!jX8ZiH zpEwfaQwRi$s^up8CzN)a$=-@_ta({6&Glum=U}e?;(rLEwJz)d7Kyd2z}FTQ38wqD ziHNm@O@i^wdxt1Vier?vbxd8ec;3`ej36i8nk~uJI$Oo^zy@n&xWKDh1Om=@U;`@l zfep}d7r>$nY@njN7&L1DGZh-`rkO#ijO2L7!O1GWzIX@!--D+34#%cTZr zd4Lq~i(o>$^l2fBU<+(uI=5@4t5EU{8x&?PnJ%0o;8SM0ux9J{#qC97Ir#B);m!|L*1C_SDMuRp78ffbzUEG|NikMd5aZH!yM$ zbk>4ExWF1tltL~o7s!B6?N_uS!J4})yg{=b-oW8XY*h}O)5M2L>x?b_Ph^}C#}xn5 z;M&3>(M>KzRD+7fpwTBVhc`3~92*UC>7*i6eK*#pohX0w)z0@0|W zYEo|$2u4lCilQ+$kD3k-eI8|#S>G8N`tEEfEo&6xjjAWQR1eo(&b%AhaSo8P*!6Y5?KA zY`N=9G#DU8L-flsQkvlIAp%$&S_s{uD9mGJo31PhS7dP_TLd)V!@XhVzsT@oAqQ9K zc|V~C^}Nrof^|ZzrFdebU8S?n3}}alf=;%E)A|4~|3y}-^Md>E#Lrg*&;XH2*wV(VOC5zs091#HP2Rb4rvvLueLA)? zs~EOoy{ZQ-jBSy>AiA0ZDh18ztpqv5(zF?PkL@XAq+`2D!J3Oc8cj=@!P|hZ2T~w> z*m5+)E@%b?8g(w>SS(#d*DYfqh6-|2aW4(}kLdtN7su1d!5T(EM}c;i*Yb=Q#F=`) z|NW{VA`pZET$f!Xc}Ru6ZxP`$VuU> zEgNgG7<8AXpSo~#zehnJMHf38&1L_v(Q zCKQ70Vx7L79dBkmE6F&jVn_f~fkS!h<(w>!J>n(Rq)ocACJO@*mFHxwWj3cq+GTUy zNJU+gAlEEE6lj(zFp0O92vk-<*Hti71;p6WHVi~I+F9%ft7o$0JlIX0Jft3ZbQ4#> zErrE`gl1*+J?TP7gkuIqX(ty@PCdy3>b#T(z;^MVJv(?%-8>KKx&#EIltkLr^qZQ_ zxN3G>zqJ_Ue`DltT-NDh$Nvjt`4bYnm2c=(^#g1X>po*bs#10|BrAgagwE6dbVFmeu?n z<%B6L6R3e`U>3%~Rjz1nF2Pu3ciP;Yc3eOU7b+thBWwPkjVlC%*@VT4SVsBlXhJjw zZ`IC!jHtXpkgYR1IfD2hG{+Sm+03@!ZV>?O%(4tpQW7tyG&&wC0_L6<+|JBnThERB zuZ-ReMI84CG&CYJ1r>dR)o8I~Ei!N;e>*9zu??G~8nt}_7UXnhTOn=f$%gF^Gz*w` zMF+0~$9RuB*!)&x-#oA2_%a?Gxke*ZXe--OKsS|or|n~2U#u-L<^)sQ0`*BldjTF1 z+v~P7zhwe_V%3)kFh%W*HOSe)ZEx^)%C{`w>_0N8!4cS_8u@2vO(Vb4TI{H9$B$nx zN?(hvTM#;Mg!am>nXEiW%?$-ej0mQtpH_Vl^3R3pyWUB`XIJ$t^v%<%FTM6PRDElm z`FvGK8NUh|&&@uV6pB zs;?gh)cPE$zJ4h93jR5(zIX%R6meSh)mq>iP4zWnB!)rsUFX_ls_)!$ruv$P#|o-1 z`s*`QeQlp?1=SaelT&?V#L>lQvig>>Y)|ZxCv(@a|5MOMZ~x`(So?2fW0%**8fX7q z4yLZTDvsqFv$U+Olr(ZQTgVN5{;)vM96g z5lCB{Vjt=|voA|^OH~ajW{a`a!*3G)S9wEiSqzh6qIKG+WoF>g5X_RD`u1ea32xyG zV!Ek-gC)@b_042zbz=leO!BOD0d84y*S=yoqyPpzJZa1(Y|%Tg#p-s46#zSnYl)$X zF9W_ThuUBj7-si#C6KTZ0HtGmUZIld0((b2BZI7)t1&`Th!!l%0ev9|SSxg^Bk+oV zG38)MR^?hL7MNS4UVzrVDgdfsZQsBe({zb3riSJ8#)RVm3jx^!3*Z*Z7U0Wr47EEz z^Lj$JH!=e@@nL26D0t1;t|>1Ceu(XQXuLHv&K2L0Alvm!I>AkBGG%&xWzk%~sBG89 zuz>1-Nd~S~*j>QpJ{`-6gNgb8E?Ex8uLRrZN+jSyxRu&HSfyT`;Kst`h18FOL0PEY zy%@raK4p_ZwjM=Uv{=1m?M5%$;F zzqw98W>r>EUj+!F2+C+`*SUNZV9ZL*ð`sF}}QdkXWp0u6ifd6Kf@Xy$X{h;p+* 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%0D*O&*9YZOe+bOJ-8);#i@LwWpDGDw^i5k_=mDYR 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 k|5WLgE;OBzTmhA<6za>a6#0jbU0wmq^m==Z>V& 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 z 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 Oz;*g=*n+89uKxiR;36Ub diff --git a/integration_tests/webauthn_test.go b/integration_tests/webauthn_test.go new file mode 100644 index 00000000..26f952c4 --- /dev/null +++ b/integration_tests/webauthn_test.go @@ -0,0 +1,242 @@ +package integration_tests + +import ( + "crypto/sha256" + "encoding/base64" + "encoding/hex" + "encoding/json" + "fmt" + "os" + "path" + "testing" + + wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" + wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" + xionapp "github.com/burnt-labs/xion/app" + xiontypes "github.com/burnt-labs/xion/x/xion/types" + cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" + "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/tx/signing" + authsigning "github.com/cosmos/cosmos-sdk/x/auth/signing" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + aatypes "github.com/larry0x/abstract-account/x/abstractaccount/types" + ibctest "github.com/strangelove-ventures/interchaintest/v7" + "github.com/strangelove-ventures/interchaintest/v7/ibc" + "github.com/strangelove-ventures/interchaintest/v7/testutil" + "github.com/stretchr/testify/require" +) + +var deployerMnemonic = "decorate corn happy degree artist trouble color mountain shadow hazard canal zone hunt unfold deny glove famous area arrow cup under sadness salute item" + +func TestWebAuthNAbstractAccount(t *testing.T) { + t.Parallel() + if testing.Short() { + t.Skip("skipping in short mode") + } + + td := BuildXionChain(t, "0.0uxion", ModifyInterChainGenesis(ModifyInterChainGenesisFn{ModifyGenesisShortProposals}, [][]string{{votingPeriod, maxDepositPeriod}})) + xion, ctx := td.xionChain, td.ctx + + config := types.GetConfig() + config.SetBech32PrefixForAccount("xion", "xionpub") + + // Create and Fund User Wallets + t.Log("creating and funding user accounts") + fundAmount := int64(10_000_000) + // users := ibctest.GetAndFundTestUsers(t, ctx, "default", fundAmount, xion) + deployerAddr, err := ibctest.GetAndFundTestUserWithMnemonic(ctx, "default", deployerMnemonic, fundAmount, xion) + require.NoError(t, err) + err = testutil.WaitForBlocks(ctx, 8, xion) + require.NoError(t, err) + t.Logf("created xion user %s", deployerAddr.FormattedAddress()) + + xionUserBalInitial, err := xion.GetBalance(ctx, deployerAddr.FormattedAddress(), xion.Config().Denom) + require.NoError(t, err) + require.Equal(t, fundAmount, xionUserBalInitial) + + // register any needed msg types + xion.Config().EncodingConfig.InterfaceRegistry.RegisterImplementations( + (*types.Msg)(nil), + &xiontypes.MsgSetPlatformPercentage{}, + &xiontypes.MsgSend{}, + &wasmtypes.MsgInstantiateContract{}, + &wasmtypes.MsgStoreCode{}, + &aatypes.MsgUpdateParams{}, + &aatypes.MsgRegisterAccount{}, + ) + xion.Config().EncodingConfig.InterfaceRegistry.RegisterImplementations((*authtypes.AccountI)(nil), &aatypes.AbstractAccount{}) + xion.Config().EncodingConfig.InterfaceRegistry.RegisterImplementations((*cryptotypes.PubKey)(nil), &aatypes.NilPubKey{}) + // t.Log(xion.Config().EncodingConfig.InterfaceRegistry.ListImplementations("/xion.v1.Msg/Send")) + fp, err := os.Getwd() + require.NoError(t, err) + + // deploy the contract + codeIDStr, err := xion.StoreContract(ctx, deployerAddr.FormattedAddress(), + path.Join(fp, "integration_tests", "testdata", "contracts", "account_updatable-aarch64.wasm")) + require.NoError(t, err) + + // retrieve the hash + codeResp, err := ExecQuery(t, ctx, xion.FullNodes[0], + "wasm", "code-info", codeIDStr) + require.NoError(t, err) + t.Logf("code response: %s", codeResp) + + // predict the contract address so it can be verified + salt := "0" + creatorAddr := types.AccAddress(deployerAddr.Address()) + codeHash, err := hex.DecodeString(codeResp["data_hash"].(string)) + require.NoError(t, err) + predictedAddr := wasmkeeper.BuildContractAddressPredictable(codeHash, creatorAddr, []byte(salt), []byte{}) + t.Logf("predicted address: %s", predictedAddr.String()) + + authenticatorDetails := map[string]interface{}{} + authenticatorDetails["url"] = "https://xion-dapp-example-git-feat-faceid-burntfinance.vercel.app" + authenticatorDetails["credential"] = "eyJ0eXBlIjoicHVibGljLWtleSIsImlkIjoidUs5TWN6WjdCVEtlZUlCWmFxVWxmSjVaSkN6NDVXMi12aWhUQ0NSdlJrNCIsInJhd0lkIjoidUs5TWN6WjdCVEtlZUlCWmFxVWxmSjVaSkN6NDVXMi12aWhUQ0NSdlJrNCIsImF1dGhlbnRpY2F0b3JBdHRhY2htZW50IjoicGxhdGZvcm0iLCJyZXNwb25zZSI6eyJjbGllbnREYXRhSlNPTiI6ImV5SjBlWEJsSWpvaWQyVmlZWFYwYUc0dVkzSmxZWFJsSWl3aVkyaGhiR3hsYm1kbElqb2laVWRzZG1KcVJqRmpNblJxVDFoSmVscFlhSEZhTWpWdFpHNW9hbU5FWkdwTmJYaDRXbGhXTUZwcVVuUlpNbEV4VDBSQk5HTnVTalpaTWxwb1QwZDRlRnB1V1hwWlYyUnRZMWN4ZUUwelNqVmFSMXAwSWl3aWIzSnBaMmx1SWpvaWFIUjBjSE02THk5NGFXOXVMV1JoY0hBdFpYaGhiWEJzWlMxbmFYUXRabVZoZEMxbVlXTmxhV1F0WW5WeWJuUm1hVzVoYm1ObExuWmxjbU5sYkM1aGNIQWlMQ0pqY205emMwOXlhV2RwYmlJNlptRnNjMlY5IiwiYXR0ZXN0YXRpb25PYmplY3QiOiJvMk5tYlhSa2JtOXVaV2RoZEhSVGRHMTBvR2hoZFhSb1JHRjBZVmlrc0dNQmlEY0VwcGlNZnhRMTBUUENlMi1GYUtyTGVUa3Zwenhjem5nVE13MUZBQUFBQUszT0FBSTF2TVlLWklzTEpmSHdWUU1BSUxpdlRITTJld1V5bm5pQVdXcWxKWHllV1NRcy1PVnR2cjRvVXdna2IwWk9wUUVDQXlZZ0FTRllJQU9TYWdkU1pJczBfVUQ0aFVVNWtKVENEdWsxM01mSjE3VnlvNlJsc0lWUUlsZ2dOeTB4Z1cybjdJVDV3d3BHYlhIYWlGLVl4TFh3UEdUWjJ2Xy1GTUxKTG1RIiwidHJhbnNwb3J0cyI6WyJpbnRlcm5hbCJdfSwiY2xpZW50RXh0ZW5zaW9uUmVzdWx0cyI6e319" + authenticatorDetails["id"] = 0 + + authenticator := map[string]interface{}{} + authenticator["Passkey"] = authenticatorDetails + + instantiateMsg := map[string]interface{}{} + instantiateMsg["authenticator"] = authenticator + + instantiateMsgStr, err := json.Marshal(instantiateMsg) + require.NoError(t, err) + + registerCmd := []string{ + "abstract-account", "register", + codeIDStr, string(instantiateMsgStr), + "--salt", salt, + "--chain-id", xion.Config().ChainID, + } + t.Logf("sender: %s", deployerAddr.FormattedAddress()) + + txHash, err := ExecTx(t, ctx, xion.FullNodes[0], deployerAddr.KeyName(), registerCmd...) + require.NoError(t, err) + t.Logf("tx hash: %s", txHash) + + contractsResponse, err := ExecQuery(t, ctx, xion.FullNodes[0], "wasm", "contracts", codeIDStr) + require.NoError(t, err) + + contract := contractsResponse["contracts"].([]interface{})[0].(string) + + // get the account from the chain. there might be a better way to do this + accountResponse, err := ExecQuery(t, ctx, xion.FullNodes[0], + "account", contract) + require.NoError(t, err) + t.Logf("account response: %s", accountResponse) + + delete(accountResponse, "@type") + var account aatypes.AbstractAccount + accountJSON, err := json.Marshal(accountResponse) + require.NoError(t, err) + + encodingConfig := xionapp.MakeEncodingConfig() + err = encodingConfig.Marshaler.UnmarshalJSON(accountJSON, &account) + require.NoError(t, err) + + err = xion.SendFunds(ctx, deployerAddr.FormattedAddress(), ibc.WalletAmount{Address: contract, Denom: "uxion", Amount: 10_000}) + require.NoError(t, err) + // create the raw tx + sendMsg := fmt.Sprintf(` + { + "body": { + "messages": [ + { + "@type": "/cosmos.bank.v1beta1.MsgSend", + "from_address": "%s", + "to_address": "%s", + "amount": [ + { + "denom": "%s", + "amount": "1337" + } + ] + } + ], + "memo": "", + "timeout_height": "0", + "extension_options": [], + "non_critical_extension_options": [] + }, + "auth_info": { + "signer_infos": [], + "fee": { + "amount": [], + "gas_limit": "200000", + "payer": "", + "granter": "" + }, + "tip": null + }, + "signatures": [] + } + `, contract, deployerAddr.FormattedAddress(), "uxion") + + tx, err := encodingConfig.TxConfig.TxJSONDecoder()([]byte(sendMsg)) + require.NoError(t, err) + txBuilder, err := encodingConfig.TxConfig.WrapTxBuilder(tx) + require.NoError(t, err) + // create the sign bytes + signerData := authsigning.SignerData{ + Address: account.GetAddress().String(), + ChainID: xion.Config().ChainID, + AccountNumber: account.GetAccountNumber(), + Sequence: account.GetSequence(), + PubKey: account.GetPubKey(), + } + + sigData := signing.SingleSignatureData{ + SignMode: signing.SignMode_SIGN_MODE_DIRECT, + Signature: nil, + } + + sig := signing.SignatureV2{ + PubKey: account.GetPubKey(), + Data: &sigData, + Sequence: account.GetSequence(), + } + + err = txBuilder.SetSignatures(sig) + require.NoError(t, err) + + signBytes, err := encodingConfig.TxConfig.SignModeHandler().GetSignBytes(signing.SignMode_SIGN_MODE_DIRECT, signerData, txBuilder.GetTx()) + require.NoError(t, err) + // our signature is the sha256 of the signbytes + signatureBz := sha256.Sum256(signBytes) + challenge := base64.StdEncoding.EncodeToString(signatureBz[:]) + + t.Log("challenge ", challenge) + + signedChallenge := `{"type":"public-key","id":"uK9MczZ7BTKeeIBZaqUlfJ5ZJCz45W2-vihTCCRvRk4","rawId":"uK9MczZ7BTKeeIBZaqUlfJ5ZJCz45W2-vihTCCRvRk4","authenticatorAttachment":"platform","response":{"clientDataJSON":"eyJ0eXBlIjoid2ViYXV0aG4uZ2V0IiwiY2hhbGxlbmdlIjoiWVV4TFNGaHZjMXA1T1dvMGVVNTBNRkJQTnpSSU1HbHZhV2t5VjIxWlpYSk1lSHBCWmxFclUwbHFZejAiLCJvcmlnaW4iOiJodHRwczovL3hpb24tZGFwcC1leGFtcGxlLWdpdC1mZWF0LWZhY2VpZC1idXJudGZpbmFuY2UudmVyY2VsLmFwcCIsImNyb3NzT3JpZ2luIjpmYWxzZX0","authenticatorData":"sGMBiDcEppiMfxQ10TPCe2-FaKrLeTkvpzxczngTMw0FAAAAAA","signature":"MEUCIE9R22-mnoZ9LgCmsxh2dH_Dl9VvlwEc1QbNCt18TZ-vAiEAxiM32ftfx_FIAHDWkS_x3dKF_YxsUpGWUcpietkcvc4","userHandle":"eGlvbjF1c2tjOXIzZXhqZ25mdnhjcDdjMmxxZXV0ZjRtY2Q1ODA4cnJ6Y2ZhOGxxZnYzYWdmcW1xM3J5ZGZt"},"clientExtensionResults":{}}` + // add the auth index to the signature + signedTokenBz := []byte(signedChallenge) + sigBytes := append([]byte{0}, signedTokenBz...) + + sigData = signing.SingleSignatureData{ + SignMode: signing.SignMode_SIGN_MODE_DIRECT, + Signature: sigBytes, + } + + sig = signing.SignatureV2{ + PubKey: account.GetPubKey(), + Data: &sigData, + Sequence: account.GetSequence(), + } + err = txBuilder.SetSignatures(sig) + require.NoError(t, err) + + jsonTx, err := encodingConfig.TxConfig.TxJSONEncoder()(txBuilder.GetTx()) + require.NoError(t, err) + t.Logf("json tx: %s", jsonTx) + + output, err := ExecBroadcast(t, ctx, xion.FullNodes[0], jsonTx) + require.NoError(t, err) + t.Logf("output: %s", output) + + err = testutil.WaitForBlocks(ctx, 2, xion) + require.NoError(t, err) + newBalance, err := xion.GetBalance(ctx, contract, xion.Config().Denom) + require.NoError(t, err) + require.Equal(t, int64(10_000-1337), newBalance) +} diff --git a/proto/xion/v1/query.proto b/proto/xion/v1/query.proto new file mode 100644 index 00000000..bd396333 --- /dev/null +++ b/proto/xion/v1/query.proto @@ -0,0 +1,30 @@ +syntax = "proto3"; +package xion.v1; + +option go_package = "github.com/burnt-labs/xion/x/xion/types"; + +service Query { + rpc WebAuthNVerifyRegister(QueryWebAuthNVerifyRegisterRequest) returns (QueryWebAuthNVerifyRegisterResponse) {} + rpc WebAuthNVerifyAuthenticate(QueryWebAuthNVerifyAuthenticateRequest) returns (QueryWebAuthNVerifyAuthenticateResponse) {} +} + +message QueryWebAuthNVerifyRegisterRequest { + string addr = 1; + string challenge = 2; + string rp = 3; + bytes data = 4; +} + +message QueryWebAuthNVerifyRegisterResponse { + bytes credential = 1; +} + +message QueryWebAuthNVerifyAuthenticateRequest { + string addr = 1; + string challenge = 2; + string rp = 3; + bytes credential = 4; + bytes data = 5; +} + +message QueryWebAuthNVerifyAuthenticateResponse {} \ No newline at end of file diff --git a/wasmbindings/query_plugin.go b/wasmbindings/query_plugin.go new file mode 100644 index 00000000..85b45434 --- /dev/null +++ b/wasmbindings/query_plugin.go @@ -0,0 +1,65 @@ +package wasmbinding + +import ( + "fmt" + + wasmvmtypes "github.com/CosmWasm/wasmvm/types" + abci "github.com/cometbft/cometbft/abci/types" + "github.com/cosmos/cosmos-sdk/baseapp" + "github.com/cosmos/cosmos-sdk/codec" + sdk "github.com/cosmos/cosmos-sdk/types" +) + +// StargateQuerier dispatches whitelisted stargate queries +func StargateQuerier(queryRouter baseapp.GRPCQueryRouter, cdc codec.Codec) func(ctx sdk.Context, request *wasmvmtypes.StargateQuery) ([]byte, error) { + return func(ctx sdk.Context, request *wasmvmtypes.StargateQuery) ([]byte, error) { + protoResponseType, err := GetWhitelistedQuery(request.Path) + if err != nil { + return nil, err + } + + route := queryRouter.Route(request.Path) + if route == nil { + return nil, wasmvmtypes.UnsupportedRequest{Kind: fmt.Sprintf("No route to query '%s'", request.Path)} + } + + res, err := route(ctx, abci.RequestQuery{ + Data: request.Data, + Path: request.Path, + }) + if err != nil { + return nil, err + } + + if res.Value == nil { + return nil, fmt.Errorf("res returned from abci query route is nil") + } + + bz, err := ConvertProtoToJSONMarshal(protoResponseType, res.Value, cdc) + if err != nil { + return nil, err + } + + return bz, nil + } +} + +// ConvertProtoToJsonMarshal unmarshals the given bytes into a proto message and then marshals it to json. +// This is done so that clients calling stargate queries do not need to define their own proto unmarshalers, +// being able to use response directly by json marshalling, which is supported in cosmwasm. +func ConvertProtoToJSONMarshal(protoResponseType codec.ProtoMarshaler, bz []byte, cdc codec.Codec) ([]byte, error) { + // unmarshal binary into stargate response data structure + err := cdc.Unmarshal(bz, protoResponseType) + if err != nil { + return nil, wasmvmtypes.Unknown{} + } + + bz, err = cdc.MarshalJSON(protoResponseType) + if err != nil { + return nil, wasmvmtypes.Unknown{} + } + + protoResponseType.Reset() + + return bz, nil +} diff --git a/wasmbindings/query_plugin_test.go b/wasmbindings/query_plugin_test.go new file mode 100644 index 00000000..63fd450e --- /dev/null +++ b/wasmbindings/query_plugin_test.go @@ -0,0 +1,136 @@ +package wasmbinding_test + +import ( + "fmt" + "testing" + "time" + + wasmvmtypes "github.com/CosmWasm/wasmvm/types" + xionapp "github.com/burnt-labs/xion/app" + wasmbinding "github.com/burnt-labs/xion/wasmbindings" + xiontypes "github.com/burnt-labs/xion/x/xion/types" + tmproto "github.com/cometbft/cometbft/proto/tendermint/types" + "github.com/cosmos/cosmos-sdk/codec" + sdk "github.com/cosmos/cosmos-sdk/types" + proto "github.com/golang/protobuf/proto" //nolint:staticcheck // we're intentionally using this deprecated package to be compatible with cosmos protos + + "github.com/stretchr/testify/suite" +) + +type StargateTestSuite struct { + suite.Suite + + ctx sdk.Context + app *xionapp.WasmApp +} + +func (suite *StargateTestSuite) SetupTest() { + suite.app = xionapp.Setup(suite.T()) + suite.ctx = suite.app.BaseApp.NewContext(false, tmproto.Header{Height: 1, ChainID: "xion-1", Time: time.Now().UTC()}) +} + +func TestStargateTestSuite(t *testing.T) { + suite.Run(t, new(StargateTestSuite)) +} + +func (suite *StargateTestSuite) TestStargateQuerier() { + testCases := []struct { + name string + testSetup func() + path string + requestData func() []byte + responseProtoStruct codec.ProtoMarshaler + expectedQuerierError bool + expectedUnMarshalError bool + resendRequest bool + checkResponseStruct bool + }{ + { + name: "WebAuthNVerifyRegister", + path: "/xion.v1.Query/WebAuthNVerifyRegister", + requestData: func() []byte { + + bz, err := proto.Marshal(&xiontypes.QueryWebAuthNVerifyRegisterRequest{ + Addr: "xion1ynu5zu77pjyuj9ueepqw0vveq2fpd2xp6jgx0s7m2rlcguxldxvq8akzpz", + Rp: "https://xion-dapp-example-git-feat-faceid-burntfinance.vercel.app", + Challenge: "eGlvbjF5bnU1enU3N3BqeXVqOXVlZXBxdzB2dmVxMmZwZDJ4cDZqZ3gwczdtMnJsY2d1eGxkeHZxOGFrenB6", + Data: []byte(`{"type":"public-key","id":"y0zUQQMndks_wh4naaNRL_PZJOFgwusbO2LYVVhHvZg","rawId":"y0zUQQMndks_wh4naaNRL_PZJOFgwusbO2LYVVhHvZg","authenticatorAttachment":"platform","response":{"clientDataJSON":"eyJ0eXBlIjoid2ViYXV0aG4uY3JlYXRlIiwiY2hhbGxlbmdlIjoiZUdsdmJqRjViblUxZW5VM04zQnFlWFZxT1hWbFpYQnhkekIyZG1WeE1tWndaREo0Y0RacVozZ3djemR0TW5Kc1kyZDFlR3hrZUhaeE9HRnJlbkI2Iiwib3JpZ2luIjoiaHR0cHM6Ly94aW9uLWRhcHAtZXhhbXBsZS1naXQtZmVhdC1mYWNlaWQtYnVybnRmaW5hbmNlLnZlcmNlbC5hcHAiLCJjcm9zc09yaWdpbiI6ZmFsc2V9","attestationObject":"o2NmbXRkbm9uZWdhdHRTdG10oGhhdXRoRGF0YViksGMBiDcEppiMfxQ10TPCe2-FaKrLeTkvpzxczngTMw1BAAAAAK3OAAI1vMYKZIsLJfHwVQMAIMtM1EEDJ3ZLP8IeJ2mjUS_z2SThYMLrGzti2FVYR72YpQECAyYgASFYIP00VX-FAxs2eClWYI-wgmmBwSt5qPduwIC6JqaVeEwwIlggzFwyKvRH0UvJTLzZQa0fKPr0gCdbT2A-nuNa0Jcp1_k","transports":["internal"]},"clientExtensionResults":{}}`), + }) + suite.Require().NoError(err) + return bz + }, + responseProtoStruct: &xiontypes.QueryWebAuthNVerifyRegisterResponse{}, + }, + { + name: "WebAuthNVerifyAuthenticate", + path: "/xion.v1.Query/WebAuthNVerifyAuthenticate", + requestData: func() []byte { + + bz, err := proto.Marshal(&xiontypes.QueryWebAuthNVerifyAuthenticateRequest{ + Addr: "xion1ynu5zu77pjyuj9ueepqw0vveq2fpd2xp6jgx0s7m2rlcguxldxvq8akzpz", + Challenge: "eGlvbjF5bnU1enU3N3BqeXVqOXVlZXBxdzB2dmVxMmZwZDJ4cDZqZ3gwczdtMnJsY2d1eGxkeHZxOGFrenB6", + Rp: "https://xion-dapp-example-git-feat-faceid-burntfinance.vercel.app", + Credential: []byte(`{"ID":"y0zUQQMndks/wh4naaNRL/PZJOFgwusbO2LYVVhHvZg=","PublicKey":"pQECAyYgASFYIP00VX+FAxs2eClWYI+wgmmBwSt5qPduwIC6JqaVeEwwIlggzFwyKvRH0UvJTLzZQa0fKPr0gCdbT2A+nuNa0Jcp1/k=","AttestationType":"none","Transport":["internal"],"Flags":{"UserPresent":true,"UserVerified":false,"BackupEligible":false,"BackupState":false},"Authenticator":{"AAGUID":"rc4AAjW8xgpkiwsl8fBVAw==","SignCount":0,"CloneWarning":false,"Attachment":"platform"}}`), + Data: []byte(`{"type":"public-key","id":"y0zUQQMndks_wh4naaNRL_PZJOFgwusbO2LYVVhHvZg","rawId":"y0zUQQMndks_wh4naaNRL_PZJOFgwusbO2LYVVhHvZg","authenticatorAttachment":"platform","response":{"clientDataJSON":"eyJ0eXBlIjoid2ViYXV0aG4uZ2V0IiwiY2hhbGxlbmdlIjoiZUdsdmJqRjViblUxZW5VM04zQnFlWFZxT1hWbFpYQnhkekIyZG1WeE1tWndaREo0Y0RacVozZ3djemR0TW5Kc1kyZDFlR3hrZUhaeE9HRnJlbkI2Iiwib3JpZ2luIjoiaHR0cHM6Ly94aW9uLWRhcHAtZXhhbXBsZS1naXQtZmVhdC1mYWNlaWQtYnVybnRmaW5hbmNlLnZlcmNlbC5hcHAiLCJjcm9zc09yaWdpbiI6ZmFsc2UsIm90aGVyX2tleXNfY2FuX2JlX2FkZGVkX2hlcmUiOiJkbyBub3QgY29tcGFyZSBjbGllbnREYXRhSlNPTiBhZ2FpbnN0IGEgdGVtcGxhdGUuIFNlZSBodHRwczovL2dvby5nbC95YWJQZXgifQ","authenticatorData":"sGMBiDcEppiMfxQ10TPCe2-FaKrLeTkvpzxczngTMw0BAAAAAA","signature":"MEUCIQC7pTqOWJ5zm40pJOr9W6Bi3xW27fs07mfr6LF_KSOUhgIgBDC3o0P1-7XjMsVFMLtI1a94i1-lkxwYN0W8T_bMxKs","userHandle":"eGlvbjF5bnU1enU3N3BqeXVqOXVlZXBxdzB2dmVxMmZwZDJ4cDZqZ3gwczdtMnJsY2d1eGxkeHZxOGFrenB6"},"clientExtensionResults":{}}`), + }) + suite.Require().NoError(err) + return bz + }, + responseProtoStruct: &xiontypes.QueryWebAuthNVerifyRegisterResponse{}, + }, + + // TODO: errors in wrong query in state machine + } + + for _, tc := range testCases { + suite.Run(fmt.Sprintf("Case %s", tc.name), func() { + suite.SetupTest() + if tc.testSetup != nil { + tc.testSetup() + } + + stargateQuerier := wasmbinding.StargateQuerier(*suite.app.GRPCQueryRouter(), suite.app.AppCodec()) + stargateRequest := &wasmvmtypes.StargateQuery{ + Path: tc.path, + Data: tc.requestData(), + } + stargateResponse, err := stargateQuerier(suite.ctx, stargateRequest) + if tc.expectedQuerierError { + suite.Require().Error(err) + return + } + if tc.checkResponseStruct { + expectedResponse, err := proto.Marshal(tc.responseProtoStruct) + suite.Require().NoError(err) + expJsonResp, err := wasmbinding.ConvertProtoToJSONMarshal(tc.responseProtoStruct, expectedResponse, suite.app.AppCodec()) + suite.Require().NoError(err) + suite.Require().Equal(expJsonResp, stargateResponse) + } + + suite.Require().NoError(err) + + protoResponse, ok := tc.responseProtoStruct.(proto.Message) + suite.Require().True(ok) + + // test correctness by unmarshalling json response into proto struct + err = suite.app.AppCodec().UnmarshalJSON(stargateResponse, protoResponse) + if tc.expectedUnMarshalError { + suite.Require().Error(err) + } else { + suite.Require().NoError(err) + suite.Require().NotNil(protoResponse) + } + + if tc.resendRequest { + stargateQuerier = wasmbinding.StargateQuerier(*suite.app.GRPCQueryRouter(), suite.app.AppCodec()) + stargateRequest = &wasmvmtypes.StargateQuery{ + Path: tc.path, + Data: tc.requestData(), + } + resendResponse, err := stargateQuerier(suite.ctx, stargateRequest) + suite.Require().NoError(err) + suite.Require().Equal(stargateResponse, resendResponse) + } + }) + } +} diff --git a/wasmbindings/stargate_whitelist.go b/wasmbindings/stargate_whitelist.go new file mode 100644 index 00000000..4d455256 --- /dev/null +++ b/wasmbindings/stargate_whitelist.go @@ -0,0 +1,107 @@ +package wasmbinding + +import ( + "fmt" + "sync" + + wasmvmtypes "github.com/CosmWasm/wasmvm/types" + "github.com/cosmos/cosmos-sdk/codec" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" + distributiontypes "github.com/cosmos/cosmos-sdk/x/distribution/types" + slashingtypes "github.com/cosmos/cosmos-sdk/x/slashing/types" + stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" + ibctransfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" + + govtypesv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" + + xiontypes "github.com/burnt-labs/xion/x/xion/types" +) + +// stargateWhitelist keeps whitelist and its deterministic +// response binding for stargate queries. +// CONTRACT: since results of queries go into blocks, queries being added here should always be +// deterministic or can cause non-determinism in the state machine. +// +// The query can be multi-thread, so we have to use +// thread safe sync.Map. +var stargateWhitelist sync.Map + +// Note: When adding a migration here, we should also add it to the Async ICQ params in the upgrade. +// In the future we may want to find a better way to keep these in sync + +//nolint:staticcheck +func init() { + // ibc queries + setWhitelistedQuery("/ibc.applications.transfer.v1.Query/DenomTrace", &ibctransfertypes.QueryDenomTraceResponse{}) + + // cosmos-sdk queries + + // auth + setWhitelistedQuery("/cosmos.auth.v1beta1.Query/Account", &authtypes.QueryAccountResponse{}) + setWhitelistedQuery("/cosmos.auth.v1beta1.Query/Params", &authtypes.QueryParamsResponse{}) + setWhitelistedQuery("/cosmos.auth.v1beta1.Query/ModuleAccounts", &authtypes.QueryModuleAccountsResponse{}) + + // bank + setWhitelistedQuery("/cosmos.bank.v1beta1.Query/Balance", &banktypes.QueryBalanceResponse{}) + setWhitelistedQuery("/cosmos.bank.v1beta1.Query/DenomMetadata", &banktypes.QueryDenomMetadataResponse{}) + setWhitelistedQuery("/cosmos.bank.v1beta1.Query/DenomsMetadata", &banktypes.QueryDenomsMetadataResponse{}) + setWhitelistedQuery("/cosmos.bank.v1beta1.Query/Params", &banktypes.QueryParamsResponse{}) + setWhitelistedQuery("/cosmos.bank.v1beta1.Query/SupplyOf", &banktypes.QuerySupplyOfResponse{}) + + // distribution + setWhitelistedQuery("/cosmos.distribution.v1beta1.Query/Params", &distributiontypes.QueryParamsResponse{}) + setWhitelistedQuery("/cosmos.distribution.v1beta1.Query/DelegatorWithdrawAddress", &distributiontypes.QueryDelegatorWithdrawAddressResponse{}) + setWhitelistedQuery("/cosmos.distribution.v1beta1.Query/ValidatorCommission", &distributiontypes.QueryValidatorCommissionResponse{}) + + // gov + setWhitelistedQuery("/cosmos.gov.v1beta1.Query/Deposit", &govtypesv1.QueryDepositResponse{}) + setWhitelistedQuery("/cosmos.gov.v1beta1.Query/Params", &govtypesv1.QueryParamsResponse{}) + setWhitelistedQuery("/cosmos.gov.v1beta1.Query/Vote", &govtypesv1.QueryVoteResponse{}) + + // slashing + setWhitelistedQuery("/cosmos.slashing.v1beta1.Query/Params", &slashingtypes.QueryParamsResponse{}) + setWhitelistedQuery("/cosmos.slashing.v1beta1.Query/SigningInfo", &slashingtypes.QuerySigningInfoResponse{}) + + // staking + setWhitelistedQuery("/cosmos.staking.v1beta1.Query/Delegation", &stakingtypes.QueryDelegationResponse{}) + setWhitelistedQuery("/cosmos.staking.v1beta1.Query/Params", &stakingtypes.QueryParamsResponse{}) + setWhitelistedQuery("/cosmos.staking.v1beta1.Query/Validator", &stakingtypes.QueryValidatorResponse{}) + + // xion queries + setWhitelistedQuery("/xion.v1.Query/WebAuthNVerifyRegister", &xiontypes.QueryWebAuthNVerifyRegisterResponse{}) + setWhitelistedQuery("/xion.v1.Query/WebAuthNVerifyAuthenticate", &xiontypes.QueryWebAuthNVerifyAuthenticateResponse{}) + +} + +// GetWhitelistedQuery returns the whitelisted query at the provided path. +// If the query does not exist, or it was setup wrong by the chain, this returns an error. +func GetWhitelistedQuery(queryPath string) (codec.ProtoMarshaler, error) { + protoResponseAny, isWhitelisted := stargateWhitelist.Load(queryPath) + if !isWhitelisted { + return nil, wasmvmtypes.UnsupportedRequest{Kind: fmt.Sprintf("'%s' path is not allowed from the contract", queryPath)} + } + protoResponseType, ok := protoResponseAny.(codec.ProtoMarshaler) + if !ok { + return nil, wasmvmtypes.Unknown{} + } + return protoResponseType, nil +} + +func setWhitelistedQuery(queryPath string, protoType codec.ProtoMarshaler) { + stargateWhitelist.Store(queryPath, protoType) +} + +func GetStargateWhitelistedPaths() (keys []string) { + // Iterate over the map and collect the keys + stargateWhitelist.Range(func(key, value interface{}) bool { + keyStr, ok := key.(string) + if !ok { + panic("key is not a string") + } + keys = append(keys, keyStr) + return true + }) + + return keys +} diff --git a/wasmbindings/wasm.go b/wasmbindings/wasm.go new file mode 100644 index 00000000..32558ccf --- /dev/null +++ b/wasmbindings/wasm.go @@ -0,0 +1,17 @@ +package wasmbinding + +import ( + wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" + "github.com/cosmos/cosmos-sdk/baseapp" + "github.com/cosmos/cosmos-sdk/codec" +) + +func RegisterStargateQueries(queryRouter baseapp.GRPCQueryRouter, codec codec.Codec) []wasmkeeper.Option { + queryPluginOpt := wasmkeeper.WithQueryPlugins(&wasmkeeper.QueryPlugins{ + Stargate: StargateQuerier(queryRouter, codec), + }) + + return []wasmkeeper.Option{ + queryPluginOpt, + } +} diff --git a/x/xion/client/cli/tx.go b/x/xion/client/cli/tx.go index 9debb1fa..7e6bed48 100644 --- a/x/xion/client/cli/tx.go +++ b/x/xion/client/cli/tx.go @@ -220,7 +220,7 @@ func NewRegisterCmd() *cobra.Command { CodeId: codeID, }, ) - creatorAddr := sdk.AccAddress(clientCtx.GetFromAddress()) + creatorAddr := clientCtx.GetFromAddress() codeHash, err := hex.DecodeString(codeResp.DataHash.String()) predictedAddr := wasmkeeper.BuildContractAddressPredictable(codeHash, creatorAddr, []byte(salt), []byte{}) @@ -229,15 +229,16 @@ func NewRegisterCmd() *cobra.Command { return fmt.Errorf("error signing predicted address : %s\n", err) } - authenticator := map[string]interface{}{} + instantiateMsg := map[string]interface{}{} authenticatorDetails := map[string]interface{}{} + authenticator := map[string]interface{}{} + + authenticatorDetails["id"] = authenticatorID authenticatorDetails["pubkey"] = pubKey.Bytes() + authenticatorDetails["signature"] = signature authenticator[authenticatorType] = authenticatorDetails - instantiateMsg := map[string]interface{}{} - instantiateMsg["id"] = authenticatorID - instantiateMsg["authenticator"] = authenticator - instantiateMsg["signature"] = signature + instantiateMsg["authenticator"] = authenticator instantiateMsgStr, err := json.Marshal(instantiateMsg) if err != nil { return fmt.Errorf("error signing contract msg : %s", err) @@ -255,7 +256,6 @@ func NewRegisterCmd() *cobra.Command { return err } return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) - return nil }, SilenceUsage: true, } diff --git a/x/xion/keeper/grpc_query.go b/x/xion/keeper/grpc_query.go new file mode 100644 index 00000000..39f7165c --- /dev/null +++ b/x/xion/keeper/grpc_query.go @@ -0,0 +1,65 @@ +package keeper + +import ( + "bytes" + "context" + "encoding/json" + "net/url" + + "github.com/burnt-labs/xion/x/xion/types" + "github.com/go-webauthn/webauthn/protocol" + "github.com/go-webauthn/webauthn/webauthn" +) + +var _ types.QueryServer = Keeper{} + +func (k Keeper) WebAuthNVerifyRegister(_ context.Context, request *types.QueryWebAuthNVerifyRegisterRequest) (*types.QueryWebAuthNVerifyRegisterResponse, error) { + + rp, err := url.Parse(request.Rp) + if err != nil { + return nil, err + } + + data, err := protocol.ParseCredentialCreationResponseBody(bytes.NewReader(request.Data)) + if err != nil { + return nil, err + } + + credential, err := types.VerifyRegistration(rp, request.Addr, request.Challenge, data) + if err != nil { + return nil, err + } + + credentialBz, err := json.Marshal(&credential) + if err != nil { + return nil, err + } + + return &types.QueryWebAuthNVerifyRegisterResponse{Credential: credentialBz}, nil +} + +func (k Keeper) WebAuthNVerifyAuthenticate(_ context.Context, request *types.QueryWebAuthNVerifyAuthenticateRequest) (*types.QueryWebAuthNVerifyAuthenticateResponse, error) { + + rp, err := url.Parse(request.Rp) + if err != nil { + return nil, err + } + + data, err := protocol.ParseCredentialRequestResponseBody(bytes.NewReader(request.Data)) + if err != nil { + return nil, err + } + + var credential webauthn.Credential + err = json.Unmarshal(request.Credential, &credential) + if err != nil { + return nil, err + } + + _, err = types.VerifyAuthentication(rp, request.Addr, request.Challenge, &credential, data) + if err != nil { + return nil, err + } + + return &types.QueryWebAuthNVerifyAuthenticateResponse{}, nil +} diff --git a/x/xion/module.go b/x/xion/module.go index 9f07bcd2..29a2245b 100644 --- a/x/xion/module.go +++ b/x/xion/module.go @@ -91,6 +91,7 @@ func (AppModule) RegisterInvariants(ir sdk.InvariantRegistry) { // RegisterServices registers module services. func (am AppModule) RegisterServices(cfg module.Configurator) { types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.keeper)) + types.RegisterQueryServer(cfg.QueryServer(), am.keeper) } // InitGenesis performs genesis initialization for the ibc-29-fee module. It returns diff --git a/x/xion/types/query.pb.go b/x/xion/types/query.pb.go new file mode 100644 index 00000000..8d9c3584 --- /dev/null +++ b/x/xion/types/query.pb.go @@ -0,0 +1,1275 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: xion/v1/query.proto + +package types + +import ( + context "context" + fmt "fmt" + grpc1 "github.com/cosmos/gogoproto/grpc" + proto "github.com/cosmos/gogoproto/proto" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +type QueryWebAuthNVerifyRegisterRequest struct { + Addr string `protobuf:"bytes,1,opt,name=addr,proto3" json:"addr,omitempty"` + Challenge string `protobuf:"bytes,2,opt,name=challenge,proto3" json:"challenge,omitempty"` + Rp string `protobuf:"bytes,3,opt,name=rp,proto3" json:"rp,omitempty"` + Data []byte `protobuf:"bytes,4,opt,name=data,proto3" json:"data,omitempty"` +} + +func (m *QueryWebAuthNVerifyRegisterRequest) Reset() { *m = QueryWebAuthNVerifyRegisterRequest{} } +func (m *QueryWebAuthNVerifyRegisterRequest) String() string { return proto.CompactTextString(m) } +func (*QueryWebAuthNVerifyRegisterRequest) ProtoMessage() {} +func (*QueryWebAuthNVerifyRegisterRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_2d6eabf4b8b83bc3, []int{0} +} +func (m *QueryWebAuthNVerifyRegisterRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryWebAuthNVerifyRegisterRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryWebAuthNVerifyRegisterRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryWebAuthNVerifyRegisterRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryWebAuthNVerifyRegisterRequest.Merge(m, src) +} +func (m *QueryWebAuthNVerifyRegisterRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryWebAuthNVerifyRegisterRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryWebAuthNVerifyRegisterRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryWebAuthNVerifyRegisterRequest proto.InternalMessageInfo + +func (m *QueryWebAuthNVerifyRegisterRequest) GetAddr() string { + if m != nil { + return m.Addr + } + return "" +} + +func (m *QueryWebAuthNVerifyRegisterRequest) GetChallenge() string { + if m != nil { + return m.Challenge + } + return "" +} + +func (m *QueryWebAuthNVerifyRegisterRequest) GetRp() string { + if m != nil { + return m.Rp + } + return "" +} + +func (m *QueryWebAuthNVerifyRegisterRequest) GetData() []byte { + if m != nil { + return m.Data + } + return nil +} + +type QueryWebAuthNVerifyRegisterResponse struct { + Credential []byte `protobuf:"bytes,1,opt,name=credential,proto3" json:"credential,omitempty"` +} + +func (m *QueryWebAuthNVerifyRegisterResponse) Reset() { *m = QueryWebAuthNVerifyRegisterResponse{} } +func (m *QueryWebAuthNVerifyRegisterResponse) String() string { return proto.CompactTextString(m) } +func (*QueryWebAuthNVerifyRegisterResponse) ProtoMessage() {} +func (*QueryWebAuthNVerifyRegisterResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_2d6eabf4b8b83bc3, []int{1} +} +func (m *QueryWebAuthNVerifyRegisterResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryWebAuthNVerifyRegisterResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryWebAuthNVerifyRegisterResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryWebAuthNVerifyRegisterResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryWebAuthNVerifyRegisterResponse.Merge(m, src) +} +func (m *QueryWebAuthNVerifyRegisterResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryWebAuthNVerifyRegisterResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryWebAuthNVerifyRegisterResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryWebAuthNVerifyRegisterResponse proto.InternalMessageInfo + +func (m *QueryWebAuthNVerifyRegisterResponse) GetCredential() []byte { + if m != nil { + return m.Credential + } + return nil +} + +type QueryWebAuthNVerifyAuthenticateRequest struct { + Addr string `protobuf:"bytes,1,opt,name=addr,proto3" json:"addr,omitempty"` + Challenge string `protobuf:"bytes,2,opt,name=challenge,proto3" json:"challenge,omitempty"` + Rp string `protobuf:"bytes,3,opt,name=rp,proto3" json:"rp,omitempty"` + Credential []byte `protobuf:"bytes,4,opt,name=credential,proto3" json:"credential,omitempty"` + Data []byte `protobuf:"bytes,5,opt,name=data,proto3" json:"data,omitempty"` +} + +func (m *QueryWebAuthNVerifyAuthenticateRequest) Reset() { + *m = QueryWebAuthNVerifyAuthenticateRequest{} +} +func (m *QueryWebAuthNVerifyAuthenticateRequest) String() string { return proto.CompactTextString(m) } +func (*QueryWebAuthNVerifyAuthenticateRequest) ProtoMessage() {} +func (*QueryWebAuthNVerifyAuthenticateRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_2d6eabf4b8b83bc3, []int{2} +} +func (m *QueryWebAuthNVerifyAuthenticateRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryWebAuthNVerifyAuthenticateRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryWebAuthNVerifyAuthenticateRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryWebAuthNVerifyAuthenticateRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryWebAuthNVerifyAuthenticateRequest.Merge(m, src) +} +func (m *QueryWebAuthNVerifyAuthenticateRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryWebAuthNVerifyAuthenticateRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryWebAuthNVerifyAuthenticateRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryWebAuthNVerifyAuthenticateRequest proto.InternalMessageInfo + +func (m *QueryWebAuthNVerifyAuthenticateRequest) GetAddr() string { + if m != nil { + return m.Addr + } + return "" +} + +func (m *QueryWebAuthNVerifyAuthenticateRequest) GetChallenge() string { + if m != nil { + return m.Challenge + } + return "" +} + +func (m *QueryWebAuthNVerifyAuthenticateRequest) GetRp() string { + if m != nil { + return m.Rp + } + return "" +} + +func (m *QueryWebAuthNVerifyAuthenticateRequest) GetCredential() []byte { + if m != nil { + return m.Credential + } + return nil +} + +func (m *QueryWebAuthNVerifyAuthenticateRequest) GetData() []byte { + if m != nil { + return m.Data + } + return nil +} + +type QueryWebAuthNVerifyAuthenticateResponse struct { +} + +func (m *QueryWebAuthNVerifyAuthenticateResponse) Reset() { + *m = QueryWebAuthNVerifyAuthenticateResponse{} +} +func (m *QueryWebAuthNVerifyAuthenticateResponse) String() string { return proto.CompactTextString(m) } +func (*QueryWebAuthNVerifyAuthenticateResponse) ProtoMessage() {} +func (*QueryWebAuthNVerifyAuthenticateResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_2d6eabf4b8b83bc3, []int{3} +} +func (m *QueryWebAuthNVerifyAuthenticateResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryWebAuthNVerifyAuthenticateResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryWebAuthNVerifyAuthenticateResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryWebAuthNVerifyAuthenticateResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryWebAuthNVerifyAuthenticateResponse.Merge(m, src) +} +func (m *QueryWebAuthNVerifyAuthenticateResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryWebAuthNVerifyAuthenticateResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryWebAuthNVerifyAuthenticateResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryWebAuthNVerifyAuthenticateResponse proto.InternalMessageInfo + +func init() { + proto.RegisterType((*QueryWebAuthNVerifyRegisterRequest)(nil), "xion.v1.QueryWebAuthNVerifyRegisterRequest") + proto.RegisterType((*QueryWebAuthNVerifyRegisterResponse)(nil), "xion.v1.QueryWebAuthNVerifyRegisterResponse") + proto.RegisterType((*QueryWebAuthNVerifyAuthenticateRequest)(nil), "xion.v1.QueryWebAuthNVerifyAuthenticateRequest") + proto.RegisterType((*QueryWebAuthNVerifyAuthenticateResponse)(nil), "xion.v1.QueryWebAuthNVerifyAuthenticateResponse") +} + +func init() { proto.RegisterFile("xion/v1/query.proto", fileDescriptor_2d6eabf4b8b83bc3) } + +var fileDescriptor_2d6eabf4b8b83bc3 = []byte{ + // 340 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0xae, 0xc8, 0xcc, 0xcf, + 0xd3, 0x2f, 0x33, 0xd4, 0x2f, 0x2c, 0x4d, 0x2d, 0xaa, 0xd4, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, + 0x62, 0x07, 0x09, 0xea, 0x95, 0x19, 0x2a, 0x55, 0x71, 0x29, 0x05, 0x82, 0xc4, 0xc3, 0x53, 0x93, + 0x1c, 0x4b, 0x4b, 0x32, 0xfc, 0xc2, 0x52, 0x8b, 0x32, 0xd3, 0x2a, 0x83, 0x52, 0xd3, 0x33, 0x8b, + 0x4b, 0x52, 0x8b, 0x82, 0x52, 0x0b, 0x4b, 0x53, 0x8b, 0x4b, 0x84, 0x84, 0xb8, 0x58, 0x12, 0x53, + 0x52, 0x8a, 0x24, 0x18, 0x15, 0x18, 0x35, 0x38, 0x83, 0xc0, 0x6c, 0x21, 0x19, 0x2e, 0xce, 0xe4, + 0x8c, 0xc4, 0x9c, 0x9c, 0xd4, 0xbc, 0xf4, 0x54, 0x09, 0x26, 0xb0, 0x04, 0x42, 0x40, 0x88, 0x8f, + 0x8b, 0xa9, 0xa8, 0x40, 0x82, 0x19, 0x2c, 0xcc, 0x54, 0x54, 0x00, 0x32, 0x21, 0x25, 0xb1, 0x24, + 0x51, 0x82, 0x45, 0x81, 0x51, 0x83, 0x27, 0x08, 0xcc, 0x56, 0x72, 0xe5, 0x52, 0xc6, 0x6b, 0x77, + 0x71, 0x41, 0x7e, 0x5e, 0x71, 0xaa, 0x90, 0x1c, 0x17, 0x57, 0x72, 0x51, 0x6a, 0x4a, 0x6a, 0x5e, + 0x49, 0x66, 0x62, 0x0e, 0xd8, 0x09, 0x3c, 0x41, 0x48, 0x22, 0x4a, 0xf3, 0x18, 0xb9, 0xd4, 0xb0, + 0x98, 0x03, 0x62, 0x82, 0x54, 0x24, 0x27, 0x96, 0xa4, 0x52, 0xcf, 0x1f, 0xa8, 0x8e, 0x61, 0x41, + 0x77, 0x0c, 0xdc, 0x9f, 0xac, 0x48, 0xfe, 0xd4, 0xe4, 0x52, 0x27, 0xe8, 0x3e, 0x88, 0x5f, 0x8d, + 0x9a, 0x98, 0xb8, 0x58, 0xc1, 0x6a, 0x85, 0x4a, 0xb9, 0xc4, 0xb0, 0x87, 0x8b, 0x90, 0xb6, 0x1e, + 0x34, 0xf2, 0xf4, 0x08, 0xc7, 0x9c, 0x94, 0x0e, 0x71, 0x8a, 0x21, 0xd6, 0x2b, 0x31, 0x08, 0x35, + 0x32, 0x72, 0x49, 0xe1, 0x76, 0xa7, 0x90, 0x3e, 0x3e, 0xe3, 0xb0, 0x84, 0xb8, 0x94, 0x01, 0xf1, + 0x1a, 0x60, 0x6e, 0x70, 0x72, 0x3c, 0xf1, 0x48, 0x8e, 0xf1, 0xc2, 0x23, 0x39, 0xc6, 0x07, 0x8f, + 0xe4, 0x18, 0x27, 0x3c, 0x96, 0x63, 0xb8, 0xf0, 0x58, 0x8e, 0xe1, 0xc6, 0x63, 0x39, 0x86, 0x28, + 0xf5, 0xf4, 0xcc, 0x92, 0x8c, 0xd2, 0x24, 0xbd, 0xe4, 0xfc, 0x5c, 0xfd, 0xa4, 0xd2, 0xa2, 0xbc, + 0x12, 0xdd, 0x9c, 0xc4, 0xa4, 0x62, 0x7d, 0x70, 0x0a, 0xaf, 0x80, 0x50, 0x25, 0x95, 0x05, 0xa9, + 0xc5, 0x49, 0x6c, 0xe0, 0x64, 0x6e, 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, 0xcd, 0xd9, 0x5e, 0xff, + 0xfd, 0x02, 0x00, 0x00, +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// QueryClient is the client API for Query service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type QueryClient interface { + WebAuthNVerifyRegister(ctx context.Context, in *QueryWebAuthNVerifyRegisterRequest, opts ...grpc.CallOption) (*QueryWebAuthNVerifyRegisterResponse, error) + WebAuthNVerifyAuthenticate(ctx context.Context, in *QueryWebAuthNVerifyAuthenticateRequest, opts ...grpc.CallOption) (*QueryWebAuthNVerifyAuthenticateResponse, error) +} + +type queryClient struct { + cc grpc1.ClientConn +} + +func NewQueryClient(cc grpc1.ClientConn) QueryClient { + return &queryClient{cc} +} + +func (c *queryClient) WebAuthNVerifyRegister(ctx context.Context, in *QueryWebAuthNVerifyRegisterRequest, opts ...grpc.CallOption) (*QueryWebAuthNVerifyRegisterResponse, error) { + out := new(QueryWebAuthNVerifyRegisterResponse) + err := c.cc.Invoke(ctx, "/xion.v1.Query/WebAuthNVerifyRegister", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) WebAuthNVerifyAuthenticate(ctx context.Context, in *QueryWebAuthNVerifyAuthenticateRequest, opts ...grpc.CallOption) (*QueryWebAuthNVerifyAuthenticateResponse, error) { + out := new(QueryWebAuthNVerifyAuthenticateResponse) + err := c.cc.Invoke(ctx, "/xion.v1.Query/WebAuthNVerifyAuthenticate", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// QueryServer is the server API for Query service. +type QueryServer interface { + WebAuthNVerifyRegister(context.Context, *QueryWebAuthNVerifyRegisterRequest) (*QueryWebAuthNVerifyRegisterResponse, error) + WebAuthNVerifyAuthenticate(context.Context, *QueryWebAuthNVerifyAuthenticateRequest) (*QueryWebAuthNVerifyAuthenticateResponse, error) +} + +// UnimplementedQueryServer can be embedded to have forward compatible implementations. +type UnimplementedQueryServer struct { +} + +func (*UnimplementedQueryServer) WebAuthNVerifyRegister(ctx context.Context, req *QueryWebAuthNVerifyRegisterRequest) (*QueryWebAuthNVerifyRegisterResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method WebAuthNVerifyRegister not implemented") +} +func (*UnimplementedQueryServer) WebAuthNVerifyAuthenticate(ctx context.Context, req *QueryWebAuthNVerifyAuthenticateRequest) (*QueryWebAuthNVerifyAuthenticateResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method WebAuthNVerifyAuthenticate not implemented") +} + +func RegisterQueryServer(s grpc1.Server, srv QueryServer) { + s.RegisterService(&_Query_serviceDesc, srv) +} + +func _Query_WebAuthNVerifyRegister_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryWebAuthNVerifyRegisterRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).WebAuthNVerifyRegister(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/xion.v1.Query/WebAuthNVerifyRegister", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).WebAuthNVerifyRegister(ctx, req.(*QueryWebAuthNVerifyRegisterRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_WebAuthNVerifyAuthenticate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryWebAuthNVerifyAuthenticateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).WebAuthNVerifyAuthenticate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/xion.v1.Query/WebAuthNVerifyAuthenticate", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).WebAuthNVerifyAuthenticate(ctx, req.(*QueryWebAuthNVerifyAuthenticateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _Query_serviceDesc = grpc.ServiceDesc{ + ServiceName: "xion.v1.Query", + HandlerType: (*QueryServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "WebAuthNVerifyRegister", + Handler: _Query_WebAuthNVerifyRegister_Handler, + }, + { + MethodName: "WebAuthNVerifyAuthenticate", + Handler: _Query_WebAuthNVerifyAuthenticate_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "xion/v1/query.proto", +} + +func (m *QueryWebAuthNVerifyRegisterRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryWebAuthNVerifyRegisterRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryWebAuthNVerifyRegisterRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Data) > 0 { + i -= len(m.Data) + copy(dAtA[i:], m.Data) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Data))) + i-- + dAtA[i] = 0x22 + } + if len(m.Rp) > 0 { + i -= len(m.Rp) + copy(dAtA[i:], m.Rp) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Rp))) + i-- + dAtA[i] = 0x1a + } + if len(m.Challenge) > 0 { + i -= len(m.Challenge) + copy(dAtA[i:], m.Challenge) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Challenge))) + i-- + dAtA[i] = 0x12 + } + if len(m.Addr) > 0 { + i -= len(m.Addr) + copy(dAtA[i:], m.Addr) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Addr))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryWebAuthNVerifyRegisterResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryWebAuthNVerifyRegisterResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryWebAuthNVerifyRegisterResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Credential) > 0 { + i -= len(m.Credential) + copy(dAtA[i:], m.Credential) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Credential))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryWebAuthNVerifyAuthenticateRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryWebAuthNVerifyAuthenticateRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryWebAuthNVerifyAuthenticateRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Data) > 0 { + i -= len(m.Data) + copy(dAtA[i:], m.Data) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Data))) + i-- + dAtA[i] = 0x2a + } + if len(m.Credential) > 0 { + i -= len(m.Credential) + copy(dAtA[i:], m.Credential) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Credential))) + i-- + dAtA[i] = 0x22 + } + if len(m.Rp) > 0 { + i -= len(m.Rp) + copy(dAtA[i:], m.Rp) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Rp))) + i-- + dAtA[i] = 0x1a + } + if len(m.Challenge) > 0 { + i -= len(m.Challenge) + copy(dAtA[i:], m.Challenge) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Challenge))) + i-- + dAtA[i] = 0x12 + } + if len(m.Addr) > 0 { + i -= len(m.Addr) + copy(dAtA[i:], m.Addr) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Addr))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryWebAuthNVerifyAuthenticateResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryWebAuthNVerifyAuthenticateResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryWebAuthNVerifyAuthenticateResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { + offset -= sovQuery(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *QueryWebAuthNVerifyRegisterRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Addr) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.Challenge) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.Rp) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.Data) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryWebAuthNVerifyRegisterResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Credential) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryWebAuthNVerifyAuthenticateRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Addr) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.Challenge) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.Rp) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.Credential) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.Data) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryWebAuthNVerifyAuthenticateResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func sovQuery(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozQuery(x uint64) (n int) { + return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *QueryWebAuthNVerifyRegisterRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryWebAuthNVerifyRegisterRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryWebAuthNVerifyRegisterRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Addr", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Addr = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Challenge", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Challenge = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Rp", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Rp = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Data", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Data = append(m.Data[:0], dAtA[iNdEx:postIndex]...) + if m.Data == nil { + m.Data = []byte{} + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryWebAuthNVerifyRegisterResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryWebAuthNVerifyRegisterResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryWebAuthNVerifyRegisterResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Credential", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Credential = append(m.Credential[:0], dAtA[iNdEx:postIndex]...) + if m.Credential == nil { + m.Credential = []byte{} + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryWebAuthNVerifyAuthenticateRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryWebAuthNVerifyAuthenticateRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryWebAuthNVerifyAuthenticateRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Addr", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Addr = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Challenge", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Challenge = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Rp", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Rp = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Credential", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Credential = append(m.Credential[:0], dAtA[iNdEx:postIndex]...) + if m.Credential == nil { + m.Credential = []byte{} + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Data", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Data = append(m.Data[:0], dAtA[iNdEx:postIndex]...) + if m.Data == nil { + m.Data = []byte{} + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryWebAuthNVerifyAuthenticateResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryWebAuthNVerifyAuthenticateResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryWebAuthNVerifyAuthenticateResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipQuery(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthQuery + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupQuery + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthQuery + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthQuery = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowQuery = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupQuery = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/xion/types/webauthn.go b/x/xion/types/webauthn.go new file mode 100644 index 00000000..bd9c849d --- /dev/null +++ b/x/xion/types/webauthn.go @@ -0,0 +1,90 @@ +package types + +import ( + "net/url" + + "github.com/go-webauthn/webauthn/protocol" + "github.com/go-webauthn/webauthn/webauthn" +) + +type SmartContractUser struct { + address string + credential *webauthn.Credential +} + +func (s SmartContractUser) WebAuthnID() []byte { + + return []byte(s.address) +} + +func (s SmartContractUser) WebAuthnName() string { + return s.address +} + +func (s SmartContractUser) WebAuthnDisplayName() string { + return s.WebAuthnName() +} + +func (s SmartContractUser) WebAuthnCredentials() []webauthn.Credential { + return []webauthn.Credential{*s.credential} +} + +func (s SmartContractUser) WebAuthnIcon() string { + return "" +} + +var _ webauthn.User = SmartContractUser{} + +func VerifyRegistration(rp *url.URL, contractAddr string, challenge string, credentialCreationData *protocol.ParsedCredentialCreationData) (*webauthn.Credential, error) { + config := webauthn.Config{ + RPID: rp.Host, + RPDisplayName: rp.String(), + RPOrigins: []string{rp.String()}, + AttestationPreference: "", + AuthenticatorSelection: protocol.AuthenticatorSelection{}, + } + webAuthn, err := webauthn.New(&config) + if err != nil { + return nil, err + } + + var smartContractUser = SmartContractUser{address: contractAddr} + var session = webauthn.SessionData{ + Challenge: challenge, + UserID: smartContractUser.WebAuthnID(), + UserVerification: protocol.VerificationPreferred, + } + + return webAuthn.CreateCredential(smartContractUser, session, credentialCreationData) +} + +func VerifyAuthentication(rp *url.URL, contractAddr string, challenge string, credential *webauthn.Credential, credentialAssertionData *protocol.ParsedCredentialAssertionData) (bool, error) { + config := webauthn.Config{ + RPID: rp.Host, + RPDisplayName: rp.String(), + RPOrigins: []string{rp.String()}, + AttestationPreference: "", + AuthenticatorSelection: protocol.AuthenticatorSelection{}, + } + webAuthn, err := webauthn.New(&config) + if err != nil { + return false, err + } + + var smartContractUser = SmartContractUser{ + address: contractAddr, + credential: credential, + } + var session = webauthn.SessionData{ + Challenge: challenge, + UserID: smartContractUser.WebAuthnID(), + UserVerification: protocol.VerificationPreferred, + AllowedCredentialIDs: [][]byte{credential.ID}, + } + + if _, err := webAuthn.ValidateLogin(smartContractUser, session, credentialAssertionData); err != nil { + return false, err + } + + return true, nil +} diff --git a/x/xion/types/webauthn_test.go b/x/xion/types/webauthn_test.go new file mode 100644 index 00000000..b0fce582 --- /dev/null +++ b/x/xion/types/webauthn_test.go @@ -0,0 +1,45 @@ +package types_test + +import ( + "net/url" + "strings" + "testing" + + "github.com/dvsekhvalnov/jose2go/base64url" + + "github.com/burnt-labs/xion/x/xion/types" + sdktypes "github.com/cosmos/cosmos-sdk/types" + "github.com/go-webauthn/webauthn/protocol" + "github.com/stretchr/testify/require" +) + +func TestRegisterAndAuthenticate(t *testing.T) { + config := sdktypes.GetConfig() + config.SetBech32PrefixForAccount("xion", "xionpub") + + bec32Addr := "xion1cyyld62ly828e2xnp0c0ckpyz68wwfs26tjpscmqlaum2jcj8zdstlxvya" + + rp, err := url.Parse("https://xion-dapp-example-git-feat-faceid-burntfinance.vercel.app") + require.NoError(t, err) + + challengeStr := "test-challenge" + challenge := base64url.Encode([]byte(challengeStr)) + const registerStr = `{"type":"public-key","id":"6BnpSHlIXwOndHhxfPw4l3SylupnZIvTVP9Vp_aK34w","rawId":"6BnpSHlIXwOndHhxfPw4l3SylupnZIvTVP9Vp_aK34w","authenticatorAttachment":"platform","response":{"clientDataJSON":"eyJ0eXBlIjoid2ViYXV0aG4uY3JlYXRlIiwiY2hhbGxlbmdlIjoiZEdWemRDMWphR0ZzYkdWdVoyVSIsIm9yaWdpbiI6Imh0dHBzOi8veGlvbi1kYXBwLWV4YW1wbGUtZ2l0LWZlYXQtZmFjZWlkLWJ1cm50ZmluYW5jZS52ZXJjZWwuYXBwIiwiY3Jvc3NPcmlnaW4iOmZhbHNlfQ","attestationObject":"o2NmbXRkbm9uZWdhdHRTdG10oGhhdXRoRGF0YViksGMBiDcEppiMfxQ10TPCe2-FaKrLeTkvpzxczngTMw1BAAAAAK3OAAI1vMYKZIsLJfHwVQMAIOgZ6Uh5SF8Dp3R4cXz8OJd0spbqZ2SL01T_Vaf2it-MpQECAyYgASFYINnBKEMfG6wkb9W1grSXgNAQ8lx6H7j6EcMyTSbZ91-XIlggdk2OOxV_bISxCsqFac6ZE8-gEurV4xQd7kFFYdfMqtE","transports":["internal"]},"clientExtensionResults":{}}` + + data, err := protocol.ParseCredentialCreationResponseBody(strings.NewReader(registerStr)) + require.NoError(t, err) + + cred, err := types.VerifyRegistration(rp, bec32Addr, challenge, data) + require.NoError(t, err) + + t.Logf("credential: %v", cred) + + authenticateStr := `{"type":"public-key","id":"6BnpSHlIXwOndHhxfPw4l3SylupnZIvTVP9Vp_aK34w","rawId":"6BnpSHlIXwOndHhxfPw4l3SylupnZIvTVP9Vp_aK34w","authenticatorAttachment":"platform","response":{"clientDataJSON":"eyJ0eXBlIjoid2ViYXV0aG4uZ2V0IiwiY2hhbGxlbmdlIjoiZEdWemRDMWphR0ZzYkdWdVoyVSIsIm9yaWdpbiI6Imh0dHBzOi8veGlvbi1kYXBwLWV4YW1wbGUtZ2l0LWZlYXQtZmFjZWlkLWJ1cm50ZmluYW5jZS52ZXJjZWwuYXBwIiwiY3Jvc3NPcmlnaW4iOmZhbHNlfQ","authenticatorData":"sGMBiDcEppiMfxQ10TPCe2-FaKrLeTkvpzxczngTMw0BAAAAAA","signature":"MEQCIF1Fm_XjFV5FjBRYXNN1WcDm0V4xbPn3sQ85gC34_FGmAiBzLYGsat3HwDcn4jh50gTW4mgGcmYqkvT2g1bfdFxElA","userHandle":null},"clientExtensionResults":{}}` + + authData, err := protocol.ParseCredentialRequestResponseBody(strings.NewReader(authenticateStr)) + require.NoError(t, err) + + verified, err := types.VerifyAuthentication(rp, bec32Addr, challenge, cred, authData) + require.NoError(t, err) + require.True(t, verified) +} From abeb0a3d5cffc0308ed50eef4f3a34f8203b94cd Mon Sep 17 00:00:00 2001 From: ash-burnt <96692350+ash-burnt@users.noreply.github.com> Date: Wed, 6 Mar 2024 18:06:05 -0500 Subject: [PATCH 257/501] JWK Module + JWT Verification (#158) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * jwt test * tx created, need to submit * sending works * successful test * integration test in ci * test keys * consolidate contract * query endpoints for webauthn validation * Bump Go version to 1.21 in Docker container * go mod tidy * Bump Go version in Github Actions workflows * updated contract * merge * go mod tidy * chore: register query services for stargate queries * chore: passing register test case * initial scaffold for jwk module * unneeded keepers, param update * deps fix * integration test deps * deps * deps * unused tests * deps * begin modification of test for use of jwk module * tidy * jwk set generated * we won't use sets, just keys * minimal deps changes * upgrade to go 20 * unused tests * remove generated tests * [WIP] fix: failing test * chore: webAuthN integration test * fix: jwt_aa failing test * fix: failing integration tests * fix: failing jwt aa test * correct account contract * only one contract type * incorrect path * chore: fix failing rotating key integration test * chore: fix failing abstract account rotating key test * fix: failing unit test * add description file for account wasm * update contract * go mod tidy * chore: use recent contract * fix: failing integration test * contract main for aa contract * update contract * run both tests * note * incorrect path * chore: resign integration tests * back to 3 validators * test updating aa cli for new contract * catch error * salt * chain id * remove old test style * Update contract * chore: fix integration tests * fix: failing JWT integration test * Add Upgrade to jwk module (#172) * upgrade jwk module * update upgrade_test documentation * better defaults * allow update of admin * allow admin update * check tx hash in the contract * no tx hash in protocol * remove tx hash from test * Add webauthn sigs update instructions * Pull WebAuthN test setup into helper func * Update webauthn signatures --------- Co-authored-by: Eduardo Diaz Co-authored-by: Francis Roch Co-authored-by: peartes Co-authored-by: justin <328965+justinbarry@users.noreply.github.com> Co-authored-by: Eduardo Díaz --- Dockerfile | 248 +-- Makefile | 2 +- app/app.go | 32 +- app/upgrades/v4/constants.go | 23 + app/upgrades/v4/upgrades.go | 24 + go.mod | 25 +- go.sum | 54 +- integration_tests/go.mod | 13 +- integration_tests/go.sum | 27 +- integration_tests/jwt_aa_test.go | 62 +- .../contracts/account_updatable-aarch64.wasm | Bin 456128 -> 362885 bytes integration_tests/upgrade_test.go | 8 +- integration_tests/webauthn_test.go | 43 +- proto/xion/jwk/v1/audience.proto | 11 + proto/xion/jwk/v1/genesis.proto | 16 + proto/xion/jwk/v1/params.proto | 14 + proto/xion/jwk/v1/query.proto | 73 + proto/xion/jwk/v1/tx.proto | 38 + wasmbindings/keys/jwtRS256.key | 51 + wasmbindings/query_plugin_test.go | 195 +- wasmbindings/stargate_whitelist.go | 6 +- x/jwk/client/cli/query.go | 35 + x/jwk/client/cli/query_audience.go | 78 + x/jwk/client/cli/query_params.go | 36 + x/jwk/client/cli/query_validate_jwt.go | 50 + x/jwk/client/cli/tx.go | 39 + x/jwk/client/cli/tx_audience.go | 115 ++ x/jwk/genesis.go | 28 + x/jwk/keeper/audience.go | 63 + x/jwk/keeper/keeper.go | 43 + x/jwk/keeper/migrations.go | 22 + x/jwk/keeper/msg_server.go | 17 + x/jwk/keeper/msg_server_audience.go | 92 + x/jwk/keeper/params.go | 16 + x/jwk/keeper/query.go | 7 + x/jwk/keeper/query_audience.go | 57 + x/jwk/keeper/query_params.go | 19 + x/jwk/keeper/query_validate_jwt.go | 46 + x/jwk/migrations/v1/migration.go | 24 + x/jwk/module.go | 152 ++ x/jwk/types/audience.pb.go | 418 ++++ x/jwk/types/codec.go | 31 + x/jwk/types/errors.go | 12 + x/jwk/types/genesis.go | 35 + x/jwk/types/genesis.pb.go | 385 ++++ x/jwk/types/genesis_test.go | 63 + x/jwk/types/key_audience.go | 23 + x/jwk/types/keys.go | 16 + x/jwk/types/messages_audience.go | 150 ++ x/jwk/types/params.go | 43 + x/jwk/types/params.pb.go | 338 +++ x/jwk/types/query.pb.go | 1820 +++++++++++++++++ x/jwk/types/query.pb.gw.go | 482 +++++ x/jwk/types/tx.pb.go | 1485 ++++++++++++++ x/jwk/types/types.go | 1 + 55 files changed, 7006 insertions(+), 200 deletions(-) create mode 100644 app/upgrades/v4/constants.go create mode 100644 app/upgrades/v4/upgrades.go create mode 100644 proto/xion/jwk/v1/audience.proto create mode 100644 proto/xion/jwk/v1/genesis.proto create mode 100644 proto/xion/jwk/v1/params.proto create mode 100644 proto/xion/jwk/v1/query.proto create mode 100644 proto/xion/jwk/v1/tx.proto create mode 100644 wasmbindings/keys/jwtRS256.key create mode 100644 x/jwk/client/cli/query.go create mode 100644 x/jwk/client/cli/query_audience.go create mode 100644 x/jwk/client/cli/query_params.go create mode 100644 x/jwk/client/cli/query_validate_jwt.go create mode 100644 x/jwk/client/cli/tx.go create mode 100644 x/jwk/client/cli/tx_audience.go create mode 100644 x/jwk/genesis.go create mode 100644 x/jwk/keeper/audience.go create mode 100644 x/jwk/keeper/keeper.go create mode 100644 x/jwk/keeper/migrations.go create mode 100644 x/jwk/keeper/msg_server.go create mode 100644 x/jwk/keeper/msg_server_audience.go create mode 100644 x/jwk/keeper/params.go create mode 100644 x/jwk/keeper/query.go create mode 100644 x/jwk/keeper/query_audience.go create mode 100644 x/jwk/keeper/query_params.go create mode 100644 x/jwk/keeper/query_validate_jwt.go create mode 100644 x/jwk/migrations/v1/migration.go create mode 100644 x/jwk/module.go create mode 100644 x/jwk/types/audience.pb.go create mode 100644 x/jwk/types/codec.go create mode 100644 x/jwk/types/errors.go create mode 100644 x/jwk/types/genesis.go create mode 100644 x/jwk/types/genesis.pb.go create mode 100644 x/jwk/types/genesis_test.go create mode 100644 x/jwk/types/key_audience.go create mode 100644 x/jwk/types/keys.go create mode 100644 x/jwk/types/messages_audience.go create mode 100644 x/jwk/types/params.go create mode 100644 x/jwk/types/params.pb.go create mode 100644 x/jwk/types/query.pb.go create mode 100644 x/jwk/types/query.pb.gw.go create mode 100644 x/jwk/types/tx.pb.go create mode 100644 x/jwk/types/types.go diff --git a/Dockerfile b/Dockerfile index f0fe502b..809e2f91 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,134 +1,134 @@ # docker build . -t cosmwasm/xiond:latest # docker run --rm -it cosmwasm/xiond:latest /bin/sh FROM golang:1.21-alpine3.19 AS go-builder - ARG arch=x86_64 - - ENV WASMVM_VERSION=v1.5.2 - ENV WASMVM_CHECKSUM_AARCH64=e78b224c15964817a3b75a40e59882b4d0e06fd055b39514d61646689cef8c6e - ENV WASMVM_CHECKSUM_x86_64=e660a38efb2930b34ee6f6b0bb12730adccb040b6ab701b8f82f34453a426ae7 - - # this comes from standard alpine nightly file - # https://github.com/rust-lang/docker-rust-nightly/blob/master/alpine3.12/Dockerfile - # with some changes to support our toolchain, etc - RUN set -eux; apk add --no-cache ca-certificates build-base; - - RUN apk add git - # NOTE: add these to run with LEDGER_ENABLED=true - # RUN apk add libusb-dev linux-headers - - WORKDIR /code - COPY go.mod /code/ - COPY go.sum /code/ - RUN go mod download - - COPY ./.git /code/.git - COPY ./app /code/app - COPY ./cmd /code/cmd - COPY ./contrib /code/contrib - COPY ./proto /code/proto - COPY ./x /code/x - COPY Makefile /code/ - - # See https://github.com/CosmWasm/wasmvm/releases - ADD https://github.com/CosmWasm/wasmvm/releases/download/${WASMVM_VERSION}/libwasmvm_muslc.aarch64.a /lib/libwasmvm_muslc.aarch64.a - ADD https://github.com/CosmWasm/wasmvm/releases/download/${WASMVM_VERSION}/libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.x86_64.a - RUN sha256sum /lib/libwasmvm_muslc.aarch64.a | grep ${WASMVM_CHECKSUM_AARCH64} - RUN sha256sum /lib/libwasmvm_muslc.x86_64.a | grep ${WASMVM_CHECKSUM_x86_64} - - # Copy the library you want to the final location that will be found by the linker flag `-lwasmvm_muslc` - RUN cp -vf /lib/libwasmvm_muslc.${arch}.a /lib/libwasmvm_muslc.a - - # force it to use static lib (from above) not standard libgo_cosmwasm.so file - RUN set -eux \ - && make test-version \ - && LEDGER_ENABLED=false BUILD_TAGS=muslc LINK_STATICALLY=true make build - - RUN echo "Ensuring binary is statically linked ..." \ - && (file /code/build/xiond | grep "statically linked") +ARG arch=x86_64 + +ENV WASMVM_VERSION=v1.5.2 +ENV WASMVM_CHECKSUM_AARCH64=e78b224c15964817a3b75a40e59882b4d0e06fd055b39514d61646689cef8c6e +ENV WASMVM_CHECKSUM_x86_64=e660a38efb2930b34ee6f6b0bb12730adccb040b6ab701b8f82f34453a426ae7 + +# this comes from standard alpine nightly file +# https://github.com/rust-lang/docker-rust-nightly/blob/master/alpine3.12/Dockerfile +# with some changes to support our toolchain, etc +RUN set -eux; apk add --no-cache ca-certificates build-base; + +RUN apk add git +# NOTE: add these to run with LEDGER_ENABLED=true +# RUN apk add libusb-dev linux-headers + +WORKDIR /code +COPY go.mod /code/ +COPY go.sum /code/ +RUN go mod download + +COPY ./.git /code/.git +COPY ./app /code/app +COPY ./cmd /code/cmd +COPY ./contrib /code/contrib +COPY ./proto /code/proto +COPY ./x /code/x +COPY Makefile /code/ + +# See https://github.com/CosmWasm/wasmvm/releases +ADD https://github.com/CosmWasm/wasmvm/releases/download/${WASMVM_VERSION}/libwasmvm_muslc.aarch64.a /lib/libwasmvm_muslc.aarch64.a +ADD https://github.com/CosmWasm/wasmvm/releases/download/${WASMVM_VERSION}/libwasmvm_muslc.x86_64.a /lib/libwasmvm_muslc.x86_64.a +RUN sha256sum /lib/libwasmvm_muslc.aarch64.a | grep ${WASMVM_CHECKSUM_AARCH64} +RUN sha256sum /lib/libwasmvm_muslc.x86_64.a | grep ${WASMVM_CHECKSUM_x86_64} + +# Copy the library you want to the final location that will be found by the linker flag `-lwasmvm_muslc` +RUN cp -vf /lib/libwasmvm_muslc.${arch}.a /lib/libwasmvm_muslc.a + +# force it to use static lib (from above) not standard libgo_cosmwasm.so file +RUN set -eux \ + && make test-version \ + && LEDGER_ENABLED=false BUILD_TAGS=muslc LINK_STATICALLY=true make build + +RUN echo "Ensuring binary is statically linked ..." \ + && (file /code/build/xiond | grep "statically linked") # -------------------------------------------------------- FROM alpine:3.19 AS xion-dev - COPY --from=go-builder /code/build/xiond /usr/bin/xiond - - # rest server - EXPOSE 1317 - # tendermint grpc - EXPOSE 9090 - # tendermint p2p - EXPOSE 26656 - # tendermint rpc - EXPOSE 26657 - # tendermint prometheus - EXPOSE 26660 - - RUN mkdir /xion - - RUN set -euxo pipefail \ - && apk add --no-cache \ - bash \ - curl \ - htop \ - jq \ - lz4 \ - tini - - RUN set -euxo pipefail \ - && addgroup -S xiond \ - && adduser \ - --disabled-password \ - --gecos xiond \ - --ingroup xiond \ - xiond - - RUN set -eux \ - && chown -R xiond:xiond /home/xiond \ - && chown -R xiond:xiond /xion - - USER xiond:xiond - - COPY ./docker/entrypoint.sh /home/xiond/entrypoint.sh - - CMD ["/home/xiond/entrypoint.sh"] +COPY --from=go-builder /code/build/xiond /usr/bin/xiond + +# rest server +EXPOSE 1317 +# tendermint grpc +EXPOSE 9090 +# tendermint p2p +EXPOSE 26656 +# tendermint rpc +EXPOSE 26657 +# tendermint prometheus +EXPOSE 26660 + +RUN mkdir /xion + +RUN set -euxo pipefail \ + && apk add --no-cache \ + bash \ + curl \ + htop \ + jq \ + lz4 \ + tini + +RUN set -euxo pipefail \ + && addgroup -S xiond \ + && adduser \ + --disabled-password \ + --gecos xiond \ + --ingroup xiond \ + xiond + +RUN set -eux \ + && chown -R xiond:xiond /home/xiond \ + && chown -R xiond:xiond /xion + +USER xiond:xiond + +COPY ./docker/entrypoint.sh /home/xiond/entrypoint.sh + +CMD ["/home/xiond/entrypoint.sh"] # -------------------------------------------------------- FROM alpine:3.19 AS xion-release - COPY --from=go-builder /code/build/xiond /usr/bin/xiond - - # rest server - EXPOSE 1317 - # tendermint grpc - EXPOSE 9090 - # tendermint p2p - EXPOSE 26656 - # tendermint rpc - EXPOSE 26657 - # tendermint prometheus - EXPOSE 26660 - - RUN set -euxo pipefail \ - && apk add --no-cache \ - aria2 \ - aws-cli \ - bash \ - curl \ - htop \ - jq \ - lz4 \ - tini - - RUN set -euxo pipefail \ - && addgroup -S xiond \ - && adduser \ - --disabled-password \ - --gecos xiond \ - --ingroup xiond \ - xiond - - RUN set -eux \ - && chown -R xiond:xiond /home/xiond - - USER xiond:xiond - WORKDIR /home/xiond/.xiond - - CMD ["/usr/bin/xiond", "version"] +COPY --from=go-builder /code/build/xiond /usr/bin/xiond + +# rest server +EXPOSE 1317 +# tendermint grpc +EXPOSE 9090 +# tendermint p2p +EXPOSE 26656 +# tendermint rpc +EXPOSE 26657 +# tendermint prometheus +EXPOSE 26660 + +RUN set -euxo pipefail \ + && apk add --no-cache \ + aria2 \ + aws-cli \ + bash \ + curl \ + htop \ + jq \ + lz4 \ + tini + +RUN set -euxo pipefail \ + && addgroup -S xiond \ + && adduser \ + --disabled-password \ + --gecos xiond \ + --ingroup xiond \ + xiond + +RUN set -eux \ + && chown -R xiond:xiond /home/xiond + +USER xiond:xiond +WORKDIR /home/xiond/.xiond + +CMD ["/usr/bin/xiond", "version"] diff --git a/Makefile b/Makefile index 2aa351a3..35f43288 100644 --- a/Makefile +++ b/Makefile @@ -159,7 +159,7 @@ test-integration-web-auth-n-abstract-account: compile_integration_tests @XION_IMAGE=$(XION_IMAGE) ./integration_tests/integration_tests.test -test.failfast -test.v -test.run WebAuthNAbstractAccount test-integration-upgrade: - @XION_IMAGE=$(XION_IMAGE) cd integration_tests && go test -run TestXionUpgradeIBC -mod=readonly -tags='ledger test_ledger_mock' ./... + @XION_IMAGE=$(XION_IMAGE) cd integration_tests && go test -v -run TestXionUpgradeIBC -mod=readonly -tags='ledger test_ledger_mock' ./... test-race: @VERSION=$(VERSION) go test -mod=readonly -race -tags='ledger test_ledger_mock' ./... diff --git a/app/app.go b/app/app.go index be876c75..14300655 100644 --- a/app/app.go +++ b/app/app.go @@ -11,6 +11,9 @@ import ( reflectionv1 "cosmossdk.io/api/cosmos/reflection/v1" owasm "github.com/burnt-labs/xion/wasmbindings" "github.com/burnt-labs/xion/x/globalfee" + "github.com/burnt-labs/xion/x/jwk" + jwkkeeper "github.com/burnt-labs/xion/x/jwk/keeper" + jwktypes "github.com/burnt-labs/xion/x/jwk/types" dbm "github.com/cometbft/cometbft-db" abci "github.com/cometbft/cometbft/abci/types" "github.com/cometbft/cometbft/libs/log" @@ -137,14 +140,13 @@ import ( wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" "github.com/burnt-labs/xion/app/upgrades" + v4 "github.com/burnt-labs/xion/app/upgrades/v4" "github.com/burnt-labs/xion/x/mint" mintkeeper "github.com/burnt-labs/xion/x/mint/keeper" minttypes "github.com/burnt-labs/xion/x/mint/types" "github.com/burnt-labs/xion/x/xion" xionkeeper "github.com/burnt-labs/xion/x/xion/keeper" xiontypes "github.com/burnt-labs/xion/x/xion/types" - - v3 "github.com/burnt-labs/xion/app/upgrades/v3" ) const appName = "XionApp" @@ -161,7 +163,7 @@ var ( // of "EnableAllProposals" (takes precedence over ProposalsEnabled) // https://github.com/CosmWasm/wasmd/blob/02a54d33ff2c064f3539ae12d75d027d9c665f05/x/wasm/internal/types/proposal.go#L28-L34 EnableSpecificProposals = "" - Upgrades = []upgrades.Upgrade{v3.Upgrade} + Upgrades = []upgrades.Upgrade{v4.Upgrade} ) // These constants are derived from the above variables. @@ -233,6 +235,7 @@ var ( ibchooks.AppModuleBasic{}, packetforward.AppModuleBasic{}, feeabs.AppModuleBasic{}, + jwk.AppModuleBasic{}, ) // module account permissions @@ -251,6 +254,7 @@ var ( globalfee.ModuleName: nil, aatypes.ModuleName: nil, xiontypes.ModuleName: nil, + jwktypes.ModuleName: nil, packetforwardtypes.ModuleName: nil, ibchookstypes.ModuleName: nil, feeabstypes.ModuleName: nil, @@ -307,6 +311,7 @@ type WasmApp struct { FeeAbsKeeper feeabskeeper.Keeper XionKeeper xionkeeper.Keeper + JwkKeeper jwkkeeper.Keeper ScopedIBCKeeper capabilitykeeper.ScopedKeeper ScopedICAHostKeeper capabilitykeeper.ScopedKeeper @@ -363,6 +368,7 @@ func NewWasmApp( wasmtypes.StoreKey, icahosttypes.StoreKey, aatypes.StoreKey, icacontrollertypes.StoreKey, globalfee.StoreKey, xiontypes.StoreKey, ibchookstypes.StoreKey, packetforwardtypes.StoreKey, feeabstypes.StoreKey, + jwktypes.StoreKey, ) tkeys := sdk.NewTransientStoreKeys(paramstypes.TStoreKey) @@ -580,6 +586,11 @@ func NewWasmApp( // If evidence needs to be handled for the app, set routes in router here and seal app.EvidenceKeeper = *evidenceKeeper + app.JwkKeeper = jwkkeeper.NewKeeper( + appCodec, + keys[jwktypes.StoreKey], + app.GetSubspace(xiontypes.ModuleName)) + app.XionKeeper = xionkeeper.NewKeeper( appCodec, keys[xiontypes.StoreKey], @@ -781,6 +792,7 @@ func NewWasmApp( nftmodule.NewAppModule(appCodec, app.NFTKeeper, app.AccountKeeper, app.BankKeeper, app.interfaceRegistry), consensus.NewAppModule(appCodec, app.ConsensusParamsKeeper), xion.NewAppModule(app.XionKeeper), + jwk.NewAppModule(appCodec, app.JwkKeeper, app.GetSubspace(jwktypes.ModuleName)), globalfee.NewAppModule(app.GetSubspace(globalfee.ModuleName)), wasm.NewAppModule(appCodec, &app.WasmKeeper, app.StakingKeeper, app.AccountKeeper, app.BankKeeper, app.MsgServiceRouter(), app.GetSubspace(wasmtypes.ModuleName)), aa.NewAppModule(app.AbstractAccountKeeper), @@ -809,6 +821,7 @@ func NewWasmApp( vestingtypes.ModuleName, consensusparamtypes.ModuleName, globalfee.ModuleName, xiontypes.ModuleName, + jwktypes.ModuleName, // additional non simd modules ibctransfertypes.ModuleName, ibcexported.ModuleName, @@ -831,6 +844,7 @@ func NewWasmApp( consensusparamtypes.ModuleName, globalfee.ModuleName, xiontypes.ModuleName, + jwktypes.ModuleName, // additional non simd modules ibctransfertypes.ModuleName, ibcexported.ModuleName, @@ -853,10 +867,13 @@ func NewWasmApp( // genesis phase. For example bank transfer, auth account check, staking, ... genesisModuleOrder := []string{ capabilitytypes.ModuleName, authtypes.ModuleName, banktypes.ModuleName, - distrtypes.ModuleName, stakingtypes.ModuleName, slashingtypes.ModuleName, govtypes.ModuleName, - minttypes.ModuleName, crisistypes.ModuleName, genutiltypes.ModuleName, evidencetypes.ModuleName, authz.ModuleName, - feegrant.ModuleName, nft.ModuleName, group.ModuleName, paramstypes.ModuleName, upgradetypes.ModuleName, - vestingtypes.ModuleName, consensusparamtypes.ModuleName, globalfee.ModuleName, xiontypes.ModuleName, + distrtypes.ModuleName, stakingtypes.ModuleName, slashingtypes.ModuleName, + govtypes.ModuleName, minttypes.ModuleName, crisistypes.ModuleName, + genutiltypes.ModuleName, evidencetypes.ModuleName, authz.ModuleName, + feegrant.ModuleName, nft.ModuleName, group.ModuleName, + paramstypes.ModuleName, upgradetypes.ModuleName, vestingtypes.ModuleName, + consensusparamtypes.ModuleName, globalfee.ModuleName, xiontypes.ModuleName, + jwktypes.ModuleName, // additional non simd modules ibctransfertypes.ModuleName, ibcexported.ModuleName, @@ -1231,6 +1248,7 @@ func initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino paramsKeeper.Subspace(icacontrollertypes.SubModuleName) paramsKeeper.Subspace(globalfee.ModuleName) paramsKeeper.Subspace(xiontypes.ModuleName) + paramsKeeper.Subspace(jwktypes.ModuleName) paramsKeeper.Subspace(wasmtypes.ModuleName) paramsKeeper.Subspace(aatypes.ModuleName) paramsKeeper.Subspace(packetforwardtypes.ModuleName) diff --git a/app/upgrades/v4/constants.go b/app/upgrades/v4/constants.go new file mode 100644 index 00000000..bee316e6 --- /dev/null +++ b/app/upgrades/v4/constants.go @@ -0,0 +1,23 @@ +package v4 + +import ( + store "github.com/cosmos/cosmos-sdk/store/types" + + "github.com/burnt-labs/xion/app/upgrades" + jwktypes "github.com/burnt-labs/xion/x/jwk/types" +) + +const ( + // UpgradeName defines the on-chain upgrade name. + UpgradeName = "v4" +) + +var Upgrade = upgrades.Upgrade{ + UpgradeName: UpgradeName, + CreateUpgradeHandler: CreateUpgradeHandler, + StoreUpgrades: store.StoreUpgrades{ + Added: []string{ + jwktypes.ModuleName, + }, + }, +} diff --git a/app/upgrades/v4/upgrades.go b/app/upgrades/v4/upgrades.go new file mode 100644 index 00000000..ce57bc03 --- /dev/null +++ b/app/upgrades/v4/upgrades.go @@ -0,0 +1,24 @@ +package v4 + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" + upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" +) + +func CreateUpgradeHandler( + mm *module.Manager, + configurator module.Configurator, +) upgradetypes.UpgradeHandler { + return func(ctx sdk.Context, plan upgradetypes.Plan, vm module.VersionMap) (module.VersionMap, error) { + ctx.Logger().Info("Starting module migrations...") + + vm, err := mm.RunMigrations(ctx, configurator, vm) + if err != nil { + return vm, err + } + + ctx.Logger().Info("Upgrade complete") + return vm, err + } +} diff --git a/go.mod b/go.mod index dded8a65..c5ea1eb2 100644 --- a/go.mod +++ b/go.mod @@ -28,7 +28,7 @@ require ( github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d google.golang.org/genproto v0.0.0-20231012201019-e917dd12ba7a // indirect google.golang.org/grpc v1.59.0 - gopkg.in/yaml.v2 v2.4.0 // indirect + gopkg.in/yaml.v2 v2.4.0 ) require ( @@ -47,6 +47,7 @@ require ( github.com/go-webauthn/webauthn v0.9.1 github.com/golang/mock v1.6.0 github.com/larry0x/abstract-account v0.0.0-20240202022305-255071ed91ee + github.com/lestrrat-go/jwx/v2 v2.0.19 github.com/osmosis-labs/fee-abstraction/v7 v7.0.0-20240302094915-ba36778366d0 github.com/spf13/viper v1.16.0 google.golang.org/genproto/googleapis/api v0.0.0-20231002182017-d307bd883b97 @@ -54,6 +55,11 @@ require ( sigs.k8s.io/yaml v1.3.0 ) +require ( + github.com/goccy/go-json v0.10.2 // indirect + github.com/lestrrat-go/backoff/v2 v2.0.8 // indirect +) + require ( cloud.google.com/go v0.110.8 // indirect cloud.google.com/go/compute v1.23.0 // indirect @@ -87,7 +93,7 @@ require ( github.com/creachadair/taskgroup v0.4.2 // indirect github.com/danieljoos/wincred v1.1.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect - github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 // indirect + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f // indirect github.com/dgraph-io/badger/v2 v2.2007.4 // indirect github.com/dgraph-io/ristretto v0.1.1 // indirect @@ -104,7 +110,7 @@ require ( github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect github.com/gogo/googleapis v1.4.1 // indirect github.com/gogo/protobuf v1.3.3 // indirect - github.com/golang-jwt/jwt/v5 v5.1.0 // indirect + github.com/golang-jwt/jwt/v5 v5.1.0 github.com/golang/glog v1.1.2 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/snappy v0.0.4 // indirect @@ -139,6 +145,12 @@ require ( github.com/klauspost/compress v1.16.7 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect + github.com/lestrrat-go/blackmagic v1.0.2 // indirect + github.com/lestrrat-go/httpcc v1.0.1 // indirect + github.com/lestrrat-go/httprc v1.0.4 // indirect + github.com/lestrrat-go/iter v1.0.2 // indirect + github.com/lestrrat-go/jwx v1.2.28 + github.com/lestrrat-go/option v1.0.1 // indirect github.com/lib/pq v1.10.9 // indirect github.com/libp2p/go-buffer-pool v0.1.0 // indirect github.com/linxGnu/grocksdb v1.8.6 // indirect @@ -165,6 +177,7 @@ require ( github.com/rs/cors v1.8.3 // indirect github.com/rs/zerolog v1.30.0 // indirect github.com/sasha-s/go-deadlock v0.3.1 // indirect + github.com/segmentio/asm v1.2.0 // indirect github.com/spf13/afero v1.9.5 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/subosito/gotenv v1.4.2 // indirect @@ -176,13 +189,13 @@ require ( github.com/zondax/ledger-go v0.14.3 // indirect go.etcd.io/bbolt v1.3.8 // indirect go.opencensus.io v0.24.0 // indirect - golang.org/x/crypto v0.15.0 // indirect + golang.org/x/crypto v0.17.0 // indirect golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb // indirect golang.org/x/net v0.18.0 // indirect golang.org/x/oauth2 v0.11.0 // indirect golang.org/x/sync v0.3.0 // indirect - golang.org/x/sys v0.14.0 // indirect - golang.org/x/term v0.14.0 // indirect + golang.org/x/sys v0.15.0 // indirect + golang.org/x/term v0.15.0 // indirect golang.org/x/text v0.14.0 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect google.golang.org/api v0.128.0 // indirect diff --git a/go.sum b/go.sum index 9717e7ed..7f973952 100644 --- a/go.sum +++ b/go.sum @@ -374,10 +374,10 @@ github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnG github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= -github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 h1:HbphB4TFFXpv7MNrT52FGrrgVXF1owhMVTHFZIlnvd4= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0/go.mod h1:DZGJHZMqrU4JJqFAWUS2UO1+lbSKsdiOoYi9Zzey7Fc= +github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5ilcvdfma9wOH6Y= +github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 h1:8UrgZ3GkP4i/CLijOJx79Yu+etlyjdBU4sfcs2WYQMs= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= 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/v2 v2.2007.4 h1:TRWBQg8UrlUhaFdco01nO2uXwzKS7zd+HVdwV/GHc4o= @@ -476,8 +476,8 @@ github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6Wezm github.com/gobwas/ws v1.0.2 h1:CoAavW/wd/kulfZmSIBt6p24n4j7tHgNVCjsfHVNUbo= github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= -github.com/goccy/go-json v0.9.11 h1:/pAaQDLHEoCq/5FFmSKBswWmK6H0e8g4159Kc/X/nqk= -github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= +github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= 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= @@ -739,6 +739,23 @@ github.com/larry0x/simapp v0.0.0-20230527213943-e57d94ffca4c h1:HxMMvjvPKv+Xttad github.com/larry0x/simapp v0.0.0-20230527213943-e57d94ffca4c/go.mod h1:dPMXlnAbUE79idlpKD0z01+vBVvTiKceZZHztq2B34c= github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= +github.com/lestrrat-go/backoff/v2 v2.0.8 h1:oNb5E5isby2kiro9AgdHLv5N5tint1AnDVVf2E2un5A= +github.com/lestrrat-go/backoff/v2 v2.0.8/go.mod h1:rHP/q/r9aT27n24JQLa7JhSQZCKBBOiM/uP402WwN8Y= +github.com/lestrrat-go/blackmagic v1.0.2 h1:Cg2gVSc9h7sz9NOByczrbUvLopQmXrfFx//N+AkAr5k= +github.com/lestrrat-go/blackmagic v1.0.2/go.mod h1:UrEqBzIR2U6CnzVyUtfM6oZNMt/7O7Vohk2J0OGSAtU= +github.com/lestrrat-go/httpcc v1.0.1 h1:ydWCStUeJLkpYyjLDHihupbn2tYmZ7m22BGkcvZZrIE= +github.com/lestrrat-go/httpcc v1.0.1/go.mod h1:qiltp3Mt56+55GPVCbTdM9MlqhvzyuL6W/NMDA8vA5E= +github.com/lestrrat-go/httprc v1.0.4 h1:bAZymwoZQb+Oq8MEbyipag7iSq6YIga8Wj6GOiJGdI8= +github.com/lestrrat-go/httprc v1.0.4/go.mod h1:mwwz3JMTPBjHUkkDv/IGJ39aALInZLrhBp0X7KGUZlo= +github.com/lestrrat-go/iter v1.0.2 h1:gMXo1q4c2pHmC3dn8LzRhJfP1ceCbgSiT9lUydIzltI= +github.com/lestrrat-go/iter v1.0.2/go.mod h1:Momfcq3AnRlRjI5b5O8/G5/BvpzrhoFTZcn06fEOPt4= +github.com/lestrrat-go/jwx v1.2.28 h1:uadI6o0WpOVrBSf498tRXZIwPpEtLnR9CvqPFXeI5sA= +github.com/lestrrat-go/jwx v1.2.28/go.mod h1:nF+91HEMh/MYFVwKPl5HHsBGMPscqbQb+8IDQdIazP8= +github.com/lestrrat-go/jwx/v2 v2.0.19 h1:ekv1qEZE6BVct89QA+pRF6+4pCpfVrOnEJnTnT4RXoY= +github.com/lestrrat-go/jwx/v2 v2.0.19/go.mod h1:l3im3coce1lL2cDeAjqmaR+Awx+X8Ih+2k8BuHNJ4CU= +github.com/lestrrat-go/option v1.0.0/go.mod h1:5ZHFbivi4xwXxhxY9XHDe2FHo6/Z7WWmtT7T5nBBp3I= +github.com/lestrrat-go/option v1.0.1 h1:oAzP2fvZGQKWkvHa1/SAcFolBEca1oN+mQ7eooNBEYU= +github.com/lestrrat-go/option v1.0.1/go.mod h1:5ZHFbivi4xwXxhxY9XHDe2FHo6/Z7WWmtT7T5nBBp3I= github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= @@ -932,6 +949,8 @@ github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0 github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71efZx0= github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/segmentio/asm v1.2.0 h1:9BQrFxC+YOHJlTlHGkTrFWf59nbL3XnCoFLTwDCI7ys= +github.com/segmentio/asm v1.2.0/go.mod h1:BqMnlJP91P8d+4ibuonYZw9mfnzI9HfxselHZr5aAcs= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= @@ -1064,8 +1083,8 @@ golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.15.0 h1:frVn1TEaCEaZcn3Tmd7Y2b5KKPaZ+I32Q2OA3kYp5TA= -golang.org/x/crypto v0.15.0/go.mod h1:4ChreQoLWfG3xLDer1WdlH5NdlQ3+mwnQq1YTKY+72g= +golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k= +golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= 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= @@ -1105,6 +1124,7 @@ 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.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc= golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1168,6 +1188,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.18.0 h1:mIYleuAkSbHh0tCv7RvjL3F6ZVbLjq4+R7zbOn3Kokg= golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -1211,6 +1233,7 @@ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/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.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1309,14 +1332,18 @@ golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20221010170243-090e33056c14/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.14.0 h1:Vz7Qs629MkJkGyHxUlRHizWJRG2j8fbQKjELVSNhy7Q= -golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= +golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= 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.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.14.0 h1:LGK9IlZ8T9jvdy6cTdfKUCltatMFOehAQo9SRC46UQ8= -golang.org/x/term v0.14.0/go.mod h1:TySc+nGkYR6qt8km8wUhuFRTVSMIX3XPR58y2lC8vww= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4= +golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= 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= @@ -1328,6 +1355,8 @@ 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.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1394,6 +1423,7 @@ golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.4/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.12.0 h1:YW6HUoUmYBpwSgyaGaZq1fHjrBjX1rlpZ54T6mu2kss= golang.org/x/tools v0.12.0/go.mod h1:Sc0INKfu04TlqNoRA1hgpFZbhYXHPr4V5DzpSBTPqQM= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/integration_tests/go.mod b/integration_tests/go.mod index 0d719adb..69c46a03 100644 --- a/integration_tests/go.mod +++ b/integration_tests/go.mod @@ -12,7 +12,7 @@ require ( github.com/golang-jwt/jwt/v4 v4.3.0 github.com/icza/dyno v0.0.0-20220812133438-f0b6f8a18845 github.com/larry0x/abstract-account v0.0.0-20240202022305-255071ed91ee - github.com/lestrrat-go/jwx v1.2.26 + github.com/lestrrat-go/jwx v1.2.28 github.com/strangelove-ventures/interchaintest/v7 v7.0.0-20230721183422-fb937bb0e165 github.com/stretchr/testify v1.8.4 go.uber.org/zap v1.24.0 @@ -150,9 +150,11 @@ require ( github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect github.com/lestrrat-go/backoff/v2 v2.0.8 // indirect - github.com/lestrrat-go/blackmagic v1.0.1 // indirect + github.com/lestrrat-go/blackmagic v1.0.2 // indirect github.com/lestrrat-go/httpcc v1.0.1 // indirect + github.com/lestrrat-go/httprc v1.0.4 // indirect github.com/lestrrat-go/iter v1.0.2 // indirect + github.com/lestrrat-go/jwx/v2 v2.0.19 // indirect github.com/lestrrat-go/option v1.0.1 // indirect github.com/lib/pq v1.10.9 // indirect github.com/libp2p/go-buffer-pool v0.1.0 // indirect @@ -201,6 +203,7 @@ require ( github.com/rs/cors v1.8.3 // indirect github.com/rs/zerolog v1.30.0 // indirect github.com/sasha-s/go-deadlock v0.3.1 // indirect + github.com/segmentio/asm v1.2.0 // indirect github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 // indirect github.com/spaolacci/murmur3 v1.1.0 // indirect github.com/spf13/afero v1.9.5 // indirect @@ -223,14 +226,14 @@ require ( go.opencensus.io v0.24.0 // indirect go.uber.org/atomic v1.10.0 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/crypto v0.15.0 // indirect + golang.org/x/crypto v0.17.0 // indirect golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb // indirect golang.org/x/mod v0.12.0 // indirect golang.org/x/net v0.18.0 // indirect golang.org/x/oauth2 v0.11.0 // indirect golang.org/x/sync v0.3.0 // indirect - golang.org/x/sys v0.14.0 // indirect - golang.org/x/term v0.14.0 // indirect + golang.org/x/sys v0.15.0 // indirect + golang.org/x/term v0.15.0 // indirect golang.org/x/text v0.14.0 // indirect golang.org/x/tools v0.12.0 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect diff --git a/integration_tests/go.sum b/integration_tests/go.sum index 99778698..e948cfbd 100644 --- a/integration_tests/go.sum +++ b/integration_tests/go.sum @@ -800,14 +800,18 @@ github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= github.com/lestrrat-go/backoff/v2 v2.0.8 h1:oNb5E5isby2kiro9AgdHLv5N5tint1AnDVVf2E2un5A= github.com/lestrrat-go/backoff/v2 v2.0.8/go.mod h1:rHP/q/r9aT27n24JQLa7JhSQZCKBBOiM/uP402WwN8Y= -github.com/lestrrat-go/blackmagic v1.0.1 h1:lS5Zts+5HIC/8og6cGHb0uCcNCa3OUt1ygh3Qz2Fe80= -github.com/lestrrat-go/blackmagic v1.0.1/go.mod h1:UrEqBzIR2U6CnzVyUtfM6oZNMt/7O7Vohk2J0OGSAtU= +github.com/lestrrat-go/blackmagic v1.0.2 h1:Cg2gVSc9h7sz9NOByczrbUvLopQmXrfFx//N+AkAr5k= +github.com/lestrrat-go/blackmagic v1.0.2/go.mod h1:UrEqBzIR2U6CnzVyUtfM6oZNMt/7O7Vohk2J0OGSAtU= github.com/lestrrat-go/httpcc v1.0.1 h1:ydWCStUeJLkpYyjLDHihupbn2tYmZ7m22BGkcvZZrIE= github.com/lestrrat-go/httpcc v1.0.1/go.mod h1:qiltp3Mt56+55GPVCbTdM9MlqhvzyuL6W/NMDA8vA5E= +github.com/lestrrat-go/httprc v1.0.4 h1:bAZymwoZQb+Oq8MEbyipag7iSq6YIga8Wj6GOiJGdI8= +github.com/lestrrat-go/httprc v1.0.4/go.mod h1:mwwz3JMTPBjHUkkDv/IGJ39aALInZLrhBp0X7KGUZlo= github.com/lestrrat-go/iter v1.0.2 h1:gMXo1q4c2pHmC3dn8LzRhJfP1ceCbgSiT9lUydIzltI= github.com/lestrrat-go/iter v1.0.2/go.mod h1:Momfcq3AnRlRjI5b5O8/G5/BvpzrhoFTZcn06fEOPt4= -github.com/lestrrat-go/jwx v1.2.26 h1:4iFo8FPRZGDYe1t19mQP0zTRqA7n8HnJ5lkIiDvJcB0= -github.com/lestrrat-go/jwx v1.2.26/go.mod h1:MaiCdGbn3/cckbOFSCluJlJMmp9dmZm5hDuIkx8ftpQ= +github.com/lestrrat-go/jwx v1.2.28 h1:uadI6o0WpOVrBSf498tRXZIwPpEtLnR9CvqPFXeI5sA= +github.com/lestrrat-go/jwx v1.2.28/go.mod h1:nF+91HEMh/MYFVwKPl5HHsBGMPscqbQb+8IDQdIazP8= +github.com/lestrrat-go/jwx/v2 v2.0.19 h1:ekv1qEZE6BVct89QA+pRF6+4pCpfVrOnEJnTnT4RXoY= +github.com/lestrrat-go/jwx/v2 v2.0.19/go.mod h1:l3im3coce1lL2cDeAjqmaR+Awx+X8Ih+2k8BuHNJ4CU= github.com/lestrrat-go/option v1.0.0/go.mod h1:5ZHFbivi4xwXxhxY9XHDe2FHo6/Z7WWmtT7T5nBBp3I= github.com/lestrrat-go/option v1.0.1 h1:oAzP2fvZGQKWkvHa1/SAcFolBEca1oN+mQ7eooNBEYU= github.com/lestrrat-go/option v1.0.1/go.mod h1:5ZHFbivi4xwXxhxY9XHDe2FHo6/Z7WWmtT7T5nBBp3I= @@ -1044,6 +1048,8 @@ github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0 github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71efZx0= github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/segmentio/asm v1.2.0 h1:9BQrFxC+YOHJlTlHGkTrFWf59nbL3XnCoFLTwDCI7ys= +github.com/segmentio/asm v1.2.0/go.mod h1:BqMnlJP91P8d+4ibuonYZw9mfnzI9HfxselHZr5aAcs= github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible h1:Bn1aCHHRnjv4Bl16T8rcaFjYSrGrIZvpiGO6P3Q4GpU= github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= @@ -1197,9 +1203,8 @@ golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= -golang.org/x/crypto v0.15.0 h1:frVn1TEaCEaZcn3Tmd7Y2b5KKPaZ+I32Q2OA3kYp5TA= -golang.org/x/crypto v0.15.0/go.mod h1:4ChreQoLWfG3xLDer1WdlH5NdlQ3+mwnQq1YTKY+72g= +golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k= +golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= 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= @@ -1451,15 +1456,15 @@ 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.14.0 h1:Vz7Qs629MkJkGyHxUlRHizWJRG2j8fbQKjELVSNhy7Q= -golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= +golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= 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.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= -golang.org/x/term v0.14.0 h1:LGK9IlZ8T9jvdy6cTdfKUCltatMFOehAQo9SRC46UQ8= -golang.org/x/term v0.14.0/go.mod h1:TySc+nGkYR6qt8km8wUhuFRTVSMIX3XPR58y2lC8vww= +golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4= +golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= 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= diff --git a/integration_tests/jwt_aa_test.go b/integration_tests/jwt_aa_test.go index 33e4ac66..6e38cc1b 100644 --- a/integration_tests/jwt_aa_test.go +++ b/integration_tests/jwt_aa_test.go @@ -14,6 +14,7 @@ import ( wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" xionapp "github.com/burnt-labs/xion/app" + jwktypes "github.com/burnt-labs/xion/x/jwk/types" xiontypes "github.com/burnt-labs/xion/x/xion/types" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" "github.com/cosmos/cosmos-sdk/types" @@ -62,15 +63,52 @@ func TestJWTAbstractAccount(t *testing.T) { &wasmtypes.MsgStoreCode{}, &aatypes.MsgUpdateParams{}, &aatypes.MsgRegisterAccount{}, + &jwktypes.MsgCreateAudience{}, ) xion.Config().EncodingConfig.InterfaceRegistry.RegisterImplementations((*authtypes.AccountI)(nil), &aatypes.AbstractAccount{}) xion.Config().EncodingConfig.InterfaceRegistry.RegisterImplementations((*cryptotypes.PubKey)(nil), &aatypes.NilPubKey{}) - // prepare the JWT key and data - fp, err := os.Getwd() + // load the test private key + privateKeyBz, err := os.ReadFile("./integration_tests/testdata/keys/jwtRS256.key") require.NoError(t, err) + privateKey, err := jwt.ParseRSAPrivateKeyFromPEM(privateKeyBz) + require.NoError(t, err) + t.Logf("private key: %v", privateKey) + + // log the test public key + publicKey, err := jwk.New(privateKey) + require.NoError(t, err) + publicKey, err = publicKey.PublicKey() + require.NoError(t, err) + publicKeyJSON, err := json.Marshal(publicKey) + require.NoError(t, err) + t.Logf("public key: %s", publicKeyJSON) + + // build the jwk key + testKey, err := jwk.ParseKey(privateKeyBz, jwk.WithPEM(true)) + require.NoError(t, err) + err = testKey.Set("alg", "RS256") + require.NoError(t, err) + testKeyPublic, err := testKey.PublicKey() + require.NoError(t, err) + testPublicKeyJSON, err := json.Marshal(testKeyPublic) + require.NoError(t, err) + + // deploy the key to the jwk module + aud := "integration-test-project" + createAudienceHash, err := ExecTx(t, ctx, xion.FullNodes[0], + xionUser.KeyName(), + "jwk", "create-audience", + aud, + string(testPublicKeyJSON), + "--chain-id", xion.Config().ChainID, + ) + require.NoError(t, err) + t.Logf("create audience hash: %s", createAudienceHash) // deploy the contract + fp, err := os.Getwd() + require.NoError(t, err) codeIDStr, err := xion.StoreContract(ctx, xionUser.FormattedAddress(), path.Join(fp, "integration_tests", "testdata", "contracts", "account_updatable-aarch64.wasm")) require.NoError(t, err) @@ -82,7 +120,6 @@ func TestJWTAbstractAccount(t *testing.T) { t.Logf("code response: %s", codeResp) sub := "integration-test-user" - aud := "integration-test-project" authenticatorDetails := map[string]interface{}{} authenticatorDetails["sub"] = sub @@ -103,21 +140,8 @@ func TestJWTAbstractAccount(t *testing.T) { predictedAddr := wasmkeeper.BuildContractAddressPredictable(codeHash, creatorAddr, []byte(salt), []byte{}) t.Logf("predicted address: %s", predictedAddr.String()) - privateKeyBz, err := os.ReadFile("./integration_tests/testdata/keys/jwtRS256.key") - require.NoError(t, err) - privateKey, err := jwt.ParseRSAPrivateKeyFromPEM(privateKeyBz) - require.NoError(t, err) - t.Logf("private key: %v", privateKey) - - publicKey, err := jwk.New(privateKey) - require.NoError(t, err) - publicKeyJSON, err := json.Marshal(publicKey) - require.NoError(t, err) - t.Logf("public key: %s", publicKeyJSON) - - // sha256 the contract addr, as it expects - signatureBz := sha256.Sum256([]byte(predictedAddr.String())) - signature := base64.StdEncoding.EncodeToString(signatureBz[:]) + //b64 the contract address to use as the transaction hash + signature := base64.StdEncoding.EncodeToString([]byte(predictedAddr.String())) now := time.Now() fiveAgo := now.Add(-time.Second * 5) @@ -257,7 +281,7 @@ func TestJWTAbstractAccount(t *testing.T) { require.NoError(t, err) // our signature is the sha256 of the signbytes - signatureBz = sha256.Sum256(signBytes) + signatureBz := sha256.Sum256(signBytes) signature = base64.StdEncoding.EncodeToString(signatureBz[:]) // we need to create a new valid token, making sure the time works diff --git a/integration_tests/testdata/contracts/account_updatable-aarch64.wasm b/integration_tests/testdata/contracts/account_updatable-aarch64.wasm index 4f26cee35e6481518b83f37cbd24ab8b05511b29..44a9e30cbe6a22f6923eefde05c314f86584229e 100644 GIT binary patch literal 362885 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

pk67(o^MpB2I|po!;z!t`}YmC>@LC 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 O;X9!+eDKS7*Z%{E+wyJz literal 380742 zcmeFa3%p&|UEjI)+UI%CIalXOSGF8G$vy`GSA#rO7$Yf;+iFXe95#WjIEFF-e>K-UjOx9|M&Xuz^OF z;pl-R)z7Xyyz%DOA4nSI%eP&7%}q&G{<`VF?MJ=p;F{~MJ972wuQ`0fb=OeenwzmQ zD%^b24cGGIUmQph)%16-f8CAO+*FkfZ#!`9E#LS}+Yi0$>enAQa>Mt$!8_SBDL!)G zT1Il@>RVp-+CvB4kgQir(+95m#&7zjm%V&mo!PSRwbvZI_WF5`n%5n8?d!hRXVbg& zbq9{T;p%IzzvhOUe7wzTUVHPAqdfgk_GlK;&}f8oE&qjfJA@=@bs7yOm}DVKLP)8t z>fLS#6o(L6p_Nk7>3~k1PJ^O$mLxoG^BNBVt#n$g26wy|TKv~elIbMn)iiCVp_4Wf z`dRQFEr)cvm4pV3Bs8@_C6skED5gN~;4dxCHd9^*?N;da8S+$jYAVn}{lAp17-)~O z(4;{;}NHqv#CW|H>xZYyc}e^xPxzw~~l z7t{+w&NN~`H~=<-q~&wXLh~Gfl^zDIjGDu9H>DZB=`Wp|~;v16x`-d#!YZ~p8fc0HwQ`@`v=b>o2>Z$9#dko0c2>9(WS+;sE? zA@8dix4rJVo0C_!58Qs>+SgHVv}w4Kyl(x~SAXw;qerf}>AIV5y!zVL-FEcm8> zxZ$Rw2abHtHP;>xuHAOS%{N`WGx^iBbIswyH(#svemG2BccA+9_Aqngz^$*l;mCp8 zuBOi;->X;tG@TT(|BhU9^yVWJPF;O9+v%FC58QNJmiDf``uYRc+;a76uet3&7P_Bj zwTra(+4RlX;mfXg<*q#+%Jy8oci-;ayNjaO^Re{GyThJ8PCt`==WG6Z`X}jUfymS8 zpQry%`nmL(^nav(ky7VBhJSSEpZ(MC_}~8btG@f{o3HzhTW+On&t+c-SKfHzjW^wN z)Acv#_nvp8KbHPz`W^o&eRp~)JCW^qFnuW9^FIE(Fa0V0e}8)TRQmJjPp2P9e>Q!X zpO2(Jlm1-#@6umL_xxJA=U37_d)|_LFx~Uf^zaALJ;%c*)5D)s=kE%8_Ix`1!}O2R zr_y(ZFQm_=KNx;DJ@hx}U+d|fJ)ckiD*em!@6vaKJ%5}2O8PtL4}?8$4BsF2yf-`$ zF1zB*Vb7bwn`qD(kg}hbin3^#slCw zP}k}3r-R@LLTrg@fa)Um-U6l5H0zN3guB}Pfnl&9ym`CtCW|>}?B)q`D9lngR zU8IMm;ebiji}>APA|23rG*u*{28Acmi1fm!$>NkvEPc(h3zMC`blkn16%$4aTp-Lg zwR4KQ3zLfhix69Avu)gB>5ITzc``@sy)0NVYWI6R4fNJg+dI?aE#v06S8UZ@>lI&6 z>-}}SMTOxgSf%M+-tzwPgWUbJwVKn+fIS-D8Bm3v-T1T5zPT_Njha2RkT;9JOK%-_ zXpu@0}*kwrjO&iHVxQq zpLli9!s~an{RI{(((H>=e2dCDy1QevPM6z9G(8uNG7Llaau8K3ZED0(G~+1hjm1YT zYvqm+G)QeWH7{#d*uALD=}DWNNt>HgK?AHNZO}=2wzg2N68M|6q=PBJ_`K0{wkw}D z08iU8Y7r>VQud3K`z9N)J#OtC4EmF$WKWl^4I_fEmVIBinentOjy1Dy(6a^7qa_w- z(48Qz2ILFEicDUwK&feiDdmEc^W8Vd)Nyw&n4Pg>Smffw-KUcx8@{%`!H}^kzq?jm z4yS5gOErLiE?V%GAUjzcTNt*(QcGh4R7j^r>}pHGQ}TBA|?nabBo&X}s? zj4WTbJ-h~Z^|ptrgilvdP5TJu@KZ($ca7N@ny1yBdItygH&H@>)Q^|Na zT-v2WtzJjGxg6Jcy`()K*?2=G?E!wtZX0US9`mkAP4L+4TL1_XmLSK)1vw331Tr^D zQ4SHzMLAI-Z{U>Cg0(h)3{%R29fWFN%_O4y(M0}eO8&^A>=7skYmq(jP{|zJ&67Do zC3EoP;!%eNkvWiSE19FM+9q?rphO2pov=$~TgHv?lnWYDk_6zw9TOSaBK{qC-f(2M zCTs*?r%b~ z`>4IsqTJ<$O)55d!8paD*Nsy^tSU}XzTQy9JCG~5+%6cIc%dPZ1iXzL^@&7E42alFmMzR zO8YfqaW4_%vRxrd$#@K5;9gy6UuDY^c4DJ5#?wdWWJ@rLuqCowZfh(Tn9FF_DQIwFnE*@*fymL?^v#xrcZ8lm(y z^-$+F%^J69irX}6HJf=eavQrdZqsyb)2z5nv*I?*3Af>PF}Gq%Uxr z7r4!`y3GsRrZOFV*>#)0uiQpnz!!9z7q|^3%gT}#bsPB;b1Z7|fZFwwGokNZ)@_Hz zEsSX`RK;;WPu+#xLdhF-u(h44`}z8n6L#VzS^7=}^2MIMe&y-wFX`!PxTg<0cxiR( zVt!oc;+q-=x4Z?jDW!4*wawy|_A#F{D)*k6Q&W|DFO_l5U3;nd=wy47Tf?kX?P$nr zm$tW5hN`SMi65^q+$Ib9$&|ja)VJzhy9d&7ukzaY%kISCZ8NLMiGwyzBVVURPMERZ zyg2VpUmDLr=!T576ayl`;(grF96QDlmZ#{dN}8RBffyH=z*B02^0-efiT3i+Jx0G%_r*-?o4*vV^5-Fe@Ie zn6DYmPGG&tif823D(;`}G&(`G!{&Cgz4C6*e17%V^nG+9SJ-Mz$r>9#D|w`n_u_dw zX7@HCx!&HwPc8hYXYnkC?i2~#HGLUA_3L42UUAIvR(5cUddPCZAP&1N&nBiPJ$K!C zb$W5%9aRt8P#DIJ54rQsJXQ=X1w`_dv1abPQzH@U zsz%Ig8DVc;^4N%x1{#UZJ6{K$)tz@IwGMfZ^DafraOd6fZ~9m?DD8wq^phBd;lWYL z9w!n)Zd;1d(jk+|{+5au9~!rD2E#`tp0TODIWE865v-hfQ=JQ{`CxmvoeOr?(&fr8 z7T|CWfzaBx6OxSv4FC&etE_^eu%hDqQykPTF4#B0VVPC?(Fu4xb8XCbYyUv=+39`aBSC~}AjJ&xm z;c%@pnu!);e-Hl}Gc=FwWdffmd^XcDpzMr8gz4uW(rNZXv~#-KJAUL6}fReB@y z7RJ)C$QCzS*#%tY-~n7Vvu0d!Tn=0=7~$D9w+)~k5?4mqCV5lkdd8ByohY;1DypB9QcU1ew1^ ztLAjg7{8E*?Jpn+LJ7DSBgH7H0>y}|;u(ymg3y#e+;w3QUa5(Hp$}J!;@{kaFV4|`M|brJQb|3sOO8Dn+cJVp zc1@;9T>_y$2_zOJgkYH!r%iIZSd{*Bs(?YB<}e#LRSm^x>#=k^9i!%|YR>toXS+<{ zTW74f9cu23F%FC0`b_EpTu-GVd{%SeQwWAdq~bn+swJzWf#s7aPJGHH0yCIV@!3QJ zEyw>q*Tz4vE*?YXEK(tP1ex_y{H-LOZ1{fTTyesPcQKsINAF`flj5$1cF1YvW8A4u zo}_s1Ao4&SJ?@MuhMH!l;pr!hV}BHmChGn1bTq?U#WZ3&^XIDgCGXdSIENb0=}FFA zEUdyUC9J~8!V>>jUisP6(lbq*g$c0d$=!P{aVsUviVq18o#B25oF*#yg4wV?wMfMi zerthu028-h6hFlL#d69i!<(~PcnE8ftR?2-@xS&0d{Qz7VK4XdP@>r39oZ`d7_1xy{){zJ#6Iyjh*8% zvm?v7z?3iGf@^dW7ijz}i~-J_D;fyT57D#e7r|)-6DleS@~e zfXatkiS==9U)w)N%3mO6Z}RMCwC+7b{*CnLQG8JuxL;4CCCtJBO;C=~Kue+rjw=hp zZkdl6u;Qa`SY(05jRL-RFl*6Js$LFr{!S96FWN~81p}e@8v#|K)zUl3r5tZ%K5*1) zOaVhFRzTnR)rgaVUpwBXxC%zo-Jn}+gbHT|AZ!NX2tJp?gtQs{mwRkCN zNTa6dl9lXLgAA%tiyq@SvW2a7-0`MaXhWT;A@Ni5#c{edwW#ea(kWd#!SL#It)@Svt`W6X zYf1r$rV{-c^EqX7!kUvx^g#mz@Se8dzPa#(ba9s8@n}`xktt_VZa_-*ndx#69^Fd& zLFUu$le&YBqmaf5jf#l%`)M+&fJ<)JWYqDcR(sR)w5bn9ZOVjy+v5a=CAVUV*~_k| zMG0E0L_YMuLEklO6xyoUKL!;hOwY))1u9&+Bip2igIB|rxLgT>ak)x1jV;-0Ml<@g9}$|%bx>pquZKRz zum=~Yd9;(buqaRyf|wxQ@*+nDBt9ESHko=WzmTctxEM(`>H7kHu>_mAK%kMuMUvYS z<)x{3H5<5e7XyV4T%e#Sy>6gTPwLR4UBFTaq|%};t>kdx_>5ZlJM;(&;Cu%_E=Lmv z$_R~cHH9L`)IS;!RgnZa*I>t8#CjFU2n7jYmo}qYi;`lX0{v6rc?1w#cxbx8i7gB@ z9JL_MsCd~SvEicoEoGpih2W&apV7l@hos8Kh_HcSw?e_TUBR=LzX~lg(M+V+=k<^>`jv`q#nz5Gk$TA`*XoyV7$LOY=*In%)}v07Y`cOnHHu5F5Lp3s>Irfu zAv+J3Bplv|_r871ntCD&jk{7E1_C%9nh3zlV-aPz7r<5g7xE>OiW7iwq{9zHa2d$p zBjvdiW^#dv8@T#`wgit4VpzJTr9$&=?-TN8=O|mH1{oGcGS{P(f3@1^OHQn ztOPPrWC#rDMM+W|`>E3j*UQfzW$bp!8C3Be3Nd*7TBcH>n~9jB^gfk#y;Rt=(J?y% z90-t%q~Yrww7)bWPH$!$(hGV>f7$&08fAZ3y}w4;UsmsrIaU1;U)_-PfVBcMMWRrg zG%Z7MqPi_`%2wpp(e{>K5ylxq@K#t8fzVb$l3%$Jz(1}8#tf}QLlPr1WEsCr$jA29 zZJx;#BmL6VNE@aNSi{tSZKZT_XR=Zpy%L$wN(qZ?BJZCHO`pg~>AM#8iXcfJ<$*hX2# z9@qAwkFEQ-{baK52p5dGM~I1aB79DJpC;vlZb52bc%P zLTLaQ6Kf)B78nSHF7tzi)vQ{|)u;(<4KaF3M!s`-UbH!kK+O^|??dEPtr9wz)`e+X zfRA$qSVbtX)|PC*$%EOfMVJ{AJ*nXhGz{K)!>ysk5d(3ZM%3P+&Ey@(B*%b$Y%!W? z86WNpkrv8f6*^Tyi!d3fXEr183#hF6(Z&%uu~E|6j)bithDKziTVsuHCR(zHEQ-U_ zghp*unhWn{-}Jd{Pj->Kp-Evo4v58i6-Du#DT&AjiKUPg_HCt6zA|nj-Cv>Og-kf& z!Y-Xh;IJCq?$TWJ%4NKMN%GzN0IOfaq$LT3;^WD|;az(1mT_irvTPaNJ}Ua)Q03Wc zFnv61TtIIEUtTr%Dgc((CMzX~+bSM6|4t~5@j}Db<(SpO`2b|JFn)4{+eKltsRYVp zMrcMytN%J3d{K3xhUfg?i$;#ZU@$Ds>{p=qMnmmHo~E*h4}-jm_%J&- zGs;xFQCu>EOG;}5*$$533dNhs(m{rYs9*+(2`OUK%aVUBPf~C$(>9;l>J>2 z(`n7S)VHuQoAk{u>sls*N!Q^;ylPz=oR@ESjqLT8!%6~=ptx3G^WqYKPAfng5rfUL zTV%R}fY@eTP0RuC$v+uGR2#)F{mDmU0De&}@5DPHU6=x}Zy3w|RS8i>XT)^56Q8rY zX!3TH6!Gv_@KP2rYe`kb@Noey+wKUx;a>_tn~;lVYh3+bKOcy?R>(<$>lm7BNs{8( z??0Vz{nml)Ghyhl4jCx71^j-K5Me^A6HcSo{!B_@grEgv5N&BBFd)2l9Jly;1^4FOQg7~+2$aN8Q$5v8}$^EFi{&0+F&7= z<>1s_j>;ugi^EwVFHkhNxeWF3w++e2jyjLJYZ>Z*y|m0jGL%*%yk{7bQUc;+Z$Sxf z$}+?@fR5VnCuo^d%BCqSE+InE{heh-V-T2S#0Cj7v;_{bX{jX-naf10c)`IjZhC32 zjVOBBqRyHb%~a+0@mfuUqCs=kN8+s^8GCUXpoV2Er%`8d>Om|B4yTKJ@nMv*o=b*; zl<-Mw@JSim2veQllbHqqpjrME3?Lf8NW_HEM^jbLRW~NULN=TqzURv=D$N+pD;^Vh zn=xs=B6%PGqDY=K+^9EPQM{_*v!-|td{>yQ(&cOfeKrc~Ym{PRMJc%J;1w#nLK#f5-dInW(}_xq zcOrC?*^l-uWsb7SIJJ|v(>e{%y18(@0v)w35VFHG+%R`&iq1TFDz&#!eBHtEl-{~o zE(p%@UzFVVigdHr!_|ozuIf6(ECNnIi%brUi_*<8YmTbfR)IR|PLsE-p^b!-NM&Tr znYwUM)*J-VGHZ^HZ!}xr6~QR{q&5Xh6O-I5ZMYM8UH+f!;fjb5St15ve(Ib#!OBzT zY&EAibP;+sHy+C75=6wK`Dkzs{!SUAyeE~9#ywmX7Ez(2?AWFiE7-*RGaR-0FY4t( z58A+lqvlk_>^91m(~?`ZX%Q7I^UBJ!gAu7`CP6M;cJrxVa5j?*TpLjNjYsK>{64;Mm6B`=pPRPIe9mdbWP6SRD;T0UiQ60n%L@ZlI4 z`)KrsJwo&b0S!yFv|hfOI2c;8kWO#Og79dGkcGKGOXl`}#NsCwjb}!!@M0WKt(B=b zo(-`TCNme7X~q0VEM076qh9r~5Jz%h!YoLMqb<9rf2+xWV@(U2@S4+#@m;S!Gx{T! zI0#;@tD9TTQR_3KDagMEMmu&8?W<@5VF+$AosB2jCgKJZr)a7|{j2gaB4~ z-(a2LRpr88fCz)hx|es8^*01qZoYtY;e6%$$Jrj-_mBG%{3;%~`?P!UUrK%t@hFSh z(32`n&r3)|BN?W8QYGqnG3YMwXK9cV%CmT}z=LwJu=dFnUE?wDu+#Jz6h=9W1w%GU~P}_^3r>Z2NhaaP&zad z;v?yaxQkimJY2*Bz=x^;%Sl6&0yK9oIW}D}wfP=&7}hBp=y5iERy;c20k6~}cUZoq z6&smZy%A{mj8J{$(X3xnL+dRRWyKL8`>ZxCMie}x;lnodCE^Mm0eK}$uhx{J)I03! zDz@OHDmtKL@O_Ypo)a>{Y45SC|g@nr_3+nwh&@>#vNQ>xOeRH;n9 z3J*7+0DfPOrk)j}XjM;bJMKE#el67p{{}dC`m&WyPPctTtqDWqfYAxZ#fRIXjYTnI1x^mCoiAu%bp(wMC!w=obmT z*TaA<|7fH5eZ!iD&>><@LyHcYHi|!I@f}UkQRucINJSKFShRklmT`s{jtRmw|B0E{Q9MKEFoV;lBi!T8(h zw1jcuFvfli0tiq1P8Z=%Y!X~H?PN3n0Xk9ocN_LLpK~eLtbCQRDoXs^&6D`e^<4U* zw?a09Acaw5Zrm;9)t(0DHBr zaZMBedxu!+s07$gC@1fnM`*Qv#_($8<0OX@szId;@GF=y&>nuRMt?eW!Zby3R0cNG zRROhXih%S0nUG>-^Z>6NQ!-j@#%ifDT<*orWipCgk#)NIjRcK6ED3s1OLnwNRxxQ5 zZS(+M_m-?C(idF8^Z*8H5Km+6D12O3_DtDEU3m9Z?2gyD z@UF`H2IS902GFCW7Ou)5>zF-RFD=-lPPJYJpLG>{s#)$EG&R0ycacYF`TdfXyGYB( zj;J3g)#8(n$OS{jE=BD2#PG|(&F@IrzZNY7Yg{e_N6HKpVyl&OE)8NKrWt-r8m!?5 z4H~8`zz?<{!s?=S3}YvFR>Rm5&lX`UtyJqJHI(s}QZ<6tz@=&~5~5M$s{)g%+1wlC z-SV*34dRX@p{f{SP#C&o#vt0y--%Ss9@~<+R82Q4H-b2`S|dg%2>e;OA;!FhhNeA^ zN5b&@$;62w46kisuxbgznrfmzTZCcmt3X?XVStU4s7O}{!-7*K5Cjtl2v>1|0C`0M zfq~5hf{M^gL}yT?6rH_g)@N$e3cCXSIF3=2xLiaO-!J5@**)awZ^-VpXvprtWOvcuiR>OsW)B4_K@^IDDFO3?bC4vp=rfY!Ij(4uyd|(e zlGg}blDDzCBo9nOV_uL#Pbxf0fId0HKsO zCA~y>^Sm#Syy?+qZb7cgn{1fpDsRG@mXtTyzAkU-P{vocygB&N%9}c-hP*j2xyR&9 zfa;`su{NB!#>0(wo23q_Y}RM4NS(^@u$u9HvSXkZbLfawvk@ zd>jUWn40T@I&j4JYjSAc;*t8SaooJ$J85q9nQyIMybK_A5!W?~yl_mQU1P3qVUR65_Ox6Sw3gJM3QLTOj(yiVKL8D5=G)%QW9mwUXVm#gXfK2 zkVF>RU5jh{B;5h)g)M<0CMfLWJB&4BsbeDFw|OG%=VLr>U&P@hc=#>6T%1V261y81j;xNg5I(bEZl@$T^g`yt%uxBg@%5cx}pD zgZh4id2SlJcBi9R*#{`$b7QNpRjua4M5!N zyLIFTwWzcP*Qwpf=p6pv$p1PbFbx27@}UY6DyQslUGA@xiTMFS@&wv^EI`OoEb`7) z$WWLUAf%ePoM1pBKuj?5X9^B7$FplGqj9#tS)9_tHzi| z8}OkxsH#{V(ggxF|0eD<5d);X8gs7NzKOe1RF8d{md4Ad9s{~Z_Vi>~g{IGT4cp_AoBkRK8*1VrhF3Ns#jD&V$7d zDCkGY_z0P>g14(c-WMW=%Eq4aidt+(&Aq`6x-d!DBLuJ8mcbWiDS!1vPdpllhEWyZ z^GJLc%oT^C&Oydhftg!52{w%W^cZrWG4DFWAEHX-`zOtrg=rik3}vV7H}eXTQe+Hf zuJ9c|&iWm$8uOUOvN0u=-06uw?zLE%`Y3#WW_hNGV^G%>24vQJhLPN;9Bd3!(UTUy zaJ6BGivk<$oTtT-5*Bl{o4FAIE~N&2Ah>HQzGg@A52{^QE~~j0uGc;+8xM(vpa1}Q z7l6TBI6M+rA%st>1#*eZfsi`N5s`sr9I8tILSMQijJFIiY3XOJWWBE);2gnF4a9=ZP6nE3p z?Mg~xtFF2>NlVJ%DLOLK6l|h8p3h8k>NStr`D8&8VSY=tZHGo@AN-9l$_&UnwN)h{ zACR&G%7`)A>|*Bj?JLHJEFnb;A|ernP#Y?-gacx@L&s{4Ee|$*Gq?C9)$)WghZg;W zaznt^6m+c6&)Tvq!aEJx5V~2MNl1tzQETY@Q_>e_iKl1;=F>&8(j5s(Nd*C`k!XgH z_C8*l9P-TBABt=)^#>uM;hY_iG%6?QKJV7g5~~N{W#Z>15gBZumOoC+WXMvk$+T=T ztPm=MqQxNiAd`qGYZ&u5fd%RgHg2#;lv)OzMAddSo%Ze3!RTRmymX#C&I~!b6KBX>mu;s+jGmXTgsj0>sX#R< zSNV4XO&`@HPa{B@EICd=TrZ6%pLZ*~ak;N-<$xf+P zeTEP0p1O0~e2@b;&E5GuS85|eMjiRe(XkvfZZ4t))izs-HK`)&`TPLGNb$VxH3~h2>((GgZ8Ce)!E0$V~OgX`rh>SB;b|&rXmEMl%^yaVVDs&F%>r1u> zkGzSADNpI%fiD6Fnu=edkn6WCzYN}jtwOB@Uxj%sJkRU!xQ4stby(r;uZne82X9Hb zaXY+C$iJ?(62*^}8)W%)uojweKh#=?`(e_;^SllZYiMg;hZWwA>+nn`Z7WmqvC61} z9xySKl_Y6$6)V_TF{PK!&o#MCb+MlD&c$Xom@^q+n|&=qrE_Ap(Rjc%K$J35jvj3p zH{meR1m*{@qCrN{q|uzCTl)rthR>bH^yRTttk@QLs&u1lk)|1Knr5^i?>(YpQ<9Sm zEXsG;7`{vbjODr{cPc3g8O71Dq`>k8SIXlXvV$P1QqL?T`=#=c@L!Z^$@it>`TKL~ z$KE$(@H!4fr9E;##1l}MFHI6fN56N3`rm1s035XO6BQ6 zUFbK(e!tcZQ!IZ`$B|b`0|aN1vlx>68GEd}qGd&I^EzZar1({uupIT4ijQrvB_U7g zmDHQ$Dg90Zwja>ZXQnVee5acq$m(*Lcfo>4in?+~vbVyv5{&x|hh1F<%Z?H?i)2+! z$_CCjz!Gio@A0F{Vuy8Z+%u0*2eMw7w#L<+AafhC?+<<@d|b+(*(@4|rkkOWo{hVt_^mgBv1O)l+(~JHuz?M! z_*))u-51>@LFMAYZ~T7adlQHYuG*zq zhSkKD4g6*WkO1q}Rx6uiv31!sE|LZadBc7{_g<#G`;|(r+0>SA7Vj=6`NgJ_wDz+3 z?JdGk%W}7BlKlVj#itr|+*}eXA%@Y)lA|8;#oCuS}%^Zr9M<3IpNJGlCrm^z71fiq}vCBl8fz${K8jSm1NM37j5lq+S zxBdzwERE?~-ysZp9@DqZYi|)W)`nqUL7oJTwfQhcrcYz6ifH9`F^Y%9m15uothvC* z3ZDImN_)`0g*@pmcmT6l6Hn5B_%24!moegJG3wnJS5kLby}S85Y0}-I^;jErzGY23 zNo=OF9CEh;S6XuCv)|*+N4B(&WMBw2e$)uAAg;oZP)Lji|1Kyk@D4iSG+FWAN+Jq> zD_OFeR3s=fZ103+mo3ARQddn_cEd)k2?aNKT#7egAT>S%*@=8c9LG#1PpRiXj_iu3 z@XE3#lNH{MjOg(djniua|5`zxiXx&y-fe07SAo1lD@~ZU7ubT_NN3ZRZcwq*C%U2I zCb%`LyDSt~wKjzpWrI{Ln(MZ4hH452fw7d|2Up%2wB3fcxMkd_e;jfjT4}?=51OXp zTJVD1W^U!r$*r?U+qD}Trh3%?4M(Esg;dU8=rJ}Gw zO!X~iWU8<9a_PJ+bl#TDrB&*@&{G>{VQ!$x-*Nlm(}5`TuLaT>{fKL%fCx6K0p)dTf?BoY8aO}zG~GL z>&N~@;EFn<65|w3SP$7PWc6N)&g_nH4as)b7S!{pJkjW0?ca%+a-Sj7F=FOQ^qF-~ zGYfJ%wN~Su7|-P2+9@0ByO6SB1S%<8ADMN2zNQ7#4GV*UPMSv5+6p&WnyNtn8zcJ$ zX47b4+tT;Uqi=4_lWi~3x3+J!lSGMR!;1v7lm5w{!Bn`j48-#7{XjbImS4RMh1c-S zNfnEv5+V_QKubo$PFN(BMNqw)R4Qux{?s?ueU{F2Q7ih^kQo@g6>?$d6FDj*Y{)*7 zI<=datljZY{em%AZNb`WZ<*9)CtGct@xGUqsyS8FGy|pgYlq)kyOZ9C6Q~MOEXj!z zT_$Idi4a|nLTr>oS3Ja%Fb%Hs!|y9m-Eyh)^*f`w&WMzR$sa{{&s(9I9`0DF!T2g= z_(`-HOU+YB-yK5LJogP+!Z2d4L||q7dr;)KgO!o&oPCexTB@xH%xY^z$CI^^FL1DY z12Tp#S}stfT&~eTu>n4&pU{{ZjLGseX_W6#i6X%^EHPO_Nl_zjzlM@_(tR;Xx)pIA z%K#h`mSHwh3%7}!gI*C0?JMdoGg*EVzTiZs57$yHA&EUecEtNqh$&RDmW@nNh@b{s7@qs|~79Bq&VNlHe?;ezx;N>V{A` z(|a#7J|@8Uh$f#Ddm!bQy=7lAdB@mn`GqiIS1w7eqY`WwUMO@Sd@ecQxB{Y!n}KORD4+1@5$c^|he0*Gm9Oh1V)_5Lx-aHaQRrHR%>QiIwO>`s}P{7qHZ z%(gP*nsLcHC*MvmR$lIJ1+&GE0d}Flgt5fXms~aU*-pVRF98sWtp-O>1I{jpnxwwj zKN1-f2O>r6+nw9UxujpxvnB>h7JM#j)%Urz^kK8&&G>+mPXXJnxfTTIP4LW8L?TSc zqeaYl!eoJoeVQT)P2y1kyh}RUTTx9z$smvn^Pa z;(>ckC&ObIEQzm-ev9f~nDj}G!}*q~sT36~J+hz;L?3&XNUz4xBj%jJeUKK9R1I2} z{V}o~sBAH7P%2nPnlmUyEux(_FG*4^SPM~kJ$~rNu+7MGyNf*_sFdg+upp$kp2mm8 zv~MOK7SoP1&sFxJj*|zs{E~i=U&Z%?v9o za^^m?yRF>icGuu;>!eX-g-^+$O7vh8TEe&ubF_aEbhO0PCY7(sx2t%E-3itWUgex> z5{L^Eq9h7UfYuL#C3lDC zZ*9Pz71u`iKK$kI9Oe(GHGe5AasI`u;@@Jxseyu>W}1>x*`5^$e&o_HsKTB62o6*v z4F5fpD59#uH^J7tYmuEoKkisLcBMY|V{x83xKli67A=+<9c=i+sl|N`Qjn66-c~%_ zGgi#$7=qN%mgKySTIMGaX8Rhr_K|zZcE@9A0Th;(4;EXsos5dHa|xbh2=W5SR<>Hz z@#3nn%Aq2=LR|yKYb4>;@#S0M`ZS~0Us*TZ;nlbC7SrR z&m^y~fkTVf5FH0ZZ$bndz6BH!QZd%1*xmTP@$kWXxV!aT=M%n)$FUi*2INeeWYqNi z4H>cF`nQl8%YyB%0Z;;sF#!mO8kvH2z)Jq=K4#Y#e$W>nKdNPG?|=|viZ-Vc8+NM?$?|JeNA#ei1nz3iZDT^PE!c}nnsO4h($C_>ec z$e}oHpviCPBdfjxim&<(3}DrF;H|5@BY?z*OsiIFGtyo zne5o;G;r7gyC3RfUoDfq1e8`j1VmzT%4NM=jeJoJL{G`wf~xoi>k00|Lcud1x$k_( z{YFJHB+xRVgM>Rd?u%DzrV;n;b2%I>5&E|x`fC>oCALLM)ETeR_M$BSWVboZ^mc^e zjtrNUoDHPg5-t`f0G@E3Kladp=Z}{G9!O$1dogu(is}x3*0vIy54dK6tGcUJ!Wy%c zSPWOlfvtwE{wniaa`l05JPwf=s{zfODpf1f6u=`@YE~;FMPS~_V9}VjGEk*YXj!t7 zDzPLJsqDY{$;VPrFAx$J{iOPiHlS;cc7(%h2WTHNH z2E!;8cN27~UGuQnnt><8tGb_7I18~f2Wa&@LhUvNDeT~_H5g5Q2kH@m5yhu1{g3e z0_JVR9(?p{8*z-Cg1)Jt@j%NqUn>n%&H>H@=wo-{n$csGUlK~QwR;g-Y()_Bi%AukqF^LW#n0H#^ z@?xpS9K3(G=G!tc$zJhptGXs1>4D@U4Yyu5%18EC@=-3hLCo621GduRc0NTnOm|8I zb1Kp}Gu%(*Qx&&qi`H6c+qg}UDw)0Z)|7L+wc=-eB?9b=dVg=-*77a5dEolbawUoi=p=T?nV)(9e z1g2elTpZy`Ca1dm?SJzQ5SPe3`6QgNf?t&QXhfJL8Dh3JR=kq%`j~1A!1;!e5mj44 zf>eO?Y7(R!K(JB#mfGx#;;A|IRH^5v?>ynV266f+)Uuke*%aSNdj2e`f0sEX^k zSPg|tYSKhxHTGDn28mz$Qw%m4uhaIFw)v>}b-Bye(T<o$I{Y=bW) zAtn1}Fx`D+Ra$bh01}EHF=(94W-ytXp3ahFuVrrKu#8wdM;Om*V+k0WA%8VSfzGfh zK|#3T9ri_KBXQ$Hy#!oe@QxJsd9}0>&x;vh@Z~Zi=rk{KiAgA$pd^&O>#Wa%gz~X@ zI_vXbNkeBX^_=6P{0)%ZR99%42@Wf^cQfY$il)8na>akD(y3bdK%>>KO zNcZ`6I&@!;A(t%ogzg(tsnPu@r~9i^HM&2)sv4!YLq$V$pAMPjoz|s@wt5uZkJFb4 z)?SHpUrHbz!?FoeG4xz?pF*SiWfPI^+heEurOaoUps}S$;^`dytRf)7Gky z67jLKXK3T#(Qp5(hv=4rY)@r$k!6`X<9-)v(2{n%w~yv z(?UKgonC-^EpJEeoI?vA1YlEnm z;+atthdhcdBXXzG&hX#aep5b~RRM4QfoLk9zw7IOmk-x7;NWXQMmKjE?RUsyQM$|c z$z&v>YeaWw-J#WtMB|7uI!jKe>_BvhjNWisy-HQ1)$^;W9eO)dbOd-hWINqyjgMlF zc{o`7f&kw!z}qX{t-H&}-4mNITCL}z)f!*DiAbyM@d8?%D&BNHu_lR6@iBGUio{w4 zPpY69iM0xTLj`RWu&q__SoubjYqV_99Pj(ZZL$)$BC)n*a|h3Y{SpPC(miU)WAKe? zTmGzhpeTv71~wyFV`njyG>3KKw_HT4z5~%;^&J*s)pr2EYVTBeZcbqgkKSJsJ&0rB zqzT7NvP36M?C|97XP*AT+u!*^pZvMcahL)ZCWk6^f9}8h!ux;y1NVRE4@r%HpT9f{ zp~F+8`b&%ZjEI+rBHpZ?K%{#Bc>C5<%&Pfn^rV|WdDIrK!R%*i)9gB?s`bEI}gWb+uenxRgYe6#`NIW7ASj&AT$?uhc<>6wXaZg~bw8EvNC=a@DkY1?Bkd zrMcPgEn@Av`WcAzpJNe}IHa(x4{NAbG{)Jj%LI9f$9kK-$s}IF%uzw%{G@@B) zmzfSE#8s)93CFd4V}dsKc6m3JM28VOux>T|bTphNrcFI39>Hm0#Pip>$( z*?u%|frgVY5c;wWr)^5$B-vN`0G5A&hdQ~|9tpMN~B!nDR0D@Hkq7;}FmO&`0={PEc5Z2%oDNzjK%&g})Zi65OrjN5A&{qdvw*LtwzfQ$Y){pPDFvZn@ib7A$ZLO? z7*HC%nVMc#2UG?+@M@{=>_C1*(cp>r;wPnTQE}by9;pavP0(Q~$}0f!*p4rUd4bkN z5y7@u=K?X-l9Xyd^Mu7znZ*fu z@8iA)5pKqLrrHVgpI}D2n?)G(JA|^n-O26U;U!}bN-*KzXQUCvv%r`*YF?3#LuXq= znfNn#rC*%pm1g-0HU`M9UT*17e9Ob4QUs-E6}}f6;sjx;5IRtEc(?Q+TOIyFZ&)4F z5Z|$=GRm!~-u`*HM9pG@EfI-1jI`SV8x^XN7pmYrwSsR_!Fy{3m#RQ9(Y6h97K<^#A-EItJ=~5!?Xw^Qj9rQU3|F;r zf!iBX3bhM>(pKJ zSe;XIucF+z#;O*03iMHQH;p|Sj^obulD$E>Mc}Y*_8T#BCcRUsLUL%_^sIWQF1#lTl|Dkxs9}Uv1Z;k=1o5!E6QSiOKt*Ta zuA;N#Q~HySh&H|`u;)u!+aNx&EN9&FNiCn7pO9Ll+(>Fk`nUTJp7^cz|Kw-i^`U1Y zb?sNg)eeZv8f|UvzDLB~Xe+1IL|dCR+KO7n+6sA$upA1HvRqqKT@$MLV`d<%2Mxk!6!<0jS%WkZmTe z6yB>jE6OY?16B-wBPRFmO`+%EeJ8)lC6ra=4;^6u{VWPv@FI z@qkZ*N>i_Z zwk&=TIS-`!hM_UV>gA}g%4m5JLcPd*oGqxk>kdpJ3aFW4SqJ)kj z?58|GSp2piA@~E|;VWFa$q-Z!eh@5_)s;B7Hn_+uJ4;y|VPrE|<$1vZ@)79r8O4Ng zJTe6z#ErRWI$KugKb674`UtMv5jKlE*ftn-iUDD?)5T{6di!+Y=CRI?8Cl5J!4hU# zfLDBBVB`VGS^(F_2lKxE7+X`Alt(r!E+puocIYXoYgva5UOt&o#{;CAyL{8y+9Q6NYyDBS2vk||wUgh-Q)DZh z{6?J0if@|yMw+rX#Zs6O5L}pIGzzN7qH3dBr39#83N~?;|jmd6tXME)TnIX17 zQobJ5^vO&MLIX9KDW_Tbq(Qgnz6!MK7N1IVtYwOQOEJH00?D==@i5&szYn9D7iiFg zXysF)A9`)-CK~X!bXWzLz$uC;y<5F!k1Jpo9Msnk>_f#eL>6zJsI1-MZ;`&D*q$lW zjU6=x4Ky`wr3z$z(i^oFfM2D4xW1b4NVVk@nX#+gCnSXhsk6qqBm^NF`GFe!7#=K) zUYV9l2RaPKqL{*CD--1{)9!3#ssad-txQ#bnrbT(3v5xYvPHSddh+4Nr!L()GC~`% zRVJk9fiZE``jlXkB(~&eORXC6&+0o1xt-=n9tT83A{J@v^INl zX`o)g?0h+0Fi*8T<`3$rEmSpXc~?|aA9V^I$&=1le8>#-iFxZEURe070^xI5_}$g2 zJm&@ZbR)DqRfu#=)6+a-J(!3v!d8u8wUS51Ev3ShhSid94|^?JuVN!9_LSlqEVe-h z8$yvHiTd7z1P75_S$IcYh36wXE{o7I>SXLwi5@1k_sTT!4fsMnRsOQ}8BG(xgs51~ zRczXwd>cUySu&o|&*2?o;^wY8fZm#MFbE>ktV4?CZ<1XGR$%mZH)qXp7(p6)IRpZ_chQqG$;fe z>!Ekm2ksadKmdbrqLz-9cjy2eMRr^Ngj3a@F;~bOE%rq0Jd`N6Gq&Vx&;mdgbT*ns zWIKb)m5Pw39Y)k3k4aQY zj-%VJhtj-8ciRIWg<++}G87ON_*YUfFaf8-zt$ZJyv1y7Wn>6lW*1`YF3lQm=-vDE z;l+2g$-4qdoz4u^h98#z$LN#cr_?Tso%-E2XrA9ag*k;5hvOMtHVtPhbmQk!X@O6g zE{pr2l3DQ#R#{n8m@422pW(#v2~7jjW$`Qbp2nWYj}zI!;iW=Lgf}%_+#f2rxOmb^ zPSi>sw~~8mC8w?ASgqtyeBSg~JWK!5F?CO$2CSziWm>YQ((!l)xf=5EgN)sd)FQ#= zNmWm>zr6qDEO=Lz0%m(U9j({(v2?USO+B8D#`^svUt!Vpqbc7Lq5R|N=xZ22gj_x* zmPt!8GaqsWHhn><8n$5wt_@1!pjG07-VyF_kTETuF9B$#L`&e;=LG1S9}lGfT7BPM z3^?pAfS&*;=R1GOqR)gc4DqE!$}dp)I({$&-M*MxjA`SS=*PKg=Z=xqk9lET;^(&U zOW~s2>>M>fD)~d*->N(WKPfu{kR7#obTX8#QXH3oBnc%bR=R4Z$Lwz0DV@1a><1-X z)5&t~NN3KIi^*L^rhsjD2T4-2J)BCpBKbF!l#S#?2cY>8p8-+}&=6PZ%8X}x zG)KuGrWh=!Oq<&^i(`Q-J(j2_EzYoO8b?OcrDUt-j)yV2g?+045?@v&Rg%}WyfmV? z)TPODReZ)$l+e!{8xqqZ*QfaC9E0M;x$r4VTU6HYmd?aHO)`o4;5hED!4-{tIMHx$ z(|oFp3vP(WqzG0jnQYv&U{g{u*|;nVsZ_#_?35tfbvjwLU(LW~ujA1^gN^Fm zzA*VzIvNyYZ$XqXgDu9kay2Y#62^nL&b-WL9oe}K_+gnmsgVzDnNj`Yx9;M?LI=yH zCMoM0N|-}aGvlEpPanz+8}MOF)th)1^a z#ryAOCwDz5Q3;URlG;+%m(-UNp#jx=Rkips!V51btS0 z0(}YORjWUtRs*e)<*BUraTiNE$7>kVsHlNk16yclNAgz7u4dR<#FgJ4X#-@dY;dqyRhbAAX2Qx$Id$SkUJd7xH8K0``C1?KHGVA|S37Ox%QDjF3=aC;fIfFDQ}>|hw) zPdS~BDe)8#0$|KM))vPDc9rL#ZPJ|V0ug1+F<~CAssM^-!An(v1WFk{y+CFyUueFC z7-k-e30H_$w~MEy z;rrBA5Jo6}Al)N)%!OC_&@YQ4NA#&i#gjNF4T&Y8O(|Q{`fl|M(9YA3Q)0V~eMbff zYi?a==});BU}yMkuZYZPe^@JtDn8=ys(^sT;y_S;$b|d_*T6KPGc|mUf@bNfw{`r2xK^M^o}mK zuo+tfF0rd738|KJZfYn{^Ak zRQ+aEC!Tw=CYgz!^aD0#hl&qOK-uNqNdrp9fx^)-x)x4#gd;u$4TY{sa^mmcR>E7W zB{CEVykRK9+%^e%_#zBNG{BxE2&=KPr@1wRLMh-D$f=Pt+-~;Uk8}IAcAI}4d`Q~n6BOBo!j{kNIa*ML$n846 zJ4D}u$pqygIxcZQ}9?K3E zkNogyWftQXsyahE7U_m5X2)|1oKub1!(s#l+lWP;l%oZ$g97L=jW0}m@G;vBM zvt}yx&YEU!D>fF^EuO!vqp6ak z8@%>VDuInJjTnAHU~1R{K_PRg8SBewE`Grl7_2JZ@q-}CA82w~n^&mu6Bd4U6A0%eS&5Q=XzsE_?VD$?`t zzojD$KvVu!uBS86X>p3;30fctol%S8_}lq$hCkM3?f>EC}E1# zJ14E=Os(X85k21ec&&^+jp{u)DHG9n+-z|7)NOFP4%JL>7>ST;t2t!%Fb876l|Om} zO;FBJS*I-J>R7)|r6Z_=y8k&&RnI2`k(v#T-TSdY46#k9)i> zhyKc1rSx{?$EY{(bc0rXU1h7vH@IdAGIQ63zK^9_C;G}BqMVtI6E5fl_Kk?D0J*^& zSQ{iNtQ&4+TWru;V$;BMN@7s^KvFB;a8a`H6-k#SdI#0TxiUO+on_=Y*`-g}ZxTb6 zhd5VIc{GqyB8F`8;W}(oOpu7L^-N)X)g_&-pLCk9_h#dBl=bSN%!KQUX)Pr$*%;R6 z>ov5r@73CRdDEz&%LNz$y>l+>FG~A90j&0Mm~Fpf=9a9*=3#QQ%`&;rg5yOBA+L;E z&IQITpRFy_X%SNjcv7xKPNi+w-5R@GkSJ1Xcx4lto<0t)rgFy)-cz6LKlJS0DG=$H#|cX6SkTQ5l1{&D-8F#wc}R zZRum;)b>=~HkR{9gu^;`GdK-+p(6{RkVspuJv?8-G$kN@;mwO#pQ@bi8uGe!Uwe3g zicgwt3@?PzbE{9Sc{vJ|mbNTSPKS?V%j(%w@Z)Iw%uW$(J_S(AD#zjD;N=_4nQC=o zEnJ#bi;+{l#K;GVJ!dy3zreOV!R&YoadR%g_V6x#UYM{=^;KfCJqTF5uZYXMBWy`b zVc|^0yUYNA@V7l2wgzczM{=vQQtP((ug6Z~0~zjj=tyg5#@02@;`dQM1T46P^{u8q zPMJJ5e~$P_2s%U(YH(xXdbg`(YRpw*|fI8l!j6Bu|T0uF5*V@WxSt-<@w?N9Y*G(aH@VU@s z;5exbBYlg%kY;tlyZqadk>oiXcJrL=!c<>6^M#KUp!f9(h*06Mn)_XA&XqW{1V*g} z!{PDQ>`1Gsf{i2N`DW)5Iq)E*f=l|Ms<8znoZo0 z`m{ZyHE6#zix%qlg^8J^I01iA(tSm0$D{ioAbR-_>ceFg?+cerBjR~QlCac6@$oWp zQRpR?IpTG>Y?b@bXu8@(R0FrE#PK7u2nQZPKw3szx!|GO%mo1ETxOI_*)kMv;(}{! zmJ4*3tV+@}`dpxKqKBFom*z!j;}u{+t3dS8Wav^LQ{)K&FQbu@_2wj=rRBP&vkrlF z9uvuRC|hTm(ovG_0&u0~2p+oTsJ+iUuPCf$Qfg8BL|7f-FiyfZID2Zu#J6egq*dTw z-Al}0W~z`CWV|nR-{7_lr3tks|6_T!pbrD+iz5u-5NAp!6HZWDNk^RJ z{^}@5^dWIq`jBjygYy*l1X{M7N8I2{0x8DOAyi#(Wjo?4mID}y*_e4gaVAa4nM8^F zM~UdExgIuReNFkl!S^vVC{|*tJfs~Vny@Q~8 z9nh(KRlcd^Bm`$P9S{KYkbq@@|jrqqvh#jmI2&MarP z1d7P<)Du50+fiGSfAi2|Bh(qrU$$1QfiP`Ad{+d}1T_YnRd9UJ;-D3?)uhyl|NW_0 z_>_CN_&AfAjZgm2nY(>{gRj!1lP7AVWb)wn{3~EQn6CALuhy}pizWahC6htMMSh0Hgt>_2 zh=NoF#`WoeP`NGaBC%%kZ(;JRRB#N?+reS=B&QT7B`VQ?t-mEZO*PJhLOa|swNgtA zU@a{*^wp@9$Akj4YD*HAG{od%h?w~MMOHO0iI^XZYv)sn+9=bvDLq+E=^Pf=$rIsF z)V>D*n6eV=h!LN9{-BAU7PgH4%W5Ml;r~)SWQWld|2MV19hk=qKQWoGKlR+V}@6IigA%{81yJnYk6ZlE9;3NbP;#N((M>Uqq2^t#P-k+ zHx)^K&iRm$`lc;~&iM_AYZzD~E-Vc=W^I&irI+xj-TZcD`6o!MbWVVDw#dYM-K`ej{P*k1HnK14fNFPxYS&Z5E^s#;tHO9v^8X0! zG^F2PNbM-{8^T<_1LZS_f$!o1sX}ByaR3pHrBG?p@}Q2OcE5J zv_y%0DCN#fBlZ;fz@{yq3UEWw3`QvLq3ZK`d5&42D#?SO(2(N@VH^D7hE1MvQ^}Mn zGGR;tJ@=nP0 zG0`0)P5Nv$2vh&IBUWkx zDH}1}nI#bh|Naa}RO?~N26qw#bTxHao$owe1iHr0mF0)V^F4CL0TmXQ$NN?h@c|;0C z=}j}bY=x}!U2mdY7TxqFZkN`Z*sao=P?)4Qp+3~~CN@@0Z(@5b)|>iuy-Aay%cwW? zYkE`v%da;HBYoXwxa%2Cf4TIg75XmqroQP-vfn9JNe>IAu0f213^kk?M{;A_-Qpa= z94<`Gm$ik@dR&y8_lk5@U+%a7{NR#my%lx-RZNnHd^xH?U=??vgX^x=WX`DQMLAOlB`fnH|Nb996juCZ&7O~n zHBKmc%7wX1_a~zr9+DwWVrBPJrh{@Ydh_;r=?Q)j+$n9c3du1~DK`6&?mAS0Lq2>8p4H5S zig*Dj@LRdkpJg`rOSgw-bbZP8@U*UYwV%=zU-_qWy+EO1TmdZykp%#?a7;r)xMlN4 zfAlfy>v4*BMIoHU{m~QMf-3=J^F+(}T=(#W{Cok9&Guzqave5}u?}lmafay5b2)x& z=W%0BN=-o%03Q4W1f`Smp6I0fgu&*%N<$Jf5iNIw(qHSCy!ZvfWH7hpq!jjSgW8^8+_tSt zC#9w=Cnertc~wweCQeGQZ=sX&(X9Hq8;L{}=PYKzKO&#xPvL7^-wd9_>4*FCS0ZbIF=A3qs9koMD zu$}E;P6jakOJBuJb`&4lU-GN{E!F1=E!J8(ReUSxt#!U?)#T4)p1Wc3a{&9xnrW8;(xIFif`Z-2X0U5)l>ZOHBH5f=5hui{$~&ne5jq2 zP{V+3mUS+0P6SlA8odA0Aq39>f=f+@idc*eij>wwNd#r)y~7I0dqSueI8*UQTRk8MxTw@D)_K99ag6Ys( zh%CuIq0ezP{E!d;uz2cbhZ|=tD48Ach=))QL~pGfo1h~a84&`}8E~l(Y1fpR!>bBj{m@pY5aE9vWq+_0Or3MSWljs~V@}c&3}h8vc?A z2J+fd$<8c$4qBXcBz+kV#DnUoPzMS#^<>7{ftJ-{c2ef=P7)kzy3%9}Q%NMCcuQ#5 zyzh}&%7FMiGWt_`9293O4Y~T8BwTL9##kWWX4o%8E`AdXfz*-729uArK$#Kus}R-g z13f}leV}I{s()0d?jPu}SDq(S2a)v=#~QvHUVVA-{eLa-UEc>{;|SA9FX8glro+Xi z8pg9fs%QmKr5Y}YH$Ni< z*51BD+s%o$_FV)UJB?B}(|qE+N>wA?^Q)>Ix`}Dwxx=$_r!_9(tsX_Ze@7VIFgeg( zi5RWDi%3>BVX21oTr`|QqyJ?Sk%rr2(Qv46it;}e1vjM8QR^K4GIp%AzRy213UITI5oMQ5y{cM$5334ztWB%#S7VX0@Hl z(xUX(Ro}q`zv??cd)0TK)vLY3c`GNc5>6nmCY#tL3Op$orNU-TYutcQF3r`26Qnu& zn$^6V`Ub$5Q{TYatH6qBCrWc2IqS}rux{8m7g%K2u9UBMY0 z9vABFQga@5q398LYnFQihAj7prBuUJ@)YfmGAgC_N8Ql5E8MC1SfTgX8Mpl=vE&0S z2?}1B#p9g4`SL3 znu%cq1U$e0-shh0)Li$|x zfLTTC+?S7#cm;K#`F;H|oLL)@%I`fgl4!m6a1uUe)-*-NZEmb91}|yL09|%CQLF$( z^~)2LRL8XpgZ5rwT=pr&<}6sZ5NE?NCrXRBTRzEj=$Okkes+6DO)OXVRlw{>a<#Pg zr0#?sb8qZB(*+-;dZ1A{aP9OL7C`U6&y@jc4Uh;;`!H!B;hK3hE<+k?4}Y~g%nYsN zNn;eL*Ci{~V!2uzClU$mBvm2i3u{I@P4y0-Wa=8?@?}A2K<%g{qlWhxwW)c?cuq42 zYHhpzyBwf>)!Q4SDH)#?8Enl>NAH?e85r`-buF%2tvSew>=>g+4y#89-Kn8eM_iIt zYY+r7Fnsonp(%p>#p&GXJj>nY5~GI7enTWe@qRAh7XB)zs3}iKV7VAZii~wMXobia zE{b5WxZVPx%S3di8^_Ta!-lg=$JNWno(+d|aD+>{OA7B&J@L<;^%DmdV5`sR<@isL zEu3PIjtYBWWPQs>K35KSe0EvbjcWl7MXzoOEdyeD?Ml}w2?iE31OuwkiAG)XUe_8W zrHH8<%Bglbv~ar~b`s4n2skmiKRjANzvyRZucg3pY!Dzonbvq4Kj%KW#Aj+!AeDCk z)R2VXA&c&)}wF_Gw4NP@F0+Mh`|Fd=?C0V?0?W5 z#A0nqu4e;Jf=h|BAmMP(nSKzGz##F%B`5Tlb~q89nESm))d@AUpQh#E_Z`A|p~^z= z95x9-8F$5twSX4PO+RFgEMGR&Y-t7Q2}Aab2h8Dwo+FZ?cl$^udoO18~8`+mo?^^;s;g6*r9SvKaMKYm2(I03kLK1XnG8OVd!8)bw7$EtDk&rfO zA_q&lK5B~9Lwos(5>ymC6A4x*EFp?K#_lNX#-Q3Az>JFTUKUR*yLc}|E&6>>6M3i6 zgwbs^LGNZXV1C`VB7V+UB56m|uPZGCG)MfxnJUW!=7yW>- zk`FGMN4)7W^@sx7y#Lj=W$0hk&>@9u4n5p;W%jfH8pBqB;cs{FI~BA|QV^^mh()Dd zCtF&ZQA}dhk+_NBK_LjJ-tJ#1lg$_M4NxHoI8GZ(G_|$LN?{#2nP`iCYx%J$rq$Q8 zbj9g!yLe&rU6t7@bT>E-REaw#n&C4Yc{puduKh&pLbQS|#r9Ehto>2!B_E~Cb*h{l{{S%X-aUP%n@a`g2^P1<9;oH-w_5{6oew+qL7<3?H z&RgWTiMZ*01kjj1qNYJ|?#ni_F|O&35oxvM#L>5Hli80 zs)hnw`O$$>8hhGJg*&K@Y8u0k8K5zYHWDLT=~cq)T$sRhZF3wY#jRh$mx6mkkG4gHs{V}e* zwIpCC0L<^|!M!UcSWp+*@fOrEQ|Cs0X^1P)T2hlZcdX4a3nCgtDd~CwJ9-)P(llXm z)Vs-^SsGh)`lpw0GO+oSNTG6Lsn;qhqCBN6#%4=^@eYLDW(J6zUTzIYsd1l2@Fw%h zeV!7UzzNI&-)+83QQNRE{%Lz1Dym9pZC_Sm?VpELK(#HZ1HjG^+z3Ag3;=LYk4G@5{i^UHzH5N~C7#;KLzjWr=pZS^3eBmb^?LJ3MT0u(w zH(&e3|Lsqn`qv-&^Td;Je5dg0?DP99d1ZDC1@wgKEJP2#<_A}zsBX&(X`~$jw3b-M zaD+cZvf{O}(;!6_onA$WRJbj__fRp!7X^tWduQRTN68Kfu(se`9uUEH|6rGjrP&|}*r#1DzH=5!; zGHZ&f?JRo#KcH1+`w7NIsQ(wS=+HTJiYd3=@2y_Pt;*ehjIR<2c#oOVZO2cLBw8$d zxUYl?i`EaCY8Ok=tH&6ZEy>PWRv&vDlvT8f-FvGq==sElYCj~-vQnP)rOP__V^%=7 z``8wLtHdC{IaofpR)@i2*_M0Qzpp6)YnhG|t)>Rlw*r|F$~2&c6$qk9sWr5uMjl{v zxjZsbm`q`4MHstNh(%85T-d1zN&wXJ;PJ%HCmwVYT>o>q23q*uGmAqHJi>qBYG@@%+|> zc=ZZ2)xPLHH<0OmF1|A7+qU>o35IByRWJRl(GNi4LSmoG2{sr1M{x)`6XPza2 zyUB=pCFvA0&p32uK~F87a3Yc5D$hHabh23;gPc*b~pY z)Tp6$ZP5KOvRi0%EFa_PSjUOqP}$}f*-=}g#HmY^U=N7tvUvjXt9yJbmJL0Q{Zx-f zZF2fO7ONLE!Th*pZRbB6-Q=K!_j_w9OVZ4uBN8RYRsYc5%9=Szm`s8CZnhFdnFg~DrH3)2*7%$kW*5%mn zM6BxQVO8412Ei}P?UncKd8aY<6Q2DDE7 zuQmRi`mL2~#||;Cg72|Qlz?ci(Z=E>N)YFEjS?^Z&c%CW$HiCm>I;`B0T!>(#>q>R z(D~=pnDwzsl(1+Bt9tdq7cM>yi&e0y#HmY^kbBtbULC(g35%()s*NL;D1rX5MjJ2v z_Ql76C&wBkPG6$L+En~gmnb1BZU}C)K`;nhByhPSvFz_&0Tp!$Z+vt)OWiSzTgnYI6GGC6-YWFfEUGle=UFn%Q~k|$PPSt zJK*OUJv$ZaT-`J9bBz)ozeEY}bBz**FHr*gT%*JneySen>Ry4LYm_*4i4x%88YRyB zvx~O@p4psSzj{t28wPu*=H$s(3wdAloPeEc^z0=w$?1-T)uRVH*C_GA#Y+e~-5gt_ zW0LWuw70dh4g2aVZ~1-Y;I8~m)S6m(!+h;NZmi2hd{Ek7XM8xx!v9iwZw6C~^Qk9l zL}wzKxqa}_EO2|!Zb|c#)os^JCq}Bn$5AeKkqNUv^^9JQeIjU@|I=VP8n!v?ECp4g zDEy5156<8y!hZH3{gL`QfOSYg+6t+<98DTRv5F^k(3Ls&!+l=iK07qtYU)Asc%5to zE+cl6j0MtbcYiu%v1lV*+MS(cl4QvaI$P)H4H)=4lniILInPYxQxEP{F^nrzhg%@y zC(s~2EpzY)`V*k@e??o?N9o*j3)2j>@ADH%`+K7dfva5iuGQJACq8>w&Y=zVJ}eI#jttIR4Ff-j`2&=EEY%wI2HV~bqDR&O?XYp_H z{Z;4T12-p-Q)NdfRg+dmmFb2ruL`7!Rk5z9OUDX0HP44q`Kv@mjY) zH0G==v}5$H&olU}KX}~G;^6xO=X_Q@@B&(<{?tQbvncjw+0Zx-Z5^_p)9k++X~*;z zu+`T$9vt1jKm)E)y6+dtQq1moUxQ?P>ep-X_i1~AeZVNHV`z2VSENUS##2DbkGE?l zOE<^LVk*N4g5hArij}S41E?WveS1?s*UEAaXR7;x|UyL|8A_VOZ057+!H7Y3;mdd`-c|n^Eg!njyh$jJAZ$j>w(4ni>m<&)>df zA0TbZZj)hL=FRFQS!%E58Nx^aVp=XB9DZMp{3!Wyi&0EFUMC|9DLZA%k+W06iXvi9vQZIAV$%sFu;zrEwwqz3m(z_2tAWa3={)&iclp#6!KH(~K$w*Y z>kl4TdZH$)J<;l7jcWtYqORD`8@;#cUv2Lb1R5Q?R7)8DLz}v-(_4pQc;D2C4w+cn zbb@J9A6PBo0QC+tI|*#5op0A@qV1toXc8j(LCzgbu*vrS86H)sqXpx|JS#ia98hNV zOYI!YMKcyJg%~r&-9M6s%3Oe9`Xh|}mvk+yIgzGt1tY34QoFm`6PeS87**{i3e;7} zgle0s?^sbh8r=s#E7n@L2f~kht7Yvs@i&I87oOyEyRx^tdq=u0*|sYg1Bw7x+2#`4 z$iXvfj&AhZPh{4K&^F|0b1Kfgh%ZMP`0!Dwh3Up zY#=x2YhJ`ka-7w&O)EyrK((2|$b|537s6{Q{w+Ni&<;{+AteX>@efJO6(t8sY8z0F zuqgLPs1FG0$v}Z>V!ZE;{oG(S_`U&2HC?WyHbXOh z{nd;AYDuiFw4gNH1Wv@+>O5%}YRhcl>%aA--+ta4_sy&&gqa>X31K^`^nicB zCvorIH!;;Z?)~)RMRu5CLsfP_8Hb9IyI6eM1R~cPm**O(UJ8KZHYe^k*HS*`Db-p3 zrI+c`3%egb9LCI$G%|(`0K({PWZ2Ih(=Y=lvO~HyUZ5y>WUvMx;3jAcT3L!M{GaJ# zWE2ELUb4}oAXnr7v}jr7twUu-8LGpbGdFO#k;Mm+=&9on>-ia~0B ztmH4peW;U1r4vzgVT{RHc+-)?>LA-no0gBlaPecih-vdgfBf*wHOoOTx`#SFhxjj2x$sf#DYW= z`drSNf_zIgNQkKhddSQ1|#&POK03n_3AxW&l(uS>_Z zhL_-4gH$nS>QqL3q5VP8*8*X?p8$c8xEVHO?EW2T=kXmf)o}2!8+>wTSNx8^Ag`PF z4lS0zSHH_2fuW-TNgm{h$+F6O&O`yC9 z#AY+@6=atd0oTq=upgE<>WK4~r)M{|k&;3V?F6($ zZt7G}P7J(56($_t7EOb`UFKy%ig+;D)D){5Y^&vo_p$;kPiu~4* zQo+-m5?N(KB^Sy-fP1ES!SRfafXS8v>8nj|;=9cx+z2*rCc9-*-Jd{BHS@LBR3ol6 zr}mqjP*i1R(g&9^kBX!ET{KH3`}-`JzkpE6;;FoPfKk4S+Fn@Xe@lGCNp%7BX$O52ZAUDGsAKQ^%x4i&2D=|f3+z$d9|eCg z1R`Rk-48+m7?wtkL9D|2jX86E;uPI|tc?jElm{~#pCsfMv8SAl*YRWTH9JFX(59JN zA-aQ^L>9yhUwN~2``-Sm8`(}O5jB}|WPe41V4 zTU$NubQhSY?cTgvGQtFlj9`_IWCU$Al93_oSyxC#K)Y8(LlB0cBigjR0z|!3{vzMu4|Y`MV&x&U zW?WtKyBV*&$*$2>9jI6{7y=4NeZZ(=IniB45$eX=0B&IgWb?JKO?k}ASe$4}Ka^nx zrNlxKD5hz>{pLAB01A3D;OxMf8Sq0QO0Ca4w$YzZhQ&f;jvv&WIHuU3S;>U24LDPh zhFvcr)T=34>nb|jRIj2^h3UDkPpvB^VNHynB#F+`l^i75B$yO8efE%tb(G@uW%XEc$BQjm}GIO8_ny}f>Qx~0h{HA0J z#jsR#sx5o96H8o|q8H5adYLOnwQ*?|p?1}Lm2{ubm1h0zuu*Nsa>`$OVk}a^O|ya8 zTMyc?HD?=@ey6JM#1dt-xf9ExXCe`N*on;uY0OUSdYKvP20@Y$8Z1T)UIsvVwUsWp zwVvHu00mO^6taa6(UtS4uyR^O_{8UC;c=4Ak|Z74v{)fGLt|+K8%Uzd`!UVG$6B5o#2h8>_onk4`7A?sQ(ooew@MM;Hx~2FE7UJ`kIV0=4_rOV5GwM zYs)(IPrUt5nV91{_f-I=7n29~xv7P9QD79Z8mi$RDzlg?tA>?{+_DR?s0so^kNf9- zH@GXM-jk(Oh|c4HI9eb6hWQ9D18%>;^r_LY5F}cQsumpw`&M082IQ{>2Nl19ehJ>m z!ck!ZK0GqAqw{N?F(xp6+qD&0mz9SdG0=fhMwcvCgYMXSgHGAI0oe_I_HL6FH!RWSd0HW;A!&CYMdG877qjaENCI{Inh2Tm{@y-u8+bMp*42l0WhU+Y`(C zJj3>L8%9_(GHYpGSZ8(OJ6rvpOsoo2iPm;gavv$?G@*UQ-Vp3HM3WE`Em}ZJ4f^?D zabmnSTD`$w-}D1?XW6I+g*H!%Bb%b>{qDX}OuGYrPk#b_kRl2ch%InuYo_U1_^;*3tvz#IC&Hi<{c9 zWQS>V^I>e{Az8)QInWj{m%8oBc2b5u9AyaFF+QT9(1j9UD;RWr^no|V-0};L>%n67 zW&rX9@$phx-MAN;V2gY}4X~di!+~egfbKQvH+0k?9R>m}(2mcBDxy|73D|JKrP7Ru zVYrimmeC#q!hq-rtwB4~TGyV6No(HPR-+n|_qoyIUD*TTp-r&H0c8=a@PRM{TG6Bm zXuBO|Vb-+G#rSH7fu%S*`I)~$$I$Fjl$ZXu+1%3tD2Ihekp!FKu^VxiRZ*})5Hhxv^S?f}On0nkmhN8o1` zi-;e~TW_mqP8d3v0%)0SJNKs9R=p%zWPJH>ihk6vwsm0rY{chp0^Az$T)x!lhB`JB zxt;F5sONsjr%;U}Y%08r4N5fKNV~SMQ0%1p*iXR^(uh%aRt<0SOe;Sur^syM<2XF&3xjYo^YS=K)q<30RV$@ildAko&b z)8SjAlD~%4&TwIO(-=XZ4i8|COQE1@XNPeqke+AVA2Cg@;$AF}-#UcLB)B}{3x};o zV5h1mtD~h&Qi|A#yQ!zjC0Y>LS z-~ykl4ZA5ev@salz@?q9YqjCSVm_Nq$grVGnYvm&M#CY%yQHr+A+psILP|?6u}K!6 zmdFq%*_gNV3=4M_z^vJUGG|k^93?2!UtOHg@mKd#@|@xkI{-OS!j!NELLW}ZhWx5; zO1TPeKS)<5!_Y&Cqx_iU&YIIHl48Kur6Hh`7Lg&F!C|Jm&qfR<=&X5OI{RAVGlGSv zTlLf89_x9gV!tV)2%cyn)rxSkoX!V=O=koP<;meg2~5Cn)Ab>H2jUGG-JL3<3~x@n zb{z*6ZotOpYjxpqm^4^d!FY|MBneKSjTC?{SQR6c&88b z`&D|ss%8_6aC`EA9WPZo_m|K>O~lx~Dsz|nj%0q}CERu_mlq=QXjec%21pMwAyJRN zp1UiNCOX$d3pzk1#4TZ3b$VPAJj|0%wd(V!#)X`2S4_2J1x+=wflc)ozd&D8jhtXp zO&nuQ^|*d8?div+y315ct1Twnq{vFJskXJqmpIk6s1&DKOWdd0*Y_wBqUn~{0@~PA zQ=3h-UHJqQ<5Y7Vim5g*``r6gJT?y@L9QD0R5PH)RGSDCrkZr0>dpwVMwDNOLnp#z zq!ROrPo)sa7;SuKs%1}&?@aYTf2tW_m};Ih)v!r%jC!gCexGUyR+{QeQ=J);XVrHf z2xwq@J9kxJ@ z0_l~rCDT}ru$rorIN2ZMP4@D=0VqKVB4O*13%*P~n?T5R^;bAY z!oPZx)nA6Et~apyuXVD_#|M%&=5CDL<|M>+%&={&S0lC&&9;DGL1+|gy}*Hce`fKX zD&B!;rVlRoIjqF=$@LZ~3u*PtuP&JwfN@Y4#tnFAmRh~m^tqyKPQvnZ=JW&=@9VA8 z((?X-&}ntQ*N5bcmU=g&t5a>lW$U!Yk z^~n|{t4tZHSq4HpesND>GdcGvzT;Yh|XHn2D1%p{DlAOdDgScFbfqBsRyi zDP|gonFd$ZG)tzxXYd~+lg@Y8{VPqdqpv5DiMcLvZ#hv+FYJ80m|D0APul5X!@?W* z-B4V$F!%W3VrHS_?W$tq!qxoF6q^<{kUG22> zh0f!LRlIYAZ%UxT89kHlFpbRdOljKQedO@r!?=UnRB92fm@S(~mPCh3o7jCAf@S8_ z(8^pkr(CW+Y@df$ezw`<^N4*OS^3%Kk=)g%-7lzRp{8h&DDf%|NQQlDJ~utkLub;23Ib*fojq|Pp{B#QP21<`m7jfz2C5DA+3uKx!5D!OvG6H^S=i^R zR+iQj{Qzg!CM4K@m(0P8E^Px)7H_LLmO%KbjW(8zE5}kVluh<|)5_2FLYcMCvnxN> z3q?1IYBOAGwE@R^p=`F#n^%6W7s@sE`I?oV>xHt#K5tq1*=Ippq3ga|W&vAK3wLPv z5kb>C#k!(hrgx1EK&M7@!QA~-Ql0y2bnV9!*u(ZD2*sv^4=BO8Sal&LL>f)NlNQX? zNFvv}Yjc-tjydpI4!&b7$zgi_51H!`ZI`>>w|HYpt^debB>dG`BxPZcm{^iB@8f*U zAhFgMq#K`V2FZCxWKQuuow{66zGjdFYmAwkK{jft8DzW4Vkc~`Ea4{}agJfEh?gpzohnI56CBq}tBL?H@$Sd`1 znol??jS_q|fjk2Iv6#bbJtLkFa(vg25BiD-!6|3iO;AkGEVvs>=X^BVZRCa;#V-9z z1(^=%!jW5eWFTXw_o9Bb`8a%n`}SkVusW>UY}_l%8`V{NHz zY=RsE_l)7G>z7)u64}Nk$-&K&&& zi1nqcsfLs_6{V~xld|5LKt>p5G1Zsg){@&emGc&|B8xGLkS%sMQ~Y4eyaoj_g=h$j z>7vb;tUk1m^rn#6F%S2~`ELSqM-i1^*c1p+c1)ixI@qkqGHkj7bP2P0M?WnRP3Fhh zg3ln246(f~HZO?RdI4>ydW(qNFc>w|r(@30TJ#2Kez2H^PGYzouWov9E@Wc>^nvC%m1)AH}_fs`(DFX&zVW-Hr$iw1aCO4#mf)Au2<%Zd#Or!Gg+$ttxaWf>2hcKk#hQeZSZP=8=6e6>wIrUWCOY z>vcR!QZf%0U_t-&*mR*{;JRu!f==7!mF7swSjRLu*Y_hI?|^%-;(||COXc@MB?ac@oK!>;^3CSe?wLt_aY&V(MP5gSE$nM~mqr#ncDyJs{I_ zyMV4iduAbb{JujDh^Rm4F1wH1VhaQG0Z+%$B7?uM=>YU}P9*|y*~H;OwU@b&aBkZ1 zkW^I8DXPL9p+YH+cprjS&{uVdRb-m1XPXPza%Ho?j%#KsLN+On#pFe6n+e&ZJ{A_2 zbV_^GguZta)(AGYL5M3@h~&DD0IxR?c&`5eZmArBgFL+6|YW+ z;Tggb*%Ja-ooaAEbe0iM5C=pYN~$A&Lw?nWmq=P2i*H#)UG*DnnA$zW8B_k9YNQKX ztX&+^*k)*?n{tiN1(~kSG}29<#;7sCzjKZBphDxP#XZ6?edTIpd8PpzYkevdPf%+a zjX+>FhE2XV1p&l91Bns!!mUl#pTzGc;|+x2C})}I%iXisq*MohQoTuG zw+D;}fz90yrykA1MA#$(k!{Q9g>~7eyU;*(2e&46?T1Ox`44gJ)}z>MatloIBX^s1 zwaN}+D#Epe&gKu|6KaN5p(>MLJ07>s7Lv0nvsXw~!nLV=&j?m07_tVy-6Qm{PcaG^ z>00v{bX!)e0k>k=U;vz1vDk5ND^>@OUFchH4C0gVAJHpan}Nj7O4uE$Heq?A*KD@l zGpleg**qLUj?bI+ijTBp6M{ejjgo35WFTMYgoWJfpz!Q8LdP)$mR*hrmy-)O9eGNe zSCkiyk72s#2FnDdigMjT+59fUHGZz-a0|y_D%g4Csp@U}`*mb7Pt8Nu9ag?KtjL#J zK3MVc;;amHq0hOy4bI(-oSWWbA1S*}m7~>$hnIC=P&IJ!b$Kd?NWI16;f1SLvekHO9_?&x_y+ zJ8y!@x{E?(qcU6uSFq8(YN*UwnN?8H?&(Tg;dJV^iYwQs3UFn3<=Wb!55vpXRt7;u zhCtOX+cJK)?5HY(9I8$&!X=Hv-4BO*UT>!Ii#|bOEkU3ANS~w}NT2Cc<7_+B1Pi(j zFQz6}l_nab1kUT9+z>#PgBV!`9zL)v4>VEc`PM<|Xf6AeBR6poyT^&JF|y2DP6b5t z@f~B-NhUNw*eQ~$n@~x77!kJaA>k8DI#=ijnmAbP*pJwRM}}muBkzxLh}E~Uu94++ znHW!S6-A!%T2+eZVd|>)0ttel#IA%PE$@y(O?h{+gVinS4o9lgo#$hB#2fRy)tNZw zdSyN>L37URXs)VrF^68M!xAiqIPL{~mRMv=`B9>}NGhW>9gmTaHF9i6wuSo-GK&wv_7|JF-7_*ez%!EW zivj`5JN2g>=#2h!l-0xrW0##3erCGJfBsLeM_Fw0+R80BLtcG6tM|*b1Dky;+m%1U z$1`{pe)b9as-S`R!**|xR7fG!T`f__{p|S2x9pATlqO!KaO@})&_>(*zLV^6$azzV)41Z!Yq00g%JlmZ zikm*1PkUSSej)9x)9*J@PK%JfnDwruq5!yp{U$!nb(iU-N;<0TbTmvGPUt$*l~+)Le9GK|zdY^$aF zFU_eln=gj9CwLvnFu~Ih2PjG{yac~n3BPIOzUb93^0>6nn1EBG>Hjb=oo?8!s)Ud@ zb;|lO-ZMP~LVQCqeRCqe1Vl8NxJpZ(-zli1{1S>`-RuWEWdkbEhFLImBRYD}5>j@$ zPh~!YA%-v%o1{@3CF@3uA+I)k|CD)A`bU9ys2UdsBa`(3hN!Nkqh1Wo$3nv5#Lv~( zp@4x@5Y*`#(or8k00rHY=0z_xa;;?>huL#&l(>6H2T;dBCi<--aqe%4&zgB)F0t#M zFce&%1-*JU!Ww3C9nVPSgz@qGMok72Bq&f~P9;wAv^}{VAc9e>6mYp5q#mUflr=Sr z2!j^%^-YxonZIhf4x?_mE3SZ3Bb^USBTSH2#>zxVpav)E6X=x)0 zK9#n)hMNjil4l{1%-QS71}jS}Sj%8{i#mCdu#O-I8R(dOsXqDsrKHNb_xtB+8ncK20A4N|CQwACypYT~C!f&@uY zs#yh>{B{*vglv=D388EYi(A#(M3w9Y+5o#2K2*#=tNK!ec1yu$S`~5WNMf(?hBG1caR z`gVcwO-@fOHFYpLLy*C=W(}2A7hsk5HZ|c^wNCUles%+xJ_}a*tX7$7JGHzfO+K1k zf+joptVyU-XCaYjvsTqbXftG){Q|mqQ*s=n6AWu=YE+u7C&&Tu`!ZX{D@b$4$pGY8 zc2-EL28^$j< ziGhP%m?-IsnbxaOW{HiYzeZJ`!A%t}HpT^ZLkw6z{LTs^klGT(>?*J37iqEF98(c# z%4M#$( z1Yq?b&9Tvd6;qA?1d(7s71I{2TwqfIuYhwr)w+J9D4$}2UP<>??c3RBOsYR!PK-tJ zt-|+HVNJhTedNRoG?0|UqK+oj$NS8)dX_vjQNifITcF0)eDcF;{eFAKla_F#JhE=T zmmkQ#h`z9;Ci-Ak8!R%a4>yBse#Mw}AmlH`b|WD-E3gj?MAI?d-CF3}7ZDhSQGFJb zaVUYx5?ByA;#8BSP(QtoIn+E}r~a;(Wr?XhEAd^Ztr0B4cUfp^9KX7#@%oyg#^s_| z6Mw11#WRxywkIOA+6!;W7$!1+m^A=g=&)7Fx)8(;qr5TmT0H!HBCE+i0KXA%Y9NR0 z6VR;ZwTAQ|h13$-BwuAsJr6x1x1cUQ@kL&@Ctnd&U?T&0zz75s*C5b9W2XC3O;A{L z2vdv!mA(Yt3Qmi+ezDJ64_RmE$gbr5*1DD^D@O&7qai`Elj=VjmNF(re-W&uA9z!)aM46^;CIV^G-4p1~vIv+`JEmeMu)CR#AEYiB0nDIsobt{L zUAtc=F~@z@v7CUt&J*2f-PHP+BEoJeeVro10{Vv;Y3SoA8evB~Kgn-(8qOdX(Y@-^ zKaPdz6H0~AU@cnA5GSm6{5_S|q(Ob8@GkmEIu#z(FGc*Iu?-65Ul zg~>R?4}h0FN=y$8F18L_N{Rpr?oHL0j~VdcpEaPWqn2{Ck#d9-_+l^{E%LU^Z1l*k z{DMaRGQy3=V@>%q1o88l@B)Zp_Zo zL~-q|d`Z9SZ_J+2?>c5uzZkku-t%Je#th*qFS<8o!ZQtY9!-VE>MPma>gA(LVL80O z+w<}53%orU-_BU`$Fcl`%%@54NBul6yYPvhT@v)3x2zzy;m=unyFg`!e_;s;FX8wF zZ|G(4nMVv2_2L`s;t+8FW(v$f{DzgUTdz0{$p6F+0+WE zXIMSdc*7h!elqLTM}Kt5t&;Rsb}|e8Y9~VC%pw_)-kf7Y~$qu=)ZNoa=1p zEad#~M|e5QAFFcYPfAYxgljQQqndKAPdfvdbV%D7$YeXToq^0C%Gt64C5)fB#(n^= z^xgIYxVVb(a?vy66>Vm@>rg!K%}=JJp9OwlLm(55`G$ZWsmmlE2bl0|^<0Q>t8c|V z-$;>JC2Jrl&xUri)5t}ekOj^e_S1AA@N`6)0 z2Vq3MvI%v zFcW14^CX&RR~pPyH<+ivU_KyAx%q2h+0qjTZzl4jdtK8&4kNUy%lV8yl-bDHPQr6@ zxs4oqSTK;Y!6inCNy+HD)Oe#I4$p}nC2F^2 z6{mEtinG-itm5RFVJD9tIpX70Lp9#MoRySdhH-i=K2Dr9h3iw`BgTLxQCq-uC|FHf zRGRvFmsCdVK1|hR>o&WIbEriW;b~hidux~oSBCa*PQGlVLw>)CP+sP9rPk)@3|~JK z9emFB%j2i6cw?En**iBAD<(HHd$(-6)r{Bn7>r%OvaYu_(-MS1d1+~q(`q7I(dMdy z3TF1kmyEL|I`?F!e5qrL4o)h>j#<6wmwl*>ulL(mpC>AQfU@vaixgzH&jf@|h3xlZ zz>~IE*K8JXt2}qD+Cmzksj-Vs{PPFgObA^{8)ib-+KrhVHuV5V9n9g>aj&{(+dI3J z|BS23PzY;Tfp-K_4lN3$=>rER^`zl!Pu^+MK|_KV+8+{K-;$!)P{p#O3>oBQ+-A4M zjoS`xFA0E^Pl~Zyws}ddklSBW$Sm761p2U*2~P2rYPbfYwwe~5rBBug;FA0UQ3~aj z?KDC2y+e&YV9~!6Nj#myIWf`5adF+r4P?PC5A^qziZ~J|9RTqqt3E$7>~nR@z`?V&|Y7 z|Fq+z5~^QQtFPFan^SAs*vML`n>j(yxX_&nO!wGd7cpQ}BhT9cRDy3Mh}7_6bHt9m ztvc)wv|;-n)}?B?U5#K`bpnTFDBYl;Ld#I|t840^8f};|e`fb=6qR#~F^UtYL5%(* zdriqz37M}}dXB=b0_kXoDZen8E~!S@1o@GLyv>@oc4Q8>AYHJITzamc zT<`8lWmUgaOkf6+Q*X^S`#asI8NTEdhT&+S!%v74Y(|D?|Gv{bRZdcJ2nW1Qb@~^P z8ItaQt<4bxjwv>TIgbFz7DXN^riCaR9SSoxgf~^c3?96w--@dyCdDbEfRyZ$@}x1E zvJPMiLw6cw_}79&{1C`alqygJo-}r(5ir>b*!Efqy0YJ3(HIO}EqID=)_}-rkA4SQ z0#qZy!#uRPjJaB=)RDe6E~!@ah8oYP1$??R`bXSPjMxO+*M`UK zm&bkM*;kDFV7%kLcx}@R5|JIz19=D2s3;1X$6rp77x{f51=c~f6G@gmqMujHI|IQa z!c_lWx^f^il84fNhfrsgP#MlRRvC1;NMfden`j6L5K@Ch1gYRgdSMbF+B4;;6&bMl zg(twU4c-lOG1@=rJ`1Y!S3*zOthL@qo;Fb}3Tnu8r1UlBtonpBRFRZSN=DRk2|dAE zt><#fIB&I{YZ4yHvHB<15!HwuYdh|QfFQvi@npu&gE36ph~EdlAo2zMB1@jvFUtK( z`bG6Wr(e+Lxbjo{2){O9Q+-r9C_i)88I zqT88>GJl`%%ej(=Nm**7oV66B^csGWR@qrb61J+As9UBW3<-u8HutB1)Jy32G6i|y zIa6Vk#d@|B&1UKuWknP+9j?$E2(RuntwBn^2X|z2Tczjg8b7V_?{Md9J65CfOwJW| zz8It9?zujpFwNuYHD>6;$HClPR0OW92%jclz~+L#XpJ?rH5a5XQ!$0PAcdK#Qv^aJ zF;keB+>6dge^9I<$PGq?E1VJXH)e#naHZNO1qXgpqFqgCvyllGP2e?h_=6WFgi&(* zOr%oFOlQi>JoJHFm?Aoehx}N~BKAg!S)@d^n^7p>HhW>UtWHEGve_pbCMDQIJE~v# z890w zC{~q_9w!b;8}s{Yli7gJ(DLs0L;5||j~$v}XHVF~Dr~D+*;W}LWh)~U=HU}!_xN4A zj7Nc&=xO0aZ0)wKrv?wrG*t*Qs#NkBl{yp5j8?gQMFDe#&3*fc2!h#H-sLpPv3>P- zM|Vg?_3V#=0WS#Mgr*j_@4n!|7D9vi-FfPR)&4GlHvU*uVQ%Rp+#GxFHQ|1C!UCRvJ?X~rxVD)w7#KEQlE7xn1^(!m36^J-E6_aa5f4ESZr^(?& zFDJMSP)w=2J^55Rh8o(HRiLhX$}8_85p*S*dc7>G-bNK3?QLSvM;Y|`tqD)EI!!Y% z)9le~QqQLuCH575Iz8T`ZzXIIcR!zFUzuhY)zULdwUK5T7*x;m?zmk{FJN-&lI>KT zX9na7-j*a2s=6t8h>9Wh{3V$3xx~Is3zfDf2@aIgG8f&-S8@Jn zz);(%r)Bz5dSuIF);4~L<)nozOr&jEQa$R?w_>fHI$&cqUrkjOGW$B9aGi1-&2|B$>x7M3D^jqp6AHpj&C_do;bW}6C1eu> zx9Q?K6Wl;FnU9>e+vN3Tpyw&LiH0=}YH|`-*B6aTDC+o{q;~>RAT)|*1SO)$-h@~I zI75sBf>$x=c9N@g4+4K`kq_jObO9fV{Ne7;r8@0ZwGV=I>{IR=p*}WQbl2v?G1mcQ zL)c`Nu`68s<9nlI%{}Y5!xX6H5+`I+8)GmPqnifKaH4aDwq?k`(z?Rn&@=e5i)YkG`3W5fxID8xa(7ca7vp~(o7R?2N9Pj>`E|s>A zJqU+ZPdd`WhzL~cGU6TG&)VhFS1}`yaUl*|Sn%OT@ZrEwx*R^Z=0PX+;eHoCmAKtA ze&bS1H=Ygxfly?Nqlk4&`w{^~P^S$=#_2F9GRcpj$fQtY{D9?j6d|Xf$he`1@*9eb zb8=rOqADFlCi^Ht8AA~(b0C698lzCeF2!L~mxPoqT5!llC;`GRekh|!U9h4*-4Yr| zNDYP5t-ko!s!u85V~B}hq#sS<6EJNG^&k!W5}N=jcXLAg9r~4_cG!XY2|^n7CLQlc zUrd>c>Xl)@%bzrxXZ6h!VV9-)aIr-!IX_r^<0HRruCXQ1xC5za{B8x5OSSTm2!w5Z z8-&8fX*EJ}wlH_amVKi5#g@B8ZYJT6P^(FcAt&-Rx$vQZg@o+1u=vr?LRfC<*~$Dp z2BCe`;?ZXwz3V`k&RPZ4A1Cx7<>a-nu2C=2Qy`Le!2ycw06DZO0me*e$NG8VsDw)K zbTybN*ujI9-u*N2?3R8q_Ka(|^3HlKa^h$1?Oj!jLh}9^x=+x{5$VNXu^n476c*k> z%T?8rbz-rhmm$}2f^ z7s6AuA3nfY=wJFDf8qD@_Y|V_8y_w=!24!N{gaRX`Y&Zl-9S7KCH&$cK`Gk=n#}LxPYf!$Sss|gkKJ9&NG-|q6R55Sphb#cl`u%C zRDkNZRHwz*i*rTgq8W1~|Dlx0r0Od-;P+pX2VLUdS1oN4~5J;jzi z2h?|WHCm%Plq?F(wq5a5h!Aa#gh*Y&X277~JHb<9vlK3Ot9bsS_396VLF&N@!ceS- zL!)wZ>BM^JEF2YW5zPk^jWklA0vM|GBE|ZgDQpG|U$D6jc#+BM7<`AsP8o?cQnsFw zEUxw9J?ll}OdHuiB~u08TCgZJQZnm=c7=~l4koaGP|R;;;S{ClNx$BkxAekV*Pbf1o z?hz{_s0w!}FAey{>=Aoh)Z;^{f%zq4_b;)sqv`&Y?%866dhhkqk>!A2X>xwM3oj1{ z7VL`~p7HQb-aWu|&Xe1P0(|C6I?BCi*w@-JLen6 z24{s6w+hy?t`p4K64Amyy%%I>-Ml_4BsH_5T9;dwh9(S}4Gnff>-`2p2a37_v$7?v z=TGR+tn8-i`vh4i zi|VM4`?TJ>)d$c~aDC(vw9Ox4JCpuB$dBRx-k80cr>;)r3FFL))*FS~>EaR#fvh<* ziwfu=V%fc^R!WL7Hjfz$a-SO25j&JZ+9Ku|YOce8JR2oDT3MErbq5JaI6L~Z~|lrXrG$mZo(bYEUCiad4+k( zo_3hSAb*(DRAW%@<+_vIZoQY@tE5R3cuey7yt=Fx|U{S%}WJ@be-i$GXyte)e?)n-mLU=^|9C^KU8jo2&|Fxoq(X1X`2D;?_{!{>R( zg&7@WkaAD7=|an5)QimpqN!-o&?+a+91L^ub5$42eo5uR3~8#oe@fdB0rzq}oD>Ps z_6^TiPs2wclpQVwwedMLe(B~{NQ)ac@5ON0wG%9E4K-sNf#2OEdMCmGHN3s2W5&nP zERj`fd@?9!Nb2I<$ggq-nUuX`jyG(aNwo>kPU-|MB8!|u&>IQg@N1YtIco!g=-6U) zy7`U;@=Ws`DfKMxH~1ZYC>+EfDv^z7sn~cU#LwD&$lHB4ZD&6gwNoAbPNvHu|>!Qfd%z+qD*_KzK_N(4FU9b8I!NL3)zEwNo^?iiCp zG^~wCR;tg+bA+Z+50W8W0Aeb`wPT8Xy`Gh-CHB<^bY#6G|g%LJ3NP zbFc$jRLRbF3GyOZ5q<$mb1>XiHHBA1HD0Yp5uB`c?nS!!Tt18Epb0-?;-#|D%9#W9 zEdIAi1OQH$_(34nnc#$IcJzON?(CwLV=Zcn$Xxa=X$InBw?J$C ziiF)t==LfSOyuh=Ftv27mqQrNLl}mgFch~GySsatIQuOV$l+BLF8vy0{Uqz7-OhmW z+G2-6I&5z=pD%DXfxd1}lIjgQ0VA#`v%VB`d5iictK(!6w5vwP##qe3Q3x8F)6mk zzGW|=;tUhf*z%s0nff+daUQ`XoZ;#@_Sq$46vM?^?CimCb>Ux0zFf*k;tS^>h7}71 z_l02?p2uW!9cB}z*Ib?|uwT1PWE^18T`0VCLdY{$ zbvYAQqYE1P6Ho6Ysz@j??6J^BK7mOCcbGXKu?$JdM6-l204xsRNz4@VzOM!#RSv^N zv+@lzMl_?F(+8Lz&ad3h8y$RCF}(18B%70iyRvusmwWxo+x_iMeh`RnBk|@NRhxLq zFl40rVNe5J17GH6j%7Bi#c>J}+y7@v!?3*WC1@Lad3WgB_e#(jmI%|Rc&k@j^eYwt zRV%ESwQ8foHqy6>%ns`i3e)qw#oY>v*hM=U7Cl0bd28|ZeiC(=?}V=097RYTWq75Q zLzKlw)vt^{fu4?v>ol&cBNCk6xi7@&t;t0~j`$A!)k*pI4hdFVk@ya8BOz)dqbAy< z%@#%C=fSIHjz3^%J8ov;*5S z3lq!a-l`+>!w)}&ZL_!sGx~@Ll4Qk}(t=WqirA|9%t%Jv#BTevQ(t-_E;Ov@4!u2a zTwW_(+rjcx87PpKg2gC%TOHd?DQ&znM*GMrvi@54yPq+Wb(Lw0sY8d5)cGka6Jr3M z>Ku1zoFr+S8aWuGVUP51zn}y|Pt0u{je*B%h_p;CKB{cHAw#3yt9FrDs7xc@mbcim zApNx(b%5+yz>xULmiy=tBNUN99>9?UPz=4OgO$}BL>u?+8j1b#asL-3EZ9(%GuFk`3L?<}d7Sqm= zMuj?h7Sr&%C>5-g186br3~5AR6WNbxr%6-$(Epfr5^;ncz&}&D&~N zXZY$ACs1rf(_@}Fs<$gYq24RvN`1ZEu*@4Sv;faxJ2PZbi@iNTEACyRZ#uvzY!keP zb+Fx+guOkthY(yv_?6Oj2a5Z2%Zg`Y^csW9o-t*)#?5V(P8^9!;;Re!tz+Mg6P`=zs#1JFV66$sjh*2sS z*sCufnKwiY0}q$U)1f(PRCCL!Va3wP`sQX4-NHwPxyZUaT%ClV22mD*%S#Ythb7mQ zEf-}CX2)8{0Q0B=pmZS`oAHAaUk@kSXv#v5g@_Ke7bL!?TASp{Km z4-VrJ2tv0Ox4Fy4NOajKOccFU+Fk+S&;$vf^)qv}W3LZcT%>*~;?qog>c*!|{S>mx zOJg@x`utP5_EO#rZ!g$(LEM`Wt!8-ptIoj#Ja!(oH=br5K5*d11=oMtemY`vEt{`j2v%)#3}!hRY!&U6zUD>=sl0IkH09qTx!1K}KPE z{B(LO@IZo)s_klfYQq;nmcFdoaZ@746nK3RO)3aMlxl4V&5qKzqy{$$GDDp~>9 zK%?M~iMfj{v57I+c1??EBW2YltNN;W3QIy~VxdpHtBdRKUEs%Ut)AEXmwZrcY^df|KEJHXW8P(cF56}1O3*{QZ_8aM18&IFHmjx|vqlo7 z=?95HCU}g08YF)YT9R=+~y(HvKHYF@+Ew*W`eMns}cg);D9MtCH*F3rg^NYlsDM zi~%4%1wy?}dmp4CzQ&XzmV$&9Q`qPt&r&1hf^2l8A<&YmG{jg}tn-5!5AlH=GrMJ| zxb-QsEDX@=b#ob4D+bl*F1!+jik^P3hlVq6+C7U0T?>)JbghNt@1c~iI19^86$ioj zHrb`^ri>dwW1p}tWt8h!v;1LPh ztv~E1W@G6)dSdi2_F+psDc*pa@UywuDmE#qFSA{2!j%{MMMmlL;SyAqWq+!|G$o@9 z%g;Vke}m36xPKo4Y}(6m5Ln2@aYURK;SWFo0?3})N*&WjavR&i zWJQ|;qDEN4WQU=p1XlnJBa@0p-w<2HPH93GlB|04J-WAMY@a8q9xCKVcYZLE?x~dF z%Kpt%%z@kHJGu^>Z!1MQEI+7}X>qkOnEp6V$wcoR{b@Dy(Ls8oBoWGiO_s$xB9&e1 zD2sWyNJPgN3p=7`910ZQ!&Y5j9Aa;s5R_Q`6pNyAA&GW4ygqeH`aCyMEk`q{^!dZU z1t>B3=V2=|^Z@(ZR;a>Bobfs}S%Ave$c!+|Tkl2WH98>(eafuwBS2M(H2k+V$Khnu zlB9v6{Tk?maoCRWU3QGvJ?DT42hjM{0WV-{dRa$5=Tj2t6@S@a?>?tj8E|MXplwI- z6G+8(Ii@IBOsB$^JEkaDOh-y`OhFmN4WuI_xlSW&O@5xeoyFXyS_Sg3ny~|bD*1dN zF{*>FeO`(+aYpv8a;#p@q#w>Nzo0F@=Ve=4D;hJU5JgtbdPR4%qHU~o?~q7HV6ZWP z6%E8139M)U(MSN3fI~k)BV5e2)v{Gc8ipV`&%4oiIx?eNwnZ@Gorw0O8Sg_hdCf?K z)!lS4zx5!Ru*`E=QHA`wSmlffON$uO2P0z1f!0uq=wGcw=Lff+1+x-oi)V_*DdFKv;EGE+Wvoa{44mM_GP*5Fg*h>ZlRxXW+*gB|C ztLHI@bYUxOFB)ei-1!vBJ!<K@s(2cfpaz3+~0i)9#oyV>HuXVqIDZ7y1-?V{oBM zF~Q(Mk79zsg$~sT>dI-lBDk;@z~&spqx#hU9b`ItJ9j?30S%ipSE&$pAVuf@RGJcs z3m;GCCO24c2?HmT2vp8&DOkW~)av*S0n(QawaK3zKP;HYr~jj>BMONKnzjNwfq)~l zrK@~&9O}2vJxit;o)Gk}&R`N$E9u=l9JA^Rh!DSTG%~B6YdmwfYJo^zY6s2bUHqK< zW7VYdp>U#usg`6n*c zymh3YBRX74^<5tCw5JYF^Y)~xyLR&p!*O*+Q}l`$*E39AwY55{8I(uAlqpf!fMIM0 zOWGIeBZi@U=a6BaOJR4|(+SV3lv-JT_ zsySP|V2}3kJuKKGjTB$7i;Wc42iyH?(hrubgcv@8>@KHDH#N>S24~YEZg94#nzNDq zLVjt^HVQkm{GRvXoDHgz74Vneb2F%hf@A5S5ZWxVH8oTz&hqr)od)Ymn zrhSsZ%E>}`o25Bn5Cw)ZRp$V6-42g+^*q+K@>o~KW2l4DOBwh#QVkv~HwYGt?KZ?z ze&(4>3#^3Z6~#gMdO(uJQQ+n#4!#<`f$&3Tn^Sq*Qkv7vsV?#~QQ{;izS#qOG;UeW zIoL%fU(UR<=d+&eO%GPeY!gsZ(8?=38;?^CR^BMUk9oXffWA&qGl1@>SypIBm@YI{ zqf5}W+wnhkxY)|&8Hi{}g8#-f`8}2cTFel#HzN}s(DGpKLz9fy;%g)6E*VmG_-4wa z^a>=+oPsnJl*yXcvBc^Q242^M6O4sgo3LDS>5yj)#w%W@HB-VgpeKd4-Y+?BlT1X| zMT&j=`sv7GL2>D z7)j02-2vCJm9$0DH0j`Jaw#=4)lDQ7I@R3qiIrJQV}JZ~u{`YD*>^aZsu zezqRz&?qOh)$<$ZD=o$pr^56qra&y1UV0u=oT4*2QiKeF5^V314R+AcDX4cOz>l=X%vtHIdknk~5H)uLYor-H1!zVLkb6?i`TQGG} z1z#9cS?_WU%KT~AbcWR0q-wH~`&jZh(>qi$4MQ|u8ti|k^A?j_RI>tOE|tYfC`ICaYKd_rSfj*XmKzl7L7 zR@7BY#hTd@2-UV?Kk!8$twCMC3-IfR&4uGve+CyxH35K`mSfztm&7=qui04lbZl~S?8!t?chEE|R;+rz8v9!8O=2`|N%(8i zlPQ9+qN|057LSZa~tr{J_y@8^jJCvD!Wg9)V?B;$;kA1n(PlbSvNx5({*q zk7>v>U}Yc2kb0mM_1cTn3+};)aQbtSQJNb~RBn#LfA|jZU_P*~M7nluT)VH0Yxi{# z4d)^Pa!#u5p|C>|Qlwm0f?9Ohk&6XZBbT|B*2raB=k?s_GSN7t+S86R-Ig_IIdYXy zDX15o((Ve(tOX^`_Bw>Z?AE(-YpM*h?&LgO3*A;2MNa{4l&3xt1zi;KUjroQqA-A% za@+)6)R&lY%u-+ibxI9~quE;02VwtB(vbLZ6h}su&E>=ovPJQOQp;DC4>(zCz$*+n z|NoXOwE9fyStd`i27wrIMLjtctB@3EeoSEV)s@~m2-DrZm_Gu-{&OhF1 zADObUPdHE1ANSZtW;kB^WCkWLd7FI%A<9T%-9cMz-fAC(L$xgB>uRI#<2%>h5bSWW z+2E2N>~qipfEMg_kO2nn_B)&mb7*4I#yH7$6r%hmuQ~O0)D)WcJAcNpFd~f7s^-?UOx#>wxQcTH@txtd|Y; zbn80_R0Ct#M`Jb_H38GWoMWs^eeB zP_W3BLDEH4@Q z*)122<8S*=KPxYwm>p7*yEtc+2JoDk!IPn!5jWOBWx@x)4~Wmu-BM?W=!`m{1_p|$ zMguE4(k}Ll+{>sE0;Eu_CX3qggG4)FcH|64dDAU?Gekq;w5o!kXk-+LbApBL+B z8;YR*qG!1;U-Dcrg_8!-=U7usZM#3 z0|pv%AUhblt)Zl|NfDUG;ugACIy4BXe4Jx$LL6FWug|>jQGvk+%~PNMcKl zLQl#S*9!Xvyj;*?E05G^?~X}#)=8_k?iY0wQ{G7|@akwyW^HeMv3|obi+%98?~dn; zd(Do%#?H#R56?Qs+>V{h>`3GYFu=J7-q_I&QcRI)x+94preH?uNNI=(yOjfJq)w3E z%5ix14teMt3qa-Zf;(=(z_o@Yy|vBX1)xdBlSt>DM;lzMU*>s)d|_*qWo$b(_|ssV z=tVh#q4NG(YJkg^W!)F~(P3vWFQoD{F%=o0oFjFSya>6rPC9nnnXvO_A|dLZr)o6v zM!H|wgTk-+^1Z!H{GQ-fKu3(=j%>F5Vc{KZ==5F>vcM??gd=GQ@<57gv6AorZ~VO5 zg$QUjY+-u>>X=uYN~P{!!j01_a9t4*$?QfCZ;h7)V^ksQNCEZ8& z0`W7NrbX+_LZPYHCdIFh_5z`kC~8Xb4;Thdc|Y%~1r(~@?MXW&1Nd}}tum1DiO~v%8)uzjL+b+CzJc> z+IMf~8dJjXpnrYey*C#-BPfp}&EHt`r$NTyT}6Kaunv^3FZ!UDDsVj&3iR8pi{dm9 z_=|aMhuY#0Y5M8SN{klU0AS{)r=4VtZ-v`!R>%rvxjpAVu}Mhhs|EPEm!8S^<|}uU zRVuj*?f}J#{)E9>4txv44eoL$8VPU*CclvYcL2F#LLUR(Z3LPQ-4~H!cb&vp!n@Ex zga{e1}^@#dgK_v%HtZ>*G5(TfU~azJ3>aFQSq&(>tkM zG_bx0^^LrX2G-W|?@{Z}xq1`fO}vZl)rPO_yt83wYGRzd`z=cUY%vrX94M{{PwjZ6 zYFgCfH7O!VRmV<4^zT;-Ai{GQ3Q4W@A58uT&-Ye|8@3d@;tqB`vDWAv<*-om>!%>m$gwM_>;{Fkce^d~IV_Gy=CTgl>|&u>7z{6HhL8 zSY#AtZ275!ycf6SPDh5bIntwv2%p&qoGq&%114;Z0@hkQWiV2y^#JiAa$E0`WNR+& z(qe)P2xib)Q*P_6mfL!9e6Nk;dtDsgTpSAn zKgjrq?9{2A`I;Ut=n=`JdYLb7iTr=rd-rHduCuW7RMk26-gD2rw@*LR-BL?(onzU) zo=7vzj3Oz<8FzKmwiThVXU2n+<9K?7{qa~QOBWfBicI$fpD`Ys{N0W> z!?XA=z%$F^Nd9K3(o}cPFn`mTqP*x)9bJz#jLl5Ll}>H$r-kbyoD*(OK*p?F53pv! zq+xsmE^*q?ypETy7xkKz4`u+3#h>W%I5WY;&2cq&oxY8TFb$*-LD=*h><6lcgFo!C|`MCb|!j1AK`;BFkpxa zZ~yCZU=yEBIA>xE_XYSycH7WY+k3VgafiX&Wm)CS8^P`$tzXs=EnlAeIPjiprrRZu zCRcg%HeO2147NUMJ|h1{FlY^AJ?h=NTw9EhnpT^$ka$3^T~Ey7aQ3Xn@x?v_GdzGZ z0Pb>CPBAeE#7^I!vq^>BQdMF{vjKy`bH>CMs~sX_YZcZc&)FF>=yg4`zGkK*6t)cb=Y0# zYQ@{B8;JqcCaWOAlHo}sweEGqTdx2Y3!<-AKn~6!7mq+`iq+c1cZXC{AlQx`dL>)% z{3To2EMIN(sYX7+kag{2gNL=2!9e&N;$!I|R`gy^B(vT_GL}0f<94Ztyv*xtIf&t| zn#E16AVGvo2xFgQP^>+ioMj>fehzW$EN#v=BsGZR%=E{ZpS9u=y2xv$>n)9M-f|pMCu51^uQI zLb&ThvFHSRlQOpo1&|Tu3{D0hWZYD%dMyyGZn*?-2-W}oD`@3g=J>B`N8SvldpK9x5TW=(xhw>D!Wxvic_!jOT)JKC$ zUGSP*9$Y2HJ?T>qg_Rc`j)U1&W9vM4m7{L!*kZ5#i=1lL?k9Mg+uE>;;45)I9&1o_ zoE=f$27`G}O4<~&{>zWJcl3WwweB6=y>+W>=(9dMZroGTqZ|>xSMaJK>7ux)FPLEEPr02ZhfGI*jy2bxtzW0eI@VmP zB^OuMxHv7Yu5@i$T(S3fSdqsR%V9enOCs!8v#j8X6MImG(N6jV8Q6|A6(A+sVWtA) zXt&>6w1T8<2bkVK7Pq5I1vmlPp``*_2ipuM4lWPkn7tgnhZ1M(@iluLzpvom2LId# zqT(NB(TuHsXRqboEnFYq-%GfDJ^#*d%@)A3oB4Hfo5u)fUX7V|HGACO7F#p^-Lk$~ z;U2paJc!C1^LT6`=GDCuq+97(o~p;!4NjUk5m#Tu@s=LEe6=S@k9F5y%}LTooGa=v z%rJW?UQIr@mJjA=>1PY>UrLaJUp3K7J>gtA!aH?D%$9iIbb)ZsVM}KQY8S0v>h~LWA>K0ihU09xjZjTodzxT!`9j}?=io8k&?^PeyC#&=4Vl8 zss2IZdDWb!tR(tjyJ6JL%H>ci=`6|wHe&UK$Onk}4|%JTe2~1 zr@Wtbm`aWTjk`$)0E0T_BaE^+CSTZ^8vk4kQWolGrHQ&0|+W~h*d=TI;-F5IV4lWH4HmPr3wDs+~ zzCN1!^g7faW*IwuEwJ<8UT?Q;UA|~*l-n8*8m(Wk`2M^6e%fMJ2#CGhLA)o?LA(rY zmBekv&Eu%>n9>cn`4~5(GXZpNKEe&$nr@!th6Jv-accgs1juatp=g4Ke!&cXUd0l8 z?%YG|{l4W^x&DGuChFt*6)bG>7c=~6f6-hY@|R<)&-)AMy&sSNIj&=?%r$F_9(|74 z-conR5`Xr>XrDdH-FkP&nt#526qiN&Tqnj@_XgNXqoAD+vODJ2P|T(TDN)j9#Lzh& zyqZfU=r{5FLA2o2o(2yLAJkw4w&VI5p4@a6^WI5@0_(^b1#j%k8F0@ge5#StOaKSw z3i*Uu4o9=JLhL*Wds%gl(e>_7l?>kNFD$8}XDn8pk6pxqA*ljd-=qkswSLfwb+!aw z_xnJsiaxAeK7nf1H+ast5cN$aoUdCu?ies_x+j?=zi#aqv_>Zvv>n}EblQo}_>wve zw|CWN{)mR#k-Ty-5~Fe#90@RF#<#MlFth8|tzDM-yWsm5rN3Erd|g5wijrD;{l##( zaDR`aUM-~7i_)ts`5ZLu@9Gr^78mZ-VRl>zF`CICYl*L0<3UoWo5@2pN1@Is!czxT z&QAp423^d(Pdf8736q#RIW?6%aq3w9exfsH>g7%gb2V;$F-({fS_8}V3G5d>K;>L! zve#gCm9OKzxP5k%PMjjdPmMEu-JA8yOpTg5Y>2D0Wr*))MK#OT1m-`Nmz%a59i4=M zGDrr>fYUuaSkjFI>GDx0&sW)xndX2s`telDD72XSu~>32_C{`&F;4g*syncI2ddQDP7s|(_p+s0^MjxGflmx>VMn>y0G?f<=9g(^9I0Q1 zb+Ps~w`zG=>>Ns>s-{OQt~$c66>`V%*56paEO}n|2^Cc*O<)(4)Zu6tv|AVyCZ5m@ zzD-$t3m3`Dk~!l@XYez>HDg+fwTj`lz)whZqOP6=Kp1c!SIe!%fg4x@_!UqQQ+3by z#l?4--wsVxSEL6t9j%Q-qBaLv3NVT${KWi=w)Hz2`H%hg6ZG{A`jvtifLtcxYNuqE zHJ4fSWlmLQ7}!+9Js+j*R3Xu@6+L!w8Cy})i0J~?$y$s(3p7|_@0JtO@8_y#Ud~mL z!+M??ncGNAYUhsKF-dT9f-`YE7w_?cE!d@bLWrDOX3t$aSa;ru!D5ZYEZ@OS0&t}K zu&*m|O+nET+-8bhG5RRB#iZYC!G|S# z{`e_y%AF8YQ6os3L)o}ganE2|CdXZ9U9~2<{X&Wx@i19CG)XIEl7&LW*C;1AusjfQ zO$xwWle({IFg=_^=))@G&GLP^ex$i$HGVlfUmGyAS@>6%&eRWkDX(5B2dD(#(loeoi`VW z4HNUNOMAnG(&8`0-%ThPU*Zbpt~YqAsU6b=`p6gt-wl`2Cja>U6=&F9 zHqKLgMaZ?aGuWwYE__Fn9f`8_GmHsgQrwwJ(~)r189I%mX-g-Jx(ad0%scA_C2CZG zBr=bew{hy)?>J0}u09~gDjt|lBrljYJ^j@ScFy&42%PX_U6Z6`k_BRsP^y}|zM5o` zc?nZqt#f~l56H<4DTGW=D(|jkieXqa&seV3opyCYOtmY(({{B1)vmy4%hkDCBKT@| zTH`N=0d(&;6S~@&P?l0x6I(9dc4PHsoKRfd>p5>%qq(~I&(*Q{bv&)!>~7fMpJMv+ zAzW1sBFp`k^MHM^^Xv!YzFdlp%IV6>m5fDh^W{l0zC1}rKSMIYdI1Xl0tot>0Gs+J zT;EJ3Em&Wkz?v%Z!^b@6FC^Zo?pi0oI6ARSI*%SeUCl1U>NyW|c$gUI!;hZlfHQ8M z8=jrM+CHp$RtkTgDBH2<0DfpVFAROIHt$PMhY=(X2PTI!L>Wf{AQ)3XoMRlwE{l@^ zEDKVw_3GgvLn%LB;S{Yq2Po!hc7Ot;g#&bjm((PRbxx9S6LEe&5@f38SZyAl%zfA& zr|CpDc!nwSAcjYKWh_~N!d9CP_R5}#4n7r~mg0axlsw%l`An2NvnUaOAHc|do>m>s zc~hgK2fP_ORz$x(!d;oQ1PI_R&g6<`ALDMA31L+(|4^>$`Rc~&}|Hq)NG@vU3ku^>5r><@rHG>Hc^I25T zZs)`Q%h(TUS$g%T2`a17@l9#Zdov6vpT;R!AFXC!r@kql2ZeX{ygXvnvhDLkUWtM0gve~ z3wH!Zd=EHRgz1{!ZvsL`Aww&Vo3WgbkrX_U7G7bV9*cpUKKK65K3kph^gF7wNdgI7 z;Z!Rm*c%vJ@;5;Y9?8}m4pSVSmYMW;+BtDJhmNGlPJw6vh61U?7xuLZ#F%1udh7&D zz&mMhPo=%8h`00#KOTjWgcB)38}TfzH_PYJ7q=Nj^2E|feTplO=?y}CFz1B;xVNXW zhLlX&OTjQCU);r`ud$B*Ixcran?@T6wdUNpCkHdWfmNNL;7OO{M67)1@mwMNBm|x&k!C)TIbr0n%vN+tEB4pSl07*x=2SrVFWfb6D#*LF} zkx^^4nLF{$NngBPBB>9qGWUV zzSbS%?=hrw-YE8l1;5`bxXOa}0G9TRms#-by@Km3_}_X3f8K)c=@np2O|_IZ2Lw>S zSDX~=ks;A*csF{its92~Lo@Np<2~8H8_>ugj*Aq6aNRY71A?Y#WQoVW|NLP3K?B)t z7p_m_dzXshzU1JklKqmz_u_A;0hno{DvJREtWp7$%`Z_^Q%%t^Kza&n`HxVDc}`s6 zZ9qG|YOt1GuOP|hT|eL#33cDe*@%8N>^*-^`y6X5Ki7&H_$HNJH&~ngP`O6%nUd^( z0C|bxG0UnH8RK5M&%OM(y&Si_OtoG7+l!6l+wCd)&Ps%BPa*P)_6v7x?$^)QujMbM zUw(VBetnPqT1x$TFhMw-0df&|!I-&UPkzzx^4l+|Upfmf(l12+Mcqu!UpwO6#Pq?NUJze?}J`!x8RXc5Xj53IS1xl6%+6?iMgKcu_-*v1YJTnqKJlN0`+d}oD!Jbo9IwPq>3a`s z#L&Jh1N&G3#<%GmTB0q`bn7-W0r2qP7SL!OUD9%%^jip)w@A z2Z~LBDI!G$BL96NOa)atJ<;-!_M)EDFC!Xqp(!uOL@FGolFfC*BH=`qJMO>NMH&f>_r0BfaOSSvAVoE7Z1 zI$$u0M$9M8=RD?K1>3&N&`Lnq@1+D$tj98u>bDgGNih9KVYx-(GP;casnU`{`&Swg z>(2Xo8Z0ZE;=dRSn%{Ve^M|sS{$*bthm(NrZ&!C!-fhpfN0CPT&vHHzuY^>*$Y=0U-{bssK3TBH-GQcbyHk=nsS8ZXfebnCyfZ zFc~En9AM`#5IPM!{*y_$eqZqpG?7P)bW20x81$q5W;xutcAkS5HV) ziqg`V@)X_~*v~@(8LR)$-kgGNrTj=X0P@xV2})IHH~$p@{qtqmsuWQm-)G9mqC@#o0qK1<&zQstsu@s>O@7gDrjQ?ILW*9 z>ID0P^mhk|WT5s$MnyXfPn1Aqt_K&&40@4#aUWchk&O^f$Tlkju)y)e!a%l!NN+l1 zN1zPAb;wq9r85FEd_FCF;*7vu0L#P|n5XyB2uo`2s>kBSpgBvX5{80@2f@SS+Teoo zG(j7JUD$zOu|urZ6J^h}&LXa1>#ALS0632KMf-N*0{)UCrUM%S(LMQS+OZmDkwIc?1JewbgXHkXMlR2xc6=}g`p zR0Hdlie~Nl5)x%7lp;17nAnoLcUPb=3A5LzrT zhR4s&y)!mSLYqGrs6H%ejKtj!U1%jmv#M%qK9nzMiGw~N6eu*G35c{BT8j;=(xhhs z!Wk^Ivhrx8Ug1aE2732Qz)`qCD}9POv(o&i&6oJLqvhcwzp=e1kQg{p%vYO?7*Z+t z**x1k_bBYoQKX#O+YF}PXX%xkJgvr=G(W}fHT*usZ(UDLla$CzZ+57z$T^35;mfB{ z4rXu5IzqtXc8_M!9@=x~HA73PazkUfm{nqvEd9Xd!n|QYO<+@9t0QGxZ-~xgwt(#L zM~GvMV&y7;;+*@blY=E$0LUiQ4(-G9jC_9ijn%2#8-DA{AJP1WUN@?uRKB{G8C=5e zsV(WYrt4?cvHM6f zLjN!{!%cWP71Uha)LvMRllWc@}5b%mpT&4~>)P??PefFl{#~?C;#~zRD0YTb~s}Oq_s}~qke+7k# zF-?*$FUFJ%3kW7++=j7gFG%8L4e9d5V$AdiZ0}tdQ}guODYJnI%~eXVOK9i97|UK0 zYD#9h#67%YZ=_)wN_jhwhU5ri$NeN-V89Q_k84ROPg|udXQed+nWqt_ukVXzrZ0JH z5Qq%ziceB4r=Xn_Ql{0^SZ_a@vEx^#jVR8ojj|jRl4oYIRiy`{|N8Y|4~nU!)idk( zhF48kp(U4HYnN5Btf4Rk2!fQ>z2X>FZAfQMyQ=OJLRU3{rmY%~z{7f3;)m^QW!kBY z@egu=JtM17k^Q}Bf|vnCdLb&AyW=Qa$ZD0nPk6(=hOS~K6SZpWVZt!mu5xs8bQOwP zr7$J%>FOzkLywwJW;?$oZ1mhi`Nw`0REX*xr=62jLD(Y6XP*e$-z`Yren4aj0M)rbp9|b2cm0d zsh+L!3J#_p__D4JmYI1sPH|-m!R}h7vjcW&7yw+Ma0l{wl$Mc4hXAB&`2%??yO76h z{G!N%K6}XHhykn&khkaPZ7dI;ZJ>6LHU2kGkpyGo1x=4LO;4$nc8+V;K(%L?+>93( zBk0H{Yk@HqAZQVJRC?f0CeE;cR9aB6d{U*(&G<7*34C){GvV#GaMWTi>#$Doczg)X;G_AnAI5aWsw<6x-xRY zqYDh6KrGpb0&F>0NT+P@(M| zX+HhY^H>mEB?Ds$x5t(RZ3j}&v%w9NdeZtlv^Q**AKEQXHFa*8k+F`LLqyZhaej{J zVFoCvH-}Phj_&TwB+N~F1EC~yhjsQj-M6WeqGH0RA3A2;OcUt^E%K89%f<0@pHd28 zKI_APPnN3=PmC+%Z`AfLhsBESG)!ULX~riN`hdwFXV7FivN3_vu2J)nv(vwgsK$Xi zTUC~L$$`btAP}CZQd(;KAt+-~u^M#+P2^pdJFULRIH$bN}ByKge=BU-cPB`P1N{I-Q>LdM9hT#6as@>-pT`#{DUp+suUsifsB$l&Vy?jOgQ&(G zQK2pOBC4@O#pGS38acpYiHhBA6}FMw6hu`?R2UE0jk+RHc}zQd7ObOUA*u=zgQ(U_ z{0S;nJ+rNoL^TfMy-!p@VGxzmJA8kMqCy6&C<Eo*KQ|vxaFHgTA1_rsE z0(#E(=Z2NiBt>wTxqgU;pNh2JUQQ`qh3wfVNqW zNR9pl+#FLdyxo65D?_%nr9mh^MNKx$7DNwMQci`Dn<*=rI>|#HB~uWk2VjD2NUMr3 zcv)7u^57B#3V()kEQfEh<5pLUfZCsQl7IX?3;(cyC^lzu3L;8=}<`^>Xw0S4hGEDVwc8yqzB_loLNV?HL+71MU0I=8o}G=Nf`D$%hff#`+i=m}=mE&N%#^$t3V^<6K+OlR?IET@oWtSKYo5wzkXY^gV z31Axr&ab&*FB7BJoDoS^A_n-W=jCfz6Glb7fkHl7Dyr_ZNeCoItny!NlpFVzMjudX z3ZRN|D;dmJ+sJX1qPvO_g1hsTh#3R+6;}9lQRAW>#F5y~N6=7;KOI+4H7~b5w-LokK-NWIXE2U)CYmyk z5?vC_>}2!3?)7h-OkLrs-9sX}TT(goum+PS*UrG0#tTAfb3Qa~Tk1W(ZcrPwX5B3~ zVHca!hUK&Q3a6(zO_Pe^Sj|^H?O8-+eTK z$!|~VF!Re)am*^-Vg-zlygnp7KPE`>!?w0f0KaXptz_&6gx745N|<8jN^qE3NjL!B ziqf=_iLON{t{r`d*0x?03 zw*yd7&1-QJ3V$E%0kAL}6f7;ImasD07u$ixs#Uw62D*S2&VoIlrBe_6Z#}G#XNkG% zlsN75>(*GE-j+RJ*@!Y6cstt*zyicwfMp`I3$U~BpS4geBwOUFgvHiGkkF`ICAjRso2FFivacrf;!#F10C*Nb1H?Z}U<07B&g6{tMQC z^tx~ju<}xDpd@cm?cjg8v3jFd(Gjy#|4QHn`Hk#7JVOna+C~%o0cCPaZw~&7NvufI z8`!rXI`_sKQKbl^fNTr@w+OwrrxnQUKqXRBiWxI>#&b?SqEE~G1FlO1EK?O3U2PSL zrmhN@rL7_u<}QY$vdM6x_CDO+?&b;;L#44R2()s67gaZ7|12|2A)2e&TMBz%)ZnC9=wizKV z^$AzV+?W;*QhS50mlv*6dn{L$h6i5(2Mt?iIFp|$NP%paG^hm_Uxh*n%2 z8i=8fXmPu?ML~rDAs~z9pY}_W8?~vhG>YcO`%hRAo8JG)t`wXX%~RcNNIzd{mK!kD z{B--|M8tw9)y(^smQLverJ9&2d&U{naPkW|IR@Kt8IXq`(?B|-HBALOaKr$~QRMF^ z4MMfGB%+7SuYc^j|EpUK5i*gQm*Fy{^fQ!3B4ClAGrVsxvB$Jy`bA$S^CbW_i~u3~ zar`0wiv%)FzNWezuHHdTA zY;GkNBB?kOBkH;*>;V_fMS|y&C=t^3n_LX-M3Pind?Y(@wGMFO44tN6bK)$chLj|L z;+EZn`jNNsF#2Ql+v~O;QA2nruqSj|pwG7ED-p>C5ej9h!IX`l_grgVlYeMnaRlfR zujpzH_Y8d1eCEfp`52z44;LiebdVPnO_iJzy3%4xIZXKRZQyU%e0p#Tv?U1|$our* z>%qdwJHitS5I#M48zEM-veKpjF$oPCw)uIo=qHIpxE)~3n?Y(?E-hI{J zt<IJ=p1H$;pHKxWqLoQ^&M1K!F!1WiF-+e#V zFX8$RDoe-j<+Yn0xc`0=dpsj0ga%3+x!kKeN-ggn7#7i{_>~)2xkr2bT9vQa*!YDWQ#zhBk?@F^c1qm=uPll`89(+>mjb3^shAn5@|b(}1W z258>itlV`6mn(P2olow*BpEh2#VEuO?%dYsuj<1YSmZy^ElTRe%kbV#rG7H5~Vy~jJ1-{MKUrN4UY zTP*Q!-(p#Pev2pZmc+g4TP&q*-&*b7;z_(E#vgVm_vBM+YQV3U`3{xipZQ0nQq|zb)ZuevDP9z-=L%tk9AI%$`f8|hMW&m##}*;N4Pl$%#x2w?+#q(~ z=3}lfr511-MX7K@h%VrEkxv6|+ds7)TH8wbV>H8LA}oa6N$*kuyCa_IQYvh+|F_9U`E=jfhtgH~jmuthz|ha;sxPtSod)h@Q|fXqHY^BJp|9 z>X?PV+ooeK^63s)8G0hTzvzcZgQh{ma~5>DMRbg2Y$zCL!+gg0FttVQo5m&|E+pjQ z!={svS;2rLCc4AvC$R?j2yIeBY5Z(TY5ZQ(5gXbh!CXbdcRiSUayBquNzt5EaDb$3 zFkg;1+~ngO%(H4+=%+s|FbC2ecs%`)vVIYu8gl*FKZB}Jg+kG35oMBqUo7bU(@`rY z{*=;eGM9{i2x1ILy%!1KD?}`Q46{@}UzkpMFfc@!Mp1Gkg)Jf;7w#O*_?0>C81$R= zr&Hg1qYxR2alVkLMUp|eaFyVyn*QTR3k!vvm%JqtN{=vMO(dblcPj~rEI1)t z4&~_dAE#GVn5itiyI4HuaAoT+4*@T=iq3fvV{0b`++uE|$&^U(aUeyU@0v`xl5zWF zYX47nOr~NHWNK}zSxu9vQL~Dovq?8VvqcjA0mEvZN%0(PYe2Oh=9v@+6zu-6RdjlZ zdow8sSZhk!l%6n~rN(M+0><69AYhWSAu#QqFNv};0R!ymUu_B4m2&ei@LWeH0lT2C zIo>1SFP2Z*VRfzOX*;gZkg8h(M$KM~fR`oU{v2Rg0%pOY)*J*(JTDV)DogL~Nx&wY zz~?!syk|9-R*uy`Q|5rQyaL~Bvl^C?rMAKRzj^YXV%e6{cUO}W=|rTlhZGm}VES`0 zwHr)7L2|<1TrQU49H*EnmrcB+#q@LKd|CG{(V7M?#`KdV9>yc-0&++f!v@cFT(Sy? z^adh2Z~~2#XU}dm_uQ`Iz2J6q>j^fvqPi)dWt*n_&1kExZatCfq+`Eb`u6lw<$N^# zY?)4hvR~;xp8RSo$wSUi7r46rcYYj~DCcw2qMG+WdKtw``FM-0eBvLUsIu|a-r^Gi&l##H8k0Y6jWvCxaHRKm=6{XuG35O7wE4Tu7k)cx zvfq4l+v1bJq3_CZR9CV}#2))WBpwFrBOi!ZO7p_DdeVV73CC@3g7ikzNGJe+%|N3@08-(VS~ z2tnt3&(p*Bvk4U60SQ!h-$TVDw6y(nCXhM=E##gs`V53A0E-^4P(aVkGq2zvG0)53 zLAq_ep+P-ErYB;$N;PaNflQtiP&bEm#tOw{Uq%zR53h)4=(%Wsk4ej&{uaFX7X~Hi zQ?T-0oST-|7w`;UAPr$v>IrvpF?phdtJ7pU5;1~&{ewDKJ6Kq6{HJh*tQFLQF7)Pt zK#Id|xk;_kElw*<=unT(Nn#9-vnt%H&BP!`PU95RO4J`DR4FXMysQqi(8<@Y_cFhU zS>$X#%naW`i{W)P*j6ISkoRRexCu42dg#WZyp9E@DqVe|2io*zu#$(+AU3r^{?uVdqYy5%m|U--!T2Zw?0eWwDx9wS$2U-bFyVg|F=ZCw|0BELRk|SUf8rNibskxyFyHDZl`@ z0LE8IdNBQb)t@7?aA|GL22Hr(>)~tDVG*G8_3NW9!~`^2Xfw&p&^A6YW5VA-G_-cg zoHMqYHX8*`X(Kg5-mrnl(JtB#mV*dDeXL9?`;$v&0Ry1+w~PeH13;ihm&tq6r^g7$ zCU_wP4U_9Q%+zOICigvhj2y>4JtFA&uBAuBzhN>(^@1LEFQ*~<6tgM`^hA%g9rRc& z=+U+=MvsxB4O#9%k8(R03d&5rsaPVnFJ<26u0Hp*Q1n+@6r65tj9Aq-96{lkE^&p) z>*zKH%Qe#irG436Be8XtMR|#OZ?BP)(|kRd6|hsvi4NE1-ZszEXNxdLV|`6>ny!{M`Tb0USuI@Pe28;KC$8M*kd7cr)`)A=0_pK+xnFR7CUa$LewU;``w)SXYX<>HBo zd+|+vcQE;Bqq*J0FJZ@Mfax80zH?sa9M|xRzv0mT!BC~}_}R6UjUqASDZGtmCm1$Gw)KXLM>R@r8!ecyPMVY{L+BB$AU04yNix!`z{nrPbbW)?o(c%d1C@gH znY^JXwSk$#_l9qC1zp4QsZl$Cq62wl5#qf24nuGxK><2FtJCE0wl36z^Y5fYo?J3UI9<uAcg7pi#Y6^f_a-%&K-cXoKOJrB$&Nz1#`YmLrCR8EV(== zCS5C-O9_W8>2?Gc2X(Ors5@!{NUagHk}^laxxE94?Rw5#1fh{^05=3Fvnzs$1BB~x zUZ9aY*~rdic3&mafQRA7xssnpf83>77+9;QXN9mRPKtgX#RT`YLY?N^K5S=Er#f1Rc1uKFIqA?s1BR?G`Pp&9BtZJxFRN zU+_xBD{J@21HL@Er#^6&WdEpsd?$&VhkUupFE8`T$~_8WUtW%v@%-FlzCCBsd$oL) zkFb2H<4)Q<+l=plb2-7jy0d0471Uj-oTrY4aS?d;z4d$QgEk%Y(e#vCUXFh9vQ0B| z_haUYLGf~QYvM|=E9@nMKRG|(N2w=ia7)oX*&wOr5^&mcT8+=i&h*1q&uI;Z;pX5b z5_G6>lD?+*jF!w2WHO^0`!x`l&<*yEFafAuzWr?T-M{-SA0I`%jJ567n%#=wAiQe! zY)#z)n)%CW@g==v-D_88?+LB7eMNHBIK!e!MeAYZ*j}{(OQKDC)dsxj`(EELQhE?w z43M%kECyoV*8&#-00t4gXQlF@_sjS6TI-dArWPJ>bbT!MontW|vwivwZuaRrWV%n^ zX=gq69WAj|6Zc9;;CfvWZb7z3-^cs(9Y_I>sAie2Uf!XSRfH1AUNEHZeah%z5sU;R z?z?lo7F5%F#<&=9&=-)uEOi}@sJOqW_ zcjq0!(D}hSLzC<+o-E#9q8N&f;#B|QSsDRqH`Qh9N{Cz`3g*N0 z&K?!AkmVkorB8cz7FON6vk1?fogFWR0+#8lswl9u1G2y!`dG6RY%gSKFv?nnSPzu6 zMekgHkhu|A;A?!J2@{D0gMRS6-|@}MTbV?#M;1l&hZ^!XnW?dOBy^!+M^fEnkT1U4 zfOZ(eq5uqOenrEI{ulyG*aIu{ju2UV0@?ted#^>`*=WlbqVIb(nS=-ox2PdW<=oA# z??_l!V_VNBi*F!@7;mrdshYO$2U8cK?{FC&ywtxv`rb+1WmO%g!td88XacR<`VRR3 zFlz_Ix$p3K=$viU^q`*lz76iFn&>;*gCEPNmjN&9aImZ(#M#o~5o%9_z7r#K6O4fU z1-Kv&1r~T*=kq(D;~#p@V?R9FLZ1giX34buS(3wUXb^HUM9kt#TG>;29OyA5;4JGC z(a*#wi_Z~ri6OE0xAmxFNCv*`0bolExo2l#@FYF<>@4H&b#}Fr9-59KPDsOZfjNM> zv$Kgm5p_E|OT9^Y?CdPv>324S=VI_l)IkAzb{5dI(qpdiSJWDy#~_7cSf5uSpAT|% zfWOD?0t3UZ1Zb><6GZ@?E7DQ9cg9_m0^0&cJztQ=@UJwH@4Rcvgi{%>S#T82dTWVe`k4$)v;e^ zfoHF?S9YCcn%Z?10%9AoJv$4W_U{=sP{0ff zCOuoxM9e+ktI4D%whadKh~0!$>5S157Ietbepk)XqNC6YC|&ROouXdfIkvIuJ5=E^ zw5WJn-x)4_?{LCA&%R%%QRLXRzJqKUwRV{%H8GUmiF;Yp^}Pr6gez!$F&ubR5cmZ= zcsNxzL!_k6fQyy-plCn|(SB-&Ir^f8Bnz^LsAmxC@BaSz&tlO6@FYF>=#F}0@c?+u zf+6EUk|2wxbP^88e4priw0N3PW`EI`CsKdu`O%Ic2^QPmOn)}LviKaDNesEOPk=Kq zWIR}3e8Gdnkb8C(c1_YFo+fd(_%;!B0N2w$y3QW&Iy(~at@MaGdYuI~dv~@IbvrxT zNsm1{OMMsUY>yJ??5LaeZg9!G~hHdgRMNx$)1Km4zk!yf>sSE(qTtS+8V8$Itxy7vTxqHqK7df}Z}MWZkVJw-IH zrY>a4MKUdFozU^z8ogSS14Xzks$tU)$v-M#HK@YTWplfGmH?@s^r>N`vaJUS2{JagZdHfmAt1cNNqD1P;>` zu6U0e^26!rWxBS+P}lU~)F9xRas@fi^q~xr!_lw^D3nW6n?A%_kj7=8+y$pRh0WceK{@(-077U}{mwx?$-^|~wM8QA!$)9~Xe=?=u&szD@3^CJ5%2O!-V1)et z{FR4432oH_7I2)n69PMSH>Yae-h7A+TN5s;>&VzHai$cVr5gSf}x!**a1S7N=SN3U~)iHp#02v@8B-wr9--3KXC4askVKL}ylrlw zC3LXO93Y}dNQ^|q|2>XGAQPw8K|_r`*U3Xj&NIU~GsDt{o<2Wl>gEZ4(uVUafioZr zgaz|=|KB|RbKJ2)?n$pd&YxI^R3ok&GaXR{1O$YSSqLrEK%X0HD9_3CW&H?wF$BB+ zqp|zIY;0Oh%zHoxzsnnGBAEz`lATC@hi)3*Z3_*35TLY&?q=m4*pP*ddH}^k|H@b$ zQoH##{9a459!g>K&Z{-9>@Os9cKUZKMo)J?^RwqU*mnANVxI&m->2s1crDfZi^=PR?QlMon55$=}4(y`VqIuuPf$+zV7F>L|>o0c=uAO z%+p~1(s1`wM<>60@yfU1?%$an*XLF89+%GKe}%v<7BzmLtC73_ zYy9B9wuvN2;`@}T6^WbmDCLChfCK%XuyB)Jyt2IJ#_Fc#;ZJ;&tqY@5&0}7l=TBPR z`B^e_E+8C3!v$tMA3W)EWyHdNb{(- z-`d??=IuFeSAELSaYgg_pW}AT+r!>I@9ogrL*D+fw+Fpto2a7s#qKHFL>0}?dK*=d zVo@|d)!niYK3my%yW+QQdDeWy+sfP6yYBCKyY8*KoHY-7d%#;ZYlRWQqjD} z+YO(_N|rBtg4?mTZ2eR;zvpd?7e!h$zvgXJMQl*?fXuJm@t)9EC{1abT-$QUchSZ=^+76LN2gX!*JUlKZat zp!vcte>5A*%`=}&mk`cm(UX5rO}_0w$~kl!)?UW+g&1-BGfni+?#Fhs<+03{Wpn-6 zl!6okyp~Qs{z(V8$yHL3Cmj)njf1Mzj)A}3-+bVL-@x#Dd~^Q=zd=XS@FCUuwJVgS9}4-<^!B!~`OWU1>9>x^cycl|XCJN*H?`R6f*I z{j2*_9hmRxLvHOc=J$8C>;+qdn`7R$56?f_4)514sSj@Aw`YABTu*(G^~DB&yXfVi zu9m&Vgbd!h52#R4cCP#S*Dq;Io@TO}{+|8C7BYMF0ZG5dH&0yf8`Qxb-#m1|Z_pWg zd~@!C-?-ajrt?hQ+v)C^f76caGnWLP*lu$dj-Kpl*$Y0XuRZ$xp$mQ!+Z*m`=lNe~ zd%IUVD8fD3dFF!Ope$8McqCG42T1f-fgTV8M? zU7lL}r+ve?wl>C{+I1@8@KG+cQk&R?7ovziIbr zW_?GE+sXR%p64_cqY2v&z+}`G=L0Y~3Uk0ZH+r(ne34}nIy>Ds zb;f>wEQp9>FgbxUj-+&)%xYN3XWu6HTbJLkUdE(7jxkted}iKy_~ph~VNrV^-08vW zkVLlOcACR_%0ZZ?U-RzSVaw~)87Ge5ouk=}=3chj!~?*-j$2BcZJKAk4<0J?dOw0t zu0_3~N1l}vgifU(9`jTRV!1Y>^(e{&_1Kbc5aJY%Od#h#_e{#>n!l zZ>+Z?+?7cdy@`TlxCZ)WQMA;;APOS7_U829zoTfKR~D}m2cDs%J=zjoDD6o} zML2Wlz#Hv~KISyeJfs04hXMxL6%d$>b9uW0;=?h}t^n5Gexm3(cQBqjxW>W1L-#aA znyw+gkWQO(qZoJ{H|Ha?c%k?iFVr1_1KCoXl8i-BK0-9a0j+!m_F#%7a#wsAV-a zZ>b2M0HGd$h+h}Z1t1GY25g~0KLcFC z3Aqn=z6tPkvj^?@%Q)*P78 zgY`O8v^T6P);KKCw*%HQX0FpW!fwb^fsLBVz~(fHA+pvr-lq%H53megA6yvb65W3E z3POb^p(IFGc{i^J7P?jD5*vbmyx@#r7ErlOYm>JD+uyQI?vbh`om$Q0q&vviq;6Oj z>7dr;h_sz28M9K!;;gkp+QNM~&S#q-n+9A{6x%>BTH6brl+~0vXg9hMRLRN@v+svn z6i$D_yz2x(QlTRfIi3^hW#3H?V|FbinNoD+hnnT;&4@((nrtPKm>{UR3f%eVQWz!d7f}&CLn|qiltx%8X)}vt zz}P>FAaX$_gQU%-)J+akgD1V?a|N6|Th>(wmyV zF<(Q#l2QJq58unr^i3cBCYD96@lL#(K$l-<5g`)((COEFbNA{&Zam;PN%_(rbLBa@ z8M&^Bhi!_mCtX-VjkNz>Pr(18Gdp@Qst+RUF;+mTCb;Xjvj>mb)6kGv98IQ*0&N|Vq*-yf@i4YL{%j`gO{8{}??f?gmdg6hG+61;(&VauK9B1VrEJV@gF zI*Q4-0Ee;ZRWL2P1oey_&s&Pu;VfU)FQLg3E`pxP^W|ck5j=;n^GOzmC(=Ge)*_^h zHr$+hs>?VTG+~A;he4BQbn#b6a4cYYFQn;kzN!)p2*ttn0W#Tf+11EPvsEVt{J7X< zr|w`L5HfKoI6?M+L2f-UcV8FQ1}81dMP`X*S%Mjq&<=}d2z?}rhoiF>RH#ieFJPCA z`hYC4kyyf|v)S0$2!q;EiOzKm>6Me6+7%un6S_t1v-JTAG}g)&|;}zzOrmg6be}P728c zE?Fl6Kh71~@PF_(I|7%aVGb62-3krvj~l0{3NQX4y4+<~8;OW>!VVW1J5|EY>Lp=k zd|~X27s&h)vE#&JHKB*Z_zLtuG)k&_=NodT zrQ?JUZj1CN9fiEWW>^+yOULGC*dDocTQ<0^c_C*7rfRkT!`z};(WaH-$+Hkz?7YC+ zt(Akg3kp0-Yo};Wm(`Fe{m@S(dDAO~zEc@;dx1 zXuU`u^FB82OU;3u&}SQ+4uE05mg<3OXR*o}TgYRThfWaGrY72s4@sfoaV!6+CX|QP zQbUVcdC&jb^PC3arg2Di3>_$<)e@J=L<=o3VnPixr3C6x8;?jq;=VI(^jdM>88^yc z?mOcqb~7{;KLk_KfIu;7o7U4uVu}dkGV?A%|Aa^Erk3PxVXqJ90)jZARz#(2(?8`l z{e#TpNTT+2#%_XOOu8lC{-m2TH94{;Pr4ms9^Js+JH+lD)6F4v_n2-DvAc(s9b zwHt3Cb(+sEKRrwa z*aLXOs^kwX{do)cd~N`qr%x7K>R5s6GYrDHPAQ&;t^|iFCHWkxu<1^1QLylBcrH|I z$B@qWny*E}(#cy=Am?O|2*+zbG8;oD%gK%K<^`STL&LKa9D4muJH-`;3+K!dbP}&4 zLav8LR`#V6+CSORNer|@JcJS>?FyijI1a2UfK*E8p}SY?El5q=q>X7db5bbsEai8K z6GbjR_(_DY2wxnS%nNifSLplzvH`Q_cywFL5Kr`f-q(N#US%W9*^+%wwp*9t0xoLq& zT6Xxw9>YhO>==G)TE3{mw?l6hNnuLf6g%Njl#_$EIkzx%6Vh5SmGKisR!)Ay-t=T`@q~R``CzXnOz==@ zJ_!@D`^F-yO*|gV0AnJNcC%H*gjq)W@kOtFA4U6oh-E}rB|gk33KHxH5Za@lM;y=| z1)Z=A{->Zv9nc<uoy6Q8L!8y zY{YyaF@PA#>LSM4G4&2Ei-X?!lFl??2DIQZqstU@Tqb8d7*5*%wPfGBcgWG~ea!J! z2eh!b)0-ia19>3hEHEsMs-~)~*`PYrU`d=o(UBr<{%SZUQ36;4O5pj@n{stQRzZn; zhj^)%!g^?m$>hPq9DW@R;^#?Aib<0#>MV)5OL?k1rP$Rv#-i7>W78L(B?2YU z?D83GNK@rOXAIuOa7%G@;7w>dHY{s9&Sy-Y(&T$2KIUZ-F(GJWNM#rQ*~VD~Y_fF( z>4wx0rp`!3n5jWSfKudSR}kg`QnD*x;-(MosYQ_@`;_%zl*6fZq1PDQzpOam^t?*vmYvD3+nwcufGqwe07BnH{{1uTYpQ0iBh zZdgZIuRu4!G){EmRCxCAOR*L%nA>LBse*Rk+i}cu+tNCA5uGjjR0#mnu;CfAOilyh zcYZLObVveYFb8x+5Ct(npp%ZJ;_>bQ8Bg$a9*G0QYBu^#I&Wsahetxm!VhvDKF1>w z=W?fr409q#LMNSTPwjy{K}tsLsWUrz!A1h%q{GQ=oreSZ4L;qi5ZtDCZ&NO`_&i*Q^1kSnL9byFAg4h z)B!{sJT}lR7Xu)eWF*_&Y}4+o9`}Y8vp-Cg@E$lpaDo-;4c~x{3%cu3J@hxN+64xH zb3*50igYU>?iBgM6^k|pz8G&XD^@@bv*nyIy{jM~B8GKoNL+sm?^9z69;c=&&oZ!U zOei8-N^_T~YJe?V)+v7PsSg8s7THo=8*%(5o7ESo$2=CsK>#TnJvy5@w=G+$(9kG5 zOfE9f=q9~%zl2yc`>BenLhr6-JBMrmcy5RH#!d3W{*EZ z!$3o={|{ZgplRC+gRpF?Azg5rG4YrqKk{>%*Bji{rFF$TOqX+|Hm$-V)Hs zFeL#a2v0}tfKCO4(X^8@t&M$f?AGU6NP*+;91;I)aXe0;ee)i42`^^z-VW!5kP=65 z9!G8S1Ao2kb!R=+b7mN*M;*cFtGp1wm{?t?mlDZD_HiNytaInL#Ai%UEn9Nvr@9y= z4{`_=2bMciUCc(IczXb72Pqf|U~bcq0>-E8O=nVvBRO?Maw^miX`Oj(Da=}giv?&9 z=whK}+6tT>akE5fsu0HLY(Dm@2*Yy-L(d}u80&mNR*}>~;sAsN)zskz%~AqsA{7Oi zKxyQRVibUxOUoHe?_S#q~z+slp2u$2FkpiQfD6+>m(zy|wIfHE*mNA= zliCpRHkIx+lcg6c*p>V>%aZwFHv)f1%lF6Gm*If}X@hg1Q-zBB`2r5_);&6WdeT}E zwv!Hif&O=%)-b${$We3hZ8KH+4}RhYE{h?Js9*@xN|WY~(9Dom(mF|TN}`GIEA30H zyfYLf2BzOAX}pLhH+;)RIlXULMW(|NqXhnd*RGXK1Qp`n^??Z28_MgIb(`}Ig=UJ*fv|dnSha6vh&Y9coHzTrcp3q;13W#Do^s!N8pO1Oe2`q`6BsF{k4RZjjQzn< zEK(Ql!fU<`^um-Jq>P%BSWCxxU!h>vT6$z_e;^vwTF5mI-MNEUn6ia}fm!!Kk0QAL zUp*36h(-~{rmwgc=PM^j{9p(xq);ik*edFP+DAao-M`QYT3A^6-ZO2WU#Y!{%KtCsY!OG63v&OEVIEE zmVh{HT>!f;iz8{-*I%Z z9rla88opz8+@~l#LOgkZpePUUcpBhQ2e`s10m&(L;@kLK2>IJ+HHn{)6R~dI8m`u``3v?iJCGy= z8(c&$Z#luoEUaP2i-H-Ed~#DBgB%3ReE3cG&W}2pqZq@-PT%*Q`O*8| z&E?T|->>tRw-UEGUkEW8L8flZ{l25aopK@jI$3Pwm@yy|1x@RgA%C@bRK|OkrX1p= z`AElxrZ_#@J>$HC=5y_{=3~Eee$c$Md7p4I>7p(8f^S$r8=nKP?hGRQKh5>$^EGJc zuAc-&!-OIxVz1`SFFY?|ZsN-KK^j+}$Q7(!UeDEA zQ?(OK9Q(R+p%9VEKAN-)wxJ2VpV6dN#_1FU(&h)MCjE23EXC@+A7YUbZ%I z!L%D`wuPXIXgGNo-kG~FJj2AB?b>)dM{{8CNZ_2WzX|;3fRdRYkj{F&@mFJ31HiR1 z>}iVg20!n?4lSuH?P7;aDjh=vsi-aG!7m4?{1{S0wJPlKbl@CP{#7Y9ov5VP)k|JW zv1z+UPC=_$zr+qQ=vL^YFm8zCX~D+pERIaC%m1oF>sn+W#-QoYruJO|`*Xzl99vgFID&#MC>_j6K^F~- z;ZP9N6LsViyiVGEu^N zm9-h*W?MhN_lL#pT2{L7wn9S<1|=9x_P;c=?FrB1 zo*~_}ctYwf&oE^Do7L$&nN5=#X8e zKqMZ=%%iC0{D7_qJBT7qe0L3Hdh65{C2TLS(v{rgJ4`PoZAq4f5;nP!;EHCH;Oz>d zHuY}qI)hZ}3p8Z%UCdZg5u>MwmW(o|BG@D_KX3C$@l(aax3FnqiZ~!9B&ieJPRUqG zH+s^l<_Y?;80}-+Ee84_?iOQwn7hUJ9^!82*d9cLQ6;Hy{Dl$cnjC3Ag4EDLW7*JR zpf92gsC7inj&mmrpFazHGiNoV5A}_;c9xMgqcf4u z$Q(cC@v&BkBnO5xpK2XtvxuauEj}aLC|O5|9eS{@8d;$S{MbpL5B<E<5% zv33KLZ%GtBFMwtTU33f$^uSv+5?~L$RU-|`XBiTIO#HTGr3w)`ZzH?rnf|+&!{R zw0X@*;t8ifVpk%d z0*hUVkc#1SC7KgXC>RlCS?p?mJ;+jF2?dFzS-I*G7YW)ZF6bjw+2mw2UA8MJ`)d@S zAl09-N2!{aKzUz(YJG-X8LzLPj0w4s1&Y?Eu7w6ok}#Fn_Y|xd6sNjRHL<;S1 zHIYa(IH7&V!M){1#+R*2iSwsng)E$qN3E1hg42mmCpatgsY^5e)&}9{rPgcTxhjwk zNx|kgoHfk2+_0;ng-}&daoAE3-VFT^)r4Y-^vFS-mro&yx3bG)m|PzGK*<{HB9UNY zH?bxt&`qpkSveEyQ9H2?M*>uUc7bVP1};G*3)C67N#M!pjvk3D1=s|pT2%#XS0Lks z0?`;A2OzYRlLA?L6D#(%D-ae8rbKZ1YvfNMrHgf^e39)hGK+8))$&XqUrE~Zu$2mW zxJm_>d5c*@#(U>_iK*&JJxMYp&q8*(pN@W$fsN{p`&iQ_iLe!dK`Y~6thp)iGkv%i>{+#G!;a#Y&n8)ND7dR z0^-}fk=aj~y^%}Xy^-8%09}$da{C~^eE4a-k=Z%Chl$#HxA(w@p$zmW(j?r&K}ug9 ze8AU`Qu0Qco)iw6h3DfZR(B}JRx2{?jAV>XuzZU2tjVZ2X)^1} z$_$Tp(tRljYXF-sg?3}UC^i3@e4 za0!`$J~Mqdv|Bijm(XXpi${53Q(Des{5@+n7dGXYP*!W`vvxuRCbrw{Sf&(o)4>SV zP|$fzlB02(-Hu!gmDuXFOo$*gsCXeCV{&XZ*d8w4J;-63ix;`r*8immaGb=g2;Wn0 zl6R0?yjtLBJWNc)pgEfJRee*T1c}mUTSrb#II{Ww*$$VxVOgRLnU;)98i zMp@v?33xRO0^}bR*yF0B_d0p zAxLX=vNUI-OwyQP{N9B*E&Ds@a+~WE{|lf{wZ>K$lqz|Pu|u}5%b47 z^;dgeZ0bLb-7P@uG6pT8f~kKtyYke3HI@IhH1%J&&e^A_=Q=lVyqNk&IyhMlPW@G- ze-ftt+x(IXhjb@w{(tI;Lh7z;brkt0%Ojkp<;cf!bMRF+4895_fm6C%D1|?2>}1ef zZ++LF-5d;V7@+W+SL~q*&@@igXgC5CX-Wi>U>kPfrILP+!#3BTt^KCIk z9dD~$-w-Li@I)G$E=;H_IWbY>yW${S;3PcJi-FqEA{b*si{aT&7mVq7pSy-G76(D1 zWwo0edk;_BJ=dN#Lya7yQWNm?b?hOdU*{?F|I&=0^ylG%LVHze#ysgAz0&uQ!4cac zP)Y+`$pi8J6TOmiQG$=Ndj|x^PBM(2vbANtZAtFlPx|aMD2bA<;f+deBf$3VR zGLS(DoX}EMSr4K)(tBH|8W(FRoT*ao4H+N#YTQvZbd$@9X6bIg1=OZ95`5EtF#Kzr z3sLHRPwZmg#5Zj9JhykUm)%?OgPREb6V#P6UA9vfyhAm4#u?jgbp0!J((`Sfzz|oI z^a)H^74XmfrmZMRM(z=bXI2R5x*7 zEXtzNZc$e3Tjq*{Q0v`FL3oodp6ZdG5@|c|9=J5_67u6_33Ri3y<4O*I44W|xU?+D(JTMsQSa? z)Q>(qJ8+sTdW=a^!DK5oJvi{*yeSYabGN77cp&nuNmO=Io_d{Ks9EZh0r}RHImt9b zrjv$)nvlK9!kEt7%#%^qSpe$pxR4+3%qv%|h4;C8)iF6$)|U={r4>MATN|~Dg=>4R zRns~2%>PT~>O0M$4T?hM2P8W1!;qAKsICNtqy$8DB?v@HKvY)(O@%mQXq5Hj{;4bw zA1?Nk`%mp7_dm$~Kofb#oR&b*{(_%(FC_WD{LDi?i{|_wm^<-`Y|cJfnc+9f<0)<& zR+^JhlfH8(IVp_+Vm@p{dYgfojl>1B~Fj^U(!T?n&H-4=F2B$hG%eNoN%9BNQ!@~CLx76|Cd&7wRd~|#&^pn=F?{8_@>P} zOS7hyn&-xyFEUib6J~lpF(&1N|EA;|R9`#lD`lLjSx}qq6P;Q z#2H5U3ARJ2DcW+`3o}_5i${Efm_fX84C~A#o&MB^=oo=4i;;Tn3KN#Y=|O$Mg z$vfomN?M}Bs-Y_c7+3)Uqk7%V)J=!!SL2}FnTYR$%@P_gmXrgSuIQ_VPHXNZEYI8G*eaIC*YwoIEAOGsk=`UniU}_2sCX8_M(k!Ze@ZcNb2cFVF`^Z$oM> zX@sLLFMy&$Zk8{@%-6o+=-G#5re7p_;{A)G=YetudLE2|9(o>%f?e|L9Ll*x&j<5$ zLeCdO3oP?OM$f~l@ts2LLvG}M*d5TuE?Hb^&T;Mw8>H>eMr%mH!+#=#8v6_UF$%Tw zJ2CXsP7FQ0H-?_*Vd&Xy7<$}0)H>oQ3-ewL@r1b@U;ukv|EF#tf!C z6wQ}OsJ*ZgC+8~JsK+%AM8Phud0vQTq4s_kSqFz|2Yk*aV}zN%;N-!oDTr$C#>+#l zjD9$F4OwzJ#~stZ>Az42J`*O>Qu6{L6+^tt#SaeY9Ro7COKPYf!l&Ad9q7P9(sIM|vzhn=h!E79xeYm4NNo!3x8^@mZp81tMDvamN8YiCl zgDYq=6=0<-^YEx!v_J7oO=aHk1{F2Bt_7) zY++s{QYa&fR=v8kR=aAg)?HQsEiZv$X=a5YpCmjAkQfWDX$Okw7?Nobwn-atm>PCz z2UOXZshJ2)*k#tC6S!s*MrOU>lu2Nlmiqheedf&E_bwj5FIjRyNN?_(IdkTG?C-tL zKIzM-f2Jx1GmF`(klA2CrfC!s(%4?{k28ciQyx$Tn3V=Mt}D1+;4+x&6Lsyub&k4* zfmULY*vK^r8C20BSO94hyR)ad`L>6d01IYI5e}Iok7#R!JQOoZ{ENkb-TCjc-`X`( zrmg6bpn@odGC>6iVpuxkP5MR$qmr%+;7RQjCf~v-b`LWTPhpMI%AAGzO|wR1USwhL zV-9{->tyK1mClu_Q%CGrEs$Pv_aiUPg*OsoiOE(vBusWx01Tbc+5)b z3wqQ_>WhBFN@{>nF76>s`f>|50@p(vV*5L6qOtA10QuRqaDNosyEwRiA*liWQ;DPu z)I!-o^y5fY1O2n9HcFxaK&JkBgMRN~K_76(EiJw9TN2#OiTnz{-Ri#ra38s5D5Q=6 zAJZ5><4ceqm0kffoD%4xN3UH(u#dZvB2_cMKUo3(s0--xxwELXtWt5>^zNX@QYQR( zs#XS-LH&in)XJbUsG`t|TG?sJq>-Mel|4n-2Fi|CWx~f}nHg`OX;7pYwG)kJB7|5e z0~HW|LR|}Y(t9yShC7kx%IGG#R$1I^@Q3hR8C5&o5hXlDUnE>Y<3{s?rxW(pLI^C` zw+63aFULC#_+0F?hI%&MX^=0(I}Ptlyt5BK>%-H)&ZK2`HLz#nod$-;RvQ=+U2R|p zeBn+5I~nh+{S&DTOx7$9Cc)+&CS=$6}+4C1WP{axn~N8n;T#hQc6Z~+X1-$wi#>)Bd<-iMzf z^VInHrdL4J@Yw-j-0{FkN_w-Q7eJ}Q*yjk0{5rnSgi!!PYFm87@4uIBjjb0$|cUv-?NdM z3$tH{cVd>91jCzRmRJnKoumK^is4RD0H(eAH%>X<*FfR<{DtF--y`RrRB{rMi%{Lw zAF|trS2=kg{33EN{6Z58zg(bjH3=ON8eqp5E~clX)&R|`R3V(u%3PQn5T#*}?9du` zBTfx+N-p7_kt4ZTo?g>b3Hny)pc!pnO70u&xZ67^R|TrCB*oF?dT@oiSMu#k?>>Y( z#c3P>| z<}KER;6ep^%0gu`L?)={WjFcG*vvQcQDSQg&ooL5CH3}SaBxUM5AAY5hwDe>L(tlEc;MFWXG1ZAy# z2#Q+&(4kBCuN1L=UGP7Ot2KTb1=bq3jUsD}*G8eW;V+PS}1l-U&R9#5>`^p?D`SUygT%`{zpS7iMp&uDIY=FDZ+q-SgEOe=jME zwdk(32H$TfWf7o%Rmvjx1iJE94Zv|)`v(8aB*?Q}bI8C`D28pqADpuoU!e@fS@Miv zy@PSa68H;sV4Sf89z$qKX_PlJoT!FO@>uSWH5CFPX=gFT)MB#c5f3+_kf5FY_zooG zm;gl--!KcZWZU+8k!sDz7O^wima@TD^eG~m`NAHO-YTqyQbL28E+bil&8|{cFd z=&Fin6T^-jf7WK^c&!8xi8>WSWl&a9F;y3jjQ87nVd~VKz+9v3r?KnkfJr`xH^?Y^ z&IC9Kgq2aY5(vu>Y?eI=gq2aY5(vu;+h#{&J|qy9VctfW zZ6li?K~sJ--f8KM#5=KrL-9`RU^(7tg3q<$QfYe6wt_LV4%X;{ZzNc&i%5he#9Rbe zBeD}kH}3!~xUTdlln9v=36&!tm^cVQITJ+c`FUO{zK*tK2ZO4J#KbWOE+|jibdslO zP}|DWKT)<+sP!6Eh4wB_l26k<+vQwynYQ!U2Ssw{Xm0OJH{{f?V8hLrVTn21Vm8lt zS7+uutH*rhHdH7U%8r>C=WE&Su{-4{hDN$=hDK%g(1Dc1b^2*7jt~ut<&rB@gy1Af zr!*KS3xA)P+J|0K_lrJ_8!fe+JGKDSd9o^D8PHZ;4PQ*3Lr*Fi?tpyWl^S0$bF;qa zkX|c!$x8Te`N@3#1`Nd*M)6+@s>3R$&*?YGdtcU-I_Gp%oPome3^&-W!F1iaos{I9 zdT;Zyk4)oRn2QbjMwgL--29(lrOax=5@~roO~A7q3*uBZ4(_mB#~@CfwW%_*U6a<_ zylgQRdHm#S$f%vo8S1x)eDW~P)$YlJ;L;hQH(BT5#$2bow}8Ts3Sw3a!9K{5b)9_U ztwek_Jd()l^7w(-aO*i3J31tAfwV?xJ{?lKSFw$P&JatfU`$fSTX15&U4fMfe%xdg zfO-$5igB0Q(ef?&QsI`0K%n^$b-6%@Mv9N+7K?AB7Y8_Yjdc29w(FslBsLMMhF0yP z-hsP86gvtK(}};wyeX1ZF{xTNSP*oY?4Fu8kx8M`-A2HiKWR9;vu)|#@3(#omUJ5t7LF6!~aDvjdga17T-mKCrOb1p*Za z;bbOeBS#z?Z8g+4XtD>)G+F+A#$fTah0g7i)pcfC;}gBmtW`7JeC0DO5FeY_639(> z5YZ4F0k!ZXv42E6LL8y0P!4d-3WZU!*k;03#mX6a8ZIjE=0dm#%)c(U=M2v~Eh<4|>x?3}iEluN;O=H7J+C@y`>}s+m8!JZ4S3=gNn6w&M zJ1zZIbW$K^J8hMcD@T+M`=iNn5SWA?1Usqv=yVy zreoNSjOxRZB%+XN(N)#Q5aFUlJbnfvenURA8O4bK9GJQBpA8fx)v#&3?>Tbc%p5GKG?4LIM70CW1gbqtBTTMErw%+eZy>d)T#^Y%F5o!CLW zx}-6ccZ8B1mo$2Yl0jTp#r(`V96GbA7p0_unY=Mg#Sf8|{e%z;(|cSxnjbvsL2?|P zMev?Vu?|#cj{a#NKo7BcCynnQg=R;YCB8~;m8=a^lI72N!&zJXkSkdW!Sj$WN?VXk2MW|bd#|O)76&l{8GNtI7qz{X;S@fiP315@ z=Ob_6q}HdS>l-68`5RCk4^$Pr@4MXCgd7iYB7TO`W%7I z+A3wROB*FLg<#V&6?|Q^v07*bPoSlm^){HR%?CRvf?Qn3mZ7zGRF6JGT3fYU{QM3D zGk>eTCvuWvTO|s?Y-+Y<;b>*OJzCnRYp%N^rIorScONS4)HS(#*~-AcN@g!{P_teh znDL0@06#I~xPEFe!byd;Z@RV^$ML`^WlJsoMD(m$1kp1PGc1xO8l((&f(oDZNDktp zv&tlXfTm5k`O(hQ1;gYh5T@PV#i}^?$G`zwF=`0K5DlST4l$g|hEN1e=y(g8Q88zs z3RpCFLdM5}Z-rosg4aFZZF$Np^`RBM5ZAhHspl&fTUGF2=AGOJ{dF4=RLE% z7s0pzdpNJ70i+stH87oTxU1okR6K#KpQ$iX_{xeuTPtyrj)^4Vu@m&CY9-JH-a1v4 z2$kfDGZuOXychL`x|u7E*tAw9ot$a~!9#Qn8hVNo$`OpOX}lmmfYbcuBnAv3BK<_c zkWsMR!4lDg9cYY#_bUzn68q>P-3PX~W9o8v7^Kgxfs!O#5ok1IGJwx+A60^&DZ`Qyolxme`xdLE7@; zSzdk?HXJ%YEMWLW665e|dOW08&7Z1kQl=dWvk_vTL*WojEm)^gM2-ao@xhKOBFESu zqm??rYa0SrSLF~Ih0hG#a-8Ti$)fp5(-0;%;ly7UY0{B-kcgS>c?vRMTnae1s zX8FQmj_aakYq+F~x{K(NE^4kPlb~L2T~xH>7`o;qU348?6w9!r3g7-_(f)N3%>G}C z^b*Y$GQ;54k6nZQQ%~YV$zhF4P$t2nJcQ5~K4oVp>y^BqKq#Q>1LmB&HzZ)6;J)mK#ERqGmt0=z9}Kw~kG^%(#0JQwCIQ(+gCExu z)eMX+bXp&Q@r65e;Y_?!2VtDynYxeQQ4UrglO0A8-izt+R^@9v6qJU8E%!AZGNmEO zXZFrCu~yE=tv6%wY`Uxa)|JkU5`60zlHf%WE*n)q8&*k;U9LLW^Flf_i*xHm-?|dD zQK4rQ6v$>>4s|hWTF8(pnft4rp{*+e0@HbmhYaD!YfwU{0eMA;5;gV3+=RJp(HP6d z<}St3ix)#1u;qj(77uz7$;8u1-(sXt;I|qDwPU1^gOL^ykfDC?T?1O;On^-+6Ig16 z0i9ST@YOm4KCujK%93CJLa|Kfpfv}K%CZ^|xw~SnXx}k7EwdP_Z;^!F7l~Bviwu3^ zzCtYtQzf7pyhVZ4w6_r+^7Us=9z&Le&ekdL>kysg;#b1<5VHA*gbV zhBnc%2%qa*f~t!qP2Vn1b);JH2vvt_WhJdzu9cNgRd>miP*r!zl~7f4%L%GVPiKIt zQ^`j!5vv+yS(oE|yMWaTRY-pXt24E-60DxBm6c$1x>i<#)l;>y609(F)``{0a@&9t ztL_^>tlS+IomzDk7|y}812CNhLbH`}w+{;^dN_gUmEqMM9z}%nDi&xV*NRbmC2|x= zWXD;c%tx<~1?n`iN{&)M)T@`H%DC%S%>pNd=^Q5n&2l|+%1%o@EEM|Ehh;XJ;_MWM zL$UKA&HEO9R6O%FLYUrEoOm%r9sT@&k-o!Erai*;aGgv`_G}J#if0p825KgPAXD}@ zka8ZeuaA>HQMEQK-A+xkV^8goqW3d7xDR2Vk%N1gtFrW9^|QbW^K+k3AxU@m%RXWG zR7sDHc#3Z|058X}`Qx}1nM2O3q{`~U@w!%0W%l79U|LaXdC%`Nx>jJx$Dps|^f{r= zp2*Dq+0C!@?MWI0`SqVA%@+zPBaP=2S@~nx(BcJyq(&Ipcs_I;LTXM=+MsTeh)FGj zBxJQ#Ik-7n*?Mc^jH5heWsEgih&f`(${1}_kvIs&${24{tC&?Qvk{l=X{09@sm(g8 zKvGCsh0}6lXcdqpwb5ktDx4;VAgho>gRAN<$GK-FYT1-zldI2Ng z^iOeiW|q_=?Ou^`2l(rdUM}G@UyE^(1W%p0++}ywnX~WrN2LBHRy&_kfXkFDnruCi zg;M@V?uhEwowmzyAlej19?D?o2lrl!#%)6O=sMXq?XY-lx1fG2zc#-v1WGFFA?_;m z9~Lb6 z$Xyiq0UN_;8|2BL091?xoB?B0Cl)9jyNFIKknT8^L=8xR7_taZdVqr?CIl*esPB2H zU;^T`0Rv0*-B1#UxCRZ&4qC^>hMmMx$H#^?iq=uGp;K_m`45W)C?ejzM8wM}|5jp|5nXqIuEL6Od{y4uafD_2 zG$nA(h@gfUb&NI4fM>=UMh1@83Uak^tX5!T0Hz#YF){#0js->r4pjvrGs~b`V|ohV zOLPF?)#w0;c%W-C$3@;Yyq52QX=j9SAmQ_pQmo%+VE0LW?cW^T@bKu$!M_k*l=Zk; zJsnh#8nP{v0r8=GbI8-lW&>=m0MdqqA4ft<<{ z+bo-e&9anwc)Ur41qW+U+cwM6i-X#)$@NU8O|zvK_;Ob6U@gVKmzaOwG;1W8nlDx* ztOye(5m1|DHIt7eT4za58?}xm6g_TbfXiqhmOW`@z|?3H)W&F}w!t2!4W-|HNLNFw$o|8K*KnQ4H?fWRQ?4xGMhb=b#FYN#YnKO*&j6-xHo_E?jcXIa#i zk=pkF@b5>~(Qe7~bfS6P20P?aWB?nzLn~xOhC`$X8|{ikhG*mu8+~V-Xp%0IfgYpY z4e423Ie6niI-$uusw)}lU&0~}KoL24>!`II(1sK0$fII0Z*AXaObdC99$O+~`mY0@ zxV#T&3L+k2o?u$CnY}DOH_L(L*Onz5kk0HARDpPIThaoZl)Nz7Lg|s1y=4=3Rc4n3 z?yAf#4sfK0R(9_|J`8NmlI;ccV+gg$-N+! z@{e7s#Zztw%3O6AU59-5PUVcqOt`r!+cgrgxly0y0cj(UAjM>_6X@ojfE3AnUgili zjbRW2GfWD>C$XjMxO4)}lF_ziZ2|Z4=QVCA1QKm)M02Sjq5W!JvD(ZKHJka{g5bAWAt;Xg8H(>^#mnb{ z;!EeALb)I2gV^~~+>i3@@%|+DZ_0PX`xD&n%rB4kVBhG?`4#28W>6y5u{6I*5T^97 zoM%MOK&P--jGMdkOlKyFmf;mhp_8UubMp|n*j0EuC8sjEDBsi|J=p$HXJ;b-D%vhVZ zCBPT0e>PV_C$?58S@EF} z#i4F4asinw;nxkRqW>k1vL9bulWhvvHF6GI(pJBYL;>7A9VGbJW61&udaN_}%Q(adDU$K;_Q0i;_6q>9a>_tK#T@^D;4?ahf$OuR(HHrg(M?@8c%K)Uh`@$L+rc5~ z1oh!WueQ`({4TZq9Hy|g+2N)c8nr~aINfQVsj+mT`CjJlb^wOAd`aBDXgaT{)r#^p zoi{}Il&bF}eFi1={QAsbT}@^~Bnew0G1wHzz(OPdvujZw0&W`0tke<_w~bE3>b9ji zaWlR4yu@v>M%;`Iy!AZ9Eq@D9{45Vg`UOuJHxDJlj?t222m*DqLgd9nA63Obbl?|t zqBG=taVmy$$|QmfXIN58++gV%W|1*tx`u0uh9t{wKDSR9NQT7C@$jAl`*k?PFbxc; z2?vrl^=^2PNXp%#>qUcDLXvpPdV!zvy8L?iDX+`tt-`geUGOMbT`J-1zSb%kgTmPj zm;vuh&;Xzy#S0rA8l?5gTl=-`h%;{WY!;KPfJWdZf^n_+YV{$^mV&X+8T-EXg;W{W zTB;1$S?oPNCF3nE`|kXF?q+yz(}RGo9Z!>?QBnWeGEGL})BTa!vb@Jv<$YnU_hRS@ z2cm<1#tCduKtJOIpr5avc2;s=M?ST8JH(fjnRS*>5*^EwfQ7a+pI^)TUuP>+E)7e& zSv-L@ZryI{G!I?X;%TWwr1Xj~k*V+{yWY9LZrev}OSXZ<@|DQ1&v$Dt@wFx%*z)?S zjjp%qzO>icwqqvPs%qQub*z1T0hKFg%>qIrZE?pIu+5iolxfw(42(#4*H-nZTEkf_ zhbNA%0UJIMj2)80 z^{G`7lPK~!%qZubQe=`O{PsXpkSA%YVn*-CFVlLuLbZzKJhj^@1!+s`{)b<}^TF$(faeS;>}_RO#}h$(upnk~Fy? zA2Qi0-I9;OuTA-z!movVXZSUnzd8IevHKXQN6jm+Y_@cCEuVI6!x=!uqa6N1W`S96 z=5eLx@8s@C)cW7V-O+eA;_g_y8*+C%-r1*RA2=oghAx04DOgeWi3w7E)M)zO!Tk%| z3-a~+a_-M?UxuAr!9Dt5jGnT#Pctk7rZ^zA+VI^)F@U-oCG~cc;agF1f(tieP*x`?UvPe%vuDaL2MM3=nxtki)oN8l~t-?-?v6vWf@>c z*G2u17Q`)(<-l3vU`i~-_(~P=onm~ZA_|)Z&~rf|MU`^+PCaQ%R1U%Vnh8CV%ZQTG z)i9+ZQu0)-yF8hLOaU{DEY5*!GX*UXL$2D{@(?bu)tu~uM~kqRu_%n9@U zpfoqLx>ZnpoMkA9j*%*siM~fdQ~Dw4ek3-f zACeKoa8Vj+iP!gFY}Gf&;7Xb(<)U&bpYM$hs2cc$ZMg-)AGQF|m@8)3p)=OG=)q zl^|MDQfJNxmz12W>XcG9F(q13maDb*_8H7~66BTiQT{G-f1BSM4crauaw1zs1?b5t zaZ4Jlgc9lM!P8IXLW5^ z6OY@b27=#c`@D{I)FsWiaDi-Ml|Lee379@nbGN_lGbC_)mMoI8-<6 zmy+X|%)p9wFcHAu_aNqaJv)@i$!2Ez88R*T#zwC*DmCa9TH4f41Y}lh4@@o$rluCp_LB%)Z@4U~SU=JvtZ1oo= zJjro$&=gNh_mA(W2rC5?3bT?F5onBTz7Iu6F*~oT`05mmSPQlOV5V$Ze`rVp9Hq7w zqhdiocO=h1H8aTi#S);J5+FR50M(QL;jsj$Hklb1r>rLQNUuBtw3Xh!)k4oVfdx6~ zsU+i)^wja!NlzVro%Gc4*GbO={5@StCDPxKlSPuG^GeLZa&Am8%v6xd;eoNh{ER1S z1?G!{1I8LAmE+%u1vjcux)TfBKVK`5zri&1SVb-g8+k185C&!^lmvU9vZ)#KJDNmv zyUWXpBTbC<{eRs{r|xaugFon)PU2CRrZ{j{w3fiw)Vb{*O5ZJ7YZRDFg3fU9IvB$h zrpn)8E(=j;9zdb766+X7^vfzT@MG$@94P#&(PU;pkgh2=MeZm|Z>NDmbQ=c*itF?2shqm^Jf^{wJFNS$7 zI-?Xs*g%_c*%^-nEa(_zT6iu*U^f}&_~HV;)#AvL3=ydn*aFk(I3!jKd7@Te3rv^G z8d~5zEHD%lzA@?r&T(U9%-9MzGH(meODXUKCTXCO(% z5he(hpy5Z!C*6B=I0rSxa%^G)2@>Y+Gw#r4>{uPi8*m6Cq_GekgO$(RHUs+tc`VA| zMv0`tot7+=fSsmGrV>fQyxwxy}?JE#YQHSVNeC zmM7VVb`Q`O&;LIdtmcbzT-;!#y?e+1q7q4jn3zc`=dD2y1-s%L>p*Y{Dnt;E-JhuIezBg`a%uqACsWHt35m1SBAs>IP7bM@15bebBR~m!QXT{f5*5Wy3 z2Z_R@Y-k_8rZJ5$)wm@mFjE^#w-rc8T&(w_Djv|Bu_i^8%A z1$suZ&@Uk4F+<*LqklQ`g>CBTgt)B{J^1bfpFjiXR2)?QpSF@t&<0CxmF~$KBQkaT zZlbTZ@g87xH7_QTS4ZleRGNR17%@O;FAjd@iC}UD^Kat4ygm3oWvQj3gjiV%{-U}+ zH1{MIAQ~-F8zt1*2WDgdAb^bxs2%x4c}8Tw-kBEtvArk>#2-kPADRWmdvpMZ?i9@r z(92G7Hwm+85drI(2L49=eEcSU*gfLvHI0OOScIOVVDN`~$e8ZY0Qkc_cYpw`Lv-}5 zDG8fXCL;>1CbcgEx$1LKR1#u9)9QEBTlT&(6L|WXIq@9;Z#fws5T#>;>bs2#uwuN! zR4Xhe`HSV8rmRLeF`|R4tnbgU^u=K^$ZC9m&jY_|u(4_~0MoI_;C^f}xF4Gg?#Cu0 z(PSj`$xw=~YBH+!eKMpjP+yrFOj1{z2qX#O`cyKFFPl|ynE4c@(&8aTS}Yb%Yryg& z*zlh#htHIbL71eXgL*je-TwWpq%9;m!>0+)F}VtW!hD-3&0dkm4K#ZyaMv$^fdf3w zKZ9Y&B#!%rfhIUdH*O{@$XaET`hN_3CL&sF05D`YWusy`rJVs;~g7mpN33 zi#m>2v%HyOOQDlZK&CM*bAe%>cLi@O6>h~nm(udBGpO_i8I)U6DoCVeSCE8O(qO!R zgncQ`iB>X3{xlJUIQX(XyqfFuBQC|un$J&a>QjxDfXJtkVN)i9w6Is(w}Ou#73_;Z z3Z*Mlvy>1?#lphutJVeCavQ2^6=f(uf@GYJ<S@4G5Ho(wnWx||Sr z%JoCT?Yit5vM>nX0$@&y=X`Tr?;__om)nMy>#~S6#-%ZwEl%Atd|SqDk9>9|zkDU% zv64@(j6_3wEBR$B`PP+u%gU&^lpJ2c64GB8E|Lj*DxY7;yDRzTmAtcpCY;#gWMz02 zBG-nMrSve7hx52sH?8CgEBV|?zHwzVPo=y`TPsVu509?2sqU}j+gI{!E4-wm?yZ?@ zW$AklkMgB^S3bSMd|pXI8|*=w&MjSacr*n37gm{j<(ObRJ0xis~EOif$6e-+YS-R}-sH;c3%G75})YA7H9`&fUX=Q2QF!3JEd}?KB z$KlbGx3GzhZd+Np=J1GvR`Q+~DiY-Km8I-3+3k9H-wXMX&sf{(3hT*{4SDKM5Tlv* zrA=zS&7!d?S1rvR9wq)5QIlm``i{e#W(>4@VU{m0U40n*B`(KH()?}3nZr+*w!lFv zO)F)%2=k`B5PK#rX>|7LqO5(2#qL2mRm@z6$&*nBMEx?^{C z7Z-9S-^K;8ev!+pn;|yr1|zs7IpDIc+jnOl;?g(EM2>+1Jj=J>^wq>=BgCb*-9O{yNH_x zXwA9XrM)c~^HRKY6j1r1WMb?G$>3D#_T`;)jfQfVNLIWn%yuRixSoO+fiGO*{Cb(| zG(Ax#Zb)y`FAYacOI+YXgFpARVElifUkldf#dIfviN0XAw!{K*<-=fkrNMd68J*3D zhs#t@&kYTTy{_Y7N)LR1uZQj z6Y34Y6e3{Qg4fW>HH%f_|8id`#Y?*bq5Pu+T2b566VYR96eglYRKCE!L@yb zbm{wujQ^JI3Pc2o`ZcYEuvOq@D>qygd{rdrCen0@#?bICcP;i$Q&oN0C{f5w6zx_p#KO@ zvT6z-*mxv>P+Y%g(4PIiy}!7AUyVdUa0*|>MSl6x@8Z`Ys1}zoUHguM%bIs0xZD+& z6bc|bPgy9_(D>mbKr3s=Z`L7xX=R(XlH6!zx%kSaT3OF-$x!6UWz4+q=%*#)&MxbZY+u)K0SXMA1 zGB$17>4HQjIYG7Buq1$Xbi)CyXtwv=S)FbaRg=m4FZ50EwWu?;S^i-_*OCq#_Rp(M@bkO-ffIB4>*!HigQ1vUjUlAeU@TF@;K)B z<9pY3Wi`#R-ZPaBqUt@EPCqoIzo&U98pEUnn+cPE@rBJDzKV81jV)-XEDJA8tfk2!Net6_! z)=2uFZaQK>ipIgy2V4FHnwL{4iGk*WB7##RP-9RF{IxJ>z{lX;1pCTToEJ&xJKb73 zhUZ}!;#)Co1z9ookfY);dVf`;vAdyr4A_sh}-E8}#rvRdm%p2V7#j1tOu& zhzbI#Y51Zotth$w3QJz#28U2Fn~K*EDFpEtMPiGnH3~>(;F*a2m;hzSbTx?c41JM^ zkQ9H(bti8K2gT(1Wik`Pp=>cQbQ>~6LxyavmiiXVp6UslQFK8J(pK1d)~xUuTS0EJ zO#ueE-^My+UjEprk|>rKPG>|&BT?j5RJi{e%`~|;k&A9!Fqi-YQqk4|L0pUC6lklp zhho)$IRFte45?c>MW?y?g79O|c9|ehI`D|O7iVH7m?)O6rC0`|f10^!>Dv8b=NPO# z1gM>w2y2LLFSBHeew2*C-b)dj9QIzU-vfKk*YBT;Hv$+Kg8>Y5tOOWDN0Trl8Zggm z0OrA;`ep;nsfI&L$rFH~oh9f5X8bB(=&>wKC&G?cm5u-r$12^tCHY8!ZCh~kAg#NW zA1R?mr++^H&X^WZzHa<4Tl#$i97GwzX}keKbuwj(W7>-FGS)qZ9$SYx^zfE|?U}T& zQ#tV~8e@$-34$D!FtF4$OZfOJT*7e_uaJK=vRkLpzR`goCRM~cDSm&|Iy!W{GR*(K z(}_|^Il`Q81n)LjrCCeF@15jaa`-!;*vm+6%XhEXgBBYc91^Wcu-}B&=)1 zKMl5=ZsXrR*<-@Pq{)WBOqlFy>hw#pM-U>WFtO!_9v)@0out7`Hd>lQJ3nZbQPGkW zYNoo>d+!Wg5H5f`V$qIVhD9RN8nS{IC&-iMnbZfWNi{j&rqVh9=kw{byPP}ZTTP^7 znK+vj=$C|R(#K2HuVi&Wn5}e%2_3$W0Q~vv+W|>>ZxoU|j%mXL)Nv$vQWg)})HPvB z&#>4N-g%*df!Bgghnl`1r!nLptpW!K10oa;q!CplGs(cur914F7zV=uEsWRHSPs@G zHG<^^on>_+_)63Wfe>XQfq;P#B4EZp@M?M+i$r_^x2rm`Ylv~5Se9X@Yy+$Ur$qJ$ zm(WFGv?$m(1{)UBT}0CUsJ)g5+KaD@2tL`^=X$nL!FMrkU*H@0<(d@oCN_iO`Pu@n zeaTmN%}dY3m)0Yg&Pm<05F*D6)fdwp@NCJ}fdVjT(!M>=AyJ%;)Y*!#zFL(IbA&$f zQ@5wvJSOdkOf+M9xu(8ct!?xHrW&um;Bs(pI=j>v>0jY zZd&|BLxDweOP@iqRlt5jJj!p8qq$`U7o=+R24AABd;x6W?M;OH6tnKxo68s8(b)9e z4P|lb?^F9*yP?7(SS-tjvYQNwS*6pal67K`57f7W(`oe@E)rp2N0%Mol7F4c;2p`d zkHEOU^|Px{%&8xe4SXQsDZ|XJX&?|7zsZ7@@R**z(vg)3_+Yy7Hei`2Dl3W|k%m z?HU_)!WuOhQ&Vfyr$Ct7qM!xMs$ovq$oN&kD>phm@$0)-F`Y6f5a#_|djAB!u4!D4 z|G0&YEEB-4(KPs2C;>iC7J2)N#1g0s>9-JdH zJ&n^5l!FuL=d^!_m_s$GS93K-g{D`aWH=P@ljUbLWsNB>(1^CJ5#k(L1tDWJaEt~P z)8#~HealS8yK<0#H@Z>QVMS|o2>!DG(CGmQh$#P2n zo1F&k(ljYV4gtI+{#g!dYnUa*bJ;L8qqzoz<46P10Xr#UyJd#0w1}5VC>5p#04duT zteKj5(Lc?yUcPyzUruY;`|%m+Uc`(jG*}_AwHblFDkh_2vuLTMir@ZK+#=1vVRp^G zcV;k6GTQQsaei&Sn3~X9ZNAuCznD&(FVMFf>lDb%T#3{xCWQIu8x?V~!5Q{`d&Vd| zfMnkx;1TS^B6To0@o2DB+@F*_00K-2307tHgYY*57D5y0lj0WB_b9g;+Y{_@{l(BI zagn0)7idG4GQngyPoFVhSx$_w@yHt%#3;^FW&nelgG6wMO_kjXk&$KhmKoH0q{tcK z(c#7lqyMn_ZY|1U^TV1n+G$%m`TPy(-_U&gjo}qkBD}pf_(ki>p1}I@etyMnd=Vg} zcsZ*q!K+`0Ch1dskt!N^kC-0drCDR{=(0FT->ED;(p!K66O0sr##C&yQ$j7PWn1j0 zWhpOPi;W+?L3a`z-s7|W;oXhBeD}S)f4gX`i$D4%o$iai+b6?D9qX@pC|aqhBA#?- zkP#IEy$9yg7DhC2$@1s9*x6>WLk09cG=+e9Rr&+Fu}Ru5hPc2lIyRsh!?2wB+CI`S3DE@GCUORg2-pO6h9`<&XAwT|0@5$Q&K4sBgh!pyGY&O_ zO^PVG4s%UoUIGV$wnZ_oq_HoPJn`JAIvMT`+|+m%HvrI$v<*_oAvmx^*n12^MV+r{ zyhmp4R9#a~ZydD;&^CU3n4t1aPICb+YP=XhjOSOSKeRjj0h$McZu2NO#s9a(V0ig9 zaS_GauKBFIp_J!pu?n_Viwd^iDl0^%n3XicFYlHiv-PM=zky3_1PNVG^di$%@13RO zYRX1I+^ZVOP#YvAhp*!A4)AGTy^XKx*)FwWpzOeD54Q?97ikFeG~nzQaDtX*ol8aa zBU)lL5xp_A%!HO%4J|XFCHwIrTH+xIXlcI;Em;VmrMV*mBsf}PlBv*=pKH-FTZNXH zk40!^@?r>}w|l-E(bBe}l>PFNdw*U9TBa3RG8bbGQ*{Tb528(eVvALxC3}0MrAN0&YSJYVQpzMD1f-zvP?`ddu7cE?h?$x2gZaWl%#K1|F>4?T+0Uj# z%r?`E$-vvJL`yL5TEiRFn?syCDXGezoJua{FSS!H!y`*+~*ZbNq=}HHDr?s<1m@B znj5-wnQisxn5^uRgJ`MIh*|aXD{n)z~`cO7iiI(M*%rm~$jTXV_@8(ygzV!dI) zG#B(T2$cp?hR#jLUBtv`St0TF=wiYGeRRxhV?G+sw7_x;Y3ZKL{W*Ht0m6W zs&THCI9FXZl@j3srTsF_W$J?R+3|hjT-tQ5jaevK73bpTTFxbPyA&AJ;}$e5-qW1) z%krKtN6uw>f7vfz1n#|x1Ws!mE@9*M3U7d z8;MDf-xM2(%s#dkts875Q|Mq*m=lJx6v*`NzJQA`{ku5_*&B0KP|)}_rl2*Wg2odI zj+TOk0cqE$&&ne~lf=7H(qOi>?@&rw7OX`)mN#JDRkeB3L=styaW0U`Q_E^qY8o0H$L&}h#C?TMPK8@+zSJ2aqv|P&q0H$)S26X?n^%9D<{#(}{vOSm zf1qnx9OVeKlEt=^CM7j_Fd21c)1)EuR(KKB&R?81rs*%z&!4q&a~j~ZmQnjMUGBoN z%jJ&YbYX7CHO&OuxP6~yu#HpQnqe2Pn%U~jSos~2e%3URjrRm4vuvVUG%VqQG{tf% zOYZ~2yUY*!9aj;R9l^X01*T){%XqF7@G?_d7zEI=wMtoR%ZEdwtCU6gA^g$AnMYYH z|5X#tjGu3qDwpcfmoDwYWH+t3kIWhi^h+~*OboXx&2S@PA)=~0VtQ~~4_e{Dnwhl4 z(C%yhL~SvE?KO+x67QNu3^1r48mR#WyU`{9hK7U)U(TrfKTKoI+c8^HO6U9Ru9FMZ zl~NLKY?0~Oog7&6+>MFmk9P-cVaH1hCl_P%xKv(|iie;8U=mk@r|b znS2T|blN(V>yL!NQpgJ<7iZaJ;acg1F(k%&k}*0XI(Xp}&Mhb|!K-RTmgd+Bh+np1 z$WJTNQpL+vsC+rL3MkC!dq~-=cyL+tFh8wV(`cOju$%O~`8@g$oQo^r>W(3YiY7b(xhk(tw=y65N9qzw&3rt$DY2o+Pih~*s9u_nr-BmB zYnLPz2|2GqV)iuysbaNC#H@g_RIf|j1*AqjT3kjQCTntrr@H2o(lb^`B9)pYIc?(et{*m*D zp_7}ssE@FnsuV+Kd{Hg9+CxwXlJ*HA5}K(UR8wm)(t~PhEqZzor&cjndO2N?9#zJD zYYGP}zeknPJ=C<6|7Y0ahym|npR;%{DINkPDwAB2D5io~E{|VA^V!A&?iA2T2rjm( z9wx035oV;rp#xeO?_BCSH|{e zhN%@M&^4PsZT6Kz+1@FYc`fCHx%=6_j&sMnT-@9N%NLqELA!GiG~%sV#x8_L@T6S} zJM9-qVXhb;&tuK~&- zFETI!MEr7?4Uzu#Ew$_4l4FZsfRKMxv5e|h2{xUjPhyND5}RtNMrI}~y3`R^g2sG8 zMJn+9pk4e3z^OL4$WB!!qGQw(qFN4by*h+y0Q>`MRJ(dgE}i$BM|TvS*%OcM)p&GI zJh~?y&CxdmmeBiN-V0pXei@gB@QO=o9}*<&I3d1j)U3n_De8KGcWeY%s1!pqHX6yJ zDS7@0B2>4cOUZD)~DVH%gcic<)z*Cqk7Gz-I+#K5^Y1MkssXW)~c)EGDfg)iFj_MEr! z8MdW;r09qdC9KMbTph(r76hcY%0!8JKB{<8?Mq}3O15CziO8w|KZ#ou)oZM%o~fWs zV{O}jN0Aa$C~TII66dFEQ-B_mG7_6CQ%!YQuiqjF&~cLmR>UZ)BsLc&Npz0pG+&~T z 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 Oz;*g=*n+89uKxiR;36Ub From bd31ec6ae0d62bfec12796a794d601f96d26e7da Mon Sep 17 00:00:00 2001 From: Ash Date: Wed, 28 Feb 2024 10:17:06 -0800 Subject: [PATCH 238/501] no custom migrate type --- .../contracts/account_updatable-aarch64.wasm | Bin 457530 -> 457040 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/integration_tests/testdata/contracts/account_updatable-aarch64.wasm b/integration_tests/testdata/contracts/account_updatable-aarch64.wasm index 1a9f3623530edfb347dafa2b9002edc690552ea9..c552ddff154836f1315fa2bf031e27b0b10e7db1 100644 GIT binary patch delta 121283 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�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≠%e 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 delta 121676 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