From b7e3c1f79c864844b15285c6e5906bf38d9a8076 Mon Sep 17 00:00:00 2001 From: Jonathan Gimeno Date: Sat, 30 Dec 2023 15:59:38 +0100 Subject: [PATCH 1/8] remove mentions of bindings for creating the market. --- wasmbinding/bindings/msg.go | 8 ------- wasmbinding/exec_perp.go | 45 ----------------------------------- wasmbinding/exec_perp_test.go | 40 ------------------------------- wasmbinding/exec_test.go | 42 -------------------------------- wasmbinding/message_plugin.go | 8 ------- 5 files changed, 143 deletions(-) diff --git a/wasmbinding/bindings/msg.go b/wasmbinding/bindings/msg.go index 836406af1..a8c2ac6b3 100644 --- a/wasmbinding/bindings/msg.go +++ b/wasmbinding/bindings/msg.go @@ -17,7 +17,6 @@ type NibiruMsg struct { DonateToInsuranceFund *DonateToInsuranceFund `json:"donate_to_insurance_fund,omitempty"` // TODO InsuranceFundWithdraw *InsuranceFundWithdraw `json:"insurance_fund_withdraw,omitempty"` SetMarketEnabled *SetMarketEnabled `json:"set_market_enabled,omitempty"` - CreateMarket *CreateMarket `json:"create_market,omitempty"` EditOracleParams *EditOracleParams `json:"edit_oracle_params,omitempty"` @@ -53,13 +52,6 @@ type SetMarketEnabled struct { Enabled bool `json:"enabled"` } -type CreateMarket struct { - Pair string `json:"pair"` - PegMult sdk.Dec `json:"peg_mult,omitempty"` - SqrtDepth sdk.Dec `json:"sqrt_depth,omitempty"` - MarketParams *MarketParams `json:"market_params,omitempty"` -} - type MarketParams struct { Pair string Enabled bool `json:"enabled,omitempty"` diff --git a/wasmbinding/exec_perp.go b/wasmbinding/exec_perp.go index d3c4badd6..457975938 100644 --- a/wasmbinding/exec_perp.go +++ b/wasmbinding/exec_perp.go @@ -1,8 +1,6 @@ package wasmbinding import ( - "time" - wasmvmtypes "github.com/CosmWasm/wasmvm/types" sdk "github.com/cosmos/cosmos-sdk/types" @@ -54,46 +52,3 @@ func (exec *ExecutorPerp) SetMarketEnabled( return exec.PerpV2.Admin.CloseMarket(ctx, pair) } - -func (exec *ExecutorPerp) CreateMarket( - cwMsg *bindings.CreateMarket, ctx sdk.Context, -) (err error) { - if cwMsg == nil { - return wasmvmtypes.InvalidRequest{Err: "null msg"} - } - - pair, err := asset.TryNewPair(cwMsg.Pair) - if err != nil { - return err - } - - var market perpv2types.Market - if cwMsg.MarketParams == nil { - market = perpv2types.DefaultMarket(pair) - } else { - mp := cwMsg.MarketParams - market = perpv2types.Market{ - Pair: pair, - Enabled: true, - MaintenanceMarginRatio: mp.MaintenanceMarginRatio, - MaxLeverage: mp.MaxLeverage, - LatestCumulativePremiumFraction: mp.LatestCumulativePremiumFraction, - ExchangeFeeRatio: mp.ExchangeFeeRatio, - EcosystemFundFeeRatio: mp.EcosystemFundFeeRatio, - LiquidationFeeRatio: mp.LiquidationFeeRatio, - PartialLiquidationRatio: mp.PartialLiquidationRatio, - FundingRateEpochId: mp.FundingRateEpochId, - MaxFundingRate: mp.MaxFundingRate, - TwapLookbackWindow: time.Duration(mp.TwapLookbackWindow.Int64()), - PrepaidBadDebt: sdk.NewCoin(pair.QuoteDenom(), sdk.ZeroInt()), - OraclePair: asset.MustNewPair(mp.OraclePair), - } - } - - return exec.PerpV2.Admin.CreateMarket(ctx, perpv2keeper.ArgsCreateMarket{ - Pair: pair, - PriceMultiplier: cwMsg.PegMult, - SqrtDepth: cwMsg.SqrtDepth, - Market: &market, - }) -} diff --git a/wasmbinding/exec_perp_test.go b/wasmbinding/exec_perp_test.go index 0aa232cbc..e376d1ca8 100644 --- a/wasmbinding/exec_perp_test.go +++ b/wasmbinding/exec_perp_test.go @@ -135,8 +135,6 @@ func (s *TestSuitePerpExecutor) OnSetupEnd() { func (s *TestSuitePerpExecutor) TestPerpExecutorHappy() { for _, err := range []error{ s.DoInsuranceFundWithdrawTest(sdk.NewInt(69), s.contractDeployer), - s.DoCreateMarketTest(asset.MustNewPair("ufoo:ubar")), - s.DoCreateMarketTestWithParams(asset.MustNewPair("ufoo2:ubar")), } { s.NoError(err) } @@ -161,42 +159,6 @@ func (s *TestSuitePerpExecutor) DoInsuranceFundWithdrawTest( return s.exec.InsuranceFundWithdraw(cwMsg, s.ctx) } -func (s *TestSuitePerpExecutor) DoCreateMarketTest(pair asset.Pair) error { - cwMsg := &bindings.CreateMarket{ - Pair: pair.String(), - PegMult: sdk.NewDec(2_500), - SqrtDepth: sdk.NewDec(1_000), - MarketParams: nil, - } - - return s.exec.CreateMarket(cwMsg, s.ctx) -} - -func (s *TestSuitePerpExecutor) DoCreateMarketTestWithParams(pair asset.Pair) error { - cwMsg := &bindings.CreateMarket{ - Pair: pair.String(), - PegMult: sdk.NewDec(2_500), - SqrtDepth: sdk.NewDec(1_000), - MarketParams: &bindings.MarketParams{ - Pair: pair.String(), - Enabled: true, - MaintenanceMarginRatio: sdk.OneDec(), - MaxLeverage: sdk.OneDec(), - LatestCumulativePremiumFraction: sdk.OneDec(), - ExchangeFeeRatio: sdk.OneDec(), - EcosystemFundFeeRatio: sdk.OneDec(), - LiquidationFeeRatio: sdk.OneDec(), - PartialLiquidationRatio: sdk.OneDec(), - FundingRateEpochId: "hi", - MaxFundingRate: sdk.OneDec(), - TwapLookbackWindow: sdk.OneInt(), - OraclePair: pair.String(), - }, - } - - return s.exec.CreateMarket(cwMsg, s.ctx) -} - func (s *TestSuitePerpExecutor) TestSadPaths_Nil() { err := s.exec.InsuranceFundWithdraw(nil, s.ctx) s.Error(err) @@ -234,8 +196,6 @@ func (s *TestSuitePerpExecutor) TestSadPaths_InvalidPair() { for _, err := range []error{ s.DoSetMarketEnabledTest(pair, true), s.DoSetMarketEnabledTest(pair, false), - s.DoCreateMarketTest(pair), - s.DoCreateMarketTestWithParams(pair), } { s.Error(err) } diff --git a/wasmbinding/exec_test.go b/wasmbinding/exec_test.go index 0ad880db0..fc3de49b0 100644 --- a/wasmbinding/exec_test.go +++ b/wasmbinding/exec_test.go @@ -404,45 +404,3 @@ func (s *TestSuiteExecutor) TestSetMarketEnabled() { s.Errorf(err, "contractRespBz: %s", contractRespBz) s.Contains(err.Error(), "Error parsing into type") } - -func (s *TestSuiteExecutor) TestCreateMarket() { - contract := s.contractController - pair := asset.MustNewPair("bloop:blam") - execMsg := bindings.NibiruMsg{ - CreateMarket: &bindings.CreateMarket{ - Pair: pair.String(), - PegMult: sdk.NewDec(420), - SqrtDepth: sdk.NewDec(1_000), - MarketParams: nil, - }, - } - - s.T().Logf("Execute - happy: market: %s", pair) - s.keeper.SetSudoContracts( - []string{contract.String()}, s.ctx, - ) - contractRespBz, err := s.ExecuteAgainstContract(contract, execMsg) - s.NoErrorf(err, "contractRespBz: %s", contractRespBz) - - market, err := s.nibiru.PerpKeeperV2.GetMarket(s.ctx, pair) - s.NoError(err) - s.NoError(market.Validate()) - s.False(market.Enabled, "by default, we create a market in a disabled state") - s.EqualValues(pair, market.Pair) - - s.T().Log("Executing without permission should fail") - s.keeper.SetSudoContracts( - []string{}, s.ctx, - ) - contractRespBz, err = s.ExecuteAgainstContract(contract, execMsg) - s.Errorf(err, "contractRespBz: %s", contractRespBz) - - s.T().Log("Executing the wrong contract should fail") - contract = s.contractPerp - s.keeper.SetSudoContracts( - []string{contract.String()}, s.ctx, - ) - contractRespBz, err = s.ExecuteAgainstContract(contract, execMsg) - s.Errorf(err, "contractRespBz: %s", contractRespBz) - s.Contains(err.Error(), "Error parsing into type") -} diff --git a/wasmbinding/message_plugin.go b/wasmbinding/message_plugin.go index 51ef552ba..519d6ffa0 100644 --- a/wasmbinding/message_plugin.go +++ b/wasmbinding/message_plugin.go @@ -63,14 +63,6 @@ func (messenger *CustomMessenger) DispatchMsg( switch { // Perp module | controller - case contractExecuteMsg.ExecuteMsg.CreateMarket != nil: - if err := messenger.Sudo.CheckPermissions(contractAddr, ctx); err != nil { - return events, data, err - } - cwMsg := contractExecuteMsg.ExecuteMsg.CreateMarket - err = messenger.Perp.CreateMarket(cwMsg, ctx) - return events, data, err - case contractExecuteMsg.ExecuteMsg.InsuranceFundWithdraw != nil: if err := messenger.Sudo.CheckPermissions(contractAddr, ctx); err != nil { return events, data, err From 99911c265ecda9aafbaa986b3b72a39f26a968f9 Mon Sep 17 00:00:00 2001 From: Jonathan Gimeno Date: Tue, 2 Jan 2024 11:43:16 +0100 Subject: [PATCH 2/8] temp commit for fixing merge conflicts --- proto/nibiru/perp/v2/tx.proto | 38 ++ x/perp/v2/integration/action/market.go | 13 +- x/perp/v2/keeper/admin.go | 5 + x/perp/v2/keeper/msg_server.go | 18 + x/perp/v2/module/abci_test.go | 2 + x/perp/v2/types/msgs.go | 24 + x/perp/v2/types/tx.pb.go | 773 +++++++++++++++++++++---- 7 files changed, 768 insertions(+), 105 deletions(-) diff --git a/proto/nibiru/perp/v2/tx.proto b/proto/nibiru/perp/v2/tx.proto index 7dba213c7..300bda8a6 100644 --- a/proto/nibiru/perp/v2/tx.proto +++ b/proto/nibiru/perp/v2/tx.proto @@ -49,6 +49,8 @@ service Msg { // [Admin] Only callable by sudoers. rpc ShiftSwapInvariant(MsgShiftSwapInvariant) returns (MsgShiftSwapInvariantResponse) {} + + rpc CreateMarket(MsgCreateMarket) returns (MsgCreateMarketResponse) {} } // -------------------------- Settle Position -------------------------- @@ -429,3 +431,39 @@ message MsgShiftSwapInvariant { } message MsgShiftSwapInvariantResponse {} + +// -------------------------- CreateMarket -------------------------- + +// CreateMarket: gRPC tx msg for creating a new market. +// Admin-only. +message MsgCreateMarket { + string sender = 1; + string pair = 2 [ + (gogoproto.customtype) = + "github.com/NibiruChain/nibiru/x/common/asset.Pair", + (gogoproto.moretags) = "yaml:\"pair\"", + (gogoproto.nullable) = false + ]; + + string price_multiplier = 3 [ + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", + (gogoproto.moretags) = "yaml:\"price_multiplier\"", + (gogoproto.nullable) = false + ]; + + string sqrt_depth = 4 [ + (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", + (gogoproto.moretags) = "yaml:\"sqrt_depth\"", + (gogoproto.nullable) = false + ]; +} + +message MsgCreateMarketResponse { + string pair = 1 [ + (gogoproto.customtype) = + "github.com/NibiruChain/nibiru/x/common/asset.Pair", + (gogoproto.nullable) = false + ]; + + string version = 2; +} \ No newline at end of file diff --git a/x/perp/v2/integration/action/market.go b/x/perp/v2/integration/action/market.go index 896479ef3..0e4791179 100644 --- a/x/perp/v2/integration/action/market.go +++ b/x/perp/v2/integration/action/market.go @@ -163,6 +163,8 @@ type createPool struct { pair asset.Pair market types.Market amm types.AMM + + adminAccount sdk.AccAddress } func (c createPool) Do(app *app.NibiruApp, ctx sdk.Context) (sdk.Context, error) { @@ -171,15 +173,16 @@ func (c createPool) Do(app *app.NibiruApp, ctx sdk.Context) (sdk.Context, error) PriceMultiplier: c.amm.PriceMultiplier, SqrtDepth: c.amm.SqrtDepth, Market: &c.market, - }) + }, c.adminAccount) return ctx, err } -func CreateMarket(pair asset.Pair, market types.Market, amm types.AMM) action.Action { +func CreateMarket(pair asset.Pair, market types.Market, amm types.AMM, adminAccount sdk.AccAddress) action.Action { return createPool{ - pair: pair, - market: market, - amm: amm, + pair: pair, + market: market, + amm: amm, + adminAccount: adminAccount, } } diff --git a/x/perp/v2/keeper/admin.go b/x/perp/v2/keeper/admin.go index 78270101a..339550398 100644 --- a/x/perp/v2/keeper/admin.go +++ b/x/perp/v2/keeper/admin.go @@ -71,7 +71,12 @@ type ArgsCreateMarket struct { func (k admin) CreateMarket( ctx sdk.Context, args ArgsCreateMarket, + adminAccount sdk.AccAddress, ) error { + if err := k.SudoKeeper.CheckPermissions(adminAccount, ctx); err != nil { + return err + } + pair := args.Pair market, err := k.GetMarket(ctx, pair) if err == nil && market.Enabled { diff --git a/x/perp/v2/keeper/msg_server.go b/x/perp/v2/keeper/msg_server.go index 650526b41..6ba72b9f7 100644 --- a/x/perp/v2/keeper/msg_server.go +++ b/x/perp/v2/keeper/msg_server.go @@ -218,3 +218,21 @@ func (m msgServer) ShiftSwapInvariant( err := m.k.Admin.ShiftSwapInvariant(ctx, msg.Pair, msg.NewSwapInvariant, sender) return &types.MsgShiftSwapInvariantResponse{}, err } + +// CreateMarket gRPC tx msg for creating a new market. +// [Admin] Only callable by sudoers. +func (m msgServer) CreateMarket( + goCtx context.Context, msg *types.MsgCreateMarket, +) (*types.MsgCreateMarketResponse, error) { + sender, _ := sdk.AccAddressFromBech32(msg.Sender) + ctx := sdk.UnwrapSDKContext(goCtx) + + args := ArgsCreateMarket{} + + err := m.k.Admin.CreateMarket(ctx, args, sender) + if err != nil { + return nil, err + } + + return &types.MsgCreateMarketResponse{}, nil +} diff --git a/x/perp/v2/module/abci_test.go b/x/perp/v2/module/abci_test.go index 4da2dbc78..ff52be7dc 100644 --- a/x/perp/v2/module/abci_test.go +++ b/x/perp/v2/module/abci_test.go @@ -25,6 +25,8 @@ func TestSnapshotUpdates(t *testing.T) { initialMarket := *mock.TestMarket() initialAmm := *mock.TestAMMDefault() + adminAccount := sdk.AccAddressFromBech32("nibi") + runBlock := func(duration time.Duration) { perp.EndBlocker(ctx, app.PerpKeeperV2) ctx = ctx. diff --git a/x/perp/v2/types/msgs.go b/x/perp/v2/types/msgs.go index 2dbf0a380..6039350c8 100644 --- a/x/perp/v2/types/msgs.go +++ b/x/perp/v2/types/msgs.go @@ -407,3 +407,27 @@ func (m MsgShiftSwapInvariant) GetSigners() []sdk.AccAddress { func (m MsgShiftSwapInvariant) GetSignBytes() []byte { return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&m)) } + +// ------------------------ MsgCreateMarket ------------------------ + +func (m MsgCreateMarket) ValidateBasic() error { + if err := m.Pair.Validate(); err != nil { + return err + } + if !m.SqrtDepth.IsPositive() { + return fmt.Errorf("sqrt depth must be positive, not: %v", m.SqrtDepth.String()) + } + if !m.PriceMultiplier.IsPositive() { + return fmt.Errorf("price multiplier must be positive, not: %v", m.PriceMultiplier.String()) + } + return nil +} + +func (m MsgCreateMarket) GetSigners() []sdk.AccAddress { + signer, err := sdk.AccAddressFromBech32(m.Sender) + if err != nil { + panic(err) + } + + return []sdk.AccAddress{signer} +} diff --git a/x/perp/v2/types/tx.pb.go b/x/perp/v2/types/tx.pb.go index a20200646..2610066c3 100644 --- a/x/perp/v2/types/tx.pb.go +++ b/x/perp/v2/types/tx.pb.go @@ -1367,6 +1367,100 @@ func (m *MsgShiftSwapInvariantResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgShiftSwapInvariantResponse proto.InternalMessageInfo +// CreateMarket: gRPC tx msg for creating a new market. +// Admin-only. +type MsgCreateMarket struct { + Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty"` + Pair github_com_NibiruChain_nibiru_x_common_asset.Pair `protobuf:"bytes,2,opt,name=pair,proto3,customtype=github.com/NibiruChain/nibiru/x/common/asset.Pair" json:"pair" yaml:"pair"` + PriceMultiplier github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,3,opt,name=price_multiplier,json=priceMultiplier,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"price_multiplier" yaml:"price_multiplier"` + SqrtDepth github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,4,opt,name=sqrt_depth,json=sqrtDepth,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"sqrt_depth" yaml:"sqrt_depth"` +} + +func (m *MsgCreateMarket) Reset() { *m = MsgCreateMarket{} } +func (m *MsgCreateMarket) String() string { return proto.CompactTextString(m) } +func (*MsgCreateMarket) ProtoMessage() {} +func (*MsgCreateMarket) Descriptor() ([]byte, []int) { + return fileDescriptor_b95cda40bf0a0f91, []int{25} +} +func (m *MsgCreateMarket) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgCreateMarket) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgCreateMarket.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgCreateMarket) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgCreateMarket.Merge(m, src) +} +func (m *MsgCreateMarket) XXX_Size() int { + return m.Size() +} +func (m *MsgCreateMarket) XXX_DiscardUnknown() { + xxx_messageInfo_MsgCreateMarket.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgCreateMarket proto.InternalMessageInfo + +func (m *MsgCreateMarket) GetSender() string { + if m != nil { + return m.Sender + } + return "" +} + +type MsgCreateMarketResponse struct { + Pair github_com_NibiruChain_nibiru_x_common_asset.Pair `protobuf:"bytes,1,opt,name=pair,proto3,customtype=github.com/NibiruChain/nibiru/x/common/asset.Pair" json:"pair"` + Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` +} + +func (m *MsgCreateMarketResponse) Reset() { *m = MsgCreateMarketResponse{} } +func (m *MsgCreateMarketResponse) String() string { return proto.CompactTextString(m) } +func (*MsgCreateMarketResponse) ProtoMessage() {} +func (*MsgCreateMarketResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_b95cda40bf0a0f91, []int{26} +} +func (m *MsgCreateMarketResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgCreateMarketResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgCreateMarketResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgCreateMarketResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgCreateMarketResponse.Merge(m, src) +} +func (m *MsgCreateMarketResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgCreateMarketResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgCreateMarketResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgCreateMarketResponse proto.InternalMessageInfo + +func (m *MsgCreateMarketResponse) GetVersion() string { + if m != nil { + return m.Version + } + return "" +} + func init() { proto.RegisterType((*MsgSettlePosition)(nil), "nibiru.perp.v2.MsgSettlePosition") proto.RegisterType((*MsgRemoveMargin)(nil), "nibiru.perp.v2.MsgRemoveMargin") @@ -1395,111 +1489,120 @@ func init() { proto.RegisterType((*MsgShiftPegMultiplierResponse)(nil), "nibiru.perp.v2.MsgShiftPegMultiplierResponse") proto.RegisterType((*MsgShiftSwapInvariant)(nil), "nibiru.perp.v2.MsgShiftSwapInvariant") proto.RegisterType((*MsgShiftSwapInvariantResponse)(nil), "nibiru.perp.v2.MsgShiftSwapInvariantResponse") + proto.RegisterType((*MsgCreateMarket)(nil), "nibiru.perp.v2.MsgCreateMarket") + proto.RegisterType((*MsgCreateMarketResponse)(nil), "nibiru.perp.v2.MsgCreateMarketResponse") } func init() { proto.RegisterFile("nibiru/perp/v2/tx.proto", fileDescriptor_b95cda40bf0a0f91) } var fileDescriptor_b95cda40bf0a0f91 = []byte{ - // 1570 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x59, 0xcd, 0x6f, 0x5b, 0xc5, - 0x16, 0xf7, 0x8d, 0xdd, 0x34, 0x39, 0x49, 0xf3, 0x71, 0x9b, 0x26, 0xae, 0x5f, 0x9f, 0x93, 0x77, - 0xf5, 0x5e, 0x5f, 0x58, 0xc4, 0x6e, 0x03, 0x12, 0x02, 0x09, 0x50, 0x3e, 0x5a, 0x54, 0x54, 0xb7, - 0xee, 0x4d, 0xd5, 0xa2, 0x52, 0x74, 0x3b, 0xb1, 0x27, 0x37, 0xa3, 0x5e, 0xcf, 0xb8, 0x77, 0xe6, - 0xda, 0x49, 0xd9, 0xf1, 0x17, 0xb0, 0x60, 0x81, 0x84, 0xc4, 0x8e, 0x0d, 0x0b, 0x24, 0x16, 0xc0, - 0x06, 0xf6, 0x5d, 0x76, 0x89, 0x10, 0x2a, 0xa8, 0xd9, 0xb0, 0xa5, 0xe2, 0x0f, 0x40, 0x73, 0xbf, - 0x7c, 0xaf, 0x3b, 0x4e, 0x1c, 0x93, 0x46, 0x02, 0xb1, 0x4a, 0xe6, 0xce, 0x99, 0xdf, 0x39, 0xbf, - 0x73, 0xce, 0x9c, 0x33, 0x33, 0x86, 0x39, 0x4a, 0x36, 0x89, 0xeb, 0x95, 0x9b, 0xd8, 0x6d, 0x96, - 0x5b, 0xcb, 0x65, 0xb1, 0x53, 0x6a, 0xba, 0x4c, 0x30, 0x7d, 0x22, 0x98, 0x28, 0xc9, 0x89, 0x52, - 0x6b, 0xb9, 0x70, 0xce, 0x66, 0xcc, 0x76, 0x70, 0x19, 0x35, 0x49, 0x19, 0x51, 0xca, 0x04, 0x12, - 0x84, 0x51, 0x1e, 0x48, 0x17, 0x8a, 0x35, 0xc6, 0x1b, 0x8c, 0x97, 0x37, 0x11, 0xc7, 0xe5, 0xd6, - 0xc5, 0x4d, 0x2c, 0xd0, 0xc5, 0x72, 0x8d, 0x11, 0x1a, 0xce, 0xcf, 0xd8, 0xcc, 0x66, 0xfe, 0xbf, - 0x65, 0xf9, 0x5f, 0xf8, 0xb5, 0xd0, 0xa5, 0x9c, 0x0b, 0x24, 0x70, 0x30, 0x67, 0x7c, 0xac, 0xc1, - 0x74, 0x85, 0xdb, 0x1b, 0x58, 0x08, 0x07, 0x57, 0x19, 0x27, 0x52, 0x9d, 0x3e, 0x0b, 0xc3, 0x1c, - 0xd3, 0x3a, 0x76, 0xf3, 0xda, 0x82, 0xb6, 0x38, 0x6a, 0x86, 0x23, 0xbd, 0x02, 0xb9, 0x26, 0x22, - 0x6e, 0x7e, 0x48, 0x7e, 0x5d, 0x7d, 0xed, 0xd1, 0x93, 0xf9, 0xcc, 0x8f, 0x4f, 0xe6, 0x2f, 0xda, - 0x44, 0x6c, 0x7b, 0x9b, 0xa5, 0x1a, 0x6b, 0x94, 0xaf, 0xf9, 0xaa, 0xd6, 0xb6, 0x11, 0xa1, 0xe5, - 0x50, 0xed, 0x4e, 0xb9, 0xc6, 0x1a, 0x0d, 0x46, 0xcb, 0x88, 0x73, 0x2c, 0x4a, 0x55, 0x44, 0x5c, - 0xd3, 0x87, 0xd1, 0xf3, 0x70, 0xb2, 0x85, 0x5d, 0x4e, 0x18, 0xcd, 0x67, 0x17, 0xb4, 0xc5, 0x9c, - 0x19, 0x0d, 0x8d, 0xaf, 0x34, 0x98, 0xac, 0x70, 0xdb, 0xc4, 0x0d, 0xd6, 0xc2, 0x15, 0xe4, 0xda, - 0xe4, 0xd8, 0x8c, 0x7a, 0x15, 0x86, 0x1b, 0xbe, 0x42, 0xdf, 0xa6, 0xb1, 0xe5, 0xb3, 0xa5, 0xc0, - 0xe9, 0x25, 0xe9, 0xf4, 0x52, 0xe8, 0xf4, 0xd2, 0x1a, 0x23, 0x74, 0x35, 0x27, 0x75, 0x99, 0xa1, - 0xb8, 0xf1, 0xab, 0x06, 0x73, 0x5d, 0x36, 0x9b, 0x98, 0x37, 0x19, 0xe5, 0x58, 0x7f, 0x13, 0x20, - 0x90, 0xb2, 0x98, 0x27, 0x7c, 0xfb, 0xfb, 0x00, 0x1e, 0x0d, 0x96, 0x5c, 0xf7, 0x84, 0x7e, 0x1b, - 0x26, 0xb7, 0x3c, 0x5a, 0x27, 0xd4, 0xb6, 0x9a, 0x68, 0xb7, 0x81, 0xa9, 0x08, 0xe9, 0x96, 0x42, - 0xba, 0xe7, 0x13, 0x74, 0xc3, 0x24, 0x09, 0xfe, 0x2c, 0xf1, 0xfa, 0xfd, 0xb2, 0xd8, 0x6d, 0x62, - 0x5e, 0x5a, 0xc7, 0x35, 0x73, 0x22, 0x84, 0xa9, 0x06, 0x28, 0xfa, 0x2b, 0x30, 0xd2, 0x0c, 0xa3, - 0x1e, 0xf2, 0xcd, 0x97, 0xd2, 0x29, 0x59, 0x8a, 0xb2, 0xc2, 0x8c, 0x25, 0x8d, 0x2f, 0x35, 0x18, - 0xaf, 0x70, 0x7b, 0xa5, 0x5e, 0xff, 0x8b, 0xc4, 0xe6, 0x73, 0x0d, 0x66, 0x92, 0x06, 0xc7, 0x81, - 0x51, 0x38, 0x56, 0x3b, 0x72, 0xc7, 0x0e, 0xf5, 0xed, 0xd8, 0xdf, 0x83, 0xed, 0x58, 0xf1, 0x1c, - 0x41, 0xae, 0x92, 0x07, 0x1e, 0xa9, 0x23, 0x81, 0x7b, 0x7a, 0xf7, 0x06, 0x8c, 0x3b, 0xa1, 0x90, - 0x2c, 0x12, 0xf9, 0xa1, 0x85, 0xec, 0xe2, 0xd8, 0xf2, 0x52, 0xb7, 0x9e, 0xe7, 0x00, 0x4b, 0x57, - 0x3b, 0xab, 0xcc, 0x14, 0x44, 0x41, 0xc0, 0x58, 0x62, 0x32, 0x8e, 0x9f, 0x76, 0x34, 0xf1, 0x9b, - 0x85, 0x61, 0xe1, 0x22, 0x49, 0x64, 0x28, 0x20, 0x12, 0x8c, 0x8c, 0x6f, 0xb2, 0x70, 0xf6, 0x39, - 0x2b, 0xe3, 0x18, 0xa1, 0x2e, 0x9a, 0x9a, 0x4f, 0xf3, 0x8d, 0x03, 0x69, 0x46, 0x00, 0x29, 0xba, - 0xe1, 0xb7, 0x2e, 0xda, 0x5f, 0x0f, 0xc1, 0x69, 0x85, 0x94, 0xac, 0x50, 0xdc, 0xab, 0xd5, 0x30, - 0xe7, 0xbe, 0x0b, 0x46, 0xcc, 0x68, 0xa8, 0xcf, 0xc0, 0x09, 0xec, 0xba, 0x2c, 0x62, 0x12, 0x0c, - 0xf4, 0xcb, 0x30, 0x11, 0xe1, 0x32, 0xd7, 0xda, 0xc2, 0xb8, 0xbf, 0x44, 0xd5, 0xcc, 0x53, 0x9d, - 0x65, 0x97, 0x31, 0xd6, 0xdf, 0x82, 0x31, 0x49, 0xcb, 0xc2, 0x5b, 0x3e, 0x48, 0xae, 0x3f, 0x90, - 0x51, 0xb9, 0xe6, 0xd2, 0x96, 0x04, 0xe8, 0x78, 0xfa, 0x44, 0xd2, 0xd3, 0x71, 0x40, 0x87, 0x8f, - 0x24, 0xa0, 0xc6, 0xb7, 0x59, 0x98, 0x90, 0x7e, 0x47, 0xee, 0x7d, 0x2c, 0xae, 0xbb, 0x52, 0xc3, - 0x31, 0x95, 0x82, 0x25, 0xc8, 0x71, 0x52, 0x0f, 0xfc, 0x3b, 0xb1, 0x7c, 0xb6, 0x3b, 0x19, 0xd6, - 0x89, 0x8b, 0x6b, 0x7e, 0x28, 0x7d, 0x31, 0xfd, 0x2e, 0xe8, 0x0f, 0x3c, 0x26, 0xb0, 0xe5, 0x03, - 0x59, 0xa8, 0xc1, 0x3c, 0x2a, 0x7c, 0xbf, 0x1e, 0x6e, 0xab, 0x5f, 0xa1, 0xc2, 0x9c, 0xf2, 0x91, - 0x56, 0x24, 0xd0, 0x8a, 0x8f, 0xa3, 0xbf, 0x03, 0x23, 0x0e, 0x6e, 0x61, 0x17, 0xd9, 0x38, 0xf0, - 0xf7, 0xa1, 0xcb, 0x47, 0xbc, 0x5e, 0xc7, 0x30, 0x27, 0xe3, 0x9b, 0x32, 0xd4, 0x72, 0x48, 0x83, - 0x88, 0x30, 0x68, 0x87, 0x35, 0x77, 0x46, 0xc2, 0x25, 0xac, 0xbd, 0x2a, 0xb1, 0x8c, 0xbd, 0x13, - 0x30, 0x9b, 0x8e, 0x5c, 0x9c, 0xf4, 0xc9, 0xd2, 0xa5, 0xf5, 0x5b, 0xba, 0xf4, 0x6d, 0xc8, 0xe3, - 0x9d, 0xda, 0x36, 0xa2, 0x36, 0xae, 0x5b, 0x94, 0xc9, 0x6f, 0xc8, 0xb1, 0x5a, 0xc8, 0xf1, 0xf0, - 0x80, 0xbd, 0x6a, 0x36, 0xc6, 0xbb, 0x16, 0xc2, 0xdd, 0x92, 0x68, 0xfa, 0x16, 0xcc, 0x75, 0x34, - 0x45, 0xfa, 0x2d, 0x4e, 0x1e, 0x06, 0xd9, 0x70, 0x78, 0x45, 0x67, 0x62, 0xb8, 0x88, 0xd7, 0x06, - 0x79, 0xa8, 0xec, 0x0d, 0xb9, 0x23, 0xe9, 0x0d, 0x37, 0x60, 0xdc, 0xc5, 0xc8, 0x21, 0x0f, 0xa5, - 0xfd, 0xd4, 0x19, 0x30, 0x65, 0xc6, 0x22, 0x8c, 0x2a, 0x75, 0xf4, 0x7b, 0x30, 0xe3, 0xd1, 0x24, - 0xa8, 0x85, 0xb6, 0x04, 0x76, 0x07, 0x48, 0x19, 0x09, 0xad, 0x77, 0xb0, 0xaa, 0xd4, 0x59, 0x91, - 0x48, 0xfa, 0x2d, 0x98, 0x0c, 0x8f, 0x30, 0x82, 0x59, 0x2d, 0xe4, 0x39, 0x22, 0x7f, 0x72, 0x20, - 0xf0, 0x53, 0x01, 0xcc, 0x4d, 0x76, 0x4b, 0x82, 0xe8, 0xef, 0xc1, 0x74, 0x1c, 0xc3, 0x28, 0x6d, - 0xf2, 0x23, 0x03, 0x21, 0x4f, 0x45, 0x40, 0x51, 0xbe, 0x18, 0xbb, 0x30, 0x55, 0xe1, 0xf6, 0x9a, - 0xc3, 0xf8, 0x71, 0x1f, 0x6e, 0x8d, 0x67, 0x59, 0xc8, 0x77, 0xeb, 0x8e, 0xb7, 0xd8, 0x7e, 0x9b, - 0x45, 0x3b, 0xae, 0xcd, 0x32, 0xf4, 0x82, 0x37, 0x4b, 0xf6, 0x85, 0x6c, 0x96, 0xdc, 0x9f, 0xdf, - 0x2c, 0xef, 0xc2, 0x54, 0x27, 0x95, 0x93, 0x6d, 0xf2, 0xf0, 0xc6, 0x46, 0xb9, 0x7c, 0x33, 0x38, - 0xc8, 0x7c, 0x17, 0xdc, 0x5b, 0xaa, 0xc8, 0x15, 0x04, 0x39, 0x7e, 0xec, 0x8f, 0xab, 0x21, 0xae, - 0xca, 0x86, 0x38, 0x70, 0x09, 0xf4, 0xd7, 0x1a, 0xbf, 0x65, 0xfd, 0x2b, 0x4c, 0xd2, 0xfc, 0x7f, - 0x52, 0xf6, 0x6f, 0x9e, 0xb2, 0x1f, 0x6a, 0x7e, 0x9d, 0x5a, 0x67, 0x14, 0x09, 0x7c, 0x93, 0x5d, - 0xaa, 0x31, 0xbe, 0xcb, 0x05, 0x6e, 0x5c, 0xf6, 0x68, 0xbd, 0x67, 0xee, 0x5e, 0x83, 0x91, 0xba, - 0x5c, 0xd0, 0xb9, 0xdd, 0xec, 0x73, 0x38, 0x9d, 0x93, 0x16, 0x3e, 0x7b, 0x32, 0x3f, 0xb9, 0x8b, - 0x1a, 0xce, 0xeb, 0x46, 0xb4, 0xd0, 0x30, 0x63, 0x0c, 0xc3, 0x80, 0x85, 0x5e, 0x36, 0x44, 0x09, - 0x68, 0x5c, 0x0f, 0xea, 0xa9, 0x1f, 0xc8, 0x35, 0xe6, 0x38, 0x48, 0x60, 0x17, 0x39, 0xeb, 0x98, - 0xb2, 0x46, 0x4f, 0x3b, 0xff, 0x05, 0xa3, 0x14, 0xb7, 0xad, 0xba, 0x14, 0x0a, 0x4f, 0xea, 0x23, - 0x14, 0xb7, 0xfd, 0x45, 0xa1, 0x52, 0x25, 0x60, 0xac, 0xf4, 0x93, 0xe0, 0x52, 0xbf, 0xe2, 0x38, - 0xac, 0x86, 0x04, 0xbe, 0xd4, 0x64, 0xb5, 0x6d, 0x13, 0x6f, 0x22, 0x81, 0x79, 0x4f, 0xa5, 0x18, - 0x4e, 0xba, 0x81, 0x48, 0x78, 0x23, 0xdb, 0xc7, 0x37, 0x17, 0xa4, 0x6f, 0xbe, 0xf8, 0x79, 0x7e, - 0xb1, 0x8f, 0xe8, 0xc9, 0x05, 0xdc, 0x8c, 0xb0, 0x8d, 0xcf, 0x34, 0x98, 0xef, 0x61, 0x5a, 0xbc, - 0x69, 0x3f, 0x80, 0xd3, 0x82, 0x09, 0xe4, 0x58, 0x58, 0xce, 0x5a, 0x91, 0x59, 0xda, 0xd1, 0x9b, - 0x35, 0xed, 0xeb, 0x49, 0x1a, 0x61, 0x5c, 0xf1, 0x5d, 0x77, 0x9b, 0x88, 0xed, 0xba, 0x8b, 0xda, - 0x7d, 0xb9, 0x6e, 0x16, 0x86, 0x7d, 0x4b, 0x03, 0xcf, 0xe5, 0xcc, 0x70, 0x64, 0x7c, 0x1a, 0x70, - 0x55, 0x61, 0xc5, 0x5c, 0x77, 0x60, 0xba, 0x1d, 0xce, 0xd3, 0x17, 0xc9, 0x74, 0x2a, 0xd6, 0x12, - 0x11, 0x7d, 0xac, 0xc1, 0x99, 0x0a, 0xb7, 0x37, 0xb6, 0xc9, 0x96, 0xa8, 0xe2, 0xe0, 0x16, 0xda, - 0x74, 0xc8, 0xf1, 0x5d, 0x86, 0xaa, 0x30, 0x2e, 0xd3, 0xbc, 0x89, 0x6d, 0xab, 0x21, 0x0f, 0x66, - 0x83, 0x95, 0x31, 0xa0, 0xb8, 0x1d, 0x9a, 0x6f, 0xcc, 0xc3, 0xbf, 0x95, 0x8c, 0xe2, 0x8d, 0xf1, - 0x53, 0x82, 0xf3, 0x46, 0x1b, 0x35, 0xaf, 0xd0, 0x16, 0x72, 0x09, 0xa2, 0xe2, 0xb8, 0x38, 0xdf, - 0x05, 0x5d, 0x72, 0xe6, 0x6d, 0xd4, 0xb4, 0x48, 0xa4, 0x7c, 0x00, 0xe6, 0xfe, 0x8d, 0x8e, 0xe2, - 0x76, 0x8a, 0x44, 0x92, 0x7f, 0x6a, 0x22, 0xe2, 0xbf, 0xfc, 0x3d, 0x40, 0xb6, 0xc2, 0x6d, 0xfd, - 0x0e, 0x8c, 0xa7, 0x5e, 0x29, 0xe7, 0x15, 0xcf, 0x12, 0x49, 0x81, 0xc2, 0xff, 0x0f, 0x10, 0x88, - 0x3d, 0x9c, 0xd1, 0x6f, 0xc0, 0x68, 0xe7, 0x89, 0xed, 0x9c, 0x62, 0x5d, 0x3c, 0x5b, 0xf8, 0xef, - 0x7e, 0xb3, 0x09, 0xc8, 0x7b, 0x30, 0xd1, 0xf5, 0xb8, 0xf4, 0x9f, 0x03, 0xdf, 0x51, 0x0a, 0x2f, - 0xf5, 0xfd, 0xd4, 0x62, 0x64, 0xf4, 0xdb, 0x30, 0x96, 0x7c, 0x0e, 0x28, 0xaa, 0xd6, 0x76, 0xe6, - 0x0b, 0xe7, 0xf7, 0x9f, 0x4f, 0x00, 0xbf, 0x0f, 0xa7, 0xd2, 0x07, 0xf9, 0x05, 0xc5, 0xd2, 0x94, - 0x44, 0x61, 0xf1, 0x20, 0x89, 0x04, 0xfc, 0x1d, 0x18, 0x4f, 0x1d, 0xdb, 0x54, 0x81, 0x4c, 0x0a, - 0x28, 0x03, 0xa9, 0x3a, 0x39, 0x19, 0x19, 0xdd, 0x82, 0x89, 0xae, 0x17, 0x76, 0x95, 0xd7, 0xd3, - 0x22, 0x87, 0x32, 0xde, 0x83, 0x33, 0xea, 0x06, 0xae, 0x02, 0x51, 0x4a, 0x16, 0x2e, 0xf4, 0x2b, - 0x99, 0x56, 0xab, 0xee, 0xc7, 0x4a, 0xdb, 0x55, 0x92, 0x4a, 0xb5, 0xfb, 0xb7, 0xe4, 0x8c, 0xee, - 0xc2, 0x8c, 0xb2, 0x21, 0xab, 0x22, 0xa2, 0x12, 0x2c, 0x94, 0xfb, 0x14, 0x4c, 0xeb, 0x54, 0x76, - 0x32, 0x95, 0x4e, 0x95, 0xa0, 0x52, 0xe7, 0x7e, 0xfd, 0xcc, 0xc8, 0xe8, 0x0e, 0xe8, 0x8a, 0x9e, - 0xf2, 0x3f, 0x55, 0xea, 0x3c, 0x27, 0x56, 0x58, 0xea, 0x4b, 0x4c, 0xa1, 0x2d, 0x5d, 0xcd, 0x7b, - 0x6a, 0x4b, 0x89, 0xf5, 0xd6, 0xa6, 0xac, 0x9e, 0x46, 0x66, 0xf5, 0xed, 0x47, 0x4f, 0x8b, 0xda, - 0xe3, 0xa7, 0x45, 0xed, 0x97, 0xa7, 0x45, 0xed, 0xa3, 0xbd, 0x62, 0xe6, 0xf1, 0x5e, 0x31, 0xf3, - 0xc3, 0x5e, 0x31, 0x73, 0x67, 0xe9, 0xa0, 0x8e, 0x10, 0xff, 0x88, 0x26, 0xeb, 0xf7, 0xe6, 0xb0, - 0xff, 0x43, 0xd6, 0xcb, 0x7f, 0x04, 0x00, 0x00, 0xff, 0xff, 0x4e, 0xc7, 0xc2, 0xd7, 0x63, 0x1b, - 0x00, 0x00, + // 1694 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x59, 0xcf, 0x6f, 0x1b, 0x4f, + 0x15, 0xf7, 0xc6, 0x6e, 0x9a, 0x3c, 0xa7, 0xf9, 0xb1, 0xdf, 0x34, 0x71, 0xcd, 0x17, 0x3b, 0xac, + 0xe0, 0x4b, 0x38, 0xc4, 0x6e, 0x03, 0x12, 0x02, 0x09, 0x50, 0x7e, 0xb4, 0x10, 0x54, 0xb7, 0xee, + 0xa6, 0x6a, 0x51, 0x29, 0xda, 0x4e, 0xec, 0xc9, 0x7a, 0xd5, 0xf5, 0xcc, 0x76, 0x67, 0x6c, 0x27, + 0xe5, 0xd6, 0xbf, 0x80, 0x03, 0x07, 0x10, 0x12, 0x37, 0x2e, 0x1c, 0x90, 0x38, 0x00, 0x17, 0xfe, + 0x80, 0x1e, 0x7b, 0x44, 0x08, 0x05, 0x68, 0x2e, 0x5c, 0x89, 0xf8, 0x03, 0xd0, 0xcc, 0xfe, 0xf0, + 0xae, 0x3b, 0x4e, 0x6c, 0x93, 0x46, 0x02, 0x71, 0x4a, 0x66, 0xe7, 0xcd, 0xe7, 0xbd, 0xcf, 0x7b, + 0x6f, 0xe6, 0xbd, 0x19, 0xc3, 0x2a, 0x71, 0x0e, 0x1c, 0xbf, 0x53, 0xf5, 0xb0, 0xef, 0x55, 0xbb, + 0x9b, 0x55, 0x7e, 0x54, 0xf1, 0x7c, 0xca, 0xa9, 0x3e, 0x1f, 0x4c, 0x54, 0xc4, 0x44, 0xa5, 0xbb, + 0x59, 0xfc, 0xd4, 0xa6, 0xd4, 0x76, 0x71, 0x15, 0x79, 0x4e, 0x15, 0x11, 0x42, 0x39, 0xe2, 0x0e, + 0x25, 0x2c, 0x90, 0x2e, 0x96, 0x1a, 0x94, 0xb5, 0x29, 0xab, 0x1e, 0x20, 0x86, 0xab, 0xdd, 0x3b, + 0x07, 0x98, 0xa3, 0x3b, 0xd5, 0x06, 0x75, 0x48, 0x38, 0xbf, 0x6c, 0x53, 0x9b, 0xca, 0x7f, 0xab, + 0xe2, 0xbf, 0xf0, 0x6b, 0x71, 0x40, 0x39, 0xe3, 0x88, 0xe3, 0x60, 0xce, 0xf8, 0xa9, 0x06, 0x4b, + 0x35, 0x66, 0xef, 0x63, 0xce, 0x5d, 0x5c, 0xa7, 0xcc, 0x11, 0xea, 0xf4, 0x15, 0x98, 0x66, 0x98, + 0x34, 0xb1, 0x5f, 0xd0, 0xd6, 0xb4, 0xf5, 0x59, 0x33, 0x1c, 0xe9, 0x35, 0xc8, 0x79, 0xc8, 0xf1, + 0x0b, 0x53, 0xe2, 0xeb, 0xf6, 0x37, 0xde, 0x9e, 0x94, 0x33, 0x7f, 0x3e, 0x29, 0xdf, 0xb1, 0x1d, + 0xde, 0xea, 0x1c, 0x54, 0x1a, 0xb4, 0x5d, 0x7d, 0x20, 0x55, 0xed, 0xb4, 0x90, 0x43, 0xaa, 0xa1, + 0xda, 0xa3, 0x6a, 0x83, 0xb6, 0xdb, 0x94, 0x54, 0x11, 0x63, 0x98, 0x57, 0xea, 0xc8, 0xf1, 0x4d, + 0x09, 0xa3, 0x17, 0xe0, 0x7a, 0x17, 0xfb, 0xcc, 0xa1, 0xa4, 0x90, 0x5d, 0xd3, 0xd6, 0x73, 0x66, + 0x34, 0x34, 0x7e, 0xab, 0xc1, 0x42, 0x8d, 0xd9, 0x26, 0x6e, 0xd3, 0x2e, 0xae, 0x21, 0xdf, 0x76, + 0xae, 0xcc, 0xa8, 0xaf, 0xc3, 0x74, 0x5b, 0x2a, 0x94, 0x36, 0xe5, 0x37, 0x6f, 0x55, 0x02, 0xa7, + 0x57, 0x84, 0xd3, 0x2b, 0xa1, 0xd3, 0x2b, 0x3b, 0xd4, 0x21, 0xdb, 0x39, 0xa1, 0xcb, 0x0c, 0xc5, + 0x8d, 0x7f, 0x68, 0xb0, 0x3a, 0x60, 0xb3, 0x89, 0x99, 0x47, 0x09, 0xc3, 0xfa, 0xb7, 0x01, 0x02, + 0x29, 0x8b, 0x76, 0xb8, 0xb4, 0x7f, 0x04, 0xe0, 0xd9, 0x60, 0xc9, 0xc3, 0x0e, 0xd7, 0x9f, 0xc2, + 0xc2, 0x61, 0x87, 0x34, 0x1d, 0x62, 0x5b, 0x1e, 0x3a, 0x6e, 0x63, 0xc2, 0x43, 0xba, 0x95, 0x90, + 0xee, 0x67, 0x09, 0xba, 0x61, 0x92, 0x04, 0x7f, 0x36, 0x58, 0xf3, 0x65, 0x95, 0x1f, 0x7b, 0x98, + 0x55, 0x76, 0x71, 0xc3, 0x9c, 0x0f, 0x61, 0xea, 0x01, 0x8a, 0xfe, 0x35, 0x98, 0xf1, 0xc2, 0xa8, + 0x87, 0x7c, 0x0b, 0x95, 0x74, 0x4a, 0x56, 0xa2, 0xac, 0x30, 0x63, 0x49, 0xe3, 0x37, 0x1a, 0xcc, + 0xd5, 0x98, 0xbd, 0xd5, 0x6c, 0xfe, 0x97, 0xc4, 0xe6, 0x57, 0x1a, 0x2c, 0x27, 0x0d, 0x8e, 0x03, + 0xa3, 0x70, 0xac, 0x76, 0xe9, 0x8e, 0x9d, 0x1a, 0xd9, 0xb1, 0xff, 0x0a, 0xb6, 0x63, 0xad, 0xe3, + 0x72, 0xe7, 0xbe, 0xf3, 0xaa, 0xe3, 0x34, 0x11, 0xc7, 0x43, 0xbd, 0xfb, 0x08, 0xe6, 0xdc, 0x50, + 0x48, 0x1c, 0x12, 0x85, 0xa9, 0xb5, 0xec, 0x7a, 0x7e, 0x73, 0x63, 0x50, 0xcf, 0x07, 0x80, 0x95, + 0xfb, 0xfd, 0x55, 0x66, 0x0a, 0xa2, 0xc8, 0x21, 0x9f, 0x98, 0x8c, 0xe3, 0xa7, 0x5d, 0x4e, 0xfc, + 0x56, 0x60, 0x9a, 0xfb, 0x48, 0x10, 0x99, 0x0a, 0x88, 0x04, 0x23, 0xe3, 0xf7, 0x59, 0xb8, 0xf5, + 0x81, 0x95, 0x71, 0x8c, 0xd0, 0x00, 0x4d, 0x4d, 0xd2, 0xfc, 0xd6, 0x85, 0x34, 0x23, 0x80, 0x14, + 0xdd, 0xf0, 0xdb, 0x00, 0xed, 0xdf, 0x4d, 0xc1, 0x27, 0x0a, 0x29, 0x71, 0x42, 0xb1, 0x4e, 0xa3, + 0x81, 0x19, 0x93, 0x2e, 0x98, 0x31, 0xa3, 0xa1, 0xbe, 0x0c, 0xd7, 0xb0, 0xef, 0xd3, 0x88, 0x49, + 0x30, 0xd0, 0xef, 0xc1, 0x7c, 0x84, 0x4b, 0x7d, 0xeb, 0x10, 0xe3, 0xd1, 0x12, 0x55, 0x33, 0x6f, + 0xf4, 0x97, 0xdd, 0xc3, 0x58, 0xff, 0x0e, 0xe4, 0x05, 0x2d, 0x0b, 0x1f, 0x4a, 0x90, 0xdc, 0x68, + 0x20, 0xb3, 0x62, 0xcd, 0xdd, 0x43, 0x01, 0xd0, 0xf7, 0xf4, 0xb5, 0xa4, 0xa7, 0xe3, 0x80, 0x4e, + 0x5f, 0x4a, 0x40, 0x8d, 0x3f, 0x64, 0x61, 0x5e, 0xf8, 0x1d, 0xf9, 0x2f, 0x31, 0x7f, 0xe8, 0x0b, + 0x0d, 0x57, 0x74, 0x14, 0x6c, 0x40, 0x8e, 0x39, 0xcd, 0xc0, 0xbf, 0xf3, 0x9b, 0xb7, 0x06, 0x93, + 0x61, 0xd7, 0xf1, 0x71, 0x43, 0x86, 0x52, 0x8a, 0xe9, 0xcf, 0x41, 0x7f, 0xd5, 0xa1, 0x1c, 0x5b, + 0x12, 0xc8, 0x42, 0x6d, 0xda, 0x21, 0x5c, 0xfa, 0x75, 0xbc, 0xad, 0xbe, 0x47, 0xb8, 0xb9, 0x28, + 0x91, 0xb6, 0x04, 0xd0, 0x96, 0xc4, 0xd1, 0xbf, 0x0f, 0x33, 0x2e, 0xee, 0x62, 0x1f, 0xd9, 0x38, + 0xf0, 0xf7, 0xd8, 0xc7, 0x47, 0xbc, 0x5e, 0xc7, 0xb0, 0x2a, 0xe2, 0x9b, 0x32, 0xd4, 0x72, 0x9d, + 0xb6, 0xc3, 0xc3, 0xa0, 0x8d, 0x6b, 0xee, 0xb2, 0x80, 0x4b, 0x58, 0x7b, 0x5f, 0x60, 0x19, 0xa7, + 0xd7, 0x60, 0x25, 0x1d, 0xb9, 0x38, 0xe9, 0x93, 0x47, 0x97, 0x36, 0xea, 0xd1, 0xa5, 0xb7, 0xa0, + 0x80, 0x8f, 0x1a, 0x2d, 0x44, 0x6c, 0xdc, 0xb4, 0x08, 0x15, 0xdf, 0x90, 0x6b, 0x75, 0x91, 0xdb, + 0xc1, 0x13, 0xd6, 0xaa, 0x95, 0x18, 0xef, 0x41, 0x08, 0xf7, 0x44, 0xa0, 0xe9, 0x87, 0xb0, 0xda, + 0xd7, 0x14, 0xe9, 0xb7, 0x98, 0xf3, 0x3a, 0xc8, 0x86, 0xf1, 0x15, 0xdd, 0x8c, 0xe1, 0x22, 0x5e, + 0xfb, 0xce, 0x6b, 0x65, 0x6d, 0xc8, 0x5d, 0x4a, 0x6d, 0x78, 0x04, 0x73, 0x3e, 0x46, 0xae, 0xf3, + 0x5a, 0xd8, 0x4f, 0xdc, 0x09, 0x53, 0x26, 0x1f, 0x61, 0xd4, 0x89, 0xab, 0xbf, 0x80, 0xe5, 0x0e, + 0x49, 0x82, 0x5a, 0xe8, 0x90, 0x63, 0x7f, 0x82, 0x94, 0x11, 0xd0, 0x7a, 0x1f, 0xab, 0x4e, 0xdc, + 0x2d, 0x81, 0xa4, 0x3f, 0x81, 0x85, 0xb0, 0x85, 0xe1, 0xd4, 0xea, 0xa2, 0x8e, 0xcb, 0x0b, 0xd7, + 0x27, 0x02, 0xbf, 0x11, 0xc0, 0x3c, 0xa6, 0x4f, 0x04, 0x88, 0xfe, 0x43, 0x58, 0x8a, 0x63, 0x18, + 0xa5, 0x4d, 0x61, 0x66, 0x22, 0xe4, 0xc5, 0x08, 0x28, 0xca, 0x17, 0xe3, 0x18, 0x16, 0x6b, 0xcc, + 0xde, 0x71, 0x29, 0xbb, 0xea, 0xe6, 0xd6, 0x38, 0xcb, 0x42, 0x61, 0x50, 0x77, 0xbc, 0xc5, 0xce, + 0xdb, 0x2c, 0xda, 0x55, 0x6d, 0x96, 0xa9, 0x8f, 0xbc, 0x59, 0xb2, 0x1f, 0x65, 0xb3, 0xe4, 0xfe, + 0xf3, 0xcd, 0xf2, 0x03, 0x58, 0xec, 0xa7, 0x72, 0xb2, 0x4c, 0x8e, 0x6f, 0x6c, 0x94, 0xcb, 0x8f, + 0x83, 0x46, 0xe6, 0x8f, 0xc1, 0xbd, 0xa5, 0x8e, 0x7c, 0xee, 0x20, 0x57, 0xc6, 0xfe, 0xaa, 0x0a, + 0xe2, 0xb6, 0x28, 0x88, 0x13, 0x1f, 0x81, 0x72, 0xad, 0xf1, 0xcf, 0xac, 0xbc, 0xc2, 0x24, 0xcd, + 0xff, 0x7f, 0xca, 0xfe, 0x8f, 0xa7, 0xec, 0x1b, 0x4d, 0x9e, 0x53, 0xbb, 0x94, 0x20, 0x8e, 0x1f, + 0xd3, 0xbb, 0x0d, 0xca, 0x8e, 0x19, 0xc7, 0xed, 0x7b, 0x1d, 0xd2, 0x1c, 0x9a, 0xbb, 0x0f, 0x60, + 0xa6, 0x29, 0x16, 0xf4, 0x6f, 0x37, 0xe7, 0x34, 0xa7, 0xab, 0xc2, 0xc2, 0xb3, 0x93, 0xf2, 0xc2, + 0x31, 0x6a, 0xbb, 0xdf, 0x34, 0xa2, 0x85, 0x86, 0x19, 0x63, 0x18, 0x06, 0xac, 0x0d, 0xb3, 0x21, + 0x4a, 0x40, 0xe3, 0x61, 0x70, 0x9e, 0xca, 0x40, 0xee, 0x50, 0xd7, 0x45, 0x1c, 0xfb, 0xc8, 0xdd, + 0xc5, 0x84, 0xb6, 0x87, 0xda, 0xf9, 0x39, 0x98, 0x25, 0xb8, 0x67, 0x35, 0x85, 0x50, 0xd8, 0xa9, + 0xcf, 0x10, 0xdc, 0x93, 0x8b, 0x42, 0xa5, 0x4a, 0xc0, 0x58, 0xe9, 0xcf, 0x82, 0x4b, 0xfd, 0x96, + 0xeb, 0xd2, 0x06, 0xe2, 0xf8, 0xae, 0x47, 0x1b, 0x2d, 0x13, 0x1f, 0x20, 0x8e, 0xd9, 0x50, 0xa5, + 0x18, 0xae, 0xfb, 0x81, 0x48, 0x78, 0x23, 0x3b, 0xc7, 0x37, 0xb7, 0x85, 0x6f, 0x7e, 0xfd, 0xd7, + 0xf2, 0xfa, 0x08, 0xd1, 0x13, 0x0b, 0x98, 0x19, 0x61, 0x1b, 0xbf, 0xd4, 0xa0, 0x3c, 0xc4, 0xb4, + 0x78, 0xd3, 0xfe, 0x18, 0x3e, 0xe1, 0x94, 0x23, 0xd7, 0xc2, 0x62, 0xd6, 0x8a, 0xcc, 0xd2, 0x2e, + 0xdf, 0xac, 0x25, 0xa9, 0x27, 0x69, 0x84, 0xb1, 0x27, 0x5d, 0xf7, 0xd4, 0xe1, 0xad, 0xa6, 0x8f, + 0x7a, 0x23, 0xb9, 0x6e, 0x05, 0xa6, 0xa5, 0xa5, 0x81, 0xe7, 0x72, 0x66, 0x38, 0x32, 0x7e, 0x11, + 0x70, 0x55, 0x61, 0xc5, 0x5c, 0x8f, 0x60, 0xa9, 0x17, 0xce, 0x93, 0x8f, 0xc9, 0x74, 0x31, 0xd6, + 0x12, 0x11, 0x7d, 0xa7, 0xc1, 0xcd, 0x1a, 0xb3, 0xf7, 0x5b, 0xce, 0x21, 0xaf, 0xe3, 0xe0, 0x16, + 0xea, 0xb9, 0xce, 0xd5, 0x5d, 0x86, 0xea, 0x30, 0x27, 0xd2, 0xdc, 0xc3, 0xb6, 0xd5, 0x16, 0x8d, + 0xd9, 0x64, 0xc7, 0x18, 0x10, 0xdc, 0x0b, 0xcd, 0x37, 0xca, 0xf0, 0x79, 0x25, 0xa3, 0x78, 0x63, + 0xfc, 0x25, 0xc1, 0x79, 0xbf, 0x87, 0xbc, 0x3d, 0xd2, 0x45, 0xbe, 0x83, 0x08, 0xbf, 0x2a, 0xce, + 0xcf, 0x41, 0x17, 0x9c, 0x59, 0x0f, 0x79, 0x96, 0x13, 0x29, 0x9f, 0x80, 0xb9, 0xbc, 0xd1, 0x11, + 0xdc, 0x4b, 0x91, 0x48, 0xf2, 0x4f, 0x4d, 0xc4, 0xfc, 0xff, 0x3e, 0x25, 0x2b, 0xfd, 0x8e, 0x8f, + 0x11, 0xc7, 0xc1, 0x2d, 0x6a, 0x28, 0xf3, 0xe7, 0x29, 0xe6, 0xdf, 0x9b, 0x98, 0xf9, 0xd9, 0x49, + 0x39, 0x1f, 0x9c, 0xa1, 0xb2, 0xc3, 0x0c, 0x1d, 0xc1, 0x61, 0xd1, 0xf3, 0x9d, 0x06, 0x96, 0xa1, + 0x0f, 0xa2, 0x14, 0xba, 0x61, 0x6f, 0xbc, 0x04, 0x38, 0x3b, 0x29, 0xaf, 0x86, 0xf0, 0x03, 0x78, + 0x86, 0xb9, 0x20, 0x3f, 0x25, 0x32, 0xfb, 0x00, 0x80, 0xbd, 0xf2, 0xb9, 0xd5, 0xc4, 0x1e, 0x6f, + 0x85, 0x15, 0x6e, 0x67, 0x6c, 0x7d, 0x4b, 0x81, 0xbe, 0x3e, 0x92, 0x61, 0xce, 0x8a, 0xc1, 0xae, + 0xfc, 0xff, 0x4d, 0x70, 0xf8, 0x26, 0x7d, 0x1c, 0xef, 0xf6, 0x4b, 0x7e, 0x99, 0x4a, 0x3c, 0x45, + 0x07, 0x65, 0x22, 0x1a, 0x6e, 0xfe, 0x3c, 0x0f, 0xd9, 0x1a, 0xb3, 0xf5, 0x67, 0x30, 0x97, 0x7a, + 0x8e, 0x2e, 0x2b, 0xde, 0x9f, 0x92, 0x02, 0xc5, 0x2f, 0x5f, 0x20, 0x10, 0xa7, 0x52, 0x46, 0x7f, + 0x04, 0xb3, 0xfd, 0xb7, 0xd4, 0x4f, 0x15, 0xeb, 0xe2, 0xd9, 0xe2, 0x17, 0xcf, 0x9b, 0x4d, 0x40, + 0xbe, 0x80, 0xf9, 0x81, 0x57, 0xc4, 0x2f, 0x5c, 0xf8, 0x60, 0x56, 0xfc, 0xca, 0xc8, 0x6f, 0x6a, + 0x46, 0x46, 0x7f, 0x0a, 0xf9, 0xe4, 0xbb, 0x4f, 0x49, 0xb5, 0xb6, 0x3f, 0x5f, 0xfc, 0xec, 0xfc, + 0xf9, 0x04, 0xf0, 0x8f, 0xe0, 0x46, 0xfa, 0xc6, 0xb6, 0xa6, 0x58, 0x9a, 0x92, 0x28, 0xae, 0x5f, + 0x24, 0x91, 0x80, 0x7f, 0x06, 0x73, 0xa9, 0xfe, 0x5c, 0x15, 0xc8, 0xa4, 0x80, 0x32, 0x90, 0xaa, + 0x16, 0xd9, 0xc8, 0xe8, 0x16, 0xcc, 0x0f, 0xfc, 0x94, 0xa2, 0xf2, 0x7a, 0x5a, 0x64, 0x2c, 0xe3, + 0x3b, 0x70, 0x53, 0xdd, 0xa9, 0xa9, 0x40, 0x94, 0x92, 0xc5, 0xdb, 0xa3, 0x4a, 0xa6, 0xd5, 0xaa, + 0x1b, 0x2f, 0xa5, 0xed, 0x2a, 0x49, 0xa5, 0xda, 0xf3, 0x7b, 0xaf, 0x8c, 0xee, 0xc3, 0xb2, 0xb2, + 0xf3, 0x52, 0x45, 0x44, 0x25, 0x58, 0xac, 0x8e, 0x28, 0x98, 0xd6, 0xa9, 0x6c, 0x59, 0x54, 0x3a, + 0x55, 0x82, 0x4a, 0x9d, 0xe7, 0x35, 0x2e, 0x46, 0x46, 0x77, 0x41, 0x57, 0x34, 0x0f, 0x5f, 0x52, + 0xa5, 0xce, 0x07, 0x62, 0xc5, 0x8d, 0x91, 0xc4, 0x14, 0xda, 0xd2, 0x65, 0x7b, 0xa8, 0xb6, 0x94, + 0xd8, 0x70, 0x6d, 0xea, 0x32, 0x29, 0xb7, 0x5b, 0xaa, 0x48, 0xaa, 0xb6, 0x5b, 0x52, 0x40, 0xb9, + 0xdd, 0x54, 0x25, 0xc0, 0xc8, 0x6c, 0x7f, 0xf7, 0xed, 0xfb, 0x92, 0xf6, 0xee, 0x7d, 0x49, 0xfb, + 0xdb, 0xfb, 0x92, 0xf6, 0x93, 0xd3, 0x52, 0xe6, 0xdd, 0x69, 0x29, 0xf3, 0xa7, 0xd3, 0x52, 0xe6, + 0xd9, 0xc6, 0x45, 0x85, 0x20, 0xfe, 0x25, 0x56, 0x54, 0xa3, 0x83, 0x69, 0xf9, 0x6b, 0xe8, 0x57, + 0xff, 0x1d, 0x00, 0x00, 0xff, 0xff, 0xf7, 0x1e, 0x76, 0x1d, 0xa8, 0x1d, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1533,6 +1636,7 @@ type MsgClient interface { // ShiftSwapInvariant: gRPC tx msg for changing a market's swap invariant. // [Admin] Only callable by sudoers. ShiftSwapInvariant(ctx context.Context, in *MsgShiftSwapInvariant, opts ...grpc.CallOption) (*MsgShiftSwapInvariantResponse, error) + CreateMarket(ctx context.Context, in *MsgCreateMarket, opts ...grpc.CallOption) (*MsgCreateMarketResponse, error) } type msgClient struct { @@ -1660,6 +1764,15 @@ func (c *msgClient) ShiftSwapInvariant(ctx context.Context, in *MsgShiftSwapInva return out, nil } +func (c *msgClient) CreateMarket(ctx context.Context, in *MsgCreateMarket, opts ...grpc.CallOption) (*MsgCreateMarketResponse, error) { + out := new(MsgCreateMarketResponse) + err := c.cc.Invoke(ctx, "/nibiru.perp.v2.Msg/CreateMarket", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // MsgServer is the server API for Msg service. type MsgServer interface { RemoveMargin(context.Context, *MsgRemoveMargin) (*MsgRemoveMarginResponse, error) @@ -1681,6 +1794,7 @@ type MsgServer interface { // ShiftSwapInvariant: gRPC tx msg for changing a market's swap invariant. // [Admin] Only callable by sudoers. ShiftSwapInvariant(context.Context, *MsgShiftSwapInvariant) (*MsgShiftSwapInvariantResponse, error) + CreateMarket(context.Context, *MsgCreateMarket) (*MsgCreateMarketResponse, error) } // UnimplementedMsgServer can be embedded to have forward compatible implementations. @@ -1726,6 +1840,9 @@ func (*UnimplementedMsgServer) ShiftPegMultiplier(ctx context.Context, req *MsgS func (*UnimplementedMsgServer) ShiftSwapInvariant(ctx context.Context, req *MsgShiftSwapInvariant) (*MsgShiftSwapInvariantResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ShiftSwapInvariant not implemented") } +func (*UnimplementedMsgServer) CreateMarket(ctx context.Context, req *MsgCreateMarket) (*MsgCreateMarketResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateMarket not implemented") +} func RegisterMsgServer(s grpc1.Server, srv MsgServer) { s.RegisterService(&_Msg_serviceDesc, srv) @@ -1965,6 +2082,24 @@ func _Msg_ShiftSwapInvariant_Handler(srv interface{}, ctx context.Context, dec f return interceptor(ctx, in, info, handler) } +func _Msg_CreateMarket_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgCreateMarket) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).CreateMarket(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/nibiru.perp.v2.Msg/CreateMarket", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).CreateMarket(ctx, req.(*MsgCreateMarket)) + } + return interceptor(ctx, in, info, handler) +} + var _Msg_serviceDesc = grpc.ServiceDesc{ ServiceName: "nibiru.perp.v2.Msg", HandlerType: (*MsgServer)(nil), @@ -2021,6 +2156,10 @@ var _Msg_serviceDesc = grpc.ServiceDesc{ MethodName: "ShiftSwapInvariant", Handler: _Msg_ShiftSwapInvariant_Handler, }, + { + MethodName: "CreateMarket", + Handler: _Msg_CreateMarket_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "nibiru/perp/v2/tx.proto", @@ -3324,6 +3463,106 @@ func (m *MsgShiftSwapInvariantResponse) MarshalToSizedBuffer(dAtA []byte) (int, return len(dAtA) - i, nil } +func (m *MsgCreateMarket) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgCreateMarket) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgCreateMarket) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size := m.SqrtDepth.Size() + i -= size + if _, err := m.SqrtDepth.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + { + size := m.PriceMultiplier.Size() + i -= size + if _, err := m.PriceMultiplier.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + { + size := m.Pair.Size() + i -= size + if _, err := m.Pair.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + if len(m.Sender) > 0 { + i -= len(m.Sender) + copy(dAtA[i:], m.Sender) + i = encodeVarintTx(dAtA, i, uint64(len(m.Sender))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgCreateMarketResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgCreateMarketResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgCreateMarketResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Version) > 0 { + i -= len(m.Version) + copy(dAtA[i:], m.Version) + i = encodeVarintTx(dAtA, i, uint64(len(m.Version))) + i-- + dAtA[i] = 0x12 + } + { + size := m.Pair.Size() + i -= size + if _, err := m.Pair.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + func encodeVarintTx(dAtA []byte, offset int, v uint64) int { offset -= sovTx(v) base := offset @@ -3790,6 +4029,40 @@ func (m *MsgShiftSwapInvariantResponse) Size() (n int) { return n } +func (m *MsgCreateMarket) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Sender) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = m.Pair.Size() + n += 1 + l + sovTx(uint64(l)) + l = m.PriceMultiplier.Size() + n += 1 + l + sovTx(uint64(l)) + l = m.SqrtDepth.Size() + n += 1 + l + sovTx(uint64(l)) + return n +} + +func (m *MsgCreateMarketResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Pair.Size() + n += 1 + l + sovTx(uint64(l)) + l = len(m.Version) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + func sovTx(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } @@ -7496,6 +7769,306 @@ func (m *MsgShiftSwapInvariantResponse) Unmarshal(dAtA []byte) error { } return nil } +func (m *MsgCreateMarket) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgCreateMarket: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgCreateMarket: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Sender", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Sender = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pair", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Pair.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PriceMultiplier", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.PriceMultiplier.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SqrtDepth", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.SqrtDepth.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgCreateMarketResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgCreateMarketResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgCreateMarketResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pair", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Pair.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Version = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func skipTx(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 From 12c7910c0d939a392896031089e788118e7b39ca Mon Sep 17 00:00:00 2001 From: Jonathan Gimeno Date: Tue, 2 Jan 2024 12:16:33 +0100 Subject: [PATCH 3/8] add admin account --- x/perp/v2/keeper/amm_test.go | 24 ++++++++++++++++++++---- x/perp/v2/keeper/msg_server.go | 10 ++++------ x/perp/v2/keeper/sudo_test.go | 17 ++++++++++------- x/perp/v2/module/abci_test.go | 8 +++++++- 4 files changed, 41 insertions(+), 18 deletions(-) diff --git a/x/perp/v2/keeper/amm_test.go b/x/perp/v2/keeper/amm_test.go index 0136778f9..408a47dec 100644 --- a/x/perp/v2/keeper/amm_test.go +++ b/x/perp/v2/keeper/amm_test.go @@ -160,7 +160,10 @@ func TestShiftPegMultiplier_Fail(t *testing.T) { account := testutil.AccAddress() - err := app.PerpKeeperV2.Sudo().CreateMarket( + adminUser, err := sdk.AccAddressFromBech32(testutil.ADDR_SUDO_ROOT) + require.NoError(t, err) + + err = app.PerpKeeperV2.Sudo().CreateMarket( ctx, keeper.ArgsCreateMarket{ Pair: pair, @@ -168,6 +171,7 @@ func TestShiftPegMultiplier_Fail(t *testing.T) { SqrtDepth: sdk.NewDec(1_000_000), EnableMarket: true, }, + adminUser, ) app.PerpKeeperV2.ReserveSnapshots.Insert( ctx, @@ -230,7 +234,10 @@ func TestShiftSwapInvariant_Fail(t *testing.T) { app, ctx := testapp.NewNibiruTestAppAndContext() account := testutil.AccAddress() - err := app.PerpKeeperV2.Sudo().CreateMarket( + adminUser, err := sdk.AccAddressFromBech32(testutil.ADDR_SUDO_ROOT) + require.NoError(t, err) + + err = app.PerpKeeperV2.Sudo().CreateMarket( ctx, keeper.ArgsCreateMarket{ Pair: pair, @@ -238,6 +245,7 @@ func TestShiftSwapInvariant_Fail(t *testing.T) { SqrtDepth: sdk.NewDec(1_000), EnableMarket: true, }, + adminUser, ) app.PerpKeeperV2.ReserveSnapshots.Insert( ctx, @@ -437,7 +445,10 @@ func TestKeeper_GetMarketByPairAndVersion(t *testing.T) { pair := asset.Registry.Pair(denoms.BTC, denoms.NUSD) - err := app.PerpKeeperV2.Sudo().CreateMarket( + adminUser, err := sdk.AccAddressFromBech32(testutil.ADDR_SUDO_ROOT) + require.NoError(t, err) + + err = app.PerpKeeperV2.Sudo().CreateMarket( ctx, keeper.ArgsCreateMarket{ Pair: pair, @@ -445,6 +456,7 @@ func TestKeeper_GetMarketByPairAndVersion(t *testing.T) { SqrtDepth: sdk.NewDec(1_000_000), EnableMarket: true, }, + adminUser, ) require.NoError(t, err) @@ -462,7 +474,10 @@ func TestKeeper_GetAMMByPairAndVersion(t *testing.T) { pair := asset.Registry.Pair(denoms.BTC, denoms.NUSD) - err := app.PerpKeeperV2.Sudo().CreateMarket( + adminUser, err := sdk.AccAddressFromBech32(testutil.ADDR_SUDO_ROOT) + require.NoError(t, err) + + err = app.PerpKeeperV2.Sudo().CreateMarket( ctx, keeper.ArgsCreateMarket{ Pair: pair, @@ -470,6 +485,7 @@ func TestKeeper_GetAMMByPairAndVersion(t *testing.T) { SqrtDepth: sdk.NewDec(1_000_000), EnableMarket: true, }, + adminUser, ) require.NoError(t, err) diff --git a/x/perp/v2/keeper/msg_server.go b/x/perp/v2/keeper/msg_server.go index 71e390d7d..4033d4e99 100644 --- a/x/perp/v2/keeper/msg_server.go +++ b/x/perp/v2/keeper/msg_server.go @@ -210,20 +210,18 @@ func (m msgServer) ShiftPegMultiplier( // ShiftSwapInvariant: gRPC tx msg for changing a market's swap invariant. // [SUDO] Only callable by sudoers. func (m msgServer) ShiftSwapInvariant( - goCtx context.Context, msg *types.MsgShiftSwapInvariant, -) (*types.MsgShiftSwapInvariantResponse, error) { + goCtx context.Context, msg *types.MsgShiftSwapInvariant) (*types.MsgShiftSwapInvariantResponse, error) { // Sender is checked in `msg.ValidateBasic` before reaching this fn call. sender, _ := sdk.AccAddressFromBech32(msg.Sender) ctx := sdk.UnwrapSDKContext(goCtx) err := m.k.Sudo().ShiftSwapInvariant(ctx, msg.Pair, msg.NewSwapInvariant, sender) return &types.MsgShiftSwapInvariantResponse{}, err + } // WithdrawFromPerpFund: gRPC tx msg for changing a market's swap invariant. // [SUDO] Only callable by sudoers. -func (m msgServer) WithdrawFromPerpFund( - goCtx context.Context, msg *types.MsgWithdrawFromPerpFund, -) (resp *types.MsgWithdrawFromPerpFundResponse, err error) { +func (m msgServer) WithdrawFromPerpFund(goCtx context.Context, msg *types.MsgWithdrawFromPerpFund) (resp *types.MsgWithdrawFromPerpFundResponse, err error) { // Sender is checked in `msg.ValidateBasic` before reaching this fn call. sender, _ := sdk.AccAddressFromBech32(msg.Sender) toAddr, _ := sdk.AccAddressFromBech32(msg.ToAddr) @@ -243,7 +241,7 @@ func (m msgServer) CreateMarket( args := ArgsCreateMarket{} - err := m.k.Admin.CreateMarket(ctx, args, sender) + err := m.k.Sudo().CreateMarket(ctx, args, sender) if err != nil { return nil, err } diff --git a/x/perp/v2/keeper/sudo_test.go b/x/perp/v2/keeper/sudo_test.go index 9fdd4db63..1dff6661a 100644 --- a/x/perp/v2/keeper/sudo_test.go +++ b/x/perp/v2/keeper/sudo_test.go @@ -93,14 +93,17 @@ func TestCreateMarket(t *testing.T) { app, ctx := testapp.NewNibiruTestAppAndContext() admin := app.PerpKeeperV2.Sudo() + adminUser, err := sdk.AccAddressFromBech32(testutil.ADDR_SUDO_ROOT) + require.NoError(t, err) + // Error because of invalid market market := perptypes.DefaultMarket(pair).WithMaintenanceMarginRatio(sdk.NewDec(2)) - err := admin.CreateMarket(ctx, keeper.ArgsCreateMarket{ + err = admin.CreateMarket(ctx, keeper.ArgsCreateMarket{ Pair: pair, PriceMultiplier: amm.PriceMultiplier, SqrtDepth: amm.SqrtDepth, Market: &market, // Invalid maintenance ratio - }) + }, adminUser) require.ErrorContains(t, err, "maintenance margin ratio ratio must be 0 <= ratio <= 1") // Error because of invalid oracle pair @@ -110,7 +113,7 @@ func TestCreateMarket(t *testing.T) { PriceMultiplier: amm.PriceMultiplier, SqrtDepth: amm.SqrtDepth, Market: &market, // Invalid oracle pair - }) + }, adminUser) require.ErrorContains(t, err, "err when validating oracle pair random: invalid token pair") // Error because of invalid amm @@ -118,7 +121,7 @@ func TestCreateMarket(t *testing.T) { Pair: pair, PriceMultiplier: sdk.NewDec(-1), SqrtDepth: amm.SqrtDepth, - }) + }, adminUser) require.ErrorContains(t, err, types.ErrAmmNonPositivePegMult.Error()) // Set it correctly @@ -127,7 +130,7 @@ func TestCreateMarket(t *testing.T) { PriceMultiplier: amm.PriceMultiplier, SqrtDepth: amm.SqrtDepth, EnableMarket: true, - }) + }, adminUser) require.NoError(t, err) lastVersion, err := app.PerpKeeperV2.MarketLastVersion.Get(ctx, pair) @@ -148,7 +151,7 @@ func TestCreateMarket(t *testing.T) { Pair: pair, PriceMultiplier: amm.PriceMultiplier, SqrtDepth: amm.SqrtDepth, - }) + }, adminUser) require.ErrorContains(t, err, "already exists") // Close the market to test that we can create it again but with an increased version @@ -159,7 +162,7 @@ func TestCreateMarket(t *testing.T) { Pair: pair, PriceMultiplier: amm.PriceMultiplier, SqrtDepth: amm.SqrtDepth, - }) + }, adminUser) require.NoError(t, err) lastVersion, err = app.PerpKeeperV2.MarketLastVersion.Get(ctx, pair) diff --git a/x/perp/v2/module/abci_test.go b/x/perp/v2/module/abci_test.go index ed07f62d7..bc2bd1852 100644 --- a/x/perp/v2/module/abci_test.go +++ b/x/perp/v2/module/abci_test.go @@ -25,7 +25,8 @@ func TestSnapshotUpdates(t *testing.T) { initialMarket := *mock.TestMarket() initialAmm := *mock.TestAMMDefault() - adminAccount := sdk.AccAddressFromBech32("nibi") + adminUser, err := sdk.AccAddressFromBech32(testutilevents.ADDR_SUDO_ROOT) + require.NoError(t, err) runBlock := func(duration time.Duration) { perp.EndBlocker(ctx, app.PerpKeeperV2) @@ -43,6 +44,7 @@ func TestSnapshotUpdates(t *testing.T) { SqrtDepth: initialAmm.SqrtDepth, Market: &initialMarket, }, + adminUser, )) expectedSnapshot := types.ReserveSnapshot{ @@ -110,6 +112,9 @@ func TestEndBlocker(t *testing.T) { initialMarket := *mock.TestMarket() initialAmm := *mock.TestAMMDefault() + adminUser, err := sdk.AccAddressFromBech32(testutilevents.ADDR_SUDO_ROOT) + require.NoError(t, err) + runBlock := func(duration time.Duration) { perp.EndBlocker(ctx, app.PerpKeeperV2) ctx = ctx. @@ -128,6 +133,7 @@ func TestEndBlocker(t *testing.T) { SqrtDepth: initialAmm.SqrtDepth, Market: &initialMarket, }, + adminUser, )) t.Log("run one block of 5 seconds") From f65141f6e802042bcda5b5c4094c5f88e3afcc4d Mon Sep 17 00:00:00 2001 From: Jonathan Gimeno Date: Tue, 2 Jan 2024 16:53:15 +0100 Subject: [PATCH 4/8] add create market parse --- proto/nibiru/perp/v2/tx.proto | 4 + x/perp/v2/keeper/msg_server.go | 17 ++ x/perp/v2/types/tx.pb.go | 286 ++++++++++++++++++++------------- 3 files changed, 195 insertions(+), 112 deletions(-) diff --git a/proto/nibiru/perp/v2/tx.proto b/proto/nibiru/perp/v2/tx.proto index d926e2c38..619a71dab 100644 --- a/proto/nibiru/perp/v2/tx.proto +++ b/proto/nibiru/perp/v2/tx.proto @@ -483,6 +483,10 @@ message MsgCreateMarket { (gogoproto.moretags) = "yaml:\"sqrt_depth\"", (gogoproto.nullable) = false ]; + + Market market = 5 [ + (gogoproto.nullable) = true + ]; } message MsgCreateMarketResponse { diff --git a/x/perp/v2/keeper/msg_server.go b/x/perp/v2/keeper/msg_server.go index 097b35a0b..befedfa49 100644 --- a/x/perp/v2/keeper/msg_server.go +++ b/x/perp/v2/keeper/msg_server.go @@ -255,3 +255,20 @@ func (m msgServer) CreateMarket( return &types.MsgCreateMarketResponse{}, nil } + +func parseArgsCreateMarket(msg *types.MsgCreateMarket) (ArgsCreateMarket, error) { + args := ArgsCreateMarket{ + Pair: msg.Pair, + PriceMultiplier: msg.PriceMultiplier, + SqrtDepth: msg.SqrtDepth, + + Market: nil, + } + + if msg.Market != nil { + market := types.DefaultMarket(msg.Pair) + args.Market = &market + } + + return args, nil +} diff --git a/x/perp/v2/types/tx.pb.go b/x/perp/v2/types/tx.pb.go index 543eaab88..2f26612f9 100644 --- a/x/perp/v2/types/tx.pb.go +++ b/x/perp/v2/types/tx.pb.go @@ -1474,6 +1474,7 @@ type MsgCreateMarket struct { Pair github_com_NibiruChain_nibiru_x_common_asset.Pair `protobuf:"bytes,2,opt,name=pair,proto3,customtype=github.com/NibiruChain/nibiru/x/common/asset.Pair" json:"pair" yaml:"pair"` PriceMultiplier github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,3,opt,name=price_multiplier,json=priceMultiplier,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"price_multiplier" yaml:"price_multiplier"` SqrtDepth github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,4,opt,name=sqrt_depth,json=sqrtDepth,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"sqrt_depth" yaml:"sqrt_depth"` + Market *Market `protobuf:"bytes,5,opt,name=market,proto3" json:"market,omitempty"` } func (m *MsgCreateMarket) Reset() { *m = MsgCreateMarket{} } @@ -1516,6 +1517,13 @@ func (m *MsgCreateMarket) GetSender() string { return "" } +func (m *MsgCreateMarket) GetMarket() *Market { + if m != nil { + return m.Market + } + return nil +} + type MsgCreateMarketResponse struct { Pair github_com_NibiruChain_nibiru_x_common_asset.Pair `protobuf:"bytes,1,opt,name=pair,proto3,customtype=github.com/NibiruChain/nibiru/x/common/asset.Pair" json:"pair"` Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` @@ -1683,120 +1691,122 @@ func init() { func init() { proto.RegisterFile("nibiru/perp/v2/tx.proto", fileDescriptor_b95cda40bf0a0f91) } var fileDescriptor_b95cda40bf0a0f91 = []byte{ - // 1807 bytes of a gzipped FileDescriptorProto + // 1827 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x59, 0x5f, 0x6f, 0x1b, 0x4b, 0x15, 0xf7, 0xc6, 0x69, 0x9a, 0x9c, 0xa4, 0xf9, 0xb3, 0x37, 0x4d, 0x5c, 0x73, 0xb1, 0x73, 0x57, - 0x50, 0xc2, 0x43, 0xec, 0xdb, 0x80, 0x84, 0x40, 0x02, 0x94, 0x26, 0x0d, 0x14, 0xd5, 0xad, 0xbb, - 0xad, 0x5a, 0x54, 0x8a, 0xf6, 0x4e, 0xbc, 0x93, 0xcd, 0xea, 0xae, 0x67, 0xb6, 0x3b, 0x63, 0xbb, - 0x29, 0x6f, 0xf7, 0x13, 0xf0, 0xc0, 0x03, 0x12, 0x12, 0x6f, 0x48, 0x88, 0x07, 0x24, 0x1e, 0x80, - 0x17, 0x3e, 0x40, 0x1f, 0xfb, 0x88, 0x10, 0x0a, 0xd0, 0x4a, 0x88, 0x57, 0x2a, 0x3e, 0x00, 0x9a, - 0x99, 0xdd, 0xf5, 0xae, 0x3b, 0x76, 0x1c, 0x93, 0x46, 0x02, 0xf1, 0x94, 0xcc, 0xce, 0x99, 0xdf, - 0x39, 0xbf, 0xf3, 0x67, 0xe6, 0xcc, 0x18, 0xd6, 0x89, 0x7f, 0xe0, 0x47, 0x9d, 0x7a, 0x88, 0xa3, - 0xb0, 0xde, 0xdd, 0xae, 0xf3, 0xe7, 0xb5, 0x30, 0xa2, 0x9c, 0x9a, 0x8b, 0x6a, 0xa2, 0x26, 0x26, - 0x6a, 0xdd, 0xed, 0xf2, 0x87, 0x1e, 0xa5, 0x5e, 0x80, 0xeb, 0x28, 0xf4, 0xeb, 0x88, 0x10, 0xca, - 0x11, 0xf7, 0x29, 0x61, 0x4a, 0xba, 0x5c, 0x69, 0x51, 0xd6, 0xa6, 0xac, 0x7e, 0x80, 0x18, 0xae, - 0x77, 0x6f, 0x1c, 0x60, 0x8e, 0x6e, 0xd4, 0x5b, 0xd4, 0x27, 0xf1, 0xfc, 0xaa, 0x47, 0x3d, 0x2a, - 0xff, 0xad, 0x8b, 0xff, 0xe2, 0xaf, 0xe5, 0x01, 0xe5, 0x8c, 0x23, 0x8e, 0xd5, 0x9c, 0xf5, 0x13, - 0x03, 0x56, 0x1a, 0xcc, 0x7b, 0x80, 0x39, 0x0f, 0x70, 0x93, 0x32, 0x5f, 0xa8, 0x33, 0xd7, 0x60, - 0x86, 0x61, 0xe2, 0xe2, 0xa8, 0x64, 0x6c, 0x18, 0x9b, 0x73, 0x76, 0x3c, 0x32, 0x1b, 0x30, 0x1d, - 0x22, 0x3f, 0x2a, 0x4d, 0x89, 0xaf, 0x37, 0xbf, 0xfe, 0xf2, 0xa4, 0x5a, 0xf8, 0xd3, 0x49, 0xf5, - 0x86, 0xe7, 0xf3, 0xa3, 0xce, 0x41, 0xad, 0x45, 0xdb, 0xf5, 0xbb, 0x52, 0xd5, 0xee, 0x11, 0xf2, - 0x49, 0x3d, 0x56, 0xfb, 0xbc, 0xde, 0xa2, 0xed, 0x36, 0x25, 0x75, 0xc4, 0x18, 0xe6, 0xb5, 0x26, - 0xf2, 0x23, 0x5b, 0xc2, 0x98, 0x25, 0xb8, 0xdc, 0xc5, 0x11, 0xf3, 0x29, 0x29, 0x15, 0x37, 0x8c, - 0xcd, 0x69, 0x3b, 0x19, 0x5a, 0xbf, 0x31, 0x60, 0xa9, 0xc1, 0x3c, 0x1b, 0xb7, 0x69, 0x17, 0x37, - 0x50, 0xe4, 0xf9, 0x17, 0x66, 0xd4, 0xd7, 0x60, 0xa6, 0x2d, 0x15, 0x4a, 0x9b, 0xe6, 0xb7, 0xaf, - 0xd5, 0x94, 0xd3, 0x6b, 0xc2, 0xe9, 0xb5, 0xd8, 0xe9, 0xb5, 0x5d, 0xea, 0x93, 0x9b, 0xd3, 0x42, - 0x97, 0x1d, 0x8b, 0x5b, 0xff, 0x30, 0x60, 0x7d, 0xc0, 0x66, 0x1b, 0xb3, 0x90, 0x12, 0x86, 0xcd, - 0x6f, 0x01, 0x28, 0x29, 0x87, 0x76, 0xb8, 0xb4, 0x7f, 0x0c, 0xe0, 0x39, 0xb5, 0xe4, 0x5e, 0x87, - 0x9b, 0x8f, 0x61, 0xe9, 0xb0, 0x43, 0x5c, 0x9f, 0x78, 0x4e, 0x88, 0x8e, 0xdb, 0x98, 0xf0, 0x98, - 0x6e, 0x2d, 0xa6, 0x7b, 0x3d, 0x43, 0x37, 0x4e, 0x12, 0xf5, 0x67, 0x8b, 0xb9, 0x9f, 0xd6, 0xf9, - 0x71, 0x88, 0x59, 0x6d, 0x0f, 0xb7, 0xec, 0xc5, 0x18, 0xa6, 0xa9, 0x50, 0xcc, 0xaf, 0xc2, 0x6c, - 0x18, 0x47, 0x3d, 0xe6, 0x5b, 0xaa, 0xe5, 0x53, 0xb2, 0x96, 0x64, 0x85, 0x9d, 0x4a, 0x5a, 0xbf, - 0x36, 0x60, 0xa1, 0xc1, 0xbc, 0x1d, 0xd7, 0xfd, 0x2f, 0x89, 0xcd, 0x2f, 0x0c, 0x58, 0xcd, 0x1a, - 0x9c, 0x06, 0x46, 0xe3, 0x58, 0xe3, 0xdc, 0x1d, 0x3b, 0x35, 0xb6, 0x63, 0xff, 0xa5, 0xca, 0xb1, - 0xd1, 0x09, 0xb8, 0x7f, 0xc7, 0x7f, 0xd6, 0xf1, 0x5d, 0xc4, 0xf1, 0x50, 0xef, 0xde, 0x87, 0x85, - 0x20, 0x16, 0x12, 0x9b, 0x44, 0x69, 0x6a, 0xa3, 0xb8, 0x39, 0xbf, 0xbd, 0x35, 0xa8, 0xe7, 0x1d, - 0xc0, 0xda, 0x9d, 0xfe, 0x2a, 0x3b, 0x07, 0x51, 0xe6, 0x30, 0x9f, 0x99, 0x4c, 0xe3, 0x67, 0x9c, - 0x4f, 0xfc, 0xd6, 0x60, 0x86, 0x47, 0x48, 0x10, 0x99, 0x52, 0x44, 0xd4, 0xc8, 0xfa, 0x5d, 0x11, - 0xae, 0xbd, 0x63, 0x65, 0x1a, 0x23, 0x34, 0x40, 0xd3, 0x90, 0x34, 0xbf, 0x79, 0x2a, 0xcd, 0x04, - 0x20, 0x47, 0x37, 0xfe, 0x36, 0x40, 0xfb, 0xb7, 0x53, 0xf0, 0x81, 0x46, 0x4a, 0xec, 0x50, 0xac, - 0xd3, 0x6a, 0x61, 0xc6, 0xa4, 0x0b, 0x66, 0xed, 0x64, 0x68, 0xae, 0xc2, 0x25, 0x1c, 0x45, 0x34, - 0x61, 0xa2, 0x06, 0xe6, 0x3e, 0x2c, 0x26, 0xb8, 0x34, 0x72, 0x0e, 0x31, 0x1e, 0x2f, 0x51, 0x0d, - 0xfb, 0x4a, 0x7f, 0xd9, 0x3e, 0xc6, 0xe6, 0xb7, 0x61, 0x5e, 0xd0, 0x72, 0xf0, 0xa1, 0x04, 0x99, - 0x1e, 0x0f, 0x64, 0x4e, 0xac, 0xb9, 0x75, 0x28, 0x00, 0xfa, 0x9e, 0xbe, 0x94, 0xf5, 0x74, 0x1a, - 0xd0, 0x99, 0x73, 0x09, 0xa8, 0xf5, 0xfb, 0x22, 0x2c, 0x0a, 0xbf, 0xa3, 0xe8, 0x53, 0xcc, 0xef, - 0x45, 0x42, 0xc3, 0x05, 0x6d, 0x05, 0x5b, 0x30, 0xcd, 0x7c, 0x57, 0xf9, 0x77, 0x71, 0xfb, 0xda, - 0x60, 0x32, 0xec, 0xf9, 0x11, 0x6e, 0xc9, 0x50, 0x4a, 0x31, 0xf3, 0x29, 0x98, 0xcf, 0x3a, 0x94, - 0x63, 0x47, 0x02, 0x39, 0xa8, 0x4d, 0x3b, 0x84, 0x4b, 0xbf, 0x9e, 0xad, 0xd4, 0x6f, 0x13, 0x6e, - 0x2f, 0x4b, 0xa4, 0x1d, 0x01, 0xb4, 0x23, 0x71, 0xcc, 0xef, 0xc1, 0x6c, 0x80, 0xbb, 0x38, 0x42, - 0x1e, 0x56, 0xfe, 0x3e, 0xf3, 0xf6, 0x91, 0xae, 0x37, 0x31, 0xac, 0x8b, 0xf8, 0xe6, 0x0c, 0x75, - 0x02, 0xbf, 0xed, 0xf3, 0x38, 0x68, 0x67, 0x35, 0x77, 0x55, 0xc0, 0x65, 0xac, 0xbd, 0x23, 0xb0, - 0xac, 0x37, 0x97, 0x60, 0x2d, 0x1f, 0xb9, 0x34, 0xe9, 0xb3, 0x5b, 0x97, 0x31, 0xee, 0xd6, 0x65, - 0x1e, 0x41, 0x09, 0x3f, 0x6f, 0x1d, 0x21, 0xe2, 0x61, 0xd7, 0x21, 0x54, 0x7c, 0x43, 0x81, 0xd3, - 0x45, 0x41, 0x07, 0x4f, 0x78, 0x56, 0xad, 0xa5, 0x78, 0x77, 0x63, 0xb8, 0x47, 0x02, 0xcd, 0x3c, - 0x84, 0xf5, 0xbe, 0xa6, 0x44, 0xbf, 0xc3, 0xfc, 0x17, 0x2a, 0x1b, 0xce, 0xae, 0xe8, 0x6a, 0x0a, - 0x97, 0xf0, 0x7a, 0xe0, 0xbf, 0xd0, 0x9e, 0x0d, 0xd3, 0xe7, 0x72, 0x36, 0xdc, 0x87, 0x85, 0x08, - 0xa3, 0xc0, 0x7f, 0x21, 0xec, 0x27, 0xc1, 0x84, 0x29, 0x33, 0x9f, 0x60, 0x34, 0x49, 0x60, 0x7e, - 0x02, 0xab, 0x1d, 0x92, 0x05, 0x75, 0xd0, 0x21, 0xc7, 0xd1, 0x04, 0x29, 0x23, 0xa0, 0xcd, 0x3e, - 0x56, 0x93, 0x04, 0x3b, 0x02, 0xc9, 0x7c, 0x04, 0x4b, 0x71, 0x0b, 0xc3, 0xa9, 0xd3, 0x45, 0x9d, - 0x80, 0x97, 0x2e, 0x4f, 0x04, 0x7e, 0x45, 0xc1, 0x3c, 0xa4, 0x8f, 0x04, 0x88, 0xf9, 0x03, 0x58, - 0x49, 0x63, 0x98, 0xa4, 0x4d, 0x69, 0x76, 0x22, 0xe4, 0xe5, 0x04, 0x28, 0xc9, 0x17, 0xeb, 0x18, - 0x96, 0x1b, 0xcc, 0xdb, 0x0d, 0x28, 0xbb, 0xe8, 0xe6, 0xd6, 0x7a, 0x5b, 0x84, 0xd2, 0xa0, 0xee, - 0xb4, 0xc4, 0x46, 0x15, 0x8b, 0x71, 0x51, 0xc5, 0x32, 0xf5, 0x9e, 0x8b, 0xa5, 0xf8, 0x5e, 0x8a, - 0x65, 0xfa, 0x3f, 0x2f, 0x96, 0xef, 0xc3, 0x72, 0x3f, 0x95, 0xb3, 0xc7, 0xe4, 0xd9, 0x8d, 0x4d, - 0x72, 0xf9, 0xa1, 0x6a, 0x64, 0xfe, 0xa0, 0xee, 0x2d, 0x4d, 0x14, 0x71, 0x1f, 0x05, 0x32, 0xf6, - 0x17, 0x75, 0x20, 0xde, 0x14, 0x07, 0xe2, 0xc4, 0x5b, 0xa0, 0x5c, 0x6b, 0xfd, 0xb3, 0x28, 0xaf, - 0x30, 0x59, 0xf3, 0xff, 0x9f, 0xb2, 0xff, 0xe3, 0x29, 0xfb, 0x99, 0x21, 0xf7, 0xa9, 0x3d, 0x4a, - 0x10, 0xc7, 0x0f, 0xe9, 0xad, 0x16, 0x65, 0xc7, 0x8c, 0xe3, 0xf6, 0x7e, 0x87, 0xb8, 0x43, 0x73, - 0xf7, 0x2e, 0xcc, 0xba, 0x62, 0x41, 0xff, 0x76, 0x33, 0xa2, 0x39, 0x5d, 0x17, 0x16, 0xbe, 0x3d, - 0xa9, 0x2e, 0x1d, 0xa3, 0x76, 0xf0, 0x0d, 0x2b, 0x59, 0x68, 0xd9, 0x29, 0x86, 0x65, 0xc1, 0xc6, - 0x30, 0x1b, 0x92, 0x04, 0xb4, 0xee, 0xa9, 0xfd, 0x54, 0x06, 0x72, 0x97, 0x06, 0x01, 0xe2, 0x38, - 0x42, 0xc1, 0x1e, 0x26, 0xb4, 0x3d, 0xd4, 0xce, 0xcf, 0xc1, 0x1c, 0xc1, 0x3d, 0xc7, 0x15, 0x42, - 0x71, 0xa7, 0x3e, 0x4b, 0x70, 0x4f, 0x2e, 0x8a, 0x95, 0x6a, 0x01, 0x53, 0xa5, 0x3f, 0x55, 0x97, - 0xfa, 0x9d, 0x20, 0xa0, 0x2d, 0xc4, 0xf1, 0xad, 0x90, 0xb6, 0x8e, 0x6c, 0x7c, 0x80, 0x38, 0x66, - 0x43, 0x95, 0x62, 0xb8, 0x1c, 0x29, 0x91, 0xf8, 0x46, 0x36, 0xc2, 0x37, 0x1f, 0x0b, 0xdf, 0xfc, - 0xea, 0x2f, 0xd5, 0xcd, 0x31, 0xa2, 0x27, 0x16, 0x30, 0x3b, 0xc1, 0xb6, 0x7e, 0x6e, 0x40, 0x75, - 0x88, 0x69, 0x69, 0xd1, 0xfe, 0x08, 0x3e, 0xe0, 0x94, 0xa3, 0xc0, 0xc1, 0x62, 0xd6, 0x49, 0xcc, - 0x32, 0xce, 0xdf, 0xac, 0x15, 0xa9, 0x27, 0x6b, 0x84, 0x75, 0x5b, 0xba, 0xee, 0xb1, 0xcf, 0x8f, - 0xdc, 0x08, 0xf5, 0xc6, 0x72, 0xdd, 0x1a, 0xcc, 0x48, 0x4b, 0x95, 0xe7, 0xa6, 0xed, 0x78, 0x64, - 0xfd, 0x4c, 0x71, 0xd5, 0x61, 0xa5, 0x5c, 0x9f, 0xc3, 0x4a, 0x2f, 0x9e, 0x27, 0xef, 0x93, 0xe9, - 0x72, 0xaa, 0x25, 0x21, 0xfa, 0xca, 0x80, 0xab, 0x0d, 0xe6, 0x3d, 0x38, 0xf2, 0x0f, 0x79, 0x13, - 0xab, 0x5b, 0x68, 0x18, 0xf8, 0x17, 0x77, 0x19, 0x6a, 0xc2, 0x82, 0x48, 0xf3, 0x10, 0x7b, 0x4e, - 0x5b, 0x34, 0x66, 0x93, 0x6d, 0x63, 0x40, 0x70, 0x2f, 0x36, 0xdf, 0xaa, 0xc2, 0xe7, 0xb5, 0x8c, - 0xd2, 0xc2, 0xf8, 0x73, 0x86, 0xf3, 0x83, 0x1e, 0x0a, 0x6f, 0x93, 0x2e, 0x8a, 0x7c, 0x44, 0xf8, - 0x45, 0x71, 0x7e, 0x0a, 0xa6, 0xe0, 0xcc, 0x7a, 0x28, 0x74, 0xfc, 0x44, 0xf9, 0x04, 0xcc, 0xe5, - 0x8d, 0x8e, 0xe0, 0x5e, 0x8e, 0x44, 0x96, 0x7f, 0x6e, 0x22, 0xe5, 0xff, 0x4b, 0x23, 0x97, 0xdd, - 0xfb, 0x11, 0x6d, 0x37, 0x71, 0x14, 0x8e, 0xdc, 0x35, 0xf7, 0x61, 0x26, 0xbe, 0x78, 0x4e, 0x4d, - 0x64, 0x66, 0xbc, 0xda, 0x5c, 0x85, 0x4b, 0x6a, 0x47, 0x2b, 0xaa, 0xb7, 0x07, 0x39, 0x30, 0xd7, - 0xe1, 0x32, 0xa7, 0x0e, 0x72, 0xdd, 0x48, 0x1d, 0x38, 0xf6, 0x0c, 0xa7, 0x3b, 0xae, 0x1b, 0x59, - 0x1f, 0xe5, 0x6a, 0x27, 0x6b, 0x69, 0xca, 0xe6, 0x6f, 0x53, 0xb2, 0x6f, 0xd9, 0x8d, 0x30, 0xe2, - 0x58, 0xdd, 0x09, 0x87, 0xb2, 0x78, 0x9a, 0x8b, 0xe3, 0x77, 0x27, 0x8e, 0xe3, 0xdb, 0x93, 0xea, - 0xbc, 0x3a, 0x11, 0x64, 0xbf, 0x1c, 0x87, 0x95, 0xc3, 0x72, 0x18, 0xf9, 0x2d, 0x2c, 0x13, 0x59, - 0xe5, 0x5c, 0x1c, 0xd4, 0xdb, 0x67, 0x4b, 0xe7, 0xb7, 0x27, 0xd5, 0xf5, 0x18, 0x7e, 0x00, 0xcf, - 0xb2, 0x97, 0xe4, 0xa7, 0x4c, 0x9d, 0x1e, 0x00, 0xb0, 0x67, 0x11, 0x77, 0x5c, 0x1c, 0xf2, 0xa3, - 0xf8, 0xbc, 0xde, 0x3d, 0xb3, 0xbe, 0x15, 0xa5, 0xaf, 0x8f, 0x64, 0xd9, 0x73, 0x62, 0xb0, 0x27, - 0xff, 0xff, 0x4c, 0x65, 0x4c, 0xd6, 0xc7, 0xe9, 0xde, 0x75, 0xce, 0xef, 0x6c, 0x99, 0x87, 0x75, - 0x75, 0xe8, 0xa5, 0x0f, 0xeb, 0x3d, 0xf9, 0x5e, 0x23, 0x3b, 0xbb, 0x53, 0xc2, 0x7c, 0xce, 0xd7, - 0xa1, 0x92, 0x7c, 0x6e, 0xc8, 0x28, 0x4e, 0xb8, 0x6f, 0xff, 0x7d, 0x01, 0x8a, 0x0d, 0xe6, 0x99, - 0x4f, 0x60, 0x21, 0xf7, 0xde, 0x5f, 0xd5, 0x3c, 0xf0, 0x65, 0x05, 0xca, 0x5f, 0x3a, 0x45, 0x20, - 0xcd, 0xee, 0x82, 0x79, 0x1f, 0xe6, 0xfa, 0x8f, 0xd5, 0x1f, 0x6a, 0xd6, 0xa5, 0xb3, 0xe5, 0x2f, - 0x8c, 0x9a, 0xcd, 0x40, 0x7e, 0x02, 0x8b, 0x03, 0xcf, 0xb4, 0x1f, 0x9d, 0xfa, 0x22, 0x59, 0xfe, - 0xf2, 0xd8, 0x8f, 0x96, 0x56, 0xc1, 0x7c, 0x0c, 0xf3, 0xd9, 0x87, 0xb5, 0x8a, 0x6e, 0x6d, 0x7f, - 0xbe, 0x7c, 0x7d, 0xf4, 0x7c, 0x06, 0xf8, 0x87, 0x70, 0x25, 0x7f, 0x25, 0xde, 0xd0, 0x2c, 0xcd, - 0x49, 0x94, 0x37, 0x4f, 0x93, 0xc8, 0xc0, 0x3f, 0x81, 0x85, 0xdc, 0x05, 0x48, 0x17, 0xc8, 0xac, - 0x80, 0x36, 0x90, 0xba, 0x3b, 0x88, 0x55, 0x30, 0x1d, 0x58, 0x1c, 0xf8, 0xad, 0x4a, 0xe7, 0xf5, - 0xbc, 0xc8, 0x99, 0x8c, 0xef, 0xc0, 0x55, 0x7d, 0x2b, 0xac, 0x03, 0xd1, 0x4a, 0x96, 0x3f, 0x1e, - 0x57, 0x32, 0xaf, 0x56, 0xdf, 0xd9, 0x6a, 0x6d, 0xd7, 0x49, 0x6a, 0xd5, 0x8e, 0x6e, 0x6e, 0x0b, - 0x66, 0x04, 0xab, 0xda, 0xd6, 0x56, 0x17, 0x11, 0x9d, 0x60, 0xb9, 0x3e, 0xa6, 0x60, 0x5e, 0xa7, - 0xb6, 0x27, 0xd4, 0xe9, 0xd4, 0x09, 0x6a, 0x75, 0x8e, 0xea, 0x0c, 0xad, 0x82, 0x19, 0x80, 0xa9, - 0xe9, 0xce, 0xbe, 0xa8, 0x4b, 0x9d, 0x77, 0xc4, 0xca, 0x5b, 0x63, 0x89, 0x69, 0xb4, 0xe5, 0xfb, - 0xa2, 0xa1, 0xda, 0x72, 0x62, 0xc3, 0xb5, 0xe9, 0xfb, 0x90, 0x9c, 0x3f, 0x73, 0x5d, 0xc8, 0x28, - 0x7f, 0x66, 0x05, 0x47, 0xfa, 0x53, 0xdb, 0x2d, 0xc8, 0x12, 0xcf, 0xf5, 0x0a, 0xba, 0x12, 0xcf, - 0x0a, 0x68, 0x4b, 0x5c, 0x77, 0x12, 0xaa, 0x6d, 0x2f, 0x7b, 0x3e, 0x55, 0x86, 0x15, 0x6f, 0x8c, - 0x7c, 0x7d, 0xf4, 0x7c, 0x1f, 0xf8, 0xe6, 0x77, 0x5e, 0xbe, 0xae, 0x18, 0xaf, 0x5e, 0x57, 0x8c, - 0xbf, 0xbe, 0xae, 0x18, 0x3f, 0x7e, 0x53, 0x29, 0xbc, 0x7a, 0x53, 0x29, 0xfc, 0xf1, 0x4d, 0xa5, - 0xf0, 0x64, 0xeb, 0xb4, 0x53, 0x2d, 0xfd, 0xdd, 0x5e, 0x9c, 0xf6, 0x07, 0x33, 0xf2, 0xb7, 0xf3, - 0xaf, 0xfc, 0x3b, 0x00, 0x00, 0xff, 0xff, 0x8d, 0x18, 0xe2, 0x3c, 0xd6, 0x1f, 0x00, 0x00, + 0x50, 0xc2, 0x43, 0xec, 0xdb, 0x70, 0x25, 0x04, 0x12, 0xa0, 0x34, 0x69, 0xa0, 0xa8, 0x6e, 0xdd, + 0x6d, 0xd5, 0xa2, 0x52, 0xb4, 0x77, 0xe2, 0x9d, 0x6c, 0x56, 0x5d, 0xef, 0x6c, 0x77, 0xc6, 0x76, + 0x53, 0xde, 0xf8, 0x04, 0x3c, 0x20, 0x81, 0x84, 0xc4, 0x1b, 0x12, 0xe2, 0x01, 0x89, 0x07, 0xe0, + 0x85, 0x0f, 0x70, 0x1f, 0xfb, 0x88, 0x10, 0x0a, 0xa8, 0x95, 0x10, 0xaf, 0x54, 0x7c, 0x00, 0x34, + 0x7f, 0x76, 0xbd, 0xeb, 0x8e, 0x1d, 0xc7, 0xa4, 0x91, 0x40, 0x3c, 0x25, 0xb3, 0x73, 0xe6, 0x77, + 0xfe, 0xcf, 0x39, 0x73, 0x0c, 0xeb, 0xa1, 0x7f, 0xe0, 0xc7, 0x9d, 0x7a, 0x84, 0xe3, 0xa8, 0xde, + 0xdd, 0xae, 0xb3, 0x17, 0xb5, 0x28, 0x26, 0x8c, 0x98, 0x8b, 0x72, 0xa3, 0xc6, 0x37, 0x6a, 0xdd, + 0xed, 0xf2, 0x87, 0x1e, 0x21, 0x5e, 0x80, 0xeb, 0x28, 0xf2, 0xeb, 0x28, 0x0c, 0x09, 0x43, 0xcc, + 0x27, 0x21, 0x95, 0xd4, 0xe5, 0x4a, 0x8b, 0xd0, 0x36, 0xa1, 0xf5, 0x03, 0x44, 0x71, 0xbd, 0x7b, + 0xe3, 0x00, 0x33, 0x74, 0xa3, 0xde, 0x22, 0x7e, 0xa8, 0xf6, 0x57, 0x3d, 0xe2, 0x11, 0xf1, 0x6f, + 0x9d, 0xff, 0xa7, 0xbe, 0x96, 0x07, 0x98, 0x53, 0x86, 0x18, 0x96, 0x7b, 0xd6, 0x4f, 0x0c, 0x58, + 0x69, 0x50, 0xef, 0x01, 0x66, 0x2c, 0xc0, 0x4d, 0x42, 0x7d, 0xce, 0xce, 0x5c, 0x83, 0x19, 0x8a, + 0x43, 0x17, 0xc7, 0x25, 0x63, 0xc3, 0xd8, 0x9c, 0xb3, 0xd5, 0xca, 0x6c, 0xc0, 0x74, 0x84, 0xfc, + 0xb8, 0x34, 0xc5, 0xbf, 0xde, 0xfc, 0xda, 0x67, 0x27, 0xd5, 0xc2, 0x9f, 0x4f, 0xaa, 0x37, 0x3c, + 0x9f, 0x1d, 0x75, 0x0e, 0x6a, 0x2d, 0xd2, 0xae, 0xdf, 0x15, 0xac, 0x76, 0x8f, 0x90, 0x1f, 0xd6, + 0x15, 0xdb, 0x17, 0xf5, 0x16, 0x69, 0xb7, 0x49, 0x58, 0x47, 0x94, 0x62, 0x56, 0x6b, 0x22, 0x3f, + 0xb6, 0x05, 0x8c, 0x59, 0x82, 0xcb, 0x5d, 0x1c, 0x53, 0x9f, 0x84, 0xa5, 0xe2, 0x86, 0xb1, 0x39, + 0x6d, 0x27, 0x4b, 0xeb, 0xb7, 0x06, 0x2c, 0x35, 0xa8, 0x67, 0xe3, 0x36, 0xe9, 0xe2, 0x06, 0x8a, + 0x3d, 0xff, 0xc2, 0x84, 0xfa, 0x2a, 0xcc, 0xb4, 0x05, 0x43, 0x21, 0xd3, 0xfc, 0xf6, 0xb5, 0x9a, + 0x34, 0x7a, 0x8d, 0x1b, 0xbd, 0xa6, 0x8c, 0x5e, 0xdb, 0x25, 0x7e, 0x78, 0x73, 0x9a, 0xf3, 0xb2, + 0x15, 0xb9, 0xf5, 0x0f, 0x03, 0xd6, 0x07, 0x64, 0xb6, 0x31, 0x8d, 0x48, 0x48, 0xb1, 0xf9, 0x4d, + 0x00, 0x49, 0xe5, 0x90, 0x0e, 0x13, 0xf2, 0x8f, 0x01, 0x3c, 0x27, 0x8f, 0xdc, 0xeb, 0x30, 0xf3, + 0x31, 0x2c, 0x1d, 0x76, 0x42, 0xd7, 0x0f, 0x3d, 0x27, 0x42, 0xc7, 0x6d, 0x1c, 0x32, 0xa5, 0x6e, + 0x4d, 0xa9, 0x7b, 0x3d, 0xa3, 0xae, 0x0a, 0x12, 0xf9, 0x67, 0x8b, 0xba, 0xcf, 0xea, 0xec, 0x38, + 0xc2, 0xb4, 0xb6, 0x87, 0x5b, 0xf6, 0xa2, 0x82, 0x69, 0x4a, 0x14, 0xf3, 0x13, 0x98, 0x8d, 0x94, + 0xd7, 0x95, 0xbe, 0xa5, 0x5a, 0x3e, 0x24, 0x6b, 0x49, 0x54, 0xd8, 0x29, 0xa5, 0xf5, 0x1b, 0x03, + 0x16, 0x1a, 0xd4, 0xdb, 0x71, 0xdd, 0xff, 0x12, 0xdf, 0xfc, 0xd2, 0x80, 0xd5, 0xac, 0xc0, 0xa9, + 0x63, 0x34, 0x86, 0x35, 0xce, 0xdd, 0xb0, 0x53, 0x63, 0x1b, 0xf6, 0x5f, 0x32, 0x1d, 0x1b, 0x9d, + 0x80, 0xf9, 0x77, 0xfc, 0xe7, 0x1d, 0xdf, 0x45, 0x0c, 0x0f, 0xb5, 0xee, 0x7d, 0x58, 0x08, 0x14, + 0x11, 0xbf, 0x24, 0x4a, 0x53, 0x1b, 0xc5, 0xcd, 0xf9, 0xed, 0xad, 0x41, 0x3e, 0xef, 0x00, 0xd6, + 0xee, 0xf4, 0x4f, 0xd9, 0x39, 0x88, 0x32, 0x83, 0xf9, 0xcc, 0x66, 0xea, 0x3f, 0xe3, 0x7c, 0xfc, + 0xb7, 0x06, 0x33, 0x2c, 0x46, 0x5c, 0x91, 0x29, 0xa9, 0x88, 0x5c, 0x59, 0xbf, 0x2f, 0xc2, 0xb5, + 0x77, 0xa4, 0x4c, 0x7d, 0x84, 0x06, 0xd4, 0x34, 0x84, 0x9a, 0xdf, 0x38, 0x55, 0xcd, 0x04, 0x20, + 0xa7, 0xae, 0xfa, 0x36, 0xa0, 0xf6, 0xef, 0xa6, 0xe0, 0x03, 0x0d, 0x15, 0xbf, 0xa1, 0x68, 0xa7, + 0xd5, 0xc2, 0x94, 0x0a, 0x13, 0xcc, 0xda, 0xc9, 0xd2, 0x5c, 0x85, 0x4b, 0x38, 0x8e, 0x49, 0xa2, + 0x89, 0x5c, 0x98, 0xfb, 0xb0, 0x98, 0xe0, 0x92, 0xd8, 0x39, 0xc4, 0x78, 0xbc, 0x40, 0x35, 0xec, + 0x2b, 0xfd, 0x63, 0xfb, 0x18, 0x9b, 0xdf, 0x82, 0x79, 0xae, 0x96, 0x83, 0x0f, 0x05, 0xc8, 0xf4, + 0x78, 0x20, 0x73, 0xfc, 0xcc, 0xad, 0x43, 0x0e, 0xd0, 0xb7, 0xf4, 0xa5, 0xac, 0xa5, 0x53, 0x87, + 0xce, 0x9c, 0x8b, 0x43, 0xad, 0x3f, 0x14, 0x61, 0x91, 0xdb, 0x1d, 0xc5, 0xcf, 0x30, 0xbb, 0x17, + 0x73, 0x0e, 0x17, 0x74, 0x15, 0x6c, 0xc1, 0x34, 0xf5, 0x5d, 0x69, 0xdf, 0xc5, 0xed, 0x6b, 0x83, + 0xc1, 0xb0, 0xe7, 0xc7, 0xb8, 0x25, 0x5c, 0x29, 0xc8, 0xcc, 0xa7, 0x60, 0x3e, 0xef, 0x10, 0x86, + 0x1d, 0x01, 0xe4, 0xa0, 0x36, 0xe9, 0x84, 0x4c, 0xd8, 0xf5, 0x6c, 0xa9, 0x7e, 0x3b, 0x64, 0xf6, + 0xb2, 0x40, 0xda, 0xe1, 0x40, 0x3b, 0x02, 0xc7, 0xfc, 0x2e, 0xcc, 0x06, 0xb8, 0x8b, 0x63, 0xe4, + 0x61, 0x69, 0xef, 0x33, 0x5f, 0x1f, 0xe9, 0x79, 0x13, 0xc3, 0x3a, 0xf7, 0x6f, 0x4e, 0x50, 0x27, + 0xf0, 0xdb, 0x3e, 0x53, 0x4e, 0x3b, 0xab, 0xb8, 0xab, 0x1c, 0x2e, 0x23, 0xed, 0x1d, 0x8e, 0x65, + 0xbd, 0xb9, 0x04, 0x6b, 0x79, 0xcf, 0xa5, 0x41, 0x9f, 0xbd, 0xba, 0x8c, 0x71, 0xaf, 0x2e, 0xf3, + 0x08, 0x4a, 0xf8, 0x45, 0xeb, 0x08, 0x85, 0x1e, 0x76, 0x9d, 0x90, 0xf0, 0x6f, 0x28, 0x70, 0xba, + 0x28, 0xe8, 0xe0, 0x09, 0x6b, 0xd5, 0x5a, 0x8a, 0x77, 0x57, 0xc1, 0x3d, 0xe2, 0x68, 0xe6, 0x21, + 0xac, 0xf7, 0x39, 0x25, 0xfc, 0x1d, 0xea, 0xbf, 0x94, 0xd1, 0x70, 0x76, 0x46, 0x57, 0x53, 0xb8, + 0x44, 0xaf, 0x07, 0xfe, 0x4b, 0x6d, 0x6d, 0x98, 0x3e, 0x97, 0xda, 0x70, 0x1f, 0x16, 0x62, 0x8c, + 0x02, 0xff, 0x25, 0x97, 0x3f, 0x0c, 0x26, 0x0c, 0x99, 0xf9, 0x04, 0xa3, 0x19, 0x06, 0xe6, 0xa7, + 0xb0, 0xda, 0x09, 0xb3, 0xa0, 0x0e, 0x3a, 0x64, 0x38, 0x9e, 0x20, 0x64, 0x38, 0xb4, 0xd9, 0xc7, + 0x6a, 0x86, 0xc1, 0x0e, 0x47, 0x32, 0x1f, 0xc1, 0x92, 0x6a, 0x61, 0x18, 0x71, 0xba, 0xa8, 0x13, + 0xb0, 0xd2, 0xe5, 0x89, 0xc0, 0xaf, 0x48, 0x98, 0x87, 0xe4, 0x11, 0x07, 0x31, 0xbf, 0x0f, 0x2b, + 0xa9, 0x0f, 0x93, 0xb0, 0x29, 0xcd, 0x4e, 0x84, 0xbc, 0x9c, 0x00, 0x25, 0xf1, 0x62, 0x1d, 0xc3, + 0x72, 0x83, 0x7a, 0xbb, 0x01, 0xa1, 0x17, 0xdd, 0xdc, 0x5a, 0x6f, 0x8b, 0x50, 0x1a, 0xe4, 0x9d, + 0xa6, 0xd8, 0xa8, 0x64, 0x31, 0x2e, 0x2a, 0x59, 0xa6, 0xde, 0x73, 0xb2, 0x14, 0xdf, 0x4b, 0xb2, + 0x4c, 0xff, 0xe7, 0xc9, 0xf2, 0x3d, 0x58, 0xee, 0x87, 0x72, 0xb6, 0x4c, 0x9e, 0x5d, 0xd8, 0x24, + 0x96, 0x1f, 0xca, 0x46, 0xe6, 0x8f, 0xf2, 0xdd, 0xd2, 0x44, 0x31, 0xf3, 0x51, 0x20, 0x7c, 0x7f, + 0x51, 0x05, 0xf1, 0x26, 0x2f, 0x88, 0x13, 0x5f, 0x81, 0xe2, 0xac, 0xf5, 0xcf, 0xa2, 0x78, 0xc2, + 0x64, 0xc5, 0xff, 0x7f, 0xc8, 0xfe, 0x8f, 0x87, 0xec, 0x8f, 0x0c, 0x71, 0x4f, 0xed, 0x91, 0x10, + 0x31, 0xfc, 0x90, 0xdc, 0x6a, 0x11, 0x7a, 0x4c, 0x19, 0x6e, 0xef, 0x77, 0x42, 0x77, 0x68, 0xec, + 0xde, 0x85, 0x59, 0x97, 0x1f, 0xe8, 0xbf, 0x6e, 0x46, 0x34, 0xa7, 0xeb, 0x5c, 0xc2, 0xb7, 0x27, + 0xd5, 0xa5, 0x63, 0xd4, 0x0e, 0xbe, 0x6e, 0x25, 0x07, 0x2d, 0x3b, 0xc5, 0xb0, 0x2c, 0xd8, 0x18, + 0x26, 0x43, 0x12, 0x80, 0xd6, 0x3d, 0x79, 0x9f, 0x0a, 0x47, 0xee, 0x92, 0x20, 0x40, 0x0c, 0xc7, + 0x28, 0xd8, 0xc3, 0x21, 0x69, 0x0f, 0x95, 0xf3, 0x73, 0x30, 0x17, 0xe2, 0x9e, 0xe3, 0x72, 0x22, + 0xd5, 0xa9, 0xcf, 0x86, 0xb8, 0x27, 0x0e, 0x29, 0xa6, 0x5a, 0xc0, 0x94, 0xe9, 0xcf, 0xe4, 0xa3, + 0x7e, 0x27, 0x08, 0x48, 0x0b, 0x31, 0x7c, 0x2b, 0x22, 0xad, 0x23, 0x1b, 0x1f, 0x20, 0x86, 0xe9, + 0x50, 0xa6, 0x18, 0x2e, 0xc7, 0x92, 0x44, 0xbd, 0xc8, 0x46, 0xd8, 0xe6, 0x63, 0x6e, 0x9b, 0x5f, + 0xff, 0xb5, 0xba, 0x39, 0x86, 0xf7, 0xf8, 0x01, 0x6a, 0x27, 0xd8, 0xd6, 0x2f, 0x0c, 0xa8, 0x0e, + 0x11, 0x2d, 0x4d, 0xda, 0x1f, 0xc2, 0x07, 0x8c, 0x30, 0x14, 0x38, 0x98, 0xef, 0x3a, 0x89, 0x58, + 0xc6, 0xf9, 0x8b, 0xb5, 0x22, 0xf8, 0x64, 0x85, 0xb0, 0x6e, 0x0b, 0xd3, 0x3d, 0xf6, 0xd9, 0x91, + 0x1b, 0xa3, 0xde, 0x58, 0xa6, 0x5b, 0x83, 0x19, 0x21, 0xa9, 0xb4, 0xdc, 0xb4, 0xad, 0x56, 0xd6, + 0xcf, 0xa5, 0xae, 0x3a, 0xac, 0x54, 0xd7, 0x17, 0xb0, 0xd2, 0x53, 0xfb, 0xe1, 0xfb, 0xd4, 0x74, + 0x39, 0xe5, 0x92, 0x28, 0xfa, 0xca, 0x80, 0xab, 0x0d, 0xea, 0x3d, 0x38, 0xf2, 0x0f, 0x59, 0x13, + 0xcb, 0x57, 0x68, 0x14, 0xf8, 0x17, 0xf7, 0x18, 0x6a, 0xc2, 0x02, 0x0f, 0xf3, 0x08, 0x7b, 0x4e, + 0x9b, 0x37, 0x66, 0x93, 0x5d, 0x63, 0x10, 0xe2, 0x9e, 0x12, 0xdf, 0xaa, 0xc2, 0xe7, 0xb5, 0x1a, + 0xa5, 0x89, 0xf1, 0x97, 0x8c, 0xce, 0x0f, 0x7a, 0x28, 0xba, 0x1d, 0x76, 0x51, 0xec, 0xa3, 0x90, + 0x5d, 0x94, 0xce, 0x4f, 0xc1, 0xe4, 0x3a, 0xd3, 0x1e, 0x8a, 0x1c, 0x3f, 0x61, 0x3e, 0x81, 0xe6, + 0xe2, 0x45, 0x17, 0xe2, 0x5e, 0x4e, 0x89, 0xac, 0xfe, 0xb9, 0x8d, 0x54, 0xff, 0x5f, 0x19, 0xb9, + 0xe8, 0xde, 0x8f, 0x49, 0xbb, 0x89, 0xe3, 0x68, 0xe4, 0xad, 0xb9, 0x0f, 0x33, 0xea, 0xe1, 0x39, + 0x35, 0x91, 0x98, 0xea, 0xb4, 0xb9, 0x0a, 0x97, 0xe4, 0x8d, 0x56, 0x94, 0xb3, 0x07, 0xb1, 0x30, + 0xd7, 0xe1, 0x32, 0x23, 0x0e, 0x72, 0xdd, 0x58, 0x16, 0x1c, 0x7b, 0x86, 0x91, 0x1d, 0xd7, 0x8d, + 0xad, 0x8f, 0x72, 0xb9, 0x93, 0x95, 0x34, 0xd5, 0xe6, 0xa7, 0x45, 0xd1, 0xb7, 0xec, 0xc6, 0x18, + 0x31, 0x2c, 0xdf, 0x84, 0x43, 0xb5, 0x78, 0x9a, 0xf3, 0xe3, 0x77, 0x26, 0xf6, 0xe3, 0xdb, 0x93, + 0xea, 0xbc, 0xac, 0x08, 0xa2, 0x5f, 0x56, 0x6e, 0x65, 0xb0, 0x1c, 0xc5, 0x7e, 0x0b, 0x8b, 0x40, + 0x96, 0x31, 0xa7, 0x9c, 0x7a, 0xfb, 0x6c, 0xe1, 0xfc, 0xf6, 0xa4, 0xba, 0xae, 0xe0, 0x07, 0xf0, + 0x2c, 0x7b, 0x49, 0x7c, 0xca, 0xe4, 0xe9, 0x01, 0x00, 0x7d, 0x1e, 0x33, 0xc7, 0xc5, 0x11, 0x3b, + 0x52, 0xf5, 0x7a, 0xf7, 0xcc, 0xfc, 0x56, 0x24, 0xbf, 0x3e, 0x92, 0x65, 0xcf, 0xf1, 0xc5, 0x1e, + 0xff, 0xdf, 0xfc, 0x44, 0x0c, 0x2f, 0x9f, 0x61, 0x26, 0x0a, 0xf7, 0xfc, 0xf6, 0xda, 0x3b, 0x03, + 0x2c, 0xb1, 0xab, 0x66, 0x39, 0x8a, 0x96, 0x97, 0xe7, 0xf5, 0x01, 0xcf, 0xa4, 0x37, 0xde, 0x39, + 0x4f, 0xe7, 0x32, 0xe3, 0x78, 0x59, 0x2a, 0xd3, 0x71, 0x7c, 0x4f, 0x4c, 0x79, 0x44, 0x3f, 0x78, + 0x4a, 0x70, 0x9c, 0xf3, 0x23, 0xaa, 0x24, 0x86, 0x14, 0x19, 0xc6, 0x89, 0xee, 0xdb, 0x7f, 0x5f, + 0x80, 0x62, 0x83, 0x7a, 0xe6, 0x13, 0x58, 0xc8, 0xfd, 0x4a, 0x50, 0xd5, 0x8c, 0x05, 0xb3, 0x04, + 0xe5, 0x2f, 0x9d, 0x42, 0x90, 0xe6, 0x44, 0xc1, 0xbc, 0x0f, 0x73, 0xfd, 0x11, 0xf7, 0x87, 0x9a, + 0x73, 0xe9, 0x6e, 0xf9, 0x0b, 0xa3, 0x76, 0x33, 0x90, 0x9f, 0xc2, 0xe2, 0xc0, 0x70, 0xf7, 0xa3, + 0x53, 0xe7, 0x98, 0xe5, 0x2f, 0x8f, 0x3d, 0xea, 0xb4, 0x0a, 0xe6, 0x63, 0x98, 0xcf, 0x8e, 0xe3, + 0x2a, 0xba, 0xb3, 0xfd, 0xfd, 0xf2, 0xf5, 0xd1, 0xfb, 0x19, 0xe0, 0x1f, 0xc0, 0x95, 0xfc, 0x43, + 0x7a, 0x43, 0x73, 0x34, 0x47, 0x51, 0xde, 0x3c, 0x8d, 0x22, 0x03, 0xff, 0x04, 0x16, 0x72, 0xcf, + 0x26, 0x9d, 0x23, 0xb3, 0x04, 0x5a, 0x47, 0xea, 0x5e, 0x2e, 0x56, 0xc1, 0x74, 0x60, 0x71, 0xe0, + 0x17, 0x2e, 0x9d, 0xd5, 0xf3, 0x24, 0x67, 0x12, 0xbe, 0x03, 0x57, 0xf5, 0x0d, 0xb4, 0x0e, 0x44, + 0x4b, 0x59, 0xfe, 0x78, 0x5c, 0xca, 0x3c, 0x5b, 0x7d, 0x3f, 0xac, 0x95, 0x5d, 0x47, 0xa9, 0x65, + 0x3b, 0xba, 0x25, 0x2e, 0x98, 0x31, 0xac, 0x6a, 0x1b, 0x62, 0x9d, 0x47, 0x74, 0x84, 0xe5, 0xfa, + 0x98, 0x84, 0x79, 0x9e, 0xda, 0x4e, 0x52, 0xc7, 0x53, 0x47, 0xa8, 0xe5, 0x39, 0xaa, 0x9f, 0xb4, + 0x0a, 0x66, 0x00, 0xa6, 0xa6, 0xa7, 0xfb, 0xa2, 0x2e, 0x74, 0xde, 0x21, 0x2b, 0x6f, 0x8d, 0x45, + 0xa6, 0xe1, 0x96, 0xef, 0xa6, 0x86, 0x72, 0xcb, 0x91, 0x0d, 0xe7, 0xa6, 0xef, 0x5e, 0x72, 0xf6, + 0xcc, 0xf5, 0x2e, 0xa3, 0xec, 0x99, 0x25, 0x1c, 0x69, 0x4f, 0x6d, 0x8f, 0x21, 0x52, 0x3c, 0xd7, + 0x61, 0xe8, 0x52, 0x3c, 0x4b, 0xa0, 0x4d, 0x71, 0x5d, 0x25, 0x94, 0xd7, 0x5e, 0xb6, 0x3e, 0x55, + 0x86, 0x25, 0xaf, 0x42, 0xbe, 0x3e, 0x7a, 0xbf, 0x0f, 0x7c, 0xf3, 0xdb, 0x9f, 0xbd, 0xae, 0x18, + 0xaf, 0x5e, 0x57, 0x8c, 0xbf, 0xbd, 0xae, 0x18, 0x3f, 0x7e, 0x53, 0x29, 0xbc, 0x7a, 0x53, 0x29, + 0xfc, 0xe9, 0x4d, 0xa5, 0xf0, 0x64, 0xeb, 0xb4, 0xaa, 0x96, 0xfe, 0xda, 0xcf, 0x7b, 0x84, 0x83, + 0x19, 0xf1, 0x8b, 0xfb, 0x57, 0xfe, 0x1d, 0x00, 0x00, 0xff, 0xff, 0x2b, 0x10, 0x2c, 0x2a, 0x0c, + 0x20, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -3834,6 +3844,18 @@ func (m *MsgCreateMarket) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.Market != nil { + { + size, err := m.Market.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } { size := m.SqrtDepth.Size() i -= size @@ -4491,6 +4513,10 @@ func (m *MsgCreateMarket) Size() (n int) { n += 1 + l + sovTx(uint64(l)) l = m.SqrtDepth.Size() n += 1 + l + sovTx(uint64(l)) + if m.Market != nil { + l = m.Market.Size() + n += 1 + l + sovTx(uint64(l)) + } return n } @@ -8632,6 +8658,42 @@ func (m *MsgCreateMarket) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Market", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Market == nil { + m.Market = &Market{} + } + if err := m.Market.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTx(dAtA[iNdEx:]) From e8969d67fc38e846b7beb892eee8b2d4fd735dd3 Mon Sep 17 00:00:00 2001 From: Jonathan Gimeno Date: Tue, 2 Jan 2024 19:47:45 +0100 Subject: [PATCH 5/8] add create market request --- proto/nibiru/perp/v2/tx.proto | 9 +- x/perp/v2/keeper/msg_server.go | 7 +- x/perp/v2/types/tx.pb.go | 319 ++++++++++++--------------------- 3 files changed, 114 insertions(+), 221 deletions(-) diff --git a/proto/nibiru/perp/v2/tx.proto b/proto/nibiru/perp/v2/tx.proto index 619a71dab..196b98e0e 100644 --- a/proto/nibiru/perp/v2/tx.proto +++ b/proto/nibiru/perp/v2/tx.proto @@ -489,15 +489,8 @@ message MsgCreateMarket { ]; } -message MsgCreateMarketResponse { - string pair = 1 [ - (gogoproto.customtype) = - "github.com/NibiruChain/nibiru/x/common/asset.Pair", - (gogoproto.nullable) = false - ]; +message MsgCreateMarketResponse {} - string version = 2; -} // -------------------------- CloseMarket -------------------------- // CloseMarket: gRPC tx msg for closing a market. diff --git a/x/perp/v2/keeper/msg_server.go b/x/perp/v2/keeper/msg_server.go index befedfa49..789fddcf0 100644 --- a/x/perp/v2/keeper/msg_server.go +++ b/x/perp/v2/keeper/msg_server.go @@ -216,7 +216,6 @@ func (m msgServer) ShiftSwapInvariant( ctx := sdk.UnwrapSDKContext(goCtx) err := m.k.Sudo().ShiftSwapInvariant(ctx, msg.Pair, msg.NewSwapInvariant, sender) return &types.MsgShiftSwapInvariantResponse{}, err - } // WithdrawFromPerpFund: gRPC tx msg for changing a market's swap invariant. @@ -246,7 +245,7 @@ func (m msgServer) CreateMarket( sender, _ := sdk.AccAddressFromBech32(msg.Sender) ctx := sdk.UnwrapSDKContext(goCtx) - args := ArgsCreateMarket{} + args := parseArgsCreateMarket(msg) err := m.k.Sudo().CreateMarket(ctx, args, sender) if err != nil { @@ -256,7 +255,7 @@ func (m msgServer) CreateMarket( return &types.MsgCreateMarketResponse{}, nil } -func parseArgsCreateMarket(msg *types.MsgCreateMarket) (ArgsCreateMarket, error) { +func parseArgsCreateMarket(msg *types.MsgCreateMarket) ArgsCreateMarket { args := ArgsCreateMarket{ Pair: msg.Pair, PriceMultiplier: msg.PriceMultiplier, @@ -270,5 +269,5 @@ func parseArgsCreateMarket(msg *types.MsgCreateMarket) (ArgsCreateMarket, error) args.Market = &market } - return args, nil + return args } diff --git a/x/perp/v2/types/tx.pb.go b/x/perp/v2/types/tx.pb.go index 2f26612f9..6a6b571cb 100644 --- a/x/perp/v2/types/tx.pb.go +++ b/x/perp/v2/types/tx.pb.go @@ -1525,8 +1525,6 @@ func (m *MsgCreateMarket) GetMarket() *Market { } type MsgCreateMarketResponse struct { - Pair github_com_NibiruChain_nibiru_x_common_asset.Pair `protobuf:"bytes,1,opt,name=pair,proto3,customtype=github.com/NibiruChain/nibiru/x/common/asset.Pair" json:"pair"` - Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` } func (m *MsgCreateMarketResponse) Reset() { *m = MsgCreateMarketResponse{} } @@ -1562,13 +1560,6 @@ func (m *MsgCreateMarketResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgCreateMarketResponse proto.InternalMessageInfo -func (m *MsgCreateMarketResponse) GetVersion() string { - if m != nil { - return m.Version - } - return "" -} - // CloseMarket: gRPC tx msg for closing a market. // Admin-only. type MsgCloseMarket struct { @@ -1691,122 +1682,121 @@ func init() { func init() { proto.RegisterFile("nibiru/perp/v2/tx.proto", fileDescriptor_b95cda40bf0a0f91) } var fileDescriptor_b95cda40bf0a0f91 = []byte{ - // 1827 bytes of a gzipped FileDescriptorProto + // 1816 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x59, 0x5f, 0x6f, 0x1b, 0x4b, 0x15, 0xf7, 0xc6, 0x69, 0x9a, 0x9c, 0xa4, 0xf9, 0xb3, 0x37, 0x4d, 0x5c, 0x73, 0xb1, 0x73, 0x57, 0x50, 0xc2, 0x43, 0xec, 0xdb, 0x70, 0x25, 0x04, 0x12, 0xa0, 0x34, 0x69, 0xa0, 0xa8, 0x6e, 0xdd, - 0x6d, 0xd5, 0xa2, 0x52, 0xb4, 0x77, 0xe2, 0x9d, 0x6c, 0x56, 0x5d, 0xef, 0x6c, 0x77, 0xc6, 0x76, + 0x6d, 0xd5, 0xa2, 0x52, 0xb4, 0x77, 0xe2, 0x9d, 0x6c, 0x56, 0x5d, 0xcf, 0x6c, 0x77, 0xc6, 0x76, 0x53, 0xde, 0xf8, 0x04, 0x3c, 0x20, 0x81, 0x84, 0xc4, 0x1b, 0x12, 0xe2, 0x01, 0x89, 0x07, 0xe0, 0x85, 0x0f, 0x70, 0x1f, 0xfb, 0x88, 0x10, 0x0a, 0xa8, 0x95, 0x10, 0xaf, 0x54, 0x7c, 0x00, 0x34, - 0x7f, 0x76, 0xbd, 0xeb, 0x8e, 0x1d, 0xc7, 0xa4, 0x91, 0x40, 0x3c, 0x25, 0xb3, 0x73, 0xe6, 0x77, - 0xfe, 0xcf, 0x39, 0x73, 0x0c, 0xeb, 0xa1, 0x7f, 0xe0, 0xc7, 0x9d, 0x7a, 0x84, 0xe3, 0xa8, 0xde, - 0xdd, 0xae, 0xb3, 0x17, 0xb5, 0x28, 0x26, 0x8c, 0x98, 0x8b, 0x72, 0xa3, 0xc6, 0x37, 0x6a, 0xdd, - 0xed, 0xf2, 0x87, 0x1e, 0x21, 0x5e, 0x80, 0xeb, 0x28, 0xf2, 0xeb, 0x28, 0x0c, 0x09, 0x43, 0xcc, - 0x27, 0x21, 0x95, 0xd4, 0xe5, 0x4a, 0x8b, 0xd0, 0x36, 0xa1, 0xf5, 0x03, 0x44, 0x71, 0xbd, 0x7b, - 0xe3, 0x00, 0x33, 0x74, 0xa3, 0xde, 0x22, 0x7e, 0xa8, 0xf6, 0x57, 0x3d, 0xe2, 0x11, 0xf1, 0x6f, - 0x9d, 0xff, 0xa7, 0xbe, 0x96, 0x07, 0x98, 0x53, 0x86, 0x18, 0x96, 0x7b, 0xd6, 0x4f, 0x0c, 0x58, - 0x69, 0x50, 0xef, 0x01, 0x66, 0x2c, 0xc0, 0x4d, 0x42, 0x7d, 0xce, 0xce, 0x5c, 0x83, 0x19, 0x8a, - 0x43, 0x17, 0xc7, 0x25, 0x63, 0xc3, 0xd8, 0x9c, 0xb3, 0xd5, 0xca, 0x6c, 0xc0, 0x74, 0x84, 0xfc, - 0xb8, 0x34, 0xc5, 0xbf, 0xde, 0xfc, 0xda, 0x67, 0x27, 0xd5, 0xc2, 0x9f, 0x4f, 0xaa, 0x37, 0x3c, - 0x9f, 0x1d, 0x75, 0x0e, 0x6a, 0x2d, 0xd2, 0xae, 0xdf, 0x15, 0xac, 0x76, 0x8f, 0x90, 0x1f, 0xd6, - 0x15, 0xdb, 0x17, 0xf5, 0x16, 0x69, 0xb7, 0x49, 0x58, 0x47, 0x94, 0x62, 0x56, 0x6b, 0x22, 0x3f, - 0xb6, 0x05, 0x8c, 0x59, 0x82, 0xcb, 0x5d, 0x1c, 0x53, 0x9f, 0x84, 0xa5, 0xe2, 0x86, 0xb1, 0x39, - 0x6d, 0x27, 0x4b, 0xeb, 0xb7, 0x06, 0x2c, 0x35, 0xa8, 0x67, 0xe3, 0x36, 0xe9, 0xe2, 0x06, 0x8a, - 0x3d, 0xff, 0xc2, 0x84, 0xfa, 0x2a, 0xcc, 0xb4, 0x05, 0x43, 0x21, 0xd3, 0xfc, 0xf6, 0xb5, 0x9a, - 0x34, 0x7a, 0x8d, 0x1b, 0xbd, 0xa6, 0x8c, 0x5e, 0xdb, 0x25, 0x7e, 0x78, 0x73, 0x9a, 0xf3, 0xb2, - 0x15, 0xb9, 0xf5, 0x0f, 0x03, 0xd6, 0x07, 0x64, 0xb6, 0x31, 0x8d, 0x48, 0x48, 0xb1, 0xf9, 0x4d, - 0x00, 0x49, 0xe5, 0x90, 0x0e, 0x13, 0xf2, 0x8f, 0x01, 0x3c, 0x27, 0x8f, 0xdc, 0xeb, 0x30, 0xf3, - 0x31, 0x2c, 0x1d, 0x76, 0x42, 0xd7, 0x0f, 0x3d, 0x27, 0x42, 0xc7, 0x6d, 0x1c, 0x32, 0xa5, 0x6e, - 0x4d, 0xa9, 0x7b, 0x3d, 0xa3, 0xae, 0x0a, 0x12, 0xf9, 0x67, 0x8b, 0xba, 0xcf, 0xea, 0xec, 0x38, - 0xc2, 0xb4, 0xb6, 0x87, 0x5b, 0xf6, 0xa2, 0x82, 0x69, 0x4a, 0x14, 0xf3, 0x13, 0x98, 0x8d, 0x94, - 0xd7, 0x95, 0xbe, 0xa5, 0x5a, 0x3e, 0x24, 0x6b, 0x49, 0x54, 0xd8, 0x29, 0xa5, 0xf5, 0x1b, 0x03, - 0x16, 0x1a, 0xd4, 0xdb, 0x71, 0xdd, 0xff, 0x12, 0xdf, 0xfc, 0xd2, 0x80, 0xd5, 0xac, 0xc0, 0xa9, - 0x63, 0x34, 0x86, 0x35, 0xce, 0xdd, 0xb0, 0x53, 0x63, 0x1b, 0xf6, 0x5f, 0x32, 0x1d, 0x1b, 0x9d, - 0x80, 0xf9, 0x77, 0xfc, 0xe7, 0x1d, 0xdf, 0x45, 0x0c, 0x0f, 0xb5, 0xee, 0x7d, 0x58, 0x08, 0x14, - 0x11, 0xbf, 0x24, 0x4a, 0x53, 0x1b, 0xc5, 0xcd, 0xf9, 0xed, 0xad, 0x41, 0x3e, 0xef, 0x00, 0xd6, - 0xee, 0xf4, 0x4f, 0xd9, 0x39, 0x88, 0x32, 0x83, 0xf9, 0xcc, 0x66, 0xea, 0x3f, 0xe3, 0x7c, 0xfc, - 0xb7, 0x06, 0x33, 0x2c, 0x46, 0x5c, 0x91, 0x29, 0xa9, 0x88, 0x5c, 0x59, 0xbf, 0x2f, 0xc2, 0xb5, - 0x77, 0xa4, 0x4c, 0x7d, 0x84, 0x06, 0xd4, 0x34, 0x84, 0x9a, 0xdf, 0x38, 0x55, 0xcd, 0x04, 0x20, - 0xa7, 0xae, 0xfa, 0x36, 0xa0, 0xf6, 0xef, 0xa6, 0xe0, 0x03, 0x0d, 0x15, 0xbf, 0xa1, 0x68, 0xa7, - 0xd5, 0xc2, 0x94, 0x0a, 0x13, 0xcc, 0xda, 0xc9, 0xd2, 0x5c, 0x85, 0x4b, 0x38, 0x8e, 0x49, 0xa2, - 0x89, 0x5c, 0x98, 0xfb, 0xb0, 0x98, 0xe0, 0x92, 0xd8, 0x39, 0xc4, 0x78, 0xbc, 0x40, 0x35, 0xec, - 0x2b, 0xfd, 0x63, 0xfb, 0x18, 0x9b, 0xdf, 0x82, 0x79, 0xae, 0x96, 0x83, 0x0f, 0x05, 0xc8, 0xf4, - 0x78, 0x20, 0x73, 0xfc, 0xcc, 0xad, 0x43, 0x0e, 0xd0, 0xb7, 0xf4, 0xa5, 0xac, 0xa5, 0x53, 0x87, - 0xce, 0x9c, 0x8b, 0x43, 0xad, 0x3f, 0x14, 0x61, 0x91, 0xdb, 0x1d, 0xc5, 0xcf, 0x30, 0xbb, 0x17, - 0x73, 0x0e, 0x17, 0x74, 0x15, 0x6c, 0xc1, 0x34, 0xf5, 0x5d, 0x69, 0xdf, 0xc5, 0xed, 0x6b, 0x83, - 0xc1, 0xb0, 0xe7, 0xc7, 0xb8, 0x25, 0x5c, 0x29, 0xc8, 0xcc, 0xa7, 0x60, 0x3e, 0xef, 0x10, 0x86, - 0x1d, 0x01, 0xe4, 0xa0, 0x36, 0xe9, 0x84, 0x4c, 0xd8, 0xf5, 0x6c, 0xa9, 0x7e, 0x3b, 0x64, 0xf6, - 0xb2, 0x40, 0xda, 0xe1, 0x40, 0x3b, 0x02, 0xc7, 0xfc, 0x2e, 0xcc, 0x06, 0xb8, 0x8b, 0x63, 0xe4, - 0x61, 0x69, 0xef, 0x33, 0x5f, 0x1f, 0xe9, 0x79, 0x13, 0xc3, 0x3a, 0xf7, 0x6f, 0x4e, 0x50, 0x27, - 0xf0, 0xdb, 0x3e, 0x53, 0x4e, 0x3b, 0xab, 0xb8, 0xab, 0x1c, 0x2e, 0x23, 0xed, 0x1d, 0x8e, 0x65, - 0xbd, 0xb9, 0x04, 0x6b, 0x79, 0xcf, 0xa5, 0x41, 0x9f, 0xbd, 0xba, 0x8c, 0x71, 0xaf, 0x2e, 0xf3, - 0x08, 0x4a, 0xf8, 0x45, 0xeb, 0x08, 0x85, 0x1e, 0x76, 0x9d, 0x90, 0xf0, 0x6f, 0x28, 0x70, 0xba, - 0x28, 0xe8, 0xe0, 0x09, 0x6b, 0xd5, 0x5a, 0x8a, 0x77, 0x57, 0xc1, 0x3d, 0xe2, 0x68, 0xe6, 0x21, - 0xac, 0xf7, 0x39, 0x25, 0xfc, 0x1d, 0xea, 0xbf, 0x94, 0xd1, 0x70, 0x76, 0x46, 0x57, 0x53, 0xb8, - 0x44, 0xaf, 0x07, 0xfe, 0x4b, 0x6d, 0x6d, 0x98, 0x3e, 0x97, 0xda, 0x70, 0x1f, 0x16, 0x62, 0x8c, - 0x02, 0xff, 0x25, 0x97, 0x3f, 0x0c, 0x26, 0x0c, 0x99, 0xf9, 0x04, 0xa3, 0x19, 0x06, 0xe6, 0xa7, - 0xb0, 0xda, 0x09, 0xb3, 0xa0, 0x0e, 0x3a, 0x64, 0x38, 0x9e, 0x20, 0x64, 0x38, 0xb4, 0xd9, 0xc7, - 0x6a, 0x86, 0xc1, 0x0e, 0x47, 0x32, 0x1f, 0xc1, 0x92, 0x6a, 0x61, 0x18, 0x71, 0xba, 0xa8, 0x13, - 0xb0, 0xd2, 0xe5, 0x89, 0xc0, 0xaf, 0x48, 0x98, 0x87, 0xe4, 0x11, 0x07, 0x31, 0xbf, 0x0f, 0x2b, - 0xa9, 0x0f, 0x93, 0xb0, 0x29, 0xcd, 0x4e, 0x84, 0xbc, 0x9c, 0x00, 0x25, 0xf1, 0x62, 0x1d, 0xc3, - 0x72, 0x83, 0x7a, 0xbb, 0x01, 0xa1, 0x17, 0xdd, 0xdc, 0x5a, 0x6f, 0x8b, 0x50, 0x1a, 0xe4, 0x9d, - 0xa6, 0xd8, 0xa8, 0x64, 0x31, 0x2e, 0x2a, 0x59, 0xa6, 0xde, 0x73, 0xb2, 0x14, 0xdf, 0x4b, 0xb2, - 0x4c, 0xff, 0xe7, 0xc9, 0xf2, 0x3d, 0x58, 0xee, 0x87, 0x72, 0xb6, 0x4c, 0x9e, 0x5d, 0xd8, 0x24, - 0x96, 0x1f, 0xca, 0x46, 0xe6, 0x8f, 0xf2, 0xdd, 0xd2, 0x44, 0x31, 0xf3, 0x51, 0x20, 0x7c, 0x7f, - 0x51, 0x05, 0xf1, 0x26, 0x2f, 0x88, 0x13, 0x5f, 0x81, 0xe2, 0xac, 0xf5, 0xcf, 0xa2, 0x78, 0xc2, - 0x64, 0xc5, 0xff, 0x7f, 0xc8, 0xfe, 0x8f, 0x87, 0xec, 0x8f, 0x0c, 0x71, 0x4f, 0xed, 0x91, 0x10, - 0x31, 0xfc, 0x90, 0xdc, 0x6a, 0x11, 0x7a, 0x4c, 0x19, 0x6e, 0xef, 0x77, 0x42, 0x77, 0x68, 0xec, - 0xde, 0x85, 0x59, 0x97, 0x1f, 0xe8, 0xbf, 0x6e, 0x46, 0x34, 0xa7, 0xeb, 0x5c, 0xc2, 0xb7, 0x27, - 0xd5, 0xa5, 0x63, 0xd4, 0x0e, 0xbe, 0x6e, 0x25, 0x07, 0x2d, 0x3b, 0xc5, 0xb0, 0x2c, 0xd8, 0x18, - 0x26, 0x43, 0x12, 0x80, 0xd6, 0x3d, 0x79, 0x9f, 0x0a, 0x47, 0xee, 0x92, 0x20, 0x40, 0x0c, 0xc7, - 0x28, 0xd8, 0xc3, 0x21, 0x69, 0x0f, 0x95, 0xf3, 0x73, 0x30, 0x17, 0xe2, 0x9e, 0xe3, 0x72, 0x22, - 0xd5, 0xa9, 0xcf, 0x86, 0xb8, 0x27, 0x0e, 0x29, 0xa6, 0x5a, 0xc0, 0x94, 0xe9, 0xcf, 0xe4, 0xa3, - 0x7e, 0x27, 0x08, 0x48, 0x0b, 0x31, 0x7c, 0x2b, 0x22, 0xad, 0x23, 0x1b, 0x1f, 0x20, 0x86, 0xe9, - 0x50, 0xa6, 0x18, 0x2e, 0xc7, 0x92, 0x44, 0xbd, 0xc8, 0x46, 0xd8, 0xe6, 0x63, 0x6e, 0x9b, 0x5f, - 0xff, 0xb5, 0xba, 0x39, 0x86, 0xf7, 0xf8, 0x01, 0x6a, 0x27, 0xd8, 0xd6, 0x2f, 0x0c, 0xa8, 0x0e, - 0x11, 0x2d, 0x4d, 0xda, 0x1f, 0xc2, 0x07, 0x8c, 0x30, 0x14, 0x38, 0x98, 0xef, 0x3a, 0x89, 0x58, - 0xc6, 0xf9, 0x8b, 0xb5, 0x22, 0xf8, 0x64, 0x85, 0xb0, 0x6e, 0x0b, 0xd3, 0x3d, 0xf6, 0xd9, 0x91, - 0x1b, 0xa3, 0xde, 0x58, 0xa6, 0x5b, 0x83, 0x19, 0x21, 0xa9, 0xb4, 0xdc, 0xb4, 0xad, 0x56, 0xd6, - 0xcf, 0xa5, 0xae, 0x3a, 0xac, 0x54, 0xd7, 0x17, 0xb0, 0xd2, 0x53, 0xfb, 0xe1, 0xfb, 0xd4, 0x74, - 0x39, 0xe5, 0x92, 0x28, 0xfa, 0xca, 0x80, 0xab, 0x0d, 0xea, 0x3d, 0x38, 0xf2, 0x0f, 0x59, 0x13, - 0xcb, 0x57, 0x68, 0x14, 0xf8, 0x17, 0xf7, 0x18, 0x6a, 0xc2, 0x02, 0x0f, 0xf3, 0x08, 0x7b, 0x4e, - 0x9b, 0x37, 0x66, 0x93, 0x5d, 0x63, 0x10, 0xe2, 0x9e, 0x12, 0xdf, 0xaa, 0xc2, 0xe7, 0xb5, 0x1a, - 0xa5, 0x89, 0xf1, 0x97, 0x8c, 0xce, 0x0f, 0x7a, 0x28, 0xba, 0x1d, 0x76, 0x51, 0xec, 0xa3, 0x90, - 0x5d, 0x94, 0xce, 0x4f, 0xc1, 0xe4, 0x3a, 0xd3, 0x1e, 0x8a, 0x1c, 0x3f, 0x61, 0x3e, 0x81, 0xe6, - 0xe2, 0x45, 0x17, 0xe2, 0x5e, 0x4e, 0x89, 0xac, 0xfe, 0xb9, 0x8d, 0x54, 0xff, 0x5f, 0x19, 0xb9, - 0xe8, 0xde, 0x8f, 0x49, 0xbb, 0x89, 0xe3, 0x68, 0xe4, 0xad, 0xb9, 0x0f, 0x33, 0xea, 0xe1, 0x39, - 0x35, 0x91, 0x98, 0xea, 0xb4, 0xb9, 0x0a, 0x97, 0xe4, 0x8d, 0x56, 0x94, 0xb3, 0x07, 0xb1, 0x30, - 0xd7, 0xe1, 0x32, 0x23, 0x0e, 0x72, 0xdd, 0x58, 0x16, 0x1c, 0x7b, 0x86, 0x91, 0x1d, 0xd7, 0x8d, - 0xad, 0x8f, 0x72, 0xb9, 0x93, 0x95, 0x34, 0xd5, 0xe6, 0xa7, 0x45, 0xd1, 0xb7, 0xec, 0xc6, 0x18, - 0x31, 0x2c, 0xdf, 0x84, 0x43, 0xb5, 0x78, 0x9a, 0xf3, 0xe3, 0x77, 0x26, 0xf6, 0xe3, 0xdb, 0x93, - 0xea, 0xbc, 0xac, 0x08, 0xa2, 0x5f, 0x56, 0x6e, 0x65, 0xb0, 0x1c, 0xc5, 0x7e, 0x0b, 0x8b, 0x40, - 0x96, 0x31, 0xa7, 0x9c, 0x7a, 0xfb, 0x6c, 0xe1, 0xfc, 0xf6, 0xa4, 0xba, 0xae, 0xe0, 0x07, 0xf0, - 0x2c, 0x7b, 0x49, 0x7c, 0xca, 0xe4, 0xe9, 0x01, 0x00, 0x7d, 0x1e, 0x33, 0xc7, 0xc5, 0x11, 0x3b, - 0x52, 0xf5, 0x7a, 0xf7, 0xcc, 0xfc, 0x56, 0x24, 0xbf, 0x3e, 0x92, 0x65, 0xcf, 0xf1, 0xc5, 0x1e, - 0xff, 0xdf, 0xfc, 0x44, 0x0c, 0x2f, 0x9f, 0x61, 0x26, 0x0a, 0xf7, 0xfc, 0xf6, 0xda, 0x3b, 0x03, - 0x2c, 0xb1, 0xab, 0x66, 0x39, 0x8a, 0x96, 0x97, 0xe7, 0xf5, 0x01, 0xcf, 0xa4, 0x37, 0xde, 0x39, - 0x4f, 0xe7, 0x32, 0xe3, 0x78, 0x59, 0x2a, 0xd3, 0x71, 0x7c, 0x4f, 0x4c, 0x79, 0x44, 0x3f, 0x78, - 0x4a, 0x70, 0x9c, 0xf3, 0x23, 0xaa, 0x24, 0x86, 0x14, 0x19, 0xc6, 0x89, 0xee, 0xdb, 0x7f, 0x5f, - 0x80, 0x62, 0x83, 0x7a, 0xe6, 0x13, 0x58, 0xc8, 0xfd, 0x4a, 0x50, 0xd5, 0x8c, 0x05, 0xb3, 0x04, - 0xe5, 0x2f, 0x9d, 0x42, 0x90, 0xe6, 0x44, 0xc1, 0xbc, 0x0f, 0x73, 0xfd, 0x11, 0xf7, 0x87, 0x9a, - 0x73, 0xe9, 0x6e, 0xf9, 0x0b, 0xa3, 0x76, 0x33, 0x90, 0x9f, 0xc2, 0xe2, 0xc0, 0x70, 0xf7, 0xa3, - 0x53, 0xe7, 0x98, 0xe5, 0x2f, 0x8f, 0x3d, 0xea, 0xb4, 0x0a, 0xe6, 0x63, 0x98, 0xcf, 0x8e, 0xe3, - 0x2a, 0xba, 0xb3, 0xfd, 0xfd, 0xf2, 0xf5, 0xd1, 0xfb, 0x19, 0xe0, 0x1f, 0xc0, 0x95, 0xfc, 0x43, - 0x7a, 0x43, 0x73, 0x34, 0x47, 0x51, 0xde, 0x3c, 0x8d, 0x22, 0x03, 0xff, 0x04, 0x16, 0x72, 0xcf, - 0x26, 0x9d, 0x23, 0xb3, 0x04, 0x5a, 0x47, 0xea, 0x5e, 0x2e, 0x56, 0xc1, 0x74, 0x60, 0x71, 0xe0, - 0x17, 0x2e, 0x9d, 0xd5, 0xf3, 0x24, 0x67, 0x12, 0xbe, 0x03, 0x57, 0xf5, 0x0d, 0xb4, 0x0e, 0x44, - 0x4b, 0x59, 0xfe, 0x78, 0x5c, 0xca, 0x3c, 0x5b, 0x7d, 0x3f, 0xac, 0x95, 0x5d, 0x47, 0xa9, 0x65, - 0x3b, 0xba, 0x25, 0x2e, 0x98, 0x31, 0xac, 0x6a, 0x1b, 0x62, 0x9d, 0x47, 0x74, 0x84, 0xe5, 0xfa, - 0x98, 0x84, 0x79, 0x9e, 0xda, 0x4e, 0x52, 0xc7, 0x53, 0x47, 0xa8, 0xe5, 0x39, 0xaa, 0x9f, 0xb4, - 0x0a, 0x66, 0x00, 0xa6, 0xa6, 0xa7, 0xfb, 0xa2, 0x2e, 0x74, 0xde, 0x21, 0x2b, 0x6f, 0x8d, 0x45, - 0xa6, 0xe1, 0x96, 0xef, 0xa6, 0x86, 0x72, 0xcb, 0x91, 0x0d, 0xe7, 0xa6, 0xef, 0x5e, 0x72, 0xf6, - 0xcc, 0xf5, 0x2e, 0xa3, 0xec, 0x99, 0x25, 0x1c, 0x69, 0x4f, 0x6d, 0x8f, 0x21, 0x52, 0x3c, 0xd7, - 0x61, 0xe8, 0x52, 0x3c, 0x4b, 0xa0, 0x4d, 0x71, 0x5d, 0x25, 0x94, 0xd7, 0x5e, 0xb6, 0x3e, 0x55, - 0x86, 0x25, 0xaf, 0x42, 0xbe, 0x3e, 0x7a, 0xbf, 0x0f, 0x7c, 0xf3, 0xdb, 0x9f, 0xbd, 0xae, 0x18, - 0xaf, 0x5e, 0x57, 0x8c, 0xbf, 0xbd, 0xae, 0x18, 0x3f, 0x7e, 0x53, 0x29, 0xbc, 0x7a, 0x53, 0x29, - 0xfc, 0xe9, 0x4d, 0xa5, 0xf0, 0x64, 0xeb, 0xb4, 0xaa, 0x96, 0xfe, 0xda, 0xcf, 0x7b, 0x84, 0x83, - 0x19, 0xf1, 0x8b, 0xfb, 0x57, 0xfe, 0x1d, 0x00, 0x00, 0xff, 0xff, 0x2b, 0x10, 0x2c, 0x2a, 0x0c, - 0x20, 0x00, 0x00, + 0xb3, 0xb3, 0xeb, 0x5d, 0x77, 0xec, 0x38, 0x26, 0x8d, 0x04, 0xe2, 0x29, 0x99, 0x9d, 0x33, 0xbf, + 0xf3, 0x7f, 0xce, 0x39, 0x63, 0x58, 0x27, 0xfe, 0x81, 0x1f, 0x75, 0xea, 0x21, 0x8e, 0xc2, 0x7a, + 0x77, 0xbb, 0xce, 0x5f, 0xd4, 0xc2, 0x88, 0x72, 0x6a, 0x2e, 0xc6, 0x1b, 0x35, 0xb1, 0x51, 0xeb, + 0x6e, 0x97, 0x3f, 0xf4, 0x28, 0xf5, 0x02, 0x5c, 0x47, 0xa1, 0x5f, 0x47, 0x84, 0x50, 0x8e, 0xb8, + 0x4f, 0x09, 0x8b, 0xa9, 0xcb, 0x95, 0x16, 0x65, 0x6d, 0xca, 0xea, 0x07, 0x88, 0xe1, 0x7a, 0xf7, + 0xc6, 0x01, 0xe6, 0xe8, 0x46, 0xbd, 0x45, 0x7d, 0xa2, 0xf6, 0x57, 0x3d, 0xea, 0x51, 0xf9, 0x6f, + 0x5d, 0xfc, 0xa7, 0xbe, 0x96, 0x07, 0x98, 0x33, 0x8e, 0x38, 0x8e, 0xf7, 0xac, 0x9f, 0x18, 0xb0, + 0xd2, 0x60, 0xde, 0x03, 0xcc, 0x79, 0x80, 0x9b, 0x94, 0xf9, 0x82, 0x9d, 0xb9, 0x06, 0x33, 0x0c, + 0x13, 0x17, 0x47, 0x25, 0x63, 0xc3, 0xd8, 0x9c, 0xb3, 0xd5, 0xca, 0x6c, 0xc0, 0x74, 0x88, 0xfc, + 0xa8, 0x34, 0x25, 0xbe, 0xde, 0xfc, 0xda, 0x67, 0x27, 0xd5, 0xc2, 0x9f, 0x4f, 0xaa, 0x37, 0x3c, + 0x9f, 0x1f, 0x75, 0x0e, 0x6a, 0x2d, 0xda, 0xae, 0xdf, 0x95, 0xac, 0x76, 0x8f, 0x90, 0x4f, 0xea, + 0x8a, 0xed, 0x8b, 0x7a, 0x8b, 0xb6, 0xdb, 0x94, 0xd4, 0x11, 0x63, 0x98, 0xd7, 0x9a, 0xc8, 0x8f, + 0x6c, 0x09, 0x63, 0x96, 0xe0, 0x72, 0x17, 0x47, 0xcc, 0xa7, 0xa4, 0x54, 0xdc, 0x30, 0x36, 0xa7, + 0xed, 0x64, 0x69, 0xfd, 0xd6, 0x80, 0xa5, 0x06, 0xf3, 0x6c, 0xdc, 0xa6, 0x5d, 0xdc, 0x40, 0x91, + 0xe7, 0x5f, 0x98, 0x50, 0x5f, 0x85, 0x99, 0xb6, 0x64, 0x28, 0x65, 0x9a, 0xdf, 0xbe, 0x56, 0x8b, + 0x8d, 0x5e, 0x13, 0x46, 0xaf, 0x29, 0xa3, 0xd7, 0x76, 0xa9, 0x4f, 0x6e, 0x4e, 0x0b, 0x5e, 0xb6, + 0x22, 0xb7, 0xfe, 0x61, 0xc0, 0xfa, 0x80, 0xcc, 0x36, 0x66, 0x21, 0x25, 0x0c, 0x9b, 0xdf, 0x04, + 0x88, 0xa9, 0x1c, 0xda, 0xe1, 0x52, 0xfe, 0x31, 0x80, 0xe7, 0xe2, 0x23, 0xf7, 0x3a, 0xdc, 0x7c, + 0x0c, 0x4b, 0x87, 0x1d, 0xe2, 0xfa, 0xc4, 0x73, 0x42, 0x74, 0xdc, 0xc6, 0x84, 0x2b, 0x75, 0x6b, + 0x4a, 0xdd, 0xeb, 0x19, 0x75, 0x55, 0x90, 0xc4, 0x7f, 0xb6, 0x98, 0xfb, 0xac, 0xce, 0x8f, 0x43, + 0xcc, 0x6a, 0x7b, 0xb8, 0x65, 0x2f, 0x2a, 0x98, 0x66, 0x8c, 0x62, 0x7e, 0x02, 0xb3, 0xa1, 0xf2, + 0xba, 0xd2, 0xb7, 0x54, 0xcb, 0x87, 0x64, 0x2d, 0x89, 0x0a, 0x3b, 0xa5, 0xb4, 0x7e, 0x63, 0xc0, + 0x42, 0x83, 0x79, 0x3b, 0xae, 0xfb, 0x5f, 0xe2, 0x9b, 0x5f, 0x1a, 0xb0, 0x9a, 0x15, 0x38, 0x75, + 0x8c, 0xc6, 0xb0, 0xc6, 0xb9, 0x1b, 0x76, 0x6a, 0x6c, 0xc3, 0xfe, 0x2b, 0x4e, 0xc7, 0x46, 0x27, + 0xe0, 0xfe, 0x1d, 0xff, 0x79, 0xc7, 0x77, 0x11, 0xc7, 0x43, 0xad, 0x7b, 0x1f, 0x16, 0x02, 0x45, + 0x24, 0x2e, 0x89, 0xd2, 0xd4, 0x46, 0x71, 0x73, 0x7e, 0x7b, 0x6b, 0x90, 0xcf, 0x3b, 0x80, 0xb5, + 0x3b, 0xfd, 0x53, 0x76, 0x0e, 0xa2, 0xcc, 0x61, 0x3e, 0xb3, 0x99, 0xfa, 0xcf, 0x38, 0x1f, 0xff, + 0xad, 0xc1, 0x0c, 0x8f, 0x90, 0x50, 0x64, 0x2a, 0x56, 0x24, 0x5e, 0x59, 0xbf, 0x2f, 0xc2, 0xb5, + 0x77, 0xa4, 0x4c, 0x7d, 0x84, 0x06, 0xd4, 0x34, 0xa4, 0x9a, 0xdf, 0x38, 0x55, 0xcd, 0x04, 0x20, + 0xa7, 0xae, 0xfa, 0x36, 0xa0, 0xf6, 0xef, 0xa6, 0xe0, 0x03, 0x0d, 0x95, 0xb8, 0xa1, 0x58, 0xa7, + 0xd5, 0xc2, 0x8c, 0x49, 0x13, 0xcc, 0xda, 0xc9, 0xd2, 0x5c, 0x85, 0x4b, 0x38, 0x8a, 0x68, 0xa2, + 0x49, 0xbc, 0x30, 0xf7, 0x61, 0x31, 0xc1, 0xa5, 0x91, 0x73, 0x88, 0xf1, 0x78, 0x81, 0x6a, 0xd8, + 0x57, 0xfa, 0xc7, 0xf6, 0x31, 0x36, 0xbf, 0x05, 0xf3, 0x42, 0x2d, 0x07, 0x1f, 0x4a, 0x90, 0xe9, + 0xf1, 0x40, 0xe6, 0xc4, 0x99, 0x5b, 0x87, 0x02, 0xa0, 0x6f, 0xe9, 0x4b, 0x59, 0x4b, 0xa7, 0x0e, + 0x9d, 0x39, 0x17, 0x87, 0x5a, 0x7f, 0x28, 0xc2, 0xa2, 0xb0, 0x3b, 0x8a, 0x9e, 0x61, 0x7e, 0x2f, + 0x12, 0x1c, 0x2e, 0xe8, 0x2a, 0xd8, 0x82, 0x69, 0xe6, 0xbb, 0xb1, 0x7d, 0x17, 0xb7, 0xaf, 0x0d, + 0x06, 0xc3, 0x9e, 0x1f, 0xe1, 0x96, 0x74, 0xa5, 0x24, 0x33, 0x9f, 0x82, 0xf9, 0xbc, 0x43, 0x39, + 0x76, 0x24, 0x90, 0x83, 0xda, 0xb4, 0x43, 0xb8, 0xb4, 0xeb, 0xd9, 0x52, 0xfd, 0x36, 0xe1, 0xf6, + 0xb2, 0x44, 0xda, 0x11, 0x40, 0x3b, 0x12, 0xc7, 0xfc, 0x2e, 0xcc, 0x06, 0xb8, 0x8b, 0x23, 0xe4, + 0xe1, 0xd8, 0xde, 0x67, 0xbe, 0x3e, 0xd2, 0xf3, 0x26, 0x86, 0x75, 0xe1, 0xdf, 0x9c, 0xa0, 0x4e, + 0xe0, 0xb7, 0x7d, 0xae, 0x9c, 0x76, 0x56, 0x71, 0x57, 0x05, 0x5c, 0x46, 0xda, 0x3b, 0x02, 0xcb, + 0x7a, 0x73, 0x09, 0xd6, 0xf2, 0x9e, 0x4b, 0x83, 0x3e, 0x7b, 0x75, 0x19, 0xe3, 0x5e, 0x5d, 0xe6, + 0x11, 0x94, 0xf0, 0x8b, 0xd6, 0x11, 0x22, 0x1e, 0x76, 0x1d, 0x42, 0xc5, 0x37, 0x14, 0x38, 0x5d, + 0x14, 0x74, 0xf0, 0x84, 0xb5, 0x6a, 0x2d, 0xc5, 0xbb, 0xab, 0xe0, 0x1e, 0x09, 0x34, 0xf3, 0x10, + 0xd6, 0xfb, 0x9c, 0x12, 0xfe, 0x0e, 0xf3, 0x5f, 0xc6, 0xd1, 0x70, 0x76, 0x46, 0x57, 0x53, 0xb8, + 0x44, 0xaf, 0x07, 0xfe, 0x4b, 0x6d, 0x6d, 0x98, 0x3e, 0x97, 0xda, 0x70, 0x1f, 0x16, 0x22, 0x8c, + 0x02, 0xff, 0xa5, 0x90, 0x9f, 0x04, 0x13, 0x86, 0xcc, 0x7c, 0x82, 0xd1, 0x24, 0x81, 0xf9, 0x29, + 0xac, 0x76, 0x48, 0x16, 0xd4, 0x41, 0x87, 0x1c, 0x47, 0x13, 0x84, 0x8c, 0x80, 0x36, 0xfb, 0x58, + 0x4d, 0x12, 0xec, 0x08, 0x24, 0xf3, 0x11, 0x2c, 0xa9, 0x16, 0x86, 0x53, 0xa7, 0x8b, 0x3a, 0x01, + 0x2f, 0x5d, 0x9e, 0x08, 0xfc, 0x4a, 0x0c, 0xf3, 0x90, 0x3e, 0x12, 0x20, 0xe6, 0xf7, 0x61, 0x25, + 0xf5, 0x61, 0x12, 0x36, 0xa5, 0xd9, 0x89, 0x90, 0x97, 0x13, 0xa0, 0x24, 0x5e, 0xac, 0x63, 0x58, + 0x6e, 0x30, 0x6f, 0x37, 0xa0, 0xec, 0xa2, 0x9b, 0x5b, 0xeb, 0x6d, 0x11, 0x4a, 0x83, 0xbc, 0xd3, + 0x14, 0x1b, 0x95, 0x2c, 0xc6, 0x45, 0x25, 0xcb, 0xd4, 0x7b, 0x4e, 0x96, 0xe2, 0x7b, 0x49, 0x96, + 0xe9, 0xff, 0x3c, 0x59, 0xbe, 0x07, 0xcb, 0xfd, 0x50, 0xce, 0x96, 0xc9, 0xb3, 0x0b, 0x9b, 0xc4, + 0xf2, 0xc3, 0xb8, 0x91, 0xf9, 0x63, 0x3c, 0xb7, 0x34, 0x51, 0xc4, 0x7d, 0x14, 0x48, 0xdf, 0x5f, + 0x54, 0x41, 0xbc, 0x29, 0x0a, 0xe2, 0xc4, 0x57, 0xa0, 0x3c, 0x6b, 0xfd, 0xb3, 0x28, 0x47, 0x98, + 0xac, 0xf8, 0xff, 0x0f, 0xd9, 0xff, 0xf1, 0x90, 0xfd, 0x91, 0x21, 0xef, 0xa9, 0x3d, 0x4a, 0x10, + 0xc7, 0x0f, 0xe9, 0xad, 0x16, 0x65, 0xc7, 0x8c, 0xe3, 0xf6, 0x7e, 0x87, 0xb8, 0x43, 0x63, 0xf7, + 0x2e, 0xcc, 0xba, 0xe2, 0x40, 0x7f, 0xba, 0x19, 0xd1, 0x9c, 0xae, 0x0b, 0x09, 0xdf, 0x9e, 0x54, + 0x97, 0x8e, 0x51, 0x3b, 0xf8, 0xba, 0x95, 0x1c, 0xb4, 0xec, 0x14, 0xc3, 0xb2, 0x60, 0x63, 0x98, + 0x0c, 0x49, 0x00, 0x5a, 0xf7, 0xe2, 0xfb, 0x54, 0x3a, 0x72, 0x97, 0x06, 0x01, 0xe2, 0x38, 0x42, + 0xc1, 0x1e, 0x26, 0xb4, 0x3d, 0x54, 0xce, 0xcf, 0xc1, 0x1c, 0xc1, 0x3d, 0xc7, 0x15, 0x44, 0xaa, + 0x53, 0x9f, 0x25, 0xb8, 0x27, 0x0f, 0x29, 0xa6, 0x5a, 0xc0, 0x94, 0xe9, 0xcf, 0xe2, 0xa1, 0x7e, + 0x27, 0x08, 0x68, 0x0b, 0x71, 0x7c, 0x2b, 0xa4, 0xad, 0x23, 0x1b, 0x1f, 0x20, 0x8e, 0xd9, 0x50, + 0xa6, 0x18, 0x2e, 0x47, 0x31, 0x89, 0x9a, 0xc8, 0x46, 0xd8, 0xe6, 0x63, 0x61, 0x9b, 0x5f, 0xff, + 0xb5, 0xba, 0x39, 0x86, 0xf7, 0xc4, 0x01, 0x66, 0x27, 0xd8, 0xd6, 0x2f, 0x0c, 0xa8, 0x0e, 0x11, + 0x2d, 0x4d, 0xda, 0x1f, 0xc2, 0x07, 0x9c, 0x72, 0x14, 0x38, 0x58, 0xec, 0x3a, 0x89, 0x58, 0xc6, + 0xf9, 0x8b, 0xb5, 0x22, 0xf9, 0x64, 0x85, 0xb0, 0x6e, 0x4b, 0xd3, 0x3d, 0xf6, 0xf9, 0x91, 0x1b, + 0xa1, 0xde, 0x58, 0xa6, 0x5b, 0x83, 0x19, 0x29, 0x69, 0x6c, 0xb9, 0x69, 0x5b, 0xad, 0xac, 0x9f, + 0xc7, 0xba, 0xea, 0xb0, 0x52, 0x5d, 0x5f, 0xc0, 0x4a, 0x4f, 0xed, 0x93, 0xf7, 0xa9, 0xe9, 0x72, + 0xca, 0x25, 0x51, 0xf4, 0x95, 0x01, 0x57, 0x1b, 0xcc, 0x7b, 0x70, 0xe4, 0x1f, 0xf2, 0x26, 0x8e, + 0xa7, 0xd0, 0x30, 0xf0, 0x2f, 0x6e, 0x18, 0x6a, 0xc2, 0x82, 0x08, 0xf3, 0x10, 0x7b, 0x4e, 0x5b, + 0x34, 0x66, 0x93, 0x5d, 0x63, 0x40, 0x70, 0x4f, 0x89, 0x6f, 0x55, 0xe1, 0xf3, 0x5a, 0x8d, 0xd2, + 0xc4, 0xf8, 0x4b, 0x46, 0xe7, 0x07, 0x3d, 0x14, 0xde, 0x26, 0x5d, 0x14, 0xf9, 0x88, 0xf0, 0x8b, + 0xd2, 0xf9, 0x29, 0x98, 0x42, 0x67, 0xd6, 0x43, 0xa1, 0xe3, 0x27, 0xcc, 0x27, 0xd0, 0x5c, 0x4e, + 0x74, 0x04, 0xf7, 0x72, 0x4a, 0x64, 0xf5, 0xcf, 0x6d, 0xa4, 0xfa, 0xff, 0xca, 0xc8, 0x45, 0xf7, + 0x7e, 0x44, 0xdb, 0x4d, 0x1c, 0x85, 0x23, 0x6f, 0xcd, 0x7d, 0x98, 0x51, 0x83, 0xe7, 0xd4, 0x44, + 0x62, 0xaa, 0xd3, 0xe6, 0x2a, 0x5c, 0x8a, 0x6f, 0xb4, 0x62, 0xfc, 0xf6, 0x20, 0x17, 0xe6, 0x3a, + 0x5c, 0xe6, 0xd4, 0x41, 0xae, 0x1b, 0xc5, 0x05, 0xc7, 0x9e, 0xe1, 0x74, 0xc7, 0x75, 0x23, 0xeb, + 0xa3, 0x5c, 0xee, 0x64, 0x25, 0x4d, 0xb5, 0xf9, 0x69, 0x51, 0xf6, 0x2d, 0xbb, 0x11, 0x46, 0x1c, + 0xc7, 0x33, 0xe1, 0x50, 0x2d, 0x9e, 0xe6, 0xfc, 0xf8, 0x9d, 0x89, 0xfd, 0xf8, 0xf6, 0xa4, 0x3a, + 0x1f, 0x57, 0x04, 0xd9, 0x2f, 0x2b, 0xb7, 0x72, 0x58, 0x0e, 0x23, 0xbf, 0x85, 0x65, 0x20, 0xc7, + 0x31, 0xa7, 0x9c, 0x7a, 0xfb, 0x6c, 0xe1, 0xfc, 0xf6, 0xa4, 0xba, 0xae, 0xe0, 0x07, 0xf0, 0x2c, + 0x7b, 0x49, 0x7e, 0xca, 0xe4, 0xe9, 0x01, 0x00, 0x7b, 0x1e, 0x71, 0xc7, 0xc5, 0x21, 0x3f, 0x52, + 0xf5, 0x7a, 0xf7, 0xcc, 0xfc, 0x56, 0x62, 0x7e, 0x7d, 0x24, 0xcb, 0x9e, 0x13, 0x8b, 0x3d, 0xf1, + 0xbf, 0xf9, 0x89, 0x7c, 0xbc, 0x7c, 0x86, 0xb9, 0x2c, 0xdc, 0xf3, 0xdb, 0x6b, 0xef, 0x3c, 0x60, + 0xc9, 0x5d, 0xf5, 0x96, 0xa3, 0x68, 0xad, 0x6b, 0x32, 0xcc, 0xb2, 0x8e, 0x49, 0x9d, 0xd6, 0x93, + 0x6f, 0x2f, 0xb2, 0x4b, 0x3b, 0xc5, 0x65, 0xe7, 0x3c, 0xda, 0x94, 0xe4, 0xd3, 0x41, 0x86, 0x71, + 0x22, 0xd2, 0xf6, 0xdf, 0x17, 0xa0, 0xd8, 0x60, 0x9e, 0xf9, 0x04, 0x16, 0x72, 0x6f, 0xf7, 0x55, + 0xcd, 0x63, 0x5d, 0x96, 0xa0, 0xfc, 0xa5, 0x53, 0x08, 0x52, 0xa5, 0x0b, 0xe6, 0x7d, 0x98, 0xeb, + 0x3f, 0x3c, 0x7f, 0xa8, 0x39, 0x97, 0xee, 0x96, 0xbf, 0x30, 0x6a, 0x37, 0x03, 0xf9, 0x29, 0x2c, + 0x0e, 0x3c, 0xb9, 0x7e, 0x74, 0xea, 0xeb, 0x62, 0xf9, 0xcb, 0x63, 0x3f, 0x40, 0x5a, 0x05, 0xf3, + 0x31, 0xcc, 0x67, 0x1f, 0xc9, 0x2a, 0xba, 0xb3, 0xfd, 0xfd, 0xf2, 0xf5, 0xd1, 0xfb, 0x19, 0xe0, + 0x1f, 0xc0, 0x95, 0xfc, 0x78, 0xbb, 0xa1, 0x39, 0x9a, 0xa3, 0x28, 0x6f, 0x9e, 0x46, 0x91, 0x81, + 0x7f, 0x02, 0x0b, 0xb9, 0x61, 0x46, 0xe7, 0xc8, 0x2c, 0x81, 0xd6, 0x91, 0xba, 0x79, 0xc2, 0x2a, + 0x98, 0x0e, 0x2c, 0x0e, 0xfc, 0xee, 0xa4, 0xb3, 0x7a, 0x9e, 0xe4, 0x4c, 0xc2, 0x77, 0xe0, 0xaa, + 0xbe, 0xad, 0xd5, 0x81, 0x68, 0x29, 0xcb, 0x1f, 0x8f, 0x4b, 0x99, 0x67, 0xab, 0xef, 0x52, 0xb5, + 0xb2, 0xeb, 0x28, 0xb5, 0x6c, 0x47, 0x37, 0xaa, 0x05, 0x33, 0x82, 0x55, 0x6d, 0x9b, 0xaa, 0xf3, + 0x88, 0x8e, 0xb0, 0x5c, 0x1f, 0x93, 0x30, 0xcf, 0x53, 0xdb, 0xdf, 0xe9, 0x78, 0xea, 0x08, 0xb5, + 0x3c, 0x47, 0x75, 0x79, 0x56, 0xc1, 0x0c, 0xc0, 0xd4, 0x74, 0x5a, 0x5f, 0xd4, 0x85, 0xce, 0x3b, + 0x64, 0xe5, 0xad, 0xb1, 0xc8, 0x34, 0xdc, 0xf2, 0x3d, 0xce, 0x50, 0x6e, 0x39, 0xb2, 0xe1, 0xdc, + 0xf4, 0x3d, 0x45, 0xce, 0x9e, 0xb9, 0x8e, 0x62, 0x94, 0x3d, 0xb3, 0x84, 0x23, 0xed, 0xa9, 0xad, + 0xfc, 0x32, 0xc5, 0x73, 0x75, 0x5f, 0x97, 0xe2, 0x59, 0x02, 0x6d, 0x8a, 0x6b, 0x0b, 0x94, 0xbc, + 0xf6, 0xb2, 0xf5, 0xa9, 0x32, 0x2c, 0x79, 0x15, 0xf2, 0xf5, 0xd1, 0xfb, 0x7d, 0xe0, 0x9b, 0xdf, + 0xfe, 0xec, 0x75, 0xc5, 0x78, 0xf5, 0xba, 0x62, 0xfc, 0xed, 0x75, 0xc5, 0xf8, 0xf1, 0x9b, 0x4a, + 0xe1, 0xd5, 0x9b, 0x4a, 0xe1, 0x4f, 0x6f, 0x2a, 0x85, 0x27, 0x5b, 0xa7, 0x55, 0xb5, 0xf4, 0x37, + 0x78, 0x51, 0xb9, 0x0f, 0x66, 0xe4, 0xef, 0xe0, 0x5f, 0xf9, 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xd1, 0x68, 0x6e, 0xa6, 0xa2, 0x1f, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -3916,23 +3906,6 @@ func (m *MsgCreateMarketResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) _ = i var l int _ = l - if len(m.Version) > 0 { - i -= len(m.Version) - copy(dAtA[i:], m.Version) - i = encodeVarintTx(dAtA, i, uint64(len(m.Version))) - i-- - dAtA[i] = 0x12 - } - { - size := m.Pair.Size() - i -= size - if _, err := m.Pair.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintTx(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa return len(dAtA) - i, nil } @@ -4526,12 +4499,6 @@ func (m *MsgCreateMarketResponse) Size() (n int) { } var l int _ = l - l = m.Pair.Size() - n += 1 + l + sovTx(uint64(l)) - l = len(m.Version) - if l > 0 { - n += 1 + l + sovTx(uint64(l)) - } return n } @@ -8744,72 +8711,6 @@ func (m *MsgCreateMarketResponse) Unmarshal(dAtA []byte) error { return fmt.Errorf("proto: MsgCreateMarketResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pair", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthTx - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTx - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.Pair.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTx - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthTx - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTx - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Version = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTx(dAtA[iNdEx:]) From bb89d43c520dafdcd08c8020749e41f467a1e470 Mon Sep 17 00:00:00 2001 From: Jonathan Gimeno Date: Tue, 2 Jan 2024 19:50:42 +0100 Subject: [PATCH 6/8] msg server --- x/perp/v2/keeper/msg_server.go | 21 +++++---------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/x/perp/v2/keeper/msg_server.go b/x/perp/v2/keeper/msg_server.go index 789fddcf0..5bd48ff19 100644 --- a/x/perp/v2/keeper/msg_server.go +++ b/x/perp/v2/keeper/msg_server.go @@ -245,29 +245,18 @@ func (m msgServer) CreateMarket( sender, _ := sdk.AccAddressFromBech32(msg.Sender) ctx := sdk.UnwrapSDKContext(goCtx) - args := parseArgsCreateMarket(msg) - - err := m.k.Sudo().CreateMarket(ctx, args, sender) - if err != nil { - return nil, err - } - - return &types.MsgCreateMarketResponse{}, nil -} - -func parseArgsCreateMarket(msg *types.MsgCreateMarket) ArgsCreateMarket { args := ArgsCreateMarket{ Pair: msg.Pair, PriceMultiplier: msg.PriceMultiplier, SqrtDepth: msg.SqrtDepth, - Market: nil, + Market: msg.Market, } - if msg.Market != nil { - market := types.DefaultMarket(msg.Pair) - args.Market = &market + err := m.k.Sudo().CreateMarket(ctx, args, sender) + if err != nil { + return nil, err } - return args + return &types.MsgCreateMarketResponse{}, nil } From c8fda1cff292d8a3d843716e147108a9b0698bb7 Mon Sep 17 00:00:00 2001 From: Jonathan Gimeno Date: Tue, 2 Jan 2024 20:38:44 +0100 Subject: [PATCH 7/8] remove mentions of old bindings --- app/app.go | 1 - wasmbinding/exec_perp.go | 14 -------------- wasmbinding/exec_perp_test.go | 6 ------ wasmbinding/message_plugin.go | 4 ---- wasmbinding/wasm.go | 4 +--- x/perp/v2/keeper/amm_test.go | 4 ---- x/perp/v2/keeper/sudo.go | 6 ++---- x/perp/v2/keeper/sudo_test.go | 9 ++++++++- x/sudo/cli/cli_test.go | 2 +- 9 files changed, 12 insertions(+), 38 deletions(-) delete mode 100644 wasmbinding/exec_perp.go diff --git a/app/app.go b/app/app.go index 943ecc4d8..21b0da5e3 100644 --- a/app/app.go +++ b/app/app.go @@ -119,7 +119,6 @@ func GetWasmOpts(nibiru NibiruApp, appOpts servertypes.AppOptions) []wasmkeeper. wasmOpts = append(wasmOpts, wasmbinding.NibiruWasmOptions( nibiru.GRPCQueryRouter(), nibiru.appCodec, - nibiru.PerpKeeperV2, nibiru.SudoKeeper, nibiru.OracleKeeper, )...) diff --git a/wasmbinding/exec_perp.go b/wasmbinding/exec_perp.go deleted file mode 100644 index da485fda1..000000000 --- a/wasmbinding/exec_perp.go +++ /dev/null @@ -1,14 +0,0 @@ -package wasmbinding - -import ( - perpv2keeper "github.com/NibiruChain/nibiru/x/perp/v2/keeper" - perpv2types "github.com/NibiruChain/nibiru/x/perp/v2/types" -) - -type ExecutorPerp struct { - PerpV2 perpv2keeper.Keeper -} - -func (exec *ExecutorPerp) MsgServer() perpv2types.MsgServer { - return perpv2keeper.NewMsgServerImpl(exec.PerpV2) -} diff --git a/wasmbinding/exec_perp_test.go b/wasmbinding/exec_perp_test.go index 5848cde59..60f60c2a1 100644 --- a/wasmbinding/exec_perp_test.go +++ b/wasmbinding/exec_perp_test.go @@ -10,7 +10,6 @@ import ( "github.com/stretchr/testify/suite" "github.com/NibiruChain/nibiru/app" - "github.com/NibiruChain/nibiru/wasmbinding" "github.com/NibiruChain/nibiru/wasmbinding/wasmbin" "github.com/NibiruChain/nibiru/x/common/asset" "github.com/NibiruChain/nibiru/x/common/denoms" @@ -31,7 +30,6 @@ type TestSuitePerpExecutor struct { nibiru *app.NibiruApp ctx sdk.Context contractDeployer sdk.AccAddress - exec *wasmbinding.ExecutorPerp contractPerp sdk.AccAddress ratesMap map[asset.Pair]sdk.Dec @@ -115,10 +113,6 @@ func (s *TestSuitePerpExecutor) SetupSuite() { s.ctx = ctx s.contractPerp = ContractMap[wasmbin.WasmKeyPerpBinding] - s.NoError(testapp.FundAccount(nibiru.BankKeeper, ctx, s.contractPerp, coins)) - s.exec = &wasmbinding.ExecutorPerp{ - PerpV2: nibiru.PerpKeeperV2, - } s.nibiru.PerpKeeperV2.Collateral.Set(s.ctx, perpv2types.TestingCollateralDenomNUSD) s.NoError(testapp.FundAccount(nibiru.BankKeeper, ctx, s.contractPerp, coins)) diff --git a/wasmbinding/message_plugin.go b/wasmbinding/message_plugin.go index 05e9c1162..7a9d607c0 100644 --- a/wasmbinding/message_plugin.go +++ b/wasmbinding/message_plugin.go @@ -12,7 +12,6 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" oraclekeeper "github.com/NibiruChain/nibiru/x/oracle/keeper" - perpv2keeper "github.com/NibiruChain/nibiru/x/perp/v2/keeper" ) var _ wasmkeeper.Messenger = (*CustomMessenger)(nil) @@ -21,7 +20,6 @@ var _ wasmkeeper.Messenger = (*CustomMessenger)(nil) // own custom `DispatchMsg` for CosmWasm execute calls on Nibiru. type CustomMessenger struct { Wasm wasmkeeper.Messenger - Perp ExecutorPerp Sudo keeper.Keeper Oracle ExecutorOracle } @@ -85,14 +83,12 @@ func (messenger *CustomMessenger) DispatchMsg( } func CustomMessageDecorator( - perpv2 perpv2keeper.Keeper, sudoKeeper keeper.Keeper, oracleKeeper oraclekeeper.Keeper, ) func(wasmkeeper.Messenger) wasmkeeper.Messenger { return func(originalWasmMessenger wasmkeeper.Messenger) wasmkeeper.Messenger { return &CustomMessenger{ Wasm: originalWasmMessenger, - Perp: ExecutorPerp{PerpV2: perpv2}, Sudo: sudoKeeper, Oracle: ExecutorOracle{Oracle: oracleKeeper}, } diff --git a/wasmbinding/wasm.go b/wasmbinding/wasm.go index 972e5067f..3a120e2a2 100644 --- a/wasmbinding/wasm.go +++ b/wasmbinding/wasm.go @@ -8,7 +8,6 @@ import ( "github.com/NibiruChain/nibiru/x/sudo/keeper" oraclekeeper "github.com/NibiruChain/nibiru/x/oracle/keeper" - perpv2keeper "github.com/NibiruChain/nibiru/x/perp/v2/keeper" ) // NibiruWasmOptions: Wasm Options are extension points to instantiate the Wasm @@ -16,7 +15,6 @@ import ( func NibiruWasmOptions( grpcQueryRouter *baseapp.GRPCQueryRouter, appCodec codec.Codec, - perpv2 perpv2keeper.Keeper, sudoKeeper keeper.Keeper, oracleKeeper oraclekeeper.Keeper, ) []wasmkeeper.Option { @@ -29,7 +27,7 @@ func NibiruWasmOptions( }) wasmExecuteOption := wasmkeeper.WithMessageHandlerDecorator( - CustomMessageDecorator(perpv2, sudoKeeper, oracleKeeper), + CustomMessageDecorator(sudoKeeper, oracleKeeper), ) return []wasmkeeper.Option{wasmQueryOption, wasmExecuteOption} diff --git a/x/perp/v2/keeper/amm_test.go b/x/perp/v2/keeper/amm_test.go index 408a47dec..ad7711c22 100644 --- a/x/perp/v2/keeper/amm_test.go +++ b/x/perp/v2/keeper/amm_test.go @@ -169,7 +169,6 @@ func TestShiftPegMultiplier_Fail(t *testing.T) { Pair: pair, PriceMultiplier: sdk.NewDec(2), SqrtDepth: sdk.NewDec(1_000_000), - EnableMarket: true, }, adminUser, ) @@ -243,7 +242,6 @@ func TestShiftSwapInvariant_Fail(t *testing.T) { Pair: pair, PriceMultiplier: sdk.NewDec(2), SqrtDepth: sdk.NewDec(1_000), - EnableMarket: true, }, adminUser, ) @@ -454,7 +452,6 @@ func TestKeeper_GetMarketByPairAndVersion(t *testing.T) { Pair: pair, PriceMultiplier: sdk.NewDec(2), SqrtDepth: sdk.NewDec(1_000_000), - EnableMarket: true, }, adminUser, ) @@ -483,7 +480,6 @@ func TestKeeper_GetAMMByPairAndVersion(t *testing.T) { Pair: pair, PriceMultiplier: sdk.NewDec(2), SqrtDepth: sdk.NewDec(1_000_000), - EnableMarket: true, }, adminUser, ) diff --git a/x/perp/v2/keeper/sudo.go b/x/perp/v2/keeper/sudo.go index b2fbf84fe..cf1691c6f 100644 --- a/x/perp/v2/keeper/sudo.go +++ b/x/perp/v2/keeper/sudo.go @@ -70,9 +70,6 @@ type ArgsCreateMarket struct { PriceMultiplier sdk.Dec SqrtDepth sdk.Dec Market *types.Market // pointer makes it optional - // EnableMarket: Optionally enable the default market without explicitly passing - // in each field as an argument. If 'Market' is present, this field is ignored. - EnableMarket bool } // CreateMarket creates a pool for a specific pair. @@ -97,10 +94,11 @@ func (k sudoExtension) CreateMarket( baseReserve := sqrtDepth if args.Market == nil { market = types.DefaultMarket(pair) - market.Enabled = args.EnableMarket } else { market = *args.Market } + market.Enabled = true + if err := market.Validate(); err != nil { return err } diff --git a/x/perp/v2/keeper/sudo_test.go b/x/perp/v2/keeper/sudo_test.go index 0db2ba331..5524bd0cc 100644 --- a/x/perp/v2/keeper/sudo_test.go +++ b/x/perp/v2/keeper/sudo_test.go @@ -129,7 +129,6 @@ func TestCreateMarket(t *testing.T) { Pair: pair, PriceMultiplier: amm.PriceMultiplier, SqrtDepth: amm.SqrtDepth, - EnableMarket: true, }, adminUser) require.NoError(t, err) @@ -177,6 +176,14 @@ func TestCreateMarket(t *testing.T) { market, err = app.PerpKeeperV2.GetMarket(ctx, pair) require.NoError(t, err) require.Equal(t, uint64(2), market.Version) + + // Fail if the creator is not a sudoer + err = admin.CreateMarket(ctx, keeper.ArgsCreateMarket{ + Pair: pair, + PriceMultiplier: amm.PriceMultiplier, + SqrtDepth: amm.SqrtDepth, + }, testutil.AccAddress()) + require.ErrorContains(t, err, "insufficient permissions on smart contract") } func TestCloseMarket(t *testing.T) { diff --git a/x/sudo/cli/cli_test.go b/x/sudo/cli/cli_test.go index c6c45a3bc..309eccb7e 100644 --- a/x/sudo/cli/cli_test.go +++ b/x/sudo/cli/cli_test.go @@ -159,7 +159,7 @@ func (s *IntegrationSuite) TestCmdEditSudoers() { contracts = append(contracts, addr.String()) } - var sender sdk.AccAddress = s.root.addr + var sender = s.root.addr pbMsg := types.MsgEditSudoers{ Action: "add_contracts", From 05f61b9ba0b491a7429e8667c887fc74cdd91598 Mon Sep 17 00:00:00 2001 From: Jonathan Gimeno Date: Tue, 2 Jan 2024 20:42:17 +0100 Subject: [PATCH 8/8] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7dcee358d..f0b2e37eb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -69,6 +69,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 * [#1734](https://github.com/NibiruChain/nibiru/pull/1734) - feat(perp): MsgDonateToPerpFund sudo call as part of #1642 * [#1755](https://github.com/NibiruChain/nibiru/pull/1755) - feat(oracle): Add more events on validator's performance * [#1749](https://github.com/NibiruChain/nibiru/pull/1749) - feat(perp): move close market from Wasm Binding to MsgCloseMarket +* [#1761](https://github.com/NibiruChain/nibiru/pull/1761) - feat(perp): move create market from Wasm Binding to MsgCreateMarket ### Non-breaking/Compatible Improvements