From 23550156c51f85dd244626a6fea3a2ad29278bae Mon Sep 17 00:00:00 2001 From: ze97286 Date: Thu, 9 Jul 2026 04:14:32 +0100 Subject: [PATCH 1/3] chore: sync exchange proto types for per-market margin modes --- .../exchange/types/authz_exchange_generic.go | 27 +- chain/exchange/types/errors.go | 5 +- chain/exchange/types/key.go | 211 +- chain/exchange/types/proposal.go | 3 +- .../types/v2/authz_exchange_generic.go | 7 +- chain/exchange/types/v2/codec.go | 2 + chain/exchange/types/v2/derivative.go | 244 +- chain/exchange/types/v2/derivative_orders.go | 84 +- chain/exchange/types/v2/events.pb.go | 674 ++++-- chain/exchange/types/v2/exchange.pb.go | 812 +++++-- chain/exchange/types/v2/fee_discounts.go | 80 +- chain/exchange/types/v2/genesis.go | 284 ++- chain/exchange/types/v2/genesis.pb.go | 568 ++++- chain/exchange/types/v2/msgs.go | 45 + chain/exchange/types/v2/params.go | 198 +- chain/exchange/types/v2/proposal.go | 3 +- chain/exchange/types/v2/query.pb.go | 2114 +++++++++++++---- chain/exchange/types/v2/tx.pb.go | 1437 +++++++---- chain/oracle/types/oracle.pb.go | 289 +-- chain/peggy/types/msgs.pb.go | 373 ++- chain/peggy/types/rate_limit.pb.go | 118 +- chain/stream/types/query.pb.go | 16 + chain/stream/types/v2/query.pb.go | 18 +- injective_data/chain_messages_list.json | 1 + proto/injective/exchange/v2/events.proto | 9 + proto/injective/exchange/v2/exchange.proto | 93 +- proto/injective/exchange/v2/genesis.proto | 16 +- proto/injective/exchange/v2/query.proto | 101 +- proto/injective/exchange/v2/tx.proto | 45 +- proto/injective/oracle/v1beta1/oracle.proto | 8 +- proto/injective/peggy/v1/msgs.proto | 17 +- proto/injective/peggy/v1/rate_limit.proto | 10 +- proto/injective/stream/v1beta1/query.proto | 20 +- proto/injective/stream/v2/query.proto | 18 +- 34 files changed, 5778 insertions(+), 2172 deletions(-) diff --git a/chain/exchange/types/authz_exchange_generic.go b/chain/exchange/types/authz_exchange_generic.go index c1557994d..38af24bf5 100644 --- a/chain/exchange/types/authz_exchange_generic.go +++ b/chain/exchange/types/authz_exchange_generic.go @@ -115,24 +115,23 @@ func (a GenericExchangeAuthorization) MsgTypeURL() string { } // Accept implements Authorization.Accept. -func (a GenericExchangeAuthorization) Accept(ctx context.Context, _ sdk.Msg) (authz.AcceptResponse, error) { - hold, _ := getHold(ctx) - - if a.SpendLimit.IsZero() && !hold.IsZero() { // on an exhausted grant only allow zero hold messages (like cancellations) (BB-225) - return authz.AcceptResponse{Accept: false}, nil - } - - limit := a.SpendLimit - for _, coin := range hold { - allowance := limit.AmountOf(coin.Denom) - if allowance.LT(coin.Amount) { +func (a GenericExchangeAuthorization) Accept(ctx context.Context, msg sdk.Msg) (authz.AcceptResponse, error) { + // SpendLimit is optional, so we only check it if it is set + if a.SpendLimit != nil { + hold, ok := getHold(ctx) + if !ok { return authz.AcceptResponse{Accept: false}, nil } - limit = limit.Sub(sdk.NewCoin(coin.Denom, coin.Amount)) + for _, coin := range hold { + allowed := a.SpendLimit.AmountOf(coin.Denom) + if allowed.LT(coin.Amount) { + return authz.AcceptResponse{Accept: false}, nil + } + a.SpendLimit = a.SpendLimit.Sub(sdk.NewCoin(coin.Denom, coin.Amount)) + } } - - return authz.AcceptResponse{Accept: true, Updated: NewGenericExchangeAuthorization(a.Msg, limit)}, nil + return authz.AcceptResponse{Accept: true, Updated: &a}, nil } // getHold returns the hold from the context. Hold is the amount of coins that diff --git a/chain/exchange/types/errors.go b/chain/exchange/types/errors.go index a34a54546..dd56f7d87 100644 --- a/chain/exchange/types/errors.go +++ b/chain/exchange/types/errors.go @@ -121,6 +121,7 @@ var ( ErrOpenNotionalCapBreached = errors.Register(ModuleName, 112, "open notional cap breached") ErrNoOffsettingPositionsFound = errors.Register(ModuleName, 113, "no valid offsetting positions found") ErrNotCanonicalLiquidationTarget = errors.Register(ModuleName, 114, "targeted market is not the canonical liquidation target") - - ErrMsgDeprecated = errors.Register(ModuleName, 115, "message type is deprecated") + ErrMsgDeprecated = errors.Register(ModuleName, 115, "message type is deprecated") + ErrTooManyCrossMarginSpotOrders = errors.Register(ModuleName, 116, "cross-margin subaccount has reached the per-denom spot order cap") + ErrTooManyIsolatedActiveMarkets = errors.Register(ModuleName, 117, "cross-exposed subaccount has reached the per-denom isolated active derivative market cap") ) diff --git a/chain/exchange/types/key.go b/chain/exchange/types/key.go index 2884b1273..ce9541d75 100644 --- a/chain/exchange/types/key.go +++ b/chain/exchange/types/key.go @@ -130,19 +130,66 @@ var ( OrderExpirationMarketsPrefix = []byte{0x86} // prefix to store markets with order expirations PostOnlyModeCancellationKey = []byte{0x87} // key to mark post-only mode cancellation for next BeginBlock - TransientAtomicPerpetualVwapPrefix = []byte{0x88} // prefix for transient atomic perpetual market VWAP data - ObjectCachedParamsKey = []byte{0x89} // key for cached params in object store (block-scoped) - ObjectCachedWhiteKnightLiquidatorsKey = []byte{0x8a} // key for cached white knight liquidators set in object store (block-scoped) - TransientSyntheticPerpetualFundingVwapPrefix = []byte{0x8b} // prefix for transient synthetic perpetual funding VWAP data - - // SubaccountRiskProfilePrefix | subaccountID(32B) -> v2.SubaccountRiskProfile (proto bytes) - SubaccountRiskProfilePrefix = []byte{0x8c} - // ActiveDerivativeMarketsBySubaccountPrefix || subaccount_id || market_id -> []byte{} - ActiveDerivativeMarketsBySubaccountPrefix = []byte{0x8d} - // ActiveDerivativeOrderMarketsBySubaccountPrefix || subaccount_id || market_id -> []byte{} - ActiveDerivativeOrderMarketsBySubaccountPrefix = []byte{0x8e} - - ObjectCrossPoolSnapshotCacheKey = []byte{0x8f} // key for cross-pool snapshot cache in object store (block-scoped) + TransientAtomicPerpetualVwapPrefix = []byte{0x88} // prefix for transient atomic perpetual market VWAP data + ObjectCachedParamsKey = []byte{0x89} // key for cached params in object store (block-scoped) + ObjectCachedWhiteKnightLiquidatorsKey = []byte{0x8a} // key for cached white knight liquidators set in object store (block-scoped) + TransientSyntheticPerpetualFundingVwapPrefix = []byte{0x8b} // prefix for transient synthetic perpetual funding VWAP data + + // SubaccountRiskProfilePrefix | subaccountID(32B) -> v2.SubaccountRiskProfile (proto bytes) + SubaccountRiskProfilePrefix = []byte{0x8c} + // ActiveDerivativeMarketsBySubaccountPrefix || subaccount_id || market_id -> []byte{} + ActiveDerivativeMarketsBySubaccountPrefix = []byte{0x8d} + // ActiveDerivativeOrderMarketsBySubaccountPrefix || subaccount_id || market_id -> []byte{} + ActiveDerivativeOrderMarketsBySubaccountPrefix = []byte{0x8e} + + ObjectCrossPoolSnapshotCacheKey = []byte{0x8f} // key for cross-pool snapshot cache in object store (block-scoped) + + // CrossMarginLastLiquidationBlockPrefix | subaccountID(32B) | quoteDenom -> uint64 (block height) + CrossMarginLastLiquidationBlockPrefix = []byte{0x90} + + // SpotLimitOrderDenomIndexPrefix | subaccountID | len(lockingDenom) | lockingDenom | marketID | side -> count + SpotLimitOrderDenomIndexPrefix = []byte{0x95} + // TransientSpotLimitOrderDenomIndexPrefix | subaccountID | len(lockingDenom) | lockingDenom | marketID | side -> count + TransientSpotLimitOrderDenomIndexPrefix = []byte{0x96} + // TransientSpotMarketOrderDenomIndexPrefix | subaccountID | len(lockingDenom) | lockingDenom | marketID | side | orderHash -> []byte{} + TransientSpotMarketOrderDenomIndexPrefix = []byte{0x97} + + // SpotOrderAggregateCountByDenomPrefix | subaccountID | len(lockingDenom) | lockingDenom -> count. + // Aggregate counter for resting spot limit orders, summed across markets+sides. + // Read alongside the transient counter at admission time to enforce the + // MaxCrossMarginSpotOrdersPerSubaccountPerDenom cap. + SpotOrderAggregateCountByDenomPrefix = []byte{0x98} + // TransientSpotOrderAggregateCountByDenomPrefix | subaccountID | len(lockingDenom) | lockingDenom -> count. + // Aggregate counter for transient spot orders (limit + market), summed + // across markets+sides. Lives in the transient store; reset between blocks. + TransientSpotOrderAggregateCountByDenomPrefix = []byte{0x99} + // SubaccountTransientMarketOrderIndicatorByAccountPrefix | subaccountID | marketID -> {}. + // Per-subaccount mirror of `SubaccountMarketOrderIndicatorPrefix`. Lives in + // the transient store; written alongside every global indicator write so + // per-subaccount discovery readers (cross-margin snapshot rebuild, + // cancel-first liquidation sweep) can iterate target-bounded keys instead of + // the global block-wide indicator store. The transient store flushes between + // blocks so no explicit delete path is needed. + SubaccountTransientMarketOrderIndicatorByAccountPrefix = []byte{0x9a} + // SubaccountTransientLimitOrderIndicatorByAccountPrefix | subaccountID | marketID -> {}. + // Per-subaccount mirror of `SubaccountLimitOrderIndicatorPrefix`; same + // rationale and lifecycle as the market-order variant above. + SubaccountTransientLimitOrderIndicatorByAccountPrefix = []byte{0x9b} + // SubaccountMarketRiskModePrefix | subaccountID(32B) | marketID(32B) -> v2.RiskMode (single byte). + // Explicit per-(subaccount, market) margin-mode override. Absence means the + // market follows the subaccount's risk-profile mode. + SubaccountMarketRiskModePrefix = []byte{0x9c} + // SubaccountMarketRiskModeCountKey -> uint64 (big-endian) global count of + // per-market margin-mode override records. Deleted when the count reaches + // zero, so key absence doubles as the "no overrides exist anywhere" fast + // path that lets mode resolution skip per-market reads entirely. + SubaccountMarketRiskModeCountKey = []byte{0x9d} + // SubaccountCrossOverrideCountPrefix | subaccountID(32B) -> uint64 + // (big-endian) count of the subaccount's CROSS-valued per-market override + // records. Deleted at zero. Powers the O(1) pool-existence predicate: + // a subaccount can have cross-margin exposure iff its risk profile is + // cross or this count is positive — no activity scans on any gate path. + SubaccountCrossOverrideCountPrefix = []byte{0x9e} ) func GetSubaccountCidKey(subaccountID common.Hash, cid string) []byte { @@ -300,6 +347,49 @@ func GetSubaccountLimitOrderIndicatorKey(marketID, subaccountID common.Hash) []b return append(SubaccountLimitOrderIndicatorPrefix, MarketSubaccountInfix(marketID, subaccountID)...) } +// GetSubaccountTransientMarketOrderIndicatorByAccountKey produces the per- +// subaccount transient indicator key with layout +// `[SubaccountTransientMarketOrderIndicatorByAccountPrefix | subaccountID | marketID]`. +// Used by the per-subaccount index reader so iteration is target-bounded. +func GetSubaccountTransientMarketOrderIndicatorByAccountKey(subaccountID, marketID common.Hash) []byte { + key := make([]byte, 0, len(SubaccountTransientMarketOrderIndicatorByAccountPrefix)+2*common.HashLength) + key = append(key, SubaccountTransientMarketOrderIndicatorByAccountPrefix...) + key = append(key, subaccountID.Bytes()...) + key = append(key, marketID.Bytes()...) + return key +} + +// GetSubaccountTransientLimitOrderIndicatorByAccountKey produces the per- +// subaccount transient limit-indicator key with layout +// `[SubaccountTransientLimitOrderIndicatorByAccountPrefix | subaccountID | marketID]`. +func GetSubaccountTransientLimitOrderIndicatorByAccountKey(subaccountID, marketID common.Hash) []byte { + key := make([]byte, 0, len(SubaccountTransientLimitOrderIndicatorByAccountPrefix)+2*common.HashLength) + key = append(key, SubaccountTransientLimitOrderIndicatorByAccountPrefix...) + key = append(key, subaccountID.Bytes()...) + key = append(key, marketID.Bytes()...) + return key +} + +// SubaccountTransientMarketOrderIndicatorByAccountIterPrefix returns the +// iteration prefix for `[SubaccountTransientMarketOrderIndicatorByAccountPrefix | subaccountID]`, +// for iterating all marketIDs the given subaccount has placed transient +// market-order indicators for in the current block. +func SubaccountTransientMarketOrderIndicatorByAccountIterPrefix(subaccountID common.Hash) []byte { + prefix := make([]byte, 0, len(SubaccountTransientMarketOrderIndicatorByAccountPrefix)+common.HashLength) + prefix = append(prefix, SubaccountTransientMarketOrderIndicatorByAccountPrefix...) + prefix = append(prefix, subaccountID.Bytes()...) + return prefix +} + +// SubaccountTransientLimitOrderIndicatorByAccountIterPrefix mirrors the market +// variant for limit-order indicators. +func SubaccountTransientLimitOrderIndicatorByAccountIterPrefix(subaccountID common.Hash) []byte { + prefix := make([]byte, 0, len(SubaccountTransientLimitOrderIndicatorByAccountPrefix)+common.HashLength) + prefix = append(prefix, SubaccountTransientLimitOrderIndicatorByAccountPrefix...) + prefix = append(prefix, subaccountID.Bytes()...) + return prefix +} + func GetSubaccountOrderSuffix(marketID, subaccountID common.Hash, isBuy bool) []byte { return append(MarketSubaccountInfix(marketID, subaccountID), getBoolPrefix(isBuy)...) } @@ -344,6 +434,75 @@ func GetSpotMarketTransientMarketsKey(marketID common.Hash, isBuy bool) []byte { return append(SpotMarketsPrefix, MarketDirectionPrefix(marketID, isBuy)...) } +func GetSpotOrderDenomIndexSubaccountDenomPrefix( + indexPrefix []byte, + subaccountID common.Hash, + denom string, +) []byte { + denomBytes := []byte(denom) + key := make([]byte, 0, len(indexPrefix)+common.HashLength+2+len(denomBytes)) + key = append(key, indexPrefix...) + key = append(key, subaccountID.Bytes()...) + key = append(key, byte(len(denomBytes)>>8), byte(len(denomBytes))) + key = append(key, denomBytes...) + return key +} + +func GetSpotOrderDenomIndexMarketSideKey( + indexPrefix []byte, + subaccountID common.Hash, + denom string, + marketID common.Hash, + isBuy bool, +) []byte { + key := GetSpotOrderDenomIndexSubaccountDenomPrefix(indexPrefix, subaccountID, denom) + key = append(key, MarketDirectionPrefix(marketID, isBuy)...) + return key +} + +func GetSpotOrderDenomIndexMarketOrderKey( + indexPrefix []byte, + subaccountID common.Hash, + denom string, + marketID common.Hash, + isBuy bool, + orderHash common.Hash, +) []byte { + key := GetSpotOrderDenomIndexMarketSideKey(indexPrefix, subaccountID, denom, marketID, isBuy) + key = append(key, orderHash.Bytes()...) + return key +} + +func ParseSpotOrderDenomIndexMarketSideSuffix(key []byte) (marketID common.Hash, isBuy, ok bool) { + if len(key) < common.HashLength+1 { + return common.Hash{}, false, false + } + marketID = common.BytesToHash(key[:common.HashLength]) + isBuy = key[common.HashLength] == TrueByte + return marketID, isBuy, true +} + +type SpotOrderDenomIndexMarketOrderSuffix struct { + MarketID common.Hash + IsBuy bool + OrderHash common.Hash +} + +func ParseSpotOrderDenomIndexMarketOrderSuffix(key []byte) (SpotOrderDenomIndexMarketOrderSuffix, bool) { + if len(key) < common.HashLength+1+common.HashLength { + return SpotOrderDenomIndexMarketOrderSuffix{}, false + } + marketID, isBuy, ok := ParseSpotOrderDenomIndexMarketSideSuffix(key) + if !ok { + return SpotOrderDenomIndexMarketOrderSuffix{}, false + } + return SpotOrderDenomIndexMarketOrderSuffix{ + MarketID: marketID, + IsBuy: isBuy, + OrderHash: common.BytesToHash(key[common.HashLength+1 : common.HashLength+1+common.HashLength]), + }, true +} + func GetDerivativeLimitTransientMarketsKeyPrefix(marketID common.Hash, isBuy bool) []byte { return append(DerivativeLimitOrderIndicatorPrefix, MarketDirectionPrefix(marketID, isBuy)...) } @@ -577,6 +736,32 @@ func GetDerivativeOrderbookLevelsForPriceKey(marketID common.Hash, isBuy bool, p return append(GetDerivativeOrderbookLevelsKey(marketID, isBuy), GetPaddedPrice(price)...) } +func GetCrossMarginLastLiquidationBlockKey(subaccountID common.Hash, quoteDenom string) []byte { + addrBytes := subaccountID.Bytes() + denomBytes := []byte(quoteDenom) + + key := make([]byte, len(CrossMarginLastLiquidationBlockPrefix)+len(addrBytes)+len(denomBytes)) + n := copy(key, CrossMarginLastLiquidationBlockPrefix) + n += copy(key[n:], addrBytes) + copy(key[n:], denomBytes) + return key +} + +func GetSubaccountCrossOverrideCountKey(subaccountID common.Hash) []byte { + key := make([]byte, len(SubaccountCrossOverrideCountPrefix)+common.HashLength) + n := copy(key, SubaccountCrossOverrideCountPrefix) + copy(key[n:], subaccountID.Bytes()) + return key +} + +func GetSubaccountMarketRiskModeKey(subaccountID, marketID common.Hash) []byte { + key := make([]byte, len(SubaccountMarketRiskModePrefix)+2*common.HashLength) + n := copy(key, SubaccountMarketRiskModePrefix) + n += copy(key[n:], subaccountID.Bytes()) + copy(key[n:], marketID.Bytes()) + return key +} + func GetGrantAuthorizationKey(granter, grantee sdk.AccAddress) []byte { return append(GrantAuthorizationsPrefix, append(granter.Bytes(), grantee.Bytes()...)...) } diff --git a/chain/exchange/types/proposal.go b/chain/exchange/types/proposal.go index 923e427be..a86b222f0 100644 --- a/chain/exchange/types/proposal.go +++ b/chain/exchange/types/proposal.go @@ -689,8 +689,7 @@ func (p *OracleParams) ValidateBasic() error { return ErrSameOracles } switch p.OracleType { - case oracletypes.OracleType_PriceFeed, oracletypes.OracleType_Coinbase, oracletypes.OracleType_Razor, - oracletypes.OracleType_Dia, oracletypes.OracleType_API3, oracletypes.OracleType_Uma, oracletypes.OracleType_Pyth, + case oracletypes.OracleType_PriceFeed, oracletypes.OracleType_Coinbase, oracletypes.OracleType_Pyth, oracletypes.OracleType_PythPro, oracletypes.OracleType_Provider, oracletypes.OracleType_Stork, oracletypes.OracleType_ChainlinkDataStreams, oracletypes.OracleType_SedaFast: diff --git a/chain/exchange/types/v2/authz_exchange_generic.go b/chain/exchange/types/v2/authz_exchange_generic.go index 34c8f2c6e..88c51f089 100644 --- a/chain/exchange/types/v2/authz_exchange_generic.go +++ b/chain/exchange/types/v2/authz_exchange_generic.go @@ -108,9 +108,12 @@ func (a GenericExchangeAuthorization) MsgTypeURL() string { // the incoming message type, and it would not have been created if the // message type was not allowed. func (a GenericExchangeAuthorization) Accept(ctx context.Context, _ sdk.Msg) (authz.AcceptResponse, error) { - hold, _ := getHold(ctx) + if noLimit := a.SpendLimit == nil; noLimit { + return authz.AcceptResponse{Accept: true, Updated: NewGenericExchangeAuthorization(a.Msg, nil)}, nil + } - if a.SpendLimit.IsZero() && !hold.IsZero() { // on an exhausted grant only allow zero hold messages (like cancellations) (BB-225) + hold, ok := getHold(ctx) + if !ok { return authz.AcceptResponse{Accept: false}, nil } diff --git a/chain/exchange/types/v2/codec.go b/chain/exchange/types/v2/codec.go index bb2dda73f..3e766d84b 100644 --- a/chain/exchange/types/v2/codec.go +++ b/chain/exchange/types/v2/codec.go @@ -42,6 +42,7 @@ func RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { cdc.RegisterConcrete(&MsgDeposit{}, "exchange/v2/MsgDeposit", nil) cdc.RegisterConcrete(&MsgWithdraw{}, "exchange/v2/MsgWithdraw", nil) cdc.RegisterConcrete(&MsgUpdateSubaccountRiskProfile{}, "exchange/v2/MsgUpdateSubaccountRiskProfile", nil) + cdc.RegisterConcrete(&MsgUpdateSubaccountMarketRiskMode{}, "exchange/v2/MsgUpdateSubaccountMarketRiskMode", nil) cdc.RegisterConcrete(&MsgInstantSpotMarketLaunch{}, "exchange/v2/MsgInstantSpotMarketLaunch", nil) cdc.RegisterConcrete(&MsgInstantPerpetualMarketLaunch{}, "exchange/v2/MsgInstantPerpetualMarketLaunch", nil) cdc.RegisterConcrete(&MsgInstantExpiryFuturesMarketLaunch{}, "exchange/v2/MsgInstantExpiryFuturesMarketLaunch", nil) @@ -157,6 +158,7 @@ func RegisterInterfaces(registry types.InterfaceRegistry) { &MsgDeposit{}, &MsgWithdraw{}, &MsgUpdateSubaccountRiskProfile{}, + &MsgUpdateSubaccountMarketRiskMode{}, &MsgInstantSpotMarketLaunch{}, &MsgInstantPerpetualMarketLaunch{}, &MsgInstantExpiryFuturesMarketLaunch{}, diff --git a/chain/exchange/types/v2/derivative.go b/chain/exchange/types/v2/derivative.go index 1abe61808..787737f35 100644 --- a/chain/exchange/types/v2/derivative.go +++ b/chain/exchange/types/v2/derivative.go @@ -3,6 +3,7 @@ package v2 //nolint:revive // ok import ( "bytes" "sort" + "sync" "cosmossdk.io/math" "github.com/ethereum/go-ethereum/common" @@ -522,9 +523,9 @@ type DerivativeMarketOrderExpansionData struct { MarketSellClearingPrice math.LegacyDec MarketBuyClearingQuantity math.LegacyDec MarketSellClearingQuantity math.LegacyDec - MarketBalanceDelta math.LegacyDec - OpenInterestDelta math.LegacyDec - CrossPoolSnapshotEvictions []common.Hash + MarketBalanceDelta math.LegacyDec + OpenInterestDelta math.LegacyDec + CrossPoolSnapshotEvictions []common.Hash } func (e *DerivativeMarketOrderExpansionData) SetSellExecutionData( @@ -977,6 +978,14 @@ type DerivativeBatchExecutionData struct { MarkPrice math.LegacyDec Funding *PerpetualMarketFunding + // Fee-discount staking deltas are produced during FBA matching but must be + // merged only after derivative solvency filtering. Some executions can be + // discarded after matching if a market is insolvent or a reduce-only cleanup + // dependency fails; carrying the base/local pair here lets persistence merge + // only surviving deltas. + FeeDiscountStakingInfoBase *FeeDiscountStakingInfo + FeeDiscountStakingInfoLocal *FeeDiscountStakingInfo + // update the deposits for margin deductions, payouts and refunds DepositDeltas types.DepositDeltas DepositSubaccountIDs []common.Hash @@ -1025,6 +1034,235 @@ type DerivativeBatchExecutionData struct { CrossPoolSnapshotEvictions []common.Hash } +type CrossMarginPoolKey struct { + SubaccountID common.Hash + QuoteDenom string +} + +func CloneFeeDiscountStakingInfo(info *FeeDiscountStakingInfo) *FeeDiscountStakingInfo { + if info == nil { + return nil + } + + clone := &FeeDiscountStakingInfo{ + SubaccountMarketVolumeContributions: make(map[common.Hash]map[common.Hash]VolumeRecord), + AccountVolumeContributions: make(map[types.Account]math.LegacyDec), + AccountFeeTiers: make(map[types.Account]*types.FeeDiscountRates), + Validators: make(ValidatorCache), + NewAccounts: make(map[types.Account]*FeeDiscountTierTTL), + GrantCheckpoints: make(map[string]struct{}), + InvalidGrants: make(map[string]string), + AccountFeeTiersMux: new(sync.RWMutex), + AccountVolumesMux: new(sync.RWMutex), + ValidatorsMux: new(sync.RWMutex), + NewAccountsMux: new(sync.RWMutex), + GrantsMux: new(sync.RWMutex), + Schedule: info.Schedule, + CurrBucketStartTimestamp: info.CurrBucketStartTimestamp, + OldestBucketStartTimestamp: info.OldestBucketStartTimestamp, + MaxTTLTimestamp: info.MaxTTLTimestamp, + NextTTLTimestamp: info.NextTTLTimestamp, + FeeDiscountRatesCache: info.FeeDiscountRatesCache, + IsFirstFeeCycleFinished: info.IsFirstFeeCycleFinished, + } + + info.AccountVolumesMux.RLock() + for account, amount := range info.AccountVolumeContributions { + clone.AccountVolumeContributions[account] = amount + } + for subaccountID, byMarket := range info.SubaccountMarketVolumeContributions { + clone.SubaccountMarketVolumeContributions[subaccountID] = make(map[common.Hash]VolumeRecord, len(byMarket)) + for marketID, volume := range byMarket { + clone.SubaccountMarketVolumeContributions[subaccountID][marketID] = volume + } + } + info.AccountVolumesMux.RUnlock() + + info.AccountFeeTiersMux.RLock() + for account, rates := range info.AccountFeeTiers { + clone.AccountFeeTiers[account] = copyFeeDiscountRates(rates) + } + info.AccountFeeTiersMux.RUnlock() + + info.ValidatorsMux.RLock() + for operator, validator := range info.Validators { + clone.Validators[operator] = validator + } + info.ValidatorsMux.RUnlock() + + info.NewAccountsMux.RLock() + for account, ttl := range info.NewAccounts { + clone.NewAccounts[account] = copyFeeDiscountTierTTL(ttl) + } + info.NewAccountsMux.RUnlock() + + info.GrantsMux.RLock() + for granter := range info.GrantCheckpoints { + clone.GrantCheckpoints[granter] = struct{}{} + } + for grantee, granter := range info.InvalidGrants { + clone.InvalidGrants[grantee] = granter + } + info.GrantsMux.RUnlock() + + return clone +} + +func MergeFeeDiscountStakingInfoDelta(dst, base, local *FeeDiscountStakingInfo) { + if dst == nil || base == nil || local == nil { + return + } + + mergeFeeDiscountVolumeDelta(dst, base, local) + mergeFeeDiscountRateDelta(dst, base, local) + mergeFeeDiscountValidatorDelta(dst, base, local) + mergeFeeDiscountNewAccountDelta(dst, base, local) + mergeFeeDiscountGrantDelta(dst, base, local) +} + +func mergeFeeDiscountVolumeDelta(dst, base, local *FeeDiscountStakingInfo) { + local.AccountVolumesMux.RLock() + base.AccountVolumesMux.RLock() + dst.AccountVolumesMux.Lock() + for account, localAmount := range local.AccountVolumeContributions { + delta := feeDiscountDecOrZero(localAmount).Sub(feeDiscountDecOrZero(base.AccountVolumeContributions[account])) + if delta.IsZero() { + continue + } + dst.AccountVolumeContributions[account] = feeDiscountDecOrZero(dst.AccountVolumeContributions[account]).Add(delta) + } + for subaccountID, localByMarket := range local.SubaccountMarketVolumeContributions { + baseByMarket := base.SubaccountMarketVolumeContributions[subaccountID] + for marketID, localVolume := range localByMarket { + delta := volumeRecordDelta(localVolume, baseByMarket[marketID]) + if (&delta).IsZero() { + continue + } + if dst.SubaccountMarketVolumeContributions[subaccountID] == nil { + dst.SubaccountMarketVolumeContributions[subaccountID] = make(map[common.Hash]VolumeRecord) + } + dst.SubaccountMarketVolumeContributions[subaccountID][marketID] = + dst.SubaccountMarketVolumeContributions[subaccountID][marketID].Add(delta) + } + } + dst.AccountVolumesMux.Unlock() + base.AccountVolumesMux.RUnlock() + local.AccountVolumesMux.RUnlock() +} + +func mergeFeeDiscountRateDelta(dst, base, local *FeeDiscountStakingInfo) { + local.AccountFeeTiersMux.RLock() + base.AccountFeeTiersMux.RLock() + dst.AccountFeeTiersMux.Lock() + for account, localRates := range local.AccountFeeTiers { + if feeDiscountRatesEqual(localRates, base.AccountFeeTiers[account]) { + continue + } + dst.AccountFeeTiers[account] = copyFeeDiscountRates(localRates) + } + dst.AccountFeeTiersMux.Unlock() + base.AccountFeeTiersMux.RUnlock() + local.AccountFeeTiersMux.RUnlock() +} + +func mergeFeeDiscountValidatorDelta(dst, base, local *FeeDiscountStakingInfo) { + local.ValidatorsMux.RLock() + base.ValidatorsMux.RLock() + dst.ValidatorsMux.Lock() + for operator, validator := range local.Validators { + if _, had := base.Validators[operator]; had { + continue + } + dst.Validators[operator] = validator + } + dst.ValidatorsMux.Unlock() + base.ValidatorsMux.RUnlock() + local.ValidatorsMux.RUnlock() +} + +func mergeFeeDiscountNewAccountDelta(dst, base, local *FeeDiscountStakingInfo) { + local.NewAccountsMux.RLock() + base.NewAccountsMux.RLock() + dst.NewAccountsMux.Lock() + for account, localTTL := range local.NewAccounts { + if feeDiscountTierTTLEqual(localTTL, base.NewAccounts[account]) { + continue + } + dst.NewAccounts[account] = copyFeeDiscountTierTTL(localTTL) + } + dst.NewAccountsMux.Unlock() + base.NewAccountsMux.RUnlock() + local.NewAccountsMux.RUnlock() +} + +func mergeFeeDiscountGrantDelta(dst, base, local *FeeDiscountStakingInfo) { + local.GrantsMux.RLock() + base.GrantsMux.RLock() + dst.GrantsMux.Lock() + for granter := range local.GrantCheckpoints { + if _, had := base.GrantCheckpoints[granter]; had { + continue + } + dst.GrantCheckpoints[granter] = struct{}{} + } + for grantee, granter := range local.InvalidGrants { + if base.InvalidGrants[grantee] == granter { + continue + } + dst.InvalidGrants[grantee] = granter + } + dst.GrantsMux.Unlock() + base.GrantsMux.RUnlock() + local.GrantsMux.RUnlock() +} + +func feeDiscountDecOrZero(value math.LegacyDec) math.LegacyDec { + if value.IsNil() { + return math.LegacyZeroDec() + } + return value +} + +func volumeRecordDelta(local, base VolumeRecord) VolumeRecord { + return NewVolumeRecord( + feeDiscountDecOrZero(local.MakerVolume).Sub(feeDiscountDecOrZero(base.MakerVolume)), + feeDiscountDecOrZero(local.TakerVolume).Sub(feeDiscountDecOrZero(base.TakerVolume)), + ) +} + +func copyFeeDiscountRates(rates *types.FeeDiscountRates) *types.FeeDiscountRates { + if rates == nil { + return nil + } + return &types.FeeDiscountRates{ + MakerDiscountRate: rates.MakerDiscountRate, + TakerDiscountRate: rates.TakerDiscountRate, + } +} + +func feeDiscountRatesEqual(a, b *types.FeeDiscountRates) bool { + if a == nil || b == nil { + return a == b + } + return feeDiscountDecOrZero(a.MakerDiscountRate).Equal(feeDiscountDecOrZero(b.MakerDiscountRate)) && + feeDiscountDecOrZero(a.TakerDiscountRate).Equal(feeDiscountDecOrZero(b.TakerDiscountRate)) +} + +func copyFeeDiscountTierTTL(ttl *FeeDiscountTierTTL) *FeeDiscountTierTTL { + if ttl == nil { + return nil + } + cp := *ttl + return &cp +} + +func feeDiscountTierTTLEqual(a, b *FeeDiscountTierTTL) bool { + if a == nil || b == nil { + return a == b + } + return a.Tier == b.Tier && a.TtlTimestamp == b.TtlTimestamp +} + func (d *DerivativeBatchExecutionData) GetAtomicDerivativeMarketOrderResults() *DerivativeMarketOrderResults { var trade *DerivativeTradeLog diff --git a/chain/exchange/types/v2/derivative_orders.go b/chain/exchange/types/v2/derivative_orders.go index d40aa0694..9252e8afa 100644 --- a/chain/exchange/types/v2/derivative_orders.go +++ b/chain/exchange/types/v2/derivative_orders.go @@ -44,6 +44,75 @@ func NewMarketOrderForLiquidation( return &order } +// NewMarketOrderForPartialLiquidation creates a liquidation market order for a specific +// quantity (which may be less than the full position). Used by graduated liquidation. +func NewMarketOrderForPartialLiquidation( + position *Position, + closeQuantity math.LegacyDec, + positionSubaccountID common.Hash, + liquidator sdk.AccAddress, + worstPrice math.LegacyDec, +) *DerivativeMarketOrder { + var orderType OrderType + if position.IsLong { + orderType = OrderType_SELL + } else { + orderType = OrderType_BUY + } + + return &DerivativeMarketOrder{ + OrderInfo: OrderInfo{ + SubaccountId: positionSubaccountID.Hex(), + FeeRecipient: liquidator.String(), + Price: worstPrice, + Quantity: closeQuantity, + }, + OrderType: orderType, + Margin: math.LegacyZeroDec(), + MarginHold: math.LegacyZeroDec(), + TriggerPrice: nil, + } +} + +// Copy returns a deep copy of the order, isolating the mutable-by-reference fields +// (OrderHash, TriggerPrice) and cloning the LegacyDec values so the copy can be mutated +// without affecting the original. +func (m *DerivativeLimitOrder) Copy() *DerivativeLimitOrder { + if m == nil { + return nil + } + c := &DerivativeLimitOrder{ + OrderInfo: OrderInfo{ + SubaccountId: m.OrderInfo.SubaccountId, + FeeRecipient: m.OrderInfo.FeeRecipient, + Cid: m.OrderInfo.Cid, + }, + OrderType: m.OrderType, + ExpirationBlock: m.ExpirationBlock, + } + if !m.OrderInfo.Price.IsNil() { + c.OrderInfo.Price = m.OrderInfo.Price.Clone() + } + if !m.OrderInfo.Quantity.IsNil() { + c.OrderInfo.Quantity = m.OrderInfo.Quantity.Clone() + } + if !m.Margin.IsNil() { + c.Margin = m.Margin.Clone() + } + if !m.Fillable.IsNil() { + c.Fillable = m.Fillable.Clone() + } + if m.TriggerPrice != nil { + triggerPrice := m.TriggerPrice.Clone() + c.TriggerPrice = &triggerPrice + } + if m.OrderHash != nil { + c.OrderHash = make([]byte, len(m.OrderHash)) + copy(c.OrderHash, m.OrderHash) + } + return c +} + func (m *DerivativeLimitOrder) ToTrimmed() *TrimmedDerivativeLimitOrder { return &TrimmedDerivativeLimitOrder{ Price: m.OrderInfo.Price, @@ -201,21 +270,10 @@ func (m *DerivativeLimitOrder) GetCancelDepositDelta(feeRate math.LegacyDec) *v1 func (m *DerivativeLimitOrder) GetCancelRefundAmount(feeRate math.LegacyDec) math.LegacyDec { marginHoldRefund := math.LegacyZeroDec() if m.IsVanilla() { - if !m.OrderInfo.Quantity.IsPositive() { - // Malformed legacy state can have no usable denominator; only release - // margin when there is remaining fillable quantity to cancel. - if !m.Fillable.IsPositive() { - return marginHoldRefund - } - return m.Margin - } - // negative fees are only accounted for upon matching + //nolint:all // Refund = (FillableQuantity / Quantity) * (Margin + Price * Quantity * feeRate) - positiveFeeRatePart := math.LegacyMaxDec(feeRate, math.LegacyZeroDec()) - marginRefund := m.Fillable.Mul(m.Margin).Quo(m.OrderInfo.Quantity) - feeRefund := m.Fillable.Mul(m.OrderInfo.Price).Mul(positiveFeeRatePart) - marginHoldRefund = marginRefund.Add(feeRefund) + marginHoldRefund = m.Fillable.Mul(m.GetMarginHold(feeRate)).Quo(m.OrderInfo.Quantity) } return marginHoldRefund } diff --git a/chain/exchange/types/v2/events.pb.go b/chain/exchange/types/v2/events.pb.go index a7abb8af8..2d3098e60 100644 --- a/chain/exchange/types/v2/events.pb.go +++ b/chain/exchange/types/v2/events.pb.go @@ -1351,6 +1351,76 @@ func (m *EventSubaccountRiskProfileUpdated) GetIsDefault() bool { return false } +type EventSubaccountMarketRiskModeUpdated struct { + SubaccountId string `protobuf:"bytes,1,opt,name=subaccount_id,json=subaccountId,proto3" json:"subaccount_id,omitempty"` + MarketId string `protobuf:"bytes,2,opt,name=market_id,json=marketId,proto3" json:"market_id,omitempty"` + // previous explicit override mode; UNSPECIFIED when no override existed + PreviousMode RiskMode `protobuf:"varint,3,opt,name=previous_mode,json=previousMode,proto3,enum=injective.exchange.v2.RiskMode" json:"previous_mode,omitempty"` + // new explicit override mode; UNSPECIFIED when the override was removed + NewMode RiskMode `protobuf:"varint,4,opt,name=new_mode,json=newMode,proto3,enum=injective.exchange.v2.RiskMode" json:"new_mode,omitempty"` +} + +func (m *EventSubaccountMarketRiskModeUpdated) Reset() { *m = EventSubaccountMarketRiskModeUpdated{} } +func (m *EventSubaccountMarketRiskModeUpdated) String() string { return proto.CompactTextString(m) } +func (*EventSubaccountMarketRiskModeUpdated) ProtoMessage() {} +func (*EventSubaccountMarketRiskModeUpdated) Descriptor() ([]byte, []int) { + return fileDescriptor_8ac8f3da550fa1c4, []int{23} +} +func (m *EventSubaccountMarketRiskModeUpdated) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *EventSubaccountMarketRiskModeUpdated) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_EventSubaccountMarketRiskModeUpdated.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 *EventSubaccountMarketRiskModeUpdated) XXX_Merge(src proto.Message) { + xxx_messageInfo_EventSubaccountMarketRiskModeUpdated.Merge(m, src) +} +func (m *EventSubaccountMarketRiskModeUpdated) XXX_Size() int { + return m.Size() +} +func (m *EventSubaccountMarketRiskModeUpdated) XXX_DiscardUnknown() { + xxx_messageInfo_EventSubaccountMarketRiskModeUpdated.DiscardUnknown(m) +} + +var xxx_messageInfo_EventSubaccountMarketRiskModeUpdated proto.InternalMessageInfo + +func (m *EventSubaccountMarketRiskModeUpdated) GetSubaccountId() string { + if m != nil { + return m.SubaccountId + } + return "" +} + +func (m *EventSubaccountMarketRiskModeUpdated) GetMarketId() string { + if m != nil { + return m.MarketId + } + return "" +} + +func (m *EventSubaccountMarketRiskModeUpdated) GetPreviousMode() RiskMode { + if m != nil { + return m.PreviousMode + } + return RiskMode_RISK_MODE_UNSPECIFIED +} + +func (m *EventSubaccountMarketRiskModeUpdated) GetNewMode() RiskMode { + if m != nil { + return m.NewMode + } + return RiskMode_RISK_MODE_UNSPECIFIED +} + type EventBatchDepositUpdate struct { DepositUpdates []*DepositUpdate `protobuf:"bytes,1,rep,name=deposit_updates,json=depositUpdates,proto3" json:"deposit_updates,omitempty"` } @@ -1359,7 +1429,7 @@ func (m *EventBatchDepositUpdate) Reset() { *m = EventBatchDepositUpdate func (m *EventBatchDepositUpdate) String() string { return proto.CompactTextString(m) } func (*EventBatchDepositUpdate) ProtoMessage() {} func (*EventBatchDepositUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{23} + return fileDescriptor_8ac8f3da550fa1c4, []int{24} } func (m *EventBatchDepositUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1404,7 +1474,7 @@ func (m *DerivativeMarketOrderCancel) Reset() { *m = DerivativeMarketOrd func (m *DerivativeMarketOrderCancel) String() string { return proto.CompactTextString(m) } func (*DerivativeMarketOrderCancel) ProtoMessage() {} func (*DerivativeMarketOrderCancel) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{24} + return fileDescriptor_8ac8f3da550fa1c4, []int{25} } func (m *DerivativeMarketOrderCancel) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1451,7 +1521,7 @@ func (m *EventCancelDerivativeOrder) Reset() { *m = EventCancelDerivativ func (m *EventCancelDerivativeOrder) String() string { return proto.CompactTextString(m) } func (*EventCancelDerivativeOrder) ProtoMessage() {} func (*EventCancelDerivativeOrder) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{25} + return fileDescriptor_8ac8f3da550fa1c4, []int{26} } func (m *EventCancelDerivativeOrder) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1516,7 +1586,7 @@ func (m *EventFeeDiscountSchedule) Reset() { *m = EventFeeDiscountSchedu func (m *EventFeeDiscountSchedule) String() string { return proto.CompactTextString(m) } func (*EventFeeDiscountSchedule) ProtoMessage() {} func (*EventFeeDiscountSchedule) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{26} + return fileDescriptor_8ac8f3da550fa1c4, []int{27} } func (m *EventFeeDiscountSchedule) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1561,7 +1631,7 @@ func (m *EventTradingRewardCampaignUpdate) Reset() { *m = EventTradingRe func (m *EventTradingRewardCampaignUpdate) String() string { return proto.CompactTextString(m) } func (*EventTradingRewardCampaignUpdate) ProtoMessage() {} func (*EventTradingRewardCampaignUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{27} + return fileDescriptor_8ac8f3da550fa1c4, []int{28} } func (m *EventTradingRewardCampaignUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1612,7 +1682,7 @@ func (m *EventTradingRewardDistribution) Reset() { *m = EventTradingRewa func (m *EventTradingRewardDistribution) String() string { return proto.CompactTextString(m) } func (*EventTradingRewardDistribution) ProtoMessage() {} func (*EventTradingRewardDistribution) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{28} + return fileDescriptor_8ac8f3da550fa1c4, []int{29} } func (m *EventTradingRewardDistribution) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1659,7 +1729,7 @@ func (m *EventNewConditionalDerivativeOrder) Reset() { *m = EventNewCond func (m *EventNewConditionalDerivativeOrder) String() string { return proto.CompactTextString(m) } func (*EventNewConditionalDerivativeOrder) ProtoMessage() {} func (*EventNewConditionalDerivativeOrder) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{29} + return fileDescriptor_8ac8f3da550fa1c4, []int{30} } func (m *EventNewConditionalDerivativeOrder) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1727,7 +1797,7 @@ func (m *EventCancelConditionalDerivativeOrder) Reset() { *m = EventCanc func (m *EventCancelConditionalDerivativeOrder) String() string { return proto.CompactTextString(m) } func (*EventCancelConditionalDerivativeOrder) ProtoMessage() {} func (*EventCancelConditionalDerivativeOrder) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{30} + return fileDescriptor_8ac8f3da550fa1c4, []int{31} } func (m *EventCancelConditionalDerivativeOrder) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1798,7 +1868,7 @@ func (m *EventConditionalDerivativeOrderTrigger) Reset() { func (m *EventConditionalDerivativeOrderTrigger) String() string { return proto.CompactTextString(m) } func (*EventConditionalDerivativeOrderTrigger) ProtoMessage() {} func (*EventConditionalDerivativeOrderTrigger) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{31} + return fileDescriptor_8ac8f3da550fa1c4, []int{32} } func (m *EventConditionalDerivativeOrderTrigger) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1873,7 +1943,7 @@ func (m *EventOrderFail) Reset() { *m = EventOrderFail{} } func (m *EventOrderFail) String() string { return proto.CompactTextString(m) } func (*EventOrderFail) ProtoMessage() {} func (*EventOrderFail) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{32} + return fileDescriptor_8ac8f3da550fa1c4, []int{33} } func (m *EventOrderFail) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1942,7 +2012,7 @@ func (m *EventAtomicMarketOrderFeeMultipliersUpdated) String() string { } func (*EventAtomicMarketOrderFeeMultipliersUpdated) ProtoMessage() {} func (*EventAtomicMarketOrderFeeMultipliersUpdated) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{33} + return fileDescriptor_8ac8f3da550fa1c4, []int{34} } func (m *EventAtomicMarketOrderFeeMultipliersUpdated) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1987,7 +2057,7 @@ func (m *EventOrderbookUpdate) Reset() { *m = EventOrderbookUpdate{} } func (m *EventOrderbookUpdate) String() string { return proto.CompactTextString(m) } func (*EventOrderbookUpdate) ProtoMessage() {} func (*EventOrderbookUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{34} + return fileDescriptor_8ac8f3da550fa1c4, []int{35} } func (m *EventOrderbookUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2039,7 +2109,7 @@ func (m *OrderbookUpdate) Reset() { *m = OrderbookUpdate{} } func (m *OrderbookUpdate) String() string { return proto.CompactTextString(m) } func (*OrderbookUpdate) ProtoMessage() {} func (*OrderbookUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{35} + return fileDescriptor_8ac8f3da550fa1c4, []int{36} } func (m *OrderbookUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2092,7 +2162,7 @@ func (m *Orderbook) Reset() { *m = Orderbook{} } func (m *Orderbook) String() string { return proto.CompactTextString(m) } func (*Orderbook) ProtoMessage() {} func (*Orderbook) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{36} + return fileDescriptor_8ac8f3da550fa1c4, []int{37} } func (m *Orderbook) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2151,7 +2221,7 @@ func (m *EventGrantAuthorizations) Reset() { *m = EventGrantAuthorizatio func (m *EventGrantAuthorizations) String() string { return proto.CompactTextString(m) } func (*EventGrantAuthorizations) ProtoMessage() {} func (*EventGrantAuthorizations) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{37} + return fileDescriptor_8ac8f3da550fa1c4, []int{38} } func (m *EventGrantAuthorizations) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2204,7 +2274,7 @@ func (m *EventGrantActivation) Reset() { *m = EventGrantActivation{} } func (m *EventGrantActivation) String() string { return proto.CompactTextString(m) } func (*EventGrantActivation) ProtoMessage() {} func (*EventGrantActivation) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{38} + return fileDescriptor_8ac8f3da550fa1c4, []int{39} } func (m *EventGrantActivation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2256,7 +2326,7 @@ func (m *EventInvalidGrant) Reset() { *m = EventInvalidGrant{} } func (m *EventInvalidGrant) String() string { return proto.CompactTextString(m) } func (*EventInvalidGrant) ProtoMessage() {} func (*EventInvalidGrant) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{39} + return fileDescriptor_8ac8f3da550fa1c4, []int{40} } func (m *EventInvalidGrant) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2311,7 +2381,7 @@ func (m *EventOrderCancelFail) Reset() { *m = EventOrderCancelFail{} } func (m *EventOrderCancelFail) String() string { return proto.CompactTextString(m) } func (*EventOrderCancelFail) ProtoMessage() {} func (*EventOrderCancelFail) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{40} + return fileDescriptor_8ac8f3da550fa1c4, []int{41} } func (m *EventOrderCancelFail) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2385,7 +2455,7 @@ func (m *EventDerivativeOrdersV2Migration) Reset() { *m = EventDerivativ func (m *EventDerivativeOrdersV2Migration) String() string { return proto.CompactTextString(m) } func (*EventDerivativeOrdersV2Migration) ProtoMessage() {} func (*EventDerivativeOrdersV2Migration) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{41} + return fileDescriptor_8ac8f3da550fa1c4, []int{42} } func (m *EventDerivativeOrdersV2Migration) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2454,7 +2524,7 @@ func (m *DerivativeOrderV2Changes) Reset() { *m = DerivativeOrderV2Chang func (m *DerivativeOrderV2Changes) String() string { return proto.CompactTextString(m) } func (*DerivativeOrderV2Changes) ProtoMessage() {} func (*DerivativeOrderV2Changes) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{42} + return fileDescriptor_8ac8f3da550fa1c4, []int{43} } func (m *DerivativeOrderV2Changes) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2507,7 +2577,7 @@ func (m *EventSpotOrdersV2Migration) Reset() { *m = EventSpotOrdersV2Mig func (m *EventSpotOrdersV2Migration) String() string { return proto.CompactTextString(m) } func (*EventSpotOrdersV2Migration) ProtoMessage() {} func (*EventSpotOrdersV2Migration) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{43} + return fileDescriptor_8ac8f3da550fa1c4, []int{44} } func (m *EventSpotOrdersV2Migration) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2572,7 +2642,7 @@ func (m *EventTriggerConditionalMarketOrderFailed) Reset() { func (m *EventTriggerConditionalMarketOrderFailed) String() string { return proto.CompactTextString(m) } func (*EventTriggerConditionalMarketOrderFailed) ProtoMessage() {} func (*EventTriggerConditionalMarketOrderFailed) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{44} + return fileDescriptor_8ac8f3da550fa1c4, []int{45} } func (m *EventTriggerConditionalMarketOrderFailed) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2651,7 +2721,7 @@ func (m *EventTriggerConditionalLimitOrderFailed) Reset() { func (m *EventTriggerConditionalLimitOrderFailed) String() string { return proto.CompactTextString(m) } func (*EventTriggerConditionalLimitOrderFailed) ProtoMessage() {} func (*EventTriggerConditionalLimitOrderFailed) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{45} + return fileDescriptor_8ac8f3da550fa1c4, []int{46} } func (m *EventTriggerConditionalLimitOrderFailed) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2732,7 +2802,7 @@ func (m *SpotOrderV2Changes) Reset() { *m = SpotOrderV2Changes{} } func (m *SpotOrderV2Changes) String() string { return proto.CompactTextString(m) } func (*SpotOrderV2Changes) ProtoMessage() {} func (*SpotOrderV2Changes) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{46} + return fileDescriptor_8ac8f3da550fa1c4, []int{47} } func (m *SpotOrderV2Changes) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2783,7 +2853,7 @@ func (m *EventDerivativePositionV2Migration) Reset() { *m = EventDerivat func (m *EventDerivativePositionV2Migration) String() string { return proto.CompactTextString(m) } func (*EventDerivativePositionV2Migration) ProtoMessage() {} func (*EventDerivativePositionV2Migration) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{47} + return fileDescriptor_8ac8f3da550fa1c4, []int{48} } func (m *EventDerivativePositionV2Migration) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2830,7 +2900,7 @@ func (m *EventPositionTransfer) Reset() { *m = EventPositionTransfer{} } func (m *EventPositionTransfer) String() string { return proto.CompactTextString(m) } func (*EventPositionTransfer) ProtoMessage() {} func (*EventPositionTransfer) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{48} + return fileDescriptor_8ac8f3da550fa1c4, []int{49} } func (m *EventPositionTransfer) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2904,6 +2974,7 @@ func init() { proto.RegisterType((*EventSubaccountWithdraw)(nil), "injective.exchange.v2.EventSubaccountWithdraw") proto.RegisterType((*EventSubaccountBalanceTransfer)(nil), "injective.exchange.v2.EventSubaccountBalanceTransfer") proto.RegisterType((*EventSubaccountRiskProfileUpdated)(nil), "injective.exchange.v2.EventSubaccountRiskProfileUpdated") + proto.RegisterType((*EventSubaccountMarketRiskModeUpdated)(nil), "injective.exchange.v2.EventSubaccountMarketRiskModeUpdated") proto.RegisterType((*EventBatchDepositUpdate)(nil), "injective.exchange.v2.EventBatchDepositUpdate") proto.RegisterType((*DerivativeMarketOrderCancel)(nil), "injective.exchange.v2.DerivativeMarketOrderCancel") proto.RegisterType((*EventCancelDerivativeOrder)(nil), "injective.exchange.v2.EventCancelDerivativeOrder") @@ -2937,169 +3008,172 @@ func init() { } var fileDescriptor_8ac8f3da550fa1c4 = []byte{ - // 2580 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x5a, 0xcd, 0x6f, 0xdc, 0xc6, - 0x15, 0x37, 0x57, 0xb2, 0xac, 0x7d, 0x2b, 0x4b, 0x16, 0x2d, 0xd9, 0x6b, 0x3b, 0x96, 0x65, 0xc6, - 0x5f, 0x71, 0x92, 0x5d, 0x5b, 0x41, 0x11, 0xa0, 0x5f, 0x81, 0x3e, 0x6d, 0x05, 0x92, 0xa3, 0x50, - 0x76, 0x52, 0xb4, 0x30, 0xd8, 0x59, 0x72, 0x76, 0x77, 0x22, 0x2e, 0x87, 0xe2, 0x90, 0x2b, 0x6f, - 0x6f, 0x29, 0x7a, 0xc8, 0x2d, 0xbd, 0x14, 0x0d, 0x50, 0xf4, 0xd6, 0x5b, 0x2f, 0xed, 0xad, 0x40, - 0x0f, 0x45, 0x73, 0x69, 0x8e, 0x69, 0x4f, 0x41, 0x80, 0x06, 0x85, 0x7d, 0x69, 0xff, 0x86, 0x5e, - 0x0a, 0xce, 0x07, 0xc9, 0xfd, 0xde, 0x95, 0x1d, 0xa4, 0xc8, 0x6d, 0xf9, 0xf8, 0xbe, 0xe6, 0x37, - 0xef, 0xbd, 0x79, 0xf3, 0xb8, 0x60, 0x10, 0xef, 0x03, 0x6c, 0x87, 0xa4, 0x89, 0xcb, 0xf8, 0x89, - 0x5d, 0x47, 0x5e, 0x0d, 0x97, 0x9b, 0x2b, 0x65, 0xdc, 0xc4, 0x5e, 0xc8, 0x4a, 0x7e, 0x40, 0x43, - 0xaa, 0x2f, 0x26, 0x3c, 0x25, 0xc5, 0x53, 0x6a, 0xae, 0x5c, 0x5c, 0xa8, 0xd1, 0x1a, 0xe5, 0x1c, - 0xe5, 0xf8, 0x97, 0x60, 0xbe, 0xb8, 0x64, 0x53, 0xd6, 0xa0, 0xac, 0x5c, 0x41, 0x0c, 0x97, 0x9b, - 0x77, 0x2b, 0x38, 0x44, 0x77, 0xcb, 0x36, 0x25, 0x9e, 0x7c, 0x7f, 0x3d, 0x35, 0x48, 0x03, 0x64, - 0xbb, 0x29, 0x93, 0x78, 0x94, 0x6c, 0xd7, 0xfa, 0xf8, 0xa5, 0xec, 0x0b, 0xae, 0x3e, 0xde, 0x37, - 0x50, 0x70, 0x80, 0x43, 0xc9, 0x73, 0xb5, 0x37, 0x0f, 0x0d, 0x1c, 0x1c, 0x08, 0x16, 0xe3, 0x1f, - 0x1a, 0x9c, 0xdf, 0x8c, 0x57, 0xbc, 0x86, 0x42, 0xbb, 0xbe, 0xef, 0xd3, 0x70, 0xf3, 0x09, 0xb6, - 0xa3, 0x90, 0x50, 0x4f, 0xbf, 0x04, 0x79, 0xa1, 0xce, 0x22, 0x4e, 0x51, 0x5b, 0xd6, 0x6e, 0xe5, - 0xcd, 0x69, 0x41, 0xd8, 0x76, 0xf4, 0x45, 0x98, 0x22, 0xcc, 0xaa, 0x44, 0xad, 0x62, 0x6e, 0x59, - 0xbb, 0x35, 0x6d, 0x9e, 0x24, 0x6c, 0x2d, 0x6a, 0xe9, 0x6f, 0xc3, 0x69, 0xac, 0x14, 0x3c, 0x6c, - 0xf9, 0xb8, 0x38, 0xb1, 0xac, 0xdd, 0x9a, 0x5d, 0xb9, 0x56, 0xea, 0x09, 0x64, 0x69, 0x33, 0xcb, - 0x6b, 0xb6, 0x8b, 0xea, 0x6f, 0xc2, 0x54, 0x18, 0x20, 0x07, 0xb3, 0xe2, 0xe4, 0xf2, 0xc4, 0xad, - 0xc2, 0xca, 0x95, 0x3e, 0x4a, 0x1e, 0xc6, 0x4c, 0x3b, 0xb4, 0x66, 0x4a, 0x76, 0xe3, 0x9f, 0x39, - 0xb8, 0x9c, 0x2e, 0x6a, 0x03, 0x07, 0xa4, 0x89, 0x62, 0xa9, 0xe7, 0x5b, 0xda, 0x75, 0x98, 0x25, - 0xcc, 0x72, 0xc9, 0x61, 0x44, 0x1c, 0x14, 0x6b, 0xe1, 0x6b, 0x9b, 0x36, 0x4f, 0x13, 0xb6, 0x93, - 0x12, 0x75, 0x13, 0x74, 0x3b, 0x6a, 0x44, 0x2e, 0xb7, 0x68, 0x55, 0x23, 0xcf, 0x21, 0x5e, 0xad, - 0x38, 0x19, 0xdb, 0x58, 0x7b, 0xf9, 0xb3, 0xaf, 0xae, 0x68, 0x5f, 0x7e, 0x75, 0xe5, 0x92, 0x88, - 0x14, 0xe6, 0x1c, 0x94, 0x08, 0x2d, 0x37, 0x50, 0x58, 0x2f, 0xed, 0xe0, 0x1a, 0xb2, 0x5b, 0x1b, - 0xd8, 0x36, 0xe7, 0x53, 0xf1, 0x2d, 0x21, 0xdd, 0x8d, 0xea, 0xc9, 0xe3, 0xa3, 0xba, 0x9a, 0xa0, - 0x3a, 0xc5, 0x51, 0x7d, 0xa5, 0x8f, 0x92, 0x14, 0xb6, 0x2e, 0x7c, 0x3f, 0x55, 0xf8, 0xee, 0x50, - 0x16, 0xc6, 0x3e, 0xb2, 0xad, 0x80, 0x36, 0xb2, 0x20, 0x0c, 0xc4, 0xf7, 0x65, 0x38, 0xcd, 0xa2, - 0x0a, 0xb2, 0x6d, 0x1a, 0x79, 0x9c, 0x21, 0x86, 0x79, 0xc6, 0x9c, 0x49, 0x89, 0xdb, 0x8e, 0xfe, - 0x04, 0x6e, 0xba, 0x94, 0x85, 0x1c, 0x40, 0x66, 0x55, 0x03, 0xda, 0xb0, 0x50, 0x13, 0x11, 0x17, - 0x55, 0x5c, 0x6c, 0x39, 0x51, 0x40, 0xbc, 0x9a, 0xe5, 0xa3, 0x16, 0x8d, 0x42, 0xbe, 0x0d, 0x02, - 0xdb, 0x13, 0xc3, 0xb0, 0x35, 0xdc, 0xac, 0xc7, 0xab, 0x4a, 0xe1, 0x06, 0xd7, 0xb7, 0xc7, 0xd5, - 0xe9, 0x18, 0x2e, 0x77, 0x5a, 0xe6, 0x19, 0x63, 0xd9, 0xc8, 0xb3, 0xb1, 0xcb, 0x32, 0x7b, 0x39, - 0xd4, 0xde, 0x85, 0x36, 0x7b, 0xef, 0xc4, 0x6a, 0xd6, 0x85, 0x16, 0xe3, 0xdf, 0x1a, 0xdc, 0xe8, - 0x06, 0x71, 0x3d, 0xa0, 0x8c, 0xed, 0x51, 0xea, 0x66, 0xd1, 0xec, 0x02, 0x4c, 0xeb, 0x01, 0xd8, - 0x15, 0x28, 0x1c, 0x46, 0x34, 0xc4, 0x96, 0x83, 0x3d, 0xda, 0xe0, 0x98, 0xe6, 0x4d, 0xe0, 0xa4, - 0x8d, 0x98, 0xf2, 0xcd, 0x21, 0x6a, 0xfc, 0x42, 0x83, 0x97, 0x7a, 0xe5, 0xe3, 0x1e, 0x65, 0x64, - 0x78, 0xb8, 0xdc, 0x83, 0xbc, 0x2f, 0x19, 0x59, 0x31, 0x37, 0x30, 0x66, 0xf7, 0x13, 0x40, 0x94, - 0x6a, 0x33, 0x95, 0x35, 0xfe, 0xac, 0xc1, 0x25, 0xee, 0x46, 0xea, 0xc1, 0x2e, 0x37, 0xb2, 0x87, - 0x22, 0x86, 0x9d, 0xc1, 0x5e, 0x5c, 0x85, 0x19, 0x86, 0xc3, 0xd0, 0xc5, 0x96, 0x1f, 0x10, 0x1b, - 0x4b, 0x7c, 0x0b, 0x82, 0xb6, 0x17, 0x93, 0xf4, 0x12, 0x9c, 0x0d, 0x69, 0x88, 0x5c, 0xab, 0x41, - 0x18, 0x8b, 0xd1, 0xe4, 0x48, 0x0b, 0x30, 0xcd, 0x79, 0xfe, 0x6a, 0x57, 0xbc, 0xe1, 0x78, 0xe9, - 0xaf, 0x81, 0xde, 0xc6, 0x69, 0x05, 0x28, 0xc4, 0x22, 0xba, 0xcc, 0x33, 0x8d, 0x0c, 0xa7, 0x89, - 0x42, 0x6c, 0xec, 0xc1, 0x05, 0xee, 0xfc, 0x3e, 0xb7, 0xe8, 0x08, 0xcf, 0xd7, 0x90, 0x1b, 0x87, - 0xd3, 0x60, 0xd7, 0xcf, 0xc1, 0x14, 0x6a, 0xc4, 0xa0, 0x48, 0xa7, 0xe5, 0x93, 0xb1, 0x2f, 0x77, - 0xe5, 0x01, 0x7d, 0x81, 0x4a, 0x3f, 0x56, 0x20, 0x4b, 0x5d, 0xb8, 0x45, 0x3d, 0x67, 0x0d, 0x79, - 0x07, 0x41, 0xe4, 0x87, 0x76, 0xeb, 0xb9, 0x41, 0xbe, 0x03, 0x0b, 0x0a, 0x34, 0xa9, 0x27, 0x8b, - 0xb2, 0x02, 0x54, 0x18, 0xe7, 0xe0, 0x19, 0x1f, 0x69, 0x50, 0xe4, 0x1e, 0xad, 0xba, 0xae, 0x0a, - 0x0b, 0x76, 0x1f, 0x91, 0xc0, 0x8e, 0xc2, 0xe7, 0x76, 0xa7, 0xf7, 0x1e, 0x4e, 0xf4, 0xd9, 0xc3, - 0x0f, 0x60, 0x49, 0xe4, 0x01, 0xf1, 0x50, 0xd0, 0x7a, 0xc7, 0xe7, 0xae, 0x08, 0x5f, 0x1f, 0xf9, - 0x0e, 0x0a, 0xb1, 0x7e, 0x1f, 0xa6, 0x84, 0x79, 0xee, 0x4c, 0x61, 0xe5, 0x76, 0x9f, 0x48, 0xef, - 0xa1, 0x61, 0x6d, 0x32, 0xce, 0x57, 0x53, 0xca, 0x1b, 0x4e, 0x9f, 0x60, 0x97, 0x86, 0x36, 0x3b, - 0x0c, 0xdd, 0x1c, 0x7a, 0x0c, 0xf4, 0xb4, 0xf2, 0x17, 0x0d, 0x74, 0x11, 0x44, 0xf8, 0x28, 0xee, - 0x1e, 0x78, 0x89, 0x63, 0x83, 0x61, 0xdd, 0x00, 0xa8, 0x44, 0x2d, 0x51, 0x54, 0x55, 0x46, 0x5f, - 0xef, 0x97, 0xd1, 0x3e, 0x0d, 0x77, 0x48, 0x83, 0x08, 0xc5, 0x66, 0xbe, 0x12, 0xb5, 0xa4, 0x89, - 0x2d, 0x28, 0x30, 0xec, 0xba, 0x4a, 0xcd, 0xc4, 0x38, 0x6a, 0x20, 0x96, 0x14, 0x7a, 0x8c, 0xbf, - 0xab, 0xf0, 0x78, 0x80, 0x8f, 0xd2, 0xc5, 0x8e, 0xb2, 0x8e, 0xb7, 0x7b, 0xac, 0xe3, 0xd5, 0xa1, - 0x30, 0xf6, 0x5e, 0xcd, 0x4e, 0xaf, 0xd5, 0x8c, 0xa5, 0x2c, 0xbb, 0xa6, 0x26, 0x2c, 0xf0, 0x25, - 0x89, 0xb3, 0x26, 0xd9, 0x97, 0xc1, 0xcb, 0x59, 0x85, 0x93, 0xdc, 0x3a, 0x0f, 0xf3, 0x51, 0xa1, - 0x94, 0xe1, 0x20, 0x24, 0x8d, 0x1f, 0xc1, 0xa2, 0xa8, 0x51, 0x3e, 0x0d, 0xdb, 0xa2, 0xed, 0xad, - 0x8e, 0x68, 0xbb, 0x3a, 0x40, 0x79, 0xcf, 0x38, 0xfb, 0x24, 0x07, 0x17, 0xb9, 0xea, 0x3d, 0x1c, - 0xf8, 0x38, 0x8c, 0x90, 0xfb, 0x35, 0x44, 0xb3, 0xee, 0xc0, 0xa2, 0xaf, 0xf4, 0xab, 0xf2, 0x42, - 0xbc, 0x2a, 0x95, 0x90, 0xf4, 0x4b, 0xc6, 0x0e, 0x9f, 0xb6, 0xbd, 0x2a, 0xe5, 0x8a, 0x35, 0xf3, - 0xac, 0xdf, 0xfd, 0x4a, 0xdf, 0x85, 0x53, 0xaa, 0x2d, 0x9c, 0xe0, 0x7a, 0x5f, 0x1f, 0x4d, 0xaf, - 0xec, 0x06, 0xa5, 0x6a, 0xa5, 0xc3, 0xf8, 0x52, 0x93, 0x55, 0x65, 0xf3, 0x89, 0x4f, 0x82, 0xd6, - 0x56, 0x14, 0x46, 0x01, 0x66, 0x5f, 0x07, 0x3c, 0x87, 0x70, 0x11, 0x73, 0x1b, 0x56, 0x55, 0x18, - 0x69, 0xc3, 0x48, 0xac, 0xa5, 0xd4, 0xb7, 0x27, 0xed, 0x72, 0x2e, 0x83, 0xd3, 0x79, 0xdc, 0xfb, - 0xb5, 0xf1, 0xb7, 0x1c, 0x5c, 0xed, 0xb5, 0xef, 0x12, 0x0b, 0xb9, 0xbe, 0x81, 0x71, 0x9d, 0x81, - 0x3b, 0x77, 0x5c, 0xb8, 0x4f, 0x24, 0x70, 0xeb, 0xb7, 0x61, 0x9e, 0x30, 0xab, 0x4e, 0xa3, 0xc0, - 0x6d, 0x59, 0xd9, 0x7d, 0x9c, 0x36, 0xe7, 0x08, 0xbb, 0xcf, 0xe9, 0xaa, 0x6f, 0xdf, 0x82, 0x19, - 0xc9, 0x91, 0x39, 0xdb, 0x47, 0xbb, 0x05, 0x14, 0xa4, 0x60, 0x7c, 0x6e, 0xe8, 0x6b, 0x00, 0xf1, - 0x72, 0xe4, 0x31, 0x74, 0x72, 0x74, 0x2d, 0x1c, 0x16, 0x7e, 0x52, 0x19, 0xbf, 0xd6, 0xe0, 0x9c, - 0x48, 0xce, 0xa4, 0x49, 0xda, 0xc0, 0xbc, 0x39, 0x8a, 0x5b, 0x47, 0x16, 0xd8, 0x16, 0x72, 0x9c, - 0x00, 0x33, 0x26, 0x01, 0x04, 0x16, 0xd8, 0xab, 0x82, 0x32, 0x5a, 0xc7, 0xfe, 0x66, 0xd2, 0x11, - 0x88, 0x48, 0xb8, 0x50, 0x12, 0x9e, 0x95, 0xe2, 0xfb, 0x70, 0x49, 0x5e, 0x75, 0x4b, 0xeb, 0x94, - 0x78, 0x2a, 0xac, 0x64, 0xcb, 0xf0, 0x89, 0xba, 0x83, 0xa6, 0x9e, 0xbd, 0x4f, 0xc2, 0xba, 0x13, - 0xa0, 0xa3, 0x91, 0x5b, 0x5f, 0x87, 0x85, 0x89, 0xff, 0xb2, 0xf5, 0x75, 0x58, 0xa8, 0xfc, 0x3f, - 0xb6, 0x6b, 0x7f, 0x54, 0xb9, 0x95, 0xba, 0x26, 0xbb, 0xa3, 0x87, 0x01, 0xf2, 0x58, 0x15, 0x07, - 0x71, 0x3c, 0xc4, 0xe0, 0x75, 0x7b, 0x99, 0x37, 0xe7, 0x58, 0x60, 0xef, 0x67, 0x1d, 0xbd, 0x0d, - 0xf3, 0xb1, 0xa3, 0xdd, 0x58, 0xe6, 0xcd, 0x39, 0x87, 0x85, 0xfb, 0x2f, 0x04, 0xce, 0xdf, 0xa8, - 0x94, 0x49, 0xd5, 0x99, 0x84, 0x1d, 0xec, 0x05, 0xb4, 0x4a, 0x5c, 0x2c, 0x32, 0xc6, 0xe9, 0x0d, - 0x6c, 0xbe, 0x03, 0xd8, 0xc7, 0x70, 0xc6, 0x0f, 0x70, 0x93, 0xd0, 0x88, 0x59, 0xbe, 0x90, 0x97, - 0x39, 0xf4, 0xda, 0xd0, 0x0e, 0x3c, 0x63, 0x53, 0x3a, 0x38, 0xa7, 0x74, 0x49, 0xb2, 0xbe, 0x0f, - 0x05, 0x0f, 0x1f, 0x25, 0x9a, 0x27, 0x8e, 0xad, 0x19, 0x3c, 0x7c, 0xa4, 0x94, 0x5e, 0x06, 0x20, - 0xcc, 0x72, 0x70, 0x15, 0x45, 0x6e, 0xc8, 0x33, 0x6e, 0xda, 0xcc, 0x13, 0xb6, 0x21, 0x08, 0x46, - 0x3d, 0x3b, 0xef, 0x90, 0x09, 0x20, 0xab, 0xc8, 0x2e, 0xcc, 0x39, 0x82, 0x60, 0x45, 0x9c, 0x12, - 0xa7, 0x42, 0x7c, 0x0e, 0x5f, 0xeb, 0x5b, 0x2e, 0x33, 0xe2, 0xe6, 0xac, 0x93, 0x7d, 0x64, 0xc6, - 0xa7, 0x1a, 0x5c, 0xea, 0x2c, 0xa8, 0x99, 0x1b, 0xa0, 0xfe, 0x08, 0x66, 0x64, 0xd1, 0x12, 0xc7, - 0xae, 0x36, 0x70, 0xf9, 0x3d, 0x35, 0xc9, 0xea, 0x59, 0x68, 0xa4, 0x24, 0x7d, 0x07, 0xe6, 0xc4, - 0x45, 0xd5, 0x3a, 0x8c, 0x90, 0x17, 0x92, 0x50, 0x8c, 0x31, 0x46, 0xbc, 0xce, 0xcd, 0x0a, 0xd9, - 0x77, 0xa5, 0xa8, 0xf1, 0x5b, 0x75, 0xee, 0x0a, 0xa7, 0x3b, 0x1a, 0xa4, 0xc1, 0x85, 0xf7, 0x1a, - 0xf0, 0xd1, 0x48, 0x83, 0x48, 0x61, 0x39, 0x4e, 0x69, 0x27, 0xea, 0x26, 0x14, 0xdc, 0xf8, 0x51, - 0xa2, 0x20, 0x82, 0x60, 0x9c, 0xce, 0x47, 0x82, 0x00, 0x6e, 0x42, 0xd1, 0xeb, 0x70, 0x36, 0x0b, - 0xad, 0xbc, 0xb9, 0xf3, 0x60, 0x28, 0xac, 0xac, 0x8c, 0x83, 0xb0, 0x70, 0x52, 0x9a, 0x98, 0x6f, - 0x74, 0xbe, 0x30, 0x2a, 0xb2, 0x79, 0xdc, 0xc2, 0x78, 0x83, 0x30, 0x1e, 0x9e, 0xfb, 0x76, 0x1d, - 0x3b, 0x91, 0x8b, 0xf5, 0x2d, 0x98, 0x66, 0xf2, 0xf7, 0x90, 0x6e, 0xbe, 0x87, 0xb4, 0x99, 0xc8, - 0x1a, 0x5f, 0x68, 0xb0, 0xcc, 0x8d, 0x3c, 0x0c, 0x10, 0x3f, 0x12, 0xf0, 0x11, 0x0a, 0x9c, 0x75, - 0xd4, 0xf0, 0x11, 0xa9, 0x79, 0x32, 0x78, 0x1f, 0xc1, 0x69, 0x5b, 0x52, 0xc4, 0x71, 0x2c, 0x2c, - 0xde, 0x19, 0x30, 0x33, 0xeb, 0x52, 0x15, 0x9f, 0xb8, 0xe6, 0x8c, 0x9d, 0x79, 0xd2, 0x1f, 0xc3, - 0x62, 0xa2, 0x36, 0xe0, 0xcc, 0x96, 0x4f, 0xa9, 0x3b, 0xec, 0x22, 0xae, 0x34, 0x0a, 0xfd, 0x7b, - 0x94, 0xba, 0xe6, 0x59, 0xbb, 0x8b, 0xc6, 0x0c, 0x5f, 0x96, 0xd7, 0x36, 0x77, 0x36, 0x08, 0x0b, - 0x03, 0x52, 0x11, 0x93, 0xba, 0x07, 0x30, 0xa7, 0x8a, 0x94, 0xb0, 0xaf, 0x92, 0xb2, 0x5f, 0x7f, - 0xba, 0x2a, 0x8b, 0x84, 0x60, 0x36, 0x67, 0x51, 0xdb, 0xb3, 0xf1, 0x07, 0x0d, 0x0c, 0xd5, 0xee, - 0xaf, 0x53, 0xcf, 0xe1, 0xd7, 0x41, 0x34, 0x5e, 0x60, 0x7f, 0xbf, 0xbd, 0x53, 0xbe, 0x31, 0x34, - 0xa0, 0x44, 0x87, 0x2e, 0x84, 0x74, 0x1d, 0x26, 0xeb, 0x88, 0xd5, 0x79, 0xa4, 0xcf, 0x98, 0xfc, - 0x77, 0x6c, 0x8e, 0xa8, 0x6e, 0x4a, 0xd6, 0xac, 0x69, 0x22, 0xfb, 0x20, 0xe3, 0x57, 0x39, 0xb8, - 0x9e, 0xc9, 0xc1, 0xe3, 0x7a, 0xfd, 0xcd, 0xa5, 0x63, 0x67, 0xa5, 0x9b, 0x7c, 0x21, 0x95, 0xce, - 0xf8, 0xaf, 0x9a, 0xa0, 0xf5, 0x47, 0xe4, 0x61, 0x40, 0x6a, 0xb5, 0x5e, 0xc0, 0xcc, 0x64, 0x80, - 0xb9, 0x01, 0xb3, 0x12, 0x03, 0xc9, 0x2e, 0x91, 0xe9, 0xa0, 0xea, 0x77, 0x60, 0x21, 0x14, 0x3f, - 0xb1, 0x23, 0x0b, 0x4b, 0x66, 0x23, 0xf5, 0xe4, 0x1d, 0xb7, 0x7c, 0x3f, 0xde, 0xd6, 0xdb, 0x30, - 0xef, 0xbb, 0xc8, 0x6e, 0x67, 0x9f, 0xe4, 0xec, 0x73, 0xe2, 0x45, 0xca, 0x5b, 0x82, 0xb3, 0x9d, - 0xda, 0x6d, 0xe2, 0x88, 0x66, 0xcf, 0x9c, 0x6f, 0x57, 0xbe, 0x4e, 0x1c, 0xc3, 0x85, 0x59, 0xbe, - 0x78, 0x4e, 0xd8, 0x42, 0xc4, 0xd5, 0x8b, 0x70, 0x4a, 0x06, 0xbb, 0x5c, 0xa2, 0x7a, 0xd4, 0xcf, - 0xc1, 0x54, 0x6c, 0x1a, 0x8b, 0xb4, 0x9d, 0x31, 0xe5, 0x93, 0xbe, 0x00, 0x27, 0xab, 0x2e, 0xaa, - 0x89, 0xfb, 0xe6, 0x69, 0x53, 0x3c, 0xc4, 0x01, 0x6a, 0x13, 0x47, 0x4c, 0xdd, 0xf3, 0x26, 0xff, - 0x6d, 0x7c, 0xac, 0xc1, 0xab, 0x62, 0x88, 0x12, 0xd2, 0x06, 0xb1, 0x33, 0x3b, 0xb3, 0x85, 0xf1, - 0x6e, 0xe4, 0x86, 0xc4, 0x77, 0x09, 0x0e, 0x98, 0x6a, 0x2f, 0x7e, 0x0a, 0xe7, 0xd4, 0x78, 0x06, - 0x63, 0xab, 0x91, 0x32, 0xc8, 0xec, 0xed, 0x57, 0x09, 0x65, 0xeb, 0x9d, 0xd5, 0x69, 0x2e, 0x34, - 0xba, 0x89, 0xcc, 0xf8, 0x93, 0x26, 0x2f, 0xb9, 0xdc, 0x8b, 0x0a, 0xa5, 0x07, 0xb2, 0x12, 0x6e, - 0xc3, 0x0c, 0xf3, 0x69, 0xe7, 0x19, 0xde, 0x2f, 0x49, 0x3b, 0xa4, 0xcd, 0x42, 0x2c, 0x2b, 0x8f, - 0x70, 0xfd, 0x11, 0xe8, 0x4e, 0x12, 0x50, 0x89, 0xc2, 0xdc, 0x58, 0x0a, 0xe7, 0x53, 0x0d, 0xaa, - 0x33, 0xb0, 0x61, 0xae, 0xd3, 0xe9, 0x33, 0x30, 0xc1, 0xf0, 0x21, 0xdf, 0xb7, 0x49, 0x33, 0xfe, - 0xa9, 0xff, 0x10, 0xf2, 0x54, 0x31, 0xc9, 0x42, 0xb3, 0x3c, 0xcc, 0xa4, 0x99, 0x8a, 0x18, 0xbf, - 0xd3, 0x20, 0x9f, 0xbc, 0x18, 0x9c, 0x00, 0xdf, 0x13, 0x83, 0x0c, 0x17, 0x37, 0x71, 0x52, 0xd9, - 0x5f, 0xea, 0x63, 0x6b, 0x27, 0x66, 0xe2, 0x93, 0x0b, 0xfe, 0x8b, 0xe9, 0x3f, 0x90, 0x93, 0x0b, - 0x29, 0x3d, 0x31, 0x82, 0x34, 0x1f, 0x55, 0x08, 0x71, 0xe3, 0x48, 0x1e, 0xa0, 0xf7, 0x02, 0xe4, - 0x85, 0xab, 0x51, 0x58, 0xa7, 0x01, 0xf9, 0x19, 0x1f, 0x7b, 0xb3, 0x38, 0xa0, 0x6b, 0x31, 0x59, - 0x36, 0x47, 0x79, 0x53, 0x3d, 0xea, 0xab, 0x30, 0xc5, 0x7f, 0x0e, 0x3b, 0x87, 0xba, 0xb5, 0x9a, - 0x52, 0xd0, 0xf8, 0x50, 0xc5, 0x8f, 0xe0, 0x89, 0x65, 0xc5, 0xb4, 0x3d, 0xb1, 0x8a, 0xdb, 0xad, - 0xe2, 0xac, 0x3f, 0xb9, 0x76, 0x7f, 0xbe, 0xd3, 0xd6, 0xac, 0xe7, 0xd7, 0x2e, 0xcb, 0x5e, 0x6b, - 0xb1, 0xbb, 0xd7, 0xda, 0xf6, 0xc2, 0xa4, 0x55, 0xbf, 0x07, 0xf3, 0xdc, 0x85, 0x6d, 0xaf, 0x89, - 0x5c, 0xe2, 0x70, 0x4f, 0x8e, 0x63, 0xdf, 0xf8, 0x7d, 0x5b, 0x32, 0x88, 0x52, 0xce, 0x6b, 0xc2, - 0xf8, 0x1f, 0x62, 0x3a, 0xef, 0x00, 0x97, 0x01, 0x3a, 0x6a, 0x5d, 0x5e, 0x86, 0x19, 0x2f, 0x5b, - 0x67, 0x60, 0x22, 0x2e, 0x53, 0x62, 0x6a, 0x1d, 0xff, 0xd4, 0x97, 0xa1, 0xe0, 0x60, 0x66, 0x07, - 0x84, 0x0f, 0x27, 0x65, 0x01, 0xcb, 0x92, 0xe2, 0xc2, 0xbd, 0xdc, 0x31, 0x9b, 0x14, 0x83, 0xab, - 0xf7, 0x56, 0x76, 0x49, 0x2d, 0x18, 0xe1, 0x13, 0xd2, 0x4f, 0x60, 0x3e, 0x19, 0xbd, 0x59, 0x62, - 0xbb, 0x55, 0x28, 0x94, 0x47, 0x3b, 0x8d, 0xdf, 0x5b, 0x59, 0x17, 0x62, 0xe6, 0x9c, 0x9a, 0xc2, - 0x49, 0x82, 0xfe, 0x18, 0xf4, 0x74, 0x16, 0x97, 0x68, 0x9f, 0x38, 0x9e, 0xf6, 0x33, 0xc9, 0x58, - 0x4e, 0x52, 0x8c, 0xbf, 0xe6, 0xa0, 0xd8, 0x8f, 0x5d, 0xc1, 0xa9, 0xa5, 0x70, 0xaa, 0x76, 0x21, - 0x97, 0x69, 0x17, 0xee, 0x82, 0xe6, 0x8f, 0xf3, 0x91, 0x46, 0xf3, 0x63, 0x91, 0xc3, 0x71, 0xbe, - 0x5c, 0x69, 0x87, 0xb1, 0x48, 0x23, 0x33, 0x6c, 0x18, 0x2e, 0xd2, 0x88, 0x45, 0xaa, 0xc5, 0xa9, - 0x31, 0x44, 0xaa, 0xfa, 0x1b, 0x90, 0x0b, 0xfd, 0xe2, 0xa9, 0xd1, 0x67, 0x1a, 0xb9, 0xd0, 0x37, - 0xfe, 0xa3, 0xc9, 0x6b, 0x49, 0x3a, 0x73, 0x1e, 0x39, 0x76, 0x1e, 0xf5, 0x8f, 0x9d, 0x57, 0x06, - 0x8c, 0x25, 0x87, 0x45, 0xcd, 0xfb, 0x03, 0xa2, 0x66, 0x0c, 0xbd, 0xdd, 0xf1, 0xf2, 0xf3, 0x1c, - 0xdc, 0x92, 0x4d, 0x32, 0xef, 0x01, 0x32, 0xdd, 0x4e, 0xf6, 0x18, 0x46, 0xc4, 0x1d, 0xf6, 0x0d, - 0x6b, 0xa4, 0x7c, 0x6f, 0x9f, 0x35, 0x8d, 0x11, 0x64, 0xe9, 0xac, 0xa9, 0xa3, 0x66, 0x88, 0x86, - 0x27, 0x53, 0x33, 0xae, 0x40, 0x41, 0xf6, 0x33, 0x16, 0x0e, 0x02, 0x59, 0x21, 0x40, 0x92, 0x36, - 0x83, 0x40, 0x65, 0xc1, 0x54, 0x92, 0x05, 0xc6, 0x87, 0x39, 0xb8, 0xd9, 0x07, 0x84, 0xb4, 0xf5, - 0xfc, 0x96, 0x63, 0xf0, 0x51, 0x0e, 0xf4, 0xee, 0x88, 0xf9, 0x7f, 0x2b, 0x19, 0xd5, 0xb1, 0x4a, - 0x86, 0xca, 0xff, 0xa9, 0xf1, 0xf2, 0xff, 0x40, 0x5e, 0xe2, 0xba, 0xbf, 0x25, 0x67, 0xcb, 0xc0, - 0x26, 0x4c, 0xab, 0xaf, 0xbf, 0xf2, 0x3a, 0x3c, 0xfc, 0xcf, 0x0e, 0xc9, 0x87, 0xe3, 0x44, 0xd4, - 0x78, 0xa6, 0xc9, 0xcf, 0x1a, 0xea, 0x5d, 0x32, 0xfb, 0x1b, 0x18, 0x69, 0x77, 0x60, 0x81, 0xd1, - 0x28, 0xb0, 0x71, 0xcf, 0x79, 0x9f, 0x2e, 0xde, 0xb5, 0x8d, 0xfc, 0xbe, 0x0b, 0x17, 0x1c, 0xcc, - 0x42, 0xe2, 0x71, 0xf7, 0x3b, 0xc4, 0xc4, 0xc9, 0x7b, 0x3e, 0xc3, 0xd0, 0x26, 0xfb, 0x16, 0x4c, - 0x27, 0xf3, 0x9e, 0x31, 0xf6, 0x2c, 0x11, 0x5a, 0x3b, 0xf8, 0xec, 0xe9, 0x92, 0xf6, 0xf9, 0xd3, - 0x25, 0xed, 0x5f, 0x4f, 0x97, 0xb4, 0x5f, 0x3e, 0x5b, 0x3a, 0xf1, 0xf9, 0xb3, 0xa5, 0x13, 0x5f, - 0x3c, 0x5b, 0x3a, 0xf1, 0xe3, 0x77, 0x6b, 0x24, 0xac, 0x47, 0x95, 0x92, 0x4d, 0x1b, 0xe5, 0x6d, - 0x05, 0xdf, 0x0e, 0xaa, 0xb0, 0x72, 0x02, 0xe6, 0xeb, 0x36, 0x0d, 0x70, 0xf6, 0xb1, 0x8e, 0x88, - 0x57, 0x6e, 0x50, 0x27, 0x72, 0x31, 0x4b, 0xff, 0x7c, 0x14, 0xb6, 0x7c, 0xcc, 0xca, 0xcd, 0x95, - 0xca, 0x14, 0xff, 0xf7, 0xd1, 0x1b, 0xff, 0x0b, 0x00, 0x00, 0xff, 0xff, 0xf9, 0x8b, 0xef, 0x1f, - 0x84, 0x25, 0x00, 0x00, + // 2640 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x5a, 0xcf, 0x6f, 0xdc, 0xc6, + 0xf5, 0x37, 0x57, 0xb2, 0xac, 0x7d, 0x2b, 0x4b, 0x16, 0x2d, 0x3b, 0xb2, 0x1d, 0xcb, 0x32, 0x63, + 0x27, 0x8e, 0x93, 0xec, 0x3a, 0x0a, 0xbe, 0x08, 0x90, 0x6f, 0xdb, 0x40, 0x3f, 0x63, 0x05, 0x52, + 0xa2, 0x50, 0x76, 0x52, 0xb4, 0x08, 0xd8, 0x59, 0x72, 0x76, 0x77, 0x22, 0x2e, 0x87, 0xe2, 0x90, + 0x2b, 0x6f, 0x6f, 0x29, 0x7a, 0xc8, 0x2d, 0xbd, 0x14, 0x0d, 0x50, 0xf4, 0xd6, 0x5b, 0x2f, 0xed, + 0xad, 0x40, 0x0f, 0x45, 0x73, 0x69, 0x8e, 0x69, 0x4f, 0x41, 0x80, 0x06, 0x45, 0x7c, 0x69, 0xfb, + 0x2f, 0xf4, 0x52, 0xcc, 0x2f, 0x92, 0xfb, 0x7b, 0x57, 0x49, 0x90, 0xa2, 0xb7, 0xe5, 0xe3, 0xfb, + 0x35, 0x9f, 0x79, 0xef, 0xcd, 0x9b, 0xc7, 0x05, 0x8b, 0x04, 0xef, 0x61, 0x37, 0x26, 0x2d, 0x5c, + 0xc1, 0x8f, 0xdc, 0x06, 0x0a, 0xea, 0xb8, 0xd2, 0x5a, 0xab, 0xe0, 0x16, 0x0e, 0x62, 0x56, 0x0e, + 0x23, 0x1a, 0x53, 0xf3, 0x52, 0xca, 0x53, 0xd6, 0x3c, 0xe5, 0xd6, 0xda, 0xd5, 0xa5, 0x3a, 0xad, + 0x53, 0xc1, 0x51, 0xe1, 0xbf, 0x24, 0xf3, 0xd5, 0x15, 0x97, 0xb2, 0x26, 0x65, 0x95, 0x2a, 0x62, + 0xb8, 0xd2, 0x7a, 0xb1, 0x8a, 0x63, 0xf4, 0x62, 0xc5, 0xa5, 0x24, 0x50, 0xef, 0x6f, 0x67, 0x06, + 0x69, 0x84, 0x5c, 0x3f, 0x63, 0x92, 0x8f, 0x8a, 0xed, 0xd6, 0x00, 0xbf, 0xb4, 0x7d, 0xc9, 0x35, + 0xc0, 0xfb, 0x26, 0x8a, 0x8e, 0x70, 0xac, 0x78, 0x6e, 0xf6, 0xe7, 0xa1, 0x91, 0x87, 0x23, 0xc9, + 0x62, 0xfd, 0xd5, 0x80, 0x27, 0xb6, 0xf9, 0x8a, 0x37, 0x50, 0xec, 0x36, 0x0e, 0x43, 0x1a, 0x6f, + 0x3f, 0xc2, 0x6e, 0x12, 0x13, 0x1a, 0x98, 0xd7, 0xa0, 0x28, 0xd5, 0x39, 0xc4, 0x5b, 0x36, 0x56, + 0x8d, 0x3b, 0x45, 0x7b, 0x56, 0x12, 0x76, 0x3d, 0xf3, 0x12, 0xcc, 0x10, 0xe6, 0x54, 0x93, 0xf6, + 0x72, 0x61, 0xd5, 0xb8, 0x33, 0x6b, 0x9f, 0x25, 0x6c, 0x23, 0x69, 0x9b, 0xaf, 0xc3, 0x79, 0xac, + 0x15, 0x3c, 0x68, 0x87, 0x78, 0x79, 0x6a, 0xd5, 0xb8, 0x33, 0xbf, 0x76, 0xab, 0xdc, 0x17, 0xc8, + 0xf2, 0x76, 0x9e, 0xd7, 0xee, 0x14, 0x35, 0x5f, 0x86, 0x99, 0x38, 0x42, 0x1e, 0x66, 0xcb, 0xd3, + 0xab, 0x53, 0x77, 0x4a, 0x6b, 0x37, 0x06, 0x28, 0x79, 0xc0, 0x99, 0xf6, 0x68, 0xdd, 0x56, 0xec, + 0xd6, 0xdf, 0x0a, 0x70, 0x3d, 0x5b, 0xd4, 0x16, 0x8e, 0x48, 0x0b, 0x71, 0xa9, 0xaf, 0xb6, 0xb4, + 0xdb, 0x30, 0x4f, 0x98, 0xe3, 0x93, 0xe3, 0x84, 0x78, 0x88, 0x6b, 0x11, 0x6b, 0x9b, 0xb5, 0xcf, + 0x13, 0xb6, 0x97, 0x11, 0x4d, 0x1b, 0x4c, 0x37, 0x69, 0x26, 0xbe, 0xb0, 0xe8, 0xd4, 0x92, 0xc0, + 0x23, 0x41, 0x7d, 0x79, 0x9a, 0xdb, 0xd8, 0x78, 0xea, 0x93, 0x2f, 0x6e, 0x18, 0x9f, 0x7f, 0x71, + 0xe3, 0x9a, 0x8c, 0x14, 0xe6, 0x1d, 0x95, 0x09, 0xad, 0x34, 0x51, 0xdc, 0x28, 0xef, 0xe1, 0x3a, + 0x72, 0xdb, 0x5b, 0xd8, 0xb5, 0x17, 0x33, 0xf1, 0x1d, 0x29, 0xdd, 0x8b, 0xea, 0xd9, 0xd3, 0xa3, + 0xba, 0x9e, 0xa2, 0x3a, 0x23, 0x50, 0x7d, 0x76, 0x80, 0x92, 0x0c, 0xb6, 0x1e, 0x7c, 0x3f, 0xd6, + 0xf8, 0xee, 0x51, 0x16, 0x73, 0x1f, 0xd9, 0x4e, 0x44, 0x9b, 0x79, 0x10, 0x86, 0xe2, 0xfb, 0x14, + 0x9c, 0x67, 0x49, 0x15, 0xb9, 0x2e, 0x4d, 0x02, 0xc1, 0xc0, 0x61, 0x9e, 0xb3, 0xe7, 0x32, 0xe2, + 0xae, 0x67, 0x3e, 0x82, 0x67, 0x7c, 0xca, 0x62, 0x01, 0x20, 0x73, 0x6a, 0x11, 0x6d, 0x3a, 0xa8, + 0x85, 0x88, 0x8f, 0xaa, 0x3e, 0x76, 0xbc, 0x24, 0x22, 0x41, 0xdd, 0x09, 0x51, 0x9b, 0x26, 0xb1, + 0xd8, 0x06, 0x89, 0xed, 0x99, 0x51, 0xd8, 0x5a, 0x7e, 0xde, 0xe3, 0x75, 0xad, 0x70, 0x4b, 0xe8, + 0x3b, 0x10, 0xea, 0x4c, 0x0c, 0xd7, 0xbb, 0x2d, 0x8b, 0x8c, 0x71, 0x5c, 0x14, 0xb8, 0xd8, 0x67, + 0xb9, 0xbd, 0x1c, 0x69, 0xef, 0x4a, 0x87, 0xbd, 0x37, 0xb9, 0x9a, 0x4d, 0xa9, 0xc5, 0xfa, 0x87, + 0x01, 0x4f, 0xf7, 0x82, 0xb8, 0x19, 0x51, 0xc6, 0x0e, 0x28, 0xf5, 0xf3, 0x68, 0xf6, 0x00, 0x66, + 0xf4, 0x01, 0xec, 0x06, 0x94, 0x8e, 0x13, 0x1a, 0x63, 0xc7, 0xc3, 0x01, 0x6d, 0x0a, 0x4c, 0x8b, + 0x36, 0x08, 0xd2, 0x16, 0xa7, 0x7c, 0x7b, 0x88, 0x5a, 0x3f, 0x35, 0xe0, 0xc9, 0x7e, 0xf9, 0x78, + 0x40, 0x19, 0x19, 0x1d, 0x2e, 0xaf, 0x41, 0x31, 0x54, 0x8c, 0x6c, 0xb9, 0x30, 0x34, 0x66, 0x0f, + 0x53, 0x40, 0xb4, 0x6a, 0x3b, 0x93, 0xb5, 0xfe, 0x60, 0xc0, 0x35, 0xe1, 0x46, 0xe6, 0xc1, 0xbe, + 0x30, 0x72, 0x80, 0x12, 0x86, 0xbd, 0xe1, 0x5e, 0xdc, 0x84, 0x39, 0x86, 0xe3, 0xd8, 0xc7, 0x4e, + 0x18, 0x11, 0x17, 0x2b, 0x7c, 0x4b, 0x92, 0x76, 0xc0, 0x49, 0x66, 0x19, 0x2e, 0xc6, 0x34, 0x46, + 0xbe, 0xd3, 0x24, 0x8c, 0x71, 0x34, 0x05, 0xd2, 0x12, 0x4c, 0x7b, 0x51, 0xbc, 0xda, 0x97, 0x6f, + 0x04, 0x5e, 0xe6, 0xf3, 0x60, 0x76, 0x70, 0x3a, 0x11, 0x8a, 0xb1, 0x8c, 0x2e, 0xfb, 0x42, 0x33, + 0xc7, 0x69, 0xa3, 0x18, 0x5b, 0x07, 0x70, 0x45, 0x38, 0x7f, 0x28, 0x2c, 0x7a, 0xd2, 0xf3, 0x0d, + 0xe4, 0xf3, 0x70, 0x1a, 0xee, 0xfa, 0x65, 0x98, 0x41, 0x4d, 0x0e, 0x8a, 0x72, 0x5a, 0x3d, 0x59, + 0x87, 0x6a, 0x57, 0xde, 0xa0, 0x5f, 0xa3, 0xd2, 0x0f, 0x35, 0xc8, 0x4a, 0x17, 0x6e, 0xd3, 0xc0, + 0xdb, 0x40, 0xc1, 0x51, 0x94, 0x84, 0xb1, 0xdb, 0xfe, 0xca, 0x20, 0xdf, 0x83, 0x25, 0x0d, 0x9a, + 0xd2, 0x93, 0x47, 0x59, 0x03, 0x2a, 0x8d, 0x0b, 0xf0, 0xac, 0x0f, 0x0c, 0x58, 0x16, 0x1e, 0xad, + 0xfb, 0xbe, 0x0e, 0x0b, 0x76, 0x1f, 0x91, 0xc8, 0x4d, 0xe2, 0xaf, 0xec, 0x4e, 0xff, 0x3d, 0x9c, + 0x1a, 0xb0, 0x87, 0xef, 0xc1, 0x8a, 0xcc, 0x03, 0x12, 0xa0, 0xa8, 0xfd, 0x66, 0x28, 0x5c, 0x91, + 0xbe, 0x3e, 0x0c, 0x3d, 0x14, 0x63, 0xf3, 0x3e, 0xcc, 0x48, 0xf3, 0xc2, 0x99, 0xd2, 0xda, 0xdd, + 0x01, 0x91, 0xde, 0x47, 0xc3, 0xc6, 0x34, 0xcf, 0x57, 0x5b, 0xc9, 0x5b, 0xde, 0x80, 0x60, 0x57, + 0x86, 0xb6, 0xbb, 0x0c, 0x3d, 0x33, 0xf2, 0x18, 0xe8, 0x6b, 0xe5, 0x8f, 0x06, 0x98, 0x32, 0x88, + 0xf0, 0x09, 0xef, 0x1e, 0x44, 0x89, 0x63, 0xc3, 0x61, 0xdd, 0x02, 0xa8, 0x26, 0x6d, 0x59, 0x54, + 0x75, 0x46, 0xdf, 0x1e, 0x94, 0xd1, 0x21, 0x8d, 0xf7, 0x48, 0x93, 0x48, 0xc5, 0x76, 0xb1, 0x9a, + 0xb4, 0x95, 0x89, 0x1d, 0x28, 0x31, 0xec, 0xfb, 0x5a, 0xcd, 0xd4, 0x24, 0x6a, 0x80, 0x4b, 0x4a, + 0x3d, 0xd6, 0x5f, 0x74, 0x78, 0xbc, 0x81, 0x4f, 0xb2, 0xc5, 0x8e, 0xb3, 0x8e, 0xd7, 0xfb, 0xac, + 0xe3, 0xb9, 0x91, 0x30, 0xf6, 0x5f, 0xcd, 0x5e, 0xbf, 0xd5, 0x4c, 0xa4, 0x2c, 0xbf, 0xa6, 0x16, + 0x2c, 0x89, 0x25, 0xc9, 0xb3, 0x26, 0xdd, 0x97, 0xe1, 0xcb, 0x59, 0x87, 0xb3, 0xc2, 0xba, 0x08, + 0xf3, 0x71, 0xa1, 0x54, 0xe1, 0x20, 0x25, 0xad, 0xef, 0xc3, 0x25, 0x59, 0xa3, 0x42, 0x1a, 0x77, + 0x44, 0xdb, 0xab, 0x5d, 0xd1, 0x76, 0x73, 0x88, 0xf2, 0xbe, 0x71, 0xf6, 0x51, 0x01, 0xae, 0x0a, + 0xd5, 0x07, 0x38, 0x0a, 0x71, 0x9c, 0x20, 0xff, 0x1b, 0x88, 0x66, 0xd3, 0x83, 0x4b, 0xa1, 0xd6, + 0xaf, 0xcb, 0x0b, 0x09, 0x6a, 0x54, 0x41, 0x32, 0x28, 0x19, 0xbb, 0x7c, 0xda, 0x0d, 0x6a, 0x54, + 0x28, 0x36, 0xec, 0x8b, 0x61, 0xef, 0x2b, 0x73, 0x1f, 0xce, 0xe9, 0xb6, 0x70, 0x4a, 0xe8, 0x7d, + 0x61, 0x3c, 0xbd, 0xaa, 0x1b, 0x54, 0xaa, 0xb5, 0x0e, 0xeb, 0x73, 0x43, 0x55, 0x95, 0xed, 0x47, + 0x21, 0x89, 0xda, 0x3b, 0x49, 0x9c, 0x44, 0x98, 0x7d, 0x13, 0xf0, 0x1c, 0xc3, 0x55, 0x2c, 0x6c, + 0x38, 0x35, 0x69, 0xa4, 0x03, 0x23, 0xb9, 0x96, 0xf2, 0xc0, 0x9e, 0xb4, 0xc7, 0xb9, 0x1c, 0x4e, + 0x4f, 0xe0, 0xfe, 0xaf, 0xad, 0x3f, 0x17, 0xe0, 0x66, 0xbf, 0x7d, 0x57, 0x58, 0xa8, 0xf5, 0x0d, + 0x8d, 0xeb, 0x1c, 0xdc, 0x85, 0xd3, 0xc2, 0x7d, 0x26, 0x85, 0xdb, 0xbc, 0x0b, 0x8b, 0x84, 0x39, + 0x0d, 0x9a, 0x44, 0x7e, 0xdb, 0xc9, 0xef, 0xe3, 0xac, 0xbd, 0x40, 0xd8, 0x7d, 0x41, 0xd7, 0x7d, + 0xfb, 0x0e, 0xcc, 0x29, 0x8e, 0xdc, 0xd9, 0x3e, 0xde, 0x2d, 0xa0, 0xa4, 0x04, 0xf9, 0xb9, 0x61, + 0x6e, 0x00, 0xf0, 0xe5, 0xa8, 0x63, 0xe8, 0xec, 0xf8, 0x5a, 0x04, 0x2c, 0xe2, 0xa4, 0xb2, 0x7e, + 0x61, 0xc0, 0x65, 0x99, 0x9c, 0x69, 0x93, 0xb4, 0x85, 0x45, 0x73, 0xc4, 0x5b, 0x47, 0x16, 0xb9, + 0x0e, 0xf2, 0xbc, 0x08, 0x33, 0xa6, 0x00, 0x04, 0x16, 0xb9, 0xeb, 0x92, 0x32, 0x5e, 0xc7, 0xfe, + 0x72, 0xda, 0x11, 0xc8, 0x48, 0xb8, 0x52, 0x96, 0x9e, 0x95, 0xf9, 0x7d, 0xb8, 0xac, 0xae, 0xba, + 0xe5, 0x4d, 0x4a, 0x02, 0x1d, 0x56, 0xaa, 0x65, 0xf8, 0x48, 0xdf, 0x41, 0x33, 0xcf, 0xde, 0x21, + 0x71, 0xc3, 0x8b, 0xd0, 0xc9, 0xd8, 0xad, 0xaf, 0xc7, 0xe2, 0xd4, 0x7f, 0xd5, 0xfa, 0x7a, 0x2c, + 0xd6, 0xfe, 0x9f, 0xda, 0xb5, 0xdf, 0xe9, 0xdc, 0xca, 0x5c, 0x53, 0xdd, 0xd1, 0x83, 0x08, 0x05, + 0xac, 0x86, 0x23, 0x1e, 0x0f, 0x1c, 0xbc, 0x5e, 0x2f, 0x8b, 0xf6, 0x02, 0x8b, 0xdc, 0xc3, 0xbc, + 0xa3, 0x77, 0x61, 0x91, 0x3b, 0xda, 0x8b, 0x65, 0xd1, 0x5e, 0xf0, 0x58, 0x7c, 0xf8, 0xb5, 0xc0, + 0xf9, 0x4b, 0x9d, 0x32, 0x99, 0x3a, 0x9b, 0xb0, 0xa3, 0x83, 0x88, 0xd6, 0x88, 0x8f, 0x65, 0xc6, + 0x78, 0xfd, 0x81, 0x2d, 0x76, 0x01, 0xfb, 0x2e, 0x5c, 0x08, 0x23, 0xdc, 0x22, 0x34, 0x61, 0x4e, + 0x28, 0xe5, 0x55, 0x0e, 0x3d, 0x3f, 0xb2, 0x03, 0xcf, 0xd9, 0x54, 0x0e, 0x2e, 0x68, 0x5d, 0x8a, + 0x6c, 0x1e, 0x42, 0x29, 0xc0, 0x27, 0xa9, 0xe6, 0xa9, 0x53, 0x6b, 0x86, 0x00, 0x9f, 0x68, 0xa5, + 0xd7, 0x01, 0x08, 0x73, 0x3c, 0x5c, 0x43, 0x89, 0x1f, 0x8b, 0x8c, 0x9b, 0xb5, 0x8b, 0x84, 0x6d, + 0x49, 0x82, 0xf5, 0x2f, 0x03, 0x6e, 0x75, 0xa1, 0x23, 0xd3, 0x9d, 0x6b, 0xdd, 0xa7, 0xde, 0x64, + 0x00, 0x75, 0x14, 0x9e, 0x42, 0x4f, 0x9f, 0x73, 0x3e, 0x45, 0xaf, 0x49, 0x3d, 0x3d, 0x0b, 0x19, + 0x34, 0xc6, 0xd0, 0x0e, 0xd8, 0x73, 0x5a, 0x8a, 0x3f, 0x99, 0xaf, 0xc0, 0x2c, 0x07, 0x49, 0x28, + 0x98, 0x1e, 0x4f, 0xc1, 0xb9, 0x00, 0x9f, 0xf0, 0x1f, 0x56, 0x23, 0x3f, 0xdc, 0x51, 0xd9, 0xae, + 0x4a, 0xe6, 0x3e, 0x2c, 0x78, 0x92, 0xe0, 0x24, 0x82, 0xc2, 0xf3, 0x9e, 0x37, 0x1d, 0xb7, 0x06, + 0x9e, 0x0d, 0x39, 0x71, 0x7b, 0xde, 0xcb, 0x3f, 0x32, 0xeb, 0x63, 0x03, 0xae, 0x75, 0x9f, 0x1e, + 0xb9, 0xeb, 0xae, 0xf9, 0x10, 0xe6, 0x14, 0x50, 0xb2, 0xc7, 0x30, 0x86, 0xee, 0x75, 0x5f, 0x4d, + 0xea, 0xa8, 0x28, 0x35, 0x33, 0x92, 0xb9, 0x07, 0x0b, 0xf2, 0x56, 0xee, 0x1c, 0x27, 0x28, 0x88, + 0x49, 0x2c, 0x67, 0x36, 0x63, 0xde, 0x5d, 0xe7, 0xa5, 0xec, 0x5b, 0x4a, 0xd4, 0xfa, 0x95, 0x6e, + 0x32, 0xa4, 0xd3, 0x5d, 0xdd, 0xe0, 0xf0, 0x53, 0xe6, 0x16, 0x88, 0x39, 0x50, 0x93, 0x28, 0x61, + 0x35, 0x3b, 0xea, 0x24, 0x9a, 0x36, 0x94, 0x7c, 0xfe, 0xa8, 0x50, 0x90, 0x11, 0x3f, 0x49, 0x9b, + 0xa7, 0x40, 0x00, 0x3f, 0xa5, 0x98, 0x0d, 0xb8, 0x98, 0x87, 0x56, 0x8d, 0x29, 0x44, 0xac, 0x94, + 0xd6, 0xd6, 0x26, 0x41, 0x58, 0x3a, 0xa9, 0x4c, 0x2c, 0x36, 0xbb, 0x5f, 0x58, 0x55, 0xd5, 0x29, + 0xef, 0x60, 0xbc, 0x45, 0x98, 0xc8, 0x81, 0x43, 0xb7, 0x81, 0xbd, 0xc4, 0xc7, 0xe6, 0x0e, 0xcc, + 0x32, 0xf5, 0x7b, 0xc4, 0xd5, 0xa5, 0x8f, 0xb4, 0x9d, 0xca, 0x5a, 0x9f, 0x19, 0xb0, 0x2a, 0x8c, + 0x3c, 0x88, 0x90, 0x38, 0xff, 0xf0, 0x09, 0x8a, 0xbc, 0x4d, 0xd4, 0x0c, 0x11, 0xa9, 0x07, 0x2a, + 0x78, 0x1f, 0xc2, 0x79, 0x57, 0x51, 0x64, 0xef, 0x21, 0x2d, 0xde, 0x1b, 0x32, 0x20, 0xec, 0x51, + 0xc5, 0xdb, 0x0b, 0x7b, 0xce, 0xcd, 0x3d, 0x99, 0xef, 0xc2, 0xa5, 0x54, 0x6d, 0x24, 0x98, 0x9d, + 0x90, 0x52, 0x7f, 0xd4, 0xd4, 0x41, 0x6b, 0x94, 0xfa, 0x0f, 0x28, 0xf5, 0xed, 0x8b, 0x6e, 0x0f, + 0x8d, 0x59, 0xa1, 0x3a, 0x4b, 0x3a, 0xdc, 0xd9, 0x22, 0x2c, 0x8e, 0x48, 0x55, 0x8e, 0x25, 0xdf, + 0x80, 0x05, 0x5d, 0x70, 0xa4, 0x7d, 0x9d, 0x94, 0x83, 0x9a, 0xf1, 0x75, 0x55, 0x11, 0x25, 0xb3, + 0x3d, 0x8f, 0x3a, 0x9e, 0xad, 0xdf, 0x1a, 0x60, 0xe9, 0xbb, 0xcd, 0x26, 0x0d, 0x3c, 0x71, 0xf7, + 0x45, 0x93, 0x05, 0xf6, 0x77, 0x3a, 0xaf, 0x05, 0x4f, 0x8f, 0x0c, 0x28, 0x79, 0x1d, 0x91, 0x42, + 0xa6, 0x09, 0xd3, 0x0d, 0xc4, 0x1a, 0x22, 0xd2, 0xe7, 0x6c, 0xf1, 0x9b, 0x9b, 0x23, 0xba, 0x75, + 0x54, 0x05, 0x7a, 0x96, 0xa8, 0xa6, 0xcf, 0xfa, 0x79, 0x01, 0x6e, 0xe7, 0x72, 0xf0, 0xb4, 0x5e, + 0x7f, 0x7b, 0xe9, 0xd8, 0x5d, 0xe9, 0xa6, 0xbf, 0x96, 0x4a, 0x67, 0xfd, 0x5b, 0x8f, 0x0b, 0x07, + 0x23, 0xf2, 0x20, 0x22, 0xf5, 0x7a, 0x3f, 0x60, 0xe6, 0x72, 0xc0, 0x3c, 0x0d, 0xf3, 0x0a, 0x03, + 0xc5, 0xae, 0x90, 0xe9, 0xa2, 0x9a, 0xf7, 0x60, 0x29, 0x96, 0x3f, 0xb1, 0xa7, 0x0a, 0x4b, 0x6e, + 0x23, 0xcd, 0xf4, 0x9d, 0xb0, 0x7c, 0x9f, 0x6f, 0xeb, 0x5d, 0x58, 0x0c, 0x7d, 0xe4, 0x76, 0xb2, + 0x4f, 0x0b, 0xf6, 0x05, 0xf9, 0x22, 0xe3, 0x2d, 0xc3, 0xc5, 0x6e, 0xed, 0x2e, 0xf1, 0x64, 0x67, + 0x6b, 0x2f, 0x76, 0x2a, 0xdf, 0x24, 0x9e, 0xe5, 0xc3, 0xbc, 0x58, 0xbc, 0x20, 0xec, 0x20, 0xe2, + 0x9b, 0xcb, 0x70, 0x4e, 0x05, 0xbb, 0x5a, 0xa2, 0x7e, 0x34, 0x2f, 0xc3, 0x0c, 0x37, 0x8d, 0x65, + 0xda, 0xce, 0xd9, 0xea, 0xc9, 0x5c, 0x82, 0xb3, 0x35, 0x1f, 0xd5, 0xe5, 0xe5, 0xfa, 0xbc, 0x2d, + 0x1f, 0x78, 0x80, 0xba, 0xc4, 0x93, 0x9f, 0x18, 0x8a, 0xb6, 0xf8, 0x6d, 0x7d, 0x68, 0xc0, 0x73, + 0x72, 0x62, 0x14, 0xd3, 0x26, 0x71, 0x73, 0x3b, 0xb3, 0x83, 0xf1, 0x7e, 0xe2, 0xc7, 0x24, 0xf4, + 0x09, 0x8e, 0x98, 0x6e, 0x15, 0x7e, 0x04, 0x97, 0xf5, 0x2c, 0x0a, 0x63, 0xa7, 0x99, 0x31, 0xa8, + 0xec, 0x1d, 0x54, 0x09, 0xd5, 0x3d, 0x23, 0xaf, 0xd3, 0x5e, 0x6a, 0xf6, 0x12, 0x99, 0xf5, 0x7b, + 0x43, 0xdd, 0xe8, 0x85, 0x17, 0x55, 0x4a, 0x8f, 0x54, 0x25, 0xdc, 0x85, 0x39, 0x16, 0xd2, 0xee, + 0x33, 0x7c, 0x50, 0x92, 0x76, 0x49, 0xdb, 0x25, 0x2e, 0xab, 0x8e, 0x70, 0xf3, 0x21, 0x98, 0x5e, + 0x1a, 0x50, 0xa9, 0xc2, 0xc2, 0x44, 0x0a, 0x17, 0x33, 0x0d, 0xba, 0x33, 0x70, 0x61, 0xa1, 0xdb, + 0xe9, 0x0b, 0x30, 0xc5, 0xf0, 0xb1, 0xd8, 0xb7, 0x69, 0x9b, 0xff, 0x34, 0xbf, 0x07, 0x45, 0xaa, + 0x99, 0x54, 0xa1, 0x59, 0x1d, 0x65, 0xd2, 0xce, 0x44, 0xac, 0x5f, 0x1b, 0x50, 0x4c, 0x5f, 0x0c, + 0x4f, 0x80, 0xff, 0x97, 0x53, 0x1b, 0x1f, 0xb7, 0x70, 0x5a, 0xd9, 0x9f, 0x1c, 0x60, 0x6b, 0x8f, + 0x33, 0x89, 0x31, 0x8d, 0xf8, 0xc5, 0xcc, 0xef, 0xaa, 0x31, 0x8d, 0x92, 0x9e, 0x1a, 0x43, 0x5a, + 0xcc, 0x65, 0xa4, 0xb8, 0x75, 0xa2, 0x0e, 0xd0, 0xd7, 0x22, 0x14, 0xc4, 0xeb, 0x49, 0xdc, 0xa0, + 0x11, 0xf9, 0xb1, 0x98, 0xf1, 0x33, 0x1e, 0xd0, 0x75, 0x4e, 0x56, 0xcd, 0x51, 0xd1, 0xd6, 0x8f, + 0xe6, 0x3a, 0xcc, 0x88, 0x9f, 0xa3, 0xce, 0xa1, 0x5e, 0xad, 0xb6, 0x12, 0xb4, 0xde, 0xd7, 0xf1, + 0x23, 0x79, 0xb8, 0xac, 0xfc, 0xb4, 0x90, 0x5a, 0xc5, 0x9d, 0x56, 0x71, 0xde, 0x9f, 0x42, 0xa7, + 0x3f, 0xff, 0xd7, 0x71, 0x33, 0x29, 0x6e, 0x5c, 0x57, 0xbd, 0xd6, 0xa5, 0xde, 0x5e, 0x6b, 0x37, + 0x88, 0xd3, 0x7b, 0xc9, 0x6b, 0xb0, 0x28, 0x5c, 0xd8, 0x0d, 0x5a, 0xc8, 0x27, 0x9e, 0xf0, 0xe4, + 0x34, 0xf6, 0xad, 0xdf, 0x74, 0x24, 0x83, 0x2c, 0xe5, 0xa2, 0x26, 0x4c, 0xfe, 0xd5, 0xa9, 0xbb, + 0x9f, 0xbf, 0x0e, 0xd0, 0x55, 0xeb, 0x8a, 0x2a, 0xcc, 0x44, 0xd9, 0xba, 0x00, 0x53, 0xbc, 0x4c, + 0xc9, 0x11, 0x3d, 0xff, 0x69, 0xae, 0x42, 0xc9, 0xc3, 0xcc, 0x8d, 0x88, 0x98, 0xc4, 0xaa, 0x02, + 0x96, 0x27, 0xf1, 0xc2, 0xbd, 0xda, 0x35, 0x88, 0x95, 0x53, 0xba, 0xb7, 0xd7, 0xf6, 0x49, 0x3d, + 0x1a, 0xe3, 0x7b, 0xd9, 0x0f, 0x61, 0x31, 0x9d, 0x33, 0x3a, 0x72, 0xbb, 0x75, 0x28, 0x54, 0xc6, + 0x3b, 0x8d, 0xdf, 0x5e, 0xdb, 0x94, 0x62, 0xf6, 0x82, 0x1e, 0x39, 0x2a, 0x82, 0xf9, 0x2e, 0x98, + 0xd9, 0xe0, 0x31, 0xd5, 0x3e, 0x75, 0x3a, 0xed, 0x17, 0xd2, 0x19, 0xa4, 0xa2, 0x58, 0x7f, 0x2a, + 0xc0, 0xf2, 0x20, 0x76, 0x0d, 0xa7, 0x91, 0xc1, 0xa9, 0xdb, 0x85, 0x42, 0xae, 0x5d, 0x78, 0x11, + 0x8c, 0x70, 0x92, 0x2f, 0x52, 0x46, 0xc8, 0x45, 0x8e, 0x27, 0xf9, 0x4c, 0x67, 0x1c, 0x73, 0x91, + 0x66, 0x6e, 0xb2, 0x32, 0x5a, 0xa4, 0xc9, 0x45, 0x6a, 0xcb, 0x33, 0x13, 0x88, 0xd4, 0xcc, 0x97, + 0xa0, 0x10, 0x87, 0xcb, 0xe7, 0xc6, 0x1f, 0xe0, 0x14, 0xe2, 0xd0, 0xfa, 0xa7, 0xa1, 0xae, 0x25, + 0xd9, 0x80, 0x7d, 0xec, 0xd8, 0x79, 0x38, 0x38, 0x76, 0x9e, 0x1d, 0x32, 0x83, 0x1d, 0x15, 0x35, + 0xef, 0x0c, 0x89, 0x9a, 0x09, 0xf4, 0xf6, 0xc6, 0xcb, 0x4f, 0x0a, 0x70, 0x47, 0x35, 0xc9, 0xa2, + 0x07, 0xc8, 0x75, 0x3b, 0xf9, 0x63, 0x18, 0x11, 0x7f, 0xd4, 0x07, 0xbb, 0xb1, 0xf2, 0xbd, 0x73, + 0xb0, 0x36, 0x41, 0x90, 0x65, 0x83, 0xb5, 0xae, 0x9a, 0x21, 0x1b, 0x9e, 0x5c, 0xcd, 0xb8, 0x01, + 0x25, 0xd5, 0xcf, 0x38, 0x38, 0x8a, 0x54, 0x85, 0x00, 0x45, 0xda, 0x8e, 0x22, 0x9d, 0x05, 0x33, + 0x69, 0x16, 0x58, 0xef, 0x17, 0xe0, 0x99, 0x01, 0x20, 0x64, 0xad, 0xe7, 0xff, 0x38, 0x06, 0x1f, + 0x14, 0xc0, 0xec, 0x8d, 0x98, 0xff, 0xb6, 0x92, 0x51, 0x9b, 0xa8, 0x64, 0xe8, 0xfc, 0x9f, 0x99, + 0x2c, 0xff, 0x8f, 0xd4, 0x25, 0xae, 0xf7, 0xc3, 0x79, 0xbe, 0x0c, 0x6c, 0xc3, 0xac, 0xfe, 0xd4, + 0xad, 0xae, 0xc3, 0xa3, 0xff, 0xd9, 0x91, 0x7e, 0x25, 0x4f, 0x45, 0xad, 0xc7, 0x86, 0xfa, 0x86, + 0xa3, 0xdf, 0xa5, 0x83, 0xce, 0xa1, 0x91, 0x76, 0x0f, 0x96, 0x18, 0x4d, 0x22, 0x17, 0xf7, 0x1d, + 0x6e, 0x9a, 0xf2, 0x5d, 0xc7, 0x7c, 0xf3, 0x15, 0xb8, 0xe2, 0x61, 0x16, 0x93, 0x40, 0xb8, 0xdf, + 0x25, 0x26, 0x4f, 0xde, 0x27, 0x72, 0x0c, 0x1d, 0xb2, 0xaf, 0xc2, 0x6c, 0x3a, 0xef, 0x99, 0x60, + 0xcf, 0x52, 0xa1, 0x8d, 0xa3, 0x4f, 0xbe, 0x5c, 0x31, 0x3e, 0xfd, 0x72, 0xc5, 0xf8, 0xfb, 0x97, + 0x2b, 0xc6, 0xcf, 0x1e, 0xaf, 0x9c, 0xf9, 0xf4, 0xf1, 0xca, 0x99, 0xcf, 0x1e, 0xaf, 0x9c, 0xf9, + 0xc1, 0x5b, 0x75, 0x12, 0x37, 0x92, 0x6a, 0xd9, 0xa5, 0xcd, 0xca, 0xae, 0x86, 0x6f, 0x0f, 0x55, + 0x59, 0x25, 0x05, 0xf3, 0x05, 0x97, 0x46, 0x38, 0xff, 0xd8, 0x40, 0x24, 0xa8, 0x34, 0xa9, 0x97, + 0xf8, 0x98, 0x65, 0xff, 0xb4, 0x8a, 0xdb, 0x21, 0x66, 0x95, 0xd6, 0x5a, 0x75, 0x46, 0xfc, 0xd5, + 0xea, 0xa5, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff, 0x6b, 0xcf, 0x2f, 0x2a, 0x71, 0x26, 0x00, 0x00, } func (m *EventBatchSpotExecution) Marshal() (dAtA []byte, err error) { @@ -4235,6 +4309,53 @@ func (m *EventSubaccountRiskProfileUpdated) MarshalToSizedBuffer(dAtA []byte) (i return len(dAtA) - i, nil } +func (m *EventSubaccountMarketRiskModeUpdated) 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 *EventSubaccountMarketRiskModeUpdated) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *EventSubaccountMarketRiskModeUpdated) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.NewMode != 0 { + i = encodeVarintEvents(dAtA, i, uint64(m.NewMode)) + i-- + dAtA[i] = 0x20 + } + if m.PreviousMode != 0 { + i = encodeVarintEvents(dAtA, i, uint64(m.PreviousMode)) + i-- + dAtA[i] = 0x18 + } + if len(m.MarketId) > 0 { + i -= len(m.MarketId) + copy(dAtA[i:], m.MarketId) + i = encodeVarintEvents(dAtA, i, uint64(len(m.MarketId))) + i-- + dAtA[i] = 0x12 + } + if len(m.SubaccountId) > 0 { + i -= len(m.SubaccountId) + copy(dAtA[i:], m.SubaccountId) + i = encodeVarintEvents(dAtA, i, uint64(len(m.SubaccountId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func (m *EventBatchDepositUpdate) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -6096,6 +6217,29 @@ func (m *EventSubaccountRiskProfileUpdated) Size() (n int) { return n } +func (m *EventSubaccountMarketRiskModeUpdated) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.SubaccountId) + if l > 0 { + n += 1 + l + sovEvents(uint64(l)) + } + l = len(m.MarketId) + if l > 0 { + n += 1 + l + sovEvents(uint64(l)) + } + if m.PreviousMode != 0 { + n += 1 + sovEvents(uint64(m.PreviousMode)) + } + if m.NewMode != 0 { + n += 1 + sovEvents(uint64(m.NewMode)) + } + return n +} + func (m *EventBatchDepositUpdate) Size() (n int) { if m == nil { return 0 @@ -9948,6 +10092,158 @@ func (m *EventSubaccountRiskProfileUpdated) Unmarshal(dAtA []byte) error { } return nil } +func (m *EventSubaccountMarketRiskModeUpdated) 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 ErrIntOverflowEvents + } + 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: EventSubaccountMarketRiskModeUpdated: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: EventSubaccountMarketRiskModeUpdated: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SubaccountId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + 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 ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SubaccountId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MarketId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + 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 ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.MarketId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PreviousMode", wireType) + } + m.PreviousMode = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.PreviousMode |= RiskMode(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field NewMode", wireType) + } + m.NewMode = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.NewMode |= RiskMode(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipEvents(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthEvents + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *EventBatchDepositUpdate) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/chain/exchange/types/v2/exchange.pb.go b/chain/exchange/types/v2/exchange.pb.go index fb2aea0d3..1d766a85d 100644 --- a/chain/exchange/types/v2/exchange.pb.go +++ b/chain/exchange/types/v2/exchange.pb.go @@ -484,32 +484,72 @@ func (m *Params) GetCrossMarginParams() CrossMarginParams { } type CrossMarginParams struct { - // positive_upnl_haircut_rate defines the haircut applied to - // positive unrealized PnL for cross-margin admission checks. + // positive_upnl_haircut_rate defines the haircut applied to positive + // unrealized PnL for cross-margin admission checks. PositiveUpnlHaircutRate cosmossdk_io_math.LegacyDec `protobuf:"bytes,1,opt,name=positive_upnl_haircut_rate,json=positiveUpnlHaircutRate,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"positive_upnl_haircut_rate"` - // fees_buffer defines a fixed notional buffer (quote-denom - // units) subtracted from cross-margin equity calculations. + // fees_buffer defines a fixed notional buffer (quote-denom units) + // subtracted from cross-margin equity calculations. FeesBuffer cosmossdk_io_math.LegacyDec `protobuf:"bytes,2,opt,name=fees_buffer,json=feesBuffer,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"fees_buffer"` - // enabled_quote_denoms defines the quote denoms that are - // eligible for cross-margin pools. + // enabled_quote_denoms defines the quote denoms that are eligible for + // cross-margin pools. EnabledQuoteDenoms []string `protobuf:"bytes,3,rep,name=enabled_quote_denoms,json=enabledQuoteDenoms,proto3" json:"enabled_quote_denoms,omitempty"` - // perpetual_enabled defines whether perpetual derivative markets - // are eligible for cross margin. + // perpetual_enabled defines whether perpetual derivative markets are + // eligible for cross margin. PerpetualEnabled bool `protobuf:"varint,4,opt,name=perpetual_enabled,json=perpetualEnabled,proto3" json:"perpetual_enabled,omitempty"` - // expiry_enabled defines whether expiry futures derivative - // markets are eligible for cross margin. + // expiry_enabled defines whether expiry futures derivative markets are + // eligible for cross margin. ExpiryEnabled bool `protobuf:"varint,5,opt,name=expiry_enabled,json=expiryEnabled,proto3" json:"expiry_enabled,omitempty"` - // max_active_derivative_markets_per_pool defines the maximum - // number of active derivative markets (positions or orders) a cross-margin + // max_active_derivative_markets_per_pool defines the maximum number of + // active derivative markets (positions or orders) a cross-margin // subaccount may have within a single quote-denom pool. MaxActiveDerivativeMarketsPerPool uint32 `protobuf:"varint,6,opt,name=max_active_derivative_markets_per_pool,json=maxActiveDerivativeMarketsPerPool,proto3" json:"max_active_derivative_markets_per_pool,omitempty"` - // emergency_paused defines whether cross margin is in emergency - // pause mode. When true: - // - All cross-margin orders (including reduce-only) are blocked - // - Profile switching involving cross mode is blocked - // - Liquidations are still allowed - // - Withdrawals are allowed up to isolated-margin maintenance level + // emergency_paused defines whether cross margin is in emergency pause + // mode. When true: + // - User-submitted cross-margin orders (derivative + spot, limit / market + // / conditional, reduce-only included) are rejected at validation. + // - Paused resting makers are inert: every matcher and TOB scan skips + // them uniformly, including against system-generated liquidation + // taker orders. + // - Liquidation of paused pools is still permitted; system taker orders + // close positions against non-paused liquidity or defer to settlement. + // - Collateral-decreasing operations (withdrawals, transfers, margin + // decrease) remain subject to the marker-aware admission floor with + // positive UPnL stripped first, NOT to a flat isolated-margin + // maintenance level. EmergencyPaused bool `protobuf:"varint,7,opt,name=emergency_paused,json=emergencyPaused,proto3" json:"emergency_paused,omitempty"` + // backstop_margin_ratio defines the target health buffer above + // maintenance margin for graduated liquidation. Liquidation stops when + // EquityLiquidation >= MM * (1 + ratio). + BackstopMarginRatio cosmossdk_io_math.LegacyDec `protobuf:"bytes,8,opt,name=backstop_margin_ratio,json=backstopMarginRatio,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"backstop_margin_ratio"` + // partial_liquidation_ratio is the fraction of the shortfall to target + // per liquidation tx. 1.0 = close enough to fully restore health; <1.0 + // = close only a fraction per tx. + PartialLiquidationRatio cosmossdk_io_math.LegacyDec `protobuf:"bytes,9,opt,name=partial_liquidation_ratio,json=partialLiquidationRatio,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"partial_liquidation_ratio"` + // liquidation_cooldown_blocks is the minimum number of blocks between + // successive partial liquidations on the same cross-margin pool. + LiquidationCooldownBlocks uint64 `protobuf:"varint,10,opt,name=liquidation_cooldown_blocks,json=liquidationCooldownBlocks,proto3" json:"liquidation_cooldown_blocks,omitempty"` + // max_cross_margin_spot_orders_per_subaccount_per_denom caps the number of + // open spot orders (resting limit + transient limit + transient market) + // that a cross-margin-mode subaccount may hold for any single locking + // denom. The cap protocol-bounds spot cancel-first work performed during + // cross-margin pool liquidation so the validator-work amplifier under fixed + // gas is bounded by a numeric protocol limit rather than only by fixed + // tx-level pricing. Enforcement + // applies only when the effective subaccount risk profile is RISK_MODE_CROSS; + // isolated-mode subaccounts are unaffected. + MaxCrossMarginSpotOrdersPerSubaccountPerDenom uint32 `protobuf:"varint,13,opt,name=max_cross_margin_spot_orders_per_subaccount_per_denom,json=maxCrossMarginSpotOrdersPerSubaccountPerDenom,proto3" json:"max_cross_margin_spot_orders_per_subaccount_per_denom,omitempty"` + // util_ratio defines the multiplier applied to the cash-floor admission + // check: util_ratio * (QuoteBalance + PositionMarginTotal - ratcheted MM). + // It must be in [0, 1]. 1.0 applies no extra utilization haircut; 0 disables + // new risk-increasing cross-margin orders. + UtilRatio cosmossdk_io_math.LegacyDec `protobuf:"bytes,14,opt,name=util_ratio,json=utilRatio,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"util_ratio"` + // max_isolated_active_derivative_markets_per_subaccount_per_denom bounds how + // many isolated-mode derivative markets a subaccount with cross-margin + // exposure may be active in per quote denom. Pool walks skip isolated-mode + // markets, so this cap bounds the walk work an account can force on pool + // builds and liquidation sweeps. Zero-cost for accounts without cross + // exposure. + MaxIsolatedActiveDerivativeMarketsPerSubaccountPerDenom uint32 `protobuf:"varint,15,opt,name=max_isolated_active_derivative_markets_per_subaccount_per_denom,json=maxIsolatedActiveDerivativeMarketsPerSubaccountPerDenom,proto3" json:"max_isolated_active_derivative_markets_per_subaccount_per_denom,omitempty"` } func (m *CrossMarginParams) Reset() { *m = CrossMarginParams{} } @@ -580,6 +620,27 @@ func (m *CrossMarginParams) GetEmergencyPaused() bool { return false } +func (m *CrossMarginParams) GetLiquidationCooldownBlocks() uint64 { + if m != nil { + return m.LiquidationCooldownBlocks + } + return 0 +} + +func (m *CrossMarginParams) GetMaxCrossMarginSpotOrdersPerSubaccountPerDenom() uint32 { + if m != nil { + return m.MaxCrossMarginSpotOrdersPerSubaccountPerDenom + } + return 0 +} + +func (m *CrossMarginParams) GetMaxIsolatedActiveDerivativeMarketsPerSubaccountPerDenom() uint32 { + if m != nil { + return m.MaxIsolatedActiveDerivativeMarketsPerSubaccountPerDenom + } + return 0 +} + type NextFundingTimestamp struct { NextTimestamp int64 `protobuf:"varint,1,opt,name=next_timestamp,json=nextTimestamp,proto3" json:"next_timestamp,omitempty"` } @@ -2519,240 +2580,250 @@ func init() { } var fileDescriptor_0b5851fb01a33564 = []byte{ - // 3718 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x5a, 0xcd, 0x6f, 0x24, 0x49, - 0x56, 0xef, 0x74, 0xf9, 0xa3, 0xfc, 0xec, 0xb2, 0xcb, 0xe1, 0xaf, 0x72, 0xb7, 0xdb, 0x76, 0x67, - 0x77, 0x4f, 0x7b, 0x7b, 0x76, 0xec, 0xed, 0x1e, 0xcd, 0x6a, 0xe8, 0xe1, 0xab, 0xec, 0xb2, 0xa7, - 0x6b, 0xa7, 0xdc, 0xf6, 0x64, 0xb9, 0x1b, 0xd8, 0x15, 0x93, 0x84, 0x33, 0xa3, 0xaa, 0x62, 0x9c, - 0x5f, 0xce, 0x88, 0xf2, 0xd8, 0x7c, 0x1c, 0x90, 0x56, 0x02, 0x2d, 0x97, 0x85, 0x03, 0x07, 0xc4, - 0xa2, 0x39, 0x80, 0x90, 0x38, 0x71, 0xe0, 0xc8, 0x01, 0x09, 0xad, 0x34, 0x12, 0x20, 0xad, 0x38, - 0x20, 0xc4, 0x61, 0x41, 0x33, 0x07, 0x56, 0x9c, 0xf9, 0x03, 0x50, 0x7c, 0x64, 0x66, 0x55, 0xd9, - 0xe5, 0xae, 0xea, 0x01, 0x89, 0x4b, 0xb7, 0x33, 0xe2, 0xbd, 0xdf, 0x7b, 0x11, 0xef, 0xc5, 0xfb, - 0x88, 0x28, 0x78, 0x40, 0x83, 0x4f, 0x89, 0xc3, 0xe9, 0x39, 0xd9, 0x26, 0x17, 0x4e, 0x0b, 0x07, - 0x4d, 0xb2, 0x7d, 0xfe, 0x34, 0xfd, 0x7b, 0x2b, 0x8a, 0x43, 0x1e, 0xa2, 0xc5, 0x94, 0x6a, 0x2b, - 0x9d, 0x39, 0x7f, 0x7a, 0x7b, 0xa1, 0x19, 0x36, 0x43, 0x49, 0xb1, 0x2d, 0xfe, 0x52, 0xc4, 0xb7, - 0xe7, 0xb0, 0x4f, 0x83, 0x70, 0x5b, 0xfe, 0xab, 0x87, 0xd6, 0x9c, 0x90, 0xf9, 0x21, 0xdb, 0x3e, - 0xc1, 0x8c, 0x6c, 0x9f, 0x3f, 0x39, 0x21, 0x1c, 0x3f, 0xd9, 0x76, 0x42, 0x1a, 0xe8, 0xf9, 0x15, - 0x35, 0x6f, 0x2b, 0x2c, 0xf5, 0xa1, 0xa7, 0x1e, 0x66, 0x0a, 0x86, 0x31, 0x76, 0xbc, 0x8c, 0x5f, - 0x7d, 0x6a, 0x32, 0xf3, 0xfa, 0x75, 0xf8, 0x38, 0x3e, 0x25, 0x5c, 0xd3, 0xdc, 0xbb, 0x9e, 0x26, - 0x8c, 0x5d, 0x12, 0x2b, 0x12, 0xf3, 0x47, 0x06, 0xac, 0xee, 0x05, 0x8d, 0x30, 0x76, 0x88, 0x6b, - 0x11, 0xc6, 0x63, 0xea, 0x70, 0x1a, 0x06, 0x6c, 0x37, 0x0c, 0x78, 0x8c, 0x1d, 0x8e, 0x76, 0xa1, - 0xe8, 0xe8, 0xbf, 0x6d, 0xec, 0xba, 0x31, 0x61, 0xac, 0x64, 0x6c, 0x18, 0x9b, 0x93, 0x3b, 0xa5, - 0x7f, 0xfe, 0x9b, 0x77, 0x16, 0xb4, 0xea, 0x65, 0x35, 0x53, 0xe7, 0x31, 0x0d, 0x9a, 0xd6, 0x6c, - 0xc2, 0xa1, 0x87, 0xd1, 0x53, 0x58, 0x8c, 0x70, 0x9b, 0x11, 0x9b, 0x9c, 0x93, 0x80, 0xdb, 0x8c, - 0x36, 0x03, 0xcc, 0xdb, 0x31, 0x29, 0x8d, 0x08, 0x24, 0x6b, 0x5e, 0x4e, 0xee, 0x89, 0xb9, 0x7a, - 0x32, 0xf5, 0x6c, 0xf4, 0x67, 0x9f, 0xaf, 0x1b, 0xe6, 0x17, 0xab, 0x30, 0x7e, 0x84, 0x63, 0xec, - 0x33, 0x44, 0x60, 0x9d, 0x45, 0x21, 0xb7, 0xd5, 0x12, 0x6d, 0x1a, 0x30, 0x8e, 0x03, 0x6e, 0x7b, - 0x94, 0x71, 0x1a, 0x34, 0xed, 0x06, 0x21, 0x52, 0xb1, 0xa9, 0xa7, 0x2b, 0x5b, 0x5a, 0x2b, 0xb1, - 0xfb, 0x5b, 0x7a, 0xf7, 0xb6, 0x76, 0x43, 0x1a, 0xec, 0x8c, 0x7e, 0xf1, 0xd3, 0xf5, 0x5b, 0xd6, - 0x1d, 0x81, 0x73, 0x20, 0x61, 0xaa, 0x0a, 0xa5, 0xa6, 0x40, 0xf6, 0x09, 0x41, 0x67, 0xf0, 0xd0, - 0x25, 0x31, 0x3d, 0xc7, 0x62, 0xdf, 0x6e, 0x12, 0x36, 0x32, 0x98, 0xb0, 0x7b, 0x19, 0x5a, 0x3f, - 0x91, 0x18, 0xee, 0xb8, 0xa4, 0x81, 0xdb, 0x1e, 0xb7, 0xf5, 0x0a, 0x4f, 0x49, 0x2c, 0x64, 0xd8, - 0x31, 0xe6, 0xa4, 0x94, 0x93, 0xdb, 0x7d, 0x5f, 0xa0, 0xfd, 0xdb, 0x4f, 0xd7, 0xef, 0x28, 0x79, - 0xcc, 0x3d, 0xdd, 0xa2, 0xe1, 0xb6, 0x8f, 0x79, 0x6b, 0xab, 0x46, 0x9a, 0xd8, 0xb9, 0xac, 0x10, - 0xc7, 0x5a, 0xd6, 0x38, 0x75, 0xb9, 0xc0, 0x53, 0x12, 0xef, 0x13, 0x62, 0x61, 0x7e, 0x55, 0x04, - 0xef, 0x16, 0x31, 0xfa, 0x66, 0x22, 0x8e, 0x3b, 0x45, 0xf8, 0x70, 0x2f, 0x11, 0xd1, 0xb5, 0x81, - 0x5d, 0x82, 0xc6, 0x06, 0x17, 0x74, 0x57, 0xa3, 0x55, 0x3a, 0xf6, 0xef, 0xb5, 0xe2, 0x7a, 0xd6, - 0x35, 0xfe, 0x75, 0xc4, 0x75, 0xad, 0xce, 0x85, 0xd5, 0x44, 0x1c, 0x0d, 0x28, 0xa7, 0xd8, 0x13, - 0xbe, 0xd1, 0xa4, 0x81, 0x10, 0x44, 0xc3, 0xd2, 0xc4, 0xe0, 0x92, 0x56, 0x34, 0x50, 0x55, 0xe1, - 0x1c, 0x48, 0x18, 0x4b, 0xa0, 0x20, 0x0f, 0x36, 0x12, 0x29, 0x3e, 0xa6, 0x01, 0x27, 0x01, 0x0e, - 0x1c, 0xd2, 0x2d, 0x29, 0x3f, 0xfc, 0x9a, 0x0e, 0x32, 0xac, 0x4e, 0x69, 0xef, 0x43, 0x29, 0x91, - 0xd6, 0x68, 0x07, 0xae, 0x70, 0x6c, 0x41, 0x17, 0x9f, 0x63, 0xaf, 0x34, 0xb9, 0x61, 0x6c, 0xe6, - 0xac, 0x25, 0x3d, 0xbf, 0xaf, 0xa6, 0xab, 0x7a, 0x16, 0x7d, 0x03, 0x8a, 0x09, 0x87, 0xdf, 0xf6, - 0x38, 0x8d, 0x3c, 0x52, 0x02, 0xc9, 0x31, 0xab, 0xc7, 0x0f, 0xf4, 0x30, 0xfa, 0x55, 0x58, 0x8a, - 0x89, 0x87, 0x2f, 0xb5, 0x59, 0x58, 0x0b, 0xc7, 0xda, 0x38, 0x53, 0x83, 0x2f, 0x64, 0x5e, 0x43, - 0xec, 0x13, 0x52, 0x17, 0x00, 0xd2, 0x24, 0x14, 0xd6, 0x13, 0xf5, 0x5b, 0x61, 0x3b, 0xf6, 0x2e, - 0xd3, 0x55, 0x08, 0x78, 0xdb, 0xc1, 0x51, 0x69, 0x7a, 0x70, 0x11, 0xc9, 0xf9, 0x78, 0x2e, 0xa1, - 0xf4, 0x82, 0x85, 0x9c, 0x5d, 0x1c, 0x75, 0x5a, 0x5f, 0x8b, 0x92, 0x1b, 0x45, 0x18, 0x57, 0x4b, - 0x29, 0x0c, 0x6f, 0x7d, 0x25, 0xa7, 0xaa, 0x61, 0xe4, 0x82, 0x2a, 0xb0, 0xee, 0xe3, 0x8b, 0x4e, - 0x77, 0x96, 0xa1, 0xda, 0x66, 0xd4, 0x25, 0xb6, 0x13, 0xb6, 0x03, 0x5e, 0x9a, 0xd9, 0x30, 0x36, - 0x0b, 0xd6, 0x1d, 0x1f, 0x5f, 0x64, 0x7e, 0x7a, 0x28, 0x88, 0xea, 0xd4, 0x25, 0xbb, 0x82, 0x04, - 0x31, 0x78, 0x44, 0x83, 0x4f, 0xed, 0x98, 0x7c, 0x86, 0x63, 0xd7, 0x66, 0xe2, 0x44, 0xb8, 0x76, - 0x4c, 0xce, 0xda, 0x34, 0x26, 0xbe, 0x08, 0xbf, 0xbc, 0x15, 0x13, 0xd6, 0x0a, 0x3d, 0xb7, 0x34, - 0x2b, 0xd5, 0xbe, 0xab, 0xd5, 0x5e, 0xbc, 0xaa, 0x76, 0x35, 0xe0, 0xd6, 0x7d, 0x1a, 0x7c, 0x6a, - 0x49, 0xb0, 0xba, 0xc4, 0xb2, 0x32, 0xa8, 0xe3, 0x04, 0x09, 0x7d, 0x08, 0x1b, 0x3c, 0xc6, 0x6a, - 0xf3, 0x25, 0x2d, 0xb3, 0xcf, 0x89, 0x8a, 0x95, 0x6e, 0x5b, 0xfa, 0x6d, 0x50, 0x2a, 0x4a, 0x07, - 0xb9, 0xab, 0xe9, 0x14, 0x24, 0x7b, 0xa5, 0xa8, 0x2a, 0x9a, 0x48, 0xec, 0xb4, 0x47, 0xcf, 0xda, - 0xd4, 0xc5, 0x3c, 0x8c, 0xd3, 0x45, 0x64, 0x4e, 0x33, 0x37, 0xc4, 0x4e, 0x67, 0x40, 0x5a, 0xff, - 0xd4, 0x75, 0x2e, 0xe0, 0x1b, 0x27, 0x34, 0xc0, 0xf1, 0xa5, 0x1d, 0x46, 0x32, 0xdf, 0xdd, 0x14, - 0xe8, 0xd1, 0x60, 0x81, 0xfe, 0x81, 0x42, 0x3c, 0x54, 0x80, 0xfd, 0x62, 0xfd, 0x6f, 0xc1, 0x06, - 0xe6, 0xa1, 0x4f, 0x9d, 0x44, 0xa2, 0x32, 0x31, 0x76, 0x1c, 0xc2, 0x98, 0xed, 0x91, 0x73, 0xe2, - 0x95, 0xe6, 0x37, 0x8c, 0xcd, 0x99, 0xa7, 0xef, 0x6e, 0x5d, 0x5b, 0x84, 0x6c, 0x95, 0x25, 0xbb, - 0xc2, 0x97, 0xa6, 0x2f, 0x4b, 0xde, 0x9a, 0x60, 0xb5, 0x56, 0xf1, 0x0d, 0xb3, 0xe8, 0x02, 0x1e, - 0xc9, 0xe8, 0x7f, 0x9d, 0x06, 0xe2, 0x70, 0xea, 0xb3, 0x4c, 0x49, 0x5c, 0x5a, 0x18, 0x7c, 0x9f, - 0x4d, 0x81, 0x79, 0x45, 0xab, 0x7d, 0x42, 0x0e, 0x52, 0x38, 0xf4, 0x7d, 0x03, 0xde, 0xe9, 0xf0, - 0xeb, 0x01, 0x14, 0x58, 0x1c, 0x5c, 0x81, 0xcd, 0x0c, 0xf9, 0x35, 0x6a, 0xfc, 0x81, 0x01, 0x4f, - 0x7a, 0x0c, 0x3f, 0x80, 0x2a, 0x4b, 0x83, 0xab, 0xf2, 0x76, 0x97, 0x13, 0xbc, 0x46, 0x9b, 0x4f, - 0x60, 0xc5, 0xa7, 0x01, 0xf5, 0xb1, 0xa7, 0x0a, 0x41, 0x27, 0xf4, 0xb2, 0xd4, 0xb5, 0x3c, 0xb8, - 0xd0, 0x25, 0x8d, 0x72, 0xa4, 0x41, 0x92, 0x9c, 0xf5, 0x3d, 0x78, 0x9b, 0xb2, 0xd4, 0xa5, 0xaf, - 0x56, 0x35, 0x1e, 0x6e, 0x07, 0x4e, 0xcb, 0x26, 0x01, 0x3e, 0xf1, 0x88, 0x5b, 0x2a, 0x6d, 0x18, - 0x9b, 0x79, 0xeb, 0x2d, 0xca, 0xb4, 0xd7, 0x56, 0x7a, 0x0a, 0x97, 0x9a, 0x24, 0xdf, 0x53, 0xd4, - 0x22, 0x58, 0x45, 0x21, 0xe3, 0x76, 0x18, 0x78, 0x97, 0xb6, 0x1f, 0xba, 0xc4, 0x6e, 0x11, 0xda, - 0x6c, 0x75, 0x86, 0x97, 0x15, 0x79, 0xe0, 0xef, 0x08, 0xb2, 0xc3, 0xc0, 0xbb, 0x3c, 0x08, 0x5d, - 0xf2, 0x5c, 0xd2, 0x64, 0x71, 0xa3, 0x09, 0x4f, 0x74, 0x72, 0x73, 0x89, 0x13, 0x13, 0xcc, 0x88, - 0x1d, 0xc5, 0xd4, 0x21, 0x36, 0xa7, 0x3e, 0x61, 0x1c, 0xfb, 0x51, 0x86, 0x67, 0x33, 0xe2, 0x84, - 0x81, 0xcb, 0x4a, 0xb7, 0x25, 0xee, 0x37, 0x15, 0x63, 0x45, 0xf3, 0x1d, 0x09, 0xb6, 0xe3, 0x84, - 0x2b, 0x95, 0x50, 0x57, 0x3c, 0xe8, 0x11, 0xcc, 0x26, 0x87, 0xc8, 0xc6, 0xae, 0x4f, 0x03, 0x56, - 0xba, 0xb3, 0x91, 0xdb, 0x9c, 0xb4, 0x66, 0x92, 0xe1, 0xb2, 0x1c, 0x45, 0x2f, 0x60, 0x5e, 0x84, - 0x4f, 0xdc, 0x96, 0x85, 0xb0, 0x2d, 0x02, 0xb2, 0xc8, 0x24, 0xab, 0xd2, 0x1c, 0xeb, 0x37, 0x86, - 0xca, 0x92, 0x61, 0x15, 0x69, 0xf0, 0x69, 0x59, 0xb1, 0x1e, 0xe0, 0x0b, 0x91, 0x3a, 0x1e, 0xc3, - 0x5c, 0x83, 0x5e, 0x10, 0xd7, 0x6e, 0x62, 0x96, 0x6e, 0xf5, 0x5d, 0xb9, 0xd5, 0xb3, 0x72, 0xe2, - 0x43, 0xcc, 0x92, 0x3d, 0xfd, 0x00, 0x6e, 0x13, 0x9f, 0x72, 0xdb, 0x93, 0xa6, 0xb5, 0xcf, 0x49, - 0xcc, 0x84, 0x0e, 0xb2, 0x6a, 0x66, 0xa5, 0x35, 0xc9, 0xb4, 0x2c, 0x28, 0x94, 0xed, 0x5f, 0xa9, - 0x79, 0x59, 0x38, 0x33, 0x74, 0x92, 0x95, 0x78, 0x31, 0x71, 0xdb, 0xbd, 0x65, 0xc3, 0xfa, 0xe0, - 0xfe, 0x94, 0x54, 0x05, 0x96, 0x84, 0xe9, 0xac, 0x18, 0x7e, 0x11, 0x56, 0x7b, 0x8c, 0x7e, 0xe2, - 0x85, 0xce, 0x29, 0xb3, 0xb1, 0x2f, 0xd3, 0xd3, 0xbd, 0x0d, 0x63, 0x73, 0xd4, 0x2a, 0x75, 0x5a, - 0x7c, 0x47, 0x12, 0x94, 0xe5, 0x3c, 0x3a, 0x80, 0x07, 0x3e, 0x0d, 0xec, 0x1e, 0x0c, 0x37, 0xfc, - 0x2c, 0x10, 0xf6, 0xce, 0x52, 0x85, 0x29, 0xfb, 0x82, 0x75, 0x9f, 0x06, 0x47, 0x1d, 0x50, 0x15, - 0x4d, 0x97, 0x26, 0x8b, 0xef, 0xc2, 0xdb, 0x37, 0xa9, 0x63, 0xe3, 0x06, 0x27, 0x71, 0x0a, 0x5f, - 0xba, 0x2f, 0xb5, 0x7b, 0xd8, 0x4f, 0xbb, 0xb2, 0xa0, 0x4e, 0x64, 0xa0, 0x3f, 0x36, 0xe0, 0xb1, - 0x4b, 0xa2, 0x98, 0x38, 0x98, 0x13, 0xd7, 0x26, 0xba, 0x49, 0xb2, 0xe3, 0x8e, 0x2e, 0xc9, 0x4e, - 0x1a, 0x1d, 0x56, 0x7a, 0xb0, 0x91, 0xdb, 0x9c, 0xea, 0x1b, 0xb3, 0x6f, 0x6a, 0xb1, 0x74, 0xfa, - 0x78, 0x94, 0x09, 0xbb, 0x89, 0x9a, 0x89, 0xaa, 0xed, 0xb3, 0x16, 0xe5, 0xc4, 0x3e, 0x0d, 0xe4, - 0x79, 0xcb, 0xb2, 0x1c, 0x2b, 0x3d, 0x94, 0x2e, 0xbd, 0x24, 0xe7, 0x3f, 0x92, 0xd3, 0xb5, 0x6c, - 0x16, 0xfd, 0x36, 0x7c, 0xa3, 0x0f, 0xe7, 0x35, 0x89, 0xf6, 0xad, 0xc1, 0xfd, 0xe5, 0xc1, 0xb5, - 0xf2, 0x7a, 0x73, 0xee, 0x27, 0x30, 0xef, 0xc4, 0x21, 0x63, 0x89, 0x5b, 0x46, 0xb2, 0xad, 0x2b, - 0x3d, 0x92, 0xd9, 0x75, 0xb3, 0xcf, 0xc6, 0xed, 0x0a, 0x0e, 0xe5, 0x81, 0xaa, 0x0d, 0xd4, 0xbb, - 0x35, 0xe7, 0xf4, 0x4e, 0x3c, 0x2b, 0x89, 0x86, 0xf1, 0x07, 0xff, 0xf9, 0xd7, 0x8f, 0xd3, 0x83, - 0xbe, 0xad, 0x66, 0xbe, 0x33, 0x9a, 0xdf, 0x28, 0xde, 0x33, 0x7f, 0x9c, 0x83, 0xb9, 0x2b, 0x70, - 0xe8, 0x37, 0xe0, 0x76, 0x14, 0x32, 0x2a, 0xc3, 0x62, 0x3b, 0x0a, 0x3c, 0xbb, 0x85, 0x69, 0xec, - 0xb4, 0x75, 0x5d, 0x67, 0x0c, 0xd1, 0x17, 0x25, 0x30, 0x2f, 0xa3, 0xc0, 0x7b, 0xae, 0x40, 0x74, - 0x55, 0x37, 0xd5, 0x20, 0x84, 0xd9, 0x27, 0xed, 0x46, 0x83, 0xc4, 0xaa, 0xe5, 0x1d, 0x0c, 0x12, - 0x04, 0xdf, 0x8e, 0x64, 0x43, 0xdf, 0x82, 0x05, 0x1d, 0x3c, 0xec, 0xb3, 0x76, 0xc8, 0x89, 0xed, - 0x92, 0x20, 0xf4, 0x59, 0x29, 0x27, 0x2d, 0x8e, 0xf4, 0xdc, 0xc7, 0x62, 0xaa, 0x22, 0x67, 0xd0, - 0xdb, 0x30, 0x17, 0x91, 0x38, 0x22, 0xbc, 0x8d, 0xbd, 0x34, 0xf0, 0x8c, 0xca, 0x18, 0x52, 0x4c, - 0x27, 0x92, 0xc8, 0xf3, 0x10, 0x66, 0xc8, 0x45, 0x44, 0xe3, 0xcb, 0x94, 0x72, 0x4c, 0x52, 0x16, - 0xd4, 0x68, 0x42, 0xf6, 0x31, 0xbc, 0x25, 0x02, 0x22, 0x96, 0x86, 0xba, 0x9a, 0x51, 0x98, 0x1d, - 0x91, 0xd8, 0x8e, 0xc2, 0xd0, 0x93, 0x9d, 0x57, 0xc1, 0xba, 0xe7, 0xe3, 0x8b, 0xb2, 0x24, 0xee, - 0x4d, 0x26, 0xec, 0x88, 0xc4, 0x47, 0x61, 0x28, 0x5b, 0x09, 0xe2, 0x93, 0xb8, 0x49, 0x02, 0xe7, - 0xd2, 0x96, 0x17, 0x01, 0xae, 0x6c, 0xa6, 0xf2, 0xd6, 0x6c, 0x3a, 0x7e, 0x24, 0x87, 0xf5, 0x95, - 0xc0, 0x2f, 0xc0, 0xc2, 0x0b, 0x72, 0x91, 0xb4, 0x24, 0x69, 0xc4, 0x17, 0x4b, 0x08, 0xc8, 0x05, - 0xcf, 0x32, 0x87, 0xb4, 0x5e, 0xce, 0x2a, 0x88, 0xd1, 0x94, 0xcc, 0xfc, 0x2f, 0x03, 0x66, 0x0e, - 0xa8, 0x2b, 0xd3, 0x45, 0x39, 0x70, 0x8f, 0x0f, 0x77, 0xd0, 0x2f, 0xc3, 0xa4, 0x4f, 0x5d, 0x95, - 0x78, 0x3a, 0x4c, 0x6e, 0xbc, 0xce, 0x3e, 0x79, 0x5f, 0xe3, 0xa0, 0x2a, 0xcc, 0x9c, 0x88, 0x66, - 0xe0, 0xa4, 0x7d, 0xa9, 0x61, 0x46, 0x06, 0x87, 0x99, 0x16, 0xac, 0x3b, 0xed, 0x4b, 0x05, 0xf5, - 0x11, 0xcc, 0x4a, 0x28, 0x46, 0x3c, 0x4f, 0x63, 0xe5, 0x06, 0xc7, 0x2a, 0x08, 0xde, 0x3a, 0xf1, - 0x3c, 0x09, 0x66, 0xfe, 0x85, 0x01, 0x13, 0x15, 0x22, 0x3d, 0x13, 0x1d, 0xc1, 0x1c, 0x3e, 0xc7, - 0xd4, 0x13, 0x96, 0xb4, 0x4f, 0xb0, 0x27, 0xba, 0xc1, 0x61, 0x1c, 0xbc, 0x98, 0x72, 0xef, 0x28, - 0x66, 0xf4, 0x1c, 0x0a, 0x3c, 0xe4, 0xd8, 0x4b, 0xd1, 0x86, 0xf0, 0xed, 0x69, 0xc9, 0xa9, 0x91, - 0xcc, 0x6f, 0xc2, 0x42, 0xbd, 0x7d, 0x82, 0x1d, 0xd9, 0xe4, 0x1c, 0xc7, 0xd8, 0x25, 0x2f, 0x42, - 0x21, 0x61, 0x01, 0xc6, 0x82, 0x30, 0xd1, 0xb3, 0x60, 0xa9, 0x0f, 0xf3, 0xef, 0x0d, 0x98, 0xcd, - 0xc8, 0x65, 0x61, 0x85, 0x7e, 0x0e, 0xc6, 0x7a, 0xed, 0xf7, 0x5a, 0x1d, 0x14, 0x07, 0xfa, 0x25, - 0xc8, 0x9f, 0xb5, 0x71, 0xc0, 0x29, 0xbf, 0x1c, 0x66, 0x05, 0x29, 0x13, 0x32, 0x61, 0x9a, 0x32, - 0x95, 0x2c, 0x45, 0x5e, 0x91, 0xf6, 0xca, 0x5b, 0x5d, 0x63, 0xa8, 0x08, 0x39, 0x87, 0xaa, 0xf3, - 0x37, 0x69, 0x89, 0x3f, 0xcd, 0x18, 0xe6, 0x7b, 0x16, 0x51, 0xc1, 0x1c, 0xa3, 0x9f, 0x87, 0x31, - 0x59, 0x84, 0xea, 0xcb, 0xac, 0xb7, 0xfa, 0x04, 0xc6, 0x1e, 0x56, 0x4b, 0x31, 0xa1, 0xbb, 0x00, - 0xaa, 0x84, 0x6d, 0x61, 0xd6, 0x92, 0xab, 0x99, 0xb6, 0x26, 0xe5, 0xc8, 0x73, 0xcc, 0x5a, 0xe6, - 0x8f, 0x47, 0x20, 0x7f, 0x24, 0xe3, 0x54, 0x18, 0xa0, 0x25, 0x18, 0xa7, 0xac, 0x16, 0x06, 0x4d, - 0x29, 0x2a, 0x6f, 0xe9, 0xaf, 0xaf, 0xbf, 0x1f, 0x15, 0x98, 0x22, 0x01, 0x8f, 0x2f, 0xaf, 0xb8, - 0xef, 0xeb, 0x23, 0x9e, 0xe4, 0x53, 0x07, 0xe1, 0x03, 0x18, 0x57, 0x99, 0x62, 0x98, 0xdb, 0x29, - 0xcd, 0x82, 0x7e, 0x1d, 0x4a, 0x4e, 0xdb, 0x6f, 0x7b, 0x2a, 0x3a, 0x25, 0xf7, 0x02, 0x12, 0x7d, - 0x98, 0x3b, 0xa8, 0xa5, 0x0c, 0x44, 0xc7, 0x9b, 0x3d, 0x01, 0x61, 0xfe, 0xc0, 0x80, 0x89, 0xe4, - 0x14, 0xdc, 0x87, 0x02, 0x4b, 0x8d, 0x61, 0x53, 0x57, 0x79, 0xa0, 0x35, 0x9d, 0x0d, 0x56, 0x5d, - 0xe1, 0xc8, 0x32, 0x60, 0xeb, 0x1b, 0x4f, 0xf5, 0x81, 0x9e, 0x41, 0xde, 0x55, 0xa7, 0x93, 0xc9, - 0x5d, 0x9a, 0x7a, 0xba, 0xd6, 0xc7, 0xdc, 0xfa, 0x10, 0x5b, 0x29, 0xfd, 0xb3, 0xfc, 0xef, 0x7f, - 0xbe, 0x7e, 0xeb, 0x67, 0x9f, 0xaf, 0xdf, 0x32, 0x7f, 0x64, 0x00, 0xca, 0xc2, 0x6b, 0x6a, 0xde, - 0x81, 0xf4, 0xba, 0x03, 0x93, 0x49, 0xe7, 0xeb, 0x6a, 0xdd, 0xf2, 0x6a, 0xa0, 0x2a, 0xca, 0xd1, - 0x7c, 0xa4, 0xd1, 0xb4, 0x7a, 0xeb, 0x7d, 0xd4, 0x4b, 0x84, 0x5a, 0x29, 0x43, 0x87, 0x7e, 0x55, - 0x58, 0xe8, 0x68, 0x81, 0xaa, 0x81, 0x4b, 0x1d, 0x51, 0x1f, 0x74, 0xcb, 0x36, 0x7a, 0x64, 0x2f, - 0xc0, 0x18, 0x65, 0x3b, 0x6d, 0xe5, 0x81, 0x79, 0x4b, 0x7d, 0x98, 0xff, 0x34, 0x02, 0x79, 0x19, - 0x1e, 0x6a, 0x61, 0xb7, 0x9f, 0x1a, 0x6f, 0xe2, 0xa7, 0x69, 0xcc, 0x18, 0x19, 0x3a, 0x66, 0x5c, - 0xd9, 0xdc, 0x9c, 0x3c, 0x6a, 0xdd, 0x9b, 0xfb, 0x1e, 0xe4, 0x1a, 0x64, 0xa8, 0xcb, 0x55, 0x41, - 0xdf, 0x73, 0x86, 0xc7, 0x7a, 0xce, 0x30, 0x7a, 0x1f, 0x16, 0x65, 0x93, 0x48, 0x1c, 0x1a, 0x51, - 0x12, 0x64, 0xd7, 0xf2, 0x22, 0xe5, 0x4e, 0xcb, 0xfa, 0xc8, 0xb0, 0xe6, 0x1b, 0x84, 0x58, 0x09, - 0x45, 0x72, 0x0d, 0xaf, 0x63, 0xd0, 0x44, 0x16, 0x83, 0xfe, 0x64, 0x04, 0x0a, 0x89, 0xed, 0x2a, - 0xc4, 0xe3, 0x18, 0x2d, 0xc3, 0x04, 0x65, 0xb6, 0x77, 0x35, 0x2a, 0x58, 0x80, 0xc8, 0x05, 0x71, - 0xda, 0xb2, 0x2b, 0x7a, 0x93, 0xf8, 0x30, 0x97, 0xb2, 0x7f, 0x9c, 0x18, 0xe0, 0x05, 0x14, 0x33, - 0x4c, 0x7d, 0xd8, 0x87, 0x88, 0x16, 0xb3, 0x29, 0xb3, 0x2a, 0xe9, 0x50, 0x0d, 0xb2, 0x21, 0x1d, - 0x7c, 0x86, 0xd8, 0xfc, 0x99, 0x94, 0x57, 0x25, 0xcf, 0x3f, 0xcd, 0x75, 0x9e, 0xab, 0xd4, 0xed, - 0xae, 0x3d, 0x57, 0xbd, 0xa6, 0xff, 0x08, 0x66, 0x92, 0x93, 0x60, 0xbb, 0x62, 0x63, 0xf5, 0x73, - 0xc1, 0x83, 0xd7, 0x1c, 0x20, 0x69, 0x04, 0xab, 0x10, 0x75, 0xd9, 0xe4, 0x03, 0x18, 0x8f, 0xf0, - 0x65, 0xd8, 0xe6, 0xc3, 0x6c, 0x8e, 0x66, 0xf9, 0xff, 0xef, 0x84, 0x42, 0xc3, 0x28, 0xf0, 0x86, - 0xb9, 0xd7, 0x16, 0xf4, 0xe6, 0x39, 0xa0, 0x2c, 0x09, 0xa6, 0x51, 0xaf, 0x33, 0x66, 0x19, 0x43, - 0xc6, 0xac, 0xab, 0xa6, 0x1d, 0xb9, 0x6a, 0x5a, 0x33, 0x86, 0xb9, 0x4c, 0x6e, 0x52, 0x5c, 0x0d, - 0xe4, 0x14, 0xef, 0xc3, 0x84, 0x0e, 0xdf, 0xda, 0x1b, 0x5e, 0x17, 0xed, 0x13, 0x72, 0xf3, 0x14, - 0x0a, 0x7a, 0xec, 0x65, 0xe4, 0x8a, 0xa6, 0x22, 0xcd, 0x27, 0x46, 0x67, 0x3e, 0xa9, 0x74, 0xe4, - 0x93, 0x11, 0xd9, 0x90, 0x6e, 0xbe, 0xb6, 0x7c, 0xb8, 0x92, 0x59, 0xcc, 0x7f, 0x34, 0xa0, 0x78, - 0x14, 0xd2, 0x80, 0xb3, 0x8e, 0xbb, 0xaa, 0xef, 0xc1, 0xb2, 0x7a, 0xca, 0x89, 0xe4, 0x4c, 0xe7, - 0xf5, 0xd8, 0x10, 0xb1, 0x77, 0x51, 0x62, 0x5c, 0x07, 0xce, 0xfb, 0x80, 0x0f, 0x11, 0x60, 0x16, - 0xf9, 0x75, 0xe0, 0xe6, 0x7f, 0x8f, 0xc0, 0xda, 0x71, 0xe7, 0x9d, 0xf3, 0x2e, 0xf6, 0x23, 0x4c, - 0x9b, 0xc1, 0x4e, 0x18, 0x32, 0x5e, 0x0d, 0x1a, 0x21, 0x7a, 0x0f, 0x96, 0x4f, 0xc4, 0x07, 0x71, - 0xed, 0xae, 0x27, 0x46, 0x97, 0x95, 0x0c, 0xd9, 0x5f, 0x2d, 0xe8, 0xe9, 0x7a, 0xf6, 0x70, 0xe8, - 0x32, 0x44, 0x60, 0xb9, 0x93, 0x3c, 0xd3, 0x3a, 0xd9, 0xfd, 0x47, 0x7d, 0x5d, 0xaf, 0x5b, 0x47, - 0xdd, 0xd4, 0x2e, 0x66, 0xef, 0x92, 0xd9, 0x1c, 0x43, 0x65, 0xb8, 0x9b, 0x68, 0x77, 0xcd, 0xcb, - 0xa4, 0x9b, 0xf4, 0x80, 0xb7, 0x35, 0x51, 0x6f, 0xa7, 0x25, 0x34, 0x3d, 0x83, 0xbb, 0x57, 0x59, - 0x3b, 0xf5, 0x1d, 0x7d, 0x13, 0x7d, 0xef, 0xf4, 0x3e, 0x6d, 0x76, 0x68, 0x6d, 0xfe, 0xad, 0x01, - 0x28, 0xd9, 0x69, 0xb5, 0xef, 0xb2, 0xdd, 0x7b, 0x04, 0xb3, 0x8c, 0xe3, 0xf8, 0x6a, 0x9b, 0x36, - 0x23, 0x87, 0xb3, 0x76, 0xee, 0x77, 0x60, 0x41, 0xdd, 0xbd, 0x29, 0x88, 0xe4, 0x59, 0x41, 0xef, - 0xec, 0x0d, 0xb7, 0xf1, 0xdf, 0x12, 0xba, 0xfd, 0xd5, 0xbf, 0xaf, 0x6f, 0x36, 0x29, 0x6f, 0xb5, - 0x4f, 0xb6, 0x9c, 0xd0, 0xd7, 0x2f, 0xec, 0xfa, 0xbf, 0x77, 0x98, 0x7b, 0xba, 0xcd, 0x2f, 0x23, - 0xc2, 0x24, 0x03, 0xb3, 0x90, 0x8f, 0x2f, 0xba, 0x55, 0x65, 0xe6, 0x9f, 0x8f, 0xc0, 0xca, 0xb5, - 0x5e, 0x23, 0x1d, 0xe6, 0x19, 0xac, 0xa4, 0x8a, 0x25, 0x97, 0x56, 0xe9, 0xf5, 0xa4, 0x5a, 0xcf, - 0x72, 0x42, 0x90, 0xdc, 0x56, 0x25, 0x37, 0x91, 0xf7, 0x60, 0xba, 0xab, 0x83, 0x1f, 0x91, 0xd6, - 0x9b, 0x3a, 0xeb, 0x68, 0xdd, 0x23, 0x58, 0xe9, 0x7e, 0x4d, 0xb1, 0xa5, 0x6d, 0x6d, 0x1a, 0x34, - 0x42, 0x5d, 0x89, 0xbd, 0xd7, 0xc7, 0x54, 0x37, 0x7b, 0xba, 0xb5, 0xd4, 0xf5, 0xfa, 0x92, 0x9d, - 0x80, 0x6f, 0xc3, 0xb2, 0x4b, 0xd9, 0x59, 0x1b, 0x7b, 0xb4, 0x41, 0x89, 0xdb, 0xe9, 0x5d, 0xa3, - 0x52, 0xbf, 0xc5, 0xce, 0xe9, 0xd4, 0xb1, 0xcc, 0xbf, 0x1b, 0x81, 0xf9, 0x7d, 0x42, 0x2a, 0x94, - 0xa9, 0xd6, 0x8d, 0x8a, 0x02, 0xaf, 0x11, 0xa2, 0x3a, 0xcc, 0xab, 0x70, 0xe1, 0xea, 0x99, 0xa1, - 0xef, 0x53, 0xe6, 0x24, 0x7f, 0x02, 0x2c, 0x6f, 0x52, 0xea, 0x30, 0xcf, 0xaf, 0x01, 0x1d, 0xa6, - 0x06, 0xe1, 0x57, 0x40, 0x77, 0xa0, 0xa0, 0xdf, 0xc8, 0xf4, 0x1d, 0x66, 0x6e, 0x90, 0x47, 0xb1, - 0x69, 0xc5, 0xa3, 0xaf, 0x35, 0x3f, 0x80, 0xf1, 0xf3, 0xd0, 0x6b, 0xfb, 0x43, 0xa5, 0x59, 0xcd, - 0x62, 0xfe, 0x5e, 0xf7, 0x16, 0xd6, 0x9d, 0x16, 0x71, 0xdb, 0x1e, 0x11, 0x7e, 0x72, 0xd2, 0x76, - 0x84, 0x15, 0xd4, 0xd3, 0x9f, 0x21, 0x6f, 0x2f, 0xa7, 0xd4, 0x98, 0x7a, 0xea, 0x7b, 0x04, 0xb3, - 0x9a, 0x24, 0xbd, 0x39, 0x1d, 0x51, 0x87, 0x49, 0x0d, 0xa7, 0x17, 0xa5, 0xbd, 0x3e, 0x97, 0xbb, - 0xea, 0x73, 0x55, 0x00, 0x4e, 0x49, 0x2c, 0x7d, 0x2c, 0x89, 0x07, 0x8f, 0xfb, 0x38, 0xd9, 0x35, - 0x16, 0xb7, 0x26, 0xb9, 0xfe, 0x8b, 0xdd, 0xe4, 0x4c, 0x63, 0x37, 0x39, 0xd3, 0x01, 0xa0, 0x1e, - 0xe4, 0xe3, 0xe3, 0x1a, 0x42, 0x30, 0xca, 0x93, 0x34, 0x33, 0x6a, 0xc9, 0xbf, 0x45, 0xba, 0xe5, - 0xdc, 0xeb, 0x88, 0x21, 0x6a, 0xd9, 0xd3, 0x9c, 0x7b, 0xd9, 0x4d, 0xcf, 0x1f, 0x1a, 0x30, 0x53, - 0x56, 0x49, 0x4e, 0x9f, 0x6a, 0x54, 0x82, 0x09, 0x9d, 0xf6, 0x74, 0xe2, 0x4c, 0x3e, 0x11, 0x81, - 0x89, 0xff, 0xc3, 0x08, 0x93, 0x60, 0x9b, 0xbf, 0x6b, 0xc0, 0xb4, 0xac, 0x24, 0x2d, 0xe2, 0x84, - 0x42, 0xa3, 0x1b, 0x9b, 0xa0, 0x63, 0x58, 0xf0, 0x30, 0x27, 0x8c, 0xdb, 0xe2, 0xd8, 0xca, 0x72, - 0x2b, 0xcc, 0x34, 0x34, 0x6f, 0x08, 0x01, 0x1a, 0xdf, 0x42, 0x8a, 0xbf, 0x53, 0xa4, 0xf9, 0x6d, - 0x28, 0x64, 0xe9, 0xbf, 0x5a, 0x61, 0xe8, 0x21, 0xcc, 0x74, 0x15, 0x2f, 0x2a, 0xeb, 0x4d, 0x5b, - 0x85, 0xce, 0xea, 0x85, 0x99, 0x7f, 0x69, 0xc0, 0x54, 0x07, 0x10, 0x5a, 0x85, 0xc9, 0xde, 0x20, - 0x9e, 0x0d, 0x7c, 0x9d, 0xe6, 0xaa, 0xb3, 0xb1, 0xcb, 0xbd, 0x41, 0x63, 0x67, 0xfa, 0x30, 0xa6, - 0x1e, 0x3c, 0x9f, 0x80, 0x11, 0x0d, 0x13, 0x74, 0x8c, 0x48, 0xb0, 0x9c, 0x0d, 0xa3, 0xb3, 0x71, - 0x66, 0xfe, 0x91, 0x01, 0xeb, 0xe5, 0x66, 0x33, 0x26, 0x4d, 0xcc, 0x49, 0xb6, 0xb5, 0xaf, 0xe4, - 0xf9, 0xd6, 0x9b, 0x35, 0x50, 0x37, 0xfe, 0x1d, 0x98, 0xd1, 0xce, 0xa0, 0x62, 0x43, 0x62, 0xe9, - 0xfb, 0x7d, 0x2c, 0xad, 0x8e, 0x8e, 0x96, 0x53, 0xf0, 0x3b, 0xbe, 0x98, 0xf9, 0x7d, 0x03, 0x56, - 0x53, 0xa5, 0xca, 0xd7, 0x68, 0xd4, 0xff, 0x2c, 0xfc, 0x6f, 0xaa, 0x51, 0x16, 0x95, 0x6b, 0x10, - 0xfa, 0x15, 0xe2, 0x50, 0x1f, 0x7b, 0xac, 0x4f, 0xe5, 0x7a, 0x5b, 0x54, 0xae, 0x8a, 0x42, 0x6e, - 0xfe, 0xa8, 0x95, 0x7e, 0x9b, 0x04, 0xd0, 0x87, 0x31, 0x0e, 0x78, 0xb9, 0xcd, 0x5b, 0x61, 0x4c, - 0x7f, 0x53, 0x85, 0xb4, 0x12, 0x4c, 0x34, 0xc5, 0xa8, 0xfe, 0xd9, 0xd7, 0xa4, 0x95, 0x7c, 0xa2, - 0xf7, 0x60, 0x5c, 0x87, 0xf2, 0x91, 0x41, 0x42, 0xb9, 0x26, 0x36, 0x3f, 0x81, 0x29, 0x75, 0x55, - 0x2d, 0x85, 0x65, 0xf8, 0x71, 0x37, 0x7e, 0xfc, 0xa6, 0xf8, 0x3f, 0x34, 0x60, 0x66, 0xaf, 0xd1, - 0x20, 0x03, 0xc9, 0xa8, 0xc2, 0x5c, 0x40, 0xb8, 0xad, 0x3e, 0xf5, 0xaf, 0x38, 0x06, 0x13, 0x37, - 0x1b, 0x10, 0xfe, 0xa1, 0x62, 0x93, 0xbf, 0xd7, 0x40, 0x2b, 0x90, 0xa7, 0xcc, 0x3e, 0xc7, 0x9e, - 0xbe, 0xa5, 0xc8, 0x5b, 0x13, 0x94, 0xbd, 0x12, 0x9f, 0x66, 0x04, 0x45, 0x69, 0x9c, 0x03, 0x1a, - 0xbc, 0x08, 0xc5, 0xae, 0x62, 0xaf, 0x8f, 0x7d, 0xf6, 0x61, 0xda, 0xa7, 0x81, 0x1d, 0x68, 0xaa, - 0x61, 0x0e, 0xc8, 0x94, 0x9f, 0xa1, 0x9b, 0xff, 0x60, 0xc0, 0x62, 0x76, 0x42, 0x2c, 0xca, 0x4e, - 0x8f, 0xe2, 0xb0, 0x41, 0x3d, 0x82, 0xde, 0x85, 0x51, 0x3f, 0x74, 0x95, 0x31, 0x67, 0xfa, 0x36, - 0x6d, 0x82, 0xe3, 0x20, 0x74, 0x89, 0x25, 0x89, 0xd1, 0xaf, 0x00, 0x8a, 0x09, 0x23, 0xf1, 0xb9, - 0xaa, 0xc0, 0xa2, 0xd0, 0xa3, 0x8e, 0xba, 0x94, 0x98, 0xe9, 0xdb, 0xfa, 0x58, 0x19, 0xc3, 0x91, - 0xa4, 0xb7, 0xe6, 0xe2, 0xde, 0x21, 0xf4, 0x00, 0x66, 0x9c, 0x98, 0xb8, 0x94, 0xdb, 0x1e, 0x0d, - 0x48, 0x72, 0xc1, 0x33, 0x69, 0x4d, 0xab, 0xd1, 0x1a, 0x0d, 0x48, 0xd5, 0x7d, 0xfc, 0x2f, 0x06, - 0x14, 0xf6, 0x92, 0x4b, 0x83, 0xe3, 0xcb, 0x88, 0xa0, 0x55, 0x28, 0xbd, 0x0c, 0x58, 0x44, 0x1c, - 0x99, 0xda, 0xba, 0xe6, 0x8a, 0xb7, 0x10, 0xc0, 0xb8, 0x3a, 0x2b, 0x45, 0x03, 0x15, 0x60, 0xb2, - 0x46, 0x7d, 0xca, 0xf7, 0xa9, 0xe7, 0x15, 0x47, 0xd0, 0x6d, 0x58, 0x92, 0x9f, 0x07, 0x98, 0x3b, - 0x2d, 0x4b, 0xfd, 0x28, 0x46, 0xde, 0x97, 0x15, 0x73, 0x68, 0x09, 0x50, 0x36, 0xf7, 0x82, 0x7c, - 0xa6, 0xc6, 0x47, 0xd1, 0x22, 0xcc, 0xe9, 0x97, 0x79, 0xfd, 0xe8, 0x46, 0xc3, 0xa0, 0x38, 0x26, - 0xa0, 0xf6, 0xe4, 0xab, 0x8d, 0x9a, 0xac, 0x13, 0xce, 0x3d, 0xf9, 0x73, 0x9d, 0xe2, 0xb8, 0x80, - 0x3a, 0x6c, 0x34, 0x18, 0xe1, 0x02, 0x3f, 0xe9, 0x80, 0x8b, 0x13, 0x42, 0x9b, 0xfa, 0x65, 0xc0, - 0x5b, 0x84, 0x53, 0xa7, 0x98, 0x7f, 0x7c, 0x0a, 0xf9, 0x64, 0xa7, 0xd1, 0x0a, 0x2c, 0x5a, 0xd5, - 0xfa, 0x47, 0xf6, 0xc1, 0x61, 0x65, 0xcf, 0x7e, 0xf9, 0xa2, 0x7e, 0xb4, 0xb7, 0x5b, 0xdd, 0xaf, - 0xee, 0x55, 0x8a, 0xb7, 0x04, 0x5a, 0x36, 0x55, 0xad, 0x1f, 0xd6, 0xca, 0xc7, 0x7b, 0x95, 0xa2, - 0x81, 0xe6, 0x61, 0x36, 0x1b, 0xdf, 0xb5, 0x0e, 0xeb, 0xf5, 0xe2, 0x08, 0x5a, 0x86, 0xf9, 0x6c, - 0xf0, 0xe8, 0xd0, 0x3a, 0xde, 0x3f, 0xac, 0x55, 0x0f, 0x8b, 0xb9, 0xc7, 0x7f, 0x66, 0xc0, 0xdc, - 0x15, 0xa3, 0x20, 0x13, 0xd6, 0xac, 0xbd, 0xfa, 0x9e, 0xf5, 0xaa, 0x7c, 0x5c, 0x3d, 0x7c, 0x61, - 0x1f, 0x1d, 0xd6, 0xaa, 0xbb, 0xbf, 0xd6, 0x23, 0x7f, 0x03, 0x56, 0xaf, 0xa1, 0xd9, 0x7f, 0x59, - 0xab, 0xd9, 0xcf, 0x0f, 0x6b, 0x42, 0x93, 0xfb, 0xb0, 0x7e, 0x0d, 0xc5, 0x51, 0xd9, 0x3a, 0xae, - 0x96, 0x35, 0xd1, 0x08, 0x5a, 0x83, 0xdb, 0xd7, 0x10, 0xbd, 0x38, 0x54, 0xf3, 0xb9, 0x9d, 0xd3, - 0x2f, 0xbe, 0x5c, 0x33, 0x7e, 0xf2, 0xe5, 0x9a, 0xf1, 0x1f, 0x5f, 0xae, 0x19, 0x3f, 0xfc, 0x6a, - 0xed, 0xd6, 0x4f, 0xbe, 0x5a, 0xbb, 0xf5, 0xaf, 0x5f, 0xad, 0xdd, 0xfa, 0xee, 0xc7, 0x1d, 0x15, - 0x40, 0x35, 0xf1, 0xb6, 0x1a, 0x3e, 0x61, 0xdb, 0xa9, 0xef, 0xbd, 0xe3, 0x84, 0x31, 0xe9, 0xfc, - 0x6c, 0x61, 0x1a, 0x6c, 0xfb, 0xa1, 0xa8, 0xf1, 0x58, 0xf6, 0xbb, 0x5c, 0x59, 0x2d, 0x6c, 0x9f, - 0x3f, 0x3d, 0x19, 0x97, 0x3f, 0x05, 0x79, 0xf7, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0xed, 0x6a, - 0x90, 0x5b, 0xa9, 0x2c, 0x00, 0x00, + // 3886 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x5a, 0xcd, 0x6f, 0x64, 0x49, + 0x52, 0xef, 0xe7, 0xcf, 0x72, 0xd8, 0x65, 0x97, 0xd3, 0x5f, 0xe5, 0x6e, 0xb7, 0xed, 0x7e, 0xdd, + 0x3d, 0xed, 0xe9, 0xd9, 0xb6, 0xb7, 0x7b, 0xd4, 0xcb, 0xd0, 0x03, 0x2c, 0xfe, 0x9c, 0xae, 0x99, + 0x72, 0xdb, 0xf3, 0xca, 0xdd, 0x0b, 0xbb, 0x62, 0x1e, 0xe9, 0xf7, 0xb2, 0xaa, 0x72, 0xfc, 0xbe, + 0xfc, 0x32, 0xcb, 0x63, 0xf3, 0x21, 0x2d, 0xd2, 0x4a, 0xa0, 0xe5, 0xb2, 0x70, 0xe0, 0x80, 0x58, + 0x34, 0x07, 0x10, 0x12, 0x27, 0x0e, 0x1c, 0x39, 0x20, 0x21, 0xa4, 0x91, 0x00, 0x69, 0xc5, 0x01, + 0x21, 0x0e, 0x0b, 0x9a, 0x39, 0xb0, 0xe2, 0xcc, 0x1f, 0x80, 0xf2, 0xe3, 0x7d, 0x54, 0xd9, 0xe5, + 0xae, 0xea, 0x01, 0x89, 0x4b, 0xb7, 0x5f, 0x66, 0xc4, 0x2f, 0x22, 0x33, 0x22, 0x23, 0x23, 0x22, + 0x0b, 0xee, 0xd1, 0xe0, 0x53, 0xe2, 0x70, 0x7a, 0x46, 0x36, 0xc8, 0xb9, 0xd3, 0xc4, 0x41, 0x83, + 0x6c, 0x9c, 0x3d, 0x49, 0xff, 0x5e, 0x8f, 0xe2, 0x90, 0x87, 0x68, 0x2e, 0xa5, 0x5a, 0x4f, 0x67, + 0xce, 0x9e, 0xdc, 0x9c, 0x6d, 0x84, 0x8d, 0x50, 0x52, 0x6c, 0x88, 0xbf, 0x14, 0xf1, 0xcd, 0x69, + 0xec, 0xd3, 0x20, 0xdc, 0x90, 0xff, 0xea, 0xa1, 0x65, 0x27, 0x64, 0x7e, 0xc8, 0x36, 0x8e, 0x31, + 0x23, 0x1b, 0x67, 0x8f, 0x8f, 0x09, 0xc7, 0x8f, 0x37, 0x9c, 0x90, 0x06, 0x7a, 0x7e, 0x51, 0xcd, + 0xdb, 0x0a, 0x4b, 0x7d, 0xe8, 0xa9, 0xfb, 0x99, 0x82, 0x61, 0x8c, 0x1d, 0x2f, 0xe3, 0x57, 0x9f, + 0x9a, 0xcc, 0xbc, 0x7a, 0x1d, 0x3e, 0x8e, 0x4f, 0x08, 0xd7, 0x34, 0x77, 0xae, 0xa6, 0x09, 0x63, + 0x97, 0xc4, 0x8a, 0xc4, 0xfc, 0xb1, 0x01, 0x4b, 0xbb, 0x41, 0x3d, 0x8c, 0x1d, 0xe2, 0x5a, 0x84, + 0xf1, 0x98, 0x3a, 0x9c, 0x86, 0x01, 0xdb, 0x0e, 0x03, 0x1e, 0x63, 0x87, 0xa3, 0x6d, 0x28, 0x39, + 0xfa, 0x6f, 0x1b, 0xbb, 0x6e, 0x4c, 0x18, 0x2b, 0x1b, 0xab, 0xc6, 0xda, 0xd8, 0x56, 0xf9, 0x9f, + 0xff, 0xfa, 0xd1, 0xac, 0x56, 0x7d, 0x53, 0xcd, 0xd4, 0x78, 0x4c, 0x83, 0x86, 0x35, 0x95, 0x70, + 0xe8, 0x61, 0xf4, 0x04, 0xe6, 0x22, 0xdc, 0x62, 0xc4, 0x26, 0x67, 0x24, 0xe0, 0x36, 0xa3, 0x8d, + 0x00, 0xf3, 0x56, 0x4c, 0xca, 0x03, 0x02, 0xc9, 0x9a, 0x91, 0x93, 0xbb, 0x62, 0xae, 0x96, 0x4c, + 0x3d, 0x1b, 0xfa, 0xd9, 0xe7, 0x2b, 0x86, 0xf9, 0xc5, 0x12, 0x8c, 0x1c, 0xe2, 0x18, 0xfb, 0x0c, + 0x11, 0x58, 0x61, 0x51, 0xc8, 0x6d, 0xb5, 0x44, 0x9b, 0x06, 0x8c, 0xe3, 0x80, 0xdb, 0x1e, 0x65, + 0x9c, 0x06, 0x0d, 0xbb, 0x4e, 0x88, 0x54, 0x6c, 0xfc, 0xc9, 0xe2, 0xba, 0xd6, 0x4a, 0xec, 0xfe, + 0xba, 0xde, 0xbd, 0xf5, 0xed, 0x90, 0x06, 0x5b, 0x43, 0x5f, 0xfc, 0x74, 0xe5, 0x86, 0x75, 0x4b, + 0xe0, 0xec, 0x4b, 0x98, 0x8a, 0x42, 0xa9, 0x2a, 0x90, 0x3d, 0x42, 0xd0, 0x29, 0xdc, 0x77, 0x49, + 0x4c, 0xcf, 0xb0, 0xd8, 0xb7, 0xeb, 0x84, 0x0d, 0xf4, 0x26, 0xec, 0x4e, 0x86, 0xd6, 0x4d, 0x24, + 0x86, 0x5b, 0x2e, 0xa9, 0xe3, 0x96, 0xc7, 0x6d, 0xbd, 0xc2, 0x13, 0x12, 0x0b, 0x19, 0x76, 0x8c, + 0x39, 0x29, 0x0f, 0xca, 0xed, 0xbe, 0x2b, 0xd0, 0xfe, 0xed, 0xa7, 0x2b, 0xb7, 0x94, 0x3c, 0xe6, + 0x9e, 0xac, 0xd3, 0x70, 0xc3, 0xc7, 0xbc, 0xb9, 0x5e, 0x25, 0x0d, 0xec, 0x5c, 0xec, 0x10, 0xc7, + 0x5a, 0xd0, 0x38, 0x35, 0xb9, 0xc0, 0x13, 0x12, 0xef, 0x11, 0x62, 0x61, 0x7e, 0x59, 0x04, 0x6f, + 0x17, 0x31, 0xf4, 0x66, 0x22, 0x8e, 0xf2, 0x22, 0x7c, 0xb8, 0x93, 0x88, 0x68, 0xdb, 0xc0, 0x36, + 0x41, 0xc3, 0xbd, 0x0b, 0xba, 0xad, 0xd1, 0x76, 0x72, 0xfb, 0xf7, 0x5a, 0x71, 0x1d, 0xeb, 0x1a, + 0xf9, 0x3a, 0xe2, 0xda, 0x56, 0xe7, 0xc2, 0x52, 0x22, 0x8e, 0x06, 0x94, 0x53, 0xec, 0x09, 0xdf, + 0x68, 0xd0, 0x40, 0x08, 0xa2, 0x61, 0x79, 0xb4, 0x77, 0x49, 0x8b, 0x1a, 0xa8, 0xa2, 0x70, 0xf6, + 0x25, 0x8c, 0x25, 0x50, 0x90, 0x07, 0xab, 0x89, 0x14, 0x1f, 0xd3, 0x80, 0x93, 0x00, 0x07, 0x0e, + 0x69, 0x97, 0x54, 0xe8, 0x7f, 0x4d, 0xfb, 0x19, 0x56, 0x5e, 0xda, 0x7b, 0x50, 0x4e, 0xa4, 0xd5, + 0x5b, 0x81, 0x2b, 0x1c, 0x5b, 0xd0, 0xc5, 0x67, 0xd8, 0x2b, 0x8f, 0xad, 0x1a, 0x6b, 0x83, 0xd6, + 0xbc, 0x9e, 0xdf, 0x53, 0xd3, 0x15, 0x3d, 0x8b, 0xde, 0x86, 0x52, 0xc2, 0xe1, 0xb7, 0x3c, 0x4e, + 0x23, 0x8f, 0x94, 0x41, 0x72, 0x4c, 0xe9, 0xf1, 0x7d, 0x3d, 0x8c, 0x7e, 0x05, 0xe6, 0x63, 0xe2, + 0xe1, 0x0b, 0x6d, 0x16, 0xd6, 0xc4, 0xb1, 0x36, 0xce, 0x78, 0xef, 0x0b, 0x99, 0xd1, 0x10, 0x7b, + 0x84, 0xd4, 0x04, 0x80, 0x34, 0x09, 0x85, 0x95, 0x44, 0xfd, 0x66, 0xd8, 0x8a, 0xbd, 0x8b, 0x74, + 0x15, 0x02, 0xde, 0x76, 0x70, 0x54, 0x9e, 0xe8, 0x5d, 0x44, 0x72, 0x3e, 0x9e, 0x4b, 0x28, 0xbd, + 0x60, 0x21, 0x67, 0x1b, 0x47, 0x79, 0xeb, 0x6b, 0x51, 0x72, 0xa3, 0x08, 0xe3, 0x6a, 0x29, 0xc5, + 0xfe, 0xad, 0xaf, 0xe4, 0x54, 0x34, 0x8c, 0x5c, 0xd0, 0x0e, 0xac, 0xf8, 0xf8, 0x3c, 0xef, 0xce, + 0x32, 0x54, 0xdb, 0x8c, 0xba, 0xc4, 0x76, 0xc2, 0x56, 0xc0, 0xcb, 0x93, 0xab, 0xc6, 0x5a, 0xd1, + 0xba, 0xe5, 0xe3, 0xf3, 0xcc, 0x4f, 0x0f, 0x04, 0x51, 0x8d, 0xba, 0x64, 0x5b, 0x90, 0x20, 0x06, + 0x0f, 0x68, 0xf0, 0xa9, 0x1d, 0x93, 0xcf, 0x70, 0xec, 0xda, 0x4c, 0x9c, 0x08, 0xd7, 0x8e, 0xc9, + 0x69, 0x8b, 0xc6, 0xc4, 0x17, 0xe1, 0x97, 0x37, 0x63, 0xc2, 0x9a, 0xa1, 0xe7, 0x96, 0xa7, 0xa4, + 0xda, 0xb7, 0xb5, 0xda, 0x73, 0x97, 0xd5, 0xae, 0x04, 0xdc, 0xba, 0x4b, 0x83, 0x4f, 0x2d, 0x09, + 0x56, 0x93, 0x58, 0x56, 0x06, 0x75, 0x94, 0x20, 0xa1, 0x0f, 0x60, 0x95, 0xc7, 0x58, 0x6d, 0xbe, + 0xa4, 0x65, 0xf6, 0x19, 0x51, 0xb1, 0xd2, 0x6d, 0x49, 0xbf, 0x0d, 0xca, 0x25, 0xe9, 0x20, 0xb7, + 0x35, 0x9d, 0x82, 0x64, 0xaf, 0x14, 0xd5, 0x8e, 0x26, 0x12, 0x3b, 0xed, 0xd1, 0xd3, 0x16, 0x75, + 0x31, 0x0f, 0xe3, 0x74, 0x11, 0x99, 0xd3, 0x4c, 0xf7, 0xb1, 0xd3, 0x19, 0x90, 0xd6, 0x3f, 0x75, + 0x9d, 0x73, 0x78, 0xfb, 0x98, 0x06, 0x38, 0xbe, 0xb0, 0xc3, 0x48, 0xde, 0x77, 0xd7, 0x05, 0x7a, + 0xd4, 0x5b, 0xa0, 0xbf, 0xa7, 0x10, 0x0f, 0x14, 0x60, 0xb7, 0x58, 0xff, 0x9b, 0xb0, 0x8a, 0x79, + 0xe8, 0x53, 0x27, 0x91, 0xa8, 0x4c, 0x8c, 0x1d, 0x87, 0x30, 0x66, 0x7b, 0xe4, 0x8c, 0x78, 0xe5, + 0x99, 0x55, 0x63, 0x6d, 0xf2, 0xc9, 0xbb, 0xeb, 0x57, 0x26, 0x21, 0xeb, 0x9b, 0x92, 0x5d, 0xe1, + 0x4b, 0xd3, 0x6f, 0x4a, 0xde, 0xaa, 0x60, 0xb5, 0x96, 0xf0, 0x35, 0xb3, 0xe8, 0x1c, 0x1e, 0xc8, + 0xe8, 0x7f, 0x95, 0x06, 0xe2, 0x70, 0xea, 0xb3, 0x4c, 0x49, 0x5c, 0x9e, 0xed, 0x7d, 0x9f, 0x4d, + 0x81, 0x79, 0x49, 0xab, 0x3d, 0x42, 0xf6, 0x53, 0x38, 0xf4, 0x03, 0x03, 0x1e, 0xe5, 0xfc, 0xba, + 0x07, 0x05, 0xe6, 0x7a, 0x57, 0x60, 0x2d, 0x43, 0x7e, 0x8d, 0x1a, 0xbf, 0x6f, 0xc0, 0xe3, 0x0e, + 0xc3, 0xf7, 0xa0, 0xca, 0x7c, 0xef, 0xaa, 0xbc, 0xd3, 0xe6, 0x04, 0xaf, 0xd1, 0xe6, 0x13, 0x58, + 0xf4, 0x69, 0x40, 0x7d, 0xec, 0xa9, 0x44, 0xd0, 0x09, 0xbd, 0xec, 0xea, 0x5a, 0xe8, 0x5d, 0xe8, + 0xbc, 0x46, 0x39, 0xd4, 0x20, 0xc9, 0x9d, 0xf5, 0x3d, 0x78, 0x87, 0xb2, 0xd4, 0xa5, 0x2f, 0x67, + 0x35, 0x1e, 0x6e, 0x05, 0x4e, 0xd3, 0x26, 0x01, 0x3e, 0xf6, 0x88, 0x5b, 0x2e, 0xaf, 0x1a, 0x6b, + 0x05, 0xeb, 0x2d, 0xca, 0xb4, 0xd7, 0xee, 0x74, 0x24, 0x2e, 0x55, 0x49, 0xbe, 0xab, 0xa8, 0x45, + 0xb0, 0x8a, 0x42, 0xc6, 0xed, 0x30, 0xf0, 0x2e, 0x6c, 0x3f, 0x74, 0x89, 0xdd, 0x24, 0xb4, 0xd1, + 0xcc, 0x87, 0x97, 0x45, 0x79, 0xe0, 0x6f, 0x09, 0xb2, 0x83, 0xc0, 0xbb, 0xd8, 0x0f, 0x5d, 0xf2, + 0x5c, 0xd2, 0x64, 0x71, 0xa3, 0x01, 0x8f, 0xf5, 0xe5, 0xe6, 0x12, 0x27, 0x26, 0x98, 0x11, 0x3b, + 0x8a, 0xa9, 0x43, 0x6c, 0x4e, 0x7d, 0xc2, 0x38, 0xf6, 0xa3, 0x0c, 0xcf, 0x66, 0xc4, 0x09, 0x03, + 0x97, 0x95, 0x6f, 0x4a, 0xdc, 0x6f, 0x28, 0xc6, 0x1d, 0xcd, 0x77, 0x28, 0xd8, 0x8e, 0x12, 0xae, + 0x54, 0x42, 0x4d, 0xf1, 0xa0, 0x07, 0x30, 0x95, 0x1c, 0x22, 0x1b, 0xbb, 0x3e, 0x0d, 0x58, 0xf9, + 0xd6, 0xea, 0xe0, 0xda, 0x98, 0x35, 0x99, 0x0c, 0x6f, 0xca, 0x51, 0xf4, 0x02, 0x66, 0x44, 0xf8, + 0xc4, 0x2d, 0x99, 0x08, 0xdb, 0x22, 0x20, 0x8b, 0x9b, 0x64, 0x49, 0x9a, 0x63, 0xe5, 0xda, 0x50, + 0x59, 0x36, 0xac, 0x12, 0x0d, 0x3e, 0xdd, 0x54, 0xac, 0xfb, 0xf8, 0x5c, 0x5c, 0x1d, 0x0f, 0x61, + 0xba, 0x4e, 0xcf, 0x89, 0x6b, 0x37, 0x30, 0x4b, 0xb7, 0xfa, 0xb6, 0xdc, 0xea, 0x29, 0x39, 0xf1, + 0x01, 0x66, 0xc9, 0x9e, 0xbe, 0x0f, 0x37, 0x89, 0x4f, 0xb9, 0xed, 0x49, 0xd3, 0xda, 0x67, 0x24, + 0x66, 0x42, 0x07, 0x99, 0x35, 0xb3, 0xf2, 0xb2, 0x64, 0x5a, 0x10, 0x14, 0xca, 0xf6, 0xaf, 0xd4, + 0xbc, 0x4c, 0x9c, 0x19, 0x3a, 0xce, 0x52, 0xbc, 0x98, 0xb8, 0xad, 0xce, 0xb4, 0x61, 0xa5, 0x77, + 0x7f, 0x4a, 0xb2, 0x02, 0x4b, 0xc2, 0xe4, 0x33, 0x86, 0x5f, 0x82, 0xa5, 0x0e, 0xa3, 0x1f, 0x7b, + 0xa1, 0x73, 0xc2, 0x6c, 0xec, 0xcb, 0xeb, 0xe9, 0xce, 0xaa, 0xb1, 0x36, 0x64, 0x95, 0xf3, 0x16, + 0xdf, 0x92, 0x04, 0x9b, 0x72, 0x1e, 0xed, 0xc3, 0x3d, 0x9f, 0x06, 0x76, 0x07, 0x86, 0x1b, 0x7e, + 0x16, 0x08, 0x7b, 0x67, 0x57, 0x85, 0x29, 0xeb, 0x82, 0x15, 0x9f, 0x06, 0x87, 0x39, 0xa8, 0x1d, + 0x4d, 0x97, 0x5e, 0x16, 0xdf, 0x85, 0x77, 0xae, 0x53, 0xc7, 0xc6, 0x75, 0x4e, 0xe2, 0x14, 0xbe, + 0x7c, 0x57, 0x6a, 0x77, 0xbf, 0x9b, 0x76, 0x9b, 0x82, 0x3a, 0x91, 0x81, 0xfe, 0xc8, 0x80, 0x87, + 0x2e, 0x89, 0x62, 0xe2, 0x60, 0x4e, 0x5c, 0x9b, 0xe8, 0x22, 0xc9, 0x8e, 0x73, 0x55, 0x92, 0x9d, + 0x14, 0x3a, 0xac, 0x7c, 0x6f, 0x75, 0x70, 0x6d, 0xbc, 0x6b, 0xcc, 0xbe, 0xae, 0xc4, 0xd2, 0xd7, + 0xc7, 0x83, 0x4c, 0xd8, 0x75, 0xd4, 0x4c, 0x64, 0x6d, 0x9f, 0x35, 0x29, 0x27, 0xf6, 0x49, 0x20, + 0xcf, 0x5b, 0x76, 0xcb, 0xb1, 0xf2, 0x7d, 0xe9, 0xd2, 0xf3, 0x72, 0xfe, 0x23, 0x39, 0x5d, 0xcd, + 0x66, 0xd1, 0x6f, 0xc1, 0xdb, 0x5d, 0x38, 0xaf, 0xb8, 0x68, 0xdf, 0xea, 0xdd, 0x5f, 0xee, 0x5d, + 0x29, 0xaf, 0xf3, 0xce, 0xfd, 0x04, 0x66, 0x9c, 0x38, 0x64, 0x2c, 0x71, 0xcb, 0x48, 0x96, 0x75, + 0xe5, 0x07, 0xf2, 0x76, 0x5d, 0xeb, 0xb2, 0x71, 0xdb, 0x82, 0x43, 0x79, 0xa0, 0x2a, 0x03, 0xf5, + 0x6e, 0x4d, 0x3b, 0x9d, 0x13, 0xcf, 0xca, 0xa2, 0x60, 0xfc, 0xe1, 0x7f, 0xfe, 0xd5, 0xc3, 0xf4, + 0xa0, 0x6f, 0xa8, 0x99, 0x0f, 0x87, 0x0a, 0xab, 0xa5, 0x3b, 0xe6, 0xf7, 0x0b, 0x30, 0x7d, 0x09, + 0x0e, 0xfd, 0x3a, 0xdc, 0x8c, 0x42, 0x46, 0x65, 0x58, 0x6c, 0x45, 0x81, 0x67, 0x37, 0x31, 0x8d, + 0x9d, 0x96, 0xce, 0xeb, 0x8c, 0x3e, 0xea, 0xa2, 0x04, 0xe6, 0x65, 0x14, 0x78, 0xcf, 0x15, 0x88, + 0xce, 0xea, 0xc6, 0xeb, 0x84, 0x30, 0xfb, 0xb8, 0x55, 0xaf, 0x93, 0x58, 0x95, 0xbc, 0xbd, 0x41, + 0x82, 0xe0, 0xdb, 0x92, 0x6c, 0xe8, 0x9b, 0x30, 0xab, 0x83, 0x87, 0x7d, 0xda, 0x0a, 0x39, 0xb1, + 0x5d, 0x12, 0x84, 0x3e, 0x2b, 0x0f, 0x4a, 0x8b, 0x23, 0x3d, 0xf7, 0xb1, 0x98, 0xda, 0x91, 0x33, + 0xe8, 0x1d, 0x98, 0x8e, 0x48, 0x1c, 0x11, 0xde, 0xc2, 0x5e, 0x1a, 0x78, 0x86, 0x64, 0x0c, 0x29, + 0xa5, 0x13, 0x49, 0xe4, 0xb9, 0x0f, 0x93, 0xe4, 0x3c, 0xa2, 0xf1, 0x45, 0x4a, 0x39, 0x2c, 0x29, + 0x8b, 0x6a, 0x34, 0x21, 0xfb, 0x18, 0xde, 0x12, 0x01, 0x11, 0x4b, 0x43, 0x5d, 0xbe, 0x51, 0x98, + 0x1d, 0x91, 0xd8, 0x8e, 0xc2, 0xd0, 0x93, 0x95, 0x57, 0xd1, 0xba, 0xe3, 0xe3, 0xf3, 0x4d, 0x49, + 0xdc, 0x79, 0x99, 0xb0, 0x43, 0x12, 0x1f, 0x86, 0xa1, 0x2c, 0x25, 0x88, 0x4f, 0xe2, 0x06, 0x09, + 0x9c, 0x0b, 0x5b, 0x36, 0x02, 0x5c, 0x59, 0x4c, 0x15, 0xac, 0xa9, 0x74, 0xfc, 0x50, 0x0e, 0xa3, + 0xef, 0xc0, 0xdc, 0x31, 0x76, 0x4e, 0x18, 0x0f, 0xa3, 0x37, 0x2e, 0x89, 0x66, 0x12, 0x84, 0x7c, + 0x58, 0xb3, 0x61, 0x31, 0xc2, 0xb1, 0x2c, 0xea, 0x92, 0x33, 0x21, 0xe2, 0xae, 0x02, 0x1f, 0xeb, + 0xc7, 0x07, 0x14, 0x4a, 0x35, 0x03, 0x49, 0xe2, 0xe6, 0xad, 0x3c, 0xb0, 0x13, 0x86, 0x9e, 0x88, + 0x4a, 0x3a, 0x5c, 0xc9, 0xd2, 0x69, 0x28, 0xcb, 0x57, 0x69, 0x18, 0x6c, 0x6b, 0x0a, 0x15, 0x9f, + 0x90, 0x07, 0x4f, 0xe5, 0x45, 0x94, 0x3f, 0x3f, 0x32, 0x93, 0x93, 0xf9, 0x8a, 0xda, 0x76, 0xd6, + 0x3a, 0xc6, 0x8e, 0xac, 0x12, 0xe4, 0xa7, 0xf4, 0x0f, 0x59, 0x98, 0x14, 0xad, 0x47, 0x3e, 0x3e, + 0xcf, 0xb9, 0xbe, 0x28, 0xdd, 0x65, 0x3a, 0x22, 0x8c, 0x50, 0x4b, 0xd9, 0x0e, 0x49, 0x2c, 0x5d, + 0x07, 0x6d, 0x01, 0xb4, 0x38, 0xf5, 0xf4, 0xfa, 0x27, 0x7b, 0x5f, 0xff, 0x98, 0x60, 0x53, 0x2b, + 0xfe, 0xbe, 0x01, 0xdf, 0x16, 0x2a, 0x53, 0x16, 0x7a, 0x32, 0x80, 0x5e, 0xef, 0x33, 0x57, 0x2a, + 0x3f, 0x25, 0x95, 0xff, 0x39, 0x1f, 0x9f, 0x57, 0x34, 0x4a, 0x77, 0x5f, 0xba, 0xbc, 0x0c, 0xd5, + 0x41, 0xfa, 0x70, 0xa8, 0x30, 0x5e, 0x9a, 0xf8, 0x70, 0xa8, 0x30, 0x51, 0x2a, 0x9a, 0xbf, 0x08, + 0xb3, 0x2f, 0xc8, 0x79, 0x52, 0xcd, 0xa6, 0xc9, 0x82, 0xf0, 0xfe, 0x80, 0x9c, 0xf3, 0x2c, 0xe9, + 0x90, 0x07, 0x7f, 0xd0, 0x2a, 0x8a, 0xd1, 0x94, 0xcc, 0xfc, 0x2f, 0x03, 0x26, 0xf7, 0xa9, 0x2b, + 0x33, 0x8d, 0xcd, 0xc0, 0x3d, 0x3a, 0xd8, 0x42, 0xbf, 0x0c, 0x63, 0x3e, 0x75, 0x55, 0xce, 0x92, + 0x8b, 0x16, 0xc6, 0xeb, 0x76, 0xaa, 0xe0, 0x6b, 0x1c, 0x54, 0x81, 0xc9, 0x63, 0x51, 0x47, 0x1e, + 0xb7, 0x2e, 0x34, 0xcc, 0x40, 0xef, 0x30, 0x13, 0x82, 0x75, 0xab, 0x75, 0xa1, 0xa0, 0x3e, 0x82, + 0x29, 0x09, 0xc5, 0x88, 0xe7, 0x69, 0xac, 0xc1, 0xde, 0xb1, 0x8a, 0x82, 0xb7, 0x46, 0x3c, 0x4f, + 0x82, 0x99, 0x7f, 0x6e, 0xc0, 0xe8, 0x0e, 0x91, 0x41, 0x0d, 0x1d, 0xc2, 0x34, 0x3e, 0xc3, 0xd4, + 0x13, 0x41, 0xc0, 0x3e, 0xc6, 0x1e, 0x0e, 0x9c, 0xbe, 0x62, 0x63, 0x29, 0xe5, 0xde, 0x52, 0xcc, + 0xe8, 0x39, 0x14, 0x79, 0xc8, 0xb1, 0x97, 0xa2, 0xf5, 0x11, 0x16, 0x27, 0x24, 0xa7, 0x46, 0x32, + 0xbf, 0x01, 0xb3, 0x99, 0xed, 0x8f, 0x62, 0xec, 0x92, 0x17, 0xa1, 0x90, 0x30, 0x0b, 0xc3, 0x41, + 0x98, 0xe8, 0x59, 0xb4, 0xd4, 0x87, 0xf9, 0x77, 0x06, 0x4c, 0x65, 0xe4, 0xf2, 0x10, 0xa0, 0x9f, + 0x87, 0xe1, 0x4e, 0xfb, 0xbd, 0x56, 0x07, 0xc5, 0x81, 0xbe, 0x0d, 0x85, 0xd3, 0x16, 0x0e, 0x38, + 0xe5, 0x17, 0xfd, 0xac, 0x20, 0x65, 0x42, 0x26, 0x4c, 0x50, 0xa6, 0xf2, 0x2c, 0x91, 0x92, 0x48, + 0x7b, 0x15, 0xac, 0xb6, 0x31, 0x54, 0x82, 0x41, 0x87, 0xaa, 0xd0, 0x3d, 0x66, 0x89, 0x3f, 0xcd, + 0x18, 0x66, 0x3a, 0x16, 0xb1, 0x83, 0x39, 0x46, 0xbf, 0x00, 0xc3, 0x32, 0x1e, 0xe8, 0x3e, 0xe8, + 0x5b, 0x5d, 0xee, 0xd4, 0x0e, 0x56, 0x4b, 0x31, 0xa1, 0xdb, 0x00, 0xaa, 0xfa, 0x69, 0x62, 0xd6, + 0x94, 0xab, 0x99, 0xb0, 0xc6, 0xe4, 0xc8, 0x73, 0xcc, 0x9a, 0xe6, 0xdf, 0x0f, 0x40, 0xe1, 0x50, + 0x5e, 0x71, 0x61, 0x80, 0xe6, 0x61, 0x84, 0xb2, 0x6a, 0x18, 0x34, 0xa4, 0xa8, 0x82, 0xa5, 0xbf, + 0xbe, 0xfe, 0x7e, 0xec, 0xc0, 0x38, 0x09, 0x78, 0x7c, 0x71, 0xc9, 0x7d, 0x5f, 0x7f, 0x59, 0x4a, + 0x3e, 0x75, 0x10, 0xde, 0x87, 0x11, 0x15, 0x24, 0xfb, 0x69, 0x6c, 0x6a, 0x16, 0xf4, 0x6b, 0x50, + 0x76, 0x5a, 0x7e, 0xcb, 0x53, 0x41, 0x2a, 0x69, 0x29, 0x49, 0xf4, 0x7e, 0xda, 0x97, 0xf3, 0x19, + 0x88, 0x8e, 0x37, 0xbb, 0x02, 0xc2, 0xfc, 0xa1, 0x01, 0xa3, 0xc9, 0x29, 0xb8, 0x0b, 0xc5, 0x5c, + 0xe0, 0xa3, 0xae, 0xf2, 0x40, 0x6b, 0x22, 0x1b, 0xac, 0xb8, 0xc2, 0x91, 0x55, 0x38, 0x54, 0xcd, + 0x72, 0xf5, 0x81, 0x9e, 0x41, 0xc1, 0x55, 0xa7, 0x93, 0xc9, 0x5d, 0x1a, 0x7f, 0xb2, 0xdc, 0xc5, + 0xdc, 0xfa, 0x10, 0x5b, 0x29, 0xfd, 0xb3, 0xc2, 0xef, 0x7d, 0xbe, 0x72, 0xe3, 0x67, 0x9f, 0xaf, + 0xdc, 0x30, 0x7f, 0x6c, 0x00, 0xca, 0xa2, 0x69, 0x6a, 0xde, 0x9e, 0xf4, 0xba, 0x05, 0x63, 0x49, + 0xd3, 0xc4, 0xd5, 0xba, 0x15, 0xd4, 0x40, 0x45, 0x54, 0x32, 0x85, 0x48, 0xa3, 0x69, 0xf5, 0x56, + 0xba, 0xa8, 0x97, 0x08, 0xb5, 0x52, 0x86, 0x9c, 0x7e, 0x15, 0x98, 0xcd, 0x55, 0xcf, 0x95, 0xc0, + 0xa5, 0x8e, 0x48, 0x2d, 0xdb, 0x65, 0x1b, 0x1d, 0xb2, 0x67, 0x61, 0x98, 0xb2, 0xad, 0x96, 0xf2, + 0xc0, 0x82, 0xa5, 0x3e, 0xcc, 0x7f, 0x1a, 0x80, 0x82, 0x0c, 0x0f, 0xd5, 0xb0, 0xdd, 0x4f, 0x8d, + 0x37, 0xf1, 0xd3, 0x34, 0x66, 0x0c, 0xf4, 0x1d, 0x33, 0x2e, 0x6d, 0xee, 0xa0, 0x3c, 0x6a, 0xed, + 0x9b, 0xfb, 0x14, 0x06, 0xeb, 0xa4, 0xaf, 0xbe, 0xbc, 0xa0, 0xef, 0x38, 0xc3, 0xc3, 0x1d, 0x67, + 0x18, 0xbd, 0x07, 0x73, 0xb2, 0xbf, 0x40, 0x1c, 0x1a, 0x51, 0x12, 0x64, 0x2f, 0x3a, 0x22, 0x5b, + 0x9b, 0x90, 0xa9, 0xb5, 0x61, 0xcd, 0xd4, 0x09, 0xb1, 0x12, 0x8a, 0xe4, 0x05, 0x47, 0xc7, 0xa0, + 0xd1, 0x2c, 0x06, 0xfd, 0xf1, 0x00, 0x14, 0x13, 0xdb, 0xed, 0x10, 0x8f, 0x63, 0xb4, 0x00, 0xa3, + 0x94, 0xd9, 0xde, 0xe5, 0xa8, 0x60, 0x01, 0x22, 0xe7, 0xc4, 0x69, 0xc9, 0xdc, 0xe7, 0x4d, 0xe2, + 0xc3, 0x74, 0xca, 0xfe, 0x71, 0x62, 0x80, 0x17, 0x50, 0xca, 0x30, 0xf5, 0x61, 0xef, 0x23, 0x5a, + 0x4c, 0xa5, 0xcc, 0x2a, 0x25, 0x42, 0x55, 0xc8, 0x86, 0x74, 0xf0, 0xe9, 0x63, 0xf3, 0x27, 0x53, + 0x5e, 0x75, 0x79, 0xfe, 0xc9, 0x60, 0xfe, 0x5c, 0xa5, 0x6e, 0x77, 0xe5, 0xb9, 0xea, 0x34, 0xfd, + 0x47, 0x30, 0x99, 0x9c, 0x04, 0xdb, 0x15, 0x1b, 0xab, 0x5f, 0x9a, 0xee, 0xbd, 0xe6, 0x00, 0x49, + 0x23, 0x58, 0xc5, 0xa8, 0xcd, 0x26, 0xef, 0xc3, 0x48, 0x84, 0x2f, 0xc2, 0x16, 0xef, 0x67, 0x73, + 0x34, 0xcb, 0xff, 0x7f, 0x27, 0x14, 0x1a, 0x46, 0x81, 0xd7, 0x4f, 0xfe, 0x2f, 0xe8, 0xcd, 0x33, + 0x40, 0xb9, 0x7c, 0x31, 0x89, 0x7a, 0xf9, 0x98, 0x65, 0xf4, 0x19, 0xb3, 0x2e, 0x9b, 0x76, 0xe0, + 0xb2, 0x69, 0xcd, 0x18, 0xa6, 0x33, 0xb9, 0x49, 0x72, 0xd5, 0x93, 0x53, 0xbc, 0x07, 0xa3, 0x3a, + 0x7c, 0x6b, 0x6f, 0x78, 0x5d, 0xb4, 0x4f, 0xc8, 0xcd, 0x13, 0x28, 0xea, 0xb1, 0x97, 0x91, 0x2b, + 0xea, 0xd1, 0xf4, 0x3e, 0x31, 0xf2, 0xf7, 0xc9, 0x4e, 0xee, 0x3e, 0x19, 0x90, 0xbd, 0x8c, 0xb5, + 0xd7, 0xa6, 0x0f, 0x97, 0x6e, 0x16, 0xf3, 0x1f, 0x0d, 0x28, 0x1d, 0x86, 0x34, 0xe0, 0x2c, 0xd7, + 0xe6, 0xfc, 0x1e, 0x2c, 0xa8, 0x57, 0xc0, 0x48, 0xce, 0xe4, 0x3b, 0xab, 0x7d, 0xc4, 0xde, 0x39, + 0x89, 0x71, 0x15, 0x38, 0xef, 0x02, 0xde, 0x47, 0x80, 0x99, 0xe3, 0x57, 0x81, 0x9b, 0xff, 0x3d, + 0x00, 0xcb, 0x47, 0xf9, 0xe7, 0x8a, 0x6d, 0xec, 0x47, 0x98, 0x36, 0x82, 0xad, 0x30, 0x64, 0xbc, + 0x12, 0xd4, 0x43, 0xf4, 0x14, 0x16, 0x8e, 0xc5, 0x07, 0x71, 0xed, 0xb6, 0xd7, 0x69, 0x97, 0x95, + 0x0d, 0x59, 0x9a, 0xcf, 0xea, 0xe9, 0x5a, 0xf6, 0xe6, 0xec, 0x32, 0x44, 0x60, 0x21, 0x4f, 0x9e, + 0x69, 0x9d, 0xec, 0xfe, 0x83, 0xae, 0xae, 0xd7, 0xae, 0xa3, 0xee, 0x87, 0xcc, 0x65, 0x4f, 0xda, + 0xd9, 0x1c, 0x43, 0x9b, 0x70, 0x3b, 0xd1, 0xee, 0x8a, 0x47, 0x6d, 0x37, 0x69, 0x1f, 0xdc, 0xd4, + 0x44, 0x9d, 0x85, 0x95, 0xd0, 0xf4, 0x14, 0x6e, 0x5f, 0x66, 0xcd, 0xeb, 0x3b, 0xf4, 0x26, 0xfa, + 0xde, 0xea, 0x7c, 0x15, 0xcf, 0x69, 0x6d, 0xfe, 0x8d, 0x01, 0x28, 0xd9, 0x69, 0xb5, 0xef, 0xb2, + 0x53, 0xf0, 0x00, 0xa6, 0x18, 0xc7, 0xf1, 0xe5, 0x32, 0x6d, 0x52, 0x0e, 0x67, 0xe5, 0xdc, 0x6f, + 0xc3, 0xac, 0x6a, 0xdb, 0x2a, 0x88, 0xe4, 0x45, 0x4a, 0xef, 0xec, 0x35, 0x0f, 0x39, 0xdf, 0x14, + 0xba, 0xfd, 0xe5, 0xbf, 0xaf, 0xac, 0x35, 0x28, 0x6f, 0xb6, 0x8e, 0xd7, 0x9d, 0xd0, 0xd7, 0x3f, + 0xce, 0xd0, 0xff, 0x3d, 0x62, 0xee, 0xc9, 0x06, 0xbf, 0x88, 0x08, 0x93, 0x0c, 0xcc, 0x42, 0xa2, + 0xb2, 0x6e, 0x53, 0x95, 0x99, 0x7f, 0x36, 0x00, 0x8b, 0x57, 0x7a, 0x8d, 0x74, 0x98, 0x67, 0xb0, + 0x98, 0x2a, 0x96, 0xf4, 0x3b, 0xd3, 0xce, 0xb6, 0x5a, 0xcf, 0x42, 0x42, 0x90, 0x34, 0x3a, 0x93, + 0x26, 0xf6, 0x1d, 0x98, 0x68, 0x6b, 0xfe, 0x0c, 0x48, 0xeb, 0x8d, 0x9f, 0xe6, 0xba, 0x3e, 0x11, + 0x2c, 0xb6, 0x3f, 0xc4, 0xd9, 0xd2, 0xb6, 0x36, 0x0d, 0xea, 0xa1, 0xce, 0xc4, 0x9e, 0x76, 0x31, + 0xd5, 0xf5, 0x9e, 0x6e, 0xcd, 0xb7, 0x3d, 0xdc, 0x65, 0x27, 0xe0, 0x5b, 0xb0, 0xe0, 0x52, 0x76, + 0xda, 0xc2, 0x1e, 0xad, 0x53, 0xe2, 0xe6, 0xbd, 0x6b, 0x48, 0xea, 0x37, 0x97, 0x9f, 0x4e, 0x1d, + 0xcb, 0xfc, 0xdb, 0x01, 0x98, 0xd9, 0x23, 0x64, 0x87, 0x32, 0x55, 0xba, 0x51, 0x91, 0xe0, 0xd5, + 0x43, 0x54, 0x83, 0x19, 0x15, 0x2e, 0x5c, 0x3d, 0xd3, 0x77, 0x2b, 0x6e, 0x5a, 0xf2, 0x27, 0xc0, + 0xb2, 0x09, 0x57, 0x83, 0x19, 0x7e, 0x05, 0x68, 0x3f, 0x39, 0x08, 0xbf, 0x04, 0xba, 0x05, 0x45, + 0xfd, 0xbc, 0xaa, 0xdb, 0xdf, 0x83, 0xbd, 0xbc, 0xa7, 0x4e, 0x28, 0x1e, 0xdd, 0x11, 0x7f, 0x1f, + 0x46, 0xce, 0x42, 0xaf, 0xe5, 0xf7, 0x75, 0xcd, 0x6a, 0x16, 0xf3, 0x77, 0xdb, 0xb7, 0xb0, 0xe6, + 0x34, 0x89, 0xdb, 0xf2, 0x88, 0xf0, 0x93, 0xe3, 0x96, 0x23, 0xac, 0xa0, 0x5e, 0x8d, 0x0d, 0xd9, + 0x5f, 0x1a, 0x57, 0x63, 0xea, 0x95, 0xf8, 0x01, 0x4c, 0x69, 0x92, 0xb4, 0xe9, 0x3e, 0xa0, 0x0e, + 0x93, 0x1a, 0x4e, 0x7b, 0xec, 0x9d, 0x3e, 0x37, 0x78, 0xd9, 0xe7, 0x2a, 0x00, 0x9c, 0x92, 0x58, + 0xfa, 0x58, 0x12, 0x0f, 0x1e, 0x76, 0x71, 0xb2, 0x2b, 0x2c, 0x6e, 0x8d, 0x71, 0xfd, 0x17, 0xbb, + 0xce, 0x99, 0x86, 0xaf, 0x73, 0xa6, 0x7d, 0x40, 0x1d, 0xc8, 0x47, 0x47, 0x55, 0x84, 0x60, 0x88, + 0x27, 0xd7, 0xcc, 0x90, 0x25, 0xff, 0x16, 0xd7, 0x2d, 0xe7, 0x5e, 0x2e, 0x86, 0xa8, 0x65, 0x4f, + 0x70, 0xee, 0x65, 0x9d, 0x9e, 0x3f, 0x30, 0x60, 0x72, 0x53, 0x5d, 0x72, 0xfa, 0x54, 0xa3, 0x32, + 0x8c, 0xea, 0x6b, 0x4f, 0x5f, 0x9c, 0xc9, 0x27, 0x22, 0x30, 0xfa, 0x7f, 0x18, 0x61, 0x12, 0x6c, + 0xf3, 0x77, 0x0c, 0x98, 0x90, 0x99, 0xa4, 0x45, 0x9c, 0x50, 0x68, 0x74, 0x6d, 0x11, 0x74, 0x04, + 0xb3, 0x1e, 0xe6, 0x84, 0x71, 0x5b, 0x1c, 0x5b, 0x99, 0x6e, 0x85, 0x99, 0x86, 0xe6, 0x35, 0x21, + 0x40, 0xe3, 0x5b, 0x48, 0xf1, 0xe7, 0x45, 0x9a, 0xdf, 0x82, 0x62, 0x76, 0xfd, 0x57, 0x76, 0x18, + 0xba, 0x0f, 0x93, 0x6d, 0xc9, 0x8b, 0xba, 0xf5, 0x26, 0xac, 0x62, 0x3e, 0x7b, 0x61, 0xe6, 0x5f, + 0x18, 0x30, 0x9e, 0x03, 0x42, 0x4b, 0x30, 0xd6, 0x19, 0xc4, 0xb3, 0x81, 0xaf, 0x53, 0x5c, 0xe5, + 0x0b, 0xbb, 0xc1, 0x37, 0x28, 0xec, 0x4c, 0x1f, 0x86, 0xd5, 0x5b, 0xf9, 0x63, 0x30, 0xa2, 0x7e, + 0x82, 0x8e, 0x11, 0x09, 0x96, 0xd3, 0x7e, 0x74, 0x36, 0x4e, 0xcd, 0x3f, 0x34, 0x60, 0x65, 0xb3, + 0xd1, 0x88, 0x49, 0x03, 0x73, 0x92, 0x6d, 0xed, 0x2b, 0x79, 0xbe, 0xf5, 0x66, 0xf5, 0x54, 0x8d, + 0x7f, 0x08, 0x93, 0xda, 0x19, 0x54, 0x6c, 0x48, 0x2c, 0x7d, 0xb7, 0x8b, 0xa5, 0xd5, 0xd1, 0xd1, + 0x72, 0x8a, 0x7e, 0xee, 0x8b, 0x99, 0x3f, 0x30, 0x60, 0x29, 0x55, 0x6a, 0xf3, 0x0a, 0x8d, 0xba, + 0x9f, 0x85, 0xff, 0x4d, 0x35, 0x36, 0x45, 0xe6, 0x1a, 0x84, 0xfe, 0x0e, 0x71, 0xa8, 0x8f, 0x3d, + 0xd6, 0x25, 0x73, 0xbd, 0x29, 0x32, 0x57, 0x45, 0x21, 0x37, 0x7f, 0xc8, 0x4a, 0xbf, 0x4d, 0x02, + 0xe8, 0x83, 0x18, 0x07, 0x7c, 0xb3, 0xc5, 0x9b, 0x61, 0x4c, 0x7f, 0x43, 0x85, 0xb4, 0x32, 0x8c, + 0x36, 0xc4, 0xa8, 0xfe, 0xc5, 0xe0, 0x98, 0x95, 0x7c, 0xa2, 0xa7, 0x30, 0xa2, 0x43, 0xf9, 0x40, + 0x2f, 0xa1, 0x5c, 0x13, 0x9b, 0x9f, 0xc0, 0xb8, 0xea, 0x4c, 0x4b, 0x61, 0x19, 0x7e, 0xdc, 0x8e, + 0x1f, 0xbf, 0x29, 0xfe, 0x8f, 0x0c, 0x98, 0xdc, 0xad, 0xd7, 0x49, 0x4f, 0x32, 0x2a, 0x30, 0x1d, + 0x10, 0x6e, 0xab, 0x4f, 0xfd, 0x03, 0xa0, 0xde, 0xc4, 0x4d, 0x05, 0x84, 0x7f, 0xa0, 0xd8, 0xe4, + 0x4f, 0x7d, 0xd0, 0x22, 0x14, 0x28, 0xb3, 0xcf, 0xb0, 0xa7, 0xbb, 0x14, 0x05, 0x6b, 0x94, 0xb2, + 0x57, 0xe2, 0xd3, 0x8c, 0xa0, 0x24, 0x8d, 0xb3, 0x4f, 0x83, 0x17, 0xa1, 0xd8, 0x55, 0xec, 0x75, + 0xb1, 0xcf, 0x1e, 0x4c, 0xf8, 0x34, 0xb0, 0x03, 0x4d, 0xd5, 0xcf, 0x01, 0x19, 0xf7, 0x33, 0x74, + 0xf3, 0x1f, 0x0c, 0x98, 0xcb, 0x4e, 0x88, 0x45, 0xd9, 0xc9, 0x61, 0x1c, 0xd6, 0xa9, 0x47, 0xd0, + 0xbb, 0x30, 0xe4, 0x87, 0xae, 0x32, 0xe6, 0x64, 0xd7, 0xa2, 0x4d, 0x70, 0xec, 0x87, 0x2e, 0xb1, + 0x24, 0x31, 0xfa, 0x0e, 0xa0, 0x98, 0x30, 0x12, 0x9f, 0xa9, 0x0c, 0x2c, 0x0a, 0x3d, 0xea, 0xa8, + 0xa6, 0xc4, 0x64, 0xd7, 0xd2, 0xc7, 0xca, 0x18, 0x0e, 0x25, 0xbd, 0x35, 0x1d, 0x77, 0x0e, 0xa1, + 0x7b, 0x30, 0xe9, 0xc4, 0xc4, 0xa5, 0xdc, 0xf6, 0x68, 0x40, 0x92, 0x06, 0xcf, 0x98, 0x35, 0xa1, + 0x46, 0xab, 0x34, 0x20, 0x15, 0xf7, 0xe1, 0xbf, 0x18, 0x50, 0xdc, 0x4d, 0x9a, 0x06, 0x47, 0x17, + 0x11, 0x41, 0x4b, 0x50, 0x7e, 0x19, 0xb0, 0x88, 0x38, 0xf2, 0x6a, 0x6b, 0x9b, 0x2b, 0xdd, 0x40, + 0x00, 0x23, 0xea, 0xac, 0x94, 0x0c, 0x54, 0x84, 0xb1, 0x2a, 0xf5, 0x29, 0xdf, 0xa3, 0x9e, 0x57, + 0x1a, 0x40, 0x37, 0x61, 0x5e, 0x7e, 0xee, 0x63, 0xee, 0x34, 0x2d, 0xf5, 0x7b, 0x2a, 0xd9, 0x2f, + 0x2b, 0x0d, 0xa2, 0x79, 0x40, 0xd9, 0xdc, 0x0b, 0xf2, 0x99, 0x1a, 0x1f, 0x42, 0x73, 0x30, 0xad, + 0x7f, 0xd4, 0x91, 0xbd, 0x39, 0x95, 0x86, 0x05, 0xd4, 0xae, 0x7c, 0xf0, 0x53, 0x93, 0x35, 0xc2, + 0xb9, 0x27, 0x7f, 0xe9, 0x55, 0x1a, 0x11, 0x50, 0x07, 0xf5, 0x3a, 0x23, 0x5c, 0xe0, 0x27, 0x15, + 0x70, 0x69, 0x54, 0x68, 0x53, 0xbb, 0x08, 0x78, 0x93, 0x70, 0xea, 0x94, 0x0a, 0x0f, 0x4f, 0xa0, + 0x90, 0xec, 0x34, 0x5a, 0x84, 0x39, 0xab, 0x52, 0xfb, 0xc8, 0xde, 0x3f, 0xd8, 0xd9, 0xb5, 0x5f, + 0xbe, 0xa8, 0x1d, 0xee, 0x6e, 0x57, 0xf6, 0x2a, 0xbb, 0x3b, 0xa5, 0x1b, 0x02, 0x2d, 0x9b, 0xaa, + 0xd4, 0x0e, 0xaa, 0x9b, 0x47, 0xbb, 0x3b, 0x25, 0x03, 0xcd, 0xc0, 0x54, 0x36, 0xbe, 0x6d, 0x1d, + 0xd4, 0x6a, 0xa5, 0x01, 0xb4, 0x00, 0x33, 0xd9, 0xe0, 0xe1, 0x81, 0x75, 0xb4, 0x77, 0x50, 0xad, + 0x1c, 0x94, 0x06, 0x1f, 0xfe, 0xa9, 0x01, 0xd3, 0x97, 0x8c, 0x82, 0x4c, 0x58, 0xb6, 0x76, 0x6b, + 0xbb, 0xd6, 0xab, 0xcd, 0xa3, 0xca, 0xc1, 0x0b, 0xfb, 0xf0, 0xa0, 0x5a, 0xd9, 0xfe, 0xd5, 0x0e, + 0xf9, 0xab, 0xb0, 0x74, 0x05, 0xcd, 0xde, 0xcb, 0x6a, 0xd5, 0x7e, 0x7e, 0x50, 0x15, 0x9a, 0xdc, + 0x85, 0x95, 0x2b, 0x28, 0x0e, 0x37, 0xad, 0xa3, 0xca, 0xa6, 0x26, 0x1a, 0x40, 0xcb, 0x70, 0xf3, + 0x0a, 0xa2, 0x17, 0x07, 0x6a, 0x7e, 0x70, 0xeb, 0xe4, 0x8b, 0x2f, 0x97, 0x8d, 0x9f, 0x7c, 0xb9, + 0x6c, 0xfc, 0xc7, 0x97, 0xcb, 0xc6, 0x8f, 0xbe, 0x5a, 0xbe, 0xf1, 0x93, 0xaf, 0x96, 0x6f, 0xfc, + 0xeb, 0x57, 0xcb, 0x37, 0xbe, 0xfb, 0x71, 0x2e, 0x03, 0xa8, 0x24, 0xde, 0x56, 0xc5, 0xc7, 0x6c, + 0x23, 0xf5, 0xbd, 0x47, 0x4e, 0x18, 0x93, 0xfc, 0x67, 0x13, 0xd3, 0x60, 0xc3, 0x0f, 0x45, 0x8e, + 0xc7, 0xb2, 0x9f, 0x74, 0xcb, 0x6c, 0x61, 0xe3, 0xec, 0xc9, 0xf1, 0x88, 0xfc, 0x15, 0xd1, 0xbb, + 0xff, 0x13, 0x00, 0x00, 0xff, 0xff, 0x50, 0xc7, 0x4d, 0x69, 0xe4, 0x2e, 0x00, 0x00, } func (this *EnforcedRestrictionsContract) Equal(that interface{}) bool { @@ -2977,6 +3048,24 @@ func (this *CrossMarginParams) Equal(that interface{}) bool { if this.EmergencyPaused != that1.EmergencyPaused { return false } + if !this.BackstopMarginRatio.Equal(that1.BackstopMarginRatio) { + return false + } + if !this.PartialLiquidationRatio.Equal(that1.PartialLiquidationRatio) { + return false + } + if this.LiquidationCooldownBlocks != that1.LiquidationCooldownBlocks { + return false + } + if this.MaxCrossMarginSpotOrdersPerSubaccountPerDenom != that1.MaxCrossMarginSpotOrdersPerSubaccountPerDenom { + return false + } + if !this.UtilRatio.Equal(that1.UtilRatio) { + return false + } + if this.MaxIsolatedActiveDerivativeMarketsPerSubaccountPerDenom != that1.MaxIsolatedActiveDerivativeMarketsPerSubaccountPerDenom { + return false + } return true } func (m *EnforcedRestrictionsContract) Marshal() (dAtA []byte, err error) { @@ -3439,6 +3528,51 @@ func (m *CrossMarginParams) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.MaxIsolatedActiveDerivativeMarketsPerSubaccountPerDenom != 0 { + i = encodeVarintExchange(dAtA, i, uint64(m.MaxIsolatedActiveDerivativeMarketsPerSubaccountPerDenom)) + i-- + dAtA[i] = 0x78 + } + { + size := m.UtilRatio.Size() + i -= size + if _, err := m.UtilRatio.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintExchange(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x72 + if m.MaxCrossMarginSpotOrdersPerSubaccountPerDenom != 0 { + i = encodeVarintExchange(dAtA, i, uint64(m.MaxCrossMarginSpotOrdersPerSubaccountPerDenom)) + i-- + dAtA[i] = 0x68 + } + if m.LiquidationCooldownBlocks != 0 { + i = encodeVarintExchange(dAtA, i, uint64(m.LiquidationCooldownBlocks)) + i-- + dAtA[i] = 0x50 + } + { + size := m.PartialLiquidationRatio.Size() + i -= size + if _, err := m.PartialLiquidationRatio.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintExchange(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x4a + { + size := m.BackstopMarginRatio.Size() + i -= size + if _, err := m.BackstopMarginRatio.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintExchange(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x42 if m.EmergencyPaused { i-- if m.EmergencyPaused { @@ -5426,6 +5560,21 @@ func (m *CrossMarginParams) Size() (n int) { if m.EmergencyPaused { n += 2 } + l = m.BackstopMarginRatio.Size() + n += 1 + l + sovExchange(uint64(l)) + l = m.PartialLiquidationRatio.Size() + n += 1 + l + sovExchange(uint64(l)) + if m.LiquidationCooldownBlocks != 0 { + n += 1 + sovExchange(uint64(m.LiquidationCooldownBlocks)) + } + if m.MaxCrossMarginSpotOrdersPerSubaccountPerDenom != 0 { + n += 1 + sovExchange(uint64(m.MaxCrossMarginSpotOrdersPerSubaccountPerDenom)) + } + l = m.UtilRatio.Size() + n += 1 + l + sovExchange(uint64(l)) + if m.MaxIsolatedActiveDerivativeMarketsPerSubaccountPerDenom != 0 { + n += 1 + sovExchange(uint64(m.MaxIsolatedActiveDerivativeMarketsPerSubaccountPerDenom)) + } return n } @@ -7597,6 +7746,165 @@ func (m *CrossMarginParams) Unmarshal(dAtA []byte) error { } } m.EmergencyPaused = bool(v != 0) + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field BackstopMarginRatio", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowExchange + } + 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 ErrInvalidLengthExchange + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthExchange + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.BackstopMarginRatio.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PartialLiquidationRatio", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowExchange + } + 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 ErrInvalidLengthExchange + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthExchange + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.PartialLiquidationRatio.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 10: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field LiquidationCooldownBlocks", wireType) + } + m.LiquidationCooldownBlocks = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowExchange + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.LiquidationCooldownBlocks |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 13: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxCrossMarginSpotOrdersPerSubaccountPerDenom", wireType) + } + m.MaxCrossMarginSpotOrdersPerSubaccountPerDenom = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowExchange + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.MaxCrossMarginSpotOrdersPerSubaccountPerDenom |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 14: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UtilRatio", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowExchange + } + 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 ErrInvalidLengthExchange + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthExchange + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.UtilRatio.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 15: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxIsolatedActiveDerivativeMarketsPerSubaccountPerDenom", wireType) + } + m.MaxIsolatedActiveDerivativeMarketsPerSubaccountPerDenom = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowExchange + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.MaxIsolatedActiveDerivativeMarketsPerSubaccountPerDenom |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipExchange(dAtA[iNdEx:]) diff --git a/chain/exchange/types/v2/fee_discounts.go b/chain/exchange/types/v2/fee_discounts.go index d8137df49..aba4065f7 100644 --- a/chain/exchange/types/v2/fee_discounts.go +++ b/chain/exchange/types/v2/fee_discounts.go @@ -89,14 +89,61 @@ func NewFeeDiscountConfig(isQualified bool, stakingInfo *FeeDiscountStakingInfo) isQualified = false } return &FeeDiscountConfig{ - IsMarketQualified: isQualified, - FeeDiscountStakingInfo: stakingInfo, + IsMarketQualified: isQualified, + FeeDiscountStakingInfo: stakingInfo, + readOnlyFeeDiscountRates: make(map[readOnlyFeeDiscountRateKey]math.LegacyDec), + readOnlyFeeDiscountMux: new(sync.RWMutex), } } type FeeDiscountConfig struct { IsMarketQualified bool *FeeDiscountStakingInfo + + readOnlyFeeDiscountRates map[readOnlyFeeDiscountRateKey]math.LegacyDec + readOnlyFeeDiscountMux *sync.RWMutex +} + +type readOnlyFeeDiscountRateKey struct { + account types.Account + isMaker bool +} + +// GetReadOnlyFeeDiscountRate returns a memoized fee-discount rate for side-effect-free checks. +func (c *FeeDiscountConfig) GetReadOnlyFeeDiscountRate(account sdk.AccAddress, isMaker bool) (math.LegacyDec, bool) { + if c == nil || c.readOnlyFeeDiscountMux == nil { + return math.LegacyDec{}, false + } + + c.readOnlyFeeDiscountMux.RLock() + defer c.readOnlyFeeDiscountMux.RUnlock() + + discountRate, ok := c.readOnlyFeeDiscountRates[readOnlyFeeDiscountRateKey{ + account: types.SdkAccAddressToAccount(account), + isMaker: isMaker, + }] + return discountRate, ok +} + +// SetReadOnlyFeeDiscountRate memoizes a fee-discount rate for side-effect-free checks. +func (c *FeeDiscountConfig) SetReadOnlyFeeDiscountRate(account sdk.AccAddress, isMaker bool, discountRate math.LegacyDec) { + if c == nil { + return + } + if c.readOnlyFeeDiscountMux == nil { + c.readOnlyFeeDiscountMux = new(sync.RWMutex) + } + + c.readOnlyFeeDiscountMux.Lock() + defer c.readOnlyFeeDiscountMux.Unlock() + + if c.readOnlyFeeDiscountRates == nil { + c.readOnlyFeeDiscountRates = make(map[readOnlyFeeDiscountRateKey]math.LegacyDec) + } + c.readOnlyFeeDiscountRates[readOnlyFeeDiscountRateKey{ + account: types.SdkAccAddressToAccount(account), + isMaker: isMaker, + }] = discountRate } func (c *FeeDiscountConfig) GetFeeDiscountRate(account sdk.AccAddress, isMaker bool) *math.LegacyDec { // nolint:revive // ok @@ -191,6 +238,35 @@ func NewFeeDiscountStakingInfo( } } +// NewFeeDiscountStakingInfoForReadOnlyLookup builds a lightweight, throwaway staking-info view for fee-tier lookup. +func NewFeeDiscountStakingInfoForReadOnlyLookup(info *FeeDiscountStakingInfo) *FeeDiscountStakingInfo { + if info == nil { + return nil + } + + return &FeeDiscountStakingInfo{ + SubaccountMarketVolumeContributions: make(map[common.Hash]map[common.Hash]VolumeRecord), + AccountVolumeContributions: make(map[types.Account]math.LegacyDec), + AccountFeeTiers: make(map[types.Account]*types.FeeDiscountRates), + Validators: make(ValidatorCache), + NewAccounts: make(map[types.Account]*FeeDiscountTierTTL), + GrantCheckpoints: make(map[string]struct{}), + InvalidGrants: make(map[string]string), + AccountFeeTiersMux: new(sync.RWMutex), + AccountVolumesMux: new(sync.RWMutex), + ValidatorsMux: new(sync.RWMutex), + NewAccountsMux: new(sync.RWMutex), + GrantsMux: new(sync.RWMutex), + Schedule: info.Schedule, + CurrBucketStartTimestamp: info.CurrBucketStartTimestamp, + OldestBucketStartTimestamp: info.OldestBucketStartTimestamp, + MaxTTLTimestamp: info.MaxTTLTimestamp, + NextTTLTimestamp: info.NextTTLTimestamp, + FeeDiscountRatesCache: info.FeeDiscountRatesCache, + IsFirstFeeCycleFinished: info.IsFirstFeeCycleFinished, + } +} + type FeeDiscountStakingInfo struct { // subaccountID => marketID => volume SubaccountMarketVolumeContributions map[common.Hash]map[common.Hash]VolumeRecord diff --git a/chain/exchange/types/v2/genesis.go b/chain/exchange/types/v2/genesis.go index f73f8256d..4f18f0b51 100644 --- a/chain/exchange/types/v2/genesis.go +++ b/chain/exchange/types/v2/genesis.go @@ -22,20 +22,302 @@ func DefaultGenesisState() *GenesisState { } func (gs GenesisState) Validate() error { - // TODO: validate stuff in genesis if err := gs.Params.Validate(); err != nil { return err } + if err := gs.validateSpotOrderbookMarkets(); err != nil { + return err + } + + if err := gs.validateDerivativeMarketSettlementScheduled(); err != nil { + return err + } + for i, record := range gs.SubaccountRiskProfiles { if err := validateRiskProfileRecord(record); err != nil { return fmt.Errorf("subaccount_risk_profiles[%d]: %w", i, err) } } + return gs.validateSubaccountMarketRiskModes() +} + +func (gs GenesisState) validateSubaccountMarketRiskModes() error { + return gs.validateSubaccountMarketRiskModeRecords() +} + +func (gs GenesisState) validateSubaccountMarketRiskModeRecords() error { + derivativeMarkets := gs.derivativeMarketIDs() + seen := make(map[string]struct{}, len(gs.SubaccountMarketRiskModes)) + + for i, record := range gs.SubaccountMarketRiskModes { + if err := validateMarketRiskModeRecord(record, derivativeMarkets); err != nil { + return fmt.Errorf("subaccount_market_risk_modes[%d]: %w", i, err) + } + + // Normalize before keying: IsHexHash accepts mixed-case hex, and the + // store keys on the decoded bytes, so mixed-case aliases of one + // (subaccount, market) pair must collide here rather than slip through. + pairKey := common.HexToHash(record.SubaccountId).Hex() + common.HexToHash(record.MarketId).Hex() + if _, ok := seen[pairKey]; ok { + return fmt.Errorf( + "subaccount_market_risk_modes[%d]: duplicate record for subaccount %s market %s", + i, record.SubaccountId, record.MarketId, + ) + } + seen[pairKey] = struct{}{} + } + + return nil +} + +func validateMarketRiskModeRecord(record *SubaccountMarketRiskModeRecord, derivativeMarkets map[string]struct{}) error { + if err := ValidateSubaccountMarketRiskModeRecordShape(record); err != nil { + return err + } + + if _, ok := derivativeMarkets[common.HexToHash(record.MarketId).Hex()]; !ok { + return fmt.Errorf("unknown derivative market_id %s", record.MarketId) + } + + return nil +} + +// ValidateSubaccountMarketRiskModeRecordShape runs every stateless per-record +// check except market existence, which callers verify against their own +// market source (the genesis record set or the live store). InitGenesis +// re-runs these checks so a direct import — which bypasses stateless genesis +// validation — cannot silently accept malformed IDs or an UNSPECIFIED mode +// (which the setter would treat as a delete). +func ValidateSubaccountMarketRiskModeRecordShape(record *SubaccountMarketRiskModeRecord) error { + if record == nil { + return errors.New("nil record") + } + + if _, ok := types.IsValidSubaccountID(record.SubaccountId); !ok { + return fmt.Errorf("invalid subaccount_id %q: must be a 32-byte hex hash", record.SubaccountId) + } + + if !types.IsHexHash(record.MarketId) { + return fmt.Errorf("invalid market_id %q: must be a 32-byte hex hash", record.MarketId) + } + + if record.Mode != RiskMode_RISK_MODE_ISOLATED && record.Mode != RiskMode_RISK_MODE_CROSS { + return fmt.Errorf("unsupported risk mode %v", record.Mode) + } + + if record.Mode == RiskMode_RISK_MODE_CROSS && types.IsDefaultSubaccountID(common.HexToHash(record.SubaccountId)) { + return fmt.Errorf("default subaccount %s cannot use cross-margin mode", record.SubaccountId) + } + + return nil +} + +func (gs GenesisState) derivativeMarketIDs() map[string]struct{} { + markets := make(map[string]struct{}, len(gs.DerivativeMarkets)) + for _, market := range gs.DerivativeMarkets { + if market == nil { + continue + } + markets[common.HexToHash(market.MarketId).Hex()] = struct{}{} + } + + return markets +} + +func (gs GenesisState) validateSpotOrderbookMarkets() error { + spotMarkets := gs.spotMarketIDs() + for i, orderbook := range gs.SpotOrderbook { + marketID := orderbook.MarketId + if !types.IsHexHash(marketID) { + return fmt.Errorf("spot_orderbook[%d]: invalid market_id %q", i, marketID) + } + if _, ok := spotMarkets[marketID]; !ok { + return fmt.Errorf("spot_orderbook[%d]: unknown market_id %s", i, marketID) + } + } + return nil } +func (gs GenesisState) spotMarketIDs() map[string]struct{} { + markets := make(map[string]struct{}, len(gs.SpotMarkets)) + for _, market := range gs.SpotMarkets { + if market == nil { + continue + } + markets[market.MarketId] = struct{}{} + } + + return markets +} + +func (gs GenesisState) validateDerivativeMarketSettlementScheduled() error { + expiryInfos, err := gs.validatedExpiryInfoMarketIDs() + if err != nil { + return err + } + + derivativeMarkets := gs.derivativeMarketByID() + binaryMarkets := gs.binaryMarketIDs() + seen := make(map[string]struct{}, len(gs.DerivativeMarketSettlementScheduled)) + for i, marker := range gs.DerivativeMarketSettlementScheduled { + if err := validateScheduledSettlementMarkerID(i, marker, seen); err != nil { + return err + } + if err := validateScheduledSettlementMarkerMarket(i, marker, derivativeMarkets, binaryMarkets, expiryInfos); err != nil { + return err + } + } + + return nil +} + +func (gs GenesisState) derivativeMarketByID() map[string]*DerivativeMarket { + markets := make(map[string]*DerivativeMarket, len(gs.DerivativeMarkets)) + for _, market := range gs.DerivativeMarkets { + if market == nil { + continue + } + markets[market.MarketId] = market + } + + return markets +} + +func (gs GenesisState) binaryMarketIDs() map[string]struct{} { + markets := make(map[string]struct{}, len(gs.BinaryOptionsMarkets)) + for _, market := range gs.BinaryOptionsMarkets { + if market == nil { + continue + } + markets[market.MarketId] = struct{}{} + } + + return markets +} + +func (gs GenesisState) validatedExpiryInfoMarketIDs() (map[string]struct{}, error) { + expiryInfos := make(map[string]struct{}, len(gs.ExpiryFuturesMarketInfoState)) + for i, info := range gs.ExpiryFuturesMarketInfoState { + if err := validateExpiryInfoState(i, info); err != nil { + return nil, err + } + expiryInfos[info.MarketId] = struct{}{} + } + + return expiryInfos, nil +} + +func validateExpiryInfoState(i int, info ExpiryFuturesMarketInfoState) error { + if !types.IsHexHash(info.MarketId) { + return fmt.Errorf("expiry_futures_market_info_state[%d]: invalid market_id %q", i, info.MarketId) + } + if info.MarketInfo == nil { + return fmt.Errorf("expiry_futures_market_info_state[%d]: missing market_info", i) + } + if info.MarketInfo.MarketId != "" && info.MarketInfo.MarketId != info.MarketId { + return fmt.Errorf("expiry_futures_market_info_state[%d]: market_id mismatch %q != %q", + i, info.MarketInfo.MarketId, info.MarketId) + } + + return nil +} + +func validateScheduledSettlementMarkerID( + i int, + marker DerivativeMarketSettlementInfo, + seen map[string]struct{}, +) error { + marketID := marker.MarketId + if !types.IsHexHash(marketID) { + return fmt.Errorf("derivative_market_settlement_scheduled[%d]: invalid market_id %q", i, marketID) + } + if _, ok := seen[marketID]; ok { + return fmt.Errorf("derivative_market_settlement_scheduled[%d]: duplicate market_id %s", i, marketID) + } + seen[marketID] = struct{}{} + + return nil +} + +func validateScheduledSettlementMarkerMarket( + i int, + marker DerivativeMarketSettlementInfo, + derivativeMarkets map[string]*DerivativeMarket, + binaryMarkets map[string]struct{}, + expiryInfos map[string]struct{}, +) error { + marketID := marker.MarketId + if derivativeMarket, ok := derivativeMarkets[marketID]; ok { + return validateDerivativeSettlementMarker(i, marker, derivativeMarket, expiryInfos) + } + if _, ok := binaryMarkets[marketID]; ok { + return validateBinarySettlementMarker(i, marker) + } + + return fmt.Errorf("derivative_market_settlement_scheduled[%d]: unknown market_id %s", i, marketID) +} + +func validateDerivativeSettlementMarker( + i int, + marker DerivativeMarketSettlementInfo, + market *DerivativeMarket, + expiryInfos map[string]struct{}, +) error { + marketID := marker.MarketId + if market.IsTimeExpiry() { + if _, hasInfo := expiryInfos[marketID]; !hasInfo { + return fmt.Errorf("derivative_market_settlement_scheduled[%d]: expiry market %s missing expiry info", + i, marketID) + } + } + if marker.SettlementPrice.IsNil() { + return fmt.Errorf("derivative_market_settlement_scheduled[%d]: derivative market %s missing settlement price", + i, marketID) + } + if marker.IsForcedSettlement && marker.SettlementPrice.IsNegative() { + return fmt.Errorf("derivative_market_settlement_scheduled[%d]: forced derivative market %s has negative settlement price %s", + i, marketID, marker.SettlementPrice.String()) + } + if !marker.IsForcedSettlement && marker.SettlementPrice.IsNegative() { + return fmt.Errorf("derivative_market_settlement_scheduled[%d]: derivative market %s has negative settlement price %s", + i, marketID, marker.SettlementPrice.String()) + } + + return nil +} + +func validateBinarySettlementMarker(i int, marker DerivativeMarketSettlementInfo) error { + marketID := marker.MarketId + if marker.SettlementPrice.IsNil() { + return fmt.Errorf("derivative_market_settlement_scheduled[%d]: binary options market %s missing settlement price", + i, marketID) + } + if marker.IsForcedSettlement && !isValidForcedBinarySettlementMarkerPrice(marker) { + return fmt.Errorf("derivative_market_settlement_scheduled[%d]: forced binary options market %s has invalid settlement price %s", + i, marketID, marker.SettlementPrice.String()) + } + if !marker.IsForcedSettlement && !isValidNonForcedBinarySettlementMarkerPrice(marker) { + return fmt.Errorf("derivative_market_settlement_scheduled[%d]: binary options market %s has invalid settlement price %s", + i, marketID, marker.SettlementPrice.String()) + } + + return nil +} + +func isValidForcedBinarySettlementMarkerPrice(marker DerivativeMarketSettlementInfo) bool { + return marker.SettlementPrice.IsPositive() && + marker.SettlementPrice.LTE(types.MaxBinaryOptionsOrderPrice) +} + +func isValidNonForcedBinarySettlementMarkerPrice(marker DerivativeMarketSettlementInfo) bool { + return marker.SettlementPrice.Equal(BinaryOptionsMarketRefundFlagPrice) || + (!marker.SettlementPrice.IsNegative() && + marker.SettlementPrice.LTE(types.MaxBinaryOptionsOrderPrice)) +} + func validateRiskProfileRecord(record *SubaccountRiskProfileRecord) error { if record == nil { return errors.New("nil record") diff --git a/chain/exchange/types/v2/genesis.pb.go b/chain/exchange/types/v2/genesis.pb.go index 0fd969268..bd94e64f8 100644 --- a/chain/exchange/types/v2/genesis.pb.go +++ b/chain/exchange/types/v2/genesis.pb.go @@ -106,6 +106,10 @@ type GenesisState struct { ActiveGrants []*FullActiveGrant `protobuf:"bytes,36,rep,name=active_grants,json=activeGrants,proto3" json:"active_grants,omitempty"` DenomMinNotionals []*DenomMinNotional `protobuf:"bytes,37,rep,name=denom_min_notionals,json=denomMinNotionals,proto3" json:"denom_min_notionals,omitempty"` SubaccountRiskProfiles []*SubaccountRiskProfileRecord `protobuf:"bytes,38,rep,name=subaccount_risk_profiles,json=subaccountRiskProfiles,proto3" json:"subaccount_risk_profiles,omitempty"` + // subaccount_market_risk_modes contains explicit per-(subaccount, market) + // margin-mode overrides. Markets without a record use the subaccount's + // risk-profile mode as the default. + SubaccountMarketRiskModes []*SubaccountMarketRiskModeRecord `protobuf:"bytes,39,rep,name=subaccount_market_risk_modes,json=subaccountMarketRiskModes,proto3" json:"subaccount_market_risk_modes,omitempty"` } func (m *GenesisState) Reset() { *m = GenesisState{} } @@ -407,6 +411,13 @@ func (m *GenesisState) GetSubaccountRiskProfiles() []*SubaccountRiskProfileRecor return nil } +func (m *GenesisState) GetSubaccountMarketRiskModes() []*SubaccountMarketRiskModeRecord { + if m != nil { + return m.SubaccountMarketRiskModes + } + return nil +} + type OrderbookSequence struct { Sequence uint64 `protobuf:"varint,1,opt,name=sequence,proto3" json:"sequence,omitempty"` MarketId string `protobuf:"bytes,2,opt,name=market_id,json=marketId,proto3" json:"market_id,omitempty"` @@ -914,6 +925,69 @@ func (m *SubaccountRiskProfileRecord) GetRiskProfile() SubaccountRiskProfile { return SubaccountRiskProfile{} } +// SubaccountMarketRiskModeRecord pins the margin mode of a single derivative +// market for a subaccount, overriding the subaccount's default risk-profile +// mode for that market. +type SubaccountMarketRiskModeRecord struct { + SubaccountId string `protobuf:"bytes,1,opt,name=subaccount_id,json=subaccountId,proto3" json:"subaccount_id,omitempty"` + MarketId string `protobuf:"bytes,2,opt,name=market_id,json=marketId,proto3" json:"market_id,omitempty"` + Mode RiskMode `protobuf:"varint,3,opt,name=mode,proto3,enum=injective.exchange.v2.RiskMode" json:"mode,omitempty"` +} + +func (m *SubaccountMarketRiskModeRecord) Reset() { *m = SubaccountMarketRiskModeRecord{} } +func (m *SubaccountMarketRiskModeRecord) String() string { return proto.CompactTextString(m) } +func (*SubaccountMarketRiskModeRecord) ProtoMessage() {} +func (*SubaccountMarketRiskModeRecord) Descriptor() ([]byte, []int) { + return fileDescriptor_fff40080d86ae941, []int{11} +} +func (m *SubaccountMarketRiskModeRecord) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SubaccountMarketRiskModeRecord) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_SubaccountMarketRiskModeRecord.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 *SubaccountMarketRiskModeRecord) XXX_Merge(src proto.Message) { + xxx_messageInfo_SubaccountMarketRiskModeRecord.Merge(m, src) +} +func (m *SubaccountMarketRiskModeRecord) XXX_Size() int { + return m.Size() +} +func (m *SubaccountMarketRiskModeRecord) XXX_DiscardUnknown() { + xxx_messageInfo_SubaccountMarketRiskModeRecord.DiscardUnknown(m) +} + +var xxx_messageInfo_SubaccountMarketRiskModeRecord proto.InternalMessageInfo + +func (m *SubaccountMarketRiskModeRecord) GetSubaccountId() string { + if m != nil { + return m.SubaccountId + } + return "" +} + +func (m *SubaccountMarketRiskModeRecord) GetMarketId() string { + if m != nil { + return m.MarketId + } + return "" +} + +func (m *SubaccountMarketRiskModeRecord) GetMode() RiskMode { + if m != nil { + return m.Mode + } + return RiskMode_RISK_MODE_UNSPECIFIED +} + func init() { proto.RegisterType((*GenesisState)(nil), "injective.exchange.v2.GenesisState") proto.RegisterType((*OrderbookSequence)(nil), "injective.exchange.v2.OrderbookSequence") @@ -926,6 +1000,7 @@ func init() { proto.RegisterType((*FullGrantAuthorizations)(nil), "injective.exchange.v2.FullGrantAuthorizations") proto.RegisterType((*FullActiveGrant)(nil), "injective.exchange.v2.FullActiveGrant") proto.RegisterType((*SubaccountRiskProfileRecord)(nil), "injective.exchange.v2.SubaccountRiskProfileRecord") + proto.RegisterType((*SubaccountMarketRiskModeRecord)(nil), "injective.exchange.v2.SubaccountMarketRiskModeRecord") } func init() { @@ -933,125 +1008,129 @@ func init() { } var fileDescriptor_fff40080d86ae941 = []byte{ - // 1882 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x58, 0xcd, 0x6f, 0x1c, 0x49, - 0x15, 0x77, 0xc7, 0xc1, 0xb1, 0xcb, 0x76, 0xb2, 0x29, 0x7f, 0xa4, 0x6d, 0xc7, 0x63, 0x67, 0x9c, - 0x84, 0x09, 0xec, 0xce, 0xac, 0xbc, 0x7c, 0x68, 0x59, 0x90, 0xd6, 0x9f, 0x2b, 0x93, 0x64, 0xe3, - 0x6d, 0x0f, 0x8b, 0x40, 0x82, 0xde, 0x9a, 0xee, 0x9a, 0x99, 0xc2, 0xdd, 0x5d, 0xbd, 0xf5, 0x6a, - 0x4c, 0x4c, 0xc4, 0x01, 0x84, 0x10, 0x42, 0x20, 0xed, 0x95, 0xdb, 0x4a, 0x70, 0xe1, 0x3f, 0xd9, - 0x03, 0x87, 0x3d, 0x22, 0x0e, 0x2b, 0x94, 0x5c, 0xf8, 0x33, 0x50, 0x55, 0x57, 0x77, 0xcf, 0x57, - 0xf7, 0x38, 0x70, 0x9b, 0xaa, 0x7a, 0xef, 0xf7, 0x5e, 0xd5, 0xfb, 0xfa, 0x4d, 0xa3, 0x1d, 0x16, - 0xfd, 0x82, 0x7a, 0x92, 0x5d, 0xd0, 0x06, 0x7d, 0xee, 0x75, 0x49, 0xd4, 0xa1, 0x8d, 0x8b, 0xdd, - 0x46, 0x87, 0x46, 0x14, 0x18, 0xd4, 0x63, 0xc1, 0x25, 0xc7, 0x2b, 0x99, 0x50, 0x3d, 0x15, 0xaa, - 0x5f, 0xec, 0xae, 0x2f, 0x77, 0x78, 0x87, 0x6b, 0x89, 0x86, 0xfa, 0x95, 0x08, 0xaf, 0xdf, 0x1f, - 0x8f, 0x98, 0x29, 0x26, 0x52, 0xd5, 0xf1, 0x52, 0x21, 0x11, 0xe7, 0x54, 0x1a, 0x99, 0x07, 0xe3, - 0x65, 0xb8, 0xf0, 0xa9, 0x68, 0x71, 0x7e, 0x6e, 0xc4, 0x2a, 0xe3, 0xc5, 0xe4, 0xf3, 0xe4, 0xbc, - 0xfa, 0xa7, 0x0a, 0x5a, 0xf8, 0x20, 0xb9, 0xcf, 0x99, 0x24, 0x92, 0xe2, 0xf7, 0xd0, 0x4c, 0x4c, - 0x04, 0x09, 0xc1, 0xb6, 0xb6, 0xad, 0xda, 0xfc, 0xee, 0x66, 0x7d, 0xec, 0xfd, 0xea, 0xa7, 0x5a, - 0x68, 0xff, 0xfa, 0x17, 0x5f, 0x6d, 0x4d, 0x39, 0x46, 0x05, 0x1f, 0xa2, 0x05, 0x88, 0xb9, 0x74, - 0x13, 0x4f, 0xc1, 0xbe, 0xb6, 0x3d, 0x5d, 0x9b, 0xdf, 0xbd, 0x57, 0x00, 0x71, 0x16, 0x73, 0xf9, - 0x54, 0x4b, 0x3a, 0xf3, 0x90, 0xfd, 0x06, 0xfc, 0x31, 0xc2, 0x3e, 0x15, 0xec, 0x82, 0x28, 0x8d, - 0x0c, 0x6b, 0x5a, 0x63, 0x7d, 0xbd, 0x00, 0xeb, 0x30, 0x53, 0x30, 0x88, 0xb7, 0xfd, 0xa1, 0x1d, - 0xc0, 0x1f, 0xa1, 0x9b, 0xda, 0xbb, 0xec, 0x8d, 0xec, 0xeb, 0x1a, 0xf3, 0x7e, 0x89, 0x7f, 0xcf, - 0x94, 0xec, 0x3e, 0xe7, 0xe7, 0xe6, 0xa6, 0x8b, 0x90, 0x6e, 0x2a, 0x00, 0xec, 0xa1, 0xe5, 0x3e, - 0x57, 0x73, 0xe0, 0xaf, 0x69, 0xe0, 0x6f, 0x4c, 0x74, 0x76, 0x18, 0x7e, 0xc9, 0x1f, 0x3c, 0xd2, - 0x46, 0xde, 0x47, 0xb3, 0x2d, 0x12, 0x90, 0xc8, 0xa3, 0x60, 0xcf, 0x68, 0xe0, 0x4a, 0x01, 0xf0, - 0x7e, 0x22, 0x66, 0xc0, 0x32, 0x2d, 0xfc, 0x14, 0xcd, 0xc5, 0x1c, 0x98, 0x64, 0x3c, 0x02, 0xfb, - 0x86, 0x86, 0x78, 0x34, 0xd1, 0xb7, 0x53, 0xa3, 0x61, 0xd0, 0x72, 0x04, 0xec, 0xa3, 0x3b, 0xd0, - 0x6b, 0x11, 0xcf, 0xe3, 0xbd, 0x48, 0xba, 0x52, 0x10, 0x9f, 0xba, 0x11, 0xd7, 0xfe, 0xcd, 0x6a, - 0xf0, 0x87, 0x45, 0x2f, 0x9a, 0x69, 0x7d, 0xc8, 0x73, 0x3f, 0x57, 0x72, 0xb0, 0xa6, 0xc2, 0xd2, - 0x67, 0x80, 0x7f, 0x63, 0xa1, 0x6d, 0xfa, 0x3c, 0x66, 0xe2, 0xd2, 0x6d, 0xf7, 0x64, 0x4f, 0x50, - 0x30, 0xb9, 0xe0, 0xb2, 0xa8, 0xcd, 0x5d, 0x50, 0xe9, 0x6a, 0xcf, 0x69, 0x7b, 0xef, 0x14, 0xd8, - 0x3b, 0xd2, 0xea, 0xc7, 0x89, 0x76, 0x92, 0x06, 0x27, 0x51, 0x9b, 0xeb, 0x4c, 0x37, 0xc6, 0xef, - 0xd2, 0x12, 0x19, 0xec, 0xa3, 0x95, 0x98, 0x8a, 0x98, 0xca, 0x1e, 0x09, 0xfa, 0xad, 0xdb, 0xa8, - 0x34, 0xc0, 0xa7, 0xa9, 0x4e, 0x8e, 0x97, 0x06, 0x38, 0x1e, 0x3d, 0xc2, 0xbf, 0x46, 0x95, 0x11, - 0x2b, 0xed, 0x5e, 0xe4, 0xb3, 0xa8, 0x63, 0xae, 0x39, 0xaf, 0xcd, 0xed, 0x5e, 0xcd, 0xdc, 0x71, - 0xa2, 0xda, 0x7f, 0xcb, 0x8d, 0xb8, 0x58, 0x04, 0x7f, 0x66, 0xa1, 0x87, 0x23, 0x05, 0xe7, 0x02, - 0x95, 0x32, 0xa0, 0x21, 0x8d, 0xa4, 0x0b, 0x5e, 0x97, 0xfa, 0xbd, 0x80, 0xfa, 0xf6, 0x82, 0xf6, - 0xe3, 0xdb, 0x57, 0x2c, 0xc2, 0xb3, 0x0c, 0xa2, 0xef, 0x05, 0x76, 0xfc, 0x42, 0xa9, 0xb3, 0xd4, - 0x0e, 0xfe, 0x2e, 0xb2, 0x19, 0xb8, 0xba, 0x5a, 0x53, 0x03, 0x2e, 0x8d, 0x48, 0x4b, 0xf9, 0xb0, - 0xb8, 0x6d, 0xd5, 0x66, 0x9d, 0x15, 0x06, 0xaa, 0x3e, 0x8f, 0xcc, 0xe9, 0x51, 0x72, 0x88, 0x8f, - 0xd0, 0x16, 0x03, 0x37, 0x37, 0x01, 0xa3, 0xfa, 0x37, 0xb5, 0xfe, 0x5d, 0x06, 0xb9, 0xbb, 0x30, - 0x0c, 0xf3, 0x29, 0xba, 0xab, 0xd2, 0x5a, 0x05, 0x40, 0xd0, 0x5f, 0x12, 0xe1, 0xbb, 0x1e, 0x09, - 0x63, 0xc2, 0x3a, 0x51, 0x12, 0xfe, 0x5b, 0xba, 0x37, 0xbe, 0x5d, 0xf0, 0x0e, 0xcd, 0x44, 0xd5, - 0xd1, 0x9a, 0x07, 0x46, 0x51, 0x3d, 0x81, 0xb3, 0x26, 0x8b, 0x8e, 0xf0, 0x0b, 0xf4, 0x60, 0xc8, - 0x64, 0xcc, 0x79, 0x90, 0xdb, 0x4d, 0x83, 0x60, 0xbf, 0x51, 0x5a, 0xbf, 0x29, 0x66, 0x62, 0xe1, - 0x94, 0xf3, 0xc0, 0xb9, 0x37, 0x60, 0x54, 0x6d, 0xa5, 0x42, 0xe9, 0x83, 0xe3, 0x3f, 0x5b, 0xe8, - 0x61, 0xd1, 0x85, 0xd3, 0x3a, 0x8f, 0x39, 0x8b, 0x24, 0xd8, 0xb7, 0xb5, 0xf9, 0x77, 0x5f, 0xe7, - 0xea, 0x7b, 0x09, 0xc2, 0xa9, 0x06, 0x70, 0xaa, 0x72, 0xa2, 0x0c, 0xfe, 0x39, 0x5a, 0x69, 0x53, - 0xea, 0xfa, 0x0c, 0x12, 0xdb, 0xd9, 0xe5, 0xb1, 0x7e, 0xf8, 0xa2, 0xba, 0x3b, 0xa6, 0xf4, 0xd0, - 0xa8, 0xa4, 0x57, 0x73, 0x96, 0xda, 0xa3, 0x9b, 0x58, 0xa0, 0xcd, 0x01, 0xfc, 0xac, 0x97, 0x31, - 0x2a, 0x5c, 0x29, 0x03, 0x7b, 0x49, 0xdf, 0xf2, 0xed, 0xc9, 0x76, 0x8c, 0xdf, 0x4d, 0x46, 0x45, - 0xb3, 0xf9, 0xc4, 0x59, 0x6b, 0x8f, 0x3f, 0x92, 0x01, 0xfe, 0x9d, 0x85, 0x76, 0x06, 0x8c, 0xb6, - 0x7a, 0x9e, 0x2a, 0xb4, 0x0b, 0x1e, 0xf4, 0x42, 0x9a, 0xba, 0x00, 0xf6, 0xb2, 0x36, 0xfd, 0x9d, - 0xc9, 0xa6, 0xf7, 0xb5, 0xfe, 0xc7, 0x5a, 0xdd, 0xd8, 0x02, 0x67, 0xab, 0x5d, 0x2e, 0x80, 0xbf, - 0x8f, 0x36, 0x18, 0xb8, 0x6d, 0x26, 0x40, 0xba, 0xca, 0x1d, 0xef, 0xd2, 0x0b, 0xa8, 0xdb, 0x66, - 0x11, 0x83, 0x2e, 0xf5, 0xed, 0x15, 0x5d, 0x1d, 0x77, 0x18, 0x1c, 0x2b, 0x89, 0x63, 0x4a, 0x0f, - 0xd4, 0xf9, 0xb1, 0x39, 0xc6, 0x7f, 0xb4, 0xd0, 0x5b, 0x31, 0x4d, 0x5a, 0xd3, 0xd5, 0xd2, 0x75, - 0xf5, 0x75, 0xd3, 0xb5, 0x66, 0xf0, 0x9b, 0x13, 0xb3, 0xf6, 0xaf, 0x16, 0xaa, 0x17, 0x38, 0x53, - 0x94, 0xbd, 0x77, 0xb4, 0x37, 0xef, 0xff, 0x2f, 0xd9, 0x9b, 0x18, 0x32, 0x49, 0xfc, 0x68, 0x9c, - 0x93, 0xe3, 0x73, 0xf9, 0x5d, 0xb4, 0x96, 0x38, 0x05, 0x2e, 0x8f, 0xa5, 0xcb, 0x7b, 0xd2, 0x25, - 0xbe, 0x2f, 0x28, 0x00, 0x05, 0xdb, 0xde, 0x9e, 0xae, 0xcd, 0x39, 0xab, 0x46, 0xe0, 0x59, 0x2c, - 0x9f, 0xf5, 0xe4, 0x5e, 0x7a, 0x8a, 0x7f, 0x86, 0xec, 0x2e, 0x03, 0xc9, 0x05, 0xf3, 0x48, 0x60, - 0x06, 0xad, 0xa0, 0x1e, 0x17, 0x3e, 0xd8, 0x6b, 0xfa, 0x26, 0x3b, 0x25, 0x37, 0xa1, 0x4e, 0x22, - 0xea, 0xac, 0xe6, 0x20, 0xfd, 0xfb, 0xf8, 0x13, 0xb4, 0xda, 0x62, 0x11, 0x11, 0x97, 0xca, 0x31, - 0x35, 0xd9, 0x33, 0xb2, 0xb5, 0x5e, 0x3a, 0xde, 0xf6, 0xb5, 0xd2, 0xb3, 0x44, 0xc7, 0xf0, 0xad, - 0xe5, 0xd6, 0xe8, 0x26, 0xe0, 0x2e, 0xda, 0x1d, 0x6b, 0xc1, 0x65, 0x3e, 0xe4, 0x63, 0xc5, 0x6d, - 0x73, 0xd1, 0x37, 0x6f, 0xec, 0x0d, 0xfd, 0x28, 0x6f, 0x8e, 0x41, 0x3c, 0xf1, 0x21, 0x1b, 0x12, - 0xc7, 0x5c, 0xe4, 0xa3, 0x03, 0x37, 0x51, 0xad, 0x8f, 0x7a, 0x0e, 0xe1, 0x4b, 0xae, 0x4c, 0x78, - 0xd4, 0xf5, 0x02, 0x0e, 0xd4, 0xbe, 0xab, 0xf1, 0xab, 0x39, 0xe7, 0xec, 0x87, 0x6d, 0xf2, 0x63, - 0x25, 0x7a, 0xa0, 0x24, 0xf1, 0x6f, 0x2d, 0x54, 0x23, 0x3d, 0x4f, 0x79, 0x90, 0x0f, 0x12, 0x29, - 0x48, 0x04, 0x6d, 0x2a, 0x5c, 0x9f, 0x46, 0x3c, 0x74, 0x7d, 0xea, 0xb1, 0x90, 0x04, 0x60, 0x6f, - 0x96, 0xb2, 0xc9, 0x43, 0x25, 0x7c, 0x68, 0x64, 0xcd, 0x2c, 0xbc, 0x6f, 0xb0, 0xd3, 0xf1, 0xd3, - 0x34, 0xc8, 0x03, 0xb2, 0x8a, 0x08, 0xdd, 0xf3, 0x78, 0xe4, 0x6b, 0xf6, 0x45, 0x02, 0x77, 0x1c, - 0xe3, 0x04, 0xbb, 0x52, 0x3a, 0x9a, 0x0f, 0x72, 0xfd, 0x31, 0xec, 0xd3, 0xd9, 0xf2, 0x0a, 0xcf, - 0x35, 0xba, 0x4a, 0x95, 0x94, 0x98, 0x50, 0xea, 0x86, 0xbd, 0x40, 0xb2, 0x38, 0x60, 0x54, 0x80, - 0xbd, 0x55, 0x9a, 0x2a, 0x86, 0x6e, 0x50, 0xfa, 0x34, 0x53, 0x71, 0x96, 0xc3, 0xd1, 0x4d, 0xc0, - 0x3f, 0x41, 0x4b, 0xd9, 0x6d, 0x5c, 0xa0, 0x9f, 0xf6, 0xa8, 0x26, 0x94, 0xdb, 0x1a, 0xbe, 0x56, - 0x00, 0x9f, 0x79, 0x78, 0x66, 0x14, 0x1c, 0xcc, 0x87, 0xb7, 0x00, 0x53, 0x84, 0xfb, 0xf8, 0x6a, - 0xd2, 0x6f, 0xc1, 0xbe, 0x57, 0xda, 0x67, 0xf7, 0x3a, 0x1d, 0x41, 0x3b, 0x44, 0xd2, 0x9c, 0xb3, - 0x26, 0x8d, 0x34, 0x29, 0x1e, 0xe7, 0x36, 0x0c, 0xed, 0x03, 0xfe, 0x21, 0xba, 0x69, 0xde, 0x28, - 0x35, 0x51, 0x2d, 0xad, 0xd1, 0xe4, 0x6d, 0x0c, 0xea, 0x62, 0xd8, 0xb7, 0x02, 0x4c, 0xd0, 0x72, - 0x47, 0x10, 0x35, 0x99, 0x7a, 0xb2, 0xcb, 0x05, 0xfb, 0x15, 0x49, 0xc8, 0xfb, 0x8e, 0x46, 0xac, - 0x17, 0x0d, 0x87, 0x5e, 0x10, 0x7c, 0xa0, 0xd4, 0xf6, 0x06, 0xb4, 0x9c, 0xa5, 0xce, 0xe8, 0x26, - 0x7e, 0x8c, 0x16, 0x89, 0x86, 0x70, 0xf5, 0x29, 0xd8, 0xf7, 0x4b, 0xb9, 0xbb, 0xc2, 0xde, 0xd3, - 0xdb, 0xda, 0x82, 0xb3, 0x40, 0xf2, 0x05, 0xe0, 0x1f, 0xa3, 0xa5, 0xa4, 0x1a, 0x42, 0x16, 0xb9, - 0x11, 0x4f, 0x32, 0x09, 0xec, 0x07, 0x13, 0xfe, 0xb4, 0x45, 0x3c, 0x7c, 0xca, 0xa2, 0x0f, 0x8d, - 0xbc, 0xfa, 0xd3, 0x36, 0xb8, 0x03, 0x38, 0x40, 0x76, 0x5f, 0xec, 0x04, 0x83, 0x73, 0x37, 0x16, - 0xbc, 0xcd, 0x02, 0x0a, 0xf6, 0xc3, 0x52, 0x56, 0x9c, 0x07, 0xce, 0x61, 0x70, 0x7e, 0x9a, 0x28, - 0x99, 0xe8, 0xad, 0xc2, 0xb8, 0x43, 0xa8, 0x3e, 0x41, 0xb7, 0x47, 0x52, 0x0a, 0xaf, 0xa3, 0xd9, - 0x34, 0x1f, 0xf5, 0x9f, 0xe2, 0xeb, 0x4e, 0xb6, 0xc6, 0x1b, 0x68, 0x2e, 0xeb, 0x38, 0xf6, 0xb5, - 0x6d, 0xab, 0x36, 0xe7, 0xcc, 0x86, 0xa6, 0xa7, 0x54, 0x5f, 0xa0, 0xb5, 0x42, 0xa6, 0x80, 0x6d, - 0x74, 0xc3, 0x78, 0xa0, 0x41, 0xe7, 0x9c, 0x74, 0x89, 0x0f, 0xd1, 0x6c, 0xc6, 0x43, 0xae, 0x69, - 0xbe, 0xf3, 0x68, 0x32, 0x19, 0x48, 0x09, 0xc8, 0x0d, 0x99, 0xd0, 0x8d, 0xea, 0xdf, 0x2c, 0xb4, - 0x35, 0x81, 0x2c, 0xe0, 0x6f, 0xa1, 0x55, 0x43, 0x42, 0x40, 0x12, 0xa1, 0xe8, 0x4f, 0x48, 0x41, - 0x92, 0x30, 0xd6, 0x2e, 0x4d, 0x3b, 0xcb, 0xc9, 0xe9, 0x99, 0x3a, 0x6c, 0xa6, 0x67, 0xf8, 0x31, - 0xba, 0x39, 0x58, 0x4b, 0xe6, 0x7f, 0x7e, 0x51, 0xe7, 0xdb, 0x1b, 0x28, 0x9f, 0xc5, 0x81, 0xaa, - 0xa9, 0xb6, 0xd1, 0xe2, 0xc0, 0x79, 0xc9, 0xbb, 0xbc, 0x87, 0x66, 0x32, 0x7b, 0x56, 0x6d, 0x6e, - 0x7f, 0x47, 0xf5, 0xd0, 0x7f, 0x7d, 0xb5, 0xb5, 0xe1, 0x71, 0x08, 0x39, 0x80, 0x7f, 0x5e, 0x67, - 0xbc, 0x11, 0x12, 0xd9, 0xad, 0x3f, 0xa1, 0x1d, 0xe2, 0x5d, 0x1e, 0x52, 0xcf, 0x31, 0x2a, 0xd5, - 0x17, 0xa8, 0x7a, 0x85, 0x59, 0x5d, 0x6a, 0xdc, 0x50, 0x88, 0xd7, 0x31, 0x9e, 0xa8, 0x54, 0xff, - 0x61, 0xa1, 0x47, 0x57, 0xe6, 0x16, 0xf8, 0x07, 0x68, 0xa3, 0x9f, 0x52, 0x8d, 0x0f, 0x8d, 0x2d, - 0x32, 0x5e, 0x34, 0x14, 0x9e, 0x4f, 0xf2, 0xf0, 0x64, 0x1e, 0xff, 0x9f, 0x94, 0x3d, 0x8d, 0x59, - 0xb2, 0xac, 0xfe, 0xdd, 0x42, 0xb7, 0x86, 0xfe, 0xca, 0xe3, 0x1d, 0xb4, 0xd8, 0x57, 0xa7, 0xcc, - 0x37, 0xef, 0xb7, 0x90, 0x6f, 0x9e, 0xf8, 0xb8, 0x83, 0x56, 0xc7, 0x7f, 0x38, 0x30, 0x79, 0xfe, - 0xcd, 0x89, 0xa5, 0x9c, 0x7f, 0x20, 0x30, 0x23, 0x74, 0x79, 0xdc, 0xc7, 0x83, 0xef, 0xcd, 0xfe, - 0xe1, 0xf3, 0xad, 0xa9, 0xff, 0x7c, 0xbe, 0x35, 0x55, 0xfd, 0xfd, 0x35, 0x74, 0xa7, 0xa0, 0x2d, - 0xaa, 0x68, 0xeb, 0xd6, 0x47, 0x45, 0x1a, 0x6d, 0xb3, 0xc4, 0x8f, 0x11, 0x96, 0x5c, 0x92, 0xc0, - 0x35, 0x4d, 0x38, 0xd4, 0x29, 0x91, 0x44, 0x7e, 0xd3, 0x44, 0x7e, 0x65, 0x34, 0xf2, 0x27, 0x91, - 0x74, 0xde, 0xd0, 0x8a, 0x89, 0x39, 0xad, 0x86, 0xf7, 0xd0, 0x66, 0x40, 0x40, 0xba, 0x3e, 0x0d, - 0xd4, 0x44, 0xd1, 0x34, 0xc8, 0xeb, 0x52, 0xef, 0x5c, 0x31, 0x13, 0x16, 0x52, 0x7b, 0x5a, 0x47, - 0x74, 0x5d, 0x09, 0x1d, 0xe6, 0x32, 0x07, 0x89, 0x88, 0x0a, 0x2c, 0xde, 0x43, 0x33, 0xa6, 0x49, - 0x5f, 0x2f, 0xa5, 0xd3, 0xa3, 0xb7, 0x74, 0x8c, 0x62, 0x55, 0xa0, 0x5b, 0x43, 0x2d, 0x3c, 0xbf, - 0x3f, 0x1d, 0xbc, 0x3f, 0xc5, 0x47, 0x68, 0xa1, 0x7f, 0x36, 0x98, 0xf0, 0x54, 0x0b, 0x0b, 0x3c, - 0x1f, 0x0b, 0xf3, 0x7d, 0x63, 0xa1, 0xfa, 0x17, 0x0b, 0x6d, 0x94, 0xb4, 0xe1, 0xab, 0x25, 0xcd, - 0x8f, 0xd0, 0x42, 0x7f, 0xdb, 0x37, 0xbe, 0xbc, 0xf9, 0x3a, 0x5d, 0xdf, 0xe4, 0xca, 0xbc, 0xe8, - 0xdb, 0x3a, 0xff, 0xe2, 0x65, 0xc5, 0xfa, 0xf2, 0x65, 0xc5, 0xfa, 0xf7, 0xcb, 0x8a, 0xf5, 0xd9, - 0xab, 0xca, 0xd4, 0x97, 0xaf, 0x2a, 0x53, 0xff, 0x7c, 0x55, 0x99, 0xfa, 0xe9, 0x47, 0x1d, 0x26, - 0xbb, 0xbd, 0x56, 0xdd, 0xe3, 0x61, 0xe3, 0x24, 0x35, 0xf2, 0x84, 0xb4, 0xa0, 0x91, 0x99, 0x7c, - 0xcb, 0xe3, 0x82, 0xf6, 0x2f, 0xbb, 0x84, 0x45, 0x8d, 0x90, 0x2b, 0x06, 0x09, 0xf9, 0x97, 0x56, - 0x79, 0x19, 0x53, 0x68, 0x5c, 0xec, 0xb6, 0x66, 0xf4, 0xd7, 0xd6, 0x77, 0xfe, 0x1b, 0x00, 0x00, - 0xff, 0xff, 0x90, 0xe6, 0x61, 0x46, 0x52, 0x16, 0x00, 0x00, + // 1945 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x58, 0x4b, 0x6f, 0x1c, 0xc7, + 0x11, 0xe6, 0x48, 0x0c, 0x45, 0x36, 0x1f, 0xb2, 0x9a, 0x0f, 0x0d, 0x5f, 0xbb, 0xd4, 0x52, 0x92, + 0x57, 0x89, 0xbd, 0x34, 0xa8, 0x3c, 0xe0, 0x38, 0x01, 0xcc, 0xa7, 0xc1, 0x48, 0xb4, 0xe8, 0xe1, + 0xc6, 0x41, 0x02, 0x24, 0xe3, 0xd9, 0x99, 0xde, 0xdd, 0x0e, 0x67, 0xa6, 0xc7, 0x5d, 0xbd, 0x8c, + 0x18, 0x21, 0x87, 0x04, 0x46, 0x10, 0x04, 0x08, 0xe0, 0x5b, 0x90, 0x9b, 0x81, 0xe4, 0x92, 0x7f, + 0xe2, 0x43, 0x0e, 0x3e, 0x06, 0x39, 0x18, 0x81, 0x74, 0xc9, 0xcf, 0x08, 0xba, 0xa7, 0xe7, 0xb1, + 0x8f, 0x99, 0xa5, 0x92, 0xdb, 0x4e, 0x57, 0xd5, 0x57, 0xd5, 0x5d, 0x55, 0x5d, 0xdf, 0x36, 0xda, + 0xa6, 0xe1, 0x2f, 0x89, 0x2b, 0xe8, 0x25, 0xd9, 0x21, 0xcf, 0xdd, 0xae, 0x13, 0x76, 0xc8, 0xce, + 0xe5, 0xee, 0x4e, 0x87, 0x84, 0x04, 0x28, 0x34, 0x22, 0xce, 0x04, 0xc3, 0xcb, 0xa9, 0x52, 0x23, + 0x51, 0x6a, 0x5c, 0xee, 0xae, 0x2d, 0x75, 0x58, 0x87, 0x29, 0x8d, 0x1d, 0xf9, 0x2b, 0x56, 0x5e, + 0xbb, 0x3f, 0x1a, 0x31, 0x35, 0x8c, 0xb5, 0x6a, 0xa3, 0xb5, 0x02, 0x87, 0x5f, 0x10, 0xa1, 0x75, + 0x1e, 0x8c, 0xd6, 0x61, 0xdc, 0x23, 0xbc, 0xc5, 0xd8, 0x85, 0x56, 0xab, 0x8c, 0x56, 0x13, 0xcf, + 0x63, 0x79, 0xed, 0xb3, 0x2a, 0x9a, 0xfb, 0x20, 0xde, 0xcf, 0xb9, 0x70, 0x04, 0xc1, 0xef, 0xa1, + 0xa9, 0xc8, 0xe1, 0x4e, 0x00, 0xa6, 0xb1, 0x65, 0xd4, 0x67, 0x77, 0x37, 0x1b, 0x23, 0xf7, 0xd7, + 0x38, 0x53, 0x4a, 0xfb, 0x93, 0x5f, 0x7e, 0x5d, 0x9d, 0xb0, 0xb4, 0x09, 0x3e, 0x44, 0x73, 0x10, + 0x31, 0x61, 0xc7, 0x91, 0x82, 0x79, 0x63, 0xeb, 0x66, 0x7d, 0x76, 0xf7, 0x5e, 0x01, 0xc4, 0x79, + 0xc4, 0xc4, 0xa9, 0xd2, 0xb4, 0x66, 0x21, 0xfd, 0x0d, 0xf8, 0x63, 0x84, 0x3d, 0xc2, 0xe9, 0xa5, + 0x23, 0x2d, 0x52, 0xac, 0x9b, 0x0a, 0xeb, 0xcd, 0x02, 0xac, 0xc3, 0xd4, 0x40, 0x23, 0xde, 0xf1, + 0x06, 0x56, 0x00, 0x7f, 0x84, 0x16, 0x54, 0x74, 0xe9, 0x19, 0x99, 0x93, 0x0a, 0xf3, 0x7e, 0x49, + 0x7c, 0xcf, 0xa4, 0xee, 0x3e, 0x63, 0x17, 0x7a, 0xa7, 0xf3, 0x90, 0x2c, 0x4a, 0x00, 0xec, 0xa2, + 0xa5, 0x5c, 0xa8, 0x19, 0xf0, 0x37, 0x14, 0xf0, 0x37, 0xc7, 0x06, 0x3b, 0x08, 0xbf, 0xe8, 0xf5, + 0x8b, 0x94, 0x93, 0xf7, 0xd1, 0x74, 0xcb, 0xf1, 0x9d, 0xd0, 0x25, 0x60, 0x4e, 0x29, 0xe0, 0x4a, + 0x01, 0xf0, 0x7e, 0xac, 0xa6, 0xc1, 0x52, 0x2b, 0x7c, 0x8a, 0x66, 0x22, 0x06, 0x54, 0x50, 0x16, + 0x82, 0x79, 0x4b, 0x41, 0x3c, 0x1a, 0x1b, 0xdb, 0x99, 0xb6, 0xd0, 0x68, 0x19, 0x02, 0xf6, 0xd0, + 0x5d, 0xe8, 0xb5, 0x1c, 0xd7, 0x65, 0xbd, 0x50, 0xd8, 0x82, 0x3b, 0x1e, 0xb1, 0x43, 0xa6, 0xe2, + 0x9b, 0x56, 0xe0, 0x0f, 0x8b, 0x4e, 0x34, 0xb5, 0xfa, 0x90, 0x65, 0x71, 0x2e, 0x67, 0x60, 0x4d, + 0x89, 0xa5, 0x64, 0x80, 0x7f, 0x6b, 0xa0, 0x2d, 0xf2, 0x3c, 0xa2, 0xfc, 0xca, 0x6e, 0xf7, 0x44, + 0x8f, 0x13, 0xd0, 0xb5, 0x60, 0xd3, 0xb0, 0xcd, 0x6c, 0x90, 0xe5, 0x6a, 0xce, 0x28, 0x7f, 0x8f, + 0x0b, 0xfc, 0x1d, 0x29, 0xf3, 0xe3, 0xd8, 0x3a, 0x2e, 0x83, 0x93, 0xb0, 0xcd, 0x54, 0xa5, 0x6b, + 0xe7, 0x1b, 0xa4, 0x44, 0x07, 0x7b, 0x68, 0x39, 0x22, 0x3c, 0x22, 0xa2, 0xe7, 0xf8, 0x79, 0xef, + 0x26, 0x2a, 0x4d, 0xf0, 0x59, 0x62, 0x93, 0xe1, 0x25, 0x09, 0x8e, 0x86, 0x45, 0xf8, 0x37, 0xa8, + 0x32, 0xe4, 0xa5, 0xdd, 0x0b, 0x3d, 0x1a, 0x76, 0xf4, 0x36, 0x67, 0x95, 0xbb, 0xdd, 0xeb, 0xb9, + 0x3b, 0x8e, 0x4d, 0xf3, 0xbb, 0x5c, 0x8f, 0x8a, 0x55, 0xf0, 0xe7, 0x06, 0x7a, 0x38, 0xd4, 0x70, + 0x36, 0x10, 0x21, 0x7c, 0x12, 0x90, 0x50, 0xd8, 0xe0, 0x76, 0x89, 0xd7, 0xf3, 0x89, 0x67, 0xce, + 0xa9, 0x38, 0xbe, 0x73, 0xcd, 0x26, 0x3c, 0x4f, 0x21, 0x72, 0x27, 0xb0, 0xed, 0x15, 0x6a, 0x9d, + 0x27, 0x7e, 0xf0, 0xf7, 0x90, 0x49, 0xc1, 0x56, 0xdd, 0x9a, 0x38, 0xb0, 0x49, 0xe8, 0xb4, 0x64, + 0x0c, 0xf3, 0x5b, 0x46, 0x7d, 0xda, 0x5a, 0xa6, 0x20, 0xfb, 0xf3, 0x48, 0x4b, 0x8f, 0x62, 0x21, + 0x3e, 0x42, 0x55, 0x0a, 0x76, 0xe6, 0x02, 0x86, 0xed, 0x17, 0x94, 0xfd, 0x06, 0x85, 0x2c, 0x5c, + 0x18, 0x84, 0xf9, 0x14, 0x6d, 0xc8, 0xb2, 0x96, 0x09, 0xe0, 0xe4, 0x57, 0x0e, 0xf7, 0x6c, 0xd7, + 0x09, 0x22, 0x87, 0x76, 0xc2, 0x38, 0xfd, 0xb7, 0xd5, 0xdd, 0xf8, 0x4e, 0xc1, 0x39, 0x34, 0x63, + 0x53, 0x4b, 0x59, 0x1e, 0x68, 0x43, 0x79, 0x04, 0xd6, 0xaa, 0x28, 0x12, 0xe1, 0x17, 0xe8, 0xc1, + 0x80, 0xcb, 0x88, 0x31, 0x3f, 0xf3, 0x9b, 0x24, 0xc1, 0x7c, 0xa3, 0xb4, 0x7f, 0x13, 0xcc, 0xd8, + 0xc3, 0x19, 0x63, 0xbe, 0x75, 0xaf, 0xcf, 0xa9, 0x5c, 0x4a, 0x94, 0x92, 0x03, 0xc7, 0x7f, 0x32, + 0xd0, 0xc3, 0xa2, 0x0d, 0x27, 0x7d, 0x1e, 0x31, 0x1a, 0x0a, 0x30, 0xef, 0x28, 0xf7, 0xef, 0xbe, + 0xce, 0xd6, 0xf7, 0x62, 0x84, 0x33, 0x05, 0x60, 0xd5, 0xc4, 0x58, 0x1d, 0xfc, 0x0b, 0xb4, 0xdc, + 0x26, 0xc4, 0xf6, 0x28, 0xc4, 0xbe, 0xd3, 0xcd, 0x63, 0x75, 0xf0, 0x45, 0x7d, 0x77, 0x4c, 0xc8, + 0xa1, 0x36, 0x49, 0xb6, 0x66, 0x2d, 0xb6, 0x87, 0x17, 0x31, 0x47, 0x9b, 0x7d, 0xf8, 0xe9, 0x5d, + 0x46, 0x09, 0xb7, 0x85, 0xf0, 0xcd, 0x45, 0xb5, 0xcb, 0x77, 0xc6, 0xfb, 0xd1, 0x71, 0x37, 0x29, + 0xe1, 0xcd, 0xe6, 0x53, 0x6b, 0xb5, 0x3d, 0x5a, 0x24, 0x7c, 0xfc, 0x99, 0x81, 0xb6, 0xfb, 0x9c, + 0xb6, 0x7a, 0xae, 0x6c, 0xb4, 0x4b, 0xe6, 0xf7, 0x02, 0x92, 0x84, 0x00, 0xe6, 0x92, 0x72, 0xfd, + 0xdd, 0xf1, 0xae, 0xf7, 0x95, 0xfd, 0xc7, 0xca, 0x5c, 0xfb, 0x02, 0xab, 0xda, 0x2e, 0x57, 0xc0, + 0x3f, 0x40, 0xeb, 0x14, 0xec, 0x36, 0xe5, 0x20, 0x6c, 0x19, 0x8e, 0x7b, 0xe5, 0xfa, 0xc4, 0x6e, + 0xd3, 0x90, 0x42, 0x97, 0x78, 0xe6, 0xb2, 0xea, 0x8e, 0xbb, 0x14, 0x8e, 0xa5, 0xc6, 0x31, 0x21, + 0x07, 0x52, 0x7e, 0xac, 0xc5, 0xf8, 0x8f, 0x06, 0x7a, 0x3b, 0x22, 0xf1, 0xd5, 0x74, 0xbd, 0x72, + 0x5d, 0x79, 0xdd, 0x72, 0xad, 0x6b, 0xfc, 0xe6, 0xd8, 0xaa, 0xfd, 0xab, 0x81, 0x1a, 0x05, 0xc1, + 0x14, 0x55, 0xef, 0x5d, 0x15, 0xcd, 0xfb, 0xff, 0x4b, 0xf5, 0xc6, 0x8e, 0x74, 0x11, 0x3f, 0x1a, + 0x15, 0xe4, 0xe8, 0x5a, 0x7e, 0x17, 0xad, 0xc6, 0x41, 0x81, 0xcd, 0x22, 0x61, 0xb3, 0x9e, 0xb0, + 0x1d, 0xcf, 0xe3, 0x04, 0x80, 0x80, 0x69, 0x6e, 0xdd, 0xac, 0xcf, 0x58, 0x2b, 0x5a, 0xe1, 0x59, + 0x24, 0x9e, 0xf5, 0xc4, 0x5e, 0x22, 0xc5, 0x3f, 0x47, 0x66, 0x97, 0x82, 0x60, 0x9c, 0xba, 0x8e, + 0xaf, 0x07, 0x2d, 0x27, 0x2e, 0xe3, 0x1e, 0x98, 0xab, 0x6a, 0x27, 0xdb, 0x25, 0x3b, 0x21, 0x56, + 0xac, 0x6a, 0xad, 0x64, 0x20, 0xf9, 0x75, 0xfc, 0x09, 0x5a, 0x69, 0xd1, 0xd0, 0xe1, 0x57, 0x32, + 0x30, 0x39, 0xd9, 0x53, 0xb2, 0xb5, 0x56, 0x3a, 0xde, 0xf6, 0x95, 0xd1, 0xb3, 0xd8, 0x46, 0xf3, + 0xad, 0xa5, 0xd6, 0xf0, 0x22, 0xe0, 0x2e, 0xda, 0x1d, 0xe9, 0xc1, 0xa6, 0x1e, 0x64, 0x63, 0xc5, + 0x6e, 0x33, 0x9e, 0x9b, 0x37, 0xe6, 0xba, 0x3a, 0x94, 0xb7, 0x46, 0x20, 0x9e, 0x78, 0x90, 0x0e, + 0x89, 0x63, 0xc6, 0xb3, 0xd1, 0x81, 0x9b, 0xa8, 0x9e, 0xa3, 0x9e, 0x03, 0xf8, 0x82, 0x49, 0x17, + 0x2e, 0xb1, 0x5d, 0x9f, 0x01, 0x31, 0x37, 0x14, 0x7e, 0x2d, 0xe3, 0x9c, 0x79, 0xd8, 0x26, 0x3b, + 0x96, 0xaa, 0x07, 0x52, 0x13, 0xff, 0xce, 0x40, 0x75, 0xa7, 0xe7, 0xca, 0x08, 0xb2, 0x41, 0x22, + 0xb8, 0x13, 0x42, 0x9b, 0x70, 0xdb, 0x23, 0x21, 0x0b, 0x6c, 0x8f, 0xb8, 0x34, 0x70, 0x7c, 0x30, + 0x37, 0x4b, 0xd9, 0xe4, 0xa1, 0x54, 0x3e, 0xd4, 0xba, 0x7a, 0x16, 0xde, 0xd7, 0xd8, 0xc9, 0xf8, + 0x69, 0x6a, 0xe4, 0x3e, 0x5d, 0x49, 0x84, 0xee, 0xb9, 0x2c, 0xf4, 0x14, 0xfb, 0x72, 0x7c, 0x7b, + 0x14, 0xe3, 0x04, 0xb3, 0x52, 0x3a, 0x9a, 0x0f, 0x32, 0xfb, 0x11, 0xec, 0xd3, 0xaa, 0xba, 0x85, + 0x72, 0x85, 0x2e, 0x4b, 0x25, 0x21, 0x26, 0x84, 0xd8, 0x41, 0xcf, 0x17, 0x34, 0xf2, 0x29, 0xe1, + 0x60, 0x56, 0x4b, 0x4b, 0x45, 0xd3, 0x0d, 0x42, 0x4e, 0x53, 0x13, 0x6b, 0x29, 0x18, 0x5e, 0x04, + 0xfc, 0x53, 0xb4, 0x98, 0xee, 0xc6, 0x06, 0xf2, 0x69, 0x8f, 0x28, 0x42, 0xb9, 0xa5, 0xe0, 0xeb, + 0x05, 0xf0, 0x69, 0x84, 0xe7, 0xda, 0xc0, 0xc2, 0x6c, 0x70, 0x09, 0x30, 0x41, 0x38, 0xc7, 0x57, + 0xe3, 0xfb, 0x16, 0xcc, 0x7b, 0xa5, 0xf7, 0xec, 0x5e, 0xa7, 0xc3, 0x49, 0xc7, 0x11, 0x24, 0xe3, + 0xac, 0xf1, 0x45, 0x1a, 0x37, 0x8f, 0x75, 0x07, 0x06, 0xd6, 0x01, 0xff, 0x08, 0x2d, 0xe8, 0x33, + 0x4a, 0x5c, 0xd4, 0x4a, 0x7b, 0x34, 0x3e, 0x1b, 0x8d, 0x3a, 0x1f, 0xe4, 0xbe, 0x00, 0x3b, 0x68, + 0xa9, 0xc3, 0x1d, 0x39, 0x99, 0x7a, 0xa2, 0xcb, 0x38, 0xfd, 0xb5, 0x13, 0x93, 0xf7, 0x6d, 0x85, + 0xd8, 0x28, 0x1a, 0x0e, 0x3d, 0xdf, 0xff, 0x40, 0x9a, 0xed, 0xf5, 0x59, 0x59, 0x8b, 0x9d, 0xe1, + 0x45, 0xfc, 0x04, 0xcd, 0x3b, 0x0a, 0xc2, 0x56, 0x52, 0x30, 0xef, 0x97, 0x72, 0x77, 0x89, 0xbd, + 0xa7, 0x96, 0x95, 0x07, 0x6b, 0xce, 0xc9, 0x3e, 0x00, 0xff, 0x04, 0x2d, 0xc6, 0xdd, 0x10, 0xd0, + 0xd0, 0x0e, 0x59, 0x5c, 0x49, 0x60, 0x3e, 0x18, 0xf3, 0xa7, 0x2d, 0x64, 0xc1, 0x29, 0x0d, 0x3f, + 0xd4, 0xfa, 0xf2, 0x4f, 0x5b, 0xff, 0x0a, 0x60, 0x1f, 0x99, 0xb9, 0xdc, 0x71, 0x0a, 0x17, 0x76, + 0xc4, 0x59, 0x9b, 0xfa, 0x04, 0xcc, 0x87, 0xa5, 0xac, 0x38, 0x4b, 0x9c, 0x45, 0xe1, 0xe2, 0x2c, + 0x36, 0xd2, 0xd9, 0x5b, 0x81, 0x51, 0x42, 0xc0, 0x97, 0x68, 0x23, 0xe7, 0x4d, 0x67, 0x53, 0x39, + 0x0d, 0x98, 0x47, 0xc0, 0x7c, 0xb3, 0xb4, 0xc9, 0x32, 0x8f, 0xfa, 0x52, 0xa4, 0x70, 0x71, 0xca, + 0x92, 0xfb, 0xd6, 0x5a, 0x85, 0x02, 0x39, 0xd4, 0x9e, 0xa2, 0x3b, 0x43, 0xa5, 0x8c, 0xd7, 0xd0, + 0x74, 0xd2, 0x07, 0xea, 0xcf, 0xf8, 0xa4, 0x95, 0x7e, 0xe3, 0x75, 0x34, 0x93, 0xde, 0x74, 0xe6, + 0x8d, 0x2d, 0xa3, 0x3e, 0x63, 0x4d, 0x07, 0xfa, 0x2e, 0xab, 0xbd, 0x40, 0xab, 0x85, 0x0c, 0x05, + 0x9b, 0xe8, 0x96, 0x0e, 0x42, 0x81, 0xce, 0x58, 0xc9, 0x27, 0x3e, 0x44, 0xd3, 0x29, 0xff, 0xb9, + 0xa1, 0x78, 0xd6, 0xa3, 0xf1, 0x24, 0x24, 0x21, 0x3e, 0xb7, 0x44, 0x4c, 0x73, 0x6a, 0x7f, 0x33, + 0x50, 0x75, 0x0c, 0x49, 0xc1, 0xdf, 0x46, 0x2b, 0x9a, 0xfc, 0x80, 0x70, 0xb8, 0xa4, 0x5d, 0x01, + 0x01, 0xe1, 0x04, 0x91, 0x0a, 0xe9, 0xa6, 0xb5, 0x14, 0x4b, 0xcf, 0xa5, 0xb0, 0x99, 0xc8, 0xf0, + 0x13, 0xb4, 0xd0, 0xdf, 0xc3, 0xfa, 0x7d, 0xa1, 0xe8, 0xc6, 0xdd, 0xeb, 0x6b, 0xdb, 0xf9, 0xbe, + 0x6e, 0xad, 0xb5, 0xd1, 0x7c, 0x9f, 0xbc, 0xe4, 0x5c, 0xde, 0x43, 0x53, 0xa9, 0x3f, 0xa3, 0x3e, + 0xb3, 0xbf, 0x2d, 0xef, 0xee, 0x7f, 0x7d, 0x5d, 0x5d, 0x77, 0x19, 0x04, 0x0c, 0xc0, 0xbb, 0x68, + 0x50, 0xb6, 0x13, 0x38, 0xa2, 0xdb, 0x78, 0x4a, 0x3a, 0x8e, 0x7b, 0x75, 0x48, 0x5c, 0x4b, 0x9b, + 0xd4, 0x5e, 0xa0, 0xda, 0x35, 0x38, 0x42, 0xa9, 0x73, 0x4d, 0x5d, 0x5e, 0xc7, 0x79, 0x6c, 0x52, + 0xfb, 0x87, 0x81, 0x1e, 0x5d, 0x9b, 0xd3, 0xe0, 0x1f, 0xa2, 0xf5, 0x3c, 0x95, 0x1b, 0x9d, 0x1a, + 0x93, 0xa7, 0x7c, 0x6c, 0x20, 0x3d, 0x9f, 0x64, 0xe9, 0x49, 0x23, 0xfe, 0x3f, 0xff, 0x2a, 0x24, + 0x39, 0x8b, 0x3f, 0x6b, 0x7f, 0x37, 0xd0, 0xed, 0x81, 0x27, 0x04, 0xbc, 0x8d, 0xe6, 0x73, 0x1d, + 0x4b, 0x3d, 0x7d, 0x7e, 0x73, 0xd9, 0xe2, 0x89, 0x87, 0x3b, 0x68, 0x65, 0xf4, 0x83, 0x85, 0xae, + 0xf3, 0x6f, 0x8d, 0x6d, 0xe8, 0xec, 0x61, 0x42, 0x8f, 0xee, 0xa5, 0x51, 0x8f, 0x16, 0xdf, 0x9f, + 0xfe, 0xc3, 0x17, 0xd5, 0x89, 0xff, 0x7c, 0x51, 0x9d, 0xa8, 0xfd, 0xfe, 0x06, 0xba, 0x5b, 0x70, + 0x1d, 0xcb, 0x6c, 0xab, 0x2b, 0x97, 0xf0, 0x24, 0xdb, 0xfa, 0x13, 0x3f, 0x41, 0x58, 0x30, 0xe1, + 0xf8, 0xb6, 0xbe, 0xfc, 0x03, 0x55, 0x12, 0x71, 0xe6, 0x37, 0x75, 0xe6, 0x97, 0x87, 0x33, 0x7f, + 0x12, 0x0a, 0xeb, 0x0d, 0x65, 0x18, 0xbb, 0x53, 0x66, 0x78, 0x0f, 0x6d, 0xfa, 0x0e, 0x08, 0xdb, + 0x23, 0xbe, 0x9c, 0x64, 0x8a, 0x7e, 0xb9, 0x5d, 0xe2, 0x5e, 0x48, 0x46, 0x44, 0x03, 0x62, 0xde, + 0x54, 0x19, 0x5d, 0x93, 0x4a, 0x87, 0x99, 0xce, 0x41, 0xac, 0x22, 0x13, 0x8b, 0xf7, 0xd0, 0x94, + 0x1e, 0x0e, 0x93, 0xa5, 0x34, 0x7e, 0x78, 0x97, 0x96, 0x36, 0xac, 0x71, 0x74, 0x7b, 0x60, 0x74, + 0x64, 0xfb, 0x27, 0xfd, 0xfb, 0x27, 0xf8, 0x08, 0xcd, 0xe5, 0x67, 0x92, 0x4e, 0x4f, 0xad, 0xb0, + 0xc1, 0xb3, 0x71, 0x34, 0x9b, 0x1b, 0x47, 0xb5, 0xbf, 0x18, 0x68, 0xbd, 0xe4, 0xfa, 0xbf, 0x5e, + 0xd1, 0xfc, 0x18, 0xcd, 0xe5, 0xc7, 0x8d, 0x8e, 0xe5, 0xad, 0xd7, 0x99, 0x36, 0xba, 0x56, 0x66, + 0x79, 0xb6, 0x54, 0xfb, 0xb3, 0x81, 0x2a, 0xe5, 0x83, 0xe2, 0x7a, 0xe1, 0x95, 0x4d, 0x00, 0xfc, + 0x18, 0x4d, 0xca, 0x81, 0xa5, 0x32, 0xbc, 0xb0, 0x5b, 0x2d, 0x88, 0x39, 0x75, 0xab, 0x94, 0xf7, + 0x2f, 0xbe, 0x7c, 0x59, 0x31, 0xbe, 0x7a, 0x59, 0x31, 0xfe, 0xfd, 0xb2, 0x62, 0x7c, 0xfe, 0xaa, + 0x32, 0xf1, 0xd5, 0xab, 0xca, 0xc4, 0x3f, 0x5f, 0x55, 0x26, 0x7e, 0xf6, 0x51, 0x87, 0x8a, 0x6e, + 0xaf, 0xd5, 0x70, 0x59, 0xb0, 0x73, 0x92, 0x40, 0x3d, 0x75, 0x5a, 0xb0, 0x93, 0x02, 0xbf, 0xed, + 0x32, 0x4e, 0xf2, 0x9f, 0x5d, 0x87, 0x86, 0x3b, 0x01, 0x93, 0x9c, 0x1a, 0xb2, 0xb7, 0x67, 0x71, + 0x15, 0x11, 0xd8, 0xb9, 0xdc, 0x6d, 0x4d, 0xa9, 0xf7, 0xe7, 0xc7, 0xff, 0x0d, 0x00, 0x00, 0xff, + 0xff, 0x8e, 0x9a, 0xc9, 0x7e, 0x64, 0x17, 0x00, 0x00, } func (m *GenesisState) Marshal() (dAtA []byte, err error) { @@ -1074,6 +1153,22 @@ func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.SubaccountMarketRiskModes) > 0 { + for iNdEx := len(m.SubaccountMarketRiskModes) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.SubaccountMarketRiskModes[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2 + i-- + dAtA[i] = 0xba + } + } if len(m.SubaccountRiskProfiles) > 0 { for iNdEx := len(m.SubaccountRiskProfiles) - 1; iNdEx >= 0; iNdEx-- { { @@ -2042,6 +2137,48 @@ func (m *SubaccountRiskProfileRecord) MarshalToSizedBuffer(dAtA []byte) (int, er return len(dAtA) - i, nil } +func (m *SubaccountMarketRiskModeRecord) 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 *SubaccountMarketRiskModeRecord) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SubaccountMarketRiskModeRecord) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Mode != 0 { + i = encodeVarintGenesis(dAtA, i, uint64(m.Mode)) + i-- + dAtA[i] = 0x18 + } + if len(m.MarketId) > 0 { + i -= len(m.MarketId) + copy(dAtA[i:], m.MarketId) + i = encodeVarintGenesis(dAtA, i, uint64(len(m.MarketId))) + i-- + dAtA[i] = 0x12 + } + if len(m.SubaccountId) > 0 { + i -= len(m.SubaccountId) + copy(dAtA[i:], m.SubaccountId) + i = encodeVarintGenesis(dAtA, i, uint64(len(m.SubaccountId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func encodeVarintGenesis(dAtA []byte, offset int, v uint64) int { offset -= sovGenesis(v) base := offset @@ -2270,6 +2407,12 @@ func (m *GenesisState) Size() (n int) { n += 2 + l + sovGenesis(uint64(l)) } } + if len(m.SubaccountMarketRiskModes) > 0 { + for _, e := range m.SubaccountMarketRiskModes { + l = e.Size() + n += 2 + l + sovGenesis(uint64(l)) + } + } return n } @@ -2443,6 +2586,26 @@ func (m *SubaccountRiskProfileRecord) Size() (n int) { return n } +func (m *SubaccountMarketRiskModeRecord) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.SubaccountId) + if l > 0 { + n += 1 + l + sovGenesis(uint64(l)) + } + l = len(m.MarketId) + if l > 0 { + n += 1 + l + sovGenesis(uint64(l)) + } + if m.Mode != 0 { + n += 1 + sovGenesis(uint64(m.Mode)) + } + return n +} + func sovGenesis(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } @@ -3725,6 +3888,40 @@ func (m *GenesisState) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 39: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SubaccountMarketRiskModes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SubaccountMarketRiskModes = append(m.SubaccountMarketRiskModes, &SubaccountMarketRiskModeRecord{}) + if err := m.SubaccountMarketRiskModes[len(m.SubaccountMarketRiskModes)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenesis(dAtA[iNdEx:]) @@ -4920,6 +5117,139 @@ func (m *SubaccountRiskProfileRecord) Unmarshal(dAtA []byte) error { } return nil } +func (m *SubaccountMarketRiskModeRecord) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SubaccountMarketRiskModeRecord: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SubaccountMarketRiskModeRecord: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SubaccountId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SubaccountId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MarketId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.MarketId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Mode", wireType) + } + m.Mode = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Mode |= RiskMode(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipGenesis(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenesis + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func skipGenesis(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 diff --git a/chain/exchange/types/v2/msgs.go b/chain/exchange/types/v2/msgs.go index 879f17fc6..a34b7c6e6 100644 --- a/chain/exchange/types/v2/msgs.go +++ b/chain/exchange/types/v2/msgs.go @@ -21,6 +21,7 @@ var ( _ sdk.Msg = &MsgDeposit{} _ sdk.Msg = &MsgWithdraw{} _ sdk.Msg = &MsgUpdateSubaccountRiskProfile{} + _ sdk.Msg = &MsgUpdateSubaccountMarketRiskMode{} _ sdk.Msg = &MsgCreateSpotLimitOrder{} _ sdk.Msg = &MsgBatchCreateSpotLimitOrders{} _ sdk.Msg = &MsgCreateSpotMarketOrder{} @@ -84,6 +85,7 @@ const ( TypeMsgDeposit = "msgDeposit" TypeMsgWithdraw = "msgWithdraw" TypeMsgUpdateSubaccountRiskProfile = "updateSubaccountRiskProfile" + TypeMsgUpdateSubaccountMarketRiskMode = "updateSubaccountMarketRiskMode" TypeMsgCreateSpotLimitOrder = "createSpotLimitOrder" TypeMsgBatchCreateSpotLimitOrders = "batchCreateSpotLimitOrders" TypeMsgCreateSpotMarketOrder = "createSpotMarketOrder" @@ -668,6 +670,49 @@ func (msg MsgUpdateSubaccountRiskProfile) GetSigners() []sdk.AccAddress { return []sdk.AccAddress{sdk.MustAccAddressFromBech32(msg.Sender)} } +// Route implements the sdk.Msg interface. It should return the name of the module +func (MsgUpdateSubaccountMarketRiskMode) Route() string { return RouterKey } + +// Type implements the sdk.Msg interface. It should return the action. +func (MsgUpdateSubaccountMarketRiskMode) Type() string { return TypeMsgUpdateSubaccountMarketRiskMode } + +// ValidateBasic implements the sdk.Msg interface. It runs stateless checks on the message. +func (msg MsgUpdateSubaccountMarketRiskMode) ValidateBasic() error { + senderAddr, err := sdk.AccAddressFromBech32(msg.Sender) + if err != nil { + return errors.Wrap(sdkerrors.ErrInvalidAddress, msg.Sender) + } + + if err := types.CheckValidSubaccountIDOrNonce(senderAddr, msg.SubaccountId); err != nil { + return err + } + + if !types.IsHexHash(msg.MarketId) { + return errors.Wrap(types.ErrMarketInvalid, msg.MarketId) + } + + // UNSPECIFIED unpins the market back to the profile default; ISOLATED and + // CROSS pin it. Portfolio remains unsupported. + switch msg.Mode { + case RiskMode_RISK_MODE_UNSPECIFIED, RiskMode_RISK_MODE_ISOLATED, RiskMode_RISK_MODE_CROSS: + // supported + default: + return errors.Wrap(types.ErrFeatureDisabled, "risk mode is not supported") + } + + return nil +} + +// GetSignBytes implements the sdk.Msg interface. It encodes the message for signing +func (msg *MsgUpdateSubaccountMarketRiskMode) GetSignBytes() []byte { + return sdk.MustSortJSON(types.ModuleCdc.MustMarshalJSON(msg)) +} + +// GetSigners implements the sdk.Msg interface. It defines whose signature is required +func (msg MsgUpdateSubaccountMarketRiskMode) GetSigners() []sdk.AccAddress { + return []sdk.AccAddress{sdk.MustAccAddressFromBech32(msg.Sender)} +} + // Route implements the sdk.Msg interface. It should return the name of the module func (msg MsgInstantSpotMarketLaunch) Route() string { return RouterKey } diff --git a/chain/exchange/types/v2/params.go b/chain/exchange/types/v2/params.go index 8f5fcd234..83b55f38b 100644 --- a/chain/exchange/types/v2/params.go +++ b/chain/exchange/types/v2/params.go @@ -15,40 +15,51 @@ import ( var _ paramtypes.ParamSet = &Params{} +const ( + MaxLiquidationCooldownBlocks uint64 = 1000 + + // DefaultMaxCrossMarginSpotOrdersPerSubaccountPerDenom caps cross-margin + // spot order count per (subaccount, locking denom) at admission so the + // liquidation cancel-first work for cross-margin pools is bounded by a + // numeric protocol limit. + DefaultMaxCrossMarginSpotOrdersPerSubaccountPerDenom uint32 = 200 + MaxCrossMarginSpotOrdersPerSubaccountPerDenom uint32 = 1000 +) + // Parameter keys var ( - KeySpotMarketInstantListingFee = []byte("SpotMarketInstantListingFee") - KeyDerivativeMarketInstantListingFee = []byte("DerivativeMarketInstantListingFee") - KeyDefaultSpotMakerFeeRate = []byte("DefaultSpotMakerFeeRate") - KeyDefaultSpotTakerFeeRate = []byte("DefaultSpotTakerFeeRate") - KeyDefaultDerivativeMakerFeeRate = []byte("DefaultDerivativeMakerFeeRate") - KeyDefaultDerivativeTakerFeeRate = []byte("DefaultDerivativeTakerFeeRate") - KeyDefaultInitialMarginRatio = []byte("DefaultInitialMarginRatio") - KeyDefaultMaintenanceMarginRatio = []byte("DefaultMaintenanceMarginRatio") - KeyDefaultReduceMarginRatio = []byte("DefaultReduceMarginRatio") - KeyDefaultFundingInterval = []byte("DefaultFundingInterval") - KeyFundingMultiple = []byte("FundingMultiple") - KeyRelayerFeeShareRate = []byte("RelayerFeeShareRate") - KeyDefaultHourlyFundingRateCap = []byte("DefaultHourlyFundingRateCap") - KeyDefaultHourlyInterestRate = []byte("DefaultHourlyInterestRate") - KeyMaxDerivativeOrderSideCount = []byte("MaxDerivativeOrderSideCount") - KeyInjRewardStakedRequirementThreshold = []byte("KeyInjRewardStakedRequirementThreshold") - KeyTradingRewardsVestingDuration = []byte("TradingRewardsVestingDuration") - KeyLiquidatorRewardShareRate = []byte("LiquidatorRewardShareRate") - KeyWhiteKnightLiquidators = []byte("WhiteKnightLiquidators") - KeyWhiteKnightLiquidatorRewardShareRate = []byte("WhiteKnightLiquidatorRewardShareRate") - KeyBinaryOptionsMarketInstantListingFee = []byte("BinaryOptionsMarketInstantListingFee") - KeyAtomicMarketOrderAccessLevel = []byte("AtomicMarketOrderAccessLevel") - KeySpotAtomicMarketOrderFeeMultiplier = []byte("SpotAtomicMarketOrderFeeMultiplier") - KeyDerivativeAtomicMarketOrderFeeMultiplier = []byte("DerivativeAtomicMarketOrderFeeMultiplier") - KeyBinaryOptionsAtomicMarketOrderFeeMultiplier = []byte("BinaryOptionsAtomicMarketOrderFeeMultiplier") - KeyMinimalProtocolFeeRate = []byte("MinimalProtocolFeeRate") - KeyIsInstantDerivativeMarketLaunchEnabled = []byte("IsInstantDerivativeMarketLaunchEnabled") - KeyPostOnlyModeHeightThreshold = []byte("PostOnlyModeHeightThreshold") - KeyPostOnlyModeBlocksAmount = []byte("PostOnlyModeBlocksAmount") - KeyMinPostOnlyModeDowntimeDuration = []byte("MinPostOnlyModeDowntimeDuration") - KeyPostOnlyModeBlocksAmountAfterDowntime = []byte("PostOnlyModeBlocksAmountAfterDowntime") - KeyCrossMarginParams = []byte("CrossMarginParams") + KeySpotMarketInstantListingFee = []byte("SpotMarketInstantListingFee") + KeyDerivativeMarketInstantListingFee = []byte("DerivativeMarketInstantListingFee") + KeyDefaultSpotMakerFeeRate = []byte("DefaultSpotMakerFeeRate") + KeyDefaultSpotTakerFeeRate = []byte("DefaultSpotTakerFeeRate") + KeyDefaultDerivativeMakerFeeRate = []byte("DefaultDerivativeMakerFeeRate") + KeyDefaultDerivativeTakerFeeRate = []byte("DefaultDerivativeTakerFeeRate") + KeyDefaultInitialMarginRatio = []byte("DefaultInitialMarginRatio") + KeyDefaultMaintenanceMarginRatio = []byte("DefaultMaintenanceMarginRatio") + KeyDefaultReduceMarginRatio = []byte("DefaultReduceMarginRatio") + KeyDefaultFundingInterval = []byte("DefaultFundingInterval") + KeyFundingMultiple = []byte("FundingMultiple") + KeyRelayerFeeShareRate = []byte("RelayerFeeShareRate") + KeyDefaultHourlyFundingRateCap = []byte("DefaultHourlyFundingRateCap") + KeyDefaultHourlyInterestRate = []byte("DefaultHourlyInterestRate") + KeyMaxDerivativeOrderSideCount = []byte("MaxDerivativeOrderSideCount") + KeyInjRewardStakedRequirementThreshold = []byte("KeyInjRewardStakedRequirementThreshold") + KeyTradingRewardsVestingDuration = []byte("TradingRewardsVestingDuration") + KeyLiquidatorRewardShareRate = []byte("LiquidatorRewardShareRate") + KeyWhiteKnightLiquidators = []byte("WhiteKnightLiquidators") + KeyWhiteKnightLiquidatorRewardShareRate = []byte("WhiteKnightLiquidatorRewardShareRate") + KeyBinaryOptionsMarketInstantListingFee = []byte("BinaryOptionsMarketInstantListingFee") + KeyAtomicMarketOrderAccessLevel = []byte("AtomicMarketOrderAccessLevel") + KeySpotAtomicMarketOrderFeeMultiplier = []byte("SpotAtomicMarketOrderFeeMultiplier") + KeyDerivativeAtomicMarketOrderFeeMultiplier = []byte("DerivativeAtomicMarketOrderFeeMultiplier") + KeyBinaryOptionsAtomicMarketOrderFeeMultiplier = []byte("BinaryOptionsAtomicMarketOrderFeeMultiplier") + KeyMinimalProtocolFeeRate = []byte("MinimalProtocolFeeRate") + KeyIsInstantDerivativeMarketLaunchEnabled = []byte("IsInstantDerivativeMarketLaunchEnabled") + KeyPostOnlyModeHeightThreshold = []byte("PostOnlyModeHeightThreshold") + KeyPostOnlyModeBlocksAmount = []byte("PostOnlyModeBlocksAmount") + KeyMinPostOnlyModeDowntimeDuration = []byte("MinPostOnlyModeDowntimeDuration") + KeyPostOnlyModeBlocksAmountAfterDowntime = []byte("PostOnlyModeBlocksAmountAfterDowntime") + KeyCrossMarginParams = []byte("CrossMarginParams") ) // ParamSetPairs returns the parameter set pairs. @@ -191,10 +202,10 @@ func DefaultParams() Params { ExchangeAdmins: []string{}, FixedGasEnabled: false, EmitLegacyVersionEvents: true, - PostOnlyModeBlocksAmount: 2000, // default 2000 blocks - MinPostOnlyModeDowntimeDuration: "DURATION_10M", // default 10 minutes - PostOnlyModeBlocksAmountAfterDowntime: 1000, // default 1000 blocks - CrossMarginParams: DefaultCrossMarginParams(), + PostOnlyModeBlocksAmount: 2000, // default 2000 blocks + MinPostOnlyModeDowntimeDuration: "DURATION_10M", // default 10 minutes + PostOnlyModeBlocksAmountAfterDowntime: 1000, // default 1000 blocks + CrossMarginParams: DefaultCrossMarginParams(), } } @@ -303,39 +314,83 @@ func (p Params) Validate() error { // DefaultCrossMarginParams returns default cross-margin parameters. func DefaultCrossMarginParams() CrossMarginParams { return CrossMarginParams{ - PositiveUpnlHaircutRate: math.LegacyNewDecWithPrec(5, 1), // default 50% haircut - FeesBuffer: math.LegacyZeroDec(), - EnabledQuoteDenoms: []string{}, - PerpetualEnabled: true, - ExpiryEnabled: true, - MaxActiveDerivativeMarketsPerPool: 100, - EmergencyPaused: false, + PositiveUpnlHaircutRate: math.LegacyNewDecWithPrec(5, 1), // default 50% haircut + FeesBuffer: math.LegacyZeroDec(), + EnabledQuoteDenoms: []string{}, + PerpetualEnabled: true, + ExpiryEnabled: true, + MaxActiveDerivativeMarketsPerPool: 100, + EmergencyPaused: false, + BackstopMarginRatio: math.LegacyNewDecWithPrec(5, 2), // default 5% buffer above MM + PartialLiquidationRatio: math.LegacyOneDec(), // default 100% of shortfall + LiquidationCooldownBlocks: 0, + MaxCrossMarginSpotOrdersPerSubaccountPerDenom: DefaultMaxCrossMarginSpotOrdersPerSubaccountPerDenom, + UtilRatio: math.LegacyOneDec(), + MaxIsolatedActiveDerivativeMarketsPerSubaccountPerDenom: 100, } } -// Validate performs basic validation on cross-margin parameters. -// Dec fields are validated only when non-nil (nil means the caller did not set the field -// and the msg server handler will backfill from current on-chain params before persisting). -// Non-Dec fields are always validated so that genesis and direct callers cannot import -// malformed configuration. +// Validate enforces value ranges on every CrossMarginParams field. func (p CrossMarginParams) Validate() error { - if !p.PositiveUpnlHaircutRate.IsNil() { - if err := types.ValidateFee(p.PositiveUpnlHaircutRate); err != nil { - return fmt.Errorf("cross_margin_positive_upnl_haircut_rate is incorrect: %w", err) - } + if p.PositiveUpnlHaircutRate.IsNil() { + return errors.New("cross_margin: positive_upnl_haircut_rate must be set") } - if !p.FeesBuffer.IsNil() { - if err := types.ValidateNonNegativeDec(p.FeesBuffer); err != nil { - return fmt.Errorf("cross_margin_fees_buffer is incorrect: %w", err) - } + if err := types.ValidateFee(p.PositiveUpnlHaircutRate); err != nil { + return fmt.Errorf("cross_margin_positive_upnl_haircut_rate is incorrect: %w", err) } - if err := ValidateCrossMarginEnabledQuoteDenoms(p.EnabledQuoteDenoms); err != nil { - return fmt.Errorf("cross_margin_enabled_quote_denoms are invalid: %w", err) + if p.FeesBuffer.IsNil() { + return errors.New("cross_margin: fees_buffer must be set") + } + if err := types.ValidateNonNegativeDec(p.FeesBuffer); err != nil { + return fmt.Errorf("cross_margin_fees_buffer is incorrect: %w", err) } if err := ValidateCrossMarginMaxActiveDerivativeMarketsPerPool(p.MaxActiveDerivativeMarketsPerPool); err != nil { return fmt.Errorf("cross_margin_max_active_derivative_markets_per_pool is incorrect: %w", err) } + if err := ValidateCrossMarginMaxIsolatedActiveDerivativeMarkets(p.MaxIsolatedActiveDerivativeMarketsPerSubaccountPerDenom); err != nil { + return fmt.Errorf("cross_margin_max_isolated_active_derivative_markets_per_subaccount_per_denom is incorrect: %w", err) + } + if p.BackstopMarginRatio.IsNil() { + return errors.New("cross_margin: backstop_margin_ratio must be set") + } + if p.BackstopMarginRatio.IsNegative() || p.BackstopMarginRatio.GTE(math.LegacyOneDec()) { + return fmt.Errorf("backstop_margin_ratio must be in [0, 1), got %s", p.BackstopMarginRatio) + } + if p.PartialLiquidationRatio.IsNil() { + return errors.New("cross_margin: partial_liquidation_ratio must be set") + } + if !p.PartialLiquidationRatio.IsPositive() || p.PartialLiquidationRatio.GT(math.LegacyOneDec()) { + return fmt.Errorf("partial_liquidation_ratio must be in (0, 1], got %s", p.PartialLiquidationRatio) + } + if p.LiquidationCooldownBlocks > MaxLiquidationCooldownBlocks { + return fmt.Errorf( + "liquidation_cooldown_blocks must be <= %d, got %d", + MaxLiquidationCooldownBlocks, + p.LiquidationCooldownBlocks, + ) + } + if p.MaxCrossMarginSpotOrdersPerSubaccountPerDenom == 0 || + p.MaxCrossMarginSpotOrdersPerSubaccountPerDenom > MaxCrossMarginSpotOrdersPerSubaccountPerDenom { + return fmt.Errorf( + "max_cross_margin_spot_orders_per_subaccount_per_denom must be in [1, %d], got %d", + MaxCrossMarginSpotOrdersPerSubaccountPerDenom, + p.MaxCrossMarginSpotOrdersPerSubaccountPerDenom, + ) + } + // util_ratio may be nil when a client/SDK that predates the field omits it on the wire. A nil is + // treated as "use the default" — the MsgUpdateParams handler backfills it before storage and read + // paths default it to 1.0 — so it is only range-checked when present. Rejecting nil here would + // fail MsgUpdateParams.ValidateBasic(), including gov's submission-time validation of inner + // proposal messages, blocking every params update from such a client. + if !p.UtilRatio.IsNil() { + if err := types.ValidateFee(p.UtilRatio); err != nil { + return fmt.Errorf("cross_margin_util_ratio is incorrect: %w", err) + } + } + if err := ValidateCrossMarginEnabledQuoteDenoms(p.EnabledQuoteDenoms); err != nil { + return fmt.Errorf("cross_margin_enabled_quote_denoms are invalid: %w", err) + } return nil } @@ -382,20 +437,41 @@ func ValidateCrossMarginEnabledQuoteDenoms(i any) error { return nil } +// ValidateCrossMarginMaxIsolatedActiveDerivativeMarkets accepts 0 as "unset": +// the field is a proto3 uint32, so genesis files and param-update clients +// predating it decode 0, and every read and persist path normalises 0 to the +// module default. An explicit zero-cap ("no isolated activity at all") is +// therefore not an expressible semantic for this param; the smallest +// enforceable bound is 1. +func ValidateCrossMarginMaxIsolatedActiveDerivativeMarkets(i any) error { + v, ok := i.(uint32) + if !ok { + return fmt.Errorf("invalid parameter type: %T", i) + } + + const maxReasonable = 1000 + if v > maxReasonable { + return fmt.Errorf("max_isolated_active_derivative_markets_per_subaccount_per_denom %d exceeds max %d", v, maxReasonable) + } + + return nil +} + func ValidateCrossMarginMaxActiveDerivativeMarketsPerPool(i any) error { v, ok := i.(uint32) if !ok { return fmt.Errorf("invalid parameter type: %T", i) } - // Allow 0 for backwards compatibility (treated as a default cap at runtime). + // Explicit zero is rejected: a cap of zero would ban every subaccount + // from opening any cross-margin market. Valid range is [1, maxReasonable]. if v == 0 { - return nil + return errors.New("max_active_derivative_markets_per_pool must be >= 1 (explicit zero is rejected; governance must supply a positive cap)") } const maxReasonable = 1000 if v > maxReasonable { - return fmt.Errorf("value %d exceeds max %d", v, maxReasonable) + return fmt.Errorf("max_active_derivative_markets_per_pool %d exceeds max %d", v, maxReasonable) } return nil } diff --git a/chain/exchange/types/v2/proposal.go b/chain/exchange/types/v2/proposal.go index b5187c96f..364b6301d 100644 --- a/chain/exchange/types/v2/proposal.go +++ b/chain/exchange/types/v2/proposal.go @@ -786,8 +786,7 @@ func (p *OracleParams) ValidateBasic() error { return types.ErrSameOracles } switch p.OracleType { - case oracletypes.OracleType_PriceFeed, oracletypes.OracleType_Coinbase, oracletypes.OracleType_Razor, - oracletypes.OracleType_Dia, oracletypes.OracleType_API3, oracletypes.OracleType_Uma, oracletypes.OracleType_Pyth, + case oracletypes.OracleType_PriceFeed, oracletypes.OracleType_Coinbase, oracletypes.OracleType_Pyth, oracletypes.OracleType_PythPro, oracletypes.OracleType_Provider, oracletypes.OracleType_Stork, oracletypes.OracleType_ChainlinkDataStreams, oracletypes.OracleType_SedaFast: diff --git a/chain/exchange/types/v2/query.pb.go b/chain/exchange/types/v2/query.pb.go index c576f3708..567579140 100644 --- a/chain/exchange/types/v2/query.pb.go +++ b/chain/exchange/types/v2/query.pb.go @@ -4014,7 +4014,8 @@ func (m *QuerySubaccountPositionsResponse) GetState() []DerivativePosition { // Query/SubaccountPositionInMarket RPC method. type QuerySubaccountPositionInMarketResponse struct { State *Position `protobuf:"bytes,1,opt,name=state,proto3" json:"state,omitempty"` - // The risk mode of the subaccount (ISOLATED or CROSS). + // The effective margin mode of this (subaccount, market) pair + // (ISOLATED or CROSS), resolved per market. // For CROSS mode, the position's margin is an accounting value; actual // collateral is pooled. Use CrossMarginPoolSnapshot for pool-level health. RiskMode RiskMode `protobuf:"varint,2,opt,name=risk_mode,json=riskMode,proto3,enum=injective.exchange.v2.RiskMode" json:"risk_mode,omitempty"` @@ -4124,7 +4125,8 @@ func (m *EffectivePosition) GetIsLong() bool { // Query/SubaccountEffectivePositionInMarket RPC method. type QuerySubaccountEffectivePositionInMarketResponse struct { State *EffectivePosition `protobuf:"bytes,1,opt,name=state,proto3" json:"state,omitempty"` - // The risk mode of the subaccount (ISOLATED or CROSS). + // The effective margin mode of this (subaccount, market) pair + // (ISOLATED or CROSS), resolved per market. // For CROSS mode, effective_margin reflects position value but liquidation // is determined at pool level. Use CrossMarginPoolSnapshot for pool health. RiskMode RiskMode `protobuf:"varint,2,opt,name=risk_mode,json=riskMode,proto3,enum=injective.exchange.v2.RiskMode" json:"risk_mode,omitempty"` @@ -4651,6 +4653,223 @@ func (m *QuerySubaccountRiskProfileResponse) GetIsDefault() bool { return false } +// QuerySubaccountMarketRiskModesRequest is the request type for the +// Query/SubaccountMarketRiskModes RPC method. +type QuerySubaccountMarketRiskModesRequest struct { + // 32-byte hex string, consistent with existing exchange queries. + SubaccountId string `protobuf:"bytes,1,opt,name=subaccount_id,json=subaccountId,proto3" json:"subaccount_id,omitempty"` +} + +func (m *QuerySubaccountMarketRiskModesRequest) Reset() { *m = QuerySubaccountMarketRiskModesRequest{} } +func (m *QuerySubaccountMarketRiskModesRequest) String() string { return proto.CompactTextString(m) } +func (*QuerySubaccountMarketRiskModesRequest) ProtoMessage() {} +func (*QuerySubaccountMarketRiskModesRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_108a0f108cdd0cc4, []int{87} +} +func (m *QuerySubaccountMarketRiskModesRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QuerySubaccountMarketRiskModesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QuerySubaccountMarketRiskModesRequest.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 *QuerySubaccountMarketRiskModesRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QuerySubaccountMarketRiskModesRequest.Merge(m, src) +} +func (m *QuerySubaccountMarketRiskModesRequest) XXX_Size() int { + return m.Size() +} +func (m *QuerySubaccountMarketRiskModesRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QuerySubaccountMarketRiskModesRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QuerySubaccountMarketRiskModesRequest proto.InternalMessageInfo + +func (m *QuerySubaccountMarketRiskModesRequest) GetSubaccountId() string { + if m != nil { + return m.SubaccountId + } + return "" +} + +// QuerySubaccountMarketRiskModesResponse is the response type for the +// Query/SubaccountMarketRiskModes RPC method. +type QuerySubaccountMarketRiskModesResponse struct { + // the subaccount's explicit per-market overrides, in market-ID byte order + Records []*SubaccountMarketRiskModeRecord `protobuf:"bytes,1,rep,name=records,proto3" json:"records,omitempty"` +} + +func (m *QuerySubaccountMarketRiskModesResponse) Reset() { + *m = QuerySubaccountMarketRiskModesResponse{} +} +func (m *QuerySubaccountMarketRiskModesResponse) String() string { return proto.CompactTextString(m) } +func (*QuerySubaccountMarketRiskModesResponse) ProtoMessage() {} +func (*QuerySubaccountMarketRiskModesResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_108a0f108cdd0cc4, []int{88} +} +func (m *QuerySubaccountMarketRiskModesResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QuerySubaccountMarketRiskModesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QuerySubaccountMarketRiskModesResponse.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 *QuerySubaccountMarketRiskModesResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QuerySubaccountMarketRiskModesResponse.Merge(m, src) +} +func (m *QuerySubaccountMarketRiskModesResponse) XXX_Size() int { + return m.Size() +} +func (m *QuerySubaccountMarketRiskModesResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QuerySubaccountMarketRiskModesResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QuerySubaccountMarketRiskModesResponse proto.InternalMessageInfo + +func (m *QuerySubaccountMarketRiskModesResponse) GetRecords() []*SubaccountMarketRiskModeRecord { + if m != nil { + return m.Records + } + return nil +} + +// QueryEffectiveSubaccountMarketRiskModeRequest is the request type for the +// Query/EffectiveSubaccountMarketRiskMode RPC method. +type QueryEffectiveSubaccountMarketRiskModeRequest struct { + // the subaccount ID + SubaccountId string `protobuf:"bytes,1,opt,name=subaccount_id,json=subaccountId,proto3" json:"subaccount_id,omitempty"` + // the market ID + MarketId string `protobuf:"bytes,2,opt,name=market_id,json=marketId,proto3" json:"market_id,omitempty"` +} + +func (m *QueryEffectiveSubaccountMarketRiskModeRequest) Reset() { + *m = QueryEffectiveSubaccountMarketRiskModeRequest{} +} +func (m *QueryEffectiveSubaccountMarketRiskModeRequest) String() string { + return proto.CompactTextString(m) +} +func (*QueryEffectiveSubaccountMarketRiskModeRequest) ProtoMessage() {} +func (*QueryEffectiveSubaccountMarketRiskModeRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_108a0f108cdd0cc4, []int{89} +} +func (m *QueryEffectiveSubaccountMarketRiskModeRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryEffectiveSubaccountMarketRiskModeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryEffectiveSubaccountMarketRiskModeRequest.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 *QueryEffectiveSubaccountMarketRiskModeRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryEffectiveSubaccountMarketRiskModeRequest.Merge(m, src) +} +func (m *QueryEffectiveSubaccountMarketRiskModeRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryEffectiveSubaccountMarketRiskModeRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryEffectiveSubaccountMarketRiskModeRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryEffectiveSubaccountMarketRiskModeRequest proto.InternalMessageInfo + +func (m *QueryEffectiveSubaccountMarketRiskModeRequest) GetSubaccountId() string { + if m != nil { + return m.SubaccountId + } + return "" +} + +func (m *QueryEffectiveSubaccountMarketRiskModeRequest) GetMarketId() string { + if m != nil { + return m.MarketId + } + return "" +} + +// QueryEffectiveSubaccountMarketRiskModeResponse is the response type for the +// Query/EffectiveSubaccountMarketRiskMode RPC method. +type QueryEffectiveSubaccountMarketRiskModeResponse struct { + // the resolved effective mode for this (subaccount, market) pair + Mode RiskMode `protobuf:"varint,1,opt,name=mode,proto3,enum=injective.exchange.v2.RiskMode" json:"mode,omitempty"` + // true when an explicit per-market record produced the resolution (as + // opposed to the profile default or the binary-options pin) + IsOverride bool `protobuf:"varint,2,opt,name=is_override,json=isOverride,proto3" json:"is_override,omitempty"` +} + +func (m *QueryEffectiveSubaccountMarketRiskModeResponse) Reset() { + *m = QueryEffectiveSubaccountMarketRiskModeResponse{} +} +func (m *QueryEffectiveSubaccountMarketRiskModeResponse) String() string { + return proto.CompactTextString(m) +} +func (*QueryEffectiveSubaccountMarketRiskModeResponse) ProtoMessage() {} +func (*QueryEffectiveSubaccountMarketRiskModeResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_108a0f108cdd0cc4, []int{90} +} +func (m *QueryEffectiveSubaccountMarketRiskModeResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryEffectiveSubaccountMarketRiskModeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryEffectiveSubaccountMarketRiskModeResponse.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 *QueryEffectiveSubaccountMarketRiskModeResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryEffectiveSubaccountMarketRiskModeResponse.Merge(m, src) +} +func (m *QueryEffectiveSubaccountMarketRiskModeResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryEffectiveSubaccountMarketRiskModeResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryEffectiveSubaccountMarketRiskModeResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryEffectiveSubaccountMarketRiskModeResponse proto.InternalMessageInfo + +func (m *QueryEffectiveSubaccountMarketRiskModeResponse) GetMode() RiskMode { + if m != nil { + return m.Mode + } + return RiskMode_RISK_MODE_UNSPECIFIED +} + +func (m *QueryEffectiveSubaccountMarketRiskModeResponse) GetIsOverride() bool { + if m != nil { + return m.IsOverride + } + return false +} + // QueryCrossMarginPoolSnapshotRequest is the request type for the // Query/CrossMarginPoolSnapshot RPC method. type QueryCrossMarginPoolSnapshotRequest struct { @@ -4664,7 +4883,7 @@ func (m *QueryCrossMarginPoolSnapshotRequest) Reset() { *m = QueryCrossM func (m *QueryCrossMarginPoolSnapshotRequest) String() string { return proto.CompactTextString(m) } func (*QueryCrossMarginPoolSnapshotRequest) ProtoMessage() {} func (*QueryCrossMarginPoolSnapshotRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{87} + return fileDescriptor_108a0f108cdd0cc4, []int{91} } func (m *QueryCrossMarginPoolSnapshotRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4745,13 +4964,41 @@ type QueryCrossMarginPoolSnapshotResponse struct { // When < 1, the account is liquidatable. When < 1.5, the account is in a // warning state. Empty if maintenance_margin_total is zero (no positions). HealthFactor *cosmossdk_io_math.LegacyDec `protobuf:"bytes,15,opt,name=health_factor,json=healthFactor,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"health_factor,omitempty"` + // Ratcheted maintenance margin total: max(maintenance at current mark, + // maintenance at entry notional) summed across positions. This is the + // maintenance floor used in the cash-floor and withdrawable formulas, and is + // distinct from maintenance_margin_total. It is NOT derivable from the other + // response fields, so off-chain monitors need it to reconstruct the chain's + // admission / withdrawal predicates. + RatchetedMaintenanceMarginTotal cosmossdk_io_math.LegacyDec `protobuf:"bytes,17,opt,name=ratcheted_maintenance_margin_total,json=ratchetedMaintenanceMarginTotal,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"ratcheted_maintenance_margin_total"` + // Cross-margin utilisation ratio applied to the cash floor (0 is the + // emergency halt on new risk-increasing actions). A module param, not + // recoverable from any other response field. + CrossMarginUtilRatio cosmossdk_io_math.LegacyDec `protobuf:"bytes,18,opt,name=cross_margin_util_ratio,json=crossMarginUtilRatio,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"cross_margin_util_ratio"` + // Position-side Order Lock Requirement bucket embedded in + // order_lock_requirement. This is the sum of max(position.Margin, 0), not the + // signed position_margin_total. It is exposed because negative-funded or + // mixed-sign position margins make the OLR split impossible to reconstruct + // from position_margin_total. + PositionOrderLockRequirement cosmossdk_io_math.LegacyDec `protobuf:"bytes,19,opt,name=position_order_lock_requirement,json=positionOrderLockRequirement,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"position_order_lock_requirement"` + // Non-position Order Lock Requirement bucket used by the cash-floor formula. + // This is not generally max(order_lock_requirement - position_margin_total, + // 0) because position_margin_total is signed while the position-side OLR + // bucket floors each position margin at zero. Together with + // ratcheted_maintenance_margin_total, cross_margin_util_ratio, and the + // existing equity fields, monitors can derive fees_buffer + // (= quote_balance + position_margin_total + unrealized_pnl_effective - + // equity_admission), cash_floor_available, admission_available + // (= equity_admission - order_lock_requirement), available_for_new + // (= min(cash_floor_available, admission_available)), and withdrawable. + NonPositionOrderLockRequirement cosmossdk_io_math.LegacyDec `protobuf:"bytes,20,opt,name=non_position_order_lock_requirement,json=nonPositionOrderLockRequirement,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"non_position_order_lock_requirement"` } func (m *QueryCrossMarginPoolSnapshotResponse) Reset() { *m = QueryCrossMarginPoolSnapshotResponse{} } func (m *QueryCrossMarginPoolSnapshotResponse) String() string { return proto.CompactTextString(m) } func (*QueryCrossMarginPoolSnapshotResponse) ProtoMessage() {} func (*QueryCrossMarginPoolSnapshotResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{88} + return fileDescriptor_108a0f108cdd0cc4, []int{92} } func (m *QueryCrossMarginPoolSnapshotResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4796,7 +5043,7 @@ func (m *QueryModuleStateRequest) Reset() { *m = QueryModuleStateRequest func (m *QueryModuleStateRequest) String() string { return proto.CompactTextString(m) } func (*QueryModuleStateRequest) ProtoMessage() {} func (*QueryModuleStateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{89} + return fileDescriptor_108a0f108cdd0cc4, []int{93} } func (m *QueryModuleStateRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4835,7 +5082,7 @@ func (m *QueryModuleStateResponse) Reset() { *m = QueryModuleStateRespon func (m *QueryModuleStateResponse) String() string { return proto.CompactTextString(m) } func (*QueryModuleStateResponse) ProtoMessage() {} func (*QueryModuleStateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{90} + return fileDescriptor_108a0f108cdd0cc4, []int{94} } func (m *QueryModuleStateResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4879,7 +5126,7 @@ func (m *QueryPositionsRequest) Reset() { *m = QueryPositionsRequest{} } func (m *QueryPositionsRequest) String() string { return proto.CompactTextString(m) } func (*QueryPositionsRequest) ProtoMessage() {} func (*QueryPositionsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{91} + return fileDescriptor_108a0f108cdd0cc4, []int{95} } func (m *QueryPositionsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4918,7 +5165,7 @@ func (m *QueryPositionsResponse) Reset() { *m = QueryPositionsResponse{} func (m *QueryPositionsResponse) String() string { return proto.CompactTextString(m) } func (*QueryPositionsResponse) ProtoMessage() {} func (*QueryPositionsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{92} + return fileDescriptor_108a0f108cdd0cc4, []int{96} } func (m *QueryPositionsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4965,7 +5212,7 @@ func (m *QueryTradeRewardPointsRequest) Reset() { *m = QueryTradeRewardP func (m *QueryTradeRewardPointsRequest) String() string { return proto.CompactTextString(m) } func (*QueryTradeRewardPointsRequest) ProtoMessage() {} func (*QueryTradeRewardPointsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{93} + return fileDescriptor_108a0f108cdd0cc4, []int{97} } func (m *QueryTradeRewardPointsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5018,7 +5265,7 @@ func (m *QueryTradeRewardPointsResponse) Reset() { *m = QueryTradeReward func (m *QueryTradeRewardPointsResponse) String() string { return proto.CompactTextString(m) } func (*QueryTradeRewardPointsResponse) ProtoMessage() {} func (*QueryTradeRewardPointsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{94} + return fileDescriptor_108a0f108cdd0cc4, []int{98} } func (m *QueryTradeRewardPointsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5056,7 +5303,7 @@ func (m *QueryTradeRewardCampaignRequest) Reset() { *m = QueryTradeRewar func (m *QueryTradeRewardCampaignRequest) String() string { return proto.CompactTextString(m) } func (*QueryTradeRewardCampaignRequest) ProtoMessage() {} func (*QueryTradeRewardCampaignRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{95} + return fileDescriptor_108a0f108cdd0cc4, []int{99} } func (m *QueryTradeRewardCampaignRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5099,7 +5346,7 @@ func (m *QueryTradeRewardCampaignResponse) Reset() { *m = QueryTradeRewa func (m *QueryTradeRewardCampaignResponse) String() string { return proto.CompactTextString(m) } func (*QueryTradeRewardCampaignResponse) ProtoMessage() {} func (*QueryTradeRewardCampaignResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{96} + return fileDescriptor_108a0f108cdd0cc4, []int{100} } func (m *QueryTradeRewardCampaignResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5159,7 +5406,7 @@ func (m *QueryIsOptedOutOfRewardsRequest) Reset() { *m = QueryIsOptedOut func (m *QueryIsOptedOutOfRewardsRequest) String() string { return proto.CompactTextString(m) } func (*QueryIsOptedOutOfRewardsRequest) ProtoMessage() {} func (*QueryIsOptedOutOfRewardsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{97} + return fileDescriptor_108a0f108cdd0cc4, []int{101} } func (m *QueryIsOptedOutOfRewardsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5205,7 +5452,7 @@ func (m *QueryIsOptedOutOfRewardsResponse) Reset() { *m = QueryIsOptedOu func (m *QueryIsOptedOutOfRewardsResponse) String() string { return proto.CompactTextString(m) } func (*QueryIsOptedOutOfRewardsResponse) ProtoMessage() {} func (*QueryIsOptedOutOfRewardsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{98} + return fileDescriptor_108a0f108cdd0cc4, []int{102} } func (m *QueryIsOptedOutOfRewardsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5250,7 +5497,7 @@ func (m *QueryOptedOutOfRewardsAccountsRequest) Reset() { *m = QueryOpte func (m *QueryOptedOutOfRewardsAccountsRequest) String() string { return proto.CompactTextString(m) } func (*QueryOptedOutOfRewardsAccountsRequest) ProtoMessage() {} func (*QueryOptedOutOfRewardsAccountsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{99} + return fileDescriptor_108a0f108cdd0cc4, []int{103} } func (m *QueryOptedOutOfRewardsAccountsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5291,7 +5538,7 @@ func (m *QueryOptedOutOfRewardsAccountsResponse) Reset() { func (m *QueryOptedOutOfRewardsAccountsResponse) String() string { return proto.CompactTextString(m) } func (*QueryOptedOutOfRewardsAccountsResponse) ProtoMessage() {} func (*QueryOptedOutOfRewardsAccountsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{100} + return fileDescriptor_108a0f108cdd0cc4, []int{104} } func (m *QueryOptedOutOfRewardsAccountsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5337,7 +5584,7 @@ func (m *QueryFeeDiscountAccountInfoRequest) Reset() { *m = QueryFeeDisc func (m *QueryFeeDiscountAccountInfoRequest) String() string { return proto.CompactTextString(m) } func (*QueryFeeDiscountAccountInfoRequest) ProtoMessage() {} func (*QueryFeeDiscountAccountInfoRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{101} + return fileDescriptor_108a0f108cdd0cc4, []int{105} } func (m *QueryFeeDiscountAccountInfoRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5385,7 +5632,7 @@ func (m *QueryFeeDiscountAccountInfoResponse) Reset() { *m = QueryFeeDis func (m *QueryFeeDiscountAccountInfoResponse) String() string { return proto.CompactTextString(m) } func (*QueryFeeDiscountAccountInfoResponse) ProtoMessage() {} func (*QueryFeeDiscountAccountInfoResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{102} + return fileDescriptor_108a0f108cdd0cc4, []int{106} } func (m *QueryFeeDiscountAccountInfoResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5444,7 +5691,7 @@ func (m *QueryFeeDiscountScheduleRequest) Reset() { *m = QueryFeeDiscoun func (m *QueryFeeDiscountScheduleRequest) String() string { return proto.CompactTextString(m) } func (*QueryFeeDiscountScheduleRequest) ProtoMessage() {} func (*QueryFeeDiscountScheduleRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{103} + return fileDescriptor_108a0f108cdd0cc4, []int{107} } func (m *QueryFeeDiscountScheduleRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5483,7 +5730,7 @@ func (m *QueryFeeDiscountScheduleResponse) Reset() { *m = QueryFeeDiscou func (m *QueryFeeDiscountScheduleResponse) String() string { return proto.CompactTextString(m) } func (*QueryFeeDiscountScheduleResponse) ProtoMessage() {} func (*QueryFeeDiscountScheduleResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{104} + return fileDescriptor_108a0f108cdd0cc4, []int{108} } func (m *QueryFeeDiscountScheduleResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5529,7 +5776,7 @@ func (m *QueryBalanceMismatchesRequest) Reset() { *m = QueryBalanceMisma func (m *QueryBalanceMismatchesRequest) String() string { return proto.CompactTextString(m) } func (*QueryBalanceMismatchesRequest) ProtoMessage() {} func (*QueryBalanceMismatchesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{105} + return fileDescriptor_108a0f108cdd0cc4, []int{109} } func (m *QueryBalanceMismatchesRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5586,7 +5833,7 @@ func (m *BalanceMismatch) Reset() { *m = BalanceMismatch{} } func (m *BalanceMismatch) String() string { return proto.CompactTextString(m) } func (*BalanceMismatch) ProtoMessage() {} func (*BalanceMismatch) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{106} + return fileDescriptor_108a0f108cdd0cc4, []int{110} } func (m *BalanceMismatch) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5639,7 +5886,7 @@ func (m *QueryBalanceMismatchesResponse) Reset() { *m = QueryBalanceMism func (m *QueryBalanceMismatchesResponse) String() string { return proto.CompactTextString(m) } func (*QueryBalanceMismatchesResponse) ProtoMessage() {} func (*QueryBalanceMismatchesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{107} + return fileDescriptor_108a0f108cdd0cc4, []int{111} } func (m *QueryBalanceMismatchesResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5684,7 +5931,7 @@ func (m *QueryBalanceWithBalanceHoldsRequest) Reset() { *m = QueryBalanc func (m *QueryBalanceWithBalanceHoldsRequest) String() string { return proto.CompactTextString(m) } func (*QueryBalanceWithBalanceHoldsRequest) ProtoMessage() {} func (*QueryBalanceWithBalanceHoldsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{108} + return fileDescriptor_108a0f108cdd0cc4, []int{112} } func (m *QueryBalanceWithBalanceHoldsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5730,7 +5977,7 @@ func (m *BalanceWithMarginHold) Reset() { *m = BalanceWithMarginHold{} } func (m *BalanceWithMarginHold) String() string { return proto.CompactTextString(m) } func (*BalanceWithMarginHold) ProtoMessage() {} func (*BalanceWithMarginHold) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{109} + return fileDescriptor_108a0f108cdd0cc4, []int{113} } func (m *BalanceWithMarginHold) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5783,7 +6030,7 @@ func (m *QueryBalanceWithBalanceHoldsResponse) Reset() { *m = QueryBalan func (m *QueryBalanceWithBalanceHoldsResponse) String() string { return proto.CompactTextString(m) } func (*QueryBalanceWithBalanceHoldsResponse) ProtoMessage() {} func (*QueryBalanceWithBalanceHoldsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{110} + return fileDescriptor_108a0f108cdd0cc4, []int{114} } func (m *QueryBalanceWithBalanceHoldsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5828,7 +6075,7 @@ func (m *QueryFeeDiscountTierStatisticsRequest) Reset() { *m = QueryFeeD func (m *QueryFeeDiscountTierStatisticsRequest) String() string { return proto.CompactTextString(m) } func (*QueryFeeDiscountTierStatisticsRequest) ProtoMessage() {} func (*QueryFeeDiscountTierStatisticsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{111} + return fileDescriptor_108a0f108cdd0cc4, []int{115} } func (m *QueryFeeDiscountTierStatisticsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5866,7 +6113,7 @@ func (m *TierStatistic) Reset() { *m = TierStatistic{} } func (m *TierStatistic) String() string { return proto.CompactTextString(m) } func (*TierStatistic) ProtoMessage() {} func (*TierStatistic) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{112} + return fileDescriptor_108a0f108cdd0cc4, []int{116} } func (m *TierStatistic) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5921,7 +6168,7 @@ func (m *QueryFeeDiscountTierStatisticsResponse) Reset() { func (m *QueryFeeDiscountTierStatisticsResponse) String() string { return proto.CompactTextString(m) } func (*QueryFeeDiscountTierStatisticsResponse) ProtoMessage() {} func (*QueryFeeDiscountTierStatisticsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{113} + return fileDescriptor_108a0f108cdd0cc4, []int{117} } func (m *QueryFeeDiscountTierStatisticsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5966,7 +6213,7 @@ func (m *MitoVaultInfosRequest) Reset() { *m = MitoVaultInfosRequest{} } func (m *MitoVaultInfosRequest) String() string { return proto.CompactTextString(m) } func (*MitoVaultInfosRequest) ProtoMessage() {} func (*MitoVaultInfosRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{114} + return fileDescriptor_108a0f108cdd0cc4, []int{118} } func (m *MitoVaultInfosRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6012,7 +6259,7 @@ func (m *MitoVaultInfosResponse) Reset() { *m = MitoVaultInfosResponse{} func (m *MitoVaultInfosResponse) String() string { return proto.CompactTextString(m) } func (*MitoVaultInfosResponse) ProtoMessage() {} func (*MitoVaultInfosResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{115} + return fileDescriptor_108a0f108cdd0cc4, []int{119} } func (m *MitoVaultInfosResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6079,7 +6326,7 @@ func (m *QueryMarketIDFromVaultRequest) Reset() { *m = QueryMarketIDFrom func (m *QueryMarketIDFromVaultRequest) String() string { return proto.CompactTextString(m) } func (*QueryMarketIDFromVaultRequest) ProtoMessage() {} func (*QueryMarketIDFromVaultRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{116} + return fileDescriptor_108a0f108cdd0cc4, []int{120} } func (m *QueryMarketIDFromVaultRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6125,7 +6372,7 @@ func (m *QueryMarketIDFromVaultResponse) Reset() { *m = QueryMarketIDFro func (m *QueryMarketIDFromVaultResponse) String() string { return proto.CompactTextString(m) } func (*QueryMarketIDFromVaultResponse) ProtoMessage() {} func (*QueryMarketIDFromVaultResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{117} + return fileDescriptor_108a0f108cdd0cc4, []int{121} } func (m *QueryMarketIDFromVaultResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6169,7 +6416,7 @@ func (m *QueryHistoricalTradeRecordsRequest) Reset() { *m = QueryHistori func (m *QueryHistoricalTradeRecordsRequest) String() string { return proto.CompactTextString(m) } func (*QueryHistoricalTradeRecordsRequest) ProtoMessage() {} func (*QueryHistoricalTradeRecordsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{118} + return fileDescriptor_108a0f108cdd0cc4, []int{122} } func (m *QueryHistoricalTradeRecordsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6213,7 +6460,7 @@ func (m *QueryHistoricalTradeRecordsResponse) Reset() { *m = QueryHistor func (m *QueryHistoricalTradeRecordsResponse) String() string { return proto.CompactTextString(m) } func (*QueryHistoricalTradeRecordsResponse) ProtoMessage() {} func (*QueryHistoricalTradeRecordsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{119} + return fileDescriptor_108a0f108cdd0cc4, []int{123} } func (m *QueryHistoricalTradeRecordsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6270,7 +6517,7 @@ func (m *TradeHistoryOptions) Reset() { *m = TradeHistoryOptions{} } func (m *TradeHistoryOptions) String() string { return proto.CompactTextString(m) } func (*TradeHistoryOptions) ProtoMessage() {} func (*TradeHistoryOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{120} + return fileDescriptor_108a0f108cdd0cc4, []int{124} } func (m *TradeHistoryOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6340,7 +6587,7 @@ func (m *QueryMarketVolatilityRequest) Reset() { *m = QueryMarketVolatil func (m *QueryMarketVolatilityRequest) String() string { return proto.CompactTextString(m) } func (*QueryMarketVolatilityRequest) ProtoMessage() {} func (*QueryMarketVolatilityRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{121} + return fileDescriptor_108a0f108cdd0cc4, []int{125} } func (m *QueryMarketVolatilityRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6395,7 +6642,7 @@ func (m *QueryMarketVolatilityResponse) Reset() { *m = QueryMarketVolati func (m *QueryMarketVolatilityResponse) String() string { return proto.CompactTextString(m) } func (*QueryMarketVolatilityResponse) ProtoMessage() {} func (*QueryMarketVolatilityResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{122} + return fileDescriptor_108a0f108cdd0cc4, []int{126} } func (m *QueryMarketVolatilityResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6449,7 +6696,7 @@ func (m *QueryBinaryMarketsRequest) Reset() { *m = QueryBinaryMarketsReq func (m *QueryBinaryMarketsRequest) String() string { return proto.CompactTextString(m) } func (*QueryBinaryMarketsRequest) ProtoMessage() {} func (*QueryBinaryMarketsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{123} + return fileDescriptor_108a0f108cdd0cc4, []int{127} } func (m *QueryBinaryMarketsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6495,7 +6742,7 @@ func (m *QueryBinaryMarketsResponse) Reset() { *m = QueryBinaryMarketsRe func (m *QueryBinaryMarketsResponse) String() string { return proto.CompactTextString(m) } func (*QueryBinaryMarketsResponse) ProtoMessage() {} func (*QueryBinaryMarketsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{124} + return fileDescriptor_108a0f108cdd0cc4, []int{128} } func (m *QueryBinaryMarketsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6548,7 +6795,7 @@ func (m *QueryTraderDerivativeConditionalOrdersRequest) String() string { } func (*QueryTraderDerivativeConditionalOrdersRequest) ProtoMessage() {} func (*QueryTraderDerivativeConditionalOrdersRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{125} + return fileDescriptor_108a0f108cdd0cc4, []int{129} } func (m *QueryTraderDerivativeConditionalOrdersRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6614,7 +6861,7 @@ func (m *TrimmedDerivativeConditionalOrder) Reset() { *m = TrimmedDeriva func (m *TrimmedDerivativeConditionalOrder) String() string { return proto.CompactTextString(m) } func (*TrimmedDerivativeConditionalOrder) ProtoMessage() {} func (*TrimmedDerivativeConditionalOrder) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{126} + return fileDescriptor_108a0f108cdd0cc4, []int{130} } func (m *TrimmedDerivativeConditionalOrder) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6685,7 +6932,7 @@ func (m *QueryTraderDerivativeConditionalOrdersResponse) String() string { } func (*QueryTraderDerivativeConditionalOrdersResponse) ProtoMessage() {} func (*QueryTraderDerivativeConditionalOrdersResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{127} + return fileDescriptor_108a0f108cdd0cc4, []int{131} } func (m *QueryTraderDerivativeConditionalOrdersResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6730,7 +6977,7 @@ func (m *QueryFullSpotOrderbookRequest) Reset() { *m = QueryFullSpotOrde func (m *QueryFullSpotOrderbookRequest) String() string { return proto.CompactTextString(m) } func (*QueryFullSpotOrderbookRequest) ProtoMessage() {} func (*QueryFullSpotOrderbookRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{128} + return fileDescriptor_108a0f108cdd0cc4, []int{132} } func (m *QueryFullSpotOrderbookRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6777,7 +7024,7 @@ func (m *QueryFullSpotOrderbookResponse) Reset() { *m = QueryFullSpotOrd func (m *QueryFullSpotOrderbookResponse) String() string { return proto.CompactTextString(m) } func (*QueryFullSpotOrderbookResponse) ProtoMessage() {} func (*QueryFullSpotOrderbookResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{129} + return fileDescriptor_108a0f108cdd0cc4, []int{133} } func (m *QueryFullSpotOrderbookResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6836,7 +7083,7 @@ func (m *QueryFullDerivativeOrderbookRequest) Reset() { *m = QueryFullDe func (m *QueryFullDerivativeOrderbookRequest) String() string { return proto.CompactTextString(m) } func (*QueryFullDerivativeOrderbookRequest) ProtoMessage() {} func (*QueryFullDerivativeOrderbookRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{130} + return fileDescriptor_108a0f108cdd0cc4, []int{134} } func (m *QueryFullDerivativeOrderbookRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6883,7 +7130,7 @@ func (m *QueryFullDerivativeOrderbookResponse) Reset() { *m = QueryFullD func (m *QueryFullDerivativeOrderbookResponse) String() string { return proto.CompactTextString(m) } func (*QueryFullDerivativeOrderbookResponse) ProtoMessage() {} func (*QueryFullDerivativeOrderbookResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{131} + return fileDescriptor_108a0f108cdd0cc4, []int{135} } func (m *QueryFullDerivativeOrderbookResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6948,7 +7195,7 @@ func (m *TrimmedLimitOrder) Reset() { *m = TrimmedLimitOrder{} } func (m *TrimmedLimitOrder) String() string { return proto.CompactTextString(m) } func (*TrimmedLimitOrder) ProtoMessage() {} func (*TrimmedLimitOrder) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{132} + return fileDescriptor_108a0f108cdd0cc4, []int{136} } func (m *TrimmedLimitOrder) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7003,7 +7250,7 @@ func (m *QueryMarketAtomicExecutionFeeMultiplierRequest) String() string { } func (*QueryMarketAtomicExecutionFeeMultiplierRequest) ProtoMessage() {} func (*QueryMarketAtomicExecutionFeeMultiplierRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{133} + return fileDescriptor_108a0f108cdd0cc4, []int{137} } func (m *QueryMarketAtomicExecutionFeeMultiplierRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7051,7 +7298,7 @@ func (m *QueryMarketAtomicExecutionFeeMultiplierResponse) String() string { } func (*QueryMarketAtomicExecutionFeeMultiplierResponse) ProtoMessage() {} func (*QueryMarketAtomicExecutionFeeMultiplierResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{134} + return fileDescriptor_108a0f108cdd0cc4, []int{138} } func (m *QueryMarketAtomicExecutionFeeMultiplierResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7088,7 +7335,7 @@ func (m *QueryActiveStakeGrantRequest) Reset() { *m = QueryActiveStakeGr func (m *QueryActiveStakeGrantRequest) String() string { return proto.CompactTextString(m) } func (*QueryActiveStakeGrantRequest) ProtoMessage() {} func (*QueryActiveStakeGrantRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{135} + return fileDescriptor_108a0f108cdd0cc4, []int{139} } func (m *QueryActiveStakeGrantRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7133,7 +7380,7 @@ func (m *QueryActiveStakeGrantResponse) Reset() { *m = QueryActiveStakeG func (m *QueryActiveStakeGrantResponse) String() string { return proto.CompactTextString(m) } func (*QueryActiveStakeGrantResponse) ProtoMessage() {} func (*QueryActiveStakeGrantResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{136} + return fileDescriptor_108a0f108cdd0cc4, []int{140} } func (m *QueryActiveStakeGrantResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7185,7 +7432,7 @@ func (m *QueryGrantAuthorizationRequest) Reset() { *m = QueryGrantAuthor func (m *QueryGrantAuthorizationRequest) String() string { return proto.CompactTextString(m) } func (*QueryGrantAuthorizationRequest) ProtoMessage() {} func (*QueryGrantAuthorizationRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{137} + return fileDescriptor_108a0f108cdd0cc4, []int{141} } func (m *QueryGrantAuthorizationRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7236,7 +7483,7 @@ func (m *QueryGrantAuthorizationResponse) Reset() { *m = QueryGrantAutho func (m *QueryGrantAuthorizationResponse) String() string { return proto.CompactTextString(m) } func (*QueryGrantAuthorizationResponse) ProtoMessage() {} func (*QueryGrantAuthorizationResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{138} + return fileDescriptor_108a0f108cdd0cc4, []int{142} } func (m *QueryGrantAuthorizationResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7273,7 +7520,7 @@ func (m *QueryGrantAuthorizationsRequest) Reset() { *m = QueryGrantAutho func (m *QueryGrantAuthorizationsRequest) String() string { return proto.CompactTextString(m) } func (*QueryGrantAuthorizationsRequest) ProtoMessage() {} func (*QueryGrantAuthorizationsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{139} + return fileDescriptor_108a0f108cdd0cc4, []int{143} } func (m *QueryGrantAuthorizationsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7318,7 +7565,7 @@ func (m *QueryGrantAuthorizationsResponse) Reset() { *m = QueryGrantAuth func (m *QueryGrantAuthorizationsResponse) String() string { return proto.CompactTextString(m) } func (*QueryGrantAuthorizationsResponse) ProtoMessage() {} func (*QueryGrantAuthorizationsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{140} + return fileDescriptor_108a0f108cdd0cc4, []int{144} } func (m *QueryGrantAuthorizationsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7363,7 +7610,7 @@ func (m *QueryMarketBalanceRequest) Reset() { *m = QueryMarketBalanceReq func (m *QueryMarketBalanceRequest) String() string { return proto.CompactTextString(m) } func (*QueryMarketBalanceRequest) ProtoMessage() {} func (*QueryMarketBalanceRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{141} + return fileDescriptor_108a0f108cdd0cc4, []int{145} } func (m *QueryMarketBalanceRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7407,7 +7654,7 @@ func (m *QueryMarketBalanceResponse) Reset() { *m = QueryMarketBalanceRe func (m *QueryMarketBalanceResponse) String() string { return proto.CompactTextString(m) } func (*QueryMarketBalanceResponse) ProtoMessage() {} func (*QueryMarketBalanceResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{142} + return fileDescriptor_108a0f108cdd0cc4, []int{146} } func (m *QueryMarketBalanceResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7450,7 +7697,7 @@ func (m *QueryMarketBalancesRequest) Reset() { *m = QueryMarketBalancesR func (m *QueryMarketBalancesRequest) String() string { return proto.CompactTextString(m) } func (*QueryMarketBalancesRequest) ProtoMessage() {} func (*QueryMarketBalancesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{143} + return fileDescriptor_108a0f108cdd0cc4, []int{147} } func (m *QueryMarketBalancesRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7487,7 +7734,7 @@ func (m *QueryMarketBalancesResponse) Reset() { *m = QueryMarketBalances func (m *QueryMarketBalancesResponse) String() string { return proto.CompactTextString(m) } func (*QueryMarketBalancesResponse) ProtoMessage() {} func (*QueryMarketBalancesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{144} + return fileDescriptor_108a0f108cdd0cc4, []int{148} } func (m *QueryMarketBalancesResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7534,7 +7781,7 @@ func (m *MarketBalance) Reset() { *m = MarketBalance{} } func (m *MarketBalance) String() string { return proto.CompactTextString(m) } func (*MarketBalance) ProtoMessage() {} func (*MarketBalance) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{145} + return fileDescriptor_108a0f108cdd0cc4, []int{149} } func (m *MarketBalance) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7578,7 +7825,7 @@ func (m *QueryDenomMinNotionalRequest) Reset() { *m = QueryDenomMinNotio func (m *QueryDenomMinNotionalRequest) String() string { return proto.CompactTextString(m) } func (*QueryDenomMinNotionalRequest) ProtoMessage() {} func (*QueryDenomMinNotionalRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{146} + return fileDescriptor_108a0f108cdd0cc4, []int{150} } func (m *QueryDenomMinNotionalRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7623,7 +7870,7 @@ func (m *QueryDenomMinNotionalResponse) Reset() { *m = QueryDenomMinNoti func (m *QueryDenomMinNotionalResponse) String() string { return proto.CompactTextString(m) } func (*QueryDenomMinNotionalResponse) ProtoMessage() {} func (*QueryDenomMinNotionalResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{147} + return fileDescriptor_108a0f108cdd0cc4, []int{151} } func (m *QueryDenomMinNotionalResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7659,7 +7906,7 @@ func (m *QueryDenomMinNotionalsRequest) Reset() { *m = QueryDenomMinNoti func (m *QueryDenomMinNotionalsRequest) String() string { return proto.CompactTextString(m) } func (*QueryDenomMinNotionalsRequest) ProtoMessage() {} func (*QueryDenomMinNotionalsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{148} + return fileDescriptor_108a0f108cdd0cc4, []int{152} } func (m *QueryDenomMinNotionalsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7696,7 +7943,7 @@ func (m *QueryDenomMinNotionalsResponse) Reset() { *m = QueryDenomMinNot func (m *QueryDenomMinNotionalsResponse) String() string { return proto.CompactTextString(m) } func (*QueryDenomMinNotionalsResponse) ProtoMessage() {} func (*QueryDenomMinNotionalsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{149} + return fileDescriptor_108a0f108cdd0cc4, []int{153} } func (m *QueryDenomMinNotionalsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7743,7 +7990,7 @@ func (m *OpenInterest) Reset() { *m = OpenInterest{} } func (m *OpenInterest) String() string { return proto.CompactTextString(m) } func (*OpenInterest) ProtoMessage() {} func (*OpenInterest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{150} + return fileDescriptor_108a0f108cdd0cc4, []int{154} } func (m *OpenInterest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7788,7 +8035,7 @@ func (m *QueryOpenInterestRequest) Reset() { *m = QueryOpenInterestReque func (m *QueryOpenInterestRequest) String() string { return proto.CompactTextString(m) } func (*QueryOpenInterestRequest) ProtoMessage() {} func (*QueryOpenInterestRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{151} + return fileDescriptor_108a0f108cdd0cc4, []int{155} } func (m *QueryOpenInterestRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7832,7 +8079,7 @@ func (m *QueryOpenInterestResponse) Reset() { *m = QueryOpenInterestResp func (m *QueryOpenInterestResponse) String() string { return proto.CompactTextString(m) } func (*QueryOpenInterestResponse) ProtoMessage() {} func (*QueryOpenInterestResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{152} + return fileDescriptor_108a0f108cdd0cc4, []int{156} } func (m *QueryOpenInterestResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7959,6 +8206,10 @@ func init() { proto.RegisterType((*QuerySubaccountTradeNonceResponse)(nil), "injective.exchange.v2.QuerySubaccountTradeNonceResponse") proto.RegisterType((*QuerySubaccountRiskProfileRequest)(nil), "injective.exchange.v2.QuerySubaccountRiskProfileRequest") proto.RegisterType((*QuerySubaccountRiskProfileResponse)(nil), "injective.exchange.v2.QuerySubaccountRiskProfileResponse") + proto.RegisterType((*QuerySubaccountMarketRiskModesRequest)(nil), "injective.exchange.v2.QuerySubaccountMarketRiskModesRequest") + proto.RegisterType((*QuerySubaccountMarketRiskModesResponse)(nil), "injective.exchange.v2.QuerySubaccountMarketRiskModesResponse") + proto.RegisterType((*QueryEffectiveSubaccountMarketRiskModeRequest)(nil), "injective.exchange.v2.QueryEffectiveSubaccountMarketRiskModeRequest") + proto.RegisterType((*QueryEffectiveSubaccountMarketRiskModeResponse)(nil), "injective.exchange.v2.QueryEffectiveSubaccountMarketRiskModeResponse") proto.RegisterType((*QueryCrossMarginPoolSnapshotRequest)(nil), "injective.exchange.v2.QueryCrossMarginPoolSnapshotRequest") proto.RegisterType((*QueryCrossMarginPoolSnapshotResponse)(nil), "injective.exchange.v2.QueryCrossMarginPoolSnapshotResponse") proto.RegisterType((*QueryModuleStateRequest)(nil), "injective.exchange.v2.QueryModuleStateRequest") @@ -8030,441 +8281,457 @@ func init() { func init() { proto.RegisterFile("injective/exchange/v2/query.proto", fileDescriptor_108a0f108cdd0cc4) } var fileDescriptor_108a0f108cdd0cc4 = []byte{ - // 6940 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x7d, 0x6b, 0x6c, 0x1c, 0xc9, - 0x71, 0xb0, 0x86, 0xa4, 0x28, 0xb2, 0x28, 0xbe, 0x9a, 0x14, 0x45, 0xf1, 0xee, 0xf4, 0x18, 0x9d, - 0x4e, 0xd2, 0x9d, 0xc4, 0x95, 0x28, 0xe9, 0xf4, 0xd6, 0x1d, 0x29, 0x8a, 0xa2, 0x64, 0x4a, 0xe2, - 0xad, 0x78, 0x27, 0xdb, 0xdf, 0xd9, 0xe3, 0xe1, 0xee, 0x90, 0x1c, 0x73, 0x77, 0x67, 0x35, 0x33, - 0xcb, 0x3b, 0x5a, 0xd0, 0x8f, 0xcf, 0x49, 0x0c, 0xc7, 0x06, 0xf2, 0xfc, 0xe1, 0x1f, 0x06, 0x1c, - 0xc0, 0x36, 0x12, 0xe4, 0x81, 0x04, 0x70, 0x2e, 0x71, 0x10, 0x3b, 0x88, 0xf3, 0xb0, 0x63, 0x20, - 0x40, 0x62, 0xe3, 0x92, 0xd8, 0x08, 0xe0, 0x8b, 0xe3, 0x0b, 0x12, 0xc4, 0x40, 0xe2, 0xfc, 0x0f, - 0x90, 0x04, 0xd3, 0x5d, 0xdd, 0x3b, 0xaf, 0xee, 0x99, 0xa1, 0x74, 0x90, 0x9d, 0xfc, 0x12, 0xb7, - 0xa7, 0xab, 0xba, 0xaa, 0xbb, 0xba, 0xab, 0xba, 0xba, 0xaa, 0x04, 0x07, 0xec, 0xc6, 0x47, 0xad, - 0x8a, 0x6f, 0x6f, 0x58, 0x25, 0xeb, 0xcd, 0xca, 0x9a, 0xd9, 0x58, 0xb5, 0x4a, 0x1b, 0x53, 0xa5, - 0xfb, 0x2d, 0xcb, 0xdd, 0x9c, 0x6c, 0xba, 0x8e, 0xef, 0x90, 0x5d, 0xa2, 0xcb, 0x24, 0xef, 0x32, - 0xb9, 0x31, 0x35, 0x31, 0xba, 0xea, 0xac, 0x3a, 0xb4, 0x47, 0x29, 0xf8, 0x8b, 0x75, 0x9e, 0x78, - 0x7a, 0xd5, 0x71, 0x56, 0x6b, 0x56, 0xc9, 0x6c, 0xda, 0x25, 0xb3, 0xd1, 0x70, 0x7c, 0xd3, 0xb7, - 0x9d, 0x86, 0x87, 0x5f, 0x9f, 0x4d, 0x1f, 0x4d, 0xa0, 0x65, 0xbd, 0x0e, 0xa5, 0xf7, 0x72, 0xdc, - 0xaa, 0xe5, 0x2e, 0x3b, 0xce, 0x3a, 0x76, 0xd3, 0xd3, 0xbb, 0xd5, 0x4d, 0x77, 0xdd, 0xf2, 0xb1, - 0xcf, 0xc1, 0xf4, 0x3e, 0xab, 0x56, 0xc3, 0xf2, 0x6c, 0x2f, 0x39, 0x9e, 0xe3, 0x9a, 0x95, 0x9a, - 0x55, 0xda, 0x38, 0xb9, 0x6c, 0xf9, 0xe6, 0x49, 0xfc, 0xc9, 0xba, 0xe9, 0x77, 0x00, 0xee, 0xb6, - 0x96, 0xcd, 0x4a, 0xc5, 0x69, 0x35, 0x7c, 0x32, 0x06, 0xdd, 0xbe, 0x6b, 0x56, 0x2d, 0x77, 0x5c, - 0xdb, 0xaf, 0x1d, 0xe9, 0x2d, 0xe3, 0x2f, 0x72, 0x14, 0x86, 0x3c, 0xd1, 0xcb, 0x68, 0x38, 0x8d, - 0x8a, 0x35, 0xde, 0xb1, 0x5f, 0x3b, 0xd2, 0x5f, 0x1e, 0x6c, 0xb7, 0xdf, 0x0e, 0x9a, 0xf5, 0x8f, - 0xc0, 0xd3, 0xaf, 0x04, 0xf3, 0xdc, 0xc6, 0x7a, 0x27, 0x60, 0xd1, 0x2b, 0x5b, 0xf7, 0x5b, 0x96, - 0xe7, 0x93, 0x83, 0xd0, 0x1f, 0x42, 0x65, 0x57, 0x71, 0xa4, 0x9d, 0xed, 0xc6, 0x1b, 0x55, 0xf2, - 0x14, 0xf4, 0x32, 0x8e, 0x83, 0x0e, 0x1d, 0xb4, 0x43, 0x0f, 0x6b, 0xb8, 0x51, 0xd5, 0xbf, 0xac, - 0xc1, 0x33, 0x92, 0x21, 0xbc, 0xa6, 0xd3, 0xf0, 0x2c, 0x72, 0x03, 0x60, 0xb9, 0xb5, 0x69, 0xd0, - 0xb9, 0xf5, 0xc6, 0xb5, 0xfd, 0x9d, 0x47, 0xfa, 0xa6, 0x9e, 0x9f, 0x4c, 0x5d, 0xf1, 0xc9, 0x18, - 0x92, 0x59, 0xd3, 0x37, 0xcb, 0xbd, 0xcb, 0xad, 0x4d, 0x86, 0x92, 0xbc, 0x0f, 0xfa, 0x3c, 0xab, - 0x56, 0xe3, 0xb8, 0x3a, 0x0a, 0xe3, 0x82, 0x00, 0x9c, 0x21, 0xd3, 0x7f, 0x43, 0x83, 0x43, 0xb1, - 0x3e, 0xc1, 0xd2, 0xdf, 0xb2, 0x7c, 0xb3, 0x6a, 0xfa, 0xe6, 0x3d, 0xdb, 0x5f, 0xbb, 0x45, 0xb9, - 0x24, 0xb7, 0xa1, 0xa7, 0x8e, 0xad, 0x74, 0x82, 0xfa, 0xa6, 0xa6, 0xf2, 0x8d, 0x19, 0xc6, 0x57, - 0x16, 0x38, 0x94, 0x13, 0x4a, 0x46, 0x61, 0xbb, 0xed, 0xcd, 0xb4, 0x36, 0xc7, 0x3b, 0xf7, 0x6b, - 0x47, 0x7a, 0xca, 0xec, 0x87, 0xfe, 0x34, 0x4c, 0xd0, 0x59, 0xbe, 0x86, 0x83, 0x2d, 0x9a, 0xae, - 0x59, 0xe7, 0xcb, 0xa8, 0x7f, 0x10, 0x9e, 0x4a, 0xfd, 0x8a, 0x2b, 0x70, 0x11, 0xba, 0x9b, 0xb4, - 0x05, 0xa9, 0x7f, 0x46, 0x42, 0x3d, 0x03, 0x9b, 0xe9, 0xfa, 0xe6, 0x3b, 0xfb, 0xb6, 0x95, 0x11, - 0x44, 0xff, 0x39, 0x0d, 0xf6, 0xc6, 0x16, 0x78, 0xd6, 0x6a, 0x3a, 0x9e, 0xed, 0x17, 0x93, 0xa2, - 0xeb, 0x00, 0xed, 0xdf, 0x94, 0xeb, 0xbe, 0xa9, 0x03, 0x99, 0xd3, 0x48, 0x89, 0xd1, 0xca, 0x21, - 0x50, 0xfd, 0xfb, 0x1a, 0xec, 0x93, 0x12, 0x84, 0x1c, 0x7f, 0x04, 0x7a, 0xaa, 0xd8, 0x86, 0x12, - 0x37, 0x2b, 0x19, 0x2a, 0x03, 0xd3, 0x24, 0x6f, 0xb8, 0xd6, 0xf0, 0xdd, 0xcd, 0xb2, 0xc0, 0x3a, - 0xf1, 0xff, 0xa0, 0x3f, 0xf2, 0x89, 0x0c, 0x41, 0xe7, 0xba, 0xb5, 0x89, 0xac, 0x07, 0x7f, 0x92, - 0xd3, 0xb0, 0x7d, 0xc3, 0xac, 0xb5, 0x2c, 0x64, 0x76, 0xaf, 0x84, 0x02, 0x44, 0x53, 0x66, 0x9d, - 0x2f, 0x74, 0x9c, 0xd3, 0xf4, 0xbd, 0xb8, 0x6d, 0xf9, 0x7a, 0xce, 0x98, 0x35, 0xb3, 0x51, 0xb1, - 0xc4, 0x7a, 0x9b, 0xb8, 0xe7, 0x92, 0xdf, 0x91, 0xff, 0x97, 0xa1, 0x67, 0x19, 0xdb, 0x90, 0x7f, - 0xd9, 0xe8, 0x08, 0x8a, 0x8b, 0x2e, 0xa0, 0xf4, 0xb3, 0x28, 0x52, 0xd3, 0xab, 0xab, 0xae, 0xb5, - 0x6a, 0xfa, 0xd6, 0x6b, 0x4e, 0xad, 0x55, 0xb7, 0xf8, 0x92, 0x8f, 0xc3, 0x0e, 0xbe, 0x94, 0x8c, - 0x63, 0xfe, 0x53, 0x6f, 0x22, 0xed, 0x09, 0x40, 0x24, 0x6d, 0x11, 0x86, 0x4d, 0xfe, 0xc9, 0xd8, - 0xa0, 0xdf, 0x38, 0x8d, 0x07, 0x25, 0x34, 0xb2, 0x6d, 0x88, 0x78, 0x86, 0xcc, 0x28, 0x62, 0x4f, - 0xff, 0x40, 0xfa, 0x88, 0x42, 0x3c, 0x27, 0xa0, 0x07, 0x89, 0x63, 0x03, 0xf5, 0x96, 0xc5, 0x6f, - 0xf2, 0x0c, 0x80, 0xd8, 0x8a, 0xec, 0x40, 0xe9, 0x2d, 0xf7, 0xf2, 0xbd, 0xe8, 0xe9, 0x3f, 0xe2, - 0xa7, 0x5b, 0x12, 0x37, 0xb2, 0xe3, 0xc0, 0x9e, 0x36, 0x3b, 0x7c, 0x0b, 0x44, 0xd9, 0x3a, 0x25, - 0x61, 0x4b, 0xe0, 0x9c, 0x66, 0x60, 0x7c, 0xa2, 0x2a, 0x8e, 0x5b, 0x2d, 0xef, 0x36, 0x53, 0xbf, - 0x7a, 0xe4, 0x43, 0x30, 0xde, 0x1e, 0x10, 0x69, 0xe7, 0xe3, 0x75, 0xe4, 0x9f, 0xc6, 0x31, 0x81, - 0x24, 0xdc, 0xec, 0xe9, 0x2f, 0xc3, 0x81, 0x28, 0xc3, 0x11, 0x28, 0x9c, 0xd1, 0xc8, 0x01, 0xa6, - 0xc5, 0x34, 0xc2, 0x2a, 0xe8, 0x2a, 0x0c, 0x38, 0x6f, 0xd3, 0xd0, 0xcd, 0xa8, 0xc6, 0x33, 0x49, - 0x46, 0x74, 0x78, 0x52, 0xf8, 0xc9, 0xc4, 0x00, 0xf5, 0xeb, 0x50, 0x62, 0x03, 0xb5, 0x2a, 0x81, - 0x05, 0xc0, 0x37, 0xc3, 0x92, 0x6b, 0x36, 0xbc, 0x15, 0xcb, 0x9d, 0xb5, 0x1a, 0x4e, 0x7d, 0xd6, - 0xaa, 0xd8, 0x75, 0xb3, 0xc6, 0x09, 0x1f, 0x85, 0xed, 0xd5, 0xa0, 0x19, 0x89, 0x66, 0x3f, 0xf4, - 0x05, 0x38, 0x91, 0x1f, 0x11, 0xd2, 0x3f, 0x0e, 0x3b, 0xaa, 0xac, 0x89, 0xe2, 0xea, 0x2a, 0xf3, - 0x9f, 0xfa, 0xcd, 0xfc, 0xd8, 0x84, 0x88, 0x8e, 0x41, 0x37, 0x25, 0x85, 0x0b, 0x28, 0xfe, 0xd2, - 0x3f, 0xa1, 0xc1, 0xc9, 0x02, 0xc8, 0x90, 0xb6, 0x57, 0x60, 0x80, 0xc2, 0x1b, 0x48, 0x12, 0x17, - 0xc4, 0x67, 0xa5, 0x27, 0x50, 0x08, 0x0b, 0x4e, 0x72, 0x7f, 0x35, 0xdc, 0xa8, 0x5f, 0x55, 0x2d, - 0xaa, 0x60, 0x23, 0xba, 0x9b, 0xb4, 0xf8, 0x6e, 0xaa, 0xc2, 0x41, 0x25, 0x12, 0x24, 0xff, 0x32, - 0xec, 0xd8, 0xc2, 0xb9, 0xc0, 0x61, 0xf4, 0x0f, 0x26, 0x0c, 0x12, 0x7e, 0xc2, 0x16, 0x51, 0x57, - 0x42, 0x52, 0x3a, 0xc2, 0x92, 0xf2, 0xba, 0x4c, 0x17, 0x0a, 0xe2, 0x2f, 0x44, 0x34, 0x4f, 0x9e, - 0x73, 0x5f, 0xf4, 0xd7, 0x17, 0x61, 0x37, 0xc3, 0xde, 0x74, 0x7c, 0xc6, 0x5b, 0x58, 0x40, 0x3c, - 0xdf, 0xf4, 0x5b, 0x1e, 0xb7, 0x05, 0xd9, 0xaf, 0xac, 0xf3, 0xeb, 0x1e, 0x8c, 0x27, 0x31, 0x0a, - 0xab, 0x60, 0x07, 0xeb, 0xc8, 0xa7, 0x59, 0xaa, 0x8d, 0x05, 0x70, 0x99, 0x43, 0xe8, 0x67, 0x60, - 0x2c, 0x86, 0x38, 0xd7, 0xd9, 0xb0, 0x94, 0xe0, 0x50, 0x90, 0x73, 0x1e, 0xba, 0x59, 0x37, 0x9c, - 0xb6, 0x1c, 0xd4, 0x20, 0x80, 0xfe, 0xed, 0x0e, 0xd8, 0x23, 0xd0, 0x0a, 0xc3, 0x2b, 0x0f, 0x41, - 0xc1, 0x32, 0xd7, 0xec, 0xba, 0xcd, 0x0c, 0x92, 0xae, 0x32, 0xfb, 0x41, 0x5e, 0x02, 0xa0, 0x26, - 0xa6, 0xe1, 0xd9, 0x55, 0x8b, 0x1a, 0x62, 0x03, 0x53, 0xfb, 0x25, 0xf4, 0xd0, 0xf1, 0xee, 0xda, - 0x55, 0xab, 0xdc, 0xeb, 0xf0, 0x3f, 0x89, 0x01, 0x7b, 0x28, 0x26, 0xa3, 0xd2, 0xaa, 0xb7, 0x6a, - 0x66, 0x00, 0x64, 0x34, 0x9c, 0x60, 0x07, 0x9b, 0xb5, 0xf1, 0xae, 0x80, 0x86, 0x99, 0x83, 0x81, - 0x61, 0xf3, 0xf7, 0xef, 0xec, 0x7b, 0xaa, 0xe2, 0x78, 0x75, 0xc7, 0xf3, 0xaa, 0xeb, 0x93, 0xb6, - 0x53, 0xaa, 0x9b, 0xfe, 0xda, 0xe4, 0x82, 0xb5, 0x6a, 0x56, 0x36, 0x67, 0xad, 0x4a, 0x79, 0x37, - 0xc5, 0x72, 0x55, 0x20, 0xb9, 0x8d, 0x38, 0x52, 0x07, 0xb8, 0xdf, 0x32, 0x1b, 0xbe, 0xed, 0x6f, - 0x8e, 0x6f, 0xdf, 0xfa, 0x00, 0xaf, 0x20, 0x0e, 0xfd, 0x6b, 0x1a, 0x5a, 0x9c, 0xb1, 0x39, 0xc5, - 0xd5, 0x9a, 0x83, 0xa1, 0xe5, 0xd6, 0xa6, 0x67, 0x34, 0x5d, 0xbb, 0x62, 0x19, 0x35, 0x6b, 0xc3, - 0xaa, 0xa1, 0x14, 0x3d, 0x2d, 0x99, 0xa7, 0x85, 0xa0, 0x4f, 0x79, 0x20, 0x80, 0x5a, 0x0c, 0x80, - 0xe8, 0x6f, 0x32, 0x0f, 0xc3, 0x81, 0x49, 0x1e, 0x45, 0xd4, 0x91, 0x03, 0xd1, 0x20, 0x05, 0x0b, - 0x61, 0x1a, 0x82, 0x4e, 0xcf, 0xba, 0x4f, 0x17, 0xab, 0xab, 0x1c, 0xfc, 0xa9, 0x7f, 0x41, 0x83, - 0x81, 0xb9, 0x56, 0xad, 0xd6, 0x96, 0x98, 0x47, 0x10, 0x32, 0xf2, 0x1a, 0x0c, 0xd7, 0xed, 0x2a, - 0xd2, 0x69, 0x36, 0xaa, 0x86, 0xef, 0x2c, 0xa3, 0x65, 0x77, 0x48, 0x76, 0x3e, 0xd9, 0x55, 0x4a, - 0xe0, 0x74, 0xa3, 0xba, 0x74, 0x67, 0x06, 0x4d, 0xd9, 0x81, 0x7a, 0xa8, 0xd5, 0x59, 0xd6, 0x3f, - 0xa9, 0xa1, 0xa5, 0x15, 0x25, 0xf5, 0x11, 0x77, 0x3e, 0x99, 0x82, 0xb1, 0x37, 0x6c, 0x7f, 0xcd, - 0x48, 0xd2, 0xcc, 0xee, 0x15, 0x24, 0xf8, 0x7a, 0x2b, 0x4a, 0x8a, 0x81, 0x86, 0x54, 0x82, 0x12, - 0x5c, 0xf4, 0x97, 0xe2, 0x27, 0x86, 0x8c, 0xf1, 0x28, 0x82, 0xf6, 0xa9, 0x51, 0x47, 0x99, 0x8a, - 0x7d, 0xcf, 0xb3, 0x51, 0xe5, 0xfc, 0x74, 0x48, 0xf9, 0x79, 0x3d, 0x75, 0x66, 0x43, 0x7a, 0x26, - 0x2a, 0x0c, 0x39, 0xb9, 0xe1, 0xa7, 0xce, 0xcf, 0x88, 0x8b, 0x11, 0xdf, 0x21, 0xde, 0xcc, 0xe6, - 0xbc, 0xe9, 0xad, 0xb5, 0xf5, 0xa1, 0x92, 0xa3, 0x84, 0x1a, 0xea, 0x48, 0x51, 0x43, 0x07, 0x60, - 0x27, 0x3b, 0x89, 0xd6, 0x28, 0xe2, 0xf1, 0x4e, 0xba, 0xce, 0x7d, 0xb4, 0x8d, 0x8d, 0xa5, 0xaf, - 0xf2, 0xeb, 0x50, 0x0a, 0x19, 0xc8, 0xe9, 0x2c, 0x74, 0x47, 0xae, 0xdf, 0xc7, 0x24, 0x9c, 0x2e, - 0xb9, 0x76, 0xbd, 0x6e, 0x55, 0x03, 0x4c, 0x0b, 0xc1, 0xb9, 0x40, 0xd1, 0x95, 0x11, 0x56, 0x38, - 0x13, 0x96, 0xa8, 0x1b, 0xa2, 0x3d, 0xdc, 0x63, 0xe3, 0x56, 0xaf, 0xc1, 0xb3, 0xcc, 0x40, 0x60, - 0x2d, 0xd3, 0xd5, 0xaa, 0x6b, 0x79, 0x5e, 0xc1, 0x91, 0x0e, 0xc3, 0x20, 0x1f, 0xc6, 0x64, 0x08, - 0x70, 0xac, 0x01, 0x33, 0x82, 0x56, 0xff, 0x6c, 0x07, 0xec, 0x4a, 0xe5, 0x98, 0x9c, 0x87, 0xed, - 0x54, 0xc6, 0x18, 0x6e, 0x7a, 0x92, 0x6e, 0xcb, 0x3a, 0x49, 0x19, 0x04, 0x79, 0x09, 0x7a, 0xc4, - 0x39, 0xdc, 0x91, 0x1f, 0x5a, 0x00, 0x05, 0x08, 0x56, 0xec, 0x5a, 0xcd, 0x5c, 0xae, 0x31, 0xcd, - 0x93, 0x17, 0x01, 0x07, 0x6a, 0x3b, 0x10, 0xba, 0x42, 0x0e, 0x84, 0xe0, 0xb8, 0x68, 0x0b, 0x12, - 0xd3, 0x10, 0xa8, 0xb0, 0x02, 0x59, 0x09, 0x4e, 0xcf, 0x8a, 0x5d, 0x1d, 0xef, 0x66, 0xb7, 0xd7, - 0x8a, 0x5d, 0xd5, 0x2d, 0x34, 0xa3, 0x92, 0xab, 0xfd, 0x58, 0x85, 0xaa, 0x0e, 0x87, 0x32, 0x96, - 0xfc, 0xb1, 0x0e, 0x77, 0x39, 0xb4, 0x67, 0xa3, 0xc7, 0x73, 0x2e, 0xfb, 0xe5, 0x3f, 0xb5, 0xd0, - 0x66, 0x8b, 0xc3, 0x8b, 0xbb, 0x77, 0xaf, 0x38, 0xa4, 0x42, 0x02, 0x94, 0xa9, 0x8a, 0x7b, 0xb8, - 0x62, 0x20, 0x37, 0x60, 0x60, 0xd9, 0xf2, 0x7c, 0x63, 0xb9, 0xb5, 0x89, 0x68, 0x3a, 0xf2, 0xa3, - 0xd9, 0x19, 0x80, 0xce, 0xb4, 0x36, 0x19, 0xaa, 0xf7, 0xc1, 0x20, 0x45, 0x45, 0xdd, 0x66, 0x0c, - 0x57, 0x67, 0x7e, 0x5c, 0xfd, 0x01, 0xec, 0x5d, 0xab, 0x56, 0xa3, 0xc8, 0xf4, 0xab, 0xb8, 0x3d, - 0x67, 0x2d, 0xd7, 0xde, 0xa0, 0xe6, 0xc2, 0x16, 0xa6, 0xf0, 0xff, 0x77, 0xe0, 0x8a, 0xcb, 0xb1, - 0xfc, 0xaf, 0x9f, 0xc8, 0xdf, 0xe3, 0x62, 0xd4, 0x9e, 0x83, 0xc7, 0x61, 0xb6, 0x2a, 0xad, 0xce, - 0xce, 0x47, 0xb7, 0x3a, 0xf5, 0x6f, 0x68, 0xb0, 0x5f, 0x4e, 0xf7, 0x4f, 0x90, 0x69, 0xf8, 0x99, - 0x4e, 0x98, 0x4c, 0x3d, 0xdd, 0x96, 0x9c, 0xab, 0x66, 0xa3, 0x62, 0xd5, 0x5e, 0x6d, 0x2e, 0x39, - 0xd3, 0xf5, 0xe0, 0x44, 0x7a, 0x7c, 0xba, 0x7c, 0x16, 0xfa, 0x96, 0x4d, 0xcf, 0x32, 0x4c, 0x8a, - 0xb7, 0xc8, 0xe1, 0x0e, 0x01, 0x1c, 0x23, 0x87, 0xcc, 0xc1, 0xce, 0xfb, 0x2d, 0xc7, 0x17, 0x68, - 0xba, 0xf2, 0xa3, 0xe9, 0xa3, 0x80, 0x88, 0xe7, 0x3a, 0xf4, 0x78, 0xbe, 0x6b, 0xfa, 0xd6, 0x2a, - 0xbb, 0x30, 0x0c, 0x4c, 0xbd, 0x20, 0x99, 0x55, 0x36, 0x23, 0x35, 0xfa, 0xcc, 0x72, 0x17, 0x41, - 0xca, 0x02, 0x98, 0x2c, 0xc0, 0xa0, 0x6b, 0xad, 0x58, 0xae, 0xd5, 0xa8, 0x58, 0xb8, 0x33, 0xba, - 0xf3, 0xcb, 0xda, 0x80, 0x80, 0x65, 0x5b, 0xe3, 0x3b, 0x1d, 0x70, 0x3a, 0xb4, 0x32, 0x31, 0x41, - 0x7b, 0x4f, 0xd7, 0x27, 0x3e, 0xb3, 0x9d, 0x8f, 0x61, 0x66, 0xbb, 0x1e, 0xf3, 0xcc, 0x6e, 0xdf, - 0xfa, 0xcc, 0xae, 0xa0, 0x0b, 0x27, 0x7d, 0x62, 0x1f, 0x9f, 0x11, 0xe7, 0xc2, 0xf3, 0x29, 0x1a, - 0x7d, 0x4b, 0xe3, 0xe5, 0x36, 0xe5, 0xfe, 0xb5, 0x03, 0x9e, 0x42, 0xc5, 0xdf, 0x1e, 0xe8, 0xc7, - 0xc4, 0xa0, 0xbb, 0x48, 0xaf, 0x19, 0xab, 0x76, 0xa3, 0x88, 0x40, 0x21, 0x48, 0xc4, 0x1a, 0xec, - 0xda, 0x8a, 0x35, 0xb8, 0x8f, 0x5b, 0x83, 0x81, 0xe4, 0xf4, 0xcc, 0xf4, 0xfe, 0xf0, 0x9d, 0x7d, - 0xac, 0x21, 0xdd, 0x30, 0xec, 0x96, 0x18, 0x86, 0x3b, 0xda, 0x86, 0xe1, 0x7d, 0xf4, 0xe2, 0xc9, - 0xe4, 0x08, 0xd5, 0xc0, 0xcd, 0x98, 0xbd, 0x36, 0xa5, 0xb6, 0xd7, 0xd2, 0x96, 0x4d, 0x58, 0x6d, - 0x9b, 0xf0, 0x42, 0x2e, 0x91, 0x7a, 0x0f, 0x86, 0xfe, 0xb4, 0x96, 0x30, 0x7a, 0x9e, 0xe0, 0x5d, - 0xcf, 0x4b, 0xd8, 0x4e, 0x92, 0x1b, 0xdf, 0xe3, 0x9c, 0x82, 0x4f, 0xf1, 0x47, 0x90, 0x90, 0xc5, - 0xf6, 0xc4, 0x7c, 0x14, 0x9f, 0xd4, 0x00, 0x42, 0xaa, 0xfd, 0x09, 0x6e, 0xec, 0xc0, 0x8a, 0x1b, - 0x5d, 0xb4, 0xdc, 0xa6, 0xe5, 0xb7, 0xcc, 0x1a, 0x9b, 0x91, 0xbb, 0xbe, 0xe9, 0x07, 0xb6, 0x62, - 0x1f, 0x67, 0xbb, 0xb1, 0xe2, 0xa0, 0x77, 0x41, 0xf6, 0x4c, 0x1d, 0xc3, 0x70, 0xa3, 0xb1, 0xe2, - 0x94, 0x71, 0xd6, 0x82, 0xbf, 0xc9, 0x22, 0xec, 0x5c, 0x69, 0x35, 0xaa, 0x76, 0x63, 0x95, 0x61, - 0x63, 0x2e, 0xa7, 0xe3, 0xf9, 0xb0, 0xcd, 0x31, 0xc8, 0x72, 0x1f, 0xa2, 0x08, 0x30, 0xea, 0xbf, - 0xda, 0x09, 0xa3, 0x73, 0xad, 0x5a, 0x2d, 0xbe, 0x9c, 0xe4, 0xa5, 0x98, 0x43, 0xe4, 0xb0, 0xd4, - 0x73, 0x1d, 0x05, 0x14, 0x3e, 0xb2, 0x25, 0x18, 0x68, 0x72, 0x02, 0xc2, 0xd4, 0xbe, 0x90, 0x8f, - 0x5a, 0x3a, 0x7b, 0xf3, 0xdb, 0xca, 0xfd, 0x02, 0x09, 0x9d, 0x81, 0xbb, 0xc1, 0x0c, 0xf8, 0x2d, - 0xd7, 0xf2, 0x18, 0xce, 0x4e, 0x8a, 0x73, 0x52, 0x82, 0xf3, 0xda, 0x9b, 0x4d, 0xdb, 0xdd, 0x9c, - 0x63, 0x00, 0xed, 0x39, 0x9d, 0xdf, 0x16, 0x4c, 0x02, 0x6d, 0xa4, 0x48, 0x67, 0x98, 0x68, 0xa2, - 0x5a, 0x2d, 0x70, 0xb4, 0x52, 0xf9, 0x65, 0x77, 0x82, 0x54, 0x97, 0xe0, 0xf6, 0x47, 0x76, 0x09, - 0xce, 0x74, 0x43, 0x57, 0xc0, 0xa8, 0xbe, 0x8a, 0x97, 0xd5, 0x94, 0x7d, 0x87, 0xdb, 0xfc, 0x5a, - 0xdc, 0x23, 0xf7, 0x82, 0xc2, 0x87, 0x95, 0x58, 0x36, 0xe1, 0x97, 0xbb, 0x88, 0x9e, 0x9d, 0x44, - 0x8f, 0x3c, 0x17, 0xba, 0xaa, 0xe4, 0x74, 0x10, 0x44, 0x5e, 0x8d, 0x89, 0x55, 0x21, 0x1a, 0xb9, - 0xb7, 0x6d, 0x06, 0xb5, 0x4e, 0xbc, 0x03, 0xea, 0x82, 0x5c, 0x94, 0x5a, 0xc9, 0xfb, 0x6b, 0x14, - 0x47, 0xfb, 0x6d, 0x8f, 0x9b, 0x1b, 0xfc, 0x71, 0x9b, 0xfd, 0xcc, 0x67, 0x00, 0x5d, 0xc7, 0x4b, - 0x52, 0xfb, 0x91, 0x88, 0xaa, 0x4a, 0x1a, 0x91, 0x53, 0xe4, 0x0d, 0x4a, 0xbf, 0x84, 0x33, 0xbb, - 0xe8, 0x78, 0x36, 0x8d, 0x71, 0xba, 0xd1, 0x28, 0xb0, 0x2e, 0x5c, 0x7a, 0x52, 0xa0, 0x85, 0xf4, - 0x6c, 0x0f, 0x0e, 0x6a, 0x0b, 0x65, 0xe7, 0x68, 0xe6, 0x76, 0xe7, 0xa8, 0x50, 0x6e, 0x19, 0xb4, - 0x3e, 0x97, 0x88, 0xc7, 0x10, 0x43, 0x16, 0x62, 0xf7, 0xa3, 0xf0, 0x9c, 0x04, 0x4f, 0x9c, 0xef, - 0x47, 0x0f, 0x5b, 0xf2, 0xf0, 0xed, 0xb8, 0x3d, 0xd6, 0xb5, 0x95, 0x15, 0xc6, 0xfb, 0x7b, 0x37, - 0xe8, 0x4d, 0x94, 0xe1, 0x58, 0x94, 0x90, 0x88, 0x10, 0x2a, 0x32, 0x59, 0x76, 0x42, 0xc8, 0x42, - 0x93, 0xfe, 0x58, 0xd6, 0x77, 0x1b, 0x5f, 0xdf, 0x2f, 0x6a, 0x70, 0x38, 0x73, 0x61, 0xc4, 0xa3, - 0xa2, 0x18, 0x32, 0xd8, 0xea, 0xfb, 0x64, 0x07, 0x7f, 0x9a, 0x20, 0x91, 0x4b, 0xd0, 0xeb, 0xda, - 0xde, 0xba, 0x51, 0x77, 0xaa, 0xcc, 0x53, 0x33, 0x20, 0x45, 0x50, 0xb6, 0xbd, 0xf5, 0x5b, 0x4e, - 0xd5, 0x2a, 0xf7, 0xb8, 0xf8, 0x97, 0xfe, 0x53, 0x1d, 0x30, 0x9c, 0x58, 0x44, 0xb2, 0x1b, 0x76, - 0xd8, 0x9e, 0x51, 0x73, 0x1a, 0xab, 0x94, 0xa4, 0x9e, 0x72, 0xb7, 0xed, 0x2d, 0x38, 0x8d, 0xd5, - 0x47, 0xb7, 0xeb, 0x67, 0xa1, 0xcf, 0x6a, 0xf8, 0xee, 0x66, 0xc2, 0x1b, 0x94, 0x7d, 0x9d, 0xa7, - 0x70, 0x4c, 0x87, 0xdc, 0x86, 0x21, 0x8b, 0x13, 0x6d, 0xe0, 0x3d, 0xa1, 0x80, 0x36, 0x1a, 0x14, - 0xc0, 0xb7, 0x28, 0xac, 0xfe, 0xfb, 0x1a, 0x86, 0x1f, 0xe4, 0x92, 0x6c, 0xe1, 0x5b, 0x8d, 0xac, - 0xda, 0x11, 0x99, 0x6a, 0x8d, 0x23, 0x7a, 0x9c, 0xcb, 0x77, 0x05, 0x4f, 0x91, 0x34, 0x7b, 0x28, - 0xcf, 0x71, 0xb7, 0x86, 0x1b, 0x22, 0x15, 0x5e, 0xf0, 0xd9, 0xb5, 0x35, 0x8b, 0x0c, 0x37, 0x04, - 0x53, 0xcb, 0x5c, 0x15, 0x49, 0x2c, 0x8d, 0x5c, 0xd4, 0x36, 0x51, 0x15, 0x49, 0x71, 0x20, 0xc5, - 0xf3, 0x11, 0x8a, 0x0b, 0xda, 0x3c, 0x11, 0xaa, 0xa7, 0xf1, 0xfa, 0x2f, 0xb1, 0x10, 0xf3, 0x11, - 0x7d, 0x50, 0x89, 0x42, 0x04, 0x7c, 0x46, 0xa4, 0xa9, 0x98, 0xa9, 0x1a, 0x3d, 0x7a, 0x3e, 0xc1, - 0x6f, 0x5f, 0xd2, 0x23, 0x13, 0xc7, 0xfc, 0x70, 0x24, 0x44, 0x33, 0x38, 0xed, 0x2e, 0x15, 0x0f, - 0xd1, 0x6c, 0x87, 0x7c, 0xf2, 0x70, 0x38, 0x8e, 0x53, 0x3f, 0x8f, 0x61, 0x51, 0xe9, 0x3a, 0x1d, - 0x89, 0x18, 0x85, 0xed, 0x2c, 0x1a, 0x57, 0xa3, 0xd1, 0xb8, 0xec, 0x87, 0x3e, 0x9f, 0x00, 0x0d, - 0xa4, 0x7f, 0xd1, 0x75, 0x56, 0xec, 0x5a, 0x31, 0x7b, 0xe0, 0xd3, 0x1a, 0xae, 0xa1, 0x04, 0x95, - 0x70, 0xc0, 0xee, 0x68, 0xb2, 0x26, 0x5c, 0x81, 0x63, 0x99, 0x53, 0x11, 0x46, 0xc3, 0x81, 0x83, - 0xdb, 0x9b, 0xed, 0x19, 0x55, 0x6b, 0xc5, 0x6c, 0xd5, 0x7c, 0x7c, 0x66, 0xed, 0xb5, 0xbd, 0x59, - 0xd6, 0xa0, 0xaf, 0xa3, 0x34, 0x5c, 0x75, 0x1d, 0xcf, 0x63, 0xa7, 0xcf, 0xa2, 0xe3, 0xd4, 0xee, - 0x36, 0xcc, 0xa6, 0xb7, 0xe6, 0x14, 0x53, 0x9b, 0xfb, 0x80, 0x79, 0xd0, 0x8c, 0x70, 0xcc, 0x0d, - 0xd0, 0x26, 0x1a, 0x9c, 0xa4, 0xff, 0x2c, 0xa0, 0x20, 0x48, 0x47, 0x43, 0xe6, 0x63, 0x98, 0xb4, - 0x38, 0x26, 0x32, 0x0f, 0xfd, 0xac, 0x03, 0x86, 0x3a, 0x16, 0x39, 0xfc, 0x99, 0x7f, 0x10, 0x43, - 0x26, 0xc9, 0x3d, 0xd8, 0xd5, 0xc4, 0x83, 0x10, 0x4f, 0x6e, 0xc3, 0x77, 0xfc, 0x88, 0xab, 0x3d, - 0x13, 0xe3, 0x08, 0xc7, 0xc0, 0x58, 0x5a, 0x0a, 0xe0, 0xc9, 0x4d, 0x18, 0x68, 0x35, 0x5c, 0xcb, - 0xac, 0xd9, 0x1f, 0xb3, 0xaa, 0x46, 0xb3, 0x51, 0x2b, 0xa2, 0x11, 0xfa, 0xdb, 0xa0, 0x8b, 0x8d, - 0x1a, 0xf9, 0x10, 0x8c, 0x47, 0x71, 0x19, 0x42, 0x63, 0x84, 0x9c, 0x89, 0x99, 0x58, 0xc7, 0x22, - 0x58, 0x85, 0x22, 0xa0, 0xea, 0xeb, 0x7e, 0xcb, 0xf6, 0x37, 0x0d, 0xb3, 0x5a, 0xb7, 0x3d, 0xcf, - 0x76, 0x1a, 0x21, 0xef, 0x6f, 0x0e, 0xf5, 0x45, 0x81, 0xa7, 0x39, 0x2c, 0x29, 0x03, 0x41, 0x7c, - 0x35, 0xfb, 0x7e, 0xcb, 0xae, 0x52, 0xd7, 0x28, 0xf3, 0x3e, 0xe5, 0xc3, 0x38, 0xcc, 0xc0, 0x17, - 0xda, 0xd0, 0xe4, 0x55, 0x18, 0xb5, 0x1b, 0xb6, 0x6f, 0x9b, 0xb5, 0xe8, 0x32, 0xf5, 0xe4, 0xc7, - 0x4a, 0x10, 0x41, 0x78, 0x95, 0x3e, 0x04, 0xe3, 0x75, 0xd3, 0x6e, 0xf8, 0x56, 0x23, 0x90, 0x86, - 0x28, 0xea, 0xde, 0x02, 0x33, 0x1b, 0x42, 0x12, 0x46, 0xbf, 0x0e, 0xfb, 0x63, 0x54, 0x53, 0x5f, - 0x09, 0xf3, 0xc9, 0xe0, 0x30, 0x90, 0x7f, 0x98, 0xa7, 0x23, 0x1c, 0x04, 0x27, 0x1d, 0x77, 0xa8, - 0x07, 0x83, 0xdd, 0x82, 0x21, 0x66, 0xcb, 0xd4, 0x1c, 0x8f, 0x23, 0xef, 0xcb, 0x8f, 0x7c, 0x80, - 0x02, 0x2f, 0x38, 0x1e, 0xa2, 0xbb, 0x03, 0xc3, 0x2b, 0x96, 0x65, 0xb8, 0x96, 0x67, 0xb9, 0x1b, - 0x16, 0xe2, 0xdb, 0x59, 0x40, 0x2c, 0x56, 0xac, 0xe0, 0x38, 0x0b, 0x80, 0x19, 0xc2, 0x0f, 0xc0, - 0x18, 0x73, 0x8d, 0xd5, 0x9c, 0xca, 0xba, 0xe1, 0x06, 0x6b, 0xec, 0x5a, 0x75, 0xab, 0xe1, 0x8f, - 0xf7, 0xe7, 0xc7, 0x3a, 0x4a, 0x51, 0x2c, 0x38, 0x15, 0xfa, 0xc6, 0x86, 0x08, 0xc8, 0x47, 0x60, - 0x82, 0xed, 0xc1, 0x0d, 0xcb, 0x68, 0x05, 0xfb, 0x63, 0xcd, 0xb4, 0xdd, 0x4a, 0xcb, 0x37, 0xdc, - 0x40, 0x85, 0x0d, 0xe4, 0x47, 0xbf, 0x9b, 0xa3, 0x79, 0xb5, 0xd9, 0xa8, 0xcd, 0x33, 0x24, 0xe5, - 0xc0, 0x2e, 0x9a, 0x87, 0xfe, 0x35, 0xcb, 0xac, 0xf9, 0x6b, 0xc6, 0x8a, 0x59, 0xf1, 0x1d, 0x77, - 0x7c, 0xb0, 0xc0, 0x23, 0x24, 0x83, 0x9c, 0xa3, 0x80, 0x37, 0xbb, 0x7a, 0x86, 0x86, 0x86, 0xf5, - 0x3d, 0x18, 0x44, 0x77, 0xcb, 0xa9, 0xb6, 0x6a, 0x16, 0x75, 0x9a, 0xf0, 0xc0, 0xf0, 0x57, 0x31, - 0xde, 0x2f, 0xf2, 0x49, 0x04, 0xd8, 0x45, 0xd4, 0xb2, 0x2c, 0xa8, 0xf2, 0x3a, 0x4b, 0x5c, 0x61, - 0xb0, 0xa8, 0x86, 0x77, 0xc3, 0xae, 0xe8, 0x55, 0x92, 0x8f, 0x67, 0x60, 0x18, 0xe0, 0x7b, 0x76, - 0xf7, 0xb8, 0x1f, 0x8e, 0x42, 0x28, 0x5b, 0x6f, 0x98, 0x6e, 0x75, 0xd1, 0xb1, 0x1b, 0x7e, 0xae, - 0xe0, 0xee, 0xd3, 0x30, 0xd6, 0xb4, 0x98, 0xeb, 0xac, 0xe9, 0x38, 0x35, 0xc3, 0xb7, 0xeb, 0x96, - 0xe7, 0x9b, 0xf5, 0x26, 0x3d, 0xf3, 0x3b, 0xcb, 0xa3, 0xf8, 0x35, 0x50, 0x24, 0x4b, 0xfc, 0x9b, - 0xfe, 0xd3, 0x3c, 0xae, 0x27, 0x65, 0x4c, 0x64, 0x6e, 0x19, 0x9e, 0xe2, 0x0a, 0x8d, 0xe6, 0xe4, - 0x18, 0x2e, 0xed, 0x65, 0x34, 0x69, 0x37, 0x46, 0x47, 0x3e, 0xa1, 0x19, 0x0f, 0x5b, 0x13, 0xe1, - 0xb1, 0xf4, 0x03, 0x68, 0x0f, 0x87, 0xbe, 0x5c, 0x35, 0xeb, 0x4d, 0xd3, 0x5e, 0x6d, 0xf0, 0xd9, - 0xff, 0xf7, 0x2e, 0xb4, 0x79, 0x53, 0xfb, 0x20, 0xad, 0xf7, 0xe1, 0xe9, 0x80, 0xc6, 0x60, 0x12, - 0x90, 0xca, 0x0a, 0x76, 0x09, 0x7b, 0x27, 0x4f, 0x48, 0xfd, 0xc3, 0x26, 0xb3, 0xed, 0xc2, 0xb8, - 0xa9, 0x85, 0xba, 0xc7, 0x97, 0x7d, 0x22, 0x0f, 0xe0, 0x50, 0x6c, 0x48, 0x3a, 0xfd, 0x62, 0x5c, - 0xaf, 0xb2, 0x66, 0x05, 0xf2, 0x89, 0xaf, 0xb9, 0x47, 0xa5, 0xaf, 0x63, 0x9c, 0x15, 0x36, 0x2d, - 0x4e, 0xad, 0x7c, 0x20, 0x32, 0x68, 0xd0, 0xc4, 0x3b, 0xdd, 0x45, 0x9c, 0xe4, 0xc3, 0xb0, 0x87, - 0x9e, 0x37, 0xa9, 0x2b, 0x53, 0x40, 0x33, 0x8f, 0x51, 0x2c, 0x89, 0x75, 0x21, 0x9f, 0xd2, 0xe0, - 0x38, 0x97, 0xaa, 0x7c, 0x5c, 0x76, 0x15, 0xe5, 0xf2, 0x08, 0xe2, 0x5f, 0xca, 0x64, 0xb6, 0x0e, - 0x07, 0x04, 0x2d, 0x52, 0xa6, 0xb7, 0xe7, 0x17, 0xc7, 0x67, 0xf8, 0xc8, 0xa9, 0xbc, 0xeb, 0x17, - 0x51, 0x26, 0x6f, 0x78, 0x77, 0x9a, 0xbe, 0x55, 0xbd, 0xd3, 0xf2, 0xef, 0xac, 0xb0, 0x0e, 0x5e, - 0x76, 0x62, 0xc8, 0x2c, 0x0a, 0x6b, 0x2a, 0x30, 0x0a, 0xeb, 0x7e, 0xd8, 0x69, 0x7b, 0x86, 0x13, - 0x7c, 0x37, 0x9c, 0x96, 0x8f, 0x57, 0x76, 0xb0, 0x05, 0x88, 0x7e, 0x18, 0x5f, 0x40, 0x12, 0x38, - 0xf0, 0x6d, 0x48, 0x1c, 0x4d, 0xb3, 0xe8, 0x4d, 0x52, 0x74, 0xc4, 0x41, 0x15, 0x47, 0x88, 0x7e, - 0x05, 0x2d, 0xee, 0x39, 0xcb, 0x9a, 0xb5, 0x3d, 0xf6, 0xfa, 0x84, 0x56, 0x6b, 0xe8, 0xaa, 0x27, - 0x67, 0xfa, 0x1f, 0x34, 0xb4, 0x92, 0x65, 0x08, 0x90, 0x86, 0x67, 0x00, 0x7c, 0x3b, 0xd0, 0x6f, - 0x18, 0x2e, 0xa1, 0x1d, 0xe9, 0x2a, 0xf7, 0x06, 0x2d, 0xec, 0x99, 0xe3, 0x16, 0xec, 0x14, 0x16, - 0x74, 0xdb, 0xad, 0x2e, 0xbb, 0xc0, 0x86, 0xc6, 0x5a, 0xb2, 0x2d, 0x97, 0x0e, 0xd4, 0x67, 0xb6, - 0x47, 0x25, 0x37, 0xa1, 0x4f, 0x9c, 0x5f, 0x7e, 0x0d, 0x1d, 0xea, 0x47, 0xf3, 0x61, 0x5b, 0x5a, - 0x5a, 0x28, 0x03, 0x3f, 0xb5, 0xfc, 0x9a, 0x38, 0xa7, 0x42, 0xdd, 0xb8, 0x78, 0xf2, 0xa5, 0xf8, - 0x38, 0x0f, 0x1b, 0x49, 0xed, 0x23, 0x6e, 0x70, 0xbb, 0x02, 0x9b, 0xa1, 0x8a, 0xdf, 0xdb, 0xdb, - 0x47, 0xcb, 0xcb, 0xab, 0x40, 0x39, 0xb2, 0x92, 0x6c, 0xd4, 0x5f, 0x46, 0x4d, 0x82, 0xd6, 0xfb, - 0x2d, 0xdb, 0xab, 0x9b, 0x7e, 0x25, 0xf4, 0x80, 0xb7, 0x0f, 0xfa, 0xaa, 0x2d, 0xcf, 0xe7, 0x4a, - 0x5a, 0xa3, 0x2a, 0x02, 0x82, 0x26, 0xa6, 0x7d, 0xf5, 0xcf, 0x77, 0xc2, 0x60, 0x0c, 0x9a, 0xe8, - 0x10, 0xb9, 0xc8, 0xe4, 0x4f, 0x25, 0x20, 0xd3, 0xd0, 0x6b, 0x6e, 0x98, 0x76, 0xe1, 0x40, 0xbf, - 0x36, 0x54, 0xa0, 0xd1, 0x99, 0x69, 0x55, 0xe0, 0x7a, 0xc0, 0x20, 0xc8, 0x1c, 0xec, 0xc4, 0xfb, - 0x8f, 0xb1, 0xe6, 0xd4, 0xaa, 0x45, 0xae, 0x02, 0x7d, 0x08, 0x38, 0xef, 0xd4, 0xaa, 0xc1, 0x55, - 0xc5, 0x7a, 0xb3, 0x69, 0x55, 0x82, 0x0d, 0xcb, 0x68, 0x29, 0x60, 0xfd, 0xf7, 0x73, 0x50, 0x66, - 0xe4, 0x5d, 0x05, 0xa8, 0xda, 0x2b, 0x18, 0xb3, 0x50, 0xc4, 0xe6, 0x0f, 0x81, 0xe9, 0x6f, 0xa0, - 0xf2, 0x4e, 0x59, 0x66, 0x14, 0xb4, 0x57, 0x81, 0x70, 0xd6, 0xeb, 0xe2, 0x2b, 0x9a, 0x29, 0xcf, - 0xa9, 0xb3, 0xe4, 0x38, 0xb6, 0xf2, 0xf0, 0x72, 0x1c, 0xbd, 0x7e, 0x08, 0x37, 0x3a, 0x76, 0x0d, - 0x2c, 0xec, 0x99, 0xf6, 0x44, 0x89, 0x63, 0xe9, 0x33, 0x1d, 0xb0, 0x2b, 0xd4, 0x85, 0x99, 0xe3, - 0x74, 0x2a, 0xff, 0x8f, 0x8b, 0x92, 0xfe, 0x8b, 0xdc, 0xd7, 0x23, 0x9d, 0x41, 0x5c, 0x40, 0x1b, - 0x26, 0xf8, 0x80, 0xf4, 0x4a, 0x14, 0x1e, 0x3d, 0x2b, 0x3a, 0x34, 0x75, 0xea, 0xcb, 0xbb, 0x97, - 0xd3, 0x87, 0x14, 0xda, 0x26, 0x76, 0x06, 0x06, 0xc6, 0xb1, 0xed, 0xf9, 0x76, 0x45, 0x2c, 0xeb, - 0x79, 0xe8, 0x8f, 0x7c, 0x20, 0x04, 0xba, 0x82, 0xe3, 0x1b, 0x8f, 0x72, 0xfa, 0x77, 0xb0, 0x7a, - 0xed, 0xec, 0xd7, 0xae, 0x32, 0xfb, 0xa1, 0x37, 0x50, 0x51, 0x29, 0xc6, 0x10, 0xee, 0x4b, 0xf0, - 0x44, 0x6b, 0x46, 0x4e, 0x57, 0x04, 0x45, 0x39, 0x04, 0x17, 0x18, 0xf3, 0xb7, 0x6c, 0xdf, 0x79, - 0xcd, 0x6c, 0xd5, 0xa8, 0x36, 0x10, 0x3c, 0xfc, 0xb9, 0x06, 0x63, 0xf1, 0x2f, 0x38, 0xf2, 0x51, - 0x18, 0xaa, 0x9b, 0x9e, 0x6f, 0xb9, 0x3c, 0x0e, 0xc7, 0xe2, 0xaa, 0x72, 0x90, 0xb5, 0x4f, 0xf3, - 0x66, 0x72, 0x12, 0x46, 0xab, 0xc2, 0xa8, 0x0f, 0x75, 0x67, 0xaf, 0xff, 0x23, 0xed, 0x6f, 0x6d, - 0x90, 0x43, 0x30, 0xe0, 0x35, 0x1d, 0x3f, 0xd4, 0x99, 0x85, 0x3e, 0xf4, 0x07, 0xad, 0x91, 0x6e, - 0x95, 0x37, 0xa6, 0x4e, 0x84, 0xba, 0x75, 0xb1, 0x6e, 0x41, 0xab, 0xe8, 0xa6, 0xcf, 0xe2, 0x41, - 0x8f, 0x7e, 0xd0, 0xd9, 0x39, 0xd7, 0xa9, 0x53, 0x96, 0x42, 0x1e, 0xa9, 0x8d, 0xe0, 0xb7, 0x11, - 0x7d, 0xe4, 0xdb, 0x49, 0x1b, 0x79, 0x44, 0x11, 0x0f, 0x14, 0x4e, 0xc1, 0x82, 0x73, 0xa2, 0x74, - 0x95, 0x72, 0x6f, 0xeb, 0xbc, 0xed, 0xf9, 0x8e, 0x6b, 0x57, 0x84, 0x35, 0x55, 0x71, 0x42, 0xc6, - 0x92, 0x12, 0x85, 0x83, 0x07, 0x8a, 0x0c, 0x85, 0xf0, 0x10, 0xf7, 0x73, 0xa3, 0x8f, 0x7e, 0xc8, - 0xc8, 0x99, 0x8b, 0xe0, 0xd8, 0xe9, 0x87, 0x7e, 0xe9, 0x5f, 0xd6, 0x60, 0x84, 0x7e, 0x66, 0x23, - 0x06, 0x96, 0x53, 0x70, 0xa5, 0x23, 0xc7, 0x80, 0xb0, 0x11, 0x56, 0x5d, 0xa7, 0xd5, 0x0c, 0x6c, - 0x4d, 0xcf, 0xaa, 0xa0, 0x60, 0x0f, 0xd1, 0x2f, 0xd7, 0xf1, 0xc3, 0x5d, 0xab, 0x42, 0x76, 0xc3, - 0x8e, 0xba, 0xf9, 0xa6, 0x61, 0xae, 0x5a, 0x28, 0xe6, 0xdd, 0x75, 0xf3, 0xcd, 0xe9, 0x55, 0x8b, - 0x4c, 0xc2, 0x88, 0xdd, 0xa8, 0xd4, 0x5a, 0x01, 0xa9, 0xe6, 0x1b, 0xc6, 0x1a, 0x1b, 0x04, 0xa3, - 0xd4, 0x87, 0xf1, 0x53, 0xd9, 0x7c, 0x03, 0x47, 0x0f, 0x64, 0x8e, 0xf7, 0x17, 0xae, 0x5d, 0x1a, - 0xc4, 0x54, 0x1e, 0xc4, 0x76, 0xee, 0xb7, 0xd5, 0x3f, 0xab, 0xe1, 0x03, 0xb6, 0xc8, 0x08, 0x34, - 0x7d, 0xbb, 0x66, 0xfb, 0x9b, 0xb9, 0x82, 0x73, 0x3e, 0x0c, 0xbb, 0x18, 0x7f, 0x48, 0x52, 0x60, - 0x7f, 0x06, 0x8c, 0x67, 0x58, 0x59, 0x29, 0x53, 0x55, 0x1e, 0xf1, 0x93, 0x8d, 0xfa, 0x7f, 0x69, - 0x11, 0x89, 0x0c, 0x53, 0x27, 0x12, 0x6b, 0x60, 0x43, 0xb4, 0x62, 0x28, 0xcb, 0xbe, 0x4c, 0xad, - 0xd7, 0x06, 0x21, 0xf7, 0x60, 0x88, 0x13, 0x2f, 0xe6, 0xaa, 0x23, 0xe1, 0xfb, 0xc5, 0x5a, 0x13, - 0x58, 0x7a, 0x62, 0x92, 0x4f, 0x5f, 0xe8, 0xa4, 0x19, 0x44, 0x2c, 0xfc, 0x13, 0xb9, 0x0a, 0x7d, - 0xe1, 0xc5, 0xea, 0xa4, 0xb2, 0xa5, 0x67, 0xcb, 0x56, 0x19, 0x5c, 0xb1, 0x92, 0xfa, 0x29, 0x4c, - 0xcf, 0x9b, 0xb1, 0x1b, 0x26, 0x9f, 0x85, 0xac, 0xd8, 0x21, 0x7d, 0x19, 0x73, 0x85, 0x62, 0x40, - 0xe2, 0x28, 0x8c, 0x05, 0x3e, 0xc8, 0x56, 0x89, 0x81, 0xe3, 0x52, 0xc4, 0xe3, 0x1e, 0xee, 0xc3, - 0xf1, 0xd4, 0x50, 0xb6, 0xab, 0x4e, 0xa3, 0x6a, 0xb3, 0x98, 0xe7, 0xc7, 0x5d, 0x2f, 0xe3, 0x73, - 0x9d, 0x70, 0x20, 0x11, 0x74, 0x15, 0x1f, 0xef, 0x27, 0x37, 0x5e, 0xf1, 0x3a, 0xec, 0xf4, 0x5d, - 0x7b, 0x75, 0xd5, 0x72, 0x17, 0x8b, 0x06, 0xd6, 0x44, 0x00, 0xb3, 0xe3, 0x16, 0x0f, 0xc1, 0x0e, - 0xdb, 0xa3, 0xd1, 0x6a, 0xd4, 0xe4, 0xec, 0x99, 0xe9, 0xfb, 0xe1, 0x3b, 0xfb, 0x78, 0x53, 0x99, - 0xff, 0x11, 0x0b, 0x6f, 0xdc, 0x21, 0x09, 0x6f, 0xec, 0x69, 0x87, 0x37, 0x7e, 0x5c, 0x8b, 0x84, - 0x86, 0x2b, 0x85, 0x42, 0x94, 0x34, 0x88, 0x06, 0xdb, 0x9d, 0xcb, 0x1b, 0x6c, 0x17, 0x47, 0x29, - 0x42, 0xee, 0x78, 0xe4, 0x07, 0x4f, 0x3d, 0x2b, 0x94, 0x1d, 0xa0, 0xff, 0x36, 0xf7, 0x60, 0xa5, - 0x80, 0x23, 0xc9, 0x97, 0xa0, 0x6b, 0xc6, 0x16, 0xca, 0xe2, 0x88, 0x9a, 0xe0, 0x50, 0x4c, 0x20, - 0x85, 0x0a, 0xa0, 0xa7, 0xbd, 0x75, 0x5e, 0x6f, 0xa0, 0x00, 0x74, 0x00, 0x95, 0x12, 0x8e, 0xcf, - 0x5f, 0x54, 0xa3, 0x11, 0x40, 0xc5, 0x98, 0x7e, 0x8b, 0x9b, 0x8f, 0x52, 0x24, 0x3f, 0x96, 0xac, - 0xbf, 0xad, 0xc1, 0x70, 0xa2, 0xf7, 0x13, 0xdd, 0xff, 0xd1, 0x1d, 0xd3, 0x19, 0xdf, 0x31, 0x89, - 0x23, 0xb0, 0x2b, 0xe5, 0xa5, 0xf2, 0x16, 0xee, 0x21, 0x8c, 0xaf, 0xf2, 0x9d, 0xba, 0x5d, 0xb9, - 0xf6, 0xa6, 0x55, 0x69, 0x05, 0xc2, 0x3e, 0x67, 0x59, 0xb7, 0x5a, 0x35, 0xdf, 0x6e, 0xd6, 0x6c, - 0xcb, 0xcd, 0xb5, 0xb6, 0x1b, 0x18, 0xad, 0x93, 0x07, 0x9d, 0x08, 0x3a, 0x83, 0xba, 0x68, 0x2d, - 0x32, 0x8d, 0x21, 0x30, 0xfd, 0x1c, 0xaf, 0x2c, 0x42, 0x57, 0xf8, 0xae, 0x6f, 0xae, 0x5b, 0xd7, - 0x5d, 0xb3, 0x9d, 0x73, 0x30, 0x0e, 0x3b, 0x56, 0x83, 0xdf, 0x96, 0xc5, 0xfd, 0x3e, 0xf8, 0x53, - 0xff, 0x75, 0x51, 0x38, 0x24, 0x01, 0x8a, 0x04, 0x9e, 0x83, 0xed, 0xb4, 0x33, 0xfa, 0x37, 0x64, - 0x3a, 0x95, 0xc1, 0x33, 0x50, 0x06, 0x40, 0x6e, 0x43, 0x3b, 0xea, 0xc3, 0x60, 0x38, 0xd4, 0x79, - 0xc8, 0xe2, 0xb9, 0x8e, 0xa1, 0x19, 0xb0, 0x22, 0xbf, 0xf5, 0x25, 0x3c, 0x2d, 0xe8, 0xaf, 0xe9, - 0x96, 0xbf, 0xe6, 0xb8, 0xf6, 0xc7, 0xe8, 0xd3, 0x59, 0x82, 0x4f, 0x37, 0xca, 0xa7, 0x1b, 0x9e, - 0x81, 0x8e, 0xe8, 0x0c, 0xbc, 0x1f, 0xfd, 0x42, 0x69, 0x58, 0x71, 0x0a, 0xce, 0x40, 0x37, 0xa6, - 0x5a, 0xb0, 0xf5, 0x79, 0x06, 0xd7, 0x67, 0x57, 0x72, 0x7d, 0x6e, 0x34, 0xfc, 0x32, 0x76, 0x16, - 0x5e, 0xc8, 0x24, 0x66, 0x2f, 0x93, 0x60, 0xfd, 0x4b, 0xdc, 0x17, 0x95, 0x0a, 0x8d, 0x84, 0xbd, - 0x0f, 0x08, 0x73, 0xa7, 0x52, 0x28, 0xa3, 0x08, 0x91, 0x43, 0x14, 0x90, 0x21, 0x67, 0xe9, 0x20, - 0xd3, 0xd0, 0x4d, 0xd1, 0x78, 0x19, 0xee, 0xee, 0x94, 0x89, 0x42, 0x40, 0xfd, 0x1c, 0x1a, 0x50, - 0x18, 0x9c, 0xc0, 0x6e, 0xa8, 0xb9, 0x76, 0xce, 0xeb, 0x68, 0x45, 0xc5, 0x20, 0x91, 0xcf, 0x2b, - 0xb0, 0x83, 0xbf, 0x82, 0x33, 0x29, 0x7c, 0x56, 0x59, 0x69, 0x83, 0x83, 0x73, 0x20, 0x51, 0x95, - 0x2a, 0xf2, 0x39, 0xf4, 0x38, 0xf4, 0x54, 0xea, 0x57, 0x69, 0x8d, 0xa2, 0x7c, 0xa3, 0xb7, 0x6b, - 0x14, 0xad, 0x43, 0x7f, 0xe4, 0x93, 0xda, 0xcc, 0xbf, 0xdc, 0x66, 0xb6, 0xc0, 0xb9, 0x28, 0x78, - 0x3d, 0x2d, 0x62, 0x64, 0x1b, 0x4e, 0xfd, 0x96, 0xdd, 0xe0, 0x49, 0x71, 0xea, 0xd2, 0x32, 0xaf, - 0x8b, 0xe0, 0xd8, 0x38, 0x54, 0xbb, 0x36, 0x57, 0x44, 0xbc, 0xf2, 0x59, 0x5b, 0xb8, 0x13, 0xf6, - 0x49, 0xb0, 0x8b, 0x25, 0xd8, 0x14, 0x11, 0xc4, 0x89, 0x0e, 0x38, 0xfe, 0x3d, 0x18, 0x61, 0xb5, - 0x62, 0xea, 0x76, 0x43, 0x24, 0x0b, 0xf2, 0x05, 0x39, 0xac, 0x2a, 0x18, 0x13, 0xe6, 0x66, 0xb8, - 0x1a, 0x1f, 0x40, 0xff, 0x28, 0xec, 0xbc, 0xd3, 0xb4, 0x1a, 0x37, 0x82, 0x5d, 0x97, 0x79, 0x05, - 0x7b, 0xc4, 0xb5, 0x39, 0x8b, 0xcf, 0x9e, 0xe1, 0x01, 0x73, 0x6d, 0x8f, 0xf7, 0xe3, 0xc6, 0x8a, - 0x02, 0xa6, 0x2e, 0x8d, 0xfc, 0x4a, 0x1d, 0x01, 0x46, 0x90, 0xe7, 0x4f, 0x43, 0xaf, 0xa8, 0x0c, - 0x42, 0x46, 0x61, 0x28, 0xf8, 0xd7, 0x78, 0xb5, 0xe1, 0x35, 0xad, 0x8a, 0xbd, 0x62, 0x5b, 0xd5, - 0xa1, 0x6d, 0x64, 0x07, 0x74, 0xce, 0xb4, 0x36, 0x87, 0x34, 0xd2, 0x03, 0x5d, 0x77, 0xad, 0x5a, - 0x6d, 0xa8, 0xe3, 0xf9, 0xd7, 0x60, 0x34, 0x2d, 0x27, 0x2c, 0x40, 0x10, 0x82, 0xa5, 0x88, 0x87, - 0xb6, 0x91, 0x11, 0x18, 0x9c, 0x73, 0x9d, 0xfa, 0x3d, 0xc7, 0xf5, 0xfc, 0x25, 0x67, 0xc6, 0xf2, - 0xfc, 0x21, 0x8d, 0x37, 0x06, 0xbf, 0x96, 0x1c, 0xfa, 0x69, 0xa8, 0x63, 0xea, 0xf3, 0x0e, 0x6c, - 0xa7, 0x8c, 0x92, 0xb7, 0x35, 0xd8, 0xb5, 0x70, 0x2a, 0x66, 0x1f, 0xcd, 0x38, 0xce, 0x3a, 0xb9, - 0xa0, 0xaa, 0x90, 0xa6, 0xb6, 0xcc, 0x26, 0x2e, 0x6e, 0x09, 0x96, 0xcd, 0xb3, 0x3e, 0xfd, 0xf1, - 0xb7, 0xff, 0xe9, 0x97, 0x3b, 0x2e, 0x92, 0xf3, 0xa5, 0xf4, 0x52, 0x8a, 0x6d, 0x97, 0x51, 0x69, - 0xe1, 0x94, 0xa0, 0xb7, 0xf4, 0x40, 0x2c, 0xeb, 0x43, 0xf2, 0x15, 0x0d, 0x06, 0x17, 0x4e, 0x09, - 0x53, 0x97, 0xf2, 0x73, 0x3a, 0x8b, 0xa6, 0x34, 0xc3, 0x7a, 0xe2, 0x4c, 0x41, 0x28, 0xe4, 0xe1, - 0x22, 0xe5, 0xe1, 0x0c, 0x39, 0x25, 0xe1, 0xc1, 0x6b, 0x3a, 0xbe, 0x94, 0xfa, 0xdf, 0xd4, 0x60, - 0x24, 0xa5, 0x7e, 0x1f, 0x39, 0xa9, 0xa2, 0x25, 0xb5, 0x12, 0xe0, 0xc4, 0x54, 0x11, 0x10, 0xa4, - 0xfd, 0x38, 0xa5, 0xfd, 0x30, 0x39, 0x54, 0x52, 0xd7, 0xce, 0x44, 0xaa, 0xfe, 0x58, 0x03, 0x92, - 0x2c, 0x98, 0x47, 0xce, 0x14, 0x2d, 0xb0, 0xc7, 0x08, 0x7e, 0x71, 0x6b, 0x75, 0xf9, 0xf4, 0x0b, - 0x94, 0xe8, 0xd3, 0x64, 0x2a, 0x83, 0xe8, 0x92, 0x97, 0x24, 0xf5, 0x2b, 0x1a, 0x0c, 0x27, 0x50, - 0xab, 0xe5, 0x45, 0x56, 0x4c, 0x6a, 0xe2, 0x4c, 0x41, 0x28, 0x24, 0xff, 0x3c, 0x25, 0xff, 0x14, - 0x39, 0x59, 0x98, 0x7c, 0xf2, 0x65, 0x0d, 0x86, 0xe2, 0x85, 0xff, 0xc8, 0xa9, 0x3c, 0xeb, 0x1e, - 0x53, 0xd0, 0x13, 0xa7, 0x8b, 0x01, 0x21, 0xe9, 0xe7, 0x28, 0xe9, 0x53, 0xe4, 0x44, 0x16, 0xe9, - 0x56, 0x9c, 0xc8, 0x3f, 0xd2, 0x60, 0x30, 0x56, 0x48, 0x8f, 0x28, 0x05, 0x36, 0xbd, 0xf8, 0xe0, - 0xc4, 0xa9, 0x42, 0x30, 0x39, 0x4f, 0x19, 0xf1, 0x77, 0xac, 0xbe, 0x60, 0xe9, 0x01, 0xce, 0xff, - 0x43, 0x3a, 0xf3, 0xf1, 0x42, 0x80, 0xa4, 0x08, 0x31, 0xf9, 0x66, 0x5e, 0x56, 0x6b, 0x30, 0xff, - 0xcc, 0xc7, 0x4b, 0x24, 0x92, 0xef, 0x68, 0xb0, 0x2b, 0xb5, 0xea, 0x1a, 0x39, 0x97, 0x8b, 0x92, - 0x94, 0x22, 0x80, 0x13, 0xe7, 0xb7, 0x00, 0x89, 0x8c, 0xdc, 0xa0, 0x8c, 0x5c, 0x25, 0xd3, 0xb9, - 0x19, 0x09, 0xa3, 0x89, 0x9c, 0x9d, 0x7f, 0xad, 0xc1, 0x58, 0x7a, 0x3d, 0x39, 0x52, 0x9c, 0x40, - 0xb1, 0x3e, 0x17, 0xb6, 0x02, 0x8a, 0xcc, 0x5d, 0xa1, 0xcc, 0x9d, 0x23, 0x2f, 0x6e, 0x89, 0x39, - 0x8f, 0xfc, 0x7c, 0x07, 0x1c, 0xcc, 0x51, 0xee, 0x8f, 0xcc, 0x29, 0x69, 0xcc, 0x5d, 0x13, 0x71, - 0xe2, 0xfa, 0x23, 0xe3, 0x41, 0xc6, 0xef, 0x51, 0xc6, 0x5f, 0x21, 0x77, 0x32, 0x19, 0x67, 0x48, - 0x0d, 0xde, 0x60, 0xf8, 0x88, 0xd6, 0x88, 0x94, 0x2d, 0x2c, 0x3d, 0xa0, 0x3f, 0x1f, 0x92, 0x4f, - 0x77, 0xc0, 0xb3, 0x79, 0x0a, 0x20, 0x92, 0x47, 0x65, 0x45, 0xac, 0xff, 0xfc, 0xa3, 0x23, 0xc2, - 0x49, 0x59, 0xa4, 0x93, 0x72, 0x93, 0xcc, 0x3f, 0xa6, 0x49, 0xf1, 0xc8, 0x67, 0x35, 0xe8, 0x0b, - 0x55, 0xe7, 0x22, 0x93, 0x4a, 0x0d, 0x94, 0x28, 0x28, 0x36, 0x51, 0xca, 0xdd, 0x1f, 0x59, 0x78, - 0x81, 0xb2, 0x70, 0x88, 0x1c, 0x54, 0xd9, 0x36, 0xe8, 0x52, 0x27, 0x5f, 0xd4, 0x00, 0x42, 0x05, - 0xd7, 0x8e, 0xe7, 0x1b, 0x8c, 0xd3, 0x36, 0x99, 0xb7, 0x3b, 0x92, 0x76, 0x96, 0x92, 0x76, 0x92, - 0x94, 0x72, 0x90, 0x16, 0x39, 0x36, 0x7e, 0x4b, 0x83, 0xc1, 0x58, 0x99, 0x33, 0xb5, 0x2a, 0x4a, - 0xaf, 0xce, 0xa6, 0x56, 0x45, 0x92, 0x3a, 0x6a, 0xfa, 0x09, 0x4a, 0xf5, 0xf3, 0xe4, 0x88, 0x8a, - 0xea, 0x95, 0x56, 0xad, 0x66, 0xf0, 0x59, 0x7d, 0x2b, 0x59, 0xca, 0xee, 0x64, 0xfe, 0x91, 0x73, - 0x19, 0x87, 0xe9, 0x45, 0xd2, 0xf2, 0x19, 0xb6, 0x21, 0x5a, 0x23, 0xb3, 0xfc, 0x3b, 0x1a, 0xf4, - 0x47, 0xec, 0x65, 0x72, 0x22, 0x6b, 0x81, 0x13, 0x06, 0xf9, 0xc9, 0x02, 0x10, 0x39, 0x8d, 0x2b, - 0x4a, 0xb3, 0xa8, 0xf5, 0x1e, 0xa1, 0xf8, 0xeb, 0x1a, 0x0c, 0xc5, 0x6b, 0xc2, 0xa8, 0x55, 0xbc, - 0xa4, 0x1a, 0x9a, 0x5a, 0xc5, 0xcb, 0x8a, 0x6a, 0xe9, 0x73, 0x94, 0xf4, 0x97, 0xc9, 0x95, 0x4c, - 0xd2, 0x23, 0xf2, 0x5c, 0x7a, 0x10, 0xf1, 0xc9, 0x3e, 0x24, 0xff, 0xa2, 0xc1, 0xb8, 0xac, 0xa4, - 0x16, 0x51, 0xde, 0xd6, 0x32, 0x6a, 0xaf, 0x4d, 0x5c, 0xda, 0x1a, 0x70, 0xce, 0xe3, 0x50, 0xc6, - 0x1f, 0xf2, 0x26, 0x8c, 0x31, 0xfe, 0x76, 0xff, 0x90, 0xfc, 0x6d, 0x70, 0x1d, 0x49, 0x94, 0xbe, - 0xcb, 0xb8, 0x8e, 0xc8, 0x2a, 0xf6, 0x65, 0x5c, 0x47, 0xa4, 0x15, 0xf6, 0x8a, 0xf0, 0x65, 0x2c, - 0x6f, 0x62, 0x85, 0x07, 0xe5, 0x0a, 0xbe, 0xa5, 0xc1, 0x50, 0xbc, 0xa6, 0xbe, 0x5a, 0x12, 0x25, - 0x45, 0xfe, 0x27, 0x4e, 0x17, 0x03, 0x42, 0x8e, 0xce, 0x50, 0x8e, 0x4a, 0xe4, 0x78, 0x49, 0xf1, - 0x7f, 0x25, 0x78, 0x09, 0xb2, 0xbf, 0xab, 0xc1, 0x9e, 0xb6, 0x74, 0x53, 0xdd, 0x68, 0x5b, 0x8d, - 0x27, 0xb0, 0x93, 0x72, 0xad, 0x88, 0xcf, 0xe9, 0x33, 0x72, 0xec, 0xa9, 0x6f, 0xa0, 0xa4, 0x45, - 0x73, 0xf8, 0xb3, 0x25, 0x2d, 0xb5, 0x48, 0x5a, 0xb6, 0xa4, 0xa5, 0x57, 0x45, 0xcb, 0xbc, 0xc7, - 0x30, 0x95, 0x17, 0x2f, 0x4b, 0x10, 0x39, 0xe4, 0xde, 0xd1, 0x60, 0x5c, 0x56, 0x7d, 0x4d, 0x7d, - 0x38, 0x64, 0x54, 0x7e, 0x53, 0x1f, 0x0e, 0x59, 0x05, 0xdf, 0xf4, 0xeb, 0x94, 0xb5, 0x69, 0xf2, - 0x52, 0xb6, 0x23, 0x48, 0xcd, 0xe0, 0x5f, 0x68, 0x30, 0x92, 0xe2, 0x71, 0x22, 0x2f, 0xe6, 0x23, - 0x2f, 0xa1, 0x83, 0xce, 0x16, 0x86, 0x43, 0x8e, 0x5e, 0xa2, 0x1c, 0x9d, 0x27, 0x67, 0xb3, 0x39, - 0x4a, 0xd7, 0x47, 0xdf, 0xd3, 0x60, 0x2c, 0xbd, 0xd0, 0x8e, 0xfa, 0x7a, 0xa3, 0x2c, 0xf2, 0xa4, - 0xbe, 0xde, 0xa8, 0xeb, 0xfa, 0xe8, 0x0b, 0x94, 0xa5, 0x39, 0x32, 0x9b, 0x93, 0x25, 0xf5, 0x9e, - 0xfa, 0x6f, 0x0d, 0xf6, 0xaa, 0xab, 0xfa, 0x90, 0xe9, 0xfc, 0x0a, 0x47, 0xc6, 0xef, 0xcc, 0xa3, - 0xa0, 0x40, 0xbe, 0x5f, 0xa3, 0x7c, 0x2f, 0x92, 0xdb, 0x5b, 0xe2, 0x5b, 0xae, 0xbf, 0xfe, 0x2d, - 0xb2, 0x19, 0x63, 0x5a, 0xec, 0x62, 0x01, 0xc1, 0x4b, 0xe8, 0xb2, 0x4b, 0x5b, 0x03, 0xde, 0x2a, - 0xbf, 0x39, 0xf5, 0xda, 0x7f, 0x68, 0xb0, 0x2f, 0x2e, 0x62, 0x71, 0x35, 0xf1, 0x84, 0x44, 0xbb, - 0x00, 0xcb, 0x85, 0x14, 0xc7, 0xef, 0x6a, 0x30, 0x9c, 0xa8, 0xe1, 0xa2, 0xf6, 0x37, 0xca, 0x4a, - 0x2d, 0xa9, 0xfd, 0x8d, 0xd2, 0x42, 0x31, 0xfa, 0x49, 0xca, 0xda, 0x0b, 0xe4, 0x68, 0x8e, 0xa3, - 0x15, 0xe9, 0xfb, 0xaa, 0x06, 0x43, 0x89, 0x12, 0x41, 0xa7, 0x8a, 0x0c, 0x9f, 0x4b, 0x81, 0xcb, - 0xca, 0xc6, 0xe8, 0x97, 0x29, 0xc9, 0x67, 0xc9, 0x99, 0xdc, 0x24, 0x47, 0x4e, 0xce, 0xef, 0x6a, - 0xb0, 0x5b, 0x52, 0xe8, 0x45, 0xfd, 0xd4, 0xa1, 0xae, 0x30, 0x33, 0x71, 0x71, 0x4b, 0xb0, 0xc8, - 0xd3, 0x2c, 0xe5, 0xe9, 0x0a, 0xb9, 0x94, 0x97, 0x27, 0x7e, 0x4e, 0x44, 0x58, 0xfb, 0x53, 0x0d, - 0x46, 0xd3, 0x12, 0xd1, 0xc9, 0xd9, 0x7c, 0x96, 0x5e, 0xa2, 0x1c, 0xcd, 0xc4, 0xb9, 0xe2, 0x80, - 0x39, 0x6f, 0xe0, 0xe2, 0xef, 0xf8, 0xa6, 0xf8, 0x9e, 0x06, 0xbb, 0x52, 0x13, 0xd0, 0x49, 0x4e, - 0x62, 0x92, 0x59, 0xf4, 0x6a, 0x97, 0xa4, 0x32, 0x69, 0x5e, 0xbf, 0x43, 0xf9, 0xb8, 0x41, 0xae, - 0xe7, 0x77, 0xc8, 0x1b, 0xb4, 0xda, 0x05, 0x66, 0xcb, 0x27, 0xf8, 0xfb, 0x67, 0x0d, 0x76, 0x4b, - 0x92, 0xd5, 0xd5, 0xf2, 0xa7, 0xce, 0xa7, 0x57, 0xcb, 0x5f, 0x46, 0x76, 0xbc, 0x5e, 0xa6, 0x5c, - 0x2e, 0x90, 0x9b, 0x59, 0x5c, 0x56, 0x02, 0x44, 0x3c, 0xf1, 0x98, 0xe6, 0xb5, 0x79, 0x88, 0x2b, - 0xc1, 0xe8, 0x17, 0x34, 0x18, 0xe1, 0xbe, 0xb0, 0x50, 0xde, 0xa9, 0xda, 0x2f, 0x95, 0xcc, 0x5d, - 0x55, 0xfb, 0xa5, 0x52, 0x12, 0x5a, 0x33, 0xfd, 0x52, 0x75, 0x0a, 0x63, 0xb0, 0xe2, 0x24, 0xbf, - 0xa4, 0x41, 0xaf, 0xc8, 0x52, 0x25, 0xc7, 0x54, 0x63, 0xc5, 0xb3, 0x5c, 0x27, 0x8e, 0xe7, 0xec, - 0x8d, 0x74, 0x1d, 0xa1, 0x74, 0xe9, 0x64, 0xbf, 0x84, 0xae, 0xa6, 0x20, 0xe3, 0x6b, 0x1a, 0x0c, - 0x27, 0xca, 0x33, 0xa9, 0x15, 0x83, 0xac, 0x16, 0x94, 0x5a, 0x31, 0x48, 0x6b, 0x40, 0x65, 0x7a, - 0xab, 0x05, 0xb1, 0x86, 0xdd, 0x48, 0x73, 0xf1, 0xfc, 0xa5, 0x06, 0x23, 0x29, 0x35, 0x88, 0x48, - 0xce, 0x77, 0xbd, 0xc4, 0x5c, 0x9f, 0x2d, 0x0c, 0x87, 0x8c, 0x5c, 0xa5, 0x8c, 0x5c, 0x26, 0x17, - 0x65, 0xf7, 0xa2, 0xb6, 0xd4, 0x0a, 0x9e, 0x12, 0xb2, 0xfc, 0x8f, 0x1a, 0x4c, 0xc8, 0xab, 0x1c, - 0x91, 0xcb, 0xc5, 0x88, 0x8b, 0x2f, 0xd1, 0x95, 0xad, 0x82, 0xe7, 0xd4, 0x1e, 0x52, 0xbe, 0x22, - 0x2b, 0xf6, 0x89, 0x0e, 0x38, 0x98, 0xa3, 0x38, 0x90, 0xfa, 0x7d, 0x21, 0x7f, 0xdd, 0x2c, 0xf5, - 0xfb, 0x42, 0x81, 0x2a, 0x45, 0xfa, 0x6d, 0xca, 0xfe, 0x3c, 0x99, 0x93, 0x1d, 0x5e, 0x22, 0x28, - 0x2e, 0xdf, 0x44, 0x7c, 0x53, 0x83, 0x91, 0x94, 0x5a, 0x3f, 0x6a, 0xd1, 0x95, 0x97, 0x27, 0x52, - 0x8b, 0xae, 0xa2, 0x2c, 0x91, 0xfe, 0x32, 0x65, 0xec, 0x02, 0x39, 0x27, 0x5b, 0x57, 0x51, 0x53, - 0x31, 0x54, 0x56, 0x32, 0xc2, 0xca, 0xb7, 0x35, 0xd8, 0x2d, 0x29, 0x02, 0xa4, 0x56, 0x36, 0xea, - 0x1a, 0x46, 0x6a, 0x65, 0x93, 0x51, 0xbb, 0x28, 0xd3, 0x80, 0xb3, 0x28, 0xbc, 0x94, 0xa7, 0xbf, - 0xd1, 0x60, 0x2c, 0xbd, 0x46, 0x90, 0xfa, 0x7e, 0xa0, 0x2c, 0x70, 0xa4, 0xbe, 0x1f, 0xa8, 0x0b, - 0x1b, 0x65, 0x1e, 0x31, 0x89, 0x75, 0xc2, 0xaa, 0x9b, 0x89, 0xa5, 0x92, 0x54, 0x33, 0x52, 0x2f, - 0x95, 0xba, 0x6a, 0x9c, 0x7a, 0xa9, 0x32, 0xca, 0x27, 0x65, 0x2e, 0x15, 0x0b, 0x08, 0xe6, 0xa9, - 0x25, 0x69, 0xbe, 0xca, 0xe1, 0x64, 0xa6, 0x7c, 0xb6, 0xdf, 0x2e, 0xa5, 0xa0, 0x83, 0x5a, 0x8f, - 0x49, 0x4b, 0x32, 0xe8, 0x53, 0x94, 0x83, 0x63, 0xe4, 0x79, 0x09, 0x07, 0x29, 0x89, 0xf1, 0xe4, - 0xcf, 0x34, 0x18, 0x5f, 0x6c, 0xa7, 0xda, 0x3f, 0x41, 0xea, 0xb3, 0xa2, 0x59, 0xc2, 0x05, 0x07, - 0xe2, 0x5c, 0x7c, 0x95, 0xa7, 0x6d, 0x45, 0x2b, 0x31, 0xa8, 0x8f, 0x31, 0x79, 0x55, 0x09, 0xf5, - 0x31, 0xa6, 0xa8, 0x34, 0xa1, 0x9f, 0xa6, 0x4c, 0x4c, 0x92, 0x63, 0x79, 0x96, 0x80, 0x97, 0x49, - 0x20, 0x6f, 0x6b, 0x30, 0x96, 0x9e, 0x1c, 0xaf, 0xde, 0xe6, 0xca, 0x8c, 0x7c, 0xf5, 0x36, 0x57, - 0xe7, 0xe2, 0xeb, 0x33, 0x94, 0x8f, 0x4b, 0xe4, 0x82, 0x84, 0x8f, 0x48, 0x9a, 0x7a, 0x38, 0x2d, - 0x3f, 0x14, 0x2a, 0x12, 0x2c, 0x4a, 0x4a, 0x6a, 0xba, 0x7a, 0x51, 0xe4, 0x29, 0xf4, 0xea, 0x45, - 0x51, 0xa4, 0xd5, 0x67, 0x2e, 0x4a, 0x6a, 0xce, 0x3d, 0xf9, 0x13, 0x0d, 0x86, 0x13, 0x19, 0xd4, - 0xea, 0x2d, 0x21, 0xcb, 0xab, 0x57, 0x6f, 0x09, 0x69, 0x9a, 0x76, 0xa6, 0xeb, 0x34, 0x99, 0xc3, - 0x5d, 0x7a, 0x10, 0xca, 0xdf, 0x7f, 0x48, 0xfe, 0x4a, 0x83, 0xdd, 0x92, 0x54, 0x62, 0xf5, 0x41, - 0xab, 0xce, 0xe0, 0x56, 0x1f, 0xb4, 0x19, 0xb9, 0xcb, 0x99, 0x1b, 0x9d, 0xc7, 0x36, 0xa7, 0x64, - 0x36, 0x93, 0x6f, 0x69, 0xb0, 0x47, 0x9a, 0x24, 0x4c, 0x2e, 0xe5, 0x94, 0x90, 0xd4, 0xfc, 0xe5, - 0x89, 0xcb, 0x5b, 0x84, 0x46, 0xb6, 0x5e, 0xa4, 0x6c, 0x9d, 0x20, 0x93, 0x79, 0xa4, 0x8c, 0x16, - 0xba, 0x08, 0x6e, 0x65, 0x1e, 0xf9, 0x9c, 0x06, 0x03, 0xd1, 0x94, 0x63, 0xe9, 0xd5, 0x2c, 0x35, - 0x67, 0x59, 0x7a, 0x35, 0x4b, 0xcf, 0x63, 0xd6, 0x4b, 0x94, 0xce, 0xa3, 0xe4, 0xb0, 0xec, 0xca, - 0x68, 0xfb, 0x8e, 0xc1, 0x92, 0x83, 0x6d, 0x4a, 0xcd, 0xd7, 0x35, 0xac, 0x70, 0x94, 0xc8, 0x03, - 0x56, 0xef, 0x06, 0x59, 0xf2, 0xb1, 0x7a, 0x37, 0x48, 0x93, 0x8d, 0x33, 0xaf, 0x69, 0x8c, 0x66, - 0x61, 0x66, 0x94, 0x1e, 0x44, 0x32, 0x9c, 0xa9, 0xad, 0x3b, 0x96, 0x9e, 0x48, 0xac, 0x3e, 0x65, - 0x95, 0xf9, 0xcb, 0xea, 0x53, 0x56, 0x9d, 0xb7, 0x9c, 0xe9, 0x38, 0x5a, 0x13, 0xe0, 0x46, 0x24, - 0xbf, 0x99, 0x9a, 0xed, 0x29, 0x35, 0x64, 0xd4, 0x47, 0xab, 0xbc, 0x62, 0x8d, 0xfa, 0x68, 0x55, - 0x14, 0xab, 0xc9, 0x34, 0xdb, 0xc3, 0x95, 0x6c, 0x0c, 0x67, 0x05, 0x35, 0x9f, 0x17, 0xd2, 0x12, - 0x7f, 0xa7, 0xc1, 0x1e, 0x69, 0x7d, 0x1a, 0xf5, 0x8e, 0xce, 0xaa, 0x7f, 0xa3, 0xde, 0xd1, 0x99, - 0x45, 0x71, 0xf4, 0x4b, 0x94, 0xb9, 0x17, 0xc9, 0x69, 0x99, 0x45, 0x98, 0xc2, 0x99, 0x21, 0x2a, - 0x6f, 0x7d, 0x45, 0x83, 0xa1, 0x78, 0xb6, 0xb3, 0xda, 0x77, 0x2c, 0xc9, 0xdc, 0x9e, 0x38, 0x5d, - 0x0c, 0x28, 0x27, 0xf5, 0xed, 0xff, 0x37, 0x19, 0x21, 0x23, 0x26, 0xfa, 0x97, 0x34, 0x18, 0x4d, - 0xc9, 0x1b, 0xf6, 0xd4, 0xd1, 0x2b, 0x69, 0xd9, 0xcd, 0xea, 0xe8, 0x95, 0xd4, 0xd4, 0xe6, 0xcc, - 0x87, 0xf7, 0x65, 0x0a, 0xc5, 0x93, 0xd4, 0x85, 0xbb, 0xfe, 0x53, 0x1d, 0x70, 0x20, 0x33, 0x65, - 0x95, 0xcc, 0x16, 0x79, 0x1e, 0x91, 0xa5, 0x41, 0x4f, 0x5c, 0x7b, 0x44, 0x2c, 0xc8, 0xe9, 0xfb, - 0x29, 0xa7, 0x65, 0xb2, 0x98, 0xfb, 0x49, 0xad, 0xd2, 0xc6, 0xa5, 0x7c, 0x71, 0xf9, 0x91, 0x06, - 0x7a, 0x76, 0xb2, 0x20, 0xb9, 0x96, 0x2d, 0x5c, 0x39, 0x72, 0x17, 0x27, 0xe6, 0x1e, 0x15, 0x4d, - 0x4e, 0xe3, 0xc0, 0xa4, 0x48, 0xd8, 0x8b, 0x93, 0x11, 0xa8, 0xd4, 0x76, 0xaa, 0x22, 0xf9, 0x43, - 0x0d, 0x86, 0xe2, 0xb9, 0x86, 0x19, 0xb1, 0xc9, 0xe9, 0x49, 0x8d, 0x19, 0xb1, 0xc9, 0x92, 0x74, - 0xc6, 0xcc, 0x38, 0x31, 0x93, 0x79, 0x66, 0xbc, 0x00, 0x92, 0xa5, 0xd5, 0x95, 0x1e, 0x60, 0xaa, - 0x20, 0x75, 0x22, 0x92, 0x64, 0xfa, 0x9b, 0x3a, 0xb2, 0x42, 0x9a, 0xad, 0xa8, 0x8e, 0xac, 0x90, - 0xa7, 0x23, 0x66, 0xc6, 0x5e, 0x61, 0x32, 0x60, 0x18, 0x96, 0xf3, 0xe0, 0x3e, 0x0c, 0x71, 0xf3, - 0x75, 0x0d, 0x46, 0x52, 0xb2, 0x0b, 0x49, 0x41, 0xba, 0xf2, 0x29, 0x28, 0x45, 0x1a, 0x63, 0xe6, - 0xad, 0x3e, 0x85, 0x21, 0xaf, 0xcd, 0x11, 0x8d, 0xde, 0x8b, 0xe6, 0xd7, 0x9d, 0xc8, 0x16, 0xf4, - 0x68, 0x72, 0xa2, 0xfa, 0xfc, 0x4b, 0x4d, 0x4a, 0xcc, 0x8c, 0xde, 0xc3, 0x6d, 0x8f, 0xb6, 0x71, - 0xe4, 0xe0, 0xfe, 0xb5, 0xc0, 0x9c, 0x8c, 0x64, 0x1b, 0x92, 0xfc, 0x04, 0xe4, 0xcb, 0xa1, 0x49, - 0x4f, 0x66, 0xd4, 0x27, 0x29, 0xd1, 0x47, 0xc8, 0x73, 0xb9, 0x88, 0xf6, 0xc8, 0x1f, 0xd0, 0xc7, - 0xd5, 0x68, 0xce, 0x5c, 0xd6, 0xe3, 0x6a, 0x6a, 0xde, 0x61, 0xd6, 0xe3, 0x6a, 0x7a, 0xda, 0x61, - 0xe6, 0x24, 0x27, 0x73, 0x02, 0x45, 0x34, 0xf6, 0x5b, 0xf4, 0x35, 0x3b, 0x96, 0xee, 0x47, 0x0a, - 0x91, 0x91, 0xf7, 0x35, 0x5b, 0x92, 0xb4, 0x98, 0xe9, 0xec, 0x49, 0xc9, 0x68, 0x24, 0xbf, 0xa2, - 0xc5, 0x12, 0x12, 0x4b, 0x6a, 0x03, 0x29, 0x91, 0x49, 0x38, 0x71, 0x22, 0x3f, 0x00, 0xd2, 0x79, - 0x8c, 0xd2, 0xf9, 0x1c, 0x79, 0x56, 0x6a, 0x44, 0x59, 0x0d, 0xc3, 0x46, 0xa8, 0x99, 0xf5, 0x6f, - 0xfe, 0x60, 0xaf, 0xf6, 0xad, 0x1f, 0xec, 0xd5, 0xbe, 0xff, 0x83, 0xbd, 0xda, 0x2f, 0xbc, 0xbb, - 0x77, 0xdb, 0xb7, 0xde, 0xdd, 0xbb, 0xed, 0xbb, 0xef, 0xee, 0xdd, 0xf6, 0xc1, 0x57, 0x56, 0x6d, - 0x7f, 0xad, 0xb5, 0x3c, 0x59, 0x71, 0xea, 0xa5, 0x1b, 0x1c, 0xd3, 0x82, 0xb9, 0xec, 0xb5, 0xf1, - 0x1e, 0xaf, 0x38, 0xae, 0x15, 0xfe, 0xb9, 0x66, 0xda, 0x0d, 0x7c, 0x02, 0xf3, 0xda, 0x83, 0xfa, - 0x9b, 0x4d, 0xcb, 0x2b, 0x6d, 0x4c, 0x2d, 0x77, 0x37, 0x5d, 0xc7, 0x77, 0x4e, 0xfd, 0x4f, 0x00, - 0x00, 0x00, 0xff, 0xff, 0xac, 0x84, 0x83, 0x11, 0x9e, 0x89, 0x00, 0x00, + // 7199 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x7d, 0x6b, 0x6c, 0x1d, 0xc7, + 0x75, 0xb0, 0x96, 0xa4, 0x28, 0xf2, 0x50, 0x7c, 0x0d, 0x29, 0x8a, 0xa2, 0x6d, 0x51, 0x5a, 0x59, + 0xb6, 0xfc, 0x10, 0xaf, 0x44, 0x49, 0x96, 0x64, 0xc9, 0x0f, 0x52, 0x14, 0xf5, 0x08, 0x25, 0xd1, + 0x57, 0xf4, 0x23, 0xfe, 0x1c, 0x6f, 0x96, 0xf7, 0x2e, 0xc9, 0xb5, 0xee, 0xdd, 0xbd, 0xda, 0xdd, + 0x4b, 0x9b, 0x11, 0xfc, 0xe3, 0xcb, 0xf7, 0x7d, 0x46, 0x90, 0x00, 0x5f, 0xd3, 0xf6, 0x47, 0x7e, + 0x04, 0x48, 0x81, 0x26, 0x48, 0xd1, 0x07, 0x5a, 0x20, 0x75, 0x93, 0xa2, 0x49, 0xd1, 0xf4, 0x91, + 0x34, 0x40, 0x81, 0x36, 0x81, 0xdb, 0x26, 0x28, 0x10, 0x37, 0x4d, 0x8a, 0x16, 0x0d, 0xd0, 0xa4, + 0xff, 0x0b, 0xb4, 0xc5, 0xce, 0x9c, 0x99, 0xbb, 0xaf, 0x99, 0xdd, 0xa5, 0x64, 0x28, 0x69, 0x7f, + 0xf1, 0xee, 0xee, 0x9c, 0x33, 0xe7, 0xcc, 0x39, 0x73, 0xe6, 0xcc, 0xcc, 0x39, 0x87, 0x70, 0xd0, + 0x76, 0xde, 0xb0, 0x6a, 0x81, 0xbd, 0x69, 0x55, 0xac, 0xb7, 0x6a, 0x1b, 0xa6, 0xb3, 0x6e, 0x55, + 0x36, 0x67, 0x2b, 0xb7, 0xdb, 0x96, 0xb7, 0x35, 0xd3, 0xf2, 0xdc, 0xc0, 0x25, 0x7b, 0x44, 0x93, + 0x19, 0xde, 0x64, 0x66, 0x73, 0x76, 0x6a, 0x7c, 0xdd, 0x5d, 0x77, 0x69, 0x8b, 0x4a, 0xf8, 0x8b, + 0x35, 0x9e, 0x7a, 0x70, 0xdd, 0x75, 0xd7, 0x1b, 0x56, 0xc5, 0x6c, 0xd9, 0x15, 0xd3, 0x71, 0xdc, + 0xc0, 0x0c, 0x6c, 0xd7, 0xf1, 0xf1, 0xeb, 0xc3, 0xd9, 0xbd, 0x09, 0xb4, 0xac, 0xd5, 0xe1, 0xec, + 0x56, 0xae, 0x57, 0xb7, 0xbc, 0x55, 0xd7, 0xbd, 0x85, 0xcd, 0xf4, 0xec, 0x66, 0x4d, 0xd3, 0xbb, + 0x65, 0x05, 0xd8, 0xe6, 0x50, 0x76, 0x9b, 0x75, 0xcb, 0xb1, 0x7c, 0xdb, 0x4f, 0xf7, 0xe7, 0x7a, + 0x66, 0xad, 0x61, 0x55, 0x36, 0x8f, 0xaf, 0x5a, 0x81, 0x79, 0x1c, 0x1f, 0x59, 0x33, 0xfd, 0x06, + 0xc0, 0xcd, 0xf6, 0xaa, 0x59, 0xab, 0xb9, 0x6d, 0x27, 0x20, 0x13, 0xd0, 0x1b, 0x78, 0x66, 0xdd, + 0xf2, 0x26, 0xb5, 0x03, 0xda, 0x91, 0xfe, 0x2a, 0x3e, 0x91, 0xc7, 0x60, 0xc4, 0x17, 0xad, 0x0c, + 0xc7, 0x75, 0x6a, 0xd6, 0x64, 0xd7, 0x01, 0xed, 0xc8, 0x60, 0x75, 0xb8, 0xf3, 0xfe, 0x7a, 0xf8, + 0x5a, 0xff, 0x28, 0x3c, 0xf8, 0x42, 0x38, 0xce, 0x1d, 0xac, 0x37, 0x42, 0x16, 0xfd, 0xaa, 0x75, + 0xbb, 0x6d, 0xf9, 0x01, 0x39, 0x04, 0x83, 0x11, 0x54, 0x76, 0x1d, 0x7b, 0xda, 0xdd, 0x79, 0x79, + 0xa5, 0x4e, 0x1e, 0x80, 0x7e, 0xc6, 0x71, 0xd8, 0xa0, 0x8b, 0x36, 0xe8, 0x63, 0x2f, 0xae, 0xd4, + 0xf5, 0xaf, 0x68, 0xf0, 0x90, 0xa4, 0x0b, 0xbf, 0xe5, 0x3a, 0xbe, 0x45, 0xae, 0x00, 0xac, 0xb6, + 0xb7, 0x0c, 0x3a, 0xb6, 0xfe, 0xa4, 0x76, 0xa0, 0xfb, 0xc8, 0xc0, 0xec, 0xe3, 0x33, 0x99, 0x12, + 0x9f, 0x49, 0x20, 0x59, 0x30, 0x03, 0xb3, 0xda, 0xbf, 0xda, 0xde, 0x62, 0x28, 0xc9, 0x87, 0x60, + 0xc0, 0xb7, 0x1a, 0x0d, 0x8e, 0xab, 0xab, 0x34, 0x2e, 0x08, 0xc1, 0x19, 0x32, 0xfd, 0x37, 0x34, + 0x38, 0x9c, 0x68, 0x13, 0x8a, 0xfe, 0x9a, 0x15, 0x98, 0x75, 0x33, 0x30, 0x5f, 0xb6, 0x83, 0x8d, + 0x6b, 0x94, 0x4b, 0x72, 0x1d, 0xfa, 0x9a, 0xf8, 0x96, 0x0e, 0xd0, 0xc0, 0xec, 0x6c, 0xb1, 0x3e, + 0xa3, 0xf8, 0xaa, 0x02, 0x87, 0x72, 0x40, 0xc9, 0x38, 0xec, 0xb4, 0xfd, 0xf9, 0xf6, 0xd6, 0x64, + 0xf7, 0x01, 0xed, 0x48, 0x5f, 0x95, 0x3d, 0xe8, 0x0f, 0xc2, 0x14, 0x1d, 0xe5, 0x8b, 0xd8, 0xd9, + 0xb2, 0xe9, 0x99, 0x4d, 0x2e, 0x46, 0xfd, 0x55, 0x78, 0x20, 0xf3, 0x2b, 0x4a, 0xe0, 0x1c, 0xf4, + 0xb6, 0xe8, 0x1b, 0xa4, 0xfe, 0x21, 0x09, 0xf5, 0x0c, 0x6c, 0xbe, 0xe7, 0x5b, 0xef, 0x4f, 0xef, + 0xa8, 0x22, 0x88, 0xfe, 0xff, 0x35, 0xd8, 0x9f, 0x10, 0xf0, 0x82, 0xd5, 0x72, 0x7d, 0x3b, 0x28, + 0xa7, 0x45, 0x97, 0x00, 0x3a, 0xcf, 0x94, 0xeb, 0x81, 0xd9, 0x83, 0xb9, 0xc3, 0x48, 0x89, 0xd1, + 0xaa, 0x11, 0x50, 0xfd, 0x07, 0x1a, 0x4c, 0x4b, 0x09, 0x42, 0x8e, 0x3f, 0x0a, 0x7d, 0x75, 0x7c, + 0x87, 0x1a, 0xb7, 0x20, 0xe9, 0x2a, 0x07, 0xd3, 0x0c, 0x7f, 0x71, 0xd1, 0x09, 0xbc, 0xad, 0xaa, + 0xc0, 0x3a, 0xf5, 0xbf, 0x60, 0x30, 0xf6, 0x89, 0x8c, 0x40, 0xf7, 0x2d, 0x6b, 0x0b, 0x59, 0x0f, + 0x7f, 0x92, 0x93, 0xb0, 0x73, 0xd3, 0x6c, 0xb4, 0x2d, 0x64, 0x76, 0xbf, 0x84, 0x02, 0x44, 0x53, + 0x65, 0x8d, 0x9f, 0xee, 0x3a, 0xa3, 0xe9, 0xfb, 0x71, 0xda, 0x72, 0x79, 0xce, 0x9b, 0x0d, 0xd3, + 0xa9, 0x59, 0x42, 0xde, 0x26, 0xce, 0xb9, 0xf4, 0x77, 0xe4, 0xff, 0x79, 0xe8, 0x5b, 0xc5, 0x77, + 0xc8, 0xbf, 0xac, 0x77, 0x04, 0x45, 0xa1, 0x0b, 0x28, 0xfd, 0x34, 0xaa, 0xd4, 0xdc, 0xfa, 0xba, + 0x67, 0xad, 0x9b, 0x81, 0xf5, 0x92, 0xdb, 0x68, 0x37, 0x2d, 0x2e, 0xf2, 0x49, 0xd8, 0xc5, 0x45, + 0xc9, 0x38, 0xe6, 0x8f, 0x7a, 0x0b, 0x69, 0x4f, 0x01, 0x22, 0x69, 0xcb, 0x30, 0x6a, 0xf2, 0x4f, + 0xc6, 0x26, 0xfd, 0xc6, 0x69, 0x3c, 0x24, 0xa1, 0x91, 0x4d, 0x43, 0xc4, 0x33, 0x62, 0xc6, 0x11, + 0xfb, 0xfa, 0x87, 0xb3, 0x7b, 0x14, 0xea, 0x39, 0x05, 0x7d, 0x48, 0x1c, 0xeb, 0xa8, 0xbf, 0x2a, + 0x9e, 0xc9, 0x43, 0x00, 0x62, 0x2a, 0x32, 0x83, 0xd2, 0x5f, 0xed, 0xe7, 0x73, 0xd1, 0xd7, 0x7f, + 0xca, 0xad, 0x5b, 0x1a, 0x37, 0xb2, 0xe3, 0xc2, 0xbe, 0x0e, 0x3b, 0x7c, 0x0a, 0xc4, 0xd9, 0x3a, + 0x21, 0x61, 0x4b, 0xe0, 0x9c, 0x63, 0x60, 0x7c, 0xa0, 0x6a, 0xae, 0x57, 0xaf, 0xee, 0x35, 0x33, + 0xbf, 0xfa, 0xe4, 0x23, 0x30, 0xd9, 0xe9, 0x10, 0x69, 0xe7, 0xfd, 0x75, 0x15, 0x1f, 0xc6, 0x09, + 0x81, 0x24, 0xfa, 0xda, 0xd7, 0x9f, 0x87, 0x83, 0x71, 0x86, 0x63, 0x50, 0x38, 0xa2, 0x31, 0x03, + 0xa6, 0x25, 0x56, 0x84, 0x75, 0xd0, 0x55, 0x18, 0x70, 0xdc, 0xe6, 0xa0, 0x97, 0x51, 0x8d, 0x36, + 0x49, 0x46, 0x74, 0x74, 0x50, 0xb8, 0x65, 0x62, 0x80, 0xfa, 0x25, 0xa8, 0xb0, 0x8e, 0xda, 0xb5, + 0xd0, 0x03, 0xe0, 0x93, 0x61, 0xc5, 0x33, 0x1d, 0x7f, 0xcd, 0xf2, 0x16, 0x2c, 0xc7, 0x6d, 0x2e, + 0x58, 0x35, 0xbb, 0x69, 0x36, 0x38, 0xe1, 0xe3, 0xb0, 0xb3, 0x1e, 0xbe, 0x46, 0xa2, 0xd9, 0x83, + 0xbe, 0x04, 0xc7, 0x8a, 0x23, 0x42, 0xfa, 0x27, 0x61, 0x57, 0x9d, 0xbd, 0xa2, 0xb8, 0x7a, 0xaa, + 0xfc, 0x51, 0xbf, 0x5a, 0x1c, 0x9b, 0x50, 0xd1, 0x09, 0xe8, 0xa5, 0xa4, 0x70, 0x05, 0xc5, 0x27, + 0xfd, 0x1d, 0x0d, 0x8e, 0x97, 0x40, 0x86, 0xb4, 0xbd, 0x00, 0x43, 0x14, 0xde, 0x40, 0x92, 0xb8, + 0x22, 0x3e, 0x2c, 0xb5, 0x40, 0x11, 0x2c, 0x38, 0xc8, 0x83, 0xf5, 0xe8, 0x4b, 0xfd, 0x82, 0x4a, + 0xa8, 0x82, 0x8d, 0xf8, 0x6c, 0xd2, 0x92, 0xb3, 0xa9, 0x0e, 0x87, 0x94, 0x48, 0x90, 0xfc, 0x67, + 0x60, 0xd7, 0x36, 0xec, 0x02, 0x87, 0xd1, 0x5f, 0x4d, 0x39, 0x24, 0xdc, 0xc2, 0x96, 0x59, 0xae, + 0x84, 0xa6, 0x74, 0x45, 0x35, 0xe5, 0x35, 0xd9, 0x5a, 0x28, 0x88, 0x7f, 0x3a, 0xb6, 0xf2, 0x14, + 0xb1, 0xfb, 0xa2, 0xbd, 0xbe, 0x0c, 0x7b, 0x19, 0xf6, 0x96, 0x1b, 0x30, 0xde, 0xa2, 0x0a, 0xe2, + 0x07, 0x66, 0xd0, 0xf6, 0xb9, 0x2f, 0xc8, 0x9e, 0xf2, 0xec, 0xd7, 0xcb, 0x30, 0x99, 0xc6, 0x28, + 0xbc, 0x82, 0x5d, 0xac, 0x21, 0x1f, 0x66, 0xe9, 0x6a, 0x2c, 0x80, 0xab, 0x1c, 0x42, 0x3f, 0x05, + 0x13, 0x09, 0xc4, 0x85, 0x6c, 0xc3, 0x4a, 0x8a, 0x43, 0x41, 0xce, 0x59, 0xe8, 0x65, 0xcd, 0x70, + 0xd8, 0x0a, 0x50, 0x83, 0x00, 0xfa, 0x77, 0xba, 0x60, 0x9f, 0x40, 0x2b, 0x1c, 0xaf, 0x22, 0x04, + 0x85, 0x62, 0x6e, 0xd8, 0x4d, 0x9b, 0x39, 0x24, 0x3d, 0x55, 0xf6, 0x40, 0x9e, 0x03, 0xa0, 0x2e, + 0xa6, 0xe1, 0xdb, 0x75, 0x8b, 0x3a, 0x62, 0x43, 0xb3, 0x07, 0x24, 0xf4, 0xd0, 0xfe, 0x6e, 0xda, + 0x75, 0xab, 0xda, 0xef, 0xf2, 0x9f, 0xc4, 0x80, 0x7d, 0x14, 0x93, 0x51, 0x6b, 0x37, 0xdb, 0x0d, + 0x33, 0x04, 0x32, 0x1c, 0x37, 0x9c, 0xc1, 0x66, 0x63, 0xb2, 0x27, 0xa4, 0x61, 0xfe, 0x50, 0xe8, + 0xd8, 0xfc, 0xdd, 0xfb, 0xd3, 0x0f, 0xd4, 0x5c, 0xbf, 0xe9, 0xfa, 0x7e, 0xfd, 0xd6, 0x8c, 0xed, + 0x56, 0x9a, 0x66, 0xb0, 0x31, 0xb3, 0x64, 0xad, 0x9b, 0xb5, 0xad, 0x05, 0xab, 0x56, 0xdd, 0x4b, + 0xb1, 0x5c, 0x10, 0x48, 0xae, 0x23, 0x8e, 0xcc, 0x0e, 0x6e, 0xb7, 0x4d, 0x27, 0xb0, 0x83, 0xad, + 0xc9, 0x9d, 0xdb, 0xef, 0xe0, 0x05, 0xc4, 0xa1, 0x7f, 0x5d, 0x43, 0x8f, 0x33, 0x31, 0xa6, 0x28, + 0xad, 0x45, 0x18, 0x59, 0x6d, 0x6f, 0xf9, 0x46, 0xcb, 0xb3, 0x6b, 0x96, 0xd1, 0xb0, 0x36, 0xad, + 0x06, 0x6a, 0xd1, 0x83, 0x92, 0x71, 0x5a, 0x0a, 0xdb, 0x54, 0x87, 0x42, 0xa8, 0xe5, 0x10, 0x88, + 0x3e, 0x93, 0xcb, 0x30, 0x1a, 0xba, 0xe4, 0x71, 0x44, 0x5d, 0x05, 0x10, 0x0d, 0x53, 0xb0, 0x08, + 0xa6, 0x11, 0xe8, 0xf6, 0xad, 0xdb, 0x54, 0x58, 0x3d, 0xd5, 0xf0, 0xa7, 0xfe, 0x79, 0x0d, 0x86, + 0x16, 0xdb, 0x8d, 0x46, 0x47, 0x63, 0xee, 0x42, 0xc9, 0xc8, 0x4b, 0x30, 0xda, 0xb4, 0xeb, 0x48, + 0xa7, 0xe9, 0xd4, 0x8d, 0xc0, 0x5d, 0x45, 0xcf, 0xee, 0xb0, 0xcc, 0x3e, 0xd9, 0x75, 0x4a, 0xe0, + 0x9c, 0x53, 0x5f, 0xb9, 0x31, 0x8f, 0xae, 0xec, 0x50, 0x33, 0xf2, 0xd6, 0x5d, 0xd5, 0x3f, 0xa1, + 0xa1, 0xa7, 0x15, 0x27, 0xf5, 0x2e, 0x67, 0x3e, 0x99, 0x85, 0x89, 0x37, 0xed, 0x60, 0xc3, 0x48, + 0xd3, 0xcc, 0xf6, 0x15, 0x24, 0xfc, 0x7a, 0x2d, 0x4e, 0x8a, 0x81, 0x8e, 0x54, 0x8a, 0x12, 0x14, + 0xfa, 0x73, 0x49, 0x8b, 0x21, 0x63, 0x3c, 0x8e, 0xa0, 0x63, 0x35, 0x9a, 0xa8, 0x53, 0x89, 0xef, + 0x45, 0x26, 0xaa, 0x9c, 0x9f, 0x2e, 0x29, 0x3f, 0xaf, 0x65, 0x8e, 0x6c, 0x64, 0x9d, 0x89, 0x2b, + 0x43, 0x41, 0x6e, 0xb8, 0xd5, 0xf9, 0x7f, 0x62, 0x63, 0xc4, 0x67, 0x88, 0x3f, 0xbf, 0x75, 0xd9, + 0xf4, 0x37, 0x3a, 0xeb, 0xa1, 0x92, 0xa3, 0xd4, 0x32, 0xd4, 0x95, 0xb1, 0x0c, 0x1d, 0x84, 0xdd, + 0xcc, 0x12, 0x6d, 0x50, 0xc4, 0x93, 0xdd, 0x54, 0xce, 0x03, 0xf4, 0x1d, 0xeb, 0x4b, 0x5f, 0xe7, + 0xdb, 0xa1, 0x0c, 0x32, 0x90, 0xd3, 0x05, 0xe8, 0x8d, 0x6d, 0xbf, 0x9f, 0x94, 0x70, 0xba, 0xe2, + 0xd9, 0xcd, 0xa6, 0x55, 0x0f, 0x31, 0x2d, 0x85, 0x76, 0x81, 0xa2, 0xab, 0x22, 0xac, 0x38, 0x4c, + 0x58, 0xa1, 0xc7, 0x10, 0x9d, 0xee, 0xee, 0x19, 0xb7, 0x7a, 0x03, 0x1e, 0x66, 0x0e, 0x02, 0x7b, + 0x33, 0x57, 0xaf, 0x7b, 0x96, 0xef, 0x97, 0xec, 0xe9, 0x51, 0x18, 0xe6, 0xdd, 0x98, 0x0c, 0x01, + 0xf6, 0x35, 0x64, 0xc6, 0xd0, 0xea, 0x9f, 0xed, 0x82, 0x3d, 0x99, 0x1c, 0x93, 0xb3, 0xb0, 0x93, + 0xea, 0x18, 0xc3, 0x4d, 0x2d, 0xe9, 0x8e, 0x3c, 0x4b, 0xca, 0x20, 0xc8, 0x73, 0xd0, 0x27, 0xec, + 0x70, 0x57, 0x71, 0x68, 0x01, 0x14, 0x22, 0x58, 0xb3, 0x1b, 0x0d, 0x73, 0xb5, 0xc1, 0x56, 0x9e, + 0xa2, 0x08, 0x38, 0x50, 0xe7, 0x00, 0xa1, 0x27, 0x72, 0x80, 0x10, 0x9a, 0x8b, 0x8e, 0x22, 0xb1, + 0x15, 0x02, 0x17, 0xac, 0x50, 0x57, 0x42, 0xeb, 0x59, 0xb3, 0xeb, 0x93, 0xbd, 0x6c, 0xf7, 0x5a, + 0xb3, 0xeb, 0xba, 0x85, 0x6e, 0x54, 0x5a, 0xda, 0xf7, 0x54, 0xa9, 0x9a, 0x70, 0x38, 0x47, 0xe4, + 0xf7, 0xb4, 0xbb, 0x67, 0x22, 0x73, 0x36, 0x6e, 0x9e, 0x0b, 0xf9, 0x2f, 0xff, 0xae, 0x45, 0x26, + 0x5b, 0x12, 0x5e, 0xec, 0xbd, 0xfb, 0x85, 0x91, 0x8a, 0x28, 0x50, 0xee, 0x52, 0xdc, 0xc7, 0x17, + 0x06, 0x72, 0x05, 0x86, 0x56, 0x2d, 0x3f, 0x30, 0x56, 0xdb, 0x5b, 0x88, 0xa6, 0xab, 0x38, 0x9a, + 0xdd, 0x21, 0xe8, 0x7c, 0x7b, 0x8b, 0xa1, 0xfa, 0x10, 0x0c, 0x53, 0x54, 0xf4, 0xd8, 0x8c, 0xe1, + 0xea, 0x2e, 0x8e, 0x6b, 0x30, 0x84, 0xbd, 0x69, 0x35, 0x1a, 0x14, 0x99, 0x7e, 0x01, 0xa7, 0xe7, + 0x82, 0xe5, 0xd9, 0x9b, 0xd4, 0x5d, 0xd8, 0xc6, 0x10, 0xfe, 0xef, 0x2e, 0x94, 0xb8, 0x1c, 0xcb, + 0x7f, 0xfb, 0x81, 0xfc, 0x3d, 0xae, 0x46, 0x9d, 0x31, 0xb8, 0x17, 0x6e, 0xab, 0xd2, 0xeb, 0xec, + 0xbe, 0x7b, 0xaf, 0x53, 0xff, 0xa6, 0x06, 0x07, 0xe4, 0x74, 0xff, 0x1c, 0xb9, 0x86, 0x9f, 0xe9, + 0x86, 0x99, 0x4c, 0xeb, 0xb6, 0xe2, 0x5e, 0x30, 0x9d, 0x9a, 0xd5, 0x78, 0xb1, 0xb5, 0xe2, 0xce, + 0x35, 0x43, 0x8b, 0x74, 0xef, 0xd6, 0xf2, 0x05, 0x18, 0x58, 0x35, 0x7d, 0xcb, 0x30, 0x29, 0xde, + 0x32, 0xc6, 0x1d, 0x42, 0x38, 0x46, 0x0e, 0x59, 0x84, 0xdd, 0xb7, 0xdb, 0x6e, 0x20, 0xd0, 0xf4, + 0x14, 0x47, 0x33, 0x40, 0x01, 0x11, 0xcf, 0x25, 0xe8, 0xf3, 0x03, 0xcf, 0x0c, 0xac, 0x75, 0xb6, + 0x61, 0x18, 0x9a, 0x7d, 0x42, 0x32, 0xaa, 0x6c, 0x44, 0x1a, 0xf4, 0x9a, 0xe5, 0x26, 0x82, 0x54, + 0x05, 0x30, 0x59, 0x82, 0x61, 0xcf, 0x5a, 0xb3, 0x3c, 0xcb, 0xa9, 0x59, 0x38, 0x33, 0x7a, 0x8b, + 0xeb, 0xda, 0x90, 0x80, 0x65, 0x53, 0xe3, 0xbb, 0x5d, 0x70, 0x32, 0x22, 0x99, 0x84, 0xa2, 0x7d, + 0xa0, 0xf2, 0x49, 0x8e, 0x6c, 0xf7, 0x3d, 0x18, 0xd9, 0x9e, 0x7b, 0x3c, 0xb2, 0x3b, 0xb7, 0x3f, + 0xb2, 0x6b, 0x78, 0x84, 0x93, 0x3d, 0xb0, 0xf7, 0xce, 0x89, 0xf3, 0xe0, 0xf1, 0x8c, 0x15, 0x7d, + 0x5b, 0xfd, 0x15, 0x76, 0xe5, 0xfe, 0xa5, 0x0b, 0x1e, 0xc0, 0x85, 0xbf, 0xd3, 0xd1, 0xcf, 0x88, + 0x43, 0x77, 0x8e, 0x6e, 0x33, 0xd6, 0x6d, 0xa7, 0x8c, 0x42, 0x21, 0x48, 0xcc, 0x1b, 0xec, 0xd9, + 0x8e, 0x37, 0x38, 0xcd, 0xbd, 0xc1, 0x50, 0x73, 0xfa, 0xe6, 0xfb, 0x7f, 0xfc, 0xfe, 0x34, 0x7b, + 0x91, 0xed, 0x18, 0xf6, 0x4a, 0x1c, 0xc3, 0x5d, 0x1d, 0xc7, 0xf0, 0x36, 0x9e, 0xe2, 0xc9, 0xf4, + 0x08, 0x97, 0x81, 0xab, 0x09, 0x7f, 0x6d, 0x56, 0xed, 0xaf, 0x65, 0x89, 0x4d, 0x78, 0x6d, 0x5b, + 0xf0, 0x44, 0x21, 0x95, 0xfa, 0x00, 0xba, 0xfe, 0x94, 0x96, 0x72, 0x7a, 0xee, 0xe3, 0x5e, 0xcf, + 0x4f, 0xf9, 0x4e, 0x92, 0x1d, 0xdf, 0xbd, 0x1c, 0x82, 0x4f, 0xf2, 0x4b, 0x90, 0x88, 0xc7, 0x76, + 0xdf, 0xce, 0x28, 0x3e, 0xa1, 0x01, 0x44, 0x96, 0xf6, 0xfb, 0x38, 0xb1, 0x43, 0x2f, 0x6e, 0x7c, + 0xd9, 0xf2, 0x5a, 0x56, 0xd0, 0x36, 0x1b, 0x6c, 0x44, 0x6e, 0x06, 0x66, 0x10, 0xfa, 0x8a, 0x03, + 0x9c, 0x6d, 0x67, 0xcd, 0xc5, 0xd3, 0x05, 0xd9, 0x35, 0x75, 0x02, 0xc3, 0x15, 0x67, 0xcd, 0xad, + 0xe2, 0xa8, 0x85, 0xbf, 0xc9, 0x32, 0xec, 0x5e, 0x6b, 0x3b, 0x75, 0xdb, 0x59, 0x67, 0xd8, 0xd8, + 0x91, 0xd3, 0xd1, 0x62, 0xd8, 0x16, 0x19, 0x64, 0x75, 0x00, 0x51, 0x84, 0x18, 0xf5, 0x2f, 0x76, + 0xc3, 0xf8, 0x62, 0xbb, 0xd1, 0x48, 0x8a, 0x93, 0x3c, 0x97, 0x38, 0x10, 0x79, 0x54, 0x7a, 0x72, + 0x1d, 0x07, 0x14, 0x67, 0x64, 0x2b, 0x30, 0xd4, 0xe2, 0x04, 0x44, 0xa9, 0x7d, 0xa2, 0x18, 0xb5, + 0x74, 0xf4, 0x2e, 0xef, 0xa8, 0x0e, 0x0a, 0x24, 0x74, 0x04, 0x6e, 0x86, 0x23, 0x10, 0xb4, 0x3d, + 0xcb, 0x67, 0x38, 0xbb, 0x29, 0xce, 0x19, 0x09, 0xce, 0x8b, 0x6f, 0xb5, 0x6c, 0x6f, 0x6b, 0x91, + 0x01, 0x74, 0xc6, 0xf4, 0xf2, 0x8e, 0x70, 0x10, 0xe8, 0x4b, 0x8a, 0x74, 0x9e, 0xa9, 0x26, 0x2e, + 0xab, 0x25, 0x4c, 0x2b, 0xd5, 0x5f, 0xb6, 0x27, 0xc8, 0x3c, 0x12, 0xdc, 0x79, 0xd7, 0x47, 0x82, + 0xf3, 0xbd, 0xd0, 0x13, 0x32, 0xaa, 0xaf, 0xe3, 0x66, 0x35, 0x63, 0xde, 0xe1, 0x34, 0xbf, 0x98, + 0x3c, 0x91, 0x7b, 0x42, 0x71, 0x86, 0x95, 0x12, 0x9b, 0x38, 0x97, 0x3b, 0x87, 0x27, 0x3b, 0xa9, + 0x16, 0x45, 0x36, 0x74, 0x75, 0x89, 0x75, 0x10, 0x44, 0x5e, 0x48, 0xa8, 0x55, 0x29, 0x1a, 0xf9, + 0x69, 0xdb, 0x3c, 0xae, 0x3a, 0xc9, 0x06, 0xb8, 0x16, 0x14, 0xa2, 0xd4, 0x4a, 0xef, 0x5f, 0xe3, + 0x38, 0x3a, 0x77, 0x7b, 0xdc, 0xdd, 0xe0, 0x97, 0xdb, 0xec, 0xb1, 0x98, 0x03, 0x74, 0x09, 0x37, + 0x49, 0x9d, 0x4b, 0x22, 0xba, 0x54, 0xd2, 0x88, 0x9c, 0x32, 0x77, 0x50, 0xfa, 0x79, 0x1c, 0xd9, + 0x65, 0xd7, 0xb7, 0x69, 0x8c, 0xd3, 0x15, 0xa7, 0x84, 0x5c, 0xb8, 0xf6, 0x64, 0x40, 0x0b, 0xed, + 0xd9, 0x19, 0x1a, 0x6a, 0x0b, 0x75, 0xe7, 0xb1, 0xdc, 0xe9, 0xce, 0x51, 0xa1, 0xde, 0x32, 0x68, + 0x7d, 0x31, 0x15, 0x8f, 0x21, 0xba, 0x2c, 0xc5, 0xee, 0x1b, 0xf0, 0x88, 0x04, 0x4f, 0x92, 0xef, + 0xbb, 0x0f, 0x5b, 0xf2, 0xf1, 0xee, 0xb8, 0xd3, 0xd7, 0xc5, 0xb5, 0x35, 0xc6, 0xfb, 0x07, 0xd7, + 0xe9, 0x55, 0xd4, 0xe1, 0x44, 0x94, 0x90, 0x88, 0x10, 0x2a, 0x33, 0x58, 0x76, 0x4a, 0xc9, 0x22, + 0x83, 0x7e, 0x4f, 0xe4, 0xbb, 0x83, 0xcb, 0xf7, 0x0b, 0x1a, 0x3c, 0x9a, 0x2b, 0x18, 0x71, 0xa9, + 0x28, 0xba, 0x0c, 0xa7, 0xfa, 0xb4, 0xcc, 0xf0, 0x67, 0x29, 0x12, 0x39, 0x0f, 0xfd, 0x9e, 0xed, + 0xdf, 0x32, 0x9a, 0x6e, 0x9d, 0x9d, 0xd4, 0x0c, 0x49, 0x11, 0x54, 0x6d, 0xff, 0xd6, 0x35, 0xb7, + 0x6e, 0x55, 0xfb, 0x3c, 0xfc, 0xa5, 0xff, 0x9f, 0x2e, 0x18, 0x4d, 0x09, 0x91, 0xec, 0x85, 0x5d, + 0xb6, 0x6f, 0x34, 0x5c, 0x67, 0x9d, 0x92, 0xd4, 0x57, 0xed, 0xb5, 0xfd, 0x25, 0xd7, 0x59, 0xbf, + 0x7b, 0xbf, 0x7e, 0x01, 0x06, 0x2c, 0x27, 0xf0, 0xb6, 0x52, 0xa7, 0x41, 0xf9, 0xdb, 0x79, 0x0a, + 0xc7, 0xd6, 0x90, 0xeb, 0x30, 0x62, 0x71, 0xa2, 0x0d, 0xdc, 0x27, 0x94, 0x58, 0x8d, 0x86, 0x05, + 0xf0, 0x35, 0x0a, 0xab, 0x7f, 0x59, 0xc3, 0xf0, 0x83, 0x42, 0x9a, 0x2d, 0xce, 0x56, 0x63, 0x52, + 0x3b, 0x22, 0x5b, 0x5a, 0x93, 0x88, 0xee, 0xa5, 0xf8, 0x9e, 0x45, 0x2b, 0x92, 0xe5, 0x0f, 0x15, + 0x31, 0x77, 0x1b, 0x38, 0x21, 0x32, 0xe1, 0x05, 0x9f, 0x3d, 0xdb, 0xf3, 0xc8, 0x70, 0x42, 0xb0, + 0x65, 0x99, 0x2f, 0x45, 0x12, 0x4f, 0xa3, 0x10, 0xb5, 0x2d, 0x5c, 0x8a, 0xa4, 0x38, 0x90, 0xe2, + 0xcb, 0x31, 0x8a, 0x4b, 0xfa, 0x3c, 0x31, 0xaa, 0xe7, 0x70, 0xfb, 0x2f, 0xf1, 0x10, 0x8b, 0x11, + 0x7d, 0x48, 0x89, 0x42, 0x04, 0x7c, 0xc6, 0xb4, 0xa9, 0x9c, 0xab, 0x1a, 0x37, 0x3d, 0xef, 0xf0, + 0xdd, 0x97, 0xd4, 0x64, 0x62, 0x9f, 0xaf, 0xc7, 0x42, 0x34, 0x43, 0x6b, 0x77, 0xbe, 0x7c, 0x88, + 0x66, 0x27, 0xe4, 0x93, 0x87, 0xc3, 0x71, 0x9c, 0xfa, 0x59, 0x0c, 0x8b, 0xca, 0x5e, 0xd3, 0x91, + 0x88, 0x71, 0xd8, 0xc9, 0xa2, 0x71, 0x35, 0x1a, 0x8d, 0xcb, 0x1e, 0xf4, 0xcb, 0x29, 0xd0, 0x50, + 0xfb, 0x97, 0x3d, 0x77, 0xcd, 0x6e, 0x94, 0xf3, 0x07, 0x3e, 0xa5, 0xa1, 0x0c, 0x25, 0xa8, 0xc4, + 0x01, 0xec, 0xae, 0x16, 0x7b, 0x85, 0x12, 0x78, 0x32, 0x77, 0x28, 0xa2, 0x68, 0x38, 0x70, 0xb8, + 0x7b, 0xb3, 0x7d, 0xa3, 0x6e, 0xad, 0x99, 0xed, 0x46, 0x80, 0xd7, 0xac, 0xfd, 0xb6, 0xbf, 0xc0, + 0x5e, 0xe8, 0x4b, 0xb8, 0x17, 0xed, 0x60, 0x41, 0xab, 0x82, 0x33, 0xba, 0xdc, 0xe2, 0xbf, 0x95, + 0x5a, 0xfc, 0x53, 0xd8, 0x90, 0xbd, 0x1b, 0xb0, 0xcb, 0xa3, 0xe1, 0x60, 0xdc, 0xe7, 0x3d, 0x95, + 0xcb, 0x5e, 0x1c, 0x15, 0x46, 0xd8, 0x71, 0x2c, 0xfa, 0x6d, 0x38, 0xca, 0xe6, 0x22, 0x37, 0x6f, + 0x72, 0xc0, 0x7b, 0xe5, 0x09, 0xbc, 0xa3, 0xe1, 0xf9, 0x73, 0x81, 0x3e, 0x91, 0xed, 0x13, 0xd0, + 0x43, 0x0d, 0xab, 0x56, 0xcc, 0xb0, 0xd2, 0xc6, 0x64, 0x1a, 0x06, 0x6c, 0xdf, 0x70, 0x37, 0x2d, + 0xcf, 0xb3, 0xd1, 0x28, 0xf7, 0x55, 0xc1, 0xf6, 0x6f, 0xe0, 0x1b, 0xfd, 0x16, 0x4e, 0xe9, 0x0b, + 0x9e, 0xeb, 0xfb, 0x6c, 0x09, 0x59, 0x76, 0xdd, 0xc6, 0x4d, 0xc7, 0x6c, 0xf9, 0x1b, 0x6e, 0x39, + 0xdf, 0x67, 0x1a, 0xd8, 0x31, 0xa8, 0x11, 0x0d, 0x9c, 0x02, 0xfa, 0x8a, 0x46, 0x98, 0xe9, 0x5f, + 0x1e, 0xc4, 0xd9, 0x2c, 0xed, 0x0d, 0x79, 0x4d, 0x60, 0xd2, 0x92, 0x98, 0xc8, 0x65, 0x18, 0x64, + 0x0d, 0x30, 0x5e, 0xb5, 0xcc, 0x0a, 0xce, 0x0e, 0x79, 0x31, 0xee, 0x95, 0xbc, 0x0c, 0x7b, 0x5a, + 0xb8, 0x9a, 0xe1, 0xf2, 0x6b, 0x04, 0x6e, 0x10, 0xbb, 0x2f, 0xc9, 0xc5, 0x38, 0xc6, 0x31, 0x30, + 0x96, 0x56, 0x42, 0x78, 0x72, 0x15, 0x86, 0xda, 0x8e, 0x67, 0x99, 0x0d, 0xfb, 0x63, 0x56, 0xdd, + 0x68, 0x39, 0x8d, 0x32, 0xcb, 0xfa, 0x60, 0x07, 0x74, 0xd9, 0x69, 0x90, 0x8f, 0xc0, 0x64, 0x1c, + 0x97, 0x21, 0x96, 0xfd, 0xc8, 0x89, 0x70, 0x2e, 0xd6, 0x89, 0x18, 0x56, 0xa1, 0x7a, 0xd4, 0x07, + 0xb9, 0xdd, 0xb6, 0x83, 0x2d, 0xc3, 0xac, 0x37, 0x6d, 0xdf, 0xb7, 0x5d, 0x27, 0x72, 0x84, 0x5f, + 0xc0, 0x07, 0xa1, 0xc0, 0x73, 0x1c, 0x96, 0x54, 0x81, 0x20, 0xbe, 0x86, 0x7d, 0xbb, 0x6d, 0xd7, + 0xe9, 0xf9, 0x36, 0x3b, 0x42, 0x2c, 0x86, 0x71, 0x94, 0x81, 0x2f, 0x75, 0xa0, 0xc9, 0x8b, 0x30, + 0x6e, 0x3b, 0x76, 0x60, 0x9b, 0x8d, 0xb8, 0x98, 0xfa, 0x8a, 0x63, 0x25, 0x88, 0x20, 0x2a, 0xa5, + 0x8f, 0xc0, 0x64, 0xd3, 0xb4, 0x9d, 0xc0, 0x72, 0x42, 0x6d, 0x88, 0xa3, 0xee, 0x2f, 0x31, 0xb2, + 0x11, 0x24, 0x51, 0xf4, 0xb7, 0xe0, 0x40, 0x82, 0x6a, 0x7a, 0xe0, 0xc5, 0x0e, 0xd6, 0xb0, 0x1b, + 0x28, 0xde, 0xcd, 0x83, 0x31, 0x0e, 0xc2, 0xe5, 0x8a, 0xdf, 0x8a, 0x84, 0x9d, 0x5d, 0x83, 0x11, + 0xe6, 0x90, 0x36, 0x5c, 0x9f, 0x23, 0x1f, 0x28, 0x8e, 0x7c, 0x88, 0x02, 0x2f, 0xb9, 0x3e, 0xa2, + 0xbb, 0x01, 0xa3, 0x6b, 0x96, 0x65, 0x78, 0x96, 0x6f, 0x79, 0x9b, 0x16, 0xe2, 0xdb, 0x5d, 0x42, + 0x2d, 0xd6, 0xac, 0xd0, 0x7a, 0x85, 0xc0, 0x0c, 0xe1, 0x87, 0x61, 0x82, 0x9d, 0x6f, 0x36, 0xdc, + 0xda, 0x2d, 0xc3, 0x0b, 0x65, 0xec, 0x59, 0x4d, 0xcb, 0x09, 0x26, 0x07, 0x8b, 0x63, 0x1d, 0xa7, + 0x28, 0x96, 0xdc, 0x1a, 0xbd, 0x28, 0x45, 0x04, 0xe4, 0xa3, 0x30, 0xc5, 0xe6, 0xe0, 0xa6, 0x65, + 0xb4, 0xc3, 0xf9, 0xb1, 0x61, 0xda, 0x5e, 0xad, 0x1d, 0x18, 0x5e, 0xe8, 0x87, 0x0c, 0x15, 0x47, + 0xbf, 0x97, 0xa3, 0x79, 0xb1, 0xe5, 0x34, 0x2e, 0x33, 0x24, 0xd5, 0xd0, 0xb9, 0xbd, 0x0c, 0x83, + 0x1b, 0x96, 0xd9, 0x08, 0x36, 0x8c, 0x35, 0xb3, 0x16, 0xb8, 0xde, 0xe4, 0x70, 0x89, 0x9b, 0x64, + 0x06, 0xb9, 0x48, 0x01, 0x49, 0x0b, 0x74, 0xcf, 0x0c, 0x6a, 0x1b, 0x56, 0x60, 0xd5, 0x0d, 0xa9, + 0xf2, 0x8d, 0x16, 0xa7, 0x79, 0x5a, 0xa0, 0xbb, 0x96, 0xad, 0x85, 0xaf, 0xc2, 0xde, 0x5a, 0x68, + 0x71, 0x79, 0x0f, 0xed, 0xc0, 0x6e, 0x84, 0x23, 0x63, 0xbb, 0x93, 0xa4, 0xc4, 0xc8, 0xd7, 0x3a, + 0x56, 0xfb, 0xc5, 0xc0, 0x6e, 0x54, 0x43, 0x04, 0xe4, 0x0d, 0x98, 0x16, 0xf6, 0x53, 0x22, 0xdd, + 0xb1, 0x12, 0x0a, 0xce, 0x71, 0xdd, 0xc8, 0x92, 0xf2, 0x6d, 0x38, 0xe4, 0xb8, 0x8e, 0x91, 0xd7, + 0xdf, 0x78, 0x89, 0xa1, 0x73, 0x5c, 0x67, 0x59, 0xd1, 0xe5, 0xd5, 0x9e, 0xbe, 0x91, 0x91, 0x51, + 0x7d, 0x1f, 0x86, 0xad, 0x5e, 0x73, 0xeb, 0xed, 0x86, 0x45, 0x8f, 0x29, 0x79, 0x2a, 0xc6, 0x8b, + 0x18, 0x61, 0x1b, 0xfb, 0x24, 0x42, 0x5a, 0x63, 0x8e, 0xb0, 0x2c, 0x8c, 0xf9, 0x12, 0x4b, 0x15, + 0x63, 0xb0, 0xe8, 0xf8, 0xee, 0x85, 0x3d, 0xf1, 0xc3, 0x1b, 0xde, 0x9f, 0x81, 0x81, 0xb7, 0x1f, + 0xd8, 0x6e, 0xff, 0x76, 0x34, 0xee, 0xa7, 0x6a, 0xbd, 0x69, 0x7a, 0xf5, 0x65, 0xd7, 0x76, 0x82, + 0x42, 0xe9, 0x14, 0x27, 0x61, 0xa2, 0x65, 0xb1, 0xc3, 0xea, 0x96, 0xeb, 0x36, 0x8c, 0xc0, 0x6e, + 0x5a, 0x7e, 0x60, 0x36, 0x5b, 0x74, 0x81, 0xee, 0xae, 0x8e, 0xe3, 0xd7, 0x70, 0xd5, 0x5f, 0xe1, + 0xdf, 0xf4, 0xff, 0xcb, 0x23, 0xe9, 0x32, 0xfa, 0x44, 0xe6, 0x56, 0xe1, 0x01, 0xee, 0x7d, 0xd0, + 0x2c, 0x38, 0xc3, 0xa3, 0xad, 0x8c, 0x16, 0x6d, 0xc6, 0xe8, 0x28, 0x26, 0xf2, 0xc9, 0xa8, 0xff, + 0x1e, 0xed, 0x4b, 0x3f, 0x88, 0x3b, 0xd0, 0xc8, 0x97, 0x0b, 0x66, 0xb3, 0x65, 0xda, 0xeb, 0x0e, + 0x1f, 0xfd, 0x9f, 0xf4, 0xe0, 0x2e, 0x33, 0xb3, 0x0d, 0xd2, 0x7a, 0x1b, 0x1e, 0x0c, 0x69, 0x0c, + 0x07, 0x01, 0xa9, 0xac, 0x61, 0x93, 0xe8, 0x7d, 0xc0, 0x31, 0xe9, 0x8d, 0x8c, 0xc9, 0x76, 0x53, + 0x51, 0xdc, 0x74, 0x4f, 0xb8, 0x2f, 0x90, 0x7d, 0x22, 0x77, 0xe0, 0x70, 0xa2, 0x4b, 0x3a, 0xfc, + 0xa2, 0x5f, 0xbf, 0xb6, 0x61, 0x85, 0xfa, 0x89, 0xf1, 0x13, 0x8f, 0x49, 0xef, 0xa3, 0x39, 0x2b, + 0x6c, 0x58, 0xdc, 0x46, 0xf5, 0x60, 0xac, 0xd3, 0xf0, 0x15, 0x6f, 0x74, 0x13, 0x71, 0x92, 0xd7, + 0x61, 0x1f, 0xb5, 0x59, 0x99, 0x92, 0x29, 0xe1, 0x46, 0x4d, 0x50, 0x2c, 0x29, 0xb9, 0x90, 0x4f, + 0x6a, 0x70, 0x94, 0x6b, 0x55, 0x31, 0x2e, 0x7b, 0xca, 0x72, 0x79, 0x04, 0xf1, 0xaf, 0xe4, 0x32, + 0xdb, 0x84, 0x83, 0x82, 0x16, 0x29, 0xd3, 0x3b, 0x8b, 0xab, 0xe3, 0x43, 0xbc, 0xe7, 0x4c, 0xde, + 0xf5, 0x73, 0xa8, 0x93, 0x57, 0xfc, 0x1b, 0xad, 0xc0, 0xaa, 0xdf, 0x68, 0x07, 0x37, 0xd6, 0x58, + 0x03, 0x3f, 0x3f, 0x15, 0x6b, 0x01, 0x95, 0x35, 0x13, 0x18, 0x95, 0xf5, 0x00, 0xec, 0x0e, 0x77, + 0x08, 0xe1, 0x77, 0xc3, 0x6d, 0x07, 0x78, 0x48, 0x16, 0x6e, 0x11, 0x10, 0x44, 0x7f, 0x14, 0xf7, + 0x79, 0x29, 0x1c, 0x78, 0x1b, 0x2b, 0x4c, 0xd3, 0x02, 0x6e, 0xe1, 0x14, 0x0d, 0xb1, 0x53, 0x85, + 0x09, 0xd1, 0x9f, 0xc5, 0x3d, 0xee, 0xa2, 0x65, 0x2d, 0xd8, 0x3e, 0xbb, 0xef, 0xc5, 0x2d, 0x46, + 0xe4, 0x70, 0x45, 0xce, 0xf4, 0xdf, 0x6b, 0xb8, 0xa5, 0x91, 0x21, 0x40, 0x1a, 0x1e, 0x02, 0x08, + 0xec, 0x70, 0xf9, 0xc0, 0x00, 0x25, 0xed, 0x48, 0x4f, 0xb5, 0x3f, 0x7c, 0xc3, 0x2e, 0x16, 0xaf, + 0xc1, 0x6e, 0xb1, 0xdd, 0xe9, 0x5c, 0x64, 0xc9, 0x8e, 0x8c, 0x22, 0x7d, 0xad, 0xd8, 0x96, 0x47, + 0x3b, 0x1a, 0x30, 0x3b, 0xbd, 0x92, 0xab, 0x30, 0x20, 0xec, 0x57, 0xd0, 0xc0, 0x2b, 0xac, 0xc7, + 0x8a, 0x61, 0x5b, 0x59, 0x59, 0xaa, 0x02, 0xb7, 0x5a, 0x41, 0x43, 0xd8, 0xa9, 0x48, 0x33, 0xae, + 0x9e, 0x5c, 0x14, 0x1f, 0xe7, 0x81, 0x5a, 0x99, 0x6d, 0xc4, 0x99, 0xc9, 0x9e, 0xd0, 0xc1, 0xab, + 0xe3, 0xf7, 0xce, 0xf4, 0xd1, 0x8a, 0xf2, 0x2a, 0x50, 0x8e, 0xad, 0xa5, 0x5f, 0xea, 0xcf, 0xe3, + 0x4a, 0x82, 0x5b, 0xad, 0x6b, 0xb6, 0xdf, 0xa4, 0x8e, 0x8a, 0xd0, 0xdc, 0x69, 0x18, 0xa8, 0xb7, + 0xfd, 0x80, 0x7b, 0x54, 0x1a, 0x5d, 0x22, 0x20, 0x7c, 0xc5, 0x5c, 0x25, 0xfd, 0x57, 0xbb, 0x61, + 0x38, 0x01, 0x4d, 0x74, 0x88, 0xed, 0x3a, 0x8b, 0x27, 0xef, 0x90, 0x39, 0xe8, 0x37, 0x37, 0x4d, + 0xbb, 0x74, 0x68, 0x6d, 0x07, 0x2a, 0x5c, 0xd1, 0x99, 0x7b, 0x56, 0x62, 0x2f, 0xc7, 0x20, 0xc8, + 0x22, 0xec, 0xc6, 0xcd, 0xaa, 0xb1, 0xe1, 0x36, 0xea, 0x65, 0xf6, 0x6d, 0x03, 0x08, 0x78, 0xd9, + 0x6d, 0xd4, 0xc3, 0x7d, 0xa5, 0xf5, 0x56, 0xcb, 0xaa, 0x85, 0x13, 0x96, 0xd1, 0x52, 0x62, 0xab, + 0x36, 0xc8, 0x41, 0x99, 0x63, 0x78, 0x01, 0xa0, 0x6e, 0xaf, 0x61, 0x94, 0x50, 0x99, 0x0d, 0x5a, + 0x04, 0x4c, 0x7f, 0x13, 0x17, 0xef, 0x0c, 0x31, 0xa3, 0xa2, 0xbd, 0x08, 0x84, 0xb3, 0xde, 0x14, + 0x5f, 0xd1, 0x4d, 0x79, 0x44, 0x9d, 0x97, 0xca, 0xb1, 0x55, 0x47, 0x57, 0x93, 0xe8, 0xf5, 0xc3, + 0x38, 0xd1, 0xb1, 0x69, 0xb8, 0x1d, 0x9a, 0xef, 0x0c, 0x94, 0x30, 0x4b, 0x9f, 0xe9, 0x82, 0x3d, + 0x91, 0x26, 0xcc, 0x81, 0xa5, 0x43, 0xf9, 0x3f, 0x5c, 0x95, 0xf4, 0x5f, 0xe4, 0xa7, 0xab, 0xd2, + 0x11, 0x44, 0x01, 0xda, 0x30, 0xc5, 0x3b, 0xa4, 0xfb, 0xd7, 0x68, 0xef, 0x79, 0xf1, 0xd8, 0x99, + 0x43, 0x5f, 0xdd, 0xbb, 0x9a, 0xdd, 0xa5, 0x58, 0x6d, 0x12, 0x36, 0x30, 0x74, 0x8e, 0x6d, 0x3f, + 0xb0, 0x6b, 0x42, 0xac, 0x67, 0x61, 0x30, 0xf6, 0x81, 0x10, 0xe8, 0x09, 0xcd, 0x37, 0x9a, 0x72, + 0xfa, 0x3b, 0x94, 0x5e, 0x27, 0xdf, 0xbc, 0xa7, 0xca, 0x1e, 0x74, 0x07, 0x17, 0x2a, 0x45, 0x1f, + 0xe2, 0xc2, 0x00, 0x7c, 0xf1, 0x36, 0x27, 0x8b, 0x32, 0x86, 0xa2, 0x1a, 0x81, 0x0b, 0x9d, 0xf9, + 0x6b, 0x76, 0xe0, 0xbe, 0x64, 0xb6, 0x1b, 0x74, 0x35, 0x10, 0x3c, 0xfc, 0x99, 0x06, 0x13, 0xc9, + 0x2f, 0xd8, 0xf3, 0x63, 0x30, 0xd2, 0x34, 0xfd, 0xc0, 0xf2, 0x78, 0xe4, 0x9b, 0xc5, 0x97, 0xca, + 0x61, 0xf6, 0x7e, 0x8e, 0xbf, 0x26, 0xc7, 0x61, 0xbc, 0x2e, 0x9c, 0xfa, 0x48, 0x73, 0x16, 0x6f, + 0x33, 0xd6, 0xf9, 0xd6, 0x01, 0x39, 0x0c, 0x43, 0x7e, 0xcb, 0x0d, 0x22, 0x8d, 0x59, 0xb0, 0xd1, + 0x60, 0xf8, 0x36, 0xd6, 0xac, 0xf6, 0xe6, 0xec, 0xb1, 0x48, 0xb3, 0x1e, 0xd6, 0x2c, 0x7c, 0x2b, + 0x9a, 0xe9, 0x0b, 0x68, 0xe8, 0xf1, 0xe6, 0x61, 0x61, 0xd1, 0x73, 0x9b, 0x94, 0xa5, 0xc8, 0xf1, + 0xe1, 0x66, 0xf8, 0x6c, 0xc4, 0xaf, 0xd5, 0x77, 0xd3, 0x97, 0x3c, 0x86, 0x8f, 0x87, 0xe6, 0x67, + 0x60, 0xc1, 0x31, 0x51, 0x5e, 0x4e, 0xf0, 0xfb, 0x8d, 0xcb, 0xb6, 0x1f, 0xb8, 0x9e, 0x5d, 0x13, + 0xde, 0x14, 0x3d, 0xe4, 0x2d, 0x74, 0xbf, 0xe1, 0xa2, 0x41, 0x91, 0xa1, 0x10, 0x77, 0x32, 0x83, + 0xdc, 0xe9, 0x8b, 0x1e, 0x43, 0x1f, 0x52, 0x38, 0xf4, 0x02, 0xc7, 0xee, 0x20, 0xf2, 0xa4, 0x7f, + 0x45, 0x83, 0x31, 0xfa, 0x99, 0xf5, 0x18, 0x7a, 0x4e, 0xe1, 0x96, 0x8e, 0x3c, 0x09, 0x84, 0xf5, + 0xb0, 0xee, 0xb9, 0xed, 0x56, 0xe8, 0x6b, 0xfa, 0x56, 0x0d, 0x15, 0x7b, 0x84, 0x7e, 0xb9, 0x84, + 0x1f, 0x6e, 0x5a, 0x35, 0xb2, 0x17, 0x76, 0x35, 0xcd, 0xb7, 0x0c, 0x73, 0xdd, 0x42, 0x35, 0xef, + 0x6d, 0x9a, 0x6f, 0xcd, 0xad, 0x5b, 0x64, 0x06, 0xc6, 0x6c, 0xa7, 0xd6, 0x68, 0x87, 0xa4, 0x9a, + 0x6f, 0x1a, 0x1b, 0xac, 0x13, 0xcc, 0x0b, 0x19, 0xc5, 0x4f, 0x55, 0xf3, 0x4d, 0xec, 0x3d, 0xd4, + 0x39, 0xde, 0x5e, 0x5c, 0xa6, 0xd0, 0xb0, 0xc1, 0xea, 0x30, 0xbe, 0xe7, 0x37, 0x25, 0xfa, 0x67, + 0x35, 0x0c, 0x19, 0x11, 0x39, 0xb8, 0x66, 0x60, 0x37, 0xec, 0x60, 0xab, 0x50, 0x38, 0xdc, 0xeb, + 0xb0, 0x87, 0xf1, 0x87, 0x24, 0x85, 0xfe, 0x67, 0xc8, 0x78, 0x8e, 0x97, 0x95, 0x31, 0x54, 0xd5, + 0xb1, 0x20, 0xfd, 0x52, 0xff, 0x0f, 0x2d, 0xa6, 0x91, 0x51, 0xea, 0x44, 0x2a, 0x1b, 0x6c, 0x8a, + 0xb7, 0x18, 0x3c, 0x36, 0x9d, 0xbb, 0xea, 0x75, 0x40, 0xc8, 0xcb, 0x30, 0xc2, 0x89, 0x17, 0x63, + 0xd5, 0x95, 0xba, 0x6d, 0xc1, 0xea, 0x2e, 0x58, 0xec, 0x65, 0x86, 0x0f, 0x5f, 0xc4, 0xd2, 0x0c, + 0x23, 0x16, 0xfe, 0x89, 0x5c, 0x80, 0x81, 0xa8, 0xb0, 0xba, 0xa9, 0x6e, 0xe9, 0xf9, 0xba, 0x55, + 0x05, 0x4f, 0x48, 0x52, 0x3f, 0x81, 0x09, 0xb1, 0xf3, 0xb6, 0x63, 0xf2, 0x51, 0xc8, 0x8b, 0xd6, + 0xd3, 0x57, 0x31, 0x3b, 0x2f, 0x01, 0x24, 0x4c, 0x61, 0x22, 0xd4, 0x48, 0x26, 0x25, 0x06, 0x8e, + 0xa2, 0x48, 0x46, 0x1a, 0xf1, 0xbb, 0x96, 0x64, 0xf0, 0xe8, 0x05, 0xd7, 0xa9, 0xdb, 0x2c, 0xcb, + 0xe0, 0x5e, 0x57, 0xa8, 0xf9, 0x5c, 0x37, 0x1c, 0x4c, 0x85, 0x39, 0x26, 0xfb, 0xfb, 0xf9, 0x8d, + 0x10, 0xbe, 0x04, 0xbb, 0x03, 0xcf, 0x5e, 0x5f, 0xb7, 0xbc, 0xe5, 0xb2, 0xa1, 0x6c, 0x31, 0xc0, + 0xfc, 0x48, 0xe1, 0xc3, 0xb0, 0xcb, 0xf6, 0x69, 0x7c, 0x28, 0x75, 0x39, 0xfb, 0xe6, 0x07, 0x7e, + 0xfc, 0xfe, 0x34, 0x7f, 0x55, 0xe5, 0x3f, 0x12, 0x01, 0xc5, 0xbb, 0x24, 0x01, 0xc5, 0x7d, 0x9d, + 0x80, 0xe2, 0x8f, 0x6b, 0xb1, 0x64, 0x0c, 0xa5, 0x52, 0x88, 0x22, 0x22, 0xf1, 0xf0, 0xd6, 0x33, + 0x45, 0xc3, 0x5b, 0x93, 0x28, 0x45, 0x90, 0x2b, 0x8f, 0xb5, 0xe2, 0xc9, 0x9e, 0xa5, 0xf2, 0x71, + 0xf4, 0xdf, 0xe6, 0x27, 0x58, 0x19, 0xe0, 0x48, 0xf2, 0x79, 0xe8, 0x99, 0xb7, 0xc5, 0x62, 0x71, + 0x44, 0x4d, 0x70, 0x24, 0x0a, 0x97, 0x42, 0x85, 0xd0, 0x73, 0xfe, 0x2d, 0x5e, 0xe1, 0xa3, 0x04, + 0x74, 0x08, 0x95, 0x91, 0x00, 0xc3, 0x63, 0x18, 0xe2, 0x31, 0x77, 0xe5, 0x98, 0x7e, 0x97, 0xbb, + 0x8f, 0x52, 0x24, 0x3f, 0x93, 0xac, 0xbf, 0xa7, 0xc1, 0x68, 0xaa, 0xf5, 0x7d, 0x9d, 0xff, 0xf1, + 0x19, 0xd3, 0x9d, 0x9c, 0x31, 0x29, 0x13, 0xd8, 0x93, 0x71, 0x7f, 0x7e, 0x0d, 0xe7, 0x10, 0x46, + 0x34, 0x06, 0x6e, 0xd3, 0xae, 0x5d, 0x7c, 0xcb, 0xaa, 0xb5, 0x43, 0x65, 0x5f, 0xb4, 0xac, 0x6b, + 0xed, 0x46, 0x60, 0xb7, 0x1a, 0xb6, 0xe5, 0x15, 0x92, 0xed, 0x26, 0xc6, 0xc7, 0x15, 0x41, 0x27, + 0xc2, 0x3c, 0xa1, 0x29, 0xde, 0x96, 0x19, 0xc6, 0x08, 0x98, 0x7e, 0x86, 0xd7, 0xf2, 0x61, 0x97, + 0xe2, 0x81, 0x79, 0xcb, 0xba, 0xe4, 0x99, 0x9d, 0x2c, 0x9f, 0x49, 0xd8, 0xb5, 0x1e, 0x3e, 0x5b, + 0x16, 0x3f, 0xf7, 0xc1, 0x47, 0xfd, 0xd7, 0x45, 0xa9, 0x9e, 0x14, 0x28, 0x12, 0x78, 0x06, 0x76, + 0xd2, 0xc6, 0x78, 0xbe, 0x21, 0x5b, 0x53, 0x19, 0x3c, 0x03, 0x65, 0x00, 0xe4, 0x3a, 0x74, 0xe2, + 0xac, 0x0c, 0x86, 0x43, 0x9d, 0xf9, 0x2f, 0xee, 0x56, 0x19, 0x9a, 0x21, 0x2b, 0xf6, 0xac, 0xaf, + 0xa0, 0xb5, 0xa0, 0x4f, 0x73, 0xed, 0x60, 0xc3, 0xf5, 0xec, 0x8f, 0xd1, 0x7b, 0xce, 0x14, 0x9f, + 0x5e, 0x9c, 0x4f, 0x2f, 0x3a, 0x02, 0x5d, 0xf1, 0x11, 0x78, 0x05, 0xcf, 0x85, 0xb2, 0xb0, 0xe2, + 0x10, 0x9c, 0x82, 0x5e, 0x4c, 0x6e, 0x62, 0xf2, 0x79, 0x08, 0xe5, 0xb3, 0x27, 0x2d, 0x9f, 0x2b, + 0x4e, 0x50, 0xc5, 0xc6, 0xe2, 0x14, 0x32, 0x8d, 0xd9, 0xcf, 0x25, 0x58, 0xff, 0x12, 0x3f, 0x8b, + 0xca, 0x84, 0x46, 0xc2, 0x3e, 0x04, 0x84, 0x1d, 0xa7, 0x52, 0x28, 0xa3, 0x0c, 0x91, 0x23, 0x14, + 0x90, 0x21, 0x67, 0x09, 0x58, 0x73, 0xd0, 0x4b, 0xd1, 0xf8, 0x39, 0xc7, 0xdd, 0x19, 0x03, 0x85, + 0x80, 0xfa, 0x19, 0x74, 0xa0, 0x30, 0x1c, 0x88, 0xed, 0x50, 0x0b, 0xcd, 0x9c, 0xd7, 0xd0, 0x8b, + 0x4a, 0x40, 0x22, 0x9f, 0xcf, 0xc2, 0x2e, 0x1e, 0xb2, 0xc0, 0xb4, 0xf0, 0x61, 0x65, 0x6d, 0x1b, + 0x0e, 0xce, 0x81, 0x44, 0x1d, 0xb8, 0xd8, 0xe7, 0xc8, 0xe5, 0xd0, 0x03, 0x99, 0x5f, 0xa5, 0x55, + 0xc1, 0x8a, 0xf5, 0xde, 0xa9, 0x0a, 0x76, 0x0b, 0x06, 0x63, 0x9f, 0xd4, 0x6e, 0xfe, 0x33, 0x1d, + 0x66, 0x4b, 0xd8, 0x45, 0xc1, 0xeb, 0x49, 0x11, 0x95, 0xee, 0xb8, 0xcd, 0x6b, 0xb6, 0xc3, 0xd3, + 0x50, 0xd5, 0xc5, 0x9c, 0x5e, 0x13, 0xe1, 0xe8, 0x49, 0xa8, 0x4e, 0x35, 0xbc, 0x98, 0x7a, 0x15, + 0xf3, 0xb6, 0x70, 0x26, 0x4c, 0x4b, 0xb0, 0x0b, 0x11, 0x6c, 0x89, 0x98, 0xfd, 0x54, 0x03, 0xec, + 0xff, 0x65, 0x18, 0x63, 0xd5, 0x99, 0x9a, 0xb6, 0x23, 0xd2, 0x73, 0xb9, 0x40, 0x1e, 0x55, 0x95, + 0x68, 0x8a, 0x72, 0x33, 0x5a, 0x4f, 0x76, 0xa0, 0xbf, 0x01, 0xbb, 0x6f, 0xb4, 0x2c, 0xe7, 0x4a, + 0x38, 0xeb, 0x72, 0xb7, 0x60, 0x77, 0x29, 0x9b, 0xd3, 0x78, 0xed, 0x19, 0xed, 0xb0, 0xd0, 0xf4, + 0x78, 0x05, 0x27, 0x56, 0x1c, 0x30, 0x53, 0x34, 0xf2, 0x2d, 0x75, 0x0c, 0x18, 0x41, 0x1e, 0x3f, + 0x09, 0xfd, 0xa2, 0x16, 0x0f, 0x19, 0x87, 0x91, 0xf0, 0xaf, 0xf1, 0xa2, 0xe3, 0xb7, 0xac, 0x9a, + 0xbd, 0x66, 0x5b, 0xf5, 0x91, 0x1d, 0x64, 0x17, 0x74, 0xcf, 0xb7, 0xb7, 0x46, 0x34, 0xd2, 0x07, + 0x3d, 0x37, 0xad, 0x46, 0x63, 0xa4, 0xeb, 0xf1, 0x97, 0x60, 0x3c, 0x2b, 0x0b, 0x33, 0x44, 0x10, + 0x81, 0xa5, 0x88, 0x47, 0x76, 0x90, 0x31, 0x18, 0x5e, 0xf4, 0xdc, 0xe6, 0xcb, 0xae, 0xe7, 0x07, + 0x2b, 0xee, 0xbc, 0xe5, 0x07, 0x23, 0x1a, 0x7f, 0x19, 0x3e, 0xad, 0xb8, 0xf4, 0xd3, 0x48, 0xd7, + 0xec, 0x17, 0x7d, 0xd8, 0x49, 0x19, 0x25, 0xef, 0x69, 0xb0, 0x67, 0xe9, 0x44, 0xc2, 0x3f, 0x9a, + 0x77, 0xdd, 0x5b, 0xe4, 0x69, 0x55, 0x4d, 0x42, 0xb5, 0x67, 0x36, 0x75, 0x6e, 0x5b, 0xb0, 0x6c, + 0x9c, 0xf5, 0xb9, 0x8f, 0xbf, 0xf7, 0x8f, 0xbf, 0xdc, 0x75, 0x8e, 0x9c, 0xad, 0x64, 0x17, 0x2f, + 0xed, 0x1c, 0x19, 0x55, 0x96, 0x4e, 0x08, 0x7a, 0x2b, 0x77, 0x84, 0x58, 0xdf, 0x26, 0x5f, 0xd5, + 0x60, 0x78, 0xe9, 0x84, 0x70, 0x75, 0x29, 0x3f, 0x27, 0xf3, 0x68, 0xca, 0x72, 0xac, 0xa7, 0x4e, + 0x95, 0x84, 0x42, 0x1e, 0xce, 0x51, 0x1e, 0x4e, 0x91, 0x13, 0x12, 0x1e, 0xfc, 0x96, 0x1b, 0x48, + 0xa9, 0xff, 0x4d, 0x0d, 0xc6, 0x32, 0x2a, 0x66, 0x92, 0xe3, 0x2a, 0x5a, 0x32, 0x6b, 0x6f, 0x4e, + 0xcd, 0x96, 0x01, 0x41, 0xda, 0x8f, 0x52, 0xda, 0x1f, 0x25, 0x87, 0x2b, 0xea, 0x6a, 0xb5, 0x48, + 0xd5, 0x1f, 0x69, 0x40, 0xd2, 0x25, 0x2a, 0xc9, 0xa9, 0xb2, 0x25, 0x2d, 0x19, 0xc1, 0x4f, 0x6d, + 0xaf, 0x12, 0xa6, 0xfe, 0x34, 0x25, 0xfa, 0x24, 0x99, 0xcd, 0x21, 0xba, 0xe2, 0xa7, 0x49, 0xfd, + 0xaa, 0x06, 0xa3, 0x29, 0xd4, 0x6a, 0x7d, 0x91, 0x95, 0x6f, 0x9b, 0x3a, 0x55, 0x12, 0x0a, 0xc9, + 0x3f, 0x4b, 0xc9, 0x3f, 0x41, 0x8e, 0x97, 0x26, 0x9f, 0x7c, 0x45, 0x83, 0x91, 0x64, 0xa9, 0x4d, + 0x72, 0xa2, 0x88, 0xdc, 0x13, 0x0b, 0xf4, 0xd4, 0xc9, 0x72, 0x40, 0x48, 0xfa, 0x19, 0x4a, 0xfa, + 0x2c, 0x39, 0x96, 0x47, 0xba, 0x95, 0x24, 0xf2, 0x0f, 0x35, 0x18, 0x4e, 0x94, 0xae, 0x24, 0x4a, + 0x85, 0xcd, 0x2e, 0xf7, 0x39, 0x75, 0xa2, 0x14, 0x4c, 0x41, 0x2b, 0x23, 0x7e, 0x27, 0x2a, 0x7a, + 0x56, 0xee, 0xe0, 0xf8, 0xbf, 0x4d, 0x47, 0x3e, 0x59, 0x7a, 0x93, 0x94, 0x21, 0xa6, 0xd8, 0xc8, + 0xcb, 0xaa, 0x7b, 0x16, 0x1f, 0xf9, 0x64, 0x51, 0x52, 0xf2, 0x5d, 0x0d, 0xf6, 0x64, 0xd6, 0x39, + 0x24, 0x67, 0x0a, 0x51, 0x92, 0x51, 0x76, 0x73, 0xea, 0xec, 0x36, 0x20, 0x91, 0x91, 0x2b, 0x94, + 0x91, 0x0b, 0x64, 0xae, 0x30, 0x23, 0x51, 0x34, 0x31, 0xdb, 0xf9, 0x57, 0x1a, 0x4c, 0x64, 0x57, + 0x70, 0x24, 0xe5, 0x09, 0x14, 0xf2, 0x79, 0x7a, 0x3b, 0xa0, 0xc8, 0xdc, 0xb3, 0x94, 0xb9, 0x33, + 0xe4, 0xa9, 0x6d, 0x31, 0xe7, 0x93, 0x5f, 0xe8, 0x82, 0x43, 0x05, 0x0a, 0x6c, 0x92, 0x45, 0x25, + 0x8d, 0x85, 0xab, 0x90, 0x4e, 0x5d, 0xba, 0x6b, 0x3c, 0xc8, 0xf8, 0xcb, 0x94, 0xf1, 0x17, 0xc8, + 0x8d, 0x5c, 0xc6, 0x19, 0x52, 0x83, 0xbf, 0x30, 0x02, 0x44, 0x6b, 0xc4, 0x0a, 0x85, 0x56, 0xee, + 0xd0, 0xc7, 0xb7, 0xc9, 0xa7, 0xba, 0xe0, 0xe1, 0x22, 0x25, 0x47, 0xc9, 0xdd, 0xb2, 0x22, 0xe4, + 0x7f, 0xf9, 0xee, 0x11, 0xe1, 0xa0, 0x2c, 0xd3, 0x41, 0xb9, 0x4a, 0x2e, 0xdf, 0xa3, 0x41, 0xf1, + 0xc9, 0x67, 0x35, 0x18, 0x88, 0xd4, 0xc3, 0x23, 0x33, 0xca, 0x15, 0x28, 0x55, 0xc2, 0x6f, 0xaa, + 0x52, 0xb8, 0x3d, 0xb2, 0xf0, 0x04, 0x65, 0xe1, 0x30, 0x39, 0xa4, 0xf2, 0x6d, 0xf0, 0x48, 0x9d, + 0x7c, 0x41, 0x03, 0x88, 0x94, 0x38, 0x3c, 0x5a, 0xac, 0x33, 0x4e, 0xdb, 0x4c, 0xd1, 0xe6, 0x48, + 0xda, 0x69, 0x4a, 0xda, 0x71, 0x52, 0x29, 0x40, 0x5a, 0xcc, 0x6c, 0xfc, 0x96, 0x06, 0xc3, 0x89, + 0xc2, 0x82, 0xea, 0xa5, 0x28, 0xbb, 0x1e, 0xa2, 0x7a, 0x29, 0x92, 0x54, 0x2e, 0xd4, 0x8f, 0x51, + 0xaa, 0x1f, 0x27, 0x47, 0x54, 0x54, 0xaf, 0xb5, 0x1b, 0x0d, 0x83, 0x8f, 0xea, 0xbb, 0xe9, 0xe2, + 0x91, 0xc7, 0x8b, 0xf7, 0x5c, 0xc8, 0x39, 0xcc, 0x2e, 0x4b, 0x58, 0xcc, 0xb1, 0x8d, 0xd0, 0x1a, + 0x1b, 0xe5, 0xdf, 0xd1, 0x60, 0x30, 0xe6, 0x2f, 0x93, 0x63, 0x79, 0x02, 0x4e, 0x39, 0xe4, 0xc7, + 0x4b, 0x40, 0x14, 0x74, 0xae, 0x28, 0xcd, 0xe2, 0xbf, 0x2b, 0xc4, 0x28, 0xfe, 0x86, 0x06, 0x23, + 0xc9, 0x2a, 0x4c, 0xea, 0x25, 0x5e, 0x52, 0x7f, 0x50, 0xbd, 0xc4, 0xcb, 0xca, 0xd8, 0xe9, 0x8b, + 0x94, 0xf4, 0xe7, 0xc9, 0xb3, 0xb9, 0xa4, 0xc7, 0xf4, 0xb9, 0x72, 0x27, 0x76, 0x26, 0xfb, 0x36, + 0xf9, 0x67, 0x0d, 0x26, 0x65, 0x45, 0xec, 0x88, 0x72, 0xb7, 0x96, 0x53, 0xed, 0x70, 0xea, 0xfc, + 0xf6, 0x80, 0x0b, 0x9a, 0x43, 0x19, 0x7f, 0xc8, 0x9b, 0x70, 0xc6, 0xf8, 0xdd, 0xfd, 0xdb, 0xe4, + 0x6f, 0xc2, 0xed, 0x48, 0xaa, 0xd8, 0x64, 0xce, 0x76, 0x44, 0x56, 0x23, 0x33, 0x67, 0x3b, 0x22, + 0xad, 0x69, 0x59, 0x86, 0x2f, 0x63, 0x75, 0x0b, 0x6b, 0xaa, 0x28, 0x25, 0xf8, 0xae, 0x06, 0x23, + 0xc9, 0xff, 0x62, 0xa1, 0xd6, 0x44, 0xc9, 0xbf, 0xd5, 0x98, 0x3a, 0x59, 0x0e, 0x08, 0x39, 0x3a, + 0x45, 0x39, 0xaa, 0x90, 0xa3, 0x15, 0xc5, 0x7f, 0x27, 0xf1, 0x53, 0x64, 0x7f, 0x4f, 0x83, 0x7d, + 0x1d, 0xed, 0xa6, 0x6b, 0xa3, 0x6d, 0x39, 0xf7, 0x61, 0x26, 0x15, 0x92, 0x48, 0xc0, 0xe9, 0x33, + 0x0a, 0xcc, 0xa9, 0x6f, 0xa2, 0xa6, 0xc5, 0xab, 0x66, 0xe4, 0x6b, 0x5a, 0x66, 0x59, 0xc2, 0x7c, + 0x4d, 0xcb, 0xae, 0x43, 0x98, 0xbb, 0x8f, 0x61, 0x4b, 0x5e, 0xb2, 0x10, 0x48, 0xcc, 0xc8, 0xbd, + 0xaf, 0xc1, 0xa4, 0xac, 0xde, 0xa1, 0xda, 0x38, 0xe4, 0xd4, 0x5a, 0x54, 0x1b, 0x87, 0xbc, 0x12, + 0x8b, 0xfa, 0x25, 0xca, 0xda, 0x1c, 0x79, 0x2e, 0xff, 0x20, 0x48, 0xcd, 0xe0, 0x9f, 0x6b, 0x30, + 0x96, 0x71, 0xe2, 0x44, 0x9e, 0x2a, 0x46, 0x5e, 0x6a, 0x0d, 0x3a, 0x5d, 0x1a, 0x0e, 0x39, 0x7a, + 0x8e, 0x72, 0x74, 0x96, 0x9c, 0xce, 0xe7, 0x28, 0x7b, 0x3d, 0xfa, 0xbe, 0x06, 0x13, 0xd9, 0xa5, + 0xad, 0xd4, 0xdb, 0x1b, 0x65, 0x59, 0x35, 0xf5, 0xf6, 0x46, 0x5d, 0x49, 0x4b, 0x5f, 0xa2, 0x2c, + 0x2d, 0x92, 0x85, 0x82, 0x2c, 0xa9, 0xe7, 0xd4, 0x7f, 0x6a, 0xb0, 0x5f, 0x5d, 0x47, 0x8b, 0xcc, + 0x15, 0x5f, 0x70, 0x64, 0xfc, 0xce, 0xdf, 0x0d, 0x0a, 0xe4, 0xfb, 0x25, 0xca, 0xf7, 0x32, 0xb9, + 0xbe, 0x2d, 0xbe, 0xe5, 0xeb, 0xd7, 0xbf, 0xc6, 0x26, 0x63, 0x62, 0x15, 0x3b, 0x57, 0x42, 0xf1, + 0x52, 0x6b, 0xd9, 0xf9, 0xed, 0x01, 0x6f, 0x97, 0xdf, 0x82, 0xeb, 0xda, 0xbf, 0x69, 0x30, 0x9d, + 0x54, 0xb1, 0xe4, 0x32, 0x71, 0x9f, 0x54, 0xbb, 0x04, 0xcb, 0xa5, 0x16, 0x8e, 0xdf, 0xd5, 0x60, + 0x34, 0x55, 0x35, 0x49, 0x7d, 0xde, 0x28, 0x2b, 0x6e, 0xa6, 0x3e, 0x6f, 0x94, 0x96, 0x66, 0xd2, + 0x8f, 0x53, 0xd6, 0x9e, 0x20, 0x8f, 0x15, 0x30, 0xad, 0x48, 0xdf, 0xd7, 0x34, 0x18, 0x49, 0x15, + 0xe5, 0x3a, 0x51, 0xa6, 0xfb, 0x42, 0x0b, 0xb8, 0xac, 0x50, 0x93, 0xfe, 0x0c, 0x25, 0xf9, 0x34, + 0x39, 0x55, 0x98, 0xe4, 0x98, 0xe5, 0xfc, 0x9e, 0x06, 0x7b, 0x25, 0xa5, 0x95, 0xd4, 0x57, 0x1d, + 0xea, 0x9a, 0x4e, 0x53, 0xe7, 0xb6, 0x05, 0x8b, 0x3c, 0x2d, 0x50, 0x9e, 0x9e, 0x25, 0xe7, 0x8b, + 0xf2, 0xc4, 0xed, 0x44, 0x8c, 0xb5, 0x3f, 0xd1, 0x60, 0x3c, 0xab, 0xf4, 0x03, 0x39, 0x5d, 0xcc, + 0xd3, 0x4b, 0x15, 0x80, 0x9a, 0x3a, 0x53, 0x1e, 0xb0, 0xe0, 0x0e, 0x5c, 0xfc, 0x4e, 0x4e, 0x8a, + 0xef, 0x6b, 0xb0, 0x27, 0xb3, 0xe4, 0x03, 0x29, 0x48, 0x4c, 0xba, 0x6e, 0x85, 0xfa, 0x48, 0x52, + 0x59, 0xa6, 0x42, 0xbf, 0x41, 0xf9, 0xb8, 0x42, 0x2e, 0x15, 0x3f, 0x90, 0x37, 0x68, 0x7d, 0x19, + 0xac, 0x4f, 0x91, 0xe2, 0xef, 0x27, 0x1a, 0xec, 0x93, 0x96, 0x8f, 0x20, 0xe7, 0x8b, 0x51, 0x9a, + 0x5d, 0xc3, 0x62, 0xea, 0x99, 0x6d, 0x42, 0x23, 0xaf, 0x2b, 0x94, 0xd7, 0xeb, 0x64, 0xa9, 0x04, + 0xaf, 0xa8, 0x7e, 0xa2, 0xa4, 0x4e, 0xda, 0xf3, 0xff, 0x74, 0x17, 0x1c, 0xcc, 0x2d, 0x20, 0x41, + 0x94, 0xff, 0xf9, 0xac, 0x68, 0xcd, 0x8b, 0xa9, 0x8b, 0x77, 0x89, 0x05, 0x07, 0xe2, 0x75, 0x3a, + 0x10, 0xaf, 0x90, 0x97, 0x72, 0xaf, 0x32, 0xa2, 0x45, 0x91, 0x62, 0xe3, 0x90, 0x1c, 0x86, 0xd8, + 0x44, 0xfd, 0x27, 0x0d, 0xf6, 0x4a, 0xaa, 0x4b, 0xa8, 0x6d, 0x90, 0xba, 0x00, 0x86, 0xda, 0x06, + 0xe5, 0x94, 0xb3, 0xd0, 0xab, 0x94, 0xe9, 0x25, 0x72, 0x35, 0x8f, 0xe9, 0x58, 0x96, 0x36, 0xcd, + 0x6d, 0xf4, 0x11, 0x57, 0x4a, 0xf6, 0x9f, 0xd7, 0x60, 0x8c, 0x9f, 0x87, 0x46, 0x72, 0x8f, 0xd5, + 0x67, 0x93, 0xe9, 0xfc, 0x65, 0xf5, 0xd9, 0x64, 0x46, 0x52, 0x73, 0xee, 0xd9, 0x64, 0x93, 0xc2, + 0x18, 0xac, 0x24, 0xd4, 0x2f, 0x69, 0xd0, 0x2f, 0x32, 0x95, 0xc9, 0x93, 0xaa, 0xbe, 0x92, 0x99, + 0xce, 0x53, 0x47, 0x0b, 0xb6, 0x46, 0xba, 0x8e, 0x50, 0xba, 0x74, 0x72, 0x40, 0x42, 0x57, 0x4b, + 0x90, 0xf1, 0x75, 0x0d, 0x46, 0x53, 0x45, 0xf1, 0xd4, 0xce, 0x81, 0xac, 0x02, 0x9f, 0xda, 0x39, + 0x90, 0x56, 0xde, 0xcb, 0xbd, 0xb1, 0x10, 0xc4, 0x1a, 0xb6, 0x93, 0x75, 0xcc, 0xf7, 0x17, 0x1a, + 0x8c, 0x65, 0x54, 0x7e, 0x23, 0x05, 0xef, 0x76, 0x53, 0x63, 0x7d, 0xba, 0x34, 0x1c, 0x32, 0x72, + 0x81, 0x32, 0xf2, 0x0c, 0x39, 0x27, 0xdb, 0x1b, 0x77, 0xb4, 0x56, 0xf0, 0x94, 0xd2, 0xe5, 0x7f, + 0xd0, 0x60, 0x4a, 0x5e, 0x5b, 0x8e, 0x3c, 0x53, 0x8e, 0xb8, 0xa4, 0x88, 0x9e, 0xdd, 0x2e, 0x78, + 0x41, 0x0f, 0x42, 0xca, 0x57, 0x4c, 0x62, 0xef, 0x74, 0xc1, 0xa1, 0x02, 0x25, 0xd9, 0xd4, 0x77, + 0x4c, 0xc5, 0xab, 0x15, 0xaa, 0xef, 0x98, 0x4a, 0xd4, 0x86, 0xd3, 0xaf, 0x53, 0xf6, 0x2f, 0x93, + 0x45, 0x99, 0xf1, 0x12, 0x86, 0xba, 0xd8, 0x40, 0x7c, 0x4b, 0x83, 0xb1, 0x8c, 0x0a, 0x6b, 0x6a, + 0xd5, 0x95, 0x17, 0x85, 0x53, 0xab, 0xae, 0xa2, 0x18, 0x9c, 0xfe, 0x3c, 0x65, 0xec, 0x69, 0x72, + 0x46, 0x26, 0x57, 0x51, 0xc9, 0x36, 0x52, 0xcc, 0x37, 0xc6, 0xca, 0x77, 0x34, 0xd8, 0x2b, 0x29, + 0xbd, 0xa6, 0x5e, 0x6c, 0xd4, 0x95, 0xe3, 0xd4, 0x8b, 0x4d, 0x4e, 0xc5, 0xb8, 0x5c, 0x27, 0xde, + 0xa2, 0xf0, 0x52, 0x9e, 0xfe, 0x5a, 0x83, 0x89, 0xec, 0xca, 0x6c, 0xea, 0x3d, 0xa2, 0xb2, 0xac, + 0x9c, 0x7a, 0x8f, 0xa8, 0x2e, 0x27, 0x97, 0x6b, 0x62, 0x52, 0x72, 0xc2, 0x5a, 0xc7, 0x29, 0x51, + 0x49, 0x6a, 0xc8, 0xa9, 0x45, 0xa5, 0xae, 0xd5, 0xa9, 0x16, 0x55, 0x4e, 0xd1, 0xba, 0x5c, 0x51, + 0xb1, 0xa0, 0x70, 0x9e, 0x5e, 0x94, 0x75, 0x5e, 0x3d, 0x9a, 0xae, 0x96, 0x90, 0x7f, 0x76, 0x9b, + 0x51, 0xd4, 0x43, 0xbd, 0x8e, 0x49, 0xcb, 0x72, 0xe8, 0xb3, 0x94, 0x83, 0x27, 0xc9, 0xe3, 0x12, + 0x0e, 0x32, 0x8a, 0x23, 0x90, 0x3f, 0xd5, 0x60, 0x72, 0xb9, 0x53, 0x6e, 0xe1, 0x3e, 0x52, 0x9f, + 0x17, 0xd1, 0x14, 0x2d, 0x3a, 0x91, 0xe4, 0xe2, 0x6b, 0x3c, 0x75, 0x2f, 0x5e, 0x8d, 0x43, 0x6d, + 0xc6, 0xe4, 0x95, 0x45, 0xd4, 0x66, 0x4c, 0x51, 0x6d, 0x44, 0x3f, 0x49, 0x99, 0x98, 0x21, 0x4f, + 0x16, 0x11, 0x01, 0x2f, 0x95, 0x41, 0xde, 0xd3, 0x60, 0x22, 0xbb, 0x40, 0x82, 0x7a, 0x9a, 0x2b, + 0xab, 0x32, 0xa8, 0xa7, 0xb9, 0xba, 0x1e, 0x83, 0x3e, 0x4f, 0xf9, 0x38, 0x4f, 0x9e, 0x96, 0xf0, + 0x11, 0x2b, 0x55, 0x10, 0x2d, 0xcd, 0x10, 0x09, 0x17, 0x0a, 0x85, 0x92, 0x51, 0x9e, 0x40, 0x2d, + 0x14, 0x79, 0x19, 0x05, 0xb5, 0x50, 0x14, 0xa5, 0x15, 0x72, 0x85, 0x92, 0x59, 0x77, 0x81, 0xfc, + 0xb1, 0x06, 0xa3, 0xa9, 0x2c, 0x7a, 0xf5, 0x94, 0x90, 0xd5, 0x56, 0x50, 0x4f, 0x09, 0x69, 0xaa, + 0x7e, 0xee, 0xf1, 0x79, 0x3a, 0x8f, 0xbf, 0x72, 0x27, 0x52, 0xc3, 0xe1, 0x6d, 0xf2, 0x97, 0x1a, + 0xec, 0x95, 0xa4, 0x93, 0xab, 0x0d, 0xad, 0x3a, 0x8b, 0x5f, 0x6d, 0x68, 0x73, 0xf2, 0xd7, 0x73, + 0x27, 0x3a, 0x8f, 0x6f, 0xcf, 0xc8, 0x6e, 0x27, 0xdf, 0xd6, 0x60, 0x9f, 0x34, 0x51, 0x5c, 0x7d, + 0xaa, 0x90, 0x97, 0xc3, 0xae, 0x3e, 0x55, 0xc8, 0xcd, 0x4e, 0xd7, 0x9f, 0xa2, 0x6c, 0x1d, 0x23, + 0x33, 0x45, 0xb4, 0x8c, 0x16, 0x3b, 0x09, 0x77, 0x65, 0x3e, 0xf9, 0x9c, 0x06, 0x43, 0xf1, 0xb4, + 0x73, 0xe9, 0xd6, 0x2c, 0x33, 0x6f, 0x5d, 0xba, 0x35, 0xcb, 0xce, 0x65, 0xd7, 0x2b, 0x94, 0xce, + 0xc7, 0xc8, 0xa3, 0xb2, 0x2d, 0xa3, 0x1d, 0xb8, 0x06, 0x4b, 0x10, 0xb7, 0x29, 0x35, 0xdf, 0xd0, + 0xb0, 0xca, 0x55, 0x2a, 0x17, 0x5c, 0x3d, 0x1b, 0x64, 0x09, 0xe8, 0xea, 0xd9, 0x20, 0x4d, 0x38, + 0xcf, 0xdd, 0xa6, 0x31, 0x9a, 0x85, 0x9b, 0x51, 0xb9, 0x13, 0xcb, 0x72, 0xa7, 0xbe, 0xee, 0x44, + 0x76, 0x32, 0xb9, 0xda, 0xca, 0x2a, 0x73, 0xd8, 0xd5, 0x56, 0x56, 0x9d, 0xbb, 0x9e, 0x7b, 0x78, + 0xb8, 0x21, 0xc0, 0x8d, 0x58, 0x8e, 0x3b, 0x75, 0xdb, 0x33, 0xea, 0x08, 0xa9, 0x4d, 0xab, 0xbc, + 0x6a, 0x91, 0xda, 0xb4, 0x2a, 0x0a, 0x16, 0xe5, 0xba, 0xed, 0xd1, 0x6a, 0x46, 0x86, 0xbb, 0x86, + 0x2b, 0x9f, 0x1f, 0x59, 0x25, 0xfe, 0x56, 0x83, 0x7d, 0xd2, 0x1a, 0x45, 0xea, 0x19, 0x9d, 0x57, + 0x03, 0x49, 0x3d, 0xa3, 0x73, 0x0b, 0x23, 0xe9, 0xe7, 0x29, 0x73, 0x4f, 0x91, 0x93, 0x32, 0x8f, + 0x30, 0x83, 0x33, 0x43, 0x54, 0x5f, 0xfb, 0xaa, 0x06, 0x23, 0xc9, 0x8c, 0x77, 0xf5, 0xfd, 0x81, + 0x24, 0x7b, 0x7f, 0xea, 0x64, 0x39, 0xa0, 0x82, 0xd4, 0x77, 0xfe, 0x5b, 0x3d, 0x42, 0xc6, 0x5c, + 0xf4, 0x2f, 0x69, 0x30, 0x9e, 0x91, 0x3b, 0xee, 0xab, 0x23, 0x98, 0xb2, 0x32, 0xdc, 0xd5, 0x11, + 0x4c, 0x99, 0xe9, 0xed, 0xb9, 0xc1, 0x17, 0xab, 0x14, 0x8a, 0x17, 0x2a, 0x10, 0x57, 0x36, 0x9f, + 0xec, 0x82, 0x83, 0xb9, 0x69, 0xcb, 0xea, 0x23, 0xd8, 0xa2, 0xa9, 0xf0, 0xea, 0x23, 0xd8, 0xc2, + 0xb9, 0xd3, 0xfa, 0x2b, 0x94, 0xd3, 0x2a, 0x59, 0x2e, 0x7c, 0xad, 0x5a, 0xeb, 0xe0, 0x52, 0xde, + 0xba, 0xfd, 0x54, 0x03, 0x3d, 0x3f, 0x61, 0x94, 0x5c, 0xcc, 0x57, 0xae, 0x02, 0xf9, 0xab, 0x53, + 0x8b, 0x77, 0x8b, 0xa6, 0xa0, 0x73, 0x60, 0x52, 0x24, 0x58, 0x6c, 0x32, 0x5c, 0x52, 0x3b, 0xe9, + 0xaa, 0xe4, 0x0f, 0x34, 0x18, 0x49, 0xe6, 0x9b, 0xe6, 0xc4, 0xa7, 0x67, 0x27, 0xb6, 0xe6, 0xc4, + 0xa7, 0x4b, 0x52, 0x5a, 0x73, 0x63, 0x05, 0x4d, 0x76, 0x32, 0xe3, 0x87, 0x90, 0x2c, 0xb5, 0xb2, + 0x72, 0x07, 0xd3, 0x45, 0xe9, 0x21, 0x22, 0x49, 0xa7, 0x40, 0xaa, 0xa3, 0x6b, 0xa4, 0x19, 0xab, + 0xea, 0xe8, 0x1a, 0x79, 0x4a, 0x6a, 0x6e, 0xfc, 0x1d, 0x26, 0x84, 0x46, 0x61, 0x39, 0x0f, 0xde, + 0xdb, 0x11, 0x6e, 0xbe, 0xa1, 0xc1, 0x58, 0x46, 0x86, 0x29, 0x29, 0x49, 0x57, 0xb1, 0x05, 0x4a, + 0x91, 0xca, 0x9a, 0xbb, 0xab, 0xcf, 0x60, 0xc8, 0xef, 0x70, 0x44, 0x23, 0x38, 0xe3, 0x39, 0x96, + 0xc7, 0xf2, 0x15, 0x3d, 0x9e, 0xa0, 0xaa, 0xb6, 0x7f, 0x99, 0x89, 0xa9, 0xb9, 0x11, 0x9c, 0x38, + 0xed, 0xd1, 0x37, 0x8e, 0x19, 0xee, 0x5f, 0x0b, 0xdd, 0xc9, 0x58, 0xc6, 0x29, 0x29, 0x4e, 0x40, + 0xb1, 0x3c, 0xaa, 0xec, 0x84, 0x56, 0x7d, 0x86, 0x12, 0x7d, 0x84, 0x3c, 0x52, 0x88, 0x68, 0x9f, + 0xfc, 0x3e, 0xbd, 0x60, 0x8f, 0xe7, 0x4d, 0xe6, 0x5d, 0xb0, 0x67, 0xe6, 0x9e, 0xe6, 0x5d, 0xb0, + 0x67, 0xa7, 0x9e, 0xe6, 0x0e, 0x72, 0x3a, 0x2f, 0x54, 0x44, 0xe4, 0xbf, 0x4b, 0x23, 0x1a, 0x12, + 0x29, 0x9f, 0xa4, 0x14, 0x19, 0x45, 0x23, 0x1a, 0x24, 0x89, 0xab, 0xb9, 0x87, 0x3d, 0x19, 0x59, + 0xad, 0xe4, 0x57, 0xb4, 0x44, 0x52, 0x6a, 0x45, 0xed, 0x20, 0xa5, 0xb2, 0x49, 0xa7, 0x8e, 0x15, + 0x07, 0x40, 0x3a, 0x9f, 0xa4, 0x74, 0x3e, 0x42, 0x1e, 0x96, 0x3a, 0x51, 0x96, 0x63, 0xd8, 0x08, + 0x35, 0x7f, 0xeb, 0x5b, 0x3f, 0xdc, 0xaf, 0x7d, 0xfb, 0x87, 0xfb, 0xb5, 0x1f, 0xfc, 0x70, 0xbf, + 0xf6, 0xe9, 0x1f, 0xed, 0xdf, 0xf1, 0xed, 0x1f, 0xed, 0xdf, 0xf1, 0xbd, 0x1f, 0xed, 0xdf, 0xf1, + 0xea, 0x0b, 0xeb, 0x76, 0xb0, 0xd1, 0x5e, 0x9d, 0xa9, 0xb9, 0xcd, 0xca, 0x15, 0x8e, 0x69, 0xc9, + 0x5c, 0xf5, 0x3b, 0x78, 0x8f, 0xd6, 0x5c, 0xcf, 0x8a, 0x3e, 0x6e, 0x98, 0xb6, 0x83, 0x57, 0x60, + 0x7e, 0xa7, 0xd3, 0x60, 0xab, 0x65, 0xf9, 0x95, 0xcd, 0xd9, 0xd5, 0xde, 0x96, 0xe7, 0x06, 0xee, + 0x89, 0xff, 0x0a, 0x00, 0x00, 0xff, 0xff, 0xa3, 0x8d, 0x06, 0xd4, 0x14, 0x8f, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -8548,6 +8815,11 @@ type QueryClient interface { SubaccountTradeNonce(ctx context.Context, in *QuerySubaccountTradeNonceRequest, opts ...grpc.CallOption) (*QuerySubaccountTradeNonceResponse, error) // Retrieves a subaccount's risk profile SubaccountRiskProfile(ctx context.Context, in *QuerySubaccountRiskProfileRequest, opts ...grpc.CallOption) (*QuerySubaccountRiskProfileResponse, error) + // Retrieves a subaccount's explicit per-market margin-mode records + SubaccountMarketRiskModes(ctx context.Context, in *QuerySubaccountMarketRiskModesRequest, opts ...grpc.CallOption) (*QuerySubaccountMarketRiskModesResponse, error) + // Resolves the effective margin mode of one derivative market for a + // subaccount (binary options pin -> explicit record -> profile default) + EffectiveSubaccountMarketRiskMode(ctx context.Context, in *QueryEffectiveSubaccountMarketRiskModeRequest, opts ...grpc.CallOption) (*QueryEffectiveSubaccountMarketRiskModeResponse, error) // Retrieves a subaccount's cross-margin pool snapshot for a given quote // denom. Returns current equity, order lock requirement, margin requirements, // and other risk metrics needed to understand cross-margin health. @@ -8939,6 +9211,24 @@ func (c *queryClient) SubaccountRiskProfile(ctx context.Context, in *QuerySubacc return out, nil } +func (c *queryClient) SubaccountMarketRiskModes(ctx context.Context, in *QuerySubaccountMarketRiskModesRequest, opts ...grpc.CallOption) (*QuerySubaccountMarketRiskModesResponse, error) { + out := new(QuerySubaccountMarketRiskModesResponse) + err := c.cc.Invoke(ctx, "/injective.exchange.v2.Query/SubaccountMarketRiskModes", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) EffectiveSubaccountMarketRiskMode(ctx context.Context, in *QueryEffectiveSubaccountMarketRiskModeRequest, opts ...grpc.CallOption) (*QueryEffectiveSubaccountMarketRiskModeResponse, error) { + out := new(QueryEffectiveSubaccountMarketRiskModeResponse) + err := c.cc.Invoke(ctx, "/injective.exchange.v2.Query/EffectiveSubaccountMarketRiskMode", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *queryClient) CrossMarginPoolSnapshot(ctx context.Context, in *QueryCrossMarginPoolSnapshotRequest, opts ...grpc.CallOption) (*QueryCrossMarginPoolSnapshotResponse, error) { out := new(QueryCrossMarginPoolSnapshotResponse) err := c.cc.Invoke(ctx, "/injective.exchange.v2.Query/CrossMarginPoolSnapshot", in, out, opts...) @@ -9334,6 +9624,11 @@ type QueryServer interface { SubaccountTradeNonce(context.Context, *QuerySubaccountTradeNonceRequest) (*QuerySubaccountTradeNonceResponse, error) // Retrieves a subaccount's risk profile SubaccountRiskProfile(context.Context, *QuerySubaccountRiskProfileRequest) (*QuerySubaccountRiskProfileResponse, error) + // Retrieves a subaccount's explicit per-market margin-mode records + SubaccountMarketRiskModes(context.Context, *QuerySubaccountMarketRiskModesRequest) (*QuerySubaccountMarketRiskModesResponse, error) + // Resolves the effective margin mode of one derivative market for a + // subaccount (binary options pin -> explicit record -> profile default) + EffectiveSubaccountMarketRiskMode(context.Context, *QueryEffectiveSubaccountMarketRiskModeRequest) (*QueryEffectiveSubaccountMarketRiskModeResponse, error) // Retrieves a subaccount's cross-margin pool snapshot for a given quote // denom. Returns current equity, order lock requirement, margin requirements, // and other risk metrics needed to understand cross-margin health. @@ -9517,6 +9812,12 @@ func (*UnimplementedQueryServer) SubaccountTradeNonce(ctx context.Context, req * func (*UnimplementedQueryServer) SubaccountRiskProfile(ctx context.Context, req *QuerySubaccountRiskProfileRequest) (*QuerySubaccountRiskProfileResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method SubaccountRiskProfile not implemented") } +func (*UnimplementedQueryServer) SubaccountMarketRiskModes(ctx context.Context, req *QuerySubaccountMarketRiskModesRequest) (*QuerySubaccountMarketRiskModesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SubaccountMarketRiskModes not implemented") +} +func (*UnimplementedQueryServer) EffectiveSubaccountMarketRiskMode(ctx context.Context, req *QueryEffectiveSubaccountMarketRiskModeRequest) (*QueryEffectiveSubaccountMarketRiskModeResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method EffectiveSubaccountMarketRiskMode not implemented") +} func (*UnimplementedQueryServer) CrossMarginPoolSnapshot(ctx context.Context, req *QueryCrossMarginPoolSnapshotRequest) (*QueryCrossMarginPoolSnapshotResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method CrossMarginPoolSnapshot not implemented") } @@ -10242,6 +10543,42 @@ func _Query_SubaccountRiskProfile_Handler(srv interface{}, ctx context.Context, return interceptor(ctx, in, info, handler) } +func _Query_SubaccountMarketRiskModes_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QuerySubaccountMarketRiskModesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).SubaccountMarketRiskModes(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/injective.exchange.v2.Query/SubaccountMarketRiskModes", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).SubaccountMarketRiskModes(ctx, req.(*QuerySubaccountMarketRiskModesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_EffectiveSubaccountMarketRiskMode_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryEffectiveSubaccountMarketRiskModeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).EffectiveSubaccountMarketRiskMode(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/injective.exchange.v2.Query/EffectiveSubaccountMarketRiskMode", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).EffectiveSubaccountMarketRiskMode(ctx, req.(*QueryEffectiveSubaccountMarketRiskModeRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _Query_CrossMarginPoolSnapshot_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(QueryCrossMarginPoolSnapshotRequest) if err := dec(in); err != nil { @@ -11030,6 +11367,14 @@ var _Query_serviceDesc = grpc.ServiceDesc{ MethodName: "SubaccountRiskProfile", Handler: _Query_SubaccountRiskProfile_Handler, }, + { + MethodName: "SubaccountMarketRiskModes", + Handler: _Query_SubaccountMarketRiskModes_Handler, + }, + { + MethodName: "EffectiveSubaccountMarketRiskMode", + Handler: _Query_EffectiveSubaccountMarketRiskMode_Handler, + }, { MethodName: "CrossMarginPoolSnapshot", Handler: _Query_CrossMarginPoolSnapshot_Handler, @@ -14721,6 +15066,148 @@ func (m *QuerySubaccountRiskProfileResponse) MarshalToSizedBuffer(dAtA []byte) ( return len(dAtA) - i, nil } +func (m *QuerySubaccountMarketRiskModesRequest) 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 *QuerySubaccountMarketRiskModesRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QuerySubaccountMarketRiskModesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.SubaccountId) > 0 { + i -= len(m.SubaccountId) + copy(dAtA[i:], m.SubaccountId) + i = encodeVarintQuery(dAtA, i, uint64(len(m.SubaccountId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QuerySubaccountMarketRiskModesResponse) 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 *QuerySubaccountMarketRiskModesResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QuerySubaccountMarketRiskModesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Records) > 0 { + for iNdEx := len(m.Records) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Records[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *QueryEffectiveSubaccountMarketRiskModeRequest) 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 *QueryEffectiveSubaccountMarketRiskModeRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryEffectiveSubaccountMarketRiskModeRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.MarketId) > 0 { + i -= len(m.MarketId) + copy(dAtA[i:], m.MarketId) + i = encodeVarintQuery(dAtA, i, uint64(len(m.MarketId))) + i-- + dAtA[i] = 0x12 + } + if len(m.SubaccountId) > 0 { + i -= len(m.SubaccountId) + copy(dAtA[i:], m.SubaccountId) + i = encodeVarintQuery(dAtA, i, uint64(len(m.SubaccountId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryEffectiveSubaccountMarketRiskModeResponse) 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 *QueryEffectiveSubaccountMarketRiskModeResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryEffectiveSubaccountMarketRiskModeResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.IsOverride { + i-- + if m.IsOverride { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x10 + } + if m.Mode != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.Mode)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + func (m *QueryCrossMarginPoolSnapshotRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -14778,6 +15265,54 @@ func (m *QueryCrossMarginPoolSnapshotResponse) MarshalToSizedBuffer(dAtA []byte) _ = i var l int _ = l + { + size := m.NonPositionOrderLockRequirement.Size() + i -= size + if _, err := m.NonPositionOrderLockRequirement.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xa2 + { + size := m.PositionOrderLockRequirement.Size() + i -= size + if _, err := m.PositionOrderLockRequirement.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x9a + { + size := m.CrossMarginUtilRatio.Size() + i -= size + if _, err := m.CrossMarginUtilRatio.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x92 + { + size := m.RatchetedMaintenanceMarginTotal.Size() + i -= size + if _, err := m.RatchetedMaintenanceMarginTotal.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x8a if m.HealthFactor != nil { { size := m.HealthFactor.Size() @@ -18832,6 +19367,66 @@ func (m *QuerySubaccountRiskProfileResponse) Size() (n int) { return n } +func (m *QuerySubaccountMarketRiskModesRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.SubaccountId) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QuerySubaccountMarketRiskModesResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Records) > 0 { + for _, e := range m.Records { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + return n +} + +func (m *QueryEffectiveSubaccountMarketRiskModeRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.SubaccountId) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.MarketId) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryEffectiveSubaccountMarketRiskModeResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Mode != 0 { + n += 1 + sovQuery(uint64(m.Mode)) + } + if m.IsOverride { + n += 2 + } + return n +} + func (m *QueryCrossMarginPoolSnapshotRequest) Size() (n int) { if m == nil { return 0 @@ -18889,6 +19484,14 @@ func (m *QueryCrossMarginPoolSnapshotResponse) Size() (n int) { l = m.HealthFactor.Size() n += 1 + l + sovQuery(uint64(l)) } + l = m.RatchetedMaintenanceMarginTotal.Size() + n += 2 + l + sovQuery(uint64(l)) + l = m.CrossMarginUtilRatio.Size() + n += 2 + l + sovQuery(uint64(l)) + l = m.PositionOrderLockRequirement.Size() + n += 2 + l + sovQuery(uint64(l)) + l = m.NonPositionOrderLockRequirement.Size() + n += 2 + l + sovQuery(uint64(l)) return n } @@ -29318,6 +29921,375 @@ func (m *QuerySubaccountRiskProfileResponse) Unmarshal(dAtA []byte) error { } return nil } +func (m *QuerySubaccountMarketRiskModesRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QuerySubaccountMarketRiskModesRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QuerySubaccountMarketRiskModesRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SubaccountId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SubaccountId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QuerySubaccountMarketRiskModesResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QuerySubaccountMarketRiskModesResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QuerySubaccountMarketRiskModesResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Records", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Records = append(m.Records, &SubaccountMarketRiskModeRecord{}) + if err := m.Records[len(m.Records)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryEffectiveSubaccountMarketRiskModeRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryEffectiveSubaccountMarketRiskModeRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryEffectiveSubaccountMarketRiskModeRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SubaccountId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SubaccountId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MarketId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.MarketId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryEffectiveSubaccountMarketRiskModeResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryEffectiveSubaccountMarketRiskModeResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryEffectiveSubaccountMarketRiskModeResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Mode", wireType) + } + m.Mode = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Mode |= RiskMode(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field IsOverride", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.IsOverride = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *QueryCrossMarginPoolSnapshotRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -29971,6 +30943,142 @@ func (m *QueryCrossMarginPoolSnapshotResponse) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 17: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RatchetedMaintenanceMarginTotal", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.RatchetedMaintenanceMarginTotal.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 18: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CrossMarginUtilRatio", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.CrossMarginUtilRatio.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 19: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PositionOrderLockRequirement", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.PositionOrderLockRequirement.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 20: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonPositionOrderLockRequirement", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.NonPositionOrderLockRequirement.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) diff --git a/chain/exchange/types/v2/tx.pb.go b/chain/exchange/types/v2/tx.pb.go index 6db66263d..f39562b9a 100644 --- a/chain/exchange/types/v2/tx.pb.go +++ b/chain/exchange/types/v2/tx.pb.go @@ -241,8 +241,12 @@ type MsgUpdateParams struct { // authority is the address of the governance account. Authority string `protobuf:"bytes,1,opt,name=authority,proto3" json:"authority,omitempty"` // params defines the exchange parameters to update. - // - // NOTE: All parameters must be supplied. + // Callers should supply a full Params object. Some parameter groups still + // preserve omitted fields, but cross_margin_params is treated as a full + // replacement. Sparse/raw payloads must include the full intended + // cross_margin_params payload because decoded false/zero/empty values are + // applied literally when they pass validation, including valid explicit + // zeros such as backstop_margin_ratio = 0. Params Params `protobuf:"bytes,2,opt,name=params,proto3" json:"params"` } @@ -576,6 +580,96 @@ func (m *MsgUpdateSubaccountRiskProfileResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgUpdateSubaccountRiskProfileResponse proto.InternalMessageInfo +// MsgUpdateSubaccountMarketRiskMode defines a SDK message for pinning one +// derivative market's margin mode for a subaccount, or unpinning it back to +// the profile default (mode UNSPECIFIED). +type MsgUpdateSubaccountMarketRiskMode struct { + // the sender's Injective address + Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty"` + // the subaccount ID to update the market's margin mode for + SubaccountId string `protobuf:"bytes,2,opt,name=subaccount_id,json=subaccountId,proto3" json:"subaccount_id,omitempty"` + // the derivative market whose mode is pinned or unpinned + MarketId string `protobuf:"bytes,3,opt,name=market_id,json=marketId,proto3" json:"market_id,omitempty"` + // the requested mode: ISOLATED or CROSS pins, UNSPECIFIED unpins back to + // the profile default (subject to eligibility & safety gates) + Mode RiskMode `protobuf:"varint,4,opt,name=mode,proto3,enum=injective.exchange.v2.RiskMode" json:"mode,omitempty"` +} + +func (m *MsgUpdateSubaccountMarketRiskMode) Reset() { *m = MsgUpdateSubaccountMarketRiskMode{} } +func (m *MsgUpdateSubaccountMarketRiskMode) String() string { return proto.CompactTextString(m) } +func (*MsgUpdateSubaccountMarketRiskMode) ProtoMessage() {} +func (*MsgUpdateSubaccountMarketRiskMode) Descriptor() ([]byte, []int) { + return fileDescriptor_7c861fb1c14863a5, []int{12} +} +func (m *MsgUpdateSubaccountMarketRiskMode) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgUpdateSubaccountMarketRiskMode) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgUpdateSubaccountMarketRiskMode.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 *MsgUpdateSubaccountMarketRiskMode) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgUpdateSubaccountMarketRiskMode.Merge(m, src) +} +func (m *MsgUpdateSubaccountMarketRiskMode) XXX_Size() int { + return m.Size() +} +func (m *MsgUpdateSubaccountMarketRiskMode) XXX_DiscardUnknown() { + xxx_messageInfo_MsgUpdateSubaccountMarketRiskMode.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgUpdateSubaccountMarketRiskMode proto.InternalMessageInfo + +// MsgUpdateSubaccountMarketRiskModeResponse defines the +// Msg/UpdateSubaccountMarketRiskMode response type. +type MsgUpdateSubaccountMarketRiskModeResponse struct { +} + +func (m *MsgUpdateSubaccountMarketRiskModeResponse) Reset() { + *m = MsgUpdateSubaccountMarketRiskModeResponse{} +} +func (m *MsgUpdateSubaccountMarketRiskModeResponse) String() string { + return proto.CompactTextString(m) +} +func (*MsgUpdateSubaccountMarketRiskModeResponse) ProtoMessage() {} +func (*MsgUpdateSubaccountMarketRiskModeResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_7c861fb1c14863a5, []int{13} +} +func (m *MsgUpdateSubaccountMarketRiskModeResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgUpdateSubaccountMarketRiskModeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgUpdateSubaccountMarketRiskModeResponse.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 *MsgUpdateSubaccountMarketRiskModeResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgUpdateSubaccountMarketRiskModeResponse.Merge(m, src) +} +func (m *MsgUpdateSubaccountMarketRiskModeResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgUpdateSubaccountMarketRiskModeResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgUpdateSubaccountMarketRiskModeResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgUpdateSubaccountMarketRiskModeResponse proto.InternalMessageInfo + // MsgCreateSpotLimitOrder defines a SDK message for creating a new spot limit // order. type MsgCreateSpotLimitOrder struct { @@ -589,7 +683,7 @@ func (m *MsgCreateSpotLimitOrder) Reset() { *m = MsgCreateSpotLimitOrder func (m *MsgCreateSpotLimitOrder) String() string { return proto.CompactTextString(m) } func (*MsgCreateSpotLimitOrder) ProtoMessage() {} func (*MsgCreateSpotLimitOrder) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{12} + return fileDescriptor_7c861fb1c14863a5, []int{14} } func (m *MsgCreateSpotLimitOrder) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -629,7 +723,7 @@ func (m *MsgCreateSpotLimitOrderResponse) Reset() { *m = MsgCreateSpotLi func (m *MsgCreateSpotLimitOrderResponse) String() string { return proto.CompactTextString(m) } func (*MsgCreateSpotLimitOrderResponse) ProtoMessage() {} func (*MsgCreateSpotLimitOrderResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{13} + return fileDescriptor_7c861fb1c14863a5, []int{15} } func (m *MsgCreateSpotLimitOrderResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -669,7 +763,7 @@ func (m *MsgBatchCreateSpotLimitOrders) Reset() { *m = MsgBatchCreateSpo func (m *MsgBatchCreateSpotLimitOrders) String() string { return proto.CompactTextString(m) } func (*MsgBatchCreateSpotLimitOrders) ProtoMessage() {} func (*MsgBatchCreateSpotLimitOrders) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{14} + return fileDescriptor_7c861fb1c14863a5, []int{16} } func (m *MsgBatchCreateSpotLimitOrders) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -710,7 +804,7 @@ func (m *MsgBatchCreateSpotLimitOrdersResponse) Reset() { *m = MsgBatchC func (m *MsgBatchCreateSpotLimitOrdersResponse) String() string { return proto.CompactTextString(m) } func (*MsgBatchCreateSpotLimitOrdersResponse) ProtoMessage() {} func (*MsgBatchCreateSpotLimitOrdersResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{15} + return fileDescriptor_7c861fb1c14863a5, []int{17} } func (m *MsgBatchCreateSpotLimitOrdersResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -769,7 +863,7 @@ func (m *MsgInstantSpotMarketLaunch) Reset() { *m = MsgInstantSpotMarket func (m *MsgInstantSpotMarketLaunch) String() string { return proto.CompactTextString(m) } func (*MsgInstantSpotMarketLaunch) ProtoMessage() {} func (*MsgInstantSpotMarketLaunch) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{16} + return fileDescriptor_7c861fb1c14863a5, []int{18} } func (m *MsgInstantSpotMarketLaunch) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -807,7 +901,7 @@ func (m *MsgInstantSpotMarketLaunchResponse) Reset() { *m = MsgInstantSp func (m *MsgInstantSpotMarketLaunchResponse) String() string { return proto.CompactTextString(m) } func (*MsgInstantSpotMarketLaunchResponse) ProtoMessage() {} func (*MsgInstantSpotMarketLaunchResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{17} + return fileDescriptor_7c861fb1c14863a5, []int{19} } func (m *MsgInstantSpotMarketLaunchResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -886,7 +980,7 @@ func (m *MsgInstantPerpetualMarketLaunch) Reset() { *m = MsgInstantPerpe func (m *MsgInstantPerpetualMarketLaunch) String() string { return proto.CompactTextString(m) } func (*MsgInstantPerpetualMarketLaunch) ProtoMessage() {} func (*MsgInstantPerpetualMarketLaunch) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{18} + return fileDescriptor_7c861fb1c14863a5, []int{20} } func (m *MsgInstantPerpetualMarketLaunch) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -926,7 +1020,7 @@ func (m *MsgInstantPerpetualMarketLaunchResponse) Reset() { func (m *MsgInstantPerpetualMarketLaunchResponse) String() string { return proto.CompactTextString(m) } func (*MsgInstantPerpetualMarketLaunchResponse) ProtoMessage() {} func (*MsgInstantPerpetualMarketLaunchResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{19} + return fileDescriptor_7c861fb1c14863a5, []int{21} } func (m *MsgInstantPerpetualMarketLaunchResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1000,7 +1094,7 @@ func (m *MsgInstantBinaryOptionsMarketLaunch) Reset() { *m = MsgInstantB func (m *MsgInstantBinaryOptionsMarketLaunch) String() string { return proto.CompactTextString(m) } func (*MsgInstantBinaryOptionsMarketLaunch) ProtoMessage() {} func (*MsgInstantBinaryOptionsMarketLaunch) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{20} + return fileDescriptor_7c861fb1c14863a5, []int{22} } func (m *MsgInstantBinaryOptionsMarketLaunch) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1042,7 +1136,7 @@ func (m *MsgInstantBinaryOptionsMarketLaunchResponse) String() string { } func (*MsgInstantBinaryOptionsMarketLaunchResponse) ProtoMessage() {} func (*MsgInstantBinaryOptionsMarketLaunchResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{21} + return fileDescriptor_7c861fb1c14863a5, []int{23} } func (m *MsgInstantBinaryOptionsMarketLaunchResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1122,7 +1216,7 @@ func (m *MsgInstantExpiryFuturesMarketLaunch) Reset() { *m = MsgInstantE func (m *MsgInstantExpiryFuturesMarketLaunch) String() string { return proto.CompactTextString(m) } func (*MsgInstantExpiryFuturesMarketLaunch) ProtoMessage() {} func (*MsgInstantExpiryFuturesMarketLaunch) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{22} + return fileDescriptor_7c861fb1c14863a5, []int{24} } func (m *MsgInstantExpiryFuturesMarketLaunch) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1164,7 +1258,7 @@ func (m *MsgInstantExpiryFuturesMarketLaunchResponse) String() string { } func (*MsgInstantExpiryFuturesMarketLaunchResponse) ProtoMessage() {} func (*MsgInstantExpiryFuturesMarketLaunchResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{23} + return fileDescriptor_7c861fb1c14863a5, []int{25} } func (m *MsgInstantExpiryFuturesMarketLaunchResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1206,7 +1300,7 @@ func (m *MsgCreateSpotMarketOrder) Reset() { *m = MsgCreateSpotMarketOrd func (m *MsgCreateSpotMarketOrder) String() string { return proto.CompactTextString(m) } func (*MsgCreateSpotMarketOrder) ProtoMessage() {} func (*MsgCreateSpotMarketOrder) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{24} + return fileDescriptor_7c861fb1c14863a5, []int{26} } func (m *MsgCreateSpotMarketOrder) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1247,7 +1341,7 @@ func (m *MsgCreateSpotMarketOrderResponse) Reset() { *m = MsgCreateSpotM func (m *MsgCreateSpotMarketOrderResponse) String() string { return proto.CompactTextString(m) } func (*MsgCreateSpotMarketOrderResponse) ProtoMessage() {} func (*MsgCreateSpotMarketOrderResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{25} + return fileDescriptor_7c861fb1c14863a5, []int{27} } func (m *MsgCreateSpotMarketOrderResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1286,7 +1380,7 @@ func (m *SpotMarketOrderResults) Reset() { *m = SpotMarketOrderResults{} func (m *SpotMarketOrderResults) String() string { return proto.CompactTextString(m) } func (*SpotMarketOrderResults) ProtoMessage() {} func (*SpotMarketOrderResults) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{26} + return fileDescriptor_7c861fb1c14863a5, []int{28} } func (m *SpotMarketOrderResults) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1327,7 +1421,7 @@ func (m *MsgCreateDerivativeLimitOrder) Reset() { *m = MsgCreateDerivati func (m *MsgCreateDerivativeLimitOrder) String() string { return proto.CompactTextString(m) } func (*MsgCreateDerivativeLimitOrder) ProtoMessage() {} func (*MsgCreateDerivativeLimitOrder) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{27} + return fileDescriptor_7c861fb1c14863a5, []int{29} } func (m *MsgCreateDerivativeLimitOrder) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1367,7 +1461,7 @@ func (m *MsgCreateDerivativeLimitOrderResponse) Reset() { *m = MsgCreate func (m *MsgCreateDerivativeLimitOrderResponse) String() string { return proto.CompactTextString(m) } func (*MsgCreateDerivativeLimitOrderResponse) ProtoMessage() {} func (*MsgCreateDerivativeLimitOrderResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{28} + return fileDescriptor_7c861fb1c14863a5, []int{30} } func (m *MsgCreateDerivativeLimitOrderResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1408,7 +1502,7 @@ func (m *MsgCreateBinaryOptionsLimitOrder) Reset() { *m = MsgCreateBinar func (m *MsgCreateBinaryOptionsLimitOrder) String() string { return proto.CompactTextString(m) } func (*MsgCreateBinaryOptionsLimitOrder) ProtoMessage() {} func (*MsgCreateBinaryOptionsLimitOrder) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{29} + return fileDescriptor_7c861fb1c14863a5, []int{31} } func (m *MsgCreateBinaryOptionsLimitOrder) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1450,7 +1544,7 @@ func (m *MsgCreateBinaryOptionsLimitOrderResponse) Reset() { func (m *MsgCreateBinaryOptionsLimitOrderResponse) String() string { return proto.CompactTextString(m) } func (*MsgCreateBinaryOptionsLimitOrderResponse) ProtoMessage() {} func (*MsgCreateBinaryOptionsLimitOrderResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{30} + return fileDescriptor_7c861fb1c14863a5, []int{32} } func (m *MsgCreateBinaryOptionsLimitOrderResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1491,7 +1585,7 @@ func (m *MsgBatchCreateDerivativeLimitOrders) Reset() { *m = MsgBatchCre func (m *MsgBatchCreateDerivativeLimitOrders) String() string { return proto.CompactTextString(m) } func (*MsgBatchCreateDerivativeLimitOrders) ProtoMessage() {} func (*MsgBatchCreateDerivativeLimitOrders) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{31} + return fileDescriptor_7c861fb1c14863a5, []int{33} } func (m *MsgBatchCreateDerivativeLimitOrders) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1536,7 +1630,7 @@ func (m *MsgBatchCreateDerivativeLimitOrdersResponse) String() string { } func (*MsgBatchCreateDerivativeLimitOrdersResponse) ProtoMessage() {} func (*MsgBatchCreateDerivativeLimitOrdersResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{32} + return fileDescriptor_7c861fb1c14863a5, []int{34} } func (m *MsgBatchCreateDerivativeLimitOrdersResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1583,7 +1677,7 @@ func (m *MsgCancelSpotOrder) Reset() { *m = MsgCancelSpotOrder{} } func (m *MsgCancelSpotOrder) String() string { return proto.CompactTextString(m) } func (*MsgCancelSpotOrder) ProtoMessage() {} func (*MsgCancelSpotOrder) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{33} + return fileDescriptor_7c861fb1c14863a5, []int{35} } func (m *MsgCancelSpotOrder) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1620,7 +1714,7 @@ func (m *MsgCancelSpotOrderResponse) Reset() { *m = MsgCancelSpotOrderRe func (m *MsgCancelSpotOrderResponse) String() string { return proto.CompactTextString(m) } func (*MsgCancelSpotOrderResponse) ProtoMessage() {} func (*MsgCancelSpotOrderResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{34} + return fileDescriptor_7c861fb1c14863a5, []int{36} } func (m *MsgCancelSpotOrderResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1659,7 +1753,7 @@ func (m *MsgBatchCancelSpotOrders) Reset() { *m = MsgBatchCancelSpotOrde func (m *MsgBatchCancelSpotOrders) String() string { return proto.CompactTextString(m) } func (*MsgBatchCancelSpotOrders) ProtoMessage() {} func (*MsgBatchCancelSpotOrders) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{35} + return fileDescriptor_7c861fb1c14863a5, []int{37} } func (m *MsgBatchCancelSpotOrders) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1698,7 +1792,7 @@ func (m *MsgBatchCancelSpotOrdersResponse) Reset() { *m = MsgBatchCancel func (m *MsgBatchCancelSpotOrdersResponse) String() string { return proto.CompactTextString(m) } func (*MsgBatchCancelSpotOrdersResponse) ProtoMessage() {} func (*MsgBatchCancelSpotOrdersResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{36} + return fileDescriptor_7c861fb1c14863a5, []int{38} } func (m *MsgBatchCancelSpotOrdersResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1738,7 +1832,7 @@ func (m *MsgBatchCancelBinaryOptionsOrders) Reset() { *m = MsgBatchCance func (m *MsgBatchCancelBinaryOptionsOrders) String() string { return proto.CompactTextString(m) } func (*MsgBatchCancelBinaryOptionsOrders) ProtoMessage() {} func (*MsgBatchCancelBinaryOptionsOrders) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{37} + return fileDescriptor_7c861fb1c14863a5, []int{39} } func (m *MsgBatchCancelBinaryOptionsOrders) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1781,7 +1875,7 @@ func (m *MsgBatchCancelBinaryOptionsOrdersResponse) String() string { } func (*MsgBatchCancelBinaryOptionsOrdersResponse) ProtoMessage() {} func (*MsgBatchCancelBinaryOptionsOrdersResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{38} + return fileDescriptor_7c861fb1c14863a5, []int{40} } func (m *MsgBatchCancelBinaryOptionsOrdersResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1847,7 +1941,7 @@ func (m *MsgBatchUpdateOrders) Reset() { *m = MsgBatchUpdateOrders{} } func (m *MsgBatchUpdateOrders) String() string { return proto.CompactTextString(m) } func (*MsgBatchUpdateOrders) ProtoMessage() {} func (*MsgBatchUpdateOrders) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{39} + return fileDescriptor_7c861fb1c14863a5, []int{41} } func (m *MsgBatchUpdateOrders) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1905,7 +1999,7 @@ func (m *MsgBatchUpdateOrdersResponse) Reset() { *m = MsgBatchUpdateOrde func (m *MsgBatchUpdateOrdersResponse) String() string { return proto.CompactTextString(m) } func (*MsgBatchUpdateOrdersResponse) ProtoMessage() {} func (*MsgBatchUpdateOrdersResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{40} + return fileDescriptor_7c861fb1c14863a5, []int{42} } func (m *MsgBatchUpdateOrdersResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1946,7 +2040,7 @@ func (m *MsgCreateDerivativeMarketOrder) Reset() { *m = MsgCreateDerivat func (m *MsgCreateDerivativeMarketOrder) String() string { return proto.CompactTextString(m) } func (*MsgCreateDerivativeMarketOrder) ProtoMessage() {} func (*MsgCreateDerivativeMarketOrder) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{41} + return fileDescriptor_7c861fb1c14863a5, []int{43} } func (m *MsgCreateDerivativeMarketOrder) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1989,7 +2083,7 @@ func (m *MsgCreateDerivativeMarketOrderResponse) Reset() { func (m *MsgCreateDerivativeMarketOrderResponse) String() string { return proto.CompactTextString(m) } func (*MsgCreateDerivativeMarketOrderResponse) ProtoMessage() {} func (*MsgCreateDerivativeMarketOrderResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{42} + return fileDescriptor_7c861fb1c14863a5, []int{44} } func (m *MsgCreateDerivativeMarketOrderResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2030,7 +2124,7 @@ func (m *DerivativeMarketOrderResults) Reset() { *m = DerivativeMarketOr func (m *DerivativeMarketOrderResults) String() string { return proto.CompactTextString(m) } func (*DerivativeMarketOrderResults) ProtoMessage() {} func (*DerivativeMarketOrderResults) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{43} + return fileDescriptor_7c861fb1c14863a5, []int{45} } func (m *DerivativeMarketOrderResults) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2071,7 +2165,7 @@ func (m *MsgCreateBinaryOptionsMarketOrder) Reset() { *m = MsgCreateBina func (m *MsgCreateBinaryOptionsMarketOrder) String() string { return proto.CompactTextString(m) } func (*MsgCreateBinaryOptionsMarketOrder) ProtoMessage() {} func (*MsgCreateBinaryOptionsMarketOrder) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{44} + return fileDescriptor_7c861fb1c14863a5, []int{46} } func (m *MsgCreateBinaryOptionsMarketOrder) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2116,7 +2210,7 @@ func (m *MsgCreateBinaryOptionsMarketOrderResponse) String() string { } func (*MsgCreateBinaryOptionsMarketOrderResponse) ProtoMessage() {} func (*MsgCreateBinaryOptionsMarketOrderResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{45} + return fileDescriptor_7c861fb1c14863a5, []int{47} } func (m *MsgCreateBinaryOptionsMarketOrderResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2165,7 +2259,7 @@ func (m *MsgCancelDerivativeOrder) Reset() { *m = MsgCancelDerivativeOrd func (m *MsgCancelDerivativeOrder) String() string { return proto.CompactTextString(m) } func (*MsgCancelDerivativeOrder) ProtoMessage() {} func (*MsgCancelDerivativeOrder) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{46} + return fileDescriptor_7c861fb1c14863a5, []int{48} } func (m *MsgCancelDerivativeOrder) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2203,7 +2297,7 @@ func (m *MsgCancelDerivativeOrderResponse) Reset() { *m = MsgCancelDeriv func (m *MsgCancelDerivativeOrderResponse) String() string { return proto.CompactTextString(m) } func (*MsgCancelDerivativeOrderResponse) ProtoMessage() {} func (*MsgCancelDerivativeOrderResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{47} + return fileDescriptor_7c861fb1c14863a5, []int{49} } func (m *MsgCancelDerivativeOrderResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2253,7 +2347,7 @@ func (m *MsgCancelBinaryOptionsOrder) Reset() { *m = MsgCancelBinaryOpti func (m *MsgCancelBinaryOptionsOrder) String() string { return proto.CompactTextString(m) } func (*MsgCancelBinaryOptionsOrder) ProtoMessage() {} func (*MsgCancelBinaryOptionsOrder) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{48} + return fileDescriptor_7c861fb1c14863a5, []int{50} } func (m *MsgCancelBinaryOptionsOrder) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2291,7 +2385,7 @@ func (m *MsgCancelBinaryOptionsOrderResponse) Reset() { *m = MsgCancelBi func (m *MsgCancelBinaryOptionsOrderResponse) String() string { return proto.CompactTextString(m) } func (*MsgCancelBinaryOptionsOrderResponse) ProtoMessage() {} func (*MsgCancelBinaryOptionsOrderResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{49} + return fileDescriptor_7c861fb1c14863a5, []int{51} } func (m *MsgCancelBinaryOptionsOrderResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2339,7 +2433,7 @@ func (m *OrderData) Reset() { *m = OrderData{} } func (m *OrderData) String() string { return proto.CompactTextString(m) } func (*OrderData) ProtoMessage() {} func (*OrderData) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{50} + return fileDescriptor_7c861fb1c14863a5, []int{52} } func (m *OrderData) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2414,7 +2508,7 @@ func (m *MsgBatchCancelDerivativeOrders) Reset() { *m = MsgBatchCancelDe func (m *MsgBatchCancelDerivativeOrders) String() string { return proto.CompactTextString(m) } func (*MsgBatchCancelDerivativeOrders) ProtoMessage() {} func (*MsgBatchCancelDerivativeOrders) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{51} + return fileDescriptor_7c861fb1c14863a5, []int{53} } func (m *MsgBatchCancelDerivativeOrders) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2455,7 +2549,7 @@ func (m *MsgBatchCancelDerivativeOrdersResponse) Reset() { func (m *MsgBatchCancelDerivativeOrdersResponse) String() string { return proto.CompactTextString(m) } func (*MsgBatchCancelDerivativeOrdersResponse) ProtoMessage() {} func (*MsgBatchCancelDerivativeOrdersResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{52} + return fileDescriptor_7c861fb1c14863a5, []int{54} } func (m *MsgBatchCancelDerivativeOrdersResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2500,7 +2594,7 @@ func (m *MsgSubaccountTransfer) Reset() { *m = MsgSubaccountTransfer{} } func (m *MsgSubaccountTransfer) String() string { return proto.CompactTextString(m) } func (*MsgSubaccountTransfer) ProtoMessage() {} func (*MsgSubaccountTransfer) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{53} + return fileDescriptor_7c861fb1c14863a5, []int{55} } func (m *MsgSubaccountTransfer) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2566,7 +2660,7 @@ func (m *MsgSubaccountTransferResponse) Reset() { *m = MsgSubaccountTran func (m *MsgSubaccountTransferResponse) String() string { return proto.CompactTextString(m) } func (*MsgSubaccountTransferResponse) ProtoMessage() {} func (*MsgSubaccountTransferResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{54} + return fileDescriptor_7c861fb1c14863a5, []int{56} } func (m *MsgSubaccountTransferResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2611,7 +2705,7 @@ func (m *MsgExternalTransfer) Reset() { *m = MsgExternalTransfer{} } func (m *MsgExternalTransfer) String() string { return proto.CompactTextString(m) } func (*MsgExternalTransfer) ProtoMessage() {} func (*MsgExternalTransfer) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{55} + return fileDescriptor_7c861fb1c14863a5, []int{57} } func (m *MsgExternalTransfer) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2676,7 +2770,7 @@ func (m *MsgExternalTransferResponse) Reset() { *m = MsgExternalTransfer func (m *MsgExternalTransferResponse) String() string { return proto.CompactTextString(m) } func (*MsgExternalTransferResponse) ProtoMessage() {} func (*MsgExternalTransferResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{56} + return fileDescriptor_7c861fb1c14863a5, []int{58} } func (m *MsgExternalTransferResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2721,7 +2815,7 @@ func (m *MsgLiquidatePosition) Reset() { *m = MsgLiquidatePosition{} } func (m *MsgLiquidatePosition) String() string { return proto.CompactTextString(m) } func (*MsgLiquidatePosition) ProtoMessage() {} func (*MsgLiquidatePosition) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{57} + return fileDescriptor_7c861fb1c14863a5, []int{59} } func (m *MsgLiquidatePosition) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2786,7 +2880,7 @@ func (m *MsgLiquidatePositionResponse) Reset() { *m = MsgLiquidatePositi func (m *MsgLiquidatePositionResponse) String() string { return proto.CompactTextString(m) } func (*MsgLiquidatePositionResponse) ProtoMessage() {} func (*MsgLiquidatePositionResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{58} + return fileDescriptor_7c861fb1c14863a5, []int{60} } func (m *MsgLiquidatePositionResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2829,7 +2923,7 @@ func (m *LiquidatePositionData) Reset() { *m = LiquidatePositionData{} } func (m *LiquidatePositionData) String() string { return proto.CompactTextString(m) } func (*LiquidatePositionData) ProtoMessage() {} func (*LiquidatePositionData) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{59} + return fileDescriptor_7c861fb1c14863a5, []int{61} } func (m *LiquidatePositionData) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2891,7 +2985,7 @@ func (m *MsgBatchLiquidatePositions) Reset() { *m = MsgBatchLiquidatePos func (m *MsgBatchLiquidatePositions) String() string { return proto.CompactTextString(m) } func (*MsgBatchLiquidatePositions) ProtoMessage() {} func (*MsgBatchLiquidatePositions) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{60} + return fileDescriptor_7c861fb1c14863a5, []int{62} } func (m *MsgBatchLiquidatePositions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2950,7 +3044,7 @@ func (m *LiquidatePositionResult) Reset() { *m = LiquidatePositionResult func (m *LiquidatePositionResult) String() string { return proto.CompactTextString(m) } func (*LiquidatePositionResult) ProtoMessage() {} func (*LiquidatePositionResult) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{61} + return fileDescriptor_7c861fb1c14863a5, []int{63} } func (m *LiquidatePositionResult) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3017,7 +3111,7 @@ func (m *MsgBatchLiquidatePositionsResponse) Reset() { *m = MsgBatchLiqu func (m *MsgBatchLiquidatePositionsResponse) String() string { return proto.CompactTextString(m) } func (*MsgBatchLiquidatePositionsResponse) ProtoMessage() {} func (*MsgBatchLiquidatePositionsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{62} + return fileDescriptor_7c861fb1c14863a5, []int{64} } func (m *MsgBatchLiquidatePositionsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3065,7 +3159,7 @@ func (m *MsgOffsetPosition) Reset() { *m = MsgOffsetPosition{} } func (m *MsgOffsetPosition) String() string { return proto.CompactTextString(m) } func (*MsgOffsetPosition) ProtoMessage() {} func (*MsgOffsetPosition) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{63} + return fileDescriptor_7c861fb1c14863a5, []int{65} } func (m *MsgOffsetPosition) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3131,7 +3225,7 @@ func (m *MsgOffsetPositionResponse) Reset() { *m = MsgOffsetPositionResp func (m *MsgOffsetPositionResponse) String() string { return proto.CompactTextString(m) } func (*MsgOffsetPositionResponse) ProtoMessage() {} func (*MsgOffsetPositionResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{64} + return fileDescriptor_7c861fb1c14863a5, []int{66} } func (m *MsgOffsetPositionResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3174,7 +3268,7 @@ func (m *MsgEmergencySettleMarket) Reset() { *m = MsgEmergencySettleMark func (m *MsgEmergencySettleMarket) String() string { return proto.CompactTextString(m) } func (*MsgEmergencySettleMarket) ProtoMessage() {} func (*MsgEmergencySettleMarket) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{65} + return fileDescriptor_7c861fb1c14863a5, []int{67} } func (m *MsgEmergencySettleMarket) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3233,7 +3327,7 @@ func (m *MsgEmergencySettleMarketResponse) Reset() { *m = MsgEmergencySe func (m *MsgEmergencySettleMarketResponse) String() string { return proto.CompactTextString(m) } func (*MsgEmergencySettleMarketResponse) ProtoMessage() {} func (*MsgEmergencySettleMarketResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{66} + return fileDescriptor_7c861fb1c14863a5, []int{68} } func (m *MsgEmergencySettleMarketResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3281,7 +3375,7 @@ func (m *MsgIncreasePositionMargin) Reset() { *m = MsgIncreasePositionMa func (m *MsgIncreasePositionMargin) String() string { return proto.CompactTextString(m) } func (*MsgIncreasePositionMargin) ProtoMessage() {} func (*MsgIncreasePositionMargin) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{67} + return fileDescriptor_7c861fb1c14863a5, []int{69} } func (m *MsgIncreasePositionMargin) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3347,7 +3441,7 @@ func (m *MsgIncreasePositionMarginResponse) Reset() { *m = MsgIncreasePo func (m *MsgIncreasePositionMarginResponse) String() string { return proto.CompactTextString(m) } func (*MsgIncreasePositionMarginResponse) ProtoMessage() {} func (*MsgIncreasePositionMarginResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{68} + return fileDescriptor_7c861fb1c14863a5, []int{70} } func (m *MsgIncreasePositionMarginResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3395,7 +3489,7 @@ func (m *MsgDecreasePositionMargin) Reset() { *m = MsgDecreasePositionMa func (m *MsgDecreasePositionMargin) String() string { return proto.CompactTextString(m) } func (*MsgDecreasePositionMargin) ProtoMessage() {} func (*MsgDecreasePositionMargin) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{69} + return fileDescriptor_7c861fb1c14863a5, []int{71} } func (m *MsgDecreasePositionMargin) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3461,7 +3555,7 @@ func (m *MsgDecreasePositionMarginResponse) Reset() { *m = MsgDecreasePo func (m *MsgDecreasePositionMarginResponse) String() string { return proto.CompactTextString(m) } func (*MsgDecreasePositionMarginResponse) ProtoMessage() {} func (*MsgDecreasePositionMarginResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{70} + return fileDescriptor_7c861fb1c14863a5, []int{72} } func (m *MsgDecreasePositionMarginResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3506,7 +3600,7 @@ func (m *MsgPrivilegedExecuteContract) Reset() { *m = MsgPrivilegedExecu func (m *MsgPrivilegedExecuteContract) String() string { return proto.CompactTextString(m) } func (*MsgPrivilegedExecuteContract) ProtoMessage() {} func (*MsgPrivilegedExecuteContract) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{71} + return fileDescriptor_7c861fb1c14863a5, []int{73} } func (m *MsgPrivilegedExecuteContract) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3544,7 +3638,7 @@ func (m *MsgPrivilegedExecuteContractResponse) Reset() { *m = MsgPrivile func (m *MsgPrivilegedExecuteContractResponse) String() string { return proto.CompactTextString(m) } func (*MsgPrivilegedExecuteContractResponse) ProtoMessage() {} func (*MsgPrivilegedExecuteContractResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{72} + return fileDescriptor_7c861fb1c14863a5, []int{74} } func (m *MsgPrivilegedExecuteContractResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3583,7 +3677,7 @@ func (m *MsgRewardsOptOut) Reset() { *m = MsgRewardsOptOut{} } func (m *MsgRewardsOptOut) String() string { return proto.CompactTextString(m) } func (*MsgRewardsOptOut) ProtoMessage() {} func (*MsgRewardsOptOut) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{73} + return fileDescriptor_7c861fb1c14863a5, []int{75} } func (m *MsgRewardsOptOut) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3620,7 +3714,7 @@ func (m *MsgRewardsOptOutResponse) Reset() { *m = MsgRewardsOptOutRespon func (m *MsgRewardsOptOutResponse) String() string { return proto.CompactTextString(m) } func (*MsgRewardsOptOutResponse) ProtoMessage() {} func (*MsgRewardsOptOutResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{74} + return fileDescriptor_7c861fb1c14863a5, []int{76} } func (m *MsgRewardsOptOutResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3660,7 +3754,7 @@ func (m *MsgReclaimLockedFunds) Reset() { *m = MsgReclaimLockedFunds{} } func (m *MsgReclaimLockedFunds) String() string { return proto.CompactTextString(m) } func (*MsgReclaimLockedFunds) ProtoMessage() {} func (*MsgReclaimLockedFunds) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{75} + return fileDescriptor_7c861fb1c14863a5, []int{77} } func (m *MsgReclaimLockedFunds) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3719,7 +3813,7 @@ func (m *MsgReclaimLockedFundsResponse) Reset() { *m = MsgReclaimLockedF func (m *MsgReclaimLockedFundsResponse) String() string { return proto.CompactTextString(m) } func (*MsgReclaimLockedFundsResponse) ProtoMessage() {} func (*MsgReclaimLockedFundsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{76} + return fileDescriptor_7c861fb1c14863a5, []int{78} } func (m *MsgReclaimLockedFundsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3761,7 +3855,7 @@ func (m *MsgSignData) Reset() { *m = MsgSignData{} } func (m *MsgSignData) String() string { return proto.CompactTextString(m) } func (*MsgSignData) ProtoMessage() {} func (*MsgSignData) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{77} + return fileDescriptor_7c861fb1c14863a5, []int{79} } func (m *MsgSignData) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3814,7 +3908,7 @@ func (m *MsgSignDoc) Reset() { *m = MsgSignDoc{} } func (m *MsgSignDoc) String() string { return proto.CompactTextString(m) } func (*MsgSignDoc) ProtoMessage() {} func (*MsgSignDoc) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{78} + return fileDescriptor_7c861fb1c14863a5, []int{80} } func (m *MsgSignDoc) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3878,7 +3972,7 @@ func (m *MsgAdminUpdateBinaryOptionsMarket) Reset() { *m = MsgAdminUpdat func (m *MsgAdminUpdateBinaryOptionsMarket) String() string { return proto.CompactTextString(m) } func (*MsgAdminUpdateBinaryOptionsMarket) ProtoMessage() {} func (*MsgAdminUpdateBinaryOptionsMarket) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{79} + return fileDescriptor_7c861fb1c14863a5, []int{81} } func (m *MsgAdminUpdateBinaryOptionsMarket) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3955,7 +4049,7 @@ func (m *MsgAdminUpdateBinaryOptionsMarketResponse) String() string { } func (*MsgAdminUpdateBinaryOptionsMarketResponse) ProtoMessage() {} func (*MsgAdminUpdateBinaryOptionsMarketResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{80} + return fileDescriptor_7c861fb1c14863a5, []int{82} } func (m *MsgAdminUpdateBinaryOptionsMarketResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3996,7 +4090,7 @@ func (m *MsgAuthorizeStakeGrants) Reset() { *m = MsgAuthorizeStakeGrants func (m *MsgAuthorizeStakeGrants) String() string { return proto.CompactTextString(m) } func (*MsgAuthorizeStakeGrants) ProtoMessage() {} func (*MsgAuthorizeStakeGrants) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{81} + return fileDescriptor_7c861fb1c14863a5, []int{83} } func (m *MsgAuthorizeStakeGrants) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4046,7 +4140,7 @@ func (m *MsgAuthorizeStakeGrantsResponse) Reset() { *m = MsgAuthorizeSta func (m *MsgAuthorizeStakeGrantsResponse) String() string { return proto.CompactTextString(m) } func (*MsgAuthorizeStakeGrantsResponse) ProtoMessage() {} func (*MsgAuthorizeStakeGrantsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{82} + return fileDescriptor_7c861fb1c14863a5, []int{84} } func (m *MsgAuthorizeStakeGrantsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4087,7 +4181,7 @@ func (m *MsgActivateStakeGrant) Reset() { *m = MsgActivateStakeGrant{} } func (m *MsgActivateStakeGrant) String() string { return proto.CompactTextString(m) } func (*MsgActivateStakeGrant) ProtoMessage() {} func (*MsgActivateStakeGrant) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{83} + return fileDescriptor_7c861fb1c14863a5, []int{85} } func (m *MsgActivateStakeGrant) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4137,7 +4231,7 @@ func (m *MsgActivateStakeGrantResponse) Reset() { *m = MsgActivateStakeG func (m *MsgActivateStakeGrantResponse) String() string { return proto.CompactTextString(m) } func (*MsgActivateStakeGrantResponse) ProtoMessage() {} func (*MsgActivateStakeGrantResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{84} + return fileDescriptor_7c861fb1c14863a5, []int{86} } func (m *MsgActivateStakeGrantResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4176,7 +4270,7 @@ func (m *MsgBatchExchangeModification) Reset() { *m = MsgBatchExchangeMo func (m *MsgBatchExchangeModification) String() string { return proto.CompactTextString(m) } func (*MsgBatchExchangeModification) ProtoMessage() {} func (*MsgBatchExchangeModification) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{85} + return fileDescriptor_7c861fb1c14863a5, []int{87} } func (m *MsgBatchExchangeModification) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4212,7 +4306,7 @@ func (m *MsgBatchExchangeModificationResponse) Reset() { *m = MsgBatchEx func (m *MsgBatchExchangeModificationResponse) String() string { return proto.CompactTextString(m) } func (*MsgBatchExchangeModificationResponse) ProtoMessage() {} func (*MsgBatchExchangeModificationResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{86} + return fileDescriptor_7c861fb1c14863a5, []int{88} } func (m *MsgBatchExchangeModificationResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4251,7 +4345,7 @@ func (m *MsgSpotMarketLaunch) Reset() { *m = MsgSpotMarketLaunch{} } func (m *MsgSpotMarketLaunch) String() string { return proto.CompactTextString(m) } func (*MsgSpotMarketLaunch) ProtoMessage() {} func (*MsgSpotMarketLaunch) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{87} + return fileDescriptor_7c861fb1c14863a5, []int{89} } func (m *MsgSpotMarketLaunch) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4287,7 +4381,7 @@ func (m *MsgSpotMarketLaunchResponse) Reset() { *m = MsgSpotMarketLaunch func (m *MsgSpotMarketLaunchResponse) String() string { return proto.CompactTextString(m) } func (*MsgSpotMarketLaunchResponse) ProtoMessage() {} func (*MsgSpotMarketLaunchResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{88} + return fileDescriptor_7c861fb1c14863a5, []int{90} } func (m *MsgSpotMarketLaunchResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4326,7 +4420,7 @@ func (m *MsgPerpetualMarketLaunch) Reset() { *m = MsgPerpetualMarketLaun func (m *MsgPerpetualMarketLaunch) String() string { return proto.CompactTextString(m) } func (*MsgPerpetualMarketLaunch) ProtoMessage() {} func (*MsgPerpetualMarketLaunch) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{89} + return fileDescriptor_7c861fb1c14863a5, []int{91} } func (m *MsgPerpetualMarketLaunch) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4362,7 +4456,7 @@ func (m *MsgPerpetualMarketLaunchResponse) Reset() { *m = MsgPerpetualMa func (m *MsgPerpetualMarketLaunchResponse) String() string { return proto.CompactTextString(m) } func (*MsgPerpetualMarketLaunchResponse) ProtoMessage() {} func (*MsgPerpetualMarketLaunchResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{90} + return fileDescriptor_7c861fb1c14863a5, []int{92} } func (m *MsgPerpetualMarketLaunchResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4401,7 +4495,7 @@ func (m *MsgExpiryFuturesMarketLaunch) Reset() { *m = MsgExpiryFuturesMa func (m *MsgExpiryFuturesMarketLaunch) String() string { return proto.CompactTextString(m) } func (*MsgExpiryFuturesMarketLaunch) ProtoMessage() {} func (*MsgExpiryFuturesMarketLaunch) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{91} + return fileDescriptor_7c861fb1c14863a5, []int{93} } func (m *MsgExpiryFuturesMarketLaunch) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4437,7 +4531,7 @@ func (m *MsgExpiryFuturesMarketLaunchResponse) Reset() { *m = MsgExpiryF func (m *MsgExpiryFuturesMarketLaunchResponse) String() string { return proto.CompactTextString(m) } func (*MsgExpiryFuturesMarketLaunchResponse) ProtoMessage() {} func (*MsgExpiryFuturesMarketLaunchResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{92} + return fileDescriptor_7c861fb1c14863a5, []int{94} } func (m *MsgExpiryFuturesMarketLaunchResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4476,7 +4570,7 @@ func (m *MsgBinaryOptionsMarketLaunch) Reset() { *m = MsgBinaryOptionsMa func (m *MsgBinaryOptionsMarketLaunch) String() string { return proto.CompactTextString(m) } func (*MsgBinaryOptionsMarketLaunch) ProtoMessage() {} func (*MsgBinaryOptionsMarketLaunch) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{93} + return fileDescriptor_7c861fb1c14863a5, []int{95} } func (m *MsgBinaryOptionsMarketLaunch) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4512,7 +4606,7 @@ func (m *MsgBinaryOptionsMarketLaunchResponse) Reset() { *m = MsgBinaryO func (m *MsgBinaryOptionsMarketLaunchResponse) String() string { return proto.CompactTextString(m) } func (*MsgBinaryOptionsMarketLaunchResponse) ProtoMessage() {} func (*MsgBinaryOptionsMarketLaunchResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{94} + return fileDescriptor_7c861fb1c14863a5, []int{96} } func (m *MsgBinaryOptionsMarketLaunchResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4551,7 +4645,7 @@ func (m *MsgBatchCommunityPoolSpend) Reset() { *m = MsgBatchCommunityPoo func (m *MsgBatchCommunityPoolSpend) String() string { return proto.CompactTextString(m) } func (*MsgBatchCommunityPoolSpend) ProtoMessage() {} func (*MsgBatchCommunityPoolSpend) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{95} + return fileDescriptor_7c861fb1c14863a5, []int{97} } func (m *MsgBatchCommunityPoolSpend) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4587,7 +4681,7 @@ func (m *MsgBatchCommunityPoolSpendResponse) Reset() { *m = MsgBatchComm func (m *MsgBatchCommunityPoolSpendResponse) String() string { return proto.CompactTextString(m) } func (*MsgBatchCommunityPoolSpendResponse) ProtoMessage() {} func (*MsgBatchCommunityPoolSpendResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{96} + return fileDescriptor_7c861fb1c14863a5, []int{98} } func (m *MsgBatchCommunityPoolSpendResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4626,7 +4720,7 @@ func (m *MsgSpotMarketParamUpdate) Reset() { *m = MsgSpotMarketParamUpda func (m *MsgSpotMarketParamUpdate) String() string { return proto.CompactTextString(m) } func (*MsgSpotMarketParamUpdate) ProtoMessage() {} func (*MsgSpotMarketParamUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{97} + return fileDescriptor_7c861fb1c14863a5, []int{99} } func (m *MsgSpotMarketParamUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4662,7 +4756,7 @@ func (m *MsgSpotMarketParamUpdateResponse) Reset() { *m = MsgSpotMarketP func (m *MsgSpotMarketParamUpdateResponse) String() string { return proto.CompactTextString(m) } func (*MsgSpotMarketParamUpdateResponse) ProtoMessage() {} func (*MsgSpotMarketParamUpdateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{98} + return fileDescriptor_7c861fb1c14863a5, []int{100} } func (m *MsgSpotMarketParamUpdateResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4701,7 +4795,7 @@ func (m *MsgDerivativeMarketParamUpdate) Reset() { *m = MsgDerivativeMar func (m *MsgDerivativeMarketParamUpdate) String() string { return proto.CompactTextString(m) } func (*MsgDerivativeMarketParamUpdate) ProtoMessage() {} func (*MsgDerivativeMarketParamUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{99} + return fileDescriptor_7c861fb1c14863a5, []int{101} } func (m *MsgDerivativeMarketParamUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4739,7 +4833,7 @@ func (m *MsgDerivativeMarketParamUpdateResponse) Reset() { func (m *MsgDerivativeMarketParamUpdateResponse) String() string { return proto.CompactTextString(m) } func (*MsgDerivativeMarketParamUpdateResponse) ProtoMessage() {} func (*MsgDerivativeMarketParamUpdateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{100} + return fileDescriptor_7c861fb1c14863a5, []int{102} } func (m *MsgDerivativeMarketParamUpdateResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4778,7 +4872,7 @@ func (m *MsgBinaryOptionsMarketParamUpdate) Reset() { *m = MsgBinaryOpti func (m *MsgBinaryOptionsMarketParamUpdate) String() string { return proto.CompactTextString(m) } func (*MsgBinaryOptionsMarketParamUpdate) ProtoMessage() {} func (*MsgBinaryOptionsMarketParamUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{101} + return fileDescriptor_7c861fb1c14863a5, []int{103} } func (m *MsgBinaryOptionsMarketParamUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4818,7 +4912,7 @@ func (m *MsgBinaryOptionsMarketParamUpdateResponse) String() string { } func (*MsgBinaryOptionsMarketParamUpdateResponse) ProtoMessage() {} func (*MsgBinaryOptionsMarketParamUpdateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{102} + return fileDescriptor_7c861fb1c14863a5, []int{104} } func (m *MsgBinaryOptionsMarketParamUpdateResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4857,7 +4951,7 @@ func (m *MsgMarketForcedSettlement) Reset() { *m = MsgMarketForcedSettle func (m *MsgMarketForcedSettlement) String() string { return proto.CompactTextString(m) } func (*MsgMarketForcedSettlement) ProtoMessage() {} func (*MsgMarketForcedSettlement) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{103} + return fileDescriptor_7c861fb1c14863a5, []int{105} } func (m *MsgMarketForcedSettlement) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4893,7 +4987,7 @@ func (m *MsgMarketForcedSettlementResponse) Reset() { *m = MsgMarketForc func (m *MsgMarketForcedSettlementResponse) String() string { return proto.CompactTextString(m) } func (*MsgMarketForcedSettlementResponse) ProtoMessage() {} func (*MsgMarketForcedSettlementResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{104} + return fileDescriptor_7c861fb1c14863a5, []int{106} } func (m *MsgMarketForcedSettlementResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4932,7 +5026,7 @@ func (m *MsgTradingRewardCampaignLaunch) Reset() { *m = MsgTradingReward func (m *MsgTradingRewardCampaignLaunch) String() string { return proto.CompactTextString(m) } func (*MsgTradingRewardCampaignLaunch) ProtoMessage() {} func (*MsgTradingRewardCampaignLaunch) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{105} + return fileDescriptor_7c861fb1c14863a5, []int{107} } func (m *MsgTradingRewardCampaignLaunch) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4970,7 +5064,7 @@ func (m *MsgTradingRewardCampaignLaunchResponse) Reset() { func (m *MsgTradingRewardCampaignLaunchResponse) String() string { return proto.CompactTextString(m) } func (*MsgTradingRewardCampaignLaunchResponse) ProtoMessage() {} func (*MsgTradingRewardCampaignLaunchResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{106} + return fileDescriptor_7c861fb1c14863a5, []int{108} } func (m *MsgTradingRewardCampaignLaunchResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5009,7 +5103,7 @@ func (m *MsgExchangeEnable) Reset() { *m = MsgExchangeEnable{} } func (m *MsgExchangeEnable) String() string { return proto.CompactTextString(m) } func (*MsgExchangeEnable) ProtoMessage() {} func (*MsgExchangeEnable) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{107} + return fileDescriptor_7c861fb1c14863a5, []int{109} } func (m *MsgExchangeEnable) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5045,7 +5139,7 @@ func (m *MsgExchangeEnableResponse) Reset() { *m = MsgExchangeEnableResp func (m *MsgExchangeEnableResponse) String() string { return proto.CompactTextString(m) } func (*MsgExchangeEnableResponse) ProtoMessage() {} func (*MsgExchangeEnableResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{108} + return fileDescriptor_7c861fb1c14863a5, []int{110} } func (m *MsgExchangeEnableResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5084,7 +5178,7 @@ func (m *MsgTradingRewardCampaignUpdate) Reset() { *m = MsgTradingReward func (m *MsgTradingRewardCampaignUpdate) String() string { return proto.CompactTextString(m) } func (*MsgTradingRewardCampaignUpdate) ProtoMessage() {} func (*MsgTradingRewardCampaignUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{109} + return fileDescriptor_7c861fb1c14863a5, []int{111} } func (m *MsgTradingRewardCampaignUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5122,7 +5216,7 @@ func (m *MsgTradingRewardCampaignUpdateResponse) Reset() { func (m *MsgTradingRewardCampaignUpdateResponse) String() string { return proto.CompactTextString(m) } func (*MsgTradingRewardCampaignUpdateResponse) ProtoMessage() {} func (*MsgTradingRewardCampaignUpdateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{110} + return fileDescriptor_7c861fb1c14863a5, []int{112} } func (m *MsgTradingRewardCampaignUpdateResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5161,7 +5255,7 @@ func (m *MsgTradingRewardPendingPointsUpdate) Reset() { *m = MsgTradingR func (m *MsgTradingRewardPendingPointsUpdate) String() string { return proto.CompactTextString(m) } func (*MsgTradingRewardPendingPointsUpdate) ProtoMessage() {} func (*MsgTradingRewardPendingPointsUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{111} + return fileDescriptor_7c861fb1c14863a5, []int{113} } func (m *MsgTradingRewardPendingPointsUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5201,7 +5295,7 @@ func (m *MsgTradingRewardPendingPointsUpdateResponse) String() string { } func (*MsgTradingRewardPendingPointsUpdateResponse) ProtoMessage() {} func (*MsgTradingRewardPendingPointsUpdateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{112} + return fileDescriptor_7c861fb1c14863a5, []int{114} } func (m *MsgTradingRewardPendingPointsUpdateResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5240,7 +5334,7 @@ func (m *MsgFeeDiscount) Reset() { *m = MsgFeeDiscount{} } func (m *MsgFeeDiscount) String() string { return proto.CompactTextString(m) } func (*MsgFeeDiscount) ProtoMessage() {} func (*MsgFeeDiscount) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{113} + return fileDescriptor_7c861fb1c14863a5, []int{115} } func (m *MsgFeeDiscount) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5276,7 +5370,7 @@ func (m *MsgFeeDiscountResponse) Reset() { *m = MsgFeeDiscountResponse{} func (m *MsgFeeDiscountResponse) String() string { return proto.CompactTextString(m) } func (*MsgFeeDiscountResponse) ProtoMessage() {} func (*MsgFeeDiscountResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{114} + return fileDescriptor_7c861fb1c14863a5, []int{116} } func (m *MsgFeeDiscountResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5319,7 +5413,7 @@ func (m *MsgAtomicMarketOrderFeeMultiplierSchedule) String() string { } func (*MsgAtomicMarketOrderFeeMultiplierSchedule) ProtoMessage() {} func (*MsgAtomicMarketOrderFeeMultiplierSchedule) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{115} + return fileDescriptor_7c861fb1c14863a5, []int{117} } func (m *MsgAtomicMarketOrderFeeMultiplierSchedule) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5359,7 +5453,7 @@ func (m *MsgAtomicMarketOrderFeeMultiplierScheduleResponse) String() string { } func (*MsgAtomicMarketOrderFeeMultiplierScheduleResponse) ProtoMessage() {} func (*MsgAtomicMarketOrderFeeMultiplierScheduleResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{116} + return fileDescriptor_7c861fb1c14863a5, []int{118} } func (m *MsgAtomicMarketOrderFeeMultiplierScheduleResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5403,7 +5497,7 @@ func (m *MsgSetDelegationTransferReceivers) Reset() { *m = MsgSetDelegat func (m *MsgSetDelegationTransferReceivers) String() string { return proto.CompactTextString(m) } func (*MsgSetDelegationTransferReceivers) ProtoMessage() {} func (*MsgSetDelegationTransferReceivers) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{117} + return fileDescriptor_7c861fb1c14863a5, []int{119} } func (m *MsgSetDelegationTransferReceivers) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5461,7 +5555,7 @@ func (m *MsgSetDelegationTransferReceiversResponse) String() string { } func (*MsgSetDelegationTransferReceiversResponse) ProtoMessage() {} func (*MsgSetDelegationTransferReceiversResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{118} + return fileDescriptor_7c861fb1c14863a5, []int{120} } func (m *MsgSetDelegationTransferReceiversResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5500,7 +5594,7 @@ func (m *MsgCancelPostOnlyMode) Reset() { *m = MsgCancelPostOnlyMode{} } func (m *MsgCancelPostOnlyMode) String() string { return proto.CompactTextString(m) } func (*MsgCancelPostOnlyMode) ProtoMessage() {} func (*MsgCancelPostOnlyMode) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{119} + return fileDescriptor_7c861fb1c14863a5, []int{121} } func (m *MsgCancelPostOnlyMode) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5544,7 +5638,7 @@ func (m *MsgCancelPostOnlyModeResponse) Reset() { *m = MsgCancelPostOnly func (m *MsgCancelPostOnlyModeResponse) String() string { return proto.CompactTextString(m) } func (*MsgCancelPostOnlyModeResponse) ProtoMessage() {} func (*MsgCancelPostOnlyModeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{120} + return fileDescriptor_7c861fb1c14863a5, []int{122} } func (m *MsgCancelPostOnlyModeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5586,7 +5680,7 @@ func (m *MsgActivatePostOnlyMode) Reset() { *m = MsgActivatePostOnlyMode func (m *MsgActivatePostOnlyMode) String() string { return proto.CompactTextString(m) } func (*MsgActivatePostOnlyMode) ProtoMessage() {} func (*MsgActivatePostOnlyMode) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{121} + return fileDescriptor_7c861fb1c14863a5, []int{123} } func (m *MsgActivatePostOnlyMode) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5638,7 +5732,7 @@ func (m *MsgActivatePostOnlyModeResponse) Reset() { *m = MsgActivatePost func (m *MsgActivatePostOnlyModeResponse) String() string { return proto.CompactTextString(m) } func (*MsgActivatePostOnlyModeResponse) ProtoMessage() {} func (*MsgActivatePostOnlyModeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{122} + return fileDescriptor_7c861fb1c14863a5, []int{124} } func (m *MsgActivatePostOnlyModeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5667,9 +5761,9 @@ func (m *MsgActivatePostOnlyModeResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgActivatePostOnlyModeResponse proto.InternalMessageInfo -// MsgLiquidateCrossMarginPool atomically closes all positions in a -// cross-margin pool, netting surplus from profitable positions against deficits -// before touching the insurance fund. +// MsgLiquidateCrossMarginPool performs graduated selective liquidation on a +// cross-margin quote-denom pool, canceling pool orders first and then closing +// only enough positions to restore health according to the configured target. type MsgLiquidateCrossMarginPool struct { // the liquidator's Injective address Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty"` @@ -5683,7 +5777,7 @@ func (m *MsgLiquidateCrossMarginPool) Reset() { *m = MsgLiquidateCrossMa func (m *MsgLiquidateCrossMarginPool) String() string { return proto.CompactTextString(m) } func (*MsgLiquidateCrossMarginPool) ProtoMessage() {} func (*MsgLiquidateCrossMarginPool) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{123} + return fileDescriptor_7c861fb1c14863a5, []int{125} } func (m *MsgLiquidateCrossMarginPool) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5742,7 +5836,7 @@ func (m *MsgLiquidateCrossMarginPoolResponse) Reset() { *m = MsgLiquidat func (m *MsgLiquidateCrossMarginPoolResponse) String() string { return proto.CompactTextString(m) } func (*MsgLiquidateCrossMarginPoolResponse) ProtoMessage() {} func (*MsgLiquidateCrossMarginPoolResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{124} + return fileDescriptor_7c861fb1c14863a5, []int{126} } func (m *MsgLiquidateCrossMarginPoolResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5784,6 +5878,8 @@ func init() { proto.RegisterType((*MsgWithdrawResponse)(nil), "injective.exchange.v2.MsgWithdrawResponse") proto.RegisterType((*MsgUpdateSubaccountRiskProfile)(nil), "injective.exchange.v2.MsgUpdateSubaccountRiskProfile") proto.RegisterType((*MsgUpdateSubaccountRiskProfileResponse)(nil), "injective.exchange.v2.MsgUpdateSubaccountRiskProfileResponse") + proto.RegisterType((*MsgUpdateSubaccountMarketRiskMode)(nil), "injective.exchange.v2.MsgUpdateSubaccountMarketRiskMode") + proto.RegisterType((*MsgUpdateSubaccountMarketRiskModeResponse)(nil), "injective.exchange.v2.MsgUpdateSubaccountMarketRiskModeResponse") proto.RegisterType((*MsgCreateSpotLimitOrder)(nil), "injective.exchange.v2.MsgCreateSpotLimitOrder") proto.RegisterType((*MsgCreateSpotLimitOrderResponse)(nil), "injective.exchange.v2.MsgCreateSpotLimitOrderResponse") proto.RegisterType((*MsgBatchCreateSpotLimitOrders)(nil), "injective.exchange.v2.MsgBatchCreateSpotLimitOrders") @@ -5902,362 +5998,366 @@ func init() { func init() { proto.RegisterFile("injective/exchange/v2/tx.proto", fileDescriptor_7c861fb1c14863a5) } var fileDescriptor_7c861fb1c14863a5 = []byte{ - // 5669 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x3d, 0x5b, 0x6c, 0x1c, 0x47, - 0x72, 0x1a, 0xbe, 0x59, 0x7c, 0x88, 0x1c, 0x92, 0xe2, 0x6a, 0x29, 0x91, 0xd2, 0xe8, 0x61, 0x4a, - 0x96, 0xb8, 0x12, 0x2d, 0xc9, 0xf2, 0xca, 0x2f, 0x3e, 0xc4, 0x58, 0xb6, 0x68, 0xd1, 0x4b, 0xf9, - 0x7c, 0x76, 0xee, 0xb0, 0x18, 0xce, 0x36, 0x97, 0x73, 0xdc, 0x9d, 0x59, 0xcf, 0xcc, 0x52, 0xa2, - 0x3f, 0x72, 0x0f, 0x04, 0x39, 0xe1, 0x0e, 0x01, 0x0e, 0x48, 0x90, 0x20, 0x40, 0x02, 0x5c, 0x12, - 0x24, 0x41, 0x2e, 0x41, 0xe2, 0x4b, 0x0e, 0xc8, 0x0b, 0xc1, 0x21, 0x01, 0x0e, 0x38, 0x24, 0x3f, - 0x4e, 0x80, 0x0b, 0x82, 0xfb, 0x50, 0x0e, 0xf6, 0x87, 0x83, 0xcb, 0x5f, 0x80, 0xfc, 0x24, 0x3f, - 0xc1, 0x74, 0xf7, 0xf4, 0xce, 0xa3, 0xbb, 0x67, 0x76, 0x45, 0xfa, 0x7c, 0x87, 0xfb, 0xb1, 0xb5, - 0xdd, 0x55, 0xd5, 0x55, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0x43, 0x98, 0x35, 0xad, 0x2f, 0x20, - 0xc3, 0x33, 0xf7, 0x50, 0x01, 0x3d, 0x34, 0x76, 0x74, 0xab, 0x8a, 0x0a, 0x7b, 0x8b, 0x05, 0xef, - 0xe1, 0x42, 0xc3, 0xb1, 0x3d, 0x5b, 0x9d, 0x62, 0xfd, 0x0b, 0x41, 0xff, 0xc2, 0xde, 0x62, 0x7e, - 0xd6, 0xb0, 0xdd, 0xba, 0xed, 0x16, 0xb6, 0x74, 0x17, 0x15, 0xf6, 0xae, 0x6e, 0x21, 0x4f, 0xbf, - 0x5a, 0x30, 0x6c, 0xd3, 0x22, 0x68, 0xf9, 0x05, 0xda, 0x5f, 0x31, 0x5d, 0xcf, 0x31, 0xb7, 0x9a, - 0x9e, 0x69, 0x5b, 0x0c, 0x2e, 0xdc, 0x48, 0xe1, 0xa7, 0x29, 0x7c, 0xdd, 0xad, 0x16, 0xf6, 0xae, - 0xfa, 0xff, 0xa3, 0x1d, 0xc7, 0x49, 0x47, 0x19, 0xff, 0x2a, 0x90, 0x1f, 0xb4, 0x6b, 0xb2, 0x6a, - 0x57, 0x6d, 0xd2, 0xee, 0xff, 0x8b, 0xb6, 0x9e, 0xe5, 0x0b, 0xc4, 0x98, 0x27, 0x50, 0xa7, 0xf9, - 0x50, 0xb6, 0x53, 0x41, 0x0e, 0x05, 0xd1, 0xf8, 0x20, 0x75, 0xdd, 0xd9, 0x45, 0x9e, 0x7c, 0xb0, - 0x86, 0x63, 0x37, 0x6c, 0x57, 0xaf, 0x51, 0xa8, 0x73, 0x2d, 0x28, 0xdb, 0xd1, 0x8d, 0x5a, 0x4b, - 0x63, 0xe4, 0x27, 0x05, 0x1b, 0xd7, 0xeb, 0xa6, 0x65, 0x17, 0xf0, 0x7f, 0x49, 0x93, 0xf6, 0xfb, - 0xdd, 0x30, 0xb1, 0xee, 0x56, 0xdf, 0x6c, 0x54, 0x74, 0x0f, 0x6d, 0x36, 0x6c, 0x6f, 0x1d, 0x8f, - 0xae, 0x4e, 0x42, 0xaf, 0x5e, 0xa9, 0x9b, 0x56, 0x4e, 0x39, 0xa5, 0xcc, 0x0f, 0x96, 0xc8, 0x0f, - 0x75, 0x06, 0x06, 0x09, 0x77, 0x65, 0xb3, 0x92, 0xeb, 0xc2, 0x3d, 0x03, 0xa4, 0xe1, 0x4e, 0x45, - 0x3d, 0x09, 0x60, 0xa1, 0x07, 0x65, 0xcf, 0x34, 0x76, 0x91, 0x93, 0xeb, 0xc6, 0xbd, 0x83, 0x16, - 0x7a, 0x70, 0x1f, 0x37, 0xa8, 0x6f, 0xc3, 0xb4, 0xdf, 0x5d, 0x37, 0xad, 0x72, 0xc3, 0x31, 0x0d, - 0x84, 0x01, 0xcb, 0xae, 0xf9, 0x1e, 0xca, 0xf5, 0xf8, 0xb0, 0xcb, 0x67, 0xbe, 0xff, 0x78, 0xee, - 0xc8, 0x0f, 0x1f, 0xcf, 0xcd, 0x90, 0x39, 0x70, 0x2b, 0xbb, 0x0b, 0xa6, 0x5d, 0xa8, 0xeb, 0xde, - 0xce, 0xc2, 0x5d, 0x54, 0xd5, 0x8d, 0xfd, 0x55, 0x64, 0x94, 0x26, 0x2c, 0xf4, 0x60, 0xdd, 0xb4, - 0x36, 0x7c, 0x0a, 0x3e, 0xe1, 0x4d, 0xf3, 0x3d, 0xa4, 0x96, 0x21, 0x1f, 0x90, 0x7e, 0xb7, 0xa9, - 0x5b, 0x9e, 0xe9, 0xed, 0x87, 0xa8, 0xf7, 0x66, 0xa7, 0x7e, 0x8c, 0x50, 0x7f, 0x83, 0x12, 0x61, - 0x03, 0xac, 0xc3, 0x58, 0x30, 0x80, 0x65, 0xfb, 0x46, 0xa5, 0xd7, 0x72, 0x7d, 0xd9, 0xc9, 0x8e, - 0x12, 0xb2, 0xaf, 0x53, 0xd4, 0x62, 0xe1, 0x3f, 0xbf, 0x39, 0x77, 0xe4, 0x2b, 0x1f, 0xbf, 0x7f, - 0x91, 0xa8, 0xf5, 0x6b, 0x1f, 0xbf, 0x7f, 0xf1, 0x04, 0x9b, 0x5d, 0xce, 0x6c, 0x68, 0x27, 0x61, - 0x86, 0xd3, 0x5c, 0x42, 0x6e, 0xc3, 0xb6, 0x5c, 0xa4, 0xfd, 0x4e, 0x3f, 0x1c, 0x67, 0xfd, 0xab, - 0xc8, 0x31, 0xf7, 0x74, 0xdf, 0x16, 0x7e, 0x3e, 0x95, 0x87, 0x3e, 0x95, 0xea, 0xe7, 0x20, 0xe7, - 0x93, 0x33, 0x2d, 0xd3, 0x33, 0xf5, 0x5a, 0xb9, 0xae, 0x3b, 0x55, 0xd3, 0x2a, 0x3b, 0xba, 0x67, - 0xda, 0xb9, 0xfe, 0xec, 0x64, 0xa7, 0x2c, 0xf4, 0xe0, 0x0e, 0xa1, 0xb1, 0x8e, 0x49, 0x94, 0x7c, - 0x0a, 0x6a, 0x05, 0x4e, 0x60, 0x66, 0x75, 0xd3, 0xf2, 0x90, 0xa5, 0x5b, 0x06, 0x8a, 0x8e, 0x30, - 0x90, 0x7d, 0x84, 0xe3, 0x3e, 0xe3, 0x2d, 0x3a, 0xe1, 0x51, 0xde, 0x21, 0xd3, 0xe9, 0xa0, 0x4a, - 0x33, 0x3e, 0xc0, 0x60, 0xf6, 0x01, 0x26, 0x2d, 0xf4, 0xa0, 0x84, 0x49, 0x84, 0x69, 0x97, 0xc1, - 0x17, 0xad, 0x6c, 0x37, 0x50, 0x4b, 0xdf, 0x65, 0x43, 0x6f, 0xe4, 0xe0, 0x94, 0x32, 0x3f, 0xb4, - 0x78, 0x7e, 0x81, 0xeb, 0xfd, 0x17, 0xee, 0x35, 0x10, 0xd3, 0xf1, 0x8a, 0xde, 0x58, 0xee, 0xf1, - 0x39, 0x28, 0xa9, 0x16, 0x7a, 0x10, 0xeb, 0x51, 0xab, 0x90, 0x33, 0x1c, 0xdb, 0x75, 0x03, 0xbe, - 0x51, 0xcd, 0xac, 0x9a, 0x5b, 0x66, 0xcd, 0xf4, 0xf6, 0x73, 0x43, 0xa7, 0x94, 0xf9, 0xd1, 0xc5, - 0xcb, 0x82, 0x31, 0x56, 0x7c, 0x34, 0xc2, 0xeb, 0xed, 0x16, 0x52, 0xe9, 0x98, 0xc1, 0x6d, 0x2f, - 0x3e, 0xf7, 0xe8, 0x9b, 0x73, 0x47, 0x92, 0x0b, 0x57, 0x4b, 0x2e, 0xdc, 0xf8, 0x0a, 0xd4, 0xce, - 0xc0, 0x69, 0x61, 0x27, 0x5b, 0xc4, 0x7f, 0xa9, 0xc0, 0x51, 0x06, 0xb5, 0xa1, 0x3b, 0x7a, 0xdd, - 0x55, 0x6f, 0xc0, 0xa0, 0xde, 0xf4, 0x76, 0x6c, 0xc7, 0x97, 0x06, 0x2f, 0xdf, 0xe5, 0xdc, 0xbf, - 0x7e, 0xe7, 0xf2, 0x24, 0xdd, 0xa5, 0x96, 0x2a, 0x15, 0x07, 0xb9, 0xee, 0xa6, 0xe7, 0x98, 0x56, - 0xb5, 0xd4, 0x02, 0x55, 0x6f, 0x41, 0x5f, 0x03, 0x53, 0xc0, 0x2b, 0x7b, 0x68, 0xf1, 0xa4, 0x40, - 0x05, 0x64, 0x18, 0xaa, 0x5d, 0x8a, 0x52, 0x7c, 0xda, 0x17, 0xb0, 0x45, 0xcc, 0x17, 0x32, 0x97, - 0x14, 0x92, 0xa0, 0x6a, 0xc7, 0x61, 0x3a, 0xd6, 0xc4, 0x04, 0xfa, 0x73, 0x05, 0x60, 0xdd, 0xad, - 0xae, 0xa2, 0x86, 0xed, 0x9a, 0x9e, 0x7a, 0x0c, 0xfa, 0x5c, 0x64, 0x55, 0x90, 0x43, 0xfd, 0x10, - 0xfd, 0xa5, 0x9e, 0x81, 0x11, 0xb7, 0xb9, 0xa5, 0x1b, 0x86, 0xdd, 0xb4, 0x42, 0xce, 0x68, 0xb8, - 0xd5, 0x78, 0xa7, 0xa2, 0x3e, 0x0b, 0x7d, 0x7a, 0xdd, 0xff, 0x37, 0x76, 0x46, 0x43, 0x8b, 0xc7, - 0xe9, 0xf6, 0xbf, 0xe0, 0x87, 0x07, 0x0b, 0x74, 0xb3, 0x5b, 0x58, 0xb1, 0x4d, 0x2b, 0x10, 0x86, - 0x80, 0x17, 0x9f, 0x0e, 0xcf, 0x1a, 0x1d, 0xd2, 0x97, 0x68, 0x22, 0x2c, 0x11, 0x65, 0x51, 0x9b, - 0x04, 0xb5, 0xf5, 0x8b, 0xc9, 0xf1, 0x6d, 0x05, 0x86, 0xd6, 0xdd, 0xea, 0x5b, 0xa6, 0xb7, 0x53, - 0x71, 0xf4, 0x07, 0x3f, 0x21, 0x41, 0x2e, 0x09, 0x04, 0x99, 0x0c, 0x0b, 0x12, 0xf0, 0xa8, 0x4d, - 0xe1, 0x5d, 0x3d, 0xf8, 0xc9, 0x44, 0xf9, 0x1f, 0x05, 0x66, 0x5b, 0x1b, 0x09, 0xe3, 0xab, 0x64, - 0xba, 0xbb, 0x1b, 0x8e, 0xbd, 0x6d, 0xd6, 0xd0, 0x93, 0x49, 0xf7, 0x26, 0x0c, 0x3b, 0xa6, 0xbb, - 0xeb, 0xc7, 0x52, 0x3e, 0x31, 0x2a, 0xe3, 0x25, 0x81, 0xf5, 0x71, 0x19, 0xa0, 0x62, 0x0f, 0x39, - 0xad, 0xa6, 0xe2, 0x4b, 0x02, 0xd9, 0x9f, 0xe2, 0x6c, 0x9a, 0x3c, 0x9a, 0xda, 0x3c, 0x9c, 0x97, - 0x43, 0x30, 0x0d, 0xfd, 0xb1, 0x82, 0x0d, 0x7a, 0xc5, 0x41, 0x74, 0xab, 0xbd, 0x6b, 0xd6, 0x4d, - 0xef, 0x9e, 0x1f, 0xb5, 0x09, 0x55, 0xf3, 0x3c, 0xf4, 0xe2, 0xb0, 0x8e, 0x2e, 0xb6, 0x53, 0x22, - 0x71, 0x1b, 0x36, 0x21, 0x44, 0x45, 0x24, 0x48, 0xc5, 0x9b, 0x02, 0xe1, 0x4e, 0x85, 0x85, 0xe3, - 0xf1, 0xa3, 0x7d, 0x0e, 0xe6, 0x04, 0x5d, 0x81, 0x38, 0xfe, 0x46, 0x8e, 0x47, 0x29, 0xef, 0xe8, - 0xee, 0x0e, 0x65, 0x7b, 0x10, 0xb7, 0xbc, 0xa2, 0xbb, 0x3b, 0xea, 0x18, 0x74, 0x1b, 0x6c, 0x2a, - 0xfd, 0x7f, 0x16, 0x07, 0x02, 0x6e, 0xb4, 0xbf, 0x52, 0xe0, 0xe4, 0xba, 0x5b, 0x5d, 0xd6, 0x3d, - 0x63, 0x87, 0x37, 0x86, 0x2b, 0xd4, 0xc7, 0x8b, 0xd0, 0x87, 0x87, 0xf0, 0xbd, 0x4f, 0x77, 0x1b, - 0x0a, 0xa1, 0x58, 0xc5, 0x17, 0x05, 0x1a, 0x39, 0x1f, 0xd6, 0x88, 0x98, 0x2f, 0xed, 0x2f, 0x14, - 0x38, 0x27, 0x85, 0x60, 0xea, 0x39, 0x0d, 0xc3, 0x2d, 0xf5, 0x20, 0x37, 0xa7, 0x9c, 0xea, 0x9e, - 0x1f, 0x2c, 0x0d, 0x31, 0x05, 0x21, 0x57, 0x5d, 0x80, 0x09, 0x03, 0xd3, 0xa8, 0x94, 0x09, 0x7b, - 0x65, 0xc3, 0xac, 0x10, 0xc9, 0x06, 0x4b, 0xe3, 0xb4, 0x8b, 0x90, 0x5d, 0x31, 0x2b, 0xae, 0x7a, - 0x09, 0xd4, 0x6d, 0xdd, 0xac, 0xc5, 0xc0, 0xbb, 0x31, 0xf8, 0x18, 0xe9, 0x69, 0x41, 0x87, 0xd4, - 0xfd, 0xf5, 0x1e, 0xc8, 0xaf, 0xbb, 0xd5, 0x3b, 0x96, 0xeb, 0xe9, 0x96, 0xd7, 0x0a, 0xf2, 0xee, - 0xea, 0x4d, 0xcb, 0xd8, 0x11, 0xea, 0xfa, 0x18, 0xf4, 0xd1, 0x28, 0x8d, 0x4c, 0x22, 0xfd, 0xe5, - 0x4f, 0xbc, 0xef, 0x51, 0xca, 0x15, 0x64, 0xd9, 0xf5, 0x20, 0x82, 0xf3, 0x5b, 0x56, 0xfd, 0x06, - 0x75, 0x0e, 0x86, 0xde, 0x6d, 0xda, 0x5e, 0xd0, 0x8f, 0xa3, 0xb6, 0x12, 0xe0, 0x26, 0x02, 0x50, - 0x82, 0x09, 0x5e, 0x78, 0xd7, 0x46, 0x00, 0x36, 0x56, 0x8f, 0xc7, 0x76, 0x9f, 0x85, 0x63, 0x82, - 0xb8, 0xae, 0x8d, 0x00, 0xcc, 0x67, 0x2b, 0x11, 0xd4, 0xad, 0xc1, 0x70, 0x24, 0xa0, 0x6b, 0x23, - 0xf2, 0x1a, 0xaa, 0x87, 0xa2, 0xb9, 0x33, 0x30, 0x42, 0xb5, 0x66, 0x98, 0x75, 0xbd, 0xe6, 0xe2, - 0x00, 0x6b, 0xa4, 0x34, 0x4c, 0x14, 0x47, 0xda, 0xd4, 0x73, 0x30, 0x1a, 0xe8, 0x8e, 0x42, 0x0d, - 0x62, 0xa8, 0x11, 0xaa, 0x3e, 0xd2, 0x58, 0xbc, 0x25, 0xb0, 0xe2, 0x33, 0x61, 0x2b, 0x16, 0x4c, - 0xb7, 0x76, 0x16, 0x34, 0x71, 0x2f, 0x73, 0x56, 0xbf, 0x3e, 0x88, 0x3d, 0x00, 0x05, 0xdb, 0x40, - 0x4e, 0x03, 0x79, 0x4d, 0x1c, 0x41, 0x76, 0x6e, 0x38, 0x31, 0xcb, 0xe8, 0x4e, 0x58, 0xc6, 0x1c, - 0x0c, 0x91, 0x43, 0x65, 0xd9, 0xd7, 0x4a, 0x60, 0x3a, 0xa4, 0x69, 0x59, 0x0f, 0x16, 0x15, 0x06, - 0xc0, 0x58, 0xc4, 0x66, 0x4a, 0x14, 0xe9, 0x0d, 0xbf, 0xc9, 0x5f, 0x54, 0x14, 0xc4, 0x35, 0xf4, - 0x1a, 0x2a, 0x6f, 0xeb, 0x86, 0x67, 0x3b, 0xd8, 0x0c, 0x46, 0x4a, 0xe3, 0xa4, 0x6b, 0xd3, 0xef, - 0x59, 0xc3, 0x1d, 0xea, 0x6d, 0x36, 0xa6, 0xb7, 0xdf, 0x40, 0x78, 0x7a, 0x47, 0x17, 0xcf, 0x86, - 0xdc, 0x0a, 0x3d, 0xe6, 0x06, 0xfb, 0xe7, 0x3d, 0xfc, 0xf3, 0xfe, 0x7e, 0x03, 0x05, 0x9c, 0xf9, - 0xff, 0x56, 0xef, 0xc0, 0x68, 0x5d, 0xdf, 0x45, 0x4e, 0x79, 0x1b, 0x21, 0x3f, 0xc0, 0x45, 0xed, - 0x04, 0xd0, 0xc3, 0x18, 0x75, 0x0d, 0xa1, 0x92, 0xee, 0x61, 0x52, 0x5e, 0x94, 0x54, 0x1b, 0xa1, - 0xf2, 0xb0, 0x17, 0x26, 0xf5, 0x26, 0x4c, 0x72, 0x8f, 0x0f, 0x90, 0x9d, 0xa0, 0x6a, 0x26, 0xcf, - 0x0e, 0x9f, 0x87, 0x9c, 0xf0, 0xdc, 0x30, 0xd4, 0xc6, 0x39, 0xaa, 0xce, 0x3f, 0x34, 0x08, 0x1c, - 0xc4, 0xf0, 0xe1, 0x38, 0x88, 0x91, 0x03, 0x76, 0x10, 0xa3, 0x1d, 0x3a, 0x88, 0x4d, 0x98, 0xe0, - 0x1d, 0x93, 0x8e, 0x66, 0x27, 0x37, 0xee, 0x24, 0xce, 0x48, 0x9f, 0x85, 0xf1, 0xe4, 0xf9, 0x68, - 0xac, 0x83, 0xf3, 0xd1, 0x51, 0x3b, 0x76, 0x38, 0x5a, 0x84, 0x29, 0xce, 0xe1, 0xa8, 0x86, 0x72, - 0xe3, 0xa7, 0x94, 0xf9, 0x81, 0xd2, 0x44, 0xe2, 0xa8, 0x53, 0x43, 0xc5, 0x97, 0x05, 0x7e, 0x6b, - 0x9e, 0xe3, 0xb7, 0xb8, 0x2e, 0x47, 0xbb, 0x00, 0x4f, 0xa5, 0x80, 0x30, 0x0f, 0xf6, 0x51, 0x3f, - 0x9c, 0x69, 0xc1, 0x2e, 0x9b, 0x96, 0xee, 0xec, 0xdf, 0x6b, 0xf8, 0x02, 0xb8, 0x4f, 0xe4, 0xc5, - 0xce, 0xc0, 0x48, 0xe0, 0x60, 0xf6, 0xeb, 0x5b, 0x76, 0x8d, 0xfa, 0x31, 0xea, 0x98, 0x36, 0x71, - 0x9b, 0xfa, 0x14, 0x1c, 0xa5, 0x40, 0x0d, 0xc7, 0xde, 0x33, 0x7d, 0xea, 0xc4, 0x9b, 0x8d, 0x92, - 0xe6, 0x0d, 0xda, 0x1a, 0x77, 0x3f, 0xbd, 0x1d, 0xba, 0x9f, 0x76, 0xbd, 0x5e, 0xd2, 0x5d, 0xf5, - 0x1f, 0x9c, 0xbb, 0x1a, 0xe8, 0xd4, 0x5d, 0x5d, 0x85, 0x49, 0xf4, 0xb0, 0x61, 0x62, 0xc3, 0xb7, - 0xca, 0x9e, 0x59, 0x47, 0xae, 0xa7, 0xd7, 0x1b, 0xd8, 0xff, 0x75, 0x97, 0x26, 0x5a, 0x7d, 0xf7, - 0x83, 0x2e, 0x1f, 0xc5, 0x45, 0x9e, 0x57, 0x43, 0x75, 0x64, 0x79, 0x21, 0x14, 0x20, 0x28, 0xad, - 0xbe, 0x16, 0x0a, 0x4b, 0x5a, 0x0d, 0x85, 0x93, 0x56, 0xb1, 0xcd, 0x69, 0x38, 0x6b, 0xd8, 0x32, - 0x72, 0x38, 0x5e, 0x69, 0xf4, 0x80, 0xbd, 0xd2, 0xd1, 0x0e, 0xbd, 0xd2, 0xa1, 0x39, 0x90, 0xe2, - 0xaa, 0xc0, 0x19, 0x5c, 0xe2, 0x38, 0x03, 0xe1, 0xea, 0xd5, 0x2e, 0xc3, 0xd3, 0x19, 0xc0, 0x98, - 0x53, 0xf8, 0xce, 0x60, 0xd8, 0x29, 0xdc, 0xf6, 0x0d, 0x6a, 0x7f, 0xad, 0xe9, 0x35, 0x1d, 0xe4, - 0x7e, 0xfa, 0x43, 0x9b, 0x98, 0xaf, 0xe8, 0x3b, 0x58, 0x5f, 0xd1, 0x2f, 0xf2, 0x15, 0xc7, 0xa0, - 0x0f, 0xaf, 0xbc, 0x7d, 0xbc, 0xb0, 0xbb, 0x4b, 0xf4, 0x17, 0xc7, 0x87, 0x0c, 0x1e, 0x9c, 0x0f, - 0x81, 0x83, 0x0e, 0x79, 0x86, 0x0e, 0x2f, 0xe4, 0x19, 0x3e, 0xb4, 0x90, 0xe7, 0x67, 0xdc, 0xb9, - 0x08, 0x42, 0x9e, 0xb1, 0x83, 0x0f, 0x79, 0xc6, 0x0f, 0x35, 0xe4, 0x51, 0xc5, 0x21, 0x4f, 0x3b, - 0x5e, 0x4e, 0xe8, 0x8e, 0xa2, 0x5e, 0x4e, 0x08, 0xc6, 0xbc, 0xdc, 0x9f, 0x28, 0x90, 0x8b, 0xa4, - 0x6f, 0x08, 0xd4, 0x61, 0xa6, 0x9a, 0x9e, 0x13, 0xc8, 0x79, 0x9a, 0x9f, 0x6a, 0x0a, 0x31, 0xa4, - 0xfd, 0xa9, 0x02, 0xa7, 0x44, 0x9d, 0x59, 0xb3, 0x4d, 0xeb, 0xd0, 0xef, 0x20, 0xb7, 0x59, 0xf3, - 0x82, 0xb4, 0xf4, 0x65, 0x09, 0xfb, 0x51, 0xfa, 0x3e, 0x12, 0x96, 0x45, 0x29, 0x05, 0x34, 0x82, - 0xe4, 0x55, 0x37, 0x2f, 0x79, 0xf5, 0x03, 0x05, 0x8e, 0xf1, 0xa9, 0xa8, 0x2f, 0xc1, 0x40, 0xb0, - 0xda, 0x68, 0x4a, 0x3d, 0x93, 0x11, 0x33, 0x24, 0xf5, 0x39, 0xe8, 0xc5, 0x2e, 0x80, 0xec, 0x2e, - 0xd9, 0xb0, 0x09, 0x86, 0x7a, 0x1d, 0xba, 0xb7, 0x11, 0x49, 0x8b, 0x66, 0x44, 0xf4, 0xe1, 0x93, - 0x49, 0x39, 0x32, 0x0d, 0xad, 0xab, 0x84, 0x0c, 0x49, 0xca, 0xe5, 0xa8, 0xe5, 0x88, 0x56, 0x59, - 0x8b, 0x26, 0xc7, 0x7e, 0x8a, 0x8f, 0x52, 0x92, 0x72, 0x62, 0xbe, 0xb4, 0x2d, 0x9c, 0x93, 0x13, - 0x03, 0x1c, 0x44, 0xca, 0xf2, 0xef, 0xc3, 0x46, 0x1a, 0x89, 0x33, 0x3e, 0x21, 0x05, 0xbd, 0xc0, - 0x51, 0xd0, 0x85, 0xa4, 0x82, 0x04, 0xac, 0x69, 0x08, 0xe6, 0xd3, 0x60, 0x0e, 0x42, 0x4d, 0xdf, - 0x53, 0x70, 0x7c, 0x15, 0xca, 0x8f, 0xf2, 0x26, 0x44, 0x9c, 0xdf, 0x5d, 0x8d, 0xe5, 0x77, 0xdb, - 0x53, 0x55, 0x90, 0xe5, 0x7d, 0xf9, 0x51, 0x8a, 0xc3, 0x4d, 0xe3, 0x4f, 0xfb, 0x6b, 0x05, 0x7b, - 0xdc, 0x34, 0xb8, 0x4f, 0x63, 0xb6, 0xf7, 0x03, 0x05, 0x5f, 0x35, 0xad, 0xf8, 0x21, 0x46, 0x8d, - 0x79, 0x6b, 0xa1, 0xc6, 0xa5, 0x97, 0xf5, 0x89, 0x9b, 0x99, 0x6e, 0xce, 0xcd, 0x4c, 0xd4, 0x5c, - 0x7a, 0x04, 0xe6, 0xd2, 0xdb, 0x32, 0x97, 0x02, 0x67, 0x7a, 0x66, 0x22, 0xa6, 0x1c, 0xe5, 0x5d, - 0x3b, 0x81, 0xf3, 0xd7, 0xb1, 0x56, 0xb6, 0xdb, 0xfd, 0x01, 0xd9, 0xed, 0xc8, 0x5c, 0x45, 0x61, - 0xc4, 0x86, 0x56, 0x84, 0x9e, 0x8a, 0xee, 0xe9, 0x29, 0xd7, 0x08, 0x98, 0xc8, 0xaa, 0xee, 0xe9, - 0xd4, 0xc0, 0x30, 0x4e, 0xf1, 0xfa, 0xa3, 0x94, 0x7d, 0x8e, 0xcb, 0x8a, 0xb6, 0x86, 0x3d, 0x08, - 0xb7, 0x8f, 0xd9, 0x51, 0x0e, 0xfa, 0xdd, 0xa6, 0x61, 0x20, 0x97, 0x98, 0xd0, 0x40, 0x29, 0xf8, - 0x19, 0x75, 0xd4, 0xa7, 0xa3, 0x84, 0x22, 0x0b, 0xfa, 0x10, 0x05, 0x7f, 0x91, 0x23, 0xf8, 0x45, - 0x81, 0xe0, 0x1c, 0x9e, 0xb4, 0x7b, 0x70, 0x21, 0x15, 0xa8, 0x3d, 0x55, 0x00, 0x4c, 0x06, 0x14, - 0xc9, 0x15, 0x5c, 0x8a, 0xf4, 0x99, 0xae, 0x1a, 0x5f, 0x82, 0x93, 0x6e, 0xc3, 0xf6, 0xca, 0x6c, - 0x5d, 0xb8, 0x65, 0xcf, 0x2e, 0x1b, 0x98, 0xe3, 0xb2, 0x5e, 0xab, 0xd1, 0x45, 0x98, 0x73, 0x59, - 0x14, 0x70, 0xa7, 0xe2, 0xde, 0xb7, 0x89, 0x48, 0x4b, 0xb5, 0x9a, 0xfa, 0x1a, 0x9c, 0xa9, 0x30, - 0x77, 0x21, 0x26, 0xd3, 0x83, 0xc9, 0xcc, 0x56, 0x62, 0xd7, 0xf6, 0x31, 0x62, 0x6f, 0xc3, 0x14, - 0xe6, 0x86, 0x7a, 0x01, 0x46, 0x22, 0xd7, 0xdb, 0xc6, 0x0c, 0x2a, 0x25, 0xd5, 0x65, 0xd6, 0x16, - 0x50, 0x57, 0x11, 0xcc, 0x84, 0xf8, 0x4c, 0x0c, 0xd0, 0xd7, 0xd6, 0x00, 0xb9, 0x4a, 0xd4, 0x27, - 0xb7, 0x86, 0xe1, 0x48, 0x80, 0xbd, 0x5d, 0xae, 0xbf, 0x8d, 0x3b, 0xbc, 0xb8, 0x04, 0x98, 0x82, - 0xba, 0x2b, 0x92, 0x80, 0x0c, 0x30, 0xd0, 0xf6, 0x26, 0xc2, 0x97, 0x83, 0x0c, 0x56, 0x83, 0xb9, - 0x2d, 0x6c, 0xb0, 0x65, 0x9b, 0x58, 0x6c, 0x52, 0x65, 0x83, 0x6d, 0xa9, 0x6c, 0x66, 0x2b, 0x69, - 0xff, 0x4c, 0x6b, 0x25, 0x78, 0x2a, 0x36, 0x9a, 0xd0, 0x90, 0x00, 0x1b, 0xd2, 0xe9, 0xad, 0x64, - 0xfa, 0x23, 0x66, 0x4b, 0x8e, 0x4c, 0x02, 0xa2, 0xb2, 0xa1, 0x0e, 0x54, 0x26, 0x90, 0x83, 0x68, - 0x6d, 0x1b, 0x4e, 0x84, 0x57, 0x53, 0x62, 0xc0, 0xe1, 0xb6, 0x8c, 0x20, 0xb4, 0xe8, 0x62, 0xe3, - 0x3c, 0x04, 0x2d, 0xb9, 0xe8, 0x12, 0xa3, 0x8d, 0x74, 0x20, 0x5e, 0x62, 0x85, 0xc6, 0x46, 0xfe, - 0x22, 0x9c, 0xe7, 0xcf, 0x54, 0x62, 0xf4, 0xd1, 0x0e, 0x46, 0xe7, 0x4d, 0x6b, 0x94, 0x81, 0xe2, - 0x55, 0x8e, 0x5f, 0x3e, 0x99, 0xf0, 0xcb, 0x61, 0x07, 0xa9, 0xfd, 0xd9, 0x10, 0x9c, 0xe0, 0x75, - 0x30, 0xf7, 0xbb, 0x00, 0x13, 0x78, 0xda, 0xa8, 0x99, 0x45, 0x5d, 0xf1, 0xb8, 0xdf, 0x45, 0x37, - 0x31, 0xd2, 0xa1, 0x16, 0xe1, 0x78, 0x48, 0xfd, 0x31, 0xac, 0x2e, 0x8c, 0x35, 0xdd, 0x02, 0x88, - 0xe2, 0x5e, 0x84, 0xf1, 0x96, 0x83, 0x08, 0x42, 0x28, 0xe2, 0x64, 0x8f, 0xb2, 0x45, 0x4f, 0xc3, - 0xa8, 0x1b, 0x30, 0x1d, 0x5f, 0xf1, 0x01, 0x06, 0xf1, 0xa7, 0x53, 0xb1, 0xf5, 0x4b, 0xf1, 0x96, - 0xe0, 0x64, 0x6c, 0x92, 0x62, 0x3c, 0xf6, 0x62, 0x1e, 0xf3, 0x11, 0x6d, 0x47, 0xd9, 0x7c, 0x01, - 0x66, 0x78, 0xab, 0x27, 0x18, 0xbe, 0x8f, 0xec, 0x0a, 0xc9, 0xb5, 0x40, 0x39, 0x78, 0x16, 0x72, - 0x41, 0x00, 0x18, 0x76, 0x87, 0x38, 0xac, 0xeb, 0x27, 0xac, 0xd3, 0xfe, 0x56, 0x60, 0x80, 0x23, - 0xc1, 0xeb, 0x30, 0x4d, 0x23, 0xc1, 0x04, 0xde, 0x00, 0xc6, 0x9b, 0x24, 0xdd, 0x31, 0xb4, 0x15, - 0x98, 0x0d, 0xc6, 0x4b, 0xfa, 0x48, 0x8c, 0x3d, 0x88, 0xb1, 0x67, 0x28, 0x54, 0xcc, 0xfc, 0x08, - 0x91, 0x25, 0x38, 0x49, 0xc7, 0x16, 0xd0, 0x20, 0xbe, 0x27, 0x4f, 0x80, 0xb8, 0x24, 0x5e, 0x05, - 0x2d, 0xe0, 0x83, 0xef, 0x7c, 0x30, 0x9d, 0x21, 0xb2, 0x19, 0x52, 0x48, 0x4e, 0x60, 0x80, 0x69, - 0xbd, 0x02, 0xa7, 0x29, 0x3b, 0x12, 0x52, 0xc3, 0x98, 0x14, 0xe5, 0x5b, 0x44, 0xe9, 0x59, 0xc8, - 0x25, 0xdc, 0x52, 0x30, 0x93, 0x23, 0x64, 0x36, 0x62, 0xae, 0x86, 0x4e, 0xe3, 0x2a, 0xcc, 0x45, - 0xa6, 0x31, 0xba, 0xd6, 0x31, 0x03, 0xa3, 0x11, 0xbd, 0xc6, 0x92, 0x05, 0x64, 0xf8, 0x65, 0x98, - 0x0d, 0xcf, 0x29, 0x87, 0xc8, 0xd1, 0xb0, 0x62, 0xb9, 0x34, 0x56, 0x60, 0x56, 0xe0, 0xf1, 0x02, - 0x41, 0xc6, 0x08, 0x23, 0x5c, 0xff, 0x45, 0xc5, 0xd9, 0x80, 0x73, 0x1c, 0x2b, 0xe1, 0xf0, 0x33, - 0x4e, 0x36, 0x99, 0x84, 0xb1, 0x24, 0xd8, 0x7a, 0x1d, 0xce, 0x26, 0x4d, 0x86, 0x43, 0x50, 0xc5, - 0x04, 0x4f, 0xc5, 0x2d, 0x27, 0x41, 0xef, 0x55, 0xd0, 0x24, 0xee, 0x35, 0x10, 0x75, 0x82, 0xd8, - 0x8f, 0xc8, 0x59, 0x52, 0x69, 0xdf, 0x82, 0x0b, 0x02, 0x5b, 0xe4, 0x30, 0x38, 0x89, 0x49, 0x9e, - 0xe5, 0x99, 0x64, 0x82, 0xc9, 0x37, 0x61, 0x9e, 0x6f, 0x98, 0x1c, 0xba, 0x53, 0x98, 0xee, 0x19, - 0x8e, 0x7d, 0xc6, 0xc9, 0x86, 0x42, 0xdd, 0xbf, 0x21, 0xf5, 0x75, 0xf1, 0xc3, 0x68, 0x96, 0xcc, - 0xde, 0x41, 0xa4, 0x1f, 0x6e, 0x3d, 0x4a, 0xa9, 0x91, 0x93, 0x30, 0xe6, 0x9f, 0xa6, 0xcf, 0xcb, - 0x41, 0xb2, 0xe6, 0x1e, 0x36, 0xe3, 0x79, 0xbe, 0x67, 0x52, 0x85, 0x79, 0xb2, 0x6c, 0xdf, 0x7f, - 0x75, 0xc1, 0x09, 0x19, 0xad, 0x9f, 0xc2, 0x9c, 0x9f, 0xfa, 0x06, 0x8c, 0xe2, 0x32, 0x54, 0xd3, - 0xb6, 0xca, 0x15, 0x54, 0xf3, 0x74, 0x7c, 0x68, 0x1f, 0x8a, 0x5c, 0x25, 0x45, 0x4a, 0x79, 0x29, - 0xf0, 0xaa, 0x0f, 0x4b, 0xcd, 0x62, 0xa4, 0x11, 0x6e, 0x24, 0x55, 0xc1, 0xfb, 0x76, 0xd3, 0x6b, - 0xa7, 0x8c, 0x8b, 0xa2, 0x84, 0xb4, 0xfd, 0x5d, 0x72, 0xb4, 0xe5, 0xa4, 0xa9, 0x3e, 0x29, 0x3b, - 0x4f, 0x3d, 0xe2, 0xca, 0x79, 0xd3, 0xfe, 0x4e, 0xc1, 0x67, 0x5c, 0x39, 0xd4, 0xa7, 0xd6, 0xda, - 0xff, 0x8f, 0x5e, 0x1c, 0xe0, 0xb0, 0x27, 0xa6, 0xa7, 0x9f, 0x5c, 0x06, 0x89, 0x75, 0xd7, 0x75, - 0x77, 0x17, 0x1b, 0x58, 0x2f, 0xed, 0x5e, 0xd7, 0xdd, 0xdd, 0x40, 0xa0, 0xbe, 0x96, 0x40, 0xa9, - 0x09, 0x1a, 0xae, 0x80, 0x9a, 0x46, 0x52, 0xbc, 0xbc, 0x3e, 0x96, 0x6c, 0xfa, 0x72, 0x17, 0x7e, - 0x2f, 0x23, 0x4a, 0x5f, 0xfc, 0x14, 0x29, 0xe9, 0x26, 0x47, 0x49, 0x67, 0x93, 0x4a, 0x4a, 0xca, - 0xa8, 0x9d, 0xc3, 0x39, 0x5e, 0x51, 0x77, 0xeb, 0xe9, 0x90, 0x02, 0x83, 0xec, 0xc4, 0x1b, 0x55, - 0x80, 0x92, 0xa6, 0x80, 0xae, 0x54, 0x05, 0x74, 0xcb, 0x15, 0xd0, 0x23, 0x50, 0x40, 0x2b, 0x0d, - 0xa9, 0x7d, 0x9b, 0xec, 0xa8, 0xa1, 0x74, 0x54, 0x3c, 0x7c, 0x3d, 0x94, 0x24, 0x5a, 0xea, 0x4e, - 0x2a, 0x61, 0x48, 0xbb, 0x8b, 0x37, 0x52, 0x09, 0x44, 0x5b, 0xe9, 0xb3, 0x5f, 0xe9, 0x82, 0xa9, - 0x75, 0xb7, 0xda, 0x2a, 0x5b, 0xbf, 0xef, 0xe8, 0x96, 0xbb, 0x2d, 0x31, 0xe3, 0x2b, 0x30, 0xe9, - 0xda, 0x4d, 0xc7, 0x40, 0x65, 0xde, 0x7c, 0xa9, 0xa4, 0x6f, 0x33, 0x3c, 0x6b, 0xf8, 0x5c, 0xe8, - 0x7a, 0xa6, 0x45, 0x8a, 0x7a, 0x78, 0x76, 0x3e, 0x1d, 0x02, 0xd8, 0xe4, 0xbf, 0x68, 0xe8, 0x69, - 0xef, 0x45, 0xc3, 0x42, 0x4c, 0xbf, 0xb3, 0x61, 0xfd, 0x26, 0xc5, 0xd5, 0xe6, 0xf0, 0xd5, 0x57, - 0xb2, 0x83, 0xd9, 0xf2, 0x57, 0xba, 0xf0, 0xab, 0x87, 0xdb, 0x0f, 0x3d, 0xe4, 0x58, 0x7a, 0xed, - 0x67, 0x45, 0x4f, 0x97, 0x62, 0x7a, 0x8a, 0x3c, 0x15, 0x8c, 0x0b, 0x4b, 0x9f, 0x0a, 0xc6, 0x9b, - 0x5b, 0x05, 0x77, 0x0a, 0x4e, 0xc6, 0xde, 0x35, 0xdf, 0x6d, 0x9a, 0xf8, 0xcd, 0x0e, 0x8d, 0x10, - 0x9e, 0x2c, 0x19, 0x1b, 0xf1, 0x1b, 0xdd, 0x31, 0xbf, 0xc1, 0x76, 0xfc, 0x9e, 0xb6, 0x77, 0x7c, - 0x25, 0xd8, 0xf1, 0x2f, 0xcb, 0x12, 0x27, 0x09, 0x61, 0xb4, 0x59, 0x9c, 0x37, 0x49, 0xb4, 0x87, - 0xbd, 0xde, 0x54, 0xa2, 0x17, 0x7b, 0xc0, 0x84, 0xb8, 0x4a, 0x9a, 0xb8, 0x5d, 0x22, 0x71, 0xbb, - 0x3b, 0x16, 0x57, 0xfb, 0x07, 0x05, 0x5f, 0xa6, 0x60, 0x17, 0x92, 0xe0, 0x53, 0xec, 0xf1, 0x3e, - 0x03, 0xc3, 0x35, 0x0a, 0xed, 0xc3, 0x51, 0xcf, 0x27, 0x7a, 0x7e, 0xc3, 0x55, 0x00, 0xb5, 0xbd, - 0x08, 0x9d, 0xe2, 0x33, 0xb2, 0x12, 0x76, 0x01, 0x93, 0xda, 0xd7, 0x15, 0x98, 0xe6, 0xcd, 0x40, - 0xb3, 0xe6, 0x1d, 0x80, 0x96, 0x43, 0x9e, 0xb3, 0x1b, 0x17, 0x76, 0x04, 0x3f, 0xd5, 0x49, 0xe8, - 0x45, 0x8e, 0x63, 0x07, 0xb5, 0x9c, 0xe4, 0x87, 0xe6, 0xe1, 0x82, 0x7a, 0x01, 0xaf, 0xcc, 0x1f, - 0xbf, 0xde, 0x8a, 0xe5, 0x14, 0xac, 0xbb, 0x85, 0xac, 0xba, 0x23, 0x82, 0x51, 0xed, 0x05, 0x44, - 0xb4, 0x1f, 0x28, 0x30, 0xbe, 0xee, 0x56, 0xef, 0x6d, 0x6f, 0xbb, 0xc8, 0xfb, 0x04, 0x96, 0x5a, - 0x11, 0x8e, 0xdb, 0x78, 0x2c, 0xcf, 0xb4, 0xaa, 0x51, 0xf7, 0x14, 0x64, 0xde, 0xa6, 0x5b, 0x00, - 0x61, 0xf7, 0xe4, 0x16, 0x2f, 0xc6, 0x26, 0x39, 0x1f, 0x9e, 0xe4, 0xa8, 0x04, 0xda, 0x0c, 0x7e, - 0x6f, 0x1c, 0x6d, 0x64, 0x8b, 0xeb, 0x8f, 0x48, 0x7c, 0x7a, 0xbb, 0x8e, 0x9c, 0x2a, 0xb2, 0x8c, - 0xfd, 0x4d, 0x5c, 0xde, 0x49, 0x1f, 0x23, 0x1f, 0x9a, 0xec, 0xc5, 0xab, 0xb2, 0x58, 0x92, 0xcb, - 0x0c, 0x8d, 0x25, 0xb9, 0x7d, 0xad, 0x57, 0x8c, 0x5d, 0x58, 0xd6, 0x3b, 0x96, 0xe1, 0x20, 0xdd, - 0x65, 0xf3, 0x4d, 0x2a, 0x88, 0x3e, 0x25, 0x5b, 0x4b, 0x44, 0x2f, 0x3d, 0x31, 0x9b, 0xb8, 0xc5, - 0xf6, 0x9d, 0x76, 0x4e, 0x7d, 0x74, 0xef, 0x59, 0x8c, 0x29, 0x55, 0x8b, 0x56, 0x44, 0xf1, 0x74, - 0x42, 0x5f, 0xbb, 0xf2, 0x3b, 0xe3, 0x6a, 0x5d, 0x45, 0x3f, 0x57, 0x6b, 0x5c, 0xad, 0x7c, 0x9d, - 0x50, 0xb5, 0xf2, 0x3b, 0x99, 0x5a, 0xff, 0x49, 0xc1, 0x3b, 0xdf, 0x86, 0x63, 0xee, 0x99, 0x35, - 0x54, 0x45, 0x95, 0xdb, 0x0f, 0x91, 0xd1, 0xf4, 0xd0, 0x8a, 0x6d, 0x79, 0x8e, 0x6e, 0x88, 0xd7, - 0xdf, 0x24, 0xf4, 0x6e, 0x37, 0xad, 0x8a, 0x4b, 0x55, 0x49, 0x7e, 0xa8, 0x17, 0x60, 0xcc, 0xa0, - 0x98, 0x65, 0x9d, 0x3c, 0x36, 0xa6, 0x4a, 0x3b, 0x1a, 0xb4, 0xd3, 0x37, 0xc8, 0xaa, 0x4a, 0xa3, - 0x6d, 0xa2, 0x27, 0x12, 0x45, 0xbf, 0x20, 0xa8, 0x37, 0x3b, 0x17, 0x16, 0x57, 0xc8, 0xab, 0xef, - 0x48, 0xce, 0xca, 0x00, 0x98, 0xdb, 0xfe, 0x02, 0x00, 0xe6, 0xb7, 0x5c, 0x31, 0xb7, 0xb7, 0xa9, - 0xe7, 0x96, 0x84, 0x57, 0x57, 0xfc, 0xa9, 0xfa, 0xd6, 0x7f, 0xcc, 0xcd, 0x57, 0x4d, 0x6f, 0xa7, - 0xb9, 0xb5, 0x60, 0xd8, 0x75, 0xfa, 0xdd, 0x0f, 0xfa, 0xbf, 0xcb, 0x6e, 0x65, 0xb7, 0xe0, 0xed, - 0x37, 0x90, 0x8b, 0x11, 0xdc, 0xd2, 0x20, 0x26, 0xbf, 0x6a, 0x6e, 0x6f, 0x17, 0x27, 0x38, 0x32, - 0x69, 0x9f, 0x87, 0xb1, 0x75, 0xb7, 0x5a, 0x42, 0x0f, 0x74, 0xa7, 0xe2, 0xde, 0x6b, 0x78, 0xf7, - 0x9a, 0x42, 0x4d, 0x93, 0x7b, 0x20, 0x8e, 0x52, 0x8e, 0x87, 0x95, 0x12, 0x21, 0xa5, 0xe5, 0xb1, - 0x43, 0x8d, 0xb4, 0x85, 0x5f, 0x59, 0x4f, 0xe1, 0x4e, 0xa3, 0xa6, 0x9b, 0xf5, 0xbb, 0xb6, 0xb1, - 0x8b, 0x2a, 0x6b, 0x78, 0xf2, 0xc4, 0x8b, 0x68, 0xa2, 0x86, 0xc1, 0x96, 0x88, 0xa5, 0x6f, 0x34, - 0xb7, 0x5e, 0x43, 0xfb, 0x78, 0xe2, 0x87, 0x4b, 0xbc, 0x2e, 0xf5, 0x04, 0x0c, 0xba, 0x66, 0xd5, - 0xd2, 0xbd, 0xa6, 0x43, 0x12, 0x59, 0xc3, 0xa5, 0x56, 0x83, 0x3c, 0x8e, 0x4f, 0xf2, 0x45, 0xe3, - 0xf8, 0x64, 0x07, 0x13, 0xe9, 0x4b, 0xe4, 0xc1, 0xf5, 0xa6, 0x59, 0x25, 0x31, 0xd9, 0x26, 0xf4, - 0xf9, 0xff, 0xa6, 0x82, 0x0c, 0x2f, 0xdf, 0xfa, 0xf1, 0xe3, 0xb9, 0x3e, 0x17, 0xb7, 0xfc, 0xef, - 0xe3, 0xb9, 0xcb, 0x19, 0x66, 0x71, 0xc9, 0x30, 0xa8, 0x9d, 0x96, 0x28, 0x29, 0xf5, 0x04, 0xf4, - 0xac, 0x92, 0xd3, 0xa1, 0x4f, 0x72, 0xe0, 0xc7, 0x8f, 0xe7, 0xb0, 0xcd, 0x96, 0x70, 0xab, 0xe6, - 0xe2, 0xa7, 0xeb, 0x98, 0x03, 0xdb, 0x50, 0xcf, 0x11, 0xf9, 0x49, 0x45, 0x37, 0xc9, 0x1f, 0x62, - 0x04, 0xff, 0x77, 0x69, 0xc0, 0xef, 0xc2, 0x35, 0xdb, 0x2f, 0x42, 0xef, 0x9e, 0x5e, 0x6b, 0x22, - 0x9a, 0x07, 0xd2, 0x04, 0xb1, 0x43, 0x48, 0xb4, 0x20, 0xad, 0x85, 0xd1, 0xb4, 0xaf, 0x76, 0xe3, - 0x25, 0xbe, 0x54, 0xa9, 0x9b, 0x16, 0xb9, 0xee, 0xe3, 0xe4, 0xa6, 0x3a, 0x4b, 0x5e, 0xbc, 0x0e, - 0x63, 0xa1, 0x17, 0x18, 0x24, 0x95, 0xd9, 0xca, 0x48, 0x2a, 0x69, 0x7e, 0xeb, 0x68, 0x0b, 0x19, - 0x97, 0x2f, 0x0b, 0x1f, 0x81, 0xf4, 0xb4, 0xff, 0x08, 0xa4, 0x57, 0xfc, 0x08, 0xe4, 0x16, 0xf4, - 0xb9, 0x9e, 0xee, 0x35, 0x5d, 0x5a, 0x46, 0x7f, 0x46, 0xa4, 0x51, 0x2c, 0xe6, 0x26, 0x06, 0x2d, - 0x51, 0x94, 0x62, 0x51, 0x96, 0x20, 0x94, 0xeb, 0x58, 0x7b, 0x1a, 0xe7, 0x07, 0xe5, 0x40, 0xcc, - 0x5c, 0xff, 0x90, 0x3c, 0x19, 0x5f, 0x22, 0x1f, 0x4c, 0x78, 0x0f, 0x6d, 0x7a, 0xfa, 0x2e, 0xfa, - 0x05, 0x47, 0xb7, 0x3c, 0xf1, 0x1a, 0x5c, 0x82, 0xbe, 0x2a, 0x86, 0xa0, 0x31, 0xfa, 0x05, 0x81, - 0x64, 0x98, 0x4c, 0x40, 0x19, 0x2b, 0xb4, 0x44, 0x11, 0x8b, 0x57, 0x64, 0xef, 0xc5, 0x79, 0xcc, - 0x68, 0xa7, 0xf1, 0x6b, 0x51, 0x5e, 0x17, 0x93, 0x65, 0x1f, 0x3b, 0x93, 0x25, 0x9f, 0x11, 0xdd, - 0x0b, 0x41, 0x08, 0x05, 0xc9, 0x41, 0x3f, 0xe6, 0x87, 0x3d, 0xb6, 0x08, 0x7e, 0xca, 0xdd, 0x42, - 0x72, 0x04, 0xea, 0x16, 0x92, 0x1d, 0x8c, 0xb7, 0x7f, 0x56, 0x5a, 0xb7, 0xe1, 0xb7, 0x29, 0xad, - 0x75, 0xbb, 0x62, 0x6e, 0x9b, 0x86, 0x2e, 0x8d, 0xab, 0xef, 0xc3, 0x40, 0xf0, 0xbd, 0x24, 0xba, - 0x34, 0x6f, 0x0a, 0xd4, 0x2d, 0xa4, 0xbd, 0x41, 0xf1, 0x4b, 0x8c, 0x52, 0xb6, 0xcd, 0x4d, 0x48, - 0x50, 0x3b, 0x8f, 0xf7, 0x36, 0x61, 0x3f, 0x93, 0xfa, 0x7d, 0x05, 0x27, 0x35, 0x32, 0x3f, 0x08, - 0x7f, 0x2d, 0x21, 0x6c, 0x21, 0xb5, 0xca, 0x9a, 0x90, 0xe4, 0xc8, 0x78, 0x4d, 0x20, 0x63, 0x24, - 0x05, 0x91, 0x78, 0xbc, 0x4c, 0x52, 0x10, 0xc2, 0x57, 0xcb, 0xdf, 0x25, 0xe7, 0x83, 0xf6, 0x9e, - 0x2b, 0x6f, 0x24, 0xc4, 0xba, 0x26, 0xba, 0x08, 0xe1, 0xd1, 0xe5, 0xc8, 0x96, 0xa9, 0x18, 0x9e, - 0xff, 0xc0, 0x91, 0x9c, 0x1b, 0xe4, 0x2f, 0x1b, 0xa9, 0xb5, 0xb6, 0xff, 0x7a, 0x29, 0xbb, 0xb5, - 0x0a, 0x69, 0x77, 0x6a, 0xad, 0xe2, 0xb7, 0x0d, 0xc4, 0x5a, 0xd3, 0x1f, 0x35, 0x04, 0x6b, 0xb4, - 0xed, 0x87, 0x9c, 0x6d, 0xac, 0x51, 0x11, 0xed, 0x8e, 0xd7, 0xa8, 0xf0, 0xdd, 0x1a, 0x5d, 0xa3, - 0xa9, 0x0f, 0xd6, 0xbe, 0x17, 0x4a, 0xd7, 0xac, 0xd8, 0xf5, 0x7a, 0xd3, 0x32, 0xbd, 0xfd, 0x0d, - 0xdb, 0xae, 0x6d, 0x36, 0x90, 0x55, 0x11, 0xca, 0x5c, 0x4a, 0xc8, 0x7c, 0x43, 0xe6, 0x97, 0x92, - 0x94, 0x39, 0x12, 0x67, 0xfa, 0xea, 0x80, 0x80, 0x1c, 0xfd, 0xea, 0x80, 0xa0, 0x37, 0xbe, 0x7e, - 0x5b, 0xeb, 0x1b, 0x7f, 0xf7, 0x87, 0xec, 0x93, 0x07, 0xb0, 0x7e, 0xb9, 0x74, 0x3b, 0x5d, 0xbf, - 0x5c, 0x62, 0x74, 0xfd, 0x72, 0xfb, 0x98, 0x94, 0xff, 0x42, 0x2e, 0x1e, 0xe2, 0x97, 0x76, 0x59, - 0x64, 0xfd, 0x4c, 0x42, 0xd6, 0x62, 0xc6, 0x2b, 0x41, 0xb9, 0xc4, 0x99, 0x3e, 0x83, 0x23, 0x21, - 0x49, 0x3f, 0x83, 0x23, 0x81, 0x60, 0xd2, 0xff, 0x90, 0x96, 0x2f, 0x27, 0x4d, 0x3f, 0x8b, 0x02, - 0xde, 0x4e, 0x28, 0xe0, 0x85, 0xec, 0x8b, 0x59, 0xae, 0x83, 0x65, 0x81, 0x0e, 0x2e, 0xa6, 0xac, - 0xe8, 0xb0, 0x1a, 0x48, 0x74, 0x27, 0x07, 0x62, 0x9a, 0xf8, 0x47, 0x05, 0x27, 0x2a, 0x08, 0xc0, - 0x9a, 0xed, 0x18, 0xa8, 0xb2, 0xc9, 0x42, 0x55, 0xa1, 0x06, 0xde, 0x48, 0x68, 0xe0, 0xba, 0x34, - 0x76, 0x8d, 0x13, 0xe6, 0x48, 0x5e, 0x14, 0x48, 0x1e, 0xc9, 0x1d, 0xf0, 0xa9, 0xd1, 0xdc, 0x01, - 0xbf, 0x33, 0x6e, 0xf1, 0xf7, 0x1d, 0xbd, 0x62, 0x5a, 0xf4, 0xb4, 0xb9, 0xa2, 0xd7, 0x1b, 0xba, - 0x59, 0xb5, 0x52, 0xbc, 0x77, 0x76, 0x8b, 0x97, 0x50, 0xef, 0xd4, 0xe2, 0x25, 0x24, 0xa9, 0xc5, - 0x4b, 0x20, 0x98, 0xf4, 0xdf, 0x22, 0xa9, 0xda, 0x20, 0x16, 0xbb, 0x6d, 0xe9, 0x5b, 0x92, 0xaf, - 0x61, 0xdd, 0x49, 0x08, 0x7c, 0x59, 0xb8, 0x49, 0x87, 0x09, 0x72, 0x64, 0x5c, 0x14, 0xc8, 0x98, - 0x8f, 0xee, 0xcc, 0x61, 0x2a, 0x34, 0xff, 0x1a, 0x6d, 0xcc, 0x34, 0x8f, 0x07, 0xe6, 0xb9, 0x24, - 0xd4, 0x0f, 0x74, 0x1e, 0x23, 0x9e, 0x4b, 0x02, 0xc1, 0xa4, 0xff, 0x11, 0x79, 0xdc, 0x14, 0x01, - 0xdd, 0x40, 0x96, 0xff, 0x63, 0xc3, 0x36, 0x2d, 0xcf, 0x4d, 0x51, 0xc1, 0x2f, 0x26, 0x54, 0xf0, - 0x52, 0x16, 0x15, 0x70, 0x86, 0xe0, 0xe8, 0x21, 0xd3, 0x43, 0xd3, 0x34, 0xba, 0xf4, 0xa1, 0x69, - 0x1a, 0x18, 0xd3, 0xc8, 0xef, 0x2a, 0x30, 0xba, 0xee, 0x56, 0xd7, 0x10, 0x5a, 0x35, 0x5d, 0x9c, - 0xd6, 0x11, 0x0a, 0xbf, 0x96, 0x10, 0xfe, 0xa2, 0x40, 0xf8, 0x10, 0x35, 0x8e, 0x9c, 0x05, 0x81, - 0x9c, 0xd3, 0x61, 0x39, 0x43, 0x24, 0xb4, 0x1c, 0x1c, 0x8b, 0xb6, 0x30, 0xee, 0xff, 0x9b, 0xd4, - 0xea, 0x2c, 0x79, 0x76, 0xdd, 0x34, 0x42, 0x85, 0x33, 0x6b, 0x08, 0xad, 0x37, 0x6b, 0x9e, 0xd9, - 0xa8, 0x99, 0xc8, 0xd9, 0x34, 0x76, 0x50, 0xa5, 0x29, 0x59, 0xaf, 0x7a, 0x42, 0xb0, 0xdb, 0x02, - 0xc1, 0xb2, 0x0d, 0xc4, 0x91, 0xf9, 0x55, 0x81, 0xcc, 0x8b, 0x91, 0x73, 0x6f, 0x26, 0xea, 0xda, - 0x33, 0x70, 0x35, 0x33, 0x30, 0xd3, 0xd4, 0x6f, 0x92, 0x3d, 0x7b, 0x13, 0x79, 0xab, 0xa8, 0x86, - 0xaa, 0x24, 0xfd, 0xc2, 0xee, 0x7f, 0x0d, 0x64, 0xee, 0xc9, 0xaa, 0x25, 0x4e, 0xc0, 0xa0, 0x13, - 0x00, 0xd1, 0xf7, 0x6e, 0xad, 0x86, 0xe2, 0xf3, 0xb2, 0xed, 0x56, 0x3e, 0x62, 0x4e, 0xd1, 0x0a, - 0x78, 0x0a, 0xe5, 0x60, 0x81, 0x18, 0xc5, 0xae, 0x9c, 0xa2, 0x95, 0x71, 0x1a, 0x82, 0x14, 0x4f, - 0x6c, 0xd8, 0xae, 0x77, 0xcf, 0xaa, 0xed, 0xaf, 0xdb, 0x15, 0xe1, 0xfc, 0xca, 0x93, 0x0d, 0x49, - 0x3a, 0x34, 0xd9, 0x90, 0xec, 0x60, 0xca, 0x7c, 0x44, 0x93, 0x3a, 0x34, 0x1d, 0x91, 0x85, 0x09, - 0xfc, 0xf5, 0xb0, 0x9a, 0x6d, 0xec, 0xba, 0x65, 0x7a, 0x33, 0xd0, 0x45, 0xbf, 0x1e, 0x86, 0x1b, - 0x97, 0x48, 0xea, 0x5f, 0x9e, 0xb6, 0xe1, 0x0c, 0x17, 0xa4, 0x6d, 0x38, 0x5d, 0xe1, 0x4f, 0x54, - 0xce, 0x84, 0x2f, 0xbc, 0x43, 0x9f, 0x36, 0xf5, 0xe3, 0xf7, 0x27, 0xbb, 0x75, 0x4b, 0xfb, 0x6c, - 0x46, 0xf1, 0x9a, 0xac, 0x40, 0x49, 0xc4, 0x13, 0x2d, 0x50, 0x12, 0x75, 0x07, 0xa2, 0x2d, 0xfe, - 0xdb, 0xf3, 0xd0, 0xbd, 0xee, 0x56, 0xd5, 0xb7, 0xa0, 0x3f, 0xf8, 0x92, 0xe8, 0x69, 0x71, 0x62, - 0x95, 0x82, 0xe4, 0x2f, 0xa4, 0x82, 0xb0, 0xcb, 0x83, 0x77, 0x60, 0x80, 0x7d, 0xda, 0x53, 0x92, - 0xb2, 0x0d, 0x60, 0xf2, 0x17, 0xd3, 0x61, 0x18, 0xed, 0xaf, 0x2a, 0x30, 0x2d, 0xfa, 0xa2, 0xdf, - 0x55, 0x31, 0x1d, 0x01, 0x4a, 0xfe, 0xb9, 0xb6, 0x51, 0x18, 0x27, 0xbf, 0xa1, 0xc0, 0x09, 0xe9, - 0x77, 0xe2, 0x6e, 0xa4, 0xd2, 0xe6, 0xe2, 0xe5, 0x5f, 0xec, 0x0c, 0x8f, 0x31, 0xf6, 0x7b, 0x0a, - 0x9c, 0x4a, 0xfd, 0xd2, 0x4b, 0x31, 0x75, 0x10, 0x21, 0x6e, 0x7e, 0xb9, 0x73, 0x5c, 0xc6, 0xe4, - 0x2f, 0xc1, 0x24, 0xf7, 0x8b, 0xa0, 0x0b, 0x62, 0xda, 0x3c, 0xf8, 0xfc, 0x8d, 0xf6, 0xe0, 0xd9, - 0xf8, 0xdf, 0x50, 0x20, 0x2f, 0xf9, 0x10, 0xe7, 0x35, 0x31, 0x59, 0x31, 0x56, 0xfe, 0xf9, 0x4e, - 0xb0, 0x18, 0x4b, 0x5f, 0x56, 0x60, 0x8a, 0xff, 0xed, 0x8a, 0x42, 0x16, 0x21, 0x43, 0x08, 0xf9, - 0x67, 0xdb, 0x44, 0x60, 0x3c, 0xd8, 0x70, 0x34, 0xfe, 0x82, 0x5a, 0xb2, 0xf0, 0x63, 0xa0, 0xf9, - 0xab, 0x99, 0x41, 0x23, 0x42, 0xf3, 0x9f, 0x30, 0x17, 0xd2, 0x94, 0x19, 0x43, 0x90, 0x09, 0x2d, - 0x7f, 0x7d, 0xdc, 0x84, 0xf1, 0xe4, 0x53, 0xda, 0xa7, 0x53, 0xa8, 0x85, 0x81, 0xf3, 0xcf, 0xb4, - 0x01, 0xcc, 0x86, 0xfd, 0x55, 0x05, 0x8e, 0x8b, 0xaf, 0x95, 0x25, 0x24, 0x85, 0x48, 0xf9, 0x5b, - 0x1d, 0x20, 0x45, 0x96, 0x84, 0xe4, 0x33, 0x18, 0xd7, 0xd2, 0x6c, 0x8a, 0x87, 0x25, 0x5b, 0x12, - 0x19, 0xbe, 0x5c, 0xe1, 0xbb, 0xb2, 0xd4, 0x8f, 0x2a, 0x14, 0x33, 0xad, 0x3a, 0x2e, 0xae, 0xcc, - 0x95, 0x65, 0xfe, 0x08, 0xc2, 0xaf, 0x29, 0x30, 0x23, 0x7b, 0x9f, 0x72, 0x3d, 0xbb, 0x0a, 0xc2, - 0x6b, 0xf8, 0x85, 0x8e, 0xd0, 0xa2, 0xde, 0x84, 0x5b, 0xd0, 0x5e, 0x48, 0x5b, 0xa5, 0x31, 0x04, - 0xa9, 0x37, 0x91, 0x55, 0x8d, 0x63, 0xcd, 0xc8, 0xea, 0x8c, 0xaf, 0x67, 0x5a, 0xb1, 0x71, 0x34, - 0x99, 0x66, 0xb2, 0x94, 0x08, 0x87, 0xf6, 0x47, 0x71, 0x56, 0x3d, 0x7d, 0x7f, 0x14, 0xe2, 0x66, - 0xd8, 0x1f, 0x53, 0x13, 0xe0, 0xea, 0x6f, 0x29, 0x70, 0x52, 0xfe, 0xd5, 0x95, 0x54, 0x1f, 0x2f, - 0x40, 0xcc, 0xbf, 0xd4, 0x21, 0x22, 0xe3, 0xed, 0xb7, 0x15, 0x98, 0x4d, 0x79, 0xab, 0x72, 0xb3, - 0xad, 0x31, 0xc2, 0x66, 0xff, 0x72, 0xa7, 0x98, 0x8c, 0xbd, 0xaf, 0x29, 0x90, 0x13, 0x3e, 0x54, - 0x58, 0x4c, 0xb3, 0xe5, 0x24, 0x4e, 0xbe, 0xd8, 0x3e, 0x4e, 0x44, 0x57, 0x29, 0x9f, 0xac, 0xb8, - 0x99, 0xc9, 0x9c, 0x39, 0x98, 0x32, 0x5d, 0x65, 0xfc, 0xda, 0xc4, 0x43, 0x50, 0x39, 0x65, 0xf0, - 0x97, 0x24, 0x75, 0x16, 0x09, 0xe8, 0xfc, 0xb5, 0x76, 0xa0, 0xd9, 0xc8, 0x0e, 0x8c, 0x25, 0xca, - 0xca, 0x25, 0x07, 0x81, 0x38, 0x6c, 0x7e, 0x31, 0x3b, 0x6c, 0x78, 0xa3, 0x4f, 0x96, 0x69, 0x4b, - 0x36, 0xfa, 0x04, 0xb0, 0x6c, 0xa3, 0x17, 0xd6, 0x46, 0xe3, 0x33, 0x8b, 0xa8, 0xf0, 0xf8, 0x6a, - 0xca, 0x14, 0x26, 0x51, 0x64, 0x67, 0x96, 0xb4, 0x6a, 0x5c, 0x7f, 0x53, 0xe0, 0x57, 0x91, 0x4a, - 0x36, 0x05, 0x2e, 0x82, 0x6c, 0x53, 0x90, 0x96, 0x7f, 0xaa, 0x35, 0x18, 0x8d, 0x55, 0xef, 0xce, - 0x8b, 0x49, 0x45, 0x21, 0xf3, 0x57, 0xb2, 0x42, 0xb2, 0xd1, 0x7e, 0x59, 0x81, 0x63, 0x82, 0x4a, - 0xd3, 0x2b, 0x32, 0x37, 0xcd, 0xc3, 0xc8, 0xdf, 0x6c, 0x17, 0x23, 0xc2, 0x86, 0xa0, 0x32, 0xf3, - 0x8a, 0xec, 0x60, 0xdd, 0x2e, 0x1b, 0xf2, 0x62, 0x46, 0xd5, 0x84, 0x91, 0x68, 0x49, 0xdd, 0x53, - 0x62, 0x52, 0x11, 0xc0, 0x7c, 0x21, 0x23, 0x60, 0xc4, 0xf1, 0xa5, 0xd4, 0x5d, 0x49, 0xe4, 0x90, - 0x63, 0xca, 0x1c, 0x5f, 0xb6, 0x12, 0x23, 0x75, 0x1b, 0x86, 0x23, 0x7f, 0x17, 0xe6, 0xbc, 0x98, - 0x62, 0x18, 0x2e, 0xbf, 0x90, 0x0d, 0x2e, 0xec, 0xe6, 0x12, 0x7f, 0x09, 0xec, 0x62, 0x1a, 0x8d, - 0x16, 0xac, 0xcc, 0xcd, 0x89, 0xfe, 0x78, 0x15, 0x36, 0x36, 0xc1, 0x5f, 0xae, 0xba, 0x92, 0x46, - 0x2e, 0x8e, 0x21, 0x33, 0x36, 0xf9, 0x9f, 0xdf, 0xf1, 0x8f, 0xf8, 0xdc, 0x0a, 0x2e, 0x89, 0x0a, - 0x79, 0xf0, 0xb2, 0x23, 0xbe, 0xac, 0xf2, 0xca, 0xdf, 0xdb, 0x38, 0x65, 0x57, 0x92, 0xbd, 0x2d, - 0x09, 0x2d, 0xdb, 0xdb, 0xc4, 0x75, 0x55, 0xf8, 0x64, 0x27, 0x2e, 0xaa, 0x4a, 0x3b, 0x2c, 0xf2, - 0x90, 0x64, 0x27, 0xbb, 0xd4, 0x8a, 0x27, 0xdf, 0x08, 0x49, 0x78, 0x99, 0xcd, 0x08, 0x13, 0x59, - 0xb2, 0xc5, 0xec, 0xb0, 0x91, 0xad, 0x86, 0xde, 0x42, 0x46, 0xb3, 0x55, 0xb2, 0xad, 0x86, 0x9f, - 0x10, 0x7b, 0xb6, 0x4d, 0x84, 0xc8, 0x3c, 0x90, 0x26, 0x4e, 0x42, 0x4a, 0x36, 0x0f, 0xe2, 0xdc, - 0xd7, 0xad, 0x0e, 0x90, 0x38, 0xfc, 0xf0, 0xdc, 0xa1, 0xcc, 0x2e, 0x84, 0x67, 0x8d, 0x5b, 0x1d, - 0x20, 0x25, 0x03, 0x13, 0x5c, 0x8e, 0x12, 0x29, 0x50, 0x49, 0x0d, 0x4c, 0x92, 0xe5, 0x2c, 0xa9, - 0x81, 0x89, 0xb8, 0x02, 0x06, 0x5b, 0x0b, 0xbf, 0xfc, 0xa5, 0x90, 0xc5, 0xf6, 0x42, 0x08, 0x32, - 0x6b, 0x91, 0xd6, 0xa7, 0xe0, 0xd3, 0xaa, 0xac, 0x38, 0xe5, 0xba, 0x6c, 0xdb, 0x15, 0xa2, 0xc9, - 0x4e, 0xab, 0x19, 0xea, 0x46, 0xc8, 0x01, 0x42, 0x5e, 0x34, 0x72, 0xb3, 0x2d, 0x1b, 0x08, 0xf3, - 0xf6, 0x72, 0xa7, 0x98, 0x8c, 0xbd, 0x2f, 0xc2, 0x38, 0x2e, 0x7f, 0x88, 0x04, 0x93, 0x92, 0x5d, - 0x86, 0x5f, 0x31, 0x21, 0xdb, 0x65, 0xe4, 0x35, 0x16, 0x78, 0xd6, 0x88, 0x59, 0x73, 0xef, 0xb2, - 0x65, 0xb3, 0x26, 0x29, 0x62, 0x90, 0xcd, 0x5a, 0x86, 0xda, 0x07, 0x3f, 0xc8, 0x25, 0x35, 0x04, - 0x81, 0x5f, 0x96, 0x05, 0xb9, 0xd1, 0xaa, 0x03, 0x59, 0x90, 0xcb, 0xaf, 0x4f, 0xc0, 0x3a, 0x20, - 0xf3, 0x72, 0x30, 0x3a, 0x48, 0xb7, 0xdc, 0x0c, 0x75, 0x03, 0x38, 0xcf, 0xc2, 0xe1, 0x2a, 0x72, - 0xb1, 0x2e, 0xcb, 0xb3, 0xa4, 0x5d, 0xc7, 0xcb, 0xf2, 0x2c, 0x59, 0xaf, 0xf2, 0x55, 0x13, 0xc6, - 0x49, 0x4b, 0xf8, 0x32, 0xff, 0x9c, 0x98, 0x70, 0x08, 0x2c, 0x7f, 0x39, 0x13, 0x18, 0x1b, 0xea, - 0x6f, 0x15, 0xb8, 0x44, 0xc6, 0xca, 0x78, 0xf5, 0x2e, 0x8b, 0x72, 0x33, 0x51, 0xc8, 0xbf, 0xf2, - 0xa4, 0x14, 0xc2, 0xc1, 0x14, 0xe7, 0xf2, 0xf8, 0x52, 0x5a, 0x66, 0x24, 0x0c, 0x2d, 0x0b, 0xa6, - 0xc4, 0xf7, 0xc6, 0x38, 0x8c, 0xe4, 0xdd, 0x19, 0x2f, 0xa4, 0x87, 0x66, 0x91, 0xd1, 0x6f, 0xb4, - 0x07, 0x1f, 0x49, 0x27, 0x09, 0xaf, 0x81, 0x17, 0x33, 0xe4, 0x03, 0x62, 0x38, 0xb2, 0x74, 0x52, - 0xda, 0xdd, 0x6d, 0x68, 0xa5, 0xf3, 0xff, 0xd6, 0xe0, 0xf5, 0xd4, 0xe3, 0x02, 0x0f, 0x4d, 0xb6, - 0xd2, 0x33, 0xfc, 0x89, 0xbf, 0x7c, 0xef, 0x97, 0x3e, 0x7e, 0xff, 0xa2, 0xb2, 0xbc, 0xfb, 0xfd, - 0x0f, 0x67, 0x95, 0x0f, 0x3e, 0x9c, 0x55, 0x7e, 0xf4, 0xe1, 0xac, 0xf2, 0x8d, 0x8f, 0x66, 0x8f, - 0x7c, 0xf0, 0xd1, 0xec, 0x91, 0x7f, 0xff, 0x68, 0xf6, 0xc8, 0x3b, 0x6f, 0x84, 0x5e, 0x14, 0xdd, - 0x09, 0x46, 0xba, 0xab, 0x6f, 0xb9, 0x05, 0x36, 0xee, 0x65, 0xc3, 0x76, 0x50, 0xf8, 0xe7, 0x8e, - 0x6e, 0x5a, 0x85, 0xba, 0xed, 0x5b, 0xa1, 0xdb, 0xfa, 0x4b, 0xcd, 0xf8, 0xf5, 0x51, 0x61, 0x6f, - 0x71, 0xab, 0x0f, 0xff, 0xb5, 0xe5, 0x67, 0xfe, 0x3f, 0x00, 0x00, 0xff, 0xff, 0xaf, 0xae, 0x00, - 0x63, 0x0d, 0x7b, 0x00, 0x00, + // 5736 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x5d, 0x6c, 0x1c, 0x47, + 0x72, 0xb0, 0x86, 0xff, 0x2c, 0xfe, 0x88, 0x1c, 0x92, 0xe2, 0x6a, 0x29, 0x91, 0xd2, 0xe8, 0xc7, + 0x94, 0x2c, 0x71, 0x25, 0xea, 0xc7, 0xf2, 0xca, 0xb2, 0xcd, 0x1f, 0xe9, 0xb3, 0x6c, 0xd1, 0xa2, + 0x97, 0xf2, 0xf9, 0xec, 0xef, 0x0e, 0x8b, 0xe1, 0x6c, 0x73, 0x39, 0xc7, 0xdd, 0x99, 0xf5, 0xcc, + 0x2c, 0x25, 0xfa, 0x21, 0xf7, 0x83, 0x20, 0x27, 0xdc, 0x21, 0xc0, 0x01, 0x09, 0x12, 0x04, 0x48, + 0x80, 0x4b, 0x82, 0x24, 0xc8, 0x25, 0x48, 0x7c, 0xc9, 0x01, 0xf9, 0x43, 0x70, 0x48, 0x80, 0x03, + 0x0e, 0xc9, 0x8b, 0x13, 0xe0, 0x80, 0xe0, 0x1e, 0x94, 0x83, 0xfd, 0xe0, 0xe0, 0xf2, 0x16, 0xe0, + 0xf2, 0x90, 0xbc, 0x04, 0xd3, 0xdd, 0xd3, 0x3b, 0x3f, 0xdd, 0x3d, 0xb3, 0x2b, 0xd2, 0xe7, 0x3b, + 0xdc, 0x8b, 0xad, 0xed, 0xae, 0xaa, 0xae, 0xaa, 0xae, 0xae, 0xae, 0xae, 0xae, 0x1e, 0xc2, 0xac, + 0x69, 0x7d, 0x01, 0x19, 0x9e, 0xb9, 0x8b, 0x0a, 0xe8, 0x91, 0xb1, 0xad, 0x5b, 0x55, 0x54, 0xd8, + 0x5d, 0x2c, 0x78, 0x8f, 0x16, 0x1a, 0x8e, 0xed, 0xd9, 0xea, 0x14, 0xeb, 0x5f, 0x08, 0xfa, 0x17, + 0x76, 0x17, 0xf3, 0xb3, 0x86, 0xed, 0xd6, 0x6d, 0xb7, 0xb0, 0xa9, 0xbb, 0xa8, 0xb0, 0x7b, 0x79, + 0x13, 0x79, 0xfa, 0xe5, 0x82, 0x61, 0x9b, 0x16, 0x41, 0xcb, 0x2f, 0xd0, 0xfe, 0x8a, 0xe9, 0x7a, + 0x8e, 0xb9, 0xd9, 0xf4, 0x4c, 0xdb, 0x62, 0x70, 0xe1, 0x46, 0x0a, 0x3f, 0x4d, 0xe1, 0xeb, 0x6e, + 0xb5, 0xb0, 0x7b, 0xd9, 0xff, 0x1f, 0xed, 0x38, 0x4a, 0x3a, 0xca, 0xf8, 0x57, 0x81, 0xfc, 0xa0, + 0x5d, 0x93, 0x55, 0xbb, 0x6a, 0x93, 0x76, 0xff, 0x5f, 0xb4, 0xf5, 0x34, 0x5f, 0x20, 0xc6, 0x3c, + 0x81, 0x3a, 0xc9, 0x87, 0xb2, 0x9d, 0x0a, 0x72, 0x28, 0x88, 0xc6, 0x07, 0xa9, 0xeb, 0xce, 0x0e, + 0xf2, 0xe4, 0x83, 0x35, 0x1c, 0xbb, 0x61, 0xbb, 0x7a, 0x8d, 0x42, 0x9d, 0x69, 0x41, 0xd9, 0x8e, + 0x6e, 0xd4, 0x5a, 0x1a, 0x23, 0x3f, 0x29, 0xd8, 0xb8, 0x5e, 0x37, 0x2d, 0xbb, 0x80, 0xff, 0x4b, + 0x9a, 0xb4, 0xdf, 0xef, 0x86, 0x89, 0x35, 0xb7, 0xfa, 0x66, 0xa3, 0xa2, 0x7b, 0x68, 0xa3, 0x61, + 0x7b, 0x6b, 0x78, 0x74, 0x75, 0x12, 0x7a, 0xf5, 0x4a, 0xdd, 0xb4, 0x72, 0xca, 0x09, 0x65, 0x7e, + 0xb0, 0x44, 0x7e, 0xa8, 0x33, 0x30, 0x48, 0xb8, 0x2b, 0x9b, 0x95, 0x5c, 0x17, 0xee, 0x19, 0x20, + 0x0d, 0x77, 0x2b, 0xea, 0x71, 0x00, 0x0b, 0x3d, 0x2c, 0x7b, 0xa6, 0xb1, 0x83, 0x9c, 0x5c, 0x37, + 0xee, 0x1d, 0xb4, 0xd0, 0xc3, 0x07, 0xb8, 0x41, 0x7d, 0x1b, 0xa6, 0xfd, 0xee, 0xba, 0x69, 0x95, + 0x1b, 0x8e, 0x69, 0x20, 0x0c, 0x58, 0x76, 0xcd, 0xf7, 0x50, 0xae, 0xc7, 0x87, 0x5d, 0x3e, 0xf5, + 0xfd, 0x27, 0x73, 0x87, 0x7e, 0xf8, 0x64, 0x6e, 0x86, 0xcc, 0x81, 0x5b, 0xd9, 0x59, 0x30, 0xed, + 0x42, 0x5d, 0xf7, 0xb6, 0x17, 0xee, 0xa1, 0xaa, 0x6e, 0xec, 0xad, 0x22, 0xa3, 0x34, 0x61, 0xa1, + 0x87, 0x6b, 0xa6, 0xb5, 0xee, 0x53, 0xf0, 0x09, 0x6f, 0x98, 0xef, 0x21, 0xb5, 0x0c, 0xf9, 0x80, + 0xf4, 0xbb, 0x4d, 0xdd, 0xf2, 0x4c, 0x6f, 0x2f, 0x44, 0xbd, 0x37, 0x3b, 0xf5, 0x23, 0x84, 0xfa, + 0x1b, 0x94, 0x08, 0x1b, 0x60, 0x0d, 0xc6, 0x82, 0x01, 0x2c, 0xdb, 0x37, 0x2a, 0xbd, 0x96, 0xeb, + 0xcb, 0x4e, 0x76, 0x94, 0x90, 0x7d, 0x9d, 0xa2, 0x16, 0x0b, 0xff, 0xf1, 0xcd, 0xb9, 0x43, 0x5f, + 0xf9, 0xf8, 0xfd, 0xf3, 0x44, 0xad, 0x5f, 0xfb, 0xf8, 0xfd, 0xf3, 0xc7, 0xd8, 0xec, 0x72, 0x66, + 0x43, 0x3b, 0x0e, 0x33, 0x9c, 0xe6, 0x12, 0x72, 0x1b, 0xb6, 0xe5, 0x22, 0xed, 0x77, 0xfa, 0xe1, + 0x28, 0xeb, 0x5f, 0x45, 0x8e, 0xb9, 0xab, 0xfb, 0xb6, 0xf0, 0x8b, 0xa9, 0x3c, 0xf0, 0xa9, 0x54, + 0x3f, 0x07, 0x39, 0x9f, 0x9c, 0x69, 0x99, 0x9e, 0xa9, 0xd7, 0xca, 0x75, 0xdd, 0xa9, 0x9a, 0x56, + 0xd9, 0xd1, 0x3d, 0xd3, 0xce, 0xf5, 0x67, 0x27, 0x3b, 0x65, 0xa1, 0x87, 0x77, 0x09, 0x8d, 0x35, + 0x4c, 0xa2, 0xe4, 0x53, 0x50, 0x2b, 0x70, 0x0c, 0x33, 0xab, 0x9b, 0x96, 0x87, 0x2c, 0xdd, 0x32, + 0x50, 0x74, 0x84, 0x81, 0xec, 0x23, 0x1c, 0xf5, 0x19, 0x6f, 0xd1, 0x09, 0x8f, 0xf2, 0x0e, 0x99, + 0x4e, 0x07, 0x55, 0x9a, 0xf1, 0x01, 0x06, 0xb3, 0x0f, 0x30, 0x69, 0xa1, 0x87, 0x25, 0x4c, 0x22, + 0x4c, 0xbb, 0x0c, 0xbe, 0x68, 0x65, 0xbb, 0x81, 0x5a, 0xfa, 0x2e, 0x1b, 0x7a, 0x23, 0x07, 0x27, + 0x94, 0xf9, 0xa1, 0xc5, 0xb3, 0x0b, 0x5c, 0xef, 0xbf, 0x70, 0xbf, 0x81, 0x98, 0x8e, 0x57, 0xf4, + 0xc6, 0x72, 0x8f, 0xcf, 0x41, 0x49, 0xb5, 0xd0, 0xc3, 0x58, 0x8f, 0x5a, 0x85, 0x9c, 0xe1, 0xd8, + 0xae, 0x1b, 0xf0, 0x8d, 0x6a, 0x66, 0xd5, 0xdc, 0x34, 0x6b, 0xa6, 0xb7, 0x97, 0x1b, 0x3a, 0xa1, + 0xcc, 0x8f, 0x2e, 0x5e, 0x14, 0x8c, 0xb1, 0xe2, 0xa3, 0x11, 0x5e, 0x6f, 0xb7, 0x90, 0x4a, 0x47, + 0x0c, 0x6e, 0x7b, 0xf1, 0xf9, 0xc7, 0xdf, 0x9c, 0x3b, 0x94, 0x5c, 0xb8, 0x5a, 0x72, 0xe1, 0xc6, + 0x57, 0xa0, 0x76, 0x0a, 0x4e, 0x0a, 0x3b, 0xd9, 0x22, 0xfe, 0x4b, 0x05, 0x0e, 0x33, 0xa8, 0x75, + 0xdd, 0xd1, 0xeb, 0xae, 0x7a, 0x1d, 0x06, 0xf5, 0xa6, 0xb7, 0x6d, 0x3b, 0xbe, 0x34, 0x78, 0xf9, + 0x2e, 0xe7, 0xfe, 0xf5, 0x3b, 0x17, 0x27, 0xe9, 0x2e, 0xb5, 0x54, 0xa9, 0x38, 0xc8, 0x75, 0x37, + 0x3c, 0xc7, 0xb4, 0xaa, 0xa5, 0x16, 0xa8, 0x7a, 0x13, 0xfa, 0x1a, 0x98, 0x02, 0x5e, 0xd9, 0x43, + 0x8b, 0xc7, 0x05, 0x2a, 0x20, 0xc3, 0x50, 0xed, 0x52, 0x94, 0xe2, 0xb3, 0xbe, 0x80, 0x2d, 0x62, + 0xbe, 0x90, 0xb9, 0xa4, 0x90, 0x04, 0x55, 0x3b, 0x0a, 0xd3, 0xb1, 0x26, 0x26, 0xd0, 0x9f, 0x2b, + 0x00, 0x6b, 0x6e, 0x75, 0x15, 0x35, 0x6c, 0xd7, 0xf4, 0xd4, 0x23, 0xd0, 0xe7, 0x22, 0xab, 0x82, + 0x1c, 0xea, 0x87, 0xe8, 0x2f, 0xf5, 0x14, 0x8c, 0xb8, 0xcd, 0x4d, 0xdd, 0x30, 0xec, 0xa6, 0x15, + 0x72, 0x46, 0xc3, 0xad, 0xc6, 0xbb, 0x15, 0xf5, 0x39, 0xe8, 0xd3, 0xeb, 0xfe, 0xbf, 0xb1, 0x33, + 0x1a, 0x5a, 0x3c, 0x4a, 0xb7, 0xff, 0x05, 0x3f, 0x3c, 0x58, 0xa0, 0x9b, 0xdd, 0xc2, 0x8a, 0x6d, + 0x5a, 0x81, 0x30, 0x04, 0xbc, 0xf8, 0x6c, 0x78, 0xd6, 0xe8, 0x90, 0xbe, 0x44, 0x13, 0x61, 0x89, + 0x28, 0x8b, 0xda, 0x24, 0xa8, 0xad, 0x5f, 0x4c, 0x8e, 0x6f, 0x2b, 0x30, 0xb4, 0xe6, 0x56, 0xdf, + 0x32, 0xbd, 0xed, 0x8a, 0xa3, 0x3f, 0xfc, 0x29, 0x09, 0x72, 0x41, 0x20, 0xc8, 0x64, 0x58, 0x90, + 0x80, 0x47, 0x6d, 0x0a, 0xef, 0xea, 0xc1, 0x4f, 0x26, 0xca, 0x4f, 0x14, 0x98, 0x6d, 0x6d, 0x24, + 0x8c, 0xaf, 0x92, 0xe9, 0xee, 0xac, 0x3b, 0xf6, 0x96, 0x59, 0x43, 0x4f, 0x27, 0xdd, 0x9b, 0x30, + 0xec, 0x98, 0xee, 0x8e, 0x1f, 0x4b, 0xf9, 0xc4, 0xa8, 0x8c, 0x17, 0x04, 0xd6, 0xc7, 0x65, 0x80, + 0x8a, 0x3d, 0xe4, 0xb4, 0x9a, 0x8a, 0x2f, 0x09, 0x64, 0x7f, 0x86, 0xb3, 0x69, 0xf2, 0x68, 0x6a, + 0xf3, 0x70, 0x56, 0x0e, 0xc1, 0x34, 0xf4, 0xdf, 0x4a, 0x68, 0xad, 0xb6, 0x40, 0xe9, 0x5a, 0x35, + 0xdd, 0x9d, 0x35, 0xbb, 0xf2, 0x94, 0x4a, 0x8a, 0xec, 0xbc, 0xdd, 0xb1, 0x9d, 0xf7, 0x0a, 0xf4, + 0xd4, 0xed, 0x0a, 0xd9, 0x47, 0x47, 0x17, 0xe7, 0x04, 0x9a, 0x0b, 0x18, 0x29, 0x61, 0xe0, 0xe2, + 0xb2, 0x40, 0x3f, 0xe7, 0x65, 0xfa, 0x89, 0x8a, 0xa4, 0x3d, 0x0b, 0xe7, 0x52, 0x81, 0x98, 0x96, + 0xfe, 0x58, 0xc1, 0xcb, 0x7e, 0xc5, 0x41, 0x34, 0x20, 0xb9, 0x67, 0xd6, 0x4d, 0xef, 0xbe, 0x1f, + 0xdb, 0x0a, 0x75, 0xf3, 0x02, 0xf4, 0xe2, 0xe0, 0x97, 0xba, 0xa4, 0x13, 0x22, 0xa3, 0x68, 0xd8, + 0x84, 0x10, 0x35, 0x04, 0x82, 0x54, 0xbc, 0x21, 0x10, 0xf1, 0x44, 0x58, 0x44, 0x1e, 0x3f, 0xda, + 0xe7, 0x60, 0x4e, 0xd0, 0x15, 0x88, 0xe3, 0x87, 0x3b, 0x78, 0x94, 0xf2, 0xb6, 0xee, 0x6e, 0x53, + 0xb6, 0x07, 0x71, 0xcb, 0x2b, 0xba, 0xbb, 0xad, 0x8e, 0x41, 0xb7, 0xc1, 0xe6, 0xd2, 0xff, 0x67, + 0x71, 0x20, 0xe0, 0x46, 0xfb, 0x2b, 0x05, 0x8e, 0xaf, 0xb9, 0xd5, 0x65, 0xdd, 0x33, 0xb6, 0x79, + 0x63, 0xb8, 0x42, 0x7d, 0xbc, 0x08, 0x7d, 0x78, 0x08, 0xdf, 0x47, 0x77, 0xb7, 0xa1, 0x10, 0x8a, + 0x55, 0x7c, 0x51, 0xa0, 0x91, 0xb3, 0x61, 0x8d, 0x88, 0xf9, 0xd2, 0xfe, 0x42, 0x81, 0x33, 0x52, + 0x08, 0xa6, 0x9e, 0x93, 0x30, 0xdc, 0x52, 0x0f, 0x72, 0x73, 0xca, 0x89, 0xee, 0xf9, 0xc1, 0xd2, + 0x10, 0x53, 0x10, 0x72, 0xd5, 0x05, 0x98, 0x30, 0x30, 0x8d, 0x4a, 0x99, 0xb0, 0x57, 0x36, 0xcc, + 0x0a, 0x91, 0x6c, 0xb0, 0x34, 0x4e, 0xbb, 0x08, 0xd9, 0x15, 0xb3, 0xe2, 0xaa, 0x17, 0x40, 0xdd, + 0xd2, 0xcd, 0x5a, 0x0c, 0xbc, 0x1b, 0x83, 0x8f, 0x91, 0x9e, 0x16, 0x74, 0x48, 0xdd, 0x5f, 0xef, + 0x81, 0xfc, 0x9a, 0x5b, 0xbd, 0x6b, 0xb9, 0x9e, 0x6e, 0x79, 0xad, 0x50, 0xf8, 0x9e, 0xde, 0xb4, + 0x8c, 0x6d, 0xa1, 0xae, 0x8f, 0x40, 0x1f, 0x8d, 0x65, 0xc9, 0x24, 0xd2, 0x5f, 0xfe, 0xc4, 0xfb, + 0x7e, 0xb7, 0x5c, 0x41, 0x96, 0x5d, 0x0f, 0xe2, 0x5c, 0xbf, 0x65, 0xd5, 0x6f, 0x50, 0xe7, 0x60, + 0xe8, 0xdd, 0xa6, 0xed, 0x05, 0xfd, 0x38, 0xb6, 0x2d, 0x01, 0x6e, 0x22, 0x00, 0x25, 0x98, 0xe0, + 0x05, 0xc1, 0x6d, 0x84, 0xa9, 0x63, 0xf5, 0x78, 0x04, 0xfc, 0x59, 0x38, 0x22, 0x88, 0x7e, 0xdb, + 0x08, 0x53, 0x7d, 0xb6, 0x12, 0xa1, 0xef, 0x1d, 0x18, 0x8e, 0x84, 0xbd, 0x6d, 0xc4, 0xa7, 0x43, + 0xf5, 0x50, 0xcc, 0x7b, 0x0a, 0x46, 0xa8, 0xd6, 0x0c, 0xb3, 0xae, 0xd7, 0x5c, 0x1c, 0x86, 0x8e, + 0x94, 0x86, 0x89, 0xe2, 0x48, 0x9b, 0x7a, 0x06, 0x46, 0x03, 0xdd, 0x51, 0xa8, 0x41, 0x0c, 0x35, + 0x42, 0xd5, 0x47, 0x1a, 0x8b, 0x37, 0x05, 0x56, 0x7c, 0x2a, 0x6c, 0xc5, 0x82, 0xe9, 0xd6, 0x4e, + 0x83, 0x26, 0xee, 0x65, 0xce, 0xea, 0xd7, 0x07, 0xb1, 0x07, 0xa0, 0x60, 0xeb, 0xc8, 0x69, 0x20, + 0xaf, 0x89, 0xe3, 0xec, 0xce, 0x0d, 0x27, 0x66, 0x19, 0xdd, 0x09, 0xcb, 0x98, 0x83, 0x21, 0x72, + 0xf4, 0x2e, 0xfb, 0x5a, 0x09, 0x4c, 0x87, 0x34, 0x2d, 0xeb, 0xc1, 0xa2, 0xc2, 0x00, 0x18, 0x8b, + 0xd8, 0x4c, 0x89, 0x22, 0xbd, 0xe1, 0x37, 0xf9, 0x8b, 0x8a, 0x82, 0xb8, 0x86, 0x5e, 0x43, 0xe5, + 0x2d, 0xdd, 0xf0, 0x6c, 0x07, 0x9b, 0xc1, 0x48, 0x69, 0x9c, 0x74, 0x6d, 0xf8, 0x3d, 0x77, 0x70, + 0x87, 0x7a, 0x9b, 0x8d, 0xe9, 0xed, 0x35, 0x10, 0x9e, 0xde, 0xd1, 0xc5, 0xd3, 0x21, 0xb7, 0x42, + 0x93, 0x01, 0x41, 0x94, 0x71, 0x1f, 0xff, 0x7c, 0xb0, 0xd7, 0x40, 0x01, 0x67, 0xfe, 0xbf, 0xd5, + 0xbb, 0x30, 0x5a, 0xd7, 0x77, 0x90, 0x53, 0xde, 0x42, 0xc8, 0x3f, 0x06, 0xa0, 0x76, 0x8e, 0x19, + 0xc3, 0x18, 0xf5, 0x0e, 0x42, 0x25, 0xdd, 0xc3, 0xa4, 0xbc, 0x28, 0xa9, 0x36, 0x0e, 0x14, 0xc3, + 0x5e, 0x98, 0xd4, 0x9b, 0x30, 0xc9, 0x3d, 0x64, 0x41, 0x76, 0x82, 0xaa, 0x99, 0x3c, 0x61, 0x7d, + 0x1e, 0x72, 0xc2, 0xd3, 0xd5, 0x50, 0x1b, 0xa7, 0xcd, 0x3a, 0xff, 0x68, 0x25, 0x70, 0x10, 0xc3, + 0x07, 0xe3, 0x20, 0x46, 0xf6, 0xd9, 0x41, 0x8c, 0x76, 0xe8, 0x20, 0x36, 0x60, 0x82, 0x77, 0x98, + 0x3c, 0x9c, 0x9d, 0xdc, 0xb8, 0x93, 0x38, 0x49, 0x7e, 0x16, 0xc6, 0x93, 0xa7, 0xc8, 0xb1, 0x0e, + 0x4e, 0x91, 0x87, 0xed, 0xd8, 0x11, 0x72, 0x11, 0xa6, 0x38, 0x47, 0xc8, 0x1a, 0xca, 0x8d, 0x9f, + 0x50, 0xe6, 0x07, 0x4a, 0x13, 0x89, 0x03, 0x61, 0x0d, 0x15, 0x5f, 0x16, 0xf8, 0xad, 0x79, 0x8e, + 0xdf, 0xe2, 0xba, 0x1c, 0xed, 0x1c, 0x3c, 0x93, 0x02, 0xc2, 0x3c, 0xd8, 0x47, 0xfd, 0x70, 0xaa, + 0x05, 0xbb, 0x6c, 0x5a, 0xba, 0xb3, 0x77, 0xbf, 0xe1, 0x0b, 0xe0, 0x3e, 0x95, 0x17, 0x3b, 0x05, + 0x23, 0x81, 0x83, 0xd9, 0xab, 0x6f, 0xda, 0x35, 0xea, 0xc7, 0xa8, 0x63, 0xda, 0xc0, 0x6d, 0xea, + 0x33, 0x70, 0x98, 0x02, 0x35, 0x1c, 0x7b, 0xd7, 0xf4, 0xa9, 0x13, 0x6f, 0x36, 0x4a, 0x9a, 0xd7, + 0x69, 0x6b, 0xdc, 0xfd, 0xf4, 0x76, 0xe8, 0x7e, 0xda, 0xf5, 0x7a, 0x49, 0x77, 0xd5, 0xbf, 0x7f, + 0xee, 0x6a, 0xa0, 0x53, 0x77, 0x75, 0x19, 0x26, 0xd1, 0xa3, 0x86, 0x89, 0x0d, 0xdf, 0x2a, 0x7b, + 0x66, 0x1d, 0xb9, 0x9e, 0x5e, 0x6f, 0x60, 0xff, 0xd7, 0x5d, 0x9a, 0x68, 0xf5, 0x3d, 0x08, 0xba, + 0x7c, 0x14, 0x17, 0x79, 0x5e, 0x0d, 0xd5, 0x91, 0xe5, 0x85, 0x50, 0x80, 0xa0, 0xb4, 0xfa, 0x5a, + 0x28, 0x2c, 0xb5, 0x37, 0x14, 0x4e, 0xed, 0xc5, 0x36, 0xa7, 0xe1, 0xac, 0x61, 0xcb, 0xc8, 0xc1, + 0x78, 0xa5, 0xd1, 0x7d, 0xf6, 0x4a, 0x87, 0x3b, 0xf4, 0x4a, 0x07, 0xe6, 0x40, 0x8a, 0xab, 0x02, + 0x67, 0x70, 0x81, 0xe3, 0x0c, 0x84, 0xab, 0x57, 0xbb, 0x08, 0xcf, 0x66, 0x00, 0x63, 0x4e, 0xe1, + 0x3b, 0x83, 0x61, 0xa7, 0x70, 0xdb, 0x37, 0xa8, 0xbd, 0x3b, 0x4d, 0xaf, 0xe9, 0x20, 0xf7, 0xd3, + 0x1f, 0xda, 0xc4, 0x7c, 0x45, 0xdf, 0xfe, 0xfa, 0x8a, 0x7e, 0x91, 0xaf, 0x38, 0x02, 0x7d, 0x78, + 0xe5, 0xed, 0xe1, 0x85, 0xdd, 0x5d, 0xa2, 0xbf, 0x38, 0x3e, 0x64, 0x70, 0xff, 0x7c, 0x08, 0xec, + 0x77, 0xc8, 0x33, 0x74, 0x70, 0x21, 0xcf, 0xf0, 0x81, 0x85, 0x3c, 0x3f, 0xe7, 0xce, 0x45, 0x10, + 0xf2, 0x8c, 0xed, 0x7f, 0xc8, 0x33, 0x7e, 0xa0, 0x21, 0x8f, 0x2a, 0x0e, 0x79, 0xda, 0xf1, 0x72, + 0x42, 0x77, 0x14, 0xf5, 0x72, 0x42, 0x30, 0xe6, 0xe5, 0xfe, 0x44, 0x81, 0x5c, 0x24, 0x7d, 0x43, + 0xa0, 0x0e, 0x32, 0xd5, 0xf4, 0xbc, 0x40, 0xce, 0x93, 0xfc, 0x54, 0x53, 0x88, 0x21, 0xed, 0x4f, + 0x15, 0x38, 0x21, 0xea, 0xcc, 0x9a, 0x6d, 0x5a, 0x83, 0x7e, 0x07, 0xb9, 0xcd, 0x9a, 0x17, 0x24, + 0xef, 0x2f, 0x4a, 0xd8, 0x8f, 0xd2, 0xf7, 0x91, 0xb0, 0x2c, 0x4a, 0x29, 0xa0, 0x11, 0x24, 0xaf, + 0xba, 0x79, 0xc9, 0xab, 0x1f, 0x28, 0x70, 0x84, 0x4f, 0x45, 0x7d, 0x09, 0x06, 0x82, 0xd5, 0x46, + 0x2f, 0x1e, 0x32, 0x19, 0x31, 0x43, 0x52, 0x9f, 0x87, 0x5e, 0xec, 0x02, 0xc8, 0xee, 0x92, 0x0d, + 0x9b, 0x60, 0xa8, 0xd7, 0xa0, 0x7b, 0x0b, 0x91, 0xe4, 0x71, 0x46, 0x44, 0x1f, 0x3e, 0x99, 0x94, + 0x23, 0xd3, 0xd0, 0xba, 0x70, 0xc9, 0x90, 0xa4, 0x5c, 0x8e, 0x5a, 0x8e, 0x68, 0x95, 0xb5, 0x68, + 0x72, 0xec, 0xa7, 0xf8, 0x38, 0x25, 0x29, 0x27, 0xe6, 0x4b, 0xdb, 0xc4, 0x39, 0x39, 0x31, 0xc0, + 0x7e, 0xa4, 0x2c, 0xff, 0x3e, 0x6c, 0xa4, 0x91, 0x38, 0xe3, 0x13, 0x52, 0xd0, 0x2d, 0x8e, 0x82, + 0xce, 0x25, 0x15, 0x24, 0x60, 0x4d, 0x43, 0x30, 0x9f, 0x06, 0xb3, 0x1f, 0x6a, 0xfa, 0x9e, 0x82, + 0xe3, 0xab, 0x50, 0x7e, 0x94, 0x37, 0x21, 0xe2, 0xfc, 0xee, 0x6a, 0x2c, 0xbf, 0xdb, 0x9e, 0xaa, + 0x82, 0x2c, 0xef, 0xcb, 0x8f, 0x53, 0x1c, 0x6e, 0x1a, 0x7f, 0xda, 0x5f, 0x2b, 0xd8, 0xe3, 0xa6, + 0xc1, 0x7d, 0x1a, 0xb3, 0xbd, 0x1f, 0x28, 0xf8, 0x42, 0x6e, 0xc5, 0x0f, 0x31, 0x6a, 0xcc, 0x5b, + 0x0b, 0x35, 0x2e, 0x2d, 0x69, 0x48, 0x5c, 0xcd, 0x74, 0x73, 0xae, 0x66, 0xa2, 0xe6, 0xd2, 0x23, + 0x30, 0x97, 0xde, 0x96, 0xb9, 0x14, 0x38, 0xd3, 0x33, 0x13, 0x31, 0xe5, 0x28, 0xef, 0xda, 0x31, + 0x9c, 0xbf, 0x8e, 0xb5, 0xb2, 0xdd, 0xee, 0x0f, 0xc8, 0x6e, 0x47, 0xe6, 0x2a, 0x0a, 0x23, 0x36, + 0xb4, 0x22, 0xf4, 0x54, 0x74, 0x4f, 0x4f, 0xb9, 0x46, 0xc0, 0x44, 0x56, 0x75, 0x4f, 0xa7, 0x06, + 0x86, 0x71, 0x8a, 0xd7, 0x1e, 0xa7, 0xec, 0x73, 0x5c, 0x56, 0xb4, 0x3b, 0xd8, 0x83, 0x70, 0xfb, + 0x98, 0x1d, 0xe5, 0xa0, 0xdf, 0x6d, 0x1a, 0x06, 0x72, 0x89, 0x09, 0x0d, 0x94, 0x82, 0x9f, 0x51, + 0x47, 0x7d, 0x32, 0x4a, 0x28, 0xb2, 0xa0, 0x0f, 0x50, 0xf0, 0x17, 0x1f, 0xa7, 0x5c, 0x97, 0xc9, + 0x79, 0xd2, 0xee, 0xe3, 0xeb, 0x32, 0x39, 0x50, 0x7b, 0xaa, 0x00, 0x98, 0x0c, 0x28, 0x92, 0x5b, + 0xb8, 0x14, 0xe9, 0x33, 0xdd, 0x35, 0xbe, 0x04, 0xc7, 0xdd, 0x86, 0xed, 0x95, 0xd9, 0xba, 0x70, + 0xcb, 0x9e, 0x5d, 0x36, 0x30, 0xc7, 0x65, 0xbd, 0x56, 0xa3, 0x8b, 0x30, 0xe7, 0xb2, 0x28, 0xe0, + 0x6e, 0xc5, 0x7d, 0x60, 0x13, 0x91, 0x96, 0x6a, 0x35, 0xf5, 0x35, 0x38, 0x55, 0x61, 0xee, 0x42, + 0x4c, 0xa6, 0x07, 0x93, 0x99, 0xad, 0xc4, 0x8a, 0x1b, 0x62, 0xc4, 0xde, 0x86, 0x29, 0xcc, 0x0d, + 0xf5, 0x02, 0x8c, 0x44, 0xae, 0xb7, 0x8d, 0x19, 0x54, 0x4a, 0xaa, 0xcb, 0xac, 0x2d, 0xa0, 0xae, + 0x22, 0x98, 0x09, 0xf1, 0x99, 0x18, 0xa0, 0xaf, 0xad, 0x01, 0x72, 0x95, 0xa8, 0x4f, 0x6e, 0x0d, + 0xc3, 0x91, 0x00, 0x7b, 0xbb, 0x5c, 0x7f, 0x1b, 0x77, 0x78, 0x71, 0x09, 0x30, 0x05, 0x75, 0x47, + 0x24, 0x01, 0x19, 0x60, 0xa0, 0xed, 0x4d, 0x84, 0x2f, 0x07, 0x19, 0xac, 0x06, 0x73, 0x9b, 0xd8, + 0x60, 0xcb, 0x36, 0xb1, 0xd8, 0xa4, 0xca, 0x06, 0xdb, 0x52, 0xd9, 0xcc, 0x66, 0xd2, 0xfe, 0x99, + 0xd6, 0x4a, 0xf0, 0x4c, 0x6c, 0x34, 0xa1, 0x21, 0x01, 0x36, 0xa4, 0x93, 0x9b, 0xc9, 0xf4, 0x47, + 0xcc, 0x96, 0x1c, 0x99, 0x04, 0x44, 0x65, 0x43, 0x1d, 0xa8, 0x4c, 0x20, 0x07, 0xd1, 0xda, 0x16, + 0x1c, 0x0b, 0xaf, 0xa6, 0xc4, 0x80, 0xc3, 0x6d, 0x19, 0x41, 0x68, 0xd1, 0xc5, 0xc6, 0x79, 0x04, + 0x5a, 0x72, 0xd1, 0x25, 0x46, 0x1b, 0xe9, 0x40, 0xbc, 0xc4, 0x0a, 0x8d, 0x8d, 0xfc, 0x45, 0x38, + 0xcb, 0x9f, 0xa9, 0xc4, 0xe8, 0xa3, 0x1d, 0x8c, 0xce, 0x9b, 0xd6, 0x28, 0x03, 0xc5, 0xcb, 0x1c, + 0xbf, 0x7c, 0x3c, 0xe1, 0x97, 0xc3, 0x0e, 0x52, 0xfb, 0xb3, 0x21, 0x38, 0xc6, 0xeb, 0x60, 0xee, + 0x77, 0x01, 0x26, 0xf0, 0xb4, 0x51, 0x33, 0x8b, 0xba, 0xe2, 0x71, 0xbf, 0x8b, 0x6e, 0x62, 0xa4, + 0x43, 0x2d, 0xc2, 0xd1, 0x90, 0xfa, 0x63, 0x58, 0x5d, 0x18, 0x6b, 0xba, 0x05, 0x10, 0xc5, 0x3d, + 0x0f, 0xe3, 0x2d, 0x07, 0x11, 0x84, 0x50, 0xc4, 0xc9, 0x1e, 0x66, 0x8b, 0x9e, 0x86, 0x51, 0xd7, + 0x61, 0x3a, 0xbe, 0xe2, 0x03, 0x0c, 0xe2, 0x4f, 0xa7, 0x62, 0xeb, 0x97, 0xe2, 0x2d, 0xc1, 0xf1, + 0xd8, 0x24, 0xc5, 0x78, 0xec, 0xc5, 0x3c, 0xe6, 0x23, 0xda, 0x8e, 0xb2, 0x79, 0x0b, 0x66, 0x78, + 0xab, 0x27, 0x18, 0xbe, 0x8f, 0xec, 0x0a, 0xc9, 0xb5, 0x40, 0x39, 0x78, 0x0e, 0x72, 0x41, 0x00, + 0x18, 0x76, 0x87, 0x38, 0xac, 0xeb, 0x27, 0xac, 0xd3, 0xfe, 0x56, 0x60, 0x80, 0x23, 0xc1, 0x6b, + 0x30, 0x4d, 0x23, 0xc1, 0x04, 0xde, 0x00, 0xc6, 0x9b, 0x24, 0xdd, 0x31, 0xb4, 0x15, 0x98, 0x0d, + 0xc6, 0x4b, 0xfa, 0x48, 0x8c, 0x3d, 0x88, 0xb1, 0x67, 0x28, 0x54, 0xcc, 0xfc, 0x08, 0x91, 0x25, + 0x38, 0x4e, 0xc7, 0x16, 0xd0, 0x20, 0xbe, 0x27, 0x4f, 0x80, 0xb8, 0x24, 0x5e, 0x05, 0x2d, 0xe0, + 0x83, 0xef, 0x7c, 0x30, 0x9d, 0x21, 0xb2, 0x19, 0x52, 0x48, 0x4e, 0x60, 0x80, 0x69, 0xbd, 0x02, + 0x27, 0x29, 0x3b, 0x12, 0x52, 0xc3, 0x98, 0x14, 0xe5, 0x5b, 0x44, 0xe9, 0x39, 0xc8, 0x25, 0xdc, + 0x52, 0x30, 0x93, 0x23, 0x64, 0x36, 0x62, 0xae, 0x86, 0x4e, 0xe3, 0x2a, 0xcc, 0x45, 0xa6, 0x31, + 0xba, 0xd6, 0x31, 0x03, 0xa3, 0x11, 0xbd, 0xc6, 0x92, 0x05, 0x64, 0xf8, 0x65, 0x98, 0x0d, 0xcf, + 0x29, 0x87, 0xc8, 0xe1, 0xb0, 0x62, 0xb9, 0x34, 0x56, 0x60, 0x56, 0xe0, 0xf1, 0x02, 0x41, 0xc6, + 0x08, 0x23, 0x5c, 0xff, 0x45, 0xc5, 0x59, 0x87, 0x33, 0x1c, 0x2b, 0xe1, 0xf0, 0x33, 0x4e, 0x36, + 0x99, 0x84, 0xb1, 0x24, 0xd8, 0x7a, 0x1d, 0x4e, 0x27, 0x4d, 0x86, 0x43, 0x50, 0xc5, 0x04, 0x4f, + 0xc4, 0x2d, 0x27, 0x41, 0xef, 0x55, 0xd0, 0x24, 0xee, 0x35, 0x10, 0x75, 0x82, 0xd8, 0x8f, 0xc8, + 0x59, 0x52, 0x69, 0xdf, 0x82, 0x73, 0x02, 0x5b, 0xe4, 0x30, 0x38, 0x89, 0x49, 0x9e, 0xe6, 0x99, + 0x64, 0x82, 0xc9, 0x37, 0x61, 0x9e, 0x6f, 0x98, 0x1c, 0xba, 0x53, 0x98, 0xee, 0x29, 0x8e, 0x7d, + 0xc6, 0xc9, 0x86, 0x42, 0xdd, 0xbf, 0x21, 0x55, 0x88, 0xf1, 0xc3, 0x68, 0x96, 0xcc, 0xde, 0x7e, + 0xa4, 0x1f, 0x6e, 0x3e, 0x4e, 0xa9, 0x24, 0x94, 0x30, 0xe6, 0x9f, 0xa6, 0xcf, 0xca, 0x41, 0xb2, + 0xe6, 0x1e, 0x36, 0xe2, 0x79, 0xbe, 0x2b, 0xa9, 0xc2, 0x3c, 0x5d, 0xb6, 0xef, 0x3f, 0xbb, 0xe0, + 0x98, 0x8c, 0xd6, 0xcf, 0x60, 0xce, 0x4f, 0x7d, 0x03, 0x46, 0x71, 0xb1, 0xae, 0x69, 0x5b, 0xe5, + 0x0a, 0xaa, 0x79, 0x3a, 0x3e, 0xb4, 0x0f, 0x45, 0xae, 0x92, 0x22, 0x05, 0xcf, 0x14, 0x78, 0xd5, + 0x87, 0xa5, 0x66, 0x31, 0xd2, 0x08, 0x37, 0x92, 0xda, 0xe9, 0x3d, 0xbb, 0xe9, 0xb5, 0x53, 0xc6, + 0x45, 0x51, 0x42, 0xda, 0xfe, 0x2e, 0x39, 0xda, 0x72, 0xd2, 0x54, 0x9f, 0x94, 0x9d, 0xa7, 0x1e, + 0x71, 0xe5, 0xbc, 0x69, 0x7f, 0xa7, 0xe0, 0x33, 0xae, 0x1c, 0xea, 0x53, 0x6b, 0xed, 0xff, 0x4b, + 0x2f, 0x0e, 0x70, 0xd8, 0x13, 0xd3, 0xd3, 0x4f, 0x2f, 0x83, 0xc4, 0xba, 0xeb, 0xba, 0xbb, 0x83, + 0x0d, 0xac, 0x97, 0x76, 0xaf, 0xe9, 0xee, 0x4e, 0x20, 0x50, 0x5f, 0x4b, 0xa0, 0xd4, 0x04, 0x0d, + 0x57, 0x40, 0x4d, 0x23, 0x29, 0x5e, 0x5e, 0x1f, 0x4b, 0x36, 0x7d, 0xb9, 0x0b, 0xbf, 0x2a, 0x12, + 0xa5, 0x2f, 0x7e, 0x86, 0x94, 0x74, 0x83, 0xa3, 0xa4, 0xd3, 0x49, 0x25, 0x25, 0x65, 0xd4, 0xce, + 0xe0, 0x1c, 0xaf, 0xa8, 0xbb, 0xf5, 0xc0, 0x4a, 0x81, 0x41, 0x76, 0xe2, 0x8d, 0x2a, 0x40, 0x49, + 0x53, 0x40, 0x57, 0xaa, 0x02, 0xba, 0xe5, 0x0a, 0xe8, 0x11, 0x28, 0xa0, 0x95, 0x86, 0xd4, 0xbe, + 0x4d, 0x76, 0xd4, 0x50, 0x3a, 0x2a, 0x1e, 0xbe, 0x1e, 0x48, 0x12, 0x2d, 0x75, 0x27, 0x95, 0x30, + 0xa4, 0xdd, 0xc3, 0x1b, 0xa9, 0x04, 0xa2, 0xad, 0xf4, 0xd9, 0xaf, 0x74, 0xc1, 0xd4, 0x9a, 0x5b, + 0x6d, 0x55, 0xae, 0x3f, 0x70, 0x74, 0xcb, 0xdd, 0x92, 0x98, 0xf1, 0x25, 0x98, 0x74, 0xed, 0xa6, + 0x63, 0xa0, 0x32, 0x6f, 0xbe, 0x54, 0xd2, 0xb7, 0x11, 0x9e, 0x35, 0x7c, 0x2e, 0x74, 0x3d, 0xd3, + 0x22, 0x45, 0x3d, 0x3c, 0x3b, 0x9f, 0x0e, 0x01, 0x6c, 0xf0, 0xdf, 0x7d, 0xf4, 0xb4, 0xf7, 0xee, + 0x63, 0x21, 0xa6, 0xdf, 0xd9, 0xb0, 0x7e, 0x93, 0xe2, 0x6a, 0x73, 0xf8, 0xea, 0x2b, 0xd9, 0xc1, + 0x6c, 0xf9, 0x2b, 0x5d, 0xf8, 0x6d, 0xc8, 0xed, 0x47, 0x1e, 0x72, 0x2c, 0xbd, 0xf6, 0xf3, 0xa2, + 0xa7, 0x0b, 0x31, 0x3d, 0x45, 0x1e, 0x54, 0xc6, 0x85, 0xa5, 0x0f, 0x2a, 0xe3, 0xcd, 0xad, 0x82, + 0x3b, 0x05, 0x27, 0x63, 0xef, 0x99, 0xef, 0x36, 0x4d, 0xfc, 0xb2, 0x89, 0x46, 0x08, 0x07, 0xf8, + 0xf0, 0x83, 0xed, 0xf8, 0x3d, 0x6d, 0xef, 0xf8, 0x4a, 0xb0, 0xe3, 0x5f, 0x94, 0x25, 0x4e, 0x12, + 0xc2, 0x68, 0xb3, 0x38, 0x6f, 0x92, 0x68, 0x0f, 0x7b, 0xbd, 0xa9, 0x44, 0x2f, 0xf6, 0x80, 0x09, + 0x71, 0x95, 0x34, 0x71, 0xbb, 0x44, 0xe2, 0x76, 0x77, 0x2c, 0xae, 0xf6, 0x0f, 0x0a, 0xbe, 0x4c, + 0xc1, 0x2e, 0x24, 0xc1, 0xa7, 0xd8, 0xe3, 0x7d, 0x06, 0x86, 0x6b, 0x14, 0xda, 0x87, 0xa3, 0x9e, + 0x4f, 0xf4, 0x48, 0x89, 0xab, 0x00, 0x6a, 0x7b, 0x11, 0x3a, 0xc5, 0x2b, 0xb2, 0x12, 0x76, 0x01, + 0x93, 0xda, 0xd7, 0x15, 0x98, 0xe6, 0xcd, 0x40, 0xb3, 0xe6, 0xed, 0x83, 0x96, 0x43, 0x9e, 0xb3, + 0x1b, 0x17, 0x76, 0x04, 0x3f, 0xd5, 0x49, 0xe8, 0x45, 0x8e, 0x63, 0x07, 0xb5, 0x9c, 0xe4, 0x87, + 0xe6, 0xe1, 0x82, 0x7a, 0x01, 0xaf, 0xcc, 0x1f, 0xbf, 0xde, 0x8a, 0xe5, 0x14, 0xac, 0xbb, 0x85, + 0xac, 0xba, 0x23, 0x82, 0x51, 0xed, 0x05, 0x44, 0xb4, 0x1f, 0x28, 0x30, 0xbe, 0xe6, 0x56, 0xef, + 0x6f, 0x6d, 0xb9, 0xc8, 0xfb, 0x04, 0x96, 0x5a, 0x11, 0x8e, 0xda, 0x78, 0x2c, 0xcf, 0xb4, 0xaa, + 0x51, 0xf7, 0x14, 0x64, 0xde, 0xa6, 0x5b, 0x00, 0x61, 0xf7, 0xe4, 0x16, 0xcf, 0xc7, 0x26, 0x39, + 0x1f, 0x9e, 0xe4, 0xa8, 0x04, 0xda, 0x0c, 0x7e, 0x95, 0x1d, 0x6d, 0x64, 0x8b, 0xeb, 0x8f, 0x48, + 0x7c, 0x7a, 0xbb, 0x8e, 0x9c, 0x2a, 0xb2, 0x8c, 0xbd, 0x0d, 0x5c, 0xde, 0x49, 0x9f, 0x6c, 0x1f, + 0x98, 0xec, 0xc5, 0xcb, 0xb2, 0x58, 0x92, 0xcb, 0x0c, 0x8d, 0x25, 0xb9, 0x7d, 0xad, 0xb7, 0x9e, + 0x5d, 0x58, 0xd6, 0xbb, 0x96, 0xe1, 0x20, 0xdd, 0x65, 0xf3, 0x4d, 0x2a, 0x88, 0x3e, 0x25, 0x5b, + 0x4b, 0x44, 0x2f, 0x3d, 0x31, 0x9b, 0xb8, 0xc9, 0xf6, 0x9d, 0x76, 0x4e, 0x7d, 0x74, 0xef, 0x59, + 0x8c, 0x29, 0x55, 0x8b, 0x56, 0x44, 0xf1, 0x74, 0x42, 0xdf, 0x04, 0xf3, 0x3b, 0xe3, 0x6a, 0x5d, + 0x45, 0xbf, 0x50, 0x6b, 0x5c, 0xad, 0x7c, 0x9d, 0x50, 0xb5, 0xf2, 0x3b, 0x99, 0x5a, 0xff, 0x49, + 0xc1, 0x3b, 0xdf, 0xba, 0x63, 0xee, 0x9a, 0x35, 0x54, 0x45, 0x95, 0xdb, 0x8f, 0x90, 0xd1, 0xf4, + 0xd0, 0x8a, 0x6d, 0x79, 0x8e, 0x6e, 0x88, 0xd7, 0xdf, 0x24, 0xf4, 0x6e, 0x35, 0xad, 0x8a, 0x4b, + 0x55, 0x49, 0x7e, 0xa8, 0xe7, 0x60, 0xcc, 0xa0, 0x98, 0x65, 0x9d, 0x3c, 0xc9, 0xa6, 0x4a, 0x3b, + 0x1c, 0xb4, 0xd3, 0x97, 0xda, 0xaa, 0x4a, 0xa3, 0x6d, 0xa2, 0x27, 0x12, 0x45, 0xdf, 0x12, 0xd4, + 0x9b, 0x9d, 0x09, 0x8b, 0x2b, 0xe4, 0xd5, 0x77, 0x24, 0xa7, 0x65, 0x00, 0xcc, 0x6d, 0x7f, 0x01, + 0x00, 0xf3, 0x5b, 0xae, 0x98, 0x5b, 0x5b, 0xd4, 0x73, 0x4b, 0xc2, 0xab, 0x4b, 0xfe, 0x54, 0x7d, + 0xeb, 0xdf, 0xe7, 0xe6, 0xab, 0xa6, 0xb7, 0xdd, 0xdc, 0x5c, 0x30, 0xec, 0x3a, 0xfd, 0x3a, 0x0a, + 0xfd, 0xdf, 0x45, 0xb7, 0xb2, 0x53, 0xf0, 0xf6, 0x1a, 0xc8, 0xc5, 0x08, 0x6e, 0x69, 0x10, 0x93, + 0x5f, 0x35, 0xb7, 0xb6, 0x8a, 0x13, 0x1c, 0x99, 0xb4, 0xcf, 0xc3, 0xd8, 0x9a, 0x5b, 0x2d, 0xa1, + 0x87, 0xba, 0x53, 0x71, 0xef, 0x37, 0xbc, 0xfb, 0x4d, 0xa1, 0xa6, 0xc9, 0x3d, 0x10, 0x47, 0x29, + 0x47, 0xc3, 0x4a, 0x89, 0x90, 0xd2, 0xf2, 0xd8, 0xa1, 0x46, 0xda, 0xc2, 0x6f, 0xd1, 0xa7, 0x70, + 0xa7, 0x51, 0xd3, 0xcd, 0xfa, 0x3d, 0xdb, 0xd8, 0x41, 0x95, 0x3b, 0x78, 0xf2, 0xc4, 0x8b, 0x68, + 0xa2, 0x86, 0xc1, 0x96, 0x88, 0xa5, 0xaf, 0x37, 0x37, 0x5f, 0x43, 0x7b, 0x78, 0xe2, 0x87, 0x4b, + 0xbc, 0x2e, 0xf5, 0x18, 0x0c, 0xba, 0x66, 0xd5, 0xd2, 0xbd, 0xa6, 0x43, 0x12, 0x59, 0xc3, 0xa5, + 0x56, 0x83, 0x3c, 0x8e, 0x4f, 0xf2, 0x45, 0xe3, 0xf8, 0x64, 0x07, 0x13, 0xe9, 0x4b, 0xe4, 0x59, + 0xfa, 0x86, 0x59, 0x25, 0x31, 0xd9, 0x06, 0xf4, 0xf9, 0xff, 0xa6, 0x82, 0x0c, 0x2f, 0xdf, 0xfc, + 0xf1, 0x93, 0xb9, 0x3e, 0x17, 0xb7, 0xfc, 0xcf, 0x93, 0xb9, 0x8b, 0x19, 0x66, 0x71, 0xc9, 0x30, + 0xa8, 0x9d, 0x96, 0x28, 0x29, 0xf5, 0x18, 0xf4, 0xac, 0x92, 0xd3, 0xa1, 0x4f, 0x72, 0xe0, 0xc7, + 0x4f, 0xe6, 0xb0, 0xcd, 0x96, 0x70, 0xab, 0xe6, 0xe2, 0x07, 0xfe, 0x98, 0x03, 0xdb, 0x50, 0xcf, + 0x10, 0xf9, 0x49, 0x45, 0x37, 0xc9, 0x1f, 0x62, 0x04, 0xff, 0x77, 0x69, 0xc0, 0xef, 0xc2, 0x35, + 0xdb, 0x2f, 0x42, 0xef, 0xae, 0x5e, 0x6b, 0x22, 0x9a, 0x07, 0xd2, 0x04, 0xb1, 0x43, 0x48, 0xb4, + 0x20, 0xad, 0x85, 0xd1, 0xb4, 0xaf, 0x76, 0xe3, 0x25, 0xbe, 0x54, 0xa9, 0x9b, 0x16, 0xb9, 0xee, + 0xe3, 0xe4, 0xa6, 0x3a, 0x4b, 0x5e, 0xbc, 0x0e, 0x63, 0xa1, 0x17, 0x18, 0x24, 0x95, 0xd9, 0xca, + 0x48, 0x2a, 0x69, 0x7e, 0xeb, 0x70, 0x0b, 0x19, 0x97, 0x2f, 0x0b, 0x1f, 0x81, 0xf4, 0xb4, 0xff, + 0x08, 0xa4, 0x57, 0xfc, 0x08, 0xe4, 0x26, 0xf4, 0xb9, 0x9e, 0xee, 0x35, 0x5d, 0x5a, 0x46, 0x7f, + 0x4a, 0xa4, 0x51, 0x2c, 0xe6, 0x06, 0x06, 0x2d, 0x51, 0x94, 0x62, 0x51, 0x96, 0x20, 0x94, 0xeb, + 0x98, 0x3e, 0x19, 0x97, 0x03, 0x31, 0x73, 0xfd, 0x43, 0xf2, 0x64, 0x7c, 0x89, 0x7c, 0x56, 0xe2, + 0x3d, 0xb4, 0xe1, 0xe9, 0x3b, 0xe8, 0xff, 0x39, 0xba, 0xe5, 0x89, 0xd7, 0xe0, 0x12, 0xf4, 0x55, + 0x31, 0x04, 0x8d, 0xd1, 0xcf, 0x09, 0x24, 0xc3, 0x64, 0x02, 0xca, 0x58, 0xa1, 0x25, 0x8a, 0x58, + 0xbc, 0x24, 0x7b, 0x2f, 0xce, 0x63, 0x46, 0x3b, 0x89, 0x5f, 0x8b, 0xf2, 0xba, 0x98, 0x2c, 0x7b, + 0xd8, 0x99, 0x2c, 0xf9, 0x8c, 0xe8, 0x5e, 0x08, 0x42, 0x28, 0x48, 0x0e, 0xfa, 0x31, 0x3f, 0xec, + 0xb1, 0x45, 0xf0, 0x53, 0xee, 0x16, 0x92, 0x23, 0x50, 0xb7, 0x90, 0xec, 0x60, 0xbc, 0xfd, 0xb3, + 0xd2, 0xba, 0x0d, 0xbf, 0x4d, 0x69, 0xad, 0xd9, 0x15, 0x73, 0xcb, 0x34, 0x74, 0x69, 0x5c, 0xfd, + 0x00, 0x06, 0x82, 0xaf, 0x4a, 0xd1, 0xa5, 0x79, 0x43, 0xa0, 0x6e, 0x21, 0xed, 0x75, 0x8a, 0x5f, + 0x62, 0x94, 0xb2, 0x6d, 0x6e, 0x42, 0x82, 0xda, 0x59, 0xbc, 0xb7, 0x09, 0xfb, 0x99, 0xd4, 0xef, + 0x2b, 0x38, 0xa9, 0x91, 0xf9, 0x41, 0xf8, 0x6b, 0x09, 0x61, 0x0b, 0xa9, 0x55, 0xd6, 0x84, 0x24, + 0x47, 0xc6, 0xab, 0x02, 0x19, 0x23, 0x29, 0x88, 0xc4, 0xe3, 0x65, 0x92, 0x82, 0x10, 0xbe, 0x5a, + 0xfe, 0x2e, 0x39, 0x1f, 0xb4, 0xf7, 0x5c, 0x79, 0x3d, 0x21, 0xd6, 0x55, 0xd1, 0x45, 0x08, 0x8f, + 0x2e, 0x47, 0xb6, 0x4c, 0xc5, 0xf0, 0xfc, 0x07, 0x8e, 0xe4, 0xdc, 0x20, 0x7f, 0xd9, 0x48, 0xad, + 0xb5, 0xfd, 0xd7, 0x4b, 0xd9, 0xad, 0x55, 0x48, 0xbb, 0x53, 0x6b, 0x15, 0xbf, 0x6d, 0x20, 0xd6, + 0x9a, 0xfe, 0xa8, 0x21, 0x58, 0xa3, 0x6d, 0x3f, 0xe4, 0x6c, 0x63, 0x8d, 0x8a, 0x68, 0x77, 0xbc, + 0x46, 0x85, 0xef, 0xd6, 0xe8, 0x1a, 0x4d, 0x7d, 0xb0, 0xf6, 0xbd, 0x50, 0xba, 0x66, 0xc5, 0xae, + 0xd7, 0x9b, 0x96, 0xe9, 0xed, 0xad, 0xdb, 0x76, 0x6d, 0xa3, 0x81, 0xac, 0x8a, 0x50, 0xe6, 0x52, + 0x42, 0xe6, 0xeb, 0x32, 0xbf, 0x94, 0xa4, 0xcc, 0x91, 0x38, 0xd3, 0x57, 0x07, 0x04, 0xe4, 0xe8, + 0x57, 0x07, 0x04, 0xbd, 0xf1, 0xf5, 0xdb, 0x5a, 0xdf, 0xf8, 0xeb, 0x48, 0x64, 0x9f, 0xdc, 0x87, + 0xf5, 0xcb, 0xa5, 0xdb, 0xe9, 0xfa, 0xe5, 0x12, 0xa3, 0xeb, 0x97, 0xdb, 0xc7, 0xa4, 0xfc, 0x17, + 0x72, 0xf1, 0x10, 0xbf, 0xb4, 0xcb, 0x22, 0xeb, 0x67, 0x12, 0xb2, 0x16, 0x33, 0x5e, 0x09, 0xca, + 0x25, 0xce, 0xf4, 0xb1, 0x20, 0x09, 0x49, 0xfa, 0xb1, 0x20, 0x09, 0x04, 0x93, 0xfe, 0x87, 0xb4, + 0x7c, 0x39, 0x69, 0xfa, 0x59, 0x14, 0xf0, 0x76, 0x42, 0x01, 0xb7, 0xb2, 0x2f, 0x66, 0xb9, 0x0e, + 0x32, 0x7d, 0x10, 0x48, 0x4e, 0x95, 0x46, 0x77, 0x72, 0x20, 0xa6, 0x89, 0x7f, 0x54, 0x70, 0xa2, + 0x82, 0x00, 0xdc, 0xb1, 0x1d, 0x03, 0x55, 0x36, 0x58, 0xa8, 0x2a, 0xd4, 0xc0, 0x1b, 0x09, 0x0d, + 0x5c, 0x93, 0xc6, 0xae, 0x71, 0xc2, 0x1c, 0xc9, 0x8b, 0x02, 0xc9, 0x23, 0xb9, 0x03, 0x3e, 0x35, + 0x9a, 0x3b, 0xe0, 0x77, 0xc6, 0x2d, 0xfe, 0x81, 0xa3, 0x57, 0x4c, 0x8b, 0x9e, 0x36, 0x57, 0xf4, + 0x7a, 0x43, 0x37, 0xab, 0x56, 0x8a, 0xf7, 0xce, 0x6e, 0xf1, 0x12, 0xea, 0x9d, 0x5a, 0xbc, 0x84, + 0x24, 0xb5, 0x78, 0x09, 0x04, 0x93, 0xfe, 0x5b, 0x24, 0x55, 0x1b, 0xc4, 0x62, 0xb7, 0x2d, 0x7d, + 0x53, 0xf2, 0xcd, 0xb0, 0xbb, 0x09, 0x81, 0x2f, 0x0a, 0x37, 0xe9, 0x30, 0x41, 0x8e, 0x8c, 0x8b, + 0x02, 0x19, 0xf3, 0xd1, 0x9d, 0x39, 0x4c, 0x85, 0xe6, 0x5f, 0xa3, 0x8d, 0x99, 0xe6, 0x71, 0xdf, + 0x3c, 0x97, 0x84, 0xfa, 0xbe, 0xce, 0x63, 0xc4, 0x73, 0x49, 0x20, 0x98, 0xf4, 0x3f, 0x22, 0x8f, + 0x9b, 0x22, 0xa0, 0xeb, 0xc8, 0xf2, 0x7f, 0xac, 0xdb, 0xa6, 0xe5, 0xb9, 0x29, 0x2a, 0xf8, 0xff, + 0x09, 0x15, 0xbc, 0x94, 0x45, 0x05, 0x9c, 0x21, 0x38, 0x7a, 0xc8, 0xf4, 0xd0, 0x34, 0x8d, 0x2e, + 0x7d, 0x68, 0x9a, 0x06, 0xc6, 0x34, 0xf2, 0xbb, 0x0a, 0x8c, 0xae, 0xb9, 0xd5, 0x3b, 0x08, 0xad, + 0x9a, 0x2e, 0x4e, 0xeb, 0x08, 0x85, 0xbf, 0x93, 0x10, 0xfe, 0xbc, 0x40, 0xf8, 0x10, 0x35, 0x8e, + 0x9c, 0x05, 0x81, 0x9c, 0xd3, 0x61, 0x39, 0x43, 0x24, 0xb4, 0x1c, 0x1c, 0x89, 0xb6, 0x30, 0xee, + 0xff, 0x8b, 0xd4, 0xea, 0x2c, 0x79, 0x76, 0xdd, 0x34, 0x42, 0x85, 0x33, 0x77, 0x10, 0x5a, 0x6b, + 0xd6, 0x3c, 0xb3, 0x51, 0x33, 0x91, 0xb3, 0x61, 0x6c, 0xa3, 0x4a, 0x53, 0xb2, 0x5e, 0xf5, 0x84, + 0x60, 0xb7, 0x05, 0x82, 0x65, 0x1b, 0x88, 0x23, 0xf3, 0xab, 0x02, 0x99, 0x17, 0x23, 0xe7, 0xde, + 0x4c, 0xd4, 0xb5, 0x2b, 0x70, 0x39, 0x33, 0x30, 0xd3, 0xd4, 0x6f, 0x92, 0x3d, 0x7b, 0x03, 0x79, + 0xab, 0xa8, 0x86, 0xaa, 0x24, 0xfd, 0xc2, 0xee, 0x7f, 0x0d, 0x64, 0xee, 0xca, 0xaa, 0x25, 0x8e, + 0xc1, 0xa0, 0x13, 0x00, 0xd1, 0xf7, 0x6e, 0xad, 0x86, 0xe2, 0x0b, 0xb2, 0xed, 0x56, 0x3e, 0x62, + 0x4e, 0xd1, 0x0a, 0x78, 0x0a, 0xe5, 0x60, 0x81, 0x18, 0xc5, 0xae, 0x9c, 0xa2, 0x95, 0x71, 0x1a, + 0x82, 0x14, 0x4f, 0xac, 0xdb, 0xae, 0x77, 0xdf, 0xaa, 0xed, 0xc9, 0x3e, 0x4f, 0x28, 0x4f, 0x36, + 0x24, 0xe9, 0xd0, 0x64, 0x43, 0xb2, 0x83, 0x29, 0xf3, 0x31, 0x4d, 0xea, 0xd0, 0x74, 0x44, 0x16, + 0x26, 0xf0, 0xd7, 0xc3, 0x6a, 0xb6, 0xb1, 0xe3, 0x96, 0xe9, 0xcd, 0x40, 0x17, 0xfd, 0x7a, 0x18, + 0x6e, 0x5c, 0x22, 0xa9, 0x7f, 0x79, 0xda, 0x86, 0x33, 0x5c, 0x90, 0xb6, 0xe1, 0x74, 0x85, 0x3f, + 0xe4, 0x39, 0x13, 0xbe, 0xf0, 0x0e, 0x7d, 0x00, 0xd6, 0x8f, 0xdf, 0x9f, 0xee, 0xd6, 0x2d, 0xed, + 0xb3, 0x19, 0xc5, 0xab, 0xb2, 0x02, 0x25, 0x11, 0x4f, 0xb4, 0x40, 0x49, 0xd4, 0x1d, 0x88, 0xb6, + 0xf8, 0x93, 0x5b, 0xd0, 0xbd, 0xe6, 0x56, 0xd5, 0xb7, 0xa0, 0x3f, 0xf8, 0xde, 0xea, 0x49, 0x71, + 0x62, 0x95, 0x82, 0xe4, 0xcf, 0xa5, 0x82, 0xb0, 0xcb, 0x83, 0x77, 0x60, 0x80, 0x7d, 0x00, 0x55, + 0x92, 0xb2, 0x0d, 0x60, 0xf2, 0xe7, 0xd3, 0x61, 0x18, 0xed, 0xaf, 0x2a, 0x30, 0x2d, 0xfa, 0xa2, + 0xdf, 0x65, 0x31, 0x1d, 0x01, 0x4a, 0xfe, 0xf9, 0xb6, 0x51, 0x18, 0x27, 0xbf, 0xa1, 0xc0, 0x31, + 0xe9, 0x77, 0xe2, 0xae, 0xa7, 0xd2, 0xe6, 0xe2, 0xe5, 0x5f, 0xec, 0x0c, 0x8f, 0x31, 0xf6, 0x7b, + 0x0a, 0x9c, 0x48, 0xfd, 0xd2, 0x4b, 0x31, 0x75, 0x10, 0x21, 0x6e, 0x7e, 0xb9, 0x73, 0x5c, 0xc6, + 0xe4, 0x2f, 0xc1, 0x24, 0xf7, 0x8b, 0xa0, 0x0b, 0x62, 0xda, 0x3c, 0xf8, 0xfc, 0xf5, 0xf6, 0xe0, + 0xd9, 0xf8, 0xdf, 0x50, 0x20, 0x2f, 0xf9, 0x10, 0xe7, 0x55, 0x31, 0x59, 0x31, 0x56, 0xfe, 0x85, + 0x4e, 0xb0, 0x18, 0x4b, 0x5f, 0x56, 0x60, 0x8a, 0xff, 0xed, 0x8a, 0x42, 0x16, 0x21, 0x43, 0x08, + 0xf9, 0xe7, 0xda, 0x44, 0x60, 0x3c, 0xd8, 0x70, 0x38, 0xfe, 0x82, 0x5a, 0xb2, 0xf0, 0x63, 0xa0, + 0xf9, 0xcb, 0x99, 0x41, 0x23, 0x42, 0xf3, 0x9f, 0x30, 0x17, 0xd2, 0x94, 0x19, 0x43, 0x90, 0x09, + 0x2d, 0x7f, 0x7d, 0xdc, 0x84, 0xf1, 0xe4, 0x53, 0xda, 0x67, 0x53, 0xa8, 0x85, 0x81, 0xf3, 0x57, + 0xda, 0x00, 0x66, 0xc3, 0xfe, 0xaa, 0x02, 0x47, 0xc5, 0xd7, 0xca, 0x12, 0x92, 0x42, 0xa4, 0xfc, + 0xcd, 0x0e, 0x90, 0x22, 0x4b, 0x42, 0xf2, 0x19, 0x8c, 0xab, 0x69, 0x36, 0xc5, 0xc3, 0x92, 0x2d, + 0x89, 0x0c, 0x5f, 0xae, 0xf0, 0x5d, 0x59, 0xea, 0x47, 0x15, 0x8a, 0x99, 0x56, 0x1d, 0x17, 0x57, + 0xe6, 0xca, 0x32, 0x7f, 0x04, 0xe1, 0xd7, 0x14, 0x98, 0x91, 0xbd, 0x4f, 0xb9, 0x96, 0x5d, 0x05, + 0xe1, 0x35, 0x7c, 0xab, 0x23, 0xb4, 0xa8, 0x37, 0xe1, 0x16, 0xb4, 0x17, 0xd2, 0x56, 0x69, 0x0c, + 0x41, 0xea, 0x4d, 0x64, 0x55, 0xe3, 0x58, 0x33, 0xb2, 0x3a, 0xe3, 0x6b, 0x99, 0x56, 0x6c, 0x1c, + 0x4d, 0xa6, 0x99, 0x2c, 0x25, 0xc2, 0xa1, 0xfd, 0x51, 0x9c, 0x55, 0x4f, 0xdf, 0x1f, 0x85, 0xb8, + 0x19, 0xf6, 0xc7, 0xd4, 0x04, 0xb8, 0xfa, 0x5b, 0x0a, 0x1c, 0x97, 0x7f, 0x75, 0x25, 0xd5, 0xc7, + 0x0b, 0x10, 0xf3, 0x2f, 0x75, 0x88, 0xc8, 0x78, 0xfb, 0x6d, 0x05, 0x66, 0x53, 0xde, 0xaa, 0xdc, + 0x68, 0x6b, 0x8c, 0xb0, 0xd9, 0xbf, 0xdc, 0x29, 0x26, 0x63, 0xef, 0x6b, 0x0a, 0xe4, 0x84, 0x0f, + 0x15, 0x16, 0xd3, 0x6c, 0x39, 0x89, 0x93, 0x2f, 0xb6, 0x8f, 0x13, 0xd1, 0x55, 0xca, 0x27, 0x2b, + 0x6e, 0x64, 0x32, 0x67, 0x0e, 0xa6, 0x4c, 0x57, 0x19, 0xbf, 0x36, 0xf1, 0x08, 0x54, 0x4e, 0x19, + 0xfc, 0x05, 0x49, 0x9d, 0x45, 0x02, 0x3a, 0x7f, 0xb5, 0x1d, 0x68, 0x36, 0xb2, 0x03, 0x63, 0x89, + 0xb2, 0x72, 0xc9, 0x41, 0x20, 0x0e, 0x9b, 0x5f, 0xcc, 0x0e, 0x1b, 0xde, 0xe8, 0x93, 0x65, 0xda, + 0x92, 0x8d, 0x3e, 0x01, 0x2c, 0xdb, 0xe8, 0x85, 0xb5, 0xd1, 0xf8, 0xcc, 0x22, 0x2a, 0x3c, 0xbe, + 0x9c, 0x32, 0x85, 0x49, 0x14, 0xd9, 0x99, 0x25, 0xad, 0x1a, 0xd7, 0xdf, 0x14, 0xf8, 0x55, 0xa4, + 0x92, 0x4d, 0x81, 0x8b, 0x20, 0xdb, 0x14, 0xa4, 0xe5, 0x9f, 0x6a, 0x0d, 0x46, 0x63, 0xd5, 0xbb, + 0xf3, 0x62, 0x52, 0x51, 0xc8, 0xfc, 0xa5, 0xac, 0x90, 0x6c, 0xb4, 0x5f, 0x56, 0xe0, 0x88, 0xa0, + 0xd2, 0xf4, 0x92, 0xcc, 0x4d, 0xf3, 0x30, 0xf2, 0x37, 0xda, 0xc5, 0x88, 0xb0, 0x21, 0xa8, 0xcc, + 0xbc, 0x24, 0x3b, 0x58, 0xb7, 0xcb, 0x86, 0xbc, 0x98, 0x51, 0x35, 0x61, 0x24, 0x5a, 0x52, 0xf7, + 0x8c, 0x98, 0x54, 0x04, 0x30, 0x5f, 0xc8, 0x08, 0x18, 0x71, 0x7c, 0x29, 0x75, 0x57, 0x12, 0x39, + 0xe4, 0x98, 0x32, 0xc7, 0x97, 0xad, 0xc4, 0x48, 0xdd, 0x82, 0xe1, 0xc8, 0x5f, 0xcf, 0x39, 0x2b, + 0xa6, 0x18, 0x86, 0xcb, 0x2f, 0x64, 0x83, 0x0b, 0xbb, 0xb9, 0xc4, 0xdf, 0x4b, 0x3b, 0x9f, 0x46, + 0xa3, 0x05, 0x2b, 0x73, 0x73, 0xa2, 0x3f, 0xf1, 0x85, 0x8d, 0x4d, 0xf0, 0xf7, 0xbd, 0x2e, 0xa5, + 0x91, 0x8b, 0x63, 0xc8, 0x8c, 0x4d, 0xfe, 0x47, 0x8a, 0xfc, 0x23, 0x3e, 0xb7, 0x82, 0x4b, 0xa2, + 0x42, 0x1e, 0xbc, 0xec, 0x88, 0x2f, 0xab, 0xbc, 0xf2, 0xf7, 0x36, 0x4e, 0xd9, 0x95, 0x64, 0x6f, + 0x4b, 0x42, 0xcb, 0xf6, 0x36, 0x71, 0x5d, 0x15, 0x3e, 0xd9, 0x89, 0x8b, 0xaa, 0xd2, 0x0e, 0x8b, + 0x3c, 0x24, 0xd9, 0xc9, 0x2e, 0xb5, 0xe2, 0xc9, 0x37, 0x42, 0x12, 0x5e, 0x66, 0x33, 0xc2, 0x44, + 0x96, 0x6c, 0x31, 0x3b, 0x6c, 0x64, 0xab, 0xa1, 0xb7, 0x90, 0xd1, 0x6c, 0x95, 0x6c, 0xab, 0xe1, + 0x27, 0xc4, 0x9e, 0x6b, 0x13, 0x21, 0x32, 0x0f, 0xa4, 0x89, 0x93, 0x90, 0x92, 0xcd, 0x83, 0x38, + 0xf7, 0x75, 0xb3, 0x03, 0x24, 0x0e, 0x3f, 0x3c, 0x77, 0x28, 0xb3, 0x0b, 0xe1, 0x59, 0xe3, 0x66, + 0x07, 0x48, 0xc9, 0xc0, 0x04, 0x97, 0xa3, 0x44, 0x0a, 0x54, 0x52, 0x03, 0x93, 0x64, 0x39, 0x4b, + 0x6a, 0x60, 0x22, 0xae, 0x80, 0xc1, 0xd6, 0xc2, 0x2f, 0x7f, 0x29, 0x64, 0xb1, 0xbd, 0x10, 0x82, + 0xcc, 0x5a, 0xa4, 0xf5, 0x29, 0xf8, 0xb4, 0x2a, 0x2b, 0x4e, 0xb9, 0x26, 0xdb, 0x76, 0x85, 0x68, + 0xb2, 0xd3, 0x6a, 0x86, 0xba, 0x11, 0x72, 0x80, 0x90, 0x17, 0x8d, 0xdc, 0x68, 0xcb, 0x06, 0xc2, + 0xbc, 0xbd, 0xdc, 0x29, 0x26, 0x63, 0xef, 0x8b, 0x30, 0x8e, 0xcb, 0x1f, 0x22, 0xc1, 0xa4, 0x64, + 0x97, 0xe1, 0x57, 0x4c, 0xc8, 0x76, 0x19, 0x79, 0x8d, 0x05, 0x9e, 0x35, 0x62, 0xd6, 0xdc, 0xbb, + 0x6c, 0xd9, 0xac, 0x49, 0x8a, 0x18, 0x64, 0xb3, 0x96, 0xa1, 0xf6, 0xc1, 0x0f, 0x72, 0x49, 0x0d, + 0x41, 0xe0, 0x97, 0x65, 0x41, 0x6e, 0xb4, 0xea, 0x40, 0x16, 0xe4, 0xf2, 0xeb, 0x13, 0xb0, 0x0e, + 0xc8, 0xbc, 0xec, 0x8f, 0x0e, 0xd2, 0x2d, 0x37, 0x43, 0xdd, 0x00, 0xce, 0xb3, 0x70, 0xb8, 0x8a, + 0x5c, 0xac, 0xcb, 0xf2, 0x2c, 0x69, 0xd7, 0xf1, 0xb2, 0x3c, 0x4b, 0xd6, 0xab, 0x7c, 0xd5, 0x84, + 0x71, 0xd2, 0x12, 0xbe, 0xcc, 0x3f, 0x23, 0x26, 0x1c, 0x02, 0xcb, 0x5f, 0xcc, 0x04, 0xc6, 0x86, + 0xfa, 0x5b, 0x05, 0x2e, 0x90, 0xb1, 0x32, 0x5e, 0xbd, 0xcb, 0xa2, 0xdc, 0x4c, 0x14, 0xf2, 0xaf, + 0x3c, 0x2d, 0x85, 0x70, 0x30, 0xc5, 0xb9, 0x3c, 0xbe, 0x90, 0x96, 0x19, 0x09, 0x43, 0xcb, 0x82, + 0x29, 0xf1, 0xbd, 0x31, 0x0e, 0x23, 0x79, 0x77, 0xc6, 0x0b, 0xe9, 0xa1, 0x59, 0x64, 0xf4, 0xeb, + 0xed, 0xc1, 0x47, 0xd2, 0x49, 0xc2, 0x6b, 0xe0, 0xc5, 0x0c, 0xf9, 0x80, 0x18, 0x8e, 0x2c, 0x9d, + 0x94, 0x76, 0x77, 0x1b, 0x5a, 0xe9, 0xfc, 0xbf, 0xc8, 0x78, 0x2d, 0xf5, 0xb8, 0xc0, 0x43, 0x93, + 0xad, 0xf4, 0x0c, 0x7f, 0x08, 0x11, 0xef, 0x51, 0x29, 0x7f, 0x05, 0xf1, 0x46, 0xf6, 0x11, 0xa2, + 0x98, 0xb2, 0x3d, 0x2a, 0xdb, 0x5f, 0x20, 0xcc, 0xf7, 0x7e, 0xe9, 0xe3, 0xf7, 0xcf, 0x2b, 0xcb, + 0x3b, 0xdf, 0xff, 0x70, 0x56, 0xf9, 0xe0, 0xc3, 0x59, 0xe5, 0x47, 0x1f, 0xce, 0x2a, 0xdf, 0xf8, + 0x68, 0xf6, 0xd0, 0x07, 0x1f, 0xcd, 0x1e, 0xfa, 0xb7, 0x8f, 0x66, 0x0f, 0xbd, 0xf3, 0x46, 0xe8, + 0xc1, 0xd3, 0xdd, 0x60, 0xb0, 0x7b, 0xfa, 0xa6, 0x5b, 0x60, 0x43, 0x5f, 0x34, 0x6c, 0x07, 0x85, + 0x7f, 0x6e, 0xeb, 0xa6, 0x55, 0xa8, 0xdb, 0xfe, 0x22, 0x71, 0x5b, 0x7f, 0x6e, 0x1b, 0x3f, 0x8e, + 0x2a, 0xec, 0x2e, 0x6e, 0xf6, 0xe1, 0x3f, 0x99, 0x7d, 0xe5, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, + 0x28, 0xba, 0x92, 0x5d, 0xd2, 0x7c, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -6393,6 +6493,11 @@ type MsgClient interface { // UpdateSubaccountRiskProfile allows a user (subject to eligibility & safety // gates) to set the subaccount's risk profile (e.g. opt into cross-margin). UpdateSubaccountRiskProfile(ctx context.Context, in *MsgUpdateSubaccountRiskProfile, opts ...grpc.CallOption) (*MsgUpdateSubaccountRiskProfileResponse, error) + // UpdateSubaccountMarketRiskMode pins one derivative market's margin mode + // for a subaccount (or unpins it back to the profile default), converting + // resting order margin representation atomically. Requires a flat position + // in that market. + UpdateSubaccountMarketRiskMode(ctx context.Context, in *MsgUpdateSubaccountMarketRiskMode, opts ...grpc.CallOption) (*MsgUpdateSubaccountMarketRiskModeResponse, error) } type msgClient struct { @@ -6916,6 +7021,15 @@ func (c *msgClient) UpdateSubaccountRiskProfile(ctx context.Context, in *MsgUpda return out, nil } +func (c *msgClient) UpdateSubaccountMarketRiskMode(ctx context.Context, in *MsgUpdateSubaccountMarketRiskMode, opts ...grpc.CallOption) (*MsgUpdateSubaccountMarketRiskModeResponse, error) { + out := new(MsgUpdateSubaccountMarketRiskModeResponse) + err := c.cc.Invoke(ctx, "/injective.exchange.v2.Msg/UpdateSubaccountMarketRiskMode", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // MsgServer is the server API for Msg service. type MsgServer interface { // Deposit defines a method for transferring coins from the sender's bank @@ -7039,6 +7153,11 @@ type MsgServer interface { // UpdateSubaccountRiskProfile allows a user (subject to eligibility & safety // gates) to set the subaccount's risk profile (e.g. opt into cross-margin). UpdateSubaccountRiskProfile(context.Context, *MsgUpdateSubaccountRiskProfile) (*MsgUpdateSubaccountRiskProfileResponse, error) + // UpdateSubaccountMarketRiskMode pins one derivative market's margin mode + // for a subaccount (or unpins it back to the profile default), converting + // resting order margin representation atomically. Requires a flat position + // in that market. + UpdateSubaccountMarketRiskMode(context.Context, *MsgUpdateSubaccountMarketRiskMode) (*MsgUpdateSubaccountMarketRiskModeResponse, error) } // UnimplementedMsgServer can be embedded to have forward compatible implementations. @@ -7216,6 +7335,9 @@ func (*UnimplementedMsgServer) LiquidateCrossMarginPool(ctx context.Context, req func (*UnimplementedMsgServer) UpdateSubaccountRiskProfile(ctx context.Context, req *MsgUpdateSubaccountRiskProfile) (*MsgUpdateSubaccountRiskProfileResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method UpdateSubaccountRiskProfile not implemented") } +func (*UnimplementedMsgServer) UpdateSubaccountMarketRiskMode(ctx context.Context, req *MsgUpdateSubaccountMarketRiskMode) (*MsgUpdateSubaccountMarketRiskModeResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateSubaccountMarketRiskMode not implemented") +} func RegisterMsgServer(s grpc1.Server, srv MsgServer) { s.RegisterService(&_Msg_serviceDesc, srv) @@ -8247,6 +8369,25 @@ func _Msg_UpdateSubaccountRiskProfile_Handler(srv interface{}, ctx context.Conte return interceptor(ctx, in, info, handler) } +func _Msg_UpdateSubaccountMarketRiskMode_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgUpdateSubaccountMarketRiskMode) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).UpdateSubaccountMarketRiskMode(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/injective.exchange.v2.Msg/UpdateSubaccountMarketRiskMode", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).UpdateSubaccountMarketRiskMode(ctx, req.(*MsgUpdateSubaccountMarketRiskMode)) + } + return interceptor(ctx, in, info, handler) +} + +var Msg_serviceDesc = _Msg_serviceDesc var _Msg_serviceDesc = grpc.ServiceDesc{ ServiceName: "injective.exchange.v2.Msg", HandlerType: (*MsgServer)(nil), @@ -8479,6 +8620,10 @@ var _Msg_serviceDesc = grpc.ServiceDesc{ MethodName: "UpdateSubaccountRiskProfile", Handler: _Msg_UpdateSubaccountRiskProfile_Handler, }, + { + MethodName: "UpdateSubaccountMarketRiskMode", + Handler: _Msg_UpdateSubaccountMarketRiskMode_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "injective/exchange/v2/tx.proto", @@ -8946,16 +9091,88 @@ func (m *MsgUpdateSubaccountRiskProfile) MarshalToSizedBuffer(dAtA []byte) (int, _ = i var l int _ = l - { - size, err := m.RiskProfile.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintTx(dAtA, i, uint64(size)) + { + size, err := m.RiskProfile.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + if len(m.SubaccountId) > 0 { + i -= len(m.SubaccountId) + copy(dAtA[i:], m.SubaccountId) + i = encodeVarintTx(dAtA, i, uint64(len(m.SubaccountId))) + 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 *MsgUpdateSubaccountRiskProfileResponse) 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 *MsgUpdateSubaccountRiskProfileResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgUpdateSubaccountRiskProfileResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgUpdateSubaccountMarketRiskMode) 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 *MsgUpdateSubaccountMarketRiskMode) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgUpdateSubaccountMarketRiskMode) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Mode != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.Mode)) + i-- + dAtA[i] = 0x20 + } + if len(m.MarketId) > 0 { + i -= len(m.MarketId) + copy(dAtA[i:], m.MarketId) + i = encodeVarintTx(dAtA, i, uint64(len(m.MarketId))) + i-- + dAtA[i] = 0x1a } - i-- - dAtA[i] = 0x1a if len(m.SubaccountId) > 0 { i -= len(m.SubaccountId) copy(dAtA[i:], m.SubaccountId) @@ -8973,7 +9190,7 @@ func (m *MsgUpdateSubaccountRiskProfile) MarshalToSizedBuffer(dAtA []byte) (int, return len(dAtA) - i, nil } -func (m *MsgUpdateSubaccountRiskProfileResponse) Marshal() (dAtA []byte, err error) { +func (m *MsgUpdateSubaccountMarketRiskModeResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -8983,12 +9200,12 @@ func (m *MsgUpdateSubaccountRiskProfileResponse) Marshal() (dAtA []byte, err err return dAtA[:n], nil } -func (m *MsgUpdateSubaccountRiskProfileResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *MsgUpdateSubaccountMarketRiskModeResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *MsgUpdateSubaccountRiskProfileResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *MsgUpdateSubaccountMarketRiskModeResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -14173,6 +14390,39 @@ func (m *MsgUpdateSubaccountRiskProfileResponse) Size() (n int) { return n } +func (m *MsgUpdateSubaccountMarketRiskMode) 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 = len(m.SubaccountId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.MarketId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + if m.Mode != 0 { + n += 1 + sovTx(uint64(m.Mode)) + } + return n +} + +func (m *MsgUpdateSubaccountMarketRiskModeResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + func (m *MsgCreateSpotLimitOrder) Size() (n int) { if m == nil { return 0 @@ -17769,6 +18019,221 @@ func (m *MsgUpdateSubaccountRiskProfileResponse) Unmarshal(dAtA []byte) error { } return nil } +func (m *MsgUpdateSubaccountMarketRiskMode) 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: MsgUpdateSubaccountMarketRiskMode: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgUpdateSubaccountMarketRiskMode: 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 SubaccountId", 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.SubaccountId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MarketId", 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.MarketId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Mode", wireType) + } + m.Mode = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Mode |= RiskMode(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgUpdateSubaccountMarketRiskModeResponse) 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: MsgUpdateSubaccountMarketRiskModeResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgUpdateSubaccountMarketRiskModeResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *MsgCreateSpotLimitOrder) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/chain/oracle/types/oracle.pb.go b/chain/oracle/types/oracle.pb.go index bab02810e..e2682c630 100644 --- a/chain/oracle/types/oracle.pb.go +++ b/chain/oracle/types/oracle.pb.go @@ -38,10 +38,10 @@ const ( OracleType_PriceFeed OracleType = 2 OracleType_Coinbase OracleType = 3 OracleType_Chainlink OracleType = 4 // Deprecated: Do not use. - OracleType_Razor OracleType = 5 - OracleType_Dia OracleType = 6 - OracleType_API3 OracleType = 7 - OracleType_Uma OracleType = 8 + OracleType_Razor OracleType = 5 // Deprecated: Do not use. + OracleType_Dia OracleType = 6 // Deprecated: Do not use. + OracleType_API3 OracleType = 7 // Deprecated: Do not use. + OracleType_Uma OracleType = 8 // Deprecated: Do not use. OracleType_Pyth OracleType = 9 OracleType_BandIBC OracleType = 10 // Deprecated: Do not use. OracleType_Provider OracleType = 11 @@ -2111,146 +2111,147 @@ func init() { } var fileDescriptor_1c8fbf1e7a765423 = []byte{ - // 2223 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x59, 0x4f, 0x6f, 0x1c, 0x49, - 0x15, 0x4f, 0xcf, 0x8c, 0xed, 0x99, 0x37, 0x7f, 0xdc, 0xae, 0x38, 0xd9, 0x89, 0xb3, 0x3b, 0xce, - 0xce, 0x12, 0xb0, 0xa2, 0xcd, 0x38, 0xc9, 0x0a, 0xa1, 0x64, 0x11, 0x4a, 0x6c, 0xc7, 0xab, 0xc1, - 0x81, 0xb5, 0xda, 0x49, 0x40, 0x5c, 0x9a, 0x9a, 0xee, 0x1a, 0xbb, 0xe2, 0xe9, 0xae, 0xde, 0xae, - 0x1e, 0xaf, 0x27, 0x12, 0x5f, 0x20, 0x12, 0x5a, 0x6e, 0x70, 0x41, 0xe2, 0xcc, 0x89, 0x03, 0x9c, - 0x90, 0x10, 0xe2, 0xb4, 0x37, 0x72, 0x42, 0x68, 0x0f, 0x0b, 0x24, 0x07, 0x90, 0x90, 0xb8, 0xf0, - 0x05, 0xd0, 0xab, 0xaa, 0xee, 0x69, 0xff, 0x8d, 0x67, 0xc3, 0xee, 0xc5, 0xee, 0x7a, 0xf5, 0xde, - 0xeb, 0xdf, 0x7b, 0xf5, 0xaa, 0xde, 0xaf, 0x7a, 0xe0, 0x2a, 0x0f, 0x9f, 0x30, 0x2f, 0xe1, 0x7b, - 0x6c, 0x59, 0xc4, 0xd4, 0x1b, 0xb0, 0xe5, 0xbd, 0x9b, 0x3d, 0x96, 0xd0, 0x9b, 0x66, 0xd8, 0x89, - 0x62, 0x91, 0x08, 0xd2, 0xcc, 0xd4, 0x3a, 0x46, 0x6e, 0xd4, 0x16, 0xe6, 0xb7, 0xc5, 0xb6, 0x50, - 0x4a, 0xcb, 0xf8, 0xa4, 0xf5, 0x17, 0x5a, 0x9e, 0x90, 0x81, 0x90, 0xcb, 0x3d, 0x2a, 0xc7, 0x1e, - 0x3d, 0xc1, 0x43, 0x33, 0x3f, 0x47, 0x03, 0x1e, 0x8a, 0x65, 0xf5, 0x57, 0x8b, 0xda, 0x9f, 0x94, - 0x60, 0x7a, 0x93, 0xc6, 0x34, 0x90, 0xe4, 0x1d, 0xa8, 0x47, 0xa3, 0x64, 0xc7, 0xf5, 0x44, 0x98, - 0xc4, 0xd4, 0x4b, 0x9a, 0xd6, 0x15, 0x6b, 0xa9, 0xe2, 0xd4, 0x50, 0xb8, 0x6a, 0x64, 0xa4, 0x0b, - 0x6f, 0x7b, 0x3b, 0x94, 0x87, 0x03, 0x1e, 0xee, 0xba, 0x7b, 0x2c, 0xe6, 0x7d, 0xce, 0x62, 0x37, - 0x8a, 0xc5, 0xfe, 0x68, 0x6c, 0x58, 0x50, 0x86, 0xad, 0x4c, 0xf1, 0xb1, 0xd1, 0xdb, 0x44, 0xb5, - 0xcc, 0x95, 0x0b, 0xd7, 0xc7, 0xae, 0x7c, 0x9a, 0x50, 0x57, 0x26, 0x31, 0xa3, 0x81, 0x34, 0x7e, - 0x3d, 0x9a, 0x70, 0x11, 0xba, 0xdb, 0x54, 0xba, 0x03, 0x1e, 0xf0, 0xa4, 0x59, 0xba, 0x62, 0x2d, - 0x95, 0x9c, 0xa5, 0xcc, 0x68, 0x8d, 0x26, 0x74, 0x4b, 0x9b, 0x3c, 0xce, 0x59, 0x7c, 0x40, 0xe5, - 0x03, 0xd4, 0x27, 0xef, 0xc3, 0x82, 0x0a, 0x28, 0x8a, 0xc5, 0x18, 0x6a, 0x06, 0x72, 0x4a, 0x81, - 0x7c, 0x03, 0x35, 0x36, 0x63, 0x91, 0x42, 0xcc, 0xd0, 0xad, 0xc1, 0xe2, 0x21, 0xe3, 0x23, 0x78, - 0xa6, 0x15, 0x9e, 0xcb, 0x07, 0x3c, 0x1c, 0x82, 0x70, 0x1b, 0x2e, 0x1d, 0xef, 0xa5, 0xcf, 0x58, - 0x73, 0x46, 0xd9, 0x5f, 0x3c, 0xc6, 0x7e, 0x9d, 0x31, 0xf2, 0x43, 0xb0, 0x25, 0xf3, 0xa9, 0xdb, - 0xa7, 0x32, 0x71, 0x23, 0xb5, 0x44, 0xcd, 0xf2, 0x15, 0x6b, 0xa9, 0x7a, 0x6b, 0xa9, 0x73, 0x52, - 0x5d, 0x74, 0xb6, 0x98, 0x4f, 0xd7, 0xa9, 0x4c, 0xf4, 0x92, 0xae, 0x94, 0x3e, 0xfd, 0x7c, 0xf1, - 0x9c, 0xd3, 0x90, 0x07, 0xa4, 0x77, 0x2e, 0xfe, 0xeb, 0x57, 0x8b, 0xd6, 0xb3, 0x7f, 0xfe, 0xe6, - 0x5a, 0xdd, 0x14, 0x9f, 0x96, 0x7f, 0xb7, 0x54, 0x2e, 0xda, 0xa5, 0xf6, 0x4f, 0x2d, 0x68, 0x1c, - 0x74, 0x43, 0xde, 0x02, 0x88, 0x86, 0xbd, 0x01, 0xf7, 0xdc, 0x5d, 0x36, 0x52, 0x65, 0x51, 0x73, - 0x2a, 0x5a, 0xb2, 0xc1, 0x46, 0xe4, 0x5d, 0x20, 0x92, 0x07, 0xd1, 0x80, 0x61, 0x98, 0xdb, 0x31, - 0x0d, 0x5c, 0xee, 0xcb, 0x66, 0xe1, 0x4a, 0x71, 0xa9, 0xe2, 0xd8, 0x7a, 0x66, 0x53, 0x4f, 0x74, - 0x7d, 0x49, 0x96, 0xc0, 0x7e, 0x22, 0x45, 0x78, 0x40, 0xb7, 0xa8, 0x74, 0x1b, 0x28, 0x1f, 0x6b, - 0xde, 0x29, 0x21, 0xce, 0xf6, 0x2e, 0xc0, 0x87, 0x0a, 0x66, 0x37, 0xec, 0x0b, 0x72, 0x11, 0xa6, - 0xe5, 0x28, 0xe8, 0x89, 0x81, 0xa9, 0x4e, 0x33, 0x22, 0xf7, 0xa1, 0xaa, 0x83, 0x71, 0x93, 0x51, - 0xc4, 0x54, 0x05, 0x36, 0x6e, 0x7d, 0xed, 0xe4, 0x44, 0x69, 0x97, 0x0f, 0x47, 0x11, 0x73, 0x40, - 0x64, 0xcf, 0xed, 0xcf, 0x2c, 0x38, 0xbf, 0x9a, 0xd6, 0xd7, 0x66, 0xcc, 0x3d, 0xb6, 0x95, 0xd0, - 0x84, 0x91, 0x37, 0x60, 0xa6, 0xcf, 0x98, 0xef, 0x72, 0x3f, 0x7d, 0x2f, 0x0e, 0xbb, 0x3e, 0x79, - 0x1f, 0xa6, 0x69, 0x28, 0x3f, 0x66, 0xb1, 0x2e, 0xfa, 0x95, 0x77, 0x30, 0xe3, 0x9f, 0x7d, 0xbe, - 0x78, 0x59, 0x6f, 0x45, 0xe9, 0xef, 0x76, 0xb8, 0x58, 0x0e, 0x68, 0xb2, 0xd3, 0x79, 0xc0, 0xb6, - 0xa9, 0x37, 0x5a, 0x63, 0x9e, 0x63, 0x4c, 0xc8, 0x9b, 0x50, 0x49, 0x78, 0xc0, 0x64, 0x42, 0x83, - 0xa8, 0x59, 0x54, 0xd5, 0x30, 0x16, 0x90, 0x0d, 0xa8, 0x46, 0x88, 0xc0, 0x95, 0x08, 0x41, 0x55, - 0x7f, 0xf5, 0xb4, 0x90, 0xc6, 0x70, 0xcd, 0xba, 0x43, 0x94, 0x49, 0xee, 0x14, 0x9a, 0x56, 0xfb, - 0x3f, 0x16, 0x34, 0x56, 0x68, 0xe8, 0xe7, 0xe2, 0x3a, 0x29, 0x9d, 0x37, 0xa1, 0x14, 0xe3, 0x4b, - 0x75, 0x50, 0x6f, 0x99, 0xa0, 0x2e, 0x1c, 0x0d, 0xaa, 0x1b, 0x26, 0x8e, 0x52, 0x25, 0x6f, 0x43, - 0x2d, 0x66, 0x52, 0x0c, 0xf6, 0x98, 0x8b, 0x31, 0x98, 0x78, 0xaa, 0x46, 0xf6, 0x90, 0x07, 0x0c, - 0xeb, 0x28, 0x66, 0x1f, 0x0d, 0x99, 0x4c, 0xdc, 0xee, 0x9a, 0xd9, 0xce, 0x15, 0x23, 0xe9, 0xae, - 0x1d, 0x0e, 0x78, 0xea, 0xb5, 0x03, 0xfe, 0xa5, 0x05, 0x0d, 0xa5, 0xb4, 0xce, 0x98, 0xaf, 0x03, - 0x26, 0x50, 0xc2, 0xd3, 0xd1, 0x84, 0xab, 0x9e, 0xc9, 0x3c, 0x4c, 0x7d, 0x34, 0x14, 0x69, 0xb4, - 0x8e, 0x1e, 0x60, 0x45, 0xe5, 0xd1, 0x14, 0xcf, 0x8e, 0x26, 0x8f, 0x83, 0x2c, 0x40, 0x39, 0x66, - 0x03, 0x3a, 0x62, 0xb1, 0x6c, 0x96, 0x54, 0x99, 0x67, 0xe3, 0xf6, 0x3a, 0xd4, 0x36, 0x63, 0xb1, - 0xc7, 0x7d, 0x16, 0xab, 0xe2, 0x5e, 0x80, 0x72, 0x64, 0xc6, 0x06, 0x60, 0x36, 0x3e, 0xe0, 0xa7, - 0x70, 0xc8, 0xcf, 0x1f, 0x2c, 0xa8, 0xa7, 0x8e, 0xf4, 0x5b, 0x37, 0xa0, 0x9e, 0x5a, 0xba, 0x3c, - 0xec, 0x0b, 0xe5, 0xae, 0x7a, 0xeb, 0xeb, 0xa7, 0xc1, 0x1f, 0x03, 0x71, 0x6a, 0x51, 0x1e, 0xd6, - 0x8f, 0xe1, 0x42, 0xe6, 0x2c, 0x97, 0x12, 0x8d, 0xa3, 0x7a, 0xeb, 0xdd, 0x57, 0x3b, 0xcd, 0xe5, - 0xe6, 0x7c, 0x74, 0x44, 0x26, 0xdb, 0x3b, 0x40, 0x8e, 0xaa, 0x9e, 0x58, 0x9c, 0x77, 0x60, 0x4a, - 0xaf, 0x49, 0x61, 0x82, 0x35, 0xd1, 0x26, 0xed, 0xdb, 0x98, 0x29, 0x53, 0x11, 0x2a, 0xb8, 0x33, - 0x17, 0x44, 0x7b, 0x23, 0x57, 0x4c, 0xea, 0x81, 0xdc, 0x86, 0x29, 0x95, 0x0f, 0x6d, 0x7c, 0xb6, - 0xbd, 0xaf, 0x2d, 0xda, 0xbf, 0xb7, 0x80, 0xac, 0x0a, 0x1e, 0xe2, 0xfb, 0x72, 0x21, 0x13, 0x28, - 0xed, 0xf2, 0x30, 0x3d, 0x64, 0xd4, 0xf3, 0xc1, 0x53, 0xa2, 0x70, 0xf8, 0x94, 0xb0, 0xa1, 0x88, - 0x87, 0x72, 0x51, 0x19, 0xe0, 0x23, 0xa2, 0xdf, 0xa3, 0x83, 0x21, 0x33, 0x1b, 0x4c, 0x0f, 0xfe, - 0xaf, 0x9b, 0xab, 0xfd, 0x67, 0x0b, 0x66, 0xb7, 0x12, 0x11, 0xe7, 0x8f, 0xc8, 0x03, 0x30, 0xad, - 0xc3, 0x30, 0xc7, 0x6b, 0x59, 0x38, 0xb0, 0x96, 0xb7, 0x53, 0xb0, 0xc5, 0x09, 0x52, 0xf8, 0x25, - 0x44, 0xf4, 0x3b, 0x0b, 0x20, 0x17, 0xcc, 0x17, 0x5f, 0x59, 0xf2, 0x7d, 0xb0, 0xbd, 0x61, 0x30, - 0x1c, 0x50, 0xc4, 0xa0, 0xf7, 0xcb, 0x24, 0xbd, 0x61, 0x76, 0x6c, 0xac, 0x8b, 0xec, 0x48, 0x93, - 0x28, 0xe6, 0xf2, 0xda, 0xfe, 0x4b, 0x01, 0x1a, 0x9b, 0x8a, 0x40, 0x64, 0xd8, 0x2f, 0xe1, 0x29, - 0x82, 0x79, 0xc9, 0x9a, 0xd5, 0x8c, 0x1a, 0x77, 0x7d, 0x72, 0x17, 0x2a, 0x2c, 0xa0, 0x93, 0x83, - 0x2a, 0xb3, 0x80, 0x6a, 0x34, 0xdf, 0x01, 0x7c, 0x46, 0x16, 0xd5, 0x9f, 0x64, 0xc9, 0x66, 0x58, - 0x40, 0x57, 0x45, 0xd8, 0x27, 0xdf, 0x82, 0x92, 0xb2, 0x2d, 0x9d, 0xdd, 0x56, 0x19, 0x60, 0x7b, - 0x51, 0x8c, 0x43, 0xee, 0xe8, 0xf6, 0x32, 0xa5, 0xdb, 0x8b, 0x91, 0xa9, 0xf6, 0x72, 0xa8, 0x20, - 0xa6, 0x5f, 0xab, 0x20, 0x9e, 0x17, 0xa0, 0xb5, 0x7a, 0x0c, 0xd3, 0x3c, 0x0b, 0x29, 0xb8, 0x8b, - 0xad, 0x30, 0x12, 0x71, 0x72, 0x20, 0xd3, 0xaf, 0xe8, 0xa2, 0x55, 0x6d, 0xa2, 0xd3, 0x7c, 0x03, - 0xe6, 0xf7, 0xe8, 0x80, 0xfb, 0x6e, 0x3f, 0x16, 0x81, 0x7b, 0x98, 0x24, 0x10, 0x35, 0xb7, 0x1e, - 0x8b, 0xe0, 0x61, 0xb6, 0xc1, 0xbe, 0x09, 0x17, 0x45, 0x4f, 0xb2, 0x78, 0x4f, 0x11, 0x48, 0x99, - 0xb3, 0xd1, 0xc7, 0xc0, 0x85, 0xfc, 0xec, 0xc3, 0x93, 0x48, 0xc6, 0x6b, 0x6d, 0x22, 0xec, 0xef, - 0x6c, 0x3f, 0xe2, 0x31, 0x93, 0x2e, 0x4d, 0xe9, 0x71, 0xc5, 0x48, 0xee, 0x25, 0xed, 0x67, 0x45, - 0x98, 0x43, 0xfe, 0xa1, 0xb9, 0x97, 0xa3, 0xfb, 0x7e, 0x9e, 0x14, 0x98, 0x44, 0xe6, 0x48, 0x81, - 0x8f, 0x74, 0xd1, 0x10, 0x3b, 0xe9, 0xc5, 0x3c, 0x52, 0x4a, 0x05, 0xb5, 0x0b, 0x1a, 0x5a, 0xbe, - 0xa5, 0xc4, 0x5d, 0x9f, 0x34, 0x61, 0x46, 0x1f, 0x2a, 0x29, 0x9f, 0x4c, 0x87, 0xe4, 0x32, 0x54, - 0xa8, 0xdc, 0x75, 0x3d, 0x31, 0x0c, 0xd3, 0x5b, 0x44, 0x99, 0xca, 0xdd, 0x55, 0x1c, 0xe3, 0x64, - 0xc0, 0x43, 0x33, 0xa9, 0xab, 0xaa, 0x1c, 0xf0, 0x50, 0x4f, 0xee, 0x40, 0xa5, 0xcf, 0x58, 0xc6, - 0xf7, 0xb1, 0xdd, 0x5d, 0xea, 0xe8, 0xf5, 0xeb, 0xe0, 0xd1, 0x9d, 0xe5, 0x05, 0xcf, 0xf2, 0x95, - 0x1b, 0x98, 0x91, 0x5f, 0xff, 0x6d, 0x71, 0x69, 0x9b, 0x27, 0x3b, 0xc3, 0x5e, 0xc7, 0x13, 0xc1, - 0xb2, 0xb9, 0x92, 0xe9, 0x7f, 0xd7, 0xa5, 0xbf, 0xbb, 0x8c, 0x04, 0x55, 0x2a, 0x03, 0xe9, 0x94, - 0xfb, 0x8c, 0xe9, 0x9b, 0xc2, 0x22, 0x2e, 0x04, 0x8b, 0x68, 0xcc, 0xf0, 0x86, 0x61, 0xee, 0x06, - 0x60, 0x44, 0x1f, 0x50, 0x89, 0x0a, 0x6c, 0x9f, 0x79, 0xc3, 0x44, 0x2b, 0x94, 0xb5, 0x82, 0x11, - 0xa1, 0xc2, 0x12, 0xd8, 0x18, 0x88, 0x14, 0xc3, 0xd8, 0x63, 0x26, 0x9e, 0x8a, 0xd2, 0x6a, 0x04, - 0x3c, 0xdc, 0x52, 0x62, 0x15, 0x95, 0xe2, 0x46, 0xcf, 0x0a, 0x50, 0xc7, 0xc5, 0xe8, 0xae, 0xac, - 0x1a, 0x96, 0xbf, 0x04, 0x76, 0x8f, 0x86, 0xbe, 0xcb, 0x7b, 0x9e, 0xcb, 0x42, 0xda, 0x1b, 0x30, - 0xbd, 0x1c, 0x65, 0xa7, 0x81, 0xf2, 0x6e, 0xcf, 0xbb, 0xaf, 0xa5, 0x58, 0x9d, 0xa8, 0x94, 0x2d, - 0x5b, 0x98, 0x60, 0x65, 0x0d, 0xcc, 0xba, 0x10, 0xde, 0xf3, 0xcc, 0xe2, 0x76, 0xcd, 0x0c, 0x5e, - 0x11, 0xd0, 0x22, 0xc5, 0xb6, 0x43, 0xc3, 0x90, 0x0d, 0x4c, 0xd3, 0xb2, 0x79, 0xcf, 0x33, 0xe8, - 0xb4, 0x1c, 0x43, 0x45, 0xed, 0x3d, 0x16, 0x4b, 0x2e, 0x42, 0x7d, 0x56, 0x38, 0xc0, 0x7b, 0xde, - 0x63, 0x2d, 0x21, 0x2d, 0xad, 0xa0, 0xb6, 0x18, 0xf7, 0xcd, 0x55, 0xae, 0xc2, 0x7b, 0xde, 0xa6, - 0x88, 0xb1, 0x14, 0xae, 0xc1, 0xdc, 0x40, 0x9d, 0x1f, 0xae, 0xa9, 0x1d, 0xbc, 0x64, 0xe0, 0xf2, - 0x15, 0x9d, 0x59, 0x3d, 0x61, 0xae, 0x14, 0xbe, 0x54, 0xc9, 0xf8, 0xc4, 0x82, 0xf9, 0x2d, 0x55, - 0x2c, 0xaa, 0xbe, 0xc7, 0xdb, 0xe3, 0xdb, 0x30, 0xad, 0x3d, 0xa8, 0x4c, 0x9c, 0xf5, 0x46, 0x61, - 0x6c, 0xb0, 0xb4, 0x74, 0x09, 0xa6, 0x45, 0x5b, 0x71, 0xca, 0x5a, 0xd0, 0xf5, 0x5f, 0x71, 0xae, - 0x8f, 0xe0, 0xfc, 0x03, 0xbc, 0x80, 0x1d, 0x80, 0x23, 0x49, 0x0f, 0x2e, 0x0c, 0xd4, 0x7d, 0x50, - 0xed, 0xd9, 0x4c, 0x5d, 0x36, 0x2d, 0x55, 0x9b, 0x9d, 0x53, 0x6e, 0x86, 0xc7, 0x84, 0xe7, 0x9c, - 0x1f, 0x1c, 0x7d, 0x47, 0xfb, 0x4f, 0x16, 0xd2, 0x52, 0xee, 0x31, 0x87, 0x79, 0x22, 0xf6, 0xe5, - 0x97, 0x99, 0x84, 0x1f, 0xc0, 0xfc, 0x00, 0x19, 0x60, 0x1a, 0x51, 0xac, 0x5f, 0xa9, 0x36, 0x70, - 0xf5, 0xd6, 0xd5, 0x57, 0x9c, 0x43, 0x1a, 0xa0, 0x43, 0xb4, 0x8b, 0x3c, 0xe6, 0x76, 0x1f, 0xaa, - 0xb9, 0xf1, 0x51, 0x72, 0x92, 0x4f, 0xf6, 0xb8, 0xdb, 0x17, 0x26, 0xe6, 0x71, 0xff, 0x2d, 0x02, - 0xf9, 0x1e, 0x4b, 0xa8, 0xaf, 0x3a, 0x04, 0x4d, 0xb8, 0x4c, 0xb8, 0xa7, 0x36, 0xeb, 0x76, 0x2c, - 0x86, 0x91, 0xd9, 0x86, 0xf8, 0xc6, 0xba, 0x03, 0x4a, 0xa4, 0x0f, 0x96, 0x0e, 0x9c, 0x37, 0xb1, - 0xba, 0x92, 0xaa, 0xbb, 0xb3, 0xe4, 0x4f, 0x35, 0x80, 0xba, 0x33, 0x67, 0xa6, 0xb6, 0xd4, 0xcc, - 0x16, 0x7f, 0xca, 0xb0, 0x6f, 0x06, 0x8c, 0x86, 0x93, 0xf4, 0x5c, 0x65, 0x80, 0x86, 0xc9, 0xc7, - 0x34, 0x9a, 0xa8, 0xe1, 0xa2, 0x01, 0xf9, 0x06, 0xcc, 0xf6, 0x79, 0x2c, 0x93, 0x5c, 0x27, 0x99, - 0xd2, 0xe7, 0xae, 0x12, 0x8f, 0xf7, 0xc8, 0x55, 0x68, 0xa8, 0x9a, 0x1c, 0xeb, 0x4d, 0x2b, 0xbd, - 0x3a, 0x4a, 0xc7, 0x6a, 0x77, 0xf5, 0x39, 0xab, 0x13, 0x3d, 0x33, 0x01, 0xf7, 0x08, 0x78, 0xa8, - 0x9b, 0x22, 0x7a, 0xa0, 0xfb, 0xc6, 0x43, 0x79, 0x12, 0x0f, 0x74, 0x5f, 0x7b, 0x58, 0x87, 0x5a, - 0xc0, 0x7c, 0x4e, 0x53, 0x18, 0x95, 0xb3, 0x3b, 0xa9, 0x6a, 0x43, 0xe5, 0xa7, 0xfd, 0x0f, 0x0b, - 0x6c, 0xf5, 0x74, 0x2f, 0xc1, 0xca, 0x53, 0x4d, 0xf5, 0x34, 0xde, 0x35, 0x9f, 0x2f, 0xb0, 0x62, - 0xca, 0x14, 0x89, 0xe1, 0x42, 0xba, 0xa9, 0x6b, 0x9a, 0x43, 0xa0, 0xc4, 0xf6, 0x23, 0xa1, 0x96, - 0x6b, 0xca, 0x51, 0xcf, 0xb8, 0x83, 0xc6, 0xac, 0x4d, 0xaf, 0xc1, 0x98, 0x90, 0x5d, 0xca, 0x11, - 0x32, 0xdd, 0x71, 0x33, 0xae, 0x65, 0xa6, 0x94, 0xbf, 0x19, 0xe5, 0x0f, 0xa7, 0xee, 0xa3, 0xcb, - 0xc3, 0x6c, 0xaa, 0xac, 0xbc, 0xe6, 0xd9, 0x54, 0xfb, 0x27, 0x50, 0xb9, 0x27, 0x25, 0x4b, 0x36, - 0x29, 0x8f, 0xd1, 0x15, 0xc5, 0x41, 0x2e, 0x36, 0x35, 0xee, 0xfa, 0xe4, 0x11, 0xd4, 0x25, 0xdf, - 0x0e, 0x99, 0xaf, 0x01, 0xa6, 0xb7, 0xc2, 0x1b, 0xa7, 0x1c, 0x45, 0x4a, 0x5d, 0xc1, 0xff, 0xb0, - 0x9f, 0xbd, 0xc3, 0xa9, 0xc9, 0xb1, 0x5c, 0xb6, 0x7f, 0x6b, 0xc1, 0xc5, 0xe3, 0x15, 0xd5, 0x87, - 0x4a, 0x0d, 0x94, 0xc5, 0xd9, 0x17, 0xa9, 0x8a, 0x53, 0xcb, 0x84, 0x1b, 0x6c, 0xf4, 0x8a, 0x5b, - 0x53, 0xb6, 0xe3, 0x8b, 0x13, 0xf3, 0xfb, 0x37, 0xa1, 0x82, 0x40, 0x69, 0x32, 0x8c, 0xf5, 0x15, - 0xab, 0xe6, 0x8c, 0x05, 0x08, 0x7b, 0x36, 0xa3, 0x8d, 0x8e, 0x62, 0x74, 0x87, 0x79, 0x62, 0x2d, - 0xe3, 0x89, 0x8b, 0x50, 0xed, 0x0f, 0x07, 0x03, 0x57, 0x33, 0x3f, 0x85, 0xb2, 0xe6, 0x00, 0x8a, - 0x8c, 0xe5, 0x57, 0x45, 0x03, 0xdb, 0x3f, 0xb7, 0x60, 0x4e, 0x5f, 0x23, 0xc4, 0xc9, 0x04, 0xb7, - 0x9e, 0x01, 0x3f, 0x3d, 0xb9, 0x1b, 0x5f, 0xf8, 0xcb, 0xc9, 0x31, 0x3c, 0xfc, 0x17, 0x16, 0x90, - 0xec, 0x73, 0xe4, 0x19, 0xb8, 0xf7, 0x57, 0x07, 0xed, 0xda, 0xbf, 0xad, 0xf4, 0xd3, 0x24, 0x36, - 0x3c, 0x32, 0x0b, 0xd5, 0x47, 0xa1, 0x8c, 0x98, 0xc7, 0xfb, 0x9c, 0xf9, 0xf6, 0x39, 0x52, 0x83, - 0x12, 0x32, 0x2c, 0xdb, 0x5a, 0x28, 0x94, 0x2d, 0x52, 0x87, 0x4a, 0xf6, 0xf9, 0xc0, 0x2e, 0x90, - 0x1a, 0x94, 0xd3, 0xfb, 0xbf, 0x5d, 0x24, 0x73, 0x50, 0xc9, 0xaa, 0xc6, 0x2e, 0x29, 0xfd, 0x0a, - 0x4c, 0x39, 0xf4, 0xa9, 0x88, 0xed, 0x29, 0x32, 0x03, 0xc5, 0x35, 0x4e, 0xed, 0x69, 0x52, 0x86, - 0xd2, 0xbd, 0xcd, 0xee, 0x7b, 0xf6, 0x0c, 0x8a, 0x1e, 0x05, 0xd4, 0x2e, 0xa3, 0x08, 0x17, 0xce, - 0xae, 0x90, 0x59, 0x98, 0x31, 0x84, 0xce, 0x06, 0xe5, 0xa1, 0x06, 0xe5, 0xf4, 0xab, 0x8a, 0x5d, - 0x45, 0x7f, 0xea, 0xca, 0x6e, 0xd7, 0x48, 0x13, 0xe6, 0x8f, 0xbb, 0xda, 0xd8, 0x75, 0x52, 0x85, - 0x19, 0x53, 0x06, 0x76, 0x03, 0xed, 0xd3, 0xcc, 0xdb, 0xb3, 0x2b, 0x4f, 0x3e, 0x7d, 0xd1, 0xb2, - 0x9e, 0xbf, 0x68, 0x59, 0x7f, 0x7f, 0xd1, 0xb2, 0x7e, 0xf6, 0xb2, 0x75, 0xee, 0x8f, 0x2f, 0x5b, - 0xd6, 0xf3, 0x97, 0xad, 0x73, 0x7f, 0x7d, 0xd9, 0x3a, 0xf7, 0xa3, 0x07, 0x39, 0xca, 0xdb, 0x4d, - 0xb3, 0xf9, 0x80, 0xf6, 0xe4, 0x72, 0x96, 0xdb, 0xeb, 0x9e, 0x88, 0x59, 0x7e, 0x88, 0x10, 0x96, - 0x03, 0xe1, 0x0f, 0x07, 0x4c, 0xa6, 0xbf, 0x83, 0x28, 0x72, 0xdc, 0x9b, 0x56, 0x3f, 0x4e, 0xbc, - 0xf7, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xc5, 0x6c, 0xc4, 0x5b, 0x28, 0x19, 0x00, 0x00, + // 2225 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x59, 0xcd, 0x6f, 0x1c, 0x49, + 0x15, 0x4f, 0xcf, 0x87, 0x3d, 0xf3, 0xe6, 0xc3, 0xed, 0x8a, 0x93, 0x9d, 0x38, 0xbb, 0xe3, 0xec, + 0x2c, 0x01, 0x2b, 0xda, 0x8c, 0x93, 0xac, 0x10, 0x4a, 0x16, 0xa1, 0xc4, 0x76, 0xbc, 0x1a, 0x1c, + 0x58, 0xab, 0x9d, 0x04, 0xc4, 0xa5, 0xa9, 0xe9, 0xae, 0xb1, 0x2b, 0xee, 0xee, 0xea, 0xad, 0xea, + 0xf1, 0x7a, 0x22, 0xf1, 0x0f, 0x44, 0x42, 0xcb, 0x0d, 0x2e, 0x48, 0x9c, 0x39, 0x71, 0x80, 0x13, + 0x12, 0x42, 0x9c, 0xf6, 0x46, 0x4e, 0x08, 0xed, 0x61, 0x81, 0xe4, 0x00, 0x27, 0x2e, 0x1c, 0xb9, + 0xa0, 0xfa, 0xe8, 0x9e, 0xf6, 0xf8, 0x23, 0x9e, 0x0d, 0xbb, 0x17, 0xbb, 0xeb, 0xd5, 0x7b, 0xaf, + 0x7f, 0xef, 0xd5, 0xab, 0x7a, 0xbf, 0xea, 0x81, 0xab, 0x34, 0x7a, 0x42, 0xbc, 0x84, 0xee, 0x93, + 0x15, 0xc6, 0xb1, 0x17, 0x90, 0x95, 0xfd, 0x9b, 0x7d, 0x92, 0xe0, 0x9b, 0x66, 0xd8, 0x8d, 0x39, + 0x4b, 0x18, 0x6a, 0x65, 0x6a, 0x5d, 0x23, 0x37, 0x6a, 0x8b, 0x0b, 0x3b, 0x6c, 0x87, 0x29, 0xa5, + 0x15, 0xf9, 0xa4, 0xf5, 0x17, 0xdb, 0x1e, 0x13, 0x21, 0x13, 0x2b, 0x7d, 0x2c, 0xc6, 0x1e, 0x3d, + 0x46, 0x23, 0x33, 0x3f, 0x8f, 0x43, 0x1a, 0xb1, 0x15, 0xf5, 0x57, 0x8b, 0x3a, 0x9f, 0x94, 0x60, + 0x66, 0x0b, 0x73, 0x1c, 0x0a, 0xf4, 0x0e, 0x34, 0xe2, 0x51, 0xb2, 0xeb, 0x7a, 0x2c, 0x4a, 0x38, + 0xf6, 0x92, 0x96, 0x75, 0xc5, 0x5a, 0xae, 0x3a, 0x75, 0x29, 0x5c, 0x33, 0x32, 0xd4, 0x83, 0xb7, + 0xbd, 0x5d, 0x4c, 0xa3, 0x80, 0x46, 0x7b, 0xee, 0x3e, 0xe1, 0x74, 0x40, 0x09, 0x77, 0x63, 0xce, + 0x0e, 0x46, 0x63, 0xc3, 0x82, 0x32, 0x6c, 0x67, 0x8a, 0x8f, 0x8d, 0xde, 0x96, 0x54, 0xcb, 0x5c, + 0xb9, 0x70, 0x7d, 0xec, 0xca, 0xc7, 0x09, 0x76, 0x45, 0xc2, 0x09, 0x0e, 0x85, 0xf1, 0xeb, 0xe1, + 0x84, 0xb2, 0xc8, 0xdd, 0xc1, 0xc2, 0x0d, 0x68, 0x48, 0x93, 0x56, 0xe9, 0x8a, 0xb5, 0x5c, 0x72, + 0x96, 0x33, 0xa3, 0x75, 0x9c, 0xe0, 0x6d, 0x6d, 0xf2, 0x38, 0x67, 0xf1, 0x01, 0x16, 0x0f, 0xa4, + 0x3e, 0x7a, 0x1f, 0x16, 0x55, 0x40, 0x31, 0x67, 0x63, 0xa8, 0x19, 0xc8, 0xb2, 0x02, 0xf9, 0x86, + 0xd4, 0xd8, 0xe2, 0x2c, 0x85, 0x98, 0xa1, 0x5b, 0x87, 0xa5, 0x09, 0xe3, 0x23, 0x78, 0x66, 0x14, + 0x9e, 0xcb, 0x87, 0x3c, 0x4c, 0x40, 0xb8, 0x0d, 0x97, 0x8e, 0xf7, 0x32, 0x20, 0xa4, 0x35, 0xab, + 0xec, 0x2f, 0x1e, 0x63, 0xbf, 0x41, 0x08, 0xfa, 0x21, 0xd8, 0x82, 0xf8, 0xd8, 0x1d, 0x60, 0x91, + 0xb8, 0xb1, 0x5a, 0xa2, 0x56, 0xe5, 0x8a, 0xb5, 0x5c, 0xbb, 0xb5, 0xdc, 0x3d, 0xa9, 0x2e, 0xba, + 0xdb, 0xc4, 0xc7, 0x1b, 0x58, 0x24, 0x7a, 0x49, 0x57, 0x4b, 0x9f, 0x7e, 0xbe, 0x74, 0xce, 0x69, + 0x8a, 0x43, 0xd2, 0x3b, 0x17, 0xff, 0xf5, 0xab, 0x25, 0xeb, 0xd9, 0x3f, 0x7f, 0x73, 0xad, 0x61, + 0x8a, 0x4f, 0xcb, 0xbf, 0x5b, 0xaa, 0x14, 0xed, 0x52, 0xe7, 0xa7, 0x16, 0x34, 0x0f, 0xbb, 0x41, + 0x6f, 0x01, 0xc4, 0xc3, 0x7e, 0x40, 0x3d, 0x77, 0x8f, 0x8c, 0x54, 0x59, 0xd4, 0x9d, 0xaa, 0x96, + 0x6c, 0x92, 0x11, 0x7a, 0x17, 0x90, 0xa0, 0x61, 0x1c, 0x10, 0x19, 0xe6, 0x0e, 0xc7, 0xa1, 0x4b, + 0x7d, 0xd1, 0x2a, 0x5c, 0x29, 0x2e, 0x57, 0x1d, 0x5b, 0xcf, 0x6c, 0xe9, 0x89, 0x9e, 0x2f, 0xd0, + 0x32, 0xd8, 0x4f, 0x04, 0x8b, 0x0e, 0xe9, 0x16, 0x95, 0x6e, 0x53, 0xca, 0xc7, 0x9a, 0x77, 0x4a, + 0x12, 0x67, 0x67, 0x0f, 0xe0, 0x43, 0x05, 0xb3, 0x17, 0x0d, 0x18, 0xba, 0x08, 0x33, 0x62, 0x14, + 0xf6, 0x59, 0x60, 0xaa, 0xd3, 0x8c, 0xd0, 0x7d, 0xa8, 0xe9, 0x60, 0xdc, 0x64, 0x14, 0x13, 0x55, + 0x81, 0xcd, 0x5b, 0x5f, 0x3b, 0x39, 0x51, 0xda, 0xe5, 0xc3, 0x51, 0x4c, 0x1c, 0x60, 0xd9, 0x73, + 0xe7, 0x33, 0x0b, 0xce, 0xaf, 0xa5, 0xf5, 0xb5, 0xc5, 0xa9, 0x47, 0xb6, 0x13, 0x9c, 0x10, 0xf4, + 0x06, 0xcc, 0x0e, 0x08, 0xf1, 0x5d, 0xea, 0xa7, 0xef, 0x95, 0xc3, 0x9e, 0x8f, 0xde, 0x87, 0x19, + 0x1c, 0x89, 0x8f, 0x09, 0xd7, 0x45, 0xbf, 0xfa, 0x8e, 0xcc, 0xf8, 0x67, 0x9f, 0x2f, 0x5d, 0xd6, + 0x5b, 0x51, 0xf8, 0x7b, 0x5d, 0xca, 0x56, 0x42, 0x9c, 0xec, 0x76, 0x1f, 0x90, 0x1d, 0xec, 0x8d, + 0xd6, 0x89, 0xe7, 0x18, 0x13, 0xf4, 0x26, 0x54, 0x13, 0x1a, 0x12, 0x91, 0xe0, 0x30, 0x6e, 0x15, + 0x55, 0x35, 0x8c, 0x05, 0x68, 0x13, 0x6a, 0xb1, 0x44, 0xe0, 0x0a, 0x09, 0x41, 0x55, 0x7f, 0xed, + 0xb4, 0x90, 0xc6, 0x70, 0xcd, 0xba, 0x43, 0x9c, 0x49, 0xee, 0x14, 0x5a, 0x56, 0xe7, 0xdf, 0x16, + 0x34, 0x57, 0x71, 0xe4, 0xe7, 0xe2, 0x3a, 0x29, 0x9d, 0x37, 0xa1, 0xc4, 0xe5, 0x4b, 0x75, 0x50, + 0x6f, 0x99, 0xa0, 0x2e, 0x1c, 0x0d, 0xaa, 0x17, 0x25, 0x8e, 0x52, 0x45, 0x6f, 0x43, 0x9d, 0x13, + 0xc1, 0x82, 0x7d, 0xe2, 0xca, 0x18, 0x4c, 0x3c, 0x35, 0x23, 0x7b, 0x48, 0x43, 0x22, 0xeb, 0x88, + 0x93, 0x8f, 0x86, 0x44, 0x24, 0x6e, 0x6f, 0xdd, 0x6c, 0xe7, 0xaa, 0x91, 0xf4, 0xd6, 0x27, 0x03, + 0x2e, 0xbf, 0x76, 0xc0, 0xbf, 0xb4, 0xa0, 0xa9, 0x94, 0x36, 0x08, 0xf1, 0x75, 0xc0, 0x08, 0x4a, + 0xf2, 0x74, 0x34, 0xe1, 0xaa, 0x67, 0xb4, 0x00, 0xe5, 0x8f, 0x86, 0x2c, 0x8d, 0xd6, 0xd1, 0x03, + 0x59, 0x51, 0x79, 0x34, 0xc5, 0xb3, 0xa3, 0xc9, 0xe3, 0x40, 0x8b, 0x50, 0xe1, 0x24, 0xc0, 0x23, + 0xc2, 0x45, 0xab, 0xa4, 0xca, 0x3c, 0x1b, 0x77, 0x36, 0xa0, 0xbe, 0xc5, 0xd9, 0x3e, 0xf5, 0x09, + 0x57, 0xc5, 0xbd, 0x08, 0x95, 0xd8, 0x8c, 0x0d, 0xc0, 0x6c, 0x7c, 0xc8, 0x4f, 0x61, 0xc2, 0xcf, + 0x1f, 0x2c, 0x68, 0xa4, 0x8e, 0xf4, 0x5b, 0x37, 0xa1, 0x91, 0x5a, 0xba, 0x34, 0x1a, 0x30, 0xe5, + 0xae, 0x76, 0xeb, 0xeb, 0xa7, 0xc1, 0x1f, 0x03, 0x71, 0xea, 0x71, 0x1e, 0xd6, 0x8f, 0xe1, 0x42, + 0xe6, 0x2c, 0x97, 0x12, 0x8d, 0xa3, 0x76, 0xeb, 0xdd, 0x57, 0x3b, 0xcd, 0xe5, 0xe6, 0x7c, 0x7c, + 0x44, 0x26, 0x3a, 0xbb, 0x80, 0x8e, 0xaa, 0x9e, 0x58, 0x9c, 0x77, 0xa0, 0xac, 0xd7, 0xa4, 0x30, + 0xc5, 0x9a, 0x68, 0x93, 0xce, 0x6d, 0x99, 0x29, 0x53, 0x11, 0x2a, 0xb8, 0x33, 0x17, 0x44, 0x67, + 0x33, 0x57, 0x4c, 0xea, 0x01, 0xdd, 0x86, 0xb2, 0xca, 0x87, 0x36, 0x3e, 0xdb, 0xde, 0xd7, 0x16, + 0x9d, 0xdf, 0x5b, 0x80, 0xd6, 0x18, 0x8d, 0xe4, 0xfb, 0x72, 0x21, 0x23, 0x28, 0xed, 0xd1, 0x28, + 0x3d, 0x64, 0xd4, 0xf3, 0xe1, 0x53, 0xa2, 0x30, 0x79, 0x4a, 0xd8, 0x50, 0x94, 0x87, 0x72, 0x51, + 0x19, 0xc8, 0x47, 0x89, 0x7e, 0x1f, 0x07, 0x43, 0x62, 0x36, 0x98, 0x1e, 0xfc, 0x5f, 0x37, 0x57, + 0xe7, 0xcf, 0x16, 0xcc, 0x6d, 0x27, 0x8c, 0xe7, 0x8f, 0xc8, 0x43, 0x30, 0xad, 0x49, 0x98, 0xe3, + 0xb5, 0x2c, 0x1c, 0x5a, 0xcb, 0xdb, 0x29, 0xd8, 0xe2, 0x14, 0x29, 0xfc, 0x12, 0x22, 0xfa, 0x9d, + 0x05, 0x90, 0x0b, 0xe6, 0x8b, 0xaf, 0x2c, 0xfa, 0x3e, 0xd8, 0xde, 0x30, 0x1c, 0x06, 0x58, 0x62, + 0xd0, 0xfb, 0x65, 0x9a, 0xde, 0x30, 0x37, 0x36, 0xd6, 0x45, 0x76, 0xa4, 0x49, 0x14, 0x73, 0x79, + 0xed, 0xfc, 0xa5, 0x00, 0xcd, 0x2d, 0x45, 0x20, 0x32, 0xec, 0x97, 0xe4, 0x29, 0x22, 0xf3, 0x92, + 0x35, 0xab, 0x59, 0x35, 0xee, 0xf9, 0xe8, 0x2e, 0x54, 0x49, 0x88, 0xa7, 0x07, 0x55, 0x21, 0x21, + 0xd6, 0x68, 0xbe, 0x03, 0xf2, 0x59, 0xb2, 0xa8, 0xc1, 0x34, 0x4b, 0x36, 0x4b, 0x42, 0xbc, 0xc6, + 0xa2, 0x01, 0xfa, 0x16, 0x94, 0x94, 0x6d, 0xe9, 0xec, 0xb6, 0xca, 0x40, 0xb6, 0x17, 0xc5, 0x38, + 0xc4, 0xae, 0x6e, 0x2f, 0x65, 0xdd, 0x5e, 0x8c, 0x4c, 0xb5, 0x97, 0x89, 0x82, 0x98, 0x79, 0xad, + 0x82, 0x78, 0x5e, 0x80, 0xf6, 0xda, 0x31, 0x4c, 0xf3, 0x2c, 0xa4, 0xe0, 0xae, 0x6c, 0x85, 0x31, + 0xe3, 0xc9, 0xa1, 0x4c, 0xbf, 0xa2, 0x8b, 0xd6, 0xb4, 0x89, 0x4e, 0xf3, 0x0d, 0x58, 0xd8, 0xc7, + 0x01, 0xf5, 0xdd, 0x01, 0x67, 0xa1, 0x3b, 0x49, 0x12, 0x90, 0x9a, 0xdb, 0xe0, 0x2c, 0x7c, 0x98, + 0x6d, 0xb0, 0x6f, 0xc2, 0x45, 0xd6, 0x17, 0x84, 0xef, 0x2b, 0x02, 0x29, 0x72, 0x36, 0xfa, 0x18, + 0xb8, 0x90, 0x9f, 0x7d, 0x78, 0x12, 0xc9, 0x78, 0xad, 0x4d, 0x24, 0xfb, 0x3b, 0x39, 0x88, 0x29, + 0x27, 0xc2, 0xc5, 0x29, 0x3d, 0xae, 0x1a, 0xc9, 0xbd, 0xa4, 0xf3, 0xac, 0x08, 0xf3, 0x92, 0x7f, + 0x68, 0xee, 0xe5, 0xe8, 0xbe, 0x9f, 0x27, 0x05, 0x26, 0x91, 0x39, 0x52, 0xe0, 0x4b, 0xba, 0x68, + 0x88, 0x9d, 0xf0, 0x38, 0x8d, 0x95, 0x52, 0x41, 0xed, 0x82, 0xa6, 0x96, 0x6f, 0x2b, 0x71, 0xcf, + 0x47, 0x2d, 0x98, 0xd5, 0x87, 0x4a, 0xca, 0x27, 0xd3, 0x21, 0xba, 0x0c, 0x55, 0x2c, 0xf6, 0x5c, + 0x8f, 0x0d, 0xa3, 0xf4, 0x16, 0x51, 0xc1, 0x62, 0x6f, 0x4d, 0x8e, 0xe5, 0x64, 0x48, 0x23, 0x33, + 0xa9, 0xab, 0xaa, 0x12, 0xd2, 0x48, 0x4f, 0xee, 0x42, 0x75, 0x40, 0x48, 0xc6, 0xf7, 0x65, 0xbb, + 0xbb, 0xd4, 0xd5, 0xeb, 0xd7, 0x95, 0x47, 0x77, 0x96, 0x17, 0x79, 0x96, 0xaf, 0xde, 0x90, 0x19, + 0xf9, 0xf5, 0xdf, 0x96, 0x96, 0x77, 0x68, 0xb2, 0x3b, 0xec, 0x77, 0x3d, 0x16, 0xae, 0x98, 0x2b, + 0x99, 0xfe, 0x77, 0x5d, 0xf8, 0x7b, 0x2b, 0x92, 0xa0, 0x0a, 0x65, 0x20, 0x9c, 0xca, 0x80, 0x10, + 0x7d, 0x53, 0x58, 0x92, 0x0b, 0x41, 0x62, 0xcc, 0x89, 0xbc, 0x61, 0x98, 0xbb, 0x01, 0x18, 0xd1, + 0x07, 0x58, 0x48, 0x05, 0x72, 0x40, 0xbc, 0x61, 0xa2, 0x15, 0x2a, 0x5a, 0xc1, 0x88, 0xa4, 0xc2, + 0x32, 0xd8, 0x32, 0x10, 0xc1, 0x86, 0xdc, 0x23, 0x26, 0x9e, 0xaa, 0xd2, 0x6a, 0x86, 0x34, 0xda, + 0x56, 0x62, 0x15, 0x95, 0xe2, 0x46, 0xcf, 0x0a, 0xd0, 0x90, 0x8b, 0xd1, 0x5b, 0x5d, 0x33, 0x2c, + 0x7f, 0x19, 0xec, 0x3e, 0x8e, 0x7c, 0x97, 0xf6, 0x3d, 0x97, 0x44, 0xb8, 0x1f, 0x10, 0xbd, 0x1c, + 0x15, 0xa7, 0x29, 0xe5, 0xbd, 0xbe, 0x77, 0x5f, 0x4b, 0x65, 0x75, 0x4a, 0xa5, 0x6c, 0xd9, 0xa2, + 0x44, 0x56, 0x56, 0x60, 0xd6, 0x05, 0xd1, 0xbe, 0x67, 0x16, 0xb7, 0x67, 0x66, 0xe4, 0x15, 0x41, + 0x5a, 0xa4, 0xd8, 0x76, 0x71, 0x14, 0x91, 0xc0, 0x34, 0x2d, 0x9b, 0xf6, 0x3d, 0x83, 0x4e, 0xcb, + 0x65, 0xa8, 0x52, 0x7b, 0x9f, 0x70, 0x41, 0x59, 0xa4, 0xcf, 0x0a, 0x07, 0x68, 0xdf, 0x7b, 0xac, + 0x25, 0xa8, 0xad, 0x15, 0xd4, 0x16, 0xa3, 0xbe, 0xb9, 0xca, 0x55, 0x69, 0xdf, 0xdb, 0x62, 0x5c, + 0x96, 0xc2, 0x35, 0x98, 0x0f, 0xd4, 0xf9, 0xe1, 0x9a, 0xda, 0x91, 0x97, 0x0c, 0xb9, 0x7c, 0x45, + 0x67, 0x4e, 0x4f, 0x98, 0x2b, 0x85, 0x2f, 0x54, 0x32, 0x3e, 0xb1, 0x60, 0x61, 0x5b, 0x15, 0x8b, + 0xaa, 0xef, 0xf1, 0xf6, 0xf8, 0x36, 0xcc, 0x68, 0x0f, 0x2a, 0x13, 0x67, 0xbd, 0x51, 0x18, 0x1b, + 0x59, 0x5a, 0xba, 0x04, 0xd3, 0xa2, 0xad, 0x3a, 0x15, 0x2d, 0xe8, 0xf9, 0xaf, 0x38, 0xd7, 0x47, + 0x70, 0xfe, 0x81, 0xbc, 0x80, 0x1d, 0x82, 0x23, 0x50, 0x1f, 0x2e, 0x04, 0xea, 0x3e, 0xa8, 0xf6, + 0x6c, 0xa6, 0x2e, 0x5a, 0x96, 0xaa, 0xcd, 0xee, 0x29, 0x37, 0xc3, 0x63, 0xc2, 0x73, 0xce, 0x07, + 0x47, 0xdf, 0xd1, 0xf9, 0x93, 0x25, 0x69, 0x29, 0xf5, 0x88, 0x43, 0x3c, 0xc6, 0x7d, 0xf1, 0x65, + 0x26, 0xe1, 0x07, 0xb0, 0x10, 0x48, 0x06, 0x98, 0x46, 0xc4, 0xf5, 0x2b, 0xd5, 0x06, 0xae, 0xdd, + 0xba, 0xfa, 0x8a, 0x73, 0x48, 0x03, 0x74, 0x90, 0x76, 0x91, 0xc7, 0xdc, 0x19, 0x40, 0x2d, 0x37, + 0x3e, 0x4a, 0x4e, 0xf2, 0xc9, 0x1e, 0x77, 0xfb, 0xc2, 0xd4, 0x3c, 0xee, 0x3f, 0x45, 0x40, 0xdf, + 0x23, 0x09, 0xf6, 0x55, 0x87, 0xc0, 0x09, 0x15, 0x09, 0xf5, 0xd4, 0x66, 0xdd, 0xe1, 0x6c, 0x18, + 0x9b, 0x6d, 0x28, 0xdf, 0xd8, 0x70, 0x40, 0x89, 0xf4, 0xc1, 0xd2, 0x85, 0xf3, 0x26, 0x56, 0x57, + 0x60, 0x75, 0x77, 0x16, 0xf4, 0xa9, 0x06, 0xd0, 0x70, 0xe6, 0xcd, 0xd4, 0xb6, 0x9a, 0xd9, 0xa6, + 0x4f, 0x89, 0xec, 0x9b, 0x21, 0xc1, 0xd1, 0x34, 0x3d, 0x57, 0x19, 0x48, 0xc3, 0xe4, 0x63, 0x1c, + 0x4f, 0xd5, 0x70, 0xa5, 0x01, 0xfa, 0x06, 0xcc, 0x0d, 0x28, 0x17, 0x49, 0xae, 0x93, 0x94, 0xf5, + 0xb9, 0xab, 0xc4, 0xe3, 0x3d, 0x72, 0x15, 0x9a, 0xaa, 0x26, 0xc7, 0x7a, 0x33, 0x4a, 0xaf, 0x21, + 0xa5, 0x63, 0xb5, 0xbb, 0xfa, 0x9c, 0xd5, 0x89, 0x9e, 0x9d, 0x82, 0x7b, 0x84, 0x34, 0xd2, 0x4d, + 0x51, 0x7a, 0xc0, 0x07, 0xc6, 0x43, 0x65, 0x1a, 0x0f, 0xf8, 0x40, 0x7b, 0xd8, 0x80, 0x7a, 0x48, + 0x7c, 0x8a, 0x53, 0x18, 0xd5, 0xb3, 0x3b, 0xa9, 0x69, 0x43, 0xe5, 0xa7, 0xf3, 0x0f, 0x0b, 0x6c, + 0xf5, 0x74, 0x2f, 0x91, 0x95, 0xa7, 0x9a, 0xea, 0x69, 0xbc, 0x6b, 0x21, 0x5f, 0x60, 0xc5, 0x94, + 0x29, 0x22, 0xc3, 0x85, 0x74, 0x53, 0xd7, 0x34, 0x07, 0x41, 0x89, 0x1c, 0xc4, 0x4c, 0x2d, 0x57, + 0xd9, 0x51, 0xcf, 0x72, 0x07, 0x8d, 0x59, 0x9b, 0x5e, 0x83, 0x31, 0x21, 0xbb, 0x94, 0x23, 0x64, + 0xba, 0xe3, 0x66, 0x5c, 0xcb, 0x4c, 0x29, 0x7f, 0xb3, 0xca, 0x9f, 0x9c, 0xba, 0x2f, 0x5d, 0x4e, + 0xb2, 0xa9, 0x8a, 0xf2, 0x9a, 0x67, 0x53, 0x9d, 0x9f, 0x40, 0xf5, 0x9e, 0x10, 0x24, 0xd9, 0xc2, + 0x94, 0x4b, 0x57, 0x58, 0x0e, 0x72, 0xb1, 0xa9, 0x71, 0xcf, 0x47, 0x8f, 0xa0, 0x21, 0xe8, 0x4e, + 0x44, 0x7c, 0x0d, 0x30, 0xbd, 0x15, 0xde, 0x38, 0xe5, 0x28, 0x52, 0xea, 0x0a, 0xfe, 0x87, 0x83, + 0xec, 0x1d, 0x4e, 0x5d, 0x8c, 0xe5, 0xa2, 0xf3, 0x5b, 0x0b, 0x2e, 0x1e, 0xaf, 0xa8, 0x3e, 0x54, + 0x6a, 0xa0, 0x84, 0x67, 0x5f, 0xa4, 0xaa, 0x4e, 0x3d, 0x13, 0x6e, 0x92, 0xd1, 0x2b, 0x6e, 0x4d, + 0xd9, 0x8e, 0x2f, 0x4e, 0xcd, 0xef, 0xdf, 0x84, 0xaa, 0x04, 0x8a, 0x93, 0x21, 0xd7, 0x57, 0xac, + 0xba, 0x33, 0x16, 0x48, 0xd8, 0x73, 0x19, 0x6d, 0x74, 0x14, 0xa3, 0x9b, 0xe4, 0x89, 0xf5, 0x8c, + 0x27, 0x2e, 0x41, 0x6d, 0x30, 0x0c, 0x02, 0x57, 0x33, 0x3f, 0x85, 0xb2, 0xee, 0x80, 0x14, 0x19, + 0xcb, 0xaf, 0x8a, 0x06, 0x76, 0x7e, 0x6e, 0xc1, 0xbc, 0xbe, 0x46, 0xb0, 0x93, 0x09, 0x6e, 0x23, + 0x03, 0x7e, 0x7a, 0x72, 0x37, 0xbf, 0xf0, 0x97, 0x93, 0x63, 0x78, 0xf8, 0x2f, 0x2c, 0x40, 0xd9, + 0xe7, 0xc8, 0x33, 0x70, 0xef, 0xaf, 0x0e, 0xda, 0xb5, 0xff, 0x5a, 0xe9, 0xa7, 0x49, 0xd9, 0xf0, + 0xd0, 0x1c, 0xd4, 0x1e, 0x45, 0x22, 0x26, 0x1e, 0x1d, 0x50, 0xe2, 0xdb, 0xe7, 0x50, 0x1d, 0x4a, + 0x92, 0x61, 0xd9, 0xd6, 0x62, 0xa1, 0x62, 0xa1, 0x06, 0x54, 0xb3, 0xcf, 0x07, 0x76, 0x01, 0xd5, + 0xa1, 0x92, 0xde, 0xff, 0xed, 0x22, 0x9a, 0x87, 0x6a, 0x56, 0x35, 0x76, 0xc9, 0xe8, 0x97, 0x1d, + 0xfc, 0x94, 0x71, 0xbb, 0xac, 0x86, 0x35, 0x28, 0xae, 0x53, 0x6c, 0xcf, 0xa8, 0x41, 0x1d, 0x4a, + 0xf7, 0xb6, 0x7a, 0xef, 0xd9, 0xb3, 0xe9, 0xd4, 0xa3, 0x10, 0xdb, 0x15, 0x35, 0xa8, 0x40, 0x49, + 0x2e, 0xa4, 0x5d, 0x45, 0x73, 0x30, 0x6b, 0x08, 0x9e, 0x0d, 0xc6, 0xaa, 0x92, 0x7e, 0x65, 0xb1, + 0x6b, 0xa8, 0x0a, 0x65, 0x75, 0x85, 0xb7, 0xeb, 0xa8, 0x05, 0x0b, 0xc7, 0x5d, 0x75, 0xec, 0x06, + 0xaa, 0xc1, 0xac, 0x29, 0x0b, 0xbb, 0x29, 0xed, 0xd3, 0x95, 0xb0, 0xe7, 0x56, 0x9f, 0x7c, 0xfa, + 0xa2, 0x6d, 0x3d, 0x7f, 0xd1, 0xb6, 0xfe, 0xfe, 0xa2, 0x6d, 0xfd, 0xec, 0x65, 0xfb, 0xdc, 0x1f, + 0x5f, 0xb6, 0xad, 0xe7, 0x2f, 0xdb, 0xe7, 0xfe, 0xfa, 0xb2, 0x7d, 0xee, 0x47, 0x0f, 0x72, 0x14, + 0xb8, 0x97, 0x66, 0xf7, 0x01, 0xee, 0x8b, 0x95, 0x2c, 0xd7, 0xd7, 0x3d, 0xc6, 0x49, 0x7e, 0x28, + 0x21, 0xac, 0x84, 0xcc, 0x1f, 0x06, 0x44, 0xa4, 0xbf, 0x8b, 0x28, 0xb2, 0xdc, 0x9f, 0x51, 0x3f, + 0x56, 0xbc, 0xf7, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x11, 0xe8, 0x53, 0xec, 0x38, 0x19, 0x00, + 0x00, } func (this *Params) Equal(that interface{}) bool { diff --git a/chain/peggy/types/msgs.pb.go b/chain/peggy/types/msgs.pb.go index 27ca801c9..578ae397f 100644 --- a/chain/peggy/types/msgs.pb.go +++ b/chain/peggy/types/msgs.pb.go @@ -7,7 +7,6 @@ import ( context "context" cosmossdk_io_math "cosmossdk.io/math" fmt "fmt" - types2 "github.com/InjectiveLabs/sdk-go/chain/oracle/types" _ "github.com/cosmos/cosmos-proto" types1 "github.com/cosmos/cosmos-sdk/codec/types" types "github.com/cosmos/cosmos-sdk/types" @@ -1592,8 +1591,7 @@ type MsgCreateRateLimit struct { TokenAddress string `protobuf:"bytes,2,opt,name=token_address,json=tokenAddress,proto3" json:"token_address,omitempty"` // decimals of the ERC20 token TokenDecimals uint32 `protobuf:"varint,3,opt,name=token_decimals,json=tokenDecimals,proto3" json:"token_decimals,omitempty"` - // unique ID used to obtain the notional USD value of the ERC20 token from - // oracle + // a Pyth-specific ID used to obtain USD price of the ERC20 token TokenPriceId string `protobuf:"bytes,4,opt,name=token_price_id,json=tokenPriceId,proto3" json:"token_price_id,omitempty"` // the notional USD limit imposed on all outgoing traffic (per token) RateLimitUsd cosmossdk_io_math.LegacyDec `protobuf:"bytes,5,opt,name=rate_limit_usd,json=rateLimitUsd,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"rate_limit_usd"` @@ -1602,9 +1600,6 @@ type MsgCreateRateLimit struct { // length of the sliding window in which inbound (outbound) traffic is // measured RateLimitWindow uint64 `protobuf:"varint,7,opt,name=rate_limit_window,json=rateLimitWindow,proto3" json:"rate_limit_window,omitempty"` - // token_oracle_type is used to obtain the USD price of the ERC20 token (in - // relation with token_price_id) - TokenOracleType types2.OracleType `protobuf:"varint,8,opt,name=token_oracle_type,json=tokenOracleType,proto3,enum=injective.oracle.v1beta1.OracleType" json:"token_oracle_type,omitempty"` } func (m *MsgCreateRateLimit) Reset() { *m = MsgCreateRateLimit{} } @@ -1675,13 +1670,6 @@ func (m *MsgCreateRateLimit) GetRateLimitWindow() uint64 { return 0 } -func (m *MsgCreateRateLimit) GetTokenOracleType() types2.OracleType { - if m != nil { - return m.TokenOracleType - } - return types2.OracleType_Unspecified -} - type MsgCreateRateLimitResponse struct { } @@ -1723,16 +1711,12 @@ type MsgUpdateRateLimit struct { Authority string `protobuf:"bytes,1,opt,name=authority,proto3" json:"authority,omitempty"` // token_address is the address of rate limited token TokenAddress string `protobuf:"bytes,2,opt,name=token_address,json=tokenAddress,proto3" json:"token_address,omitempty"` - // unique ID used to obtain the notional USD value of the ERC20 token from - // oracle + // new_token_price_id is the new Pyth price ID of the rate limited token NewTokenPriceId string `protobuf:"bytes,3,opt,name=new_token_price_id,json=newTokenPriceId,proto3" json:"new_token_price_id,omitempty"` // new_rate_limit_usd is the new notional limit (on withdrawals) in USD NewRateLimitUsd cosmossdk_io_math.LegacyDec `protobuf:"bytes,4,opt,name=new_rate_limit_usd,json=newRateLimitUsd,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"new_rate_limit_usd"` // new_rate_limit_window is the new length of the sliding window NewRateLimitWindow uint64 `protobuf:"varint,5,opt,name=new_rate_limit_window,json=newRateLimitWindow,proto3" json:"new_rate_limit_window,omitempty"` - // new_token_oracle_type is used to obtain the USD price of the ERC20 token - // (in relation with token_price_id) - NewTokenOracleType types2.OracleType `protobuf:"varint,6,opt,name=new_token_oracle_type,json=newTokenOracleType,proto3,enum=injective.oracle.v1beta1.OracleType" json:"new_token_oracle_type,omitempty"` } func (m *MsgUpdateRateLimit) Reset() { *m = MsgUpdateRateLimit{} } @@ -1796,13 +1780,6 @@ func (m *MsgUpdateRateLimit) GetNewRateLimitWindow() uint64 { return 0 } -func (m *MsgUpdateRateLimit) GetNewTokenOracleType() types2.OracleType { - if m != nil { - return m.NewTokenOracleType - } - return types2.OracleType_Unspecified -} - type MsgUpdateRateLimitResponse struct { } @@ -1969,144 +1946,140 @@ func init() { func init() { proto.RegisterFile("injective/peggy/v1/msgs.proto", fileDescriptor_751daa04abed7ef4) } var fileDescriptor_751daa04abed7ef4 = []byte{ - // 2185 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x59, 0xcf, 0x6f, 0x1c, 0x49, - 0xf5, 0x4f, 0x7b, 0xc6, 0x4e, 0x5c, 0xb6, 0xe3, 0xaf, 0x7b, 0x9d, 0x64, 0xd2, 0x49, 0xec, 0xb8, - 0x6d, 0x27, 0x5e, 0x27, 0x99, 0x89, 0x9d, 0x2f, 0xbb, 0xac, 0x25, 0x90, 0x32, 0x76, 0x10, 0x66, - 0xe3, 0x8d, 0xd5, 0x4e, 0x36, 0x12, 0x97, 0xa6, 0xa6, 0xfb, 0xa5, 0xa7, 0xf1, 0x74, 0xd7, 0xd0, - 0x5d, 0x33, 0x66, 0x0e, 0x48, 0xcb, 0x4a, 0x1c, 0x58, 0x0e, 0x8b, 0xc4, 0x01, 0x81, 0x04, 0x17, - 0xb8, 0x70, 0x58, 0x29, 0x87, 0x5c, 0xe0, 0x8e, 0xb4, 0xda, 0xd3, 0x0a, 0x2e, 0x08, 0xa1, 0x08, - 0x12, 0xa4, 0xfc, 0x19, 0xa0, 0xae, 0xaa, 0xae, 0xe9, 0xee, 0xe9, 0x1e, 0x8f, 0x43, 0xb4, 0x17, - 0x6b, 0xea, 0xd5, 0xab, 0xaa, 0xcf, 0xfb, 0xfd, 0x5e, 0x1b, 0x5d, 0x71, 0xfd, 0xef, 0x83, 0x45, - 0xdd, 0x2e, 0xd4, 0xda, 0xe0, 0x38, 0xbd, 0x5a, 0x77, 0xa3, 0xe6, 0x85, 0x4e, 0x58, 0x6d, 0x07, - 0x84, 0x12, 0x55, 0x95, 0xdb, 0x55, 0xb6, 0x5d, 0xed, 0x6e, 0x68, 0xf3, 0x0e, 0x71, 0x08, 0xdb, - 0xae, 0x45, 0xbf, 0x38, 0xa7, 0x76, 0xd9, 0x21, 0xc4, 0x69, 0x41, 0x0d, 0xb7, 0xdd, 0x1a, 0xf6, - 0x7d, 0x42, 0x31, 0x75, 0x89, 0x2f, 0xee, 0xd1, 0x2e, 0x8a, 0x5d, 0xb6, 0x6a, 0x74, 0x9e, 0xd4, - 0xb0, 0xdf, 0x13, 0x5b, 0x73, 0xd8, 0x73, 0x7d, 0x52, 0x63, 0x7f, 0x05, 0x69, 0xc1, 0x22, 0xa1, - 0x47, 0xc2, 0x5a, 0x03, 0x87, 0x50, 0xeb, 0x6e, 0x34, 0x80, 0xe2, 0x8d, 0x9a, 0x45, 0x5c, 0x5f, - 0xec, 0x5f, 0x10, 0xfb, 0x5e, 0xe8, 0x08, 0xbc, 0xf1, 0x33, 0x7c, 0xc3, 0xe4, 0xe8, 0xf8, 0x42, - 0x6c, 0xad, 0xf6, 0x05, 0x25, 0x01, 0xb6, 0x5a, 0xfd, 0x8b, 0xf9, 0x32, 0x7e, 0x3a, 0x47, 0x1f, - 0xb4, 0xd7, 0x86, 0xf8, 0x9a, 0xc5, 0x9c, 0xfd, 0x36, 0x0e, 0xb0, 0x17, 0x33, 0x2c, 0xe7, 0x30, - 0x04, 0x98, 0x82, 0xd9, 0x72, 0x3d, 0x97, 0x72, 0x26, 0xfd, 0x33, 0x05, 0x5d, 0xda, 0x0b, 0x9d, - 0x03, 0xa0, 0x0f, 0x02, 0xab, 0x09, 0x21, 0x0d, 0x30, 0x25, 0xc1, 0x5d, 0xdb, 0x0e, 0x20, 0x0c, - 0x21, 0x54, 0xcf, 0xa3, 0x89, 0x10, 0x7c, 0x1b, 0x82, 0x8a, 0x72, 0x55, 0x59, 0x9b, 0x34, 0xc4, - 0x4a, 0xd5, 0xd1, 0x34, 0x49, 0x1c, 0xa8, 0x8c, 0xb1, 0xdd, 0x14, 0x4d, 0x5d, 0x44, 0x53, 0x40, - 0x9b, 0x26, 0xe6, 0x97, 0x55, 0x4a, 0x8c, 0x05, 0x01, 0x6d, 0x8a, 0xeb, 0xb7, 0x36, 0x3e, 0x7e, - 0xf5, 0x74, 0x5d, 0xdc, 0xf8, 0xc9, 0xab, 0xa7, 0xeb, 0x4b, 0x1c, 0xe7, 0x10, 0x3c, 0xfa, 0x2a, - 0x5a, 0x1e, 0xb2, 0x6d, 0x40, 0xd8, 0x26, 0x7e, 0x08, 0xfa, 0x1f, 0x15, 0xf4, 0x7f, 0x7b, 0xa1, - 0xf3, 0x21, 0x6e, 0x85, 0x40, 0xb7, 0x89, 0xff, 0xc4, 0x0d, 0x3c, 0x75, 0x1e, 0x8d, 0xfb, 0xc4, - 0xb7, 0x80, 0x89, 0x52, 0x36, 0xf8, 0xe2, 0x8d, 0x48, 0xa2, 0x5e, 0x46, 0x93, 0xa1, 0xeb, 0xf8, - 0x98, 0x76, 0x02, 0xa8, 0x94, 0xd9, 0x76, 0x9f, 0xb0, 0x75, 0x33, 0x92, 0x33, 0x75, 0x63, 0x24, - 0xed, 0x79, 0x29, 0x6d, 0x0a, 0xa6, 0xae, 0xa1, 0x4a, 0x96, 0x26, 0xe5, 0x7a, 0xae, 0xa0, 0x69, - 0x26, 0xbf, 0x6f, 0x3f, 0x24, 0xf7, 0x68, 0xb3, 0xd0, 0x3e, 0x17, 0xd1, 0x99, 0x08, 0xb1, 0x0d, - 0x21, 0x15, 0x12, 0x9d, 0x06, 0xda, 0xdc, 0x81, 0x90, 0xaa, 0xef, 0xa2, 0x09, 0xec, 0x91, 0x8e, - 0x4f, 0x99, 0x1c, 0x53, 0x9b, 0x17, 0xab, 0xc2, 0x3d, 0x23, 0x27, 0xaf, 0x0a, 0x5f, 0xac, 0x6e, - 0x13, 0xd7, 0xaf, 0x97, 0x3f, 0x7f, 0xbe, 0x78, 0xca, 0x10, 0xec, 0xea, 0x37, 0x11, 0x6a, 0x04, - 0xae, 0xed, 0x80, 0xf9, 0x04, 0xb8, 0x94, 0x23, 0x1c, 0x9e, 0xe4, 0x47, 0xbe, 0x05, 0xb0, 0xa5, - 0x67, 0xcc, 0xad, 0x26, 0xcc, 0x2d, 0xe4, 0xd1, 0xcf, 0xa3, 0xf9, 0xe4, 0x5a, 0x0a, 0xfe, 0x43, - 0x34, 0xbb, 0x17, 0x3a, 0x06, 0xfc, 0xa0, 0x03, 0x21, 0xad, 0x63, 0x6a, 0x35, 0x07, 0x0c, 0xa7, - 0xe4, 0x18, 0x6e, 0x1e, 0x8d, 0xdb, 0xe0, 0x13, 0x4f, 0xe8, 0x80, 0x2f, 0xb6, 0x6e, 0xe4, 0xda, - 0xe3, 0x9c, 0x84, 0x93, 0x7c, 0x46, 0xbf, 0x88, 0x2e, 0x64, 0x48, 0x12, 0xd4, 0x3f, 0x14, 0x86, - 0x4a, 0x18, 0x89, 0xa3, 0xca, 0x77, 0xb2, 0x55, 0x74, 0x96, 0x92, 0x43, 0xf0, 0x4d, 0x8b, 0xf8, - 0x34, 0xc0, 0x56, 0x6c, 0x94, 0x19, 0x46, 0xdd, 0x16, 0x44, 0xf5, 0x0a, 0x8a, 0x9c, 0xca, 0x8c, - 0x3c, 0x07, 0x02, 0xe1, 0x66, 0x93, 0x40, 0x9b, 0x07, 0x8c, 0x30, 0x20, 0x71, 0x39, 0x47, 0xe2, - 0x94, 0x27, 0x8e, 0x67, 0x3d, 0xf1, 0x38, 0xc9, 0x93, 0xa2, 0x08, 0xc9, 0x93, 0x24, 0x29, 0xf9, - 0x4f, 0x4b, 0x4c, 0xf2, 0x1d, 0x68, 0x93, 0xd0, 0xa5, 0xdb, 0x2d, 0xec, 0x7a, 0x2c, 0x48, 0xba, - 0xe0, 0x53, 0x33, 0x29, 0x3f, 0x62, 0xa4, 0x0f, 0x98, 0x12, 0x96, 0xd0, 0x74, 0xa3, 0x45, 0xac, - 0x43, 0xb3, 0x09, 0xae, 0xd3, 0xe4, 0x2a, 0x28, 0x1b, 0x53, 0x8c, 0xf6, 0x6d, 0x46, 0xca, 0xd1, - 0x53, 0x29, 0x4f, 0x4f, 0x5f, 0x93, 0x2e, 0xcc, 0x54, 0x50, 0xbf, 0x12, 0xb9, 0xda, 0xdf, 0x9f, - 0x2f, 0x9e, 0xe3, 0xce, 0x18, 0xda, 0x87, 0x55, 0x97, 0xd4, 0x3c, 0x4c, 0x9b, 0xd5, 0x5d, 0x9f, - 0x4a, 0x07, 0xbe, 0x8e, 0x66, 0x81, 0x36, 0x21, 0x80, 0x8e, 0x67, 0x8a, 0xa8, 0xe1, 0x1a, 0x3a, - 0x1b, 0x93, 0x0f, 0x78, 0xf4, 0x5c, 0x47, 0xb3, 0x22, 0x7f, 0x07, 0x60, 0x81, 0xdb, 0x85, 0xa0, - 0x32, 0xc1, 0x19, 0x39, 0xd9, 0x10, 0xd4, 0x01, 0x8b, 0x9c, 0xce, 0xb1, 0x88, 0x8a, 0xca, 0x36, - 0xa6, 0xb8, 0x72, 0x86, 0xed, 0xb1, 0xdf, 0x5b, 0xdf, 0xf9, 0xe2, 0xd9, 0xad, 0x4b, 0x71, 0x1d, - 0xe3, 0x31, 0x73, 0x4f, 0x40, 0x60, 0xca, 0x3c, 0xc6, 0x4c, 0x49, 0xbd, 0x0b, 0x33, 0x25, 0x49, - 0xd2, 0x4c, 0x9f, 0x8e, 0xb1, 0x34, 0xf8, 0xd8, 0xa5, 0x4d, 0x3b, 0xc0, 0x47, 0x6f, 0xce, 0x4e, - 0x8b, 0x68, 0xaa, 0x11, 0x39, 0x84, 0xb8, 0xa3, 0xc4, 0xef, 0x60, 0xa4, 0x0f, 0x0a, 0x1c, 0xbe, - 0x9c, 0x67, 0xc8, 0xac, 0xfe, 0xc6, 0x07, 0xf5, 0xb7, 0xf5, 0xfe, 0xeb, 0xe8, 0xaa, 0x9f, 0x5c, - 0x53, 0xc2, 0x8b, 0xe4, 0x9a, 0xa2, 0x49, 0x6d, 0xbd, 0x1c, 0x43, 0xe7, 0xf6, 0x42, 0xe7, 0x9e, - 0xb1, 0xbd, 0x79, 0x7b, 0x07, 0xda, 0x2d, 0xd2, 0x03, 0xfb, 0xcd, 0xa9, 0x6c, 0x09, 0x4d, 0x0b, - 0x9f, 0xe2, 0x19, 0x89, 0x3b, 0xf6, 0x14, 0xa7, 0xed, 0x44, 0xa4, 0x51, 0x95, 0xa6, 0xa2, 0xb2, - 0x8f, 0xbd, 0x38, 0xba, 0xd9, 0x6f, 0x56, 0x07, 0x7a, 0x5e, 0x83, 0xb4, 0x84, 0xa3, 0x8a, 0x95, - 0xaa, 0xa1, 0x33, 0x36, 0x58, 0xae, 0x87, 0x5b, 0x21, 0x73, 0xce, 0xb2, 0x21, 0xd7, 0x03, 0xca, - 0x3f, 0x93, 0xa3, 0xfc, 0xfd, 0xd7, 0x51, 0xfe, 0x25, 0xa9, 0xfc, 0x41, 0x5d, 0xea, 0x8b, 0xe8, - 0x4a, 0xee, 0x86, 0x34, 0xc3, 0x8f, 0x90, 0x1a, 0xa5, 0x1d, 0xec, 0x5b, 0xd0, 0xea, 0x17, 0xba, - 0x48, 0x37, 0x01, 0xf6, 0x43, 0x6c, 0x45, 0xdd, 0x9c, 0xe9, 0xda, 0xc2, 0x0a, 0x33, 0x09, 0xea, - 0xae, 0x9d, 0xa8, 0x87, 0x63, 0xc9, 0x7a, 0xb8, 0xb5, 0x96, 0xa9, 0x3d, 0x95, 0x7e, 0xca, 0x4b, - 0x3f, 0xa4, 0x5f, 0x46, 0xda, 0x20, 0x55, 0x82, 0xfb, 0x97, 0xc2, 0xe0, 0x1f, 0x74, 0x1a, 0x9e, - 0x4b, 0xeb, 0xd8, 0x3e, 0x88, 0x53, 0xeb, 0xbd, 0xae, 0x6b, 0x43, 0xe4, 0x0a, 0x8f, 0xd0, 0xe9, - 0xb0, 0xd3, 0x88, 0x3a, 0x2f, 0x86, 0x70, 0x6a, 0x73, 0xbe, 0xca, 0x5b, 0xce, 0x6a, 0xdc, 0x72, - 0x56, 0xef, 0xfa, 0xbd, 0xfa, 0xea, 0x17, 0xcf, 0x6e, 0x2d, 0x0d, 0xf6, 0xb4, 0x52, 0xbb, 0x2c, - 0xe5, 0xdb, 0x46, 0x7c, 0x57, 0x3a, 0xaf, 0x8f, 0x65, 0xf2, 0x7a, 0x42, 0xec, 0x52, 0x4a, 0xec, - 0x3b, 0x19, 0xb1, 0x97, 0xfb, 0x25, 0xb7, 0x50, 0x02, 0xfd, 0x3a, 0x5a, 0x1d, 0xca, 0x20, 0x95, - 0xf1, 0xeb, 0x12, 0x0b, 0x18, 0xde, 0xaa, 0x3c, 0x6a, 0xdb, 0x98, 0x9e, 0x24, 0x60, 0xba, 0xec, - 0x98, 0xe0, 0x10, 0x01, 0xc3, 0x69, 0xf9, 0x31, 0x55, 0x1a, 0x8c, 0xa9, 0x6f, 0xa0, 0xd3, 0x1e, - 0x78, 0x0d, 0x08, 0xc2, 0x4a, 0xf9, 0x6a, 0x69, 0x6d, 0x6a, 0x73, 0xb9, 0x9a, 0xa3, 0xd2, 0x3a, - 0xeb, 0x40, 0x3e, 0xc4, 0x2d, 0xd7, 0x8e, 0x3c, 0xd4, 0x88, 0xcf, 0xa8, 0x75, 0x34, 0x13, 0xc0, - 0x11, 0x0e, 0x6c, 0x53, 0x54, 0x93, 0xf1, 0x51, 0xaa, 0xc9, 0x34, 0x3f, 0x73, 0x97, 0xd7, 0x94, - 0x25, 0x24, 0xd6, 0x26, 0x0b, 0x52, 0x11, 0x7e, 0x53, 0x9c, 0xf6, 0x30, 0x22, 0x8d, 0x52, 0x24, - 0xfe, 0xd7, 0x38, 0x1b, 0x34, 0x81, 0x88, 0xb3, 0xc1, 0x0d, 0x69, 0xbd, 0xcf, 0x78, 0xf7, 0xc2, - 0xf7, 0xf6, 0xd9, 0xe4, 0xa0, 0xbe, 0x83, 0x26, 0x71, 0x87, 0x36, 0x49, 0xe0, 0xd2, 0x1e, 0x6f, - 0xa8, 0xea, 0x95, 0xbf, 0x3c, 0xbb, 0x35, 0x2f, 0x9a, 0x3c, 0xd1, 0xee, 0x1e, 0xd0, 0xc0, 0xf5, - 0x1d, 0xa3, 0xcf, 0xaa, 0x7e, 0x1d, 0x4d, 0xf0, 0xd9, 0x83, 0x19, 0x72, 0x6a, 0x53, 0xcb, 0xb3, - 0x03, 0x7f, 0x23, 0x6e, 0x2a, 0x39, 0x3f, 0x0f, 0xcc, 0xfe, 0x4d, 0xe9, 0x3a, 0x97, 0xc4, 0x26, - 0xea, 0x5c, 0x92, 0x24, 0x45, 0xf9, 0x0d, 0x8f, 0xca, 0x7a, 0x0b, 0x5b, 0x87, 0x2d, 0x37, 0xa4, - 0xb1, 0xea, 0xd2, 0x73, 0x0c, 0xef, 0xaa, 0xe2, 0x3e, 0x99, 0xb7, 0x54, 0x35, 0xf4, 0x56, 0x23, - 0x3e, 0x15, 0xf7, 0xf7, 0x10, 0x49, 0x51, 0x5a, 0x9b, 0x34, 0x54, 0xb9, 0x25, 0x2f, 0x8a, 0x23, - 0x8a, 0x9d, 0x4e, 0x47, 0x54, 0xf1, 0xeb, 0x22, 0xa2, 0x8a, 0x19, 0xa4, 0x20, 0xbf, 0x54, 0x58, - 0xf6, 0x31, 0xa0, 0x4b, 0x0e, 0x21, 0x66, 0x93, 0xe7, 0xde, 0x9c, 0x14, 0xb7, 0x33, 0x52, 0x5c, - 0x4d, 0xf4, 0xbe, 0xb9, 0x4f, 0xeb, 0x2b, 0x48, 0x2f, 0xde, 0x95, 0xf8, 0x7f, 0x52, 0xe6, 0xc9, - 0x3b, 0x00, 0x4c, 0xc1, 0xc0, 0x14, 0xee, 0x47, 0xb3, 0xe6, 0x6b, 0xbb, 0xd5, 0x32, 0xe2, 0xa5, - 0x4f, 0x4e, 0x5e, 0x62, 0x38, 0x63, 0xc4, 0x78, 0xf6, 0x92, 0x55, 0x53, 0x16, 0xba, 0x28, 0x53, - 0xcc, 0x88, 0xaa, 0xb9, 0x13, 0x57, 0xbb, 0x95, 0x98, 0xad, 0x1d, 0xb8, 0x16, 0x44, 0x05, 0xa4, - 0x9c, 0xb8, 0x6c, 0x3f, 0x22, 0xee, 0xda, 0xea, 0x2e, 0x3a, 0xdb, 0x9f, 0x91, 0xcd, 0x4e, 0x68, - 0x8b, 0x9c, 0xb0, 0x2c, 0x72, 0xc2, 0xa5, 0xc1, 0x9c, 0x70, 0x1f, 0x1c, 0x6c, 0xf5, 0x76, 0xc0, - 0x32, 0xa6, 0x83, 0x58, 0xe2, 0x47, 0xa1, 0xad, 0x3e, 0x40, 0x6f, 0xe1, 0x46, 0x48, 0x5a, 0x1d, - 0x0a, 0xa6, 0xe7, 0xfa, 0x94, 0xdf, 0xc9, 0x13, 0x44, 0x7d, 0x71, 0x68, 0x8e, 0xa9, 0x28, 0xc6, - 0x5c, 0x7c, 0x76, 0xcf, 0xf5, 0x29, 0xd7, 0xe2, 0x3a, 0x9a, 0x4b, 0x60, 0x3b, 0x72, 0x7d, 0x9b, - 0x1c, 0x89, 0xa2, 0x3e, 0x2b, 0x5f, 0x7e, 0xcc, 0xc8, 0xea, 0x3e, 0x9a, 0xe3, 0xd2, 0xf2, 0x6f, - 0x0a, 0x26, 0xed, 0xb5, 0x81, 0x15, 0xf8, 0xb3, 0x9b, 0x2b, 0x89, 0xd8, 0x14, 0x5f, 0x1c, 0xe2, - 0x94, 0xf3, 0x80, 0x2d, 0x1f, 0xf6, 0xda, 0x60, 0xcc, 0xb2, 0xe3, 0x7d, 0x02, 0x1f, 0x1d, 0xd2, - 0x81, 0x9a, 0x28, 0xa2, 0x69, 0x83, 0xc7, 0x45, 0x34, 0x4d, 0x95, 0x5e, 0xf2, 0x87, 0x12, 0xf3, - 0x12, 0x1e, 0xca, 0x5f, 0x91, 0x97, 0xdc, 0x40, 0xaa, 0x0f, 0x47, 0x66, 0xc6, 0x05, 0x78, 0xb5, - 0x9c, 0xf5, 0xe1, 0xe8, 0x61, 0xd2, 0x0b, 0xf6, 0x39, 0x73, 0xc6, 0x13, 0xca, 0xa3, 0x7b, 0x42, - 0x74, 0xa3, 0x91, 0x74, 0x86, 0x0d, 0x74, 0x2e, 0x73, 0xa3, 0xb0, 0xdf, 0x38, 0xb3, 0x9f, 0x9a, - 0xe4, 0x17, 0x26, 0x7c, 0xcc, 0x8f, 0x0c, 0x9a, 0x71, 0xe2, 0x04, 0x66, 0x54, 0x63, 0xd1, 0x46, - 0xb5, 0x64, 0xc6, 0x28, 0xc2, 0x92, 0x19, 0xaa, 0xb4, 0xe4, 0x6f, 0x15, 0x66, 0x49, 0x03, 0x3c, - 0xd2, 0xfd, 0x8a, 0x2c, 0x39, 0x1c, 0x7e, 0x06, 0x89, 0x80, 0x9f, 0xa1, 0xc6, 0xf0, 0x37, 0xff, - 0xa3, 0xa2, 0xd2, 0x5e, 0xe8, 0xa8, 0x9f, 0x2a, 0x68, 0x26, 0xfd, 0xad, 0x68, 0x25, 0xaf, 0x80, - 0x65, 0x3f, 0xcb, 0x68, 0x37, 0x47, 0xe1, 0x92, 0xca, 0x5a, 0xff, 0xf8, 0xaf, 0xff, 0xfe, 0xc5, - 0xd8, 0x8a, 0xae, 0xd7, 0x72, 0xbe, 0xcc, 0x89, 0x6e, 0xc8, 0x12, 0xef, 0x7f, 0xa4, 0xa0, 0xc9, - 0x7e, 0xf3, 0x7b, 0xb5, 0xe0, 0x1d, 0xc9, 0xa1, 0xad, 0x1d, 0xc7, 0x21, 0x51, 0x5c, 0x67, 0x28, - 0x96, 0xf4, 0xc5, 0x3c, 0x14, 0x51, 0xa7, 0x68, 0x52, 0x62, 0x02, 0x6d, 0xaa, 0x3f, 0x53, 0xd0, - 0x74, 0xea, 0x83, 0xcb, 0x72, 0xc1, 0x1b, 0x49, 0x26, 0xed, 0xc6, 0x08, 0x4c, 0x12, 0xcb, 0xdb, - 0x0c, 0xcb, 0xb2, 0xbe, 0x94, 0x87, 0x25, 0xe0, 0x27, 0x4c, 0x36, 0x55, 0x32, 0x34, 0xa9, 0x0f, - 0x2d, 0x45, 0x68, 0x92, 0x4c, 0x85, 0x68, 0x72, 0x3f, 0x6a, 0x0c, 0x45, 0x23, 0x0c, 0x93, 0x40, - 0x93, 0xfa, 0xf8, 0x51, 0x84, 0x26, 0xc9, 0x54, 0x88, 0x26, 0x77, 0x76, 0x1f, 0x8a, 0xc6, 0xe6, - 0x27, 0x4c, 0x8b, 0x3d, 0x1e, 0xb9, 0x6f, 0x7a, 0xc6, 0x2f, 0x72, 0xdf, 0x14, 0x57, 0xa1, 0xfb, - 0xe6, 0x8f, 0xc7, 0x43, 0xdd, 0xf7, 0x48, 0x1c, 0x11, 0x88, 0x7e, 0xa7, 0xa0, 0xb9, 0x64, 0xeb, - 0xc9, 0x51, 0xbd, 0x3d, 0x34, 0x5c, 0x92, 0x4d, 0xaa, 0xb6, 0x31, 0x32, 0xab, 0xc4, 0x77, 0x9b, - 0xe1, 0x5b, 0xd7, 0xd7, 0x86, 0x84, 0x57, 0x87, 0x1f, 0x14, 0x28, 0x7f, 0xaf, 0x20, 0x35, 0x67, - 0xda, 0x2f, 0x82, 0x39, 0xc8, 0x5a, 0x08, 0x73, 0xc8, 0x78, 0x3b, 0x14, 0x26, 0x04, 0xd6, 0xe6, - 0x6d, 0xd3, 0x16, 0x07, 0x05, 0xcc, 0x3f, 0x29, 0xa8, 0x52, 0xf8, 0x81, 0xbe, 0x56, 0x18, 0xf8, - 0xf9, 0x07, 0xb4, 0x77, 0x4f, 0x78, 0x40, 0x02, 0xff, 0x7f, 0x06, 0xbc, 0xaa, 0xdf, 0xcc, 0x4f, - 0x1c, 0xd4, 0x4c, 0x8e, 0x27, 0x71, 0x06, 0x57, 0x7f, 0xa5, 0xa0, 0xd9, 0xec, 0x2c, 0x7f, 0xad, - 0x28, 0x2a, 0xd3, 0x7c, 0x5a, 0x75, 0x34, 0x3e, 0x89, 0xb0, 0xca, 0x10, 0xae, 0xe9, 0xd7, 0x72, - 0x03, 0x98, 0x1d, 0x32, 0x93, 0x19, 0xee, 0xcf, 0x0a, 0xd2, 0x86, 0x4c, 0xf2, 0x45, 0xc6, 0x2d, - 0x3e, 0xa2, 0xbd, 0x77, 0xe2, 0x23, 0x12, 0xfc, 0x7b, 0x0c, 0xfc, 0x1d, 0x7d, 0x23, 0x57, 0xbd, - 0xec, 0xbc, 0xd9, 0xc0, 0xb6, 0x29, 0x87, 0x7e, 0x13, 0x62, 0xa0, 0xdf, 0x43, 0xd3, 0xa9, 0x29, - 0xae, 0x28, 0x19, 0x25, 0x99, 0x0a, 0x93, 0x51, 0xde, 0x80, 0xa5, 0x7e, 0xa2, 0x20, 0x6d, 0xc8, - 0x74, 0x55, 0xa4, 0xa9, 0xe2, 0x23, 0x85, 0x9a, 0x3a, 0x7e, 0x48, 0x52, 0x7f, 0xac, 0xa0, 0x0b, - 0x45, 0x13, 0x52, 0xb5, 0xb0, 0xfc, 0xe4, 0xf2, 0x6b, 0xef, 0x9c, 0x8c, 0x5f, 0x62, 0x70, 0xd1, - 0x6c, 0x76, 0xc8, 0x29, 0xf4, 0xea, 0x34, 0x5f, 0xb1, 0x57, 0xe7, 0x77, 0xcb, 0xd1, 0x53, 0xd9, - 0x4e, 0xf9, 0xda, 0x50, 0xdb, 0x1d, 0xff, 0x54, 0x41, 0x3b, 0x17, 0x3d, 0x95, 0x6d, 0xe5, 0xae, - 0x15, 0x2a, 0x28, 0xc5, 0xa7, 0x55, 0x47, 0xe3, 0x8b, 0x9f, 0xd2, 0xc6, 0x3f, 0x7a, 0xf5, 0x74, - 0x5d, 0xa9, 0xc3, 0xe7, 0x2f, 0x16, 0x94, 0x2f, 0x5f, 0x2c, 0x28, 0xff, 0x7c, 0xb1, 0xa0, 0xfc, - 0xfc, 0xe5, 0xc2, 0xa9, 0x2f, 0x5f, 0x2e, 0x9c, 0xfa, 0xdb, 0xcb, 0x85, 0x53, 0xdf, 0x7d, 0xdf, - 0x71, 0x69, 0xb3, 0xd3, 0xa8, 0x5a, 0xc4, 0xab, 0xed, 0xc6, 0x57, 0xdf, 0xc7, 0x8d, 0xb0, 0x1f, - 0x1f, 0xb7, 0x2c, 0x12, 0x40, 0x72, 0xd9, 0xc4, 0xae, 0x5f, 0xf3, 0x88, 0xdd, 0x69, 0x41, 0x28, - 0x82, 0x87, 0xfd, 0xcb, 0xb4, 0x31, 0xc1, 0xbe, 0xbd, 0xdd, 0xf9, 0x6f, 0x00, 0x00, 0x00, 0xff, - 0xff, 0xc1, 0x26, 0xc0, 0x58, 0x65, 0x1e, 0x00, 0x00, + // 2117 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x59, 0xcd, 0x6f, 0x1c, 0x49, + 0x15, 0x4f, 0x7b, 0xc6, 0x4e, 0x5c, 0x63, 0xc7, 0xa4, 0xd7, 0x49, 0x26, 0x9d, 0xc4, 0x8e, 0xdb, + 0xf9, 0xf0, 0x3a, 0x49, 0x4f, 0xec, 0xc0, 0x2e, 0x6b, 0x09, 0xa4, 0x8c, 0x1d, 0x84, 0xd9, 0x78, + 0x37, 0x6a, 0x27, 0xbb, 0x12, 0x97, 0xa6, 0xa6, 0xfb, 0xa5, 0xa7, 0xf1, 0x74, 0xd7, 0xd0, 0x5d, + 0x33, 0xc6, 0x07, 0xa4, 0x65, 0x6f, 0x2c, 0x87, 0x45, 0xe2, 0x80, 0x40, 0x82, 0x0b, 0x5c, 0x57, + 0x8a, 0x44, 0x2e, 0x70, 0x47, 0x5a, 0xed, 0x29, 0x82, 0x0b, 0x42, 0x28, 0x82, 0x04, 0x29, 0x7f, + 0x06, 0xa8, 0xab, 0xaa, 0x6b, 0xba, 0x7b, 0xba, 0xc7, 0x93, 0x60, 0xe5, 0x62, 0x4d, 0xbd, 0x7a, + 0x55, 0xf5, 0x7b, 0xdf, 0xef, 0xb5, 0xd1, 0x45, 0x2f, 0xf8, 0x21, 0xd8, 0xd4, 0xeb, 0x43, 0xa3, + 0x0b, 0xae, 0x7b, 0xd0, 0xe8, 0xaf, 0x35, 0xfc, 0xc8, 0x8d, 0x8c, 0x6e, 0x48, 0x28, 0x51, 0x55, + 0xb9, 0x6d, 0xb0, 0x6d, 0xa3, 0xbf, 0xa6, 0xcd, 0xbb, 0xc4, 0x25, 0x6c, 0xbb, 0x11, 0xff, 0xe2, + 0x9c, 0xda, 0x05, 0x97, 0x10, 0xb7, 0x03, 0x0d, 0xdc, 0xf5, 0x1a, 0x38, 0x08, 0x08, 0xc5, 0xd4, + 0x23, 0x81, 0xb8, 0x47, 0x3b, 0x27, 0x76, 0xd9, 0xaa, 0xd5, 0x7b, 0xd4, 0xc0, 0xc1, 0x81, 0xd8, + 0x3a, 0x85, 0x7d, 0x2f, 0x20, 0x0d, 0xf6, 0x57, 0x90, 0x16, 0x6c, 0x12, 0xf9, 0x24, 0x6a, 0xb4, + 0x70, 0x04, 0x8d, 0xfe, 0x5a, 0x0b, 0x28, 0x5e, 0x6b, 0xd8, 0xc4, 0x0b, 0xc4, 0xfe, 0x59, 0xb1, + 0xef, 0x47, 0xae, 0xc0, 0x9b, 0x3c, 0xc3, 0x37, 0x2c, 0x8e, 0x8e, 0x2f, 0x92, 0x3b, 0x0b, 0x04, + 0xa5, 0x07, 0x5d, 0x48, 0xf6, 0x17, 0x0b, 0xf6, 0xbb, 0x38, 0xc4, 0x7e, 0xc2, 0xb0, 0x5c, 0xc0, + 0x10, 0x62, 0x0a, 0x56, 0xc7, 0xf3, 0x3d, 0xca, 0x99, 0xf4, 0x2f, 0x14, 0x74, 0x7e, 0x27, 0x72, + 0x77, 0x81, 0x7e, 0x18, 0xda, 0x6d, 0x88, 0x68, 0x88, 0x29, 0x09, 0xef, 0x38, 0x4e, 0x08, 0x51, + 0x04, 0x91, 0x7a, 0x06, 0x4d, 0x45, 0x10, 0x38, 0x10, 0xd6, 0x95, 0x4b, 0xca, 0xca, 0xb4, 0x29, + 0x56, 0xaa, 0x8e, 0x66, 0x48, 0xea, 0x40, 0x7d, 0x82, 0xed, 0x66, 0x68, 0xea, 0x22, 0xaa, 0x01, + 0x6d, 0x5b, 0x98, 0x5f, 0x56, 0xaf, 0x30, 0x16, 0x04, 0xb4, 0x2d, 0xae, 0xdf, 0x58, 0xfb, 0xf4, + 0xe5, 0xe3, 0x55, 0x71, 0xe3, 0x67, 0x2f, 0x1f, 0xaf, 0x2e, 0x71, 0x9c, 0x23, 0xf0, 0xe8, 0x57, + 0xd0, 0xf2, 0x88, 0x6d, 0x13, 0xa2, 0x2e, 0x09, 0x22, 0xd0, 0xff, 0xa4, 0xa0, 0xaf, 0xed, 0x44, + 0xee, 0x47, 0xb8, 0x13, 0x01, 0xdd, 0x24, 0xc1, 0x23, 0x2f, 0xf4, 0xd5, 0x79, 0x34, 0x19, 0x90, + 0xc0, 0x06, 0x26, 0x4a, 0xd5, 0xe4, 0x8b, 0x23, 0x91, 0x44, 0xbd, 0x80, 0xa6, 0x23, 0xcf, 0x0d, + 0x30, 0xed, 0x85, 0x50, 0xaf, 0xb2, 0xed, 0x01, 0x61, 0xe3, 0x46, 0x2c, 0x67, 0xe6, 0xc6, 0x58, + 0xda, 0x33, 0x52, 0xda, 0x0c, 0x4c, 0x5d, 0x43, 0xf5, 0x3c, 0x4d, 0xca, 0xf5, 0x4c, 0x41, 0x33, + 0x4c, 0xfe, 0xc0, 0x79, 0x40, 0xee, 0xd2, 0x76, 0xa9, 0x7d, 0xce, 0xa1, 0x13, 0x31, 0x62, 0x07, + 0x22, 0x2a, 0x24, 0x3a, 0x0e, 0xb4, 0xbd, 0x05, 0x11, 0x55, 0xdf, 0x45, 0x53, 0xd8, 0x27, 0xbd, + 0x80, 0x32, 0x39, 0x6a, 0xeb, 0xe7, 0x0c, 0xe1, 0x77, 0xb1, 0xf7, 0x1a, 0xc2, 0x7b, 0x8d, 0x4d, + 0xe2, 0x05, 0xcd, 0xea, 0x97, 0xcf, 0x16, 0x8f, 0x99, 0x82, 0x5d, 0xfd, 0x36, 0x42, 0xad, 0xd0, + 0x73, 0x5c, 0xb0, 0x1e, 0x01, 0x97, 0x72, 0x8c, 0xc3, 0xd3, 0xfc, 0xc8, 0x77, 0x00, 0x36, 0xf4, + 0x9c, 0xb9, 0xd5, 0x94, 0xb9, 0x85, 0x3c, 0xfa, 0x19, 0x34, 0x9f, 0x5e, 0x4b, 0xc1, 0x7f, 0x8c, + 0xe6, 0x76, 0x22, 0xd7, 0x84, 0x1f, 0xf5, 0x20, 0xa2, 0x4d, 0x4c, 0xed, 0xf6, 0x90, 0xe1, 0x94, + 0x02, 0xc3, 0xcd, 0xa3, 0x49, 0x07, 0x02, 0xe2, 0x0b, 0x1d, 0xf0, 0xc5, 0xc6, 0xf5, 0x42, 0x7b, + 0x9c, 0x96, 0x70, 0xd2, 0xcf, 0xe8, 0xe7, 0xd0, 0xd9, 0x1c, 0x49, 0x82, 0xfa, 0xa7, 0xc2, 0x50, + 0x09, 0x23, 0x71, 0x54, 0xc5, 0x4e, 0x76, 0x05, 0x9d, 0xa4, 0x64, 0x0f, 0x02, 0xcb, 0x26, 0x01, + 0x0d, 0xb1, 0x9d, 0x18, 0x65, 0x96, 0x51, 0x37, 0x05, 0x51, 0xbd, 0x88, 0x62, 0xa7, 0xb2, 0x62, + 0xcf, 0x81, 0x50, 0xb8, 0xd9, 0x34, 0xd0, 0xf6, 0x2e, 0x23, 0x0c, 0x49, 0x5c, 0x2d, 0x90, 0x38, + 0xe3, 0x89, 0x93, 0x79, 0x4f, 0x3c, 0x4c, 0xf2, 0xb4, 0x28, 0x42, 0xf2, 0x34, 0x49, 0x4a, 0xfe, + 0xb3, 0x0a, 0x93, 0x7c, 0x0b, 0xba, 0x24, 0xf2, 0xe8, 0x66, 0x07, 0x7b, 0x3e, 0x0b, 0x92, 0x3e, + 0x04, 0xd4, 0x4a, 0xcb, 0x8f, 0x18, 0xe9, 0x03, 0xa6, 0x84, 0x25, 0x34, 0xd3, 0xea, 0x10, 0x7b, + 0xcf, 0x6a, 0x83, 0xe7, 0xb6, 0xb9, 0x0a, 0xaa, 0x66, 0x8d, 0xd1, 0xbe, 0xcb, 0x48, 0x05, 0x7a, + 0xaa, 0x14, 0xe9, 0xe9, 0x1b, 0xd2, 0x85, 0x99, 0x0a, 0x9a, 0x17, 0x63, 0x57, 0xfb, 0xc7, 0xb3, + 0xc5, 0xd3, 0xdc, 0x19, 0x23, 0x67, 0xcf, 0xf0, 0x48, 0xc3, 0xc7, 0xb4, 0x6d, 0x6c, 0x07, 0x54, + 0x3a, 0xf0, 0x35, 0x34, 0x07, 0xb4, 0x0d, 0x21, 0xf4, 0x7c, 0x4b, 0x44, 0x0d, 0xd7, 0xd0, 0xc9, + 0x84, 0xbc, 0xcb, 0xa3, 0xe7, 0x1a, 0x9a, 0x13, 0x89, 0x39, 0x04, 0x1b, 0xbc, 0x3e, 0x84, 0xf5, + 0x29, 0xce, 0xc8, 0xc9, 0xa6, 0xa0, 0x0e, 0x59, 0xe4, 0x78, 0x81, 0x45, 0x54, 0x54, 0x75, 0x30, + 0xc5, 0xf5, 0x13, 0x6c, 0x8f, 0xfd, 0xde, 0xf8, 0xde, 0x57, 0x4f, 0x6e, 0x9e, 0x4f, 0x0a, 0x14, + 0x8f, 0x99, 0xbb, 0x02, 0x02, 0x53, 0xe6, 0x21, 0x66, 0x4a, 0xeb, 0x5d, 0x98, 0x29, 0x4d, 0x92, + 0x66, 0xfa, 0x7c, 0x82, 0xa5, 0xc1, 0x8f, 0x3d, 0xda, 0x76, 0x42, 0xbc, 0x7f, 0x74, 0x76, 0x5a, + 0x44, 0xb5, 0x56, 0xec, 0x10, 0xe2, 0x8e, 0x0a, 0xbf, 0x83, 0x91, 0x3e, 0x28, 0x71, 0xf8, 0x6a, + 0x91, 0x21, 0xf3, 0xfa, 0x9b, 0x1c, 0xd6, 0xdf, 0xc6, 0xfb, 0xaf, 0xa3, 0xab, 0x41, 0x72, 0xcd, + 0x08, 0x2f, 0x92, 0x6b, 0x86, 0x26, 0xb5, 0xf5, 0x62, 0x02, 0x9d, 0xde, 0x89, 0xdc, 0xbb, 0xe6, + 0xe6, 0xfa, 0xad, 0x2d, 0xe8, 0x76, 0xc8, 0x01, 0x38, 0x47, 0xa7, 0xb2, 0x25, 0x34, 0x23, 0x7c, + 0x8a, 0x67, 0x24, 0xee, 0xd8, 0x35, 0x4e, 0xdb, 0x8a, 0x49, 0xe3, 0x2a, 0x4d, 0x45, 0xd5, 0x00, + 0xfb, 0x49, 0x74, 0xb3, 0xdf, 0xac, 0x0e, 0x1c, 0xf8, 0x2d, 0xd2, 0x11, 0x8e, 0x2a, 0x56, 0xaa, + 0x86, 0x4e, 0x38, 0x60, 0x7b, 0x3e, 0xee, 0x44, 0xcc, 0x39, 0xab, 0xa6, 0x5c, 0x0f, 0x29, 0xff, + 0x44, 0x81, 0xf2, 0xef, 0xbf, 0x8e, 0xf2, 0xcf, 0x4b, 0xe5, 0x0f, 0xeb, 0x52, 0x5f, 0x44, 0x17, + 0x0b, 0x37, 0xa4, 0x19, 0x7e, 0x82, 0xd4, 0x38, 0xed, 0xe0, 0xc0, 0x86, 0xce, 0xa0, 0xd0, 0xc5, + 0xba, 0x09, 0x71, 0x10, 0x61, 0x3b, 0x6e, 0xd3, 0x2c, 0xcf, 0x11, 0x56, 0x98, 0x4d, 0x51, 0xb7, + 0x9d, 0x54, 0x3d, 0x9c, 0x48, 0xd7, 0xc3, 0x8d, 0x95, 0x5c, 0xed, 0xa9, 0x0f, 0x52, 0x5e, 0xf6, + 0x21, 0xfd, 0x02, 0xd2, 0x86, 0xa9, 0x12, 0xdc, 0xbf, 0x15, 0x06, 0x7f, 0xb7, 0xd7, 0xf2, 0x3d, + 0xda, 0xc4, 0xce, 0x6e, 0x92, 0x5a, 0xef, 0xf6, 0x3d, 0x07, 0x62, 0x57, 0x78, 0x88, 0x8e, 0x47, + 0xbd, 0x56, 0xdc, 0x79, 0x31, 0x84, 0xb5, 0xf5, 0x79, 0x83, 0xf7, 0x92, 0x46, 0xd2, 0x4b, 0x1a, + 0x77, 0x82, 0x83, 0xe6, 0x95, 0xaf, 0x9e, 0xdc, 0x5c, 0x1a, 0x6e, 0x56, 0xa5, 0x76, 0x59, 0xca, + 0x77, 0xcc, 0xe4, 0xae, 0x6c, 0x5e, 0x9f, 0xc8, 0xe5, 0xf5, 0x94, 0xd8, 0x95, 0x8c, 0xd8, 0xb7, + 0x73, 0x62, 0x2f, 0x0f, 0x4a, 0x6e, 0xa9, 0x04, 0xfa, 0x35, 0x74, 0x65, 0x24, 0x83, 0x54, 0xc6, + 0x6f, 0x2a, 0x2c, 0x60, 0x78, 0xab, 0xf2, 0xb0, 0xeb, 0x60, 0xfa, 0x2a, 0x01, 0xd3, 0x67, 0xc7, + 0x04, 0x87, 0x08, 0x18, 0x4e, 0x2b, 0x8e, 0xa9, 0xca, 0x70, 0x4c, 0x7d, 0x0b, 0x1d, 0xf7, 0xc1, + 0x6f, 0x41, 0x18, 0xd5, 0xab, 0x97, 0x2a, 0x2b, 0xb5, 0xf5, 0x65, 0xa3, 0x40, 0xa5, 0x4d, 0xd6, + 0x81, 0x7c, 0x84, 0x3b, 0x9e, 0x13, 0x7b, 0xa8, 0x99, 0x9c, 0x51, 0x9b, 0x68, 0x36, 0x84, 0x7d, + 0x1c, 0x3a, 0x96, 0xa8, 0x26, 0x93, 0xe3, 0x54, 0x93, 0x19, 0x7e, 0xe6, 0x0e, 0xaf, 0x29, 0x4b, + 0x48, 0xac, 0x2d, 0x16, 0xa4, 0x22, 0xfc, 0x6a, 0x9c, 0xf6, 0x20, 0x26, 0x8d, 0x53, 0x24, 0xfe, + 0xdf, 0x38, 0x1b, 0x36, 0x81, 0x88, 0xb3, 0xe1, 0x0d, 0x69, 0xbd, 0x2f, 0x78, 0xf7, 0xc2, 0xf7, + 0xee, 0xb3, 0xc9, 0x41, 0x7d, 0x07, 0x4d, 0xe3, 0x1e, 0x6d, 0x93, 0xd0, 0xa3, 0x07, 0xbc, 0xa1, + 0x6a, 0xd6, 0xff, 0xfa, 0xe4, 0xe6, 0xbc, 0x68, 0xf2, 0x44, 0xbb, 0xbb, 0x4b, 0x43, 0x2f, 0x70, + 0xcd, 0x01, 0xab, 0xfa, 0x4d, 0x34, 0xc5, 0x67, 0x0f, 0x66, 0xc8, 0xda, 0xba, 0x56, 0x64, 0x07, + 0xfe, 0x46, 0xd2, 0x54, 0x72, 0x7e, 0x1e, 0x98, 0x83, 0x9b, 0xb2, 0x75, 0x2e, 0x8d, 0x4d, 0xd4, + 0xb9, 0x34, 0x49, 0x8a, 0xf2, 0x5b, 0x1e, 0x95, 0xcd, 0x0e, 0xb6, 0xf7, 0x3a, 0x5e, 0x44, 0x13, + 0xd5, 0x65, 0xe7, 0x18, 0xde, 0x55, 0x25, 0x7d, 0x32, 0x6f, 0xa9, 0x1a, 0xe8, 0xad, 0x56, 0x72, + 0x2a, 0xe9, 0xef, 0x21, 0x96, 0xa2, 0xb2, 0x32, 0x6d, 0xaa, 0x72, 0x4b, 0x5e, 0x94, 0x44, 0x14, + 0x3b, 0x9d, 0x8d, 0xa8, 0xf2, 0xd7, 0x45, 0x44, 0x95, 0x33, 0x48, 0x41, 0x7e, 0xa5, 0xb0, 0xec, + 0x63, 0x42, 0x9f, 0xec, 0x41, 0xc2, 0x26, 0xcf, 0x1d, 0x9d, 0x14, 0xb7, 0x72, 0x52, 0x5c, 0x4a, + 0xf5, 0xbe, 0x85, 0x4f, 0xeb, 0x97, 0x91, 0x5e, 0xbe, 0x2b, 0xf1, 0xff, 0xb1, 0xc2, 0x93, 0x77, + 0x08, 0x98, 0x82, 0x89, 0x29, 0xdc, 0x8b, 0x67, 0xcd, 0xd7, 0x76, 0xab, 0x65, 0xc4, 0x4b, 0x9f, + 0x9c, 0xbc, 0xc4, 0x70, 0xc6, 0x88, 0xc9, 0xec, 0x25, 0xab, 0xa6, 0x2c, 0x74, 0x71, 0xa6, 0x98, + 0x15, 0x55, 0x73, 0x2b, 0xa9, 0x76, 0x97, 0x13, 0xb6, 0x6e, 0xe8, 0xd9, 0x10, 0x17, 0x90, 0x6a, + 0xea, 0xb2, 0xfb, 0x31, 0x71, 0xdb, 0x51, 0xb7, 0xd1, 0xc9, 0xc1, 0x8c, 0x6c, 0xf5, 0x22, 0x47, + 0xe4, 0x84, 0x65, 0x91, 0x13, 0xce, 0x0f, 0xe7, 0x84, 0x7b, 0xe0, 0x62, 0xfb, 0x60, 0x0b, 0x6c, + 0x73, 0x26, 0x4c, 0x24, 0x7e, 0x18, 0x39, 0xea, 0x87, 0xe8, 0x2d, 0xdc, 0x8a, 0x48, 0xa7, 0x47, + 0xc1, 0xf2, 0xbd, 0x80, 0xf2, 0x3b, 0x79, 0x82, 0x68, 0x2e, 0x8e, 0xcc, 0x31, 0x75, 0xc5, 0x3c, + 0x95, 0x9c, 0xdd, 0xf1, 0x02, 0xca, 0xb5, 0xb8, 0x8a, 0x4e, 0xa5, 0xb0, 0xed, 0x7b, 0x81, 0x43, + 0xf6, 0x45, 0x51, 0x9f, 0x93, 0x2f, 0x7f, 0xcc, 0xc8, 0xbc, 0xd1, 0xcf, 0x86, 0x55, 0xaa, 0xe4, + 0x65, 0xcd, 0x93, 0x94, 0xbc, 0x2c, 0x55, 0xda, 0xf4, 0xe9, 0x04, 0xb3, 0x29, 0x0f, 0xbc, 0x37, + 0x64, 0xd3, 0xeb, 0x48, 0x0d, 0x60, 0xdf, 0xca, 0x19, 0x8c, 0xd7, 0xb6, 0xb9, 0x00, 0xf6, 0x1f, + 0xa4, 0x6d, 0x76, 0x9f, 0x33, 0xe7, 0xec, 0x56, 0x1d, 0xdf, 0x6e, 0xf1, 0x8d, 0x66, 0xda, 0x74, + 0x6b, 0xe8, 0x74, 0xee, 0x46, 0xa1, 0xed, 0x49, 0xa6, 0x6d, 0x35, 0xcd, 0x3f, 0x8e, 0xc2, 0x73, + 0xba, 0x13, 0x0a, 0xcf, 0x51, 0xa5, 0xc2, 0x7f, 0xa7, 0x30, 0x85, 0x9b, 0xe0, 0x93, 0xfe, 0x1b, + 0x52, 0xf8, 0x68, 0xf8, 0x39, 0x24, 0x02, 0x7e, 0x8e, 0x9a, 0xc0, 0x5f, 0xff, 0xaf, 0x8a, 0x2a, + 0x3b, 0x91, 0xab, 0x7e, 0xae, 0xa0, 0xd9, 0xec, 0x07, 0x98, 0xcb, 0x45, 0x55, 0x21, 0xff, 0xad, + 0x43, 0xbb, 0x31, 0x0e, 0x97, 0x54, 0xd6, 0xea, 0xa7, 0x7f, 0xfb, 0xcf, 0x2f, 0x27, 0x2e, 0xeb, + 0x7a, 0xa3, 0xe0, 0x73, 0x97, 0x68, 0x31, 0x6c, 0xf1, 0xfe, 0x27, 0x0a, 0x9a, 0x1e, 0x74, 0x94, + 0x97, 0x4a, 0xde, 0x91, 0x1c, 0xda, 0xca, 0x61, 0x1c, 0x12, 0xc5, 0x35, 0x86, 0x62, 0x49, 0x5f, + 0x2c, 0x42, 0x11, 0xb7, 0x5f, 0x16, 0x25, 0x16, 0xd0, 0xb6, 0xfa, 0x73, 0x05, 0xcd, 0x64, 0xbe, + 0x62, 0x2c, 0x97, 0xbc, 0x91, 0x66, 0xd2, 0xae, 0x8f, 0xc1, 0x24, 0xb1, 0xbc, 0xcd, 0xb0, 0x2c, + 0xeb, 0x4b, 0x45, 0x58, 0x42, 0x7e, 0xc2, 0x62, 0xa3, 0x1a, 0x43, 0x93, 0xf9, 0x7a, 0x51, 0x86, + 0x26, 0xcd, 0x54, 0x8a, 0xa6, 0xf0, 0x4b, 0xc1, 0x48, 0x34, 0xc2, 0x30, 0x29, 0x34, 0x99, 0x2f, + 0x0a, 0x65, 0x68, 0xd2, 0x4c, 0xa5, 0x68, 0x0a, 0x07, 0xe2, 0x91, 0x68, 0x1c, 0x7e, 0xc2, 0xb2, + 0xd9, 0xe3, 0xb1, 0xfb, 0x66, 0x07, 0xe7, 0x32, 0xf7, 0xcd, 0x70, 0x95, 0xba, 0x6f, 0xf1, 0xcc, + 0x39, 0xd2, 0x7d, 0xf7, 0xc5, 0x11, 0x81, 0xe8, 0xf7, 0x0a, 0x3a, 0x95, 0xee, 0xe7, 0x38, 0xaa, + 0xb7, 0x47, 0x86, 0x4b, 0xba, 0xf3, 0xd3, 0xd6, 0xc6, 0x66, 0x95, 0xf8, 0x6e, 0x31, 0x7c, 0xab, + 0xfa, 0xca, 0x88, 0xf0, 0xea, 0xf1, 0x83, 0x02, 0xe5, 0x1f, 0x14, 0xa4, 0x16, 0x8c, 0xd0, 0x65, + 0x30, 0x87, 0x59, 0x4b, 0x61, 0x8e, 0x98, 0x19, 0x47, 0xc2, 0x84, 0xd0, 0x5e, 0xbf, 0x65, 0x39, + 0xe2, 0xa0, 0x80, 0xf9, 0x67, 0x05, 0xd5, 0x4b, 0xbf, 0x7a, 0x37, 0x4a, 0x03, 0xbf, 0xf8, 0x80, + 0xf6, 0xee, 0x2b, 0x1e, 0x90, 0xc0, 0xbf, 0xce, 0x80, 0x1b, 0xfa, 0x8d, 0xe2, 0xc4, 0x41, 0xad, + 0x74, 0xcf, 0x9f, 0x64, 0x70, 0xf5, 0xd7, 0x0a, 0x9a, 0xcb, 0x0f, 0xc8, 0x57, 0xcb, 0xa2, 0x32, + 0xcb, 0xa7, 0x19, 0xe3, 0xf1, 0x49, 0x84, 0x06, 0x43, 0xb8, 0xa2, 0x5f, 0x2d, 0x0c, 0x60, 0x76, + 0xc8, 0x4a, 0x67, 0xb8, 0xbf, 0x28, 0x48, 0x1b, 0x31, 0x1e, 0x97, 0x19, 0xb7, 0xfc, 0x88, 0xf6, + 0xde, 0x2b, 0x1f, 0x91, 0xe0, 0xdf, 0x63, 0xe0, 0x6f, 0xeb, 0x6b, 0x85, 0xea, 0x65, 0xe7, 0xad, + 0x16, 0x76, 0x2c, 0x39, 0x49, 0x5b, 0x90, 0x00, 0xfd, 0x01, 0x9a, 0xc9, 0x8c, 0x46, 0x65, 0xc9, + 0x28, 0xcd, 0x54, 0x9a, 0x8c, 0x8a, 0xa6, 0x16, 0xf5, 0x33, 0x05, 0x69, 0x23, 0x46, 0x96, 0x32, + 0x4d, 0x95, 0x1f, 0x29, 0xd5, 0xd4, 0xe1, 0x93, 0x87, 0xfa, 0x53, 0x05, 0x9d, 0x2d, 0x1b, 0x3b, + 0x8c, 0xd2, 0xf2, 0x53, 0xc8, 0xaf, 0xbd, 0xf3, 0x6a, 0xfc, 0x12, 0x83, 0x87, 0xe6, 0xf2, 0x93, + 0x43, 0xa9, 0x57, 0x67, 0xf9, 0xca, 0xbd, 0xba, 0xb8, 0xa9, 0x8d, 0x9f, 0xca, 0x37, 0xb4, 0x57, + 0x47, 0xda, 0xee, 0xf0, 0xa7, 0x4a, 0xda, 0xb9, 0xf8, 0xa9, 0x7c, 0x2b, 0x77, 0xb5, 0x54, 0x41, + 0x19, 0x3e, 0xcd, 0x18, 0x8f, 0x2f, 0x79, 0x4a, 0x9b, 0xfc, 0xe4, 0xe5, 0xe3, 0x55, 0xa5, 0x09, + 0x5f, 0x3e, 0x5f, 0x50, 0x9e, 0x3e, 0x5f, 0x50, 0xfe, 0xf5, 0x7c, 0x41, 0xf9, 0xc5, 0x8b, 0x85, + 0x63, 0x4f, 0x5f, 0x2c, 0x1c, 0xfb, 0xfb, 0x8b, 0x85, 0x63, 0xdf, 0x7f, 0xdf, 0xf5, 0x68, 0xbb, + 0xd7, 0x32, 0x6c, 0xe2, 0x37, 0xb6, 0x93, 0xab, 0xef, 0xe1, 0x56, 0x34, 0x88, 0x8f, 0x9b, 0x36, + 0x09, 0x21, 0xbd, 0x6c, 0x63, 0x2f, 0x68, 0xf8, 0xc4, 0xe9, 0x75, 0x20, 0x12, 0xc1, 0xc3, 0xfe, + 0x0f, 0xd9, 0x9a, 0x62, 0x1f, 0xb4, 0x6e, 0xff, 0x2f, 0x00, 0x00, 0xff, 0xff, 0x47, 0x0f, 0xda, + 0x85, 0x93, 0x1d, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -2138,13 +2111,13 @@ type MsgClient interface { // RevokeEthereumBlacklist removes Ethereum addresses from the peggy // blacklist. RevokeEthereumBlacklist(ctx context.Context, in *MsgRevokeEthereumBlacklist, opts ...grpc.CallOption) (*MsgRevokeEthereumBlacklistResponse, error) - // CreateRateLimit imposes a (notional) limit on withdrawals for a particular - // Peggy asset + // CreateRateLimit imposes a (notional) limit on withdrawals for a particular + // Peggy asset CreateRateLimit(ctx context.Context, in *MsgCreateRateLimit, opts ...grpc.CallOption) (*MsgCreateRateLimitResponse, error) - // UpdateRateLimit updates the rate limit's metadata for a particular Peggy - // asset + // UpdateRateLimit updates the rate limit's metadata for a particular Peggy + // asset UpdateRateLimit(ctx context.Context, in *MsgUpdateRateLimit, opts ...grpc.CallOption) (*MsgUpdateRateLimitResponse, error) - // RemoveRateLimit lifts the rate limit for a particular Peggy asset + // RemoveRateLimit lifts the rate limit for a particular Peggy asset RemoveRateLimit(ctx context.Context, in *MsgRemoveRateLimit, opts ...grpc.CallOption) (*MsgRemoveRateLimitResponse, error) } @@ -2328,13 +2301,13 @@ type MsgServer interface { // RevokeEthereumBlacklist removes Ethereum addresses from the peggy // blacklist. RevokeEthereumBlacklist(context.Context, *MsgRevokeEthereumBlacklist) (*MsgRevokeEthereumBlacklistResponse, error) - // CreateRateLimit imposes a (notional) limit on withdrawals for a particular - // Peggy asset + // CreateRateLimit imposes a (notional) limit on withdrawals for a particular + // Peggy asset CreateRateLimit(context.Context, *MsgCreateRateLimit) (*MsgCreateRateLimitResponse, error) - // UpdateRateLimit updates the rate limit's metadata for a particular Peggy - // asset + // UpdateRateLimit updates the rate limit's metadata for a particular Peggy + // asset UpdateRateLimit(context.Context, *MsgUpdateRateLimit) (*MsgUpdateRateLimitResponse, error) - // RemoveRateLimit lifts the rate limit for a particular Peggy asset + // RemoveRateLimit lifts the rate limit for a particular Peggy asset RemoveRateLimit(context.Context, *MsgRemoveRateLimit) (*MsgRemoveRateLimitResponse, error) } @@ -3847,11 +3820,6 @@ func (m *MsgCreateRateLimit) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - if m.TokenOracleType != 0 { - i = encodeVarintMsgs(dAtA, i, uint64(m.TokenOracleType)) - i-- - dAtA[i] = 0x40 - } if m.RateLimitWindow != 0 { i = encodeVarintMsgs(dAtA, i, uint64(m.RateLimitWindow)) i-- @@ -3949,11 +3917,6 @@ func (m *MsgUpdateRateLimit) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - if m.NewTokenOracleType != 0 { - i = encodeVarintMsgs(dAtA, i, uint64(m.NewTokenOracleType)) - i-- - dAtA[i] = 0x30 - } if m.NewRateLimitWindow != 0 { i = encodeVarintMsgs(dAtA, i, uint64(m.NewRateLimitWindow)) i-- @@ -4577,9 +4540,6 @@ func (m *MsgCreateRateLimit) Size() (n int) { if m.RateLimitWindow != 0 { n += 1 + sovMsgs(uint64(m.RateLimitWindow)) } - if m.TokenOracleType != 0 { - n += 1 + sovMsgs(uint64(m.TokenOracleType)) - } return n } @@ -4615,9 +4575,6 @@ func (m *MsgUpdateRateLimit) Size() (n int) { if m.NewRateLimitWindow != 0 { n += 1 + sovMsgs(uint64(m.NewRateLimitWindow)) } - if m.NewTokenOracleType != 0 { - n += 1 + sovMsgs(uint64(m.NewTokenOracleType)) - } return n } @@ -7948,25 +7905,6 @@ func (m *MsgCreateRateLimit) Unmarshal(dAtA []byte) error { break } } - case 8: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenOracleType", wireType) - } - m.TokenOracleType = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowMsgs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.TokenOracleType |= types2.OracleType(b&0x7F) << shift - if b < 0x80 { - break - } - } default: iNdEx = preIndex skippy, err := skipMsgs(dAtA[iNdEx:]) @@ -8216,25 +8154,6 @@ func (m *MsgUpdateRateLimit) Unmarshal(dAtA []byte) error { break } } - case 6: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field NewTokenOracleType", wireType) - } - m.NewTokenOracleType = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowMsgs - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.NewTokenOracleType |= types2.OracleType(b&0x7F) << shift - if b < 0x80 { - break - } - } default: iNdEx = preIndex skippy, err := skipMsgs(dAtA[iNdEx:]) diff --git a/chain/peggy/types/rate_limit.pb.go b/chain/peggy/types/rate_limit.pb.go index 90a38b6c6..9b0815c2f 100644 --- a/chain/peggy/types/rate_limit.pb.go +++ b/chain/peggy/types/rate_limit.pb.go @@ -6,7 +6,6 @@ package types import ( cosmossdk_io_math "cosmossdk.io/math" fmt "fmt" - types "github.com/InjectiveLabs/sdk-go/chain/oracle/types" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" @@ -30,8 +29,7 @@ type RateLimit struct { TokenAddress string `protobuf:"bytes,1,opt,name=token_address,json=tokenAddress,proto3" json:"token_address,omitempty"` // decimals of the ERC20 token TokenDecimals uint32 `protobuf:"varint,2,opt,name=token_decimals,json=tokenDecimals,proto3" json:"token_decimals,omitempty"` - // unique ID used to obtain the notional USD value of the ERC20 token from - // oracle + // a Pyth-specific ID used to obtain USD price of the ERC20 token TokenPriceId string `protobuf:"bytes,3,opt,name=token_price_id,json=tokenPriceId,proto3" json:"token_price_id,omitempty"` // length of the sliding window in which inbound (outbound) traffic is // measured @@ -42,9 +40,6 @@ type RateLimit struct { AbsoluteMintLimit cosmossdk_io_math.Int `protobuf:"bytes,6,opt,name=absolute_mint_limit,json=absoluteMintLimit,proto3,customtype=cosmossdk.io/math.Int" json:"absolute_mint_limit"` // Deprecated: Do not use. // transfers that occurred within the sliding window Transfers []*BridgeTransfer `protobuf:"bytes,7,rep,name=transfers,proto3" json:"transfers,omitempty"` // Deprecated: Do not use. - // oracle type used to obtain the USD price of the ERC20 token (in relation - // with token_price_id) - TokenOracleType types.OracleType `protobuf:"varint,8,opt,name=token_oracle_type,json=tokenOracleType,proto3,enum=injective.oracle.v1beta1.OracleType" json:"token_oracle_type,omitempty"` } func (m *RateLimit) Reset() { *m = RateLimit{} } @@ -116,13 +111,6 @@ func (m *RateLimit) GetTransfers() []*BridgeTransfer { return nil } -func (m *RateLimit) GetTokenOracleType() types.OracleType { - if m != nil { - return m.TokenOracleType - } - return types.OracleType_Unspecified -} - // Deprecated: Do not use. type BridgeTransfer struct { // quantity that was bridged (chain format) @@ -350,46 +338,43 @@ func init() { } var fileDescriptor_f5e4b49160131e74 = []byte{ - // 621 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x54, 0xdf, 0x6a, 0xdb, 0x3e, - 0x18, 0x8d, 0x92, 0xfe, 0x8b, 0xda, 0xa6, 0x54, 0xed, 0x0f, 0x4c, 0x7f, 0x34, 0xcd, 0xd2, 0x96, - 0x85, 0xc1, 0x6c, 0xd2, 0xb1, 0x9b, 0xdd, 0x35, 0xcb, 0x4d, 0x58, 0xb7, 0x16, 0xd1, 0x31, 0xb6, - 0x1b, 0x23, 0x5b, 0xaa, 0xab, 0xd5, 0xb6, 0x82, 0x24, 0xa7, 0xe4, 0x21, 0x06, 0x7b, 0x96, 0x3d, - 0x45, 0x2f, 0x7b, 0x39, 0x06, 0x2b, 0xa3, 0x7d, 0x91, 0x61, 0xc9, 0xf9, 0x33, 0x12, 0x06, 0xdd, - 0x9d, 0xbf, 0xe3, 0xf3, 0x1d, 0xe9, 0x3b, 0xe7, 0x43, 0x70, 0x9f, 0xa7, 0x9f, 0x59, 0xa8, 0xf9, - 0x80, 0x79, 0x7d, 0x16, 0x45, 0x43, 0x6f, 0xd0, 0xf6, 0x24, 0xd1, 0xcc, 0x8f, 0x79, 0xc2, 0xb5, - 0xdb, 0x97, 0x42, 0x0b, 0x84, 0xc6, 0x24, 0xd7, 0x90, 0xdc, 0x41, 0x7b, 0x67, 0x3b, 0x12, 0x91, - 0x30, 0xbf, 0xbd, 0xfc, 0xcb, 0x32, 0x77, 0x0e, 0x27, 0x72, 0x42, 0x92, 0x30, 0x66, 0xde, 0xa0, - 0x1d, 0x30, 0x4d, 0xda, 0x45, 0x69, 0x69, 0xcd, 0x9f, 0x15, 0x58, 0xc5, 0x44, 0xb3, 0x93, 0xfc, - 0x10, 0xb4, 0x0f, 0xd7, 0xb5, 0xb8, 0x62, 0xa9, 0x4f, 0x28, 0x95, 0x4c, 0x29, 0x07, 0x34, 0x40, - 0xab, 0x8a, 0xd7, 0x0c, 0x78, 0x6c, 0x31, 0x74, 0x08, 0x6b, 0x96, 0x44, 0x59, 0xc8, 0x13, 0x12, - 0x2b, 0xa7, 0xdc, 0x00, 0xad, 0x75, 0x6c, 0x5b, 0xbb, 0x05, 0x88, 0x0e, 0x46, 0xb4, 0xbe, 0xe4, - 0x21, 0xf3, 0x39, 0x75, 0x2a, 0x53, 0x62, 0x67, 0x39, 0xd8, 0xa3, 0xe8, 0x19, 0xdc, 0x9c, 0x0c, - 0xe9, 0x5f, 0xf3, 0x94, 0x8a, 0x6b, 0x67, 0xa1, 0x01, 0x5a, 0x0b, 0x78, 0x43, 0x8e, 0xee, 0xf5, - 0xc1, 0xc0, 0xa8, 0x07, 0x6b, 0x53, 0xdc, 0x4c, 0x51, 0x67, 0x31, 0x57, 0xec, 0xec, 0xdf, 0xdc, - 0xed, 0x95, 0x7e, 0xdc, 0xed, 0xfd, 0x1f, 0x0a, 0x95, 0x08, 0xa5, 0xe8, 0x95, 0xcb, 0x85, 0x97, - 0x10, 0x7d, 0xe9, 0x9e, 0xb0, 0x88, 0x84, 0xc3, 0x2e, 0x0b, 0xf1, 0xda, 0x58, 0xed, 0xbd, 0xa2, - 0xe8, 0x14, 0x6e, 0x91, 0x40, 0x89, 0x38, 0xd3, 0xcc, 0x4f, 0x78, 0xaa, 0xad, 0xa6, 0xb3, 0x64, - 0xf4, 0xf6, 0x0a, 0xbd, 0xff, 0x66, 0xf5, 0x7a, 0xa9, 0x76, 0x00, 0xde, 0x1c, 0xf5, 0xbe, 0xe5, - 0xa9, 0xb6, 0xce, 0x75, 0x61, 0x55, 0x4b, 0x92, 0xaa, 0x0b, 0x26, 0x95, 0xb3, 0xdc, 0xa8, 0xb4, - 0x56, 0x8f, 0x9a, 0xee, 0x6c, 0x58, 0x6e, 0x47, 0x72, 0x1a, 0xb1, 0xf3, 0x82, 0xda, 0x29, 0x3b, - 0x00, 0x4f, 0x1a, 0xd1, 0x19, 0xdc, 0xb4, 0x9e, 0xd9, 0x8c, 0x7c, 0x3d, 0xec, 0x33, 0x67, 0xa5, - 0x01, 0x5a, 0xb5, 0xa3, 0x83, 0x29, 0xb5, 0x22, 0xc1, 0x22, 0x50, 0xf7, 0xd4, 0x94, 0xe7, 0xc3, - 0x3e, 0xc3, 0x1b, 0xa6, 0x7d, 0x02, 0x34, 0xbf, 0x00, 0x58, 0xfb, 0xf3, 0x4c, 0xf4, 0x12, 0x2e, - 0x91, 0x44, 0x64, 0xf9, 0x24, 0x66, 0xdc, 0xdd, 0xbf, 0x8e, 0x8b, 0x0b, 0x32, 0x7a, 0x02, 0xd7, - 0x82, 0x58, 0x84, 0x57, 0x7e, 0x9a, 0x25, 0x01, 0x93, 0x26, 0xf4, 0x05, 0xbc, 0x6a, 0xb0, 0x77, - 0x06, 0x42, 0xbb, 0x10, 0x72, 0xe5, 0x53, 0xd6, 0x17, 0x8a, 0x6b, 0x13, 0xf7, 0x0a, 0xae, 0x72, - 0xd5, 0xb5, 0xc0, 0xab, 0xb2, 0x03, 0x9a, 0xdf, 0x00, 0x44, 0xe3, 0x7d, 0x3b, 0x1f, 0x0f, 0xbe, - 0x0d, 0x17, 0xcd, 0xcd, 0x8b, 0x85, 0xb3, 0x05, 0x3a, 0x86, 0xcb, 0x3c, 0xbd, 0x88, 0xc5, 0x75, - 0xbe, 0x62, 0xb9, 0xa5, 0x4f, 0xe7, 0x5a, 0x9a, 0xdf, 0x60, 0x24, 0x85, 0x59, 0x28, 0x24, 0xc5, - 0xa3, 0x3e, 0xf4, 0x1a, 0xae, 0x88, 0x4c, 0x5b, 0x8d, 0xca, 0xe3, 0x34, 0xc6, 0x8d, 0x4d, 0x01, - 0xb7, 0xe6, 0x10, 0x66, 0x1c, 0x01, 0xb3, 0x8e, 0x4c, 0xbc, 0x2e, 0x3f, 0xc2, 0xeb, 0xe6, 0x47, - 0x08, 0xf3, 0xd5, 0x3a, 0xb6, 0xce, 0xcf, 0x37, 0xe7, 0xdf, 0xa4, 0x3b, 0xec, 0xe6, 0xbe, 0x0e, - 0x6e, 0xef, 0xeb, 0xe0, 0xd7, 0x7d, 0x1d, 0x7c, 0x7d, 0xa8, 0x97, 0x6e, 0x1f, 0xea, 0xa5, 0xef, - 0x0f, 0xf5, 0xd2, 0xa7, 0x37, 0x11, 0xd7, 0x97, 0x59, 0xe0, 0x86, 0x22, 0xf1, 0x7a, 0x23, 0x8b, - 0x4e, 0x48, 0xa0, 0xbc, 0xb1, 0x61, 0xcf, 0x43, 0x21, 0xd9, 0x74, 0x79, 0x49, 0x78, 0xea, 0x25, - 0x82, 0x66, 0x31, 0x53, 0xc5, 0xb3, 0x95, 0xef, 0xac, 0x0a, 0x96, 0xcc, 0xf3, 0xf2, 0xe2, 0x77, - 0x00, 0x00, 0x00, 0xff, 0xff, 0x6a, 0x64, 0x06, 0x99, 0xd6, 0x04, 0x00, 0x00, + // 567 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x54, 0xdf, 0x8a, 0xd3, 0x4c, + 0x1c, 0xed, 0xb4, 0xbb, 0xdd, 0xed, 0x6c, 0xb7, 0x1f, 0x3b, 0xbb, 0x1f, 0x04, 0x65, 0xd3, 0x9a, + 0x2a, 0x16, 0xc1, 0x84, 0x55, 0xbc, 0xf1, 0xae, 0xb5, 0x37, 0xc5, 0xfa, 0x87, 0x41, 0x11, 0xbd, + 0x09, 0x49, 0x66, 0x36, 0x1d, 0x9b, 0x64, 0x4a, 0x66, 0xd2, 0xd2, 0x67, 0x10, 0xc1, 0x67, 0xf1, + 0x29, 0xf6, 0x72, 0x2f, 0xc5, 0x8b, 0x45, 0xda, 0x17, 0x91, 0x4c, 0x92, 0xb6, 0xd2, 0x22, 0xac, + 0x77, 0x99, 0x93, 0x73, 0xce, 0x1c, 0xce, 0xef, 0xc7, 0xc0, 0x36, 0x8b, 0x3e, 0x53, 0x4f, 0xb2, + 0x29, 0xb5, 0x26, 0xd4, 0xf7, 0xe7, 0xd6, 0xf4, 0xc2, 0x8a, 0x1d, 0x49, 0xed, 0x80, 0x85, 0x4c, + 0x9a, 0x93, 0x98, 0x4b, 0x8e, 0xd0, 0x8a, 0x64, 0x2a, 0x92, 0x39, 0xbd, 0xb8, 0x73, 0xe6, 0x73, + 0x9f, 0xab, 0xdf, 0x56, 0xfa, 0x95, 0x31, 0x8d, 0x2f, 0x15, 0x58, 0xc3, 0x8e, 0xa4, 0xc3, 0x54, + 0x8d, 0xda, 0xf0, 0x58, 0xf2, 0x31, 0x8d, 0x6c, 0x87, 0x90, 0x98, 0x0a, 0xa1, 0x81, 0x16, 0xe8, + 0xd4, 0x70, 0x5d, 0x81, 0xdd, 0x0c, 0x43, 0x0f, 0x60, 0x23, 0x23, 0x11, 0xea, 0xb1, 0xd0, 0x09, + 0x84, 0x56, 0x6e, 0x81, 0xce, 0x31, 0xce, 0xa4, 0xfd, 0x1c, 0x44, 0xf7, 0x0b, 0xda, 0x24, 0x66, + 0x1e, 0xb5, 0x19, 0xd1, 0x2a, 0x1b, 0x66, 0x6f, 0x53, 0x70, 0x40, 0xd0, 0x23, 0x78, 0xb2, 0x4e, + 0x6f, 0xcf, 0x58, 0x44, 0xf8, 0x4c, 0xdb, 0x6b, 0x81, 0xce, 0x1e, 0xfe, 0x2f, 0x2e, 0x72, 0x7d, + 0x50, 0x30, 0x1a, 0xc0, 0xc6, 0x06, 0x37, 0x11, 0x44, 0xdb, 0x4f, 0x1d, 0x7b, 0xed, 0xab, 0x9b, + 0x66, 0xe9, 0xe7, 0x4d, 0xf3, 0xae, 0xc7, 0x45, 0xc8, 0x85, 0x20, 0x63, 0x93, 0x71, 0x2b, 0x74, + 0xe4, 0xc8, 0x1c, 0x52, 0xdf, 0xf1, 0xe6, 0x7d, 0xea, 0xe1, 0xfa, 0xca, 0xed, 0xbd, 0x20, 0xe8, + 0x0d, 0x3c, 0x75, 0x5c, 0xc1, 0x83, 0x44, 0x52, 0x3b, 0x64, 0x91, 0xcc, 0x3c, 0xb5, 0xaa, 0xf2, + 0x6b, 0xe6, 0x7e, 0xff, 0x6f, 0xfb, 0x0d, 0x22, 0xa9, 0x01, 0x7c, 0x52, 0x68, 0x5f, 0xb1, 0x48, + 0x66, 0xcd, 0xf5, 0x61, 0x4d, 0xc6, 0x4e, 0x24, 0x2e, 0x69, 0x2c, 0xb4, 0x83, 0x56, 0xa5, 0x73, + 0xf4, 0xc4, 0x30, 0xb7, 0xa7, 0x60, 0xf6, 0x62, 0x46, 0x7c, 0xfa, 0x2e, 0xa7, 0xf6, 0xca, 0x1a, + 0xc0, 0x6b, 0xa1, 0xf1, 0x15, 0xc0, 0xc6, 0x9f, 0x0c, 0xf4, 0x0c, 0x56, 0x9d, 0x90, 0x27, 0xe9, + 0xbd, 0x2a, 0xdc, 0xf9, 0x5f, 0xc3, 0xe1, 0x9c, 0x8c, 0xee, 0xc1, 0xba, 0x1b, 0x70, 0x6f, 0x6c, + 0x47, 0x49, 0xe8, 0xd2, 0x58, 0x8d, 0x68, 0x0f, 0x1f, 0x29, 0xec, 0xb5, 0x82, 0xd0, 0x39, 0x84, + 0x4c, 0xd8, 0x84, 0x4e, 0xb8, 0x60, 0x52, 0x0d, 0xe7, 0x10, 0xd7, 0x98, 0xe8, 0x67, 0xc0, 0xf3, + 0xb2, 0x06, 0x8c, 0xef, 0x00, 0xa2, 0xd5, 0x76, 0x14, 0x91, 0x04, 0x3a, 0x83, 0xfb, 0x6a, 0x88, + 0xf9, 0x7a, 0x64, 0x07, 0xd4, 0x85, 0x07, 0x2c, 0xba, 0x0c, 0xf8, 0x2c, 0x5d, 0x88, 0xb4, 0x80, + 0x87, 0x3b, 0x0b, 0x48, 0x13, 0x14, 0x56, 0x98, 0x7a, 0x3c, 0x26, 0xb8, 0xd0, 0xa1, 0x17, 0xf0, + 0x90, 0x27, 0x32, 0xf3, 0xa8, 0xdc, 0xce, 0x63, 0x25, 0x34, 0x38, 0x3c, 0xdd, 0x41, 0xd8, 0x6a, + 0x04, 0x6c, 0x37, 0xb2, 0xee, 0xba, 0x7c, 0x8b, 0xae, 0x8d, 0x8f, 0x10, 0xa6, 0x8b, 0xd0, 0xcd, + 0x9a, 0xdf, 0x5d, 0xce, 0xbf, 0x59, 0xf7, 0xe8, 0xd5, 0x42, 0x07, 0xd7, 0x0b, 0x1d, 0xfc, 0x5a, + 0xe8, 0xe0, 0xdb, 0x52, 0x2f, 0x5d, 0x2f, 0xf5, 0xd2, 0x8f, 0xa5, 0x5e, 0xfa, 0xf4, 0xd2, 0x67, + 0x72, 0x94, 0xb8, 0xa6, 0xc7, 0x43, 0x6b, 0x50, 0x54, 0x34, 0x74, 0x5c, 0x61, 0xad, 0x0a, 0x7b, + 0xec, 0xf1, 0x98, 0x6e, 0x1e, 0x47, 0x0e, 0x8b, 0xac, 0x90, 0x93, 0x24, 0xa0, 0x22, 0x7f, 0x3d, + 0xe4, 0x7c, 0x42, 0x85, 0x5b, 0x55, 0x8f, 0xc1, 0xd3, 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x27, + 0xa5, 0xb0, 0x31, 0x5d, 0x04, 0x00, 0x00, } func (m *RateLimit) Marshal() (dAtA []byte, err error) { @@ -412,11 +397,6 @@ func (m *RateLimit) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - if m.TokenOracleType != 0 { - i = encodeVarintRateLimit(dAtA, i, uint64(m.TokenOracleType)) - i-- - dAtA[i] = 0x40 - } if len(m.Transfers) > 0 { for iNdEx := len(m.Transfers) - 1; iNdEx >= 0; iNdEx-- { { @@ -703,9 +683,6 @@ func (m *RateLimit) Size() (n int) { n += 1 + l + sovRateLimit(uint64(l)) } } - if m.TokenOracleType != 0 { - n += 1 + sovRateLimit(uint64(m.TokenOracleType)) - } return n } @@ -1019,25 +996,6 @@ func (m *RateLimit) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex - case 8: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field TokenOracleType", wireType) - } - m.TokenOracleType = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowRateLimit - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.TokenOracleType |= types.OracleType(b&0x7F) << shift - if b < 0x80 { - break - } - } default: iNdEx = preIndex skippy, err := skipRateLimit(dAtA[iNdEx:]) diff --git a/chain/stream/types/query.pb.go b/chain/stream/types/query.pb.go index 45109a428..7d531565c 100644 --- a/chain/stream/types/query.pb.go +++ b/chain/stream/types/query.pb.go @@ -914,6 +914,9 @@ func (m *Position) GetIsLong() bool { } type OraclePrice struct { + // The feed identifier for this price update, sourced from + // EventOraclePriceUpdate.id. Its format depends on the oracle type; see + // OraclePriceFilter.symbol for the per-type mapping. Symbol string `protobuf:"bytes,1,opt,name=symbol,proto3" json:"symbol,omitempty"` Price cosmossdk_io_math.LegacyDec `protobuf:"bytes,2,opt,name=price,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"price"` Type string `protobuf:"bytes,3,opt,name=type,proto3" json:"type,omitempty"` @@ -1490,6 +1493,19 @@ func (m *SubaccountDepositsFilter) GetSubaccountIds() []string { } type OraclePriceFilter struct { + // Feed identifiers to subscribe to. Each entry matches the `symbol` field of + // `OraclePrice`, which equals `EventOraclePriceUpdate.id`. The format depends + // on the oracle type: + // - Coinbase: asset key (e.g. "BTC") + // - Pyth: price feed ID hex hash + // - Stork: asset symbol (e.g. "BTCUSD") + // - ChainlinkDataStreams: feed ID hex string (e.g. "0x00034a45...") + // - PriceFeed: compound "base/quote" (e.g. "BTC/USDT") + // - Provider: compound "provider/symbol" (e.g. "acme/BTC") + // - PythPro: decimal string of the uint32 feed ID (e.g. + // "12345") + // - SedaFast: hex-encoded execInputs feed ID + // Use ["*"] to subscribe to all oracle price updates. Symbol []string `protobuf:"bytes,1,rep,name=symbol,proto3" json:"symbol,omitempty"` } diff --git a/chain/stream/types/v2/query.pb.go b/chain/stream/types/v2/query.pb.go index b9303167f..ff88e3597 100644 --- a/chain/stream/types/v2/query.pb.go +++ b/chain/stream/types/v2/query.pb.go @@ -988,7 +988,9 @@ func (m *Position) GetIsLong() bool { } type OraclePrice struct { - // the symbol of the oracle price + // The feed identifier for this price update, sourced from + // EventOraclePriceUpdate.id. Its format depends on the oracle type; see + // OraclePriceFilter.symbol for the per-type mapping. Symbol string `protobuf:"bytes,1,opt,name=symbol,proto3" json:"symbol,omitempty"` // the updated price Price cosmossdk_io_math.LegacyDec `protobuf:"bytes,2,opt,name=price,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"price"` @@ -1740,7 +1742,19 @@ func (m *SubaccountDepositsFilter) GetSubaccountIds() []string { } type OraclePriceFilter struct { - // list of symbols to filter by + // Feed identifiers to subscribe to. Each entry matches the `symbol` field of + // `OraclePrice`, which equals `EventOraclePriceUpdate.id`. The format depends + // on the oracle type: + // - Coinbase: asset key (e.g. "BTC") + // - Pyth: price feed ID hex hash + // - Stork: asset symbol (e.g. "BTCUSD") + // - ChainlinkDataStreams: feed ID hex string (e.g. "0x00034a45...") + // - PriceFeed: compound "base/quote" (e.g. "BTC/USDT") + // - Provider: compound "provider/symbol" (e.g. "acme/BTC") + // - PythPro: decimal string of the uint32 feed ID (e.g. + // "12345") + // - SedaFast: hex-encoded execInputs feed ID + // Use ["*"] to subscribe to all oracle price updates. Symbol []string `protobuf:"bytes,1,rep,name=symbol,proto3" json:"symbol,omitempty"` } diff --git a/injective_data/chain_messages_list.json b/injective_data/chain_messages_list.json index 660bce1f7..90c06474e 100644 --- a/injective_data/chain_messages_list.json +++ b/injective_data/chain_messages_list.json @@ -115,6 +115,7 @@ "injective.exchange.v2.MsgUpdateDerivativeMarket", "injective.exchange.v2.MsgUpdateParams", "injective.exchange.v2.MsgUpdateSpotMarket", + "injective.exchange.v2.MsgUpdateSubaccountMarketRiskMode", "injective.exchange.v2.MsgUpdateSubaccountRiskProfile", "injective.exchange.v2.MsgWithdraw", "injective.exchange.v2.OrderData", diff --git a/proto/injective/exchange/v2/events.proto b/proto/injective/exchange/v2/events.proto index 761c44748..7aa5733a1 100644 --- a/proto/injective/exchange/v2/events.proto +++ b/proto/injective/exchange/v2/events.proto @@ -166,6 +166,15 @@ message EventSubaccountRiskProfileUpdated { bool is_default = 4; } +message EventSubaccountMarketRiskModeUpdated { + string subaccount_id = 1; + string market_id = 2; + // previous explicit override mode; UNSPECIFIED when no override existed + RiskMode previous_mode = 3; + // new explicit override mode; UNSPECIFIED when the override was removed + RiskMode new_mode = 4; +} + message EventBatchDepositUpdate { repeated DepositUpdate deposit_updates = 1; } message DerivativeMarketOrderCancel { diff --git a/proto/injective/exchange/v2/exchange.proto b/proto/injective/exchange/v2/exchange.proto index 8d99bb70f..c1ed61ee5 100644 --- a/proto/injective/exchange/v2/exchange.proto +++ b/proto/injective/exchange/v2/exchange.proto @@ -266,44 +266,101 @@ message Params { message CrossMarginParams { option (gogoproto.equal) = true; - // positive_upnl_haircut_rate defines the haircut applied to - // positive unrealized PnL for cross-margin admission checks. + reserved 11, 12; + + // positive_upnl_haircut_rate defines the haircut applied to positive + // unrealized PnL for cross-margin admission checks. string positive_upnl_haircut_rate = 1 [ (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", (gogoproto.nullable) = false ]; - // fees_buffer defines a fixed notional buffer (quote-denom - // units) subtracted from cross-margin equity calculations. + // fees_buffer defines a fixed notional buffer (quote-denom units) + // subtracted from cross-margin equity calculations. string fees_buffer = 2 [ (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", (gogoproto.nullable) = false ]; - // enabled_quote_denoms defines the quote denoms that are - // eligible for cross-margin pools. + // enabled_quote_denoms defines the quote denoms that are eligible for + // cross-margin pools. repeated string enabled_quote_denoms = 3; - // perpetual_enabled defines whether perpetual derivative markets - // are eligible for cross margin. + // perpetual_enabled defines whether perpetual derivative markets are + // eligible for cross margin. bool perpetual_enabled = 4; - // expiry_enabled defines whether expiry futures derivative - // markets are eligible for cross margin. + // expiry_enabled defines whether expiry futures derivative markets are + // eligible for cross margin. bool expiry_enabled = 5; - // max_active_derivative_markets_per_pool defines the maximum - // number of active derivative markets (positions or orders) a cross-margin + // max_active_derivative_markets_per_pool defines the maximum number of + // active derivative markets (positions or orders) a cross-margin // subaccount may have within a single quote-denom pool. uint32 max_active_derivative_markets_per_pool = 6; - // emergency_paused defines whether cross margin is in emergency - // pause mode. When true: - // - All cross-margin orders (including reduce-only) are blocked - // - Profile switching involving cross mode is blocked - // - Liquidations are still allowed - // - Withdrawals are allowed up to isolated-margin maintenance level + // emergency_paused defines whether cross margin is in emergency pause + // mode. When true: + // - User-submitted cross-margin orders (derivative + spot, limit / market + // / conditional, reduce-only included) are rejected at validation. + // - Paused resting makers are inert: every matcher and TOB scan skips + // them uniformly, including against system-generated liquidation + // taker orders. + // - Liquidation of paused pools is still permitted; system taker orders + // close positions against non-paused liquidity or defer to settlement. + // - Collateral-decreasing operations (withdrawals, transfers, margin + // decrease) remain subject to the marker-aware admission floor with + // positive UPnL stripped first, NOT to a flat isolated-margin + // maintenance level. bool emergency_paused = 7; + + // backstop_margin_ratio defines the target health buffer above + // maintenance margin for graduated liquidation. Liquidation stops when + // EquityLiquidation >= MM * (1 + ratio). + string backstop_margin_ratio = 8 [ + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false + ]; + + // partial_liquidation_ratio is the fraction of the shortfall to target + // per liquidation tx. 1.0 = close enough to fully restore health; <1.0 + // = close only a fraction per tx. + string partial_liquidation_ratio = 9 [ + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false + ]; + + // liquidation_cooldown_blocks is the minimum number of blocks between + // successive partial liquidations on the same cross-margin pool. + uint64 liquidation_cooldown_blocks = 10; + + // max_cross_margin_spot_orders_per_subaccount_per_denom caps the number of + // open spot orders (resting limit + transient limit + transient market) + // that a cross-margin-mode subaccount may hold for any single locking + // denom. The cap protocol-bounds spot cancel-first work performed during + // cross-margin pool liquidation so the validator-work amplifier under fixed + // gas is bounded by a numeric protocol limit rather than only by fixed + // tx-level pricing. Enforcement + // applies only when the effective subaccount risk profile is RISK_MODE_CROSS; + // isolated-mode subaccounts are unaffected. + uint32 max_cross_margin_spot_orders_per_subaccount_per_denom = 13; + + // util_ratio defines the multiplier applied to the cash-floor admission + // check: util_ratio * (QuoteBalance + PositionMarginTotal - ratcheted MM). + // It must be in [0, 1]. 1.0 applies no extra utilization haircut; 0 disables + // new risk-increasing cross-margin orders. + string util_ratio = 14 [ + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false + ]; + + // max_isolated_active_derivative_markets_per_subaccount_per_denom bounds how + // many isolated-mode derivative markets a subaccount with cross-margin + // exposure may be active in per quote denom. Pool walks skip isolated-mode + // markets, so this cap bounds the walk work an account can force on pool + // builds and liquidation sweeps. Zero-cost for accounts without cross + // exposure. + uint32 max_isolated_active_derivative_markets_per_subaccount_per_denom = 15; } message NextFundingTimestamp { int64 next_timestamp = 1; } diff --git a/proto/injective/exchange/v2/genesis.proto b/proto/injective/exchange/v2/genesis.proto index 0e2cc6e90..cfc2a0157 100644 --- a/proto/injective/exchange/v2/genesis.proto +++ b/proto/injective/exchange/v2/genesis.proto @@ -142,6 +142,11 @@ message GenesisState { repeated DenomMinNotional denom_min_notionals = 37; repeated SubaccountRiskProfileRecord subaccount_risk_profiles = 38; + + // subaccount_market_risk_modes contains explicit per-(subaccount, market) + // margin-mode overrides. Markets without a record use the subaccount's + // risk-profile mode as the default. + repeated SubaccountMarketRiskModeRecord subaccount_market_risk_modes = 39; } message OrderbookSequence { @@ -209,4 +214,13 @@ message FullActiveGrant { message SubaccountRiskProfileRecord { string subaccount_id = 1; SubaccountRiskProfile risk_profile = 2 [ (gogoproto.nullable) = false ]; -} \ No newline at end of file +} + +// SubaccountMarketRiskModeRecord pins the margin mode of a single derivative +// market for a subaccount, overriding the subaccount's default risk-profile +// mode for that market. +message SubaccountMarketRiskModeRecord { + string subaccount_id = 1; + string market_id = 2; + RiskMode mode = 3; +} diff --git a/proto/injective/exchange/v2/query.proto b/proto/injective/exchange/v2/query.proto index bd83c5dc4..3abb8e7c4 100644 --- a/proto/injective/exchange/v2/query.proto +++ b/proto/injective/exchange/v2/query.proto @@ -254,6 +254,24 @@ service Query { "subaccount_risk_profile/{subaccount_id}"; } + // Retrieves a subaccount's explicit per-market margin-mode records + rpc SubaccountMarketRiskModes(QuerySubaccountMarketRiskModesRequest) + returns (QuerySubaccountMarketRiskModesResponse) { + option (google.api.http).get = + "/injective/exchange/v2/exchange/" + "subaccount_market_risk_modes/{subaccount_id}"; + } + + // Resolves the effective margin mode of one derivative market for a + // subaccount (binary options pin -> explicit record -> profile default) + rpc EffectiveSubaccountMarketRiskMode( + QueryEffectiveSubaccountMarketRiskModeRequest) + returns (QueryEffectiveSubaccountMarketRiskModeResponse) { + option (google.api.http).get = + "/injective/exchange/v2/exchange/" + "effective_market_risk_mode/{subaccount_id}/{market_id}"; + } + // Retrieves a subaccount's cross-margin pool snapshot for a given quote // denom. Returns current equity, order lock requirement, margin requirements, // and other risk metrics needed to understand cross-margin health. @@ -1185,7 +1203,8 @@ message QuerySubaccountPositionsResponse { message QuerySubaccountPositionInMarketResponse { Position state = 1 [ (gogoproto.nullable) = true ]; - // The risk mode of the subaccount (ISOLATED or CROSS). + // The effective margin mode of this (subaccount, market) pair + // (ISOLATED or CROSS), resolved per market. // For CROSS mode, the position's margin is an accounting value; actual // collateral is pooled. Use CrossMarginPoolSnapshot for pool-level health. RiskMode risk_mode = 2; @@ -1216,7 +1235,8 @@ message EffectivePosition { message QuerySubaccountEffectivePositionInMarketResponse { EffectivePosition state = 1 [ (gogoproto.nullable) = true ]; - // The risk mode of the subaccount (ISOLATED or CROSS). + // The effective margin mode of this (subaccount, market) pair + // (ISOLATED or CROSS), resolved per market. // For CROSS mode, effective_margin reflects position value but liquidation // is determined at pool level. Use CrossMarginPoolSnapshot for pool health. RiskMode risk_mode = 2; @@ -1279,6 +1299,39 @@ message QuerySubaccountRiskProfileResponse { bool is_default = 2; } +// QuerySubaccountMarketRiskModesRequest is the request type for the +// Query/SubaccountMarketRiskModes RPC method. +message QuerySubaccountMarketRiskModesRequest { + // 32-byte hex string, consistent with existing exchange queries. + string subaccount_id = 1; +} + +// QuerySubaccountMarketRiskModesResponse is the response type for the +// Query/SubaccountMarketRiskModes RPC method. +message QuerySubaccountMarketRiskModesResponse { + // the subaccount's explicit per-market overrides, in market-ID byte order + repeated SubaccountMarketRiskModeRecord records = 1; +} + +// QueryEffectiveSubaccountMarketRiskModeRequest is the request type for the +// Query/EffectiveSubaccountMarketRiskMode RPC method. +message QueryEffectiveSubaccountMarketRiskModeRequest { + // the subaccount ID + string subaccount_id = 1; + // the market ID + string market_id = 2; +} + +// QueryEffectiveSubaccountMarketRiskModeResponse is the response type for the +// Query/EffectiveSubaccountMarketRiskMode RPC method. +message QueryEffectiveSubaccountMarketRiskModeResponse { + // the resolved effective mode for this (subaccount, market) pair + RiskMode mode = 1; + // true when an explicit per-market record produced the resolution (as + // opposed to the profile default or the binary-options pin) + bool is_override = 2; +} + // QueryCrossMarginPoolSnapshotRequest is the request type for the // Query/CrossMarginPoolSnapshot RPC method. message QueryCrossMarginPoolSnapshotRequest { @@ -1387,6 +1440,50 @@ message QueryCrossMarginPoolSnapshotResponse { // Field 16 removed: canonical_liquidation_target_market_id is no longer // relevant — MsgLiquidateCrossMarginPool closes all positions atomically. reserved 16; + + // Ratcheted maintenance margin total: max(maintenance at current mark, + // maintenance at entry notional) summed across positions. This is the + // maintenance floor used in the cash-floor and withdrawable formulas, and is + // distinct from maintenance_margin_total. It is NOT derivable from the other + // response fields, so off-chain monitors need it to reconstruct the chain's + // admission / withdrawal predicates. + string ratcheted_maintenance_margin_total = 17 [ + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false + ]; + + // Cross-margin utilisation ratio applied to the cash floor (0 is the + // emergency halt on new risk-increasing actions). A module param, not + // recoverable from any other response field. + string cross_margin_util_ratio = 18 [ + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false + ]; + + // Position-side Order Lock Requirement bucket embedded in + // order_lock_requirement. This is the sum of max(position.Margin, 0), not the + // signed position_margin_total. It is exposed because negative-funded or + // mixed-sign position margins make the OLR split impossible to reconstruct + // from position_margin_total. + string position_order_lock_requirement = 19 [ + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false + ]; + + // Non-position Order Lock Requirement bucket used by the cash-floor formula. + // This is not generally max(order_lock_requirement - position_margin_total, + // 0) because position_margin_total is signed while the position-side OLR + // bucket floors each position margin at zero. Together with + // ratcheted_maintenance_margin_total, cross_margin_util_ratio, and the + // existing equity fields, monitors can derive fees_buffer + // (= quote_balance + position_margin_total + unrealized_pnl_effective - + // equity_admission), cash_floor_available, admission_available + // (= equity_admission - order_lock_requirement), available_for_new + // (= min(cash_floor_available, admission_available)), and withdrawable. + string non_position_order_lock_requirement = 20 [ + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false + ]; } // QueryModuleStateRequest is the request type for the Query/ExchangeModuleState diff --git a/proto/injective/exchange/v2/tx.proto b/proto/injective/exchange/v2/tx.proto index e61fbd18d..5981fc23b 100644 --- a/proto/injective/exchange/v2/tx.proto +++ b/proto/injective/exchange/v2/tx.proto @@ -246,6 +246,13 @@ service Msg { // gates) to set the subaccount's risk profile (e.g. opt into cross-margin). rpc UpdateSubaccountRiskProfile(MsgUpdateSubaccountRiskProfile) returns (MsgUpdateSubaccountRiskProfileResponse); + + // UpdateSubaccountMarketRiskMode pins one derivative market's margin mode + // for a subaccount (or unpins it back to the profile default), converting + // resting order margin representation atomically. Requires a flat position + // in that market. + rpc UpdateSubaccountMarketRiskMode(MsgUpdateSubaccountMarketRiskMode) + returns (MsgUpdateSubaccountMarketRiskModeResponse); } message MsgUpdateSpotMarket { @@ -353,8 +360,12 @@ message MsgUpdateParams { string authority = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; // params defines the exchange parameters to update. - // - // NOTE: All parameters must be supplied. + // Callers should supply a full Params object. Some parameter groups still + // preserve omitted fields, but cross_margin_params is treated as a full + // replacement. Sparse/raw payloads must include the full intended + // cross_margin_params payload because decoded false/zero/empty values are + // applied literally when they pass validation, including valid explicit + // zeros such as backstop_margin_ratio = 0. Params params = 2 [ (gogoproto.nullable) = false ]; } @@ -419,6 +430,30 @@ message MsgUpdateSubaccountRiskProfile { // Msg/UpdateSubaccountRiskProfile response type. message MsgUpdateSubaccountRiskProfileResponse {} +// MsgUpdateSubaccountMarketRiskMode defines a SDK message for pinning one +// derivative market's margin mode for a subaccount, or unpinning it back to +// the profile default (mode UNSPECIFIED). +message MsgUpdateSubaccountMarketRiskMode { + option (amino.name) = "exchange/MsgUpdateSubaccountMarketRiskMode"; + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + option (cosmos.msg.v1.signer) = "sender"; + + // the sender's Injective address + string sender = 1; + // the subaccount ID to update the market's margin mode for + string subaccount_id = 2; + // the derivative market whose mode is pinned or unpinned + string market_id = 3; + // the requested mode: ISOLATED or CROSS pins, UNSPECIFIED unpins back to + // the profile default (subject to eligibility & safety gates) + RiskMode mode = 4; +} + +// MsgUpdateSubaccountMarketRiskModeResponse defines the +// Msg/UpdateSubaccountMarketRiskMode response type. +message MsgUpdateSubaccountMarketRiskModeResponse {} + // MsgCreateSpotLimitOrder defines a SDK message for creating a new spot limit // order. message MsgCreateSpotLimitOrder { @@ -1707,9 +1742,9 @@ message MsgActivatePostOnlyMode { // MsgActivatePostOnlyMode message MsgActivatePostOnlyModeResponse {} -// MsgLiquidateCrossMarginPool atomically closes all positions in a -// cross-margin pool, netting surplus from profitable positions against deficits -// before touching the insurance fund. +// MsgLiquidateCrossMarginPool performs graduated selective liquidation on a +// cross-margin quote-denom pool, canceling pool orders first and then closing +// only enough positions to restore health according to the configured target. message MsgLiquidateCrossMarginPool { option (amino.name) = "exchange/MsgLiquidateCrossMarginPool"; option (cosmos.msg.v1.signer) = "sender"; diff --git a/proto/injective/oracle/v1beta1/oracle.proto b/proto/injective/oracle/v1beta1/oracle.proto index 0f85d0c83..8689a6dea 100644 --- a/proto/injective/oracle/v1beta1/oracle.proto +++ b/proto/injective/oracle/v1beta1/oracle.proto @@ -58,10 +58,10 @@ enum OracleType { PriceFeed = 2; Coinbase = 3; Chainlink = 4 [ deprecated = true ]; - Razor = 5; - Dia = 6; - API3 = 7; - Uma = 8; + Razor = 5 [ deprecated = true ]; + Dia = 6 [ deprecated = true ]; + API3 = 7 [ deprecated = true ]; + Uma = 8 [ deprecated = true ]; Pyth = 9; BandIBC = 10 [ deprecated = true ]; Provider = 11; diff --git a/proto/injective/peggy/v1/msgs.proto b/proto/injective/peggy/v1/msgs.proto index 64a34a17d..36fbf0c72 100644 --- a/proto/injective/peggy/v1/msgs.proto +++ b/proto/injective/peggy/v1/msgs.proto @@ -8,7 +8,6 @@ import "amino/amino.proto"; import "cosmos/base/v1beta1/coin.proto"; import "cosmos/msg/v1/msg.proto"; import "cosmos_proto/cosmos.proto"; -import "injective/oracle/v1beta1/oracle.proto"; import "injective/peggy/v1/types.proto"; import "injective/peggy/v1/params.proto"; import "injective/peggy/v1/rate_limit.proto"; @@ -384,8 +383,7 @@ message MsgCreateRateLimit { // decimals of the ERC20 token uint32 token_decimals = 3; - // unique ID used to obtain the notional USD value of the ERC20 token from - // oracle + // a Pyth-specific ID used to obtain USD price of the ERC20 token string token_price_id = 4; // the notional USD limit imposed on all outgoing traffic (per token) @@ -404,10 +402,6 @@ message MsgCreateRateLimit { // length of the sliding window in which inbound (outbound) traffic is // measured uint64 rate_limit_window = 7; - - // token_oracle_type is used to obtain the USD price of the ERC20 token (in - // relation with token_price_id) - injective.oracle.v1beta1.OracleType token_oracle_type = 8; } message MsgCreateRateLimitResponse {} @@ -422,8 +416,7 @@ message MsgUpdateRateLimit { // token_address is the address of rate limited token string token_address = 2; - // unique ID used to obtain the notional USD value of the ERC20 token from - // oracle + // new_token_price_id is the new Pyth price ID of the rate limited token string new_token_price_id = 3; // new_rate_limit_usd is the new notional limit (on withdrawals) in USD @@ -434,10 +427,6 @@ message MsgUpdateRateLimit { // new_rate_limit_window is the new length of the sliding window uint64 new_rate_limit_window = 5; - - // new_token_oracle_type is used to obtain the USD price of the ERC20 token - // (in relation with token_price_id) - injective.oracle.v1beta1.OracleType new_token_oracle_type = 6; } message MsgUpdateRateLimitResponse {} @@ -453,4 +442,4 @@ message MsgRemoveRateLimit { string token_address = 2; } -message MsgRemoveRateLimitResponse {} +message MsgRemoveRateLimitResponse {} \ No newline at end of file diff --git a/proto/injective/peggy/v1/rate_limit.proto b/proto/injective/peggy/v1/rate_limit.proto index 3d6e9cc05..c174cda56 100644 --- a/proto/injective/peggy/v1/rate_limit.proto +++ b/proto/injective/peggy/v1/rate_limit.proto @@ -4,7 +4,6 @@ package injective.peggy.v1; option go_package = "github.com/InjectiveLabs/injective-core/injective-chain/modules/peggy/types"; import "gogoproto/gogo.proto"; -import "injective/oracle/v1beta1/oracle.proto"; message RateLimit { // address of the ERC20 token @@ -13,8 +12,7 @@ message RateLimit { // decimals of the ERC20 token uint32 token_decimals = 2; - // unique ID used to obtain the notional USD value of the ERC20 token from - // oracle + // a Pyth-specific ID used to obtain USD price of the ERC20 token string token_price_id = 3; // length of the sliding window in which inbound (outbound) traffic is @@ -36,10 +34,6 @@ message RateLimit { // transfers that occurred within the sliding window repeated BridgeTransfer transfers = 7 [ deprecated = true ]; - - // oracle type used to obtain the USD price of the ERC20 token (in relation - // with token_price_id) - injective.oracle.v1beta1.OracleType token_oracle_type = 8; } message BridgeTransfer { @@ -89,4 +83,4 @@ message MintAmount { (gogoproto.customtype) = "cosmossdk.io/math.Int", (gogoproto.nullable) = false ]; -} +} \ No newline at end of file diff --git a/proto/injective/stream/v1beta1/query.proto b/proto/injective/stream/v1beta1/query.proto index 2cade5336..0549a539c 100644 --- a/proto/injective/stream/v1beta1/query.proto +++ b/proto/injective/stream/v1beta1/query.proto @@ -150,6 +150,9 @@ message Position { } message OraclePrice { + // The feed identifier for this price update, sourced from + // EventOraclePriceUpdate.id. Its format depends on the oracle type; see + // OraclePriceFilter.symbol for the per-type mapping. string symbol = 1; string price = 2 [ (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", @@ -244,4 +247,19 @@ message BankBalancesFilter { repeated string accounts = 1; } message SubaccountDepositsFilter { repeated string subaccount_ids = 1; } -message OraclePriceFilter { repeated string symbol = 1; } +message OraclePriceFilter { + // Feed identifiers to subscribe to. Each entry matches the `symbol` field of + // `OraclePrice`, which equals `EventOraclePriceUpdate.id`. The format depends + // on the oracle type: + // - Coinbase: asset key (e.g. "BTC") + // - Pyth: price feed ID hex hash + // - Stork: asset symbol (e.g. "BTCUSD") + // - ChainlinkDataStreams: feed ID hex string (e.g. "0x00034a45...") + // - PriceFeed: compound "base/quote" (e.g. "BTC/USDT") + // - Provider: compound "provider/symbol" (e.g. "acme/BTC") + // - PythPro: decimal string of the uint32 feed ID (e.g. + // "12345") + // - SedaFast: hex-encoded execInputs feed ID + // Use ["*"] to subscribe to all oracle price updates. + repeated string symbol = 1; +} diff --git a/proto/injective/stream/v2/query.proto b/proto/injective/stream/v2/query.proto index 0eedd87cd..033345b5e 100644 --- a/proto/injective/stream/v2/query.proto +++ b/proto/injective/stream/v2/query.proto @@ -193,7 +193,9 @@ message Position { } message OraclePrice { - // the symbol of the oracle price + // The feed identifier for this price update, sourced from + // EventOraclePriceUpdate.id. Its format depends on the oracle type; see + // OraclePriceFilter.symbol for the per-type mapping. string symbol = 1; // the updated price string price = 2 [ @@ -337,7 +339,19 @@ message SubaccountDepositsFilter { } message OraclePriceFilter { - // list of symbols to filter by + // Feed identifiers to subscribe to. Each entry matches the `symbol` field of + // `OraclePrice`, which equals `EventOraclePriceUpdate.id`. The format depends + // on the oracle type: + // - Coinbase: asset key (e.g. "BTC") + // - Pyth: price feed ID hex hash + // - Stork: asset symbol (e.g. "BTCUSD") + // - ChainlinkDataStreams: feed ID hex string (e.g. "0x00034a45...") + // - PriceFeed: compound "base/quote" (e.g. "BTC/USDT") + // - Provider: compound "provider/symbol" (e.g. "acme/BTC") + // - PythPro: decimal string of the uint32 feed ID (e.g. + // "12345") + // - SedaFast: hex-encoded execInputs feed ID + // Use ["*"] to subscribe to all oracle price updates. repeated string symbol = 1; } From 5e114a3897f326337b13327d71bc34ce5f4c1eec Mon Sep 17 00:00:00 2001 From: ze97286 Date: Tue, 25 Aug 2026 12:21:03 +0100 Subject: [PATCH 2/3] [IC-1087] chore: sync RFQ terminal cross-margin types --- chain/app/ante/eip712/sign_mode_handler.go | 151 ++ chain/exchange/types/errors.go | 5 + chain/exchange/types/key.go | 15 + chain/exchange/types/market.go | 28 + chain/exchange/types/msgs.go | 2 +- chain/exchange/types/params.go | 9 +- chain/exchange/types/v2/codec.go | 2 + chain/exchange/types/v2/common_utils.go | 7 +- .../exchange/types/v2/cross_margin_bounds.go | 221 ++ .../types/v2/cross_margin_rfq_router_test.go | 133 + chain/exchange/types/v2/derivative.go | 6 + chain/exchange/types/v2/events.pb.go | 1618 +++++++++-- chain/exchange/types/v2/exchange.pb.go | 990 ++++--- chain/exchange/types/v2/genesis.go | 422 +++ chain/exchange/types/v2/market.go | 4 + chain/exchange/types/v2/msgs.go | 47 +- chain/exchange/types/v2/params.go | 168 +- chain/exchange/types/v2/position.go | 40 +- chain/exchange/types/v2/query.pb.go | 2409 ++++++++++++----- chain/exchange/types/v2/tx.pb.go | 1436 ++++++---- .../exchange/types/wasm_privileged_action.go | 76 + chain/exchange/types/wasm_trades.go | 116 + injective_data/chain_messages_list.json | 1 + proto/injective/exchange/v2/events.proto | 50 + proto/injective/exchange/v2/exchange.proto | 69 +- proto/injective/exchange/v2/query.proto | 68 + proto/injective/exchange/v2/tx.proto | 29 +- 27 files changed, 6377 insertions(+), 1745 deletions(-) create mode 100644 chain/app/ante/eip712/sign_mode_handler.go create mode 100644 chain/exchange/types/v2/cross_margin_bounds.go create mode 100644 chain/exchange/types/v2/cross_margin_rfq_router_test.go diff --git a/chain/app/ante/eip712/sign_mode_handler.go b/chain/app/ante/eip712/sign_mode_handler.go new file mode 100644 index 000000000..bded3ebb5 --- /dev/null +++ b/chain/app/ante/eip712/sign_mode_handler.go @@ -0,0 +1,151 @@ +package eip712 + +import ( + "context" + "encoding/json" + "errors" + "fmt" + + "cosmossdk.io/api/cosmos/tx/signing/v1beta1" + sdkmath "cosmossdk.io/math" + "cosmossdk.io/x/tx/signing" + "github.com/cosmos/cosmos-sdk/codec" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/x/auth/migrations/legacytx" + ethmath "github.com/ethereum/go-ethereum/common/math" + + "github.com/InjectiveLabs/sdk-go/typeddata" +) + +// todo: eventually, refactor the whole ante pkg + +// SignModeHandler is used to provide a way to verify EIP712 signatures from within Cosmos SDK. +// This gives multisig accounts the ability to send transactions with Ledger signatures +type SignModeHandler struct { + cdc codec.Codec +} + +func NewSignModeHandler(cdc codec.Codec) SignModeHandler { + return SignModeHandler{cdc: cdc} +} + +func (SignModeHandler) Mode() signingv1beta1.SignMode { + return signingv1beta1.SignMode_SIGN_MODE_EIP712_V2 +} + +func (h SignModeHandler) GetSignBytes( + _ context.Context, + signerData signing.SignerData, + txData signing.TxData, +) ([]byte, error) { + msgsJSON := make([]json.RawMessage, len(txData.Body.Messages)) + for idx, anyPB := range txData.Body.Messages { + anyCDC := &codectypes.Any{TypeUrl: anyPB.TypeUrl, Value: anyPB.Value} + + var msg sdk.Msg + if err := h.cdc.UnpackAny(anyCDC, &msg); err != nil { + return nil, fmt.Errorf("cannot unpack msg at index %d: %w", idx, err) + } + + msgJSON, err := h.cdc.MarshalInterfaceJSON(msg) + if err != nil { + return nil, fmt.Errorf("cannot marshal json at index %d: %w", idx, err) + } + + msgsJSON[idx] = msgJSON + } + + bzMsgs, err := json.Marshal(msgsJSON) + if err != nil { + return nil, fmt.Errorf("marshal json err: %w", err) + } + + feeInfo, err := StdFeeFromTxData(txData) + if err != nil { + return nil, err + } + + bzFee, err := json.Marshal(feeInfo) + if err != nil { + return nil, fmt.Errorf("marshal fee info failed: %w", err) + } + + ctx := map[string]any{ + "account_number": signerData.AccountNumber, + "sequence": signerData.Sequence, + "timeout_height": txData.Body.TimeoutHeight, + "chain_id": signerData.ChainID, + "memo": txData.Body.Memo, + "fee": json.RawMessage(bzFee), + } + + bzTxContext, err := json.Marshal(ctx) + if err != nil { + return nil, fmt.Errorf("marshal json err: %w", err) + } + + chainID := int64(1) // default: injective-1 == 1 (eth) + if signerData.ChainID != "injective-1" { + chainID = 11155111 // injective-777 == 11155111 (sepolia) + } + + domain := typeddata.TypedDataDomain{ + Name: "Injective Web3", + Version: "1.0.0", + ChainId: ethmath.NewHexOrDecimal256(chainID), + VerifyingContract: "0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC", + Salt: "0", + } + + td := typeddata.TypedData{ + Types: typeddata.SignableTypes(), + PrimaryType: "Tx", + Domain: domain, + Message: typeddata.TypedDataMessage{ + "context": string(bzTxContext), + "msgs": string(bzMsgs), + }, + } + + _, raw, err := typeddata.ComputeTypedDataAndHash(td) + if err != nil { + return nil, err + } + + return raw, nil +} + +func StdFeeFromTxData(txData signing.TxData) (legacytx.StdFee, error) { + if txData.AuthInfo == nil || txData.AuthInfo.Fee == nil { + return legacytx.StdFee{}, errors.New("missing auth info fee") + } + + amount := make(sdk.Coins, 0, len(txData.AuthInfo.Fee.Amount)) + for i, c := range txData.AuthInfo.Fee.Amount { + amt, ok := sdkmath.NewIntFromString(c.Amount) + if !ok { + return legacytx.StdFee{}, fmt.Errorf("invalid fee amount at index %d: %q", i, c.Amount) + } + + coin := sdk.Coin{Denom: c.Denom, Amount: amt} + if err := coin.Validate(); err != nil { + return legacytx.StdFee{}, fmt.Errorf("invalid fee coin at index %d: %w", i, err) + } + + amount = append(amount, coin) + } + + if !amount.IsValid() { + return legacytx.StdFee{}, errors.New("invalid fee coins") + } + + fee := legacytx.StdFee{ + Amount: amount.Sort(), + Gas: txData.AuthInfo.Fee.GasLimit, + Payer: txData.AuthInfo.Fee.Payer, + // Granter: txData.AuthInfo.Fee.Granter, // eip712_cosmos.go does not include Granter + } + + return fee, nil +} diff --git a/chain/exchange/types/errors.go b/chain/exchange/types/errors.go index 4c3c73276..d978bd8af 100644 --- a/chain/exchange/types/errors.go +++ b/chain/exchange/types/errors.go @@ -123,4 +123,9 @@ var ( ErrNotCanonicalLiquidationTarget = errors.Register(ModuleName, 114, "targeted market is not the canonical liquidation target") ErrMsgDeprecated = errors.Register(ModuleName, 115, "message type is deprecated") ErrTooManyCrossMarginSpotOrders = errors.Register(ModuleName, 116, "cross-margin subaccount has reached the per-denom spot order cap") + ErrSwapDisabled = errors.Register(ModuleName, 117, "spot swap is disabled") + ErrInvalidSwapRoute = errors.Register(ModuleName, 118, "invalid swap route") + ErrSwapDeadlineExceeded = errors.Register(ModuleName, 119, "swap deadline exceeded") + ErrSwapMinOutputNotMet = errors.Register(ModuleName, 120, "swap output below minimum") + ErrPoolFundedCloseCannotRest = errors.Register(ModuleName, 121, "pool-funded cross-margin close cannot rest on the orderbook") ) diff --git a/chain/exchange/types/key.go b/chain/exchange/types/key.go index 307bef16a..e3fac7366 100644 --- a/chain/exchange/types/key.go +++ b/chain/exchange/types/key.go @@ -133,6 +133,7 @@ var ( TransientAtomicPerpetualVwapPrefix = []byte{0x88} // prefix for transient atomic perpetual market VWAP data ObjectCachedParamsKey = []byte{0x89} // key for cached params in object store (block-scoped) ObjectCachedWhiteKnightLiquidatorsKey = []byte{0x8a} // key for cached white knight liquidators set in object store (block-scoped) + ObjectCachedSwapAllowedMarketsKey = []byte{0x9c} // key for cached swap allowed-markets set in object store (block-scoped) TransientSyntheticPerpetualFundingVwapPrefix = []byte{0x8b} // prefix for transient synthetic perpetual funding VWAP data // SubaccountRiskProfilePrefix | subaccountID(32B) -> v2.SubaccountRiskProfile (proto bytes) @@ -146,6 +147,11 @@ var ( // CrossMarginLastLiquidationBlockPrefix | subaccountID(32B) | quoteDenom -> uint64 (block height) CrossMarginLastLiquidationBlockPrefix = []byte{0x90} + // TransientCrossMarginRestingVanillaAdmissionPrefix | marketID(32B) | side -> uint64. + // Counts transitions that can add durable cross-margin vanilla makers during the + // current block. It lives only in the transient store and bounds how quickly a + // terminally rejected resting prefix can be replenished. + TransientCrossMarginRestingVanillaAdmissionPrefix = []byte{0x91} // SpotLimitOrderDenomIndexPrefix | subaccountID | len(lockingDenom) | lockingDenom | marketID | side -> count SpotLimitOrderDenomIndexPrefix = []byte{0x95} @@ -732,6 +738,15 @@ func GetCrossMarginLastLiquidationBlockKey(subaccountID common.Hash, quoteDenom return key } +// GetTransientCrossMarginRestingVanillaAdmissionKey returns the transient +// per-market-side durable cross-margin vanilla-maker admission counter key. +func GetTransientCrossMarginRestingVanillaAdmissionKey(marketID common.Hash, isBuy bool) []byte { + key := make([]byte, 0, len(TransientCrossMarginRestingVanillaAdmissionPrefix)+common.HashLength+1) + key = append(key, TransientCrossMarginRestingVanillaAdmissionPrefix...) + key = append(key, MarketDirectionPrefix(marketID, isBuy)...) + return key +} + func GetGrantAuthorizationKey(granter, grantee sdk.AccAddress) []byte { return append(GrantAuthorizationsPrefix, append(granter.Bytes(), grantee.Bytes()...)...) } diff --git a/chain/exchange/types/market.go b/chain/exchange/types/market.go index 04e938588..09eb8c109 100644 --- a/chain/exchange/types/market.go +++ b/chain/exchange/types/market.go @@ -1,6 +1,7 @@ package types import ( + "math/big" "strconv" "cosmossdk.io/math" @@ -135,6 +136,33 @@ func NotionalToChainFormat(humanReadableValue math.LegacyDec, decimals uint32) m return humanReadableValue.Mul(multiplier) } +// legacyDecUpperLimit is the largest value a LegacyDec may hold, in the same internal +// representation LegacyDec.BigInt() returns: 2^256 scaled by 10^LegacyPrecision. cosmossdk.io/math +// keeps its own copy of this unexported, so it is recomputed here. +var legacyDecUpperLimit = new(big.Int).Mul( + new(big.Int).Lsh(big.NewInt(1), 256), + new(big.Int).Exp(big.NewInt(10), big.NewInt(int64(math.LegacyPrecision)), nil), +) + +// CanRepresentNotionalInChainFormat reports whether NotionalToChainFormat can scale this value by +// 10^decimals without leaving LegacyDec's valid range. +// +// It exists because NotionalToChainFormat panics rather than returning an error when the result is +// out of range, so any caller that can be handed an attacker-influenced magnitude has to ask first. +// The scaling is done on big.Int, which grows instead of panicking, so the check itself is safe. +func CanRepresentNotionalInChainFormat(humanReadableValue math.LegacyDec, decimals uint32) bool { + if humanReadableValue.IsNil() { + return false + } + + scaled := new(big.Int).Mul( + new(big.Int).Abs(humanReadableValue.BigInt()), + new(big.Int).Exp(big.NewInt(10), big.NewInt(int64(decimals)), nil), + ) + + return scaled.Cmp(legacyDecUpperLimit) < 0 +} + type MarketType byte // nolint:all diff --git a/chain/exchange/types/msgs.go b/chain/exchange/types/msgs.go index 4b595dba3..f469dca2c 100644 --- a/chain/exchange/types/msgs.go +++ b/chain/exchange/types/msgs.go @@ -11,8 +11,8 @@ import ( "github.com/ethereum/go-ethereum/common" oracletypes "github.com/InjectiveLabs/sdk-go/chain/oracle/types" - wasmxtypes "github.com/InjectiveLabs/sdk-go/chain/wasmx/types" chaintypes "github.com/InjectiveLabs/sdk-go/chain/types" + wasmxtypes "github.com/InjectiveLabs/sdk-go/chain/wasmx/types" ) const RouterKey = ModuleName diff --git a/chain/exchange/types/params.go b/chain/exchange/types/params.go index 58cbd85ec..0c91ea1a1 100644 --- a/chain/exchange/types/params.go +++ b/chain/exchange/types/params.go @@ -58,6 +58,10 @@ const ( // MaxWhiteKnightLiquidators defines the maximum number of white knight liquidators. MaxWhiteKnightLiquidators = 1024 + + // MaxDerivativeOrderSideCountHardLimit is the protocol ceiling for the governed + // maximum number of derivative orders per market side. + MaxDerivativeOrderSideCountHardLimit uint32 = 1000 ) var MaxBinaryOptionsOrderPrice = math.LegacyOneDec() @@ -588,9 +592,8 @@ func ValidateDerivativeOrderSideCount(i any) error { return fmt.Errorf("DerivativeOrderSideCount must be positive: %d", v) } - const maxDerivativeOrderSideCount = 1000 - if v > maxDerivativeOrderSideCount { - return fmt.Errorf("DerivativeOrderSideCount must not exceed %d: %d", maxDerivativeOrderSideCount, v) + if v > MaxDerivativeOrderSideCountHardLimit { + return fmt.Errorf("DerivativeOrderSideCount must not exceed %d: %d", MaxDerivativeOrderSideCountHardLimit, v) } return nil diff --git a/chain/exchange/types/v2/codec.go b/chain/exchange/types/v2/codec.go index b149a39e5..06e117dcd 100644 --- a/chain/exchange/types/v2/codec.go +++ b/chain/exchange/types/v2/codec.go @@ -74,6 +74,7 @@ func RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { cdc.RegisterConcrete(&MsgCancelBinaryOptionsOrder{}, "exchange/v2/MsgCancelBinaryOptionsOrder", nil) cdc.RegisterConcrete(&MsgAdminUpdateBinaryOptionsMarket{}, "exchange/v2/MsgAdminUpdateBinaryOptionsMarket", nil) cdc.RegisterConcrete(&MsgUpdateParams{}, "exchange/v2/MsgUpdateParams", nil) + cdc.RegisterConcrete(&MsgUpdateSwapParams{}, "exchange/v2/MsgUpdateSwapParams", nil) cdc.RegisterConcrete(&MsgUpdateSpotMarket{}, "exchange/v2/MsgUpdateSpotMarket", nil) cdc.RegisterConcrete(&MsgUpdateDerivativeMarket{}, "exchange/v2/MsgUpdateDerivativeMarket", nil) cdc.RegisterConcrete(&MsgAuthorizeStakeGrants{}, "exchange/v2/MsgAuthorizeStakeGrants", nil) @@ -188,6 +189,7 @@ func RegisterInterfaces(registry types.InterfaceRegistry) { &MsgCancelBinaryOptionsOrder{}, &MsgAdminUpdateBinaryOptionsMarket{}, &MsgUpdateParams{}, + &MsgUpdateSwapParams{}, &MsgUpdateSpotMarket{}, &MsgUpdateDerivativeMarket{}, &MsgAuthorizeStakeGrants{}, diff --git a/chain/exchange/types/v2/common_utils.go b/chain/exchange/types/v2/common_utils.go index 57f7e3590..979ee7bf6 100644 --- a/chain/exchange/types/v2/common_utils.go +++ b/chain/exchange/types/v2/common_utils.go @@ -14,9 +14,10 @@ type SpotLimitOrderDelta struct { } type DerivativeLimitOrderDelta struct { - Order *DerivativeLimitOrder - FillQuantity math.LegacyDec - CancelQuantity math.LegacyDec + Order *DerivativeLimitOrder + FillQuantity math.LegacyDec + CancelQuantity math.LegacyDec + AvailableBalanceDelta math.LegacyDec } type DerivativeMarketOrderDelta struct { diff --git a/chain/exchange/types/v2/cross_margin_bounds.go b/chain/exchange/types/v2/cross_margin_bounds.go new file mode 100644 index 000000000..58dc931d2 --- /dev/null +++ b/chain/exchange/types/v2/cross_margin_bounds.go @@ -0,0 +1,221 @@ +package v2 + +import ( + "fmt" + "math/big" + + sdkmath "cosmossdk.io/math" + + exchangetypes "github.com/InjectiveLabs/sdk-go/chain/exchange/types" +) + +const ( + // MaxCrossMarginDerivativeCarriers is the hard per-subaccount cardinality + // bound over positions, persistent derivative orders, and all current-block + // transient derivative indicators. + MaxCrossMarginDerivativeCarriers uint32 = 64 + // MaxCrossMarginDerivativeCarriersPerQuote is the hard per-quote bound for + // non-binary derivative carriers. + MaxCrossMarginDerivativeCarriersPerQuote uint32 = 8 + // MaxCrossMarginCancellableOrdersPerQuote is the hard cleanup-work bound over + // derivative orders plus spot orders locking the same quote denom. + MaxCrossMarginCancellableOrdersPerQuote uint32 = 32 + // MaxCrossMarginCanonicalChunksPerQuote is the hard RFQ canonical chunk bound. + MaxCrossMarginCanonicalChunksPerQuote uint32 = 32 +) + +var ( + maxOrderQuantityRaw = new(big.Int).Set(exchangetypes.MaxOrderQuantity.BigInt()) + legacyPrecisionRaw = new(big.Int).Exp(big.NewInt(10), big.NewInt(sdkmath.LegacyPrecision), nil) + legacyHalfPrecisionRaw = new(big.Int).Quo(new(big.Int).Set(legacyPrecisionRaw), big.NewInt(2)) + legacyDecRangeExclusiveRaw = new(big.Int).Mul( + new(big.Int).Lsh(big.NewInt(1), 256), + new(big.Int).Set(legacyPrecisionRaw), + ) +) + +// CrossMarginCanonicalChunkCountRaw computes +// ceil((abs(position)+queuedVanilla)/MaxOrderQuantity) using raw integers only. +// It never constructs an intermediate LegacyDec, so an adversarial aggregate +// cannot overflow before the hard bound is checked. +func CrossMarginCanonicalChunkCountRaw(positionRaw, queuedVanillaRaw *big.Int) (*big.Int, error) { + if positionRaw == nil || queuedVanillaRaw == nil { + return nil, fmt.Errorf("cross-margin chunk input is nil") + } + if queuedVanillaRaw.Sign() < 0 { + return nil, fmt.Errorf("cross-margin queued vanilla quantity is negative") + } + + numerator := new(big.Int).Abs(new(big.Int).Set(positionRaw)) + numerator.Add(numerator, queuedVanillaRaw) + if numerator.Sign() == 0 { + return new(big.Int), nil + } + + quotient, remainder := new(big.Int), new(big.Int) + quotient.QuoRem(numerator, maxOrderQuantityRaw, remainder) + if remainder.Sign() != 0 { + quotient.Add(quotient, big.NewInt(1)) + } + return quotient, nil +} + +// CrossMarginAtomicPositionEnvelopeRaw returns +// max(abs(position), abs(position+signedRequestedQuantity)) in raw units. +func CrossMarginAtomicPositionEnvelopeRaw(positionRaw, signedRequestedQuantityRaw *big.Int) (*big.Int, error) { + if positionRaw == nil || signedRequestedQuantityRaw == nil { + return nil, fmt.Errorf("cross-margin atomic envelope input is nil") + } + before := new(big.Int).Abs(new(big.Int).Set(positionRaw)) + after := new(big.Int).Add(new(big.Int).Set(positionRaw), signedRequestedQuantityRaw) + after.Abs(after) + if after.Cmp(before) > 0 { + return after, nil + } + return before, nil +} + +// CrossMarginRawDec copies the raw fixed-point integer without performing +// arithmetic in LegacyDec. +func CrossMarginRawDec(value sdkmath.LegacyDec) (*big.Int, error) { + if value.IsNil() { + return nil, fmt.Errorf("cross-margin decimal is nil") + } + return new(big.Int).Set(value.BigInt()), nil +} + +func checkedLegacyMulRaw(a, b sdkmath.LegacyDec) (*big.Int, error) { + if a.IsNil() || b.IsNil() { + return nil, fmt.Errorf("nil decimal multiplication input") + } + product := new(big.Int).Mul(a.BigInt(), b.BigInt()) + sign := product.Sign() + product.Abs(product) + quotient, remainder := new(big.Int), new(big.Int) + quotient.QuoRem(product, legacyPrecisionRaw, remainder) + if cmp := remainder.Cmp(legacyHalfPrecisionRaw); cmp > 0 || cmp == 0 && quotient.Bit(0) == 1 { + quotient.Add(quotient, big.NewInt(1)) + } + if sign < 0 { + quotient.Neg(quotient) + } + if new(big.Int).Abs(new(big.Int).Set(quotient)).Cmp(legacyDecRangeExclusiveRaw) >= 0 { + return nil, fmt.Errorf("decimal multiplication is out of range") + } + return quotient, nil +} + +func checkedLegacyAddRaw(a, b *big.Int) (*big.Int, error) { + if a == nil || b == nil { + return nil, fmt.Errorf("nil decimal addition input") + } + sum := new(big.Int).Add(new(big.Int).Set(a), b) + if new(big.Int).Abs(new(big.Int).Set(sum)).Cmp(legacyDecRangeExclusiveRaw) >= 0 { + return nil, fmt.Errorf("decimal addition is out of range") + } + return sum, nil +} + +// CanonicalCrossMarginSpotLimitHold returns the chain-format physical hold for +// a live spot limit order. GetUnfilledMarginHoldAndMarginDenom deliberately +// performs notional and fee operations in the runtime order; callers must not +// replace this with an algebraically collapsed product. +func CanonicalCrossMarginSpotLimitHold( + order *SpotLimitOrder, + market *SpotMarket, + isTransient bool, +) (sdkmath.LegacyDec, string, error) { + if order == nil || market == nil { + return sdkmath.LegacyDec{}, "", fmt.Errorf("missing canonical spot limit hold input") + } + if order.Fillable.IsNil() || order.Fillable.IsNegative() || !order.Fillable.IsInValidRange() { + return sdkmath.LegacyDec{}, "", fmt.Errorf("invalid canonical spot limit fillable") + } + if order.IsBuy() { + feeRate := market.MakerFeeRate + if isTransient { + feeRate = market.TakerFeeRate + } + if feeRate.IsNil() || !feeRate.IsInValidRange() { + return sdkmath.LegacyDec{}, "", fmt.Errorf("invalid canonical spot buy hold input") + } + if !isTransient { + feeRate = sdkmath.LegacyMaxDec(sdkmath.LegacyZeroDec(), feeRate) + } + if order.OrderInfo.Price.IsNil() || order.OrderInfo.Price.IsNegative() || + !order.OrderInfo.Price.IsInValidRange() || + market.QuoteDenom == "" || market.QuoteDecimals > exchangetypes.MaxDecimals { + return sdkmath.LegacyDec{}, "", fmt.Errorf("invalid canonical spot buy hold input") + } + notionalRaw, err := checkedLegacyMulRaw(order.Fillable, order.OrderInfo.Price) + if err != nil { + return sdkmath.LegacyDec{}, "", fmt.Errorf("canonical spot buy notional: %w", err) + } + notional := sdkmath.LegacyNewDecFromBigIntWithPrec(notionalRaw, sdkmath.LegacyPrecision) + feeRaw, err := checkedLegacyMulRaw(notional, feeRate) + if err != nil { + return sdkmath.LegacyDec{}, "", fmt.Errorf("canonical spot buy fee: %w", err) + } + if _, err := checkedLegacyAddRaw(notionalRaw, feeRaw); err != nil { + return sdkmath.LegacyDec{}, "", fmt.Errorf("canonical spot buy hold: %w", err) + } + } else if market.BaseDenom == "" || market.BaseDecimals > exchangetypes.MaxDecimals { + return sdkmath.LegacyDec{}, "", fmt.Errorf("invalid canonical spot sell hold input") + } + hold, denom := order.GetUnfilledMarginHoldAndMarginDenom(market, isTransient) + if hold.IsNil() || hold.IsNegative() { + return sdkmath.LegacyDec{}, "", fmt.Errorf("invalid canonical spot limit hold") + } + var chainHold sdkmath.LegacyDec + if order.IsBuy() { + if !exchangetypes.CanRepresentNotionalInChainFormat(hold, market.QuoteDecimals) { + return sdkmath.LegacyDec{}, "", fmt.Errorf("canonical spot limit hold is out of chain-format range") + } + chainHold = market.NotionalToChainFormat(hold) + } else { + if !exchangetypes.CanRepresentNotionalInChainFormat(hold, market.BaseDecimals) { + return sdkmath.LegacyDec{}, "", fmt.Errorf("canonical spot limit hold is out of chain-format range") + } + chainHold = market.QuantityToChainFormat(hold) + } + if chainHold.IsNil() || chainHold.IsNegative() || !chainHold.IsInValidRange() { + return sdkmath.LegacyDec{}, "", fmt.Errorf("canonical spot limit hold is out of range") + } + return chainHold, denom, nil +} + +// CanonicalCrossMarginSpotMarketHold returns the chain-format physical hold +// persisted in a queued transient spot market order. +func CanonicalCrossMarginSpotMarketHold( + order *SpotMarketOrder, + market *SpotMarket, +) (sdkmath.LegacyDec, string, error) { + if order == nil || market == nil || order.BalanceHold.IsNil() || order.BalanceHold.IsNegative() || + !order.BalanceHold.IsInValidRange() { + return sdkmath.LegacyDec{}, "", fmt.Errorf("invalid canonical spot market hold input") + } + denom := market.BaseDenom + var chainHold sdkmath.LegacyDec + if order.IsBuy() { + if market.QuoteDenom == "" || market.QuoteDecimals > exchangetypes.MaxDecimals { + return sdkmath.LegacyDec{}, "", fmt.Errorf("invalid canonical spot market buy input") + } + denom = market.QuoteDenom + if !exchangetypes.CanRepresentNotionalInChainFormat(order.BalanceHold, market.QuoteDecimals) { + return sdkmath.LegacyDec{}, "", fmt.Errorf("canonical spot market hold is out of chain-format range") + } + chainHold = market.NotionalToChainFormat(order.BalanceHold) + } else { + if market.BaseDenom == "" || market.BaseDecimals > exchangetypes.MaxDecimals { + return sdkmath.LegacyDec{}, "", fmt.Errorf("invalid canonical spot market sell input") + } + if !exchangetypes.CanRepresentNotionalInChainFormat(order.BalanceHold, market.BaseDecimals) { + return sdkmath.LegacyDec{}, "", fmt.Errorf("canonical spot market hold is out of chain-format range") + } + chainHold = market.QuantityToChainFormat(order.BalanceHold) + } + if chainHold.IsNil() || chainHold.IsNegative() || !chainHold.IsInValidRange() { + return sdkmath.LegacyDec{}, "", fmt.Errorf("canonical spot market hold is out of range") + } + return chainHold, denom, nil +} diff --git a/chain/exchange/types/v2/cross_margin_rfq_router_test.go b/chain/exchange/types/v2/cross_margin_rfq_router_test.go new file mode 100644 index 000000000..896a28798 --- /dev/null +++ b/chain/exchange/types/v2/cross_margin_rfq_router_test.go @@ -0,0 +1,133 @@ +package v2_test + +import ( + "bytes" + "math/rand" + "strings" + "testing" + + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/gogoproto/proto" + "github.com/stretchr/testify/require" + + exchangev2 "github.com/InjectiveLabs/sdk-go/chain/exchange/types/v2" +) + +type legacyScalarCrossMarginRFQRouter struct { + Address string `protobuf:"bytes,15,opt,name=liquidation_rfq_contract_address,json=liquidationRfqContractAddress,proto3"` +} + +func (m *legacyScalarCrossMarginRFQRouter) Reset() { *m = legacyScalarCrossMarginRFQRouter{} } +func (m *legacyScalarCrossMarginRFQRouter) String() string { return proto.CompactTextString(m) } +func (*legacyScalarCrossMarginRFQRouter) ProtoMessage() {} + +func rfqRouterAddress(fill byte) sdk.AccAddress { + return sdk.AccAddress(bytes.Repeat([]byte{fill}, 20)) +} + +func TestParseCrossMarginRFQRouterSetCanonicalizesByAddressBytes(t *testing.T) { + t.Parallel() + + a := rfqRouterAddress(1) + b := rfqRouterAddress(2) + c := rfqRouterAddress(3) + + routers, err := exchangev2.ParseCrossMarginRFQRouterSet([]string{c.String(), a.String(), b.String()}) + require.NoError(t, err) + require.Equal(t, []string{a.String(), b.String(), c.String()}, routers.CanonicalStrings()) + require.True(t, routers.Contains(b)) + require.False(t, routers.Contains(rfqRouterAddress(4))) + + addresses := routers.Addresses() + addresses[0][0] = 9 + require.Equal(t, a.String(), routers.CanonicalStrings()[0], "returned addresses must not alias the parsed set") +} + +func TestParseCrossMarginRFQRouterSetRejectsByteAliasesAndBounds(t *testing.T) { + t.Parallel() + + a := rfqRouterAddress(1).String() + _, err := exchangev2.ParseCrossMarginRFQRouterSet([]string{a, strings.ToUpper(a)}) + require.ErrorContains(t, err, "duplicate address") + + _, err = exchangev2.ParseCrossMarginRFQRouterSet([]string{"not-an-address"}) + require.ErrorContains(t, err, "is invalid") + + atLimit := make([]string, exchangev2.MaxCrossMarginRFQContractAddresses) + for i := range atLimit { + atLimit[i] = rfqRouterAddress(byte(i + 1)).String() + } + _, err = exchangev2.ParseCrossMarginRFQRouterSet(atLimit) + require.NoError(t, err) + + overLimit := append(append([]string(nil), atLimit...), rfqRouterAddress(9).String()) + _, err = exchangev2.ParseCrossMarginRFQRouterSet(overLimit) + require.ErrorContains(t, err, "at most 8") +} + +func TestCrossMarginRFQRouterSetMaintainsAlternativeRouterReachability(t *testing.T) { + t.Parallel() + + owner := rfqRouterAddress(1) + empty, err := exchangev2.ParseCrossMarginRFQRouterSet(nil) + require.NoError(t, err) + require.Zero(t, countAlternativeRFQRouters(empty, owner)) + + singleton, err := exchangev2.ParseCrossMarginRFQRouterSet([]string{owner.String()}) + require.NoError(t, err) + require.Zero(t, countAlternativeRFQRouters(singleton, owner)) + require.Equal(t, 1, countAlternativeRFQRouters(singleton, rfqRouterAddress(2))) + + rng := rand.New(rand.NewSource(0x524651)) //nolint:gosec // deterministic property-test input + for sample := 0; sample < 64; sample++ { + routerCount := 2 + sample%(exchangev2.MaxCrossMarginRFQContractAddresses-1) + values := make([]string, routerCount) + for i := range values { + raw := make([]byte, 20) + _, err := rng.Read(raw) + require.NoError(t, err) + raw[0] = byte(i + 1) // guarantee uniqueness within this sample + values[i] = sdk.AccAddress(raw).String() + } + + routers, err := exchangev2.ParseCrossMarginRFQRouterSet(values) + require.NoError(t, err) + require.Equal(t, routerCount, routers.Len()) + for _, member := range routers.Addresses() { + require.Equal(t, routerCount-1, countAlternativeRFQRouters(routers, member)) + require.Positive(t, countAlternativeRFQRouters(routers, member)) + } + require.Equal(t, routerCount, countAlternativeRFQRouters(routers, rfqRouterAddress(0xff))) + } +} + +func countAlternativeRFQRouters(routers exchangev2.CrossMarginRFQRouterSet, owner sdk.AccAddress) int { + count := 0 + for _, router := range routers.Addresses() { + if !router.Equals(owner) { + count++ + } + } + return count +} + +func TestCrossMarginRFQRouterTag15WireCompatibility(t *testing.T) { + t.Parallel() + + a := rfqRouterAddress(1).String() + b := rfqRouterAddress(2).String() + + legacyBytes, err := proto.Marshal(&legacyScalarCrossMarginRFQRouter{Address: a}) + require.NoError(t, err) + current := exchangev2.DefaultCrossMarginParams() + require.NoError(t, proto.Unmarshal(legacyBytes, ¤t)) + require.Equal(t, []string{a}, current.LiquidationRfqContractAddress) + + current = exchangev2.DefaultCrossMarginParams() + current.LiquidationRfqContractAddress = []string{a, b} + currentBytes, err := proto.Marshal(¤t) + require.NoError(t, err) + legacy := &legacyScalarCrossMarginRFQRouter{} + require.NoError(t, proto.Unmarshal(currentBytes, legacy)) + require.Equal(t, b, legacy.Address, "a scalar decoder must retain the final repeated occurrence") +} diff --git a/chain/exchange/types/v2/derivative.go b/chain/exchange/types/v2/derivative.go index 787737f35..2e7873f3a 100644 --- a/chain/exchange/types/v2/derivative.go +++ b/chain/exchange/types/v2/derivative.go @@ -1006,6 +1006,12 @@ type DerivativeBatchExecutionData struct { TransientLimitOrderCancelledDeltas []*DerivativeLimitOrderDelta // resting limit order cancelled deltas to apply RestingLimitOrderCancelledDeltas []*DerivativeLimitOrderDelta + // TerminalRestingCashAuthorityCancels carries the identities of prior-block + // makers terminally rejected by the ephemeral FBA cash authority. Ordinary + // successful persistence uses the cancellation deltas above; this sidecar is + // retained solely so a later execution discard can apply the same canonical + // cancellations on the parent context. + TerminalRestingCashAuthorityCancels []*DerivativeLimitOrder // events for batch market order and limit order execution MarketBuyOrderExecutionEvent *EventBatchDerivativeExecution diff --git a/chain/exchange/types/v2/events.pb.go b/chain/exchange/types/v2/events.pb.go index a7abb8af8..b9db16b5d 100644 --- a/chain/exchange/types/v2/events.pb.go +++ b/chain/exchange/types/v2/events.pb.go @@ -94,6 +94,200 @@ func (m *EventBatchSpotExecution) GetTrades() []*TradeLog { return nil } +type EventSwapExecuted struct { + Caller string `protobuf:"bytes,1,opt,name=caller,proto3" json:"caller,omitempty"` + Recipient string `protobuf:"bytes,2,opt,name=recipient,proto3" json:"recipient,omitempty"` + InputDenom string `protobuf:"bytes,3,opt,name=input_denom,json=inputDenom,proto3" json:"input_denom,omitempty"` + // input_amount is in chain format (token native decimals) + InputAmount cosmossdk_io_math.Int `protobuf:"bytes,4,opt,name=input_amount,json=inputAmount,proto3,customtype=cosmossdk.io/math.Int" json:"input_amount"` + OutputDenom string `protobuf:"bytes,5,opt,name=output_denom,json=outputDenom,proto3" json:"output_denom,omitempty"` + // output_amount is in chain format (token native decimals) + OutputAmount cosmossdk_io_math.Int `protobuf:"bytes,6,opt,name=output_amount,json=outputAmount,proto3,customtype=cosmossdk.io/math.Int" json:"output_amount"` + Hops []*SwapHopExecution `protobuf:"bytes,7,rep,name=hops,proto3" json:"hops,omitempty"` + // spent_amount is the input actually debited in chain format; input_amount + // minus spent_amount is the refunded remainder + SpentAmount cosmossdk_io_math.Int `protobuf:"bytes,8,opt,name=spent_amount,json=spentAmount,proto3,customtype=cosmossdk.io/math.Int" json:"spent_amount"` +} + +func (m *EventSwapExecuted) Reset() { *m = EventSwapExecuted{} } +func (m *EventSwapExecuted) String() string { return proto.CompactTextString(m) } +func (*EventSwapExecuted) ProtoMessage() {} +func (*EventSwapExecuted) Descriptor() ([]byte, []int) { + return fileDescriptor_8ac8f3da550fa1c4, []int{1} +} +func (m *EventSwapExecuted) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *EventSwapExecuted) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_EventSwapExecuted.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 *EventSwapExecuted) XXX_Merge(src proto.Message) { + xxx_messageInfo_EventSwapExecuted.Merge(m, src) +} +func (m *EventSwapExecuted) XXX_Size() int { + return m.Size() +} +func (m *EventSwapExecuted) XXX_DiscardUnknown() { + xxx_messageInfo_EventSwapExecuted.DiscardUnknown(m) +} + +var xxx_messageInfo_EventSwapExecuted proto.InternalMessageInfo + +func (m *EventSwapExecuted) GetCaller() string { + if m != nil { + return m.Caller + } + return "" +} + +func (m *EventSwapExecuted) GetRecipient() string { + if m != nil { + return m.Recipient + } + return "" +} + +func (m *EventSwapExecuted) GetInputDenom() string { + if m != nil { + return m.InputDenom + } + return "" +} + +func (m *EventSwapExecuted) GetOutputDenom() string { + if m != nil { + return m.OutputDenom + } + return "" +} + +func (m *EventSwapExecuted) GetHops() []*SwapHopExecution { + if m != nil { + return m.Hops + } + return nil +} + +type EventSwapParamsUpdated struct { + // sender is the governance authority or exchange admin that made the change + Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty"` + SwapParams SwapParams `protobuf:"bytes,2,opt,name=swap_params,json=swapParams,proto3" json:"swap_params"` +} + +func (m *EventSwapParamsUpdated) Reset() { *m = EventSwapParamsUpdated{} } +func (m *EventSwapParamsUpdated) String() string { return proto.CompactTextString(m) } +func (*EventSwapParamsUpdated) ProtoMessage() {} +func (*EventSwapParamsUpdated) Descriptor() ([]byte, []int) { + return fileDescriptor_8ac8f3da550fa1c4, []int{2} +} +func (m *EventSwapParamsUpdated) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *EventSwapParamsUpdated) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_EventSwapParamsUpdated.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 *EventSwapParamsUpdated) XXX_Merge(src proto.Message) { + xxx_messageInfo_EventSwapParamsUpdated.Merge(m, src) +} +func (m *EventSwapParamsUpdated) XXX_Size() int { + return m.Size() +} +func (m *EventSwapParamsUpdated) XXX_DiscardUnknown() { + xxx_messageInfo_EventSwapParamsUpdated.DiscardUnknown(m) +} + +var xxx_messageInfo_EventSwapParamsUpdated proto.InternalMessageInfo + +func (m *EventSwapParamsUpdated) GetSender() string { + if m != nil { + return m.Sender + } + return "" +} + +func (m *EventSwapParamsUpdated) GetSwapParams() SwapParams { + if m != nil { + return m.SwapParams + } + return SwapParams{} +} + +type SwapHopExecution struct { + MarketId string `protobuf:"bytes,1,opt,name=market_id,json=marketId,proto3" json:"market_id,omitempty"` + IsBuy bool `protobuf:"varint,2,opt,name=is_buy,json=isBuy,proto3" json:"is_buy,omitempty"` + // quantity is the base-asset fill quantity (human readable) + Quantity cosmossdk_io_math.LegacyDec `protobuf:"bytes,3,opt,name=quantity,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"quantity"` + // price is the clearing price (human readable) + Price cosmossdk_io_math.LegacyDec `protobuf:"bytes,4,opt,name=price,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"price"` + // fee is the quote-denom trading fee (human readable) + Fee cosmossdk_io_math.LegacyDec `protobuf:"bytes,5,opt,name=fee,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"fee"` +} + +func (m *SwapHopExecution) Reset() { *m = SwapHopExecution{} } +func (m *SwapHopExecution) String() string { return proto.CompactTextString(m) } +func (*SwapHopExecution) ProtoMessage() {} +func (*SwapHopExecution) Descriptor() ([]byte, []int) { + return fileDescriptor_8ac8f3da550fa1c4, []int{3} +} +func (m *SwapHopExecution) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SwapHopExecution) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_SwapHopExecution.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 *SwapHopExecution) XXX_Merge(src proto.Message) { + xxx_messageInfo_SwapHopExecution.Merge(m, src) +} +func (m *SwapHopExecution) XXX_Size() int { + return m.Size() +} +func (m *SwapHopExecution) XXX_DiscardUnknown() { + xxx_messageInfo_SwapHopExecution.DiscardUnknown(m) +} + +var xxx_messageInfo_SwapHopExecution proto.InternalMessageInfo + +func (m *SwapHopExecution) GetMarketId() string { + if m != nil { + return m.MarketId + } + return "" +} + +func (m *SwapHopExecution) GetIsBuy() bool { + if m != nil { + return m.IsBuy + } + return false +} + type EventBatchDerivativeExecution struct { MarketId string `protobuf:"bytes,1,opt,name=market_id,json=marketId,proto3" json:"market_id,omitempty"` IsBuy bool `protobuf:"varint,2,opt,name=is_buy,json=isBuy,proto3" json:"is_buy,omitempty"` @@ -108,7 +302,7 @@ func (m *EventBatchDerivativeExecution) Reset() { *m = EventBatchDerivat func (m *EventBatchDerivativeExecution) String() string { return proto.CompactTextString(m) } func (*EventBatchDerivativeExecution) ProtoMessage() {} func (*EventBatchDerivativeExecution) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{1} + return fileDescriptor_8ac8f3da550fa1c4, []int{4} } func (m *EventBatchDerivativeExecution) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -183,7 +377,7 @@ func (m *EventLostFundsFromLiquidation) Reset() { *m = EventLostFundsFro func (m *EventLostFundsFromLiquidation) String() string { return proto.CompactTextString(m) } func (*EventLostFundsFromLiquidation) ProtoMessage() {} func (*EventLostFundsFromLiquidation) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{2} + return fileDescriptor_8ac8f3da550fa1c4, []int{5} } func (m *EventLostFundsFromLiquidation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -238,7 +432,7 @@ func (m *EventLostFundsFromCrossPoolLiquidation) Reset() { func (m *EventLostFundsFromCrossPoolLiquidation) String() string { return proto.CompactTextString(m) } func (*EventLostFundsFromCrossPoolLiquidation) ProtoMessage() {} func (*EventLostFundsFromCrossPoolLiquidation) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{3} + return fileDescriptor_8ac8f3da550fa1c4, []int{6} } func (m *EventLostFundsFromCrossPoolLiquidation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -290,7 +484,7 @@ func (m *EventBatchDerivativePosition) Reset() { *m = EventBatchDerivati func (m *EventBatchDerivativePosition) String() string { return proto.CompactTextString(m) } func (*EventBatchDerivativePosition) ProtoMessage() {} func (*EventBatchDerivativePosition) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{4} + return fileDescriptor_8ac8f3da550fa1c4, []int{7} } func (m *EventBatchDerivativePosition) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -344,7 +538,7 @@ func (m *EventDerivativeMarketPaused) Reset() { *m = EventDerivativeMark func (m *EventDerivativeMarketPaused) String() string { return proto.CompactTextString(m) } func (*EventDerivativeMarketPaused) ProtoMessage() {} func (*EventDerivativeMarketPaused) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{5} + return fileDescriptor_8ac8f3da550fa1c4, []int{8} } func (m *EventDerivativeMarketPaused) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -410,7 +604,7 @@ func (m *EventSettledMarketBalance) Reset() { *m = EventSettledMarketBal func (m *EventSettledMarketBalance) String() string { return proto.CompactTextString(m) } func (*EventSettledMarketBalance) ProtoMessage() {} func (*EventSettledMarketBalance) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{6} + return fileDescriptor_8ac8f3da550fa1c4, []int{9} } func (m *EventSettledMarketBalance) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -462,7 +656,7 @@ func (m *EventNotSettledMarketBalance) Reset() { *m = EventNotSettledMar func (m *EventNotSettledMarketBalance) String() string { return proto.CompactTextString(m) } func (*EventNotSettledMarketBalance) ProtoMessage() {} func (*EventNotSettledMarketBalance) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{7} + return fileDescriptor_8ac8f3da550fa1c4, []int{10} } func (m *EventNotSettledMarketBalance) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -515,7 +709,7 @@ func (m *EventMarketBeyondBankruptcy) Reset() { *m = EventMarketBeyondBa func (m *EventMarketBeyondBankruptcy) String() string { return proto.CompactTextString(m) } func (*EventMarketBeyondBankruptcy) ProtoMessage() {} func (*EventMarketBeyondBankruptcy) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{8} + return fileDescriptor_8ac8f3da550fa1c4, []int{11} } func (m *EventMarketBeyondBankruptcy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -575,7 +769,7 @@ func (m *EventAllPositionsHaircut) Reset() { *m = EventAllPositionsHairc func (m *EventAllPositionsHaircut) String() string { return proto.CompactTextString(m) } func (*EventAllPositionsHaircut) ProtoMessage() {} func (*EventAllPositionsHaircut) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{9} + return fileDescriptor_8ac8f3da550fa1c4, []int{12} } func (m *EventAllPositionsHaircut) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -633,7 +827,7 @@ func (m *EventBinaryOptionsMarketUpdate) Reset() { *m = EventBinaryOptio func (m *EventBinaryOptionsMarketUpdate) String() string { return proto.CompactTextString(m) } func (*EventBinaryOptionsMarketUpdate) ProtoMessage() {} func (*EventBinaryOptionsMarketUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{10} + return fileDescriptor_8ac8f3da550fa1c4, []int{13} } func (m *EventBinaryOptionsMarketUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -677,7 +871,7 @@ func (m *EventDerivativeMarketUpdate) Reset() { *m = EventDerivativeMark func (m *EventDerivativeMarketUpdate) String() string { return proto.CompactTextString(m) } func (*EventDerivativeMarketUpdate) ProtoMessage() {} func (*EventDerivativeMarketUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{11} + return fileDescriptor_8ac8f3da550fa1c4, []int{14} } func (m *EventDerivativeMarketUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -723,7 +917,7 @@ func (m *EventNewSpotOrders) Reset() { *m = EventNewSpotOrders{} } func (m *EventNewSpotOrders) String() string { return proto.CompactTextString(m) } func (*EventNewSpotOrders) ProtoMessage() {} func (*EventNewSpotOrders) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{12} + return fileDescriptor_8ac8f3da550fa1c4, []int{15} } func (m *EventNewSpotOrders) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -783,7 +977,7 @@ func (m *EventNewDerivativeOrders) Reset() { *m = EventNewDerivativeOrde func (m *EventNewDerivativeOrders) String() string { return proto.CompactTextString(m) } func (*EventNewDerivativeOrders) ProtoMessage() {} func (*EventNewDerivativeOrders) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{13} + return fileDescriptor_8ac8f3da550fa1c4, []int{16} } func (m *EventNewDerivativeOrders) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -842,7 +1036,7 @@ func (m *EventCancelSpotOrder) Reset() { *m = EventCancelSpotOrder{} } func (m *EventCancelSpotOrder) String() string { return proto.CompactTextString(m) } func (*EventCancelSpotOrder) ProtoMessage() {} func (*EventCancelSpotOrder) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{14} + return fileDescriptor_8ac8f3da550fa1c4, []int{17} } func (m *EventCancelSpotOrder) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -893,7 +1087,7 @@ func (m *EventSpotMarketUpdate) Reset() { *m = EventSpotMarketUpdate{} } func (m *EventSpotMarketUpdate) String() string { return proto.CompactTextString(m) } func (*EventSpotMarketUpdate) ProtoMessage() {} func (*EventSpotMarketUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{15} + return fileDescriptor_8ac8f3da550fa1c4, []int{18} } func (m *EventSpotMarketUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -939,7 +1133,7 @@ func (m *EventPerpetualMarketUpdate) Reset() { *m = EventPerpetualMarket func (m *EventPerpetualMarketUpdate) String() string { return proto.CompactTextString(m) } func (*EventPerpetualMarketUpdate) ProtoMessage() {} func (*EventPerpetualMarketUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{16} + return fileDescriptor_8ac8f3da550fa1c4, []int{19} } func (m *EventPerpetualMarketUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -998,7 +1192,7 @@ func (m *EventExpiryFuturesMarketUpdate) Reset() { *m = EventExpiryFutur func (m *EventExpiryFuturesMarketUpdate) String() string { return proto.CompactTextString(m) } func (*EventExpiryFuturesMarketUpdate) ProtoMessage() {} func (*EventExpiryFuturesMarketUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{17} + return fileDescriptor_8ac8f3da550fa1c4, []int{20} } func (m *EventExpiryFuturesMarketUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1053,7 +1247,7 @@ func (m *EventPerpetualMarketFundingUpdate) Reset() { *m = EventPerpetua func (m *EventPerpetualMarketFundingUpdate) String() string { return proto.CompactTextString(m) } func (*EventPerpetualMarketFundingUpdate) ProtoMessage() {} func (*EventPerpetualMarketFundingUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{18} + return fileDescriptor_8ac8f3da550fa1c4, []int{21} } func (m *EventPerpetualMarketFundingUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1113,7 +1307,7 @@ func (m *EventSubaccountDeposit) Reset() { *m = EventSubaccountDeposit{} func (m *EventSubaccountDeposit) String() string { return proto.CompactTextString(m) } func (*EventSubaccountDeposit) ProtoMessage() {} func (*EventSubaccountDeposit) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{19} + return fileDescriptor_8ac8f3da550fa1c4, []int{22} } func (m *EventSubaccountDeposit) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1173,7 +1367,7 @@ func (m *EventSubaccountWithdraw) Reset() { *m = EventSubaccountWithdraw func (m *EventSubaccountWithdraw) String() string { return proto.CompactTextString(m) } func (*EventSubaccountWithdraw) ProtoMessage() {} func (*EventSubaccountWithdraw) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{20} + return fileDescriptor_8ac8f3da550fa1c4, []int{23} } func (m *EventSubaccountWithdraw) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1233,7 +1427,7 @@ func (m *EventSubaccountBalanceTransfer) Reset() { *m = EventSubaccountB func (m *EventSubaccountBalanceTransfer) String() string { return proto.CompactTextString(m) } func (*EventSubaccountBalanceTransfer) ProtoMessage() {} func (*EventSubaccountBalanceTransfer) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{21} + return fileDescriptor_8ac8f3da550fa1c4, []int{24} } func (m *EventSubaccountBalanceTransfer) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1294,7 +1488,7 @@ func (m *EventSubaccountRiskProfileUpdated) Reset() { *m = EventSubaccou func (m *EventSubaccountRiskProfileUpdated) String() string { return proto.CompactTextString(m) } func (*EventSubaccountRiskProfileUpdated) ProtoMessage() {} func (*EventSubaccountRiskProfileUpdated) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{22} + return fileDescriptor_8ac8f3da550fa1c4, []int{25} } func (m *EventSubaccountRiskProfileUpdated) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1359,7 +1553,7 @@ func (m *EventBatchDepositUpdate) Reset() { *m = EventBatchDepositUpdate func (m *EventBatchDepositUpdate) String() string { return proto.CompactTextString(m) } func (*EventBatchDepositUpdate) ProtoMessage() {} func (*EventBatchDepositUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{23} + return fileDescriptor_8ac8f3da550fa1c4, []int{26} } func (m *EventBatchDepositUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1404,7 +1598,7 @@ func (m *DerivativeMarketOrderCancel) Reset() { *m = DerivativeMarketOrd func (m *DerivativeMarketOrderCancel) String() string { return proto.CompactTextString(m) } func (*DerivativeMarketOrderCancel) ProtoMessage() {} func (*DerivativeMarketOrderCancel) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{24} + return fileDescriptor_8ac8f3da550fa1c4, []int{27} } func (m *DerivativeMarketOrderCancel) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1451,7 +1645,7 @@ func (m *EventCancelDerivativeOrder) Reset() { *m = EventCancelDerivativ func (m *EventCancelDerivativeOrder) String() string { return proto.CompactTextString(m) } func (*EventCancelDerivativeOrder) ProtoMessage() {} func (*EventCancelDerivativeOrder) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{25} + return fileDescriptor_8ac8f3da550fa1c4, []int{28} } func (m *EventCancelDerivativeOrder) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1516,7 +1710,7 @@ func (m *EventFeeDiscountSchedule) Reset() { *m = EventFeeDiscountSchedu func (m *EventFeeDiscountSchedule) String() string { return proto.CompactTextString(m) } func (*EventFeeDiscountSchedule) ProtoMessage() {} func (*EventFeeDiscountSchedule) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{26} + return fileDescriptor_8ac8f3da550fa1c4, []int{29} } func (m *EventFeeDiscountSchedule) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1561,7 +1755,7 @@ func (m *EventTradingRewardCampaignUpdate) Reset() { *m = EventTradingRe func (m *EventTradingRewardCampaignUpdate) String() string { return proto.CompactTextString(m) } func (*EventTradingRewardCampaignUpdate) ProtoMessage() {} func (*EventTradingRewardCampaignUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{27} + return fileDescriptor_8ac8f3da550fa1c4, []int{30} } func (m *EventTradingRewardCampaignUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1612,7 +1806,7 @@ func (m *EventTradingRewardDistribution) Reset() { *m = EventTradingRewa func (m *EventTradingRewardDistribution) String() string { return proto.CompactTextString(m) } func (*EventTradingRewardDistribution) ProtoMessage() {} func (*EventTradingRewardDistribution) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{28} + return fileDescriptor_8ac8f3da550fa1c4, []int{31} } func (m *EventTradingRewardDistribution) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1659,7 +1853,7 @@ func (m *EventNewConditionalDerivativeOrder) Reset() { *m = EventNewCond func (m *EventNewConditionalDerivativeOrder) String() string { return proto.CompactTextString(m) } func (*EventNewConditionalDerivativeOrder) ProtoMessage() {} func (*EventNewConditionalDerivativeOrder) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{29} + return fileDescriptor_8ac8f3da550fa1c4, []int{32} } func (m *EventNewConditionalDerivativeOrder) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1727,7 +1921,7 @@ func (m *EventCancelConditionalDerivativeOrder) Reset() { *m = EventCanc func (m *EventCancelConditionalDerivativeOrder) String() string { return proto.CompactTextString(m) } func (*EventCancelConditionalDerivativeOrder) ProtoMessage() {} func (*EventCancelConditionalDerivativeOrder) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{30} + return fileDescriptor_8ac8f3da550fa1c4, []int{33} } func (m *EventCancelConditionalDerivativeOrder) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1798,7 +1992,7 @@ func (m *EventConditionalDerivativeOrderTrigger) Reset() { func (m *EventConditionalDerivativeOrderTrigger) String() string { return proto.CompactTextString(m) } func (*EventConditionalDerivativeOrderTrigger) ProtoMessage() {} func (*EventConditionalDerivativeOrderTrigger) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{31} + return fileDescriptor_8ac8f3da550fa1c4, []int{34} } func (m *EventConditionalDerivativeOrderTrigger) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1873,7 +2067,7 @@ func (m *EventOrderFail) Reset() { *m = EventOrderFail{} } func (m *EventOrderFail) String() string { return proto.CompactTextString(m) } func (*EventOrderFail) ProtoMessage() {} func (*EventOrderFail) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{32} + return fileDescriptor_8ac8f3da550fa1c4, []int{35} } func (m *EventOrderFail) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1942,7 +2136,7 @@ func (m *EventAtomicMarketOrderFeeMultipliersUpdated) String() string { } func (*EventAtomicMarketOrderFeeMultipliersUpdated) ProtoMessage() {} func (*EventAtomicMarketOrderFeeMultipliersUpdated) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{33} + return fileDescriptor_8ac8f3da550fa1c4, []int{36} } func (m *EventAtomicMarketOrderFeeMultipliersUpdated) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1987,7 +2181,7 @@ func (m *EventOrderbookUpdate) Reset() { *m = EventOrderbookUpdate{} } func (m *EventOrderbookUpdate) String() string { return proto.CompactTextString(m) } func (*EventOrderbookUpdate) ProtoMessage() {} func (*EventOrderbookUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{34} + return fileDescriptor_8ac8f3da550fa1c4, []int{37} } func (m *EventOrderbookUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2039,7 +2233,7 @@ func (m *OrderbookUpdate) Reset() { *m = OrderbookUpdate{} } func (m *OrderbookUpdate) String() string { return proto.CompactTextString(m) } func (*OrderbookUpdate) ProtoMessage() {} func (*OrderbookUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{35} + return fileDescriptor_8ac8f3da550fa1c4, []int{38} } func (m *OrderbookUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2092,7 +2286,7 @@ func (m *Orderbook) Reset() { *m = Orderbook{} } func (m *Orderbook) String() string { return proto.CompactTextString(m) } func (*Orderbook) ProtoMessage() {} func (*Orderbook) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{36} + return fileDescriptor_8ac8f3da550fa1c4, []int{39} } func (m *Orderbook) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2151,7 +2345,7 @@ func (m *EventGrantAuthorizations) Reset() { *m = EventGrantAuthorizatio func (m *EventGrantAuthorizations) String() string { return proto.CompactTextString(m) } func (*EventGrantAuthorizations) ProtoMessage() {} func (*EventGrantAuthorizations) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{37} + return fileDescriptor_8ac8f3da550fa1c4, []int{40} } func (m *EventGrantAuthorizations) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2204,7 +2398,7 @@ func (m *EventGrantActivation) Reset() { *m = EventGrantActivation{} } func (m *EventGrantActivation) String() string { return proto.CompactTextString(m) } func (*EventGrantActivation) ProtoMessage() {} func (*EventGrantActivation) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{38} + return fileDescriptor_8ac8f3da550fa1c4, []int{41} } func (m *EventGrantActivation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2256,7 +2450,7 @@ func (m *EventInvalidGrant) Reset() { *m = EventInvalidGrant{} } func (m *EventInvalidGrant) String() string { return proto.CompactTextString(m) } func (*EventInvalidGrant) ProtoMessage() {} func (*EventInvalidGrant) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{39} + return fileDescriptor_8ac8f3da550fa1c4, []int{42} } func (m *EventInvalidGrant) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2311,7 +2505,7 @@ func (m *EventOrderCancelFail) Reset() { *m = EventOrderCancelFail{} } func (m *EventOrderCancelFail) String() string { return proto.CompactTextString(m) } func (*EventOrderCancelFail) ProtoMessage() {} func (*EventOrderCancelFail) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{40} + return fileDescriptor_8ac8f3da550fa1c4, []int{43} } func (m *EventOrderCancelFail) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2385,7 +2579,7 @@ func (m *EventDerivativeOrdersV2Migration) Reset() { *m = EventDerivativ func (m *EventDerivativeOrdersV2Migration) String() string { return proto.CompactTextString(m) } func (*EventDerivativeOrdersV2Migration) ProtoMessage() {} func (*EventDerivativeOrdersV2Migration) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{41} + return fileDescriptor_8ac8f3da550fa1c4, []int{44} } func (m *EventDerivativeOrdersV2Migration) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2454,7 +2648,7 @@ func (m *DerivativeOrderV2Changes) Reset() { *m = DerivativeOrderV2Chang func (m *DerivativeOrderV2Changes) String() string { return proto.CompactTextString(m) } func (*DerivativeOrderV2Changes) ProtoMessage() {} func (*DerivativeOrderV2Changes) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{42} + return fileDescriptor_8ac8f3da550fa1c4, []int{45} } func (m *DerivativeOrderV2Changes) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2507,7 +2701,7 @@ func (m *EventSpotOrdersV2Migration) Reset() { *m = EventSpotOrdersV2Mig func (m *EventSpotOrdersV2Migration) String() string { return proto.CompactTextString(m) } func (*EventSpotOrdersV2Migration) ProtoMessage() {} func (*EventSpotOrdersV2Migration) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{43} + return fileDescriptor_8ac8f3da550fa1c4, []int{46} } func (m *EventSpotOrdersV2Migration) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2572,7 +2766,7 @@ func (m *EventTriggerConditionalMarketOrderFailed) Reset() { func (m *EventTriggerConditionalMarketOrderFailed) String() string { return proto.CompactTextString(m) } func (*EventTriggerConditionalMarketOrderFailed) ProtoMessage() {} func (*EventTriggerConditionalMarketOrderFailed) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{44} + return fileDescriptor_8ac8f3da550fa1c4, []int{47} } func (m *EventTriggerConditionalMarketOrderFailed) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2651,7 +2845,7 @@ func (m *EventTriggerConditionalLimitOrderFailed) Reset() { func (m *EventTriggerConditionalLimitOrderFailed) String() string { return proto.CompactTextString(m) } func (*EventTriggerConditionalLimitOrderFailed) ProtoMessage() {} func (*EventTriggerConditionalLimitOrderFailed) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{45} + return fileDescriptor_8ac8f3da550fa1c4, []int{48} } func (m *EventTriggerConditionalLimitOrderFailed) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2732,7 +2926,7 @@ func (m *SpotOrderV2Changes) Reset() { *m = SpotOrderV2Changes{} } func (m *SpotOrderV2Changes) String() string { return proto.CompactTextString(m) } func (*SpotOrderV2Changes) ProtoMessage() {} func (*SpotOrderV2Changes) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{46} + return fileDescriptor_8ac8f3da550fa1c4, []int{49} } func (m *SpotOrderV2Changes) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2783,7 +2977,7 @@ func (m *EventDerivativePositionV2Migration) Reset() { *m = EventDerivat func (m *EventDerivativePositionV2Migration) String() string { return proto.CompactTextString(m) } func (*EventDerivativePositionV2Migration) ProtoMessage() {} func (*EventDerivativePositionV2Migration) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{47} + return fileDescriptor_8ac8f3da550fa1c4, []int{50} } func (m *EventDerivativePositionV2Migration) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2830,7 +3024,7 @@ func (m *EventPositionTransfer) Reset() { *m = EventPositionTransfer{} } func (m *EventPositionTransfer) String() string { return proto.CompactTextString(m) } func (*EventPositionTransfer) ProtoMessage() {} func (*EventPositionTransfer) Descriptor() ([]byte, []int) { - return fileDescriptor_8ac8f3da550fa1c4, []int{48} + return fileDescriptor_8ac8f3da550fa1c4, []int{51} } func (m *EventPositionTransfer) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2882,6 +3076,9 @@ func (m *EventPositionTransfer) GetDestinationSubaccountId() string { func init() { proto.RegisterType((*EventBatchSpotExecution)(nil), "injective.exchange.v2.EventBatchSpotExecution") + proto.RegisterType((*EventSwapExecuted)(nil), "injective.exchange.v2.EventSwapExecuted") + proto.RegisterType((*EventSwapParamsUpdated)(nil), "injective.exchange.v2.EventSwapParamsUpdated") + proto.RegisterType((*SwapHopExecution)(nil), "injective.exchange.v2.SwapHopExecution") proto.RegisterType((*EventBatchDerivativeExecution)(nil), "injective.exchange.v2.EventBatchDerivativeExecution") proto.RegisterType((*EventLostFundsFromLiquidation)(nil), "injective.exchange.v2.EventLostFundsFromLiquidation") proto.RegisterType((*EventLostFundsFromCrossPoolLiquidation)(nil), "injective.exchange.v2.EventLostFundsFromCrossPoolLiquidation") @@ -2937,169 +3134,182 @@ func init() { } var fileDescriptor_8ac8f3da550fa1c4 = []byte{ - // 2580 bytes of a gzipped FileDescriptorProto + // 2795 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x5a, 0xcd, 0x6f, 0xdc, 0xc6, - 0x15, 0x37, 0x57, 0xb2, 0xac, 0x7d, 0x2b, 0x4b, 0x16, 0x2d, 0xd9, 0x6b, 0x3b, 0x96, 0x65, 0xc6, - 0x5f, 0x71, 0x92, 0x5d, 0x5b, 0x41, 0x11, 0xa0, 0x5f, 0x81, 0x3e, 0x6d, 0x05, 0x92, 0xa3, 0x50, - 0x76, 0x52, 0xb4, 0x30, 0xd8, 0x59, 0x72, 0x76, 0x77, 0x22, 0x2e, 0x87, 0xe2, 0x90, 0x2b, 0x6f, - 0x6f, 0x29, 0x7a, 0xc8, 0x2d, 0xbd, 0x14, 0x0d, 0x50, 0xf4, 0xd6, 0x5b, 0x2f, 0xed, 0xad, 0x40, - 0x0f, 0x45, 0x73, 0x69, 0x8e, 0x69, 0x4f, 0x41, 0x80, 0x06, 0x85, 0x7d, 0x69, 0xff, 0x86, 0x5e, - 0x0a, 0xce, 0x07, 0xc9, 0xfd, 0xde, 0x95, 0x1d, 0xa4, 0xc8, 0x6d, 0xf9, 0xf8, 0xbe, 0xe6, 0x37, - 0xef, 0xbd, 0x79, 0xf3, 0xb8, 0x60, 0x10, 0xef, 0x03, 0x6c, 0x87, 0xa4, 0x89, 0xcb, 0xf8, 0x89, - 0x5d, 0x47, 0x5e, 0x0d, 0x97, 0x9b, 0x2b, 0x65, 0xdc, 0xc4, 0x5e, 0xc8, 0x4a, 0x7e, 0x40, 0x43, - 0xaa, 0x2f, 0x26, 0x3c, 0x25, 0xc5, 0x53, 0x6a, 0xae, 0x5c, 0x5c, 0xa8, 0xd1, 0x1a, 0xe5, 0x1c, - 0xe5, 0xf8, 0x97, 0x60, 0xbe, 0xb8, 0x64, 0x53, 0xd6, 0xa0, 0xac, 0x5c, 0x41, 0x0c, 0x97, 0x9b, - 0x77, 0x2b, 0x38, 0x44, 0x77, 0xcb, 0x36, 0x25, 0x9e, 0x7c, 0x7f, 0x3d, 0x35, 0x48, 0x03, 0x64, - 0xbb, 0x29, 0x93, 0x78, 0x94, 0x6c, 0xd7, 0xfa, 0xf8, 0xa5, 0xec, 0x0b, 0xae, 0x3e, 0xde, 0x37, - 0x50, 0x70, 0x80, 0x43, 0xc9, 0x73, 0xb5, 0x37, 0x0f, 0x0d, 0x1c, 0x1c, 0x08, 0x16, 0xe3, 0x1f, - 0x1a, 0x9c, 0xdf, 0x8c, 0x57, 0xbc, 0x86, 0x42, 0xbb, 0xbe, 0xef, 0xd3, 0x70, 0xf3, 0x09, 0xb6, - 0xa3, 0x90, 0x50, 0x4f, 0xbf, 0x04, 0x79, 0xa1, 0xce, 0x22, 0x4e, 0x51, 0x5b, 0xd6, 0x6e, 0xe5, - 0xcd, 0x69, 0x41, 0xd8, 0x76, 0xf4, 0x45, 0x98, 0x22, 0xcc, 0xaa, 0x44, 0xad, 0x62, 0x6e, 0x59, - 0xbb, 0x35, 0x6d, 0x9e, 0x24, 0x6c, 0x2d, 0x6a, 0xe9, 0x6f, 0xc3, 0x69, 0xac, 0x14, 0x3c, 0x6c, - 0xf9, 0xb8, 0x38, 0xb1, 0xac, 0xdd, 0x9a, 0x5d, 0xb9, 0x56, 0xea, 0x09, 0x64, 0x69, 0x33, 0xcb, - 0x6b, 0xb6, 0x8b, 0xea, 0x6f, 0xc2, 0x54, 0x18, 0x20, 0x07, 0xb3, 0xe2, 0xe4, 0xf2, 0xc4, 0xad, - 0xc2, 0xca, 0x95, 0x3e, 0x4a, 0x1e, 0xc6, 0x4c, 0x3b, 0xb4, 0x66, 0x4a, 0x76, 0xe3, 0x9f, 0x39, - 0xb8, 0x9c, 0x2e, 0x6a, 0x03, 0x07, 0xa4, 0x89, 0x62, 0xa9, 0xe7, 0x5b, 0xda, 0x75, 0x98, 0x25, - 0xcc, 0x72, 0xc9, 0x61, 0x44, 0x1c, 0x14, 0x6b, 0xe1, 0x6b, 0x9b, 0x36, 0x4f, 0x13, 0xb6, 0x93, - 0x12, 0x75, 0x13, 0x74, 0x3b, 0x6a, 0x44, 0x2e, 0xb7, 0x68, 0x55, 0x23, 0xcf, 0x21, 0x5e, 0xad, - 0x38, 0x19, 0xdb, 0x58, 0x7b, 0xf9, 0xb3, 0xaf, 0xae, 0x68, 0x5f, 0x7e, 0x75, 0xe5, 0x92, 0x88, - 0x14, 0xe6, 0x1c, 0x94, 0x08, 0x2d, 0x37, 0x50, 0x58, 0x2f, 0xed, 0xe0, 0x1a, 0xb2, 0x5b, 0x1b, - 0xd8, 0x36, 0xe7, 0x53, 0xf1, 0x2d, 0x21, 0xdd, 0x8d, 0xea, 0xc9, 0xe3, 0xa3, 0xba, 0x9a, 0xa0, - 0x3a, 0xc5, 0x51, 0x7d, 0xa5, 0x8f, 0x92, 0x14, 0xb6, 0x2e, 0x7c, 0x3f, 0x55, 0xf8, 0xee, 0x50, - 0x16, 0xc6, 0x3e, 0xb2, 0xad, 0x80, 0x36, 0xb2, 0x20, 0x0c, 0xc4, 0xf7, 0x65, 0x38, 0xcd, 0xa2, - 0x0a, 0xb2, 0x6d, 0x1a, 0x79, 0x9c, 0x21, 0x86, 0x79, 0xc6, 0x9c, 0x49, 0x89, 0xdb, 0x8e, 0xfe, - 0x04, 0x6e, 0xba, 0x94, 0x85, 0x1c, 0x40, 0x66, 0x55, 0x03, 0xda, 0xb0, 0x50, 0x13, 0x11, 0x17, - 0x55, 0x5c, 0x6c, 0x39, 0x51, 0x40, 0xbc, 0x9a, 0xe5, 0xa3, 0x16, 0x8d, 0x42, 0xbe, 0x0d, 0x02, - 0xdb, 0x13, 0xc3, 0xb0, 0x35, 0xdc, 0xac, 0xc7, 0xab, 0x4a, 0xe1, 0x06, 0xd7, 0xb7, 0xc7, 0xd5, - 0xe9, 0x18, 0x2e, 0x77, 0x5a, 0xe6, 0x19, 0x63, 0xd9, 0xc8, 0xb3, 0xb1, 0xcb, 0x32, 0x7b, 0x39, - 0xd4, 0xde, 0x85, 0x36, 0x7b, 0xef, 0xc4, 0x6a, 0xd6, 0x85, 0x16, 0xe3, 0xdf, 0x1a, 0xdc, 0xe8, - 0x06, 0x71, 0x3d, 0xa0, 0x8c, 0xed, 0x51, 0xea, 0x66, 0xd1, 0xec, 0x02, 0x4c, 0xeb, 0x01, 0xd8, - 0x15, 0x28, 0x1c, 0x46, 0x34, 0xc4, 0x96, 0x83, 0x3d, 0xda, 0xe0, 0x98, 0xe6, 0x4d, 0xe0, 0xa4, - 0x8d, 0x98, 0xf2, 0xcd, 0x21, 0x6a, 0xfc, 0x42, 0x83, 0x97, 0x7a, 0xe5, 0xe3, 0x1e, 0x65, 0x64, - 0x78, 0xb8, 0xdc, 0x83, 0xbc, 0x2f, 0x19, 0x59, 0x31, 0x37, 0x30, 0x66, 0xf7, 0x13, 0x40, 0x94, - 0x6a, 0x33, 0x95, 0x35, 0xfe, 0xac, 0xc1, 0x25, 0xee, 0x46, 0xea, 0xc1, 0x2e, 0x37, 0xb2, 0x87, - 0x22, 0x86, 0x9d, 0xc1, 0x5e, 0x5c, 0x85, 0x19, 0x86, 0xc3, 0xd0, 0xc5, 0x96, 0x1f, 0x10, 0x1b, - 0x4b, 0x7c, 0x0b, 0x82, 0xb6, 0x17, 0x93, 0xf4, 0x12, 0x9c, 0x0d, 0x69, 0x88, 0x5c, 0xab, 0x41, - 0x18, 0x8b, 0xd1, 0xe4, 0x48, 0x0b, 0x30, 0xcd, 0x79, 0xfe, 0x6a, 0x57, 0xbc, 0xe1, 0x78, 0xe9, - 0xaf, 0x81, 0xde, 0xc6, 0x69, 0x05, 0x28, 0xc4, 0x22, 0xba, 0xcc, 0x33, 0x8d, 0x0c, 0xa7, 0x89, - 0x42, 0x6c, 0xec, 0xc1, 0x05, 0xee, 0xfc, 0x3e, 0xb7, 0xe8, 0x08, 0xcf, 0xd7, 0x90, 0x1b, 0x87, - 0xd3, 0x60, 0xd7, 0xcf, 0xc1, 0x14, 0x6a, 0xc4, 0xa0, 0x48, 0xa7, 0xe5, 0x93, 0xb1, 0x2f, 0x77, - 0xe5, 0x01, 0x7d, 0x81, 0x4a, 0x3f, 0x56, 0x20, 0x4b, 0x5d, 0xb8, 0x45, 0x3d, 0x67, 0x0d, 0x79, - 0x07, 0x41, 0xe4, 0x87, 0x76, 0xeb, 0xb9, 0x41, 0xbe, 0x03, 0x0b, 0x0a, 0x34, 0xa9, 0x27, 0x8b, - 0xb2, 0x02, 0x54, 0x18, 0xe7, 0xe0, 0x19, 0x1f, 0x69, 0x50, 0xe4, 0x1e, 0xad, 0xba, 0xae, 0x0a, - 0x0b, 0x76, 0x1f, 0x91, 0xc0, 0x8e, 0xc2, 0xe7, 0x76, 0xa7, 0xf7, 0x1e, 0x4e, 0xf4, 0xd9, 0xc3, - 0x0f, 0x60, 0x49, 0xe4, 0x01, 0xf1, 0x50, 0xd0, 0x7a, 0xc7, 0xe7, 0xae, 0x08, 0x5f, 0x1f, 0xf9, - 0x0e, 0x0a, 0xb1, 0x7e, 0x1f, 0xa6, 0x84, 0x79, 0xee, 0x4c, 0x61, 0xe5, 0x76, 0x9f, 0x48, 0xef, - 0xa1, 0x61, 0x6d, 0x32, 0xce, 0x57, 0x53, 0xca, 0x1b, 0x4e, 0x9f, 0x60, 0x97, 0x86, 0x36, 0x3b, - 0x0c, 0xdd, 0x1c, 0x7a, 0x0c, 0xf4, 0xb4, 0xf2, 0x17, 0x0d, 0x74, 0x11, 0x44, 0xf8, 0x28, 0xee, - 0x1e, 0x78, 0x89, 0x63, 0x83, 0x61, 0xdd, 0x00, 0xa8, 0x44, 0x2d, 0x51, 0x54, 0x55, 0x46, 0x5f, - 0xef, 0x97, 0xd1, 0x3e, 0x0d, 0x77, 0x48, 0x83, 0x08, 0xc5, 0x66, 0xbe, 0x12, 0xb5, 0xa4, 0x89, - 0x2d, 0x28, 0x30, 0xec, 0xba, 0x4a, 0xcd, 0xc4, 0x38, 0x6a, 0x20, 0x96, 0x14, 0x7a, 0x8c, 0xbf, - 0xab, 0xf0, 0x78, 0x80, 0x8f, 0xd2, 0xc5, 0x8e, 0xb2, 0x8e, 0xb7, 0x7b, 0xac, 0xe3, 0xd5, 0xa1, - 0x30, 0xf6, 0x5e, 0xcd, 0x4e, 0xaf, 0xd5, 0x8c, 0xa5, 0x2c, 0xbb, 0xa6, 0x26, 0x2c, 0xf0, 0x25, - 0x89, 0xb3, 0x26, 0xd9, 0x97, 0xc1, 0xcb, 0x59, 0x85, 0x93, 0xdc, 0x3a, 0x0f, 0xf3, 0x51, 0xa1, - 0x94, 0xe1, 0x20, 0x24, 0x8d, 0x1f, 0xc1, 0xa2, 0xa8, 0x51, 0x3e, 0x0d, 0xdb, 0xa2, 0xed, 0xad, - 0x8e, 0x68, 0xbb, 0x3a, 0x40, 0x79, 0xcf, 0x38, 0xfb, 0x24, 0x07, 0x17, 0xb9, 0xea, 0x3d, 0x1c, - 0xf8, 0x38, 0x8c, 0x90, 0xfb, 0x35, 0x44, 0xb3, 0xee, 0xc0, 0xa2, 0xaf, 0xf4, 0xab, 0xf2, 0x42, - 0xbc, 0x2a, 0x95, 0x90, 0xf4, 0x4b, 0xc6, 0x0e, 0x9f, 0xb6, 0xbd, 0x2a, 0xe5, 0x8a, 0x35, 0xf3, - 0xac, 0xdf, 0xfd, 0x4a, 0xdf, 0x85, 0x53, 0xaa, 0x2d, 0x9c, 0xe0, 0x7a, 0x5f, 0x1f, 0x4d, 0xaf, - 0xec, 0x06, 0xa5, 0x6a, 0xa5, 0xc3, 0xf8, 0x52, 0x93, 0x55, 0x65, 0xf3, 0x89, 0x4f, 0x82, 0xd6, - 0x56, 0x14, 0x46, 0x01, 0x66, 0x5f, 0x07, 0x3c, 0x87, 0x70, 0x11, 0x73, 0x1b, 0x56, 0x55, 0x18, - 0x69, 0xc3, 0x48, 0xac, 0xa5, 0xd4, 0xb7, 0x27, 0xed, 0x72, 0x2e, 0x83, 0xd3, 0x79, 0xdc, 0xfb, - 0xb5, 0xf1, 0xb7, 0x1c, 0x5c, 0xed, 0xb5, 0xef, 0x12, 0x0b, 0xb9, 0xbe, 0x81, 0x71, 0x9d, 0x81, - 0x3b, 0x77, 0x5c, 0xb8, 0x4f, 0x24, 0x70, 0xeb, 0xb7, 0x61, 0x9e, 0x30, 0xab, 0x4e, 0xa3, 0xc0, - 0x6d, 0x59, 0xd9, 0x7d, 0x9c, 0x36, 0xe7, 0x08, 0xbb, 0xcf, 0xe9, 0xaa, 0x6f, 0xdf, 0x82, 0x19, - 0xc9, 0x91, 0x39, 0xdb, 0x47, 0xbb, 0x05, 0x14, 0xa4, 0x60, 0x7c, 0x6e, 0xe8, 0x6b, 0x00, 0xf1, - 0x72, 0xe4, 0x31, 0x74, 0x72, 0x74, 0x2d, 0x1c, 0x16, 0x7e, 0x52, 0x19, 0xbf, 0xd6, 0xe0, 0x9c, - 0x48, 0xce, 0xa4, 0x49, 0xda, 0xc0, 0xbc, 0x39, 0x8a, 0x5b, 0x47, 0x16, 0xd8, 0x16, 0x72, 0x9c, - 0x00, 0x33, 0x26, 0x01, 0x04, 0x16, 0xd8, 0xab, 0x82, 0x32, 0x5a, 0xc7, 0xfe, 0x66, 0xd2, 0x11, - 0x88, 0x48, 0xb8, 0x50, 0x12, 0x9e, 0x95, 0xe2, 0xfb, 0x70, 0x49, 0x5e, 0x75, 0x4b, 0xeb, 0x94, - 0x78, 0x2a, 0xac, 0x64, 0xcb, 0xf0, 0x89, 0xba, 0x83, 0xa6, 0x9e, 0xbd, 0x4f, 0xc2, 0xba, 0x13, - 0xa0, 0xa3, 0x91, 0x5b, 0x5f, 0x87, 0x85, 0x89, 0xff, 0xb2, 0xf5, 0x75, 0x58, 0xa8, 0xfc, 0x3f, - 0xb6, 0x6b, 0x7f, 0x54, 0xb9, 0x95, 0xba, 0x26, 0xbb, 0xa3, 0x87, 0x01, 0xf2, 0x58, 0x15, 0x07, - 0x71, 0x3c, 0xc4, 0xe0, 0x75, 0x7b, 0x99, 0x37, 0xe7, 0x58, 0x60, 0xef, 0x67, 0x1d, 0xbd, 0x0d, - 0xf3, 0xb1, 0xa3, 0xdd, 0x58, 0xe6, 0xcd, 0x39, 0x87, 0x85, 0xfb, 0x2f, 0x04, 0xce, 0xdf, 0xa8, - 0x94, 0x49, 0xd5, 0x99, 0x84, 0x1d, 0xec, 0x05, 0xb4, 0x4a, 0x5c, 0x2c, 0x32, 0xc6, 0xe9, 0x0d, - 0x6c, 0xbe, 0x03, 0xd8, 0xc7, 0x70, 0xc6, 0x0f, 0x70, 0x93, 0xd0, 0x88, 0x59, 0xbe, 0x90, 0x97, - 0x39, 0xf4, 0xda, 0xd0, 0x0e, 0x3c, 0x63, 0x53, 0x3a, 0x38, 0xa7, 0x74, 0x49, 0xb2, 0xbe, 0x0f, - 0x05, 0x0f, 0x1f, 0x25, 0x9a, 0x27, 0x8e, 0xad, 0x19, 0x3c, 0x7c, 0xa4, 0x94, 0x5e, 0x06, 0x20, - 0xcc, 0x72, 0x70, 0x15, 0x45, 0x6e, 0xc8, 0x33, 0x6e, 0xda, 0xcc, 0x13, 0xb6, 0x21, 0x08, 0x46, - 0x3d, 0x3b, 0xef, 0x90, 0x09, 0x20, 0xab, 0xc8, 0x2e, 0xcc, 0x39, 0x82, 0x60, 0x45, 0x9c, 0x12, - 0xa7, 0x42, 0x7c, 0x0e, 0x5f, 0xeb, 0x5b, 0x2e, 0x33, 0xe2, 0xe6, 0xac, 0x93, 0x7d, 0x64, 0xc6, - 0xa7, 0x1a, 0x5c, 0xea, 0x2c, 0xa8, 0x99, 0x1b, 0xa0, 0xfe, 0x08, 0x66, 0x64, 0xd1, 0x12, 0xc7, - 0xae, 0x36, 0x70, 0xf9, 0x3d, 0x35, 0xc9, 0xea, 0x59, 0x68, 0xa4, 0x24, 0x7d, 0x07, 0xe6, 0xc4, - 0x45, 0xd5, 0x3a, 0x8c, 0x90, 0x17, 0x92, 0x50, 0x8c, 0x31, 0x46, 0xbc, 0xce, 0xcd, 0x0a, 0xd9, - 0x77, 0xa5, 0xa8, 0xf1, 0x5b, 0x75, 0xee, 0x0a, 0xa7, 0x3b, 0x1a, 0xa4, 0xc1, 0x85, 0xf7, 0x1a, - 0xf0, 0xd1, 0x48, 0x83, 0x48, 0x61, 0x39, 0x4e, 0x69, 0x27, 0xea, 0x26, 0x14, 0xdc, 0xf8, 0x51, - 0xa2, 0x20, 0x82, 0x60, 0x9c, 0xce, 0x47, 0x82, 0x00, 0x6e, 0x42, 0xd1, 0xeb, 0x70, 0x36, 0x0b, - 0xad, 0xbc, 0xb9, 0xf3, 0x60, 0x28, 0xac, 0xac, 0x8c, 0x83, 0xb0, 0x70, 0x52, 0x9a, 0x98, 0x6f, - 0x74, 0xbe, 0x30, 0x2a, 0xb2, 0x79, 0xdc, 0xc2, 0x78, 0x83, 0x30, 0x1e, 0x9e, 0xfb, 0x76, 0x1d, - 0x3b, 0x91, 0x8b, 0xf5, 0x2d, 0x98, 0x66, 0xf2, 0xf7, 0x90, 0x6e, 0xbe, 0x87, 0xb4, 0x99, 0xc8, - 0x1a, 0x5f, 0x68, 0xb0, 0xcc, 0x8d, 0x3c, 0x0c, 0x10, 0x3f, 0x12, 0xf0, 0x11, 0x0a, 0x9c, 0x75, - 0xd4, 0xf0, 0x11, 0xa9, 0x79, 0x32, 0x78, 0x1f, 0xc1, 0x69, 0x5b, 0x52, 0xc4, 0x71, 0x2c, 0x2c, - 0xde, 0x19, 0x30, 0x33, 0xeb, 0x52, 0x15, 0x9f, 0xb8, 0xe6, 0x8c, 0x9d, 0x79, 0xd2, 0x1f, 0xc3, - 0x62, 0xa2, 0x36, 0xe0, 0xcc, 0x96, 0x4f, 0xa9, 0x3b, 0xec, 0x22, 0xae, 0x34, 0x0a, 0xfd, 0x7b, - 0x94, 0xba, 0xe6, 0x59, 0xbb, 0x8b, 0xc6, 0x0c, 0x5f, 0x96, 0xd7, 0x36, 0x77, 0x36, 0x08, 0x0b, - 0x03, 0x52, 0x11, 0x93, 0xba, 0x07, 0x30, 0xa7, 0x8a, 0x94, 0xb0, 0xaf, 0x92, 0xb2, 0x5f, 0x7f, - 0xba, 0x2a, 0x8b, 0x84, 0x60, 0x36, 0x67, 0x51, 0xdb, 0xb3, 0xf1, 0x07, 0x0d, 0x0c, 0xd5, 0xee, - 0xaf, 0x53, 0xcf, 0xe1, 0xd7, 0x41, 0x34, 0x5e, 0x60, 0x7f, 0xbf, 0xbd, 0x53, 0xbe, 0x31, 0x34, - 0xa0, 0x44, 0x87, 0x2e, 0x84, 0x74, 0x1d, 0x26, 0xeb, 0x88, 0xd5, 0x79, 0xa4, 0xcf, 0x98, 0xfc, - 0x77, 0x6c, 0x8e, 0xa8, 0x6e, 0x4a, 0xd6, 0xac, 0x69, 0x22, 0xfb, 0x20, 0xe3, 0x57, 0x39, 0xb8, - 0x9e, 0xc9, 0xc1, 0xe3, 0x7a, 0xfd, 0xcd, 0xa5, 0x63, 0x67, 0xa5, 0x9b, 0x7c, 0x21, 0x95, 0xce, - 0xf8, 0xaf, 0x9a, 0xa0, 0xf5, 0x47, 0xe4, 0x61, 0x40, 0x6a, 0xb5, 0x5e, 0xc0, 0xcc, 0x64, 0x80, - 0xb9, 0x01, 0xb3, 0x12, 0x03, 0xc9, 0x2e, 0x91, 0xe9, 0xa0, 0xea, 0x77, 0x60, 0x21, 0x14, 0x3f, - 0xb1, 0x23, 0x0b, 0x4b, 0x66, 0x23, 0xf5, 0xe4, 0x1d, 0xb7, 0x7c, 0x3f, 0xde, 0xd6, 0xdb, 0x30, - 0xef, 0xbb, 0xc8, 0x6e, 0x67, 0x9f, 0xe4, 0xec, 0x73, 0xe2, 0x45, 0xca, 0x5b, 0x82, 0xb3, 0x9d, - 0xda, 0x6d, 0xe2, 0x88, 0x66, 0xcf, 0x9c, 0x6f, 0x57, 0xbe, 0x4e, 0x1c, 0xc3, 0x85, 0x59, 0xbe, - 0x78, 0x4e, 0xd8, 0x42, 0xc4, 0xd5, 0x8b, 0x70, 0x4a, 0x06, 0xbb, 0x5c, 0xa2, 0x7a, 0xd4, 0xcf, - 0xc1, 0x54, 0x6c, 0x1a, 0x8b, 0xb4, 0x9d, 0x31, 0xe5, 0x93, 0xbe, 0x00, 0x27, 0xab, 0x2e, 0xaa, - 0x89, 0xfb, 0xe6, 0x69, 0x53, 0x3c, 0xc4, 0x01, 0x6a, 0x13, 0x47, 0x4c, 0xdd, 0xf3, 0x26, 0xff, - 0x6d, 0x7c, 0xac, 0xc1, 0xab, 0x62, 0x88, 0x12, 0xd2, 0x06, 0xb1, 0x33, 0x3b, 0xb3, 0x85, 0xf1, - 0x6e, 0xe4, 0x86, 0xc4, 0x77, 0x09, 0x0e, 0x98, 0x6a, 0x2f, 0x7e, 0x0a, 0xe7, 0xd4, 0x78, 0x06, - 0x63, 0xab, 0x91, 0x32, 0xc8, 0xec, 0xed, 0x57, 0x09, 0x65, 0xeb, 0x9d, 0xd5, 0x69, 0x2e, 0x34, - 0xba, 0x89, 0xcc, 0xf8, 0x93, 0x26, 0x2f, 0xb9, 0xdc, 0x8b, 0x0a, 0xa5, 0x07, 0xb2, 0x12, 0x6e, - 0xc3, 0x0c, 0xf3, 0x69, 0xe7, 0x19, 0xde, 0x2f, 0x49, 0x3b, 0xa4, 0xcd, 0x42, 0x2c, 0x2b, 0x8f, - 0x70, 0xfd, 0x11, 0xe8, 0x4e, 0x12, 0x50, 0x89, 0xc2, 0xdc, 0x58, 0x0a, 0xe7, 0x53, 0x0d, 0xaa, - 0x33, 0xb0, 0x61, 0xae, 0xd3, 0xe9, 0x33, 0x30, 0xc1, 0xf0, 0x21, 0xdf, 0xb7, 0x49, 0x33, 0xfe, - 0xa9, 0xff, 0x10, 0xf2, 0x54, 0x31, 0xc9, 0x42, 0xb3, 0x3c, 0xcc, 0xa4, 0x99, 0x8a, 0x18, 0xbf, - 0xd3, 0x20, 0x9f, 0xbc, 0x18, 0x9c, 0x00, 0xdf, 0x13, 0x83, 0x0c, 0x17, 0x37, 0x71, 0x52, 0xd9, - 0x5f, 0xea, 0x63, 0x6b, 0x27, 0x66, 0xe2, 0x93, 0x0b, 0xfe, 0x8b, 0xe9, 0x3f, 0x90, 0x93, 0x0b, - 0x29, 0x3d, 0x31, 0x82, 0x34, 0x1f, 0x55, 0x08, 0x71, 0xe3, 0x48, 0x1e, 0xa0, 0xf7, 0x02, 0xe4, - 0x85, 0xab, 0x51, 0x58, 0xa7, 0x01, 0xf9, 0x19, 0x1f, 0x7b, 0xb3, 0x38, 0xa0, 0x6b, 0x31, 0x59, - 0x36, 0x47, 0x79, 0x53, 0x3d, 0xea, 0xab, 0x30, 0xc5, 0x7f, 0x0e, 0x3b, 0x87, 0xba, 0xb5, 0x9a, - 0x52, 0xd0, 0xf8, 0x50, 0xc5, 0x8f, 0xe0, 0x89, 0x65, 0xc5, 0xb4, 0x3d, 0xb1, 0x8a, 0xdb, 0xad, - 0xe2, 0xac, 0x3f, 0xb9, 0x76, 0x7f, 0xbe, 0xd3, 0xd6, 0xac, 0xe7, 0xd7, 0x2e, 0xcb, 0x5e, 0x6b, - 0xb1, 0xbb, 0xd7, 0xda, 0xf6, 0xc2, 0xa4, 0x55, 0xbf, 0x07, 0xf3, 0xdc, 0x85, 0x6d, 0xaf, 0x89, - 0x5c, 0xe2, 0x70, 0x4f, 0x8e, 0x63, 0xdf, 0xf8, 0x7d, 0x5b, 0x32, 0x88, 0x52, 0xce, 0x6b, 0xc2, - 0xf8, 0x1f, 0x62, 0x3a, 0xef, 0x00, 0x97, 0x01, 0x3a, 0x6a, 0x5d, 0x5e, 0x86, 0x19, 0x2f, 0x5b, - 0x67, 0x60, 0x22, 0x2e, 0x53, 0x62, 0x6a, 0x1d, 0xff, 0xd4, 0x97, 0xa1, 0xe0, 0x60, 0x66, 0x07, - 0x84, 0x0f, 0x27, 0x65, 0x01, 0xcb, 0x92, 0xe2, 0xc2, 0xbd, 0xdc, 0x31, 0x9b, 0x14, 0x83, 0xab, - 0xf7, 0x56, 0x76, 0x49, 0x2d, 0x18, 0xe1, 0x13, 0xd2, 0x4f, 0x60, 0x3e, 0x19, 0xbd, 0x59, 0x62, - 0xbb, 0x55, 0x28, 0x94, 0x47, 0x3b, 0x8d, 0xdf, 0x5b, 0x59, 0x17, 0x62, 0xe6, 0x9c, 0x9a, 0xc2, - 0x49, 0x82, 0xfe, 0x18, 0xf4, 0x74, 0x16, 0x97, 0x68, 0x9f, 0x38, 0x9e, 0xf6, 0x33, 0xc9, 0x58, - 0x4e, 0x52, 0x8c, 0xbf, 0xe6, 0xa0, 0xd8, 0x8f, 0x5d, 0xc1, 0xa9, 0xa5, 0x70, 0xaa, 0x76, 0x21, - 0x97, 0x69, 0x17, 0xee, 0x82, 0xe6, 0x8f, 0xf3, 0x91, 0x46, 0xf3, 0x63, 0x91, 0xc3, 0x71, 0xbe, - 0x5c, 0x69, 0x87, 0xb1, 0x48, 0x23, 0x33, 0x6c, 0x18, 0x2e, 0xd2, 0x88, 0x45, 0xaa, 0xc5, 0xa9, - 0x31, 0x44, 0xaa, 0xfa, 0x1b, 0x90, 0x0b, 0xfd, 0xe2, 0xa9, 0xd1, 0x67, 0x1a, 0xb9, 0xd0, 0x37, - 0xfe, 0xa3, 0xc9, 0x6b, 0x49, 0x3a, 0x73, 0x1e, 0x39, 0x76, 0x1e, 0xf5, 0x8f, 0x9d, 0x57, 0x06, - 0x8c, 0x25, 0x87, 0x45, 0xcd, 0xfb, 0x03, 0xa2, 0x66, 0x0c, 0xbd, 0xdd, 0xf1, 0xf2, 0xf3, 0x1c, - 0xdc, 0x92, 0x4d, 0x32, 0xef, 0x01, 0x32, 0xdd, 0x4e, 0xf6, 0x18, 0x46, 0xc4, 0x1d, 0xf6, 0x0d, - 0x6b, 0xa4, 0x7c, 0x6f, 0x9f, 0x35, 0x8d, 0x11, 0x64, 0xe9, 0xac, 0xa9, 0xa3, 0x66, 0x88, 0x86, - 0x27, 0x53, 0x33, 0xae, 0x40, 0x41, 0xf6, 0x33, 0x16, 0x0e, 0x02, 0x59, 0x21, 0x40, 0x92, 0x36, - 0x83, 0x40, 0x65, 0xc1, 0x54, 0x92, 0x05, 0xc6, 0x87, 0x39, 0xb8, 0xd9, 0x07, 0x84, 0xb4, 0xf5, - 0xfc, 0x96, 0x63, 0xf0, 0x51, 0x0e, 0xf4, 0xee, 0x88, 0xf9, 0x7f, 0x2b, 0x19, 0xd5, 0xb1, 0x4a, - 0x86, 0xca, 0xff, 0xa9, 0xf1, 0xf2, 0xff, 0x40, 0x5e, 0xe2, 0xba, 0xbf, 0x25, 0x67, 0xcb, 0xc0, - 0x26, 0x4c, 0xab, 0xaf, 0xbf, 0xf2, 0x3a, 0x3c, 0xfc, 0xcf, 0x0e, 0xc9, 0x87, 0xe3, 0x44, 0xd4, - 0x78, 0xa6, 0xc9, 0xcf, 0x1a, 0xea, 0x5d, 0x32, 0xfb, 0x1b, 0x18, 0x69, 0x77, 0x60, 0x81, 0xd1, - 0x28, 0xb0, 0x71, 0xcf, 0x79, 0x9f, 0x2e, 0xde, 0xb5, 0x8d, 0xfc, 0xbe, 0x0b, 0x17, 0x1c, 0xcc, - 0x42, 0xe2, 0x71, 0xf7, 0x3b, 0xc4, 0xc4, 0xc9, 0x7b, 0x3e, 0xc3, 0xd0, 0x26, 0xfb, 0x16, 0x4c, - 0x27, 0xf3, 0x9e, 0x31, 0xf6, 0x2c, 0x11, 0x5a, 0x3b, 0xf8, 0xec, 0xe9, 0x92, 0xf6, 0xf9, 0xd3, - 0x25, 0xed, 0x5f, 0x4f, 0x97, 0xb4, 0x5f, 0x3e, 0x5b, 0x3a, 0xf1, 0xf9, 0xb3, 0xa5, 0x13, 0x5f, - 0x3c, 0x5b, 0x3a, 0xf1, 0xe3, 0x77, 0x6b, 0x24, 0xac, 0x47, 0x95, 0x92, 0x4d, 0x1b, 0xe5, 0x6d, - 0x05, 0xdf, 0x0e, 0xaa, 0xb0, 0x72, 0x02, 0xe6, 0xeb, 0x36, 0x0d, 0x70, 0xf6, 0xb1, 0x8e, 0x88, - 0x57, 0x6e, 0x50, 0x27, 0x72, 0x31, 0x4b, 0xff, 0x7c, 0x14, 0xb6, 0x7c, 0xcc, 0xca, 0xcd, 0x95, - 0xca, 0x14, 0xff, 0xf7, 0xd1, 0x1b, 0xff, 0x0b, 0x00, 0x00, 0xff, 0xff, 0xf9, 0x8b, 0xef, 0x1f, - 0x84, 0x25, 0x00, 0x00, + 0x15, 0x37, 0x57, 0x1f, 0xd6, 0xbe, 0x95, 0x25, 0x6b, 0x2c, 0x3b, 0xb2, 0x1d, 0xcb, 0x32, 0x63, + 0xc7, 0x8e, 0x93, 0xec, 0x3a, 0x0a, 0x82, 0xa0, 0x4d, 0xdb, 0x54, 0x9f, 0xb1, 0x02, 0x39, 0x51, + 0x28, 0x3b, 0x29, 0x5a, 0x04, 0xec, 0x2c, 0x39, 0xbb, 0x3b, 0x11, 0x97, 0x43, 0x71, 0x48, 0xc9, + 0x9b, 0x5b, 0x8a, 0x1e, 0x72, 0x4b, 0x51, 0xa0, 0x68, 0x80, 0xa2, 0xb7, 0xde, 0x7a, 0x69, 0x6f, + 0x05, 0x7a, 0x28, 0x9a, 0x4b, 0x73, 0x4c, 0x7b, 0x0a, 0x02, 0x34, 0x28, 0xe2, 0x4b, 0xfb, 0x27, + 0x14, 0xbd, 0x14, 0x9c, 0x0f, 0x92, 0xfb, 0xbd, 0xab, 0x24, 0x48, 0xd1, 0x1b, 0xf9, 0xf8, 0xbe, + 0xe6, 0x37, 0x6f, 0xde, 0xbc, 0x79, 0x43, 0x30, 0xa9, 0xff, 0x0e, 0x71, 0x22, 0x7a, 0x44, 0x2a, + 0xe4, 0xa1, 0xd3, 0xc0, 0x7e, 0x9d, 0x54, 0x8e, 0x56, 0x2b, 0xe4, 0x88, 0xf8, 0x11, 0x2f, 0x07, + 0x21, 0x8b, 0x18, 0x3a, 0x9f, 0xf2, 0x94, 0x35, 0x4f, 0xf9, 0x68, 0xf5, 0xd2, 0x62, 0x9d, 0xd5, + 0x99, 0xe0, 0xa8, 0x24, 0x4f, 0x92, 0xf9, 0xd2, 0xb2, 0xc3, 0x78, 0x93, 0xf1, 0x4a, 0x15, 0x73, + 0x52, 0x39, 0x7a, 0xae, 0x4a, 0x22, 0xfc, 0x5c, 0xc5, 0x61, 0xd4, 0x57, 0xdf, 0x6f, 0x64, 0x06, + 0x59, 0x88, 0x1d, 0x2f, 0x63, 0x92, 0xaf, 0x8a, 0xed, 0x7a, 0x1f, 0xbf, 0xb4, 0x7d, 0xc9, 0xd5, + 0xc7, 0xfb, 0x26, 0x0e, 0x0f, 0x48, 0xa4, 0x78, 0xae, 0xf5, 0xe6, 0x61, 0xa1, 0x4b, 0x42, 0xc9, + 0x62, 0xfe, 0xcd, 0x80, 0xc7, 0xb6, 0x92, 0x11, 0xaf, 0xe3, 0xc8, 0x69, 0xec, 0x07, 0x2c, 0xda, + 0x7a, 0x48, 0x9c, 0x38, 0xa2, 0xcc, 0x47, 0x97, 0xa1, 0x28, 0xd5, 0xd9, 0xd4, 0x5d, 0x32, 0x56, + 0x8c, 0x5b, 0x45, 0x6b, 0x46, 0x12, 0x76, 0x5c, 0x74, 0x1e, 0xa6, 0x29, 0xb7, 0xab, 0x71, 0x6b, + 0xa9, 0xb0, 0x62, 0xdc, 0x9a, 0xb1, 0xa6, 0x28, 0x5f, 0x8f, 0x5b, 0xe8, 0x55, 0x38, 0x43, 0xb4, + 0x82, 0xfb, 0xad, 0x80, 0x2c, 0x4d, 0xac, 0x18, 0xb7, 0xe6, 0x56, 0xaf, 0x97, 0x7b, 0x02, 0x59, + 0xde, 0xca, 0xf3, 0x5a, 0xed, 0xa2, 0xe8, 0x45, 0x98, 0x8e, 0x42, 0xec, 0x12, 0xbe, 0x34, 0xb9, + 0x32, 0x71, 0xab, 0xb4, 0x7a, 0xb5, 0x8f, 0x92, 0xfb, 0x09, 0xd3, 0x2e, 0xab, 0x5b, 0x8a, 0xdd, + 0xfc, 0xf9, 0x04, 0x2c, 0x88, 0x41, 0xed, 0x1f, 0xe3, 0x40, 0x9a, 0x20, 0x2e, 0xba, 0x00, 0xd3, + 0x0e, 0xf6, 0x3c, 0x12, 0xaa, 0xb1, 0xa8, 0x37, 0xf4, 0x38, 0x14, 0x43, 0xe2, 0xd0, 0x80, 0x12, + 0x3f, 0x12, 0x83, 0x29, 0x5a, 0x19, 0x01, 0x5d, 0x85, 0x12, 0xf5, 0x83, 0x38, 0xb2, 0x5d, 0xe2, + 0xb3, 0xa6, 0x18, 0x4e, 0xd1, 0x02, 0x41, 0xda, 0x4c, 0x28, 0xe8, 0xfb, 0x30, 0x2b, 0x19, 0x70, + 0x93, 0xc5, 0x7e, 0xb4, 0x34, 0x99, 0x70, 0xac, 0x5f, 0xf9, 0xf8, 0xf3, 0xab, 0xa7, 0x3e, 0xfb, + 0xfc, 0xea, 0x79, 0x19, 0x13, 0xdc, 0x3d, 0x28, 0x53, 0x56, 0x69, 0xe2, 0xa8, 0x51, 0xde, 0xf1, + 0x23, 0x4b, 0xea, 0x5c, 0x13, 0x12, 0xe8, 0x1a, 0xcc, 0xb2, 0x38, 0xca, 0x6c, 0x4c, 0x09, 0x1b, + 0x25, 0x49, 0x93, 0x46, 0xd6, 0xe1, 0x8c, 0x62, 0x51, 0x56, 0xa6, 0x47, 0xb1, 0xa2, 0xd4, 0x2a, + 0x33, 0x2f, 0xc1, 0x64, 0x83, 0x05, 0x7c, 0xe9, 0xb4, 0x00, 0xf3, 0x66, 0x1f, 0x30, 0x13, 0xc8, + 0xee, 0xb2, 0x20, 0x9d, 0x18, 0x4b, 0x08, 0x25, 0xa3, 0xe4, 0x01, 0xf1, 0x53, 0xfb, 0x33, 0x23, + 0x8d, 0x52, 0x88, 0x48, 0xf3, 0xe6, 0xbb, 0x70, 0x21, 0x9d, 0x93, 0x3d, 0x1c, 0xe2, 0x26, 0x7f, + 0x10, 0xb8, 0x58, 0x4d, 0x0c, 0x27, 0xbe, 0x9b, 0x4d, 0x8c, 0x7c, 0x43, 0x77, 0xa1, 0xc4, 0x8f, + 0x71, 0x60, 0x07, 0x82, 0x5b, 0x4c, 0x4d, 0x69, 0xf5, 0xda, 0x00, 0xbf, 0xa5, 0xda, 0xf5, 0xc9, + 0xc4, 0x2b, 0x0b, 0x78, 0x4a, 0x31, 0xff, 0x6d, 0xc0, 0xd9, 0xce, 0x81, 0x9d, 0x28, 0xbc, 0x5f, + 0x86, 0x99, 0xc3, 0x18, 0xfb, 0x11, 0x8d, 0x5a, 0x32, 0x14, 0xd6, 0x9f, 0x50, 0x10, 0x5c, 0xee, + 0x86, 0x60, 0x97, 0xd4, 0xb1, 0xd3, 0xda, 0x24, 0x8e, 0x95, 0x0a, 0xa1, 0x6f, 0xc1, 0x54, 0x10, + 0x52, 0x87, 0xa8, 0x30, 0x19, 0x49, 0x5a, 0x4a, 0xa0, 0x17, 0x60, 0xa2, 0x46, 0x88, 0x8c, 0x8e, + 0xd1, 0x04, 0x13, 0x7e, 0xf3, 0xef, 0x05, 0xb8, 0x92, 0xad, 0xf0, 0x4d, 0x12, 0xd2, 0x23, 0x9c, + 0xa0, 0xf7, 0xe5, 0x80, 0xb8, 0x01, 0x73, 0x94, 0xdb, 0x1e, 0x3d, 0x8c, 0xa9, 0x8b, 0x13, 0x2d, + 0x02, 0x8e, 0x19, 0xeb, 0x0c, 0xe5, 0xbb, 0x19, 0x11, 0x59, 0x80, 0x9c, 0xb8, 0x19, 0x7b, 0xc2, + 0xa2, 0x5d, 0x8b, 0x7d, 0x97, 0xfa, 0xf5, 0xdc, 0xd8, 0x8d, 0x61, 0x43, 0x58, 0xc8, 0xc4, 0xb7, + 0xa5, 0x74, 0x77, 0x8a, 0x99, 0x3a, 0x79, 0x8a, 0x59, 0x4b, 0x53, 0xcc, 0xb4, 0x58, 0x15, 0x4f, + 0xf5, 0x51, 0x92, 0xc1, 0xd6, 0x95, 0x6c, 0x3e, 0xd2, 0xf8, 0xee, 0x32, 0x1e, 0x25, 0x3e, 0xf2, + 0xed, 0x90, 0x35, 0xf3, 0x20, 0x0c, 0xc4, 0xf7, 0x09, 0x38, 0xc3, 0xe3, 0x2a, 0x76, 0x9c, 0x64, + 0x91, 0x24, 0x0c, 0x09, 0xcc, 0xb3, 0xd6, 0x6c, 0x46, 0xdc, 0x71, 0xd1, 0x43, 0xb8, 0xe9, 0x31, + 0x1e, 0x09, 0x00, 0xb9, 0x5d, 0x0b, 0x59, 0xd3, 0xc6, 0x47, 0x98, 0x7a, 0xb8, 0xea, 0x11, 0xdb, + 0x8d, 0x43, 0xea, 0xd7, 0xed, 0x00, 0xb7, 0x58, 0x1c, 0x8d, 0x13, 0x95, 0xa6, 0x97, 0xf7, 0x78, + 0x4d, 0x2b, 0xdc, 0x14, 0xfa, 0xf6, 0x84, 0x3a, 0x44, 0xe0, 0x4a, 0xa7, 0x65, 0xb1, 0x7d, 0xd8, + 0x0e, 0xf6, 0x1d, 0xe2, 0xf1, 0x71, 0xe2, 0xf8, 0x62, 0x9b, 0xbd, 0xd7, 0x13, 0x35, 0x1b, 0x52, + 0x8b, 0xf9, 0x4f, 0x03, 0x9e, 0xec, 0x06, 0x71, 0x23, 0x64, 0x9c, 0xef, 0x31, 0xe6, 0xe5, 0xd1, + 0xec, 0x02, 0xcc, 0xe8, 0x01, 0xd8, 0x55, 0x28, 0x1d, 0xc6, 0x2c, 0x22, 0x2a, 0xa3, 0xca, 0xac, + 0x0e, 0x82, 0x24, 0x13, 0xea, 0x37, 0x86, 0xa8, 0xf9, 0x53, 0x03, 0x1e, 0xef, 0xb5, 0x1e, 0xf7, + 0x18, 0xa7, 0xc3, 0xc3, 0xe5, 0x15, 0x28, 0x06, 0x8a, 0x31, 0xc9, 0x88, 0x83, 0x62, 0x76, 0x3f, + 0x05, 0x44, 0xab, 0xb6, 0x32, 0x59, 0xf3, 0x8f, 0x06, 0x5c, 0x16, 0x6e, 0x64, 0x1e, 0xdc, 0x13, + 0x46, 0xf6, 0x70, 0xcc, 0x89, 0x3b, 0xd8, 0x8b, 0x6b, 0x30, 0xcb, 0x49, 0x14, 0x79, 0xc4, 0x96, + 0xc9, 0x4c, 0xe2, 0x5b, 0x92, 0xb4, 0x3d, 0x91, 0xad, 0xca, 0x70, 0x2e, 0x62, 0x11, 0xf6, 0xec, + 0x26, 0xe5, 0x3c, 0x41, 0x53, 0x20, 0xad, 0xf6, 0xcf, 0x05, 0xf1, 0xe9, 0x9e, 0xfc, 0x22, 0xf0, + 0x42, 0xcf, 0x00, 0x6a, 0xe3, 0xb4, 0x43, 0x1c, 0xa9, 0x2c, 0x69, 0x9d, 0x6d, 0xe6, 0x38, 0x2d, + 0x1c, 0x11, 0x73, 0x0f, 0x2e, 0xca, 0xcd, 0x44, 0x58, 0x74, 0xa5, 0xe7, 0xeb, 0xd8, 0x4b, 0xc2, + 0x69, 0xb0, 0xeb, 0x17, 0x60, 0x5a, 0x6d, 0x61, 0xd2, 0x69, 0xf5, 0x66, 0xee, 0xab, 0x59, 0x79, + 0x8d, 0x7d, 0x85, 0x4a, 0x3f, 0xd0, 0x20, 0x2b, 0x5d, 0xa4, 0xc5, 0x7c, 0x77, 0x1d, 0xfb, 0x07, + 0x61, 0x1c, 0x44, 0x4e, 0xeb, 0x4b, 0x83, 0x7c, 0x07, 0x16, 0x35, 0x68, 0x4a, 0x4f, 0x1e, 0x65, + 0x0d, 0xa8, 0x34, 0x2e, 0xc0, 0x33, 0xdf, 0x37, 0x60, 0x49, 0x78, 0xb4, 0xe6, 0x79, 0x3a, 0x2c, + 0xf8, 0x5d, 0x4c, 0x43, 0x27, 0x8e, 0xbe, 0xb4, 0x3b, 0xbd, 0xe7, 0x70, 0xa2, 0xcf, 0x1c, 0xbe, + 0x03, 0xcb, 0x72, 0x1d, 0x50, 0x1f, 0x87, 0xad, 0xd7, 0x03, 0xe1, 0x8a, 0xf4, 0x55, 0x56, 0x06, + 0xe8, 0x2e, 0x4c, 0x4b, 0xf3, 0xc2, 0x99, 0xd2, 0xea, 0xed, 0x3e, 0x91, 0xde, 0x43, 0x83, 0x2a, + 0x02, 0x94, 0xbc, 0xe9, 0xf6, 0x09, 0x76, 0x65, 0x68, 0xab, 0xc3, 0xd0, 0xcd, 0xa1, 0xdb, 0x40, + 0x4f, 0x2b, 0x7f, 0x32, 0x00, 0xc9, 0x20, 0x22, 0xc7, 0x49, 0x29, 0x2d, 0x52, 0x1c, 0x1f, 0x0c, + 0xeb, 0x26, 0x40, 0x35, 0x6e, 0xc9, 0xa4, 0xaa, 0x57, 0xf4, 0x8d, 0x7e, 0x2b, 0x3a, 0x60, 0xd1, + 0x2e, 0x6d, 0x52, 0xa9, 0xd8, 0x2a, 0x56, 0xe3, 0x96, 0x32, 0xb1, 0x0d, 0x25, 0x4e, 0x3c, 0x4f, + 0xab, 0x99, 0x18, 0x47, 0x0d, 0x24, 0x92, 0x52, 0x8f, 0xf9, 0x57, 0x1d, 0x1e, 0xaf, 0x91, 0xe3, + 0x6c, 0xb0, 0xa3, 0x8c, 0xe3, 0xd5, 0x1e, 0xe3, 0x78, 0x7a, 0x28, 0x8c, 0xbd, 0x47, 0xb3, 0xdb, + 0x6b, 0x34, 0x63, 0x29, 0xcb, 0x8f, 0xe9, 0x08, 0x16, 0xc5, 0x90, 0xe4, 0x5e, 0x93, 0xce, 0xcb, + 0xe0, 0xe1, 0xac, 0xc1, 0x94, 0xb0, 0xae, 0xaa, 0xce, 0xd1, 0xa0, 0x54, 0xe1, 0x20, 0x25, 0xcd, + 0x1f, 0xc0, 0x79, 0x99, 0xa3, 0x02, 0x16, 0xb5, 0x45, 0xdb, 0xcb, 0x1d, 0xd1, 0x76, 0x6d, 0x80, + 0xf2, 0x9e, 0x71, 0xf6, 0x61, 0x01, 0x2e, 0x09, 0xd5, 0x7b, 0x24, 0x0c, 0x48, 0x14, 0x63, 0xef, + 0x6b, 0x88, 0x66, 0xe4, 0xc2, 0xf9, 0x40, 0xeb, 0xd7, 0xe9, 0x85, 0xfa, 0x35, 0xa6, 0x20, 0xe9, + 0xb7, 0x18, 0x3b, 0x7c, 0xda, 0xf1, 0x6b, 0x4c, 0x28, 0x36, 0xac, 0x73, 0x41, 0xf7, 0x27, 0x74, + 0x0f, 0x4e, 0xeb, 0xb2, 0x70, 0x42, 0xe8, 0x7d, 0x76, 0x34, 0xbd, 0xaa, 0x1a, 0x54, 0xaa, 0xb5, + 0x0e, 0xf3, 0x33, 0x43, 0x65, 0x95, 0xad, 0x87, 0x01, 0x0d, 0x5b, 0xdb, 0x71, 0x14, 0x87, 0x84, + 0x7f, 0x1d, 0xf0, 0x1c, 0xc2, 0x25, 0x22, 0x6c, 0xd8, 0x35, 0x69, 0xa4, 0x0d, 0x23, 0x39, 0x96, + 0x72, 0xdf, 0x9a, 0xb4, 0xcb, 0xb9, 0x1c, 0x4e, 0x8f, 0x91, 0xde, 0x9f, 0xcd, 0xbf, 0x14, 0xe0, + 0x5a, 0xaf, 0x79, 0x57, 0x58, 0xa8, 0xf1, 0x0d, 0x8c, 0xeb, 0x1c, 0xdc, 0x85, 0x93, 0xc2, 0x7d, + 0x2a, 0x85, 0x1b, 0xdd, 0x86, 0x05, 0xca, 0xed, 0x06, 0x8b, 0x43, 0xaf, 0x65, 0xe7, 0xe7, 0x71, + 0xc6, 0x9a, 0xa7, 0xfc, 0xae, 0xa0, 0xeb, 0xba, 0x7d, 0x1b, 0x66, 0x15, 0x47, 0x6e, 0x6f, 0x1f, + 0xed, 0x14, 0x50, 0x52, 0x82, 0xc9, 0xbe, 0x81, 0xd6, 0x01, 0x92, 0xe1, 0xa8, 0x6d, 0x68, 0x6a, + 0x74, 0x2d, 0x02, 0x16, 0xb1, 0x53, 0x99, 0xbf, 0x34, 0xf4, 0x69, 0x34, 0x2d, 0x92, 0x36, 0x89, + 0x28, 0x8e, 0x92, 0xd2, 0x91, 0x87, 0x8e, 0x8d, 0x5d, 0x37, 0x24, 0x9c, 0x2b, 0x00, 0x81, 0x87, + 0xce, 0x9a, 0xa4, 0x8c, 0x56, 0xb1, 0xbf, 0x98, 0x56, 0x04, 0x32, 0x12, 0x2e, 0x96, 0xa5, 0x67, + 0xe5, 0x2a, 0xe6, 0xa4, 0xac, 0xfa, 0x3e, 0xe5, 0x0d, 0x46, 0x7d, 0x1d, 0x56, 0xaa, 0x64, 0xf8, + 0x50, 0x37, 0x64, 0x32, 0xcf, 0xde, 0xa2, 0x51, 0xc3, 0x0d, 0xf1, 0xf1, 0xc8, 0xa5, 0xaf, 0xcb, + 0xa3, 0xd4, 0x7f, 0x55, 0xfa, 0xba, 0x3c, 0xd2, 0xfe, 0x9f, 0xd8, 0xb5, 0xdf, 0xeb, 0xb5, 0x95, + 0xb9, 0xa6, 0xaa, 0xa3, 0xfb, 0x21, 0xf6, 0x79, 0x8d, 0x84, 0x49, 0x3c, 0x24, 0xe0, 0x75, 0x7b, + 0x59, 0xb4, 0xe6, 0x79, 0xe8, 0xec, 0xe7, 0x1d, 0xbd, 0x0d, 0x0b, 0x89, 0xa3, 0xdd, 0x58, 0x16, + 0xad, 0x79, 0x97, 0x47, 0xfb, 0x5f, 0x09, 0x9c, 0xbf, 0xd2, 0x4b, 0x26, 0x53, 0x67, 0x51, 0x7e, + 0xb0, 0x17, 0xb2, 0x1a, 0xf5, 0x88, 0xee, 0x40, 0xf4, 0x04, 0xb6, 0xd8, 0x01, 0xec, 0xdb, 0x70, + 0x36, 0x08, 0xc9, 0x11, 0x65, 0x31, 0xb7, 0x03, 0x29, 0xaf, 0xd6, 0xd0, 0x33, 0x43, 0x2b, 0xf0, + 0x9c, 0x4d, 0xe5, 0xe0, 0xbc, 0xd6, 0xa5, 0xc8, 0x68, 0x1f, 0x4a, 0x3e, 0x39, 0x4e, 0x35, 0x4f, + 0x9c, 0x58, 0x33, 0xf8, 0xe4, 0x58, 0x2b, 0xbd, 0x02, 0x40, 0xb9, 0xed, 0x92, 0x1a, 0x8e, 0x3d, + 0xd9, 0x9a, 0x9a, 0xb1, 0x8a, 0x94, 0x6f, 0x4a, 0x82, 0xd9, 0xc8, 0x37, 0xff, 0xd4, 0x02, 0x50, + 0x59, 0xe4, 0x1e, 0xcc, 0xbb, 0x92, 0x60, 0xc7, 0x82, 0x92, 0x2c, 0x85, 0x64, 0x1f, 0xbe, 0xde, + 0x37, 0x5d, 0xe6, 0xc4, 0xad, 0x39, 0x37, 0xff, 0xca, 0xcd, 0x8f, 0x0c, 0xb8, 0xdc, 0x99, 0x50, + 0x73, 0x27, 0x40, 0xf4, 0x00, 0x66, 0x55, 0xd2, 0x92, 0xdb, 0xae, 0x31, 0x70, 0xf8, 0x3d, 0x35, + 0xa9, 0xec, 0x59, 0x6a, 0x66, 0x24, 0xb4, 0x0b, 0xf3, 0xf2, 0xa0, 0x6a, 0xa7, 0x6d, 0x9b, 0xc2, + 0xe8, 0xc7, 0xb9, 0x39, 0x29, 0xfb, 0x86, 0x12, 0x35, 0x7f, 0xad, 0xf7, 0x5d, 0xe9, 0x74, 0x47, + 0x81, 0x34, 0x38, 0xf1, 0x5e, 0x07, 0xd1, 0x1a, 0x69, 0x52, 0x25, 0xac, 0xda, 0x29, 0xed, 0x44, + 0x64, 0x41, 0xc9, 0x4b, 0x5e, 0x15, 0x0a, 0x32, 0x08, 0xc6, 0xa9, 0x7c, 0x14, 0x08, 0xe0, 0xa5, + 0x14, 0xd4, 0x80, 0x73, 0x79, 0x68, 0xd5, 0xc9, 0x5d, 0x04, 0x43, 0x69, 0x75, 0x75, 0x1c, 0x84, + 0xa5, 0x93, 0xca, 0xc4, 0x42, 0xb3, 0xf3, 0x83, 0x59, 0x55, 0xc5, 0xe3, 0x36, 0x21, 0x9b, 0x94, + 0x8b, 0xf0, 0xdc, 0x77, 0x1a, 0xc4, 0x8d, 0x3d, 0x82, 0xb6, 0x61, 0x86, 0xab, 0xe7, 0x21, 0xd5, + 0x7c, 0x0f, 0x69, 0x2b, 0x95, 0x35, 0x3f, 0x35, 0x60, 0x45, 0x18, 0xb9, 0x1f, 0x62, 0xb1, 0x25, + 0x90, 0x63, 0x1c, 0xba, 0x1b, 0xb8, 0x19, 0x60, 0x5a, 0xf7, 0x55, 0xf0, 0x3e, 0x80, 0x33, 0x8e, + 0xa2, 0xc8, 0xed, 0x58, 0x5a, 0xbc, 0x33, 0xa0, 0x81, 0xdc, 0xa5, 0x2a, 0xd9, 0x71, 0xad, 0x59, + 0x27, 0xf7, 0x86, 0xde, 0x86, 0xf3, 0xa9, 0xda, 0x50, 0x30, 0xdb, 0x01, 0x63, 0xde, 0xb0, 0x83, + 0xb8, 0xd6, 0x28, 0xf5, 0xef, 0x31, 0xe6, 0x59, 0xe7, 0x9c, 0x2e, 0x1a, 0x37, 0x03, 0x95, 0x5e, + 0xdb, 0xdc, 0xd9, 0xa4, 0x3c, 0x0a, 0x69, 0x55, 0x76, 0xea, 0x5e, 0x83, 0x79, 0x9d, 0xa4, 0xa4, + 0x7d, 0xbd, 0x28, 0xfb, 0xd5, 0xa7, 0x6b, 0x2a, 0x49, 0x48, 0x66, 0x6b, 0x0e, 0xb7, 0xbd, 0x9b, + 0xbf, 0x33, 0xc0, 0xd4, 0xe5, 0xfe, 0x06, 0xf3, 0x5d, 0x71, 0x1c, 0xc4, 0xe3, 0x05, 0xf6, 0x77, + 0xda, 0x2b, 0xe5, 0x27, 0x87, 0x06, 0x94, 0xac, 0xd0, 0xa5, 0x10, 0x42, 0x30, 0xd9, 0xc0, 0xbc, + 0x21, 0x22, 0x7d, 0xd6, 0x12, 0xcf, 0x89, 0x39, 0xaa, 0xab, 0x29, 0x95, 0xb3, 0x66, 0xa8, 0xaa, + 0x83, 0xcc, 0x5f, 0x14, 0xe0, 0x46, 0x6e, 0x0d, 0x9e, 0xd4, 0xeb, 0x6f, 0x6e, 0x39, 0x76, 0x66, + 0xba, 0xc9, 0xaf, 0x24, 0xd3, 0x99, 0xff, 0xd1, 0x1d, 0xb4, 0xfe, 0x88, 0xdc, 0x0f, 0x69, 0xbd, + 0xde, 0x0b, 0x98, 0xd9, 0x1c, 0x30, 0x4f, 0xc2, 0x9c, 0xc2, 0x40, 0xb1, 0x2b, 0x64, 0x3a, 0xa8, + 0xe8, 0x0e, 0x2c, 0x46, 0xf2, 0x91, 0xb8, 0x2a, 0xb1, 0xe4, 0x26, 0x12, 0xa5, 0xdf, 0x84, 0xe5, + 0xbb, 0xc9, 0xb4, 0xde, 0x86, 0x85, 0xc0, 0xc3, 0x4e, 0x3b, 0xfb, 0xa4, 0x60, 0x9f, 0x97, 0x1f, + 0x32, 0xde, 0x32, 0x9c, 0xeb, 0xd4, 0xee, 0x50, 0x57, 0xdd, 0x8c, 0x2c, 0xb4, 0x2b, 0xdf, 0xa0, + 0xae, 0xe9, 0xc1, 0x9c, 0x18, 0xbc, 0x20, 0x6c, 0x63, 0xea, 0xa1, 0x25, 0x38, 0xad, 0x82, 0x5d, + 0x0d, 0x51, 0xbf, 0xa2, 0x0b, 0x30, 0x9d, 0x98, 0x26, 0x72, 0xd9, 0xce, 0x5a, 0xea, 0x0d, 0x2d, + 0xc2, 0x54, 0xcd, 0xc3, 0x75, 0x79, 0xde, 0x3c, 0x63, 0xc9, 0x97, 0x24, 0x40, 0x1d, 0xea, 0xca, + 0x2b, 0xa8, 0xa2, 0x25, 0x9e, 0xcd, 0x0f, 0x0c, 0x78, 0x5a, 0x36, 0x51, 0x22, 0xd6, 0xa4, 0x4e, + 0x6e, 0x66, 0xb6, 0x09, 0xb9, 0x17, 0x7b, 0x11, 0x0d, 0x3c, 0x4a, 0xc2, 0xf4, 0x82, 0xe3, 0xc7, + 0x70, 0x41, 0xb7, 0x67, 0x08, 0xb1, 0x9b, 0x19, 0x83, 0x5a, 0xbd, 0xfd, 0x32, 0xa1, 0x2a, 0xbd, + 0xf3, 0x3a, 0xad, 0xc5, 0x66, 0x37, 0x91, 0x9b, 0x7f, 0x30, 0xd4, 0x21, 0x57, 0x78, 0x51, 0x65, + 0xec, 0x40, 0x65, 0xc2, 0x1d, 0x98, 0xe5, 0x01, 0xeb, 0xdc, 0xc3, 0xfb, 0x2d, 0xd2, 0x0e, 0x69, + 0xab, 0x94, 0xc8, 0xaa, 0x2d, 0x1c, 0x3d, 0x00, 0xe4, 0xa6, 0x01, 0x95, 0x2a, 0x2c, 0x8c, 0xa5, + 0x70, 0x21, 0xd3, 0xa0, 0x2b, 0x03, 0x07, 0xe6, 0x3b, 0x9d, 0x3e, 0x0b, 0x13, 0x9c, 0x1c, 0x8a, + 0x79, 0x9b, 0xb4, 0x92, 0x47, 0xf4, 0x3d, 0x28, 0x32, 0xcd, 0xa4, 0x12, 0xcd, 0xca, 0x30, 0x93, + 0x56, 0x26, 0x62, 0xfe, 0xc6, 0x80, 0x62, 0xfa, 0x61, 0xf0, 0x02, 0x78, 0x49, 0x36, 0x32, 0x3c, + 0x72, 0x44, 0xd2, 0xcc, 0xfe, 0x78, 0x1f, 0x5b, 0xbb, 0x09, 0x93, 0xe8, 0x5c, 0x88, 0x27, 0x8e, + 0xbe, 0xab, 0x3a, 0x17, 0x4a, 0x7a, 0x62, 0x04, 0x69, 0xd1, 0xaa, 0x90, 0xe2, 0xe6, 0xb1, 0xda, + 0x40, 0x5f, 0x09, 0xb1, 0x1f, 0xad, 0xc5, 0x51, 0x83, 0x85, 0xf4, 0x5d, 0xd1, 0xf6, 0xe6, 0x49, + 0x40, 0xd7, 0x13, 0x72, 0x7a, 0x4d, 0xa6, 0x5f, 0xd1, 0x1a, 0x4c, 0x8b, 0xc7, 0x61, 0xfb, 0x50, + 0xb7, 0x56, 0x4b, 0x09, 0x9a, 0xef, 0xe9, 0xf8, 0x91, 0x3c, 0x89, 0xac, 0xec, 0xb6, 0xa7, 0x56, + 0x49, 0xbb, 0x55, 0x92, 0xf7, 0xa7, 0xd0, 0xee, 0xcf, 0x0b, 0x6d, 0xc5, 0xfa, 0xd0, 0x5b, 0x42, + 0x5d, 0xaa, 0xbf, 0xa2, 0x2e, 0x6d, 0x77, 0xfc, 0x23, 0xec, 0x51, 0x57, 0x78, 0x72, 0x12, 0xfb, + 0xe6, 0x6f, 0xdb, 0x16, 0x83, 0x4c, 0xe5, 0x22, 0x27, 0x8c, 0x7f, 0x11, 0xd3, 0x79, 0x06, 0xb8, + 0x02, 0xd0, 0x91, 0xeb, 0x8a, 0x2a, 0xcc, 0x44, 0xda, 0x3a, 0x0b, 0x13, 0x49, 0x9a, 0x92, 0x5d, + 0xeb, 0xe4, 0x11, 0xad, 0x40, 0xc9, 0x25, 0xdc, 0x09, 0xa9, 0x68, 0x4e, 0xea, 0xab, 0xdd, 0x1c, + 0x29, 0x49, 0xdc, 0x2b, 0x1d, 0xbd, 0x49, 0xd9, 0xb8, 0x7a, 0x73, 0xf5, 0x1e, 0xad, 0x87, 0x23, + 0x5c, 0x21, 0xfd, 0x08, 0x16, 0xd2, 0xd6, 0x9b, 0x2d, 0xa7, 0x5b, 0x87, 0x42, 0x65, 0xb4, 0xdd, + 0xf8, 0xcd, 0xd5, 0x0d, 0x29, 0x66, 0xcd, 0xeb, 0x2e, 0x9c, 0x22, 0xa0, 0xb7, 0x01, 0x65, 0xbd, + 0xb8, 0x54, 0xfb, 0xc4, 0xc9, 0xb4, 0x9f, 0x4d, 0xdb, 0x72, 0x8a, 0x62, 0xfe, 0xb9, 0x00, 0x4b, + 0xfd, 0xd8, 0x35, 0x9c, 0x46, 0x06, 0xa7, 0x2e, 0x17, 0x0a, 0xb9, 0x72, 0xe1, 0x39, 0x30, 0x82, + 0x71, 0x2e, 0x69, 0x8c, 0x20, 0x11, 0x39, 0x1c, 0xe7, 0xe6, 0xca, 0x38, 0x4c, 0x44, 0x9a, 0xe3, + 0xdc, 0xbd, 0x1a, 0xcd, 0x44, 0xa4, 0xa6, 0x2e, 0xea, 0x47, 0x13, 0xa9, 0xa1, 0xe7, 0xa1, 0x10, + 0x05, 0x4b, 0xa7, 0x47, 0xef, 0x69, 0x14, 0xa2, 0xc0, 0xfc, 0x97, 0xa1, 0x8e, 0x25, 0x59, 0xcf, + 0x79, 0xe4, 0xd8, 0x79, 0xd0, 0x3f, 0x76, 0x9e, 0x1a, 0xd0, 0x96, 0x1c, 0x16, 0x35, 0x6f, 0x0d, + 0x88, 0x9a, 0x31, 0xf4, 0x76, 0xc7, 0xcb, 0x4f, 0x0a, 0x70, 0x4b, 0x15, 0xc9, 0xa2, 0x06, 0xc8, + 0x55, 0x3b, 0xf9, 0x6d, 0x18, 0x53, 0x6f, 0xd8, 0x1d, 0xd6, 0x48, 0xeb, 0xbd, 0xbd, 0xd7, 0x34, + 0x46, 0x90, 0x65, 0xbd, 0xa6, 0x8e, 0x9c, 0x21, 0x0b, 0x9e, 0x5c, 0xce, 0xb8, 0x0a, 0x25, 0x55, + 0xcf, 0xd8, 0x24, 0x0c, 0x55, 0x86, 0x00, 0x45, 0xda, 0x0a, 0x43, 0xbd, 0x0a, 0xa6, 0xd3, 0x55, + 0x60, 0xbe, 0x57, 0x80, 0x9b, 0x7d, 0x40, 0xc8, 0x4a, 0xcf, 0xff, 0x73, 0x0c, 0xde, 0x2f, 0x00, + 0xea, 0x8e, 0x98, 0xff, 0xb5, 0x94, 0x51, 0x1b, 0x2b, 0x65, 0xe8, 0xf5, 0x3f, 0x3d, 0xde, 0xfa, + 0x3f, 0x50, 0x87, 0xb8, 0xee, 0xbb, 0xe4, 0x7c, 0x1a, 0xd8, 0x82, 0x19, 0x7d, 0xfb, 0xab, 0x8e, + 0xc3, 0xc3, 0x7f, 0x76, 0x48, 0x2f, 0x8e, 0x53, 0x51, 0xf3, 0x91, 0xa1, 0xae, 0x35, 0xf4, 0xb7, + 0xb4, 0xf7, 0x37, 0x30, 0xd2, 0xee, 0xc0, 0x22, 0x67, 0x71, 0xe8, 0x90, 0x9e, 0xfd, 0x3e, 0x24, + 0xbf, 0xb5, 0xb5, 0xfc, 0xbe, 0x0d, 0x17, 0x5d, 0xc2, 0x23, 0xea, 0x0b, 0xf7, 0x3b, 0xc4, 0xe4, + 0xce, 0xfb, 0x58, 0x8e, 0xa1, 0x4d, 0x36, 0xff, 0x9b, 0xce, 0xe4, 0x09, 0x7e, 0xd3, 0x59, 0x3f, + 0xf8, 0xf8, 0x8b, 0x65, 0xe3, 0x93, 0x2f, 0x96, 0x8d, 0x7f, 0x7c, 0xb1, 0x6c, 0xfc, 0xec, 0xd1, + 0xf2, 0xa9, 0x4f, 0x1e, 0x2d, 0x9f, 0xfa, 0xf4, 0xd1, 0xf2, 0xa9, 0x1f, 0xbe, 0x51, 0xa7, 0x51, + 0x23, 0xae, 0x96, 0x1d, 0xd6, 0xac, 0xec, 0x68, 0xf8, 0x76, 0x71, 0x95, 0x57, 0x52, 0x30, 0x9f, + 0x75, 0x58, 0x48, 0xf2, 0xaf, 0x0d, 0x4c, 0xfd, 0x4a, 0x93, 0xb9, 0xb1, 0x47, 0x78, 0xf6, 0x27, + 0x5e, 0xd4, 0x0a, 0x08, 0xaf, 0x1c, 0xad, 0x56, 0xa7, 0xc5, 0xaf, 0x78, 0xcf, 0xff, 0x37, 0x00, + 0x00, 0xff, 0xff, 0x25, 0x9a, 0xb3, 0x8d, 0x91, 0x28, 0x00, 0x00, } func (m *EventBatchSpotExecution) Marshal() (dAtA []byte, err error) { @@ -3161,7 +3371,7 @@ func (m *EventBatchSpotExecution) MarshalToSizedBuffer(dAtA []byte) (int, error) return len(dAtA) - i, nil } -func (m *EventBatchDerivativeExecution) Marshal() (dAtA []byte, err error) { +func (m *EventSwapExecuted) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -3171,20 +3381,30 @@ func (m *EventBatchDerivativeExecution) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *EventBatchDerivativeExecution) MarshalTo(dAtA []byte) (int, error) { +func (m *EventSwapExecuted) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *EventBatchDerivativeExecution) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *EventSwapExecuted) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if len(m.Trades) > 0 { - for iNdEx := len(m.Trades) - 1; iNdEx >= 0; iNdEx-- { + { + size := m.SpentAmount.Size() + i -= size + if _, err := m.SpentAmount.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x42 + if len(m.Hops) > 0 { + for iNdEx := len(m.Hops) - 1; iNdEx >= 0; iNdEx-- { { - size, err := m.Trades[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + size, err := m.Hops[iNdEx].MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -3192,39 +3412,234 @@ func (m *EventBatchDerivativeExecution) MarshalToSizedBuffer(dAtA []byte) (int, i = encodeVarintEvents(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x32 + dAtA[i] = 0x3a } } - if m.ExecutionType != 0 { - i = encodeVarintEvents(dAtA, i, uint64(m.ExecutionType)) + { + size := m.OutputAmount.Size() + i -= size + if _, err := m.OutputAmount.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 + if len(m.OutputDenom) > 0 { + i -= len(m.OutputDenom) + copy(dAtA[i:], m.OutputDenom) + i = encodeVarintEvents(dAtA, i, uint64(len(m.OutputDenom))) i-- - dAtA[i] = 0x28 + dAtA[i] = 0x2a } - if m.CumulativeFunding != nil { - { - size := m.CumulativeFunding.Size() - i -= size - if _, err := m.CumulativeFunding.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintEvents(dAtA, i, uint64(size)) + { + size := m.InputAmount.Size() + i -= size + if _, err := m.InputAmount.MarshalTo(dAtA[i:]); err != nil { + return 0, err } - i-- - dAtA[i] = 0x22 + i = encodeVarintEvents(dAtA, i, uint64(size)) } - if m.IsLiquidation { + i-- + dAtA[i] = 0x22 + if len(m.InputDenom) > 0 { + i -= len(m.InputDenom) + copy(dAtA[i:], m.InputDenom) + i = encodeVarintEvents(dAtA, i, uint64(len(m.InputDenom))) i-- - if m.IsLiquidation { - dAtA[i] = 1 - } else { - dAtA[i] = 0 - } + dAtA[i] = 0x1a + } + if len(m.Recipient) > 0 { + i -= len(m.Recipient) + copy(dAtA[i:], m.Recipient) + i = encodeVarintEvents(dAtA, i, uint64(len(m.Recipient))) i-- - dAtA[i] = 0x18 + dAtA[i] = 0x12 } - if m.IsBuy { + if len(m.Caller) > 0 { + i -= len(m.Caller) + copy(dAtA[i:], m.Caller) + i = encodeVarintEvents(dAtA, i, uint64(len(m.Caller))) i-- - if m.IsBuy { + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *EventSwapParamsUpdated) 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 *EventSwapParamsUpdated) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *EventSwapParamsUpdated) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.SwapParams.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + if len(m.Sender) > 0 { + i -= len(m.Sender) + copy(dAtA[i:], m.Sender) + i = encodeVarintEvents(dAtA, i, uint64(len(m.Sender))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *SwapHopExecution) 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 *SwapHopExecution) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SwapHopExecution) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size := m.Fee.Size() + i -= size + if _, err := m.Fee.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + { + size := m.Price.Size() + i -= size + if _, err := m.Price.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + { + size := m.Quantity.Size() + i -= size + if _, err := m.Quantity.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + if m.IsBuy { + i-- + if m.IsBuy { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x10 + } + if len(m.MarketId) > 0 { + i -= len(m.MarketId) + copy(dAtA[i:], m.MarketId) + i = encodeVarintEvents(dAtA, i, uint64(len(m.MarketId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *EventBatchDerivativeExecution) 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 *EventBatchDerivativeExecution) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *EventBatchDerivativeExecution) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Trades) > 0 { + for iNdEx := len(m.Trades) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Trades[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 + } + } + if m.ExecutionType != 0 { + i = encodeVarintEvents(dAtA, i, uint64(m.ExecutionType)) + i-- + dAtA[i] = 0x28 + } + if m.CumulativeFunding != nil { + { + size := m.CumulativeFunding.Size() + i -= size + if _, err := m.CumulativeFunding.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + if m.IsLiquidation { + i-- + if m.IsLiquidation { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x18 + } + if m.IsBuy { + i-- + if m.IsBuy { dAtA[i] = 1 } else { dAtA[i] = 0 @@ -4716,20 +5131,20 @@ func (m *EventOrderFail) MarshalToSizedBuffer(dAtA []byte) (int, error) { } } if len(m.Flags) > 0 { - dAtA25 := make([]byte, len(m.Flags)*10) - var j24 int + dAtA26 := make([]byte, len(m.Flags)*10) + var j25 int for _, num := range m.Flags { for num >= 1<<7 { - dAtA25[j24] = uint8(uint64(num)&0x7f | 0x80) + dAtA26[j25] = uint8(uint64(num)&0x7f | 0x80) num >>= 7 - j24++ + j25++ } - dAtA25[j24] = uint8(num) - j24++ + dAtA26[j25] = uint8(num) + j25++ } - i -= j24 - copy(dAtA[i:], dAtA25[:j24]) - i = encodeVarintEvents(dAtA, i, uint64(j24)) + i -= j25 + copy(dAtA[i:], dAtA26[:j25]) + i = encodeVarintEvents(dAtA, i, uint64(j25)) i-- dAtA[i] = 0x1a } @@ -5669,6 +6084,80 @@ func (m *EventBatchSpotExecution) Size() (n int) { return n } +func (m *EventSwapExecuted) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Caller) + if l > 0 { + n += 1 + l + sovEvents(uint64(l)) + } + l = len(m.Recipient) + if l > 0 { + n += 1 + l + sovEvents(uint64(l)) + } + l = len(m.InputDenom) + if l > 0 { + n += 1 + l + sovEvents(uint64(l)) + } + l = m.InputAmount.Size() + n += 1 + l + sovEvents(uint64(l)) + l = len(m.OutputDenom) + if l > 0 { + n += 1 + l + sovEvents(uint64(l)) + } + l = m.OutputAmount.Size() + n += 1 + l + sovEvents(uint64(l)) + if len(m.Hops) > 0 { + for _, e := range m.Hops { + l = e.Size() + n += 1 + l + sovEvents(uint64(l)) + } + } + l = m.SpentAmount.Size() + n += 1 + l + sovEvents(uint64(l)) + return n +} + +func (m *EventSwapParamsUpdated) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Sender) + if l > 0 { + n += 1 + l + sovEvents(uint64(l)) + } + l = m.SwapParams.Size() + n += 1 + l + sovEvents(uint64(l)) + return n +} + +func (m *SwapHopExecution) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.MarketId) + if l > 0 { + n += 1 + l + sovEvents(uint64(l)) + } + if m.IsBuy { + n += 2 + } + l = m.Quantity.Size() + n += 1 + l + sovEvents(uint64(l)) + l = m.Price.Size() + n += 1 + l + sovEvents(uint64(l)) + l = m.Fee.Size() + n += 1 + l + sovEvents(uint64(l)) + return n +} + func (m *EventBatchDerivativeExecution) Size() (n int) { if m == nil { return 0 @@ -6831,6 +7320,639 @@ func (m *EventBatchSpotExecution) Unmarshal(dAtA []byte) error { } return nil } +func (m *EventSwapExecuted) 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 ErrIntOverflowEvents + } + 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: EventSwapExecuted: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: EventSwapExecuted: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Caller", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + 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 ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Caller = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Recipient", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + 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 ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Recipient = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field InputDenom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + 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 ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.InputDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field InputAmount", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + 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 ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.InputAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field OutputDenom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + 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 ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.OutputDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field OutputAmount", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + 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 ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.OutputAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Hops", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Hops = append(m.Hops, &SwapHopExecution{}) + if err := m.Hops[len(m.Hops)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SpentAmount", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + 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 ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.SpentAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipEvents(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthEvents + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *EventSwapParamsUpdated) 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 ErrIntOverflowEvents + } + 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: EventSwapParamsUpdated: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: EventSwapParamsUpdated: 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 ErrIntOverflowEvents + } + 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 ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + 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 SwapParams", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.SwapParams.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipEvents(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthEvents + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SwapHopExecution) 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 ErrIntOverflowEvents + } + 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: SwapHopExecution: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SwapHopExecution: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MarketId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + 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 ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.MarketId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field IsBuy", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.IsBuy = bool(v != 0) + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Quantity", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + 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 ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Quantity.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Price", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + 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 ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Price.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Fee", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + 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 ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Fee.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipEvents(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthEvents + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *EventBatchDerivativeExecution) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/chain/exchange/types/v2/exchange.pb.go b/chain/exchange/types/v2/exchange.pb.go index 00d8e926d..6bcbfd192 100644 --- a/chain/exchange/types/v2/exchange.pb.go +++ b/chain/exchange/types/v2/exchange.pb.go @@ -308,6 +308,8 @@ type Params struct { WhiteKnightLiquidatorRewardShareRate cosmossdk_io_math.LegacyDec `protobuf:"bytes,38,opt,name=white_knight_liquidator_reward_share_rate,json=whiteKnightLiquidatorRewardShareRate,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"white_knight_liquidator_reward_share_rate"` // cross_margin_params groups all cross-margin related parameters. CrossMarginParams CrossMarginParams `protobuf:"bytes,39,opt,name=cross_margin_params,json=crossMarginParams,proto3" json:"cross_margin_params"` + // swap_params groups the native spot swap configuration. + SwapParams SwapParams `protobuf:"bytes,40,opt,name=swap_params,json=swapParams,proto3" json:"swap_params"` } func (m *Params) Reset() { *m = Params{} } @@ -483,6 +485,68 @@ func (m *Params) GetCrossMarginParams() CrossMarginParams { return CrossMarginParams{} } +func (m *Params) GetSwapParams() SwapParams { + if m != nil { + return m.SwapParams + } + return SwapParams{} +} + +type SwapParams struct { + // enabled is the global switch for the native spot swap execution path. + Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"` + // allowed_markets is the strict allowlist of spot market IDs that swap + // routes may traverse. An empty list means no markets are swappable. + AllowedMarkets []string `protobuf:"bytes,2,rep,name=allowed_markets,json=allowedMarkets,proto3" json:"allowed_markets,omitempty"` +} + +func (m *SwapParams) Reset() { *m = SwapParams{} } +func (m *SwapParams) String() string { return proto.CompactTextString(m) } +func (*SwapParams) ProtoMessage() {} +func (*SwapParams) Descriptor() ([]byte, []int) { + return fileDescriptor_0b5851fb01a33564, []int{2} +} +func (m *SwapParams) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SwapParams) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_SwapParams.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 *SwapParams) XXX_Merge(src proto.Message) { + xxx_messageInfo_SwapParams.Merge(m, src) +} +func (m *SwapParams) XXX_Size() int { + return m.Size() +} +func (m *SwapParams) XXX_DiscardUnknown() { + xxx_messageInfo_SwapParams.DiscardUnknown(m) +} + +var xxx_messageInfo_SwapParams proto.InternalMessageInfo + +func (m *SwapParams) GetEnabled() bool { + if m != nil { + return m.Enabled + } + return false +} + +func (m *SwapParams) GetAllowedMarkets() []string { + if m != nil { + return m.AllowedMarkets + } + return nil +} + type CrossMarginParams struct { // positive_upnl_haircut_rate defines the haircut applied to positive // unrealized PnL for cross-margin admission checks. @@ -499,57 +563,45 @@ type CrossMarginParams struct { // expiry_enabled defines whether expiry futures derivative markets are // eligible for cross margin. ExpiryEnabled bool `protobuf:"varint,5,opt,name=expiry_enabled,json=expiryEnabled,proto3" json:"expiry_enabled,omitempty"` - // max_active_derivative_markets_per_pool defines the maximum number of - // active derivative markets (positions or orders) a cross-margin - // subaccount may have within a single quote-denom pool. + // max_active_derivative_markets_per_pool is an optional additional admission + // cap when a cross-margin subaccount introduces a new derivative carrier in a + // quote-denom pool. Lowering it does not invalidate grandfathered carriers or + // prohibit activity in an already-counted market. MaxActiveDerivativeMarketsPerPool uint32 `protobuf:"varint,6,opt,name=max_active_derivative_markets_per_pool,json=maxActiveDerivativeMarketsPerPool,proto3" json:"max_active_derivative_markets_per_pool,omitempty"` - // emergency_paused defines whether cross margin is in emergency pause - // mode. When true: - // - User-submitted cross-margin orders (derivative + spot, limit / market - // / conditional, reduce-only included) are rejected at validation. - // - Paused resting makers are inert: every matcher and TOB scan skips - // them uniformly, including against system-generated liquidation - // taker orders. - // - Liquidation of paused pools is still permitted; system taker orders - // close positions against non-paused liquidity or defer to settlement. - // - Collateral-decreasing operations (withdrawals, transfers, margin - // decrease) remain subject to the marker-aware admission floor with - // positive UPnL stripped first, NOT to a flat isolated-margin - // maintenance level. + // emergency_paused defines whether new cross-margin activation and + // risk-increasing activity are paused. Risk reduction, order cancellation, + // authenticated liquidation, and scheduled settlement remain available. EmergencyPaused bool `protobuf:"varint,7,opt,name=emergency_paused,json=emergencyPaused,proto3" json:"emergency_paused,omitempty"` - // backstop_margin_ratio defines the target health buffer above - // maintenance margin for graduated liquidation. Liquidation stops when - // EquityLiquidation >= MM * (1 + ratio). + // backstop_margin_ratio is retained for legacy compatibility paths. The + // configured RFQ liquidation path always requires and closes the full pool. BackstopMarginRatio cosmossdk_io_math.LegacyDec `protobuf:"bytes,8,opt,name=backstop_margin_ratio,json=backstopMarginRatio,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"backstop_margin_ratio"` - // partial_liquidation_ratio is the fraction of the shortfall to target - // per liquidation tx. 1.0 = close enough to fully restore health; <1.0 - // = close only a fraction per tx. + // partial_liquidation_ratio is retained for legacy compatibility paths. It + // does not permit a partial configured-RFQ liquidation. PartialLiquidationRatio cosmossdk_io_math.LegacyDec `protobuf:"bytes,9,opt,name=partial_liquidation_ratio,json=partialLiquidationRatio,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"partial_liquidation_ratio"` - // liquidation_cooldown_blocks is the minimum number of blocks between - // successive partial liquidations on the same cross-margin pool. + // liquidation_cooldown_blocks is retained for legacy compatibility paths. + // The configured RFQ liquidation eligibility check is not cooldown-gated. LiquidationCooldownBlocks uint64 `protobuf:"varint,10,opt,name=liquidation_cooldown_blocks,json=liquidationCooldownBlocks,proto3" json:"liquidation_cooldown_blocks,omitempty"` - // max_cross_margin_spot_orders_per_subaccount_per_denom caps the number of - // open spot orders (resting limit + transient limit + transient market) - // that a cross-margin-mode subaccount may hold for any single locking - // denom. The cap protocol-bounds spot cancel-first work performed during - // cross-margin pool liquidation so the validator-work amplifier under fixed - // gas is bounded by a numeric protocol limit rather than only by fixed - // tx-level pricing. Enforcement - // applies only when the effective subaccount risk profile is RISK_MODE_CROSS; - // isolated-mode subaccounts are unaffected. + // max_cross_margin_spot_orders_per_subaccount_per_denom is an additional, + // possibly tighter, spot-order admission cap for each cross-margin + // subaccount and locking denom. MaxCrossMarginSpotOrdersPerSubaccountPerDenom uint32 `protobuf:"varint,13,opt,name=max_cross_margin_spot_orders_per_subaccount_per_denom,json=maxCrossMarginSpotOrdersPerSubaccountPerDenom,proto3" json:"max_cross_margin_spot_orders_per_subaccount_per_denom,omitempty"` // util_ratio defines the multiplier applied to the cash-floor admission // check: util_ratio * (QuoteBalance + PositionMarginTotal - ratcheted MM). // It must be in [0, 1]. 1.0 applies no extra utilization haircut; 0 disables // new risk-increasing cross-margin orders. UtilRatio cosmossdk_io_math.LegacyDec `protobuf:"bytes,14,opt,name=util_ratio,json=utilRatio,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"util_ratio"` + // liquidation_rfq_contract_address is the bounded set of RFQ router contracts + // permitted to settle cross-margin liquidations. An empty list disables + // cross-margin activation and requires cross_margin_enabled_quote_denoms to be + // empty. + LiquidationRfqContractAddress []string `protobuf:"bytes,15,rep,name=liquidation_rfq_contract_address,json=liquidationRfqContractAddress,proto3" json:"liquidation_rfq_contract_address,omitempty"` } func (m *CrossMarginParams) Reset() { *m = CrossMarginParams{} } func (m *CrossMarginParams) String() string { return proto.CompactTextString(m) } func (*CrossMarginParams) ProtoMessage() {} func (*CrossMarginParams) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{2} + return fileDescriptor_0b5851fb01a33564, []int{3} } func (m *CrossMarginParams) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -627,6 +679,13 @@ func (m *CrossMarginParams) GetMaxCrossMarginSpotOrdersPerSubaccountPerDenom() u return 0 } +func (m *CrossMarginParams) GetLiquidationRfqContractAddress() []string { + if m != nil { + return m.LiquidationRfqContractAddress + } + return nil +} + type NextFundingTimestamp struct { NextTimestamp int64 `protobuf:"varint,1,opt,name=next_timestamp,json=nextTimestamp,proto3" json:"next_timestamp,omitempty"` } @@ -635,7 +694,7 @@ func (m *NextFundingTimestamp) Reset() { *m = NextFundingTimestamp{} } func (m *NextFundingTimestamp) String() string { return proto.CompactTextString(m) } func (*NextFundingTimestamp) ProtoMessage() {} func (*NextFundingTimestamp) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{3} + return fileDescriptor_0b5851fb01a33564, []int{4} } func (m *NextFundingTimestamp) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -684,7 +743,7 @@ func (m *MidPriceAndTOB) Reset() { *m = MidPriceAndTOB{} } func (m *MidPriceAndTOB) String() string { return proto.CompactTextString(m) } func (*MidPriceAndTOB) ProtoMessage() {} func (*MidPriceAndTOB) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{4} + return fileDescriptor_0b5851fb01a33564, []int{5} } func (m *MidPriceAndTOB) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -725,7 +784,7 @@ func (m *Deposit) Reset() { *m = Deposit{} } func (m *Deposit) String() string { return proto.CompactTextString(m) } func (*Deposit) ProtoMessage() {} func (*Deposit) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{5} + return fileDescriptor_0b5851fb01a33564, []int{6} } func (m *Deposit) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -762,7 +821,7 @@ func (m *SubaccountTradeNonce) Reset() { *m = SubaccountTradeNonce{} } func (m *SubaccountTradeNonce) String() string { return proto.CompactTextString(m) } func (*SubaccountTradeNonce) ProtoMessage() {} func (*SubaccountTradeNonce) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{6} + return fileDescriptor_0b5851fb01a33564, []int{7} } func (m *SubaccountTradeNonce) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -811,7 +870,7 @@ func (m *SubaccountOrder) Reset() { *m = SubaccountOrder{} } func (m *SubaccountOrder) String() string { return proto.CompactTextString(m) } func (*SubaccountOrder) ProtoMessage() {} func (*SubaccountOrder) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{7} + return fileDescriptor_0b5851fb01a33564, []int{8} } func (m *SubaccountOrder) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -863,7 +922,7 @@ func (m *SubaccountOrderData) Reset() { *m = SubaccountOrderData{} } func (m *SubaccountOrderData) String() string { return proto.CompactTextString(m) } func (*SubaccountOrderData) ProtoMessage() {} func (*SubaccountOrderData) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{8} + return fileDescriptor_0b5851fb01a33564, []int{9} } func (m *SubaccountOrderData) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -923,7 +982,7 @@ func (m *Position) Reset() { *m = Position{} } func (m *Position) String() string { return proto.CompactTextString(m) } func (*Position) ProtoMessage() {} func (*Position) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{9} + return fileDescriptor_0b5851fb01a33564, []int{10} } func (m *Position) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -972,7 +1031,7 @@ func (m *Balance) Reset() { *m = Balance{} } func (m *Balance) String() string { return proto.CompactTextString(m) } func (*Balance) ProtoMessage() {} func (*Balance) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{10} + return fileDescriptor_0b5851fb01a33564, []int{11} } func (m *Balance) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1014,7 +1073,7 @@ func (m *DerivativePosition) Reset() { *m = DerivativePosition{} } func (m *DerivativePosition) String() string { return proto.CompactTextString(m) } func (*DerivativePosition) ProtoMessage() {} func (*DerivativePosition) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{11} + return fileDescriptor_0b5851fb01a33564, []int{12} } func (m *DerivativePosition) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1053,7 +1112,7 @@ func (m *MarketOrderIndicator) Reset() { *m = MarketOrderIndicator{} } func (m *MarketOrderIndicator) String() string { return proto.CompactTextString(m) } func (*MarketOrderIndicator) ProtoMessage() {} func (*MarketOrderIndicator) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{12} + return fileDescriptor_0b5851fb01a33564, []int{13} } func (m *MarketOrderIndicator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1114,7 +1173,7 @@ func (m *TradeLog) Reset() { *m = TradeLog{} } func (m *TradeLog) String() string { return proto.CompactTextString(m) } func (*TradeLog) ProtoMessage() {} func (*TradeLog) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{13} + return fileDescriptor_0b5851fb01a33564, []int{14} } func (m *TradeLog) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1182,7 +1241,7 @@ func (m *PositionDelta) Reset() { *m = PositionDelta{} } func (m *PositionDelta) String() string { return proto.CompactTextString(m) } func (*PositionDelta) ProtoMessage() {} func (*PositionDelta) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{14} + return fileDescriptor_0b5851fb01a33564, []int{15} } func (m *PositionDelta) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1233,7 +1292,7 @@ func (m *DerivativeTradeLog) Reset() { *m = DerivativeTradeLog{} } func (m *DerivativeTradeLog) String() string { return proto.CompactTextString(m) } func (*DerivativeTradeLog) ProtoMessage() {} func (*DerivativeTradeLog) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{15} + return fileDescriptor_0b5851fb01a33564, []int{16} } func (m *DerivativeTradeLog) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1306,7 +1365,7 @@ func (m *SubaccountPosition) Reset() { *m = SubaccountPosition{} } func (m *SubaccountPosition) String() string { return proto.CompactTextString(m) } func (*SubaccountPosition) ProtoMessage() {} func (*SubaccountPosition) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{16} + return fileDescriptor_0b5851fb01a33564, []int{17} } func (m *SubaccountPosition) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1358,7 +1417,7 @@ func (m *SubaccountDeposit) Reset() { *m = SubaccountDeposit{} } func (m *SubaccountDeposit) String() string { return proto.CompactTextString(m) } func (*SubaccountDeposit) ProtoMessage() {} func (*SubaccountDeposit) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{17} + return fileDescriptor_0b5851fb01a33564, []int{18} } func (m *SubaccountDeposit) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1410,7 +1469,7 @@ func (m *DepositUpdate) Reset() { *m = DepositUpdate{} } func (m *DepositUpdate) String() string { return proto.CompactTextString(m) } func (*DepositUpdate) ProtoMessage() {} func (*DepositUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{18} + return fileDescriptor_0b5851fb01a33564, []int{19} } func (m *DepositUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1462,7 +1521,7 @@ func (m *PointsMultiplier) Reset() { *m = PointsMultiplier{} } func (m *PointsMultiplier) String() string { return proto.CompactTextString(m) } func (*PointsMultiplier) ProtoMessage() {} func (*PointsMultiplier) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{19} + return fileDescriptor_0b5851fb01a33564, []int{20} } func (m *PointsMultiplier) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1502,7 +1561,7 @@ func (m *TradingRewardCampaignBoostInfo) Reset() { *m = TradingRewardCam func (m *TradingRewardCampaignBoostInfo) String() string { return proto.CompactTextString(m) } func (*TradingRewardCampaignBoostInfo) ProtoMessage() {} func (*TradingRewardCampaignBoostInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{20} + return fileDescriptor_0b5851fb01a33564, []int{21} } func (m *TradingRewardCampaignBoostInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1571,7 +1630,7 @@ func (m *CampaignRewardPool) Reset() { *m = CampaignRewardPool{} } func (m *CampaignRewardPool) String() string { return proto.CompactTextString(m) } func (*CampaignRewardPool) ProtoMessage() {} func (*CampaignRewardPool) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{21} + return fileDescriptor_0b5851fb01a33564, []int{22} } func (m *CampaignRewardPool) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1629,7 +1688,7 @@ func (m *TradingRewardCampaignInfo) Reset() { *m = TradingRewardCampaign func (m *TradingRewardCampaignInfo) String() string { return proto.CompactTextString(m) } func (*TradingRewardCampaignInfo) ProtoMessage() {} func (*TradingRewardCampaignInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{22} + return fileDescriptor_0b5851fb01a33564, []int{23} } func (m *TradingRewardCampaignInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1701,7 +1760,7 @@ func (m *FeeDiscountTierInfo) Reset() { *m = FeeDiscountTierInfo{} } func (m *FeeDiscountTierInfo) String() string { return proto.CompactTextString(m) } func (*FeeDiscountTierInfo) ProtoMessage() {} func (*FeeDiscountTierInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{23} + return fileDescriptor_0b5851fb01a33564, []int{24} } func (m *FeeDiscountTierInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1749,7 +1808,7 @@ func (m *FeeDiscountSchedule) Reset() { *m = FeeDiscountSchedule{} } func (m *FeeDiscountSchedule) String() string { return proto.CompactTextString(m) } func (*FeeDiscountSchedule) ProtoMessage() {} func (*FeeDiscountSchedule) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{24} + return fileDescriptor_0b5851fb01a33564, []int{25} } func (m *FeeDiscountSchedule) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1824,7 +1883,7 @@ func (m *FeeDiscountTierTTL) Reset() { *m = FeeDiscountTierTTL{} } func (m *FeeDiscountTierTTL) String() string { return proto.CompactTextString(m) } func (*FeeDiscountTierTTL) ProtoMessage() {} func (*FeeDiscountTierTTL) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{25} + return fileDescriptor_0b5851fb01a33564, []int{26} } func (m *FeeDiscountTierTTL) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1876,7 +1935,7 @@ func (m *AccountRewards) Reset() { *m = AccountRewards{} } func (m *AccountRewards) String() string { return proto.CompactTextString(m) } func (*AccountRewards) ProtoMessage() {} func (*AccountRewards) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{26} + return fileDescriptor_0b5851fb01a33564, []int{27} } func (m *AccountRewards) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1928,7 +1987,7 @@ func (m *TradeRecords) Reset() { *m = TradeRecords{} } func (m *TradeRecords) String() string { return proto.CompactTextString(m) } func (*TradeRecords) ProtoMessage() {} func (*TradeRecords) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{27} + return fileDescriptor_0b5851fb01a33564, []int{28} } func (m *TradeRecords) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1979,7 +2038,7 @@ func (m *SubaccountIDs) Reset() { *m = SubaccountIDs{} } func (m *SubaccountIDs) String() string { return proto.CompactTextString(m) } func (*SubaccountIDs) ProtoMessage() {} func (*SubaccountIDs) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{28} + return fileDescriptor_0b5851fb01a33564, []int{29} } func (m *SubaccountIDs) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2028,7 +2087,7 @@ func (m *TradeRecord) Reset() { *m = TradeRecord{} } func (m *TradeRecord) String() string { return proto.CompactTextString(m) } func (*TradeRecord) ProtoMessage() {} func (*TradeRecord) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{29} + return fileDescriptor_0b5851fb01a33564, []int{30} } func (m *TradeRecord) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2075,7 +2134,7 @@ func (m *Level) Reset() { *m = Level{} } func (m *Level) String() string { return proto.CompactTextString(m) } func (*Level) ProtoMessage() {} func (*Level) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{30} + return fileDescriptor_0b5851fb01a33564, []int{31} } func (m *Level) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2115,7 +2174,7 @@ func (m *AggregateSubaccountVolumeRecord) Reset() { *m = AggregateSubacc func (m *AggregateSubaccountVolumeRecord) String() string { return proto.CompactTextString(m) } func (*AggregateSubaccountVolumeRecord) ProtoMessage() {} func (*AggregateSubaccountVolumeRecord) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{31} + return fileDescriptor_0b5851fb01a33564, []int{32} } func (m *AggregateSubaccountVolumeRecord) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2169,7 +2228,7 @@ func (m *AggregateAccountVolumeRecord) Reset() { *m = AggregateAccountVo func (m *AggregateAccountVolumeRecord) String() string { return proto.CompactTextString(m) } func (*AggregateAccountVolumeRecord) ProtoMessage() {} func (*AggregateAccountVolumeRecord) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{32} + return fileDescriptor_0b5851fb01a33564, []int{33} } func (m *AggregateAccountVolumeRecord) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2223,7 +2282,7 @@ func (m *DenomDecimals) Reset() { *m = DenomDecimals{} } func (m *DenomDecimals) String() string { return proto.CompactTextString(m) } func (*DenomDecimals) ProtoMessage() {} func (*DenomDecimals) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{33} + return fileDescriptor_0b5851fb01a33564, []int{34} } func (m *DenomDecimals) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2277,7 +2336,7 @@ func (m *GrantAuthorization) Reset() { *m = GrantAuthorization{} } func (m *GrantAuthorization) String() string { return proto.CompactTextString(m) } func (*GrantAuthorization) ProtoMessage() {} func (*GrantAuthorization) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{34} + return fileDescriptor_0b5851fb01a33564, []int{35} } func (m *GrantAuthorization) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2322,7 +2381,7 @@ func (m *ActiveGrant) Reset() { *m = ActiveGrant{} } func (m *ActiveGrant) String() string { return proto.CompactTextString(m) } func (*ActiveGrant) ProtoMessage() {} func (*ActiveGrant) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{35} + return fileDescriptor_0b5851fb01a33564, []int{36} } func (m *ActiveGrant) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2368,7 +2427,7 @@ func (m *EffectiveGrant) Reset() { *m = EffectiveGrant{} } func (m *EffectiveGrant) String() string { return proto.CompactTextString(m) } func (*EffectiveGrant) ProtoMessage() {} func (*EffectiveGrant) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{36} + return fileDescriptor_0b5851fb01a33564, []int{37} } func (m *EffectiveGrant) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2422,7 +2481,7 @@ func (m *DenomMinNotional) Reset() { *m = DenomMinNotional{} } func (m *DenomMinNotional) String() string { return proto.CompactTextString(m) } func (*DenomMinNotional) ProtoMessage() {} func (*DenomMinNotional) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{37} + return fileDescriptor_0b5851fb01a33564, []int{38} } func (m *DenomMinNotional) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2469,7 +2528,7 @@ func (m *SubaccountRiskProfile) Reset() { *m = SubaccountRiskProfile{} } func (m *SubaccountRiskProfile) String() string { return proto.CompactTextString(m) } func (*SubaccountRiskProfile) ProtoMessage() {} func (*SubaccountRiskProfile) Descriptor() ([]byte, []int) { - return fileDescriptor_0b5851fb01a33564, []int{38} + return fileDescriptor_0b5851fb01a33564, []int{39} } func (m *SubaccountRiskProfile) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2525,6 +2584,7 @@ func init() { proto.RegisterEnum("injective.exchange.v2.ReservationPolicy", ReservationPolicy_name, ReservationPolicy_value) proto.RegisterType((*EnforcedRestrictionsContract)(nil), "injective.exchange.v2.EnforcedRestrictionsContract") proto.RegisterType((*Params)(nil), "injective.exchange.v2.Params") + proto.RegisterType((*SwapParams)(nil), "injective.exchange.v2.SwapParams") proto.RegisterType((*CrossMarginParams)(nil), "injective.exchange.v2.CrossMarginParams") proto.RegisterType((*NextFundingTimestamp)(nil), "injective.exchange.v2.NextFundingTimestamp") proto.RegisterType((*MidPriceAndTOB)(nil), "injective.exchange.v2.MidPriceAndTOB") @@ -2569,249 +2629,254 @@ func init() { } var fileDescriptor_0b5851fb01a33564 = []byte{ - // 3865 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x5a, 0x4b, 0x6c, 0x5c, 0xc9, - 0x5a, 0xce, 0xf1, 0xb3, 0xfd, 0xdb, 0x6d, 0xb7, 0xcb, 0xaf, 0x76, 0xe2, 0xd8, 0xce, 0x49, 0x32, - 0xf1, 0x64, 0x6e, 0xec, 0x9b, 0x8c, 0x72, 0x35, 0x64, 0x78, 0xf9, 0x39, 0xe9, 0x99, 0x76, 0xec, - 0x39, 0xed, 0xe4, 0xc2, 0xbd, 0x62, 0x0e, 0xe5, 0x73, 0xaa, 0xbb, 0x6b, 0x7c, 0x5e, 0x3e, 0x55, - 0xed, 0xb1, 0x79, 0x2c, 0x90, 0xae, 0x04, 0xba, 0x48, 0xe8, 0xc2, 0x82, 0x05, 0xe2, 0xa2, 0x59, - 0x80, 0x90, 0x58, 0xb1, 0x60, 0xc9, 0x02, 0x09, 0x21, 0x8d, 0x04, 0x8b, 0x2b, 0x16, 0x08, 0xb1, - 0xb8, 0xa0, 0x99, 0x05, 0x23, 0xd6, 0x6c, 0x91, 0x50, 0x3d, 0xce, 0xa3, 0xdb, 0x6e, 0xa7, 0x3b, - 0x03, 0x8b, 0xbb, 0x49, 0x7c, 0xaa, 0xfe, 0xff, 0xfb, 0xff, 0xaa, 0xff, 0xaf, 0xff, 0x51, 0xd5, - 0x70, 0x8f, 0x06, 0x9f, 0x12, 0x87, 0xd3, 0x33, 0xb2, 0x41, 0xce, 0x9d, 0x26, 0x0e, 0x1a, 0x64, - 0xe3, 0xec, 0x49, 0xfa, 0xf7, 0x7a, 0x14, 0x87, 0x3c, 0x44, 0x73, 0x29, 0xd5, 0x7a, 0x3a, 0x73, - 0xf6, 0xe4, 0xe6, 0x6c, 0x23, 0x6c, 0x84, 0x92, 0x62, 0x43, 0xfc, 0xa5, 0x88, 0x6f, 0x4e, 0x63, - 0x9f, 0x06, 0xe1, 0x86, 0xfc, 0x57, 0x0f, 0x2d, 0x3b, 0x21, 0xf3, 0x43, 0xb6, 0x71, 0x8c, 0x19, - 0xd9, 0x38, 0x7b, 0x7c, 0x4c, 0x38, 0x7e, 0xbc, 0xe1, 0x84, 0x34, 0xd0, 0xf3, 0x8b, 0x6a, 0xde, - 0x56, 0x58, 0xea, 0x43, 0x4f, 0xdd, 0xcf, 0x14, 0x0c, 0x63, 0xec, 0x78, 0x19, 0xbf, 0xfa, 0xd4, - 0x64, 0xe6, 0xd5, 0xeb, 0xf0, 0x71, 0x7c, 0x42, 0xb8, 0xa6, 0xb9, 0x73, 0x35, 0x4d, 0x18, 0xbb, - 0x24, 0x56, 0x24, 0xe6, 0x8f, 0x0d, 0x58, 0xda, 0x0d, 0xea, 0x61, 0xec, 0x10, 0xd7, 0x22, 0x8c, - 0xc7, 0xd4, 0xe1, 0x34, 0x0c, 0xd8, 0x76, 0x18, 0xf0, 0x18, 0x3b, 0x1c, 0x6d, 0x43, 0xc9, 0xd1, - 0x7f, 0xdb, 0xd8, 0x75, 0x63, 0xc2, 0x58, 0xd9, 0x58, 0x35, 0xd6, 0xc6, 0xb6, 0xca, 0xff, 0xfc, - 0x37, 0x8f, 0x66, 0xb5, 0xea, 0x9b, 0x6a, 0xa6, 0xc6, 0x63, 0x1a, 0x34, 0xac, 0xa9, 0x84, 0x43, - 0x0f, 0xa3, 0x27, 0x30, 0x17, 0xe1, 0x16, 0x23, 0x36, 0x39, 0x23, 0x01, 0xb7, 0x19, 0x6d, 0x04, - 0x98, 0xb7, 0x62, 0x52, 0x1e, 0x10, 0x48, 0xd6, 0x8c, 0x9c, 0xdc, 0x15, 0x73, 0xb5, 0x64, 0xea, - 0xd9, 0xd0, 0xd7, 0x9f, 0xaf, 0x18, 0xe6, 0x17, 0x4b, 0x30, 0x72, 0x88, 0x63, 0xec, 0x33, 0x44, - 0x60, 0x85, 0x45, 0x21, 0xb7, 0xd5, 0x12, 0x6d, 0x1a, 0x30, 0x8e, 0x03, 0x6e, 0x7b, 0x94, 0x71, - 0x1a, 0x34, 0xec, 0x3a, 0x21, 0x52, 0xb1, 0xf1, 0x27, 0x8b, 0xeb, 0x5a, 0x2b, 0xb1, 0xfb, 0xeb, - 0x7a, 0xf7, 0xd6, 0xb7, 0x43, 0x1a, 0x6c, 0x0d, 0x7d, 0xf1, 0xd3, 0x95, 0x1b, 0xd6, 0x2d, 0x81, - 0xb3, 0x2f, 0x61, 0x2a, 0x0a, 0xa5, 0xaa, 0x40, 0xf6, 0x08, 0x41, 0xa7, 0x70, 0xdf, 0x25, 0x31, - 0x3d, 0xc3, 0x62, 0xdf, 0xae, 0x13, 0x36, 0xd0, 0x9b, 0xb0, 0x3b, 0x19, 0x5a, 0x37, 0x91, 0x18, - 0x6e, 0xb9, 0xa4, 0x8e, 0x5b, 0x1e, 0xb7, 0xf5, 0x0a, 0x4f, 0x48, 0x2c, 0x64, 0xd8, 0x31, 0xe6, - 0xa4, 0x3c, 0x28, 0xb7, 0xfb, 0xae, 0x40, 0xfb, 0xb7, 0x9f, 0xae, 0xdc, 0x52, 0xf2, 0x98, 0x7b, - 0xb2, 0x4e, 0xc3, 0x0d, 0x1f, 0xf3, 0xe6, 0x7a, 0x95, 0x34, 0xb0, 0x73, 0xb1, 0x43, 0x1c, 0x6b, - 0x41, 0xe3, 0xd4, 0xe4, 0x02, 0x4f, 0x48, 0xbc, 0x47, 0x88, 0x85, 0xf9, 0x65, 0x11, 0xbc, 0x5d, - 0xc4, 0xd0, 0x9b, 0x89, 0x38, 0xca, 0x8b, 0xf0, 0xe1, 0x4e, 0x22, 0xa2, 0x6d, 0x03, 0xdb, 0x04, - 0x0d, 0xf7, 0x2e, 0xe8, 0xb6, 0x46, 0xdb, 0xc9, 0xed, 0xdf, 0x6b, 0xc5, 0x75, 0xac, 0x6b, 0xe4, - 0x9b, 0x88, 0x6b, 0x5b, 0x9d, 0x0b, 0x4b, 0x89, 0x38, 0x1a, 0x50, 0x4e, 0xb1, 0x27, 0x7c, 0xa3, - 0x41, 0x03, 0x21, 0x88, 0x86, 0xe5, 0xd1, 0xde, 0x25, 0x2d, 0x6a, 0xa0, 0x8a, 0xc2, 0xd9, 0x97, - 0x30, 0x96, 0x40, 0x41, 0x1e, 0xac, 0x26, 0x52, 0x7c, 0x4c, 0x03, 0x4e, 0x02, 0x1c, 0x38, 0xa4, - 0x5d, 0x52, 0xa1, 0xff, 0x35, 0xed, 0x67, 0x58, 0x79, 0x69, 0xef, 0x41, 0x39, 0x91, 0x56, 0x6f, - 0x05, 0xae, 0x70, 0x6c, 0x41, 0x17, 0x9f, 0x61, 0xaf, 0x3c, 0xb6, 0x6a, 0xac, 0x0d, 0x5a, 0xf3, - 0x7a, 0x7e, 0x4f, 0x4d, 0x57, 0xf4, 0x2c, 0x7a, 0x1b, 0x4a, 0x09, 0x87, 0xdf, 0xf2, 0x38, 0x8d, - 0x3c, 0x52, 0x06, 0xc9, 0x31, 0xa5, 0xc7, 0xf7, 0xf5, 0x30, 0xfa, 0x15, 0x98, 0x8f, 0x89, 0x87, - 0x2f, 0xb4, 0x59, 0x58, 0x13, 0xc7, 0xda, 0x38, 0xe3, 0xbd, 0x2f, 0x64, 0x46, 0x43, 0xec, 0x11, - 0x52, 0x13, 0x00, 0xd2, 0x24, 0x14, 0x56, 0x12, 0xf5, 0x9b, 0x61, 0x2b, 0xf6, 0x2e, 0xd2, 0x55, - 0x08, 0x78, 0xdb, 0xc1, 0x51, 0x79, 0xa2, 0x77, 0x11, 0xc9, 0xf9, 0x78, 0x2e, 0xa1, 0xf4, 0x82, - 0x85, 0x9c, 0x6d, 0x1c, 0xe5, 0xad, 0xaf, 0x45, 0xc9, 0x8d, 0x22, 0x8c, 0xab, 0xa5, 0x14, 0xfb, - 0xb7, 0xbe, 0x92, 0x53, 0xd1, 0x30, 0x72, 0x41, 0x3b, 0xb0, 0xe2, 0xe3, 0xf3, 0xbc, 0x3b, 0xcb, - 0x50, 0x6d, 0x33, 0xea, 0x12, 0xdb, 0x09, 0x5b, 0x01, 0x2f, 0x4f, 0xae, 0x1a, 0x6b, 0x45, 0xeb, - 0x96, 0x8f, 0xcf, 0x33, 0x3f, 0x3d, 0x10, 0x44, 0x35, 0xea, 0x92, 0x6d, 0x41, 0x82, 0x18, 0x3c, - 0xa0, 0xc1, 0xa7, 0x76, 0x4c, 0x3e, 0xc3, 0xb1, 0x6b, 0x33, 0x71, 0x22, 0x5c, 0x3b, 0x26, 0xa7, - 0x2d, 0x1a, 0x13, 0x5f, 0x84, 0x5f, 0xde, 0x8c, 0x09, 0x6b, 0x86, 0x9e, 0x5b, 0x9e, 0x92, 0x6a, - 0xdf, 0xd6, 0x6a, 0xcf, 0x5d, 0x56, 0xbb, 0x12, 0x70, 0xeb, 0x2e, 0x0d, 0x3e, 0xb5, 0x24, 0x58, - 0x4d, 0x62, 0x59, 0x19, 0xd4, 0x51, 0x82, 0x84, 0x3e, 0x80, 0x55, 0x1e, 0x63, 0xb5, 0xf9, 0x92, - 0x96, 0xd9, 0x67, 0x44, 0xc5, 0x4a, 0xb7, 0x25, 0xfd, 0x36, 0x28, 0x97, 0xa4, 0x83, 0xdc, 0xd6, - 0x74, 0x0a, 0x92, 0xbd, 0x52, 0x54, 0x3b, 0x9a, 0x48, 0xec, 0xb4, 0x47, 0x4f, 0x5b, 0xd4, 0xc5, - 0x3c, 0x8c, 0xd3, 0x45, 0x64, 0x4e, 0x33, 0xdd, 0xc7, 0x4e, 0x67, 0x40, 0x5a, 0xff, 0xd4, 0x75, - 0xce, 0xe1, 0xed, 0x63, 0x1a, 0xe0, 0xf8, 0xc2, 0x0e, 0x23, 0x99, 0xef, 0xae, 0x0b, 0xf4, 0xa8, - 0xb7, 0x40, 0x7f, 0x4f, 0x21, 0x1e, 0x28, 0xc0, 0x6e, 0xb1, 0xfe, 0x37, 0x61, 0x15, 0xf3, 0xd0, - 0xa7, 0x4e, 0x22, 0x51, 0x99, 0x18, 0x3b, 0x0e, 0x61, 0xcc, 0xf6, 0xc8, 0x19, 0xf1, 0xca, 0x33, - 0xab, 0xc6, 0xda, 0xe4, 0x93, 0x77, 0xd7, 0xaf, 0x2c, 0x42, 0xd6, 0x37, 0x25, 0xbb, 0xc2, 0x97, - 0xa6, 0xdf, 0x94, 0xbc, 0x55, 0xc1, 0x6a, 0x2d, 0xe1, 0x6b, 0x66, 0xd1, 0x39, 0x3c, 0x90, 0xd1, - 0xff, 0x2a, 0x0d, 0xc4, 0xe1, 0xd4, 0x67, 0x99, 0x92, 0xb8, 0x3c, 0xdb, 0xfb, 0x3e, 0x9b, 0x02, - 0xf3, 0x92, 0x56, 0x7b, 0x84, 0xec, 0xa7, 0x70, 0xe8, 0x07, 0x06, 0x3c, 0xca, 0xf9, 0x75, 0x0f, - 0x0a, 0xcc, 0xf5, 0xae, 0xc0, 0x5a, 0x86, 0xfc, 0x1a, 0x35, 0x7e, 0xdf, 0x80, 0xc7, 0x1d, 0x86, - 0xef, 0x41, 0x95, 0xf9, 0xde, 0x55, 0x79, 0xa7, 0xcd, 0x09, 0x5e, 0xa3, 0xcd, 0x27, 0xb0, 0xe8, - 0xd3, 0x80, 0xfa, 0xd8, 0x53, 0x85, 0xa0, 0x13, 0x7a, 0x59, 0xea, 0x5a, 0xe8, 0x5d, 0xe8, 0xbc, - 0x46, 0x39, 0xd4, 0x20, 0x49, 0xce, 0xfa, 0x3e, 0xbc, 0x43, 0x59, 0xea, 0xd2, 0x97, 0xab, 0x1a, - 0x0f, 0xb7, 0x02, 0xa7, 0x69, 0x93, 0x00, 0x1f, 0x7b, 0xc4, 0x2d, 0x97, 0x57, 0x8d, 0xb5, 0x82, - 0xf5, 0x16, 0x65, 0xda, 0x6b, 0x77, 0x3a, 0x0a, 0x97, 0xaa, 0x24, 0xdf, 0x55, 0xd4, 0x22, 0x58, - 0x45, 0x21, 0xe3, 0x76, 0x18, 0x78, 0x17, 0xb6, 0x1f, 0xba, 0xc4, 0x6e, 0x12, 0xda, 0x68, 0xe6, - 0xc3, 0xcb, 0xa2, 0x3c, 0xf0, 0xb7, 0x04, 0xd9, 0x41, 0xe0, 0x5d, 0xec, 0x87, 0x2e, 0x79, 0x2e, - 0x69, 0xb2, 0xb8, 0xd1, 0x80, 0xc7, 0x3a, 0xb9, 0xb9, 0xc4, 0x89, 0x09, 0x66, 0xc4, 0x8e, 0x62, - 0xea, 0x10, 0x9b, 0x53, 0x9f, 0x30, 0x8e, 0xfd, 0x28, 0xc3, 0xb3, 0x19, 0x71, 0xc2, 0xc0, 0x65, - 0xe5, 0x9b, 0x12, 0xf7, 0x5b, 0x8a, 0x71, 0x47, 0xf3, 0x1d, 0x0a, 0xb6, 0xa3, 0x84, 0x2b, 0x95, - 0x50, 0x53, 0x3c, 0xe8, 0x01, 0x4c, 0x25, 0x87, 0xc8, 0xc6, 0xae, 0x4f, 0x03, 0x56, 0xbe, 0xb5, - 0x3a, 0xb8, 0x36, 0x66, 0x4d, 0x26, 0xc3, 0x9b, 0x72, 0x14, 0xbd, 0x80, 0x19, 0x11, 0x3e, 0x71, - 0x4b, 0x16, 0xc2, 0xb6, 0x08, 0xc8, 0x22, 0x93, 0x2c, 0x49, 0x73, 0xac, 0x5c, 0x1b, 0x2a, 0xcb, - 0x86, 0x55, 0xa2, 0xc1, 0xa7, 0x9b, 0x8a, 0x75, 0x1f, 0x9f, 0x8b, 0xd4, 0xf1, 0x10, 0xa6, 0xeb, - 0xf4, 0x9c, 0xb8, 0x76, 0x03, 0xb3, 0x74, 0xab, 0x6f, 0xcb, 0xad, 0x9e, 0x92, 0x13, 0x1f, 0x60, - 0x96, 0xec, 0xe9, 0xfb, 0x70, 0x93, 0xf8, 0x94, 0xdb, 0x9e, 0x34, 0xad, 0x7d, 0x46, 0x62, 0x26, - 0x74, 0x90, 0x55, 0x33, 0x2b, 0x2f, 0x4b, 0xa6, 0x05, 0x41, 0xa1, 0x6c, 0xff, 0x4a, 0xcd, 0xcb, - 0xc2, 0x99, 0xa1, 0xe3, 0xac, 0xc4, 0x8b, 0x89, 0xdb, 0xea, 0x2c, 0x1b, 0x56, 0x7a, 0xf7, 0xa7, - 0xa4, 0x2a, 0xb0, 0x24, 0x4c, 0xbe, 0x62, 0xf8, 0x45, 0x58, 0xea, 0x30, 0xfa, 0xb1, 0x17, 0x3a, - 0x27, 0xcc, 0xc6, 0xbe, 0x4c, 0x4f, 0x77, 0x56, 0x8d, 0xb5, 0x21, 0xab, 0x9c, 0xb7, 0xf8, 0x96, - 0x24, 0xd8, 0x94, 0xf3, 0x68, 0x1f, 0xee, 0xf9, 0x34, 0xb0, 0x3b, 0x30, 0xdc, 0xf0, 0xb3, 0x40, - 0xd8, 0x3b, 0x4b, 0x15, 0xa6, 0xec, 0x0b, 0x56, 0x7c, 0x1a, 0x1c, 0xe6, 0xa0, 0x76, 0x34, 0x5d, - 0x9a, 0x2c, 0xbe, 0x07, 0xef, 0x5c, 0xa7, 0x8e, 0x8d, 0xeb, 0x9c, 0xc4, 0x29, 0x7c, 0xf9, 0xae, - 0xd4, 0xee, 0x7e, 0x37, 0xed, 0x36, 0x05, 0x75, 0x22, 0x03, 0xfd, 0xb1, 0x01, 0x0f, 0x5d, 0x12, - 0xc5, 0xc4, 0xc1, 0x9c, 0xb8, 0x36, 0xd1, 0x4d, 0x92, 0x1d, 0xe7, 0xba, 0x24, 0x3b, 0x69, 0x74, - 0x58, 0xf9, 0xde, 0xea, 0xe0, 0xda, 0x78, 0xd7, 0x98, 0x7d, 0x5d, 0x8b, 0xa5, 0xd3, 0xc7, 0x83, - 0x4c, 0xd8, 0x75, 0xd4, 0x4c, 0x54, 0x6d, 0x9f, 0x35, 0x29, 0x27, 0xf6, 0x49, 0x20, 0xcf, 0x5b, - 0x96, 0xe5, 0x58, 0xf9, 0xbe, 0x74, 0xe9, 0x79, 0x39, 0xff, 0x91, 0x9c, 0xae, 0x66, 0xb3, 0xe8, - 0xb7, 0xe0, 0xed, 0x2e, 0x9c, 0x57, 0x24, 0xda, 0xb7, 0x7a, 0xf7, 0x97, 0x7b, 0x57, 0xca, 0xeb, - 0xcc, 0xb9, 0x9f, 0xc0, 0x8c, 0x13, 0x87, 0x8c, 0x25, 0x6e, 0x19, 0xc9, 0xb6, 0xae, 0xfc, 0x40, - 0x66, 0xd7, 0xb5, 0x2e, 0x1b, 0xb7, 0x2d, 0x38, 0x94, 0x07, 0xaa, 0x36, 0x50, 0xef, 0xd6, 0xb4, - 0xd3, 0x39, 0xf1, 0xac, 0x2c, 0x1a, 0xc6, 0x1f, 0xfe, 0xe7, 0x5f, 0x3f, 0x4c, 0x0f, 0xfa, 0x86, - 0x9a, 0xf9, 0x70, 0xa8, 0xb0, 0x5a, 0xba, 0x63, 0xfe, 0xcf, 0x08, 0x4c, 0x5f, 0x82, 0x43, 0xbf, - 0x0e, 0x37, 0xa3, 0x90, 0x51, 0x19, 0x16, 0x5b, 0x51, 0xe0, 0xd9, 0x4d, 0x4c, 0x63, 0xa7, 0xa5, - 0xeb, 0x3a, 0xa3, 0x8f, 0xbe, 0x28, 0x81, 0x79, 0x19, 0x05, 0xde, 0x73, 0x05, 0xa2, 0xab, 0xba, - 0xf1, 0x3a, 0x21, 0xcc, 0x3e, 0x6e, 0xd5, 0xeb, 0x24, 0x56, 0x2d, 0x6f, 0x6f, 0x90, 0x20, 0xf8, - 0xb6, 0x24, 0x1b, 0xfa, 0x36, 0xcc, 0xea, 0xe0, 0x61, 0x9f, 0xb6, 0x42, 0x4e, 0x6c, 0x97, 0x04, - 0xa1, 0xcf, 0xca, 0x83, 0xd2, 0xe2, 0x48, 0xcf, 0x7d, 0x2c, 0xa6, 0x76, 0xe4, 0x0c, 0x7a, 0x07, - 0xa6, 0x23, 0x12, 0x47, 0x84, 0xb7, 0xb0, 0x97, 0x06, 0x9e, 0x21, 0x19, 0x43, 0x4a, 0xe9, 0x44, - 0x12, 0x79, 0xee, 0xc3, 0x24, 0x39, 0x8f, 0x68, 0x7c, 0x91, 0x52, 0x0e, 0x4b, 0xca, 0xa2, 0x1a, - 0x4d, 0xc8, 0x3e, 0x86, 0xb7, 0x44, 0x40, 0xc4, 0xd2, 0x50, 0x97, 0x33, 0x0a, 0xb3, 0x23, 0x12, - 0xdb, 0x51, 0x18, 0x7a, 0xb2, 0xf3, 0x2a, 0x5a, 0x77, 0x7c, 0x7c, 0xbe, 0x29, 0x89, 0x3b, 0x93, - 0x09, 0x3b, 0x24, 0xf1, 0x61, 0x18, 0xca, 0x56, 0x82, 0xf8, 0x24, 0x6e, 0x90, 0xc0, 0xb9, 0xb0, - 0xe5, 0x45, 0x80, 0x2b, 0x9b, 0xa9, 0x82, 0x35, 0x95, 0x8e, 0x1f, 0xca, 0x61, 0xf4, 0x5d, 0x98, - 0x3b, 0xc6, 0xce, 0x09, 0xe3, 0x61, 0xf4, 0xc6, 0x2d, 0xd1, 0x4c, 0x82, 0x90, 0x0f, 0x6b, 0x36, - 0x2c, 0x46, 0x38, 0x96, 0x4d, 0x5d, 0x72, 0x26, 0x44, 0xdc, 0x55, 0xe0, 0x63, 0xfd, 0xf8, 0x80, - 0x42, 0xa9, 0x66, 0x20, 0x49, 0xdc, 0xbc, 0x95, 0x07, 0x76, 0xc2, 0xd0, 0x13, 0x51, 0x49, 0x87, - 0x2b, 0xd9, 0x3a, 0x0d, 0x65, 0xf5, 0x2a, 0x0d, 0x83, 0x6d, 0x4d, 0xa1, 0xe2, 0x13, 0xf2, 0xe0, - 0xa9, 0x4c, 0x44, 0xf9, 0xf3, 0x23, 0x2b, 0x39, 0x59, 0xaf, 0xa8, 0x6d, 0x67, 0xad, 0x63, 0xec, - 0xc8, 0x2e, 0x41, 0x7e, 0x4a, 0xff, 0x90, 0x8d, 0x49, 0xd1, 0x7a, 0xe4, 0xe3, 0xf3, 0x9c, 0xeb, - 0x8b, 0xd6, 0x5d, 0x96, 0x23, 0xc2, 0x08, 0xb5, 0x94, 0xed, 0x90, 0xc4, 0xd2, 0x75, 0xd0, 0x16, - 0x40, 0x8b, 0x53, 0x4f, 0xaf, 0x7f, 0xb2, 0xf7, 0xf5, 0x8f, 0x09, 0x36, 0xb9, 0x62, 0x75, 0x7d, - 0xf3, 0xe1, 0x50, 0x61, 0xbc, 0x34, 0xf1, 0xe1, 0x50, 0x61, 0xa2, 0x54, 0x34, 0x7f, 0x01, 0x66, - 0x5f, 0x90, 0xf3, 0xa4, 0x95, 0x4c, 0x33, 0xb5, 0x70, 0xbd, 0x80, 0x9c, 0xf3, 0x2c, 0xe3, 0xcb, - 0x53, 0x37, 0x68, 0x15, 0xc5, 0x68, 0x4a, 0x66, 0xfe, 0x97, 0x01, 0x93, 0xfb, 0xd4, 0x95, 0x69, - 0x7e, 0x33, 0x70, 0x8f, 0x0e, 0xb6, 0xd0, 0x2f, 0xc3, 0x98, 0x4f, 0x5d, 0x55, 0x30, 0xe4, 0x8e, - 0xaa, 0xf1, 0x3a, 0x35, 0x0b, 0xbe, 0xc6, 0x41, 0x15, 0x98, 0x3c, 0x16, 0x4d, 0xdc, 0x71, 0xeb, - 0x42, 0xc3, 0x0c, 0xf4, 0x0e, 0x33, 0x21, 0x58, 0xb7, 0x5a, 0x17, 0x0a, 0xea, 0x23, 0x98, 0x92, - 0x50, 0x8c, 0x78, 0x9e, 0xc6, 0x1a, 0xec, 0x1d, 0xab, 0x28, 0x78, 0x6b, 0xc4, 0xf3, 0x24, 0x98, - 0xf9, 0x17, 0x06, 0x8c, 0xee, 0x10, 0x19, 0x51, 0xd0, 0x21, 0x4c, 0xe3, 0x33, 0x4c, 0x3d, 0x71, - 0x02, 0xed, 0x63, 0xec, 0x89, 0x2e, 0xbe, 0x9f, 0xc0, 0x54, 0x4a, 0xb9, 0xb7, 0x14, 0x33, 0x7a, - 0x0e, 0x45, 0x1e, 0x72, 0xec, 0xa5, 0x68, 0x7d, 0xc4, 0xa4, 0x09, 0xc9, 0xa9, 0x91, 0xcc, 0x6f, - 0xc1, 0x6c, 0xe6, 0x3f, 0x47, 0x31, 0x76, 0xc9, 0x8b, 0x50, 0x48, 0x98, 0x85, 0xe1, 0x20, 0x4c, - 0xf4, 0x2c, 0x5a, 0xea, 0xc3, 0xfc, 0x7b, 0x03, 0xa6, 0x32, 0x72, 0xe9, 0x81, 0xe8, 0xe7, 0x60, - 0xb8, 0xd3, 0x7e, 0xaf, 0xd5, 0x41, 0x71, 0xa0, 0x5f, 0x82, 0xc2, 0x69, 0x0b, 0x07, 0x9c, 0xf2, - 0x8b, 0x7e, 0x56, 0x90, 0x32, 0x21, 0x13, 0x26, 0x28, 0x53, 0x45, 0x8e, 0xa8, 0x07, 0xa4, 0xbd, - 0x0a, 0x56, 0xdb, 0x18, 0x2a, 0xc1, 0xa0, 0x43, 0x55, 0xdc, 0x1c, 0xb3, 0xc4, 0x9f, 0x66, 0x0c, - 0x33, 0x1d, 0x8b, 0xd8, 0xc1, 0x1c, 0xa3, 0x9f, 0x87, 0x61, 0x79, 0x18, 0xf5, 0x25, 0xe4, 0x5b, - 0x5d, 0x12, 0x5a, 0x07, 0xab, 0xa5, 0x98, 0xd0, 0x6d, 0x00, 0xd5, 0x7a, 0x34, 0x31, 0x6b, 0xca, - 0xd5, 0x4c, 0x58, 0x63, 0x72, 0xe4, 0x39, 0x66, 0x4d, 0xf3, 0x1f, 0x06, 0xa0, 0x70, 0x28, 0xf3, - 0x4b, 0x18, 0xa0, 0x79, 0x18, 0xa1, 0xac, 0x1a, 0x06, 0x0d, 0x29, 0xaa, 0x60, 0xe9, 0xaf, 0x6f, - 0xbe, 0x1f, 0x3b, 0x30, 0x4e, 0x02, 0x1e, 0x5f, 0x5c, 0x72, 0xdf, 0xd7, 0x67, 0x2a, 0xc9, 0xa7, - 0x0e, 0xc2, 0xfb, 0x30, 0xa2, 0x22, 0x54, 0x3f, 0xb7, 0x8a, 0x9a, 0x05, 0xfd, 0x1a, 0x94, 0x9d, - 0x96, 0xdf, 0xf2, 0x54, 0x56, 0x49, 0xee, 0x73, 0x24, 0x7a, 0x3f, 0x77, 0x87, 0xf3, 0x19, 0x88, - 0x8e, 0x37, 0xbb, 0x02, 0xc2, 0xfc, 0xa1, 0x01, 0xa3, 0xc9, 0x29, 0xb8, 0x0b, 0xc5, 0x5c, 0xc8, - 0xa4, 0xae, 0xf2, 0x40, 0x6b, 0x22, 0x1b, 0xac, 0xb8, 0xc2, 0x91, 0x55, 0x20, 0x55, 0x37, 0xd5, - 0xea, 0x03, 0x3d, 0x83, 0x82, 0xab, 0x4e, 0x27, 0x93, 0xbb, 0x34, 0xfe, 0x64, 0xb9, 0x8b, 0xb9, - 0xf5, 0x21, 0xb6, 0x52, 0xfa, 0x67, 0x85, 0xdf, 0xfb, 0x7c, 0xe5, 0xc6, 0xd7, 0x9f, 0xaf, 0xdc, - 0x30, 0x7f, 0x6c, 0x00, 0xca, 0xd2, 0x62, 0x6a, 0xde, 0x9e, 0xf4, 0xba, 0x05, 0x63, 0xc9, 0x8d, - 0x85, 0xab, 0x75, 0x2b, 0xa8, 0x81, 0x8a, 0x68, 0x23, 0x0a, 0x91, 0x46, 0xd3, 0xea, 0xad, 0x74, - 0x51, 0x2f, 0x11, 0x6a, 0xa5, 0x0c, 0x39, 0xfd, 0x2a, 0x30, 0x9b, 0x6b, 0x5d, 0x2b, 0x81, 0x4b, - 0x1d, 0x51, 0xd7, 0xb5, 0xcb, 0x36, 0x3a, 0x64, 0xcf, 0xc2, 0x30, 0x65, 0x5b, 0x2d, 0xe5, 0x81, - 0x05, 0x4b, 0x7d, 0x98, 0x7f, 0x30, 0x08, 0x05, 0x19, 0x1e, 0xaa, 0x61, 0xbb, 0x9f, 0x1a, 0x6f, - 0xe2, 0xa7, 0x69, 0xcc, 0x18, 0xe8, 0x3b, 0x66, 0x5c, 0xda, 0xdc, 0x41, 0x79, 0xd4, 0xda, 0x37, - 0xf7, 0x29, 0x0c, 0xd6, 0x49, 0x5f, 0x97, 0xe2, 0x82, 0xbe, 0xe3, 0x0c, 0x0f, 0x77, 0x9c, 0x61, - 0xf4, 0x1e, 0xcc, 0xc9, 0xe6, 0x9e, 0x38, 0x34, 0xa2, 0x24, 0xc8, 0x9e, 0x53, 0x44, 0xa9, 0x34, - 0x21, 0xeb, 0x5a, 0xc3, 0x9a, 0xa9, 0x13, 0x62, 0x25, 0x14, 0xc9, 0xf3, 0x89, 0x8e, 0x41, 0xa3, - 0x69, 0x0c, 0x12, 0x5b, 0x18, 0x84, 0xc2, 0x5c, 0xd8, 0xeb, 0xa7, 0xf8, 0x49, 0x99, 0xcc, 0x3f, - 0x19, 0x80, 0x62, 0x62, 0xfc, 0x1d, 0xe2, 0x71, 0x8c, 0x16, 0x60, 0x94, 0x32, 0xdb, 0xbb, 0x1c, - 0x56, 0x2c, 0x40, 0xe4, 0x9c, 0x38, 0x2d, 0x59, 0xb9, 0xbc, 0x49, 0x80, 0x99, 0x4e, 0xd9, 0x3f, - 0x4e, 0x2c, 0xf8, 0x02, 0x4a, 0x19, 0xa6, 0x8e, 0x16, 0x7d, 0x84, 0x9b, 0xa9, 0x94, 0x59, 0x15, - 0x34, 0xa8, 0x0a, 0xd9, 0x90, 0x8e, 0x5e, 0x7d, 0x58, 0x6f, 0x32, 0xe5, 0x55, 0xd9, 0xf7, 0x4f, - 0x07, 0xf3, 0x07, 0x33, 0xf5, 0xdb, 0x2b, 0x0f, 0x66, 0xa7, 0xef, 0x7c, 0x04, 0x93, 0xc9, 0x51, - 0xb2, 0x5d, 0xb1, 0xb1, 0xfa, 0x9d, 0xe8, 0xde, 0x6b, 0x4e, 0xa0, 0x34, 0x82, 0x55, 0x8c, 0xda, - 0x6c, 0xf2, 0x3e, 0x8c, 0x44, 0xf8, 0x22, 0x6c, 0xf1, 0x7e, 0x36, 0x47, 0xb3, 0xfc, 0x0c, 0x78, - 0xf1, 0x53, 0x18, 0x8c, 0x82, 0xbe, 0x1c, 0x58, 0xd0, 0x9b, 0x67, 0x80, 0x72, 0x45, 0x6b, 0x12, - 0x36, 0xf3, 0x41, 0xcf, 0xe8, 0x33, 0xe8, 0x5d, 0x36, 0xed, 0xc0, 0x65, 0xd3, 0x9a, 0x31, 0x4c, - 0x67, 0x72, 0x93, 0xea, 0xac, 0x27, 0xa7, 0x78, 0x0f, 0x46, 0x75, 0xfc, 0xd7, 0xde, 0xf0, 0xba, - 0x74, 0x91, 0x90, 0x9b, 0x27, 0x50, 0xd4, 0x63, 0x2f, 0x23, 0x57, 0x74, 0x93, 0x69, 0x42, 0x32, - 0xf2, 0x09, 0x69, 0x27, 0x97, 0x90, 0x06, 0xe4, 0x4d, 0xc4, 0xda, 0x6b, 0xeb, 0x8f, 0x4b, 0xa9, - 0xc9, 0xfc, 0x27, 0x03, 0x4a, 0x87, 0x21, 0x0d, 0x38, 0xcb, 0x5d, 0x52, 0x7e, 0x1f, 0x16, 0xd4, - 0x1b, 0x5e, 0x24, 0x67, 0xf2, 0xf7, 0xa2, 0x7d, 0x04, 0xef, 0x39, 0x89, 0x71, 0x15, 0x38, 0xef, - 0x02, 0xde, 0x47, 0x80, 0x99, 0xe3, 0x57, 0x81, 0x9b, 0xff, 0x3d, 0x00, 0xcb, 0x47, 0xf9, 0xc7, - 0x86, 0x6d, 0xec, 0x47, 0x98, 0x36, 0x82, 0xad, 0x30, 0x64, 0xbc, 0x12, 0xd4, 0x43, 0xf4, 0x14, - 0x16, 0x8e, 0xc5, 0x07, 0x71, 0xed, 0xb6, 0xb7, 0x65, 0x97, 0x95, 0x0d, 0xd9, 0x58, 0xcf, 0xea, - 0xe9, 0x5a, 0xf6, 0x62, 0xec, 0x32, 0x44, 0x60, 0x21, 0x4f, 0x9e, 0x69, 0x9d, 0xec, 0xfe, 0x83, - 0xae, 0xae, 0xd7, 0xae, 0xa3, 0xbe, 0xcd, 0x98, 0xcb, 0x1e, 0xa4, 0xb3, 0x39, 0x86, 0x36, 0xe1, - 0x76, 0xa2, 0xdd, 0x15, 0x4f, 0xd2, 0x6e, 0xd2, 0xfc, 0xdf, 0xd4, 0x44, 0x9d, 0x2d, 0xb6, 0xd0, - 0xf4, 0x14, 0x6e, 0x5f, 0x66, 0xcd, 0xeb, 0x3b, 0xf4, 0x26, 0xfa, 0xde, 0xea, 0x7c, 0xd3, 0xce, - 0x69, 0x6d, 0xfe, 0xad, 0x01, 0x28, 0xd9, 0x69, 0xb5, 0xef, 0xb2, 0xcf, 0x7f, 0x00, 0x53, 0x8c, - 0xe3, 0xf8, 0x72, 0x9f, 0x37, 0x29, 0x87, 0xb3, 0x7e, 0xf0, 0xb7, 0x61, 0x56, 0x5d, 0xba, 0x2a, - 0x88, 0xe4, 0x3d, 0x49, 0xef, 0xec, 0x35, 0xcf, 0x30, 0xdf, 0x16, 0xba, 0xfd, 0xd5, 0xbf, 0xaf, - 0xac, 0x35, 0x28, 0x6f, 0xb6, 0x8e, 0xd7, 0x9d, 0xd0, 0xd7, 0x3f, 0xad, 0xd0, 0xff, 0x3d, 0x62, - 0xee, 0xc9, 0x06, 0xbf, 0x88, 0x08, 0x93, 0x0c, 0xcc, 0x42, 0xa2, 0x2f, 0x6e, 0x53, 0x95, 0x99, - 0x7f, 0x3e, 0x00, 0x8b, 0x57, 0x7a, 0x8d, 0x74, 0x98, 0x67, 0xb0, 0x98, 0x2a, 0x96, 0xdc, 0x56, - 0xa6, 0xf7, 0xd2, 0x6a, 0x3d, 0x0b, 0x09, 0x41, 0x72, 0x4d, 0x99, 0x5c, 0x41, 0xdf, 0x81, 0x89, - 0xb6, 0xab, 0x9b, 0x01, 0x69, 0xbd, 0xf1, 0xd3, 0xdc, 0x9d, 0x4d, 0x04, 0x8b, 0xed, 0xcf, 0x68, - 0xb6, 0xb4, 0xad, 0x4d, 0x83, 0x7a, 0xa8, 0x4b, 0xb9, 0xa7, 0x5d, 0x4c, 0x75, 0xbd, 0xa7, 0x5b, - 0xf3, 0x6d, 0xcf, 0x6e, 0xd9, 0x09, 0xf8, 0x0e, 0x2c, 0xb8, 0x94, 0x9d, 0xb6, 0xb0, 0x47, 0xeb, - 0x94, 0xb8, 0x79, 0xef, 0x1a, 0x92, 0xfa, 0xcd, 0xe5, 0xa7, 0x53, 0xc7, 0x32, 0xff, 0x6e, 0x00, - 0x66, 0xf6, 0x08, 0xd9, 0xa1, 0x4c, 0xf5, 0x7e, 0x54, 0x54, 0x88, 0xf5, 0x10, 0xd5, 0x60, 0x46, - 0x85, 0x0b, 0x57, 0xcf, 0xf4, 0x7d, 0x91, 0x36, 0x2d, 0xf9, 0x13, 0x60, 0x79, 0x85, 0x56, 0x83, - 0x19, 0x7e, 0x05, 0x68, 0x3f, 0x35, 0x08, 0xbf, 0x04, 0xba, 0x05, 0x45, 0xfd, 0x38, 0xaa, 0x2f, - 0xaf, 0x07, 0x7b, 0x79, 0x0d, 0x9d, 0x50, 0x3c, 0xfa, 0x3e, 0xfb, 0x7d, 0x18, 0x39, 0x0b, 0xbd, - 0x96, 0xdf, 0x57, 0x9a, 0xd5, 0x2c, 0xe6, 0xef, 0xb6, 0x6f, 0x61, 0xcd, 0x69, 0x12, 0xb7, 0xe5, - 0x11, 0xe1, 0x27, 0xc7, 0x2d, 0x47, 0x58, 0x41, 0xbd, 0xf9, 0x1a, 0xf2, 0x76, 0x68, 0x5c, 0x8d, - 0xa9, 0x37, 0xde, 0x07, 0x30, 0xa5, 0x49, 0xd2, 0x2b, 0xf3, 0x01, 0x75, 0x98, 0xd4, 0x70, 0x7a, - 0x43, 0xde, 0xe9, 0x73, 0x83, 0x97, 0x7d, 0xae, 0x02, 0xc0, 0x29, 0x89, 0xa5, 0x8f, 0x25, 0xf1, - 0xe0, 0x61, 0x17, 0x27, 0xbb, 0xc2, 0xe2, 0xd6, 0x18, 0xd7, 0x7f, 0xb1, 0xeb, 0x9c, 0x69, 0xf8, - 0x3a, 0x67, 0xda, 0x07, 0xd4, 0x81, 0x7c, 0x74, 0x54, 0x45, 0x08, 0x86, 0x78, 0x92, 0x66, 0x86, - 0x2c, 0xf9, 0xb7, 0x48, 0xb7, 0x9c, 0x7b, 0xb9, 0x18, 0xa2, 0x96, 0x3d, 0xc1, 0xb9, 0x97, 0x5d, - 0x15, 0xfd, 0xa1, 0x01, 0x93, 0x9b, 0x2a, 0xc9, 0xe9, 0x53, 0x8d, 0xca, 0x30, 0xaa, 0xd3, 0x9e, - 0x4e, 0x9c, 0xc9, 0x27, 0x22, 0x30, 0xfa, 0xff, 0x18, 0x61, 0x12, 0x6c, 0xf3, 0x77, 0x0c, 0x98, - 0x90, 0x95, 0xa4, 0x45, 0x9c, 0x50, 0x68, 0x74, 0x6d, 0x17, 0x75, 0x04, 0xb3, 0x1e, 0xe6, 0x84, - 0x71, 0x5b, 0x1c, 0x5b, 0x59, 0x6e, 0x85, 0x99, 0x86, 0xe6, 0x35, 0x21, 0x40, 0xe3, 0x5b, 0x48, - 0xf1, 0xe7, 0x45, 0x9a, 0xdf, 0x81, 0x62, 0x96, 0xfe, 0x2b, 0x3b, 0x0c, 0xdd, 0x87, 0xc9, 0xb6, - 0xe2, 0x45, 0x65, 0xbd, 0x09, 0xab, 0x98, 0xaf, 0x5e, 0x98, 0xf9, 0x97, 0x06, 0x8c, 0xe7, 0x80, - 0xd0, 0x12, 0x8c, 0x75, 0x06, 0xf1, 0x6c, 0xe0, 0x9b, 0x74, 0x67, 0xf9, 0xce, 0x70, 0xf0, 0x0d, - 0x3a, 0x43, 0xd3, 0x87, 0x61, 0xf5, 0xd2, 0xfd, 0x18, 0x8c, 0xa8, 0x9f, 0xa0, 0x63, 0x44, 0x82, - 0xe5, 0xb4, 0x1f, 0x9d, 0x8d, 0x53, 0xf3, 0x8f, 0x0c, 0x58, 0xd9, 0x6c, 0x34, 0x62, 0xd2, 0xc0, - 0x9c, 0x64, 0x5b, 0xfb, 0x4a, 0x9e, 0x6f, 0xbd, 0x59, 0x3d, 0xb5, 0xf3, 0x1f, 0xc2, 0xa4, 0x76, - 0x06, 0x15, 0x1b, 0x12, 0x4b, 0xdf, 0xed, 0x62, 0x69, 0x75, 0x74, 0xb4, 0x9c, 0xa2, 0x9f, 0xfb, - 0x62, 0xe6, 0x0f, 0x0c, 0x58, 0x4a, 0x95, 0xda, 0xbc, 0x42, 0xa3, 0xee, 0x67, 0xe1, 0xff, 0x52, - 0x8d, 0x4d, 0x51, 0xb9, 0x06, 0xa1, 0xbf, 0x43, 0x1c, 0xea, 0x63, 0x8f, 0x75, 0xa9, 0x5c, 0x6f, - 0x8a, 0xca, 0x55, 0x51, 0xc8, 0xcd, 0x1f, 0xb2, 0xd2, 0x6f, 0x93, 0x00, 0xfa, 0x20, 0xc6, 0x01, - 0xdf, 0x6c, 0xf1, 0x66, 0x18, 0xd3, 0xdf, 0x50, 0x21, 0xad, 0x0c, 0xa3, 0x0d, 0x31, 0xaa, 0x7f, - 0xef, 0x37, 0x66, 0x25, 0x9f, 0xe8, 0x29, 0x8c, 0xe8, 0x50, 0x3e, 0xd0, 0x4b, 0x28, 0xd7, 0xc4, - 0xe6, 0x27, 0x30, 0xae, 0xde, 0x28, 0xa4, 0xb0, 0x0c, 0x3f, 0x6e, 0xc7, 0x8f, 0xdf, 0x14, 0xff, - 0x47, 0x06, 0x4c, 0xee, 0xd6, 0xeb, 0xa4, 0x27, 0x19, 0x15, 0x98, 0x0e, 0x08, 0xb7, 0xd5, 0xa7, - 0xfe, 0xf9, 0x4e, 0x6f, 0xe2, 0xa6, 0x02, 0xc2, 0x3f, 0x50, 0x6c, 0xf2, 0x87, 0x3a, 0x68, 0x11, - 0x0a, 0x94, 0xd9, 0x67, 0xd8, 0xd3, 0xd7, 0x1c, 0x05, 0x6b, 0x94, 0xb2, 0x57, 0xe2, 0xd3, 0x8c, - 0xa0, 0x24, 0x8d, 0xb3, 0x4f, 0x83, 0x17, 0xfa, 0x4a, 0xa0, 0x8b, 0x7d, 0xf6, 0x60, 0xc2, 0xa7, - 0x81, 0x9d, 0xde, 0x36, 0xf4, 0x71, 0x40, 0xc6, 0xfd, 0x0c, 0xdd, 0xfc, 0x47, 0x03, 0xe6, 0xb2, - 0x13, 0x62, 0x51, 0x76, 0x72, 0x18, 0x87, 0x75, 0xea, 0x11, 0xf4, 0x2e, 0x0c, 0xf9, 0xa1, 0xab, - 0x8c, 0x39, 0xd9, 0xb5, 0x69, 0x13, 0x1c, 0xfb, 0xa1, 0x4b, 0x2c, 0x49, 0x8c, 0xbe, 0x0b, 0x28, - 0x26, 0x8c, 0xc4, 0x67, 0xaa, 0x02, 0x8b, 0x42, 0x8f, 0x3a, 0xea, 0x52, 0x62, 0xb2, 0x6b, 0xeb, - 0x63, 0x65, 0x0c, 0x87, 0x92, 0xde, 0x9a, 0x8e, 0x3b, 0x87, 0xd0, 0x3d, 0x98, 0x74, 0x62, 0xe2, - 0x52, 0x6e, 0x7b, 0x34, 0x20, 0xc9, 0x0d, 0xd1, 0x98, 0x35, 0xa1, 0x46, 0xab, 0x34, 0x20, 0x15, - 0xf7, 0xe1, 0xbf, 0x18, 0x50, 0xdc, 0x4d, 0x2e, 0x0d, 0x8e, 0x2e, 0x22, 0x82, 0x96, 0xa0, 0xfc, - 0x32, 0x60, 0x11, 0x71, 0x64, 0x6a, 0x6b, 0x9b, 0x2b, 0xdd, 0x40, 0x00, 0x23, 0xea, 0xac, 0x94, - 0x0c, 0x54, 0x84, 0xb1, 0x2a, 0xf5, 0x29, 0xdf, 0xa3, 0x9e, 0x57, 0x1a, 0x40, 0x37, 0x61, 0x5e, - 0x7e, 0xee, 0x63, 0xee, 0x34, 0x2d, 0xf5, 0x6b, 0x28, 0x79, 0xe1, 0x56, 0x1a, 0x44, 0xf3, 0x80, - 0xb2, 0xb9, 0x17, 0xe4, 0x33, 0x35, 0x3e, 0x84, 0xe6, 0x60, 0x5a, 0xff, 0x24, 0x23, 0x7b, 0x31, - 0x2a, 0x0d, 0x0b, 0xa8, 0x5d, 0xf9, 0x5c, 0xa7, 0x26, 0x6b, 0x84, 0x73, 0x4f, 0xfe, 0x4e, 0xab, - 0x34, 0x22, 0xa0, 0x0e, 0xea, 0x75, 0x46, 0xb8, 0xc0, 0x4f, 0x3a, 0xe0, 0xd2, 0xa8, 0xd0, 0xa6, - 0x76, 0x11, 0xf0, 0x26, 0xe1, 0xd4, 0x29, 0x15, 0x1e, 0x9e, 0x40, 0x21, 0xd9, 0x69, 0xb4, 0x08, - 0x73, 0x56, 0xa5, 0xf6, 0x91, 0xbd, 0x7f, 0xb0, 0xb3, 0x6b, 0xbf, 0x7c, 0x51, 0x3b, 0xdc, 0xdd, - 0xae, 0xec, 0x55, 0x76, 0x77, 0x4a, 0x37, 0x04, 0x5a, 0x36, 0x55, 0xa9, 0x1d, 0x54, 0x37, 0x8f, - 0x76, 0x77, 0x4a, 0x06, 0x9a, 0x81, 0xa9, 0x6c, 0x7c, 0xdb, 0x3a, 0xa8, 0xd5, 0x4a, 0x03, 0x68, - 0x01, 0x66, 0xb2, 0xc1, 0xc3, 0x03, 0xeb, 0x68, 0xef, 0xa0, 0x5a, 0x39, 0x28, 0x0d, 0x3e, 0xfc, - 0x33, 0x03, 0xa6, 0x2f, 0x19, 0x05, 0x99, 0xb0, 0x6c, 0xed, 0xd6, 0x76, 0xad, 0x57, 0x9b, 0x47, - 0x95, 0x83, 0x17, 0xf6, 0xe1, 0x41, 0xb5, 0xb2, 0xfd, 0xab, 0x1d, 0xf2, 0x57, 0x61, 0xe9, 0x0a, - 0x9a, 0xbd, 0x97, 0xd5, 0xaa, 0xfd, 0xfc, 0xa0, 0x2a, 0x34, 0xb9, 0x0b, 0x2b, 0x57, 0x50, 0x1c, - 0x6e, 0x5a, 0x47, 0x95, 0x4d, 0x4d, 0x34, 0x80, 0x96, 0xe1, 0xe6, 0x15, 0x44, 0x2f, 0x0e, 0xd4, - 0xfc, 0xe0, 0xd6, 0xc9, 0x17, 0x5f, 0x2e, 0x1b, 0x3f, 0xf9, 0x72, 0xd9, 0xf8, 0x8f, 0x2f, 0x97, - 0x8d, 0x1f, 0x7d, 0xb5, 0x7c, 0xe3, 0x27, 0x5f, 0x2d, 0xdf, 0xf8, 0xd7, 0xaf, 0x96, 0x6f, 0x7c, - 0xef, 0xe3, 0x5c, 0x05, 0x50, 0x49, 0xbc, 0xad, 0x8a, 0x8f, 0xd9, 0x46, 0xea, 0x7b, 0x8f, 0x9c, - 0x30, 0x26, 0xf9, 0xcf, 0x26, 0xa6, 0xc1, 0x86, 0x1f, 0x8a, 0x1a, 0x8f, 0x65, 0x3f, 0xc8, 0x96, - 0xd5, 0xc2, 0xc6, 0xd9, 0x93, 0xe3, 0x11, 0xf9, 0x1b, 0xa0, 0x77, 0xff, 0x37, 0x00, 0x00, 0xff, - 0xff, 0x20, 0x1f, 0x68, 0x37, 0xa2, 0x2e, 0x00, 0x00, + // 3947 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x5a, 0xcb, 0x6f, 0x24, 0x49, + 0x5a, 0xef, 0xf4, 0xb3, 0xfc, 0xd9, 0x65, 0x97, 0xc3, 0xaf, 0x72, 0x3f, 0x6c, 0x77, 0x76, 0xf7, + 0xb4, 0xa7, 0x67, 0xc7, 0xde, 0xe9, 0x51, 0xaf, 0x86, 0x19, 0x5e, 0xb6, 0xcb, 0xee, 0xae, 0x99, + 0x72, 0xdb, 0x93, 0xe5, 0xee, 0x85, 0x5d, 0x31, 0x49, 0x38, 0x33, 0xaa, 0x2a, 0xc6, 0xf9, 0x72, + 0x46, 0x94, 0xdb, 0xe6, 0x71, 0x40, 0x5a, 0x09, 0xb4, 0x48, 0x68, 0xd9, 0x03, 0x07, 0xc4, 0xa2, + 0x39, 0x80, 0x90, 0x38, 0x71, 0xe0, 0xc8, 0x01, 0x09, 0x81, 0x56, 0x82, 0xc3, 0x8a, 0x03, 0x42, + 0x1c, 0x16, 0x34, 0x73, 0x60, 0xc5, 0x99, 0x3f, 0x00, 0xc5, 0x23, 0x1f, 0x55, 0x76, 0xb9, 0xab, + 0x7a, 0xe0, 0xc0, 0xa5, 0xdb, 0x19, 0xf1, 0x7d, 0xbf, 0xef, 0x8b, 0x88, 0x2f, 0xbe, 0x57, 0x14, + 0xdc, 0xa7, 0xc1, 0xe7, 0xc4, 0xe1, 0xf4, 0x8c, 0x6c, 0x92, 0x73, 0xa7, 0x85, 0x83, 0x26, 0xd9, + 0x3c, 0x7b, 0x9c, 0xfe, 0xbd, 0x11, 0xc5, 0x21, 0x0f, 0xd1, 0x42, 0x4a, 0xb5, 0x91, 0xce, 0x9c, + 0x3d, 0xbe, 0x39, 0xdf, 0x0c, 0x9b, 0xa1, 0xa4, 0xd8, 0x14, 0x7f, 0x29, 0xe2, 0x9b, 0xb3, 0xd8, + 0xa7, 0x41, 0xb8, 0x29, 0xff, 0xd5, 0x43, 0x2b, 0x4e, 0xc8, 0xfc, 0x90, 0x6d, 0x1e, 0x63, 0x46, + 0x36, 0xcf, 0xde, 0x3b, 0x26, 0x1c, 0xbf, 0xb7, 0xe9, 0x84, 0x34, 0xd0, 0xf3, 0xcb, 0x6a, 0xde, + 0x56, 0x58, 0xea, 0x43, 0x4f, 0x3d, 0xc8, 0x14, 0x0c, 0x63, 0xec, 0x78, 0x19, 0xbf, 0xfa, 0xd4, + 0x64, 0xe6, 0xd5, 0xeb, 0xf0, 0x71, 0x7c, 0x42, 0xb8, 0xa6, 0xb9, 0x7b, 0x35, 0x4d, 0x18, 0xbb, + 0x24, 0x56, 0x24, 0xe6, 0x8f, 0x0c, 0xb8, 0xbd, 0x1b, 0x34, 0xc2, 0xd8, 0x21, 0xae, 0x45, 0x18, + 0x8f, 0xa9, 0xc3, 0x69, 0x18, 0xb0, 0x9d, 0x30, 0xe0, 0x31, 0x76, 0x38, 0xda, 0x81, 0x92, 0xa3, + 0xff, 0xb6, 0xb1, 0xeb, 0xc6, 0x84, 0xb1, 0xb2, 0xb1, 0x66, 0xac, 0x4f, 0x6c, 0x97, 0xff, 0xf9, + 0xaf, 0xdf, 0x9d, 0xd7, 0xaa, 0x6f, 0xa9, 0x99, 0x3a, 0x8f, 0x69, 0xd0, 0xb4, 0x66, 0x12, 0x0e, + 0x3d, 0x8c, 0x1e, 0xc3, 0x42, 0x84, 0xdb, 0x8c, 0xd8, 0xe4, 0x8c, 0x04, 0xdc, 0x66, 0xb4, 0x19, + 0x60, 0xde, 0x8e, 0x49, 0x79, 0x48, 0x20, 0x59, 0x73, 0x72, 0x72, 0x57, 0xcc, 0xd5, 0x93, 0xa9, + 0x0f, 0x47, 0x7e, 0xf6, 0xc5, 0xaa, 0x61, 0xfe, 0xf0, 0x0e, 0x8c, 0x1d, 0xe2, 0x18, 0xfb, 0x0c, + 0x11, 0x58, 0x65, 0x51, 0xc8, 0x6d, 0xb5, 0x44, 0x9b, 0x06, 0x8c, 0xe3, 0x80, 0xdb, 0x1e, 0x65, + 0x9c, 0x06, 0x4d, 0xbb, 0x41, 0x88, 0x54, 0x6c, 0xf2, 0xf1, 0xf2, 0x86, 0xd6, 0x4a, 0xec, 0xfe, + 0x86, 0xde, 0xbd, 0x8d, 0x9d, 0x90, 0x06, 0xdb, 0x23, 0x3f, 0xfe, 0xe9, 0xea, 0x0d, 0xeb, 0x96, + 0xc0, 0xd9, 0x97, 0x30, 0x55, 0x85, 0x52, 0x53, 0x20, 0x7b, 0x84, 0xa0, 0x53, 0x78, 0xe0, 0x92, + 0x98, 0x9e, 0x61, 0xb1, 0x6f, 0xd7, 0x09, 0x1b, 0xea, 0x4f, 0xd8, 0xdd, 0x0c, 0xad, 0x97, 0x48, + 0x0c, 0xb7, 0x5c, 0xd2, 0xc0, 0x6d, 0x8f, 0xdb, 0x7a, 0x85, 0x27, 0x24, 0x16, 0x32, 0xec, 0x18, + 0x73, 0x52, 0x1e, 0x96, 0xdb, 0x7d, 0x4f, 0xa0, 0xfd, 0xdb, 0x4f, 0x57, 0x6f, 0x29, 0x79, 0xcc, + 0x3d, 0xd9, 0xa0, 0xe1, 0xa6, 0x8f, 0x79, 0x6b, 0xa3, 0x46, 0x9a, 0xd8, 0xb9, 0xa8, 0x10, 0xc7, + 0x5a, 0xd2, 0x38, 0x75, 0xb9, 0xc0, 0x13, 0x12, 0xef, 0x11, 0x62, 0x61, 0x7e, 0x59, 0x04, 0xef, + 0x14, 0x31, 0xf2, 0x66, 0x22, 0x8e, 0xf2, 0x22, 0x7c, 0xb8, 0x9b, 0x88, 0xe8, 0xd8, 0xc0, 0x0e, + 0x41, 0xa3, 0xfd, 0x0b, 0xba, 0xa3, 0xd1, 0x2a, 0xb9, 0xfd, 0x7b, 0xad, 0xb8, 0xae, 0x75, 0x8d, + 0x7d, 0x1d, 0x71, 0x1d, 0xab, 0x73, 0xe1, 0x76, 0x22, 0x8e, 0x06, 0x94, 0x53, 0xec, 0x09, 0xdb, + 0x68, 0xd2, 0x40, 0x08, 0xa2, 0x61, 0x79, 0xbc, 0x7f, 0x49, 0xcb, 0x1a, 0xa8, 0xaa, 0x70, 0xf6, + 0x25, 0x8c, 0x25, 0x50, 0x90, 0x07, 0x6b, 0x89, 0x14, 0x1f, 0xd3, 0x80, 0x93, 0x00, 0x07, 0x0e, + 0xe9, 0x94, 0x54, 0x18, 0x7c, 0x4d, 0xfb, 0x19, 0x56, 0x5e, 0xda, 0x07, 0x50, 0x4e, 0xa4, 0x35, + 0xda, 0x81, 0x2b, 0x0c, 0x5b, 0xd0, 0xc5, 0x67, 0xd8, 0x2b, 0x4f, 0xac, 0x19, 0xeb, 0xc3, 0xd6, + 0xa2, 0x9e, 0xdf, 0x53, 0xd3, 0x55, 0x3d, 0x8b, 0xde, 0x86, 0x52, 0xc2, 0xe1, 0xb7, 0x3d, 0x4e, + 0x23, 0x8f, 0x94, 0x41, 0x72, 0xcc, 0xe8, 0xf1, 0x7d, 0x3d, 0x8c, 0x7e, 0x05, 0x16, 0x63, 0xe2, + 0xe1, 0x0b, 0x7d, 0x2c, 0xac, 0x85, 0x63, 0x7d, 0x38, 0x93, 0xfd, 0x2f, 0x64, 0x4e, 0x43, 0xec, + 0x11, 0x52, 0x17, 0x00, 0xf2, 0x48, 0x28, 0xac, 0x26, 0xea, 0xb7, 0xc2, 0x76, 0xec, 0x5d, 0xa4, + 0xab, 0x10, 0xf0, 0xb6, 0x83, 0xa3, 0xf2, 0x54, 0xff, 0x22, 0x92, 0xfb, 0xf1, 0x4c, 0x42, 0xe9, + 0x05, 0x0b, 0x39, 0x3b, 0x38, 0xca, 0x9f, 0xbe, 0x16, 0x25, 0x37, 0x8a, 0x30, 0xae, 0x96, 0x52, + 0x1c, 0xfc, 0xf4, 0x95, 0x9c, 0xaa, 0x86, 0x91, 0x0b, 0xaa, 0xc0, 0xaa, 0x8f, 0xcf, 0xf3, 0xe6, + 0x2c, 0x5d, 0xb5, 0xcd, 0xa8, 0x4b, 0x6c, 0x27, 0x6c, 0x07, 0xbc, 0x3c, 0xbd, 0x66, 0xac, 0x17, + 0xad, 0x5b, 0x3e, 0x3e, 0xcf, 0xec, 0xf4, 0x40, 0x10, 0xd5, 0xa9, 0x4b, 0x76, 0x04, 0x09, 0x62, + 0xf0, 0x90, 0x06, 0x9f, 0xdb, 0x31, 0x79, 0x85, 0x63, 0xd7, 0x66, 0xe2, 0x46, 0xb8, 0x76, 0x4c, + 0x4e, 0xdb, 0x34, 0x26, 0xbe, 0x70, 0xbf, 0xbc, 0x15, 0x13, 0xd6, 0x0a, 0x3d, 0xb7, 0x3c, 0x23, + 0xd5, 0xbe, 0xa3, 0xd5, 0x5e, 0xb8, 0xac, 0x76, 0x35, 0xe0, 0xd6, 0x3d, 0x1a, 0x7c, 0x6e, 0x49, + 0xb0, 0xba, 0xc4, 0xb2, 0x32, 0xa8, 0xa3, 0x04, 0x09, 0x3d, 0x85, 0x35, 0x1e, 0x63, 0xb5, 0xf9, + 0x92, 0x96, 0xd9, 0x67, 0x44, 0xf9, 0x4a, 0xb7, 0x2d, 0xed, 0x36, 0x28, 0x97, 0xa4, 0x81, 0xdc, + 0xd1, 0x74, 0x0a, 0x92, 0xbd, 0x54, 0x54, 0x15, 0x4d, 0x24, 0x76, 0xda, 0xa3, 0xa7, 0x6d, 0xea, + 0x62, 0x1e, 0xc6, 0xe9, 0x22, 0x32, 0xa3, 0x99, 0x1d, 0x60, 0xa7, 0x33, 0x20, 0xad, 0x7f, 0x6a, + 0x3a, 0xe7, 0xf0, 0xf6, 0x31, 0x0d, 0x70, 0x7c, 0x61, 0x87, 0x91, 0x8c, 0x77, 0xd7, 0x39, 0x7a, + 0xd4, 0x9f, 0xa3, 0xbf, 0xaf, 0x10, 0x0f, 0x14, 0x60, 0x2f, 0x5f, 0xff, 0x9b, 0xb0, 0x86, 0x79, + 0xe8, 0x53, 0x27, 0x91, 0xa8, 0x8e, 0x18, 0x3b, 0x0e, 0x61, 0xcc, 0xf6, 0xc8, 0x19, 0xf1, 0xca, + 0x73, 0x6b, 0xc6, 0xfa, 0xf4, 0xe3, 0xf7, 0x37, 0xae, 0x4c, 0x42, 0x36, 0xb6, 0x24, 0xbb, 0xc2, + 0x97, 0x47, 0xbf, 0x25, 0x79, 0x6b, 0x82, 0xd5, 0xba, 0x8d, 0xaf, 0x99, 0x45, 0xe7, 0xf0, 0x50, + 0x7a, 0xff, 0xab, 0x34, 0x10, 0x97, 0x53, 0xdf, 0x65, 0x4a, 0xe2, 0xf2, 0x7c, 0xff, 0xfb, 0x6c, + 0x0a, 0xcc, 0x4b, 0x5a, 0xed, 0x11, 0xb2, 0x9f, 0xc2, 0xa1, 0xef, 0x19, 0xf0, 0x6e, 0xce, 0xae, + 0xfb, 0x50, 0x60, 0xa1, 0x7f, 0x05, 0xd6, 0x33, 0xe4, 0xd7, 0xa8, 0xf1, 0xfb, 0x06, 0xbc, 0xd7, + 0x75, 0xf0, 0x7d, 0xa8, 0xb2, 0xd8, 0xbf, 0x2a, 0xef, 0x74, 0x18, 0xc1, 0x6b, 0xb4, 0xf9, 0x0c, + 0x96, 0x7d, 0x1a, 0x50, 0x1f, 0x7b, 0x2a, 0x11, 0x74, 0x42, 0x2f, 0x0b, 0x5d, 0x4b, 0xfd, 0x0b, + 0x5d, 0xd4, 0x28, 0x87, 0x1a, 0x24, 0x89, 0x59, 0xdf, 0x85, 0x77, 0x28, 0x4b, 0x4d, 0xfa, 0x72, + 0x56, 0xe3, 0xe1, 0x76, 0xe0, 0xb4, 0x6c, 0x12, 0xe0, 0x63, 0x8f, 0xb8, 0xe5, 0xf2, 0x9a, 0xb1, + 0x5e, 0xb0, 0xde, 0xa2, 0x4c, 0x5b, 0x6d, 0xa5, 0x2b, 0x71, 0xa9, 0x49, 0xf2, 0x5d, 0x45, 0x2d, + 0x9c, 0x55, 0x14, 0x32, 0x6e, 0x87, 0x81, 0x77, 0x61, 0xfb, 0xa1, 0x4b, 0xec, 0x16, 0xa1, 0xcd, + 0x56, 0xde, 0xbd, 0x2c, 0xcb, 0x0b, 0x7f, 0x4b, 0x90, 0x1d, 0x04, 0xde, 0xc5, 0x7e, 0xe8, 0x92, + 0x67, 0x92, 0x26, 0xf3, 0x1b, 0x4d, 0x78, 0x4f, 0x07, 0x37, 0x97, 0x38, 0x31, 0xc1, 0x8c, 0xd8, + 0x51, 0x4c, 0x1d, 0x62, 0x73, 0xea, 0x13, 0xc6, 0xb1, 0x1f, 0x65, 0x78, 0x36, 0x23, 0x4e, 0x18, + 0xb8, 0xac, 0x7c, 0x53, 0xe2, 0x7e, 0x43, 0x31, 0x56, 0x34, 0xdf, 0xa1, 0x60, 0x3b, 0x4a, 0xb8, + 0x52, 0x09, 0x75, 0xc5, 0x83, 0x1e, 0xc2, 0x4c, 0x72, 0x89, 0x6c, 0xec, 0xfa, 0x34, 0x60, 0xe5, + 0x5b, 0x6b, 0xc3, 0xeb, 0x13, 0xd6, 0x74, 0x32, 0xbc, 0x25, 0x47, 0xd1, 0x73, 0x98, 0x13, 0xee, + 0x13, 0xb7, 0x65, 0x22, 0x6c, 0x0b, 0x87, 0x2c, 0x22, 0xc9, 0x6d, 0x79, 0x1c, 0xab, 0xd7, 0xba, + 0xca, 0xb2, 0x61, 0x95, 0x68, 0xf0, 0xf9, 0x96, 0x62, 0xdd, 0xc7, 0xe7, 0x22, 0x74, 0x3c, 0x82, + 0xd9, 0x06, 0x3d, 0x27, 0xae, 0xdd, 0xc4, 0x2c, 0xdd, 0xea, 0x3b, 0x72, 0xab, 0x67, 0xe4, 0xc4, + 0x53, 0xcc, 0x92, 0x3d, 0xfd, 0x08, 0x6e, 0x12, 0x9f, 0x72, 0xdb, 0x93, 0x47, 0x6b, 0x9f, 0x91, + 0x98, 0x09, 0x1d, 0x64, 0xd6, 0xcc, 0xca, 0x2b, 0x92, 0x69, 0x49, 0x50, 0xa8, 0xb3, 0x7f, 0xa9, + 0xe6, 0x65, 0xe2, 0xcc, 0xd0, 0x71, 0x96, 0xe2, 0xc5, 0xc4, 0x6d, 0x77, 0xa7, 0x0d, 0xab, 0xfd, + 0xdb, 0x53, 0x92, 0x15, 0x58, 0x12, 0x26, 0x9f, 0x31, 0xfc, 0x22, 0xdc, 0xee, 0x3a, 0xf4, 0x63, + 0x2f, 0x74, 0x4e, 0x98, 0x8d, 0x7d, 0x19, 0x9e, 0xee, 0xae, 0x19, 0xeb, 0x23, 0x56, 0x39, 0x7f, + 0xe2, 0xdb, 0x92, 0x60, 0x4b, 0xce, 0xa3, 0x7d, 0xb8, 0xef, 0xd3, 0xc0, 0xee, 0xc2, 0x70, 0xc3, + 0x57, 0x81, 0x38, 0xef, 0x2c, 0x54, 0x98, 0xb2, 0x2e, 0x58, 0xf5, 0x69, 0x70, 0x98, 0x83, 0xaa, + 0x68, 0xba, 0x34, 0x58, 0x7c, 0x07, 0xde, 0xb9, 0x4e, 0x1d, 0x1b, 0x37, 0x38, 0x89, 0x53, 0xf8, + 0xf2, 0x3d, 0xa9, 0xdd, 0x83, 0x5e, 0xda, 0x6d, 0x09, 0xea, 0x44, 0x06, 0xfa, 0x23, 0x03, 0x1e, + 0xb9, 0x24, 0x8a, 0x89, 0x83, 0x39, 0x71, 0x6d, 0xa2, 0x8b, 0x24, 0x3b, 0xce, 0x55, 0x49, 0x76, + 0x52, 0xe8, 0xb0, 0xf2, 0xfd, 0xb5, 0xe1, 0xf5, 0xc9, 0x9e, 0x3e, 0xfb, 0xba, 0x12, 0x4b, 0x87, + 0x8f, 0x87, 0x99, 0xb0, 0xeb, 0xa8, 0x99, 0xc8, 0xda, 0x5e, 0xb5, 0x28, 0x27, 0xf6, 0x49, 0x20, + 0xef, 0x5b, 0x16, 0xe5, 0x58, 0xf9, 0x81, 0x34, 0xe9, 0x45, 0x39, 0xff, 0x89, 0x9c, 0xae, 0x65, + 0xb3, 0xe8, 0xb7, 0xe0, 0xed, 0x1e, 0x9c, 0x57, 0x04, 0xda, 0xb7, 0xfa, 0xb7, 0x97, 0xfb, 0x57, + 0xca, 0xeb, 0x8e, 0xb9, 0x9f, 0xc1, 0x9c, 0x13, 0x87, 0x8c, 0x25, 0x66, 0x19, 0xc9, 0xb2, 0xae, + 0xfc, 0x50, 0x46, 0xd7, 0xf5, 0x1e, 0x1b, 0xb7, 0x23, 0x38, 0x94, 0x05, 0xaa, 0x32, 0x50, 0xef, + 0xd6, 0xac, 0xd3, 0x3d, 0x81, 0x9e, 0xc1, 0x24, 0x7b, 0x85, 0xa3, 0x04, 0x77, 0x5d, 0xe2, 0xde, + 0xed, 0x81, 0x5b, 0x7f, 0x85, 0xa3, 0x0e, 0x40, 0x60, 0xe9, 0xc8, 0x87, 0x65, 0x51, 0x7a, 0x7e, + 0xff, 0x3f, 0xff, 0xea, 0x51, 0xea, 0x32, 0x36, 0xd5, 0xcc, 0xc7, 0x23, 0x85, 0xb5, 0xd2, 0x5d, + 0xf3, 0x05, 0x40, 0xc6, 0x8f, 0xca, 0x30, 0x9e, 0x5c, 0x6b, 0x43, 0xde, 0xd0, 0xe4, 0x53, 0xf8, + 0x1c, 0xec, 0x79, 0xe1, 0x2b, 0xe2, 0x6a, 0x8f, 0xcb, 0xca, 0x43, 0xca, 0xe7, 0xe8, 0x61, 0xe5, + 0x57, 0x99, 0xae, 0x75, 0xff, 0x61, 0x1c, 0x66, 0x2f, 0xad, 0x17, 0xfd, 0x3a, 0xdc, 0x8c, 0x42, + 0x46, 0xa5, 0xdf, 0x6e, 0x47, 0x81, 0x67, 0xb7, 0x30, 0x8d, 0x9d, 0xb6, 0x4e, 0x3c, 0x8d, 0x01, + 0x0a, 0xb7, 0x04, 0xe6, 0x45, 0x14, 0x78, 0xcf, 0x14, 0x88, 0x4e, 0x3b, 0x27, 0x1b, 0x84, 0x30, + 0xfb, 0xb8, 0xdd, 0x68, 0x90, 0x58, 0xd5, 0xe4, 0xfd, 0x41, 0x82, 0xe0, 0xdb, 0x96, 0x6c, 0xe8, + 0x9b, 0x30, 0xaf, 0xd7, 0x6d, 0x9f, 0xb6, 0x43, 0x4e, 0x6c, 0x97, 0x04, 0xa1, 0xcf, 0xca, 0xc3, + 0x72, 0xc5, 0x48, 0xcf, 0x7d, 0x2a, 0xa6, 0x2a, 0x72, 0x06, 0xbd, 0x03, 0xb3, 0x11, 0x89, 0x23, + 0xc2, 0xdb, 0xd8, 0x4b, 0x3d, 0xe3, 0x88, 0xdc, 0xc2, 0x52, 0x3a, 0x91, 0xb8, 0xc6, 0x07, 0x30, + 0x4d, 0xce, 0x23, 0x1a, 0x5f, 0xa4, 0x94, 0xa3, 0x92, 0xb2, 0xa8, 0x46, 0x13, 0xb2, 0x4f, 0xe1, + 0x2d, 0xe1, 0xb1, 0xb1, 0x3c, 0xf1, 0xcb, 0x21, 0x8f, 0xd9, 0x11, 0x89, 0xed, 0x28, 0x0c, 0x3d, + 0x59, 0x1a, 0x16, 0xad, 0xbb, 0x3e, 0x3e, 0xdf, 0x92, 0xc4, 0xdd, 0xd1, 0x8e, 0x1d, 0x92, 0xf8, + 0x30, 0x0c, 0x65, 0xad, 0x43, 0x7c, 0x12, 0x37, 0x49, 0xe0, 0x5c, 0xd8, 0xb2, 0x53, 0xe1, 0xca, + 0x6a, 0xaf, 0x60, 0xcd, 0xa4, 0xe3, 0x87, 0x72, 0x18, 0x7d, 0x1b, 0x16, 0x8e, 0xb1, 0x73, 0xc2, + 0x78, 0x18, 0xbd, 0x71, 0xcd, 0x36, 0x97, 0x20, 0xe4, 0xfd, 0xae, 0x0d, 0xcb, 0x11, 0x8e, 0x65, + 0xd5, 0x99, 0x5c, 0x5a, 0x11, 0x18, 0x14, 0xf8, 0xc4, 0x20, 0x36, 0xa0, 0x50, 0x6a, 0x19, 0x48, + 0xe2, 0xd8, 0x6f, 0xe5, 0x81, 0x9d, 0x30, 0xf4, 0x84, 0xdb, 0xd4, 0xfe, 0x54, 0xd6, 0x76, 0x23, + 0x59, 0x42, 0x4d, 0xc3, 0x60, 0x47, 0x53, 0x28, 0x07, 0x8a, 0x3c, 0x78, 0x22, 0x23, 0x65, 0xfe, + 0x82, 0xcb, 0x54, 0x53, 0x26, 0x54, 0x6a, 0xdb, 0x59, 0xfb, 0x18, 0x3b, 0xb2, 0x8c, 0x91, 0x9f, + 0xd2, 0x3e, 0x64, 0xe5, 0x54, 0xb4, 0xde, 0xf5, 0xf1, 0x79, 0xce, 0xf4, 0xeb, 0x51, 0xa8, 0xf2, + 0x25, 0x71, 0x08, 0xf5, 0x94, 0xed, 0x90, 0xc4, 0xd2, 0x74, 0xd0, 0x36, 0x40, 0x9b, 0x53, 0x4f, + 0xaf, 0x7f, 0xba, 0xff, 0xf5, 0x4f, 0x08, 0x36, 0xb5, 0xe2, 0xa7, 0xb0, 0xd6, 0xb1, 0x95, 0x8d, + 0x53, 0xfb, 0x52, 0xa3, 0x6b, 0x46, 0xda, 0xee, 0x9d, 0x1c, 0x9d, 0xd5, 0x38, 0xdd, 0xe9, 0x6c, + 0x6e, 0xa9, 0xcb, 0xfb, 0xf1, 0x48, 0x61, 0xb2, 0x34, 0xf5, 0xf1, 0x48, 0x61, 0xaa, 0x54, 0x34, + 0x7f, 0x01, 0xe6, 0x9f, 0x93, 0xf3, 0xa4, 0x68, 0x4e, 0x73, 0x12, 0x61, 0xc3, 0x01, 0x39, 0xe7, + 0x59, 0x6e, 0x23, 0xaf, 0xef, 0xb0, 0x55, 0x14, 0xa3, 0x29, 0x99, 0xf9, 0x5f, 0x06, 0x4c, 0xef, + 0x53, 0x57, 0x26, 0x34, 0x5b, 0x81, 0x7b, 0x74, 0xb0, 0x8d, 0x7e, 0x19, 0x26, 0x7c, 0xea, 0xaa, + 0xd4, 0x28, 0x77, 0xe7, 0x8d, 0xd7, 0xad, 0xb7, 0xe0, 0x6b, 0x1c, 0x54, 0x85, 0xe9, 0x63, 0x51, + 0xae, 0x1e, 0xb7, 0x2f, 0x34, 0xcc, 0x50, 0xff, 0x30, 0x53, 0x82, 0x75, 0xbb, 0x7d, 0xa1, 0xa0, + 0x3e, 0x81, 0x19, 0x09, 0xc5, 0x88, 0xe7, 0x69, 0xac, 0xe1, 0xfe, 0xb1, 0x8a, 0x82, 0xb7, 0x4e, + 0x3c, 0x4f, 0x82, 0x99, 0x7f, 0x6e, 0xc0, 0x78, 0x85, 0x48, 0xd7, 0x84, 0x0e, 0x61, 0x16, 0x9f, + 0x61, 0xea, 0x89, 0xab, 0x6c, 0x1f, 0x63, 0x0f, 0x07, 0xce, 0x40, 0x1e, 0xae, 0x94, 0x72, 0x6f, + 0x2b, 0x66, 0xf4, 0x0c, 0x8a, 0x3c, 0xe4, 0xd8, 0x4b, 0xd1, 0x06, 0x70, 0x6e, 0x53, 0x92, 0x53, + 0x23, 0x99, 0xdf, 0x80, 0xf9, 0xcc, 0x10, 0x8f, 0x62, 0xec, 0x92, 0xe7, 0xa1, 0x90, 0x30, 0x0f, + 0xa3, 0x41, 0x98, 0xe8, 0x59, 0xb4, 0xd4, 0x87, 0xf9, 0x77, 0x06, 0xcc, 0x64, 0xe4, 0xd2, 0x94, + 0xd1, 0xcf, 0xc1, 0x68, 0xf7, 0xf9, 0xbd, 0x56, 0x07, 0xc5, 0x81, 0x7e, 0x09, 0x0a, 0xa7, 0x6d, + 0x1c, 0x70, 0xca, 0x2f, 0x06, 0x59, 0x41, 0xca, 0x84, 0x4c, 0x98, 0xa2, 0x4c, 0xa5, 0x73, 0x22, + 0xf3, 0x91, 0xe7, 0x55, 0xb0, 0x3a, 0xc6, 0x50, 0x09, 0x86, 0x1d, 0xaa, 0x1c, 0xf0, 0x84, 0x25, + 0xfe, 0x34, 0x63, 0x98, 0xeb, 0x5a, 0x44, 0x05, 0x73, 0x8c, 0x7e, 0x1e, 0x46, 0xe5, 0xad, 0xd6, + 0xed, 0xd6, 0xb7, 0x7a, 0x85, 0xd8, 0x4e, 0x56, 0x4b, 0x31, 0xa1, 0x3b, 0x00, 0xaa, 0xc8, 0x6a, + 0x61, 0xd6, 0x92, 0xab, 0x99, 0xb2, 0x26, 0xe4, 0xc8, 0x33, 0xcc, 0x5a, 0xe6, 0xdf, 0x0f, 0x41, + 0xe1, 0x50, 0x06, 0xaa, 0x30, 0x40, 0x8b, 0x30, 0x46, 0x59, 0x2d, 0x0c, 0x9a, 0x3a, 0xb2, 0xea, + 0xaf, 0xaf, 0xbf, 0x1f, 0x15, 0x98, 0x24, 0x01, 0x8f, 0x2f, 0x2e, 0x99, 0xef, 0xeb, 0x43, 0x9e, + 0xe4, 0x53, 0x17, 0xe1, 0x23, 0x18, 0x53, 0xae, 0x6e, 0x90, 0xfe, 0xa9, 0x66, 0x41, 0xbf, 0x06, + 0x65, 0xa7, 0xed, 0xb7, 0x3d, 0x15, 0x9e, 0x92, 0xce, 0x95, 0x44, 0x1f, 0xa4, 0x4b, 0xba, 0x98, + 0x81, 0x68, 0x7f, 0xb3, 0x2b, 0x20, 0xcc, 0xef, 0x1b, 0x30, 0x9e, 0xdc, 0x82, 0x7b, 0x50, 0xcc, + 0xf9, 0x5e, 0xaa, 0xf2, 0x94, 0x09, 0x6b, 0x2a, 0x1b, 0xac, 0xba, 0xc2, 0x90, 0x95, 0x47, 0x56, + 0x3d, 0x79, 0xf5, 0x81, 0x3e, 0x84, 0x82, 0xab, 0x6e, 0x27, 0x93, 0xbb, 0x34, 0xf9, 0x78, 0xa5, + 0xc7, 0x71, 0xeb, 0x4b, 0x6c, 0xa5, 0xf4, 0x1f, 0x16, 0x7e, 0xef, 0x8b, 0xd5, 0x1b, 0x3f, 0xfb, + 0x62, 0xf5, 0x86, 0xf9, 0x23, 0x03, 0x50, 0x16, 0x5f, 0xd3, 0xe3, 0xed, 0x4b, 0xaf, 0x5b, 0x30, + 0x91, 0xf4, 0x66, 0x5c, 0xad, 0x5b, 0x41, 0x0d, 0x54, 0x45, 0xc1, 0x54, 0x88, 0x34, 0x9a, 0x56, + 0x6f, 0xb5, 0x87, 0x7a, 0x89, 0x50, 0x2b, 0x65, 0xc8, 0xe9, 0x57, 0x85, 0xf9, 0x5c, 0x91, 0x5e, + 0x0d, 0x5c, 0xea, 0x88, 0x0c, 0xb6, 0x53, 0xb6, 0xd1, 0x25, 0x7b, 0x1e, 0x46, 0x29, 0xdb, 0x6e, + 0x2b, 0x0b, 0x2c, 0x58, 0xea, 0xc3, 0xfc, 0x83, 0x61, 0x28, 0x48, 0xf7, 0x50, 0x0b, 0x3b, 0xed, + 0xd4, 0x78, 0x13, 0x3b, 0x4d, 0x7d, 0xc6, 0xd0, 0xc0, 0x3e, 0xe3, 0xd2, 0xe6, 0x0e, 0xcb, 0xab, + 0xd6, 0xb9, 0xb9, 0x4f, 0x60, 0xb8, 0x41, 0x06, 0x6a, 0xff, 0x0b, 0xfa, 0xae, 0x3b, 0x3c, 0xda, + 0x75, 0x87, 0xd1, 0x07, 0xb0, 0x20, 0xdb, 0x18, 0xc4, 0xa1, 0x11, 0x25, 0x41, 0x16, 0x4f, 0x45, + 0xce, 0x35, 0x25, 0x13, 0x6e, 0xc3, 0x9a, 0x6b, 0x10, 0x62, 0x25, 0x14, 0xc9, 0x43, 0x91, 0xf6, + 0x41, 0xe3, 0xa9, 0x0f, 0x12, 0x5b, 0x18, 0x84, 0xe2, 0xb8, 0xb0, 0x37, 0x48, 0x16, 0x95, 0x32, + 0x99, 0x7f, 0x3c, 0x04, 0xc5, 0xe4, 0xf0, 0x2b, 0xc4, 0xe3, 0x18, 0x2d, 0xc1, 0x38, 0x65, 0xb6, + 0x77, 0xd9, 0xad, 0x58, 0x80, 0xc8, 0x39, 0x71, 0xda, 0x32, 0x21, 0x78, 0x13, 0x07, 0x33, 0x9b, + 0xb2, 0x7f, 0x9a, 0x9c, 0xe0, 0x73, 0x28, 0x65, 0x98, 0xda, 0x5b, 0x0c, 0xe0, 0x6e, 0x66, 0x52, + 0x66, 0x95, 0x19, 0xa1, 0x1a, 0x64, 0x43, 0xda, 0x7b, 0x0d, 0x70, 0x7a, 0xd3, 0x29, 0xaf, 0x8a, + 0xbe, 0x7f, 0x32, 0x9c, 0xbf, 0x98, 0xa9, 0xdd, 0x5e, 0x79, 0x31, 0xbb, 0x6d, 0xe7, 0x13, 0x98, + 0x4e, 0xae, 0x92, 0xed, 0x8a, 0x8d, 0xd5, 0x2f, 0x62, 0xf7, 0x5f, 0x73, 0x03, 0xe5, 0x21, 0x58, + 0xc5, 0xa8, 0xe3, 0x4c, 0x3e, 0x82, 0xb1, 0x08, 0x5f, 0x84, 0x6d, 0x3e, 0xc8, 0xe6, 0x68, 0x96, + 0xff, 0x07, 0x56, 0xfc, 0x04, 0x86, 0xa3, 0x60, 0x20, 0x03, 0x16, 0xf4, 0xe6, 0x19, 0xa0, 0x5c, + 0xf6, 0x9b, 0xb8, 0xcd, 0xbc, 0xd3, 0x33, 0x06, 0x74, 0x7a, 0x97, 0x8f, 0x76, 0xe8, 0xf2, 0xd1, + 0x9a, 0x31, 0xcc, 0x66, 0x72, 0x93, 0xec, 0xac, 0x2f, 0xa3, 0xf8, 0x00, 0xc6, 0xb5, 0xff, 0xd7, + 0xd6, 0xf0, 0xba, 0x70, 0x91, 0x90, 0x9b, 0x27, 0x50, 0xd4, 0x63, 0x2f, 0x22, 0x57, 0x94, 0xa5, + 0x69, 0x40, 0x32, 0xf2, 0x01, 0xa9, 0x92, 0x0b, 0x48, 0x43, 0xb2, 0xe7, 0xb2, 0xfe, 0xda, 0xfc, + 0xe3, 0x52, 0x68, 0x32, 0xff, 0xc9, 0x80, 0xd2, 0x61, 0x48, 0x03, 0xce, 0x72, 0xed, 0xd8, 0xef, + 0xc2, 0x92, 0x7a, 0xad, 0x8c, 0xe4, 0x4c, 0xbe, 0x03, 0x3c, 0x80, 0xf3, 0x5e, 0x90, 0x18, 0x57, + 0x81, 0xf3, 0x1e, 0xe0, 0x03, 0x38, 0x98, 0x05, 0x7e, 0x15, 0xb8, 0xf9, 0xdf, 0x43, 0xb0, 0x72, + 0x94, 0x7f, 0x56, 0xd9, 0xc1, 0x7e, 0x84, 0x69, 0x33, 0xd8, 0x0e, 0x43, 0xc6, 0xab, 0x41, 0x23, + 0x44, 0x4f, 0x60, 0xe9, 0x58, 0x7c, 0x10, 0xd7, 0xee, 0x78, 0x45, 0x77, 0x59, 0xd9, 0x90, 0x55, + 0xce, 0xbc, 0x9e, 0xae, 0x67, 0x6f, 0xe3, 0x2e, 0x43, 0x04, 0x96, 0xf2, 0xe4, 0x99, 0xd6, 0xc9, + 0xee, 0x3f, 0xec, 0x69, 0x7a, 0x9d, 0x3a, 0xea, 0x36, 0xcb, 0x42, 0xf6, 0xf4, 0x9e, 0xcd, 0x31, + 0xb4, 0x05, 0x77, 0x12, 0xed, 0xae, 0x78, 0x7c, 0x77, 0x93, 0x2e, 0xc2, 0x4d, 0x4d, 0xd4, 0x5d, + 0xab, 0x0b, 0x4d, 0x4f, 0xe1, 0xce, 0x65, 0xd6, 0xbc, 0xbe, 0x23, 0x6f, 0xa2, 0xef, 0xad, 0xee, + 0xd7, 0xfb, 0x9c, 0xd6, 0xe6, 0xdf, 0x18, 0x80, 0x92, 0x9d, 0x56, 0xfb, 0x2e, 0x1b, 0x06, 0x0f, + 0x61, 0x86, 0x71, 0x1c, 0x5f, 0xae, 0xf3, 0xa6, 0xe5, 0x70, 0x56, 0x0f, 0xfe, 0x36, 0xcc, 0xab, + 0xf6, 0xb2, 0x82, 0x48, 0x5e, 0xce, 0xf4, 0xce, 0x5e, 0xf3, 0xe0, 0xf4, 0x4d, 0xa1, 0xdb, 0x5f, + 0xfe, 0xfb, 0xea, 0x7a, 0x93, 0xf2, 0x56, 0xfb, 0x78, 0xc3, 0x09, 0x7d, 0xfd, 0x23, 0x12, 0xfd, + 0xdf, 0xbb, 0xcc, 0x3d, 0xd9, 0xe4, 0x17, 0x11, 0x61, 0x92, 0x81, 0x59, 0x48, 0x14, 0xd8, 0x1d, + 0xaa, 0x32, 0xf3, 0xcf, 0x86, 0x60, 0xf9, 0x4a, 0xab, 0x91, 0x06, 0xf3, 0x21, 0x2c, 0xa7, 0x8a, + 0x25, 0x7d, 0xd9, 0xb4, 0x03, 0xaf, 0xd6, 0xb3, 0x94, 0x10, 0x24, 0x0d, 0xd9, 0xa4, 0xd9, 0x7e, + 0x17, 0xa6, 0x3a, 0x7a, 0x40, 0xaa, 0xeb, 0x35, 0x79, 0x9a, 0x6b, 0xfe, 0x44, 0xb0, 0xdc, 0xf9, + 0x60, 0x68, 0xcb, 0xb3, 0xb5, 0x69, 0xd0, 0x08, 0x75, 0x2a, 0xf7, 0xa4, 0xc7, 0x51, 0x5d, 0x6f, + 0xe9, 0xd6, 0x62, 0xc7, 0x03, 0x63, 0x76, 0x03, 0xbe, 0x05, 0x4b, 0x2e, 0x65, 0xa7, 0x6d, 0xec, + 0xd1, 0x06, 0x4d, 0x5b, 0x72, 0xd2, 0xba, 0x46, 0xa4, 0x7e, 0x0b, 0xf9, 0xe9, 0xd4, 0xb0, 0xcc, + 0xbf, 0x1d, 0x82, 0xb9, 0x3d, 0x42, 0x2a, 0x94, 0xa9, 0xda, 0x8f, 0x8a, 0x0c, 0xb1, 0x11, 0xa2, + 0x3a, 0xcc, 0x29, 0x77, 0xe1, 0xea, 0x99, 0x81, 0x3b, 0x72, 0xb3, 0x92, 0x3f, 0x01, 0x96, 0xbd, + 0xb8, 0x3a, 0xcc, 0xf1, 0x2b, 0x40, 0x07, 0xc9, 0x41, 0xf8, 0x25, 0xd0, 0x6d, 0x28, 0xea, 0x67, + 0x60, 0xdd, 0xa6, 0x1f, 0xee, 0xe7, 0xdd, 0x77, 0x4a, 0xf1, 0xe8, 0xce, 0xfd, 0x47, 0x30, 0x76, + 0x16, 0x7a, 0x6d, 0x7f, 0xa0, 0x30, 0xab, 0x59, 0xcc, 0xdf, 0xed, 0xdc, 0xc2, 0xba, 0xd3, 0x22, + 0x6e, 0xdb, 0x23, 0xc2, 0x4e, 0x8e, 0xdb, 0x8e, 0x38, 0x05, 0xf5, 0xba, 0x6d, 0xc8, 0x36, 0xd3, + 0xa4, 0x1a, 0x53, 0xaf, 0xd9, 0x0f, 0x61, 0x46, 0x93, 0xa4, 0x8f, 0x03, 0x43, 0xea, 0x32, 0xa9, + 0xe1, 0xf4, 0x2d, 0xa0, 0xdb, 0xe6, 0x86, 0x2f, 0xdb, 0x5c, 0x15, 0x80, 0x53, 0x12, 0x4b, 0x1b, + 0x4b, 0xfc, 0xc1, 0xa3, 0x1e, 0x46, 0x76, 0xc5, 0x89, 0x5b, 0x13, 0x5c, 0xff, 0xc5, 0xae, 0x33, + 0xa6, 0xd1, 0xeb, 0x8c, 0x69, 0x1f, 0x50, 0x17, 0xf2, 0xd1, 0x51, 0x0d, 0x21, 0x18, 0xe1, 0x49, + 0x98, 0x19, 0xb1, 0xe4, 0xdf, 0x22, 0xdc, 0x72, 0xee, 0xe5, 0x7c, 0x88, 0x5a, 0xf6, 0x14, 0xe7, + 0x5e, 0xd6, 0x2a, 0xfa, 0x43, 0x03, 0xa6, 0xb7, 0x54, 0x90, 0xd3, 0xb7, 0x1a, 0x95, 0x61, 0x5c, + 0x87, 0x3d, 0x1d, 0x38, 0x93, 0x4f, 0x44, 0x60, 0xfc, 0xff, 0xd0, 0xc3, 0x24, 0xd8, 0xe6, 0xef, + 0x18, 0x30, 0x25, 0x33, 0x49, 0x8b, 0x38, 0xa1, 0xd0, 0xe8, 0xda, 0x2a, 0xea, 0x08, 0xe6, 0x3d, + 0xcc, 0x09, 0xe3, 0xb6, 0xb8, 0xb6, 0x32, 0xdd, 0x0a, 0x33, 0x0d, 0xcd, 0x6b, 0x5c, 0x80, 0xc6, + 0xb7, 0x90, 0xe2, 0xcf, 0x8b, 0x34, 0xbf, 0x05, 0xc5, 0x2c, 0xfc, 0x57, 0x2b, 0x0c, 0x3d, 0x80, + 0xe9, 0x8e, 0xe4, 0x45, 0x45, 0xbd, 0x29, 0xab, 0x98, 0xcf, 0x5e, 0x98, 0xf9, 0x17, 0x06, 0x4c, + 0xe6, 0x80, 0xd0, 0x6d, 0x98, 0xe8, 0x76, 0xe2, 0xd9, 0xc0, 0xd7, 0xa9, 0xce, 0xf2, 0x95, 0xe1, + 0xf0, 0x1b, 0x54, 0x86, 0xa6, 0x0f, 0xa3, 0xea, 0x4d, 0xff, 0x3d, 0x30, 0xa2, 0x41, 0x9c, 0x8e, + 0x11, 0x09, 0x96, 0xd3, 0x41, 0x74, 0x36, 0x4e, 0xcd, 0x1f, 0x1a, 0xb0, 0xba, 0xd5, 0x6c, 0xc6, + 0xa4, 0x89, 0x39, 0xc9, 0xb6, 0xf6, 0xa5, 0xbc, 0xdf, 0x7a, 0xb3, 0xfa, 0x2a, 0xe7, 0x3f, 0x86, + 0x69, 0x6d, 0x0c, 0xca, 0x37, 0x24, 0x27, 0x7d, 0xaf, 0xc7, 0x49, 0xab, 0xab, 0xa3, 0xe5, 0x14, + 0xfd, 0xdc, 0x17, 0x33, 0xbf, 0x67, 0xc0, 0xed, 0x54, 0xa9, 0xad, 0x2b, 0x34, 0xea, 0x7d, 0x17, + 0xfe, 0x37, 0xd5, 0xd8, 0x12, 0x99, 0x6b, 0x10, 0xfa, 0x15, 0xe2, 0x50, 0x1f, 0x7b, 0xac, 0x47, + 0xe6, 0x7a, 0x53, 0x64, 0xae, 0x8a, 0x42, 0x6e, 0xfe, 0x88, 0x95, 0x7e, 0x9b, 0x04, 0xd0, 0xd3, + 0x18, 0x07, 0x7c, 0xab, 0xcd, 0x5b, 0x61, 0x4c, 0x7f, 0x43, 0xb9, 0xb4, 0x32, 0x8c, 0x37, 0xc5, + 0xa8, 0xfe, 0x65, 0xe3, 0x84, 0x95, 0x7c, 0xa2, 0x27, 0x30, 0xa6, 0x5d, 0xf9, 0x50, 0x3f, 0xae, + 0x5c, 0x13, 0x9b, 0x9f, 0xc1, 0xa4, 0x7a, 0xec, 0x90, 0xc2, 0x32, 0xfc, 0xb8, 0x13, 0x3f, 0x7e, + 0x53, 0xfc, 0x1f, 0x18, 0x30, 0xbd, 0xdb, 0x68, 0x90, 0xbe, 0x64, 0x54, 0x61, 0x36, 0x20, 0xdc, + 0x56, 0x9f, 0xfa, 0x87, 0x4a, 0xfd, 0x89, 0x9b, 0x09, 0x08, 0x7f, 0xaa, 0xd8, 0xe4, 0x4f, 0x92, + 0xd0, 0x32, 0x14, 0x28, 0xb3, 0xcf, 0xb0, 0xa7, 0xdb, 0x1c, 0x05, 0x6b, 0x9c, 0xb2, 0x97, 0xe2, + 0xd3, 0x8c, 0xa0, 0x24, 0x0f, 0x67, 0x9f, 0x06, 0xcf, 0x75, 0x4b, 0xa0, 0xc7, 0xf9, 0xec, 0xc1, + 0x94, 0x4f, 0x03, 0x3b, 0xed, 0x36, 0x0c, 0x70, 0x41, 0x26, 0xfd, 0x0c, 0xdd, 0xfc, 0x47, 0x03, + 0x16, 0xb2, 0x1b, 0x62, 0x51, 0x76, 0x72, 0x18, 0x87, 0x0d, 0xea, 0x11, 0xf4, 0x3e, 0x8c, 0xf8, + 0xa1, 0xab, 0x0e, 0x73, 0xba, 0x67, 0xd1, 0x26, 0x38, 0xf6, 0x43, 0x97, 0x58, 0x92, 0x18, 0x7d, + 0x1b, 0x50, 0x4c, 0x18, 0x89, 0xcf, 0x54, 0x06, 0x16, 0x85, 0x1e, 0x75, 0x54, 0x53, 0x62, 0xba, + 0x67, 0xe9, 0x63, 0x65, 0x0c, 0x87, 0x92, 0xde, 0x9a, 0x8d, 0xbb, 0x87, 0xd0, 0x7d, 0x98, 0x76, + 0x62, 0xe2, 0x52, 0x6e, 0x7b, 0x34, 0x20, 0x49, 0x87, 0x68, 0xc2, 0x9a, 0x52, 0xa3, 0x35, 0x1a, + 0x90, 0xaa, 0xfb, 0xe8, 0x5f, 0x0c, 0x28, 0xee, 0x26, 0x4d, 0x83, 0xa3, 0x8b, 0x88, 0xa0, 0xdb, + 0x50, 0x7e, 0x11, 0xb0, 0x88, 0x38, 0x32, 0xb4, 0x75, 0xcc, 0x95, 0x6e, 0x20, 0x80, 0x31, 0x75, + 0x57, 0x4a, 0x06, 0x2a, 0xc2, 0x44, 0x8d, 0xfa, 0x94, 0xef, 0x51, 0xcf, 0x2b, 0x0d, 0xa1, 0x9b, + 0xb0, 0x28, 0x3f, 0xf7, 0x31, 0x77, 0x5a, 0x96, 0xfa, 0xdd, 0x97, 0x6c, 0xb8, 0x95, 0x86, 0xd1, + 0x22, 0xa0, 0x6c, 0xee, 0x39, 0x79, 0xa5, 0xc6, 0x47, 0xd0, 0x02, 0xcc, 0xea, 0x1f, 0x9f, 0x64, + 0x6f, 0x30, 0xa5, 0x51, 0x01, 0xb5, 0x2b, 0xdf, 0xfd, 0xd4, 0x64, 0x9d, 0x70, 0xee, 0xc9, 0x5f, + 0xa4, 0x95, 0xc6, 0x04, 0xd4, 0x41, 0xa3, 0xc1, 0x08, 0x17, 0xf8, 0x49, 0x05, 0x5c, 0x1a, 0x17, + 0xda, 0xd4, 0x2f, 0x02, 0xde, 0x22, 0x9c, 0x3a, 0xa5, 0xc2, 0xa3, 0x13, 0x28, 0x24, 0x3b, 0x8d, + 0x96, 0x61, 0xc1, 0xaa, 0xd6, 0x3f, 0xb1, 0xf7, 0x0f, 0x2a, 0xbb, 0xf6, 0x8b, 0xe7, 0xf5, 0xc3, + 0xdd, 0x9d, 0xea, 0x5e, 0x75, 0xb7, 0x52, 0xba, 0x21, 0xd0, 0xb2, 0xa9, 0x6a, 0xfd, 0xa0, 0xb6, + 0x75, 0xb4, 0x5b, 0x29, 0x19, 0x68, 0x0e, 0x66, 0xb2, 0xf1, 0x1d, 0xeb, 0xa0, 0x5e, 0x2f, 0x0d, + 0xa1, 0x25, 0x98, 0xcb, 0x06, 0x0f, 0x0f, 0xac, 0xa3, 0xbd, 0x83, 0x5a, 0xf5, 0xa0, 0x34, 0xfc, + 0xe8, 0x4f, 0x0d, 0x98, 0xbd, 0x74, 0x28, 0xc8, 0x84, 0x15, 0x6b, 0xb7, 0xbe, 0x6b, 0xbd, 0xdc, + 0x3a, 0xaa, 0x1e, 0x3c, 0xb7, 0x0f, 0x0f, 0x6a, 0xd5, 0x9d, 0x5f, 0xed, 0x92, 0xbf, 0x06, 0xb7, + 0xaf, 0xa0, 0xd9, 0x7b, 0x51, 0xab, 0xd9, 0xcf, 0x0e, 0x6a, 0x42, 0x93, 0x7b, 0xb0, 0x7a, 0x05, + 0xc5, 0xe1, 0x96, 0x75, 0x54, 0xdd, 0xd2, 0x44, 0x43, 0x68, 0x05, 0x6e, 0x5e, 0x41, 0xf4, 0xfc, + 0x40, 0xcd, 0x0f, 0x6f, 0x9f, 0xfc, 0xf8, 0xcb, 0x15, 0xe3, 0x27, 0x5f, 0xae, 0x18, 0xff, 0xf1, + 0xe5, 0x8a, 0xf1, 0x83, 0xaf, 0x56, 0x6e, 0xfc, 0xe4, 0xab, 0x95, 0x1b, 0xff, 0xfa, 0xd5, 0xca, + 0x8d, 0xef, 0x7c, 0x9a, 0xcb, 0x00, 0xaa, 0x89, 0xb5, 0xd5, 0xf0, 0x31, 0xdb, 0x4c, 0x6d, 0xef, + 0x5d, 0x27, 0x8c, 0x49, 0xfe, 0xb3, 0x85, 0x69, 0xb0, 0xe9, 0x87, 0x22, 0xc7, 0x63, 0xd9, 0x4f, + 0xcf, 0x65, 0xb6, 0xb0, 0x79, 0xf6, 0xf8, 0x78, 0x4c, 0xfe, 0xda, 0xe9, 0xfd, 0xff, 0x09, 0x00, + 0x00, 0xff, 0xff, 0x9c, 0x26, 0x03, 0x93, 0x8c, 0x2f, 0x00, 0x00, } func (this *EnforcedRestrictionsContract) Equal(that interface{}) bool { @@ -2989,6 +3054,41 @@ func (this *Params) Equal(that interface{}) bool { if !this.CrossMarginParams.Equal(&that1.CrossMarginParams) { return false } + if !this.SwapParams.Equal(&that1.SwapParams) { + return false + } + return true +} +func (this *SwapParams) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*SwapParams) + if !ok { + that2, ok := that.(SwapParams) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.Enabled != that1.Enabled { + return false + } + if len(this.AllowedMarkets) != len(that1.AllowedMarkets) { + return false + } + for i := range this.AllowedMarkets { + if this.AllowedMarkets[i] != that1.AllowedMarkets[i] { + return false + } + } return true } func (this *CrossMarginParams) Equal(that interface{}) bool { @@ -3051,6 +3151,14 @@ func (this *CrossMarginParams) Equal(that interface{}) bool { if !this.UtilRatio.Equal(that1.UtilRatio) { return false } + if len(this.LiquidationRfqContractAddress) != len(that1.LiquidationRfqContractAddress) { + return false + } + for i := range this.LiquidationRfqContractAddress { + if this.LiquidationRfqContractAddress[i] != that1.LiquidationRfqContractAddress[i] { + return false + } + } return true } func (m *EnforcedRestrictionsContract) Marshal() (dAtA []byte, err error) { @@ -3110,6 +3218,18 @@ func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + { + size, err := m.SwapParams.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintExchange(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2 + i-- + dAtA[i] = 0xc2 { size, err := m.CrossMarginParams.MarshalToSizedBuffer(dAtA[:i]) if err != nil { @@ -3493,6 +3613,48 @@ func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *SwapParams) 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 *SwapParams) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SwapParams) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.AllowedMarkets) > 0 { + for iNdEx := len(m.AllowedMarkets) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.AllowedMarkets[iNdEx]) + copy(dAtA[i:], m.AllowedMarkets[iNdEx]) + i = encodeVarintExchange(dAtA, i, uint64(len(m.AllowedMarkets[iNdEx]))) + i-- + dAtA[i] = 0x12 + } + } + if m.Enabled { + i-- + if m.Enabled { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + func (m *CrossMarginParams) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -3513,6 +3675,15 @@ func (m *CrossMarginParams) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.LiquidationRfqContractAddress) > 0 { + for iNdEx := len(m.LiquidationRfqContractAddress) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.LiquidationRfqContractAddress[iNdEx]) + copy(dAtA[i:], m.LiquidationRfqContractAddress[iNdEx]) + i = encodeVarintExchange(dAtA, i, uint64(len(m.LiquidationRfqContractAddress[iNdEx]))) + i-- + dAtA[i] = 0x7a + } + } { size := m.UtilRatio.Size() i -= size @@ -5519,6 +5690,26 @@ func (m *Params) Size() (n int) { n += 2 + l + sovExchange(uint64(l)) l = m.CrossMarginParams.Size() n += 2 + l + sovExchange(uint64(l)) + l = m.SwapParams.Size() + n += 2 + l + sovExchange(uint64(l)) + return n +} + +func (m *SwapParams) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Enabled { + n += 2 + } + if len(m.AllowedMarkets) > 0 { + for _, s := range m.AllowedMarkets { + l = len(s) + n += 1 + l + sovExchange(uint64(l)) + } + } return n } @@ -5562,6 +5753,12 @@ func (m *CrossMarginParams) Size() (n int) { } l = m.UtilRatio.Size() n += 1 + l + sovExchange(uint64(l)) + if len(m.LiquidationRfqContractAddress) > 0 { + for _, s := range m.LiquidationRfqContractAddress { + l = len(s) + n += 1 + l + sovExchange(uint64(l)) + } + } return n } @@ -7506,6 +7703,141 @@ func (m *Params) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 40: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SwapParams", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowExchange + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthExchange + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthExchange + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.SwapParams.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipExchange(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthExchange + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SwapParams) 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 ErrIntOverflowExchange + } + 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: SwapParams: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SwapParams: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Enabled", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowExchange + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Enabled = bool(v != 0) + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AllowedMarkets", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowExchange + } + 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 ErrInvalidLengthExchange + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthExchange + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AllowedMarkets = append(m.AllowedMarkets, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipExchange(dAtA[iNdEx:]) @@ -7875,6 +8207,38 @@ func (m *CrossMarginParams) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 15: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LiquidationRfqContractAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowExchange + } + 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 ErrInvalidLengthExchange + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthExchange + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.LiquidationRfqContractAddress = append(m.LiquidationRfqContractAddress, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipExchange(dAtA[iNdEx:]) diff --git a/chain/exchange/types/v2/genesis.go b/chain/exchange/types/v2/genesis.go index 9baba1513..7a1e188dc 100644 --- a/chain/exchange/types/v2/genesis.go +++ b/chain/exchange/types/v2/genesis.go @@ -1,9 +1,13 @@ package v2 import ( + "bytes" "errors" "fmt" + "math/big" + "slices" + sdkmath "cosmossdk.io/math" "github.com/ethereum/go-ethereum/common" "github.com/InjectiveLabs/sdk-go/chain/exchange/types" @@ -25,6 +29,10 @@ func (gs GenesisState) Validate() error { if err := gs.Params.Validate(); err != nil { return err } + routers, err := ParseCrossMarginRFQRouterSet(gs.Params.CrossMarginParams.LiquidationRfqContractAddress) + if err != nil { + return err + } if err := gs.validateSpotOrderbookMarkets(); err != nil { return err @@ -34,15 +42,429 @@ func (gs GenesisState) Validate() error { return err } + crossSubaccounts := make(map[common.Hash]struct{}, len(gs.SubaccountRiskProfiles)) + seenProfiles := make(map[common.Hash]struct{}, len(gs.SubaccountRiskProfiles)) for i, record := range gs.SubaccountRiskProfiles { if err := validateRiskProfileRecord(record); err != nil { return fmt.Errorf("subaccount_risk_profiles[%d]: %w", i, err) } + mode, _ := validateRiskMode(&record.RiskProfile) + subaccountID := common.HexToHash(record.SubaccountId) + if _, duplicate := seenProfiles[subaccountID]; duplicate { + return fmt.Errorf("subaccount_risk_profiles[%d]: duplicate subaccount_id %s", i, subaccountID.Hex()) + } + seenProfiles[subaccountID] = struct{}{} + if mode == RiskMode_RISK_MODE_CROSS { + if routers.Len() == 0 { + return fmt.Errorf("subaccount_risk_profiles[%d]: cross-margin profile requires at least one liquidation RFQ router", i) + } + if routers.Len() == 1 && routers.Contains(types.SubaccountIDToSdkAddress(subaccountID)) { + return fmt.Errorf("subaccount_risk_profiles[%d]: singleton RFQ router cannot own a cross-margin subaccount", i) + } + crossSubaccounts[subaccountID] = struct{}{} + } + } + if err := gs.validateCrossMarginGenesisState(crossSubaccounts); err != nil { + return err + } + + return nil +} + +type genesisCrossPoolKey struct { + subaccountID common.Hash + quoteDenom string +} + +type genesisCrossMarketState struct { + positionRaw *big.Int + queuedRaw *big.Int +} + +type genesisSpotHold struct { + marketID common.Hash + isBuy bool + orderHash common.Hash + lockingDenom string + holdRaw *big.Int +} + +// validateCrossMarginGenesisState validates persistent order identity and the +// post-repair B/C/U/G state. Underfunded CM spot orders are simulated using the +// same canonical hold helper and deterministic identity ordering used by +// InitGenesis; custom historical state may therefore be repaired instead of +// being rejected merely because its exported Available value is stale. +func (gs GenesisState) validateCrossMarginGenesisState(crossSubaccounts map[common.Hash]struct{}) error { //nolint:revive // genesis validation is intentionally whole-state + if err := gs.validateGenesisBalances(); err != nil { + return err + } + + derivativeMarkets := make(map[common.Hash]DerivativeMarketI, len(gs.DerivativeMarkets)+len(gs.BinaryOptionsMarkets)) + for _, market := range gs.DerivativeMarkets { + if market != nil { + derivativeMarkets[common.HexToHash(market.MarketId)] = market + } + } + for _, market := range gs.BinaryOptionsMarkets { + if market != nil { + derivativeMarkets[common.HexToHash(market.MarketId)] = market + } + } + spotMarkets := make(map[common.Hash]*SpotMarket, len(gs.SpotMarkets)) + for _, market := range gs.SpotMarkets { + if market != nil { + spotMarkets[common.HexToHash(market.MarketId)] = market + } + } + + seenHashes := make(map[common.Hash]string) + seenCIDs := make(map[common.Hash]map[string]string) + registerIdentity := func(field string, subaccountID, orderHash common.Hash, hashBytes []byte, cid string) error { + if len(hashBytes) != common.HashLength || orderHash == (common.Hash{}) { + return fmt.Errorf("%s: malformed order hash", field) + } + if previous, duplicate := seenHashes[orderHash]; duplicate { + return fmt.Errorf("%s: duplicate order hash %s previously used by %s", field, orderHash.Hex(), previous) + } + seenHashes[orderHash] = field + if cid == "" { + return nil + } + if seenCIDs[subaccountID] == nil { + seenCIDs[subaccountID] = make(map[string]string) + } + if previous, duplicate := seenCIDs[subaccountID][cid]; duplicate { + return fmt.Errorf("%s: duplicate cid %q previously used by %s", field, cid, previous) + } + seenCIDs[subaccountID][cid] = field + return nil + } + + carriers := make(map[common.Hash]map[common.Hash]struct{}) + nonBinaryByPool := make(map[genesisCrossPoolKey]map[common.Hash]struct{}) + derivativeOrderCount := make(map[genesisCrossPoolKey]uint64) + marketStates := make(map[common.Hash]map[common.Hash]*genesisCrossMarketState) + quoteDecimalsByPool := make(map[genesisCrossPoolKey]uint32) + ensureCarrier := func(subaccountID, marketID common.Hash, field string) (DerivativeMarketI, error) { + market := derivativeMarkets[marketID] + if market == nil || market.GetQuoteDenom() == "" { + return nil, fmt.Errorf("%s: unknown derivative market %s", field, marketID.Hex()) + } + if market.GetMarketType().IsBinaryOptions() { + return nil, fmt.Errorf("%s: binary options are isolated-only", field) + } + if carriers[subaccountID] == nil { + carriers[subaccountID] = make(map[common.Hash]struct{}) + } + carriers[subaccountID][marketID] = struct{}{} + if uint32(len(carriers[subaccountID])) > MaxCrossMarginDerivativeCarriers { + return nil, fmt.Errorf("%s: cross-margin G bound exceeded", field) + } + if !market.GetMarketType().IsBinaryOptions() { + poolKey := genesisCrossPoolKey{subaccountID: subaccountID, quoteDenom: market.GetQuoteDenom()} + if nonBinaryByPool[poolKey] == nil { + nonBinaryByPool[poolKey] = make(map[common.Hash]struct{}) + } + nonBinaryByPool[poolKey][marketID] = struct{}{} + if uint32(len(nonBinaryByPool[poolKey])) > MaxCrossMarginDerivativeCarriersPerQuote { + return nil, fmt.Errorf("%s: cross-margin U bound exceeded for %s", field, market.GetQuoteDenom()) + } + } + return market, nil + } + stateFor := func(subaccountID, marketID common.Hash) *genesisCrossMarketState { + if marketStates[subaccountID] == nil { + marketStates[subaccountID] = make(map[common.Hash]*genesisCrossMarketState) + } + state := marketStates[subaccountID][marketID] + if state == nil { + state = &genesisCrossMarketState{positionRaw: new(big.Int), queuedRaw: new(big.Int)} + marketStates[subaccountID][marketID] = state + } + return state + } + + lastPosition := make(map[[2]common.Hash]int, len(gs.Positions)) + for i, record := range gs.Positions { + if record.Position == nil || record.Position.Quantity.IsNil() { + return fmt.Errorf("positions[%d]: position is incomplete", i) + } + lastPosition[[2]common.Hash{common.HexToHash(record.SubaccountId), common.HexToHash(record.MarketId)}] = i + } + for i, record := range gs.Positions { + subaccountID := common.HexToHash(record.SubaccountId) + if _, isCross := crossSubaccounts[subaccountID]; !isCross || + lastPosition[[2]common.Hash{subaccountID, common.HexToHash(record.MarketId)}] != i || + record.Position.Quantity.IsZero() { + continue + } + if record.Position.Quantity.IsNegative() { + return fmt.Errorf("positions[%d]: negative position quantity", i) + } + marketID := common.HexToHash(record.MarketId) + marketI, err := ensureCarrier(subaccountID, marketID, fmt.Sprintf("positions[%d]", i)) + if err != nil { + return err + } + market, ok := marketI.(*DerivativeMarket) + if !ok || record.Position.EntryPrice.IsNil() || record.Position.Margin.IsNil() || + (market.IsPerpetual && record.Position.CumulativeFundingEntry.IsNil()) { + return fmt.Errorf("positions[%d]: live cross-margin position is incomplete", i) + } + if market.QuoteDecimals == 0 || market.QuoteDecimals > types.MaxDecimals { + return fmt.Errorf("positions[%d]: quote decimals must be between 1 and %d", i, types.MaxDecimals) + } + if !market.CanRepresentNotionalInChainFormat(record.Position.Margin) || + !record.Position.EntryPrice.IsPositive() || record.Position.EntryPrice.GT(types.MaxOrderPrice) || + !canonicalRFQGenesisChunkEntryNotionalFits(record.Position, market) { + return fmt.Errorf("positions[%d]: position is not representable by canonical RFQ chunks", i) + } + poolKey := genesisCrossPoolKey{subaccountID: subaccountID, quoteDenom: market.QuoteDenom} + if decimals, found := quoteDecimalsByPool[poolKey]; found && decimals != market.QuoteDecimals { + return fmt.Errorf("positions[%d]: inconsistent quote decimals for %s", i, market.QuoteDenom) + } + quoteDecimalsByPool[poolKey] = market.QuoteDecimals + state := stateFor(subaccountID, marketID) + state.positionRaw.Set(record.Position.Quantity.BigInt()) + if !record.Position.IsLong { + state.positionRaw.Neg(state.positionRaw) + } + } + + addDerivativeOrder := func(field string, marketID common.Hash, orderHash []byte, orderSubaccountID common.Hash, cid string, isBuy, outerIsBuy, isVanilla bool, quantity sdkmath.LegacyDec) error { + if isBuy != outerIsBuy { + return fmt.Errorf("%s: outer side does not match order body", field) + } + if err := registerIdentity(field, orderSubaccountID, common.BytesToHash(orderHash), orderHash, cid); err != nil { + return err + } + if _, isCross := crossSubaccounts[orderSubaccountID]; !isCross { + return nil + } + market, err := ensureCarrier(orderSubaccountID, marketID, field) + if err != nil { + return err + } + poolKey := genesisCrossPoolKey{subaccountID: orderSubaccountID, quoteDenom: market.GetQuoteDenom()} + derivativeOrderCount[poolKey]++ + if derivativeOrderCount[poolKey] > uint64(MaxCrossMarginCancellableOrdersPerQuote) { + return fmt.Errorf("%s: cross-margin C bound exceeded for %s", field, market.GetQuoteDenom()) + } + if isVanilla { + if quantity.IsNil() || quantity.IsNegative() { + return fmt.Errorf("%s: invalid vanilla quantity", field) + } + stateFor(orderSubaccountID, marketID).queuedRaw.Add( + stateFor(orderSubaccountID, marketID).queuedRaw, quantity.BigInt(), + ) + } + return nil + } + + for i, orderbook := range gs.DerivativeOrderbook { + if !types.IsHexHash(orderbook.MarketId) { + return fmt.Errorf("derivative_orderbook[%d]: invalid market_id %q", i, orderbook.MarketId) + } + marketID := common.HexToHash(orderbook.MarketId) + for j, order := range orderbook.Orders { + if order == nil { + return fmt.Errorf("derivative_orderbook[%d].orders[%d]: missing order", i, j) + } + field := fmt.Sprintf("derivative_orderbook[%d].orders[%d]", i, j) + if order.OrderInfo.Price.IsNil() || order.OrderInfo.Quantity.IsNil() || + order.Fillable.IsNil() || order.Margin.IsNil() { + return fmt.Errorf("%s: incomplete order", field) + } + if err := addDerivativeOrder(field, marketID, order.OrderHash, order.SubaccountID(), order.Cid(), order.IsBuy(), orderbook.IsBuySide, order.IsVanilla(), order.Fillable); err != nil { + return err + } + } + } + + for i, orderbook := range gs.ConditionalDerivativeOrderbooks { + if orderbook == nil || !types.IsHexHash(orderbook.MarketId) { + return fmt.Errorf("conditional_derivative_orderbooks[%d]: invalid orderbook or market_id", i) + } + marketID := common.HexToHash(orderbook.MarketId) + for j, order := range orderbook.LimitBuyOrders { + if order == nil || order.TriggerPrice == nil || order.TriggerPrice.IsNil() || + order.OrderInfo.Price.IsNil() || order.OrderInfo.Quantity.IsNil() || + order.Fillable.IsNil() || order.Margin.IsNil() { + return fmt.Errorf("conditional_derivative_orderbooks[%d].limit_buy_orders[%d]: incomplete order", i, j) + } + field := fmt.Sprintf("conditional_derivative_orderbooks[%d].limit_buy_orders[%d]", i, j) + if err := addDerivativeOrder(field, marketID, order.OrderHash, order.SubaccountID(), order.Cid(), order.IsBuy(), true, order.IsVanilla(), order.Fillable); err != nil { + return err + } + } + for j, order := range orderbook.LimitSellOrders { + if order == nil || order.TriggerPrice == nil || order.TriggerPrice.IsNil() || + order.OrderInfo.Price.IsNil() || order.OrderInfo.Quantity.IsNil() || + order.Fillable.IsNil() || order.Margin.IsNil() { + return fmt.Errorf("conditional_derivative_orderbooks[%d].limit_sell_orders[%d]: incomplete order", i, j) + } + field := fmt.Sprintf("conditional_derivative_orderbooks[%d].limit_sell_orders[%d]", i, j) + if err := addDerivativeOrder(field, marketID, order.OrderHash, order.SubaccountID(), order.Cid(), order.IsBuy(), false, order.IsVanilla(), order.Fillable); err != nil { + return err + } + } + for j, order := range orderbook.MarketBuyOrders { + if order == nil || order.TriggerPrice == nil || order.TriggerPrice.IsNil() || + order.OrderInfo.Price.IsNil() || order.OrderInfo.Quantity.IsNil() || order.Margin.IsNil() { + return fmt.Errorf("conditional_derivative_orderbooks[%d].market_buy_orders[%d]: incomplete order", i, j) + } + field := fmt.Sprintf("conditional_derivative_orderbooks[%d].market_buy_orders[%d]", i, j) + if err := addDerivativeOrder(field, marketID, order.OrderHash, order.SubaccountID(), order.Cid(), order.IsBuy(), true, order.IsVanilla(), order.OrderInfo.Quantity); err != nil { + return err + } + } + for j, order := range orderbook.MarketSellOrders { + if order == nil || order.TriggerPrice == nil || order.TriggerPrice.IsNil() || + order.OrderInfo.Price.IsNil() || order.OrderInfo.Quantity.IsNil() || order.Margin.IsNil() { + return fmt.Errorf("conditional_derivative_orderbooks[%d].market_sell_orders[%d]: incomplete order", i, j) + } + field := fmt.Sprintf("conditional_derivative_orderbooks[%d].market_sell_orders[%d]", i, j) + if err := addDerivativeOrder(field, marketID, order.OrderHash, order.SubaccountID(), order.Cid(), order.IsBuy(), false, order.IsVanilla(), order.OrderInfo.Quantity); err != nil { + return err + } + } + } + + spotHolds := make(map[common.Hash][]genesisSpotHold) + for i, orderbook := range gs.SpotOrderbook { + marketID := common.HexToHash(orderbook.MarketId) + market := spotMarkets[marketID] + for j, order := range orderbook.Orders { + if order == nil { + return fmt.Errorf("spot_orderbook[%d].orders[%d]: missing order", i, j) + } + field := fmt.Sprintf("spot_orderbook[%d].orders[%d]", i, j) + if order.IsBuy() != orderbook.IsBuySide { + return fmt.Errorf("%s: outer side does not match order body", field) + } + subaccountID := order.SubaccountID() + if err := registerIdentity(field, subaccountID, order.Hash(), order.OrderHash, order.Cid()); err != nil { + return err + } + if _, isCross := crossSubaccounts[subaccountID]; !isCross { + continue + } + hold, lockingDenom, err := CanonicalCrossMarginSpotLimitHold(order, market, false) + if err != nil { + return fmt.Errorf("%s: %w", field, err) + } + spotHolds[subaccountID] = append(spotHolds[subaccountID], genesisSpotHold{ + marketID: marketID, isBuy: order.IsBuy(), orderHash: order.Hash(), + lockingDenom: lockingDenom, holdRaw: new(big.Int).Set(hold.BigInt()), + }) + } + } + + totals := gs.finalGenesisBalanceTotals() + spotSurvivors := make(map[genesisCrossPoolKey]uint64) + for subaccountID, holds := range spotHolds { + slices.SortFunc(holds, func(a, b genesisSpotHold) int { + if cmp := bytes.Compare(a.marketID.Bytes(), b.marketID.Bytes()); cmp != 0 { + return cmp + } + if a.isBuy != b.isBuy { + if !a.isBuy { + return -1 + } + return 1 + } + return bytes.Compare(a.orderHash.Bytes(), b.orderHash.Bytes()) + }) + byDenom := make(map[string][]genesisSpotHold) + for _, hold := range holds { + byDenom[hold.lockingDenom] = append(byDenom[hold.lockingDenom], hold) + } + for denom, denomHolds := range byDenom { + total := totals[genesisCrossPoolKey{subaccountID: subaccountID, quoteDenom: denom}] + totalRaw := new(big.Int) + if !total.IsNil() { + totalRaw.Set(total.BigInt()) + } + holdRaw := new(big.Int) + for _, hold := range denomHolds { + holdRaw.Add(holdRaw, hold.holdRaw) + } + firstSurvivor := 0 + for holdRaw.Cmp(totalRaw) > 0 && firstSurvivor < len(denomHolds) { + holdRaw.Sub(holdRaw, denomHolds[firstSurvivor].holdRaw) + firstSurvivor++ + } + spotSurvivors[genesisCrossPoolKey{subaccountID: subaccountID, quoteDenom: denom}] = uint64(len(denomHolds) - firstSurvivor) + } } + for poolKey, derivativeCount := range derivativeOrderCount { + if derivativeCount+spotSurvivors[poolKey] > uint64(MaxCrossMarginCancellableOrdersPerQuote) { + return fmt.Errorf("cross-margin C bound exceeded for %s", poolKey.quoteDenom) + } + } + for poolKey, spotCount := range spotSurvivors { + if derivativeOrderCount[poolKey]+spotCount > uint64(MaxCrossMarginCancellableOrdersPerQuote) { + return fmt.Errorf("cross-margin C bound exceeded for %s", poolKey.quoteDenom) + } + } + for subaccountID, states := range marketStates { + chunksByDenom := make(map[string]*big.Int) + for marketID, state := range states { + market := derivativeMarkets[marketID] + chunks, err := CrossMarginCanonicalChunkCountRaw(state.positionRaw, state.queuedRaw) + if err != nil { + return err + } + if chunksByDenom[market.GetQuoteDenom()] == nil { + chunksByDenom[market.GetQuoteDenom()] = new(big.Int) + } + chunksByDenom[market.GetQuoteDenom()].Add(chunksByDenom[market.GetQuoteDenom()], chunks) + if chunksByDenom[market.GetQuoteDenom()].Cmp(big.NewInt(int64(MaxCrossMarginCanonicalChunksPerQuote))) > 0 { + return fmt.Errorf("cross-margin B bound exceeded for subaccount %s quote %s", subaccountID.Hex(), market.GetQuoteDenom()) + } + } + } return nil } +func (gs GenesisState) validateGenesisBalances() error { + for i, balance := range gs.Balances { + if _, ok := types.IsValidSubaccountID(balance.SubaccountId); !ok || balance.Denom == "" || + balance.Deposits == nil || balance.Deposits.TotalBalance.IsNil() || balance.Deposits.AvailableBalance.IsNil() { + return fmt.Errorf("balances[%d]: invalid balance", i) + } + } + return nil +} + +func (gs GenesisState) finalGenesisBalanceTotals() map[genesisCrossPoolKey]sdkmath.LegacyDec { + totals := make(map[genesisCrossPoolKey]sdkmath.LegacyDec, len(gs.Balances)) + for _, balance := range gs.Balances { + totals[genesisCrossPoolKey{ + subaccountID: common.HexToHash(balance.SubaccountId), + quoteDenom: balance.Denom, + }] = balance.Deposits.TotalBalance + } + return totals +} + +func canonicalRFQGenesisChunkEntryNotionalFits(position *Position, market *DerivativeMarket) bool { + if position == nil || market == nil || !position.Quantity.IsPositive() || !position.EntryPrice.IsPositive() { + return false + } + chunkQuantity := sdkmath.LegacyMinDec(position.Quantity, types.MaxOrderQuantity) + precision := sdkmath.LegacyOneDec().BigInt() + raw, remainder := new(big.Int), new(big.Int) + raw.QuoRem(new(big.Int).Mul(chunkQuantity.BigInt(), position.EntryPrice.BigInt()), precision, remainder) + halfPrecision := new(big.Int).Quo(precision, big.NewInt(2)) + if cmp := remainder.Cmp(halfPrecision); cmp > 0 || cmp == 0 && raw.Bit(0) == 1 { + raw.Add(raw, big.NewInt(1)) + } + entryNotional := sdkmath.LegacyNewDecFromBigIntWithPrec(raw, sdkmath.LegacyPrecision) + return entryNotional.IsInValidRange() && market.CanRepresentNotionalInChainFormat(entryNotional) +} + func (gs GenesisState) validateSpotOrderbookMarkets() error { spotMarkets, err := gs.validatedSpotMarkets() if err != nil { diff --git a/chain/exchange/types/v2/market.go b/chain/exchange/types/v2/market.go index 7fc3982b4..b13379cfa 100644 --- a/chain/exchange/types/v2/market.go +++ b/chain/exchange/types/v2/market.go @@ -255,6 +255,10 @@ func (m *DerivativeMarket) NotionalToChainFormat(humanReadableValue math.LegacyD return types.NotionalToChainFormat(humanReadableValue, m.QuoteDecimals) } +func (m *DerivativeMarket) CanRepresentNotionalInChainFormat(humanReadableValue math.LegacyDec) bool { + return types.CanRepresentNotionalInChainFormat(humanReadableValue, m.QuoteDecimals) +} + /// Binary Options Markets // diff --git a/chain/exchange/types/v2/msgs.go b/chain/exchange/types/v2/msgs.go index 327b941c7..637e44d23 100644 --- a/chain/exchange/types/v2/msgs.go +++ b/chain/exchange/types/v2/msgs.go @@ -137,6 +137,7 @@ const ( TypeMsgCancelPostOnlyMode = "cancelPostOnlyMode" TypeMsgActivatePostOnlyMode = "activatePostOnlyMode" TypeMsgLiquidateCrossMarginPool = "liquidateCrossMarginPool" + TypeMsgUpdateSwapParams = "updateSwapParams" ) func (MsgUpdateParams) Route() string { return RouterKey } @@ -148,7 +149,17 @@ func (msg MsgUpdateParams) ValidateBasic() error { return errors.Wrap(err, "invalid authority address") } - if err := msg.Params.Validate(); err != nil { + params := msg.Params + if len(params.CrossMarginParams.LiquidationRfqContractAddress) == 0 && + len(params.CrossMarginParams.EnabledQuoteDenoms) != 0 { + // Proto3 cannot distinguish an omitted list from an explicitly empty one. + // Use the already-validated authority solely as a syntactically valid marker + // so stateless validation can enforce every RFQ-mode bound. The stateful + // handler restores the configured router set before validating and + // persisting the actual parameters, or rejects the update if none exists. + params.CrossMarginParams.LiquidationRfqContractAddress = []string{msg.Authority} + } + if err := params.Validate(); err != nil { return err } @@ -164,6 +175,27 @@ func (msg MsgUpdateParams) GetSigners() []sdk.AccAddress { return []sdk.AccAddress{addr} } +func (MsgUpdateSwapParams) Route() string { return RouterKey } + +func (MsgUpdateSwapParams) Type() string { return TypeMsgUpdateSwapParams } + +func (msg MsgUpdateSwapParams) ValidateBasic() error { + if err := types.ValidateAddress(msg.Sender); err != nil { + return errors.Wrap(err, "invalid sender address") + } + + return msg.SwapParams.Validate() +} + +func (msg *MsgUpdateSwapParams) GetSignBytes() []byte { + return types.ModuleCdc.MustMarshal(msg) +} + +func (msg MsgUpdateSwapParams) GetSigners() []sdk.AccAddress { + addr, _ := sdk.AccAddressFromBech32(msg.Sender) + return []sdk.AccAddress{addr} +} + // Declaration to validate adherence to interface var _ types.UpdateSpotMarketMessage = &MsgUpdateSpotMarket{} @@ -1985,6 +2017,19 @@ func (msg *MsgLiquidateCrossMarginPool) ValidateBasic() error { return errors.Wrap(types.ErrInvalidQuoteDenom, err.Error()) } + // Stateless validation deliberately bounds, but does not parse, the RFQ + // payload. Terminal recovery may be cancel-only or settlement-only, and an + // already-settling pool is idempotent even when the optional payload is + // malformed. The message server performs strict parsing only after cleanup + // proves that an active, unmarked, still-unhealthy pool needs an RFQ close. + if len(msg.RfqAction) > MaxCrossMarginRFQLiquidationActionBytes { + return errors.Wrapf( + types.ErrBadField, + "rfq_action exceeds maximum size of %d bytes", + MaxCrossMarginRFQLiquidationActionBytes, + ) + } + return nil } diff --git a/chain/exchange/types/v2/params.go b/chain/exchange/types/v2/params.go index dc9c95a50..c9b554711 100644 --- a/chain/exchange/types/v2/params.go +++ b/chain/exchange/types/v2/params.go @@ -1,8 +1,10 @@ package v2 import ( + "bytes" "errors" "fmt" + "sort" "cosmossdk.io/math" sdk "github.com/cosmos/cosmos-sdk/types" @@ -18,6 +20,21 @@ var _ paramtypes.ParamSet = &Params{} const ( MaxLiquidationCooldownBlocks uint64 = 1000 + // RFQ liquidation bounds cap every dimension of a caller-supplied + // cross-margin liquidation action before it reaches keeper execution. + MaxCrossMarginRFQLiquidationMarkets = 8 + MaxCrossMarginRFQEnabledQuoteDenoms = 8 + MaxCrossMarginRFQContractAddresses = 8 + MaxCrossMarginRFQPositionMarketsPerSubaccount = MaxCrossMarginRFQEnabledQuoteDenoms * MaxCrossMarginRFQLiquidationMarkets + MaxCrossMarginRFQLiquidationTradePairs = 32 + MaxCrossMarginRFQLiquidationActionBytes = 65_536 + + // CrossMarginMaxActiveDerivativeMarketsPerPoolHardLimit is the protocol + // validation ceiling. Read-side bounded recovery uses this hard limit rather + // than the mutable admission cap so a governance decrease cannot strand + // grandfathered cross-margin positions. + CrossMarginMaxActiveDerivativeMarketsPerPoolHardLimit uint32 = 1000 + // DefaultMaxCrossMarginSpotOrdersPerSubaccountPerDenom caps cross-margin // spot order count per (subaccount, locking denom) at admission so the // liquidation cancel-first work for cross-margin pools is bounded by a @@ -26,6 +43,96 @@ const ( MaxCrossMarginSpotOrdersPerSubaccountPerDenom uint32 = 1000 ) +// CrossMarginRFQRouterSet is a validated, byte-sorted set of cross-margin RFQ +// router addresses. Its zero value is the empty set. +type CrossMarginRFQRouterSet struct { + addresses []sdk.AccAddress +} + +// ParseCrossMarginRFQRouterSet parses, byte-deduplicates, and byte-sorts RFQ +// router addresses. Textual aliases of the same address are duplicates rather +// than distinct routers. +func ParseCrossMarginRFQRouterSet(values []string) (CrossMarginRFQRouterSet, error) { + if len(values) > MaxCrossMarginRFQContractAddresses { + return CrossMarginRFQRouterSet{}, fmt.Errorf( + "cross_margin_liquidation_rfq_contract_address must contain at most %d entries, got %d", + MaxCrossMarginRFQContractAddresses, + len(values), + ) + } + + addresses := make([]sdk.AccAddress, len(values)) + for i, value := range values { + address, err := sdk.AccAddressFromBech32(value) + if err != nil { + return CrossMarginRFQRouterSet{}, fmt.Errorf( + "cross_margin_liquidation_rfq_contract_address[%d] is invalid: %w", + i, + err, + ) + } + addresses[i] = append(sdk.AccAddress(nil), address...) + } + + sort.Slice(addresses, func(i, j int) bool { + return bytes.Compare(addresses[i], addresses[j]) < 0 + }) + for i := 1; i < len(addresses); i++ { + if bytes.Equal(addresses[i-1], addresses[i]) { + return CrossMarginRFQRouterSet{}, fmt.Errorf( + "cross_margin_liquidation_rfq_contract_address contains duplicate address %s", + addresses[i].String(), + ) + } + } + + return CrossMarginRFQRouterSet{addresses: addresses}, nil +} + +// Len returns the number of distinct routers. +func (s CrossMarginRFQRouterSet) Len() int { + return len(s.addresses) +} + +// Contains reports whether address belongs to the router set. +func (s CrossMarginRFQRouterSet) Contains(address sdk.AccAddress) bool { + idx := sort.Search(len(s.addresses), func(i int) bool { + return bytes.Compare(s.addresses[i], address) >= 0 + }) + return idx < len(s.addresses) && bytes.Equal(s.addresses[idx], address) +} + +// Equal reports byte-set equality. Both operands are already canonical. +func (s CrossMarginRFQRouterSet) Equal(other CrossMarginRFQRouterSet) bool { + if len(s.addresses) != len(other.addresses) { + return false + } + for i := range s.addresses { + if !bytes.Equal(s.addresses[i], other.addresses[i]) { + return false + } + } + return true +} + +// Addresses returns a deep copy of the canonical byte-sorted addresses. +func (s CrossMarginRFQRouterSet) Addresses() []sdk.AccAddress { + addresses := make([]sdk.AccAddress, len(s.addresses)) + for i := range s.addresses { + addresses[i] = append(sdk.AccAddress(nil), s.addresses[i]...) + } + return addresses +} + +// CanonicalStrings returns canonical Bech32 encodings in address-byte order. +func (s CrossMarginRFQRouterSet) CanonicalStrings() []string { + values := make([]string, len(s.addresses)) + for i := range s.addresses { + values[i] = s.addresses[i].String() + } + return values +} + // Parameter keys var ( KeySpotMarketInstantListingFee = []byte("SpotMarketInstantListingFee") @@ -206,6 +313,7 @@ func DefaultParams() Params { MinPostOnlyModeDowntimeDuration: "DURATION_10M", // default 10 minutes PostOnlyModeBlocksAmountAfterDowntime: 1000, // default 1000 blocks CrossMarginParams: DefaultCrossMarginParams(), + SwapParams: DefaultSwapParams(), } } @@ -308,9 +416,43 @@ func (p Params) Validate() error { if err := ValidatePostOnlyModeBlocksAmountAfterDowntime(p.PostOnlyModeBlocksAmountAfterDowntime); err != nil { return fmt.Errorf("post_only_mode_blocks_amount_after_downtime is incorrect: %w", err) } + if err := p.SwapParams.Validate(); err != nil { + return fmt.Errorf("swap_params is incorrect: %w", err) + } return p.CrossMarginParams.Validate() } +// DefaultSwapParams returns default swap parameters. The empty allowlist keeps +// the swap path inert until governance or an exchange admin lists markets. +func DefaultSwapParams() SwapParams { + return SwapParams{ + Enabled: true, + AllowedMarkets: nil, + } +} + +// MaxSwapAllowedMarkets bounds the allowlist size as an input-sanity limit. +const MaxSwapAllowedMarkets = 1000 + +// Validate performs basic validation on swap parameters. +func (p SwapParams) Validate() error { + if len(p.AllowedMarkets) > MaxSwapAllowedMarkets { + return fmt.Errorf("allowed_markets exceeds maximum of %d entries", MaxSwapAllowedMarkets) + } + seen := make(map[string]struct{}, len(p.AllowedMarkets)) + for _, marketID := range p.AllowedMarkets { + if !types.IsHexHash(marketID) { + return fmt.Errorf("allowed_markets entry %q is not a valid market ID hash", marketID) + } + normalized := ethcommon.HexToHash(marketID).Hex() + if _, ok := seen[normalized]; ok { + return fmt.Errorf("allowed_markets entry %q is duplicated", marketID) + } + seen[normalized] = struct{}{} + } + return nil +} + // DefaultCrossMarginParams returns default cross-margin parameters. func DefaultCrossMarginParams() CrossMarginParams { return CrossMarginParams{ @@ -326,6 +468,7 @@ func DefaultCrossMarginParams() CrossMarginParams { LiquidationCooldownBlocks: 0, MaxCrossMarginSpotOrdersPerSubaccountPerDenom: DefaultMaxCrossMarginSpotOrdersPerSubaccountPerDenom, UtilRatio: math.LegacyOneDec(), + LiquidationRfqContractAddress: []string{}, } } @@ -386,6 +529,22 @@ func (p CrossMarginParams) Validate() error { if err := ValidateCrossMarginEnabledQuoteDenoms(p.EnabledQuoteDenoms); err != nil { return fmt.Errorf("cross_margin_enabled_quote_denoms are invalid: %w", err) } + routers, err := ParseCrossMarginRFQRouterSet(p.LiquidationRfqContractAddress) + if err != nil { + return err + } + if routers.Len() == 0 && len(p.EnabledQuoteDenoms) != 0 { + return errors.New("cross_margin_enabled_quote_denoms must be empty when liquidation_rfq_contract_address is not configured") + } + if routers.Len() != 0 { + if len(p.EnabledQuoteDenoms) > MaxCrossMarginRFQEnabledQuoteDenoms { + return fmt.Errorf( + "cross_margin_enabled_quote_denoms must contain at most %d entries when RFQ liquidation is enabled, got %d", + MaxCrossMarginRFQEnabledQuoteDenoms, + len(p.EnabledQuoteDenoms), + ) + } + } return nil } @@ -444,9 +603,12 @@ func ValidateCrossMarginMaxActiveDerivativeMarketsPerPool(i any) error { return errors.New("max_active_derivative_markets_per_pool must be >= 1 (explicit zero is rejected; governance must supply a positive cap)") } - const maxReasonable = 1000 - if v > maxReasonable { - return fmt.Errorf("max_active_derivative_markets_per_pool %d exceeds max %d", v, maxReasonable) + if v > CrossMarginMaxActiveDerivativeMarketsPerPoolHardLimit { + return fmt.Errorf( + "max_active_derivative_markets_per_pool %d exceeds max %d", + v, + CrossMarginMaxActiveDerivativeMarketsPerPoolHardLimit, + ) } return nil } diff --git a/chain/exchange/types/v2/position.go b/chain/exchange/types/v2/position.go index eced50262..f3c9c8af3 100644 --- a/chain/exchange/types/v2/position.go +++ b/chain/exchange/types/v2/position.go @@ -181,15 +181,47 @@ func (p *Position) checkValidClosingPrice( bankruptcyPrice := p.GetBankruptcyPriceWithAddedMargin(funding, orderMargin) if p.IsLong { - // For long positions, Price ≥ BankruptcyPrice / (1 - TradeFeeRate) must hold - feeAdjustedBankruptcyPrice := bankruptcyPrice.Quo(math.LegacyOneDec().Sub(tradeFeeRate)) + // For long positions, Price * (1 - TradeFeeRate) ≥ BankruptcyPrice must hold. + feeMultiplier := math.LegacyOneDec().Sub(tradeFeeRate) + if feeMultiplier.IsZero() { + // At a 100% fee the close contributes zero price proceeds. Evaluate the + // multiplication-form boundary directly instead of dividing by zero. + if bankruptcyPrice.IsPositive() { + return types.ErrPriceSurpassesBankruptcyPrice + } + return nil + } + // Above a 100% effective fee, a higher sell execution price can make the + // close less solvent. This order-price check has no execution-price ceiling, + // so it cannot safely admit that case. + if feeMultiplier.IsNegative() { + return types.ErrPriceSurpassesBankruptcyPrice + } + + feeAdjustedBankruptcyPrice := bankruptcyPrice.Quo(feeMultiplier) if closingPrice.LT(feeAdjustedBankruptcyPrice) { return types.ErrPriceSurpassesBankruptcyPrice } } else { - // For short positions, Price ≤ BankruptcyPrice / (1 + TradeFeeRate) must hold - feeAdjustedBankruptcyPrice := bankruptcyPrice.Quo(math.LegacyOneDec().Add(tradeFeeRate)) + // For short positions, Price * (1 + TradeFeeRate) ≤ BankruptcyPrice must hold. + feeMultiplier := math.LegacyOneDec().Add(tradeFeeRate) + if feeMultiplier.IsZero() { + // At a 100% rebate the fee-adjusted close price is zero. Evaluate the + // multiplication-form boundary directly instead of dividing by zero. + if bankruptcyPrice.IsNegative() { + return types.ErrPriceSurpassesBankruptcyPrice + } + return nil + } + // Below a -100% effective fee, a lower buy execution price can make the + // close less solvent. This order-price check has no execution-price floor, + // so it cannot safely admit that case. + if feeMultiplier.IsNegative() { + return types.ErrPriceSurpassesBankruptcyPrice + } + + feeAdjustedBankruptcyPrice := bankruptcyPrice.Quo(feeMultiplier) if closingPrice.GT(feeAdjustedBankruptcyPrice) { return types.ErrPriceSurpassesBankruptcyPrice diff --git a/chain/exchange/types/v2/query.pb.go b/chain/exchange/types/v2/query.pb.go index e1aebe9b9..74a9934ba 100644 --- a/chain/exchange/types/v2/query.pb.go +++ b/chain/exchange/types/v2/query.pb.go @@ -2261,6 +2261,241 @@ func (m *QueryAccountAddressSpotOrdersResponse) GetOrders() []*TrimmedSpotLimitO return nil } +// QuerySpotSwapOutputRequest is the request type for the +// Query/SpotSwapOutput RPC method. +type QuerySpotSwapOutputRequest struct { + // Market ID of the spot market to swap on + MarketId string `protobuf:"bytes,1,opt,name=market_id,json=marketId,proto3" json:"market_id,omitempty"` + // Denom of the input token; the swap direction is derived from which side + // of the market it matches + InputDenom string `protobuf:"bytes,2,opt,name=input_denom,json=inputDenom,proto3" json:"input_denom,omitempty"` + // Exact input amount in chain format + AmountIn string `protobuf:"bytes,3,opt,name=amount_in,json=amountIn,proto3" json:"amount_in,omitempty"` +} + +func (m *QuerySpotSwapOutputRequest) Reset() { *m = QuerySpotSwapOutputRequest{} } +func (m *QuerySpotSwapOutputRequest) String() string { return proto.CompactTextString(m) } +func (*QuerySpotSwapOutputRequest) ProtoMessage() {} +func (*QuerySpotSwapOutputRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_108a0f108cdd0cc4, []int{42} +} +func (m *QuerySpotSwapOutputRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QuerySpotSwapOutputRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QuerySpotSwapOutputRequest.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 *QuerySpotSwapOutputRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QuerySpotSwapOutputRequest.Merge(m, src) +} +func (m *QuerySpotSwapOutputRequest) XXX_Size() int { + return m.Size() +} +func (m *QuerySpotSwapOutputRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QuerySpotSwapOutputRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QuerySpotSwapOutputRequest proto.InternalMessageInfo + +func (m *QuerySpotSwapOutputRequest) GetMarketId() string { + if m != nil { + return m.MarketId + } + return "" +} + +func (m *QuerySpotSwapOutputRequest) GetInputDenom() string { + if m != nil { + return m.InputDenom + } + return "" +} + +func (m *QuerySpotSwapOutputRequest) GetAmountIn() string { + if m != nil { + return m.AmountIn + } + return "" +} + +// QuerySpotSwapOutputResponse is the response type for the +// Query/SpotSwapOutput RPC method. +type QuerySpotSwapOutputResponse struct { + OutputDenom string `protobuf:"bytes,1,opt,name=output_denom,json=outputDenom,proto3" json:"output_denom,omitempty"` + // Projected output amount in chain format + OutputAmount cosmossdk_io_math.Int `protobuf:"bytes,2,opt,name=output_amount,json=outputAmount,proto3,customtype=cosmossdk.io/math.Int" json:"output_amount"` + // Projected input actually spent in chain format; amount_in minus this is + // the projected refund + SpentAmount cosmossdk_io_math.Int `protobuf:"bytes,3,opt,name=spent_amount,json=spentAmount,proto3,customtype=cosmossdk.io/math.Int" json:"spent_amount"` +} + +func (m *QuerySpotSwapOutputResponse) Reset() { *m = QuerySpotSwapOutputResponse{} } +func (m *QuerySpotSwapOutputResponse) String() string { return proto.CompactTextString(m) } +func (*QuerySpotSwapOutputResponse) ProtoMessage() {} +func (*QuerySpotSwapOutputResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_108a0f108cdd0cc4, []int{43} +} +func (m *QuerySpotSwapOutputResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QuerySpotSwapOutputResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QuerySpotSwapOutputResponse.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 *QuerySpotSwapOutputResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QuerySpotSwapOutputResponse.Merge(m, src) +} +func (m *QuerySpotSwapOutputResponse) XXX_Size() int { + return m.Size() +} +func (m *QuerySpotSwapOutputResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QuerySpotSwapOutputResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QuerySpotSwapOutputResponse proto.InternalMessageInfo + +func (m *QuerySpotSwapOutputResponse) GetOutputDenom() string { + if m != nil { + return m.OutputDenom + } + return "" +} + +// QuerySpotSwapInputRequest is the request type for the +// Query/SpotSwapInput RPC method. +type QuerySpotSwapInputRequest struct { + // Market ID of the spot market to swap on + MarketId string `protobuf:"bytes,1,opt,name=market_id,json=marketId,proto3" json:"market_id,omitempty"` + // Denom of the desired output token; the swap direction is derived from + // which side of the market it matches + OutputDenom string `protobuf:"bytes,2,opt,name=output_denom,json=outputDenom,proto3" json:"output_denom,omitempty"` + // Desired exact output amount in chain format + AmountOut string `protobuf:"bytes,3,opt,name=amount_out,json=amountOut,proto3" json:"amount_out,omitempty"` +} + +func (m *QuerySpotSwapInputRequest) Reset() { *m = QuerySpotSwapInputRequest{} } +func (m *QuerySpotSwapInputRequest) String() string { return proto.CompactTextString(m) } +func (*QuerySpotSwapInputRequest) ProtoMessage() {} +func (*QuerySpotSwapInputRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_108a0f108cdd0cc4, []int{44} +} +func (m *QuerySpotSwapInputRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QuerySpotSwapInputRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QuerySpotSwapInputRequest.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 *QuerySpotSwapInputRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QuerySpotSwapInputRequest.Merge(m, src) +} +func (m *QuerySpotSwapInputRequest) XXX_Size() int { + return m.Size() +} +func (m *QuerySpotSwapInputRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QuerySpotSwapInputRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QuerySpotSwapInputRequest proto.InternalMessageInfo + +func (m *QuerySpotSwapInputRequest) GetMarketId() string { + if m != nil { + return m.MarketId + } + return "" +} + +func (m *QuerySpotSwapInputRequest) GetOutputDenom() string { + if m != nil { + return m.OutputDenom + } + return "" +} + +func (m *QuerySpotSwapInputRequest) GetAmountOut() string { + if m != nil { + return m.AmountOut + } + return "" +} + +// QuerySpotSwapInputResponse is the response type for the +// Query/SpotSwapInput RPC method. +type QuerySpotSwapInputResponse struct { + InputDenom string `protobuf:"bytes,1,opt,name=input_denom,json=inputDenom,proto3" json:"input_denom,omitempty"` + // Input amount in chain format projected to achieve at least amount_out on + // the current book; conservatively rounded up. The projection walks + // aggregated levels, which cannot exclude paused or frozen maker liquidity + // resting at executable prices, so pair the swap with minOut = amount_out + // rather than relying on the projection alone + InputAmount cosmossdk_io_math.Int `protobuf:"bytes,2,opt,name=input_amount,json=inputAmount,proto3,customtype=cosmossdk.io/math.Int" json:"input_amount"` +} + +func (m *QuerySpotSwapInputResponse) Reset() { *m = QuerySpotSwapInputResponse{} } +func (m *QuerySpotSwapInputResponse) String() string { return proto.CompactTextString(m) } +func (*QuerySpotSwapInputResponse) ProtoMessage() {} +func (*QuerySpotSwapInputResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_108a0f108cdd0cc4, []int{45} +} +func (m *QuerySpotSwapInputResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QuerySpotSwapInputResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QuerySpotSwapInputResponse.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 *QuerySpotSwapInputResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QuerySpotSwapInputResponse.Merge(m, src) +} +func (m *QuerySpotSwapInputResponse) XXX_Size() int { + return m.Size() +} +func (m *QuerySpotSwapInputResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QuerySpotSwapInputResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QuerySpotSwapInputResponse proto.InternalMessageInfo + +func (m *QuerySpotSwapInputResponse) GetInputDenom() string { + if m != nil { + return m.InputDenom + } + return "" +} + // QuerySpotMidPriceAndTOBRequest is the request type for the // Query/SpotMidPriceAndTOB RPC method. type QuerySpotMidPriceAndTOBRequest struct { @@ -2272,7 +2507,7 @@ func (m *QuerySpotMidPriceAndTOBRequest) Reset() { *m = QuerySpotMidPric func (m *QuerySpotMidPriceAndTOBRequest) String() string { return proto.CompactTextString(m) } func (*QuerySpotMidPriceAndTOBRequest) ProtoMessage() {} func (*QuerySpotMidPriceAndTOBRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{42} + return fileDescriptor_108a0f108cdd0cc4, []int{46} } func (m *QuerySpotMidPriceAndTOBRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2323,7 +2558,7 @@ func (m *QuerySpotMidPriceAndTOBResponse) Reset() { *m = QuerySpotMidPri func (m *QuerySpotMidPriceAndTOBResponse) String() string { return proto.CompactTextString(m) } func (*QuerySpotMidPriceAndTOBResponse) ProtoMessage() {} func (*QuerySpotMidPriceAndTOBResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{43} + return fileDescriptor_108a0f108cdd0cc4, []int{47} } func (m *QuerySpotMidPriceAndTOBResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2363,7 +2598,7 @@ func (m *QueryDerivativeMidPriceAndTOBRequest) Reset() { *m = QueryDeriv func (m *QueryDerivativeMidPriceAndTOBRequest) String() string { return proto.CompactTextString(m) } func (*QueryDerivativeMidPriceAndTOBRequest) ProtoMessage() {} func (*QueryDerivativeMidPriceAndTOBRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{44} + return fileDescriptor_108a0f108cdd0cc4, []int{48} } func (m *QueryDerivativeMidPriceAndTOBRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2414,7 +2649,7 @@ func (m *QueryDerivativeMidPriceAndTOBResponse) Reset() { *m = QueryDeri func (m *QueryDerivativeMidPriceAndTOBResponse) String() string { return proto.CompactTextString(m) } func (*QueryDerivativeMidPriceAndTOBResponse) ProtoMessage() {} func (*QueryDerivativeMidPriceAndTOBResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{45} + return fileDescriptor_108a0f108cdd0cc4, []int{49} } func (m *QueryDerivativeMidPriceAndTOBResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2456,7 +2691,7 @@ func (m *QueryDerivativeOrderbookRequest) Reset() { *m = QueryDerivative func (m *QueryDerivativeOrderbookRequest) String() string { return proto.CompactTextString(m) } func (*QueryDerivativeOrderbookRequest) ProtoMessage() {} func (*QueryDerivativeOrderbookRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{46} + return fileDescriptor_108a0f108cdd0cc4, []int{50} } func (m *QueryDerivativeOrderbookRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2512,7 +2747,7 @@ func (m *QueryDerivativeOrderbookResponse) Reset() { *m = QueryDerivativ func (m *QueryDerivativeOrderbookResponse) String() string { return proto.CompactTextString(m) } func (*QueryDerivativeOrderbookResponse) ProtoMessage() {} func (*QueryDerivativeOrderbookResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{47} + return fileDescriptor_108a0f108cdd0cc4, []int{51} } func (m *QueryDerivativeOrderbookResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2588,7 +2823,7 @@ func (m *QueryTraderSpotOrdersToCancelUpToAmountRequest) String() string { } func (*QueryTraderSpotOrdersToCancelUpToAmountRequest) ProtoMessage() {} func (*QueryTraderSpotOrdersToCancelUpToAmountRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{48} + return fileDescriptor_108a0f108cdd0cc4, []int{52} } func (m *QueryTraderSpotOrdersToCancelUpToAmountRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2662,7 +2897,7 @@ func (m *QueryTraderDerivativeOrdersToCancelUpToAmountRequest) String() string { } func (*QueryTraderDerivativeOrdersToCancelUpToAmountRequest) ProtoMessage() {} func (*QueryTraderDerivativeOrdersToCancelUpToAmountRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{49} + return fileDescriptor_108a0f108cdd0cc4, []int{53} } func (m *QueryTraderDerivativeOrdersToCancelUpToAmountRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2725,7 +2960,7 @@ func (m *QueryTraderDerivativeOrdersRequest) Reset() { *m = QueryTraderD func (m *QueryTraderDerivativeOrdersRequest) String() string { return proto.CompactTextString(m) } func (*QueryTraderDerivativeOrdersRequest) ProtoMessage() {} func (*QueryTraderDerivativeOrdersRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{50} + return fileDescriptor_108a0f108cdd0cc4, []int{54} } func (m *QueryTraderDerivativeOrdersRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2785,7 +3020,7 @@ func (m *QueryAccountAddressDerivativeOrdersRequest) String() string { } func (*QueryAccountAddressDerivativeOrdersRequest) ProtoMessage() {} func (*QueryAccountAddressDerivativeOrdersRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{51} + return fileDescriptor_108a0f108cdd0cc4, []int{55} } func (m *QueryAccountAddressDerivativeOrdersRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2849,7 +3084,7 @@ func (m *TrimmedDerivativeLimitOrder) Reset() { *m = TrimmedDerivativeLi func (m *TrimmedDerivativeLimitOrder) String() string { return proto.CompactTextString(m) } func (*TrimmedDerivativeLimitOrder) ProtoMessage() {} func (*TrimmedDerivativeLimitOrder) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{52} + return fileDescriptor_108a0f108cdd0cc4, []int{56} } func (m *TrimmedDerivativeLimitOrder) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2909,7 +3144,7 @@ func (m *QueryTraderDerivativeOrdersResponse) Reset() { *m = QueryTrader func (m *QueryTraderDerivativeOrdersResponse) String() string { return proto.CompactTextString(m) } func (*QueryTraderDerivativeOrdersResponse) ProtoMessage() {} func (*QueryTraderDerivativeOrdersResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{53} + return fileDescriptor_108a0f108cdd0cc4, []int{57} } func (m *QueryTraderDerivativeOrdersResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2959,7 +3194,7 @@ func (m *QueryAccountAddressDerivativeOrdersResponse) String() string { } func (*QueryAccountAddressDerivativeOrdersResponse) ProtoMessage() {} func (*QueryAccountAddressDerivativeOrdersResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{54} + return fileDescriptor_108a0f108cdd0cc4, []int{58} } func (m *QueryAccountAddressDerivativeOrdersResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3010,7 +3245,7 @@ func (m *QueryDerivativeOrdersByHashesRequest) Reset() { *m = QueryDeriv func (m *QueryDerivativeOrdersByHashesRequest) String() string { return proto.CompactTextString(m) } func (*QueryDerivativeOrdersByHashesRequest) ProtoMessage() {} func (*QueryDerivativeOrdersByHashesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{55} + return fileDescriptor_108a0f108cdd0cc4, []int{59} } func (m *QueryDerivativeOrdersByHashesRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3070,7 +3305,7 @@ func (m *QueryDerivativeOrdersByHashesResponse) Reset() { *m = QueryDeri func (m *QueryDerivativeOrdersByHashesResponse) String() string { return proto.CompactTextString(m) } func (*QueryDerivativeOrdersByHashesResponse) ProtoMessage() {} func (*QueryDerivativeOrdersByHashesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{56} + return fileDescriptor_108a0f108cdd0cc4, []int{60} } func (m *QueryDerivativeOrdersByHashesResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3122,7 +3357,7 @@ func (m *QueryDerivativeMarketsRequest) Reset() { *m = QueryDerivativeMa func (m *QueryDerivativeMarketsRequest) String() string { return proto.CompactTextString(m) } func (*QueryDerivativeMarketsRequest) ProtoMessage() {} func (*QueryDerivativeMarketsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{57} + return fileDescriptor_108a0f108cdd0cc4, []int{61} } func (m *QueryDerivativeMarketsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3182,7 +3417,7 @@ func (m *PriceLevel) Reset() { *m = PriceLevel{} } func (m *PriceLevel) String() string { return proto.CompactTextString(m) } func (*PriceLevel) ProtoMessage() {} func (*PriceLevel) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{58} + return fileDescriptor_108a0f108cdd0cc4, []int{62} } func (m *PriceLevel) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3220,7 +3455,7 @@ func (m *PerpetualMarketState) Reset() { *m = PerpetualMarketState{} } func (m *PerpetualMarketState) String() string { return proto.CompactTextString(m) } func (*PerpetualMarketState) ProtoMessage() {} func (*PerpetualMarketState) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{59} + return fileDescriptor_108a0f108cdd0cc4, []int{63} } func (m *PerpetualMarketState) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3283,7 +3518,7 @@ func (m *FullDerivativeMarket) Reset() { *m = FullDerivativeMarket{} } func (m *FullDerivativeMarket) String() string { return proto.CompactTextString(m) } func (*FullDerivativeMarket) ProtoMessage() {} func (*FullDerivativeMarket) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{60} + return fileDescriptor_108a0f108cdd0cc4, []int{64} } func (m *FullDerivativeMarket) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3381,7 +3616,7 @@ func (m *QueryDerivativeMarketsResponse) Reset() { *m = QueryDerivativeM func (m *QueryDerivativeMarketsResponse) String() string { return proto.CompactTextString(m) } func (*QueryDerivativeMarketsResponse) ProtoMessage() {} func (*QueryDerivativeMarketsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{61} + return fileDescriptor_108a0f108cdd0cc4, []int{65} } func (m *QueryDerivativeMarketsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3428,7 +3663,7 @@ func (m *QueryDerivativeMarketRequest) Reset() { *m = QueryDerivativeMar func (m *QueryDerivativeMarketRequest) String() string { return proto.CompactTextString(m) } func (*QueryDerivativeMarketRequest) ProtoMessage() {} func (*QueryDerivativeMarketRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{62} + return fileDescriptor_108a0f108cdd0cc4, []int{66} } func (m *QueryDerivativeMarketRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3474,7 +3709,7 @@ func (m *QueryDerivativeMarketResponse) Reset() { *m = QueryDerivativeMa func (m *QueryDerivativeMarketResponse) String() string { return proto.CompactTextString(m) } func (*QueryDerivativeMarketResponse) ProtoMessage() {} func (*QueryDerivativeMarketResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{63} + return fileDescriptor_108a0f108cdd0cc4, []int{67} } func (m *QueryDerivativeMarketResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3521,7 +3756,7 @@ func (m *QueryDerivativeMarketAddressRequest) Reset() { *m = QueryDeriva func (m *QueryDerivativeMarketAddressRequest) String() string { return proto.CompactTextString(m) } func (*QueryDerivativeMarketAddressRequest) ProtoMessage() {} func (*QueryDerivativeMarketAddressRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{64} + return fileDescriptor_108a0f108cdd0cc4, []int{68} } func (m *QueryDerivativeMarketAddressRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3570,7 +3805,7 @@ func (m *QueryDerivativeMarketAddressResponse) Reset() { *m = QueryDeriv func (m *QueryDerivativeMarketAddressResponse) String() string { return proto.CompactTextString(m) } func (*QueryDerivativeMarketAddressResponse) ProtoMessage() {} func (*QueryDerivativeMarketAddressResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{65} + return fileDescriptor_108a0f108cdd0cc4, []int{69} } func (m *QueryDerivativeMarketAddressResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3624,7 +3859,7 @@ func (m *QuerySubaccountTradeNonceRequest) Reset() { *m = QuerySubaccoun func (m *QuerySubaccountTradeNonceRequest) String() string { return proto.CompactTextString(m) } func (*QuerySubaccountTradeNonceRequest) ProtoMessage() {} func (*QuerySubaccountTradeNonceRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{66} + return fileDescriptor_108a0f108cdd0cc4, []int{70} } func (m *QuerySubaccountTradeNonceRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3670,7 +3905,7 @@ func (m *QueryPositionsInMarketRequest) Reset() { *m = QueryPositionsInM func (m *QueryPositionsInMarketRequest) String() string { return proto.CompactTextString(m) } func (*QueryPositionsInMarketRequest) ProtoMessage() {} func (*QueryPositionsInMarketRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{67} + return fileDescriptor_108a0f108cdd0cc4, []int{71} } func (m *QueryPositionsInMarketRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3716,7 +3951,7 @@ func (m *QueryPositionsInMarketResponse) Reset() { *m = QueryPositionsIn func (m *QueryPositionsInMarketResponse) String() string { return proto.CompactTextString(m) } func (*QueryPositionsInMarketResponse) ProtoMessage() {} func (*QueryPositionsInMarketResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{68} + return fileDescriptor_108a0f108cdd0cc4, []int{72} } func (m *QueryPositionsInMarketResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3763,7 +3998,7 @@ func (m *QuerySubaccountPositionsRequest) Reset() { *m = QuerySubaccount func (m *QuerySubaccountPositionsRequest) String() string { return proto.CompactTextString(m) } func (*QuerySubaccountPositionsRequest) ProtoMessage() {} func (*QuerySubaccountPositionsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{69} + return fileDescriptor_108a0f108cdd0cc4, []int{73} } func (m *QuerySubaccountPositionsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3814,7 +4049,7 @@ func (m *QuerySubaccountPositionInMarketRequest) Reset() { func (m *QuerySubaccountPositionInMarketRequest) String() string { return proto.CompactTextString(m) } func (*QuerySubaccountPositionInMarketRequest) ProtoMessage() {} func (*QuerySubaccountPositionInMarketRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{70} + return fileDescriptor_108a0f108cdd0cc4, []int{74} } func (m *QuerySubaccountPositionInMarketRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3874,7 +4109,7 @@ func (m *QuerySubaccountEffectivePositionInMarketRequest) String() string { } func (*QuerySubaccountEffectivePositionInMarketRequest) ProtoMessage() {} func (*QuerySubaccountEffectivePositionInMarketRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{71} + return fileDescriptor_108a0f108cdd0cc4, []int{75} } func (m *QuerySubaccountEffectivePositionInMarketRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3928,7 +4163,7 @@ func (m *QuerySubaccountOrderMetadataRequest) Reset() { *m = QuerySubacc func (m *QuerySubaccountOrderMetadataRequest) String() string { return proto.CompactTextString(m) } func (*QuerySubaccountOrderMetadataRequest) ProtoMessage() {} func (*QuerySubaccountOrderMetadataRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{72} + return fileDescriptor_108a0f108cdd0cc4, []int{76} } func (m *QuerySubaccountOrderMetadataRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3974,7 +4209,7 @@ func (m *QuerySubaccountPositionsResponse) Reset() { *m = QuerySubaccoun func (m *QuerySubaccountPositionsResponse) String() string { return proto.CompactTextString(m) } func (*QuerySubaccountPositionsResponse) ProtoMessage() {} func (*QuerySubaccountPositionsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{73} + return fileDescriptor_108a0f108cdd0cc4, []int{77} } func (m *QuerySubaccountPositionsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4026,7 +4261,7 @@ func (m *QuerySubaccountPositionInMarketResponse) Reset() { func (m *QuerySubaccountPositionInMarketResponse) String() string { return proto.CompactTextString(m) } func (*QuerySubaccountPositionInMarketResponse) ProtoMessage() {} func (*QuerySubaccountPositionInMarketResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{74} + return fileDescriptor_108a0f108cdd0cc4, []int{78} } func (m *QuerySubaccountPositionInMarketResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4084,7 +4319,7 @@ func (m *EffectivePosition) Reset() { *m = EffectivePosition{} } func (m *EffectivePosition) String() string { return proto.CompactTextString(m) } func (*EffectivePosition) ProtoMessage() {} func (*EffectivePosition) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{75} + return fileDescriptor_108a0f108cdd0cc4, []int{79} } func (m *EffectivePosition) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4138,7 +4373,7 @@ func (m *QuerySubaccountEffectivePositionInMarketResponse) String() string { } func (*QuerySubaccountEffectivePositionInMarketResponse) ProtoMessage() {} func (*QuerySubaccountEffectivePositionInMarketResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{76} + return fileDescriptor_108a0f108cdd0cc4, []int{80} } func (m *QuerySubaccountEffectivePositionInMarketResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4191,7 +4426,7 @@ func (m *QueryPerpetualMarketInfoRequest) Reset() { *m = QueryPerpetualM func (m *QueryPerpetualMarketInfoRequest) String() string { return proto.CompactTextString(m) } func (*QueryPerpetualMarketInfoRequest) ProtoMessage() {} func (*QueryPerpetualMarketInfoRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{77} + return fileDescriptor_108a0f108cdd0cc4, []int{81} } func (m *QueryPerpetualMarketInfoRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4237,7 +4472,7 @@ func (m *QueryPerpetualMarketInfoResponse) Reset() { *m = QueryPerpetual func (m *QueryPerpetualMarketInfoResponse) String() string { return proto.CompactTextString(m) } func (*QueryPerpetualMarketInfoResponse) ProtoMessage() {} func (*QueryPerpetualMarketInfoResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{78} + return fileDescriptor_108a0f108cdd0cc4, []int{82} } func (m *QueryPerpetualMarketInfoResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4283,7 +4518,7 @@ func (m *QueryExpiryFuturesMarketInfoRequest) Reset() { *m = QueryExpiry func (m *QueryExpiryFuturesMarketInfoRequest) String() string { return proto.CompactTextString(m) } func (*QueryExpiryFuturesMarketInfoRequest) ProtoMessage() {} func (*QueryExpiryFuturesMarketInfoRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{79} + return fileDescriptor_108a0f108cdd0cc4, []int{83} } func (m *QueryExpiryFuturesMarketInfoRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4329,7 +4564,7 @@ func (m *QueryExpiryFuturesMarketInfoResponse) Reset() { *m = QueryExpir func (m *QueryExpiryFuturesMarketInfoResponse) String() string { return proto.CompactTextString(m) } func (*QueryExpiryFuturesMarketInfoResponse) ProtoMessage() {} func (*QueryExpiryFuturesMarketInfoResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{80} + return fileDescriptor_108a0f108cdd0cc4, []int{84} } func (m *QueryExpiryFuturesMarketInfoResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4375,7 +4610,7 @@ func (m *QueryPerpetualMarketFundingRequest) Reset() { *m = QueryPerpetu func (m *QueryPerpetualMarketFundingRequest) String() string { return proto.CompactTextString(m) } func (*QueryPerpetualMarketFundingRequest) ProtoMessage() {} func (*QueryPerpetualMarketFundingRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{81} + return fileDescriptor_108a0f108cdd0cc4, []int{85} } func (m *QueryPerpetualMarketFundingRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4421,7 +4656,7 @@ func (m *QueryPerpetualMarketFundingResponse) Reset() { *m = QueryPerpet func (m *QueryPerpetualMarketFundingResponse) String() string { return proto.CompactTextString(m) } func (*QueryPerpetualMarketFundingResponse) ProtoMessage() {} func (*QueryPerpetualMarketFundingResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{82} + return fileDescriptor_108a0f108cdd0cc4, []int{86} } func (m *QueryPerpetualMarketFundingResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4467,7 +4702,7 @@ func (m *QuerySubaccountOrderMetadataResponse) Reset() { *m = QuerySubac func (m *QuerySubaccountOrderMetadataResponse) String() string { return proto.CompactTextString(m) } func (*QuerySubaccountOrderMetadataResponse) ProtoMessage() {} func (*QuerySubaccountOrderMetadataResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{83} + return fileDescriptor_108a0f108cdd0cc4, []int{87} } func (m *QuerySubaccountOrderMetadataResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4513,7 +4748,7 @@ func (m *QuerySubaccountTradeNonceResponse) Reset() { *m = QuerySubaccou func (m *QuerySubaccountTradeNonceResponse) String() string { return proto.CompactTextString(m) } func (*QuerySubaccountTradeNonceResponse) ProtoMessage() {} func (*QuerySubaccountTradeNonceResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{84} + return fileDescriptor_108a0f108cdd0cc4, []int{88} } func (m *QuerySubaccountTradeNonceResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4560,7 +4795,7 @@ func (m *QuerySubaccountRiskProfileRequest) Reset() { *m = QuerySubaccou func (m *QuerySubaccountRiskProfileRequest) String() string { return proto.CompactTextString(m) } func (*QuerySubaccountRiskProfileRequest) ProtoMessage() {} func (*QuerySubaccountRiskProfileRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{85} + return fileDescriptor_108a0f108cdd0cc4, []int{89} } func (m *QuerySubaccountRiskProfileRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4608,7 +4843,7 @@ func (m *QuerySubaccountRiskProfileResponse) Reset() { *m = QuerySubacco func (m *QuerySubaccountRiskProfileResponse) String() string { return proto.CompactTextString(m) } func (*QuerySubaccountRiskProfileResponse) ProtoMessage() {} func (*QuerySubaccountRiskProfileResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{86} + return fileDescriptor_108a0f108cdd0cc4, []int{90} } func (m *QuerySubaccountRiskProfileResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4664,7 +4899,7 @@ func (m *QueryCrossMarginPoolSnapshotRequest) Reset() { *m = QueryCrossM func (m *QueryCrossMarginPoolSnapshotRequest) String() string { return proto.CompactTextString(m) } func (*QueryCrossMarginPoolSnapshotRequest) ProtoMessage() {} func (*QueryCrossMarginPoolSnapshotRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{87} + return fileDescriptor_108a0f108cdd0cc4, []int{91} } func (m *QueryCrossMarginPoolSnapshotRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4779,7 +5014,7 @@ func (m *QueryCrossMarginPoolSnapshotResponse) Reset() { *m = QueryCross func (m *QueryCrossMarginPoolSnapshotResponse) String() string { return proto.CompactTextString(m) } func (*QueryCrossMarginPoolSnapshotResponse) ProtoMessage() {} func (*QueryCrossMarginPoolSnapshotResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{88} + return fileDescriptor_108a0f108cdd0cc4, []int{92} } func (m *QueryCrossMarginPoolSnapshotResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4824,7 +5059,7 @@ func (m *QueryModuleStateRequest) Reset() { *m = QueryModuleStateRequest func (m *QueryModuleStateRequest) String() string { return proto.CompactTextString(m) } func (*QueryModuleStateRequest) ProtoMessage() {} func (*QueryModuleStateRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{89} + return fileDescriptor_108a0f108cdd0cc4, []int{93} } func (m *QueryModuleStateRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4863,7 +5098,7 @@ func (m *QueryModuleStateResponse) Reset() { *m = QueryModuleStateRespon func (m *QueryModuleStateResponse) String() string { return proto.CompactTextString(m) } func (*QueryModuleStateResponse) ProtoMessage() {} func (*QueryModuleStateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{90} + return fileDescriptor_108a0f108cdd0cc4, []int{94} } func (m *QueryModuleStateResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4907,7 +5142,7 @@ func (m *QueryPositionsRequest) Reset() { *m = QueryPositionsRequest{} } func (m *QueryPositionsRequest) String() string { return proto.CompactTextString(m) } func (*QueryPositionsRequest) ProtoMessage() {} func (*QueryPositionsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{91} + return fileDescriptor_108a0f108cdd0cc4, []int{95} } func (m *QueryPositionsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4946,7 +5181,7 @@ func (m *QueryPositionsResponse) Reset() { *m = QueryPositionsResponse{} func (m *QueryPositionsResponse) String() string { return proto.CompactTextString(m) } func (*QueryPositionsResponse) ProtoMessage() {} func (*QueryPositionsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{92} + return fileDescriptor_108a0f108cdd0cc4, []int{96} } func (m *QueryPositionsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4993,7 +5228,7 @@ func (m *QueryTradeRewardPointsRequest) Reset() { *m = QueryTradeRewardP func (m *QueryTradeRewardPointsRequest) String() string { return proto.CompactTextString(m) } func (*QueryTradeRewardPointsRequest) ProtoMessage() {} func (*QueryTradeRewardPointsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{93} + return fileDescriptor_108a0f108cdd0cc4, []int{97} } func (m *QueryTradeRewardPointsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5046,7 +5281,7 @@ func (m *QueryTradeRewardPointsResponse) Reset() { *m = QueryTradeReward func (m *QueryTradeRewardPointsResponse) String() string { return proto.CompactTextString(m) } func (*QueryTradeRewardPointsResponse) ProtoMessage() {} func (*QueryTradeRewardPointsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{94} + return fileDescriptor_108a0f108cdd0cc4, []int{98} } func (m *QueryTradeRewardPointsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5084,7 +5319,7 @@ func (m *QueryTradeRewardCampaignRequest) Reset() { *m = QueryTradeRewar func (m *QueryTradeRewardCampaignRequest) String() string { return proto.CompactTextString(m) } func (*QueryTradeRewardCampaignRequest) ProtoMessage() {} func (*QueryTradeRewardCampaignRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{95} + return fileDescriptor_108a0f108cdd0cc4, []int{99} } func (m *QueryTradeRewardCampaignRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5127,7 +5362,7 @@ func (m *QueryTradeRewardCampaignResponse) Reset() { *m = QueryTradeRewa func (m *QueryTradeRewardCampaignResponse) String() string { return proto.CompactTextString(m) } func (*QueryTradeRewardCampaignResponse) ProtoMessage() {} func (*QueryTradeRewardCampaignResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{96} + return fileDescriptor_108a0f108cdd0cc4, []int{100} } func (m *QueryTradeRewardCampaignResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5187,7 +5422,7 @@ func (m *QueryIsOptedOutOfRewardsRequest) Reset() { *m = QueryIsOptedOut func (m *QueryIsOptedOutOfRewardsRequest) String() string { return proto.CompactTextString(m) } func (*QueryIsOptedOutOfRewardsRequest) ProtoMessage() {} func (*QueryIsOptedOutOfRewardsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{97} + return fileDescriptor_108a0f108cdd0cc4, []int{101} } func (m *QueryIsOptedOutOfRewardsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5233,7 +5468,7 @@ func (m *QueryIsOptedOutOfRewardsResponse) Reset() { *m = QueryIsOptedOu func (m *QueryIsOptedOutOfRewardsResponse) String() string { return proto.CompactTextString(m) } func (*QueryIsOptedOutOfRewardsResponse) ProtoMessage() {} func (*QueryIsOptedOutOfRewardsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{98} + return fileDescriptor_108a0f108cdd0cc4, []int{102} } func (m *QueryIsOptedOutOfRewardsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5278,7 +5513,7 @@ func (m *QueryOptedOutOfRewardsAccountsRequest) Reset() { *m = QueryOpte func (m *QueryOptedOutOfRewardsAccountsRequest) String() string { return proto.CompactTextString(m) } func (*QueryOptedOutOfRewardsAccountsRequest) ProtoMessage() {} func (*QueryOptedOutOfRewardsAccountsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{99} + return fileDescriptor_108a0f108cdd0cc4, []int{103} } func (m *QueryOptedOutOfRewardsAccountsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5319,7 +5554,7 @@ func (m *QueryOptedOutOfRewardsAccountsResponse) Reset() { func (m *QueryOptedOutOfRewardsAccountsResponse) String() string { return proto.CompactTextString(m) } func (*QueryOptedOutOfRewardsAccountsResponse) ProtoMessage() {} func (*QueryOptedOutOfRewardsAccountsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{100} + return fileDescriptor_108a0f108cdd0cc4, []int{104} } func (m *QueryOptedOutOfRewardsAccountsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5365,7 +5600,7 @@ func (m *QueryFeeDiscountAccountInfoRequest) Reset() { *m = QueryFeeDisc func (m *QueryFeeDiscountAccountInfoRequest) String() string { return proto.CompactTextString(m) } func (*QueryFeeDiscountAccountInfoRequest) ProtoMessage() {} func (*QueryFeeDiscountAccountInfoRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{101} + return fileDescriptor_108a0f108cdd0cc4, []int{105} } func (m *QueryFeeDiscountAccountInfoRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5413,7 +5648,7 @@ func (m *QueryFeeDiscountAccountInfoResponse) Reset() { *m = QueryFeeDis func (m *QueryFeeDiscountAccountInfoResponse) String() string { return proto.CompactTextString(m) } func (*QueryFeeDiscountAccountInfoResponse) ProtoMessage() {} func (*QueryFeeDiscountAccountInfoResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{102} + return fileDescriptor_108a0f108cdd0cc4, []int{106} } func (m *QueryFeeDiscountAccountInfoResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5472,7 +5707,7 @@ func (m *QueryFeeDiscountScheduleRequest) Reset() { *m = QueryFeeDiscoun func (m *QueryFeeDiscountScheduleRequest) String() string { return proto.CompactTextString(m) } func (*QueryFeeDiscountScheduleRequest) ProtoMessage() {} func (*QueryFeeDiscountScheduleRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{103} + return fileDescriptor_108a0f108cdd0cc4, []int{107} } func (m *QueryFeeDiscountScheduleRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5511,7 +5746,7 @@ func (m *QueryFeeDiscountScheduleResponse) Reset() { *m = QueryFeeDiscou func (m *QueryFeeDiscountScheduleResponse) String() string { return proto.CompactTextString(m) } func (*QueryFeeDiscountScheduleResponse) ProtoMessage() {} func (*QueryFeeDiscountScheduleResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{104} + return fileDescriptor_108a0f108cdd0cc4, []int{108} } func (m *QueryFeeDiscountScheduleResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5557,7 +5792,7 @@ func (m *QueryBalanceMismatchesRequest) Reset() { *m = QueryBalanceMisma func (m *QueryBalanceMismatchesRequest) String() string { return proto.CompactTextString(m) } func (*QueryBalanceMismatchesRequest) ProtoMessage() {} func (*QueryBalanceMismatchesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{105} + return fileDescriptor_108a0f108cdd0cc4, []int{109} } func (m *QueryBalanceMismatchesRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5614,7 +5849,7 @@ func (m *BalanceMismatch) Reset() { *m = BalanceMismatch{} } func (m *BalanceMismatch) String() string { return proto.CompactTextString(m) } func (*BalanceMismatch) ProtoMessage() {} func (*BalanceMismatch) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{106} + return fileDescriptor_108a0f108cdd0cc4, []int{110} } func (m *BalanceMismatch) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5667,7 +5902,7 @@ func (m *QueryBalanceMismatchesResponse) Reset() { *m = QueryBalanceMism func (m *QueryBalanceMismatchesResponse) String() string { return proto.CompactTextString(m) } func (*QueryBalanceMismatchesResponse) ProtoMessage() {} func (*QueryBalanceMismatchesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{107} + return fileDescriptor_108a0f108cdd0cc4, []int{111} } func (m *QueryBalanceMismatchesResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5712,7 +5947,7 @@ func (m *QueryBalanceWithBalanceHoldsRequest) Reset() { *m = QueryBalanc func (m *QueryBalanceWithBalanceHoldsRequest) String() string { return proto.CompactTextString(m) } func (*QueryBalanceWithBalanceHoldsRequest) ProtoMessage() {} func (*QueryBalanceWithBalanceHoldsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{108} + return fileDescriptor_108a0f108cdd0cc4, []int{112} } func (m *QueryBalanceWithBalanceHoldsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5758,7 +5993,7 @@ func (m *BalanceWithMarginHold) Reset() { *m = BalanceWithMarginHold{} } func (m *BalanceWithMarginHold) String() string { return proto.CompactTextString(m) } func (*BalanceWithMarginHold) ProtoMessage() {} func (*BalanceWithMarginHold) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{109} + return fileDescriptor_108a0f108cdd0cc4, []int{113} } func (m *BalanceWithMarginHold) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5811,7 +6046,7 @@ func (m *QueryBalanceWithBalanceHoldsResponse) Reset() { *m = QueryBalan func (m *QueryBalanceWithBalanceHoldsResponse) String() string { return proto.CompactTextString(m) } func (*QueryBalanceWithBalanceHoldsResponse) ProtoMessage() {} func (*QueryBalanceWithBalanceHoldsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{110} + return fileDescriptor_108a0f108cdd0cc4, []int{114} } func (m *QueryBalanceWithBalanceHoldsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5856,7 +6091,7 @@ func (m *QueryFeeDiscountTierStatisticsRequest) Reset() { *m = QueryFeeD func (m *QueryFeeDiscountTierStatisticsRequest) String() string { return proto.CompactTextString(m) } func (*QueryFeeDiscountTierStatisticsRequest) ProtoMessage() {} func (*QueryFeeDiscountTierStatisticsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{111} + return fileDescriptor_108a0f108cdd0cc4, []int{115} } func (m *QueryFeeDiscountTierStatisticsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5894,7 +6129,7 @@ func (m *TierStatistic) Reset() { *m = TierStatistic{} } func (m *TierStatistic) String() string { return proto.CompactTextString(m) } func (*TierStatistic) ProtoMessage() {} func (*TierStatistic) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{112} + return fileDescriptor_108a0f108cdd0cc4, []int{116} } func (m *TierStatistic) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5949,7 +6184,7 @@ func (m *QueryFeeDiscountTierStatisticsResponse) Reset() { func (m *QueryFeeDiscountTierStatisticsResponse) String() string { return proto.CompactTextString(m) } func (*QueryFeeDiscountTierStatisticsResponse) ProtoMessage() {} func (*QueryFeeDiscountTierStatisticsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{113} + return fileDescriptor_108a0f108cdd0cc4, []int{117} } func (m *QueryFeeDiscountTierStatisticsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5994,7 +6229,7 @@ func (m *MitoVaultInfosRequest) Reset() { *m = MitoVaultInfosRequest{} } func (m *MitoVaultInfosRequest) String() string { return proto.CompactTextString(m) } func (*MitoVaultInfosRequest) ProtoMessage() {} func (*MitoVaultInfosRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{114} + return fileDescriptor_108a0f108cdd0cc4, []int{118} } func (m *MitoVaultInfosRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6040,7 +6275,7 @@ func (m *MitoVaultInfosResponse) Reset() { *m = MitoVaultInfosResponse{} func (m *MitoVaultInfosResponse) String() string { return proto.CompactTextString(m) } func (*MitoVaultInfosResponse) ProtoMessage() {} func (*MitoVaultInfosResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{115} + return fileDescriptor_108a0f108cdd0cc4, []int{119} } func (m *MitoVaultInfosResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6107,7 +6342,7 @@ func (m *QueryMarketIDFromVaultRequest) Reset() { *m = QueryMarketIDFrom func (m *QueryMarketIDFromVaultRequest) String() string { return proto.CompactTextString(m) } func (*QueryMarketIDFromVaultRequest) ProtoMessage() {} func (*QueryMarketIDFromVaultRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{116} + return fileDescriptor_108a0f108cdd0cc4, []int{120} } func (m *QueryMarketIDFromVaultRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6153,7 +6388,7 @@ func (m *QueryMarketIDFromVaultResponse) Reset() { *m = QueryMarketIDFro func (m *QueryMarketIDFromVaultResponse) String() string { return proto.CompactTextString(m) } func (*QueryMarketIDFromVaultResponse) ProtoMessage() {} func (*QueryMarketIDFromVaultResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{117} + return fileDescriptor_108a0f108cdd0cc4, []int{121} } func (m *QueryMarketIDFromVaultResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6197,7 +6432,7 @@ func (m *QueryHistoricalTradeRecordsRequest) Reset() { *m = QueryHistori func (m *QueryHistoricalTradeRecordsRequest) String() string { return proto.CompactTextString(m) } func (*QueryHistoricalTradeRecordsRequest) ProtoMessage() {} func (*QueryHistoricalTradeRecordsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{118} + return fileDescriptor_108a0f108cdd0cc4, []int{122} } func (m *QueryHistoricalTradeRecordsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6241,7 +6476,7 @@ func (m *QueryHistoricalTradeRecordsResponse) Reset() { *m = QueryHistor func (m *QueryHistoricalTradeRecordsResponse) String() string { return proto.CompactTextString(m) } func (*QueryHistoricalTradeRecordsResponse) ProtoMessage() {} func (*QueryHistoricalTradeRecordsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{119} + return fileDescriptor_108a0f108cdd0cc4, []int{123} } func (m *QueryHistoricalTradeRecordsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6298,7 +6533,7 @@ func (m *TradeHistoryOptions) Reset() { *m = TradeHistoryOptions{} } func (m *TradeHistoryOptions) String() string { return proto.CompactTextString(m) } func (*TradeHistoryOptions) ProtoMessage() {} func (*TradeHistoryOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{120} + return fileDescriptor_108a0f108cdd0cc4, []int{124} } func (m *TradeHistoryOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6368,7 +6603,7 @@ func (m *QueryMarketVolatilityRequest) Reset() { *m = QueryMarketVolatil func (m *QueryMarketVolatilityRequest) String() string { return proto.CompactTextString(m) } func (*QueryMarketVolatilityRequest) ProtoMessage() {} func (*QueryMarketVolatilityRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{121} + return fileDescriptor_108a0f108cdd0cc4, []int{125} } func (m *QueryMarketVolatilityRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6423,7 +6658,7 @@ func (m *QueryMarketVolatilityResponse) Reset() { *m = QueryMarketVolati func (m *QueryMarketVolatilityResponse) String() string { return proto.CompactTextString(m) } func (*QueryMarketVolatilityResponse) ProtoMessage() {} func (*QueryMarketVolatilityResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{122} + return fileDescriptor_108a0f108cdd0cc4, []int{126} } func (m *QueryMarketVolatilityResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6477,7 +6712,7 @@ func (m *QueryBinaryMarketsRequest) Reset() { *m = QueryBinaryMarketsReq func (m *QueryBinaryMarketsRequest) String() string { return proto.CompactTextString(m) } func (*QueryBinaryMarketsRequest) ProtoMessage() {} func (*QueryBinaryMarketsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{123} + return fileDescriptor_108a0f108cdd0cc4, []int{127} } func (m *QueryBinaryMarketsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6523,7 +6758,7 @@ func (m *QueryBinaryMarketsResponse) Reset() { *m = QueryBinaryMarketsRe func (m *QueryBinaryMarketsResponse) String() string { return proto.CompactTextString(m) } func (*QueryBinaryMarketsResponse) ProtoMessage() {} func (*QueryBinaryMarketsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{124} + return fileDescriptor_108a0f108cdd0cc4, []int{128} } func (m *QueryBinaryMarketsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6576,7 +6811,7 @@ func (m *QueryTraderDerivativeConditionalOrdersRequest) String() string { } func (*QueryTraderDerivativeConditionalOrdersRequest) ProtoMessage() {} func (*QueryTraderDerivativeConditionalOrdersRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{125} + return fileDescriptor_108a0f108cdd0cc4, []int{129} } func (m *QueryTraderDerivativeConditionalOrdersRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6642,7 +6877,7 @@ func (m *TrimmedDerivativeConditionalOrder) Reset() { *m = TrimmedDeriva func (m *TrimmedDerivativeConditionalOrder) String() string { return proto.CompactTextString(m) } func (*TrimmedDerivativeConditionalOrder) ProtoMessage() {} func (*TrimmedDerivativeConditionalOrder) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{126} + return fileDescriptor_108a0f108cdd0cc4, []int{130} } func (m *TrimmedDerivativeConditionalOrder) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6713,7 +6948,7 @@ func (m *QueryTraderDerivativeConditionalOrdersResponse) String() string { } func (*QueryTraderDerivativeConditionalOrdersResponse) ProtoMessage() {} func (*QueryTraderDerivativeConditionalOrdersResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{127} + return fileDescriptor_108a0f108cdd0cc4, []int{131} } func (m *QueryTraderDerivativeConditionalOrdersResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6758,7 +6993,7 @@ func (m *QueryFullSpotOrderbookRequest) Reset() { *m = QueryFullSpotOrde func (m *QueryFullSpotOrderbookRequest) String() string { return proto.CompactTextString(m) } func (*QueryFullSpotOrderbookRequest) ProtoMessage() {} func (*QueryFullSpotOrderbookRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{128} + return fileDescriptor_108a0f108cdd0cc4, []int{132} } func (m *QueryFullSpotOrderbookRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6805,7 +7040,7 @@ func (m *QueryFullSpotOrderbookResponse) Reset() { *m = QueryFullSpotOrd func (m *QueryFullSpotOrderbookResponse) String() string { return proto.CompactTextString(m) } func (*QueryFullSpotOrderbookResponse) ProtoMessage() {} func (*QueryFullSpotOrderbookResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{129} + return fileDescriptor_108a0f108cdd0cc4, []int{133} } func (m *QueryFullSpotOrderbookResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6864,7 +7099,7 @@ func (m *QueryFullDerivativeOrderbookRequest) Reset() { *m = QueryFullDe func (m *QueryFullDerivativeOrderbookRequest) String() string { return proto.CompactTextString(m) } func (*QueryFullDerivativeOrderbookRequest) ProtoMessage() {} func (*QueryFullDerivativeOrderbookRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{130} + return fileDescriptor_108a0f108cdd0cc4, []int{134} } func (m *QueryFullDerivativeOrderbookRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6911,7 +7146,7 @@ func (m *QueryFullDerivativeOrderbookResponse) Reset() { *m = QueryFullD func (m *QueryFullDerivativeOrderbookResponse) String() string { return proto.CompactTextString(m) } func (*QueryFullDerivativeOrderbookResponse) ProtoMessage() {} func (*QueryFullDerivativeOrderbookResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{131} + return fileDescriptor_108a0f108cdd0cc4, []int{135} } func (m *QueryFullDerivativeOrderbookResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6976,7 +7211,7 @@ func (m *TrimmedLimitOrder) Reset() { *m = TrimmedLimitOrder{} } func (m *TrimmedLimitOrder) String() string { return proto.CompactTextString(m) } func (*TrimmedLimitOrder) ProtoMessage() {} func (*TrimmedLimitOrder) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{132} + return fileDescriptor_108a0f108cdd0cc4, []int{136} } func (m *TrimmedLimitOrder) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7031,7 +7266,7 @@ func (m *QueryMarketAtomicExecutionFeeMultiplierRequest) String() string { } func (*QueryMarketAtomicExecutionFeeMultiplierRequest) ProtoMessage() {} func (*QueryMarketAtomicExecutionFeeMultiplierRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{133} + return fileDescriptor_108a0f108cdd0cc4, []int{137} } func (m *QueryMarketAtomicExecutionFeeMultiplierRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7079,7 +7314,7 @@ func (m *QueryMarketAtomicExecutionFeeMultiplierResponse) String() string { } func (*QueryMarketAtomicExecutionFeeMultiplierResponse) ProtoMessage() {} func (*QueryMarketAtomicExecutionFeeMultiplierResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{134} + return fileDescriptor_108a0f108cdd0cc4, []int{138} } func (m *QueryMarketAtomicExecutionFeeMultiplierResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7116,7 +7351,7 @@ func (m *QueryActiveStakeGrantRequest) Reset() { *m = QueryActiveStakeGr func (m *QueryActiveStakeGrantRequest) String() string { return proto.CompactTextString(m) } func (*QueryActiveStakeGrantRequest) ProtoMessage() {} func (*QueryActiveStakeGrantRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{135} + return fileDescriptor_108a0f108cdd0cc4, []int{139} } func (m *QueryActiveStakeGrantRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7161,7 +7396,7 @@ func (m *QueryActiveStakeGrantResponse) Reset() { *m = QueryActiveStakeG func (m *QueryActiveStakeGrantResponse) String() string { return proto.CompactTextString(m) } func (*QueryActiveStakeGrantResponse) ProtoMessage() {} func (*QueryActiveStakeGrantResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{136} + return fileDescriptor_108a0f108cdd0cc4, []int{140} } func (m *QueryActiveStakeGrantResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7213,7 +7448,7 @@ func (m *QueryGrantAuthorizationRequest) Reset() { *m = QueryGrantAuthor func (m *QueryGrantAuthorizationRequest) String() string { return proto.CompactTextString(m) } func (*QueryGrantAuthorizationRequest) ProtoMessage() {} func (*QueryGrantAuthorizationRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{137} + return fileDescriptor_108a0f108cdd0cc4, []int{141} } func (m *QueryGrantAuthorizationRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7264,7 +7499,7 @@ func (m *QueryGrantAuthorizationResponse) Reset() { *m = QueryGrantAutho func (m *QueryGrantAuthorizationResponse) String() string { return proto.CompactTextString(m) } func (*QueryGrantAuthorizationResponse) ProtoMessage() {} func (*QueryGrantAuthorizationResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{138} + return fileDescriptor_108a0f108cdd0cc4, []int{142} } func (m *QueryGrantAuthorizationResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7301,7 +7536,7 @@ func (m *QueryGrantAuthorizationsRequest) Reset() { *m = QueryGrantAutho func (m *QueryGrantAuthorizationsRequest) String() string { return proto.CompactTextString(m) } func (*QueryGrantAuthorizationsRequest) ProtoMessage() {} func (*QueryGrantAuthorizationsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{139} + return fileDescriptor_108a0f108cdd0cc4, []int{143} } func (m *QueryGrantAuthorizationsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7346,7 +7581,7 @@ func (m *QueryGrantAuthorizationsResponse) Reset() { *m = QueryGrantAuth func (m *QueryGrantAuthorizationsResponse) String() string { return proto.CompactTextString(m) } func (*QueryGrantAuthorizationsResponse) ProtoMessage() {} func (*QueryGrantAuthorizationsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{140} + return fileDescriptor_108a0f108cdd0cc4, []int{144} } func (m *QueryGrantAuthorizationsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7391,7 +7626,7 @@ func (m *QueryMarketBalanceRequest) Reset() { *m = QueryMarketBalanceReq func (m *QueryMarketBalanceRequest) String() string { return proto.CompactTextString(m) } func (*QueryMarketBalanceRequest) ProtoMessage() {} func (*QueryMarketBalanceRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{141} + return fileDescriptor_108a0f108cdd0cc4, []int{145} } func (m *QueryMarketBalanceRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7435,7 +7670,7 @@ func (m *QueryMarketBalanceResponse) Reset() { *m = QueryMarketBalanceRe func (m *QueryMarketBalanceResponse) String() string { return proto.CompactTextString(m) } func (*QueryMarketBalanceResponse) ProtoMessage() {} func (*QueryMarketBalanceResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{142} + return fileDescriptor_108a0f108cdd0cc4, []int{146} } func (m *QueryMarketBalanceResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7478,7 +7713,7 @@ func (m *QueryMarketBalancesRequest) Reset() { *m = QueryMarketBalancesR func (m *QueryMarketBalancesRequest) String() string { return proto.CompactTextString(m) } func (*QueryMarketBalancesRequest) ProtoMessage() {} func (*QueryMarketBalancesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{143} + return fileDescriptor_108a0f108cdd0cc4, []int{147} } func (m *QueryMarketBalancesRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7515,7 +7750,7 @@ func (m *QueryMarketBalancesResponse) Reset() { *m = QueryMarketBalances func (m *QueryMarketBalancesResponse) String() string { return proto.CompactTextString(m) } func (*QueryMarketBalancesResponse) ProtoMessage() {} func (*QueryMarketBalancesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{144} + return fileDescriptor_108a0f108cdd0cc4, []int{148} } func (m *QueryMarketBalancesResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7562,7 +7797,7 @@ func (m *MarketBalance) Reset() { *m = MarketBalance{} } func (m *MarketBalance) String() string { return proto.CompactTextString(m) } func (*MarketBalance) ProtoMessage() {} func (*MarketBalance) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{145} + return fileDescriptor_108a0f108cdd0cc4, []int{149} } func (m *MarketBalance) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7606,7 +7841,7 @@ func (m *QueryDenomMinNotionalRequest) Reset() { *m = QueryDenomMinNotio func (m *QueryDenomMinNotionalRequest) String() string { return proto.CompactTextString(m) } func (*QueryDenomMinNotionalRequest) ProtoMessage() {} func (*QueryDenomMinNotionalRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{146} + return fileDescriptor_108a0f108cdd0cc4, []int{150} } func (m *QueryDenomMinNotionalRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7651,7 +7886,7 @@ func (m *QueryDenomMinNotionalResponse) Reset() { *m = QueryDenomMinNoti func (m *QueryDenomMinNotionalResponse) String() string { return proto.CompactTextString(m) } func (*QueryDenomMinNotionalResponse) ProtoMessage() {} func (*QueryDenomMinNotionalResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{147} + return fileDescriptor_108a0f108cdd0cc4, []int{151} } func (m *QueryDenomMinNotionalResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7687,7 +7922,7 @@ func (m *QueryDenomMinNotionalsRequest) Reset() { *m = QueryDenomMinNoti func (m *QueryDenomMinNotionalsRequest) String() string { return proto.CompactTextString(m) } func (*QueryDenomMinNotionalsRequest) ProtoMessage() {} func (*QueryDenomMinNotionalsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{148} + return fileDescriptor_108a0f108cdd0cc4, []int{152} } func (m *QueryDenomMinNotionalsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7724,7 +7959,7 @@ func (m *QueryDenomMinNotionalsResponse) Reset() { *m = QueryDenomMinNot func (m *QueryDenomMinNotionalsResponse) String() string { return proto.CompactTextString(m) } func (*QueryDenomMinNotionalsResponse) ProtoMessage() {} func (*QueryDenomMinNotionalsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{149} + return fileDescriptor_108a0f108cdd0cc4, []int{153} } func (m *QueryDenomMinNotionalsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7771,7 +8006,7 @@ func (m *OpenInterest) Reset() { *m = OpenInterest{} } func (m *OpenInterest) String() string { return proto.CompactTextString(m) } func (*OpenInterest) ProtoMessage() {} func (*OpenInterest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{150} + return fileDescriptor_108a0f108cdd0cc4, []int{154} } func (m *OpenInterest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7816,7 +8051,7 @@ func (m *QueryOpenInterestRequest) Reset() { *m = QueryOpenInterestReque func (m *QueryOpenInterestRequest) String() string { return proto.CompactTextString(m) } func (*QueryOpenInterestRequest) ProtoMessage() {} func (*QueryOpenInterestRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{151} + return fileDescriptor_108a0f108cdd0cc4, []int{155} } func (m *QueryOpenInterestRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7860,7 +8095,7 @@ func (m *QueryOpenInterestResponse) Reset() { *m = QueryOpenInterestResp func (m *QueryOpenInterestResponse) String() string { return proto.CompactTextString(m) } func (*QueryOpenInterestResponse) ProtoMessage() {} func (*QueryOpenInterestResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_108a0f108cdd0cc4, []int{152} + return fileDescriptor_108a0f108cdd0cc4, []int{156} } func (m *QueryOpenInterestResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7942,6 +8177,10 @@ func init() { proto.RegisterType((*TrimmedSpotLimitOrder)(nil), "injective.exchange.v2.TrimmedSpotLimitOrder") proto.RegisterType((*QueryTraderSpotOrdersResponse)(nil), "injective.exchange.v2.QueryTraderSpotOrdersResponse") proto.RegisterType((*QueryAccountAddressSpotOrdersResponse)(nil), "injective.exchange.v2.QueryAccountAddressSpotOrdersResponse") + proto.RegisterType((*QuerySpotSwapOutputRequest)(nil), "injective.exchange.v2.QuerySpotSwapOutputRequest") + proto.RegisterType((*QuerySpotSwapOutputResponse)(nil), "injective.exchange.v2.QuerySpotSwapOutputResponse") + proto.RegisterType((*QuerySpotSwapInputRequest)(nil), "injective.exchange.v2.QuerySpotSwapInputRequest") + proto.RegisterType((*QuerySpotSwapInputResponse)(nil), "injective.exchange.v2.QuerySpotSwapInputResponse") proto.RegisterType((*QuerySpotMidPriceAndTOBRequest)(nil), "injective.exchange.v2.QuerySpotMidPriceAndTOBRequest") proto.RegisterType((*QuerySpotMidPriceAndTOBResponse)(nil), "injective.exchange.v2.QuerySpotMidPriceAndTOBResponse") proto.RegisterType((*QueryDerivativeMidPriceAndTOBRequest)(nil), "injective.exchange.v2.QueryDerivativeMidPriceAndTOBRequest") @@ -8058,447 +8297,459 @@ func init() { func init() { proto.RegisterFile("injective/exchange/v2/query.proto", fileDescriptor_108a0f108cdd0cc4) } var fileDescriptor_108a0f108cdd0cc4 = []byte{ - // 7029 bytes of a gzipped FileDescriptorProto + // 7226 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x7d, 0x6b, 0x6c, 0x1d, 0xc7, - 0x75, 0xb0, 0x96, 0xa4, 0x28, 0xf2, 0x50, 0x7c, 0x0d, 0x29, 0x8a, 0xa2, 0x6d, 0x3d, 0x56, 0x96, - 0x2d, 0x3f, 0x44, 0x4a, 0x94, 0x64, 0x49, 0x96, 0xfc, 0x20, 0x45, 0x51, 0x8f, 0x50, 0x16, 0x7d, - 0x45, 0xdb, 0x89, 0x3f, 0x27, 0x9b, 0xe5, 0xbd, 0x4b, 0x72, 0xcd, 0xbd, 0xbb, 0x57, 0xbb, 0x7b, - 0x69, 0x33, 0x82, 0x7f, 0x7c, 0xf9, 0xbe, 0x2f, 0x08, 0x12, 0xe0, 0xeb, 0xeb, 0x47, 0x7e, 0x04, - 0x48, 0x81, 0x24, 0x68, 0xd1, 0x07, 0x5a, 0x20, 0x75, 0x93, 0xa2, 0x49, 0xd1, 0xf4, 0x91, 0x34, - 0x40, 0x81, 0x36, 0x81, 0xdb, 0x26, 0x28, 0x10, 0x37, 0x4d, 0x8a, 0x16, 0x0d, 0xd0, 0xa6, 0xff, - 0x0b, 0xb4, 0xc5, 0xce, 0x9c, 0x99, 0xbb, 0xaf, 0x99, 0xdd, 0xa5, 0x64, 0x38, 0x69, 0x7f, 0xf1, - 0xee, 0xee, 0x9c, 0x33, 0xe7, 0xcc, 0x9c, 0x39, 0x73, 0xe6, 0xcc, 0x39, 0x87, 0x70, 0xc4, 0x76, - 0x5f, 0xb7, 0xea, 0xa1, 0xbd, 0x65, 0xcd, 0x58, 0x6f, 0xd6, 0x37, 0x4c, 0x77, 0xdd, 0x9a, 0xd9, - 0x9a, 0x9d, 0xb9, 0xd3, 0xb6, 0xfc, 0xed, 0xe9, 0x96, 0xef, 0x85, 0x1e, 0xd9, 0x27, 0x9a, 0x4c, - 0xf3, 0x26, 0xd3, 0x5b, 0xb3, 0x53, 0xe3, 0xeb, 0xde, 0xba, 0x47, 0x5b, 0xcc, 0x44, 0xbf, 0x58, - 0xe3, 0xa9, 0x07, 0xd7, 0x3d, 0x6f, 0xdd, 0xb1, 0x66, 0xcc, 0x96, 0x3d, 0x63, 0xba, 0xae, 0x17, - 0x9a, 0xa1, 0xed, 0xb9, 0x01, 0x7e, 0x7d, 0x38, 0xbf, 0x37, 0x81, 0x96, 0xb5, 0x3a, 0x96, 0xdf, - 0xca, 0xf3, 0x1b, 0x96, 0xbf, 0xea, 0x79, 0x9b, 0xd8, 0x4c, 0xcf, 0x6f, 0xd6, 0x34, 0xfd, 0x4d, - 0x2b, 0xc4, 0x36, 0x47, 0xf3, 0xdb, 0xac, 0x5b, 0xae, 0x15, 0xd8, 0x41, 0xb6, 0x3f, 0xcf, 0x37, - 0xeb, 0x8e, 0x35, 0xb3, 0x75, 0x6a, 0xd5, 0x0a, 0xcd, 0x53, 0xf8, 0xc8, 0x9a, 0xe9, 0xb7, 0x00, - 0x6e, 0xb7, 0x57, 0xcd, 0x7a, 0xdd, 0x6b, 0xbb, 0x21, 0x99, 0x80, 0xde, 0xd0, 0x37, 0x1b, 0x96, - 0x3f, 0xa9, 0x1d, 0xd6, 0x8e, 0xf7, 0xd7, 0xf0, 0x89, 0x3c, 0x06, 0x23, 0x81, 0x68, 0x65, 0xb8, - 0x9e, 0x5b, 0xb7, 0x26, 0xbb, 0x0e, 0x6b, 0xc7, 0x07, 0x6b, 0xc3, 0x9d, 0xf7, 0x2f, 0x44, 0xaf, - 0xf5, 0x8f, 0xc2, 0x83, 0x2f, 0x46, 0xe3, 0xdc, 0xc1, 0x7a, 0x2b, 0x62, 0x31, 0xa8, 0x59, 0x77, - 0xda, 0x56, 0x10, 0x92, 0xa3, 0x30, 0x18, 0x43, 0x65, 0x37, 0xb0, 0xa7, 0xbd, 0x9d, 0x97, 0xd7, - 0x1b, 0xe4, 0x01, 0xe8, 0x67, 0x1c, 0x47, 0x0d, 0xba, 0x68, 0x83, 0x3e, 0xf6, 0xe2, 0x7a, 0x43, - 0xff, 0x8a, 0x06, 0x0f, 0x49, 0xba, 0x08, 0x5a, 0x9e, 0x1b, 0x58, 0xe4, 0x3a, 0xc0, 0x6a, 0x7b, - 0xdb, 0xa0, 0x63, 0x1b, 0x4c, 0x6a, 0x87, 0xbb, 0x8f, 0x0f, 0xcc, 0x3e, 0x3e, 0x9d, 0x3b, 0xe3, - 0xd3, 0x29, 0x24, 0x0b, 0x66, 0x68, 0xd6, 0xfa, 0x57, 0xdb, 0xdb, 0x0c, 0x25, 0xf9, 0x00, 0x0c, - 0x04, 0x96, 0xe3, 0x70, 0x5c, 0x5d, 0x95, 0x71, 0x41, 0x04, 0xce, 0x90, 0xe9, 0xbf, 0xae, 0xc1, - 0xb1, 0x54, 0x9b, 0x68, 0xea, 0x6f, 0x5a, 0xa1, 0xd9, 0x30, 0x43, 0xf3, 0x15, 0x3b, 0xdc, 0xb8, - 0x49, 0xb9, 0x24, 0x2f, 0x40, 0x5f, 0x13, 0xdf, 0xd2, 0x01, 0x1a, 0x98, 0x9d, 0x2d, 0xd7, 0x67, - 0x1c, 0x5f, 0x4d, 0xe0, 0x50, 0x0e, 0x28, 0x19, 0x87, 0xdd, 0x76, 0x30, 0xdf, 0xde, 0x9e, 0xec, - 0x3e, 0xac, 0x1d, 0xef, 0xab, 0xb1, 0x07, 0xfd, 0x41, 0x98, 0xa2, 0xa3, 0x7c, 0x05, 0x3b, 0x5b, - 0x36, 0x7d, 0xb3, 0xc9, 0xa7, 0x51, 0x7f, 0x15, 0x1e, 0xc8, 0xfd, 0x8a, 0x33, 0x70, 0x11, 0x7a, - 0x5b, 0xf4, 0x0d, 0x52, 0xff, 0x90, 0x84, 0x7a, 0x06, 0x36, 0xdf, 0xf3, 0xad, 0x77, 0x0f, 0xed, - 0xaa, 0x21, 0x88, 0xfe, 0xff, 0x35, 0x38, 0x98, 0x9a, 0xe0, 0x05, 0xab, 0xe5, 0x05, 0x76, 0x58, - 0x4d, 0x8a, 0xae, 0x02, 0x74, 0x9e, 0x29, 0xd7, 0x03, 0xb3, 0x47, 0x0a, 0x87, 0x91, 0x12, 0xa3, - 0xd5, 0x62, 0xa0, 0xfa, 0x0f, 0x34, 0x38, 0x24, 0x25, 0x08, 0x39, 0xfe, 0x28, 0xf4, 0x35, 0xf0, - 0x1d, 0x4a, 0xdc, 0x82, 0xa4, 0xab, 0x02, 0x4c, 0xd3, 0xfc, 0xc5, 0x15, 0x37, 0xf4, 0xb7, 0x6b, - 0x02, 0xeb, 0xd4, 0xff, 0x82, 0xc1, 0xc4, 0x27, 0x32, 0x02, 0xdd, 0x9b, 0xd6, 0x36, 0xb2, 0x1e, - 0xfd, 0x24, 0x67, 0x60, 0xf7, 0x96, 0xe9, 0xb4, 0x2d, 0x64, 0xf6, 0xa0, 0x84, 0x02, 0x44, 0x53, - 0x63, 0x8d, 0x9f, 0xee, 0x3a, 0xaf, 0xe9, 0x07, 0x71, 0xd9, 0xf2, 0xf9, 0x9c, 0x37, 0x1d, 0xd3, - 0xad, 0x5b, 0x62, 0xbe, 0x4d, 0x5c, 0x73, 0xd9, 0xef, 0xc8, 0xff, 0xf3, 0xd0, 0xb7, 0x8a, 0xef, - 0x90, 0x7f, 0x59, 0xef, 0x08, 0x8a, 0x93, 0x2e, 0xa0, 0xf4, 0x73, 0x28, 0x52, 0x73, 0xeb, 0xeb, - 0xbe, 0xb5, 0x6e, 0x86, 0xd6, 0xcb, 0x9e, 0xd3, 0x6e, 0x5a, 0x7c, 0xca, 0x27, 0x61, 0x0f, 0x9f, - 0x4a, 0xc6, 0x31, 0x7f, 0xd4, 0x5b, 0x48, 0x7b, 0x06, 0x10, 0x49, 0x5b, 0x86, 0x51, 0x93, 0x7f, - 0x32, 0xb6, 0xe8, 0x37, 0x4e, 0xe3, 0x51, 0x09, 0x8d, 0x6c, 0x19, 0x22, 0x9e, 0x11, 0x33, 0x89, - 0x38, 0xd0, 0x3f, 0x94, 0xdf, 0xa3, 0x10, 0xcf, 0x29, 0xe8, 0x43, 0xe2, 0x58, 0x47, 0xfd, 0x35, - 0xf1, 0x4c, 0x1e, 0x02, 0x10, 0x4b, 0x91, 0x29, 0x94, 0xfe, 0x5a, 0x3f, 0x5f, 0x8b, 0x81, 0xfe, - 0x13, 0xae, 0xdd, 0xb2, 0xb8, 0x91, 0x1d, 0x0f, 0x0e, 0x74, 0xd8, 0xe1, 0x4b, 0x20, 0xc9, 0xd6, - 0x69, 0x09, 0x5b, 0x02, 0xe7, 0x1c, 0x03, 0xe3, 0x03, 0x55, 0xf7, 0xfc, 0x46, 0x6d, 0xbf, 0x99, - 0xfb, 0x35, 0x20, 0x1f, 0x86, 0xc9, 0x4e, 0x87, 0x48, 0x3b, 0xef, 0xaf, 0xab, 0xfc, 0x30, 0x4e, - 0x08, 0x24, 0xf1, 0xd7, 0x81, 0xfe, 0x3c, 0x1c, 0x49, 0x32, 0x9c, 0x80, 0xc2, 0x11, 0x4d, 0x28, - 0x30, 0x2d, 0xb5, 0x23, 0xac, 0x83, 0xae, 0xc2, 0x80, 0xe3, 0x36, 0x07, 0xbd, 0x8c, 0x6a, 0xd4, - 0x49, 0x32, 0xa2, 0xe3, 0x83, 0xc2, 0x35, 0x13, 0x03, 0xd4, 0xaf, 0xc2, 0x0c, 0xeb, 0xa8, 0x5d, - 0x8f, 0x2c, 0x00, 0xbe, 0x18, 0x56, 0x7c, 0xd3, 0x0d, 0xd6, 0x2c, 0x7f, 0xc1, 0x72, 0xbd, 0xe6, - 0x82, 0x55, 0xb7, 0x9b, 0xa6, 0xc3, 0x09, 0x1f, 0x87, 0xdd, 0x8d, 0xe8, 0x35, 0x12, 0xcd, 0x1e, - 0xf4, 0x25, 0x38, 0x59, 0x1e, 0x11, 0xd2, 0x3f, 0x09, 0x7b, 0x1a, 0xec, 0x15, 0xc5, 0xd5, 0x53, - 0xe3, 0x8f, 0xfa, 0x8d, 0xf2, 0xd8, 0x84, 0x88, 0x4e, 0x40, 0x2f, 0x25, 0x85, 0x0b, 0x28, 0x3e, - 0xe9, 0x9f, 0xd0, 0xe0, 0x54, 0x05, 0x64, 0x48, 0xdb, 0x8b, 0x30, 0x44, 0xe1, 0x0d, 0x24, 0x89, - 0x0b, 0xe2, 0xc3, 0x52, 0x0d, 0x14, 0xc3, 0x82, 0x83, 0x3c, 0xd8, 0x88, 0xbf, 0xd4, 0x2f, 0xab, - 0x26, 0x55, 0xb0, 0x91, 0x5c, 0x4d, 0x5a, 0x7a, 0x35, 0x35, 0xe0, 0xa8, 0x12, 0x09, 0x92, 0xff, - 0x0c, 0xec, 0xd9, 0x81, 0x5e, 0xe0, 0x30, 0xfa, 0xab, 0x19, 0x83, 0x84, 0x6b, 0xd8, 0x2a, 0xdb, - 0x95, 0x90, 0x94, 0xae, 0xb8, 0xa4, 0xbc, 0x26, 0xdb, 0x0b, 0x05, 0xf1, 0x4f, 0x27, 0x76, 0x9e, - 0x32, 0x7a, 0x5f, 0xb4, 0xd7, 0x97, 0x61, 0x3f, 0xc3, 0xde, 0xf2, 0x42, 0xc6, 0x5b, 0x5c, 0x40, - 0x82, 0xd0, 0x0c, 0xdb, 0x01, 0xb7, 0x05, 0xd9, 0x53, 0x91, 0xfe, 0x7a, 0x05, 0x26, 0xb3, 0x18, - 0x85, 0x55, 0xb0, 0x87, 0x35, 0xe4, 0xc3, 0x2c, 0xdd, 0x8d, 0x05, 0x70, 0x8d, 0x43, 0xe8, 0x67, - 0x61, 0x22, 0x85, 0xb8, 0x94, 0x6e, 0x58, 0xc9, 0x70, 0x28, 0xc8, 0xb9, 0x00, 0xbd, 0xac, 0x19, - 0x0e, 0x5b, 0x09, 0x6a, 0x10, 0x40, 0xff, 0x4e, 0x17, 0x1c, 0x10, 0x68, 0x85, 0xe1, 0x55, 0x86, - 0xa0, 0x68, 0x9a, 0x1d, 0xbb, 0x69, 0x33, 0x83, 0xa4, 0xa7, 0xc6, 0x1e, 0xc8, 0x73, 0x00, 0xd4, - 0xc4, 0x34, 0x02, 0xbb, 0x61, 0x51, 0x43, 0x6c, 0x68, 0xf6, 0xb0, 0x84, 0x1e, 0xda, 0xdf, 0x6d, - 0xbb, 0x61, 0xd5, 0xfa, 0x3d, 0xfe, 0x93, 0x18, 0x70, 0x80, 0x62, 0x32, 0xea, 0xed, 0x66, 0xdb, - 0x31, 0x23, 0x20, 0xc3, 0xf5, 0xa2, 0x15, 0x6c, 0x3a, 0x93, 0x3d, 0x11, 0x0d, 0xf3, 0x47, 0x23, - 0xc3, 0xe6, 0x6f, 0xdf, 0x3d, 0xf4, 0x40, 0xdd, 0x0b, 0x9a, 0x5e, 0x10, 0x34, 0x36, 0xa7, 0x6d, - 0x6f, 0xa6, 0x69, 0x86, 0x1b, 0xd3, 0x4b, 0xd6, 0xba, 0x59, 0xdf, 0x5e, 0xb0, 0xea, 0xb5, 0xfd, - 0x14, 0xcb, 0x65, 0x81, 0xe4, 0x05, 0xc4, 0x91, 0xdb, 0xc1, 0x9d, 0xb6, 0xe9, 0x86, 0x76, 0xb8, - 0x3d, 0xb9, 0x7b, 0xe7, 0x1d, 0xbc, 0x88, 0x38, 0xf4, 0xaf, 0x6b, 0x68, 0x71, 0xa6, 0xc6, 0x14, - 0x67, 0x6b, 0x11, 0x46, 0x56, 0xdb, 0xdb, 0x81, 0xd1, 0xf2, 0xed, 0xba, 0x65, 0x38, 0xd6, 0x96, - 0xe5, 0xa0, 0x14, 0x3d, 0x28, 0x19, 0xa7, 0xa5, 0xa8, 0x4d, 0x6d, 0x28, 0x82, 0x5a, 0x8e, 0x80, - 0xe8, 0x33, 0xb9, 0x06, 0xa3, 0x91, 0x49, 0x9e, 0x44, 0xd4, 0x55, 0x02, 0xd1, 0x30, 0x05, 0x8b, - 0x61, 0x1a, 0x81, 0xee, 0xc0, 0xba, 0x43, 0x27, 0xab, 0xa7, 0x16, 0xfd, 0xd4, 0xbf, 0xa0, 0xc1, - 0xd0, 0x62, 0xdb, 0x71, 0x3a, 0x12, 0x73, 0x0f, 0x42, 0x46, 0x5e, 0x86, 0xd1, 0xa6, 0xdd, 0x40, - 0x3a, 0x4d, 0xb7, 0x61, 0x84, 0xde, 0x2a, 0x5a, 0x76, 0xc7, 0x64, 0xfa, 0xc9, 0x6e, 0x50, 0x02, - 0xe7, 0xdc, 0xc6, 0xca, 0xad, 0x79, 0x34, 0x65, 0x87, 0x9a, 0xb1, 0xb7, 0xde, 0xaa, 0xfe, 0x49, - 0x0d, 0x2d, 0xad, 0x24, 0xa9, 0xf7, 0xb8, 0xf2, 0xc9, 0x2c, 0x4c, 0xbc, 0x61, 0x87, 0x1b, 0x46, - 0x96, 0x66, 0x76, 0xae, 0x20, 0xd1, 0xd7, 0x9b, 0x49, 0x52, 0x0c, 0x34, 0xa4, 0x32, 0x94, 0xe0, - 0xa4, 0x3f, 0x97, 0xd6, 0x18, 0x32, 0xc6, 0x93, 0x08, 0x3a, 0x5a, 0xa3, 0x89, 0x32, 0x95, 0xfa, - 0x5e, 0x66, 0xa1, 0xca, 0xf9, 0xe9, 0x92, 0xf2, 0xf3, 0x5a, 0xee, 0xc8, 0xc6, 0xf6, 0x99, 0xa4, - 0x30, 0x94, 0xe4, 0x86, 0x6b, 0x9d, 0xff, 0x27, 0x0e, 0x46, 0x7c, 0x85, 0x04, 0xf3, 0xdb, 0xd7, - 0xcc, 0x60, 0xa3, 0xb3, 0x1f, 0x2a, 0x39, 0xca, 0x6c, 0x43, 0x5d, 0x39, 0xdb, 0xd0, 0x11, 0xd8, - 0xcb, 0x34, 0xd1, 0x06, 0x45, 0x3c, 0xd9, 0x4d, 0xe7, 0x79, 0x80, 0xbe, 0x63, 0x7d, 0xe9, 0xeb, - 0xfc, 0x38, 0x94, 0x43, 0x06, 0x72, 0xba, 0x00, 0xbd, 0x89, 0xe3, 0xf7, 0x93, 0x12, 0x4e, 0x57, - 0x7c, 0xbb, 0xd9, 0xb4, 0x1a, 0x11, 0xa6, 0xa5, 0x48, 0x2f, 0x50, 0x74, 0x35, 0x84, 0x15, 0xce, - 0x84, 0x15, 0xea, 0x86, 0xe8, 0x74, 0x77, 0xdf, 0xb8, 0xd5, 0x1d, 0x78, 0x98, 0x19, 0x08, 0xec, - 0xcd, 0x5c, 0xa3, 0xe1, 0x5b, 0x41, 0x50, 0xb1, 0xa7, 0x47, 0x61, 0x98, 0x77, 0x63, 0x32, 0x04, - 0xd8, 0xd7, 0x90, 0x99, 0x40, 0xab, 0x7f, 0xb6, 0x0b, 0xf6, 0xe5, 0x72, 0x4c, 0x2e, 0xc0, 0x6e, - 0x2a, 0x63, 0x0c, 0x37, 0xd5, 0xa4, 0xbb, 0x8a, 0x34, 0x29, 0x83, 0x20, 0xcf, 0x41, 0x9f, 0xd0, - 0xc3, 0x5d, 0xe5, 0xa1, 0x05, 0x50, 0x84, 0x60, 0xcd, 0x76, 0x1c, 0x73, 0xd5, 0x61, 0x3b, 0x4f, - 0x59, 0x04, 0x1c, 0xa8, 0xe3, 0x40, 0xe8, 0x89, 0x39, 0x10, 0x22, 0x75, 0xd1, 0x11, 0x24, 0xb6, - 0x43, 0xe0, 0x86, 0x15, 0xc9, 0x4a, 0xa4, 0x3d, 0xeb, 0x76, 0x63, 0xb2, 0x97, 0x9d, 0x5e, 0xeb, - 0x76, 0x43, 0xb7, 0xd0, 0x8c, 0xca, 0xce, 0xf6, 0x7d, 0x15, 0xaa, 0x26, 0x1c, 0x2b, 0x98, 0xf2, - 0xfb, 0xda, 0xdd, 0x33, 0xb1, 0x35, 0x9b, 0x54, 0xcf, 0xa5, 0xec, 0x97, 0x7f, 0xd7, 0x62, 0x8b, - 0x2d, 0x0d, 0x2f, 0xce, 0xde, 0xfd, 0x42, 0x49, 0xc5, 0x04, 0xa8, 0x70, 0x2b, 0xee, 0xe3, 0x1b, - 0x03, 0xb9, 0x0e, 0x43, 0xab, 0x56, 0x10, 0x1a, 0xab, 0xed, 0x6d, 0x44, 0xd3, 0x55, 0x1e, 0xcd, - 0xde, 0x08, 0x74, 0xbe, 0xbd, 0xcd, 0x50, 0x7d, 0x00, 0x86, 0x29, 0x2a, 0xea, 0x36, 0x63, 0xb8, - 0xba, 0xcb, 0xe3, 0x1a, 0x8c, 0x60, 0x6f, 0x5b, 0x8e, 0x43, 0x91, 0xe9, 0x97, 0x71, 0x79, 0x2e, - 0x58, 0xbe, 0xbd, 0x45, 0xcd, 0x85, 0x1d, 0x0c, 0xe1, 0xff, 0xee, 0xc2, 0x19, 0x97, 0x63, 0xf9, - 0x6f, 0x3f, 0x90, 0xbf, 0xcb, 0xc5, 0xa8, 0x33, 0x06, 0xf7, 0xc3, 0x6c, 0x55, 0x5a, 0x9d, 0xdd, - 0xf7, 0x6e, 0x75, 0xea, 0xdf, 0xd4, 0xe0, 0xb0, 0x9c, 0xee, 0x9f, 0x21, 0xd3, 0xf0, 0x33, 0xdd, - 0x30, 0x9d, 0xab, 0xdd, 0x56, 0xbc, 0xcb, 0xa6, 0x5b, 0xb7, 0x9c, 0x97, 0x5a, 0x2b, 0xde, 0x5c, - 0x33, 0xd2, 0x48, 0xf7, 0x6f, 0x2f, 0x5f, 0x80, 0x81, 0x55, 0x33, 0xb0, 0x0c, 0x93, 0xe2, 0xad, - 0xa2, 0xdc, 0x21, 0x82, 0x63, 0xe4, 0x90, 0x45, 0xd8, 0x7b, 0xa7, 0xed, 0x85, 0x02, 0x4d, 0x4f, - 0x79, 0x34, 0x03, 0x14, 0x10, 0xf1, 0x5c, 0x85, 0xbe, 0x20, 0xf4, 0xcd, 0xd0, 0x5a, 0x67, 0x07, - 0x86, 0xa1, 0xd9, 0x27, 0x24, 0xa3, 0xca, 0x46, 0xc4, 0xa1, 0xd7, 0x2c, 0xb7, 0x11, 0xa4, 0x26, - 0x80, 0xc9, 0x12, 0x0c, 0xfb, 0xd6, 0x9a, 0xe5, 0x5b, 0x6e, 0xdd, 0xc2, 0x95, 0xd1, 0x5b, 0x5e, - 0xd6, 0x86, 0x04, 0x2c, 0x5b, 0x1a, 0xdf, 0xed, 0x82, 0x33, 0xb1, 0x99, 0x49, 0x09, 0xda, 0x7b, - 0x3a, 0x3f, 0xe9, 0x91, 0xed, 0xbe, 0x0f, 0x23, 0xdb, 0x73, 0x9f, 0x47, 0x76, 0xf7, 0xce, 0x47, - 0x76, 0x0d, 0x5d, 0x38, 0xf9, 0x03, 0x7b, 0xff, 0x8c, 0x38, 0x1f, 0x1e, 0xcf, 0xd9, 0xd1, 0x77, - 0xd4, 0x5f, 0x69, 0x53, 0xee, 0x9f, 0xbb, 0xe0, 0x01, 0xdc, 0xf8, 0x3b, 0x1d, 0xfd, 0x94, 0x18, - 0x74, 0x17, 0xe9, 0x31, 0x63, 0xdd, 0x76, 0xab, 0x08, 0x14, 0x82, 0x24, 0xac, 0xc1, 0x9e, 0x9d, - 0x58, 0x83, 0x87, 0xb8, 0x35, 0x18, 0x49, 0x4e, 0xdf, 0x7c, 0xff, 0x8f, 0xdf, 0x3d, 0xc4, 0x5e, - 0xe4, 0x1b, 0x86, 0xbd, 0x12, 0xc3, 0x70, 0x4f, 0xc7, 0x30, 0xbc, 0x83, 0x5e, 0x3c, 0x99, 0x1c, - 0xe1, 0x36, 0x70, 0x23, 0x65, 0xaf, 0xcd, 0xaa, 0xed, 0xb5, 0xbc, 0x69, 0x13, 0x56, 0xdb, 0x36, - 0x3c, 0x51, 0x4a, 0xa4, 0xde, 0x83, 0xae, 0x3f, 0xad, 0x65, 0x8c, 0x9e, 0xf7, 0xf1, 0xac, 0x17, - 0x64, 0x6c, 0x27, 0xc9, 0x89, 0xef, 0x7e, 0x0e, 0xc1, 0xa7, 0xf8, 0x25, 0x48, 0xcc, 0x62, 0x7b, - 0xdf, 0x7c, 0x14, 0x9f, 0xd4, 0x00, 0x62, 0x5b, 0xfb, 0xfb, 0xb8, 0xb0, 0x23, 0x2b, 0x6e, 0x7c, - 0xd9, 0xf2, 0x5b, 0x56, 0xd8, 0x36, 0x1d, 0x36, 0x22, 0xb7, 0x43, 0x33, 0x8c, 0x6c, 0xc5, 0x01, - 0xce, 0xb6, 0xbb, 0xe6, 0xa1, 0x77, 0x41, 0x76, 0x4d, 0x9d, 0xc2, 0x70, 0xdd, 0x5d, 0xf3, 0x6a, - 0x38, 0x6a, 0xd1, 0x6f, 0xb2, 0x0c, 0x7b, 0xd7, 0xda, 0x6e, 0xc3, 0x76, 0xd7, 0x19, 0x36, 0xe6, - 0x72, 0x3a, 0x51, 0x0e, 0xdb, 0x22, 0x83, 0xac, 0x0d, 0x20, 0x8a, 0x08, 0xa3, 0xfe, 0x2b, 0xdd, - 0x30, 0xbe, 0xd8, 0x76, 0x9c, 0xf4, 0x74, 0x92, 0xe7, 0x52, 0x0e, 0x91, 0x47, 0xa5, 0x9e, 0xeb, - 0x24, 0xa0, 0xf0, 0x91, 0xad, 0xc0, 0x50, 0x8b, 0x13, 0x10, 0xa7, 0xf6, 0x89, 0x72, 0xd4, 0xd2, - 0xd1, 0xbb, 0xb6, 0xab, 0x36, 0x28, 0x90, 0xd0, 0x11, 0xb8, 0x1d, 0x8d, 0x40, 0xd8, 0xf6, 0xad, - 0x80, 0xe1, 0xec, 0xa6, 0x38, 0xa7, 0x25, 0x38, 0xaf, 0xbc, 0xd9, 0xb2, 0xfd, 0xed, 0x45, 0x06, - 0xd0, 0x19, 0xd3, 0x6b, 0xbb, 0xa2, 0x41, 0xa0, 0x2f, 0x29, 0xd2, 0x79, 0x26, 0x9a, 0xb8, 0xad, - 0x56, 0x50, 0xad, 0x54, 0x7e, 0xd9, 0x99, 0x20, 0xd7, 0x25, 0xb8, 0xfb, 0x9e, 0x5d, 0x82, 0xf3, - 0xbd, 0xd0, 0x13, 0x31, 0xaa, 0xaf, 0xe3, 0x61, 0x35, 0x67, 0xdd, 0xe1, 0x32, 0xbf, 0x92, 0xf6, - 0xc8, 0x3d, 0xa1, 0xf0, 0x61, 0x65, 0xa6, 0x4d, 0xf8, 0xe5, 0x2e, 0xa2, 0x67, 0x27, 0xd3, 0xa2, - 0xcc, 0x81, 0xae, 0x21, 0xd1, 0x0e, 0x82, 0xc8, 0xcb, 0x29, 0xb1, 0xaa, 0x44, 0x23, 0xf7, 0xb6, - 0xcd, 0xe3, 0xae, 0x93, 0x6e, 0x80, 0x7b, 0x41, 0x29, 0x4a, 0xad, 0xec, 0xf9, 0x35, 0x89, 0xa3, - 0x73, 0xb7, 0xc7, 0xcd, 0x0d, 0x7e, 0xb9, 0xcd, 0x1e, 0xcb, 0x19, 0x40, 0x57, 0xf1, 0x90, 0xd4, - 0xb9, 0x24, 0xa2, 0x5b, 0x25, 0x8d, 0xc8, 0xa9, 0x72, 0x07, 0xa5, 0x5f, 0xc2, 0x91, 0x5d, 0xf6, - 0x02, 0x9b, 0xc6, 0x38, 0x5d, 0x77, 0x2b, 0xcc, 0x0b, 0x97, 0x9e, 0x1c, 0x68, 0x21, 0x3d, 0xbb, - 0x23, 0x45, 0x6d, 0xa1, 0xec, 0x3c, 0x56, 0xb8, 0xdc, 0x39, 0x2a, 0x94, 0x5b, 0x06, 0xad, 0x2f, - 0x66, 0xe2, 0x31, 0x44, 0x97, 0x95, 0xd8, 0x7d, 0x1d, 0x1e, 0x91, 0xe0, 0x49, 0xf3, 0x7d, 0xef, - 0x61, 0x4b, 0x01, 0xde, 0x1d, 0x77, 0xfa, 0xba, 0xb2, 0xb6, 0xc6, 0x78, 0x7f, 0xef, 0x3a, 0xbd, - 0x81, 0x32, 0x9c, 0x8a, 0x12, 0x12, 0x11, 0x42, 0x55, 0x06, 0xcb, 0xce, 0x08, 0x59, 0x6c, 0xd0, - 0xef, 0xcb, 0xfc, 0xee, 0xe2, 0xf3, 0xfb, 0x45, 0x0d, 0x1e, 0x2d, 0x9c, 0x18, 0x71, 0xa9, 0x28, - 0xba, 0x8c, 0x96, 0xfa, 0x21, 0x99, 0xe2, 0xcf, 0x13, 0x24, 0x72, 0x09, 0xfa, 0x7d, 0x3b, 0xd8, - 0x34, 0x9a, 0x5e, 0x83, 0x79, 0x6a, 0x86, 0xa4, 0x08, 0x6a, 0x76, 0xb0, 0x79, 0xd3, 0x6b, 0x58, - 0xb5, 0x3e, 0x1f, 0x7f, 0xe9, 0xff, 0xa7, 0x0b, 0x46, 0x33, 0x93, 0x48, 0xf6, 0xc3, 0x1e, 0x3b, - 0x30, 0x1c, 0xcf, 0x5d, 0xa7, 0x24, 0xf5, 0xd5, 0x7a, 0xed, 0x60, 0xc9, 0x73, 0xd7, 0xef, 0xdd, - 0xae, 0x5f, 0x80, 0x01, 0xcb, 0x0d, 0xfd, 0xed, 0x8c, 0x37, 0xa8, 0xf8, 0x38, 0x4f, 0xe1, 0xd8, - 0x1e, 0xf2, 0x02, 0x8c, 0x58, 0x9c, 0x68, 0x03, 0xcf, 0x09, 0x15, 0x76, 0xa3, 0x61, 0x01, 0x7c, - 0x93, 0xc2, 0xea, 0x5f, 0xd6, 0x30, 0xfc, 0xa0, 0x94, 0x64, 0x0b, 0xdf, 0x6a, 0x62, 0xd6, 0x8e, - 0xcb, 0xb6, 0xd6, 0x34, 0xa2, 0xfb, 0x39, 0x7d, 0xcf, 0xa2, 0x16, 0xc9, 0xb3, 0x87, 0xca, 0xa8, - 0xbb, 0x0d, 0x5c, 0x10, 0xb9, 0xf0, 0x82, 0xcf, 0x9e, 0x9d, 0x59, 0x64, 0xb8, 0x20, 0xd8, 0xb6, - 0xcc, 0xb7, 0x22, 0x89, 0xa5, 0x51, 0x8a, 0xda, 0x16, 0x6e, 0x45, 0x52, 0x1c, 0x48, 0xf1, 0xb5, - 0x04, 0xc5, 0x15, 0x6d, 0x9e, 0x04, 0xd5, 0x73, 0x78, 0xfc, 0x97, 0x58, 0x88, 0xe5, 0x88, 0x3e, - 0xaa, 0x44, 0x21, 0x02, 0x3e, 0x13, 0xd2, 0x54, 0xcd, 0x54, 0x4d, 0xaa, 0x9e, 0x4f, 0xf0, 0xd3, - 0x97, 0x54, 0x65, 0x62, 0x9f, 0x1f, 0x49, 0x84, 0x68, 0x46, 0xda, 0xee, 0x52, 0xf5, 0x10, 0xcd, - 0x4e, 0xc8, 0x27, 0x0f, 0x87, 0xe3, 0x38, 0xf5, 0x0b, 0x18, 0x16, 0x95, 0xbf, 0xa7, 0x23, 0x11, - 0xe3, 0xb0, 0x9b, 0x45, 0xe3, 0x6a, 0x34, 0x1a, 0x97, 0x3d, 0xe8, 0xd7, 0x32, 0xa0, 0x91, 0xf4, - 0x2f, 0xfb, 0xde, 0x9a, 0xed, 0x54, 0xb3, 0x07, 0x3e, 0xad, 0xe1, 0x1c, 0x4a, 0x50, 0x09, 0x07, - 0xec, 0x9e, 0x16, 0x7b, 0x85, 0x33, 0xf0, 0x64, 0xe1, 0x50, 0xc4, 0xd1, 0x70, 0xe0, 0xe8, 0xf4, - 0x66, 0x07, 0x46, 0xc3, 0x5a, 0x33, 0xdb, 0x4e, 0x88, 0xd7, 0xac, 0xfd, 0x76, 0xb0, 0xc0, 0x5e, - 0xe8, 0x9b, 0x28, 0x0d, 0x97, 0x7d, 0x2f, 0x08, 0x98, 0xf6, 0x59, 0xf6, 0x3c, 0xe7, 0xb6, 0x6b, - 0xb6, 0x82, 0x0d, 0xaf, 0xda, 0xb6, 0x79, 0x08, 0x98, 0x07, 0xcd, 0x88, 0xc7, 0xdc, 0x00, 0x7d, - 0x45, 0x83, 0x93, 0xf4, 0x2f, 0x0f, 0xa2, 0x20, 0x48, 0x7b, 0x43, 0xe6, 0x53, 0x98, 0xb4, 0x34, - 0x26, 0x72, 0x0d, 0x06, 0x59, 0x03, 0x0c, 0x75, 0xac, 0xa2, 0xfc, 0x99, 0x7f, 0x10, 0x43, 0x26, - 0xc9, 0x2b, 0xb0, 0xaf, 0x85, 0x8a, 0x10, 0x35, 0xb7, 0x11, 0x7a, 0x61, 0xc2, 0xd5, 0x5e, 0x88, - 0x71, 0x8c, 0x63, 0x60, 0x2c, 0xad, 0x44, 0xf0, 0xe4, 0x06, 0x0c, 0xb5, 0x5d, 0xdf, 0x32, 0x1d, - 0xfb, 0x63, 0x56, 0xc3, 0x68, 0xb9, 0x4e, 0x95, 0x1d, 0x61, 0xb0, 0x03, 0xba, 0xec, 0x3a, 0xe4, - 0xc3, 0x30, 0x99, 0xc4, 0x65, 0x88, 0x1d, 0x23, 0xe6, 0x4c, 0x2c, 0xc4, 0x3a, 0x91, 0xc0, 0x2a, - 0x36, 0x02, 0xba, 0x7d, 0xdd, 0x69, 0xdb, 0xe1, 0xb6, 0x61, 0x36, 0x9a, 0x76, 0x10, 0xd8, 0x9e, - 0x1b, 0xf3, 0xfe, 0x96, 0xd8, 0xbe, 0x28, 0xf0, 0x1c, 0x87, 0x25, 0x35, 0x20, 0x88, 0xcf, 0xb1, - 0xef, 0xb4, 0xed, 0x06, 0x75, 0x8d, 0x32, 0xef, 0x53, 0x39, 0x8c, 0xa3, 0x0c, 0x7c, 0xa9, 0x03, - 0x4d, 0x5e, 0x82, 0x71, 0xdb, 0xb5, 0x43, 0xdb, 0x74, 0x92, 0xd3, 0xd4, 0x57, 0x1e, 0x2b, 0x41, - 0x04, 0xf1, 0x59, 0xfa, 0x30, 0x4c, 0x36, 0x4d, 0xdb, 0x0d, 0x2d, 0x37, 0x92, 0x86, 0x24, 0xea, - 0xfe, 0x0a, 0x23, 0x1b, 0x43, 0x12, 0x47, 0xbf, 0x09, 0x87, 0x53, 0x54, 0x53, 0x5f, 0x09, 0xf3, - 0xc9, 0x60, 0x37, 0x50, 0xbe, 0x9b, 0x07, 0x13, 0x1c, 0x44, 0x9a, 0x8e, 0x3b, 0xd4, 0xa3, 0xce, - 0x6e, 0xc2, 0x08, 0xb3, 0x65, 0x1c, 0x2f, 0xe0, 0xc8, 0x07, 0xca, 0x23, 0x1f, 0xa2, 0xc0, 0x4b, - 0x5e, 0x80, 0xe8, 0x6e, 0xc1, 0xe8, 0x9a, 0x65, 0x19, 0xbe, 0x15, 0x58, 0xfe, 0x96, 0x85, 0xf8, - 0xf6, 0x56, 0x10, 0x8b, 0x35, 0x2b, 0x52, 0x67, 0x11, 0x30, 0x43, 0xf8, 0x21, 0x98, 0x60, 0xae, - 0x31, 0xc7, 0xab, 0x6f, 0x1a, 0x7e, 0x34, 0xc7, 0xbe, 0xd5, 0xb4, 0xdc, 0x70, 0x72, 0xb0, 0x3c, - 0xd6, 0x71, 0x8a, 0x62, 0xc9, 0xab, 0xd3, 0x3b, 0x36, 0x44, 0x40, 0x3e, 0x0a, 0x53, 0x6c, 0x0d, - 0x6e, 0x59, 0x46, 0x3b, 0x5a, 0x1f, 0x1b, 0xa6, 0xed, 0xd7, 0xdb, 0xa1, 0xe1, 0x47, 0x5b, 0xd8, - 0x50, 0x79, 0xf4, 0xfb, 0x39, 0x9a, 0x97, 0x5a, 0xae, 0x73, 0x8d, 0x21, 0xa9, 0x45, 0x76, 0xd1, - 0x35, 0x18, 0xdc, 0xb0, 0x4c, 0x27, 0xdc, 0x30, 0xd6, 0xcc, 0x7a, 0xe8, 0xf9, 0x93, 0xc3, 0x15, - 0x2e, 0x21, 0x19, 0xe4, 0x22, 0x05, 0x24, 0x2d, 0xd0, 0x7d, 0x33, 0xac, 0x6f, 0x58, 0xa1, 0xd5, - 0x30, 0xa4, 0xc2, 0x37, 0x5a, 0x9e, 0xe6, 0x43, 0x02, 0xdd, 0xcd, 0x7c, 0x29, 0x7c, 0x15, 0xf6, - 0xd7, 0x23, 0x8d, 0xcb, 0x7b, 0x68, 0x87, 0xb6, 0x13, 0x8d, 0x8c, 0xed, 0x4d, 0x92, 0x0a, 0x23, - 0x5f, 0xef, 0x68, 0xed, 0x97, 0x42, 0xdb, 0xa9, 0x45, 0x08, 0xc8, 0xeb, 0x70, 0x48, 0xe8, 0x4f, - 0xc9, 0xec, 0x8e, 0x55, 0x10, 0x70, 0x8e, 0xeb, 0x56, 0xde, 0x2c, 0xdf, 0x81, 0xa3, 0xae, 0xe7, - 0x1a, 0x45, 0xfd, 0x8d, 0x57, 0x18, 0x3a, 0xd7, 0x73, 0x97, 0x15, 0x5d, 0xde, 0xe8, 0xe9, 0x1b, - 0x19, 0x19, 0xd5, 0x0f, 0x60, 0xc4, 0xe3, 0x4d, 0xaf, 0xd1, 0x76, 0x2c, 0xea, 0xe1, 0xe2, 0x51, - 0xfc, 0x2f, 0x61, 0x70, 0x66, 0xe2, 0x93, 0x88, 0x86, 0x4c, 0xd8, 0x50, 0xb2, 0x08, 0xd8, 0xab, - 0x2c, 0xcb, 0x88, 0xc1, 0xa2, 0xcd, 0xb4, 0x1f, 0xf6, 0x25, 0xcf, 0xfd, 0xbc, 0x3f, 0x03, 0x63, - 0x36, 0xdf, 0xb3, 0x83, 0xe2, 0x9d, 0x78, 0xc8, 0x48, 0xcd, 0x7a, 0xc3, 0xf4, 0x1b, 0xcb, 0x9e, - 0xed, 0x86, 0xa5, 0x22, 0xf1, 0xcf, 0xc0, 0x44, 0xcb, 0x62, 0x7e, 0xce, 0x96, 0xe7, 0x39, 0x46, - 0x68, 0x37, 0xad, 0x20, 0x34, 0x9b, 0x2d, 0xba, 0x41, 0x77, 0xd7, 0xc6, 0xf1, 0x6b, 0xb4, 0xeb, - 0xaf, 0xf0, 0x6f, 0xfa, 0xff, 0xe5, 0x41, 0x58, 0x39, 0x7d, 0x22, 0x73, 0xab, 0xf0, 0x00, 0xb7, - 0x3e, 0x68, 0x02, 0x95, 0xe1, 0xd3, 0x56, 0x46, 0x8b, 0x36, 0x63, 0x74, 0x94, 0x9b, 0xf2, 0xc9, - 0xb8, 0xe9, 0x17, 0xef, 0x4b, 0x3f, 0x82, 0x87, 0x97, 0xd8, 0x97, 0xcb, 0x66, 0xb3, 0x65, 0xda, - 0xeb, 0x2e, 0x1f, 0xfd, 0x7f, 0xed, 0xc1, 0x03, 0x4a, 0x6e, 0x1b, 0xa4, 0xf5, 0x0e, 0x3c, 0x18, - 0xd1, 0x18, 0x0d, 0x02, 0x52, 0x59, 0xc7, 0x26, 0x71, 0x57, 0xf2, 0x49, 0xa9, 0x33, 0xdf, 0x64, - 0x86, 0x78, 0x1c, 0x37, 0x3d, 0x4e, 0x1c, 0x08, 0x65, 0x9f, 0xc8, 0x5d, 0x38, 0x96, 0xea, 0x92, - 0x0e, 0xbf, 0xe8, 0x37, 0xa8, 0x6f, 0x58, 0x91, 0x7c, 0xe2, 0xd5, 0xfb, 0x63, 0xd2, 0xab, 0x4c, - 0xce, 0x0a, 0x1b, 0x16, 0xcf, 0xa9, 0x1d, 0x49, 0x74, 0x1a, 0xbd, 0xe2, 0x8d, 0x6e, 0x23, 0x4e, - 0xf2, 0x11, 0x38, 0x40, 0x75, 0x56, 0xee, 0xcc, 0x54, 0x30, 0xa3, 0x26, 0x28, 0x96, 0xcc, 0xbc, - 0x90, 0x4f, 0x69, 0x70, 0x82, 0x4b, 0x55, 0x39, 0x2e, 0x7b, 0xaa, 0x72, 0x79, 0x1c, 0xf1, 0xaf, - 0x14, 0x32, 0xdb, 0x84, 0x23, 0x82, 0x16, 0x29, 0xd3, 0xbb, 0xcb, 0x8b, 0xe3, 0x43, 0xbc, 0xe7, - 0x5c, 0xde, 0xf5, 0x8b, 0x28, 0x93, 0xd7, 0x83, 0x5b, 0xad, 0xd0, 0x6a, 0xdc, 0x6a, 0x87, 0xb7, - 0xd6, 0x58, 0x83, 0xa0, 0x38, 0x8b, 0x67, 0x01, 0x85, 0x35, 0x17, 0x18, 0x85, 0xf5, 0x30, 0xec, - 0xb5, 0x03, 0xc3, 0x8b, 0xbe, 0x1b, 0x5e, 0x3b, 0x44, 0xff, 0x0a, 0xd8, 0x02, 0x44, 0x7f, 0x14, - 0xaf, 0xab, 0x32, 0x38, 0xf0, 0x22, 0x4f, 0xa8, 0xa6, 0x05, 0x74, 0xfd, 0x29, 0x1a, 0x62, 0xa7, - 0x0a, 0x15, 0xa2, 0x3f, 0x8b, 0xc7, 0xa3, 0x45, 0xcb, 0x5a, 0xb0, 0x03, 0x76, 0x55, 0x88, 0x47, - 0x8c, 0xd8, 0xb9, 0x5c, 0xce, 0xf4, 0xdf, 0x69, 0x78, 0xa4, 0x91, 0x21, 0x40, 0x1a, 0x1e, 0x02, - 0x08, 0xed, 0x68, 0xfb, 0xc0, 0xd8, 0x16, 0xed, 0x78, 0x4f, 0xad, 0x3f, 0x7a, 0xc3, 0xee, 0xa4, - 0x6e, 0xc2, 0x5e, 0x71, 0xdc, 0xe9, 0xdc, 0x81, 0xc8, 0xbc, 0x0d, 0xb1, 0xbe, 0x56, 0x6c, 0xcb, - 0xa7, 0x1d, 0x0d, 0x98, 0x9d, 0x5e, 0xc9, 0x0d, 0x18, 0x10, 0xfa, 0x2b, 0x74, 0xf0, 0xf6, 0xe3, - 0xb1, 0x72, 0xd8, 0x56, 0x56, 0x96, 0x6a, 0xc0, 0xb5, 0x56, 0xe8, 0x08, 0x3d, 0x15, 0x6b, 0xc6, - 0xc5, 0x93, 0x4f, 0xc5, 0xc7, 0x79, 0x8c, 0x4f, 0x6e, 0x1b, 0x71, 0xdc, 0xde, 0x17, 0x19, 0x78, - 0x0d, 0xfc, 0xde, 0x59, 0x3e, 0x5a, 0x59, 0x5e, 0x05, 0xca, 0xb1, 0xb5, 0xec, 0x4b, 0xfd, 0x79, - 0xdc, 0x49, 0xf0, 0xa8, 0x75, 0xd3, 0x0e, 0x9a, 0xd4, 0x50, 0x11, 0x92, 0x7b, 0x08, 0x06, 0x1a, - 0xed, 0x20, 0xe4, 0x16, 0x95, 0x46, 0xb7, 0x08, 0x88, 0x5e, 0x31, 0x53, 0x49, 0xff, 0x7c, 0x37, - 0x0c, 0xa7, 0xa0, 0x89, 0x0e, 0x89, 0x53, 0x67, 0xf9, 0xbc, 0x0f, 0x32, 0x07, 0xfd, 0xe6, 0x96, - 0x69, 0x57, 0x8e, 0xca, 0xec, 0x40, 0x45, 0x3b, 0x3a, 0x33, 0xcf, 0x2a, 0x9c, 0xe5, 0x18, 0x04, - 0x59, 0x84, 0xbd, 0x78, 0x58, 0x35, 0x36, 0x3c, 0xa7, 0x51, 0xe5, 0xdc, 0x36, 0x80, 0x80, 0xd7, - 0x3c, 0xa7, 0x11, 0x9d, 0x2b, 0xad, 0x37, 0x5b, 0x56, 0x3d, 0x5a, 0xb0, 0x8c, 0x96, 0x0a, 0x47, - 0xb5, 0x41, 0x0e, 0xca, 0x0c, 0xc3, 0xcb, 0x00, 0x0d, 0x7b, 0x0d, 0x03, 0x4c, 0xaa, 0x1c, 0xd0, - 0x62, 0x60, 0xfa, 0x1b, 0xb8, 0x79, 0xe7, 0x4c, 0x33, 0x0a, 0xda, 0x4b, 0x40, 0x38, 0xeb, 0x4d, - 0xf1, 0x15, 0xcd, 0x94, 0x47, 0xd4, 0x29, 0x8d, 0x1c, 0x5b, 0x6d, 0x74, 0x35, 0x8d, 0x5e, 0x3f, - 0x86, 0x0b, 0x1d, 0x9b, 0x46, 0xc7, 0xa1, 0xf9, 0xce, 0x40, 0x09, 0xb5, 0xf4, 0x99, 0x2e, 0xd8, - 0x17, 0x6b, 0xc2, 0x0c, 0x58, 0x3a, 0x94, 0xff, 0xc3, 0x45, 0x49, 0xff, 0x05, 0xee, 0x98, 0x93, - 0x8e, 0x20, 0x4e, 0xa0, 0x0d, 0x53, 0xbc, 0x43, 0x7a, 0x7e, 0x8d, 0xf7, 0x5e, 0x14, 0xca, 0x9b, - 0x3b, 0xf4, 0xb5, 0xfd, 0xab, 0xf9, 0x5d, 0x8a, 0xdd, 0x26, 0xa5, 0x03, 0x23, 0xe3, 0xd8, 0x0e, - 0x42, 0xbb, 0x2e, 0xa6, 0xf5, 0x02, 0x0c, 0x26, 0x3e, 0x10, 0x02, 0x3d, 0x91, 0xfa, 0x46, 0x55, - 0x4e, 0x7f, 0x47, 0xb3, 0xd7, 0x49, 0x55, 0xee, 0xa9, 0xb1, 0x07, 0xdd, 0xc5, 0x8d, 0x4a, 0xd1, - 0x87, 0xf0, 0x35, 0x43, 0x20, 0xde, 0x16, 0x24, 0xe0, 0x25, 0x50, 0xd4, 0x62, 0x70, 0x91, 0x31, - 0x7f, 0xd3, 0x0e, 0xbd, 0x97, 0xcd, 0xb6, 0x43, 0x77, 0x03, 0xc1, 0xc3, 0x9f, 0x6a, 0x30, 0x91, - 0xfe, 0x82, 0x3d, 0x3f, 0x06, 0x23, 0x4d, 0x33, 0x08, 0x2d, 0x9f, 0x07, 0x4d, 0x59, 0x7c, 0xab, - 0x1c, 0x66, 0xef, 0xe7, 0xf8, 0x6b, 0x72, 0x0a, 0xc6, 0x1b, 0xc2, 0xa8, 0x8f, 0x35, 0x67, 0xa1, - 0x1a, 0x63, 0x9d, 0x6f, 0x1d, 0x90, 0x63, 0x30, 0x14, 0xb4, 0xbc, 0x30, 0xd6, 0x98, 0xc5, 0xa9, - 0x0c, 0x46, 0x6f, 0x13, 0xcd, 0xea, 0x6f, 0xcc, 0x9e, 0x8c, 0x35, 0xeb, 0x61, 0xcd, 0xa2, 0xb7, - 0xa2, 0x99, 0xbe, 0x80, 0x8a, 0x1e, 0x9d, 0xd6, 0x0b, 0x8b, 0xbe, 0xd7, 0xa4, 0x2c, 0xc5, 0xdc, - 0x87, 0x5b, 0xd1, 0xb3, 0x91, 0xbc, 0x91, 0xdd, 0x4b, 0x5f, 0xf2, 0xf0, 0x2f, 0x1e, 0xd5, 0x9d, - 0x83, 0x05, 0xc7, 0x44, 0xe9, 0xd7, 0xe6, 0xae, 0xf1, 0x6b, 0x76, 0x10, 0x7a, 0xbe, 0x5d, 0x17, - 0xd6, 0x54, 0xdd, 0x8b, 0x19, 0x4b, 0x4a, 0x14, 0x1e, 0x2a, 0x14, 0x19, 0x0a, 0xe1, 0xce, 0x1f, - 0xe4, 0x46, 0x1f, 0xfd, 0x50, 0x90, 0xe0, 0x98, 0xc0, 0xb1, 0x37, 0x8c, 0x3d, 0xe9, 0x5f, 0xd1, - 0x60, 0x8c, 0x7e, 0x66, 0x3d, 0x46, 0x96, 0x53, 0x74, 0xa4, 0x23, 0x4f, 0x02, 0x61, 0x3d, 0xac, - 0xfb, 0x5e, 0xbb, 0x15, 0xd9, 0x9a, 0x81, 0x55, 0x47, 0xc1, 0x1e, 0xa1, 0x5f, 0xae, 0xe2, 0x87, - 0xdb, 0x56, 0x9d, 0xec, 0x87, 0x3d, 0x4d, 0xf3, 0x4d, 0xc3, 0x5c, 0xb7, 0x50, 0xcc, 0x7b, 0x9b, - 0xe6, 0x9b, 0x73, 0xeb, 0x16, 0x99, 0x86, 0x31, 0xdb, 0xad, 0x3b, 0xed, 0x88, 0x54, 0xf3, 0x0d, - 0x63, 0x83, 0x75, 0x82, 0x29, 0x05, 0xa3, 0xf8, 0xa9, 0x66, 0xbe, 0x81, 0xbd, 0x47, 0x32, 0xc7, - 0xdb, 0x0b, 0x3f, 0x3c, 0x8d, 0x38, 0xab, 0x0d, 0xe3, 0x7b, 0xee, 0x64, 0xd7, 0x3f, 0xab, 0x61, - 0xb4, 0x81, 0x48, 0xdf, 0x34, 0x43, 0xdb, 0xb1, 0xc3, 0xed, 0x52, 0x91, 0x54, 0x1f, 0x81, 0x7d, - 0x8c, 0x3f, 0x24, 0x29, 0xb2, 0x3f, 0x23, 0xc6, 0x0b, 0xac, 0xac, 0x9c, 0xa1, 0xaa, 0x8d, 0x85, - 0xd9, 0x97, 0xfa, 0x7f, 0x68, 0x09, 0x89, 0x8c, 0x53, 0x27, 0xb2, 0xa0, 0x60, 0x4b, 0xbc, 0xc5, - 0xb8, 0xa3, 0x43, 0x85, 0xbb, 0x5e, 0x07, 0x84, 0xbc, 0x02, 0x23, 0x9c, 0x78, 0x31, 0x56, 0x5d, - 0x19, 0x47, 0x3d, 0x16, 0x06, 0xc1, 0x3a, 0x21, 0xd3, 0x7c, 0xf8, 0x62, 0x9a, 0x66, 0x18, 0xb1, - 0xf0, 0x4f, 0xe4, 0x32, 0x0c, 0xc4, 0x27, 0xab, 0x9b, 0xca, 0x96, 0x5e, 0x2c, 0x5b, 0x35, 0xf0, - 0xc5, 0x4c, 0xea, 0xa7, 0x31, 0x97, 0x72, 0xde, 0x76, 0x4d, 0x3e, 0x0a, 0x45, 0x81, 0x5e, 0xfa, - 0x2a, 0x26, 0x76, 0xa5, 0x80, 0x84, 0x2a, 0x4c, 0x45, 0xa9, 0xc8, 0x66, 0x89, 0x81, 0xe3, 0x54, - 0xa4, 0x83, 0x54, 0xee, 0xc0, 0x89, 0xdc, 0xb8, 0xc3, 0xcb, 0x9e, 0xdb, 0xb0, 0x59, 0x80, 0xfa, - 0xfd, 0x2e, 0x6e, 0xf2, 0xb9, 0x6e, 0x38, 0x92, 0x89, 0x90, 0x4b, 0xf7, 0xf7, 0xb3, 0x1b, 0x5c, - 0x7a, 0x15, 0xf6, 0x86, 0xbe, 0xbd, 0xbe, 0x6e, 0xf9, 0xcb, 0x55, 0xa3, 0xa0, 0x12, 0x80, 0xc5, - 0x41, 0xa6, 0xc7, 0x60, 0x8f, 0x1d, 0xd0, 0xd0, 0x42, 0x6a, 0x72, 0xf6, 0xcd, 0x0f, 0xfc, 0xf8, - 0xdd, 0x43, 0xfc, 0x55, 0x8d, 0xff, 0x48, 0xc5, 0xa2, 0xee, 0x91, 0xc4, 0xa2, 0xf6, 0x75, 0x62, - 0x51, 0x3f, 0xae, 0x25, 0xe2, 0xf8, 0x95, 0x42, 0x21, 0xea, 0x4f, 0x24, 0x23, 0x23, 0xcf, 0x97, - 0x8d, 0x8c, 0x4c, 0xa3, 0x14, 0xf1, 0x91, 0x3c, 0x4c, 0x87, 0xe7, 0x09, 0x56, 0x4a, 0xe5, 0xd0, - 0x7f, 0x8b, 0x7b, 0xb0, 0x72, 0xc0, 0x91, 0xe4, 0x4b, 0xd0, 0x33, 0x6f, 0x8b, 0xcd, 0xe2, 0xb8, - 0x9a, 0xe0, 0x58, 0x00, 0x27, 0x85, 0x8a, 0xa0, 0xe7, 0x82, 0x4d, 0x5e, 0x1c, 0xa2, 0x02, 0x74, - 0x04, 0x95, 0x93, 0x3b, 0xc1, 0xaf, 0xbf, 0x93, 0xe1, 0x5a, 0xd5, 0x98, 0x7e, 0x9b, 0x9b, 0x8f, - 0x52, 0x24, 0x3f, 0x95, 0xac, 0xbf, 0xa3, 0xc1, 0x68, 0xa6, 0xf5, 0xfb, 0xba, 0xfe, 0x93, 0x2b, - 0xa6, 0x3b, 0xbd, 0x62, 0x32, 0x2a, 0xb0, 0x27, 0xe7, 0x5a, 0xf9, 0x26, 0xae, 0x21, 0x0c, 0x86, - 0x0b, 0xbd, 0xa6, 0x5d, 0xbf, 0xf2, 0xa6, 0x55, 0x6f, 0x47, 0xc2, 0xbe, 0x68, 0x59, 0x37, 0xdb, - 0x4e, 0x68, 0xb7, 0x1c, 0xdb, 0xf2, 0x4b, 0xcd, 0xed, 0x16, 0x86, 0x56, 0x95, 0x41, 0x27, 0x22, - 0x04, 0xa1, 0x29, 0xde, 0x56, 0x19, 0xc6, 0x18, 0x98, 0x7e, 0x9e, 0x97, 0x81, 0xa1, 0x33, 0x7c, - 0x3b, 0x34, 0x37, 0xad, 0xab, 0xbe, 0xd9, 0x49, 0x10, 0x99, 0x84, 0x3d, 0xeb, 0xd1, 0xb3, 0x65, - 0x71, 0xbf, 0x0f, 0x3e, 0xea, 0xbf, 0x26, 0xaa, 0xbc, 0x64, 0x40, 0x91, 0xc0, 0xf3, 0xb0, 0x9b, - 0x36, 0x46, 0xff, 0x86, 0x6c, 0x4f, 0x65, 0xf0, 0x0c, 0x94, 0x01, 0x90, 0x17, 0xa0, 0x13, 0xa2, - 0x63, 0x30, 0x1c, 0xea, 0xa4, 0x71, 0x71, 0xb7, 0xca, 0xd0, 0x0c, 0x59, 0x89, 0x67, 0x7d, 0x05, - 0xb5, 0x05, 0x7d, 0x9a, 0x6b, 0x87, 0x1b, 0x9e, 0x6f, 0x7f, 0x8c, 0xde, 0x73, 0x66, 0xf8, 0xf4, - 0x93, 0x7c, 0xfa, 0xf1, 0x11, 0xe8, 0x4a, 0x8e, 0xc0, 0x07, 0xd1, 0x2f, 0x94, 0x87, 0x15, 0x87, - 0xe0, 0x2c, 0xf4, 0x62, 0x5e, 0x0c, 0x9b, 0x9f, 0x87, 0x70, 0x7e, 0xf6, 0x65, 0xe7, 0xe7, 0xba, - 0x1b, 0xd6, 0xb0, 0xb1, 0xf0, 0x42, 0x66, 0x31, 0x07, 0x85, 0x04, 0xeb, 0x5f, 0xe2, 0xbe, 0xa8, - 0x5c, 0x68, 0x24, 0xec, 0x03, 0x40, 0x98, 0x3b, 0x95, 0x42, 0x19, 0x55, 0x88, 0x1c, 0xa1, 0x80, - 0x0c, 0x39, 0xcb, 0xdd, 0x99, 0x83, 0x5e, 0x8a, 0x26, 0x28, 0x70, 0x77, 0xe7, 0x0c, 0x14, 0x02, - 0xea, 0xe7, 0xd1, 0x80, 0xc2, 0x48, 0x12, 0x76, 0x42, 0x2d, 0xb5, 0x72, 0x5e, 0x43, 0x2b, 0x2a, - 0x05, 0x89, 0x7c, 0x3e, 0x0b, 0x7b, 0x78, 0xc8, 0x02, 0x93, 0xc2, 0x87, 0x95, 0x65, 0x51, 0x38, - 0x38, 0x07, 0x12, 0x25, 0xc4, 0x12, 0x9f, 0x63, 0x97, 0x43, 0x0f, 0xe4, 0x7e, 0x95, 0x16, 0x94, - 0x2a, 0xd7, 0x7b, 0xa7, 0xa0, 0xd4, 0x26, 0x0c, 0x26, 0x3e, 0xa9, 0xcd, 0xfc, 0x67, 0x3a, 0xcc, - 0x56, 0xd0, 0x8b, 0x82, 0xd7, 0x33, 0x22, 0xa0, 0xd9, 0xf5, 0x9a, 0x37, 0x6d, 0x97, 0x67, 0x30, - 0xaa, 0xeb, 0x00, 0xbd, 0x26, 0x22, 0x99, 0xd3, 0x50, 0x9d, 0x42, 0x6a, 0x09, 0xf1, 0x2a, 0x67, - 0x6d, 0xe1, 0x4a, 0x38, 0x24, 0xc1, 0x2e, 0xa6, 0x60, 0x5b, 0x84, 0x7b, 0x67, 0x1a, 0x60, 0xff, - 0xaf, 0xc0, 0x18, 0x2b, 0xec, 0xd3, 0xb4, 0x5d, 0x91, 0xd9, 0xc9, 0x27, 0xe4, 0x51, 0x55, 0x75, - 0x9f, 0x38, 0x37, 0xa3, 0x8d, 0x74, 0x07, 0xfa, 0xeb, 0xb0, 0xf7, 0x56, 0xcb, 0x72, 0xaf, 0x47, - 0xab, 0xae, 0xf0, 0x08, 0x76, 0x8f, 0x73, 0x73, 0x0e, 0xaf, 0x3d, 0xe3, 0x1d, 0x96, 0x5a, 0x1e, - 0x1f, 0xc4, 0x85, 0x95, 0x04, 0xcc, 0x9d, 0x1a, 0xf9, 0x91, 0x3a, 0x01, 0x8c, 0x20, 0x8f, 0x9f, - 0x81, 0x7e, 0x51, 0xc6, 0x85, 0x8c, 0xc3, 0x48, 0xf4, 0xd7, 0x78, 0xc9, 0x0d, 0x5a, 0x56, 0xdd, - 0x5e, 0xb3, 0xad, 0xc6, 0xc8, 0x2e, 0xb2, 0x07, 0xba, 0xe7, 0xdb, 0xdb, 0x23, 0x1a, 0xe9, 0x83, - 0x9e, 0xdb, 0x96, 0xe3, 0x8c, 0x74, 0x3d, 0xfe, 0x32, 0x8c, 0xe7, 0x25, 0xf0, 0x45, 0x08, 0x62, - 0xb0, 0x14, 0xf1, 0xc8, 0x2e, 0x32, 0x06, 0xc3, 0x8b, 0xbe, 0xd7, 0x7c, 0xc5, 0xf3, 0x83, 0x70, - 0xc5, 0x9b, 0xb7, 0x82, 0x70, 0x44, 0xe3, 0x2f, 0xa3, 0xa7, 0x15, 0x8f, 0x7e, 0x1a, 0xe9, 0x9a, - 0xfd, 0xbc, 0x07, 0xbb, 0x29, 0xa3, 0xe4, 0x1d, 0x0d, 0xf6, 0x2d, 0x9d, 0x4e, 0xd9, 0x47, 0xf3, - 0x9e, 0xb7, 0x49, 0x9e, 0x56, 0x95, 0xb3, 0x53, 0x5b, 0x66, 0x53, 0x17, 0x77, 0x04, 0xcb, 0xc6, - 0x59, 0x9f, 0xfb, 0xf8, 0x3b, 0xff, 0xf0, 0x4b, 0x5d, 0x17, 0xc9, 0x85, 0x99, 0xfc, 0xba, 0x97, - 0x1d, 0x97, 0xd1, 0xcc, 0xd2, 0x69, 0x41, 0xef, 0xcc, 0x5d, 0x31, 0xad, 0x6f, 0x91, 0xaf, 0x6a, - 0x30, 0xbc, 0x74, 0x5a, 0x98, 0xba, 0x94, 0x9f, 0x33, 0x45, 0x34, 0xe5, 0x19, 0xd6, 0x53, 0x67, - 0x2b, 0x42, 0x21, 0x0f, 0x17, 0x29, 0x0f, 0x67, 0xc9, 0x69, 0x09, 0x0f, 0x41, 0xcb, 0x0b, 0xa5, - 0xd4, 0xff, 0x86, 0x06, 0x63, 0x39, 0xc5, 0x16, 0xc9, 0x29, 0x15, 0x2d, 0xb9, 0x65, 0x1b, 0xa7, - 0x66, 0xab, 0x80, 0x20, 0xed, 0x27, 0x28, 0xed, 0x8f, 0x92, 0x63, 0x33, 0xea, 0x42, 0xa7, 0x48, - 0xd5, 0x1f, 0x6a, 0x40, 0xb2, 0xd5, 0x0d, 0xc9, 0xd9, 0xaa, 0xd5, 0x10, 0x19, 0xc1, 0x4f, 0xed, - 0xac, 0x88, 0xa2, 0xfe, 0x34, 0x25, 0xfa, 0x0c, 0x99, 0x2d, 0x20, 0x7a, 0x26, 0xc8, 0x92, 0xfa, - 0x55, 0x0d, 0x46, 0x33, 0xa8, 0xd5, 0xf2, 0x22, 0xab, 0xfc, 0x35, 0x75, 0xb6, 0x22, 0x14, 0x92, - 0x7f, 0x81, 0x92, 0x7f, 0x9a, 0x9c, 0xaa, 0x4c, 0x3e, 0xf9, 0x8a, 0x06, 0x23, 0xe9, 0x2a, 0x8d, - 0xe4, 0x74, 0x99, 0x79, 0x4f, 0x6d, 0xd0, 0x53, 0x67, 0xaa, 0x01, 0x21, 0xe9, 0xe7, 0x29, 0xe9, - 0xb3, 0xe4, 0x64, 0x11, 0xe9, 0x56, 0x9a, 0xc8, 0x3f, 0xd0, 0x60, 0x38, 0x55, 0xf5, 0x90, 0x28, - 0x05, 0x36, 0xbf, 0x52, 0xe4, 0xd4, 0xe9, 0x4a, 0x30, 0x25, 0xb5, 0x8c, 0xf8, 0x9d, 0x2a, 0x06, - 0x39, 0x73, 0x17, 0xc7, 0xff, 0x2d, 0x3a, 0xf2, 0xe9, 0xaa, 0x8d, 0xa4, 0x0a, 0x31, 0xe5, 0x46, - 0x5e, 0x56, 0x18, 0xb2, 0xfc, 0xc8, 0xa7, 0xeb, 0x59, 0x92, 0xef, 0x6a, 0xb0, 0x2f, 0xb7, 0x44, - 0x1e, 0x39, 0x5f, 0x8a, 0x92, 0x9c, 0x8a, 0x8d, 0x53, 0x17, 0x76, 0x00, 0x89, 0x8c, 0x5c, 0xa7, - 0x8c, 0x5c, 0x26, 0x73, 0xa5, 0x19, 0x89, 0xa3, 0x49, 0xe8, 0xce, 0xbf, 0xd4, 0x60, 0x22, 0xbf, - 0xf8, 0x1f, 0xa9, 0x4e, 0xa0, 0x98, 0x9f, 0xa7, 0x77, 0x02, 0x8a, 0xcc, 0x3d, 0x4b, 0x99, 0x3b, - 0x4f, 0x9e, 0xda, 0x11, 0x73, 0x01, 0xf9, 0xb9, 0x2e, 0x38, 0x5a, 0xa2, 0x36, 0x23, 0x59, 0x54, - 0xd2, 0x58, 0xba, 0x80, 0xe5, 0xd4, 0xd5, 0x7b, 0xc6, 0x83, 0x8c, 0xbf, 0x42, 0x19, 0x7f, 0x91, - 0xdc, 0x2a, 0x64, 0x9c, 0x21, 0x35, 0xf8, 0x0b, 0x23, 0x44, 0xb4, 0x46, 0xa2, 0xc6, 0xe4, 0xcc, - 0x5d, 0xfa, 0xf8, 0x16, 0xf9, 0x74, 0x17, 0x3c, 0x5c, 0xa6, 0x5a, 0x25, 0xb9, 0x57, 0x56, 0xc4, - 0xfc, 0x5f, 0xbb, 0x77, 0x44, 0x38, 0x28, 0xcb, 0x74, 0x50, 0x6e, 0x90, 0x6b, 0xf7, 0x69, 0x50, - 0x02, 0xf2, 0x59, 0x0d, 0x06, 0x62, 0xa5, 0xd4, 0xc8, 0xb4, 0x72, 0x07, 0xca, 0x54, 0x7f, 0x9b, - 0x9a, 0x29, 0xdd, 0x1e, 0x59, 0x78, 0x82, 0xb2, 0x70, 0x8c, 0x1c, 0x55, 0xd9, 0x36, 0xe8, 0x52, - 0x27, 0x5f, 0xd4, 0x00, 0x62, 0xd5, 0xf1, 0x4e, 0x94, 0xeb, 0x8c, 0xd3, 0x36, 0x5d, 0xb6, 0x39, - 0x92, 0x76, 0x8e, 0x92, 0x76, 0x8a, 0xcc, 0x94, 0x20, 0x2d, 0xa1, 0x36, 0x7e, 0x53, 0x83, 0xe1, - 0x54, 0x4d, 0x3a, 0xf5, 0x56, 0x94, 0x5f, 0x4a, 0x4f, 0xbd, 0x15, 0x49, 0x8a, 0xde, 0xe9, 0x27, - 0x29, 0xd5, 0x8f, 0x93, 0xe3, 0x2a, 0xaa, 0xd7, 0xda, 0x8e, 0x63, 0xf0, 0x51, 0x7d, 0x3b, 0x5b, - 0x77, 0xf0, 0x54, 0xf9, 0x9e, 0x4b, 0x19, 0x87, 0xf9, 0x15, 0xed, 0xca, 0x19, 0xb6, 0x31, 0x5a, - 0x13, 0xa3, 0xfc, 0xdb, 0x1a, 0x0c, 0x26, 0xec, 0x65, 0x72, 0xb2, 0x68, 0x82, 0x33, 0x06, 0xf9, - 0xa9, 0x0a, 0x10, 0x25, 0x8d, 0x2b, 0x4a, 0xb3, 0x28, 0xcc, 0x9f, 0xa0, 0xf8, 0x1b, 0x1a, 0x8c, - 0xa4, 0x0b, 0xf8, 0xa8, 0xb7, 0x78, 0x49, 0xe9, 0x3a, 0xf5, 0x16, 0x2f, 0xab, 0x80, 0xa6, 0x2f, - 0x52, 0xd2, 0x9f, 0x27, 0xcf, 0x16, 0x92, 0x9e, 0x90, 0xe7, 0x99, 0xbb, 0x09, 0x9f, 0xec, 0x5b, - 0xe4, 0x9f, 0x34, 0x98, 0x94, 0xd5, 0x3f, 0x23, 0xca, 0xd3, 0x5a, 0x41, 0xa1, 0xbc, 0xa9, 0x4b, - 0x3b, 0x03, 0x2e, 0xa9, 0x0e, 0x65, 0xfc, 0x21, 0x6f, 0xc2, 0x18, 0xe3, 0x77, 0xf7, 0x6f, 0x91, - 0xbf, 0x8e, 0x8e, 0x23, 0x99, 0x3a, 0x85, 0x05, 0xc7, 0x11, 0x59, 0x79, 0xc5, 0x82, 0xe3, 0x88, - 0xb4, 0x1c, 0x62, 0x15, 0xbe, 0x8c, 0xd5, 0x6d, 0x2c, 0xc7, 0xa1, 0x9c, 0xc1, 0xb7, 0x35, 0x18, - 0x49, 0xff, 0x03, 0x04, 0xb5, 0x24, 0x4a, 0xfe, 0x23, 0xc3, 0xd4, 0x99, 0x6a, 0x40, 0xc8, 0xd1, - 0x59, 0xca, 0xd1, 0x0c, 0x39, 0x31, 0xa3, 0xf8, 0xc7, 0x16, 0x41, 0x86, 0xec, 0xef, 0x69, 0x70, - 0xa0, 0x23, 0xdd, 0x74, 0x6f, 0xb4, 0x2d, 0xf7, 0x7d, 0x58, 0x49, 0xa5, 0x66, 0x24, 0xe4, 0xf4, - 0x19, 0x25, 0xd6, 0xd4, 0x37, 0x51, 0xd2, 0x92, 0x05, 0x17, 0x8a, 0x25, 0x2d, 0xb7, 0xa2, 0x5d, - 0xb1, 0xa4, 0xe5, 0x97, 0xb0, 0x2b, 0x3c, 0xc7, 0xb0, 0x2d, 0x2f, 0x5d, 0x43, 0x22, 0xa1, 0xe4, - 0xde, 0xd5, 0x60, 0x52, 0x56, 0x2a, 0x4f, 0xad, 0x1c, 0x0a, 0xca, 0xf4, 0xa9, 0x95, 0x43, 0x51, - 0x75, 0x3e, 0xfd, 0x2a, 0x65, 0x6d, 0x8e, 0x3c, 0x57, 0xec, 0x08, 0x52, 0x33, 0xf8, 0x67, 0x1a, - 0x8c, 0xe5, 0x78, 0x9c, 0xc8, 0x53, 0xe5, 0xc8, 0xcb, 0xec, 0x41, 0xe7, 0x2a, 0xc3, 0x21, 0x47, - 0xcf, 0x51, 0x8e, 0x2e, 0x90, 0x73, 0xc5, 0x1c, 0xe5, 0xef, 0x47, 0xdf, 0xd7, 0x60, 0x22, 0xbf, - 0x2a, 0x92, 0xfa, 0x78, 0xa3, 0xac, 0xc8, 0xa5, 0x3e, 0xde, 0xa8, 0x8b, 0x30, 0xe9, 0x4b, 0x94, - 0xa5, 0x45, 0xb2, 0x50, 0x92, 0x25, 0xf5, 0x9a, 0xfa, 0x4f, 0x0d, 0x0e, 0xaa, 0x4b, 0x30, 0x91, - 0xb9, 0xf2, 0x1b, 0x8e, 0x8c, 0xdf, 0xf9, 0x7b, 0x41, 0x81, 0x7c, 0xbf, 0x4c, 0xf9, 0x5e, 0x26, - 0x2f, 0xec, 0x88, 0x6f, 0xf9, 0xfe, 0xf5, 0x2f, 0x89, 0xc5, 0x98, 0xda, 0xc5, 0x2e, 0x56, 0x10, - 0xbc, 0xcc, 0x5e, 0x76, 0x69, 0x67, 0xc0, 0x3b, 0xe5, 0xb7, 0xe4, 0xbe, 0xf6, 0x6f, 0x1a, 0x1c, - 0x4a, 0x8b, 0x58, 0x7a, 0x9b, 0x78, 0x9f, 0x44, 0xbb, 0x02, 0xcb, 0x95, 0x36, 0x8e, 0xdf, 0xd1, - 0x60, 0x34, 0x53, 0x70, 0x47, 0xed, 0x6f, 0x94, 0xd5, 0xc5, 0x52, 0xfb, 0x1b, 0xa5, 0x55, 0x7d, - 0xf4, 0x53, 0x94, 0xb5, 0x27, 0xc8, 0x63, 0x25, 0x54, 0x2b, 0xd2, 0xf7, 0x35, 0x0d, 0x46, 0x32, - 0xf5, 0x9c, 0x4e, 0x57, 0xe9, 0xbe, 0xd4, 0x06, 0x2e, 0xab, 0xf1, 0xa3, 0x3f, 0x43, 0x49, 0x3e, - 0x47, 0xce, 0x96, 0x26, 0x39, 0xa1, 0x39, 0xbf, 0xa7, 0xc1, 0x7e, 0x49, 0x55, 0x1e, 0xf5, 0x55, - 0x87, 0xba, 0x1c, 0xd0, 0xd4, 0xc5, 0x1d, 0xc1, 0x22, 0x4f, 0x0b, 0x94, 0xa7, 0x67, 0xc9, 0xa5, - 0xb2, 0x3c, 0x71, 0x3d, 0x91, 0x60, 0xed, 0x8f, 0x35, 0x18, 0xcf, 0xab, 0x1a, 0x40, 0xce, 0x95, - 0xb3, 0xf4, 0x32, 0xb5, 0x83, 0xa6, 0xce, 0x57, 0x07, 0x2c, 0x79, 0x02, 0x17, 0xbf, 0xd3, 0x8b, - 0xe2, 0xfb, 0x1a, 0xec, 0xcb, 0xad, 0x16, 0x40, 0x4a, 0x12, 0x93, 0x2d, 0x79, 0xa0, 0x76, 0x49, - 0x2a, 0x2b, 0x1c, 0xe8, 0xb7, 0x28, 0x1f, 0xd7, 0xc9, 0xd5, 0xf2, 0x0e, 0x79, 0x83, 0x96, 0x26, - 0xc1, 0xd2, 0x06, 0x19, 0xfe, 0xfe, 0x51, 0x83, 0xfd, 0x92, 0xca, 0x02, 0x6a, 0xf9, 0x53, 0x17, - 0x3f, 0x50, 0xcb, 0x5f, 0x41, 0x29, 0x03, 0xbd, 0x46, 0xb9, 0x5c, 0x22, 0x37, 0x8a, 0xb8, 0x4c, - 0x64, 0xe8, 0xd2, 0xbc, 0xb6, 0x00, 0x71, 0x65, 0x18, 0xfd, 0x82, 0x06, 0x63, 0xdc, 0x17, 0x16, - 0xcb, 0x3b, 0x55, 0xfb, 0xa5, 0xb2, 0xb9, 0xab, 0x6a, 0xbf, 0x54, 0x4e, 0x42, 0x6b, 0xa1, 0x5f, - 0xaa, 0x49, 0x61, 0x0c, 0x56, 0x49, 0xe6, 0x17, 0x35, 0xe8, 0x17, 0x59, 0xaa, 0xe4, 0x49, 0x55, - 0x5f, 0xe9, 0x2c, 0xd7, 0xa9, 0x13, 0x25, 0x5b, 0x23, 0x5d, 0xc7, 0x29, 0x5d, 0x3a, 0x39, 0x2c, - 0xa1, 0xab, 0x25, 0xc8, 0xf8, 0xba, 0x06, 0xa3, 0x99, 0x5a, 0x5a, 0xea, 0x8d, 0x41, 0x56, 0xb8, - 0x4b, 0xbd, 0x31, 0x48, 0x0b, 0x76, 0x15, 0x7a, 0xab, 0x05, 0xb1, 0x86, 0xed, 0xe6, 0xb9, 0x78, - 0xfe, 0x5c, 0x83, 0xb1, 0x9c, 0x82, 0x51, 0xa4, 0xe4, 0xbd, 0x5e, 0x66, 0xac, 0xcf, 0x55, 0x86, - 0x43, 0x46, 0x2e, 0x53, 0x46, 0x9e, 0x21, 0x17, 0x65, 0xe7, 0xa2, 0x8e, 0xd4, 0x0a, 0x9e, 0x32, - 0xb2, 0xfc, 0xf7, 0x1a, 0x4c, 0xc9, 0x4b, 0x52, 0x91, 0x67, 0xaa, 0x11, 0x97, 0x9e, 0xa2, 0x67, - 0x77, 0x0a, 0x5e, 0x72, 0xf7, 0x90, 0xf2, 0x95, 0x98, 0xb1, 0x4f, 0x74, 0xc1, 0xd1, 0x12, 0x95, - 0x9c, 0xd4, 0xf7, 0x0b, 0xe5, 0x8b, 0x9c, 0xa9, 0xef, 0x17, 0x2a, 0x94, 0x94, 0xd2, 0x5f, 0xa0, - 0xec, 0x5f, 0x23, 0x8b, 0x32, 0xe5, 0x25, 0x82, 0xe2, 0xca, 0x0d, 0xc4, 0xb7, 0x34, 0x18, 0xcb, - 0x29, 0xcc, 0xa4, 0x16, 0x5d, 0x79, 0x2d, 0x29, 0xb5, 0xe8, 0x2a, 0x6a, 0x48, 0xe9, 0xcf, 0x53, - 0xc6, 0x9e, 0x26, 0xe7, 0x65, 0xf3, 0x2a, 0x0a, 0x60, 0xc6, 0x6a, 0x80, 0x26, 0x58, 0xf9, 0x8e, - 0x06, 0xfb, 0x25, 0x15, 0x9b, 0xd4, 0x9b, 0x8d, 0xba, 0xe0, 0x94, 0x7a, 0xb3, 0x29, 0x28, 0x34, - 0x55, 0x68, 0xc0, 0x59, 0x14, 0x5e, 0xca, 0xd3, 0x5f, 0x69, 0x30, 0x91, 0x5f, 0xd0, 0x49, 0x7d, - 0x3e, 0x50, 0x56, 0xa3, 0x52, 0x9f, 0x0f, 0xd4, 0x55, 0xa8, 0x0a, 0x55, 0x4c, 0x66, 0x9e, 0xb0, - 0x44, 0x6a, 0x66, 0xaa, 0x24, 0xa5, 0xa7, 0xd4, 0x53, 0xa5, 0x2e, 0xf1, 0xa7, 0x9e, 0xaa, 0x82, - 0x5a, 0x57, 0x85, 0x53, 0xc5, 0x02, 0x82, 0x79, 0x6a, 0x49, 0x9e, 0xaf, 0x72, 0x34, 0x9b, 0x29, - 0x5f, 0xec, 0xb7, 0xcb, 0x29, 0xe8, 0xa0, 0xde, 0xc7, 0xa4, 0x25, 0x19, 0xf4, 0x59, 0xca, 0xc1, - 0x93, 0xe4, 0x71, 0x09, 0x07, 0x39, 0x89, 0xf1, 0xe4, 0x4f, 0x34, 0x98, 0x5c, 0xee, 0xa4, 0xda, - 0xbf, 0x8f, 0xd4, 0x17, 0x45, 0xb3, 0xc4, 0x0b, 0x0e, 0xa4, 0xb9, 0xf8, 0x1a, 0x4f, 0xdb, 0x4a, - 0x56, 0x62, 0x50, 0xab, 0x31, 0x79, 0x55, 0x09, 0xb5, 0x1a, 0x53, 0x54, 0x9a, 0xd0, 0xcf, 0x50, - 0x26, 0xa6, 0xc9, 0x93, 0x65, 0xa6, 0x80, 0x97, 0x49, 0x20, 0xef, 0x68, 0x30, 0x91, 0x9f, 0x1c, - 0xaf, 0x5e, 0xe6, 0xca, 0x8c, 0x7c, 0xf5, 0x32, 0x57, 0xe7, 0xe2, 0xeb, 0xf3, 0x94, 0x8f, 0x4b, - 0xe4, 0x69, 0x09, 0x1f, 0x89, 0x34, 0xf5, 0x78, 0x5a, 0x7e, 0x2c, 0x54, 0x24, 0x9a, 0x94, 0x9c, - 0xd4, 0x74, 0xf5, 0xa4, 0xc8, 0x53, 0xe8, 0xd5, 0x93, 0xa2, 0x48, 0xab, 0x2f, 0x9c, 0x94, 0xdc, - 0x9c, 0x7b, 0xf2, 0x47, 0x1a, 0x8c, 0x66, 0x32, 0xa8, 0xd5, 0x4b, 0x42, 0x96, 0x57, 0xaf, 0x5e, - 0x12, 0xd2, 0x34, 0xed, 0x42, 0xd7, 0x69, 0x36, 0x87, 0x7b, 0xe6, 0x6e, 0x2c, 0x7f, 0xff, 0x2d, - 0xf2, 0x17, 0x1a, 0xec, 0x97, 0xa4, 0x12, 0xab, 0x15, 0xad, 0x3a, 0x83, 0x5b, 0xad, 0x68, 0x0b, - 0x72, 0x97, 0x0b, 0x17, 0x3a, 0x8f, 0x6d, 0xce, 0xc9, 0x6c, 0x26, 0xdf, 0xd6, 0xe0, 0x80, 0x34, - 0x49, 0x98, 0x5c, 0x2a, 0x29, 0x21, 0xb9, 0xf9, 0xcb, 0x53, 0xcf, 0xec, 0x10, 0x1a, 0xd9, 0x7a, - 0x8a, 0xb2, 0x75, 0x92, 0x4c, 0x97, 0x91, 0x32, 0x5a, 0xe8, 0x22, 0x3a, 0x95, 0x05, 0xe4, 0x73, - 0x1a, 0x0c, 0x25, 0x53, 0x8e, 0xa5, 0x47, 0xb3, 0xdc, 0x9c, 0x65, 0xe9, 0xd1, 0x2c, 0x3f, 0x8f, - 0x59, 0x9f, 0xa1, 0x74, 0x3e, 0x46, 0x1e, 0x95, 0x1d, 0x19, 0xed, 0xd0, 0x33, 0x58, 0x72, 0xb0, - 0x4d, 0xa9, 0xf9, 0x86, 0x86, 0x15, 0x8e, 0x32, 0x79, 0xc0, 0xea, 0xd5, 0x20, 0x4b, 0x3e, 0x56, - 0xaf, 0x06, 0x69, 0xb2, 0x71, 0xe1, 0x31, 0x8d, 0xd1, 0x2c, 0xcc, 0x8c, 0x99, 0xbb, 0x89, 0x0c, - 0x67, 0x6a, 0xeb, 0x4e, 0xe4, 0x27, 0x12, 0xab, 0xb5, 0xac, 0x32, 0x7f, 0x59, 0xad, 0x65, 0xd5, - 0x79, 0xcb, 0x85, 0x8e, 0xa3, 0x0d, 0x01, 0x6e, 0x24, 0xf2, 0x9b, 0xa9, 0xd9, 0x9e, 0x53, 0x43, - 0x46, 0xad, 0x5a, 0xe5, 0x15, 0x6b, 0xd4, 0xaa, 0x55, 0x51, 0xac, 0xa6, 0xd0, 0x6c, 0x8f, 0x57, - 0xb2, 0x31, 0xbc, 0x35, 0xdc, 0xf9, 0x82, 0xd8, 0x2e, 0xf1, 0x37, 0x1a, 0x1c, 0x90, 0xd6, 0xa7, - 0x51, 0xaf, 0xe8, 0xa2, 0xfa, 0x37, 0xea, 0x15, 0x5d, 0x58, 0x14, 0x47, 0xbf, 0x44, 0x99, 0x7b, - 0x8a, 0x9c, 0x91, 0x59, 0x84, 0x39, 0x9c, 0x19, 0xa2, 0xf2, 0xd6, 0x57, 0x35, 0x18, 0x49, 0x67, - 0x3b, 0xab, 0x7d, 0xc7, 0x92, 0xcc, 0xed, 0xa9, 0x33, 0xd5, 0x80, 0x4a, 0x52, 0xdf, 0xf9, 0x27, - 0xd7, 0x08, 0x99, 0x30, 0xd1, 0xbf, 0xa4, 0xc1, 0x78, 0x4e, 0xde, 0x70, 0xa0, 0x8e, 0x5e, 0xc9, - 0xcb, 0x6e, 0x56, 0x47, 0xaf, 0xe4, 0xa6, 0x36, 0x17, 0x5e, 0xbc, 0xaf, 0x52, 0x28, 0x9e, 0xa4, - 0x2e, 0xdc, 0xf5, 0x9f, 0xea, 0x82, 0x23, 0x85, 0x29, 0xab, 0x64, 0xa1, 0xca, 0xf5, 0x88, 0x2c, - 0x0d, 0x7a, 0xea, 0xca, 0x3d, 0x62, 0x41, 0x4e, 0x3f, 0x48, 0x39, 0xad, 0x91, 0xe5, 0xd2, 0x57, - 0x6a, 0xf5, 0x0e, 0x2e, 0xe5, 0x8d, 0xcb, 0x4f, 0x34, 0xd0, 0x8b, 0x93, 0x05, 0xc9, 0x95, 0x62, - 0xe1, 0x2a, 0x91, 0xbb, 0x38, 0xb5, 0x78, 0xaf, 0x68, 0x4a, 0x1a, 0x07, 0x26, 0x45, 0x82, 0x85, - 0x06, 0xa3, 0x2d, 0xb5, 0x93, 0xaa, 0x48, 0x7e, 0x5f, 0x83, 0x91, 0x74, 0xae, 0x61, 0x41, 0x6c, - 0x72, 0x7e, 0x52, 0x63, 0x41, 0x6c, 0xb2, 0x24, 0x9d, 0xb1, 0x30, 0x4e, 0xcc, 0x64, 0x9e, 0x99, - 0x20, 0x82, 0x64, 0x69, 0x75, 0x33, 0x77, 0x31, 0x55, 0x90, 0x3a, 0x11, 0x49, 0x36, 0xfd, 0x4d, - 0x1d, 0x59, 0x21, 0xcd, 0x56, 0x54, 0x47, 0x56, 0xc8, 0xd3, 0x11, 0x0b, 0x63, 0xaf, 0x30, 0x19, - 0x30, 0x0e, 0xcb, 0x79, 0xf0, 0xdf, 0x8a, 0x71, 0xf3, 0x0d, 0x0d, 0xc6, 0x72, 0xb2, 0x0b, 0x49, - 0x45, 0xba, 0xca, 0x6d, 0x50, 0x8a, 0x34, 0xc6, 0xc2, 0x53, 0x7d, 0x0e, 0x43, 0x41, 0x87, 0x23, - 0x1a, 0xbd, 0x97, 0xcc, 0xaf, 0x3b, 0x59, 0x2c, 0xe8, 0xc9, 0xe4, 0x44, 0xb5, 0xfe, 0xcb, 0x4d, - 0x4a, 0x2c, 0x8c, 0xde, 0xc3, 0x65, 0x8f, 0xb6, 0x71, 0x42, 0x71, 0xff, 0x6a, 0x64, 0x4e, 0x26, - 0xb2, 0x0d, 0x49, 0x79, 0x02, 0xca, 0xe5, 0xd0, 0xe4, 0x27, 0x33, 0xea, 0xd3, 0x94, 0xe8, 0xe3, - 0xe4, 0x91, 0x52, 0x44, 0x07, 0xe4, 0xf7, 0xe8, 0xe5, 0x6a, 0x32, 0x67, 0xae, 0xe8, 0x72, 0x35, - 0x37, 0xef, 0xb0, 0xe8, 0x72, 0x35, 0x3f, 0xed, 0xb0, 0x70, 0x90, 0xb3, 0x39, 0x81, 0x22, 0x1a, - 0xfb, 0x6d, 0x7a, 0x9b, 0x9d, 0x4a, 0xf7, 0x23, 0x95, 0xc8, 0x28, 0x7b, 0x9b, 0x2d, 0x49, 0x5a, - 0x2c, 0x74, 0xf6, 0xe4, 0x64, 0x34, 0x92, 0x5f, 0xd6, 0x52, 0x09, 0x89, 0x33, 0x6a, 0x03, 0x29, - 0x93, 0x49, 0x38, 0x75, 0xb2, 0x3c, 0x00, 0xd2, 0xf9, 0x24, 0xa5, 0xf3, 0x11, 0xf2, 0xb0, 0xd4, - 0x88, 0xb2, 0x5c, 0xc3, 0x46, 0xa8, 0xf9, 0xcd, 0x6f, 0xfd, 0xf0, 0xa0, 0xf6, 0xed, 0x1f, 0x1e, - 0xd4, 0x7e, 0xf0, 0xc3, 0x83, 0xda, 0xcf, 0xff, 0xe8, 0xe0, 0xae, 0x6f, 0xff, 0xe8, 0xe0, 0xae, - 0xef, 0xfd, 0xe8, 0xe0, 0xae, 0x57, 0x5f, 0x5c, 0xb7, 0xc3, 0x8d, 0xf6, 0xea, 0x74, 0xdd, 0x6b, - 0xce, 0x5c, 0xe7, 0x98, 0x96, 0xcc, 0xd5, 0xa0, 0x83, 0xf7, 0x44, 0xdd, 0xf3, 0xad, 0xf8, 0xe3, - 0x86, 0x69, 0xbb, 0x78, 0x05, 0x16, 0x74, 0x3a, 0x0d, 0xb7, 0x5b, 0x56, 0x30, 0xb3, 0x35, 0xbb, - 0xda, 0xdb, 0xf2, 0xbd, 0xd0, 0x3b, 0xfd, 0x5f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xe5, 0xbb, 0x8f, - 0xe2, 0x4b, 0x8b, 0x00, 0x00, + 0x75, 0xb0, 0x96, 0xa4, 0x28, 0xf2, 0xf0, 0x3d, 0xa4, 0x28, 0x8a, 0xb6, 0x45, 0x69, 0x65, 0xd9, + 0xf2, 0x43, 0xbc, 0x12, 0x25, 0x59, 0x92, 0x25, 0x3f, 0x48, 0x51, 0xd4, 0x23, 0x94, 0x45, 0x5f, + 0xd1, 0x76, 0xe2, 0xcf, 0xc9, 0xcd, 0xf2, 0xde, 0x25, 0xb9, 0xd6, 0xde, 0xdd, 0xab, 0xdd, 0xbd, + 0x94, 0x19, 0xc1, 0xf8, 0xd0, 0xb4, 0x0d, 0x82, 0x04, 0xe8, 0xf3, 0x47, 0x7e, 0x04, 0x48, 0x81, + 0x26, 0x68, 0xd0, 0x07, 0x5a, 0x20, 0x75, 0x93, 0xa2, 0x49, 0xd1, 0xf4, 0x91, 0x34, 0x40, 0x81, + 0x36, 0x81, 0xdb, 0x26, 0x28, 0x10, 0x37, 0x4d, 0x8a, 0x16, 0x0d, 0xd0, 0xa6, 0xe8, 0xdf, 0x02, + 0x6d, 0xb1, 0x33, 0x67, 0xe6, 0xee, 0x6b, 0x66, 0x77, 0x29, 0x19, 0x4e, 0xda, 0x5f, 0xe2, 0x9d, + 0x9d, 0x73, 0xe6, 0x9c, 0x99, 0x33, 0x67, 0xce, 0x9c, 0x39, 0xe7, 0x08, 0x0e, 0x59, 0xce, 0xeb, + 0x66, 0x3d, 0xb0, 0xb6, 0xcc, 0x8a, 0xf9, 0x46, 0x7d, 0xd3, 0x70, 0x36, 0xcc, 0xca, 0xd6, 0x5c, + 0xe5, 0x76, 0xdb, 0xf4, 0xb6, 0x67, 0x5b, 0x9e, 0x1b, 0xb8, 0x64, 0xaf, 0xe8, 0x32, 0xcb, 0xbb, + 0xcc, 0x6e, 0xcd, 0x4d, 0x4f, 0x6c, 0xb8, 0x1b, 0x2e, 0xed, 0x51, 0x09, 0xff, 0x62, 0x9d, 0xa7, + 0x1f, 0xdc, 0x70, 0xdd, 0x0d, 0xdb, 0xac, 0x18, 0x2d, 0xab, 0x62, 0x38, 0x8e, 0x1b, 0x18, 0x81, + 0xe5, 0x3a, 0x3e, 0x7e, 0x7d, 0x38, 0x7b, 0x34, 0x81, 0x96, 0xf5, 0x3a, 0x92, 0xdd, 0xcb, 0xf5, + 0x1a, 0xa6, 0xb7, 0xe6, 0xba, 0xb7, 0xb0, 0x9b, 0x9e, 0xdd, 0xad, 0x69, 0x78, 0xb7, 0xcc, 0x00, + 0xfb, 0x1c, 0xce, 0xee, 0xb3, 0x61, 0x3a, 0xa6, 0x6f, 0xf9, 0xe9, 0xf1, 0x5c, 0xcf, 0xa8, 0xdb, + 0x66, 0x65, 0xeb, 0xc4, 0x9a, 0x19, 0x18, 0x27, 0xf0, 0x27, 0xeb, 0xa6, 0xdf, 0x00, 0xb8, 0xd9, + 0x5e, 0x33, 0xea, 0x75, 0xb7, 0xed, 0x04, 0x64, 0x12, 0x7a, 0x03, 0xcf, 0x68, 0x98, 0xde, 0x94, + 0x76, 0x50, 0x3b, 0xda, 0x5f, 0xc5, 0x5f, 0xe4, 0x31, 0x18, 0xf5, 0x45, 0xaf, 0x9a, 0xe3, 0x3a, + 0x75, 0x73, 0xaa, 0xeb, 0xa0, 0x76, 0x74, 0xa8, 0x3a, 0xd2, 0x69, 0x7f, 0x21, 0x6c, 0xd6, 0x3f, + 0x0c, 0x0f, 0xbe, 0x18, 0xce, 0x73, 0x07, 0xeb, 0x8d, 0x90, 0x45, 0xbf, 0x6a, 0xde, 0x6e, 0x9b, + 0x7e, 0x40, 0x0e, 0xc3, 0x50, 0x04, 0x95, 0xd5, 0xc0, 0x91, 0x06, 0x3b, 0x8d, 0x57, 0x1b, 0xe4, + 0x01, 0xe8, 0x67, 0x1c, 0x87, 0x1d, 0xba, 0x68, 0x87, 0x3e, 0xd6, 0x70, 0xb5, 0xa1, 0x7f, 0x49, + 0x83, 0x87, 0x24, 0x43, 0xf8, 0x2d, 0xd7, 0xf1, 0x4d, 0x72, 0x15, 0x60, 0xad, 0xbd, 0x5d, 0xa3, + 0x73, 0xeb, 0x4f, 0x69, 0x07, 0xbb, 0x8f, 0x0e, 0xcc, 0x3d, 0x3e, 0x9b, 0xb9, 0xe2, 0xb3, 0x09, + 0x24, 0x8b, 0x46, 0x60, 0x54, 0xfb, 0xd7, 0xda, 0xdb, 0x0c, 0x25, 0x79, 0x1f, 0x0c, 0xf8, 0xa6, + 0x6d, 0x73, 0x5c, 0x5d, 0xa5, 0x71, 0x41, 0x08, 0xce, 0x90, 0xe9, 0xbf, 0xa1, 0xc1, 0x91, 0x44, + 0x9f, 0x70, 0xe9, 0xaf, 0x9b, 0x81, 0xd1, 0x30, 0x02, 0xe3, 0x15, 0x2b, 0xd8, 0xbc, 0x4e, 0xb9, + 0x24, 0x2f, 0x40, 0x5f, 0x13, 0x5b, 0xe9, 0x04, 0x0d, 0xcc, 0xcd, 0x15, 0x1b, 0x33, 0x8a, 0xaf, + 0x2a, 0x70, 0x28, 0x27, 0x94, 0x4c, 0xc0, 0x6e, 0xcb, 0x5f, 0x68, 0x6f, 0x4f, 0x75, 0x1f, 0xd4, + 0x8e, 0xf6, 0x55, 0xd9, 0x0f, 0xfd, 0x41, 0x98, 0xa6, 0xb3, 0x7c, 0x09, 0x07, 0x5b, 0x31, 0x3c, + 0xa3, 0xc9, 0x97, 0x51, 0x7f, 0x15, 0x1e, 0xc8, 0xfc, 0x8a, 0x2b, 0x70, 0x1e, 0x7a, 0x5b, 0xb4, + 0x05, 0xa9, 0x7f, 0x48, 0x42, 0x3d, 0x03, 0x5b, 0xe8, 0xf9, 0xc6, 0x3b, 0x33, 0xbb, 0xaa, 0x08, + 0xa2, 0xff, 0x9c, 0x06, 0x07, 0x12, 0x0b, 0xbc, 0x68, 0xb6, 0x5c, 0xdf, 0x0a, 0xca, 0x49, 0xd1, + 0x65, 0x80, 0xce, 0x6f, 0xca, 0xf5, 0xc0, 0xdc, 0xa1, 0xdc, 0x69, 0xa4, 0xc4, 0x68, 0xd5, 0x08, + 0xa8, 0xfe, 0x3d, 0x0d, 0x66, 0xa4, 0x04, 0x21, 0xc7, 0x1f, 0x86, 0xbe, 0x06, 0xb6, 0xa1, 0xc4, + 0x2d, 0x4a, 0x86, 0xca, 0xc1, 0x34, 0xcb, 0x1b, 0x2e, 0x39, 0x81, 0xb7, 0x5d, 0x15, 0x58, 0xa7, + 0xff, 0x1f, 0x0c, 0xc5, 0x3e, 0x91, 0x51, 0xe8, 0xbe, 0x65, 0x6e, 0x23, 0xeb, 0xe1, 0x9f, 0xe4, + 0x14, 0xec, 0xde, 0x32, 0xec, 0xb6, 0x89, 0xcc, 0x1e, 0x90, 0x50, 0x80, 0x68, 0xaa, 0xac, 0xf3, + 0xd3, 0x5d, 0x67, 0x35, 0xfd, 0x00, 0x6e, 0x5b, 0xbe, 0x9e, 0x0b, 0x86, 0x6d, 0x38, 0x75, 0x53, + 0xac, 0xb7, 0x81, 0x7b, 0x2e, 0xfd, 0x1d, 0xf9, 0x7f, 0x1e, 0xfa, 0xd6, 0xb0, 0x0d, 0xf9, 0x97, + 0x8d, 0x8e, 0xa0, 0xb8, 0xe8, 0x02, 0x4a, 0x3f, 0x83, 0x22, 0x35, 0xbf, 0xb1, 0xe1, 0x99, 0x1b, + 0x46, 0x60, 0xbe, 0xec, 0xda, 0xed, 0xa6, 0xc9, 0x97, 0x7c, 0x0a, 0xf6, 0xf0, 0xa5, 0x64, 0x1c, + 0xf3, 0x9f, 0x7a, 0x0b, 0x69, 0x4f, 0x01, 0x22, 0x69, 0x2b, 0x30, 0x66, 0xf0, 0x4f, 0xb5, 0x2d, + 0xfa, 0x8d, 0xd3, 0x78, 0x58, 0x42, 0x23, 0xdb, 0x86, 0x88, 0x67, 0xd4, 0x88, 0x23, 0xf6, 0xf5, + 0x0f, 0x64, 0x8f, 0x28, 0xc4, 0x73, 0x1a, 0xfa, 0x90, 0x38, 0x36, 0x50, 0x7f, 0x55, 0xfc, 0x26, + 0x0f, 0x01, 0x88, 0xad, 0xc8, 0x14, 0x4a, 0x7f, 0xb5, 0x9f, 0xef, 0x45, 0x5f, 0xff, 0x11, 0xd7, + 0x6e, 0x69, 0xdc, 0xc8, 0x8e, 0x0b, 0xfb, 0x3b, 0xec, 0xf0, 0x2d, 0x10, 0x67, 0xeb, 0xa4, 0x84, + 0x2d, 0x81, 0x73, 0x9e, 0x81, 0xf1, 0x89, 0xaa, 0xbb, 0x5e, 0xa3, 0xba, 0xcf, 0xc8, 0xfc, 0xea, + 0x93, 0x0f, 0xc2, 0x54, 0x67, 0x40, 0xa4, 0x9d, 0x8f, 0xd7, 0x55, 0x7c, 0x1a, 0x27, 0x05, 0x92, + 0x68, 0xb3, 0xaf, 0x3f, 0x0f, 0x87, 0xe2, 0x0c, 0xc7, 0xa0, 0x70, 0x46, 0x63, 0x0a, 0x4c, 0x4b, + 0x9c, 0x08, 0x1b, 0xa0, 0xab, 0x30, 0xe0, 0xbc, 0xcd, 0x43, 0x2f, 0xa3, 0x1a, 0x75, 0x92, 0x8c, + 0xe8, 0xe8, 0xa4, 0x70, 0xcd, 0xc4, 0x00, 0xf5, 0xcb, 0x50, 0x61, 0x03, 0xb5, 0xeb, 0xa1, 0x05, + 0xc0, 0x37, 0xc3, 0xaa, 0x67, 0x38, 0xfe, 0xba, 0xe9, 0x2d, 0x9a, 0x8e, 0xdb, 0x5c, 0x34, 0xeb, + 0x56, 0xd3, 0xb0, 0x39, 0xe1, 0x13, 0xb0, 0xbb, 0x11, 0x36, 0x23, 0xd1, 0xec, 0x87, 0xbe, 0x0c, + 0xc7, 0x8b, 0x23, 0x42, 0xfa, 0xa7, 0x60, 0x4f, 0x83, 0x35, 0x51, 0x5c, 0x3d, 0x55, 0xfe, 0x53, + 0xbf, 0x56, 0x1c, 0x9b, 0x10, 0xd1, 0x49, 0xe8, 0xa5, 0xa4, 0x70, 0x01, 0xc5, 0x5f, 0xfa, 0xc7, + 0x34, 0x38, 0x51, 0x02, 0x19, 0xd2, 0xf6, 0x22, 0x0c, 0x53, 0xf8, 0x1a, 0x92, 0xc4, 0x05, 0xf1, + 0x61, 0xa9, 0x06, 0x8a, 0x60, 0xc1, 0x49, 0x1e, 0x6a, 0x44, 0x1b, 0xf5, 0x8b, 0xaa, 0x45, 0x15, + 0x6c, 0xc4, 0x77, 0x93, 0x96, 0xdc, 0x4d, 0x0d, 0x38, 0xac, 0x44, 0x82, 0xe4, 0x3f, 0x03, 0x7b, + 0x76, 0xa0, 0x17, 0x38, 0x8c, 0xfe, 0x6a, 0xca, 0x20, 0xe1, 0x1a, 0xb6, 0xcc, 0x71, 0x25, 0x24, + 0xa5, 0x2b, 0x2a, 0x29, 0xaf, 0xc9, 0xce, 0x42, 0x41, 0xfc, 0xd3, 0xb1, 0x93, 0xa7, 0x88, 0xde, + 0x17, 0xfd, 0xf5, 0x15, 0xd8, 0xc7, 0xb0, 0xb7, 0xdc, 0x80, 0xf1, 0x16, 0x15, 0x10, 0x3f, 0x30, + 0x82, 0xb6, 0xcf, 0x6d, 0x41, 0xf6, 0x2b, 0x4f, 0x7f, 0xbd, 0x02, 0x53, 0x69, 0x8c, 0xc2, 0x2a, + 0xd8, 0xc3, 0x3a, 0xf2, 0x69, 0x96, 0x9e, 0xc6, 0x02, 0xb8, 0xca, 0x21, 0xf4, 0xd3, 0x30, 0x99, + 0x40, 0x5c, 0x48, 0x37, 0xac, 0xa6, 0x38, 0x14, 0xe4, 0x9c, 0x83, 0x5e, 0xd6, 0x0d, 0xa7, 0xad, + 0x00, 0x35, 0x08, 0xa0, 0x7f, 0xab, 0x0b, 0xf6, 0x0b, 0xb4, 0xc2, 0xf0, 0x2a, 0x42, 0x50, 0xb8, + 0xcc, 0xb6, 0xd5, 0xb4, 0x98, 0x41, 0xd2, 0x53, 0x65, 0x3f, 0xc8, 0x73, 0x00, 0xd4, 0xc4, 0xac, + 0xf9, 0x56, 0xc3, 0xa4, 0x86, 0xd8, 0xf0, 0xdc, 0x41, 0x09, 0x3d, 0x74, 0xbc, 0x9b, 0x56, 0xc3, + 0xac, 0xf6, 0xbb, 0xfc, 0x4f, 0x52, 0x83, 0xfd, 0x14, 0x53, 0xad, 0xde, 0x6e, 0xb6, 0x6d, 0x23, + 0x04, 0xaa, 0x39, 0x6e, 0xb8, 0x83, 0x0d, 0x7b, 0xaa, 0x27, 0xa4, 0x61, 0xe1, 0x70, 0x68, 0xd8, + 0xfc, 0xdd, 0x3b, 0x33, 0x0f, 0xd4, 0x5d, 0xbf, 0xe9, 0xfa, 0x7e, 0xe3, 0xd6, 0xac, 0xe5, 0x56, + 0x9a, 0x46, 0xb0, 0x39, 0xbb, 0x6c, 0x6e, 0x18, 0xf5, 0xed, 0x45, 0xb3, 0x5e, 0xdd, 0x47, 0xb1, + 0x5c, 0x14, 0x48, 0x5e, 0x40, 0x1c, 0x99, 0x03, 0xdc, 0x6e, 0x1b, 0x4e, 0x60, 0x05, 0xdb, 0x53, + 0xbb, 0x77, 0x3e, 0xc0, 0x8b, 0x88, 0x43, 0xff, 0xaa, 0x86, 0x16, 0x67, 0x62, 0x4e, 0x71, 0xb5, + 0x96, 0x60, 0x74, 0xad, 0xbd, 0xed, 0xd7, 0x5a, 0x9e, 0x55, 0x37, 0x6b, 0xb6, 0xb9, 0x65, 0xda, + 0x28, 0x45, 0x0f, 0x4a, 0xe6, 0x69, 0x39, 0xec, 0x53, 0x1d, 0x0e, 0xa1, 0x56, 0x42, 0x20, 0xfa, + 0x9b, 0x5c, 0x81, 0xb1, 0xd0, 0x24, 0x8f, 0x23, 0xea, 0x2a, 0x80, 0x68, 0x84, 0x82, 0x45, 0x30, + 0x8d, 0x42, 0xb7, 0x6f, 0xde, 0xa6, 0x8b, 0xd5, 0x53, 0x0d, 0xff, 0xd4, 0x3f, 0xab, 0xc1, 0xf0, + 0x52, 0xdb, 0xb6, 0x3b, 0x12, 0x73, 0x0f, 0x42, 0x46, 0x5e, 0x86, 0xb1, 0xa6, 0xd5, 0x40, 0x3a, + 0x0d, 0xa7, 0x51, 0x0b, 0xdc, 0x35, 0xb4, 0xec, 0x8e, 0xc8, 0xf4, 0x93, 0xd5, 0xa0, 0x04, 0xce, + 0x3b, 0x8d, 0xd5, 0x1b, 0x0b, 0x68, 0xca, 0x0e, 0x37, 0x23, 0xad, 0xee, 0x9a, 0xfe, 0x71, 0x0d, + 0x2d, 0xad, 0x38, 0xa9, 0xf7, 0xb8, 0xf3, 0xc9, 0x1c, 0x4c, 0xde, 0xb1, 0x82, 0xcd, 0x5a, 0x9a, + 0x66, 0x76, 0xaf, 0x20, 0xe1, 0xd7, 0xeb, 0x71, 0x52, 0x6a, 0x68, 0x48, 0xa5, 0x28, 0xc1, 0x45, + 0x7f, 0x2e, 0xa9, 0x31, 0x64, 0x8c, 0xc7, 0x11, 0x74, 0xb4, 0x46, 0x13, 0x65, 0x2a, 0xf1, 0xbd, + 0xc8, 0x46, 0x95, 0xf3, 0xd3, 0x25, 0xe5, 0xe7, 0xb5, 0xcc, 0x99, 0x8d, 0x9c, 0x33, 0x71, 0x61, + 0x28, 0xc8, 0x0d, 0xd7, 0x3a, 0x3f, 0x2b, 0x2e, 0x46, 0x7c, 0x87, 0xf8, 0x0b, 0xdb, 0x57, 0x0c, + 0x7f, 0xb3, 0x73, 0x1e, 0x2a, 0x39, 0x4a, 0x1d, 0x43, 0x5d, 0x19, 0xc7, 0xd0, 0x21, 0x18, 0x64, + 0x9a, 0x68, 0x93, 0x22, 0x9e, 0xea, 0xa6, 0xeb, 0x3c, 0x40, 0xdb, 0xd8, 0x58, 0xfa, 0x06, 0xbf, + 0x0e, 0x65, 0x90, 0x81, 0x9c, 0x2e, 0x42, 0x6f, 0xec, 0xfa, 0xfd, 0xa4, 0x84, 0xd3, 0x55, 0xcf, + 0x6a, 0x36, 0xcd, 0x46, 0x88, 0x69, 0x39, 0xd4, 0x0b, 0x14, 0x5d, 0x15, 0x61, 0x85, 0x33, 0x61, + 0x95, 0xba, 0x21, 0x3a, 0xc3, 0xdd, 0x37, 0x6e, 0x75, 0x1b, 0x1e, 0x66, 0x06, 0x02, 0x6b, 0x99, + 0x6f, 0x34, 0x3c, 0xd3, 0xf7, 0x4b, 0x8e, 0xf4, 0x28, 0x8c, 0xf0, 0x61, 0x0c, 0x86, 0x00, 0xc7, + 0x1a, 0x36, 0x62, 0x68, 0xf5, 0x4f, 0x77, 0xc1, 0xde, 0x4c, 0x8e, 0xc9, 0x39, 0xd8, 0x4d, 0x65, + 0x8c, 0xe1, 0xa6, 0x9a, 0x74, 0x57, 0x9e, 0x26, 0x65, 0x10, 0xe4, 0x39, 0xe8, 0x13, 0x7a, 0xb8, + 0xab, 0x38, 0xb4, 0x00, 0x0a, 0x11, 0xac, 0x5b, 0xb6, 0x6d, 0xac, 0xd9, 0xec, 0xe4, 0x29, 0x8a, + 0x80, 0x03, 0x75, 0x1c, 0x08, 0x3d, 0x11, 0x07, 0x42, 0xa8, 0x2e, 0x3a, 0x82, 0xc4, 0x4e, 0x08, + 0x3c, 0xb0, 0x42, 0x59, 0x09, 0xb5, 0x67, 0xdd, 0x6a, 0x4c, 0xf5, 0xb2, 0xdb, 0x6b, 0xdd, 0x6a, + 0xe8, 0x26, 0x9a, 0x51, 0xe9, 0xd5, 0xbe, 0xaf, 0x42, 0xd5, 0x84, 0x23, 0x39, 0x4b, 0x7e, 0x5f, + 0x87, 0xbb, 0x13, 0x39, 0xd5, 0x6e, 0xde, 0x31, 0x5a, 0x37, 0xda, 0x41, 0xab, 0x5d, 0x4c, 0x03, + 0xcd, 0xc0, 0x80, 0xe5, 0xb4, 0xda, 0x41, 0x2d, 0x6a, 0x17, 0x02, 0x6d, 0xa2, 0x06, 0x74, 0x08, + 0x6d, 0x34, 0x99, 0x78, 0x3b, 0x6c, 0xe9, 0xaa, 0x7d, 0xac, 0xe1, 0xaa, 0xa3, 0x7f, 0x9d, 0xab, + 0xf9, 0xe4, 0xc8, 0xc8, 0x5e, 0xb8, 0xd1, 0x69, 0x4b, 0x2d, 0x7a, 0x41, 0x19, 0x60, 0x6d, 0x0c, + 0xff, 0x02, 0x0c, 0x61, 0x17, 0x86, 0x15, 0xe5, 0xeb, 0x21, 0x14, 0x8f, 0xbd, 0x69, 0xf1, 0xb8, + 0xea, 0x04, 0x55, 0x44, 0x3b, 0x4f, 0x41, 0xc8, 0xf3, 0x30, 0xe8, 0xb7, 0x4c, 0x47, 0xa0, 0xe8, + 0x2e, 0x82, 0x62, 0x80, 0x82, 0x30, 0x0c, 0xfa, 0x47, 0x22, 0xb6, 0x56, 0xc8, 0xc7, 0x55, 0xa7, + 0xe8, 0x04, 0x26, 0x59, 0xec, 0x4a, 0xb3, 0xf8, 0x10, 0x00, 0x4e, 0xa1, 0xdb, 0x46, 0xe2, 0xaa, + 0x38, 0xa9, 0x37, 0xda, 0x81, 0xfe, 0xff, 0x13, 0xab, 0x87, 0x63, 0xe3, 0x14, 0x26, 0x16, 0x48, + 0x4b, 0x2d, 0xd0, 0xf3, 0x30, 0xc8, 0x3a, 0x94, 0x99, 0x3f, 0x86, 0x13, 0x99, 0x7f, 0x26, 0xa2, + 0xf2, 0xe3, 0xa7, 0x7b, 0x21, 0xf3, 0xf7, 0x3f, 0xb5, 0x88, 0xae, 0x4e, 0xc2, 0x0b, 0xd7, 0x4d, + 0xbf, 0x38, 0xe3, 0x22, 0xfa, 0x27, 0xd7, 0x92, 0xeb, 0xe3, 0x76, 0x05, 0xb9, 0x0a, 0xc3, 0x6b, + 0xa6, 0x1f, 0xd4, 0xd6, 0xda, 0xdb, 0x88, 0xa6, 0xab, 0x38, 0x9a, 0xc1, 0x10, 0x74, 0xa1, 0xbd, + 0xcd, 0x50, 0xbd, 0x0f, 0x46, 0x28, 0x2a, 0xea, 0x75, 0x65, 0xb8, 0xba, 0x8b, 0xe3, 0x1a, 0x0a, + 0x61, 0x6f, 0x9a, 0xb6, 0x4d, 0x91, 0xe9, 0x17, 0x51, 0xbb, 0x2f, 0x9a, 0x9e, 0xb5, 0x45, 0xad, + 0xcd, 0x1d, 0x4c, 0xe1, 0x4f, 0x75, 0xa1, 0xc2, 0x90, 0x63, 0xf9, 0x5f, 0x3f, 0x91, 0xbf, 0xc7, + 0xc5, 0xa8, 0x33, 0x07, 0xf7, 0xe3, 0xd6, 0xa3, 0xbc, 0xb4, 0x74, 0xdf, 0xfb, 0xa5, 0x25, 0xd4, + 0x81, 0x07, 0xe5, 0x74, 0xff, 0x04, 0xdd, 0x2c, 0x3e, 0xd5, 0x0d, 0xb3, 0x99, 0x87, 0xe3, 0xaa, + 0x7b, 0xd1, 0x70, 0xea, 0xa6, 0xfd, 0x52, 0x6b, 0xd5, 0x65, 0x2a, 0xe3, 0xfe, 0x99, 0x82, 0x8b, + 0x30, 0xb0, 0x66, 0xf8, 0x66, 0x5c, 0x73, 0x17, 0xb2, 0x0d, 0x20, 0x84, 0xc3, 0x03, 0x60, 0x09, + 0x06, 0x6f, 0xb7, 0xdd, 0x40, 0xa0, 0xe9, 0x29, 0x8e, 0x66, 0x80, 0x02, 0x22, 0x9e, 0xcb, 0xd0, + 0xe7, 0x07, 0x9e, 0x11, 0x98, 0x1b, 0xec, 0xbe, 0x39, 0x3c, 0xf7, 0x84, 0x64, 0x56, 0xd9, 0x8c, + 0xd8, 0xf4, 0x95, 0xee, 0x26, 0x82, 0x54, 0x05, 0x30, 0x59, 0x86, 0x11, 0xcf, 0x5c, 0x37, 0x3d, + 0xd3, 0xa9, 0x9b, 0xb8, 0x33, 0x7a, 0x8b, 0xcb, 0xda, 0xb0, 0x80, 0x65, 0x5b, 0xe3, 0xdb, 0x5d, + 0x70, 0x2a, 0xb2, 0x32, 0x09, 0x41, 0x7b, 0x57, 0xd7, 0x27, 0x39, 0xb3, 0xdd, 0xf7, 0x61, 0x66, + 0x7b, 0xee, 0xf3, 0xcc, 0xee, 0xde, 0xf9, 0xcc, 0xae, 0xa3, 0x07, 0x30, 0x7b, 0x62, 0xef, 0xdf, + 0x1d, 0xc0, 0x83, 0xc7, 0x33, 0x0c, 0xc2, 0x1d, 0x8d, 0x57, 0xf8, 0x26, 0xf0, 0x2f, 0x5d, 0xf0, + 0x00, 0xda, 0x8d, 0x9d, 0x81, 0x7e, 0x4c, 0xee, 0x03, 0xe7, 0xe9, 0x2d, 0x75, 0x83, 0x9b, 0x94, + 0xc5, 0xc0, 0x11, 0x24, 0x76, 0x99, 0xe8, 0xd9, 0xc9, 0x65, 0x62, 0x86, 0x5f, 0x26, 0x42, 0xc9, + 0xe9, 0x5b, 0xe8, 0xff, 0xe1, 0x3b, 0x33, 0xac, 0x21, 0xfb, 0x5e, 0xd1, 0x2b, 0xb9, 0x57, 0xec, + 0xe9, 0xdc, 0x2b, 0x6e, 0xa3, 0x13, 0x58, 0x26, 0x47, 0x78, 0x0c, 0x5c, 0x4b, 0x98, 0xfb, 0x73, + 0x6a, 0x73, 0x3f, 0x6b, 0xd9, 0x84, 0xd1, 0xbf, 0x0d, 0x4f, 0x14, 0x12, 0xa9, 0x77, 0x61, 0xe8, + 0x4f, 0x6a, 0x29, 0xa3, 0xe7, 0x3d, 0x74, 0x15, 0xf8, 0x29, 0xdb, 0x49, 0xe2, 0x30, 0xb8, 0x9f, + 0x53, 0xf0, 0x09, 0xfe, 0x86, 0x16, 0xb1, 0xd8, 0xde, 0x33, 0x17, 0xd7, 0xc7, 0x35, 0x80, 0xc8, + 0xd1, 0xfe, 0x1e, 0x6e, 0xec, 0xd0, 0x8a, 0x9b, 0x58, 0x31, 0xbd, 0x96, 0x19, 0xb4, 0x0d, 0x9b, + 0xcd, 0xc8, 0xcd, 0xc0, 0x08, 0x42, 0x5b, 0x71, 0x80, 0xb3, 0xed, 0xac, 0xbb, 0xe8, 0x9c, 0x92, + 0x45, 0x39, 0x24, 0x30, 0x5c, 0x75, 0xd6, 0xdd, 0x2a, 0xce, 0x5a, 0xf8, 0x37, 0x59, 0x81, 0xc1, + 0xf5, 0xb6, 0xd3, 0xb0, 0x9c, 0x0d, 0x86, 0x8d, 0x79, 0x2c, 0x8f, 0x15, 0xc3, 0xb6, 0xc4, 0x20, + 0xab, 0x03, 0x88, 0x22, 0xc4, 0xa8, 0xff, 0x5a, 0x37, 0x4c, 0x2c, 0xb5, 0x6d, 0x3b, 0xb9, 0x9c, + 0xe4, 0xb9, 0x84, 0x3f, 0xed, 0x51, 0xe9, 0xc3, 0x47, 0x1c, 0x50, 0xb8, 0x58, 0x57, 0x61, 0xb8, + 0xc5, 0x09, 0x88, 0x52, 0xfb, 0x44, 0x31, 0x6a, 0xe9, 0xec, 0x5d, 0xd9, 0x55, 0x1d, 0x12, 0x48, + 0xe8, 0x0c, 0xdc, 0x0c, 0x67, 0x20, 0x68, 0x7b, 0xa6, 0xcf, 0x70, 0x76, 0x53, 0x9c, 0xb3, 0x12, + 0x9c, 0x97, 0xde, 0x68, 0x59, 0xde, 0xf6, 0x12, 0x03, 0xe8, 0xcc, 0xe9, 0x95, 0x5d, 0xe1, 0x24, + 0xd0, 0x46, 0x8a, 0x74, 0x81, 0x89, 0x26, 0x1e, 0xab, 0x25, 0x54, 0x2b, 0x95, 0x5f, 0x76, 0x27, + 0xc8, 0xf4, 0x28, 0xef, 0xbe, 0x67, 0x8f, 0xf2, 0x42, 0x2f, 0xf4, 0x84, 0x8c, 0xea, 0x1b, 0x78, + 0x59, 0xcd, 0xd8, 0x77, 0xb8, 0xcd, 0x2f, 0x25, 0x1d, 0xba, 0x4f, 0x28, 0x5c, 0xa0, 0xa9, 0x65, + 0x13, 0x6e, 0xdd, 0xf3, 0xe8, 0x18, 0x4c, 0xf5, 0x28, 0x72, 0xa1, 0x6b, 0x48, 0xb4, 0x83, 0x20, + 0xf2, 0x62, 0x42, 0xac, 0x4a, 0xd1, 0xc8, 0x9d, 0xb5, 0x0b, 0x78, 0xea, 0x24, 0x3b, 0xe0, 0x59, + 0x50, 0x88, 0x52, 0x33, 0x7d, 0x7f, 0x8d, 0xe3, 0xe8, 0x3c, 0x0d, 0x73, 0x73, 0x83, 0xc7, 0x46, + 0xb0, 0x9f, 0xc5, 0x0c, 0xa0, 0xcb, 0x78, 0x49, 0xea, 0xbc, 0x31, 0xd2, 0xa3, 0x92, 0x06, 0x74, + 0x95, 0x79, 0xc2, 0xd4, 0x2f, 0xe0, 0xcc, 0xae, 0xb8, 0xbe, 0x45, 0x43, 0xe4, 0xae, 0x3a, 0x25, + 0xd6, 0x85, 0x4b, 0x4f, 0x06, 0xb4, 0x90, 0x9e, 0xdd, 0xa1, 0xa2, 0x36, 0x51, 0x76, 0x1e, 0xcb, + 0xdd, 0xee, 0x1c, 0x15, 0xca, 0x2d, 0x83, 0xd6, 0x97, 0x52, 0xe1, 0x3c, 0x62, 0xc8, 0x52, 0xec, + 0xbe, 0x0e, 0x8f, 0x48, 0xf0, 0x24, 0xf9, 0xbe, 0xf7, 0xa8, 0x37, 0x1f, 0x43, 0x0f, 0x3a, 0x63, + 0x5d, 0x5a, 0x5f, 0x67, 0xbc, 0xbf, 0x7b, 0x83, 0x5e, 0x43, 0x19, 0x4e, 0x04, 0x99, 0x89, 0x00, + 0xb3, 0x32, 0x93, 0x65, 0xa5, 0x84, 0x2c, 0x32, 0xe9, 0xf7, 0x65, 0x7d, 0x77, 0xf1, 0xf5, 0xfd, + 0x9c, 0x06, 0x8f, 0xe6, 0x2e, 0x8c, 0x78, 0x93, 0x16, 0x43, 0x86, 0x5b, 0x7d, 0x46, 0xa6, 0xf8, + 0xb3, 0x04, 0x89, 0x5c, 0x80, 0x7e, 0xcf, 0xf2, 0x6f, 0xd5, 0x9a, 0x6e, 0x83, 0x79, 0x6a, 0x86, + 0xa5, 0x08, 0xaa, 0x96, 0x7f, 0xeb, 0xba, 0xdb, 0x30, 0xab, 0x7d, 0x1e, 0xfe, 0xa5, 0xff, 0x74, + 0x17, 0x8c, 0xa5, 0x16, 0x91, 0xec, 0x83, 0x3d, 0x96, 0x5f, 0xb3, 0x5d, 0x67, 0x83, 0x92, 0xd4, + 0x57, 0xed, 0xb5, 0xfc, 0x65, 0xd7, 0xd9, 0xb8, 0x77, 0xbb, 0x7e, 0x11, 0x06, 0x4c, 0x27, 0xf0, + 0xb6, 0x53, 0xde, 0xa0, 0xfc, 0xeb, 0x3c, 0x85, 0x63, 0x67, 0xc8, 0x0b, 0x30, 0x6a, 0x72, 0xa2, + 0x6b, 0x78, 0x4f, 0x28, 0x71, 0x1a, 0x8d, 0x08, 0xe0, 0xeb, 0x14, 0x56, 0xff, 0xa2, 0x86, 0xd1, + 0x2b, 0x85, 0x24, 0x5b, 0xb8, 0xe6, 0x63, 0xab, 0x76, 0x54, 0x76, 0xb4, 0x26, 0x11, 0xdd, 0xcf, + 0xe5, 0x7b, 0x16, 0xb5, 0x48, 0x96, 0x3d, 0x54, 0x44, 0xdd, 0x6d, 0xe2, 0x86, 0xc8, 0x84, 0x17, + 0x7c, 0xf6, 0xec, 0xcc, 0x22, 0xc3, 0x0d, 0xc1, 0x8e, 0x65, 0x7e, 0x14, 0x49, 0x2c, 0x8d, 0x42, + 0xd4, 0xb6, 0xf0, 0x28, 0x92, 0xe2, 0x40, 0x8a, 0xaf, 0xc4, 0x28, 0x2e, 0x69, 0xf3, 0xc4, 0xa8, + 0x9e, 0xc7, 0xeb, 0xbf, 0xc4, 0x42, 0x2c, 0x46, 0xf4, 0x61, 0x25, 0x0a, 0x11, 0x2f, 0x1c, 0x93, + 0xa6, 0x72, 0xa6, 0x6a, 0x5c, 0xf5, 0x7c, 0x8c, 0xdf, 0xbe, 0xa4, 0x2a, 0x13, 0xc7, 0xfc, 0x50, + 0x2c, 0xc2, 0x37, 0xd4, 0x76, 0x17, 0xca, 0x47, 0xf8, 0x76, 0x22, 0x86, 0x79, 0x34, 0x25, 0xc7, + 0xa9, 0x9f, 0xc3, 0xa8, 0xba, 0xec, 0x33, 0x1d, 0x89, 0x98, 0x80, 0xdd, 0x2c, 0x98, 0x5b, 0xa3, + 0xc1, 0xdc, 0xec, 0x87, 0x7e, 0x25, 0x05, 0x1a, 0x4a, 0xff, 0x8a, 0xe7, 0xae, 0x5b, 0x76, 0x39, + 0x7b, 0xe0, 0x93, 0x1a, 0xae, 0xa1, 0x04, 0x95, 0x70, 0xc0, 0xee, 0x69, 0xb1, 0x26, 0x5c, 0x81, + 0x27, 0x73, 0xa7, 0x22, 0x8a, 0x86, 0x03, 0x87, 0xb7, 0x37, 0xcb, 0xaf, 0x35, 0xcc, 0x75, 0xa3, + 0x6d, 0x07, 0xf8, 0x4a, 0xdf, 0x6f, 0xf9, 0x8b, 0xac, 0x41, 0xbf, 0x85, 0xd2, 0x70, 0xd1, 0x73, + 0x7d, 0x9f, 0x69, 0x9f, 0x15, 0xd7, 0xb5, 0x6f, 0x3a, 0x46, 0xcb, 0xdf, 0x74, 0xcb, 0x1d, 0x9b, + 0x33, 0xc0, 0x3c, 0x68, 0xf1, 0xa7, 0x39, 0xda, 0x44, 0x5f, 0x7e, 0xf4, 0x2f, 0x0e, 0xa1, 0x20, + 0x48, 0x47, 0xeb, 0xbc, 0x21, 0x45, 0x31, 0x69, 0x49, 0x4c, 0xe4, 0x0a, 0x0c, 0xb1, 0x0e, 0x18, + 0x29, 0x5b, 0x46, 0xf9, 0x33, 0xff, 0x20, 0x46, 0xdc, 0x92, 0x57, 0x60, 0x6f, 0x0b, 0x15, 0x21, + 0x6a, 0xee, 0x5a, 0xe0, 0x06, 0x31, 0x57, 0x7b, 0x2e, 0xc6, 0x71, 0x8e, 0x81, 0xb1, 0xb4, 0x1a, + 0xc2, 0x93, 0x6b, 0x30, 0xdc, 0x76, 0x3c, 0xd3, 0xb0, 0xad, 0x8f, 0x98, 0x8d, 0x5a, 0xcb, 0xb1, + 0xcb, 0x9c, 0x08, 0x43, 0x1d, 0xd0, 0x15, 0xc7, 0x26, 0x1f, 0x84, 0xa9, 0x38, 0xae, 0x9a, 0x38, + 0x31, 0x22, 0xce, 0xc4, 0x5c, 0xac, 0x93, 0x31, 0xac, 0xe2, 0x20, 0xa0, 0xc7, 0xd7, 0xed, 0xb6, + 0x15, 0x6c, 0xd7, 0x8c, 0x46, 0xd3, 0xf2, 0x7d, 0xcb, 0x75, 0x22, 0xde, 0xdf, 0x02, 0xc7, 0x17, + 0x05, 0x9e, 0xe7, 0xb0, 0xa4, 0x0a, 0x04, 0xf1, 0xd9, 0xd6, 0xed, 0xb6, 0xd5, 0xa0, 0xae, 0x51, + 0xe6, 0x7d, 0x2a, 0x86, 0x71, 0x8c, 0x81, 0x2f, 0x77, 0xa0, 0xc9, 0x4b, 0x30, 0x61, 0x39, 0x56, + 0x60, 0x19, 0x76, 0x7c, 0x99, 0xfa, 0x8a, 0x63, 0x25, 0x88, 0x20, 0xba, 0x4a, 0x1f, 0x84, 0xa9, + 0xa6, 0x61, 0x39, 0x81, 0xe9, 0x84, 0xd2, 0x10, 0x47, 0xdd, 0x5f, 0x62, 0x66, 0x23, 0x48, 0xa2, + 0xe8, 0x6f, 0xc1, 0xc1, 0x04, 0xd5, 0xd4, 0x57, 0xc2, 0x7c, 0x32, 0x38, 0x0c, 0x14, 0x1f, 0xe6, + 0xc1, 0x18, 0x07, 0xa1, 0xa6, 0xe3, 0x0e, 0xf5, 0x70, 0xb0, 0xeb, 0x30, 0xca, 0x6c, 0x19, 0xdb, + 0xf5, 0x39, 0xf2, 0x81, 0xe2, 0xc8, 0x87, 0x29, 0xf0, 0xb2, 0xeb, 0x23, 0xba, 0x1b, 0x30, 0xb6, + 0x6e, 0x9a, 0x35, 0xcf, 0xf4, 0x4d, 0x6f, 0xcb, 0x44, 0x7c, 0x83, 0x25, 0xc4, 0x62, 0xdd, 0x0c, + 0xd5, 0x59, 0x08, 0xcc, 0x10, 0x7e, 0x00, 0x26, 0x99, 0x6b, 0xcc, 0x76, 0xeb, 0xb7, 0x6a, 0x5e, + 0xb8, 0xc6, 0x9e, 0xd9, 0x34, 0x9d, 0x60, 0x6a, 0xa8, 0x38, 0xd6, 0x09, 0x8a, 0x62, 0xd9, 0xad, + 0xd3, 0x37, 0x36, 0x44, 0x40, 0x3e, 0x0c, 0xd3, 0x6c, 0x0f, 0x6e, 0x99, 0xb5, 0x76, 0xb8, 0x3f, + 0x36, 0x0d, 0xcb, 0xab, 0xb7, 0x83, 0x9a, 0x17, 0x1e, 0x61, 0xc3, 0xc5, 0xd1, 0xef, 0xe3, 0x68, + 0x5e, 0x6a, 0x39, 0xf6, 0x15, 0x86, 0xa4, 0x1a, 0xda, 0x45, 0x57, 0x60, 0x68, 0xd3, 0x34, 0xec, + 0x60, 0xb3, 0xb6, 0x6e, 0xd4, 0x03, 0xd7, 0x9b, 0x1a, 0x29, 0xf1, 0x08, 0xc9, 0x20, 0x97, 0x28, + 0x20, 0x69, 0x81, 0xee, 0x19, 0x41, 0x7d, 0xd3, 0x0c, 0xcc, 0x46, 0x4d, 0x2a, 0x7c, 0x63, 0xc5, + 0x69, 0x9e, 0x11, 0xe8, 0xae, 0x67, 0x4b, 0xe1, 0xab, 0xb0, 0xaf, 0x1e, 0x6a, 0x5c, 0x3e, 0x42, + 0x3b, 0xb0, 0xec, 0x70, 0x66, 0x2c, 0x77, 0x8a, 0x94, 0x98, 0xf9, 0x7a, 0x47, 0x6b, 0xbf, 0x14, + 0x58, 0x76, 0x35, 0x44, 0x40, 0x5e, 0x87, 0x19, 0xa1, 0x3f, 0x25, 0xab, 0x3b, 0x5e, 0x42, 0xc0, + 0x39, 0xae, 0x1b, 0x59, 0xab, 0x7c, 0x1b, 0x0e, 0x3b, 0xae, 0x53, 0xcb, 0x1b, 0x6f, 0xa2, 0xc4, + 0xd4, 0x39, 0xae, 0xb3, 0xa2, 0x18, 0xf2, 0x5a, 0x4f, 0xdf, 0xe8, 0xe8, 0x98, 0xbe, 0x1f, 0x03, + 0x66, 0xaf, 0xbb, 0x8d, 0xb6, 0x6d, 0x52, 0x0f, 0x17, 0x4f, 0x02, 0x79, 0x09, 0x63, 0x7b, 0x63, + 0x9f, 0x44, 0x30, 0x6d, 0xcc, 0x86, 0x92, 0x05, 0x50, 0x5f, 0x66, 0x49, 0x6a, 0x0c, 0x16, 0x6d, + 0xa6, 0x7d, 0xb0, 0x37, 0x7e, 0xef, 0xe7, 0xe3, 0xd5, 0x30, 0xe4, 0xf7, 0x5d, 0xbb, 0x28, 0xde, + 0x8e, 0x46, 0x1c, 0x55, 0xcd, 0x3b, 0x86, 0xd7, 0x58, 0x71, 0x2d, 0x27, 0x28, 0x94, 0xc8, 0x71, + 0x0a, 0x26, 0x5b, 0x26, 0xf3, 0x73, 0xb6, 0x5c, 0xd7, 0xae, 0x05, 0x56, 0xd3, 0xf4, 0x03, 0xa3, + 0xd9, 0xa2, 0x07, 0x74, 0x77, 0x75, 0x02, 0xbf, 0x86, 0xa7, 0xfe, 0x2a, 0xff, 0xa6, 0xff, 0x0c, + 0x8f, 0xe1, 0xcb, 0x18, 0x13, 0x99, 0x5b, 0x83, 0x07, 0xb8, 0xf5, 0x41, 0xf3, 0xef, 0x6a, 0x1e, + 0xed, 0x55, 0x6b, 0xd1, 0x6e, 0x8c, 0x8e, 0x62, 0x4b, 0x3e, 0x15, 0x35, 0xfd, 0xa2, 0x63, 0xe9, + 0x87, 0xf0, 0xf2, 0x12, 0xf9, 0x72, 0xd1, 0x68, 0xb6, 0x0c, 0x6b, 0xc3, 0xe1, 0xb3, 0xff, 0x6f, + 0x3d, 0x78, 0x41, 0xc9, 0xec, 0x83, 0xb4, 0xde, 0x86, 0x07, 0x43, 0x1a, 0xc3, 0x49, 0x40, 0x2a, + 0xeb, 0xd8, 0x25, 0xea, 0x4a, 0x3e, 0x2e, 0x75, 0xe6, 0x1b, 0xcc, 0x10, 0x8f, 0xe2, 0xa6, 0xd7, + 0x89, 0xfd, 0x81, 0xec, 0x13, 0xb9, 0x0b, 0x47, 0x12, 0x43, 0xd2, 0xe9, 0x17, 0xe3, 0xfa, 0xf5, + 0x4d, 0x33, 0x94, 0x4f, 0x7c, 0x7a, 0x7f, 0x4c, 0xfa, 0x94, 0xc9, 0x59, 0x61, 0xd3, 0xe2, 0xda, + 0xd5, 0x43, 0xb1, 0x41, 0xc3, 0x26, 0xde, 0xe9, 0x26, 0xe2, 0x24, 0x1f, 0x82, 0xfd, 0x54, 0x67, + 0x65, 0xae, 0x4c, 0x09, 0x33, 0x6a, 0x92, 0x62, 0x49, 0xad, 0x0b, 0xf9, 0x84, 0x06, 0xc7, 0xb8, + 0x54, 0x15, 0xe3, 0xb2, 0xa7, 0x2c, 0x97, 0x47, 0x11, 0xff, 0x6a, 0x2e, 0xb3, 0x4d, 0x38, 0x24, + 0x68, 0x91, 0x32, 0xbd, 0xbb, 0xb8, 0x38, 0x3e, 0xc4, 0x47, 0xce, 0xe4, 0x5d, 0x3f, 0x8f, 0x32, + 0x79, 0xd5, 0xbf, 0xd1, 0x0a, 0xcc, 0xc6, 0x8d, 0x76, 0x70, 0x63, 0x9d, 0x75, 0xf0, 0xf3, 0x93, + 0xc0, 0x16, 0x51, 0x58, 0x33, 0x81, 0x51, 0x58, 0x0f, 0xc2, 0xa0, 0xe5, 0xd7, 0xdc, 0xf0, 0x3b, + 0x8d, 0xf6, 0x62, 0xfe, 0x15, 0xb0, 0x04, 0x88, 0xfe, 0x28, 0x3e, 0x57, 0xa5, 0x70, 0xe0, 0x43, + 0x9e, 0x50, 0x4d, 0x8b, 0xe8, 0xfa, 0x53, 0x74, 0xc4, 0x41, 0x15, 0x2a, 0x44, 0x7f, 0x16, 0xaf, + 0x47, 0x4b, 0xa6, 0xb9, 0x68, 0xf9, 0xec, 0xa9, 0x10, 0xaf, 0x18, 0x91, 0x7b, 0xb9, 0x9c, 0xe9, + 0xbf, 0xd7, 0xf0, 0x4a, 0x23, 0x43, 0x80, 0x34, 0x3c, 0x04, 0x10, 0x58, 0xe1, 0xf1, 0x81, 0xb1, + 0x2d, 0xda, 0xd1, 0x9e, 0x6a, 0x7f, 0xd8, 0xc2, 0xde, 0xa4, 0xae, 0xc3, 0xa0, 0xb8, 0xee, 0x74, + 0xde, 0x40, 0x64, 0xde, 0x86, 0xc8, 0x58, 0xab, 0x96, 0xe9, 0xd1, 0x81, 0x06, 0x8c, 0xce, 0xa8, + 0xe4, 0x1a, 0x0c, 0x08, 0xfd, 0x15, 0xd8, 0xf8, 0xfa, 0xf1, 0x58, 0x31, 0x6c, 0xab, 0xab, 0xcb, + 0x55, 0xe0, 0x5a, 0x2b, 0xb0, 0x85, 0x9e, 0x8a, 0x74, 0xe3, 0xe2, 0xc9, 0x97, 0xe2, 0xa3, 0x3c, + 0xc6, 0x27, 0xb3, 0x8f, 0xb8, 0x6e, 0xef, 0x0d, 0x0d, 0xbc, 0x06, 0x7e, 0xef, 0x6c, 0x1f, 0xad, + 0x28, 0xaf, 0x02, 0xe5, 0xf8, 0x7a, 0xba, 0x51, 0x7f, 0x1e, 0x4f, 0x12, 0xbc, 0x6a, 0x5d, 0xb7, + 0xfc, 0x26, 0x35, 0x54, 0x84, 0xe4, 0xce, 0xc0, 0x40, 0xa3, 0xed, 0x07, 0xdc, 0xa2, 0xd2, 0xe8, + 0x11, 0x01, 0x61, 0x13, 0x33, 0x95, 0xf4, 0x5f, 0xed, 0x86, 0x91, 0x04, 0x34, 0xd1, 0x21, 0x76, + 0xeb, 0x2c, 0x9e, 0x36, 0x44, 0xe6, 0xa1, 0xdf, 0xd8, 0x32, 0xac, 0xd2, 0x41, 0xbd, 0x1d, 0xa8, + 0xf0, 0x44, 0x67, 0xe6, 0x59, 0x89, 0xbb, 0x1c, 0x83, 0x20, 0x4b, 0x30, 0x88, 0x97, 0xd5, 0xda, + 0xa6, 0x6b, 0x37, 0xca, 0xdc, 0xdb, 0x06, 0x10, 0xf0, 0x8a, 0x6b, 0x37, 0xc2, 0x7b, 0xa5, 0xf9, + 0x46, 0xcb, 0xac, 0x87, 0x1b, 0x96, 0xd1, 0x52, 0xe2, 0xaa, 0x36, 0xc4, 0x41, 0x99, 0x61, 0x78, + 0x11, 0xa0, 0x61, 0xad, 0x63, 0x80, 0x49, 0x99, 0x0b, 0x5a, 0x04, 0x4c, 0xbf, 0x83, 0x87, 0x77, + 0xc6, 0x32, 0xa3, 0xa0, 0xbd, 0x04, 0x84, 0xb3, 0xde, 0x14, 0x5f, 0xd1, 0x4c, 0x79, 0x44, 0x9d, + 0x11, 0xcb, 0xb1, 0x55, 0xc7, 0xd6, 0x92, 0xe8, 0xf5, 0x23, 0xb8, 0xd1, 0xb1, 0x6b, 0x78, 0x1d, + 0x5a, 0xe8, 0x4c, 0x94, 0x50, 0x4b, 0x9f, 0xea, 0x82, 0xbd, 0x91, 0x2e, 0xcc, 0x80, 0xa5, 0x53, + 0xf9, 0x7f, 0x5c, 0x94, 0xf4, 0x5f, 0xe4, 0x8e, 0x39, 0xe9, 0x0c, 0xe2, 0x02, 0x5a, 0x30, 0xcd, + 0x07, 0xa4, 0xf7, 0xd7, 0xe8, 0xe8, 0x79, 0x91, 0xe0, 0x99, 0x53, 0x5f, 0xdd, 0xb7, 0x96, 0x3d, + 0xa4, 0x38, 0x6d, 0x12, 0x3a, 0x30, 0x34, 0x8e, 0x2d, 0x3f, 0xb0, 0xea, 0x62, 0x59, 0xcf, 0xc1, + 0x50, 0xec, 0x03, 0x21, 0xd0, 0x13, 0xaa, 0x6f, 0x54, 0xe5, 0xf4, 0xef, 0x70, 0xf5, 0x3a, 0x99, + 0xee, 0x3d, 0x55, 0xf6, 0x43, 0x77, 0xf0, 0xa0, 0x52, 0x8c, 0x21, 0x7c, 0xcd, 0xe0, 0x8b, 0xd6, + 0x9c, 0xfc, 0xcd, 0x18, 0x8a, 0x6a, 0x04, 0x2e, 0x34, 0xe6, 0xaf, 0x5b, 0x81, 0xfb, 0xb2, 0xd1, + 0xb6, 0xe9, 0x69, 0x20, 0x78, 0xf8, 0x33, 0x0d, 0x26, 0x93, 0x5f, 0x70, 0xe4, 0xc7, 0x60, 0xb4, + 0x69, 0xf8, 0x81, 0xe9, 0xf1, 0xa0, 0x29, 0x93, 0x1f, 0x95, 0x23, 0xac, 0x7d, 0x9e, 0x37, 0x93, + 0x13, 0x30, 0xd1, 0x10, 0x46, 0x7d, 0xa4, 0x3b, 0x0b, 0xd5, 0x18, 0xef, 0x7c, 0xeb, 0x80, 0x1c, + 0x81, 0x61, 0xbf, 0xe5, 0x06, 0x91, 0xce, 0x2c, 0x4e, 0x65, 0x28, 0x6c, 0x8d, 0x75, 0xab, 0xdf, + 0x99, 0x3b, 0x1e, 0xe9, 0xd6, 0xc3, 0xba, 0x85, 0xad, 0xa2, 0x9b, 0xbe, 0x88, 0x8a, 0x1e, 0x9d, + 0xd6, 0x8b, 0x4b, 0x9e, 0xdb, 0xa4, 0x2c, 0x45, 0xdc, 0x87, 0x5b, 0xe1, 0xef, 0x5a, 0xfc, 0x45, + 0x76, 0x90, 0x36, 0xf2, 0xf0, 0x2f, 0x1e, 0xd5, 0x9d, 0x81, 0x05, 0xe7, 0x44, 0xe9, 0xd7, 0xe6, + 0xae, 0xf1, 0x2b, 0x96, 0x1f, 0xb8, 0x9e, 0x55, 0x17, 0xd6, 0x54, 0xdd, 0x8d, 0x18, 0x4b, 0x4a, + 0x14, 0x2e, 0x2a, 0x14, 0x19, 0x0a, 0xe1, 0xce, 0x1f, 0xe2, 0x46, 0x1f, 0xfd, 0x90, 0x93, 0x1f, + 0x1b, 0xc3, 0x31, 0x18, 0x44, 0x7e, 0xe9, 0x5f, 0xd2, 0x60, 0x9c, 0x7e, 0x66, 0x23, 0x86, 0x96, + 0x53, 0x78, 0xa5, 0x23, 0x4f, 0x02, 0x61, 0x23, 0x6c, 0x78, 0x6e, 0xbb, 0x15, 0xda, 0x9a, 0xbe, + 0x59, 0x47, 0xc1, 0x1e, 0xa5, 0x5f, 0x2e, 0xe3, 0x87, 0x9b, 0x66, 0x9d, 0xec, 0x83, 0x3d, 0x4d, + 0xe3, 0x8d, 0x9a, 0xb1, 0x61, 0xa2, 0x98, 0xf7, 0x36, 0x8d, 0x37, 0xe6, 0x37, 0x4c, 0x32, 0x0b, + 0xe3, 0x96, 0x53, 0xb7, 0xdb, 0x21, 0xa9, 0xc6, 0x9d, 0xda, 0x26, 0x1b, 0x04, 0x33, 0x52, 0xc6, + 0xf0, 0x53, 0xd5, 0xb8, 0x83, 0xa3, 0x87, 0x32, 0xc7, 0xfb, 0x0b, 0x3f, 0x3c, 0x8d, 0x38, 0xab, + 0x8e, 0x60, 0x3b, 0x77, 0xb2, 0xeb, 0x9f, 0xd6, 0x30, 0xda, 0x40, 0x64, 0xff, 0x1a, 0x81, 0x65, + 0x5b, 0xc1, 0x76, 0xa1, 0x48, 0xaa, 0x0f, 0xc1, 0x5e, 0xc6, 0x1f, 0x92, 0x14, 0xda, 0x9f, 0x21, + 0xe3, 0x39, 0x56, 0x56, 0xc6, 0x54, 0x55, 0xc7, 0x83, 0x74, 0xa3, 0xfe, 0x5f, 0x5a, 0x4c, 0x22, + 0xa3, 0xd4, 0x89, 0x24, 0x3a, 0xd8, 0x12, 0xad, 0x18, 0x77, 0x34, 0x93, 0x7b, 0xea, 0x75, 0x40, + 0xc8, 0x2b, 0x30, 0xca, 0x89, 0x17, 0x73, 0xd5, 0x95, 0x72, 0xd4, 0x63, 0x5d, 0x19, 0x2c, 0x33, + 0x33, 0xcb, 0xa7, 0x2f, 0xa2, 0x69, 0x46, 0x10, 0x0b, 0xff, 0x44, 0x2e, 0xc2, 0x40, 0x74, 0xb1, + 0xba, 0xa9, 0x6c, 0xe9, 0xf9, 0xb2, 0x55, 0x05, 0x4f, 0xac, 0xa4, 0x7e, 0x12, 0xd3, 0x43, 0x16, + 0x2c, 0xc7, 0xe0, 0xb3, 0x90, 0x17, 0xe8, 0xa5, 0xaf, 0x61, 0x5e, 0x47, 0x02, 0x48, 0xa8, 0xc2, + 0x44, 0x94, 0x8a, 0x6c, 0x95, 0x18, 0x38, 0x2e, 0x45, 0x32, 0x48, 0xe5, 0x36, 0x1c, 0xcb, 0x8c, + 0x3b, 0xbc, 0xe8, 0x3a, 0x0d, 0x8b, 0x05, 0xa8, 0xdf, 0xef, 0xda, 0x38, 0x9f, 0xe9, 0x86, 0x43, + 0xa9, 0x08, 0xb9, 0xe4, 0x78, 0x3f, 0xb9, 0xc1, 0xa5, 0x97, 0x61, 0x30, 0xf0, 0xac, 0x8d, 0x0d, + 0xd3, 0x5b, 0x29, 0x1b, 0x05, 0x15, 0x03, 0xcc, 0x0f, 0x32, 0x3d, 0x02, 0x7b, 0x2c, 0x9f, 0x86, + 0x16, 0x52, 0x93, 0xb3, 0x6f, 0x61, 0xe0, 0x87, 0xef, 0xcc, 0xf0, 0xa6, 0x2a, 0xff, 0x23, 0x11, + 0x8b, 0xba, 0x47, 0x12, 0x8b, 0xda, 0xd7, 0x89, 0x45, 0xfd, 0xa8, 0x16, 0x8b, 0xe3, 0x57, 0x0a, + 0x85, 0x28, 0x5f, 0x12, 0x8f, 0x8c, 0x3c, 0x5b, 0x34, 0x32, 0x32, 0x89, 0x52, 0xc4, 0x47, 0xf2, + 0x30, 0x1d, 0x9e, 0x66, 0x5a, 0x2a, 0x95, 0x43, 0xff, 0x6d, 0xee, 0xc1, 0xca, 0x00, 0x47, 0x92, + 0x2f, 0x40, 0xcf, 0x82, 0x25, 0x0e, 0x8b, 0xa3, 0x6a, 0x82, 0x23, 0x01, 0x9c, 0x14, 0x2a, 0x84, + 0x9e, 0xf7, 0x6f, 0xf1, 0xda, 0x22, 0x25, 0xa0, 0x43, 0xa8, 0x8c, 0xdc, 0x09, 0xfe, 0xfc, 0x1d, + 0x0f, 0xd7, 0x2a, 0xc7, 0xf4, 0x5b, 0xdc, 0x7c, 0x94, 0x22, 0xf9, 0xb1, 0x64, 0xfd, 0x6d, 0x0d, + 0xc6, 0x52, 0xbd, 0xdf, 0xd3, 0xfd, 0x1f, 0xdf, 0x31, 0xdd, 0xc9, 0x1d, 0x93, 0x52, 0x81, 0x3d, + 0x19, 0xcf, 0xca, 0xd7, 0x71, 0x0f, 0x61, 0x30, 0x5c, 0xe0, 0x36, 0xad, 0xfa, 0xa5, 0x37, 0xcc, + 0x7a, 0x3b, 0x14, 0xf6, 0x25, 0xd3, 0xbc, 0xde, 0xb6, 0x03, 0xab, 0x65, 0x5b, 0xa6, 0x57, 0x68, + 0x6d, 0xb7, 0x30, 0xb4, 0xaa, 0x08, 0x3a, 0x11, 0x21, 0x08, 0x4d, 0xd1, 0x5a, 0x66, 0x1a, 0x23, + 0x60, 0xfa, 0x59, 0x5e, 0x45, 0x88, 0xae, 0xf0, 0xcd, 0xc0, 0xb8, 0x65, 0x5e, 0xf6, 0x8c, 0x4e, + 0x82, 0xc8, 0x14, 0xec, 0xd9, 0x08, 0x7f, 0x9b, 0x26, 0xf7, 0xfb, 0xe0, 0x4f, 0xfd, 0xd7, 0x45, + 0x91, 0xa0, 0x14, 0x28, 0x12, 0x78, 0x16, 0x76, 0xd3, 0xce, 0xe8, 0xdf, 0x90, 0x9d, 0xa9, 0x0c, + 0x9e, 0x81, 0x32, 0x00, 0xf2, 0x02, 0x74, 0x42, 0x74, 0x6a, 0x0c, 0x87, 0xba, 0xe6, 0x80, 0x78, + 0x5b, 0x65, 0x68, 0x86, 0xcd, 0xd8, 0x6f, 0x7d, 0x15, 0xb5, 0x05, 0xfd, 0x35, 0xdf, 0x0e, 0x36, + 0x5d, 0xcf, 0xfa, 0x08, 0x7d, 0xe7, 0x4c, 0xf1, 0xe9, 0xc5, 0xf9, 0xf4, 0xa2, 0x33, 0xd0, 0x15, + 0x9f, 0x81, 0xf7, 0xa3, 0x5f, 0x28, 0x0b, 0x2b, 0x4e, 0xc1, 0x69, 0xe8, 0xc5, 0xbc, 0x18, 0xad, + 0x48, 0xd6, 0x25, 0x76, 0x16, 0x5e, 0xc8, 0x34, 0x66, 0x3f, 0x97, 0x60, 0xfd, 0x0b, 0xdc, 0x17, + 0x95, 0x09, 0x8d, 0x84, 0xbd, 0x0f, 0x08, 0x73, 0xa7, 0x52, 0xa8, 0x5a, 0x19, 0x22, 0x47, 0x29, + 0x20, 0x43, 0xce, 0x72, 0x77, 0xe6, 0xa1, 0x97, 0xa2, 0xf1, 0x73, 0xdc, 0xdd, 0x19, 0x13, 0x85, + 0x80, 0xfa, 0x59, 0x34, 0xa0, 0x30, 0x92, 0x84, 0xdd, 0x50, 0x0b, 0xed, 0x9c, 0xd7, 0xd0, 0x8a, + 0x4a, 0x40, 0x22, 0x9f, 0xcf, 0xc2, 0x1e, 0x1e, 0xb2, 0xc0, 0xa4, 0xf0, 0x61, 0x65, 0x55, 0x1d, + 0x0e, 0xce, 0x81, 0x44, 0x05, 0xba, 0xd8, 0xe7, 0xc8, 0xe3, 0xd0, 0x03, 0x99, 0x5f, 0xa5, 0xf5, + 0xc8, 0x8a, 0x8d, 0xde, 0xa9, 0x47, 0x76, 0x0b, 0x86, 0x62, 0x9f, 0xd4, 0x66, 0xfe, 0x33, 0x1d, + 0x66, 0x4b, 0xe8, 0x45, 0xc1, 0xeb, 0x29, 0x11, 0xd0, 0xec, 0xb8, 0xcd, 0xeb, 0x96, 0xc3, 0x33, + 0x18, 0xd5, 0x65, 0xa4, 0x5e, 0x13, 0x91, 0xcc, 0x49, 0xa8, 0x4e, 0x1d, 0xbe, 0x98, 0x78, 0x15, + 0xb3, 0xb6, 0x70, 0x27, 0xcc, 0x48, 0xb0, 0x8b, 0x25, 0xd8, 0x16, 0xe1, 0xde, 0xa9, 0x0e, 0x38, + 0xfe, 0x2b, 0x30, 0xce, 0xea, 0x42, 0x35, 0x2d, 0x47, 0x64, 0x76, 0xf2, 0x05, 0x79, 0x54, 0x55, + 0x1c, 0x2a, 0xca, 0xcd, 0x58, 0x23, 0x39, 0x80, 0xfe, 0x3a, 0x0c, 0xde, 0x68, 0x99, 0xce, 0xd5, + 0x70, 0xd7, 0xe5, 0x5e, 0xc1, 0xee, 0x71, 0x6d, 0xce, 0xe0, 0xb3, 0x67, 0x74, 0xc0, 0x42, 0xdb, + 0xe3, 0xfd, 0xb8, 0xb1, 0xe2, 0x80, 0x99, 0x4b, 0x23, 0xbf, 0x52, 0xc7, 0x80, 0x11, 0xe4, 0xf1, + 0x53, 0xd0, 0x2f, 0xaa, 0x00, 0x91, 0x09, 0x18, 0x0d, 0xff, 0xad, 0xbd, 0xe4, 0xf8, 0x2d, 0xb3, + 0x6e, 0xad, 0x5b, 0x66, 0x63, 0x74, 0x17, 0xd9, 0x03, 0xdd, 0x0b, 0xed, 0xed, 0x51, 0x8d, 0xf4, + 0x41, 0xcf, 0x4d, 0xd3, 0xb6, 0x47, 0xbb, 0x1e, 0x7f, 0x19, 0x26, 0xb2, 0x12, 0xf8, 0x42, 0x04, + 0x11, 0x58, 0x8a, 0x78, 0x74, 0x17, 0x19, 0x87, 0x91, 0x25, 0xcf, 0x6d, 0xbe, 0xe2, 0x7a, 0x7e, + 0xb0, 0xea, 0x2e, 0x98, 0x7e, 0x30, 0xaa, 0xf1, 0xc6, 0xf0, 0xd7, 0xaa, 0x4b, 0x3f, 0x8d, 0x76, + 0xcd, 0xfd, 0xc7, 0x6d, 0xd8, 0x4d, 0x19, 0x25, 0x6f, 0x6b, 0xb0, 0x77, 0xf9, 0x64, 0xc2, 0x3e, + 0x5a, 0x70, 0xdd, 0x5b, 0xe4, 0x69, 0x55, 0x35, 0x44, 0xb5, 0x65, 0x36, 0x7d, 0x7e, 0x47, 0xb0, + 0x6c, 0x9e, 0xf5, 0xf9, 0x8f, 0xbe, 0xfd, 0x8f, 0xbf, 0xdc, 0x75, 0x9e, 0x9c, 0xab, 0x64, 0x97, + 0x4d, 0xed, 0xb8, 0x8c, 0x2a, 0xcb, 0x27, 0x05, 0xbd, 0x95, 0xbb, 0x62, 0x59, 0xdf, 0x24, 0x5f, + 0xd6, 0x60, 0x64, 0xf9, 0xa4, 0x30, 0x75, 0x29, 0x3f, 0xa7, 0xf2, 0x68, 0xca, 0x32, 0xac, 0xa7, + 0x4f, 0x97, 0x84, 0x42, 0x1e, 0xce, 0x53, 0x1e, 0x4e, 0x93, 0x93, 0x12, 0x1e, 0xfc, 0x96, 0x1b, + 0x48, 0xa9, 0xff, 0x4d, 0x0d, 0xc6, 0x33, 0x6a, 0x75, 0x92, 0x13, 0x2a, 0x5a, 0x32, 0xab, 0x7e, + 0x4e, 0xcf, 0x95, 0x01, 0x41, 0xda, 0x8f, 0x51, 0xda, 0x1f, 0x25, 0x47, 0x2a, 0xea, 0x3a, 0xb9, + 0x48, 0xd5, 0x1f, 0x69, 0x40, 0xd2, 0xc5, 0x31, 0xc9, 0xe9, 0xb2, 0xc5, 0x34, 0x19, 0xc1, 0x4f, + 0xed, 0xac, 0x06, 0xa7, 0xfe, 0x34, 0x25, 0xfa, 0x14, 0x99, 0xcb, 0x21, 0xba, 0xe2, 0xa7, 0x49, + 0xfd, 0xb2, 0x06, 0x63, 0x29, 0xd4, 0x6a, 0x79, 0x91, 0x15, 0x8e, 0x9b, 0x3e, 0x5d, 0x12, 0x0a, + 0xc9, 0x3f, 0x47, 0xc9, 0x3f, 0x49, 0x4e, 0x94, 0x26, 0x9f, 0x7c, 0x49, 0x83, 0xd1, 0x64, 0x91, + 0x4f, 0x72, 0xb2, 0xc8, 0xba, 0x27, 0x0e, 0xe8, 0xe9, 0x53, 0xe5, 0x80, 0x90, 0xf4, 0xb3, 0x94, + 0xf4, 0x39, 0x72, 0x3c, 0x8f, 0x74, 0x33, 0x49, 0xe4, 0x1f, 0x6a, 0x30, 0x92, 0x28, 0x9a, 0x49, + 0x94, 0x02, 0x9b, 0x5d, 0x68, 0x74, 0xfa, 0x64, 0x29, 0x98, 0x82, 0x5a, 0x46, 0xfc, 0x9d, 0xa8, + 0x25, 0x5a, 0xb9, 0x8b, 0xf3, 0xff, 0x26, 0x9d, 0xf9, 0x64, 0xd1, 0x4f, 0x52, 0x86, 0x98, 0x62, + 0x33, 0x2f, 0xab, 0x2b, 0x5a, 0x7c, 0xe6, 0x93, 0xe5, 0x50, 0xc9, 0xb7, 0x35, 0xd8, 0x9b, 0x59, + 0x61, 0x91, 0x9c, 0x2d, 0x44, 0x49, 0x46, 0xc1, 0xcf, 0xe9, 0x73, 0x3b, 0x80, 0x44, 0x46, 0xae, + 0x52, 0x46, 0x2e, 0x92, 0xf9, 0xc2, 0x8c, 0x44, 0xd1, 0xc4, 0x74, 0xe7, 0x5f, 0x69, 0x30, 0x99, + 0x5d, 0x3b, 0x92, 0x94, 0x27, 0x50, 0xac, 0xcf, 0xd3, 0x3b, 0x01, 0x45, 0xe6, 0x9e, 0xa5, 0xcc, + 0x9d, 0x25, 0x4f, 0xed, 0x88, 0x39, 0x9f, 0xfc, 0x7c, 0x17, 0x1c, 0x2e, 0x50, 0xda, 0x93, 0x2c, + 0x29, 0x69, 0x2c, 0x5c, 0xff, 0x74, 0xfa, 0xf2, 0x3d, 0xe3, 0x41, 0xc6, 0x5f, 0xa1, 0x8c, 0xbf, + 0x48, 0x6e, 0xe4, 0x32, 0xce, 0x90, 0xd6, 0x78, 0x43, 0x2d, 0x40, 0xb4, 0xb5, 0x58, 0x89, 0xd2, + 0xca, 0x5d, 0xfa, 0xf3, 0x4d, 0xf2, 0xc9, 0x2e, 0x78, 0xb8, 0x48, 0xb1, 0x53, 0x72, 0xaf, 0xac, + 0x88, 0xf5, 0xbf, 0x72, 0xef, 0x88, 0x70, 0x52, 0x56, 0xe8, 0xa4, 0x5c, 0x23, 0x57, 0xee, 0xd3, + 0xa4, 0xf8, 0xe4, 0xd3, 0x1a, 0x0c, 0x44, 0x2a, 0xf1, 0x91, 0x59, 0xe5, 0x09, 0x94, 0x2a, 0x1e, + 0x38, 0x5d, 0x29, 0xdc, 0x1f, 0x59, 0x78, 0x82, 0xb2, 0x70, 0x84, 0x1c, 0x56, 0xd9, 0x36, 0xe8, + 0x52, 0x27, 0x9f, 0xd3, 0x00, 0x22, 0xc5, 0x15, 0x8f, 0x15, 0x1b, 0x8c, 0xd3, 0x36, 0x5b, 0xb4, + 0x3b, 0x92, 0x76, 0x86, 0x92, 0x76, 0x82, 0x54, 0x0a, 0x90, 0x16, 0x53, 0x1b, 0xbf, 0xa5, 0xc1, + 0x48, 0xa2, 0xa4, 0xa1, 0xfa, 0x28, 0xca, 0xae, 0xc4, 0xa8, 0x3e, 0x8a, 0x24, 0x35, 0x13, 0xf5, + 0xe3, 0x94, 0xea, 0xc7, 0xc9, 0x51, 0x15, 0xd5, 0xeb, 0x6d, 0xdb, 0xae, 0xf1, 0x59, 0x7d, 0x2b, + 0x5d, 0xb6, 0xf2, 0x44, 0xf1, 0x91, 0x0b, 0x19, 0x87, 0xd9, 0x05, 0x11, 0x8b, 0x19, 0xb6, 0x11, + 0x5a, 0x63, 0xb3, 0xfc, 0x3b, 0x1a, 0x0c, 0xc5, 0xec, 0x65, 0x72, 0x3c, 0x6f, 0x81, 0x53, 0x06, + 0xf9, 0x89, 0x12, 0x10, 0x05, 0x8d, 0x2b, 0x4a, 0xb3, 0xf8, 0x7f, 0x1d, 0x62, 0x14, 0x7f, 0x4d, + 0x83, 0xd1, 0x64, 0x01, 0x1f, 0xf5, 0x11, 0x2f, 0xa9, 0x7c, 0xa8, 0x3e, 0xe2, 0x65, 0x05, 0xf4, + 0xf4, 0x25, 0x4a, 0xfa, 0xf3, 0xe4, 0xd9, 0x5c, 0xd2, 0x63, 0xf2, 0x5c, 0xb9, 0x1b, 0xf3, 0xc9, + 0xbe, 0x49, 0xfe, 0x59, 0x83, 0x29, 0x59, 0xf9, 0x3c, 0xa2, 0xbc, 0xad, 0xe5, 0xd4, 0x59, 0x9c, + 0xbe, 0xb0, 0x33, 0xe0, 0x82, 0xea, 0x50, 0xc6, 0x1f, 0xf2, 0x26, 0x8c, 0x31, 0xfe, 0x76, 0xff, + 0x26, 0xf9, 0x9b, 0xf0, 0x3a, 0x92, 0x2a, 0x73, 0x99, 0x73, 0x1d, 0x91, 0x55, 0xe7, 0xcc, 0xb9, + 0x8e, 0x48, 0xab, 0x69, 0x96, 0xe1, 0xab, 0xb6, 0xb6, 0x8d, 0xe5, 0x38, 0x94, 0x2b, 0xf8, 0x96, + 0x06, 0xa3, 0xc9, 0xff, 0x3f, 0x43, 0x2d, 0x89, 0x92, 0xff, 0xd0, 0x63, 0xfa, 0x54, 0x39, 0x20, + 0xe4, 0xe8, 0x34, 0xe5, 0xa8, 0x42, 0x8e, 0x55, 0x14, 0xff, 0x2f, 0x8a, 0x9f, 0x22, 0xfb, 0x3b, + 0x1a, 0xec, 0xef, 0x48, 0x37, 0x3d, 0x1b, 0x2d, 0xd3, 0x79, 0x0f, 0x76, 0x52, 0xa1, 0x15, 0x09, + 0x38, 0x7d, 0xb5, 0x02, 0x7b, 0xea, 0xf3, 0x1a, 0x0c, 0xc7, 0x2b, 0x35, 0x92, 0x5c, 0xe5, 0x94, + 0xaa, 0x27, 0xa9, 0x56, 0xc2, 0xd9, 0x85, 0x20, 0xf5, 0x59, 0xca, 0xcb, 0x51, 0xf2, 0x88, 0x8a, + 0x17, 0xbf, 0x43, 0xd6, 0x67, 0x51, 0xef, 0x8a, 0x7a, 0x88, 0xf9, 0x7a, 0x37, 0x59, 0xb6, 0x71, + 0xfa, 0x44, 0x09, 0x88, 0x82, 0x8e, 0x04, 0x41, 0x26, 0xa3, 0xe9, 0xeb, 0xb8, 0x73, 0xe3, 0x05, + 0x2c, 0xf2, 0x77, 0x6e, 0x66, 0x85, 0xc0, 0xfc, 0x9d, 0x9b, 0x5d, 0x12, 0x30, 0xf7, 0x5e, 0xc8, + 0x4c, 0x88, 0x64, 0x4d, 0x8e, 0xd8, 0xa1, 0xf1, 0x8e, 0x06, 0x53, 0xb2, 0xd2, 0x83, 0x6a, 0x65, + 0x9b, 0x53, 0xf6, 0x50, 0xad, 0x6c, 0xf3, 0xaa, 0x1d, 0xea, 0x97, 0x29, 0x6b, 0xf3, 0xe4, 0xb9, + 0x7c, 0xc7, 0x9a, 0x9a, 0xc1, 0x3f, 0xd7, 0x60, 0x3c, 0xc3, 0x83, 0x47, 0x9e, 0x2a, 0x46, 0x5e, + 0xea, 0x4c, 0x3f, 0x53, 0x1a, 0x0e, 0x39, 0x7a, 0x8e, 0x72, 0x74, 0x8e, 0x9c, 0xc9, 0xe7, 0x28, + 0xfb, 0x7c, 0xff, 0xae, 0x06, 0x93, 0xd9, 0x55, 0xa6, 0xd4, 0xd7, 0x45, 0x65, 0x85, 0x33, 0xf5, + 0x75, 0x51, 0x5d, 0xd4, 0x4a, 0x5f, 0xa6, 0x2c, 0x2d, 0x91, 0xc5, 0x82, 0x2c, 0xa9, 0x75, 0xd4, + 0x7f, 0x6b, 0x70, 0x40, 0x5d, 0xd2, 0x8a, 0xcc, 0x17, 0x3f, 0xc0, 0x65, 0xfc, 0x2e, 0xdc, 0x0b, + 0x0a, 0xe4, 0xfb, 0x65, 0xca, 0xf7, 0x0a, 0x79, 0x61, 0x47, 0x7c, 0xcb, 0xed, 0x81, 0x7f, 0x8d, + 0x6d, 0xc6, 0x84, 0x55, 0x70, 0xbe, 0x84, 0xe0, 0xa5, 0x6c, 0x83, 0x0b, 0x3b, 0x03, 0xde, 0x29, + 0xbf, 0x05, 0xed, 0x84, 0x7f, 0xd7, 0x60, 0x26, 0x29, 0x62, 0xc9, 0x63, 0xf7, 0x3d, 0x12, 0xed, + 0x12, 0x2c, 0x97, 0x3a, 0x88, 0x7f, 0x57, 0x83, 0xb1, 0x54, 0x01, 0x23, 0xb5, 0xff, 0x56, 0x56, + 0x67, 0x4c, 0xed, 0xbf, 0x95, 0x56, 0x49, 0xd2, 0x4f, 0x50, 0xd6, 0x9e, 0x20, 0x8f, 0x15, 0x50, + 0xad, 0x48, 0xdf, 0x57, 0x34, 0x18, 0x4d, 0xd5, 0xc7, 0x3a, 0x59, 0x66, 0xf8, 0x42, 0x06, 0x91, + 0xac, 0x66, 0x92, 0xfe, 0x0c, 0x25, 0xf9, 0x0c, 0x39, 0x5d, 0x98, 0xe4, 0x98, 0xe6, 0xfc, 0x8e, + 0x06, 0xfb, 0x24, 0x55, 0x8e, 0xd4, 0x4f, 0x47, 0xea, 0xf2, 0x4a, 0xd3, 0xe7, 0x77, 0x04, 0x8b, + 0x3c, 0x2d, 0x52, 0x9e, 0x9e, 0x25, 0x17, 0x8a, 0xf2, 0xc4, 0xf5, 0x44, 0x8c, 0xb5, 0x3f, 0xd1, + 0x60, 0x22, 0xab, 0x0a, 0x03, 0x39, 0x53, 0xcc, 0x72, 0x4e, 0xd5, 0x62, 0x9a, 0x3e, 0x5b, 0x1e, + 0xb0, 0xa0, 0x47, 0x43, 0xfc, 0x9d, 0xdc, 0x14, 0xdf, 0xd5, 0x60, 0x6f, 0x66, 0xf5, 0x05, 0x52, + 0x90, 0x98, 0x74, 0x09, 0x09, 0xb5, 0x8b, 0x57, 0x59, 0x31, 0x42, 0xbf, 0x41, 0xf9, 0xb8, 0x4a, + 0x2e, 0x17, 0x7f, 0xe0, 0xa8, 0xd1, 0x52, 0x2f, 0x58, 0x2a, 0x22, 0xc5, 0xdf, 0x3f, 0x69, 0xb0, + 0x4f, 0x52, 0xa9, 0x41, 0x2d, 0x7f, 0xea, 0x62, 0x12, 0x6a, 0xf9, 0xcb, 0x29, 0x0d, 0xa1, 0x57, + 0x29, 0x97, 0xcb, 0xe4, 0x5a, 0x1e, 0x97, 0xb1, 0x8c, 0x67, 0x9a, 0x27, 0xe8, 0x23, 0xae, 0x14, + 0xa3, 0x9f, 0xd5, 0x60, 0x9c, 0xfb, 0x16, 0x23, 0x79, 0xbc, 0x6a, 0x3f, 0x5f, 0x3a, 0x17, 0x58, + 0xed, 0xe7, 0xcb, 0x48, 0x10, 0xce, 0xf5, 0xf3, 0x35, 0x29, 0x4c, 0x8d, 0x55, 0xe6, 0xf9, 0x25, + 0x0d, 0xfa, 0x45, 0xd6, 0x2f, 0x79, 0x52, 0x35, 0x56, 0x32, 0x6b, 0x78, 0xfa, 0x58, 0xc1, 0xde, + 0x48, 0xd7, 0x51, 0x4a, 0x97, 0x4e, 0x0e, 0x4a, 0xe8, 0x6a, 0x09, 0x32, 0xbe, 0xaa, 0xc1, 0x58, + 0xaa, 0x36, 0x99, 0xfa, 0x60, 0x90, 0x15, 0x42, 0x53, 0x1f, 0x0c, 0xd2, 0x02, 0x68, 0xb9, 0xde, + 0x7f, 0x41, 0x6c, 0xcd, 0x72, 0xb2, 0x5c, 0x66, 0x7f, 0xa1, 0xc1, 0x78, 0x46, 0x01, 0x2e, 0x52, + 0xf0, 0x9d, 0x34, 0x35, 0xd7, 0x67, 0x4a, 0xc3, 0x21, 0x23, 0x17, 0x29, 0x23, 0xcf, 0x90, 0xf3, + 0xb2, 0x7b, 0x51, 0x47, 0x6a, 0x05, 0x4f, 0x29, 0x59, 0xfe, 0x07, 0x0d, 0xa6, 0xe5, 0x25, 0xbe, + 0xc8, 0x33, 0xe5, 0x88, 0x4b, 0x2e, 0xd1, 0xb3, 0x3b, 0x05, 0x2f, 0x78, 0x7a, 0x48, 0xf9, 0x8a, + 0xad, 0xd8, 0xc7, 0xba, 0xe0, 0x70, 0x81, 0xca, 0x58, 0xea, 0xf7, 0x9a, 0xe2, 0x45, 0xe3, 0xd4, + 0xef, 0x35, 0x25, 0x4a, 0x74, 0xe9, 0x2f, 0x50, 0xf6, 0xaf, 0x90, 0x25, 0x99, 0xf2, 0x12, 0x41, + 0x86, 0xc5, 0x26, 0xe2, 0x1b, 0x1a, 0x8c, 0x67, 0x14, 0xba, 0x52, 0x8b, 0xae, 0xbc, 0x36, 0x97, + 0x5a, 0x74, 0x15, 0x35, 0xb9, 0xf4, 0xe7, 0x29, 0x63, 0x4f, 0x93, 0xb3, 0xb2, 0x75, 0x15, 0x05, + 0x45, 0x23, 0x35, 0x55, 0x63, 0xac, 0x7c, 0x4b, 0x83, 0x7d, 0x92, 0x0a, 0x58, 0xea, 0xc3, 0x46, + 0x5d, 0xc0, 0x4b, 0x7d, 0xd8, 0xe4, 0x14, 0xee, 0xca, 0x35, 0xe0, 0x4c, 0x0a, 0x2f, 0xe5, 0xe9, + 0xaf, 0x35, 0x98, 0xcc, 0x2e, 0x90, 0xa5, 0xbe, 0x1f, 0x28, 0xab, 0x7b, 0xa9, 0xef, 0x07, 0xea, + 0xaa, 0x5e, 0xb9, 0x2a, 0x26, 0xb5, 0x4e, 0x58, 0x72, 0x36, 0xb5, 0x54, 0x92, 0x52, 0x5e, 0xea, + 0xa5, 0x52, 0x97, 0x4c, 0x54, 0x2f, 0x55, 0x4e, 0xed, 0xb0, 0xdc, 0xa5, 0x62, 0x01, 0xd6, 0x3c, + 0x55, 0x27, 0xcb, 0xf7, 0x3b, 0x96, 0xae, 0x3c, 0x90, 0xef, 0x07, 0xcd, 0x28, 0x90, 0xa1, 0x3e, + 0xc7, 0xa4, 0x25, 0x2e, 0xf4, 0x39, 0xca, 0xc1, 0x93, 0xe4, 0x71, 0x09, 0x07, 0x19, 0x85, 0x06, + 0xc8, 0x9f, 0x6a, 0x30, 0xb5, 0xd2, 0x29, 0x5d, 0xf0, 0x1e, 0x52, 0x9f, 0x17, 0x1d, 0x14, 0x2d, + 0xe0, 0x90, 0xe4, 0xe2, 0x2b, 0x3c, 0x0d, 0x2e, 0x5e, 0xd9, 0x42, 0xad, 0xc6, 0xe4, 0x55, 0x3a, + 0xd4, 0x6a, 0x4c, 0x51, 0xb9, 0x43, 0x3f, 0x45, 0x99, 0x98, 0x25, 0x4f, 0x16, 0x59, 0x02, 0x5e, + 0x76, 0x82, 0xbc, 0xad, 0xc1, 0x64, 0x76, 0xb1, 0x01, 0xf5, 0x36, 0x57, 0x56, 0x38, 0x50, 0x6f, + 0x73, 0x75, 0x6d, 0x03, 0x7d, 0x81, 0xf2, 0x71, 0x81, 0x3c, 0x2d, 0xe1, 0x23, 0x96, 0xf6, 0x1f, + 0x2d, 0x73, 0x10, 0x09, 0xbd, 0x09, 0x17, 0x25, 0x23, 0xd5, 0x5f, 0xbd, 0x28, 0xf2, 0x92, 0x04, + 0xea, 0x45, 0x51, 0x94, 0x29, 0xc8, 0x5d, 0x94, 0xcc, 0x1a, 0x06, 0xe4, 0x8f, 0x35, 0x18, 0x4b, + 0x65, 0xa4, 0xab, 0xb7, 0x84, 0xac, 0x4e, 0x81, 0x7a, 0x4b, 0x48, 0xd3, 0xde, 0x73, 0x5d, 0xa7, + 0xe9, 0x9c, 0xf8, 0xca, 0xdd, 0x48, 0x3d, 0x84, 0x37, 0xc9, 0x5f, 0x6a, 0xb0, 0x4f, 0x92, 0x9a, + 0xad, 0x56, 0xb4, 0xea, 0x8c, 0x78, 0xb5, 0xa2, 0xcd, 0xc9, 0x05, 0xcf, 0xdd, 0xe8, 0x3c, 0x56, + 0x3c, 0x23, 0x53, 0x9c, 0x7c, 0x53, 0x83, 0xfd, 0xd2, 0xa4, 0x6b, 0x72, 0xa1, 0xa0, 0x84, 0x64, + 0xe6, 0x83, 0x4f, 0x3f, 0xb3, 0x43, 0x68, 0x64, 0xeb, 0x29, 0xca, 0xd6, 0x71, 0x32, 0x5b, 0x44, + 0xca, 0x68, 0xe1, 0x90, 0xf0, 0x56, 0xe6, 0x93, 0xcf, 0x68, 0x30, 0x1c, 0x4f, 0xe1, 0x96, 0x5e, + 0xcd, 0x32, 0x73, 0xc0, 0xa5, 0x57, 0xb3, 0xec, 0xbc, 0x70, 0xbd, 0x42, 0xe9, 0x7c, 0x8c, 0x3c, + 0x2a, 0xbb, 0x32, 0x5a, 0x81, 0x5b, 0x63, 0xc9, 0xd6, 0x16, 0xa5, 0xe6, 0x6b, 0x1a, 0x56, 0x8c, + 0x4a, 0xe5, 0x55, 0xab, 0x77, 0x83, 0x2c, 0x99, 0x5b, 0xbd, 0x1b, 0xa4, 0xc9, 0xdb, 0xb9, 0xd7, + 0x34, 0x46, 0xb3, 0x30, 0x33, 0x2a, 0x77, 0x63, 0x19, 0xe3, 0xd4, 0xd6, 0x9d, 0xcc, 0x4e, 0xcc, + 0x56, 0x6b, 0x59, 0x65, 0x3e, 0xb8, 0x5a, 0xcb, 0xaa, 0xf3, 0xc0, 0x73, 0x1d, 0x47, 0x9b, 0x02, + 0xbc, 0x16, 0xcb, 0x17, 0xa7, 0x66, 0x7b, 0x46, 0x4d, 0x1e, 0xb5, 0x6a, 0x95, 0x57, 0x00, 0x52, + 0xab, 0x56, 0x45, 0xf1, 0x9f, 0x5c, 0xb3, 0x3d, 0x5a, 0x19, 0xa8, 0xe6, 0xae, 0xe3, 0xc9, 0xe7, + 0x47, 0x4e, 0x89, 0xbf, 0xd5, 0x60, 0xbf, 0xb4, 0xde, 0x8f, 0x7a, 0x47, 0xe7, 0xd5, 0x13, 0x52, + 0xef, 0xe8, 0xdc, 0x22, 0x43, 0xfa, 0x05, 0xca, 0xdc, 0x53, 0xe4, 0x94, 0xcc, 0x22, 0xcc, 0xe0, + 0xac, 0x26, 0x2a, 0x99, 0x7d, 0x59, 0x83, 0xd1, 0x64, 0xf6, 0xb8, 0xda, 0x77, 0x2c, 0xc9, 0x84, + 0x9f, 0x3e, 0x55, 0x0e, 0xa8, 0x20, 0xf5, 0x9d, 0xff, 0x73, 0x1e, 0x21, 0x63, 0x26, 0xfa, 0x17, + 0x34, 0x98, 0xc8, 0xc8, 0xc3, 0xf6, 0xd5, 0xaf, 0xd2, 0x59, 0xd9, 0xe2, 0xea, 0x57, 0xe9, 0xcc, + 0x54, 0xf1, 0xdc, 0x40, 0x86, 0x35, 0x0a, 0xc5, 0x93, 0xfe, 0x85, 0xbb, 0xfe, 0x13, 0x5d, 0x70, + 0x28, 0x37, 0x05, 0x98, 0x2c, 0x96, 0x79, 0x1e, 0x91, 0xa5, 0x95, 0x4f, 0x5f, 0xba, 0x47, 0x2c, + 0xc8, 0xe9, 0xfb, 0x29, 0xa7, 0x55, 0xb2, 0x52, 0xf8, 0x49, 0xad, 0xde, 0xc1, 0xa5, 0x7c, 0x71, + 0xf9, 0x91, 0x06, 0x7a, 0x7e, 0xf2, 0x25, 0xb9, 0x94, 0x2f, 0x5c, 0x05, 0x72, 0x41, 0xa7, 0x97, + 0xee, 0x15, 0x4d, 0x41, 0xe3, 0xc0, 0xa0, 0x48, 0xb0, 0x70, 0x63, 0x78, 0xa4, 0x76, 0x52, 0x3f, + 0xc9, 0x1f, 0x68, 0x30, 0x9a, 0xcc, 0xdd, 0xcc, 0x89, 0xf5, 0xce, 0x4e, 0x12, 0xcd, 0x89, 0xf5, + 0x96, 0xa4, 0x87, 0xe6, 0xc6, 0xdd, 0x19, 0xcc, 0x33, 0xe3, 0x87, 0x90, 0x2c, 0x4d, 0xb1, 0x72, + 0x17, 0x53, 0x2f, 0xa9, 0x13, 0x91, 0xa4, 0xd3, 0x09, 0xd5, 0x91, 0x15, 0xd2, 0xec, 0x4f, 0x75, + 0x64, 0x85, 0x3c, 0xbd, 0x33, 0x37, 0x96, 0x0d, 0x93, 0x2b, 0xa3, 0xb0, 0x9c, 0x07, 0xef, 0xcd, + 0x08, 0x37, 0x5f, 0xd3, 0x60, 0x3c, 0x23, 0x5b, 0x93, 0x94, 0xa4, 0xab, 0xd8, 0x01, 0xa5, 0x48, + 0x0b, 0xcd, 0xbd, 0xd5, 0x67, 0x30, 0xe4, 0x77, 0x38, 0xa2, 0xd1, 0x90, 0xf1, 0x7c, 0xc5, 0xe3, + 0xf9, 0x82, 0x1e, 0x4f, 0xf6, 0x54, 0xeb, 0xbf, 0xcc, 0x24, 0xcf, 0xdc, 0x68, 0x48, 0xdc, 0xf6, + 0x68, 0x1b, 0xc7, 0x14, 0xf7, 0xe7, 0x43, 0x73, 0x32, 0x96, 0xbd, 0x49, 0x8a, 0x13, 0x50, 0x2c, + 0x27, 0x29, 0x3b, 0x39, 0x34, 0x37, 0xe2, 0x29, 0x4e, 0xb4, 0x4f, 0x7e, 0x9f, 0x3e, 0xae, 0xc6, + 0x73, 0x10, 0xf3, 0x1e, 0x57, 0x33, 0xf3, 0x38, 0xf3, 0x1e, 0x57, 0xb3, 0xd3, 0x38, 0x73, 0x27, + 0x39, 0x9d, 0x63, 0x29, 0xa2, 0xdb, 0xdf, 0xa2, 0xaf, 0xd9, 0x89, 0xf4, 0x49, 0x52, 0x8a, 0x8c, + 0xa2, 0xaf, 0xd9, 0x92, 0x24, 0xd0, 0x5c, 0x67, 0x4f, 0x46, 0x86, 0x28, 0xf9, 0x15, 0x2d, 0x91, + 0xe0, 0x59, 0x51, 0x1b, 0x48, 0xa9, 0xcc, 0xcc, 0xe9, 0xe3, 0xc5, 0x01, 0x90, 0xce, 0x27, 0x29, + 0x9d, 0x8f, 0x90, 0x87, 0xa5, 0x46, 0x94, 0xe9, 0xd4, 0x2c, 0x84, 0x5a, 0xb8, 0xf5, 0x8d, 0xef, + 0x1f, 0xd0, 0xbe, 0xf9, 0xfd, 0x03, 0xda, 0xf7, 0xbe, 0x7f, 0x40, 0xfb, 0x85, 0x1f, 0x1c, 0xd8, + 0xf5, 0xcd, 0x1f, 0x1c, 0xd8, 0xf5, 0x9d, 0x1f, 0x1c, 0xd8, 0xf5, 0xea, 0x8b, 0x1b, 0x56, 0xb0, + 0xd9, 0x5e, 0x9b, 0xad, 0xbb, 0xcd, 0xca, 0x55, 0x8e, 0x69, 0xd9, 0x58, 0xf3, 0x3b, 0x78, 0x8f, + 0xd5, 0x5d, 0xcf, 0x8c, 0xfe, 0xdc, 0x34, 0x2c, 0x07, 0x9f, 0xc0, 0xfc, 0xce, 0xa0, 0xc1, 0x76, + 0xcb, 0xf4, 0x2b, 0x5b, 0x73, 0x6b, 0xbd, 0x2d, 0xcf, 0x0d, 0xdc, 0x93, 0xff, 0x13, 0x00, 0x00, + 0xff, 0xff, 0x82, 0x29, 0x10, 0x28, 0xda, 0x8e, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -8558,6 +8809,10 @@ type QueryClient interface { // Retrieves a trader's transient spot orders TraderSpotTransientOrders(ctx context.Context, in *QueryTraderSpotOrdersRequest, opts ...grpc.CallOption) (*QueryTraderSpotOrdersResponse, error) // Retrieves a spot market's mid-price + // Projects the output of a spot swap for an exact input amount + SpotSwapOutput(ctx context.Context, in *QuerySpotSwapOutputRequest, opts ...grpc.CallOption) (*QuerySpotSwapOutputResponse, error) + // Projects the input required for a spot swap to yield an exact output amount + SpotSwapInput(ctx context.Context, in *QuerySpotSwapInputRequest, opts ...grpc.CallOption) (*QuerySpotSwapInputResponse, error) SpotMidPriceAndTOB(ctx context.Context, in *QuerySpotMidPriceAndTOBRequest, opts ...grpc.CallOption) (*QuerySpotMidPriceAndTOBResponse, error) // Retrieves a derivative market's mid-price DerivativeMidPriceAndTOB(ctx context.Context, in *QueryDerivativeMidPriceAndTOBRequest, opts ...grpc.CallOption) (*QueryDerivativeMidPriceAndTOBResponse, error) @@ -8865,6 +9120,24 @@ func (c *queryClient) TraderSpotTransientOrders(ctx context.Context, in *QueryTr return out, nil } +func (c *queryClient) SpotSwapOutput(ctx context.Context, in *QuerySpotSwapOutputRequest, opts ...grpc.CallOption) (*QuerySpotSwapOutputResponse, error) { + out := new(QuerySpotSwapOutputResponse) + err := c.cc.Invoke(ctx, "/injective.exchange.v2.Query/SpotSwapOutput", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) SpotSwapInput(ctx context.Context, in *QuerySpotSwapInputRequest, opts ...grpc.CallOption) (*QuerySpotSwapInputResponse, error) { + out := new(QuerySpotSwapInputResponse) + err := c.cc.Invoke(ctx, "/injective.exchange.v2.Query/SpotSwapInput", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *queryClient) SpotMidPriceAndTOB(ctx context.Context, in *QuerySpotMidPriceAndTOBRequest, opts ...grpc.CallOption) (*QuerySpotMidPriceAndTOBResponse, error) { out := new(QuerySpotMidPriceAndTOBResponse) err := c.cc.Invoke(ctx, "/injective.exchange.v2.Query/SpotMidPriceAndTOB", in, out, opts...) @@ -9344,6 +9617,10 @@ type QueryServer interface { // Retrieves a trader's transient spot orders TraderSpotTransientOrders(context.Context, *QueryTraderSpotOrdersRequest) (*QueryTraderSpotOrdersResponse, error) // Retrieves a spot market's mid-price + // Projects the output of a spot swap for an exact input amount + SpotSwapOutput(context.Context, *QuerySpotSwapOutputRequest) (*QuerySpotSwapOutputResponse, error) + // Projects the input required for a spot swap to yield an exact output amount + SpotSwapInput(context.Context, *QuerySpotSwapInputRequest) (*QuerySpotSwapInputResponse, error) SpotMidPriceAndTOB(context.Context, *QuerySpotMidPriceAndTOBRequest) (*QuerySpotMidPriceAndTOBResponse, error) // Retrieves a derivative market's mid-price DerivativeMidPriceAndTOB(context.Context, *QueryDerivativeMidPriceAndTOBRequest) (*QueryDerivativeMidPriceAndTOBResponse, error) @@ -9515,6 +9792,12 @@ func (*UnimplementedQueryServer) SubaccountOrders(ctx context.Context, req *Quer func (*UnimplementedQueryServer) TraderSpotTransientOrders(ctx context.Context, req *QueryTraderSpotOrdersRequest) (*QueryTraderSpotOrdersResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method TraderSpotTransientOrders not implemented") } +func (*UnimplementedQueryServer) SpotSwapOutput(ctx context.Context, req *QuerySpotSwapOutputRequest) (*QuerySpotSwapOutputResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SpotSwapOutput not implemented") +} +func (*UnimplementedQueryServer) SpotSwapInput(ctx context.Context, req *QuerySpotSwapInputRequest) (*QuerySpotSwapInputResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SpotSwapInput not implemented") +} func (*UnimplementedQueryServer) SpotMidPriceAndTOB(ctx context.Context, req *QuerySpotMidPriceAndTOBRequest) (*QuerySpotMidPriceAndTOBResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method SpotMidPriceAndTOB not implemented") } @@ -10060,6 +10343,42 @@ func _Query_TraderSpotTransientOrders_Handler(srv interface{}, ctx context.Conte return interceptor(ctx, in, info, handler) } +func _Query_SpotSwapOutput_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QuerySpotSwapOutputRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).SpotSwapOutput(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/injective.exchange.v2.Query/SpotSwapOutput", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).SpotSwapOutput(ctx, req.(*QuerySpotSwapOutputRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_SpotSwapInput_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QuerySpotSwapInputRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).SpotSwapInput(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/injective.exchange.v2.Query/SpotSwapInput", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).SpotSwapInput(ctx, req.(*QuerySpotSwapInputRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _Query_SpotMidPriceAndTOB_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(QuerySpotMidPriceAndTOBRequest) if err := dec(in); err != nil { @@ -11016,6 +11335,14 @@ var _Query_serviceDesc = grpc.ServiceDesc{ MethodName: "TraderSpotTransientOrders", Handler: _Query_TraderSpotTransientOrders_Handler, }, + { + MethodName: "SpotSwapOutput", + Handler: _Query_SpotSwapOutput_Handler, + }, + { + MethodName: "SpotSwapInput", + Handler: _Query_SpotSwapInput_Handler, + }, { MethodName: "SpotMidPriceAndTOB", Handler: _Query_SpotMidPriceAndTOB_Handler, @@ -12862,7 +13189,7 @@ func (m *QueryAccountAddressSpotOrdersResponse) MarshalToSizedBuffer(dAtA []byte return len(dAtA) - i, nil } -func (m *QuerySpotMidPriceAndTOBRequest) Marshal() (dAtA []byte, err error) { +func (m *QuerySpotSwapOutputRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -12872,16 +13199,30 @@ func (m *QuerySpotMidPriceAndTOBRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QuerySpotMidPriceAndTOBRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QuerySpotSwapOutputRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QuerySpotMidPriceAndTOBRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QuerySpotSwapOutputRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l + if len(m.AmountIn) > 0 { + i -= len(m.AmountIn) + copy(dAtA[i:], m.AmountIn) + i = encodeVarintQuery(dAtA, i, uint64(len(m.AmountIn))) + i-- + dAtA[i] = 0x1a + } + if len(m.InputDenom) > 0 { + i -= len(m.InputDenom) + copy(dAtA[i:], m.InputDenom) + i = encodeVarintQuery(dAtA, i, uint64(len(m.InputDenom))) + i-- + dAtA[i] = 0x12 + } if len(m.MarketId) > 0 { i -= len(m.MarketId) copy(dAtA[i:], m.MarketId) @@ -12892,7 +13233,7 @@ func (m *QuerySpotMidPriceAndTOBRequest) MarshalToSizedBuffer(dAtA []byte) (int, return len(dAtA) - i, nil } -func (m *QuerySpotMidPriceAndTOBResponse) Marshal() (dAtA []byte, err error) { +func (m *QuerySpotSwapOutputResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -12902,56 +13243,47 @@ func (m *QuerySpotMidPriceAndTOBResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QuerySpotMidPriceAndTOBResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QuerySpotSwapOutputResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QuerySpotMidPriceAndTOBResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QuerySpotSwapOutputResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if m.BestSellPrice != nil { - { - size := m.BestSellPrice.Size() - i -= size - if _, err := m.BestSellPrice.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintQuery(dAtA, i, uint64(size)) + { + size := m.SpentAmount.Size() + i -= size + if _, err := m.SpentAmount.MarshalTo(dAtA[i:]); err != nil { + return 0, err } - i-- - dAtA[i] = 0x1a + i = encodeVarintQuery(dAtA, i, uint64(size)) } - if m.BestBuyPrice != nil { - { - size := m.BestBuyPrice.Size() - i -= size - if _, err := m.BestBuyPrice.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintQuery(dAtA, i, uint64(size)) + i-- + dAtA[i] = 0x1a + { + size := m.OutputAmount.Size() + i -= size + if _, err := m.OutputAmount.MarshalTo(dAtA[i:]); err != nil { + return 0, err } - i-- - dAtA[i] = 0x12 + i = encodeVarintQuery(dAtA, i, uint64(size)) } - if m.MidPrice != nil { - { - size := m.MidPrice.Size() - i -= size - if _, err := m.MidPrice.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintQuery(dAtA, i, uint64(size)) - } + i-- + dAtA[i] = 0x12 + if len(m.OutputDenom) > 0 { + i -= len(m.OutputDenom) + copy(dAtA[i:], m.OutputDenom) + i = encodeVarintQuery(dAtA, i, uint64(len(m.OutputDenom))) i-- dAtA[i] = 0xa } return len(dAtA) - i, nil } -func (m *QueryDerivativeMidPriceAndTOBRequest) Marshal() (dAtA []byte, err error) { +func (m *QuerySpotSwapInputRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -12961,16 +13293,30 @@ func (m *QueryDerivativeMidPriceAndTOBRequest) Marshal() (dAtA []byte, err error return dAtA[:n], nil } -func (m *QueryDerivativeMidPriceAndTOBRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QuerySpotSwapInputRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryDerivativeMidPriceAndTOBRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QuerySpotSwapInputRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l + if len(m.AmountOut) > 0 { + i -= len(m.AmountOut) + copy(dAtA[i:], m.AmountOut) + i = encodeVarintQuery(dAtA, i, uint64(len(m.AmountOut))) + i-- + dAtA[i] = 0x1a + } + if len(m.OutputDenom) > 0 { + i -= len(m.OutputDenom) + copy(dAtA[i:], m.OutputDenom) + i = encodeVarintQuery(dAtA, i, uint64(len(m.OutputDenom))) + i-- + dAtA[i] = 0x12 + } if len(m.MarketId) > 0 { i -= len(m.MarketId) copy(dAtA[i:], m.MarketId) @@ -12981,7 +13327,7 @@ func (m *QueryDerivativeMidPriceAndTOBRequest) MarshalToSizedBuffer(dAtA []byte) return len(dAtA) - i, nil } -func (m *QueryDerivativeMidPriceAndTOBResponse) Marshal() (dAtA []byte, err error) { +func (m *QuerySpotSwapInputResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -12991,56 +13337,37 @@ func (m *QueryDerivativeMidPriceAndTOBResponse) Marshal() (dAtA []byte, err erro return dAtA[:n], nil } -func (m *QueryDerivativeMidPriceAndTOBResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *QuerySpotSwapInputResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryDerivativeMidPriceAndTOBResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QuerySpotSwapInputResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if m.BestSellPrice != nil { - { - size := m.BestSellPrice.Size() - i -= size - if _, err := m.BestSellPrice.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - if m.BestBuyPrice != nil { - { - size := m.BestBuyPrice.Size() - i -= size - if _, err := m.BestBuyPrice.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintQuery(dAtA, i, uint64(size)) + { + size := m.InputAmount.Size() + i -= size + if _, err := m.InputAmount.MarshalTo(dAtA[i:]); err != nil { + return 0, err } - i-- - dAtA[i] = 0x12 + i = encodeVarintQuery(dAtA, i, uint64(size)) } - if m.MidPrice != nil { - { - size := m.MidPrice.Size() - i -= size - if _, err := m.MidPrice.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintQuery(dAtA, i, uint64(size)) - } + i-- + dAtA[i] = 0x12 + if len(m.InputDenom) > 0 { + i -= len(m.InputDenom) + copy(dAtA[i:], m.InputDenom) + i = encodeVarintQuery(dAtA, i, uint64(len(m.InputDenom))) i-- dAtA[i] = 0xa } return len(dAtA) - i, nil } -func (m *QueryDerivativeOrderbookRequest) Marshal() (dAtA []byte, err error) { +func (m *QuerySpotMidPriceAndTOBRequest) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -13050,26 +13377,204 @@ func (m *QueryDerivativeOrderbookRequest) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *QueryDerivativeOrderbookRequest) MarshalTo(dAtA []byte) (int, error) { +func (m *QuerySpotMidPriceAndTOBRequest) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryDerivativeOrderbookRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *QuerySpotMidPriceAndTOBRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if m.LimitCumulativeNotional != nil { - { - size := m.LimitCumulativeNotional.Size() - i -= size - if _, err := m.LimitCumulativeNotional.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - i = encodeVarintQuery(dAtA, i, uint64(size)) - } - i-- + if len(m.MarketId) > 0 { + i -= len(m.MarketId) + copy(dAtA[i:], m.MarketId) + i = encodeVarintQuery(dAtA, i, uint64(len(m.MarketId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QuerySpotMidPriceAndTOBResponse) 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 *QuerySpotMidPriceAndTOBResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QuerySpotMidPriceAndTOBResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.BestSellPrice != nil { + { + size := m.BestSellPrice.Size() + i -= size + if _, err := m.BestSellPrice.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if m.BestBuyPrice != nil { + { + size := m.BestBuyPrice.Size() + i -= size + if _, err := m.BestBuyPrice.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if m.MidPrice != nil { + { + size := m.MidPrice.Size() + i -= size + if _, err := m.MidPrice.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryDerivativeMidPriceAndTOBRequest) 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 *QueryDerivativeMidPriceAndTOBRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryDerivativeMidPriceAndTOBRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.MarketId) > 0 { + i -= len(m.MarketId) + copy(dAtA[i:], m.MarketId) + i = encodeVarintQuery(dAtA, i, uint64(len(m.MarketId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryDerivativeMidPriceAndTOBResponse) 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 *QueryDerivativeMidPriceAndTOBResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryDerivativeMidPriceAndTOBResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.BestSellPrice != nil { + { + size := m.BestSellPrice.Size() + i -= size + if _, err := m.BestSellPrice.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if m.BestBuyPrice != nil { + { + size := m.BestBuyPrice.Size() + i -= size + if _, err := m.BestBuyPrice.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if m.MidPrice != nil { + { + size := m.MidPrice.Size() + i -= size + if _, err := m.MidPrice.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryDerivativeOrderbookRequest) 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 *QueryDerivativeOrderbookRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryDerivativeOrderbookRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.LimitCumulativeNotional != nil { + { + size := m.LimitCumulativeNotional.Size() + i -= size + if _, err := m.LimitCumulativeNotional.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- dAtA[i] = 0x1a } if m.Limit != 0 { @@ -18155,6 +18660,80 @@ func (m *QueryAccountAddressSpotOrdersResponse) Size() (n int) { return n } +func (m *QuerySpotSwapOutputRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.MarketId) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.InputDenom) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.AmountIn) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QuerySpotSwapOutputResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.OutputDenom) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = m.OutputAmount.Size() + n += 1 + l + sovQuery(uint64(l)) + l = m.SpentAmount.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func (m *QuerySpotSwapInputRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.MarketId) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.OutputDenom) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.AmountOut) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QuerySpotSwapInputResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.InputDenom) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = m.InputAmount.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + func (m *QuerySpotMidPriceAndTOBRequest) Size() (n int) { if m == nil { return 0 @@ -24328,6 +24907,564 @@ func (m *QueryAccountAddressSpotOrdersResponse) Unmarshal(dAtA []byte) error { } return nil } +func (m *QuerySpotSwapOutputRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QuerySpotSwapOutputRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QuerySpotSwapOutputRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MarketId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.MarketId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field InputDenom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.InputDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AmountIn", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AmountIn = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QuerySpotSwapOutputResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QuerySpotSwapOutputResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QuerySpotSwapOutputResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field OutputDenom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.OutputDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field OutputAmount", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.OutputAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SpentAmount", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.SpentAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QuerySpotSwapInputRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QuerySpotSwapInputRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QuerySpotSwapInputRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MarketId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.MarketId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field OutputDenom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.OutputDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AmountOut", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AmountOut = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QuerySpotSwapInputResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QuerySpotSwapInputResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QuerySpotSwapInputResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field InputDenom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.InputDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field InputAmount", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.InputAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *QuerySpotMidPriceAndTOBRequest) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/chain/exchange/types/v2/tx.pb.go b/chain/exchange/types/v2/tx.pb.go index 9b455b844..105677f6b 100644 --- a/chain/exchange/types/v2/tx.pb.go +++ b/chain/exchange/types/v2/tx.pb.go @@ -333,6 +333,99 @@ func (m *MsgUpdateParamsResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgUpdateParamsResponse proto.InternalMessageInfo +// MsgUpdateSwapParams updates only the swap parameter group. It is callable by +// the governance authority or any exchange admin, providing an immediate +// operational path for pausing swaps or maintaining the market allowlist. +type MsgUpdateSwapParams struct { + // sender is the governance authority or an exchange admin. + Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty"` + // swap_params fully replaces the current swap parameter group. + SwapParams SwapParams `protobuf:"bytes,2,opt,name=swap_params,json=swapParams,proto3" json:"swap_params"` +} + +func (m *MsgUpdateSwapParams) Reset() { *m = MsgUpdateSwapParams{} } +func (m *MsgUpdateSwapParams) String() string { return proto.CompactTextString(m) } +func (*MsgUpdateSwapParams) ProtoMessage() {} +func (*MsgUpdateSwapParams) Descriptor() ([]byte, []int) { + return fileDescriptor_7c861fb1c14863a5, []int{6} +} +func (m *MsgUpdateSwapParams) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgUpdateSwapParams) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgUpdateSwapParams.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 *MsgUpdateSwapParams) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgUpdateSwapParams.Merge(m, src) +} +func (m *MsgUpdateSwapParams) XXX_Size() int { + return m.Size() +} +func (m *MsgUpdateSwapParams) XXX_DiscardUnknown() { + xxx_messageInfo_MsgUpdateSwapParams.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgUpdateSwapParams proto.InternalMessageInfo + +func (m *MsgUpdateSwapParams) GetSender() string { + if m != nil { + return m.Sender + } + return "" +} + +func (m *MsgUpdateSwapParams) GetSwapParams() SwapParams { + if m != nil { + return m.SwapParams + } + return SwapParams{} +} + +type MsgUpdateSwapParamsResponse struct { +} + +func (m *MsgUpdateSwapParamsResponse) Reset() { *m = MsgUpdateSwapParamsResponse{} } +func (m *MsgUpdateSwapParamsResponse) String() string { return proto.CompactTextString(m) } +func (*MsgUpdateSwapParamsResponse) ProtoMessage() {} +func (*MsgUpdateSwapParamsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_7c861fb1c14863a5, []int{7} +} +func (m *MsgUpdateSwapParamsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgUpdateSwapParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgUpdateSwapParamsResponse.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 *MsgUpdateSwapParamsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgUpdateSwapParamsResponse.Merge(m, src) +} +func (m *MsgUpdateSwapParamsResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgUpdateSwapParamsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgUpdateSwapParamsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgUpdateSwapParamsResponse proto.InternalMessageInfo + // MsgDeposit defines a SDK message for transferring coins from the sender's // bank balance into the subaccount's exchange deposits type MsgDeposit struct { @@ -349,7 +442,7 @@ func (m *MsgDeposit) Reset() { *m = MsgDeposit{} } func (m *MsgDeposit) String() string { return proto.CompactTextString(m) } func (*MsgDeposit) ProtoMessage() {} func (*MsgDeposit) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{6} + return fileDescriptor_7c861fb1c14863a5, []int{8} } func (m *MsgDeposit) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -386,7 +479,7 @@ func (m *MsgDepositResponse) Reset() { *m = MsgDepositResponse{} } func (m *MsgDepositResponse) String() string { return proto.CompactTextString(m) } func (*MsgDepositResponse) ProtoMessage() {} func (*MsgDepositResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{7} + return fileDescriptor_7c861fb1c14863a5, []int{9} } func (m *MsgDepositResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -430,7 +523,7 @@ func (m *MsgWithdraw) Reset() { *m = MsgWithdraw{} } func (m *MsgWithdraw) String() string { return proto.CompactTextString(m) } func (*MsgWithdraw) ProtoMessage() {} func (*MsgWithdraw) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{8} + return fileDescriptor_7c861fb1c14863a5, []int{10} } func (m *MsgWithdraw) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -467,7 +560,7 @@ func (m *MsgWithdrawResponse) Reset() { *m = MsgWithdrawResponse{} } func (m *MsgWithdrawResponse) String() string { return proto.CompactTextString(m) } func (*MsgWithdrawResponse) ProtoMessage() {} func (*MsgWithdrawResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{9} + return fileDescriptor_7c861fb1c14863a5, []int{11} } func (m *MsgWithdrawResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -511,7 +604,7 @@ func (m *MsgUpdateSubaccountRiskProfile) Reset() { *m = MsgUpdateSubacco func (m *MsgUpdateSubaccountRiskProfile) String() string { return proto.CompactTextString(m) } func (*MsgUpdateSubaccountRiskProfile) ProtoMessage() {} func (*MsgUpdateSubaccountRiskProfile) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{10} + return fileDescriptor_7c861fb1c14863a5, []int{12} } func (m *MsgUpdateSubaccountRiskProfile) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -551,7 +644,7 @@ func (m *MsgUpdateSubaccountRiskProfileResponse) Reset() { func (m *MsgUpdateSubaccountRiskProfileResponse) String() string { return proto.CompactTextString(m) } func (*MsgUpdateSubaccountRiskProfileResponse) ProtoMessage() {} func (*MsgUpdateSubaccountRiskProfileResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{11} + return fileDescriptor_7c861fb1c14863a5, []int{13} } func (m *MsgUpdateSubaccountRiskProfileResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -593,7 +686,7 @@ func (m *MsgCreateSpotLimitOrder) Reset() { *m = MsgCreateSpotLimitOrder func (m *MsgCreateSpotLimitOrder) String() string { return proto.CompactTextString(m) } func (*MsgCreateSpotLimitOrder) ProtoMessage() {} func (*MsgCreateSpotLimitOrder) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{12} + return fileDescriptor_7c861fb1c14863a5, []int{14} } func (m *MsgCreateSpotLimitOrder) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -633,7 +726,7 @@ func (m *MsgCreateSpotLimitOrderResponse) Reset() { *m = MsgCreateSpotLi func (m *MsgCreateSpotLimitOrderResponse) String() string { return proto.CompactTextString(m) } func (*MsgCreateSpotLimitOrderResponse) ProtoMessage() {} func (*MsgCreateSpotLimitOrderResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{13} + return fileDescriptor_7c861fb1c14863a5, []int{15} } func (m *MsgCreateSpotLimitOrderResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -673,7 +766,7 @@ func (m *MsgBatchCreateSpotLimitOrders) Reset() { *m = MsgBatchCreateSpo func (m *MsgBatchCreateSpotLimitOrders) String() string { return proto.CompactTextString(m) } func (*MsgBatchCreateSpotLimitOrders) ProtoMessage() {} func (*MsgBatchCreateSpotLimitOrders) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{14} + return fileDescriptor_7c861fb1c14863a5, []int{16} } func (m *MsgBatchCreateSpotLimitOrders) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -714,7 +807,7 @@ func (m *MsgBatchCreateSpotLimitOrdersResponse) Reset() { *m = MsgBatchC func (m *MsgBatchCreateSpotLimitOrdersResponse) String() string { return proto.CompactTextString(m) } func (*MsgBatchCreateSpotLimitOrdersResponse) ProtoMessage() {} func (*MsgBatchCreateSpotLimitOrdersResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{15} + return fileDescriptor_7c861fb1c14863a5, []int{17} } func (m *MsgBatchCreateSpotLimitOrdersResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -773,7 +866,7 @@ func (m *MsgInstantSpotMarketLaunch) Reset() { *m = MsgInstantSpotMarket func (m *MsgInstantSpotMarketLaunch) String() string { return proto.CompactTextString(m) } func (*MsgInstantSpotMarketLaunch) ProtoMessage() {} func (*MsgInstantSpotMarketLaunch) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{16} + return fileDescriptor_7c861fb1c14863a5, []int{18} } func (m *MsgInstantSpotMarketLaunch) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -811,7 +904,7 @@ func (m *MsgInstantSpotMarketLaunchResponse) Reset() { *m = MsgInstantSp func (m *MsgInstantSpotMarketLaunchResponse) String() string { return proto.CompactTextString(m) } func (*MsgInstantSpotMarketLaunchResponse) ProtoMessage() {} func (*MsgInstantSpotMarketLaunchResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{17} + return fileDescriptor_7c861fb1c14863a5, []int{19} } func (m *MsgInstantSpotMarketLaunchResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -890,7 +983,7 @@ func (m *MsgInstantPerpetualMarketLaunch) Reset() { *m = MsgInstantPerpe func (m *MsgInstantPerpetualMarketLaunch) String() string { return proto.CompactTextString(m) } func (*MsgInstantPerpetualMarketLaunch) ProtoMessage() {} func (*MsgInstantPerpetualMarketLaunch) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{18} + return fileDescriptor_7c861fb1c14863a5, []int{20} } func (m *MsgInstantPerpetualMarketLaunch) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -930,7 +1023,7 @@ func (m *MsgInstantPerpetualMarketLaunchResponse) Reset() { func (m *MsgInstantPerpetualMarketLaunchResponse) String() string { return proto.CompactTextString(m) } func (*MsgInstantPerpetualMarketLaunchResponse) ProtoMessage() {} func (*MsgInstantPerpetualMarketLaunchResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{19} + return fileDescriptor_7c861fb1c14863a5, []int{21} } func (m *MsgInstantPerpetualMarketLaunchResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1004,7 +1097,7 @@ func (m *MsgInstantBinaryOptionsMarketLaunch) Reset() { *m = MsgInstantB func (m *MsgInstantBinaryOptionsMarketLaunch) String() string { return proto.CompactTextString(m) } func (*MsgInstantBinaryOptionsMarketLaunch) ProtoMessage() {} func (*MsgInstantBinaryOptionsMarketLaunch) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{20} + return fileDescriptor_7c861fb1c14863a5, []int{22} } func (m *MsgInstantBinaryOptionsMarketLaunch) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1046,7 +1139,7 @@ func (m *MsgInstantBinaryOptionsMarketLaunchResponse) String() string { } func (*MsgInstantBinaryOptionsMarketLaunchResponse) ProtoMessage() {} func (*MsgInstantBinaryOptionsMarketLaunchResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{21} + return fileDescriptor_7c861fb1c14863a5, []int{23} } func (m *MsgInstantBinaryOptionsMarketLaunchResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1126,7 +1219,7 @@ func (m *MsgInstantExpiryFuturesMarketLaunch) Reset() { *m = MsgInstantE func (m *MsgInstantExpiryFuturesMarketLaunch) String() string { return proto.CompactTextString(m) } func (*MsgInstantExpiryFuturesMarketLaunch) ProtoMessage() {} func (*MsgInstantExpiryFuturesMarketLaunch) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{22} + return fileDescriptor_7c861fb1c14863a5, []int{24} } func (m *MsgInstantExpiryFuturesMarketLaunch) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1168,7 +1261,7 @@ func (m *MsgInstantExpiryFuturesMarketLaunchResponse) String() string { } func (*MsgInstantExpiryFuturesMarketLaunchResponse) ProtoMessage() {} func (*MsgInstantExpiryFuturesMarketLaunchResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{23} + return fileDescriptor_7c861fb1c14863a5, []int{25} } func (m *MsgInstantExpiryFuturesMarketLaunchResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1210,7 +1303,7 @@ func (m *MsgCreateSpotMarketOrder) Reset() { *m = MsgCreateSpotMarketOrd func (m *MsgCreateSpotMarketOrder) String() string { return proto.CompactTextString(m) } func (*MsgCreateSpotMarketOrder) ProtoMessage() {} func (*MsgCreateSpotMarketOrder) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{24} + return fileDescriptor_7c861fb1c14863a5, []int{26} } func (m *MsgCreateSpotMarketOrder) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1251,7 +1344,7 @@ func (m *MsgCreateSpotMarketOrderResponse) Reset() { *m = MsgCreateSpotM func (m *MsgCreateSpotMarketOrderResponse) String() string { return proto.CompactTextString(m) } func (*MsgCreateSpotMarketOrderResponse) ProtoMessage() {} func (*MsgCreateSpotMarketOrderResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{25} + return fileDescriptor_7c861fb1c14863a5, []int{27} } func (m *MsgCreateSpotMarketOrderResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1293,7 +1386,7 @@ func (m *SpotMarketOrderResults) Reset() { *m = SpotMarketOrderResults{} func (m *SpotMarketOrderResults) String() string { return proto.CompactTextString(m) } func (*SpotMarketOrderResults) ProtoMessage() {} func (*SpotMarketOrderResults) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{26} + return fileDescriptor_7c861fb1c14863a5, []int{28} } func (m *SpotMarketOrderResults) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1334,7 +1427,7 @@ func (m *MsgCreateDerivativeLimitOrder) Reset() { *m = MsgCreateDerivati func (m *MsgCreateDerivativeLimitOrder) String() string { return proto.CompactTextString(m) } func (*MsgCreateDerivativeLimitOrder) ProtoMessage() {} func (*MsgCreateDerivativeLimitOrder) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{27} + return fileDescriptor_7c861fb1c14863a5, []int{29} } func (m *MsgCreateDerivativeLimitOrder) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1374,7 +1467,7 @@ func (m *MsgCreateDerivativeLimitOrderResponse) Reset() { *m = MsgCreate func (m *MsgCreateDerivativeLimitOrderResponse) String() string { return proto.CompactTextString(m) } func (*MsgCreateDerivativeLimitOrderResponse) ProtoMessage() {} func (*MsgCreateDerivativeLimitOrderResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{28} + return fileDescriptor_7c861fb1c14863a5, []int{30} } func (m *MsgCreateDerivativeLimitOrderResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1415,7 +1508,7 @@ func (m *MsgCreateBinaryOptionsLimitOrder) Reset() { *m = MsgCreateBinar func (m *MsgCreateBinaryOptionsLimitOrder) String() string { return proto.CompactTextString(m) } func (*MsgCreateBinaryOptionsLimitOrder) ProtoMessage() {} func (*MsgCreateBinaryOptionsLimitOrder) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{29} + return fileDescriptor_7c861fb1c14863a5, []int{31} } func (m *MsgCreateBinaryOptionsLimitOrder) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1457,7 +1550,7 @@ func (m *MsgCreateBinaryOptionsLimitOrderResponse) Reset() { func (m *MsgCreateBinaryOptionsLimitOrderResponse) String() string { return proto.CompactTextString(m) } func (*MsgCreateBinaryOptionsLimitOrderResponse) ProtoMessage() {} func (*MsgCreateBinaryOptionsLimitOrderResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{30} + return fileDescriptor_7c861fb1c14863a5, []int{32} } func (m *MsgCreateBinaryOptionsLimitOrderResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1498,7 +1591,7 @@ func (m *MsgBatchCreateDerivativeLimitOrders) Reset() { *m = MsgBatchCre func (m *MsgBatchCreateDerivativeLimitOrders) String() string { return proto.CompactTextString(m) } func (*MsgBatchCreateDerivativeLimitOrders) ProtoMessage() {} func (*MsgBatchCreateDerivativeLimitOrders) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{31} + return fileDescriptor_7c861fb1c14863a5, []int{33} } func (m *MsgBatchCreateDerivativeLimitOrders) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1543,7 +1636,7 @@ func (m *MsgBatchCreateDerivativeLimitOrdersResponse) String() string { } func (*MsgBatchCreateDerivativeLimitOrdersResponse) ProtoMessage() {} func (*MsgBatchCreateDerivativeLimitOrdersResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{32} + return fileDescriptor_7c861fb1c14863a5, []int{34} } func (m *MsgBatchCreateDerivativeLimitOrdersResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1590,7 +1683,7 @@ func (m *MsgCancelSpotOrder) Reset() { *m = MsgCancelSpotOrder{} } func (m *MsgCancelSpotOrder) String() string { return proto.CompactTextString(m) } func (*MsgCancelSpotOrder) ProtoMessage() {} func (*MsgCancelSpotOrder) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{33} + return fileDescriptor_7c861fb1c14863a5, []int{35} } func (m *MsgCancelSpotOrder) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1627,7 +1720,7 @@ func (m *MsgCancelSpotOrderResponse) Reset() { *m = MsgCancelSpotOrderRe func (m *MsgCancelSpotOrderResponse) String() string { return proto.CompactTextString(m) } func (*MsgCancelSpotOrderResponse) ProtoMessage() {} func (*MsgCancelSpotOrderResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{34} + return fileDescriptor_7c861fb1c14863a5, []int{36} } func (m *MsgCancelSpotOrderResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1666,7 +1759,7 @@ func (m *MsgBatchCancelSpotOrders) Reset() { *m = MsgBatchCancelSpotOrde func (m *MsgBatchCancelSpotOrders) String() string { return proto.CompactTextString(m) } func (*MsgBatchCancelSpotOrders) ProtoMessage() {} func (*MsgBatchCancelSpotOrders) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{35} + return fileDescriptor_7c861fb1c14863a5, []int{37} } func (m *MsgBatchCancelSpotOrders) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1705,7 +1798,7 @@ func (m *MsgBatchCancelSpotOrdersResponse) Reset() { *m = MsgBatchCancel func (m *MsgBatchCancelSpotOrdersResponse) String() string { return proto.CompactTextString(m) } func (*MsgBatchCancelSpotOrdersResponse) ProtoMessage() {} func (*MsgBatchCancelSpotOrdersResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{36} + return fileDescriptor_7c861fb1c14863a5, []int{38} } func (m *MsgBatchCancelSpotOrdersResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1745,7 +1838,7 @@ func (m *MsgBatchCancelBinaryOptionsOrders) Reset() { *m = MsgBatchCance func (m *MsgBatchCancelBinaryOptionsOrders) String() string { return proto.CompactTextString(m) } func (*MsgBatchCancelBinaryOptionsOrders) ProtoMessage() {} func (*MsgBatchCancelBinaryOptionsOrders) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{37} + return fileDescriptor_7c861fb1c14863a5, []int{39} } func (m *MsgBatchCancelBinaryOptionsOrders) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1788,7 +1881,7 @@ func (m *MsgBatchCancelBinaryOptionsOrdersResponse) String() string { } func (*MsgBatchCancelBinaryOptionsOrdersResponse) ProtoMessage() {} func (*MsgBatchCancelBinaryOptionsOrdersResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{38} + return fileDescriptor_7c861fb1c14863a5, []int{40} } func (m *MsgBatchCancelBinaryOptionsOrdersResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1854,7 +1947,7 @@ func (m *MsgBatchUpdateOrders) Reset() { *m = MsgBatchUpdateOrders{} } func (m *MsgBatchUpdateOrders) String() string { return proto.CompactTextString(m) } func (*MsgBatchUpdateOrders) ProtoMessage() {} func (*MsgBatchUpdateOrders) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{39} + return fileDescriptor_7c861fb1c14863a5, []int{41} } func (m *MsgBatchUpdateOrders) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1912,7 +2005,7 @@ func (m *MsgBatchUpdateOrdersResponse) Reset() { *m = MsgBatchUpdateOrde func (m *MsgBatchUpdateOrdersResponse) String() string { return proto.CompactTextString(m) } func (*MsgBatchUpdateOrdersResponse) ProtoMessage() {} func (*MsgBatchUpdateOrdersResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{40} + return fileDescriptor_7c861fb1c14863a5, []int{42} } func (m *MsgBatchUpdateOrdersResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1953,7 +2046,7 @@ func (m *MsgCreateDerivativeMarketOrder) Reset() { *m = MsgCreateDerivat func (m *MsgCreateDerivativeMarketOrder) String() string { return proto.CompactTextString(m) } func (*MsgCreateDerivativeMarketOrder) ProtoMessage() {} func (*MsgCreateDerivativeMarketOrder) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{41} + return fileDescriptor_7c861fb1c14863a5, []int{43} } func (m *MsgCreateDerivativeMarketOrder) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1996,7 +2089,7 @@ func (m *MsgCreateDerivativeMarketOrderResponse) Reset() { func (m *MsgCreateDerivativeMarketOrderResponse) String() string { return proto.CompactTextString(m) } func (*MsgCreateDerivativeMarketOrderResponse) ProtoMessage() {} func (*MsgCreateDerivativeMarketOrderResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{42} + return fileDescriptor_7c861fb1c14863a5, []int{44} } func (m *MsgCreateDerivativeMarketOrderResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2037,7 +2130,7 @@ func (m *DerivativeMarketOrderResults) Reset() { *m = DerivativeMarketOr func (m *DerivativeMarketOrderResults) String() string { return proto.CompactTextString(m) } func (*DerivativeMarketOrderResults) ProtoMessage() {} func (*DerivativeMarketOrderResults) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{43} + return fileDescriptor_7c861fb1c14863a5, []int{45} } func (m *DerivativeMarketOrderResults) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2078,7 +2171,7 @@ func (m *MsgCreateBinaryOptionsMarketOrder) Reset() { *m = MsgCreateBina func (m *MsgCreateBinaryOptionsMarketOrder) String() string { return proto.CompactTextString(m) } func (*MsgCreateBinaryOptionsMarketOrder) ProtoMessage() {} func (*MsgCreateBinaryOptionsMarketOrder) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{44} + return fileDescriptor_7c861fb1c14863a5, []int{46} } func (m *MsgCreateBinaryOptionsMarketOrder) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2123,7 +2216,7 @@ func (m *MsgCreateBinaryOptionsMarketOrderResponse) String() string { } func (*MsgCreateBinaryOptionsMarketOrderResponse) ProtoMessage() {} func (*MsgCreateBinaryOptionsMarketOrderResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{45} + return fileDescriptor_7c861fb1c14863a5, []int{47} } func (m *MsgCreateBinaryOptionsMarketOrderResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2172,7 +2265,7 @@ func (m *MsgCancelDerivativeOrder) Reset() { *m = MsgCancelDerivativeOrd func (m *MsgCancelDerivativeOrder) String() string { return proto.CompactTextString(m) } func (*MsgCancelDerivativeOrder) ProtoMessage() {} func (*MsgCancelDerivativeOrder) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{46} + return fileDescriptor_7c861fb1c14863a5, []int{48} } func (m *MsgCancelDerivativeOrder) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2210,7 +2303,7 @@ func (m *MsgCancelDerivativeOrderResponse) Reset() { *m = MsgCancelDeriv func (m *MsgCancelDerivativeOrderResponse) String() string { return proto.CompactTextString(m) } func (*MsgCancelDerivativeOrderResponse) ProtoMessage() {} func (*MsgCancelDerivativeOrderResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{47} + return fileDescriptor_7c861fb1c14863a5, []int{49} } func (m *MsgCancelDerivativeOrderResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2260,7 +2353,7 @@ func (m *MsgCancelBinaryOptionsOrder) Reset() { *m = MsgCancelBinaryOpti func (m *MsgCancelBinaryOptionsOrder) String() string { return proto.CompactTextString(m) } func (*MsgCancelBinaryOptionsOrder) ProtoMessage() {} func (*MsgCancelBinaryOptionsOrder) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{48} + return fileDescriptor_7c861fb1c14863a5, []int{50} } func (m *MsgCancelBinaryOptionsOrder) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2298,7 +2391,7 @@ func (m *MsgCancelBinaryOptionsOrderResponse) Reset() { *m = MsgCancelBi func (m *MsgCancelBinaryOptionsOrderResponse) String() string { return proto.CompactTextString(m) } func (*MsgCancelBinaryOptionsOrderResponse) ProtoMessage() {} func (*MsgCancelBinaryOptionsOrderResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{49} + return fileDescriptor_7c861fb1c14863a5, []int{51} } func (m *MsgCancelBinaryOptionsOrderResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2346,7 +2439,7 @@ func (m *OrderData) Reset() { *m = OrderData{} } func (m *OrderData) String() string { return proto.CompactTextString(m) } func (*OrderData) ProtoMessage() {} func (*OrderData) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{50} + return fileDescriptor_7c861fb1c14863a5, []int{52} } func (m *OrderData) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2421,7 +2514,7 @@ func (m *MsgBatchCancelDerivativeOrders) Reset() { *m = MsgBatchCancelDe func (m *MsgBatchCancelDerivativeOrders) String() string { return proto.CompactTextString(m) } func (*MsgBatchCancelDerivativeOrders) ProtoMessage() {} func (*MsgBatchCancelDerivativeOrders) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{51} + return fileDescriptor_7c861fb1c14863a5, []int{53} } func (m *MsgBatchCancelDerivativeOrders) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2462,7 +2555,7 @@ func (m *MsgBatchCancelDerivativeOrdersResponse) Reset() { func (m *MsgBatchCancelDerivativeOrdersResponse) String() string { return proto.CompactTextString(m) } func (*MsgBatchCancelDerivativeOrdersResponse) ProtoMessage() {} func (*MsgBatchCancelDerivativeOrdersResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{52} + return fileDescriptor_7c861fb1c14863a5, []int{54} } func (m *MsgBatchCancelDerivativeOrdersResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2507,7 +2600,7 @@ func (m *MsgSubaccountTransfer) Reset() { *m = MsgSubaccountTransfer{} } func (m *MsgSubaccountTransfer) String() string { return proto.CompactTextString(m) } func (*MsgSubaccountTransfer) ProtoMessage() {} func (*MsgSubaccountTransfer) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{53} + return fileDescriptor_7c861fb1c14863a5, []int{55} } func (m *MsgSubaccountTransfer) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2573,7 +2666,7 @@ func (m *MsgSubaccountTransferResponse) Reset() { *m = MsgSubaccountTran func (m *MsgSubaccountTransferResponse) String() string { return proto.CompactTextString(m) } func (*MsgSubaccountTransferResponse) ProtoMessage() {} func (*MsgSubaccountTransferResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{54} + return fileDescriptor_7c861fb1c14863a5, []int{56} } func (m *MsgSubaccountTransferResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2618,7 +2711,7 @@ func (m *MsgExternalTransfer) Reset() { *m = MsgExternalTransfer{} } func (m *MsgExternalTransfer) String() string { return proto.CompactTextString(m) } func (*MsgExternalTransfer) ProtoMessage() {} func (*MsgExternalTransfer) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{55} + return fileDescriptor_7c861fb1c14863a5, []int{57} } func (m *MsgExternalTransfer) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2683,7 +2776,7 @@ func (m *MsgExternalTransferResponse) Reset() { *m = MsgExternalTransfer func (m *MsgExternalTransferResponse) String() string { return proto.CompactTextString(m) } func (*MsgExternalTransferResponse) ProtoMessage() {} func (*MsgExternalTransferResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{56} + return fileDescriptor_7c861fb1c14863a5, []int{58} } func (m *MsgExternalTransferResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2728,7 +2821,7 @@ func (m *MsgLiquidatePosition) Reset() { *m = MsgLiquidatePosition{} } func (m *MsgLiquidatePosition) String() string { return proto.CompactTextString(m) } func (*MsgLiquidatePosition) ProtoMessage() {} func (*MsgLiquidatePosition) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{57} + return fileDescriptor_7c861fb1c14863a5, []int{59} } func (m *MsgLiquidatePosition) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2793,7 +2886,7 @@ func (m *MsgLiquidatePositionResponse) Reset() { *m = MsgLiquidatePositi func (m *MsgLiquidatePositionResponse) String() string { return proto.CompactTextString(m) } func (*MsgLiquidatePositionResponse) ProtoMessage() {} func (*MsgLiquidatePositionResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{58} + return fileDescriptor_7c861fb1c14863a5, []int{60} } func (m *MsgLiquidatePositionResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2836,7 +2929,7 @@ func (m *LiquidatePositionData) Reset() { *m = LiquidatePositionData{} } func (m *LiquidatePositionData) String() string { return proto.CompactTextString(m) } func (*LiquidatePositionData) ProtoMessage() {} func (*LiquidatePositionData) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{59} + return fileDescriptor_7c861fb1c14863a5, []int{61} } func (m *LiquidatePositionData) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2898,7 +2991,7 @@ func (m *MsgBatchLiquidatePositions) Reset() { *m = MsgBatchLiquidatePos func (m *MsgBatchLiquidatePositions) String() string { return proto.CompactTextString(m) } func (*MsgBatchLiquidatePositions) ProtoMessage() {} func (*MsgBatchLiquidatePositions) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{60} + return fileDescriptor_7c861fb1c14863a5, []int{62} } func (m *MsgBatchLiquidatePositions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2957,7 +3050,7 @@ func (m *LiquidatePositionResult) Reset() { *m = LiquidatePositionResult func (m *LiquidatePositionResult) String() string { return proto.CompactTextString(m) } func (*LiquidatePositionResult) ProtoMessage() {} func (*LiquidatePositionResult) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{61} + return fileDescriptor_7c861fb1c14863a5, []int{63} } func (m *LiquidatePositionResult) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3024,7 +3117,7 @@ func (m *MsgBatchLiquidatePositionsResponse) Reset() { *m = MsgBatchLiqu func (m *MsgBatchLiquidatePositionsResponse) String() string { return proto.CompactTextString(m) } func (*MsgBatchLiquidatePositionsResponse) ProtoMessage() {} func (*MsgBatchLiquidatePositionsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{62} + return fileDescriptor_7c861fb1c14863a5, []int{64} } func (m *MsgBatchLiquidatePositionsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3072,7 +3165,7 @@ func (m *MsgOffsetPosition) Reset() { *m = MsgOffsetPosition{} } func (m *MsgOffsetPosition) String() string { return proto.CompactTextString(m) } func (*MsgOffsetPosition) ProtoMessage() {} func (*MsgOffsetPosition) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{63} + return fileDescriptor_7c861fb1c14863a5, []int{65} } func (m *MsgOffsetPosition) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3138,7 +3231,7 @@ func (m *MsgOffsetPositionResponse) Reset() { *m = MsgOffsetPositionResp func (m *MsgOffsetPositionResponse) String() string { return proto.CompactTextString(m) } func (*MsgOffsetPositionResponse) ProtoMessage() {} func (*MsgOffsetPositionResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{64} + return fileDescriptor_7c861fb1c14863a5, []int{66} } func (m *MsgOffsetPositionResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3181,7 +3274,7 @@ func (m *MsgEmergencySettleMarket) Reset() { *m = MsgEmergencySettleMark func (m *MsgEmergencySettleMarket) String() string { return proto.CompactTextString(m) } func (*MsgEmergencySettleMarket) ProtoMessage() {} func (*MsgEmergencySettleMarket) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{65} + return fileDescriptor_7c861fb1c14863a5, []int{67} } func (m *MsgEmergencySettleMarket) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3240,7 +3333,7 @@ func (m *MsgEmergencySettleMarketResponse) Reset() { *m = MsgEmergencySe func (m *MsgEmergencySettleMarketResponse) String() string { return proto.CompactTextString(m) } func (*MsgEmergencySettleMarketResponse) ProtoMessage() {} func (*MsgEmergencySettleMarketResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{66} + return fileDescriptor_7c861fb1c14863a5, []int{68} } func (m *MsgEmergencySettleMarketResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3288,7 +3381,7 @@ func (m *MsgIncreasePositionMargin) Reset() { *m = MsgIncreasePositionMa func (m *MsgIncreasePositionMargin) String() string { return proto.CompactTextString(m) } func (*MsgIncreasePositionMargin) ProtoMessage() {} func (*MsgIncreasePositionMargin) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{67} + return fileDescriptor_7c861fb1c14863a5, []int{69} } func (m *MsgIncreasePositionMargin) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3354,7 +3447,7 @@ func (m *MsgIncreasePositionMarginResponse) Reset() { *m = MsgIncreasePo func (m *MsgIncreasePositionMarginResponse) String() string { return proto.CompactTextString(m) } func (*MsgIncreasePositionMarginResponse) ProtoMessage() {} func (*MsgIncreasePositionMarginResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{68} + return fileDescriptor_7c861fb1c14863a5, []int{70} } func (m *MsgIncreasePositionMarginResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3402,7 +3495,7 @@ func (m *MsgDecreasePositionMargin) Reset() { *m = MsgDecreasePositionMa func (m *MsgDecreasePositionMargin) String() string { return proto.CompactTextString(m) } func (*MsgDecreasePositionMargin) ProtoMessage() {} func (*MsgDecreasePositionMargin) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{69} + return fileDescriptor_7c861fb1c14863a5, []int{71} } func (m *MsgDecreasePositionMargin) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3468,7 +3561,7 @@ func (m *MsgDecreasePositionMarginResponse) Reset() { *m = MsgDecreasePo func (m *MsgDecreasePositionMarginResponse) String() string { return proto.CompactTextString(m) } func (*MsgDecreasePositionMarginResponse) ProtoMessage() {} func (*MsgDecreasePositionMarginResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{70} + return fileDescriptor_7c861fb1c14863a5, []int{72} } func (m *MsgDecreasePositionMarginResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3513,7 +3606,7 @@ func (m *MsgPrivilegedExecuteContract) Reset() { *m = MsgPrivilegedExecu func (m *MsgPrivilegedExecuteContract) String() string { return proto.CompactTextString(m) } func (*MsgPrivilegedExecuteContract) ProtoMessage() {} func (*MsgPrivilegedExecuteContract) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{71} + return fileDescriptor_7c861fb1c14863a5, []int{73} } func (m *MsgPrivilegedExecuteContract) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3551,7 +3644,7 @@ func (m *MsgPrivilegedExecuteContractResponse) Reset() { *m = MsgPrivile func (m *MsgPrivilegedExecuteContractResponse) String() string { return proto.CompactTextString(m) } func (*MsgPrivilegedExecuteContractResponse) ProtoMessage() {} func (*MsgPrivilegedExecuteContractResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{72} + return fileDescriptor_7c861fb1c14863a5, []int{74} } func (m *MsgPrivilegedExecuteContractResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3590,7 +3683,7 @@ func (m *MsgRewardsOptOut) Reset() { *m = MsgRewardsOptOut{} } func (m *MsgRewardsOptOut) String() string { return proto.CompactTextString(m) } func (*MsgRewardsOptOut) ProtoMessage() {} func (*MsgRewardsOptOut) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{73} + return fileDescriptor_7c861fb1c14863a5, []int{75} } func (m *MsgRewardsOptOut) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3627,7 +3720,7 @@ func (m *MsgRewardsOptOutResponse) Reset() { *m = MsgRewardsOptOutRespon func (m *MsgRewardsOptOutResponse) String() string { return proto.CompactTextString(m) } func (*MsgRewardsOptOutResponse) ProtoMessage() {} func (*MsgRewardsOptOutResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{74} + return fileDescriptor_7c861fb1c14863a5, []int{76} } func (m *MsgRewardsOptOutResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3667,7 +3760,7 @@ func (m *MsgReclaimLockedFunds) Reset() { *m = MsgReclaimLockedFunds{} } func (m *MsgReclaimLockedFunds) String() string { return proto.CompactTextString(m) } func (*MsgReclaimLockedFunds) ProtoMessage() {} func (*MsgReclaimLockedFunds) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{75} + return fileDescriptor_7c861fb1c14863a5, []int{77} } func (m *MsgReclaimLockedFunds) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3726,7 +3819,7 @@ func (m *MsgReclaimLockedFundsResponse) Reset() { *m = MsgReclaimLockedF func (m *MsgReclaimLockedFundsResponse) String() string { return proto.CompactTextString(m) } func (*MsgReclaimLockedFundsResponse) ProtoMessage() {} func (*MsgReclaimLockedFundsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{76} + return fileDescriptor_7c861fb1c14863a5, []int{78} } func (m *MsgReclaimLockedFundsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3768,7 +3861,7 @@ func (m *MsgSignData) Reset() { *m = MsgSignData{} } func (m *MsgSignData) String() string { return proto.CompactTextString(m) } func (*MsgSignData) ProtoMessage() {} func (*MsgSignData) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{77} + return fileDescriptor_7c861fb1c14863a5, []int{79} } func (m *MsgSignData) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3821,7 +3914,7 @@ func (m *MsgSignDoc) Reset() { *m = MsgSignDoc{} } func (m *MsgSignDoc) String() string { return proto.CompactTextString(m) } func (*MsgSignDoc) ProtoMessage() {} func (*MsgSignDoc) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{78} + return fileDescriptor_7c861fb1c14863a5, []int{80} } func (m *MsgSignDoc) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3885,7 +3978,7 @@ func (m *MsgAdminUpdateBinaryOptionsMarket) Reset() { *m = MsgAdminUpdat func (m *MsgAdminUpdateBinaryOptionsMarket) String() string { return proto.CompactTextString(m) } func (*MsgAdminUpdateBinaryOptionsMarket) ProtoMessage() {} func (*MsgAdminUpdateBinaryOptionsMarket) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{79} + return fileDescriptor_7c861fb1c14863a5, []int{81} } func (m *MsgAdminUpdateBinaryOptionsMarket) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3962,7 +4055,7 @@ func (m *MsgAdminUpdateBinaryOptionsMarketResponse) String() string { } func (*MsgAdminUpdateBinaryOptionsMarketResponse) ProtoMessage() {} func (*MsgAdminUpdateBinaryOptionsMarketResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{80} + return fileDescriptor_7c861fb1c14863a5, []int{82} } func (m *MsgAdminUpdateBinaryOptionsMarketResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4003,7 +4096,7 @@ func (m *MsgAuthorizeStakeGrants) Reset() { *m = MsgAuthorizeStakeGrants func (m *MsgAuthorizeStakeGrants) String() string { return proto.CompactTextString(m) } func (*MsgAuthorizeStakeGrants) ProtoMessage() {} func (*MsgAuthorizeStakeGrants) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{81} + return fileDescriptor_7c861fb1c14863a5, []int{83} } func (m *MsgAuthorizeStakeGrants) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4053,7 +4146,7 @@ func (m *MsgAuthorizeStakeGrantsResponse) Reset() { *m = MsgAuthorizeSta func (m *MsgAuthorizeStakeGrantsResponse) String() string { return proto.CompactTextString(m) } func (*MsgAuthorizeStakeGrantsResponse) ProtoMessage() {} func (*MsgAuthorizeStakeGrantsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{82} + return fileDescriptor_7c861fb1c14863a5, []int{84} } func (m *MsgAuthorizeStakeGrantsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4094,7 +4187,7 @@ func (m *MsgActivateStakeGrant) Reset() { *m = MsgActivateStakeGrant{} } func (m *MsgActivateStakeGrant) String() string { return proto.CompactTextString(m) } func (*MsgActivateStakeGrant) ProtoMessage() {} func (*MsgActivateStakeGrant) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{83} + return fileDescriptor_7c861fb1c14863a5, []int{85} } func (m *MsgActivateStakeGrant) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4144,7 +4237,7 @@ func (m *MsgActivateStakeGrantResponse) Reset() { *m = MsgActivateStakeG func (m *MsgActivateStakeGrantResponse) String() string { return proto.CompactTextString(m) } func (*MsgActivateStakeGrantResponse) ProtoMessage() {} func (*MsgActivateStakeGrantResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{84} + return fileDescriptor_7c861fb1c14863a5, []int{86} } func (m *MsgActivateStakeGrantResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4183,7 +4276,7 @@ func (m *MsgBatchExchangeModification) Reset() { *m = MsgBatchExchangeMo func (m *MsgBatchExchangeModification) String() string { return proto.CompactTextString(m) } func (*MsgBatchExchangeModification) ProtoMessage() {} func (*MsgBatchExchangeModification) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{85} + return fileDescriptor_7c861fb1c14863a5, []int{87} } func (m *MsgBatchExchangeModification) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4219,7 +4312,7 @@ func (m *MsgBatchExchangeModificationResponse) Reset() { *m = MsgBatchEx func (m *MsgBatchExchangeModificationResponse) String() string { return proto.CompactTextString(m) } func (*MsgBatchExchangeModificationResponse) ProtoMessage() {} func (*MsgBatchExchangeModificationResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{86} + return fileDescriptor_7c861fb1c14863a5, []int{88} } func (m *MsgBatchExchangeModificationResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4258,7 +4351,7 @@ func (m *MsgSpotMarketLaunch) Reset() { *m = MsgSpotMarketLaunch{} } func (m *MsgSpotMarketLaunch) String() string { return proto.CompactTextString(m) } func (*MsgSpotMarketLaunch) ProtoMessage() {} func (*MsgSpotMarketLaunch) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{87} + return fileDescriptor_7c861fb1c14863a5, []int{89} } func (m *MsgSpotMarketLaunch) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4294,7 +4387,7 @@ func (m *MsgSpotMarketLaunchResponse) Reset() { *m = MsgSpotMarketLaunch func (m *MsgSpotMarketLaunchResponse) String() string { return proto.CompactTextString(m) } func (*MsgSpotMarketLaunchResponse) ProtoMessage() {} func (*MsgSpotMarketLaunchResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{88} + return fileDescriptor_7c861fb1c14863a5, []int{90} } func (m *MsgSpotMarketLaunchResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4333,7 +4426,7 @@ func (m *MsgPerpetualMarketLaunch) Reset() { *m = MsgPerpetualMarketLaun func (m *MsgPerpetualMarketLaunch) String() string { return proto.CompactTextString(m) } func (*MsgPerpetualMarketLaunch) ProtoMessage() {} func (*MsgPerpetualMarketLaunch) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{89} + return fileDescriptor_7c861fb1c14863a5, []int{91} } func (m *MsgPerpetualMarketLaunch) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4369,7 +4462,7 @@ func (m *MsgPerpetualMarketLaunchResponse) Reset() { *m = MsgPerpetualMa func (m *MsgPerpetualMarketLaunchResponse) String() string { return proto.CompactTextString(m) } func (*MsgPerpetualMarketLaunchResponse) ProtoMessage() {} func (*MsgPerpetualMarketLaunchResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{90} + return fileDescriptor_7c861fb1c14863a5, []int{92} } func (m *MsgPerpetualMarketLaunchResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4408,7 +4501,7 @@ func (m *MsgExpiryFuturesMarketLaunch) Reset() { *m = MsgExpiryFuturesMa func (m *MsgExpiryFuturesMarketLaunch) String() string { return proto.CompactTextString(m) } func (*MsgExpiryFuturesMarketLaunch) ProtoMessage() {} func (*MsgExpiryFuturesMarketLaunch) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{91} + return fileDescriptor_7c861fb1c14863a5, []int{93} } func (m *MsgExpiryFuturesMarketLaunch) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4444,7 +4537,7 @@ func (m *MsgExpiryFuturesMarketLaunchResponse) Reset() { *m = MsgExpiryF func (m *MsgExpiryFuturesMarketLaunchResponse) String() string { return proto.CompactTextString(m) } func (*MsgExpiryFuturesMarketLaunchResponse) ProtoMessage() {} func (*MsgExpiryFuturesMarketLaunchResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{92} + return fileDescriptor_7c861fb1c14863a5, []int{94} } func (m *MsgExpiryFuturesMarketLaunchResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4483,7 +4576,7 @@ func (m *MsgBinaryOptionsMarketLaunch) Reset() { *m = MsgBinaryOptionsMa func (m *MsgBinaryOptionsMarketLaunch) String() string { return proto.CompactTextString(m) } func (*MsgBinaryOptionsMarketLaunch) ProtoMessage() {} func (*MsgBinaryOptionsMarketLaunch) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{93} + return fileDescriptor_7c861fb1c14863a5, []int{95} } func (m *MsgBinaryOptionsMarketLaunch) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4519,7 +4612,7 @@ func (m *MsgBinaryOptionsMarketLaunchResponse) Reset() { *m = MsgBinaryO func (m *MsgBinaryOptionsMarketLaunchResponse) String() string { return proto.CompactTextString(m) } func (*MsgBinaryOptionsMarketLaunchResponse) ProtoMessage() {} func (*MsgBinaryOptionsMarketLaunchResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{94} + return fileDescriptor_7c861fb1c14863a5, []int{96} } func (m *MsgBinaryOptionsMarketLaunchResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4558,7 +4651,7 @@ func (m *MsgBatchCommunityPoolSpend) Reset() { *m = MsgBatchCommunityPoo func (m *MsgBatchCommunityPoolSpend) String() string { return proto.CompactTextString(m) } func (*MsgBatchCommunityPoolSpend) ProtoMessage() {} func (*MsgBatchCommunityPoolSpend) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{95} + return fileDescriptor_7c861fb1c14863a5, []int{97} } func (m *MsgBatchCommunityPoolSpend) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4594,7 +4687,7 @@ func (m *MsgBatchCommunityPoolSpendResponse) Reset() { *m = MsgBatchComm func (m *MsgBatchCommunityPoolSpendResponse) String() string { return proto.CompactTextString(m) } func (*MsgBatchCommunityPoolSpendResponse) ProtoMessage() {} func (*MsgBatchCommunityPoolSpendResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{96} + return fileDescriptor_7c861fb1c14863a5, []int{98} } func (m *MsgBatchCommunityPoolSpendResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4633,7 +4726,7 @@ func (m *MsgSpotMarketParamUpdate) Reset() { *m = MsgSpotMarketParamUpda func (m *MsgSpotMarketParamUpdate) String() string { return proto.CompactTextString(m) } func (*MsgSpotMarketParamUpdate) ProtoMessage() {} func (*MsgSpotMarketParamUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{97} + return fileDescriptor_7c861fb1c14863a5, []int{99} } func (m *MsgSpotMarketParamUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4669,7 +4762,7 @@ func (m *MsgSpotMarketParamUpdateResponse) Reset() { *m = MsgSpotMarketP func (m *MsgSpotMarketParamUpdateResponse) String() string { return proto.CompactTextString(m) } func (*MsgSpotMarketParamUpdateResponse) ProtoMessage() {} func (*MsgSpotMarketParamUpdateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{98} + return fileDescriptor_7c861fb1c14863a5, []int{100} } func (m *MsgSpotMarketParamUpdateResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4708,7 +4801,7 @@ func (m *MsgDerivativeMarketParamUpdate) Reset() { *m = MsgDerivativeMar func (m *MsgDerivativeMarketParamUpdate) String() string { return proto.CompactTextString(m) } func (*MsgDerivativeMarketParamUpdate) ProtoMessage() {} func (*MsgDerivativeMarketParamUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{99} + return fileDescriptor_7c861fb1c14863a5, []int{101} } func (m *MsgDerivativeMarketParamUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4746,7 +4839,7 @@ func (m *MsgDerivativeMarketParamUpdateResponse) Reset() { func (m *MsgDerivativeMarketParamUpdateResponse) String() string { return proto.CompactTextString(m) } func (*MsgDerivativeMarketParamUpdateResponse) ProtoMessage() {} func (*MsgDerivativeMarketParamUpdateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{100} + return fileDescriptor_7c861fb1c14863a5, []int{102} } func (m *MsgDerivativeMarketParamUpdateResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4785,7 +4878,7 @@ func (m *MsgBinaryOptionsMarketParamUpdate) Reset() { *m = MsgBinaryOpti func (m *MsgBinaryOptionsMarketParamUpdate) String() string { return proto.CompactTextString(m) } func (*MsgBinaryOptionsMarketParamUpdate) ProtoMessage() {} func (*MsgBinaryOptionsMarketParamUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{101} + return fileDescriptor_7c861fb1c14863a5, []int{103} } func (m *MsgBinaryOptionsMarketParamUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4825,7 +4918,7 @@ func (m *MsgBinaryOptionsMarketParamUpdateResponse) String() string { } func (*MsgBinaryOptionsMarketParamUpdateResponse) ProtoMessage() {} func (*MsgBinaryOptionsMarketParamUpdateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{102} + return fileDescriptor_7c861fb1c14863a5, []int{104} } func (m *MsgBinaryOptionsMarketParamUpdateResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4864,7 +4957,7 @@ func (m *MsgMarketForcedSettlement) Reset() { *m = MsgMarketForcedSettle func (m *MsgMarketForcedSettlement) String() string { return proto.CompactTextString(m) } func (*MsgMarketForcedSettlement) ProtoMessage() {} func (*MsgMarketForcedSettlement) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{103} + return fileDescriptor_7c861fb1c14863a5, []int{105} } func (m *MsgMarketForcedSettlement) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4900,7 +4993,7 @@ func (m *MsgMarketForcedSettlementResponse) Reset() { *m = MsgMarketForc func (m *MsgMarketForcedSettlementResponse) String() string { return proto.CompactTextString(m) } func (*MsgMarketForcedSettlementResponse) ProtoMessage() {} func (*MsgMarketForcedSettlementResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{104} + return fileDescriptor_7c861fb1c14863a5, []int{106} } func (m *MsgMarketForcedSettlementResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4939,7 +5032,7 @@ func (m *MsgTradingRewardCampaignLaunch) Reset() { *m = MsgTradingReward func (m *MsgTradingRewardCampaignLaunch) String() string { return proto.CompactTextString(m) } func (*MsgTradingRewardCampaignLaunch) ProtoMessage() {} func (*MsgTradingRewardCampaignLaunch) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{105} + return fileDescriptor_7c861fb1c14863a5, []int{107} } func (m *MsgTradingRewardCampaignLaunch) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4977,7 +5070,7 @@ func (m *MsgTradingRewardCampaignLaunchResponse) Reset() { func (m *MsgTradingRewardCampaignLaunchResponse) String() string { return proto.CompactTextString(m) } func (*MsgTradingRewardCampaignLaunchResponse) ProtoMessage() {} func (*MsgTradingRewardCampaignLaunchResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{106} + return fileDescriptor_7c861fb1c14863a5, []int{108} } func (m *MsgTradingRewardCampaignLaunchResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5016,7 +5109,7 @@ func (m *MsgExchangeEnable) Reset() { *m = MsgExchangeEnable{} } func (m *MsgExchangeEnable) String() string { return proto.CompactTextString(m) } func (*MsgExchangeEnable) ProtoMessage() {} func (*MsgExchangeEnable) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{107} + return fileDescriptor_7c861fb1c14863a5, []int{109} } func (m *MsgExchangeEnable) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5052,7 +5145,7 @@ func (m *MsgExchangeEnableResponse) Reset() { *m = MsgExchangeEnableResp func (m *MsgExchangeEnableResponse) String() string { return proto.CompactTextString(m) } func (*MsgExchangeEnableResponse) ProtoMessage() {} func (*MsgExchangeEnableResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{108} + return fileDescriptor_7c861fb1c14863a5, []int{110} } func (m *MsgExchangeEnableResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5091,7 +5184,7 @@ func (m *MsgTradingRewardCampaignUpdate) Reset() { *m = MsgTradingReward func (m *MsgTradingRewardCampaignUpdate) String() string { return proto.CompactTextString(m) } func (*MsgTradingRewardCampaignUpdate) ProtoMessage() {} func (*MsgTradingRewardCampaignUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{109} + return fileDescriptor_7c861fb1c14863a5, []int{111} } func (m *MsgTradingRewardCampaignUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5129,7 +5222,7 @@ func (m *MsgTradingRewardCampaignUpdateResponse) Reset() { func (m *MsgTradingRewardCampaignUpdateResponse) String() string { return proto.CompactTextString(m) } func (*MsgTradingRewardCampaignUpdateResponse) ProtoMessage() {} func (*MsgTradingRewardCampaignUpdateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{110} + return fileDescriptor_7c861fb1c14863a5, []int{112} } func (m *MsgTradingRewardCampaignUpdateResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5168,7 +5261,7 @@ func (m *MsgTradingRewardPendingPointsUpdate) Reset() { *m = MsgTradingR func (m *MsgTradingRewardPendingPointsUpdate) String() string { return proto.CompactTextString(m) } func (*MsgTradingRewardPendingPointsUpdate) ProtoMessage() {} func (*MsgTradingRewardPendingPointsUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{111} + return fileDescriptor_7c861fb1c14863a5, []int{113} } func (m *MsgTradingRewardPendingPointsUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5208,7 +5301,7 @@ func (m *MsgTradingRewardPendingPointsUpdateResponse) String() string { } func (*MsgTradingRewardPendingPointsUpdateResponse) ProtoMessage() {} func (*MsgTradingRewardPendingPointsUpdateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{112} + return fileDescriptor_7c861fb1c14863a5, []int{114} } func (m *MsgTradingRewardPendingPointsUpdateResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5247,7 +5340,7 @@ func (m *MsgFeeDiscount) Reset() { *m = MsgFeeDiscount{} } func (m *MsgFeeDiscount) String() string { return proto.CompactTextString(m) } func (*MsgFeeDiscount) ProtoMessage() {} func (*MsgFeeDiscount) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{113} + return fileDescriptor_7c861fb1c14863a5, []int{115} } func (m *MsgFeeDiscount) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5283,7 +5376,7 @@ func (m *MsgFeeDiscountResponse) Reset() { *m = MsgFeeDiscountResponse{} func (m *MsgFeeDiscountResponse) String() string { return proto.CompactTextString(m) } func (*MsgFeeDiscountResponse) ProtoMessage() {} func (*MsgFeeDiscountResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{114} + return fileDescriptor_7c861fb1c14863a5, []int{116} } func (m *MsgFeeDiscountResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5326,7 +5419,7 @@ func (m *MsgAtomicMarketOrderFeeMultiplierSchedule) String() string { } func (*MsgAtomicMarketOrderFeeMultiplierSchedule) ProtoMessage() {} func (*MsgAtomicMarketOrderFeeMultiplierSchedule) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{115} + return fileDescriptor_7c861fb1c14863a5, []int{117} } func (m *MsgAtomicMarketOrderFeeMultiplierSchedule) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5366,7 +5459,7 @@ func (m *MsgAtomicMarketOrderFeeMultiplierScheduleResponse) String() string { } func (*MsgAtomicMarketOrderFeeMultiplierScheduleResponse) ProtoMessage() {} func (*MsgAtomicMarketOrderFeeMultiplierScheduleResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{116} + return fileDescriptor_7c861fb1c14863a5, []int{118} } func (m *MsgAtomicMarketOrderFeeMultiplierScheduleResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5408,7 +5501,7 @@ func (m *MsgSetDelegationTransferReceivers) Reset() { *m = MsgSetDelegat func (m *MsgSetDelegationTransferReceivers) String() string { return proto.CompactTextString(m) } func (*MsgSetDelegationTransferReceivers) ProtoMessage() {} func (*MsgSetDelegationTransferReceivers) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{117} + return fileDescriptor_7c861fb1c14863a5, []int{119} } func (m *MsgSetDelegationTransferReceivers) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5464,7 +5557,7 @@ func (m *MsgSetDelegationTransferReceiversResponse) String() string { } func (*MsgSetDelegationTransferReceiversResponse) ProtoMessage() {} func (*MsgSetDelegationTransferReceiversResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{118} + return fileDescriptor_7c861fb1c14863a5, []int{120} } func (m *MsgSetDelegationTransferReceiversResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5503,7 +5596,7 @@ func (m *MsgCancelPostOnlyMode) Reset() { *m = MsgCancelPostOnlyMode{} } func (m *MsgCancelPostOnlyMode) String() string { return proto.CompactTextString(m) } func (*MsgCancelPostOnlyMode) ProtoMessage() {} func (*MsgCancelPostOnlyMode) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{119} + return fileDescriptor_7c861fb1c14863a5, []int{121} } func (m *MsgCancelPostOnlyMode) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5547,7 +5640,7 @@ func (m *MsgCancelPostOnlyModeResponse) Reset() { *m = MsgCancelPostOnly func (m *MsgCancelPostOnlyModeResponse) String() string { return proto.CompactTextString(m) } func (*MsgCancelPostOnlyModeResponse) ProtoMessage() {} func (*MsgCancelPostOnlyModeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{120} + return fileDescriptor_7c861fb1c14863a5, []int{122} } func (m *MsgCancelPostOnlyModeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5589,7 +5682,7 @@ func (m *MsgActivatePostOnlyMode) Reset() { *m = MsgActivatePostOnlyMode func (m *MsgActivatePostOnlyMode) String() string { return proto.CompactTextString(m) } func (*MsgActivatePostOnlyMode) ProtoMessage() {} func (*MsgActivatePostOnlyMode) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{121} + return fileDescriptor_7c861fb1c14863a5, []int{123} } func (m *MsgActivatePostOnlyMode) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5641,7 +5734,7 @@ func (m *MsgActivatePostOnlyModeResponse) Reset() { *m = MsgActivatePost func (m *MsgActivatePostOnlyModeResponse) String() string { return proto.CompactTextString(m) } func (*MsgActivatePostOnlyModeResponse) ProtoMessage() {} func (*MsgActivatePostOnlyModeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{122} + return fileDescriptor_7c861fb1c14863a5, []int{124} } func (m *MsgActivatePostOnlyModeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5670,9 +5763,9 @@ func (m *MsgActivatePostOnlyModeResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgActivatePostOnlyModeResponse proto.InternalMessageInfo -// MsgLiquidateCrossMarginPool performs graduated selective liquidation on a -// cross-margin quote-denom pool, canceling pool orders first and then closing -// only enough positions to restore health according to the configured target. +// MsgLiquidateCrossMarginPool liquidates a cross-margin quote-denom pool. The +// legacy mode performs graduated public-book liquidation; RFQ-only mode accepts +// an authenticated atomic full-pool close from the configured contract. type MsgLiquidateCrossMarginPool struct { // the liquidator's Injective address Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty"` @@ -5680,13 +5773,17 @@ type MsgLiquidateCrossMarginPool struct { SubaccountId string `protobuf:"bytes,2,opt,name=subaccount_id,json=subaccountId,proto3" json:"subaccount_id,omitempty"` // identifies which cross-margin pool (by quote denom) QuoteDenom string `protobuf:"bytes,3,opt,name=quote_denom,json=quoteDenom,proto3" json:"quote_denom,omitempty"` + // rfq_action is the synthetic-trade action returned by the configured RFQ + // contract. It is required for an active-market RFQ liquidation and may be + // empty when an already-paused liquidatable pool is routed to settlement. + RfqAction string `protobuf:"bytes,4,opt,name=rfq_action,json=rfqAction,proto3" json:"rfq_action,omitempty"` } func (m *MsgLiquidateCrossMarginPool) Reset() { *m = MsgLiquidateCrossMarginPool{} } func (m *MsgLiquidateCrossMarginPool) String() string { return proto.CompactTextString(m) } func (*MsgLiquidateCrossMarginPool) ProtoMessage() {} func (*MsgLiquidateCrossMarginPool) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{123} + return fileDescriptor_7c861fb1c14863a5, []int{125} } func (m *MsgLiquidateCrossMarginPool) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5736,6 +5833,13 @@ func (m *MsgLiquidateCrossMarginPool) GetQuoteDenom() string { return "" } +func (m *MsgLiquidateCrossMarginPool) GetRfqAction() string { + if m != nil { + return m.RfqAction + } + return "" +} + // MsgLiquidateCrossMarginPoolResponse defines the // Msg/LiquidateCrossMarginPool response type. type MsgLiquidateCrossMarginPoolResponse struct { @@ -5745,7 +5849,7 @@ func (m *MsgLiquidateCrossMarginPoolResponse) Reset() { *m = MsgLiquidat func (m *MsgLiquidateCrossMarginPoolResponse) String() string { return proto.CompactTextString(m) } func (*MsgLiquidateCrossMarginPoolResponse) ProtoMessage() {} func (*MsgLiquidateCrossMarginPoolResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_7c861fb1c14863a5, []int{124} + return fileDescriptor_7c861fb1c14863a5, []int{126} } func (m *MsgLiquidateCrossMarginPoolResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5781,6 +5885,8 @@ func init() { proto.RegisterType((*MsgUpdateDerivativeMarketResponse)(nil), "injective.exchange.v2.MsgUpdateDerivativeMarketResponse") proto.RegisterType((*MsgUpdateParams)(nil), "injective.exchange.v2.MsgUpdateParams") proto.RegisterType((*MsgUpdateParamsResponse)(nil), "injective.exchange.v2.MsgUpdateParamsResponse") + proto.RegisterType((*MsgUpdateSwapParams)(nil), "injective.exchange.v2.MsgUpdateSwapParams") + proto.RegisterType((*MsgUpdateSwapParamsResponse)(nil), "injective.exchange.v2.MsgUpdateSwapParamsResponse") proto.RegisterType((*MsgDeposit)(nil), "injective.exchange.v2.MsgDeposit") proto.RegisterType((*MsgDepositResponse)(nil), "injective.exchange.v2.MsgDepositResponse") proto.RegisterType((*MsgWithdraw)(nil), "injective.exchange.v2.MsgWithdraw") @@ -5905,363 +6011,368 @@ func init() { func init() { proto.RegisterFile("injective/exchange/v2/tx.proto", fileDescriptor_7c861fb1c14863a5) } var fileDescriptor_7c861fb1c14863a5 = []byte{ - // 5685 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x3d, 0x6d, 0x6c, 0x1c, 0xc7, - 0x75, 0x5a, 0x7e, 0xf3, 0xf1, 0x43, 0xe4, 0x92, 0x14, 0x4f, 0x47, 0x89, 0x94, 0x56, 0x1f, 0xa6, - 0x64, 0x89, 0x27, 0xd1, 0x92, 0x2c, 0x9f, 0x22, 0xdb, 0xfc, 0x10, 0x1b, 0xd9, 0xa2, 0x45, 0x1f, - 0xe5, 0x38, 0x76, 0x13, 0x1c, 0x96, 0x7b, 0xc3, 0xe3, 0x86, 0x77, 0xbb, 0xe7, 0xdd, 0x3d, 0x4a, - 0xf4, 0x8f, 0xe6, 0x03, 0x45, 0x23, 0x24, 0x28, 0x10, 0xa0, 0x6d, 0x80, 0x02, 0x2d, 0x90, 0xb6, - 0x68, 0x8b, 0xa6, 0x45, 0xeb, 0xb4, 0x01, 0xfa, 0x85, 0x22, 0x68, 0x81, 0x00, 0x41, 0xfb, 0xc7, - 0x2d, 0x50, 0xa0, 0xc8, 0x0f, 0x35, 0xb0, 0x7f, 0xb8, 0x48, 0xff, 0x15, 0xc8, 0x9f, 0xf6, 0x4f, - 0xb1, 0x33, 0xb3, 0x73, 0xfb, 0x31, 0x33, 0xbb, 0x77, 0x22, 0x1d, 0x27, 0xc8, 0x1f, 0x5b, 0x37, - 0xf3, 0xde, 0x9b, 0xf7, 0xde, 0xbc, 0x79, 0xf3, 0xe6, 0xcd, 0x9b, 0x25, 0xcc, 0x9a, 0xd6, 0x17, - 0x90, 0xe1, 0x99, 0x7b, 0xa8, 0x80, 0x1e, 0x19, 0x3b, 0xba, 0x55, 0x45, 0x85, 0xbd, 0xc5, 0x82, - 0xf7, 0x68, 0xa1, 0xe1, 0xd8, 0x9e, 0xad, 0x4e, 0xb1, 0xfe, 0x85, 0xa0, 0x7f, 0x61, 0x6f, 0x31, - 0x3f, 0x6b, 0xd8, 0x6e, 0xdd, 0x76, 0x0b, 0x5b, 0xba, 0x8b, 0x0a, 0x7b, 0x57, 0xb7, 0x90, 0xa7, - 0x5f, 0x2d, 0x18, 0xb6, 0x69, 0x11, 0xb4, 0xfc, 0x02, 0xed, 0xaf, 0x98, 0xae, 0xe7, 0x98, 0x5b, - 0x4d, 0xcf, 0xb4, 0x2d, 0x06, 0x17, 0x6e, 0xa4, 0xf0, 0xd3, 0x14, 0xbe, 0xee, 0x56, 0x0b, 0x7b, - 0x57, 0xfd, 0xff, 0xd1, 0x8e, 0xe3, 0xa4, 0xa3, 0x8c, 0x7f, 0x15, 0xc8, 0x0f, 0xda, 0x35, 0x59, - 0xb5, 0xab, 0x36, 0x69, 0xf7, 0xff, 0x45, 0x5b, 0xcf, 0xf2, 0x05, 0x62, 0xcc, 0x13, 0xa8, 0xd3, - 0x7c, 0x28, 0xdb, 0xa9, 0x20, 0x87, 0x82, 0x68, 0x7c, 0x90, 0xba, 0xee, 0xec, 0x22, 0x4f, 0x3e, - 0x58, 0xc3, 0xb1, 0x1b, 0xb6, 0xab, 0xd7, 0x28, 0xd4, 0xb9, 0x16, 0x94, 0xed, 0xe8, 0x46, 0xad, - 0xa5, 0x31, 0xf2, 0x93, 0x82, 0x8d, 0xeb, 0x75, 0xd3, 0xb2, 0x0b, 0xf8, 0xbf, 0xa4, 0x49, 0xfb, - 0x83, 0x6e, 0x98, 0x58, 0x77, 0xab, 0x6f, 0x34, 0x2a, 0xba, 0x87, 0x36, 0x1b, 0xb6, 0xb7, 0x8e, - 0x47, 0x57, 0x27, 0xa1, 0x57, 0xaf, 0xd4, 0x4d, 0x2b, 0xa7, 0x9c, 0x52, 0xe6, 0x07, 0x4b, 0xe4, - 0x87, 0x3a, 0x03, 0x83, 0x84, 0xbb, 0xb2, 0x59, 0xc9, 0x75, 0xe1, 0x9e, 0x01, 0xd2, 0x70, 0xb7, - 0xa2, 0x9e, 0x04, 0xb0, 0xd0, 0xc3, 0xb2, 0x67, 0x1a, 0xbb, 0xc8, 0xc9, 0x75, 0xe3, 0xde, 0x41, - 0x0b, 0x3d, 0x7c, 0x80, 0x1b, 0xd4, 0xb7, 0x60, 0xda, 0xef, 0xae, 0x9b, 0x56, 0xb9, 0xe1, 0x98, - 0x06, 0xc2, 0x80, 0x65, 0xd7, 0x7c, 0x17, 0xe5, 0x7a, 0x7c, 0xd8, 0xe5, 0x33, 0x3f, 0x78, 0x32, - 0x77, 0xe4, 0x87, 0x4f, 0xe6, 0x66, 0xc8, 0x1c, 0xb8, 0x95, 0xdd, 0x05, 0xd3, 0x2e, 0xd4, 0x75, - 0x6f, 0x67, 0xe1, 0x1e, 0xaa, 0xea, 0xc6, 0xfe, 0x2a, 0x32, 0x4a, 0x13, 0x16, 0x7a, 0xb8, 0x6e, - 0x5a, 0x1b, 0x3e, 0x05, 0x9f, 0xf0, 0xa6, 0xf9, 0x2e, 0x52, 0xcb, 0x90, 0x0f, 0x48, 0xbf, 0xd3, - 0xd4, 0x2d, 0xcf, 0xf4, 0xf6, 0x43, 0xd4, 0x7b, 0xb3, 0x53, 0x3f, 0x46, 0xa8, 0xbf, 0x4e, 0x89, - 0xb0, 0x01, 0xd6, 0x61, 0x2c, 0x18, 0xc0, 0xb2, 0x7d, 0xa3, 0xd2, 0x6b, 0xb9, 0xbe, 0xec, 0x64, - 0x47, 0x09, 0xd9, 0xd7, 0x28, 0x6a, 0xb1, 0xf0, 0x5f, 0xdf, 0x9a, 0x3b, 0xf2, 0x95, 0x8f, 0xde, - 0xbb, 0x48, 0xd4, 0xfa, 0xb5, 0x8f, 0xde, 0xbb, 0x78, 0x82, 0xcd, 0x2e, 0x67, 0x36, 0xb4, 0x93, - 0x30, 0xc3, 0x69, 0x2e, 0x21, 0xb7, 0x61, 0x5b, 0x2e, 0xd2, 0x7e, 0xb7, 0x1f, 0x8e, 0xb3, 0xfe, - 0x55, 0xe4, 0x98, 0x7b, 0xba, 0x6f, 0x0b, 0xbf, 0x98, 0xca, 0x43, 0x9f, 0x4a, 0xf5, 0x73, 0x90, - 0xf3, 0xc9, 0x99, 0x96, 0xe9, 0x99, 0x7a, 0xad, 0x5c, 0xd7, 0x9d, 0xaa, 0x69, 0x95, 0x1d, 0xdd, - 0x33, 0xed, 0x5c, 0x7f, 0x76, 0xb2, 0x53, 0x16, 0x7a, 0x78, 0x97, 0xd0, 0x58, 0xc7, 0x24, 0x4a, - 0x3e, 0x05, 0xb5, 0x02, 0x27, 0x30, 0xb3, 0xba, 0x69, 0x79, 0xc8, 0xd2, 0x2d, 0x03, 0x45, 0x47, - 0x18, 0xc8, 0x3e, 0xc2, 0x71, 0x9f, 0xf1, 0x16, 0x9d, 0xf0, 0x28, 0x6f, 0x93, 0xe9, 0x74, 0x50, - 0xa5, 0x19, 0x1f, 0x60, 0x30, 0xfb, 0x00, 0x93, 0x16, 0x7a, 0x58, 0xc2, 0x24, 0xc2, 0xb4, 0xcb, - 0xe0, 0x8b, 0x56, 0xb6, 0x1b, 0xa8, 0xa5, 0xef, 0xb2, 0xa1, 0x37, 0x72, 0x70, 0x4a, 0x99, 0x1f, - 0x5a, 0x3c, 0xbf, 0xc0, 0xf5, 0xfe, 0x0b, 0xf7, 0x1b, 0x88, 0xe9, 0x78, 0x45, 0x6f, 0x2c, 0xf7, - 0xf8, 0x1c, 0x94, 0x54, 0x0b, 0x3d, 0x8c, 0xf5, 0xa8, 0x55, 0xc8, 0x19, 0x8e, 0xed, 0xba, 0x01, - 0xdf, 0xa8, 0x66, 0x56, 0xcd, 0x2d, 0xb3, 0x66, 0x7a, 0xfb, 0xb9, 0xa1, 0x53, 0xca, 0xfc, 0xe8, - 0xe2, 0x65, 0xc1, 0x18, 0x2b, 0x3e, 0x1a, 0xe1, 0xf5, 0x4e, 0x0b, 0xa9, 0x74, 0xcc, 0xe0, 0xb6, - 0x17, 0x5f, 0x78, 0xfc, 0xad, 0xb9, 0x23, 0xc9, 0x85, 0xab, 0x25, 0x17, 0x6e, 0x7c, 0x05, 0x6a, - 0x67, 0xe0, 0xb4, 0xb0, 0x93, 0x2d, 0xe2, 0xbf, 0x52, 0xe0, 0x28, 0x83, 0xda, 0xd0, 0x1d, 0xbd, - 0xee, 0xaa, 0x37, 0x60, 0x50, 0x6f, 0x7a, 0x3b, 0xb6, 0xe3, 0x4b, 0x83, 0x97, 0xef, 0x72, 0xee, - 0xdf, 0xbe, 0x7b, 0x79, 0x92, 0xee, 0x52, 0x4b, 0x95, 0x8a, 0x83, 0x5c, 0x77, 0xd3, 0x73, 0x4c, - 0xab, 0x5a, 0x6a, 0x81, 0xaa, 0xb7, 0xa0, 0xaf, 0x81, 0x29, 0xe0, 0x95, 0x3d, 0xb4, 0x78, 0x52, - 0xa0, 0x02, 0x32, 0x0c, 0xd5, 0x2e, 0x45, 0x29, 0x3e, 0xeb, 0x0b, 0xd8, 0x22, 0xe6, 0x0b, 0x99, - 0x4b, 0x0a, 0x49, 0x50, 0xb5, 0xe3, 0x30, 0x1d, 0x6b, 0x62, 0x02, 0xfd, 0x85, 0x02, 0xb0, 0xee, - 0x56, 0x57, 0x51, 0xc3, 0x76, 0x4d, 0x4f, 0x3d, 0x06, 0x7d, 0x2e, 0xb2, 0x2a, 0xc8, 0xa1, 0x7e, - 0x88, 0xfe, 0x52, 0xcf, 0xc0, 0x88, 0xdb, 0xdc, 0xd2, 0x0d, 0xc3, 0x6e, 0x5a, 0x21, 0x67, 0x34, - 0xdc, 0x6a, 0xbc, 0x5b, 0x51, 0x9f, 0x87, 0x3e, 0xbd, 0xee, 0xff, 0x1b, 0x3b, 0xa3, 0xa1, 0xc5, - 0xe3, 0x74, 0xfb, 0x5f, 0xf0, 0xc3, 0x83, 0x05, 0xba, 0xd9, 0x2d, 0xac, 0xd8, 0xa6, 0x15, 0x08, - 0x43, 0xc0, 0x8b, 0xcf, 0x86, 0x67, 0x8d, 0x0e, 0xe9, 0x4b, 0x34, 0x11, 0x96, 0x88, 0xb2, 0xa8, - 0x4d, 0x82, 0xda, 0xfa, 0xc5, 0xe4, 0xf8, 0x8e, 0x02, 0x43, 0xeb, 0x6e, 0xf5, 0x4d, 0xd3, 0xdb, - 0xa9, 0x38, 0xfa, 0xc3, 0x9f, 0x92, 0x20, 0x97, 0x04, 0x82, 0x4c, 0x86, 0x05, 0x09, 0x78, 0xd4, - 0xa6, 0xf0, 0xae, 0x1e, 0xfc, 0x64, 0xa2, 0xfc, 0x44, 0x81, 0xd9, 0xd6, 0x46, 0xc2, 0xf8, 0x2a, - 0x99, 0xee, 0xee, 0x86, 0x63, 0x6f, 0x9b, 0x35, 0xf4, 0x74, 0xd2, 0xbd, 0x01, 0xc3, 0x8e, 0xe9, - 0xee, 0xfa, 0xb1, 0x94, 0x4f, 0x8c, 0xca, 0x78, 0x49, 0x60, 0x7d, 0x5c, 0x06, 0xa8, 0xd8, 0x43, - 0x4e, 0xab, 0xa9, 0xf8, 0x92, 0x40, 0xf6, 0x67, 0x38, 0x9b, 0x26, 0x8f, 0xa6, 0x36, 0x0f, 0xe7, - 0xe5, 0x10, 0x4c, 0x43, 0x7f, 0xa2, 0x60, 0x83, 0x5e, 0x71, 0x10, 0xdd, 0x6a, 0xef, 0x99, 0x75, - 0xd3, 0xbb, 0xef, 0x47, 0x6d, 0x42, 0xd5, 0x7c, 0x0a, 0x7a, 0x71, 0x58, 0x47, 0x17, 0xdb, 0x29, - 0x91, 0xb8, 0x0d, 0x9b, 0x10, 0xa2, 0x22, 0x12, 0xa4, 0xe2, 0x4d, 0x81, 0x70, 0xa7, 0xc2, 0xc2, - 0xf1, 0xf8, 0xd1, 0x3e, 0x07, 0x73, 0x82, 0xae, 0x40, 0x1c, 0x7f, 0x23, 0xc7, 0xa3, 0x94, 0x77, - 0x74, 0x77, 0x87, 0xb2, 0x3d, 0x88, 0x5b, 0x3e, 0xad, 0xbb, 0x3b, 0xea, 0x18, 0x74, 0x1b, 0x6c, - 0x2a, 0xfd, 0x7f, 0x16, 0x07, 0x02, 0x6e, 0xb4, 0xbf, 0x56, 0xe0, 0xe4, 0xba, 0x5b, 0x5d, 0xd6, - 0x3d, 0x63, 0x87, 0x37, 0x86, 0x2b, 0xd4, 0xc7, 0x8b, 0xd0, 0x87, 0x87, 0xf0, 0xbd, 0x4f, 0x77, - 0x1b, 0x0a, 0xa1, 0x58, 0xc5, 0x17, 0x05, 0x1a, 0x39, 0x1f, 0xd6, 0x88, 0x98, 0x2f, 0xed, 0x2f, - 0x15, 0x38, 0x27, 0x85, 0x60, 0xea, 0x39, 0x0d, 0xc3, 0x2d, 0xf5, 0x20, 0x37, 0xa7, 0x9c, 0xea, - 0x9e, 0x1f, 0x2c, 0x0d, 0x31, 0x05, 0x21, 0x57, 0x5d, 0x80, 0x09, 0x03, 0xd3, 0xa8, 0x94, 0x09, - 0x7b, 0x65, 0xc3, 0xac, 0x10, 0xc9, 0x06, 0x4b, 0xe3, 0xb4, 0x8b, 0x90, 0x5d, 0x31, 0x2b, 0xae, - 0x7a, 0x09, 0xd4, 0x6d, 0xdd, 0xac, 0xc5, 0xc0, 0xbb, 0x31, 0xf8, 0x18, 0xe9, 0x69, 0x41, 0x87, - 0xd4, 0xfd, 0xf5, 0x1e, 0xc8, 0xaf, 0xbb, 0xd5, 0xbb, 0x96, 0xeb, 0xe9, 0x96, 0xd7, 0x0a, 0xf2, - 0xee, 0xe9, 0x4d, 0xcb, 0xd8, 0x11, 0xea, 0xfa, 0x18, 0xf4, 0xd1, 0x28, 0x8d, 0x4c, 0x22, 0xfd, - 0xe5, 0x4f, 0xbc, 0xef, 0x51, 0xca, 0x15, 0x64, 0xd9, 0xf5, 0x20, 0x82, 0xf3, 0x5b, 0x56, 0xfd, - 0x06, 0x75, 0x0e, 0x86, 0xde, 0x69, 0xda, 0x5e, 0xd0, 0x8f, 0xa3, 0xb6, 0x12, 0xe0, 0x26, 0x02, - 0x50, 0x82, 0x09, 0x5e, 0x78, 0xd7, 0x46, 0x00, 0x36, 0x56, 0x8f, 0xc7, 0x76, 0x9f, 0x85, 0x63, - 0x82, 0xb8, 0xae, 0x8d, 0x00, 0xcc, 0x67, 0x2b, 0x11, 0xd4, 0xad, 0xc1, 0x70, 0x24, 0xa0, 0x6b, - 0x23, 0xf2, 0x1a, 0xaa, 0x87, 0xa2, 0xb9, 0x33, 0x30, 0x42, 0xb5, 0x66, 0x98, 0x75, 0xbd, 0xe6, - 0xe2, 0x00, 0x6b, 0xa4, 0x34, 0x4c, 0x14, 0x47, 0xda, 0xd4, 0x73, 0x30, 0x1a, 0xe8, 0x8e, 0x42, - 0x0d, 0x62, 0xa8, 0x11, 0xaa, 0x3e, 0xd2, 0x58, 0xbc, 0x25, 0xb0, 0xe2, 0x33, 0x61, 0x2b, 0x16, - 0x4c, 0xb7, 0x76, 0x16, 0x34, 0x71, 0x2f, 0x73, 0x56, 0xbf, 0x39, 0x88, 0x3d, 0x00, 0x05, 0xdb, - 0x40, 0x4e, 0x03, 0x79, 0x4d, 0x1c, 0x41, 0x76, 0x6e, 0x38, 0x31, 0xcb, 0xe8, 0x4e, 0x58, 0xc6, - 0x1c, 0x0c, 0x91, 0x43, 0x65, 0xd9, 0xd7, 0x4a, 0x60, 0x3a, 0xa4, 0x69, 0x59, 0x0f, 0x16, 0x15, - 0x06, 0xc0, 0x58, 0xc4, 0x66, 0x4a, 0x14, 0xe9, 0x75, 0xbf, 0xc9, 0x5f, 0x54, 0x14, 0xc4, 0x35, - 0xf4, 0x1a, 0x2a, 0x6f, 0xeb, 0x86, 0x67, 0x3b, 0xd8, 0x0c, 0x46, 0x4a, 0xe3, 0xa4, 0x6b, 0xd3, - 0xef, 0x59, 0xc3, 0x1d, 0xea, 0x1d, 0x36, 0xa6, 0xb7, 0xdf, 0x40, 0x78, 0x7a, 0x47, 0x17, 0xcf, - 0x86, 0xdc, 0x0a, 0x3d, 0xe6, 0x06, 0xfb, 0xe7, 0x7d, 0xfc, 0xf3, 0xc1, 0x7e, 0x03, 0x05, 0x9c, - 0xf9, 0xff, 0x56, 0xef, 0xc2, 0x68, 0x5d, 0xdf, 0x45, 0x4e, 0x79, 0x1b, 0x21, 0x3f, 0xc0, 0x45, - 0xed, 0x04, 0xd0, 0xc3, 0x18, 0x75, 0x0d, 0xa1, 0x92, 0xee, 0x61, 0x52, 0x5e, 0x94, 0x54, 0x1b, - 0xa1, 0xf2, 0xb0, 0x17, 0x26, 0xf5, 0x06, 0x4c, 0x72, 0x8f, 0x0f, 0x90, 0x9d, 0xa0, 0x6a, 0x26, - 0xcf, 0x0e, 0x9f, 0x87, 0x9c, 0xf0, 0xdc, 0x30, 0xd4, 0xc6, 0x39, 0xaa, 0xce, 0x3f, 0x34, 0x08, - 0x1c, 0xc4, 0xf0, 0xe1, 0x38, 0x88, 0x91, 0x03, 0x76, 0x10, 0xa3, 0x1d, 0x3a, 0x88, 0x4d, 0x98, - 0xe0, 0x1d, 0x93, 0x8e, 0x66, 0x27, 0x37, 0xee, 0x24, 0xce, 0x48, 0x9f, 0x85, 0xf1, 0xe4, 0xf9, - 0x68, 0xac, 0x83, 0xf3, 0xd1, 0x51, 0x3b, 0x76, 0x38, 0x5a, 0x84, 0x29, 0xce, 0xe1, 0xa8, 0x86, - 0x72, 0xe3, 0xa7, 0x94, 0xf9, 0x81, 0xd2, 0x44, 0xe2, 0xa8, 0x53, 0x43, 0xc5, 0x97, 0x05, 0x7e, - 0x6b, 0x9e, 0xe3, 0xb7, 0xb8, 0x2e, 0x47, 0xbb, 0x00, 0xcf, 0xa4, 0x80, 0x30, 0x0f, 0xf6, 0x61, - 0x3f, 0x9c, 0x69, 0xc1, 0x2e, 0x9b, 0x96, 0xee, 0xec, 0xdf, 0x6f, 0xf8, 0x02, 0xb8, 0x4f, 0xe5, - 0xc5, 0xce, 0xc0, 0x48, 0xe0, 0x60, 0xf6, 0xeb, 0x5b, 0x76, 0x8d, 0xfa, 0x31, 0xea, 0x98, 0x36, - 0x71, 0x9b, 0xfa, 0x0c, 0x1c, 0xa5, 0x40, 0x0d, 0xc7, 0xde, 0x33, 0x7d, 0xea, 0xc4, 0x9b, 0x8d, - 0x92, 0xe6, 0x0d, 0xda, 0x1a, 0x77, 0x3f, 0xbd, 0x1d, 0xba, 0x9f, 0x76, 0xbd, 0x5e, 0xd2, 0x5d, - 0xf5, 0x1f, 0x9c, 0xbb, 0x1a, 0xe8, 0xd4, 0x5d, 0x5d, 0x85, 0x49, 0xf4, 0xa8, 0x61, 0x62, 0xc3, - 0xb7, 0xca, 0x9e, 0x59, 0x47, 0xae, 0xa7, 0xd7, 0x1b, 0xd8, 0xff, 0x75, 0x97, 0x26, 0x5a, 0x7d, - 0x0f, 0x82, 0x2e, 0x1f, 0xc5, 0x45, 0x9e, 0x57, 0x43, 0x75, 0x64, 0x79, 0x21, 0x14, 0x20, 0x28, - 0xad, 0xbe, 0x16, 0x0a, 0x4b, 0x5a, 0x0d, 0x85, 0x93, 0x56, 0xb1, 0xcd, 0x69, 0x38, 0x6b, 0xd8, - 0x32, 0x72, 0x38, 0x5e, 0x69, 0xf4, 0x80, 0xbd, 0xd2, 0xd1, 0x0e, 0xbd, 0xd2, 0xa1, 0x39, 0x90, - 0xe2, 0xaa, 0xc0, 0x19, 0x5c, 0xe2, 0x38, 0x03, 0xe1, 0xea, 0xd5, 0x2e, 0xc3, 0xb3, 0x19, 0xc0, - 0x98, 0x53, 0xf8, 0xee, 0x60, 0xd8, 0x29, 0xdc, 0xf1, 0x0d, 0x6a, 0x7f, 0xad, 0xe9, 0x35, 0x1d, - 0xe4, 0x7e, 0xf2, 0x43, 0x9b, 0x98, 0xaf, 0xe8, 0x3b, 0x58, 0x5f, 0xd1, 0x2f, 0xf2, 0x15, 0xc7, - 0xa0, 0x0f, 0xaf, 0xbc, 0x7d, 0xbc, 0xb0, 0xbb, 0x4b, 0xf4, 0x17, 0xc7, 0x87, 0x0c, 0x1e, 0x9c, - 0x0f, 0x81, 0x83, 0x0e, 0x79, 0x86, 0x0e, 0x2f, 0xe4, 0x19, 0x3e, 0xb4, 0x90, 0xe7, 0xe7, 0xdc, - 0xb9, 0x08, 0x42, 0x9e, 0xb1, 0x83, 0x0f, 0x79, 0xc6, 0x0f, 0x35, 0xe4, 0x51, 0xc5, 0x21, 0x4f, - 0x3b, 0x5e, 0x4e, 0xe8, 0x8e, 0xa2, 0x5e, 0x4e, 0x08, 0xc6, 0xbc, 0xdc, 0x9f, 0x2a, 0x90, 0x8b, - 0xa4, 0x6f, 0x08, 0xd4, 0x61, 0xa6, 0x9a, 0x5e, 0x10, 0xc8, 0x79, 0x9a, 0x9f, 0x6a, 0x0a, 0x31, - 0xa4, 0xfd, 0x99, 0x02, 0xa7, 0x44, 0x9d, 0x59, 0xb3, 0x4d, 0xeb, 0xd0, 0xef, 0x20, 0xb7, 0x59, - 0xf3, 0x82, 0xb4, 0xf4, 0x65, 0x09, 0xfb, 0x51, 0xfa, 0x3e, 0x12, 0x96, 0x45, 0x29, 0x05, 0x34, - 0x82, 0xe4, 0x55, 0x37, 0x2f, 0x79, 0xf5, 0xcd, 0x2e, 0x38, 0xc6, 0xa7, 0xa2, 0xbe, 0x04, 0x03, - 0xc1, 0x6a, 0xa3, 0x29, 0xf5, 0x4c, 0x46, 0xcc, 0x90, 0xd4, 0x17, 0xa0, 0x17, 0xbb, 0x00, 0xb2, - 0xbb, 0x64, 0xc3, 0x26, 0x18, 0xea, 0x75, 0xe8, 0xde, 0x46, 0x24, 0x2d, 0x9a, 0x11, 0xd1, 0x87, - 0xf7, 0x59, 0x66, 0xcb, 0xb8, 0x8d, 0x0b, 0x36, 0x86, 0x94, 0xcc, 0xea, 0x91, 0x79, 0x6c, 0xdd, - 0x45, 0x64, 0xc8, 0x72, 0x2e, 0x47, 0x4d, 0x4f, 0xb4, 0x4c, 0x5b, 0x34, 0x39, 0x06, 0x58, 0x7c, - 0x9c, 0x92, 0xd5, 0x13, 0xf3, 0xa5, 0x6d, 0xe1, 0xa4, 0x9e, 0x18, 0xe0, 0x20, 0x72, 0x9e, 0xff, - 0x10, 0xb6, 0xf2, 0x48, 0xa0, 0xf2, 0x31, 0x29, 0xe8, 0x36, 0x47, 0x41, 0x17, 0x92, 0x0a, 0x12, - 0xb0, 0xa6, 0x21, 0x98, 0x4f, 0x83, 0x39, 0x08, 0x35, 0x7d, 0x5f, 0xc1, 0x01, 0x5a, 0x28, 0xc1, - 0xca, 0x9b, 0x10, 0x71, 0x82, 0x78, 0x35, 0x96, 0x20, 0x6e, 0x4f, 0x55, 0x41, 0x9a, 0xf8, 0xe5, - 0xc7, 0x29, 0x1e, 0x3b, 0x8d, 0x3f, 0xed, 0x6f, 0x14, 0xec, 0xb2, 0xd3, 0xe0, 0x3e, 0x89, 0xe9, - 0xe2, 0xf7, 0x15, 0x7c, 0x57, 0xb5, 0xe2, 0xc7, 0x28, 0x35, 0xe6, 0xee, 0x85, 0x1a, 0x97, 0xde, - 0xf6, 0x27, 0xae, 0x76, 0xba, 0x39, 0x57, 0x3b, 0x51, 0x73, 0xe9, 0x11, 0x98, 0x4b, 0x6f, 0xcb, - 0x5c, 0x0a, 0x9c, 0xe9, 0x99, 0x89, 0x98, 0x72, 0x94, 0x77, 0xed, 0x04, 0x4e, 0x80, 0xc7, 0x5a, - 0xd9, 0x76, 0xf9, 0x87, 0x64, 0xbb, 0x24, 0x73, 0x15, 0x85, 0x11, 0x1b, 0x5a, 0x11, 0x7a, 0x2a, - 0xba, 0xa7, 0xa7, 0xdc, 0x43, 0x60, 0x22, 0xab, 0xba, 0xa7, 0x53, 0x03, 0xc3, 0x38, 0xc5, 0xeb, - 0x8f, 0x53, 0x36, 0x4a, 0x2e, 0x2b, 0xda, 0x1a, 0xf6, 0x20, 0xdc, 0x3e, 0x66, 0x47, 0x39, 0xe8, - 0x77, 0x9b, 0x86, 0x81, 0x5c, 0x62, 0x42, 0x03, 0xa5, 0xe0, 0x67, 0xd4, 0x51, 0x9f, 0x8e, 0x12, - 0x8a, 0x2c, 0xe8, 0x43, 0x14, 0xfc, 0x45, 0x8e, 0xe0, 0x17, 0x05, 0x82, 0x73, 0x78, 0xd2, 0xee, - 0xc3, 0x85, 0x54, 0xa0, 0xf6, 0x54, 0x01, 0x30, 0x19, 0x50, 0x24, 0x77, 0x78, 0x29, 0xd2, 0x67, - 0xba, 0xab, 0x7c, 0x09, 0x4e, 0xba, 0x0d, 0xdb, 0x2b, 0xb3, 0x75, 0xe1, 0x96, 0x3d, 0xbb, 0x6c, - 0x60, 0x8e, 0xcb, 0x7a, 0xad, 0x46, 0x17, 0x61, 0xce, 0x65, 0x61, 0xc4, 0xdd, 0x8a, 0xfb, 0xc0, - 0x26, 0x22, 0x2d, 0xd5, 0x6a, 0xea, 0xab, 0x70, 0xa6, 0xc2, 0xdc, 0x85, 0x98, 0x4c, 0x0f, 0x26, - 0x33, 0x5b, 0x89, 0xdd, 0xfb, 0xc7, 0x88, 0xbd, 0x05, 0x53, 0x98, 0x1b, 0xea, 0x05, 0x18, 0x89, - 0x5c, 0x6f, 0x1b, 0x33, 0xa8, 0x94, 0x54, 0x97, 0x59, 0x5b, 0x40, 0x5d, 0x45, 0x30, 0x13, 0xe2, - 0x33, 0x31, 0x40, 0x5f, 0x5b, 0x03, 0xe4, 0x2a, 0x51, 0x9f, 0xdc, 0x1a, 0x86, 0x23, 0x01, 0xf6, - 0x76, 0xb9, 0xfe, 0x36, 0x2e, 0x01, 0xe3, 0x12, 0x60, 0x0a, 0xea, 0xae, 0x48, 0x02, 0x32, 0xc0, - 0x40, 0xdb, 0x9b, 0x08, 0x5f, 0x0e, 0x32, 0x58, 0x0d, 0xe6, 0xb6, 0xb0, 0xc1, 0x96, 0x6d, 0x62, - 0xb1, 0x49, 0x95, 0x0d, 0xb6, 0xa5, 0xb2, 0x99, 0xad, 0xa4, 0xfd, 0x33, 0xad, 0x95, 0xe0, 0x99, - 0xd8, 0x68, 0x42, 0x43, 0x02, 0x6c, 0x48, 0xa7, 0xb7, 0x92, 0xf9, 0x93, 0x98, 0x2d, 0x39, 0x32, - 0x09, 0x88, 0xca, 0x86, 0x3a, 0x50, 0x99, 0x40, 0x0e, 0xa2, 0xb5, 0x6d, 0x38, 0x11, 0x5e, 0x4d, - 0x89, 0x01, 0x87, 0xdb, 0x32, 0x82, 0xd0, 0xa2, 0x8b, 0x8d, 0xf3, 0x08, 0xb4, 0xe4, 0xa2, 0x4b, - 0x8c, 0x36, 0xd2, 0x81, 0x78, 0x89, 0x15, 0x1a, 0x1b, 0xf9, 0x8b, 0x70, 0x9e, 0x3f, 0x53, 0x89, - 0xd1, 0x47, 0x3b, 0x18, 0x9d, 0x37, 0xad, 0x51, 0x06, 0x8a, 0x57, 0x39, 0x7e, 0xf9, 0x64, 0xc2, - 0x2f, 0x87, 0x1d, 0xa4, 0xf6, 0xe7, 0x43, 0x70, 0x82, 0xd7, 0xc1, 0xdc, 0xef, 0x02, 0x4c, 0xe0, - 0x69, 0xa3, 0x66, 0x16, 0x75, 0xc5, 0xe3, 0x7e, 0x17, 0xdd, 0xc4, 0x48, 0x87, 0x5a, 0x84, 0xe3, - 0x21, 0xf5, 0xc7, 0xb0, 0xba, 0x30, 0xd6, 0x74, 0x0b, 0x20, 0x8a, 0x7b, 0x11, 0xc6, 0x5b, 0x0e, - 0x22, 0x08, 0xa1, 0x88, 0x93, 0x3d, 0xca, 0x16, 0x3d, 0x0d, 0xa3, 0x6e, 0xc0, 0x74, 0x7c, 0xc5, - 0x07, 0x18, 0xc4, 0x9f, 0x4e, 0xc5, 0xd6, 0x2f, 0xc5, 0x5b, 0x82, 0x93, 0xb1, 0x49, 0x8a, 0xf1, - 0xd8, 0x8b, 0x79, 0xcc, 0x47, 0xb4, 0x1d, 0x65, 0xf3, 0x36, 0xcc, 0xf0, 0x56, 0x4f, 0x30, 0x7c, - 0x1f, 0xd9, 0x15, 0x92, 0x6b, 0x81, 0x72, 0xf0, 0x3c, 0xe4, 0x82, 0x00, 0x30, 0xec, 0x0e, 0x71, - 0x58, 0xd7, 0x4f, 0x58, 0xa7, 0xfd, 0xad, 0xc0, 0x00, 0x47, 0x82, 0xd7, 0x61, 0x9a, 0x46, 0x82, - 0x09, 0xbc, 0x01, 0x8c, 0x37, 0x49, 0xba, 0x63, 0x68, 0x2b, 0x30, 0x1b, 0x8c, 0x97, 0xf4, 0x91, - 0x18, 0x7b, 0x10, 0x63, 0xcf, 0x50, 0xa8, 0x98, 0xf9, 0x11, 0x22, 0x4b, 0x70, 0x92, 0x8e, 0x2d, - 0xa0, 0x41, 0x7c, 0x4f, 0x9e, 0x00, 0x71, 0x49, 0xbc, 0x02, 0x5a, 0xc0, 0x07, 0xdf, 0xf9, 0x60, - 0x3a, 0x43, 0x64, 0x33, 0xa4, 0x90, 0x9c, 0xc0, 0x00, 0xd3, 0xfa, 0x34, 0x9c, 0xa6, 0xec, 0x48, - 0x48, 0x0d, 0x63, 0x52, 0x94, 0x6f, 0x11, 0xa5, 0xe7, 0x21, 0x97, 0x70, 0x4b, 0xc1, 0x4c, 0x8e, - 0x90, 0xd9, 0x88, 0xb9, 0x1a, 0x3a, 0x8d, 0xab, 0x30, 0x17, 0x99, 0xc6, 0xe8, 0x5a, 0xc7, 0x0c, - 0x8c, 0x46, 0xf4, 0x1a, 0xcb, 0x36, 0x90, 0xe1, 0x97, 0x61, 0x36, 0x3c, 0xa7, 0x1c, 0x22, 0x47, - 0xc3, 0x8a, 0xe5, 0xd2, 0x58, 0x81, 0x59, 0x81, 0xc7, 0x0b, 0x04, 0x19, 0x23, 0x8c, 0x70, 0xfd, - 0x17, 0x15, 0x67, 0x03, 0xce, 0x71, 0xac, 0x84, 0xc3, 0xcf, 0x38, 0xd9, 0x64, 0x12, 0xc6, 0x92, - 0x60, 0xeb, 0x35, 0x38, 0x9b, 0x34, 0x19, 0x0e, 0x41, 0x15, 0x13, 0x3c, 0x15, 0xb7, 0x9c, 0x04, - 0xbd, 0x57, 0x40, 0x93, 0xb8, 0xd7, 0x40, 0xd4, 0x09, 0x62, 0x3f, 0x22, 0x67, 0x49, 0xa5, 0x7d, - 0x13, 0x2e, 0x08, 0x6c, 0x91, 0xc3, 0xe0, 0x24, 0x26, 0x79, 0x96, 0x67, 0x92, 0x09, 0x26, 0xdf, - 0x80, 0x79, 0xbe, 0x61, 0x72, 0xe8, 0x4e, 0x61, 0xba, 0x67, 0x38, 0xf6, 0x19, 0x27, 0x1b, 0x0a, - 0x75, 0xff, 0x96, 0x14, 0xe8, 0xc5, 0x0f, 0xa3, 0x59, 0x52, 0x83, 0x07, 0x91, 0x7e, 0xb8, 0xf5, - 0x38, 0xa5, 0xc8, 0x4e, 0xc2, 0x98, 0x7f, 0x9a, 0x3e, 0x2f, 0x07, 0xc9, 0x9a, 0x7b, 0xd8, 0x8c, - 0x27, 0x0a, 0x9f, 0x4b, 0x15, 0xe6, 0xe9, 0xd2, 0x85, 0xff, 0xdd, 0x05, 0x27, 0x64, 0xb4, 0x7e, - 0x16, 0x93, 0x86, 0xaf, 0xc3, 0x28, 0xae, 0x63, 0x35, 0x6d, 0xab, 0x5c, 0x41, 0x35, 0x4f, 0xc7, - 0x87, 0xf6, 0xa1, 0xc8, 0x5d, 0x54, 0xa4, 0x16, 0x98, 0x02, 0xaf, 0xfa, 0xb0, 0xd4, 0x2c, 0x46, - 0x1a, 0xe1, 0x46, 0x52, 0x56, 0xbc, 0x6f, 0x37, 0xbd, 0x76, 0xea, 0xc0, 0x28, 0x4a, 0x48, 0xdb, - 0xdf, 0x23, 0x47, 0x5b, 0x4e, 0x9a, 0xea, 0xe3, 0xb2, 0xf3, 0xd4, 0x23, 0xae, 0x9c, 0x37, 0xed, - 0xef, 0x15, 0x7c, 0xc6, 0x95, 0x43, 0x7d, 0x62, 0xad, 0xfd, 0xff, 0xe8, 0xcd, 0x03, 0x0e, 0x7b, - 0x62, 0x7a, 0xfa, 0xe9, 0x65, 0x90, 0x58, 0x77, 0x5d, 0x77, 0x77, 0xb1, 0x81, 0xf5, 0xd2, 0xee, - 0x75, 0xdd, 0xdd, 0x0d, 0x04, 0xea, 0x6b, 0x09, 0x94, 0x9a, 0xa0, 0xe1, 0x0a, 0xa8, 0x69, 0x24, - 0xc5, 0xcb, 0xeb, 0x63, 0xc9, 0xa6, 0x2f, 0x77, 0xe1, 0x07, 0x37, 0xa2, 0xf4, 0xc5, 0xcf, 0x90, - 0x92, 0x6e, 0x72, 0x94, 0x74, 0x36, 0xa9, 0xa4, 0xa4, 0x8c, 0xda, 0x39, 0x9c, 0xe3, 0x15, 0x75, - 0xb7, 0xde, 0x1e, 0x29, 0x30, 0xc8, 0x4e, 0xbc, 0x51, 0x05, 0x28, 0x69, 0x0a, 0xe8, 0x4a, 0x55, - 0x40, 0xb7, 0x5c, 0x01, 0x3d, 0x02, 0x05, 0xb4, 0xd2, 0x90, 0xda, 0x77, 0xc8, 0x8e, 0x1a, 0x4a, - 0x47, 0xc5, 0xc3, 0xd7, 0x43, 0x49, 0xa2, 0xa5, 0xee, 0xa4, 0x12, 0x86, 0xb4, 0x7b, 0x78, 0x23, - 0x95, 0x40, 0xb4, 0x95, 0x3e, 0xfb, 0xb5, 0x2e, 0x98, 0x5a, 0x77, 0xab, 0xad, 0xba, 0xf7, 0x07, - 0x8e, 0x6e, 0xb9, 0xdb, 0x12, 0x33, 0xbe, 0x02, 0x93, 0xae, 0xdd, 0x74, 0x0c, 0x54, 0xe6, 0xcd, - 0x97, 0x4a, 0xfa, 0x36, 0xc3, 0xb3, 0x86, 0xcf, 0x85, 0xae, 0x67, 0x5a, 0xa4, 0x2a, 0x88, 0x67, - 0xe7, 0xd3, 0x21, 0x80, 0x4d, 0xfe, 0x93, 0x88, 0x9e, 0xf6, 0x9e, 0x44, 0x2c, 0xc4, 0xf4, 0x3b, - 0x1b, 0xd6, 0x6f, 0x52, 0x5c, 0x6d, 0x0e, 0x5f, 0x7d, 0x25, 0x3b, 0x98, 0x2d, 0x7f, 0xa5, 0x0b, - 0x3f, 0x9b, 0xb8, 0xf3, 0xc8, 0x43, 0x8e, 0xa5, 0xd7, 0x7e, 0x5e, 0xf4, 0x74, 0x29, 0xa6, 0xa7, - 0xc8, 0x5b, 0xc3, 0xb8, 0xb0, 0xf4, 0xad, 0x61, 0xbc, 0xb9, 0x55, 0xb1, 0xa7, 0xe0, 0x64, 0xec, - 0x3d, 0xf3, 0x9d, 0xa6, 0x89, 0x1f, 0xfd, 0xd0, 0x08, 0xe1, 0xe9, 0x92, 0xb1, 0x11, 0xbf, 0xd1, - 0x1d, 0xf3, 0x1b, 0x6c, 0xc7, 0xef, 0x69, 0x7b, 0xc7, 0x57, 0x82, 0x1d, 0xff, 0xb2, 0x2c, 0x71, - 0x92, 0x10, 0x46, 0x9b, 0xc5, 0x79, 0x93, 0x44, 0x7b, 0xd8, 0xeb, 0x4d, 0x25, 0x7a, 0xb1, 0x07, - 0x4c, 0x88, 0xab, 0xa4, 0x89, 0xdb, 0x25, 0x12, 0xb7, 0xbb, 0x63, 0x71, 0xb5, 0x7f, 0x54, 0xf0, - 0x65, 0x0a, 0x76, 0x21, 0x09, 0x3e, 0xc5, 0x1e, 0xef, 0x33, 0x30, 0x5c, 0xa3, 0xd0, 0x3e, 0x1c, - 0xf5, 0x7c, 0xa2, 0xf7, 0x3b, 0x5c, 0x05, 0x50, 0xdb, 0x8b, 0xd0, 0x29, 0x3e, 0x27, 0xab, 0x81, - 0x17, 0x30, 0xa9, 0x7d, 0x5d, 0x81, 0x69, 0xde, 0x0c, 0x34, 0x6b, 0xde, 0x01, 0x68, 0x39, 0xe4, - 0x39, 0xbb, 0x71, 0x65, 0x48, 0xf0, 0x53, 0x9d, 0x84, 0x5e, 0xe4, 0x38, 0x76, 0x50, 0x0c, 0x4a, - 0x7e, 0x68, 0x1e, 0xae, 0xc8, 0x17, 0xf0, 0xca, 0xfc, 0xf1, 0x6b, 0xad, 0x58, 0x4e, 0xc1, 0xba, - 0x5b, 0xc8, 0xaa, 0x3b, 0x22, 0x18, 0xd5, 0x5e, 0x40, 0x44, 0xfb, 0x77, 0x05, 0xc6, 0xd7, 0xdd, - 0xea, 0xfd, 0xed, 0x6d, 0x17, 0x79, 0x1f, 0xc3, 0x52, 0x2b, 0xc2, 0x71, 0x1b, 0x8f, 0xe5, 0x99, - 0x56, 0x35, 0xea, 0x9e, 0x82, 0xcc, 0xdb, 0x74, 0x0b, 0x20, 0xec, 0x9e, 0xdc, 0xe2, 0xc5, 0xd8, - 0x24, 0xe7, 0xc3, 0x93, 0x1c, 0x95, 0x40, 0x9b, 0xc1, 0x0f, 0x96, 0xa3, 0x8d, 0x6c, 0x71, 0xfd, - 0x31, 0x89, 0x4f, 0xef, 0xd4, 0x91, 0x53, 0x45, 0x96, 0xb1, 0xbf, 0x89, 0xeb, 0x43, 0xe9, 0x6b, - 0xe6, 0x43, 0x93, 0xbd, 0x78, 0x55, 0x16, 0x4b, 0x72, 0x99, 0xa1, 0xb1, 0x24, 0xb7, 0xaf, 0xf5, - 0x0c, 0xb2, 0x0b, 0xcb, 0x7a, 0xd7, 0x32, 0x1c, 0xa4, 0xbb, 0x6c, 0xbe, 0x49, 0x09, 0xd2, 0x27, - 0x64, 0x6b, 0x89, 0xe8, 0xa5, 0x27, 0x66, 0x13, 0xb7, 0xd8, 0xbe, 0xd3, 0xce, 0xa9, 0x8f, 0xee, - 0x3d, 0x8b, 0x31, 0xa5, 0x6a, 0xd1, 0x92, 0x2a, 0x9e, 0x4e, 0xe8, 0x73, 0x59, 0x7e, 0x67, 0x5c, - 0xad, 0xab, 0xe8, 0x17, 0x6a, 0x8d, 0xab, 0x95, 0xaf, 0x13, 0xaa, 0x56, 0x7e, 0x27, 0x53, 0xeb, - 0x3f, 0x2b, 0x78, 0xe7, 0xdb, 0x70, 0xcc, 0x3d, 0xb3, 0x86, 0xaa, 0xa8, 0x72, 0xe7, 0x11, 0x32, - 0x9a, 0x1e, 0x5a, 0xb1, 0x2d, 0xcf, 0xd1, 0x0d, 0xf1, 0xfa, 0x9b, 0x84, 0xde, 0xed, 0xa6, 0x55, - 0x71, 0xa9, 0x2a, 0xc9, 0x0f, 0xf5, 0x02, 0x8c, 0x19, 0x14, 0xb3, 0xac, 0x93, 0xd7, 0xca, 0x54, - 0x69, 0x47, 0x83, 0x76, 0xfa, 0x88, 0x59, 0x55, 0x69, 0xb4, 0x4d, 0xf4, 0x44, 0xa2, 0xe8, 0xdb, - 0x82, 0x82, 0xb5, 0x73, 0x61, 0x71, 0x85, 0xbc, 0xfa, 0x8e, 0xe4, 0xac, 0x0c, 0x80, 0xb9, 0xed, - 0x2f, 0x00, 0x60, 0x7e, 0xcb, 0x15, 0x73, 0x7b, 0x9b, 0x7a, 0x6e, 0x49, 0x78, 0x75, 0xc5, 0x9f, - 0xaa, 0x6f, 0xff, 0xe7, 0xdc, 0x7c, 0xd5, 0xf4, 0x76, 0x9a, 0x5b, 0x0b, 0x86, 0x5d, 0xa7, 0x1f, - 0x0e, 0xa1, 0xff, 0xbb, 0xec, 0x56, 0x76, 0x0b, 0xde, 0x7e, 0x03, 0xb9, 0x18, 0xc1, 0x2d, 0x0d, - 0x62, 0xf2, 0xab, 0xe6, 0xf6, 0x76, 0x71, 0x82, 0x23, 0x93, 0xf6, 0x79, 0x18, 0x5b, 0x77, 0xab, - 0x25, 0xf4, 0x50, 0x77, 0x2a, 0xee, 0xfd, 0x86, 0x77, 0xbf, 0x29, 0xd4, 0x34, 0xb9, 0x07, 0xe2, - 0x28, 0xe5, 0x78, 0x58, 0x29, 0x11, 0x52, 0x5a, 0x1e, 0x3b, 0xd4, 0x48, 0x5b, 0xf8, 0x99, 0xf6, - 0x14, 0xee, 0x34, 0x6a, 0xba, 0x59, 0xbf, 0x67, 0x1b, 0xbb, 0xa8, 0xb2, 0x86, 0x27, 0x4f, 0xbc, - 0x88, 0x26, 0x6a, 0x18, 0x6c, 0x89, 0x58, 0xfa, 0x46, 0x73, 0xeb, 0x55, 0xb4, 0x8f, 0x27, 0x7e, - 0xb8, 0xc4, 0xeb, 0x52, 0x4f, 0xc0, 0xa0, 0x6b, 0x56, 0x2d, 0xdd, 0x6b, 0x3a, 0x24, 0x91, 0x35, - 0x5c, 0x6a, 0x35, 0xc8, 0xe3, 0xf8, 0x24, 0x5f, 0x34, 0x8e, 0x4f, 0x76, 0x30, 0x91, 0xbe, 0x44, - 0x5e, 0x6c, 0x6f, 0x9a, 0x55, 0x12, 0x93, 0x6d, 0x42, 0x9f, 0xff, 0x6f, 0x2a, 0xc8, 0xf0, 0xf2, - 0xad, 0x1f, 0x3f, 0x99, 0xeb, 0x73, 0x71, 0xcb, 0xff, 0x3e, 0x99, 0xbb, 0x9c, 0x61, 0x16, 0x97, - 0x0c, 0x83, 0xda, 0x69, 0x89, 0x92, 0x52, 0x4f, 0x40, 0xcf, 0x2a, 0x39, 0x1d, 0xfa, 0x24, 0x07, - 0x7e, 0xfc, 0x64, 0x0e, 0xdb, 0x6c, 0x09, 0xb7, 0x6a, 0x2e, 0x7e, 0xfb, 0x8e, 0x39, 0xb0, 0x0d, - 0xf5, 0x1c, 0x91, 0x9f, 0x94, 0x84, 0x93, 0xfc, 0x21, 0x46, 0xf0, 0x7f, 0x97, 0x06, 0xfc, 0x2e, - 0x5c, 0xf4, 0xfd, 0x22, 0xf4, 0xee, 0xe9, 0xb5, 0x26, 0xa2, 0x79, 0x20, 0x4d, 0x10, 0x3b, 0x84, - 0x44, 0x0b, 0xd2, 0x5a, 0x18, 0x4d, 0xfb, 0x6a, 0x37, 0x5e, 0xe2, 0x4b, 0x95, 0xba, 0x69, 0x91, - 0xeb, 0x3e, 0x4e, 0x6e, 0xaa, 0xb3, 0xe4, 0xc5, 0x6b, 0x30, 0x16, 0x7a, 0xc2, 0x41, 0x52, 0x99, - 0xad, 0x8c, 0xa4, 0x92, 0xe6, 0xb7, 0x8e, 0xb6, 0x90, 0x71, 0xfd, 0xb3, 0xf0, 0x15, 0x49, 0x4f, - 0xfb, 0xaf, 0x48, 0x7a, 0xc5, 0xaf, 0x48, 0x6e, 0x41, 0x9f, 0xeb, 0xe9, 0x5e, 0xd3, 0xa5, 0x75, - 0xf8, 0x67, 0x44, 0x1a, 0xc5, 0x62, 0x6e, 0x62, 0xd0, 0x12, 0x45, 0x29, 0x16, 0x65, 0x09, 0x42, - 0xb9, 0x8e, 0xb5, 0x67, 0x71, 0x7e, 0x50, 0x0e, 0xc4, 0xcc, 0xf5, 0x8f, 0xc8, 0x9b, 0xf3, 0x25, - 0xf2, 0xc5, 0x85, 0x77, 0xd1, 0xa6, 0xa7, 0xef, 0xa2, 0x5f, 0x72, 0x74, 0xcb, 0x13, 0xaf, 0xc1, - 0x25, 0xe8, 0xab, 0x62, 0x08, 0x1a, 0xa3, 0x5f, 0x10, 0x48, 0x86, 0xc9, 0x04, 0x94, 0xb1, 0x42, - 0x4b, 0x14, 0xb1, 0x78, 0x45, 0xf6, 0xe0, 0x9c, 0xc7, 0x8c, 0x76, 0x1a, 0x3f, 0x37, 0xe5, 0x75, - 0x31, 0x59, 0xf6, 0xb1, 0x33, 0x59, 0xf2, 0x19, 0xd1, 0xbd, 0x10, 0x84, 0x50, 0x90, 0x1c, 0xf4, - 0x63, 0x7e, 0xd8, 0x6b, 0x8d, 0xe0, 0xa7, 0xdc, 0x2d, 0x24, 0x47, 0xa0, 0x6e, 0x21, 0xd9, 0xc1, - 0x78, 0xfb, 0x17, 0xa5, 0x75, 0x1b, 0x7e, 0x87, 0xd2, 0x5a, 0xb7, 0x2b, 0xe6, 0xb6, 0x69, 0xe8, - 0xd2, 0xb8, 0xfa, 0x01, 0x0c, 0x04, 0x1f, 0x5c, 0xa2, 0x4b, 0xf3, 0xa6, 0x40, 0xdd, 0x42, 0xda, - 0x1b, 0x14, 0xbf, 0xc4, 0x28, 0x65, 0xdb, 0xdc, 0x84, 0x04, 0xb5, 0xf3, 0x78, 0x6f, 0x13, 0xf6, - 0x33, 0xa9, 0xdf, 0x53, 0x70, 0x52, 0x23, 0xf3, 0x8b, 0xf2, 0x57, 0x13, 0xc2, 0x16, 0x52, 0xcb, - 0xb4, 0x09, 0x49, 0x8e, 0x8c, 0xd7, 0x04, 0x32, 0x46, 0x52, 0x10, 0x89, 0xd7, 0xcf, 0x24, 0x05, - 0x21, 0x7c, 0xf6, 0xfc, 0x3d, 0x72, 0x3e, 0x68, 0xef, 0xbd, 0xf3, 0x46, 0x42, 0xac, 0x6b, 0xa2, - 0x8b, 0x10, 0x1e, 0x5d, 0x8e, 0x6c, 0x99, 0xaa, 0xe9, 0xf9, 0x2f, 0x24, 0xc9, 0xb9, 0x41, 0xfe, - 0x34, 0x92, 0x5a, 0x6b, 0xfb, 0xcf, 0x9f, 0xb2, 0x5b, 0xab, 0x90, 0x76, 0xa7, 0xd6, 0x2a, 0x7e, - 0x1c, 0x41, 0xac, 0x35, 0xfd, 0x55, 0x44, 0xb0, 0x46, 0xdb, 0x7e, 0x09, 0xda, 0xc6, 0x1a, 0x15, - 0xd1, 0xee, 0x78, 0x8d, 0x0a, 0x1f, 0xbe, 0xd1, 0x35, 0x9a, 0xfa, 0xe2, 0xed, 0xfb, 0xa1, 0x74, - 0xcd, 0x8a, 0x5d, 0xaf, 0x37, 0x2d, 0xd3, 0xdb, 0xdf, 0xb0, 0xed, 0xda, 0x66, 0x03, 0x59, 0x15, - 0xa1, 0xcc, 0xa5, 0x84, 0xcc, 0x37, 0x64, 0x7e, 0x29, 0x49, 0x99, 0x23, 0x71, 0xa6, 0xcf, 0x16, - 0x08, 0xc8, 0xd1, 0xcf, 0x16, 0x08, 0x7a, 0xe3, 0xeb, 0xb7, 0xb5, 0xbe, 0xf1, 0x87, 0x83, 0xc8, - 0x3e, 0x79, 0x00, 0xeb, 0x97, 0x4b, 0xb7, 0xd3, 0xf5, 0xcb, 0x25, 0x46, 0xd7, 0x2f, 0xb7, 0x8f, - 0x49, 0xf9, 0xaf, 0xe4, 0xe2, 0x21, 0x7e, 0x69, 0x97, 0x45, 0xd6, 0xcf, 0x24, 0x64, 0x2d, 0x66, - 0xbc, 0x12, 0x94, 0x4b, 0x9c, 0xe9, 0x3b, 0x3a, 0x12, 0x92, 0xf4, 0x3b, 0x3a, 0x12, 0x08, 0x26, - 0xfd, 0x0f, 0x69, 0xf9, 0x72, 0xd2, 0xf4, 0xb3, 0x28, 0xe0, 0xad, 0x84, 0x02, 0x6e, 0x67, 0x5f, - 0xcc, 0x72, 0x1d, 0x2c, 0x0b, 0x74, 0x70, 0x31, 0x65, 0x45, 0x87, 0xd5, 0x40, 0xa2, 0x3b, 0x39, - 0x10, 0xd3, 0xc4, 0x3f, 0x29, 0x38, 0x51, 0x41, 0x00, 0xd6, 0x6c, 0xc7, 0x40, 0x95, 0x4d, 0x16, - 0xaa, 0x0a, 0x35, 0xf0, 0x7a, 0x42, 0x03, 0xd7, 0xa5, 0xb1, 0x6b, 0x9c, 0x30, 0x47, 0xf2, 0xa2, - 0x40, 0xf2, 0x48, 0xee, 0x80, 0x4f, 0x8d, 0xe6, 0x0e, 0xf8, 0x9d, 0x71, 0x8b, 0x7f, 0xe0, 0xe8, - 0x15, 0xd3, 0xa2, 0xa7, 0xcd, 0x15, 0xbd, 0xde, 0xd0, 0xcd, 0xaa, 0x95, 0xe2, 0xbd, 0xb3, 0x5b, - 0xbc, 0x84, 0x7a, 0xa7, 0x16, 0x2f, 0x21, 0x49, 0x2d, 0x5e, 0x02, 0xc1, 0xa4, 0xff, 0x36, 0x49, - 0xd5, 0x06, 0xb1, 0xd8, 0x1d, 0x4b, 0xdf, 0x92, 0x7c, 0x4e, 0xeb, 0x6e, 0x42, 0xe0, 0xcb, 0xc2, - 0x4d, 0x3a, 0x4c, 0x90, 0x23, 0xe3, 0xa2, 0x40, 0xc6, 0x7c, 0x74, 0x67, 0x0e, 0x53, 0xa1, 0xf9, - 0xd7, 0x68, 0x63, 0xa6, 0x79, 0x3c, 0x30, 0xcf, 0x25, 0xa1, 0x7e, 0xa0, 0xf3, 0x18, 0xf1, 0x5c, - 0x12, 0x08, 0x26, 0xfd, 0x8f, 0xc8, 0xe3, 0xa6, 0x08, 0xe8, 0x06, 0xb2, 0xfc, 0x1f, 0x1b, 0xb6, - 0x69, 0x79, 0x6e, 0x8a, 0x0a, 0x7e, 0x39, 0xa1, 0x82, 0x97, 0xb2, 0xa8, 0x80, 0x33, 0x04, 0x47, - 0x0f, 0x99, 0x5e, 0xaa, 0xa6, 0xd1, 0xa5, 0x2f, 0x55, 0xd3, 0xc0, 0x98, 0x46, 0x7e, 0x4f, 0x81, - 0xd1, 0x75, 0xb7, 0xba, 0x86, 0xd0, 0xaa, 0xe9, 0xe2, 0xb4, 0x8e, 0x50, 0xf8, 0xb5, 0x84, 0xf0, - 0x17, 0x05, 0xc2, 0x87, 0xa8, 0x71, 0xe4, 0x2c, 0x08, 0xe4, 0x9c, 0x0e, 0xcb, 0x19, 0x22, 0xa1, - 0xe5, 0xe0, 0x58, 0xb4, 0x85, 0x71, 0xff, 0x3f, 0xa4, 0x56, 0x67, 0xc9, 0xb3, 0xeb, 0xa6, 0x11, - 0x2a, 0x9c, 0x59, 0x43, 0x68, 0xbd, 0x59, 0xf3, 0xcc, 0x46, 0xcd, 0x44, 0xce, 0xa6, 0xb1, 0x83, - 0x2a, 0x4d, 0xc9, 0x7a, 0xd5, 0x13, 0x82, 0xdd, 0x11, 0x08, 0x96, 0x6d, 0x20, 0x8e, 0xcc, 0xaf, - 0x08, 0x64, 0x5e, 0x8c, 0x9c, 0x7b, 0x33, 0x51, 0xd7, 0x9e, 0x83, 0xab, 0x99, 0x81, 0x99, 0xa6, - 0x7e, 0x8b, 0xec, 0xd9, 0x9b, 0xc8, 0x5b, 0x45, 0x35, 0x54, 0x25, 0xe9, 0x17, 0x76, 0xff, 0x6b, - 0x20, 0x73, 0x4f, 0x56, 0x2d, 0x71, 0x02, 0x06, 0x9d, 0x00, 0x88, 0xbe, 0x77, 0x6b, 0x35, 0xc8, - 0x93, 0x29, 0xf2, 0x11, 0xe9, 0x76, 0x2b, 0x07, 0x62, 0x42, 0x94, 0x71, 0x02, 0x82, 0x94, 0x4d, - 0x6c, 0xd8, 0xae, 0x77, 0xdf, 0xaa, 0xed, 0xaf, 0xdb, 0x15, 0xe1, 0xcc, 0xca, 0xd3, 0x0c, 0x49, - 0x3a, 0x34, 0xcd, 0x90, 0xec, 0x60, 0x1c, 0x3c, 0xa6, 0xe9, 0x1c, 0x9a, 0x88, 0xc8, 0xc2, 0x04, - 0xfe, 0xf0, 0x58, 0xcd, 0x36, 0x76, 0xdd, 0x32, 0xbd, 0x13, 0xe8, 0xa2, 0x1f, 0x1e, 0xc3, 0x8d, - 0x4b, 0x24, 0xe9, 0x2f, 0x4f, 0xd8, 0x70, 0x86, 0x0b, 0x12, 0x36, 0x9c, 0xae, 0xf0, 0xd7, 0x2d, - 0x67, 0xc2, 0x57, 0xdd, 0xa1, 0xaf, 0xa2, 0xfa, 0x91, 0xfb, 0xd3, 0xdd, 0xb7, 0xa5, 0x7d, 0x71, - 0xa3, 0x78, 0x4d, 0x56, 0x9a, 0x24, 0xe2, 0x89, 0x96, 0x26, 0x89, 0xba, 0x03, 0xd1, 0x16, 0x7f, - 0x72, 0x1b, 0xba, 0xd7, 0xdd, 0xaa, 0xfa, 0x26, 0xf4, 0x07, 0x1f, 0x21, 0x3d, 0x2d, 0x4e, 0xa9, - 0x52, 0x90, 0xfc, 0x85, 0x54, 0x10, 0x76, 0x6d, 0xf0, 0x36, 0x0c, 0xb0, 0xaf, 0x82, 0x4a, 0x92, - 0xb5, 0x01, 0x4c, 0xfe, 0x62, 0x3a, 0x0c, 0xa3, 0xfd, 0x55, 0x05, 0xa6, 0x45, 0x1f, 0x03, 0xbc, - 0x2a, 0xa6, 0x23, 0x40, 0xc9, 0xbf, 0xd0, 0x36, 0x0a, 0xe3, 0xe4, 0x9b, 0x0a, 0x9c, 0x90, 0x7e, - 0x62, 0xee, 0x46, 0x2a, 0x6d, 0x2e, 0x5e, 0xfe, 0xc5, 0xce, 0xf0, 0x18, 0x63, 0xbf, 0xaf, 0xc0, - 0xa9, 0xd4, 0x8f, 0xc4, 0x14, 0x53, 0x07, 0x11, 0xe2, 0xe6, 0x97, 0x3b, 0xc7, 0x65, 0x4c, 0xfe, - 0x0a, 0x4c, 0x72, 0x3f, 0x26, 0xba, 0x20, 0xa6, 0xcd, 0x83, 0xcf, 0xdf, 0x68, 0x0f, 0x9e, 0x8d, - 0xff, 0x0d, 0x05, 0xf2, 0x92, 0x6f, 0x78, 0x5e, 0x13, 0x93, 0x15, 0x63, 0xe5, 0x3f, 0xd5, 0x09, - 0x16, 0x63, 0xe9, 0xcb, 0x0a, 0x4c, 0xf1, 0x3f, 0x7b, 0x51, 0xc8, 0x22, 0x64, 0x08, 0x21, 0xff, - 0x7c, 0x9b, 0x08, 0x8c, 0x07, 0x1b, 0x8e, 0xc6, 0xdf, 0x4e, 0x4b, 0x16, 0x7e, 0x0c, 0x34, 0x7f, - 0x35, 0x33, 0x68, 0x44, 0x68, 0xfe, 0xe3, 0xe5, 0x42, 0x9a, 0x32, 0x63, 0x08, 0x32, 0xa1, 0xe5, - 0xef, 0x8e, 0x9b, 0x30, 0x9e, 0x7c, 0x44, 0xfb, 0x6c, 0x0a, 0xb5, 0x30, 0x70, 0xfe, 0xb9, 0x36, - 0x80, 0xd9, 0xb0, 0xbf, 0xae, 0xc0, 0x71, 0xf1, 0x85, 0xb2, 0x84, 0xa4, 0x10, 0x29, 0x7f, 0xab, - 0x03, 0xa4, 0xc8, 0x92, 0x90, 0x7c, 0x00, 0xe3, 0x5a, 0x9a, 0x4d, 0xf1, 0xb0, 0x64, 0x4b, 0x22, - 0xc3, 0x37, 0x2b, 0x7c, 0x57, 0x96, 0xfa, 0x39, 0x85, 0x62, 0xa6, 0x55, 0xc7, 0xc5, 0x95, 0xb9, - 0xb2, 0xcc, 0x9f, 0x3f, 0xf8, 0x0d, 0x05, 0x66, 0x64, 0x2f, 0x53, 0xae, 0x67, 0x57, 0x41, 0x78, - 0x0d, 0xdf, 0xee, 0x08, 0x2d, 0xea, 0x4d, 0xb8, 0xa5, 0xec, 0x85, 0xb4, 0x55, 0x1a, 0x43, 0x90, - 0x7a, 0x13, 0x59, 0xbd, 0x38, 0xd6, 0x8c, 0xac, 0xc2, 0xf8, 0x7a, 0xa6, 0x15, 0x1b, 0x47, 0x93, - 0x69, 0x26, 0x4b, 0x71, 0x70, 0x68, 0x7f, 0x14, 0xe7, 0xd3, 0xd3, 0xf7, 0x47, 0x21, 0x6e, 0x86, - 0xfd, 0x31, 0x35, 0xf5, 0xad, 0xfe, 0xb6, 0x02, 0x27, 0xe5, 0xdf, 0x5b, 0x49, 0xf5, 0xf1, 0x02, - 0xc4, 0xfc, 0x4b, 0x1d, 0x22, 0x32, 0xde, 0x7e, 0x47, 0x81, 0xd9, 0x94, 0x57, 0x2a, 0x37, 0xdb, - 0x1a, 0x23, 0x6c, 0xf6, 0x2f, 0x77, 0x8a, 0xc9, 0xd8, 0xfb, 0x9a, 0x02, 0x39, 0xe1, 0x13, 0x85, - 0xc5, 0x34, 0x5b, 0x4e, 0xe2, 0xe4, 0x8b, 0xed, 0xe3, 0x44, 0x74, 0x95, 0xf2, 0xb1, 0x8a, 0x9b, - 0x99, 0xcc, 0x99, 0x83, 0x29, 0xd3, 0x55, 0xc6, 0xef, 0x4c, 0x3c, 0x02, 0x95, 0x53, 0x00, 0x7f, - 0x49, 0x52, 0x61, 0x91, 0x80, 0xce, 0x5f, 0x6b, 0x07, 0x9a, 0x8d, 0xec, 0xc0, 0x58, 0xa2, 0xa0, - 0x5c, 0x72, 0x10, 0x88, 0xc3, 0xe6, 0x17, 0xb3, 0xc3, 0x86, 0x37, 0xfa, 0x64, 0x81, 0xb6, 0x64, - 0xa3, 0x4f, 0x00, 0xcb, 0x36, 0x7a, 0x61, 0x55, 0x34, 0x3e, 0xb3, 0x88, 0x4a, 0x8e, 0xaf, 0xa6, - 0x4c, 0x61, 0x12, 0x45, 0x76, 0x66, 0x49, 0xab, 0xc3, 0xf5, 0x37, 0x05, 0x7e, 0xfd, 0xa8, 0x64, - 0x53, 0xe0, 0x22, 0xc8, 0x36, 0x05, 0x69, 0xe1, 0xa7, 0x5a, 0x83, 0xd1, 0x58, 0xdd, 0xee, 0xbc, - 0x98, 0x54, 0x14, 0x32, 0x7f, 0x25, 0x2b, 0x24, 0x1b, 0xed, 0x57, 0x15, 0x38, 0x26, 0xa8, 0x31, - 0xbd, 0x22, 0x73, 0xd3, 0x3c, 0x8c, 0xfc, 0xcd, 0x76, 0x31, 0x22, 0x6c, 0x08, 0x6a, 0x32, 0xaf, - 0xc8, 0x0e, 0xd6, 0xed, 0xb2, 0x21, 0x2f, 0x63, 0x54, 0x4d, 0x18, 0x89, 0x16, 0xd3, 0x3d, 0x23, - 0x26, 0x15, 0x01, 0xcc, 0x17, 0x32, 0x02, 0x46, 0x1c, 0x5f, 0x4a, 0xc5, 0x95, 0x44, 0x0e, 0x39, - 0xa6, 0xcc, 0xf1, 0x65, 0x2b, 0x2e, 0x52, 0xb7, 0x61, 0x38, 0xf2, 0x27, 0x65, 0xce, 0x8b, 0x29, - 0x86, 0xe1, 0xf2, 0x0b, 0xd9, 0xe0, 0xc2, 0x6e, 0x2e, 0xf1, 0x47, 0xc4, 0x2e, 0xa6, 0xd1, 0x68, - 0xc1, 0xca, 0xdc, 0x9c, 0xe8, 0xef, 0x5e, 0x61, 0x63, 0x13, 0xfc, 0xd1, 0xab, 0x2b, 0x69, 0xe4, - 0xe2, 0x18, 0x32, 0x63, 0x93, 0xff, 0xe5, 0x1e, 0xff, 0x88, 0xcf, 0xad, 0xdd, 0x92, 0xa8, 0x90, - 0x07, 0x2f, 0x3b, 0xe2, 0xcb, 0x6a, 0xae, 0xfc, 0xbd, 0x8d, 0x53, 0x70, 0x25, 0xd9, 0xdb, 0x92, - 0xd0, 0xb2, 0xbd, 0x4d, 0x5c, 0x51, 0x85, 0x4f, 0x76, 0xe2, 0x72, 0xaa, 0xb4, 0xc3, 0x22, 0x0f, - 0x49, 0x76, 0xb2, 0x4b, 0xad, 0x75, 0xf2, 0x8d, 0x90, 0x84, 0x97, 0xd9, 0x8c, 0x30, 0x91, 0x25, - 0x5b, 0xcc, 0x0e, 0x1b, 0xd9, 0x6a, 0xe8, 0xfd, 0x63, 0x34, 0x5b, 0x25, 0xdb, 0x6a, 0xf8, 0x09, - 0xb1, 0xe7, 0xdb, 0x44, 0x88, 0xcc, 0x03, 0x69, 0xe2, 0x24, 0xa4, 0x64, 0xf3, 0x20, 0xce, 0x7d, - 0xdd, 0xea, 0x00, 0x89, 0xc3, 0x0f, 0xcf, 0x1d, 0xca, 0xec, 0x42, 0x78, 0xd6, 0xb8, 0xd5, 0x01, - 0x52, 0x32, 0x30, 0xc1, 0x85, 0x28, 0x91, 0xd2, 0x94, 0xd4, 0xc0, 0x24, 0x59, 0xc8, 0x92, 0x1a, - 0x98, 0x88, 0x6b, 0x5f, 0xb0, 0xb5, 0xf0, 0x0b, 0x5f, 0x0a, 0x59, 0x6c, 0x2f, 0x84, 0x20, 0xb3, - 0x16, 0x69, 0x65, 0x0a, 0x3e, 0xad, 0xca, 0xca, 0x52, 0xae, 0xcb, 0xb6, 0x5d, 0x21, 0x9a, 0xec, - 0xb4, 0x9a, 0xa1, 0x62, 0x84, 0x1c, 0x20, 0xe4, 0xe5, 0x22, 0x37, 0xdb, 0xb2, 0x81, 0x30, 0x6f, - 0x2f, 0x77, 0x8a, 0xc9, 0xd8, 0xfb, 0x22, 0x8c, 0xe3, 0xc2, 0x87, 0x48, 0x30, 0x29, 0xd9, 0x65, - 0xf8, 0xb5, 0x12, 0xb2, 0x5d, 0x46, 0x5e, 0x5d, 0x81, 0x67, 0x8d, 0x98, 0x35, 0xf7, 0x16, 0x5b, - 0x36, 0x6b, 0x92, 0xf2, 0x05, 0xd9, 0xac, 0x65, 0xa8, 0x7a, 0xf0, 0x83, 0x5c, 0x52, 0x3d, 0x10, - 0xf8, 0x65, 0x59, 0x90, 0x1b, 0xad, 0x37, 0x90, 0x05, 0xb9, 0xfc, 0xca, 0x04, 0xac, 0x03, 0x32, - 0x2f, 0x07, 0xa3, 0x83, 0x74, 0xcb, 0xcd, 0x50, 0x31, 0x80, 0xf3, 0x2c, 0x1c, 0xae, 0x22, 0x57, - 0xea, 0xb2, 0x3c, 0x4b, 0xda, 0x45, 0xbc, 0x2c, 0xcf, 0x92, 0xf5, 0x12, 0x5f, 0x35, 0x61, 0x9c, - 0xb4, 0x84, 0xaf, 0xf1, 0xcf, 0x89, 0x09, 0x87, 0xc0, 0xf2, 0x97, 0x33, 0x81, 0xb1, 0xa1, 0xfe, - 0x4e, 0x81, 0x4b, 0x64, 0xac, 0x8c, 0x97, 0xee, 0xb2, 0x28, 0x37, 0x13, 0x85, 0xfc, 0xa7, 0x9f, - 0x96, 0x42, 0xc4, 0x0d, 0xa5, 0xdc, 0x80, 0x4b, 0xd6, 0xb0, 0x1c, 0x53, 0xe6, 0x86, 0xb2, 0x5d, - 0x6f, 0xfb, 0xb1, 0x1e, 0xe7, 0x6e, 0xfb, 0x52, 0x5a, 0xe2, 0x26, 0x0c, 0x2d, 0x8b, 0xf5, 0xc4, - 0xd7, 0xda, 0x38, 0xca, 0xe5, 0x5d, 0x69, 0x2f, 0xa4, 0x47, 0x8e, 0x91, 0xd1, 0x6f, 0xb4, 0x07, - 0x1f, 0xc9, 0x76, 0x09, 0x6f, 0xa9, 0x17, 0x33, 0xa4, 0x2b, 0x62, 0x38, 0xb2, 0x6c, 0x57, 0xda, - 0xd5, 0x72, 0xc8, 0x11, 0xf1, 0xff, 0x8a, 0xe2, 0xf5, 0xd4, 0xd3, 0x0c, 0x0f, 0x4d, 0xe6, 0x88, - 0x32, 0xfc, 0xf1, 0xc2, 0x7c, 0xef, 0x97, 0x3e, 0x7a, 0xef, 0xa2, 0xb2, 0xbc, 0xfb, 0x83, 0x0f, - 0x66, 0x95, 0xf7, 0x3f, 0x98, 0x55, 0x7e, 0xf4, 0xc1, 0xac, 0xf2, 0x8d, 0x0f, 0x67, 0x8f, 0xbc, - 0xff, 0xe1, 0xec, 0x91, 0xff, 0xf8, 0x70, 0xf6, 0xc8, 0xdb, 0xaf, 0x87, 0x9e, 0x3a, 0xdd, 0x0d, - 0x46, 0xba, 0xa7, 0x6f, 0xb9, 0x05, 0x36, 0xee, 0x65, 0xc3, 0x76, 0x50, 0xf8, 0xe7, 0x8e, 0x6e, - 0x5a, 0x85, 0xba, 0xed, 0x2f, 0x12, 0xb7, 0xf5, 0x37, 0xa8, 0xf1, 0xb3, 0xa8, 0xc2, 0xde, 0xe2, - 0x56, 0x1f, 0xfe, 0x3b, 0xd2, 0xcf, 0xfd, 0x7f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xa7, 0x5c, 0xc0, - 0xa1, 0xe7, 0x7b, 0x00, 0x00, + // 5768 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x5d, 0x6c, 0x1c, 0x47, + 0x72, 0xb0, 0x46, 0xfc, 0x11, 0x59, 0xfc, 0x11, 0x39, 0x24, 0xc5, 0xd5, 0x4a, 0x22, 0xa5, 0xd1, + 0x8f, 0x29, 0x59, 0xe2, 0x4a, 0xb4, 0x24, 0xcb, 0xab, 0xb3, 0x6c, 0xfe, 0x48, 0x9f, 0x65, 0x8b, + 0x16, 0xbd, 0x94, 0xcf, 0x67, 0x7f, 0x77, 0x58, 0x0c, 0x67, 0x9b, 0xcb, 0x39, 0xee, 0xce, 0xac, + 0x67, 0x66, 0x29, 0xd1, 0x0f, 0xf7, 0x87, 0x20, 0x27, 0xdc, 0x21, 0xc0, 0x01, 0x49, 0x0e, 0x08, + 0x90, 0x00, 0x97, 0x04, 0x49, 0x90, 0x4b, 0x90, 0xf8, 0x92, 0x03, 0xf2, 0x87, 0xc0, 0x48, 0x80, + 0x03, 0x0e, 0xc9, 0x8b, 0x13, 0x20, 0x40, 0x70, 0x0f, 0xce, 0xc1, 0x7e, 0x70, 0x72, 0x79, 0x0b, + 0x90, 0x97, 0xe4, 0x25, 0x98, 0xee, 0x9e, 0x9e, 0xbf, 0xee, 0x9e, 0xd9, 0x15, 0xe9, 0xf3, 0x1d, + 0xee, 0xc5, 0xd6, 0x76, 0x57, 0x55, 0x57, 0x55, 0x57, 0x57, 0x57, 0x57, 0x57, 0x0f, 0x61, 0xc6, + 0xb4, 0xbe, 0x88, 0x0c, 0xcf, 0xdc, 0x41, 0x25, 0xf4, 0xc8, 0xd8, 0xd2, 0xad, 0x3a, 0x2a, 0xed, + 0x2c, 0x94, 0xbc, 0x47, 0xf3, 0x2d, 0xc7, 0xf6, 0x6c, 0x75, 0x8a, 0xf5, 0xcf, 0x07, 0xfd, 0xf3, + 0x3b, 0x0b, 0xc5, 0x19, 0xc3, 0x76, 0x9b, 0xb6, 0x5b, 0xda, 0xd0, 0x5d, 0x54, 0xda, 0xb9, 0xb2, + 0x81, 0x3c, 0xfd, 0x4a, 0xc9, 0xb0, 0x4d, 0x8b, 0xa0, 0x15, 0xe7, 0x69, 0x7f, 0xcd, 0x74, 0x3d, + 0xc7, 0xdc, 0x68, 0x7b, 0xa6, 0x6d, 0x31, 0xb8, 0x68, 0x23, 0x85, 0x9f, 0xa6, 0xf0, 0x4d, 0xb7, + 0x5e, 0xda, 0xb9, 0xe2, 0xff, 0x8f, 0x76, 0x1c, 0x25, 0x1d, 0x55, 0xfc, 0xab, 0x44, 0x7e, 0xd0, + 0xae, 0xc9, 0xba, 0x5d, 0xb7, 0x49, 0xbb, 0xff, 0x2f, 0xda, 0x7a, 0x86, 0x2f, 0x10, 0x63, 0x9e, + 0x40, 0x9d, 0xe2, 0x43, 0xd9, 0x4e, 0x0d, 0x39, 0x14, 0x44, 0xe3, 0x83, 0x34, 0x75, 0x67, 0x1b, + 0x79, 0xf2, 0xc1, 0x5a, 0x8e, 0xdd, 0xb2, 0x5d, 0xbd, 0x41, 0xa1, 0xce, 0x86, 0x50, 0xb6, 0xa3, + 0x1b, 0x8d, 0x50, 0x63, 0xe4, 0x27, 0x05, 0x1b, 0xd7, 0x9b, 0xa6, 0x65, 0x97, 0xf0, 0x7f, 0x49, + 0x93, 0xf6, 0xbb, 0x3d, 0x30, 0xb1, 0xea, 0xd6, 0x5f, 0x6f, 0xd5, 0x74, 0x0f, 0xad, 0xb7, 0x6c, + 0x6f, 0x15, 0x8f, 0xae, 0x4e, 0x42, 0x9f, 0x5e, 0x6b, 0x9a, 0x56, 0x41, 0x39, 0xa9, 0xcc, 0x0d, + 0x56, 0xc8, 0x0f, 0xf5, 0x18, 0x0c, 0x12, 0xee, 0xaa, 0x66, 0xad, 0x70, 0x10, 0xf7, 0x0c, 0x90, + 0x86, 0xbb, 0x35, 0xf5, 0x04, 0x80, 0x85, 0x1e, 0x56, 0x3d, 0xd3, 0xd8, 0x46, 0x4e, 0xa1, 0x07, + 0xf7, 0x0e, 0x5a, 0xe8, 0xe1, 0x03, 0xdc, 0xa0, 0xbe, 0x09, 0xd3, 0x7e, 0x77, 0xd3, 0xb4, 0xaa, + 0x2d, 0xc7, 0x34, 0x10, 0x06, 0xac, 0xba, 0xe6, 0x3b, 0xa8, 0xd0, 0xeb, 0xc3, 0x2e, 0x9d, 0xfe, + 0xe1, 0x07, 0xb3, 0x07, 0x7e, 0xf4, 0xc1, 0xec, 0x31, 0x32, 0x07, 0x6e, 0x6d, 0x7b, 0xde, 0xb4, + 0x4b, 0x4d, 0xdd, 0xdb, 0x9a, 0xbf, 0x87, 0xea, 0xba, 0xb1, 0xbb, 0x82, 0x8c, 0xca, 0x84, 0x85, + 0x1e, 0xae, 0x9a, 0xd6, 0x9a, 0x4f, 0xc1, 0x27, 0xbc, 0x6e, 0xbe, 0x83, 0xd4, 0x2a, 0x14, 0x03, + 0xd2, 0x6f, 0xb7, 0x75, 0xcb, 0x33, 0xbd, 0xdd, 0x08, 0xf5, 0xbe, 0xfc, 0xd4, 0x8f, 0x10, 0xea, + 0xaf, 0x51, 0x22, 0x6c, 0x80, 0x55, 0x18, 0x0b, 0x06, 0xb0, 0x6c, 0xdf, 0xa8, 0xf4, 0x46, 0xa1, + 0x3f, 0x3f, 0xd9, 0x51, 0x42, 0xf6, 0x55, 0x8a, 0x5a, 0x2e, 0xfd, 0xfb, 0x77, 0x66, 0x0f, 0x7c, + 0xed, 0xe3, 0x77, 0x2f, 0x10, 0xb5, 0x7e, 0xe3, 0xe3, 0x77, 0x2f, 0x1c, 0x67, 0xb3, 0xcb, 0x99, + 0x0d, 0xed, 0x04, 0x1c, 0xe3, 0x34, 0x57, 0x90, 0xdb, 0xb2, 0x2d, 0x17, 0x69, 0xbf, 0x75, 0x08, + 0x8e, 0xb2, 0xfe, 0x15, 0xe4, 0x98, 0x3b, 0xba, 0x6f, 0x0b, 0xbf, 0x98, 0xca, 0x7d, 0x9f, 0x4a, + 0xf5, 0xf3, 0x50, 0xf0, 0xc9, 0x99, 0x96, 0xe9, 0x99, 0x7a, 0xa3, 0xda, 0xd4, 0x9d, 0xba, 0x69, + 0x55, 0x1d, 0xdd, 0x33, 0xed, 0xc2, 0xa1, 0xfc, 0x64, 0xa7, 0x2c, 0xf4, 0xf0, 0x2e, 0xa1, 0xb1, + 0x8a, 0x49, 0x54, 0x7c, 0x0a, 0x6a, 0x0d, 0x8e, 0x63, 0x66, 0x75, 0xd3, 0xf2, 0x90, 0xa5, 0x5b, + 0x06, 0x8a, 0x8f, 0x30, 0x90, 0x7f, 0x84, 0xa3, 0x3e, 0xe3, 0x21, 0x9d, 0xe8, 0x28, 0x6f, 0x91, + 0xe9, 0x74, 0x50, 0xad, 0x9d, 0x1c, 0x60, 0x30, 0xff, 0x00, 0x93, 0x16, 0x7a, 0x58, 0xc1, 0x24, + 0xa2, 0xb4, 0xab, 0xe0, 0x8b, 0x56, 0xb5, 0x5b, 0x28, 0xd4, 0x77, 0xd5, 0xd0, 0x5b, 0x05, 0x38, + 0xa9, 0xcc, 0x0d, 0x2d, 0x9c, 0x9b, 0xe7, 0x7a, 0xff, 0xf9, 0xfb, 0x2d, 0xc4, 0x74, 0xbc, 0xac, + 0xb7, 0x96, 0x7a, 0x7d, 0x0e, 0x2a, 0xaa, 0x85, 0x1e, 0x26, 0x7a, 0xd4, 0x3a, 0x14, 0x0c, 0xc7, + 0x76, 0xdd, 0x80, 0x6f, 0xd4, 0x30, 0xeb, 0xe6, 0x86, 0xd9, 0x30, 0xbd, 0xdd, 0xc2, 0xd0, 0x49, + 0x65, 0x6e, 0x74, 0xe1, 0x92, 0x60, 0x8c, 0x65, 0x1f, 0x8d, 0xf0, 0x7a, 0x3b, 0x44, 0xaa, 0x1c, + 0x31, 0xb8, 0xed, 0xe5, 0xe7, 0x1e, 0x7f, 0x67, 0xf6, 0x40, 0x7a, 0xe1, 0x6a, 0xe9, 0x85, 0x9b, + 0x5c, 0x81, 0xda, 0x69, 0x38, 0x25, 0xec, 0x64, 0x8b, 0xf8, 0xcf, 0x15, 0x38, 0xcc, 0xa0, 0xd6, + 0x74, 0x47, 0x6f, 0xba, 0xea, 0x75, 0x18, 0xd4, 0xdb, 0xde, 0x96, 0xed, 0xf8, 0xd2, 0xe0, 0xe5, + 0xbb, 0x54, 0xf8, 0xe7, 0xef, 0x5f, 0x9a, 0xa4, 0xbb, 0xd4, 0x62, 0xad, 0xe6, 0x20, 0xd7, 0x5d, + 0xf7, 0x1c, 0xd3, 0xaa, 0x57, 0x42, 0x50, 0xf5, 0x26, 0xf4, 0xb7, 0x30, 0x05, 0xbc, 0xb2, 0x87, + 0x16, 0x4e, 0x08, 0x54, 0x40, 0x86, 0xa1, 0xda, 0xa5, 0x28, 0xe5, 0xa7, 0x7d, 0x01, 0x43, 0x62, + 0xbe, 0x90, 0x85, 0xb4, 0x90, 0x04, 0x55, 0x3b, 0x0a, 0xd3, 0x89, 0x26, 0x26, 0xd0, 0x7b, 0x4a, + 0x74, 0x6b, 0x79, 0xa8, 0xb7, 0xa8, 0x50, 0x97, 0xa1, 0xdf, 0x45, 0x56, 0x0d, 0x39, 0x99, 0x12, + 0x51, 0x38, 0xf5, 0x25, 0x18, 0x72, 0x1f, 0xea, 0xad, 0x6a, 0x4c, 0xa6, 0x53, 0x02, 0x99, 0xc2, + 0x91, 0xa8, 0x5c, 0xe0, 0xb2, 0x96, 0xf2, 0x45, 0x5f, 0x36, 0x4a, 0x56, 0xe4, 0x76, 0x19, 0x74, + 0xdc, 0xed, 0xb2, 0x66, 0x26, 0xe0, 0x9f, 0x2a, 0x00, 0xab, 0x6e, 0x7d, 0x05, 0xb5, 0x6c, 0xd7, + 0xf4, 0xd4, 0x23, 0x71, 0xb9, 0x18, 0xf7, 0xa7, 0x61, 0xc4, 0x6d, 0x6f, 0xe8, 0x86, 0x61, 0xb7, + 0xad, 0x88, 0xb7, 0x1d, 0x0e, 0x1b, 0xef, 0xd6, 0xd4, 0x67, 0xa1, 0x5f, 0x6f, 0xfa, 0xff, 0xc6, + 0xde, 0x76, 0x68, 0xe1, 0x28, 0x8d, 0x6f, 0xe6, 0xfd, 0xf8, 0x67, 0x9e, 0xee, 0xe6, 0xf3, 0xcb, + 0xb6, 0x69, 0x05, 0xb3, 0x45, 0xc0, 0xcb, 0x4f, 0x47, 0xcd, 0x32, 0x22, 0xd9, 0x44, 0x54, 0x32, + 0xca, 0xa2, 0x36, 0x09, 0x6a, 0xf8, 0x8b, 0xc9, 0xf1, 0x3d, 0x05, 0x86, 0x56, 0xdd, 0xfa, 0x1b, + 0xa6, 0xb7, 0x55, 0x73, 0xf4, 0x87, 0x3f, 0x25, 0x41, 0x2e, 0x0a, 0x04, 0x99, 0x8c, 0x0a, 0x12, + 0xf0, 0xa8, 0x4d, 0x61, 0xdb, 0x0a, 0x7e, 0x32, 0x51, 0xfe, 0x5b, 0x81, 0x99, 0x70, 0xca, 0x18, + 0x5f, 0x15, 0xd3, 0xdd, 0x5e, 0x73, 0xec, 0x4d, 0xb3, 0x81, 0x9e, 0x4c, 0xba, 0xd7, 0x61, 0xd8, + 0x31, 0xdd, 0x6d, 0x3f, 0x58, 0xf4, 0x89, 0x51, 0x19, 0x2f, 0x8a, 0x4c, 0x91, 0xc7, 0x00, 0x15, + 0x7b, 0xc8, 0x09, 0x9b, 0xca, 0x2f, 0x08, 0x64, 0x7f, 0x8a, 0x63, 0x9e, 0x3c, 0x9a, 0xda, 0x1c, + 0x9c, 0x93, 0x43, 0x30, 0x0d, 0xfd, 0xa1, 0x82, 0x57, 0xec, 0xb2, 0x83, 0x68, 0x2c, 0x71, 0xcf, + 0x6c, 0x9a, 0xde, 0x7d, 0x3f, 0x2c, 0x15, 0xaa, 0xe6, 0x33, 0xd0, 0x87, 0xe3, 0x56, 0xba, 0xf2, + 0x4e, 0x8a, 0xc4, 0x6d, 0xd9, 0x84, 0x10, 0x15, 0x91, 0x20, 0x95, 0x6f, 0x08, 0x84, 0x3b, 0x19, + 0x15, 0x8e, 0xc7, 0x8f, 0xf6, 0x79, 0x98, 0x15, 0x74, 0x05, 0xe2, 0xf8, 0x91, 0x0a, 0x1e, 0xa5, + 0xba, 0xa5, 0xbb, 0x5b, 0x94, 0xed, 0x41, 0xdc, 0xf2, 0x92, 0xee, 0x6e, 0xa9, 0x63, 0xd0, 0x63, + 0xb0, 0xa9, 0xf4, 0xff, 0x59, 0x1e, 0x08, 0xb8, 0xd1, 0xfe, 0x42, 0x81, 0x13, 0xab, 0x6e, 0x7d, + 0x49, 0xf7, 0x8c, 0x2d, 0xde, 0x18, 0xae, 0x50, 0x1f, 0xb7, 0xa0, 0x1f, 0x0f, 0xe1, 0xbb, 0xa2, + 0x9e, 0x0e, 0x14, 0x42, 0xb1, 0xca, 0xb7, 0x04, 0x1a, 0x39, 0x17, 0xd5, 0x88, 0x98, 0x2f, 0xed, + 0xcf, 0x14, 0x38, 0x2b, 0x85, 0x60, 0xea, 0x39, 0x05, 0xc3, 0xa1, 0x7a, 0x90, 0x5b, 0x50, 0x4e, + 0xf6, 0xcc, 0x0d, 0x56, 0x86, 0x98, 0x82, 0x90, 0xab, 0xce, 0xc3, 0x84, 0x81, 0x69, 0xd4, 0xaa, + 0x84, 0xbd, 0xaa, 0x61, 0xd6, 0x88, 0x64, 0x83, 0x95, 0x71, 0xda, 0x45, 0xc8, 0x2e, 0x9b, 0x35, + 0x57, 0xbd, 0x08, 0xea, 0xa6, 0x6e, 0x36, 0x12, 0xe0, 0x3d, 0x18, 0x7c, 0x8c, 0xf4, 0x84, 0xd0, + 0x11, 0x75, 0x7f, 0xb3, 0x17, 0x8a, 0xab, 0x6e, 0xfd, 0xae, 0xe5, 0x7a, 0xba, 0xe5, 0x85, 0x51, + 0xec, 0x3d, 0xbd, 0x6d, 0x19, 0x5b, 0x42, 0x5d, 0x1f, 0x81, 0x7e, 0x1a, 0x86, 0x92, 0x49, 0xa4, + 0xbf, 0xfc, 0x89, 0xf7, 0x3d, 0x4a, 0xb5, 0x86, 0x2c, 0xbb, 0x19, 0x84, 0xa8, 0x7e, 0xcb, 0x8a, + 0xdf, 0xa0, 0xce, 0xc2, 0xd0, 0xdb, 0x6d, 0xdb, 0x0b, 0xfa, 0x71, 0x58, 0x5a, 0x01, 0xdc, 0x44, + 0x00, 0x2a, 0x30, 0xc1, 0x8b, 0x5f, 0x3b, 0x88, 0x30, 0xc7, 0x9a, 0xc9, 0xe0, 0xf5, 0x73, 0x70, + 0x44, 0x10, 0xb8, 0x76, 0x10, 0x61, 0xfa, 0x6c, 0xa5, 0xa2, 0xd6, 0x3b, 0x30, 0x1c, 0x8b, 0x58, + 0x3b, 0x08, 0x2d, 0x87, 0x9a, 0x91, 0x70, 0xf5, 0x34, 0x8c, 0x50, 0xad, 0x19, 0x66, 0x53, 0x6f, + 0xb8, 0x38, 0x82, 0x1c, 0xa9, 0x0c, 0x13, 0xc5, 0x91, 0x36, 0xf5, 0x2c, 0x8c, 0x06, 0xba, 0xa3, + 0x50, 0x83, 0x18, 0x6a, 0x84, 0xaa, 0x8f, 0x34, 0x96, 0x6f, 0x0a, 0xac, 0xf8, 0x74, 0xd4, 0x8a, + 0x05, 0xd3, 0xad, 0x9d, 0x01, 0x4d, 0xdc, 0xcb, 0x9c, 0xd5, 0xaf, 0x0d, 0x62, 0x0f, 0x40, 0xc1, + 0xd6, 0x90, 0xd3, 0x42, 0x5e, 0x1b, 0x87, 0xc8, 0xdd, 0x1b, 0x4e, 0xc2, 0x32, 0x7a, 0x52, 0x96, + 0x31, 0x0b, 0x43, 0xe4, 0xd4, 0x5c, 0xf5, 0xb5, 0x12, 0x98, 0x0e, 0x69, 0x5a, 0xd2, 0x83, 0x45, + 0x85, 0x01, 0x30, 0x16, 0xb1, 0x99, 0x0a, 0x45, 0x7a, 0xcd, 0x6f, 0xf2, 0x17, 0x15, 0x05, 0x71, + 0x0d, 0xbd, 0x81, 0xaa, 0x9b, 0xba, 0xe1, 0xd9, 0x0e, 0x36, 0x83, 0x91, 0xca, 0x38, 0xe9, 0x5a, + 0xf7, 0x7b, 0xee, 0xe0, 0x0e, 0xf5, 0x36, 0x1b, 0xd3, 0xdb, 0x6d, 0x21, 0x3c, 0xbd, 0xa3, 0x0b, + 0x67, 0x22, 0x6e, 0x85, 0x9e, 0xe3, 0x83, 0xfd, 0xf3, 0x3e, 0xfe, 0xf9, 0x60, 0xb7, 0x85, 0x02, + 0xce, 0xfc, 0x7f, 0xab, 0x77, 0x61, 0xb4, 0xa9, 0x6f, 0x23, 0xa7, 0xba, 0x89, 0x90, 0x1f, 0xc1, + 0xa3, 0x4e, 0x4e, 0x08, 0xc3, 0x18, 0xf5, 0x0e, 0x42, 0x15, 0xdd, 0xc3, 0xa4, 0xbc, 0x38, 0xa9, + 0x0e, 0xce, 0x02, 0xc3, 0x5e, 0x94, 0xd4, 0xeb, 0x30, 0xc9, 0x3d, 0x1f, 0x41, 0x7e, 0x82, 0xaa, + 0x99, 0x3e, 0x1c, 0x7d, 0x01, 0x0a, 0xc2, 0x83, 0xd1, 0x50, 0x07, 0x07, 0xc5, 0x26, 0xff, 0x54, + 0x24, 0x70, 0x10, 0xc3, 0xfb, 0xe3, 0x20, 0x46, 0xf6, 0xd8, 0x41, 0x8c, 0x76, 0xe9, 0x20, 0xd6, + 0x61, 0x82, 0x77, 0x0e, 0x3c, 0x9c, 0x9f, 0xdc, 0xb8, 0x93, 0x3a, 0x04, 0x7e, 0x0e, 0xc6, 0xd3, + 0x07, 0xc0, 0xb1, 0x2e, 0x0e, 0x80, 0x87, 0xed, 0xc4, 0xe9, 0x6f, 0x01, 0xa6, 0x38, 0xa7, 0xbf, + 0x06, 0x2a, 0x8c, 0x9f, 0x54, 0xe6, 0x06, 0x2a, 0x13, 0xa9, 0xb3, 0x5c, 0x03, 0x95, 0x5f, 0x14, + 0xf8, 0xad, 0x39, 0x8e, 0xdf, 0xe2, 0xba, 0x1c, 0xed, 0x3c, 0x3c, 0x95, 0x01, 0xc2, 0x3c, 0xd8, + 0x47, 0x87, 0xe0, 0x74, 0x08, 0xbb, 0x64, 0x5a, 0xba, 0xb3, 0x7b, 0xbf, 0xe5, 0x0b, 0xe0, 0x3e, + 0x91, 0x17, 0x3b, 0x0d, 0x23, 0x81, 0x83, 0xd9, 0x6d, 0x6e, 0xd8, 0x0d, 0xea, 0xc7, 0xa8, 0x63, + 0x5a, 0xc7, 0x6d, 0xea, 0x53, 0x70, 0x98, 0x02, 0xb5, 0x1c, 0x7b, 0xc7, 0xf4, 0xa9, 0x13, 0x6f, + 0x36, 0x4a, 0x9a, 0xd7, 0x68, 0x6b, 0xd2, 0xfd, 0xf4, 0x75, 0xe9, 0x7e, 0x3a, 0xf5, 0x7a, 0x69, + 0x77, 0x75, 0x68, 0xef, 0xdc, 0xd5, 0x40, 0xb7, 0xee, 0xea, 0x0a, 0x4c, 0xa2, 0x47, 0x2d, 0x13, + 0x1b, 0xbe, 0x55, 0xf5, 0xcc, 0x26, 0x72, 0x3d, 0xbd, 0xd9, 0xc2, 0xfe, 0xaf, 0xa7, 0x32, 0x11, + 0xf6, 0x3d, 0x08, 0xba, 0x7c, 0x14, 0x17, 0x79, 0x5e, 0x03, 0x35, 0x91, 0xe5, 0x45, 0x50, 0x80, + 0xa0, 0x84, 0x7d, 0x21, 0x0a, 0xcb, 0xca, 0x0d, 0x45, 0xb3, 0x72, 0x89, 0xcd, 0x69, 0x38, 0x6f, + 0xd8, 0x32, 0xb2, 0x3f, 0x5e, 0x69, 0x74, 0x8f, 0xbd, 0xd2, 0xe1, 0x2e, 0xbd, 0xd2, 0xbe, 0x39, + 0x90, 0xf2, 0x8a, 0xc0, 0x19, 0x5c, 0xe4, 0x38, 0x03, 0xe1, 0xea, 0xd5, 0x2e, 0xc1, 0xd3, 0x39, + 0xc0, 0x98, 0x53, 0xf8, 0xfe, 0x60, 0xd4, 0x29, 0xdc, 0xf6, 0x0d, 0x6a, 0xf7, 0x4e, 0xdb, 0x6b, + 0x3b, 0xc8, 0xfd, 0xf4, 0x87, 0x36, 0x09, 0x5f, 0xd1, 0xbf, 0xb7, 0xbe, 0xe2, 0x90, 0xc8, 0x57, + 0x1c, 0x81, 0x7e, 0xbc, 0xf2, 0x76, 0xf1, 0xc2, 0xee, 0xa9, 0xd0, 0x5f, 0x1c, 0x1f, 0x32, 0xb8, + 0x77, 0x3e, 0x04, 0xf6, 0x3a, 0xe4, 0x19, 0xda, 0xbf, 0x90, 0x67, 0x78, 0xdf, 0x42, 0x9e, 0x9f, + 0x73, 0xe7, 0x22, 0x08, 0x79, 0xc6, 0xf6, 0x3e, 0xe4, 0x19, 0xdf, 0xd7, 0x90, 0x47, 0x15, 0x87, + 0x3c, 0x9d, 0x78, 0x39, 0xa1, 0x3b, 0x8a, 0x7b, 0x39, 0x21, 0x18, 0xf3, 0x72, 0x7f, 0xa4, 0x40, + 0x21, 0x96, 0xbe, 0x21, 0x50, 0xfb, 0x99, 0x6a, 0x7a, 0x4e, 0x20, 0xe7, 0x29, 0x7e, 0xaa, 0x29, + 0xc2, 0x90, 0xf6, 0xc7, 0x0a, 0x9c, 0x14, 0x75, 0xe6, 0xcd, 0x36, 0xad, 0xc2, 0x21, 0x07, 0xb9, + 0xed, 0x86, 0x17, 0xe4, 0xa8, 0x2f, 0x49, 0xd8, 0x8f, 0xd3, 0xf7, 0x91, 0xb0, 0x2c, 0x4a, 0x25, + 0xa0, 0x11, 0x24, 0xaf, 0x7a, 0x78, 0xc9, 0xab, 0x6f, 0x1f, 0x84, 0x23, 0x7c, 0x2a, 0xea, 0x0b, + 0x30, 0x10, 0xac, 0x36, 0x9a, 0x61, 0xcf, 0x65, 0xc4, 0x0c, 0x49, 0x7d, 0x0e, 0xfa, 0xb0, 0x0b, + 0x20, 0xbb, 0x4b, 0x3e, 0x6c, 0x82, 0xa1, 0x5e, 0x83, 0x9e, 0x4d, 0x44, 0xd2, 0xa2, 0x39, 0x11, + 0x7d, 0x78, 0x9f, 0x65, 0xb6, 0x8c, 0x3b, 0xb8, 0x41, 0x64, 0x48, 0xe9, 0xac, 0x1e, 0x99, 0xc7, + 0xf0, 0xb2, 0x25, 0x47, 0x96, 0x73, 0x29, 0x6e, 0x7a, 0xa2, 0x65, 0x1a, 0xd2, 0xe4, 0x18, 0x60, + 0xf9, 0x71, 0x46, 0x56, 0x4f, 0xcc, 0x97, 0xb6, 0x81, 0x93, 0x7a, 0x62, 0x80, 0xbd, 0xc8, 0x79, + 0xfe, 0x6d, 0xd4, 0xca, 0x63, 0x81, 0xca, 0x27, 0xa4, 0xa0, 0xe7, 0x39, 0x0a, 0x3a, 0x9f, 0x56, + 0x90, 0x80, 0x35, 0x0d, 0xc1, 0x5c, 0x16, 0xcc, 0x5e, 0xa8, 0xe9, 0x07, 0x0a, 0x0e, 0xd0, 0x22, + 0x09, 0x56, 0xde, 0x84, 0x88, 0x13, 0xc4, 0x2b, 0x89, 0x04, 0x71, 0x67, 0xaa, 0x0a, 0xd2, 0xc4, + 0x2f, 0x3e, 0xce, 0xf0, 0xd8, 0x59, 0xfc, 0x69, 0x7f, 0xa9, 0x60, 0x97, 0x9d, 0x05, 0xf7, 0x69, + 0x4c, 0x17, 0xbf, 0xaf, 0xe0, 0xbb, 0xaa, 0x65, 0x3f, 0x46, 0x69, 0x30, 0x77, 0x2f, 0xd4, 0xb8, + 0xb4, 0x9c, 0x21, 0x75, 0xb5, 0xd3, 0xc3, 0xb9, 0xda, 0x89, 0x9b, 0x4b, 0xaf, 0xc0, 0x5c, 0xfa, + 0x42, 0x73, 0x29, 0x71, 0xa6, 0xe7, 0x58, 0xcc, 0x94, 0xe3, 0xbc, 0x6b, 0xc7, 0x71, 0x02, 0x3c, + 0xd1, 0xca, 0xb6, 0xcb, 0xdf, 0x23, 0xdb, 0x25, 0x99, 0xab, 0x38, 0x8c, 0xd8, 0xd0, 0xca, 0xd0, + 0x5b, 0xd3, 0x3d, 0x3d, 0xe3, 0x1e, 0x02, 0x13, 0x59, 0xd1, 0x3d, 0x9d, 0x1a, 0x18, 0xc6, 0x29, + 0x5f, 0x7b, 0x9c, 0xb1, 0x51, 0x72, 0x59, 0xd1, 0xee, 0x60, 0x0f, 0xc2, 0xed, 0x63, 0x76, 0x54, + 0x80, 0x43, 0x6e, 0xdb, 0x30, 0x90, 0x4b, 0x4c, 0x68, 0xa0, 0x12, 0xfc, 0x8c, 0x3b, 0xea, 0x53, + 0x71, 0x42, 0xb1, 0x05, 0xbd, 0x8f, 0x82, 0xdf, 0xe2, 0x08, 0x7e, 0x41, 0x20, 0x38, 0x87, 0x27, + 0xed, 0x3e, 0x9c, 0xcf, 0x04, 0xea, 0x4c, 0x15, 0x00, 0x93, 0x01, 0x45, 0x72, 0x87, 0x97, 0x21, + 0x7d, 0xae, 0xbb, 0xca, 0x17, 0xe0, 0x84, 0xdb, 0xb2, 0xbd, 0x2a, 0x5b, 0x17, 0x6e, 0xd5, 0xb3, + 0xab, 0x06, 0xe6, 0xb8, 0xaa, 0x37, 0x1a, 0x74, 0x11, 0x16, 0x5c, 0x16, 0x46, 0xdc, 0xad, 0xb9, + 0x0f, 0x6c, 0x22, 0xd2, 0x62, 0xa3, 0xa1, 0xbe, 0x02, 0xa7, 0x6b, 0xcc, 0x5d, 0x88, 0xc9, 0xf4, + 0x62, 0x32, 0x33, 0xb5, 0x44, 0x61, 0x43, 0x82, 0xd8, 0x9b, 0x30, 0x85, 0xb9, 0xa1, 0x5e, 0x80, + 0x91, 0x28, 0xf4, 0x75, 0x30, 0x83, 0x4a, 0x45, 0x75, 0x99, 0xb5, 0x05, 0xd4, 0x55, 0x04, 0xc7, + 0x22, 0x7c, 0xa6, 0x06, 0xe8, 0xef, 0x68, 0x80, 0x42, 0x2d, 0xee, 0x93, 0xc3, 0x61, 0x38, 0x12, + 0x60, 0x6f, 0x57, 0x38, 0xd4, 0xc1, 0x25, 0x60, 0x52, 0x02, 0x4c, 0x41, 0xdd, 0x16, 0x49, 0x40, + 0x06, 0x18, 0xe8, 0x78, 0x13, 0xe1, 0xcb, 0x41, 0x06, 0x6b, 0xc0, 0xec, 0x06, 0x36, 0xd8, 0xaa, + 0x4d, 0x2c, 0x36, 0xad, 0xb2, 0xc1, 0x8e, 0x54, 0x76, 0x6c, 0x23, 0x6d, 0xff, 0x4c, 0x6b, 0x15, + 0x78, 0x2a, 0x31, 0x9a, 0xd0, 0x90, 0x00, 0x1b, 0xd2, 0xa9, 0x8d, 0x74, 0xfe, 0x24, 0x61, 0x4b, + 0x8e, 0x4c, 0x02, 0xa2, 0xb2, 0xa1, 0x2e, 0x54, 0x26, 0x90, 0x83, 0x68, 0x6d, 0x13, 0x8e, 0x47, + 0x57, 0x53, 0x6a, 0xc0, 0xe1, 0x8e, 0x8c, 0x20, 0xb2, 0xe8, 0x12, 0xe3, 0x3c, 0x02, 0x2d, 0xbd, + 0xe8, 0x52, 0xa3, 0x8d, 0x74, 0x21, 0x5e, 0x6a, 0x85, 0x26, 0x46, 0xfe, 0x32, 0x9c, 0xe3, 0xcf, + 0x54, 0x6a, 0xf4, 0xd1, 0x2e, 0x46, 0xe7, 0x4d, 0x6b, 0x9c, 0x81, 0xf2, 0x15, 0x8e, 0x5f, 0x3e, + 0x91, 0xf2, 0xcb, 0x51, 0x07, 0xa9, 0xfd, 0xc9, 0x10, 0x1c, 0xe7, 0x75, 0x30, 0xf7, 0x3b, 0x0f, + 0x13, 0x78, 0xda, 0xa8, 0x99, 0xc5, 0x5d, 0xf1, 0xb8, 0xdf, 0x45, 0x37, 0x31, 0xd2, 0xa1, 0x96, + 0xe1, 0x68, 0x44, 0xfd, 0x09, 0xac, 0x83, 0x18, 0x6b, 0x3a, 0x04, 0x88, 0xe3, 0x5e, 0x80, 0xf1, + 0xd0, 0x41, 0x04, 0x21, 0x14, 0x71, 0xb2, 0x87, 0xd9, 0xa2, 0xa7, 0x61, 0xd4, 0x75, 0x98, 0x4e, + 0xae, 0xf8, 0x00, 0x83, 0xf8, 0xd3, 0xa9, 0xc4, 0xfa, 0xa5, 0x78, 0x8b, 0x70, 0x22, 0x31, 0x49, + 0x09, 0x1e, 0xfb, 0x30, 0x8f, 0xc5, 0x98, 0xb6, 0xe3, 0x6c, 0x3e, 0x0f, 0xc7, 0x78, 0xab, 0x27, + 0x18, 0xbe, 0x9f, 0xec, 0x0a, 0xe9, 0xb5, 0x40, 0x39, 0x78, 0x16, 0x0a, 0x41, 0x00, 0x18, 0x75, + 0x87, 0x38, 0xac, 0x3b, 0x44, 0x58, 0xa7, 0xfd, 0x61, 0x60, 0x80, 0x23, 0xc1, 0x6b, 0x30, 0x4d, + 0x23, 0xc1, 0x14, 0xde, 0x00, 0xc6, 0x9b, 0x24, 0xdd, 0x09, 0xb4, 0x65, 0x98, 0x09, 0xc6, 0x4b, + 0xfb, 0x48, 0x8c, 0x3d, 0x88, 0xb1, 0x8f, 0x51, 0xa8, 0x84, 0xf9, 0x11, 0x22, 0x8b, 0x70, 0x82, + 0x8e, 0x2d, 0xa0, 0x41, 0x7c, 0x4f, 0x91, 0x00, 0x71, 0x49, 0xbc, 0x0c, 0x5a, 0xc0, 0x07, 0xdf, + 0xf9, 0x60, 0x3a, 0x43, 0x64, 0x33, 0xa4, 0x90, 0x9c, 0xc0, 0x00, 0xd3, 0x7a, 0x09, 0x4e, 0x51, + 0x76, 0x24, 0xa4, 0x86, 0x31, 0x29, 0xca, 0xb7, 0x88, 0xd2, 0xb3, 0x50, 0x48, 0xb9, 0xa5, 0x60, + 0x26, 0x47, 0xc8, 0x6c, 0x24, 0x5c, 0x0d, 0x9d, 0xc6, 0x15, 0x98, 0x8d, 0x4d, 0x63, 0x7c, 0xad, + 0x63, 0x06, 0x46, 0x63, 0x7a, 0x4d, 0x64, 0x1b, 0xc8, 0xf0, 0x4b, 0x30, 0x13, 0x9d, 0x53, 0x0e, + 0x91, 0xc3, 0x51, 0xc5, 0x72, 0x69, 0x2c, 0xc3, 0x8c, 0xc0, 0xe3, 0x05, 0x82, 0x8c, 0x11, 0x46, + 0xb8, 0xfe, 0x8b, 0x8a, 0xb3, 0x06, 0x67, 0x39, 0x56, 0xc2, 0xe1, 0x67, 0x9c, 0x6c, 0x32, 0x29, + 0x63, 0x49, 0xb1, 0xf5, 0x2a, 0x9c, 0x49, 0x9b, 0x0c, 0x87, 0xa0, 0x8a, 0x09, 0x9e, 0x4c, 0x5a, + 0x4e, 0x8a, 0xde, 0xcb, 0xa0, 0x49, 0xdc, 0x6b, 0x20, 0xea, 0x04, 0xb1, 0x1f, 0x91, 0xb3, 0xa4, + 0xd2, 0xbe, 0x01, 0xe7, 0x05, 0xb6, 0xc8, 0x61, 0x70, 0x12, 0x93, 0x3c, 0xc3, 0x33, 0xc9, 0x14, + 0x93, 0xaf, 0xc3, 0x1c, 0xdf, 0x30, 0x39, 0x74, 0xa7, 0x30, 0xdd, 0xd3, 0x1c, 0xfb, 0x4c, 0x92, + 0x8d, 0x84, 0xba, 0x7f, 0x45, 0x0a, 0xf4, 0x92, 0x87, 0xd1, 0x3c, 0xa9, 0xc1, 0xbd, 0x48, 0x3f, + 0xdc, 0x7c, 0x9c, 0x51, 0x64, 0x27, 0x61, 0xcc, 0x3f, 0x4d, 0x9f, 0x93, 0x83, 0xe4, 0xcd, 0x3d, + 0xac, 0x27, 0x13, 0x85, 0xcf, 0x64, 0x0a, 0xf3, 0x64, 0xe9, 0xc2, 0xff, 0x3c, 0x08, 0xc7, 0x65, + 0xb4, 0x7e, 0x16, 0x93, 0x86, 0xaf, 0xc1, 0x28, 0xae, 0x63, 0x35, 0x6d, 0xab, 0x5a, 0x43, 0x0d, + 0x4f, 0xc7, 0x87, 0xf6, 0xa1, 0xd8, 0x5d, 0x54, 0xac, 0xd8, 0x99, 0x02, 0xaf, 0xf8, 0xb0, 0xd4, + 0x2c, 0x46, 0x5a, 0xd1, 0x46, 0x52, 0x37, 0xbd, 0x6b, 0xb7, 0xbd, 0x4e, 0xea, 0xc0, 0x28, 0x4a, + 0x44, 0xdb, 0xef, 0x91, 0xa3, 0x2d, 0x27, 0x4d, 0xf5, 0x49, 0xd9, 0x79, 0xe6, 0x11, 0x57, 0xce, + 0x9b, 0xf6, 0x37, 0x0a, 0x3e, 0xe3, 0xca, 0xa1, 0x3e, 0xb5, 0xd6, 0xfe, 0xbf, 0xf4, 0xe6, 0x01, + 0x87, 0x3d, 0x09, 0x3d, 0xfd, 0xf4, 0x32, 0x48, 0xac, 0xbb, 0xa9, 0xbb, 0xdb, 0xd8, 0xc0, 0xfa, + 0x68, 0xf7, 0xaa, 0xee, 0x6e, 0x07, 0x02, 0xf5, 0x87, 0x02, 0x65, 0x26, 0x68, 0xb8, 0x02, 0x6a, + 0x1a, 0x49, 0xf1, 0xf2, 0xfa, 0x58, 0xb2, 0xe9, 0xab, 0x07, 0x71, 0x69, 0xbb, 0x28, 0x7d, 0xf1, + 0x33, 0xa4, 0xa4, 0x1b, 0x1c, 0x25, 0x9d, 0x49, 0x2b, 0x29, 0x2d, 0xa3, 0x76, 0x16, 0xe7, 0x78, + 0x45, 0xdd, 0xe1, 0xe3, 0x2a, 0x05, 0x06, 0xd9, 0x89, 0x37, 0xae, 0x00, 0x25, 0x4b, 0x01, 0x07, + 0x33, 0x15, 0xd0, 0x23, 0x57, 0x40, 0xaf, 0x40, 0x01, 0x61, 0x1a, 0x52, 0xfb, 0x1e, 0xd9, 0x51, + 0x23, 0xe9, 0xa8, 0x64, 0xf8, 0xba, 0x2f, 0x49, 0xb4, 0xcc, 0x9d, 0x54, 0xc2, 0x90, 0x76, 0x0f, + 0x6f, 0xa4, 0x12, 0x88, 0x8e, 0xd2, 0x67, 0xbf, 0x7c, 0x10, 0xa6, 0x56, 0xdd, 0x7a, 0x58, 0xf7, + 0xfe, 0xc0, 0xd1, 0x2d, 0x77, 0x53, 0x62, 0xc6, 0x97, 0x61, 0xd2, 0xb5, 0xdb, 0x8e, 0x81, 0xaa, + 0xbc, 0xf9, 0x52, 0x49, 0xdf, 0x7a, 0x74, 0xd6, 0xf0, 0xb9, 0xd0, 0xf5, 0x4c, 0x8b, 0x54, 0x05, + 0xf1, 0xec, 0x7c, 0x3a, 0x02, 0xb0, 0xce, 0x7f, 0x12, 0xd1, 0xdb, 0xd9, 0x93, 0x88, 0xf9, 0x84, + 0x7e, 0x67, 0xa2, 0xfa, 0x4d, 0x8b, 0xab, 0xcd, 0xe2, 0xab, 0xaf, 0x74, 0x07, 0xb3, 0xe5, 0xaf, + 0x1d, 0xc4, 0xcf, 0x26, 0x6e, 0x3f, 0xf2, 0x90, 0x63, 0xe9, 0x8d, 0x9f, 0x17, 0x3d, 0x49, 0x5f, + 0xf5, 0x24, 0x85, 0xa5, 0xaf, 0x7a, 0x92, 0xcd, 0x61, 0xc5, 0x9e, 0x82, 0x93, 0xb1, 0xf7, 0xcc, + 0xb7, 0xdb, 0x26, 0x7e, 0xd5, 0x44, 0x23, 0x84, 0x27, 0x4b, 0xc6, 0xc6, 0xfc, 0x46, 0x4f, 0xc2, + 0x6f, 0xb0, 0x1d, 0xbf, 0xb7, 0xe3, 0x1d, 0x5f, 0x09, 0x76, 0xfc, 0x4b, 0xb2, 0xc4, 0x49, 0x4a, + 0x18, 0x6d, 0x06, 0xe7, 0x4d, 0x52, 0xed, 0x51, 0xaf, 0x37, 0x95, 0xea, 0xc5, 0x1e, 0x30, 0x25, + 0xae, 0x92, 0x25, 0xee, 0x41, 0x91, 0xb8, 0x3d, 0x5d, 0x8b, 0xab, 0xfd, 0x9d, 0x82, 0x2f, 0x53, + 0xb0, 0x0b, 0x49, 0xf1, 0x29, 0xf6, 0x78, 0x9f, 0x85, 0xe1, 0x06, 0x85, 0xf6, 0xe1, 0xa8, 0xe7, + 0x13, 0xbd, 0xdf, 0xe1, 0x2a, 0x80, 0xda, 0x5e, 0x8c, 0x4e, 0xf9, 0x19, 0x59, 0x0d, 0xbc, 0x80, + 0x49, 0xed, 0x9b, 0x0a, 0x4c, 0xf3, 0x66, 0xa0, 0xdd, 0xf0, 0xf6, 0x40, 0xcb, 0x11, 0xcf, 0xd9, + 0x83, 0x2b, 0x43, 0x82, 0x9f, 0xea, 0x24, 0xf4, 0x21, 0xc7, 0xb1, 0x83, 0x62, 0x50, 0xf2, 0x43, + 0xf3, 0x70, 0x45, 0xbe, 0x80, 0x57, 0xe6, 0x8f, 0x5f, 0x0d, 0x63, 0x39, 0x05, 0xeb, 0x6e, 0x3e, + 0xaf, 0xee, 0x88, 0x60, 0x54, 0x7b, 0x01, 0x11, 0xed, 0x5f, 0x14, 0x18, 0x5f, 0x75, 0xeb, 0xf7, + 0x37, 0x37, 0x5d, 0xe4, 0x7d, 0x02, 0x4b, 0xad, 0x0c, 0x47, 0x6d, 0x3c, 0x96, 0x67, 0x5a, 0xf5, + 0xb8, 0x7b, 0x0a, 0x32, 0x6f, 0xd3, 0x21, 0x40, 0xd4, 0x3d, 0xb9, 0xe5, 0x0b, 0x89, 0x49, 0x2e, + 0x46, 0x27, 0x39, 0x2e, 0x81, 0x76, 0x0c, 0xbf, 0xc8, 0x8e, 0x37, 0xb2, 0xc5, 0xf5, 0x07, 0x24, + 0x3e, 0xbd, 0xdd, 0x44, 0x4e, 0x1d, 0x59, 0xc6, 0xee, 0x3a, 0xae, 0x0f, 0xa5, 0xcf, 0xb5, 0xf7, + 0x4d, 0xf6, 0xf2, 0x15, 0x59, 0x2c, 0xc9, 0x65, 0x86, 0xc6, 0x92, 0xdc, 0xbe, 0xf0, 0x19, 0xe4, + 0x41, 0x2c, 0xeb, 0x5d, 0xcb, 0x70, 0x90, 0xee, 0xb2, 0xf9, 0x26, 0x25, 0x48, 0x9f, 0x92, 0xad, + 0x25, 0xa6, 0x97, 0xde, 0x84, 0x4d, 0xdc, 0x64, 0xfb, 0x4e, 0x27, 0xa7, 0x3e, 0xba, 0xf7, 0x2c, + 0x24, 0x94, 0xaa, 0xc5, 0x4b, 0xaa, 0x78, 0x3a, 0xa1, 0xef, 0x81, 0xf9, 0x9d, 0x49, 0xb5, 0xae, + 0xa0, 0x5f, 0xa8, 0x35, 0xa9, 0x56, 0xbe, 0x4e, 0xa8, 0x5a, 0xf9, 0x9d, 0x4c, 0xad, 0xff, 0xa0, + 0xe0, 0x9d, 0x6f, 0xcd, 0x31, 0x77, 0xcc, 0x06, 0xaa, 0xa3, 0xda, 0xed, 0x47, 0xc8, 0x68, 0x7b, + 0x68, 0xd9, 0xb6, 0x3c, 0x47, 0x37, 0xc4, 0xeb, 0x6f, 0x12, 0xfa, 0x36, 0xdb, 0x56, 0xcd, 0xa5, + 0xaa, 0x24, 0x3f, 0xd4, 0xf3, 0x30, 0x66, 0x50, 0xcc, 0xaa, 0x4e, 0x1e, 0x2f, 0x53, 0xa5, 0x1d, + 0x0e, 0xda, 0xe9, 0x9b, 0x66, 0x55, 0xa5, 0xd1, 0x36, 0xd1, 0x13, 0x89, 0xa2, 0x9f, 0x17, 0x14, + 0xac, 0x9d, 0x8d, 0x8a, 0x2b, 0xe4, 0xd5, 0x77, 0x24, 0x67, 0x64, 0x00, 0xcc, 0x6d, 0x7f, 0x11, + 0x00, 0xf3, 0x5b, 0xad, 0x99, 0x9b, 0x9b, 0xd4, 0x73, 0x4b, 0xc2, 0xab, 0xcb, 0xfe, 0x54, 0x7d, + 0xf7, 0xdf, 0x66, 0xe7, 0xea, 0xa6, 0xb7, 0xd5, 0xde, 0x98, 0x37, 0xec, 0x26, 0xfd, 0x32, 0x0a, + 0xfd, 0xdf, 0x25, 0xb7, 0xb6, 0x5d, 0xf2, 0x76, 0x5b, 0xc8, 0xc5, 0x08, 0x6e, 0x65, 0x10, 0x93, + 0x5f, 0x31, 0x37, 0x37, 0xcb, 0x13, 0x1c, 0x99, 0xb4, 0x2f, 0xc0, 0xd8, 0xaa, 0x5b, 0xaf, 0xa0, + 0x87, 0xba, 0x53, 0x73, 0xef, 0xb7, 0xbc, 0xfb, 0x6d, 0xa1, 0xa6, 0xc9, 0x3d, 0x10, 0x47, 0x29, + 0x47, 0xa3, 0x4a, 0x89, 0x91, 0xd2, 0x8a, 0xd8, 0xa1, 0xc6, 0xda, 0xa2, 0xcf, 0xb4, 0xa7, 0x70, + 0xa7, 0xd1, 0xd0, 0xcd, 0xe6, 0x3d, 0xdb, 0xd8, 0x46, 0xb5, 0x3b, 0x78, 0xf2, 0xc4, 0x8b, 0x68, + 0xa2, 0x81, 0xc1, 0x16, 0x89, 0xa5, 0xaf, 0xb5, 0x37, 0x5e, 0x41, 0xbb, 0x78, 0xe2, 0x87, 0x2b, + 0xbc, 0x2e, 0xf5, 0x38, 0x0c, 0xba, 0x66, 0xdd, 0xd2, 0xbd, 0xb6, 0x43, 0x12, 0x59, 0xc3, 0x95, + 0xb0, 0x41, 0x1e, 0xc7, 0xa7, 0xf9, 0xa2, 0x71, 0x7c, 0xba, 0x83, 0x89, 0xf4, 0x15, 0xf2, 0x62, + 0x7b, 0xdd, 0xac, 0x93, 0x98, 0x6c, 0x1d, 0xfa, 0xfd, 0x7f, 0x53, 0x41, 0x86, 0x97, 0x6e, 0xfe, + 0xe4, 0x83, 0xd9, 0x7e, 0x17, 0xb7, 0xfc, 0xcf, 0x07, 0xb3, 0x97, 0x72, 0xcc, 0xe2, 0xa2, 0x61, + 0x50, 0x3b, 0xad, 0x50, 0x52, 0xea, 0x71, 0xe8, 0x5d, 0x21, 0xa7, 0x43, 0x9f, 0xe4, 0xc0, 0x4f, + 0x3e, 0x98, 0xc5, 0x36, 0x5b, 0xc1, 0xad, 0x9a, 0x8b, 0xdf, 0xbe, 0x63, 0x0e, 0x6c, 0x43, 0x3d, + 0x4b, 0xe4, 0x27, 0x25, 0xe1, 0x24, 0x7f, 0x88, 0x11, 0xfc, 0xdf, 0x95, 0x01, 0xbf, 0x0b, 0x17, + 0x7d, 0xdf, 0x82, 0xbe, 0x1d, 0xbd, 0xd1, 0x46, 0x34, 0x0f, 0xa4, 0x09, 0x62, 0x87, 0x88, 0x68, + 0x41, 0x5a, 0x0b, 0xa3, 0x69, 0x5f, 0xef, 0xc1, 0x4b, 0x7c, 0xb1, 0xd6, 0x34, 0x2d, 0x72, 0xdd, + 0xc7, 0xc9, 0x4d, 0x75, 0x97, 0xbc, 0x78, 0x15, 0xc6, 0x22, 0x4f, 0x38, 0x48, 0x2a, 0x33, 0xcc, + 0x48, 0x2a, 0x59, 0x7e, 0xeb, 0x70, 0x88, 0x8c, 0xeb, 0x9f, 0x85, 0xaf, 0x48, 0x7a, 0x3b, 0x7f, + 0x45, 0xd2, 0x27, 0x7e, 0x45, 0x72, 0x13, 0xfa, 0x5d, 0x4f, 0xf7, 0xda, 0x2e, 0xad, 0xc3, 0x3f, + 0x2d, 0xd2, 0x28, 0x16, 0x73, 0x1d, 0x83, 0x56, 0x28, 0x4a, 0xb9, 0x2c, 0x4b, 0x10, 0xca, 0x75, + 0xac, 0x3d, 0x8d, 0xf3, 0x83, 0x72, 0x20, 0x66, 0xae, 0xbf, 0x4f, 0xde, 0x9c, 0x2f, 0x92, 0x4f, + 0x4a, 0xbc, 0x83, 0xd6, 0x3d, 0x7d, 0x1b, 0xfd, 0x3f, 0x47, 0xb7, 0x3c, 0xf1, 0x1a, 0x5c, 0x84, + 0xfe, 0x3a, 0x86, 0xa0, 0x31, 0xfa, 0x79, 0x81, 0x64, 0x98, 0x4c, 0x40, 0x19, 0x2b, 0xb4, 0x42, + 0x11, 0xcb, 0x97, 0x65, 0x0f, 0xce, 0x79, 0xcc, 0x68, 0xa7, 0xf0, 0x73, 0x53, 0x5e, 0x17, 0x93, + 0x65, 0x17, 0x3b, 0x93, 0x45, 0x9f, 0x11, 0xdd, 0x8b, 0x40, 0x08, 0x05, 0x29, 0xc0, 0x21, 0xcc, + 0x0f, 0x7b, 0xad, 0x11, 0xfc, 0x94, 0xbb, 0x85, 0xf4, 0x08, 0xd4, 0x2d, 0xa4, 0x3b, 0x18, 0x6f, + 0xff, 0xa8, 0x84, 0xb7, 0xe1, 0xb7, 0x29, 0xad, 0x55, 0xbb, 0x66, 0x6e, 0x9a, 0x86, 0x2e, 0x8d, + 0xab, 0x1f, 0xc0, 0x40, 0xf0, 0x45, 0x29, 0xba, 0x34, 0x6f, 0x08, 0xd4, 0x2d, 0xa4, 0xbd, 0x46, + 0xf1, 0x2b, 0x8c, 0x52, 0xbe, 0xcd, 0x4d, 0x48, 0x50, 0x3b, 0x87, 0xf7, 0x36, 0x61, 0x3f, 0x93, + 0xfa, 0x5d, 0xf2, 0x9d, 0x91, 0xdc, 0x2f, 0xca, 0x5f, 0x49, 0x09, 0x5b, 0xca, 0x2c, 0xd3, 0x26, + 0x24, 0x39, 0x32, 0x5e, 0x15, 0xc8, 0x18, 0x4b, 0x41, 0xa4, 0x5e, 0x3f, 0x93, 0x14, 0x84, 0xf0, + 0xd9, 0xf3, 0x7b, 0xe4, 0x7c, 0xd0, 0xd9, 0x7b, 0xe7, 0xb5, 0x94, 0x58, 0x57, 0x45, 0x17, 0x21, + 0x3c, 0xba, 0x1c, 0xd9, 0x72, 0x55, 0xd3, 0xf3, 0x5f, 0x48, 0x92, 0x73, 0x83, 0xfc, 0x69, 0x24, + 0xb5, 0xd6, 0xce, 0x9f, 0x3f, 0xe5, 0xb7, 0x56, 0x21, 0xed, 0x6e, 0xad, 0x55, 0xfc, 0x38, 0x82, + 0x58, 0x6b, 0xf6, 0xab, 0x88, 0x60, 0x8d, 0x76, 0xfc, 0x12, 0xb4, 0x83, 0x35, 0x2a, 0xa2, 0xdd, + 0xf5, 0x1a, 0x15, 0x3e, 0x7c, 0xa3, 0x6b, 0x34, 0xf3, 0xc5, 0xdb, 0x0f, 0x22, 0xe9, 0x9a, 0x65, + 0xbb, 0xd9, 0x6c, 0x5b, 0xa6, 0xb7, 0xbb, 0x66, 0xdb, 0x8d, 0xf5, 0x16, 0xb2, 0x6a, 0x42, 0x99, + 0x2b, 0x29, 0x99, 0xaf, 0xcb, 0xfc, 0x52, 0x9a, 0x32, 0x47, 0xe2, 0x5c, 0x9f, 0x2d, 0x10, 0x90, + 0xa3, 0x9f, 0x2d, 0x10, 0xf4, 0x26, 0xd7, 0x6f, 0xb8, 0xbe, 0xf1, 0x87, 0x83, 0xc8, 0x3e, 0xb9, + 0x07, 0xeb, 0x97, 0x4b, 0xb7, 0xdb, 0xf5, 0xcb, 0x25, 0x46, 0xd7, 0x2f, 0xb7, 0x8f, 0x49, 0xf9, + 0x4f, 0xe4, 0xe2, 0x21, 0x79, 0x69, 0x97, 0x47, 0xd6, 0xcf, 0xa6, 0x64, 0x2d, 0xe7, 0xbc, 0x12, + 0x94, 0x4b, 0x9c, 0xeb, 0x3b, 0x3a, 0x12, 0x92, 0xf4, 0x3b, 0x3a, 0x12, 0x08, 0x26, 0xfd, 0x8f, + 0x68, 0xf9, 0x72, 0xda, 0xf4, 0xf3, 0x28, 0xe0, 0xcd, 0x94, 0x02, 0x9e, 0xcf, 0xbf, 0x98, 0xe5, + 0x3a, 0x58, 0x12, 0xe8, 0xe0, 0x42, 0xc6, 0x8a, 0x8e, 0xaa, 0x81, 0x44, 0x77, 0x72, 0x20, 0xa6, + 0x89, 0xbf, 0x57, 0x70, 0xa2, 0x82, 0x00, 0xdc, 0xb1, 0x1d, 0x03, 0xd5, 0xd6, 0x59, 0xa8, 0x2a, + 0xd4, 0xc0, 0x6b, 0x29, 0x0d, 0x5c, 0x93, 0xc6, 0xae, 0x49, 0xc2, 0x1c, 0xc9, 0xcb, 0x02, 0xc9, + 0x63, 0xb9, 0x03, 0x3e, 0x35, 0x9a, 0x3b, 0xe0, 0x77, 0x26, 0x2d, 0xfe, 0x81, 0xa3, 0xd7, 0x4c, + 0x8b, 0x9e, 0x36, 0x97, 0xf5, 0x66, 0x4b, 0x37, 0xeb, 0x56, 0x86, 0xf7, 0xce, 0x6f, 0xf1, 0x12, + 0xea, 0xdd, 0x5a, 0xbc, 0x84, 0x24, 0xb5, 0x78, 0x09, 0x04, 0x93, 0xfe, 0xbb, 0x24, 0x55, 0x1b, + 0xc4, 0x62, 0xb7, 0x2d, 0x7d, 0x43, 0xf2, 0x39, 0xad, 0xbb, 0x29, 0x81, 0x2f, 0x09, 0x37, 0xe9, + 0x28, 0x41, 0x8e, 0x8c, 0x0b, 0x02, 0x19, 0x8b, 0xf1, 0x9d, 0x39, 0x4a, 0x85, 0xe6, 0x5f, 0xe3, + 0x8d, 0xb9, 0xe6, 0x71, 0xcf, 0x3c, 0x97, 0x84, 0xfa, 0x9e, 0xce, 0x63, 0xcc, 0x73, 0x49, 0x20, + 0x98, 0xf4, 0x3f, 0x26, 0x8f, 0x9b, 0x62, 0xa0, 0x6b, 0xc8, 0xf2, 0x7f, 0xac, 0xd9, 0xa6, 0xe5, + 0xb9, 0x19, 0x2a, 0xf8, 0xff, 0x29, 0x15, 0xbc, 0x90, 0x47, 0x05, 0x9c, 0x21, 0x38, 0x7a, 0xc8, + 0xf5, 0x52, 0x35, 0x8b, 0x2e, 0x7d, 0xa9, 0x9a, 0x05, 0xc6, 0x34, 0xf2, 0xdb, 0x0a, 0x8c, 0xae, + 0xba, 0xf5, 0x3b, 0x08, 0xad, 0x98, 0x2e, 0x4e, 0xeb, 0x08, 0x85, 0xbf, 0x93, 0x12, 0xfe, 0x82, + 0x40, 0xf8, 0x08, 0x35, 0x8e, 0x9c, 0x25, 0x81, 0x9c, 0xd3, 0x51, 0x39, 0x23, 0x24, 0xb4, 0x02, + 0x1c, 0x89, 0xb7, 0x30, 0xee, 0xff, 0x8b, 0xd4, 0xea, 0x2c, 0x7a, 0x76, 0xd3, 0x34, 0x22, 0x85, + 0x33, 0x77, 0x10, 0x5a, 0x6d, 0x37, 0x3c, 0xb3, 0xd5, 0x30, 0x91, 0xb3, 0x6e, 0x6c, 0xa1, 0x5a, + 0x5b, 0xb2, 0x5e, 0xf5, 0x94, 0x60, 0xb7, 0x05, 0x82, 0xe5, 0x1b, 0x88, 0x23, 0xf3, 0xcb, 0x02, + 0x99, 0x17, 0x62, 0xe7, 0xde, 0x5c, 0xd4, 0xb5, 0x67, 0xe0, 0x4a, 0x6e, 0x60, 0xa6, 0xa9, 0x5f, + 0x27, 0x7b, 0xf6, 0x3a, 0xf2, 0x56, 0x50, 0x03, 0xd5, 0x49, 0xfa, 0x85, 0xdd, 0xff, 0x1a, 0xc8, + 0xdc, 0x91, 0x55, 0x4b, 0x1c, 0x87, 0x41, 0x27, 0x00, 0xa2, 0xef, 0xdd, 0xc2, 0x06, 0x79, 0x32, + 0x45, 0x3e, 0x22, 0xdd, 0x6e, 0xe5, 0x40, 0x4c, 0x88, 0x2a, 0x4e, 0x40, 0x90, 0xb2, 0x89, 0x35, + 0xdb, 0xf5, 0xee, 0x5b, 0x8d, 0xdd, 0x55, 0xbb, 0x26, 0x9c, 0x59, 0x79, 0x9a, 0x21, 0x4d, 0x87, + 0xa6, 0x19, 0xd2, 0x1d, 0x8c, 0x83, 0xc7, 0x34, 0x9d, 0x43, 0x13, 0x11, 0x79, 0x98, 0xc0, 0x1f, + 0x1e, 0x6b, 0xd8, 0xc6, 0xb6, 0x5b, 0xa5, 0x77, 0x02, 0x07, 0xe9, 0x87, 0xc7, 0x70, 0xe3, 0x22, + 0x49, 0xfa, 0xcb, 0x13, 0x36, 0x9c, 0xe1, 0x82, 0x84, 0x0d, 0xa7, 0x8b, 0x71, 0xfb, 0xbe, 0x82, + 0x0f, 0xdb, 0xec, 0x3e, 0x32, 0xf2, 0xd9, 0x57, 0x3f, 0x72, 0x7f, 0xb2, 0xfb, 0xb6, 0xcc, 0x2f, + 0x6e, 0x9c, 0x00, 0x70, 0x36, 0xdf, 0xae, 0xea, 0x86, 0x3f, 0xa9, 0x41, 0xb9, 0x93, 0xb3, 0xf9, + 0xf6, 0x22, 0x6e, 0x28, 0x5f, 0x95, 0x55, 0x2e, 0x89, 0x58, 0xa6, 0x95, 0x4b, 0xa2, 0xee, 0x40, + 0xf2, 0x85, 0xff, 0xb8, 0x05, 0x3d, 0xab, 0x6e, 0x5d, 0x7d, 0x03, 0x0e, 0x05, 0xdf, 0x28, 0x3d, + 0x25, 0xce, 0xb8, 0x52, 0x90, 0xe2, 0xf9, 0x4c, 0x10, 0x76, 0xab, 0xf0, 0x16, 0x0c, 0xb0, 0x8f, + 0x86, 0x4a, 0x72, 0xb9, 0x01, 0x4c, 0xf1, 0x42, 0x36, 0x0c, 0xa3, 0xfd, 0x75, 0x05, 0xa6, 0x45, + 0xdf, 0x0a, 0xbc, 0x22, 0xa6, 0x23, 0x40, 0x29, 0x3e, 0xd7, 0x31, 0x0a, 0xe3, 0xe4, 0xdb, 0x0a, + 0x1c, 0x97, 0x7e, 0x81, 0xee, 0x7a, 0x26, 0x6d, 0x2e, 0x5e, 0xf1, 0x56, 0x77, 0x78, 0x8c, 0xb1, + 0xdf, 0x51, 0xe0, 0x64, 0xe6, 0x37, 0x64, 0xca, 0x99, 0x83, 0x08, 0x71, 0x8b, 0x4b, 0xdd, 0xe3, + 0x32, 0x26, 0xbf, 0x04, 0x93, 0xdc, 0x6f, 0x8d, 0xce, 0x8b, 0x69, 0xf3, 0xe0, 0x8b, 0xd7, 0x3b, + 0x83, 0x67, 0xe3, 0x7f, 0x4b, 0x81, 0xa2, 0xe4, 0x13, 0x9f, 0x57, 0xc5, 0x64, 0xc5, 0x58, 0xc5, + 0xcf, 0x74, 0x83, 0xc5, 0x58, 0xfa, 0xaa, 0x02, 0x53, 0xfc, 0xaf, 0x62, 0x94, 0xf2, 0x08, 0x19, + 0x41, 0x28, 0x3e, 0xdb, 0x21, 0x02, 0xe3, 0xc1, 0x86, 0xc3, 0xc9, 0xa7, 0xd5, 0x92, 0x85, 0x9f, + 0x00, 0x2d, 0x5e, 0xc9, 0x0d, 0x1a, 0x13, 0x9a, 0xff, 0xb6, 0xb9, 0x94, 0xa5, 0xcc, 0x04, 0x82, + 0x4c, 0x68, 0xf9, 0xb3, 0xe4, 0x36, 0x8c, 0xa7, 0xdf, 0xd8, 0x3e, 0x9d, 0x41, 0x2d, 0x0a, 0x5c, + 0x7c, 0xa6, 0x03, 0x60, 0x36, 0xec, 0xaf, 0x28, 0x70, 0x54, 0x7c, 0xdf, 0x2c, 0x21, 0x29, 0x44, + 0x2a, 0xde, 0xec, 0x02, 0x29, 0xb6, 0x24, 0x24, 0xdf, 0xc7, 0xb8, 0x9a, 0x65, 0x53, 0x3c, 0x2c, + 0xd9, 0x92, 0xc8, 0xf1, 0x49, 0x0b, 0xdf, 0x95, 0x65, 0x7e, 0x6d, 0xa1, 0x9c, 0x6b, 0xd5, 0x71, + 0x71, 0x65, 0xae, 0x2c, 0xf7, 0xd7, 0x11, 0x7e, 0x55, 0x81, 0x63, 0xb2, 0x87, 0x2b, 0xd7, 0xf2, + 0xab, 0x20, 0xba, 0x86, 0x9f, 0xef, 0x0a, 0x2d, 0xee, 0x4d, 0xb8, 0x95, 0xee, 0xa5, 0xac, 0x55, + 0x9a, 0x40, 0x90, 0x7a, 0x13, 0x59, 0x39, 0x39, 0xd6, 0x8c, 0xac, 0x00, 0xf9, 0x5a, 0xae, 0x15, + 0x9b, 0x44, 0x93, 0x69, 0x26, 0x4f, 0xed, 0x70, 0x64, 0x7f, 0x14, 0xa7, 0xdb, 0xb3, 0xf7, 0x47, + 0x21, 0x6e, 0x8e, 0xfd, 0x31, 0x33, 0x33, 0xae, 0xfe, 0x86, 0x02, 0x27, 0xe4, 0x9f, 0x63, 0xc9, + 0xf4, 0xf1, 0x02, 0xc4, 0xe2, 0x0b, 0x5d, 0x22, 0x32, 0xde, 0x7e, 0x53, 0x81, 0x99, 0x8c, 0x47, + 0x2c, 0x37, 0x3a, 0x1a, 0x23, 0x6a, 0xf6, 0x2f, 0x76, 0x8b, 0xc9, 0xd8, 0xfb, 0x86, 0x02, 0x05, + 0xe1, 0x0b, 0x86, 0x85, 0x2c, 0x5b, 0x4e, 0xe3, 0x14, 0xcb, 0x9d, 0xe3, 0xc4, 0x74, 0x95, 0xf1, + 0x2d, 0x8b, 0x1b, 0xb9, 0xcc, 0x99, 0x83, 0x29, 0xd3, 0x55, 0xce, 0xcf, 0x50, 0x3c, 0x02, 0x95, + 0x53, 0x1f, 0x7f, 0x51, 0x52, 0x80, 0x91, 0x82, 0x2e, 0x5e, 0xed, 0x04, 0x9a, 0x8d, 0xec, 0xc0, + 0x58, 0xaa, 0xde, 0x5c, 0x72, 0x10, 0x48, 0xc2, 0x16, 0x17, 0xf2, 0xc3, 0x46, 0x37, 0xfa, 0x74, + 0xfd, 0xb6, 0x64, 0xa3, 0x4f, 0x01, 0xcb, 0x36, 0x7a, 0x61, 0xd1, 0x34, 0x3e, 0xb3, 0x88, 0x2a, + 0x92, 0xaf, 0x64, 0x4c, 0x61, 0x1a, 0x45, 0x76, 0x66, 0xc9, 0x2a, 0xd3, 0xf5, 0x37, 0x05, 0x7e, + 0x79, 0xa9, 0x64, 0x53, 0xe0, 0x22, 0xc8, 0x36, 0x05, 0x69, 0x5d, 0xa8, 0xda, 0x80, 0xd1, 0x44, + 0x59, 0xef, 0x9c, 0x98, 0x54, 0x1c, 0xb2, 0x78, 0x39, 0x2f, 0x24, 0x1b, 0xed, 0x97, 0x14, 0x38, + 0x22, 0x28, 0x41, 0xbd, 0x2c, 0x73, 0xd3, 0x3c, 0x8c, 0xe2, 0x8d, 0x4e, 0x31, 0x62, 0x6c, 0x08, + 0x4a, 0x36, 0x2f, 0xcb, 0x0e, 0xd6, 0x9d, 0xb2, 0x21, 0xaf, 0x72, 0x54, 0x4d, 0x18, 0x89, 0xd7, + 0xda, 0x3d, 0x25, 0x26, 0x15, 0x03, 0x2c, 0x96, 0x72, 0x02, 0xc6, 0x1c, 0x5f, 0x46, 0x41, 0x96, + 0x44, 0x0e, 0x39, 0xa6, 0xcc, 0xf1, 0xe5, 0xab, 0x3d, 0x52, 0x37, 0x61, 0x38, 0xf6, 0x27, 0x75, + 0xce, 0x89, 0x29, 0x46, 0xe1, 0x8a, 0xf3, 0xf9, 0xe0, 0xa2, 0x6e, 0x2e, 0xf5, 0x97, 0x6e, 0x2e, + 0x64, 0xd1, 0x08, 0x61, 0x65, 0x6e, 0x4e, 0xf4, 0x07, 0x68, 0x22, 0x63, 0x86, 0x7f, 0xb8, 0x2d, + 0x7b, 0x4c, 0x06, 0x9b, 0x63, 0xcc, 0xd4, 0xdf, 0x1a, 0xc3, 0x06, 0x2e, 0xf8, 0x43, 0x63, 0x97, + 0xb3, 0xc8, 0x25, 0x31, 0x64, 0x06, 0x2e, 0xff, 0x6b, 0x49, 0xea, 0x97, 0x60, 0x92, 0x5b, 0x4e, + 0x26, 0x99, 0x36, 0x1e, 0xbc, 0x2c, 0xad, 0x20, 0x2b, 0x03, 0xf3, 0xf7, 0x53, 0x4e, 0x0d, 0x98, + 0x64, 0x3f, 0x4d, 0x43, 0xcb, 0xf6, 0x53, 0x71, 0x91, 0x17, 0x3e, 0x4d, 0x8a, 0x2b, 0xbc, 0xb2, + 0x0e, 0xa8, 0x3c, 0x24, 0xd9, 0x69, 0x32, 0xb3, 0xfc, 0xca, 0x37, 0x42, 0x12, 0xd2, 0xe6, 0x33, + 0xc2, 0x54, 0x66, 0x6e, 0x21, 0x3f, 0x6c, 0x6c, 0x7b, 0xa3, 0x57, 0xa2, 0xf1, 0x0c, 0x99, 0x6c, + 0x7b, 0xe3, 0x27, 0xe1, 0x9e, 0xed, 0x10, 0x21, 0x36, 0x0f, 0xa4, 0x89, 0x93, 0x04, 0x93, 0xcd, + 0x83, 0x38, 0xdf, 0x76, 0xb3, 0x0b, 0x24, 0x0e, 0x3f, 0x3c, 0x17, 0x2c, 0xb3, 0x0b, 0xe1, 0xf9, + 0xe6, 0x66, 0x17, 0x48, 0xe9, 0x60, 0x08, 0xd7, 0xc6, 0xc4, 0xaa, 0x65, 0x32, 0x83, 0xa1, 0x74, + 0x6d, 0x4d, 0x66, 0x30, 0x24, 0x2e, 0xc7, 0xc1, 0xd6, 0xc2, 0xaf, 0xc5, 0x29, 0xe5, 0xb1, 0xbd, + 0x08, 0x82, 0xcc, 0x5a, 0xa4, 0xc5, 0x32, 0xf8, 0x84, 0x2c, 0xab, 0x94, 0xb9, 0x26, 0xdb, 0xea, + 0x85, 0x68, 0xb2, 0x13, 0x72, 0x8e, 0x22, 0x16, 0x72, 0x68, 0x91, 0x57, 0xb0, 0xdc, 0xe8, 0xc8, + 0x06, 0xa2, 0xbc, 0xbd, 0xd8, 0x2d, 0x26, 0x63, 0xef, 0xcb, 0x30, 0x8e, 0x6b, 0x31, 0x62, 0x01, + 0xac, 0x64, 0x97, 0xe1, 0x97, 0x6f, 0xc8, 0x76, 0x19, 0x79, 0xc1, 0x07, 0x9e, 0x35, 0x62, 0xd6, + 0xdc, 0x8b, 0x75, 0xd9, 0xac, 0x49, 0x2a, 0x2a, 0x64, 0xb3, 0x96, 0xa3, 0x10, 0xc3, 0x0f, 0xac, + 0x49, 0x41, 0x43, 0xe0, 0x97, 0x65, 0x81, 0x75, 0xbc, 0x04, 0x42, 0x16, 0x58, 0xf3, 0x8b, 0x25, + 0xb0, 0x0e, 0xc8, 0xbc, 0xec, 0x8d, 0x0e, 0xb2, 0x2d, 0x37, 0x47, 0x11, 0x03, 0xce, 0xed, 0x70, + 0xb8, 0x8a, 0xdd, 0xf2, 0xcb, 0x72, 0x3b, 0x59, 0xb5, 0x01, 0xb2, 0xdc, 0x4e, 0xde, 0xba, 0x02, + 0xd5, 0x84, 0x71, 0xd2, 0x12, 0xad, 0x2c, 0x38, 0x2b, 0x26, 0x1c, 0x01, 0x2b, 0x5e, 0xca, 0x05, + 0xc6, 0x86, 0xfa, 0x6b, 0x05, 0x2e, 0x92, 0xb1, 0x72, 0xd6, 0x01, 0xc8, 0x22, 0xeb, 0x5c, 0x14, + 0x8a, 0x2f, 0x3d, 0x29, 0x85, 0x98, 0x1b, 0xca, 0xb8, 0x94, 0x97, 0xac, 0x61, 0x39, 0xa6, 0xcc, + 0x0d, 0xe5, 0xbb, 0x71, 0xf7, 0x63, 0x3d, 0xce, 0x75, 0xfb, 0xc5, 0xac, 0x64, 0x51, 0x14, 0x5a, + 0x16, 0xeb, 0x89, 0x6f, 0xda, 0x71, 0x94, 0xcb, 0xbb, 0x65, 0x9f, 0xcf, 0x8e, 0x1c, 0x63, 0xa3, + 0x5f, 0xef, 0x0c, 0x3e, 0x96, 0x61, 0x13, 0x5e, 0x9c, 0x2f, 0xe4, 0x48, 0x91, 0x24, 0x70, 0x64, + 0x19, 0xb6, 0xac, 0xeb, 0xec, 0x88, 0x23, 0xe2, 0xff, 0x61, 0xc7, 0x6b, 0x99, 0xa7, 0x19, 0x1e, + 0x9a, 0xcc, 0x11, 0xe5, 0xf8, 0x7b, 0x8a, 0xc5, 0xbe, 0xaf, 0x7c, 0xfc, 0xee, 0x05, 0x65, 0x69, + 0xfb, 0x87, 0x1f, 0xce, 0x28, 0xef, 0x7f, 0x38, 0xa3, 0xfc, 0xf8, 0xc3, 0x19, 0xe5, 0x5b, 0x1f, + 0xcd, 0x1c, 0x78, 0xff, 0xa3, 0x99, 0x03, 0xff, 0xfa, 0xd1, 0xcc, 0x81, 0xb7, 0x5e, 0x8b, 0xbc, + 0xbe, 0xba, 0x1b, 0x8c, 0x74, 0x4f, 0xdf, 0x70, 0x4b, 0x6c, 0xdc, 0x4b, 0x86, 0xed, 0xa0, 0xe8, + 0xcf, 0x2d, 0xdd, 0xb4, 0x4a, 0x4d, 0xdb, 0x5f, 0x24, 0x6e, 0xf8, 0x77, 0xbf, 0xf1, 0x4b, 0xad, + 0xd2, 0xce, 0xc2, 0x46, 0x3f, 0xfe, 0xdb, 0xdd, 0xcf, 0xfc, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xb6, 0x1b, 0x1c, 0xa2, 0x5b, 0x7d, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -6362,6 +6473,7 @@ type MsgClient interface { // market by admin AdminUpdateBinaryOptionsMarket(ctx context.Context, in *MsgAdminUpdateBinaryOptionsMarket, opts ...grpc.CallOption) (*MsgAdminUpdateBinaryOptionsMarketResponse, error) UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) + UpdateSwapParams(ctx context.Context, in *MsgUpdateSwapParams, opts ...grpc.CallOption) (*MsgUpdateSwapParamsResponse, error) // UpdateSpotMarket modifies certain spot market fields (admin only) UpdateSpotMarket(ctx context.Context, in *MsgUpdateSpotMarket, opts ...grpc.CallOption) (*MsgUpdateSpotMarketResponse, error) // UpdateDerivativeMarket modifies certain derivative market fields (admin @@ -6706,6 +6818,15 @@ func (c *msgClient) UpdateParams(ctx context.Context, in *MsgUpdateParams, opts return out, nil } +func (c *msgClient) UpdateSwapParams(ctx context.Context, in *MsgUpdateSwapParams, opts ...grpc.CallOption) (*MsgUpdateSwapParamsResponse, error) { + out := new(MsgUpdateSwapParamsResponse) + err := c.cc.Invoke(ctx, "/injective.exchange.v2.Msg/UpdateSwapParams", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *msgClient) UpdateSpotMarket(ctx context.Context, in *MsgUpdateSpotMarket, opts ...grpc.CallOption) (*MsgUpdateSpotMarketResponse, error) { out := new(MsgUpdateSpotMarketResponse) err := c.cc.Invoke(ctx, "/injective.exchange.v2.Msg/UpdateSpotMarket", in, out, opts...) @@ -7019,6 +7140,7 @@ type MsgServer interface { // market by admin AdminUpdateBinaryOptionsMarket(context.Context, *MsgAdminUpdateBinaryOptionsMarket) (*MsgAdminUpdateBinaryOptionsMarketResponse, error) UpdateParams(context.Context, *MsgUpdateParams) (*MsgUpdateParamsResponse, error) + UpdateSwapParams(context.Context, *MsgUpdateSwapParams) (*MsgUpdateSwapParamsResponse, error) // UpdateSpotMarket modifies certain spot market fields (admin only) UpdateSpotMarket(context.Context, *MsgUpdateSpotMarket) (*MsgUpdateSpotMarketResponse, error) // UpdateDerivativeMarket modifies certain derivative market fields (admin @@ -7161,6 +7283,9 @@ func (*UnimplementedMsgServer) AdminUpdateBinaryOptionsMarket(ctx context.Contex func (*UnimplementedMsgServer) UpdateParams(ctx context.Context, req *MsgUpdateParams) (*MsgUpdateParamsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method UpdateParams not implemented") } +func (*UnimplementedMsgServer) UpdateSwapParams(ctx context.Context, req *MsgUpdateSwapParams) (*MsgUpdateSwapParamsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateSwapParams not implemented") +} func (*UnimplementedMsgServer) UpdateSpotMarket(ctx context.Context, req *MsgUpdateSpotMarket) (*MsgUpdateSpotMarketResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method UpdateSpotMarket not implemented") } @@ -7835,6 +7960,24 @@ func _Msg_UpdateParams_Handler(srv interface{}, ctx context.Context, dec func(in return interceptor(ctx, in, info, handler) } +func _Msg_UpdateSwapParams_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgUpdateSwapParams) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).UpdateSwapParams(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/injective.exchange.v2.Msg/UpdateSwapParams", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).UpdateSwapParams(ctx, req.(*MsgUpdateSwapParams)) + } + return interceptor(ctx, in, info, handler) +} + func _Msg_UpdateSpotMarket_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(MsgUpdateSpotMarket) if err := dec(in); err != nil { @@ -8421,6 +8564,10 @@ var _Msg_serviceDesc = grpc.ServiceDesc{ MethodName: "UpdateParams", Handler: _Msg_UpdateParams_Handler, }, + { + MethodName: "UpdateSwapParams", + Handler: _Msg_UpdateSwapParams_Handler, + }, { MethodName: "UpdateSpotMarket", Handler: _Msg_UpdateSpotMarket_Handler, @@ -8732,17 +8879,80 @@ func (m *MsgUpdateDerivativeMarket) MarshalToSizedBuffer(dAtA []byte) (int, erro i-- dAtA[i] = 0x12 } - if len(m.Admin) > 0 { - i -= len(m.Admin) - copy(dAtA[i:], m.Admin) - i = encodeVarintTx(dAtA, i, uint64(len(m.Admin))) + if len(m.Admin) > 0 { + i -= len(m.Admin) + copy(dAtA[i:], m.Admin) + i = encodeVarintTx(dAtA, i, uint64(len(m.Admin))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgUpdateDerivativeMarketResponse) 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 *MsgUpdateDerivativeMarketResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgUpdateDerivativeMarketResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgUpdateParams) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgUpdateParams) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgUpdateParams) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + if len(m.Authority) > 0 { + i -= len(m.Authority) + copy(dAtA[i:], m.Authority) + i = encodeVarintTx(dAtA, i, uint64(len(m.Authority))) i-- dAtA[i] = 0xa } return len(dAtA) - i, nil } -func (m *MsgUpdateDerivativeMarketResponse) Marshal() (dAtA []byte, err error) { +func (m *MsgUpdateParamsResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -8752,12 +8962,12 @@ func (m *MsgUpdateDerivativeMarketResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *MsgUpdateDerivativeMarketResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *MsgUpdateParamsResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *MsgUpdateDerivativeMarketResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *MsgUpdateParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -8765,7 +8975,7 @@ func (m *MsgUpdateDerivativeMarketResponse) MarshalToSizedBuffer(dAtA []byte) (i return len(dAtA) - i, nil } -func (m *MsgUpdateParams) Marshal() (dAtA []byte, err error) { +func (m *MsgUpdateSwapParams) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -8775,18 +8985,18 @@ func (m *MsgUpdateParams) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *MsgUpdateParams) MarshalTo(dAtA []byte) (int, error) { +func (m *MsgUpdateSwapParams) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *MsgUpdateParams) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *MsgUpdateSwapParams) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l { - size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.SwapParams.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -8795,17 +9005,17 @@ func (m *MsgUpdateParams) MarshalToSizedBuffer(dAtA []byte) (int, error) { } i-- dAtA[i] = 0x12 - if len(m.Authority) > 0 { - i -= len(m.Authority) - copy(dAtA[i:], m.Authority) - i = encodeVarintTx(dAtA, i, uint64(len(m.Authority))) + 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 *MsgUpdateParamsResponse) Marshal() (dAtA []byte, err error) { +func (m *MsgUpdateSwapParamsResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -8815,12 +9025,12 @@ func (m *MsgUpdateParamsResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *MsgUpdateParamsResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *MsgUpdateSwapParamsResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *MsgUpdateParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *MsgUpdateSwapParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -13976,6 +14186,13 @@ func (m *MsgLiquidateCrossMarginPool) MarshalToSizedBuffer(dAtA []byte) (int, er _ = i var l int _ = l + if len(m.RfqAction) > 0 { + i -= len(m.RfqAction) + copy(dAtA[i:], m.RfqAction) + i = encodeVarintTx(dAtA, i, uint64(len(m.RfqAction))) + i-- + dAtA[i] = 0x22 + } if len(m.QuoteDenom) > 0 { i -= len(m.QuoteDenom) copy(dAtA[i:], m.QuoteDenom) @@ -14141,6 +14358,30 @@ func (m *MsgUpdateParamsResponse) Size() (n int) { return n } +func (m *MsgUpdateSwapParams) 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.SwapParams.Size() + n += 1 + l + sovTx(uint64(l)) + return n +} + +func (m *MsgUpdateSwapParamsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + func (m *MsgDeposit) Size() (n int) { if m == nil { return 0 @@ -16299,6 +16540,10 @@ func (m *MsgLiquidateCrossMarginPool) Size() (n int) { if l > 0 { n += 1 + l + sovTx(uint64(l)) } + l = len(m.RfqAction) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } return n } @@ -17232,6 +17477,171 @@ func (m *MsgUpdateParamsResponse) Unmarshal(dAtA []byte) error { } return nil } +func (m *MsgUpdateSwapParams) 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: MsgUpdateSwapParams: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgUpdateSwapParams: 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 SwapParams", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.SwapParams.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 *MsgUpdateSwapParamsResponse) 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: MsgUpdateSwapParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgUpdateSwapParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *MsgDeposit) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -32341,6 +32751,38 @@ func (m *MsgLiquidateCrossMarginPool) Unmarshal(dAtA []byte) error { } m.QuoteDenom = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RfqAction", 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.RfqAction = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTx(dAtA[iNdEx:]) diff --git a/chain/exchange/types/wasm_privileged_action.go b/chain/exchange/types/wasm_privileged_action.go index 8602f4bb3..a0caf2ad4 100644 --- a/chain/exchange/types/wasm_privileged_action.go +++ b/chain/exchange/types/wasm_privileged_action.go @@ -1,7 +1,9 @@ package types import ( + "bytes" "encoding/json" + "io" "cosmossdk.io/errors" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" @@ -50,3 +52,77 @@ func ParseRequest(data []byte) (InjectiveAction, error) { return nil, errors.Wrap(sdkerrors.ErrUnknownRequest, "unknown variant of InjectiveAction") } + +// ParseRequestStrict parses a privileged action without accepting unknown fields, +// trailing JSON values, or multiple action variants. The ordinary Wasm privileged +// execution path retains ParseRequest's compatibility behavior; consensus-authenticated +// RFQ liquidation payloads use this stricter boundary instead. +func ParseRequestStrict(data []byte) (InjectiveAction, error) { + if len(data) == 0 || string(data) == "null" { + return nil, nil + } + + request, err := decodePrivilegedActionStrict(data) + if err != nil { + return nil, err + } + + if request.SyntheticTrade != nil { + if err := request.SyntheticTrade.ValidateBasic(); err != nil { + return request.SyntheticTrade, errors.Wrap(err, "invalid synthetic trade request") + } + return request.SyntheticTrade, nil + } + if request.PositionTransfer != nil { + if err := request.PositionTransfer.ValidateBasic(); err != nil { + return request.PositionTransfer, errors.Wrap(err, "invalid position transfer request") + } + return request.PositionTransfer, nil + } + + return nil, errors.Wrap(sdkerrors.ErrUnknownRequest, "unknown variant of InjectiveAction") +} + +// ParseRFQLiquidationRequestStrict parses the dedicated RFQ liquidation action. +// Unlike ordinary synthetic trades, the isolated provider margin may cover the +// full maximum leg notional; all other strict JSON and scalar bounds remain. +func ParseRFQLiquidationRequestStrict(data []byte) (*SyntheticTradeAction, error) { + if len(data) == 0 || string(data) == "null" { + return nil, errors.Wrap(sdkerrors.ErrUnknownRequest, "RFQ liquidation action is empty") + } + + request, err := decodePrivilegedActionStrict(data) + if err != nil { + return nil, err + } + if request.SyntheticTrade == nil { + return nil, errors.Wrap(sdkerrors.ErrUnknownRequest, "RFQ liquidation requires a synthetic trade action") + } + if err := request.SyntheticTrade.ValidateRFQLiquidationBasic(); err != nil { + return request.SyntheticTrade, errors.Wrap(err, "invalid RFQ liquidation synthetic trade request") + } + return request.SyntheticTrade, nil +} + +func decodePrivilegedActionStrict(data []byte) (PrivilegedAction, error) { + decoder := json.NewDecoder(bytes.NewReader(data)) + decoder.DisallowUnknownFields() + + var request PrivilegedAction + if err := decoder.Decode(&request); err != nil { + return PrivilegedAction{}, errors.Wrap(err, "failed to parse exchange action request") + } + + var trailing any + if err := decoder.Decode(&trailing); err != io.EOF { + if err == nil { + return PrivilegedAction{}, errors.Wrap(sdkerrors.ErrUnknownRequest, "multiple exchange action requests") + } + return PrivilegedAction{}, errors.Wrap(err, "failed to parse trailing exchange action request data") + } + + if request.SyntheticTrade != nil && request.PositionTransfer != nil { + return PrivilegedAction{}, errors.Wrap(sdkerrors.ErrUnknownRequest, "multiple variants of InjectiveAction") + } + return request, nil +} diff --git a/chain/exchange/types/wasm_trades.go b/chain/exchange/types/wasm_trades.go index 4a3fd8b84..b83a642c2 100644 --- a/chain/exchange/types/wasm_trades.go +++ b/chain/exchange/types/wasm_trades.go @@ -1,6 +1,9 @@ package types import ( + "math/big" + + "cosmossdk.io/errors" "cosmossdk.io/math" "github.com/ethereum/go-ethereum/common" ) @@ -12,11 +15,19 @@ type PositionTransfer struct { Quantity math.LegacyDec `json:"quantity"` } +// ValidateBasic is version-agnostic, unlike SyntheticTrade.Validate: there is no v1->v2 conversion +// for a position transfer, and a position quantity has the same representation in both versions +// because DerivativeMarket.QuantityFromChainFormat scales by 10^0. The cap means the same thing +// wherever it is checked. func (p *PositionTransfer) ValidateBasic() error { if p.Quantity.IsNil() || !p.Quantity.IsPositive() { return ErrInvalidQuantity } + if p.Quantity.GT(MaxOrderQuantity) { + return errors.Wrap(ErrInvalidQuantity, p.Quantity.String()) + } + if p.SourceSubaccountID == p.DestinationSubaccountID { return ErrBadSubaccountID } @@ -35,12 +46,18 @@ func (a *SyntheticTradeAction) ValidateBasic() error { } for _, t := range a.UserTrades { + if t == nil { + return ErrInvalidTrade + } if err := t.Validate(); err != nil { return err } } for _, t := range a.ContractTrades { + if t == nil { + return ErrInvalidTrade + } if err := t.Validate(); err != nil { return err } @@ -49,6 +66,73 @@ func (a *SyntheticTradeAction) ValidateBasic() error { return nil } +// ValidateRFQLiquidationBasic applies the dedicated full-pool liquidation wire +// contract. Target legs are pure closes with zero supplied margin; provider legs +// may carry enough isolated collateral for the maximum representable notional. +func (a *SyntheticTradeAction) ValidateRFQLiquidationBasic() error { + if a == nil || len(a.UserTrades) == 0 || len(a.UserTrades) != len(a.ContractTrades) { + return ErrInvalidTrade + } + + for _, trade := range a.UserTrades { + if err := validateRFQLiquidationTrade(trade, true); err != nil { + return err + } + } + for _, trade := range a.ContractTrades { + if err := validateRFQLiquidationTrade(trade, false); err != nil { + return err + } + } + + return a.validateTrades() +} + +func validateRFQLiquidationTrade(trade *SyntheticTrade, isTarget bool) error { + if trade == nil { + return ErrInvalidTrade + } + if trade.Quantity.IsNil() || !trade.Quantity.IsPositive() { + return ErrInvalidQuantity + } + if trade.Quantity.GT(MaxOrderQuantity) { + return errors.Wrap(ErrInvalidQuantity, trade.Quantity.String()) + } + if trade.Price.IsNil() || !trade.Price.IsPositive() { + return ErrInvalidPrice + } + if !rfqLiquidationTradeNotionalRepresentable(trade.Quantity, trade.Price) { + return errors.Wrap(ErrInvalidTrade, "RFQ liquidation trade notional cannot be represented") + } + if trade.Margin.IsNil() || trade.Margin.IsNegative() { + return ErrInvalidMargin + } + if isTarget && !trade.Margin.IsZero() { + return errors.Wrap(ErrInvalidMargin, "RFQ liquidation target trade margin must be zero") + } + return nil +} + +// rfqLiquidationTradeNotionalRepresentable mirrors LegacyDec.Mul's banker rounding on +// arbitrary-precision integers, avoiding the panic that the multiplication itself emits +// outside LegacyDec's range. RFQ prices are deliberately not capped at MaxOrderPrice: +// oracle and funding moves can put a protocol-required liquidation price above the +// ordinary public-order domain. +func rfqLiquidationTradeNotionalRepresentable(quantity, price math.LegacyDec) bool { + if quantity.IsNil() || price.IsNil() { + return false + } + precision := math.LegacyOneDec().BigInt() + product := new(big.Int).Mul(quantity.BigInt(), price.BigInt()) + quotient, remainder := new(big.Int), new(big.Int) + quotient.QuoRem(product, precision, remainder) + halfPrecision := new(big.Int).Quo(precision, big.NewInt(2)) + if cmp := remainder.Cmp(halfPrecision); cmp > 0 || cmp == 0 && quotient.Bit(0) == 1 { + quotient.Add(quotient, big.NewInt(1)) + } + return quotient.Cmp(legacyDecUpperLimit) < 0 +} + type SyntheticTrade struct { MarketID common.Hash `json:"market_id"` SubaccountID common.Hash `json:"subaccount_id"` @@ -58,19 +142,51 @@ type SyntheticTrade struct { Margin math.LegacyDec `json:"margin"` } +// Validate bounds each field the way OrderInfo.ValidateBasic bounds a regular order. The upper +// bounds matter as much as the sign checks: these values come from a contract's reply bytes rather +// than from a signed message, and LegacyDec accepts anything up to 2^256 (~1.16e77). Left +// unbounded, a price/quantity pair reaches DerivativeOrder.CheckNotional and panics with +// "Int overflow" instead of being rejected. +// +// The caps are applied twice, and under ExchangeTypeVersionV1 the two passes see different units. +// ParseRequest runs this on the raw chain-format reply; ConvertSyntheticTradesV1ToV2 then rescales +// price and margin by 1/10^QuoteDecimals, and HandleSyntheticTradeAction runs it again on the +// converted values. The first pass is therefore stricter for v1 by exactly that factor. +// +// That asymmetry is deliberate, and it is the same arrangement v1 orders already use: the raw v1 +// message is bounded by OrderInfo.ValidateBasic (msgs.go), whose own comment notes the constants +// are a deliberately loose ceiling on a scaled value because stateless validation cannot know the +// market's scale factor, and DerivativesV1MsgServer then re-applies them to the converted v2 order +// (msg_server_derivative_v1.go). +// +// Neither pass subsumes the other. Dividing cannot push a value back over a cap, so the second +// pass never catches an oversized value the first missed — but it does catch a raw price small +// enough to round to zero on conversion, which the first pass sees as positive. func (t *SyntheticTrade) Validate() error { if t.Quantity.IsNil() || !t.Quantity.IsPositive() { return ErrInvalidQuantity } + if t.Quantity.GT(MaxOrderQuantity) { + return errors.Wrap(ErrInvalidQuantity, t.Quantity.String()) + } + if t.Price.IsNil() || !t.Price.IsPositive() { return ErrInvalidPrice } + if t.Price.GT(MaxOrderPrice) { + return errors.Wrap(ErrInvalidPrice, t.Price.String()) + } + if t.Margin.IsNil() || t.Margin.IsNegative() { return ErrInvalidMargin } + if t.Margin.GT(MaxOrderMargin) { + return errors.Wrap(ErrTooMuchOrderMargin, t.Margin.String()) + } + return nil } diff --git a/injective_data/chain_messages_list.json b/injective_data/chain_messages_list.json index 660bce1f7..56232fa15 100644 --- a/injective_data/chain_messages_list.json +++ b/injective_data/chain_messages_list.json @@ -116,6 +116,7 @@ "injective.exchange.v2.MsgUpdateParams", "injective.exchange.v2.MsgUpdateSpotMarket", "injective.exchange.v2.MsgUpdateSubaccountRiskProfile", + "injective.exchange.v2.MsgUpdateSwapParams", "injective.exchange.v2.MsgWithdraw", "injective.exchange.v2.OrderData", "injective.exchange.v2.SpotMarketOrderResults", diff --git a/proto/injective/exchange/v2/events.proto b/proto/injective/exchange/v2/events.proto index 761c44748..cc4782a22 100644 --- a/proto/injective/exchange/v2/events.proto +++ b/proto/injective/exchange/v2/events.proto @@ -17,6 +17,56 @@ message EventBatchSpotExecution { repeated TradeLog trades = 4; } +message EventSwapExecuted { + string caller = 1; + string recipient = 2; + string input_denom = 3; + // input_amount is in chain format (token native decimals) + string input_amount = 4 [ + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false + ]; + string output_denom = 5; + // output_amount is in chain format (token native decimals) + string output_amount = 6 [ + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false + ]; + repeated SwapHopExecution hops = 7; + // spent_amount is the input actually debited in chain format; input_amount + // minus spent_amount is the refunded remainder + string spent_amount = 8 [ + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false + ]; +} + +message EventSwapParamsUpdated { + // sender is the governance authority or exchange admin that made the change + string sender = 1; + SwapParams swap_params = 2 [ (gogoproto.nullable) = false ]; +} + +message SwapHopExecution { + string market_id = 1; + bool is_buy = 2; + // quantity is the base-asset fill quantity (human readable) + string quantity = 3 [ + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false + ]; + // price is the clearing price (human readable) + string price = 4 [ + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false + ]; + // fee is the quote-denom trading fee (human readable) + string fee = 5 [ + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false + ]; +} + message EventBatchDerivativeExecution { string market_id = 1; bool is_buy = 2; diff --git a/proto/injective/exchange/v2/exchange.proto b/proto/injective/exchange/v2/exchange.proto index 49e4c1ea6..e7d9b8299 100644 --- a/proto/injective/exchange/v2/exchange.proto +++ b/proto/injective/exchange/v2/exchange.proto @@ -261,6 +261,20 @@ message Params { // cross_margin_params groups all cross-margin related parameters. CrossMarginParams cross_margin_params = 39 [ (gogoproto.nullable) = false ]; + + // swap_params groups the native spot swap configuration. + SwapParams swap_params = 40 [ (gogoproto.nullable) = false ]; +} + +message SwapParams { + option (gogoproto.equal) = true; + + // enabled is the global switch for the native spot swap execution path. + bool enabled = 1; + + // allowed_markets is the strict allowlist of spot market IDs that swap + // routes may traverse. An empty list means no markets are swappable. + repeated string allowed_markets = 2; } message CrossMarginParams { @@ -294,55 +308,38 @@ message CrossMarginParams { // eligible for cross margin. bool expiry_enabled = 5; - // max_active_derivative_markets_per_pool defines the maximum number of - // active derivative markets (positions or orders) a cross-margin - // subaccount may have within a single quote-denom pool. + // max_active_derivative_markets_per_pool is an optional additional admission + // cap when a cross-margin subaccount introduces a new derivative carrier in a + // quote-denom pool. Lowering it does not invalidate grandfathered carriers or + // prohibit activity in an already-counted market. uint32 max_active_derivative_markets_per_pool = 6; - // emergency_paused defines whether cross margin is in emergency pause - // mode. When true: - // - User-submitted cross-margin orders (derivative + spot, limit / market - // / conditional, reduce-only included) are rejected at validation. - // - Paused resting makers are inert: every matcher and TOB scan skips - // them uniformly, including against system-generated liquidation - // taker orders. - // - Liquidation of paused pools is still permitted; system taker orders - // close positions against non-paused liquidity or defer to settlement. - // - Collateral-decreasing operations (withdrawals, transfers, margin - // decrease) remain subject to the marker-aware admission floor with - // positive UPnL stripped first, NOT to a flat isolated-margin - // maintenance level. + // emergency_paused defines whether new cross-margin activation and + // risk-increasing activity are paused. Risk reduction, order cancellation, + // authenticated liquidation, and scheduled settlement remain available. bool emergency_paused = 7; - // backstop_margin_ratio defines the target health buffer above - // maintenance margin for graduated liquidation. Liquidation stops when - // EquityLiquidation >= MM * (1 + ratio). + // backstop_margin_ratio is retained for legacy compatibility paths. The + // configured RFQ liquidation path always requires and closes the full pool. string backstop_margin_ratio = 8 [ (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", (gogoproto.nullable) = false ]; - // partial_liquidation_ratio is the fraction of the shortfall to target - // per liquidation tx. 1.0 = close enough to fully restore health; <1.0 - // = close only a fraction per tx. + // partial_liquidation_ratio is retained for legacy compatibility paths. It + // does not permit a partial configured-RFQ liquidation. string partial_liquidation_ratio = 9 [ (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", (gogoproto.nullable) = false ]; - // liquidation_cooldown_blocks is the minimum number of blocks between - // successive partial liquidations on the same cross-margin pool. + // liquidation_cooldown_blocks is retained for legacy compatibility paths. + // The configured RFQ liquidation eligibility check is not cooldown-gated. uint64 liquidation_cooldown_blocks = 10; - // max_cross_margin_spot_orders_per_subaccount_per_denom caps the number of - // open spot orders (resting limit + transient limit + transient market) - // that a cross-margin-mode subaccount may hold for any single locking - // denom. The cap protocol-bounds spot cancel-first work performed during - // cross-margin pool liquidation so the validator-work amplifier under fixed - // gas is bounded by a numeric protocol limit rather than only by fixed - // tx-level pricing. Enforcement - // applies only when the effective subaccount risk profile is RISK_MODE_CROSS; - // isolated-mode subaccounts are unaffected. + // max_cross_margin_spot_orders_per_subaccount_per_denom is an additional, + // possibly tighter, spot-order admission cap for each cross-margin + // subaccount and locking denom. uint32 max_cross_margin_spot_orders_per_subaccount_per_denom = 13; // util_ratio defines the multiplier applied to the cash-floor admission @@ -353,6 +350,12 @@ message CrossMarginParams { (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", (gogoproto.nullable) = false ]; + + // liquidation_rfq_contract_address is the bounded set of RFQ router contracts + // permitted to settle cross-margin liquidations. An empty list disables + // cross-margin activation and requires cross_margin_enabled_quote_denoms to be + // empty. + repeated string liquidation_rfq_contract_address = 15; } message NextFundingTimestamp { int64 next_timestamp = 1; } diff --git a/proto/injective/exchange/v2/query.proto b/proto/injective/exchange/v2/query.proto index 08212e34a..807b86aaa 100644 --- a/proto/injective/exchange/v2/query.proto +++ b/proto/injective/exchange/v2/query.proto @@ -168,6 +168,18 @@ service Query { } // Retrieves a spot market's mid-price + // Projects the output of a spot swap for an exact input amount + rpc SpotSwapOutput(QuerySpotSwapOutputRequest) + returns (QuerySpotSwapOutputResponse) { + option (google.api.http).get = "/injective/exchange/v2/spot/swapOutput"; + } + + // Projects the input required for a spot swap to yield an exact output amount + rpc SpotSwapInput(QuerySpotSwapInputRequest) + returns (QuerySpotSwapInputResponse) { + option (google.api.http).get = "/injective/exchange/v2/spot/swapInput"; + } + rpc SpotMidPriceAndTOB(QuerySpotMidPriceAndTOBRequest) returns (QuerySpotMidPriceAndTOBResponse) { option (google.api.http).get = @@ -827,6 +839,62 @@ message QueryAccountAddressSpotOrdersResponse { repeated TrimmedSpotLimitOrder orders = 1; } +// QuerySpotSwapOutputRequest is the request type for the +// Query/SpotSwapOutput RPC method. +message QuerySpotSwapOutputRequest { + // Market ID of the spot market to swap on + string market_id = 1; + // Denom of the input token; the swap direction is derived from which side + // of the market it matches + string input_denom = 2; + // Exact input amount in chain format + string amount_in = 3; +} + +// QuerySpotSwapOutputResponse is the response type for the +// Query/SpotSwapOutput RPC method. +message QuerySpotSwapOutputResponse { + string output_denom = 1; + // Projected output amount in chain format + string output_amount = 2 [ + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false + ]; + // Projected input actually spent in chain format; amount_in minus this is + // the projected refund + string spent_amount = 3 [ + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false + ]; +} + +// QuerySpotSwapInputRequest is the request type for the +// Query/SpotSwapInput RPC method. +message QuerySpotSwapInputRequest { + // Market ID of the spot market to swap on + string market_id = 1; + // Denom of the desired output token; the swap direction is derived from + // which side of the market it matches + string output_denom = 2; + // Desired exact output amount in chain format + string amount_out = 3; +} + +// QuerySpotSwapInputResponse is the response type for the +// Query/SpotSwapInput RPC method. +message QuerySpotSwapInputResponse { + string input_denom = 1; + // Input amount in chain format projected to achieve at least amount_out on + // the current book; conservatively rounded up. The projection walks + // aggregated levels, which cannot exclude paused or frozen maker liquidity + // resting at executable prices, so pair the swap with minOut = amount_out + // rather than relying on the projection alone + string input_amount = 2 [ + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false + ]; +} + // QuerySpotMidPriceAndTOBRequest is the request type for the // Query/SpotMidPriceAndTOB RPC method. message QuerySpotMidPriceAndTOBRequest { diff --git a/proto/injective/exchange/v2/tx.proto b/proto/injective/exchange/v2/tx.proto index 0d281ca81..208cffd03 100644 --- a/proto/injective/exchange/v2/tx.proto +++ b/proto/injective/exchange/v2/tx.proto @@ -165,6 +165,9 @@ service Msg { rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse); + rpc UpdateSwapParams(MsgUpdateSwapParams) + returns (MsgUpdateSwapParamsResponse); + // UpdateSpotMarket modifies certain spot market fields (admin only) rpc UpdateSpotMarket(MsgUpdateSpotMarket) returns (MsgUpdateSpotMarketResponse); @@ -368,6 +371,22 @@ message MsgUpdateParams { message MsgUpdateParamsResponse {} +// MsgUpdateSwapParams updates only the swap parameter group. It is callable by +// the governance authority or any exchange admin, providing an immediate +// operational path for pausing swaps or maintaining the market allowlist. +message MsgUpdateSwapParams { + option (amino.name) = "exchange/MsgUpdateSwapParams"; + option (cosmos.msg.v1.signer) = "sender"; + + // sender is the governance authority or an exchange admin. + string sender = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + + // swap_params fully replaces the current swap parameter group. + SwapParams swap_params = 2 [ (gogoproto.nullable) = false ]; +} + +message MsgUpdateSwapParamsResponse {} + // MsgDeposit defines a SDK message for transferring coins from the sender's // bank balance into the subaccount's exchange deposits message MsgDeposit { @@ -1719,9 +1738,9 @@ message MsgActivatePostOnlyMode { // MsgActivatePostOnlyMode message MsgActivatePostOnlyModeResponse {} -// MsgLiquidateCrossMarginPool performs graduated selective liquidation on a -// cross-margin quote-denom pool, canceling pool orders first and then closing -// only enough positions to restore health according to the configured target. +// MsgLiquidateCrossMarginPool liquidates a cross-margin quote-denom pool. The +// legacy mode performs graduated public-book liquidation; RFQ-only mode accepts +// an authenticated atomic full-pool close from the configured contract. message MsgLiquidateCrossMarginPool { option (amino.name) = "exchange/MsgLiquidateCrossMarginPool"; option (cosmos.msg.v1.signer) = "sender"; @@ -1732,6 +1751,10 @@ message MsgLiquidateCrossMarginPool { string subaccount_id = 2; // identifies which cross-margin pool (by quote denom) string quote_denom = 3; + // rfq_action is the synthetic-trade action returned by the configured RFQ + // contract. It is required for an active-market RFQ liquidation and may be + // empty when an already-paused liquidatable pool is routed to settlement. + string rfq_action = 4; } // MsgLiquidateCrossMarginPoolResponse defines the From 2673025d473a2aade76229896a673eafd4bb87b7 Mon Sep 17 00:00:00 2001 From: ze97286 Date: Sat, 5 Sep 2026 08:24:22 +0100 Subject: [PATCH 3/3] chore: re-sync peggy types after ic-1087 merge --- chain/peggy/types/msgs.pb.go | 373 +++++++++++++--------- chain/peggy/types/rate_limit.pb.go | 118 ++++--- proto/injective/peggy/v1/msgs.proto | 17 +- proto/injective/peggy/v1/rate_limit.proto | 10 +- 4 files changed, 329 insertions(+), 189 deletions(-) diff --git a/chain/peggy/types/msgs.pb.go b/chain/peggy/types/msgs.pb.go index 578ae397f..27ca801c9 100644 --- a/chain/peggy/types/msgs.pb.go +++ b/chain/peggy/types/msgs.pb.go @@ -7,6 +7,7 @@ import ( context "context" cosmossdk_io_math "cosmossdk.io/math" fmt "fmt" + types2 "github.com/InjectiveLabs/sdk-go/chain/oracle/types" _ "github.com/cosmos/cosmos-proto" types1 "github.com/cosmos/cosmos-sdk/codec/types" types "github.com/cosmos/cosmos-sdk/types" @@ -1591,7 +1592,8 @@ type MsgCreateRateLimit struct { TokenAddress string `protobuf:"bytes,2,opt,name=token_address,json=tokenAddress,proto3" json:"token_address,omitempty"` // decimals of the ERC20 token TokenDecimals uint32 `protobuf:"varint,3,opt,name=token_decimals,json=tokenDecimals,proto3" json:"token_decimals,omitempty"` - // a Pyth-specific ID used to obtain USD price of the ERC20 token + // unique ID used to obtain the notional USD value of the ERC20 token from + // oracle TokenPriceId string `protobuf:"bytes,4,opt,name=token_price_id,json=tokenPriceId,proto3" json:"token_price_id,omitempty"` // the notional USD limit imposed on all outgoing traffic (per token) RateLimitUsd cosmossdk_io_math.LegacyDec `protobuf:"bytes,5,opt,name=rate_limit_usd,json=rateLimitUsd,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"rate_limit_usd"` @@ -1600,6 +1602,9 @@ type MsgCreateRateLimit struct { // length of the sliding window in which inbound (outbound) traffic is // measured RateLimitWindow uint64 `protobuf:"varint,7,opt,name=rate_limit_window,json=rateLimitWindow,proto3" json:"rate_limit_window,omitempty"` + // token_oracle_type is used to obtain the USD price of the ERC20 token (in + // relation with token_price_id) + TokenOracleType types2.OracleType `protobuf:"varint,8,opt,name=token_oracle_type,json=tokenOracleType,proto3,enum=injective.oracle.v1beta1.OracleType" json:"token_oracle_type,omitempty"` } func (m *MsgCreateRateLimit) Reset() { *m = MsgCreateRateLimit{} } @@ -1670,6 +1675,13 @@ func (m *MsgCreateRateLimit) GetRateLimitWindow() uint64 { return 0 } +func (m *MsgCreateRateLimit) GetTokenOracleType() types2.OracleType { + if m != nil { + return m.TokenOracleType + } + return types2.OracleType_Unspecified +} + type MsgCreateRateLimitResponse struct { } @@ -1711,12 +1723,16 @@ type MsgUpdateRateLimit struct { Authority string `protobuf:"bytes,1,opt,name=authority,proto3" json:"authority,omitempty"` // token_address is the address of rate limited token TokenAddress string `protobuf:"bytes,2,opt,name=token_address,json=tokenAddress,proto3" json:"token_address,omitempty"` - // new_token_price_id is the new Pyth price ID of the rate limited token + // unique ID used to obtain the notional USD value of the ERC20 token from + // oracle NewTokenPriceId string `protobuf:"bytes,3,opt,name=new_token_price_id,json=newTokenPriceId,proto3" json:"new_token_price_id,omitempty"` // new_rate_limit_usd is the new notional limit (on withdrawals) in USD NewRateLimitUsd cosmossdk_io_math.LegacyDec `protobuf:"bytes,4,opt,name=new_rate_limit_usd,json=newRateLimitUsd,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"new_rate_limit_usd"` // new_rate_limit_window is the new length of the sliding window NewRateLimitWindow uint64 `protobuf:"varint,5,opt,name=new_rate_limit_window,json=newRateLimitWindow,proto3" json:"new_rate_limit_window,omitempty"` + // new_token_oracle_type is used to obtain the USD price of the ERC20 token + // (in relation with token_price_id) + NewTokenOracleType types2.OracleType `protobuf:"varint,6,opt,name=new_token_oracle_type,json=newTokenOracleType,proto3,enum=injective.oracle.v1beta1.OracleType" json:"new_token_oracle_type,omitempty"` } func (m *MsgUpdateRateLimit) Reset() { *m = MsgUpdateRateLimit{} } @@ -1780,6 +1796,13 @@ func (m *MsgUpdateRateLimit) GetNewRateLimitWindow() uint64 { return 0 } +func (m *MsgUpdateRateLimit) GetNewTokenOracleType() types2.OracleType { + if m != nil { + return m.NewTokenOracleType + } + return types2.OracleType_Unspecified +} + type MsgUpdateRateLimitResponse struct { } @@ -1946,140 +1969,144 @@ func init() { func init() { proto.RegisterFile("injective/peggy/v1/msgs.proto", fileDescriptor_751daa04abed7ef4) } var fileDescriptor_751daa04abed7ef4 = []byte{ - // 2117 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x59, 0xcd, 0x6f, 0x1c, 0x49, - 0x15, 0x4f, 0x7b, 0xc6, 0x4e, 0x5c, 0x63, 0xc7, 0xa4, 0xd7, 0x49, 0x26, 0x9d, 0xc4, 0x8e, 0xdb, - 0xf9, 0xf0, 0x3a, 0x49, 0x4f, 0xec, 0xc0, 0x2e, 0x6b, 0x09, 0xa4, 0x8c, 0x1d, 0x84, 0xd9, 0x78, - 0x37, 0x6a, 0x27, 0xbb, 0x12, 0x97, 0xa6, 0xa6, 0xfb, 0xa5, 0xa7, 0xf1, 0x74, 0xd7, 0xd0, 0x5d, - 0x33, 0xc6, 0x07, 0xa4, 0x65, 0x6f, 0x2c, 0x87, 0x45, 0xe2, 0x80, 0x40, 0x82, 0x0b, 0x5c, 0x57, - 0x8a, 0x44, 0x2e, 0x70, 0x47, 0x5a, 0xed, 0x29, 0x82, 0x0b, 0x42, 0x28, 0x82, 0x04, 0x29, 0x7f, - 0x06, 0xa8, 0xab, 0xaa, 0x6b, 0xba, 0x7b, 0xba, 0xc7, 0x93, 0x60, 0xe5, 0x62, 0x4d, 0xbd, 0x7a, - 0x55, 0xf5, 0x7b, 0xdf, 0xef, 0xb5, 0xd1, 0x45, 0x2f, 0xf8, 0x21, 0xd8, 0xd4, 0xeb, 0x43, 0xa3, - 0x0b, 0xae, 0x7b, 0xd0, 0xe8, 0xaf, 0x35, 0xfc, 0xc8, 0x8d, 0x8c, 0x6e, 0x48, 0x28, 0x51, 0x55, - 0xb9, 0x6d, 0xb0, 0x6d, 0xa3, 0xbf, 0xa6, 0xcd, 0xbb, 0xc4, 0x25, 0x6c, 0xbb, 0x11, 0xff, 0xe2, - 0x9c, 0xda, 0x05, 0x97, 0x10, 0xb7, 0x03, 0x0d, 0xdc, 0xf5, 0x1a, 0x38, 0x08, 0x08, 0xc5, 0xd4, - 0x23, 0x81, 0xb8, 0x47, 0x3b, 0x27, 0x76, 0xd9, 0xaa, 0xd5, 0x7b, 0xd4, 0xc0, 0xc1, 0x81, 0xd8, - 0x3a, 0x85, 0x7d, 0x2f, 0x20, 0x0d, 0xf6, 0x57, 0x90, 0x16, 0x6c, 0x12, 0xf9, 0x24, 0x6a, 0xb4, - 0x70, 0x04, 0x8d, 0xfe, 0x5a, 0x0b, 0x28, 0x5e, 0x6b, 0xd8, 0xc4, 0x0b, 0xc4, 0xfe, 0x59, 0xb1, - 0xef, 0x47, 0xae, 0xc0, 0x9b, 0x3c, 0xc3, 0x37, 0x2c, 0x8e, 0x8e, 0x2f, 0x92, 0x3b, 0x0b, 0x04, - 0xa5, 0x07, 0x5d, 0x48, 0xf6, 0x17, 0x0b, 0xf6, 0xbb, 0x38, 0xc4, 0x7e, 0xc2, 0xb0, 0x5c, 0xc0, - 0x10, 0x62, 0x0a, 0x56, 0xc7, 0xf3, 0x3d, 0xca, 0x99, 0xf4, 0x2f, 0x14, 0x74, 0x7e, 0x27, 0x72, - 0x77, 0x81, 0x7e, 0x18, 0xda, 0x6d, 0x88, 0x68, 0x88, 0x29, 0x09, 0xef, 0x38, 0x4e, 0x08, 0x51, - 0x04, 0x91, 0x7a, 0x06, 0x4d, 0x45, 0x10, 0x38, 0x10, 0xd6, 0x95, 0x4b, 0xca, 0xca, 0xb4, 0x29, - 0x56, 0xaa, 0x8e, 0x66, 0x48, 0xea, 0x40, 0x7d, 0x82, 0xed, 0x66, 0x68, 0xea, 0x22, 0xaa, 0x01, - 0x6d, 0x5b, 0x98, 0x5f, 0x56, 0xaf, 0x30, 0x16, 0x04, 0xb4, 0x2d, 0xae, 0xdf, 0x58, 0xfb, 0xf4, - 0xe5, 0xe3, 0x55, 0x71, 0xe3, 0x67, 0x2f, 0x1f, 0xaf, 0x2e, 0x71, 0x9c, 0x23, 0xf0, 0xe8, 0x57, - 0xd0, 0xf2, 0x88, 0x6d, 0x13, 0xa2, 0x2e, 0x09, 0x22, 0xd0, 0xff, 0xa4, 0xa0, 0xaf, 0xed, 0x44, - 0xee, 0x47, 0xb8, 0x13, 0x01, 0xdd, 0x24, 0xc1, 0x23, 0x2f, 0xf4, 0xd5, 0x79, 0x34, 0x19, 0x90, - 0xc0, 0x06, 0x26, 0x4a, 0xd5, 0xe4, 0x8b, 0x23, 0x91, 0x44, 0xbd, 0x80, 0xa6, 0x23, 0xcf, 0x0d, - 0x30, 0xed, 0x85, 0x50, 0xaf, 0xb2, 0xed, 0x01, 0x61, 0xe3, 0x46, 0x2c, 0x67, 0xe6, 0xc6, 0x58, - 0xda, 0x33, 0x52, 0xda, 0x0c, 0x4c, 0x5d, 0x43, 0xf5, 0x3c, 0x4d, 0xca, 0xf5, 0x4c, 0x41, 0x33, - 0x4c, 0xfe, 0xc0, 0x79, 0x40, 0xee, 0xd2, 0x76, 0xa9, 0x7d, 0xce, 0xa1, 0x13, 0x31, 0x62, 0x07, - 0x22, 0x2a, 0x24, 0x3a, 0x0e, 0xb4, 0xbd, 0x05, 0x11, 0x55, 0xdf, 0x45, 0x53, 0xd8, 0x27, 0xbd, - 0x80, 0x32, 0x39, 0x6a, 0xeb, 0xe7, 0x0c, 0xe1, 0x77, 0xb1, 0xf7, 0x1a, 0xc2, 0x7b, 0x8d, 0x4d, - 0xe2, 0x05, 0xcd, 0xea, 0x97, 0xcf, 0x16, 0x8f, 0x99, 0x82, 0x5d, 0xfd, 0x36, 0x42, 0xad, 0xd0, - 0x73, 0x5c, 0xb0, 0x1e, 0x01, 0x97, 0x72, 0x8c, 0xc3, 0xd3, 0xfc, 0xc8, 0x77, 0x00, 0x36, 0xf4, - 0x9c, 0xb9, 0xd5, 0x94, 0xb9, 0x85, 0x3c, 0xfa, 0x19, 0x34, 0x9f, 0x5e, 0x4b, 0xc1, 0x7f, 0x8c, - 0xe6, 0x76, 0x22, 0xd7, 0x84, 0x1f, 0xf5, 0x20, 0xa2, 0x4d, 0x4c, 0xed, 0xf6, 0x90, 0xe1, 0x94, - 0x02, 0xc3, 0xcd, 0xa3, 0x49, 0x07, 0x02, 0xe2, 0x0b, 0x1d, 0xf0, 0xc5, 0xc6, 0xf5, 0x42, 0x7b, - 0x9c, 0x96, 0x70, 0xd2, 0xcf, 0xe8, 0xe7, 0xd0, 0xd9, 0x1c, 0x49, 0x82, 0xfa, 0xa7, 0xc2, 0x50, - 0x09, 0x23, 0x71, 0x54, 0xc5, 0x4e, 0x76, 0x05, 0x9d, 0xa4, 0x64, 0x0f, 0x02, 0xcb, 0x26, 0x01, - 0x0d, 0xb1, 0x9d, 0x18, 0x65, 0x96, 0x51, 0x37, 0x05, 0x51, 0xbd, 0x88, 0x62, 0xa7, 0xb2, 0x62, - 0xcf, 0x81, 0x50, 0xb8, 0xd9, 0x34, 0xd0, 0xf6, 0x2e, 0x23, 0x0c, 0x49, 0x5c, 0x2d, 0x90, 0x38, - 0xe3, 0x89, 0x93, 0x79, 0x4f, 0x3c, 0x4c, 0xf2, 0xb4, 0x28, 0x42, 0xf2, 0x34, 0x49, 0x4a, 0xfe, - 0xb3, 0x0a, 0x93, 0x7c, 0x0b, 0xba, 0x24, 0xf2, 0xe8, 0x66, 0x07, 0x7b, 0x3e, 0x0b, 0x92, 0x3e, - 0x04, 0xd4, 0x4a, 0xcb, 0x8f, 0x18, 0xe9, 0x03, 0xa6, 0x84, 0x25, 0x34, 0xd3, 0xea, 0x10, 0x7b, - 0xcf, 0x6a, 0x83, 0xe7, 0xb6, 0xb9, 0x0a, 0xaa, 0x66, 0x8d, 0xd1, 0xbe, 0xcb, 0x48, 0x05, 0x7a, - 0xaa, 0x14, 0xe9, 0xe9, 0x1b, 0xd2, 0x85, 0x99, 0x0a, 0x9a, 0x17, 0x63, 0x57, 0xfb, 0xc7, 0xb3, - 0xc5, 0xd3, 0xdc, 0x19, 0x23, 0x67, 0xcf, 0xf0, 0x48, 0xc3, 0xc7, 0xb4, 0x6d, 0x6c, 0x07, 0x54, - 0x3a, 0xf0, 0x35, 0x34, 0x07, 0xb4, 0x0d, 0x21, 0xf4, 0x7c, 0x4b, 0x44, 0x0d, 0xd7, 0xd0, 0xc9, - 0x84, 0xbc, 0xcb, 0xa3, 0xe7, 0x1a, 0x9a, 0x13, 0x89, 0x39, 0x04, 0x1b, 0xbc, 0x3e, 0x84, 0xf5, - 0x29, 0xce, 0xc8, 0xc9, 0xa6, 0xa0, 0x0e, 0x59, 0xe4, 0x78, 0x81, 0x45, 0x54, 0x54, 0x75, 0x30, - 0xc5, 0xf5, 0x13, 0x6c, 0x8f, 0xfd, 0xde, 0xf8, 0xde, 0x57, 0x4f, 0x6e, 0x9e, 0x4f, 0x0a, 0x14, - 0x8f, 0x99, 0xbb, 0x02, 0x02, 0x53, 0xe6, 0x21, 0x66, 0x4a, 0xeb, 0x5d, 0x98, 0x29, 0x4d, 0x92, - 0x66, 0xfa, 0x7c, 0x82, 0xa5, 0xc1, 0x8f, 0x3d, 0xda, 0x76, 0x42, 0xbc, 0x7f, 0x74, 0x76, 0x5a, - 0x44, 0xb5, 0x56, 0xec, 0x10, 0xe2, 0x8e, 0x0a, 0xbf, 0x83, 0x91, 0x3e, 0x28, 0x71, 0xf8, 0x6a, - 0x91, 0x21, 0xf3, 0xfa, 0x9b, 0x1c, 0xd6, 0xdf, 0xc6, 0xfb, 0xaf, 0xa3, 0xab, 0x41, 0x72, 0xcd, - 0x08, 0x2f, 0x92, 0x6b, 0x86, 0x26, 0xb5, 0xf5, 0x62, 0x02, 0x9d, 0xde, 0x89, 0xdc, 0xbb, 0xe6, - 0xe6, 0xfa, 0xad, 0x2d, 0xe8, 0x76, 0xc8, 0x01, 0x38, 0x47, 0xa7, 0xb2, 0x25, 0x34, 0x23, 0x7c, - 0x8a, 0x67, 0x24, 0xee, 0xd8, 0x35, 0x4e, 0xdb, 0x8a, 0x49, 0xe3, 0x2a, 0x4d, 0x45, 0xd5, 0x00, - 0xfb, 0x49, 0x74, 0xb3, 0xdf, 0xac, 0x0e, 0x1c, 0xf8, 0x2d, 0xd2, 0x11, 0x8e, 0x2a, 0x56, 0xaa, - 0x86, 0x4e, 0x38, 0x60, 0x7b, 0x3e, 0xee, 0x44, 0xcc, 0x39, 0xab, 0xa6, 0x5c, 0x0f, 0x29, 0xff, - 0x44, 0x81, 0xf2, 0xef, 0xbf, 0x8e, 0xf2, 0xcf, 0x4b, 0xe5, 0x0f, 0xeb, 0x52, 0x5f, 0x44, 0x17, - 0x0b, 0x37, 0xa4, 0x19, 0x7e, 0x82, 0xd4, 0x38, 0xed, 0xe0, 0xc0, 0x86, 0xce, 0xa0, 0xd0, 0xc5, - 0xba, 0x09, 0x71, 0x10, 0x61, 0x3b, 0x6e, 0xd3, 0x2c, 0xcf, 0x11, 0x56, 0x98, 0x4d, 0x51, 0xb7, - 0x9d, 0x54, 0x3d, 0x9c, 0x48, 0xd7, 0xc3, 0x8d, 0x95, 0x5c, 0xed, 0xa9, 0x0f, 0x52, 0x5e, 0xf6, - 0x21, 0xfd, 0x02, 0xd2, 0x86, 0xa9, 0x12, 0xdc, 0xbf, 0x15, 0x06, 0x7f, 0xb7, 0xd7, 0xf2, 0x3d, - 0xda, 0xc4, 0xce, 0x6e, 0x92, 0x5a, 0xef, 0xf6, 0x3d, 0x07, 0x62, 0x57, 0x78, 0x88, 0x8e, 0x47, - 0xbd, 0x56, 0xdc, 0x79, 0x31, 0x84, 0xb5, 0xf5, 0x79, 0x83, 0xf7, 0x92, 0x46, 0xd2, 0x4b, 0x1a, - 0x77, 0x82, 0x83, 0xe6, 0x95, 0xaf, 0x9e, 0xdc, 0x5c, 0x1a, 0x6e, 0x56, 0xa5, 0x76, 0x59, 0xca, - 0x77, 0xcc, 0xe4, 0xae, 0x6c, 0x5e, 0x9f, 0xc8, 0xe5, 0xf5, 0x94, 0xd8, 0x95, 0x8c, 0xd8, 0xb7, - 0x73, 0x62, 0x2f, 0x0f, 0x4a, 0x6e, 0xa9, 0x04, 0xfa, 0x35, 0x74, 0x65, 0x24, 0x83, 0x54, 0xc6, - 0x6f, 0x2a, 0x2c, 0x60, 0x78, 0xab, 0xf2, 0xb0, 0xeb, 0x60, 0xfa, 0x2a, 0x01, 0xd3, 0x67, 0xc7, - 0x04, 0x87, 0x08, 0x18, 0x4e, 0x2b, 0x8e, 0xa9, 0xca, 0x70, 0x4c, 0x7d, 0x0b, 0x1d, 0xf7, 0xc1, - 0x6f, 0x41, 0x18, 0xd5, 0xab, 0x97, 0x2a, 0x2b, 0xb5, 0xf5, 0x65, 0xa3, 0x40, 0xa5, 0x4d, 0xd6, - 0x81, 0x7c, 0x84, 0x3b, 0x9e, 0x13, 0x7b, 0xa8, 0x99, 0x9c, 0x51, 0x9b, 0x68, 0x36, 0x84, 0x7d, - 0x1c, 0x3a, 0x96, 0xa8, 0x26, 0x93, 0xe3, 0x54, 0x93, 0x19, 0x7e, 0xe6, 0x0e, 0xaf, 0x29, 0x4b, - 0x48, 0xac, 0x2d, 0x16, 0xa4, 0x22, 0xfc, 0x6a, 0x9c, 0xf6, 0x20, 0x26, 0x8d, 0x53, 0x24, 0xfe, - 0xdf, 0x38, 0x1b, 0x36, 0x81, 0x88, 0xb3, 0xe1, 0x0d, 0x69, 0xbd, 0x2f, 0x78, 0xf7, 0xc2, 0xf7, - 0xee, 0xb3, 0xc9, 0x41, 0x7d, 0x07, 0x4d, 0xe3, 0x1e, 0x6d, 0x93, 0xd0, 0xa3, 0x07, 0xbc, 0xa1, - 0x6a, 0xd6, 0xff, 0xfa, 0xe4, 0xe6, 0xbc, 0x68, 0xf2, 0x44, 0xbb, 0xbb, 0x4b, 0x43, 0x2f, 0x70, - 0xcd, 0x01, 0xab, 0xfa, 0x4d, 0x34, 0xc5, 0x67, 0x0f, 0x66, 0xc8, 0xda, 0xba, 0x56, 0x64, 0x07, - 0xfe, 0x46, 0xd2, 0x54, 0x72, 0x7e, 0x1e, 0x98, 0x83, 0x9b, 0xb2, 0x75, 0x2e, 0x8d, 0x4d, 0xd4, - 0xb9, 0x34, 0x49, 0x8a, 0xf2, 0x5b, 0x1e, 0x95, 0xcd, 0x0e, 0xb6, 0xf7, 0x3a, 0x5e, 0x44, 0x13, - 0xd5, 0x65, 0xe7, 0x18, 0xde, 0x55, 0x25, 0x7d, 0x32, 0x6f, 0xa9, 0x1a, 0xe8, 0xad, 0x56, 0x72, - 0x2a, 0xe9, 0xef, 0x21, 0x96, 0xa2, 0xb2, 0x32, 0x6d, 0xaa, 0x72, 0x4b, 0x5e, 0x94, 0x44, 0x14, - 0x3b, 0x9d, 0x8d, 0xa8, 0xf2, 0xd7, 0x45, 0x44, 0x95, 0x33, 0x48, 0x41, 0x7e, 0xa5, 0xb0, 0xec, - 0x63, 0x42, 0x9f, 0xec, 0x41, 0xc2, 0x26, 0xcf, 0x1d, 0x9d, 0x14, 0xb7, 0x72, 0x52, 0x5c, 0x4a, - 0xf5, 0xbe, 0x85, 0x4f, 0xeb, 0x97, 0x91, 0x5e, 0xbe, 0x2b, 0xf1, 0xff, 0xb1, 0xc2, 0x93, 0x77, - 0x08, 0x98, 0x82, 0x89, 0x29, 0xdc, 0x8b, 0x67, 0xcd, 0xd7, 0x76, 0xab, 0x65, 0xc4, 0x4b, 0x9f, - 0x9c, 0xbc, 0xc4, 0x70, 0xc6, 0x88, 0xc9, 0xec, 0x25, 0xab, 0xa6, 0x2c, 0x74, 0x71, 0xa6, 0x98, - 0x15, 0x55, 0x73, 0x2b, 0xa9, 0x76, 0x97, 0x13, 0xb6, 0x6e, 0xe8, 0xd9, 0x10, 0x17, 0x90, 0x6a, - 0xea, 0xb2, 0xfb, 0x31, 0x71, 0xdb, 0x51, 0xb7, 0xd1, 0xc9, 0xc1, 0x8c, 0x6c, 0xf5, 0x22, 0x47, - 0xe4, 0x84, 0x65, 0x91, 0x13, 0xce, 0x0f, 0xe7, 0x84, 0x7b, 0xe0, 0x62, 0xfb, 0x60, 0x0b, 0x6c, - 0x73, 0x26, 0x4c, 0x24, 0x7e, 0x18, 0x39, 0xea, 0x87, 0xe8, 0x2d, 0xdc, 0x8a, 0x48, 0xa7, 0x47, - 0xc1, 0xf2, 0xbd, 0x80, 0xf2, 0x3b, 0x79, 0x82, 0x68, 0x2e, 0x8e, 0xcc, 0x31, 0x75, 0xc5, 0x3c, - 0x95, 0x9c, 0xdd, 0xf1, 0x02, 0xca, 0xb5, 0xb8, 0x8a, 0x4e, 0xa5, 0xb0, 0xed, 0x7b, 0x81, 0x43, - 0xf6, 0x45, 0x51, 0x9f, 0x93, 0x2f, 0x7f, 0xcc, 0xc8, 0xbc, 0xd1, 0xcf, 0x86, 0x55, 0xaa, 0xe4, - 0x65, 0xcd, 0x93, 0x94, 0xbc, 0x2c, 0x55, 0xda, 0xf4, 0xe9, 0x04, 0xb3, 0x29, 0x0f, 0xbc, 0x37, - 0x64, 0xd3, 0xeb, 0x48, 0x0d, 0x60, 0xdf, 0xca, 0x19, 0x8c, 0xd7, 0xb6, 0xb9, 0x00, 0xf6, 0x1f, - 0xa4, 0x6d, 0x76, 0x9f, 0x33, 0xe7, 0xec, 0x56, 0x1d, 0xdf, 0x6e, 0xf1, 0x8d, 0x66, 0xda, 0x74, - 0x6b, 0xe8, 0x74, 0xee, 0x46, 0xa1, 0xed, 0x49, 0xa6, 0x6d, 0x35, 0xcd, 0x3f, 0x8e, 0xc2, 0x73, - 0xba, 0x13, 0x0a, 0xcf, 0x51, 0xa5, 0xc2, 0x7f, 0xa7, 0x30, 0x85, 0x9b, 0xe0, 0x93, 0xfe, 0x1b, - 0x52, 0xf8, 0x68, 0xf8, 0x39, 0x24, 0x02, 0x7e, 0x8e, 0x9a, 0xc0, 0x5f, 0xff, 0xaf, 0x8a, 0x2a, - 0x3b, 0x91, 0xab, 0x7e, 0xae, 0xa0, 0xd9, 0xec, 0x07, 0x98, 0xcb, 0x45, 0x55, 0x21, 0xff, 0xad, - 0x43, 0xbb, 0x31, 0x0e, 0x97, 0x54, 0xd6, 0xea, 0xa7, 0x7f, 0xfb, 0xcf, 0x2f, 0x27, 0x2e, 0xeb, - 0x7a, 0xa3, 0xe0, 0x73, 0x97, 0x68, 0x31, 0x6c, 0xf1, 0xfe, 0x27, 0x0a, 0x9a, 0x1e, 0x74, 0x94, - 0x97, 0x4a, 0xde, 0x91, 0x1c, 0xda, 0xca, 0x61, 0x1c, 0x12, 0xc5, 0x35, 0x86, 0x62, 0x49, 0x5f, - 0x2c, 0x42, 0x11, 0xb7, 0x5f, 0x16, 0x25, 0x16, 0xd0, 0xb6, 0xfa, 0x73, 0x05, 0xcd, 0x64, 0xbe, - 0x62, 0x2c, 0x97, 0xbc, 0x91, 0x66, 0xd2, 0xae, 0x8f, 0xc1, 0x24, 0xb1, 0xbc, 0xcd, 0xb0, 0x2c, - 0xeb, 0x4b, 0x45, 0x58, 0x42, 0x7e, 0xc2, 0x62, 0xa3, 0x1a, 0x43, 0x93, 0xf9, 0x7a, 0x51, 0x86, - 0x26, 0xcd, 0x54, 0x8a, 0xa6, 0xf0, 0x4b, 0xc1, 0x48, 0x34, 0xc2, 0x30, 0x29, 0x34, 0x99, 0x2f, - 0x0a, 0x65, 0x68, 0xd2, 0x4c, 0xa5, 0x68, 0x0a, 0x07, 0xe2, 0x91, 0x68, 0x1c, 0x7e, 0xc2, 0xb2, - 0xd9, 0xe3, 0xb1, 0xfb, 0x66, 0x07, 0xe7, 0x32, 0xf7, 0xcd, 0x70, 0x95, 0xba, 0x6f, 0xf1, 0xcc, - 0x39, 0xd2, 0x7d, 0xf7, 0xc5, 0x11, 0x81, 0xe8, 0xf7, 0x0a, 0x3a, 0x95, 0xee, 0xe7, 0x38, 0xaa, - 0xb7, 0x47, 0x86, 0x4b, 0xba, 0xf3, 0xd3, 0xd6, 0xc6, 0x66, 0x95, 0xf8, 0x6e, 0x31, 0x7c, 0xab, - 0xfa, 0xca, 0x88, 0xf0, 0xea, 0xf1, 0x83, 0x02, 0xe5, 0x1f, 0x14, 0xa4, 0x16, 0x8c, 0xd0, 0x65, - 0x30, 0x87, 0x59, 0x4b, 0x61, 0x8e, 0x98, 0x19, 0x47, 0xc2, 0x84, 0xd0, 0x5e, 0xbf, 0x65, 0x39, - 0xe2, 0xa0, 0x80, 0xf9, 0x67, 0x05, 0xd5, 0x4b, 0xbf, 0x7a, 0x37, 0x4a, 0x03, 0xbf, 0xf8, 0x80, - 0xf6, 0xee, 0x2b, 0x1e, 0x90, 0xc0, 0xbf, 0xce, 0x80, 0x1b, 0xfa, 0x8d, 0xe2, 0xc4, 0x41, 0xad, - 0x74, 0xcf, 0x9f, 0x64, 0x70, 0xf5, 0xd7, 0x0a, 0x9a, 0xcb, 0x0f, 0xc8, 0x57, 0xcb, 0xa2, 0x32, - 0xcb, 0xa7, 0x19, 0xe3, 0xf1, 0x49, 0x84, 0x06, 0x43, 0xb8, 0xa2, 0x5f, 0x2d, 0x0c, 0x60, 0x76, - 0xc8, 0x4a, 0x67, 0xb8, 0xbf, 0x28, 0x48, 0x1b, 0x31, 0x1e, 0x97, 0x19, 0xb7, 0xfc, 0x88, 0xf6, - 0xde, 0x2b, 0x1f, 0x91, 0xe0, 0xdf, 0x63, 0xe0, 0x6f, 0xeb, 0x6b, 0x85, 0xea, 0x65, 0xe7, 0xad, - 0x16, 0x76, 0x2c, 0x39, 0x49, 0x5b, 0x90, 0x00, 0xfd, 0x01, 0x9a, 0xc9, 0x8c, 0x46, 0x65, 0xc9, - 0x28, 0xcd, 0x54, 0x9a, 0x8c, 0x8a, 0xa6, 0x16, 0xf5, 0x33, 0x05, 0x69, 0x23, 0x46, 0x96, 0x32, - 0x4d, 0x95, 0x1f, 0x29, 0xd5, 0xd4, 0xe1, 0x93, 0x87, 0xfa, 0x53, 0x05, 0x9d, 0x2d, 0x1b, 0x3b, - 0x8c, 0xd2, 0xf2, 0x53, 0xc8, 0xaf, 0xbd, 0xf3, 0x6a, 0xfc, 0x12, 0x83, 0x87, 0xe6, 0xf2, 0x93, - 0x43, 0xa9, 0x57, 0x67, 0xf9, 0xca, 0xbd, 0xba, 0xb8, 0xa9, 0x8d, 0x9f, 0xca, 0x37, 0xb4, 0x57, - 0x47, 0xda, 0xee, 0xf0, 0xa7, 0x4a, 0xda, 0xb9, 0xf8, 0xa9, 0x7c, 0x2b, 0x77, 0xb5, 0x54, 0x41, - 0x19, 0x3e, 0xcd, 0x18, 0x8f, 0x2f, 0x79, 0x4a, 0x9b, 0xfc, 0xe4, 0xe5, 0xe3, 0x55, 0xa5, 0x09, - 0x5f, 0x3e, 0x5f, 0x50, 0x9e, 0x3e, 0x5f, 0x50, 0xfe, 0xf5, 0x7c, 0x41, 0xf9, 0xc5, 0x8b, 0x85, - 0x63, 0x4f, 0x5f, 0x2c, 0x1c, 0xfb, 0xfb, 0x8b, 0x85, 0x63, 0xdf, 0x7f, 0xdf, 0xf5, 0x68, 0xbb, - 0xd7, 0x32, 0x6c, 0xe2, 0x37, 0xb6, 0x93, 0xab, 0xef, 0xe1, 0x56, 0x34, 0x88, 0x8f, 0x9b, 0x36, - 0x09, 0x21, 0xbd, 0x6c, 0x63, 0x2f, 0x68, 0xf8, 0xc4, 0xe9, 0x75, 0x20, 0x12, 0xc1, 0xc3, 0xfe, - 0x0f, 0xd9, 0x9a, 0x62, 0x1f, 0xb4, 0x6e, 0xff, 0x2f, 0x00, 0x00, 0xff, 0xff, 0x47, 0x0f, 0xda, - 0x85, 0x93, 0x1d, 0x00, 0x00, + // 2185 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x59, 0xcf, 0x6f, 0x1c, 0x49, + 0xf5, 0x4f, 0x7b, 0xc6, 0x4e, 0x5c, 0xb6, 0xe3, 0xaf, 0x7b, 0x9d, 0x64, 0xd2, 0x49, 0xec, 0xb8, + 0x6d, 0x27, 0x5e, 0x27, 0x99, 0x89, 0x9d, 0x2f, 0xbb, 0xac, 0x25, 0x90, 0x32, 0x76, 0x10, 0x66, + 0xe3, 0x8d, 0xd5, 0x4e, 0x36, 0x12, 0x97, 0xa6, 0xa6, 0xfb, 0xa5, 0xa7, 0xf1, 0x74, 0xd7, 0xd0, + 0x5d, 0x33, 0x66, 0x0e, 0x48, 0xcb, 0x4a, 0x1c, 0x58, 0x0e, 0x8b, 0xc4, 0x01, 0x81, 0x04, 0x17, + 0xb8, 0x70, 0x58, 0x29, 0x87, 0x5c, 0xe0, 0x8e, 0xb4, 0xda, 0xd3, 0x0a, 0x2e, 0x08, 0xa1, 0x08, + 0x12, 0xa4, 0xfc, 0x19, 0xa0, 0xae, 0xaa, 0xae, 0xe9, 0xee, 0xe9, 0x1e, 0x8f, 0x43, 0xb4, 0x17, + 0x6b, 0xea, 0xd5, 0xab, 0xaa, 0xcf, 0xfb, 0xfd, 0x5e, 0x1b, 0x5d, 0x71, 0xfd, 0xef, 0x83, 0x45, + 0xdd, 0x2e, 0xd4, 0xda, 0xe0, 0x38, 0xbd, 0x5a, 0x77, 0xa3, 0xe6, 0x85, 0x4e, 0x58, 0x6d, 0x07, + 0x84, 0x12, 0x55, 0x95, 0xdb, 0x55, 0xb6, 0x5d, 0xed, 0x6e, 0x68, 0xf3, 0x0e, 0x71, 0x08, 0xdb, + 0xae, 0x45, 0xbf, 0x38, 0xa7, 0x76, 0xd9, 0x21, 0xc4, 0x69, 0x41, 0x0d, 0xb7, 0xdd, 0x1a, 0xf6, + 0x7d, 0x42, 0x31, 0x75, 0x89, 0x2f, 0xee, 0xd1, 0x2e, 0x8a, 0x5d, 0xb6, 0x6a, 0x74, 0x9e, 0xd4, + 0xb0, 0xdf, 0x13, 0x5b, 0x73, 0xd8, 0x73, 0x7d, 0x52, 0x63, 0x7f, 0x05, 0x69, 0xc1, 0x22, 0xa1, + 0x47, 0xc2, 0x5a, 0x03, 0x87, 0x50, 0xeb, 0x6e, 0x34, 0x80, 0xe2, 0x8d, 0x9a, 0x45, 0x5c, 0x5f, + 0xec, 0x5f, 0x10, 0xfb, 0x5e, 0xe8, 0x08, 0xbc, 0xf1, 0x33, 0x7c, 0xc3, 0xe4, 0xe8, 0xf8, 0x42, + 0x6c, 0xad, 0xf6, 0x05, 0x25, 0x01, 0xb6, 0x5a, 0xfd, 0x8b, 0xf9, 0x32, 0x7e, 0x3a, 0x47, 0x1f, + 0xb4, 0xd7, 0x86, 0xf8, 0x9a, 0xc5, 0x9c, 0xfd, 0x36, 0x0e, 0xb0, 0x17, 0x33, 0x2c, 0xe7, 0x30, + 0x04, 0x98, 0x82, 0xd9, 0x72, 0x3d, 0x97, 0x72, 0x26, 0xfd, 0x33, 0x05, 0x5d, 0xda, 0x0b, 0x9d, + 0x03, 0xa0, 0x0f, 0x02, 0xab, 0x09, 0x21, 0x0d, 0x30, 0x25, 0xc1, 0x5d, 0xdb, 0x0e, 0x20, 0x0c, + 0x21, 0x54, 0xcf, 0xa3, 0x89, 0x10, 0x7c, 0x1b, 0x82, 0x8a, 0x72, 0x55, 0x59, 0x9b, 0x34, 0xc4, + 0x4a, 0xd5, 0xd1, 0x34, 0x49, 0x1c, 0xa8, 0x8c, 0xb1, 0xdd, 0x14, 0x4d, 0x5d, 0x44, 0x53, 0x40, + 0x9b, 0x26, 0xe6, 0x97, 0x55, 0x4a, 0x8c, 0x05, 0x01, 0x6d, 0x8a, 0xeb, 0xb7, 0x36, 0x3e, 0x7e, + 0xf5, 0x74, 0x5d, 0xdc, 0xf8, 0xc9, 0xab, 0xa7, 0xeb, 0x4b, 0x1c, 0xe7, 0x10, 0x3c, 0xfa, 0x2a, + 0x5a, 0x1e, 0xb2, 0x6d, 0x40, 0xd8, 0x26, 0x7e, 0x08, 0xfa, 0x1f, 0x15, 0xf4, 0x7f, 0x7b, 0xa1, + 0xf3, 0x21, 0x6e, 0x85, 0x40, 0xb7, 0x89, 0xff, 0xc4, 0x0d, 0x3c, 0x75, 0x1e, 0x8d, 0xfb, 0xc4, + 0xb7, 0x80, 0x89, 0x52, 0x36, 0xf8, 0xe2, 0x8d, 0x48, 0xa2, 0x5e, 0x46, 0x93, 0xa1, 0xeb, 0xf8, + 0x98, 0x76, 0x02, 0xa8, 0x94, 0xd9, 0x76, 0x9f, 0xb0, 0x75, 0x33, 0x92, 0x33, 0x75, 0x63, 0x24, + 0xed, 0x79, 0x29, 0x6d, 0x0a, 0xa6, 0xae, 0xa1, 0x4a, 0x96, 0x26, 0xe5, 0x7a, 0xae, 0xa0, 0x69, + 0x26, 0xbf, 0x6f, 0x3f, 0x24, 0xf7, 0x68, 0xb3, 0xd0, 0x3e, 0x17, 0xd1, 0x99, 0x08, 0xb1, 0x0d, + 0x21, 0x15, 0x12, 0x9d, 0x06, 0xda, 0xdc, 0x81, 0x90, 0xaa, 0xef, 0xa2, 0x09, 0xec, 0x91, 0x8e, + 0x4f, 0x99, 0x1c, 0x53, 0x9b, 0x17, 0xab, 0xc2, 0x3d, 0x23, 0x27, 0xaf, 0x0a, 0x5f, 0xac, 0x6e, + 0x13, 0xd7, 0xaf, 0x97, 0x3f, 0x7f, 0xbe, 0x78, 0xca, 0x10, 0xec, 0xea, 0x37, 0x11, 0x6a, 0x04, + 0xae, 0xed, 0x80, 0xf9, 0x04, 0xb8, 0x94, 0x23, 0x1c, 0x9e, 0xe4, 0x47, 0xbe, 0x05, 0xb0, 0xa5, + 0x67, 0xcc, 0xad, 0x26, 0xcc, 0x2d, 0xe4, 0xd1, 0xcf, 0xa3, 0xf9, 0xe4, 0x5a, 0x0a, 0xfe, 0x43, + 0x34, 0xbb, 0x17, 0x3a, 0x06, 0xfc, 0xa0, 0x03, 0x21, 0xad, 0x63, 0x6a, 0x35, 0x07, 0x0c, 0xa7, + 0xe4, 0x18, 0x6e, 0x1e, 0x8d, 0xdb, 0xe0, 0x13, 0x4f, 0xe8, 0x80, 0x2f, 0xb6, 0x6e, 0xe4, 0xda, + 0xe3, 0x9c, 0x84, 0x93, 0x7c, 0x46, 0xbf, 0x88, 0x2e, 0x64, 0x48, 0x12, 0xd4, 0x3f, 0x14, 0x86, + 0x4a, 0x18, 0x89, 0xa3, 0xca, 0x77, 0xb2, 0x55, 0x74, 0x96, 0x92, 0x43, 0xf0, 0x4d, 0x8b, 0xf8, + 0x34, 0xc0, 0x56, 0x6c, 0x94, 0x19, 0x46, 0xdd, 0x16, 0x44, 0xf5, 0x0a, 0x8a, 0x9c, 0xca, 0x8c, + 0x3c, 0x07, 0x02, 0xe1, 0x66, 0x93, 0x40, 0x9b, 0x07, 0x8c, 0x30, 0x20, 0x71, 0x39, 0x47, 0xe2, + 0x94, 0x27, 0x8e, 0x67, 0x3d, 0xf1, 0x38, 0xc9, 0x93, 0xa2, 0x08, 0xc9, 0x93, 0x24, 0x29, 0xf9, + 0x4f, 0x4b, 0x4c, 0xf2, 0x1d, 0x68, 0x93, 0xd0, 0xa5, 0xdb, 0x2d, 0xec, 0x7a, 0x2c, 0x48, 0xba, + 0xe0, 0x53, 0x33, 0x29, 0x3f, 0x62, 0xa4, 0x0f, 0x98, 0x12, 0x96, 0xd0, 0x74, 0xa3, 0x45, 0xac, + 0x43, 0xb3, 0x09, 0xae, 0xd3, 0xe4, 0x2a, 0x28, 0x1b, 0x53, 0x8c, 0xf6, 0x6d, 0x46, 0xca, 0xd1, + 0x53, 0x29, 0x4f, 0x4f, 0x5f, 0x93, 0x2e, 0xcc, 0x54, 0x50, 0xbf, 0x12, 0xb9, 0xda, 0xdf, 0x9f, + 0x2f, 0x9e, 0xe3, 0xce, 0x18, 0xda, 0x87, 0x55, 0x97, 0xd4, 0x3c, 0x4c, 0x9b, 0xd5, 0x5d, 0x9f, + 0x4a, 0x07, 0xbe, 0x8e, 0x66, 0x81, 0x36, 0x21, 0x80, 0x8e, 0x67, 0x8a, 0xa8, 0xe1, 0x1a, 0x3a, + 0x1b, 0x93, 0x0f, 0x78, 0xf4, 0x5c, 0x47, 0xb3, 0x22, 0x7f, 0x07, 0x60, 0x81, 0xdb, 0x85, 0xa0, + 0x32, 0xc1, 0x19, 0x39, 0xd9, 0x10, 0xd4, 0x01, 0x8b, 0x9c, 0xce, 0xb1, 0x88, 0x8a, 0xca, 0x36, + 0xa6, 0xb8, 0x72, 0x86, 0xed, 0xb1, 0xdf, 0x5b, 0xdf, 0xf9, 0xe2, 0xd9, 0xad, 0x4b, 0x71, 0x1d, + 0xe3, 0x31, 0x73, 0x4f, 0x40, 0x60, 0xca, 0x3c, 0xc6, 0x4c, 0x49, 0xbd, 0x0b, 0x33, 0x25, 0x49, + 0xd2, 0x4c, 0x9f, 0x8e, 0xb1, 0x34, 0xf8, 0xd8, 0xa5, 0x4d, 0x3b, 0xc0, 0x47, 0x6f, 0xce, 0x4e, + 0x8b, 0x68, 0xaa, 0x11, 0x39, 0x84, 0xb8, 0xa3, 0xc4, 0xef, 0x60, 0xa4, 0x0f, 0x0a, 0x1c, 0xbe, + 0x9c, 0x67, 0xc8, 0xac, 0xfe, 0xc6, 0x07, 0xf5, 0xb7, 0xf5, 0xfe, 0xeb, 0xe8, 0xaa, 0x9f, 0x5c, + 0x53, 0xc2, 0x8b, 0xe4, 0x9a, 0xa2, 0x49, 0x6d, 0xbd, 0x1c, 0x43, 0xe7, 0xf6, 0x42, 0xe7, 0x9e, + 0xb1, 0xbd, 0x79, 0x7b, 0x07, 0xda, 0x2d, 0xd2, 0x03, 0xfb, 0xcd, 0xa9, 0x6c, 0x09, 0x4d, 0x0b, + 0x9f, 0xe2, 0x19, 0x89, 0x3b, 0xf6, 0x14, 0xa7, 0xed, 0x44, 0xa4, 0x51, 0x95, 0xa6, 0xa2, 0xb2, + 0x8f, 0xbd, 0x38, 0xba, 0xd9, 0x6f, 0x56, 0x07, 0x7a, 0x5e, 0x83, 0xb4, 0x84, 0xa3, 0x8a, 0x95, + 0xaa, 0xa1, 0x33, 0x36, 0x58, 0xae, 0x87, 0x5b, 0x21, 0x73, 0xce, 0xb2, 0x21, 0xd7, 0x03, 0xca, + 0x3f, 0x93, 0xa3, 0xfc, 0xfd, 0xd7, 0x51, 0xfe, 0x25, 0xa9, 0xfc, 0x41, 0x5d, 0xea, 0x8b, 0xe8, + 0x4a, 0xee, 0x86, 0x34, 0xc3, 0x8f, 0x90, 0x1a, 0xa5, 0x1d, 0xec, 0x5b, 0xd0, 0xea, 0x17, 0xba, + 0x48, 0x37, 0x01, 0xf6, 0x43, 0x6c, 0x45, 0xdd, 0x9c, 0xe9, 0xda, 0xc2, 0x0a, 0x33, 0x09, 0xea, + 0xae, 0x9d, 0xa8, 0x87, 0x63, 0xc9, 0x7a, 0xb8, 0xb5, 0x96, 0xa9, 0x3d, 0x95, 0x7e, 0xca, 0x4b, + 0x3f, 0xa4, 0x5f, 0x46, 0xda, 0x20, 0x55, 0x82, 0xfb, 0x97, 0xc2, 0xe0, 0x1f, 0x74, 0x1a, 0x9e, + 0x4b, 0xeb, 0xd8, 0x3e, 0x88, 0x53, 0xeb, 0xbd, 0xae, 0x6b, 0x43, 0xe4, 0x0a, 0x8f, 0xd0, 0xe9, + 0xb0, 0xd3, 0x88, 0x3a, 0x2f, 0x86, 0x70, 0x6a, 0x73, 0xbe, 0xca, 0x5b, 0xce, 0x6a, 0xdc, 0x72, + 0x56, 0xef, 0xfa, 0xbd, 0xfa, 0xea, 0x17, 0xcf, 0x6e, 0x2d, 0x0d, 0xf6, 0xb4, 0x52, 0xbb, 0x2c, + 0xe5, 0xdb, 0x46, 0x7c, 0x57, 0x3a, 0xaf, 0x8f, 0x65, 0xf2, 0x7a, 0x42, 0xec, 0x52, 0x4a, 0xec, + 0x3b, 0x19, 0xb1, 0x97, 0xfb, 0x25, 0xb7, 0x50, 0x02, 0xfd, 0x3a, 0x5a, 0x1d, 0xca, 0x20, 0x95, + 0xf1, 0xeb, 0x12, 0x0b, 0x18, 0xde, 0xaa, 0x3c, 0x6a, 0xdb, 0x98, 0x9e, 0x24, 0x60, 0xba, 0xec, + 0x98, 0xe0, 0x10, 0x01, 0xc3, 0x69, 0xf9, 0x31, 0x55, 0x1a, 0x8c, 0xa9, 0x6f, 0xa0, 0xd3, 0x1e, + 0x78, 0x0d, 0x08, 0xc2, 0x4a, 0xf9, 0x6a, 0x69, 0x6d, 0x6a, 0x73, 0xb9, 0x9a, 0xa3, 0xd2, 0x3a, + 0xeb, 0x40, 0x3e, 0xc4, 0x2d, 0xd7, 0x8e, 0x3c, 0xd4, 0x88, 0xcf, 0xa8, 0x75, 0x34, 0x13, 0xc0, + 0x11, 0x0e, 0x6c, 0x53, 0x54, 0x93, 0xf1, 0x51, 0xaa, 0xc9, 0x34, 0x3f, 0x73, 0x97, 0xd7, 0x94, + 0x25, 0x24, 0xd6, 0x26, 0x0b, 0x52, 0x11, 0x7e, 0x53, 0x9c, 0xf6, 0x30, 0x22, 0x8d, 0x52, 0x24, + 0xfe, 0xd7, 0x38, 0x1b, 0x34, 0x81, 0x88, 0xb3, 0xc1, 0x0d, 0x69, 0xbd, 0xcf, 0x78, 0xf7, 0xc2, + 0xf7, 0xf6, 0xd9, 0xe4, 0xa0, 0xbe, 0x83, 0x26, 0x71, 0x87, 0x36, 0x49, 0xe0, 0xd2, 0x1e, 0x6f, + 0xa8, 0xea, 0x95, 0xbf, 0x3c, 0xbb, 0x35, 0x2f, 0x9a, 0x3c, 0xd1, 0xee, 0x1e, 0xd0, 0xc0, 0xf5, + 0x1d, 0xa3, 0xcf, 0xaa, 0x7e, 0x1d, 0x4d, 0xf0, 0xd9, 0x83, 0x19, 0x72, 0x6a, 0x53, 0xcb, 0xb3, + 0x03, 0x7f, 0x23, 0x6e, 0x2a, 0x39, 0x3f, 0x0f, 0xcc, 0xfe, 0x4d, 0xe9, 0x3a, 0x97, 0xc4, 0x26, + 0xea, 0x5c, 0x92, 0x24, 0x45, 0xf9, 0x0d, 0x8f, 0xca, 0x7a, 0x0b, 0x5b, 0x87, 0x2d, 0x37, 0xa4, + 0xb1, 0xea, 0xd2, 0x73, 0x0c, 0xef, 0xaa, 0xe2, 0x3e, 0x99, 0xb7, 0x54, 0x35, 0xf4, 0x56, 0x23, + 0x3e, 0x15, 0xf7, 0xf7, 0x10, 0x49, 0x51, 0x5a, 0x9b, 0x34, 0x54, 0xb9, 0x25, 0x2f, 0x8a, 0x23, + 0x8a, 0x9d, 0x4e, 0x47, 0x54, 0xf1, 0xeb, 0x22, 0xa2, 0x8a, 0x19, 0xa4, 0x20, 0xbf, 0x54, 0x58, + 0xf6, 0x31, 0xa0, 0x4b, 0x0e, 0x21, 0x66, 0x93, 0xe7, 0xde, 0x9c, 0x14, 0xb7, 0x33, 0x52, 0x5c, + 0x4d, 0xf4, 0xbe, 0xb9, 0x4f, 0xeb, 0x2b, 0x48, 0x2f, 0xde, 0x95, 0xf8, 0x7f, 0x52, 0xe6, 0xc9, + 0x3b, 0x00, 0x4c, 0xc1, 0xc0, 0x14, 0xee, 0x47, 0xb3, 0xe6, 0x6b, 0xbb, 0xd5, 0x32, 0xe2, 0xa5, + 0x4f, 0x4e, 0x5e, 0x62, 0x38, 0x63, 0xc4, 0x78, 0xf6, 0x92, 0x55, 0x53, 0x16, 0xba, 0x28, 0x53, + 0xcc, 0x88, 0xaa, 0xb9, 0x13, 0x57, 0xbb, 0x95, 0x98, 0xad, 0x1d, 0xb8, 0x16, 0x44, 0x05, 0xa4, + 0x9c, 0xb8, 0x6c, 0x3f, 0x22, 0xee, 0xda, 0xea, 0x2e, 0x3a, 0xdb, 0x9f, 0x91, 0xcd, 0x4e, 0x68, + 0x8b, 0x9c, 0xb0, 0x2c, 0x72, 0xc2, 0xa5, 0xc1, 0x9c, 0x70, 0x1f, 0x1c, 0x6c, 0xf5, 0x76, 0xc0, + 0x32, 0xa6, 0x83, 0x58, 0xe2, 0x47, 0xa1, 0xad, 0x3e, 0x40, 0x6f, 0xe1, 0x46, 0x48, 0x5a, 0x1d, + 0x0a, 0xa6, 0xe7, 0xfa, 0x94, 0xdf, 0xc9, 0x13, 0x44, 0x7d, 0x71, 0x68, 0x8e, 0xa9, 0x28, 0xc6, + 0x5c, 0x7c, 0x76, 0xcf, 0xf5, 0x29, 0xd7, 0xe2, 0x3a, 0x9a, 0x4b, 0x60, 0x3b, 0x72, 0x7d, 0x9b, + 0x1c, 0x89, 0xa2, 0x3e, 0x2b, 0x5f, 0x7e, 0xcc, 0xc8, 0xea, 0x3e, 0x9a, 0xe3, 0xd2, 0xf2, 0x6f, + 0x0a, 0x26, 0xed, 0xb5, 0x81, 0x15, 0xf8, 0xb3, 0x9b, 0x2b, 0x89, 0xd8, 0x14, 0x5f, 0x1c, 0xe2, + 0x94, 0xf3, 0x80, 0x2d, 0x1f, 0xf6, 0xda, 0x60, 0xcc, 0xb2, 0xe3, 0x7d, 0x02, 0x1f, 0x1d, 0xd2, + 0x81, 0x9a, 0x28, 0xa2, 0x69, 0x83, 0xc7, 0x45, 0x34, 0x4d, 0x95, 0x5e, 0xf2, 0x87, 0x12, 0xf3, + 0x12, 0x1e, 0xca, 0x5f, 0x91, 0x97, 0xdc, 0x40, 0xaa, 0x0f, 0x47, 0x66, 0xc6, 0x05, 0x78, 0xb5, + 0x9c, 0xf5, 0xe1, 0xe8, 0x61, 0xd2, 0x0b, 0xf6, 0x39, 0x73, 0xc6, 0x13, 0xca, 0xa3, 0x7b, 0x42, + 0x74, 0xa3, 0x91, 0x74, 0x86, 0x0d, 0x74, 0x2e, 0x73, 0xa3, 0xb0, 0xdf, 0x38, 0xb3, 0x9f, 0x9a, + 0xe4, 0x17, 0x26, 0x7c, 0xcc, 0x8f, 0x0c, 0x9a, 0x71, 0xe2, 0x04, 0x66, 0x54, 0x63, 0xd1, 0x46, + 0xb5, 0x64, 0xc6, 0x28, 0xc2, 0x92, 0x19, 0xaa, 0xb4, 0xe4, 0x6f, 0x15, 0x66, 0x49, 0x03, 0x3c, + 0xd2, 0xfd, 0x8a, 0x2c, 0x39, 0x1c, 0x7e, 0x06, 0x89, 0x80, 0x9f, 0xa1, 0xc6, 0xf0, 0x37, 0xff, + 0xa3, 0xa2, 0xd2, 0x5e, 0xe8, 0xa8, 0x9f, 0x2a, 0x68, 0x26, 0xfd, 0xad, 0x68, 0x25, 0xaf, 0x80, + 0x65, 0x3f, 0xcb, 0x68, 0x37, 0x47, 0xe1, 0x92, 0xca, 0x5a, 0xff, 0xf8, 0xaf, 0xff, 0xfe, 0xc5, + 0xd8, 0x8a, 0xae, 0xd7, 0x72, 0xbe, 0xcc, 0x89, 0x6e, 0xc8, 0x12, 0xef, 0x7f, 0xa4, 0xa0, 0xc9, + 0x7e, 0xf3, 0x7b, 0xb5, 0xe0, 0x1d, 0xc9, 0xa1, 0xad, 0x1d, 0xc7, 0x21, 0x51, 0x5c, 0x67, 0x28, + 0x96, 0xf4, 0xc5, 0x3c, 0x14, 0x51, 0xa7, 0x68, 0x52, 0x62, 0x02, 0x6d, 0xaa, 0x3f, 0x53, 0xd0, + 0x74, 0xea, 0x83, 0xcb, 0x72, 0xc1, 0x1b, 0x49, 0x26, 0xed, 0xc6, 0x08, 0x4c, 0x12, 0xcb, 0xdb, + 0x0c, 0xcb, 0xb2, 0xbe, 0x94, 0x87, 0x25, 0xe0, 0x27, 0x4c, 0x36, 0x55, 0x32, 0x34, 0xa9, 0x0f, + 0x2d, 0x45, 0x68, 0x92, 0x4c, 0x85, 0x68, 0x72, 0x3f, 0x6a, 0x0c, 0x45, 0x23, 0x0c, 0x93, 0x40, + 0x93, 0xfa, 0xf8, 0x51, 0x84, 0x26, 0xc9, 0x54, 0x88, 0x26, 0x77, 0x76, 0x1f, 0x8a, 0xc6, 0xe6, + 0x27, 0x4c, 0x8b, 0x3d, 0x1e, 0xb9, 0x6f, 0x7a, 0xc6, 0x2f, 0x72, 0xdf, 0x14, 0x57, 0xa1, 0xfb, + 0xe6, 0x8f, 0xc7, 0x43, 0xdd, 0xf7, 0x48, 0x1c, 0x11, 0x88, 0x7e, 0xa7, 0xa0, 0xb9, 0x64, 0xeb, + 0xc9, 0x51, 0xbd, 0x3d, 0x34, 0x5c, 0x92, 0x4d, 0xaa, 0xb6, 0x31, 0x32, 0xab, 0xc4, 0x77, 0x9b, + 0xe1, 0x5b, 0xd7, 0xd7, 0x86, 0x84, 0x57, 0x87, 0x1f, 0x14, 0x28, 0x7f, 0xaf, 0x20, 0x35, 0x67, + 0xda, 0x2f, 0x82, 0x39, 0xc8, 0x5a, 0x08, 0x73, 0xc8, 0x78, 0x3b, 0x14, 0x26, 0x04, 0xd6, 0xe6, + 0x6d, 0xd3, 0x16, 0x07, 0x05, 0xcc, 0x3f, 0x29, 0xa8, 0x52, 0xf8, 0x81, 0xbe, 0x56, 0x18, 0xf8, + 0xf9, 0x07, 0xb4, 0x77, 0x4f, 0x78, 0x40, 0x02, 0xff, 0x7f, 0x06, 0xbc, 0xaa, 0xdf, 0xcc, 0x4f, + 0x1c, 0xd4, 0x4c, 0x8e, 0x27, 0x71, 0x06, 0x57, 0x7f, 0xa5, 0xa0, 0xd9, 0xec, 0x2c, 0x7f, 0xad, + 0x28, 0x2a, 0xd3, 0x7c, 0x5a, 0x75, 0x34, 0x3e, 0x89, 0xb0, 0xca, 0x10, 0xae, 0xe9, 0xd7, 0x72, + 0x03, 0x98, 0x1d, 0x32, 0x93, 0x19, 0xee, 0xcf, 0x0a, 0xd2, 0x86, 0x4c, 0xf2, 0x45, 0xc6, 0x2d, + 0x3e, 0xa2, 0xbd, 0x77, 0xe2, 0x23, 0x12, 0xfc, 0x7b, 0x0c, 0xfc, 0x1d, 0x7d, 0x23, 0x57, 0xbd, + 0xec, 0xbc, 0xd9, 0xc0, 0xb6, 0x29, 0x87, 0x7e, 0x13, 0x62, 0xa0, 0xdf, 0x43, 0xd3, 0xa9, 0x29, + 0xae, 0x28, 0x19, 0x25, 0x99, 0x0a, 0x93, 0x51, 0xde, 0x80, 0xa5, 0x7e, 0xa2, 0x20, 0x6d, 0xc8, + 0x74, 0x55, 0xa4, 0xa9, 0xe2, 0x23, 0x85, 0x9a, 0x3a, 0x7e, 0x48, 0x52, 0x7f, 0xac, 0xa0, 0x0b, + 0x45, 0x13, 0x52, 0xb5, 0xb0, 0xfc, 0xe4, 0xf2, 0x6b, 0xef, 0x9c, 0x8c, 0x5f, 0x62, 0x70, 0xd1, + 0x6c, 0x76, 0xc8, 0x29, 0xf4, 0xea, 0x34, 0x5f, 0xb1, 0x57, 0xe7, 0x77, 0xcb, 0xd1, 0x53, 0xd9, + 0x4e, 0xf9, 0xda, 0x50, 0xdb, 0x1d, 0xff, 0x54, 0x41, 0x3b, 0x17, 0x3d, 0x95, 0x6d, 0xe5, 0xae, + 0x15, 0x2a, 0x28, 0xc5, 0xa7, 0x55, 0x47, 0xe3, 0x8b, 0x9f, 0xd2, 0xc6, 0x3f, 0x7a, 0xf5, 0x74, + 0x5d, 0xa9, 0xc3, 0xe7, 0x2f, 0x16, 0x94, 0x2f, 0x5f, 0x2c, 0x28, 0xff, 0x7c, 0xb1, 0xa0, 0xfc, + 0xfc, 0xe5, 0xc2, 0xa9, 0x2f, 0x5f, 0x2e, 0x9c, 0xfa, 0xdb, 0xcb, 0x85, 0x53, 0xdf, 0x7d, 0xdf, + 0x71, 0x69, 0xb3, 0xd3, 0xa8, 0x5a, 0xc4, 0xab, 0xed, 0xc6, 0x57, 0xdf, 0xc7, 0x8d, 0xb0, 0x1f, + 0x1f, 0xb7, 0x2c, 0x12, 0x40, 0x72, 0xd9, 0xc4, 0xae, 0x5f, 0xf3, 0x88, 0xdd, 0x69, 0x41, 0x28, + 0x82, 0x87, 0xfd, 0xcb, 0xb4, 0x31, 0xc1, 0xbe, 0xbd, 0xdd, 0xf9, 0x6f, 0x00, 0x00, 0x00, 0xff, + 0xff, 0xc1, 0x26, 0xc0, 0x58, 0x65, 0x1e, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -2111,13 +2138,13 @@ type MsgClient interface { // RevokeEthereumBlacklist removes Ethereum addresses from the peggy // blacklist. RevokeEthereumBlacklist(ctx context.Context, in *MsgRevokeEthereumBlacklist, opts ...grpc.CallOption) (*MsgRevokeEthereumBlacklistResponse, error) - // CreateRateLimit imposes a (notional) limit on withdrawals for a particular - // Peggy asset + // CreateRateLimit imposes a (notional) limit on withdrawals for a particular + // Peggy asset CreateRateLimit(ctx context.Context, in *MsgCreateRateLimit, opts ...grpc.CallOption) (*MsgCreateRateLimitResponse, error) - // UpdateRateLimit updates the rate limit's metadata for a particular Peggy - // asset + // UpdateRateLimit updates the rate limit's metadata for a particular Peggy + // asset UpdateRateLimit(ctx context.Context, in *MsgUpdateRateLimit, opts ...grpc.CallOption) (*MsgUpdateRateLimitResponse, error) - // RemoveRateLimit lifts the rate limit for a particular Peggy asset + // RemoveRateLimit lifts the rate limit for a particular Peggy asset RemoveRateLimit(ctx context.Context, in *MsgRemoveRateLimit, opts ...grpc.CallOption) (*MsgRemoveRateLimitResponse, error) } @@ -2301,13 +2328,13 @@ type MsgServer interface { // RevokeEthereumBlacklist removes Ethereum addresses from the peggy // blacklist. RevokeEthereumBlacklist(context.Context, *MsgRevokeEthereumBlacklist) (*MsgRevokeEthereumBlacklistResponse, error) - // CreateRateLimit imposes a (notional) limit on withdrawals for a particular - // Peggy asset + // CreateRateLimit imposes a (notional) limit on withdrawals for a particular + // Peggy asset CreateRateLimit(context.Context, *MsgCreateRateLimit) (*MsgCreateRateLimitResponse, error) - // UpdateRateLimit updates the rate limit's metadata for a particular Peggy - // asset + // UpdateRateLimit updates the rate limit's metadata for a particular Peggy + // asset UpdateRateLimit(context.Context, *MsgUpdateRateLimit) (*MsgUpdateRateLimitResponse, error) - // RemoveRateLimit lifts the rate limit for a particular Peggy asset + // RemoveRateLimit lifts the rate limit for a particular Peggy asset RemoveRateLimit(context.Context, *MsgRemoveRateLimit) (*MsgRemoveRateLimitResponse, error) } @@ -3820,6 +3847,11 @@ func (m *MsgCreateRateLimit) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.TokenOracleType != 0 { + i = encodeVarintMsgs(dAtA, i, uint64(m.TokenOracleType)) + i-- + dAtA[i] = 0x40 + } if m.RateLimitWindow != 0 { i = encodeVarintMsgs(dAtA, i, uint64(m.RateLimitWindow)) i-- @@ -3917,6 +3949,11 @@ func (m *MsgUpdateRateLimit) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.NewTokenOracleType != 0 { + i = encodeVarintMsgs(dAtA, i, uint64(m.NewTokenOracleType)) + i-- + dAtA[i] = 0x30 + } if m.NewRateLimitWindow != 0 { i = encodeVarintMsgs(dAtA, i, uint64(m.NewRateLimitWindow)) i-- @@ -4540,6 +4577,9 @@ func (m *MsgCreateRateLimit) Size() (n int) { if m.RateLimitWindow != 0 { n += 1 + sovMsgs(uint64(m.RateLimitWindow)) } + if m.TokenOracleType != 0 { + n += 1 + sovMsgs(uint64(m.TokenOracleType)) + } return n } @@ -4575,6 +4615,9 @@ func (m *MsgUpdateRateLimit) Size() (n int) { if m.NewRateLimitWindow != 0 { n += 1 + sovMsgs(uint64(m.NewRateLimitWindow)) } + if m.NewTokenOracleType != 0 { + n += 1 + sovMsgs(uint64(m.NewTokenOracleType)) + } return n } @@ -7905,6 +7948,25 @@ func (m *MsgCreateRateLimit) Unmarshal(dAtA []byte) error { break } } + case 8: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field TokenOracleType", wireType) + } + m.TokenOracleType = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMsgs + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.TokenOracleType |= types2.OracleType(b&0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipMsgs(dAtA[iNdEx:]) @@ -8154,6 +8216,25 @@ func (m *MsgUpdateRateLimit) Unmarshal(dAtA []byte) error { break } } + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field NewTokenOracleType", wireType) + } + m.NewTokenOracleType = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowMsgs + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.NewTokenOracleType |= types2.OracleType(b&0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipMsgs(dAtA[iNdEx:]) diff --git a/chain/peggy/types/rate_limit.pb.go b/chain/peggy/types/rate_limit.pb.go index 9b0815c2f..90a38b6c6 100644 --- a/chain/peggy/types/rate_limit.pb.go +++ b/chain/peggy/types/rate_limit.pb.go @@ -6,6 +6,7 @@ package types import ( cosmossdk_io_math "cosmossdk.io/math" fmt "fmt" + types "github.com/InjectiveLabs/sdk-go/chain/oracle/types" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" io "io" @@ -29,7 +30,8 @@ type RateLimit struct { TokenAddress string `protobuf:"bytes,1,opt,name=token_address,json=tokenAddress,proto3" json:"token_address,omitempty"` // decimals of the ERC20 token TokenDecimals uint32 `protobuf:"varint,2,opt,name=token_decimals,json=tokenDecimals,proto3" json:"token_decimals,omitempty"` - // a Pyth-specific ID used to obtain USD price of the ERC20 token + // unique ID used to obtain the notional USD value of the ERC20 token from + // oracle TokenPriceId string `protobuf:"bytes,3,opt,name=token_price_id,json=tokenPriceId,proto3" json:"token_price_id,omitempty"` // length of the sliding window in which inbound (outbound) traffic is // measured @@ -40,6 +42,9 @@ type RateLimit struct { AbsoluteMintLimit cosmossdk_io_math.Int `protobuf:"bytes,6,opt,name=absolute_mint_limit,json=absoluteMintLimit,proto3,customtype=cosmossdk.io/math.Int" json:"absolute_mint_limit"` // Deprecated: Do not use. // transfers that occurred within the sliding window Transfers []*BridgeTransfer `protobuf:"bytes,7,rep,name=transfers,proto3" json:"transfers,omitempty"` // Deprecated: Do not use. + // oracle type used to obtain the USD price of the ERC20 token (in relation + // with token_price_id) + TokenOracleType types.OracleType `protobuf:"varint,8,opt,name=token_oracle_type,json=tokenOracleType,proto3,enum=injective.oracle.v1beta1.OracleType" json:"token_oracle_type,omitempty"` } func (m *RateLimit) Reset() { *m = RateLimit{} } @@ -111,6 +116,13 @@ func (m *RateLimit) GetTransfers() []*BridgeTransfer { return nil } +func (m *RateLimit) GetTokenOracleType() types.OracleType { + if m != nil { + return m.TokenOracleType + } + return types.OracleType_Unspecified +} + // Deprecated: Do not use. type BridgeTransfer struct { // quantity that was bridged (chain format) @@ -338,43 +350,46 @@ func init() { } var fileDescriptor_f5e4b49160131e74 = []byte{ - // 567 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x54, 0xdf, 0x8a, 0xd3, 0x4c, - 0x1c, 0xed, 0xb4, 0xbb, 0xdd, 0xed, 0x6c, 0xb7, 0x1f, 0x3b, 0xbb, 0x1f, 0x04, 0x65, 0xd3, 0x9a, - 0x2a, 0x16, 0xc1, 0x84, 0x55, 0xbc, 0xf1, 0xae, 0xb5, 0x37, 0xc5, 0xfa, 0x87, 0x41, 0x11, 0xbd, - 0x09, 0x49, 0x66, 0x36, 0x1d, 0x9b, 0x64, 0x4a, 0x66, 0xd2, 0xd2, 0x67, 0x10, 0xc1, 0x67, 0xf1, - 0x29, 0xf6, 0x72, 0x2f, 0xc5, 0x8b, 0x45, 0xda, 0x17, 0x91, 0x4c, 0x92, 0xb6, 0xd2, 0x22, 0xac, - 0x77, 0x99, 0x93, 0x73, 0xce, 0x1c, 0xce, 0xef, 0xc7, 0xc0, 0x36, 0x8b, 0x3e, 0x53, 0x4f, 0xb2, - 0x29, 0xb5, 0x26, 0xd4, 0xf7, 0xe7, 0xd6, 0xf4, 0xc2, 0x8a, 0x1d, 0x49, 0xed, 0x80, 0x85, 0x4c, - 0x9a, 0x93, 0x98, 0x4b, 0x8e, 0xd0, 0x8a, 0x64, 0x2a, 0x92, 0x39, 0xbd, 0xb8, 0x73, 0xe6, 0x73, - 0x9f, 0xab, 0xdf, 0x56, 0xfa, 0x95, 0x31, 0x8d, 0x2f, 0x15, 0x58, 0xc3, 0x8e, 0xa4, 0xc3, 0x54, - 0x8d, 0xda, 0xf0, 0x58, 0xf2, 0x31, 0x8d, 0x6c, 0x87, 0x90, 0x98, 0x0a, 0xa1, 0x81, 0x16, 0xe8, - 0xd4, 0x70, 0x5d, 0x81, 0xdd, 0x0c, 0x43, 0x0f, 0x60, 0x23, 0x23, 0x11, 0xea, 0xb1, 0xd0, 0x09, - 0x84, 0x56, 0x6e, 0x81, 0xce, 0x31, 0xce, 0xa4, 0xfd, 0x1c, 0x44, 0xf7, 0x0b, 0xda, 0x24, 0x66, - 0x1e, 0xb5, 0x19, 0xd1, 0x2a, 0x1b, 0x66, 0x6f, 0x53, 0x70, 0x40, 0xd0, 0x23, 0x78, 0xb2, 0x4e, - 0x6f, 0xcf, 0x58, 0x44, 0xf8, 0x4c, 0xdb, 0x6b, 0x81, 0xce, 0x1e, 0xfe, 0x2f, 0x2e, 0x72, 0x7d, - 0x50, 0x30, 0x1a, 0xc0, 0xc6, 0x06, 0x37, 0x11, 0x44, 0xdb, 0x4f, 0x1d, 0x7b, 0xed, 0xab, 0x9b, - 0x66, 0xe9, 0xe7, 0x4d, 0xf3, 0xae, 0xc7, 0x45, 0xc8, 0x85, 0x20, 0x63, 0x93, 0x71, 0x2b, 0x74, - 0xe4, 0xc8, 0x1c, 0x52, 0xdf, 0xf1, 0xe6, 0x7d, 0xea, 0xe1, 0xfa, 0xca, 0xed, 0xbd, 0x20, 0xe8, - 0x0d, 0x3c, 0x75, 0x5c, 0xc1, 0x83, 0x44, 0x52, 0x3b, 0x64, 0x91, 0xcc, 0x3c, 0xb5, 0xaa, 0xf2, - 0x6b, 0xe6, 0x7e, 0xff, 0x6f, 0xfb, 0x0d, 0x22, 0xa9, 0x01, 0x7c, 0x52, 0x68, 0x5f, 0xb1, 0x48, - 0x66, 0xcd, 0xf5, 0x61, 0x4d, 0xc6, 0x4e, 0x24, 0x2e, 0x69, 0x2c, 0xb4, 0x83, 0x56, 0xa5, 0x73, - 0xf4, 0xc4, 0x30, 0xb7, 0xa7, 0x60, 0xf6, 0x62, 0x46, 0x7c, 0xfa, 0x2e, 0xa7, 0xf6, 0xca, 0x1a, - 0xc0, 0x6b, 0xa1, 0xf1, 0x15, 0xc0, 0xc6, 0x9f, 0x0c, 0xf4, 0x0c, 0x56, 0x9d, 0x90, 0x27, 0xe9, - 0xbd, 0x2a, 0xdc, 0xf9, 0x5f, 0xc3, 0xe1, 0x9c, 0x8c, 0xee, 0xc1, 0xba, 0x1b, 0x70, 0x6f, 0x6c, - 0x47, 0x49, 0xe8, 0xd2, 0x58, 0x8d, 0x68, 0x0f, 0x1f, 0x29, 0xec, 0xb5, 0x82, 0xd0, 0x39, 0x84, - 0x4c, 0xd8, 0x84, 0x4e, 0xb8, 0x60, 0x52, 0x0d, 0xe7, 0x10, 0xd7, 0x98, 0xe8, 0x67, 0xc0, 0xf3, - 0xb2, 0x06, 0x8c, 0xef, 0x00, 0xa2, 0xd5, 0x76, 0x14, 0x91, 0x04, 0x3a, 0x83, 0xfb, 0x6a, 0x88, - 0xf9, 0x7a, 0x64, 0x07, 0xd4, 0x85, 0x07, 0x2c, 0xba, 0x0c, 0xf8, 0x2c, 0x5d, 0x88, 0xb4, 0x80, - 0x87, 0x3b, 0x0b, 0x48, 0x13, 0x14, 0x56, 0x98, 0x7a, 0x3c, 0x26, 0xb8, 0xd0, 0xa1, 0x17, 0xf0, - 0x90, 0x27, 0x32, 0xf3, 0xa8, 0xdc, 0xce, 0x63, 0x25, 0x34, 0x38, 0x3c, 0xdd, 0x41, 0xd8, 0x6a, - 0x04, 0x6c, 0x37, 0xb2, 0xee, 0xba, 0x7c, 0x8b, 0xae, 0x8d, 0x8f, 0x10, 0xa6, 0x8b, 0xd0, 0xcd, - 0x9a, 0xdf, 0x5d, 0xce, 0xbf, 0x59, 0xf7, 0xe8, 0xd5, 0x42, 0x07, 0xd7, 0x0b, 0x1d, 0xfc, 0x5a, - 0xe8, 0xe0, 0xdb, 0x52, 0x2f, 0x5d, 0x2f, 0xf5, 0xd2, 0x8f, 0xa5, 0x5e, 0xfa, 0xf4, 0xd2, 0x67, - 0x72, 0x94, 0xb8, 0xa6, 0xc7, 0x43, 0x6b, 0x50, 0x54, 0x34, 0x74, 0x5c, 0x61, 0xad, 0x0a, 0x7b, - 0xec, 0xf1, 0x98, 0x6e, 0x1e, 0x47, 0x0e, 0x8b, 0xac, 0x90, 0x93, 0x24, 0xa0, 0x22, 0x7f, 0x3d, - 0xe4, 0x7c, 0x42, 0x85, 0x5b, 0x55, 0x8f, 0xc1, 0xd3, 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x27, - 0xa5, 0xb0, 0x31, 0x5d, 0x04, 0x00, 0x00, + // 621 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x54, 0xdf, 0x6a, 0xdb, 0x3e, + 0x18, 0x8d, 0x92, 0xfe, 0x8b, 0xda, 0xa6, 0x54, 0xed, 0x0f, 0x4c, 0x7f, 0x34, 0xcd, 0xd2, 0x96, + 0x85, 0xc1, 0x6c, 0xd2, 0xb1, 0x9b, 0xdd, 0x35, 0xcb, 0x4d, 0x58, 0xb7, 0x16, 0xd1, 0x31, 0xb6, + 0x1b, 0x23, 0x5b, 0xaa, 0xab, 0xd5, 0xb6, 0x82, 0x24, 0xa7, 0xe4, 0x21, 0x06, 0x7b, 0x96, 0x3d, + 0x45, 0x2f, 0x7b, 0x39, 0x06, 0x2b, 0xa3, 0x7d, 0x91, 0x61, 0xc9, 0xf9, 0x33, 0x12, 0x06, 0xdd, + 0x9d, 0xbf, 0xe3, 0xf3, 0x1d, 0xe9, 0x3b, 0xe7, 0x43, 0x70, 0x9f, 0xa7, 0x9f, 0x59, 0xa8, 0xf9, + 0x80, 0x79, 0x7d, 0x16, 0x45, 0x43, 0x6f, 0xd0, 0xf6, 0x24, 0xd1, 0xcc, 0x8f, 0x79, 0xc2, 0xb5, + 0xdb, 0x97, 0x42, 0x0b, 0x84, 0xc6, 0x24, 0xd7, 0x90, 0xdc, 0x41, 0x7b, 0x67, 0x3b, 0x12, 0x91, + 0x30, 0xbf, 0xbd, 0xfc, 0xcb, 0x32, 0x77, 0x0e, 0x27, 0x72, 0x42, 0x92, 0x30, 0x66, 0xde, 0xa0, + 0x1d, 0x30, 0x4d, 0xda, 0x45, 0x69, 0x69, 0xcd, 0x9f, 0x15, 0x58, 0xc5, 0x44, 0xb3, 0x93, 0xfc, + 0x10, 0xb4, 0x0f, 0xd7, 0xb5, 0xb8, 0x62, 0xa9, 0x4f, 0x28, 0x95, 0x4c, 0x29, 0x07, 0x34, 0x40, + 0xab, 0x8a, 0xd7, 0x0c, 0x78, 0x6c, 0x31, 0x74, 0x08, 0x6b, 0x96, 0x44, 0x59, 0xc8, 0x13, 0x12, + 0x2b, 0xa7, 0xdc, 0x00, 0xad, 0x75, 0x6c, 0x5b, 0xbb, 0x05, 0x88, 0x0e, 0x46, 0xb4, 0xbe, 0xe4, + 0x21, 0xf3, 0x39, 0x75, 0x2a, 0x53, 0x62, 0x67, 0x39, 0xd8, 0xa3, 0xe8, 0x19, 0xdc, 0x9c, 0x0c, + 0xe9, 0x5f, 0xf3, 0x94, 0x8a, 0x6b, 0x67, 0xa1, 0x01, 0x5a, 0x0b, 0x78, 0x43, 0x8e, 0xee, 0xf5, + 0xc1, 0xc0, 0xa8, 0x07, 0x6b, 0x53, 0xdc, 0x4c, 0x51, 0x67, 0x31, 0x57, 0xec, 0xec, 0xdf, 0xdc, + 0xed, 0x95, 0x7e, 0xdc, 0xed, 0xfd, 0x1f, 0x0a, 0x95, 0x08, 0xa5, 0xe8, 0x95, 0xcb, 0x85, 0x97, + 0x10, 0x7d, 0xe9, 0x9e, 0xb0, 0x88, 0x84, 0xc3, 0x2e, 0x0b, 0xf1, 0xda, 0x58, 0xed, 0xbd, 0xa2, + 0xe8, 0x14, 0x6e, 0x91, 0x40, 0x89, 0x38, 0xd3, 0xcc, 0x4f, 0x78, 0xaa, 0xad, 0xa6, 0xb3, 0x64, + 0xf4, 0xf6, 0x0a, 0xbd, 0xff, 0x66, 0xf5, 0x7a, 0xa9, 0x76, 0x00, 0xde, 0x1c, 0xf5, 0xbe, 0xe5, + 0xa9, 0xb6, 0xce, 0x75, 0x61, 0x55, 0x4b, 0x92, 0xaa, 0x0b, 0x26, 0x95, 0xb3, 0xdc, 0xa8, 0xb4, + 0x56, 0x8f, 0x9a, 0xee, 0x6c, 0x58, 0x6e, 0x47, 0x72, 0x1a, 0xb1, 0xf3, 0x82, 0xda, 0x29, 0x3b, + 0x00, 0x4f, 0x1a, 0xd1, 0x19, 0xdc, 0xb4, 0x9e, 0xd9, 0x8c, 0x7c, 0x3d, 0xec, 0x33, 0x67, 0xa5, + 0x01, 0x5a, 0xb5, 0xa3, 0x83, 0x29, 0xb5, 0x22, 0xc1, 0x22, 0x50, 0xf7, 0xd4, 0x94, 0xe7, 0xc3, + 0x3e, 0xc3, 0x1b, 0xa6, 0x7d, 0x02, 0x34, 0xbf, 0x00, 0x58, 0xfb, 0xf3, 0x4c, 0xf4, 0x12, 0x2e, + 0x91, 0x44, 0x64, 0xf9, 0x24, 0x66, 0xdc, 0xdd, 0xbf, 0x8e, 0x8b, 0x0b, 0x32, 0x7a, 0x02, 0xd7, + 0x82, 0x58, 0x84, 0x57, 0x7e, 0x9a, 0x25, 0x01, 0x93, 0x26, 0xf4, 0x05, 0xbc, 0x6a, 0xb0, 0x77, + 0x06, 0x42, 0xbb, 0x10, 0x72, 0xe5, 0x53, 0xd6, 0x17, 0x8a, 0x6b, 0x13, 0xf7, 0x0a, 0xae, 0x72, + 0xd5, 0xb5, 0xc0, 0xab, 0xb2, 0x03, 0x9a, 0xdf, 0x00, 0x44, 0xe3, 0x7d, 0x3b, 0x1f, 0x0f, 0xbe, + 0x0d, 0x17, 0xcd, 0xcd, 0x8b, 0x85, 0xb3, 0x05, 0x3a, 0x86, 0xcb, 0x3c, 0xbd, 0x88, 0xc5, 0x75, + 0xbe, 0x62, 0xb9, 0xa5, 0x4f, 0xe7, 0x5a, 0x9a, 0xdf, 0x60, 0x24, 0x85, 0x59, 0x28, 0x24, 0xc5, + 0xa3, 0x3e, 0xf4, 0x1a, 0xae, 0x88, 0x4c, 0x5b, 0x8d, 0xca, 0xe3, 0x34, 0xc6, 0x8d, 0x4d, 0x01, + 0xb7, 0xe6, 0x10, 0x66, 0x1c, 0x01, 0xb3, 0x8e, 0x4c, 0xbc, 0x2e, 0x3f, 0xc2, 0xeb, 0xe6, 0x47, + 0x08, 0xf3, 0xd5, 0x3a, 0xb6, 0xce, 0xcf, 0x37, 0xe7, 0xdf, 0xa4, 0x3b, 0xec, 0xe6, 0xbe, 0x0e, + 0x6e, 0xef, 0xeb, 0xe0, 0xd7, 0x7d, 0x1d, 0x7c, 0x7d, 0xa8, 0x97, 0x6e, 0x1f, 0xea, 0xa5, 0xef, + 0x0f, 0xf5, 0xd2, 0xa7, 0x37, 0x11, 0xd7, 0x97, 0x59, 0xe0, 0x86, 0x22, 0xf1, 0x7a, 0x23, 0x8b, + 0x4e, 0x48, 0xa0, 0xbc, 0xb1, 0x61, 0xcf, 0x43, 0x21, 0xd9, 0x74, 0x79, 0x49, 0x78, 0xea, 0x25, + 0x82, 0x66, 0x31, 0x53, 0xc5, 0xb3, 0x95, 0xef, 0xac, 0x0a, 0x96, 0xcc, 0xf3, 0xf2, 0xe2, 0x77, + 0x00, 0x00, 0x00, 0xff, 0xff, 0x6a, 0x64, 0x06, 0x99, 0xd6, 0x04, 0x00, 0x00, } func (m *RateLimit) Marshal() (dAtA []byte, err error) { @@ -397,6 +412,11 @@ func (m *RateLimit) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.TokenOracleType != 0 { + i = encodeVarintRateLimit(dAtA, i, uint64(m.TokenOracleType)) + i-- + dAtA[i] = 0x40 + } if len(m.Transfers) > 0 { for iNdEx := len(m.Transfers) - 1; iNdEx >= 0; iNdEx-- { { @@ -683,6 +703,9 @@ func (m *RateLimit) Size() (n int) { n += 1 + l + sovRateLimit(uint64(l)) } } + if m.TokenOracleType != 0 { + n += 1 + sovRateLimit(uint64(m.TokenOracleType)) + } return n } @@ -996,6 +1019,25 @@ func (m *RateLimit) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 8: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field TokenOracleType", wireType) + } + m.TokenOracleType = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRateLimit + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.TokenOracleType |= types.OracleType(b&0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipRateLimit(dAtA[iNdEx:]) diff --git a/proto/injective/peggy/v1/msgs.proto b/proto/injective/peggy/v1/msgs.proto index 36fbf0c72..64a34a17d 100644 --- a/proto/injective/peggy/v1/msgs.proto +++ b/proto/injective/peggy/v1/msgs.proto @@ -8,6 +8,7 @@ import "amino/amino.proto"; import "cosmos/base/v1beta1/coin.proto"; import "cosmos/msg/v1/msg.proto"; import "cosmos_proto/cosmos.proto"; +import "injective/oracle/v1beta1/oracle.proto"; import "injective/peggy/v1/types.proto"; import "injective/peggy/v1/params.proto"; import "injective/peggy/v1/rate_limit.proto"; @@ -383,7 +384,8 @@ message MsgCreateRateLimit { // decimals of the ERC20 token uint32 token_decimals = 3; - // a Pyth-specific ID used to obtain USD price of the ERC20 token + // unique ID used to obtain the notional USD value of the ERC20 token from + // oracle string token_price_id = 4; // the notional USD limit imposed on all outgoing traffic (per token) @@ -402,6 +404,10 @@ message MsgCreateRateLimit { // length of the sliding window in which inbound (outbound) traffic is // measured uint64 rate_limit_window = 7; + + // token_oracle_type is used to obtain the USD price of the ERC20 token (in + // relation with token_price_id) + injective.oracle.v1beta1.OracleType token_oracle_type = 8; } message MsgCreateRateLimitResponse {} @@ -416,7 +422,8 @@ message MsgUpdateRateLimit { // token_address is the address of rate limited token string token_address = 2; - // new_token_price_id is the new Pyth price ID of the rate limited token + // unique ID used to obtain the notional USD value of the ERC20 token from + // oracle string new_token_price_id = 3; // new_rate_limit_usd is the new notional limit (on withdrawals) in USD @@ -427,6 +434,10 @@ message MsgUpdateRateLimit { // new_rate_limit_window is the new length of the sliding window uint64 new_rate_limit_window = 5; + + // new_token_oracle_type is used to obtain the USD price of the ERC20 token + // (in relation with token_price_id) + injective.oracle.v1beta1.OracleType new_token_oracle_type = 6; } message MsgUpdateRateLimitResponse {} @@ -442,4 +453,4 @@ message MsgRemoveRateLimit { string token_address = 2; } -message MsgRemoveRateLimitResponse {} \ No newline at end of file +message MsgRemoveRateLimitResponse {} diff --git a/proto/injective/peggy/v1/rate_limit.proto b/proto/injective/peggy/v1/rate_limit.proto index c174cda56..3d6e9cc05 100644 --- a/proto/injective/peggy/v1/rate_limit.proto +++ b/proto/injective/peggy/v1/rate_limit.proto @@ -4,6 +4,7 @@ package injective.peggy.v1; option go_package = "github.com/InjectiveLabs/injective-core/injective-chain/modules/peggy/types"; import "gogoproto/gogo.proto"; +import "injective/oracle/v1beta1/oracle.proto"; message RateLimit { // address of the ERC20 token @@ -12,7 +13,8 @@ message RateLimit { // decimals of the ERC20 token uint32 token_decimals = 2; - // a Pyth-specific ID used to obtain USD price of the ERC20 token + // unique ID used to obtain the notional USD value of the ERC20 token from + // oracle string token_price_id = 3; // length of the sliding window in which inbound (outbound) traffic is @@ -34,6 +36,10 @@ message RateLimit { // transfers that occurred within the sliding window repeated BridgeTransfer transfers = 7 [ deprecated = true ]; + + // oracle type used to obtain the USD price of the ERC20 token (in relation + // with token_price_id) + injective.oracle.v1beta1.OracleType token_oracle_type = 8; } message BridgeTransfer { @@ -83,4 +89,4 @@ message MintAmount { (gogoproto.customtype) = "cosmossdk.io/math.Int", (gogoproto.nullable) = false ]; -} \ No newline at end of file +}