diff --git a/abci/types/types.pb.go b/abci/types/types.pb.go
index 9ce88f045..358fd8e34 100644
--- a/abci/types/types.pb.go
+++ b/abci/types/types.pb.go
@@ -2617,11 +2617,7 @@ func (m *ResponseApplySnapshotChunk) GetRejectSenders() []string {
}
type ResponsePrepareProposal struct {
- TxRecords []*TxRecord `protobuf:"bytes,1,rep,name=tx_records,json=txRecords,proto3" json:"tx_records,omitempty"`
- AppHash []byte `protobuf:"bytes,2,opt,name=app_hash,json=appHash,proto3" json:"app_hash,omitempty"`
- TxResults []*ExecTxResult `protobuf:"bytes,3,rep,name=tx_results,json=txResults,proto3" json:"tx_results,omitempty"`
- ValidatorUpdates []*ValidatorUpdate `protobuf:"bytes,4,rep,name=validator_updates,json=validatorUpdates,proto3" json:"validator_updates,omitempty"`
- ConsensusParamUpdates *types1.ConsensusParams `protobuf:"bytes,5,opt,name=consensus_param_updates,json=consensusParamUpdates,proto3" json:"consensus_param_updates,omitempty"`
+ TxRecords []*TxRecord `protobuf:"bytes,1,rep,name=tx_records,json=txRecords,proto3" json:"tx_records,omitempty"`
}
func (m *ResponsePrepareProposal) Reset() { *m = ResponsePrepareProposal{} }
@@ -2664,40 +2660,8 @@ func (m *ResponsePrepareProposal) GetTxRecords() []*TxRecord {
return nil
}
-func (m *ResponsePrepareProposal) GetAppHash() []byte {
- if m != nil {
- return m.AppHash
- }
- return nil
-}
-
-func (m *ResponsePrepareProposal) GetTxResults() []*ExecTxResult {
- if m != nil {
- return m.TxResults
- }
- return nil
-}
-
-func (m *ResponsePrepareProposal) GetValidatorUpdates() []*ValidatorUpdate {
- if m != nil {
- return m.ValidatorUpdates
- }
- return nil
-}
-
-func (m *ResponsePrepareProposal) GetConsensusParamUpdates() *types1.ConsensusParams {
- if m != nil {
- return m.ConsensusParamUpdates
- }
- return nil
-}
-
type ResponseProcessProposal struct {
- Status ResponseProcessProposal_ProposalStatus `protobuf:"varint,1,opt,name=status,proto3,enum=tendermint.abci.ResponseProcessProposal_ProposalStatus" json:"status,omitempty"`
- AppHash []byte `protobuf:"bytes,2,opt,name=app_hash,json=appHash,proto3" json:"app_hash,omitempty"`
- TxResults []*ExecTxResult `protobuf:"bytes,3,rep,name=tx_results,json=txResults,proto3" json:"tx_results,omitempty"`
- ValidatorUpdates []*ValidatorUpdate `protobuf:"bytes,4,rep,name=validator_updates,json=validatorUpdates,proto3" json:"validator_updates,omitempty"`
- ConsensusParamUpdates *types1.ConsensusParams `protobuf:"bytes,5,opt,name=consensus_param_updates,json=consensusParamUpdates,proto3" json:"consensus_param_updates,omitempty"`
+ Status ResponseProcessProposal_ProposalStatus `protobuf:"varint,1,opt,name=status,proto3,enum=tendermint.abci.ResponseProcessProposal_ProposalStatus" json:"status,omitempty"`
}
func (m *ResponseProcessProposal) Reset() { *m = ResponseProcessProposal{} }
@@ -2740,34 +2704,6 @@ func (m *ResponseProcessProposal) GetStatus() ResponseProcessProposal_ProposalSt
return ResponseProcessProposal_UNKNOWN
}
-func (m *ResponseProcessProposal) GetAppHash() []byte {
- if m != nil {
- return m.AppHash
- }
- return nil
-}
-
-func (m *ResponseProcessProposal) GetTxResults() []*ExecTxResult {
- if m != nil {
- return m.TxResults
- }
- return nil
-}
-
-func (m *ResponseProcessProposal) GetValidatorUpdates() []*ValidatorUpdate {
- if m != nil {
- return m.ValidatorUpdates
- }
- return nil
-}
-
-func (m *ResponseProcessProposal) GetConsensusParamUpdates() *types1.ConsensusParams {
- if m != nil {
- return m.ConsensusParamUpdates
- }
- return nil
-}
-
type ResponseExtendVote struct {
VoteExtension []byte `protobuf:"bytes,1,opt,name=vote_extension,json=voteExtension,proto3" json:"vote_extension,omitempty"`
}
@@ -3828,211 +3764,209 @@ func init() {
func init() { proto.RegisterFile("tendermint/abci/types.proto", fileDescriptor_252557cfdd89a31a) }
var fileDescriptor_252557cfdd89a31a = []byte{
- // 3257 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5a, 0xcd, 0x73, 0x23, 0xd5,
- 0x11, 0xd7, 0xe8, 0x5b, 0x2d, 0x4b, 0x1a, 0x3f, 0x9b, 0x45, 0x2b, 0x76, 0x6d, 0x33, 0x14, 0xb0,
- 0x2c, 0x60, 0x13, 0x6f, 0x16, 0x96, 0x2c, 0x84, 0x92, 0x65, 0x6d, 0x64, 0xaf, 0xd7, 0x36, 0x63,
- 0xd9, 0x14, 0xf9, 0x60, 0x18, 0x4b, 0xcf, 0xd6, 0xb0, 0x92, 0x66, 0x98, 0x19, 0x19, 0x99, 0x63,
- 0x12, 0xaa, 0x52, 0x1c, 0x52, 0xdc, 0xc2, 0x21, 0xdc, 0x92, 0xaa, 0xfc, 0x09, 0xc9, 0x25, 0xa7,
- 0x1c, 0x38, 0xe4, 0xc0, 0x29, 0x95, 0x13, 0x49, 0xc1, 0x8d, 0x7f, 0x20, 0xb7, 0x54, 0xea, 0x7d,
- 0xcc, 0x97, 0x34, 0xa3, 0x0f, 0xa0, 0xa8, 0x4a, 0x15, 0xb7, 0x79, 0x3d, 0xdd, 0xfd, 0xbe, 0xfa,
- 0x75, 0xf7, 0xaf, 0xdf, 0x83, 0xc7, 0x6c, 0xdc, 0x6f, 0x63, 0xb3, 0xa7, 0xf5, 0xed, 0x0d, 0xf5,
- 0xb4, 0xa5, 0x6d, 0xd8, 0x97, 0x06, 0xb6, 0xd6, 0x0d, 0x53, 0xb7, 0x75, 0x54, 0xf2, 0x7e, 0xae,
- 0x93, 0x9f, 0x95, 0xeb, 0x3e, 0xee, 0x96, 0x79, 0x69, 0xd8, 0xfa, 0x86, 0x61, 0xea, 0xfa, 0x19,
- 0xe3, 0xaf, 0x5c, 0x1b, 0xff, 0xfd, 0x10, 0x5f, 0x72, 0x6d, 0x01, 0x61, 0xda, 0xcb, 0x86, 0xa1,
- 0x9a, 0x6a, 0xcf, 0xf9, 0xbd, 0x7a, 0xae, 0xeb, 0xe7, 0x5d, 0xbc, 0x41, 0x5b, 0xa7, 0x83, 0xb3,
- 0x0d, 0x5b, 0xeb, 0x61, 0xcb, 0x56, 0x7b, 0x06, 0x67, 0x58, 0x3e, 0xd7, 0xcf, 0x75, 0xfa, 0xb9,
- 0x41, 0xbe, 0x18, 0x55, 0xfa, 0x4b, 0x0e, 0x32, 0x32, 0x7e, 0x77, 0x80, 0x2d, 0x1b, 0x6d, 0x42,
- 0x12, 0xb7, 0x3a, 0x7a, 0x59, 0x58, 0x13, 0x6e, 0xe4, 0x37, 0xaf, 0xad, 0x8f, 0x0c, 0x7f, 0x9d,
- 0xf3, 0xd5, 0x5b, 0x1d, 0xbd, 0x11, 0x93, 0x29, 0x2f, 0xba, 0x0d, 0xa9, 0xb3, 0xee, 0xc0, 0xea,
- 0x94, 0xe3, 0x54, 0xe8, 0x7a, 0x94, 0xd0, 0x3d, 0xc2, 0xd4, 0x88, 0xc9, 0x8c, 0x9b, 0x74, 0xa5,
- 0xf5, 0xcf, 0xf4, 0x72, 0x62, 0x72, 0x57, 0x3b, 0xfd, 0x33, 0xda, 0x15, 0xe1, 0x45, 0x5b, 0x00,
- 0x5a, 0x5f, 0xb3, 0x95, 0x56, 0x47, 0xd5, 0xfa, 0xe5, 0x24, 0x95, 0x7c, 0x3c, 0x5a, 0x52, 0xb3,
- 0x6b, 0x84, 0xb1, 0x11, 0x93, 0x73, 0x9a, 0xd3, 0x20, 0xc3, 0x7d, 0x77, 0x80, 0xcd, 0xcb, 0x72,
- 0x6a, 0xf2, 0x70, 0x5f, 0x27, 0x4c, 0x64, 0xb8, 0x94, 0x1b, 0xbd, 0x02, 0xd9, 0x56, 0x07, 0xb7,
- 0x1e, 0x2a, 0xf6, 0xb0, 0x9c, 0xa1, 0x92, 0xab, 0x51, 0x92, 0x35, 0xc2, 0xd7, 0x1c, 0x36, 0x62,
- 0x72, 0xa6, 0xc5, 0x3e, 0xd1, 0x1d, 0x48, 0xb7, 0xf4, 0x5e, 0x4f, 0xb3, 0xcb, 0x40, 0x65, 0x57,
- 0x22, 0x65, 0x29, 0x57, 0x23, 0x26, 0x73, 0x7e, 0xb4, 0x0f, 0xc5, 0xae, 0x66, 0xd9, 0x8a, 0xd5,
- 0x57, 0x0d, 0xab, 0xa3, 0xdb, 0x56, 0x39, 0x4f, 0x35, 0x3c, 0x19, 0xa5, 0x61, 0x4f, 0xb3, 0xec,
- 0x23, 0x87, 0xb9, 0x11, 0x93, 0x0b, 0x5d, 0x3f, 0x81, 0xe8, 0xd3, 0xcf, 0xce, 0xb0, 0xe9, 0x2a,
- 0x2c, 0x2f, 0x4c, 0xd6, 0x77, 0x40, 0xb8, 0x1d, 0x79, 0xa2, 0x4f, 0xf7, 0x13, 0xd0, 0xcf, 0x60,
- 0xa9, 0xab, 0xab, 0x6d, 0x57, 0x9d, 0xd2, 0xea, 0x0c, 0xfa, 0x0f, 0xcb, 0x05, 0xaa, 0xf4, 0x99,
- 0xc8, 0x41, 0xea, 0x6a, 0xdb, 0x51, 0x51, 0x23, 0x02, 0x8d, 0x98, 0xbc, 0xd8, 0x1d, 0x25, 0xa2,
- 0xb7, 0x60, 0x59, 0x35, 0x8c, 0xee, 0xe5, 0xa8, 0xf6, 0x22, 0xd5, 0x7e, 0x33, 0x4a, 0x7b, 0x95,
- 0xc8, 0x8c, 0xaa, 0x47, 0xea, 0x18, 0x15, 0x35, 0x41, 0x34, 0x4c, 0x6c, 0xa8, 0x26, 0x56, 0x0c,
- 0x53, 0x37, 0x74, 0x4b, 0xed, 0x96, 0x4b, 0x54, 0xf7, 0xd3, 0x51, 0xba, 0x0f, 0x19, 0xff, 0x21,
- 0x67, 0x6f, 0xc4, 0xe4, 0x92, 0x11, 0x24, 0x31, 0xad, 0x7a, 0x0b, 0x5b, 0x96, 0xa7, 0x55, 0x9c,
- 0xa6, 0x95, 0xf2, 0x07, 0xb5, 0x06, 0x48, 0xa8, 0x0e, 0x79, 0x3c, 0x24, 0xe2, 0xca, 0x85, 0x6e,
- 0xe3, 0xf2, 0x22, 0x55, 0x28, 0x45, 0x9e, 0x50, 0xca, 0x7a, 0xa2, 0xdb, 0xb8, 0x11, 0x93, 0x01,
- 0xbb, 0x2d, 0xa4, 0xc2, 0x23, 0x17, 0xd8, 0xd4, 0xce, 0x2e, 0xa9, 0x1a, 0x85, 0xfe, 0xb1, 0x34,
- 0xbd, 0x5f, 0x46, 0x54, 0xe1, 0xb3, 0x51, 0x0a, 0x4f, 0xa8, 0x10, 0x51, 0x51, 0x77, 0x44, 0x1a,
- 0x31, 0x79, 0xe9, 0x62, 0x9c, 0x4c, 0x4c, 0xec, 0x4c, 0xeb, 0xab, 0x5d, 0xed, 0x7d, 0xac, 0x9c,
- 0x76, 0xf5, 0xd6, 0xc3, 0xf2, 0xd2, 0x64, 0x13, 0xbb, 0xc7, 0xb9, 0xb7, 0x08, 0x33, 0x31, 0xb1,
- 0x33, 0x3f, 0x61, 0x2b, 0x03, 0xa9, 0x0b, 0xb5, 0x3b, 0xc0, 0xbb, 0xc9, 0x6c, 0x5a, 0xcc, 0xec,
- 0x26, 0xb3, 0x59, 0x31, 0xb7, 0x9b, 0xcc, 0xe6, 0x44, 0x90, 0x9e, 0x86, 0xbc, 0xcf, 0x25, 0xa1,
- 0x32, 0x64, 0x7a, 0xd8, 0xb2, 0xd4, 0x73, 0x4c, 0x3d, 0x58, 0x4e, 0x76, 0x9a, 0x52, 0x11, 0x16,
- 0xfc, 0x6e, 0x48, 0xfa, 0x48, 0x70, 0x25, 0x89, 0x87, 0x21, 0x92, 0x17, 0xd8, 0xa4, 0x0b, 0xc1,
- 0x25, 0x79, 0x13, 0x3d, 0x01, 0x05, 0x3a, 0x09, 0xc5, 0xf9, 0x4f, 0xdc, 0x5c, 0x52, 0x5e, 0xa0,
- 0xc4, 0x13, 0xce, 0xb4, 0x0a, 0x79, 0x63, 0xd3, 0x70, 0x59, 0x12, 0x94, 0x05, 0x8c, 0x4d, 0xc3,
- 0x61, 0x78, 0x1c, 0x16, 0xc8, 0x8c, 0x5d, 0x8e, 0x24, 0xed, 0x24, 0x4f, 0x68, 0x9c, 0x45, 0xfa,
- 0x7b, 0x1c, 0xc4, 0x51, 0xd7, 0x85, 0xee, 0x40, 0x92, 0x78, 0x71, 0xee, 0x90, 0x2b, 0xeb, 0xcc,
- 0xc5, 0xaf, 0x3b, 0x2e, 0x7e, 0xbd, 0xe9, 0xb8, 0xf8, 0xad, 0xec, 0xa7, 0x9f, 0xaf, 0xc6, 0x3e,
- 0xfa, 0xd7, 0xaa, 0x20, 0x53, 0x09, 0x74, 0x95, 0x38, 0x2c, 0x55, 0xeb, 0x2b, 0x5a, 0x9b, 0x0e,
- 0x39, 0x47, 0xbc, 0x91, 0xaa, 0xf5, 0x77, 0xda, 0x68, 0x0f, 0xc4, 0x96, 0xde, 0xb7, 0x70, 0xdf,
- 0x1a, 0x58, 0x0a, 0x0b, 0x21, 0xdc, 0x0d, 0x07, 0x9c, 0x29, 0x0b, 0x64, 0x35, 0x87, 0xf3, 0x90,
- 0x32, 0xca, 0xa5, 0x56, 0x90, 0x80, 0xee, 0x01, 0x5c, 0xa8, 0x5d, 0xad, 0xad, 0xda, 0xba, 0x69,
- 0x95, 0x93, 0x6b, 0x89, 0x1b, 0xf9, 0xcd, 0xb5, 0xb1, 0xad, 0x3e, 0x71, 0x58, 0x8e, 0x8d, 0xb6,
- 0x6a, 0xe3, 0xad, 0x24, 0x19, 0xae, 0xec, 0x93, 0x44, 0x4f, 0x41, 0x49, 0x35, 0x0c, 0xc5, 0xb2,
- 0x55, 0x1b, 0x2b, 0xa7, 0x97, 0x36, 0xb6, 0xa8, 0x8b, 0x5e, 0x90, 0x0b, 0xaa, 0x61, 0x1c, 0x11,
- 0xea, 0x16, 0x21, 0xa2, 0x27, 0xa1, 0x48, 0xbc, 0xb9, 0xa6, 0x76, 0x95, 0x0e, 0xd6, 0xce, 0x3b,
- 0x76, 0x39, 0xbd, 0x26, 0xdc, 0x48, 0xc8, 0x05, 0x4e, 0x6d, 0x50, 0xa2, 0xd4, 0x76, 0x77, 0x9c,
- 0x7a, 0x72, 0x84, 0x20, 0xd9, 0x56, 0x6d, 0x95, 0xae, 0xe4, 0x82, 0x4c, 0xbf, 0x09, 0xcd, 0x50,
- 0xed, 0x0e, 0x5f, 0x1f, 0xfa, 0x8d, 0xae, 0x40, 0x9a, 0xab, 0x4d, 0x50, 0xb5, 0xbc, 0x85, 0x96,
- 0x21, 0x65, 0x98, 0xfa, 0x05, 0xa6, 0x5b, 0x97, 0x95, 0x59, 0x43, 0x92, 0xa1, 0x18, 0xf4, 0xfa,
- 0xa8, 0x08, 0x71, 0x7b, 0xc8, 0x7b, 0x89, 0xdb, 0x43, 0xf4, 0x02, 0x24, 0xc9, 0x42, 0xd2, 0x3e,
- 0x8a, 0x21, 0x71, 0x8e, 0xcb, 0x35, 0x2f, 0x0d, 0x2c, 0x53, 0x4e, 0xa9, 0x04, 0x85, 0x40, 0x34,
- 0x90, 0xae, 0xc0, 0x72, 0x98, 0x73, 0x97, 0x3a, 0x2e, 0x3d, 0xe0, 0xa4, 0xd1, 0x6d, 0xc8, 0xba,
- 0xde, 0x9d, 0x19, 0xce, 0xd5, 0xb1, 0x6e, 0x1d, 0x66, 0xd9, 0x65, 0x25, 0x16, 0x43, 0x36, 0xa0,
- 0xa3, 0xf2, 0x58, 0xbe, 0x20, 0x67, 0x54, 0xc3, 0x68, 0xa8, 0x56, 0x47, 0x7a, 0x1b, 0xca, 0x51,
- 0x9e, 0xdb, 0xb7, 0x60, 0x02, 0x35, 0x7b, 0x67, 0xc1, 0xae, 0x40, 0xfa, 0x4c, 0x37, 0x7b, 0xaa,
- 0x4d, 0x95, 0x15, 0x64, 0xde, 0x22, 0x0b, 0xc9, 0xbc, 0x78, 0x82, 0x92, 0x59, 0x43, 0x52, 0xe0,
- 0x6a, 0xa4, 0xf7, 0x26, 0x22, 0x5a, 0xbf, 0x8d, 0xd9, 0xb2, 0x16, 0x64, 0xd6, 0xf0, 0x14, 0xb1,
- 0xc1, 0xb2, 0x06, 0xe9, 0xd6, 0xa2, 0x73, 0xa5, 0xfa, 0x73, 0x32, 0x6f, 0x49, 0x1f, 0x27, 0xe0,
- 0x4a, 0xb8, 0x0f, 0x47, 0x6b, 0xb0, 0xd0, 0x53, 0x87, 0x8a, 0x3d, 0xe4, 0x66, 0x27, 0xd0, 0x8d,
- 0x87, 0x9e, 0x3a, 0x6c, 0x0e, 0x99, 0xcd, 0x89, 0x90, 0xb0, 0x87, 0x56, 0x39, 0xbe, 0x96, 0xb8,
- 0xb1, 0x20, 0x93, 0x4f, 0x74, 0x0c, 0x8b, 0x5d, 0xbd, 0xa5, 0x76, 0x95, 0xae, 0x6a, 0xd9, 0x0a,
- 0x0f, 0xee, 0xec, 0x10, 0x3d, 0x31, 0xb6, 0xd8, 0xcc, 0x1b, 0xe3, 0x36, 0xdb, 0x4f, 0xe2, 0x70,
- 0xb8, 0xfd, 0x97, 0xa8, 0x8e, 0x3d, 0xd5, 0xd9, 0x6a, 0xb4, 0x0d, 0xf9, 0x9e, 0x66, 0x9d, 0xe2,
- 0x8e, 0x7a, 0xa1, 0xe9, 0x26, 0x3f, 0x4d, 0xe3, 0x46, 0xf3, 0xc0, 0xe3, 0xe1, 0x9a, 0xfc, 0x62,
- 0xbe, 0x2d, 0x49, 0x05, 0x6c, 0xd8, 0xf1, 0x26, 0xe9, 0xb9, 0xbd, 0xc9, 0x0b, 0xb0, 0xdc, 0xc7,
- 0x43, 0x5b, 0xf1, 0xce, 0x2b, 0xb3, 0x93, 0x0c, 0x5d, 0x7a, 0x44, 0xfe, 0xb9, 0x27, 0xdc, 0x22,
- 0x26, 0x83, 0x9e, 0xa1, 0x51, 0xd0, 0xd0, 0x2d, 0x6c, 0x2a, 0x6a, 0xbb, 0x6d, 0x62, 0xcb, 0x2a,
- 0x67, 0x29, 0x77, 0xc9, 0xa1, 0x57, 0x19, 0x59, 0xfa, 0x8d, 0x7f, 0x6b, 0x82, 0x51, 0x8f, 0x2f,
- 0xbc, 0xe0, 0x2d, 0xfc, 0x11, 0x2c, 0x73, 0xf9, 0x76, 0x60, 0xed, 0x59, 0xf6, 0xf9, 0xd8, 0xf8,
- 0xf9, 0x1a, 0x5d, 0x73, 0xe4, 0x88, 0x47, 0x2f, 0x7b, 0xe2, 0xeb, 0x2d, 0x3b, 0x82, 0x24, 0x5d,
- 0x94, 0x24, 0x73, 0x31, 0xe4, 0xfb, 0xff, 0x6d, 0x2b, 0x5e, 0x83, 0xc5, 0xb1, 0x0c, 0xc2, 0x9d,
- 0x97, 0x10, 0x3a, 0xaf, 0xb8, 0x7f, 0x5e, 0xd2, 0xef, 0x05, 0xa8, 0x44, 0xa7, 0x0c, 0xa1, 0xaa,
- 0x9e, 0x85, 0x45, 0x77, 0x2e, 0xee, 0xf8, 0xd8, 0x99, 0x16, 0xdd, 0x1f, 0x7c, 0x80, 0x91, 0xee,
- 0xf9, 0x49, 0x28, 0x8e, 0x24, 0x34, 0x6c, 0x17, 0x0a, 0x17, 0xfe, 0xfe, 0xa5, 0x5f, 0x27, 0x5c,
- 0x9f, 0x19, 0xc8, 0x3a, 0x42, 0x0c, 0xed, 0x75, 0x58, 0x6a, 0xe3, 0x96, 0xd6, 0xfe, 0xba, 0x76,
- 0xb6, 0xc8, 0xa5, 0xbf, 0x37, 0xb3, 0x71, 0x33, 0xfb, 0x2d, 0x40, 0x56, 0xc6, 0x96, 0x41, 0x52,
- 0x09, 0xb4, 0x05, 0x39, 0x3c, 0x6c, 0x61, 0xc3, 0x76, 0xb2, 0xaf, 0xf0, 0xbc, 0x96, 0x71, 0xd7,
- 0x1d, 0x4e, 0x82, 0xea, 0x5c, 0x31, 0x74, 0x8b, 0x03, 0xd7, 0x68, 0x0c, 0xca, 0xc5, 0xfd, 0xc8,
- 0xf5, 0x45, 0x07, 0xb9, 0x26, 0x22, 0x41, 0x19, 0x93, 0x1a, 0x81, 0xae, 0xb7, 0x38, 0x74, 0x4d,
- 0x4e, 0xe9, 0x2c, 0x80, 0x5d, 0x6b, 0x01, 0xec, 0x9a, 0x9a, 0x32, 0xcd, 0x08, 0xf0, 0xfa, 0xa2,
- 0x03, 0x5e, 0xd3, 0x53, 0x46, 0x3c, 0x82, 0x5e, 0x5f, 0xf5, 0xa1, 0xd7, 0x2c, 0x15, 0x5d, 0x8b,
- 0x14, 0x0d, 0x81, 0xaf, 0x2f, 0xbb, 0xf0, 0x35, 0x1f, 0x09, 0x7d, 0xb9, 0xf0, 0x28, 0x7e, 0x3d,
- 0x18, 0xc3, 0xaf, 0x0c, 0x6f, 0x3e, 0x15, 0xa9, 0x62, 0x0a, 0x80, 0x3d, 0x18, 0x03, 0xb0, 0x85,
- 0x29, 0x0a, 0xa7, 0x20, 0xd8, 0x9f, 0x87, 0x23, 0xd8, 0x68, 0x8c, 0xc9, 0x87, 0x39, 0x1b, 0x84,
- 0x55, 0x22, 0x20, 0x6c, 0x29, 0x12, 0x6e, 0x31, 0xf5, 0x33, 0x63, 0xd8, 0xe3, 0x10, 0x0c, 0xcb,
- 0xd0, 0xe6, 0x8d, 0x48, 0xe5, 0x33, 0x80, 0xd8, 0xe3, 0x10, 0x10, 0xbb, 0x38, 0x55, 0xed, 0x54,
- 0x14, 0x7b, 0x2f, 0x88, 0x62, 0x51, 0x44, 0xc2, 0xe4, 0x9d, 0xf6, 0x08, 0x18, 0x7b, 0x1a, 0x05,
- 0x63, 0x19, 0xd4, 0x7c, 0x2e, 0x52, 0xe3, 0x1c, 0x38, 0xf6, 0x60, 0x0c, 0xc7, 0x2e, 0x4f, 0xb1,
- 0xb4, 0xd9, 0x81, 0x6c, 0x46, 0xcc, 0x32, 0x08, 0xbb, 0x9b, 0xcc, 0x82, 0x98, 0x97, 0x9e, 0x21,
- 0x71, 0x77, 0xc4, 0xc3, 0x91, 0x04, 0x17, 0x9b, 0xa6, 0x6e, 0x72, 0x48, 0xca, 0x1a, 0xd2, 0x0d,
- 0x02, 0x6c, 0x3c, 0x6f, 0x36, 0x01, 0xf4, 0x52, 0x20, 0xe1, 0xf3, 0x60, 0xd2, 0x9f, 0x05, 0x4f,
- 0x96, 0xc2, 0x5e, 0x3f, 0x28, 0xca, 0x71, 0x50, 0xe4, 0x83, 0xc2, 0xf1, 0x20, 0x14, 0x5e, 0x85,
- 0x3c, 0x01, 0x08, 0x23, 0x28, 0x57, 0x35, 0x5c, 0x94, 0x7b, 0x13, 0x16, 0x69, 0xa8, 0x64, 0x80,
- 0x99, 0x07, 0xa4, 0x24, 0x0d, 0x48, 0x25, 0xf2, 0x83, 0xad, 0x0b, 0x8b, 0x4c, 0xcf, 0xc3, 0x92,
- 0x8f, 0xd7, 0x05, 0x1e, 0x0c, 0xf2, 0x89, 0x2e, 0x77, 0x95, 0x23, 0x90, 0xbf, 0x09, 0xde, 0x0a,
- 0x79, 0xf0, 0x38, 0x0c, 0xc9, 0x0a, 0xdf, 0x12, 0x92, 0x8d, 0x7f, 0x6d, 0x24, 0xeb, 0x07, 0x52,
- 0x89, 0x20, 0x90, 0xfa, 0x8f, 0xe0, 0xed, 0x89, 0x8b, 0x4b, 0x5b, 0x7a, 0x1b, 0x73, 0x68, 0x43,
- 0xbf, 0x49, 0x32, 0xd2, 0xd5, 0xcf, 0x39, 0x80, 0x21, 0x9f, 0x84, 0xcb, 0x0d, 0x39, 0x39, 0x1e,
- 0x51, 0x5c, 0x54, 0xc4, 0x42, 0x3e, 0x47, 0x45, 0x22, 0x24, 0x1e, 0x62, 0x16, 0x20, 0x16, 0x64,
- 0xf2, 0x49, 0xf8, 0xa8, 0xd9, 0xf1, 0xd0, 0xcd, 0x1a, 0xe8, 0x0e, 0xe4, 0x68, 0xe5, 0x59, 0xd1,
- 0x0d, 0x8b, 0xc7, 0x84, 0x40, 0x52, 0xc3, 0xca, 0xcf, 0xeb, 0x87, 0x84, 0xe7, 0xc0, 0xb0, 0xe4,
- 0xac, 0xc1, 0xbf, 0x7c, 0xb9, 0x46, 0x2e, 0x90, 0x6b, 0x5c, 0x83, 0x1c, 0x19, 0xbd, 0x65, 0xa8,
- 0x2d, 0x4c, 0xeb, 0x9c, 0x39, 0xd9, 0x23, 0x48, 0x9f, 0x0a, 0x50, 0x1a, 0x09, 0x31, 0xa1, 0x73,
- 0x77, 0x4c, 0x32, 0xee, 0xc3, 0xe9, 0xd7, 0x01, 0xce, 0x55, 0x4b, 0x79, 0x4f, 0xed, 0xdb, 0xb8,
- 0xcd, 0xa7, 0x9b, 0x3b, 0x57, 0xad, 0x37, 0x28, 0x21, 0xd8, 0x71, 0x76, 0xa4, 0x63, 0x1f, 0x20,
- 0xcc, 0xf9, 0x01, 0x21, 0xaa, 0x40, 0xd6, 0x30, 0x35, 0xdd, 0xd4, 0xec, 0x4b, 0x3a, 0xda, 0x84,
- 0xec, 0xb6, 0x77, 0x93, 0xd9, 0x84, 0x98, 0xdc, 0x4d, 0x66, 0x93, 0x62, 0xca, 0xad, 0x3a, 0xb1,
- 0x23, 0x9b, 0x17, 0x17, 0xa4, 0x0f, 0xe2, 0x9e, 0x2d, 0x6e, 0xe3, 0xae, 0x76, 0x81, 0xcd, 0x39,
- 0x26, 0x33, 0xdb, 0xe6, 0xae, 0x84, 0x4c, 0xd9, 0x47, 0x21, 0xa3, 0x27, 0xad, 0x81, 0x85, 0xdb,
- 0xbc, 0xfe, 0xe1, 0xb6, 0x51, 0x03, 0xd2, 0xf8, 0x02, 0xf7, 0x6d, 0xab, 0x9c, 0xa1, 0x36, 0x7c,
- 0x65, 0x1c, 0x90, 0x92, 0xdf, 0x5b, 0x65, 0x62, 0xb9, 0x5f, 0x7d, 0xbe, 0x2a, 0x32, 0xee, 0xe7,
- 0xf4, 0x9e, 0x66, 0xe3, 0x9e, 0x61, 0x5f, 0xca, 0x5c, 0x7e, 0xf2, 0xca, 0x4a, 0x55, 0x28, 0x06,
- 0xe3, 0x3e, 0x7a, 0x02, 0x0a, 0x26, 0xb6, 0x55, 0xad, 0xaf, 0x04, 0x92, 0xf4, 0x05, 0x46, 0x64,
- 0x27, 0x7f, 0x37, 0x99, 0x15, 0xc4, 0xf8, 0x6e, 0x32, 0x1b, 0x17, 0x13, 0xd2, 0x21, 0x3c, 0x12,
- 0x1a, 0xf7, 0xd1, 0x4b, 0x90, 0xf3, 0x52, 0x06, 0x81, 0x4e, 0x63, 0x42, 0x11, 0xc3, 0xe3, 0x95,
- 0xfe, 0x2a, 0x78, 0x2a, 0x83, 0x65, 0x91, 0x3a, 0xa4, 0x4d, 0x6c, 0x0d, 0xba, 0xac, 0x50, 0x51,
- 0xdc, 0x7c, 0x7e, 0xb6, 0x8c, 0x81, 0x50, 0x07, 0x5d, 0x5b, 0xe6, 0xc2, 0xd2, 0x5b, 0x90, 0x66,
- 0x14, 0x94, 0x87, 0xcc, 0xf1, 0xfe, 0xfd, 0xfd, 0x83, 0x37, 0xf6, 0xc5, 0x18, 0x02, 0x48, 0x57,
- 0x6b, 0xb5, 0xfa, 0x61, 0x53, 0x14, 0x50, 0x0e, 0x52, 0xd5, 0xad, 0x03, 0xb9, 0x29, 0xc6, 0x09,
- 0x59, 0xae, 0xef, 0xd6, 0x6b, 0x4d, 0x31, 0x81, 0x16, 0xa1, 0xc0, 0xbe, 0x95, 0x7b, 0x07, 0xf2,
- 0x83, 0x6a, 0x53, 0x4c, 0xfa, 0x48, 0x47, 0xf5, 0xfd, 0xed, 0xba, 0x2c, 0xa6, 0xa4, 0x1f, 0xc0,
- 0xd5, 0xc8, 0x1c, 0xc3, 0xab, 0x79, 0x08, 0xbe, 0x9a, 0x87, 0xf4, 0x71, 0x9c, 0x80, 0xae, 0xa8,
- 0xc4, 0x01, 0xed, 0x8e, 0x4c, 0x7c, 0x73, 0x8e, 0xac, 0x63, 0x64, 0xf6, 0x04, 0x67, 0x99, 0xf8,
- 0x0c, 0xdb, 0xad, 0x0e, 0x4b, 0x64, 0x98, 0x9f, 0x2c, 0xc8, 0x05, 0x4e, 0xa5, 0x42, 0x16, 0x63,
- 0x7b, 0x07, 0xb7, 0x6c, 0x85, 0x9d, 0x36, 0x8b, 0x82, 0x9d, 0x1c, 0x61, 0x23, 0xd4, 0x23, 0x46,
- 0x94, 0xde, 0x9e, 0x6b, 0x2d, 0x73, 0x90, 0x92, 0xeb, 0x4d, 0xf9, 0x4d, 0x31, 0x81, 0x10, 0x14,
- 0xe9, 0xa7, 0x72, 0xb4, 0x5f, 0x3d, 0x3c, 0x6a, 0x1c, 0x90, 0xb5, 0x5c, 0x82, 0x92, 0xb3, 0x96,
- 0x0e, 0x31, 0x25, 0xfd, 0x23, 0x0e, 0x8f, 0x46, 0xa4, 0x3d, 0xe8, 0x0e, 0x80, 0x3d, 0x54, 0x4c,
- 0xdc, 0xd2, 0xcd, 0x76, 0xb4, 0x91, 0x35, 0x87, 0x32, 0xe5, 0x90, 0x73, 0x36, 0xff, 0xb2, 0x26,
- 0x94, 0xca, 0xd0, 0x2b, 0x5c, 0x29, 0x99, 0x95, 0xc5, 0x21, 0xde, 0xf5, 0x90, 0x8a, 0x10, 0x6e,
- 0x11, 0xc5, 0x74, 0x6d, 0xa9, 0x62, 0xca, 0x8f, 0x1e, 0xf8, 0xb1, 0xf0, 0x80, 0x06, 0x98, 0x99,
- 0x6b, 0xaa, 0x3e, 0xb4, 0xcc, 0x08, 0x16, 0x7a, 0x13, 0x1e, 0x1d, 0x89, 0x8f, 0xae, 0xd2, 0xd4,
- 0xac, 0x61, 0xf2, 0x91, 0x60, 0x98, 0xe4, 0xaa, 0xa5, 0x3f, 0x24, 0xfc, 0x0b, 0x1b, 0xcc, 0xf2,
- 0x0e, 0x20, 0x6d, 0xd9, 0xaa, 0x3d, 0xb0, 0xb8, 0xc1, 0xbd, 0x34, 0x6b, 0xca, 0xb8, 0xee, 0x7c,
- 0x1c, 0x51, 0x71, 0x99, 0xab, 0xf9, 0x7e, 0xbd, 0x2d, 0xe9, 0x36, 0x14, 0x83, 0x8b, 0x13, 0x7d,
- 0x64, 0x3c, 0x9f, 0x13, 0x97, 0xee, 0x02, 0x1a, 0x4f, 0xa6, 0x43, 0xaa, 0x25, 0x42, 0x58, 0xb5,
- 0xe4, 0x8f, 0x02, 0x3c, 0x36, 0x21, 0x71, 0x46, 0xaf, 0x8f, 0xec, 0xf3, 0xcb, 0xf3, 0xa4, 0xdd,
- 0xeb, 0x8c, 0x16, 0xdc, 0x69, 0xe9, 0x16, 0x2c, 0xf8, 0xe9, 0xb3, 0x4d, 0xf2, 0xab, 0xb8, 0xe7,
- 0xf3, 0x83, 0x65, 0x1d, 0x2f, 0x14, 0x0a, 0xdf, 0x30, 0x14, 0x06, 0xed, 0x2c, 0x3e, 0xa7, 0x9d,
- 0x1d, 0x85, 0xd9, 0x59, 0x62, 0xae, 0x0c, 0x73, 0x2e, 0x6b, 0x4b, 0x7e, 0x33, 0x6b, 0x0b, 0x1c,
- 0xb8, 0x54, 0x30, 0x85, 0x7d, 0x13, 0xc0, 0xab, 0x75, 0x91, 0x80, 0x64, 0xea, 0x83, 0x7e, 0x9b,
- 0x5a, 0x40, 0x4a, 0x66, 0x0d, 0x74, 0x1b, 0x52, 0xc4, 0x92, 0x9c, 0x75, 0x1a, 0x77, 0xaa, 0xc4,
- 0x12, 0x7c, 0xb5, 0x32, 0xc6, 0x2d, 0x69, 0x80, 0xc6, 0x4b, 0xe5, 0x11, 0x5d, 0xbc, 0x1a, 0xec,
- 0xe2, 0xf1, 0xc8, 0xa2, 0x7b, 0x78, 0x57, 0xef, 0x43, 0x8a, 0xee, 0x3c, 0x49, 0xbe, 0xe8, 0xfd,
- 0x0c, 0x87, 0x40, 0xe4, 0x1b, 0xfd, 0x02, 0x40, 0xb5, 0x6d, 0x53, 0x3b, 0x1d, 0x78, 0x1d, 0xac,
- 0x86, 0x5b, 0x4e, 0xd5, 0xe1, 0xdb, 0xba, 0xc6, 0x4d, 0x68, 0xd9, 0x13, 0xf5, 0x99, 0x91, 0x4f,
- 0xa1, 0xb4, 0x0f, 0xc5, 0xa0, 0xac, 0x93, 0xb4, 0xb3, 0x31, 0x04, 0x93, 0x76, 0x86, 0xc1, 0x78,
- 0xd2, 0xee, 0xa6, 0xfc, 0x09, 0x76, 0x09, 0x45, 0x1b, 0xd2, 0x7f, 0x05, 0x58, 0xf0, 0x1b, 0xde,
- 0xb7, 0x9c, 0x8a, 0x4e, 0xc9, 0xbe, 0xaf, 0x8e, 0x65, 0xa2, 0x99, 0x73, 0xd5, 0x3a, 0xfe, 0x2e,
- 0x13, 0xd1, 0x0f, 0x04, 0xc8, 0xba, 0x93, 0x0f, 0xde, 0x47, 0x05, 0x2e, 0xf0, 0xd8, 0xda, 0xc5,
- 0xfd, 0x97, 0x48, 0xec, 0xba, 0x2e, 0xe1, 0x5e, 0xd7, 0xdd, 0x75, 0x73, 0xa5, 0xa8, 0xea, 0x9e,
- 0x7f, 0xa5, 0xb9, 0x4d, 0x39, 0xa9, 0xe1, 0xef, 0xf8, 0x38, 0x48, 0x92, 0x80, 0x7e, 0x04, 0x69,
- 0xb5, 0xe5, 0xd6, 0x34, 0x8b, 0x21, 0xc5, 0x3e, 0x87, 0x75, 0xbd, 0x39, 0xac, 0x52, 0x4e, 0x99,
- 0x4b, 0xf0, 0x51, 0xc5, 0x9d, 0x51, 0x49, 0xaf, 0x11, 0xbd, 0x8c, 0x27, 0xe8, 0x11, 0x8b, 0x00,
- 0xc7, 0xfb, 0x0f, 0x0e, 0xb6, 0x77, 0xee, 0xed, 0xd4, 0xb7, 0x79, 0xb6, 0xb4, 0xbd, 0x5d, 0xdf,
- 0x16, 0xe3, 0x84, 0x4f, 0xae, 0x3f, 0x38, 0x38, 0xa9, 0x6f, 0x8b, 0x09, 0xe9, 0x2e, 0xe4, 0x5c,
- 0xaf, 0x42, 0x10, 0xbe, 0x53, 0x9f, 0x15, 0xf8, 0xd9, 0xe6, 0xd5, 0xf5, 0x65, 0x48, 0x19, 0xfa,
- 0x7b, 0xfc, 0xee, 0x2c, 0x21, 0xb3, 0x86, 0xd4, 0x86, 0xd2, 0x88, 0x4b, 0x42, 0x77, 0x21, 0x63,
- 0x0c, 0x4e, 0x15, 0xc7, 0x68, 0x47, 0xaa, 0xd8, 0x0e, 0x76, 0x1c, 0x9c, 0x76, 0xb5, 0xd6, 0x7d,
- 0x7c, 0xe9, 0x2c, 0x93, 0x31, 0x38, 0xbd, 0xcf, 0x6c, 0x9b, 0xf5, 0x12, 0xf7, 0xf7, 0x72, 0x01,
- 0x59, 0xe7, 0xa8, 0xa2, 0x1f, 0x43, 0xce, 0xf5, 0x76, 0xee, 0xdd, 0x77, 0xa4, 0x9b, 0xe4, 0xea,
- 0x3d, 0x11, 0x74, 0x13, 0x16, 0x2d, 0xed, 0xbc, 0xef, 0x94, 0xee, 0x59, 0xf5, 0x26, 0x4e, 0xcf,
- 0x4c, 0x89, 0xfd, 0xd8, 0x73, 0x0a, 0x0c, 0x24, 0xc8, 0x89, 0xa3, 0xbe, 0xe2, 0xbb, 0x1c, 0x40,
- 0x48, 0x30, 0x4e, 0x84, 0x05, 0xe3, 0x5f, 0xc5, 0x21, 0xef, 0xbb, 0x19, 0x40, 0x3f, 0xf4, 0x39,
- 0xae, 0x62, 0x48, 0x14, 0xf1, 0xf1, 0x7a, 0x97, 0xcb, 0xc1, 0x89, 0xc5, 0xe7, 0x9f, 0x58, 0xd4,
- 0xfd, 0x8b, 0x73, 0xd1, 0x90, 0x9c, 0xfb, 0xa2, 0xe1, 0x39, 0x40, 0xb6, 0x6e, 0xab, 0x5d, 0xe5,
- 0x42, 0xb7, 0xb5, 0xfe, 0xb9, 0xc2, 0x4c, 0x83, 0xb9, 0x19, 0x91, 0xfe, 0x39, 0xa1, 0x3f, 0x0e,
- 0xa9, 0x95, 0xfc, 0x52, 0x80, 0xac, 0x8b, 0xe8, 0xe6, 0xbd, 0x7a, 0xbe, 0x02, 0x69, 0x0e, 0x5a,
- 0xd8, 0xdd, 0x33, 0x6f, 0x85, 0xde, 0xa8, 0x54, 0x20, 0xdb, 0xc3, 0xb6, 0x4a, 0x7d, 0x26, 0x8b,
- 0x80, 0x6e, 0xfb, 0xe6, 0xcb, 0x90, 0xf7, 0x5d, 0xdb, 0x13, 0x37, 0xba, 0x5f, 0x7f, 0x43, 0x8c,
- 0x55, 0x32, 0x1f, 0x7e, 0xb2, 0x96, 0xd8, 0xc7, 0xef, 0x91, 0x13, 0x26, 0xd7, 0x6b, 0x8d, 0x7a,
- 0xed, 0xbe, 0x28, 0x54, 0xf2, 0x1f, 0x7e, 0xb2, 0x96, 0x91, 0x31, 0x2d, 0xa6, 0xdf, 0xbc, 0x0f,
- 0xa5, 0x91, 0x8d, 0x09, 0x1e, 0x68, 0x04, 0xc5, 0xed, 0xe3, 0xc3, 0xbd, 0x9d, 0x5a, 0xb5, 0x59,
- 0x57, 0x4e, 0x0e, 0x9a, 0x75, 0x51, 0x40, 0x8f, 0xc2, 0xd2, 0xde, 0xce, 0x4f, 0x1a, 0x4d, 0xa5,
- 0xb6, 0xb7, 0x53, 0xdf, 0x6f, 0x2a, 0xd5, 0x66, 0xb3, 0x5a, 0xbb, 0x2f, 0xc6, 0x37, 0xff, 0x94,
- 0x87, 0x52, 0x75, 0xab, 0xb6, 0x43, 0x60, 0x9b, 0xd6, 0x52, 0xa9, 0x7b, 0xa8, 0x41, 0x92, 0x96,
- 0x05, 0x27, 0x3e, 0xde, 0xab, 0x4c, 0xbe, 0x21, 0x41, 0xf7, 0x20, 0x45, 0x2b, 0x86, 0x68, 0xf2,
- 0x6b, 0xbe, 0xca, 0x94, 0x2b, 0x13, 0x32, 0x18, 0x7a, 0x9c, 0x26, 0x3e, 0xef, 0xab, 0x4c, 0xbe,
- 0x41, 0x41, 0x7b, 0x90, 0x71, 0x0a, 0x46, 0xd3, 0xde, 0xdc, 0x55, 0xa6, 0x5e, 0x6b, 0x90, 0xa9,
- 0xb1, 0xc2, 0xdb, 0xe4, 0x97, 0x7f, 0x95, 0x29, 0x77, 0x2b, 0x68, 0x07, 0xd2, 0xbc, 0xe8, 0x31,
- 0xe5, 0x31, 0x5f, 0x65, 0xda, 0x6d, 0x09, 0x92, 0x21, 0xe7, 0x95, 0x34, 0xa7, 0xbf, 0x67, 0xac,
- 0xcc, 0x70, 0x6d, 0x84, 0xde, 0x82, 0x42, 0xb0, 0xa0, 0x32, 0xdb, 0x83, 0xc1, 0xca, 0x8c, 0xf7,
- 0x32, 0x44, 0x7f, 0xb0, 0xba, 0x32, 0xdb, 0x03, 0xc2, 0xca, 0x8c, 0xd7, 0x34, 0xe8, 0x1d, 0x58,
- 0x1c, 0xaf, 0x7e, 0xcc, 0xfe, 0x9e, 0xb0, 0x32, 0xc7, 0xc5, 0x0d, 0xea, 0x01, 0x0a, 0xa9, 0x9a,
- 0xcc, 0xf1, 0xbc, 0xb0, 0x32, 0xcf, 0x3d, 0x0e, 0x6a, 0x43, 0x69, 0xb4, 0x12, 0x31, 0xeb, 0x73,
- 0xc3, 0xca, 0xcc, 0x77, 0x3a, 0xac, 0x97, 0x20, 0x2c, 0x9f, 0xf5, 0xf9, 0x61, 0x65, 0xe6, 0x2b,
- 0x1e, 0x74, 0x0c, 0xe0, 0x83, 0x95, 0x33, 0x3c, 0x47, 0xac, 0xcc, 0x72, 0xd9, 0x83, 0x0c, 0x58,
- 0x0a, 0xc3, 0x9b, 0xf3, 0xbc, 0x4e, 0xac, 0xcc, 0x75, 0x07, 0x44, 0xec, 0x39, 0x88, 0x1c, 0x67,
- 0x7b, 0xad, 0x58, 0x99, 0xf1, 0x32, 0x68, 0xab, 0xfe, 0xe9, 0x17, 0x2b, 0xc2, 0x67, 0x5f, 0xac,
- 0x08, 0xff, 0xfe, 0x62, 0x45, 0xf8, 0xe8, 0xcb, 0x95, 0xd8, 0x67, 0x5f, 0xae, 0xc4, 0xfe, 0xf9,
- 0xe5, 0x4a, 0xec, 0xa7, 0xcf, 0x9e, 0x6b, 0x76, 0x67, 0x70, 0xba, 0xde, 0xd2, 0x7b, 0x1b, 0xfe,
- 0x07, 0xde, 0x61, 0xcf, 0xca, 0x4f, 0xd3, 0x34, 0xa0, 0xde, 0xfa, 0x5f, 0x00, 0x00, 0x00, 0xff,
- 0xff, 0xdc, 0x85, 0x19, 0x4e, 0x76, 0x2e, 0x00, 0x00,
+ // 3225 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x5a, 0x4b, 0x73, 0x23, 0xd5,
+ 0xf5, 0x57, 0xeb, 0xad, 0xa3, 0x57, 0xfb, 0xda, 0x0c, 0x1a, 0x31, 0x63, 0x9b, 0xa6, 0x80, 0x61,
+ 0x00, 0x9b, 0xbf, 0xe7, 0x3f, 0x30, 0x64, 0x20, 0x94, 0x2c, 0x6b, 0x22, 0x7b, 0x3c, 0xb6, 0x69,
+ 0xcb, 0x43, 0x91, 0x07, 0x4d, 0x5b, 0xba, 0xb6, 0x9a, 0x91, 0xd4, 0x4d, 0x77, 0xcb, 0xc8, 0x2c,
+ 0x93, 0x50, 0x95, 0x62, 0x91, 0x62, 0x17, 0x16, 0x61, 0x91, 0x45, 0xaa, 0xf2, 0x11, 0x92, 0x4d,
+ 0x56, 0x59, 0xb0, 0xc8, 0x82, 0x65, 0x56, 0x24, 0x05, 0x3b, 0xbe, 0x40, 0x76, 0xa9, 0xd4, 0x7d,
+ 0xf4, 0x4b, 0xea, 0xd6, 0x83, 0x50, 0x54, 0xa5, 0x2a, 0xbb, 0x7b, 0x4f, 0x9f, 0x73, 0xee, 0xeb,
+ 0xdc, 0x73, 0xce, 0xef, 0xf4, 0x85, 0x27, 0x6c, 0x3c, 0xe8, 0x60, 0xb3, 0xaf, 0x0d, 0xec, 0x4d,
+ 0xf5, 0xb4, 0xad, 0x6d, 0xda, 0x97, 0x06, 0xb6, 0x36, 0x0c, 0x53, 0xb7, 0x75, 0x54, 0xf6, 0x3e,
+ 0x6e, 0x90, 0x8f, 0xd5, 0xeb, 0x3e, 0xee, 0xb6, 0x79, 0x69, 0xd8, 0xfa, 0xa6, 0x61, 0xea, 0xfa,
+ 0x19, 0xe3, 0xaf, 0x5e, 0x9b, 0xfc, 0xfc, 0x08, 0x5f, 0x72, 0x6d, 0x01, 0x61, 0x3a, 0xca, 0xa6,
+ 0xa1, 0x9a, 0x6a, 0xdf, 0xf9, 0xbc, 0x76, 0xae, 0xeb, 0xe7, 0x3d, 0xbc, 0x49, 0x7b, 0xa7, 0xc3,
+ 0xb3, 0x4d, 0x5b, 0xeb, 0x63, 0xcb, 0x56, 0xfb, 0x06, 0x67, 0x58, 0x39, 0xd7, 0xcf, 0x75, 0xda,
+ 0xdc, 0x24, 0x2d, 0x46, 0x95, 0xfe, 0x94, 0x83, 0x8c, 0x8c, 0xdf, 0x1f, 0x62, 0xcb, 0x46, 0x5b,
+ 0x90, 0xc4, 0xed, 0xae, 0x5e, 0x11, 0xd6, 0x85, 0x1b, 0xf9, 0xad, 0x6b, 0x1b, 0x63, 0xd3, 0xdf,
+ 0xe0, 0x7c, 0x8d, 0x76, 0x57, 0x6f, 0xc6, 0x64, 0xca, 0x8b, 0x6e, 0x43, 0xea, 0xac, 0x37, 0xb4,
+ 0xba, 0x95, 0x38, 0x15, 0xba, 0x1e, 0x25, 0x74, 0x8f, 0x30, 0x35, 0x63, 0x32, 0xe3, 0x26, 0x43,
+ 0x69, 0x83, 0x33, 0xbd, 0x92, 0x98, 0x3e, 0xd4, 0xee, 0xe0, 0x8c, 0x0e, 0x45, 0x78, 0xd1, 0x36,
+ 0x80, 0x36, 0xd0, 0x6c, 0xa5, 0xdd, 0x55, 0xb5, 0x41, 0x25, 0x49, 0x25, 0x9f, 0x8c, 0x96, 0xd4,
+ 0xec, 0x3a, 0x61, 0x6c, 0xc6, 0xe4, 0x9c, 0xe6, 0x74, 0xc8, 0x74, 0xdf, 0x1f, 0x62, 0xf3, 0xb2,
+ 0x92, 0x9a, 0x3e, 0xdd, 0x37, 0x09, 0x13, 0x99, 0x2e, 0xe5, 0x46, 0xaf, 0x41, 0xb6, 0xdd, 0xc5,
+ 0xed, 0x47, 0x8a, 0x3d, 0xaa, 0x64, 0xa8, 0xe4, 0x5a, 0x94, 0x64, 0x9d, 0xf0, 0xb5, 0x46, 0xcd,
+ 0x98, 0x9c, 0x69, 0xb3, 0x26, 0xba, 0x03, 0xe9, 0xb6, 0xde, 0xef, 0x6b, 0x76, 0x05, 0xa8, 0xec,
+ 0x6a, 0xa4, 0x2c, 0xe5, 0x6a, 0xc6, 0x64, 0xce, 0x8f, 0x0e, 0xa0, 0xd4, 0xd3, 0x2c, 0x5b, 0xb1,
+ 0x06, 0xaa, 0x61, 0x75, 0x75, 0xdb, 0xaa, 0xe4, 0xa9, 0x86, 0xa7, 0xa3, 0x34, 0xec, 0x6b, 0x96,
+ 0x7d, 0xec, 0x30, 0x37, 0x63, 0x72, 0xb1, 0xe7, 0x27, 0x10, 0x7d, 0xfa, 0xd9, 0x19, 0x36, 0x5d,
+ 0x85, 0x95, 0xc2, 0x74, 0x7d, 0x87, 0x84, 0xdb, 0x91, 0x27, 0xfa, 0x74, 0x3f, 0x01, 0xfd, 0x04,
+ 0x96, 0x7b, 0xba, 0xda, 0x71, 0xd5, 0x29, 0xed, 0xee, 0x70, 0xf0, 0xa8, 0x52, 0xa4, 0x4a, 0x9f,
+ 0x8b, 0x9c, 0xa4, 0xae, 0x76, 0x1c, 0x15, 0x75, 0x22, 0xd0, 0x8c, 0xc9, 0x4b, 0xbd, 0x71, 0x22,
+ 0x7a, 0x07, 0x56, 0x54, 0xc3, 0xe8, 0x5d, 0x8e, 0x6b, 0x2f, 0x51, 0xed, 0x37, 0xa3, 0xb4, 0xd7,
+ 0x88, 0xcc, 0xb8, 0x7a, 0xa4, 0x4e, 0x50, 0x51, 0x0b, 0x44, 0xc3, 0xc4, 0x86, 0x6a, 0x62, 0xc5,
+ 0x30, 0x75, 0x43, 0xb7, 0xd4, 0x5e, 0xa5, 0x4c, 0x75, 0x3f, 0x1b, 0xa5, 0xfb, 0x88, 0xf1, 0x1f,
+ 0x71, 0xf6, 0x66, 0x4c, 0x2e, 0x1b, 0x41, 0x12, 0xd3, 0xaa, 0xb7, 0xb1, 0x65, 0x79, 0x5a, 0xc5,
+ 0x59, 0x5a, 0x29, 0x7f, 0x50, 0x6b, 0x80, 0x84, 0x1a, 0x90, 0xc7, 0x23, 0x22, 0xae, 0x5c, 0xe8,
+ 0x36, 0xae, 0x2c, 0x51, 0x85, 0x52, 0xe4, 0x0d, 0xa5, 0xac, 0x0f, 0x75, 0x1b, 0x37, 0x63, 0x32,
+ 0x60, 0xb7, 0x87, 0x54, 0x78, 0xec, 0x02, 0x9b, 0xda, 0xd9, 0x25, 0x55, 0xa3, 0xd0, 0x2f, 0x96,
+ 0xa6, 0x0f, 0x2a, 0x88, 0x2a, 0x7c, 0x3e, 0x4a, 0xe1, 0x43, 0x2a, 0x44, 0x54, 0x34, 0x1c, 0x91,
+ 0x66, 0x4c, 0x5e, 0xbe, 0x98, 0x24, 0x13, 0x13, 0x3b, 0xd3, 0x06, 0x6a, 0x4f, 0xfb, 0x10, 0x2b,
+ 0xa7, 0x3d, 0xbd, 0xfd, 0xa8, 0xb2, 0x3c, 0xdd, 0xc4, 0xee, 0x71, 0xee, 0x6d, 0xc2, 0x4c, 0x4c,
+ 0xec, 0xcc, 0x4f, 0xd8, 0xce, 0x40, 0xea, 0x42, 0xed, 0x0d, 0xf1, 0x5e, 0x32, 0x9b, 0x16, 0x33,
+ 0x7b, 0xc9, 0x6c, 0x56, 0xcc, 0xed, 0x25, 0xb3, 0x39, 0x11, 0xa4, 0x67, 0x21, 0xef, 0x73, 0x49,
+ 0xa8, 0x02, 0x99, 0x3e, 0xb6, 0x2c, 0xf5, 0x1c, 0x53, 0x0f, 0x96, 0x93, 0x9d, 0xae, 0x54, 0x82,
+ 0x82, 0xdf, 0x0d, 0x49, 0x9f, 0x08, 0xae, 0x24, 0xf1, 0x30, 0x44, 0xf2, 0x02, 0x9b, 0x74, 0x23,
+ 0xb8, 0x24, 0xef, 0xa2, 0xa7, 0xa0, 0x48, 0x17, 0xa1, 0x38, 0xdf, 0x89, 0x9b, 0x4b, 0xca, 0x05,
+ 0x4a, 0x7c, 0xc8, 0x99, 0xd6, 0x20, 0x6f, 0x6c, 0x19, 0x2e, 0x4b, 0x82, 0xb2, 0x80, 0xb1, 0x65,
+ 0x38, 0x0c, 0x4f, 0x42, 0x81, 0xac, 0xd8, 0xe5, 0x48, 0xd2, 0x41, 0xf2, 0x84, 0xc6, 0x59, 0xa4,
+ 0xbf, 0xc6, 0x41, 0x1c, 0x77, 0x5d, 0xe8, 0x0e, 0x24, 0x89, 0x17, 0xe7, 0x0e, 0xb9, 0xba, 0xc1,
+ 0x5c, 0xfc, 0x86, 0xe3, 0xe2, 0x37, 0x5a, 0x8e, 0x8b, 0xdf, 0xce, 0x7e, 0xfe, 0xe5, 0x5a, 0xec,
+ 0x93, 0xbf, 0xaf, 0x09, 0x32, 0x95, 0x40, 0x57, 0x89, 0xc3, 0x52, 0xb5, 0x81, 0xa2, 0x75, 0xe8,
+ 0x94, 0x73, 0xc4, 0x1b, 0xa9, 0xda, 0x60, 0xb7, 0x83, 0xf6, 0x41, 0x6c, 0xeb, 0x03, 0x0b, 0x0f,
+ 0xac, 0xa1, 0xa5, 0xb0, 0x10, 0xc2, 0xdd, 0x70, 0xc0, 0x99, 0xb2, 0x40, 0x56, 0x77, 0x38, 0x8f,
+ 0x28, 0xa3, 0x5c, 0x6e, 0x07, 0x09, 0xe8, 0x1e, 0xc0, 0x85, 0xda, 0xd3, 0x3a, 0xaa, 0xad, 0x9b,
+ 0x56, 0x25, 0xb9, 0x9e, 0xb8, 0x91, 0xdf, 0x5a, 0x9f, 0x38, 0xea, 0x87, 0x0e, 0xcb, 0x89, 0xd1,
+ 0x51, 0x6d, 0xbc, 0x9d, 0x24, 0xd3, 0x95, 0x7d, 0x92, 0xe8, 0x19, 0x28, 0xab, 0x86, 0xa1, 0x58,
+ 0xb6, 0x6a, 0x63, 0xe5, 0xf4, 0xd2, 0xc6, 0x16, 0x75, 0xd1, 0x05, 0xb9, 0xa8, 0x1a, 0xc6, 0x31,
+ 0xa1, 0x6e, 0x13, 0x22, 0x7a, 0x1a, 0x4a, 0xc4, 0x9b, 0x6b, 0x6a, 0x4f, 0xe9, 0x62, 0xed, 0xbc,
+ 0x6b, 0x57, 0xd2, 0xeb, 0xc2, 0x8d, 0x84, 0x5c, 0xe4, 0xd4, 0x26, 0x25, 0x4a, 0x1d, 0xf7, 0xc4,
+ 0xa9, 0x27, 0x47, 0x08, 0x92, 0x1d, 0xd5, 0x56, 0xe9, 0x4e, 0x16, 0x64, 0xda, 0x26, 0x34, 0x43,
+ 0xb5, 0xbb, 0x7c, 0x7f, 0x68, 0x1b, 0x5d, 0x81, 0x34, 0x57, 0x9b, 0xa0, 0x6a, 0x79, 0x0f, 0xad,
+ 0x40, 0xca, 0x30, 0xf5, 0x0b, 0x4c, 0x8f, 0x2e, 0x2b, 0xb3, 0x8e, 0x24, 0x43, 0x29, 0xe8, 0xf5,
+ 0x51, 0x09, 0xe2, 0xf6, 0x88, 0x8f, 0x12, 0xb7, 0x47, 0xe8, 0x25, 0x48, 0x92, 0x8d, 0xa4, 0x63,
+ 0x94, 0x42, 0xe2, 0x1c, 0x97, 0x6b, 0x5d, 0x1a, 0x58, 0xa6, 0x9c, 0x52, 0x19, 0x8a, 0x81, 0x68,
+ 0x20, 0x5d, 0x81, 0x95, 0x30, 0xe7, 0x2e, 0x75, 0x5d, 0x7a, 0xc0, 0x49, 0xa3, 0xdb, 0x90, 0x75,
+ 0xbd, 0x3b, 0x33, 0x9c, 0xab, 0x13, 0xc3, 0x3a, 0xcc, 0xb2, 0xcb, 0x4a, 0x2c, 0x86, 0x1c, 0x40,
+ 0x57, 0xe5, 0xb1, 0xbc, 0x20, 0x67, 0x54, 0xc3, 0x68, 0xaa, 0x56, 0x57, 0x7a, 0x17, 0x2a, 0x51,
+ 0x9e, 0xdb, 0xb7, 0x61, 0x02, 0x35, 0x7b, 0x67, 0xc3, 0xae, 0x40, 0xfa, 0x4c, 0x37, 0xfb, 0xaa,
+ 0x4d, 0x95, 0x15, 0x65, 0xde, 0x23, 0x1b, 0xc9, 0xbc, 0x78, 0x82, 0x92, 0x59, 0x47, 0x52, 0xe0,
+ 0x6a, 0xa4, 0xf7, 0x26, 0x22, 0xda, 0xa0, 0x83, 0xd9, 0xb6, 0x16, 0x65, 0xd6, 0xf1, 0x14, 0xb1,
+ 0xc9, 0xb2, 0x0e, 0x19, 0xd6, 0xa2, 0x6b, 0xa5, 0xfa, 0x73, 0x32, 0xef, 0x49, 0x9f, 0x26, 0xe0,
+ 0x4a, 0xb8, 0x0f, 0x47, 0xeb, 0x50, 0xe8, 0xab, 0x23, 0xc5, 0x1e, 0x71, 0xb3, 0x13, 0xe8, 0xc1,
+ 0x43, 0x5f, 0x1d, 0xb5, 0x46, 0xcc, 0xe6, 0x44, 0x48, 0xd8, 0x23, 0xab, 0x12, 0x5f, 0x4f, 0xdc,
+ 0x28, 0xc8, 0xa4, 0x89, 0x4e, 0x60, 0xa9, 0xa7, 0xb7, 0xd5, 0x9e, 0xd2, 0x53, 0x2d, 0x5b, 0xe1,
+ 0xc1, 0x9d, 0x5d, 0xa2, 0xa7, 0x26, 0x36, 0x9b, 0x79, 0x63, 0xdc, 0x61, 0xe7, 0x49, 0x1c, 0x0e,
+ 0xb7, 0xff, 0x32, 0xd5, 0xb1, 0xaf, 0x3a, 0x47, 0x8d, 0x76, 0x20, 0xdf, 0xd7, 0xac, 0x53, 0xdc,
+ 0x55, 0x2f, 0x34, 0xdd, 0xe4, 0xb7, 0x69, 0xd2, 0x68, 0x1e, 0x78, 0x3c, 0x5c, 0x93, 0x5f, 0xcc,
+ 0x77, 0x24, 0xa9, 0x80, 0x0d, 0x3b, 0xde, 0x24, 0xbd, 0xb0, 0x37, 0x79, 0x09, 0x56, 0x06, 0x78,
+ 0x64, 0x2b, 0xde, 0x7d, 0x65, 0x76, 0x92, 0xa1, 0x5b, 0x8f, 0xc8, 0x37, 0xf7, 0x86, 0x5b, 0xc4,
+ 0x64, 0xd0, 0x73, 0x34, 0x0a, 0x1a, 0xba, 0x85, 0x4d, 0x45, 0xed, 0x74, 0x4c, 0x6c, 0x59, 0x95,
+ 0x2c, 0xe5, 0x2e, 0x3b, 0xf4, 0x1a, 0x23, 0x4b, 0xbf, 0xf2, 0x1f, 0x4d, 0x30, 0xea, 0xf1, 0x8d,
+ 0x17, 0xbc, 0x8d, 0x3f, 0x86, 0x15, 0x2e, 0xdf, 0x09, 0xec, 0x3d, 0xcb, 0x3e, 0x9f, 0x98, 0xbc,
+ 0x5f, 0xe3, 0x7b, 0x8e, 0x1c, 0xf1, 0xe8, 0x6d, 0x4f, 0x7c, 0xbb, 0x6d, 0x47, 0x90, 0xa4, 0x9b,
+ 0x92, 0x64, 0x2e, 0x86, 0xb4, 0xff, 0xdb, 0x8e, 0xe2, 0x0d, 0x58, 0x9a, 0xc8, 0x20, 0xdc, 0x75,
+ 0x09, 0xa1, 0xeb, 0x8a, 0xfb, 0xd7, 0x25, 0xfd, 0x56, 0x80, 0x6a, 0x74, 0xca, 0x10, 0xaa, 0xea,
+ 0x79, 0x58, 0x72, 0xd7, 0xe2, 0xce, 0x8f, 0xdd, 0x69, 0xd1, 0xfd, 0xc0, 0x27, 0x18, 0xe9, 0x9e,
+ 0x9f, 0x86, 0xd2, 0x58, 0x42, 0xc3, 0x4e, 0xa1, 0x78, 0xe1, 0x1f, 0x5f, 0xfa, 0x65, 0xc2, 0xf5,
+ 0x99, 0x81, 0xac, 0x23, 0xc4, 0xd0, 0xde, 0x84, 0xe5, 0x0e, 0x6e, 0x6b, 0x9d, 0x6f, 0x6b, 0x67,
+ 0x4b, 0x5c, 0xfa, 0x7f, 0x66, 0x36, 0x69, 0x66, 0xbf, 0x06, 0xc8, 0xca, 0xd8, 0x32, 0x48, 0x2a,
+ 0x81, 0xb6, 0x21, 0x87, 0x47, 0x6d, 0x6c, 0xd8, 0x4e, 0xf6, 0x15, 0x9e, 0xd7, 0x32, 0xee, 0x86,
+ 0xc3, 0x49, 0x50, 0x9d, 0x2b, 0x86, 0x6e, 0x71, 0xe0, 0x1a, 0x8d, 0x41, 0xb9, 0xb8, 0x1f, 0xb9,
+ 0xbe, 0xec, 0x20, 0xd7, 0x44, 0x24, 0x28, 0x63, 0x52, 0x63, 0xd0, 0xf5, 0x16, 0x87, 0xae, 0xc9,
+ 0x19, 0x83, 0x05, 0xb0, 0x6b, 0x3d, 0x80, 0x5d, 0x53, 0x33, 0x96, 0x19, 0x01, 0x5e, 0x5f, 0x76,
+ 0xc0, 0x6b, 0x7a, 0xc6, 0x8c, 0xc7, 0xd0, 0xeb, 0xeb, 0x3e, 0xf4, 0x9a, 0xa5, 0xa2, 0xeb, 0x91,
+ 0xa2, 0x21, 0xf0, 0xf5, 0x55, 0x17, 0xbe, 0xe6, 0x23, 0xa1, 0x2f, 0x17, 0x1e, 0xc7, 0xaf, 0x87,
+ 0x13, 0xf8, 0x95, 0xe1, 0xcd, 0x67, 0x22, 0x55, 0xcc, 0x00, 0xb0, 0x87, 0x13, 0x00, 0xb6, 0x38,
+ 0x43, 0xe1, 0x0c, 0x04, 0xfb, 0xd3, 0x70, 0x04, 0x1b, 0x8d, 0x31, 0xf9, 0x34, 0xe7, 0x83, 0xb0,
+ 0x4a, 0x04, 0x84, 0x2d, 0x47, 0xc2, 0x2d, 0xa6, 0x7e, 0x6e, 0x0c, 0x7b, 0x12, 0x82, 0x61, 0x19,
+ 0xda, 0xbc, 0x11, 0xa9, 0x7c, 0x0e, 0x10, 0x7b, 0x12, 0x02, 0x62, 0x97, 0x66, 0xaa, 0x9d, 0x89,
+ 0x62, 0xef, 0x05, 0x51, 0x2c, 0x8a, 0x48, 0x98, 0xbc, 0xdb, 0x1e, 0x01, 0x63, 0x4f, 0xa3, 0x60,
+ 0x2c, 0x83, 0x9a, 0x2f, 0x44, 0x6a, 0x5c, 0x00, 0xc7, 0x1e, 0x4e, 0xe0, 0xd8, 0x95, 0x19, 0x96,
+ 0x36, 0x3f, 0x90, 0xcd, 0x88, 0x59, 0x06, 0x61, 0xf7, 0x92, 0x59, 0x10, 0xf3, 0xd2, 0x73, 0x24,
+ 0xee, 0x8e, 0x79, 0x38, 0x92, 0xe0, 0x62, 0xd3, 0xd4, 0x4d, 0x0e, 0x49, 0x59, 0x47, 0xba, 0x41,
+ 0x80, 0x8d, 0xe7, 0xcd, 0xa6, 0x80, 0x5e, 0x0a, 0x24, 0x7c, 0x1e, 0x4c, 0xfa, 0xa3, 0xe0, 0xc9,
+ 0x52, 0xd8, 0xeb, 0x07, 0x45, 0x39, 0x0e, 0x8a, 0x7c, 0x50, 0x38, 0x1e, 0x84, 0xc2, 0x6b, 0x90,
+ 0x27, 0x00, 0x61, 0x0c, 0xe5, 0xaa, 0x86, 0x8b, 0x72, 0x6f, 0xc2, 0x12, 0x0d, 0x95, 0x0c, 0x30,
+ 0xf3, 0x80, 0x94, 0xa4, 0x01, 0xa9, 0x4c, 0x3e, 0xb0, 0x7d, 0x61, 0x91, 0xe9, 0x45, 0x58, 0xf6,
+ 0xf1, 0xba, 0xc0, 0x83, 0x41, 0x3e, 0xd1, 0xe5, 0xae, 0x71, 0x04, 0xf2, 0x17, 0xc1, 0xdb, 0x21,
+ 0x0f, 0x1e, 0x87, 0x21, 0x59, 0xe1, 0x3b, 0x42, 0xb2, 0xf1, 0x6f, 0x8d, 0x64, 0xfd, 0x40, 0x2a,
+ 0x11, 0x04, 0x52, 0xff, 0x14, 0xbc, 0x33, 0x71, 0x71, 0x69, 0x5b, 0xef, 0x60, 0x0e, 0x6d, 0x68,
+ 0x9b, 0x24, 0x23, 0x3d, 0xfd, 0x9c, 0x03, 0x18, 0xd2, 0x24, 0x5c, 0x6e, 0xc8, 0xc9, 0xf1, 0x88,
+ 0xe2, 0xa2, 0x22, 0x16, 0xf2, 0x39, 0x2a, 0x12, 0x21, 0xf1, 0x08, 0xb3, 0x00, 0x51, 0x90, 0x49,
+ 0x93, 0xf0, 0x51, 0xb3, 0xe3, 0xa1, 0x9b, 0x75, 0xd0, 0x1d, 0xc8, 0xd1, 0xca, 0xb3, 0xa2, 0x1b,
+ 0x16, 0x8f, 0x09, 0x81, 0xa4, 0x86, 0x95, 0x9f, 0x37, 0x8e, 0x08, 0xcf, 0xa1, 0x61, 0xc9, 0x59,
+ 0x83, 0xb7, 0x7c, 0xb9, 0x46, 0x2e, 0x90, 0x6b, 0x5c, 0x83, 0x1c, 0x99, 0xbd, 0x65, 0xa8, 0x6d,
+ 0x4c, 0xeb, 0x9c, 0x39, 0xd9, 0x23, 0x48, 0x9f, 0x0b, 0x50, 0x1e, 0x0b, 0x31, 0xa1, 0x6b, 0x77,
+ 0x4c, 0x32, 0xee, 0xc3, 0xe9, 0xd7, 0x01, 0xce, 0x55, 0x4b, 0xf9, 0x40, 0x1d, 0xd8, 0xb8, 0xc3,
+ 0x97, 0x9b, 0x3b, 0x57, 0xad, 0xb7, 0x28, 0x21, 0x38, 0x70, 0x76, 0x6c, 0x60, 0x1f, 0x20, 0xcc,
+ 0xf9, 0x01, 0x21, 0xaa, 0x42, 0xd6, 0x30, 0x35, 0xdd, 0xd4, 0xec, 0x4b, 0x3a, 0xdb, 0x84, 0xec,
+ 0xf6, 0xf7, 0x92, 0xd9, 0x84, 0x98, 0xdc, 0x4b, 0x66, 0x93, 0x62, 0xca, 0xad, 0x3a, 0xb1, 0x2b,
+ 0x9b, 0x17, 0x0b, 0xd2, 0x47, 0x71, 0xcf, 0x16, 0x77, 0x70, 0x4f, 0xbb, 0xc0, 0xe6, 0x02, 0x8b,
+ 0x99, 0xef, 0x70, 0x57, 0x43, 0x96, 0xec, 0xa3, 0x90, 0xd9, 0x93, 0xde, 0xd0, 0xc2, 0x1d, 0x5e,
+ 0xff, 0x70, 0xfb, 0xa8, 0x09, 0x69, 0x7c, 0x81, 0x07, 0xb6, 0x55, 0xc9, 0x50, 0x1b, 0xbe, 0x32,
+ 0x09, 0x48, 0xc9, 0xe7, 0xed, 0x0a, 0xb1, 0xdc, 0x6f, 0xbe, 0x5c, 0x13, 0x19, 0xf7, 0x0b, 0x7a,
+ 0x5f, 0xb3, 0x71, 0xdf, 0xb0, 0x2f, 0x65, 0x2e, 0x3f, 0x7d, 0x67, 0xa5, 0x1a, 0x94, 0x82, 0x71,
+ 0x1f, 0x3d, 0x05, 0x45, 0x13, 0xdb, 0xaa, 0x36, 0x50, 0x02, 0x49, 0x7a, 0x81, 0x11, 0xd9, 0xcd,
+ 0xdf, 0x4b, 0x66, 0x05, 0x31, 0xbe, 0x97, 0xcc, 0xc6, 0xc5, 0x84, 0x74, 0x04, 0x8f, 0x85, 0xc6,
+ 0x7d, 0xf4, 0x0a, 0xe4, 0xbc, 0x94, 0x41, 0xa0, 0xcb, 0x98, 0x52, 0xc4, 0xf0, 0x78, 0xa5, 0x3f,
+ 0x0b, 0x9e, 0xca, 0x60, 0x59, 0xa4, 0x01, 0x69, 0x13, 0x5b, 0xc3, 0x1e, 0x2b, 0x54, 0x94, 0xb6,
+ 0x5e, 0x9c, 0x2f, 0x63, 0x20, 0xd4, 0x61, 0xcf, 0x96, 0xb9, 0xb0, 0xf4, 0x0e, 0xa4, 0x19, 0x05,
+ 0xe5, 0x21, 0x73, 0x72, 0x70, 0xff, 0xe0, 0xf0, 0xad, 0x03, 0x31, 0x86, 0x00, 0xd2, 0xb5, 0x7a,
+ 0xbd, 0x71, 0xd4, 0x12, 0x05, 0x94, 0x83, 0x54, 0x6d, 0xfb, 0x50, 0x6e, 0x89, 0x71, 0x42, 0x96,
+ 0x1b, 0x7b, 0x8d, 0x7a, 0x4b, 0x4c, 0xa0, 0x25, 0x28, 0xb2, 0xb6, 0x72, 0xef, 0x50, 0x7e, 0x50,
+ 0x6b, 0x89, 0x49, 0x1f, 0xe9, 0xb8, 0x71, 0xb0, 0xd3, 0x90, 0xc5, 0x94, 0xf4, 0x7f, 0x70, 0x35,
+ 0x32, 0xc7, 0xf0, 0x6a, 0x1e, 0x82, 0xaf, 0xe6, 0x21, 0x7d, 0x1a, 0x27, 0xa0, 0x2b, 0x2a, 0x71,
+ 0x40, 0x7b, 0x63, 0x0b, 0xdf, 0x5a, 0x20, 0xeb, 0x18, 0x5b, 0x3d, 0xc1, 0x59, 0x26, 0x3e, 0xc3,
+ 0x76, 0xbb, 0xcb, 0x12, 0x19, 0xe6, 0x27, 0x8b, 0x72, 0x91, 0x53, 0xa9, 0x90, 0xc5, 0xd8, 0xde,
+ 0xc3, 0x6d, 0x5b, 0x61, 0xb7, 0xcd, 0xa2, 0x60, 0x27, 0x47, 0xd8, 0x08, 0xf5, 0x98, 0x11, 0xa5,
+ 0x77, 0x17, 0xda, 0xcb, 0x1c, 0xa4, 0xe4, 0x46, 0x4b, 0x7e, 0x5b, 0x4c, 0x20, 0x04, 0x25, 0xda,
+ 0x54, 0x8e, 0x0f, 0x6a, 0x47, 0xc7, 0xcd, 0x43, 0xb2, 0x97, 0xcb, 0x50, 0x76, 0xf6, 0xd2, 0x21,
+ 0xa6, 0xa4, 0x63, 0x78, 0x3c, 0x22, 0xeb, 0x41, 0x77, 0x00, 0xec, 0x91, 0x62, 0xe2, 0xb6, 0x6e,
+ 0x76, 0xa2, 0x6d, 0xac, 0x35, 0x92, 0x29, 0x87, 0x9c, 0xb3, 0x79, 0xcb, 0x92, 0x7e, 0x27, 0xf8,
+ 0xb5, 0x06, 0x33, 0x9c, 0x43, 0x48, 0x5b, 0xb6, 0x6a, 0x0f, 0x2d, 0xbe, 0xd9, 0xaf, 0xcc, 0x9b,
+ 0x2e, 0x6d, 0x38, 0x8d, 0x63, 0x2a, 0x2e, 0x73, 0x35, 0xd2, 0x6d, 0x28, 0x05, 0xbf, 0x44, 0xef,
+ 0x95, 0x67, 0x6c, 0x71, 0xe9, 0x2e, 0xa0, 0xc9, 0x2c, 0x2a, 0x04, 0x26, 0x0b, 0x61, 0x30, 0xf9,
+ 0xf7, 0x02, 0x3c, 0x31, 0x25, 0x63, 0x42, 0x6f, 0x8e, 0x2d, 0xf2, 0xd5, 0x45, 0xf2, 0xad, 0x0d,
+ 0x46, 0x1b, 0x5b, 0xe6, 0x2d, 0x28, 0xf8, 0xe9, 0xf3, 0x2d, 0xf2, 0x9b, 0xb8, 0x77, 0xd9, 0x83,
+ 0x78, 0xde, 0xf3, 0x81, 0xc2, 0x7f, 0xe8, 0x03, 0x5f, 0xe3, 0x66, 0x42, 0xcc, 0xd4, 0xc9, 0x0a,
+ 0xae, 0x87, 0x94, 0xf8, 0x70, 0x9b, 0x98, 0x0a, 0xbd, 0x2c, 0xd4, 0x54, 0x28, 0x3f, 0x3a, 0xf6,
+ 0x17, 0x37, 0x86, 0x34, 0x63, 0xb0, 0x38, 0xf0, 0x9f, 0x37, 0xb5, 0xf0, 0x8a, 0x20, 0x8c, 0x6c,
+ 0xa1, 0xb7, 0xe1, 0xf1, 0xb1, 0xb4, 0xc7, 0x55, 0x9d, 0x9c, 0x37, 0xfb, 0x79, 0x2c, 0x98, 0xfd,
+ 0x38, 0xaa, 0xfd, 0xb9, 0x4b, 0x2a, 0x98, 0xbb, 0xbc, 0x0d, 0xe0, 0x15, 0x39, 0x88, 0x27, 0x32,
+ 0xf5, 0xe1, 0xa0, 0x43, 0x2d, 0x20, 0x25, 0xb3, 0x0e, 0xba, 0x0d, 0x29, 0x62, 0x49, 0xce, 0x3e,
+ 0x4d, 0x5e, 0x27, 0x62, 0x09, 0xbe, 0x22, 0x09, 0xe3, 0x96, 0x34, 0x40, 0x93, 0x35, 0xd2, 0x88,
+ 0x21, 0x5e, 0x0f, 0x0e, 0xf1, 0x64, 0x64, 0xb5, 0x35, 0x7c, 0xa8, 0x0f, 0x21, 0x45, 0x4f, 0x9e,
+ 0x44, 0x5d, 0x5a, 0x98, 0xe7, 0xb9, 0x2f, 0x69, 0xa3, 0x9f, 0x01, 0xa8, 0xb6, 0x6d, 0x6a, 0xa7,
+ 0x43, 0x6f, 0x80, 0xb5, 0x70, 0xcb, 0xa9, 0x39, 0x7c, 0xdb, 0xd7, 0xb8, 0x09, 0xad, 0x78, 0xa2,
+ 0x3e, 0x33, 0xf2, 0x29, 0x94, 0x0e, 0xa0, 0x14, 0x94, 0x75, 0xb2, 0x35, 0x36, 0x87, 0x60, 0xb6,
+ 0xc6, 0x92, 0x6f, 0x9e, 0xad, 0xb9, 0xb9, 0x5e, 0x82, 0xfd, 0x7d, 0xa0, 0x1d, 0xe9, 0x5f, 0x02,
+ 0x14, 0xfc, 0x86, 0xf7, 0x1d, 0xe7, 0x20, 0x33, 0xd2, 0xae, 0xab, 0x13, 0x29, 0x48, 0xe6, 0x5c,
+ 0xb5, 0x4e, 0xbe, 0xcf, 0x0c, 0xe4, 0x23, 0x01, 0xb2, 0xee, 0xe2, 0x83, 0x3f, 0x22, 0x02, 0x7f,
+ 0x6e, 0xd8, 0xde, 0xc5, 0xfd, 0x7f, 0x0f, 0xd8, 0x7f, 0x9a, 0x84, 0xfb, 0x9f, 0xe6, 0xae, 0x1b,
+ 0x24, 0xa3, 0xca, 0x3a, 0xfe, 0x9d, 0xe6, 0x36, 0xe5, 0xe4, 0x04, 0xbf, 0xe1, 0xf3, 0x20, 0xe1,
+ 0x01, 0xfd, 0x00, 0xd2, 0x6a, 0xdb, 0x2d, 0x66, 0x95, 0x42, 0xaa, 0x3c, 0x0e, 0xeb, 0x46, 0x6b,
+ 0x54, 0xa3, 0x9c, 0x32, 0x97, 0xe0, 0xb3, 0x8a, 0x3b, 0xb3, 0x92, 0xde, 0x20, 0x7a, 0x19, 0x4f,
+ 0xd0, 0x23, 0x96, 0x00, 0x4e, 0x0e, 0x1e, 0x1c, 0xee, 0xec, 0xde, 0xdb, 0x6d, 0xec, 0xf0, 0x30,
+ 0xb9, 0xb3, 0xd3, 0xd8, 0x11, 0xe3, 0x84, 0x4f, 0x6e, 0x3c, 0x38, 0x7c, 0xd8, 0xd8, 0x11, 0x13,
+ 0xd2, 0x5d, 0xc8, 0xb9, 0x5e, 0x85, 0x40, 0x3b, 0xa7, 0x30, 0x27, 0xf0, 0xbb, 0xcd, 0xcb, 0xaa,
+ 0x2b, 0x90, 0x32, 0xf4, 0x0f, 0xf8, 0x4f, 0x93, 0x84, 0xcc, 0x3a, 0x52, 0x07, 0xca, 0x63, 0x2e,
+ 0x09, 0xdd, 0x85, 0x8c, 0x31, 0x3c, 0x55, 0x1c, 0xa3, 0x1d, 0x2b, 0x5f, 0x3a, 0xa0, 0x61, 0x78,
+ 0xda, 0xd3, 0xda, 0xf7, 0xf1, 0xa5, 0xb3, 0x4d, 0xc6, 0xf0, 0xf4, 0x3e, 0xb3, 0x6d, 0x36, 0x4a,
+ 0xdc, 0x3f, 0xca, 0x05, 0x64, 0x9d, 0xab, 0x8a, 0x7e, 0x08, 0x39, 0xd7, 0xdb, 0xb9, 0x3f, 0x3d,
+ 0x23, 0xdd, 0x24, 0x57, 0xef, 0x89, 0x10, 0x04, 0x6a, 0x69, 0xe7, 0x03, 0xa7, 0x66, 0xcb, 0x60,
+ 0x7b, 0x9c, 0xde, 0x99, 0x32, 0xfb, 0xb0, 0xef, 0x20, 0x4b, 0x12, 0xe4, 0xc4, 0x71, 0x5f, 0xf1,
+ 0x7d, 0x4e, 0x20, 0x24, 0x18, 0x27, 0xc2, 0x82, 0xf1, 0x2f, 0xe2, 0x90, 0xf7, 0x95, 0x84, 0xd1,
+ 0xff, 0xfb, 0x1c, 0x57, 0x29, 0x24, 0x8a, 0xf8, 0x78, 0xbd, 0xbf, 0x8a, 0xc1, 0x85, 0xc5, 0x17,
+ 0x5f, 0x58, 0x54, 0xe1, 0xdd, 0xa9, 0x30, 0x27, 0x17, 0xae, 0x30, 0xbf, 0x00, 0xc8, 0xd6, 0x6d,
+ 0xb5, 0xa7, 0x5c, 0xe8, 0xb6, 0x36, 0x38, 0x57, 0x98, 0x69, 0x30, 0x37, 0x23, 0xd2, 0x2f, 0x0f,
+ 0xe9, 0x87, 0x23, 0x6a, 0x25, 0x3f, 0x17, 0x20, 0xeb, 0xa6, 0xf2, 0x8b, 0xfe, 0x73, 0xbc, 0x02,
+ 0x69, 0x9e, 0xad, 0xb2, 0x9f, 0x8e, 0xbc, 0x17, 0x5a, 0x4a, 0xaf, 0x42, 0xb6, 0x8f, 0x6d, 0x95,
+ 0xfa, 0x4c, 0x16, 0x01, 0xdd, 0xfe, 0xcd, 0x57, 0x21, 0xef, 0xfb, 0x5f, 0x4b, 0xdc, 0xe8, 0x41,
+ 0xe3, 0x2d, 0x31, 0x56, 0xcd, 0x7c, 0xfc, 0xd9, 0x7a, 0xe2, 0x00, 0x7f, 0x40, 0x6e, 0x98, 0xdc,
+ 0xa8, 0x37, 0x1b, 0xf5, 0xfb, 0xa2, 0x50, 0xcd, 0x7f, 0xfc, 0xd9, 0x7a, 0x46, 0xc6, 0xb4, 0x8a,
+ 0x7a, 0xf3, 0x3e, 0x94, 0xc7, 0x0e, 0x26, 0x78, 0xa1, 0x11, 0x94, 0x76, 0x4e, 0x8e, 0xf6, 0x77,
+ 0xeb, 0xb5, 0x56, 0x43, 0x79, 0x78, 0xd8, 0x6a, 0x88, 0x02, 0x7a, 0x1c, 0x96, 0xf7, 0x77, 0x7f,
+ 0xd4, 0x6c, 0x29, 0xf5, 0xfd, 0xdd, 0xc6, 0x41, 0x4b, 0xa9, 0xb5, 0x5a, 0xb5, 0xfa, 0x7d, 0x31,
+ 0xbe, 0xf5, 0x87, 0x3c, 0x94, 0x6b, 0xdb, 0xf5, 0x5d, 0x92, 0xaf, 0x6b, 0x6d, 0x95, 0xba, 0x87,
+ 0x3a, 0x24, 0x69, 0x3d, 0x68, 0xea, 0xab, 0xad, 0xea, 0xf4, 0xd2, 0x38, 0xba, 0x07, 0x29, 0x5a,
+ 0x2a, 0x42, 0xd3, 0x9f, 0x71, 0x55, 0x67, 0xd4, 0xca, 0xc9, 0x64, 0xe8, 0x75, 0x9a, 0xfa, 0xae,
+ 0xab, 0x3a, 0xbd, 0x74, 0x8e, 0xf6, 0x21, 0xe3, 0x54, 0x0a, 0x66, 0x3d, 0xb6, 0xaa, 0xce, 0xac,
+ 0x67, 0x93, 0xa5, 0xb1, 0x8a, 0xcb, 0xf4, 0x27, 0x5f, 0xd5, 0x19, 0x45, 0x75, 0xb4, 0x0b, 0x69,
+ 0x8e, 0x76, 0x67, 0xbc, 0xe2, 0xaa, 0xce, 0x2a, 0x93, 0x23, 0x19, 0x72, 0x5e, 0x2d, 0x6b, 0xf6,
+ 0x43, 0xb6, 0xea, 0x1c, 0xff, 0x0b, 0xd0, 0x3b, 0x50, 0x0c, 0x22, 0xe9, 0xf9, 0x5e, 0x8a, 0x55,
+ 0xe7, 0x2c, 0xc8, 0x13, 0xfd, 0x41, 0x58, 0x3d, 0xdf, 0xcb, 0xb1, 0xea, 0x9c, 0xf5, 0x79, 0xf4,
+ 0x1e, 0x2c, 0x4d, 0xc2, 0xde, 0xf9, 0x1f, 0x92, 0x55, 0x17, 0xa8, 0xd8, 0xa3, 0x3e, 0xa0, 0x10,
+ 0xb8, 0xbc, 0xc0, 0xbb, 0xb2, 0xea, 0x22, 0x05, 0x7c, 0xd4, 0x81, 0xf2, 0x38, 0x06, 0x9d, 0xf7,
+ 0x9d, 0x59, 0x75, 0xee, 0x62, 0x3e, 0x1b, 0x25, 0x88, 0x49, 0xe7, 0x7d, 0x77, 0x56, 0x9d, 0xbb,
+ 0xb6, 0x8f, 0x4e, 0x00, 0x7c, 0xb0, 0x72, 0x8e, 0x77, 0x68, 0xd5, 0x79, 0xaa, 0xfc, 0xc8, 0x80,
+ 0xe5, 0x30, 0xbc, 0xb9, 0xc8, 0xb3, 0xb4, 0xea, 0x42, 0xc5, 0x7f, 0x62, 0xcf, 0x41, 0xe4, 0x38,
+ 0xdf, 0x33, 0xb5, 0xea, 0x9c, 0x7f, 0x01, 0xb6, 0x1b, 0x9f, 0x7f, 0xb5, 0x2a, 0x7c, 0xf1, 0xd5,
+ 0xaa, 0xf0, 0x8f, 0xaf, 0x56, 0x85, 0x4f, 0xbe, 0x5e, 0x8d, 0x7d, 0xf1, 0xf5, 0x6a, 0xec, 0x6f,
+ 0x5f, 0xaf, 0xc6, 0x7e, 0xfc, 0xfc, 0xb9, 0x66, 0x77, 0x87, 0xa7, 0x1b, 0x6d, 0xbd, 0xbf, 0xe9,
+ 0x7f, 0xd9, 0x1b, 0xf6, 0x9e, 0xf8, 0x34, 0x4d, 0x03, 0xea, 0xad, 0x7f, 0x07, 0x00, 0x00, 0xff,
+ 0xff, 0x48, 0xbe, 0x7d, 0x8c, 0x6f, 0x2c, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
@@ -6828,53 +6762,6 @@ func (m *ResponsePrepareProposal) MarshalToSizedBuffer(dAtA []byte) (int, error)
_ = i
var l int
_ = l
- if m.ConsensusParamUpdates != nil {
- {
- size, err := m.ConsensusParamUpdates.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintTypes(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x2a
- }
- if len(m.ValidatorUpdates) > 0 {
- for iNdEx := len(m.ValidatorUpdates) - 1; iNdEx >= 0; iNdEx-- {
- {
- size, err := m.ValidatorUpdates[iNdEx].MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintTypes(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x22
- }
- }
- if len(m.TxResults) > 0 {
- for iNdEx := len(m.TxResults) - 1; iNdEx >= 0; iNdEx-- {
- {
- size, err := m.TxResults[iNdEx].MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintTypes(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x1a
- }
- }
- if len(m.AppHash) > 0 {
- i -= len(m.AppHash)
- copy(dAtA[i:], m.AppHash)
- i = encodeVarintTypes(dAtA, i, uint64(len(m.AppHash)))
- i--
- dAtA[i] = 0x12
- }
if len(m.TxRecords) > 0 {
for iNdEx := len(m.TxRecords) - 1; iNdEx >= 0; iNdEx-- {
{
@@ -6912,53 +6799,6 @@ func (m *ResponseProcessProposal) MarshalToSizedBuffer(dAtA []byte) (int, error)
_ = i
var l int
_ = l
- if m.ConsensusParamUpdates != nil {
- {
- size, err := m.ConsensusParamUpdates.MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintTypes(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x2a
- }
- if len(m.ValidatorUpdates) > 0 {
- for iNdEx := len(m.ValidatorUpdates) - 1; iNdEx >= 0; iNdEx-- {
- {
- size, err := m.ValidatorUpdates[iNdEx].MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintTypes(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x22
- }
- }
- if len(m.TxResults) > 0 {
- for iNdEx := len(m.TxResults) - 1; iNdEx >= 0; iNdEx-- {
- {
- size, err := m.TxResults[iNdEx].MarshalToSizedBuffer(dAtA[:i])
- if err != nil {
- return 0, err
- }
- i -= size
- i = encodeVarintTypes(dAtA, i, uint64(size))
- }
- i--
- dAtA[i] = 0x1a
- }
- }
- if len(m.AppHash) > 0 {
- i -= len(m.AppHash)
- copy(dAtA[i:], m.AppHash)
- i = encodeVarintTypes(dAtA, i, uint64(len(m.AppHash)))
- i--
- dAtA[i] = 0x12
- }
if m.Status != 0 {
i = encodeVarintTypes(dAtA, i, uint64(m.Status))
i--
@@ -7640,12 +7480,12 @@ func (m *Misbehavior) MarshalToSizedBuffer(dAtA []byte) (int, error) {
i--
dAtA[i] = 0x28
}
- n54, err54 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Time):])
- if err54 != nil {
- return 0, err54
+ n52, err52 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Time):])
+ if err52 != nil {
+ return 0, err52
}
- i -= n54
- i = encodeVarintTypes(dAtA, i, uint64(n54))
+ i -= n52
+ i = encodeVarintTypes(dAtA, i, uint64(n52))
i--
dAtA[i] = 0x22
if m.Height != 0 {
@@ -8788,26 +8628,6 @@ func (m *ResponsePrepareProposal) Size() (n int) {
n += 1 + l + sovTypes(uint64(l))
}
}
- l = len(m.AppHash)
- if l > 0 {
- n += 1 + l + sovTypes(uint64(l))
- }
- if len(m.TxResults) > 0 {
- for _, e := range m.TxResults {
- l = e.Size()
- n += 1 + l + sovTypes(uint64(l))
- }
- }
- if len(m.ValidatorUpdates) > 0 {
- for _, e := range m.ValidatorUpdates {
- l = e.Size()
- n += 1 + l + sovTypes(uint64(l))
- }
- }
- if m.ConsensusParamUpdates != nil {
- l = m.ConsensusParamUpdates.Size()
- n += 1 + l + sovTypes(uint64(l))
- }
return n
}
@@ -8820,26 +8640,6 @@ func (m *ResponseProcessProposal) Size() (n int) {
if m.Status != 0 {
n += 1 + sovTypes(uint64(m.Status))
}
- l = len(m.AppHash)
- if l > 0 {
- n += 1 + l + sovTypes(uint64(l))
- }
- if len(m.TxResults) > 0 {
- for _, e := range m.TxResults {
- l = e.Size()
- n += 1 + l + sovTypes(uint64(l))
- }
- }
- if len(m.ValidatorUpdates) > 0 {
- for _, e := range m.ValidatorUpdates {
- l = e.Size()
- n += 1 + l + sovTypes(uint64(l))
- }
- }
- if m.ConsensusParamUpdates != nil {
- l = m.ConsensusParamUpdates.Size()
- n += 1 + l + sovTypes(uint64(l))
- }
return n
}
@@ -14719,144 +14519,6 @@ func (m *ResponsePrepareProposal) Unmarshal(dAtA []byte) error {
return err
}
iNdEx = postIndex
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field AppHash", wireType)
- }
- var byteLen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowTypes
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- byteLen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if byteLen < 0 {
- return ErrInvalidLengthTypes
- }
- postIndex := iNdEx + byteLen
- if postIndex < 0 {
- return ErrInvalidLengthTypes
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.AppHash = append(m.AppHash[:0], dAtA[iNdEx:postIndex]...)
- if m.AppHash == nil {
- m.AppHash = []byte{}
- }
- iNdEx = postIndex
- case 3:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field TxResults", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowTypes
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthTypes
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthTypes
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.TxResults = append(m.TxResults, &ExecTxResult{})
- if err := m.TxResults[len(m.TxResults)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 4:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ValidatorUpdates", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowTypes
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthTypes
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthTypes
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.ValidatorUpdates = append(m.ValidatorUpdates, &ValidatorUpdate{})
- if err := m.ValidatorUpdates[len(m.ValidatorUpdates)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 5:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ConsensusParamUpdates", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowTypes
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthTypes
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthTypes
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.ConsensusParamUpdates == nil {
- m.ConsensusParamUpdates = &types1.ConsensusParams{}
- }
- if err := m.ConsensusParamUpdates.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipTypes(dAtA[iNdEx:])
@@ -14926,144 +14588,6 @@ func (m *ResponseProcessProposal) Unmarshal(dAtA []byte) error {
break
}
}
- case 2:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field AppHash", wireType)
- }
- var byteLen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowTypes
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- byteLen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if byteLen < 0 {
- return ErrInvalidLengthTypes
- }
- postIndex := iNdEx + byteLen
- if postIndex < 0 {
- return ErrInvalidLengthTypes
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.AppHash = append(m.AppHash[:0], dAtA[iNdEx:postIndex]...)
- if m.AppHash == nil {
- m.AppHash = []byte{}
- }
- iNdEx = postIndex
- case 3:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field TxResults", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowTypes
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthTypes
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthTypes
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.TxResults = append(m.TxResults, &ExecTxResult{})
- if err := m.TxResults[len(m.TxResults)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 4:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ValidatorUpdates", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowTypes
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthTypes
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthTypes
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- m.ValidatorUpdates = append(m.ValidatorUpdates, &ValidatorUpdate{})
- if err := m.ValidatorUpdates[len(m.ValidatorUpdates)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
- case 5:
- if wireType != 2 {
- return fmt.Errorf("proto: wrong wireType = %d for field ConsensusParamUpdates", wireType)
- }
- var msglen int
- for shift := uint(0); ; shift += 7 {
- if shift >= 64 {
- return ErrIntOverflowTypes
- }
- if iNdEx >= l {
- return io.ErrUnexpectedEOF
- }
- b := dAtA[iNdEx]
- iNdEx++
- msglen |= int(b&0x7F) << shift
- if b < 0x80 {
- break
- }
- }
- if msglen < 0 {
- return ErrInvalidLengthTypes
- }
- postIndex := iNdEx + msglen
- if postIndex < 0 {
- return ErrInvalidLengthTypes
- }
- if postIndex > l {
- return io.ErrUnexpectedEOF
- }
- if m.ConsensusParamUpdates == nil {
- m.ConsensusParamUpdates = &types1.ConsensusParams{}
- }
- if err := m.ConsensusParamUpdates.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
- return err
- }
- iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipTypes(dAtA[iNdEx:])
diff --git a/proto/tendermint/abci/types.proto b/proto/tendermint/abci/types.proto
index 7f9e57df5..e94ea3606 100644
--- a/proto/tendermint/abci/types.proto
+++ b/proto/tendermint/abci/types.proto
@@ -290,18 +290,10 @@ message ResponseApplySnapshotChunk {
message ResponsePrepareProposal {
repeated TxRecord tx_records = 1;
- bytes app_hash = 2;
- repeated ExecTxResult tx_results = 3;
- repeated ValidatorUpdate validator_updates = 4;
- tendermint.types.ConsensusParams consensus_param_updates = 5;
}
message ResponseProcessProposal {
ProposalStatus status = 1;
- bytes app_hash = 2;
- repeated ExecTxResult tx_results = 3;
- repeated ValidatorUpdate validator_updates = 4;
- tendermint.types.ConsensusParams consensus_param_updates = 5;
enum ProposalStatus {
UNKNOWN = 0;
diff --git a/spec/abci++/abci++_app_requirements.md b/spec/abci++/abci++_app_requirements.md
index cd4d877c4..c9c99d5c1 100644
--- a/spec/abci++/abci++_app_requirements.md
+++ b/spec/abci++/abci++_app_requirements.md
@@ -23,74 +23,55 @@ returns via `ResponsePrepareProposal` to Tendermint, also known as the prepared
Process *p*'s prepared proposal can differ in two different rounds where *p* is the proposer.
-* Requirement 1 [`PrepareProposal`, header-changes]: When the blockchain is in same-block execution mode,
- *p*'s Application provides values for the following parameters in `ResponsePrepareProposal`:
- `AppHash`, `TxResults`, `ConsensusParams`, `ValidatorUpdates`. Provided values for
- `ConsensusParams` and `ValidatorUpdates` MAY be empty to denote that the Application
- wishes to keep the current values.
-
-Parameters `AppHash`, `TxResults`, `ConsensusParams`, and `ValidatorUpdates` are used by Tendermint to
-compute various hashes in the block header that will finally be part of the proposal.
-
-* Requirement 2 [`PrepareProposal`, no-header-changes]: When the blockchain is in next-block execution
- mode, *p*'s Application does not provide values for the following parameters in `ResponsePrepareProposal`:
- `AppHash`, `TxResults`, `ConsensusParams`, `ValidatorUpdates`.
-
-In practical terms, Requirements 1 and 2 imply that Tendermint will (a) panic if the Application is in
-same-block execution mode and *does not* provide values for
-`AppHash`, `TxResults`, `ConsensusParams`, and `ValidatorUpdates`, or
-(b) log an error if the Application is in next-block execution mode and *does* provide values for
-`AppHash`, `TxResults`, `ConsensusParams`, or `ValidatorUpdates` (the values provided will be ignored).
-
-* Requirement 3 [`PrepareProposal`, timeliness]: If *p*'s Application fully executes prepared blocks in
+* Requirement 1 [`PrepareProposal`, timeliness]: If *p*'s Application fully executes prepared blocks in
`PrepareProposal` and the network is in a synchronous period while processes *p* and *q* are in *rp*,
then the value of *TimeoutPropose* at *q* must be such that *q*'s propose timer does not time out
(which would result in *q* prevoting `nil` in *rp*).
Full execution of blocks at `PrepareProposal` time stands on Tendermint's critical path. Thus,
-Requirement 3 ensures the Application will set a value for `TimeoutPropose` such that the time it takes
+Requirement 1 ensures the Application will set a value for `TimeoutPropose` such that the time it takes
to fully execute blocks in `PrepareProposal` does not interfere with Tendermint's propose timer.
-Note that violation of Requirement 3 may just lead to further rounds, but will not compromise liveness.
+Note that violation of Requirement 1 may just lead to further rounds, but will not compromise liveness.
-* Requirement 4 [`PrepareProposal`, tx-size]: When *p*'s Application calls `ResponsePrepareProposal`, the
+* Requirement 2 [`PrepareProposal`, tx-size]: When *p*'s Application calls `ResponsePrepareProposal`, the
total size in bytes of the transactions returned does not exceed `RequestPrepareProposal.max_tx_bytes`.
Busy blockchains might seek to maximize the amount of transactions included in each block. Under those conditions,
Tendermint might choose to increase the transactions passed to the Application via `RequestPrepareProposal.txs`
beyond the `RequestPrepareProposal.max_tx_bytes` limit. The idea is that, if the Application drops some of
those transactions, it can still return a transaction list whose byte size is as close to
-`RequestPrepareProposal.max_tx_bytes` as possible. Thus, Requirement 4 ensures that the size in bytes of the
+`RequestPrepareProposal.max_tx_bytes` as possible. Thus, Requirement 2 ensures that the size in bytes of the
transaction list returned by the application will never cause the resulting block to go beyond its byte size
limit.
-* Requirement 5 [`PrepareProposal`, `ProcessProposal`, coherence]: For any two correct processes *p* and *q*,
+* Requirement 3 [`PrepareProposal`, `ProcessProposal`, coherence]: For any two correct processes *p* and *q*,
if *q*'s Tendermint calls `RequestProcessProposal` on *up*,
*q*'s Application returns Accept in `ResponseProcessProposal`.
-Requirement 5 makes sure that blocks proposed by correct processes *always* pass the correct receiving process's
+Requirement 3 makes sure that blocks proposed by correct processes *always* pass the correct receiving process's
`ProcessProposal` check.
On the other hand, if there is a deterministic bug in `PrepareProposal` or `ProcessProposal` (or in both),
strictly speaking, this makes all processes that hit the bug byzantine. This is a problem in practice,
as very often validators are running the Application from the same codebase, so potentially *all* would
likely hit the bug at the same time. This would result in most (or all) processes prevoting `nil`, with the
-serious consequences on Tendermint's liveness that this entails. Due to its criticality, Requirement 5 is a
+serious consequences on Tendermint's liveness that this entails. Due to its criticality, Requirement 3 is a
target for extensive testing and automated verification.
-* Requirement 6 [`ProcessProposal`, determinism-1]: `ProcessProposal` is a (deterministic) function of the current
+* Requirement 4 [`ProcessProposal`, determinism-1]: `ProcessProposal` is a (deterministic) function of the current
state and the block that is about to be applied. In other words, for any correct process *p*, and any arbitrary block *u*,
if *p*'s Tendermint calls `RequestProcessProposal` on *u* at height *h*,
then *p*'s Application's acceptance or rejection **exclusively** depends on *u* and *sp,h-1*.
-* Requirement 7 [`ProcessProposal`, determinism-2]: For any two correct processes *p* and *q*, and any arbitrary
+* Requirement 5 [`ProcessProposal`, determinism-2]: For any two correct processes *p* and *q*, and any arbitrary
block *u*,
if *p*'s (resp. *q*'s) Tendermint calls `RequestProcessProposal` on *u* at height *h*,
then *p*'s Application accepts *u* if and only if *q*'s Application accepts *u*.
- Note that this requirement follows from Requirement 6 and the Agreement property of consensus.
+ Note that this requirement follows from Requirement 4 and the Agreement property of consensus.
-Requirements 6 and 7 ensure that all correct processes will react in the same way to a proposed block, even
+Requirements 4 and 5 ensure that all correct processes will react in the same way to a proposed block, even
if the proposer is Byzantine. However, `ProcessProposal` may contain a bug that renders the
acceptance or rejection of the block non-deterministic, and therefore prevents processes hitting
-the bug from fulfilling Requirements 6 or 7 (effectively making those processes Byzantine).
+the bug from fulfilling Requirements 4 or 5 (effectively making those processes Byzantine).
In such a scenario, Tendermint's liveness cannot be guaranteed.
Again, this is a problem in practice if most validators are running the same software, as they are likely
to hit the bug at the same point. There is currently no clear solution to help with this situation, so
@@ -108,64 +89,58 @@ Let *erp* be the vote extension that the Application of a
Let *wrp* be the proposed block that *p*'s Tendermint passes to the Application via `RequestExtendVote`
in round *r*, height *h*.
-* Requirement 8 [`ExtendVote`, `VerifyVoteExtension`, coherence]: For any two different correct
+* Requirement 6 [`ExtendVote`, `VerifyVoteExtension`, coherence]: For any two different correct
processes *p* and *q*, if *q* receives *erp* from *p* in height *h*, *q*'s
Application returns Accept in `ResponseVerifyVoteExtension`.
-Requirement 8 constrains the creation and handling of vote extensions in a similar way as Requirement 5
+Requirement 6 constrains the creation and handling of vote extensions in a similar way as Requirement 3
constrains the creation and handling of proposed blocks.
-Requirement 8 ensures that extensions created by correct processes *always* pass the `VerifyVoteExtension`
+Requirement 6 ensures that extensions created by correct processes *always* pass the `VerifyVoteExtension`
checks performed by correct processes receiving those extensions.
However, if there is a (deterministic) bug in `ExtendVote` or `VerifyVoteExtension` (or in both),
we will face the same liveness issues as described for Requirement 5, as Precommit messages with invalid vote
extensions will be discarded.
-* Requirement 9 [`VerifyVoteExtension`, determinism-1]: `VerifyVoteExtension` is a (deterministic) function of
+* Requirement 7 [`VerifyVoteExtension`, determinism-1]: `VerifyVoteExtension` is a (deterministic) function of
the current state, the vote extension received, and the prepared proposal that the extension refers to.
In other words, for any correct process *p*, and any arbitrary vote extension *e*, and any arbitrary
block *w*, if *p*'s (resp. *q*'s) Tendermint calls `RequestVerifyVoteExtension` on *e* and *w* at height *h*,
then *p*'s Application's acceptance or rejection **exclusively** depends on *e*, *w* and *sp,h-1*.
-* Requirement 10 [`VerifyVoteExtension`, determinism-2]: For any two correct processes *p* and *q*,
+* Requirement 8 [`VerifyVoteExtension`, determinism-2]: For any two correct processes *p* and *q*,
and any arbitrary vote extension *e*, and any arbitrary block *w*,
if *p*'s (resp. *q*'s) Tendermint calls `RequestVerifyVoteExtension` on *e* and *w* at height *h*,
then *p*'s Application accepts *e* if and only if *q*'s Application accepts *e*.
- Note that this requirement follows from Requirement 9 and the Agreement property of consensus.
+ Note that this requirement follows from Requirement 7 and the Agreement property of consensus.
-Requirements 9 and 10 ensure that the validation of vote extensions will be deterministic at all
+Requirements 7 and 8 ensure that the validation of vote extensions will be deterministic at all
correct processes.
-Requirements 9 and 10 protect against arbitrary vote extension data from Byzantine processes,
-in a similar way as Requirements 6 and 7 protect against arbitrary proposed blocks.
-Requirements 9 and 10 can be violated by a bug inducing non-determinism in
+Requirements 7 and 8 protect against arbitrary vote extension data from Byzantine processes,
+in a similar way as Requirements 4 and 5 protect against arbitrary proposed blocks.
+Requirements 7 and 8 can be violated by a bug inducing non-determinism in
`VerifyVoteExtension`. In this case liveness can be compromised.
Extra care should be put in the implementation of `ExtendVote` and `VerifyVoteExtension`.
As a general rule, `VerifyVoteExtension` SHOULD always accept the vote extension.
-* Requirement 11 [*all*, no-side-effects]: *p*'s calls to `RequestPrepareProposal`,
+* Requirement 9 [*all*, no-side-effects]: *p*'s calls to `RequestPrepareProposal`,
`RequestProcessProposal`, `RequestExtendVote`, and `RequestVerifyVoteExtension` at height *h* do
not modify *sp,h-1*.
-* Requirement 12 [`ExtendVote`, `FinalizeBlock`, non-dependency]: for any correct process *p*,
+* Requirement 10 [`ExtendVote`, `FinalizeBlock`, non-dependency]: for any correct process *p*,
and any vote extension *e* that *p* received at height *h*, the computation of
*sp,h* does not depend on *e*.
The call to correct process *p*'s `RequestFinalizeBlock` at height *h*, with block *vp,h*
passed as parameter, creates state *sp,h*.
-Additionally,
+Additionally, *p*'s `FinalizeBlock` creates a set of transaction results *Tp,h*.
-* in next-block execution mode, *p*'s `FinalizeBlock` creates a set of transaction results *Tp,h*,
-* in same-block execution mode, *p*'s `PrepareProposal` creates a set of transaction results *Tp,h*
- if *p* was the proposer of *vp,h*. If *p* was not the proposer of *vp,h*,
- `ProcessProposal` creates *Tp,h*. `FinalizeBlock` MAY re-create *Tp,h* if it was
- removed from memory during the execution of height *h*.
-
-* Requirement 13 [`FinalizeBlock`, determinism-1]: For any correct process *p*,
+* Requirement 11 [`FinalizeBlock`, determinism-1]: For any correct process *p*,
*sp,h* exclusively depends on *sp,h-1* and *vp,h*.
-* Requirement 14 [`FinalizeBlock`, determinism-2]: For any correct process *p*,
+* Requirement 12 [`FinalizeBlock`, determinism-2]: For any correct process *p*,
the contents of *Tp,h* exclusively depend on *sp,h-1* and *vp,h*.
-Note that Requirements 13 and 14, combined with Agreement property of consensus ensure
+Note that Requirements 11 and 12, combined with Agreement property of consensus ensure
state machine replication, i.e., the Application state evolves consistently at all correct processes.
Finally, notice that neither `PrepareProposal` nor `ExtendVote` have determinism-related
@@ -449,11 +424,6 @@ including the list of all its transactions synchronously to the Application.
The block delivered (and thus the transaction order) is the same at all correct nodes as guaranteed
by the Agreement property of Tendermint consensus.
-In same block execution mode, field `LastResultsHash` in the block header refers to the results
-of all transactions stored in that block. Therefore,
-`PrepareProposal` must return `ExecTxResult` so that it can
-be used to build the block to be proposed in the current height.
-
The `Data` field in `ExecTxResult` contains an array of bytes with the transaction result.
It must be deterministic (i.e., the same value must be returned at all nodes), but it can contain arbitrary
data. Likewise, the value of `Code` must be deterministic.
@@ -462,9 +432,7 @@ though it is still included in the block. Invalid transaction are not indexed, a
considered analogous to those that failed `CheckTx`.
Both the `Code` and `Data` are included in a structure that is hashed into the
-`LastResultsHash` of the block header in the next height (next block execution mode), or the
-header of the block to propose in the current height (same block execution mode, `ExecTxResult` as
-part of `PrepareProposal`).
+`LastResultsHash` of the block header in the next height.
`Events` include any events for the execution, which Tendermint will use to index
the transaction by. This allows transactions to be queried according to what
@@ -474,10 +442,7 @@ events took place during their execution.
The application may set the validator set during
[`InitChain`](./abci%2B%2B_methods.md#initchain), and may update it during
-[`FinalizeBlock`](./abci%2B%2B_methods.md#finalizeblock)
-(next block execution mode) or
-[`PrepareProposal`](./abci%2B%2B_methods.md#prepareproposal)/[`ProcessProposal`](./abci%2B%2B_methods.md#processproposal)
-(same block execution mode). In all cases, a structure of type
+[`FinalizeBlock`](./abci%2B%2B_methods.md#finalizeblock). In both cases, a structure of type
[`ValidatorUpdate`](./abci%2B%2B_methods.md#validatorupdate) is returned.
The `InitChain` method, used to initialize the Application, can return a list of validators.
@@ -521,10 +486,7 @@ They enforce certain limits in the blockchain, like the maximum size
of blocks, amount of gas used in a block, and the maximum acceptable age of
evidence. They can be set in
[`InitChain`](./abci%2B%2B_methods.md#initchain), and updated in
-[`FinalizeBlock`](./abci%2B%2B_methods.md#finalizeblock)
-(next block execution mode) or
-[`PrepareProposal`](./abci%2B%2B_methods.md#prepareproposal)/[`ProcessProposal`](./abci%2B%2B_methods.md#processproposal)
-(same block execution model).
+[`FinalizeBlock`](./abci%2B%2B_methods.md#finalizeblock).
These parameters are deterministically set and/or updated by the Application, so
all full nodes have the same value at a given height.
@@ -698,10 +660,7 @@ Must always be set to a future height. Once set to a value different from
The application may set the `ConsensusParams` during
[`InitChain`](./abci%2B%2B_methods.md#initchain),
and update them during
-[`FinalizeBlock`](./abci%2B%2B_methods.md#finalizeblock)
-(next block execution mode) or
-[`PrepareProposal`](./abci%2B%2B_methods.md#prepareproposal)/[`ProcessProposal`](./abci%2B%2B_methods.md#processproposal)
-(same block execution mode).
+[`FinalizeBlock`](./abci%2B%2B_methods.md#finalizeblock).
If the `ConsensusParams` is empty, it will be ignored. Each field
that is not empty will be applied in full. For instance, if updating the
`Block.MaxBytes`, applications must also set the other `Block` fields (like
@@ -718,21 +677,13 @@ blockchain.
##### `FinalizeBlock`, `PrepareProposal`/`ProcessProposal`
-In next block execution mode, `ResponseFinalizeBlock` accepts a `ConsensusParams` parameter.
+`ResponseFinalizeBlock` accepts a `ConsensusParams` parameter.
If `ConsensusParams` is `nil`, Tendermint will do nothing.
If `ConsensusParams` is not `nil`, Tendermint will use it.
This way the application can update the consensus parameters over time.
-Likewise, in same block execution mode, `PrepareProposal` and `ProcessProposal` include
-a `ConsensusParams` parameter. `PrepareProposal` may return a `ConsensusParams` to update
-the consensus parameters in the block that is about to be proposed. If it returns `nil`
-the consensus parameters will not be updated. `ProcessProposal` also accepts a
-`ConsensusParams` parameter, which Tendermint will use it to calculate the corresponding
-hashes and sanity-check them against those of the block that triggered `ProcessProposal`
-at the first place.
-
-Note the updates returned in block `H` will take effect right away for block
-`H+1` (both in next block and same block execution mode).
+The updates returned in block `H` will take effect right away for block
+`H+1`.
### `Query`
@@ -769,11 +720,8 @@ For such applications, the `AppHash` provides a much more efficient way to verif
ABCI applications can take advantage of more efficient light-client proofs for
their state as follows:
-* in next block executon mode, return the Merkle root of the deterministic application state in
- `ResponseCommit.Data`. This Merkle root will be included as the `AppHash` in the next block.
-* in same block execution mode, return the Merkle root of the deterministic application state
- in `ResponsePrepareProposal.AppHash`. This Merkle root will be included as the `AppHash` in
- the block that is about to be proposed.
+* return the Merkle root of the deterministic application state in
+ `ResponseFinalizeBlock.Data`. This Merkle root will be included as the `AppHash` in the next block.
* return efficient Merkle proofs about that application state in `ResponseQuery.Proof`
that can be verified using the `AppHash` of the corresponding block.
@@ -1031,8 +979,7 @@ bootstrapping the node (e.g. chain ID, consensus parameters, validator sets, and
from the genesis file and light client RPC servers. It also calls `Info` to verify the following:
* that the app hash from the snapshot it has delivered to the Application matches the apphash
- stored in the next height's block (in next block execution), or the current block's height
- (same block execution)
+ stored in the next height's block
* that the version that the Application returns in `ResponseInfo` matches the version in the
current height's block header
diff --git a/spec/abci++/abci++_basic_concepts.md b/spec/abci++/abci++_basic_concepts.md
index a467b623e..5481f7630 100644
--- a/spec/abci++/abci++_basic_concepts.md
+++ b/spec/abci++/abci++_basic_concepts.md
@@ -11,7 +11,6 @@ title: Overview and basic concepts
- [Mempool methods](#mempool-methods)
- [Info methods](#info-methods)
- [State-sync methods](#state-sync-methods)
-- [Next-block execution vs. same-block execution](#next-block-execution-vs-same-block-execution)
- [Tendermint proposal timeout](#tendermint-proposal-timeout)
- [Deterministic State-Machine Replication](#deterministic-state-machine-replication)
- [Events](#events)
@@ -32,7 +31,7 @@ now better understood than when ABCI was first written. For example, many ideas
scalability can be boiled down to "make the block proposers do work, so the network does not have
to". This includes optimizations such as transaction level signature aggregation, state transition
proofs, etc. Furthermore, many new security properties cannot be achieved in the current paradigm,
-as the Application cannot require validators to do more than execute the transactions contained in
+as the Application cannot require validators to do more than executing the transactions contained in
finalized blocks. This includes features such as threshold cryptography, and guaranteed IBC
connection attempts.
@@ -192,59 +191,6 @@ and an [**Echo**](./abci++_methods.md#echo) method that is used for debugging.
More details on managing state across connections can be found in the section on
[Managing Application State](./abci%2B%2B_app_requirements.md#managing-the-application-state-and-related-topics).
-## Next-block execution vs. same-block execution
-
-[↑ Back to Outline](#outline)
-
-In the original ABCI protocol, the only moment when the Application had access to a
-block was after it was decided. This led to a block execution model, called *next-block
-execution*, where some fields hashed in a block header refer to the execution of the
-previous block, namely:
-
-- the Merkle root of the Application's state
-- the transaction results
-- the consensus parameter updates
-- the validator updates
-
-With ABCI++, an Application may be configured to keep using the next-block execution model, by
-executing the decided block in `FinalizeBlock`. However, the new methods introduced —
-`PrepareProposal` and `ProcessProposal` — disclose the entire proposed block to the
-Application, allowing for its immediate exectution. An Application implementing immediate execution
-may additionally wish to store certain data resulting from the block's execution in the same block
-that has just been executed. This brings about a new execution model, called
-*same-block execution*. An Application implementing this execution model, upon receiving a raw
-proposal via `RequestPrepareProposal` and potentially modifying its transaction list, fully
-executes the resulting prepared proposal as though it was the decided block (immediate execution),
-and the results of the block execution are used as follows:
-
-- The block execution may generate a set of events. The Application should store these events and
- return them back to Tendermint during the `FinalizeBlock` call if the block is finally decided.
-- The Merkle root resulting from executing the prepared proposal is provided in
- `ResponsePrepareProposal` and thus refers to the **current block**. Tendermint
- will use it in the prepared proposal's header.
-- Likewise, the transaction results from executing the prepared proposal are
- provided in `ResponsePrepareProposal` and refer to the transactions in the
- **current block**. Tendermint will use them to calculate the results hash
- in the prepared proposal's header.
-- The consensus parameter updates and validator updates are also provided in
- `ResponsePrepareProposal` and reflect the result of the prepared proposal's
- execution. They come into force in height H+1 (as opposed to the H+2 rule
- in next-block execution model).
-
-If the Application is configured to keep the next-block execution model, it will not
-provide any data in `ResponsePrepareProposal`, other than a potentially modified
-transaction list. The Application may nevertheless choose to perform immediate execution even in
-next-block execution mode, however same-block execution mode *requires* immediate execution.
-
-The long term plan is for the execution model to be set in a new boolean parameter *same_block* in
-`ConsensusParams`. Once this parameter is introduced, it **must not** be changed once the
-blockchain has started, unless the Application developers *really* know what they are doing.
-However, modifying `ConsensusParams` structure cannot be done lightly if we are to
-preserve blockchain compatibility. Therefore we need an interim solution until
-soft upgrades are specified and implemented in Tendermint. This somewhat *unsafe*
-solution consists in Tendermint assuming same-block execution if the Application
-fills the above mentioned fields in `ResponsePrepareProposal`.
-
## Tendermint proposal timeout
Immediate execution requires the Application to fully execute the prepared block
@@ -312,7 +258,7 @@ Sources of non-determinism in applications may include:
See [#56](https://github.com/tendermint/abci/issues/56) for the original discussion.
-Note that some methods (`Query, CheckTx, FinalizeBlock`) return non-deterministic data in the form
+Note that some methods (`Query, FinalizeBlock`) return non-deterministic data in the form
of `Info` and `Log` fields. The `Log` is intended for the literal output from the Application's
logger, while the `Info` is any additional info that should be returned. These are the only fields
that are not included in block header computations, so we don't need agreement
diff --git a/spec/abci++/abci++_methods.md b/spec/abci++/abci++_methods.md
index 9d33652dd..80704935f 100644
--- a/spec/abci++/abci++_methods.md
+++ b/spec/abci++/abci++_methods.md
@@ -323,10 +323,6 @@ title: Methods
| Name | Type | Description | Field Number |
|-------------------------|--------------------------------------------------|---------------------------------------------------------------------------------------------|--------------|
| tx_records | repeated [TxRecord](#txrecord) | Possibly modified list of transactions that have been picked as part of the proposed block. | 2 |
- | app_hash | bytes | The Merkle root hash of the application state. | 3 |
- | tx_results | repeated [ExecTxResult](#exectxresult) | List of structures containing the data resulting from executing the transactions | 4 |
- | validator_updates | repeated [ValidatorUpdate](#validatorupdate) | Changes to validator set (set voting power to 0 to remove). | 5 |
- | consensus_param_updates | [ConsensusParams](#consensusparams) | Changes to gas, size, and other consensus-related parameters. | 6 |
* **Usage**:
* `RequestPrepareProposal`'s parameters `txs`, `misbehavior`, `height`, `time`,
@@ -371,35 +367,9 @@ title: Methods
that the `RequestPrepareProposal.max_tx_bytes` limit is respected by those transaction
records returned in `ResponsePrepareProposal.tx_records` that are marked as `UNMODIFIED` or
`ADDED`.
- * In same-block execution mode, the Application must provide values for
- `ResponsePrepareProposal.app_hash`, `ResponsePrepareProposal.tx_results`,
- `ResponsePrepareProposal.validator_updates`, and
- `ResponsePrepareProposal.consensus_param_updates`, as a result of fully executing the block.
- * The values for `ResponsePrepareProposal.validator_updates`, or
- `ResponsePrepareProposal.consensus_param_updates` may be empty. In this case, Tendermint will keep
- the current values.
- * `ResponsePrepareProposal.validator_updates`, triggered by block `H`, affect validation
- for blocks `H+1`, and `H+2`. Heights following a validator update are affected in the following way:
- * Height `H`: `NextValidatorsHash` includes the new `validator_updates` value.
- * Height `H+1`: The validator set change takes effect and `ValidatorsHash` is updated.
- * Height `H+2`: `*_last_commit` fields in `PrepareProposal`, `ProcessProposal`, and
- `FinalizeBlock` now include the altered validator set.
- * `ResponseFinalizeBlock.consensus_param_updates` returned for block `H` apply to the consensus
- params for block `H+1` even if the change is agreed in block `H`.
- For more information on the consensus parameters,
- see the [consensus parameters](./abci%2B%2B_app_requirements.md#consensus-parameters)
- section.
- * It is the Application's responsibility to set the right value for _TimeoutPropose_ so that
- the (synchronous) execution of the block does not cause other processes to prevote `nil` because
- their propose timeout goes off.
- * In next-block execution mode, Tendermint will ignore parameters
- `ResponsePrepareProposal.app_hash`, `ResponsePrepareProposal.tx_results`,
- `ResponsePrepareProposal.validator_updates`, and `ResponsePrepareProposal.consensus_param_updates`.
* As a result of executing the prepared proposal, the Application may produce block events or transaction events.
The Application must keep those events until a block is decided and then pass them on to Tendermint via
`ResponseFinalizeBlock`.
- * Likewise, in next-block execution mode, the Application must keep all responses to executing
- transactions until it can call `ResponseFinalizeBlock`.
* As a sanity check, Tendermint will check the returned parameters for validity if the Application modified them.
In particular, `ResponsePrepareProposal.tx_records` will be deemed invalid if
* There is a duplicate transaction in the list.
@@ -424,15 +394,9 @@ and _p_'s _validValue_ is `nil`:
returns from the call.
3. The Application uses the information received (transactions, commit info, misbehavior, time) to
(potentially) modify the proposal.
- * in same-block execution mode, the Application fully executes the block and provides values
- for `ResponsePrepareProposal.app_hash`, `ResponsePrepareProposal.tx_results`,
- `ResponsePrepareProposal.validator_updates`, and
- `ResponsePrepareProposal.consensus_param_updates`.
- * in next-block execution mode, _p_'s Tendermint will ignore the values for
- `ResponsePrepareProposal.app_hash`, `ResponsePrepareProposal.tx_results`,
- `ResponsePrepareProposal.validator_updates`, and
- `ResponsePrepareProposal.consensus_param_updates`.
- * in both modes, the Application can manipulate transactions:
+ * the Application MAY fully execute the block and produce a candidate state — immediate
+ execution
+ * the Application can manipulate transactions:
* leave transactions untouched - `TxAction = UNMODIFIED`
* add new transactions (not present initially) to the proposal - `TxAction = ADDED`
* remove (invalid) transactions from the proposal and from the mempool - `TxAction = REMOVED`
@@ -471,10 +435,6 @@ proposal and will not call `RequestPrepareProposal`.
| Name | Type | Description | Field Number |
|-------------------------|--------------------------------------------------|-----------------------------------------------------------------------------------|--------------|
| status | [ProposalStatus](#proposalstatus) | `enum` that signals if the application finds the proposal valid. | 1 |
- | app_hash | bytes | The Merkle root hash of the application state. | 2 |
- | tx_results | repeated [ExecTxResult](#exectxresult) | List of structures containing the data resulting from executing the transactions. | 3 |
- | validator_updates | repeated [ValidatorUpdate](#validatorupdate) | Changes to validator set (set voting power to 0 to remove). | 4 |
- | consensus_param_updates | [ConsensusParams](#consensusparams) | Changes to gas, size, and other consensus-related parameters. | 5 |
* **Usage**:
* Contains all information on the proposed block needed to fully execute it.
@@ -489,15 +449,7 @@ proposal and will not call `RequestPrepareProposal`.
* The height and time values match the values from the header of the proposed block.
* If `ResponseProcessProposal.status` is `REJECT`, Tendermint assumes the proposal received
is not valid.
- * In same-block execution mode, the Application is required to fully execute the block and provide values
- for parameters `ResponseProcessProposal.app_hash`, `ResponseProcessProposal.tx_results`,
- `ResponseProcessProposal.validator_updates`, and `ResponseProcessProposal.consensus_param_updates`,
- so that Tendermint can then verify the hashes in the block's header are correct.
- If the hashes mismatch, Tendermint will reject the block even if `ResponseProcessProposal.status`
- was set to `ACCEPT`.
- * In next-block execution mode, the Application should _not_ provide values for parameters
- `ResponseProcessProposal.app_hash`, `ResponseProcessProposal.tx_results`,
- `ResponseProcessProposal.validator_updates`, and `ResponseProcessProposal.consensus_param_updates`.
+ * The Application MAY fully execute the block — immediate execution
* The implementation of `ProcessProposal` MUST be deterministic. Moreover, the value of
`ResponseProcessProposal.status` MUST **exclusively** depend on the parameters passed in
the call to `RequestProcessProposal`, and the last committed Application state
@@ -669,10 +621,10 @@ message for round _r_, height _h_ from validator _q_ (_q_ ≠ _p_):
to determine rewards and punishments for the validators.
* The Application executes the transactions in `RequestFinalizeBlock.txs` deterministically,
according to the rules set up by the Application, before returning control to Tendermint.
- Alternatively, it can commit the candidate state corresponding to the same block previously
+ Alternatively, it can apply the candidate state corresponding to the same block previously
executed via `PrepareProposal` or `ProcessProposal`.
* `ResponseFinalizeBlock.tx_results[i].Code == 0` only if the _i_-th transaction is fully valid.
- * In next-block execution mode, the Application must provide values for `ResponseFinalizeBlock.app_hash`,
+ * The Application must provide values for `ResponseFinalizeBlock.app_hash`,
`ResponseFinalizeBlock.tx_results`, `ResponseFinalizeBlock.validator_updates`, and
`ResponseFinalizeBlock.consensus_param_updates` as a result of executing the block.
* The values for `ResponseFinalizeBlock.validator_updates`, or
@@ -688,16 +640,8 @@ message for round _r_, height _h_ from validator _q_ (_q_ ≠ _p_):
params for block `H+1`. For more information on the consensus parameters,
see the [consensus parameters](./abci%2B%2B_app_requirements.md#consensus-parameters)
section.
-
- * In same-block execution mode, Tendermint will log an error and ignore values for
- `ResponseFinalizeBlock.app_hash`, `ResponseFinalizeBlock.tx_results`, `ResponseFinalizeBlock.validator_updates`,
- and `ResponsePrepareProposal.consensus_param_updates`, as those must have been provided by `PrepareProposal`.
* `ResponseFinalizeBlock.app_hash` contains an (optional) Merkle root hash of the application state.
- * `ResponseFinalizeBlock.app_hash` is included
- * [in next-block execution mode] as the `Header.AppHash` in the next block.
- * [in same-block execution mode] as the `Header.AppHash` in the current block. In this case,
- `PrepareProposal` is required to fully execute the block and set the App hash before
- returning the proposed block to Tendermint.
+ * `ResponseFinalizeBlock.app_hash` is included as the `Header.AppHash` in the next block.
* `ResponseFinalizeBlock.app_hash` may also be empty or hard-coded, but MUST be
**deterministic** - it must not be a function of anything that did not come from the parameters
of `RequestFinalizeBlock` and the previous committed state.
@@ -707,9 +651,6 @@ message for round _r_, height _h_ from validator _q_ (_q_ ≠ _p_):
making the Application's state evolve in the context of state machine replication.
* Currently, Tendermint will fill up all fields in `RequestFinalizeBlock`, even if they were
already passed on to the Application via `RequestPrepareProposal` or `RequestProcessProposal`.
- If the Application is in same-block execution mode, it applies the right candidate state here
- (rather than executing the whole block). In this case the Application disregards all parameters in
- `RequestFinalizeBlock` except `RequestFinalizeBlock.hash`.
#### When does Tendermint call `FinalizeBlock`?
@@ -830,8 +771,8 @@ Most of the data structures used in ABCI are shared [common data structures](../
| height | uint64 | The height at which the snapshot was taken (after commit). | 1 |
| format | uint32 | An application-specific snapshot format, allowing applications to version their snapshot data format and make backwards-incompatible changes. Tendermint does not interpret this. | 2 |
| chunks | uint32 | The number of chunks in the snapshot. Must be at least 1 (even if empty). | 3 |
- | hash | bytes | TAn arbitrary snapshot hash. Must be equal only for identical snapshots across nodes. Tendermint does not interpret the hash, it only compares them. | 3 |
- | metadata | bytes | Arbitrary application metadata, for example chunk hashes or other verification data. | 3 |
+ | hash | bytes | An arbitrary snapshot hash. Must be equal only for identical snapshots across nodes. Tendermint does not interpret the hash, it only compares them. | 4 |
+ | metadata | bytes | Arbitrary application metadata, for example chunk hashes or other verification data. | 5 |
* **Usage**:
* Used for state sync snapshots, see the [state sync section](../p2p/messages/state-sync.md) for details.