From 8de96d16f9f72afb576af7bf6d9351d37cd1d828 Mon Sep 17 00:00:00 2001 From: Marko Date: Fri, 14 Aug 2020 19:58:53 +0200 Subject: [PATCH] tendermint: update to rc3 (#6892) * modify light imports * change abci.header to tmproto.header * use rc * rc * fix import * Merge PR #6893: fix key imports * fix rc2 * tendermint: update 3 (#6899) * tendermint: update 4 (#6919) Co-authored-by: Alexander Bezobchuk * tendermint: update 5 (#6923) Co-authored-by: Federico Kunze <31522760+fedekunze@users.noreply.github.com> * bump to latest master * tendermint: update (#6972) Co-authored-by: Aleksandr Bezobchuk Co-authored-by: Cory Levinson * Update x/ibc/07-tendermint/types/test_utils.go Co-authored-by: Federico Kunze <31522760+fedekunze@users.noreply.github.com> * address comment * go mod * bring back things * fix test * update tm proto files Co-authored-by: Alexander Bezobchuk Co-authored-by: Federico Kunze <31522760+fedekunze@users.noreply.github.com> Co-authored-by: Aleksandr Bezobchuk Co-authored-by: Cory Levinson Co-authored-by: Federico Kunze --- Makefile | 37 +- baseapp/abci.go | 24 +- baseapp/baseapp.go | 12 +- baseapp/baseapp_test.go | 44 +- baseapp/helpers.go | 6 +- baseapp/params.go | 13 +- baseapp/params_test.go | 19 +- client/debug/main.go | 4 +- client/keys/show_test.go | 2 +- client/rpc/validators.go | 8 +- codec/amino.go | 7 +- crypto/armor.go | 3 +- crypto/armor_test.go | 7 +- crypto/codec/amino.go | 24 +- crypto/hd/algo.go | 10 +- crypto/hd/fundraiser_test.go | 8 +- crypto/hd/hdpath.go | 12 +- crypto/keyring/keyring.go | 6 +- crypto/keyring/keyring_ledger_test.go | 4 +- crypto/keyring/keyring_test.go | 10 +- crypto/keyring/types_test.go | 2 +- crypto/ledger/encode_test.go | 82 +- crypto/ledger/ledger_mock.go | 4 +- crypto/ledger/ledger_secp256k1.go | 14 +- crypto/ledger/ledger_test.go | 14 +- crypto/types/multisig/codec.go | 12 +- crypto/types/multisig/threshold_pubkey.go | 8 +- docs/core/context.md | 2 +- go.mod | 13 +- go.sum | 118 +- proto/cosmos/base/abci/v1beta1/abci.proto | 15 +- proto/cosmos/staking/v1beta1/staking.proto | 43 +- proto/ibc/commitment/commitment.proto | 6 +- server/export.go | 15 +- server/mock/app_test.go | 7 +- server/tm_cmds.go | 4 +- server/util.go | 1 - simapp/app.go | 3 +- simapp/export.go | 3 +- simapp/sim_bench_test.go | 4 +- simapp/sim_test.go | 6 +- simapp/state.go | 2 +- simapp/test_helpers.go | 18 +- std/consensus_params.go | 5 +- std/pubkey.go | 33 +- store/cache/cache_test.go | 8 +- store/cachekv/memiterator.go | 4 +- store/cachekv/mergeiterator.go | 9 +- store/gaskv/store.go | 4 +- store/gaskv/store_test.go | 12 +- store/iavl/store.go | 19 +- store/iavl/store_test.go | 4 +- store/iavl/tree.go | 2 +- store/iavl/tree_test.go | 2 +- store/internal/maps/maps.go | 17 +- store/internal/maps/maps_test.go | 4 +- store/internal/proofs/convert.go | 12 +- store/internal/proofs/convert_test.go | 4 +- store/internal/proofs/create.go | 2 +- store/internal/proofs/helpers.go | 10 +- store/prefix/store.go | 4 +- store/prefix/store_test.go | 9 +- store/rootmulti/proof_test.go | 40 +- store/rootmulti/store.go | 6 +- store/rootmulti/store_test.go | 2 +- store/tracekv/store.go | 4 +- store/tracekv/store_test.go | 17 +- store/types/commit_info.go | 8 +- store/types/proof.go | 7 +- .../adr-024-coin-metadata_genesis.json | 109 +- third_party/proto/tendermint/abci/types.proto | 401 +++++ .../proto/tendermint/abci/types/types.proto | 346 ----- .../proto/tendermint/crypto/keys.proto | 24 + .../tendermint/crypto/merkle/merkle.proto | 31 - .../proto/tendermint/crypto/proof.proto | 41 + .../proto/tendermint/libs/bits/types.proto | 9 + .../proto/tendermint/libs/kv/types.proto | 29 - .../proto/tendermint/types/evidence.proto | 68 + .../proto/tendermint/types/params.proto | 86 ++ .../proto/tendermint/types/types.proto | 156 ++ .../proto/tendermint/version/types.proto | 24 + types/abci.pb.go | 102 +- types/address.go | 7 +- types/address_bench_test.go | 8 +- types/address_test.go | 18 +- types/context.go | 11 +- types/context_test.go | 30 +- types/events.go | 5 +- types/query/pagination_test.go | 23 +- types/simulation/account.go | 6 +- types/utils.go | 3 +- x/auth/ante/ante_test.go | 2 +- x/auth/ante/sigverify.go | 8 +- x/auth/ante/testutil_test.go | 4 +- x/auth/client/query.go | 2 +- x/auth/keeper/integration_test.go | 4 +- x/auth/module_test.go | 3 +- x/auth/signing/verify.go | 2 +- x/auth/signing/verify_test.go | 4 +- x/auth/tx/builder_test.go | 9 +- x/auth/types/account.go | 2 +- x/auth/types/stdtx_test.go | 8 +- x/bank/app_test.go | 34 +- x/bank/bench_test.go | 9 +- x/bank/handler_test.go | 7 +- x/bank/keeper/keeper_test.go | 58 +- x/bank/simulation/operations_test.go | 7 +- x/capability/keeper/keeper_test.go | 4 +- x/capability/spec/README.md | 2 +- x/crisis/handler_test.go | 7 +- x/crisis/keeper/keeper_test.go | 9 +- x/distribution/keeper/allocation_test.go | 8 +- x/distribution/keeper/delegation_test.go | 19 +- x/distribution/keeper/grpc_query_test.go | 4 +- x/distribution/keeper/keeper_test.go | 11 +- x/distribution/keeper/querier_test.go | 3 +- x/distribution/module_test.go | 3 +- x/distribution/proposal_handler_test.go | 6 +- x/distribution/simulation/operations_test.go | 12 +- x/distribution/simulation/proposals_test.go | 4 +- x/evidence/genesis_test.go | 4 +- x/evidence/handler_test.go | 4 +- x/evidence/keeper/keeper_test.go | 17 +- x/genutil/gentx_test.go | 11 +- x/genutil/utils_test.go | 2 +- x/gov/abci_test.go | 25 +- x/gov/client/utils/query_test.go | 12 +- x/gov/genesis_test.go | 17 +- x/gov/handler_test.go | 4 +- x/gov/keeper/deposit_test.go | 4 +- x/gov/keeper/keeper_test.go | 8 +- x/gov/keeper/proposal_test.go | 10 +- x/gov/keeper/querier_test.go | 5 +- x/gov/keeper/tally_test.go | 32 +- x/gov/keeper/vote_test.go | 4 +- x/gov/module_test.go | 3 +- x/gov/simulation/operations_test.go | 10 +- x/gov/simulation/proposals_test.go | 4 +- x/ibc/02-client/client/utils/utils.go | 18 +- x/ibc/02-client/keeper/client_test.go | 13 +- x/ibc/02-client/keeper/keeper_test.go | 5 +- x/ibc/02-client/types/genesis_test.go | 1 - x/ibc/02-client/types/querier.go | 6 +- x/ibc/03-connection/client/utils/utils.go | 4 +- x/ibc/03-connection/types/msgs_test.go | 2 +- x/ibc/04-channel/client/utils/utils.go | 6 +- x/ibc/04-channel/types/msgs_test.go | 2 +- x/ibc/05-port/keeper/keeper_test.go | 5 +- x/ibc/07-tendermint/client/cli/tx.go | 6 +- x/ibc/07-tendermint/types/client_state.go | 4 +- x/ibc/07-tendermint/types/evidence_test.go | 18 +- x/ibc/07-tendermint/types/fraction.go | 4 +- x/ibc/07-tendermint/types/header.go | 7 - x/ibc/07-tendermint/types/misbehaviour.go | 3 +- .../07-tendermint/types/misbehaviour_test.go | 16 +- x/ibc/07-tendermint/types/msgs.go | 4 +- x/ibc/07-tendermint/types/tendermint_test.go | 5 +- x/ibc/07-tendermint/types/test_utils.go | 35 +- x/ibc/07-tendermint/types/update.go | 4 +- x/ibc/07-tendermint/types/update_test.go | 12 +- x/ibc/09-localhost/types/localhost_test.go | 5 +- x/ibc/23-commitment/types/commitment.pb.go | 98 +- x/ibc/23-commitment/types/merkle.go | 6 +- x/ibc/23-commitment/types/merkle_test.go | 22 +- x/ibc/genesis_test.go | 5 +- x/ibc/ibc_test.go | 5 +- x/ibc/keeper/keeper_test.go | 5 +- x/ibc/testing/chain.go | 21 +- x/mint/keeper/grpc_query_test.go | 4 +- x/mint/keeper/integration_test.go | 4 +- x/mint/module_test.go | 3 +- x/params/keeper/common_test.go | 4 +- x/params/keeper/keeper_test.go | 4 +- x/params/proposal_handler_test.go | 5 +- x/params/simulation/operations_test.go | 4 +- x/params/simulation/proposals_test.go | 4 +- x/params/types/subspace_test.go | 4 +- x/simulation/mock_tendermint.go | 36 +- x/simulation/params.go | 13 +- x/simulation/params_test.go | 5 +- x/simulation/simulate.go | 16 +- x/slashing/abci_test.go | 3 +- x/slashing/app_test.go | 21 +- x/slashing/genesis_test.go | 4 +- x/slashing/handler_test.go | 14 +- x/slashing/keeper/grpc_query_test.go | 4 +- x/slashing/keeper/keeper_test.go | 10 +- x/slashing/keeper/querier_test.go | 5 +- x/slashing/keeper/signing_info_test.go | 11 +- x/slashing/simulation/operations_test.go | 5 +- x/staking/app_test.go | 19 +- x/staking/common_test.go | 8 +- x/staking/handler.go | 7 +- x/staking/handler_test.go | 17 +- x/staking/keeper/common_test.go | 4 +- x/staking/keeper/historical_info_test.go | 20 +- x/staking/keeper/keeper_test.go | 8 +- x/staking/keeper/querier_test.go | 9 +- x/staking/keeper/slash_test.go | 10 +- x/staking/keeper/validator_test.go | 4 +- x/staking/module_test.go | 3 +- x/staking/simulation/genesis.go | 2 +- x/staking/simulation/genesis_test.go | 2 +- x/staking/simulation/operations.go | 3 +- x/staking/simulation/operations_test.go | 15 +- x/staking/spec/01_state.md | 2 +- x/staking/types/historical_info.go | 4 +- x/staking/types/historical_info_test.go | 4 +- x/staking/types/staking.pb.go | 1354 ++++++++--------- x/staking/types/validator.go | 15 +- x/staking/types/validator_test.go | 9 +- x/upgrade/abci_test.go | 6 +- x/upgrade/keeper/grpc_query_test.go | 5 +- x/upgrade/types/plan_test.go | 5 +- x/upgrade/types/storeloader_test.go | 3 +- 215 files changed, 2611 insertions(+), 2329 deletions(-) create mode 100644 third_party/proto/tendermint/abci/types.proto delete mode 100644 third_party/proto/tendermint/abci/types/types.proto create mode 100644 third_party/proto/tendermint/crypto/keys.proto delete mode 100644 third_party/proto/tendermint/crypto/merkle/merkle.proto create mode 100644 third_party/proto/tendermint/crypto/proof.proto create mode 100644 third_party/proto/tendermint/libs/bits/types.proto delete mode 100644 third_party/proto/tendermint/libs/kv/types.proto create mode 100644 third_party/proto/tendermint/types/evidence.proto create mode 100644 third_party/proto/tendermint/types/params.proto create mode 100644 third_party/proto/tendermint/types/types.proto create mode 100644 third_party/proto/tendermint/version/types.proto diff --git a/Makefile b/Makefile index 7f08a9f86d..dc2e68c58f 100644 --- a/Makefile +++ b/Makefile @@ -335,14 +335,17 @@ proto-check-breaking-docker: @$(DOCKER_BUF) check breaking --against-input $(HTTPS_GIT)#branch=master .PHONY: proto-check-breaking-ci -TM_URL = https://raw.githubusercontent.com/tendermint/tendermint/v0.33.1 +TM_URL = https://raw.githubusercontent.com/tendermint/tendermint/v0.34.0-rc3/proto/tendermint GOGO_PROTO_URL = https://raw.githubusercontent.com/regen-network/protobuf/cosmos COSMOS_PROTO_URL = https://raw.githubusercontent.com/regen-network/cosmos-proto/master -CONFIO_URL = https://raw.githubusercontent.com/confio/ics23/master +CONFIO_URL = https://raw.githubusercontent.com/confio/ics23/v0.6.2 + +TM_CRYPTO_TYPES = third_party/proto/tendermint/crypto +TM_ABCI_TYPES = third_party/proto/tendermint/abci +TM_TYPES = third_party/proto/tendermint/types +TM_VERSION = third_party/proto/tendermint/version +TM_LIBS = third_party/proto/tendermint/libs/bits -TM_KV_TYPES = third_party/proto/tendermint/libs/kv -TM_MERKLE_TYPES = third_party/proto/tendermint/crypto/merkle -TM_ABCI_TYPES = third_party/proto/tendermint/abci/types GOGO_PROTO_TYPES = third_party/proto/gogoproto COSMOS_PROTO_TYPES = third_party/proto/cosmos_proto CONFIO_TYPES = third_party/proto/confio @@ -359,18 +362,22 @@ proto-update-deps: ## (which is the standard Buf.build FILE_LAYOUT) ## Issue link: https://github.com/tendermint/tendermint/issues/5021 @mkdir -p $(TM_ABCI_TYPES) - @curl -sSL $(TM_URL)/abci/types/types.proto > $(TM_ABCI_TYPES)/types.proto - @sed -i '' '7 s|third_party/proto/||g' $(TM_ABCI_TYPES)/types.proto - @sed -i '' '8 s|crypto/merkle/merkle.proto|tendermint/crypto/merkle/merkle.proto|g' $(TM_ABCI_TYPES)/types.proto - @sed -i '' '9 s|libs/kv/types.proto|tendermint/libs/kv/types.proto|g' $(TM_ABCI_TYPES)/types.proto + @curl -sSL $(TM_URL)/abci/types.proto > $(TM_ABCI_TYPES)/types.proto - @mkdir -p $(TM_KV_TYPES) - @curl -sSL $(TM_URL)/libs/kv/types.proto > $(TM_KV_TYPES)/types.proto - @sed -i '' '5 s|third_party/proto/||g' $(TM_KV_TYPES)/types.proto + @mkdir -p $(TM_VERSION) + @curl -sSL $(TM_URL)/version/types.proto > $(TM_VERSION)/types.proto - @mkdir -p $(TM_MERKLE_TYPES) - @curl -sSL $(TM_URL)/crypto/merkle/merkle.proto > $(TM_MERKLE_TYPES)/merkle.proto - @sed -i '' '7 s|third_party/proto/||g' $(TM_MERKLE_TYPES)/merkle.proto + @mkdir -p $(TM_TYPES) + @curl -sSL $(TM_URL)/types/types.proto > $(TM_TYPES)/types.proto + @curl -sSL $(TM_URL)/types/evidence.proto > $(TM_TYPES)/evidence.proto + @curl -sSL $(TM_URL)/types/params.proto > $(TM_TYPES)/params.proto + + @mkdir -p $(TM_CRYPTO_TYPES) + @curl -sSL $(TM_URL)/crypto/proof.proto > $(TM_CRYPTO_TYPES)/proof.proto + @curl -sSL $(TM_URL)/crypto/keys.proto > $(TM_CRYPTO_TYPES)/keys.proto + + @mkdir -p $(TM_LIBS) + @curl -sSL $(TM_URL)/libs/bits/types.proto > $(TM_LIBS)/types.proto @mkdir -p $(CONFIO_TYPES) @curl -sSL $(CONFIO_URL)/proofs.proto > $(CONFIO_TYPES)/proofs.proto diff --git a/baseapp/abci.go b/baseapp/abci.go index be37b9a4bc..6c66286293 100644 --- a/baseapp/abci.go +++ b/baseapp/abci.go @@ -8,7 +8,9 @@ import ( "syscall" "time" + "github.com/gogo/protobuf/proto" abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/telemetry" @@ -19,7 +21,7 @@ import ( // InitChain implements the ABCI interface. It runs the initialization logic // directly on the CommitMultiStore. func (app *BaseApp) InitChain(req abci.RequestInitChain) (res abci.ResponseInitChain) { - initHeader := abci.Header{ChainID: req.ChainId, Time: req.Time} + initHeader := tmproto.Header{ChainID: req.ChainId, Time: req.Time} // initialize the deliver state and check state with a correct header app.setDeliverState(initHeader) @@ -55,8 +57,8 @@ func (app *BaseApp) InitChain(req abci.RequestInitChain) (res abci.ResponseInitC sort.Sort(abci.ValidatorUpdates(req.Validators)) sort.Sort(abci.ValidatorUpdates(res.Validators)) - for i, val := range res.Validators { - if !val.Equal(req.Validators[i]) { + for i := range res.Validators { + if proto.Equal(&res.Validators[i], &req.Validators[i]) { panic(fmt.Errorf("genesisValidators[%d] != req.Validators[%d] ", i, i)) } } @@ -554,3 +556,19 @@ func splitPath(requestPath string) (path []string) { return path } + +func (app *BaseApp) ListSnapshots(abci.RequestListSnapshots) abci.ResponseListSnapshots { + return abci.ResponseListSnapshots{} +} + +func (app *BaseApp) OfferSnapshot(abci.RequestOfferSnapshot) abci.ResponseOfferSnapshot { + return abci.ResponseOfferSnapshot{} +} + +func (app *BaseApp) LoadSnapshotChunk(abci.RequestLoadSnapshotChunk) abci.ResponseLoadSnapshotChunk { + return abci.ResponseLoadSnapshotChunk{} +} + +func (app *BaseApp) ApplySnapshotChunk(abci.RequestApplySnapshotChunk) abci.ResponseApplySnapshotChunk { + return abci.ResponseApplySnapshotChunk{} +} diff --git a/baseapp/baseapp.go b/baseapp/baseapp.go index eaf7c7f3f4..acd16c8c3d 100644 --- a/baseapp/baseapp.go +++ b/baseapp/baseapp.go @@ -6,10 +6,10 @@ import ( "strings" "github.com/gogo/protobuf/proto" - abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/crypto/tmhash" "github.com/tendermint/tendermint/libs/log" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" dbm "github.com/tendermint/tm-db" "github.com/cosmos/cosmos-sdk/store" @@ -257,7 +257,7 @@ func (app *BaseApp) init() error { } // needed for the export command which inits from store but never calls initchain - app.setCheckState(abci.Header{}) + app.setCheckState(tmproto.Header{}) app.Seal() return nil @@ -307,7 +307,7 @@ func (app *BaseApp) IsSealed() bool { return app.sealed } // (i.e. a CacheMultiStore) and a new Context with the cache-wrapped multi-store, // provided header, and minimum gas prices set. It is set on InitChain and reset // on Commit. -func (app *BaseApp) setCheckState(header abci.Header) { +func (app *BaseApp) setCheckState(header tmproto.Header) { ms := app.cms.CacheMultiStore() app.checkState = &state{ ms: ms, @@ -319,7 +319,7 @@ func (app *BaseApp) setCheckState(header abci.Header) { // (i.e. a CacheMultiStore) and a new Context with the cache-wrapped multi-store, // and provided header. It is set on InitChain and BeginBlock and set to nil on // Commit. -func (app *BaseApp) setDeliverState(header abci.Header) { +func (app *BaseApp) setDeliverState(header tmproto.Header) { ms := app.cms.CacheMultiStore() app.deliverState = &state{ ms: ms, @@ -344,14 +344,14 @@ func (app *BaseApp) GetConsensusParams(ctx sdk.Context) *abci.ConsensusParams { } if app.paramStore.Has(ctx, ParamStoreKeyEvidenceParams) { - var ep abci.EvidenceParams + var ep tmproto.EvidenceParams app.paramStore.Get(ctx, ParamStoreKeyEvidenceParams, &ep) cp.Evidence = &ep } if app.paramStore.Has(ctx, ParamStoreKeyValidatorParams) { - var vp abci.ValidatorParams + var vp tmproto.ValidatorParams app.paramStore.Get(ctx, ParamStoreKeyValidatorParams, &vp) cp.Validator = &vp diff --git a/baseapp/baseapp_test.go b/baseapp/baseapp_test.go index 569bcb4401..c41c26488b 100644 --- a/baseapp/baseapp_test.go +++ b/baseapp/baseapp_test.go @@ -10,18 +10,18 @@ import ( "sync" "testing" - "github.com/cosmos/cosmos-sdk/testutil/testdata" - "github.com/gogo/protobuf/jsonpb" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/libs/log" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" dbm "github.com/tendermint/tm-db" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/store/rootmulti" store "github.com/cosmos/cosmos-sdk/store/types" + "github.com/cosmos/cosmos-sdk/testutil/testdata" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" ) @@ -137,13 +137,13 @@ func TestLoadVersion(t *testing.T) { require.Equal(t, emptyCommitID, lastID) // execute a block, collect commit ID - header := abci.Header{Height: 1} + header := tmproto.Header{Height: 1} app.BeginBlock(abci.RequestBeginBlock{Header: header}) res := app.Commit() commitID1 := sdk.CommitID{Version: 1, Hash: res.Data} // execute a block, collect commit ID - header = abci.Header{Height: 2} + header = tmproto.Header{Height: 2} app.BeginBlock(abci.RequestBeginBlock{Header: header}) res = app.Commit() commitID2 := sdk.CommitID{Version: 2, Hash: res.Data} @@ -242,7 +242,7 @@ func TestSetLoader(t *testing.T) { require.Nil(t, err) // "execute" one block - app.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: 2}}) + app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: 2}}) res := app.Commit() require.NotNil(t, res.Data) @@ -287,7 +287,7 @@ func TestLoadVersionInvalid(t *testing.T) { err = app.LoadVersion(-1) require.Error(t, err) - header := abci.Header{Height: 1} + header := tmproto.Header{Height: 1} app.BeginBlock(abci.RequestBeginBlock{Header: header}) res := app.Commit() commitID1 := sdk.CommitID{Version: 1, Hash: res.Data} @@ -337,7 +337,7 @@ func TestLoadVersionPruning(t *testing.T) { // Commit seven blocks, of which 7 (latest) is kept in addition to 6, 5 // (keep recent) and 3 (keep every). for i := int64(1); i <= 7; i++ { - app.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: i}}) + app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: i}}) res := app.Commit() lastCommitID = sdk.CommitID{Version: i, Hash: res.Data} } @@ -527,7 +527,7 @@ func TestInitChainer(t *testing.T) { require.Equal(t, value, res.Value) // commit and ensure we can still query - header := abci.Header{Height: app.LastBlockHeight() + 1} + header := tmproto.Header{Height: app.LastBlockHeight() + 1} app.BeginBlock(abci.RequestBeginBlock{Header: header}) app.Commit() @@ -783,7 +783,7 @@ func TestCheckTx(t *testing.T) { require.Equal(t, nTxs, storedCounter) // If a block is committed, CheckTx state should be reset. - header := abci.Header{Height: 1} + header := tmproto.Header{Height: 1} app.BeginBlock(abci.RequestBeginBlock{Header: header}) app.EndBlock(abci.RequestEndBlock{}) app.Commit() @@ -818,7 +818,7 @@ func TestDeliverTx(t *testing.T) { txPerHeight := 5 for blockN := 0; blockN < nBlocks; blockN++ { - header := abci.Header{Height: int64(blockN) + 1} + header := tmproto.Header{Height: int64(blockN) + 1} app.BeginBlock(abci.RequestBeginBlock{Header: header}) for i := 0; i < txPerHeight; i++ { @@ -872,7 +872,7 @@ func TestMultiMsgDeliverTx(t *testing.T) { // run a multi-msg tx // with all msgs the same route - header := abci.Header{Height: 1} + header := tmproto.Header{Height: 1} app.BeginBlock(abci.RequestBeginBlock{Header: header}) tx := newTxCounter(0, 0, 1, 2) txBytes, err := codec.MarshalBinaryBare(tx) @@ -953,7 +953,7 @@ func TestSimulateTx(t *testing.T) { nBlocks := 3 for blockN := 0; blockN < nBlocks; blockN++ { count := int64(blockN + 1) - header := abci.Header{Height: count} + header := tmproto.Header{Height: count} app.BeginBlock(abci.RequestBeginBlock{Header: header}) tx := newTxCounter(count, count) @@ -1008,7 +1008,7 @@ func TestRunInvalidTransaction(t *testing.T) { app := setupBaseApp(t, anteOpt, routerOpt) - header := abci.Header{Height: 1} + header := tmproto.Header{Height: 1} app.BeginBlock(abci.RequestBeginBlock{Header: header}) // transaction with no messages @@ -1136,7 +1136,7 @@ func TestTxGasLimits(t *testing.T) { app := setupBaseApp(t, anteOpt, routerOpt) - header := abci.Header{Height: 1} + header := tmproto.Header{Height: 1} app.BeginBlock(abci.RequestBeginBlock{Header: header}) testCases := []struct { @@ -1250,7 +1250,7 @@ func TestMaxBlockGasLimits(t *testing.T) { tx := tc.tx // reset the block gas - header := abci.Header{Height: app.LastBlockHeight() + 1} + header := tmproto.Header{Height: app.LastBlockHeight() + 1} app.BeginBlock(abci.RequestBeginBlock{Header: header}) // execute the transaction multiple times @@ -1304,7 +1304,7 @@ func TestCustomRunTxPanicHandler(t *testing.T) { app := setupBaseApp(t, anteOpt, routerOpt) - header := abci.Header{Height: 1} + header := tmproto.Header{Height: 1} app.BeginBlock(abci.RequestBeginBlock{Header: header}) app.AddRunTxRecoveryHandler(func(recoveryObj interface{}) error { @@ -1346,7 +1346,7 @@ func TestBaseAppAnteHandler(t *testing.T) { app.InitChain(abci.RequestInitChain{}) registerTestCodec(cdc) - header := abci.Header{Height: app.LastBlockHeight() + 1} + header := tmproto.Header{Height: app.LastBlockHeight() + 1} app.BeginBlock(abci.RequestBeginBlock{Header: header}) // execute a tx that will fail ante handler execution @@ -1454,7 +1454,7 @@ func TestGasConsumptionBadTx(t *testing.T) { app.InitChain(abci.RequestInitChain{}) - header := abci.Header{Height: app.LastBlockHeight() + 1} + header := tmproto.Header{Height: app.LastBlockHeight() + 1} app.BeginBlock(abci.RequestBeginBlock{Header: header}) tx := newTxCounter(5, 0) @@ -1519,7 +1519,7 @@ func TestQuery(t *testing.T) { require.Equal(t, 0, len(res.Value)) // query is still empty after a DeliverTx before we commit - header := abci.Header{Height: app.LastBlockHeight() + 1} + header := tmproto.Header{Height: app.LastBlockHeight() + 1} app.BeginBlock(abci.RequestBeginBlock{Header: header}) _, resTx, err = app.Deliver(tx) @@ -1545,7 +1545,7 @@ func TestGRPCQuery(t *testing.T) { app := setupBaseApp(t, grpcQueryOpt) app.InitChain(abci.RequestInitChain{}) - header := abci.Header{Height: app.LastBlockHeight() + 1} + header := tmproto.Header{Height: app.LastBlockHeight() + 1} app.BeginBlock(abci.RequestBeginBlock{Header: header}) app.Commit() @@ -1602,7 +1602,7 @@ func TestP2PQuery(t *testing.T) { func TestGetMaximumBlockGas(t *testing.T) { app := setupBaseApp(t) app.InitChain(abci.RequestInitChain{}) - ctx := app.NewContext(true, abci.Header{}) + ctx := app.NewContext(true, tmproto.Header{}) app.StoreConsensusParams(ctx, &abci.ConsensusParams{Block: &abci.BlockParams{MaxGas: 0}}) require.Equal(t, uint64(0), app.getMaximumBlockGas(ctx)) @@ -1660,7 +1660,7 @@ func TestWithRouter(t *testing.T) { txPerHeight := 5 for blockN := 0; blockN < nBlocks; blockN++ { - header := abci.Header{Height: int64(blockN) + 1} + header := tmproto.Header{Height: int64(blockN) + 1} app.BeginBlock(abci.RequestBeginBlock{Header: header}) for i := 0; i < txPerHeight; i++ { diff --git a/baseapp/helpers.go b/baseapp/helpers.go index c69a8ba829..2fb7cc041a 100644 --- a/baseapp/helpers.go +++ b/baseapp/helpers.go @@ -1,7 +1,7 @@ package baseapp import ( - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" sdk "github.com/cosmos/cosmos-sdk/types" ) @@ -19,7 +19,7 @@ func (app *BaseApp) Deliver(tx sdk.Tx) (sdk.GasInfo, *sdk.Result, error) { } // Context with current {check, deliver}State of the app used by tests. -func (app *BaseApp) NewContext(isCheckTx bool, header abci.Header) sdk.Context { +func (app *BaseApp) NewContext(isCheckTx bool, header tmproto.Header) sdk.Context { if isCheckTx { return sdk.NewContext(app.checkState.ms, header, true, app.logger). WithMinGasPrices(app.minGasPrices) @@ -28,6 +28,6 @@ func (app *BaseApp) NewContext(isCheckTx bool, header abci.Header) sdk.Context { return sdk.NewContext(app.deliverState.ms, header, false, app.logger) } -func (app *BaseApp) NewUncachedContext(isCheckTx bool, header abci.Header) sdk.Context { +func (app *BaseApp) NewUncachedContext(isCheckTx bool, header tmproto.Header) sdk.Context { return sdk.NewContext(app.cms, header, isCheckTx, app.logger) } diff --git a/baseapp/params.go b/baseapp/params.go index 832397fb81..7dd1d526cc 100644 --- a/baseapp/params.go +++ b/baseapp/params.go @@ -5,6 +5,7 @@ import ( "fmt" abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" sdk "github.com/cosmos/cosmos-sdk/types" ) @@ -49,7 +50,7 @@ func ValidateBlockParams(i interface{}) error { // ValidateEvidenceParams defines a stateless validation on EvidenceParams. This // function is called whenever the parameters are updated or stored. func ValidateEvidenceParams(i interface{}) error { - v, ok := i.(abci.EvidenceParams) + v, ok := i.(tmproto.EvidenceParams) if !ok { return fmt.Errorf("invalid parameter type: %T", i) } @@ -62,13 +63,21 @@ func ValidateEvidenceParams(i interface{}) error { return fmt.Errorf("evidence maximum age time duration must be positive: %v", v.MaxAgeDuration) } + if v.MaxNum <= 0 { + return fmt.Errorf("evidence maximum number of evidence must be positive: %v", v.MaxAgeDuration) + } + + if v.ProofTrialPeriod <= 0 { + return fmt.Errorf("proof of trial period must be greater than 0: %v", v.MaxAgeDuration) + } + return nil } // ValidateValidatorParams defines a stateless validation on ValidatorParams. This // function is called whenever the parameters are updated or stored. func ValidateValidatorParams(i interface{}) error { - v, ok := i.(abci.ValidatorParams) + v, ok := i.(tmproto.ValidatorParams) if !ok { return fmt.Errorf("invalid parameter type: %T", i) } diff --git a/baseapp/params_test.go b/baseapp/params_test.go index 46eb08005f..1d6c7b9090 100644 --- a/baseapp/params_test.go +++ b/baseapp/params_test.go @@ -5,6 +5,7 @@ import ( "github.com/stretchr/testify/require" abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/baseapp" ) @@ -33,11 +34,11 @@ func TestValidateEvidenceParams(t *testing.T) { expectErr bool }{ {nil, true}, - {&abci.EvidenceParams{}, true}, - {abci.EvidenceParams{}, true}, - {abci.EvidenceParams{MaxAgeNumBlocks: -1, MaxAgeDuration: 18004000}, true}, - {abci.EvidenceParams{MaxAgeNumBlocks: 360000, MaxAgeDuration: -1}, true}, - {abci.EvidenceParams{MaxAgeNumBlocks: 360000, MaxAgeDuration: 18004000}, false}, + {&tmproto.EvidenceParams{}, true}, + {tmproto.EvidenceParams{}, true}, + {tmproto.EvidenceParams{MaxAgeNumBlocks: -1, MaxAgeDuration: 18004000, MaxNum: 50, ProofTrialPeriod: 10_000}, true}, + {tmproto.EvidenceParams{MaxAgeNumBlocks: 360000, MaxAgeDuration: 18004000, MaxNum: 50, ProofTrialPeriod: -1}, true}, + {tmproto.EvidenceParams{MaxAgeNumBlocks: 360000, MaxAgeDuration: 18004000, MaxNum: 50, ProofTrialPeriod: 50_0000}, false}, } for _, tc := range testCases { @@ -51,10 +52,10 @@ func TestValidateValidatorParams(t *testing.T) { expectErr bool }{ {nil, true}, - {&abci.ValidatorParams{}, true}, - {abci.ValidatorParams{}, true}, - {abci.ValidatorParams{PubKeyTypes: []string{}}, true}, - {abci.ValidatorParams{PubKeyTypes: []string{"secp256k1"}}, false}, + {&tmproto.ValidatorParams{}, true}, + {tmproto.ValidatorParams{}, true}, + {tmproto.ValidatorParams{PubKeyTypes: []string{}}, true}, + {tmproto.ValidatorParams{PubKeyTypes: []string{"secp256k1"}}, false}, } for _, tc := range testCases { diff --git a/client/debug/main.go b/client/debug/main.go index eb2a3ecb2f..5ce659721a 100644 --- a/client/debug/main.go +++ b/client/debug/main.go @@ -34,7 +34,7 @@ func Cmd() *cobra.Command { // to decode the pubkey string from hex, base64, and finally bech32. If all // encodings fail, an error is returned. func getPubKeyFromString(pkstr string) (crypto.PubKey, error) { - var pubKey ed25519.PubKeyEd25519 + pubKey := make(ed25519.PubKey, ed25519.PubKeySize) bz, err := hex.DecodeString(pkstr) if err == nil { @@ -85,7 +85,7 @@ $ %s debug pubkey cosmos1e0jnq2sun3dzjh8p2xq95kk0expwmd7shwjpfg return err } - edPK, ok := pk.(ed25519.PubKeyEd25519) + edPK, ok := pk.(ed25519.PubKey) if !ok { return fmt.Errorf("invalid pubkey type; expected ED25519") } diff --git a/client/keys/show_test.go b/client/keys/show_test.go index 6e367b3ad9..dc102c9728 100644 --- a/client/keys/show_test.go +++ b/client/keys/show_test.go @@ -18,7 +18,7 @@ import ( ) func Test_multiSigKey_Properties(t *testing.T) { - tmpKey1 := secp256k1.GenPrivKeySecp256k1([]byte("mySecret")) + tmpKey1 := secp256k1.GenPrivKeyFromSecret([]byte("mySecret")) pk := multisig.NewPubKeyMultisigThreshold(1, []crypto.PubKey{tmpKey1.PubKey()}) tmp := keyring.NewMultiInfo("myMultisig", pk) diff --git a/client/rpc/validators.go b/client/rpc/validators.go index 481177247d..572f2005a5 100644 --- a/client/rpc/validators.go +++ b/client/rpc/validators.go @@ -45,7 +45,7 @@ func ValidatorCommand() *cobra.Command { page, _ := cmd.Flags().GetInt(flags.FlagPage) limit, _ := cmd.Flags().GetInt(flags.FlagLimit) - result, err := GetValidators(clientCtx, height, page, limit) + result, err := GetValidators(clientCtx, height, &page, &limit) if err != nil { return err } @@ -112,7 +112,7 @@ func bech32ValidatorOutput(validator *tmtypes.Validator) (ValidatorOutput, error } // GetValidators from client -func GetValidators(clientCtx client.Context, height *int64, page, limit int) (ResultValidatorsOutput, error) { +func GetValidators(clientCtx client.Context, height *int64, page, limit *int) (ResultValidatorsOutput, error) { // get the node node, err := clientCtx.GetNode() if err != nil { @@ -167,7 +167,7 @@ func ValidatorSetRequestHandlerFn(clientCtx client.Context) http.HandlerFunc { return } - output, err := GetValidators(clientCtx, &height, page, limit) + output, err := GetValidators(clientCtx, &height, &page, &limit) if rest.CheckInternalServerError(w, err) { return } @@ -184,7 +184,7 @@ func LatestValidatorSetRequestHandlerFn(clientCtx client.Context) http.HandlerFu return } - output, err := GetValidators(clientCtx, nil, page, limit) + output, err := GetValidators(clientCtx, nil, &page, &limit) if rest.CheckInternalServerError(w, err) { return } diff --git a/codec/amino.go b/codec/amino.go index 058f2fa238..bb16b89e97 100644 --- a/codec/amino.go +++ b/codec/amino.go @@ -32,7 +32,12 @@ func New() *LegacyAmino { // RegisterEvidences registers Tendermint evidence types with the provided Amino // codec. func RegisterEvidences(cdc *LegacyAmino) { - tmtypes.RegisterEvidences(cdc.Amino) + cdc.Amino.RegisterInterface((*tmtypes.Evidence)(nil), nil) + cdc.Amino.RegisterConcrete(&tmtypes.DuplicateVoteEvidence{}, "tendermint/DuplicateVoteEvidence", nil) + cdc.Amino.RegisterConcrete(&tmtypes.ConflictingHeadersEvidence{}, "tendermint/ConflictingHeadersEvidence", nil) + cdc.Amino.RegisterConcrete(&tmtypes.LunaticValidatorEvidence{}, "tendermint/LunaticValidatorEvidence", nil) + cdc.Amino.RegisterConcrete(&tmtypes.PotentialAmnesiaEvidence{}, "tendermint/PotentialAmnesiaEvidence", nil) + cdc.Amino.RegisterConcrete(&tmtypes.AmnesiaEvidence{}, "tendermint/AmnesiaEvidence", nil) } // MarshalJSONIndent provides a utility for indented JSON encoding of an object diff --git a/crypto/armor.go b/crypto/armor.go index 933f2eafc0..d0637c709d 100644 --- a/crypto/armor.go +++ b/crypto/armor.go @@ -9,6 +9,7 @@ import ( "github.com/tendermint/tendermint/crypto/armor" "github.com/tendermint/tendermint/crypto/xsalsa20symmetric" + "github.com/cosmos/cosmos-sdk/codec/legacy" cryptoAmino "github.com/cosmos/cosmos-sdk/crypto/codec" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" ) @@ -151,7 +152,7 @@ func encryptPrivKey(privKey crypto.PrivKey, passphrase string) (saltBytes []byte } key = crypto.Sha256(key) // get 32 bytes - privKeyBytes := privKey.Bytes() + privKeyBytes := legacy.Cdc.Amino.MustMarshalBinaryBare(privKey) return saltBytes, xsalsa20symmetric.EncryptSymmetric(privKeyBytes, key) } diff --git a/crypto/armor_test.go b/crypto/armor_test.go index 52d2922b54..120b88e045 100644 --- a/crypto/armor_test.go +++ b/crypto/armor_test.go @@ -14,6 +14,7 @@ import ( "github.com/tendermint/tendermint/crypto/secp256k1" "github.com/tendermint/tendermint/crypto/xsalsa20symmetric" + "github.com/cosmos/cosmos-sdk/codec/legacy" "github.com/cosmos/cosmos-sdk/crypto" cryptoAmino "github.com/cosmos/cosmos-sdk/crypto/codec" "github.com/cosmos/cosmos-sdk/crypto/hd" @@ -50,7 +51,7 @@ func TestArmorUnarmorPrivKey(t *testing.T) { key, err := bcrypt.GenerateFromPassword(saltBytes, []byte(passphrase), crypto.BcryptSecurityParameter) require.NoError(t, err) key = tmcrypto.Sha256(key) // get 32 bytes - privKeyBytes := privKey.Bytes() + privKeyBytes := legacy.Cdc.Amino.MustMarshalBinaryBare(privKey) return saltBytes, xsalsa20symmetric.EncryptSymmetric(privKeyBytes, key) } saltBytes, encBytes := encryptPrivKeyFn(priv, "passphrase") @@ -74,7 +75,7 @@ func TestArmorUnarmorPubKey(t *testing.T) { // Add keys and see they return in alphabetical order info, _, err := cstore.NewMnemonic("Bob", keyring.English, types.FullFundraiserPath, hd.Secp256k1) require.NoError(t, err) - armored := crypto.ArmorPubKeyBytes(info.GetPubKey().Bytes(), "") + armored := crypto.ArmorPubKeyBytes(legacy.Cdc.Amino.MustMarshalBinaryBare(info.GetPubKey()), "") pubBytes, algo, err := crypto.UnarmorPubKeyBytes(armored) require.NoError(t, err) pub, err := cryptoAmino.PubKeyFromBytes(pubBytes) @@ -82,7 +83,7 @@ func TestArmorUnarmorPubKey(t *testing.T) { require.Equal(t, string(hd.Secp256k1Type), algo) require.True(t, pub.Equals(info.GetPubKey())) - armored = crypto.ArmorPubKeyBytes(info.GetPubKey().Bytes(), "unknown") + armored = crypto.ArmorPubKeyBytes(legacy.Cdc.Amino.MustMarshalBinaryBare(info.GetPubKey()), "unknown") pubBytes, algo, err = crypto.UnarmorPubKeyBytes(armored) require.NoError(t, err) pub, err = cryptoAmino.PubKeyFromBytes(pubBytes) diff --git a/crypto/codec/amino.go b/crypto/codec/amino.go index 017498717a..b5a7c0e86f 100644 --- a/crypto/codec/amino.go +++ b/crypto/codec/amino.go @@ -21,22 +21,22 @@ func init() { // codec. func RegisterCrypto(cdc *codec.LegacyAmino) { cdc.RegisterInterface((*crypto.PubKey)(nil), nil) - cdc.RegisterConcrete(ed25519.PubKeyEd25519{}, - ed25519.PubKeyAminoName, nil) - cdc.RegisterConcrete(sr25519.PubKeySr25519{}, - sr25519.PubKeyAminoName, nil) - cdc.RegisterConcrete(secp256k1.PubKeySecp256k1{}, - secp256k1.PubKeyAminoName, nil) + cdc.RegisterConcrete(ed25519.PubKey{}, + ed25519.PubKeyName, nil) + cdc.RegisterConcrete(sr25519.PubKey{}, + sr25519.PubKeyName, nil) + cdc.RegisterConcrete(secp256k1.PubKey{}, + secp256k1.PubKeyName, nil) cdc.RegisterConcrete(multisig.PubKeyMultisigThreshold{}, multisig.PubKeyAminoRoute, nil) cdc.RegisterInterface((*crypto.PrivKey)(nil), nil) - cdc.RegisterConcrete(ed25519.PrivKeyEd25519{}, - ed25519.PrivKeyAminoName, nil) - cdc.RegisterConcrete(sr25519.PrivKeySr25519{}, - sr25519.PrivKeyAminoName, nil) - cdc.RegisterConcrete(secp256k1.PrivKeySecp256k1{}, - secp256k1.PrivKeyAminoName, nil) + cdc.RegisterConcrete(ed25519.PrivKey{}, + ed25519.PrivKeyName, nil) + cdc.RegisterConcrete(sr25519.PrivKey{}, + sr25519.PrivKeyName, nil) + cdc.RegisterConcrete(secp256k1.PrivKey{}, + secp256k1.PrivKeyName, nil) } // PrivKeyFromBytes unmarshals private key bytes and returns a PrivKey diff --git a/crypto/hd/algo.go b/crypto/hd/algo.go index d112226645..9a32835d05 100644 --- a/crypto/hd/algo.go +++ b/crypto/hd/algo.go @@ -54,15 +54,17 @@ func (s secp256k1Algo) Derive() DeriveFn { return masterPriv[:], nil } derivedKey, err := DerivePrivateKeyForPath(masterPriv, ch, hdPath) - return derivedKey[:], err + + return derivedKey, err } } // Generate generates a secp256k1 private key from the given bytes. func (s secp256k1Algo) Generate() GenerateFn { return func(bz []byte) crypto.PrivKey { - var bzArr [32]byte - copy(bzArr[:], bz) - return secp256k1.PrivKeySecp256k1(bzArr) + var bzArr = make([]byte, secp256k1.PrivKeySize) + copy(bzArr, bz) + + return secp256k1.PrivKey(bzArr) } } diff --git a/crypto/hd/fundraiser_test.go b/crypto/hd/fundraiser_test.go index 0f6a539d4f..255a2696b9 100644 --- a/crypto/hd/fundraiser_test.go +++ b/crypto/hd/fundraiser_test.go @@ -65,7 +65,7 @@ func TestFundraiserCompatibility(t *testing.T) { master, ch := hd.ComputeMastersFromSeed(seed) priv, err := hd.DerivePrivateKeyForPath(master, ch, "44'/118'/0'/0/0") require.NoError(t, err) - pub := secp256k1.PrivKeySecp256k1(priv).PubKey() + pub := secp256k1.PrivKey(priv).PubKey() t.Log("\tNODEJS GOLANG\n") t.Logf("SEED \t%X %X\n", seedB, seed) @@ -76,9 +76,9 @@ func TestFundraiserCompatibility(t *testing.T) { require.Equal(t, seedB, seed) require.Equal(t, master[:], masterB, fmt.Sprintf("Expected masters to match for %d", i)) require.Equal(t, priv[:], privB, "Expected priv keys to match") - var pubBFixed [33]byte - copy(pubBFixed[:], pubB) - require.Equal(t, pub, secp256k1.PubKeySecp256k1(pubBFixed), fmt.Sprintf("Expected pub keys to match for %d", i)) + pubBFixed := make([]byte, secp256k1.PubKeySize) + copy(pubBFixed, pubB) + require.Equal(t, pub, secp256k1.PubKey(pubBFixed), fmt.Sprintf("Expected pub keys to match for %d", i)) addr := pub.Address() t.Logf("ADDR \t%X %X\n", addrB, addr) diff --git a/crypto/hd/hdpath.go b/crypto/hd/hdpath.go index d9f55a6635..d2ce90e07a 100644 --- a/crypto/hd/hdpath.go +++ b/crypto/hd/hdpath.go @@ -166,7 +166,7 @@ func ComputeMastersFromSeed(seed []byte) (secret [32]byte, chainCode [32]byte) { // DerivePrivateKeyForPath derives the private key by following the BIP 32/44 path from privKeyBytes, // using the given chainCode. -func DerivePrivateKeyForPath(privKeyBytes [32]byte, chainCode [32]byte, path string) ([32]byte, error) { +func DerivePrivateKeyForPath(privKeyBytes, chainCode [32]byte, path string) ([]byte, error) { data := privKeyBytes parts := strings.Split(path, "/") @@ -181,21 +181,21 @@ func DerivePrivateKeyForPath(privKeyBytes [32]byte, chainCode [32]byte, path str idx, err := strconv.Atoi(part) if err != nil { - return [32]byte{}, fmt.Errorf("invalid BIP 32 path: %s", err) + return []byte{}, fmt.Errorf("invalid BIP 32 path: %s", err) } if idx < 0 { - return [32]byte{}, errors.New("invalid BIP 32 path: index negative ot too large") + return []byte{}, errors.New("invalid BIP 32 path: index negative ot too large") } data, chainCode = derivePrivateKey(data, chainCode, uint32(idx), harden) } - var derivedKey [32]byte - n := copy(derivedKey[:], data[:]) + derivedKey := make([]byte, 32) + n := copy(derivedKey, data[:]) if n != 32 || len(data) != 32 { - return [32]byte{}, fmt.Errorf("expected a (secp256k1) key of length 32, got length: %v", len(data)) + return []byte{}, fmt.Errorf("expected a (secp256k1) key of length 32, got length: %v", len(data)) } return derivedKey, nil diff --git a/crypto/keyring/keyring.go b/crypto/keyring/keyring.go index 43631d36f8..99c9101fb7 100644 --- a/crypto/keyring/keyring.go +++ b/crypto/keyring/keyring.go @@ -16,10 +16,10 @@ import ( "github.com/pkg/errors" "github.com/tendermint/crypto/bcrypt" tmcrypto "github.com/tendermint/tendermint/crypto" - cryptoamino "github.com/tendermint/tendermint/crypto/encoding/amino" "github.com/cosmos/cosmos-sdk/client/input" "github.com/cosmos/cosmos-sdk/crypto" + cryptoamino "github.com/cosmos/cosmos-sdk/crypto/codec" "github.com/cosmos/cosmos-sdk/crypto/hd" "github.com/cosmos/cosmos-sdk/crypto/ledger" sdk "github.com/cosmos/cosmos-sdk/types" @@ -197,7 +197,7 @@ func (ks keystore) ExportPubKeyArmor(uid string) (string, error) { return "", fmt.Errorf("no key to export with name: %s", uid) } - return crypto.ArmorPubKeyBytes(bz.GetPubKey().Bytes(), string(bz.GetAlgo())), nil + return crypto.ArmorPubKeyBytes(CryptoCdc.MustMarshalBinaryBare(bz.GetPubKey()), string(bz.GetAlgo())), nil } func (ks keystore) ExportPubKeyArmorByAddress(address sdk.Address) (string, error) { @@ -687,7 +687,7 @@ func (ks keystore) writeLocalKey(name string, priv tmcrypto.PrivKey, algo hd.Pub // encrypt private key using keyring pub := priv.PubKey() - info := newLocalInfo(name, pub, string(priv.Bytes()), algo) + info := newLocalInfo(name, pub, string(CryptoCdc.MustMarshalBinaryBare(priv)), algo) if err := ks.writeInfo(info); err != nil { return nil, err } diff --git a/crypto/keyring/keyring_ledger_test.go b/crypto/keyring/keyring_ledger_test.go index e94ba395aa..dd193d9d50 100644 --- a/crypto/keyring/keyring_ledger_test.go +++ b/crypto/keyring/keyring_ledger_test.go @@ -77,8 +77,8 @@ func TestSignVerifyKeyRingWithLedger(t *testing.T) { require.Equal(t, i1.GetPubKey(), pub1) require.Equal(t, i1.GetPubKey(), pub2) - require.True(t, pub1.VerifyBytes(d1, s1)) - require.True(t, i1.GetPubKey().VerifyBytes(d1, s1)) + require.True(t, pub1.VerifySignature(d1, s1)) + require.True(t, i1.GetPubKey().VerifySignature(d1, s1)) require.True(t, bytes.Equal(s1, s2)) localInfo, _, err := kb.NewMnemonic("test", English, types.FullFundraiserPath, hd.Secp256k1) diff --git a/crypto/keyring/keyring_test.go b/crypto/keyring/keyring_test.go index 4b63b1efd3..918eb5e5e0 100644 --- a/crypto/keyring/keyring_test.go +++ b/crypto/keyring/keyring_test.go @@ -188,7 +188,7 @@ func TestSignVerifyKeyRing(t *testing.T) { } for i, tc := range cases { - valid := tc.key.VerifyBytes(tc.data, tc.sig) + valid := tc.key.VerifySignature(tc.data, tc.sig) require.Equal(t, tc.valid, valid, "%d", i) } @@ -549,7 +549,7 @@ func TestInMemorySignVerify(t *testing.T) { } for i, tc := range cases { - valid := tc.key.VerifyBytes(tc.data, tc.sig) + valid := tc.key.VerifySignature(tc.data, tc.sig) require.Equal(t, tc.valid, valid, "%d", i) } @@ -788,7 +788,7 @@ func ExampleNew() { if pub.Equals(binfo.GetPubKey()) { fmt.Println("signed by Bob") } - if !pub.VerifyBytes(tx, sig) { + if !pub.VerifySignature(tx, sig) { fmt.Println("invalid signature") } @@ -1008,7 +1008,7 @@ func TestAltKeyring_Sign(t *testing.T) { sign, key, err := keyring.Sign(uid, msg) require.NoError(t, err) - require.True(t, key.VerifyBytes(msg, sign)) + require.True(t, key.VerifySignature(msg, sign)) } func TestAltKeyring_SignByAddress(t *testing.T) { @@ -1027,7 +1027,7 @@ func TestAltKeyring_SignByAddress(t *testing.T) { sign, key, err := keyring.SignByAddress(mnemonic.GetAddress(), msg) require.NoError(t, err) - require.True(t, key.VerifyBytes(msg, sign)) + require.True(t, key.VerifySignature(msg, sign)) } func TestAltKeyring_ImportExportPrivKey(t *testing.T) { diff --git a/crypto/keyring/types_test.go b/crypto/keyring/types_test.go index cf935d906c..50981d177b 100644 --- a/crypto/keyring/types_test.go +++ b/crypto/keyring/types_test.go @@ -12,7 +12,7 @@ import ( ) func Test_writeReadLedgerInfo(t *testing.T) { - var tmpKey secp256k1.PubKeySecp256k1 + tmpKey := make(secp256k1.PubKey, secp256k1.PubKeySize) bz, _ := hex.DecodeString("035AD6810A47F073553FF30D2FCC7E0D3B1C0B74B61A1AAA2582344037151E143A") copy(tmpKey[:], bz) diff --git a/crypto/ledger/encode_test.go b/crypto/ledger/encode_test.go index 146d3a50ea..6e0cf99f52 100644 --- a/crypto/ledger/encode_test.go +++ b/crypto/ledger/encode_test.go @@ -7,31 +7,12 @@ import ( "github.com/stretchr/testify/require" tcrypto "github.com/tendermint/tendermint/crypto" - "github.com/tendermint/tendermint/crypto/ed25519" - "github.com/tendermint/tendermint/crypto/secp256k1" ) type byter interface { Bytes() []byte } -func checkAminoBinary(t *testing.T, src, dst interface{}, size int) { - // Marshal to binary bytes. - bz, err := cdc.MarshalBinaryBare(src) - require.Nil(t, err, "%+v", err) - if byterSrc, ok := src.(byter); ok { - // Make sure this is compatible with current (Bytes()) encoding. - require.Equal(t, byterSrc.Bytes(), bz, "Amino binary vs Bytes() mismatch") - } - // Make sure we have the expected length. - if size != -1 { - require.Equal(t, size, len(bz), "Amino binary size mismatch") - } - // Unmarshal. - err = cdc.UnmarshalBinaryBare(bz, dst) - require.Nil(t, err, "%+v", err) -} - func checkAminoJSON(t *testing.T, src interface{}, dst interface{}, isNil bool) { // Marshal to JSON bytes. js, err := cdc.MarshalJSON(src) @@ -50,59 +31,16 @@ func checkAminoJSON(t *testing.T, src interface{}, dst interface{}, isNil bool) // nolint: govet func ExamplePrintRegisteredTypes() { cdc.PrintTypes(os.Stdout) - // Output: | Type | Name | Prefix | Length | Notes | - //| ---- | ---- | ------ | ----- | ------ | - //| PrivKeyLedgerSecp256k1 | tendermint/PrivKeyLedgerSecp256k1 | 0x10CAB393 | variable | | - //| PubKeyEd25519 | tendermint/PubKeyEd25519 | 0x1624DE64 | 0x20 | | - //| PubKeySr25519 | tendermint/PubKeySr25519 | 0x0DFB1005 | 0x20 | | - //| PubKeySecp256k1 | tendermint/PubKeySecp256k1 | 0xEB5AE987 | 0x21 | | - //| PubKeyMultisigThreshold | tendermint/PubKeyMultisigThreshold | 0x22C1F7E2 | variable | | - //| PrivKeyEd25519 | tendermint/PrivKeyEd25519 | 0xA3288910 | 0x40 | | - //| PrivKeySr25519 | tendermint/PrivKeySr25519 | 0x2F82D78B | 0x20 | | - //| PrivKeySecp256k1 | tendermint/PrivKeySecp256k1 | 0xE1B0F79B | 0x20 | | -} - -func TestKeyEncodings(t *testing.T) { - cases := []struct { - privKey tcrypto.PrivKey - privSize, pubSize int // binary sizes with the amino overhead - }{ - { - privKey: ed25519.GenPrivKey(), - privSize: 69, - pubSize: 37, - }, - { - privKey: secp256k1.GenPrivKey(), - privSize: 37, - pubSize: 38, - }, - } - - for _, tc := range cases { - - // Check (de/en)codings of PrivKeys. - var priv2, priv3 tcrypto.PrivKey - checkAminoBinary(t, tc.privKey, &priv2, tc.privSize) - require.EqualValues(t, tc.privKey, priv2) - checkAminoJSON(t, tc.privKey, &priv3, false) // TODO also check Prefix bytes. - require.EqualValues(t, tc.privKey, priv3) - - // Check (de/en)codings of Signatures. - var sig1, sig2 []byte - sig1, err := tc.privKey.Sign([]byte("something")) - require.NoError(t, err) - checkAminoBinary(t, sig1, &sig2, -1) // Signature size changes for Secp anyways. - require.EqualValues(t, sig1, sig2) - - // Check (de/en)codings of PubKeys. - pubKey := tc.privKey.PubKey() - var pub2, pub3 tcrypto.PubKey - checkAminoBinary(t, pubKey, &pub2, tc.pubSize) - require.EqualValues(t, pubKey, pub2) - checkAminoJSON(t, pubKey, &pub3, false) // TODO also check Prefix bytes. - require.EqualValues(t, pubKey, pub3) - } + // | Type | Name | Prefix | Length | Notes | + // | ---- | ---- | ------ | ----- | ------ | + // | PrivKeyLedgerSecp256k1 | tendermint/PrivKeyLedgerSecp256k1 | 0x10CAB393 | variable | | + // | PubKey | tendermint/PubKeyEd25519 | 0x1624DE64 | variable | | + // | PubKey | tendermint/PubKeySr25519 | 0x0DFB1005 | variable | | + // | PubKey | tendermint/PubKeySecp256k1 | 0xEB5AE987 | variable | | + // | PubKeyMultisigThreshold | tendermint/PubKeyMultisigThreshold | 0x22C1F7E2 | variable | | + // | PrivKey | tendermint/PrivKeyEd25519 | 0xA3288910 | variable | | + // | PrivKey | tendermint/PrivKeySr25519 | 0x2F82D78B | variable | | + // | PrivKey | tendermint/PrivKeySecp256k1 | 0xE1B0F79B | variable | | } func TestNilEncodings(t *testing.T) { diff --git a/crypto/ledger/ledger_mock.go b/crypto/ledger/ledger_mock.go index 9af22bb7fb..cb75a00884 100644 --- a/crypto/ledger/ledger_mock.go +++ b/crypto/ledger/ledger_mock.go @@ -77,8 +77,8 @@ func (mock LedgerSECP256K1Mock) GetAddressPubKeySECP256K1(derivationPath []uint3 return nil, "", fmt.Errorf("error parsing public key: %v", err) } - var compressedPublicKey tmsecp256k1.PubKeySecp256k1 - copy(compressedPublicKey[:], cmp.SerializeCompressed()) + compressedPublicKey := make(tmsecp256k1.PubKey, tmsecp256k1.PubKeySize) + copy(compressedPublicKey, cmp.SerializeCompressed()) // Generate the bech32 addr using existing tmcrypto/etc. addr := sdk.AccAddress(compressedPublicKey.Address()).String() diff --git a/crypto/ledger/ledger_secp256k1.go b/crypto/ledger/ledger_secp256k1.go index f25cdff3b8..6ad8c7ff43 100644 --- a/crypto/ledger/ledger_secp256k1.go +++ b/crypto/ledger/ledger_secp256k1.go @@ -115,7 +115,7 @@ func ShowAddress(path hd.BIP44Params, expectedPubKey tmcrypto.PubKey, return err } - if pubKey != expectedPubKey { + if !pubKey.Equals(expectedPubKey) { return fmt.Errorf("the key's pubkey does not match with the one retrieved from Ledger. Check that the HD path and device are the correct ones") } @@ -124,7 +124,7 @@ func ShowAddress(path hd.BIP44Params, expectedPubKey tmcrypto.PubKey, return err } - if pubKey2 != expectedPubKey { + if !pubKey2.Equals(expectedPubKey) { return fmt.Errorf("the key's pubkey does not match with the one retrieved from Ledger. Check that the HD path and device are the correct ones") } @@ -161,6 +161,8 @@ func (pkl PrivKeyLedgerSecp256k1) Equals(other tmcrypto.PrivKey) bool { return false } +func (pkl PrivKeyLedgerSecp256k1) Type() string { return "PrivKeyLedgerSecp256k1" } + // warnIfErrors wraps a function and writes a warning to stderr. This is required // to avoid ignoring errors when defer is used. Using defer may result in linter warnings. func warnIfErrors(f func() error) { @@ -244,8 +246,8 @@ func getPubKeyUnsafe(device SECP256K1, path hd.BIP44Params) (tmcrypto.PubKey, er return nil, fmt.Errorf("error parsing public key: %v", err) } - var compressedPublicKey tmsecp256k1.PubKeySecp256k1 - copy(compressedPublicKey[:], cmp.SerializeCompressed()) + compressedPublicKey := make(tmsecp256k1.PubKey, tmsecp256k1.PubKeySize) + copy(compressedPublicKey, cmp.SerializeCompressed()) return compressedPublicKey, nil } @@ -268,8 +270,8 @@ func getPubKeyAddrSafe(device SECP256K1, path hd.BIP44Params, hrp string) (tmcry return nil, "", fmt.Errorf("error parsing public key: %v", err) } - var compressedPublicKey tmsecp256k1.PubKeySecp256k1 - copy(compressedPublicKey[:], cmp.SerializeCompressed()) + compressedPublicKey := make(tmsecp256k1.PubKey, tmsecp256k1.PubKeySize) + copy(compressedPublicKey, cmp.SerializeCompressed()) return compressedPublicKey, addr, nil } diff --git a/crypto/ledger/ledger_test.go b/crypto/ledger/ledger_test.go index 3de8ff5a38..9b21e464bc 100644 --- a/crypto/ledger/ledger_test.go +++ b/crypto/ledger/ledger_test.go @@ -29,7 +29,7 @@ func TestPublicKeyUnsafe(t *testing.T) { require.NotNil(t, priv) require.Equal(t, "eb5ae98721034fef9cd7c4c63588d3b03feb5281b9d232cba34d6f3d71aee59211ffbfe1fe87", - fmt.Sprintf("%x", priv.PubKey().Bytes()), + fmt.Sprintf("%x", cdc.Amino.MustMarshalBinaryBare(priv.PubKey())), "Is your device using test mnemonic: %s ?", testutil.TestMnemonic) pubKeyAddr, err := sdk.Bech32ifyPubKey(sdk.Bech32PubKeyTypeAccPub, priv.PubKey()) @@ -107,7 +107,7 @@ func TestPublicKeySafe(t *testing.T) { require.Nil(t, ShowAddress(path, priv.PubKey(), sdk.GetConfig().GetBech32AccountAddrPrefix())) require.Equal(t, "eb5ae98721034fef9cd7c4c63588d3b03feb5281b9d232cba34d6f3d71aee59211ffbfe1fe87", - fmt.Sprintf("%x", priv.PubKey().Bytes()), + fmt.Sprintf("%x", cdc.Amino.MustMarshalBinaryBare(priv.PubKey())), "Is your device using test mnemonic: %s ?", testutil.TestMnemonic) pubKeyAddr, err := sdk.Bech32ifyPubKey(sdk.Bech32PubKeyTypeAccPub, priv.PubKey()) @@ -219,7 +219,7 @@ func TestSignaturesHD(t *testing.T) { sig, err := priv.Sign(msg) require.Nil(t, err) - valid := pub.VerifyBytes(msg, sig) + valid := pub.VerifySignature(msg, sig) require.True(t, valid, "Is your device using test mnemonic: %s ?", testutil.TestMnemonic) } } @@ -234,11 +234,11 @@ func TestRealDeviceSecp256k1(t *testing.T) { sig, err := priv.Sign(msg) require.Nil(t, err) - valid := pub.VerifyBytes(msg, sig) + valid := pub.VerifySignature(msg, sig) require.True(t, valid) // now, let's serialize the public key and make sure it still works - bs := priv.PubKey().Bytes() + bs := cdc.Amino.MustMarshalBinaryBare(priv.PubKey()) pub2, err := cryptoAmino.PubKeyFromBytes(bs) require.Nil(t, err, "%+v", err) @@ -248,11 +248,11 @@ func TestRealDeviceSecp256k1(t *testing.T) { // signing with the loaded key should match the original pubkey sig, err = priv.Sign(msg) require.Nil(t, err) - valid = pub.VerifyBytes(msg, sig) + valid = pub.VerifySignature(msg, sig) require.True(t, valid) // make sure pubkeys serialize properly as well - bs = pub.Bytes() + bs = cdc.Amino.MustMarshalBinaryBare(pub) bpub, err := cryptoAmino.PubKeyFromBytes(bs) require.NoError(t, err) require.Equal(t, pub, bpub) diff --git a/crypto/types/multisig/codec.go b/crypto/types/multisig/codec.go index 970601dc2b..a18c6968a7 100644 --- a/crypto/types/multisig/codec.go +++ b/crypto/types/multisig/codec.go @@ -21,10 +21,10 @@ func init() { Cdc.RegisterInterface((*crypto.PubKey)(nil), nil) Cdc.RegisterConcrete(PubKeyMultisigThreshold{}, PubKeyAminoRoute, nil) - Cdc.RegisterConcrete(ed25519.PubKeyEd25519{}, - ed25519.PubKeyAminoName, nil) - Cdc.RegisterConcrete(sr25519.PubKeySr25519{}, - sr25519.PubKeyAminoName, nil) - Cdc.RegisterConcrete(secp256k1.PubKeySecp256k1{}, - secp256k1.PubKeyAminoName, nil) + Cdc.RegisterConcrete(ed25519.PubKey{}, + ed25519.PubKeyName, nil) + Cdc.RegisterConcrete(sr25519.PubKey{}, + sr25519.PubKeyName, nil) + Cdc.RegisterConcrete(secp256k1.PubKey{}, + secp256k1.PubKeyName, nil) } diff --git a/crypto/types/multisig/threshold_pubkey.go b/crypto/types/multisig/threshold_pubkey.go index 44fc48b6ed..1c5cabf72f 100644 --- a/crypto/types/multisig/threshold_pubkey.go +++ b/crypto/types/multisig/threshold_pubkey.go @@ -42,7 +42,7 @@ func NewPubKeyMultisigThreshold(k int, pubkeys []crypto.PubKey) PubKey { // // NOTE: VerifyMultisignature should preferred to VerifyBytes which only works // with amino multisignatures. -func (pk PubKeyMultisigThreshold) VerifyBytes(msg []byte, marshalledSig []byte) bool { +func (pk PubKeyMultisigThreshold) VerifySignature(msg []byte, marshalledSig []byte) bool { var sig AminoMultisignature err := Cdc.UnmarshalBinaryBare(marshalledSig, &sig) if err != nil { @@ -65,7 +65,7 @@ func (pk PubKeyMultisigThreshold) VerifyBytes(msg []byte, marshalledSig []byte) sigIndex := 0 for i := 0; i < size; i++ { if sig.BitArray.GetIndex(i) { - if !pk.PubKeys[i].VerifyBytes(msg, sig.Sigs[sigIndex]) { + if !pk.PubKeys[i].VerifySignature(msg, sig.Sigs[sigIndex]) { return false } sigIndex++ @@ -102,7 +102,7 @@ func (pk PubKeyMultisigThreshold) VerifyMultisignature(getSignBytes GetSignBytes if err != nil { return err } - if !pk.PubKeys[i].VerifyBytes(msg, si.Signature) { + if !pk.PubKeys[i].VerifySignature(msg, si.Signature) { return err } case *signing.MultiSignatureData: @@ -159,3 +159,5 @@ func (pk PubKeyMultisigThreshold) Equals(other crypto.PubKey) bool { func (pk PubKeyMultisigThreshold) GetThreshold() uint { return pk.K } + +func (pk PubKeyMultisigThreshold) Type() string { return "PubKeyMultisigThreshold" } diff --git a/docs/core/context.md b/docs/core/context.md index 29af8ebb22..e7c42bd339 100644 --- a/docs/core/context.md +++ b/docs/core/context.md @@ -19,7 +19,7 @@ The SDK `Context` is a custom data structure that contains Go's stdlib [`context type Context struct { ctx context.Context ms MultiStore - header abci.Header + header tmproto.Header chainID string txBytes []byte logger log.Logger diff --git a/go.mod b/go.mod index 2d890abe13..f037eb9993 100644 --- a/go.mod +++ b/go.mod @@ -7,13 +7,13 @@ require ( github.com/armon/go-metrics v0.3.4 github.com/bgentry/speakeasy v0.1.0 github.com/btcsuite/btcd v0.20.1-beta - github.com/confio/ics23-iavl v0.6.0 - github.com/confio/ics23/go v0.0.0-20200804135649-a9fbc744ca3d + github.com/confio/ics23/go v0.0.0-20200804135932-65ad804e8539 github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d + github.com/cosmos/iavl v0.15.0-rc1 github.com/cosmos/ledger-cosmos-go v0.11.1 github.com/enigmampc/btcutil v1.0.3-0.20200723161021-e2fb6adb2a25 github.com/gogo/protobuf v1.3.1 - github.com/golang/mock v1.4.4 + github.com/golang/mock v1.4.3 github.com/golang/protobuf v1.4.2 github.com/gorilla/handlers v1.4.2 github.com/gorilla/mux v1.7.4 @@ -30,16 +30,15 @@ require ( github.com/spf13/afero v1.2.2 // indirect github.com/spf13/cast v1.3.1 github.com/spf13/cobra v1.0.0 - github.com/spf13/jwalterweatherman v1.1.0 // indirect + github.com/spf13/jwalterweatherman v1.1.0 // indirect; indirects github.com/spf13/pflag v1.0.5 github.com/spf13/viper v1.7.1 github.com/stretchr/testify v1.6.1 github.com/tendermint/btcd v0.1.1 github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15 github.com/tendermint/go-amino v0.15.1 - github.com/tendermint/iavl v0.14.0 - github.com/tendermint/tendermint v0.33.8 - github.com/tendermint/tm-db v0.5.1 + github.com/tendermint/tendermint v0.34.0-rc3 + github.com/tendermint/tm-db v0.6.1 google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 google.golang.org/grpc v1.31.0 google.golang.org/protobuf v1.25.0 diff --git a/go.sum b/go.sum index 5468d2618a..438bfa71ad 100644 --- a/go.sum +++ b/go.sum @@ -16,12 +16,13 @@ github.com/99designs/keyring v1.1.5/go.mod h1:7hsVvt2qXgtadGevGJ4ujg+u8m6SpJ5TpH github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= 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-20200102211924-4bcbc698314f h1:4O1om+UVU+Hfcihr1timk8YNXHxzZWgCo7ofnrZRApw= -github.com/ChainSafe/go-schnorrkel v0.0.0-20200102211924-4bcbc698314f/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= 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/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= +github.com/DataDog/zstd v1.4.1 h1:3oxKN3wbHibqx897utPC2LTQU4J+IHWWJO+glkAkpFM= +github.com/DataDog/zstd v1.4.1/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= +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= @@ -85,14 +86,13 @@ github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDk github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= 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/confio/ics23-iavl v0.6.0 h1:vVRCuVaP38FCw1kTeEdFuGuiY+2vAGTBQoH7Zxkq/ws= -github.com/confio/ics23-iavl v0.6.0/go.mod h1:mmXAxD1vWoO0VP8YHu6mM1QHGv71NQqa1iSVm4HeKcY= -github.com/confio/ics23/go v0.0.0-20200323120010-7d9a00f0a2fa/go.mod h1:W1I3XC8d9N8OTu/ct5VJ84ylcOunZwMXsWkd27nvVts= -github.com/confio/ics23/go v0.0.0-20200804135649-a9fbc744ca3d h1:VbtIIE3NDC6/aIRUR9FdmRE4l0B5IDgYHiFi8pw0QOc= -github.com/confio/ics23/go v0.0.0-20200804135649-a9fbc744ca3d/go.mod h1:E45NqnlpxGnpfTWL/xauN7MRwEE28T4Dd4uraToOaKg= +github.com/confio/ics23/go v0.0.0-20200610201322-18c7bd6b2dd3/go.mod h1:W1I3XC8d9N8OTu/ct5VJ84ylcOunZwMXsWkd27nvVts= +github.com/confio/ics23/go v0.0.0-20200804135932-65ad804e8539 h1:4AuX7KNUVdNa/am9yCQRqWMfdDJ86EtFJk/xwf6ntgc= +github.com/confio/ics23/go v0.0.0-20200804135932-65ad804e8539/go.mod h1:E45NqnlpxGnpfTWL/xauN7MRwEE28T4Dd4uraToOaKg= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/etcd v3.3.13+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-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= @@ -101,10 +101,13 @@ github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfc github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d h1:49RLWk1j44Xu4fjHb6JFYmeUnDORVwHNkDxaQ0ctCVU= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= +github.com/cosmos/iavl v0.15.0-rc1 h1:cYMPAxu5xpGPhGYvGlpeCmgmgH7oY+kebZm2oHfh2nE= +github.com/cosmos/iavl v0.15.0-rc1/go.mod h1:qFTkoCC00sBKWCG3Ws8GAUaYR1jIOtwNZ9p8uFOu4Jo= github.com/cosmos/ledger-cosmos-go v0.11.1 h1:9JIYsGnXP613pb2vPjFeMMjBI5lEDsEaF6oYorTy6J4= github.com/cosmos/ledger-cosmos-go v0.11.1/go.mod h1:J8//BsAGTo3OC/vDLjMRFLW6q0WAaXvHnVc7ZmE8iUY= github.com/cosmos/ledger-go v0.9.2 h1:Nnao/dLwaVTk1Q5U9THldpUMMXU94BOTWPddSmVB6pI= github.com/cosmos/ledger-go v0.9.2/go.mod h1:oZJ2hHAZROdlHiwTg4t7kP+GKIIkBT+o6c9QWFanOyI= +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.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= @@ -114,9 +117,17 @@ github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2 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/dgraph-io/badger/v2 v2.0.3 h1:inzdf6VF/NZ+tJ8RwwYMjJMvsOALTHYdozn0qSl6XJI= +github.com/dgraph-io/badger/v2 v2.0.3/go.mod h1:3KY8+bsP8wI0OEnQJAKpd4wIJW/Mm32yw2j/9FUVnIM= +github.com/dgraph-io/ristretto v0.0.2-0.20200115201040-8f368f2f2ab3 h1:MQLRM35Pp0yAyBYksjbj1nZI/w6eyRY/mWoM1sFf4kU= +github.com/dgraph-io/ristretto v0.0.2-0.20200115201040-8f368f2f2ab3/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2 h1:tdlZCpZ/P9DhczCTSixgIKmwPv6+wP5DGjqLYw5SUiA= +github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= 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/dvsekhvalnov/jose2go v0.0.0-20180829124132-7f401d37b68a h1:mq+R6XEM6lJX5VlLyZIrUSP8tSuJp82xTK89hvBwJbU= github.com/dvsekhvalnov/jose2go v0.0.0-20180829124132-7f401d37b68a/go.mod h1:7BvyPhdbLxMXIYTFPLsyJRFMsKmOZnQmzh6Gb+uquuM= github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= @@ -130,8 +141,6 @@ github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymF 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/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/etcd-io/bbolt v1.3.3 h1:gSJmxrs37LgTqR/oyJBWok6k6SvXEUerFTbltIhXkBM= -github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw= github.com/facebookgo/ensure v0.0.0-20160127193407-b4ab57deab51 h1:0JZ+dUmQeA8IIVUMzysrX4/AKuQwWhV2dYQuPZdvdSQ= github.com/facebookgo/ensure v0.0.0-20160127193407-b4ab57deab51/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A= @@ -168,20 +177,18 @@ github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4er 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.4 h1:l75CXGRSwbaYNpl/Z2X1XIIAMSCquvXgpVZDhwEIJsc= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= +github.com/golang/mock v1.4.3 h1:GV+pQPG/EUUbkh47niozDcADz6go/dUwhVzdUQHIVRw= +github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= 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 h1:oOuy+ugB+P/kBdUnG5QaMXSIyJ1q38wWSojYCb3z5VQ= 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 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= @@ -195,7 +202,6 @@ github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ 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 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= @@ -220,8 +226,6 @@ github.com/gorilla/mux v1.7.4 h1:VuZ8uybHlWmqV03+zRzdwKL4tUnIp1MAQtp1mIFE1bc= github.com/gorilla/mux v1.7.4/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gorilla/websocket v1.4.1 h1:q7AeDBpnBk8AogcD4DSag/Ukw/KV+YhzLj2bP5HvKCM= -github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= @@ -233,7 +237,6 @@ github.com/grpc-ecosystem/grpc-gateway v1.14.6 h1:8ERzHx8aj1Sc47mu9n/AksaKCSWrMc github.com/grpc-ecosystem/grpc-gateway v1.14.6/go.mod h1:zdiPV4Yse/1gnckTHtghG4GkDEdKCRJduHpTxT3/jcw= 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 h1:8N8XWLZelZNibkhM1FuF+3Ad3YIbgirjdMiVA0eUkaM= 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= @@ -301,7 +304,6 @@ github.com/kkdai/bstream v1.0.0/go.mod h1:FDnDOHt5Yx4p3FaHcioFT0QjDOtgUpvjeZqAs+ 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/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= -github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= @@ -352,6 +354,8 @@ github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzE 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 h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= 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= @@ -379,7 +383,6 @@ github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT9 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/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= -github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c h1:Lgl0gzECD8GnQ5QCWA8o6BtfL6mDH5rQgM4/fX3avOs= 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= @@ -388,6 +391,8 @@ github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/9 github.com/pelletier/go-toml v1.8.0 h1:Keo9qb7iRJs2voHvunFtuuYFsbWeOBh8/P9v/kVMFtw= github.com/pelletier/go-toml v1.8.0/go.mod h1:D6yutnOGMveHEPV7VQOuvI/gXY61bv+9bAOTRnLElKs= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= +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/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/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -404,10 +409,6 @@ github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDf 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.5.0 h1:Ctq0iGpCmr3jeP77kbF2UxgvRwzWWz+4Bh9/vJTyg1A= -github.com/prometheus/client_golang v1.5.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= -github.com/prometheus/client_golang v1.5.1 h1:bdHYieyGlH+6OLEk2YQha8THib30KP0/yD0YH9m6xcA= -github.com/prometheus/client_golang v1.5.1/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= github.com/prometheus/client_golang v1.7.1 h1:NTGy1Ja9pByO+xAeH/qiWnLrKtr3hJPNjaVUwnjpdpA= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= @@ -422,7 +423,6 @@ github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y8 github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= -github.com/prometheus/common v0.9.1 h1:KOMtN28tlbam3/7ZKEYKHhKoJZYYj3gMH4uc62x7X7U= github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= github.com/prometheus/common v0.10.0 h1:RyRA7RzGXQZiW+tGMr7sxa85G1z0yOpM1qq5c8lNawc= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= @@ -432,14 +432,12 @@ github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.8 h1:+fpWZdT24pJBiqJdAwYBjPSk+5YmQzYNPYzQsdzLkt8= github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.1.3 h1:F0+tqvhOksq22sc6iCHF5WGlWjdwj92p0udFh1VFBS8= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= 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 h1:9ZKAASQSHhDYGoxY8uLVpewe1GDZ2vu2Tr/vTdVAkFQ= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0 h1:MkV+77GLUNo5oJ0jf870itWm3D0Sjh7+Za9gazKc5LQ= github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= @@ -452,9 +450,12 @@ 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/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= +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/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.2.0 h1:lMqc+fUb7RrFS3gQLtoQsJ7/6TV/pAIFvBsqX73DK8Y= +github.com/sasha-s/go-deadlock v0.2.0/go.mod h1:StQn567HiB1fF2yJ44N9au7wOhrPS3iZqiDbRupzT10= 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= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= @@ -468,16 +469,16 @@ github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa/go.mod h1:oJyF+mSPH 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.2.2 h1:5jhuqJyZCZf2JRofRvN/nIFgIWNzPa3/Vz8mYylgbWc= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= -github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.3.1 h1:nFm6S0SMdyzrzcmThSipiEubIDy8WEXKNZ0UOgiRpng= github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/cobra v0.0.6 h1:breEStsVwemnKh2/s6gMvSdMEkwW0sK8vGStnlVBMCs= -github.com/spf13/cobra v0.0.6/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= +github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= github.com/spf13/cobra v1.0.0 h1:6m/oheQuQ13N9ks4hubMG6BnvwOeaJrqSPLahSnczz8= github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= @@ -487,9 +488,9 @@ github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnIn 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.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= -github.com/spf13/viper v1.6.2/go.mod h1:t3iDnF5Jlj76alVNuyFBk5oUMCvsrkbvZK0WQdfDi5k= -github.com/spf13/viper v1.6.3/go.mod h1:jUMtyi0/lB5yZH/FjyGAoH7IMNrIhlBf6pXZmbMDvzw= +github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/spf13/viper v1.7.1 h1:pM5oEahlgWv/WnHXpgbKz7iLIxRf65tye2Ci+XFK5sk= github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= @@ -502,8 +503,6 @@ github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoH 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 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= @@ -516,26 +515,20 @@ 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.14.1/go.mod h1:i/UKE5Uocn+argJJBb12qTZsCDBcAYMbR92AaJVmKso= github.com/tendermint/go-amino v0.15.1 h1:D2uk35eT4iTsvJd9jWIetzthE5C0/k2QmMFkCN+4JgQ= github.com/tendermint/go-amino v0.15.1/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME= -github.com/tendermint/iavl v0.13.2/go.mod h1:vE1u0XAGXYjHykd4BLp8p/yivrw2PF1TuoljBcsQoGA= -github.com/tendermint/iavl v0.14.0 h1:Jkff+IFrXxRWtH9Jn/ga/2cxNnzMTv58xEKgCJsKUBg= -github.com/tendermint/iavl v0.14.0/go.mod h1:QmfViflFiXzxKLQE4tAUuWQHq+RSuQFxablW5oJZ6sE= -github.com/tendermint/tendermint v0.33.2 h1:NzvRMTuXJxqSsFed2J7uHmMU5N1CVzSpfi3nCc882KY= -github.com/tendermint/tendermint v0.33.2/go.mod h1:25DqB7YvV1tN3tHsjWoc2vFtlwICfrub9XO6UBO+4xk= -github.com/tendermint/tendermint v0.33.5 h1:jYgRd9ImkzA9iOyhpmgreYsqSB6tpDa6/rXYPb8HKE8= -github.com/tendermint/tendermint v0.33.5/go.mod h1:0yUs9eIuuDq07nQql9BmI30FtYGcEC60Tu5JzB5IezM= -github.com/tendermint/tendermint v0.33.8 h1:Xxu4QhpqcomSE0iQDw1MqLgfsa8fqtPtWFJK6zZOVso= -github.com/tendermint/tendermint v0.33.8/go.mod h1:0yUs9eIuuDq07nQql9BmI30FtYGcEC60Tu5JzB5IezM= -github.com/tendermint/tm-db v0.4.1/go.mod h1:JsJ6qzYkCGiGwm5GHl/H5GLI9XLb6qZX7PRe425dHAY= -github.com/tendermint/tm-db v0.5.0/go.mod h1:lSq7q5WRR/njf1LnhiZ/lIJHk2S8Y1Zyq5oP/3o9C2U= -github.com/tendermint/tm-db v0.5.1 h1:H9HDq8UEA7Eeg13kdYckkgwwkQLBnJGgX4PgLJRhieY= -github.com/tendermint/tm-db v0.5.1/go.mod h1:g92zWjHpCYlEvQXvy9M168Su8V1IBEeawpXVVBaK4f4= +github.com/tendermint/tendermint v0.34.0-rc2/go.mod h1:+AG8ftE2PD4uMVzGSB7c0oH9xbTlIyMeoX0M9r89x3Y= +github.com/tendermint/tendermint v0.34.0-rc3 h1:d7Fsd5rdbxq4GmJ0kRfx7l7LesQM7e70f0ytWLTQ/Go= +github.com/tendermint/tendermint v0.34.0-rc3/go.mod h1:BoHcEpjfpBHc1Be7RQz3AHaXFNObcDG7SNHCev6Or4g= +github.com/tendermint/tm-db v0.6.0 h1:Us30k7H1UDcdqoSPhmP8ztAW/SWV6c6OfsfeCiboTC4= +github.com/tendermint/tm-db v0.6.0/go.mod h1:xj3AWJ08kBDlCHKijnhJ7mTcDMOikT1r8Poxy2pJn7Q= +github.com/tendermint/tm-db v0.6.1 h1:w3X87itMPXopcRPlFiqspEKhw4FXihPk2rnFFkP0zGk= +github.com/tendermint/tm-db v0.6.1/go.mod h1:m3x9kRP4UFd7JODJL0yBAZqE7wTw+S37uAE90cTx7OA= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= +github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= 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/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= @@ -543,8 +536,9 @@ github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1: github.com/zondax/hid v0.9.0 h1:eiT3P6vNxAEVxXMw66eZUAAnU2zD33JBkfG/EnfAKl8= github.com/zondax/hid v0.9.0/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.3 h1:MUGmc65QhB3pIlaQ5bB4LwqSj6GIonVJXpZiaKNyaKk= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/bbolt v1.3.5 h1:XAzx9gjCb0Rxj7EoqcClPD1d5ZBxZJk0jbuoPHenBt0= +go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= 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= @@ -562,18 +556,15 @@ go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-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-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413 h1:ULYEB3JvPRE/IfO+9uO7vKV/xzVTO7XPAwm8xbf4w2g= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200406173513-056763e48d71 h1:DOmugCavvUtnUD114C1Wh+UgTgQZ4pMLzXxi1pSt+/Y= golang.org/x/crypto v0.0.0-20200406173513-056763e48d71/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200429183012-4b2356b1ed79 h1:IaQbIIB2X/Mp/DKctl6ROxz1KyMlKp4uyvL6+kQ7C88= -golang.org/x/crypto v0.0.0-20200429183012-4b2356b1ed79/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899 h1:DZhuSZLsGlFL4CmhA8BcRA0mnthyA/nZ00AqCUo7vHg= golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= @@ -614,7 +605,6 @@ golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR 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-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k= @@ -630,7 +620,6 @@ golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJ 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 h1:vcxGaoTs7kV8m5Np9uUNQin4BrLOthgV7252N8V+FwY= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/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= @@ -640,6 +629,7 @@ golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5h 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-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -649,20 +639,21 @@ golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7w 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-20190712062909-fae7ac547cb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/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 h1:ywK/j/KkyTHcdyYSZNXGjMwgmDSfjglYZ3vStQ/gSCU= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd h1:xhmwyvizuTgC2qz7ZlMluP20uW+C3Rm0FD/WLDX8884= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1 h1:ogLJMz+qpzav7lGMh10LMvAkM/fAoGlaiiHYiFYdm80= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae h1:Ih9Yo4hSPImZOpfGuA4bR/ORKTAbhZo2AbWNRCnevdo= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +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 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= @@ -693,7 +684,6 @@ golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200110213125-a7a6caa82ab2 h1:V9r/14uGBqLgNlHRYWdVqjMdWkcOHnE2KG8DwVqQSEc= golang.org/x/tools v0.0.0-20200110213125-a7a6caa82ab2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= 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= @@ -721,7 +711,6 @@ google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98 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-20200324203455-a04cca1dde73 h1:+yTMTeazSO5iBqU9NR53hgriivQQbYa5Uuaj8r3qKII= google.golang.org/genproto v0.0.0-20200324203455-a04cca1dde73/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 h1:+kGHl1aib/qcwaRi1CbqBZ1rk19r85MNUf8HaBghugY= @@ -738,31 +727,28 @@ google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyac 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 h1:bO/TA4OxCOummhSf10siHuG7vJOiwh7SpRpFZDkOgl4= google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.28.1 h1:C1QC6KzgSiLyBabDi87BbjaGreoRgGUF5nOyvfrAZ1k= -google.golang.org/grpc v1.28.1/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 h1:T7P4R73V3SSDPhH7WW7ATbfViLtmamH0DKrP3f9AuDI= google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= 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 h1:qdOKuR/EIArgaWNjetjgTzgVTAZ+S/WXVrq9HW9zimw= 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 h1:4MY060fB1DLGMB/7MBTLnwQUY6+F09GEiz6SsrNqyzM= 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 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= 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 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/cheggaaa/pb.v1 v1.0.25/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 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= @@ -791,5 +777,7 @@ honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWh 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= 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= sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= diff --git a/proto/cosmos/base/abci/v1beta1/abci.proto b/proto/cosmos/base/abci/v1beta1/abci.proto index 3408443b41..fc05880aa1 100644 --- a/proto/cosmos/base/abci/v1beta1/abci.proto +++ b/proto/cosmos/base/abci/v1beta1/abci.proto @@ -1,14 +1,13 @@ syntax = "proto3"; package cosmos.base.abci.v1beta1; -import "tendermint/abci/types/types.proto"; import "gogoproto/gogo.proto"; +import "tendermint/abci/types.proto"; import "google/protobuf/any.proto"; option go_package = "github.com/cosmos/cosmos-sdk/types"; option (gogoproto.goproto_stringer_all) = false; - // TxResponse defines a structure containing relevant tx data and metadata. The // tags are stringified and the log is JSON decoded. message TxResponse { @@ -35,7 +34,7 @@ message TxResponse { int64 gas_used = 10; // The request transaction bytes. google.protobuf.Any tx = 11; - // Time of the previous block. For heights > 1, it's the weighted median of the + // Time of the previous block. For heights > 1, it's the weighted median of the // timestamps of the valid votes in the block.LastCommit. For height == 1, it's genesis time. string timestamp = 12; } @@ -45,7 +44,7 @@ message ABCIMessageLog { option (gogoproto.stringer) = true; uint32 msg_index = 1; - string log = 2; + string log = 2; // Events contains a slice of Event objects that were emitted during some // execution. @@ -57,14 +56,14 @@ message ABCIMessageLog { message StringEvent { option (gogoproto.stringer) = true; - string type = 1; + string type = 1; repeated Attribute attributes = 2 [(gogoproto.nullable) = false]; } // Attribute defines an attribute wrapper where the key and value are // strings instead of raw bytes. message Attribute { - string key = 1; + string key = 1; string value = 2; } @@ -90,7 +89,7 @@ message Result { // Events contains a slice of Event objects that were emitted during message or // handler execution. - repeated tendermint.abci.types.Event events = 3 [(gogoproto.nullable) = false]; + repeated tendermint.abci.Event events = 3 [(gogoproto.nullable) = false]; } // SimulationResponse defines the response generated when a transaction is @@ -114,4 +113,4 @@ message TxMsgData { option (gogoproto.stringer) = true; repeated MsgData data = 1; -} \ No newline at end of file +} diff --git a/proto/cosmos/staking/v1beta1/staking.proto b/proto/cosmos/staking/v1beta1/staking.proto index 710eb81eb3..cace6cf6aa 100644 --- a/proto/cosmos/staking/v1beta1/staking.proto +++ b/proto/cosmos/staking/v1beta1/staking.proto @@ -2,7 +2,7 @@ syntax = "proto3"; package cosmos.staking.v1beta1; import "gogoproto/gogo.proto"; -import "tendermint/abci/types/types.proto"; +import "tendermint/types/types.proto"; import "google/protobuf/timestamp.proto"; import "google/protobuf/duration.proto"; import "cosmos/base/v1beta1/coin.proto"; @@ -12,10 +12,8 @@ option go_package = "github.com/cosmos/cosmos-sdk/x/staking/types"; // HistoricalInfo contains the historical information that gets stored at // each height. message HistoricalInfo { - option (gogoproto.equal) = true; - - tendermint.abci.types.Header header = 1 [(gogoproto.nullable) = false]; - repeated Validator valset = 2 [(gogoproto.nullable) = false]; + tendermint.types.Header header = 1 [(gogoproto.nullable) = false]; + repeated Validator valset = 2 [(gogoproto.nullable) = false]; } // CommissionRates defines the initial commission rates to be used for creating @@ -45,8 +43,8 @@ message Commission { option (gogoproto.equal) = true; option (gogoproto.goproto_stringer) = false; - CommissionRates commission_rates = 1 [(gogoproto.embed) = true, (gogoproto.nullable) = false]; - google.protobuf.Timestamp update_time = 2 [ + CommissionRates commission_rates = 1 [(gogoproto.embed) = true, (gogoproto.nullable) = false]; + google.protobuf.Timestamp update_time = 2 [ (gogoproto.nullable) = false, (gogoproto.stdtime) = true, (gogoproto.moretags) = "yaml:\"update_time\"" @@ -83,8 +81,8 @@ message Validator { ]; string consensus_pubkey = 2 [(gogoproto.moretags) = "yaml:\"consensus_pubkey\""]; bool jailed = 3; - int32 status = 4 [(gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.BondStatus"]; - string tokens = 5 [ + int32 status = 4 [(gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.BondStatus"]; + string tokens = 5 [ (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", (gogoproto.nullable) = false ]; @@ -93,9 +91,9 @@ message Validator { (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", (gogoproto.nullable) = false ]; - Description description = 7 [(gogoproto.nullable) = false]; - int64 unbonding_height = 8 [(gogoproto.moretags) = "yaml:\"unbonding_height\""]; - google.protobuf.Timestamp unbonding_time = 9 [ + Description description = 7 [(gogoproto.nullable) = false]; + int64 unbonding_height = 8 [(gogoproto.moretags) = "yaml:\"unbonding_height\""]; + google.protobuf.Timestamp unbonding_time = 9 [ (gogoproto.nullable) = false, (gogoproto.stdtime) = true, (gogoproto.moretags) = "yaml:\"unbonding_time\"" @@ -111,7 +109,7 @@ message Validator { // ValAddresses defines a repeated set of validator addresses. message ValAddresses { option (gogoproto.goproto_stringer) = false; - option (gogoproto.stringer) = true; + option (gogoproto.stringer) = true; repeated bytes addresses = 1 [(gogoproto.casttype) = "github.com/cosmos/cosmos-sdk/types.ValAddress"]; } @@ -303,10 +301,10 @@ message RedelegationEntryResponse { option (gogoproto.equal) = true; RedelegationEntry redelegation_entry = 1 [(gogoproto.nullable) = false]; - string balance = 4 [ - (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", - (gogoproto.nullable) = false - ]; + string balance = 4 [ + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", + (gogoproto.nullable) = false + ]; } // RedelegationResponse is equivalent to a Redelegation except that its entries @@ -315,20 +313,19 @@ message RedelegationEntryResponse { message RedelegationResponse { option (gogoproto.equal) = true; - Redelegation redelegation = 1 [(gogoproto.nullable) = false]; - repeated RedelegationEntryResponse entries = 2 [(gogoproto.nullable) = false]; + Redelegation redelegation = 1 [(gogoproto.nullable) = false]; + repeated RedelegationEntryResponse entries = 2 [(gogoproto.nullable) = false]; } // Pool - tracking bonded and not-bonded token supply of the bond denomination message Pool { option (gogoproto.description) = true; - option (gogoproto.equal) = true; - string not_bonded_tokens = 1 [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", + option (gogoproto.equal) = true; + string not_bonded_tokens = 1 [(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", (gogoproto.jsontag) = "not_bonded_tokens", (gogoproto.nullable) = false]; - string bonded_tokens = 2 [(gogoproto.jsontag) = "bonded_tokens", + string bonded_tokens = 2 [(gogoproto.jsontag) = "bonded_tokens", (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Int", (gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"bonded_tokens\""]; } - diff --git a/proto/ibc/commitment/commitment.proto b/proto/ibc/commitment/commitment.proto index 99062d4f1c..9fd11fe52c 100644 --- a/proto/ibc/commitment/commitment.proto +++ b/proto/ibc/commitment/commitment.proto @@ -4,7 +4,7 @@ package ibc.commitment; option go_package = "github.com/cosmos/cosmos-sdk/x/ibc/23-commitment/types"; import "gogoproto/gogo.proto"; -import "tendermint/crypto/merkle/merkle.proto"; +import "tendermint/crypto/proof.proto"; // MerkleRoot defines a merkle root hash. // In the Cosmos SDK, the AppHash of a block header becomes the root. @@ -36,9 +36,7 @@ message MerklePath { // verifiable in conjunction with a known commitment root. Proofs should be // succinct. message MerkleProof { - option (gogoproto.equal) = true; - - tendermint.crypto.merkle.Proof proof = 1; + tendermint.crypto.ProofOps proof = 1; } // KeyPath defines a slice of keys diff --git a/server/export.go b/server/export.go index fed418b97a..d54a859add 100644 --- a/server/export.go +++ b/server/export.go @@ -9,6 +9,7 @@ import ( "os" "github.com/spf13/cobra" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" tmtypes "github.com/tendermint/tendermint/types" "github.com/cosmos/cosmos-sdk/client/flags" @@ -75,17 +76,19 @@ func ExportCmd(appExporter types.AppExporter, defaultNodeHome string) *cobra.Com doc.AppState = appState doc.Validators = validators - doc.ConsensusParams = &tmtypes.ConsensusParams{ - Block: tmtypes.BlockParams{ + doc.ConsensusParams = &tmproto.ConsensusParams{ + Block: tmproto.BlockParams{ MaxBytes: cp.Block.MaxBytes, MaxGas: cp.Block.MaxGas, TimeIotaMs: doc.ConsensusParams.Block.TimeIotaMs, }, - Evidence: tmtypes.EvidenceParams{ - MaxAgeNumBlocks: cp.Evidence.MaxAgeNumBlocks, - MaxAgeDuration: cp.Evidence.MaxAgeDuration, + Evidence: tmproto.EvidenceParams{ + MaxAgeNumBlocks: cp.Evidence.MaxAgeNumBlocks, + MaxAgeDuration: cp.Evidence.MaxAgeDuration, + MaxNum: cp.Evidence.MaxNum, + ProofTrialPeriod: cp.Evidence.ProofTrialPeriod, }, - Validator: tmtypes.ValidatorParams{ + Validator: tmproto.ValidatorParams{ PubKeyTypes: cp.Validator.PubKeyTypes, }, } diff --git a/server/mock/app_test.go b/server/mock/app_test.go index 3dd451970c..2741925df0 100644 --- a/server/mock/app_test.go +++ b/server/mock/app_test.go @@ -3,11 +3,10 @@ package mock import ( "testing" - "github.com/tendermint/tendermint/types" - "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + "github.com/tendermint/tendermint/types" ) // TestInitApp makes sure we can initialize this thing without an error @@ -57,7 +56,7 @@ func TestDeliverTx(t *testing.T) { tx := NewTx(key, value) txBytes := tx.GetSignBytes() - header := abci.Header{ + header := tmproto.Header{ AppHash: []byte("apphash"), Height: 1, } diff --git a/server/tm_cmds.go b/server/tm_cmds.go index 7a90638008..6bcba09aa8 100644 --- a/server/tm_cmds.go +++ b/server/tm_cmds.go @@ -116,8 +116,8 @@ against which this app has been compiled. }{ Tendermint: tversion.Version, ABCI: tversion.ABCIVersion, - BlockProtocol: tversion.BlockProtocol.Uint64(), - P2PProtocol: tversion.P2PProtocol.Uint64(), + BlockProtocol: tversion.BlockProtocol, + P2PProtocol: tversion.P2PProtocol, }) if err != nil { return err diff --git a/server/util.go b/server/util.go index 7db8742d38..b19f7942bc 100644 --- a/server/util.go +++ b/server/util.go @@ -129,7 +129,6 @@ func interceptConfigs(ctx *Context, rootViper *viper.Viper) (*tmcfg.Config, erro conf.ProfListenAddress = "localhost:6060" conf.P2P.RecvRate = 5120000 conf.P2P.SendRate = 5120000 - conf.TxIndex.IndexAllKeys = true conf.Consensus.TimeoutCommit = 5 * time.Second tmcfg.WriteConfigFile(configFile, conf) } else { diff --git a/simapp/app.go b/simapp/app.go index 5187e040e3..a254049ef3 100644 --- a/simapp/app.go +++ b/simapp/app.go @@ -7,6 +7,7 @@ import ( abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/libs/log" tmos "github.com/tendermint/tendermint/libs/os" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" dbm "github.com/tendermint/tm-db" "github.com/cosmos/cosmos-sdk/baseapp" @@ -382,7 +383,7 @@ func NewSimApp( // sub-keepers. // This must be done during creation of baseapp rather than in InitChain so // that in-memory capabilities get regenerated on app restart - ctx := app.BaseApp.NewUncachedContext(true, abci.Header{}) + ctx := app.BaseApp.NewUncachedContext(true, tmproto.Header{}) app.CapabilityKeeper.InitializeAndSeal(ctx) app.ScopedIBCKeeper = scopedIBCKeeper diff --git a/simapp/export.go b/simapp/export.go index 6731306585..7f4a2036cb 100644 --- a/simapp/export.go +++ b/simapp/export.go @@ -5,6 +5,7 @@ import ( "log" abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" tmtypes "github.com/tendermint/tendermint/types" sdk "github.com/cosmos/cosmos-sdk/types" @@ -21,7 +22,7 @@ func (app *SimApp) ExportAppStateAndValidators( ) (appState json.RawMessage, validators []tmtypes.GenesisValidator, cp *abci.ConsensusParams, err error) { // as if they could withdraw from the start of the next block - ctx := app.NewContext(true, abci.Header{Height: app.LastBlockHeight()}) + ctx := app.NewContext(true, tmproto.Header{Height: app.LastBlockHeight()}) if forZeroHeight { app.prepForZeroHeightGenesis(ctx, jailWhiteList) diff --git a/simapp/sim_bench_test.go b/simapp/sim_bench_test.go index 20a89e94b4..ed97770034 100644 --- a/simapp/sim_bench_test.go +++ b/simapp/sim_bench_test.go @@ -5,7 +5,7 @@ import ( "os" "testing" - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/x/simulation" ) @@ -87,7 +87,7 @@ func BenchmarkInvariants(b *testing.B) { PrintStats(db) } - ctx := app.NewContext(true, abci.Header{Height: app.LastBlockHeight() + 1}) + ctx := app.NewContext(true, tmproto.Header{Height: app.LastBlockHeight() + 1}) // 3. Benchmark each invariant separately // diff --git a/simapp/sim_test.go b/simapp/sim_test.go index 2fac8adb5e..6428e1a656 100644 --- a/simapp/sim_test.go +++ b/simapp/sim_test.go @@ -8,9 +8,9 @@ import ( "testing" "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/libs/log" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" dbm "github.com/tendermint/tm-db" "github.com/cosmos/cosmos-sdk/baseapp" @@ -140,8 +140,8 @@ func TestAppImportExport(t *testing.T) { err = json.Unmarshal(appState, &genesisState) require.NoError(t, err) - ctxA := app.NewContext(true, abci.Header{Height: app.LastBlockHeight()}) - ctxB := newApp.NewContext(true, abci.Header{Height: app.LastBlockHeight()}) + ctxA := app.NewContext(true, tmproto.Header{Height: app.LastBlockHeight()}) + ctxB := newApp.NewContext(true, tmproto.Header{Height: app.LastBlockHeight()}) newApp.mm.InitGenesis(ctxB, app.AppCodec(), genesisState) newApp.StoreConsensusParams(ctxB, consensusParams) diff --git a/simapp/state.go b/simapp/state.go index 9d646461c4..54629441c3 100644 --- a/simapp/state.go +++ b/simapp/state.go @@ -152,7 +152,7 @@ func AppStateFromGenesisFileFn(r io.Reader, cdc codec.JSONMarshaler, genesisFile panic(err) } - privKey := secp256k1.GenPrivKeySecp256k1(privkeySeed) + privKey := secp256k1.GenPrivKeyFromSecret(privkeySeed) a, ok := acc.GetCachedValue().(authtypes.AccountI) if !ok { diff --git a/simapp/test_helpers.go b/simapp/test_helpers.go index 1cccb71cfe..6d96fa0534 100644 --- a/simapp/test_helpers.go +++ b/simapp/test_helpers.go @@ -14,6 +14,7 @@ import ( "github.com/tendermint/tendermint/crypto" "github.com/tendermint/tendermint/crypto/ed25519" "github.com/tendermint/tendermint/libs/log" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" tmtypes "github.com/tendermint/tendermint/types" dbm "github.com/tendermint/tm-db" @@ -33,14 +34,13 @@ var DefaultConsensusParams = &abci.ConsensusParams{ MaxBytes: 200000, MaxGas: 2000000, }, - Evidence: &abci.EvidenceParams{ + Evidence: &tmproto.EvidenceParams{ MaxAgeNumBlocks: 302400, MaxAgeDuration: 504 * time.Hour, // 3 weeks is the max duration }, - Validator: &abci.ValidatorParams{ + Validator: &tmproto.ValidatorParams{ PubKeyTypes: []string{ tmtypes.ABCIPubKeyTypeEd25519, - tmtypes.ABCIPubKeyTypeSecp256k1, }, }, } @@ -136,7 +136,7 @@ func SetupWithGenesisValSet(t *testing.T, valSet *tmtypes.ValidatorSet, genAccs // commit genesis changes app.Commit() - app.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{ + app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{ Height: app.LastBlockHeight() + 1, AppHash: app.LastCommitID().Hash, ValidatorsHash: valSet.Hash(), @@ -180,7 +180,7 @@ func SetupWithGenesisAccounts(genAccs []authtypes.GenesisAccount, balances ...ba ) app.Commit() - app.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: app.LastBlockHeight() + 1}}) + app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: app.LastBlockHeight() + 1}}) return app } @@ -309,7 +309,7 @@ func TestAddr(addr string, bech string) (sdk.AccAddress, error) { // CheckBalance checks the balance of an account. func CheckBalance(t *testing.T, app *SimApp, addr sdk.AccAddress, balances sdk.Coins) { - ctxCheck := app.BaseApp.NewContext(true, abci.Header{}) + ctxCheck := app.BaseApp.NewContext(true, tmproto.Header{}) require.True(t, balances.IsEqual(app.BankKeeper.GetAllBalances(ctxCheck, addr))) } @@ -318,7 +318,7 @@ func CheckBalance(t *testing.T, app *SimApp, addr sdk.AccAddress, balances sdk.C // the parameter 'expPass' against the result. A corresponding result is // returned. func SignCheckDeliver( - t *testing.T, txGen client.TxConfig, app *bam.BaseApp, header abci.Header, msgs []sdk.Msg, + t *testing.T, txGen client.TxConfig, app *bam.BaseApp, header tmproto.Header, msgs []sdk.Msg, accNums, seq []uint64, expSimPass, expPass bool, priv ...crypto.PrivKey, ) (sdk.GasInfo, *sdk.Result, error) { @@ -420,7 +420,7 @@ func NewPubKeyFromHex(pk string) (res crypto.PubKey) { if err != nil { panic(err) } - var pkEd ed25519.PubKeyEd25519 - copy(pkEd[:], pkBytes) + pkEd := make(ed25519.PubKey, ed25519.PubKeySize) + copy(pkEd, pkBytes) return pkEd } diff --git a/std/consensus_params.go b/std/consensus_params.go index e92cc1514b..019010c307 100644 --- a/std/consensus_params.go +++ b/std/consensus_params.go @@ -2,6 +2,7 @@ package std import ( abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/baseapp" paramstypes "github.com/cosmos/cosmos-sdk/x/params/types" @@ -18,10 +19,10 @@ func ConsensusParamsKeyTable() paramstypes.KeyTable { baseapp.ParamStoreKeyBlockParams, abci.BlockParams{}, baseapp.ValidateBlockParams, ), paramstypes.NewParamSetPair( - baseapp.ParamStoreKeyEvidenceParams, abci.EvidenceParams{}, baseapp.ValidateEvidenceParams, + baseapp.ParamStoreKeyEvidenceParams, tmproto.EvidenceParams{}, baseapp.ValidateEvidenceParams, ), paramstypes.NewParamSetPair( - baseapp.ParamStoreKeyValidatorParams, abci.ValidatorParams{}, baseapp.ValidateValidatorParams, + baseapp.ParamStoreKeyValidatorParams, tmproto.ValidatorParams{}, baseapp.ValidateValidatorParams, ), ) } diff --git a/std/pubkey.go b/std/pubkey.go index 35d72bbc73..ff7a636b78 100644 --- a/std/pubkey.go +++ b/std/pubkey.go @@ -23,27 +23,30 @@ func (cdc DefaultPublicKeyCodec) Decode(key *types.PublicKey) (crypto.PubKey, er switch key := key.Sum.(type) { case *types.PublicKey_Secp256K1: n := len(key.Secp256K1) - if n != secp256k1.PubKeySecp256k1Size { + if n != secp256k1.PubKeySize { return nil, fmt.Errorf("wrong length %d for secp256k1 public key", n) } - var res secp256k1.PubKeySecp256k1 - copy(res[:], key.Secp256K1) + + res := make(secp256k1.PubKey, secp256k1.PubKeySize) + copy(res, key.Secp256K1) return res, nil case *types.PublicKey_Ed25519: n := len(key.Ed25519) - if n != ed255192.PubKeyEd25519Size { + if n != ed255192.PubKeySize { return nil, fmt.Errorf("wrong length %d for ed25519 public key", n) } - var res ed255192.PubKeyEd25519 - copy(res[:], key.Ed25519) + + res := make(ed255192.PubKey, ed255192.PubKeySize) + copy(res, key.Ed25519) return res, nil case *types.PublicKey_Sr25519: n := len(key.Sr25519) - if n != sr25519.PubKeySr25519Size { + if n != sr25519.PubKeySize { return nil, fmt.Errorf("wrong length %d for sr25519 public key", n) } - var res sr25519.PubKeySr25519 - copy(res[:], key.Sr25519) + + res := make(sr25519.PubKey, sr25519.PubKeySize) + copy(res, key.Sr25519) return res, nil case *types.PublicKey_Multisig: @@ -66,12 +69,12 @@ func (cdc DefaultPublicKeyCodec) Decode(key *types.PublicKey) (crypto.PubKey, er // Encode implements the PublicKeyCodec.Encode method func (cdc DefaultPublicKeyCodec) Encode(key crypto.PubKey) (*types.PublicKey, error) { switch key := key.(type) { - case secp256k1.PubKeySecp256k1: - return &types.PublicKey{Sum: &types.PublicKey_Secp256K1{Secp256K1: key[:]}}, nil - case ed255192.PubKeyEd25519: - return &types.PublicKey{Sum: &types.PublicKey_Ed25519{Ed25519: key[:]}}, nil - case sr25519.PubKeySr25519: - return &types.PublicKey{Sum: &types.PublicKey_Sr25519{Sr25519: key[:]}}, nil + case secp256k1.PubKey: + return &types.PublicKey{Sum: &types.PublicKey_Secp256K1{Secp256K1: key}}, nil + case ed255192.PubKey: + return &types.PublicKey{Sum: &types.PublicKey_Ed25519{Ed25519: key}}, nil + case sr25519.PubKey: + return &types.PublicKey{Sum: &types.PublicKey_Sr25519{Sr25519: key}}, nil case multisig.PubKeyMultisigThreshold: pubKeys := key.PubKeys resKeys := make([]*types.PublicKey, len(pubKeys)) diff --git a/store/cache/cache_test.go b/store/cache/cache_test.go index 93ece75083..45c5d147a4 100644 --- a/store/cache/cache_test.go +++ b/store/cache/cache_test.go @@ -4,13 +4,13 @@ import ( "fmt" "testing" + "github.com/cosmos/iavl" + "github.com/stretchr/testify/require" + dbm "github.com/tendermint/tm-db" + "github.com/cosmos/cosmos-sdk/store/cache" iavlstore "github.com/cosmos/cosmos-sdk/store/iavl" "github.com/cosmos/cosmos-sdk/store/types" - - "github.com/stretchr/testify/require" - "github.com/tendermint/iavl" - dbm "github.com/tendermint/tm-db" ) func TestGetOrSetStoreCache(t *testing.T) { diff --git a/store/cachekv/memiterator.go b/store/cachekv/memiterator.go index 4dca2bdb7c..c5a00ab8df 100644 --- a/store/cachekv/memiterator.go +++ b/store/cachekv/memiterator.go @@ -89,10 +89,12 @@ func (mi *memIterator) Value() []byte { return mi.items[len(mi.items)-1].Value } -func (mi *memIterator) Close() { +func (mi *memIterator) Close() error { mi.start = nil mi.end = nil mi.items = nil + + return nil } // Error returns an error if the memIterator is invalid defined by the Valid diff --git a/store/cachekv/mergeiterator.go b/store/cachekv/mergeiterator.go index 7fe31e5b8b..25dfac8033 100644 --- a/store/cachekv/mergeiterator.go +++ b/store/cachekv/mergeiterator.go @@ -151,9 +151,12 @@ func (iter *cacheMergeIterator) Value() []byte { } // Close implements Iterator -func (iter *cacheMergeIterator) Close() { - iter.parent.Close() - iter.cache.Close() +func (iter *cacheMergeIterator) Close() error { + if err := iter.parent.Close(); err != nil { + return err + } + + return iter.cache.Close() } // Error returns an error if the cacheMergeIterator is invalid defined by the diff --git a/store/gaskv/store.go b/store/gaskv/store.go index b2b4b792a5..d5c1f86c20 100644 --- a/store/gaskv/store.go +++ b/store/gaskv/store.go @@ -165,8 +165,8 @@ func (gi *gasIterator) Value() (value []byte) { } // Implements Iterator. -func (gi *gasIterator) Close() { - gi.parent.Close() +func (gi *gasIterator) Close() error { + return gi.parent.Close() } // Error delegates the Error call to the parent iterator. diff --git a/store/gaskv/store_test.go b/store/gaskv/store_test.go index 55378666c0..432fbe3763 100644 --- a/store/gaskv/store_test.go +++ b/store/gaskv/store_test.go @@ -55,7 +55,11 @@ func TestGasKVStoreIterator(t *testing.T) { require.Nil(t, end) require.NoError(t, iterator.Error()) - t.Cleanup(iterator.Close) + t.Cleanup(func() { + if err := iterator.Close(); err != nil { + t.Fatal(err) + } + }) ka := iterator.Key() require.Equal(t, ka, keyFmt(1)) va := iterator.Value() @@ -71,7 +75,11 @@ func TestGasKVStoreIterator(t *testing.T) { require.NoError(t, iterator.Error()) reverseIterator := st.ReverseIterator(nil, nil) - t.Cleanup(reverseIterator.Close) + t.Cleanup(func() { + if err := reverseIterator.Close(); err != nil { + t.Fatal(err) + } + }) require.Equal(t, reverseIterator.Key(), keyFmt(2)) reverseIterator.Next() require.Equal(t, reverseIterator.Key(), keyFmt(1)) diff --git a/store/iavl/store.go b/store/iavl/store.go index e26baf4d91..2e389f6897 100644 --- a/store/iavl/store.go +++ b/store/iavl/store.go @@ -6,11 +6,10 @@ import ( "sync" "time" - ics23iavl "github.com/confio/ics23-iavl" ics23 "github.com/confio/ics23/go" - "github.com/tendermint/iavl" + "github.com/cosmos/iavl" abci "github.com/tendermint/tendermint/abci/types" - "github.com/tendermint/tendermint/crypto/merkle" + tmcrypto "github.com/tendermint/tendermint/proto/tendermint/crypto" dbm "github.com/tendermint/tm-db" "github.com/cosmos/cosmos-sdk/store/cachekv" @@ -267,7 +266,7 @@ func (st *Store) Query(req abci.RequestQuery) (res abci.ResponseQuery) { } // get proof from tree and convert to merkle.Proof before adding to result - res.Proof = getProofFromTree(mtree, req.Data, res.Value != nil) + res.ProofOps = getProofFromTree(mtree, req.Data, res.Value != nil) case "/subspace": pairs := kv.Pairs{ @@ -300,7 +299,7 @@ func (st *Store) Query(req abci.RequestQuery) (res abci.ResponseQuery) { // Takes a MutableTree, a key, and a flag for creating existence or absence proof and returns the // appropriate merkle.Proof. Since this must be called after querying for the value, this function should never error // Thus, it will panic on error rather than returning it -func getProofFromTree(tree *iavl.MutableTree, key []byte, exists bool) *merkle.Proof { +func getProofFromTree(tree *iavl.MutableTree, key []byte, exists bool) *tmcrypto.ProofOps { var ( commitmentProof *ics23.CommitmentProof err error @@ -308,14 +307,14 @@ func getProofFromTree(tree *iavl.MutableTree, key []byte, exists bool) *merkle.P if exists { // value was found - commitmentProof, err = ics23iavl.CreateMembershipProof(tree, key) + commitmentProof, err = tree.GetMembershipProof(key) if err != nil { // sanity check: If value was found, membership proof must be creatable panic(fmt.Sprintf("unexpected value for empty proof: %s", err.Error())) } } else { // value wasn't found - commitmentProof, err = ics23iavl.CreateNonMembershipProof(tree, key) + commitmentProof, err = tree.GetNonMembershipProof(key) if err != nil { // sanity check: If value wasn't found, nonmembership proof must be creatable panic(fmt.Sprintf("unexpected error for nonexistence proof: %s", err.Error())) @@ -323,7 +322,7 @@ func getProofFromTree(tree *iavl.MutableTree, key []byte, exists bool) *merkle.P } op := types.NewIavlCommitmentOp(key, commitmentProof) - return &merkle.Proof{Ops: []merkle.ProofOp{op.ProofOp()}} + return &tmcrypto.ProofOps{Ops: []tmcrypto.ProofOp{op.ProofOp()}} } //---------------------------------------- @@ -446,11 +445,13 @@ func (iter *iavlIterator) Value() []byte { // Close closes the IAVL iterator by closing the quit channel and waiting for // the iterCh to finish/close. -func (iter *iavlIterator) Close() { +func (iter *iavlIterator) Close() error { close(iter.quitCh) // wait iterCh to close for range iter.iterCh { } + + return nil } // Error performs a no-op. diff --git a/store/iavl/store_test.go b/store/iavl/store_test.go index ba71ec8863..56d439c391 100644 --- a/store/iavl/store_test.go +++ b/store/iavl/store_test.go @@ -5,8 +5,8 @@ import ( "fmt" "testing" + "github.com/cosmos/iavl" "github.com/stretchr/testify/require" - "github.com/tendermint/iavl" abci "github.com/tendermint/tendermint/abci/types" dbm "github.com/tendermint/tm-db" @@ -73,7 +73,7 @@ func TestGetImmutable(t *testing.T) { res := newStore.Query(abci.RequestQuery{Data: []byte("hello"), Height: cID.Version, Path: "/key", Prove: true}) require.Equal(t, res.Value, []byte("adios")) - require.NotNil(t, res.Proof) + require.NotNil(t, res.ProofOps) require.Panics(t, func() { newStore.Set(nil, nil) }) require.Panics(t, func() { newStore.Delete(nil) }) diff --git a/store/iavl/tree.go b/store/iavl/tree.go index 9873034fa5..66e209bcdd 100644 --- a/store/iavl/tree.go +++ b/store/iavl/tree.go @@ -3,7 +3,7 @@ package iavl import ( "fmt" - "github.com/tendermint/iavl" + "github.com/cosmos/iavl" ) var ( diff --git a/store/iavl/tree_test.go b/store/iavl/tree_test.go index bf67088300..24332b42e0 100644 --- a/store/iavl/tree_test.go +++ b/store/iavl/tree_test.go @@ -3,8 +3,8 @@ package iavl import ( "testing" + "github.com/cosmos/iavl" "github.com/stretchr/testify/require" - "github.com/tendermint/iavl" dbm "github.com/tendermint/tm-db" ) diff --git a/store/internal/maps/maps.go b/store/internal/maps/maps.go index 1757b0f5c3..778f1c84ed 100644 --- a/store/internal/maps/maps.go +++ b/store/internal/maps/maps.go @@ -5,6 +5,7 @@ import ( "github.com/tendermint/tendermint/crypto/merkle" "github.com/tendermint/tendermint/crypto/tmhash" + tmcrypto "github.com/tendermint/tendermint/proto/tendermint/crypto" "github.com/cosmos/cosmos-sdk/types/kv" ) @@ -65,7 +66,7 @@ func hashKVPairs(kvs kv.Pairs) []byte { kvsH[i] = KVPair(kvp).Bytes() } - return merkle.SimpleHashFromByteSlices(kvsH) + return merkle.HashFromByteSlices(kvsH) } // --------------------------------------------- @@ -168,9 +169,9 @@ func (kv KVPair) Bytes() []byte { return buf[:nlk+nk+nlv+nv] } -// SimpleHashFromMap computes a merkle tree from sorted map and returns the merkle +// HashFromMap computes a merkle tree from sorted map and returns the merkle // root. -func SimpleHashFromMap(m map[string][]byte) []byte { +func HashFromMap(m map[string][]byte) []byte { mm := newMerkleMap() for k, v := range m { mm.set(k, v) @@ -179,10 +180,10 @@ func SimpleHashFromMap(m map[string][]byte) []byte { return mm.hash() } -// SimpleProofsFromMap generates proofs from a map. The keys/values of the map will be used as the keys/values +// ProofsFromMap generates proofs from a map. The keys/values of the map will be used as the keys/values // in the underlying key-value pairs. // The keys are sorted before the proofs are computed. -func SimpleProofsFromMap(m map[string][]byte) ([]byte, map[string]*merkle.SimpleProof, []string) { +func ProofsFromMap(m map[string][]byte) ([]byte, map[string]*tmcrypto.Proof, []string) { sm := newSimpleMap() for k, v := range m { sm.Set(k, v) @@ -195,12 +196,12 @@ func SimpleProofsFromMap(m map[string][]byte) ([]byte, map[string]*merkle.Simple kvsBytes[i] = KVPair(kvp).Bytes() } - rootHash, proofList := merkle.SimpleProofsFromByteSlices(kvsBytes) - proofs := make(map[string]*merkle.SimpleProof) + rootHash, proofList := merkle.ProofsFromByteSlices(kvsBytes) + proofs := make(map[string]*tmcrypto.Proof) keys := make([]string, len(proofList)) for i, kvp := range kvs.Pairs { - proofs[string(kvp.Key)] = proofList[i] + proofs[string(kvp.Key)] = proofList[i].ToProto() keys[i] = string(kvp.Key) } diff --git a/store/internal/maps/maps_test.go b/store/internal/maps/maps_test.go index 14754f008d..8f6b1163ea 100644 --- a/store/internal/maps/maps_test.go +++ b/store/internal/maps/maps_test.go @@ -18,7 +18,7 @@ func TestMerkleMap(t *testing.T) { values []string // each string gets converted to []byte in test want string }{ - {[]string{}, []string{}, ""}, + {[]string{}, []string{}, "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"}, {[]string{"key1"}, []string{"value1"}, "a44d3cc7daba1a4600b00a2434b30f8b970652169810d6dfa9fb1793a2189324"}, {[]string{"key1"}, []string{"value2"}, "0638e99b3445caec9d95c05e1a3fc1487b4ddec6a952ff337080360b0dcc078c"}, // swap order with 2 keys @@ -65,7 +65,7 @@ func TestSimpleMap(t *testing.T) { values []string // each string gets converted to []byte in test want string }{ - {[]string{}, []string{}, ""}, + {[]string{}, []string{}, "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"}, {[]string{"key1"}, []string{"value1"}, "a44d3cc7daba1a4600b00a2434b30f8b970652169810d6dfa9fb1793a2189324"}, {[]string{"key1"}, []string{"value2"}, "0638e99b3445caec9d95c05e1a3fc1487b4ddec6a952ff337080360b0dcc078c"}, // swap order with 2 keys diff --git a/store/internal/proofs/convert.go b/store/internal/proofs/convert.go index 46e65983e6..7e827ced5f 100644 --- a/store/internal/proofs/convert.go +++ b/store/internal/proofs/convert.go @@ -5,7 +5,7 @@ import ( "math/bits" ics23 "github.com/confio/ics23/go" - "github.com/tendermint/tendermint/crypto/merkle" + "github.com/tendermint/tendermint/proto/tendermint/crypto" ) // ConvertExistenceProof will convert the given proof into a valid @@ -13,7 +13,7 @@ import ( // // This is the simplest case of the range proof and we will focus on // demoing compatibility here -func ConvertExistenceProof(p *merkle.SimpleProof, key, value []byte) (*ics23.ExistenceProof, error) { +func ConvertExistenceProof(p *crypto.Proof, key, value []byte) (*ics23.ExistenceProof, error) { path, err := convertInnerOps(p) if err != nil { return nil, err @@ -42,7 +42,7 @@ func convertLeafOp() *ics23.LeafOp { } } -func convertInnerOps(p *merkle.SimpleProof) ([]*ics23.InnerOp, error) { +func convertInnerOps(p *crypto.Proof) ([]*ics23.InnerOp, error) { inners := make([]*ics23.InnerOp, 0, len(p.Aunts)) path := buildPath(p.Index, p.Total) @@ -69,7 +69,7 @@ func convertInnerOps(p *merkle.SimpleProof) ([]*ics23.InnerOp, error) { // buildPath returns a list of steps from leaf to root // in each step, true means index is left side, false index is right side // code adapted from merkle/simple_proof.go:computeHashFromAunts -func buildPath(idx int, total int) []bool { +func buildPath(idx, total int64) []bool { if total < 2 { return nil } @@ -84,13 +84,13 @@ func buildPath(idx int, total int) []bool { return append(buildPath(idx-numLeft, total-numLeft), goLeft) } -func getSplitPoint(length int) int { +func getSplitPoint(length int64) int64 { if length < 1 { panic("Trying to split a tree with size < 1") } uLength := uint(length) bitlen := bits.Len(uLength) - k := 1 << uint(bitlen-1) + k := int64(1 << uint(bitlen-1)) if k == length { k >>= 1 } diff --git a/store/internal/proofs/convert_test.go b/store/internal/proofs/convert_test.go index f6245b5718..19c5a67615 100644 --- a/store/internal/proofs/convert_test.go +++ b/store/internal/proofs/convert_test.go @@ -31,8 +31,8 @@ func TestLeafOp(t *testing.T) { func TestBuildPath(t *testing.T) { cases := map[string]struct { - idx int - total int + idx int64 + total int64 expected []bool }{ "pair left": { diff --git a/store/internal/proofs/create.go b/store/internal/proofs/create.go index 0db30e4f2e..02d57e336f 100644 --- a/store/internal/proofs/create.go +++ b/store/internal/proofs/create.go @@ -94,7 +94,7 @@ func createExistenceProof(data map[string][]byte, key []byte) (*ics23.ExistenceP return nil, fmt.Errorf("cannot make existence proof if key is not in map") } - _, ics23, _ := sdkmaps.SimpleProofsFromMap(data) + _, ics23, _ := sdkmaps.ProofsFromMap(data) proof := ics23[string(key)] if proof == nil { return nil, fmt.Errorf("returned no proof for key") diff --git a/store/internal/proofs/helpers.go b/store/internal/proofs/helpers.go index 5f70e599bc..98b04ef5ef 100644 --- a/store/internal/proofs/helpers.go +++ b/store/internal/proofs/helpers.go @@ -3,15 +3,17 @@ package proofs import ( "sort" - "github.com/tendermint/tendermint/crypto/merkle" "github.com/tendermint/tendermint/libs/rand" + tmcrypto "github.com/tendermint/tendermint/proto/tendermint/crypto" + + sdkmaps "github.com/cosmos/cosmos-sdk/store/internal/maps" ) // SimpleResult contains a merkle.SimpleProof along with all data needed to build the confio/proof type SimpleResult struct { Key []byte Value []byte - Proof *merkle.SimpleProof + Proof *tmcrypto.Proof RootHash []byte } @@ -20,7 +22,7 @@ type SimpleResult struct { // returns a range proof and the root hash of the tree func GenerateRangeProof(size int, loc Where) *SimpleResult { data := BuildMap(size) - root, proofs, allkeys := merkle.SimpleProofsFromMap(data) + root, proofs, allkeys := sdkmaps.ProofsFromMap(data) key := GetKey(allkeys, loc) proof := proofs[key] @@ -55,7 +57,7 @@ func SortedKeys(data map[string][]byte) []string { } func CalcRoot(data map[string][]byte) []byte { - root, _, _ := merkle.SimpleProofsFromMap(data) + root, _, _ := sdkmaps.ProofsFromMap(data) return root } diff --git a/store/prefix/store.go b/store/prefix/store.go index 5ac27b84da..4f9d5a75e0 100644 --- a/store/prefix/store.go +++ b/store/prefix/store.go @@ -178,8 +178,8 @@ func (pi *prefixIterator) Value() []byte { } // Implements Iterator -func (pi *prefixIterator) Close() { - pi.iter.Close() +func (pi *prefixIterator) Close() error { + return pi.iter.Close() } // Error returns an error if the prefixIterator is invalid defined by the Valid diff --git a/store/prefix/store_test.go b/store/prefix/store_test.go index c46aec6f1a..f045d2cd82 100644 --- a/store/prefix/store_test.go +++ b/store/prefix/store_test.go @@ -4,16 +4,15 @@ import ( "crypto/rand" "testing" + "github.com/stretchr/testify/require" + dbm "github.com/tendermint/tm-db" + "github.com/cosmos/cosmos-sdk/store/dbadapter" "github.com/cosmos/cosmos-sdk/store/gaskv" "github.com/cosmos/cosmos-sdk/store/iavl" "github.com/cosmos/cosmos-sdk/store/types" sdk "github.com/cosmos/cosmos-sdk/types" - - "github.com/stretchr/testify/require" - - tiavl "github.com/tendermint/iavl" - dbm "github.com/tendermint/tm-db" + tiavl "github.com/cosmos/iavl" ) // copied from iavl/store_test.go diff --git a/store/rootmulti/proof_test.go b/store/rootmulti/proof_test.go index bac54aada5..f0bd29063a 100644 --- a/store/rootmulti/proof_test.go +++ b/store/rootmulti/proof_test.go @@ -26,31 +26,31 @@ func TestVerifyIAVLStoreQueryProof(t *testing.T) { Data: []byte("MYKEY"), Prove: true, }) - require.NotNil(t, res.Proof) + require.NotNil(t, res.ProofOps) // Verify proof. prt := DefaultProofRuntime() - err = prt.VerifyValue(res.Proof, cid.Hash, "/MYKEY", []byte("MYVALUE")) + err = prt.VerifyValue(res.ProofOps, cid.Hash, "/MYKEY", []byte("MYVALUE")) require.Nil(t, err) // Verify (bad) proof. - err = prt.VerifyValue(res.Proof, cid.Hash, "/MYKEY_NOT", []byte("MYVALUE")) + err = prt.VerifyValue(res.ProofOps, cid.Hash, "/MYKEY_NOT", []byte("MYVALUE")) require.NotNil(t, err) // Verify (bad) proof. - err = prt.VerifyValue(res.Proof, cid.Hash, "/MYKEY/MYKEY", []byte("MYVALUE")) + err = prt.VerifyValue(res.ProofOps, cid.Hash, "/MYKEY/MYKEY", []byte("MYVALUE")) require.NotNil(t, err) // Verify (bad) proof. - err = prt.VerifyValue(res.Proof, cid.Hash, "MYKEY", []byte("MYVALUE")) + err = prt.VerifyValue(res.ProofOps, cid.Hash, "MYKEY", []byte("MYVALUE")) require.NotNil(t, err) // Verify (bad) proof. - err = prt.VerifyValue(res.Proof, cid.Hash, "/MYKEY", []byte("MYVALUE_NOT")) + err = prt.VerifyValue(res.ProofOps, cid.Hash, "/MYKEY", []byte("MYVALUE_NOT")) require.NotNil(t, err) // Verify (bad) proof. - err = prt.VerifyValue(res.Proof, cid.Hash, "/MYKEY", []byte(nil)) + err = prt.VerifyValue(res.ProofOps, cid.Hash, "/MYKEY", []byte(nil)) require.NotNil(t, err) } @@ -73,39 +73,39 @@ func TestVerifyMultiStoreQueryProof(t *testing.T) { Data: []byte("MYKEY"), Prove: true, }) - require.NotNil(t, res.Proof) + require.NotNil(t, res.ProofOps) // Verify proof. prt := DefaultProofRuntime() - err := prt.VerifyValue(res.Proof, cid.Hash, "/iavlStoreKey/MYKEY", []byte("MYVALUE")) + err := prt.VerifyValue(res.ProofOps, cid.Hash, "/iavlStoreKey/MYKEY", []byte("MYVALUE")) require.Nil(t, err) // Verify proof. - err = prt.VerifyValue(res.Proof, cid.Hash, "/iavlStoreKey/MYKEY", []byte("MYVALUE")) + err = prt.VerifyValue(res.ProofOps, cid.Hash, "/iavlStoreKey/MYKEY", []byte("MYVALUE")) require.Nil(t, err) // Verify (bad) proof. - err = prt.VerifyValue(res.Proof, cid.Hash, "/iavlStoreKey/MYKEY_NOT", []byte("MYVALUE")) + err = prt.VerifyValue(res.ProofOps, cid.Hash, "/iavlStoreKey/MYKEY_NOT", []byte("MYVALUE")) require.NotNil(t, err) // Verify (bad) proof. - err = prt.VerifyValue(res.Proof, cid.Hash, "/iavlStoreKey/MYKEY/MYKEY", []byte("MYVALUE")) + err = prt.VerifyValue(res.ProofOps, cid.Hash, "/iavlStoreKey/MYKEY/MYKEY", []byte("MYVALUE")) require.NotNil(t, err) // Verify (bad) proof. - err = prt.VerifyValue(res.Proof, cid.Hash, "iavlStoreKey/MYKEY", []byte("MYVALUE")) + err = prt.VerifyValue(res.ProofOps, cid.Hash, "iavlStoreKey/MYKEY", []byte("MYVALUE")) require.NotNil(t, err) // Verify (bad) proof. - err = prt.VerifyValue(res.Proof, cid.Hash, "/MYKEY", []byte("MYVALUE")) + err = prt.VerifyValue(res.ProofOps, cid.Hash, "/MYKEY", []byte("MYVALUE")) require.NotNil(t, err) // Verify (bad) proof. - err = prt.VerifyValue(res.Proof, cid.Hash, "/iavlStoreKey/MYKEY", []byte("MYVALUE_NOT")) + err = prt.VerifyValue(res.ProofOps, cid.Hash, "/iavlStoreKey/MYKEY", []byte("MYVALUE_NOT")) require.NotNil(t, err) // Verify (bad) proof. - err = prt.VerifyValue(res.Proof, cid.Hash, "/iavlStoreKey/MYKEY", []byte(nil)) + err = prt.VerifyValue(res.ProofOps, cid.Hash, "/iavlStoreKey/MYKEY", []byte(nil)) require.NotNil(t, err) } @@ -129,20 +129,20 @@ func TestVerifyMultiStoreQueryProofAbsence(t *testing.T) { Data: []byte("MYABSENTKEY"), Prove: true, }) - require.NotNil(t, res.Proof) + require.NotNil(t, res.ProofOps) // Verify proof. prt := DefaultProofRuntime() - err = prt.VerifyAbsence(res.Proof, cid.Hash, "/iavlStoreKey/MYABSENTKEY") + err = prt.VerifyAbsence(res.ProofOps, cid.Hash, "/iavlStoreKey/MYABSENTKEY") require.Nil(t, err) // Verify (bad) proof. prt = DefaultProofRuntime() - err = prt.VerifyAbsence(res.Proof, cid.Hash, "/MYABSENTKEY") + err = prt.VerifyAbsence(res.ProofOps, cid.Hash, "/MYABSENTKEY") require.NotNil(t, err) // Verify (bad) proof. prt = DefaultProofRuntime() - err = prt.VerifyValue(res.Proof, cid.Hash, "/iavlStoreKey/MYABSENTKEY", []byte("")) + err = prt.VerifyValue(res.ProofOps, cid.Hash, "/iavlStoreKey/MYABSENTKEY", []byte("")) require.NotNil(t, err) } diff --git a/store/rootmulti/store.go b/store/rootmulti/store.go index f586d94f33..a07c8257e6 100644 --- a/store/rootmulti/store.go +++ b/store/rootmulti/store.go @@ -6,9 +6,9 @@ import ( "io" "strings" + iavltree "github.com/cosmos/iavl" gogotypes "github.com/gogo/protobuf/types" "github.com/pkg/errors" - iavltree "github.com/tendermint/iavl" abci "github.com/tendermint/tendermint/abci/types" dbm "github.com/tendermint/tm-db" @@ -477,7 +477,7 @@ func (rs *Store) Query(req abci.RequestQuery) abci.ResponseQuery { return res } - if res.Proof == nil || len(res.Proof.Ops) == 0 { + if res.ProofOps == nil || len(res.ProofOps.Ops) == 0 { return sdkerrors.QueryResult(sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "proof is unexpectedly empty; ensure height has not been pruned")) } @@ -496,7 +496,7 @@ func (rs *Store) Query(req abci.RequestQuery) abci.ResponseQuery { } // Restore origin path and append proof op. - res.Proof.Ops = append(res.Proof.Ops, commitInfo.ProofOp(storeName)) + res.ProofOps.Ops = append(res.ProofOps.Ops, commitInfo.ProofOp(storeName)) return res } diff --git a/store/rootmulti/store_test.go b/store/rootmulti/store_test.go index 53fc5253dc..cb3cd44dd0 100644 --- a/store/rootmulti/store_test.go +++ b/store/rootmulti/store_test.go @@ -591,5 +591,5 @@ func hashStores(stores map[types.StoreKey]types.CommitKVStore) []byte { CommitId: store.LastCommitID(), }.GetHash() } - return sdkmaps.SimpleHashFromMap(m) + return sdkmaps.HashFromMap(m) } diff --git a/store/tracekv/store.go b/store/tracekv/store.go index ba0bd8bf31..3becdd100b 100644 --- a/store/tracekv/store.go +++ b/store/tracekv/store.go @@ -146,8 +146,8 @@ func (ti *traceIterator) Value() []byte { } // Close implements the Iterator interface. -func (ti *traceIterator) Close() { - ti.parent.Close() +func (ti *traceIterator) Close() error { + return ti.parent.Close() } // Error delegates the Error call to the parent iterator. diff --git a/store/tracekv/store_test.go b/store/tracekv/store_test.go index ec2e955670..e2c4e2a0fe 100644 --- a/store/tracekv/store_test.go +++ b/store/tracekv/store_test.go @@ -50,11 +50,6 @@ func TestTraceKVStoreGet(t *testing.T) { expectedValue []byte expectedOut string }{ - { - key: []byte{}, - expectedValue: nil, - expectedOut: "{\"operation\":\"read\",\"key\":\"\",\"value\":\"\",\"metadata\":{\"blockHeight\":64}}\n", - }, { key: kvPairs[0].Key, expectedValue: kvPairs[0].Value, @@ -124,10 +119,6 @@ func TestTraceKVStoreDelete(t *testing.T) { key []byte expectedOut string }{ - { - key: []byte{}, - expectedOut: "{\"operation\":\"delete\",\"key\":\"\",\"value\":\"\",\"metadata\":{\"blockHeight\":64}}\n", - }, { key: kvPairs[0].Key, expectedOut: "{\"operation\":\"delete\",\"key\":\"a2V5MDAwMDAwMDE=\",\"value\":\"\",\"metadata\":{\"blockHeight\":64}}\n", @@ -150,10 +141,6 @@ func TestTraceKVStoreHas(t *testing.T) { key []byte expected bool }{ - { - key: []byte{}, - expected: false, - }, { key: kvPairs[0].Key, expected: true, @@ -224,7 +211,7 @@ func TestTestTraceKVStoreIterator(t *testing.T) { require.False(t, iterator.Valid()) require.Panics(t, iterator.Next) - require.NotPanics(t, iterator.Close) + require.NoError(t, iterator.Close()) } func TestTestTraceKVStoreReverseIterator(t *testing.T) { @@ -280,7 +267,7 @@ func TestTestTraceKVStoreReverseIterator(t *testing.T) { require.False(t, iterator.Valid()) require.Panics(t, iterator.Next) - require.NotPanics(t, iterator.Close) + require.NoError(t, iterator.Close()) } func TestTraceKVStorePrefix(t *testing.T) { diff --git a/store/types/commit_info.go b/store/types/commit_info.go index cb46365cf3..e713040739 100644 --- a/store/types/commit_info.go +++ b/store/types/commit_info.go @@ -4,7 +4,7 @@ import ( fmt "fmt" ics23 "github.com/confio/ics23/go" - "github.com/tendermint/tendermint/crypto/merkle" + tmcrypto "github.com/tendermint/tendermint/proto/tendermint/crypto" sdkmaps "github.com/cosmos/cosmos-sdk/store/internal/maps" sdkproofs "github.com/cosmos/cosmos-sdk/store/internal/proofs" @@ -37,13 +37,13 @@ func (ci CommitInfo) Hash() []byte { return nil } - rootHash, _, _ := sdkmaps.SimpleProofsFromMap(ci.toMap()) + rootHash, _, _ := sdkmaps.ProofsFromMap(ci.toMap()) return rootHash } -func (ci CommitInfo) ProofOp(storeName string) merkle.ProofOp { +func (ci CommitInfo) ProofOp(storeName string) tmcrypto.ProofOp { cmap := ci.toMap() - _, proofs, _ := sdkmaps.SimpleProofsFromMap(cmap) + _, proofs, _ := sdkmaps.ProofsFromMap(cmap) proof := proofs[storeName] if proof == nil { diff --git a/store/types/proof.go b/store/types/proof.go index f8a8125174..db8f673f46 100644 --- a/store/types/proof.go +++ b/store/types/proof.go @@ -3,6 +3,7 @@ package types import ( ics23 "github.com/confio/ics23/go" "github.com/tendermint/tendermint/crypto/merkle" + tmmerkle "github.com/tendermint/tendermint/proto/tendermint/crypto" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" ) @@ -48,7 +49,7 @@ func NewSimpleMerkleCommitmentOp(key []byte, proof *ics23.CommitmentProof) Commi // CommitmentOpDecoder takes a merkle.ProofOp and attempts to decode it into a CommitmentOp ProofOperator // The proofOp.Data is just a marshalled CommitmentProof. The Key of the CommitmentOp is extracted // from the unmarshalled proof. -func CommitmentOpDecoder(pop merkle.ProofOp) (merkle.ProofOperator, error) { +func CommitmentOpDecoder(pop tmmerkle.ProofOp) (merkle.ProofOperator, error) { var spec *ics23.ProofSpec switch pop.Type { case ProofOpIAVLCommitment: @@ -117,12 +118,12 @@ func (op CommitmentOp) Run(args [][]byte) ([][]byte, error) { // ProofOp implements ProofOperator interface and converts a CommitmentOp // into a merkle.ProofOp format that can later be decoded by CommitmentOpDecoder // back into a CommitmentOp for proof verification -func (op CommitmentOp) ProofOp() merkle.ProofOp { +func (op CommitmentOp) ProofOp() tmmerkle.ProofOp { bz, err := op.Proof.Marshal() if err != nil { panic(err.Error()) } - return merkle.ProofOp{ + return tmmerkle.ProofOp{ Type: op.Type, Key: op.Key, Data: bz, diff --git a/tests/fixtures/adr-024-coin-metadata_genesis.json b/tests/fixtures/adr-024-coin-metadata_genesis.json index c77a0c1433..d56ed836fa 100644 --- a/tests/fixtures/adr-024-coin-metadata_genesis.json +++ b/tests/fixtures/adr-024-coin-metadata_genesis.json @@ -9,7 +9,9 @@ }, "evidence": { "max_age_num_blocks": "100000", - "max_age_duration": "172800000000000" + "max_age_duration": "172800000000000", + "max_num": 50, + "proof_trial_period": "50000" }, "validator": { "pub_key_types": [ @@ -23,57 +25,62 @@ "params": { "default_send_enabled": true }, - "balances": [ {"address": "cosmos106vrzv5xkheqhjm023pxcxlqmcjvuhtfyachz4", - "coins": [ - { - "denom": "nametoken", - "amount": "1000" - }, - { - "denom": "stake", - "amount": "100000000" - } - ] - }, - { "address": "cosmos1xztun2634zplhajda7tmjaxy488qj44n765t58", - "coins": [ - { - "denom": "nametoken", - "amount": "1000" - }, - { - "denom": "stake", - "amount": "100000000" - } - ] - } - ], - + "balances": [ + { + "address": "cosmos106vrzv5xkheqhjm023pxcxlqmcjvuhtfyachz4", + "coins": [ + { + "denom": "nametoken", + "amount": "1000" + }, + { + "denom": "stake", + "amount": "100000000" + } + ] + }, + { + "address": "cosmos1xztun2634zplhajda7tmjaxy488qj44n765t58", + "coins": [ + { + "denom": "nametoken", + "amount": "1000" + }, + { + "denom": "stake", + "amount": "100000000" + } + ] + } + ], "supply": [], - "denom_metadata": [{ - "description": "The native staking token of the Cosmos Hub.", - "denom_units": [ { - "denom": "uatom", - "exponent": 0, - "aliases": [ - "microatom" - ] - }, - { - "denom": "matom", - "exponent": 3, - "aliases": [ - "milliatom" - ] - }, - { - "denom": "atom", - "exponent": 6 - }], - "base": "uatom", - "display": "atom" - }] - + "denom_metadata": [ + { + "description": "The native staking token of the Cosmos Hub.", + "denom_units": [ + { + "denom": "uatom", + "exponent": 0, + "aliases": [ + "microatom" + ] + }, + { + "denom": "matom", + "exponent": 3, + "aliases": [ + "milliatom" + ] + }, + { + "denom": "atom", + "exponent": 6 + } + ], + "base": "uatom", + "display": "atom" + } + ] }, "genutil": { "gentxs": [] diff --git a/third_party/proto/tendermint/abci/types.proto b/third_party/proto/tendermint/abci/types.proto new file mode 100644 index 0000000000..c08cca2bdc --- /dev/null +++ b/third_party/proto/tendermint/abci/types.proto @@ -0,0 +1,401 @@ +syntax = "proto3"; +package tendermint.abci; + +option go_package = "github.com/tendermint/tendermint/abci/types"; + +// For more information on gogo.proto, see: +// https://github.com/gogo/protobuf/blob/master/extensions.md +import "tendermint/crypto/proof.proto"; +import "tendermint/types/types.proto"; +import "tendermint/crypto/keys.proto"; +import "tendermint/types/params.proto"; +import "google/protobuf/timestamp.proto"; +import "gogoproto/gogo.proto"; + +// This file is copied from http://github.com/tendermint/abci +// NOTE: When using custom types, mind the warnings. +// https://github.com/gogo/protobuf/blob/master/custom_types.md#warnings-and-issues + +//---------------------------------------- +// Request types + +message Request { + oneof value { + RequestEcho echo = 1; + RequestFlush flush = 2; + RequestInfo info = 3; + RequestSetOption set_option = 4; + RequestInitChain init_chain = 5; + RequestQuery query = 6; + RequestBeginBlock begin_block = 7; + RequestCheckTx check_tx = 8; + RequestDeliverTx deliver_tx = 9; + RequestEndBlock end_block = 10; + RequestCommit commit = 11; + RequestListSnapshots list_snapshots = 12; + RequestOfferSnapshot offer_snapshot = 13; + RequestLoadSnapshotChunk load_snapshot_chunk = 14; + RequestApplySnapshotChunk apply_snapshot_chunk = 15; + } +} + +message RequestEcho { + string message = 1; +} + +message RequestFlush {} + +message RequestInfo { + string version = 1; + uint64 block_version = 2; + uint64 p2p_version = 3; +} + +// nondeterministic +message RequestSetOption { + string key = 1; + string value = 2; +} + +message RequestInitChain { + google.protobuf.Timestamp time = 1 + [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + string chain_id = 2; + ConsensusParams consensus_params = 3; + repeated ValidatorUpdate validators = 4 [(gogoproto.nullable) = false]; + bytes app_state_bytes = 5; + int64 initial_height = 6; +} + +message RequestQuery { + bytes data = 1; + string path = 2; + int64 height = 3; + bool prove = 4; +} + +message RequestBeginBlock { + bytes hash = 1; + tendermint.types.Header header = 2 [(gogoproto.nullable) = false]; + LastCommitInfo last_commit_info = 3 [(gogoproto.nullable) = false]; + repeated Evidence byzantine_validators = 4 [(gogoproto.nullable) = false]; +} + +enum CheckTxType { + NEW = 0 [(gogoproto.enumvalue_customname) = "New"]; + RECHECK = 1 [(gogoproto.enumvalue_customname) = "Recheck"]; +} + +message RequestCheckTx { + bytes tx = 1; + CheckTxType type = 2; +} + +message RequestDeliverTx { + bytes tx = 1; +} + +message RequestEndBlock { + int64 height = 1; +} + +message RequestCommit {} + +// lists available snapshots +message RequestListSnapshots { +} + +// offers a snapshot to the application +message RequestOfferSnapshot { + Snapshot snapshot = 1; // snapshot offered by peers + bytes app_hash = 2; // light client-verified app hash for snapshot height +} + +// loads a snapshot chunk +message RequestLoadSnapshotChunk { + uint64 height = 1; + uint32 format = 2; + uint32 chunk = 3; +} + +// Applies a snapshot chunk +message RequestApplySnapshotChunk { + uint32 index = 1; + bytes chunk = 2; + string sender = 3; +} + +//---------------------------------------- +// Response types + +message Response { + oneof value { + ResponseException exception = 1; + ResponseEcho echo = 2; + ResponseFlush flush = 3; + ResponseInfo info = 4; + ResponseSetOption set_option = 5; + ResponseInitChain init_chain = 6; + ResponseQuery query = 7; + ResponseBeginBlock begin_block = 8; + ResponseCheckTx check_tx = 9; + ResponseDeliverTx deliver_tx = 10; + ResponseEndBlock end_block = 11; + ResponseCommit commit = 12; + ResponseListSnapshots list_snapshots = 13; + ResponseOfferSnapshot offer_snapshot = 14; + ResponseLoadSnapshotChunk load_snapshot_chunk = 15; + ResponseApplySnapshotChunk apply_snapshot_chunk = 16; + } +} + +// nondeterministic +message ResponseException { + string error = 1; +} + +message ResponseEcho { + string message = 1; +} + +message ResponseFlush {} + +message ResponseInfo { + string data = 1; + + string version = 2; + uint64 app_version = 3; + + int64 last_block_height = 4; + bytes last_block_app_hash = 5; +} + +// nondeterministic +message ResponseSetOption { + uint32 code = 1; + // bytes data = 2; + string log = 3; + string info = 4; +} + +message ResponseInitChain { + ConsensusParams consensus_params = 1; + repeated ValidatorUpdate validators = 2 [(gogoproto.nullable) = false]; + bytes app_hash = 3; +} + +message ResponseQuery { + uint32 code = 1; + // bytes data = 2; // use "value" instead. + string log = 3; // nondeterministic + string info = 4; // nondeterministic + int64 index = 5; + bytes key = 6; + bytes value = 7; + tendermint.crypto.ProofOps proof_ops = 8; + int64 height = 9; + string codespace = 10; +} + +message ResponseBeginBlock { + repeated Event events = 1 + [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; +} + +message ResponseCheckTx { + uint32 code = 1; + bytes data = 2; + string log = 3; // nondeterministic + string info = 4; // nondeterministic + int64 gas_wanted = 5 [json_name = "gas_wanted"]; + int64 gas_used = 6 [json_name = "gas_used"]; + repeated Event events = 7 + [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; + string codespace = 8; +} + +message ResponseDeliverTx { + uint32 code = 1; + bytes data = 2; + string log = 3; // nondeterministic + string info = 4; // nondeterministic + int64 gas_wanted = 5 [json_name = "gas_wanted"]; + int64 gas_used = 6 [json_name = "gas_used"]; + repeated Event events = 7 + [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; + string codespace = 8; +} + +message ResponseEndBlock { + repeated ValidatorUpdate validator_updates = 1 + [(gogoproto.nullable) = false]; + ConsensusParams consensus_param_updates = 2; + repeated Event events = 3 + [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; +} + +message ResponseCommit { + // reserve 1 + bytes data = 2; + int64 retain_height = 3; +} + +message ResponseListSnapshots { + repeated Snapshot snapshots = 1; +} + +message ResponseOfferSnapshot { + Result result = 1; + + enum Result { + UNKNOWN = 0; // Unknown result, abort all snapshot restoration + ACCEPT = 1; // Snapshot accepted, apply chunks + ABORT = 2; // Abort all snapshot restoration + REJECT = 3; // Reject this specific snapshot, try others + REJECT_FORMAT = 4; // Reject all snapshots of this format, try others + REJECT_SENDER = 5; // Reject all snapshots from the sender(s), try others + } +} + +message ResponseLoadSnapshotChunk { + bytes chunk = 1; +} + +message ResponseApplySnapshotChunk { + Result result = 1; + repeated uint32 refetch_chunks = 2; // Chunks to refetch and reapply + repeated string reject_senders = 3; // Chunk senders to reject and ban + + enum Result { + UNKNOWN = 0; // Unknown result, abort all snapshot restoration + ACCEPT = 1; // Chunk successfully accepted + ABORT = 2; // Abort all snapshot restoration + RETRY = 3; // Retry chunk (combine with refetch and reject) + RETRY_SNAPSHOT = 4; // Retry snapshot (combine with refetch and reject) + REJECT_SNAPSHOT = 5; // Reject this snapshot, try others + } +} + +//---------------------------------------- +// Misc. + +// ConsensusParams contains all consensus-relevant parameters +// that can be adjusted by the abci app +message ConsensusParams { + BlockParams block = 1; + tendermint.types.EvidenceParams evidence = 2; + tendermint.types.ValidatorParams validator = 3; + tendermint.types.VersionParams version = 4; +} + +// BlockParams contains limits on the block size. +message BlockParams { + // Note: must be greater than 0 + int64 max_bytes = 1; + // Note: must be greater or equal to -1 + int64 max_gas = 2; +} + +message LastCommitInfo { + int32 round = 1; + repeated VoteInfo votes = 2 [(gogoproto.nullable) = false]; +} + +// Event allows application developers to attach additional information to +// ResponseBeginBlock, ResponseEndBlock, ResponseCheckTx and ResponseDeliverTx. +// Later, transactions may be queried using these events. +message Event { + string type = 1; + repeated EventAttribute attributes = 2 [ + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "attributes,omitempty" + ]; +} + +// EventAttribute is a single key-value pair, associated with an event. +message EventAttribute { + bytes key = 1; + bytes value = 2; + bool index = 3; // nondeterministic +} + +// TxResult contains results of executing the transaction. +// +// One usage is indexing transaction results. +message TxResult { + int64 height = 1; + uint32 index = 2; + bytes tx = 3; + ResponseDeliverTx result = 4 [(gogoproto.nullable) = false]; +} + +//---------------------------------------- +// Blockchain Types + +// Validator +message Validator { + bytes address = 1; // The first 20 bytes of SHA256(public key) + // PubKey pub_key = 2 [(gogoproto.nullable)=false]; + int64 power = 3; // The voting power +} + +// ValidatorUpdate +message ValidatorUpdate { + tendermint.crypto.PublicKey pub_key = 1 [(gogoproto.nullable) = false]; + int64 power = 2; +} + +// VoteInfo +message VoteInfo { + Validator validator = 1 [(gogoproto.nullable) = false]; + bool signed_last_block = 2; +} + +message Evidence { + string type = 1; + // The offending validator + Validator validator = 2 [(gogoproto.nullable) = false]; + // The height when the offense occurred + int64 height = 3; + // The corresponding time where the offense occurred + google.protobuf.Timestamp time = 4 [ + (gogoproto.nullable) = false, + (gogoproto.stdtime) = true + ]; + // Total voting power of the validator set in case the ABCI application does + // not store historical validators. + // https://github.com/tendermint/tendermint/issues/4581 + int64 total_voting_power = 5; +} + +//---------------------------------------- +// State Sync Types + +message Snapshot { + uint64 height = 1; // The height at which the snapshot was taken + uint32 format = 2; // The application-specific snapshot format + uint32 chunks = 3; // Number of chunks in the snapshot + bytes hash = 4; // Arbitrary snapshot hash, equal only if identical + bytes metadata = 5; // Arbitrary application metadata +} + +//---------------------------------------- +// Service Definition + +service ABCIApplication { + rpc Echo(RequestEcho) returns (ResponseEcho); + rpc Flush(RequestFlush) returns (ResponseFlush); + rpc Info(RequestInfo) returns (ResponseInfo); + rpc SetOption(RequestSetOption) returns (ResponseSetOption); + rpc DeliverTx(RequestDeliverTx) returns (ResponseDeliverTx); + rpc CheckTx(RequestCheckTx) returns (ResponseCheckTx); + rpc Query(RequestQuery) returns (ResponseQuery); + rpc Commit(RequestCommit) returns (ResponseCommit); + rpc InitChain(RequestInitChain) returns (ResponseInitChain); + rpc BeginBlock(RequestBeginBlock) returns (ResponseBeginBlock); + rpc EndBlock(RequestEndBlock) returns (ResponseEndBlock); + rpc ListSnapshots(RequestListSnapshots) returns (ResponseListSnapshots); + rpc OfferSnapshot(RequestOfferSnapshot) returns (ResponseOfferSnapshot); + rpc LoadSnapshotChunk(RequestLoadSnapshotChunk) returns (ResponseLoadSnapshotChunk); + rpc ApplySnapshotChunk(RequestApplySnapshotChunk) returns (ResponseApplySnapshotChunk); +} diff --git a/third_party/proto/tendermint/abci/types/types.proto b/third_party/proto/tendermint/abci/types/types.proto deleted file mode 100644 index 317a6cd4b6..0000000000 --- a/third_party/proto/tendermint/abci/types/types.proto +++ /dev/null @@ -1,346 +0,0 @@ -syntax = "proto3"; -package tendermint.abci.types; -option go_package = "github.com/tendermint/tendermint/abci/types"; - -// For more information on gogo.proto, see: -// https://github.com/gogo/protobuf/blob/master/extensions.md -import "gogoproto/gogo.proto"; -import "tendermint/crypto/merkle/merkle.proto"; -import "tendermint/libs/kv/types.proto"; -import "google/protobuf/timestamp.proto"; -import "google/protobuf/duration.proto"; - -// This file is copied from http://github.com/tendermint/abci -// NOTE: When using custom types, mind the warnings. -// https://github.com/gogo/protobuf/blob/master/custom_types.md#warnings-and-issues - -option (gogoproto.marshaler_all) = true; -option (gogoproto.unmarshaler_all) = true; -option (gogoproto.sizer_all) = true; -option (gogoproto.goproto_registration) = true; -// Generate tests -option (gogoproto.populate_all) = true; -option (gogoproto.equal_all) = true; -option (gogoproto.testgen_all) = true; - -//---------------------------------------- -// Request types - -message Request { - oneof value { - RequestEcho echo = 2; - RequestFlush flush = 3; - RequestInfo info = 4; - RequestSetOption set_option = 5; - RequestInitChain init_chain = 6; - RequestQuery query = 7; - RequestBeginBlock begin_block = 8; - RequestCheckTx check_tx = 9; - RequestDeliverTx deliver_tx = 19; - RequestEndBlock end_block = 11; - RequestCommit commit = 12; - } -} - -message RequestEcho { - string message = 1; -} - -message RequestFlush {} - -message RequestInfo { - string version = 1; - uint64 block_version = 2; - uint64 p2p_version = 3; -} - -// nondeterministic -message RequestSetOption { - string key = 1; - string value = 2; -} - -message RequestInitChain { - google.protobuf.Timestamp time = 1 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; - string chain_id = 2; - ConsensusParams consensus_params = 3; - repeated ValidatorUpdate validators = 4 [(gogoproto.nullable) = false]; - bytes app_state_bytes = 5; -} - -message RequestQuery { - bytes data = 1; - string path = 2; - int64 height = 3; - bool prove = 4; -} - -message RequestBeginBlock { - bytes hash = 1; - Header header = 2 [(gogoproto.nullable) = false]; - LastCommitInfo last_commit_info = 3 [(gogoproto.nullable) = false]; - repeated Evidence byzantine_validators = 4 [(gogoproto.nullable) = false]; -} - -enum CheckTxType { - New = 0; - Recheck = 1; -} - -message RequestCheckTx { - bytes tx = 1; - CheckTxType type = 2; -} - -message RequestDeliverTx { - bytes tx = 1; -} - -message RequestEndBlock { - int64 height = 1; -} - -message RequestCommit {} - -//---------------------------------------- -// Response types - -message Response { - oneof value { - ResponseException exception = 1; - ResponseEcho echo = 2; - ResponseFlush flush = 3; - ResponseInfo info = 4; - ResponseSetOption set_option = 5; - ResponseInitChain init_chain = 6; - ResponseQuery query = 7; - ResponseBeginBlock begin_block = 8; - ResponseCheckTx check_tx = 9; - ResponseDeliverTx deliver_tx = 10; - ResponseEndBlock end_block = 11; - ResponseCommit commit = 12; - } -} - -// nondeterministic -message ResponseException { - string error = 1; -} - -message ResponseEcho { - string message = 1; -} - -message ResponseFlush {} - -message ResponseInfo { - string data = 1; - - string version = 2; - uint64 app_version = 3; - - int64 last_block_height = 4; - bytes last_block_app_hash = 5; -} - -// nondeterministic -message ResponseSetOption { - uint32 code = 1; - // bytes data = 2; - string log = 3; - string info = 4; -} - -message ResponseInitChain { - ConsensusParams consensus_params = 1; - repeated ValidatorUpdate validators = 2 [(gogoproto.nullable) = false]; -} - -message ResponseQuery { - uint32 code = 1; - // bytes data = 2; // use "value" instead. - string log = 3; // nondeterministic - string info = 4; // nondeterministic - int64 index = 5; - bytes key = 6; - bytes value = 7; - tendermint.crypto.merkle.Proof proof = 8; - int64 height = 9; - string codespace = 10; -} - -message ResponseBeginBlock { - repeated Event events = 1 - [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; -} - -message ResponseCheckTx { - uint32 code = 1; - bytes data = 2; - string log = 3; // nondeterministic - string info = 4; // nondeterministic - int64 gas_wanted = 5; - int64 gas_used = 6; - repeated Event events = 7 - [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; - string codespace = 8; -} - -message ResponseDeliverTx { - uint32 code = 1; - bytes data = 2; - string log = 3; // nondeterministic - string info = 4; // nondeterministic - int64 gas_wanted = 5; - int64 gas_used = 6; - repeated Event events = 7 - [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; - string codespace = 8; -} - -message ResponseEndBlock { - repeated ValidatorUpdate validator_updates = 1 [(gogoproto.nullable) = false]; - ConsensusParams consensus_param_updates = 2; - repeated Event events = 3 - [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; -} - -message ResponseCommit { - // reserve 1 - bytes data = 2; -} - -//---------------------------------------- -// Misc. - -// ConsensusParams contains all consensus-relevant parameters -// that can be adjusted by the abci app -message ConsensusParams { - BlockParams block = 1; - EvidenceParams evidence = 2; - ValidatorParams validator = 3; -} - -// BlockParams contains limits on the block size. -message BlockParams { - // Note: must be greater than 0 - int64 max_bytes = 1; - // Note: must be greater or equal to -1 - int64 max_gas = 2; -} - -message EvidenceParams { - // Note: must be greater than 0 - int64 max_age_num_blocks = 1; - google.protobuf.Duration max_age_duration = 2 - [(gogoproto.nullable) = false, (gogoproto.stdduration) = true]; -} - -// ValidatorParams contains limits on validators. -message ValidatorParams { - repeated string pub_key_types = 1; -} - -message LastCommitInfo { - int32 round = 1; - repeated VoteInfo votes = 2 [(gogoproto.nullable) = false]; -} - -message Event { - string type = 1; - repeated tendermint.libs.kv.Pair attributes = 2 - [(gogoproto.nullable) = false, (gogoproto.jsontag) = "attributes,omitempty"]; -} - -//---------------------------------------- -// Blockchain Types - -message Header { - // basic block info - Version version = 1 [(gogoproto.nullable) = false]; - string chain_id = 2 [(gogoproto.customname) = "ChainID"]; - int64 height = 3; - google.protobuf.Timestamp time = 4 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; - - // prev block info - BlockID last_block_id = 5 [(gogoproto.nullable) = false]; - - // hashes of block data - bytes last_commit_hash = 6; // commit from validators from the last block - bytes data_hash = 7; // transactions - - // hashes from the app output from the prev block - bytes validators_hash = 8; // validators for the current block - bytes next_validators_hash = 9; // validators for the next block - bytes consensus_hash = 10; // consensus params for current block - bytes app_hash = 11; // state after txs from the previous block - bytes last_results_hash = 12; // root hash of all results from the txs from the previous block - - // consensus info - bytes evidence_hash = 13; // evidence included in the block - bytes proposer_address = 14; // original proposer of the block -} - -message Version { - uint64 Block = 1; - uint64 App = 2; -} - -message BlockID { - bytes hash = 1; - PartSetHeader parts_header = 2 [(gogoproto.nullable) = false]; -} - -message PartSetHeader { - int32 total = 1; - bytes hash = 2; -} - -// Validator -message Validator { - bytes address = 1; - // PubKey pub_key = 2 [(gogoproto.nullable)=false]; - int64 power = 3; -} - -// ValidatorUpdate -message ValidatorUpdate { - PubKey pub_key = 1 [(gogoproto.nullable) = false]; - int64 power = 2; -} - -// VoteInfo -message VoteInfo { - Validator validator = 1 [(gogoproto.nullable) = false]; - bool signed_last_block = 2; -} - -message PubKey { - string type = 1; - bytes data = 2; -} - -message Evidence { - string type = 1; - Validator validator = 2 [(gogoproto.nullable) = false]; - int64 height = 3; - google.protobuf.Timestamp time = 4 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; - int64 total_voting_power = 5; -} - -//---------------------------------------- -// Service Definition - -service ABCIApplication { - rpc Echo(RequestEcho) returns (ResponseEcho); - rpc Flush(RequestFlush) returns (ResponseFlush); - rpc Info(RequestInfo) returns (ResponseInfo); - rpc SetOption(RequestSetOption) returns (ResponseSetOption); - rpc DeliverTx(RequestDeliverTx) returns (ResponseDeliverTx); - rpc CheckTx(RequestCheckTx) returns (ResponseCheckTx); - rpc Query(RequestQuery) returns (ResponseQuery); - rpc Commit(RequestCommit) returns (ResponseCommit); - rpc InitChain(RequestInitChain) returns (ResponseInitChain); - rpc BeginBlock(RequestBeginBlock) returns (ResponseBeginBlock); - rpc EndBlock(RequestEndBlock) returns (ResponseEndBlock); -} diff --git a/third_party/proto/tendermint/crypto/keys.proto b/third_party/proto/tendermint/crypto/keys.proto new file mode 100644 index 0000000000..e3a8ce9347 --- /dev/null +++ b/third_party/proto/tendermint/crypto/keys.proto @@ -0,0 +1,24 @@ +syntax = "proto3"; +package tendermint.crypto; + +option go_package = "github.com/tendermint/tendermint/proto/tendermint/crypto"; + +import "gogoproto/gogo.proto"; + +// PublicKey defines the keys available for use with Tendermint Validators +message PublicKey { + option (gogoproto.compare) = true; + option (gogoproto.equal) = true; + + oneof sum { + bytes ed25519 = 1; + } +} + +// PrivateKey defines the keys available for use with Tendermint Validators +// WARNING PrivateKey is used for internal purposes only +message PrivateKey { + oneof sum { + bytes ed25519 = 1; + } +} diff --git a/third_party/proto/tendermint/crypto/merkle/merkle.proto b/third_party/proto/tendermint/crypto/merkle/merkle.proto deleted file mode 100644 index d0b657ef04..0000000000 --- a/third_party/proto/tendermint/crypto/merkle/merkle.proto +++ /dev/null @@ -1,31 +0,0 @@ -syntax = "proto3"; -package tendermint.crypto.merkle; -option go_package = "github.com/tendermint/tendermint/crypto/merkle"; - -// For more information on gogo.proto, see: -// https://github.com/gogo/protobuf/blob/master/extensions.md -import "gogoproto/gogo.proto"; - -option (gogoproto.marshaler_all) = true; -option (gogoproto.unmarshaler_all) = true; -option (gogoproto.sizer_all) = true; - -option (gogoproto.populate_all) = true; -option (gogoproto.equal_all) = true; - -//---------------------------------------- -// Message types - -// ProofOp defines an operation used for calculating Merkle root -// The data could be arbitrary format, providing nessecary data -// for example neighbouring node hash -message ProofOp { - string type = 1; - bytes key = 2; - bytes data = 3; -} - -// Proof is Merkle proof defined by the list of ProofOps -message Proof { - repeated ProofOp ops = 1 [(gogoproto.nullable) = false]; -} diff --git a/third_party/proto/tendermint/crypto/proof.proto b/third_party/proto/tendermint/crypto/proof.proto new file mode 100644 index 0000000000..975df76853 --- /dev/null +++ b/third_party/proto/tendermint/crypto/proof.proto @@ -0,0 +1,41 @@ +syntax = "proto3"; +package tendermint.crypto; + +option go_package = "github.com/tendermint/tendermint/proto/tendermint/crypto"; + +import "gogoproto/gogo.proto"; + +message Proof { + int64 total = 1; + int64 index = 2; + bytes leaf_hash = 3; + repeated bytes aunts = 4; +} + +message ValueOp { + // Encoded in ProofOp.Key. + bytes key = 1; + + // To encode in ProofOp.Data + Proof proof = 2; +} + +message DominoOp { + string key = 1; + string input = 2; + string output = 3; +} + +// ProofOp defines an operation used for calculating Merkle root +// The data could be arbitrary format, providing nessecary data +// for example neighbouring node hash +message ProofOp { + string type = 1; + bytes key = 2; + bytes data = 3; +} + +// ProofOps is Merkle proof defined by the list of ProofOps +message ProofOps { + repeated ProofOp ops = 1 [(gogoproto.nullable) = false]; +} diff --git a/third_party/proto/tendermint/libs/bits/types.proto b/third_party/proto/tendermint/libs/bits/types.proto new file mode 100644 index 0000000000..3111d113a5 --- /dev/null +++ b/third_party/proto/tendermint/libs/bits/types.proto @@ -0,0 +1,9 @@ +syntax = "proto3"; +package tendermint.libs.bits; + +option go_package = "github.com/tendermint/tendermint/proto/tendermint/libs/bits"; + +message BitArray { + int64 bits = 1; + repeated uint64 elems = 2; +} diff --git a/third_party/proto/tendermint/libs/kv/types.proto b/third_party/proto/tendermint/libs/kv/types.proto deleted file mode 100644 index 334eab5ac3..0000000000 --- a/third_party/proto/tendermint/libs/kv/types.proto +++ /dev/null @@ -1,29 +0,0 @@ -syntax = "proto3"; -package tendermint.libs.kv; -option go_package = "github.com/tendermint/tendermint/libs/kv"; - -import "gogoproto/gogo.proto"; - -option (gogoproto.marshaler_all) = true; -option (gogoproto.unmarshaler_all) = true; -option (gogoproto.sizer_all) = true; -option (gogoproto.goproto_registration) = true; -// Generate tests -option (gogoproto.populate_all) = true; -option (gogoproto.equal_all) = true; -option (gogoproto.testgen_all) = true; - -//---------------------------------------- -// Abstract types - -// Define these here for compatibility but use tmlibs/kv.Pair. -message Pair { - bytes key = 1; - bytes value = 2; -} - -// Define these here for compatibility but use tmlibs/kv.KI64Pair. -message KI64Pair { - bytes key = 1; - int64 value = 2; -} diff --git a/third_party/proto/tendermint/types/evidence.proto b/third_party/proto/tendermint/types/evidence.proto new file mode 100644 index 0000000000..c2bb74ca41 --- /dev/null +++ b/third_party/proto/tendermint/types/evidence.proto @@ -0,0 +1,68 @@ +syntax = "proto3"; +package tendermint.types; + +option go_package = "github.com/tendermint/tendermint/proto/tendermint/types"; + +import "gogoproto/gogo.proto"; +import "google/protobuf/timestamp.proto"; +import "tendermint/types/types.proto"; +import "tendermint/crypto/keys.proto"; + +// DuplicateVoteEvidence contains evidence a validator signed two conflicting +// votes. +message DuplicateVoteEvidence { + Vote vote_a = 1; + Vote vote_b = 2; + + google.protobuf.Timestamp timestamp = 3 + [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; +} + +message PotentialAmnesiaEvidence { + Vote vote_a = 1; + Vote vote_b = 2; + + int64 height_stamp = 3; + google.protobuf.Timestamp timestamp = 4 + [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; +} + +message AmnesiaEvidence { + PotentialAmnesiaEvidence potential_amnesia_evidence = 1; + ProofOfLockChange polc = 2; +} + +message ConflictingHeadersEvidence { + SignedHeader h1 = 1; + SignedHeader h2 = 2; +} + +message LunaticValidatorEvidence { + Header header = 1; + Vote vote = 2; + string invalid_header_field = 3; + + google.protobuf.Timestamp timestamp = 4 + [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; +} + +message Evidence { + oneof sum { + DuplicateVoteEvidence duplicate_vote_evidence = 1; + ConflictingHeadersEvidence conflicting_headers_evidence = 2; + LunaticValidatorEvidence lunatic_validator_evidence = 3; + PotentialAmnesiaEvidence potential_amnesia_evidence = 4; + AmnesiaEvidence amnesia_evidence = 5; + } +} + +// EvidenceData contains any evidence of malicious wrong-doing by validators +message EvidenceData { + repeated Evidence evidence = 1 [(gogoproto.nullable) = false]; + bytes hash = 2; +} + +message ProofOfLockChange { + repeated Vote votes = 1; + tendermint.crypto.PublicKey pub_key = 2; +} diff --git a/third_party/proto/tendermint/types/params.proto b/third_party/proto/tendermint/types/params.proto new file mode 100644 index 0000000000..33ed4f7735 --- /dev/null +++ b/third_party/proto/tendermint/types/params.proto @@ -0,0 +1,86 @@ +syntax = "proto3"; +package tendermint.types; + +option go_package = "github.com/tendermint/tendermint/proto/tendermint/types"; + +import "gogoproto/gogo.proto"; +import "google/protobuf/duration.proto"; + +option (gogoproto.equal_all) = true; + +// ConsensusParams contains consensus critical parameters that determine the +// validity of blocks. +message ConsensusParams { + BlockParams block = 1 [(gogoproto.nullable) = false]; + EvidenceParams evidence = 2 [(gogoproto.nullable) = false]; + ValidatorParams validator = 3 [(gogoproto.nullable) = false]; + VersionParams version = 4 [(gogoproto.nullable) = false]; +} + +// BlockParams contains limits on the block size. +message BlockParams { + // Max block size, in bytes. + // Note: must be greater than 0 + int64 max_bytes = 1; + // Max gas per block. + // Note: must be greater or equal to -1 + int64 max_gas = 2; + // Minimum time increment between consecutive blocks (in milliseconds) If the + // block header timestamp is ahead of the system clock, decrease this value. + // + // Not exposed to the application. + int64 time_iota_ms = 3; +} + +// EvidenceParams determine how we handle evidence of malfeasance. +message EvidenceParams { + // Max age of evidence, in blocks. + // + // The basic formula for calculating this is: MaxAgeDuration / {average block + // time}. + int64 max_age_num_blocks = 1; + + // Max age of evidence, in time. + // + // It should correspond with an app's "unbonding period" or other similar + // mechanism for handling [Nothing-At-Stake + // attacks](https://github.com/ethereum/wiki/wiki/Proof-of-Stake-FAQ#what-is-the-nothing-at-stake-problem-and-how-can-it-be-fixed). + google.protobuf.Duration max_age_duration = 2 + [(gogoproto.nullable) = false, (gogoproto.stdduration) = true]; + + // This sets the maximum number of evidence that can be committed in a single block. + // and should fall comfortably under the max block bytes when we consider the size of + // each evidence (See MaxEvidenceBytes). The maximum number is MaxEvidencePerBlock. + // Default is 50 + uint32 max_num = 3; + + // Proof trial period dictates the time given for nodes accused of amnesia evidence, incorrectly + // voting twice in two different rounds to respond with their respective proofs. + // Default is half the max age in blocks: 50,000 + int64 proof_trial_period = 4; +} + +// ValidatorParams restrict the public key types validators can use. +// NOTE: uses ABCI pubkey naming, not Amino names. +message ValidatorParams { + option (gogoproto.populate) = true; + option (gogoproto.equal) = true; + + repeated string pub_key_types = 1; +} + +// VersionParams contains the ABCI application version. +message VersionParams { + option (gogoproto.populate) = true; + option (gogoproto.equal) = true; + + uint64 app_version = 1; +} + +// HashedParams is a subset of ConsensusParams. +// +// It is hashed into the Header.ConsensusHash. +message HashedParams { + int64 block_max_bytes = 1; + int64 block_max_gas = 2; +} diff --git a/third_party/proto/tendermint/types/types.proto b/third_party/proto/tendermint/types/types.proto new file mode 100644 index 0000000000..7ba7de8bdf --- /dev/null +++ b/third_party/proto/tendermint/types/types.proto @@ -0,0 +1,156 @@ +syntax = "proto3"; +package tendermint.types; + +option go_package = "github.com/tendermint/tendermint/proto/tendermint/types"; + +import "gogoproto/gogo.proto"; +import "google/protobuf/timestamp.proto"; +import "tendermint/libs/bits/types.proto"; +import "tendermint/crypto/proof.proto"; +import "tendermint/version/types.proto"; + +// BlockIdFlag indicates which BlcokID the signature is for +enum BlockIDFlag { + option (gogoproto.goproto_enum_stringer) = true; + option (gogoproto.goproto_enum_prefix) = false; + + BLOCK_ID_FLAG_UNKNOWN = 0 [(gogoproto.enumvalue_customname) = "BlockIDFlagUnknown"]; + BLOCK_ID_FLAG_ABSENT = 1 [(gogoproto.enumvalue_customname) = "BlockIDFlagAbsent"]; + BLOCK_ID_FLAG_COMMIT = 2 [(gogoproto.enumvalue_customname) = "BlockIDFlagCommit"]; + BLOCK_ID_FLAG_NIL = 3 [(gogoproto.enumvalue_customname) = "BlockIDFlagNil"]; +} + +// SignedMsgType is a type of signed message in the consensus. +enum SignedMsgType { + option (gogoproto.goproto_enum_stringer) = true; + option (gogoproto.goproto_enum_prefix) = false; + + SIGNED_MSG_TYPE_UNKNOWN = 0 [(gogoproto.enumvalue_customname) = "UnknownType"]; + // Votes + SIGNED_MSG_TYPE_PREVOTE = 1 [(gogoproto.enumvalue_customname) = "PrevoteType"]; + SIGNED_MSG_TYPE_PRECOMMIT = 2 [(gogoproto.enumvalue_customname) = "PrecommitType"]; + + // Proposals + SIGNED_MSG_TYPE_PROPOSAL = 32 [(gogoproto.enumvalue_customname) = "ProposalType"]; +} + +// PartsetHeader +message PartSetHeader { + uint32 total = 1; + bytes hash = 2; +} + +message Part { + uint32 index = 1; + bytes bytes = 2; + tendermint.crypto.Proof proof = 3 [(gogoproto.nullable) = false]; +} + +// BlockID +message BlockID { + bytes hash = 1; + PartSetHeader part_set_header = 2 [(gogoproto.nullable) = false]; +} + +// -------------------------------- + +// Header defines the structure of a Tendermint block header. +message Header { + // basic block info + tendermint.version.Consensus version = 1 [(gogoproto.nullable) = false]; + string chain_id = 2 [(gogoproto.customname) = "ChainID"]; + int64 height = 3; + google.protobuf.Timestamp time = 4 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + + // prev block info + BlockID last_block_id = 5 [(gogoproto.nullable) = false]; + + // hashes of block data + bytes last_commit_hash = 6; // commit from validators from the last block + bytes data_hash = 7; // transactions + + // hashes from the app output from the prev block + bytes validators_hash = 8; // validators for the current block + bytes next_validators_hash = 9; // validators for the next block + bytes consensus_hash = 10; // consensus params for current block + bytes app_hash = 11; // state after txs from the previous block + bytes last_results_hash = 12; // root hash of all results from the txs from the previous block + + // consensus info + bytes evidence_hash = 13; // evidence included in the block + bytes proposer_address = 14; // original proposer of the block +} + +// Data contains the set of transactions included in the block +message Data { + // Txs that will be applied by state @ block.Height+1. + // NOTE: not all txs here are valid. We're just agreeing on the order first. + // This means that block.AppHash does not include these txs. + repeated bytes txs = 1; + // Volatile + bytes hash = 2; +} + +// Vote represents a prevote, precommit, or commit vote from validators for +// consensus. +message Vote { + SignedMsgType type = 1; + int64 height = 2; + int32 round = 3; + BlockID block_id = 4 + [(gogoproto.nullable) = false, (gogoproto.customname) = "BlockID"]; // zero if vote is nil. + google.protobuf.Timestamp timestamp = 5 + [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + bytes validator_address = 6; + int32 validator_index = 7; + bytes signature = 8; +} + +// Commit contains the evidence that a block was committed by a set of validators. +message Commit { + int64 height = 1; + int32 round = 2; + BlockID block_id = 3 [(gogoproto.nullable) = false, (gogoproto.customname) = "BlockID"]; + repeated CommitSig signatures = 4 [(gogoproto.nullable) = false]; + bytes hash = 5; + tendermint.libs.bits.BitArray bit_array = 6; +} + +// CommitSig is a part of the Vote included in a Commit. +message CommitSig { + BlockIDFlag block_id_flag = 1; + bytes validator_address = 2; + google.protobuf.Timestamp timestamp = 3 + [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + bytes signature = 4; +} + +message Proposal { + SignedMsgType type = 1; + int64 height = 2; + int32 round = 3; + int32 pol_round = 4; + BlockID block_id = 5 [(gogoproto.customname) = "BlockID", (gogoproto.nullable) = false]; + google.protobuf.Timestamp timestamp = 6 + [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + bytes signature = 7; +} + +message SignedHeader { + Header header = 1; + Commit commit = 2; +} + +message BlockMeta { + BlockID block_id = 1 [(gogoproto.customname) = "BlockID", (gogoproto.nullable) = false]; + int64 block_size = 2; + Header header = 3 [(gogoproto.nullable) = false]; + int64 num_txs = 4; +} + +// TxProof represents a Merkle proof of the presence of a transaction in the Merkle tree. +message TxProof { + bytes root_hash = 1; + bytes data = 2; + tendermint.crypto.Proof proof = 3; +} diff --git a/third_party/proto/tendermint/version/types.proto b/third_party/proto/tendermint/version/types.proto new file mode 100644 index 0000000000..6061868bd4 --- /dev/null +++ b/third_party/proto/tendermint/version/types.proto @@ -0,0 +1,24 @@ +syntax = "proto3"; +package tendermint.version; + +option go_package = "github.com/tendermint/tendermint/proto/tendermint/version"; + +import "gogoproto/gogo.proto"; + +// App includes the protocol and software version for the application. +// This information is included in ResponseInfo. The App.Protocol can be +// updated in ResponseEndBlock. +message App { + uint64 protocol = 1; + string software = 2; +} + +// Consensus captures the consensus rules for processing a block in the blockchain, +// including all blockchain data structures and the rules of the application's +// state transition machine. +message Consensus { + option (gogoproto.equal) = true; + + uint64 block = 1; + uint64 app = 2; +} diff --git a/types/abci.pb.go b/types/abci.pb.go index fcdcf6a121..1b130f5cce 100644 --- a/types/abci.pb.go +++ b/types/abci.pb.go @@ -515,57 +515,57 @@ func init() { } var fileDescriptor_4e37629bc7eb0df8 = []byte{ - // 787 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x54, 0xbd, 0x4e, 0x1b, 0x4b, - 0x14, 0xf6, 0xda, 0x66, 0xed, 0x1d, 0xc3, 0xe5, 0xde, 0xb9, 0x4e, 0x58, 0x08, 0xb1, 0xcd, 0x92, - 0x48, 0x6e, 0xb2, 0x16, 0x90, 0x48, 0x91, 0x8b, 0x28, 0x6c, 0xfe, 0xb0, 0x04, 0xcd, 0x62, 0x14, - 0x29, 0x8d, 0x35, 0xf6, 0x0e, 0xe3, 0x15, 0xde, 0x1d, 0x6b, 0x67, 0x0c, 0x76, 0x97, 0x32, 0x65, - 0x2a, 0x8a, 0x54, 0xa9, 0xf3, 0x24, 0x94, 0x94, 0x14, 0x91, 0x93, 0x98, 0x37, 0xe0, 0x09, 0xa2, - 0x99, 0x59, 0xff, 0x90, 0xc8, 0x34, 0xf6, 0x99, 0xf3, 0x37, 0xe7, 0x7c, 0xdf, 0x37, 0x0b, 0x36, - 0x5b, 0x94, 0x05, 0x94, 0x55, 0x9a, 0x88, 0xe1, 0x0a, 0x6a, 0xb6, 0xfc, 0xca, 0xe9, 0x56, 0x13, - 0x73, 0xb4, 0x25, 0x0f, 0x76, 0x37, 0xa2, 0x9c, 0x42, 0x53, 0x25, 0xd9, 0x22, 0xc9, 0x96, 0xfe, - 0x38, 0x69, 0x6d, 0x83, 0xe3, 0xd0, 0xc3, 0x51, 0xe0, 0x87, 0x5c, 0x55, 0xf3, 0x41, 0x17, 0x33, - 0xf5, 0xab, 0x8a, 0xd7, 0xf2, 0x84, 0x12, 0x2a, 0xcd, 0x8a, 0xb0, 0x62, 0xef, 0x2a, 0xa1, 0x94, - 0x74, 0x70, 0x45, 0x9e, 0x9a, 0xbd, 0xe3, 0x0a, 0x0a, 0x07, 0x2a, 0x64, 0x9d, 0xa7, 0x00, 0xa8, - 0xf7, 0x5d, 0xcc, 0xba, 0x34, 0x64, 0x18, 0xde, 0x07, 0x7a, 0x1b, 0xfb, 0xa4, 0xcd, 0x4d, 0xad, - 0xa4, 0x95, 0x53, 0x6e, 0x7c, 0x82, 0x16, 0xd0, 0x79, 0xbf, 0x8d, 0x58, 0xdb, 0x4c, 0x96, 0xb4, - 0xb2, 0xe1, 0x80, 0xd1, 0xb0, 0xa8, 0xd7, 0xfb, 0x7b, 0x88, 0xb5, 0xdd, 0x38, 0x02, 0xd7, 0x81, - 0xd1, 0xa2, 0x1e, 0x66, 0x5d, 0xd4, 0xc2, 0x66, 0x4a, 0xa4, 0xb9, 0x53, 0x07, 0x84, 0x20, 0x2d, - 0x0e, 0x66, 0xba, 0xa4, 0x95, 0x97, 0x5c, 0x69, 0x0b, 0x9f, 0x87, 0x38, 0x32, 0x17, 0x64, 0xb2, - 0xb4, 0xe1, 0x0a, 0xc8, 0x44, 0xe8, 0xac, 0xd1, 0xa1, 0xc4, 0xd4, 0xa5, 0x5b, 0x8f, 0xd0, 0xd9, - 0x3e, 0x25, 0xf0, 0x08, 0xa4, 0x3b, 0x94, 0x30, 0x33, 0x53, 0x4a, 0x95, 0x73, 0xdb, 0x65, 0x7b, - 0x1e, 0x4c, 0xf6, 0xae, 0xf3, 0xaa, 0x76, 0x80, 0x19, 0x43, 0x04, 0xef, 0x53, 0xe2, 0xac, 0x5c, - 0x0c, 0x8b, 0x89, 0x6f, 0x3f, 0x8a, 0xcb, 0xb7, 0xfd, 0xcc, 0x95, 0xed, 0xc4, 0x0c, 0x7e, 0x78, - 0x4c, 0xcd, 0xac, 0x9a, 0x41, 0xd8, 0xf0, 0x21, 0x00, 0x04, 0xb1, 0xc6, 0x19, 0x0a, 0x39, 0xf6, - 0x4c, 0x43, 0x22, 0x61, 0x10, 0xc4, 0xde, 0x4b, 0x07, 0x5c, 0x05, 0x59, 0x11, 0xee, 0x31, 0xec, - 0x99, 0x40, 0x06, 0x33, 0x04, 0xb1, 0x23, 0x86, 0x3d, 0xf8, 0x08, 0x24, 0x79, 0xdf, 0xcc, 0x95, - 0xb4, 0x72, 0x6e, 0x3b, 0x6f, 0x2b, 0xd8, 0xed, 0x31, 0xec, 0xf6, 0x6e, 0x38, 0x70, 0x93, 0xbc, - 0x2f, 0x90, 0xe2, 0x7e, 0x80, 0x19, 0x47, 0x41, 0xd7, 0x5c, 0x54, 0x48, 0x4d, 0x1c, 0xd5, 0xf4, - 0xa7, 0xaf, 0xc5, 0x84, 0xf5, 0x45, 0x03, 0xff, 0xdc, 0x9e, 0x18, 0x3e, 0x00, 0x46, 0xc0, 0x48, - 0xc3, 0x0f, 0x3d, 0xdc, 0x97, 0xfc, 0x2c, 0xb9, 0xd9, 0x80, 0x91, 0x9a, 0x38, 0xc3, 0x7f, 0x41, - 0x4a, 0x60, 0x26, 0xe9, 0x71, 0x85, 0x09, 0x0f, 0x81, 0x8e, 0x4f, 0x71, 0xc8, 0x99, 0x99, 0x92, - 0x90, 0x3d, 0x9e, 0x0f, 0xd9, 0x21, 0x8f, 0xfc, 0x90, 0xbc, 0x11, 0xd9, 0x4e, 0x3e, 0xc6, 0x6b, - 0x71, 0xc6, 0xc9, 0xdc, 0xb8, 0x55, 0x35, 0xfd, 0xf1, 0x7b, 0x49, 0xb3, 0x22, 0x90, 0x9b, 0x89, - 0x0a, 0x0c, 0x85, 0x08, 0xe5, 0x4c, 0x86, 0x2b, 0x6d, 0x58, 0x03, 0x00, 0x71, 0x1e, 0xf9, 0xcd, - 0x1e, 0xc7, 0xcc, 0x4c, 0xca, 0x09, 0x36, 0xef, 0x20, 0x6d, 0x9c, 0xeb, 0xa4, 0xc5, 0xfd, 0xee, - 0x4c, 0x71, 0x7c, 0xe7, 0x0e, 0x30, 0x26, 0x49, 0x62, 0xdb, 0x13, 0x3c, 0x88, 0x2f, 0x14, 0x26, - 0xcc, 0x83, 0x85, 0x53, 0xd4, 0xe9, 0xe1, 0x18, 0x01, 0x75, 0xb0, 0x28, 0xc8, 0xbc, 0x43, 0xac, - 0x26, 0x48, 0x7d, 0x7a, 0x8b, 0x54, 0x51, 0x99, 0x76, 0xee, 0xdd, 0x0c, 0x8b, 0xff, 0x0d, 0x50, - 0xd0, 0xa9, 0x5a, 0xd3, 0x98, 0x35, 0xcb, 0xb5, 0x3d, 0xc3, 0x75, 0x52, 0xd6, 0xfc, 0x7f, 0x33, - 0x2c, 0x2e, 0x4f, 0x6b, 0x44, 0xc4, 0x9a, 0x08, 0xc0, 0xea, 0x02, 0xdd, 0xc5, 0xac, 0xd7, 0xe1, - 0x13, 0x71, 0x8b, 0x9b, 0x16, 0x63, 0x71, 0xff, 0x4d, 0x52, 0xf5, 0x0f, 0x92, 0xd6, 0xed, 0xe9, - 0x23, 0x57, 0x08, 0xa9, 0xe7, 0xad, 0xb8, 0x51, 0xd8, 0x4c, 0xb8, 0x90, 0x42, 0x39, 0xd7, 0x00, - 0x3c, 0xf4, 0x83, 0x5e, 0x07, 0x71, 0x9f, 0x86, 0x93, 0x97, 0xfc, 0x56, 0x0d, 0x2e, 0xb5, 0xad, - 0x49, 0x3d, 0x6e, 0xcc, 0x47, 0x3f, 0xc6, 0xc8, 0xc9, 0x8a, 0xfe, 0x97, 0xc3, 0xa2, 0x26, 0x17, - 0x92, 0xb0, 0x3d, 0x07, 0x7a, 0x24, 0x17, 0x92, 0x53, 0xe7, 0xb6, 0x4b, 0xf3, 0xbb, 0xa8, 0xc5, - 0xdd, 0x38, 0xdf, 0x7a, 0x01, 0x32, 0x07, 0x8c, 0xbc, 0x16, 0x7b, 0xaf, 0x02, 0x21, 0xd4, 0xc6, - 0x8c, 0x48, 0x32, 0x01, 0x23, 0x75, 0xa1, 0x93, 0x31, 0x4c, 0xc9, 0x29, 0x4c, 0x31, 0xe1, 0x7b, - 0xc0, 0xa8, 0xf7, 0xc7, 0x1d, 0x9e, 0x4d, 0xd0, 0x4c, 0xdd, 0xbd, 0x4a, 0x5c, 0x30, 0xdb, 0xc9, - 0x79, 0x79, 0xf5, 0xab, 0x90, 0xb8, 0x18, 0x15, 0xb4, 0xcb, 0x51, 0x41, 0xfb, 0x39, 0x2a, 0x68, - 0x9f, 0xaf, 0x0b, 0x89, 0xcb, 0xeb, 0x42, 0xe2, 0xea, 0xba, 0x90, 0xf8, 0x60, 0x11, 0x9f, 0xb7, - 0x7b, 0x4d, 0xbb, 0x45, 0x83, 0x4a, 0xfc, 0x81, 0x56, 0x7f, 0x4f, 0x98, 0x77, 0xa2, 0xbe, 0xae, - 0x4d, 0x5d, 0xbe, 0xe1, 0x9d, 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x9c, 0xbb, 0x16, 0xe4, 0xc2, - 0x05, 0x00, 0x00, + // 786 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x54, 0x4b, 0x6f, 0xdb, 0x46, + 0x10, 0x16, 0x25, 0x99, 0x12, 0x47, 0x76, 0xdd, 0x6e, 0x55, 0x9b, 0xb6, 0x5b, 0x49, 0xa5, 0x5b, + 0x40, 0x97, 0x52, 0xf0, 0xa3, 0x40, 0xe1, 0x43, 0x51, 0xb3, 0x2f, 0x0b, 0xb0, 0x2f, 0xb4, 0x8c, + 0x00, 0xb9, 0x08, 0x2b, 0x71, 0xbd, 0x62, 0x2c, 0x72, 0x05, 0xee, 0xca, 0x96, 0x6e, 0x39, 0xe6, + 0x98, 0x93, 0x0f, 0x39, 0xe5, 0x9c, 0x5f, 0xe2, 0xa3, 0x8f, 0x3e, 0x04, 0x4a, 0x22, 0xff, 0x03, + 0xff, 0x82, 0x60, 0x97, 0xd4, 0xc3, 0x09, 0xe4, 0x13, 0xe7, 0xf1, 0xed, 0xec, 0xcc, 0xf7, 0xcd, + 0x12, 0xb6, 0xdb, 0x8c, 0x07, 0x8c, 0xd7, 0x5a, 0x98, 0x93, 0x1a, 0x6e, 0xb5, 0xfd, 0xda, 0xe5, + 0x4e, 0x8b, 0x08, 0xbc, 0xa3, 0x1c, 0xbb, 0x17, 0x31, 0xc1, 0x90, 0x19, 0x83, 0x6c, 0x09, 0xb2, + 0x55, 0x3c, 0x01, 0x6d, 0x16, 0x29, 0xa3, 0x4c, 0x81, 0x6a, 0xd2, 0x8a, 0xf1, 0x9b, 0x5b, 0x82, + 0x84, 0x1e, 0x89, 0x02, 0x3f, 0x14, 0x71, 0x4d, 0x31, 0xec, 0x11, 0x9e, 0x24, 0x37, 0x28, 0x63, + 0xb4, 0x4b, 0x6a, 0xca, 0x6b, 0xf5, 0xcf, 0x6b, 0x38, 0x1c, 0xc6, 0x29, 0xeb, 0x3a, 0x03, 0xd0, + 0x18, 0xb8, 0x84, 0xf7, 0x58, 0xc8, 0x09, 0x5a, 0x03, 0xbd, 0x43, 0x7c, 0xda, 0x11, 0xa6, 0x56, + 0xd1, 0xaa, 0x19, 0x37, 0xf1, 0x90, 0x05, 0xba, 0x18, 0x74, 0x30, 0xef, 0x98, 0xe9, 0x8a, 0x56, + 0x35, 0x1c, 0x18, 0x8f, 0xca, 0x7a, 0x63, 0x70, 0x84, 0x79, 0xc7, 0x4d, 0x32, 0xe8, 0x47, 0x30, + 0xda, 0xcc, 0x23, 0xbc, 0x87, 0xdb, 0xc4, 0xcc, 0x48, 0x98, 0x3b, 0x0b, 0x20, 0x04, 0x59, 0xe9, + 0x98, 0xd9, 0x8a, 0x56, 0x5d, 0x71, 0x95, 0x2d, 0x63, 0x1e, 0x16, 0xd8, 0x5c, 0x52, 0x60, 0x65, + 0xa3, 0x75, 0xc8, 0x45, 0xf8, 0xaa, 0xd9, 0x65, 0xd4, 0xd4, 0x55, 0x58, 0x8f, 0xf0, 0xd5, 0x31, + 0xa3, 0xe8, 0x0c, 0xb2, 0x5d, 0x46, 0xb9, 0x99, 0xab, 0x64, 0xaa, 0x85, 0xdd, 0xaa, 0xbd, 0x88, + 0x20, 0xfb, 0xd0, 0xf9, 0xbb, 0x7e, 0x42, 0x38, 0xc7, 0x94, 0x1c, 0x33, 0xea, 0xac, 0xdf, 0x8c, + 0xca, 0xa9, 0x77, 0x1f, 0xca, 0xab, 0x8f, 0xe3, 0xdc, 0x55, 0xe5, 0x64, 0x0f, 0x7e, 0x78, 0xce, + 0xcc, 0x7c, 0xdc, 0x83, 0xb4, 0xd1, 0x4f, 0x00, 0x14, 0xf3, 0xe6, 0x15, 0x0e, 0x05, 0xf1, 0x4c, + 0x43, 0x31, 0x61, 0x50, 0xcc, 0x9f, 0xa9, 0x00, 0xda, 0x80, 0xbc, 0x4c, 0xf7, 0x39, 0xf1, 0x4c, + 0x50, 0xc9, 0x1c, 0xc5, 0xfc, 0x8c, 0x13, 0x0f, 0xfd, 0x02, 0x69, 0x31, 0x30, 0x0b, 0x15, 0xad, + 0x5a, 0xd8, 0x2d, 0xda, 0x31, 0xed, 0xf6, 0x84, 0x76, 0xfb, 0x30, 0x1c, 0xba, 0x69, 0x31, 0x90, + 0x4c, 0x09, 0x3f, 0x20, 0x5c, 0xe0, 0xa0, 0x67, 0x2e, 0xc7, 0x4c, 0x4d, 0x03, 0x07, 0xd9, 0x57, + 0x6f, 0xcb, 0x29, 0xeb, 0x8d, 0x06, 0xdf, 0x3c, 0xee, 0x18, 0x6d, 0x81, 0x11, 0x70, 0xda, 0xf4, + 0x43, 0x8f, 0x0c, 0x94, 0x3e, 0x2b, 0x6e, 0x3e, 0xe0, 0xb4, 0x2e, 0x7d, 0xf4, 0x2d, 0x64, 0x24, + 0x67, 0x4a, 0x1e, 0x57, 0x9a, 0xe8, 0x14, 0x74, 0x72, 0x49, 0x42, 0xc1, 0xcd, 0x8c, 0xa2, 0xec, + 0xd7, 0xc5, 0x94, 0x9d, 0x8a, 0xc8, 0x0f, 0xe9, 0xbf, 0x12, 0xed, 0x14, 0x13, 0xbe, 0x96, 0xe7, + 0x82, 0xdc, 0x4d, 0x4a, 0x1d, 0x64, 0x5f, 0xbe, 0xaf, 0x68, 0x56, 0x04, 0x85, 0xb9, 0xac, 0xe4, + 0x50, 0xae, 0x9b, 0xea, 0xc9, 0x70, 0x95, 0x8d, 0xea, 0x00, 0x58, 0x88, 0xc8, 0x6f, 0xf5, 0x05, + 0xe1, 0x66, 0x5a, 0x75, 0xb0, 0xfd, 0x84, 0x68, 0x13, 0xac, 0x93, 0x95, 0xf7, 0xbb, 0x73, 0x87, + 0x93, 0x3b, 0xf7, 0xc0, 0x98, 0x82, 0xe4, 0xb4, 0x17, 0x64, 0x98, 0x5c, 0x28, 0x4d, 0x54, 0x84, + 0xa5, 0x4b, 0xdc, 0xed, 0x93, 0x84, 0x81, 0xd8, 0xb1, 0x18, 0xe4, 0xfe, 0xc7, 0xbc, 0x2e, 0x45, + 0xdd, 0x7f, 0x24, 0xaa, 0x3c, 0x99, 0x75, 0x7e, 0x78, 0x18, 0x95, 0xbf, 0x1b, 0xe2, 0xa0, 0x7b, + 0x60, 0xcd, 0x72, 0xd6, 0xbc, 0xd6, 0xf6, 0x9c, 0xd6, 0x69, 0x75, 0xe6, 0xfb, 0x87, 0x51, 0x79, + 0x75, 0x76, 0x46, 0x66, 0xac, 0xe9, 0x02, 0x58, 0x2f, 0x40, 0x77, 0x09, 0xef, 0x77, 0xc5, 0x74, + 0xb9, 0xe5, 0x4d, 0xcb, 0xc9, 0x72, 0x7f, 0x2d, 0xd2, 0xfe, 0x17, 0x22, 0xad, 0xd9, 0xb3, 0x87, + 0x1c, 0x33, 0x14, 0xab, 0x12, 0xb3, 0x32, 0x55, 0x41, 0xad, 0xc8, 0xb5, 0x06, 0xe8, 0xd4, 0x0f, + 0xfa, 0x5d, 0x2c, 0x7c, 0x16, 0x4e, 0xdf, 0xf0, 0x7f, 0x71, 0xcb, 0x6a, 0xab, 0x35, 0xb5, 0x89, + 0x3f, 0x2f, 0xe6, 0x3d, 0x61, 0xc7, 0xc9, 0xcb, 0xfa, 0xb7, 0xa3, 0xb2, 0xa6, 0x46, 0x51, 0x84, + 0xfd, 0x01, 0x7a, 0xa4, 0x46, 0x51, 0xfd, 0x16, 0x76, 0x2b, 0x8b, 0xab, 0xc4, 0x23, 0xbb, 0x09, + 0xde, 0xfa, 0x13, 0x72, 0x27, 0x9c, 0xfe, 0x23, 0x27, 0xde, 0x00, 0xb9, 0xa2, 0xcd, 0xb9, 0xf5, + 0xc8, 0x05, 0x9c, 0x36, 0xe4, 0x86, 0x4c, 0x08, 0x4a, 0xcf, 0x08, 0x4a, 0xa4, 0x3e, 0x02, 0xa3, + 0x31, 0x98, 0x54, 0xf8, 0x7d, 0xca, 0x63, 0xe6, 0xe9, 0x51, 0x92, 0x03, 0xf3, 0x95, 0x9c, 0xbf, + 0xee, 0x3e, 0x95, 0x52, 0x37, 0xe3, 0x92, 0x76, 0x3b, 0x2e, 0x69, 0x1f, 0xc7, 0x25, 0xed, 0xf5, + 0x7d, 0x29, 0x75, 0x7b, 0x5f, 0x4a, 0xdd, 0xdd, 0x97, 0x52, 0xcf, 0x2d, 0xea, 0x8b, 0x4e, 0xbf, + 0x65, 0xb7, 0x59, 0x50, 0x4b, 0x7e, 0xca, 0xf1, 0xe7, 0x37, 0xee, 0x5d, 0xc4, 0x7f, 0xd0, 0x96, + 0xae, 0x5e, 0xef, 0xde, 0xe7, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf3, 0x2c, 0x53, 0x4a, 0xb6, 0x05, + 0x00, 0x00, } func (m *TxResponse) Marshal() (dAtA []byte, err error) { diff --git a/types/address.go b/types/address.go index 1d02615707..4ade2a11bc 100644 --- a/types/address.go +++ b/types/address.go @@ -11,7 +11,8 @@ import ( "github.com/tendermint/tendermint/crypto" yaml "gopkg.in/yaml.v2" - tmamino "github.com/cosmos/cosmos-sdk/crypto/codec" + "github.com/cosmos/cosmos-sdk/codec/legacy" + cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec" "github.com/cosmos/cosmos-sdk/types/bech32" ) @@ -625,7 +626,7 @@ func Bech32ifyPubKey(pkt Bech32PubKeyType, pubkey crypto.PubKey) (string, error) } - return bech32.ConvertAndEncode(bech32Prefix, pubkey.Bytes()) + return bech32.ConvertAndEncode(bech32Prefix, legacy.Cdc.MustMarshalBinaryBare(pubkey)) } // MustBech32ifyPubKey calls Bech32ifyPubKey except it panics on error. @@ -660,7 +661,7 @@ func GetPubKeyFromBech32(pkt Bech32PubKeyType, pubkeyStr string) (crypto.PubKey, return nil, err } - pk, err := tmamino.PubKeyFromBytes(bz) + pk, err := cryptocodec.PubKeyFromBytes(bz) if err != nil { return nil, err } diff --git a/types/address_bench_test.go b/types/address_bench_test.go index 1bb0d15f61..640d180411 100644 --- a/types/address_bench_test.go +++ b/types/address_bench_test.go @@ -13,14 +13,14 @@ import ( ) func BenchmarkBech32ifyPubKey(b *testing.B) { - var pk ed25519.PubKeyEd25519 + pk := make(ed25519.PubKey, ed25519.PubKeySize) rng := rand.New(rand.NewSource(time.Now().Unix())) b.ResetTimer() for i := 0; i < b.N; i++ { b.StopTimer() - rng.Read(pk[:]) + rng.Read(pk) b.StartTimer() _, err := types.Bech32ifyPubKey(types.Bech32PubKeyTypeConsPub, pk) @@ -29,14 +29,14 @@ func BenchmarkBech32ifyPubKey(b *testing.B) { } func BenchmarkGetPubKeyFromBech32(b *testing.B) { - var pk ed25519.PubKeyEd25519 + pk := make(ed25519.PubKey, ed25519.PubKeySize) rng := rand.New(rand.NewSource(time.Now().Unix())) b.ResetTimer() for i := 0; i < b.N; i++ { b.StopTimer() - rng.Read(pk[:]) + rng.Read(pk) pkStr, err := types.Bech32ifyPubKey(types.Bech32PubKeyTypeConsPub, pk) require.NoError(b, err) diff --git a/types/address_test.go b/types/address_test.go index 6072b963dd..0b2701dcae 100644 --- a/types/address_test.go +++ b/types/address_test.go @@ -58,10 +58,10 @@ func TestEmptyAddresses(t *testing.T) { } func TestRandBech32PubkeyConsistency(t *testing.T) { - var pub ed25519.PubKeyEd25519 + pub := make(ed25519.PubKey, ed25519.PubKeySize) for i := 0; i < 1000; i++ { - rand.Read(pub[:]) + rand.Read(pub) mustBech32AccPub := types.MustBech32ifyPubKey(types.Bech32PubKeyTypeAccPub, pub) bech32AccPub, err := types.Bech32ifyPubKey(types.Bech32PubKeyTypeAccPub, pub) @@ -116,10 +116,10 @@ func TestYAMLMarshalers(t *testing.T) { } func TestRandBech32AccAddrConsistency(t *testing.T) { - var pub ed25519.PubKeyEd25519 + pub := make(ed25519.PubKey, ed25519.PubKeySize) for i := 0; i < 1000; i++ { - rand.Read(pub[:]) + rand.Read(pub) acc := types.AccAddress(pub.Address()) res := types.AccAddress{} @@ -154,7 +154,7 @@ func TestRandBech32AccAddrConsistency(t *testing.T) { } func TestValAddr(t *testing.T) { - var pub ed25519.PubKeyEd25519 + pub := make(ed25519.PubKey, ed25519.PubKeySize) for i := 0; i < 20; i++ { rand.Read(pub[:]) @@ -194,7 +194,7 @@ func TestValAddr(t *testing.T) { } func TestConsAddress(t *testing.T) { - var pub ed25519.PubKeyEd25519 + pub := make(ed25519.PubKey, ed25519.PubKeySize) for i := 0; i < 20; i++ { rand.Read(pub[:]) @@ -243,7 +243,7 @@ func RandString(n int) string { } func TestConfiguredPrefix(t *testing.T) { - var pub ed25519.PubKeyEd25519 + pub := make(ed25519.PubKey, ed25519.PubKeySize) for length := 1; length < 10; length++ { for times := 1; times < 20; times++ { rand.Read(pub[:]) @@ -298,8 +298,8 @@ func TestConfiguredPrefix(t *testing.T) { } func TestAddressInterface(t *testing.T) { - var pub ed25519.PubKeyEd25519 - rand.Read(pub[:]) + pub := make(ed25519.PubKey, ed25519.PubKeySize) + rand.Read(pub) addrs := []types.Address{ types.ConsAddress(pub.Address()), diff --git a/types/context.go b/types/context.go index 251ce6828b..6d326fb73f 100644 --- a/types/context.go +++ b/types/context.go @@ -7,6 +7,7 @@ import ( "github.com/gogo/protobuf/proto" abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/libs/log" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/store/gaskv" stypes "github.com/cosmos/cosmos-sdk/store/types" @@ -23,7 +24,7 @@ and standard additions here would be better just to add to the Context struct type Context struct { ctx context.Context ms MultiStore - header abci.Header + header tmproto.Header chainID string txBytes []byte logger log.Logger @@ -57,8 +58,8 @@ func (c Context) MinGasPrices() DecCoins { return c.minGasPrice } func (c Context) EventManager() *EventManager { return c.eventManager } // clone the header before returning -func (c Context) BlockHeader() abci.Header { - var msg = proto.Clone(&c.header).(*abci.Header) +func (c Context) BlockHeader() tmproto.Header { + var msg = proto.Clone(&c.header).(*tmproto.Header) return *msg } @@ -67,7 +68,7 @@ func (c Context) ConsensusParams() *abci.ConsensusParams { } // create a new context -func NewContext(ms MultiStore, header abci.Header, isCheckTx bool, logger log.Logger) Context { +func NewContext(ms MultiStore, header tmproto.Header, isCheckTx bool, logger log.Logger) Context { // https://github.com/gogo/protobuf/issues/519 header.Time = header.Time.UTC() return Context{ @@ -96,7 +97,7 @@ func (c Context) WithMultiStore(ms MultiStore) Context { } // WithBlockHeader returns a Context with an updated tendermint block header in UTC time. -func (c Context) WithBlockHeader(header abci.Header) Context { +func (c Context) WithBlockHeader(header tmproto.Header) Context { // https://github.com/gogo/protobuf/issues/519 header.Time = header.Time.UTC() c.header = header diff --git a/types/context_test.go b/types/context_test.go index a33fe65f64..0698199a0a 100644 --- a/types/context_test.go +++ b/types/context_test.go @@ -6,13 +6,11 @@ import ( "time" "github.com/stretchr/testify/require" - - "github.com/tendermint/tendermint/libs/log" - dbm "github.com/tendermint/tm-db" - abci "github.com/tendermint/tendermint/abci/types" - "github.com/tendermint/tendermint/crypto/secp256k1" + "github.com/tendermint/tendermint/libs/log" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + dbm "github.com/tendermint/tm-db" "github.com/cosmos/cosmos-sdk/store" "github.com/cosmos/cosmos-sdk/types" @@ -51,7 +49,7 @@ func defaultContext(t *testing.T, key types.StoreKey) types.Context { cms.MountStoreWithDB(key, types.StoreTypeIAVL, db) err := cms.LoadLatestVersion() require.NoError(t, err) - ctx := types.NewContext(cms, abci.Header{}, false, log.NewNopLogger()) + ctx := types.NewContext(cms, tmproto.Header{}, false, log.NewNopLogger()) return ctx } @@ -104,7 +102,7 @@ func TestContextWithCustom(t *testing.T) { var ctx types.Context require.True(t, ctx.IsZero()) - header := abci.Header{} + header := tmproto.Header{} height := int64(1) chainid := "chainid" ischeck := true @@ -164,7 +162,7 @@ func TestContextHeader(t *testing.T) { addr := secp256k1.GenPrivKey().PubKey().Address() proposer := types.ConsAddress(addr) - ctx = types.NewContext(nil, abci.Header{}, false, nil) + ctx = types.NewContext(nil, tmproto.Header{}, false, nil) ctx = ctx. WithBlockHeight(height). @@ -178,35 +176,35 @@ func TestContextHeader(t *testing.T) { func TestContextHeaderClone(t *testing.T) { cases := map[string]struct { - h abci.Header + h tmproto.Header }{ "empty": { - h: abci.Header{}, + h: tmproto.Header{}, }, "height": { - h: abci.Header{ + h: tmproto.Header{ Height: 77, }, }, "time": { - h: abci.Header{ + h: tmproto.Header{ Time: time.Unix(12345677, 12345), }, }, "zero time": { - h: abci.Header{ + h: tmproto.Header{ Time: time.Unix(0, 0), }, }, "many items": { - h: abci.Header{ + h: tmproto.Header{ Height: 823, Time: time.Unix(9999999999, 0), ChainID: "silly-demo", }, }, "many items with hash": { - h: abci.Header{ + h: tmproto.Header{ Height: 823, Time: time.Unix(9999999999, 0), ChainID: "silly-demo", @@ -233,7 +231,7 @@ func TestContextHeaderClone(t *testing.T) { } func TestUnwrapSDKContext(t *testing.T) { - sdkCtx := types.NewContext(nil, abci.Header{}, false, nil) + sdkCtx := types.NewContext(nil, tmproto.Header{}, false, nil) ctx := types.WrapSDKContext(sdkCtx) sdkCtx2 := types.UnwrapSDKContext(ctx) require.Equal(t, sdkCtx, sdkCtx2) diff --git a/types/events.go b/types/events.go index 30fe1ee39d..04c4c41e38 100644 --- a/types/events.go +++ b/types/events.go @@ -6,7 +6,6 @@ import ( "strings" abci "github.com/tendermint/tendermint/abci/types" - tmkv "github.com/tendermint/tendermint/libs/kv" ) // ---------------------------------------------------------------------------- @@ -79,8 +78,8 @@ func (a Attribute) String() string { } // ToKVPair converts an Attribute object into a Tendermint key/value pair. -func (a Attribute) ToKVPair() tmkv.Pair { - return tmkv.Pair{Key: toBytes(a.Key), Value: toBytes(a.Value)} +func (a Attribute) ToKVPair() abci.EventAttribute { + return abci.EventAttribute{Key: toBytes(a.Key), Value: toBytes(a.Value)} } // AppendAttributes adds one or more attributes to an Event. diff --git a/types/query/pagination_test.go b/types/query/pagination_test.go index 6c66fdf7fb..c16bc197ef 100644 --- a/types/query/pagination_test.go +++ b/types/query/pagination_test.go @@ -5,24 +5,21 @@ import ( "fmt" "testing" + "github.com/stretchr/testify/require" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + dbm "github.com/tendermint/tm-db" + + "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/codec" + "github.com/cosmos/cosmos-sdk/simapp" + "github.com/cosmos/cosmos-sdk/store" "github.com/cosmos/cosmos-sdk/store/prefix" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/query" authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" - - "github.com/cosmos/cosmos-sdk/baseapp" - "github.com/cosmos/cosmos-sdk/x/bank/types" - - "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" - dbm "github.com/tendermint/tm-db" - - "github.com/cosmos/cosmos-sdk/simapp" - "github.com/cosmos/cosmos-sdk/store" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/query" ) const ( @@ -187,7 +184,7 @@ func ExamplePaginate() { func setupTest() (*simapp.SimApp, sdk.Context, codec.Marshaler) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{Height: 1}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{Height: 1}) appCodec := app.AppCodec() db := dbm.NewMemDB() diff --git a/types/simulation/account.go b/types/simulation/account.go index 21bffd05fe..2078cddc2d 100644 --- a/types/simulation/account.go +++ b/types/simulation/account.go @@ -4,6 +4,7 @@ import ( "math/rand" "github.com/tendermint/tendermint/crypto" + "github.com/tendermint/tendermint/crypto/ed25519" "github.com/tendermint/tendermint/crypto/secp256k1" sdk "github.com/cosmos/cosmos-sdk/types" @@ -16,6 +17,7 @@ type Account struct { PrivKey crypto.PrivKey PubKey crypto.PubKey Address sdk.AccAddress + ConsKey crypto.PrivKey } // Equals returns true if two accounts are equal @@ -39,9 +41,11 @@ func RandomAccounts(r *rand.Rand, n int) []Account { privkeySeed := make([]byte, 15) r.Read(privkeySeed) - accs[i].PrivKey = secp256k1.GenPrivKeySecp256k1(privkeySeed) + accs[i].PrivKey = secp256k1.GenPrivKeyFromSecret(privkeySeed) accs[i].PubKey = accs[i].PrivKey.PubKey() accs[i].Address = sdk.AccAddress(accs[i].PubKey.Address()) + + accs[i].ConsKey = ed25519.GenPrivKeyFromSecret(privkeySeed) } return accs diff --git a/types/utils.go b/types/utils.go index 03cd18a45b..cca98edf0a 100644 --- a/types/utils.go +++ b/types/utils.go @@ -91,7 +91,8 @@ func NewLevelDB(name, dir string) (db dbm.DB, err error) { err = fmt.Errorf("couldn't create db: %v", r) } }() - return dbm.NewDB(name, backend, dir), err + + return dbm.NewDB(name, backend, dir) } // copy bytes diff --git a/x/auth/ante/ante_test.go b/x/auth/ante/ante_test.go index d3165d5261..e5c701c8ba 100644 --- a/x/auth/ante/ante_test.go +++ b/x/auth/ante/ante_test.go @@ -1002,7 +1002,7 @@ func (suite *AnteTestSuite) TestCustomSignatureVerificationGasConsumer() { // setup an ante handler that only accepts PubKeyEd25519 suite.anteHandler = ante.NewAnteHandler(suite.app.AccountKeeper, suite.app.BankKeeper, func(meter sdk.GasMeter, sig signing.SignatureV2, params types.Params) error { switch pubkey := sig.PubKey.(type) { - case ed25519.PubKeyEd25519: + case ed25519.PubKey: meter.ConsumeGas(params.SigVerifyCostED25519, "ante verify: ed25519") return nil default: diff --git a/x/auth/ante/sigverify.go b/x/auth/ante/sigverify.go index a33d5fb0fc..a11dd6ec88 100644 --- a/x/auth/ante/sigverify.go +++ b/x/auth/ante/sigverify.go @@ -20,7 +20,7 @@ import ( var ( // simulation signature values used to estimate gas consumption - simSecp256k1Pubkey secp256k1.PubKeySecp256k1 + simSecp256k1Pubkey = make(secp256k1.PubKey, secp256k1.PubKeySize) simSecp256k1Sig [64]byte _ authsigning.SigVerifiableTx = (*types.StdTx)(nil) // assert StdTx implements SigVerifiableTx @@ -29,7 +29,7 @@ var ( func init() { // This decodes a valid hex string into a sepc256k1Pubkey for use in transaction simulation bz, _ := hex.DecodeString("035AD6810A47F073553FF30D2FCC7E0D3B1C0B74B61A1AAA2582344037151E143A") - copy(simSecp256k1Pubkey[:], bz) + copy(simSecp256k1Pubkey, bz) } // SignatureVerificationGasConsumer is the type of function that is used to both @@ -320,11 +320,11 @@ func DefaultSigVerificationGasConsumer( pubkey := sig.PubKey switch pubkey := pubkey.(type) { - case ed25519.PubKeyEd25519: + case ed25519.PubKey: meter.ConsumeGas(params.SigVerifyCostED25519, "ante verify: ed25519") return sdkerrors.Wrap(sdkerrors.ErrInvalidPubKey, "ED25519 public keys are unsupported") - case secp256k1.PubKeySecp256k1: + case secp256k1.PubKey: meter.ConsumeGas(params.SigVerifyCostSecp256k1, "ante verify: secp256k1") return nil diff --git a/x/auth/ante/testutil_test.go b/x/auth/ante/testutil_test.go index a3e7231e45..6736d2a096 100644 --- a/x/auth/ante/testutil_test.go +++ b/x/auth/ante/testutil_test.go @@ -6,8 +6,8 @@ import ( "testing" "github.com/stretchr/testify/suite" - abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/crypto" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/tx" @@ -41,7 +41,7 @@ type AnteTestSuite struct { // returns context and app with params set on account keeper func createTestApp(isCheckTx bool) (*simapp.SimApp, sdk.Context) { app := simapp.Setup(isCheckTx) - ctx := app.BaseApp.NewContext(isCheckTx, abci.Header{}) + ctx := app.BaseApp.NewContext(isCheckTx, tmproto.Header{}) app.AccountKeeper.SetParams(ctx, authtypes.DefaultParams()) return app, ctx diff --git a/x/auth/client/query.go b/x/auth/client/query.go index 5bd4cacd38..74a75bf249 100644 --- a/x/auth/client/query.go +++ b/x/auth/client/query.go @@ -43,7 +43,7 @@ func QueryTxsByEvents(clientCtx client.Context, events []string, page, limit int // TODO: this may not always need to be proven // https://github.com/cosmos/cosmos-sdk/issues/6807 - resTxs, err := node.TxSearch(query, true, page, limit, orderBy) + resTxs, err := node.TxSearch(query, true, &page, &limit, orderBy) if err != nil { return nil, err } diff --git a/x/auth/keeper/integration_test.go b/x/auth/keeper/integration_test.go index 0b77144530..d2069d6d35 100644 --- a/x/auth/keeper/integration_test.go +++ b/x/auth/keeper/integration_test.go @@ -1,7 +1,7 @@ package keeper_test import ( - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" @@ -11,7 +11,7 @@ import ( // returns context and app with params set on account keeper func createTestApp(isCheckTx bool) (*simapp.SimApp, sdk.Context) { app := simapp.Setup(isCheckTx) - ctx := app.BaseApp.NewContext(isCheckTx, abci.Header{}) + ctx := app.BaseApp.NewContext(isCheckTx, tmproto.Header{}) app.AccountKeeper.SetParams(ctx, authtypes.DefaultParams()) return app, ctx diff --git a/x/auth/module_test.go b/x/auth/module_test.go index 849f2d1540..0bf268ddba 100644 --- a/x/auth/module_test.go +++ b/x/auth/module_test.go @@ -5,6 +5,7 @@ import ( "github.com/stretchr/testify/require" abcitypes "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" "github.com/cosmos/cosmos-sdk/x/auth/types" @@ -12,7 +13,7 @@ import ( func TestItCreatesModuleAccountOnInitBlock(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abcitypes.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) app.InitChain( abcitypes.RequestInitChain{ diff --git a/x/auth/signing/verify.go b/x/auth/signing/verify.go index 9f9de4c4ae..0e66f026fa 100644 --- a/x/auth/signing/verify.go +++ b/x/auth/signing/verify.go @@ -19,7 +19,7 @@ func VerifySignature(pubKey crypto.PubKey, signerData SignerData, sigData signin if err != nil { return err } - if !pubKey.VerifyBytes(signBytes, data.Signature) { + if !pubKey.VerifySignature(signBytes, data.Signature) { return fmt.Errorf("unable to verify single signer signature") } return nil diff --git a/x/auth/signing/verify_test.go b/x/auth/signing/verify_test.go index 28cbadaed5..02fe2c2a7b 100644 --- a/x/auth/signing/verify_test.go +++ b/x/auth/signing/verify_test.go @@ -4,8 +4,8 @@ import ( "testing" "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/crypto" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/crypto/types/multisig" @@ -93,7 +93,7 @@ func TestVerifySignature(t *testing.T) { // returns context and app with params set on account keeper func createTestApp(isCheckTx bool) (*simapp.SimApp, sdk.Context) { app := simapp.Setup(isCheckTx) - ctx := app.BaseApp.NewContext(isCheckTx, abci.Header{}) + ctx := app.BaseApp.NewContext(isCheckTx, tmproto.Header{}) app.AccountKeeper.SetParams(ctx, types.DefaultParams()) return app, ctx diff --git a/x/auth/tx/builder_test.go b/x/auth/tx/builder_test.go index 09206f2746..a0dea1041a 100644 --- a/x/auth/tx/builder_test.go +++ b/x/auth/tx/builder_test.go @@ -6,6 +6,7 @@ import ( "github.com/stretchr/testify/require" "github.com/cosmos/cosmos-sdk/codec" + "github.com/cosmos/cosmos-sdk/codec/legacy" codectypes "github.com/cosmos/cosmos-sdk/codec/types" "github.com/cosmos/cosmos-sdk/std" "github.com/cosmos/cosmos-sdk/testutil/testdata" @@ -47,7 +48,7 @@ func TestTxBuilder(t *testing.T) { PubKey: pubkey, Data: &signing.SingleSignatureData{ SignMode: signing.SignMode_SIGN_MODE_DIRECT, - Signature: pubkey.Bytes(), + Signature: legacy.Cdc.MustMarshalBinaryBare(pubkey), }, } @@ -106,7 +107,7 @@ func TestTxBuilder(t *testing.T) { require.Equal(t, len(msgs), len(txBuilder.GetMsgs())) require.Equal(t, 1, len(txBuilder.GetPubKeys())) - require.Equal(t, pubkey.Bytes(), txBuilder.GetPubKeys()[0].Bytes()) + require.Equal(t, legacy.Cdc.MustMarshalBinaryBare(pubkey), legacy.Cdc.MustMarshalBinaryBare(txBuilder.GetPubKeys()[0])) txBuilder = &builder{} require.NotPanics(t, func() { @@ -134,7 +135,7 @@ func TestBuilderValidateBasic(t *testing.T) { PubKey: pubKey1, Data: &signing.SingleSignatureData{ SignMode: signing.SignMode_SIGN_MODE_DIRECT, - Signature: pubKey1.Bytes(), + Signature: legacy.Cdc.MustMarshalBinaryBare(pubKey1), }, } @@ -142,7 +143,7 @@ func TestBuilderValidateBasic(t *testing.T) { PubKey: pubKey2, Data: &signing.SingleSignatureData{ SignMode: signing.SignMode_SIGN_MODE_DIRECT, - Signature: pubKey2.Bytes(), + Signature: legacy.Cdc.MustMarshalBinaryBare(pubKey2), }, } diff --git a/x/auth/types/account.go b/x/auth/types/account.go index 1e85ac8f20..180f105358 100644 --- a/x/auth/types/account.go +++ b/x/auth/types/account.go @@ -75,7 +75,7 @@ func (acc *BaseAccount) SetPubKey(pubKey crypto.PubKey) error { if pubKey == nil { acc.PubKey = nil } else { - acc.PubKey = pubKey.Bytes() + acc.PubKey = amino.MustMarshalBinaryBare(pubKey) } return nil diff --git a/x/auth/types/stdtx_test.go b/x/auth/types/stdtx_test.go index 3cf45aa831..eb1f94c71a 100644 --- a/x/auth/types/stdtx_test.go +++ b/x/auth/types/stdtx_test.go @@ -5,13 +5,14 @@ import ( "testing" "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/crypto" "github.com/tendermint/tendermint/crypto/ed25519" "github.com/tendermint/tendermint/libs/log" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" yaml "gopkg.in/yaml.v2" "github.com/cosmos/cosmos-sdk/codec" + cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec" "github.com/cosmos/cosmos-sdk/crypto/types" "github.com/cosmos/cosmos-sdk/crypto/types/multisig" "github.com/cosmos/cosmos-sdk/testutil/testdata" @@ -94,7 +95,7 @@ func TestStdSignBytes(t *testing.T) { } func TestTxValidateBasic(t *testing.T) { - ctx := sdk.NewContext(nil, abci.Header{ChainID: "mychainid"}, false, log.NewNopLogger()) + ctx := sdk.NewContext(nil, tmproto.Header{ChainID: "mychainid"}, false, log.NewNopLogger()) // keys and addresses priv1, _, addr1 := testdata.KeyTestPubAddr() @@ -263,6 +264,7 @@ func TestGetSignaturesV2(t *testing.T) { cdc := codec.New() sdk.RegisterCodec(cdc) + cryptocodec.RegisterCrypto(cdc) RegisterCodec(cdc) fee := NewStdFee(50000, sdk.Coins{sdk.NewInt64Coin("atom", 150)}) @@ -273,7 +275,7 @@ func TestGetSignaturesV2(t *testing.T) { require.Nil(t, err) require.Equal(t, len(sigs), 1) - require.Equal(t, sigs[0].PubKey.Bytes(), sig.GetPubKey().Bytes()) + require.Equal(t, cdc.MustMarshalBinaryBare(sigs[0].PubKey), cdc.MustMarshalBinaryBare(sig.GetPubKey())) require.Equal(t, sigs[0].Data, &signing.SingleSignatureData{ SignMode: signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, Signature: sig.GetSignature(), diff --git a/x/bank/app_test.go b/x/bank/app_test.go index d99539e034..42122d0bca 100644 --- a/x/bank/app_test.go +++ b/x/bank/app_test.go @@ -4,17 +4,15 @@ import ( "testing" "github.com/stretchr/testify/require" - - distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types" - - abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/crypto" "github.com/tendermint/tendermint/crypto/secp256k1" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" "github.com/cosmos/cosmos-sdk/x/bank/types" + distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types" ) type ( @@ -94,7 +92,7 @@ func TestSendNotEnoughBalance(t *testing.T) { genAccs := []authtypes.GenesisAccount{acc} app := simapp.SetupWithGenesisAccounts(genAccs) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) err := app.BankKeeper.SetBalances(ctx, addr1, sdk.NewCoins(sdk.NewInt64Coin("foocoin", 67))) require.NoError(t, err) @@ -109,14 +107,14 @@ func TestSendNotEnoughBalance(t *testing.T) { origSeq := res1.GetSequence() sendMsg := types.NewMsgSend(addr1, addr2, sdk.Coins{sdk.NewInt64Coin("foocoin", 100)}) - header := abci.Header{Height: app.LastBlockHeight() + 1} + header := tmproto.Header{Height: app.LastBlockHeight() + 1} txGen := simapp.MakeEncodingConfig().TxConfig _, _, err = simapp.SignCheckDeliver(t, txGen, app.BaseApp, header, []sdk.Msg{sendMsg}, []uint64{origAccNum}, []uint64{origSeq}, false, false, priv1) require.Error(t, err) simapp.CheckBalance(t, app, addr1, sdk.Coins{sdk.NewInt64Coin("foocoin", 67)}) - res2 := app.AccountKeeper.GetAccount(app.NewContext(true, abci.Header{}), addr1) + res2 := app.AccountKeeper.GetAccount(app.NewContext(true, tmproto.Header{}), addr1) require.NotNil(t, res2) require.Equal(t, res2.GetAccountNumber(), origAccNum) @@ -163,7 +161,7 @@ func TestSendToModuleAcc(t *testing.T) { genAccs := []authtypes.GenesisAccount{acc} app := simapp.SetupWithGenesisAccounts(genAccs) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) err := app.BankKeeper.SetBalances(ctx, test.msg.FromAddress, test.fromBalance) require.NoError(t, err) @@ -177,7 +175,7 @@ func TestSendToModuleAcc(t *testing.T) { origAccNum := res1.GetAccountNumber() origSeq := res1.GetSequence() - header := abci.Header{Height: app.LastBlockHeight() + 1} + header := tmproto.Header{Height: app.LastBlockHeight() + 1} txGen := simapp.MakeEncodingConfig().TxConfig _, _, err = simapp.SignCheckDeliver(t, txGen, app.BaseApp, header, []sdk.Msg{test.msg}, []uint64{origAccNum}, []uint64{origSeq}, test.expSimPass, test.expPass, priv1) if test.expPass { @@ -189,7 +187,7 @@ func TestSendToModuleAcc(t *testing.T) { simapp.CheckBalance(t, app, test.msg.FromAddress, test.expFromBalance) simapp.CheckBalance(t, app, test.msg.ToAddress, test.expToBalance) - res2 := app.AccountKeeper.GetAccount(app.NewContext(true, abci.Header{}), addr1) + res2 := app.AccountKeeper.GetAccount(app.NewContext(true, tmproto.Header{}), addr1) require.NotNil(t, res2) require.Equal(t, res2.GetAccountNumber(), origAccNum) @@ -205,7 +203,7 @@ func TestMsgMultiSendWithAccounts(t *testing.T) { genAccs := []authtypes.GenesisAccount{acc} app := simapp.SetupWithGenesisAccounts(genAccs) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) err := app.BankKeeper.SetBalances(ctx, addr1, sdk.NewCoins(sdk.NewInt64Coin("foocoin", 67))) require.NoError(t, err) @@ -248,7 +246,7 @@ func TestMsgMultiSendWithAccounts(t *testing.T) { } for _, tc := range testCases { - header := abci.Header{Height: app.LastBlockHeight() + 1} + header := tmproto.Header{Height: app.LastBlockHeight() + 1} txGen := simapp.MakeEncodingConfig().TxConfig _, _, err := simapp.SignCheckDeliver(t, txGen, app.BaseApp, header, tc.msgs, tc.accNums, tc.accSeqs, tc.expSimPass, tc.expPass, tc.privKeys...) if tc.expPass { @@ -273,7 +271,7 @@ func TestMsgMultiSendMultipleOut(t *testing.T) { genAccs := []authtypes.GenesisAccount{acc1, acc2} app := simapp.SetupWithGenesisAccounts(genAccs) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) err := app.BankKeeper.SetBalances(ctx, addr1, sdk.NewCoins(sdk.NewInt64Coin("foocoin", 42))) require.NoError(t, err) @@ -300,7 +298,7 @@ func TestMsgMultiSendMultipleOut(t *testing.T) { } for _, tc := range testCases { - header := abci.Header{Height: app.LastBlockHeight() + 1} + header := tmproto.Header{Height: app.LastBlockHeight() + 1} txGen := simapp.MakeEncodingConfig().TxConfig _, _, err := simapp.SignCheckDeliver(t, txGen, app.BaseApp, header, tc.msgs, tc.accNums, tc.accSeqs, tc.expSimPass, tc.expPass, tc.privKeys...) require.NoError(t, err) @@ -324,7 +322,7 @@ func TestMsgMultiSendMultipleInOut(t *testing.T) { genAccs := []authtypes.GenesisAccount{acc1, acc2, acc4} app := simapp.SetupWithGenesisAccounts(genAccs) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) err := app.BankKeeper.SetBalances(ctx, addr1, sdk.NewCoins(sdk.NewInt64Coin("foocoin", 42))) require.NoError(t, err) @@ -355,7 +353,7 @@ func TestMsgMultiSendMultipleInOut(t *testing.T) { } for _, tc := range testCases { - header := abci.Header{Height: app.LastBlockHeight() + 1} + header := tmproto.Header{Height: app.LastBlockHeight() + 1} txGen := simapp.MakeEncodingConfig().TxConfig _, _, err := simapp.SignCheckDeliver(t, txGen, app.BaseApp, header, tc.msgs, tc.accNums, tc.accSeqs, tc.expSimPass, tc.expPass, tc.privKeys...) require.NoError(t, err) @@ -374,7 +372,7 @@ func TestMsgMultiSendDependent(t *testing.T) { genAccs := []authtypes.GenesisAccount{acc1, acc2} app := simapp.SetupWithGenesisAccounts(genAccs) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) err = app.BankKeeper.SetBalances(ctx, addr1, sdk.NewCoins(sdk.NewInt64Coin("foocoin", 42))) require.NoError(t, err) @@ -408,7 +406,7 @@ func TestMsgMultiSendDependent(t *testing.T) { } for _, tc := range testCases { - header := abci.Header{Height: app.LastBlockHeight() + 1} + header := tmproto.Header{Height: app.LastBlockHeight() + 1} txGen := simapp.MakeEncodingConfig().TxConfig _, _, err := simapp.SignCheckDeliver(t, txGen, app.BaseApp, header, tc.msgs, tc.accNums, tc.accSeqs, tc.expSimPass, tc.expPass, tc.privKeys...) require.NoError(t, err) diff --git a/x/bank/bench_test.go b/x/bank/bench_test.go index 67750d6b24..deb3f6dd1c 100644 --- a/x/bank/bench_test.go +++ b/x/bank/bench_test.go @@ -5,6 +5,7 @@ import ( "github.com/stretchr/testify/require" abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" simappparams "github.com/cosmos/cosmos-sdk/simapp/params" @@ -25,7 +26,7 @@ func BenchmarkOneBankSendTxPerBlock(b *testing.B) { // construct genesis state genAccs := []types.GenesisAccount{&acc} benchmarkApp := simapp.SetupWithGenesisAccounts(genAccs) - ctx := benchmarkApp.BaseApp.NewContext(false, abci.Header{}) + ctx := benchmarkApp.BaseApp.NewContext(false, tmproto.Header{}) // some value conceivably higher than the benchmarks would ever go err := benchmarkApp.BankKeeper.SetBalances(ctx, addr1, sdk.NewCoins(sdk.NewInt64Coin("foocoin", 100000000000))) @@ -44,7 +45,7 @@ func BenchmarkOneBankSendTxPerBlock(b *testing.B) { // Run this with a profiler, so its easy to distinguish what time comes from // Committing, and what time comes from Check/Deliver Tx. for i := 0; i < b.N; i++ { - benchmarkApp.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: height}}) + benchmarkApp.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: height}}) _, _, err := benchmarkApp.Check(txs[i]) if err != nil { panic("something is broken in checking transaction") @@ -67,7 +68,7 @@ func BenchmarkOneBankMultiSendTxPerBlock(b *testing.B) { // Construct genesis state genAccs := []authtypes.GenesisAccount{&acc} benchmarkApp := simapp.SetupWithGenesisAccounts(genAccs) - ctx := benchmarkApp.BaseApp.NewContext(false, abci.Header{}) + ctx := benchmarkApp.BaseApp.NewContext(false, tmproto.Header{}) // some value conceivably higher than the benchmarks would ever go err := benchmarkApp.BankKeeper.SetBalances(ctx, addr1, sdk.NewCoins(sdk.NewInt64Coin("foocoin", 100000000000))) @@ -86,7 +87,7 @@ func BenchmarkOneBankMultiSendTxPerBlock(b *testing.B) { // Run this with a profiler, so its easy to distinguish what time comes from // Committing, and what time comes from Check/Deliver Tx. for i := 0; i < b.N; i++ { - benchmarkApp.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: height}}) + benchmarkApp.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: height}}) _, _, err := benchmarkApp.Check(txs[i]) if err != nil { panic("something is broken in checking transaction") diff --git a/x/bank/handler_test.go b/x/bank/handler_test.go index ef870e4213..e16e8590a1 100644 --- a/x/bank/handler_test.go +++ b/x/bank/handler_test.go @@ -4,11 +4,10 @@ import ( "strings" "testing" - "github.com/cosmos/cosmos-sdk/testutil/testdata" - "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + "github.com/cosmos/cosmos-sdk/testutil/testdata" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" ) @@ -16,7 +15,7 @@ import ( func TestInvalidMsg(t *testing.T) { h := NewHandler(nil) - res, err := h(sdk.NewContext(nil, abci.Header{}, false, nil), testdata.NewTestMsg()) + res, err := h(sdk.NewContext(nil, tmproto.Header{}, false, nil), testdata.NewTestMsg()) require.Error(t, err) require.Nil(t, res) diff --git a/x/bank/keeper/keeper_test.go b/x/bank/keeper/keeper_test.go index 3c67b67158..8cc1b126ec 100644 --- a/x/bank/keeper/keeper_test.go +++ b/x/bank/keeper/keeper_test.go @@ -6,7 +6,7 @@ import ( "github.com/stretchr/testify/suite" abci "github.com/tendermint/tendermint/abci/types" - tmkv "github.com/tendermint/tendermint/libs/kv" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" tmtime "github.com/tendermint/tendermint/types/time" "github.com/cosmos/cosmos-sdk/baseapp" @@ -68,7 +68,7 @@ type IntegrationTestSuite struct { func (suite *IntegrationTestSuite) SetupTest() { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) app.AccountKeeper.SetParams(ctx, authtypes.DefaultParams()) app.BankKeeper.SetParams(ctx, types.DefaultParams()) @@ -97,7 +97,7 @@ func (suite *IntegrationTestSuite) TestSupply() { func (suite *IntegrationTestSuite) TestSupply_SendCoins() { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{Height: 1}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{Height: 1}) appCodec := app.AppCodec() // add module accounts to supply keeper @@ -160,7 +160,7 @@ func (suite *IntegrationTestSuite) TestSupply_SendCoins() { func (suite *IntegrationTestSuite) TestSupply_MintCoins() { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{Height: 1}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{Height: 1}) appCodec := app.AppCodec() // add module accounts to supply keeper @@ -214,7 +214,7 @@ func (suite *IntegrationTestSuite) TestSupply_MintCoins() { func (suite *IntegrationTestSuite) TestSupply_BurnCoins() { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{Height: 1}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{Height: 1}) appCodec, _ := simapp.MakeCodecs() // add module accounts to supply keeper @@ -408,7 +408,7 @@ func (suite *IntegrationTestSuite) TestSendCoins() { func (suite *IntegrationTestSuite) TestValidateBalance() { app, ctx := suite.app, suite.ctx now := tmtime.Now() - ctx = ctx.WithBlockHeader(abci.Header{Time: now}) + ctx = ctx.WithBlockHeader(tmproto.Header{Time: now}) endTime := now.Add(24 * time.Hour) addr1 := sdk.AccAddress([]byte("addr1")) @@ -534,27 +534,27 @@ func (suite *IntegrationTestSuite) TestMsgSendEvents() { event1 := sdk.Event{ Type: types.EventTypeTransfer, - Attributes: []tmkv.Pair{}, + Attributes: []abci.EventAttribute{}, } event1.Attributes = append( event1.Attributes, - tmkv.Pair{Key: []byte(types.AttributeKeyRecipient), Value: []byte(addr2.String())}, + abci.EventAttribute{Key: []byte(types.AttributeKeyRecipient), Value: []byte(addr2.String())}, ) event1.Attributes = append( event1.Attributes, - tmkv.Pair{Key: []byte(types.AttributeKeySender), Value: []byte(addr.String())}, + abci.EventAttribute{Key: []byte(types.AttributeKeySender), Value: []byte(addr.String())}, ) event1.Attributes = append( event1.Attributes, - tmkv.Pair{Key: []byte(sdk.AttributeKeyAmount), Value: []byte(newCoins.String())}, + abci.EventAttribute{Key: []byte(sdk.AttributeKeyAmount), Value: []byte(newCoins.String())}, ) event2 := sdk.Event{ Type: sdk.EventTypeMessage, - Attributes: []tmkv.Pair{}, + Attributes: []abci.EventAttribute{}, } event2.Attributes = append( event2.Attributes, - tmkv.Pair{Key: []byte(types.AttributeKeySender), Value: []byte(addr.String())}, + abci.EventAttribute{Key: []byte(types.AttributeKeySender), Value: []byte(addr.String())}, ) suite.Require().Equal(abci.Event(event1), events[0]) @@ -612,11 +612,11 @@ func (suite *IntegrationTestSuite) TestMsgMultiSendEvents() { event1 := sdk.Event{ Type: sdk.EventTypeMessage, - Attributes: []tmkv.Pair{}, + Attributes: []abci.EventAttribute{}, } event1.Attributes = append( event1.Attributes, - tmkv.Pair{Key: []byte(types.AttributeKeySender), Value: []byte(addr.String())}, + abci.EventAttribute{Key: []byte(types.AttributeKeySender), Value: []byte(addr.String())}, ) suite.Require().Equal(abci.Event(event1), events[0]) @@ -634,34 +634,34 @@ func (suite *IntegrationTestSuite) TestMsgMultiSendEvents() { event2 := sdk.Event{ Type: sdk.EventTypeMessage, - Attributes: []tmkv.Pair{}, + Attributes: []abci.EventAttribute{}, } event2.Attributes = append( event2.Attributes, - tmkv.Pair{Key: []byte(types.AttributeKeySender), Value: []byte(addr2.String())}, + abci.EventAttribute{Key: []byte(types.AttributeKeySender), Value: []byte(addr2.String())}, ) event3 := sdk.Event{ Type: types.EventTypeTransfer, - Attributes: []tmkv.Pair{}, + Attributes: []abci.EventAttribute{}, } event3.Attributes = append( event3.Attributes, - tmkv.Pair{Key: []byte(types.AttributeKeyRecipient), Value: []byte(addr3.String())}, + abci.EventAttribute{Key: []byte(types.AttributeKeyRecipient), Value: []byte(addr3.String())}, ) event3.Attributes = append( event3.Attributes, - tmkv.Pair{Key: []byte(sdk.AttributeKeyAmount), Value: []byte(newCoins.String())}) + abci.EventAttribute{Key: []byte(sdk.AttributeKeyAmount), Value: []byte(newCoins.String())}) event4 := sdk.Event{ Type: types.EventTypeTransfer, - Attributes: []tmkv.Pair{}, + Attributes: []abci.EventAttribute{}, } event4.Attributes = append( event4.Attributes, - tmkv.Pair{Key: []byte(types.AttributeKeyRecipient), Value: []byte(addr4.String())}, + abci.EventAttribute{Key: []byte(types.AttributeKeyRecipient), Value: []byte(addr4.String())}, ) event4.Attributes = append( event4.Attributes, - tmkv.Pair{Key: []byte(sdk.AttributeKeyAmount), Value: []byte(newCoins2.String())}, + abci.EventAttribute{Key: []byte(sdk.AttributeKeyAmount), Value: []byte(newCoins2.String())}, ) suite.Require().Equal(abci.Event(event1), events[1]) @@ -673,7 +673,7 @@ func (suite *IntegrationTestSuite) TestMsgMultiSendEvents() { func (suite *IntegrationTestSuite) TestSpendableCoins() { app, ctx := suite.app, suite.ctx now := tmtime.Now() - ctx = ctx.WithBlockHeader(abci.Header{Time: now}) + ctx = ctx.WithBlockHeader(tmproto.Header{Time: now}) endTime := now.Add(24 * time.Hour) origCoins := sdk.NewCoins(sdk.NewInt64Coin("stake", 100)) @@ -704,7 +704,7 @@ func (suite *IntegrationTestSuite) TestSpendableCoins() { func (suite *IntegrationTestSuite) TestVestingAccountSend() { app, ctx := suite.app, suite.ctx now := tmtime.Now() - ctx = ctx.WithBlockHeader(abci.Header{Time: now}) + ctx = ctx.WithBlockHeader(tmproto.Header{Time: now}) endTime := now.Add(24 * time.Hour) origCoins := sdk.NewCoins(sdk.NewInt64Coin("stake", 100)) @@ -734,7 +734,7 @@ func (suite *IntegrationTestSuite) TestVestingAccountSend() { func (suite *IntegrationTestSuite) TestPeriodicVestingAccountSend() { app, ctx := suite.app, suite.ctx now := tmtime.Now() - ctx = ctx.WithBlockHeader(abci.Header{Time: now}) + ctx = ctx.WithBlockHeader(tmproto.Header{Time: now}) origCoins := sdk.NewCoins(sdk.NewInt64Coin("stake", 100)) sendCoins := sdk.NewCoins(sdk.NewInt64Coin("stake", 50)) @@ -767,7 +767,7 @@ func (suite *IntegrationTestSuite) TestPeriodicVestingAccountSend() { func (suite *IntegrationTestSuite) TestVestingAccountReceive() { app, ctx := suite.app, suite.ctx now := tmtime.Now() - ctx = ctx.WithBlockHeader(abci.Header{Time: now}) + ctx = ctx.WithBlockHeader(tmproto.Header{Time: now}) endTime := now.Add(24 * time.Hour) origCoins := sdk.NewCoins(sdk.NewInt64Coin("stake", 100)) @@ -801,7 +801,7 @@ func (suite *IntegrationTestSuite) TestVestingAccountReceive() { func (suite *IntegrationTestSuite) TestPeriodicVestingAccountReceive() { app, ctx := suite.app, suite.ctx now := tmtime.Now() - ctx = ctx.WithBlockHeader(abci.Header{Time: now}) + ctx = ctx.WithBlockHeader(tmproto.Header{Time: now}) origCoins := sdk.NewCoins(sdk.NewInt64Coin("stake", 100)) sendCoins := sdk.NewCoins(sdk.NewInt64Coin("stake", 50)) @@ -840,7 +840,7 @@ func (suite *IntegrationTestSuite) TestPeriodicVestingAccountReceive() { func (suite *IntegrationTestSuite) TestDelegateCoins() { app, ctx := suite.app, suite.ctx now := tmtime.Now() - ctx = ctx.WithBlockHeader(abci.Header{Time: now}) + ctx = ctx.WithBlockHeader(tmproto.Header{Time: now}) endTime := now.Add(24 * time.Hour) origCoins := sdk.NewCoins(sdk.NewInt64Coin("stake", 100)) @@ -900,7 +900,7 @@ func (suite *IntegrationTestSuite) TestDelegateCoins_Invalid() { func (suite *IntegrationTestSuite) TestUndelegateCoins() { app, ctx := suite.app, suite.ctx now := tmtime.Now() - ctx = ctx.WithBlockHeader(abci.Header{Time: now}) + ctx = ctx.WithBlockHeader(tmproto.Header{Time: now}) endTime := now.Add(24 * time.Hour) origCoins := sdk.NewCoins(sdk.NewInt64Coin("stake", 100)) diff --git a/x/bank/simulation/operations_test.go b/x/bank/simulation/operations_test.go index 8e4f8b298e..3f42feaf0f 100644 --- a/x/bank/simulation/operations_test.go +++ b/x/bank/simulation/operations_test.go @@ -6,6 +6,7 @@ import ( "github.com/stretchr/testify/suite" abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" simappparams "github.com/cosmos/cosmos-sdk/simapp/params" @@ -26,7 +27,7 @@ func (suite *SimTestSuite) SetupTest() { checkTx := false app := simapp.Setup(checkTx) suite.app = app - suite.ctx = app.BaseApp.NewContext(checkTx, abci.Header{}) + suite.ctx = app.BaseApp.NewContext(checkTx, tmproto.Header{}) } // TestWeightedOperations tests the weights of the operations. @@ -70,7 +71,7 @@ func (suite *SimTestSuite) TestSimulateMsgSend() { accounts := suite.getTestingAccounts(r, 3) // begin a new block - suite.app.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: suite.app.LastBlockHeight() + 1, AppHash: suite.app.LastCommitID().Hash}}) + suite.app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: suite.app.LastBlockHeight() + 1, AppHash: suite.app.LastCommitID().Hash}}) // execute operation op := simulation.SimulateMsgSend(suite.app.AccountKeeper, suite.app.BankKeeper) @@ -98,7 +99,7 @@ func (suite *SimTestSuite) TestSimulateMsgMultiSend() { accounts := suite.getTestingAccounts(r, 3) // begin a new block - suite.app.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: suite.app.LastBlockHeight() + 1, AppHash: suite.app.LastCommitID().Hash}}) + suite.app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: suite.app.LastBlockHeight() + 1, AppHash: suite.app.LastCommitID().Hash}}) // execute operation op := simulation.SimulateMsgMultiSend(suite.app.AccountKeeper, suite.app.BankKeeper) diff --git a/x/capability/keeper/keeper_test.go b/x/capability/keeper/keeper_test.go index a09c704b7f..fdd7953410 100644 --- a/x/capability/keeper/keeper_test.go +++ b/x/capability/keeper/keeper_test.go @@ -5,7 +5,7 @@ import ( "testing" "github.com/stretchr/testify/suite" - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" @@ -32,7 +32,7 @@ func (suite *KeeperTestSuite) SetupTest() { keeper := keeper.NewKeeper(cdc, app.GetKey(types.StoreKey), app.GetMemKey(types.MemStoreKey)) suite.app = app - suite.ctx = app.BaseApp.NewContext(checkTx, abci.Header{Height: 1}) + suite.ctx = app.BaseApp.NewContext(checkTx, tmproto.Header{Height: 1}) suite.keeper = keeper } diff --git a/x/capability/spec/README.md b/x/capability/spec/README.md index b5a2db2f8a..ec612ba976 100644 --- a/x/capability/spec/README.md +++ b/x/capability/spec/README.md @@ -63,7 +63,7 @@ func NewApp(...) *App { // Initialize and seal the capability keeper so all persistent capabilities // are loaded in-memory and prevent any further modules from creating scoped // sub-keepers. - ctx := app.BaseApp.NewContext(true, abci.Header{}) + ctx := app.BaseApp.NewContext(true, tmproto.Header{}) app.capabilityKeeper.InitializeAndSeal(ctx) return app diff --git a/x/crisis/handler_test.go b/x/crisis/handler_test.go index 9697884683..c533b01af6 100644 --- a/x/crisis/handler_test.go +++ b/x/crisis/handler_test.go @@ -4,14 +4,13 @@ import ( "fmt" "testing" - "github.com/cosmos/cosmos-sdk/testutil/testdata" - "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/libs/log" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" dbm "github.com/tendermint/tm-db" "github.com/cosmos/cosmos-sdk/simapp" + "github.com/cosmos/cosmos-sdk/testutil/testdata" sdk "github.com/cosmos/cosmos-sdk/types" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" "github.com/cosmos/cosmos-sdk/x/crisis" @@ -29,7 +28,7 @@ var ( func createTestApp() (*simapp.SimApp, sdk.Context, []sdk.AccAddress) { db := dbm.NewMemDB() app := simapp.NewSimApp(log.NewNopLogger(), db, nil, true, map[int64]bool{}, simapp.DefaultNodeHome, 1, simapp.MakeEncodingConfig()) - ctx := app.NewContext(true, abci.Header{}) + ctx := app.NewContext(true, tmproto.Header{}) constantFee := sdk.NewInt64Coin(sdk.DefaultBondDenom, 10) app.CrisisKeeper.SetConstantFee(ctx, constantFee) diff --git a/x/crisis/keeper/keeper_test.go b/x/crisis/keeper/keeper_test.go index c3837d2ca6..563c0e4b10 100644 --- a/x/crisis/keeper/keeper_test.go +++ b/x/crisis/keeper/keeper_test.go @@ -5,6 +5,7 @@ import ( "github.com/stretchr/testify/require" abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" @@ -13,14 +14,14 @@ import ( func TestLogger(t *testing.T) { app := simapp.Setup(false) - ctx := app.NewContext(true, abci.Header{}) + ctx := app.NewContext(true, tmproto.Header{}) require.Equal(t, ctx.Logger(), app.CrisisKeeper.Logger(ctx)) } func TestInvariants(t *testing.T) { app := simapp.Setup(false) app.Commit() - app.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: app.LastBlockHeight() + 1}}) + app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: app.LastBlockHeight() + 1}}) require.Equal(t, app.CrisisKeeper.InvCheckPeriod(), uint(5)) @@ -33,9 +34,9 @@ func TestInvariants(t *testing.T) { func TestAssertInvariants(t *testing.T) { app := simapp.Setup(false) app.Commit() - app.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: app.LastBlockHeight() + 1}}) + app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: app.LastBlockHeight() + 1}}) - ctx := app.NewContext(true, abci.Header{}) + ctx := app.NewContext(true, tmproto.Header{}) app.CrisisKeeper.RegisterRoute("testModule", "testRoute1", func(sdk.Context) (string, bool) { return "", false }) require.NotPanics(t, func() { app.CrisisKeeper.AssertInvariants(ctx) }) diff --git a/x/distribution/keeper/allocation_test.go b/x/distribution/keeper/allocation_test.go index 726498c60c..617cf1d4e5 100644 --- a/x/distribution/keeper/allocation_test.go +++ b/x/distribution/keeper/allocation_test.go @@ -4,8 +4,8 @@ import ( "testing" "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" @@ -16,7 +16,7 @@ import ( func TestAllocateTokensToValidatorWithCommission(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) addrs := simapp.AddTestAddrs(app, ctx, 3, sdk.NewInt(1234)) valAddrs := simapp.ConvertAddrsToValAddrs(addrs) @@ -54,7 +54,7 @@ func TestAllocateTokensToValidatorWithCommission(t *testing.T) { func TestAllocateTokensToManyValidators(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) sh := staking.NewHandler(app.StakingKeeper) addrs := simapp.AddTestAddrs(app, ctx, 2, sdk.NewInt(1234)) @@ -134,7 +134,7 @@ func TestAllocateTokensToManyValidators(t *testing.T) { func TestAllocateTokensTruncation(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) addrs := simapp.AddTestAddrs(app, ctx, 3, sdk.NewInt(1234)) valAddrs := simapp.ConvertAddrsToValAddrs(addrs) diff --git a/x/distribution/keeper/delegation_test.go b/x/distribution/keeper/delegation_test.go index 8b66b58bb9..44135ce10f 100644 --- a/x/distribution/keeper/delegation_test.go +++ b/x/distribution/keeper/delegation_test.go @@ -3,9 +3,8 @@ package keeper_test import ( "testing" - abci "github.com/tendermint/tendermint/abci/types" - "github.com/stretchr/testify/require" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" @@ -15,7 +14,7 @@ import ( func TestCalculateRewardsBasic(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) sh := staking.NewHandler(app.StakingKeeper) @@ -77,7 +76,7 @@ func TestCalculateRewardsBasic(t *testing.T) { func TestCalculateRewardsAfterSlash(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) addr := simapp.AddTestAddrs(app, ctx, 2, sdk.NewInt(100000000)) valAddrs := simapp.ConvertAddrsToValAddrs(addr) @@ -147,7 +146,7 @@ func TestCalculateRewardsAfterSlash(t *testing.T) { func TestCalculateRewardsAfterManySlashes(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) sh := staking.NewHandler(app.StakingKeeper) addr := simapp.AddTestAddrs(app, ctx, 2, sdk.NewInt(100000000)) @@ -228,7 +227,7 @@ func TestCalculateRewardsAfterManySlashes(t *testing.T) { func TestCalculateRewardsMultiDelegator(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) sh := staking.NewHandler(app.StakingKeeper) @@ -303,7 +302,7 @@ func TestWithdrawDelegationRewardsBasic(t *testing.T) { balancePower := int64(1000) balanceTokens := sdk.TokensFromConsensusPower(balancePower) app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) addr := simapp.AddTestAddrs(app, ctx, 1, sdk.NewInt(1000000000)) valAddrs := simapp.ConvertAddrsToValAddrs(addr) @@ -382,7 +381,7 @@ func TestWithdrawDelegationRewardsBasic(t *testing.T) { func TestCalculateRewardsAfterManySlashesInSameBlock(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) addr := simapp.AddTestAddrs(app, ctx, 1, sdk.NewInt(1000000000)) valAddrs := simapp.ConvertAddrsToValAddrs(addr) @@ -457,7 +456,7 @@ func TestCalculateRewardsAfterManySlashesInSameBlock(t *testing.T) { func TestCalculateRewardsMultiDelegatorMultiSlash(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) sh := staking.NewHandler(app.StakingKeeper) addr := simapp.AddTestAddrs(app, ctx, 2, sdk.NewInt(1000000000)) @@ -543,7 +542,7 @@ func TestCalculateRewardsMultiDelegatorMultiSlash(t *testing.T) { func TestCalculateRewardsMultiDelegatorMultWithdraw(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) sh := staking.NewHandler(app.StakingKeeper) diff --git a/x/distribution/keeper/grpc_query_test.go b/x/distribution/keeper/grpc_query_test.go index f5b48c7750..f6d4406f1a 100644 --- a/x/distribution/keeper/grpc_query_test.go +++ b/x/distribution/keeper/grpc_query_test.go @@ -6,7 +6,7 @@ import ( "testing" "github.com/stretchr/testify/suite" - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/simapp" @@ -29,7 +29,7 @@ type KeeperTestSuite struct { func (suite *KeeperTestSuite) SetupTest() { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) queryHelper := baseapp.NewQueryServerTestHelper(ctx, app.InterfaceRegistry()) types.RegisterQueryServer(queryHelper, app.DistrKeeper) diff --git a/x/distribution/keeper/keeper_test.go b/x/distribution/keeper/keeper_test.go index 4829bd33be..a8205dfdc1 100644 --- a/x/distribution/keeper/keeper_test.go +++ b/x/distribution/keeper/keeper_test.go @@ -5,8 +5,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" @@ -15,7 +14,7 @@ import ( func TestSetWithdrawAddr(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) addr := simapp.AddTestAddrs(app, ctx, 2, sdk.NewInt(1000000000)) @@ -37,7 +36,7 @@ func TestSetWithdrawAddr(t *testing.T) { func TestWithdrawValidatorCommission(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) valCommission := sdk.DecCoins{ sdk.NewDecCoinFromDec("mytoken", sdk.NewDec(5).Quo(sdk.NewDec(4))), @@ -91,7 +90,7 @@ func TestWithdrawValidatorCommission(t *testing.T) { func TestGetTotalRewards(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) valCommission := sdk.DecCoins{ sdk.NewDecCoinFromDec("mytoken", sdk.NewDec(5).Quo(sdk.NewDec(4))), @@ -112,7 +111,7 @@ func TestGetTotalRewards(t *testing.T) { func TestFundCommunityPool(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) addr := simapp.AddTestAddrs(app, ctx, 2, sdk.NewInt(1000000000)) diff --git a/x/distribution/keeper/querier_test.go b/x/distribution/keeper/querier_test.go index 154c61b561..39cddc2a14 100644 --- a/x/distribution/keeper/querier_test.go +++ b/x/distribution/keeper/querier_test.go @@ -6,6 +6,7 @@ import ( "github.com/stretchr/testify/require" abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/simapp" @@ -116,7 +117,7 @@ func TestQueries(t *testing.T) { legacyQuerierCdc := codec.NewAminoCodec(cdc) app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) addr := simapp.AddTestAddrs(app, ctx, 1, sdk.NewInt(1000000000)) valAddrs := simapp.ConvertAddrsToValAddrs(addr) diff --git a/x/distribution/module_test.go b/x/distribution/module_test.go index f9c1cb2ce4..113622d208 100644 --- a/x/distribution/module_test.go +++ b/x/distribution/module_test.go @@ -5,6 +5,7 @@ import ( "github.com/stretchr/testify/require" abcitypes "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" @@ -13,7 +14,7 @@ import ( func TestItCreatesModuleAccountOnInitBlock(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abcitypes.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) app.InitChain( abcitypes.RequestInitChain{ diff --git a/x/distribution/proposal_handler_test.go b/x/distribution/proposal_handler_test.go index d8b21928b8..34e99fb27b 100644 --- a/x/distribution/proposal_handler_test.go +++ b/x/distribution/proposal_handler_test.go @@ -4,8 +4,8 @@ import ( "testing" "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/crypto/ed25519" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" @@ -26,7 +26,7 @@ func testProposal(recipient sdk.AccAddress, amount sdk.Coins) *types.CommunityPo func TestProposalHandlerPassed(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) recipient := delAddr1 @@ -56,7 +56,7 @@ func TestProposalHandlerPassed(t *testing.T) { func TestProposalHandlerFailed(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) recipient := delAddr1 diff --git a/x/distribution/simulation/operations_test.go b/x/distribution/simulation/operations_test.go index 397eebecf2..b1c1dade01 100644 --- a/x/distribution/simulation/operations_test.go +++ b/x/distribution/simulation/operations_test.go @@ -5,8 +5,8 @@ import ( "testing" "github.com/stretchr/testify/suite" - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" simappparams "github.com/cosmos/cosmos-sdk/simapp/params" @@ -64,7 +64,7 @@ func (suite *SimTestSuite) TestSimulateMsgSetWithdrawAddress() { accounts := suite.getTestingAccounts(r, 3) // begin a new block - suite.app.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: suite.app.LastBlockHeight() + 1, AppHash: suite.app.LastCommitID().Hash}}) + suite.app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: suite.app.LastBlockHeight() + 1, AppHash: suite.app.LastCommitID().Hash}}) // execute operation op := simulation.SimulateMsgSetWithdrawAddress(suite.app.AccountKeeper, suite.app.BankKeeper, suite.app.DistrKeeper) @@ -105,7 +105,7 @@ func (suite *SimTestSuite) TestSimulateMsgWithdrawDelegatorReward() { suite.setupValidatorRewards(validator0.OperatorAddress) // begin a new block - suite.app.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: suite.app.LastBlockHeight() + 1, AppHash: suite.app.LastCommitID().Hash}}) + suite.app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: suite.app.LastBlockHeight() + 1, AppHash: suite.app.LastCommitID().Hash}}) // execute operation op := simulation.SimulateMsgWithdrawDelegatorReward(suite.app.AccountKeeper, suite.app.BankKeeper, suite.app.DistrKeeper, suite.app.StakingKeeper) @@ -163,7 +163,7 @@ func (suite *SimTestSuite) testSimulateMsgWithdrawValidatorCommission(tokenName suite.app.DistrKeeper.SetValidatorAccumulatedCommission(suite.ctx, validator0.OperatorAddress, types.ValidatorAccumulatedCommission{Commission: valCommission}) // begin a new block - suite.app.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: suite.app.LastBlockHeight() + 1, AppHash: suite.app.LastCommitID().Hash}}) + suite.app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: suite.app.LastBlockHeight() + 1, AppHash: suite.app.LastCommitID().Hash}}) // execute operation op := simulation.SimulateMsgWithdrawValidatorCommission(suite.app.AccountKeeper, suite.app.BankKeeper, suite.app.DistrKeeper, suite.app.StakingKeeper) @@ -189,7 +189,7 @@ func (suite *SimTestSuite) TestSimulateMsgFundCommunityPool() { accounts := suite.getTestingAccounts(r, 3) // begin a new block - suite.app.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: suite.app.LastBlockHeight() + 1, AppHash: suite.app.LastCommitID().Hash}}) + suite.app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: suite.app.LastBlockHeight() + 1, AppHash: suite.app.LastCommitID().Hash}}) // execute operation op := simulation.SimulateMsgFundCommunityPool(suite.app.AccountKeeper, suite.app.BankKeeper, suite.app.DistrKeeper, suite.app.StakingKeeper) @@ -218,7 +218,7 @@ func (suite *SimTestSuite) SetupTest() { checkTx := false app := simapp.Setup(checkTx) suite.app = app - suite.ctx = app.BaseApp.NewContext(checkTx, abci.Header{}) + suite.ctx = app.BaseApp.NewContext(checkTx, tmproto.Header{}) } func (suite *SimTestSuite) getTestingAccounts(r *rand.Rand, n int) []simtypes.Account { diff --git a/x/distribution/simulation/proposals_test.go b/x/distribution/simulation/proposals_test.go index f49293fe8d..6d5895ea8d 100644 --- a/x/distribution/simulation/proposals_test.go +++ b/x/distribution/simulation/proposals_test.go @@ -5,7 +5,7 @@ import ( "testing" "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" simappparams "github.com/cosmos/cosmos-sdk/simapp/params" @@ -16,7 +16,7 @@ import ( func TestProposalContents(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) // initialize parameters s := rand.NewSource(1) diff --git a/x/evidence/genesis_test.go b/x/evidence/genesis_test.go index 28da9c49bc..dbd69dca34 100644 --- a/x/evidence/genesis_test.go +++ b/x/evidence/genesis_test.go @@ -5,8 +5,8 @@ import ( "testing" "github.com/stretchr/testify/suite" - abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/crypto/ed25519" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/tendermint/tendermint/types/time" "github.com/cosmos/cosmos-sdk/simapp" @@ -28,7 +28,7 @@ func (suite *GenesisTestSuite) SetupTest() { checkTx := false app := simapp.Setup(checkTx) - suite.ctx = app.BaseApp.NewContext(checkTx, abci.Header{Height: 1}) + suite.ctx = app.BaseApp.NewContext(checkTx, tmproto.Header{Height: 1}) suite.keeper = app.EvidenceKeeper } diff --git a/x/evidence/handler_test.go b/x/evidence/handler_test.go index 1318b8027b..1d5388b7c8 100644 --- a/x/evidence/handler_test.go +++ b/x/evidence/handler_test.go @@ -7,8 +7,8 @@ import ( "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" - abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/crypto/ed25519" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" @@ -104,7 +104,7 @@ func (suite *HandlerTestSuite) TestMsgSubmitEvidence() { } for i, tc := range testCases { - ctx := suite.app.BaseApp.NewContext(false, abci.Header{Height: suite.app.LastBlockHeight() + 1}) + ctx := suite.app.BaseApp.NewContext(false, tmproto.Header{Height: suite.app.LastBlockHeight() + 1}) res, err := suite.handler(ctx, tc.msg) if tc.expectErr { diff --git a/x/evidence/keeper/keeper_test.go b/x/evidence/keeper/keeper_test.go index b52334b45e..849676e381 100644 --- a/x/evidence/keeper/keeper_test.go +++ b/x/evidence/keeper/keeper_test.go @@ -6,9 +6,13 @@ import ( "testing" "time" - "github.com/cosmos/cosmos-sdk/codec" + "github.com/stretchr/testify/suite" + "github.com/tendermint/tendermint/crypto" + "github.com/tendermint/tendermint/crypto/ed25519" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/baseapp" + "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" @@ -16,11 +20,6 @@ import ( "github.com/cosmos/cosmos-sdk/x/evidence/exported" "github.com/cosmos/cosmos-sdk/x/evidence/keeper" "github.com/cosmos/cosmos-sdk/x/evidence/types" - - "github.com/stretchr/testify/suite" - abci "github.com/tendermint/tendermint/abci/types" - "github.com/tendermint/tendermint/crypto" - "github.com/tendermint/tendermint/crypto/ed25519" ) var ( @@ -46,8 +45,8 @@ func newPubKey(pk string) (res crypto.PubKey) { panic(err) } - var pubkey ed25519.PubKeyEd25519 - copy(pubkey[:], pkBytes) + pubkey := make(ed25519.PubKey, ed25519.PubKeySize) + copy(pubkey, pkBytes) return pubkey } @@ -95,7 +94,7 @@ func (suite *KeeperTestSuite) SetupTest() { app.EvidenceKeeper = *evidenceKeeper - suite.ctx = app.BaseApp.NewContext(checkTx, abci.Header{Height: 1}) + suite.ctx = app.BaseApp.NewContext(checkTx, tmproto.Header{Height: 1}) suite.querier = keeper.NewQuerier(*evidenceKeeper, legacyQuerierCdc) suite.app = app diff --git a/x/genutil/gentx_test.go b/x/genutil/gentx_test.go index 42b9e7c3eb..2f690c0ee9 100644 --- a/x/genutil/gentx_test.go +++ b/x/genutil/gentx_test.go @@ -5,15 +5,14 @@ import ( "fmt" "testing" + "github.com/stretchr/testify/suite" + "github.com/tendermint/tendermint/crypto/secp256k1" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + "github.com/cosmos/cosmos-sdk/simapp" "github.com/cosmos/cosmos-sdk/simapp/helpers" simappparams "github.com/cosmos/cosmos-sdk/simapp/params" sdk "github.com/cosmos/cosmos-sdk/types" - - "github.com/stretchr/testify/suite" - abci "github.com/tendermint/tendermint/abci/types" - "github.com/tendermint/tendermint/crypto/secp256k1" - banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" "github.com/cosmos/cosmos-sdk/x/genutil" "github.com/cosmos/cosmos-sdk/x/genutil/types" @@ -48,7 +47,7 @@ type GenTxTestSuite struct { func (suite *GenTxTestSuite) SetupTest() { checkTx := false app := simapp.Setup(checkTx) - suite.ctx = app.BaseApp.NewContext(checkTx, abci.Header{}) + suite.ctx = app.BaseApp.NewContext(checkTx, tmproto.Header{}) suite.app = app suite.encodingConfig = simapp.MakeEncodingConfig() diff --git a/x/genutil/utils_test.go b/x/genutil/utils_test.go index bf8cf9f5d0..5327664ec1 100644 --- a/x/genutil/utils_test.go +++ b/x/genutil/utils_test.go @@ -17,5 +17,5 @@ func TestExportGenesisFileWithTime(t *testing.T) { t.Cleanup(cleanup) fname := filepath.Join(dir, "genesis.json") - require.NoError(t, ExportGenesisFileWithTime(fname, "test", nil, json.RawMessage(""), time.Now())) + require.NoError(t, ExportGenesisFileWithTime(fname, "test", nil, json.RawMessage(`{"account_owner": "Bob"}`), time.Now())) } diff --git a/x/gov/abci_test.go b/x/gov/abci_test.go index 5d8704e85e..bfe5ceac54 100644 --- a/x/gov/abci_test.go +++ b/x/gov/abci_test.go @@ -6,6 +6,7 @@ import ( "github.com/stretchr/testify/require" abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" @@ -16,10 +17,10 @@ import ( func TestTickExpiredDepositPeriod(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) addrs := simapp.AddTestAddrs(app, ctx, 10, valTokens) - header := abci.Header{Height: app.LastBlockHeight() + 1} + header := tmproto.Header{Height: app.LastBlockHeight() + 1} app.BeginBlock(abci.RequestBeginBlock{Header: header}) govHandler := gov.NewHandler(app.GovKeeper) @@ -68,10 +69,10 @@ func TestTickExpiredDepositPeriod(t *testing.T) { func TestTickMultipleExpiredDepositPeriod(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) addrs := simapp.AddTestAddrs(app, ctx, 10, valTokens) - header := abci.Header{Height: app.LastBlockHeight() + 1} + header := tmproto.Header{Height: app.LastBlockHeight() + 1} app.BeginBlock(abci.RequestBeginBlock{Header: header}) govHandler := gov.NewHandler(app.GovKeeper) @@ -145,10 +146,10 @@ func TestTickMultipleExpiredDepositPeriod(t *testing.T) { func TestTickPassedDepositPeriod(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) addrs := simapp.AddTestAddrs(app, ctx, 10, valTokens) - header := abci.Header{Height: app.LastBlockHeight() + 1} + header := tmproto.Header{Height: app.LastBlockHeight() + 1} app.BeginBlock(abci.RequestBeginBlock{Header: header}) govHandler := gov.NewHandler(app.GovKeeper) @@ -198,12 +199,12 @@ func TestTickPassedDepositPeriod(t *testing.T) { func TestTickPassedVotingPeriod(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) addrs := simapp.AddTestAddrs(app, ctx, 10, valTokens) SortAddresses(addrs) - header := abci.Header{Height: app.LastBlockHeight() + 1} + header := tmproto.Header{Height: app.LastBlockHeight() + 1} app.BeginBlock(abci.RequestBeginBlock{Header: header}) govHandler := gov.NewHandler(app.GovKeeper) @@ -262,7 +263,7 @@ func TestTickPassedVotingPeriod(t *testing.T) { func TestProposalPassedEndblocker(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) addrs := simapp.AddTestAddrs(app, ctx, 10, valTokens) SortAddresses(addrs) @@ -270,7 +271,7 @@ func TestProposalPassedEndblocker(t *testing.T) { handler := gov.NewHandler(app.GovKeeper) stakingHandler := staking.NewHandler(app.StakingKeeper) - header := abci.Header{Height: app.LastBlockHeight() + 1} + header := tmproto.Header{Height: app.LastBlockHeight() + 1} app.BeginBlock(abci.RequestBeginBlock{Header: header}) valAddr := sdk.ValAddress(addrs[0]) @@ -315,7 +316,7 @@ func TestProposalPassedEndblocker(t *testing.T) { func TestEndBlockerProposalHandlerFailed(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) addrs := simapp.AddTestAddrs(app, ctx, 1, valTokens) SortAddresses(addrs) @@ -323,7 +324,7 @@ func TestEndBlockerProposalHandlerFailed(t *testing.T) { handler := gov.NewHandler(app.GovKeeper) stakingHandler := staking.NewHandler(app.StakingKeeper) - header := abci.Header{Height: app.LastBlockHeight() + 1} + header := tmproto.Header{Height: app.LastBlockHeight() + 1} app.BeginBlock(abci.RequestBeginBlock{Header: header}) valAddr := sdk.ValAddress(addrs[0]) diff --git a/x/gov/client/utils/query_test.go b/x/gov/client/utils/query_test.go index 8985b4d91d..2722515389 100644 --- a/x/gov/client/utils/query_test.go +++ b/x/gov/client/utils/query_test.go @@ -20,8 +20,16 @@ type TxSearchMock struct { txs []tmtypes.Tx } -func (mock TxSearchMock) TxSearch(query string, prove bool, page, perPage int, orderBy string) (*ctypes.ResultTxSearch, error) { - start, end := client.Paginate(len(mock.txs), page, perPage, 100) +func (mock TxSearchMock) TxSearch(query string, prove bool, page, perPage *int, orderBy string) (*ctypes.ResultTxSearch, error) { + if page == nil { + *page = 0 + } + + if perPage == nil { + *perPage = 0 + } + + start, end := client.Paginate(len(mock.txs), *page, *perPage, 100) if start < 0 || end < 0 { // nil result with nil error crashes utils.QueryTxsByEvents return &ctypes.ResultTxSearch{}, nil diff --git a/x/gov/genesis_test.go b/x/gov/genesis_test.go index d459c0391f..ca1655ecba 100644 --- a/x/gov/genesis_test.go +++ b/x/gov/genesis_test.go @@ -7,6 +7,7 @@ import ( "github.com/stretchr/testify/require" abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/libs/log" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" dbm "github.com/tendermint/tm-db" "github.com/cosmos/cosmos-sdk/simapp" @@ -19,15 +20,15 @@ import ( func TestImportExportQueues(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) addrs := simapp.AddTestAddrs(app, ctx, 2, valTokens) SortAddresses(addrs) - header := abci.Header{Height: app.LastBlockHeight() + 1} + header := tmproto.Header{Height: app.LastBlockHeight() + 1} app.BeginBlock(abci.RequestBeginBlock{Header: header}) - ctx = app.BaseApp.NewContext(false, abci.Header{}) + ctx = app.BaseApp.NewContext(false, tmproto.Header{}) // Create two proposals, put the second into the voting period proposal := TestProposal @@ -78,12 +79,12 @@ func TestImportExportQueues(t *testing.T) { ) app2.Commit() - app2.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: app2.LastBlockHeight() + 1}}) + app2.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: app2.LastBlockHeight() + 1}}) - header = abci.Header{Height: app2.LastBlockHeight() + 1} + header = tmproto.Header{Height: app2.LastBlockHeight() + 1} app2.BeginBlock(abci.RequestBeginBlock{Header: header}) - ctx2 := app2.BaseApp.NewContext(false, abci.Header{}) + ctx2 := app2.BaseApp.NewContext(false, tmproto.Header{}) // Jump the time forward past the DepositPeriod and VotingPeriod ctx2 = ctx2.WithBlockTime(ctx2.BlockHeader().Time.Add(app2.GovKeeper.GetDepositParams(ctx2).MaxDepositPeriod).Add(app2.GovKeeper.GetVotingParams(ctx2).VotingPeriod)) @@ -112,12 +113,12 @@ func TestImportExportQueues(t *testing.T) { func TestEqualProposals(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) addrs := simapp.AddTestAddrs(app, ctx, 2, valTokens) SortAddresses(addrs) - header := abci.Header{Height: app.LastBlockHeight() + 1} + header := tmproto.Header{Height: app.LastBlockHeight() + 1} app.BeginBlock(abci.RequestBeginBlock{Header: header}) // Submit two proposals diff --git a/x/gov/handler_test.go b/x/gov/handler_test.go index 57dde01958..a43b6890e5 100644 --- a/x/gov/handler_test.go +++ b/x/gov/handler_test.go @@ -5,9 +5,9 @@ import ( "testing" "github.com/cosmos/cosmos-sdk/testutil/testdata" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/gov" @@ -18,7 +18,7 @@ func TestInvalidMsg(t *testing.T) { k := keeper.Keeper{} h := gov.NewHandler(k) - res, err := h(sdk.NewContext(nil, abci.Header{}, false, nil), testdata.NewTestMsg()) + res, err := h(sdk.NewContext(nil, tmproto.Header{}, false, nil), testdata.NewTestMsg()) require.Error(t, err) require.Nil(t, res) require.True(t, strings.Contains(err.Error(), "unrecognized gov message type")) diff --git a/x/gov/keeper/deposit_test.go b/x/gov/keeper/deposit_test.go index 9b3935ef2e..b9a231160e 100644 --- a/x/gov/keeper/deposit_test.go +++ b/x/gov/keeper/deposit_test.go @@ -5,7 +5,7 @@ import ( "time" "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" @@ -13,7 +13,7 @@ import ( func TestDeposits(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) TestAddrs := simapp.AddTestAddrsIncremental(app, ctx, 2, sdk.NewInt(10000000)) diff --git a/x/gov/keeper/keeper_test.go b/x/gov/keeper/keeper_test.go index 0a284e6537..105a9d0028 100644 --- a/x/gov/keeper/keeper_test.go +++ b/x/gov/keeper/keeper_test.go @@ -5,7 +5,7 @@ import ( "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/simapp" @@ -24,7 +24,7 @@ type KeeperTestSuite struct { func (suite *KeeperTestSuite) SetupTest() { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) queryHelper := baseapp.NewQueryServerTestHelper(ctx, app.InterfaceRegistry()) types.RegisterQueryServer(queryHelper, app.GovKeeper) @@ -38,7 +38,7 @@ func (suite *KeeperTestSuite) SetupTest() { func TestIncrementProposalNumber(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) tp := TestProposal _, err := app.GovKeeper.SubmitProposal(ctx, tp) @@ -59,7 +59,7 @@ func TestIncrementProposalNumber(t *testing.T) { func TestProposalQueues(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) // create test proposals tp := TestProposal diff --git a/x/gov/keeper/proposal_test.go b/x/gov/keeper/proposal_test.go index b45d616b35..5b0273d7ba 100644 --- a/x/gov/keeper/proposal_test.go +++ b/x/gov/keeper/proposal_test.go @@ -8,7 +8,7 @@ import ( "time" "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" @@ -17,7 +17,7 @@ import ( func TestGetSetProposal(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) tp := TestProposal proposal, err := app.GovKeeper.SubmitProposal(ctx, tp) @@ -32,7 +32,7 @@ func TestGetSetProposal(t *testing.T) { func TestActivateVotingPeriod(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) tp := TestProposal proposal, err := app.GovKeeper.SubmitProposal(ctx, tp) @@ -61,7 +61,7 @@ func (invalidProposalRoute) ProposalRoute() string { return "nonexistingroute" } func TestSubmitProposal(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) testCases := []struct { content types.Content @@ -86,7 +86,7 @@ func TestSubmitProposal(t *testing.T) { func TestGetProposalsFiltered(t *testing.T) { proposalID := uint64(1) app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) status := []types.ProposalStatus{types.StatusDepositPeriod, types.StatusVotingPeriod} diff --git a/x/gov/keeper/querier_test.go b/x/gov/keeper/querier_test.go index 7af22d6c69..bb984959f1 100644 --- a/x/gov/keeper/querier_test.go +++ b/x/gov/keeper/querier_test.go @@ -8,6 +8,7 @@ import ( "github.com/stretchr/testify/require" abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/simapp" @@ -145,7 +146,7 @@ func getQueriedVotes(t *testing.T, ctx sdk.Context, cdc codec.JSONMarshaler, que func TestQueries(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) legacyQuerierCdc := codec.NewAminoCodec(app.LegacyAmino()) appCodec := legacyQuerierCdc querier := keeper.NewQuerier(app.GovKeeper, legacyQuerierCdc) @@ -293,7 +294,7 @@ func TestQueries(t *testing.T) { func TestPaginatedVotesQuery(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) legacyQuerierCdc := app.LegacyAmino() proposal := types.Proposal{ diff --git a/x/gov/keeper/tally_test.go b/x/gov/keeper/tally_test.go index 6a84fa4e70..0589b59bb2 100644 --- a/x/gov/keeper/tally_test.go +++ b/x/gov/keeper/tally_test.go @@ -4,7 +4,7 @@ import ( "testing" "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" @@ -14,7 +14,7 @@ import ( func TestTallyNoOneVotes(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) createValidators(ctx, app, []int64{5, 5, 5}) @@ -36,7 +36,7 @@ func TestTallyNoOneVotes(t *testing.T) { func TestTallyNoQuorum(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) createValidators(ctx, app, []int64{2, 5, 0}) @@ -61,7 +61,7 @@ func TestTallyNoQuorum(t *testing.T) { func TestTallyOnlyValidatorsAllYes(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) addrs, _ := createValidators(ctx, app, []int64{5, 5, 5}) tp := TestProposal @@ -87,7 +87,7 @@ func TestTallyOnlyValidatorsAllYes(t *testing.T) { func TestTallyOnlyValidators51No(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) valAccAddrs, _ := createValidators(ctx, app, []int64{5, 6, 0}) @@ -111,7 +111,7 @@ func TestTallyOnlyValidators51No(t *testing.T) { func TestTallyOnlyValidators51Yes(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) valAccAddrs, _ := createValidators(ctx, app, []int64{5, 6, 0}) @@ -136,7 +136,7 @@ func TestTallyOnlyValidators51Yes(t *testing.T) { func TestTallyOnlyValidatorsVetoed(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) valAccAddrs, _ := createValidators(ctx, app, []int64{6, 6, 7}) @@ -162,7 +162,7 @@ func TestTallyOnlyValidatorsVetoed(t *testing.T) { func TestTallyOnlyValidatorsAbstainPasses(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) valAccAddrs, _ := createValidators(ctx, app, []int64{6, 6, 7}) @@ -188,7 +188,7 @@ func TestTallyOnlyValidatorsAbstainPasses(t *testing.T) { func TestTallyOnlyValidatorsAbstainFails(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) valAccAddrs, _ := createValidators(ctx, app, []int64{6, 6, 7}) @@ -214,7 +214,7 @@ func TestTallyOnlyValidatorsAbstainFails(t *testing.T) { func TestTallyOnlyValidatorsNonVoter(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) valAccAddrs, _ := createValidators(ctx, app, []int64{5, 6, 7}) valAccAddr1, valAccAddr2 := valAccAddrs[0], valAccAddrs[1] @@ -240,7 +240,7 @@ func TestTallyOnlyValidatorsNonVoter(t *testing.T) { func TestTallyDelgatorOverride(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) addrs, valAddrs := createValidators(ctx, app, []int64{5, 6, 7}) @@ -276,7 +276,7 @@ func TestTallyDelgatorOverride(t *testing.T) { func TestTallyDelgatorInherit(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) addrs, vals := createValidators(ctx, app, []int64{5, 6, 7}) @@ -311,7 +311,7 @@ func TestTallyDelgatorInherit(t *testing.T) { func TestTallyDelgatorMultipleOverride(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) addrs, vals := createValidators(ctx, app, []int64{5, 6, 7}) @@ -351,7 +351,7 @@ func TestTallyDelgatorMultipleOverride(t *testing.T) { func TestTallyDelgatorMultipleInherit(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) createValidators(ctx, app, []int64{25, 6, 7}) @@ -392,7 +392,7 @@ func TestTallyDelgatorMultipleInherit(t *testing.T) { func TestTallyJailedValidator(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) addrs, valAddrs := createValidators(ctx, app, []int64{25, 6, 7}) @@ -433,7 +433,7 @@ func TestTallyJailedValidator(t *testing.T) { func TestTallyValidatorMultipleDelegations(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) addrs, valAddrs := createValidators(ctx, app, []int64{10, 10, 10}) diff --git a/x/gov/keeper/vote_test.go b/x/gov/keeper/vote_test.go index 819f3194ad..8dcf721bcc 100644 --- a/x/gov/keeper/vote_test.go +++ b/x/gov/keeper/vote_test.go @@ -4,7 +4,7 @@ import ( "testing" "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" @@ -13,7 +13,7 @@ import ( func TestVotes(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) addrs := simapp.AddTestAddrsIncremental(app, ctx, 5, sdk.NewInt(30000000)) diff --git a/x/gov/module_test.go b/x/gov/module_test.go index a4b4492246..4e54c0b79a 100644 --- a/x/gov/module_test.go +++ b/x/gov/module_test.go @@ -5,6 +5,7 @@ import ( "github.com/stretchr/testify/require" abcitypes "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" @@ -13,7 +14,7 @@ import ( func TestItCreatesModuleAccountOnInitBlock(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abcitypes.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) app.InitChain( abcitypes.RequestInitChain{ diff --git a/x/gov/simulation/operations_test.go b/x/gov/simulation/operations_test.go index f0ad3ecd77..797ad62c50 100644 --- a/x/gov/simulation/operations_test.go +++ b/x/gov/simulation/operations_test.go @@ -7,8 +7,8 @@ import ( "time" "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" simappparams "github.com/cosmos/cosmos-sdk/simapp/params" @@ -104,7 +104,7 @@ func TestSimulateMsgSubmitProposal(t *testing.T) { accounts := getTestingAccounts(t, r, app, ctx, 3) // begin a new block - app.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: app.LastBlockHeight() + 1, AppHash: app.LastCommitID().Hash}}) + app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: app.LastBlockHeight() + 1, AppHash: app.LastCommitID().Hash}}) // execute operation op := simulation.SimulateMsgSubmitProposal(app.AccountKeeper, app.BankKeeper, app.GovKeeper, MockWeightedProposalContent{3}.ContentSimulatorFn()) @@ -147,7 +147,7 @@ func TestSimulateMsgDeposit(t *testing.T) { app.GovKeeper.SetProposal(ctx, proposal) // begin a new block - app.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: app.LastBlockHeight() + 1, AppHash: app.LastCommitID().Hash, Time: blockTime}}) + app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: app.LastBlockHeight() + 1, AppHash: app.LastCommitID().Hash, Time: blockTime}}) // execute operation op := simulation.SimulateMsgDeposit(app.AccountKeeper, app.BankKeeper, app.GovKeeper) @@ -189,7 +189,7 @@ func TestSimulateMsgVote(t *testing.T) { app.GovKeeper.ActivateVotingPeriod(ctx, proposal) // begin a new block - app.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: app.LastBlockHeight() + 1, AppHash: app.LastCommitID().Hash, Time: blockTime}}) + app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: app.LastBlockHeight() + 1, AppHash: app.LastCommitID().Hash, Time: blockTime}}) // execute operation op := simulation.SimulateMsgVote(app.AccountKeeper, app.BankKeeper, app.GovKeeper) @@ -212,7 +212,7 @@ func TestSimulateMsgVote(t *testing.T) { func createTestApp(isCheckTx bool) (*simapp.SimApp, sdk.Context) { app := simapp.Setup(isCheckTx) - ctx := app.BaseApp.NewContext(isCheckTx, abci.Header{}) + ctx := app.BaseApp.NewContext(isCheckTx, tmproto.Header{}) app.MintKeeper.SetParams(ctx, minttypes.DefaultParams()) app.MintKeeper.SetMinter(ctx, minttypes.DefaultInitialMinter()) diff --git a/x/gov/simulation/proposals_test.go b/x/gov/simulation/proposals_test.go index d83edbfb00..dcd6f3c3f0 100644 --- a/x/gov/simulation/proposals_test.go +++ b/x/gov/simulation/proposals_test.go @@ -5,7 +5,7 @@ import ( "testing" "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" simappparams "github.com/cosmos/cosmos-sdk/simapp/params" sdk "github.com/cosmos/cosmos-sdk/types" @@ -18,7 +18,7 @@ func TestProposalContents(t *testing.T) { s := rand.NewSource(1) r := rand.New(s) - ctx := sdk.NewContext(nil, abci.Header{}, true, nil) + ctx := sdk.NewContext(nil, tmproto.Header{}, true, nil) accounts := simtypes.RandomAccounts(r, 3) // execute ProposalContents function diff --git a/x/ibc/02-client/client/utils/utils.go b/x/ibc/02-client/client/utils/utils.go index 873215a020..72538e4f72 100644 --- a/x/ibc/02-client/client/utils/utils.go +++ b/x/ibc/02-client/client/utils/utils.go @@ -59,7 +59,7 @@ func QueryClientState( return types.StateResponse{}, err } - clientStateRes := types.NewClientStateResponse(clientID, clientState, res.Proof, res.Height) + clientStateRes := types.NewClientStateResponse(clientID, clientState, res.ProofOps, res.Height) return clientStateRes, nil } @@ -80,7 +80,7 @@ func QueryClientStateABCI( return nil, nil, 0, err } - proofBz, err := clientCtx.LegacyAmino.MarshalBinaryBare(res.Proof) + proofBz, err := clientCtx.LegacyAmino.MarshalBinaryBare(res.ProofOps) if err != nil { return nil, nil, 0, err } @@ -119,7 +119,7 @@ func QueryConsensusState( return conStateRes, err } - return types.NewConsensusStateResponse(clientID, cs, res.Proof, res.Height), nil + return types.NewConsensusStateResponse(clientID, cs, res.ProofOps, res.Height), nil } // QueryConsensusState queries the store to get the consensus state of a light @@ -139,7 +139,7 @@ func QueryConsensusStateABCI( return nil, nil, 0, err } - proofBz, err := clientCtx.LegacyAmino.MarshalBinaryBare(res.Proof) + proofBz, err := clientCtx.LegacyAmino.MarshalBinaryBare(res.ProofOps) if err != nil { return nil, nil, 0, err } @@ -174,7 +174,10 @@ func QueryTendermintHeader(clientCtx client.Context) (ibctmtypes.Header, int64, return ibctmtypes.Header{}, 0, err } - validators, err := node.Validators(&height, 0, 10000) + page := 0 + count := 10_000 + + validators, err := node.Validators(&height, &page, &count) if err != nil { return ibctmtypes.Header{}, 0, err } @@ -207,8 +210,11 @@ func QueryNodeConsensusState(clientCtx client.Context) (*ibctmtypes.ConsensusSta return &ibctmtypes.ConsensusState{}, 0, err } + page := 0 + count := 10_000 + nextHeight := height + 1 - nextVals, err := node.Validators(&nextHeight, 0, 10000) + nextVals, err := node.Validators(&nextHeight, &page, &count) if err != nil { return &ibctmtypes.ConsensusState{}, 0, err } diff --git a/x/ibc/02-client/keeper/client_test.go b/x/ibc/02-client/keeper/client_test.go index f7f335b4fa..f7e166f5b4 100644 --- a/x/ibc/02-client/keeper/client_test.go +++ b/x/ibc/02-client/keeper/client_test.go @@ -1,7 +1,6 @@ package keeper_test import ( - "bytes" "fmt" "time" @@ -9,7 +8,6 @@ import ( "github.com/cosmos/cosmos-sdk/x/ibc/02-client/exported" ibctmtypes "github.com/cosmos/cosmos-sdk/x/ibc/07-tendermint/types" - commitmenttypes "github.com/cosmos/cosmos-sdk/x/ibc/23-commitment/types" ) @@ -258,16 +256,9 @@ func (suite *KeeperTestSuite) TestCheckMisbehaviourAndUpdateState() { // Create alternative validator set with only altVal altValSet := tmtypes.NewValidatorSet([]*tmtypes.Validator{altVal}) - pubKey, err := suite.privVal.GetPubKey() - suite.Require().NoError(err) - // Create signer array and ensure it is in same order as bothValSet - var bothSigners []tmtypes.PrivValidator - if bytes.Compare(altPubKey.Address(), pubKey.Address()) == -1 { - bothSigners = []tmtypes.PrivValidator{altPrivVal, suite.privVal} - } else { - bothSigners = []tmtypes.PrivValidator{suite.privVal, altPrivVal} - } + _, suiteVal := suite.valSet.GetByIndex(0) + bothSigners := ibctmtypes.CreateSortedSignerArray(altPrivVal, suite.privVal, altVal, suiteVal) altSigners := []tmtypes.PrivValidator{altPrivVal} diff --git a/x/ibc/02-client/keeper/keeper_test.go b/x/ibc/02-client/keeper/keeper_test.go index 01371b4412..33c20a8f6d 100644 --- a/x/ibc/02-client/keeper/keeper_test.go +++ b/x/ibc/02-client/keeper/keeper_test.go @@ -6,9 +6,8 @@ import ( "time" "github.com/stretchr/testify/suite" - - abci "github.com/tendermint/tendermint/abci/types" tmbytes "github.com/tendermint/tendermint/libs/bytes" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" tmtypes "github.com/tendermint/tendermint/types" "github.com/cosmos/cosmos-sdk/codec" @@ -59,7 +58,7 @@ func (suite *KeeperTestSuite) SetupTest() { app := simapp.Setup(isCheckTx) suite.cdc = app.AppCodec() - suite.ctx = app.BaseApp.NewContext(isCheckTx, abci.Header{Height: testClientHeight, ChainID: testClientID, Time: now2}) + suite.ctx = app.BaseApp.NewContext(isCheckTx, tmproto.Header{Height: testClientHeight, ChainID: testClientID, Time: now2}) suite.keeper = &app.IBCKeeper.ClientKeeper suite.privVal = tmtypes.NewMockPV() diff --git a/x/ibc/02-client/types/genesis_test.go b/x/ibc/02-client/types/genesis_test.go index 570e684550..9411ed2afb 100644 --- a/x/ibc/02-client/types/genesis_test.go +++ b/x/ibc/02-client/types/genesis_test.go @@ -5,7 +5,6 @@ import ( "time" "github.com/stretchr/testify/require" - tmtypes "github.com/tendermint/tendermint/types" "github.com/cosmos/cosmos-sdk/x/ibc/02-client/exported" diff --git a/x/ibc/02-client/types/querier.go b/x/ibc/02-client/types/querier.go index 64c69cbd08..37f7b4bec5 100644 --- a/x/ibc/02-client/types/querier.go +++ b/x/ibc/02-client/types/querier.go @@ -3,7 +3,7 @@ package types import ( "strings" - "github.com/tendermint/tendermint/crypto/merkle" + tmcrypto "github.com/tendermint/tendermint/proto/tendermint/crypto" "github.com/cosmos/cosmos-sdk/x/ibc/02-client/exported" commitmenttypes "github.com/cosmos/cosmos-sdk/x/ibc/23-commitment/types" @@ -41,7 +41,7 @@ type StateResponse struct { // NewClientStateResponse creates a new StateResponse instance. func NewClientStateResponse( - clientID string, clientState exported.ClientState, proof *merkle.Proof, height int64, + clientID string, clientState exported.ClientState, proof *tmcrypto.ProofOps, height int64, ) StateResponse { return StateResponse{ ClientState: clientState, @@ -62,7 +62,7 @@ type ConsensusStateResponse struct { // NewConsensusStateResponse creates a new ConsensusStateResponse instance. func NewConsensusStateResponse( - clientID string, cs exported.ConsensusState, proof *merkle.Proof, height int64, + clientID string, cs exported.ConsensusState, proof *tmcrypto.ProofOps, height int64, ) ConsensusStateResponse { return ConsensusStateResponse{ ConsensusState: cs, diff --git a/x/ibc/03-connection/client/utils/utils.go b/x/ibc/03-connection/client/utils/utils.go index eda8ff3eaf..acef9933f3 100644 --- a/x/ibc/03-connection/client/utils/utils.go +++ b/x/ibc/03-connection/client/utils/utils.go @@ -53,7 +53,7 @@ func queryConnectionABCI(clientCtx client.Context, connectionID string) (*types. return nil, err } - proofBz, err := clientCtx.LegacyAmino.MarshalBinaryBare(res.Proof) + proofBz, err := clientCtx.LegacyAmino.MarshalBinaryBare(res.ProofOps) if err != nil { return nil, err } @@ -96,7 +96,7 @@ func queryClientConnectionsABCI(clientCtx client.Context, clientID string) (*typ return nil, err } - proofBz, err := clientCtx.LegacyAmino.MarshalBinaryBare(res.Proof) + proofBz, err := clientCtx.LegacyAmino.MarshalBinaryBare(res.ProofOps) if err != nil { return nil, err } diff --git a/x/ibc/03-connection/types/msgs_test.go b/x/ibc/03-connection/types/msgs_test.go index 6ea55060b6..6f272960b3 100644 --- a/x/ibc/03-connection/types/msgs_test.go +++ b/x/ibc/03-connection/types/msgs_test.go @@ -49,7 +49,7 @@ func (suite *MsgTestSuite) SetupTest() { Prove: true, }) - merkleProof := commitmenttypes.MerkleProof{Proof: res.Proof} + merkleProof := commitmenttypes.MerkleProof{Proof: res.ProofOps} proof, err := app.AppCodec().MarshalBinaryBare(&merkleProof) suite.NoError(err) diff --git a/x/ibc/04-channel/client/utils/utils.go b/x/ibc/04-channel/client/utils/utils.go index 76f1ce4385..cee76083e7 100644 --- a/x/ibc/04-channel/client/utils/utils.go +++ b/x/ibc/04-channel/client/utils/utils.go @@ -49,7 +49,7 @@ func queryPacketCommitmentABCI( return nil, err } - proofBz, err := clientCtx.LegacyAmino.MarshalBinaryBare(res.Proof) + proofBz, err := clientCtx.LegacyAmino.MarshalBinaryBare(res.ProofOps) if err != nil { return nil, err } @@ -95,7 +95,7 @@ func queryChannelABCI(clientCtx client.Context, portID, channelID string) (*type return nil, err } - proofBz, err := clientCtx.LegacyAmino.MarshalBinaryBare(res.Proof) + proofBz, err := clientCtx.LegacyAmino.MarshalBinaryBare(res.ProofOps) if err != nil { return nil, err } @@ -232,7 +232,7 @@ func queryNextSequenceRecvABCI(clientCtx client.Context, portID, channelID strin return nil, err } - proofBz, err := clientCtx.LegacyAmino.MarshalBinaryBare(res.Proof) + proofBz, err := clientCtx.LegacyAmino.MarshalBinaryBare(res.ProofOps) if err != nil { return nil, err } diff --git a/x/ibc/04-channel/types/msgs_test.go b/x/ibc/04-channel/types/msgs_test.go index bcd0aba614..d886213b3e 100644 --- a/x/ibc/04-channel/types/msgs_test.go +++ b/x/ibc/04-channel/types/msgs_test.go @@ -90,7 +90,7 @@ func (suite *MsgTestSuite) SetupTest() { Prove: true, }) - merkleProof := commitmenttypes.MerkleProof{Proof: res.Proof} + merkleProof := commitmenttypes.MerkleProof{Proof: res.ProofOps} proof, err := app.AppCodec().MarshalBinaryBare(&merkleProof) suite.NoError(err) diff --git a/x/ibc/05-port/keeper/keeper_test.go b/x/ibc/05-port/keeper/keeper_test.go index 68a06bf55f..ec753a1667 100644 --- a/x/ibc/05-port/keeper/keeper_test.go +++ b/x/ibc/05-port/keeper/keeper_test.go @@ -5,8 +5,7 @@ import ( "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" - - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" @@ -29,7 +28,7 @@ func (suite *KeeperTestSuite) SetupTest() { isCheckTx := false app := simapp.Setup(isCheckTx) - suite.ctx = app.BaseApp.NewContext(isCheckTx, abci.Header{}) + suite.ctx = app.BaseApp.NewContext(isCheckTx, tmproto.Header{}) suite.keeper = &app.IBCKeeper.PortKeeper } diff --git a/x/ibc/07-tendermint/client/cli/tx.go b/x/ibc/07-tendermint/client/cli/tx.go index 69c7ec153a..75b6e0c814 100644 --- a/x/ibc/07-tendermint/client/cli/tx.go +++ b/x/ibc/07-tendermint/client/cli/tx.go @@ -9,10 +9,8 @@ import ( ics23 "github.com/confio/ics23/go" "github.com/pkg/errors" - "github.com/spf13/cobra" - - lite "github.com/tendermint/tendermint/lite2" + "github.com/tendermint/tendermint/light" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" @@ -68,7 +66,7 @@ func NewCreateClientCmd() *cobra.Command { lvl, _ := cmd.Flags().GetString(flagTrustLevel) if lvl == "default" { - trustLevel = ibctmtypes.NewFractionFromTm(lite.DefaultTrustLevel) + trustLevel = ibctmtypes.NewFractionFromTm(light.DefaultTrustLevel) } else { trustLevel, err = parseFraction(lvl) if err != nil { diff --git a/x/ibc/07-tendermint/types/client_state.go b/x/ibc/07-tendermint/types/client_state.go index 02544165a6..822b0083d8 100644 --- a/x/ibc/07-tendermint/types/client_state.go +++ b/x/ibc/07-tendermint/types/client_state.go @@ -5,7 +5,7 @@ import ( "time" ics23 "github.com/confio/ics23/go" - lite "github.com/tendermint/tendermint/lite2" + "github.com/tendermint/tendermint/light" "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" @@ -72,7 +72,7 @@ func (cs ClientState) Validate() error { if strings.TrimSpace(cs.ChainId) == "" { return sdkerrors.Wrap(ErrInvalidChainID, "chain id cannot be empty string") } - if err := lite.ValidateTrustLevel(cs.TrustLevel.ToTendermint()); err != nil { + if err := light.ValidateTrustLevel(cs.TrustLevel.ToTendermint()); err != nil { return err } if cs.TrustingPeriod == 0 { diff --git a/x/ibc/07-tendermint/types/evidence_test.go b/x/ibc/07-tendermint/types/evidence_test.go index fce3cd16ee..32fdfeb7fb 100644 --- a/x/ibc/07-tendermint/types/evidence_test.go +++ b/x/ibc/07-tendermint/types/evidence_test.go @@ -1,14 +1,15 @@ package types_test import ( - "bytes" "time" "github.com/tendermint/tendermint/crypto/tmhash" tmbytes "github.com/tendermint/tendermint/libs/bytes" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" tmtypes "github.com/tendermint/tendermint/types" clientexported "github.com/cosmos/cosmos-sdk/x/ibc/02-client/exported" + "github.com/cosmos/cosmos-sdk/x/ibc/07-tendermint/types" ibctmtypes "github.com/cosmos/cosmos-sdk/x/ibc/07-tendermint/types" ) @@ -44,16 +45,9 @@ func (suite *TendermintTestSuite) TestEvidenceValidateBasic() { signers := []tmtypes.PrivValidator{suite.privVal} - pubKey, err := suite.privVal.GetPubKey() - suite.Require().NoError(err) - // Create signer array and ensure it is in same order as bothValSet - var bothSigners []tmtypes.PrivValidator - if bytes.Compare(altPubKey.Address(), pubKey.Address()) == -1 { - bothSigners = []tmtypes.PrivValidator{altPrivVal, suite.privVal} - } else { - bothSigners = []tmtypes.PrivValidator{suite.privVal, altPrivVal} - } + _, suiteVal := suite.valSet.GetByIndex(0) + bothSigners := types.CreateSortedSignerArray(altPrivVal, suite.privVal, altVal, suiteVal) altSigners := []tmtypes.PrivValidator{altPrivVal} @@ -194,7 +188,7 @@ func (suite *TendermintTestSuite) TestEvidenceValidateBasic() { }, func(ev *ibctmtypes.Evidence) error { // voteSet contains only altVal which is less than 2/3 of total power (height/1height) - wrongVoteSet := tmtypes.NewVoteSet(chainID, ev.Header1.Height, 1, tmtypes.PrecommitType, altValSet) + wrongVoteSet := tmtypes.NewVoteSet(chainID, ev.Header1.Height, 1, tmproto.PrecommitType, altValSet) var err error ev.Header1.Commit, err = tmtypes.MakeCommit(ev.Header1.Commit.BlockID, ev.Header2.Height, ev.Header1.Commit.Round, wrongVoteSet, altSigners, suite.now) return err @@ -211,7 +205,7 @@ func (suite *TendermintTestSuite) TestEvidenceValidateBasic() { }, func(ev *ibctmtypes.Evidence) error { // voteSet contains only altVal which is less than 2/3 of total power (height/1height) - wrongVoteSet := tmtypes.NewVoteSet(chainID, ev.Header2.Height, 1, tmtypes.PrecommitType, altValSet) + wrongVoteSet := tmtypes.NewVoteSet(chainID, ev.Header2.Height, 1, tmproto.PrecommitType, altValSet) var err error ev.Header2.Commit, err = tmtypes.MakeCommit(ev.Header2.Commit.BlockID, ev.Header2.Height, ev.Header2.Commit.Round, wrongVoteSet, altSigners, suite.now) return err diff --git a/x/ibc/07-tendermint/types/fraction.go b/x/ibc/07-tendermint/types/fraction.go index e12e184c56..e445f19ba6 100644 --- a/x/ibc/07-tendermint/types/fraction.go +++ b/x/ibc/07-tendermint/types/fraction.go @@ -2,11 +2,11 @@ package types import ( tmmath "github.com/tendermint/tendermint/libs/math" - lite "github.com/tendermint/tendermint/lite2" + "github.com/tendermint/tendermint/light" ) // DefaultTrustLevel is the tendermint light client default trust level -var DefaultTrustLevel = NewFractionFromTm(lite.DefaultTrustLevel) +var DefaultTrustLevel = NewFractionFromTm(light.DefaultTrustLevel) // NewFractionFromTm returns a new Fraction instance from a tmmath.Fraction func NewFractionFromTm(f tmmath.Fraction) Fraction { diff --git a/x/ibc/07-tendermint/types/header.go b/x/ibc/07-tendermint/types/header.go index 999f6cfb88..94e47e5434 100644 --- a/x/ibc/07-tendermint/types/header.go +++ b/x/ibc/07-tendermint/types/header.go @@ -3,7 +3,6 @@ package types import ( "bytes" - abci "github.com/tendermint/tendermint/abci/types" tmtypes "github.com/tendermint/tendermint/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" @@ -74,9 +73,3 @@ func (h Header) ValidateBasic(chainID string) error { } return nil } - -// ToABCIHeader parses the header to an ABCI header type. -// NOTE: only for testing use. -func (h Header) ToABCIHeader() abci.Header { - return tmtypes.TM2PB.Header(h.SignedHeader.Header) -} diff --git a/x/ibc/07-tendermint/types/misbehaviour.go b/x/ibc/07-tendermint/types/misbehaviour.go index 56cf3effa6..6d01a8ae7e 100644 --- a/x/ibc/07-tendermint/types/misbehaviour.go +++ b/x/ibc/07-tendermint/types/misbehaviour.go @@ -137,8 +137,7 @@ func checkMisbehaviourHeader( // - ValidatorSet must have 2/3 similarity with trusted FromValidatorSet // - ValidatorSets on both headers are valid given the last trusted ValidatorSet if err := header.TrustedValidators.VerifyCommitLightTrusting( - clientState.GetChainID(), header.Commit.BlockID, header.Height, - header.Commit, clientState.TrustLevel.ToTendermint(), + clientState.GetChainID(), header.Commit, clientState.TrustLevel.ToTendermint(), ); err != nil { return sdkerrors.Wrapf(clienttypes.ErrInvalidEvidence, "validator set in header has too much change from trusted validator set: %v", err) } diff --git a/x/ibc/07-tendermint/types/misbehaviour_test.go b/x/ibc/07-tendermint/types/misbehaviour_test.go index d3c2096cb6..8ad9596b48 100644 --- a/x/ibc/07-tendermint/types/misbehaviour_test.go +++ b/x/ibc/07-tendermint/types/misbehaviour_test.go @@ -1,8 +1,7 @@ package types_test import ( - "bytes" - fmt "fmt" + "fmt" "time" "github.com/tendermint/tendermint/crypto/tmhash" @@ -27,17 +26,10 @@ func (suite *TendermintTestSuite) TestCheckMisbehaviourAndUpdateState() { // Create alternative validator set with only altVal altValSet := tmtypes.NewValidatorSet([]*tmtypes.Validator{altVal}) + _, suiteVal := suite.valSet.GetByIndex(0) + // Create signer array and ensure it is in same order as bothValSet - var bothSigners []tmtypes.PrivValidator - - pubKey, err := suite.privVal.GetPubKey() - suite.Require().NoError(err) - - if bytes.Compare(altPubKey.Address(), pubKey.Address()) == -1 { - bothSigners = []tmtypes.PrivValidator{altPrivVal, suite.privVal} - } else { - bothSigners = []tmtypes.PrivValidator{suite.privVal, altPrivVal} - } + bothSigners := types.CreateSortedSignerArray(altPrivVal, suite.privVal, altVal, suiteVal) altSigners := []tmtypes.PrivValidator{altPrivVal} diff --git a/x/ibc/07-tendermint/types/msgs.go b/x/ibc/07-tendermint/types/msgs.go index 54704e4132..e9edc680ce 100644 --- a/x/ibc/07-tendermint/types/msgs.go +++ b/x/ibc/07-tendermint/types/msgs.go @@ -4,7 +4,7 @@ import ( "time" ics23 "github.com/confio/ics23/go" - lite "github.com/tendermint/tendermint/lite2" + "github.com/tendermint/tendermint/light" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" @@ -82,7 +82,7 @@ func (msg MsgCreateClient) ValidateBasic() error { if msg.TrustingPeriod == 0 { return sdkerrors.Wrap(ErrInvalidTrustingPeriod, "duration cannot be 0") } - if err := lite.ValidateTrustLevel(msg.TrustLevel.ToTendermint()); err != nil { + if err := light.ValidateTrustLevel(msg.TrustLevel.ToTendermint()); err != nil { return sdkerrors.Wrap(err, "invalid trust level for tendermint light client") } if msg.UnbondingPeriod == 0 { diff --git a/x/ibc/07-tendermint/types/tendermint_test.go b/x/ibc/07-tendermint/types/tendermint_test.go index a1b10e61d4..5d18b9e83f 100644 --- a/x/ibc/07-tendermint/types/tendermint_test.go +++ b/x/ibc/07-tendermint/types/tendermint_test.go @@ -5,9 +5,8 @@ import ( "time" "github.com/stretchr/testify/suite" - - abci "github.com/tendermint/tendermint/abci/types" tmbytes "github.com/tendermint/tendermint/libs/bytes" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" tmtypes "github.com/tendermint/tendermint/types" "github.com/cosmos/cosmos-sdk/codec" @@ -76,7 +75,7 @@ func (suite *TendermintTestSuite) SetupTest() { suite.valSet = tmtypes.NewValidatorSet([]*tmtypes.Validator{val}) suite.valsHash = suite.valSet.Hash() suite.header = ibctmtypes.CreateTestHeader(chainID, height, height-1, suite.now, suite.valSet, suite.valSet, []tmtypes.PrivValidator{suite.privVal}) - suite.ctx = app.BaseApp.NewContext(checkTx, abci.Header{Height: 1, Time: suite.now}) + suite.ctx = app.BaseApp.NewContext(checkTx, tmproto.Header{Height: 1, Time: suite.now}) } func TestTendermintTestSuite(t *testing.T) { diff --git a/x/ibc/07-tendermint/types/test_utils.go b/x/ibc/07-tendermint/types/test_utils.go index 125b53c5b1..0f7e3bff66 100644 --- a/x/ibc/07-tendermint/types/test_utils.go +++ b/x/ibc/07-tendermint/types/test_utils.go @@ -1,20 +1,20 @@ package types import ( + "bytes" "time" "github.com/tendermint/tendermint/crypto/tmhash" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + "github.com/tendermint/tendermint/proto/tendermint/version" tmtypes "github.com/tendermint/tendermint/types" - "github.com/tendermint/tendermint/version" ) -const maxInt = int(^uint(0) >> 1) - // Copied unimported test functions from tmtypes to use them here -func MakeBlockID(hash []byte, partSetSize int, partSetHash []byte) tmtypes.BlockID { +func MakeBlockID(hash []byte, partSetSize uint32, partSetHash []byte) tmtypes.BlockID { return tmtypes.BlockID{ Hash: hash, - PartsHeader: tmtypes.PartSetHeader{ + PartSetHeader: tmtypes.PartSetHeader{ Total: partSetSize, Hash: partSetHash, }, @@ -29,7 +29,7 @@ func CreateTestHeader(chainID string, height, trustedHeight int64, timestamp tim ChainID: chainID, Height: height, Time: timestamp, - LastBlockID: MakeBlockID(make([]byte, tmhash.Size), maxInt, make([]byte, tmhash.Size)), + LastBlockID: MakeBlockID(make([]byte, tmhash.Size), 10_000, make([]byte, tmhash.Size)), LastCommitHash: tmhash.Sum([]byte("last_commit_hash")), DataHash: tmhash.Sum([]byte("data_hash")), ValidatorsHash: vsetHash, @@ -40,9 +40,10 @@ func CreateTestHeader(chainID string, height, trustedHeight int64, timestamp tim EvidenceHash: tmhash.Sum([]byte("evidence_hash")), ProposerAddress: valSet.Proposer.Address, } + hhash := tmHeader.Hash() blockID := MakeBlockID(hhash, 3, tmhash.Sum([]byte("part_set"))) - voteSet := tmtypes.NewVoteSet(chainID, height, 1, tmtypes.PrecommitType, valSet) + voteSet := tmtypes.NewVoteSet(chainID, height, 1, tmproto.PrecommitType, valSet) commit, err := tmtypes.MakeCommit(blockID, height, 1, voteSet, signers, timestamp) if err != nil { panic(err) @@ -60,3 +61,23 @@ func CreateTestHeader(chainID string, height, trustedHeight int64, timestamp tim TrustedValidators: trustedVals, } } + +// CreateSortedSignerArray takes two PrivValidators, and the corresponding Validator structs +// (including voting power). It returns a signer array of PrivValidators that matches the +// sorting of ValidatorSet. +// The sorting is first by .VotingPower (descending), with secondary index of .Address (ascending). +func CreateSortedSignerArray(altPrivVal, suitePrivVal tmtypes.PrivValidator, + altVal, suiteVal *tmtypes.Validator) []tmtypes.PrivValidator { + + switch { + case altVal.VotingPower > suiteVal.VotingPower: + return []tmtypes.PrivValidator{altPrivVal, suitePrivVal} + case altVal.VotingPower < suiteVal.VotingPower: + return []tmtypes.PrivValidator{suitePrivVal, altPrivVal} + default: + if bytes.Compare(altVal.Address, suiteVal.Address) == -1 { + return []tmtypes.PrivValidator{altPrivVal, suitePrivVal} + } + return []tmtypes.PrivValidator{suitePrivVal, altPrivVal} + } +} diff --git a/x/ibc/07-tendermint/types/update.go b/x/ibc/07-tendermint/types/update.go index a70ba0c319..f77fd55865 100644 --- a/x/ibc/07-tendermint/types/update.go +++ b/x/ibc/07-tendermint/types/update.go @@ -4,7 +4,7 @@ import ( "bytes" "time" - lite "github.com/tendermint/tendermint/lite2" + "github.com/tendermint/tendermint/light" tmtypes "github.com/tendermint/tendermint/types" "github.com/cosmos/cosmos-sdk/codec" @@ -127,7 +127,7 @@ func checkValidity( // - assert header timestamp is not past the trusting period // - assert header timestamp is past latest stored consensus state timestamp // - assert that a TrustLevel proportion of TrustedValidators signed new Commit - err := lite.Verify( + err := light.Verify( clientState.GetChainID(), &signedHeader, header.TrustedValidators, &header.SignedHeader, header.ValidatorSet, clientState.TrustingPeriod, currentTimestamp, clientState.MaxClockDrift, clientState.TrustLevel.ToTendermint(), diff --git a/x/ibc/07-tendermint/types/update_test.go b/x/ibc/07-tendermint/types/update_test.go index 54fbb70803..8e8ff88999 100644 --- a/x/ibc/07-tendermint/types/update_test.go +++ b/x/ibc/07-tendermint/types/update_test.go @@ -1,7 +1,6 @@ package types_test import ( - "bytes" "time" tmtypes "github.com/tendermint/tendermint/types" @@ -32,16 +31,9 @@ func (suite *TendermintTestSuite) TestCheckHeaderAndUpdateState() { signers := []tmtypes.PrivValidator{suite.privVal} - pubKey, err := suite.privVal.GetPubKey() - suite.Require().NoError(err) - // Create signer array and ensure it is in same order as bothValSet - var bothSigners []tmtypes.PrivValidator - if bytes.Compare(altPubKey.Address(), pubKey.Address()) == -1 { - bothSigners = []tmtypes.PrivValidator{altPrivVal, suite.privVal} - } else { - bothSigners = []tmtypes.PrivValidator{suite.privVal, altPrivVal} - } + _, suiteVal := suite.valSet.GetByIndex(0) + bothSigners := types.CreateSortedSignerArray(altPrivVal, suite.privVal, altVal, suiteVal) altSigners := []tmtypes.PrivValidator{altPrivVal} diff --git a/x/ibc/09-localhost/types/localhost_test.go b/x/ibc/09-localhost/types/localhost_test.go index 16b5735f86..4f34169273 100644 --- a/x/ibc/09-localhost/types/localhost_test.go +++ b/x/ibc/09-localhost/types/localhost_test.go @@ -4,8 +4,7 @@ import ( "testing" "github.com/stretchr/testify/suite" - - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/simapp" @@ -29,7 +28,7 @@ func (suite *LocalhostTestSuite) SetupTest() { app := simapp.Setup(isCheckTx) suite.cdc = app.AppCodec() - ctx := app.BaseApp.NewContext(isCheckTx, abci.Header{Height: 1}) + ctx := app.BaseApp.NewContext(isCheckTx, tmproto.Header{Height: 1}) suite.store = app.IBCKeeper.ClientKeeper.ClientStore(ctx, clientexported.ClientTypeLocalHost) } diff --git a/x/ibc/23-commitment/types/commitment.pb.go b/x/ibc/23-commitment/types/commitment.pb.go index f5c8784e0e..2c158fc51c 100644 --- a/x/ibc/23-commitment/types/commitment.pb.go +++ b/x/ibc/23-commitment/types/commitment.pb.go @@ -7,7 +7,7 @@ import ( fmt "fmt" _ "github.com/gogo/protobuf/gogoproto" proto "github.com/gogo/protobuf/proto" - merkle "github.com/tendermint/tendermint/crypto/merkle" + crypto "github.com/tendermint/tendermint/proto/tendermint/crypto" io "io" math "math" math_bits "math/bits" @@ -183,7 +183,7 @@ func (m *MerklePath) GetKeyPath() KeyPath { // verifiable in conjunction with a known commitment root. Proofs should be // succinct. type MerkleProof struct { - Proof *merkle.Proof `protobuf:"bytes,1,opt,name=proof,proto3" json:"proof,omitempty"` + Proof *crypto.ProofOps `protobuf:"bytes,1,opt,name=proof,proto3" json:"proof,omitempty"` } func (m *MerkleProof) Reset() { *m = MerkleProof{} } @@ -219,7 +219,7 @@ func (m *MerkleProof) XXX_DiscardUnknown() { var xxx_messageInfo_MerkleProof proto.InternalMessageInfo -func (m *MerkleProof) GetProof() *merkle.Proof { +func (m *MerkleProof) GetProof() *crypto.ProofOps { if m != nil { return m.Proof } @@ -315,65 +315,41 @@ func init() { func init() { proto.RegisterFile("ibc/commitment/commitment.proto", fileDescriptor_71f36b3839a24c54) } var fileDescriptor_71f36b3839a24c54 = []byte{ - // 509 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x92, 0x31, 0x6f, 0xd3, 0x40, - 0x14, 0xc7, 0x6d, 0x62, 0x48, 0xb8, 0x54, 0x25, 0x1c, 0xa0, 0x46, 0xa1, 0xd8, 0x91, 0x25, 0x20, - 0x20, 0xd5, 0x96, 0x52, 0xe8, 0x10, 0x31, 0xa5, 0x31, 0x34, 0xa4, 0x84, 0xe8, 0x50, 0xa4, 0xc2, - 0x12, 0x39, 0xce, 0x35, 0xb6, 0x5c, 0xfb, 0x2c, 0xfb, 0x90, 0xea, 0x6f, 0x50, 0x31, 0x31, 0xb2, - 0x20, 0x55, 0x82, 0x81, 0x8f, 0xd2, 0xb1, 0x23, 0x93, 0x85, 0x9c, 0x85, 0xb9, 0x9f, 0xa0, 0xba, - 0x3b, 0x57, 0x49, 0xa5, 0x2e, 0x77, 0xef, 0xf9, 0xfd, 0xfc, 0xde, 0xdf, 0x7f, 0x3f, 0xa0, 0x79, - 0x53, 0xc7, 0x74, 0x48, 0x10, 0x78, 0x34, 0xc0, 0x21, 0x5d, 0x09, 0x8d, 0x28, 0x26, 0x94, 0xc0, - 0x75, 0x6f, 0xea, 0x18, 0xcb, 0xa7, 0x8d, 0x87, 0x73, 0x32, 0x27, 0xbc, 0x64, 0xb2, 0x48, 0x50, - 0x8d, 0xa7, 0x14, 0x87, 0x33, 0x1c, 0x07, 0x1e, 0x6b, 0x11, 0xa7, 0x11, 0x25, 0x66, 0x80, 0x63, - 0xff, 0x08, 0x17, 0x97, 0xc0, 0xf4, 0x67, 0x00, 0x7c, 0xe0, 0x39, 0x22, 0x84, 0x42, 0x08, 0x14, - 0xd7, 0x4e, 0xdc, 0xba, 0xdc, 0x94, 0x5b, 0x6b, 0x88, 0xc7, 0x1d, 0xe5, 0xe4, 0x54, 0x93, 0xf4, - 0x1e, 0x58, 0x13, 0xdc, 0x28, 0xc6, 0x87, 0xde, 0x31, 0x7c, 0x05, 0x80, 0x8f, 0xd3, 0x49, 0xc4, - 0x33, 0xc1, 0x77, 0x1f, 0x5d, 0x64, 0xda, 0xfd, 0xd4, 0x0e, 0x8e, 0x3a, 0xfa, 0xb2, 0xa6, 0xa3, - 0xbb, 0x3e, 0x4e, 0xc5, 0x5b, 0xfa, 0xe4, 0x6a, 0xda, 0xc8, 0xa6, 0x2e, 0x1c, 0x80, 0x0a, 0xe7, - 0x6c, 0x2a, 0x26, 0x56, 0xdb, 0x1b, 0xc6, 0xf5, 0x6f, 0x33, 0x06, 0x38, 0x65, 0x68, 0x77, 0xe3, - 0x2c, 0xd3, 0xa4, 0x8b, 0x4c, 0xbb, 0xb7, 0xd2, 0xde, 0xa6, 0xae, 0x8e, 0xca, 0xbe, 0x20, 0x3a, - 0xca, 0x0f, 0x26, 0xf3, 0x3d, 0xa8, 0x5e, 0xc9, 0x24, 0xe4, 0x10, 0xbe, 0x06, 0xb7, 0x23, 0x16, - 0x14, 0xed, 0x35, 0x63, 0x69, 0x8a, 0x21, 0x4c, 0x31, 0x0a, 0x37, 0x38, 0x8f, 0x04, 0xdd, 0x51, - 0xfe, 0x9f, 0x6a, 0xb2, 0xfe, 0x06, 0x94, 0x8b, 0xf1, 0xf0, 0x39, 0x50, 0x7c, 0x9c, 0x26, 0x75, - 0xb9, 0x59, 0x6a, 0x55, 0xdb, 0x0f, 0x6e, 0x50, 0x89, 0x38, 0xd0, 0xa9, 0x30, 0xb3, 0xb8, 0x12, - 0x1b, 0x94, 0x06, 0x38, 0x85, 0x9b, 0x40, 0x09, 0xed, 0x00, 0x17, 0x0e, 0x55, 0xf2, 0x4c, 0xe3, - 0x39, 0xe2, 0x27, 0xdc, 0x01, 0x25, 0x1c, 0x3a, 0xf5, 0x5b, 0x4d, 0xb9, 0xb5, 0xde, 0x7e, 0x7c, - 0x43, 0x5b, 0x2b, 0x74, 0xc8, 0xcc, 0x0b, 0xe7, 0xdd, 0x72, 0x9e, 0x69, 0x8c, 0x45, 0xec, 0x10, - 0xff, 0xe4, 0xa5, 0x0d, 0xaa, 0x2b, 0x08, 0x7c, 0x01, 0x36, 0x07, 0xd6, 0xe7, 0x89, 0x35, 0xdc, - 0xfd, 0xd8, 0xeb, 0x0f, 0xdf, 0x4d, 0xc6, 0x68, 0x7f, 0x32, 0x1e, 0x7e, 0x1a, 0x59, 0xbb, 0xfd, - 0xb7, 0x7d, 0xab, 0x57, 0x93, 0x1a, 0xe5, 0x6f, 0x3f, 0x9b, 0xa5, 0x31, 0xda, 0x87, 0x4f, 0x40, - 0xed, 0x1a, 0xba, 0x67, 0x1d, 0xd4, 0x64, 0x51, 0xde, 0xb3, 0x0e, 0x1a, 0x95, 0x93, 0x5f, 0xaa, - 0xf4, 0xe7, 0xb7, 0x2a, 0x75, 0x47, 0x67, 0xb9, 0x2a, 0x9f, 0xe7, 0xaa, 0xfc, 0x2f, 0x57, 0xe5, - 0xef, 0x0b, 0x55, 0x3a, 0x5f, 0xa8, 0xd2, 0xdf, 0x85, 0x2a, 0x7d, 0xd9, 0x99, 0x7b, 0xd4, 0xfd, - 0x3a, 0x65, 0x7a, 0x4d, 0x87, 0x24, 0x01, 0x49, 0x8a, 0x6b, 0x2b, 0x99, 0xf9, 0xe6, 0xb1, 0xc9, - 0xb6, 0xb8, 0xbd, 0xbd, 0xb5, 0xb2, 0xc8, 0x34, 0x8d, 0x70, 0x32, 0xbd, 0xc3, 0xf7, 0x6e, 0xfb, - 0x32, 0x00, 0x00, 0xff, 0xff, 0xef, 0xa1, 0xaa, 0x6d, 0xe7, 0x02, 0x00, 0x00, + // 506 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x92, 0xc1, 0x6e, 0xd3, 0x4c, + 0x10, 0xc7, 0xed, 0x2f, 0xfe, 0x48, 0xd8, 0x54, 0x25, 0x2c, 0xa0, 0x46, 0x69, 0x6b, 0x47, 0x3e, + 0x40, 0x40, 0xaa, 0x2d, 0x52, 0xd4, 0x43, 0xc4, 0x01, 0xa5, 0x31, 0x34, 0x4a, 0x49, 0xa3, 0x45, + 0x91, 0x0a, 0x17, 0xcb, 0x71, 0x36, 0xb1, 0xe5, 0xda, 0x6b, 0xd9, 0x8b, 0x54, 0xbf, 0x41, 0xc5, + 0x89, 0x23, 0x17, 0x24, 0x24, 0x38, 0xf0, 0x28, 0x3d, 0xf6, 0xc8, 0xc9, 0x42, 0xce, 0x1b, 0xf4, + 0x09, 0xd0, 0xee, 0xa6, 0x4a, 0x2a, 0xf5, 0xb2, 0x9e, 0xf5, 0xfc, 0x3c, 0xf3, 0x9f, 0xbf, 0x07, + 0x68, 0xfe, 0xc4, 0x35, 0x5d, 0x12, 0x86, 0x3e, 0x0d, 0x71, 0x44, 0xd7, 0x42, 0x23, 0x4e, 0x08, + 0x25, 0x70, 0xd3, 0x9f, 0xb8, 0xc6, 0xea, 0x6d, 0xe3, 0xf1, 0x9c, 0xcc, 0x09, 0x4f, 0x99, 0x2c, + 0x12, 0x54, 0x63, 0x97, 0xe2, 0x68, 0x8a, 0x93, 0xd0, 0x67, 0x25, 0x92, 0x2c, 0xa6, 0xc4, 0x8c, + 0x13, 0x42, 0x66, 0x22, 0xad, 0x3f, 0x05, 0xe0, 0x3d, 0x4e, 0x82, 0x33, 0x8c, 0x08, 0xa1, 0x10, + 0x02, 0xc5, 0x73, 0x52, 0xaf, 0x2e, 0x37, 0xe5, 0xd6, 0x06, 0xe2, 0x71, 0x47, 0xb9, 0xf8, 0xa1, + 0x49, 0x7a, 0x0f, 0x6c, 0x08, 0x6e, 0x94, 0xe0, 0x99, 0x7f, 0x0e, 0x5f, 0x01, 0x10, 0xe0, 0xcc, + 0x8e, 0xf9, 0x4d, 0xf0, 0xdd, 0x27, 0xd7, 0xb9, 0xf6, 0x30, 0x73, 0xc2, 0xb3, 0x8e, 0xbe, 0xca, + 0xe9, 0xe8, 0x7e, 0x80, 0x33, 0xf1, 0x95, 0x6e, 0xdf, 0x74, 0x1b, 0x39, 0xd4, 0x83, 0x03, 0x50, + 0xe1, 0x9c, 0x43, 0x45, 0xc7, 0x6a, 0x7b, 0xcb, 0xb8, 0x3d, 0x93, 0x31, 0xc0, 0x19, 0x43, 0xbb, + 0x5b, 0x97, 0xb9, 0x26, 0x5d, 0xe7, 0xda, 0x83, 0xb5, 0xf2, 0x0e, 0xf5, 0x74, 0x54, 0x0e, 0x04, + 0xd1, 0x51, 0xbe, 0x31, 0x99, 0x6f, 0x40, 0xf5, 0x46, 0x26, 0x21, 0x33, 0xf8, 0x12, 0xfc, 0xcf, + 0x87, 0x5d, 0x96, 0xdf, 0x36, 0x56, 0x66, 0x18, 0xc2, 0x0c, 0x83, 0x83, 0x27, 0x71, 0x8a, 0x04, + 0xa9, 0xbf, 0x06, 0xe5, 0x65, 0x53, 0xf8, 0x0c, 0x28, 0x01, 0xce, 0xd2, 0xba, 0xdc, 0x2c, 0xb5, + 0xaa, 0xed, 0x47, 0x77, 0x68, 0x43, 0x1c, 0xe8, 0x54, 0x98, 0x45, 0xbc, 0xbf, 0x03, 0x4a, 0x03, + 0x9c, 0xc1, 0x1d, 0xa0, 0x44, 0x4e, 0x88, 0x97, 0xbe, 0x54, 0x8a, 0x5c, 0xe3, 0x77, 0xc4, 0x4f, + 0x78, 0x00, 0x4a, 0x38, 0x72, 0xeb, 0xff, 0x35, 0xe5, 0xd6, 0x66, 0x7b, 0xfb, 0x8e, 0xb2, 0x56, + 0xe4, 0x92, 0xa9, 0x1f, 0xcd, 0xbb, 0xe5, 0x22, 0xd7, 0x18, 0x8b, 0xd8, 0x21, 0xfe, 0xc4, 0x0b, + 0x07, 0x54, 0xd7, 0x10, 0xf8, 0x1c, 0xec, 0x0c, 0xac, 0x8f, 0xb6, 0x35, 0x3c, 0x3c, 0xe9, 0xf5, + 0x87, 0xef, 0xec, 0x31, 0x3a, 0xb6, 0xc7, 0xc3, 0x0f, 0x23, 0xeb, 0xb0, 0xff, 0xb6, 0x6f, 0xf5, + 0x6a, 0x52, 0xa3, 0xfc, 0xe5, 0x7b, 0xb3, 0x34, 0x46, 0xc7, 0x70, 0x17, 0xd4, 0x6e, 0xa1, 0x47, + 0xd6, 0x69, 0x4d, 0x16, 0xe9, 0x23, 0xeb, 0xb4, 0x51, 0xb9, 0xf8, 0xa9, 0x4a, 0xbf, 0x7f, 0xa9, + 0x52, 0x77, 0x74, 0x59, 0xa8, 0xf2, 0x55, 0xa1, 0xca, 0x7f, 0x0b, 0x55, 0xfe, 0xba, 0x50, 0xa5, + 0xab, 0x85, 0x2a, 0xfd, 0x59, 0xa8, 0xd2, 0xa7, 0x83, 0xb9, 0x4f, 0xbd, 0xcf, 0x13, 0xa6, 0xd7, + 0x74, 0x49, 0x1a, 0x92, 0x74, 0xf9, 0xd8, 0x4b, 0xa7, 0x81, 0x79, 0x6e, 0xb2, 0x9d, 0x6d, 0xef, + 0xef, 0xad, 0xad, 0x2d, 0xcd, 0x62, 0x9c, 0x4e, 0xee, 0xf1, 0x6d, 0xdb, 0xff, 0x17, 0x00, 0x00, + 0xff, 0xff, 0xeb, 0x84, 0x9f, 0x36, 0xd5, 0x02, 0x00, 0x00, } -func (this *MerkleProof) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*MerkleProof) - if !ok { - that2, ok := that.(MerkleProof) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.Proof.Equal(that1.Proof) { - return false - } - return true -} func (m *MerkleRoot) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -991,7 +967,7 @@ func (m *MerkleProof) Unmarshal(dAtA []byte) error { return io.ErrUnexpectedEOF } if m.Proof == nil { - m.Proof = &merkle.Proof{} + m.Proof = &crypto.ProofOps{} } if err := m.Proof.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err diff --git a/x/ibc/23-commitment/types/merkle.go b/x/ibc/23-commitment/types/merkle.go index d219130a34..da8226e028 100644 --- a/x/ibc/23-commitment/types/merkle.go +++ b/x/ibc/23-commitment/types/merkle.go @@ -5,12 +5,12 @@ import ( "net/url" ics23 "github.com/confio/ics23/go" + "github.com/gogo/protobuf/proto" + tmcrypto "github.com/tendermint/tendermint/proto/tendermint/crypto" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/x/ibc/23-commitment/exported" host "github.com/cosmos/cosmos-sdk/x/ibc/24-host" - - "github.com/tendermint/tendermint/crypto/merkle" ) // var representing the proofspecs for a SDK chain @@ -346,7 +346,7 @@ func convertProofs(mproof MerkleProof) ([]*ics23.CommitmentProof, error) { // Empty returns true if the root is empty func (proof MerkleProof) Empty() bool { - return proof.Equal(nil) || proof.Equal(MerkleProof{}) || proof.Proof.Equal(nil) || proof.Proof.Equal(merkle.Proof{}) + return proto.Equal(&proof, nil) || proto.Equal(&proof, &MerkleProof{}) || proto.Equal(&proof, &tmcrypto.ProofOps{}) } // ValidateBasic checks if the proof is empty. diff --git a/x/ibc/23-commitment/types/merkle_test.go b/x/ibc/23-commitment/types/merkle_test.go index bc5fa341a6..8f440cfe1c 100644 --- a/x/ibc/23-commitment/types/merkle_test.go +++ b/x/ibc/23-commitment/types/merkle_test.go @@ -5,11 +5,11 @@ import ( "testing" "github.com/stretchr/testify/require" + abci "github.com/tendermint/tendermint/abci/types" + tmcrypto "github.com/tendermint/tendermint/proto/tendermint/crypto" + tmmerkle "github.com/tendermint/tendermint/proto/tendermint/crypto" "github.com/cosmos/cosmos-sdk/x/ibc/23-commitment/types" - - abci "github.com/tendermint/tendermint/abci/types" - "github.com/tendermint/tendermint/crypto/merkle" ) func (suite *MerkleTestSuite) TestVerifyMembership() { @@ -21,10 +21,10 @@ func (suite *MerkleTestSuite) TestVerifyMembership() { Data: []byte("MYKEY"), Prove: true, }) - require.NotNil(suite.T(), res.Proof) + require.NotNil(suite.T(), res.ProofOps) proof := types.MerkleProof{ - Proof: res.Proof, + Proof: res.ProofOps, } suite.Require().NoError(proof.ValidateBasic()) suite.Require().Error(types.MerkleProof{}.ValidateBasic()) @@ -49,8 +49,8 @@ func (suite *MerkleTestSuite) TestVerifyMembership() { {"nil root", []byte(nil), []string{suite.storeKey.Name(), "MYKEY"}, []byte("MYVALUE"), func() {}, false}, // invalid proof with nil root {"proof is wrong length", cid.Hash, []string{suite.storeKey.Name(), "MYKEY"}, []byte("MYVALUE"), func() { proof = types.MerkleProof{ - Proof: &merkle.Proof{ - Ops: res.Proof.Ops[1:], + Proof: &tmmerkle.ProofOps{ + Ops: res.ProofOps.Ops[1:], }, } }, false}, // invalid proof with wrong length @@ -89,10 +89,10 @@ func (suite *MerkleTestSuite) TestVerifyNonMembership() { Data: []byte("MYABSENTKEY"), Prove: true, }) - require.NotNil(suite.T(), res.Proof) + require.NotNil(suite.T(), res.ProofOps) proof := types.MerkleProof{ - Proof: res.Proof, + Proof: res.ProofOps, } suite.Require().NoError(proof.ValidateBasic()) @@ -114,8 +114,8 @@ func (suite *MerkleTestSuite) TestVerifyNonMembership() { {"nil root", []byte(nil), []string{suite.storeKey.Name(), "MYABSENTKEY"}, func() {}, false}, // invalid proof with nil root {"proof is wrong length", cid.Hash, []string{suite.storeKey.Name(), "MYKEY"}, func() { proof = types.MerkleProof{ - Proof: &merkle.Proof{ - Ops: res.Proof.Ops[1:], + Proof: &tmcrypto.ProofOps{ + Ops: res.ProofOps.Ops[1:], }, } }, false}, // invalid proof with wrong length diff --git a/x/ibc/genesis_test.go b/x/ibc/genesis_test.go index 7ac9b69d19..c0a26cce94 100644 --- a/x/ibc/genesis_test.go +++ b/x/ibc/genesis_test.go @@ -3,8 +3,6 @@ package ibc_test import ( "fmt" - abci "github.com/tendermint/tendermint/abci/types" - "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/simapp" "github.com/cosmos/cosmos-sdk/x/ibc" @@ -18,6 +16,7 @@ import ( host "github.com/cosmos/cosmos-sdk/x/ibc/24-host" ibctesting "github.com/cosmos/cosmos-sdk/x/ibc/testing" "github.com/cosmos/cosmos-sdk/x/ibc/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" ) func (suite *IBCTestSuite) TestValidateGenesis() { @@ -225,7 +224,7 @@ func (suite *IBCTestSuite) TestInitGenesis() { app := simapp.Setup(false) suite.NotPanics(func() { - ibc.InitGenesis(app.BaseApp.NewContext(false, abci.Header{Height: 1}), *app.IBCKeeper, true, tc.genState) + ibc.InitGenesis(app.BaseApp.NewContext(false, tmproto.Header{Height: 1}), *app.IBCKeeper, true, tc.genState) }) } } diff --git a/x/ibc/ibc_test.go b/x/ibc/ibc_test.go index f31281a932..10a41703db 100644 --- a/x/ibc/ibc_test.go +++ b/x/ibc/ibc_test.go @@ -5,8 +5,7 @@ import ( "time" "github.com/stretchr/testify/suite" - - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" tmtypes "github.com/tendermint/tendermint/types" "github.com/cosmos/cosmos-sdk/codec" @@ -65,7 +64,7 @@ func (suite *IBCTestSuite) SetupTest() { suite.header = ibctmtypes.CreateTestHeader(chainID, height, height-1, now, valSet, valSet, []tmtypes.PrivValidator{privVal}) suite.cdc = suite.app.LegacyAmino() - suite.ctx = suite.app.BaseApp.NewContext(isCheckTx, abci.Header{}) + suite.ctx = suite.app.BaseApp.NewContext(isCheckTx, tmproto.Header{}) } func TestIBCTestSuite(t *testing.T) { diff --git a/x/ibc/keeper/keeper_test.go b/x/ibc/keeper/keeper_test.go index b6b97af745..e993ee1be8 100644 --- a/x/ibc/keeper/keeper_test.go +++ b/x/ibc/keeper/keeper_test.go @@ -4,8 +4,7 @@ import ( "testing" "github.com/stretchr/testify/suite" - - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/simapp" @@ -28,7 +27,7 @@ func (suite *KeeperTestSuite) SetupTest() { legacyQuerierCdc := codec.NewAminoCodec(app.LegacyAmino()) suite.cdc = app.LegacyAmino() - suite.ctx = app.BaseApp.NewContext(isCheckTx, abci.Header{}) + suite.ctx = app.BaseApp.NewContext(isCheckTx, tmproto.Header{}) suite.keeper = app.IBCKeeper suite.querier = keeper.NewQuerier(*app.IBCKeeper, legacyQuerierCdc) } diff --git a/x/ibc/testing/chain.go b/x/ibc/testing/chain.go index adb108ce94..8148097aa2 100644 --- a/x/ibc/testing/chain.go +++ b/x/ibc/testing/chain.go @@ -11,8 +11,9 @@ import ( "github.com/tendermint/tendermint/crypto" "github.com/tendermint/tendermint/crypto/secp256k1" "github.com/tendermint/tendermint/crypto/tmhash" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + "github.com/tendermint/tendermint/proto/tendermint/version" tmtypes "github.com/tendermint/tendermint/types" - "github.com/tendermint/tendermint/version" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/codec" @@ -44,8 +45,6 @@ const ( InvalidID = "IDisInvalid" ConnectionIDPrefix = "connectionid" - - maxInt = int(^uint(0) >> 1) ) // Default params variables used to create a TM client @@ -68,7 +67,7 @@ type TestChain struct { App *simapp.SimApp ChainID string LastHeader ibctmtypes.Header // header for last block height committed - CurrentHeader abci.Header // header for current block height + CurrentHeader tmproto.Header // header for current block height QueryServer types.QueryServer TxConfig client.TxConfig Codec codec.BinaryMarshaler @@ -114,7 +113,7 @@ func NewTestChain(t *testing.T, chainID string) *TestChain { app := simapp.SetupWithGenesisValSet(t, valSet, []authtypes.GenesisAccount{acc}, balance) // create current header and call begin block - header := abci.Header{ + header := tmproto.Header{ Height: 1, Time: globalStartTime, } @@ -159,7 +158,7 @@ func (chain *TestChain) QueryProof(key []byte) ([]byte, uint64) { }) merkleProof := commitmenttypes.MerkleProof{ - Proof: res.Proof, + Proof: res.ProofOps, } proof, err := chain.App.AppCodec().MarshalBinaryBare(&merkleProof) @@ -194,7 +193,7 @@ func (chain *TestChain) NextBlock() { chain.LastHeader = chain.CreateTMClientHeader() // increment the current header - chain.CurrentHeader = abci.Header{ + chain.CurrentHeader = tmproto.Header{ Height: chain.App.LastBlockHeight() + 1, AppHash: chain.App.LastCommitID().Hash, // NOTE: the time is increased by the coordinator to maintain time synchrony amongst @@ -395,7 +394,7 @@ func (chain *TestChain) CreateTMClientHeader() ibctmtypes.Header { ChainID: chain.ChainID, Height: chain.CurrentHeader.Height, Time: chain.CurrentHeader.Time, - LastBlockID: MakeBlockID(make([]byte, tmhash.Size), maxInt, make([]byte, tmhash.Size)), + LastBlockID: MakeBlockID(make([]byte, tmhash.Size), 10_000, make([]byte, tmhash.Size)), LastCommitHash: chain.App.LastCommitID().Hash, DataHash: tmhash.Sum([]byte("data_hash")), ValidatorsHash: vsetHash, @@ -410,7 +409,7 @@ func (chain *TestChain) CreateTMClientHeader() ibctmtypes.Header { blockID := MakeBlockID(hhash, 3, tmhash.Sum([]byte("part_set"))) - voteSet := tmtypes.NewVoteSet(chain.ChainID, chain.CurrentHeader.Height, 1, tmtypes.PrecommitType, chain.Vals) + voteSet := tmtypes.NewVoteSet(chain.ChainID, chain.CurrentHeader.Height, 1, tmproto.PrecommitType, chain.Vals) commit, err := tmtypes.MakeCommit(blockID, chain.CurrentHeader.Height, 1, voteSet, chain.Signers, chain.CurrentHeader.Time) require.NoError(chain.t, err) @@ -429,10 +428,10 @@ func (chain *TestChain) CreateTMClientHeader() ibctmtypes.Header { } // MakeBlockID copied unimported test functions from tmtypes to use them here -func MakeBlockID(hash []byte, partSetSize int, partSetHash []byte) tmtypes.BlockID { +func MakeBlockID(hash []byte, partSetSize uint32, partSetHash []byte) tmtypes.BlockID { return tmtypes.BlockID{ Hash: hash, - PartsHeader: tmtypes.PartSetHeader{ + PartSetHeader: tmtypes.PartSetHeader{ Total: partSetSize, Hash: partSetHash, }, diff --git a/x/mint/keeper/grpc_query_test.go b/x/mint/keeper/grpc_query_test.go index f63b248a28..11b6276694 100644 --- a/x/mint/keeper/grpc_query_test.go +++ b/x/mint/keeper/grpc_query_test.go @@ -5,7 +5,7 @@ import ( "testing" "github.com/stretchr/testify/suite" - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/simapp" @@ -23,7 +23,7 @@ type MintTestSuite struct { func (suite *MintTestSuite) SetupTest() { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) queryHelper := baseapp.NewQueryServerTestHelper(ctx, app.InterfaceRegistry()) types.RegisterQueryServer(queryHelper, app.MintKeeper) diff --git a/x/mint/keeper/integration_test.go b/x/mint/keeper/integration_test.go index db1efaca3f..df321c33bd 100644 --- a/x/mint/keeper/integration_test.go +++ b/x/mint/keeper/integration_test.go @@ -1,7 +1,7 @@ package keeper_test import ( - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" @@ -12,7 +12,7 @@ import ( func createTestApp(isCheckTx bool) (*simapp.SimApp, sdk.Context) { app := simapp.Setup(isCheckTx) - ctx := app.BaseApp.NewContext(isCheckTx, abci.Header{}) + ctx := app.BaseApp.NewContext(isCheckTx, tmproto.Header{}) app.MintKeeper.SetParams(ctx, types.DefaultParams()) app.MintKeeper.SetMinter(ctx, types.DefaultInitialMinter()) diff --git a/x/mint/module_test.go b/x/mint/module_test.go index 92e22d4986..3b2df369e6 100644 --- a/x/mint/module_test.go +++ b/x/mint/module_test.go @@ -5,6 +5,7 @@ import ( "github.com/stretchr/testify/require" abcitypes "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" @@ -13,7 +14,7 @@ import ( func TestItCreatesModuleAccountOnInitBlock(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abcitypes.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) app.InitChain( abcitypes.RequestInitChain{ diff --git a/x/params/keeper/common_test.go b/x/params/keeper/common_test.go index 0520849d05..139aaccc9a 100644 --- a/x/params/keeper/common_test.go +++ b/x/params/keeper/common_test.go @@ -1,8 +1,8 @@ package keeper_test import ( - abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/libs/log" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" dbm "github.com/tendermint/tm-db" "github.com/cosmos/cosmos-sdk/simapp" @@ -47,6 +47,6 @@ func defaultContext(key sdk.StoreKey, tkey sdk.StoreKey) sdk.Context { if err != nil { panic(err) } - ctx := sdk.NewContext(cms, abci.Header{}, false, log.NewNopLogger()) + ctx := sdk.NewContext(cms, tmproto.Header{}, false, log.NewNopLogger()) return ctx } diff --git a/x/params/keeper/keeper_test.go b/x/params/keeper/keeper_test.go index b30783fbd8..44c8223f2c 100644 --- a/x/params/keeper/keeper_test.go +++ b/x/params/keeper/keeper_test.go @@ -6,7 +6,7 @@ import ( "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/simapp" @@ -40,7 +40,7 @@ func TestKeeperTestSuite(t *testing.T) { // returns context and app func createTestApp(isCheckTx bool) (*simapp.SimApp, sdk.Context) { app := simapp.Setup(isCheckTx) - ctx := app.BaseApp.NewContext(isCheckTx, abci.Header{}) + ctx := app.BaseApp.NewContext(isCheckTx, tmproto.Header{}) return app, ctx } diff --git a/x/params/proposal_handler_test.go b/x/params/proposal_handler_test.go index 712dc6daaa..163182d9c0 100644 --- a/x/params/proposal_handler_test.go +++ b/x/params/proposal_handler_test.go @@ -6,9 +6,8 @@ import ( "github.com/cosmos/cosmos-sdk/simapp" "github.com/stretchr/testify/require" - - abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/libs/log" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" dbm "github.com/tendermint/tm-db" "github.com/cosmos/cosmos-sdk/codec" @@ -79,7 +78,7 @@ func newTestInput(t *testing.T) testInput { encCfg := simapp.MakeEncodingConfig() keeper := keeper.NewKeeper(encCfg.Marshaler, encCfg.Amino, keyParams, tKeyParams) - ctx := sdk.NewContext(cms, abci.Header{}, false, log.NewNopLogger()) + ctx := sdk.NewContext(cms, tmproto.Header{}, false, log.NewNopLogger()) return testInput{ctx, cdc, keeper} } diff --git a/x/params/simulation/operations_test.go b/x/params/simulation/operations_test.go index a7aecfdbda..54c90a6c2e 100644 --- a/x/params/simulation/operations_test.go +++ b/x/params/simulation/operations_test.go @@ -6,7 +6,7 @@ import ( "testing" "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" sdk "github.com/cosmos/cosmos-sdk/types" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" @@ -43,7 +43,7 @@ func TestSimulateParamChangeProposalContent(t *testing.T) { s := rand.NewSource(1) r := rand.New(s) - ctx := sdk.NewContext(nil, abci.Header{}, true, nil) + ctx := sdk.NewContext(nil, tmproto.Header{}, true, nil) accounts := simtypes.RandomAccounts(r, 3) paramChangePool := []simtypes.ParamChange{MockParamChange{1}, MockParamChange{2}, MockParamChange{3}} diff --git a/x/params/simulation/proposals_test.go b/x/params/simulation/proposals_test.go index 0b84aa07f9..e89bb668a4 100644 --- a/x/params/simulation/proposals_test.go +++ b/x/params/simulation/proposals_test.go @@ -5,7 +5,7 @@ import ( "testing" "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" simappparams "github.com/cosmos/cosmos-sdk/simapp/params" sdk "github.com/cosmos/cosmos-sdk/types" @@ -19,7 +19,7 @@ func TestProposalContents(t *testing.T) { s := rand.NewSource(1) r := rand.New(s) - ctx := sdk.NewContext(nil, abci.Header{}, true, nil) + ctx := sdk.NewContext(nil, tmproto.Header{}, true, nil) accounts := simtypes.RandomAccounts(r, 3) paramChangePool := []simtypes.ParamChange{MockParamChange{1}, MockParamChange{2}, MockParamChange{3}} diff --git a/x/params/types/subspace_test.go b/x/params/types/subspace_test.go index 2f3b9627db..f9a816641f 100644 --- a/x/params/types/subspace_test.go +++ b/x/params/types/subspace_test.go @@ -6,8 +6,8 @@ import ( "time" "github.com/stretchr/testify/suite" - abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/libs/log" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" dbm "github.com/tendermint/tm-db" "github.com/cosmos/cosmos-sdk/codec" @@ -39,7 +39,7 @@ func (suite *SubspaceTestSuite) SetupTest() { suite.cdc = encCfg.Marshaler suite.amino = encCfg.Amino - suite.ctx = sdk.NewContext(ms, abci.Header{}, false, log.NewNopLogger()) + suite.ctx = sdk.NewContext(ms, tmproto.Header{}, false, log.NewNopLogger()) suite.ss = ss.WithKeyTable(paramKeyTable()) } diff --git a/x/simulation/mock_tendermint.go b/x/simulation/mock_tendermint.go index 0a16147d24..152e4de295 100644 --- a/x/simulation/mock_tendermint.go +++ b/x/simulation/mock_tendermint.go @@ -8,7 +8,9 @@ import ( "time" abci "github.com/tendermint/tendermint/abci/types" + cryptoenc "github.com/tendermint/tendermint/crypto/encoding" tmbytes "github.com/tendermint/tendermint/libs/bytes" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" tmtypes "github.com/tendermint/tendermint/types" ) @@ -18,9 +20,8 @@ type mockValidator struct { } func (mv mockValidator) String() string { - return fmt.Sprintf("mockValidator{%s:%X power:%v state:%v}", - mv.val.PubKey.Type, - mv.val.PubKey.Data, + return fmt.Sprintf("mockValidator{%s power:%v state:%v}", + mv.val.PubKey.String(), mv.val.Power, mv.livenessState) } @@ -32,9 +33,8 @@ func newMockValidators(r *rand.Rand, abciVals []abci.ValidatorUpdate, params Par validators := make(mockValidators) for _, validator := range abciVals { - str := fmt.Sprintf("%v", validator.PubKey) - liveliness := GetMemberOfInitialState(r, - params.InitialLivenessWeightings()) + str := fmt.Sprintf("%X", validator.PubKey.GetEd25519()) + liveliness := GetMemberOfInitialState(r, params.InitialLivenessWeightings()) validators[str] = mockValidator{ val: validator, @@ -72,7 +72,7 @@ func (vals mockValidators) randomProposer(r *rand.Rand) tmbytes.HexBytes { key := keys[r.Intn(len(keys))] proposer := vals[key].val - pk, err := tmtypes.PB2TM.PubKey(proposer.PubKey) + pk, err := cryptoenc.PubKeyFromProto(proposer.PubKey) if err != nil { //nolint:wsl panic(err) } @@ -80,18 +80,22 @@ func (vals mockValidators) randomProposer(r *rand.Rand) tmbytes.HexBytes { return pk.Address() } -// updateValidators mimicks Tendermint's update logic -// nolint: unparam -func updateValidators(tb testing.TB, r *rand.Rand, params Params, - current map[string]mockValidator, updates []abci.ValidatorUpdate, +// updateValidators mimics Tendermint's update logic. +func updateValidators( + tb testing.TB, + r *rand.Rand, + params Params, + current map[string]mockValidator, + updates []abci.ValidatorUpdate, + event func(route, op, evResult string), +) map[string]mockValidator { - event func(route, op, evResult string)) map[string]mockValidator { for _, update := range updates { - str := fmt.Sprintf("%v", update.PubKey) + str := fmt.Sprintf("%X", update.PubKey.GetEd25519()) if update.Power == 0 { if _, ok := current[str]; !ok { - tb.Fatalf("tried to delete a nonexistent validator") + tb.Fatalf("tried to delete a nonexistent validator: %s", str) } event("end_block", "validator_updates", "kicked") @@ -119,7 +123,7 @@ func updateValidators(tb testing.TB, r *rand.Rand, params Params, func RandomRequestBeginBlock(r *rand.Rand, params Params, validators mockValidators, pastTimes []time.Time, pastVoteInfos [][]abci.VoteInfo, - event func(route, op, evResult string), header abci.Header) abci.RequestBeginBlock { + event func(route, op, evResult string), header tmproto.Header) abci.RequestBeginBlock { if len(validators) == 0 { return abci.RequestBeginBlock{ Header: header, @@ -149,7 +153,7 @@ func RandomRequestBeginBlock(r *rand.Rand, params Params, event("begin_block", "signing", "missed") } - pubkey, err := tmtypes.PB2TM.PubKey(mVal.val.PubKey) + pubkey, err := cryptoenc.PubKeyFromProto(mVal.val.PubKey) if err != nil { panic(err) } diff --git a/x/simulation/params.go b/x/simulation/params.go index f206659b20..0aae67753d 100644 --- a/x/simulation/params.go +++ b/x/simulation/params.go @@ -5,13 +5,12 @@ import ( "fmt" "math/rand" - "github.com/cosmos/cosmos-sdk/simapp/params" - + abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/tendermint/tendermint/types" - abci "github.com/tendermint/tendermint/abci/types" - "github.com/cosmos/cosmos-sdk/codec" + "github.com/cosmos/cosmos-sdk/simapp/params" "github.com/cosmos/cosmos-sdk/types/simulation" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" ) @@ -170,10 +169,10 @@ func RandomConsensusParams(r *rand.Rand, appState json.RawMessage) *abci.Consens MaxBytes: int64(simulation.RandIntBetween(r, 20000000, 30000000)), MaxGas: -1, }, - Validator: &abci.ValidatorParams{ - PubKeyTypes: []string{types.ABCIPubKeyTypeSecp256k1, types.ABCIPubKeyTypeEd25519}, + Validator: &tmproto.ValidatorParams{ + PubKeyTypes: []string{types.ABCIPubKeyTypeEd25519}, }, - Evidence: &abci.EvidenceParams{ + Evidence: &tmproto.EvidenceParams{ MaxAgeNumBlocks: int64(stakingGenesisState.Params.UnbondingTime / AverageBlockTime), MaxAgeDuration: stakingGenesisState.Params.UnbondingTime, }, diff --git a/x/simulation/params_test.go b/x/simulation/params_test.go index 8ba53efd86..d0b538c26e 100644 --- a/x/simulation/params_test.go +++ b/x/simulation/params_test.go @@ -6,8 +6,7 @@ import ( "testing" "github.com/stretchr/testify/require" - - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" sdk "github.com/cosmos/cosmos-sdk/types" simtypes "github.com/cosmos/cosmos-sdk/types/simulation" @@ -40,7 +39,7 @@ func TestNewWeightedProposalContent(t *testing.T) { require.Equal(t, key, pContent.AppParamsKey()) require.Equal(t, weight, pContent.DefaultWeight()) - ctx := sdk.NewContext(nil, abci.Header{}, true, nil) + ctx := sdk.NewContext(nil, tmproto.Header{}, true, nil) require.Equal(t, content, pContent.ContentSimulatorFn()(nil, ctx, nil)) } diff --git a/x/simulation/simulate.go b/x/simulation/simulate.go index 7e07ade4ef..5d6e155a7b 100644 --- a/x/simulation/simulate.go +++ b/x/simulation/simulate.go @@ -11,6 +11,7 @@ import ( "time" abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/baseapp" sdk "github.com/cosmos/cosmos-sdk/types" @@ -83,10 +84,9 @@ func SimulateFromSeed( } accs = tmpAccs - nextValidators := validators - header := abci.Header{ + header := tmproto.Header{ ChainID: config.ChainID, Height: 1, Time: genesisTimestamp, @@ -187,22 +187,18 @@ func SimulateFromSeed( if header.ProposerAddress == nil { fmt.Fprintf(w, "\nSimulation stopped early as all validators have been unbonded; nobody left to propose a block!\n") - stopEarly = true - break } // Generate a random RequestBeginBlock with the current validator set // for the next block - request = RandomRequestBeginBlock(r, params, validators, - pastTimes, pastVoteInfos, eventStats.Tally, header) + request = RandomRequestBeginBlock(r, params, validators, pastTimes, pastVoteInfos, eventStats.Tally, header) // Update the validator set, which will be reflected in the application // on the next block validators = nextValidators - nextValidators = updateValidators(tb, r, params, - validators, res.ValidatorUpdates, eventStats.Tally) + nextValidators = updateValidators(tb, r, params, validators, res.ValidatorUpdates, eventStats.Tally) // update the exported params if config.ExportParamsPath != "" && config.ExportParamsHeight == height { @@ -240,7 +236,7 @@ func SimulateFromSeed( //______________________________________________________________________________ type blockSimFn func(r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, - accounts []simulation.Account, header abci.Header) (opCount int) + accounts []simulation.Account, header tmproto.Header) (opCount int) // Returns a function to simulate blocks. Written like this to avoid constant // parameters being passed everytime, to minimize memory overhead. @@ -254,7 +250,7 @@ func createBlockSimulator(testingMode bool, tb testing.TB, w io.Writer, params P selectOp := ops.getSelectOpFn() return func( - r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accounts []simulation.Account, header abci.Header, + r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accounts []simulation.Account, header tmproto.Header, ) (opCount int) { _, _ = fmt.Fprintf( w, "\rSimulating... block %d/%d, operation %d/%d.", diff --git a/x/slashing/abci_test.go b/x/slashing/abci_test.go index fcff517deb..0b6026bcde 100644 --- a/x/slashing/abci_test.go +++ b/x/slashing/abci_test.go @@ -6,6 +6,7 @@ import ( "github.com/stretchr/testify/require" abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" @@ -16,7 +17,7 @@ import ( func TestBeginBlocker(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) pks := simapp.CreateTestPubKeys(1) simapp.AddTestAddrsFromPubKeys(app, ctx, pks, sdk.TokensFromConsensusPower(200)) diff --git a/x/slashing/app_test.go b/x/slashing/app_test.go index bc8f6e03eb..2191ede320 100644 --- a/x/slashing/app_test.go +++ b/x/slashing/app_test.go @@ -6,7 +6,9 @@ import ( "github.com/stretchr/testify/require" abci "github.com/tendermint/tendermint/abci/types" + "github.com/tendermint/tendermint/crypto/ed25519" "github.com/tendermint/tendermint/crypto/secp256k1" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" @@ -19,17 +21,20 @@ import ( var ( priv1 = secp256k1.GenPrivKey() addr1 = sdk.AccAddress(priv1.PubKey().Address()) + + valKey = ed25519.GenPrivKey() + valAddr = sdk.AccAddress(valKey.PubKey().Address()) ) func checkValidator(t *testing.T, app *simapp.SimApp, _ sdk.AccAddress, expFound bool) stakingtypes.Validator { - ctxCheck := app.BaseApp.NewContext(true, abci.Header{}) + ctxCheck := app.BaseApp.NewContext(true, tmproto.Header{}) validator, found := app.StakingKeeper.GetValidator(ctxCheck, sdk.ValAddress(addr1)) require.Equal(t, expFound, found) return validator } func checkValidatorSigningInfo(t *testing.T, app *simapp.SimApp, addr sdk.ConsAddress, expFound bool) types.ValidatorSigningInfo { - ctxCheck := app.BaseApp.NewContext(true, abci.Header{}) + ctxCheck := app.BaseApp.NewContext(true, tmproto.Header{}) signingInfo, found := app.SlashingKeeper.GetValidatorSigningInfo(ctxCheck, addr) require.Equal(t, expFound, found) return signingInfo @@ -59,28 +64,28 @@ func TestSlashingMsgs(t *testing.T) { commission := stakingtypes.NewCommissionRates(sdk.ZeroDec(), sdk.ZeroDec(), sdk.ZeroDec()) createValidatorMsg := stakingtypes.NewMsgCreateValidator( - sdk.ValAddress(addr1), priv1.PubKey(), bondCoin, description, commission, sdk.OneInt(), + sdk.ValAddress(addr1), valKey.PubKey(), bondCoin, description, commission, sdk.OneInt(), ) - header := abci.Header{Height: app.LastBlockHeight() + 1} + header := tmproto.Header{Height: app.LastBlockHeight() + 1} txGen := simapp.MakeEncodingConfig().TxConfig _, _, err := simapp.SignCheckDeliver(t, txGen, app.BaseApp, header, []sdk.Msg{createValidatorMsg}, []uint64{0}, []uint64{0}, true, true, priv1) require.NoError(t, err) simapp.CheckBalance(t, app, addr1, sdk.Coins{genCoin.Sub(bondCoin)}) - header = abci.Header{Height: app.LastBlockHeight() + 1} + header = tmproto.Header{Height: app.LastBlockHeight() + 1} app.BeginBlock(abci.RequestBeginBlock{Header: header}) validator := checkValidator(t, app, addr1, true) require.Equal(t, sdk.ValAddress(addr1), validator.OperatorAddress) require.Equal(t, sdk.Bonded, validator.Status) require.True(sdk.IntEq(t, bondTokens, validator.BondedTokens())) - unjailMsg := &types.MsgUnjail{ValidatorAddr: sdk.ValAddress(validator.GetConsPubKey().Address())} + unjailMsg := &types.MsgUnjail{ValidatorAddr: sdk.ValAddress(addr1)} - checkValidatorSigningInfo(t, app, sdk.ConsAddress(addr1), true) + checkValidatorSigningInfo(t, app, sdk.ConsAddress(valAddr), true) // unjail should fail with unknown validator - header = abci.Header{Height: app.LastBlockHeight() + 1} + header = tmproto.Header{Height: app.LastBlockHeight() + 1} _, res, err := simapp.SignCheckDeliver(t, txGen, app.BaseApp, header, []sdk.Msg{unjailMsg}, []uint64{0}, []uint64{1}, false, false, priv1) require.Error(t, err) require.Nil(t, res) diff --git a/x/slashing/genesis_test.go b/x/slashing/genesis_test.go index 0eb40070b8..8b9b9a4639 100644 --- a/x/slashing/genesis_test.go +++ b/x/slashing/genesis_test.go @@ -5,7 +5,7 @@ import ( "time" "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" @@ -16,7 +16,7 @@ import ( func TestExportAndInitGenesis(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) app.SlashingKeeper.SetParams(ctx, keeper.TestParams()) diff --git a/x/slashing/handler_test.go b/x/slashing/handler_test.go index d2ee849cea..93b760ee56 100644 --- a/x/slashing/handler_test.go +++ b/x/slashing/handler_test.go @@ -7,9 +7,9 @@ import ( "time" "github.com/cosmos/cosmos-sdk/testutil/testdata" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" @@ -23,7 +23,7 @@ import ( func TestCannotUnjailUnlessJailed(t *testing.T) { // initial setup app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) pks := simapp.CreateTestPubKeys(1) simapp.AddTestAddrsFromPubKeys(app, ctx, pks, sdk.TokensFromConsensusPower(200)) @@ -55,7 +55,7 @@ func TestCannotUnjailUnlessJailed(t *testing.T) { func TestCannotUnjailUnlessMeetMinSelfDelegation(t *testing.T) { // initial setup app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) pks := simapp.CreateTestPubKeys(1) simapp.AddTestAddrsFromPubKeys(app, ctx, pks, sdk.TokensFromConsensusPower(200)) @@ -94,7 +94,7 @@ func TestCannotUnjailUnlessMeetMinSelfDelegation(t *testing.T) { func TestJailedValidatorDelegations(t *testing.T) { // initial setup app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{Time: time.Unix(0, 0)}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{Time: time.Unix(0, 0)}) pks := simapp.CreateTestPubKeys(3) simapp.AddTestAddrsFromPubKeys(app, ctx, pks, sdk.TokensFromConsensusPower(20)) @@ -164,7 +164,7 @@ func TestInvalidMsg(t *testing.T) { k := keeper.Keeper{} h := slashing.NewHandler(k) - res, err := h(sdk.NewContext(nil, abci.Header{}, false, nil), testdata.NewTestMsg()) + res, err := h(sdk.NewContext(nil, tmproto.Header{}, false, nil), testdata.NewTestMsg()) require.Error(t, err) require.Nil(t, res) require.True(t, strings.Contains(err.Error(), "unrecognized slashing message type")) @@ -175,7 +175,7 @@ func TestInvalidMsg(t *testing.T) { func TestHandleAbsentValidator(t *testing.T) { // initial setup app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{Time: time.Unix(0, 0)}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{Time: time.Unix(0, 0)}) pks := simapp.CreateTestPubKeys(1) simapp.AddTestAddrsFromPubKeys(app, ctx, pks, sdk.TokensFromConsensusPower(200)) @@ -278,7 +278,7 @@ func TestHandleAbsentValidator(t *testing.T) { require.Nil(t, res) // unrevocation should succeed after jail expiration - ctx = ctx.WithBlockHeader(abci.Header{Time: time.Unix(1, 0).Add(app.SlashingKeeper.DowntimeJailDuration(ctx))}) + ctx = ctx.WithBlockHeader(tmproto.Header{Time: time.Unix(1, 0).Add(app.SlashingKeeper.DowntimeJailDuration(ctx))}) res, err = slh(ctx, types.NewMsgUnjail(addr)) require.NoError(t, err) require.NotNil(t, res) diff --git a/x/slashing/keeper/grpc_query_test.go b/x/slashing/keeper/grpc_query_test.go index 5b4667907f..ef47b26710 100644 --- a/x/slashing/keeper/grpc_query_test.go +++ b/x/slashing/keeper/grpc_query_test.go @@ -6,7 +6,7 @@ import ( "time" "github.com/stretchr/testify/suite" - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/simapp" @@ -29,7 +29,7 @@ type SlashingTestSuite struct { func (suite *SlashingTestSuite) SetupTest() { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) app.AccountKeeper.SetParams(ctx, authtypes.DefaultParams()) app.BankKeeper.SetParams(ctx, banktypes.DefaultParams()) diff --git a/x/slashing/keeper/keeper_test.go b/x/slashing/keeper/keeper_test.go index 1a305728e5..5231edc79a 100644 --- a/x/slashing/keeper/keeper_test.go +++ b/x/slashing/keeper/keeper_test.go @@ -5,7 +5,7 @@ import ( "time" "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" @@ -16,7 +16,7 @@ import ( func TestUnJailNotBonded(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) p := app.StakingKeeper.GetParams(ctx) p.MaxValidators = 5 @@ -98,7 +98,7 @@ func TestUnJailNotBonded(t *testing.T) { // and that they are not immediately jailed func TestHandleNewValidator(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) addrDels := simapp.AddTestAddrsIncremental(app, ctx, 1, sdk.TokensFromConsensusPower(200)) valAddrs := simapp.ConvertAddrsToValAddrs(addrDels) @@ -148,7 +148,7 @@ func TestHandleNewValidator(t *testing.T) { func TestHandleAlreadyJailed(t *testing.T) { // initial setup app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) power := int64(100) amt := sdk.TokensFromConsensusPower(power) @@ -205,7 +205,7 @@ func TestValidatorDippingInAndOut(t *testing.T) { // initial setup // TestParams set the SignedBlocksWindow to 1000 and MaxMissedBlocksPerWindow to 500 app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) app.SlashingKeeper.SetParams(ctx, keeper.TestParams()) params := app.StakingKeeper.GetParams(ctx) diff --git a/x/slashing/keeper/querier_test.go b/x/slashing/keeper/querier_test.go index b26260007e..785d5d4c32 100644 --- a/x/slashing/keeper/querier_test.go +++ b/x/slashing/keeper/querier_test.go @@ -6,6 +6,7 @@ import ( "github.com/stretchr/testify/require" abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/simapp" @@ -15,7 +16,7 @@ import ( func TestNewQuerier(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) app.SlashingKeeper.SetParams(ctx, keeper.TestParams()) legacyQuerierCdc := codec.NewAminoCodec(app.LegacyAmino()) querier := keeper.NewQuerier(app.SlashingKeeper, legacyQuerierCdc) @@ -33,7 +34,7 @@ func TestQueryParams(t *testing.T) { cdc := codec.New() legacyQuerierCdc := codec.NewAminoCodec(cdc) app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) app.SlashingKeeper.SetParams(ctx, keeper.TestParams()) querier := keeper.NewQuerier(app.SlashingKeeper, legacyQuerierCdc) diff --git a/x/slashing/keeper/signing_info_test.go b/x/slashing/keeper/signing_info_test.go index e10df926c6..1b70c83b97 100644 --- a/x/slashing/keeper/signing_info_test.go +++ b/x/slashing/keeper/signing_info_test.go @@ -5,8 +5,7 @@ import ( "time" "github.com/stretchr/testify/require" - - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" @@ -15,7 +14,7 @@ import ( func TestGetSetValidatorSigningInfo(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) addrDels := simapp.AddTestAddrsIncremental(app, ctx, 1, sdk.TokensFromConsensusPower(200)) info, found := app.SlashingKeeper.GetValidatorSigningInfo(ctx, sdk.ConsAddress(addrDels[0])) @@ -39,7 +38,7 @@ func TestGetSetValidatorSigningInfo(t *testing.T) { func TestGetSetValidatorMissedBlockBitArray(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) addrDels := simapp.AddTestAddrsIncremental(app, ctx, 1, sdk.TokensFromConsensusPower(200)) missed := app.SlashingKeeper.GetValidatorMissedBlockBitArray(ctx, sdk.ConsAddress(addrDels[0]), 0) @@ -51,7 +50,7 @@ func TestGetSetValidatorMissedBlockBitArray(t *testing.T) { func TestTombstoned(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) addrDels := simapp.AddTestAddrsIncremental(app, ctx, 1, sdk.TokensFromConsensusPower(200)) require.Panics(t, func() { app.SlashingKeeper.Tombstone(ctx, sdk.ConsAddress(addrDels[0])) }) @@ -75,7 +74,7 @@ func TestTombstoned(t *testing.T) { func TestJailUntil(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) addrDels := simapp.AddTestAddrsIncremental(app, ctx, 1, sdk.TokensFromConsensusPower(200)) require.Panics(t, func() { app.SlashingKeeper.JailUntil(ctx, sdk.ConsAddress(addrDels[0]), time.Now()) }) diff --git a/x/slashing/simulation/operations_test.go b/x/slashing/simulation/operations_test.go index b3f1dfba47..2ae8d200cd 100644 --- a/x/slashing/simulation/operations_test.go +++ b/x/slashing/simulation/operations_test.go @@ -7,6 +7,7 @@ import ( "github.com/stretchr/testify/require" abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" simappparams "github.com/cosmos/cosmos-sdk/simapp/params" @@ -83,7 +84,7 @@ func TestSimulateMsgUnjail(t *testing.T) { app.DistrKeeper.SetDelegatorStartingInfo(ctx, validator0.OperatorAddress, val0AccAddress, distrtypes.NewDelegatorStartingInfo(2, sdk.OneDec(), 200)) // begin a new block - app.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: app.LastBlockHeight() + 1, AppHash: app.LastCommitID().Hash, Time: blockTime}}) + app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: app.LastBlockHeight() + 1, AppHash: app.LastCommitID().Hash, Time: blockTime}}) // execute operation op := simulation.SimulateMsgUnjail(app.AccountKeeper, app.BankKeeper, app.SlashingKeeper, app.StakingKeeper) @@ -103,7 +104,7 @@ func TestSimulateMsgUnjail(t *testing.T) { func createTestApp(isCheckTx bool) (*simapp.SimApp, sdk.Context) { app := simapp.Setup(isCheckTx) - ctx := app.BaseApp.NewContext(isCheckTx, abci.Header{}) + ctx := app.BaseApp.NewContext(isCheckTx, tmproto.Header{}) app.MintKeeper.SetParams(ctx, minttypes.DefaultParams()) app.MintKeeper.SetMinter(ctx, minttypes.DefaultInitialMinter()) diff --git a/x/staking/app_test.go b/x/staking/app_test.go index 457003475e..2de07c62a9 100644 --- a/x/staking/app_test.go +++ b/x/staking/app_test.go @@ -5,6 +5,7 @@ import ( "github.com/stretchr/testify/require" abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" @@ -14,7 +15,7 @@ import ( ) func checkValidator(t *testing.T, app *simapp.SimApp, addr sdk.ValAddress, expFound bool) types.Validator { - ctxCheck := app.BaseApp.NewContext(true, abci.Header{}) + ctxCheck := app.BaseApp.NewContext(true, tmproto.Header{}) validator, found := app.StakingKeeper.GetValidator(ctxCheck, addr) require.Equal(t, expFound, found) @@ -26,7 +27,7 @@ func checkDelegation( validatorAddr sdk.ValAddress, expFound bool, expShares sdk.Dec, ) { - ctxCheck := app.BaseApp.NewContext(true, abci.Header{}) + ctxCheck := app.BaseApp.NewContext(true, tmproto.Header{}) delegation, found := app.StakingKeeper.GetDelegation(ctxCheck, delegatorAddr, validatorAddr) if expFound { require.True(t, found) @@ -65,16 +66,16 @@ func TestStakingMsgs(t *testing.T) { // create validator description := types.NewDescription("foo_moniker", "", "", "", "") createValidatorMsg := types.NewMsgCreateValidator( - sdk.ValAddress(addr1), priv1.PubKey(), bondCoin, description, commissionRates, sdk.OneInt(), + sdk.ValAddress(addr1), valKey.PubKey(), bondCoin, description, commissionRates, sdk.OneInt(), ) - header := abci.Header{Height: app.LastBlockHeight() + 1} + header := tmproto.Header{Height: app.LastBlockHeight() + 1} txGen := simapp.MakeEncodingConfig().TxConfig _, _, err := simapp.SignCheckDeliver(t, txGen, app.BaseApp, header, []sdk.Msg{createValidatorMsg}, []uint64{0}, []uint64{0}, true, true, priv1) require.NoError(t, err) simapp.CheckBalance(t, app, addr1, sdk.Coins{genCoin.Sub(bondCoin)}) - header = abci.Header{Height: app.LastBlockHeight() + 1} + header = tmproto.Header{Height: app.LastBlockHeight() + 1} app.BeginBlock(abci.RequestBeginBlock{Header: header}) validator := checkValidator(t, app, sdk.ValAddress(addr1), true) @@ -82,14 +83,14 @@ func TestStakingMsgs(t *testing.T) { require.Equal(t, sdk.Bonded, validator.Status) require.True(sdk.IntEq(t, bondTokens, validator.BondedTokens())) - header = abci.Header{Height: app.LastBlockHeight() + 1} + header = tmproto.Header{Height: app.LastBlockHeight() + 1} app.BeginBlock(abci.RequestBeginBlock{Header: header}) // edit the validator description = types.NewDescription("bar_moniker", "", "", "", "") editValidatorMsg := types.NewMsgEditValidator(sdk.ValAddress(addr1), description, nil, nil) - header = abci.Header{Height: app.LastBlockHeight() + 1} + header = tmproto.Header{Height: app.LastBlockHeight() + 1} _, _, err = simapp.SignCheckDeliver(t, txGen, app.BaseApp, header, []sdk.Msg{editValidatorMsg}, []uint64{0}, []uint64{1}, true, true, priv1) require.NoError(t, err) @@ -100,7 +101,7 @@ func TestStakingMsgs(t *testing.T) { simapp.CheckBalance(t, app, addr2, sdk.Coins{genCoin}) delegateMsg := types.NewMsgDelegate(addr2, sdk.ValAddress(addr1), bondCoin) - header = abci.Header{Height: app.LastBlockHeight() + 1} + header = tmproto.Header{Height: app.LastBlockHeight() + 1} _, _, err = simapp.SignCheckDeliver(t, txGen, app.BaseApp, header, []sdk.Msg{delegateMsg}, []uint64{1}, []uint64{0}, true, true, priv2) require.NoError(t, err) @@ -109,7 +110,7 @@ func TestStakingMsgs(t *testing.T) { // begin unbonding beginUnbondingMsg := types.NewMsgUndelegate(addr2, sdk.ValAddress(addr1), bondCoin) - header = abci.Header{Height: app.LastBlockHeight() + 1} + header = tmproto.Header{Height: app.LastBlockHeight() + 1} _, _, err = simapp.SignCheckDeliver(t, txGen, app.BaseApp, header, []sdk.Msg{beginUnbondingMsg}, []uint64{1}, []uint64{1}, true, true, priv2) require.NoError(t, err) diff --git a/x/staking/common_test.go b/x/staking/common_test.go index 10b4f900f5..f029e4eac8 100644 --- a/x/staking/common_test.go +++ b/x/staking/common_test.go @@ -1,9 +1,10 @@ package staking_test import ( - abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/crypto" + "github.com/tendermint/tendermint/crypto/ed25519" "github.com/tendermint/tendermint/crypto/secp256k1" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/simapp" @@ -19,6 +20,9 @@ var ( priv2 = secp256k1.GenPrivKey() addr2 = sdk.AccAddress(priv2.PubKey().Address()) + valKey = ed25519.GenPrivKey() + valAddr = sdk.AccAddress(valKey.PubKey().Address()) + commissionRates = types.NewCommissionRates(sdk.ZeroDec(), sdk.ZeroDec(), sdk.ZeroDec()) PKs = simapp.CreateTestPubKeys(500) @@ -39,7 +43,7 @@ func NewTestMsgDelegate(delAddr sdk.AccAddress, valAddr sdk.ValAddress, amt sdk. // to avoid messing with the hooks. func getBaseSimappWithCustomKeeper() (*codec.LegacyAmino, *simapp.SimApp, sdk.Context) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) appCodec := app.AppCodec() diff --git a/x/staking/handler.go b/x/staking/handler.go index 43dd7441fe..8159365fa0 100644 --- a/x/staking/handler.go +++ b/x/staking/handler.go @@ -6,7 +6,6 @@ import ( metrics "github.com/armon/go-metrics" gogotypes "github.com/gogo/protobuf/types" tmstrings "github.com/tendermint/tendermint/libs/strings" - tmtypes "github.com/tendermint/tendermint/types" "github.com/cosmos/cosmos-sdk/telemetry" sdk "github.com/cosmos/cosmos-sdk/types" @@ -70,12 +69,10 @@ func handleMsgCreateValidator(ctx sdk.Context, msg *types.MsgCreateValidator, k cp := ctx.ConsensusParams() if cp != nil && cp.Validator != nil { - tmPubKey := tmtypes.TM2PB.PubKey(pk) - - if !tmstrings.StringInSlice(tmPubKey.Type, cp.Validator.PubKeyTypes) { + if !tmstrings.StringInSlice(pk.Type(), cp.Validator.PubKeyTypes) { return nil, sdkerrors.Wrapf( types.ErrValidatorPubKeyTypeNotSupported, - "got: %s, expected: %s", tmPubKey.Type, cp.Validator.PubKeyTypes, + "got: %s, expected: %s", pk.Type(), cp.Validator.PubKeyTypes, ) } } diff --git a/x/staking/handler_test.go b/x/staking/handler_test.go index 488fa6b8b5..2e9f6f51ae 100644 --- a/x/staking/handler_test.go +++ b/x/staking/handler_test.go @@ -5,17 +5,16 @@ import ( "testing" "time" - "github.com/cosmos/cosmos-sdk/testutil/testdata" - gogotypes "github.com/gogo/protobuf/types" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/crypto/secp256k1" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" tmtypes "github.com/tendermint/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" + "github.com/cosmos/cosmos-sdk/testutil/testdata" sdk "github.com/cosmos/cosmos-sdk/types" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" "github.com/cosmos/cosmos-sdk/x/staking" @@ -196,7 +195,7 @@ func TestInvalidPubKeyTypeMsgCreateValidator(t *testing.T) { app, ctx, _, valAddrs := bootstrapHandlerGenesisTest(t, 1000, 1, 1000) handler := staking.NewHandler(app.StakingKeeper) ctx = ctx.WithConsensusParams(&abci.ConsensusParams{ - Validator: &abci.ValidatorParams{PubKeyTypes: []string{tmtypes.ABCIPubKeyTypeEd25519}}, + Validator: &tmproto.ValidatorParams{PubKeyTypes: []string{tmtypes.ABCIPubKeyTypeEd25519}}, }) addr := valAddrs[0] @@ -207,14 +206,6 @@ func TestInvalidPubKeyTypeMsgCreateValidator(t *testing.T) { res, err := handler(ctx, msgCreateValidator) require.Error(t, err) require.Nil(t, res) - - ctx = ctx.WithConsensusParams(&abci.ConsensusParams{ - Validator: &abci.ValidatorParams{PubKeyTypes: []string{tmtypes.ABCIPubKeyTypeSecp256k1}}, - }) - - res, err = handler(ctx, msgCreateValidator) - require.NoError(t, err) - require.NotNil(t, res) } func TestLegacyValidatorDelegations(t *testing.T) { @@ -1441,7 +1432,7 @@ func TestInvalidMsg(t *testing.T) { k := keeper.Keeper{} h := staking.NewHandler(k) - res, err := h(sdk.NewContext(nil, abci.Header{}, false, nil), testdata.NewTestMsg()) + res, err := h(sdk.NewContext(nil, tmproto.Header{}, false, nil), testdata.NewTestMsg()) require.Error(t, err) require.Nil(t, res) require.True(t, strings.Contains(err.Error(), "unrecognized staking message type")) diff --git a/x/staking/keeper/common_test.go b/x/staking/keeper/common_test.go index 9ddd24da0b..4239d101f2 100644 --- a/x/staking/keeper/common_test.go +++ b/x/staking/keeper/common_test.go @@ -3,7 +3,7 @@ package keeper_test import ( "testing" - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/simapp" @@ -20,7 +20,7 @@ var ( // to avoid messing with the hooks. func createTestInput() (*codec.LegacyAmino, *simapp.SimApp, sdk.Context) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) appCodec := app.AppCodec() diff --git a/x/staking/keeper/historical_info_test.go b/x/staking/keeper/historical_info_test.go index 37e3b7237f..c4aa2415f5 100644 --- a/x/staking/keeper/historical_info_test.go +++ b/x/staking/keeper/historical_info_test.go @@ -4,14 +4,12 @@ import ( "sort" "testing" - sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/stretchr/testify/require" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" - + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/staking/types" - - "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" ) func TestHistoricalInfo(t *testing.T) { @@ -55,11 +53,11 @@ func TestTrackHistoricalInfo(t *testing.T) { // set historical info at 5, 4 which should be pruned // and check that it has been stored - h4 := abci.Header{ + h4 := tmproto.Header{ ChainID: "HelloChain", Height: 4, } - h5 := abci.Header{ + h5 := tmproto.Header{ ChainID: "HelloChain", Height: 5, } @@ -89,7 +87,7 @@ func TestTrackHistoricalInfo(t *testing.T) { app.StakingKeeper.SetLastValidatorPower(ctx, val2.OperatorAddress, 8) // Set Header for BeginBlock context - header := abci.Header{ + header := tmproto.Header{ ChainID: "HelloChain", Height: 10, } @@ -126,9 +124,9 @@ func TestGetAllHistoricalInfo(t *testing.T) { types.NewValidator(addrVals[1], PKs[1], types.Description{}), } - header1 := abci.Header{ChainID: "HelloChain", Height: 10} - header2 := abci.Header{ChainID: "HelloChain", Height: 11} - header3 := abci.Header{ChainID: "HelloChain", Height: 12} + header1 := tmproto.Header{ChainID: "HelloChain", Height: 10} + header2 := tmproto.Header{ChainID: "HelloChain", Height: 11} + header3 := tmproto.Header{ChainID: "HelloChain", Height: 12} hist1 := types.HistoricalInfo{Header: header1, Valset: valSet} hist2 := types.HistoricalInfo{Header: header2, Valset: valSet} diff --git a/x/staking/keeper/keeper_test.go b/x/staking/keeper/keeper_test.go index b3764d0776..43b91e9ea3 100644 --- a/x/staking/keeper/keeper_test.go +++ b/x/staking/keeper/keeper_test.go @@ -6,7 +6,7 @@ import ( "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/simapp" @@ -27,7 +27,7 @@ type KeeperTestSuite struct { func (suite *KeeperTestSuite) SetupTest() { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) querier := keeper.Querier{Keeper: app.StakingKeeper} @@ -36,7 +36,7 @@ func (suite *KeeperTestSuite) SetupTest() { queryClient := types.NewQueryClient(queryHelper) addrs, _, validators := createValidators(ctx, app, []int64{9, 8, 7}) - header := abci.Header{ + header := tmproto.Header{ ChainID: "HelloChain", Height: 5, } @@ -48,7 +48,7 @@ func (suite *KeeperTestSuite) SetupTest() { } func TestParams(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abci.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) expParams := types.DefaultParams() diff --git a/x/staking/keeper/querier_test.go b/x/staking/keeper/querier_test.go index ae9d2e8078..25214fd062 100644 --- a/x/staking/keeper/querier_test.go +++ b/x/staking/keeper/querier_test.go @@ -4,12 +4,11 @@ import ( "fmt" "testing" - "github.com/cosmos/cosmos-sdk/codec" - "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" + "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/staking/keeper" @@ -33,7 +32,7 @@ func TestNewQuerier(t *testing.T) { app.StakingKeeper.SetValidatorByPowerIndex(ctx, validators[i]) } - header := abci.Header{ + header := tmproto.Header{ ChainID: "HelloChain", Height: 5, } @@ -721,7 +720,7 @@ func TestQueryHistoricalInfo(t *testing.T) { app.StakingKeeper.SetValidator(ctx, val1) app.StakingKeeper.SetValidator(ctx, val2) - header := abci.Header{ + header := tmproto.Header{ ChainID: "HelloChain", Height: 5, } diff --git a/x/staking/keeper/slash_test.go b/x/staking/keeper/slash_test.go index d6f1e06a7e..7eb277b41a 100644 --- a/x/staking/keeper/slash_test.go +++ b/x/staking/keeper/slash_test.go @@ -6,7 +6,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" @@ -92,7 +92,7 @@ func TestSlashUnbondingDelegation(t *testing.T) { require.Equal(t, int64(0), slashAmount.Int64()) // after the expiration time, no longer eligible for slashing - ctx = ctx.WithBlockHeader(abci.Header{Time: time.Unix(10, 0)}) + ctx = ctx.WithBlockHeader(tmproto.Header{Time: time.Unix(10, 0)}) app.StakingKeeper.SetUnbondingDelegation(ctx, ubd) slashAmount = app.StakingKeeper.SlashUnbondingDelegation(ctx, ubd, 0, fraction) require.Equal(t, int64(0), slashAmount.Int64()) @@ -100,7 +100,7 @@ func TestSlashUnbondingDelegation(t *testing.T) { // test valid slash, before expiration timestamp and to which stake contributed notBondedPool := app.StakingKeeper.GetNotBondedPool(ctx) oldUnbondedPoolBalances := app.BankKeeper.GetAllBalances(ctx, notBondedPool.GetAddress()) - ctx = ctx.WithBlockHeader(abci.Header{Time: time.Unix(0, 0)}) + ctx = ctx.WithBlockHeader(tmproto.Header{Time: time.Unix(0, 0)}) app.StakingKeeper.SetUnbondingDelegation(ctx, ubd) slashAmount = app.StakingKeeper.SlashUnbondingDelegation(ctx, ubd, 0, fraction) require.Equal(t, int64(5), slashAmount.Int64()) @@ -149,7 +149,7 @@ func TestSlashRedelegation(t *testing.T) { require.Equal(t, int64(0), slashAmount.Int64()) // after the expiration time, no longer eligible for slashing - ctx = ctx.WithBlockHeader(abci.Header{Time: time.Unix(10, 0)}) + ctx = ctx.WithBlockHeader(tmproto.Header{Time: time.Unix(10, 0)}) app.StakingKeeper.SetRedelegation(ctx, rd) validator, found = app.StakingKeeper.GetValidator(ctx, addrVals[1]) require.True(t, found) @@ -159,7 +159,7 @@ func TestSlashRedelegation(t *testing.T) { balances = app.BankKeeper.GetAllBalances(ctx, bondedPool.GetAddress()) // test valid slash, before expiration timestamp and to which stake contributed - ctx = ctx.WithBlockHeader(abci.Header{Time: time.Unix(0, 0)}) + ctx = ctx.WithBlockHeader(tmproto.Header{Time: time.Unix(0, 0)}) app.StakingKeeper.SetRedelegation(ctx, rd) validator, found = app.StakingKeeper.GetValidator(ctx, addrVals[1]) require.True(t, found) diff --git a/x/staking/keeper/validator_test.go b/x/staking/keeper/validator_test.go index ce34b0d234..d507544b81 100644 --- a/x/staking/keeper/validator_test.go +++ b/x/staking/keeper/validator_test.go @@ -7,7 +7,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" @@ -1075,7 +1075,7 @@ func TestApplyAndReturnValidatorSetUpdatesBondTransition(t *testing.T) { func TestUpdateValidatorCommission(t *testing.T) { app, ctx, _, addrVals := bootstrapValidatorTest(t, 1000, 20) - ctx = ctx.WithBlockHeader(abci.Header{Time: time.Now().UTC()}) + ctx = ctx.WithBlockHeader(tmproto.Header{Time: time.Now().UTC()}) commission1 := types.NewCommissionWithTime( sdk.NewDecWithPrec(1, 1), sdk.NewDecWithPrec(3, 1), diff --git a/x/staking/module_test.go b/x/staking/module_test.go index fa7cf6a83f..b1d126d0c3 100644 --- a/x/staking/module_test.go +++ b/x/staking/module_test.go @@ -5,6 +5,7 @@ import ( "github.com/stretchr/testify/require" abcitypes "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" @@ -13,7 +14,7 @@ import ( func TestItCreatesModuleAccountOnInitBlock(t *testing.T) { app := simapp.Setup(false) - ctx := app.BaseApp.NewContext(false, abcitypes.Header{}) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) app.InitChain( abcitypes.RequestInitChain{ diff --git a/x/staking/simulation/genesis.go b/x/staking/simulation/genesis.go index ffe07f6809..d30f19b079 100644 --- a/x/staking/simulation/genesis.go +++ b/x/staking/simulation/genesis.go @@ -85,7 +85,7 @@ func RandomizedGenState(simState *module.SimulationState) { simulation.RandomDecAmount(simState.Rand, maxCommission), ) - validator := types.NewValidator(valAddr, simState.Accounts[i].PubKey, types.Description{}) + validator := types.NewValidator(valAddr, simState.Accounts[i].ConsKey.PubKey(), types.Description{}) validator.Tokens = sdk.NewInt(simState.InitialStake) validator.DelegatorShares = sdk.NewDec(simState.InitialStake) validator.Commission = commission diff --git a/x/staking/simulation/genesis_test.go b/x/staking/simulation/genesis_test.go index 7d8d8feaa6..66acafb52f 100644 --- a/x/staking/simulation/genesis_test.go +++ b/x/staking/simulation/genesis_test.go @@ -50,7 +50,7 @@ func TestRandomizedGenState(t *testing.T) { require.Equal(t, "1000.000000000000000000", stakingGenesis.Delegations[0].Shares.String()) // check validators require.Equal(t, "cosmosvaloper1ghekyjucln7y67ntx7cf27m9dpuxxemnsvnaes", stakingGenesis.Validators[2].OperatorAddress.String()) - require.Equal(t, "cosmosvalconspub1addwnpepqwr8k5g44urevkvz5ys2qjag0nnp6xkd2f8lejn5pw2rehkjt6ftv5d9nrp", stakingGenesis.Validators[2].ConsensusPubkey) + require.Equal(t, "cosmosvalconspub1zcjduepq280tm686ma80cva9z620dmknd9a858pd2zmq9ackfenfllecjxds0hg9n7", stakingGenesis.Validators[2].ConsensusPubkey) require.Equal(t, false, stakingGenesis.Validators[2].Jailed) require.Equal(t, "Unbonded", stakingGenesis.Validators[2].Status.String()) require.Equal(t, "1000", stakingGenesis.Validators[2].Tokens.String()) diff --git a/x/staking/simulation/operations.go b/x/staking/simulation/operations.go index f53762df37..5c0e21a491 100644 --- a/x/staking/simulation/operations.go +++ b/x/staking/simulation/operations.go @@ -148,8 +148,7 @@ func SimulateMsgCreateValidator(ak types.AccountKeeper, bk types.BankKeeper, k k simtypes.RandomDecAmount(r, maxCommission), ) - msg := types.NewMsgCreateValidator(address, simAccount.PubKey, - selfDelegation, description, commission, sdk.OneInt()) + msg := types.NewMsgCreateValidator(address, simAccount.ConsKey.PubKey(), selfDelegation, description, commission, sdk.OneInt()) txGen := simappparams.MakeEncodingConfig().TxConfig tx, err := helpers.GenTx( diff --git a/x/staking/simulation/operations_test.go b/x/staking/simulation/operations_test.go index 2f242d84d0..13553ed122 100644 --- a/x/staking/simulation/operations_test.go +++ b/x/staking/simulation/operations_test.go @@ -7,6 +7,7 @@ import ( "github.com/stretchr/testify/require" abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/simapp" simappparams "github.com/cosmos/cosmos-sdk/simapp/params" @@ -69,7 +70,7 @@ func TestSimulateMsgCreateValidator(t *testing.T) { accounts := getTestingAccounts(t, r, app, ctx, 3) // begin a new block - app.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: app.LastBlockHeight() + 1, AppHash: app.LastCommitID().Hash}}) + app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: app.LastBlockHeight() + 1, AppHash: app.LastCommitID().Hash}}) // execute operation op := simulation.SimulateMsgCreateValidator(app.AccountKeeper, app.BankKeeper, app.StakingKeeper) @@ -84,8 +85,8 @@ func TestSimulateMsgCreateValidator(t *testing.T) { require.Equal(t, "0.660000000000000000", msg.Commission.MaxRate.String()) require.Equal(t, "0.047464127245687382", msg.Commission.Rate.String()) require.Equal(t, types.TypeMsgCreateValidator, msg.Type()) + require.Equal(t, "cosmosvalconspub1zcjduepq280tm686ma80cva9z620dmknd9a858pd2zmq9ackfenfllecjxds0hg9n7", msg.Pubkey) require.Equal(t, "cosmos1ghekyjucln7y67ntx7cf27m9dpuxxemn4c8g4r", msg.DelegatorAddress.String()) - require.Equal(t, "cosmosvalconspub1addwnpepqwr8k5g44urevkvz5ys2qjag0nnp6xkd2f8lejn5pw2rehkjt6ftv5d9nrp", msg.Pubkey) require.Equal(t, "cosmosvaloper1ghekyjucln7y67ntx7cf27m9dpuxxemnsvnaes", msg.ValidatorAddress.String()) require.Len(t, futureOperations, 0) } @@ -106,7 +107,7 @@ func TestSimulateMsgEditValidator(t *testing.T) { _ = getTestingValidator0(t, app, ctx, accounts) // begin a new block - app.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: app.LastBlockHeight() + 1, AppHash: app.LastCommitID().Hash, Time: blockTime}}) + app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: app.LastBlockHeight() + 1, AppHash: app.LastCommitID().Hash, Time: blockTime}}) // execute operation op := simulation.SimulateMsgEditValidator(app.AccountKeeper, app.BankKeeper, app.StakingKeeper) @@ -144,7 +145,7 @@ func TestSimulateMsgDelegate(t *testing.T) { setupValidatorRewards(app, ctx, validator0.OperatorAddress) // begin a new block - app.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: app.LastBlockHeight() + 1, AppHash: app.LastCommitID().Hash, Time: blockTime}}) + app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: app.LastBlockHeight() + 1, AppHash: app.LastCommitID().Hash, Time: blockTime}}) // execute operation op := simulation.SimulateMsgDelegate(app.AccountKeeper, app.BankKeeper, app.StakingKeeper) @@ -189,7 +190,7 @@ func TestSimulateMsgUndelegate(t *testing.T) { setupValidatorRewards(app, ctx, validator0.OperatorAddress) // begin a new block - app.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: app.LastBlockHeight() + 1, AppHash: app.LastCommitID().Hash, Time: blockTime}}) + app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: app.LastBlockHeight() + 1, AppHash: app.LastCommitID().Hash, Time: blockTime}}) // execute operation op := simulation.SimulateMsgUndelegate(app.AccountKeeper, app.BankKeeper, app.StakingKeeper) @@ -238,7 +239,7 @@ func TestSimulateMsgBeginRedelegate(t *testing.T) { setupValidatorRewards(app, ctx, validator1.OperatorAddress) // begin a new block - app.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: app.LastBlockHeight() + 1, AppHash: app.LastCommitID().Hash, Time: blockTime}}) + app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: app.LastBlockHeight() + 1, AppHash: app.LastCommitID().Hash, Time: blockTime}}) // execute operation op := simulation.SimulateMsgBeginRedelegate(app.AccountKeeper, app.BankKeeper, app.StakingKeeper) @@ -263,7 +264,7 @@ func TestSimulateMsgBeginRedelegate(t *testing.T) { func createTestApp(isCheckTx bool) (*simapp.SimApp, sdk.Context) { app := simapp.Setup(isCheckTx) - ctx := app.BaseApp.NewContext(isCheckTx, abci.Header{}) + ctx := app.BaseApp.NewContext(isCheckTx, tmproto.Header{}) app.MintKeeper.SetParams(ctx, minttypes.DefaultParams()) app.MintKeeper.SetMinter(ctx, minttypes.DefaultInitialMinter()) diff --git a/x/staking/spec/01_state.md b/x/staking/spec/01_state.md index 3ee6c7992e..c5f7376d76 100644 --- a/x/staking/spec/01_state.md +++ b/x/staking/spec/01_state.md @@ -290,7 +290,7 @@ the `n` most recent historical info defined by staking module parameter: `Histor ```go type HistoricalInfo struct { - Header abci.Header + Header tmproto.Header ValSet []types.Validator } ``` diff --git a/x/staking/types/historical_info.go b/x/staking/types/historical_info.go index 7af34d13c5..fc4dc2906b 100644 --- a/x/staking/types/historical_info.go +++ b/x/staking/types/historical_info.go @@ -3,7 +3,7 @@ package types import ( "sort" - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/codec" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" @@ -11,7 +11,7 @@ import ( // NewHistoricalInfo will create a historical information struct from header and valset // it will first sort valset before inclusion into historical info -func NewHistoricalInfo(header abci.Header, valSet Validators) HistoricalInfo { +func NewHistoricalInfo(header tmproto.Header, valSet Validators) HistoricalInfo { sort.Sort(valSet) return HistoricalInfo{ diff --git a/x/staking/types/historical_info_test.go b/x/staking/types/historical_info_test.go index 32e149af56..e37ca88218 100644 --- a/x/staking/types/historical_info_test.go +++ b/x/staking/types/historical_info_test.go @@ -6,7 +6,7 @@ import ( "testing" "github.com/stretchr/testify/require" - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" ) var ( @@ -15,7 +15,7 @@ var ( NewValidator(valAddr2, pk2, Description{}), NewValidator(valAddr3, pk3, Description{}), } - header = abci.Header{ + header = tmproto.Header{ ChainID: "hello", Height: 5, } diff --git a/x/staking/types/staking.pb.go b/x/staking/types/staking.pb.go index 02627b96d7..8293372f46 100644 --- a/x/staking/types/staking.pb.go +++ b/x/staking/types/staking.pb.go @@ -16,7 +16,7 @@ import ( github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" _ "github.com/golang/protobuf/ptypes/duration" _ "github.com/golang/protobuf/ptypes/timestamp" - types "github.com/tendermint/tendermint/abci/types" + types "github.com/tendermint/tendermint/proto/tendermint/types" io "io" io_ioutil "io/ioutil" math "math" @@ -1149,113 +1149,112 @@ func init() { } var fileDescriptor_64c30c6cf92913c9 = []byte{ - // 1687 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x59, 0xcb, 0x6f, 0x1b, 0x5b, - 0x19, 0xcf, 0xd8, 0xa9, 0xe3, 0x7c, 0x4e, 0xe2, 0xf8, 0xb4, 0x0d, 0x4e, 0xe0, 0x7a, 0xd2, 0xe1, - 0x0a, 0x82, 0xc4, 0xb5, 0x49, 0x40, 0x42, 0x84, 0x05, 0xd4, 0x71, 0xab, 0x44, 0xf4, 0x42, 0xee, - 0xa4, 0x04, 0x09, 0xae, 0xb0, 0x8e, 0x67, 0x4e, 0x9c, 0x43, 0x3c, 0x33, 0x66, 0xce, 0x71, 0x6f, - 0x72, 0x75, 0x17, 0x6c, 0x90, 0x10, 0x12, 0xa2, 0x0b, 0x16, 0x5d, 0x46, 0xf0, 0x07, 0xf0, 0x1f, - 0xc0, 0xb6, 0x88, 0x4d, 0xd9, 0x20, 0x84, 0x90, 0x41, 0xed, 0x06, 0xd8, 0x80, 0xbc, 0x60, 0xc1, - 0x06, 0x74, 0x1e, 0xf3, 0xc8, 0x38, 0x6e, 0xe3, 0x80, 0x04, 0xd2, 0xed, 0xa6, 0xf5, 0xf9, 0xe6, - 0x7b, 0xfe, 0xbe, 0xc7, 0x79, 0x04, 0xde, 0x74, 0x02, 0xe6, 0x05, 0xac, 0xc1, 0x38, 0x3e, 0xa1, - 0x7e, 0xb7, 0xf1, 0x68, 0xb3, 0x43, 0x38, 0xde, 0x8c, 0xd6, 0xf5, 0x7e, 0x18, 0xf0, 0x00, 0xad, - 0x28, 0xae, 0x7a, 0x44, 0xd5, 0x5c, 0x6b, 0xb7, 0xba, 0x41, 0x37, 0x90, 0x2c, 0x0d, 0xf1, 0x4b, - 0x71, 0xaf, 0xdd, 0xe1, 0xc4, 0x77, 0x49, 0xe8, 0x51, 0x9f, 0x37, 0x70, 0xc7, 0xa1, 0x0d, 0x7e, - 0xd6, 0x27, 0x4c, 0xfd, 0xab, 0x59, 0xcc, 0x6e, 0x10, 0x74, 0x7b, 0xa4, 0x21, 0x57, 0x9d, 0xc1, - 0x51, 0x83, 0x53, 0x8f, 0x30, 0x8e, 0xbd, 0xbe, 0x66, 0xa8, 0x65, 0x19, 0xdc, 0x41, 0x88, 0x39, - 0x0d, 0xfc, 0xe8, 0xbb, 0xf6, 0xbb, 0x83, 0x19, 0x89, 0x9d, 0x76, 0x02, 0xaa, 0xbf, 0x5b, 0x3f, - 0x31, 0x60, 0x69, 0x97, 0x32, 0x1e, 0x84, 0xd4, 0xc1, 0xbd, 0x3d, 0xff, 0x28, 0x40, 0x5f, 0x84, - 0xc2, 0x31, 0xc1, 0x2e, 0x09, 0xab, 0xc6, 0xba, 0xb1, 0x51, 0xda, 0x7a, 0xa3, 0x9e, 0xf8, 0x59, - 0x17, 0x7e, 0xd6, 0x95, 0x87, 0xbb, 0x92, 0xa9, 0x39, 0xfb, 0x74, 0x68, 0xce, 0xd8, 0x5a, 0x04, - 0x7d, 0x09, 0x0a, 0x8f, 0x70, 0x8f, 0x11, 0x5e, 0xcd, 0xad, 0xe7, 0x37, 0x4a, 0x5b, 0x77, 0xea, - 0x97, 0x43, 0x52, 0x3f, 0xc4, 0x3d, 0xea, 0x62, 0x1e, 0xc4, 0x0a, 0x94, 0xd8, 0xf6, 0xec, 0x9f, - 0xcf, 0x4d, 0xc3, 0xfa, 0x79, 0x0e, 0xca, 0x3b, 0x81, 0xe7, 0x51, 0xc6, 0x68, 0xe0, 0xdb, 0x98, - 0x13, 0x86, 0x9a, 0x30, 0x1b, 0x62, 0x4e, 0xa4, 0x57, 0xf3, 0xcd, 0xba, 0x90, 0xfa, 0xfd, 0xd0, - 0xfc, 0x44, 0x97, 0xf2, 0xe3, 0x41, 0xa7, 0xee, 0x04, 0x5e, 0x43, 0xc7, 0xaa, 0xfe, 0x7b, 0x8b, - 0xb9, 0x27, 0x1a, 0xcb, 0x16, 0x71, 0x6c, 0x29, 0x8b, 0xde, 0x85, 0xa2, 0x87, 0x4f, 0xdb, 0x52, - 0x4f, 0x4e, 0xea, 0xb9, 0x3b, 0x9d, 0x9e, 0xd1, 0xd0, 0x2c, 0x9f, 0x61, 0xaf, 0xb7, 0x6d, 0x45, - 0x7a, 0x2c, 0x7b, 0xce, 0xc3, 0xa7, 0xc2, 0x45, 0xd4, 0x87, 0xb2, 0xa0, 0x3a, 0xc7, 0xd8, 0xef, - 0x12, 0x65, 0x24, 0x2f, 0x8d, 0xec, 0x4e, 0x6d, 0x64, 0x25, 0x31, 0x92, 0x52, 0x67, 0xd9, 0x8b, - 0x1e, 0x3e, 0xdd, 0x91, 0x04, 0x61, 0x71, 0xbb, 0xf8, 0xe4, 0xdc, 0x9c, 0x91, 0x88, 0xfd, 0xc6, - 0x00, 0x48, 0x10, 0x43, 0xef, 0xc2, 0xb2, 0x13, 0xaf, 0xa4, 0x2c, 0xd3, 0xe9, 0xfc, 0xe4, 0xa4, - 0x8c, 0x64, 0xf0, 0x6e, 0x16, 0x85, 0xd3, 0xcf, 0x86, 0xa6, 0x61, 0x97, 0x9d, 0x4c, 0x2a, 0xbe, - 0x05, 0xa5, 0x41, 0xdf, 0xc5, 0x9c, 0xb4, 0x45, 0x3d, 0x4a, 0x24, 0x4b, 0x5b, 0x6b, 0x75, 0x55, - 0x8b, 0xf5, 0xa8, 0x16, 0xeb, 0x0f, 0xa3, 0x62, 0x6d, 0xd6, 0x84, 0xae, 0xd1, 0xd0, 0x44, 0x2a, - 0xac, 0x94, 0xb0, 0xf5, 0xf8, 0x8f, 0xa6, 0x61, 0x83, 0xa2, 0x08, 0x81, 0x54, 0x4c, 0xbf, 0x32, - 0xa0, 0xd4, 0x22, 0xcc, 0x09, 0x69, 0x5f, 0x94, 0x34, 0xaa, 0xc2, 0x9c, 0x17, 0xf8, 0xf4, 0x44, - 0x97, 0xe6, 0xbc, 0x1d, 0x2d, 0xd1, 0x1a, 0x14, 0xa9, 0x4b, 0x7c, 0x4e, 0xf9, 0x99, 0xca, 0xab, - 0x1d, 0xaf, 0x85, 0xd4, 0x7b, 0xa4, 0xc3, 0x68, 0x94, 0x0d, 0x3b, 0x5a, 0xa2, 0xfb, 0xb0, 0xcc, - 0x88, 0x33, 0x08, 0x29, 0x3f, 0x6b, 0x3b, 0x81, 0xcf, 0xb1, 0xc3, 0xab, 0xb3, 0x32, 0x61, 0x1f, - 0x1d, 0x0d, 0xcd, 0x8f, 0x28, 0x5f, 0xb3, 0x1c, 0x96, 0x5d, 0x8e, 0x48, 0x3b, 0x8a, 0x22, 0x2c, - 0xb8, 0x84, 0x63, 0xda, 0x63, 0xd5, 0x1b, 0xca, 0x82, 0x5e, 0xa6, 0x62, 0xf9, 0xc5, 0x1c, 0xcc, - 0xc7, 0x35, 0x8f, 0xde, 0x83, 0xe5, 0xa0, 0x4f, 0x42, 0xf1, 0xbb, 0x8d, 0x5d, 0x37, 0x24, 0x4c, - 0xa5, 0x67, 0xa1, 0xf9, 0x20, 0xb1, 0x9c, 0xe5, 0xb0, 0xfe, 0x39, 0x34, 0xdf, 0xba, 0x42, 0x05, - 0x1d, 0xe2, 0xde, 0x5d, 0x25, 0x61, 0x97, 0x23, 0x1d, 0x9a, 0x20, 0x42, 0x76, 0x02, 0x9f, 0x11, - 0x9f, 0x0d, 0x58, 0xbb, 0x3f, 0xe8, 0x9c, 0x10, 0x0d, 0x58, 0x3a, 0xe4, 0x2c, 0x87, 0x25, 0x2a, - 0x40, 0x93, 0xf6, 0x25, 0x05, 0xad, 0x40, 0xe1, 0x3b, 0x98, 0xf6, 0x88, 0x2b, 0x31, 0x2d, 0xda, - 0x7a, 0x85, 0xf6, 0xa0, 0xc0, 0x38, 0xe6, 0x03, 0x26, 0x81, 0xbc, 0xd1, 0xdc, 0xbc, 0xa2, 0xcf, - 0xcd, 0xc0, 0x77, 0x0f, 0xa4, 0xa0, 0xad, 0x15, 0xa0, 0xfb, 0x50, 0xe0, 0xc1, 0x09, 0xf1, 0x35, - 0xa8, 0x53, 0x75, 0xfc, 0x9e, 0xcf, 0x6d, 0x2d, 0x8d, 0x38, 0x2c, 0xbb, 0xa4, 0x47, 0xba, 0x12, - 0x4a, 0x76, 0x8c, 0x43, 0xc2, 0xaa, 0x05, 0xa9, 0x71, 0x6f, 0xea, 0xb6, 0xd4, 0x00, 0x65, 0xf5, - 0x59, 0x76, 0x39, 0x26, 0x1d, 0x48, 0x0a, 0xfa, 0x0a, 0x94, 0xdc, 0xa4, 0x74, 0xab, 0x73, 0xb2, - 0x45, 0x3e, 0x3e, 0xa9, 0xf7, 0x52, 0x55, 0xae, 0xe7, 0x61, 0x5a, 0x5a, 0x64, 0x6d, 0xe0, 0x77, - 0x02, 0xdf, 0xa5, 0x7e, 0xb7, 0x7d, 0x4c, 0x68, 0xf7, 0x98, 0x57, 0x8b, 0xeb, 0xc6, 0x46, 0x3e, - 0x9d, 0xb5, 0x2c, 0x87, 0x65, 0x97, 0x63, 0xd2, 0xae, 0xa4, 0x20, 0x17, 0x96, 0x12, 0x2e, 0xd9, - 0xba, 0xf3, 0xaf, 0x6c, 0xdd, 0x3b, 0xba, 0x75, 0x6f, 0x67, 0xad, 0x24, 0xdd, 0xbb, 0x18, 0x13, - 0x85, 0x18, 0xda, 0x05, 0x48, 0x06, 0x46, 0x15, 0xa4, 0x05, 0xeb, 0xd5, 0x53, 0x47, 0x07, 0x9e, - 0x92, 0x45, 0x1f, 0xc0, 0x4d, 0x8f, 0xfa, 0x6d, 0x46, 0x7a, 0x47, 0x6d, 0x0d, 0xb0, 0x50, 0x59, - 0x92, 0xd9, 0x7b, 0x30, 0x5d, 0x3d, 0x8c, 0x86, 0xe6, 0x9a, 0x1e, 0xaa, 0xe3, 0x2a, 0x2d, 0xbb, - 0xe2, 0x51, 0xff, 0x80, 0xf4, 0x8e, 0x5a, 0x31, 0x6d, 0x7b, 0xe1, 0x07, 0xe7, 0xe6, 0x4c, 0xdc, - 0xc0, 0x14, 0x16, 0x92, 0xc6, 0x22, 0x0c, 0x7d, 0x0d, 0xe6, 0x71, 0xb4, 0xa8, 0x1a, 0xeb, 0xf9, - 0x8d, 0x85, 0x2b, 0x17, 0x7b, 0xaa, 0x41, 0x13, 0x1d, 0x6a, 0x56, 0x7c, 0xef, 0x0f, 0xeb, 0x86, - 0xf5, 0xc3, 0x1c, 0x14, 0x5a, 0x87, 0xfb, 0x98, 0x86, 0xe8, 0x7d, 0xa8, 0x24, 0xc5, 0x76, 0x71, - 0x52, 0xbc, 0x3d, 0x1a, 0x9a, 0xd5, 0x6c, 0x3d, 0x4e, 0x39, 0x2a, 0xee, 0x3a, 0x4e, 0xe4, 0x49, - 0xd2, 0x24, 0xd1, 0xac, 0x78, 0x1f, 0x2a, 0x8f, 0xa2, 0x89, 0x15, 0xdb, 0xce, 0x65, 0x6d, 0x8f, - 0xb1, 0x5c, 0x63, 0x4c, 0x2d, 0xc7, 0x4a, 0x34, 0x25, 0x35, 0x38, 0xef, 0xc1, 0x9c, 0xc2, 0x82, - 0xa1, 0x6d, 0xb8, 0xd1, 0x17, 0x3f, 0x24, 0xdc, 0xa5, 0xad, 0xda, 0xc4, 0x6e, 0x92, 0xfc, 0xba, - 0x9e, 0x94, 0x88, 0xf5, 0xd3, 0x3c, 0x40, 0xeb, 0xf0, 0xf0, 0x61, 0x48, 0xfb, 0x3d, 0xc2, 0xff, - 0xa7, 0xb8, 0x7e, 0xdf, 0x80, 0xdb, 0x09, 0x6a, 0x2c, 0x74, 0x32, 0xe0, 0xbe, 0x33, 0x1a, 0x9a, - 0x1f, 0xcb, 0x82, 0x9b, 0x62, 0xbb, 0x06, 0xc0, 0x37, 0x63, 0x45, 0x07, 0xa1, 0x73, 0xb9, 0x1f, - 0x2e, 0xe3, 0xb1, 0x1f, 0xf9, 0xc9, 0x7e, 0xa4, 0xd8, 0xfe, 0x23, 0x3f, 0x5a, 0x8c, 0x8f, 0xe7, - 0xfa, 0x00, 0x4a, 0x49, 0x8e, 0x18, 0x6a, 0x41, 0x91, 0xeb, 0xdf, 0x3a, 0xe5, 0xd6, 0xe4, 0x94, - 0x47, 0x62, 0x3a, 0xed, 0xb1, 0xa4, 0xf5, 0xdb, 0x1c, 0x40, 0xd2, 0xd5, 0x1f, 0xd6, 0x8e, 0x12, - 0xdb, 0xa9, 0xde, 0xfc, 0xf2, 0xd7, 0x3a, 0x40, 0x6b, 0xe9, 0x54, 0xb6, 0xfe, 0x92, 0x83, 0x9b, - 0x5f, 0x8f, 0x26, 0xff, 0x6b, 0x84, 0xd1, 0x3e, 0xcc, 0x11, 0x9f, 0x87, 0x54, 0x42, 0x2c, 0xaa, - 0xf5, 0x33, 0x93, 0xaa, 0xf5, 0x12, 0xd4, 0xee, 0xf9, 0x3c, 0x3c, 0xd3, 0xb5, 0x1b, 0xa9, 0x49, - 0x61, 0xfd, 0xe3, 0x3c, 0x54, 0x27, 0x49, 0xa1, 0x1d, 0x28, 0x3b, 0x21, 0x91, 0x84, 0xe8, 0x74, - 0x60, 0xc8, 0xd3, 0xc1, 0x5a, 0x72, 0x93, 0xc8, 0x30, 0x58, 0xf6, 0x52, 0x44, 0xd1, 0x67, 0x83, - 0x2e, 0x88, 0x63, 0xbe, 0x68, 0x19, 0xc1, 0x75, 0xc5, 0x73, 0xbd, 0xa5, 0x0f, 0x07, 0x91, 0x91, - 0x8b, 0x0a, 0xd4, 0xe9, 0x60, 0x29, 0xa1, 0xca, 0xe3, 0xc1, 0x77, 0xa1, 0x4c, 0x7d, 0xca, 0x29, - 0xee, 0xb5, 0x3b, 0xb8, 0x87, 0x7d, 0xe7, 0x3a, 0xb7, 0x24, 0xb5, 0xa1, 0x6b, 0xb3, 0x19, 0x75, - 0x96, 0xbd, 0xa4, 0x29, 0x4d, 0x45, 0x40, 0xbb, 0x30, 0x17, 0x99, 0x9a, 0xbd, 0xd6, 0x59, 0x32, - 0x12, 0x4f, 0x65, 0xe4, 0x47, 0x79, 0xa8, 0xd8, 0xc4, 0x7d, 0x9d, 0x8a, 0xe9, 0x52, 0xf1, 0x36, - 0x80, 0x1a, 0x24, 0x62, 0x27, 0xb9, 0x46, 0x36, 0xc4, 0x28, 0x9a, 0x57, 0x1a, 0x5a, 0x8c, 0xa7, - 0xf2, 0xf1, 0xb7, 0x3c, 0x2c, 0xa4, 0xf3, 0xf1, 0x7a, 0x8b, 0xff, 0xff, 0xd9, 0xe2, 0xd1, 0x5e, - 0x32, 0x1a, 0x67, 0xe5, 0x68, 0xfc, 0xd4, 0xa4, 0xd1, 0x38, 0xd6, 0x52, 0x93, 0x67, 0xe2, 0x3f, - 0x72, 0x50, 0xd8, 0xc7, 0x21, 0xf6, 0x18, 0x72, 0xc6, 0x2e, 0x36, 0xea, 0xb1, 0x63, 0x75, 0xac, - 0x61, 0x5a, 0xfa, 0x7d, 0xec, 0x15, 0xf7, 0x9a, 0x27, 0x97, 0xdc, 0x6b, 0xbe, 0x0c, 0x4b, 0x1e, - 0x3e, 0x6d, 0xc7, 0xf1, 0xa9, 0x64, 0x2e, 0x36, 0x57, 0x13, 0x2d, 0x17, 0xbf, 0xab, 0xe7, 0x9a, - 0xf8, 0xd6, 0xcf, 0xd0, 0xe7, 0xa1, 0x24, 0x38, 0x92, 0x5d, 0x42, 0x88, 0xaf, 0x24, 0xef, 0x22, - 0xa9, 0x8f, 0x96, 0x0d, 0x1e, 0x3e, 0xbd, 0xa7, 0x16, 0xe8, 0x01, 0xa0, 0xe3, 0xf8, 0x95, 0xae, - 0x9d, 0x40, 0x29, 0xe4, 0xdf, 0x18, 0x0d, 0xcd, 0x55, 0x25, 0x3f, 0xce, 0x63, 0xd9, 0x95, 0x84, - 0x18, 0x69, 0xfb, 0x1c, 0x80, 0x88, 0xab, 0xed, 0x12, 0x3f, 0xf0, 0xf4, 0xed, 0xfa, 0xf6, 0x68, - 0x68, 0x56, 0x94, 0x96, 0xe4, 0x9b, 0x65, 0xcf, 0x8b, 0x45, 0x4b, 0xfc, 0x4e, 0x01, 0xff, 0x33, - 0x03, 0x50, 0xb2, 0x07, 0xd9, 0x84, 0xf5, 0x03, 0x9f, 0xc9, 0x7b, 0x5f, 0xea, 0x92, 0x66, 0xbc, - 0xfc, 0xde, 0x97, 0xc8, 0x47, 0xf7, 0xbe, 0x54, 0xeb, 0x7e, 0x21, 0x99, 0xd7, 0x39, 0x9d, 0x47, - 0xad, 0xa6, 0x83, 0x19, 0x49, 0xdd, 0x1d, 0x69, 0x24, 0x7d, 0xc9, 0x80, 0xfe, 0xb5, 0x01, 0xab, - 0x63, 0xd5, 0x14, 0x3b, 0xfb, 0x6d, 0x40, 0x61, 0xea, 0xa3, 0xc4, 0xeb, 0x4c, 0x3b, 0x3d, 0x75, - 0x71, 0x56, 0xc2, 0xb1, 0x8d, 0xe0, 0xbf, 0xb7, 0xe5, 0xa8, 0x17, 0xd1, 0x5f, 0x1a, 0x70, 0x2b, - 0x6d, 0x3e, 0x0e, 0xe4, 0xab, 0xb0, 0x90, 0xb6, 0xae, 0x43, 0x78, 0xf3, 0x2a, 0x21, 0x68, 0xef, - 0x2f, 0xc8, 0xa3, 0x77, 0x92, 0x56, 0x55, 0x4f, 0xb8, 0x9b, 0x57, 0x46, 0x23, 0xf2, 0x29, 0xdb, - 0xb2, 0x2a, 0x82, 0x7f, 0x19, 0x30, 0xbb, 0x1f, 0x04, 0x3d, 0x14, 0x40, 0xc5, 0x0f, 0x78, 0x5b, - 0x54, 0x16, 0x71, 0xdb, 0xfa, 0x8d, 0x47, 0xbd, 0xea, 0xee, 0x4c, 0x07, 0xd2, 0x5f, 0x87, 0xe6, - 0xb8, 0x2a, 0xbb, 0xec, 0x07, 0xbc, 0x29, 0x29, 0x0f, 0xd5, 0x0b, 0xd0, 0x07, 0xb0, 0x78, 0xd1, - 0x98, 0x7a, 0xf1, 0xfa, 0xc6, 0xd4, 0xc6, 0x2e, 0xaa, 0x19, 0x0d, 0xcd, 0x5b, 0x49, 0xc7, 0xc4, - 0x64, 0xcb, 0x5e, 0xe8, 0xa4, 0xac, 0x6f, 0x17, 0x45, 0xf4, 0x7f, 0x3f, 0x37, 0x8d, 0xe6, 0xfd, - 0xa7, 0xcf, 0x6b, 0xc6, 0xb3, 0xe7, 0x35, 0xe3, 0x4f, 0xcf, 0x6b, 0xc6, 0xe3, 0x17, 0xb5, 0x99, - 0x67, 0x2f, 0x6a, 0x33, 0xbf, 0x7b, 0x51, 0x9b, 0xf9, 0xe6, 0xa7, 0x5f, 0xea, 0xc2, 0x69, 0xfc, - 0x67, 0x07, 0xe9, 0x4c, 0xa7, 0x20, 0xa7, 0xd9, 0x67, 0xff, 0x1d, 0x00, 0x00, 0xff, 0xff, 0x8b, - 0x5f, 0x37, 0x07, 0x95, 0x18, 0x00, 0x00, + // 1680 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x59, 0xcb, 0x6f, 0x1b, 0xc7, + 0x19, 0xd7, 0x92, 0x32, 0x45, 0x7d, 0x94, 0x44, 0x71, 0x6c, 0xab, 0x94, 0xea, 0x72, 0xe5, 0xad, + 0xd1, 0xaa, 0x40, 0x4d, 0x55, 0x6a, 0xd1, 0xa2, 0xba, 0xb4, 0xa6, 0x68, 0x43, 0x42, 0xed, 0x56, + 0x5e, 0xb9, 0x2a, 0xd0, 0x1a, 0x25, 0x86, 0xbb, 0x23, 0x6a, 0x2b, 0xee, 0x2e, 0xbb, 0x33, 0xb4, + 0x25, 0xc3, 0x87, 0x5e, 0x0a, 0xb4, 0x05, 0x8a, 0xfa, 0xe8, 0xa3, 0xd0, 0xfe, 0x01, 0xfd, 0x0f, + 0xda, 0xab, 0x83, 0x5c, 0x9c, 0x4b, 0x10, 0x04, 0x01, 0x13, 0xd8, 0x97, 0x24, 0x97, 0x04, 0x3c, + 0xe4, 0x90, 0x4b, 0x82, 0x79, 0xec, 0x43, 0x4b, 0xd1, 0x16, 0x95, 0x00, 0x09, 0x10, 0x5f, 0xa4, + 0x9d, 0x6f, 0xbe, 0xd7, 0xfc, 0xbe, 0xc7, 0x3c, 0x08, 0x57, 0x2c, 0x9f, 0xba, 0x3e, 0x5d, 0xa6, + 0x0c, 0xef, 0x3b, 0x5e, 0x6b, 0xf9, 0xde, 0x4a, 0x93, 0x30, 0xbc, 0x12, 0x8e, 0xab, 0x9d, 0xc0, + 0x67, 0x3e, 0x9a, 0x93, 0x5c, 0xd5, 0x90, 0xaa, 0xb8, 0x16, 0x2e, 0xb4, 0xfc, 0x96, 0x2f, 0x58, + 0x96, 0xf9, 0x97, 0xe4, 0x5e, 0xb8, 0xc4, 0x88, 0x67, 0x93, 0xc0, 0x75, 0x3c, 0xb6, 0xcc, 0x0e, + 0x3b, 0x84, 0xca, 0xbf, 0x6a, 0x56, 0x6f, 0xf9, 0x7e, 0xab, 0x4d, 0x96, 0xc5, 0xa8, 0xd9, 0xdd, + 0x5d, 0x66, 0x8e, 0x4b, 0x28, 0xc3, 0x6e, 0x47, 0x31, 0x54, 0xd2, 0x0c, 0x76, 0x37, 0xc0, 0xcc, + 0xf1, 0xbd, 0x70, 0x5e, 0xb9, 0xdc, 0xc4, 0x94, 0x44, 0xfe, 0x5a, 0xbe, 0xa3, 0xe6, 0x8d, 0xbf, + 0x6b, 0x30, 0xb3, 0xe1, 0x50, 0xe6, 0x07, 0x8e, 0x85, 0xdb, 0x9b, 0xde, 0xae, 0x8f, 0x7e, 0x0a, + 0xb9, 0x3d, 0x82, 0x6d, 0x12, 0x94, 0xb5, 0x45, 0x6d, 0xa9, 0xb0, 0x5a, 0xae, 0xc6, 0x2e, 0x56, + 0xa5, 0x73, 0x1b, 0x62, 0xbe, 0x36, 0xfe, 0xa4, 0xa7, 0x8f, 0x99, 0x8a, 0x1b, 0xfd, 0x02, 0x72, + 0xf7, 0x70, 0x9b, 0x12, 0x56, 0xce, 0x2c, 0x66, 0x97, 0x0a, 0xab, 0x97, 0xab, 0x27, 0x03, 0x51, + 0xdd, 0xc1, 0x6d, 0xc7, 0xc6, 0xcc, 0x8f, 0x14, 0x48, 0x31, 0xe3, 0xbf, 0x19, 0x28, 0xae, 0xfb, + 0xae, 0xeb, 0x50, 0xea, 0xf8, 0x9e, 0x89, 0x19, 0xa1, 0xa8, 0x06, 0xe3, 0x01, 0x66, 0x44, 0xb8, + 0x32, 0x59, 0xab, 0x72, 0xfe, 0xb7, 0x7b, 0xfa, 0xf7, 0x5a, 0x0e, 0xdb, 0xeb, 0x36, 0xab, 0x96, + 0xef, 0x2e, 0xab, 0x05, 0xca, 0x7f, 0x57, 0xa9, 0xbd, 0xaf, 0x00, 0xac, 0x13, 0xcb, 0x14, 0xb2, + 0xe8, 0x2e, 0xe4, 0x5d, 0x7c, 0xd0, 0x10, 0x7a, 0x32, 0x42, 0xcf, 0xb5, 0xd1, 0xf4, 0xf4, 0x7b, + 0x7a, 0xf1, 0x10, 0xbb, 0xed, 0x35, 0x23, 0xd4, 0x63, 0x98, 0x13, 0x2e, 0x3e, 0xe0, 0x2e, 0xa2, + 0x0e, 0x14, 0x39, 0xd5, 0xda, 0xc3, 0x5e, 0x8b, 0x48, 0x23, 0x59, 0x61, 0x64, 0x63, 0x64, 0x23, + 0x73, 0xb1, 0x91, 0x84, 0x3a, 0xc3, 0x9c, 0x76, 0xf1, 0xc1, 0xba, 0x20, 0x70, 0x8b, 0x6b, 0xf9, + 0xc7, 0x47, 0xfa, 0xd8, 0xfb, 0x47, 0xba, 0x66, 0xbc, 0xa1, 0x01, 0xc4, 0x88, 0xa1, 0xbb, 0x30, + 0x6b, 0x45, 0x23, 0x21, 0x4b, 0x55, 0x0c, 0xbf, 0x3f, 0x2c, 0x16, 0x29, 0xbc, 0x6b, 0x79, 0xee, + 0xf4, 0xd3, 0x9e, 0xae, 0x99, 0x45, 0x2b, 0x15, 0x8a, 0x3f, 0x40, 0xa1, 0xdb, 0xb1, 0x31, 0x23, + 0x0d, 0x9e, 0x84, 0x02, 0xc9, 0xc2, 0xea, 0x42, 0x55, 0x26, 0x60, 0x35, 0x4c, 0xc0, 0xea, 0x9d, + 0x30, 0x43, 0x6b, 0x15, 0xae, 0xab, 0xdf, 0xd3, 0x91, 0x5c, 0x56, 0x42, 0xd8, 0x78, 0xf4, 0xae, + 0xae, 0x99, 0x20, 0x29, 0x5c, 0x20, 0xb1, 0xa6, 0xd7, 0x34, 0x28, 0xd4, 0x09, 0xb5, 0x02, 0xa7, + 0xc3, 0xf3, 0x18, 0x95, 0x61, 0xc2, 0xf5, 0x3d, 0x67, 0x5f, 0xe5, 0xe3, 0xa4, 0x19, 0x0e, 0xd1, + 0x02, 0xe4, 0x1d, 0x9b, 0x78, 0xcc, 0x61, 0x87, 0x32, 0xae, 0x66, 0x34, 0xe6, 0x52, 0xf7, 0x49, + 0x93, 0x3a, 0x61, 0x34, 0xcc, 0x70, 0x88, 0x6e, 0xc0, 0x2c, 0x25, 0x56, 0x37, 0x70, 0xd8, 0x61, + 0xc3, 0xf2, 0x3d, 0x86, 0x2d, 0x56, 0x1e, 0x17, 0x01, 0xfb, 0x76, 0xbf, 0xa7, 0x7f, 0x4b, 0xfa, + 0x9a, 0xe6, 0x30, 0xcc, 0x62, 0x48, 0x5a, 0x97, 0x14, 0x6e, 0xc1, 0x26, 0x0c, 0x3b, 0x6d, 0x5a, + 0x3e, 0x27, 0x2d, 0xa8, 0x61, 0x62, 0x2d, 0xff, 0x9b, 0x80, 0xc9, 0x28, 0xdb, 0xd1, 0x7d, 0x98, + 0xf5, 0x3b, 0x24, 0xe0, 0xdf, 0x0d, 0x6c, 0xdb, 0x01, 0xa1, 0x32, 0x3c, 0x53, 0xb5, 0x9b, 0xb1, + 0xe5, 0x34, 0x87, 0xf1, 0x69, 0x4f, 0xbf, 0x7a, 0x8a, 0x0c, 0xda, 0xc1, 0xed, 0x6b, 0x52, 0xc2, + 0x2c, 0x86, 0x3a, 0x14, 0x81, 0x2f, 0xd9, 0xf2, 0x3d, 0x4a, 0x3c, 0xda, 0xa5, 0x8d, 0x4e, 0xb7, + 0xb9, 0x4f, 0x14, 0x60, 0xc9, 0x25, 0xa7, 0x39, 0x0c, 0x9e, 0x01, 0x8a, 0xb4, 0x25, 0x28, 0x68, + 0x0e, 0x72, 0x7f, 0xc2, 0x4e, 0x9b, 0xd8, 0x02, 0xd3, 0xbc, 0xa9, 0x46, 0x68, 0x13, 0x72, 0x94, + 0x61, 0xd6, 0xa5, 0x02, 0xc8, 0x73, 0xb5, 0x95, 0x53, 0xfa, 0x5c, 0xf3, 0x3d, 0x7b, 0x5b, 0x08, + 0x9a, 0x4a, 0x01, 0xba, 0x01, 0x39, 0xe6, 0xef, 0x13, 0x4f, 0x81, 0x3a, 0x52, 0xc5, 0x6f, 0x7a, + 0xcc, 0x54, 0xd2, 0x88, 0xc1, 0xac, 0x4d, 0xda, 0xa4, 0x25, 0xa0, 0xa4, 0x7b, 0x38, 0x20, 0xb4, + 0x9c, 0x13, 0x1a, 0x37, 0x47, 0x2e, 0x4b, 0x05, 0x50, 0x5a, 0x9f, 0x61, 0x16, 0x23, 0xd2, 0xb6, + 0xa0, 0xa0, 0x5f, 0x41, 0xc1, 0x8e, 0x53, 0xb7, 0x3c, 0x21, 0x4a, 0xe4, 0xbb, 0xc3, 0x6a, 0x2f, + 0x91, 0xe5, 0xaa, 0x13, 0x26, 0xa5, 0x79, 0xd4, 0xba, 0x5e, 0xd3, 0xf7, 0x6c, 0xc7, 0x6b, 0x35, + 0xf6, 0x88, 0xd3, 0xda, 0x63, 0xe5, 0xfc, 0xa2, 0xb6, 0x94, 0x4d, 0x46, 0x2d, 0xcd, 0x61, 0x98, + 0xc5, 0x88, 0xb4, 0x21, 0x28, 0xc8, 0x86, 0x99, 0x98, 0x4b, 0x94, 0xee, 0xe4, 0x4b, 0x4b, 0xf7, + 0xb2, 0x2a, 0xdd, 0x8b, 0x69, 0x2b, 0x71, 0xf5, 0x4e, 0x47, 0x44, 0x2e, 0x86, 0x36, 0x00, 0xe2, + 0x86, 0x51, 0x06, 0x61, 0xc1, 0x78, 0x79, 0xd7, 0x51, 0x0b, 0x4f, 0xc8, 0xa2, 0x87, 0x70, 0xde, + 0x75, 0xbc, 0x06, 0x25, 0xed, 0xdd, 0x86, 0x02, 0x98, 0xab, 0x2c, 0x88, 0xe8, 0xdd, 0x1c, 0x2d, + 0x1f, 0xfa, 0x3d, 0x7d, 0x41, 0x35, 0xd5, 0x41, 0x95, 0x86, 0x59, 0x72, 0x1d, 0x6f, 0x9b, 0xb4, + 0x77, 0xeb, 0x11, 0x6d, 0x6d, 0xea, 0x6f, 0x47, 0xfa, 0x58, 0x54, 0xc0, 0x0e, 0x4c, 0xc5, 0x85, + 0x45, 0x28, 0xfa, 0x0d, 0x4c, 0xe2, 0x70, 0x50, 0xd6, 0x16, 0xb3, 0x4b, 0x53, 0xa7, 0x4e, 0xf6, + 0x44, 0x81, 0xc6, 0x3a, 0x64, 0xaf, 0xf8, 0xcb, 0x3b, 0x8b, 0x9a, 0xf1, 0x8f, 0x0c, 0xe4, 0xea, + 0x3b, 0x5b, 0xd8, 0x09, 0xd0, 0x03, 0x28, 0xc5, 0xc9, 0x76, 0xbc, 0x53, 0xdc, 0xea, 0xf7, 0xf4, + 0x72, 0x3a, 0x1f, 0x47, 0x6c, 0x15, 0xd7, 0x2c, 0x2b, 0xf4, 0x24, 0x2e, 0x92, 0xb0, 0x57, 0x3c, + 0x80, 0xd2, 0xbd, 0xb0, 0x63, 0x45, 0xb6, 0x33, 0x69, 0xdb, 0x03, 0x2c, 0x67, 0x68, 0x53, 0xb3, + 0x91, 0x12, 0x45, 0x49, 0x34, 0xce, 0xeb, 0x30, 0x21, 0xb1, 0xa0, 0x68, 0x0d, 0xce, 0x75, 0xf8, + 0x87, 0x80, 0xbb, 0xb0, 0x5a, 0x19, 0x5a, 0x4d, 0x82, 0x5f, 0xe5, 0x93, 0x14, 0x31, 0xfe, 0x9d, + 0x05, 0xa8, 0xef, 0xec, 0xdc, 0x09, 0x9c, 0x4e, 0x9b, 0xb0, 0xaf, 0x14, 0xd7, 0xbf, 0x6a, 0x70, + 0x31, 0x46, 0x8d, 0x06, 0x56, 0x0a, 0xdc, 0xdb, 0xfd, 0x9e, 0x7e, 0x29, 0x0d, 0x6e, 0x82, 0xed, + 0x0c, 0x00, 0x9f, 0x8f, 0x14, 0x6d, 0x07, 0xd6, 0xc9, 0x7e, 0xd8, 0x94, 0x45, 0x7e, 0x64, 0x87, + 0xfb, 0x91, 0x60, 0xfb, 0x42, 0x7e, 0xd4, 0x29, 0x1b, 0x8c, 0xf5, 0x36, 0x14, 0xe2, 0x18, 0x51, + 0x54, 0x87, 0x3c, 0x53, 0xdf, 0x2a, 0xe4, 0xc6, 0xf0, 0x90, 0x87, 0x62, 0x2a, 0xec, 0x91, 0xa4, + 0xf1, 0x66, 0x06, 0x20, 0xae, 0xea, 0x6f, 0x6a, 0x45, 0xf1, 0xed, 0x54, 0x6d, 0x7e, 0xd9, 0x33, + 0x1d, 0xa0, 0x95, 0x74, 0x22, 0x5a, 0x1f, 0x64, 0xe0, 0xfc, 0x6f, 0xc3, 0xce, 0xff, 0x0a, 0x61, + 0xb4, 0x05, 0x13, 0xc4, 0x63, 0x81, 0x23, 0x20, 0xe6, 0xd9, 0xfa, 0xa3, 0x61, 0xd9, 0x7a, 0x02, + 0x6a, 0xd7, 0x3d, 0x16, 0x1c, 0xaa, 0xdc, 0x0d, 0xd5, 0x24, 0xb0, 0xfe, 0x57, 0x16, 0xca, 0xc3, + 0xa4, 0xd0, 0x3a, 0x14, 0xad, 0x80, 0x08, 0x42, 0x78, 0x3a, 0xd0, 0xc4, 0xe9, 0x60, 0x21, 0xbe, + 0x49, 0xa4, 0x18, 0x0c, 0x73, 0x26, 0xa4, 0xa8, 0xb3, 0x41, 0x0b, 0xf8, 0x31, 0x9f, 0x97, 0x0c, + 0xe7, 0x3a, 0xe5, 0xb9, 0xde, 0x50, 0x87, 0x83, 0xd0, 0xc8, 0x71, 0x05, 0xf2, 0x74, 0x30, 0x13, + 0x53, 0xc5, 0xf1, 0xe0, 0xcf, 0x50, 0x74, 0x3c, 0x87, 0x39, 0xb8, 0xdd, 0x68, 0xe2, 0x36, 0xf6, + 0xac, 0xb3, 0xdc, 0x92, 0xe4, 0x86, 0xae, 0xcc, 0xa6, 0xd4, 0x19, 0xe6, 0x8c, 0xa2, 0xd4, 0x24, + 0x01, 0x6d, 0xc0, 0x44, 0x68, 0x6a, 0xfc, 0x4c, 0x67, 0xc9, 0x50, 0x3c, 0x11, 0x91, 0x7f, 0x66, + 0xa1, 0x64, 0x12, 0xfb, 0x55, 0x28, 0x46, 0x0b, 0xc5, 0x2d, 0x00, 0xd9, 0x48, 0xf8, 0x4e, 0x72, + 0x86, 0x68, 0xf0, 0x56, 0x34, 0x29, 0x35, 0xd4, 0x29, 0x4b, 0xc4, 0xe3, 0xa3, 0x2c, 0x4c, 0x25, + 0xe3, 0xf1, 0x6a, 0x8b, 0xff, 0xfa, 0x6c, 0xf1, 0x68, 0x33, 0x6e, 0x8d, 0xe3, 0xa2, 0x35, 0xfe, + 0x60, 0x58, 0x6b, 0x1c, 0x28, 0xa9, 0xe1, 0x3d, 0xf1, 0x93, 0x0c, 0xe4, 0xb6, 0x70, 0x80, 0x5d, + 0x8a, 0xac, 0x81, 0x8b, 0x8d, 0x7c, 0xec, 0x98, 0x1f, 0x28, 0x98, 0xba, 0x7a, 0x14, 0x7b, 0xc9, + 0xbd, 0xe6, 0xf1, 0x09, 0xf7, 0x9a, 0x5f, 0xc2, 0x8c, 0x8b, 0x0f, 0x1a, 0xd1, 0xfa, 0x64, 0x30, + 0xa7, 0x6b, 0xf3, 0xb1, 0x96, 0xe3, 0xf3, 0xf2, 0xb9, 0x26, 0xba, 0xf5, 0x53, 0xf4, 0x33, 0x28, + 0x70, 0x8e, 0x78, 0x97, 0xe0, 0xe2, 0x73, 0xf1, 0xbb, 0x48, 0x62, 0xd2, 0x30, 0xc1, 0xc5, 0x07, + 0xd7, 0xe5, 0x00, 0xdd, 0x04, 0xb4, 0x17, 0x3d, 0xcd, 0x35, 0x62, 0x28, 0xb9, 0xfc, 0x77, 0xfa, + 0x3d, 0x7d, 0x5e, 0xca, 0x0f, 0xf2, 0x18, 0x66, 0x29, 0x26, 0x86, 0xda, 0x7e, 0x02, 0xc0, 0xd7, + 0xd5, 0xb0, 0x89, 0xe7, 0xbb, 0xea, 0x76, 0x7d, 0xb1, 0xdf, 0xd3, 0x4b, 0x52, 0x4b, 0x3c, 0x67, + 0x98, 0x93, 0x7c, 0x50, 0xe7, 0xdf, 0x09, 0xe0, 0xff, 0xa3, 0x01, 0x8a, 0xf7, 0x20, 0x93, 0xd0, + 0x8e, 0xef, 0x51, 0x71, 0xef, 0x4b, 0x5c, 0xd2, 0xb4, 0x17, 0xdf, 0xfb, 0x62, 0xf9, 0xf0, 0xde, + 0x97, 0x28, 0xdd, 0x9f, 0xc7, 0xfd, 0x3a, 0xa3, 0xe2, 0xa8, 0xd4, 0x34, 0x31, 0x25, 0x89, 0xbb, + 0xa3, 0x13, 0x4a, 0x9f, 0xd0, 0xa0, 0x5f, 0xd7, 0x60, 0x7e, 0x20, 0x9b, 0x22, 0x67, 0xff, 0x08, + 0x28, 0x48, 0x4c, 0x0a, 0xbc, 0x0e, 0x95, 0xd3, 0x23, 0x27, 0x67, 0x29, 0x18, 0xd8, 0x08, 0xbe, + 0xbc, 0x2d, 0x67, 0x5c, 0xac, 0xe6, 0xff, 0x1a, 0x5c, 0x48, 0x9a, 0x8f, 0x16, 0xf2, 0x6b, 0x98, + 0x4a, 0x5a, 0x57, 0x4b, 0xb8, 0x72, 0x9a, 0x25, 0x28, 0xef, 0x8f, 0xc9, 0xa3, 0xdb, 0x71, 0xa9, + 0xca, 0xc7, 0xdb, 0x95, 0x53, 0xa3, 0x11, 0xfa, 0x94, 0x2e, 0x59, 0xb9, 0x82, 0xcf, 0x34, 0x18, + 0xdf, 0xf2, 0xfd, 0x36, 0xf2, 0xa1, 0xe4, 0xf9, 0xac, 0xc1, 0x33, 0x8b, 0xd8, 0x0d, 0xf5, 0xc6, + 0x23, 0x5f, 0x75, 0xd7, 0x47, 0x03, 0xe9, 0xc3, 0x9e, 0x3e, 0xa8, 0xca, 0x2c, 0x7a, 0x3e, 0xab, + 0x09, 0xca, 0x1d, 0xf9, 0x02, 0xf4, 0x10, 0xa6, 0x8f, 0x1b, 0x93, 0x2f, 0x5e, 0xbf, 0x1b, 0xd9, + 0xd8, 0x71, 0x35, 0xfd, 0x9e, 0x7e, 0x21, 0xae, 0x98, 0x88, 0x6c, 0x98, 0x53, 0xcd, 0x84, 0xf5, + 0xb5, 0x3c, 0x5f, 0xfd, 0xc7, 0x47, 0xba, 0x56, 0xbb, 0xf1, 0xe4, 0x59, 0x45, 0x7b, 0xfa, 0xac, + 0xa2, 0xbd, 0xf7, 0xac, 0xa2, 0x3d, 0x7a, 0x5e, 0x19, 0x7b, 0xfa, 0xbc, 0x32, 0xf6, 0xd6, 0xf3, + 0xca, 0xd8, 0xef, 0x7f, 0xf8, 0x42, 0x17, 0x0e, 0xa2, 0x9f, 0x19, 0x84, 0x33, 0xcd, 0x9c, 0xe8, + 0x66, 0x3f, 0xfe, 0x3c, 0x00, 0x00, 0xff, 0xff, 0x70, 0xa3, 0x33, 0x33, 0x85, 0x18, 0x00, 0x00, } func (this *Pool) Description() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { @@ -1264,585 +1263,534 @@ func (this *Pool) Description() (desc *github_com_gogo_protobuf_protoc_gen_gogo_ func StakingDescription() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { d := &github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet{} var gzipped = []byte{ - // 9246 bytes of a gzipped FileDescriptorSet - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x7d, 0x70, 0x24, 0xc7, - 0x75, 0x1f, 0x66, 0x77, 0x01, 0xec, 0xbe, 0xc5, 0xc7, 0xa2, 0x81, 0x3b, 0xee, 0x2d, 0x49, 0xe0, - 0x6e, 0xf8, 0x71, 0xb8, 0x23, 0x89, 0x13, 0x8f, 0xe4, 0x91, 0xb7, 0x27, 0x93, 0xc6, 0x02, 0x7b, - 0x77, 0x20, 0x81, 0x03, 0x38, 0x00, 0x8e, 0xa4, 0x64, 0x6b, 0x6a, 0x30, 0xdb, 0x58, 0x0c, 0x6f, - 0x77, 0x66, 0x39, 0x33, 0x8b, 0x03, 0x18, 0xfd, 0xc1, 0x94, 0x64, 0x2b, 0x52, 0xac, 0x48, 0x71, - 0xe4, 0x84, 0x96, 0x25, 0x85, 0x96, 0x2b, 0x91, 0x22, 0x3b, 0xb1, 0x9d, 0x28, 0x8e, 0xec, 0x54, - 0x25, 0xaa, 0x44, 0x71, 0x94, 0x8a, 0x93, 0x12, 0xab, 0x94, 0x94, 0x93, 0x4a, 0x9d, 0x6c, 0x52, - 0x55, 0x91, 0x15, 0x26, 0x76, 0x2e, 0x8c, 0xcb, 0x15, 0xfe, 0xe1, 0x54, 0x7f, 0xcd, 0xd7, 0xee, - 0x62, 0x66, 0xc1, 0x23, 0x25, 0x96, 0xf8, 0x17, 0xb6, 0x7b, 0xde, 0xfb, 0x75, 0xf7, 0xeb, 0xd7, - 0xef, 0xbd, 0x7e, 0xdd, 0x33, 0x80, 0x5f, 0xb9, 0x00, 0xc7, 0xeb, 0x96, 0x55, 0x6f, 0xe0, 0x33, - 0x2d, 0xdb, 0x72, 0xad, 0xad, 0xf6, 0xf6, 0x99, 0x1a, 0x76, 0x74, 0xdb, 0x68, 0xb9, 0x96, 0x3d, - 0x47, 0xeb, 0xd0, 0x38, 0xa3, 0x98, 0x13, 0x14, 0xf2, 0x0a, 0x4c, 0x5c, 0x34, 0x1a, 0x78, 0xd1, - 0x23, 0x5c, 0xc7, 0x2e, 0x7a, 0x0c, 0x32, 0xdb, 0x46, 0x03, 0x17, 0xa5, 0xe3, 0xe9, 0xd9, 0xfc, - 0xd9, 0xbb, 0xe7, 0x22, 0x4c, 0x73, 0x61, 0x8e, 0x35, 0x52, 0xad, 0x50, 0x0e, 0xf9, 0xfb, 0x19, - 0x98, 0xec, 0xf2, 0x14, 0x21, 0xc8, 0x98, 0x5a, 0x93, 0x20, 0x4a, 0xb3, 0x39, 0x85, 0xfe, 0x46, - 0x45, 0x18, 0x6e, 0x69, 0xfa, 0x35, 0xad, 0x8e, 0x8b, 0x29, 0x5a, 0x2d, 0x8a, 0x68, 0x1a, 0xa0, - 0x86, 0x5b, 0xd8, 0xac, 0x61, 0x53, 0xdf, 0x2f, 0xa6, 0x8f, 0xa7, 0x67, 0x73, 0x4a, 0xa0, 0x06, - 0xdd, 0x07, 0x13, 0xad, 0xf6, 0x56, 0xc3, 0xd0, 0xd5, 0x00, 0x19, 0x1c, 0x4f, 0xcf, 0x0e, 0x2a, - 0x05, 0xf6, 0x60, 0xd1, 0x27, 0x3e, 0x09, 0xe3, 0xd7, 0xb1, 0x76, 0x2d, 0x48, 0x9a, 0xa7, 0xa4, - 0x63, 0xa4, 0x3a, 0x40, 0xb8, 0x00, 0x23, 0x4d, 0xec, 0x38, 0x5a, 0x1d, 0xab, 0xee, 0x7e, 0x0b, - 0x17, 0x33, 0x74, 0xf4, 0xc7, 0x3b, 0x46, 0x1f, 0x1d, 0x79, 0x9e, 0x73, 0x6d, 0xec, 0xb7, 0x30, - 0x9a, 0x87, 0x1c, 0x36, 0xdb, 0x4d, 0x86, 0x30, 0xd8, 0x43, 0x7e, 0x55, 0xb3, 0xdd, 0x8c, 0xa2, - 0x64, 0x09, 0x1b, 0x87, 0x18, 0x76, 0xb0, 0xbd, 0x6b, 0xe8, 0xb8, 0x38, 0x44, 0x01, 0x4e, 0x76, - 0x00, 0xac, 0xb3, 0xe7, 0x51, 0x0c, 0xc1, 0x87, 0x16, 0x20, 0x87, 0xf7, 0x5c, 0x6c, 0x3a, 0x86, - 0x65, 0x16, 0x87, 0x29, 0xc8, 0x3d, 0x5d, 0x66, 0x11, 0x37, 0x6a, 0x51, 0x08, 0x9f, 0x0f, 0x9d, - 0x83, 0x61, 0xab, 0xe5, 0x1a, 0x96, 0xe9, 0x14, 0xb3, 0xc7, 0xa5, 0xd9, 0xfc, 0xd9, 0x3b, 0xba, - 0x2a, 0xc2, 0x2a, 0xa3, 0x51, 0x04, 0x31, 0x5a, 0x82, 0x82, 0x63, 0xb5, 0x6d, 0x1d, 0xab, 0xba, - 0x55, 0xc3, 0xaa, 0x61, 0x6e, 0x5b, 0xc5, 0x1c, 0x05, 0x98, 0xe9, 0x1c, 0x08, 0x25, 0x5c, 0xb0, - 0x6a, 0x78, 0xc9, 0xdc, 0xb6, 0x94, 0x31, 0x27, 0x54, 0x46, 0x47, 0x61, 0xc8, 0xd9, 0x37, 0x5d, - 0x6d, 0xaf, 0x38, 0x42, 0x35, 0x84, 0x97, 0xe4, 0xdf, 0x1d, 0x82, 0xf1, 0x24, 0x2a, 0x76, 0x01, - 0x06, 0xb7, 0xc9, 0x28, 0x8b, 0xa9, 0x7e, 0x64, 0xc0, 0x78, 0xc2, 0x42, 0x1c, 0x3a, 0xa4, 0x10, - 0xe7, 0x21, 0x6f, 0x62, 0xc7, 0xc5, 0x35, 0xa6, 0x11, 0xe9, 0x84, 0x3a, 0x05, 0x8c, 0xa9, 0x53, - 0xa5, 0x32, 0x87, 0x52, 0xa9, 0x67, 0x61, 0xdc, 0xeb, 0x92, 0x6a, 0x6b, 0x66, 0x5d, 0xe8, 0xe6, - 0x99, 0xb8, 0x9e, 0xcc, 0x55, 0x05, 0x9f, 0x42, 0xd8, 0x94, 0x31, 0x1c, 0x2a, 0xa3, 0x45, 0x00, - 0xcb, 0xc4, 0xd6, 0xb6, 0x5a, 0xc3, 0x7a, 0xa3, 0x98, 0xed, 0x21, 0xa5, 0x55, 0x42, 0xd2, 0x21, - 0x25, 0x8b, 0xd5, 0xea, 0x0d, 0x74, 0xde, 0x57, 0xb5, 0xe1, 0x1e, 0x9a, 0xb2, 0xc2, 0x16, 0x59, - 0x87, 0xb6, 0x6d, 0xc2, 0x98, 0x8d, 0x89, 0xde, 0xe3, 0x1a, 0x1f, 0x59, 0x8e, 0x76, 0x62, 0x2e, - 0x76, 0x64, 0x0a, 0x67, 0x63, 0x03, 0x1b, 0xb5, 0x83, 0x45, 0x74, 0x17, 0x78, 0x15, 0x2a, 0x55, - 0x2b, 0xa0, 0x56, 0x68, 0x44, 0x54, 0x5e, 0xd1, 0x9a, 0xb8, 0xf4, 0x22, 0x8c, 0x85, 0xc5, 0x83, - 0xa6, 0x60, 0xd0, 0x71, 0x35, 0xdb, 0xa5, 0x5a, 0x38, 0xa8, 0xb0, 0x02, 0x2a, 0x40, 0x1a, 0x9b, - 0x35, 0x6a, 0xe5, 0x06, 0x15, 0xf2, 0x13, 0xfd, 0xb4, 0x3f, 0xe0, 0x34, 0x1d, 0xf0, 0xbd, 0x9d, - 0x33, 0x1a, 0x42, 0x8e, 0x8e, 0xbb, 0xf4, 0x28, 0x8c, 0x86, 0x06, 0x90, 0xb4, 0x69, 0xf9, 0xa3, - 0x70, 0xa4, 0x2b, 0x34, 0x7a, 0x16, 0xa6, 0xda, 0xa6, 0x61, 0xba, 0xd8, 0x6e, 0xd9, 0x98, 0x68, - 0x2c, 0x6b, 0xaa, 0xf8, 0xdf, 0x87, 0x7b, 0xe8, 0xdc, 0x66, 0x90, 0x9a, 0xa1, 0x28, 0x93, 0xed, - 0xce, 0xca, 0xd3, 0xb9, 0xec, 0x0f, 0x86, 0x0b, 0x2f, 0xbd, 0xf4, 0xd2, 0x4b, 0x29, 0xf9, 0xe5, - 0x21, 0x98, 0xea, 0xb6, 0x66, 0xba, 0x2e, 0xdf, 0xa3, 0x30, 0x64, 0xb6, 0x9b, 0x5b, 0xd8, 0xa6, - 0x42, 0x1a, 0x54, 0x78, 0x09, 0xcd, 0xc3, 0x60, 0x43, 0xdb, 0xc2, 0x8d, 0x62, 0xe6, 0xb8, 0x34, - 0x3b, 0x76, 0xf6, 0xbe, 0x44, 0xab, 0x72, 0x6e, 0x99, 0xb0, 0x28, 0x8c, 0x13, 0x3d, 0x0e, 0x19, - 0x6e, 0xa2, 0x09, 0xc2, 0xe9, 0x64, 0x08, 0x64, 0x2d, 0x29, 0x94, 0x0f, 0xdd, 0x0e, 0x39, 0xf2, - 0x97, 0xe9, 0xc6, 0x10, 0xed, 0x73, 0x96, 0x54, 0x10, 0xbd, 0x40, 0x25, 0xc8, 0xd2, 0x65, 0x52, - 0xc3, 0xc2, 0xb5, 0x79, 0x65, 0xa2, 0x58, 0x35, 0xbc, 0xad, 0xb5, 0x1b, 0xae, 0xba, 0xab, 0x35, - 0xda, 0x98, 0x2a, 0x7c, 0x4e, 0x19, 0xe1, 0x95, 0x57, 0x49, 0x1d, 0x9a, 0x81, 0x3c, 0x5b, 0x55, - 0x86, 0x59, 0xc3, 0x7b, 0xd4, 0x7a, 0x0e, 0x2a, 0x6c, 0xa1, 0x2d, 0x91, 0x1a, 0xd2, 0xfc, 0xf3, - 0x8e, 0x65, 0x0a, 0xd5, 0xa4, 0x4d, 0x90, 0x0a, 0xda, 0xfc, 0xa3, 0x51, 0xc3, 0x7d, 0x67, 0xf7, - 0xe1, 0x45, 0x75, 0x4a, 0xfe, 0x9d, 0x14, 0x64, 0xa8, 0xbd, 0x18, 0x87, 0xfc, 0xc6, 0x73, 0x6b, - 0x55, 0x75, 0x71, 0x75, 0xb3, 0xb2, 0x5c, 0x2d, 0x48, 0x68, 0x0c, 0x80, 0x56, 0x5c, 0x5c, 0x5e, - 0x9d, 0xdf, 0x28, 0xa4, 0xbc, 0xf2, 0xd2, 0x95, 0x8d, 0x73, 0x0f, 0x17, 0xd2, 0x1e, 0xc3, 0x26, - 0xab, 0xc8, 0x04, 0x09, 0x1e, 0x3a, 0x5b, 0x18, 0x44, 0x05, 0x18, 0x61, 0x00, 0x4b, 0xcf, 0x56, - 0x17, 0xcf, 0x3d, 0x5c, 0x18, 0x0a, 0xd7, 0x3c, 0x74, 0xb6, 0x30, 0x8c, 0x46, 0x21, 0x47, 0x6b, - 0x2a, 0xab, 0xab, 0xcb, 0x85, 0xac, 0x87, 0xb9, 0xbe, 0xa1, 0x2c, 0x5d, 0xb9, 0x54, 0xc8, 0x79, - 0x98, 0x97, 0x94, 0xd5, 0xcd, 0xb5, 0x02, 0x78, 0x08, 0x2b, 0xd5, 0xf5, 0xf5, 0xf9, 0x4b, 0xd5, - 0x42, 0xde, 0xa3, 0xa8, 0x3c, 0xb7, 0x51, 0x5d, 0x2f, 0x8c, 0x84, 0xba, 0xf5, 0xd0, 0xd9, 0xc2, - 0xa8, 0xd7, 0x44, 0xf5, 0xca, 0xe6, 0x4a, 0x61, 0x0c, 0x4d, 0xc0, 0x28, 0x6b, 0x42, 0x74, 0x62, - 0x3c, 0x52, 0x75, 0xee, 0xe1, 0x42, 0xc1, 0xef, 0x08, 0x43, 0x99, 0x08, 0x55, 0x9c, 0x7b, 0xb8, - 0x80, 0xe4, 0x05, 0x18, 0xa4, 0xda, 0x85, 0x10, 0x8c, 0x2d, 0xcf, 0x57, 0xaa, 0xcb, 0xea, 0xea, - 0xda, 0xc6, 0xd2, 0xea, 0x95, 0xf9, 0xe5, 0x82, 0xe4, 0xd7, 0x29, 0xd5, 0xa7, 0x37, 0x97, 0x94, - 0xea, 0x62, 0x21, 0x15, 0xac, 0x5b, 0xab, 0xce, 0x6f, 0x54, 0x17, 0x0b, 0x69, 0x59, 0x87, 0xa9, - 0x6e, 0x76, 0xb2, 0xeb, 0xca, 0x08, 0x4c, 0x71, 0xaa, 0xc7, 0x14, 0x53, 0xac, 0x8e, 0x29, 0x7e, - 0x3d, 0x05, 0x93, 0x5d, 0x7c, 0x45, 0xd7, 0x46, 0x9e, 0x80, 0x41, 0xa6, 0xa2, 0xcc, 0x7b, 0x9e, - 0xea, 0xea, 0x74, 0xa8, 0xc2, 0x76, 0x78, 0x50, 0xca, 0x17, 0x8c, 0x20, 0xd2, 0x3d, 0x22, 0x08, - 0x02, 0xd1, 0x61, 0xd3, 0x7f, 0xb6, 0xc3, 0xa6, 0x33, 0xb7, 0x77, 0x2e, 0x89, 0xdb, 0xa3, 0x75, - 0xfd, 0xd9, 0xf6, 0xc1, 0x2e, 0xb6, 0xfd, 0x02, 0x4c, 0x74, 0x00, 0x25, 0xb6, 0xb1, 0x1f, 0x93, - 0xa0, 0xd8, 0x4b, 0x38, 0x31, 0x96, 0x2e, 0x15, 0xb2, 0x74, 0x17, 0xa2, 0x12, 0x3c, 0xd1, 0x7b, - 0x12, 0x3a, 0xe6, 0xfa, 0x2b, 0x12, 0x1c, 0xed, 0x1e, 0x29, 0x76, 0xed, 0xc3, 0xe3, 0x30, 0xd4, - 0xc4, 0xee, 0x8e, 0x25, 0xa2, 0xa5, 0x7b, 0xbb, 0xf8, 0x60, 0xf2, 0x38, 0x3a, 0xd9, 0x9c, 0x2b, - 0xe8, 0xc4, 0xd3, 0xbd, 0xc2, 0x3d, 0xd6, 0x9b, 0x8e, 0x9e, 0x7e, 0x32, 0x05, 0x47, 0xba, 0x82, - 0x77, 0xed, 0xe8, 0x9d, 0x00, 0x86, 0xd9, 0x6a, 0xbb, 0x2c, 0x22, 0x62, 0x06, 0x36, 0x47, 0x6b, - 0xa8, 0xf1, 0x22, 0xc6, 0xb3, 0xed, 0x7a, 0xcf, 0xd3, 0xf4, 0x39, 0xb0, 0x2a, 0x4a, 0xf0, 0x98, - 0xdf, 0xd1, 0x0c, 0xed, 0xe8, 0x74, 0x8f, 0x91, 0x76, 0x28, 0xe6, 0x07, 0xa0, 0xa0, 0x37, 0x0c, - 0x6c, 0xba, 0xaa, 0xe3, 0xda, 0x58, 0x6b, 0x1a, 0x66, 0x9d, 0x7a, 0x90, 0x6c, 0x79, 0x70, 0x5b, - 0x6b, 0x38, 0x58, 0x19, 0x67, 0x8f, 0xd7, 0xc5, 0x53, 0xc2, 0x41, 0x15, 0xc8, 0x0e, 0x70, 0x0c, - 0x85, 0x38, 0xd8, 0x63, 0x8f, 0x43, 0xfe, 0xc5, 0x1c, 0xe4, 0x03, 0x71, 0x35, 0x3a, 0x01, 0x23, - 0xcf, 0x6b, 0xbb, 0x9a, 0x2a, 0xf6, 0x4a, 0x4c, 0x12, 0x79, 0x52, 0xb7, 0xc6, 0xf7, 0x4b, 0x1f, - 0x80, 0x29, 0x4a, 0x62, 0xb5, 0x5d, 0x6c, 0xab, 0x7a, 0x43, 0x73, 0x1c, 0x2a, 0xb4, 0x2c, 0x25, - 0x45, 0xe4, 0xd9, 0x2a, 0x79, 0xb4, 0x20, 0x9e, 0xa0, 0x47, 0x60, 0x92, 0x72, 0x34, 0xdb, 0x0d, - 0xd7, 0x68, 0x35, 0xb0, 0x4a, 0x76, 0x6f, 0x0e, 0xf5, 0x24, 0x5e, 0xcf, 0x26, 0x08, 0xc5, 0x0a, - 0x27, 0x20, 0x3d, 0x72, 0xd0, 0x22, 0xdc, 0x49, 0xd9, 0xea, 0xd8, 0xc4, 0xb6, 0xe6, 0x62, 0x15, - 0xbf, 0xd0, 0xd6, 0x1a, 0x8e, 0xaa, 0x99, 0x35, 0x75, 0x47, 0x73, 0x76, 0x8a, 0x53, 0x04, 0xa0, - 0x92, 0x2a, 0x4a, 0xca, 0x31, 0x42, 0x78, 0x89, 0xd3, 0x55, 0x29, 0xd9, 0xbc, 0x59, 0xbb, 0xac, - 0x39, 0x3b, 0xa8, 0x0c, 0x47, 0x29, 0x8a, 0xe3, 0xda, 0x86, 0x59, 0x57, 0xf5, 0x1d, 0xac, 0x5f, - 0x53, 0xdb, 0xee, 0xf6, 0x63, 0xc5, 0xdb, 0x83, 0xed, 0xd3, 0x1e, 0xae, 0x53, 0x9a, 0x05, 0x42, - 0xb2, 0xe9, 0x6e, 0x3f, 0x86, 0xd6, 0x61, 0x84, 0x4c, 0x46, 0xd3, 0x78, 0x11, 0xab, 0xdb, 0x96, - 0x4d, 0x5d, 0xe3, 0x58, 0x17, 0xd3, 0x14, 0x90, 0xe0, 0xdc, 0x2a, 0x67, 0x58, 0xb1, 0x6a, 0xb8, - 0x3c, 0xb8, 0xbe, 0x56, 0xad, 0x2e, 0x2a, 0x79, 0x81, 0x72, 0xd1, 0xb2, 0x89, 0x42, 0xd5, 0x2d, - 0x4f, 0xc0, 0x79, 0xa6, 0x50, 0x75, 0x4b, 0x88, 0xf7, 0x11, 0x98, 0xd4, 0x75, 0x36, 0x66, 0x43, - 0x57, 0xf9, 0x1e, 0xcb, 0x29, 0x16, 0x42, 0xc2, 0xd2, 0xf5, 0x4b, 0x8c, 0x80, 0xeb, 0xb8, 0x83, - 0xce, 0xc3, 0x11, 0x5f, 0x58, 0x41, 0xc6, 0x89, 0x8e, 0x51, 0x46, 0x59, 0x1f, 0x81, 0xc9, 0xd6, - 0x7e, 0x27, 0x23, 0x0a, 0xb5, 0xd8, 0xda, 0x8f, 0xb2, 0x3d, 0x0a, 0x53, 0xad, 0x9d, 0x56, 0x27, - 0xdf, 0xe9, 0x20, 0x1f, 0x6a, 0xed, 0xb4, 0xa2, 0x8c, 0xf7, 0xd0, 0x0d, 0xb7, 0x8d, 0x75, 0xcd, - 0xc5, 0xb5, 0xe2, 0x6d, 0x41, 0xf2, 0xc0, 0x03, 0x74, 0x06, 0x0a, 0xba, 0xae, 0x62, 0x53, 0xdb, - 0x6a, 0x60, 0x55, 0xb3, 0xb1, 0xa9, 0x39, 0xc5, 0x99, 0x20, 0xf1, 0x98, 0xae, 0x57, 0xe9, 0xd3, - 0x79, 0xfa, 0x10, 0x9d, 0x86, 0x09, 0x6b, 0xeb, 0x79, 0x9d, 0xa9, 0xa4, 0xda, 0xb2, 0xf1, 0xb6, - 0xb1, 0x57, 0xbc, 0x9b, 0xca, 0x77, 0x9c, 0x3c, 0xa0, 0x0a, 0xb9, 0x46, 0xab, 0xd1, 0x29, 0x28, - 0xe8, 0xce, 0x8e, 0x66, 0xb7, 0xa8, 0x4d, 0x76, 0x5a, 0x9a, 0x8e, 0x8b, 0xf7, 0x30, 0x52, 0x56, - 0x7f, 0x45, 0x54, 0x93, 0x25, 0xe1, 0x5c, 0x37, 0xb6, 0x5d, 0x81, 0x78, 0x92, 0x2d, 0x09, 0x5a, - 0xc7, 0xd1, 0x66, 0xa1, 0x40, 0x44, 0x11, 0x6a, 0x78, 0x96, 0x92, 0x8d, 0xb5, 0x76, 0x5a, 0xc1, - 0x76, 0xef, 0x82, 0x51, 0x42, 0xe9, 0x37, 0x7a, 0x8a, 0x05, 0x64, 0xad, 0x9d, 0x40, 0x8b, 0x0f, - 0xc3, 0x51, 0x42, 0xd4, 0xc4, 0xae, 0x56, 0xd3, 0x5c, 0x2d, 0x40, 0x7d, 0x3f, 0xa5, 0x26, 0x72, - 0x5f, 0xe1, 0x0f, 0x43, 0xfd, 0xb4, 0xdb, 0x5b, 0xfb, 0x9e, 0x66, 0x3d, 0xc0, 0xfa, 0x49, 0xea, - 0x84, 0x6e, 0xbd, 0x63, 0x41, 0xb7, 0x5c, 0x86, 0x91, 0xa0, 0xe2, 0xa3, 0x1c, 0x30, 0xd5, 0x2f, - 0x48, 0x24, 0x0a, 0x5a, 0x58, 0x5d, 0x24, 0xf1, 0xcb, 0x87, 0xaa, 0x85, 0x14, 0x89, 0xa3, 0x96, - 0x97, 0x36, 0xaa, 0xaa, 0xb2, 0x79, 0x65, 0x63, 0x69, 0xa5, 0x5a, 0x48, 0x07, 0x02, 0xf6, 0x27, - 0x33, 0xd9, 0x7b, 0x0b, 0x27, 0xe5, 0x57, 0x53, 0x30, 0x16, 0xde, 0x81, 0xa1, 0x0f, 0xc2, 0x6d, - 0x22, 0x5d, 0xe2, 0x60, 0x57, 0xbd, 0x6e, 0xd8, 0x74, 0x45, 0x36, 0x35, 0xe6, 0x1d, 0x3d, 0x9d, - 0x98, 0xe2, 0x54, 0xeb, 0xd8, 0x7d, 0xc6, 0xb0, 0xc9, 0x7a, 0x6b, 0x6a, 0x2e, 0x5a, 0x86, 0x19, - 0xd3, 0x52, 0x1d, 0x57, 0x33, 0x6b, 0x9a, 0x5d, 0x53, 0xfd, 0x44, 0x95, 0xaa, 0xe9, 0x3a, 0x76, - 0x1c, 0x8b, 0x79, 0x42, 0x0f, 0xe5, 0x0e, 0xd3, 0x5a, 0xe7, 0xc4, 0xbe, 0x8b, 0x98, 0xe7, 0xa4, - 0x11, 0xfd, 0x4d, 0xf7, 0xd2, 0xdf, 0xdb, 0x21, 0xd7, 0xd4, 0x5a, 0x2a, 0x36, 0x5d, 0x7b, 0x9f, - 0xc6, 0xdd, 0x59, 0x25, 0xdb, 0xd4, 0x5a, 0x55, 0x52, 0x7e, 0x57, 0xb6, 0x3f, 0x4f, 0x66, 0xb2, - 0xd9, 0x42, 0xee, 0xc9, 0x4c, 0x36, 0x57, 0x00, 0xf9, 0xb5, 0x34, 0x8c, 0x04, 0xe3, 0x70, 0xb2, - 0xad, 0xd1, 0xa9, 0xcb, 0x92, 0xa8, 0x51, 0xbb, 0xeb, 0xc0, 0xa8, 0x7d, 0x6e, 0x81, 0xf8, 0xb2, - 0xf2, 0x10, 0x8b, 0x8e, 0x15, 0xc6, 0x49, 0xe2, 0x08, 0xa2, 0x6c, 0x98, 0x45, 0x23, 0x59, 0x85, - 0x97, 0xd0, 0x25, 0x18, 0x7a, 0xde, 0xa1, 0xd8, 0x43, 0x14, 0xfb, 0xee, 0x83, 0xb1, 0x9f, 0x5c, - 0xa7, 0xe0, 0xb9, 0x27, 0xd7, 0xd5, 0x2b, 0xab, 0xca, 0xca, 0xfc, 0xb2, 0xc2, 0xd9, 0xd1, 0x31, - 0xc8, 0x34, 0xb4, 0x17, 0xf7, 0xc3, 0x5e, 0x8f, 0x56, 0x25, 0x9d, 0x84, 0x63, 0x90, 0xb9, 0x8e, - 0xb5, 0x6b, 0x61, 0x5f, 0x43, 0xab, 0xde, 0xc1, 0xc5, 0x70, 0x06, 0x06, 0xa9, 0xbc, 0x10, 0x00, - 0x97, 0x58, 0x61, 0x00, 0x65, 0x21, 0xb3, 0xb0, 0xaa, 0x90, 0x05, 0x51, 0x80, 0x11, 0x56, 0xab, - 0xae, 0x2d, 0x55, 0x17, 0xaa, 0x85, 0x94, 0xfc, 0x08, 0x0c, 0x31, 0x21, 0x90, 0xc5, 0xe2, 0x89, - 0xa1, 0x30, 0xc0, 0x8b, 0x1c, 0x43, 0x12, 0x4f, 0x37, 0x57, 0x2a, 0x55, 0xa5, 0x90, 0x0a, 0x4f, - 0x75, 0xa6, 0x30, 0x28, 0x3b, 0x30, 0x12, 0x0c, 0xc4, 0xdf, 0x9d, 0x4d, 0xf6, 0x37, 0x25, 0xc8, - 0x07, 0x02, 0x6b, 0x12, 0x11, 0x69, 0x8d, 0x86, 0x75, 0x5d, 0xd5, 0x1a, 0x86, 0xe6, 0x70, 0xd5, - 0x00, 0x5a, 0x35, 0x4f, 0x6a, 0x92, 0x4e, 0xdd, 0xbb, 0xb4, 0x44, 0x06, 0x0b, 0x43, 0xf2, 0x97, - 0x24, 0x28, 0x44, 0x23, 0xdb, 0x48, 0x37, 0xa5, 0x1f, 0x65, 0x37, 0xe5, 0x2f, 0x48, 0x30, 0x16, - 0x0e, 0x67, 0x23, 0xdd, 0x3b, 0xf1, 0x23, 0xed, 0xde, 0x1f, 0xa5, 0x60, 0x34, 0x14, 0xc4, 0x26, - 0xed, 0xdd, 0x0b, 0x30, 0x61, 0xd4, 0x70, 0xb3, 0x65, 0xb9, 0xd8, 0xd4, 0xf7, 0xd5, 0x06, 0xde, - 0xc5, 0x8d, 0xa2, 0x4c, 0x8d, 0xc6, 0x99, 0x83, 0xc3, 0xe4, 0xb9, 0x25, 0x9f, 0x6f, 0x99, 0xb0, - 0x95, 0x27, 0x97, 0x16, 0xab, 0x2b, 0x6b, 0xab, 0x1b, 0xd5, 0x2b, 0x0b, 0xcf, 0xa9, 0x9b, 0x57, - 0x9e, 0xba, 0xb2, 0xfa, 0xcc, 0x15, 0xa5, 0x60, 0x44, 0xc8, 0xde, 0xc1, 0x65, 0xbf, 0x06, 0x85, - 0x68, 0xa7, 0xd0, 0x6d, 0xd0, 0xad, 0x5b, 0x85, 0x01, 0x34, 0x09, 0xe3, 0x57, 0x56, 0xd5, 0xf5, - 0xa5, 0xc5, 0xaa, 0x5a, 0xbd, 0x78, 0xb1, 0xba, 0xb0, 0xb1, 0xce, 0x12, 0x1f, 0x1e, 0xf5, 0x46, - 0x68, 0x81, 0xcb, 0x9f, 0x4f, 0xc3, 0x64, 0x97, 0x9e, 0xa0, 0x79, 0xbe, 0x65, 0x61, 0xbb, 0xa8, - 0x07, 0x92, 0xf4, 0x7e, 0x8e, 0xc4, 0x0c, 0x6b, 0x9a, 0xed, 0xf2, 0x1d, 0xce, 0x29, 0x20, 0x52, - 0x32, 0x5d, 0x63, 0xdb, 0xc0, 0x36, 0xcf, 0x13, 0xb1, 0x7d, 0xcc, 0xb8, 0x5f, 0xcf, 0x52, 0x45, - 0xf7, 0x03, 0x6a, 0x59, 0x8e, 0xe1, 0x1a, 0xbb, 0x58, 0x35, 0x4c, 0x91, 0x54, 0x22, 0xfb, 0x9a, - 0x8c, 0x52, 0x10, 0x4f, 0x96, 0x4c, 0xd7, 0xa3, 0x36, 0x71, 0x5d, 0x8b, 0x50, 0x13, 0x63, 0x9e, - 0x56, 0x0a, 0xe2, 0x89, 0x47, 0x7d, 0x02, 0x46, 0x6a, 0x56, 0x9b, 0x04, 0x7b, 0x8c, 0x8e, 0xf8, - 0x0e, 0x49, 0xc9, 0xb3, 0x3a, 0x8f, 0x84, 0x87, 0xf1, 0x7e, 0x36, 0x6b, 0x44, 0xc9, 0xb3, 0x3a, - 0x46, 0x72, 0x12, 0xc6, 0xb5, 0x7a, 0xdd, 0x26, 0xe0, 0x02, 0x88, 0x6d, 0x4c, 0xc6, 0xbc, 0x6a, - 0x4a, 0x58, 0x7a, 0x12, 0xb2, 0x42, 0x0e, 0xc4, 0x55, 0x13, 0x49, 0xa8, 0x2d, 0xb6, 0xdb, 0x4e, - 0xcd, 0xe6, 0x94, 0xac, 0x29, 0x1e, 0x9e, 0x80, 0x11, 0xc3, 0x51, 0xfd, 0xe4, 0x7c, 0xea, 0x78, - 0x6a, 0x36, 0xab, 0xe4, 0x0d, 0xc7, 0x4b, 0x6c, 0xca, 0x5f, 0x49, 0xc1, 0x58, 0xf8, 0x70, 0x01, - 0x2d, 0x42, 0xb6, 0x61, 0xe9, 0x1a, 0x55, 0x2d, 0x76, 0xb2, 0x35, 0x1b, 0x73, 0x1e, 0x31, 0xb7, - 0xcc, 0xe9, 0x15, 0x8f, 0xb3, 0xf4, 0x1f, 0x25, 0xc8, 0x8a, 0x6a, 0x74, 0x14, 0x32, 0x2d, 0xcd, - 0xdd, 0xa1, 0x70, 0x83, 0x95, 0x54, 0x41, 0x52, 0x68, 0x99, 0xd4, 0x3b, 0x2d, 0xcd, 0xa4, 0x2a, - 0xc0, 0xeb, 0x49, 0x99, 0xcc, 0x6b, 0x03, 0x6b, 0x35, 0xba, 0xeb, 0xb1, 0x9a, 0x4d, 0x6c, 0xba, - 0x8e, 0x98, 0x57, 0x5e, 0xbf, 0xc0, 0xab, 0xd1, 0x7d, 0x30, 0xe1, 0xda, 0x9a, 0xd1, 0x08, 0xd1, - 0x66, 0x28, 0x6d, 0x41, 0x3c, 0xf0, 0x88, 0xcb, 0x70, 0x4c, 0xe0, 0xd6, 0xb0, 0xab, 0xe9, 0x3b, - 0xb8, 0xe6, 0x33, 0x0d, 0xd1, 0xec, 0xc6, 0x6d, 0x9c, 0x60, 0x91, 0x3f, 0x17, 0xbc, 0xf2, 0xab, - 0x12, 0x4c, 0x88, 0x7d, 0x5a, 0xcd, 0x13, 0xd6, 0x0a, 0x80, 0x66, 0x9a, 0x96, 0x1b, 0x14, 0x57, - 0xa7, 0x2a, 0x77, 0xf0, 0xcd, 0xcd, 0x7b, 0x4c, 0x4a, 0x00, 0xa0, 0xd4, 0x04, 0xf0, 0x9f, 0xf4, - 0x14, 0xdb, 0x0c, 0xe4, 0xf9, 0xc9, 0x11, 0x3d, 0x7e, 0x64, 0x3b, 0x7b, 0x60, 0x55, 0x64, 0x43, - 0x87, 0xa6, 0x60, 0x70, 0x0b, 0xd7, 0x0d, 0x93, 0xe7, 0x83, 0x59, 0x41, 0xe4, 0x5f, 0x32, 0x5e, - 0xfe, 0xa5, 0xf2, 0x19, 0x09, 0x26, 0x75, 0xab, 0x19, 0xed, 0x6f, 0xa5, 0x10, 0x49, 0x2f, 0x38, - 0x97, 0xa5, 0x0f, 0x3d, 0x5e, 0x37, 0xdc, 0x9d, 0xf6, 0xd6, 0x9c, 0x6e, 0x35, 0xcf, 0xd4, 0xad, - 0x86, 0x66, 0xd6, 0xfd, 0xf3, 0x53, 0xfa, 0x43, 0x7f, 0xa0, 0x8e, 0xcd, 0x07, 0xea, 0x56, 0xe0, - 0x34, 0xf5, 0x82, 0xff, 0xf3, 0x2f, 0x24, 0xe9, 0xcb, 0xa9, 0xf4, 0xa5, 0xb5, 0xca, 0xd7, 0x52, - 0xa5, 0x4b, 0xac, 0xb9, 0x35, 0x21, 0x1e, 0x05, 0x6f, 0x37, 0xb0, 0x4e, 0x86, 0x0c, 0x3f, 0xbc, - 0x0f, 0xa6, 0xea, 0x56, 0xdd, 0xa2, 0x88, 0x67, 0xc8, 0x2f, 0x7e, 0x22, 0x9b, 0xf3, 0x6a, 0x4b, - 0xb1, 0xc7, 0xb7, 0xe5, 0x2b, 0x30, 0xc9, 0x89, 0x55, 0x7a, 0x24, 0xc4, 0x36, 0x36, 0xe8, 0xc0, - 0xb4, 0x5a, 0xf1, 0xb7, 0xbf, 0x4f, 0x1d, 0xba, 0x32, 0xc1, 0x59, 0xc9, 0x33, 0xb6, 0xf7, 0x29, - 0x2b, 0x70, 0x24, 0x84, 0xc7, 0x96, 0x2d, 0xb6, 0x63, 0x10, 0xff, 0x0d, 0x47, 0x9c, 0x0c, 0x20, - 0xae, 0x73, 0xd6, 0xf2, 0x02, 0x8c, 0xf6, 0x83, 0xf5, 0xfb, 0x1c, 0x6b, 0x04, 0x07, 0x41, 0x2e, - 0xc1, 0x38, 0x05, 0xd1, 0xdb, 0x8e, 0x6b, 0x35, 0xa9, 0x4d, 0x3c, 0x18, 0xe6, 0xdf, 0x7e, 0x9f, - 0xad, 0xa3, 0x31, 0xc2, 0xb6, 0xe0, 0x71, 0x95, 0xcb, 0x40, 0x4f, 0xc1, 0x6a, 0x58, 0x6f, 0xc4, - 0x20, 0x7c, 0x9b, 0x77, 0xc4, 0xa3, 0x2f, 0x5f, 0x85, 0x29, 0xf2, 0x9b, 0x9a, 0xac, 0x60, 0x4f, - 0xe2, 0x73, 0x70, 0xc5, 0x57, 0x3f, 0xc6, 0x96, 0xea, 0xa4, 0x07, 0x10, 0xe8, 0x53, 0x60, 0x16, - 0xeb, 0xd8, 0x75, 0xb1, 0xed, 0xa8, 0x5a, 0xa3, 0x5b, 0xf7, 0x02, 0x49, 0x8c, 0xe2, 0x2f, 0xbf, - 0x11, 0x9e, 0xc5, 0x4b, 0x8c, 0x73, 0xbe, 0xd1, 0x28, 0x6f, 0xc2, 0x6d, 0x5d, 0xb4, 0x22, 0x01, - 0xe6, 0xe7, 0x39, 0xe6, 0x54, 0x87, 0x66, 0x10, 0xd8, 0x35, 0x10, 0xf5, 0xde, 0x5c, 0x26, 0xc0, - 0xfc, 0x15, 0x8e, 0x89, 0x38, 0xaf, 0x98, 0x52, 0x82, 0xf8, 0x24, 0x4c, 0xec, 0x62, 0x7b, 0xcb, - 0x72, 0x78, 0xe2, 0x28, 0x01, 0xdc, 0x17, 0x38, 0xdc, 0x38, 0x67, 0xa4, 0x99, 0x24, 0x82, 0x75, - 0x1e, 0xb2, 0xdb, 0x9a, 0x8e, 0x13, 0x40, 0x7c, 0x91, 0x43, 0x0c, 0x13, 0x7a, 0xc2, 0x3a, 0x0f, - 0x23, 0x75, 0x8b, 0x7b, 0xad, 0x78, 0xf6, 0x2f, 0x71, 0xf6, 0xbc, 0xe0, 0xe1, 0x10, 0x2d, 0xab, - 0xd5, 0x6e, 0x10, 0x97, 0x16, 0x0f, 0xf1, 0x77, 0x05, 0x84, 0xe0, 0xe1, 0x10, 0x7d, 0x88, 0xf5, - 0x15, 0x01, 0xe1, 0x04, 0xe4, 0xf9, 0x04, 0xe4, 0x2d, 0xb3, 0xb1, 0x6f, 0x99, 0x49, 0x3a, 0xf1, - 0xab, 0x1c, 0x01, 0x38, 0x0b, 0x01, 0xb8, 0x00, 0xb9, 0xa4, 0x13, 0xf1, 0xf7, 0xde, 0x10, 0xcb, - 0x43, 0xcc, 0xc0, 0x25, 0x18, 0x17, 0x06, 0xca, 0xb0, 0xcc, 0x04, 0x10, 0x7f, 0x9f, 0x43, 0x8c, - 0x05, 0xd8, 0xf8, 0x30, 0x5c, 0xec, 0xb8, 0x75, 0x9c, 0x04, 0xe4, 0x2b, 0x62, 0x18, 0x9c, 0x85, - 0x8b, 0x72, 0x0b, 0x9b, 0xfa, 0x4e, 0x32, 0x84, 0xaf, 0x0a, 0x51, 0x0a, 0x1e, 0x02, 0xb1, 0x00, - 0xa3, 0x4d, 0xcd, 0x76, 0x76, 0xb4, 0x46, 0xa2, 0xe9, 0xf8, 0x07, 0x1c, 0x63, 0xc4, 0x63, 0xe2, - 0x12, 0x69, 0x9b, 0xfd, 0xc0, 0x7c, 0x4d, 0x48, 0x24, 0xc0, 0xc6, 0x97, 0x9e, 0xe3, 0xd2, 0x2c, - 0x5b, 0x3f, 0x68, 0xbf, 0x2e, 0x96, 0x1e, 0xe3, 0x5d, 0x09, 0x22, 0x5e, 0x80, 0x9c, 0x63, 0xbc, - 0x98, 0x08, 0xe6, 0x37, 0xc4, 0x4c, 0x53, 0x06, 0xc2, 0xfc, 0x1c, 0x1c, 0xeb, 0xea, 0x26, 0x12, - 0x80, 0xfd, 0x43, 0x0e, 0x76, 0xb4, 0x8b, 0xab, 0xe0, 0x26, 0xa1, 0x5f, 0xc8, 0x7f, 0x24, 0x4c, - 0x02, 0x8e, 0x60, 0xad, 0x91, 0x7d, 0x84, 0xa3, 0x6d, 0xf7, 0x27, 0xb5, 0xdf, 0x14, 0x52, 0x63, - 0xbc, 0x21, 0xa9, 0x6d, 0xc0, 0x51, 0x8e, 0xd8, 0xdf, 0xbc, 0xfe, 0x96, 0x30, 0xac, 0x8c, 0x7b, - 0x33, 0x3c, 0xbb, 0x1f, 0x86, 0x92, 0x27, 0x4e, 0x11, 0xb0, 0x3a, 0x6a, 0x53, 0x6b, 0x25, 0x40, - 0xfe, 0x6d, 0x8e, 0x2c, 0x2c, 0xbe, 0x17, 0xf1, 0x3a, 0x2b, 0x5a, 0x8b, 0x80, 0x3f, 0x0b, 0x45, - 0x01, 0xde, 0x36, 0x6d, 0xac, 0x5b, 0x75, 0xd3, 0x78, 0x11, 0xd7, 0x12, 0x40, 0xff, 0xe3, 0xc8, - 0x54, 0x6d, 0x06, 0xd8, 0x09, 0xf2, 0x12, 0x14, 0xbc, 0x58, 0x45, 0x35, 0x9a, 0x2d, 0xcb, 0x76, - 0x63, 0x10, 0xff, 0x89, 0x98, 0x29, 0x8f, 0x6f, 0x89, 0xb2, 0x95, 0xab, 0x30, 0x46, 0x8b, 0x49, - 0x55, 0xf2, 0xeb, 0x1c, 0x68, 0xd4, 0xe7, 0xe2, 0x86, 0x43, 0xb7, 0x9a, 0x2d, 0xcd, 0x4e, 0x62, - 0xff, 0xfe, 0xa9, 0x30, 0x1c, 0x9c, 0x85, 0x1b, 0x0e, 0x77, 0xbf, 0x85, 0x89, 0xb7, 0x4f, 0x80, - 0xf0, 0x3b, 0xc2, 0x70, 0x08, 0x1e, 0x0e, 0x21, 0x02, 0x86, 0x04, 0x10, 0xff, 0x4c, 0x40, 0x08, - 0x1e, 0x02, 0xf1, 0xb4, 0xef, 0x68, 0x6d, 0x5c, 0x37, 0x1c, 0xd7, 0x66, 0x61, 0xf2, 0xc1, 0x50, - 0xdf, 0x78, 0x23, 0x1c, 0x84, 0x29, 0x01, 0x56, 0x62, 0x89, 0x78, 0xda, 0x95, 0xee, 0xa2, 0xe2, - 0x3b, 0xf6, 0xbb, 0xc2, 0x12, 0x05, 0xd8, 0x48, 0xdf, 0x02, 0x11, 0x22, 0x11, 0xbb, 0x4e, 0xf6, - 0x0e, 0x09, 0xe0, 0x7e, 0x2f, 0xd2, 0xb9, 0x75, 0xc1, 0x4b, 0x30, 0x03, 0xf1, 0x4f, 0xdb, 0xbc, - 0x86, 0xf7, 0x13, 0x69, 0xe7, 0x3f, 0x8f, 0xc4, 0x3f, 0x9b, 0x8c, 0x93, 0xd9, 0x90, 0xf1, 0x48, - 0x3c, 0x85, 0xe2, 0xee, 0x0f, 0x15, 0xff, 0xea, 0x9b, 0x7c, 0xbc, 0xe1, 0x70, 0xaa, 0xbc, 0x4c, - 0x94, 0x3c, 0x1c, 0xf4, 0xc4, 0x83, 0x7d, 0xec, 0x4d, 0x4f, 0xcf, 0x43, 0x31, 0x4f, 0xf9, 0x22, - 0x8c, 0x86, 0x02, 0x9e, 0x78, 0xa8, 0x8f, 0x73, 0xa8, 0x91, 0x60, 0xbc, 0x53, 0x7e, 0x04, 0x32, - 0x24, 0x78, 0x89, 0x67, 0xff, 0x39, 0xce, 0x4e, 0xc9, 0xcb, 0x3f, 0x05, 0x59, 0x11, 0xb4, 0xc4, - 0xb3, 0xfe, 0x3c, 0x67, 0xf5, 0x58, 0x08, 0xbb, 0x08, 0x58, 0xe2, 0xd9, 0x3f, 0x21, 0xd8, 0x05, - 0x0b, 0x61, 0x4f, 0x2e, 0xc2, 0x6f, 0xfe, 0xf5, 0x0c, 0x77, 0x3a, 0x42, 0x76, 0x17, 0x60, 0x98, - 0x47, 0x2a, 0xf1, 0xdc, 0x9f, 0xe4, 0x8d, 0x0b, 0x8e, 0xf2, 0xa3, 0x30, 0x98, 0x50, 0xe0, 0x9f, - 0xe6, 0xac, 0x8c, 0xbe, 0xbc, 0x00, 0xf9, 0x40, 0x74, 0x12, 0xcf, 0xfe, 0x37, 0x38, 0x7b, 0x90, - 0x8b, 0x74, 0x9d, 0x47, 0x27, 0xf1, 0x00, 0x9f, 0x11, 0x5d, 0xe7, 0x1c, 0x44, 0x6c, 0x22, 0x30, - 0x89, 0xe7, 0xfe, 0xac, 0x90, 0xba, 0x60, 0x29, 0x3f, 0x01, 0x39, 0xcf, 0xd9, 0xc4, 0xf3, 0xff, - 0x4d, 0xce, 0xef, 0xf3, 0x10, 0x09, 0x04, 0x9c, 0x5d, 0x3c, 0xc4, 0x2f, 0x0a, 0x09, 0x04, 0xb8, - 0xc8, 0x32, 0x8a, 0x06, 0x30, 0xf1, 0x48, 0x7f, 0x4b, 0x2c, 0xa3, 0x48, 0xfc, 0x42, 0x66, 0x93, - 0xda, 0xfc, 0x78, 0x88, 0xcf, 0x89, 0xd9, 0xa4, 0xf4, 0xa4, 0x1b, 0xd1, 0x88, 0x20, 0x1e, 0xe3, - 0xef, 0x88, 0x6e, 0x44, 0x02, 0x82, 0xf2, 0x1a, 0xa0, 0xce, 0x68, 0x20, 0x1e, 0xef, 0x65, 0x8e, - 0x37, 0xd1, 0x11, 0x0c, 0x94, 0x9f, 0x81, 0xa3, 0xdd, 0x23, 0x81, 0x78, 0xd4, 0x5f, 0x7e, 0x33, - 0xb2, 0x77, 0x0b, 0x06, 0x02, 0xe5, 0x0d, 0xdf, 0xa5, 0x04, 0xa3, 0x80, 0x78, 0xd8, 0xcf, 0xbf, - 0x19, 0x36, 0xdc, 0xc1, 0x20, 0xa0, 0x3c, 0x0f, 0xe0, 0x3b, 0xe0, 0x78, 0xac, 0x2f, 0x70, 0xac, - 0x00, 0x13, 0x59, 0x1a, 0xdc, 0xff, 0xc6, 0xf3, 0x7f, 0x51, 0x2c, 0x0d, 0xce, 0x41, 0x96, 0x86, - 0x70, 0xbd, 0xf1, 0xdc, 0x5f, 0x12, 0x4b, 0x43, 0xb0, 0x10, 0xcd, 0x0e, 0x78, 0xb7, 0x78, 0x84, - 0x5f, 0x15, 0x9a, 0x1d, 0xe0, 0x2a, 0x5f, 0x81, 0x89, 0x0e, 0x87, 0x18, 0x0f, 0xf5, 0x65, 0x0e, - 0x55, 0x88, 0xfa, 0xc3, 0xa0, 0xf3, 0xe2, 0xce, 0x30, 0x1e, 0xed, 0xd7, 0x22, 0xce, 0x8b, 0xfb, - 0xc2, 0xf2, 0x05, 0xc8, 0x9a, 0xed, 0x46, 0x83, 0x2c, 0x1e, 0x74, 0xf0, 0x9d, 0xbf, 0xe2, 0x9f, - 0xbc, 0xc5, 0xa5, 0x23, 0x18, 0xca, 0x8f, 0xc0, 0x20, 0x6e, 0x6e, 0xe1, 0x5a, 0x1c, 0xe7, 0x0f, - 0xdf, 0x12, 0x06, 0x93, 0x50, 0x97, 0x9f, 0x00, 0x60, 0xa9, 0x11, 0x7a, 0x3c, 0x18, 0xc3, 0xfb, - 0x3f, 0xde, 0xe2, 0xb7, 0x71, 0x7c, 0x16, 0x1f, 0x80, 0xdd, 0xed, 0x39, 0x18, 0xe0, 0x8d, 0x30, - 0x00, 0x9d, 0x91, 0xf3, 0x30, 0xfc, 0xbc, 0x63, 0x99, 0xae, 0x56, 0x8f, 0xe3, 0xfe, 0x9f, 0x9c, - 0x5b, 0xd0, 0x13, 0x81, 0x35, 0x2d, 0x1b, 0xbb, 0x5a, 0xdd, 0x89, 0xe3, 0xfd, 0x5f, 0x9c, 0xd7, - 0x63, 0x20, 0xcc, 0xba, 0xe6, 0xb8, 0x49, 0xc6, 0xfd, 0xa7, 0x82, 0x59, 0x30, 0x90, 0x4e, 0x93, - 0xdf, 0xd7, 0xf0, 0x7e, 0x1c, 0xef, 0x9f, 0x89, 0x4e, 0x73, 0xfa, 0xf2, 0x4f, 0x41, 0x8e, 0xfc, - 0x64, 0x57, 0xec, 0x62, 0x98, 0xff, 0x37, 0x67, 0xf6, 0x39, 0x48, 0xcb, 0x8e, 0x5b, 0x73, 0x8d, - 0x78, 0x61, 0xdf, 0xe4, 0x33, 0x2d, 0xe8, 0xcb, 0xf3, 0x90, 0x77, 0xdc, 0x5a, 0xad, 0xcd, 0xe3, - 0xd3, 0x18, 0xf6, 0xff, 0xf3, 0x96, 0x97, 0xb2, 0xf0, 0x78, 0xc8, 0x6c, 0x5f, 0xbf, 0xe6, 0xb6, - 0x2c, 0x7a, 0x04, 0x12, 0x87, 0xf0, 0x26, 0x47, 0x08, 0xb0, 0x94, 0x17, 0x60, 0x84, 0x8c, 0xc5, - 0xc6, 0x2d, 0x4c, 0xcf, 0xab, 0x62, 0x20, 0xfe, 0x2f, 0x17, 0x40, 0x88, 0xa9, 0xf2, 0xb3, 0xdf, - 0x7e, 0x6d, 0x5a, 0xfa, 0xce, 0x6b, 0xd3, 0xd2, 0x1f, 0xbd, 0x36, 0x2d, 0x7d, 0xf6, 0xf5, 0xe9, - 0x81, 0xef, 0xbc, 0x3e, 0x3d, 0xf0, 0x87, 0xaf, 0x4f, 0x0f, 0x74, 0x4f, 0x1b, 0xc3, 0x25, 0xeb, - 0x92, 0xc5, 0x12, 0xc6, 0x1f, 0x92, 0x43, 0xe9, 0xe2, 0xba, 0xe5, 0x67, 0x6b, 0xbd, 0x4d, 0x0e, - 0x7c, 0x3c, 0x0d, 0xd3, 0xba, 0xe5, 0x34, 0x2d, 0xe7, 0xcc, 0x96, 0xe6, 0xe0, 0x33, 0xbb, 0x0f, - 0x6e, 0x61, 0x57, 0x7b, 0xf0, 0x8c, 0x6e, 0x19, 0x26, 0x4f, 0xfb, 0x4e, 0xb2, 0xe7, 0x73, 0xe4, - 0xf9, 0x1c, 0x7f, 0x5e, 0xea, 0x9a, 0x21, 0x96, 0x2f, 0x41, 0x66, 0xc1, 0x32, 0x4c, 0x34, 0x05, - 0x83, 0x35, 0x6c, 0x5a, 0x4d, 0x7e, 0x03, 0x8c, 0x15, 0xd0, 0x5d, 0x30, 0xa4, 0x35, 0xad, 0xb6, - 0xe9, 0xb2, 0x74, 0x79, 0x25, 0xff, 0xed, 0x1b, 0x33, 0x03, 0xff, 0xf5, 0xc6, 0x4c, 0x7a, 0xc9, - 0x74, 0x15, 0xfe, 0xa8, 0x9c, 0xf9, 0xc1, 0x2b, 0x33, 0x92, 0xfc, 0x24, 0x0c, 0x2f, 0x62, 0xfd, - 0x30, 0x58, 0x8b, 0x58, 0x8f, 0x60, 0x9d, 0x82, 0xec, 0x92, 0xe9, 0xb2, 0x3b, 0x7a, 0x77, 0x42, - 0xda, 0x30, 0xd9, 0xad, 0x8f, 0x48, 0xfb, 0xa4, 0x9e, 0x90, 0x2e, 0x62, 0xdd, 0x23, 0xad, 0x61, - 0x3d, 0x4a, 0x4a, 0xe0, 0x49, 0x7d, 0x65, 0xf1, 0x0f, 0xff, 0x78, 0x7a, 0xe0, 0xa5, 0xd7, 0xa6, - 0x07, 0x7a, 0xcd, 0x4f, 0x48, 0xfc, 0x5c, 0xc4, 0xec, 0xcf, 0x03, 0x4e, 0xed, 0xda, 0x19, 0xb2, - 0xb4, 0x9c, 0xad, 0x21, 0x2a, 0xb7, 0x87, 0xe0, 0xf7, 0x52, 0x70, 0x0f, 0xbd, 0x75, 0x6d, 0x37, - 0x0d, 0xd3, 0x3d, 0xa3, 0xdb, 0xfb, 0x2d, 0xd7, 0x3a, 0xd3, 0xc4, 0xf6, 0xb5, 0x06, 0xe6, 0x7f, - 0xf8, 0x6c, 0x14, 0x7d, 0xb2, 0x39, 0x46, 0x36, 0xc7, 0x9e, 0xf7, 0x98, 0x92, 0x05, 0x18, 0x5e, - 0xb3, 0x2d, 0x6b, 0x7b, 0xb5, 0x85, 0x10, 0xbf, 0x48, 0xce, 0x2f, 0x28, 0x52, 0x6b, 0x50, 0x80, - 0xf4, 0x35, 0xbc, 0x4f, 0x85, 0x38, 0xa2, 0x90, 0x9f, 0x84, 0xaa, 0xa6, 0xb9, 0x1a, 0x3d, 0xb7, - 0x18, 0x51, 0xe8, 0x6f, 0xb9, 0x02, 0x83, 0x14, 0x04, 0x9d, 0x87, 0xb4, 0xd5, 0x72, 0xf8, 0x21, - 0xcb, 0x89, 0xb9, 0x5e, 0x7d, 0x99, 0xe3, 0x4d, 0x56, 0x32, 0x44, 0x6e, 0x0a, 0xe1, 0xa9, 0xac, - 0xfd, 0xc5, 0x1f, 0x4f, 0x4b, 0x5f, 0x7d, 0x6d, 0x5a, 0xea, 0x29, 0xb0, 0xb9, 0x80, 0xc0, 0x02, - 0xc2, 0xe8, 0x25, 0x17, 0x4f, 0x78, 0x9f, 0x4a, 0xc1, 0x74, 0x80, 0xa8, 0x61, 0x6c, 0x39, 0x67, - 0xae, 0xed, 0x32, 0x09, 0x73, 0xa9, 0xa1, 0x40, 0x4f, 0xc9, 0xf3, 0xb9, 0x6b, 0xbb, 0x3d, 0xe4, - 0x35, 0x07, 0x99, 0x35, 0xcd, 0xb0, 0x85, 0x60, 0x24, 0x5f, 0x30, 0x53, 0xfe, 0x1d, 0x63, 0x52, - 0xc7, 0x0a, 0xf2, 0x59, 0xc8, 0x3e, 0xb5, 0x74, 0xee, 0xe1, 0x24, 0x3c, 0x69, 0xce, 0x53, 0x51, - 0x84, 0x28, 0xbe, 0xd1, 0x45, 0x1c, 0xdf, 0x7c, 0x7d, 0x5a, 0xf2, 0x44, 0x32, 0x1b, 0x2b, 0x12, - 0x3e, 0x5a, 0x4f, 0x18, 0x9f, 0x4d, 0xc1, 0x4c, 0xf4, 0x70, 0x86, 0x58, 0x44, 0xc7, 0xd5, 0x9a, - 0xad, 0x5e, 0xaf, 0xd6, 0x5d, 0x80, 0xdc, 0x86, 0xa0, 0x41, 0x45, 0x18, 0x76, 0xb0, 0x6e, 0x99, - 0x35, 0x87, 0x8e, 0x24, 0xad, 0x88, 0x22, 0x19, 0x8d, 0xa9, 0x99, 0x96, 0xc3, 0x6f, 0xfe, 0xb2, - 0x42, 0xe5, 0x6f, 0x4b, 0xfd, 0x99, 0xa8, 0x31, 0xaf, 0x29, 0xba, 0xd0, 0xd6, 0xa4, 0x0f, 0xdd, - 0x77, 0xd0, 0xb9, 0x16, 0x9d, 0x46, 0x7f, 0x08, 0x81, 0x43, 0xac, 0xe9, 0xe8, 0x21, 0xd6, 0x33, - 0xb8, 0xd1, 0x78, 0xca, 0xb4, 0xae, 0x9b, 0x1b, 0xa1, 0xc5, 0xf5, 0x0b, 0x29, 0x98, 0xee, 0x38, - 0xaf, 0xe2, 0x56, 0xbe, 0x97, 0x44, 0xca, 0x90, 0x5d, 0x14, 0xce, 0xa3, 0x5f, 0x81, 0x7c, 0xae, - 0x4f, 0x81, 0x8c, 0x8a, 0x96, 0x84, 0x3c, 0x4e, 0xc7, 0xcb, 0x43, 0xf4, 0xff, 0x10, 0xe2, 0xf8, - 0xf8, 0xe3, 0x70, 0x22, 0xa0, 0x40, 0xda, 0x96, 0x6e, 0x9c, 0xe1, 0x42, 0x0e, 0xac, 0x98, 0x23, - 0x81, 0x15, 0x43, 0x48, 0xe6, 0xe8, 0xc3, 0xee, 0x8b, 0xa6, 0x94, 0xcc, 0x76, 0x95, 0x62, 0x56, - 0x69, 0x29, 0x4e, 0x71, 0x4b, 0x31, 0xd3, 0x28, 0xff, 0xf9, 0x20, 0x0c, 0x2b, 0xf8, 0x85, 0x36, - 0x76, 0xe8, 0x9b, 0xa1, 0x58, 0xdf, 0xb1, 0xf8, 0x4b, 0x07, 0xf2, 0x5c, 0xd7, 0xf1, 0xcc, 0x71, - 0xea, 0xaa, 0xbe, 0x63, 0x5d, 0x1e, 0x50, 0x28, 0x07, 0x7d, 0x15, 0xaf, 0xd1, 0x76, 0x76, 0xf8, - 0xdd, 0xf0, 0xbb, 0x0e, 0x66, 0xbd, 0x48, 0x48, 0x2f, 0x0f, 0x28, 0x8c, 0x87, 0x34, 0x4b, 0x5f, - 0x23, 0xcc, 0x24, 0x69, 0x76, 0xc9, 0xdc, 0xa6, 0xcd, 0x12, 0x0e, 0x74, 0x19, 0xc0, 0xc1, 0xae, - 0xb8, 0x51, 0x32, 0x48, 0xf9, 0x4f, 0x1e, 0xcc, 0xbf, 0x8e, 0x5d, 0x16, 0x3d, 0x5c, 0x1e, 0x50, - 0x72, 0x8e, 0x28, 0x10, 0x24, 0xc3, 0x34, 0x5c, 0x55, 0xdf, 0xd1, 0x0c, 0x93, 0x5e, 0x85, 0x88, - 0x45, 0x5a, 0x32, 0x0d, 0x77, 0x81, 0x90, 0x13, 0x24, 0x43, 0x14, 0x88, 0x28, 0x5e, 0x68, 0x63, - 0x7e, 0x05, 0x31, 0x56, 0x14, 0x4f, 0x13, 0x52, 0x22, 0x0a, 0xca, 0x83, 0x9e, 0x82, 0x3c, 0x3d, - 0xf5, 0x56, 0xb7, 0x1a, 0x96, 0x7e, 0x8d, 0xbf, 0xe0, 0x33, 0x7b, 0x30, 0x44, 0x85, 0x30, 0x54, - 0x08, 0xfd, 0xe5, 0x01, 0x05, 0xb6, 0xbc, 0x12, 0xaa, 0x40, 0x96, 0xdd, 0xbe, 0x76, 0xf7, 0xf8, - 0x2b, 0x9a, 0xf7, 0x1c, 0x8c, 0x44, 0x2f, 0x62, 0x6f, 0xec, 0x5d, 0x1e, 0x50, 0x86, 0x75, 0xf6, - 0x13, 0x55, 0x21, 0x87, 0xcd, 0x1a, 0xef, 0x4e, 0x9e, 0xbf, 0xcc, 0x76, 0xb0, 0x5e, 0x98, 0x35, - 0xd1, 0x99, 0x2c, 0xe6, 0xbf, 0xd1, 0xe3, 0x30, 0xa4, 0x5b, 0xcd, 0xa6, 0xe1, 0xd2, 0x57, 0x3d, - 0xf3, 0x67, 0xef, 0x8e, 0xe9, 0x08, 0xa5, 0xbd, 0x3c, 0xa0, 0x70, 0x2e, 0x32, 0x3d, 0x35, 0xdc, - 0x30, 0x76, 0xb1, 0x4d, 0x06, 0x33, 0x99, 0x64, 0x7a, 0x16, 0x19, 0x3d, 0x1d, 0x4e, 0xae, 0x26, - 0x0a, 0x95, 0x61, 0xee, 0x5e, 0xe4, 0x93, 0x90, 0x0f, 0x68, 0x32, 0xb1, 0x58, 0x7c, 0x23, 0xc8, - 0x9d, 0xbd, 0x28, 0xca, 0x63, 0x30, 0x12, 0xd4, 0x5b, 0xb9, 0xe9, 0x31, 0xd2, 0xbb, 0x14, 0x45, - 0x18, 0xde, 0xc5, 0xb6, 0xc3, 0x2e, 0x52, 0x50, 0x46, 0x5e, 0x44, 0x77, 0xc1, 0x28, 0x95, 0x9b, - 0x2a, 0x9e, 0xa7, 0xe8, 0xbd, 0x9d, 0x11, 0x5a, 0x79, 0x95, 0x13, 0xcd, 0x40, 0xbe, 0x75, 0xb6, - 0xe5, 0x91, 0xa4, 0x29, 0x09, 0xb4, 0xce, 0xb6, 0x38, 0x81, 0x5c, 0x86, 0x42, 0x54, 0x75, 0x83, - 0x5e, 0x33, 0xd7, 0xc5, 0x6b, 0xe6, 0x84, 0xa7, 0xfd, 0xad, 0x94, 0xc7, 0xec, 0x69, 0x2b, 0x59, - 0x6e, 0xc4, 0x48, 0x50, 0xee, 0xfc, 0xd9, 0x52, 0x47, 0x84, 0xed, 0xf9, 0x9a, 0x4a, 0x96, 0x84, - 0x22, 0x9f, 0xfd, 0xde, 0x8c, 0xa4, 0x50, 0x0e, 0x74, 0x8c, 0x28, 0x94, 0x66, 0x98, 0xaa, 0x51, - 0x13, 0x2f, 0x75, 0xd3, 0xf2, 0x52, 0x0d, 0x3d, 0x0d, 0x05, 0xdd, 0x32, 0x1d, 0x6c, 0x3a, 0x6d, - 0x47, 0x6d, 0x69, 0xb6, 0xd6, 0xf4, 0xdf, 0x7d, 0xec, 0x3e, 0x4d, 0x0b, 0x82, 0x7c, 0x8d, 0x52, - 0x2b, 0xe3, 0x7a, 0xb8, 0x02, 0x2d, 0x03, 0xec, 0x6a, 0x0d, 0xa3, 0xa6, 0xb9, 0x96, 0xed, 0xf0, - 0x77, 0x84, 0x7a, 0x81, 0x5d, 0x15, 0x84, 0x9b, 0xad, 0x9a, 0xe6, 0x62, 0x1e, 0x44, 0x05, 0xf8, - 0xd1, 0xbd, 0x30, 0xae, 0xb5, 0x5a, 0xaa, 0xe3, 0x6a, 0x2e, 0x56, 0xb7, 0xf6, 0x5d, 0xec, 0x50, - 0x7b, 0x31, 0xa2, 0x8c, 0x6a, 0xad, 0xd6, 0x3a, 0xa9, 0xad, 0x90, 0x4a, 0xb9, 0xe6, 0xcd, 0x36, - 0x5d, 0x9a, 0x5e, 0x6c, 0x27, 0xf9, 0xb1, 0x1d, 0xa9, 0xa3, 0x37, 0x5c, 0x98, 0x0c, 0xc4, 0xa5, - 0xa0, 0xa1, 0x1d, 0x6c, 0xd4, 0x77, 0x5c, 0x3a, 0xec, 0xb4, 0xc2, 0x4b, 0x64, 0x62, 0x5a, 0xb6, - 0xb5, 0xcb, 0x2e, 0x6d, 0x65, 0x15, 0x56, 0x90, 0x7f, 0x29, 0x05, 0x13, 0x1d, 0xcb, 0x97, 0xe0, - 0xd2, 0xf7, 0x2c, 0x78, 0x5b, 0xe4, 0x37, 0xba, 0x40, 0x70, 0xb5, 0x1a, 0x7f, 0x77, 0x28, 0x7f, - 0xf6, 0xce, 0x1e, 0x12, 0xb8, 0x4c, 0x89, 0xf8, 0xc0, 0x39, 0x0b, 0xda, 0x84, 0x42, 0x43, 0x73, - 0x5c, 0x95, 0xad, 0x22, 0xf6, 0xb2, 0x76, 0xfa, 0x40, 0x4b, 0xb0, 0xac, 0x89, 0xd5, 0x47, 0x94, - 0x9b, 0xc3, 0x8d, 0x35, 0x42, 0xb5, 0xe8, 0x59, 0x98, 0xda, 0xda, 0x7f, 0x51, 0x33, 0x5d, 0xc3, - 0xa4, 0x77, 0xbe, 0xc2, 0x73, 0x34, 0xd3, 0x03, 0xba, 0xba, 0x6b, 0xd4, 0xb0, 0xa9, 0x8b, 0xc9, - 0x99, 0xf4, 0x20, 0xbc, 0xc9, 0x73, 0xe4, 0x67, 0x61, 0x2c, 0x6c, 0x8b, 0xd0, 0x18, 0xa4, 0xdc, - 0x3d, 0x2e, 0x91, 0x94, 0xbb, 0x87, 0xce, 0xf1, 0x88, 0x3c, 0x45, 0x2f, 0x2d, 0xf6, 0x72, 0x16, - 0x9c, 0xdb, 0x7f, 0xa5, 0x53, 0x96, 0xbd, 0x95, 0xe0, 0x19, 0x86, 0x28, 0xb6, 0x7c, 0x0a, 0xc6, - 0x23, 0x46, 0x2c, 0x30, 0xad, 0x52, 0x70, 0x5a, 0xe5, 0x71, 0x18, 0x0d, 0xd9, 0x2a, 0xf9, 0x0f, - 0x86, 0x20, 0xab, 0x60, 0xa7, 0x45, 0x94, 0x18, 0x5d, 0x86, 0x1c, 0xde, 0xd3, 0x71, 0xcb, 0x15, - 0x56, 0xe1, 0x20, 0x23, 0xce, 0x78, 0xaa, 0x82, 0x9e, 0x98, 0x2b, 0x8f, 0x19, 0x9d, 0x0f, 0xb9, - 0xe4, 0xbb, 0xe2, 0x40, 0x82, 0x3e, 0xf9, 0x83, 0x61, 0x9f, 0x7c, 0x77, 0x0c, 0x6f, 0xc4, 0x29, - 0x9f, 0x0f, 0x39, 0xe5, 0xb8, 0x86, 0x43, 0x5e, 0x79, 0xa9, 0x8b, 0x57, 0x8e, 0x1b, 0x7e, 0x0f, - 0xb7, 0xbc, 0xd4, 0xc5, 0x2d, 0xcf, 0xc6, 0xf6, 0xa5, 0xab, 0x5f, 0xfe, 0x60, 0xd8, 0x2f, 0xc7, - 0x89, 0x23, 0xe2, 0x98, 0x97, 0xbb, 0x39, 0xe6, 0x53, 0x31, 0x18, 0x3d, 0x3d, 0xf3, 0x42, 0x87, - 0x67, 0xbe, 0x37, 0x06, 0xaa, 0x8b, 0x6b, 0x5e, 0x0a, 0xf9, 0x44, 0x48, 0x24, 0x9b, 0xee, 0x4e, - 0x11, 0x5d, 0xec, 0xf4, 0xf2, 0x27, 0xe3, 0x54, 0xad, 0x9b, 0x9b, 0x7f, 0x22, 0xe2, 0xe6, 0xef, - 0x89, 0x1b, 0x55, 0xc4, 0xcf, 0xfb, 0xde, 0xf9, 0x14, 0xb1, 0x8f, 0x91, 0x95, 0x41, 0x6c, 0x29, - 0xb6, 0x6d, 0xcb, 0x16, 0x79, 0x0d, 0x5a, 0x90, 0x67, 0x89, 0xc5, 0xf6, 0xf5, 0xff, 0x00, 0x4f, - 0x4e, 0x17, 0x6d, 0x40, 0xdb, 0xe5, 0x6f, 0x48, 0x3e, 0x2f, 0xb5, 0x6c, 0x41, 0x6b, 0x9f, 0xe3, - 0xd6, 0x3e, 0xe0, 0xe0, 0x53, 0x61, 0x07, 0x3f, 0x03, 0x79, 0xe2, 0x53, 0x22, 0xbe, 0x5b, 0x6b, - 0x09, 0xdf, 0x8d, 0x4e, 0xc3, 0x04, 0xb5, 0xbf, 0x2c, 0x0c, 0xe0, 0x86, 0x24, 0x43, 0x0d, 0xc9, - 0x38, 0x79, 0xc0, 0x24, 0xc8, 0x1c, 0xc5, 0x03, 0x30, 0x19, 0xa0, 0x25, 0xb8, 0xd4, 0x17, 0x30, - 0x27, 0x55, 0xf0, 0xa8, 0xe7, 0x5b, 0xad, 0xcb, 0x9a, 0xb3, 0x23, 0xaf, 0xf8, 0x02, 0xf2, 0xe3, - 0x02, 0x04, 0x19, 0xdd, 0xaa, 0xb1, 0x71, 0x8f, 0x2a, 0xf4, 0x37, 0x89, 0x15, 0x1a, 0x56, 0x9d, - 0x5f, 0x44, 0x25, 0x3f, 0x09, 0x95, 0xb7, 0xb4, 0x73, 0x6c, 0xcd, 0xca, 0x5f, 0x97, 0x7c, 0x3c, - 0x3f, 0x54, 0xe8, 0xe6, 0xd5, 0xa5, 0x5b, 0xe9, 0xd5, 0x53, 0x6f, 0xcf, 0xab, 0xcb, 0x6f, 0x4a, - 0xfe, 0x94, 0x7a, 0xfe, 0xfa, 0x70, 0x22, 0x20, 0xda, 0xc5, 0x5e, 0xc8, 0x67, 0x17, 0xa6, 0x59, - 0x41, 0x84, 0x5a, 0x43, 0x5d, 0x12, 0x14, 0xc3, 0x81, 0xa4, 0x06, 0x7a, 0x84, 0xfa, 0x79, 0x6b, - 0x9b, 0x9b, 0x86, 0x99, 0x98, 0x44, 0x8f, 0xc2, 0xa8, 0x03, 0xfe, 0x25, 0x17, 0x0a, 0x1b, 0xee, - 0x80, 0x1c, 0xe9, 0x3a, 0x7b, 0x0b, 0x0d, 0x78, 0x96, 0x57, 0x54, 0xc8, 0x35, 0x40, 0x9d, 0x36, - 0x06, 0x5d, 0x81, 0x21, 0xbc, 0x4b, 0x2f, 0x05, 0xb3, 0x64, 0xd3, 0x1d, 0x3d, 0x1d, 0x31, 0x36, - 0xdd, 0x4a, 0x91, 0x08, 0xf3, 0x87, 0x37, 0x66, 0x0a, 0x8c, 0xe7, 0x7e, 0xab, 0x69, 0xb8, 0xb8, - 0xd9, 0x72, 0xf7, 0x15, 0x8e, 0x22, 0x7f, 0x22, 0x45, 0xfc, 0x61, 0xc8, 0xfe, 0x74, 0x15, 0xaf, - 0x58, 0x34, 0xa9, 0x40, 0x88, 0x94, 0x4c, 0xe4, 0x77, 0x02, 0xd4, 0x35, 0x47, 0xbd, 0xae, 0x99, - 0x2e, 0xae, 0x71, 0xb9, 0xe7, 0xea, 0x9a, 0xf3, 0x0c, 0xad, 0x20, 0xf1, 0x26, 0x79, 0xdc, 0x76, - 0x70, 0x8d, 0x4e, 0x40, 0x5a, 0x19, 0xae, 0x6b, 0xce, 0xa6, 0x83, 0x6b, 0x81, 0xb1, 0x0e, 0xdf, - 0x8a, 0xb1, 0x86, 0xe5, 0x9d, 0x8d, 0xca, 0xfb, 0x93, 0x29, 0x7f, 0x75, 0xf8, 0xe1, 0xc3, 0x4f, - 0xa6, 0x2c, 0xbe, 0x48, 0xf7, 0x14, 0x61, 0x27, 0x80, 0x9e, 0x83, 0x09, 0x6f, 0x55, 0xaa, 0x6d, - 0xba, 0x5a, 0x85, 0x16, 0xf6, 0xb7, 0xb8, 0x0b, 0xbb, 0xe1, 0x6a, 0x07, 0x7d, 0x04, 0x6e, 0x8b, - 0xd8, 0x20, 0xaf, 0x81, 0x54, 0x5f, 0xa6, 0xe8, 0x48, 0xd8, 0x14, 0x09, 0x7c, 0x5f, 0x7a, 0xe9, - 0x5b, 0xb2, 0x6a, 0xee, 0x26, 0x21, 0x6c, 0xd0, 0xbd, 0x75, 0xd3, 0x09, 0xf9, 0xbb, 0x12, 0x8c, - 0x47, 0x3a, 0x88, 0x1e, 0x83, 0x41, 0xe6, 0x81, 0xa5, 0x03, 0x13, 0x21, 0x54, 0xe2, 0x7c, 0x4c, - 0x8c, 0x01, 0xcd, 0x43, 0x16, 0xf3, 0xe8, 0x9a, 0x0b, 0xe5, 0x9e, 0x98, 0x20, 0x9c, 0xf3, 0x7b, - 0x6c, 0x68, 0x11, 0x72, 0x9e, 0xe8, 0x63, 0x76, 0x6e, 0xde, 0xcc, 0x71, 0x10, 0x9f, 0x51, 0x5e, - 0x80, 0x7c, 0xa0, 0x7b, 0xec, 0x95, 0xcc, 0x3d, 0xbe, 0xdd, 0x62, 0x01, 0x74, 0xb6, 0xa9, 0xed, - 0xd1, 0x9d, 0x16, 0xba, 0x0d, 0x86, 0xc9, 0xc3, 0x3a, 0x7f, 0x67, 0x2d, 0xad, 0x0c, 0x35, 0xb5, - 0xbd, 0x4b, 0x9a, 0x23, 0xff, 0x82, 0x04, 0x63, 0xe1, 0x7e, 0xa2, 0xfb, 0x00, 0x11, 0x5a, 0xad, - 0x8e, 0x55, 0xb3, 0xdd, 0x64, 0x3e, 0x52, 0x20, 0x8e, 0x37, 0xb5, 0xbd, 0xf9, 0x3a, 0xbe, 0xd2, - 0x6e, 0xd2, 0xa6, 0x1d, 0xb4, 0x02, 0x05, 0x41, 0x2c, 0x92, 0x5d, 0x5c, 0x2a, 0xc7, 0x3a, 0x3f, - 0x1b, 0xc4, 0x09, 0xd8, 0x5e, 0xf7, 0x65, 0xb2, 0xd7, 0x1d, 0x63, 0x78, 0xe2, 0x89, 0xfc, 0x08, - 0x8c, 0x47, 0x46, 0x8c, 0x64, 0x18, 0x6d, 0xb5, 0xb7, 0xd4, 0x6b, 0x78, 0x9f, 0x7e, 0x85, 0x80, - 0xa9, 0x7a, 0x4e, 0xc9, 0xb7, 0xda, 0x5b, 0x4f, 0xe1, 0x7d, 0x9a, 0x3b, 0x94, 0x75, 0x18, 0x0b, - 0x6f, 0xa6, 0x88, 0xe3, 0xb0, 0xad, 0xb6, 0x59, 0x13, 0xdf, 0x97, 0xa0, 0x05, 0x74, 0x01, 0x06, - 0x77, 0x2d, 0xa6, 0xcd, 0x07, 0xed, 0x9e, 0xae, 0x5a, 0x2e, 0x0e, 0x6c, 0xc9, 0x18, 0x8f, 0xec, - 0xc0, 0x20, 0xd5, 0xcb, 0xae, 0x07, 0x15, 0x57, 0x01, 0x34, 0xd7, 0xb5, 0x8d, 0xad, 0xb6, 0x0f, - 0x5f, 0x9c, 0xeb, 0x4c, 0xeb, 0xcf, 0xad, 0x69, 0x86, 0x5d, 0xb9, 0x83, 0x6b, 0xf6, 0x94, 0xcf, - 0x13, 0xd0, 0xee, 0x00, 0x92, 0xfc, 0x46, 0x06, 0x86, 0xd8, 0x76, 0x13, 0x3d, 0x1e, 0x4e, 0x7e, - 0xe4, 0xcf, 0x4e, 0xf7, 0xea, 0x3e, 0xa3, 0xe2, 0xbd, 0xf7, 0x22, 0xa8, 0x7b, 0xa3, 0x19, 0x85, - 0x4a, 0xfe, 0xb5, 0x1b, 0x33, 0xc3, 0x34, 0xfa, 0x58, 0x5a, 0xf4, 0xd3, 0x0b, 0xbd, 0x76, 0xd7, - 0x22, 0x97, 0x91, 0xe9, 0x3b, 0x97, 0x71, 0x19, 0x46, 0x03, 0xe1, 0x96, 0x51, 0xe3, 0xfb, 0x94, - 0xe9, 0x83, 0x16, 0xdd, 0xd2, 0x22, 0xef, 0x7f, 0xde, 0x0b, 0xc7, 0x96, 0x6a, 0x68, 0x36, 0xbc, - 0xc9, 0xa6, 0x51, 0x1b, 0x0b, 0x17, 0x02, 0xfb, 0x66, 0xfa, 0x69, 0x84, 0xdb, 0x21, 0x47, 0xdf, - 0x2f, 0xa7, 0x24, 0x2c, 0x7a, 0xc8, 0x92, 0x0a, 0xfa, 0xf0, 0x24, 0x8c, 0xfb, 0x81, 0x0d, 0x23, - 0xc9, 0x32, 0x14, 0xbf, 0x9a, 0x12, 0x7e, 0x00, 0xa6, 0x4c, 0xbc, 0xe7, 0xaa, 0x51, 0xea, 0x1c, - 0xa5, 0x46, 0xe4, 0xd9, 0xd5, 0x30, 0xc7, 0x3d, 0x30, 0xe6, 0x9b, 0x50, 0x4a, 0x0b, 0x2c, 0xf5, - 0xe1, 0xd5, 0x52, 0xb2, 0x63, 0x90, 0xf5, 0xc2, 0xce, 0x3c, 0x25, 0x18, 0xd6, 0x58, 0xb4, 0xe9, - 0x05, 0xb2, 0x36, 0x76, 0xda, 0x0d, 0x97, 0x83, 0x8c, 0x50, 0x1a, 0x1a, 0xc8, 0x2a, 0xac, 0x9e, - 0xd2, 0xde, 0x05, 0xa3, 0xc2, 0xaa, 0x30, 0xba, 0x51, 0x4a, 0x37, 0x22, 0x2a, 0x29, 0xd1, 0x29, - 0x28, 0xb4, 0x6c, 0xab, 0x65, 0x39, 0xd8, 0x56, 0xb5, 0x5a, 0xcd, 0xc6, 0x8e, 0x53, 0x1c, 0x63, - 0x78, 0xa2, 0x7e, 0x9e, 0x55, 0xcb, 0x0f, 0xc2, 0xb0, 0x88, 0xa7, 0xa7, 0x60, 0xb0, 0xe2, 0x59, - 0xc8, 0x8c, 0xc2, 0x0a, 0xc4, 0xbf, 0xce, 0xb7, 0x5a, 0x3c, 0xbb, 0x46, 0x7e, 0xca, 0x0d, 0x18, - 0xe6, 0x13, 0xd6, 0x35, 0xa7, 0xb2, 0x02, 0x23, 0x2d, 0xcd, 0x26, 0xc3, 0x08, 0x66, 0x56, 0x7a, - 0xed, 0x08, 0xd7, 0x34, 0xdb, 0x5d, 0xc7, 0x6e, 0x28, 0xc1, 0x92, 0xa7, 0xfc, 0xac, 0x4a, 0x3e, - 0x0f, 0xa3, 0x21, 0x1a, 0xd2, 0x4d, 0xd7, 0x72, 0xb5, 0x86, 0x58, 0xe8, 0xb4, 0xe0, 0xf5, 0x24, - 0xe5, 0xf7, 0x44, 0xbe, 0x00, 0x39, 0x6f, 0xae, 0xc8, 0x46, 0x43, 0x88, 0x42, 0xe2, 0xe2, 0x67, - 0x45, 0x9a, 0x44, 0xb2, 0xae, 0xf3, 0x2f, 0x65, 0xa5, 0x15, 0x56, 0x90, 0x71, 0xc0, 0x30, 0x31, - 0x6f, 0x86, 0x3e, 0x08, 0xc3, 0xdc, 0x30, 0xf1, 0xf5, 0xd8, 0x2b, 0x5d, 0xb4, 0x46, 0x2d, 0x95, - 0x48, 0x17, 0x31, 0xbb, 0xe5, 0x37, 0x93, 0x0a, 0x36, 0xf3, 0x51, 0xc8, 0x0a, 0xe3, 0x13, 0xf6, - 0x12, 0xac, 0x85, 0xe3, 0x71, 0x5e, 0x82, 0x37, 0xe2, 0x33, 0x12, 0x6d, 0x72, 0x8c, 0xba, 0x89, - 0x6b, 0xaa, 0xbf, 0x04, 0xf9, 0x7b, 0xcb, 0xe3, 0xec, 0xc1, 0xb2, 0x58, 0x5f, 0xf2, 0x07, 0x60, - 0x88, 0xf5, 0xb5, 0xab, 0x89, 0xeb, 0xe6, 0x5a, 0xbf, 0x2f, 0x41, 0x56, 0xb8, 0x8f, 0xae, 0x4c, - 0xa1, 0x41, 0xa4, 0x0e, 0x3b, 0x88, 0x5b, 0x6f, 0x92, 0xee, 0x07, 0x44, 0x35, 0x45, 0xdd, 0xb5, - 0x5c, 0xc3, 0xac, 0xab, 0x6c, 0x2e, 0xf8, 0xeb, 0x9b, 0xf4, 0xc9, 0x55, 0xfa, 0x60, 0x8d, 0xd4, - 0x9f, 0xbe, 0x0b, 0xf2, 0x81, 0x2c, 0x17, 0x1a, 0x86, 0xf4, 0x15, 0x7c, 0xbd, 0x30, 0x80, 0xf2, - 0x30, 0xac, 0x60, 0x9a, 0x23, 0x28, 0x48, 0x67, 0xdf, 0x18, 0x86, 0xf1, 0xf9, 0xca, 0xc2, 0xd2, - 0x7c, 0xab, 0xd5, 0x30, 0xf8, 0x6b, 0x8d, 0xab, 0x90, 0xa1, 0xfb, 0xe4, 0x04, 0xe7, 0x3b, 0xa5, - 0x24, 0x09, 0x27, 0xa4, 0xc0, 0x20, 0xdd, 0x4e, 0xa3, 0x24, 0xc7, 0x3e, 0xa5, 0x44, 0x79, 0x28, - 0xd2, 0x49, 0xaa, 0x70, 0x09, 0x4e, 0x83, 0x4a, 0x49, 0x92, 0x53, 0xe8, 0x23, 0x90, 0xf3, 0xf7, - 0xc9, 0x49, 0xcf, 0x88, 0x4a, 0x89, 0xd3, 0x56, 0x04, 0xdf, 0xdf, 0x19, 0x24, 0x3d, 0x9a, 0x28, - 0x25, 0xce, 0xd7, 0xa0, 0x67, 0x61, 0x58, 0xec, 0xc1, 0x92, 0x9d, 0xe2, 0x94, 0x12, 0xa6, 0x94, - 0xc8, 0xf4, 0xb1, 0xad, 0x73, 0x92, 0xa3, 0xaa, 0x52, 0xa2, 0xbc, 0x19, 0xda, 0x84, 0x21, 0x1e, - 0xfc, 0x26, 0x3a, 0xe9, 0x29, 0x25, 0x4b, 0x14, 0x11, 0x21, 0xfb, 0xc9, 0x89, 0xa4, 0xc7, 0x73, - 0xa5, 0xc4, 0x09, 0x43, 0xa4, 0x01, 0x04, 0xf6, 0xd3, 0x89, 0xcf, 0xdd, 0x4a, 0xc9, 0x13, 0x81, - 0xe8, 0xc3, 0x90, 0xf5, 0x76, 0x4d, 0x09, 0x4f, 0xd2, 0x4a, 0x49, 0x73, 0x71, 0x95, 0xcd, 0xc4, - 0xb7, 0x24, 0xee, 0x8b, 0xbd, 0x25, 0xe1, 0x1f, 0x72, 0x7b, 0xc7, 0xe0, 0xbf, 0xf4, 0x20, 0xdc, - 0xcd, 0xaf, 0xe5, 0x38, 0xae, 0x76, 0xcd, 0x30, 0xeb, 0xde, 0xe5, 0x27, 0x5e, 0xe6, 0x27, 0xe1, - 0x47, 0xf9, 0xfd, 0x27, 0x51, 0x7b, 0xe0, 0x15, 0xa8, 0x52, 0xfc, 0xd1, 0xfa, 0xdb, 0x3e, 0xe6, - 0x2e, 0xc5, 0xdc, 0xd8, 0x92, 0x3f, 0x27, 0xc1, 0xd8, 0x65, 0xc3, 0x71, 0x2d, 0xdb, 0xd0, 0xb5, - 0x06, 0xb5, 0x18, 0xfe, 0xc9, 0x8b, 0xd4, 0xff, 0xc9, 0xcb, 0x13, 0x30, 0xb4, 0xab, 0x35, 0x1c, - 0xec, 0xf2, 0xb8, 0xfb, 0xc4, 0x5c, 0x77, 0x91, 0x74, 0x78, 0x18, 0xce, 0xc6, 0x2f, 0x62, 0xfd, - 0x66, 0x8a, 0x6c, 0x13, 0x9b, 0x4d, 0xc3, 0x61, 0x1f, 0xf4, 0x24, 0xfb, 0xa6, 0x0a, 0x64, 0x6c, - 0xcd, 0xe5, 0x2e, 0xad, 0x32, 0xc7, 0xaf, 0x59, 0xdd, 0x1b, 0x7f, 0x75, 0x6a, 0x6e, 0x11, 0xeb, - 0x0a, 0xe5, 0x45, 0x3f, 0x03, 0x64, 0x1f, 0xa6, 0x52, 0x1c, 0x16, 0x77, 0xcf, 0xf7, 0x87, 0x73, - 0xf3, 0xc6, 0xcc, 0xf8, 0xbe, 0xd6, 0x6c, 0x94, 0x65, 0x81, 0x23, 0x2b, 0x64, 0x3b, 0x47, 0xba, - 0x88, 0x5a, 0x40, 0xf6, 0x64, 0xaa, 0xbe, 0xa3, 0x99, 0x75, 0xcc, 0x1a, 0xa1, 0xc9, 0x8f, 0xca, - 0xe5, 0xbe, 0x1b, 0x39, 0xea, 0x37, 0x12, 0x80, 0x93, 0x95, 0xd1, 0xa6, 0xb6, 0xb7, 0x40, 0x2b, - 0x48, 0x8b, 0xe5, 0xec, 0xcb, 0xaf, 0xcc, 0x0c, 0x50, 0x89, 0xbd, 0x2a, 0x01, 0xf8, 0x12, 0x43, - 0x3f, 0x03, 0x05, 0xdd, 0x2b, 0x51, 0x5e, 0x91, 0xc1, 0x3c, 0xd9, 0x6b, 0x46, 0x22, 0xf2, 0x66, - 0x6e, 0xfa, 0x3b, 0x37, 0x66, 0x24, 0x65, 0x5c, 0x8f, 0x4c, 0xc5, 0x87, 0x21, 0xcf, 0x72, 0x11, - 0x2a, 0x75, 0xf9, 0xa9, 0x58, 0x97, 0x3f, 0x4d, 0xb0, 0x6e, 0xde, 0x98, 0x41, 0x6c, 0x58, 0x01, - 0x66, 0x99, 0x06, 0x02, 0xc0, 0x6a, 0x08, 0x43, 0x60, 0x4c, 0xff, 0x4e, 0x82, 0xfc, 0x62, 0xe0, - 0xbd, 0x85, 0x22, 0x0c, 0x37, 0x2d, 0xd3, 0xb8, 0x86, 0x6d, 0x2f, 0xc3, 0xcd, 0x8a, 0xa8, 0x04, - 0x59, 0xf6, 0x09, 0x09, 0x77, 0x5f, 0x7c, 0x9b, 0x54, 0x94, 0x09, 0xd7, 0x75, 0xbc, 0xe5, 0x18, - 0x62, 0x36, 0x14, 0x51, 0x44, 0x17, 0xa1, 0xe0, 0x60, 0xbd, 0x6d, 0x1b, 0xee, 0xbe, 0xaa, 0x5b, - 0xa6, 0xab, 0xe9, 0x2c, 0x4b, 0x9d, 0xab, 0xdc, 0x7e, 0xf3, 0xc6, 0xcc, 0x6d, 0xac, 0xaf, 0x51, - 0x0a, 0x59, 0x19, 0x17, 0x55, 0x0b, 0xac, 0x86, 0xb4, 0x50, 0xc3, 0xae, 0x66, 0x34, 0xd8, 0xd9, - 0x6a, 0x4e, 0x11, 0xc5, 0xc0, 0x58, 0xfe, 0xc5, 0x70, 0x30, 0xe4, 0xbd, 0x0e, 0x05, 0xab, 0x85, - 0x6d, 0x9a, 0x36, 0x0a, 0xc5, 0xbe, 0x95, 0x65, 0xbf, 0xe5, 0x28, 0x85, 0xfc, 0xff, 0x6e, 0xcc, - 0x3c, 0x90, 0x40, 0x83, 0xae, 0x6a, 0x0d, 0xbe, 0x87, 0x50, 0xc6, 0x05, 0x06, 0xaf, 0x20, 0x43, - 0x0e, 0x64, 0x95, 0xda, 0x5b, 0xe2, 0x46, 0x5f, 0x68, 0xc8, 0x51, 0x0a, 0x39, 0x98, 0xce, 0xa6, - 0x35, 0x24, 0x0a, 0x7c, 0x5e, 0x33, 0x1a, 0xe2, 0xbb, 0x3a, 0x0a, 0x2f, 0xa1, 0x25, 0x18, 0x72, - 0x5c, 0xcd, 0x6d, 0xb3, 0xaf, 0x3a, 0x0c, 0x56, 0x1e, 0x4c, 0xd8, 0xe7, 0x8a, 0x65, 0xd6, 0xd6, - 0x29, 0xa3, 0xc2, 0x01, 0xd0, 0x45, 0x18, 0x72, 0xad, 0x6b, 0xd8, 0xe4, 0x42, 0xed, 0x6b, 0xc5, - 0xd3, 0x6b, 0xa2, 0x8c, 0x1b, 0xb9, 0x50, 0xa8, 0xe1, 0x06, 0xae, 0x53, 0x51, 0x3a, 0x3b, 0x9a, - 0x8d, 0x1d, 0xf6, 0x6d, 0xdb, 0xca, 0x52, 0xdf, 0xcb, 0x92, 0x0b, 0x28, 0x8a, 0x27, 0x2b, 0xe3, - 0x5e, 0xd5, 0x3a, 0xad, 0x41, 0x4f, 0x85, 0x5e, 0xb9, 0xf1, 0x2e, 0xc5, 0xf4, 0x58, 0x7b, 0x01, - 0x2d, 0x17, 0x3b, 0xad, 0xe0, 0x0b, 0x3b, 0x17, 0xa1, 0xd0, 0x36, 0xb7, 0x2c, 0x93, 0x7e, 0x0b, - 0x83, 0x47, 0xdf, 0x64, 0x93, 0x9c, 0x0e, 0xce, 0x5a, 0x94, 0x42, 0x56, 0xc6, 0xbd, 0x2a, 0x7e, - 0xd6, 0x52, 0x83, 0x31, 0x9f, 0x8a, 0x2e, 0xdd, 0x5c, 0xec, 0xd2, 0x3d, 0xc1, 0x97, 0xee, 0x91, - 0x68, 0x2b, 0xfe, 0xea, 0x1d, 0xf5, 0x2a, 0x37, 0x58, 0x8a, 0x01, 0x7c, 0x83, 0xc1, 0x0f, 0xe8, - 0xe4, 0x78, 0xab, 0x23, 0x8e, 0x39, 0x7c, 0x5e, 0xf4, 0x51, 0x98, 0x6c, 0x1a, 0xa6, 0xea, 0xe0, - 0xc6, 0xb6, 0xca, 0x05, 0x4c, 0x20, 0xe9, 0xb7, 0x0c, 0x2b, 0xcb, 0xfd, 0xe9, 0xc3, 0xcd, 0x1b, - 0x33, 0x25, 0x6e, 0x54, 0x3b, 0x21, 0x65, 0x65, 0xa2, 0x69, 0x98, 0xeb, 0xb8, 0xb1, 0xbd, 0xe8, - 0xd5, 0x95, 0x47, 0xfe, 0xda, 0x2b, 0x33, 0x03, 0xde, 0x02, 0x36, 0x60, 0xc4, 0x5f, 0x58, 0xd8, - 0x41, 0xab, 0x90, 0xd3, 0x44, 0x81, 0xe6, 0xc1, 0x46, 0x12, 0x2b, 0x7b, 0x60, 0x81, 0xfa, 0x18, - 0xcc, 0x56, 0xbc, 0xf4, 0xdf, 0x8e, 0x4b, 0xf2, 0xa7, 0x52, 0x30, 0xb4, 0x78, 0x95, 0xde, 0x13, - 0x7d, 0x11, 0x26, 0x7c, 0x65, 0x0b, 0x5b, 0x8a, 0x95, 0x9b, 0x37, 0x66, 0x8a, 0x51, 0x7d, 0xec, - 0xd3, 0x54, 0xcc, 0xeb, 0xba, 0xe8, 0x89, 0xbf, 0x48, 0x84, 0xad, 0x78, 0x31, 0x98, 0xdc, 0x16, - 0x6d, 0xa7, 0xa2, 0x6d, 0x77, 0x90, 0x1c, 0xc2, 0x4c, 0xf9, 0xd9, 0x6f, 0x5e, 0x13, 0x30, 0x9c, - 0x55, 0x18, 0x66, 0xb2, 0x70, 0x50, 0x19, 0x06, 0x5b, 0xe4, 0x07, 0xcf, 0xb0, 0x4f, 0xf7, 0x5c, - 0x4d, 0x94, 0x5e, 0x64, 0x0c, 0x29, 0x8b, 0xfc, 0xe5, 0x34, 0xc0, 0xe2, 0xd5, 0xab, 0x1b, 0xb6, - 0xd1, 0x6a, 0x60, 0xf7, 0x47, 0x2a, 0xd7, 0x9f, 0x93, 0xe0, 0x88, 0x2f, 0x35, 0xc7, 0xd6, 0x23, - 0xc2, 0x7d, 0xfa, 0xe6, 0x8d, 0x99, 0x3b, 0xa2, 0xc2, 0x0d, 0x90, 0x1d, 0x42, 0xc0, 0x93, 0x1e, - 0xd0, 0xba, 0xad, 0x77, 0xef, 0x47, 0xcd, 0x71, 0xbd, 0x7e, 0xa4, 0x7b, 0xf7, 0x23, 0x40, 0xf6, - 0xb6, 0xfa, 0xb1, 0xe8, 0xb8, 0x9d, 0x73, 0xbd, 0x0e, 0x79, 0x7f, 0x8e, 0x1c, 0xb4, 0x08, 0x59, - 0x97, 0xff, 0xe6, 0x53, 0x2e, 0xf7, 0x9e, 0x72, 0xc1, 0xc6, 0xa7, 0xdd, 0xe3, 0x94, 0xff, 0x73, - 0x0a, 0xc0, 0x5f, 0xd5, 0x3f, 0xa9, 0x2b, 0x8a, 0xb8, 0x53, 0xee, 0xfc, 0xd2, 0x87, 0x0a, 0xa0, - 0x39, 0x77, 0x60, 0xb6, 0xfe, 0x24, 0x05, 0x93, 0x9b, 0xc2, 0xf2, 0xbf, 0x2f, 0x61, 0xb4, 0x06, - 0xc3, 0xd8, 0x74, 0x6d, 0x03, 0x8b, 0x23, 0xb5, 0x0f, 0xf4, 0xd2, 0xd6, 0x2e, 0x52, 0xa3, 0x9f, - 0xeb, 0x14, 0xc7, 0x04, 0x1c, 0x26, 0x20, 0xeb, 0xcf, 0xa4, 0xa1, 0xd8, 0x8b, 0x0b, 0x2d, 0xc0, - 0xb8, 0x6e, 0x63, 0x5a, 0xa1, 0x06, 0x6f, 0x6d, 0x55, 0x4a, 0xfe, 0x4e, 0x22, 0x42, 0x20, 0x2b, - 0x63, 0xa2, 0x86, 0xc7, 0x06, 0x75, 0x20, 0x61, 0x3e, 0x59, 0x32, 0x84, 0x2a, 0x61, 0x5c, 0x2f, - 0xf3, 0xe0, 0x40, 0x34, 0x12, 0x06, 0x60, 0xd1, 0xc1, 0x98, 0x5f, 0x4b, 0xc3, 0x83, 0x17, 0x60, - 0xdc, 0x30, 0x0d, 0xd7, 0xd0, 0x1a, 0xea, 0x96, 0xd6, 0xd0, 0x4c, 0xfd, 0x30, 0xbb, 0x24, 0xe6, - 0xd0, 0x79, 0xb3, 0x11, 0x38, 0x59, 0x19, 0xe3, 0x35, 0x15, 0x56, 0x81, 0x2e, 0xc3, 0xb0, 0x68, - 0x2a, 0x73, 0xa8, 0x58, 0x52, 0xb0, 0x07, 0x66, 0xe4, 0xd3, 0x69, 0x98, 0x50, 0x70, 0xed, 0xfd, - 0xa9, 0xe8, 0x6f, 0x2a, 0x56, 0x00, 0x98, 0x21, 0x21, 0x9e, 0xe4, 0x10, 0xb3, 0x41, 0x4c, 0x51, - 0x8e, 0x21, 0x2c, 0x3a, 0x6e, 0x60, 0x3e, 0xfe, 0x34, 0x0d, 0x23, 0xc1, 0xf9, 0x78, 0xdf, 0xc5, - 0xff, 0xf8, 0xb8, 0x78, 0xb4, 0xe4, 0x9b, 0xc6, 0x0c, 0xff, 0xb7, 0x0b, 0x3d, 0x4c, 0x63, 0xc7, - 0x92, 0xea, 0x6d, 0x13, 0xff, 0x3c, 0x05, 0x43, 0xfc, 0x60, 0x5a, 0xef, 0xd8, 0xd8, 0x48, 0x71, - 0x07, 0xdf, 0x07, 0xef, 0x6b, 0x5e, 0xee, 0xb2, 0xaf, 0xf9, 0x69, 0x18, 0x6b, 0x6a, 0x7b, 0x6a, - 0xe8, 0x1a, 0x97, 0x34, 0x3b, 0x5a, 0x39, 0xe6, 0xa3, 0x84, 0x9f, 0xb3, 0x74, 0x8d, 0x7f, 0x28, - 0x89, 0x1e, 0x85, 0x3c, 0xa1, 0xf0, 0xbd, 0x04, 0x61, 0x3f, 0xea, 0xe7, 0x45, 0x02, 0x0f, 0x65, - 0x05, 0x9a, 0xda, 0x5e, 0x95, 0x15, 0xd0, 0x32, 0xa0, 0x1d, 0x2f, 0x4b, 0xa7, 0xfa, 0xa2, 0x24, - 0xfc, 0x77, 0xde, 0xbc, 0x31, 0x73, 0x8c, 0xf1, 0x77, 0xd2, 0xc8, 0xca, 0x84, 0x5f, 0x29, 0xd0, - 0x1e, 0x06, 0x20, 0xe3, 0x52, 0xd9, 0xcb, 0x92, 0x6c, 0x77, 0x7d, 0xe4, 0xe6, 0x8d, 0x99, 0x09, - 0x86, 0xe2, 0x3f, 0x93, 0x95, 0x1c, 0x29, 0x2c, 0x92, 0xdf, 0x01, 0xc1, 0xff, 0x9a, 0x04, 0xc8, - 0xf7, 0x41, 0x81, 0xdb, 0xbf, 0x10, 0xd8, 0xa4, 0x49, 0x07, 0xef, 0xfb, 0x7c, 0x7e, 0xb1, 0xef, - 0x0b, 0x2c, 0xdd, 0xf3, 0xbe, 0xbd, 0x16, 0x17, 0x18, 0xba, 0xbc, 0x59, 0x3a, 0xb7, 0x60, 0x19, - 0xde, 0xc9, 0x7a, 0xa7, 0x81, 0xfe, 0xf7, 0x12, 0x1c, 0xeb, 0xd0, 0x26, 0xaf, 0xb3, 0x1f, 0x01, - 0x64, 0x07, 0x1e, 0xf2, 0xcf, 0x67, 0x4b, 0xfc, 0x7e, 0x6b, 0x9f, 0xca, 0x39, 0x61, 0x77, 0x38, - 0x82, 0x5b, 0xe7, 0x72, 0x58, 0x46, 0xf4, 0x5f, 0x4a, 0x30, 0x15, 0x6c, 0xde, 0x1b, 0xc8, 0x15, - 0x18, 0x09, 0xb6, 0xce, 0x87, 0x70, 0x77, 0x92, 0x21, 0xf0, 0xde, 0x87, 0xf8, 0xd1, 0xd3, 0xfe, - 0x52, 0x65, 0x29, 0xdc, 0x07, 0x13, 0x4b, 0xc3, 0x4b, 0xfb, 0x47, 0x96, 0x2c, 0x1b, 0xc1, 0x5f, - 0x4a, 0x90, 0x59, 0xb3, 0xac, 0x06, 0xb2, 0x60, 0xc2, 0xb4, 0x5c, 0x95, 0x68, 0x16, 0xae, 0xa9, - 0x3c, 0xc7, 0xc3, 0xb2, 0xba, 0x0b, 0xfd, 0x09, 0xe9, 0x87, 0x37, 0x66, 0x3a, 0xa1, 0x94, 0x71, - 0xd3, 0x72, 0x2b, 0xb4, 0x66, 0x83, 0x65, 0x80, 0x3e, 0x0a, 0xa3, 0xe1, 0xc6, 0x58, 0xc6, 0xeb, - 0x99, 0xbe, 0x1b, 0x0b, 0xc3, 0xdc, 0xbc, 0x31, 0x33, 0xe5, 0xaf, 0x18, 0xaf, 0x5a, 0x56, 0x46, - 0xb6, 0x02, 0xad, 0x97, 0xb3, 0x64, 0xf4, 0x7f, 0xf6, 0xca, 0x8c, 0x54, 0xb9, 0xd8, 0xf3, 0x7d, - 0xd6, 0xfb, 0x0f, 0xec, 0xc2, 0x9e, 0x77, 0xec, 0x10, 0x3e, 0x97, 0x78, 0x79, 0x12, 0x66, 0x7a, - 0x9c, 0x4b, 0xb8, 0x7b, 0x87, 0x3a, 0x92, 0x88, 0x39, 0x2e, 0x28, 0x25, 0x3a, 0x06, 0x91, 0xdf, - 0xca, 0x00, 0x5a, 0x71, 0xea, 0x0b, 0x24, 0xaa, 0xf1, 0xdf, 0x72, 0x88, 0xa6, 0xc4, 0xa4, 0xb7, - 0x95, 0x12, 0x5b, 0x09, 0x25, 0x99, 0x52, 0xfd, 0xa5, 0xb6, 0x13, 0x67, 0x9a, 0xd2, 0xef, 0x4a, - 0xa6, 0xa9, 0x7b, 0xa8, 0x92, 0xf9, 0x11, 0xee, 0x98, 0x06, 0xdf, 0x9d, 0x1d, 0xd3, 0x51, 0x18, - 0xe2, 0x39, 0x68, 0xf6, 0xcf, 0xc6, 0x78, 0x09, 0x3d, 0x12, 0xbc, 0x6a, 0x9c, 0xc0, 0xfa, 0x33, - 0x6a, 0x6e, 0x67, 0xbe, 0x99, 0x86, 0xc2, 0x8a, 0x53, 0xaf, 0xd6, 0x0c, 0xf7, 0x1d, 0xd2, 0xbd, - 0x56, 0xef, 0x4d, 0xe6, 0xc2, 0xcd, 0x1b, 0x33, 0x63, 0x4c, 0x64, 0xb7, 0x52, 0x50, 0x4d, 0x18, - 0x8f, 0x1c, 0xe7, 0x70, 0xd5, 0x5c, 0x3c, 0xcc, 0xa9, 0x52, 0x04, 0x4a, 0xa6, 0xfb, 0x82, 0xc0, - 0x02, 0x41, 0x7b, 0xdd, 0x57, 0x03, 0x73, 0x64, 0x97, 0xdf, 0xc9, 0x9c, 0x2b, 0x9b, 0xc2, 0x6f, - 0xa5, 0x20, 0xbf, 0xe2, 0x88, 0x7d, 0x2e, 0xfe, 0x89, 0xcd, 0x28, 0x3c, 0xea, 0x7d, 0xba, 0x22, - 0x9d, 0x6c, 0x21, 0x84, 0x3f, 0x67, 0xf1, 0xbd, 0x34, 0xb5, 0xc3, 0xf4, 0x14, 0xde, 0x73, 0xd6, - 0xf8, 0xfd, 0x8d, 0xd1, 0x8f, 0xd1, 0xc6, 0xc8, 0x9f, 0xe1, 0xcc, 0x61, 0x66, 0xf8, 0xf7, 0x53, - 0x30, 0xba, 0xe2, 0xd4, 0x37, 0xcd, 0xda, 0xfb, 0x4b, 0xe5, 0xed, 0x2c, 0x95, 0x5b, 0x1e, 0x9a, - 0x7d, 0x2b, 0x05, 0xa7, 0x83, 0xb1, 0x14, 0x7d, 0x9b, 0xce, 0x0b, 0x97, 0x5a, 0x5a, 0xdd, 0x30, - 0x83, 0x1f, 0x95, 0x38, 0x16, 0xec, 0x2c, 0xa5, 0x15, 0x5d, 0x96, 0x4d, 0xc8, 0xaf, 0x69, 0x75, - 0x2c, 0xbe, 0x55, 0xd0, 0xf9, 0xe1, 0x90, 0xa3, 0x30, 0x64, 0x6d, 0x6f, 0xb3, 0x2b, 0x17, 0xd2, - 0x6c, 0x46, 0xe1, 0x25, 0x34, 0x05, 0x83, 0x0d, 0xa3, 0x69, 0xb8, 0xfc, 0xfd, 0x2c, 0x56, 0x40, - 0x33, 0x90, 0xd7, 0xc9, 0xb8, 0x55, 0x76, 0x53, 0x33, 0x23, 0xbe, 0x1e, 0xda, 0x36, 0xdd, 0x0d, - 0x52, 0x23, 0x3f, 0x01, 0x23, 0xac, 0x3d, 0xbe, 0xbf, 0x38, 0x06, 0x59, 0x7a, 0xed, 0xd6, 0x6f, - 0x75, 0x98, 0x94, 0xf9, 0xbd, 0x49, 0x86, 0xc2, 0x1a, 0x66, 0x85, 0x4a, 0xa5, 0xa7, 0x28, 0x67, - 0xe3, 0x27, 0x99, 0x09, 0xca, 0x13, 0xe3, 0xbf, 0x7a, 0x08, 0xe4, 0x1e, 0x21, 0x27, 0x93, 0xd2, - 0xc1, 0x41, 0x6e, 0x1f, 0x53, 0xd0, 0x23, 0x20, 0x4e, 0x16, 0xf0, 0xee, 0xc1, 0x51, 0x7a, 0xff, - 0xcb, 0xdf, 0xea, 0x8b, 0xe9, 0x3a, 0xea, 0x9d, 0x87, 0x4b, 0xfc, 0x7f, 0x3d, 0x8b, 0xc3, 0x6d, - 0xf0, 0x7b, 0xe0, 0xbd, 0xd0, 0xd1, 0x53, 0x0b, 0xe6, 0x02, 0x2a, 0xa0, 0x04, 0x38, 0xe5, 0x5f, - 0x97, 0xe0, 0xb6, 0x8e, 0xa6, 0xf9, 0xcc, 0x5d, 0x0a, 0xbd, 0x72, 0x26, 0xf5, 0x77, 0x1f, 0x27, - 0xf8, 0x0e, 0xf9, 0xa5, 0x2e, 0x9d, 0x3d, 0x19, 0xdb, 0x59, 0xd6, 0x8b, 0x50, 0x6f, 0x5f, 0x80, - 0x23, 0xe1, 0xce, 0x0a, 0x31, 0x3d, 0x0b, 0x63, 0x61, 0xb3, 0xc0, 0x4d, 0xd6, 0x21, 0x4e, 0x54, - 0x47, 0x43, 0xa6, 0x41, 0x56, 0xa3, 0x53, 0xe3, 0x89, 0xa7, 0xda, 0x79, 0xa7, 0x37, 0xb1, 0x74, - 0x02, 0xaf, 0x7e, 0x7c, 0x4b, 0x82, 0xe3, 0xe1, 0x16, 0xfc, 0x70, 0xc6, 0x79, 0xc7, 0xc7, 0x77, - 0xcb, 0x14, 0xe9, 0x07, 0x12, 0x9c, 0x38, 0x60, 0x18, 0x5c, 0x66, 0x2f, 0xc2, 0x54, 0x20, 0x67, - 0x62, 0xf3, 0x6a, 0xa1, 0x5c, 0xa7, 0xe3, 0x93, 0x3d, 0x5e, 0x8a, 0xe0, 0x76, 0x22, 0xc7, 0xaf, - 0x7d, 0x6f, 0x66, 0xb2, 0xf3, 0x99, 0xa3, 0x4c, 0x76, 0xe6, 0x39, 0x6e, 0xa1, 0x16, 0xfe, 0x07, - 0x09, 0x4e, 0x85, 0x87, 0xda, 0xe5, 0x64, 0xe5, 0x3d, 0x34, 0x75, 0xff, 0x45, 0x82, 0xd3, 0x49, - 0xc6, 0xc3, 0xe7, 0x70, 0x0b, 0x26, 0xfd, 0x64, 0x67, 0x74, 0x0a, 0xef, 0xeb, 0xe3, 0xc8, 0x8a, - 0xaf, 0x05, 0xe4, 0xa1, 0xbd, 0x03, 0x73, 0xf5, 0x07, 0x12, 0x5f, 0xbf, 0x41, 0x35, 0xf1, 0x26, - 0x26, 0x1c, 0xc6, 0xf4, 0x39, 0x31, 0x81, 0x50, 0x66, 0x34, 0x14, 0xca, 0x74, 0x99, 0xf2, 0xd4, - 0x2d, 0xb2, 0x46, 0xbb, 0xdc, 0x5a, 0x77, 0xc9, 0x9e, 0x7e, 0x18, 0x26, 0xbb, 0x2c, 0x2d, 0x6e, - 0x98, 0xfa, 0x58, 0x59, 0x0a, 0xea, 0x5c, 0x3c, 0xf2, 0x7f, 0x92, 0x60, 0x86, 0x36, 0xdc, 0x65, - 0x1a, 0xdf, 0xcb, 0xf2, 0x6c, 0x72, 0xdb, 0xdb, 0x75, 0x58, 0x5c, 0xb0, 0x4b, 0x30, 0xc4, 0x34, - 0x94, 0xcb, 0xf2, 0x10, 0x2a, 0xce, 0x01, 0x7c, 0x5b, 0xbf, 0x28, 0xc6, 0xd7, 0xdd, 0x60, 0xbc, - 0x43, 0x72, 0xbc, 0x55, 0x06, 0xe3, 0x55, 0x61, 0xeb, 0xbb, 0x0f, 0x83, 0xcb, 0x4d, 0xbf, 0x65, - 0xb6, 0x9e, 0x7f, 0xf8, 0xe4, 0xdd, 0x31, 0xea, 0xde, 0x98, 0x62, 0x8c, 0xfa, 0x8f, 0xf9, 0x1c, - 0x79, 0x46, 0x3d, 0x66, 0x3c, 0xef, 0x45, 0xa3, 0xfe, 0x97, 0x29, 0x38, 0x46, 0xc7, 0x16, 0x3c, - 0x41, 0x78, 0x17, 0xe6, 0x46, 0x05, 0xe4, 0xd8, 0xba, 0x7a, 0xab, 0x6c, 0x51, 0xc1, 0xb1, 0xf5, - 0xab, 0x21, 0x8f, 0xae, 0x02, 0xaa, 0x39, 0x6e, 0xb4, 0x81, 0xf4, 0xa1, 0x1b, 0xa8, 0x39, 0xee, - 0xd5, 0x03, 0x42, 0x86, 0xcc, 0xa1, 0xb5, 0xeb, 0x3b, 0x12, 0x94, 0xba, 0xcd, 0x00, 0xd7, 0x26, - 0x03, 0x8e, 0x86, 0x0e, 0xc7, 0xa2, 0x0a, 0x75, 0x7f, 0x92, 0x23, 0xa1, 0xc8, 0xf2, 0x3f, 0x62, - 0xe3, 0x77, 0xd4, 0x00, 0xfc, 0x6b, 0xe1, 0xe2, 0xbc, 0x05, 0xd3, 0xb9, 0x1b, 0xfb, 0xf1, 0x5f, - 0xf6, 0x5f, 0xef, 0xf0, 0x30, 0xef, 0x89, 0x8d, 0xdd, 0x77, 0x25, 0x98, 0xee, 0xd1, 0xed, 0xf7, - 0x72, 0x78, 0xb1, 0xd3, 0x53, 0xa5, 0x6e, 0xf5, 0x2e, 0xf2, 0x61, 0xbe, 0x1e, 0xc3, 0xef, 0xe2, - 0x04, 0xb2, 0x08, 0x5d, 0xbf, 0xc6, 0xf5, 0x1c, 0xdc, 0xde, 0x95, 0x8b, 0xf7, 0xad, 0x0c, 0x99, - 0x1d, 0xc3, 0x71, 0xbd, 0x4f, 0xd7, 0xf4, 0xe8, 0x56, 0x84, 0x9b, 0xf2, 0xc8, 0x08, 0x0a, 0x14, - 0x7a, 0xcd, 0xb2, 0x1a, 0xbc, 0x1b, 0xf2, 0x53, 0x30, 0x11, 0xa8, 0xe3, 0x8d, 0x9c, 0x83, 0x4c, - 0xcb, 0xb2, 0x1a, 0xbc, 0x91, 0x3b, 0x7a, 0x35, 0x42, 0x78, 0xf8, 0xb0, 0x29, 0xbd, 0x3c, 0x05, - 0x88, 0x81, 0xb1, 0x8f, 0x29, 0xf0, 0x26, 0xd6, 0x61, 0x32, 0x54, 0xcb, 0x1b, 0xf9, 0x20, 0x0c, - 0x85, 0x3e, 0xc3, 0xd3, 0xf3, 0xea, 0x2f, 0xe3, 0xf3, 0xde, 0xef, 0xa5, 0xa5, 0xb3, 0xbf, 0x31, - 0x26, 0x5e, 0xf5, 0xb3, 0x00, 0x02, 0xd7, 0x31, 0xe6, 0x7a, 0xa1, 0x74, 0x4f, 0xe6, 0x94, 0xce, - 0x24, 0xa6, 0xe7, 0x61, 0xf7, 0x00, 0x6a, 0x04, 0xdf, 0xfa, 0x78, 0x20, 0x19, 0xbf, 0x68, 0x6e, - 0x2e, 0x29, 0xb9, 0xd7, 0xda, 0xa7, 0x25, 0x98, 0xea, 0xb6, 0x7f, 0x47, 0x8f, 0x25, 0x83, 0xea, - 0x8c, 0x94, 0x4a, 0xe7, 0x0f, 0xc1, 0xe9, 0xf5, 0xe7, 0xab, 0x12, 0xdc, 0x79, 0xe0, 0xa6, 0x14, - 0xcd, 0x27, 0x83, 0x3f, 0x20, 0x96, 0x2b, 0x55, 0xde, 0x0e, 0x84, 0xd7, 0x55, 0x2b, 0x74, 0x49, - 0xf8, 0x60, 0xd1, 0x77, 0xec, 0x9d, 0x62, 0x34, 0xa3, 0x33, 0x24, 0x96, 0x07, 0xd0, 0xa7, 0xa4, - 0xee, 0xb7, 0x67, 0x1f, 0x3d, 0x10, 0xaa, 0xf7, 0xfe, 0xad, 0xf4, 0x58, 0xff, 0x8c, 0x21, 0xc5, - 0xe9, 0xb6, 0x19, 0x88, 0x51, 0x9c, 0x03, 0xb6, 0x41, 0x31, 0x8a, 0x73, 0xd0, 0xce, 0x83, 0x2b, - 0xce, 0x81, 0x81, 0x6f, 0x8c, 0xe2, 0x24, 0xd9, 0x04, 0xc4, 0x28, 0x4e, 0xa2, 0xb8, 0x5b, 0x1e, - 0x40, 0x7b, 0x30, 0x1a, 0x0a, 0xa2, 0xd0, 0x83, 0x07, 0xc2, 0x76, 0x0b, 0x79, 0x4b, 0x67, 0xfb, - 0x61, 0x09, 0x69, 0x50, 0x97, 0x30, 0x21, 0x46, 0x83, 0x7a, 0x87, 0x47, 0xa5, 0xc7, 0xfa, 0x67, - 0xf4, 0x3a, 0xf3, 0x09, 0xff, 0x4e, 0x58, 0x80, 0x02, 0x9d, 0xeb, 0x13, 0x52, 0x74, 0xe5, 0xd1, - 0xbe, 0xf9, 0xbc, 0x9e, 0xfc, 0x95, 0x8e, 0x37, 0x5a, 0x0f, 0x16, 0x6f, 0x57, 0x97, 0x5b, 0x7a, - 0xa8, 0x2f, 0x1e, 0xaf, 0xf1, 0x9f, 0xe5, 0x77, 0x9c, 0x66, 0x0f, 0x64, 0x0f, 0x38, 0xd5, 0xd2, - 0xa9, 0x04, 0x94, 0x1e, 0xbc, 0xee, 0xdd, 0x78, 0x3c, 0x7d, 0x30, 0x5b, 0xd0, 0xa9, 0x96, 0xee, - 0x4b, 0x44, 0x2b, 0x1a, 0xb9, 0xe5, 0x67, 0x61, 0x9f, 0xcf, 0xf6, 0x7c, 0x7d, 0xba, 0x8e, 0x4d, - 0xec, 0x18, 0xce, 0xa1, 0xee, 0x2a, 0x25, 0x3b, 0x9a, 0xf9, 0xee, 0x20, 0x8c, 0x5c, 0x62, 0xad, - 0xd0, 0xaf, 0xdd, 0xbe, 0xbd, 0x50, 0x02, 0x39, 0xfc, 0xa3, 0x37, 0xec, 0x83, 0x15, 0xfe, 0x57, - 0x43, 0x46, 0xfa, 0x7a, 0x99, 0x90, 0x5d, 0x8d, 0xe0, 0xef, 0xed, 0x45, 0xf1, 0x64, 0xf6, 0xfd, - 0x1c, 0x7a, 0x1a, 0x47, 0x3f, 0x79, 0x81, 0x3e, 0x2e, 0xc1, 0x11, 0x4a, 0xe5, 0x87, 0xb9, 0x94, - 0x52, 0xbc, 0x67, 0xd0, 0x53, 0x17, 0x96, 0xb5, 0xc0, 0x06, 0x92, 0x62, 0x55, 0xee, 0xe6, 0xd7, - 0x5e, 0xef, 0x08, 0x34, 0x1e, 0x85, 0x95, 0x15, 0xfa, 0x49, 0xc6, 0x30, 0xa7, 0x13, 0xd9, 0x76, - 0x64, 0x0e, 0xbf, 0xed, 0x78, 0x12, 0xf2, 0x01, 0x8b, 0x56, 0x1c, 0x8c, 0x79, 0xb5, 0x27, 0x9a, - 0x9b, 0x08, 0x32, 0xa3, 0x9f, 0x97, 0xe0, 0x88, 0x9f, 0xf9, 0x08, 0xc2, 0x0e, 0xf5, 0x9f, 0xfb, - 0x88, 0x08, 0xa7, 0x2b, 0xae, 0xac, 0x4c, 0xb5, 0xbb, 0x39, 0xa4, 0x35, 0x18, 0x0d, 0xee, 0x70, - 0xc5, 0x47, 0xe9, 0xfa, 0xb9, 0x88, 0x19, 0x06, 0x40, 0x25, 0xc8, 0xe2, 0xbd, 0x96, 0x65, 0xbb, - 0xb8, 0x46, 0xdf, 0xf6, 0xcc, 0x2a, 0x5e, 0x59, 0xbe, 0x0e, 0xa8, 0x73, 0x72, 0xd1, 0x53, 0x91, - 0x2f, 0xe9, 0x1c, 0x66, 0x0b, 0xd4, 0xf9, 0xf1, 0x9d, 0xe0, 0x57, 0x71, 0x6e, 0xb5, 0x71, 0xf8, - 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0x2c, 0xee, 0x19, 0x9b, 0xe1, 0x99, 0x00, 0x00, + // 8430 bytes of a gzipped FileDescriptorSet + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x6b, 0x70, 0x24, 0xd7, + 0x75, 0xde, 0xf6, 0x3c, 0x80, 0x99, 0x33, 0x78, 0x34, 0x2e, 0xb0, 0xe0, 0xec, 0x2c, 0x17, 0x00, + 0x9b, 0x14, 0xb9, 0x5c, 0x92, 0xb3, 0xe4, 0x92, 0x5c, 0x92, 0xb3, 0x96, 0x68, 0x0c, 0x30, 0x0b, + 0x62, 0x89, 0x17, 0x1b, 0xc0, 0x8a, 0x94, 0xac, 0x4c, 0x35, 0x7a, 0x2e, 0x06, 0xcd, 0xed, 0xe9, + 0x6e, 0x76, 0xf7, 0xec, 0x02, 0x1b, 0xfd, 0x60, 0x4a, 0x92, 0x6d, 0x31, 0x51, 0x24, 0x25, 0xae, + 0x44, 0x56, 0x44, 0x85, 0x92, 0x92, 0x48, 0x91, 0x9d, 0x38, 0x8e, 0x1d, 0x27, 0x8e, 0xab, 0x12, + 0xc5, 0x56, 0x1c, 0xa5, 0x12, 0xa7, 0xc4, 0x2a, 0x27, 0x71, 0x52, 0xc9, 0xca, 0xa1, 0x54, 0x89, + 0xac, 0x28, 0xb1, 0xb3, 0x61, 0x52, 0xa9, 0xf0, 0x87, 0x5d, 0xf7, 0xd5, 0x8f, 0x79, 0x60, 0x66, + 0xc0, 0x5d, 0x4a, 0x2c, 0xf3, 0xd7, 0x4e, 0x9f, 0x3e, 0xdf, 0x77, 0xef, 0x3d, 0xf7, 0xdc, 0x73, + 0xcf, 0x7d, 0x34, 0x16, 0x7e, 0xeb, 0x02, 0xcc, 0xd5, 0x6d, 0xbb, 0x6e, 0xe2, 0xb3, 0x8e, 0x6b, + 0xfb, 0xf6, 0x4e, 0x73, 0xf7, 0x6c, 0x0d, 0x7b, 0xba, 0x6b, 0x38, 0xbe, 0xed, 0x16, 0xa9, 0x0c, + 0x8d, 0x33, 0x8d, 0xa2, 0xd0, 0x50, 0x56, 0x61, 0xe2, 0xa2, 0x61, 0xe2, 0xc5, 0x40, 0x71, 0x13, + 0xfb, 0xe8, 0x49, 0x48, 0xed, 0x1a, 0x26, 0xce, 0x4b, 0x73, 0xc9, 0xd3, 0xb9, 0x73, 0xf7, 0x14, + 0x5b, 0x40, 0xc5, 0x38, 0x62, 0x83, 0x88, 0x55, 0x8a, 0x50, 0xbe, 0x97, 0x82, 0xc9, 0x0e, 0x6f, + 0x11, 0x82, 0x94, 0xa5, 0x35, 0x08, 0xa3, 0x74, 0x3a, 0xab, 0xd2, 0xdf, 0x28, 0x0f, 0xc3, 0x8e, + 0xa6, 0x5f, 0xd1, 0xea, 0x38, 0x9f, 0xa0, 0x62, 0xf1, 0x88, 0x66, 0x00, 0x6a, 0xd8, 0xc1, 0x56, + 0x0d, 0x5b, 0xfa, 0x41, 0x3e, 0x39, 0x97, 0x3c, 0x9d, 0x55, 0x23, 0x12, 0xf4, 0x00, 0x4c, 0x38, + 0xcd, 0x1d, 0xd3, 0xd0, 0xab, 0x11, 0x35, 0x98, 0x4b, 0x9e, 0x4e, 0xab, 0x32, 0x7b, 0xb1, 0x18, + 0x2a, 0xdf, 0x07, 0xe3, 0xd7, 0xb0, 0x76, 0x25, 0xaa, 0x9a, 0xa3, 0xaa, 0x63, 0x44, 0x1c, 0x51, + 0x5c, 0x80, 0x91, 0x06, 0xf6, 0x3c, 0xad, 0x8e, 0xab, 0xfe, 0x81, 0x83, 0xf3, 0x29, 0xda, 0xfa, + 0xb9, 0xb6, 0xd6, 0xb7, 0xb6, 0x3c, 0xc7, 0x51, 0x5b, 0x07, 0x0e, 0x46, 0xf3, 0x90, 0xc5, 0x56, + 0xb3, 0xc1, 0x18, 0xd2, 0x5d, 0xec, 0x57, 0xb1, 0x9a, 0x8d, 0x56, 0x96, 0x0c, 0x81, 0x71, 0x8a, + 0x61, 0x0f, 0xbb, 0x57, 0x0d, 0x1d, 0xe7, 0x87, 0x28, 0xc1, 0x7d, 0x6d, 0x04, 0x9b, 0xec, 0x7d, + 0x2b, 0x87, 0xc0, 0xa1, 0x05, 0xc8, 0xe2, 0x7d, 0x1f, 0x5b, 0x9e, 0x61, 0x5b, 0xf9, 0x61, 0x4a, + 0xf2, 0xbe, 0x0e, 0xbd, 0x88, 0xcd, 0x5a, 0x2b, 0x45, 0x88, 0x43, 0xe7, 0x61, 0xd8, 0x76, 0x7c, + 0xc3, 0xb6, 0xbc, 0x7c, 0x66, 0x4e, 0x3a, 0x9d, 0x3b, 0x77, 0x67, 0x47, 0x47, 0x58, 0x67, 0x3a, + 0xaa, 0x50, 0x46, 0xcb, 0x20, 0x7b, 0x76, 0xd3, 0xd5, 0x71, 0x55, 0xb7, 0x6b, 0xb8, 0x6a, 0x58, + 0xbb, 0x76, 0x3e, 0x4b, 0x09, 0x66, 0xdb, 0x1b, 0x42, 0x15, 0x17, 0xec, 0x1a, 0x5e, 0xb6, 0x76, + 0x6d, 0x75, 0xcc, 0x8b, 0x3d, 0xa3, 0x69, 0x18, 0xf2, 0x0e, 0x2c, 0x5f, 0xdb, 0xcf, 0x8f, 0x50, + 0x0f, 0xe1, 0x4f, 0xca, 0xaf, 0x0f, 0xc1, 0x78, 0x3f, 0x2e, 0x76, 0x01, 0xd2, 0xbb, 0xa4, 0x95, + 0xf9, 0xc4, 0x20, 0x36, 0x60, 0x98, 0xb8, 0x11, 0x87, 0x8e, 0x68, 0xc4, 0x79, 0xc8, 0x59, 0xd8, + 0xf3, 0x71, 0x8d, 0x79, 0x44, 0xb2, 0x4f, 0x9f, 0x02, 0x06, 0x6a, 0x77, 0xa9, 0xd4, 0x91, 0x5c, + 0xea, 0x79, 0x18, 0x0f, 0xaa, 0x54, 0x75, 0x35, 0xab, 0x2e, 0x7c, 0xf3, 0x6c, 0xaf, 0x9a, 0x14, + 0x2b, 0x02, 0xa7, 0x12, 0x98, 0x3a, 0x86, 0x63, 0xcf, 0x68, 0x11, 0xc0, 0xb6, 0xb0, 0xbd, 0x5b, + 0xad, 0x61, 0xdd, 0xcc, 0x67, 0xba, 0x58, 0x69, 0x9d, 0xa8, 0xb4, 0x59, 0xc9, 0x66, 0x52, 0xdd, + 0x44, 0x4f, 0x85, 0xae, 0x36, 0xdc, 0xc5, 0x53, 0x56, 0xd9, 0x20, 0x6b, 0xf3, 0xb6, 0x6d, 0x18, + 0x73, 0x31, 0xf1, 0x7b, 0x5c, 0xe3, 0x2d, 0xcb, 0xd2, 0x4a, 0x14, 0x7b, 0xb6, 0x4c, 0xe5, 0x30, + 0xd6, 0xb0, 0x51, 0x37, 0xfa, 0x88, 0xee, 0x86, 0x40, 0x50, 0xa5, 0x6e, 0x05, 0x34, 0x0a, 0x8d, + 0x08, 0xe1, 0x9a, 0xd6, 0xc0, 0x85, 0xeb, 0x30, 0x16, 0x37, 0x0f, 0x9a, 0x82, 0xb4, 0xe7, 0x6b, + 0xae, 0x4f, 0xbd, 0x30, 0xad, 0xb2, 0x07, 0x24, 0x43, 0x12, 0x5b, 0x35, 0x1a, 0xe5, 0xd2, 0x2a, + 0xf9, 0x89, 0x7e, 0x32, 0x6c, 0x70, 0x92, 0x36, 0xf8, 0xde, 0xf6, 0x1e, 0x8d, 0x31, 0xb7, 0xb6, + 0xbb, 0xf0, 0x04, 0x8c, 0xc6, 0x1a, 0xd0, 0x6f, 0xd1, 0xca, 0x47, 0xe1, 0x78, 0x47, 0x6a, 0xf4, + 0x3c, 0x4c, 0x35, 0x2d, 0xc3, 0xf2, 0xb1, 0xeb, 0xb8, 0x98, 0x78, 0x2c, 0x2b, 0x2a, 0xff, 0xdf, + 0x86, 0xbb, 0xf8, 0xdc, 0x76, 0x54, 0x9b, 0xb1, 0xa8, 0x93, 0xcd, 0x76, 0xe1, 0x99, 0x6c, 0xe6, + 0xfb, 0xc3, 0xf2, 0xcb, 0x2f, 0xbf, 0xfc, 0x72, 0x42, 0xf9, 0x67, 0x43, 0x30, 0xd5, 0x69, 0xcc, + 0x74, 0x1c, 0xbe, 0xd3, 0x30, 0x64, 0x35, 0x1b, 0x3b, 0xd8, 0xa5, 0x46, 0x4a, 0xab, 0xfc, 0x09, + 0xcd, 0x43, 0xda, 0xd4, 0x76, 0xb0, 0x99, 0x4f, 0xcd, 0x49, 0xa7, 0xc7, 0xce, 0x3d, 0xd0, 0xd7, + 0xa8, 0x2c, 0xae, 0x10, 0x88, 0xca, 0x90, 0xe8, 0x03, 0x90, 0xe2, 0x21, 0x9a, 0x30, 0x9c, 0xe9, + 0x8f, 0x81, 0x8c, 0x25, 0x95, 0xe2, 0xd0, 0x49, 0xc8, 0x92, 0x7f, 0x99, 0x6f, 0x0c, 0xd1, 0x3a, + 0x67, 0x88, 0x80, 0xf8, 0x05, 0x2a, 0x40, 0x86, 0x0e, 0x93, 0x1a, 0x16, 0x53, 0x5b, 0xf0, 0x4c, + 0x1c, 0xab, 0x86, 0x77, 0xb5, 0xa6, 0xe9, 0x57, 0xaf, 0x6a, 0x66, 0x13, 0x53, 0x87, 0xcf, 0xaa, + 0x23, 0x5c, 0x78, 0x99, 0xc8, 0xd0, 0x2c, 0xe4, 0xd8, 0xa8, 0x32, 0xac, 0x1a, 0xde, 0xa7, 0xd1, + 0x33, 0xad, 0xb2, 0x81, 0xb6, 0x4c, 0x24, 0xa4, 0xf8, 0x17, 0x3d, 0xdb, 0x12, 0xae, 0x49, 0x8b, + 0x20, 0x02, 0x5a, 0xfc, 0x13, 0xad, 0x81, 0xfb, 0x54, 0xe7, 0xe6, 0xb5, 0x8d, 0xa5, 0xfb, 0x60, + 0x9c, 0x6a, 0x3c, 0xca, 0xbb, 0x5e, 0x33, 0xf3, 0x13, 0x73, 0xd2, 0xe9, 0x8c, 0x3a, 0xc6, 0xc4, + 0xeb, 0x5c, 0xaa, 0xfc, 0x5a, 0x02, 0x52, 0x34, 0xb0, 0x8c, 0x43, 0x6e, 0xeb, 0x85, 0x8d, 0x4a, + 0x75, 0x71, 0x7d, 0xbb, 0xbc, 0x52, 0x91, 0x25, 0x34, 0x06, 0x40, 0x05, 0x17, 0x57, 0xd6, 0xe7, + 0xb7, 0xe4, 0x44, 0xf0, 0xbc, 0xbc, 0xb6, 0x75, 0xfe, 0x31, 0x39, 0x19, 0x00, 0xb6, 0x99, 0x20, + 0x15, 0x55, 0x78, 0xf4, 0x9c, 0x9c, 0x46, 0x32, 0x8c, 0x30, 0x82, 0xe5, 0xe7, 0x2b, 0x8b, 0xe7, + 0x1f, 0x93, 0x87, 0xe2, 0x92, 0x47, 0xcf, 0xc9, 0xc3, 0x68, 0x14, 0xb2, 0x54, 0x52, 0x5e, 0x5f, + 0x5f, 0x91, 0x33, 0x01, 0xe7, 0xe6, 0x96, 0xba, 0xbc, 0xb6, 0x24, 0x67, 0x03, 0xce, 0x25, 0x75, + 0x7d, 0x7b, 0x43, 0x86, 0x80, 0x61, 0xb5, 0xb2, 0xb9, 0x39, 0xbf, 0x54, 0x91, 0x73, 0x81, 0x46, + 0xf9, 0x85, 0xad, 0xca, 0xa6, 0x3c, 0x12, 0xab, 0xd6, 0xa3, 0xe7, 0xe4, 0xd1, 0xa0, 0x88, 0xca, + 0xda, 0xf6, 0xaa, 0x3c, 0x86, 0x26, 0x60, 0x94, 0x15, 0x21, 0x2a, 0x31, 0xde, 0x22, 0x3a, 0xff, + 0x98, 0x2c, 0x87, 0x15, 0x61, 0x2c, 0x13, 0x31, 0xc1, 0xf9, 0xc7, 0x64, 0xa4, 0x2c, 0x40, 0x9a, + 0xba, 0x21, 0x42, 0x30, 0xb6, 0x32, 0x5f, 0xae, 0xac, 0x54, 0xd7, 0x37, 0xb6, 0x96, 0xd7, 0xd7, + 0xe6, 0x57, 0x64, 0x29, 0x94, 0xa9, 0x95, 0xe7, 0xb6, 0x97, 0xd5, 0xca, 0xa2, 0x9c, 0x88, 0xca, + 0x36, 0x2a, 0xf3, 0x5b, 0x95, 0x45, 0x39, 0xa9, 0xe8, 0x30, 0xd5, 0x29, 0xa0, 0x76, 0x1c, 0x42, + 0x11, 0x5f, 0x48, 0x74, 0xf1, 0x05, 0xca, 0xd5, 0xea, 0x0b, 0xca, 0x77, 0x13, 0x30, 0xd9, 0x61, + 0x52, 0xe9, 0x58, 0xc8, 0xd3, 0x90, 0x66, 0xbe, 0xcc, 0xa6, 0xd9, 0xfb, 0x3b, 0xce, 0x4e, 0xd4, + 0xb3, 0xdb, 0xa6, 0x5a, 0x8a, 0x8b, 0xa6, 0x1a, 0xc9, 0x2e, 0xa9, 0x06, 0xa1, 0x68, 0x73, 0xd8, + 0x8f, 0xb4, 0x05, 0x7f, 0x36, 0x3f, 0x9e, 0xef, 0x67, 0x7e, 0xa4, 0xb2, 0xc1, 0x26, 0x81, 0x74, + 0x87, 0x49, 0xe0, 0x02, 0x4c, 0xb4, 0x11, 0xf5, 0x1d, 0x8c, 0x3f, 0x26, 0x41, 0xbe, 0x9b, 0x71, + 0x7a, 0x84, 0xc4, 0x44, 0x2c, 0x24, 0x5e, 0x68, 0xb5, 0xe0, 0x5d, 0xdd, 0x3b, 0xa1, 0xad, 0xaf, + 0xbf, 0x2a, 0xc1, 0x74, 0xe7, 0x94, 0xb2, 0x63, 0x1d, 0x3e, 0x00, 0x43, 0x0d, 0xec, 0xef, 0xd9, + 0x22, 0xad, 0xba, 0xb7, 0xc3, 0x64, 0x4d, 0x5e, 0xb7, 0x76, 0x36, 0x47, 0x45, 0x67, 0xfb, 0x64, + 0xb7, 0xbc, 0x90, 0xd5, 0xa6, 0xad, 0xa6, 0x9f, 0x4c, 0xc0, 0xf1, 0x8e, 0xe4, 0x1d, 0x2b, 0x7a, + 0x0a, 0xc0, 0xb0, 0x9c, 0xa6, 0xcf, 0x52, 0x27, 0x16, 0x89, 0xb3, 0x54, 0x42, 0x83, 0x17, 0x89, + 0xb2, 0x4d, 0x3f, 0x78, 0x9f, 0xa4, 0xef, 0x81, 0x89, 0xa8, 0xc2, 0x93, 0x61, 0x45, 0x53, 0xb4, + 0xa2, 0x33, 0x5d, 0x5a, 0xda, 0xe6, 0x98, 0x0f, 0x83, 0xac, 0x9b, 0x06, 0xb6, 0xfc, 0xaa, 0xe7, + 0xbb, 0x58, 0x6b, 0x18, 0x56, 0x9d, 0x4e, 0x35, 0x99, 0x52, 0x7a, 0x57, 0x33, 0x3d, 0xac, 0x8e, + 0xb3, 0xd7, 0x9b, 0xe2, 0x2d, 0x41, 0x50, 0x07, 0x72, 0x23, 0x88, 0xa1, 0x18, 0x82, 0xbd, 0x0e, + 0x10, 0xca, 0x67, 0xb3, 0x90, 0x8b, 0x24, 0xe0, 0xe8, 0x2e, 0x18, 0x79, 0x51, 0xbb, 0xaa, 0x55, + 0xc5, 0xa2, 0x8a, 0x59, 0x22, 0x47, 0x64, 0x1b, 0x7c, 0x61, 0xf5, 0x30, 0x4c, 0x51, 0x15, 0xbb, + 0xe9, 0x63, 0xb7, 0xaa, 0x9b, 0x9a, 0xe7, 0x51, 0xa3, 0x65, 0xa8, 0x2a, 0x22, 0xef, 0xd6, 0xc9, + 0xab, 0x05, 0xf1, 0x06, 0x3d, 0x0e, 0x93, 0x14, 0xd1, 0x68, 0x9a, 0xbe, 0xe1, 0x98, 0xb8, 0x4a, + 0x96, 0x79, 0x1e, 0x9d, 0x72, 0x82, 0x9a, 0x4d, 0x10, 0x8d, 0x55, 0xae, 0x40, 0x6a, 0xe4, 0xa1, + 0x45, 0x38, 0x45, 0x61, 0x75, 0x6c, 0x61, 0x57, 0xf3, 0x71, 0x15, 0xbf, 0xd4, 0xd4, 0x4c, 0xaf, + 0xaa, 0x59, 0xb5, 0xea, 0x9e, 0xe6, 0xed, 0xe5, 0xa7, 0x08, 0x41, 0x39, 0x91, 0x97, 0xd4, 0x13, + 0x44, 0x71, 0x89, 0xeb, 0x55, 0xa8, 0xda, 0xbc, 0x55, 0x7b, 0x46, 0xf3, 0xf6, 0x50, 0x09, 0xa6, + 0x29, 0x8b, 0xe7, 0xbb, 0x86, 0x55, 0xaf, 0xea, 0x7b, 0x58, 0xbf, 0x52, 0x6d, 0xfa, 0xbb, 0x4f, + 0xe6, 0x4f, 0x46, 0xcb, 0xa7, 0x35, 0xdc, 0xa4, 0x3a, 0x0b, 0x44, 0x65, 0xdb, 0xdf, 0x7d, 0x12, + 0x6d, 0xc2, 0x08, 0xe9, 0x8c, 0x86, 0x71, 0x1d, 0x57, 0x77, 0x6d, 0x97, 0xce, 0xa1, 0x63, 0x1d, + 0x42, 0x53, 0xc4, 0x82, 0xc5, 0x75, 0x0e, 0x58, 0xb5, 0x6b, 0xb8, 0x94, 0xde, 0xdc, 0xa8, 0x54, + 0x16, 0xd5, 0x9c, 0x60, 0xb9, 0x68, 0xbb, 0xc4, 0xa1, 0xea, 0x76, 0x60, 0xe0, 0x1c, 0x73, 0xa8, + 0xba, 0x2d, 0xcc, 0xfb, 0x38, 0x4c, 0xea, 0x3a, 0x6b, 0xb3, 0xa1, 0x57, 0xf9, 0x62, 0xcc, 0xcb, + 0xcb, 0x31, 0x63, 0xe9, 0xfa, 0x12, 0x53, 0xe0, 0x3e, 0xee, 0xa1, 0xa7, 0xe0, 0x78, 0x68, 0xac, + 0x28, 0x70, 0xa2, 0xad, 0x95, 0xad, 0xd0, 0xc7, 0x61, 0xd2, 0x39, 0x68, 0x07, 0xa2, 0x58, 0x89, + 0xce, 0x41, 0x2b, 0xec, 0x09, 0x98, 0x72, 0xf6, 0x9c, 0x76, 0xdc, 0x99, 0x28, 0x0e, 0x39, 0x7b, + 0x4e, 0x2b, 0xf0, 0x7d, 0x74, 0x65, 0xee, 0x62, 0x5d, 0xf3, 0x71, 0x2d, 0x7f, 0x47, 0x54, 0x3d, + 0xf2, 0x02, 0x15, 0x41, 0xd6, 0xf5, 0x2a, 0xb6, 0xb4, 0x1d, 0x13, 0x57, 0x35, 0x17, 0x5b, 0x9a, + 0x97, 0x9f, 0xa5, 0xca, 0x29, 0xdf, 0x6d, 0x62, 0x75, 0x4c, 0xd7, 0x2b, 0xf4, 0xe5, 0x3c, 0x7d, + 0x87, 0xce, 0xc0, 0x84, 0xbd, 0xf3, 0xa2, 0xce, 0x3c, 0xb2, 0xea, 0xb8, 0x78, 0xd7, 0xd8, 0xcf, + 0xdf, 0x43, 0xcd, 0x3b, 0x4e, 0x5e, 0x50, 0x7f, 0xdc, 0xa0, 0x62, 0x74, 0x3f, 0xc8, 0xba, 0xb7, + 0xa7, 0xb9, 0x0e, 0x0d, 0xc9, 0x9e, 0xa3, 0xe9, 0x38, 0xff, 0x3e, 0xa6, 0xca, 0xe4, 0x6b, 0x42, + 0x4c, 0x46, 0x84, 0x77, 0xcd, 0xd8, 0xf5, 0x05, 0xe3, 0x7d, 0x6c, 0x44, 0x50, 0x19, 0x67, 0x3b, + 0x0d, 0x32, 0xb1, 0x44, 0xac, 0xe0, 0xd3, 0x54, 0x6d, 0xcc, 0xd9, 0x73, 0xa2, 0xe5, 0xde, 0x0d, + 0xa3, 0x44, 0x33, 0x2c, 0xf4, 0x7e, 0x96, 0xb8, 0x39, 0x7b, 0x91, 0x12, 0x1f, 0x83, 0x69, 0xa2, + 0xd4, 0xc0, 0xbe, 0x56, 0xd3, 0x7c, 0x2d, 0xa2, 0xfd, 0x20, 0xd5, 0x26, 0x66, 0x5f, 0xe5, 0x2f, + 0x63, 0xf5, 0x74, 0x9b, 0x3b, 0x07, 0x81, 0x63, 0x3d, 0xc4, 0xea, 0x49, 0x64, 0xc2, 0xb5, 0x6e, + 0x5b, 0x72, 0xae, 0x94, 0x60, 0x24, 0xea, 0xf7, 0x28, 0x0b, 0xcc, 0xf3, 0x65, 0x89, 0x24, 0x41, + 0x0b, 0xeb, 0x8b, 0x24, 0x7d, 0xf9, 0x50, 0x45, 0x4e, 0x90, 0x34, 0x6a, 0x65, 0x79, 0xab, 0x52, + 0x55, 0xb7, 0xd7, 0xb6, 0x96, 0x57, 0x2b, 0x72, 0x32, 0x92, 0xd8, 0x5f, 0x4a, 0x65, 0xee, 0x95, + 0xef, 0x53, 0x5e, 0x4f, 0xc0, 0x58, 0x7c, 0xa5, 0x86, 0x7e, 0x02, 0xee, 0x10, 0xdb, 0x2a, 0x1e, + 0xf6, 0xab, 0xd7, 0x0c, 0x97, 0x0e, 0xc8, 0x86, 0xc6, 0x26, 0xc7, 0xc0, 0x7f, 0xa6, 0xb8, 0xd6, + 0x26, 0xf6, 0x3f, 0x68, 0xb8, 0x64, 0xb8, 0x35, 0x34, 0x1f, 0xad, 0xc0, 0xac, 0x65, 0x57, 0x3d, + 0x5f, 0xb3, 0x6a, 0x9a, 0x5b, 0xab, 0x86, 0x1b, 0x5a, 0x55, 0x4d, 0xd7, 0xb1, 0xe7, 0xd9, 0x6c, + 0x22, 0x0c, 0x58, 0xee, 0xb4, 0xec, 0x4d, 0xae, 0x1c, 0xce, 0x10, 0xf3, 0x5c, 0xb5, 0xc5, 0x7d, + 0x93, 0xdd, 0xdc, 0xf7, 0x24, 0x64, 0x1b, 0x9a, 0x53, 0xc5, 0x96, 0xef, 0x1e, 0xd0, 0xfc, 0x3c, + 0xa3, 0x66, 0x1a, 0x9a, 0x53, 0x21, 0xcf, 0xef, 0xc8, 0x32, 0xe9, 0x52, 0x2a, 0x93, 0x91, 0xb3, + 0x97, 0x52, 0x99, 0xac, 0x0c, 0xca, 0x1b, 0x49, 0x18, 0x89, 0xe6, 0xeb, 0x64, 0xf9, 0xa3, 0xd3, + 0x19, 0x4b, 0xa2, 0x31, 0xed, 0xee, 0x43, 0xb3, 0xfb, 0xe2, 0x02, 0x99, 0xca, 0x4a, 0x43, 0x2c, + 0x39, 0x56, 0x19, 0x92, 0xa4, 0x11, 0xc4, 0xd9, 0x30, 0x4b, 0x46, 0x32, 0x2a, 0x7f, 0x42, 0x4b, + 0x30, 0xf4, 0xa2, 0x47, 0xb9, 0x87, 0x28, 0xf7, 0x3d, 0x87, 0x73, 0x5f, 0xda, 0xa4, 0xe4, 0xd9, + 0x4b, 0x9b, 0xd5, 0xb5, 0x75, 0x75, 0x75, 0x7e, 0x45, 0xe5, 0x70, 0x74, 0x02, 0x52, 0xa6, 0x76, + 0xfd, 0x20, 0x3e, 0xe9, 0x51, 0x51, 0xbf, 0x9d, 0x70, 0x02, 0x52, 0xd7, 0xb0, 0x76, 0x25, 0x3e, + 0xd5, 0x50, 0xd1, 0x6d, 0x1c, 0x0c, 0x67, 0x21, 0x4d, 0xed, 0x85, 0x00, 0xb8, 0xc5, 0xe4, 0x63, + 0x28, 0x03, 0xa9, 0x85, 0x75, 0x95, 0x0c, 0x08, 0x19, 0x46, 0x98, 0xb4, 0xba, 0xb1, 0x5c, 0x59, + 0xa8, 0xc8, 0x09, 0xe5, 0x71, 0x18, 0x62, 0x46, 0x20, 0x83, 0x25, 0x30, 0x83, 0x7c, 0x8c, 0x3f, + 0x72, 0x0e, 0x49, 0xbc, 0xdd, 0x5e, 0x2d, 0x57, 0x54, 0x39, 0x11, 0xef, 0xea, 0x94, 0x9c, 0x56, + 0x3c, 0x18, 0x89, 0xe6, 0xe1, 0xef, 0xcc, 0x62, 0xfc, 0x1b, 0x12, 0xe4, 0x22, 0x79, 0x35, 0x49, + 0x88, 0x34, 0xd3, 0xb4, 0xaf, 0x55, 0x35, 0xd3, 0xd0, 0x3c, 0xee, 0x1a, 0x40, 0x45, 0xf3, 0x44, + 0xd2, 0x6f, 0xd7, 0xbd, 0x43, 0x43, 0x24, 0x2d, 0x0f, 0x29, 0x5f, 0x94, 0x40, 0x6e, 0x4d, 0x6c, + 0x5b, 0xaa, 0x29, 0xfd, 0x28, 0xab, 0xa9, 0x7c, 0x41, 0x82, 0xb1, 0x78, 0x36, 0xdb, 0x52, 0xbd, + 0xbb, 0x7e, 0xa4, 0xd5, 0xfb, 0xfd, 0x04, 0x8c, 0xc6, 0x72, 0xd8, 0x7e, 0x6b, 0xf7, 0x12, 0x4c, + 0x18, 0x35, 0xdc, 0x70, 0x6c, 0x1f, 0x5b, 0xfa, 0x41, 0xd5, 0xc4, 0x57, 0xb1, 0x99, 0x57, 0x68, + 0xd0, 0x38, 0x7b, 0x78, 0x96, 0x5c, 0x5c, 0x0e, 0x71, 0x2b, 0x04, 0x56, 0x9a, 0x5c, 0x5e, 0xac, + 0xac, 0x6e, 0xac, 0x6f, 0x55, 0xd6, 0x16, 0x5e, 0xa8, 0x6e, 0xaf, 0x3d, 0xbb, 0xb6, 0xfe, 0xc1, + 0x35, 0x55, 0x36, 0x5a, 0xd4, 0x6e, 0xe3, 0xb0, 0xdf, 0x00, 0xb9, 0xb5, 0x52, 0xe8, 0x0e, 0xe8, + 0x54, 0x2d, 0xf9, 0x18, 0x9a, 0x84, 0xf1, 0xb5, 0xf5, 0xea, 0xe6, 0xf2, 0x62, 0xa5, 0x5a, 0xb9, + 0x78, 0xb1, 0xb2, 0xb0, 0xb5, 0xc9, 0xf6, 0x3d, 0x02, 0xed, 0xad, 0xd8, 0x00, 0x57, 0x3e, 0x9f, + 0x84, 0xc9, 0x0e, 0x35, 0x41, 0xf3, 0x7c, 0xc5, 0xc2, 0x16, 0x51, 0x0f, 0xf5, 0x53, 0xfb, 0x22, + 0xc9, 0x19, 0x36, 0x34, 0xd7, 0xe7, 0x0b, 0x9c, 0xfb, 0x81, 0x58, 0xc9, 0xf2, 0x8d, 0x5d, 0x03, + 0xbb, 0x7c, 0x3f, 0x89, 0x2d, 0x63, 0xc6, 0x43, 0x39, 0xdb, 0x52, 0x7a, 0x10, 0x90, 0x63, 0x7b, + 0x86, 0x6f, 0x5c, 0xc5, 0x55, 0xc3, 0x12, 0x9b, 0x4f, 0x64, 0x59, 0x93, 0x52, 0x65, 0xf1, 0x66, + 0xd9, 0xf2, 0x03, 0x6d, 0x0b, 0xd7, 0xb5, 0x16, 0x6d, 0x12, 0xcc, 0x93, 0xaa, 0x2c, 0xde, 0x04, + 0xda, 0x77, 0xc1, 0x48, 0xcd, 0x6e, 0x92, 0x5c, 0x8f, 0xe9, 0x91, 0xb9, 0x43, 0x52, 0x73, 0x4c, + 0x16, 0xa8, 0xf0, 0x2c, 0x3e, 0xdc, 0xf5, 0x1a, 0x51, 0x73, 0x4c, 0xc6, 0x54, 0xee, 0x83, 0x71, + 0xad, 0x5e, 0x77, 0x09, 0xb9, 0x20, 0x62, 0xeb, 0x92, 0xb1, 0x40, 0x4c, 0x15, 0x0b, 0x97, 0x20, + 0x23, 0xec, 0x40, 0xa6, 0x6a, 0x62, 0x89, 0xaa, 0xc3, 0x16, 0xdb, 0x89, 0xd3, 0x59, 0x35, 0x63, + 0x89, 0x97, 0x77, 0xc1, 0x88, 0xe1, 0x55, 0xc3, 0x4d, 0xfc, 0xc4, 0x5c, 0xe2, 0x74, 0x46, 0xcd, + 0x19, 0x5e, 0xb0, 0x01, 0xaa, 0x7c, 0x35, 0x01, 0x63, 0xf1, 0x43, 0x08, 0xb4, 0x08, 0x19, 0xd3, + 0xd6, 0x35, 0xea, 0x5a, 0xec, 0x04, 0xec, 0x74, 0x8f, 0x73, 0x8b, 0xe2, 0x0a, 0xd7, 0x57, 0x03, + 0x64, 0xe1, 0xdf, 0x48, 0x90, 0x11, 0x62, 0x34, 0x0d, 0x29, 0x47, 0xf3, 0xf7, 0x28, 0x5d, 0xba, + 0x9c, 0x90, 0x25, 0x95, 0x3e, 0x13, 0xb9, 0xe7, 0x68, 0x16, 0x75, 0x01, 0x2e, 0x27, 0xcf, 0xa4, + 0x5f, 0x4d, 0xac, 0xd5, 0xe8, 0xa2, 0xc7, 0x6e, 0x34, 0xb0, 0xe5, 0x7b, 0xa2, 0x5f, 0xb9, 0x7c, + 0x81, 0x8b, 0xd1, 0x03, 0x30, 0xe1, 0xbb, 0x9a, 0x61, 0xc6, 0x74, 0x53, 0x54, 0x57, 0x16, 0x2f, + 0x02, 0xe5, 0x12, 0x9c, 0x10, 0xbc, 0x35, 0xec, 0x6b, 0xfa, 0x1e, 0xae, 0x85, 0xa0, 0x21, 0xba, + 0xb9, 0x71, 0x07, 0x57, 0x58, 0xe4, 0xef, 0x05, 0x56, 0x79, 0x5d, 0x82, 0x09, 0xb1, 0x4c, 0xab, + 0x05, 0xc6, 0x5a, 0x05, 0xd0, 0x2c, 0xcb, 0xf6, 0xa3, 0xe6, 0x6a, 0x77, 0xe5, 0x36, 0x5c, 0x71, + 0x3e, 0x00, 0xa9, 0x11, 0x82, 0x42, 0x03, 0x20, 0x7c, 0xd3, 0xd5, 0x6c, 0xb3, 0x90, 0xe3, 0x27, + 0x4c, 0xf4, 0x98, 0x92, 0x2d, 0xec, 0x81, 0x89, 0xc8, 0x7a, 0x0e, 0x4d, 0x41, 0x7a, 0x07, 0xd7, + 0x0d, 0x8b, 0xef, 0x1b, 0xb3, 0x07, 0xb1, 0xfd, 0x92, 0x0a, 0xb6, 0x5f, 0xca, 0x9f, 0x96, 0x60, + 0x52, 0xb7, 0x1b, 0xad, 0xf5, 0x2d, 0xcb, 0x2d, 0xbb, 0x0b, 0xde, 0x33, 0xd2, 0x87, 0x3e, 0x50, + 0x37, 0xfc, 0xbd, 0xe6, 0x4e, 0x51, 0xb7, 0x1b, 0x67, 0xeb, 0xb6, 0xa9, 0x59, 0xf5, 0xf0, 0x9c, + 0x95, 0xfe, 0xd0, 0x1f, 0xaa, 0x63, 0xeb, 0xa1, 0xba, 0x1d, 0x39, 0x75, 0xbd, 0x10, 0xfe, 0xfc, + 0x7f, 0x92, 0xf4, 0xe5, 0x44, 0x72, 0x69, 0xa3, 0xfc, 0xf5, 0x44, 0x61, 0x89, 0x15, 0xb7, 0x21, + 0xcc, 0xa3, 0xe2, 0x5d, 0x13, 0xeb, 0xa4, 0xc9, 0xf0, 0x83, 0x07, 0x60, 0xaa, 0x6e, 0xd7, 0x6d, + 0xca, 0x78, 0x96, 0xfc, 0xe2, 0x27, 0xb7, 0xd9, 0x40, 0x5a, 0xe8, 0x79, 0xcc, 0x5b, 0x5a, 0x83, + 0x49, 0xae, 0x5c, 0xa5, 0x47, 0x47, 0x6c, 0x61, 0x83, 0x0e, 0xdd, 0x55, 0xcb, 0xff, 0xf2, 0xf7, + 0xe8, 0x84, 0xae, 0x4e, 0x70, 0x28, 0x79, 0xc7, 0xd6, 0x3e, 0x25, 0x15, 0x8e, 0xc7, 0xf8, 0xd8, + 0xb0, 0xc5, 0x6e, 0x0f, 0xc6, 0x7f, 0xce, 0x19, 0x27, 0x23, 0x8c, 0x9b, 0x1c, 0x5a, 0x5a, 0x80, + 0xd1, 0x41, 0xb8, 0x7e, 0x9b, 0x73, 0x8d, 0xe0, 0x28, 0xc9, 0x12, 0x8c, 0x53, 0x12, 0xbd, 0xe9, + 0xf9, 0x76, 0x83, 0xc6, 0xc4, 0xc3, 0x69, 0xfe, 0xc5, 0xf7, 0xd8, 0x38, 0x1a, 0x23, 0xb0, 0x85, + 0x00, 0x55, 0x2a, 0x01, 0x3d, 0x2d, 0xab, 0x61, 0xdd, 0xec, 0xc1, 0xf0, 0x2d, 0x5e, 0x91, 0x40, + 0xbf, 0x74, 0x19, 0xa6, 0xc8, 0x6f, 0x1a, 0xb2, 0xa2, 0x35, 0xe9, 0xbd, 0x05, 0x97, 0x7f, 0xfd, + 0x63, 0x6c, 0xa8, 0x4e, 0x06, 0x04, 0x91, 0x3a, 0x45, 0x7a, 0xb1, 0x8e, 0x7d, 0x1f, 0xbb, 0x5e, + 0x55, 0x33, 0x3b, 0x55, 0x2f, 0xb2, 0x87, 0x91, 0xff, 0xf9, 0x1f, 0xc6, 0x7b, 0x71, 0x89, 0x21, + 0xe7, 0x4d, 0xb3, 0xb4, 0x0d, 0x77, 0x74, 0xf0, 0x8a, 0x3e, 0x38, 0x3f, 0xcf, 0x39, 0xa7, 0xda, + 0x3c, 0x83, 0xd0, 0x6e, 0x80, 0x90, 0x07, 0x7d, 0xd9, 0x07, 0xe7, 0x5f, 0xe3, 0x9c, 0x88, 0x63, + 0x45, 0x97, 0x12, 0xc6, 0x4b, 0x30, 0x71, 0x15, 0xbb, 0x3b, 0xb6, 0xc7, 0xf7, 0x8d, 0xfa, 0xa0, + 0xfb, 0x02, 0xa7, 0x1b, 0xe7, 0x40, 0xba, 0x91, 0x44, 0xb8, 0x9e, 0x82, 0xcc, 0xae, 0xa6, 0xe3, + 0x3e, 0x28, 0x5e, 0xe5, 0x14, 0xc3, 0x44, 0x9f, 0x40, 0xe7, 0x61, 0xa4, 0x6e, 0xf3, 0x59, 0xab, + 0x37, 0xfc, 0x8b, 0x1c, 0x9e, 0x13, 0x18, 0x4e, 0xe1, 0xd8, 0x4e, 0xd3, 0x24, 0x53, 0x5a, 0x6f, + 0x8a, 0xbf, 0x2e, 0x28, 0x04, 0x86, 0x53, 0x0c, 0x60, 0xd6, 0xd7, 0x04, 0x85, 0x17, 0xb1, 0xe7, + 0xd3, 0x90, 0xb3, 0x2d, 0xf3, 0xc0, 0xb6, 0xfa, 0xa9, 0xc4, 0x97, 0x38, 0x03, 0x70, 0x08, 0x21, + 0xb8, 0x00, 0xd9, 0x7e, 0x3b, 0xe2, 0x6f, 0xfe, 0x50, 0x0c, 0x0f, 0xd1, 0x03, 0x4b, 0x30, 0x2e, + 0x02, 0x94, 0x61, 0x5b, 0x7d, 0x50, 0xfc, 0x2d, 0x4e, 0x31, 0x16, 0x81, 0xf1, 0x66, 0xf8, 0xd8, + 0xf3, 0xeb, 0xb8, 0x1f, 0x92, 0xaf, 0x8a, 0x66, 0x70, 0x08, 0x37, 0xe5, 0x0e, 0xb6, 0xf4, 0xbd, + 0xfe, 0x18, 0xbe, 0x26, 0x4c, 0x29, 0x30, 0x84, 0x62, 0x01, 0x46, 0x1b, 0x9a, 0xeb, 0xed, 0x69, + 0x66, 0x5f, 0xdd, 0xf1, 0xb7, 0x39, 0xc7, 0x48, 0x00, 0xe2, 0x16, 0x69, 0x5a, 0x83, 0xd0, 0x7c, + 0x5d, 0x58, 0x24, 0x02, 0xe3, 0x43, 0xcf, 0xf3, 0xe9, 0x26, 0xdb, 0x20, 0x6c, 0xbf, 0x20, 0x86, + 0x1e, 0xc3, 0xae, 0x46, 0x19, 0x2f, 0x40, 0xd6, 0x33, 0xae, 0xf7, 0x45, 0xf3, 0x8b, 0xa2, 0xa7, + 0x29, 0x80, 0x80, 0x5f, 0x80, 0x13, 0x1d, 0xa7, 0x89, 0x3e, 0xc8, 0xfe, 0x0e, 0x27, 0x9b, 0xee, + 0x30, 0x55, 0xf0, 0x90, 0x30, 0x28, 0xe5, 0xdf, 0x15, 0x21, 0x01, 0xb7, 0x70, 0x6d, 0x90, 0x75, + 0x84, 0xa7, 0xed, 0x0e, 0x66, 0xb5, 0x5f, 0x12, 0x56, 0x63, 0xd8, 0x98, 0xd5, 0xb6, 0x60, 0x9a, + 0x33, 0x0e, 0xd6, 0xaf, 0x7f, 0x4f, 0x04, 0x56, 0x86, 0xde, 0x8e, 0xf7, 0xee, 0x87, 0xa1, 0x10, + 0x98, 0x53, 0x24, 0xac, 0x5e, 0xb5, 0xa1, 0x39, 0x7d, 0x30, 0xff, 0x32, 0x67, 0x16, 0x11, 0x3f, + 0xc8, 0x78, 0xbd, 0x55, 0xcd, 0x21, 0xe4, 0xcf, 0x43, 0x5e, 0x90, 0x37, 0x2d, 0x17, 0xeb, 0x76, + 0xdd, 0x32, 0xae, 0xe3, 0x5a, 0x1f, 0xd4, 0x7f, 0xbf, 0xa5, 0xab, 0xb6, 0x23, 0x70, 0xc2, 0xbc, + 0x0c, 0x72, 0x90, 0xab, 0x54, 0x8d, 0x86, 0x63, 0xbb, 0x7e, 0x0f, 0xc6, 0x5f, 0x11, 0x3d, 0x15, + 0xe0, 0x96, 0x29, 0xac, 0x54, 0x01, 0x76, 0xf2, 0xdc, 0xaf, 0x4b, 0xfe, 0x2a, 0x27, 0x1a, 0x0d, + 0x51, 0x3c, 0x70, 0xe8, 0x76, 0xc3, 0xd1, 0xdc, 0x7e, 0xe2, 0xdf, 0x3f, 0x10, 0x81, 0x83, 0x43, + 0x78, 0xe0, 0xf0, 0x0f, 0x1c, 0x4c, 0x66, 0xfb, 0x3e, 0x18, 0x7e, 0x4d, 0x04, 0x0e, 0x81, 0xe1, + 0x14, 0x22, 0x61, 0xe8, 0x83, 0xe2, 0x1f, 0x0a, 0x0a, 0x81, 0x21, 0x14, 0xcf, 0x85, 0x13, 0xad, + 0x8b, 0xeb, 0x86, 0xe7, 0xbb, 0x2c, 0x4d, 0x3e, 0x9c, 0xea, 0x1f, 0xfd, 0x30, 0x9e, 0x84, 0xa9, + 0x11, 0x28, 0x89, 0x44, 0x7c, 0xdb, 0x95, 0xae, 0xa2, 0x7a, 0x57, 0xec, 0xd7, 0x45, 0x24, 0x8a, + 0xc0, 0x48, 0xdd, 0x22, 0x19, 0x22, 0x31, 0xbb, 0x4e, 0xd6, 0x0e, 0x7d, 0xd0, 0xfd, 0xe3, 0x96, + 0xca, 0x6d, 0x0a, 0x2c, 0xe1, 0x8c, 0xe4, 0x3f, 0x4d, 0xeb, 0x0a, 0x3e, 0xe8, 0xcb, 0x3b, 0x7f, + 0xa3, 0x25, 0xff, 0xd9, 0x66, 0x48, 0x16, 0x43, 0xc6, 0x5b, 0xf2, 0x29, 0xd4, 0xeb, 0x9e, 0x51, + 0xfe, 0xcf, 0xbd, 0xc9, 0xdb, 0x1b, 0x4f, 0xa7, 0x4a, 0x2b, 0xc4, 0xc9, 0xe3, 0x49, 0x4f, 0x6f, + 0xb2, 0x8f, 0xbd, 0x19, 0xf8, 0x79, 0x2c, 0xe7, 0x29, 0x5d, 0x84, 0xd1, 0x58, 0xc2, 0xd3, 0x9b, + 0xea, 0xe3, 0x9c, 0x6a, 0x24, 0x9a, 0xef, 0x94, 0x1e, 0x87, 0x14, 0x49, 0x5e, 0x7a, 0xc3, 0x3f, + 0xc1, 0xe1, 0x54, 0xbd, 0xf4, 0x7e, 0xc8, 0x88, 0xa4, 0xa5, 0x37, 0xf4, 0xa7, 0x39, 0x34, 0x80, + 0x10, 0xb8, 0x48, 0x58, 0x7a, 0xc3, 0x7f, 0x46, 0xc0, 0x05, 0x84, 0xc0, 0xfb, 0x37, 0xe1, 0x37, + 0xfe, 0x7c, 0x8a, 0x4f, 0x3a, 0xc2, 0x76, 0x17, 0x60, 0x98, 0x67, 0x2a, 0xbd, 0xd1, 0x9f, 0xe4, + 0x85, 0x0b, 0x44, 0xe9, 0x09, 0x48, 0xf7, 0x69, 0xf0, 0x4f, 0x71, 0x28, 0xd3, 0x2f, 0x2d, 0x40, + 0x2e, 0x92, 0x9d, 0xf4, 0x86, 0xff, 0x45, 0x0e, 0x8f, 0xa2, 0x48, 0xd5, 0x79, 0x76, 0xd2, 0x9b, + 0xe0, 0xd3, 0xa2, 0xea, 0x1c, 0x41, 0xcc, 0x26, 0x12, 0x93, 0xde, 0xe8, 0xcf, 0x08, 0xab, 0x0b, + 0x48, 0xe9, 0x69, 0xc8, 0x06, 0x93, 0x4d, 0x6f, 0xfc, 0x67, 0x39, 0x3e, 0xc4, 0x10, 0x0b, 0x44, + 0x26, 0xbb, 0xde, 0x14, 0x7f, 0x49, 0x58, 0x20, 0x82, 0x22, 0xc3, 0xa8, 0x35, 0x81, 0xe9, 0xcd, + 0xf4, 0x97, 0xc5, 0x30, 0x6a, 0xc9, 0x5f, 0x48, 0x6f, 0xd2, 0x98, 0xdf, 0x9b, 0xe2, 0xe7, 0x44, + 0x6f, 0x52, 0x7d, 0x52, 0x8d, 0xd6, 0x8c, 0xa0, 0x37, 0xc7, 0x5f, 0x15, 0xd5, 0x68, 0x49, 0x08, + 0x4a, 0x1b, 0x80, 0xda, 0xb3, 0x81, 0xde, 0x7c, 0x9f, 0xe3, 0x7c, 0x13, 0x6d, 0xc9, 0x40, 0xe9, + 0x83, 0x30, 0xdd, 0x39, 0x13, 0xe8, 0xcd, 0xfa, 0xf3, 0x6f, 0xb6, 0xac, 0xdd, 0xa2, 0x89, 0x40, + 0x69, 0x2b, 0x9c, 0x52, 0xa2, 0x59, 0x40, 0x6f, 0xda, 0xcf, 0xbf, 0x19, 0x0f, 0xdc, 0xd1, 0x24, + 0xa0, 0x34, 0x0f, 0x10, 0x4e, 0xc0, 0xbd, 0xb9, 0xbe, 0xc0, 0xb9, 0x22, 0x20, 0x32, 0x34, 0xf8, + 0xfc, 0xdb, 0x1b, 0xff, 0xaa, 0x18, 0x1a, 0x1c, 0x41, 0x86, 0x86, 0x98, 0x7a, 0x7b, 0xa3, 0xbf, + 0x28, 0x86, 0x86, 0x80, 0x10, 0xcf, 0x8e, 0xcc, 0x6e, 0xbd, 0x19, 0xbe, 0x24, 0x3c, 0x3b, 0x82, + 0x2a, 0xad, 0xc1, 0x44, 0xdb, 0x84, 0xd8, 0x9b, 0xea, 0xcb, 0x9c, 0x4a, 0x6e, 0x9d, 0x0f, 0xa3, + 0x93, 0x17, 0x9f, 0x0c, 0x7b, 0xb3, 0x7d, 0xa5, 0x65, 0xf2, 0xe2, 0x73, 0x61, 0xe9, 0x02, 0x64, + 0xac, 0xa6, 0x69, 0x92, 0xc1, 0x83, 0x0e, 0xbf, 0x1b, 0x98, 0xff, 0x83, 0xb7, 0xb8, 0x75, 0x04, + 0xa0, 0xf4, 0x38, 0xa4, 0x71, 0x63, 0x07, 0xd7, 0x7a, 0x21, 0x7f, 0xf0, 0x96, 0x08, 0x98, 0x44, + 0xbb, 0xf4, 0x34, 0x00, 0xdb, 0x1a, 0xa1, 0xc7, 0x83, 0x3d, 0xb0, 0xff, 0xfd, 0x2d, 0x7e, 0x19, + 0x27, 0x84, 0x84, 0x04, 0xec, 0x6a, 0xcf, 0xe1, 0x04, 0x3f, 0x8c, 0x13, 0xd0, 0x1e, 0x79, 0x0a, + 0x86, 0x5f, 0xf4, 0x6c, 0xcb, 0xd7, 0xea, 0xbd, 0xd0, 0xff, 0x83, 0xa3, 0x85, 0x3e, 0x31, 0x58, + 0xc3, 0x76, 0xb1, 0xaf, 0xd5, 0xbd, 0x5e, 0xd8, 0xff, 0xc9, 0xb1, 0x01, 0x80, 0x80, 0x75, 0xcd, + 0xf3, 0xfb, 0x69, 0xf7, 0x1f, 0x0a, 0xb0, 0x00, 0x90, 0x4a, 0x93, 0xdf, 0x57, 0xf0, 0x41, 0x2f, + 0xec, 0x1f, 0x89, 0x4a, 0x73, 0xfd, 0xd2, 0xfb, 0x21, 0x4b, 0x7e, 0xb2, 0x1b, 0x76, 0x3d, 0xc0, + 0xff, 0x8b, 0x83, 0x43, 0x04, 0x29, 0xd9, 0xf3, 0x6b, 0xbe, 0xd1, 0xdb, 0xd8, 0x37, 0x79, 0x4f, + 0x0b, 0xfd, 0xd2, 0x3c, 0xe4, 0x3c, 0xbf, 0x56, 0x6b, 0xf2, 0xfc, 0xb4, 0x07, 0xfc, 0x7f, 0xbf, + 0x15, 0x6c, 0x59, 0x04, 0x18, 0xd2, 0xdb, 0xd7, 0xae, 0xf8, 0x8e, 0x4d, 0x8f, 0x40, 0x7a, 0x31, + 0xbc, 0xc9, 0x19, 0x22, 0x90, 0xd2, 0x02, 0x8c, 0x90, 0xb6, 0xb8, 0xd8, 0xc1, 0xf4, 0xbc, 0xaa, + 0x07, 0xc5, 0xff, 0xe1, 0x06, 0x88, 0x81, 0xca, 0x1f, 0xf9, 0xd6, 0x1b, 0x33, 0xd2, 0xb7, 0xdf, + 0x98, 0x91, 0x7e, 0xff, 0x8d, 0x19, 0xe9, 0x33, 0xdf, 0x9d, 0x39, 0xf6, 0xed, 0xef, 0xce, 0x1c, + 0xfb, 0xbd, 0xef, 0xce, 0x1c, 0xeb, 0xbc, 0x6d, 0x0c, 0x4b, 0xf6, 0x92, 0xcd, 0x36, 0x8c, 0x3f, + 0xa4, 0xc4, 0xb6, 0x8b, 0xeb, 0x76, 0xb8, 0x5b, 0x1b, 0x2c, 0x72, 0xe0, 0xe3, 0x49, 0x98, 0xd1, + 0x6d, 0xaf, 0x61, 0x7b, 0x67, 0x77, 0x34, 0x0f, 0x9f, 0xbd, 0xfa, 0xc8, 0x0e, 0xf6, 0xb5, 0x47, + 0xce, 0xea, 0xb6, 0x61, 0xf1, 0x6d, 0xdf, 0x49, 0xf6, 0xbe, 0x48, 0xde, 0x17, 0xf9, 0xfb, 0x42, + 0xc7, 0x1d, 0x62, 0x65, 0x09, 0x52, 0x0b, 0xb6, 0x61, 0xa1, 0x29, 0x48, 0xd7, 0xb0, 0x65, 0x37, + 0xf8, 0x05, 0x30, 0xf6, 0x80, 0xee, 0x86, 0x21, 0xad, 0x61, 0x37, 0x2d, 0x9f, 0x6d, 0x97, 0x97, + 0x73, 0xdf, 0xba, 0x31, 0x7b, 0xec, 0x3f, 0xde, 0x98, 0x4d, 0x2e, 0x5b, 0xbe, 0xca, 0x5f, 0x95, + 0x52, 0xdf, 0x7f, 0x6d, 0x56, 0x52, 0x2e, 0xc1, 0xf0, 0x22, 0xd6, 0x8f, 0xc2, 0xb5, 0x88, 0xf5, + 0x16, 0xae, 0xfb, 0x21, 0xb3, 0x6c, 0xf9, 0xec, 0x8a, 0xde, 0x29, 0x48, 0x1a, 0x16, 0xbb, 0xf5, + 0xd1, 0x52, 0x3e, 0x91, 0x13, 0xd5, 0x45, 0xac, 0x07, 0xaa, 0x35, 0xac, 0xb7, 0xaa, 0x12, 0x7a, + 0x22, 0x2f, 0x2f, 0xfe, 0xde, 0x7f, 0x99, 0x39, 0xf6, 0xf2, 0x1b, 0x33, 0xc7, 0xba, 0xf5, 0x4f, + 0xcc, 0xfc, 0xdc, 0xc4, 0xec, 0x9f, 0x87, 0xbc, 0xda, 0x95, 0xb3, 0x64, 0x68, 0x79, 0x3b, 0x43, + 0xec, 0x56, 0x33, 0x7c, 0x26, 0x01, 0xb3, 0xad, 0x5b, 0xea, 0xc4, 0x8f, 0x3d, 0x5f, 0x6b, 0x38, + 0xdd, 0x3e, 0x9c, 0xba, 0x00, 0xd9, 0x2d, 0xa1, 0x83, 0xf2, 0x30, 0xec, 0x61, 0xdd, 0xb6, 0x6a, + 0x1e, 0xad, 0x72, 0x52, 0x15, 0x8f, 0xc4, 0x80, 0x96, 0x66, 0xd9, 0x1e, 0xbf, 0xae, 0xc9, 0x1e, + 0xca, 0x7f, 0x45, 0x1a, 0xcc, 0xb1, 0xc6, 0x82, 0xa2, 0xa8, 0x79, 0x36, 0xa4, 0x0f, 0x3d, 0x70, + 0xd8, 0x69, 0x04, 0x6d, 0x5e, 0xd8, 0x84, 0xc8, 0xd1, 0xc3, 0x4c, 0xeb, 0xd1, 0xc3, 0x07, 0xb1, + 0x69, 0x3e, 0x6b, 0xd9, 0xd7, 0xac, 0xad, 0x98, 0x49, 0x7e, 0x47, 0x82, 0x39, 0x7a, 0x61, 0xdd, + 0x6d, 0x18, 0x96, 0x7f, 0xd6, 0x34, 0x76, 0xbc, 0xb3, 0x3b, 0x86, 0xef, 0x31, 0xcb, 0x71, 0x9b, + 0x4c, 0x85, 0x1a, 0x45, 0xa2, 0x51, 0x24, 0x1a, 0xca, 0x63, 0x90, 0x29, 0x1b, 0xfe, 0xbc, 0xeb, + 0x6a, 0x07, 0x08, 0x41, 0x8a, 0xc8, 0xb8, 0x51, 0xe8, 0x6f, 0x62, 0x11, 0x6c, 0xe2, 0x86, 0x47, + 0x0f, 0xbd, 0x52, 0x2a, 0x7b, 0x28, 0x6f, 0x77, 0xed, 0xc9, 0x0b, 0x91, 0x96, 0x46, 0xaa, 0x14, + 0xf9, 0xc9, 0x46, 0x42, 0xa7, 0xea, 0x06, 0xed, 0xf9, 0x7a, 0x0a, 0x4e, 0x45, 0x14, 0x74, 0xf7, + 0xc0, 0xf1, 0xe9, 0x90, 0xb4, 0x77, 0x79, 0x63, 0x26, 0x22, 0x8d, 0x61, 0xaf, 0xbb, 0x0c, 0xb3, + 0x5d, 0x48, 0x6f, 0x10, 0x1c, 0x69, 0x88, 0x6f, 0xfb, 0x9a, 0xc9, 0x5b, 0xc7, 0x1e, 0x88, 0x94, + 0x5d, 0xda, 0x4f, 0x30, 0xa9, 0x21, 0xee, 0xeb, 0x9b, 0x58, 0xdb, 0x65, 0x77, 0x1f, 0x93, 0xf4, + 0xec, 0x33, 0x43, 0x04, 0xf4, 0x9a, 0xe3, 0x14, 0xa4, 0xb5, 0x26, 0x3b, 0xb6, 0x4b, 0x9e, 0x1e, + 0x51, 0xd9, 0x83, 0xf2, 0x2c, 0x0c, 0xf3, 0xa3, 0x02, 0x24, 0x43, 0xf2, 0x0a, 0x3e, 0xa0, 0xe5, + 0x8c, 0xa8, 0xe4, 0x27, 0x2a, 0x42, 0x9a, 0x56, 0x9e, 0x5f, 0xea, 0xce, 0x17, 0xdb, 0x6a, 0x5f, + 0xa4, 0x95, 0x54, 0x99, 0x9a, 0x72, 0x09, 0x32, 0x8b, 0x76, 0xc3, 0xb0, 0xec, 0x38, 0x5b, 0x96, + 0xb1, 0xd1, 0x3a, 0x3b, 0x4d, 0x3e, 0x9c, 0x55, 0xf6, 0x80, 0xa6, 0x61, 0x88, 0xdd, 0x85, 0xe5, + 0x47, 0x8f, 0xfc, 0x49, 0x59, 0x80, 0x61, 0xca, 0xbd, 0xee, 0x90, 0xfe, 0x0d, 0x2e, 0x22, 0x65, + 0xf9, 0x97, 0x11, 0x9c, 0x3e, 0x11, 0x56, 0x16, 0x41, 0xaa, 0xa6, 0xf9, 0x1a, 0x6f, 0x37, 0xfd, + 0xad, 0x7c, 0x00, 0x32, 0x9c, 0xc4, 0x43, 0xe7, 0x20, 0x69, 0x3b, 0x1e, 0x3f, 0x3c, 0x2c, 0x74, + 0x6b, 0xca, 0xba, 0x53, 0x4e, 0x91, 0x40, 0xa0, 0x12, 0xe5, 0xb2, 0xda, 0xd5, 0x5f, 0x9e, 0x1c, + 0xdc, 0x5f, 0x58, 0x31, 0x81, 0xb3, 0x7c, 0x29, 0x01, 0x33, 0x91, 0xb7, 0x57, 0xb1, 0x4b, 0xf2, + 0xe5, 0x98, 0xeb, 0xa3, 0x48, 0x25, 0xf9, 0xfb, 0x2e, 0xee, 0xf2, 0x7e, 0x48, 0xce, 0x3b, 0x0e, + 0x2a, 0x40, 0x86, 0x1d, 0x12, 0xda, 0xcc, 0x5f, 0x52, 0x6a, 0xf0, 0x4c, 0xde, 0x79, 0xf6, 0xae, + 0x7f, 0x4d, 0x73, 0x83, 0xcf, 0x45, 0xc4, 0xb3, 0xf2, 0x14, 0x64, 0x17, 0x6c, 0xcb, 0xc3, 0x96, + 0xd7, 0xa4, 0x43, 0x67, 0xc7, 0xb4, 0xf5, 0x2b, 0x9c, 0x81, 0x3d, 0x10, 0x83, 0x6b, 0x8e, 0x43, + 0x91, 0x29, 0x95, 0xfc, 0x64, 0xa1, 0xb7, 0xbc, 0xd9, 0xd5, 0x44, 0x4f, 0x0d, 0x6e, 0x22, 0xde, + 0xc8, 0xc0, 0x46, 0xbf, 0x71, 0x02, 0xee, 0x8c, 0x42, 0x59, 0xc4, 0x89, 0x58, 0x48, 0x8e, 0x58, + 0x88, 0xca, 0x3b, 0xdb, 0xa7, 0xd0, 0x2b, 0xf2, 0x16, 0x7a, 0xc6, 0xa1, 0xc2, 0xe1, 0x23, 0xbb, + 0xd0, 0xa3, 0x2f, 0x95, 0xa7, 0x60, 0x74, 0x43, 0x73, 0xfd, 0x4d, 0xec, 0x3f, 0x83, 0xb5, 0x1a, + 0x76, 0xe3, 0x03, 0x7b, 0x54, 0x0c, 0x6c, 0x04, 0x29, 0x3a, 0x7a, 0x99, 0x63, 0xd3, 0xdf, 0xca, + 0x1e, 0xa4, 0xe8, 0x45, 0x83, 0x60, 0xd0, 0x73, 0x04, 0x1b, 0xf4, 0xa4, 0xbb, 0x0e, 0x7c, 0xec, + 0x71, 0x08, 0x7b, 0x40, 0x8f, 0x89, 0xa1, 0x9b, 0x3c, 0x7c, 0xe8, 0x72, 0x6f, 0xe7, 0x03, 0xd8, + 0x84, 0xe1, 0x32, 0xe9, 0xed, 0xe5, 0xc5, 0xa0, 0x22, 0x52, 0x58, 0x11, 0xb4, 0x0a, 0xe3, 0x8e, + 0xe6, 0xfa, 0xf4, 0x86, 0xe5, 0x1e, 0x6d, 0x05, 0x8f, 0x0c, 0xb3, 0xc5, 0xd6, 0x7e, 0x28, 0xc6, + 0x1a, 0xcb, 0x4b, 0x19, 0x75, 0xa2, 0x42, 0xe5, 0xbf, 0xa6, 0x60, 0x88, 0x1b, 0xe3, 0xfd, 0x30, + 0xcc, 0x8d, 0x46, 0x0b, 0xcc, 0x9d, 0x3b, 0x55, 0x6c, 0xf7, 0xfd, 0x62, 0xe0, 0xa3, 0x9c, 0x4f, + 0x60, 0xd0, 0xbd, 0x90, 0xd1, 0xf7, 0x34, 0xc3, 0xaa, 0x1a, 0x35, 0x91, 0x2c, 0xbc, 0x71, 0x63, + 0x76, 0x78, 0x81, 0xc8, 0x96, 0x17, 0xd5, 0x61, 0xfa, 0x72, 0xb9, 0x46, 0x82, 0xcd, 0x1e, 0x36, + 0xea, 0x7b, 0x2c, 0xd8, 0x24, 0x55, 0xfe, 0x84, 0x9e, 0x84, 0x14, 0x71, 0x08, 0x7e, 0xff, 0xbe, + 0xd0, 0x96, 0xc4, 0x05, 0x13, 0x63, 0x39, 0x43, 0x0a, 0xfe, 0xcc, 0x77, 0x66, 0x25, 0x95, 0x22, + 0xd0, 0x02, 0x8c, 0x9a, 0x9a, 0xe7, 0x57, 0xe9, 0x20, 0x21, 0xc5, 0xa7, 0x29, 0xc5, 0x89, 0x76, + 0x83, 0x70, 0xc3, 0xf2, 0xaa, 0xe7, 0x08, 0x8a, 0x89, 0x6a, 0xe8, 0x34, 0xc8, 0x94, 0x44, 0xb7, + 0x1b, 0x0d, 0xc3, 0x67, 0xe1, 0x7b, 0x88, 0xda, 0x7d, 0x8c, 0xc8, 0x17, 0xa8, 0x98, 0x06, 0xf1, + 0x93, 0x90, 0xa5, 0x37, 0x7e, 0xa9, 0x0a, 0xbb, 0xdd, 0x92, 0x21, 0x02, 0xfa, 0xf2, 0x3e, 0x18, + 0xbf, 0xaa, 0x99, 0x46, 0x4d, 0xf3, 0x6d, 0xd7, 0x63, 0x2a, 0x19, 0xc6, 0x12, 0x8a, 0xa9, 0xe2, + 0xc3, 0x30, 0x65, 0xe1, 0x7d, 0x7a, 0xdf, 0x26, 0xa6, 0x9d, 0xa5, 0xda, 0x88, 0xbc, 0xbb, 0x1c, + 0x47, 0xbc, 0x0f, 0xc6, 0x74, 0x61, 0x7c, 0xa6, 0x0b, 0x54, 0x77, 0x34, 0x90, 0x52, 0xb5, 0x13, + 0x90, 0xd1, 0x1c, 0x87, 0x29, 0xe4, 0xa8, 0xc2, 0xb0, 0xe6, 0x38, 0xf4, 0xd5, 0x19, 0x98, 0xa0, + 0x6d, 0x74, 0xb1, 0xd7, 0x34, 0x7d, 0x4e, 0x32, 0x42, 0x75, 0xc6, 0xc9, 0x0b, 0x95, 0xc9, 0xa9, + 0xee, 0xdd, 0x30, 0x8a, 0xaf, 0x1a, 0x35, 0x6c, 0xe9, 0x98, 0xe9, 0x8d, 0x52, 0xbd, 0x11, 0x21, + 0xa4, 0x4a, 0xf7, 0x83, 0xec, 0xb8, 0xb6, 0x63, 0x7b, 0xd8, 0xad, 0x6a, 0xb5, 0x9a, 0x8b, 0x3d, + 0x2f, 0x3f, 0xc6, 0xf8, 0x84, 0x7c, 0x9e, 0x89, 0x95, 0x07, 0x21, 0xb5, 0xa8, 0xf9, 0x1a, 0x89, + 0x61, 0xfe, 0x3e, 0x9b, 0x02, 0x46, 0x54, 0xf2, 0xb3, 0xe3, 0x70, 0xfb, 0x7e, 0x02, 0x52, 0x97, + 0x6d, 0x1f, 0xa3, 0x47, 0x23, 0xf3, 0xce, 0x58, 0x27, 0x1f, 0xdf, 0x34, 0xea, 0x16, 0xae, 0xad, + 0x7a, 0xf5, 0xc8, 0x27, 0x7b, 0xa1, 0x8b, 0x25, 0x62, 0x2e, 0x36, 0x05, 0x69, 0xd7, 0x6e, 0x5a, + 0x35, 0x71, 0x59, 0x84, 0x3e, 0xa0, 0x0a, 0x64, 0x02, 0xcf, 0x49, 0xf5, 0xf2, 0x9c, 0x71, 0xe2, + 0x39, 0xc4, 0xaf, 0xb9, 0x40, 0x1d, 0xde, 0xe1, 0x0e, 0x54, 0x86, 0x6c, 0x10, 0xd0, 0xb8, 0x07, + 0xf6, 0xe7, 0xc4, 0x21, 0x0c, 0x3d, 0x00, 0x13, 0x81, 0x3f, 0x04, 0x06, 0x65, 0x5e, 0x28, 0x07, + 0x2f, 0xb8, 0x45, 0x63, 0xae, 0xc6, 0x3f, 0x1f, 0x1c, 0xa6, 0xed, 0x0a, 0x5d, 0x8d, 0x7d, 0x42, + 0x78, 0x27, 0x64, 0x3d, 0xa3, 0x6e, 0x69, 0x7e, 0xd3, 0xc5, 0xdc, 0x1b, 0x43, 0x81, 0xf2, 0xd9, + 0x04, 0x0c, 0x31, 0xef, 0x8e, 0xd8, 0x4d, 0xea, 0x6c, 0xb7, 0x44, 0x37, 0xbb, 0x25, 0x8f, 0x6e, + 0xb7, 0x79, 0x80, 0xa0, 0x32, 0x1e, 0xff, 0xaa, 0xeb, 0x64, 0x3b, 0x11, 0xab, 0xe2, 0xa6, 0x51, + 0xe7, 0x83, 0x37, 0x02, 0x0a, 0x3c, 0x28, 0x1d, 0x89, 0x93, 0x17, 0x20, 0xbb, 0x63, 0xf8, 0x55, + 0x8d, 0x64, 0xa7, 0xd4, 0x84, 0xb9, 0x73, 0x33, 0xc5, 0x4e, 0x69, 0x6c, 0x51, 0xe4, 0xb0, 0x6a, + 0x66, 0x87, 0xff, 0x52, 0xfe, 0xb3, 0x44, 0x26, 0x63, 0x5e, 0x20, 0x9a, 0x87, 0x51, 0xd1, 0xd0, + 0xea, 0xae, 0xa9, 0xd5, 0xb9, 0x33, 0x9e, 0xea, 0xda, 0xda, 0x8b, 0xa6, 0x56, 0x57, 0x73, 0xbc, + 0x81, 0xe4, 0xa1, 0x73, 0xc7, 0x26, 0xba, 0x74, 0x6c, 0xcc, 0x93, 0x92, 0x47, 0xf3, 0xa4, 0x58, + 0x9f, 0xa7, 0x5a, 0xfb, 0xfc, 0x57, 0x12, 0x34, 0x29, 0x73, 0x6c, 0x4f, 0x33, 0xdf, 0x89, 0x21, + 0x76, 0x12, 0xb2, 0x8e, 0x6d, 0x56, 0xd9, 0x1b, 0x76, 0x2b, 0x2b, 0xe3, 0xd8, 0xa6, 0xda, 0xe6, + 0x47, 0xe9, 0x5b, 0x34, 0xfe, 0x86, 0x6e, 0x81, 0xd5, 0x86, 0x5b, 0xad, 0xe6, 0xc2, 0x08, 0x33, + 0x05, 0x9f, 0x30, 0x1f, 0x26, 0x36, 0xa0, 0x33, 0xb0, 0xd4, 0x3e, 0xc1, 0xb3, 0x6a, 0x33, 0x4d, + 0x95, 0xeb, 0x11, 0x04, 0x9b, 0x5f, 0x3a, 0x65, 0xf3, 0x51, 0x3f, 0x57, 0xb9, 0x9e, 0xf2, 0x9b, + 0x12, 0x64, 0x69, 0x53, 0x57, 0xb1, 0xaf, 0xc5, 0x4c, 0x25, 0x1d, 0xdd, 0x54, 0xa7, 0x00, 0x18, + 0x8d, 0x67, 0x5c, 0xc7, 0xbc, 0x03, 0xb3, 0x54, 0xb2, 0x69, 0x5c, 0xc7, 0xe8, 0x7c, 0xd0, 0xae, + 0xe4, 0xe1, 0xed, 0xe2, 0x43, 0x51, 0xb4, 0xee, 0x0e, 0x18, 0xa6, 0x7f, 0xbd, 0x60, 0x9f, 0x5d, + 0x4b, 0x4c, 0xd2, 0x4f, 0x16, 0xb7, 0xf6, 0x3d, 0xe5, 0x45, 0x18, 0xde, 0xda, 0x67, 0x4b, 0xa9, + 0x93, 0x90, 0x75, 0x6d, 0x9b, 0xcf, 0xaf, 0x2c, 0xaf, 0xc9, 0x10, 0x01, 0x9d, 0x4e, 0xc4, 0xf2, + 0x21, 0x11, 0x2e, 0x1f, 0xc2, 0xf5, 0x4f, 0xb2, 0xaf, 0xf5, 0xcf, 0x99, 0x7f, 0x2f, 0x41, 0x2e, + 0x32, 0x0c, 0xd1, 0x23, 0x70, 0xbc, 0xbc, 0xb2, 0xbe, 0xf0, 0x6c, 0x75, 0x79, 0xb1, 0x7a, 0x71, + 0x65, 0x7e, 0x29, 0xbc, 0xde, 0x5b, 0x98, 0x7e, 0xe5, 0xd5, 0x39, 0x14, 0xd1, 0xdd, 0xb6, 0xae, + 0x90, 0xf5, 0x31, 0x3a, 0x0b, 0x53, 0x71, 0xc8, 0x7c, 0x79, 0xb3, 0xb2, 0xb6, 0x25, 0x4b, 0x85, + 0xe3, 0xaf, 0xbc, 0x3a, 0x37, 0x11, 0x41, 0xcc, 0xef, 0x78, 0xd8, 0xf2, 0xdb, 0x01, 0x0b, 0xeb, + 0xab, 0xab, 0xcb, 0x5b, 0x72, 0xa2, 0x0d, 0xc0, 0x03, 0xed, 0xfd, 0x30, 0x11, 0x07, 0xac, 0x2d, + 0xaf, 0xc8, 0xc9, 0x02, 0x7a, 0xe5, 0xd5, 0xb9, 0xb1, 0x88, 0xf6, 0x9a, 0x61, 0x16, 0x32, 0x3f, + 0xfb, 0x95, 0x99, 0x63, 0x5f, 0xfb, 0x1b, 0x33, 0x12, 0x69, 0xd9, 0x68, 0x6c, 0x28, 0xa2, 0x07, + 0xe1, 0x8e, 0xcd, 0xe5, 0xa5, 0xb5, 0xca, 0x62, 0x75, 0x75, 0x73, 0xa9, 0xca, 0x3e, 0x6b, 0x0e, + 0x5a, 0x37, 0xfe, 0xca, 0xab, 0x73, 0x39, 0xde, 0xa4, 0x6e, 0xda, 0x1b, 0x6a, 0xe5, 0xf2, 0xfa, + 0x56, 0x45, 0x96, 0x98, 0xf6, 0x86, 0x8b, 0xaf, 0xda, 0x3e, 0xfb, 0xf3, 0x26, 0x0f, 0xc3, 0x89, + 0x0e, 0xda, 0x41, 0xc3, 0x26, 0x5e, 0x79, 0x75, 0x6e, 0x74, 0xc3, 0xc5, 0xcc, 0x4d, 0x29, 0xa2, + 0x08, 0xf9, 0x76, 0xc4, 0xfa, 0xc6, 0xfa, 0xe6, 0xfc, 0x8a, 0x3c, 0x57, 0x90, 0x5f, 0x79, 0x75, + 0x6e, 0x44, 0xc4, 0x1c, 0xa2, 0x1f, 0xb6, 0xac, 0xfc, 0x5c, 0xd7, 0xf5, 0xcb, 0x13, 0x83, 0xaf, + 0x5f, 0xe2, 0x3b, 0x3e, 0x7f, 0x21, 0x01, 0x33, 0x6d, 0x97, 0x28, 0xf9, 0xd6, 0x63, 0xb7, 0x0d, + 0x9f, 0x12, 0x64, 0x16, 0xc5, 0x8e, 0xe6, 0xa0, 0xfb, 0x3d, 0x3f, 0x37, 0xe0, 0x7e, 0xcf, 0xa8, + 0x28, 0x49, 0x6c, 0xf7, 0x9c, 0xe9, 0xbd, 0xdd, 0x23, 0xea, 0x7f, 0x84, 0xdd, 0x9e, 0x4f, 0x3c, + 0x02, 0xf7, 0xf0, 0x4d, 0x32, 0xcf, 0xd7, 0xae, 0x18, 0x56, 0x3d, 0xd8, 0x8a, 0xe4, 0xcf, 0xdc, + 0x28, 0xd3, 0x7c, 0x37, 0x52, 0x48, 0x0f, 0xdd, 0x90, 0x2c, 0x1c, 0xba, 0x40, 0xec, 0xbd, 0xf0, + 0xeb, 0xd1, 0x43, 0x85, 0x1e, 0x5b, 0xa7, 0xca, 0x27, 0x25, 0x18, 0x7b, 0xc6, 0xf0, 0x7c, 0xdb, + 0x35, 0x74, 0xcd, 0xa4, 0xb7, 0x95, 0xcf, 0xf7, 0x1b, 0x9b, 0x5b, 0x62, 0xd8, 0xd3, 0x30, 0x74, + 0x55, 0x33, 0x3d, 0xec, 0xf3, 0xcb, 0xfa, 0x77, 0x15, 0x3b, 0x1b, 0xa2, 0x18, 0x24, 0xe7, 0x82, + 0x80, 0xc1, 0x94, 0x5f, 0x4a, 0xc0, 0x38, 0x1d, 0xe5, 0x1e, 0xfb, 0xb3, 0x1b, 0x64, 0x21, 0x58, + 0x86, 0x94, 0xab, 0xf9, 0x7c, 0xf3, 0xa4, 0x5c, 0xe4, 0x9b, 0x9c, 0xf7, 0xf6, 0xde, 0xb8, 0x2c, + 0x2e, 0x62, 0x5d, 0xa5, 0x58, 0xf4, 0x53, 0x90, 0x69, 0x68, 0xfb, 0x55, 0xca, 0xc3, 0x96, 0x57, + 0xf3, 0x83, 0xf1, 0xdc, 0xbc, 0x31, 0x3b, 0x7e, 0xa0, 0x35, 0xcc, 0x92, 0x22, 0x78, 0x14, 0x75, + 0xb8, 0xa1, 0xed, 0x93, 0x2a, 0x22, 0x07, 0xc6, 0x89, 0x54, 0xdf, 0xd3, 0xac, 0x3a, 0x66, 0x85, + 0xd0, 0xad, 0xa0, 0xf2, 0x33, 0x03, 0x17, 0x32, 0x1d, 0x16, 0x12, 0xa1, 0x53, 0xd4, 0xd1, 0x86, + 0xb6, 0xbf, 0x40, 0x05, 0xa4, 0xc4, 0x52, 0xe6, 0x73, 0xaf, 0xcd, 0x1e, 0xa3, 0x1b, 0xc7, 0xaf, + 0x4b, 0x00, 0xa1, 0xc5, 0xd0, 0x4f, 0x81, 0xac, 0x07, 0x4f, 0x14, 0xeb, 0xf1, 0x3e, 0xbc, 0xaf, + 0x5b, 0x5f, 0xb4, 0xd8, 0x9b, 0xcd, 0xed, 0xdf, 0xbe, 0x31, 0x2b, 0xa9, 0xe3, 0x7a, 0x4b, 0x57, + 0x7c, 0x18, 0x72, 0x4d, 0xa7, 0xa6, 0xf9, 0xb8, 0x4a, 0x17, 0x9b, 0x89, 0x9e, 0x79, 0xc2, 0x0c, + 0xe1, 0xba, 0x79, 0x63, 0x16, 0xb1, 0x66, 0x45, 0xc0, 0x0a, 0xcd, 0x1e, 0x80, 0x49, 0x08, 0x20, + 0xd2, 0xa6, 0x7f, 0x29, 0x41, 0x6e, 0x31, 0x72, 0x6b, 0x20, 0x0f, 0xc3, 0x0d, 0xdb, 0x32, 0xae, + 0x70, 0x7f, 0xcc, 0xaa, 0xe2, 0x11, 0x15, 0x20, 0xc3, 0x3e, 0xe0, 0xf0, 0x0f, 0xc4, 0x96, 0x90, + 0x78, 0x26, 0xa8, 0x6b, 0x78, 0xc7, 0x33, 0x44, 0x6f, 0xa8, 0xe2, 0x11, 0x5d, 0x04, 0xd9, 0xc3, + 0x7a, 0xd3, 0x35, 0xfc, 0x83, 0xaa, 0x6e, 0x5b, 0xbe, 0xa6, 0xfb, 0xec, 0x53, 0x80, 0xf2, 0xc9, + 0x9b, 0x37, 0x66, 0xef, 0x60, 0x75, 0x6d, 0xd5, 0x50, 0xd4, 0x71, 0x21, 0x5a, 0x60, 0x12, 0x52, + 0x42, 0x0d, 0xfb, 0x9a, 0x61, 0x7a, 0x34, 0xf5, 0xca, 0xaa, 0xe2, 0x31, 0xd2, 0x96, 0x7f, 0x32, + 0x0c, 0xd9, 0xc0, 0xdb, 0xd1, 0x35, 0x90, 0x6d, 0x07, 0xbb, 0xb1, 0x44, 0x96, 0xce, 0xe3, 0xe5, + 0x95, 0xb0, 0xe4, 0x56, 0x0d, 0xe5, 0xff, 0xdf, 0x98, 0x7d, 0xa8, 0x0f, 0x0f, 0xba, 0xac, 0x99, + 0x3c, 0x09, 0x56, 0xc7, 0x05, 0x87, 0xc8, 0x8a, 0x2f, 0x12, 0xbf, 0x10, 0xcb, 0x5f, 0xa7, 0xb9, + 0x23, 0xb6, 0x1e, 0x63, 0x4d, 0x6e, 0xd5, 0x50, 0x88, 0x07, 0x70, 0xd1, 0x06, 0x95, 0x90, 0xcc, + 0xf5, 0x45, 0xcd, 0x30, 0xc5, 0x57, 0x6d, 0x2a, 0x7f, 0x42, 0xcb, 0x30, 0xe4, 0xf9, 0x9a, 0xdf, + 0x64, 0xc9, 0x4b, 0xba, 0xfc, 0x48, 0x9f, 0x75, 0x2e, 0xdb, 0x56, 0x6d, 0x93, 0x02, 0x55, 0x4e, + 0x80, 0x2e, 0xc2, 0x90, 0x6f, 0x5f, 0xc1, 0x16, 0x37, 0xea, 0x40, 0x23, 0x9e, 0x1e, 0xd2, 0x30, + 0x34, 0xf2, 0x41, 0xae, 0x61, 0x13, 0xd7, 0xa9, 0x29, 0xbd, 0x3d, 0x8d, 0x2c, 0x90, 0xe8, 0x5f, + 0xa0, 0x29, 0x2f, 0x0f, 0x3c, 0x2c, 0xb9, 0x81, 0x5a, 0xf9, 0x14, 0x75, 0x3c, 0x10, 0x6d, 0x52, + 0x09, 0x7a, 0x36, 0x76, 0xe1, 0x85, 0xff, 0x99, 0xa6, 0xbb, 0xbb, 0x8d, 0xbd, 0x88, 0x97, 0x8b, + 0x6d, 0x95, 0xe8, 0x75, 0x99, 0x8b, 0x20, 0x37, 0xad, 0x1d, 0xdb, 0xa2, 0x5f, 0xa2, 0xf0, 0x15, + 0x03, 0x59, 0x82, 0x26, 0xa3, 0xbd, 0xd6, 0xaa, 0xa1, 0xa8, 0xe3, 0x81, 0xe8, 0x19, 0xb6, 0xae, + 0xa8, 0xc1, 0x58, 0xa8, 0x45, 0x87, 0x6e, 0xb6, 0xe7, 0xd0, 0xbd, 0x8b, 0x0f, 0xdd, 0xe3, 0xad, + 0xa5, 0x84, 0xa3, 0x77, 0x34, 0x10, 0x12, 0x18, 0x7a, 0x06, 0x20, 0x0c, 0x18, 0x74, 0x7b, 0x25, + 0x77, 0x4e, 0xe9, 0x1d, 0x75, 0xc4, 0x92, 0x34, 0xc4, 0xa2, 0x8f, 0xc2, 0x64, 0xc3, 0xb0, 0xaa, + 0x1e, 0x36, 0x77, 0xab, 0xdc, 0xc0, 0x84, 0x92, 0xfe, 0x21, 0x81, 0xf2, 0xca, 0x60, 0xfe, 0x70, + 0xf3, 0xc6, 0x6c, 0x81, 0x07, 0xd5, 0x76, 0x4a, 0x45, 0x9d, 0x68, 0x18, 0xd6, 0x26, 0x36, 0x77, + 0x17, 0x03, 0x59, 0x69, 0xe4, 0x67, 0x5f, 0x9b, 0x3d, 0x16, 0x0c, 0x60, 0x03, 0x46, 0xc2, 0x81, + 0x85, 0x3d, 0xb4, 0x0e, 0x59, 0x4d, 0x3c, 0xb0, 0x8d, 0x98, 0xbe, 0x9d, 0x3d, 0x32, 0x40, 0x43, + 0x0e, 0x16, 0x2b, 0x5e, 0xfe, 0x4f, 0x73, 0x92, 0xf2, 0x4a, 0x02, 0x86, 0x16, 0x2f, 0x6f, 0x68, + 0x86, 0x8b, 0xae, 0xc3, 0x44, 0xe8, 0x6c, 0xf1, 0x48, 0xb1, 0x7a, 0xf3, 0xc6, 0x6c, 0xbe, 0xd5, + 0x1f, 0x07, 0x0c, 0x15, 0xf3, 0xba, 0x2e, 0x6a, 0x12, 0x0e, 0x12, 0x11, 0x2b, 0xae, 0x77, 0x5d, + 0x6e, 0x47, 0xcb, 0x6e, 0x53, 0x39, 0x42, 0x98, 0x6a, 0x5b, 0xbd, 0x47, 0x02, 0x67, 0x05, 0x86, + 0x99, 0x2d, 0x3c, 0x54, 0x82, 0xb4, 0x43, 0x7e, 0xf0, 0xa3, 0x8f, 0x99, 0xae, 0xa3, 0x89, 0xea, + 0x07, 0x1b, 0xc2, 0x04, 0xa2, 0x7c, 0x39, 0x09, 0xb0, 0x78, 0xf9, 0xf2, 0x96, 0x6b, 0x38, 0x26, + 0xf6, 0x7f, 0xa4, 0x76, 0xfd, 0x84, 0x04, 0xc7, 0x43, 0xab, 0x79, 0xae, 0xde, 0x62, 0xdc, 0xe7, + 0x6e, 0xde, 0x98, 0xbd, 0xb3, 0xd5, 0xb8, 0x11, 0xb5, 0x23, 0x18, 0x78, 0x32, 0x20, 0xda, 0x74, + 0xf5, 0xce, 0xf5, 0xa8, 0x79, 0x7e, 0x50, 0x8f, 0x64, 0xf7, 0x7a, 0x44, 0xd4, 0xde, 0x56, 0x3d, + 0x16, 0x3d, 0xbf, 0xbd, 0xaf, 0x37, 0x21, 0x17, 0xf6, 0x91, 0x87, 0x16, 0x21, 0xe3, 0xf3, 0xdf, + 0xbc, 0xcb, 0x95, 0xee, 0x5d, 0x2e, 0x60, 0xbc, 0xdb, 0x03, 0xa4, 0xf2, 0xef, 0x12, 0x00, 0xe1, + 0xa8, 0xfe, 0xd3, 0x3a, 0xa2, 0xc8, 0x74, 0xca, 0x27, 0xbf, 0xe4, 0x91, 0x12, 0x68, 0x8e, 0x8e, + 0xf4, 0xd6, 0x1f, 0x24, 0x60, 0x72, 0x5b, 0x44, 0xfe, 0xf7, 0x2c, 0x8c, 0x36, 0x60, 0x18, 0x5b, + 0xbe, 0x6b, 0x50, 0x13, 0x13, 0x6f, 0x7d, 0xb8, 0x9b, 0xb7, 0x76, 0xb0, 0x1a, 0xfd, 0x63, 0x19, + 0xe2, 0x34, 0x88, 0xd3, 0x44, 0x6c, 0xfd, 0xe9, 0x24, 0xe4, 0xbb, 0xa1, 0xd0, 0x02, 0x8c, 0xeb, + 0x2e, 0xa6, 0x82, 0x6a, 0x74, 0xeb, 0xb9, 0x5c, 0x08, 0x57, 0x12, 0x2d, 0x0a, 0x8a, 0x3a, 0x26, + 0x24, 0x3c, 0x37, 0xa8, 0x03, 0x49, 0xf3, 0xc9, 0x90, 0x21, 0x5a, 0x7d, 0xe6, 0xf5, 0x0a, 0x4f, + 0x0e, 0x44, 0x21, 0x71, 0x02, 0x96, 0x1d, 0x8c, 0x85, 0x52, 0x9a, 0x1e, 0xbc, 0x04, 0xe3, 0x86, + 0x65, 0xf8, 0x86, 0x66, 0x56, 0x77, 0x34, 0x53, 0xb3, 0xf4, 0xa3, 0xac, 0x92, 0xd8, 0x84, 0xce, + 0x8b, 0x6d, 0xa1, 0x53, 0xd4, 0x31, 0x2e, 0x29, 0x33, 0x01, 0x7a, 0x06, 0x86, 0x45, 0x51, 0xa9, + 0x23, 0xe5, 0x92, 0x02, 0x1e, 0xe9, 0x91, 0x4f, 0x25, 0x61, 0x42, 0xc5, 0xb5, 0xf7, 0xba, 0x62, + 0xb0, 0xae, 0x58, 0x05, 0x60, 0x81, 0x84, 0xcc, 0x24, 0x47, 0xe8, 0x0d, 0x12, 0x8a, 0xb2, 0x8c, + 0x61, 0xd1, 0xf3, 0x23, 0xfd, 0xf1, 0x87, 0x49, 0x18, 0x89, 0xf6, 0xc7, 0x7b, 0x53, 0xfc, 0x8f, + 0xcf, 0x14, 0x8f, 0x96, 0xc3, 0xd0, 0x98, 0xe2, 0x7f, 0xf3, 0xb0, 0x4b, 0x68, 0x6c, 0x1b, 0x52, + 0xdd, 0x63, 0xe2, 0xff, 0x4d, 0xc0, 0xd0, 0x86, 0xe6, 0x6a, 0x0d, 0x0f, 0xe9, 0x6d, 0x0b, 0x1b, + 0xb1, 0xb1, 0xdf, 0xf6, 0x57, 0x6d, 0xf9, 0xa6, 0x58, 0x8f, 0x75, 0xcd, 0xe7, 0x3a, 0xac, 0x6b, + 0x7e, 0x12, 0xc6, 0x1a, 0xda, 0x7e, 0xe4, 0xac, 0x99, 0x76, 0xe6, 0x68, 0xf9, 0x44, 0xc8, 0x12, + 0x7f, 0xcf, 0xb6, 0x6b, 0xc2, 0x03, 0x68, 0xf4, 0x04, 0xe4, 0x88, 0x46, 0x38, 0x4b, 0x10, 0xf8, + 0x74, 0xb8, 0x2f, 0x12, 0x79, 0xa9, 0xa8, 0xd0, 0xd0, 0xf6, 0x2b, 0xec, 0x01, 0xad, 0x00, 0xda, + 0x0b, 0xb6, 0xe6, 0xaa, 0xa1, 0x29, 0x09, 0xfe, 0xd4, 0xcd, 0x1b, 0xb3, 0x27, 0x18, 0xbe, 0x5d, + 0x47, 0x51, 0x27, 0x42, 0xa1, 0x60, 0x7b, 0x0c, 0x80, 0xb4, 0xab, 0xca, 0xae, 0x2a, 0xb2, 0xd5, + 0xf5, 0xf1, 0x9b, 0x37, 0x66, 0x27, 0x18, 0x4b, 0xf8, 0x4e, 0x51, 0xb3, 0xe4, 0x61, 0x91, 0xfc, + 0x8e, 0x18, 0xfe, 0x2b, 0x12, 0xa0, 0x70, 0x0e, 0x52, 0xb1, 0xe7, 0xd8, 0x96, 0x47, 0xd7, 0x7d, + 0x91, 0x45, 0x9a, 0x74, 0xf8, 0xba, 0x2f, 0xc4, 0x8b, 0x75, 0x5f, 0x64, 0xe8, 0x3e, 0x15, 0xc6, + 0xeb, 0x04, 0xef, 0xc7, 0x0e, 0xf7, 0x3a, 0x8b, 0x0b, 0xb6, 0x21, 0xd0, 0x1d, 0x02, 0xf4, 0xbf, + 0x92, 0xe0, 0x44, 0x9b, 0x37, 0x05, 0x95, 0xfd, 0x33, 0x80, 0xdc, 0xc8, 0x4b, 0xfe, 0xc7, 0xab, + 0x58, 0xa5, 0x07, 0x76, 0xce, 0x09, 0xb7, 0x6d, 0x22, 0xb8, 0x75, 0x53, 0x0e, 0xbb, 0x18, 0xfa, + 0x4f, 0x25, 0x98, 0x8a, 0x16, 0x1f, 0x34, 0x64, 0x0d, 0x46, 0xa2, 0xa5, 0xf3, 0x26, 0xdc, 0xd3, + 0x4f, 0x13, 0x78, 0xed, 0x63, 0x78, 0xf4, 0x5c, 0x38, 0x54, 0xd9, 0xe6, 0xed, 0x23, 0x7d, 0x5b, + 0x43, 0xd4, 0xa9, 0x75, 0xc8, 0xb2, 0x16, 0xfc, 0xb1, 0x04, 0xa9, 0x0d, 0xdb, 0x36, 0x91, 0x0d, + 0x13, 0x96, 0xed, 0x57, 0x89, 0x67, 0xe1, 0x5a, 0x95, 0xef, 0xf1, 0xb0, 0x5d, 0xdd, 0x85, 0xc1, + 0x8c, 0xf4, 0x83, 0x1b, 0xb3, 0xed, 0x54, 0xea, 0xb8, 0x65, 0xfb, 0x65, 0x2a, 0xd9, 0x62, 0x3b, + 0x40, 0x1f, 0x85, 0xd1, 0x78, 0x61, 0x6c, 0xc7, 0xeb, 0x83, 0x03, 0x17, 0x16, 0xa7, 0xb9, 0x79, + 0x63, 0x76, 0x2a, 0x1c, 0x31, 0x81, 0x58, 0x51, 0x47, 0x76, 0x22, 0xa5, 0x97, 0x32, 0xa4, 0xf5, + 0x7f, 0xf4, 0xda, 0xac, 0x54, 0xbe, 0xd8, 0xf5, 0x84, 0xe6, 0xc1, 0x43, 0xab, 0xb0, 0x1f, 0x1c, + 0x33, 0xc4, 0x8f, 0x65, 0x3e, 0x37, 0x09, 0xb3, 0x5d, 0xce, 0x21, 0xfc, 0xfd, 0x23, 0x1d, 0x41, + 0xf4, 0x38, 0x23, 0x28, 0xf4, 0x75, 0xec, 0xa1, 0xbc, 0x95, 0x02, 0xb4, 0xea, 0xd5, 0x17, 0x48, + 0x56, 0x83, 0xc3, 0x4d, 0xcf, 0x96, 0x2d, 0x31, 0xe9, 0x6d, 0x6d, 0x89, 0xad, 0xc6, 0x36, 0x99, + 0x12, 0x83, 0x6d, 0x6d, 0xf7, 0xbd, 0xd3, 0x94, 0x7c, 0x47, 0x76, 0x9a, 0x3a, 0xa7, 0x2a, 0xa9, + 0x1f, 0xe1, 0x8a, 0x29, 0xfd, 0xce, 0xac, 0x98, 0xa6, 0x61, 0x88, 0xef, 0x41, 0xb3, 0x3f, 0x09, + 0xce, 0x9f, 0xd0, 0xe3, 0xe2, 0x0f, 0x24, 0x0f, 0xf7, 0x17, 0xfd, 0x99, 0x36, 0x8f, 0x33, 0xdf, + 0x48, 0x82, 0xbc, 0xea, 0xd5, 0x2b, 0x35, 0xc3, 0xbf, 0x4d, 0xbe, 0xe7, 0x74, 0x5f, 0x64, 0x2e, + 0xdc, 0xbc, 0x31, 0x3b, 0xc6, 0x4c, 0x76, 0x2b, 0x0d, 0xd5, 0x80, 0xf1, 0x96, 0xe3, 0x1c, 0xee, + 0x9a, 0x8b, 0x47, 0x39, 0x55, 0x6a, 0xa1, 0x52, 0xe8, 0xba, 0x20, 0x32, 0x40, 0xd0, 0x7e, 0xe7, + 0xd1, 0xc0, 0x26, 0xb2, 0x67, 0x6e, 0xe7, 0x9e, 0x2b, 0xeb, 0xc2, 0x6f, 0x26, 0x20, 0xb7, 0xea, + 0x89, 0x75, 0x2e, 0xfe, 0x53, 0xbb, 0xa3, 0xf0, 0x44, 0xf0, 0xe1, 0x48, 0xb2, 0xbf, 0x81, 0x10, + 0xff, 0x98, 0xe4, 0x3b, 0x49, 0x1a, 0x87, 0xcb, 0xb8, 0x6e, 0x58, 0xc1, 0x64, 0x8d, 0xdf, 0x5b, + 0x18, 0xfd, 0x18, 0x2d, 0x8c, 0xc2, 0x1e, 0x4e, 0x1d, 0xa5, 0x87, 0x7f, 0x3b, 0x01, 0xa3, 0xab, + 0x5e, 0x7d, 0xdb, 0xaa, 0xbd, 0x37, 0x54, 0xde, 0xce, 0x50, 0xb9, 0xe5, 0xa9, 0xd9, 0x37, 0x13, + 0x70, 0x26, 0x9a, 0x4b, 0xbd, 0xd4, 0xc4, 0xee, 0x41, 0x90, 0x2e, 0x39, 0x5a, 0xdd, 0xb0, 0xa2, + 0xb7, 0x67, 0x4e, 0x44, 0x2b, 0x4b, 0x75, 0x45, 0x95, 0x15, 0x0b, 0x72, 0x1b, 0x5a, 0x1d, 0xab, + 0xf8, 0xa5, 0x26, 0xf6, 0xfc, 0x0e, 0xdf, 0xb6, 0x4c, 0xc3, 0x90, 0xbd, 0xbb, 0xcb, 0x2e, 0x5b, + 0x48, 0xa7, 0x53, 0x2a, 0x7f, 0x42, 0x53, 0x90, 0x36, 0x8d, 0x86, 0xc1, 0x0c, 0x92, 0x52, 0xd9, + 0x03, 0x9a, 0x85, 0x9c, 0x4e, 0xda, 0x5d, 0x65, 0x57, 0xf6, 0x53, 0xe2, 0x6f, 0x77, 0x34, 0x2d, + 0x7f, 0x8b, 0x48, 0x94, 0xa7, 0x61, 0x84, 0x95, 0xc7, 0xd7, 0x17, 0x27, 0x20, 0x43, 0xaf, 0x58, + 0x87, 0xa5, 0x0e, 0x93, 0xe7, 0x67, 0xd9, 0x77, 0x30, 0x8c, 0x85, 0x15, 0xcc, 0x1e, 0xca, 0xe5, + 0xae, 0xa6, 0x3c, 0xdd, 0xbb, 0x93, 0x99, 0xa1, 0x02, 0x33, 0xfe, 0xe6, 0xa3, 0xa0, 0x74, 0x49, + 0x39, 0x99, 0x95, 0x0e, 0x4f, 0x72, 0x07, 0xe8, 0x82, 0x2e, 0x09, 0x71, 0x7f, 0x09, 0xef, 0x3e, + 0x4c, 0x3f, 0x47, 0xd8, 0xc3, 0xa5, 0xbe, 0xe8, 0xae, 0xe9, 0xe0, 0x3c, 0x5c, 0xe2, 0xff, 0x23, + 0x93, 0x38, 0xdc, 0x86, 0xb0, 0x06, 0x3c, 0x7d, 0xbd, 0xb7, 0xd8, 0xd5, 0x0b, 0x8a, 0x11, 0x17, + 0x50, 0x23, 0x48, 0xe5, 0x17, 0x24, 0xb8, 0xa3, 0xad, 0x68, 0xde, 0x73, 0x4b, 0x00, 0x91, 0xbd, + 0x0a, 0x69, 0xb0, 0x9b, 0x38, 0x11, 0x28, 0x21, 0x6a, 0xab, 0xec, 0x7d, 0x3d, 0x2b, 0xcb, 0x6a, + 0x11, 0xab, 0xed, 0x4b, 0x70, 0x3c, 0x5e, 0x59, 0x61, 0xa6, 0xe7, 0x61, 0x2c, 0x1e, 0x16, 0x78, + 0xc8, 0x3a, 0xc2, 0x89, 0xea, 0x68, 0x2c, 0x34, 0x28, 0xd5, 0xd6, 0xae, 0x09, 0xcc, 0x53, 0x81, + 0x6c, 0xa0, 0xca, 0x13, 0xc2, 0xbe, 0xad, 0x13, 0x22, 0x95, 0x6f, 0x4a, 0x30, 0x17, 0x2f, 0x21, + 0x4c, 0x67, 0xbc, 0xdb, 0xde, 0xbe, 0x5b, 0xe6, 0x48, 0xdf, 0x97, 0xe0, 0xae, 0x43, 0x9a, 0xc1, + 0x6d, 0x76, 0x1d, 0xa6, 0x22, 0x7b, 0x26, 0x2e, 0x17, 0x0b, 0xe7, 0x3a, 0xd3, 0x7b, 0xb3, 0x27, + 0xd8, 0x22, 0x38, 0x49, 0xec, 0xf8, 0xf5, 0xef, 0xcc, 0x4e, 0xb6, 0xbf, 0xf3, 0xd4, 0xc9, 0xf6, + 0x7d, 0x8e, 0x5b, 0xe8, 0x85, 0xbf, 0x23, 0xc1, 0xfd, 0xf1, 0xa6, 0x76, 0x38, 0x59, 0x79, 0x17, + 0x75, 0xdd, 0x7f, 0x90, 0xe0, 0x4c, 0x3f, 0xed, 0xe1, 0x7d, 0xb8, 0x03, 0x93, 0xe1, 0x66, 0x67, + 0x6b, 0x17, 0x3e, 0x30, 0xc0, 0x91, 0x15, 0x1f, 0x0b, 0x28, 0x60, 0xbb, 0x0d, 0x7d, 0xf5, 0xaf, + 0x25, 0x3e, 0x7e, 0xa3, 0x6e, 0x12, 0x74, 0x4c, 0x3c, 0x8d, 0x19, 0xb0, 0x63, 0x22, 0xa9, 0xcc, + 0x68, 0x2c, 0x95, 0xe9, 0xd0, 0xe5, 0x89, 0x5b, 0x14, 0x8d, 0xae, 0xf2, 0x68, 0xdd, 0x61, 0xf7, + 0xf4, 0xc3, 0x30, 0xd9, 0x61, 0x68, 0xf1, 0xc0, 0x34, 0xc0, 0xc8, 0x52, 0x51, 0xfb, 0xe0, 0x51, + 0xfe, 0xad, 0x04, 0xb3, 0xb4, 0xe0, 0x0e, 0xdd, 0xf8, 0x6e, 0xb6, 0x67, 0x83, 0xc7, 0xde, 0x8e, + 0xcd, 0xe2, 0x86, 0x5d, 0x86, 0x21, 0xe6, 0xa1, 0xdc, 0x96, 0x47, 0x70, 0x71, 0x4e, 0x10, 0xc6, + 0xfa, 0x45, 0xd1, 0xbe, 0xce, 0x01, 0xe3, 0x36, 0xd9, 0xf1, 0x56, 0x05, 0x8c, 0xd7, 0x45, 0xac, + 0xef, 0xdc, 0x0c, 0x6e, 0x37, 0xfd, 0x96, 0xc5, 0x7a, 0x66, 0xc4, 0x77, 0x28, 0xa8, 0x07, 0x6d, + 0xea, 0x11, 0xd4, 0x7f, 0xcc, 0xfb, 0x28, 0x08, 0xea, 0x3d, 0xda, 0xf3, 0x6e, 0x0c, 0xea, 0x7f, + 0x9c, 0x80, 0x13, 0xb4, 0x6d, 0xd1, 0x13, 0x84, 0x77, 0xa0, 0x6f, 0xaa, 0x80, 0x3c, 0x57, 0xaf, + 0xde, 0xaa, 0x58, 0x24, 0x7b, 0xae, 0x7e, 0x39, 0x36, 0xa3, 0x57, 0x01, 0xd5, 0x3c, 0xbf, 0xb5, + 0x80, 0xe4, 0x91, 0x0b, 0xa8, 0x79, 0xfe, 0xe5, 0x43, 0x52, 0x86, 0xd4, 0x91, 0xbd, 0xeb, 0xdb, + 0x12, 0x14, 0x3a, 0xf5, 0x00, 0xf7, 0x26, 0x03, 0xa6, 0x63, 0x87, 0x63, 0xad, 0x0e, 0xf5, 0x60, + 0x3f, 0x47, 0x42, 0x2d, 0xc3, 0xff, 0xb8, 0x8b, 0x6f, 0x6b, 0x00, 0xf8, 0x2d, 0x31, 0xc5, 0x05, + 0x03, 0xa6, 0x7d, 0x35, 0xf6, 0xe3, 0x3f, 0xec, 0x7f, 0xb5, 0x6d, 0x86, 0x79, 0x57, 0x2c, 0xec, + 0x7e, 0x57, 0x82, 0x99, 0x2e, 0xd5, 0x7e, 0x37, 0xa7, 0x17, 0x7b, 0x5d, 0x5d, 0xea, 0x56, 0xaf, + 0x22, 0x1f, 0xe3, 0xe3, 0x31, 0xfe, 0x01, 0x4e, 0x64, 0x17, 0xa1, 0xd3, 0x27, 0xc5, 0xca, 0x0b, + 0x70, 0xb2, 0x23, 0x8a, 0xd7, 0xad, 0x04, 0xa9, 0x3d, 0xc3, 0xf3, 0x79, 0xb5, 0xee, 0xed, 0x56, + 0xad, 0x16, 0x34, 0xc5, 0x28, 0x08, 0x64, 0x4a, 0xbd, 0x61, 0xdb, 0x26, 0xaf, 0x86, 0xf2, 0x2c, + 0x4c, 0x44, 0x64, 0xbc, 0x90, 0xf3, 0x90, 0x72, 0x6c, 0xfe, 0x57, 0x3a, 0x72, 0xe7, 0xee, 0xec, + 0x56, 0x08, 0xc1, 0xf0, 0x66, 0x53, 0x7d, 0x65, 0x0a, 0x10, 0x23, 0xa3, 0x37, 0x38, 0x44, 0x11, + 0x9b, 0x30, 0x19, 0x93, 0xf2, 0x42, 0x7e, 0x02, 0x86, 0x1c, 0x2a, 0xe1, 0xc5, 0x74, 0xbd, 0xfa, + 0xcb, 0x70, 0x22, 0x6d, 0x63, 0x98, 0x73, 0xbf, 0x38, 0x06, 0x69, 0xca, 0x8a, 0x6c, 0x80, 0xc8, + 0x75, 0x8c, 0x62, 0x37, 0x96, 0xce, 0x9b, 0x39, 0x85, 0xb3, 0x7d, 0xeb, 0xf3, 0xb4, 0xfb, 0x18, + 0x32, 0xa3, 0x5f, 0x7d, 0x3c, 0xd4, 0x1f, 0x5e, 0x14, 0x57, 0xec, 0x57, 0x3d, 0x28, 0xed, 0x53, + 0x12, 0x4c, 0x75, 0x5a, 0xbf, 0xa3, 0x27, 0xfb, 0xa3, 0x6a, 0xcf, 0x94, 0x0a, 0x4f, 0x1d, 0x01, + 0x19, 0xd4, 0xe7, 0x6b, 0x12, 0x9c, 0x3a, 0x74, 0x51, 0x8a, 0xe6, 0xfb, 0xa3, 0x3f, 0x24, 0x97, + 0x2b, 0x94, 0xdf, 0x0e, 0x45, 0x50, 0x55, 0x3b, 0x76, 0x49, 0xf8, 0x70, 0xd3, 0xb7, 0xad, 0x9d, + 0x7a, 0x78, 0x46, 0x7b, 0x4a, 0xac, 0x1c, 0x43, 0xaf, 0x48, 0x9d, 0x6f, 0xcf, 0x3e, 0x71, 0x28, + 0x55, 0xf7, 0xf5, 0x5b, 0xe1, 0xc9, 0xc1, 0x81, 0x31, 0xc7, 0xe9, 0xb4, 0x18, 0xe8, 0xe1, 0x38, + 0x87, 0x2c, 0x83, 0x7a, 0x38, 0xce, 0x61, 0x2b, 0x0f, 0xee, 0x38, 0x87, 0x26, 0xbe, 0x3d, 0x1c, + 0xa7, 0x9f, 0x45, 0x40, 0x0f, 0xc7, 0xe9, 0x2b, 0xef, 0x56, 0x8e, 0xa1, 0x7d, 0x18, 0x8d, 0x25, + 0x51, 0xe8, 0x91, 0x43, 0x69, 0x3b, 0xa5, 0xbc, 0x85, 0x73, 0x83, 0x40, 0x62, 0x1e, 0xd4, 0x21, + 0x4d, 0xe8, 0xe1, 0x41, 0xdd, 0xd3, 0xa3, 0xc2, 0x93, 0x83, 0x03, 0x83, 0xca, 0xfc, 0x4c, 0x78, + 0x27, 0x2c, 0xa2, 0x81, 0xce, 0x0f, 0x48, 0x29, 0xaa, 0xf2, 0xc4, 0xc0, 0xb8, 0xa0, 0x26, 0x7f, + 0xb6, 0xed, 0x33, 0xd6, 0xc3, 0xcd, 0xdb, 0x71, 0xca, 0x2d, 0x3c, 0x3a, 0x10, 0x26, 0x28, 0xfc, + 0x23, 0xfc, 0x8e, 0xd3, 0xe9, 0x43, 0xe1, 0x91, 0x49, 0xb5, 0x70, 0x7f, 0x1f, 0x9a, 0x01, 0xbd, + 0x1e, 0xdc, 0x78, 0x3c, 0x73, 0x38, 0x2c, 0x3a, 0xa9, 0x16, 0x1e, 0xe8, 0x4b, 0x57, 0x14, 0x72, + 0xcb, 0xcf, 0xc2, 0x3e, 0x9f, 0xe9, 0xfa, 0xb9, 0x74, 0x1d, 0x5b, 0xd8, 0x33, 0xbc, 0x23, 0xdd, + 0x55, 0xea, 0xef, 0x68, 0xe6, 0x77, 0xd3, 0x30, 0xb2, 0xc4, 0x4a, 0xd9, 0xf4, 0x35, 0xff, 0x6d, + 0xa6, 0x12, 0xc8, 0xe3, 0x7f, 0xe0, 0x88, 0x1e, 0x75, 0x55, 0x1d, 0xfb, 0x1a, 0x16, 0xd9, 0xe6, + 0xf2, 0xc0, 0x97, 0x84, 0xf8, 0x77, 0x7b, 0xad, 0x7c, 0x0a, 0xfb, 0x5b, 0x49, 0xf4, 0x34, 0x6e, + 0x83, 0x08, 0xd0, 0xc7, 0x25, 0x38, 0x4e, 0xb5, 0xc2, 0x34, 0x97, 0x6a, 0x8a, 0xef, 0x0c, 0xba, + 0xfa, 0xc2, 0x8a, 0x16, 0x59, 0x40, 0x52, 0xae, 0xf2, 0x3d, 0xfc, 0xda, 0xeb, 0x9d, 0x91, 0xc2, + 0x5b, 0x69, 0x15, 0x75, 0xd2, 0x6c, 0x43, 0x7a, 0x2d, 0xcb, 0x8e, 0xd4, 0xd1, 0x97, 0x1d, 0x97, + 0x20, 0x17, 0x89, 0x68, 0xf4, 0x7f, 0x09, 0x1f, 0xe4, 0xa6, 0x68, 0x14, 0x8c, 0x7e, 0x5a, 0x82, + 0xe3, 0xe1, 0xce, 0x47, 0x94, 0x76, 0x68, 0xf0, 0xbd, 0x8f, 0x16, 0xe3, 0x74, 0xe4, 0x55, 0xd4, + 0xa9, 0x66, 0xa7, 0x09, 0x69, 0x03, 0x46, 0xa3, 0x2b, 0x5c, 0x2f, 0x2f, 0xfe, 0x97, 0xbd, 0xfe, + 0x2f, 0x62, 0xc6, 0x09, 0x50, 0x01, 0x32, 0x78, 0xdf, 0xb1, 0x5d, 0x1f, 0xd7, 0xe8, 0xd7, 0x9e, + 0x19, 0x35, 0x78, 0x56, 0xae, 0x01, 0x6a, 0xef, 0x5c, 0xf4, 0x2c, 0x0c, 0xc7, 0x8f, 0xfc, 0x8f, + 0xb0, 0x04, 0x12, 0x0c, 0x68, 0x0a, 0xd2, 0xa1, 0x7f, 0x27, 0x55, 0xf6, 0x70, 0xab, 0x83, 0xc3, + 0x9f, 0x04, 0x00, 0x00, 0xff, 0xff, 0xdc, 0x87, 0xa5, 0xd3, 0x87, 0x89, 0x00, 0x00, } r := bytes.NewReader(gzipped) gzipr, err := compress_gzip.NewReader(r) @@ -1858,38 +1806,6 @@ func StakingDescription() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descri } return d } -func (this *HistoricalInfo) Equal(that interface{}) bool { - if that == nil { - return this == nil - } - - that1, ok := that.(*HistoricalInfo) - if !ok { - that2, ok := that.(HistoricalInfo) - if ok { - that1 = &that2 - } else { - return false - } - } - if that1 == nil { - return this == nil - } else if this == nil { - return false - } - if !this.Header.Equal(&that1.Header) { - return false - } - if len(this.Valset) != len(that1.Valset) { - return false - } - for i := range this.Valset { - if !this.Valset[i].Equal(&that1.Valset[i]) { - return false - } - } - return true -} func (this *CommissionRates) Equal(that interface{}) bool { if that == nil { return this == nil diff --git a/x/staking/types/validator.go b/x/staking/types/validator.go index b18d3eb2ec..ef7af32a42 100644 --- a/x/staking/types/validator.go +++ b/x/staking/types/validator.go @@ -9,6 +9,7 @@ import ( abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/crypto" + cryptoenc "github.com/tendermint/tendermint/crypto/encoding" tmtypes "github.com/tendermint/tendermint/types" yaml "gopkg.in/yaml.v2" @@ -223,8 +224,13 @@ func (d Description) EnsureLength() (Description, error) { // ABCIValidatorUpdate returns an abci.ValidatorUpdate from a staking validator type // with the full validator power func (v Validator) ABCIValidatorUpdate() abci.ValidatorUpdate { + pk, err := cryptoenc.PubKeyToProto(v.GetConsPubKey()) + if err != nil { + panic(err) + } + return abci.ValidatorUpdate{ - PubKey: tmtypes.TM2PB.PubKey(v.GetConsPubKey()), + PubKey: pk, Power: v.ConsensusPower(), } } @@ -232,8 +238,13 @@ func (v Validator) ABCIValidatorUpdate() abci.ValidatorUpdate { // ABCIValidatorUpdateZero returns an abci.ValidatorUpdate from a staking validator type // with zero power used for validator updates. func (v Validator) ABCIValidatorUpdateZero() abci.ValidatorUpdate { + pk, err := cryptoenc.PubKeyToProto(v.GetConsPubKey()) + if err != nil { + panic(err) + } + return abci.ValidatorUpdate{ - PubKey: tmtypes.TM2PB.PubKey(v.GetConsPubKey()), + PubKey: pk, Power: 0, } } diff --git a/x/staking/types/validator_test.go b/x/staking/types/validator_test.go index e914a87e87..c4714c1f53 100644 --- a/x/staking/types/validator_test.go +++ b/x/staking/types/validator_test.go @@ -9,6 +9,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/tendermint/tendermint/crypto/ed25519" + cryptoenc "github.com/tendermint/tendermint/crypto/encoding" tmtypes "github.com/tendermint/tendermint/types" "github.com/cosmos/cosmos-sdk/codec/legacy" @@ -61,7 +62,9 @@ func TestABCIValidatorUpdate(t *testing.T) { validator := NewValidator(valAddr1, pk1, Description{}) abciVal := validator.ABCIValidatorUpdate() - require.Equal(t, tmtypes.TM2PB.PubKey(validator.GetConsPubKey()), abciVal.PubKey) + pk, err := cryptoenc.PubKeyToProto(validator.GetConsPubKey()) + require.NoError(t, err) + require.Equal(t, pk, abciVal.PubKey) require.Equal(t, validator.BondedTokens().Int64(), abciVal.Power) } @@ -69,7 +72,9 @@ func TestABCIValidatorUpdateZero(t *testing.T) { validator := NewValidator(valAddr1, pk1, Description{}) abciVal := validator.ABCIValidatorUpdateZero() - require.Equal(t, tmtypes.TM2PB.PubKey(validator.GetConsPubKey()), abciVal.PubKey) + pk, err := cryptoenc.PubKeyToProto(validator.GetConsPubKey()) + require.NoError(t, err) + require.Equal(t, pk, abciVal.PubKey) require.Equal(t, int64(0), abciVal.Power) } diff --git a/x/upgrade/abci_test.go b/x/upgrade/abci_test.go index 6a915b310a..de2d629dee 100644 --- a/x/upgrade/abci_test.go +++ b/x/upgrade/abci_test.go @@ -8,15 +8,15 @@ import ( "testing" "time" - storetypes "github.com/cosmos/cosmos-sdk/store/types" - "github.com/stretchr/testify/require" abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/libs/log" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" dbm "github.com/tendermint/tm-db" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/simapp" + storetypes "github.com/cosmos/cosmos-sdk/store/types" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/types/module" @@ -52,7 +52,7 @@ func setupTest(height int64, skip map[int64]bool) TestSuite { ) s.keeper = app.UpgradeKeeper - s.ctx = app.BaseApp.NewContext(false, abci.Header{Height: height, Time: time.Now()}) + s.ctx = app.BaseApp.NewContext(false, tmproto.Header{Height: height, Time: time.Now()}) s.module = upgrade.NewAppModule(s.keeper) s.querier = s.module.LegacyQuerierHandler(codec.NewAminoCodec(app.LegacyAmino())) diff --git a/x/upgrade/keeper/grpc_query_test.go b/x/upgrade/keeper/grpc_query_test.go index 1ffb0038f6..d307157402 100644 --- a/x/upgrade/keeper/grpc_query_test.go +++ b/x/upgrade/keeper/grpc_query_test.go @@ -6,8 +6,7 @@ import ( "testing" "github.com/stretchr/testify/suite" - - abci "github.com/tendermint/tendermint/abci/types" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/simapp" @@ -25,7 +24,7 @@ type UpgradeTestSuite struct { func (suite *UpgradeTestSuite) SetupTest() { suite.app = simapp.Setup(false) - suite.ctx = suite.app.BaseApp.NewContext(false, abci.Header{}) + suite.ctx = suite.app.BaseApp.NewContext(false, tmproto.Header{}) queryHelper := baseapp.NewQueryServerTestHelper(suite.ctx, suite.app.InterfaceRegistry()) types.RegisterQueryServer(queryHelper, suite.app.UpgradeKeeper) diff --git a/x/upgrade/types/plan_test.go b/x/upgrade/types/plan_test.go index 57e025a039..47ed2ca7ec 100644 --- a/x/upgrade/types/plan_test.go +++ b/x/upgrade/types/plan_test.go @@ -6,9 +6,8 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - - abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/libs/log" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" sdk "github.com/cosmos/cosmos-sdk/types" ) @@ -179,7 +178,7 @@ func TestShouldExecute(t *testing.T) { for name, tc := range cases { tc := tc // copy to local variable for scopelint t.Run(name, func(t *testing.T) { - ctx := sdk.NewContext(nil, abci.Header{Height: tc.ctxHeight, Time: tc.ctxTime}, false, log.NewNopLogger()) + ctx := sdk.NewContext(nil, tmproto.Header{Height: tc.ctxHeight, Time: tc.ctxTime}, false, log.NewNopLogger()) should := tc.p.ShouldExecute(ctx) assert.Equal(t, tc.expected, should) }) diff --git a/x/upgrade/types/storeloader_test.go b/x/upgrade/types/storeloader_test.go index a77b7593e2..7fd147013e 100644 --- a/x/upgrade/types/storeloader_test.go +++ b/x/upgrade/types/storeloader_test.go @@ -10,6 +10,7 @@ import ( "github.com/stretchr/testify/require" abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/libs/log" + tmproto "github.com/tendermint/tendermint/proto/tendermint/types" dbm "github.com/tendermint/tm-db" "github.com/cosmos/cosmos-sdk/baseapp" @@ -128,7 +129,7 @@ func TestSetLoader(t *testing.T) { require.Nil(t, err) // "execute" one block - app.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: 2}}) + app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: 2}}) res := app.Commit() require.NotNil(t, res.Data)