diff --git a/CHANGELOG.md b/CHANGELOG.md index 7de94a1851ce..11e27540118b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -42,7 +42,6 @@ Ref: https://keepachangelog.com/en/1.0.0/ * (x/staking) [#1730](https://github.com/crypto-org-chain/cosmos-sdk/pull/1730) Normalize cache validator queue key to be UTC. * (x/staking) [#1725](https://github.com/crypto-org-chain/cosmos-sdk/pull/1725) Optimize staking endblocker execution by caching queue entries from iterators. -* (x/staking) [#22795](https://github.com/cosmos/cosmos-sdk/pull/22795) `NewUnbondingDelegationEntry`, `NewUnbondingDelegation`, `AddEntry`, `NewRedelegationEntry`, `NewRedelegation` and `NewRedelegationEntryResponse` no longer take an ID in there function signatures. AfterUnbondingInitiated hook has been removed as it is no longer required by ICS. Keys `stakingtypes.UnbondingIDKey, stakingtypes.UnbondingIndexKey, stakingtypes.UnbondingTypeKey` have been removed as they are no longer required by ICS. * (baseapp) [#205](https://github.com/crypto-org-chain/cosmos-sdk/pull/205) Add `TxExecutor` baseapp option, add `TxIndex`/`TxCount`/`MsgIndex`/`BlockGasUsed` fields to `Context, to support tx parallel execution. * (baseapp) [#206](https://github.com/crypto-org-chain/cosmos-sdk/pull/206) Support mount object store in baseapp, add `ObjectStore` api in context, [#585](https://github.com/crypto-org-chain/cosmos-sdk/pull/585) Skip snapshot for object store. * (bank) [#237](https://github.com/crypto-org-chain/cosmos-sdk/pull/237) Support virtual accounts in sending coins. diff --git a/api/cosmos/staking/v1beta1/staking.pulsar.go b/api/cosmos/staking/v1beta1/staking.pulsar.go index 1c60a28d19f5..9ec8314f45ca 100644 --- a/api/cosmos/staking/v1beta1/staking.pulsar.go +++ b/api/cosmos/staking/v1beta1/staking.pulsar.go @@ -13515,8 +13515,6 @@ type UnbondingDelegationEntry struct { // balance defines the tokens to receive at completion. Balance string `protobuf:"bytes,4,opt,name=balance,proto3" json:"balance,omitempty"` // Incrementing id that uniquely identifies this entry - // - // Deprecated: Do not use. UnbondingId uint64 `protobuf:"varint,5,opt,name=unbonding_id,json=unbondingId,proto3" json:"unbonding_id,omitempty"` // Strictly positive if this entry's unbonding has been stopped by external modules UnbondingOnHoldRefCount int64 `protobuf:"varint,6,opt,name=unbonding_on_hold_ref_count,json=unbondingOnHoldRefCount,proto3" json:"unbonding_on_hold_ref_count,omitempty"` @@ -13570,7 +13568,6 @@ func (x *UnbondingDelegationEntry) GetBalance() string { return "" } -// Deprecated: Do not use. func (x *UnbondingDelegationEntry) GetUnbondingId() uint64 { if x != nil { return x.UnbondingId @@ -14237,7 +14234,7 @@ var file_cosmos_staking_v1beta1_staking_proto_rawDesc = []byte{ 0x2e, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x3a, 0x08, 0x88, - 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0x22, 0x9f, 0x03, 0x0a, 0x18, 0x55, 0x6e, 0x62, 0x6f, + 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0x22, 0x9b, 0x03, 0x0a, 0x18, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x63, @@ -14256,177 +14253,177 @@ var file_cosmos_staking_v1beta1_staking_proto_rawDesc = []byte{ 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x2b, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x15, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x49, 0x6e, 0x74, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, - 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x25, + 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x04, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0b, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x49, 0x64, 0x12, 0x3c, 0x0a, 0x1b, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x5f, 0x6f, 0x6e, 0x5f, 0x68, 0x6f, 0x6c, 0x64, 0x5f, 0x72, 0x65, 0x66, 0x5f, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x17, 0x75, 0x6e, 0x62, 0x6f, - 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x4f, 0x6e, 0x48, 0x6f, 0x6c, 0x64, 0x52, 0x65, 0x66, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x3a, 0x04, 0xe8, 0xa0, 0x1f, 0x01, 0x22, 0x9f, 0x03, 0x0a, 0x11, 0x52, 0x65, - 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, - 0x27, 0x0a, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x68, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x52, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x70, - 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0d, 0xc8, - 0xde, 0x1f, 0x00, 0x90, 0xdf, 0x1f, 0x01, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x0e, 0x63, 0x6f, - 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x54, 0x0a, 0x0f, - 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x2b, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x15, 0x63, - 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x6d, 0x61, 0x74, 0x68, - 0x2e, 0x49, 0x6e, 0x74, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x49, - 0x6e, 0x74, 0x52, 0x0e, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x42, 0x61, 0x6c, 0x61, 0x6e, - 0x63, 0x65, 0x12, 0x50, 0x0a, 0x0a, 0x73, 0x68, 0x61, 0x72, 0x65, 0x73, 0x5f, 0x64, 0x73, 0x74, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x31, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x1b, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x49, + 0x64, 0x12, 0x3c, 0x0a, 0x1b, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x6f, + 0x6e, 0x5f, 0x68, 0x6f, 0x6c, 0x64, 0x5f, 0x72, 0x65, 0x66, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x17, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, + 0x67, 0x4f, 0x6e, 0x48, 0x6f, 0x6c, 0x64, 0x52, 0x65, 0x66, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x3a, + 0x04, 0xe8, 0xa0, 0x1f, 0x01, 0x22, 0x9f, 0x03, 0x0a, 0x11, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, + 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x27, 0x0a, 0x0f, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x65, + 0x69, 0x67, 0x68, 0x74, 0x12, 0x52, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0d, 0xc8, 0xde, 0x1f, 0x00, 0x90, + 0xdf, 0x1f, 0x01, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x0e, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, + 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x54, 0x0a, 0x0f, 0x69, 0x6e, 0x69, 0x74, + 0x69, 0x61, 0x6c, 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x2b, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x15, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x49, 0x6e, 0x74, + 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x52, 0x0e, + 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x50, + 0x0a, 0x0a, 0x73, 0x68, 0x61, 0x72, 0x65, 0x73, 0x5f, 0x64, 0x73, 0x74, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x31, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x1b, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x4c, 0x65, + 0x67, 0x61, 0x63, 0x79, 0x44, 0x65, 0x63, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2e, 0x44, 0x65, 0x63, 0x52, 0x09, 0x73, 0x68, 0x61, 0x72, 0x65, 0x73, 0x44, 0x73, 0x74, + 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x64, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, + 0x67, 0x49, 0x64, 0x12, 0x3c, 0x0a, 0x1b, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, + 0x5f, 0x6f, 0x6e, 0x5f, 0x68, 0x6f, 0x6c, 0x64, 0x5f, 0x72, 0x65, 0x66, 0x5f, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x17, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, + 0x69, 0x6e, 0x67, 0x4f, 0x6e, 0x48, 0x6f, 0x6c, 0x64, 0x52, 0x65, 0x66, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x3a, 0x04, 0xe8, 0xa0, 0x1f, 0x01, 0x22, 0xdd, 0x02, 0x0a, 0x0c, 0x52, 0x65, 0x64, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x45, 0x0a, 0x11, 0x64, 0x65, 0x6c, 0x65, + 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x10, 0x64, + 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, + 0x55, 0x0a, 0x15, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x73, 0x72, 0x63, + 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x21, + 0xd2, 0xb4, 0x2d, 0x1d, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x52, 0x13, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x72, 0x63, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x55, 0x0a, 0x15, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x6f, 0x72, 0x5f, 0x64, 0x73, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x21, 0xd2, 0xb4, 0x2d, 0x1d, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x13, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x6f, 0x72, 0x44, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x4e, 0x0a, + 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, + 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, + 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x3a, 0x08, 0x88, + 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0x22, 0x9c, 0x03, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x73, 0x12, 0x4f, 0x0a, 0x0e, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, + 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x0d, 0xc8, 0xde, 0x1f, 0x00, 0x98, 0xdf, 0x1f, 0x01, 0xa8, + 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x0d, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x54, + 0x69, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x6d, 0x61, 0x78, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x6d, 0x61, 0x78, + 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x61, + 0x78, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x0a, 0x6d, 0x61, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x2d, 0x0a, 0x12, 0x68, + 0x69, 0x73, 0x74, 0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, + 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x11, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x69, + 0x63, 0x61, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x6f, + 0x6e, 0x64, 0x5f, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x62, 0x6f, 0x6e, 0x64, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x12, 0x84, 0x01, 0x0a, 0x13, 0x6d, 0x69, + 0x6e, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x61, 0x74, + 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, 0x54, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, + 0x1b, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x6d, 0x61, + 0x74, 0x68, 0x2e, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x44, 0x65, 0x63, 0xf2, 0xde, 0x1f, 0x1a, + 0x79, 0x61, 0x6d, 0x6c, 0x3a, 0x22, 0x6d, 0x69, 0x6e, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x22, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x44, 0x65, 0x63, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x11, 0x6d, + 0x69, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x61, 0x74, 0x65, + 0x3a, 0x24, 0xe8, 0xa0, 0x1f, 0x01, 0x8a, 0xe7, 0xb0, 0x2a, 0x1b, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x78, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2f, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0xa9, 0x01, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x67, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4d, 0x0a, + 0x0a, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, + 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, + 0x52, 0x0a, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3e, 0x0a, 0x07, + 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, + 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, + 0xb0, 0x2a, 0x01, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x3a, 0x04, 0xe8, 0xa0, + 0x1f, 0x00, 0x22, 0xcd, 0x01, 0x0a, 0x19, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x63, 0x0a, 0x12, 0x72, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, + 0x2a, 0x01, 0x52, 0x11, 0x72, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x45, 0x0a, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x2b, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x15, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x6d, 0x61, 0x74, - 0x68, 0x2e, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x44, 0x65, 0x63, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, - 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x44, 0x65, 0x63, 0x52, 0x09, 0x73, 0x68, 0x61, 0x72, 0x65, - 0x73, 0x44, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, - 0x67, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x75, 0x6e, 0x62, 0x6f, - 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x49, 0x64, 0x12, 0x3c, 0x0a, 0x1b, 0x75, 0x6e, 0x62, 0x6f, 0x6e, - 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x6f, 0x6e, 0x5f, 0x68, 0x6f, 0x6c, 0x64, 0x5f, 0x72, 0x65, 0x66, - 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x17, 0x75, 0x6e, - 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x4f, 0x6e, 0x48, 0x6f, 0x6c, 0x64, 0x52, 0x65, 0x66, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x3a, 0x04, 0xe8, 0xa0, 0x1f, 0x01, 0x22, 0xdd, 0x02, 0x0a, 0x0c, - 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x45, 0x0a, 0x11, - 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, - 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x52, 0x10, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x12, 0x55, 0x0a, 0x15, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, - 0x5f, 0x73, 0x72, 0x63, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x21, 0xd2, 0xb4, 0x2d, 0x1d, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x56, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, - 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x13, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, - 0x53, 0x72, 0x63, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x55, 0x0a, 0x15, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x64, 0x73, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x21, 0xd2, 0xb4, 0x2d, 0x1d, 0x63, - 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x13, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x12, 0x4e, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, - 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x64, 0x65, - 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x09, 0xc8, - 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, - 0x73, 0x3a, 0x08, 0x88, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0x22, 0x9c, 0x03, 0x0a, 0x06, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x4f, 0x0a, 0x0e, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x0d, 0xc8, 0xde, 0x1f, 0x00, 0x98, - 0xdf, 0x1f, 0x01, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x0d, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x6d, 0x61, 0x78, 0x5f, 0x76, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x0d, 0x6d, 0x61, 0x78, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x1f, - 0x0a, 0x0b, 0x6d, 0x61, 0x78, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x6d, 0x61, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, - 0x2d, 0x0a, 0x12, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x5f, 0x65, 0x6e, - 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x11, 0x68, 0x69, 0x73, - 0x74, 0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x1d, - 0x0a, 0x0a, 0x62, 0x6f, 0x6e, 0x64, 0x5f, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x62, 0x6f, 0x6e, 0x64, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x12, 0x84, 0x01, - 0x0a, 0x13, 0x6d, 0x69, 0x6e, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, 0x54, 0xc8, 0xde, 0x1f, - 0x00, 0xda, 0xde, 0x1f, 0x1b, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, - 0x6f, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x44, 0x65, 0x63, - 0xf2, 0xde, 0x1f, 0x1a, 0x79, 0x61, 0x6d, 0x6c, 0x3a, 0x22, 0x6d, 0x69, 0x6e, 0x5f, 0x63, 0x6f, - 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x22, 0xd2, 0xb4, - 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x44, 0x65, 0x63, 0xa8, 0xe7, 0xb0, 0x2a, - 0x01, 0x52, 0x11, 0x6d, 0x69, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x52, 0x61, 0x74, 0x65, 0x3a, 0x24, 0xe8, 0xa0, 0x1f, 0x01, 0x8a, 0xe7, 0xb0, 0x2a, 0x1b, 0x63, - 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x78, 0x2f, 0x73, 0x74, 0x61, 0x6b, - 0x69, 0x6e, 0x67, 0x2f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0xa9, 0x01, 0x0a, 0x12, 0x44, - 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x4d, 0x0a, 0x0a, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, - 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, - 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, - 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x0a, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x3e, 0x0a, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x09, 0xc8, 0xde, - 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, - 0x3a, 0x04, 0xe8, 0xa0, 0x1f, 0x00, 0x22, 0xcd, 0x01, 0x0a, 0x19, 0x52, 0x65, 0x64, 0x65, 0x6c, + 0x68, 0x2e, 0x49, 0x6e, 0x74, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, + 0x49, 0x6e, 0x74, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x3a, 0x04, 0xe8, 0xa0, + 0x1f, 0x01, 0x22, 0xc9, 0x01, 0x0a, 0x14, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x53, 0x0a, 0x0c, 0x72, + 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, + 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x64, 0x65, 0x6c, + 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, + 0x2a, 0x01, 0x52, 0x0c, 0x72, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x56, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x31, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, + 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x63, 0x0a, 0x12, 0x72, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x29, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, - 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, - 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x09, 0xc8, 0xde, 0x1f, - 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x11, 0x72, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x45, 0x0a, 0x07, 0x62, 0x61, 0x6c, - 0x61, 0x6e, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x2b, 0xc8, 0xde, 0x1f, 0x00, - 0xda, 0xde, 0x1f, 0x15, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, - 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x49, 0x6e, 0x74, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, - 0x6d, 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, - 0x3a, 0x04, 0xe8, 0xa0, 0x1f, 0x01, 0x22, 0xc9, 0x01, 0x0a, 0x14, 0x52, 0x65, 0x64, 0x65, 0x6c, - 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x53, 0x0a, 0x0c, 0x72, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, - 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, - 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x09, 0xc8, 0xde, 0x1f, - 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x0c, 0x72, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x56, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, - 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, - 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, - 0xb0, 0x2a, 0x01, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x3a, 0x04, 0xe8, 0xa0, - 0x1f, 0x00, 0x22, 0xeb, 0x01, 0x0a, 0x04, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x71, 0x0a, 0x11, 0x6e, - 0x6f, 0x74, 0x5f, 0x62, 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x45, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x15, - 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x6d, 0x61, 0x74, - 0x68, 0x2e, 0x49, 0x6e, 0x74, 0xea, 0xde, 0x1f, 0x11, 0x6e, 0x6f, 0x74, 0x5f, 0x62, 0x6f, 0x6e, - 0x64, 0x65, 0x64, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, - 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x0f, 0x6e, - 0x6f, 0x74, 0x42, 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x12, 0x66, - 0x0a, 0x0d, 0x62, 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x41, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x15, 0x63, - 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x6d, 0x61, 0x74, 0x68, - 0x2e, 0x49, 0x6e, 0x74, 0xea, 0xde, 0x1f, 0x0d, 0x62, 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x5f, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, - 0x49, 0x6e, 0x74, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x0c, 0x62, 0x6f, 0x6e, 0x64, 0x65, 0x64, - 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x3a, 0x08, 0xe8, 0xa0, 0x1f, 0x01, 0xf0, 0xa0, 0x1f, 0x01, - 0x22, 0x59, 0x0a, 0x10, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x73, 0x12, 0x45, 0x0a, 0x07, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x6d, 0x69, - 0x6e, 0x74, 0x2e, 0x61, 0x62, 0x63, 0x69, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, - 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, - 0x2a, 0x01, 0x52, 0x07, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x2a, 0xb6, 0x01, 0x0a, 0x0a, - 0x42, 0x6f, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2c, 0x0a, 0x17, 0x42, 0x4f, - 0x4e, 0x44, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, - 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x1a, 0x0f, 0x8a, 0x9d, 0x20, 0x0b, 0x55, 0x6e, 0x73, - 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x12, 0x26, 0x0a, 0x14, 0x42, 0x4f, 0x4e, 0x44, - 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x42, 0x4f, 0x4e, 0x44, 0x45, 0x44, - 0x10, 0x01, 0x1a, 0x0c, 0x8a, 0x9d, 0x20, 0x08, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x65, 0x64, - 0x12, 0x28, 0x0a, 0x15, 0x42, 0x4f, 0x4e, 0x44, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, - 0x55, 0x4e, 0x42, 0x4f, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x1a, 0x0d, 0x8a, 0x9d, 0x20, - 0x09, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x22, 0x0a, 0x12, 0x42, 0x4f, - 0x4e, 0x44, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x42, 0x4f, 0x4e, 0x44, 0x45, 0x44, - 0x10, 0x03, 0x1a, 0x0a, 0x8a, 0x9d, 0x20, 0x06, 0x42, 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x1a, 0x04, - 0x88, 0xa3, 0x1e, 0x00, 0x2a, 0x5d, 0x0a, 0x0a, 0x49, 0x6e, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x16, 0x49, 0x4e, 0x46, 0x52, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, - 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1a, - 0x0a, 0x16, 0x49, 0x4e, 0x46, 0x52, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x4f, 0x55, - 0x42, 0x4c, 0x45, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, 0x49, 0x4e, - 0x46, 0x52, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x54, 0x49, 0x4d, - 0x45, 0x10, 0x02, 0x42, 0xdc, 0x01, 0x0a, 0x1a, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, - 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x42, 0x0c, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x50, 0x01, 0x5a, 0x36, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b, - 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x3b, 0x73, 0x74, 0x61, 0x6b, - 0x69, 0x6e, 0x67, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x43, 0x53, 0x58, - 0xaa, 0x02, 0x16, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, - 0x67, 0x2e, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xca, 0x02, 0x16, 0x43, 0x6f, 0x73, 0x6d, - 0x6f, 0x73, 0x5c, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0xe2, 0x02, 0x22, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x53, 0x74, 0x61, 0x6b, - 0x69, 0x6e, 0x67, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x18, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, - 0x3a, 0x3a, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, + 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x3a, 0x04, 0xe8, 0xa0, 0x1f, 0x00, 0x22, 0xeb, + 0x01, 0x0a, 0x04, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x71, 0x0a, 0x11, 0x6e, 0x6f, 0x74, 0x5f, 0x62, + 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x45, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x15, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x49, 0x6e, + 0x74, 0xea, 0xde, 0x1f, 0x11, 0x6e, 0x6f, 0x74, 0x5f, 0x62, 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x5f, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x2e, 0x49, 0x6e, 0x74, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x0f, 0x6e, 0x6f, 0x74, 0x42, 0x6f, + 0x6e, 0x64, 0x65, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x12, 0x66, 0x0a, 0x0d, 0x62, 0x6f, + 0x6e, 0x64, 0x65, 0x64, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x41, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x15, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x49, 0x6e, 0x74, + 0xea, 0xde, 0x1f, 0x0d, 0x62, 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, + 0x73, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0xa8, + 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x0c, 0x62, 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x73, 0x3a, 0x08, 0xe8, 0xa0, 0x1f, 0x01, 0xf0, 0xa0, 0x1f, 0x01, 0x22, 0x59, 0x0a, 0x10, + 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, + 0x12, 0x45, 0x0a, 0x07, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x20, 0x2e, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x6d, 0x69, 0x6e, 0x74, 0x2e, 0x61, + 0x62, 0x63, 0x69, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x07, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x2a, 0xb6, 0x01, 0x0a, 0x0a, 0x42, 0x6f, 0x6e, 0x64, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2c, 0x0a, 0x17, 0x42, 0x4f, 0x4e, 0x44, 0x5f, 0x53, + 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, + 0x44, 0x10, 0x00, 0x1a, 0x0f, 0x8a, 0x9d, 0x20, 0x0b, 0x55, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x69, + 0x66, 0x69, 0x65, 0x64, 0x12, 0x26, 0x0a, 0x14, 0x42, 0x4f, 0x4e, 0x44, 0x5f, 0x53, 0x54, 0x41, + 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x42, 0x4f, 0x4e, 0x44, 0x45, 0x44, 0x10, 0x01, 0x1a, 0x0c, + 0x8a, 0x9d, 0x20, 0x08, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x12, 0x28, 0x0a, 0x15, + 0x42, 0x4f, 0x4e, 0x44, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x42, 0x4f, + 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x1a, 0x0d, 0x8a, 0x9d, 0x20, 0x09, 0x55, 0x6e, 0x62, + 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x22, 0x0a, 0x12, 0x42, 0x4f, 0x4e, 0x44, 0x5f, 0x53, + 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x42, 0x4f, 0x4e, 0x44, 0x45, 0x44, 0x10, 0x03, 0x1a, 0x0a, + 0x8a, 0x9d, 0x20, 0x06, 0x42, 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x1a, 0x04, 0x88, 0xa3, 0x1e, 0x00, + 0x2a, 0x5d, 0x0a, 0x0a, 0x49, 0x6e, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, + 0x0a, 0x16, 0x49, 0x4e, 0x46, 0x52, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, + 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x49, 0x4e, + 0x46, 0x52, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x4f, 0x55, 0x42, 0x4c, 0x45, 0x5f, + 0x53, 0x49, 0x47, 0x4e, 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, 0x49, 0x4e, 0x46, 0x52, 0x41, 0x43, + 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x10, 0x02, 0x42, + 0xdc, 0x01, 0x0a, 0x1a, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, + 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, 0x0c, + 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x36, + 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2f, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x3b, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x43, 0x53, 0x58, 0xaa, 0x02, 0x16, 0x43, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x56, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0xca, 0x02, 0x16, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x53, + 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xe2, 0x02, + 0x22, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x5c, + 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0xea, 0x02, 0x18, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x3a, 0x3a, 0x53, 0x74, + 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/proto/cosmos/staking/v1beta1/staking.proto b/proto/cosmos/staking/v1beta1/staking.proto index ad872dd31a03..24ec65d10202 100644 --- a/proto/cosmos/staking/v1beta1/staking.proto +++ b/proto/cosmos/staking/v1beta1/staking.proto @@ -245,7 +245,7 @@ message UnbondingDelegationEntry { (gogoproto.nullable) = false ]; // Incrementing id that uniquely identifies this entry - uint64 unbonding_id = 5 [deprecated = true]; + uint64 unbonding_id = 5; // Strictly positive if this entry's unbonding has been stopped by external modules int64 unbonding_on_hold_ref_count = 6; diff --git a/simapp/sim_test.go b/simapp/sim_test.go index 3956eccd1031..2f4504cedf3e 100644 --- a/simapp/sim_test.go +++ b/simapp/sim_test.go @@ -194,7 +194,8 @@ func TestAppImportExport(t *testing.T) { skipPrefixes := map[string][][]byte{ stakingtypes.StoreKey: { stakingtypes.UnbondingQueueKey, stakingtypes.RedelegationQueueKey, stakingtypes.ValidatorQueueKey, - stakingtypes.HistoricalInfoKey, stakingtypes.ValidatorUpdatesKey, + stakingtypes.HistoricalInfoKey, stakingtypes.UnbondingIDKey, stakingtypes.UnbondingIndexKey, + stakingtypes.UnbondingTypeKey, stakingtypes.ValidatorUpdatesKey, }, authzkeeper.StoreKey: {authzkeeper.GrantQueuePrefix}, feegrant.StoreKey: {feegrant.FeeAllowanceQueueKeyPrefix}, diff --git a/tests/integration/staking/keeper/determinstic_test.go b/tests/integration/staking/keeper/determinstic_test.go index 72ce34dafeca..1e106d31076f 100644 --- a/tests/integration/staking/keeper/determinstic_test.go +++ b/tests/integration/staking/keeper/determinstic_test.go @@ -464,7 +464,7 @@ func TestGRPCValidatorUnbondingDelegations(t *testing.T) { ValidatorAddr: validator.OperatorAddress, } - testdata.DeterministicIterations(f.ctx, t, req, f.queryClient.ValidatorUnbondingDelegations, 3707, false) + testdata.DeterministicIterations(f.ctx, t, req, f.queryClient.ValidatorUnbondingDelegations, 3719, false) } func TestGRPCDelegation(t *testing.T) { @@ -536,7 +536,7 @@ func TestGRPCUnbondingDelegation(t *testing.T) { DelegatorAddr: delegator1, } - testdata.DeterministicIterations(f.ctx, t, req, f.queryClient.UnbondingDelegation, 1615, false) + testdata.DeterministicIterations(f.ctx, t, req, f.queryClient.UnbondingDelegation, 1621, false) } func TestGRPCDelegatorDelegations(t *testing.T) { @@ -647,7 +647,7 @@ func TestGRPCDelegatorUnbondingDelegations(t *testing.T) { DelegatorAddr: delegator1, } - testdata.DeterministicIterations(f.ctx, t, req, f.queryClient.DelegatorUnbondingDelegations, 1290, false) + testdata.DeterministicIterations(f.ctx, t, req, f.queryClient.DelegatorUnbondingDelegations, 1302, false) } func TestGRPCHistoricalInfo(t *testing.T) { @@ -816,7 +816,7 @@ func TestGRPCRedelegations(t *testing.T) { DstValidatorAddr: validator2, } - testdata.DeterministicIterations(f.ctx, t, req, f.queryClient.Redelegations, 3914, false) + testdata.DeterministicIterations(f.ctx, t, req, f.queryClient.Redelegations, 3920, false) } func TestGRPCParams(t *testing.T) { diff --git a/tests/integration/staking/keeper/msg_server_test.go b/tests/integration/staking/keeper/msg_server_test.go index 2a52fe01e9d9..f84c305795dc 100644 --- a/tests/integration/staking/keeper/msg_server_test.go +++ b/tests/integration/staking/keeper/msg_server_test.go @@ -55,6 +55,7 @@ func TestCancelUnbondingDelegation(t *testing.T) { delegatorAddr, validatorAddr, 10, ctx.BlockTime().Add(time.Minute*10), unbondingAmount.Amount, + 0, address.NewBech32Codec("cosmosvaloper"), address.NewBech32Codec("cosmos"), ) diff --git a/tests/integration/staking/keeper/slash_test.go b/tests/integration/staking/keeper/slash_test.go index d52264f1bddf..9397814b1a72 100644 --- a/tests/integration/staking/keeper/slash_test.go +++ b/tests/integration/staking/keeper/slash_test.go @@ -62,7 +62,7 @@ func TestSlashUnbondingDelegation(t *testing.T) { // set an unbonding delegation with expiration timestamp (beyond which the // unbonding delegation shouldn't be slashed) ubd := types.NewUnbondingDelegation(addrDels[0], addrVals[0], 0, - time.Unix(5, 0), math.NewInt(10), address.NewBech32Codec("cosmosvaloper"), address.NewBech32Codec("cosmos")) + time.Unix(5, 0), math.NewInt(10), 0, address.NewBech32Codec("cosmosvaloper"), address.NewBech32Codec("cosmos")) assert.NilError(t, f.stakingKeeper.SetUnbondingDelegation(f.sdkCtx, ubd)) @@ -121,7 +121,7 @@ func TestSlashRedelegation(t *testing.T) { // set a redelegation with an expiration timestamp beyond which the // redelegation shouldn't be slashed rd := types.NewRedelegation(addrDels[0], addrVals[0], addrVals[1], 0, - time.Unix(5, 0), math.NewInt(10), math.LegacyNewDec(10), address.NewBech32Codec("cosmosvaloper"), address.NewBech32Codec("cosmos")) + time.Unix(5, 0), math.NewInt(10), math.LegacyNewDec(10), 0, address.NewBech32Codec("cosmosvaloper"), address.NewBech32Codec("cosmos")) assert.NilError(t, f.stakingKeeper.SetRedelegation(f.sdkCtx, rd)) @@ -265,7 +265,7 @@ func TestSlashWithUnbondingDelegation(t *testing.T) { // set an unbonding delegation with expiration timestamp beyond which the // unbonding delegation shouldn't be slashed ubdTokens := f.stakingKeeper.TokensFromConsensusPower(f.sdkCtx, 4) - ubd := types.NewUnbondingDelegation(addrDels[0], addrVals[0], 11, time.Unix(0, 0), ubdTokens, address.NewBech32Codec("cosmosvaloper"), address.NewBech32Codec("cosmos")) + ubd := types.NewUnbondingDelegation(addrDels[0], addrVals[0], 11, time.Unix(0, 0), ubdTokens, 0, address.NewBech32Codec("cosmosvaloper"), address.NewBech32Codec("cosmos")) assert.NilError(t, f.stakingKeeper.SetUnbondingDelegation(f.sdkCtx, ubd)) // slash validator for the first time @@ -395,7 +395,7 @@ func TestSlashWithRedelegation(t *testing.T) { // set a redelegation rdTokens := f.stakingKeeper.TokensFromConsensusPower(f.sdkCtx, 6) - rd := types.NewRedelegation(addrDels[0], addrVals[0], addrVals[1], 11, time.Unix(0, 0), rdTokens, math.LegacyNewDecFromInt(rdTokens), address.NewBech32Codec("cosmosvaloper"), address.NewBech32Codec("cosmos")) + rd := types.NewRedelegation(addrDels[0], addrVals[0], addrVals[1], 11, time.Unix(0, 0), rdTokens, math.LegacyNewDecFromInt(rdTokens), 0, address.NewBech32Codec("cosmosvaloper"), address.NewBech32Codec("cosmos")) assert.NilError(t, f.stakingKeeper.SetRedelegation(f.sdkCtx, rd)) // set the associated delegation @@ -553,7 +553,7 @@ func TestSlashBoth(t *testing.T) { // set a redelegation with expiration timestamp beyond which the // redelegation shouldn't be slashed rdATokens := f.stakingKeeper.TokensFromConsensusPower(f.sdkCtx, 6) - rdA := types.NewRedelegation(addrDels[0], addrVals[0], addrVals[1], 11, time.Unix(0, 0), rdATokens, math.LegacyNewDecFromInt(rdATokens), address.NewBech32Codec("cosmosvaloper"), address.NewBech32Codec("cosmos")) + rdA := types.NewRedelegation(addrDels[0], addrVals[0], addrVals[1], 11, time.Unix(0, 0), rdATokens, math.LegacyNewDecFromInt(rdATokens), 0, address.NewBech32Codec("cosmosvaloper"), address.NewBech32Codec("cosmos")) assert.NilError(t, f.stakingKeeper.SetRedelegation(f.sdkCtx, rdA)) // set the associated delegation @@ -564,7 +564,7 @@ func TestSlashBoth(t *testing.T) { // unbonding delegation shouldn't be slashed) ubdATokens := f.stakingKeeper.TokensFromConsensusPower(f.sdkCtx, 4) ubdA := types.NewUnbondingDelegation(addrDels[0], addrVals[0], 11, - time.Unix(0, 0), ubdATokens, address.NewBech32Codec("cosmosvaloper"), address.NewBech32Codec("cosmos")) + time.Unix(0, 0), ubdATokens, 0, address.NewBech32Codec("cosmosvaloper"), address.NewBech32Codec("cosmos")) assert.NilError(t, f.stakingKeeper.SetUnbondingDelegation(f.sdkCtx, ubdA)) bondedCoins := sdk.NewCoins(sdk.NewCoin(bondDenom, rdATokens.MulRaw(2))) diff --git a/tests/integration/staking/keeper/unbonding_test.go b/tests/integration/staking/keeper/unbonding_test.go new file mode 100644 index 000000000000..a61189f88382 --- /dev/null +++ b/tests/integration/staking/keeper/unbonding_test.go @@ -0,0 +1,446 @@ +package keeper_test + +import ( + "testing" + "time" + + "github.com/golang/mock/gomock" + "gotest.tools/v3/assert" + + "cosmossdk.io/math" + + simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" + sdk "github.com/cosmos/cosmos-sdk/types" + banktestutil "github.com/cosmos/cosmos-sdk/x/bank/testutil" + stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper" + "github.com/cosmos/cosmos-sdk/x/staking/testutil" + "github.com/cosmos/cosmos-sdk/x/staking/types" +) + +// SetupUnbondingTests creates two validators and setup mocked staking hooks for testing unbonding +func SetupUnbondingTests(t *testing.T, f *fixture, hookCalled *bool, ubdeID *uint64) (bondDenom string, addrDels []sdk.AccAddress, addrVals []sdk.ValAddress) { + // setup hooks + mockCtrl := gomock.NewController(t) + mockStackingHooks := testutil.NewMockStakingHooks(mockCtrl) + mockStackingHooks.EXPECT().AfterDelegationModified(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil).AnyTimes() + mockStackingHooks.EXPECT().AfterUnbondingInitiated(gomock.Any(), gomock.Any()).DoAndReturn(func(ctx sdk.Context, id uint64) error { + *hookCalled = true + // save id + *ubdeID = id + // call back to stop unbonding + err := f.stakingKeeper.PutUnbondingOnHold(f.sdkCtx, id) + assert.NilError(t, err) + + return nil + }).AnyTimes() + mockStackingHooks.EXPECT().AfterValidatorBeginUnbonding(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil).AnyTimes() + mockStackingHooks.EXPECT().AfterValidatorBonded(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil).AnyTimes() + mockStackingHooks.EXPECT().AfterValidatorCreated(gomock.Any(), gomock.Any()).Return(nil).AnyTimes() + mockStackingHooks.EXPECT().AfterValidatorRemoved(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil).AnyTimes() + mockStackingHooks.EXPECT().BeforeDelegationCreated(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil).AnyTimes() + mockStackingHooks.EXPECT().BeforeDelegationRemoved(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil).AnyTimes() + mockStackingHooks.EXPECT().BeforeDelegationSharesModified(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil).AnyTimes() + mockStackingHooks.EXPECT().BeforeValidatorModified(gomock.Any(), gomock.Any()).Return(nil).AnyTimes() + mockStackingHooks.EXPECT().BeforeValidatorSlashed(gomock.Any(), gomock.Any(), gomock.Any()).Return(nil).AnyTimes() + f.stakingKeeper.SetHooks(types.NewMultiStakingHooks(mockStackingHooks)) + + addrDels = simtestutil.AddTestAddrsIncremental(f.bankKeeper, f.stakingKeeper, f.sdkCtx, 2, math.NewInt(10000)) + addrVals = simtestutil.ConvertAddrsToValAddrs(addrDels) + + valTokens := f.stakingKeeper.TokensFromConsensusPower(f.sdkCtx, 10) + startTokens := f.stakingKeeper.TokensFromConsensusPower(f.sdkCtx, 20) + + bondDenom, err := f.stakingKeeper.BondDenom(f.sdkCtx) + assert.NilError(t, err) + notBondedPool := f.stakingKeeper.GetNotBondedPool(f.sdkCtx) + + assert.NilError(t, banktestutil.FundModuleAccount(f.sdkCtx, f.bankKeeper, notBondedPool.GetName(), sdk.NewCoins(sdk.NewCoin(bondDenom, startTokens)))) + f.accountKeeper.SetModuleAccount(f.sdkCtx, notBondedPool) + + // Create a validator + validator1 := testutil.NewValidator(t, addrVals[0], PKs[0]) + validator1, issuedShares1 := validator1.AddTokensFromDel(valTokens) + assert.DeepEqual(t, valTokens, issuedShares1.RoundInt()) + + validator1 = stakingkeeper.TestingUpdateValidator(f.stakingKeeper, f.sdkCtx, validator1, true) + assert.Assert(math.IntEq(t, valTokens, validator1.BondedTokens())) + assert.Assert(t, validator1.IsBonded()) + + // Create a delegator + delegation := types.NewDelegation(addrDels[0].String(), addrVals[0].String(), issuedShares1) + assert.NilError(t, f.stakingKeeper.SetDelegation(f.sdkCtx, delegation)) + + // Create a validator to redelegate to + validator2 := testutil.NewValidator(t, addrVals[1], PKs[1]) + validator2, issuedShares2 := validator2.AddTokensFromDel(valTokens) + assert.DeepEqual(t, valTokens, issuedShares2.RoundInt()) + + validator2 = stakingkeeper.TestingUpdateValidator(f.stakingKeeper, f.sdkCtx, validator2, true) + assert.Equal(t, types.Bonded, validator2.Status) + assert.Assert(t, validator2.IsBonded()) + + return bondDenom, addrDels, addrVals +} + +func doUnbondingDelegation( + t *testing.T, + stakingKeeper *stakingkeeper.Keeper, + bankKeeper types.BankKeeper, + ctx sdk.Context, + bondDenom string, + addrDels []sdk.AccAddress, + addrVals []sdk.ValAddress, + hookCalled *bool, +) (completionTime time.Time, bondedAmt, notBondedAmt math.Int) { + // UNDELEGATE + // Save original bonded and unbonded amounts + bondedAmt1 := bankKeeper.GetBalance(ctx, stakingKeeper.GetBondedPool(ctx).GetAddress(), bondDenom).Amount + notBondedAmt1 := bankKeeper.GetBalance(ctx, stakingKeeper.GetNotBondedPool(ctx).GetAddress(), bondDenom).Amount + + var err error + undelegateAmount := math.LegacyNewDec(1) + completionTime, undelegatedAmount, err := stakingKeeper.Undelegate(ctx, addrDels[0], addrVals[0], undelegateAmount) + assert.NilError(t, err) + assert.Assert(t, undelegateAmount.Equal(math.LegacyNewDecFromInt(undelegatedAmount))) + // check that the unbonding actually happened + bondedAmt2 := bankKeeper.GetBalance(ctx, stakingKeeper.GetBondedPool(ctx).GetAddress(), bondDenom).Amount + notBondedAmt2 := bankKeeper.GetBalance(ctx, stakingKeeper.GetNotBondedPool(ctx).GetAddress(), bondDenom).Amount + // Bonded amount is less + assert.Assert(math.IntEq(t, bondedAmt1.SubRaw(1), bondedAmt2)) + // Unbonded amount is more + assert.Assert(math.IntEq(t, notBondedAmt1.AddRaw(1), notBondedAmt2)) + + // Check that the unbonding happened- we look up the entry and see that it has the correct number of shares + unbondingDelegations, err := stakingKeeper.GetUnbondingDelegationsFromValidator(ctx, addrVals[0]) + assert.NilError(t, err) + assert.DeepEqual(t, math.NewInt(1), unbondingDelegations[0].Entries[0].Balance) + + // check that our hook was called + assert.Assert(t, *hookCalled) + + return completionTime, bondedAmt2, notBondedAmt2 +} + +func doRedelegation( + t *testing.T, + stakingKeeper *stakingkeeper.Keeper, + ctx sdk.Context, + addrDels []sdk.AccAddress, + addrVals []sdk.ValAddress, + hookCalled *bool, +) (completionTime time.Time) { + var err error + completionTime, err = stakingKeeper.BeginRedelegation(ctx, addrDels[0], addrVals[0], addrVals[1], math.LegacyNewDec(1)) + assert.NilError(t, err) + + // Check that the redelegation happened- we look up the entry and see that it has the correct number of shares + redelegations, err := stakingKeeper.GetRedelegationsFromSrcValidator(ctx, addrVals[0]) + assert.NilError(t, err) + assert.Equal(t, 1, len(redelegations)) + assert.DeepEqual(t, math.LegacyNewDec(1), redelegations[0].Entries[0].SharesDst) + + // check that our hook was called + assert.Assert(t, *hookCalled) + + return completionTime +} + +func doValidatorUnbonding( + t *testing.T, + stakingKeeper *stakingkeeper.Keeper, + ctx sdk.Context, + addrVal sdk.ValAddress, + hookCalled *bool, +) (validator types.Validator) { + validator, found := stakingKeeper.GetValidator(ctx, addrVal) + assert.Assert(t, found) + // Check that status is bonded + assert.Equal(t, types.BondStatus(3), validator.Status) + + validator, err := stakingKeeper.BeginUnbondingValidator(ctx, validator) + assert.NilError(t, err) + + // Check that status is unbonding + assert.Equal(t, types.BondStatus(2), validator.Status) + + // check that our hook was called + assert.Assert(t, *hookCalled) + + return validator +} + +func TestValidatorUnbondingOnHold1(t *testing.T) { + t.Parallel() + f := initFixture(t) + + var ( + hookCalled bool + ubdeID uint64 + ) + + _, _, addrVals := SetupUnbondingTests(t, f, &hookCalled, &ubdeID) + + // Start unbonding first validator + validator := doValidatorUnbonding(t, f.stakingKeeper, f.sdkCtx, addrVals[0], &hookCalled) + + completionTime := validator.UnbondingTime + completionHeight := validator.UnbondingHeight + + // CONSUMER CHAIN'S UNBONDING PERIOD ENDS - STOPPED UNBONDING CAN NOW COMPLETE + err := f.stakingKeeper.UnbondingCanComplete(f.sdkCtx, ubdeID) + assert.NilError(t, err) + + // Try to unbond validator + assert.NilError(t, f.stakingKeeper.UnbondAllMatureValidators(f.sdkCtx)) + + // Check that validator unbonding is not complete (is not mature yet) + validator, found := f.stakingKeeper.GetValidator(f.sdkCtx, addrVals[0]) + assert.Assert(t, found) + assert.Equal(t, types.Unbonding, validator.Status) + unbondingVals, err := f.stakingKeeper.GetUnbondingValidators(f.sdkCtx, completionTime, completionHeight) + assert.NilError(t, err) + assert.Equal(t, 1, len(unbondingVals)) + assert.Equal(t, validator.OperatorAddress, unbondingVals[0]) + + // PROVIDER CHAIN'S UNBONDING PERIOD ENDS - BUT UNBONDING CANNOT COMPLETE + f.sdkCtx = f.sdkCtx.WithBlockTime(completionTime.Add(time.Duration(1))) + f.sdkCtx = f.sdkCtx.WithBlockHeight(completionHeight + 1) + assert.NilError(t, f.stakingKeeper.UnbondAllMatureValidators(f.sdkCtx)) + + // Check that validator unbonding is complete + validator, found = f.stakingKeeper.GetValidator(f.sdkCtx, addrVals[0]) + assert.Assert(t, found) + assert.Equal(t, types.Unbonded, validator.Status) + unbondingVals, err = f.stakingKeeper.GetUnbondingValidators(f.sdkCtx, completionTime, completionHeight) + assert.NilError(t, err) + assert.Equal(t, 0, len(unbondingVals)) +} + +func TestValidatorUnbondingOnHold2(t *testing.T) { + t.Parallel() + f := initFixture(t) + + var ( + hookCalled bool + ubdeID uint64 + ubdeIDs []uint64 + ) + + _, _, addrVals := SetupUnbondingTests(t, f, &hookCalled, &ubdeID) + + // Start unbonding first validator + validator1 := doValidatorUnbonding(t, f.stakingKeeper, f.sdkCtx, addrVals[0], &hookCalled) + ubdeIDs = append(ubdeIDs, ubdeID) + + // Reset hookCalled flag + hookCalled = false + + // Start unbonding second validator + validator2 := doValidatorUnbonding(t, f.stakingKeeper, f.sdkCtx, addrVals[1], &hookCalled) + ubdeIDs = append(ubdeIDs, ubdeID) + + // Check that there are two unbonding operations + assert.Equal(t, 2, len(ubdeIDs)) + + // Check that both validators have same unbonding time + assert.Equal(t, validator1.UnbondingTime, validator2.UnbondingTime) + + completionTime := validator1.UnbondingTime + completionHeight := validator1.UnbondingHeight + + // PROVIDER CHAIN'S UNBONDING PERIOD ENDS - BUT UNBONDING CANNOT COMPLETE + f.sdkCtx = f.sdkCtx.WithBlockTime(completionTime.Add(time.Duration(1))) + f.sdkCtx = f.sdkCtx.WithBlockHeight(completionHeight + 1) + assert.NilError(t, f.stakingKeeper.UnbondAllMatureValidators(f.sdkCtx)) + + // Check that unbonding is not complete for both validators + validator1, found := f.stakingKeeper.GetValidator(f.sdkCtx, addrVals[0]) + assert.Assert(t, found) + assert.Equal(t, types.Unbonding, validator1.Status) + validator2, found = f.stakingKeeper.GetValidator(f.sdkCtx, addrVals[1]) + assert.Assert(t, found) + assert.Equal(t, types.Unbonding, validator2.Status) + unbondingVals, err := f.stakingKeeper.GetUnbondingValidators(f.sdkCtx, completionTime, completionHeight) + assert.NilError(t, err) + assert.Equal(t, 2, len(unbondingVals)) + assert.Equal(t, validator1.OperatorAddress, unbondingVals[0]) + assert.Equal(t, validator2.OperatorAddress, unbondingVals[1]) + + // CONSUMER CHAIN'S UNBONDING PERIOD ENDS - STOPPED UNBONDING CAN NOW COMPLETE + err = f.stakingKeeper.UnbondingCanComplete(f.sdkCtx, ubdeIDs[0]) + assert.NilError(t, err) + + // Try again to unbond validators + assert.NilError(t, f.stakingKeeper.UnbondAllMatureValidators(f.sdkCtx)) + + // Check that unbonding is complete for validator1, but not for validator2 + validator1, found = f.stakingKeeper.GetValidator(f.sdkCtx, addrVals[0]) + assert.Assert(t, found) + assert.Equal(t, types.Unbonded, validator1.Status) + validator2, found = f.stakingKeeper.GetValidator(f.sdkCtx, addrVals[1]) + assert.Assert(t, found) + assert.Equal(t, types.Unbonding, validator2.Status) + unbondingVals, err = f.stakingKeeper.GetUnbondingValidators(f.sdkCtx, completionTime, completionHeight) + assert.NilError(t, err) + assert.Equal(t, 1, len(unbondingVals)) + assert.Equal(t, validator2.OperatorAddress, unbondingVals[0]) + + // Unbonding for validator2 can complete + err = f.stakingKeeper.UnbondingCanComplete(f.sdkCtx, ubdeIDs[1]) + assert.NilError(t, err) + + // Try again to unbond validators + assert.NilError(t, f.stakingKeeper.UnbondAllMatureValidators(f.sdkCtx)) + + // Check that unbonding is complete for validator2 + validator2, found = f.stakingKeeper.GetValidator(f.sdkCtx, addrVals[1]) + assert.Assert(t, found) + assert.Equal(t, types.Unbonded, validator2.Status) + unbondingVals, err = f.stakingKeeper.GetUnbondingValidators(f.sdkCtx, completionTime, completionHeight) + assert.NilError(t, err) + assert.Equal(t, 0, len(unbondingVals)) +} + +func TestRedelegationOnHold1(t *testing.T) { + t.Parallel() + f := initFixture(t) + + var ( + hookCalled bool + ubdeID uint64 + ) + + // _, app, ctx := createTestInput(t) + _, addrDels, addrVals := SetupUnbondingTests(t, f, &hookCalled, &ubdeID) + completionTime := doRedelegation(t, f.stakingKeeper, f.sdkCtx, addrDels, addrVals, &hookCalled) + + // CONSUMER CHAIN'S UNBONDING PERIOD ENDS - BUT UNBONDING CANNOT COMPLETE + err := f.stakingKeeper.UnbondingCanComplete(f.sdkCtx, ubdeID) + assert.NilError(t, err) + + // Redelegation is not complete - still exists + redelegations, err := f.stakingKeeper.GetRedelegationsFromSrcValidator(f.sdkCtx, addrVals[0]) + assert.NilError(t, err) + assert.Equal(t, 1, len(redelegations)) + + // PROVIDER CHAIN'S UNBONDING PERIOD ENDS - STOPPED UNBONDING CAN NOW COMPLETE + f.sdkCtx = f.sdkCtx.WithBlockTime(completionTime) + _, err = f.stakingKeeper.CompleteRedelegation(f.sdkCtx, addrDels[0], addrVals[0], addrVals[1]) + assert.NilError(t, err) + + // Redelegation is complete and record is gone + redelegations, err = f.stakingKeeper.GetRedelegationsFromSrcValidator(f.sdkCtx, addrVals[0]) + assert.NilError(t, err) + assert.Equal(t, 0, len(redelegations)) +} + +func TestRedelegationOnHold2(t *testing.T) { + t.Parallel() + f := initFixture(t) + + var ( + hookCalled bool + ubdeID uint64 + ) + + // _, app, ctx := createTestInput(t) + _, addrDels, addrVals := SetupUnbondingTests(t, f, &hookCalled, &ubdeID) + completionTime := doRedelegation(t, f.stakingKeeper, f.sdkCtx, addrDels, addrVals, &hookCalled) + + // PROVIDER CHAIN'S UNBONDING PERIOD ENDS - BUT UNBONDING CANNOT COMPLETE + f.sdkCtx = f.sdkCtx.WithBlockTime(completionTime) + _, err := f.stakingKeeper.CompleteRedelegation(f.sdkCtx, addrDels[0], addrVals[0], addrVals[1]) + assert.NilError(t, err) + + // Redelegation is not complete - still exists + redelegations, err := f.stakingKeeper.GetRedelegationsFromSrcValidator(f.sdkCtx, addrVals[0]) + assert.NilError(t, err) + assert.Equal(t, 1, len(redelegations)) + + // CONSUMER CHAIN'S UNBONDING PERIOD ENDS - STOPPED UNBONDING CAN NOW COMPLETE + err = f.stakingKeeper.UnbondingCanComplete(f.sdkCtx, ubdeID) + assert.NilError(t, err) + + // Redelegation is complete and record is gone + redelegations, err = f.stakingKeeper.GetRedelegationsFromSrcValidator(f.sdkCtx, addrVals[0]) + assert.NilError(t, err) + assert.Equal(t, 0, len(redelegations)) +} + +func TestUnbondingDelegationOnHold1(t *testing.T) { + t.Parallel() + f := initFixture(t) + + var ( + hookCalled bool + ubdeID uint64 + ) + + // _, app, ctx := createTestInput(t) + bondDenom, addrDels, addrVals := SetupUnbondingTests(t, f, &hookCalled, &ubdeID) + completionTime, bondedAmt1, notBondedAmt1 := doUnbondingDelegation(t, f.stakingKeeper, f.bankKeeper, f.sdkCtx, bondDenom, addrDels, addrVals, &hookCalled) + + // CONSUMER CHAIN'S UNBONDING PERIOD ENDS - BUT UNBONDING CANNOT COMPLETE + err := f.stakingKeeper.UnbondingCanComplete(f.sdkCtx, ubdeID) + assert.NilError(t, err) + + bondedAmt3 := f.bankKeeper.GetBalance(f.sdkCtx, f.stakingKeeper.GetBondedPool(f.sdkCtx).GetAddress(), bondDenom).Amount + notBondedAmt3 := f.bankKeeper.GetBalance(f.sdkCtx, f.stakingKeeper.GetNotBondedPool(f.sdkCtx).GetAddress(), bondDenom).Amount + + // Bonded and unbonded amounts are the same as before because the completionTime has not yet passed and so the + // unbondingDelegation has not completed + assert.Assert(math.IntEq(t, bondedAmt1, bondedAmt3)) + assert.Assert(math.IntEq(t, notBondedAmt1, notBondedAmt3)) + + // PROVIDER CHAIN'S UNBONDING PERIOD ENDS - STOPPED UNBONDING CAN NOW COMPLETE + f.sdkCtx = f.sdkCtx.WithBlockTime(completionTime) + _, err = f.stakingKeeper.CompleteUnbonding(f.sdkCtx, addrDels[0], addrVals[0]) + assert.NilError(t, err) + + // Check that the unbonding was finally completed + bondedAmt5 := f.bankKeeper.GetBalance(f.sdkCtx, f.stakingKeeper.GetBondedPool(f.sdkCtx).GetAddress(), bondDenom).Amount + notBondedAmt5 := f.bankKeeper.GetBalance(f.sdkCtx, f.stakingKeeper.GetNotBondedPool(f.sdkCtx).GetAddress(), bondDenom).Amount + + assert.Assert(math.IntEq(t, bondedAmt1, bondedAmt5)) + // Not bonded amount back to what it was originally + assert.Assert(math.IntEq(t, notBondedAmt1.SubRaw(1), notBondedAmt5)) +} + +func TestUnbondingDelegationOnHold2(t *testing.T) { + t.Parallel() + f := initFixture(t) + + var ( + hookCalled bool + ubdeID uint64 + ) + + // _, app, ctx := createTestInput(t) + bondDenom, addrDels, addrVals := SetupUnbondingTests(t, f, &hookCalled, &ubdeID) + completionTime, bondedAmt1, notBondedAmt1 := doUnbondingDelegation(t, f.stakingKeeper, f.bankKeeper, f.sdkCtx, bondDenom, addrDels, addrVals, &hookCalled) + + // PROVIDER CHAIN'S UNBONDING PERIOD ENDS - BUT UNBONDING CANNOT COMPLETE + f.sdkCtx = f.sdkCtx.WithBlockTime(completionTime) + _, err := f.stakingKeeper.CompleteUnbonding(f.sdkCtx, addrDels[0], addrVals[0]) + assert.NilError(t, err) + + bondedAmt3 := f.bankKeeper.GetBalance(f.sdkCtx, f.stakingKeeper.GetBondedPool(f.sdkCtx).GetAddress(), bondDenom).Amount + notBondedAmt3 := f.bankKeeper.GetBalance(f.sdkCtx, f.stakingKeeper.GetNotBondedPool(f.sdkCtx).GetAddress(), bondDenom).Amount + + // Bonded and unbonded amounts are the same as before because the completionTime has not yet passed and so the + // unbondingDelegation has not completed + assert.Assert(math.IntEq(t, bondedAmt1, bondedAmt3)) + assert.Assert(math.IntEq(t, notBondedAmt1, notBondedAmt3)) + + // CONSUMER CHAIN'S UNBONDING PERIOD ENDS - STOPPED UNBONDING CAN NOW COMPLETE + err = f.stakingKeeper.UnbondingCanComplete(f.sdkCtx, ubdeID) + assert.NilError(t, err) + + // Check that the unbonding was finally completed + bondedAmt5 := f.bankKeeper.GetBalance(f.sdkCtx, f.stakingKeeper.GetBondedPool(f.sdkCtx).GetAddress(), bondDenom).Amount + notBondedAmt5 := f.bankKeeper.GetBalance(f.sdkCtx, f.stakingKeeper.GetNotBondedPool(f.sdkCtx).GetAddress(), bondDenom).Amount + + assert.Assert(math.IntEq(t, bondedAmt1, bondedAmt5)) + // Not bonded amount back to what it was originally + assert.Assert(math.IntEq(t, notBondedAmt1.SubRaw(1), notBondedAmt5)) +} diff --git a/x/staking/keeper/delegation.go b/x/staking/keeper/delegation.go index 3545b34b6963..28f23889e919 100644 --- a/x/staking/keeper/delegation.go +++ b/x/staking/keeper/delegation.go @@ -425,11 +425,17 @@ func (k Keeper) SetUnbondingDelegationEntry( ctx context.Context, delegatorAddr sdk.AccAddress, validatorAddr sdk.ValAddress, creationHeight int64, minTime time.Time, balance math.Int, ) (types.UnbondingDelegation, error) { + id, err := k.IncrementUnbondingID(ctx) + if err != nil { + return types.UnbondingDelegation{}, err + } + + isNewUbdEntry := true ubd, err := k.GetUnbondingDelegation(ctx, delegatorAddr, validatorAddr) if err == nil { - ubd.AddEntry(creationHeight, minTime, balance) + isNewUbdEntry = ubd.AddEntry(creationHeight, minTime, balance, id) } else if errors.Is(err, types.ErrNoUnbondingDelegation) { - ubd = types.NewUnbondingDelegation(delegatorAddr, validatorAddr, creationHeight, minTime, balance, k.validatorAddressCodec, k.authKeeper.AddressCodec()) + ubd = types.NewUnbondingDelegation(delegatorAddr, validatorAddr, creationHeight, minTime, balance, id, k.validatorAddressCodec, k.authKeeper.AddressCodec()) } else { return ubd, err } @@ -438,6 +444,18 @@ func (k Keeper) SetUnbondingDelegationEntry( return ubd, err } + // only call the hook for new entries since + // calls to AfterUnbondingInitiated are not idempotent + if isNewUbdEntry { + // Add to the UBDByUnbondingOp index to look up the UBD by the UBDE ID + if err = k.SetUnbondingDelegationByUnbondingID(ctx, ubd, id); err != nil { + return ubd, err + } + + if err := k.Hooks().AfterUnbondingInitiated(ctx, id); err != nil { + k.Logger(ctx).Error("failed to call after unbonding initiated hook", "error", err) + } + } return ubd, nil } @@ -762,12 +780,17 @@ func (k Keeper) SetRedelegationEntry(ctx context.Context, minTime time.Time, balance math.Int, sharesSrc, sharesDst math.LegacyDec, ) (types.Redelegation, error) { + id, err := k.IncrementUnbondingID(ctx) + if err != nil { + return types.Redelegation{}, err + } + red, err := k.GetRedelegation(ctx, delegatorAddr, validatorSrcAddr, validatorDstAddr) if err == nil { - red.AddEntry(creationHeight, minTime, balance, sharesDst) + red.AddEntry(creationHeight, minTime, balance, sharesDst, id) } else if errors.Is(err, types.ErrNoRedelegation) { red = types.NewRedelegation(delegatorAddr, validatorSrcAddr, - validatorDstAddr, creationHeight, minTime, balance, sharesDst, k.validatorAddressCodec, k.authKeeper.AddressCodec()) + validatorDstAddr, creationHeight, minTime, balance, sharesDst, id, k.validatorAddressCodec, k.authKeeper.AddressCodec()) } else { return types.Redelegation{}, err } @@ -776,6 +799,16 @@ func (k Keeper) SetRedelegationEntry(ctx context.Context, return types.Redelegation{}, err } + // Add to the UBDByEntry index to look up the UBD by the UBDE ID + if err = k.SetRedelegationByUnbondingID(ctx, red, id); err != nil { + return types.Redelegation{}, err + } + + if err := k.Hooks().AfterUnbondingInitiated(ctx, id); err != nil { + k.Logger(ctx).Error("failed to call after unbonding initiated hook", "error", err) + // TODO (Facu): Should we return here? We are ignoring this error + } + return red, nil } @@ -1281,9 +1314,12 @@ func (k Keeper) CompleteUnbonding(ctx context.Context, delAddr sdk.AccAddress, v // loop through all the entries and complete unbonding mature entries for i := 0; i < len(ubd.Entries); i++ { entry := ubd.Entries[i] - if entry.IsMature(ctxTime) { + if entry.IsMature(ctxTime) && !entry.OnHold() { ubd.RemoveEntry(int64(i)) i-- + if err = k.DeleteUnbondingIndex(ctx, entry.UnbondingId); err != nil { + return nil, err + } // track undelegation only when remaining or truncated shares are non-zero if !entry.Balance.IsZero() { @@ -1418,9 +1454,12 @@ func (k Keeper) CompleteRedelegation( // loop through all the entries and complete mature redelegation entries for i := 0; i < len(red.Entries); i++ { entry := red.Entries[i] - if entry.IsMature(ctxTime) { + if entry.IsMature(ctxTime) && !entry.OnHold() { red.RemoveEntry(int64(i)) i-- + if err = k.DeleteUnbondingIndex(ctx, entry.UnbondingId); err != nil { + return nil, err + } if !entry.InitialBalance.IsZero() { balances = balances.Add(sdk.NewCoin(bondDenom, entry.InitialBalance)) diff --git a/x/staking/keeper/delegation_test.go b/x/staking/keeper/delegation_test.go index 1ad4063ddf0c..55a5da19f040 100644 --- a/x/staking/keeper/delegation_test.go +++ b/x/staking/keeper/delegation_test.go @@ -260,6 +260,7 @@ func (s *KeeperTestSuite) TestUnbondingDelegation() { 0, time.Unix(0, 0).UTC(), math.NewInt(5), + 0, address.NewBech32Codec("cosmosvaloper"), address.NewBech32Codec("cosmos"), ) @@ -316,8 +317,8 @@ func (s *KeeperTestSuite) TestUnbondingDelegationsFromValidator() { 0, time.Unix(0, 0).UTC(), math.NewInt(5), - address.NewBech32Codec("cosmosvaloper"), - address.NewBech32Codec("cosmos"), + 0, + address.NewBech32Codec("cosmosvaloper"), address.NewBech32Codec("cosmos"), ) // set and retrieve a record @@ -683,7 +684,7 @@ func (s *KeeperTestSuite) TestGetRedelegationsFromSrcValidator() { rd := stakingtypes.NewRedelegation(addrDels[0], addrVals[0], addrVals[1], 0, time.Unix(0, 0), math.NewInt(5), - math.LegacyNewDec(5), address.NewBech32Codec("cosmosvaloper"), address.NewBech32Codec("cosmos")) + math.LegacyNewDec(5), 0, address.NewBech32Codec("cosmosvaloper"), address.NewBech32Codec("cosmos")) // set and retrieve a record err := keeper.SetRedelegation(ctx, rd) @@ -713,7 +714,7 @@ func (s *KeeperTestSuite) TestRedelegation() { rd := stakingtypes.NewRedelegation(addrDels[0], addrVals[0], addrVals[1], 0, time.Unix(0, 0).UTC(), math.NewInt(5), - math.LegacyNewDec(5), address.NewBech32Codec("cosmosvaloper"), address.NewBech32Codec("cosmos")) + math.LegacyNewDec(5), 0, address.NewBech32Codec("cosmosvaloper"), address.NewBech32Codec("cosmos")) // test shouldn't have and redelegations has, err := keeper.HasReceivingRedelegation(ctx, addrDels[0], addrVals[1]) @@ -1074,14 +1075,14 @@ func (s *KeeperTestSuite) TestUnbondingDelegationAddEntry() { creationHeight, time.Unix(0, 0).UTC(), math.NewInt(10), - address.NewBech32Codec("cosmosvaloper"), - address.NewBech32Codec("cosmos"), + 0, + address.NewBech32Codec("cosmosvaloper"), address.NewBech32Codec("cosmos"), ) var initialEntries []stakingtypes.UnbondingDelegationEntry initialEntries = append(initialEntries, ubd.Entries...) require.Len(initialEntries, 1) - isNew := ubd.AddEntry(creationHeight, time.Unix(0, 0).UTC(), math.NewInt(5)) + isNew := ubd.AddEntry(creationHeight, time.Unix(0, 0).UTC(), math.NewInt(5), 1) require.False(isNew) require.Len(ubd.Entries, 1) // entry was merged require.NotEqual(initialEntries, ubd.Entries) @@ -1090,7 +1091,7 @@ func (s *KeeperTestSuite) TestUnbondingDelegationAddEntry() { require.Equal(ubd.Entries[0].Balance, math.NewInt(15)) // 10 from previous + 5 from merged newCreationHeight := int64(11) - isNew = ubd.AddEntry(newCreationHeight, time.Unix(1, 0).UTC(), math.NewInt(5)) + isNew = ubd.AddEntry(newCreationHeight, time.Unix(1, 0).UTC(), math.NewInt(5), 2) require.True(isNew) require.Len(ubd.Entries, 2) // entry was appended require.NotEqual(initialEntries, ubd.Entries) @@ -1098,6 +1099,7 @@ func (s *KeeperTestSuite) TestUnbondingDelegationAddEntry() { require.Equal(newCreationHeight, ubd.Entries[1].CreationHeight) require.Equal(ubd.Entries[0].Balance, math.NewInt(15)) require.Equal(ubd.Entries[1].Balance, math.NewInt(5)) + require.NotEqual(ubd.Entries[0].UnbondingId, ubd.Entries[1].UnbondingId) // appended entry has a new unbondingID } func (s *KeeperTestSuite) TestSetUnbondingDelegationEntry() { @@ -1115,8 +1117,8 @@ func (s *KeeperTestSuite) TestSetUnbondingDelegationEntry() { creationHeight, time.Unix(0, 0).UTC(), math.NewInt(5), - address.NewBech32Codec("cosmosvaloper"), - address.NewBech32Codec("cosmos"), + 0, + address.NewBech32Codec("cosmosvaloper"), address.NewBech32Codec("cosmos"), ) // set and retrieve a record @@ -1146,7 +1148,8 @@ func (s *KeeperTestSuite) TestSetUnbondingDelegationEntry() { require.Len(resUnbonding.Entries, 1) require.NotEqual(initialEntries, resUnbonding.Entries) require.Equal(creationHeight, resUnbonding.Entries[0].CreationHeight) - require.Equal(resUnbonding.Entries[0].Balance, math.NewInt(10)) // 5 from previous entry + 5 from merged entry + require.Equal(initialEntries[0].UnbondingId, resUnbonding.Entries[0].UnbondingId) // initial unbondingID remains unchanged + require.Equal(resUnbonding.Entries[0].Balance, math.NewInt(10)) // 5 from previous entry + 5 from merged entry // set unbonding delegation entry for newCreationHeight // new entry is expected to be appended to the existing entries @@ -1167,6 +1170,11 @@ func (s *KeeperTestSuite) TestSetUnbondingDelegationEntry() { require.NotEqual(resUnbonding.Entries[0], resUnbonding.Entries[1]) require.Equal(creationHeight, resUnbonding.Entries[0].CreationHeight) require.Equal(newCreationHeight, resUnbonding.Entries[1].CreationHeight) + + // unbondingID is incremented on every call to SetUnbondingDelegationEntry + // unbondingID == 1 was skipped because the entry was merged with the existing entry with unbondingID == 0 + // unbondingID comes from a global counter -> gaps in unbondingIDs are OK as long as every unbondingID is unique + require.Equal(uint64(2), resUnbonding.Entries[1].UnbondingId) } func (s *KeeperTestSuite) TestGetUBDQueueTimeSlice() { diff --git a/x/staking/keeper/grpc_query.go b/x/staking/keeper/grpc_query.go index 28d7b4cb6a86..890ca859c12b 100644 --- a/x/staking/keeper/grpc_query.go +++ b/x/staking/keeper/grpc_query.go @@ -644,6 +644,7 @@ func redelegationsToRedelegationResponses(ctx context.Context, k *Keeper, redels entry.SharesDst, entry.InitialBalance, val.TokensFromShares(entry.SharesDst).TruncateInt(), + entry.UnbondingId, ) } diff --git a/x/staking/keeper/msg_server_test.go b/x/staking/keeper/msg_server_test.go index 9024a933ffa4..df339ae371cb 100644 --- a/x/staking/keeper/msg_server_test.go +++ b/x/staking/keeper/msg_server_test.go @@ -851,7 +851,7 @@ func (s *KeeperTestSuite) TestMsgCancelUnbondingDelegation() { require.NoError(err) require.Equal(del, resDel) - ubd := stakingtypes.NewUnbondingDelegation(Addr, ValAddr, 10, ctx.BlockTime().Add(time.Minute*10), shares.RoundInt(), keeper.ValidatorAddressCodec(), ak.AddressCodec()) + ubd := stakingtypes.NewUnbondingDelegation(Addr, ValAddr, 10, ctx.BlockTime().Add(time.Minute*10), shares.RoundInt(), 0, keeper.ValidatorAddressCodec(), ak.AddressCodec()) require.NoError(keeper.SetUnbondingDelegation(ctx, ubd)) resUnbond, err := keeper.GetUnbondingDelegation(ctx, Addr, ValAddr) require.NoError(err) diff --git a/x/staking/keeper/slash.go b/x/staking/keeper/slash.go index d4f4d726a24c..e1fa8bb47d64 100644 --- a/x/staking/keeper/slash.go +++ b/x/staking/keeper/slash.go @@ -249,7 +249,7 @@ func (k Keeper) SlashUnbondingDelegation(ctx context.Context, unbondingDelegatio continue } - if entry.IsMature(now) { + if entry.IsMature(now) && !entry.OnHold() { // Unbonding delegation no longer eligible for slashing, skip it continue } @@ -346,7 +346,7 @@ func (k Keeper) SlashRedelegation(ctx context.Context, srcValidator types.Valida case entry.CreationHeight < infractionHeight: continue // Unbonding delegation no longer eligible for slashing, skip it - case entry.IsMature(now): + case entry.IsMature(now) && !entry.OnHold(): continue // Slash the unbonding delegation default: diff --git a/x/staking/keeper/unbonding.go b/x/staking/keeper/unbonding.go new file mode 100644 index 000000000000..1813797b9761 --- /dev/null +++ b/x/staking/keeper/unbonding.go @@ -0,0 +1,478 @@ +package keeper + +import ( + "context" + "encoding/binary" + + errorsmod "cosmossdk.io/errors" + + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/x/staking/types" +) + +// IncrementUnbondingID increments and returns a unique ID for an unbonding operation +func (k Keeper) IncrementUnbondingID(ctx context.Context) (unbondingID uint64, err error) { + store := k.storeService.OpenKVStore(ctx) + bz, err := store.Get(types.UnbondingIDKey) + if err != nil { + return 0, err + } + + if bz != nil { + unbondingID = binary.BigEndian.Uint64(bz) + } + + unbondingID++ + + // Convert back into bytes for storage + bz = make([]byte, 8) + binary.BigEndian.PutUint64(bz, unbondingID) + + if err = store.Set(types.UnbondingIDKey, bz); err != nil { + return 0, err + } + + return unbondingID, err +} + +// DeleteUnbondingIndex removes a mapping from UnbondingId to unbonding operation +func (k Keeper) DeleteUnbondingIndex(ctx context.Context, id uint64) error { + store := k.storeService.OpenKVStore(ctx) + return store.Delete(types.GetUnbondingIndexKey(id)) +} + +// GetUnbondingType returns the enum type of unbonding which is any of +// {UnbondingDelegation | Redelegation | ValidatorUnbonding} +func (k Keeper) GetUnbondingType(ctx context.Context, id uint64) (unbondingType types.UnbondingType, err error) { + store := k.storeService.OpenKVStore(ctx) + + bz, err := store.Get(types.GetUnbondingTypeKey(id)) + if err != nil { + return unbondingType, err + } + + if bz == nil { + return unbondingType, types.ErrNoUnbondingType + } + + return types.UnbondingType(binary.BigEndian.Uint64(bz)), nil +} + +// SetUnbondingType sets the enum type of unbonding which is any of +// {UnbondingDelegation | Redelegation | ValidatorUnbonding} +func (k Keeper) SetUnbondingType(ctx context.Context, id uint64, unbondingType types.UnbondingType) error { + store := k.storeService.OpenKVStore(ctx) + + // Convert into bytes for storage + bz := make([]byte, 8) + binary.BigEndian.PutUint64(bz, uint64(unbondingType)) + + return store.Set(types.GetUnbondingTypeKey(id), bz) +} + +// GetUnbondingDelegationByUnbondingID returns a unbonding delegation that has an unbonding delegation entry with a certain ID +func (k Keeper) GetUnbondingDelegationByUnbondingID(ctx context.Context, id uint64) (ubd types.UnbondingDelegation, err error) { + store := k.storeService.OpenKVStore(ctx) + + ubdKey, err := store.Get(types.GetUnbondingIndexKey(id)) + if err != nil { + return types.UnbondingDelegation{}, err + } + + if ubdKey == nil { + return types.UnbondingDelegation{}, types.ErrNoUnbondingDelegation + } + + value, err := store.Get(ubdKey) + if err != nil { + return types.UnbondingDelegation{}, err + } + + if value == nil { + return types.UnbondingDelegation{}, types.ErrNoUnbondingDelegation + } + + ubd, err = types.UnmarshalUBD(k.cdc, value) + // An error here means that what we got wasn't the right type + if err != nil { + return types.UnbondingDelegation{}, err + } + + return ubd, nil +} + +// GetRedelegationByUnbondingID returns a unbonding delegation that has an unbonding delegation entry with a certain ID +func (k Keeper) GetRedelegationByUnbondingID(ctx context.Context, id uint64) (red types.Redelegation, err error) { + store := k.storeService.OpenKVStore(ctx) + + redKey, err := store.Get(types.GetUnbondingIndexKey(id)) + if err != nil { + return types.Redelegation{}, err + } + + if redKey == nil { + return types.Redelegation{}, types.ErrNoRedelegation + } + + value, err := store.Get(redKey) + if err != nil { + return types.Redelegation{}, err + } + + if value == nil { + return types.Redelegation{}, types.ErrNoRedelegation + } + + red, err = types.UnmarshalRED(k.cdc, value) + // An error here means that what we got wasn't the right type + if err != nil { + return types.Redelegation{}, err + } + + return red, nil +} + +// GetValidatorByUnbondingID returns the validator that is unbonding with a certain unbonding op ID +func (k Keeper) GetValidatorByUnbondingID(ctx context.Context, id uint64) (val types.Validator, err error) { + store := k.storeService.OpenKVStore(ctx) + + valKey, err := store.Get(types.GetUnbondingIndexKey(id)) + if err != nil { + return types.Validator{}, err + } + + if valKey == nil { + return types.Validator{}, types.ErrNoValidatorFound + } + + value, err := store.Get(valKey) + if err != nil { + return types.Validator{}, err + } + + if value == nil { + return types.Validator{}, types.ErrNoValidatorFound + } + + val, err = types.UnmarshalValidator(k.cdc, value) + // An error here means that what we got wasn't the right type + if err != nil { + return types.Validator{}, err + } + + return val, nil +} + +// SetUnbondingDelegationByUnbondingID sets an index to look up an UnbondingDelegation +// by the unbondingID of an UnbondingDelegationEntry that it contains Note, it does not +// set the unbonding delegation itself, use SetUnbondingDelegation(ctx, ubd) for that +func (k Keeper) SetUnbondingDelegationByUnbondingID(ctx context.Context, ubd types.UnbondingDelegation, id uint64) error { + store := k.storeService.OpenKVStore(ctx) + delAddr, err := k.authKeeper.AddressCodec().StringToBytes(ubd.DelegatorAddress) + if err != nil { + return err + } + valAddr, err := k.validatorAddressCodec.StringToBytes(ubd.ValidatorAddress) + if err != nil { + return err + } + + ubdKey := types.GetUBDKey(delAddr, valAddr) + if err = store.Set(types.GetUnbondingIndexKey(id), ubdKey); err != nil { + return err + } + + // Set unbonding type so that we know how to deserialize it later + return k.SetUnbondingType(ctx, id, types.UnbondingType_UnbondingDelegation) +} + +// SetRedelegationByUnbondingID sets an index to look up an Redelegation by the unbondingID of an RedelegationEntry that it contains +// Note, it does not set the redelegation itself, use SetRedelegation(ctx, red) for that +func (k Keeper) SetRedelegationByUnbondingID(ctx context.Context, red types.Redelegation, id uint64) error { + store := k.storeService.OpenKVStore(ctx) + + delAddr, err := k.authKeeper.AddressCodec().StringToBytes(red.DelegatorAddress) + if err != nil { + return err + } + + valSrcAddr, err := k.validatorAddressCodec.StringToBytes(red.ValidatorSrcAddress) + if err != nil { + return err + } + + valDstAddr, err := k.validatorAddressCodec.StringToBytes(red.ValidatorDstAddress) + if err != nil { + return err + } + + redKey := types.GetREDKey(delAddr, valSrcAddr, valDstAddr) + if err = store.Set(types.GetUnbondingIndexKey(id), redKey); err != nil { + return err + } + + // Set unbonding type so that we know how to deserialize it later + return k.SetUnbondingType(ctx, id, types.UnbondingType_Redelegation) +} + +// SetValidatorByUnbondingID sets an index to look up a Validator by the unbondingID corresponding to its current unbonding +// Note, it does not set the validator itself, use SetValidator(ctx, val) for that +func (k Keeper) SetValidatorByUnbondingID(ctx context.Context, val types.Validator, id uint64) error { + store := k.storeService.OpenKVStore(ctx) + + valAddr, err := k.validatorAddressCodec.StringToBytes(val.OperatorAddress) + if err != nil { + return err + } + + valKey := types.GetValidatorKey(valAddr) + if err = store.Set(types.GetUnbondingIndexKey(id), valKey); err != nil { + return err + } + + // Set unbonding type so that we know how to deserialize it later + return k.SetUnbondingType(ctx, id, types.UnbondingType_ValidatorUnbonding) +} + +// unbondingDelegationEntryArrayIndex and redelegationEntryArrayIndex are utilities to find +// at which position in the Entries array the entry with a given id is +func unbondingDelegationEntryArrayIndex(ubd types.UnbondingDelegation, id uint64) (index int, err error) { + for i, entry := range ubd.Entries { + // we find the entry with the right ID + if entry.UnbondingId == id { + return i, nil + } + } + + return 0, types.ErrNoUnbondingDelegation +} + +func redelegationEntryArrayIndex(red types.Redelegation, id uint64) (index int, err error) { + for i, entry := range red.Entries { + // we find the entry with the right ID + if entry.UnbondingId == id { + return i, nil + } + } + + return 0, types.ErrNoRedelegation +} + +// UnbondingCanComplete allows a stopped unbonding operation, such as an +// unbonding delegation, a redelegation, or a validator unbonding to complete. +// In order for the unbonding operation with `id` to eventually complete, every call +// to PutUnbondingOnHold(id) must be matched by a call to UnbondingCanComplete(id). +func (k Keeper) UnbondingCanComplete(ctx context.Context, id uint64) error { + unbondingType, err := k.GetUnbondingType(ctx, id) + if err != nil { + return err + } + + switch unbondingType { + case types.UnbondingType_UnbondingDelegation: + if err := k.unbondingDelegationEntryCanComplete(ctx, id); err != nil { + return err + } + case types.UnbondingType_Redelegation: + if err := k.redelegationEntryCanComplete(ctx, id); err != nil { + return err + } + case types.UnbondingType_ValidatorUnbonding: + if err := k.validatorUnbondingCanComplete(ctx, id); err != nil { + return err + } + default: + return types.ErrUnbondingNotFound + } + + return nil +} + +func (k Keeper) unbondingDelegationEntryCanComplete(ctx context.Context, id uint64) error { + ubd, err := k.GetUnbondingDelegationByUnbondingID(ctx, id) + if err != nil { + return err + } + + i, err := unbondingDelegationEntryArrayIndex(ubd, id) + if err != nil { + return err + } + + // The entry must be on hold + if !ubd.Entries[i].OnHold() { + return errorsmod.Wrapf( + types.ErrUnbondingOnHoldRefCountNegative, + "undelegation unbondingID(%d), expecting UnbondingOnHoldRefCount > 0, got %T", + id, ubd.Entries[i].UnbondingOnHoldRefCount, + ) + } + ubd.Entries[i].UnbondingOnHoldRefCount-- + + sdkCtx := sdk.UnwrapSDKContext(ctx) + // Check if entry is matured. + if !ubd.Entries[i].OnHold() && ubd.Entries[i].IsMature(sdkCtx.BlockHeader().Time) { + // If matured, complete it. + delegatorAddress, err := k.authKeeper.AddressCodec().StringToBytes(ubd.DelegatorAddress) + if err != nil { + return err + } + + bondDenom, err := k.BondDenom(ctx) + if err != nil { + return err + } + + // track undelegation only when remaining or truncated shares are non-zero + if !ubd.Entries[i].Balance.IsZero() { + amt := sdk.NewCoin(bondDenom, ubd.Entries[i].Balance) + if err := k.bankKeeper.UndelegateCoinsFromModuleToAccount( + ctx, types.NotBondedPoolName, delegatorAddress, sdk.NewCoins(amt), + ); err != nil { + return err + } + } + + // Remove entry + ubd.RemoveEntry(int64(i)) + // Remove from the UnbondingIndex + err = k.DeleteUnbondingIndex(ctx, id) + if err != nil { + return err + } + + } + + // set the unbonding delegation or remove it if there are no more entries + if len(ubd.Entries) == 0 { + return k.RemoveUnbondingDelegation(ctx, ubd) + } + + return k.SetUnbondingDelegation(ctx, ubd) +} + +func (k Keeper) redelegationEntryCanComplete(ctx context.Context, id uint64) error { + red, err := k.GetRedelegationByUnbondingID(ctx, id) + if err != nil { + return err + } + + i, err := redelegationEntryArrayIndex(red, id) + if err != nil { + return err + } + + // The entry must be on hold + if !red.Entries[i].OnHold() { + return errorsmod.Wrapf( + types.ErrUnbondingOnHoldRefCountNegative, + "redelegation unbondingID(%d), expecting UnbondingOnHoldRefCount > 0, got %T", + id, red.Entries[i].UnbondingOnHoldRefCount, + ) + } + red.Entries[i].UnbondingOnHoldRefCount-- + + sdkCtx := sdk.UnwrapSDKContext(ctx) + if !red.Entries[i].OnHold() && red.Entries[i].IsMature(sdkCtx.BlockHeader().Time) { + // If matured, complete it. + // Remove entry + red.RemoveEntry(int64(i)) + // Remove from the Unbonding index + if err = k.DeleteUnbondingIndex(ctx, id); err != nil { + return err + } + } + + // set the redelegation or remove it if there are no more entries + if len(red.Entries) == 0 { + return k.RemoveRedelegation(ctx, red) + } + + return k.SetRedelegation(ctx, red) +} + +func (k Keeper) validatorUnbondingCanComplete(ctx context.Context, id uint64) error { + val, err := k.GetValidatorByUnbondingID(ctx, id) + if err != nil { + return err + } + + if val.UnbondingOnHoldRefCount <= 0 { + return errorsmod.Wrapf( + types.ErrUnbondingOnHoldRefCountNegative, + "val(%s), expecting UnbondingOnHoldRefCount > 0, got %T", + val.OperatorAddress, val.UnbondingOnHoldRefCount, + ) + } + val.UnbondingOnHoldRefCount-- + return k.SetValidator(ctx, val) +} + +// PutUnbondingOnHold allows an external module to stop an unbonding operation, +// such as an unbonding delegation, a redelegation, or a validator unbonding. +// In order for the unbonding operation with `id` to eventually complete, every call +// to PutUnbondingOnHold(id) must be matched by a call to UnbondingCanComplete(id). +func (k Keeper) PutUnbondingOnHold(ctx context.Context, id uint64) error { + unbondingType, err := k.GetUnbondingType(ctx, id) + if err != nil { + return err + } + switch unbondingType { + case types.UnbondingType_UnbondingDelegation: + if err := k.putUnbondingDelegationEntryOnHold(ctx, id); err != nil { + return err + } + case types.UnbondingType_Redelegation: + if err := k.putRedelegationEntryOnHold(ctx, id); err != nil { + return err + } + case types.UnbondingType_ValidatorUnbonding: + if err := k.putValidatorOnHold(ctx, id); err != nil { + return err + } + default: + return types.ErrUnbondingNotFound + } + + return nil +} + +func (k Keeper) putUnbondingDelegationEntryOnHold(ctx context.Context, id uint64) error { + ubd, err := k.GetUnbondingDelegationByUnbondingID(ctx, id) + if err != nil { + return err + } + + i, err := unbondingDelegationEntryArrayIndex(ubd, id) + if err != nil { + return err + } + + ubd.Entries[i].UnbondingOnHoldRefCount++ + return k.SetUnbondingDelegation(ctx, ubd) +} + +func (k Keeper) putRedelegationEntryOnHold(ctx context.Context, id uint64) error { + red, err := k.GetRedelegationByUnbondingID(ctx, id) + if err != nil { + return err + } + + i, err := redelegationEntryArrayIndex(red, id) + if err != nil { + return err + } + + red.Entries[i].UnbondingOnHoldRefCount++ + return k.SetRedelegation(ctx, red) +} + +func (k Keeper) putValidatorOnHold(ctx context.Context, id uint64) error { + val, err := k.GetValidatorByUnbondingID(ctx, id) + if err != nil { + return err + } + + val.UnbondingOnHoldRefCount++ + return k.SetValidator(ctx, val) +} diff --git a/x/staking/keeper/unbonding_test.go b/x/staking/keeper/unbonding_test.go new file mode 100644 index 000000000000..65e7c9de835b --- /dev/null +++ b/x/staking/keeper/unbonding_test.go @@ -0,0 +1,346 @@ +package keeper_test + +import ( + "time" + + "cosmossdk.io/math" + + addresscodec "github.com/cosmos/cosmos-sdk/codec/address" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/x/staking/testutil" + "github.com/cosmos/cosmos-sdk/x/staking/types" +) + +func (s *KeeperTestSuite) TestIncrementUnbondingID() { + for i := 1; i < 10; i++ { + id, err := s.stakingKeeper.IncrementUnbondingID(s.ctx) + s.Require().NoError(err) + s.Require().Equal(uint64(i), id) + } +} + +func (s *KeeperTestSuite) TestUnbondingTypeAccessors() { + require := s.Require() + cases := []struct { + exists bool + name string + expected types.UnbondingType + }{ + { + name: "existing 1", + exists: true, + expected: types.UnbondingType_UnbondingDelegation, + }, + { + name: "existing 2", + exists: true, + expected: types.UnbondingType_Redelegation, + }, + { + name: "not existing", + exists: false, + }, + } + + for i, tc := range cases { + s.Run(tc.name, func() { + if tc.exists { + require.NoError(s.stakingKeeper.SetUnbondingType(s.ctx, uint64(i), tc.expected)) + } + + unbondingType, err := s.stakingKeeper.GetUnbondingType(s.ctx, uint64(i)) + if tc.exists { + require.NoError(err) + require.Equal(tc.expected, unbondingType) + } else { + require.ErrorIs(err, types.ErrNoUnbondingType) + } + }) + } +} + +func (s *KeeperTestSuite) TestUnbondingDelegationByUnbondingIDAccessors() { + delAddrs, valAddrs := createValAddrs(2) + require := s.Require() + + type exists struct { + setUnbondingDelegation bool + setUnbondingDelegationByUnbondingID bool + } + + cases := []struct { + exists exists + name string + expected types.UnbondingDelegation + }{ + { + name: "existing 1", + exists: exists{true, true}, + expected: types.NewUnbondingDelegation( + delAddrs[0], + valAddrs[0], + 0, + time.Unix(0, 0).UTC(), + math.NewInt(5), + 0, + addresscodec.NewBech32Codec("cosmosvaloper"), addresscodec.NewBech32Codec("cosmos"), + ), + }, + { + name: "not existing 1", + exists: exists{false, true}, + expected: types.NewUnbondingDelegation( + delAddrs[1], + valAddrs[1], + 0, + time.Unix(0, 0).UTC(), + math.NewInt(5), + 0, + addresscodec.NewBech32Codec("cosmosvaloper"), addresscodec.NewBech32Codec("cosmos"), + ), + }, + { + name: "not existing 2", + exists: exists{false, false}, + expected: types.NewUnbondingDelegation( + delAddrs[0], + valAddrs[0], + 0, + time.Unix(0, 0).UTC(), + math.NewInt(5), + 0, + addresscodec.NewBech32Codec("cosmosvaloper"), addresscodec.NewBech32Codec("cosmos"), + ), + }, + } + + for i, tc := range cases { + s.Run(tc.name, func() { + if tc.exists.setUnbondingDelegation { + require.NoError(s.stakingKeeper.SetUnbondingDelegation(s.ctx, tc.expected)) + } + + if tc.exists.setUnbondingDelegationByUnbondingID { + require.NoError(s.stakingKeeper.SetUnbondingDelegationByUnbondingID(s.ctx, tc.expected, uint64(i))) + } + + ubd, err := s.stakingKeeper.GetUnbondingDelegationByUnbondingID(s.ctx, uint64(i)) + if tc.exists.setUnbondingDelegation && tc.exists.setUnbondingDelegationByUnbondingID { + require.NoError(err) + require.Equal(tc.expected, ubd) + } else { + require.ErrorIs(err, types.ErrNoUnbondingDelegation) + } + }) + } +} + +func (s *KeeperTestSuite) TestRedelegationByUnbondingIDAccessors() { + delAddrs, valAddrs := createValAddrs(2) + require := s.Require() + + type exists struct { + setRedelegation bool + setRedelegationByUnbondingID bool + } + + cases := []struct { + exists exists + name string + expected types.Redelegation + }{ + { + name: "existing 1", + exists: exists{true, true}, + expected: types.NewRedelegation( + delAddrs[0], + valAddrs[0], + valAddrs[1], + 0, + time.Unix(5, 0).UTC(), + math.NewInt(10), + math.LegacyNewDec(10), + 0, + addresscodec.NewBech32Codec("cosmosvaloper"), addresscodec.NewBech32Codec("cosmos"), + ), + }, + { + name: "not existing 1", + exists: exists{false, true}, + expected: types.NewRedelegation( + delAddrs[1], + valAddrs[0], + valAddrs[1], + 0, + time.Unix(5, 0).UTC(), + math.NewInt(10), + math.LegacyNewDec(10), + 0, + addresscodec.NewBech32Codec("cosmosvaloper"), addresscodec.NewBech32Codec("cosmos"), + ), + }, + { + name: "not existing 2", + exists: exists{false, false}, + expected: types.NewRedelegation( + delAddrs[1], + valAddrs[1], + valAddrs[0], + 0, + time.Unix(5, 0).UTC(), + math.NewInt(10), + math.LegacyNewDec(10), + 0, + addresscodec.NewBech32Codec("cosmosvaloper"), addresscodec.NewBech32Codec("cosmos"), + ), + }, + } + + for i, tc := range cases { + s.Run(tc.name, func() { + if tc.exists.setRedelegation { + require.NoError(s.stakingKeeper.SetRedelegation(s.ctx, tc.expected)) + } + + if tc.exists.setRedelegationByUnbondingID { + require.NoError(s.stakingKeeper.SetRedelegationByUnbondingID(s.ctx, tc.expected, uint64(i))) + } + + red, err := s.stakingKeeper.GetRedelegationByUnbondingID(s.ctx, uint64(i)) + if tc.exists.setRedelegation && tc.exists.setRedelegationByUnbondingID { + require.NoError(err) + require.Equal(tc.expected, red) + } else { + require.ErrorIs(err, types.ErrNoRedelegation) + } + }) + } +} + +func (s *KeeperTestSuite) TestValidatorByUnbondingIDAccessors() { + _, valAddrs := createValAddrs(3) + require := s.Require() + + type exists struct { + setValidator bool + setValidatorByUnbondingID bool + } + + cases := []struct { + exists exists + name string + validator types.Validator + }{ + { + name: "existing 1", + exists: exists{true, true}, + validator: testutil.NewValidator(s.T(), valAddrs[0], PKs[0]), + }, + { + name: "not existing 1", + exists: exists{false, true}, + validator: testutil.NewValidator(s.T(), valAddrs[1], PKs[1]), + }, + { + name: "not existing 2", + exists: exists{false, false}, + validator: testutil.NewValidator(s.T(), valAddrs[2], PKs[0]), + }, + } + + for i, tc := range cases { + s.Run(tc.name, func() { + if tc.exists.setValidator { + require.NoError(s.stakingKeeper.SetValidator(s.ctx, tc.validator)) + } + + if tc.exists.setValidatorByUnbondingID { + require.NoError(s.stakingKeeper.SetValidatorByUnbondingID(s.ctx, tc.validator, uint64(i))) + } + + val, err := s.stakingKeeper.GetValidatorByUnbondingID(s.ctx, uint64(i)) + if tc.exists.setValidator && tc.exists.setValidatorByUnbondingID { + require.NoError(err) + require.Equal(tc.validator, val) + } else { + require.ErrorIs(err, types.ErrNoValidatorFound) + } + }) + } +} + +func (s *KeeperTestSuite) TestUnbondingCanComplete() { + delAddrs, valAddrs := createValAddrs(3) + require := s.Require() + + unbondingID := uint64(1) + + // no unbondingID set + err := s.stakingKeeper.UnbondingCanComplete(s.ctx, unbondingID) + require.ErrorIs(err, types.ErrNoUnbondingType) + + // unbonding delegation + require.NoError(s.stakingKeeper.SetUnbondingType(s.ctx, unbondingID, types.UnbondingType_UnbondingDelegation)) + err = s.stakingKeeper.UnbondingCanComplete(s.ctx, unbondingID) + require.ErrorIs(err, types.ErrNoUnbondingDelegation) + + ubd := types.NewUnbondingDelegation( + delAddrs[0], + valAddrs[0], + 0, + time.Unix(0, 0).UTC(), + math.NewInt(5), + unbondingID, + addresscodec.NewBech32Codec("cosmosvaloper"), addresscodec.NewBech32Codec("cosmos"), + ) + require.NoError(s.stakingKeeper.SetUnbondingDelegation(s.ctx, ubd)) + require.NoError(s.stakingKeeper.SetUnbondingDelegationByUnbondingID(s.ctx, ubd, unbondingID)) + err = s.stakingKeeper.UnbondingCanComplete(s.ctx, unbondingID) + require.ErrorIs(err, types.ErrUnbondingOnHoldRefCountNegative) + + err = s.stakingKeeper.PutUnbondingOnHold(s.ctx, unbondingID) + require.NoError(err) + s.bankKeeper.EXPECT().UndelegateCoinsFromModuleToAccount(s.ctx, types.NotBondedPoolName, delAddrs[0], sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, math.NewInt(5)))).Return(nil) + err = s.stakingKeeper.UnbondingCanComplete(s.ctx, unbondingID) + require.NoError(err) + + // redelegation + unbondingID++ + require.NoError(s.stakingKeeper.SetUnbondingType(s.ctx, unbondingID, types.UnbondingType_Redelegation)) + err = s.stakingKeeper.UnbondingCanComplete(s.ctx, unbondingID) + require.ErrorIs(err, types.ErrNoRedelegation) + + red := types.NewRedelegation( + delAddrs[0], + valAddrs[0], + valAddrs[1], + 0, + time.Unix(5, 0).UTC(), + math.NewInt(10), + math.LegacyNewDec(10), + unbondingID, + addresscodec.NewBech32Codec("cosmosvaloper"), addresscodec.NewBech32Codec("cosmos"), + ) + require.NoError(s.stakingKeeper.SetRedelegation(s.ctx, red)) + require.NoError(s.stakingKeeper.SetRedelegationByUnbondingID(s.ctx, red, unbondingID)) + err = s.stakingKeeper.UnbondingCanComplete(s.ctx, unbondingID) + require.ErrorIs(err, types.ErrUnbondingOnHoldRefCountNegative) + + require.NoError(s.stakingKeeper.PutUnbondingOnHold(s.ctx, unbondingID)) + require.NoError(s.stakingKeeper.UnbondingCanComplete(s.ctx, unbondingID)) + + // validator unbonding + unbondingID++ + require.NoError(s.stakingKeeper.SetUnbondingType(s.ctx, unbondingID, types.UnbondingType_ValidatorUnbonding)) + err = s.stakingKeeper.UnbondingCanComplete(s.ctx, unbondingID) + require.ErrorIs(err, types.ErrNoValidatorFound) + + val := testutil.NewValidator(s.T(), valAddrs[0], PKs[0]) + require.NoError(s.stakingKeeper.SetValidator(s.ctx, val)) + require.NoError(s.stakingKeeper.SetValidatorByUnbondingID(s.ctx, val, unbondingID)) + err = s.stakingKeeper.UnbondingCanComplete(s.ctx, unbondingID) + require.ErrorIs(err, types.ErrUnbondingOnHoldRefCountNegative) + + require.NoError(s.stakingKeeper.PutUnbondingOnHold(s.ctx, unbondingID)) + require.NoError(s.stakingKeeper.UnbondingCanComplete(s.ctx, unbondingID)) +} diff --git a/x/staking/keeper/val_state_change.go b/x/staking/keeper/val_state_change.go index e5a1d5d4759d..64412c1cf3ed 100644 --- a/x/staking/keeper/val_state_change.go +++ b/x/staking/keeper/val_state_change.go @@ -387,6 +387,11 @@ func (k Keeper) BeginUnbondingValidator(ctx context.Context, validator types.Val panic(fmt.Sprintf("should not already be unbonded or unbonding, validator: %v\n", validator)) } + id, err := k.IncrementUnbondingID(ctx) + if err != nil { + return validator, err + } + validator = validator.UpdateStatus(types.Unbonding) sdkCtx := sdk.UnwrapSDKContext(ctx) @@ -394,6 +399,8 @@ func (k Keeper) BeginUnbondingValidator(ctx context.Context, validator types.Val validator.UnbondingTime = sdkCtx.BlockHeader().Time.Add(params.UnbondingTime) validator.UnbondingHeight = sdkCtx.BlockHeader().Height + validator.UnbondingIds = append(validator.UnbondingIds, id) + // save the now unbonded validator record and power index if err = k.SetValidator(ctx, validator); err != nil { return validator, err @@ -423,6 +430,14 @@ func (k Keeper) BeginUnbondingValidator(ctx context.Context, validator types.Val return validator, err } + if err := k.SetValidatorByUnbondingID(ctx, validator, id); err != nil { + return validator, err + } + + if err := k.Hooks().AfterUnbondingInitiated(ctx, id); err != nil { + return validator, err + } + return validator, nil } diff --git a/x/staking/keeper/validator.go b/x/staking/keeper/validator.go index 538fa1d98f3e..232fdf339cc2 100644 --- a/x/staking/keeper/validator.go +++ b/x/staking/keeper/validator.go @@ -615,24 +615,35 @@ func (k Keeper) UnbondAllMatureValidators(ctx context.Context) error { return fmt.Errorf("unexpected validator in unbonding queue; status was not unbonding") } - val, err = k.UnbondingToUnbonded(ctx, val) - if err != nil { - return err - } + if val.UnbondingOnHoldRefCount == 0 { + for _, id := range val.UnbondingIds { + if err = k.DeleteUnbondingIndex(ctx, id); err != nil { + return err + } + } - if val.GetDelegatorShares().IsZero() { - str, err := k.validatorAddressCodec.StringToBytes(val.GetOperator()) + val, err = k.UnbondingToUnbonded(ctx, val) if err != nil { return err } - if err = k.RemoveValidator(ctx, str); err != nil { - return err + + if val.GetDelegatorShares().IsZero() { + str, err := k.validatorAddressCodec.StringToBytes(val.GetOperator()) + if err != nil { + return err + } + if err = k.RemoveValidator(ctx, str); err != nil { + return err + } + } else { + // remove unbonding ids + val.UnbondingIds = []uint64{} } - } - // remove validator from queue - if err = k.DeleteValidatorQueue(ctx, val); err != nil { - return err + // remove validator from queue + if err = k.DeleteValidatorQueue(ctx, val); err != nil { + return err + } } } } diff --git a/x/staking/migrations/v6/keys.go b/x/staking/migrations/v6/keys.go deleted file mode 100644 index c2a01fcb7c84..000000000000 --- a/x/staking/migrations/v6/keys.go +++ /dev/null @@ -1,9 +0,0 @@ -package v6 - -import "cosmossdk.io/collections" - -var ( - UnbondingTypeKey = collections.NewPrefix(57) // prefix for an index containing the type of unbonding operations - UnbondingIDKey = collections.NewPrefix(55) // key for the counter for the incrementing id for UnbondingOperations - UnbondingIndexKey = collections.NewPrefix(56) // prefix for an index for looking up unbonding operations by their IDs -) diff --git a/x/staking/migrations/v6/store.go b/x/staking/migrations/v6/store.go deleted file mode 100644 index e62eb710bad6..000000000000 --- a/x/staking/migrations/v6/store.go +++ /dev/null @@ -1,18 +0,0 @@ -package v6 - -import ( - "context" - - storetypes "cosmossdk.io/store/types" - - "github.com/cosmos/cosmos-sdk/codec" -) - -// MigrateStore performs in-place store migrations from v5 to v6. -// It deletes the ValidatorUpdatesKey from the store. -func MigrateStore(ctx context.Context, store storetypes.KVStore, cdc codec.BinaryCodec) error { - store.Delete(UnbondingIDKey) - store.Delete(UnbondingIndexKey) - store.Delete(UnbondingTypeKey) - return nil -} diff --git a/x/staking/simulation/decoder_test.go b/x/staking/simulation/decoder_test.go index d53263a78729..589d396e682f 100644 --- a/x/staking/simulation/decoder_test.go +++ b/x/staking/simulation/decoder_test.go @@ -32,8 +32,8 @@ func TestDecodeStore(t *testing.T) { val, err := types.NewValidator(valAddr1.String(), delPk1, types.NewDescription("test", "test", "test", "test", "test")) require.NoError(t, err) del := types.NewDelegation(delAddr1.String(), valAddr1.String(), math.LegacyOneDec()) - ubd := types.NewUnbondingDelegation(delAddr1, valAddr1, 15, bondTime, math.OneInt(), address.NewBech32Codec("cosmosvaloper"), address.NewBech32Codec("cosmos")) - red := types.NewRedelegation(delAddr1, valAddr1, valAddr1, 12, bondTime, math.OneInt(), math.LegacyOneDec(), address.NewBech32Codec("cosmosvaloper"), address.NewBech32Codec("cosmos")) + ubd := types.NewUnbondingDelegation(delAddr1, valAddr1, 15, bondTime, math.OneInt(), 1, address.NewBech32Codec("cosmosvaloper"), address.NewBech32Codec("cosmos")) + red := types.NewRedelegation(delAddr1, valAddr1, valAddr1, 12, bondTime, math.OneInt(), math.LegacyOneDec(), 0, address.NewBech32Codec("cosmosvaloper"), address.NewBech32Codec("cosmos")) kvPairs := kv.Pairs{ Pairs: []kv.Pair{ diff --git a/x/staking/simulation/operations_test.go b/x/staking/simulation/operations_test.go index afaf1f4ff9d1..f85060319792 100644 --- a/x/staking/simulation/operations_test.go +++ b/x/staking/simulation/operations_test.go @@ -206,7 +206,7 @@ func (s *SimTestSuite) TestSimulateMsgCancelUnbondingDelegation() { s.setupValidatorRewards(ctx, val0bz) // unbonding delegation - udb := types.NewUnbondingDelegation(delegator.Address, val0bz, s.app.LastBlockHeight()+1, blockTime.Add(2*time.Minute), delTokens, address.NewBech32Codec("cosmosvaloper"), address.NewBech32Codec("cosmos")) + udb := types.NewUnbondingDelegation(delegator.Address, val0bz, s.app.LastBlockHeight()+1, blockTime.Add(2*time.Minute), delTokens, 0, address.NewBech32Codec("cosmosvaloper"), address.NewBech32Codec("cosmos")) require.NoError(s.stakingKeeper.SetUnbondingDelegation(ctx, udb)) s.setupValidatorRewards(ctx, val0bz) diff --git a/x/staking/testutil/expected_keepers_mocks.go b/x/staking/testutil/expected_keepers_mocks.go index affd1063165b..dbea937f07f5 100644 --- a/x/staking/testutil/expected_keepers_mocks.go +++ b/x/staking/testutil/expected_keepers_mocks.go @@ -584,6 +584,20 @@ func (mr *MockStakingHooksMockRecorder) AfterDelegationModified(ctx, delAddr, va return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AfterDelegationModified", reflect.TypeOf((*MockStakingHooks)(nil).AfterDelegationModified), ctx, delAddr, valAddr) } +// AfterUnbondingInitiated mocks base method. +func (m *MockStakingHooks) AfterUnbondingInitiated(ctx context.Context, id uint64) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "AfterUnbondingInitiated", ctx, id) + ret0, _ := ret[0].(error) + return ret0 +} + +// AfterUnbondingInitiated indicates an expected call of AfterUnbondingInitiated. +func (mr *MockStakingHooksMockRecorder) AfterUnbondingInitiated(ctx, id interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AfterUnbondingInitiated", reflect.TypeOf((*MockStakingHooks)(nil).AfterUnbondingInitiated), ctx, id) +} + // AfterValidatorBeginUnbonding mocks base method. func (m *MockStakingHooks) AfterValidatorBeginUnbonding(ctx context.Context, consAddr types.ConsAddress, valAddr types.ValAddress) error { m.ctrl.T.Helper() diff --git a/x/staking/types/delegation.go b/x/staking/types/delegation.go index d18941c0fad4..3284316246f8 100644 --- a/x/staking/types/delegation.go +++ b/x/staking/types/delegation.go @@ -66,12 +66,13 @@ func (d Delegations) String() (out string) { return strings.TrimSpace(out) } -func NewUnbondingDelegationEntry(creationHeight int64, completionTime time.Time, balance math.Int) UnbondingDelegationEntry { +func NewUnbondingDelegationEntry(creationHeight int64, completionTime time.Time, balance math.Int, unbondingID uint64) UnbondingDelegationEntry { return UnbondingDelegationEntry{ CreationHeight: creationHeight, CompletionTime: completionTime, InitialBalance: balance, Balance: balance, + UnbondingId: unbondingID, UnbondingOnHoldRefCount: 0, } } @@ -81,6 +82,26 @@ func (e UnbondingDelegationEntry) IsMature(currentTime time.Time) bool { return !e.CompletionTime.After(currentTime) } +// OnHold - is the current entry on hold due to external modules +func (e UnbondingDelegationEntry) OnHold() bool { + return e.UnbondingOnHoldRefCount > 0 +} + +// return the unbonding delegation entry +func MustMarshalUBDE(cdc codec.BinaryCodec, ubd UnbondingDelegationEntry) []byte { + return cdc.MustMarshal(&ubd) +} + +// unmarshal a unbonding delegation entry from a store value +func MustUnmarshalUBDE(cdc codec.BinaryCodec, value []byte) UnbondingDelegationEntry { + ubd, err := UnmarshalUBDE(cdc, value) + if err != nil { + panic(err) + } + + return ubd +} + // unmarshal a unbonding delegation entry from a store value func UnmarshalUBDE(cdc codec.BinaryCodec, value []byte) (ubd UnbondingDelegationEntry, err error) { err = cdc.Unmarshal(value, &ubd) @@ -90,7 +111,7 @@ func UnmarshalUBDE(cdc codec.BinaryCodec, value []byte) (ubd UnbondingDelegation // NewUnbondingDelegation - create a new unbonding delegation object func NewUnbondingDelegation( delegatorAddr sdk.AccAddress, validatorAddr sdk.ValAddress, - creationHeight int64, minTime time.Time, balance math.Int, + creationHeight int64, minTime time.Time, balance math.Int, id uint64, valAc, delAc address.Codec, ) UnbondingDelegation { valAddr, err := valAc.BytesToString(validatorAddr) @@ -105,13 +126,13 @@ func NewUnbondingDelegation( DelegatorAddress: delAddr, ValidatorAddress: valAddr, Entries: []UnbondingDelegationEntry{ - NewUnbondingDelegationEntry(creationHeight, minTime, balance), + NewUnbondingDelegationEntry(creationHeight, minTime, balance, id), }, } } // AddEntry - append entry to the unbonding delegation -func (ubd *UnbondingDelegation) AddEntry(creationHeight int64, minTime time.Time, balance math.Int) bool { +func (ubd *UnbondingDelegation) AddEntry(creationHeight int64, minTime time.Time, balance math.Int, unbondingID uint64) bool { // Check the entries exists with creation_height and complete_time entryIndex := -1 for index, ubdEntry := range ubd.Entries { @@ -131,7 +152,7 @@ func (ubd *UnbondingDelegation) AddEntry(creationHeight int64, minTime time.Time return false } // append the new unbond delegation entry - entry := NewUnbondingDelegationEntry(creationHeight, minTime, balance) + entry := NewUnbondingDelegationEntry(creationHeight, minTime, balance, unbondingID) ubd.Entries = append(ubd.Entries, entry) return true } @@ -173,12 +194,13 @@ func (ubds UnbondingDelegations) String() (out string) { return strings.TrimSpace(out) } -func NewRedelegationEntry(creationHeight int64, completionTime time.Time, balance math.Int, sharesDst math.LegacyDec) RedelegationEntry { +func NewRedelegationEntry(creationHeight int64, completionTime time.Time, balance math.Int, sharesDst math.LegacyDec, id uint64) RedelegationEntry { return RedelegationEntry{ CreationHeight: creationHeight, CompletionTime: completionTime, InitialBalance: balance, SharesDst: sharesDst, + UnbondingId: id, UnbondingOnHoldRefCount: 0, } } @@ -195,7 +217,7 @@ func (e RedelegationEntry) OnHold() bool { func NewRedelegation( delegatorAddr sdk.AccAddress, validatorSrcAddr, validatorDstAddr sdk.ValAddress, - creationHeight int64, minTime time.Time, balance math.Int, sharesDst math.LegacyDec, + creationHeight int64, minTime time.Time, balance math.Int, sharesDst math.LegacyDec, id uint64, valAc, delAc address.Codec, ) Redelegation { valSrcAddr, err := valAc.BytesToString(validatorSrcAddr) @@ -216,14 +238,14 @@ func NewRedelegation( ValidatorSrcAddress: valSrcAddr, ValidatorDstAddress: valDstAddr, Entries: []RedelegationEntry{ - NewRedelegationEntry(creationHeight, minTime, balance, sharesDst), + NewRedelegationEntry(creationHeight, minTime, balance, sharesDst, id), }, } } // AddEntry - append entry to the unbonding delegation -func (red *Redelegation) AddEntry(creationHeight int64, minTime time.Time, balance math.Int, sharesDst math.LegacyDec) { - entry := NewRedelegationEntry(creationHeight, minTime, balance, sharesDst) +func (red *Redelegation) AddEntry(creationHeight int64, minTime time.Time, balance math.Int, sharesDst math.LegacyDec, id uint64) { + entry := NewRedelegationEntry(creationHeight, minTime, balance, sharesDst, id) red.Entries = append(red.Entries, entry) } @@ -319,10 +341,10 @@ func NewRedelegationResponse( // NewRedelegationEntryResponse creates a new RedelegationEntryResponse instance. func NewRedelegationEntryResponse( - creationHeight int64, completionTime time.Time, sharesDst math.LegacyDec, initialBalance, balance math.Int, + creationHeight int64, completionTime time.Time, sharesDst math.LegacyDec, initialBalance, balance math.Int, unbondingID uint64, ) RedelegationEntryResponse { return RedelegationEntryResponse{ - RedelegationEntry: NewRedelegationEntry(creationHeight, completionTime, initialBalance, sharesDst), + RedelegationEntry: NewRedelegationEntry(creationHeight, completionTime, initialBalance, sharesDst, unbondingID), Balance: balance, } } diff --git a/x/staking/types/delegation_test.go b/x/staking/types/delegation_test.go index 24416161c225..3ce9d8b6c535 100644 --- a/x/staking/types/delegation_test.go +++ b/x/staking/types/delegation_test.go @@ -37,7 +37,7 @@ func TestDelegationString(t *testing.T) { func TestUnbondingDelegationEqual(t *testing.T) { ubd1 := types.NewUnbondingDelegation(sdk.AccAddress(valAddr1), valAddr2, 0, - time.Unix(0, 0), math.NewInt(0), addresscodec.NewBech32Codec("cosmosvaloper"), addresscodec.NewBech32Codec("cosmos")) + time.Unix(0, 0), math.NewInt(0), 1, addresscodec.NewBech32Codec("cosmosvaloper"), addresscodec.NewBech32Codec("cosmos")) ubd2 := ubd1 ok := ubd1.String() == ubd2.String() @@ -52,7 +52,7 @@ func TestUnbondingDelegationEqual(t *testing.T) { func TestUnbondingDelegationString(t *testing.T) { ubd := types.NewUnbondingDelegation(sdk.AccAddress(valAddr1), valAddr2, 0, - time.Unix(0, 0), math.NewInt(0), addresscodec.NewBech32Codec("cosmosvaloper"), addresscodec.NewBech32Codec("cosmos")) + time.Unix(0, 0), math.NewInt(0), 1, addresscodec.NewBech32Codec("cosmosvaloper"), addresscodec.NewBech32Codec("cosmos")) require.NotEmpty(t, ubd.String()) } @@ -60,10 +60,10 @@ func TestUnbondingDelegationString(t *testing.T) { func TestRedelegationEqual(t *testing.T) { r1 := types.NewRedelegation(sdk.AccAddress(valAddr1), valAddr2, valAddr3, 0, time.Unix(0, 0), math.NewInt(0), - math.LegacyNewDec(0), addresscodec.NewBech32Codec("cosmosvaloper"), addresscodec.NewBech32Codec("cosmos")) + math.LegacyNewDec(0), 1, addresscodec.NewBech32Codec("cosmosvaloper"), addresscodec.NewBech32Codec("cosmos")) r2 := types.NewRedelegation(sdk.AccAddress(valAddr1), valAddr2, valAddr3, 0, time.Unix(0, 0), math.NewInt(0), - math.LegacyNewDec(0), addresscodec.NewBech32Codec("cosmosvaloper"), addresscodec.NewBech32Codec("cosmos")) + math.LegacyNewDec(0), 1, addresscodec.NewBech32Codec("cosmosvaloper"), addresscodec.NewBech32Codec("cosmos")) require.True(t, proto.Equal(&r1, &r2)) r2.Entries[0].SharesDst = math.LegacyNewDec(10) @@ -74,7 +74,7 @@ func TestRedelegationEqual(t *testing.T) { func TestRedelegationString(t *testing.T) { r := types.NewRedelegation(sdk.AccAddress(valAddr1), valAddr2, valAddr3, 0, time.Unix(0, 0), math.NewInt(0), - math.LegacyNewDec(10), addresscodec.NewBech32Codec("cosmosvaloper"), addresscodec.NewBech32Codec("cosmos")) + math.LegacyNewDec(10), 1, addresscodec.NewBech32Codec("cosmosvaloper"), addresscodec.NewBech32Codec("cosmos")) require.NotEmpty(t, r.String()) } @@ -111,8 +111,8 @@ func TestDelegationResponses(t *testing.T) { func TestRedelegationResponses(t *testing.T) { cdc := codec.NewLegacyAmino() entries := []types.RedelegationEntryResponse{ - types.NewRedelegationEntryResponse(0, time.Unix(0, 0), math.LegacyNewDec(5), math.NewInt(5), math.NewInt(5)), - types.NewRedelegationEntryResponse(0, time.Unix(0, 0), math.LegacyNewDec(5), math.NewInt(5), math.NewInt(5)), + types.NewRedelegationEntryResponse(0, time.Unix(0, 0), math.LegacyNewDec(5), math.NewInt(5), math.NewInt(5), 0), + types.NewRedelegationEntryResponse(0, time.Unix(0, 0), math.LegacyNewDec(5), math.NewInt(5), math.NewInt(5), 0), } rdr1 := types.NewRedelegationResponse(sdk.AccAddress(valAddr1).String(), valAddr2.String(), valAddr3.String(), entries) rdr2 := types.NewRedelegationResponse(sdk.AccAddress(valAddr2).String(), valAddr1.String(), valAddr3.String(), entries) diff --git a/x/staking/types/expected_keepers.go b/x/staking/types/expected_keepers.go index b05e436c2888..96f816a5acb1 100644 --- a/x/staking/types/expected_keepers.go +++ b/x/staking/types/expected_keepers.go @@ -108,6 +108,7 @@ type StakingHooks interface { BeforeDelegationRemoved(ctx context.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress) error // Must be called when a delegation is removed AfterDelegationModified(ctx context.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress) error BeforeValidatorSlashed(ctx context.Context, valAddr sdk.ValAddress, fraction math.LegacyDec) error + AfterUnbondingInitiated(ctx context.Context, id uint64) error } // StakingHooksWrapper is a wrapper for modules to inject StakingHooks using depinject. diff --git a/x/staking/types/hooks.go b/x/staking/types/hooks.go index 58e536e6d594..8a052d9514a1 100644 --- a/x/staking/types/hooks.go +++ b/x/staking/types/hooks.go @@ -107,3 +107,12 @@ func (h MultiStakingHooks) BeforeValidatorSlashed(ctx context.Context, valAddr s } return nil } + +func (h MultiStakingHooks) AfterUnbondingInitiated(ctx context.Context, id uint64) error { + for i := range h { + if err := h[i].AfterUnbondingInitiated(ctx, id); err != nil { + return err + } + } + return nil +} diff --git a/x/staking/types/keys.go b/x/staking/types/keys.go index b52440461579..ae4f325acedb 100644 --- a/x/staking/types/keys.go +++ b/x/staking/types/keys.go @@ -45,6 +45,10 @@ var ( RedelegationByValSrcIndexKey = []byte{0x35} // prefix for each key for an redelegation, by source validator operator RedelegationByValDstIndexKey = []byte{0x36} // prefix for each key for an redelegation, by destination validator operator + UnbondingIDKey = []byte{0x37} // key for the counter for the incrementing id for UnbondingOperations + UnbondingIndexKey = []byte{0x38} // prefix for an index for looking up unbonding operations by their IDs + UnbondingTypeKey = []byte{0x39} // prefix for an index containing the type of unbonding operations + UnbondingQueueKey = []byte{0x41} // prefix for the timestamps in unbonding queue RedelegationQueueKey = []byte{0x42} // prefix for the timestamps in redelegations queue ValidatorQueueKey = []byte{0x43} // prefix for the timestamps in validator queue @@ -68,6 +72,20 @@ const ( UnbondingType_ValidatorUnbonding ) +// GetUnbondingTypeKey returns a key for an index containing the type of unbonding operations +func GetUnbondingTypeKey(id uint64) []byte { + bz := make([]byte, 8) + binary.BigEndian.PutUint64(bz, id) + return append(UnbondingTypeKey, bz...) +} + +// GetUnbondingIndexKey returns a key for the index for looking up UnbondingDelegations by the UnbondingDelegationEntries they contain +func GetUnbondingIndexKey(id uint64) []byte { + bz := make([]byte, 8) + binary.BigEndian.PutUint64(bz, id) + return append(UnbondingIndexKey, bz...) +} + // GetValidatorKey creates the key for the validator with address // VALUE: staking/Validator func GetValidatorKey(operatorAddr sdk.ValAddress) []byte { diff --git a/x/staking/types/staking.pb.go b/x/staking/types/staking.pb.go index e7854d578a48..0f8b583e7a9b 100644 --- a/x/staking/types/staking.pb.go +++ b/x/staking/types/staking.pb.go @@ -729,7 +729,7 @@ type UnbondingDelegationEntry struct { // balance defines the tokens to receive at completion. Balance cosmossdk_io_math.Int `protobuf:"bytes,4,opt,name=balance,proto3,customtype=cosmossdk.io/math.Int" json:"balance"` // Incrementing id that uniquely identifies this entry - UnbondingId uint64 `protobuf:"varint,5,opt,name=unbonding_id,json=unbondingId,proto3" json:"unbonding_id,omitempty"` // Deprecated: Do not use. + UnbondingId uint64 `protobuf:"varint,5,opt,name=unbonding_id,json=unbondingId,proto3" json:"unbonding_id,omitempty"` // Strictly positive if this entry's unbonding has been stopped by external modules UnbondingOnHoldRefCount int64 `protobuf:"varint,6,opt,name=unbonding_on_hold_ref_count,json=unbondingOnHoldRefCount,proto3" json:"unbonding_on_hold_ref_count,omitempty"` } @@ -781,7 +781,6 @@ func (m *UnbondingDelegationEntry) GetCompletionTime() time.Time { return time.Time{} } -// Deprecated: Do not use. func (m *UnbondingDelegationEntry) GetUnbondingId() uint64 { if m != nil { return m.UnbondingId @@ -1277,127 +1276,126 @@ func init() { } var fileDescriptor_64c30c6cf92913c9 = []byte{ - // 1910 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x58, 0x4b, 0x6c, 0x1b, 0xc7, - 0x19, 0xd6, 0x92, 0x0a, 0x25, 0xfd, 0x94, 0x44, 0x6a, 0x2c, 0xdb, 0x34, 0xdd, 0x88, 0x34, 0xe3, - 0x34, 0x8a, 0x1b, 0x91, 0xb5, 0x0a, 0xe4, 0xa0, 0x16, 0x2d, 0x44, 0x91, 0x8e, 0x99, 0x26, 0x92, - 0x4a, 0x4a, 0x6a, 0xd3, 0xd7, 0x62, 0xb8, 0x3b, 0xa2, 0xa6, 0xe2, 0xee, 0xb2, 0x3b, 0x43, 0x57, - 0xbc, 0xf7, 0x10, 0xa8, 0x28, 0x10, 0xa0, 0x40, 0xd1, 0x43, 0x8d, 0x18, 0xe8, 0x25, 0xbd, 0xe5, - 0x60, 0xf4, 0xde, 0x5b, 0x5a, 0xa0, 0x80, 0xe1, 0x53, 0x51, 0xa0, 0x6a, 0x61, 0x1f, 0x12, 0xb4, - 0x97, 0xa2, 0xa7, 0x1e, 0x8b, 0x79, 0xec, 0x83, 0xa2, 0x64, 0x59, 0x8e, 0x0f, 0x46, 0x7b, 0x59, - 0xec, 0xcc, 0xfc, 0xff, 0x37, 0xf3, 0x7f, 0xff, 0x63, 0x1e, 0x70, 0xdd, 0xf2, 0x98, 0xe3, 0xb1, - 0x0a, 0xe3, 0x78, 0x9f, 0xba, 0x9d, 0xca, 0x9d, 0x9b, 0x6d, 0xc2, 0xf1, 0xcd, 0xa0, 0x5d, 0xee, - 0xf9, 0x1e, 0xf7, 0xd0, 0x25, 0x25, 0x55, 0x0e, 0x7a, 0xb5, 0x54, 0x7e, 0xbe, 0xe3, 0x75, 0x3c, - 0x29, 0x52, 0x11, 0x7f, 0x4a, 0x3a, 0x7f, 0xa5, 0xe3, 0x79, 0x9d, 0x2e, 0xa9, 0xc8, 0x56, 0xbb, - 0xbf, 0x5b, 0xc1, 0xee, 0x40, 0x0f, 0x2d, 0x1c, 0x1f, 0xb2, 0xfb, 0x3e, 0xe6, 0xd4, 0x73, 0xf5, - 0x78, 0xe1, 0xf8, 0x38, 0xa7, 0x0e, 0x61, 0x1c, 0x3b, 0xbd, 0x00, 0x5b, 0xad, 0xc4, 0x54, 0x93, - 0xea, 0x65, 0x69, 0x6c, 0x6d, 0x4a, 0x1b, 0x33, 0x12, 0xda, 0x61, 0x79, 0x34, 0xc0, 0x9e, 0xc3, - 0x0e, 0x75, 0xbd, 0x8a, 0xfc, 0xea, 0xae, 0x2f, 0x70, 0xe2, 0xda, 0xc4, 0x77, 0xa8, 0xcb, 0x2b, - 0x7c, 0xd0, 0x23, 0x4c, 0x7d, 0xf5, 0xe8, 0xd5, 0xd8, 0x28, 0x6e, 0x5b, 0x34, 0x3e, 0x58, 0xfa, - 0x85, 0x01, 0xb3, 0xb7, 0x29, 0xe3, 0x9e, 0x4f, 0x2d, 0xdc, 0x6d, 0xb8, 0xbb, 0x1e, 0xfa, 0x2a, - 0xa4, 0xf6, 0x08, 0xb6, 0x89, 0x9f, 0x33, 0x8a, 0xc6, 0x62, 0x7a, 0x39, 0x57, 0x8e, 0x00, 0xca, - 0x4a, 0xf7, 0xb6, 0x1c, 0xaf, 0x4e, 0x7d, 0x72, 0x54, 0x18, 0xfb, 0xe8, 0xd3, 0x8f, 0x6f, 0x18, - 0x4d, 0xad, 0x82, 0x6a, 0x90, 0xba, 0x83, 0xbb, 0x8c, 0xf0, 0x5c, 0xa2, 0x98, 0x5c, 0x4c, 0x2f, - 0x5f, 0x2b, 0x9f, 0xcc, 0x79, 0x79, 0x07, 0x77, 0xa9, 0x8d, 0xb9, 0x37, 0x8c, 0xa2, 0x74, 0x4b, - 0xbf, 0x4c, 0x40, 0x66, 0xcd, 0x73, 0x1c, 0xca, 0x18, 0xf5, 0xdc, 0x26, 0xe6, 0x84, 0xa1, 0xb7, - 0x61, 0xdc, 0xc7, 0x9c, 0xc8, 0x45, 0x4d, 0x55, 0xdf, 0x14, 0x4a, 0x7f, 0x39, 0x2a, 0x5c, 0x55, - 0xf0, 0xcc, 0xde, 0x2f, 0x53, 0xaf, 0xe2, 0x60, 0xbe, 0x57, 0x7e, 0x87, 0x74, 0xb0, 0x35, 0xa8, - 0x11, 0xeb, 0xe1, 0xfd, 0x25, 0xd0, 0xb3, 0xd7, 0x88, 0xa5, 0x66, 0x90, 0x18, 0xe8, 0x5b, 0x30, - 0xe9, 0xe0, 0x03, 0x53, 0xe2, 0x25, 0x3e, 0x17, 0xde, 0x84, 0x83, 0x0f, 0xc4, 0xfa, 0xd0, 0x0f, - 0x21, 0x23, 0x20, 0xad, 0x3d, 0xec, 0x76, 0x88, 0x42, 0x4e, 0x7e, 0x2e, 0xe4, 0x19, 0x07, 0x1f, - 0xac, 0x49, 0x34, 0x81, 0xbf, 0x32, 0xfe, 0xd9, 0xbd, 0x82, 0x51, 0xfa, 0xbd, 0x01, 0x10, 0x11, - 0x83, 0x30, 0x64, 0xad, 0xb0, 0x25, 0x27, 0x65, 0xda, 0x69, 0xaf, 0x9d, 0xc6, 0xfb, 0x31, 0x5a, - 0xab, 0x33, 0x62, 0x79, 0x0f, 0x8e, 0x0a, 0x86, 0x9a, 0x35, 0x63, 0x8d, 0xd0, 0x9e, 0xee, 0xf7, - 0x6c, 0xcc, 0x89, 0x29, 0x62, 0x58, 0xb2, 0x95, 0x5e, 0xce, 0x97, 0x55, 0x80, 0x97, 0x83, 0x00, - 0x2f, 0x6f, 0x05, 0x01, 0xae, 0x00, 0x3f, 0xf8, 0x5b, 0x00, 0x08, 0x4a, 0x5b, 0x8c, 0x6b, 0x1b, - 0x3e, 0x32, 0x20, 0x5d, 0x23, 0xcc, 0xf2, 0x69, 0x4f, 0xa4, 0x0c, 0xca, 0xc1, 0x84, 0xe3, 0xb9, - 0x74, 0x5f, 0x07, 0xdc, 0x54, 0x33, 0x68, 0xa2, 0x3c, 0x4c, 0x52, 0x9b, 0xb8, 0x9c, 0xf2, 0x81, - 0x72, 0x53, 0x33, 0x6c, 0x0b, 0xad, 0x9f, 0x90, 0x36, 0xa3, 0x01, 0xcf, 0xcd, 0xa0, 0x89, 0x5e, - 0x87, 0x2c, 0x23, 0x56, 0xdf, 0xa7, 0x7c, 0x60, 0x5a, 0x9e, 0xcb, 0xb1, 0xc5, 0x73, 0xe3, 0x52, - 0x24, 0x13, 0xf4, 0xaf, 0xa9, 0x6e, 0x01, 0x62, 0x13, 0x8e, 0x69, 0x97, 0xe5, 0x5e, 0x52, 0x20, - 0xba, 0xa9, 0x97, 0x7a, 0x38, 0x01, 0x53, 0x61, 0xa0, 0xa2, 0x35, 0xc8, 0x7a, 0x3d, 0xe2, 0x8b, - 0x7f, 0x13, 0xdb, 0xb6, 0x4f, 0x18, 0xd3, 0xd1, 0x98, 0x7b, 0x78, 0x7f, 0x69, 0x5e, 0x13, 0xbe, - 0xaa, 0x46, 0x5a, 0xdc, 0xa7, 0x6e, 0xa7, 0x99, 0x09, 0x34, 0x74, 0x37, 0x7a, 0x4f, 0xb8, 0xcc, - 0x65, 0xc4, 0x65, 0x7d, 0x66, 0xf6, 0xfa, 0xed, 0x7d, 0x32, 0xd0, 0xa4, 0xce, 0x8f, 0x90, 0xba, - 0xea, 0x0e, 0xaa, 0xb9, 0x3f, 0x46, 0xd0, 0x96, 0x3f, 0xe8, 0x71, 0xaf, 0xbc, 0xd9, 0x6f, 0x7f, - 0x93, 0x0c, 0x84, 0xab, 0x34, 0xce, 0xa6, 0x84, 0x41, 0x97, 0x20, 0xf5, 0x23, 0x4c, 0xbb, 0xc4, - 0x96, 0x8c, 0x4c, 0x36, 0x75, 0x0b, 0xad, 0x40, 0x8a, 0x71, 0xcc, 0xfb, 0x4c, 0xd2, 0x30, 0xbb, - 0x5c, 0x3a, 0x2d, 0x36, 0xaa, 0x9e, 0x6b, 0xb7, 0xa4, 0x64, 0x53, 0x6b, 0xa0, 0x35, 0x48, 0x71, - 0x6f, 0x9f, 0xb8, 0x9a, 0xa0, 0xea, 0x97, 0x74, 0x34, 0x5f, 0x1c, 0x8d, 0xe6, 0x86, 0xcb, 0x63, - 0x71, 0xdc, 0x70, 0x79, 0x53, 0xab, 0xa2, 0xef, 0x43, 0xd6, 0x26, 0x5d, 0xd2, 0x91, 0xcc, 0xb1, - 0x3d, 0xec, 0x13, 0x96, 0x4b, 0x49, 0xb8, 0x9b, 0xe7, 0x4e, 0x8e, 0x66, 0x26, 0x84, 0x6a, 0x49, - 0x24, 0xb4, 0x09, 0x69, 0x3b, 0x0a, 0xa7, 0xdc, 0x84, 0x24, 0xf3, 0x95, 0xd3, 0x6c, 0x8c, 0x45, - 0x5e, 0xbc, 0xf2, 0xc4, 0x21, 0x44, 0x04, 0xf5, 0xdd, 0xb6, 0xe7, 0xda, 0xd4, 0xed, 0x98, 0x7b, - 0x84, 0x76, 0xf6, 0x78, 0x6e, 0xb2, 0x68, 0x2c, 0x26, 0x9b, 0x99, 0xb0, 0xff, 0xb6, 0xec, 0x46, - 0x9b, 0x30, 0x1b, 0x89, 0xca, 0x0c, 0x99, 0x3a, 0x6f, 0x86, 0xcc, 0x84, 0x00, 0x42, 0x04, 0xbd, - 0x0b, 0x10, 0xe5, 0x60, 0x0e, 0x24, 0x5a, 0xe9, 0xec, 0x6c, 0x8e, 0x1b, 0x13, 0x03, 0x40, 0xdf, - 0x83, 0x0b, 0x0e, 0x75, 0x4d, 0x46, 0xba, 0xbb, 0xa6, 0x66, 0x4e, 0xe0, 0xa6, 0xcf, 0xef, 0xcd, - 0x39, 0x87, 0xba, 0x2d, 0xd2, 0xdd, 0xad, 0x85, 0x28, 0xe8, 0x6b, 0x70, 0x35, 0xb2, 0xde, 0x73, - 0xcd, 0x3d, 0xaf, 0x6b, 0x9b, 0x3e, 0xd9, 0x35, 0x2d, 0xaf, 0xef, 0xf2, 0xdc, 0xb4, 0xe4, 0xec, - 0x72, 0x28, 0xb2, 0xe1, 0xde, 0xf6, 0xba, 0x76, 0x93, 0xec, 0xae, 0x89, 0x61, 0xf4, 0x0a, 0x44, - 0xa6, 0x9b, 0xd4, 0x66, 0xb9, 0x99, 0x62, 0x72, 0x71, 0xbc, 0x39, 0x1d, 0x76, 0x36, 0x6c, 0xb6, - 0x32, 0xf9, 0xfe, 0xbd, 0xc2, 0xd8, 0x67, 0xf7, 0x0a, 0x63, 0xa5, 0x5b, 0x30, 0xbd, 0x83, 0xbb, - 0x3a, 0x8f, 0x08, 0x43, 0x6f, 0xc2, 0x14, 0x0e, 0x1a, 0x39, 0xa3, 0x98, 0x7c, 0x62, 0x1e, 0x46, - 0xa2, 0xa5, 0xdf, 0x1a, 0x90, 0xaa, 0xed, 0x6c, 0x62, 0xea, 0xa3, 0x3a, 0xcc, 0x45, 0x81, 0xf9, - 0xb4, 0x29, 0x1d, 0xc5, 0x72, 0x90, 0xd3, 0xeb, 0x30, 0x77, 0x27, 0xa8, 0x12, 0x21, 0x8c, 0xda, - 0x57, 0xae, 0x3d, 0xbc, 0xbf, 0xf4, 0xb2, 0x86, 0x09, 0x2b, 0xc9, 0x31, 0xbc, 0x3b, 0xc7, 0xfa, - 0x63, 0x36, 0xbf, 0x0d, 0x13, 0x6a, 0xa9, 0x0c, 0x7d, 0x03, 0x5e, 0xea, 0x89, 0x1f, 0x69, 0x6a, - 0x7a, 0x79, 0xe1, 0xd4, 0x00, 0x97, 0xf2, 0xf1, 0x70, 0x50, 0x7a, 0xa5, 0x9f, 0x25, 0x00, 0x6a, - 0x3b, 0x3b, 0x5b, 0x3e, 0xed, 0x75, 0x09, 0x7f, 0x5e, 0xb6, 0x6f, 0xc3, 0xc5, 0xc8, 0x76, 0xe6, - 0x5b, 0xe7, 0xb7, 0xff, 0x42, 0xa8, 0xdf, 0xf2, 0xad, 0x13, 0x61, 0x6d, 0xc6, 0x43, 0xd8, 0xe4, - 0xf9, 0x61, 0x6b, 0x8c, 0x8f, 0x32, 0xfb, 0x1d, 0x48, 0x47, 0x64, 0x30, 0xd4, 0x80, 0x49, 0xae, - 0xff, 0x35, 0xc1, 0xa5, 0xd3, 0x09, 0x0e, 0xd4, 0xe2, 0x24, 0x87, 0xea, 0xa5, 0xff, 0x18, 0x00, - 0xb1, 0x1c, 0x79, 0x31, 0x63, 0x0c, 0x35, 0x20, 0xa5, 0x2b, 0x71, 0xf2, 0x59, 0x2b, 0xb1, 0x06, - 0x88, 0x91, 0xfa, 0xf3, 0x04, 0x5c, 0xd8, 0x0e, 0xb2, 0xf7, 0xc5, 0xe7, 0x60, 0x1b, 0x26, 0x88, - 0xcb, 0x7d, 0x2a, 0x49, 0x10, 0x3e, 0xff, 0xf2, 0x69, 0x3e, 0x3f, 0xc1, 0xa8, 0xba, 0xcb, 0xfd, - 0x41, 0x3c, 0x02, 0x02, 0xac, 0x18, 0x1f, 0x1f, 0x26, 0x21, 0x77, 0x9a, 0x2a, 0x7a, 0x0d, 0x32, - 0x96, 0x4f, 0x64, 0x47, 0xb0, 0xc9, 0x18, 0xb2, 0x60, 0xce, 0x06, 0xdd, 0x7a, 0x8f, 0x69, 0x82, - 0x38, 0x95, 0x89, 0xe0, 0x12, 0xa2, 0xcf, 0x76, 0x0c, 0x9b, 0x8d, 0x10, 0xe4, 0x2e, 0xb3, 0x05, - 0x19, 0xea, 0x52, 0x4e, 0x71, 0xd7, 0x6c, 0xe3, 0x2e, 0x76, 0xad, 0xe0, 0xb8, 0x7a, 0xae, 0x2d, - 0x61, 0x56, 0x63, 0x54, 0x15, 0x04, 0xaa, 0xc3, 0x44, 0x80, 0x36, 0x7e, 0x7e, 0xb4, 0x40, 0x17, - 0xbd, 0x0a, 0xd3, 0xf1, 0x8d, 0x41, 0x1e, 0x3d, 0xc6, 0xab, 0x89, 0x9c, 0xd1, 0x4c, 0xc7, 0xf6, - 0x86, 0xb3, 0x76, 0x9f, 0xd4, 0x13, 0x77, 0x1f, 0x7d, 0xc2, 0xfb, 0x30, 0x09, 0x73, 0x4d, 0x62, - 0xff, 0xef, 0xbb, 0x66, 0x13, 0x40, 0xa5, 0xab, 0xa8, 0xa6, 0xda, 0x3b, 0xcf, 0x90, 0xf3, 0x53, - 0x0a, 0xa4, 0xc6, 0x38, 0xba, 0x76, 0x92, 0x97, 0x9e, 0xbf, 0x87, 0xfe, 0x9a, 0x80, 0xe9, 0xb8, - 0x87, 0xfe, 0x2f, 0x37, 0x2e, 0xb4, 0x1e, 0x95, 0xaa, 0x71, 0x59, 0xaa, 0x5e, 0x3f, 0xad, 0x54, - 0x8d, 0x44, 0xf3, 0x19, 0x35, 0xea, 0xd7, 0x49, 0x48, 0x6d, 0x62, 0x1f, 0x3b, 0x0c, 0x6d, 0x8c, - 0x1c, 0x66, 0xd5, 0x65, 0xf2, 0xca, 0x48, 0x30, 0xd7, 0xf4, 0x7b, 0x87, 0x8a, 0xe5, 0x5f, 0x9d, - 0x76, 0x96, 0x7d, 0x15, 0x66, 0xc5, 0xa5, 0x38, 0x34, 0x48, 0x91, 0x3b, 0x23, 0xef, 0xb6, 0xa1, - 0xf5, 0x0c, 0x15, 0x20, 0x2d, 0xc4, 0xa2, 0x5a, 0x2c, 0x64, 0xc0, 0xc1, 0x07, 0x75, 0xd5, 0x83, - 0x96, 0x00, 0xed, 0x85, 0x8f, 0x14, 0x66, 0x44, 0x84, 0x90, 0x9b, 0x8b, 0x46, 0x02, 0xf1, 0x97, - 0x01, 0xc4, 0x2a, 0x4c, 0x9b, 0xb8, 0x9e, 0xa3, 0x6f, 0x76, 0x53, 0xa2, 0xa7, 0x26, 0x3a, 0xd0, - 0x4f, 0x0d, 0x75, 0x26, 0x3e, 0x76, 0x75, 0xd6, 0x57, 0x92, 0xad, 0xa7, 0x48, 0x8a, 0x7f, 0x1f, - 0x15, 0xf2, 0x03, 0xec, 0x74, 0x57, 0x4a, 0x27, 0xe0, 0x94, 0x4e, 0xba, 0xcd, 0x8b, 0xc3, 0xf3, - 0xf0, 0xd5, 0x7b, 0xe5, 0xba, 0x08, 0xef, 0xc3, 0x4f, 0x3f, 0xbe, 0xa1, 0x67, 0x5a, 0x62, 0xf6, - 0x7e, 0xe5, 0x20, 0x7c, 0xc2, 0x52, 0x3e, 0x11, 0xa7, 0x55, 0x14, 0xed, 0x1c, 0x4d, 0xc2, 0x7a, - 0xe2, 0xd6, 0x27, 0x6e, 0x09, 0xb1, 0xd3, 0xbc, 0xf1, 0xe4, 0x5b, 0x42, 0xa4, 0x3f, 0x74, 0x4b, - 0x88, 0xe5, 0xd4, 0xd7, 0xa3, 0xc2, 0x9d, 0xd0, 0x2e, 0xd7, 0x58, 0x6d, 0xcc, 0x48, 0xec, 0xba, - 0x41, 0x87, 0x20, 0x02, 0x25, 0x99, 0xaa, 0x63, 0xa5, 0x3f, 0x19, 0x70, 0x65, 0x24, 0xfc, 0xc2, - 0x25, 0x5b, 0x80, 0xfc, 0xd8, 0xa0, 0x74, 0xe3, 0x40, 0x2f, 0xfd, 0xd9, 0xa2, 0x79, 0xce, 0x1f, - 0xa9, 0xdc, 0xcf, 0x67, 0x07, 0xd2, 0xa5, 0xe7, 0x0f, 0x06, 0xcc, 0xc7, 0x17, 0x10, 0x9a, 0xd2, - 0x82, 0xe9, 0xf8, 0xd4, 0xda, 0x88, 0xeb, 0x4f, 0x63, 0x44, 0x7c, 0xfd, 0x43, 0x20, 0x68, 0x27, - 0x4a, 0x71, 0xf5, 0x76, 0x76, 0xf3, 0xa9, 0x49, 0x09, 0x16, 0x76, 0x62, 0xaa, 0x2b, 0xdf, 0xfc, - 0xd3, 0x80, 0xf1, 0x4d, 0xcf, 0xeb, 0xa2, 0x1f, 0xc3, 0x9c, 0xeb, 0x71, 0x53, 0xa4, 0x03, 0xb1, - 0x4d, 0x7d, 0xb9, 0x57, 0xe5, 0xb3, 0xfe, 0x44, 0xae, 0xfe, 0x71, 0x54, 0x18, 0xd5, 0x1c, 0x26, - 0x50, 0xbf, 0x21, 0xb9, 0x1e, 0xaf, 0x4a, 0xa1, 0x2d, 0x75, 0xff, 0xdf, 0x85, 0x99, 0xe1, 0xe9, - 0x54, 0x89, 0x5d, 0x3d, 0x6b, 0xba, 0x99, 0x33, 0xa7, 0x9a, 0x6e, 0xc7, 0xe6, 0x59, 0x99, 0x14, - 0x5e, 0xfb, 0x97, 0xf0, 0xdc, 0x7b, 0x90, 0x0d, 0xeb, 0xcb, 0xb6, 0x7c, 0x80, 0x62, 0x22, 0x34, - 0xd4, 0x5b, 0x54, 0x70, 0xc2, 0x2f, 0xc6, 0x1f, 0x36, 0x71, 0xdb, 0xa2, 0xe5, 0x63, 0x3a, 0x43, - 0x74, 0x6a, 0xdd, 0x1b, 0xbf, 0x33, 0x00, 0xa2, 0x87, 0x12, 0xf4, 0x06, 0x5c, 0xae, 0x6e, 0xac, - 0xd7, 0xcc, 0xd6, 0xd6, 0xea, 0xd6, 0x76, 0xcb, 0xdc, 0x5e, 0x6f, 0x6d, 0xd6, 0xd7, 0x1a, 0xb7, - 0x1a, 0xf5, 0x5a, 0x76, 0x2c, 0x9f, 0x39, 0xbc, 0x5b, 0x4c, 0x6f, 0xbb, 0xac, 0x47, 0x2c, 0xba, - 0x4b, 0x89, 0x8d, 0xbe, 0x08, 0xf3, 0xc3, 0xd2, 0xa2, 0x55, 0xaf, 0x65, 0x8d, 0xfc, 0xf4, 0xe1, - 0xdd, 0xe2, 0xa4, 0x3a, 0x2b, 0x12, 0x1b, 0x2d, 0xc2, 0xc5, 0x51, 0xb9, 0xc6, 0xfa, 0x5b, 0xd9, - 0x44, 0x7e, 0xe6, 0xf0, 0x6e, 0x71, 0x2a, 0x3c, 0x54, 0xa2, 0x12, 0xa0, 0xb8, 0xa4, 0xc6, 0x4b, - 0xe6, 0xe1, 0xf0, 0x6e, 0x31, 0xa5, 0xbc, 0x90, 0x1f, 0x7f, 0xff, 0x37, 0x0b, 0x63, 0x37, 0x7e, - 0x00, 0xd0, 0x70, 0x77, 0x7d, 0x6c, 0xc9, 0x68, 0xcb, 0xc3, 0xa5, 0xc6, 0xfa, 0xad, 0xe6, 0xea, - 0xda, 0x56, 0x63, 0x63, 0x7d, 0x78, 0xd9, 0xc7, 0xc6, 0x6a, 0x1b, 0xdb, 0xd5, 0x77, 0xea, 0x66, - 0xab, 0xf1, 0xd6, 0x7a, 0xd6, 0x40, 0x97, 0xe1, 0xc2, 0xd0, 0xd8, 0xb7, 0xd7, 0xb7, 0x1a, 0xef, - 0xd6, 0xb3, 0x89, 0xea, 0xad, 0x4f, 0x1e, 0x2d, 0x18, 0x0f, 0x1e, 0x2d, 0x18, 0x7f, 0x7f, 0xb4, - 0x60, 0x7c, 0xf0, 0x78, 0x61, 0xec, 0xc1, 0xe3, 0x85, 0xb1, 0x3f, 0x3f, 0x5e, 0x18, 0xfb, 0xee, - 0x1b, 0x1d, 0xca, 0xf7, 0xfa, 0xed, 0xb2, 0xe5, 0x39, 0xfa, 0xa9, 0xbb, 0x72, 0x62, 0xc5, 0x93, - 0x6f, 0xcb, 0xed, 0x94, 0xdc, 0x64, 0xbe, 0xf2, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x80, 0x00, - 0xf9, 0x74, 0xd3, 0x17, 0x00, 0x00, + // 1901 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x58, 0x4d, 0x6c, 0x63, 0x47, + 0x1d, 0xcf, 0x8b, 0x53, 0x27, 0xf9, 0x3b, 0x89, 0x9d, 0xd9, 0x2f, 0xaf, 0x97, 0xc6, 0x5e, 0x77, + 0xa1, 0xe9, 0xd2, 0xd8, 0x6c, 0x90, 0x7a, 0x08, 0x08, 0x14, 0xc7, 0xde, 0xae, 0x4b, 0x9b, 0x04, + 0x3b, 0x09, 0x94, 0xaf, 0xa7, 0xf1, 0x7b, 0x13, 0x67, 0x88, 0x3d, 0xcf, 0xbc, 0x19, 0x2f, 0xf1, + 0x9d, 0x43, 0x15, 0x84, 0x54, 0x09, 0x09, 0x21, 0xc1, 0x8a, 0x95, 0xb8, 0x94, 0x5b, 0x0f, 0x2b, + 0xee, 0xdc, 0x0a, 0x12, 0xd2, 0x6a, 0x4f, 0x08, 0x89, 0x80, 0x76, 0x0f, 0xad, 0xe0, 0x82, 0x38, + 0x71, 0x44, 0xf3, 0xf1, 0x3e, 0x1c, 0x27, 0x9b, 0xcd, 0xb6, 0x42, 0x15, 0x5c, 0x9e, 0xde, 0xcc, + 0xfc, 0xff, 0xbf, 0x99, 0xff, 0xef, 0xff, 0x31, 0x1f, 0x70, 0xc3, 0xf1, 0x78, 0xd7, 0xe3, 0x65, + 0x2e, 0xf0, 0x3e, 0x65, 0xed, 0xf2, 0xdd, 0x5b, 0x2d, 0x22, 0xf0, 0xad, 0xa0, 0x5d, 0xea, 0xf9, + 0x9e, 0xf0, 0xd0, 0x65, 0x2d, 0x55, 0x0a, 0x7a, 0x8d, 0x54, 0xee, 0x62, 0xdb, 0x6b, 0x7b, 0x4a, + 0xa4, 0x2c, 0xff, 0xb4, 0x74, 0xee, 0x6a, 0xdb, 0xf3, 0xda, 0x1d, 0x52, 0x56, 0xad, 0x56, 0x7f, + 0xb7, 0x8c, 0xd9, 0xc0, 0x0c, 0x2d, 0x1c, 0x1f, 0x72, 0xfb, 0x3e, 0x16, 0xd4, 0x63, 0x66, 0x3c, + 0x7f, 0x7c, 0x5c, 0xd0, 0x2e, 0xe1, 0x02, 0x77, 0x7b, 0x01, 0xb6, 0x5e, 0x89, 0xad, 0x27, 0x35, + 0xcb, 0x32, 0xd8, 0xc6, 0x94, 0x16, 0xe6, 0x24, 0xb4, 0xc3, 0xf1, 0x68, 0x80, 0x3d, 0x8f, 0xbb, + 0x94, 0x79, 0x65, 0xf5, 0x35, 0x5d, 0x9f, 0x11, 0x84, 0xb9, 0xc4, 0xef, 0x52, 0x26, 0xca, 0x62, + 0xd0, 0x23, 0x5c, 0x7f, 0xcd, 0xe8, 0xb5, 0xd8, 0x28, 0x6e, 0x39, 0x34, 0x3e, 0x58, 0xfc, 0xa9, + 0x05, 0x73, 0x77, 0x28, 0x17, 0x9e, 0x4f, 0x1d, 0xdc, 0xa9, 0xb3, 0x5d, 0x0f, 0x7d, 0x09, 0x92, + 0x7b, 0x04, 0xbb, 0xc4, 0xcf, 0x5a, 0x05, 0x6b, 0x31, 0xb5, 0x9c, 0x2d, 0x45, 0x00, 0x25, 0xad, + 0x7b, 0x47, 0x8d, 0x57, 0xa6, 0x3f, 0x38, 0xca, 0x8f, 0xbd, 0xf7, 0xe1, 0xfb, 0x37, 0xad, 0x86, + 0x51, 0x41, 0x55, 0x48, 0xde, 0xc5, 0x1d, 0x4e, 0x44, 0x76, 0xbc, 0x90, 0x58, 0x4c, 0x2d, 0x5f, + 0x2f, 0x9d, 0xcc, 0x79, 0x69, 0x07, 0x77, 0xa8, 0x8b, 0x85, 0x37, 0x8c, 0xa2, 0x75, 0x8b, 0x3f, + 0x1b, 0x87, 0xf4, 0x9a, 0xd7, 0xed, 0x52, 0xce, 0xa9, 0xc7, 0x1a, 0x58, 0x10, 0x8e, 0xde, 0x80, + 0x09, 0x1f, 0x0b, 0xa2, 0x16, 0x35, 0x5d, 0x79, 0x4d, 0x2a, 0xfd, 0xf9, 0x28, 0x7f, 0x4d, 0xc3, + 0x73, 0x77, 0xbf, 0x44, 0xbd, 0x72, 0x17, 0x8b, 0xbd, 0xd2, 0x9b, 0xa4, 0x8d, 0x9d, 0x41, 0x95, + 0x38, 0x8f, 0x1e, 0x2c, 0x81, 0x99, 0xbd, 0x4a, 0x1c, 0x3d, 0x83, 0xc2, 0x40, 0x5f, 0x87, 0xa9, + 0x2e, 0x3e, 0xb0, 0x15, 0xde, 0xf8, 0xc7, 0xc2, 0x9b, 0xec, 0xe2, 0x03, 0xb9, 0x3e, 0xf4, 0x3d, + 0x48, 0x4b, 0x48, 0x67, 0x0f, 0xb3, 0x36, 0xd1, 0xc8, 0x89, 0x8f, 0x85, 0x3c, 0xdb, 0xc5, 0x07, + 0x6b, 0x0a, 0x4d, 0xe2, 0xaf, 0x4c, 0x7c, 0x74, 0x3f, 0x6f, 0x15, 0x7f, 0x67, 0x01, 0x44, 0xc4, + 0x20, 0x0c, 0x19, 0x27, 0x6c, 0xa9, 0x49, 0xb9, 0x71, 0xda, 0xcb, 0xa7, 0xf1, 0x7e, 0x8c, 0xd6, + 0xca, 0xac, 0x5c, 0xde, 0xc3, 0xa3, 0xbc, 0xa5, 0x67, 0x4d, 0x3b, 0x23, 0xb4, 0xa7, 0xfa, 0x3d, + 0x17, 0x0b, 0x62, 0xcb, 0x18, 0x56, 0x6c, 0xa5, 0x96, 0x73, 0x25, 0x1d, 0xe0, 0xa5, 0x20, 0xc0, + 0x4b, 0x5b, 0x41, 0x80, 0x6b, 0xc0, 0x77, 0xff, 0x1a, 0x00, 0x82, 0xd6, 0x96, 0xe3, 0xc6, 0x86, + 0xf7, 0x2c, 0x48, 0x55, 0x09, 0x77, 0x7c, 0xda, 0x93, 0x29, 0x83, 0xb2, 0x30, 0xd9, 0xf5, 0x18, + 0xdd, 0x37, 0x01, 0x37, 0xdd, 0x08, 0x9a, 0x28, 0x07, 0x53, 0xd4, 0x25, 0x4c, 0x50, 0x31, 0xd0, + 0x6e, 0x6a, 0x84, 0x6d, 0xa9, 0xf5, 0x43, 0xd2, 0xe2, 0x34, 0xe0, 0xb9, 0x11, 0x34, 0xd1, 0x2b, + 0x90, 0xe1, 0xc4, 0xe9, 0xfb, 0x54, 0x0c, 0x6c, 0xc7, 0x63, 0x02, 0x3b, 0x22, 0x3b, 0xa1, 0x44, + 0xd2, 0x41, 0xff, 0x9a, 0xee, 0x96, 0x20, 0x2e, 0x11, 0x98, 0x76, 0x78, 0xf6, 0x05, 0x0d, 0x62, + 0x9a, 0x66, 0xa9, 0x87, 0x93, 0x30, 0x1d, 0x06, 0x2a, 0x5a, 0x83, 0x8c, 0xd7, 0x23, 0xbe, 0xfc, + 0xb7, 0xb1, 0xeb, 0xfa, 0x84, 0x73, 0x13, 0x8d, 0xd9, 0x47, 0x0f, 0x96, 0x2e, 0x1a, 0xc2, 0x57, + 0xf5, 0x48, 0x53, 0xf8, 0x94, 0xb5, 0x1b, 0xe9, 0x40, 0xc3, 0x74, 0xa3, 0xb7, 0xa5, 0xcb, 0x18, + 0x27, 0x8c, 0xf7, 0xb9, 0xdd, 0xeb, 0xb7, 0xf6, 0xc9, 0xc0, 0x90, 0x7a, 0x71, 0x84, 0xd4, 0x55, + 0x36, 0xa8, 0x64, 0xff, 0x10, 0x41, 0x3b, 0xfe, 0xa0, 0x27, 0xbc, 0xd2, 0x66, 0xbf, 0xf5, 0x35, + 0x32, 0x90, 0xae, 0x32, 0x38, 0x9b, 0x0a, 0x06, 0x5d, 0x86, 0xe4, 0xf7, 0x31, 0xed, 0x10, 0x57, + 0x31, 0x32, 0xd5, 0x30, 0x2d, 0xb4, 0x02, 0x49, 0x2e, 0xb0, 0xe8, 0x73, 0x45, 0xc3, 0xdc, 0x72, + 0xf1, 0xb4, 0xd8, 0xa8, 0x78, 0xcc, 0x6d, 0x2a, 0xc9, 0x86, 0xd1, 0x40, 0x6b, 0x90, 0x14, 0xde, + 0x3e, 0x61, 0x86, 0xa0, 0xca, 0xe7, 0x4d, 0x34, 0x5f, 0x1a, 0x8d, 0xe6, 0x3a, 0x13, 0xb1, 0x38, + 0xae, 0x33, 0xd1, 0x30, 0xaa, 0xe8, 0x3b, 0x90, 0x71, 0x49, 0x87, 0xb4, 0x15, 0x73, 0x7c, 0x0f, + 0xfb, 0x84, 0x67, 0x93, 0x0a, 0xee, 0xd6, 0xb9, 0x93, 0xa3, 0x91, 0x0e, 0xa1, 0x9a, 0x0a, 0x09, + 0x6d, 0x42, 0xca, 0x8d, 0xc2, 0x29, 0x3b, 0xa9, 0xc8, 0x7c, 0xe9, 0x34, 0x1b, 0x63, 0x91, 0x17, + 0xaf, 0x3c, 0x71, 0x08, 0x19, 0x41, 0x7d, 0xd6, 0xf2, 0x98, 0x4b, 0x59, 0xdb, 0xde, 0x23, 0xb4, + 0xbd, 0x27, 0xb2, 0x53, 0x05, 0x6b, 0x31, 0xd1, 0x48, 0x87, 0xfd, 0x77, 0x54, 0x37, 0xda, 0x84, + 0xb9, 0x48, 0x54, 0x65, 0xc8, 0xf4, 0x79, 0x33, 0x64, 0x36, 0x04, 0x90, 0x22, 0xe8, 0x2d, 0x80, + 0x28, 0x07, 0xb3, 0xa0, 0xd0, 0x8a, 0x67, 0x67, 0x73, 0xdc, 0x98, 0x18, 0x00, 0xfa, 0x36, 0x5c, + 0xe8, 0x52, 0x66, 0x73, 0xd2, 0xd9, 0xb5, 0x0d, 0x73, 0x12, 0x37, 0x75, 0x7e, 0x6f, 0xce, 0x77, + 0x29, 0x6b, 0x92, 0xce, 0x6e, 0x35, 0x44, 0x41, 0x5f, 0x86, 0x6b, 0x91, 0xf5, 0x1e, 0xb3, 0xf7, + 0xbc, 0x8e, 0x6b, 0xfb, 0x64, 0xd7, 0x76, 0xbc, 0x3e, 0x13, 0xd9, 0x19, 0xc5, 0xd9, 0x95, 0x50, + 0x64, 0x83, 0xdd, 0xf1, 0x3a, 0x6e, 0x83, 0xec, 0xae, 0xc9, 0x61, 0xf4, 0x12, 0x44, 0xa6, 0xdb, + 0xd4, 0xe5, 0xd9, 0xd9, 0x42, 0x62, 0x71, 0xa2, 0x31, 0x13, 0x76, 0xd6, 0x5d, 0xbe, 0x32, 0xf5, + 0xce, 0xfd, 0xfc, 0xd8, 0x47, 0xf7, 0xf3, 0x63, 0xc5, 0xdb, 0x30, 0xb3, 0x83, 0x3b, 0x26, 0x8f, + 0x08, 0x47, 0xaf, 0xc1, 0x34, 0x0e, 0x1a, 0x59, 0xab, 0x90, 0x78, 0x6a, 0x1e, 0x46, 0xa2, 0xc5, + 0xdf, 0x58, 0x90, 0xac, 0xee, 0x6c, 0x62, 0xea, 0xa3, 0x1a, 0xcc, 0x47, 0x81, 0xf9, 0xac, 0x29, + 0x1d, 0xc5, 0x72, 0x90, 0xd3, 0xeb, 0x30, 0x7f, 0x37, 0xa8, 0x12, 0x21, 0x8c, 0xde, 0x57, 0xae, + 0x3f, 0x7a, 0xb0, 0xf4, 0xa2, 0x81, 0x09, 0x2b, 0xc9, 0x31, 0xbc, 0xbb, 0xc7, 0xfa, 0x63, 0x36, + 0xbf, 0x01, 0x93, 0x7a, 0xa9, 0x1c, 0x7d, 0x15, 0x5e, 0xe8, 0xc9, 0x1f, 0x65, 0x6a, 0x6a, 0x79, + 0xe1, 0xd4, 0x00, 0x57, 0xf2, 0xf1, 0x70, 0xd0, 0x7a, 0xc5, 0x1f, 0x8f, 0x03, 0x54, 0x77, 0x76, + 0xb6, 0x7c, 0xda, 0xeb, 0x10, 0xf1, 0x49, 0xd9, 0xbe, 0x0d, 0x97, 0x22, 0xdb, 0xb9, 0xef, 0x9c, + 0xdf, 0xfe, 0x0b, 0xa1, 0x7e, 0xd3, 0x77, 0x4e, 0x84, 0x75, 0xb9, 0x08, 0x61, 0x13, 0xe7, 0x87, + 0xad, 0x72, 0x31, 0xca, 0xec, 0x37, 0x21, 0x15, 0x91, 0xc1, 0x51, 0x1d, 0xa6, 0x84, 0xf9, 0x37, + 0x04, 0x17, 0x4f, 0x27, 0x38, 0x50, 0x8b, 0x93, 0x1c, 0xaa, 0x17, 0xff, 0x6d, 0x01, 0xc4, 0x72, + 0xe4, 0xd3, 0x19, 0x63, 0xa8, 0x0e, 0x49, 0x53, 0x89, 0x13, 0xcf, 0x5b, 0x89, 0x0d, 0x40, 0x8c, + 0xd4, 0x9f, 0x8c, 0xc3, 0x85, 0xed, 0x20, 0x7b, 0x3f, 0xfd, 0x1c, 0x6c, 0xc3, 0x24, 0x61, 0xc2, + 0xa7, 0x8a, 0x04, 0xe9, 0xf3, 0x2f, 0x9c, 0xe6, 0xf3, 0x13, 0x8c, 0xaa, 0x31, 0xe1, 0x0f, 0xe2, + 0x11, 0x10, 0x60, 0xc5, 0xf8, 0xf8, 0x45, 0x02, 0xb2, 0xa7, 0xa9, 0xa2, 0x97, 0x21, 0xed, 0xf8, + 0x44, 0x75, 0x04, 0x9b, 0x8c, 0xa5, 0x0a, 0xe6, 0x5c, 0xd0, 0x6d, 0xf6, 0x98, 0x06, 0xc8, 0x53, + 0x99, 0x0c, 0x2e, 0x29, 0xfa, 0x7c, 0xc7, 0xb0, 0xb9, 0x08, 0x41, 0xed, 0x32, 0x5b, 0x90, 0xa6, + 0x8c, 0x0a, 0x8a, 0x3b, 0x76, 0x0b, 0x77, 0x30, 0x73, 0x82, 0xe3, 0xea, 0xb9, 0xb6, 0x84, 0x39, + 0x83, 0x51, 0xd1, 0x10, 0xa8, 0x06, 0x93, 0x01, 0xda, 0xc4, 0xf9, 0xd1, 0x02, 0x5d, 0x74, 0x1d, + 0x66, 0xe2, 0x1b, 0x83, 0x3a, 0x7a, 0x4c, 0x34, 0x52, 0xb1, 0x7d, 0xe1, 0xac, 0x9d, 0x27, 0xf9, + 0xd4, 0x9d, 0xc7, 0x9c, 0xee, 0x7e, 0x95, 0x80, 0xf9, 0x06, 0x71, 0xff, 0xf7, 0xdd, 0xb2, 0x09, + 0xa0, 0x53, 0x55, 0x56, 0x52, 0xe3, 0x99, 0xe7, 0xc8, 0xf7, 0x69, 0x0d, 0x52, 0xe5, 0xe2, 0xbf, + 0xe5, 0xa1, 0xbf, 0x8c, 0xc3, 0x4c, 0xdc, 0x43, 0xff, 0x97, 0x9b, 0x16, 0x5a, 0x8f, 0xca, 0xd4, + 0x84, 0x2a, 0x53, 0xaf, 0x9c, 0x56, 0xa6, 0x46, 0xa2, 0xf9, 0x8c, 0xfa, 0xf4, 0xcb, 0x04, 0x24, + 0x37, 0xb1, 0x8f, 0xbb, 0x1c, 0x6d, 0x8c, 0x1c, 0x64, 0xf5, 0x45, 0xf2, 0xea, 0x48, 0x30, 0x57, + 0xcd, 0x5b, 0x87, 0x8e, 0xe5, 0x9f, 0x9f, 0x76, 0x8e, 0xfd, 0x2c, 0xcc, 0xc9, 0x0b, 0x71, 0x68, + 0x90, 0x26, 0x77, 0x56, 0xdd, 0x6b, 0x43, 0xeb, 0x39, 0xca, 0x43, 0x4a, 0x8a, 0x45, 0x75, 0x58, + 0xca, 0x40, 0x17, 0x1f, 0xd4, 0x74, 0x0f, 0x5a, 0x02, 0xb4, 0x17, 0x3e, 0x50, 0xd8, 0x11, 0x11, + 0x52, 0x6e, 0x3e, 0x1a, 0x09, 0xc4, 0x5f, 0x04, 0x90, 0xab, 0xb0, 0x5d, 0xc2, 0xbc, 0xae, 0xb9, + 0xd5, 0x4d, 0xcb, 0x9e, 0xaa, 0xec, 0x40, 0x3f, 0xb2, 0xf4, 0x79, 0xf8, 0xd8, 0xb5, 0xd9, 0x5c, + 0x47, 0xb6, 0x9e, 0x21, 0x29, 0xfe, 0x75, 0x94, 0xcf, 0x0d, 0x70, 0xb7, 0xb3, 0x52, 0x3c, 0x01, + 0xa7, 0x78, 0xd2, 0x4d, 0x5e, 0x1e, 0x9c, 0x87, 0xaf, 0xdd, 0x2b, 0x37, 0x64, 0x78, 0x1f, 0x7e, + 0xf8, 0xfe, 0x4d, 0x33, 0xd3, 0x12, 0x77, 0xf7, 0xcb, 0x07, 0xe1, 0xf3, 0x95, 0xf6, 0x89, 0x3c, + 0xa9, 0xa2, 0x68, 0xd7, 0x68, 0x10, 0xde, 0x93, 0x37, 0x3e, 0x79, 0x43, 0x88, 0x9d, 0xe4, 0xad, + 0xa7, 0xdf, 0x10, 0x22, 0xfd, 0xa1, 0x1b, 0x42, 0x2c, 0xa7, 0xbe, 0x12, 0x15, 0xed, 0x71, 0xe3, + 0x72, 0x83, 0xd5, 0xc2, 0x9c, 0xc4, 0xae, 0x1a, 0x74, 0x08, 0x22, 0x50, 0x52, 0xa9, 0x3a, 0x56, + 0xfc, 0xa3, 0x05, 0x57, 0x47, 0xc2, 0x2f, 0x5c, 0xb2, 0x03, 0xc8, 0x8f, 0x0d, 0x2a, 0x37, 0x0e, + 0xcc, 0xd2, 0x9f, 0x2f, 0x9a, 0xe7, 0xfd, 0x91, 0xca, 0xfd, 0xc9, 0xec, 0x3e, 0xa6, 0xf4, 0xfc, + 0xde, 0x82, 0x8b, 0xf1, 0x05, 0x84, 0xa6, 0x34, 0x61, 0x26, 0x3e, 0xb5, 0x31, 0xe2, 0xc6, 0xb3, + 0x18, 0x11, 0x5f, 0xff, 0x10, 0x08, 0xda, 0x89, 0x52, 0x5c, 0xbf, 0x9b, 0xdd, 0x7a, 0x66, 0x52, + 0x82, 0x85, 0x9d, 0x98, 0xea, 0xda, 0x37, 0xff, 0xb0, 0x60, 0x62, 0xd3, 0xf3, 0x3a, 0xe8, 0x07, + 0x30, 0xcf, 0x3c, 0x61, 0xcb, 0x74, 0x20, 0xae, 0x6d, 0x2e, 0xf6, 0xba, 0x7c, 0xd6, 0x9e, 0xca, + 0xd5, 0xdf, 0x8f, 0xf2, 0xa3, 0x9a, 0xc3, 0x04, 0x9a, 0xf7, 0x23, 0xe6, 0x89, 0x8a, 0x12, 0xda, + 0xd2, 0x77, 0xff, 0x5d, 0x98, 0x1d, 0x9e, 0x4e, 0x97, 0xd8, 0xd5, 0xb3, 0xa6, 0x9b, 0x3d, 0x73, + 0xaa, 0x99, 0x56, 0x6c, 0x9e, 0x95, 0x29, 0xe9, 0xb5, 0x7f, 0x4a, 0xcf, 0xbd, 0x0d, 0x99, 0xb0, + 0xbe, 0x6c, 0xab, 0xc7, 0x27, 0x2e, 0x43, 0x43, 0xbf, 0x43, 0x05, 0xa7, 0xfb, 0x42, 0xfc, 0x51, + 0x13, 0xb7, 0x1c, 0x5a, 0x3a, 0xa6, 0x33, 0x44, 0xa7, 0xd1, 0xbd, 0xf9, 0x5b, 0x0b, 0x20, 0x7a, + 0x24, 0x41, 0xaf, 0xc2, 0x95, 0xca, 0xc6, 0x7a, 0xd5, 0x6e, 0x6e, 0xad, 0x6e, 0x6d, 0x37, 0xed, + 0xed, 0xf5, 0xe6, 0x66, 0x6d, 0xad, 0x7e, 0xbb, 0x5e, 0xab, 0x66, 0xc6, 0x72, 0xe9, 0xc3, 0x7b, + 0x85, 0xd4, 0x36, 0xe3, 0x3d, 0xe2, 0xd0, 0x5d, 0x4a, 0x5c, 0xf4, 0x39, 0xb8, 0x38, 0x2c, 0x2d, + 0x5b, 0xb5, 0x6a, 0xc6, 0xca, 0xcd, 0x1c, 0xde, 0x2b, 0x4c, 0xe9, 0x73, 0x22, 0x71, 0xd1, 0x22, + 0x5c, 0x1a, 0x95, 0xab, 0xaf, 0xbf, 0x9e, 0x19, 0xcf, 0xcd, 0x1e, 0xde, 0x2b, 0x4c, 0x87, 0x07, + 0x4a, 0x54, 0x04, 0x14, 0x97, 0x34, 0x78, 0x89, 0x1c, 0x1c, 0xde, 0x2b, 0x24, 0xb5, 0x17, 0x72, + 0x13, 0xef, 0xfc, 0x7a, 0x61, 0xec, 0xe6, 0x77, 0x01, 0xea, 0x6c, 0xd7, 0xc7, 0x8e, 0x8a, 0xb6, + 0x1c, 0x5c, 0xae, 0xaf, 0xdf, 0x6e, 0xac, 0xae, 0x6d, 0xd5, 0x37, 0xd6, 0x87, 0x97, 0x7d, 0x6c, + 0xac, 0xba, 0xb1, 0x5d, 0x79, 0xb3, 0x66, 0x37, 0xeb, 0xaf, 0xaf, 0x67, 0x2c, 0x74, 0x05, 0x2e, + 0x0c, 0x8d, 0x7d, 0x63, 0x7d, 0xab, 0xfe, 0x56, 0x2d, 0x33, 0x5e, 0xb9, 0xfd, 0xc1, 0xe3, 0x05, + 0xeb, 0xe1, 0xe3, 0x05, 0xeb, 0x6f, 0x8f, 0x17, 0xac, 0x77, 0x9f, 0x2c, 0x8c, 0x3d, 0x7c, 0xb2, + 0x30, 0xf6, 0xa7, 0x27, 0x0b, 0x63, 0xdf, 0x7a, 0xb5, 0x4d, 0xc5, 0x5e, 0xbf, 0x55, 0x72, 0xbc, + 0xae, 0x79, 0xe6, 0x2e, 0x9f, 0x58, 0xf1, 0xd4, 0xbb, 0x72, 0x2b, 0xa9, 0x36, 0x99, 0x2f, 0xfe, + 0x27, 0x00, 0x00, 0xff, 0xff, 0x7a, 0x6b, 0x77, 0xd8, 0xcf, 0x17, 0x00, 0x00, } func (this *Pool) Description() (desc *github_com_cosmos_gogoproto_protoc_gen_gogo_descriptor.FileDescriptorSet) { @@ -1406,708 +1404,707 @@ func (this *Pool) Description() (desc *github_com_cosmos_gogoproto_protoc_gen_go func StakingDescription() (desc *github_com_cosmos_gogoproto_protoc_gen_gogo_descriptor.FileDescriptorSet) { d := &github_com_cosmos_gogoproto_protoc_gen_gogo_descriptor.FileDescriptorSet{} var gzipped = []byte{ - // 11207 bytes of a gzipped FileDescriptorSet - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x69, 0x90, 0x24, 0x57, - 0x5a, 0x58, 0xd7, 0x5d, 0xf5, 0xd5, 0x95, 0xfd, 0xba, 0x67, 0xa6, 0xa7, 0x46, 0xea, 0x6e, 0xa5, - 0x8e, 0x19, 0x8d, 0xa4, 0x1e, 0x69, 0xa4, 0x19, 0x49, 0x3d, 0xab, 0x95, 0xab, 0xaa, 0x6b, 0x7a, - 0x6a, 0xd4, 0x97, 0xb2, 0xaa, 0x47, 0x07, 0xb0, 0x49, 0x76, 0xd6, 0xeb, 0xee, 0xd4, 0x54, 0x65, - 0xd6, 0x66, 0x66, 0xcd, 0x74, 0x2b, 0x1c, 0x0e, 0xe1, 0x05, 0x7b, 0x19, 0x0e, 0x2f, 0x86, 0x80, - 0x05, 0x76, 0x60, 0x17, 0x0c, 0x2c, 0xf8, 0xe2, 0x58, 0x73, 0x98, 0x30, 0x06, 0x9f, 0x40, 0xd8, - 0x8e, 0x35, 0x8e, 0xb0, 0xb1, 0x23, 0x90, 0x41, 0x4b, 0x98, 0xf5, 0xb2, 0xd8, 0x1c, 0xc2, 0xc6, - 0xb1, 0x61, 0x87, 0xe3, 0x5d, 0x79, 0xd4, 0xd1, 0x55, 0x3d, 0x2b, 0x2d, 0x18, 0xfc, 0x67, 0xa6, - 0xf2, 0x7b, 0xdf, 0xf7, 0xbd, 0xf7, 0xbe, 0xf7, 0xbd, 0xef, 0x7d, 0xdf, 0xf7, 0x8e, 0x86, 0xdf, - 0xaa, 0xc0, 0xe2, 0x9e, 0x65, 0xed, 0xb5, 0xf1, 0x85, 0xae, 0x6d, 0xb9, 0xd6, 0x4e, 0x6f, 0xf7, - 0x42, 0x0b, 0x3b, 0xba, 0x6d, 0x74, 0x5d, 0xcb, 0x5e, 0xa2, 0x30, 0x54, 0x64, 0x18, 0x4b, 0x02, - 0x43, 0x5e, 0x87, 0xe9, 0xab, 0x46, 0x1b, 0xaf, 0x78, 0x88, 0x0d, 0xec, 0xa2, 0xe7, 0x20, 0xbe, - 0x6b, 0xb4, 0xf1, 0x5c, 0x64, 0x31, 0x76, 0x2e, 0x7b, 0xf1, 0xa1, 0xa5, 0x3e, 0xa2, 0xa5, 0x30, - 0xc5, 0x16, 0x01, 0x2b, 0x94, 0x42, 0xfe, 0x3f, 0x71, 0x98, 0x19, 0x52, 0x8a, 0x10, 0xc4, 0x4d, - 0xad, 0x43, 0x38, 0x46, 0xce, 0x65, 0x14, 0xfa, 0x1b, 0xcd, 0x41, 0xaa, 0xab, 0xe9, 0x37, 0xb5, - 0x3d, 0x3c, 0x17, 0xa5, 0x60, 0xf1, 0x89, 0xe6, 0x01, 0x5a, 0xb8, 0x8b, 0xcd, 0x16, 0x36, 0xf5, - 0xc3, 0xb9, 0xd8, 0x62, 0xec, 0x5c, 0x46, 0x09, 0x40, 0xd0, 0x63, 0x30, 0xdd, 0xed, 0xed, 0xb4, - 0x0d, 0x5d, 0x0d, 0xa0, 0xc1, 0x62, 0xec, 0x5c, 0x42, 0x91, 0x58, 0xc1, 0x8a, 0x8f, 0x7c, 0x16, - 0x8a, 0xb7, 0xb1, 0x76, 0x33, 0x88, 0x9a, 0xa5, 0xa8, 0x05, 0x02, 0x0e, 0x20, 0x56, 0x21, 0xd7, - 0xc1, 0x8e, 0xa3, 0xed, 0x61, 0xd5, 0x3d, 0xec, 0xe2, 0xb9, 0x38, 0xed, 0xfd, 0xe2, 0x40, 0xef, - 0xfb, 0x7b, 0x9e, 0xe5, 0x54, 0xcd, 0xc3, 0x2e, 0x46, 0x65, 0xc8, 0x60, 0xb3, 0xd7, 0x61, 0x1c, - 0x12, 0x23, 0xe4, 0x57, 0x33, 0x7b, 0x9d, 0x7e, 0x2e, 0x69, 0x42, 0xc6, 0x59, 0xa4, 0x1c, 0x6c, - 0xdf, 0x32, 0x74, 0x3c, 0x97, 0xa4, 0x0c, 0xce, 0x0e, 0x30, 0x68, 0xb0, 0xf2, 0x7e, 0x1e, 0x82, - 0x0e, 0x55, 0x21, 0x83, 0x0f, 0x5c, 0x6c, 0x3a, 0x86, 0x65, 0xce, 0xa5, 0x28, 0x93, 0x87, 0x87, - 0x8c, 0x22, 0x6e, 0xb7, 0xfa, 0x59, 0xf8, 0x74, 0xe8, 0x32, 0xa4, 0xac, 0xae, 0x6b, 0x58, 0xa6, - 0x33, 0x97, 0x5e, 0x8c, 0x9c, 0xcb, 0x5e, 0xbc, 0x6f, 0xa8, 0x22, 0x6c, 0x32, 0x1c, 0x45, 0x20, - 0xa3, 0x3a, 0x48, 0x8e, 0xd5, 0xb3, 0x75, 0xac, 0xea, 0x56, 0x0b, 0xab, 0x86, 0xb9, 0x6b, 0xcd, - 0x65, 0x28, 0x83, 0x85, 0xc1, 0x8e, 0x50, 0xc4, 0xaa, 0xd5, 0xc2, 0x75, 0x73, 0xd7, 0x52, 0x0a, - 0x4e, 0xe8, 0x1b, 0x9d, 0x84, 0xa4, 0x73, 0x68, 0xba, 0xda, 0xc1, 0x5c, 0x8e, 0x6a, 0x08, 0xff, - 0x22, 0xaa, 0x83, 0x5b, 0x06, 0xa9, 0x6e, 0x2e, 0xcf, 0x54, 0x87, 0x7f, 0xca, 0x3f, 0x97, 0x84, - 0xe2, 0x24, 0xca, 0x77, 0x05, 0x12, 0xbb, 0xa4, 0xff, 0x73, 0xd1, 0xe3, 0x48, 0x87, 0xd1, 0x84, - 0xc5, 0x9b, 0xbc, 0x47, 0xf1, 0x96, 0x21, 0x6b, 0x62, 0xc7, 0xc5, 0x2d, 0xa6, 0x2b, 0xb1, 0x09, - 0xb5, 0x0d, 0x18, 0xd1, 0xa0, 0xb2, 0xc5, 0xef, 0x49, 0xd9, 0x5e, 0x85, 0xa2, 0xd7, 0x24, 0xd5, - 0xd6, 0xcc, 0x3d, 0xa1, 0xb5, 0x17, 0xc6, 0xb5, 0x64, 0xa9, 0x26, 0xe8, 0x14, 0x42, 0xa6, 0x14, - 0x70, 0xe8, 0x1b, 0xad, 0x00, 0x58, 0x26, 0xb6, 0x76, 0xd5, 0x16, 0xd6, 0xdb, 0x73, 0xe9, 0x11, - 0x52, 0xda, 0x24, 0x28, 0x03, 0x52, 0xb2, 0x18, 0x54, 0x6f, 0xa3, 0xe7, 0x7d, 0x25, 0x4c, 0x8d, - 0xd0, 0xa1, 0x75, 0x36, 0xfd, 0x06, 0xf4, 0x70, 0x1b, 0x0a, 0x36, 0x26, 0x33, 0x02, 0xb7, 0x78, - 0xcf, 0x32, 0xb4, 0x11, 0x4b, 0x63, 0x7b, 0xa6, 0x70, 0x32, 0xd6, 0xb1, 0xbc, 0x1d, 0xfc, 0x44, - 0x0f, 0x82, 0x07, 0x50, 0xa9, 0x5a, 0x01, 0xb5, 0x4f, 0x39, 0x01, 0xdc, 0xd0, 0x3a, 0xb8, 0xf4, - 0x26, 0x14, 0xc2, 0xe2, 0x41, 0xb3, 0x90, 0x70, 0x5c, 0xcd, 0x76, 0xa9, 0x16, 0x26, 0x14, 0xf6, - 0x81, 0x24, 0x88, 0x61, 0xb3, 0x45, 0xed, 0x5f, 0x42, 0x21, 0x3f, 0xd1, 0x5f, 0xf2, 0x3b, 0x1c, - 0xa3, 0x1d, 0x7e, 0x64, 0x70, 0x44, 0x43, 0x9c, 0xfb, 0xfb, 0x5d, 0x7a, 0x16, 0xf2, 0xa1, 0x0e, - 0x4c, 0x5a, 0xb5, 0xfc, 0x97, 0xe1, 0xc4, 0x50, 0xd6, 0xe8, 0x55, 0x98, 0xed, 0x99, 0x86, 0xe9, - 0x62, 0xbb, 0x6b, 0x63, 0xa2, 0xb1, 0xac, 0xaa, 0xb9, 0xdf, 0x49, 0x8d, 0xd0, 0xb9, 0xed, 0x20, - 0x36, 0xe3, 0xa2, 0xcc, 0xf4, 0x06, 0x81, 0xe7, 0x33, 0xe9, 0xcf, 0xa7, 0xa4, 0xb7, 0xde, 0x7a, - 0xeb, 0xad, 0xa8, 0xfc, 0x4b, 0x49, 0x98, 0x1d, 0x36, 0x67, 0x86, 0x4e, 0xdf, 0x93, 0x90, 0x34, - 0x7b, 0x9d, 0x1d, 0x6c, 0x53, 0x21, 0x25, 0x14, 0xfe, 0x85, 0xca, 0x90, 0x68, 0x6b, 0x3b, 0xb8, - 0x3d, 0x17, 0x5f, 0x8c, 0x9c, 0x2b, 0x5c, 0x7c, 0x6c, 0xa2, 0x59, 0xb9, 0xb4, 0x46, 0x48, 0x14, - 0x46, 0x89, 0x3e, 0x08, 0x71, 0x6e, 0xbc, 0x09, 0x87, 0xf3, 0x93, 0x71, 0x20, 0x73, 0x49, 0xa1, - 0x74, 0xe8, 0x0c, 0x64, 0xc8, 0xff, 0x4c, 0x37, 0x92, 0xb4, 0xcd, 0x69, 0x02, 0x20, 0x7a, 0x81, - 0x4a, 0x90, 0xa6, 0xd3, 0xa4, 0x85, 0xc5, 0xa2, 0xe7, 0x7d, 0x13, 0xc5, 0x6a, 0xe1, 0x5d, 0xad, - 0xd7, 0x76, 0xd5, 0x5b, 0x5a, 0xbb, 0x87, 0xa9, 0xc2, 0x67, 0x94, 0x1c, 0x07, 0xde, 0x20, 0x30, - 0xb4, 0x00, 0x59, 0x36, 0xab, 0x0c, 0xb3, 0x85, 0x0f, 0xa8, 0x5d, 0x4d, 0x28, 0x6c, 0xa2, 0xd5, - 0x09, 0x84, 0x54, 0xff, 0x86, 0x63, 0x99, 0x42, 0x35, 0x69, 0x15, 0x04, 0x40, 0xab, 0x7f, 0xb6, - 0xdf, 0xa4, 0xdf, 0x3f, 0xbc, 0x7b, 0x03, 0x73, 0xe9, 0x2c, 0x14, 0x29, 0xc6, 0xd3, 0x7c, 0xe8, - 0xb5, 0xf6, 0xdc, 0xf4, 0x62, 0xe4, 0x5c, 0x5a, 0x29, 0x30, 0xf0, 0x26, 0x87, 0xca, 0x3f, 0x1d, - 0x85, 0x38, 0x35, 0x2c, 0x45, 0xc8, 0x36, 0x5f, 0xdb, 0xaa, 0xa9, 0x2b, 0x9b, 0xdb, 0x95, 0xb5, - 0x9a, 0x14, 0x41, 0x05, 0x00, 0x0a, 0xb8, 0xba, 0xb6, 0x59, 0x6e, 0x4a, 0x51, 0xef, 0xbb, 0xbe, - 0xd1, 0xbc, 0xfc, 0x8c, 0x14, 0xf3, 0x08, 0xb6, 0x19, 0x20, 0x1e, 0x44, 0x78, 0xfa, 0xa2, 0x94, - 0x40, 0x12, 0xe4, 0x18, 0x83, 0xfa, 0xab, 0xb5, 0x95, 0xcb, 0xcf, 0x48, 0xc9, 0x30, 0xe4, 0xe9, - 0x8b, 0x52, 0x0a, 0xe5, 0x21, 0x43, 0x21, 0x95, 0xcd, 0xcd, 0x35, 0x29, 0xed, 0xf1, 0x6c, 0x34, - 0x95, 0xfa, 0xc6, 0xaa, 0x94, 0xf1, 0x78, 0xae, 0x2a, 0x9b, 0xdb, 0x5b, 0x12, 0x78, 0x1c, 0xd6, - 0x6b, 0x8d, 0x46, 0x79, 0xb5, 0x26, 0x65, 0x3d, 0x8c, 0xca, 0x6b, 0xcd, 0x5a, 0x43, 0xca, 0x85, - 0x9a, 0xf5, 0xf4, 0x45, 0x29, 0xef, 0x55, 0x51, 0xdb, 0xd8, 0x5e, 0x97, 0x0a, 0x68, 0x1a, 0xf2, - 0xac, 0x0a, 0xd1, 0x88, 0x62, 0x1f, 0xe8, 0xf2, 0x33, 0x92, 0xe4, 0x37, 0x84, 0x71, 0x99, 0x0e, - 0x01, 0x2e, 0x3f, 0x23, 0x21, 0xb9, 0x0a, 0x09, 0xaa, 0x86, 0x08, 0x41, 0x61, 0xad, 0x5c, 0xa9, - 0xad, 0xa9, 0x9b, 0x5b, 0xcd, 0xfa, 0xe6, 0x46, 0x79, 0x4d, 0x8a, 0xf8, 0x30, 0xa5, 0xf6, 0xf2, - 0x76, 0x5d, 0xa9, 0xad, 0x48, 0xd1, 0x20, 0x6c, 0xab, 0x56, 0x6e, 0xd6, 0x56, 0xa4, 0x98, 0xac, - 0xc3, 0xec, 0x30, 0x83, 0x3a, 0x74, 0x0a, 0x05, 0x74, 0x21, 0x3a, 0x42, 0x17, 0x28, 0xaf, 0x7e, - 0x5d, 0x90, 0x3f, 0x17, 0x85, 0x99, 0x21, 0x8b, 0xca, 0xd0, 0x4a, 0x5e, 0x84, 0x04, 0xd3, 0x65, - 0xb6, 0xcc, 0x3e, 0x3a, 0x74, 0x75, 0xa2, 0x9a, 0x3d, 0xb0, 0xd4, 0x52, 0xba, 0xa0, 0x13, 0x12, - 0x1b, 0xe1, 0x84, 0x10, 0x16, 0x03, 0x0a, 0xfb, 0x35, 0x03, 0xc6, 0x9f, 0xad, 0x8f, 0x97, 0x27, - 0x59, 0x1f, 0x29, 0xec, 0x78, 0x8b, 0x40, 0x62, 0xc8, 0x22, 0x70, 0x05, 0xa6, 0x07, 0x18, 0x4d, - 0x6c, 0x8c, 0x3f, 0x12, 0x81, 0xb9, 0x51, 0xc2, 0x19, 0x63, 0x12, 0xa3, 0x21, 0x93, 0x78, 0xa5, - 0x5f, 0x82, 0x0f, 0x8c, 0x1e, 0x84, 0x81, 0xb1, 0xfe, 0x91, 0x08, 0x9c, 0x1c, 0xee, 0x6c, 0x0e, - 0x6d, 0xc3, 0x07, 0x21, 0xd9, 0xc1, 0xee, 0xbe, 0x25, 0xdc, 0xaa, 0x47, 0x86, 0x2c, 0xd6, 0xa4, - 0xb8, 0x7f, 0xb0, 0x39, 0x55, 0x70, 0xb5, 0x8f, 0x8d, 0xf2, 0x18, 0x59, 0x6b, 0x06, 0x5a, 0xfa, - 0x8d, 0x51, 0x38, 0x31, 0x94, 0xf9, 0xd0, 0x86, 0xde, 0x0f, 0x60, 0x98, 0xdd, 0x9e, 0xcb, 0x5c, - 0x27, 0x66, 0x89, 0x33, 0x14, 0x42, 0x8d, 0x17, 0xb1, 0xb2, 0x3d, 0xd7, 0x2b, 0x8f, 0xd1, 0x72, - 0x60, 0x20, 0x8a, 0xf0, 0x9c, 0xdf, 0xd0, 0x38, 0x6d, 0xe8, 0xfc, 0x88, 0x9e, 0x0e, 0x28, 0xe6, - 0x93, 0x20, 0xe9, 0x6d, 0x03, 0x9b, 0xae, 0xea, 0xb8, 0x36, 0xd6, 0x3a, 0x86, 0xb9, 0x47, 0x97, - 0x9a, 0xf4, 0x72, 0x62, 0x57, 0x6b, 0x3b, 0x58, 0x29, 0xb2, 0xe2, 0x86, 0x28, 0x25, 0x14, 0x54, - 0x81, 0xec, 0x00, 0x45, 0x32, 0x44, 0xc1, 0x8a, 0x3d, 0x0a, 0xf9, 0xdb, 0x32, 0x90, 0x0d, 0xb8, - 0xe6, 0xe8, 0x01, 0xc8, 0xbd, 0xa1, 0xdd, 0xd2, 0x54, 0x11, 0x6e, 0x31, 0x49, 0x64, 0x09, 0x6c, - 0x8b, 0x87, 0x5c, 0x4f, 0xc2, 0x2c, 0x45, 0xb1, 0x7a, 0x2e, 0xb6, 0x55, 0xbd, 0xad, 0x39, 0x0e, - 0x15, 0x5a, 0x9a, 0xa2, 0x22, 0x52, 0xb6, 0x49, 0x8a, 0xaa, 0xa2, 0x04, 0x5d, 0x82, 0x19, 0x4a, - 0xd1, 0xe9, 0xb5, 0x5d, 0xa3, 0xdb, 0xc6, 0x2a, 0x09, 0x00, 0x1d, 0xba, 0xe4, 0x78, 0x2d, 0x9b, - 0x26, 0x18, 0xeb, 0x1c, 0x81, 0xb4, 0xc8, 0x41, 0x2b, 0x70, 0x3f, 0x25, 0xdb, 0xc3, 0x26, 0xb6, - 0x35, 0x17, 0xab, 0xf8, 0xc3, 0x3d, 0xad, 0xed, 0xa8, 0x9a, 0xd9, 0x52, 0xf7, 0x35, 0x67, 0x7f, - 0x6e, 0x96, 0x30, 0xa8, 0x44, 0xe7, 0x22, 0xca, 0x69, 0x82, 0xb8, 0xca, 0xf1, 0x6a, 0x14, 0xad, - 0x6c, 0xb6, 0xae, 0x69, 0xce, 0x3e, 0x5a, 0x86, 0x93, 0x94, 0x8b, 0xe3, 0xda, 0x86, 0xb9, 0xa7, - 0xea, 0xfb, 0x58, 0xbf, 0xa9, 0xf6, 0xdc, 0xdd, 0xe7, 0xe6, 0xce, 0x04, 0xeb, 0xa7, 0x2d, 0x6c, - 0x50, 0x9c, 0x2a, 0x41, 0xd9, 0x76, 0x77, 0x9f, 0x43, 0x0d, 0xc8, 0x91, 0xc1, 0xe8, 0x18, 0x6f, - 0x62, 0x75, 0xd7, 0xb2, 0xe9, 0x1a, 0x5a, 0x18, 0x62, 0x9a, 0x02, 0x12, 0x5c, 0xda, 0xe4, 0x04, - 0xeb, 0x56, 0x0b, 0x2f, 0x27, 0x1a, 0x5b, 0xb5, 0xda, 0x8a, 0x92, 0x15, 0x5c, 0xae, 0x5a, 0x36, - 0x51, 0xa8, 0x3d, 0xcb, 0x13, 0x70, 0x96, 0x29, 0xd4, 0x9e, 0x25, 0xc4, 0x7b, 0x09, 0x66, 0x74, - 0x9d, 0xf5, 0xd9, 0xd0, 0x55, 0x1e, 0xa6, 0x39, 0x73, 0x52, 0x48, 0x58, 0xba, 0xbe, 0xca, 0x10, - 0xb8, 0x8e, 0x3b, 0xe8, 0x79, 0x38, 0xe1, 0x0b, 0x2b, 0x48, 0x38, 0x3d, 0xd0, 0xcb, 0x7e, 0xd2, - 0x4b, 0x30, 0xd3, 0x3d, 0x1c, 0x24, 0x44, 0xa1, 0x1a, 0xbb, 0x87, 0xfd, 0x64, 0xcf, 0xc2, 0x6c, - 0x77, 0xbf, 0x3b, 0x48, 0x77, 0x3e, 0x48, 0x87, 0xba, 0xfb, 0xdd, 0x7e, 0xc2, 0x87, 0x69, 0xcc, - 0x6e, 0x63, 0x5d, 0x73, 0x71, 0x6b, 0xee, 0x54, 0x10, 0x3d, 0x50, 0x80, 0x96, 0x40, 0xd2, 0x75, - 0x15, 0x9b, 0xda, 0x4e, 0x1b, 0xab, 0x9a, 0x8d, 0x4d, 0xcd, 0x99, 0x5b, 0xa0, 0xc8, 0x71, 0xd7, - 0xee, 0x61, 0xa5, 0xa0, 0xeb, 0x35, 0x5a, 0x58, 0xa6, 0x65, 0xe8, 0x3c, 0x4c, 0x5b, 0x3b, 0x6f, - 0xe8, 0x4c, 0x23, 0xd5, 0xae, 0x8d, 0x77, 0x8d, 0x83, 0xb9, 0x87, 0xa8, 0x78, 0x8b, 0xa4, 0x80, - 0xea, 0xe3, 0x16, 0x05, 0xa3, 0x47, 0x41, 0xd2, 0x9d, 0x7d, 0xcd, 0xee, 0x52, 0x93, 0xec, 0x74, - 0x35, 0x1d, 0xcf, 0x3d, 0xcc, 0x50, 0x19, 0x7c, 0x43, 0x80, 0xc9, 0x8c, 0x70, 0x6e, 0x1b, 0xbb, - 0xae, 0xe0, 0x78, 0x96, 0xcd, 0x08, 0x0a, 0xe3, 0xdc, 0xce, 0x81, 0x44, 0x24, 0x11, 0xaa, 0xf8, - 0x1c, 0x45, 0x2b, 0x74, 0xf7, 0xbb, 0xc1, 0x7a, 0x1f, 0x84, 0x3c, 0xc1, 0xf4, 0x2b, 0x7d, 0x94, - 0x39, 0x6e, 0xdd, 0xfd, 0x40, 0x8d, 0xcf, 0xc0, 0x49, 0x82, 0xd4, 0xc1, 0xae, 0xd6, 0xd2, 0x5c, - 0x2d, 0x80, 0xfd, 0x38, 0xc5, 0x26, 0x62, 0x5f, 0xe7, 0x85, 0xa1, 0x76, 0xda, 0xbd, 0x9d, 0x43, - 0x4f, 0xb1, 0x9e, 0x60, 0xed, 0x24, 0x30, 0xa1, 0x5a, 0xef, 0x9b, 0x73, 0x2e, 0x2f, 0x43, 0x2e, - 0xa8, 0xf7, 0x28, 0x03, 0x4c, 0xf3, 0xa5, 0x08, 0x71, 0x82, 0xaa, 0x9b, 0x2b, 0xc4, 0x7d, 0x79, - 0xbd, 0x26, 0x45, 0x89, 0x1b, 0xb5, 0x56, 0x6f, 0xd6, 0x54, 0x65, 0x7b, 0xa3, 0x59, 0x5f, 0xaf, - 0x49, 0xb1, 0x80, 0x63, 0x7f, 0x3d, 0x9e, 0x7e, 0x44, 0x3a, 0x2b, 0xff, 0x7c, 0x0c, 0x0a, 0xe1, - 0x48, 0x0d, 0x7d, 0x00, 0x4e, 0x89, 0x84, 0x8b, 0x83, 0x5d, 0xf5, 0xb6, 0x61, 0xd3, 0x09, 0xd9, - 0xd1, 0xd8, 0xe2, 0xe8, 0xe9, 0xcf, 0x2c, 0xc7, 0x6a, 0x60, 0xf7, 0x15, 0xc3, 0x26, 0xd3, 0xad, - 0xa3, 0xb9, 0x68, 0x0d, 0x16, 0x4c, 0x4b, 0x75, 0x5c, 0xcd, 0x6c, 0x69, 0x76, 0x4b, 0xf5, 0x53, - 0x5d, 0xaa, 0xa6, 0xeb, 0xd8, 0x71, 0x2c, 0xb6, 0x10, 0x7a, 0x5c, 0xee, 0x33, 0xad, 0x06, 0x47, - 0xf6, 0x57, 0x88, 0x32, 0x47, 0xed, 0x53, 0xdf, 0xd8, 0x28, 0xf5, 0x3d, 0x03, 0x99, 0x8e, 0xd6, - 0x55, 0xb1, 0xe9, 0xda, 0x87, 0xd4, 0x3f, 0x4f, 0x2b, 0xe9, 0x8e, 0xd6, 0xad, 0x91, 0x6f, 0x74, - 0x03, 0x1e, 0xf1, 0x51, 0xd5, 0x36, 0xde, 0xd3, 0xf4, 0x43, 0x95, 0x3a, 0xe3, 0x34, 0x6d, 0xa0, - 0xea, 0x96, 0xb9, 0xdb, 0x36, 0x74, 0xd7, 0xa1, 0xf6, 0x81, 0xd9, 0x38, 0xd9, 0xa7, 0x58, 0xa3, - 0x04, 0xd7, 0x1d, 0xcb, 0xa4, 0x3e, 0x78, 0x55, 0x60, 0x7f, 0x45, 0xc2, 0xaf, 0xeb, 0xf1, 0x74, - 0x5c, 0x4a, 0x5c, 0x8f, 0xa7, 0x13, 0x52, 0xf2, 0x7a, 0x3c, 0x9d, 0x94, 0x52, 0xd7, 0xe3, 0xe9, - 0xb4, 0x94, 0xb9, 0x1e, 0x4f, 0x67, 0x24, 0x90, 0x7f, 0x26, 0x0d, 0xb9, 0x60, 0x64, 0x40, 0x02, - 0x2d, 0x9d, 0xae, 0x8d, 0x11, 0x6a, 0x3d, 0x1f, 0x3c, 0x32, 0x8e, 0x58, 0xaa, 0x92, 0x45, 0x73, - 0x39, 0xc9, 0xdc, 0x70, 0x85, 0x51, 0x12, 0x87, 0x85, 0xa8, 0x35, 0x66, 0x6e, 0x4f, 0x5a, 0xe1, - 0x5f, 0x68, 0x15, 0x92, 0x6f, 0x38, 0x94, 0x77, 0x92, 0xf2, 0x7e, 0xe8, 0x68, 0xde, 0xd7, 0x1b, - 0x94, 0x79, 0xe6, 0x7a, 0x43, 0xdd, 0xd8, 0x54, 0xd6, 0xcb, 0x6b, 0x0a, 0x27, 0x47, 0xa7, 0x21, - 0xde, 0xd6, 0xde, 0x3c, 0x0c, 0x2f, 0xaf, 0x14, 0x84, 0x96, 0xa0, 0xd8, 0x33, 0x6f, 0x61, 0xdb, - 0xd8, 0x35, 0xc8, 0x50, 0x11, 0xac, 0x62, 0x10, 0xab, 0xe0, 0x97, 0xae, 0x11, 0xfc, 0x09, 0xd5, - 0xe3, 0x34, 0xc4, 0x6f, 0x63, 0xed, 0x66, 0x78, 0x11, 0xa4, 0x20, 0x74, 0x0e, 0x72, 0x2d, 0xbc, - 0xd3, 0xdb, 0x53, 0x6d, 0xdc, 0xd2, 0x74, 0x37, 0x6c, 0xfa, 0xb3, 0xb4, 0x48, 0xa1, 0x25, 0xe8, - 0x25, 0xc8, 0x90, 0x31, 0x32, 0xe9, 0x18, 0x4f, 0x53, 0x11, 0x3c, 0x71, 0xb4, 0x08, 0xf8, 0x10, - 0x0b, 0x22, 0xc5, 0xa7, 0x47, 0x57, 0x21, 0xe9, 0x6a, 0xf6, 0x1e, 0x76, 0xa9, 0xe5, 0x2f, 0x0c, - 0x49, 0x7e, 0x0c, 0xe1, 0xd4, 0xa4, 0x14, 0x34, 0xa6, 0xe5, 0xd4, 0xef, 0xa3, 0x95, 0xb9, 0x00, - 0x09, 0xaa, 0x1e, 0x08, 0x80, 0x2b, 0x88, 0x34, 0x85, 0xd2, 0x10, 0xaf, 0x6e, 0x2a, 0xc4, 0xd2, - 0x48, 0x90, 0x63, 0x50, 0x75, 0xab, 0x5e, 0xab, 0xd6, 0xa4, 0xa8, 0x7c, 0x09, 0x92, 0x6c, 0xcc, - 0x89, 0x15, 0xf2, 0x46, 0x5d, 0x9a, 0xe2, 0x9f, 0x9c, 0x47, 0x44, 0x94, 0x6e, 0xaf, 0x57, 0x6a, - 0x8a, 0x14, 0x95, 0xb7, 0xa1, 0xd8, 0x27, 0x27, 0x74, 0x02, 0xa6, 0x95, 0x5a, 0xb3, 0xb6, 0x41, - 0xe2, 0x2c, 0x75, 0x7b, 0xe3, 0xa5, 0x8d, 0xcd, 0x57, 0x36, 0xa4, 0xa9, 0x30, 0x58, 0x98, 0xb4, - 0x08, 0x9a, 0x05, 0xc9, 0x07, 0x37, 0x36, 0xb7, 0x15, 0xda, 0x9a, 0x6f, 0x8e, 0x82, 0xd4, 0x2f, - 0x35, 0x74, 0x0a, 0x66, 0x9a, 0x65, 0x65, 0xb5, 0xd6, 0x54, 0x59, 0xec, 0xe8, 0xb1, 0x9e, 0x05, - 0x29, 0x58, 0x70, 0xb5, 0x4e, 0x43, 0xe3, 0x05, 0x38, 0x13, 0x84, 0xd6, 0x5e, 0x6d, 0xd6, 0x36, - 0x1a, 0xb4, 0xf2, 0xf2, 0xc6, 0x2a, 0xb1, 0xaf, 0x7d, 0xfc, 0x44, 0xb4, 0x1a, 0x23, 0x4d, 0x0d, - 0xf3, 0xab, 0xad, 0xad, 0x48, 0xf1, 0x7e, 0xf0, 0xe6, 0x46, 0x6d, 0xf3, 0xaa, 0x94, 0xe8, 0xaf, - 0x9d, 0x46, 0xb0, 0x49, 0x54, 0x82, 0x93, 0xfd, 0x50, 0xb5, 0xb6, 0xd1, 0x54, 0x5e, 0x93, 0x52, - 0xfd, 0x15, 0x37, 0x6a, 0xca, 0x8d, 0x7a, 0xb5, 0x26, 0xa5, 0xd1, 0x49, 0x40, 0xe1, 0x16, 0x35, - 0xaf, 0x6d, 0xae, 0x48, 0x99, 0x01, 0x8b, 0x22, 0x3b, 0x90, 0x0b, 0x86, 0x91, 0x5f, 0x99, 0x5c, - 0xd2, 0xc7, 0xa3, 0x90, 0x0d, 0x84, 0x85, 0xc4, 0x9f, 0xd7, 0xda, 0x6d, 0xeb, 0xb6, 0xaa, 0xb5, - 0x0d, 0xcd, 0xe1, 0xf6, 0x06, 0x28, 0xa8, 0x4c, 0x20, 0x93, 0xce, 0xef, 0xc9, 0x2d, 0x7c, 0xf2, - 0xcf, 0xa2, 0x85, 0x4f, 0x48, 0x49, 0xf9, 0xfb, 0x22, 0x20, 0xf5, 0xc7, 0x7b, 0x7d, 0xdd, 0x8f, - 0x8c, 0xea, 0xfe, 0x57, 0x64, 0xec, 0x3e, 0x11, 0x81, 0x42, 0x38, 0xc8, 0xeb, 0x6b, 0xde, 0x03, - 0x7f, 0xaa, 0xcd, 0xfb, 0xcd, 0x28, 0xe4, 0x43, 0xa1, 0xdd, 0xa4, 0xad, 0xfb, 0x30, 0x4c, 0x1b, - 0x2d, 0xdc, 0xe9, 0x5a, 0x2e, 0x36, 0xf5, 0x43, 0xb5, 0x8d, 0x6f, 0xe1, 0xf6, 0x9c, 0x4c, 0x8d, - 0xf2, 0x85, 0xa3, 0x83, 0xc7, 0xa5, 0xba, 0x4f, 0xb7, 0x46, 0xc8, 0x96, 0x67, 0xea, 0x2b, 0xb5, - 0xf5, 0xad, 0xcd, 0x66, 0x6d, 0xa3, 0xfa, 0x9a, 0xb0, 0x2e, 0x8a, 0x64, 0xf4, 0xa1, 0xbd, 0x8f, - 0x46, 0x7b, 0x0b, 0xa4, 0xfe, 0x46, 0x11, 0x5b, 0x31, 0xa4, 0x59, 0xd2, 0x14, 0x9a, 0x81, 0xe2, - 0xc6, 0xa6, 0xda, 0xa8, 0xaf, 0xd4, 0xd4, 0xda, 0xd5, 0xab, 0xb5, 0x6a, 0xb3, 0xc1, 0xd2, 0x81, - 0x1e, 0x76, 0x53, 0x8a, 0x06, 0x45, 0xfc, 0x3d, 0x31, 0x98, 0x19, 0xd2, 0x12, 0x54, 0xe6, 0x81, - 0x3c, 0xcb, 0x2d, 0x3c, 0x31, 0x49, 0xeb, 0x97, 0x88, 0x2b, 0xbd, 0xa5, 0xd9, 0x2e, 0x8f, 0xfb, - 0x1f, 0x05, 0x22, 0x25, 0xd3, 0x25, 0x2b, 0xbb, 0xcd, 0xd3, 0xac, 0x2c, 0xba, 0x2f, 0xfa, 0x70, - 0x96, 0x69, 0x7d, 0x1c, 0x50, 0xd7, 0x72, 0x0c, 0xd7, 0xb8, 0x85, 0x55, 0xc3, 0x14, 0x39, 0x59, - 0x12, 0xed, 0xc7, 0x15, 0x49, 0x94, 0xd4, 0x4d, 0xd7, 0xc3, 0x36, 0xf1, 0x9e, 0xd6, 0x87, 0x4d, - 0x3c, 0x8f, 0x98, 0x22, 0x89, 0x12, 0x0f, 0xfb, 0x01, 0xc8, 0xb5, 0xac, 0x1e, 0x09, 0x81, 0x18, - 0x1e, 0xb1, 0x16, 0x11, 0x25, 0xcb, 0x60, 0x1e, 0x0a, 0x0f, 0x6e, 0xfd, 0x64, 0x70, 0x4e, 0xc9, - 0x32, 0x18, 0x43, 0x39, 0x0b, 0x45, 0x6d, 0x6f, 0xcf, 0x26, 0xcc, 0x05, 0x23, 0x16, 0xae, 0x17, - 0x3c, 0x30, 0x45, 0x2c, 0x5d, 0x87, 0xb4, 0x90, 0x03, 0xf1, 0x60, 0x89, 0x24, 0xd4, 0x2e, 0xcb, - 0x41, 0x45, 0xcf, 0x65, 0x94, 0xb4, 0x29, 0x0a, 0x1f, 0x80, 0x9c, 0xe1, 0xa8, 0xfe, 0xde, 0x56, - 0x74, 0x31, 0x7a, 0x2e, 0xad, 0x64, 0x0d, 0xc7, 0xdb, 0x17, 0x90, 0x7f, 0x24, 0x0a, 0x85, 0xf0, - 0xae, 0x1d, 0x5a, 0x81, 0x74, 0xdb, 0xd2, 0x35, 0xaa, 0x5a, 0x6c, 0xcb, 0xf8, 0xdc, 0x98, 0x8d, - 0xbe, 0xa5, 0x35, 0x8e, 0xaf, 0x78, 0x94, 0xa5, 0x7f, 0x13, 0x81, 0xb4, 0x00, 0xa3, 0x93, 0x10, - 0xef, 0x6a, 0xee, 0x3e, 0x65, 0x97, 0xa8, 0x44, 0xa5, 0x88, 0x42, 0xbf, 0x09, 0xdc, 0xe9, 0x6a, - 0x26, 0x55, 0x01, 0x0e, 0x27, 0xdf, 0x64, 0x5c, 0xdb, 0x58, 0x6b, 0xd1, 0x5c, 0x80, 0xd5, 0xe9, - 0x60, 0xd3, 0x75, 0xc4, 0xb8, 0x72, 0x78, 0x95, 0x83, 0xd1, 0x63, 0x30, 0xed, 0xda, 0x9a, 0xd1, - 0x0e, 0xe1, 0xc6, 0x29, 0xae, 0x24, 0x0a, 0x3c, 0xe4, 0x65, 0x38, 0x2d, 0xf8, 0xb6, 0xb0, 0xab, - 0xe9, 0xfb, 0xb8, 0xe5, 0x13, 0x25, 0x69, 0xce, 0xef, 0x14, 0x47, 0x58, 0xe1, 0xe5, 0x82, 0x56, - 0xfe, 0x6c, 0x14, 0xa6, 0x45, 0xf6, 0xa2, 0xe5, 0x09, 0x6b, 0x1d, 0x40, 0x33, 0x4d, 0xcb, 0x0d, - 0x8a, 0x6b, 0x50, 0x95, 0x07, 0xe8, 0x96, 0xca, 0x1e, 0x91, 0x12, 0x60, 0x50, 0xfa, 0xdd, 0x08, - 0x80, 0x5f, 0x34, 0x52, 0x6e, 0x0b, 0x90, 0xe5, 0x7b, 0xb2, 0x74, 0x63, 0x9f, 0x25, 0xbc, 0x80, - 0x81, 0xae, 0x1a, 0x6d, 0x9a, 0x96, 0xdc, 0xc1, 0x7b, 0x86, 0xc9, 0xf7, 0x53, 0xd8, 0x87, 0x48, - 0x4b, 0xc6, 0xfd, 0xed, 0x29, 0x05, 0xd2, 0x0e, 0xee, 0x68, 0xa6, 0x6b, 0xe8, 0x7c, 0x87, 0xe4, - 0xf2, 0xb1, 0x1a, 0xbf, 0xd4, 0xe0, 0xd4, 0x8a, 0xc7, 0x47, 0x3e, 0x07, 0x69, 0x01, 0x25, 0x8e, - 0xdf, 0xc6, 0xe6, 0x46, 0x4d, 0x9a, 0x42, 0x29, 0x88, 0x35, 0x6a, 0x4d, 0x29, 0x42, 0xc2, 0xce, - 0xf2, 0x5a, 0xbd, 0xdc, 0x90, 0xa2, 0x95, 0xbf, 0x02, 0x33, 0xba, 0xd5, 0xe9, 0xaf, 0xb0, 0x22, - 0xf5, 0xa5, 0xfc, 0x9c, 0x6b, 0x91, 0xd7, 0x9f, 0xe0, 0x48, 0x7b, 0x56, 0x5b, 0x33, 0xf7, 0x96, - 0x2c, 0x7b, 0xcf, 0x3f, 0x16, 0x41, 0xa2, 0x03, 0x27, 0x70, 0x38, 0xa2, 0xbb, 0xf3, 0x27, 0x91, - 0xc8, 0x0f, 0x44, 0x63, 0xab, 0x5b, 0x95, 0x1f, 0x8b, 0x96, 0x56, 0x19, 0xe1, 0x96, 0xe8, 0x8e, - 0x82, 0x77, 0xdb, 0x58, 0x27, 0x8d, 0x87, 0xdf, 0x7b, 0x0c, 0x66, 0xf7, 0xac, 0x3d, 0x8b, 0x72, - 0xba, 0x40, 0x7e, 0xf1, 0x73, 0x15, 0x19, 0x0f, 0x5a, 0x1a, 0x7b, 0x08, 0x63, 0x79, 0x03, 0x66, - 0x38, 0xb2, 0x4a, 0xb7, 0x6f, 0x59, 0x72, 0x01, 0x1d, 0x99, 0xd9, 0x9e, 0xfb, 0x89, 0xdf, 0xa6, - 0x5e, 0x89, 0x32, 0xcd, 0x49, 0x49, 0x19, 0xcb, 0x3f, 0x2c, 0x2b, 0x70, 0x22, 0xc4, 0x8f, 0xd9, - 0x08, 0x6c, 0x8f, 0xe1, 0xf8, 0xcf, 0x39, 0xc7, 0x99, 0x00, 0xc7, 0x06, 0x27, 0x5d, 0xae, 0x42, - 0xfe, 0x38, 0xbc, 0xfe, 0x05, 0xe7, 0x95, 0xc3, 0x41, 0x26, 0xab, 0x50, 0xa4, 0x4c, 0xf4, 0x9e, - 0xe3, 0x5a, 0x1d, 0x6a, 0x80, 0x8f, 0x66, 0xf3, 0x2f, 0x7f, 0x9b, 0x4d, 0xda, 0x02, 0x21, 0xab, - 0x7a, 0x54, 0xcb, 0xcb, 0x40, 0x77, 0xac, 0x5b, 0x58, 0x6f, 0x8f, 0xe1, 0xf0, 0xcb, 0xbc, 0x21, - 0x1e, 0xfe, 0xf2, 0x0d, 0x98, 0x25, 0xbf, 0xa9, 0x7d, 0x0c, 0xb6, 0x64, 0x7c, 0x1a, 0x7c, 0xee, - 0xdf, 0x7e, 0x84, 0xd9, 0x85, 0x19, 0x8f, 0x41, 0xa0, 0x4d, 0x81, 0x51, 0xdc, 0xc3, 0xae, 0x8b, - 0x6d, 0x47, 0xd5, 0xda, 0xc3, 0x9a, 0x17, 0xc8, 0x23, 0xce, 0x7d, 0xf7, 0x17, 0xc3, 0xa3, 0xb8, - 0xca, 0x28, 0xcb, 0xed, 0xf6, 0xf2, 0x36, 0x9c, 0x1a, 0xa2, 0x15, 0x13, 0xf0, 0xfc, 0x1e, 0xce, - 0x73, 0x76, 0x40, 0x33, 0x08, 0xdb, 0x2d, 0x10, 0x70, 0x6f, 0x2c, 0x27, 0xe0, 0xf9, 0xbd, 0x9c, - 0x27, 0xe2, 0xb4, 0x62, 0x48, 0x09, 0xc7, 0xeb, 0x30, 0x7d, 0x0b, 0xdb, 0x3b, 0x96, 0xc3, 0x73, - 0xb7, 0x13, 0xb0, 0xfb, 0x04, 0x67, 0x57, 0xe4, 0x84, 0x34, 0x99, 0x4b, 0x78, 0x3d, 0x0f, 0xe9, - 0x5d, 0x4d, 0xc7, 0x13, 0xb0, 0xb8, 0xcb, 0x59, 0xa4, 0x08, 0x3e, 0x21, 0x2d, 0x43, 0x6e, 0xcf, - 0xe2, 0x4b, 0xe4, 0x78, 0xf2, 0xef, 0xe3, 0xe4, 0x59, 0x41, 0xc3, 0x59, 0x74, 0xad, 0x6e, 0xaf, - 0x4d, 0xd6, 0xcf, 0xf1, 0x2c, 0xbe, 0x5f, 0xb0, 0x10, 0x34, 0x9c, 0xc5, 0x31, 0xc4, 0xfa, 0x49, - 0xc1, 0xc2, 0x09, 0xc8, 0xf3, 0x45, 0xc8, 0x5a, 0x66, 0xfb, 0xd0, 0x32, 0x27, 0x69, 0xc4, 0xa7, - 0x38, 0x07, 0xe0, 0x24, 0x84, 0xc1, 0x15, 0xc8, 0x4c, 0x3a, 0x10, 0x3f, 0xf4, 0x45, 0x31, 0x3d, - 0xc4, 0x08, 0xac, 0x42, 0x51, 0x18, 0x28, 0xc3, 0x32, 0x27, 0x60, 0xf1, 0xc3, 0x9c, 0x45, 0x21, - 0x40, 0xc6, 0xbb, 0xe1, 0x62, 0xc7, 0xdd, 0xc3, 0x93, 0x30, 0xf9, 0x11, 0xd1, 0x0d, 0x4e, 0xc2, - 0x45, 0xb9, 0x83, 0x4d, 0x7d, 0x7f, 0x32, 0x0e, 0x9f, 0x16, 0xa2, 0x14, 0x34, 0x84, 0x45, 0x15, - 0xf2, 0x1d, 0xcd, 0x76, 0xf6, 0xb5, 0xf6, 0x44, 0xc3, 0xf1, 0xa3, 0x9c, 0x47, 0xce, 0x23, 0xe2, - 0x12, 0xe9, 0x99, 0xc7, 0x61, 0xf3, 0x63, 0x42, 0x22, 0x01, 0x32, 0x3e, 0xf5, 0x1c, 0x97, 0x26, - 0xba, 0x8f, 0xc3, 0xed, 0x6f, 0x8b, 0xa9, 0xc7, 0x68, 0xd7, 0x83, 0x1c, 0xaf, 0x40, 0xc6, 0x31, - 0xde, 0x9c, 0x88, 0xcd, 0xdf, 0x11, 0x23, 0x4d, 0x09, 0x08, 0xf1, 0x6b, 0x70, 0x7a, 0xe8, 0x32, - 0x31, 0x01, 0xb3, 0xbf, 0xcb, 0x99, 0x9d, 0x1c, 0xb2, 0x54, 0x70, 0x93, 0x70, 0x5c, 0x96, 0x7f, - 0x4f, 0x98, 0x04, 0xdc, 0xc7, 0x6b, 0x8b, 0x04, 0x2d, 0x8e, 0xb6, 0x7b, 0x3c, 0xa9, 0xfd, 0x7d, - 0x21, 0x35, 0x46, 0x1b, 0x92, 0x5a, 0x13, 0x4e, 0x72, 0x8e, 0xc7, 0x1b, 0xd7, 0x1f, 0x17, 0x86, - 0x95, 0x51, 0x6f, 0x87, 0x47, 0xf7, 0xab, 0xa0, 0xe4, 0x89, 0x53, 0x78, 0xc7, 0x8e, 0xda, 0xd1, - 0xba, 0x13, 0x70, 0xfe, 0x09, 0xce, 0x59, 0x58, 0x7c, 0xcf, 0xbd, 0x76, 0xd6, 0xb5, 0x2e, 0x61, - 0xfe, 0x2a, 0xcc, 0x09, 0xe6, 0x3d, 0xd3, 0xc6, 0xba, 0xb5, 0x67, 0x1a, 0x6f, 0xe2, 0xd6, 0x04, - 0xac, 0x7f, 0xb2, 0x6f, 0xa8, 0xb6, 0x03, 0xe4, 0x84, 0x73, 0x1d, 0x24, 0xcf, 0x57, 0x51, 0x8d, - 0x4e, 0xd7, 0xb2, 0xdd, 0x31, 0x1c, 0x7f, 0x4a, 0x8c, 0x94, 0x47, 0x57, 0xa7, 0x64, 0xcb, 0x35, - 0x60, 0xa7, 0x3f, 0x26, 0x55, 0xc9, 0xcf, 0x70, 0x46, 0x79, 0x9f, 0x8a, 0x1b, 0x0e, 0xdd, 0xea, - 0x74, 0x35, 0x7b, 0x12, 0xfb, 0xf7, 0x0f, 0x84, 0xe1, 0xe0, 0x24, 0xdc, 0x70, 0x10, 0x8f, 0x8e, - 0xac, 0xf6, 0x13, 0x70, 0xf8, 0x69, 0x61, 0x38, 0x04, 0x0d, 0x67, 0x21, 0x1c, 0x86, 0x09, 0x58, - 0xfc, 0x8c, 0x60, 0x21, 0x68, 0x08, 0x8b, 0x97, 0xfd, 0x85, 0xd6, 0xc6, 0x7b, 0x86, 0xe3, 0xda, - 0xcc, 0x25, 0x3f, 0x9a, 0xd5, 0xcf, 0x7e, 0x31, 0xec, 0x84, 0x29, 0x01, 0x52, 0x62, 0x89, 0xf8, - 0xd6, 0x07, 0x0d, 0xd9, 0xc6, 0x37, 0xec, 0xe7, 0x84, 0x25, 0x0a, 0x90, 0x91, 0xb6, 0x05, 0x3c, - 0x44, 0x22, 0x76, 0x9d, 0x04, 0x2a, 0x13, 0xb0, 0xfb, 0x87, 0x7d, 0x8d, 0x6b, 0x08, 0x5a, 0xc2, - 0x33, 0xe0, 0xff, 0xf4, 0xcc, 0x9b, 0xf8, 0x70, 0x22, 0xed, 0xfc, 0xf9, 0x3e, 0xff, 0x67, 0x9b, - 0x51, 0x32, 0x1b, 0x52, 0xec, 0xf3, 0xa7, 0xd0, 0xb8, 0xb3, 0x7e, 0x73, 0x5f, 0xf7, 0x2e, 0xef, - 0x6f, 0xd8, 0x9d, 0x5a, 0x5e, 0x23, 0x4a, 0x1e, 0x76, 0x7a, 0xc6, 0x33, 0xfb, 0xc8, 0xbb, 0x9e, - 0x9e, 0x87, 0x7c, 0x9e, 0xe5, 0xab, 0x90, 0x0f, 0x39, 0x3c, 0xe3, 0x59, 0x7d, 0x3d, 0x67, 0x95, - 0x0b, 0xfa, 0x3b, 0xcb, 0x97, 0x20, 0x4e, 0x9c, 0x97, 0xf1, 0xe4, 0xdf, 0xc0, 0xc9, 0x29, 0xfa, - 0xf2, 0x0b, 0x90, 0x16, 0x4e, 0xcb, 0x78, 0xd2, 0xbf, 0xc6, 0x49, 0x3d, 0x12, 0x42, 0x2e, 0x1c, - 0x96, 0xf1, 0xe4, 0x7f, 0x5d, 0x90, 0x0b, 0x12, 0x42, 0x3e, 0xb9, 0x08, 0x7f, 0xf1, 0x9b, 0xe2, - 0x7c, 0xd1, 0x11, 0xb2, 0xbb, 0x02, 0x29, 0xee, 0xa9, 0x8c, 0xa7, 0xfe, 0x46, 0x5e, 0xb9, 0xa0, - 0x58, 0x7e, 0x16, 0x12, 0x13, 0x0a, 0xfc, 0x5b, 0x38, 0x29, 0xc3, 0x5f, 0xae, 0x42, 0x36, 0xe0, - 0x9d, 0x8c, 0x27, 0xff, 0x56, 0x4e, 0x1e, 0xa4, 0x22, 0x4d, 0xe7, 0xde, 0xc9, 0x78, 0x06, 0x7f, - 0x43, 0x34, 0x9d, 0x53, 0x10, 0xb1, 0x09, 0xc7, 0x64, 0x3c, 0xf5, 0xc7, 0x84, 0xd4, 0x05, 0xc9, - 0xf2, 0x8b, 0x90, 0xf1, 0x16, 0x9b, 0xf1, 0xf4, 0xdf, 0xc6, 0xe9, 0x7d, 0x1a, 0x22, 0x81, 0xc0, - 0x62, 0x37, 0x9e, 0xc5, 0xdf, 0x14, 0x12, 0x08, 0x50, 0x91, 0x69, 0xd4, 0xef, 0xc0, 0x8c, 0xe7, - 0xf4, 0xed, 0x62, 0x1a, 0xf5, 0xf9, 0x2f, 0x64, 0x34, 0xa9, 0xcd, 0x1f, 0xcf, 0xe2, 0x3b, 0xc4, - 0x68, 0x52, 0x7c, 0xd2, 0x8c, 0x7e, 0x8f, 0x60, 0x3c, 0x8f, 0xef, 0x12, 0xcd, 0xe8, 0x73, 0x08, - 0x96, 0xb7, 0x00, 0x0d, 0x7a, 0x03, 0xe3, 0xf9, 0x7d, 0x9c, 0xf3, 0x9b, 0x1e, 0x70, 0x06, 0x96, - 0x5f, 0x81, 0x93, 0xc3, 0x3d, 0x81, 0xf1, 0x5c, 0xbf, 0xfb, 0xdd, 0xbe, 0xd8, 0x2d, 0xe8, 0x08, - 0x2c, 0x37, 0xfd, 0x25, 0x25, 0xe8, 0x05, 0x8c, 0x67, 0xfb, 0x3d, 0xef, 0x86, 0x0d, 0x77, 0xd0, - 0x09, 0x58, 0x2e, 0x03, 0xf8, 0x0b, 0xf0, 0x78, 0x5e, 0x9f, 0xe0, 0xbc, 0x02, 0x44, 0x64, 0x6a, - 0xf0, 0xf5, 0x77, 0x3c, 0xfd, 0x5d, 0x31, 0x35, 0x38, 0x05, 0x99, 0x1a, 0x62, 0xe9, 0x1d, 0x4f, - 0xfd, 0x7d, 0x62, 0x6a, 0x08, 0x12, 0xa2, 0xd9, 0x81, 0xd5, 0x6d, 0x3c, 0x87, 0x4f, 0x09, 0xcd, - 0x0e, 0x50, 0x2d, 0x6f, 0xc0, 0xf4, 0xc0, 0x82, 0x38, 0x9e, 0xd5, 0x0f, 0x70, 0x56, 0x52, 0xff, - 0x7a, 0x18, 0x5c, 0xbc, 0xf8, 0x62, 0x38, 0x9e, 0xdb, 0x0f, 0xf6, 0x2d, 0x5e, 0x7c, 0x2d, 0x5c, - 0xbe, 0x02, 0x69, 0xb3, 0xd7, 0x6e, 0x93, 0xc9, 0x83, 0x8e, 0x3e, 0x9f, 0x3b, 0xf7, 0x5f, 0xbf, - 0xc4, 0xa5, 0x23, 0x08, 0x96, 0x2f, 0x41, 0x02, 0x77, 0x76, 0x70, 0x6b, 0x1c, 0xe5, 0x17, 0xbe, - 0x24, 0x0c, 0x26, 0xc1, 0x5e, 0x7e, 0x11, 0x80, 0xa5, 0x46, 0xe8, 0xc6, 0xf9, 0x18, 0xda, 0xdf, - 0xfd, 0x12, 0x3f, 0x10, 0xe7, 0x93, 0xf8, 0x0c, 0xd8, 0xf1, 0xba, 0xa3, 0x19, 0x7c, 0x31, 0xcc, - 0x80, 0x8e, 0xc8, 0xf3, 0x90, 0x7a, 0xc3, 0xb1, 0x4c, 0x57, 0xdb, 0x1b, 0x47, 0xfd, 0x7b, 0x9c, - 0x5a, 0xe0, 0x13, 0x81, 0x75, 0x2c, 0x1b, 0xbb, 0xda, 0x9e, 0x33, 0x8e, 0xf6, 0xbf, 0x71, 0x5a, - 0x8f, 0x80, 0x10, 0xeb, 0x9a, 0xe3, 0x4e, 0xd2, 0xef, 0xff, 0x2e, 0x88, 0x05, 0x01, 0x69, 0x34, - 0xf9, 0x7d, 0x13, 0x1f, 0x8e, 0xa3, 0xfd, 0x7d, 0xd1, 0x68, 0x8e, 0xbf, 0xfc, 0x02, 0x64, 0xc8, - 0x4f, 0x76, 0xca, 0x75, 0x0c, 0xf1, 0x1f, 0x70, 0x62, 0x9f, 0x82, 0xd4, 0xec, 0xb8, 0x2d, 0xd7, - 0x18, 0x2f, 0xec, 0x3f, 0xe4, 0x23, 0x2d, 0xf0, 0x97, 0xcb, 0x90, 0x75, 0xdc, 0x56, 0xab, 0xc7, - 0xfd, 0xd3, 0x31, 0xe4, 0x7f, 0xf4, 0x25, 0x2f, 0x65, 0xe1, 0xd1, 0x90, 0xd1, 0xbe, 0x7d, 0xd3, - 0xed, 0x5a, 0x74, 0xbf, 0x65, 0x1c, 0x87, 0x77, 0x39, 0x87, 0x00, 0xc9, 0x72, 0x15, 0x72, 0xa4, - 0x2f, 0x36, 0xee, 0x62, 0xba, 0x39, 0x36, 0x86, 0xc5, 0x1f, 0x73, 0x01, 0x84, 0x88, 0x2a, 0x5f, - 0xfb, 0xcb, 0xef, 0xcc, 0x47, 0x3e, 0xfb, 0xce, 0x7c, 0xe4, 0x37, 0xdf, 0x99, 0x8f, 0x7c, 0xec, - 0x73, 0xf3, 0x53, 0x9f, 0xfd, 0xdc, 0xfc, 0xd4, 0xaf, 0x7f, 0x6e, 0x7e, 0x6a, 0x78, 0x96, 0x18, - 0x56, 0xad, 0x55, 0x8b, 0xe5, 0x87, 0x5f, 0x7f, 0x78, 0xcf, 0x70, 0xf7, 0x7b, 0x3b, 0x4b, 0xba, - 0xd5, 0xb9, 0xa0, 0x5b, 0x4e, 0xc7, 0x72, 0x2e, 0x84, 0xf3, 0xba, 0xf4, 0x17, 0xfc, 0xef, 0x08, - 0x89, 0x99, 0xc3, 0xe9, 0x5c, 0xcd, 0x3c, 0x1c, 0x75, 0x99, 0xee, 0x32, 0xc4, 0xca, 0xe6, 0x21, - 0x3a, 0xcd, 0x0c, 0x9c, 0xda, 0xb3, 0xdb, 0xfc, 0xa8, 0x65, 0x8a, 0x7c, 0x6f, 0xdb, 0x6d, 0x34, - 0xeb, 0x9f, 0x87, 0x8e, 0x9c, 0xcb, 0xf1, 0x43, 0xce, 0x95, 0x6f, 0x8d, 0x1c, 0xaf, 0x27, 0xe9, - 0xb2, 0x79, 0x48, 0x3b, 0xb2, 0x15, 0x79, 0xfd, 0xf1, 0xb1, 0x79, 0xee, 0x9b, 0xa6, 0x75, 0xdb, - 0x24, 0xcd, 0xee, 0xee, 0x88, 0x1c, 0xf7, 0x7c, 0x7f, 0x8e, 0xfb, 0x15, 0xdc, 0x6e, 0xbf, 0x44, - 0xf0, 0x9a, 0x84, 0x64, 0x27, 0xc9, 0x4e, 0xf5, 0xc3, 0xb7, 0x47, 0x61, 0x7e, 0x20, 0x9d, 0xcd, - 0x95, 0x60, 0x94, 0x10, 0x96, 0x21, 0xbd, 0x22, 0x74, 0x6b, 0x0e, 0x52, 0x0e, 0xd6, 0x2d, 0xb3, - 0xe5, 0x50, 0x41, 0xc4, 0x14, 0xf1, 0x49, 0x04, 0x61, 0x6a, 0xa6, 0xe5, 0xf0, 0xc3, 0xca, 0xec, - 0xa3, 0xf2, 0xbd, 0xc7, 0x14, 0x44, 0x5e, 0xd4, 0x24, 0xa4, 0xf1, 0xd4, 0x84, 0xd2, 0x10, 0x9d, - 0x08, 0x65, 0xfe, 0x27, 0x95, 0xca, 0x77, 0x45, 0x61, 0xa1, 0x5f, 0x2a, 0x64, 0x66, 0x39, 0xae, - 0xd6, 0xe9, 0x8e, 0x12, 0xcb, 0x15, 0xc8, 0x34, 0x05, 0xce, 0xb1, 0xe5, 0x72, 0xf7, 0x98, 0x72, - 0x29, 0x78, 0x55, 0x09, 0xc1, 0x5c, 0x9c, 0x50, 0x30, 0x5e, 0x3f, 0xee, 0x49, 0x32, 0xff, 0x2b, - 0x09, 0xa7, 0xd9, 0x74, 0x52, 0xd9, 0x54, 0x62, 0x1f, 0x5c, 0x26, 0xb9, 0x60, 0xd1, 0xf8, 0x7d, - 0x12, 0xf9, 0x25, 0x98, 0xa9, 0x13, 0x6b, 0x41, 0xa2, 0x20, 0x7f, 0x87, 0x67, 0xe8, 0x79, 0xee, - 0xc5, 0x90, 0xc3, 0xcf, 0xf7, 0xb7, 0x82, 0x20, 0xf9, 0xeb, 0x22, 0x20, 0x35, 0x74, 0xad, 0xad, - 0xd9, 0x5f, 0x2e, 0x2b, 0xf4, 0x2c, 0x00, 0x3b, 0xee, 0xe1, 0x5d, 0xdc, 0x2b, 0x5c, 0x9c, 0x5b, - 0x0a, 0x76, 0x6e, 0x89, 0xd5, 0x44, 0x4f, 0x50, 0x65, 0x28, 0x2e, 0xf9, 0x79, 0xfe, 0x55, 0x00, - 0xbf, 0x00, 0x9d, 0x81, 0x53, 0x8d, 0x6a, 0x79, 0xad, 0xac, 0x88, 0x43, 0x42, 0x8d, 0xad, 0x5a, - 0xb5, 0x7e, 0xb5, 0x5e, 0x5b, 0x91, 0xa6, 0xd0, 0x49, 0x40, 0xc1, 0x42, 0xef, 0x50, 0xd3, 0x09, - 0x98, 0x0e, 0xc2, 0xd9, 0x2d, 0x95, 0x28, 0xf1, 0x14, 0x8d, 0x4e, 0xb7, 0x8d, 0xe9, 0xce, 0xa3, - 0x6a, 0x08, 0xa9, 0x8d, 0x77, 0x42, 0x7e, 0xe5, 0xdf, 0xb3, 0x9b, 0x0b, 0x33, 0x3e, 0xb9, 0x27, - 0xf3, 0xe5, 0x35, 0x98, 0xd6, 0x74, 0x1d, 0x77, 0x43, 0x2c, 0xc7, 0x98, 0x6a, 0xc2, 0x90, 0xee, - 0xa5, 0x72, 0x4a, 0x9f, 0xdb, 0xb3, 0x90, 0x74, 0x68, 0xef, 0xc7, 0xb1, 0xf8, 0x55, 0xce, 0x82, - 0xa3, 0x2f, 0x9b, 0x30, 0x4d, 0x3c, 0x3f, 0xcd, 0xc6, 0x81, 0x66, 0x1c, 0x9d, 0x67, 0xf8, 0x47, - 0x3f, 0xf5, 0x24, 0xdd, 0x59, 0x7d, 0x20, 0x3c, 0x2c, 0x43, 0xd4, 0x49, 0x91, 0x38, 0x6f, 0xbf, - 0xa1, 0x18, 0x0a, 0xa2, 0x3e, 0xde, 0xe0, 0xa3, 0x2b, 0xfb, 0x05, 0x5e, 0xd9, 0xfc, 0x30, 0x1d, - 0x08, 0xd4, 0x94, 0xe7, 0x5c, 0x59, 0x41, 0xa5, 0x36, 0x6a, 0x4e, 0xbf, 0xfe, 0xd8, 0xe0, 0xea, - 0xc4, 0xfe, 0x7b, 0x82, 0x72, 0xbe, 0x12, 0xac, 0xc6, 0x9b, 0x7b, 0xdf, 0x1b, 0x87, 0x69, 0xad, - 0x63, 0x98, 0xd6, 0x05, 0xfa, 0x2f, 0x9f, 0x73, 0x09, 0xfa, 0x31, 0xc1, 0xa6, 0xe4, 0x65, 0x36, - 0x15, 0xc6, 0x6b, 0xcc, 0x1f, 0x7c, 0xf3, 0x0f, 0x27, 0xfc, 0xe9, 0xb2, 0xbc, 0x0e, 0x92, 0x38, - 0xc4, 0x8b, 0x4d, 0xdd, 0x6a, 0x4d, 0x94, 0xa5, 0xf8, 0x43, 0xc1, 0x43, 0xe4, 0xb7, 0x6a, 0x9c, - 0x74, 0xf9, 0x03, 0x90, 0xf6, 0xd8, 0x8c, 0xf3, 0x4c, 0x04, 0x13, 0x8f, 0x82, 0xf8, 0x25, 0x6c, - 0x66, 0x4e, 0xe2, 0x85, 0xbe, 0x2b, 0xe8, 0xd9, 0x0c, 0xdd, 0x20, 0xbd, 0x59, 0x85, 0x42, 0xcb, - 0x32, 0x5d, 0xd5, 0xea, 0x18, 0x2e, 0xee, 0x74, 0xdd, 0xb1, 0x7e, 0xdd, 0x1f, 0x33, 0x26, 0x69, - 0x25, 0x4f, 0xe8, 0x36, 0x05, 0x19, 0x69, 0x09, 0xbb, 0xa7, 0x37, 0x49, 0x4b, 0xfe, 0x87, 0xd7, - 0x12, 0x4a, 0x43, 0x5a, 0x72, 0x4f, 0xda, 0xe1, 0xb4, 0x6e, 0x72, 0x63, 0xee, 0x1e, 0x30, 0x2d, - 0xf0, 0xb4, 0xe3, 0x9f, 0xc6, 0x61, 0x9e, 0x23, 0xef, 0x68, 0x0e, 0xbe, 0x70, 0xeb, 0xa9, 0x1d, - 0xec, 0x6a, 0x4f, 0x5d, 0xd0, 0x2d, 0x43, 0xac, 0xe4, 0x33, 0xdc, 0x58, 0x93, 0xf2, 0x25, 0x5e, - 0x5e, 0x1a, 0xba, 0xdd, 0x5d, 0x1a, 0x6d, 0xe4, 0x4b, 0x83, 0x3a, 0x28, 0xb7, 0x21, 0x5e, 0xb5, - 0x0c, 0x93, 0xac, 0x6d, 0x2d, 0x6c, 0x5a, 0x1d, 0x6e, 0x6e, 0xd9, 0x07, 0xba, 0x06, 0x49, 0xad, - 0x63, 0xf5, 0x4c, 0x97, 0x99, 0xda, 0xca, 0x93, 0xbf, 0xfc, 0xf6, 0xc2, 0xd4, 0x7f, 0x7a, 0x7b, - 0xe1, 0x04, 0x63, 0xeb, 0xb4, 0x6e, 0x2e, 0x19, 0xd6, 0x85, 0x8e, 0xe6, 0xee, 0x93, 0xe9, 0xfb, - 0x6b, 0x9f, 0x79, 0x02, 0x78, 0x7d, 0x75, 0xd3, 0xfd, 0xf4, 0xef, 0xfc, 0xf8, 0xf9, 0x88, 0xc2, - 0xe9, 0x97, 0xe3, 0x9f, 0xff, 0xe4, 0x42, 0x44, 0xee, 0x42, 0x6a, 0x05, 0xeb, 0x47, 0x54, 0x58, - 0xef, 0xab, 0xf0, 0x29, 0x5e, 0xe1, 0x99, 0xc1, 0x0a, 0xd9, 0x81, 0xbd, 0x15, 0xac, 0x07, 0xaa, - 0x5d, 0xc1, 0x7a, 0x5f, 0x8d, 0x75, 0x48, 0xd7, 0x4d, 0x97, 0x5d, 0x36, 0x7a, 0x01, 0x62, 0x86, - 0xc9, 0xce, 0xaf, 0x67, 0x2a, 0x8f, 0x1d, 0xa3, 0x2b, 0x0a, 0xa1, 0x93, 0x37, 0x21, 0xbd, 0x82, - 0x75, 0xc6, 0xaa, 0x0a, 0xb1, 0x16, 0xd6, 0x39, 0xab, 0x7b, 0x68, 0x24, 0xa1, 0xae, 0xac, 0xfc, - 0xfa, 0x6f, 0xcd, 0x4f, 0xbd, 0xf5, 0xce, 0xfc, 0xd4, 0x48, 0x75, 0x92, 0xc7, 0xab, 0x93, 0xa7, - 0x45, 0x3f, 0x1c, 0x87, 0xfb, 0xe9, 0x6d, 0x55, 0xbb, 0x63, 0x98, 0xee, 0x05, 0xdd, 0x3e, 0xec, - 0xba, 0x16, 0x31, 0x2a, 0xd6, 0x2e, 0x57, 0xa2, 0x69, 0xbf, 0x78, 0x89, 0x15, 0x0f, 0x57, 0x21, - 0x79, 0x17, 0x12, 0x5b, 0x84, 0x8e, 0x0c, 0x92, 0x6b, 0xb9, 0x5a, 0x9b, 0x7b, 0x42, 0xec, 0x83, - 0x40, 0xd9, 0x0d, 0xd7, 0x28, 0x83, 0x1a, 0xe2, 0x72, 0x6b, 0x1b, 0x6b, 0xbb, 0xec, 0xa2, 0x50, - 0x8c, 0xba, 0xd0, 0x69, 0x02, 0xa0, 0x77, 0x82, 0x66, 0x21, 0xa1, 0xf5, 0xd8, 0x61, 0x9e, 0x18, - 0xf1, 0xad, 0xe9, 0x87, 0xfc, 0x12, 0xa4, 0xf8, 0x9e, 0x3e, 0x92, 0x20, 0x76, 0x13, 0x1f, 0xd2, - 0x7a, 0x72, 0x0a, 0xf9, 0x89, 0x96, 0x20, 0x41, 0x1b, 0xcf, 0x6f, 0x40, 0xce, 0x2d, 0x0d, 0xb4, - 0x7e, 0x89, 0x36, 0x52, 0x61, 0x68, 0xf2, 0x75, 0x48, 0xaf, 0x58, 0x44, 0xb3, 0xc3, 0xdc, 0x32, - 0x8c, 0x1b, 0x6d, 0x73, 0xb7, 0xc7, 0xf5, 0x4a, 0x61, 0x1f, 0xe8, 0x24, 0x24, 0xd9, 0xc5, 0x31, - 0x7e, 0x20, 0x89, 0x7f, 0xc9, 0x55, 0x48, 0x51, 0xde, 0x9b, 0x5d, 0xe2, 0x86, 0x78, 0x67, 0xe9, - 0x33, 0xfc, 0x1a, 0x31, 0x67, 0x1f, 0xf5, 0x1b, 0x8b, 0x20, 0xde, 0xd2, 0x5c, 0x8d, 0xf7, 0x9b, - 0xfe, 0x96, 0x3f, 0x08, 0x69, 0xce, 0xc4, 0x41, 0x17, 0x21, 0x66, 0x75, 0x1d, 0x7e, 0xa4, 0xa8, - 0x34, 0xaa, 0x2b, 0x9b, 0xdd, 0x4a, 0x9c, 0xe8, 0x92, 0x42, 0x90, 0x2b, 0x1b, 0x23, 0xd5, 0xe2, - 0x99, 0x90, 0x5a, 0x74, 0xb0, 0xbb, 0xb3, 0xeb, 0xfa, 0x3f, 0xd8, 0x70, 0x0e, 0xa8, 0x82, 0xa7, - 0x28, 0x77, 0xa3, 0x30, 0x1f, 0x28, 0xbd, 0x85, 0x6d, 0xc7, 0xb0, 0x4c, 0xa6, 0x4d, 0x5c, 0x53, - 0x50, 0xa0, 0x81, 0xbc, 0x7c, 0x84, 0xaa, 0xbc, 0x00, 0xb1, 0x72, 0xb7, 0x8b, 0x4a, 0x90, 0xa6, - 0xdf, 0xba, 0xc5, 0x74, 0x25, 0xae, 0x78, 0xdf, 0xa4, 0xcc, 0xb1, 0x76, 0xdd, 0xdb, 0x9a, 0xed, - 0xdd, 0xab, 0x16, 0xdf, 0xf2, 0xf3, 0x90, 0xa9, 0x5a, 0xa6, 0x83, 0x4d, 0xa7, 0x47, 0xfd, 0xeb, - 0x9d, 0xb6, 0xa5, 0xdf, 0xe4, 0x1c, 0xd8, 0x07, 0x11, 0xb6, 0xd6, 0xed, 0x52, 0xca, 0xb8, 0x42, - 0x7e, 0xb2, 0x99, 0x5d, 0xd9, 0x1c, 0x29, 0x9e, 0x4b, 0xc7, 0x13, 0x0f, 0xef, 0xa0, 0xef, 0x28, - 0x47, 0xe0, 0xbe, 0xc1, 0x89, 0x74, 0x13, 0x1f, 0x3a, 0xc7, 0x9d, 0x47, 0xaf, 0x42, 0x66, 0x8b, - 0x3e, 0x79, 0xf2, 0x12, 0x3e, 0x44, 0x25, 0x48, 0xe1, 0xd6, 0xc5, 0x4b, 0x97, 0x9e, 0x7a, 0x9e, - 0x69, 0xf9, 0xb5, 0x29, 0x45, 0x00, 0xd0, 0x3c, 0x64, 0x1c, 0xac, 0x77, 0x2f, 0x5e, 0xba, 0x7c, - 0xf3, 0x29, 0xa6, 0x56, 0xd7, 0xa6, 0x14, 0x1f, 0xb4, 0x9c, 0x26, 0x3d, 0xfe, 0xfc, 0xa7, 0x16, - 0x22, 0x95, 0x04, 0xc4, 0x9c, 0x5e, 0xe7, 0x7d, 0xd3, 0x8d, 0xdf, 0x4f, 0xc2, 0x62, 0xa0, 0x94, - 0x2d, 0x58, 0xb7, 0xb4, 0xb6, 0xd1, 0xd2, 0xfc, 0x87, 0x6a, 0xa4, 0x40, 0xff, 0x29, 0xc6, 0x88, - 0x95, 0xe8, 0x48, 0x29, 0xca, 0x3f, 0x19, 0x81, 0xdc, 0x0d, 0xc1, 0xb9, 0x81, 0x5d, 0x74, 0x05, - 0xc0, 0xab, 0x49, 0x4c, 0x95, 0x33, 0x4b, 0xfd, 0x75, 0x2d, 0x79, 0x34, 0x4a, 0x00, 0x1d, 0x3d, - 0x4b, 0x15, 0xb0, 0x6b, 0x39, 0xfc, 0x8e, 0xed, 0x18, 0x52, 0x0f, 0x19, 0x3d, 0x0e, 0x88, 0x5a, - 0x35, 0xf5, 0x96, 0xe5, 0x1a, 0xe6, 0x9e, 0xda, 0xb5, 0x6e, 0xf3, 0x97, 0x0b, 0x62, 0x8a, 0x44, - 0x4b, 0x6e, 0xd0, 0x82, 0x2d, 0x02, 0x27, 0x8d, 0xce, 0x78, 0x5c, 0x48, 0xa8, 0xa8, 0xb5, 0x5a, - 0x36, 0x76, 0x1c, 0x6e, 0xb8, 0xc4, 0x27, 0xba, 0x02, 0xa9, 0x6e, 0x6f, 0x47, 0x15, 0x56, 0x22, - 0x7b, 0xf1, 0xbe, 0x61, 0x73, 0x5e, 0xe8, 0x06, 0x9f, 0xf5, 0xc9, 0x6e, 0x6f, 0x87, 0x68, 0xca, - 0x03, 0x90, 0x1b, 0xd2, 0x98, 0xec, 0x2d, 0xbf, 0x1d, 0xf4, 0x95, 0x1d, 0xde, 0x03, 0xb5, 0x6b, - 0x1b, 0x96, 0x6d, 0xb8, 0x87, 0xf4, 0x28, 0x60, 0x4c, 0x91, 0x44, 0xc1, 0x16, 0x87, 0xcb, 0x37, - 0xa1, 0xd8, 0xa0, 0x21, 0x84, 0xdf, 0xf2, 0x4b, 0x7e, 0xfb, 0x22, 0xe3, 0xdb, 0x37, 0xb2, 0x65, - 0xd1, 0x81, 0x96, 0x9d, 0xff, 0x0f, 0x11, 0xc8, 0x56, 0xc8, 0xc4, 0xad, 0xaf, 0x5c, 0x6d, 0x6b, - 0x7b, 0xe8, 0x29, 0x38, 0x51, 0x59, 0xdb, 0xac, 0xbe, 0xa4, 0xd6, 0x57, 0xd4, 0xab, 0x6b, 0xe5, - 0x55, 0xff, 0xec, 0x71, 0xe9, 0xe4, 0x9d, 0xbb, 0x8b, 0x28, 0x80, 0xbb, 0x6d, 0xd2, 0x38, 0x17, - 0x5d, 0x80, 0xd9, 0x30, 0x49, 0xb9, 0xd2, 0xa8, 0x6d, 0x34, 0xa5, 0x48, 0xe9, 0xc4, 0x9d, 0xbb, - 0x8b, 0xd3, 0x01, 0x8a, 0xf2, 0x8e, 0x83, 0x4d, 0x77, 0x90, 0xa0, 0xba, 0xb9, 0xbe, 0x5e, 0x6f, - 0x4a, 0xd1, 0x01, 0x82, 0xaa, 0xd5, 0xe9, 0x18, 0x2e, 0x7a, 0x14, 0xa6, 0xc3, 0x04, 0x1b, 0xf5, - 0x35, 0x29, 0x56, 0x42, 0x77, 0xee, 0x2e, 0x16, 0x02, 0xd8, 0x1b, 0x46, 0xbb, 0x94, 0xfe, 0xe8, - 0x0f, 0xce, 0x4f, 0x7d, 0xfa, 0x6f, 0xcd, 0x47, 0x2a, 0xeb, 0x23, 0xe7, 0xdc, 0xd3, 0xc7, 0x9b, - 0x73, 0xe1, 0x75, 0xfb, 0x4b, 0xf7, 0x85, 0xcc, 0x0d, 0xf7, 0x11, 0x03, 0xc6, 0x78, 0xd2, 0xe9, - 0x36, 0x2e, 0xef, 0x51, 0x3a, 0xda, 0x3d, 0x28, 0x8d, 0x59, 0x14, 0x4a, 0x63, 0x0d, 0x83, 0xfc, - 0x3c, 0xe4, 0xb7, 0x34, 0xdb, 0x6d, 0x60, 0xf7, 0x1a, 0xd6, 0x5a, 0xd8, 0x0e, 0xfb, 0x0f, 0x79, - 0xe1, 0x3f, 0x20, 0x88, 0x53, 0x27, 0x81, 0xad, 0x9f, 0xf4, 0xb7, 0xbc, 0x0f, 0x71, 0x7a, 0xca, - 0xd9, 0xf3, 0x2d, 0x38, 0x05, 0xf3, 0x2d, 0xc8, 0xca, 0x70, 0xe8, 0x62, 0x47, 0xa4, 0xe6, 0xe8, - 0x07, 0x7a, 0x46, 0x78, 0x08, 0xb1, 0xa3, 0x3d, 0x04, 0x3e, 0xbd, 0xb8, 0x9f, 0xd0, 0x86, 0x14, - 0x1f, 0x62, 0xaf, 0x21, 0x11, 0xbf, 0x21, 0x68, 0x1d, 0x8a, 0x5d, 0xcd, 0x76, 0xe9, 0xad, 0xc7, - 0x7d, 0xda, 0x0b, 0x3e, 0x83, 0x17, 0x06, 0xed, 0x49, 0xa8, 0xb3, 0xbc, 0x96, 0x7c, 0x37, 0x08, - 0x94, 0xff, 0x4b, 0x1c, 0x92, 0x5c, 0x18, 0x2f, 0x40, 0x8a, 0x8b, 0x95, 0xcf, 0xb9, 0xfb, 0x97, - 0x06, 0x97, 0xd9, 0x25, 0x6f, 0x39, 0xe4, 0xfc, 0x04, 0x0d, 0x7a, 0x04, 0xd2, 0xfa, 0xbe, 0x66, - 0x98, 0xaa, 0xd1, 0xe2, 0xce, 0x71, 0xf6, 0x9d, 0xb7, 0x17, 0x52, 0x55, 0x02, 0xab, 0xaf, 0x28, - 0x29, 0x5a, 0x58, 0x6f, 0x11, 0x9f, 0x66, 0x1f, 0x1b, 0x7b, 0xfb, 0x2e, 0xb7, 0x1b, 0xfc, 0x0b, - 0x3d, 0x07, 0x71, 0xa2, 0x10, 0xfc, 0x4e, 0x7c, 0x69, 0x20, 0xea, 0xf1, 0xd2, 0x52, 0x95, 0x34, - 0xa9, 0xf8, 0x63, 0xff, 0x79, 0x21, 0xa2, 0x50, 0x0a, 0x54, 0x85, 0x7c, 0x5b, 0x73, 0x5c, 0x95, - 0xae, 0xc7, 0xa4, 0xfa, 0x04, 0x65, 0x71, 0x7a, 0x50, 0x20, 0x5c, 0xb0, 0xbc, 0xe9, 0x59, 0x42, - 0xc5, 0x40, 0x2d, 0x74, 0x0e, 0x24, 0xca, 0x44, 0xa7, 0x33, 0x90, 0x79, 0x89, 0x49, 0x2a, 0xf7, - 0x02, 0x81, 0xb3, 0x89, 0x49, 0x7d, 0xc5, 0x33, 0x90, 0xa1, 0xb7, 0x70, 0x29, 0x0a, 0x3b, 0x5a, - 0x9f, 0x26, 0x00, 0x5a, 0x78, 0x16, 0x8a, 0xbe, 0xd5, 0x67, 0x28, 0x69, 0xc6, 0xc5, 0x07, 0x53, - 0xc4, 0x27, 0x61, 0xd6, 0xc4, 0x07, 0xf4, 0xb0, 0x7f, 0x08, 0x3b, 0x43, 0xb1, 0x11, 0x29, 0xbb, - 0x11, 0xa6, 0x78, 0x18, 0x0a, 0xba, 0x10, 0x3e, 0xc3, 0x05, 0x8a, 0x9b, 0xf7, 0xa0, 0x14, 0xed, - 0x34, 0xa4, 0xb5, 0x6e, 0x97, 0x21, 0x64, 0xb9, 0xd5, 0xef, 0x76, 0x69, 0xd1, 0x79, 0x98, 0xa6, - 0x7d, 0xb4, 0xb1, 0xd3, 0x6b, 0xbb, 0x9c, 0x49, 0x8e, 0xe2, 0x14, 0x49, 0x81, 0xc2, 0xe0, 0x14, - 0xf7, 0x41, 0xc8, 0xe3, 0x5b, 0x46, 0x0b, 0x9b, 0x3a, 0x66, 0x78, 0x79, 0x8a, 0x97, 0x13, 0x40, - 0x8a, 0xf4, 0x28, 0x78, 0xd6, 0x5c, 0x15, 0x2b, 0x4d, 0x81, 0xf1, 0x13, 0xf0, 0x32, 0x03, 0xcb, - 0x73, 0x10, 0x5f, 0xd1, 0x5c, 0x8d, 0xb8, 0x4b, 0xee, 0x01, 0x5b, 0x3e, 0x73, 0x0a, 0xf9, 0x29, - 0xff, 0x4c, 0x0c, 0xe2, 0x37, 0x2c, 0x17, 0xa3, 0xa7, 0x03, 0xae, 0x6c, 0x61, 0x98, 0x3e, 0x37, - 0x8c, 0x3d, 0x13, 0xb7, 0xd6, 0x9d, 0xbd, 0xc0, 0x93, 0x39, 0xbe, 0x3a, 0x45, 0x43, 0xea, 0x34, - 0x0b, 0x09, 0xdb, 0xea, 0x99, 0x2d, 0x71, 0x28, 0x9d, 0x7e, 0xa0, 0x1a, 0xa4, 0x3d, 0x2d, 0x89, - 0x8f, 0xd3, 0x92, 0x22, 0xd1, 0x12, 0xa2, 0xc3, 0x1c, 0xa0, 0xa4, 0x76, 0xb8, 0xb2, 0x54, 0x20, - 0xe3, 0x19, 0x2f, 0xae, 0x6d, 0x93, 0x29, 0xac, 0x4f, 0x46, 0x96, 0x48, 0x6f, 0xec, 0x3d, 0xe1, - 0x31, 0x8d, 0x93, 0xbc, 0x02, 0x2e, 0xbd, 0x90, 0x5a, 0xf1, 0xe7, 0x7b, 0x52, 0xb4, 0x5f, 0xbe, - 0x5a, 0xb1, 0x27, 0x7c, 0xee, 0x83, 0x8c, 0x63, 0xec, 0x99, 0x9a, 0xdb, 0xb3, 0x31, 0xd7, 0x3c, - 0x1f, 0x40, 0x4a, 0xfd, 0x0b, 0x1a, 0x4c, 0xd3, 0x02, 0xaf, 0x8a, 0x5d, 0x80, 0x19, 0xff, 0x3d, - 0x2f, 0x9f, 0x0b, 0xd3, 0x32, 0xe4, 0x15, 0x35, 0x44, 0x89, 0xfc, 0x8b, 0x11, 0x48, 0xf2, 0x15, - 0xcb, 0x1f, 0x86, 0xc8, 0xf0, 0x61, 0x88, 0x8e, 0x1a, 0x86, 0xd8, 0xbd, 0x0f, 0x43, 0x19, 0xc0, - 0x6b, 0xa6, 0xc3, 0x1f, 0x69, 0x19, 0xe2, 0x56, 0xb1, 0x26, 0x36, 0x8c, 0x3d, 0x3e, 0xef, 0x03, - 0x44, 0xf2, 0x6f, 0x44, 0x88, 0x87, 0xcf, 0xcb, 0x51, 0x19, 0xf2, 0xa2, 0x5d, 0xea, 0x6e, 0x5b, - 0xdb, 0xe3, 0xaa, 0x78, 0xff, 0xc8, 0xc6, 0x91, 0x55, 0x58, 0xc9, 0xf2, 0xf6, 0x50, 0x7f, 0x62, - 0xe8, 0xb0, 0x46, 0x47, 0x0c, 0x6b, 0x48, 0x8f, 0x62, 0xf7, 0xa6, 0x47, 0xa1, 0x11, 0x8f, 0xf7, - 0x8d, 0xb8, 0xfc, 0x5b, 0x11, 0xfe, 0x9a, 0x58, 0x8b, 0xdd, 0x2e, 0xf9, 0xd3, 0x1a, 0xaa, 0xd7, - 0xb9, 0x6e, 0xb5, 0x70, 0x4b, 0x1d, 0x18, 0xb3, 0x07, 0x07, 0x39, 0x86, 0xdb, 0xec, 0x8f, 0x1d, - 0x12, 0x5c, 0x1a, 0xfe, 0x18, 0x7e, 0x26, 0x0a, 0xd3, 0x03, 0xf8, 0x7f, 0xfe, 0xc6, 0x32, 0x3c, - 0x7b, 0x13, 0x13, 0xce, 0xde, 0xe4, 0xc8, 0xd9, 0xfb, 0x53, 0x51, 0x9a, 0x00, 0xe8, 0x5a, 0x8e, - 0xd6, 0xfe, 0x4a, 0xd8, 0xde, 0x33, 0x90, 0xe9, 0x5a, 0x6d, 0x95, 0x95, 0xb0, 0x6b, 0x41, 0xe9, - 0xae, 0xd5, 0x56, 0x06, 0xd4, 0x2c, 0xf1, 0x1e, 0x19, 0xe6, 0xe4, 0x7b, 0x30, 0x08, 0xa9, 0xfe, - 0x09, 0x65, 0x43, 0x8e, 0x89, 0x82, 0x7b, 0x4d, 0x4f, 0x12, 0x19, 0x50, 0x37, 0x2c, 0x32, 0xe8, - 0xe5, 0xb1, 0x66, 0x33, 0x4c, 0x85, 0xe3, 0x11, 0x0a, 0xe6, 0x64, 0x0c, 0xcb, 0x1c, 0x05, 0x2d, - 0x96, 0xc2, 0xf1, 0xe4, 0xef, 0x8c, 0x00, 0xac, 0x11, 0xc9, 0xd2, 0xfe, 0x12, 0x7f, 0xc7, 0xa1, - 0x4d, 0x50, 0x43, 0x35, 0xcf, 0x8f, 0x1a, 0x34, 0x5e, 0x7f, 0xce, 0x09, 0xb6, 0xbb, 0x0a, 0x79, - 0x5f, 0xb7, 0x1d, 0x2c, 0x1a, 0x33, 0x7f, 0x44, 0x54, 0xda, 0xc0, 0xae, 0x92, 0xbb, 0x15, 0xf8, - 0x92, 0xff, 0x49, 0x04, 0x32, 0xb4, 0x4d, 0xeb, 0xd8, 0xd5, 0x42, 0x63, 0x18, 0xb9, 0xf7, 0x31, - 0xbc, 0x1f, 0x80, 0xb1, 0x71, 0x8c, 0x37, 0x31, 0xd7, 0xac, 0x0c, 0x85, 0x34, 0x8c, 0x37, 0x31, - 0xba, 0xec, 0x09, 0x3c, 0x76, 0xb4, 0xc0, 0x45, 0xd4, 0xca, 0xc5, 0x7e, 0x0a, 0x52, 0xf4, 0xbd, - 0xcb, 0x03, 0x87, 0x07, 0xa2, 0x49, 0xb3, 0xd7, 0x69, 0x1e, 0x38, 0xf2, 0x1b, 0x90, 0x6a, 0x1e, - 0xb0, 0x7c, 0xe2, 0x19, 0xc8, 0xd8, 0x96, 0xc5, 0xbd, 0x3f, 0xe6, 0x75, 0xa7, 0x09, 0x80, 0x3a, - 0x3b, 0x22, 0x87, 0x16, 0xf5, 0x73, 0x68, 0x7e, 0x12, 0x30, 0x36, 0x51, 0x12, 0x90, 0x44, 0x9f, - 0xf9, 0xd0, 0x4c, 0x42, 0x8f, 0xc3, 0xa9, 0x46, 0x7d, 0x75, 0xa3, 0xb6, 0xa2, 0xae, 0x37, 0x56, - 0xfb, 0xae, 0xfc, 0x97, 0x8a, 0x77, 0xee, 0x2e, 0x66, 0x79, 0xd8, 0x39, 0x0a, 0x7b, 0x4b, 0xa9, - 0xdd, 0xd8, 0x6c, 0xd6, 0xa4, 0x08, 0xc3, 0xde, 0xb2, 0xf1, 0x2d, 0xcb, 0x65, 0x0f, 0xca, 0x3e, - 0x09, 0xa7, 0x87, 0x60, 0x7b, 0xc1, 0xe7, 0xf4, 0x9d, 0xbb, 0x8b, 0xf9, 0x2d, 0x1b, 0x33, 0x2d, - 0xa3, 0x14, 0x4b, 0x30, 0x37, 0x48, 0xb1, 0xb9, 0xb5, 0xd9, 0x28, 0xaf, 0x49, 0x8b, 0x25, 0xe9, - 0xce, 0xdd, 0xc5, 0x9c, 0x30, 0x19, 0x04, 0xff, 0xfd, 0x8f, 0x3e, 0xbf, 0x31, 0x1d, 0xca, 0x1a, - 0xb3, 0xb8, 0xae, 0xab, 0xd9, 0x5a, 0xe7, 0xb8, 0xe1, 0xe7, 0x98, 0xc3, 0x08, 0xf2, 0x4f, 0x46, - 0xa1, 0xe8, 0x05, 0x37, 0x5b, 0xb4, 0x06, 0xf4, 0x74, 0x30, 0xe3, 0x97, 0x1d, 0xb9, 0x76, 0x30, - 0x6c, 0x91, 0x10, 0xfc, 0x00, 0xa4, 0x85, 0x93, 0xcc, 0x27, 0xd5, 0xe2, 0x90, 0xf5, 0x8d, 0x63, - 0x70, 0x52, 0x8f, 0x02, 0xbd, 0x08, 0x19, 0x6f, 0x8a, 0x79, 0x8f, 0xae, 0x8d, 0x9e, 0x93, 0x9c, - 0xde, 0xa7, 0x41, 0xcf, 0xfb, 0x61, 0x5c, 0x7c, 0x54, 0x60, 0x78, 0x83, 0x21, 0x70, 0x62, 0x2f, - 0x84, 0x7b, 0x12, 0xe2, 0xda, 0x8e, 0x6e, 0x70, 0x03, 0x7c, 0xdf, 0x20, 0x5d, 0xb9, 0x52, 0xad, - 0x73, 0x22, 0x8a, 0x29, 0xd7, 0x79, 0x32, 0x85, 0xcb, 0x8b, 0x3e, 0x71, 0x73, 0xa0, 0xb2, 0x58, - 0x98, 0x79, 0x17, 0xe9, 0x8e, 0x76, 0x50, 0xa1, 0xe1, 0xf0, 0x29, 0x48, 0x91, 0xc2, 0x3d, 0xfe, - 0x88, 0x42, 0x4c, 0x49, 0x76, 0xb4, 0x83, 0x55, 0xcd, 0xb9, 0x1e, 0x4f, 0xc7, 0xa4, 0xb8, 0xfc, - 0xa3, 0xc4, 0x53, 0x09, 0x49, 0x05, 0x3d, 0x06, 0x88, 0x50, 0x68, 0x7b, 0x58, 0x25, 0x53, 0x97, - 0x8a, 0x57, 0xf0, 0x2d, 0x76, 0xb4, 0x83, 0xf2, 0x1e, 0xde, 0xe8, 0x75, 0x68, 0x03, 0x1c, 0xb4, - 0x0e, 0x92, 0x40, 0x16, 0x23, 0xcb, 0xc5, 0x7f, 0x7a, 0xf0, 0xd1, 0x56, 0x8e, 0xc0, 0x16, 0x80, - 0x8f, 0x93, 0x05, 0xa0, 0xc0, 0xf8, 0x79, 0xc7, 0x4f, 0x42, 0x5d, 0x89, 0x85, 0xbb, 0x22, 0xbf, - 0x08, 0xc5, 0xbe, 0x11, 0x40, 0x32, 0xe4, 0x79, 0xc6, 0x8a, 0x6e, 0xed, 0xb3, 0x08, 0x27, 0xa3, - 0x64, 0x59, 0x66, 0x8a, 0x1e, 0x75, 0x58, 0x4e, 0xff, 0xec, 0x27, 0x17, 0x22, 0x74, 0xdb, 0xe7, - 0x31, 0xc8, 0x87, 0xc6, 0x40, 0x64, 0x91, 0x23, 0x7e, 0x16, 0xd9, 0x47, 0x7e, 0x1d, 0x72, 0xc4, - 0x00, 0xe1, 0x16, 0xc7, 0x7d, 0x04, 0x8a, 0xcc, 0x40, 0xf6, 0xcb, 0x9a, 0x39, 0x3c, 0xeb, 0x42, - 0xe0, 0xb2, 0xf0, 0x80, 0xc2, 0x62, 0xcf, 0x0a, 0xac, 0x55, 0xcd, 0x91, 0x37, 0x01, 0xfc, 0x41, - 0x45, 0x65, 0xb8, 0x9f, 0x18, 0x8f, 0xe0, 0x51, 0x54, 0xfe, 0xdc, 0x56, 0xc8, 0x63, 0x2c, 0x11, - 0x24, 0xff, 0xb8, 0x29, 0x7b, 0x74, 0xeb, 0x1a, 0xc5, 0xa8, 0xbc, 0xfc, 0xe9, 0x77, 0xe6, 0x23, - 0xef, 0x8f, 0x2d, 0xf8, 0x8f, 0xaf, 0xc1, 0x99, 0x40, 0x21, 0x51, 0xc0, 0x50, 0x22, 0xaa, 0x18, - 0xd0, 0x57, 0x52, 0x38, 0x2e, 0xa1, 0x74, 0x64, 0xfe, 0xb7, 0x74, 0xb4, 0xd9, 0x19, 0x9f, 0x6d, - 0x1a, 0x9f, 0xef, 0x1a, 0x9e, 0x94, 0xff, 0xc7, 0x19, 0x48, 0x29, 0xf8, 0xc3, 0x3d, 0xec, 0xb8, - 0xe8, 0x22, 0xc4, 0xb1, 0xbe, 0x6f, 0x0d, 0xcb, 0x81, 0x92, 0x0e, 0x2e, 0x71, 0xbc, 0x9a, 0xbe, - 0x6f, 0x5d, 0x9b, 0x52, 0x28, 0x2e, 0xba, 0x04, 0x89, 0xdd, 0x76, 0x8f, 0xa7, 0xaf, 0xfa, 0x6c, - 0x56, 0x90, 0xe8, 0x2a, 0x41, 0xba, 0x36, 0xa5, 0x30, 0x6c, 0x52, 0x15, 0x7d, 0x6d, 0x3b, 0x76, - 0x74, 0x55, 0x75, 0x73, 0x97, 0x56, 0x45, 0x70, 0x51, 0x05, 0xc0, 0x30, 0x0d, 0x57, 0xa5, 0xa9, - 0x1d, 0x6e, 0x35, 0x1e, 0x18, 0x4d, 0x69, 0xb8, 0x34, 0x19, 0x74, 0x6d, 0x4a, 0xc9, 0x18, 0xe2, - 0x83, 0x34, 0xf7, 0xc3, 0x3d, 0x6c, 0x1f, 0x72, 0x6f, 0x6d, 0x64, 0x73, 0x5f, 0x26, 0x48, 0xa4, - 0xb9, 0x14, 0x9b, 0x18, 0x59, 0xf6, 0x70, 0x9f, 0x7b, 0xc0, 0x9f, 0xa3, 0x5d, 0x18, 0x45, 0x49, - 0x5f, 0xef, 0x6b, 0x1e, 0x5c, 0x9b, 0x52, 0x52, 0x3a, 0xfb, 0x89, 0x9e, 0xf3, 0x5c, 0xb0, 0xec, - 0xa0, 0xd7, 0x13, 0xa2, 0x65, 0x69, 0x9f, 0x29, 0xe1, 0x8a, 0xa1, 0x0d, 0x28, 0xb4, 0x0d, 0xc7, - 0x55, 0x1d, 0x53, 0xeb, 0x3a, 0xfb, 0x96, 0xeb, 0xd0, 0xfc, 0x49, 0xf6, 0xe2, 0xc3, 0xa3, 0x38, - 0xac, 0x19, 0x8e, 0xdb, 0x10, 0xc8, 0xd7, 0xa6, 0x94, 0x7c, 0x3b, 0x08, 0x20, 0xfc, 0xac, 0xdd, - 0x5d, 0x6c, 0x7b, 0x0c, 0x69, 0x9e, 0xe5, 0x08, 0x7e, 0x9b, 0x04, 0x5b, 0xd0, 0x13, 0x7e, 0x56, - 0x10, 0x80, 0xbe, 0x0a, 0x66, 0xda, 0x96, 0xd6, 0xf2, 0xd8, 0xa9, 0xfa, 0x7e, 0xcf, 0xbc, 0x49, - 0x93, 0x32, 0xd9, 0x8b, 0x8f, 0x8e, 0x6c, 0xa4, 0xa5, 0xb5, 0x04, 0x8b, 0x2a, 0x21, 0xb8, 0x36, - 0xa5, 0x4c, 0xb7, 0xfb, 0x81, 0xe8, 0x43, 0x30, 0xab, 0x75, 0xbb, 0xed, 0xc3, 0x7e, 0xee, 0x45, - 0xca, 0xfd, 0xfc, 0x28, 0xee, 0x65, 0x42, 0xd3, 0xcf, 0x1e, 0x69, 0x03, 0x50, 0xd4, 0x04, 0xa9, - 0x6b, 0x63, 0x7a, 0x9b, 0xab, 0xcb, 0xbd, 0x0c, 0xfa, 0xd6, 0x55, 0xf6, 0xe2, 0xd9, 0x51, 0xbc, - 0xb7, 0x18, 0xbe, 0x70, 0x4a, 0xae, 0x4d, 0x29, 0xc5, 0x6e, 0x18, 0xc4, 0xb8, 0x5a, 0x3a, 0xa6, - 0x4f, 0xf1, 0x71, 0xae, 0xd3, 0xe3, 0xb8, 0x52, 0xfc, 0x30, 0xd7, 0x10, 0x08, 0xd5, 0x20, 0xcb, - 0x42, 0x51, 0x95, 0x18, 0x43, 0xfa, 0x42, 0x56, 0xf6, 0xa2, 0x3c, 0x72, 0x86, 0x52, 0xd4, 0x1b, - 0x96, 0x8b, 0xaf, 0x4d, 0x29, 0x80, 0xbd, 0x2f, 0xa4, 0xc1, 0x09, 0xfa, 0x58, 0xd8, 0xa1, 0x1a, - 0x36, 0xbc, 0x73, 0x33, 0x94, 0xe1, 0x63, 0xa3, 0x18, 0xde, 0xa0, 0x44, 0x37, 0x82, 0x76, 0xf8, - 0xda, 0x94, 0x32, 0x73, 0x6b, 0x10, 0x4c, 0x54, 0x6c, 0xd7, 0x30, 0xb5, 0xb6, 0xf1, 0x26, 0x66, - 0x4b, 0x28, 0x7d, 0x26, 0xf3, 0x08, 0x15, 0xbb, 0xca, 0xb1, 0xe9, 0xc2, 0x4a, 0x54, 0x6c, 0x37, - 0x08, 0xa8, 0xa4, 0xf8, 0x39, 0x54, 0xef, 0xd9, 0xb7, 0x94, 0x94, 0x66, 0x4f, 0xbd, 0x5d, 0x8f, - 0xa7, 0x41, 0xca, 0xca, 0x67, 0x21, 0x1b, 0x30, 0x4c, 0x68, 0x0e, 0x52, 0xfc, 0xa4, 0x8e, 0x38, - 0xd1, 0xca, 0x3f, 0xe5, 0x02, 0xe4, 0x82, 0xc6, 0x48, 0xfe, 0x58, 0xc4, 0xa3, 0xa4, 0xef, 0x5d, - 0xcc, 0x85, 0x33, 0xd2, 0x19, 0xdf, 0x53, 0x79, 0x50, 0x2c, 0x6d, 0xa2, 0x9c, 0x6d, 0xbf, 0xe6, - 0x28, 0x90, 0xaf, 0xac, 0x68, 0x01, 0xb2, 0xdd, 0x8b, 0x5d, 0x0f, 0x25, 0x46, 0x51, 0xa0, 0x7b, - 0xb1, 0x2b, 0x10, 0x1e, 0x80, 0x1c, 0xe9, 0xb7, 0x1a, 0xf4, 0x97, 0x32, 0x4a, 0x96, 0xc0, 0x38, - 0x8a, 0xfc, 0xaf, 0xa2, 0x20, 0xf5, 0x1b, 0x30, 0x2f, 0x55, 0x1d, 0x39, 0x76, 0xaa, 0xfa, 0x74, - 0x7f, 0x92, 0xdc, 0xcf, 0x8b, 0xaf, 0x81, 0xe4, 0xa7, 0x77, 0xd9, 0x52, 0x33, 0xda, 0xff, 0xeb, - 0x73, 0x54, 0x95, 0xa2, 0xde, 0xe7, 0xb9, 0x5e, 0x0d, 0x6d, 0x56, 0x8a, 0x3f, 0x47, 0xd1, 0x3f, - 0xe0, 0x9e, 0x13, 0xb3, 0xdd, 0x6d, 0x69, 0x2e, 0x16, 0xf9, 0xb1, 0xc0, 0xbe, 0xe5, 0x23, 0x50, - 0xd4, 0xba, 0x5d, 0xd5, 0x71, 0x35, 0x17, 0x73, 0x5f, 0x83, 0x65, 0x1e, 0xf2, 0x5a, 0xb7, 0xdb, - 0x20, 0x50, 0xe6, 0x6b, 0x3c, 0x0c, 0x05, 0x62, 0xd3, 0x0d, 0xad, 0x2d, 0x5c, 0x85, 0x24, 0x73, - 0x49, 0x38, 0x94, 0x79, 0x07, 0x72, 0xcb, 0x1b, 0x71, 0x6a, 0xcf, 0xbd, 0x98, 0x2a, 0x12, 0x88, - 0xa9, 0x10, 0x7f, 0x87, 0x84, 0xc9, 0x47, 0xbc, 0xdd, 0x32, 0x7c, 0xd3, 0x60, 0x96, 0xc6, 0x5f, - 0xb7, 0x58, 0xb2, 0x24, 0xad, 0xb0, 0x0f, 0x59, 0x81, 0x42, 0xd8, 0xf6, 0xa3, 0x02, 0x44, 0xdd, - 0x03, 0x5e, 0x4b, 0xd4, 0x3d, 0x20, 0x9e, 0xae, 0xf7, 0x7a, 0x6f, 0x61, 0xc8, 0x6a, 0xc7, 0xe9, - 0xfc, 0x5c, 0x87, 0x5c, 0x84, 0x7c, 0x68, 0x4d, 0x90, 0x4f, 0xc2, 0xec, 0x30, 0x13, 0x2f, 0xef, - 0x7b, 0xf0, 0x90, 0xa9, 0x46, 0x97, 0x20, 0xed, 0xd9, 0xf8, 0x21, 0xd1, 0x31, 0xad, 0x56, 0x20, - 0x2b, 0x1e, 0x6a, 0x28, 0x9d, 0x1f, 0x0d, 0xa5, 0xf3, 0xe5, 0xaf, 0x85, 0xb9, 0x51, 0xf6, 0xbb, - 0x2f, 0xc9, 0x17, 0xf7, 0x04, 0x76, 0x12, 0x92, 0xfc, 0x99, 0xcc, 0x28, 0xdd, 0xc0, 0xe2, 0x5f, - 0x44, 0x90, 0xcc, 0x96, 0xc7, 0xd8, 0xbe, 0x16, 0xfd, 0x90, 0x55, 0x38, 0x3d, 0xd2, 0x86, 0x8f, - 0xde, 0x0a, 0x63, 0x8c, 0xf8, 0x56, 0x98, 0x2e, 0x9a, 0xe3, 0xd0, 0xbe, 0x8a, 0x83, 0x2c, 0xec, - 0x4b, 0xfe, 0x78, 0x0c, 0x4e, 0x0e, 0xb7, 0xe4, 0x68, 0x11, 0x72, 0xc4, 0x6f, 0x75, 0xc3, 0x2e, - 0x2e, 0x74, 0xb4, 0x83, 0x26, 0xf7, 0x6f, 0xf9, 0x56, 0x42, 0xd4, 0xdb, 0x4a, 0x40, 0xdb, 0x30, - 0xdd, 0xb6, 0x74, 0xad, 0xad, 0x06, 0xb6, 0x72, 0xf8, 0x24, 0x7a, 0x70, 0x40, 0xd8, 0xe1, 0x94, - 0x21, 0x31, 0x38, 0x5c, 0xff, 0x8b, 0x94, 0xc7, 0x9a, 0xb7, 0xeb, 0x83, 0x56, 0x20, 0xdb, 0x31, - 0x9c, 0x1d, 0xbc, 0xaf, 0xdd, 0x32, 0x2c, 0x9b, 0xcf, 0xa6, 0x41, 0xa5, 0x59, 0xf7, 0x71, 0xc4, - 0x0e, 0x53, 0x80, 0x2c, 0x30, 0x24, 0x89, 0xa1, 0x1b, 0x5f, 0xc9, 0x63, 0x5b, 0x93, 0x51, 0x7b, - 0x48, 0xa9, 0x91, 0x7b, 0x48, 0xc3, 0x36, 0x6c, 0xd2, 0xc3, 0x37, 0x6c, 0x3e, 0x1a, 0x1c, 0x9a, - 0xf0, 0xda, 0x37, 0xb0, 0x87, 0x83, 0x1a, 0x30, 0xcb, 0xe9, 0x5b, 0x21, 0xd9, 0x0f, 0x39, 0xea, - 0xc0, 0xe6, 0x57, 0xbf, 0xcc, 0x91, 0x20, 0x1f, 0x2d, 0xf6, 0xd8, 0xbd, 0x89, 0x5d, 0x6c, 0xa2, - 0xc6, 0x03, 0x9b, 0xa8, 0xff, 0x8f, 0x0d, 0xc5, 0x47, 0x62, 0x30, 0x3d, 0xe0, 0x48, 0x0c, 0xdd, - 0x1d, 0x1e, 0x95, 0x91, 0x15, 0x1d, 0x8b, 0x1d, 0xbb, 0x63, 0x7c, 0xac, 0xe3, 0xe3, 0xc7, 0x3a, - 0xf1, 0x1e, 0x8e, 0x75, 0xf2, 0xde, 0xc6, 0xfa, 0x7d, 0x1d, 0x85, 0x4f, 0x44, 0xa0, 0x34, 0xda, - 0xfb, 0x1a, 0x3a, 0x1c, 0xc7, 0xda, 0x40, 0x18, 0xb5, 0xc6, 0x3d, 0x0c, 0x85, 0x3e, 0xdf, 0x90, - 0xa9, 0x72, 0x3e, 0x14, 0x85, 0xcb, 0x5f, 0x1f, 0xf3, 0x16, 0x9e, 0x90, 0x03, 0x37, 0x64, 0xb6, - 0xbe, 0x0c, 0x33, 0x2d, 0xac, 0x1b, 0xad, 0x7b, 0x9d, 0xac, 0xd3, 0x9c, 0xfa, 0xff, 0xcf, 0xd5, - 0x41, 0x2d, 0xf9, 0x0e, 0x80, 0xb4, 0x82, 0x9d, 0x2e, 0xf1, 0xc7, 0x50, 0x05, 0x32, 0xf8, 0x40, - 0xc7, 0x5d, 0xd7, 0x3f, 0x54, 0x31, 0x2c, 0x44, 0x60, 0xd8, 0x35, 0x81, 0x49, 0x02, 0x64, 0x8f, - 0x0c, 0x3d, 0xcd, 0x73, 0x00, 0xa3, 0xc3, 0x79, 0x4e, 0x1e, 0x4c, 0x02, 0x5c, 0x16, 0x49, 0x80, - 0xd8, 0xc8, 0xf8, 0x96, 0x51, 0xf5, 0x65, 0x01, 0x9e, 0xe6, 0x59, 0x80, 0xf8, 0x98, 0xca, 0x42, - 0x69, 0x80, 0x6a, 0x28, 0x0d, 0x90, 0x1c, 0xd3, 0xcd, 0x11, 0x79, 0x80, 0xcb, 0x22, 0x0f, 0x90, - 0x1a, 0xd3, 0xe2, 0xbe, 0x44, 0xc0, 0x0b, 0x81, 0x44, 0x40, 0x66, 0x30, 0xdb, 0x1a, 0x22, 0x1d, - 0x92, 0x09, 0x78, 0xde, 0xcb, 0x04, 0xe4, 0x46, 0x66, 0x11, 0x38, 0x71, 0x7f, 0x2a, 0x60, 0x73, - 0x20, 0x15, 0x90, 0xe7, 0x7f, 0x74, 0x69, 0x14, 0x8b, 0x31, 0xb9, 0x80, 0xcd, 0x81, 0x5c, 0x40, - 0x61, 0x0c, 0xc3, 0x31, 0xc9, 0x80, 0xaf, 0x1e, 0x9e, 0x0c, 0x18, 0x1d, 0xae, 0xf3, 0x66, 0x4e, - 0x96, 0x0d, 0x50, 0x47, 0x64, 0x03, 0xa4, 0x91, 0x91, 0x2b, 0x63, 0x3f, 0x71, 0x3a, 0x60, 0x7b, - 0x48, 0x3a, 0x80, 0x05, 0xee, 0xe7, 0x46, 0x32, 0x9f, 0x20, 0x1f, 0xb0, 0x3d, 0x24, 0x1f, 0x80, - 0xc6, 0xb2, 0x1d, 0x9b, 0x10, 0xb8, 0x1a, 0x4e, 0x08, 0xcc, 0x8c, 0xf0, 0x3a, 0xfd, 0xd9, 0x3e, - 0x22, 0x23, 0xb0, 0x33, 0x2a, 0x23, 0xc0, 0xa2, 0xf6, 0xc7, 0x47, 0x72, 0x3c, 0x46, 0x4a, 0x60, - 0x73, 0x20, 0x25, 0x70, 0x62, 0x8c, 0xa6, 0x4d, 0x9e, 0x13, 0x60, 0x8f, 0xc0, 0xb3, 0xe7, 0xdf, - 0x41, 0xca, 0x5e, 0x8f, 0xa7, 0xb3, 0x52, 0x4e, 0x7e, 0x94, 0x78, 0x30, 0x7d, 0x76, 0x8e, 0xc4, - 0x0a, 0xd8, 0xb6, 0x2d, 0x5b, 0xdc, 0xb1, 0xa0, 0x1f, 0xf2, 0x39, 0x12, 0x23, 0xfa, 0x36, 0xed, - 0x88, 0xfc, 0x01, 0x8d, 0xc9, 0x02, 0x76, 0x4c, 0xfe, 0xd9, 0x88, 0x4f, 0x4b, 0x33, 0x08, 0xc1, - 0xf8, 0x32, 0xc3, 0xe3, 0xcb, 0x40, 0x56, 0x21, 0x1a, 0xce, 0x2a, 0x2c, 0x40, 0x96, 0xc4, 0x5a, - 0x7d, 0x09, 0x03, 0xad, 0xeb, 0x25, 0x0c, 0xc4, 0x01, 0x2a, 0x96, 0x7b, 0xe0, 0xcb, 0x12, 0xdb, - 0x4d, 0x2c, 0x7a, 0x87, 0xc9, 0x58, 0xa8, 0x8b, 0x9e, 0x80, 0x99, 0x00, 0xae, 0x17, 0xc3, 0xb1, - 0xe8, 0x59, 0xf2, 0xb0, 0xcb, 0x3c, 0x98, 0xfb, 0x67, 0x11, 0x5f, 0x42, 0x7e, 0xa6, 0x61, 0x58, - 0x52, 0x20, 0xf2, 0x1e, 0x25, 0x05, 0xa2, 0xf7, 0x9c, 0x14, 0x08, 0xc6, 0xa4, 0xb1, 0x70, 0x4c, - 0xfa, 0x3f, 0x23, 0xfe, 0x98, 0x78, 0x21, 0xbe, 0x6e, 0xb5, 0x30, 0x8f, 0x12, 0xe9, 0x6f, 0xe2, - 0x92, 0xb4, 0xad, 0x3d, 0x1e, 0x0b, 0x92, 0x9f, 0x04, 0xcb, 0x5b, 0x78, 0x32, 0x7c, 0x5d, 0xf1, - 0x02, 0xcc, 0x44, 0xf0, 0x1e, 0x07, 0xbf, 0xdc, 0x90, 0xf4, 0x2f, 0x37, 0x78, 0x17, 0xa3, 0x53, - 0x81, 0x8b, 0xd1, 0xe8, 0x39, 0xc8, 0xd0, 0x64, 0xbf, 0x6a, 0x75, 0xc5, 0x5f, 0x2c, 0x3b, 0x33, - 0xfa, 0x62, 0x83, 0x43, 0x8f, 0x5c, 0xb3, 0xcb, 0x10, 0xbe, 0xc7, 0x91, 0x09, 0x79, 0x1c, 0xf7, - 0x41, 0x86, 0xb4, 0x9e, 0xfd, 0xe5, 0x0d, 0xe0, 0xb7, 0xea, 0x05, 0x40, 0xfe, 0xb1, 0x28, 0x14, - 0xfb, 0x16, 0x9a, 0xa1, 0x7d, 0x1f, 0xb6, 0x8d, 0x3c, 0x99, 0x3c, 0xe6, 0x01, 0xf6, 0x34, 0x47, - 0xbd, 0xad, 0x99, 0x2e, 0x6e, 0x71, 0xa1, 0x04, 0x20, 0xa8, 0x04, 0x69, 0xf2, 0xd5, 0x73, 0x70, - 0x8b, 0x67, 0x5f, 0xbc, 0x6f, 0x74, 0x0d, 0x92, 0xf8, 0x16, 0x7d, 0x79, 0x96, 0xbd, 0xdf, 0x7c, - 0x72, 0x30, 0x1c, 0x26, 0xc5, 0x95, 0x39, 0x32, 0xd8, 0x5f, 0x78, 0x7b, 0x41, 0x62, 0xd8, 0x8f, - 0x7b, 0x97, 0xd9, 0x14, 0x4e, 0x1f, 0x96, 0x42, 0xba, 0x4f, 0x0a, 0x34, 0x0f, 0x98, 0x13, 0xe1, - 0x3d, 0x91, 0x29, 0x3b, 0xe3, 0xad, 0xe4, 0x3b, 0xb8, 0xd3, 0xb5, 0xac, 0xb6, 0xca, 0xe6, 0x78, - 0x19, 0x0a, 0xe1, 0x75, 0x95, 0xfd, 0x55, 0x2c, 0x57, 0x33, 0x4c, 0x35, 0xe4, 0x04, 0xe7, 0x18, - 0x90, 0xcd, 0xa9, 0xeb, 0xf1, 0x74, 0x44, 0x8a, 0x5e, 0x8f, 0xa7, 0xa3, 0x52, 0x4c, 0xde, 0x82, - 0x13, 0x43, 0xd7, 0x55, 0xf4, 0x2c, 0x64, 0xfc, 0x25, 0x99, 0x1d, 0xd3, 0x3f, 0x22, 0xd3, 0xe2, - 0xe3, 0xca, 0xbf, 0x10, 0xf1, 0x59, 0x86, 0x73, 0x37, 0x35, 0x48, 0xb2, 0x33, 0x93, 0xfc, 0x7c, - 0xcc, 0x13, 0x93, 0xad, 0xc8, 0x4b, 0xec, 0x40, 0xa5, 0xc2, 0x89, 0xe5, 0x0f, 0x41, 0x92, 0x41, - 0x50, 0x16, 0x52, 0xfe, 0x1b, 0xd7, 0x00, 0xc9, 0x72, 0xb5, 0x5a, 0xdb, 0x12, 0x0f, 0xd6, 0x56, - 0x36, 0x95, 0xa6, 0x14, 0x25, 0x60, 0xa5, 0x76, 0xbd, 0x56, 0x6d, 0x4a, 0x31, 0x34, 0x0d, 0x79, - 0xf6, 0x5b, 0xbd, 0xba, 0xa9, 0xac, 0x97, 0x9b, 0x52, 0x3c, 0x00, 0x6a, 0xd4, 0x36, 0x56, 0x6a, - 0x8a, 0x94, 0x90, 0x9f, 0x82, 0xd3, 0x23, 0xd7, 0x70, 0x3f, 0x31, 0x13, 0x09, 0x24, 0x66, 0xe4, - 0x8f, 0x47, 0x49, 0x50, 0x33, 0x6a, 0x61, 0x46, 0xd7, 0xfb, 0x3a, 0x7e, 0xf1, 0x18, 0xab, 0x7a, - 0x5f, 0xef, 0x49, 0x1c, 0x63, 0xe3, 0x5d, 0xec, 0xea, 0xfb, 0xcc, 0x51, 0x60, 0x16, 0x28, 0xaf, - 0xe4, 0x39, 0x94, 0x12, 0x39, 0x0c, 0xed, 0x0d, 0xac, 0xbb, 0x2a, 0x53, 0x22, 0x87, 0xff, 0x11, - 0xdf, 0x3c, 0x83, 0x36, 0x18, 0x50, 0xfe, 0xda, 0x63, 0xc9, 0x32, 0x03, 0x09, 0xa5, 0xd6, 0x54, - 0x5e, 0x93, 0x62, 0x08, 0x41, 0x81, 0xfe, 0x54, 0x1b, 0x1b, 0xe5, 0xad, 0xc6, 0xb5, 0x4d, 0x22, - 0xcb, 0x19, 0x28, 0x0a, 0x59, 0x0a, 0x60, 0x42, 0x7e, 0x0c, 0x4e, 0x8d, 0xf0, 0x2a, 0x86, 0x1c, - 0x62, 0xfd, 0x54, 0x24, 0x88, 0x1d, 0xf6, 0x0c, 0x36, 0x21, 0xe9, 0xb8, 0x9a, 0xdb, 0x73, 0xb8, - 0x10, 0x9f, 0x9d, 0xd4, 0xcd, 0x58, 0x12, 0x3f, 0x1a, 0x94, 0x5c, 0xe1, 0x6c, 0xe4, 0x4b, 0x50, - 0x08, 0x97, 0x8c, 0x96, 0x81, 0xaf, 0x44, 0x51, 0xf9, 0x0a, 0xa0, 0x41, 0xef, 0x63, 0x48, 0x78, - 0x19, 0x19, 0x16, 0x5e, 0xfe, 0x50, 0x04, 0xce, 0x1c, 0xe1, 0x69, 0xa0, 0x97, 0xfb, 0x3a, 0xf9, - 0xfc, 0x71, 0xfc, 0x94, 0x25, 0x06, 0xeb, 0xeb, 0xe6, 0xd3, 0x90, 0x0b, 0xc2, 0x27, 0xeb, 0xe4, - 0x17, 0xa2, 0xfe, 0x24, 0x0e, 0xc7, 0xc1, 0xbe, 0x09, 0x8c, 0x7c, 0x99, 0x26, 0xf0, 0x03, 0x00, - 0xee, 0x81, 0x38, 0x45, 0xcd, 0xd7, 0xd1, 0xfb, 0x87, 0xe4, 0x17, 0xb1, 0xde, 0x3c, 0xe0, 0x93, - 0x20, 0xe3, 0xf2, 0x5f, 0x0e, 0x6a, 0x04, 0x93, 0x02, 0x3d, 0xba, 0xc6, 0x3a, 0xde, 0x9f, 0xf0, - 0x9d, 0x6c, 0x31, 0xf6, 0x93, 0x07, 0x0c, 0xec, 0xa0, 0xd7, 0xe0, 0x54, 0x9f, 0xa3, 0xe0, 0xb1, - 0x8e, 0x4f, 0xea, 0x2f, 0x9c, 0x08, 0xfb, 0x0b, 0x82, 0x75, 0x70, 0xb5, 0x4f, 0x84, 0x57, 0xfb, - 0xd7, 0x00, 0xfc, 0xe4, 0x80, 0x7f, 0xec, 0x2f, 0x12, 0x3c, 0xf6, 0x77, 0x09, 0x12, 0x44, 0x93, - 0x84, 0x9c, 0x06, 0x4d, 0x31, 0xd1, 0x84, 0x40, 0x72, 0x81, 0x61, 0xcb, 0x06, 0xa0, 0xc1, 0x04, - 0xed, 0x88, 0x2a, 0x5e, 0x08, 0x57, 0xf1, 0xc0, 0xc8, 0x54, 0xef, 0xf0, 0xaa, 0xde, 0x84, 0x04, - 0x1d, 0xf9, 0xa1, 0x77, 0x29, 0xbf, 0x06, 0x40, 0x73, 0x5d, 0xdb, 0xd8, 0xe9, 0xf9, 0x15, 0x2c, - 0x0c, 0xd7, 0x9c, 0xb2, 0xc0, 0xab, 0xdc, 0xc7, 0x55, 0x68, 0xd6, 0x27, 0x0d, 0xa8, 0x51, 0x80, - 0xa1, 0xbc, 0x01, 0x85, 0x30, 0xed, 0xf0, 0xbb, 0xa1, 0xfe, 0xc3, 0x2f, 0x19, 0xe1, 0xdf, 0x78, - 0xde, 0x11, 0x7f, 0x8c, 0x89, 0x7e, 0xc8, 0x6f, 0x45, 0x21, 0x17, 0x54, 0xbc, 0xbf, 0x78, 0x2e, - 0x88, 0xfc, 0x0d, 0x11, 0x48, 0x7b, 0xdd, 0x3f, 0xe2, 0xb0, 0xb3, 0x7f, 0x47, 0xd8, 0xdb, 0xbc, - 0x60, 0xdb, 0x44, 0x31, 0x6f, 0x9b, 0xe8, 0x8a, 0xb7, 0xfc, 0x8d, 0x4a, 0x88, 0x04, 0x65, 0x2d, - 0x0e, 0x1c, 0xf2, 0xd5, 0xfe, 0xca, 0x64, 0x57, 0xf1, 0x66, 0x21, 0x11, 0xbc, 0x46, 0xc7, 0x3e, - 0xe4, 0x56, 0xe0, 0x84, 0x11, 0x9b, 0x88, 0xc1, 0x3b, 0x7b, 0x91, 0x63, 0xdf, 0xd9, 0xf3, 0x6a, - 0x89, 0x06, 0x6b, 0xf9, 0xf6, 0x08, 0xa4, 0xc5, 0x9c, 0x40, 0x1f, 0x0c, 0x9e, 0x3c, 0x13, 0x5b, - 0x9b, 0x23, 0xed, 0x11, 0xe7, 0x1f, 0x38, 0x78, 0x36, 0x70, 0xe0, 0x3a, 0x76, 0xdc, 0x03, 0xd7, - 0xdc, 0xb3, 0xfb, 0xa3, 0x08, 0x48, 0xfd, 0x33, 0xf6, 0xcb, 0x6e, 0xdd, 0xe0, 0x32, 0x17, 0x1b, - 0xb2, 0xcc, 0x8d, 0x3a, 0x45, 0x1d, 0x1f, 0x75, 0x8a, 0x7a, 0xb0, 0xd7, 0x89, 0x7b, 0xec, 0xf5, - 0x47, 0xa2, 0x90, 0x0d, 0xa4, 0x47, 0xd1, 0x33, 0xa1, 0x13, 0xd9, 0x8b, 0x47, 0xa5, 0x52, 0x03, - 0x47, 0xb2, 0x43, 0x62, 0x8a, 0x1e, 0x5f, 0x4c, 0xef, 0xfd, 0xed, 0xac, 0xe1, 0x17, 0x58, 0x13, - 0x23, 0x2e, 0xb0, 0xfe, 0xd5, 0x08, 0xa4, 0x3d, 0xb7, 0xfb, 0xb8, 0x9b, 0x98, 0x27, 0x21, 0xc9, - 0x3d, 0x4b, 0xb6, 0x8b, 0xc9, 0xbf, 0x86, 0xa6, 0x95, 0x4b, 0x90, 0x16, 0x7f, 0x4f, 0x91, 0xaf, - 0x6a, 0xde, 0xf7, 0xf9, 0xe7, 0x21, 0x1b, 0xd8, 0x00, 0x26, 0xa6, 0x71, 0xa3, 0xf6, 0x8a, 0x34, - 0x55, 0x4a, 0xdd, 0xb9, 0xbb, 0x18, 0xdb, 0xc0, 0xb7, 0xc9, 0x6c, 0x56, 0x6a, 0xd5, 0x6b, 0xb5, - 0xea, 0x4b, 0x52, 0xa4, 0x94, 0xbd, 0x73, 0x77, 0x31, 0xa5, 0x60, 0x9a, 0x51, 0x3c, 0xff, 0x12, - 0x14, 0xfb, 0x06, 0x26, 0xec, 0xb6, 0x20, 0x28, 0xac, 0x6c, 0x6f, 0xad, 0xd5, 0xab, 0xe5, 0x66, - 0x4d, 0x65, 0xe7, 0x76, 0xd1, 0x29, 0x98, 0x59, 0xab, 0xaf, 0x5e, 0x6b, 0xaa, 0xd5, 0xb5, 0x7a, - 0x6d, 0xa3, 0xa9, 0x96, 0x9b, 0xcd, 0x72, 0xf5, 0x25, 0x29, 0x7a, 0xf1, 0x6e, 0x16, 0xe2, 0xe5, - 0x4a, 0xb5, 0x8e, 0xaa, 0x10, 0xa7, 0xa9, 0x90, 0x23, 0x4f, 0x80, 0x95, 0x8e, 0xce, 0x0d, 0xa3, - 0xab, 0x90, 0xa0, 0x59, 0x12, 0x74, 0xf4, 0x91, 0xb0, 0xd2, 0x98, 0x64, 0x31, 0x69, 0x0c, 0x9d, - 0x91, 0x47, 0x9e, 0x11, 0x2b, 0x1d, 0x9d, 0x3b, 0x46, 0x6b, 0x90, 0x12, 0x41, 0xf2, 0xb8, 0x83, - 0x5b, 0xa5, 0xb1, 0x09, 0x5d, 0xd2, 0x35, 0x96, 0x6c, 0x38, 0xfa, 0xf8, 0x58, 0x69, 0x4c, 0x56, - 0x19, 0xd5, 0xbd, 0xfb, 0x4c, 0x63, 0x4e, 0x84, 0x95, 0xc6, 0xe5, 0x89, 0x91, 0x02, 0x19, 0x3f, - 0x8d, 0x33, 0xfe, 0x50, 0x5c, 0x69, 0x82, 0x84, 0x39, 0xfa, 0x10, 0xe4, 0xc3, 0xa1, 0xee, 0x64, - 0xa7, 0xce, 0x4a, 0x13, 0x66, 0xa4, 0x09, 0xff, 0x70, 0xdc, 0x3b, 0xd9, 0x29, 0xb4, 0xd2, 0x84, - 0x09, 0x6a, 0xf4, 0x06, 0x4c, 0x0f, 0xc6, 0xa5, 0x93, 0x1f, 0x4a, 0x2b, 0x1d, 0x23, 0x65, 0x8d, - 0x3a, 0x80, 0x86, 0xc4, 0xb3, 0xc7, 0x38, 0xa3, 0x56, 0x3a, 0x4e, 0x06, 0x1b, 0xb5, 0xa0, 0xd8, - 0x1f, 0x24, 0x4e, 0x7a, 0x66, 0xad, 0x34, 0x71, 0x36, 0x9b, 0xd5, 0x12, 0x0e, 0x2e, 0x27, 0x3d, - 0xc3, 0x56, 0x9a, 0x38, 0xb9, 0x8d, 0xb6, 0x01, 0x02, 0xf1, 0xe1, 0x04, 0x67, 0xda, 0x4a, 0x93, - 0xa4, 0xb9, 0x51, 0x17, 0x66, 0x86, 0x05, 0x8e, 0xc7, 0x39, 0xe2, 0x56, 0x3a, 0x56, 0xf6, 0x9b, - 0xe8, 0x73, 0x38, 0x04, 0x9c, 0xec, 0xc8, 0x5b, 0x69, 0xc2, 0x34, 0x78, 0xa5, 0x3c, 0xf2, 0x9c, - 0xf3, 0xd9, 0x23, 0xcf, 0x39, 0xfb, 0x27, 0x97, 0xbd, 0xb3, 0xcd, 0xff, 0xee, 0x02, 0x3c, 0xc4, - 0x5f, 0xd0, 0x71, 0x5c, 0xed, 0xa6, 0x61, 0xee, 0x79, 0xcf, 0x2c, 0xf1, 0x6f, 0x7e, 0xc8, 0xf9, - 0x24, 0x7f, 0xa5, 0x47, 0x40, 0xc7, 0x3c, 0xb6, 0x34, 0xf2, 0x05, 0xca, 0x71, 0xf7, 0x21, 0xc6, - 0x1f, 0x5f, 0x3e, 0xe2, 0x21, 0xa7, 0x31, 0xcf, 0x45, 0x0d, 0x79, 0xe8, 0xa9, 0x74, 0xe4, 0x1b, - 0x03, 0xa5, 0xa3, 0xce, 0x7d, 0x13, 0x2f, 0xb6, 0x70, 0xcd, 0x70, 0x5c, 0xcb, 0x36, 0x74, 0xad, - 0x4d, 0x97, 0x97, 0x2b, 0x93, 0xde, 0xca, 0xaa, 0x64, 0x88, 0xbb, 0xc2, 0xdf, 0x82, 0xe2, 0x37, - 0x85, 0x56, 0x20, 0x79, 0x4b, 0x6b, 0xb3, 0x3b, 0x51, 0xc1, 0x87, 0xe0, 0xfa, 0x65, 0x1e, 0xf0, - 0xa3, 0x82, 0x5c, 0x18, 0xad, 0xfc, 0x9d, 0xf4, 0x3e, 0x49, 0xa7, 0x63, 0x38, 0x44, 0x17, 0x15, - 0x1a, 0x4a, 0x5f, 0x87, 0xb8, 0xad, 0xb9, 0x3c, 0xc0, 0xac, 0x5c, 0x3e, 0xf6, 0xbb, 0x4c, 0xac, - 0x06, 0xca, 0x03, 0xbd, 0x0c, 0xe9, 0x8e, 0x76, 0xa0, 0x52, 0x7e, 0xd1, 0x2f, 0x8b, 0x5f, 0xaa, - 0xa3, 0x1d, 0x90, 0xf6, 0xa1, 0x0f, 0x41, 0x91, 0xb0, 0xd4, 0xf7, 0x35, 0x73, 0x0f, 0x33, 0xce, - 0xb1, 0x2f, 0x8b, 0x73, 0xbe, 0xa3, 0x1d, 0x54, 0x29, 0x37, 0xc2, 0x9f, 0x3f, 0x79, 0xf5, 0x4b, - 0x11, 0x9e, 0x35, 0xa0, 0x82, 0x41, 0x1a, 0x48, 0xba, 0xf7, 0x45, 0x2b, 0x15, 0x5b, 0x1c, 0x67, - 0x47, 0xc9, 0xbd, 0x4f, 0xac, 0x95, 0x3c, 0x69, 0xde, 0x67, 0xdf, 0x5e, 0x88, 0xb0, 0x5a, 0x8b, - 0xfa, 0x80, 0xd8, 0xb3, 0x2c, 0x19, 0xa2, 0x52, 0x1f, 0x36, 0x3a, 0xd6, 0x87, 0xcd, 0x0b, 0x1f, - 0x96, 0x31, 0x04, 0x46, 0x4d, 0xca, 0x79, 0x1f, 0x3e, 0x1d, 0x81, 0xec, 0x4a, 0xe0, 0x59, 0xc7, - 0x39, 0x48, 0x75, 0x2c, 0xd3, 0xb8, 0x89, 0x6d, 0x6f, 0x8f, 0x8a, 0x7d, 0x12, 0x3f, 0x93, 0xfd, - 0x75, 0x40, 0xf7, 0x50, 0xbc, 0x2e, 0x24, 0xbe, 0x09, 0xd5, 0x6d, 0xbc, 0xe3, 0x18, 0x42, 0xce, - 0x8a, 0xf8, 0x44, 0x8f, 0x82, 0xe4, 0x60, 0xbd, 0x67, 0x1b, 0xee, 0xa1, 0xaa, 0x5b, 0xa6, 0xab, - 0xe9, 0x2e, 0x8f, 0xc3, 0x8b, 0x02, 0x5e, 0x65, 0x60, 0xc2, 0xa4, 0x85, 0x5d, 0xcd, 0x68, 0xb3, - 0x93, 0x99, 0x19, 0x45, 0x7c, 0xf2, 0xa6, 0xde, 0x49, 0x05, 0xe3, 0xd0, 0x2a, 0x48, 0x56, 0x17, - 0xdb, 0xa1, 0x03, 0x29, 0x4c, 0x1b, 0xe7, 0x7e, 0xed, 0x33, 0x4f, 0xcc, 0x72, 0x81, 0xf3, 0xc3, - 0x0c, 0xec, 0xaf, 0x18, 0x28, 0x45, 0x41, 0x21, 0x4e, 0xaa, 0xbc, 0x16, 0xda, 0x95, 0xea, 0xed, - 0xf8, 0xcf, 0xc8, 0xcc, 0x0e, 0x08, 0xb5, 0x6c, 0x1e, 0x56, 0xe6, 0x7e, 0xd5, 0x67, 0xed, 0xc7, - 0xa9, 0x2f, 0xe1, 0xc3, 0xe0, 0x16, 0x15, 0x65, 0x43, 0x5c, 0xf8, 0x37, 0x34, 0xa3, 0x2d, 0xfe, - 0x90, 0xaa, 0xc2, 0xbf, 0xd0, 0xb2, 0x97, 0x5e, 0x8c, 0xd3, 0x78, 0x48, 0x1e, 0xa5, 0x1b, 0x15, - 0xcb, 0x6c, 0x85, 0xf3, 0x88, 0xa8, 0x0a, 0x49, 0xd7, 0xba, 0x89, 0x4d, 0x2e, 0xa0, 0xe3, 0x3d, - 0xad, 0xc6, 0x49, 0xd1, 0x57, 0x83, 0xd4, 0xc2, 0x6d, 0xbc, 0xc7, 0xee, 0x4b, 0xee, 0x6b, 0x36, - 0x66, 0xb7, 0xf5, 0xef, 0xe9, 0x79, 0xb5, 0xa2, 0xc7, 0xaa, 0x41, 0x39, 0xa1, 0xad, 0xf0, 0xc3, - 0xa1, 0x29, 0xbe, 0x79, 0x3c, 0xa2, 0x8f, 0x01, 0xcd, 0x0b, 0x5a, 0x9e, 0xd0, 0x43, 0xa3, 0x8f, - 0x82, 0xd4, 0x33, 0x77, 0x2c, 0x93, 0xfe, 0xfd, 0x41, 0x1e, 0x45, 0xa5, 0xd9, 0x4e, 0xa5, 0x07, - 0xe7, 0x3b, 0x95, 0x5b, 0x50, 0xf0, 0x51, 0xe9, 0x0c, 0xc9, 0x1c, 0x77, 0x86, 0xe4, 0x3d, 0x06, - 0x04, 0x05, 0xad, 0x03, 0xf8, 0x73, 0x90, 0x6e, 0x95, 0x65, 0x47, 0x8f, 0x98, 0x3f, 0x9b, 0x83, - 0x9d, 0x09, 0x30, 0x40, 0x5f, 0x05, 0x33, 0x1d, 0xc3, 0x54, 0x1d, 0xdc, 0xde, 0x55, 0xb9, 0xe4, - 0x08, 0xdf, 0xec, 0xf1, 0x47, 0x73, 0xba, 0x63, 0x98, 0x0d, 0xdc, 0xde, 0x5d, 0xf1, 0xb8, 0xa0, - 0x0f, 0xc0, 0x19, 0xbf, 0xf7, 0x96, 0xa9, 0xee, 0x5b, 0xed, 0x96, 0x6a, 0xe3, 0x5d, 0x55, 0xa7, - 0xef, 0xfc, 0xe5, 0xa8, 0xcc, 0x4e, 0x79, 0x28, 0x9b, 0xe6, 0x35, 0xab, 0xdd, 0x52, 0xf0, 0x6e, - 0x95, 0x14, 0xa3, 0x07, 0xc1, 0xef, 0xba, 0x6a, 0xb4, 0x9c, 0xb9, 0xfc, 0x62, 0xec, 0x5c, 0x5c, - 0xc9, 0x79, 0xc0, 0x7a, 0xcb, 0x59, 0x4e, 0x7f, 0xf4, 0x93, 0x0b, 0x53, 0x9f, 0xff, 0xe4, 0xc2, - 0x94, 0x7c, 0x95, 0xbe, 0x29, 0xc5, 0xe7, 0x11, 0x76, 0xd0, 0x65, 0xc8, 0x68, 0xe2, 0x83, 0xdd, - 0x18, 0x3b, 0x62, 0x1e, 0xfa, 0xa8, 0xf2, 0x8f, 0x46, 0x20, 0xb9, 0x72, 0x63, 0x4b, 0x33, 0x6c, - 0x54, 0x83, 0x69, 0x5f, 0x31, 0x27, 0x9d, 0xd2, 0xbe, 0x2e, 0x8b, 0x39, 0xbd, 0x31, 0xea, 0xa8, - 0x5a, 0xa6, 0xf2, 0xc0, 0xaf, 0x7d, 0xe6, 0x89, 0xfb, 0x39, 0x9b, 0x1b, 0x7d, 0xa7, 0xd6, 0x04, - 0xbf, 0xfe, 0xd3, 0x6c, 0x81, 0x3e, 0x5f, 0x87, 0x14, 0x6b, 0xaa, 0x83, 0x5e, 0x84, 0x44, 0x97, - 0xfc, 0xe0, 0x19, 0xf8, 0xf9, 0x91, 0x0a, 0x4e, 0xf1, 0x83, 0xea, 0xc0, 0xe8, 0xe4, 0x6f, 0x8a, - 0x02, 0xac, 0xdc, 0xb8, 0xd1, 0xb4, 0x8d, 0x6e, 0x1b, 0xbb, 0xef, 0x55, 0xdf, 0xb7, 0xe1, 0x44, - 0xe0, 0x2e, 0xb4, 0xad, 0x1f, 0xbf, 0xff, 0x33, 0xfe, 0xb5, 0x68, 0x5b, 0x1f, 0xca, 0xb6, 0xe5, - 0xb8, 0x1e, 0xdb, 0xd8, 0xf1, 0xd9, 0xae, 0x38, 0xee, 0xa0, 0x64, 0x5f, 0x85, 0xac, 0x2f, 0x0c, - 0x07, 0xd5, 0x21, 0xed, 0xf2, 0xdf, 0x5c, 0xc0, 0xf2, 0x68, 0x01, 0x0b, 0xb2, 0xa0, 0x90, 0x3d, - 0x72, 0xf9, 0x4f, 0x22, 0x00, 0x81, 0x39, 0xf2, 0x67, 0x53, 0xc7, 0x48, 0xb8, 0xce, 0x2d, 0x71, - 0xec, 0x9e, 0x5f, 0xe3, 0x64, 0x0c, 0x02, 0x42, 0xfd, 0x96, 0x28, 0xcc, 0x6c, 0x8b, 0xd9, 0xfb, - 0x67, 0x5f, 0x06, 0xdb, 0x90, 0xc2, 0xa6, 0x6b, 0x1b, 0xde, 0x1e, 0xd2, 0x93, 0xa3, 0xc6, 0x7c, - 0x48, 0xa7, 0x6a, 0xa6, 0x6b, 0x1f, 0x06, 0x35, 0x40, 0xf0, 0x0a, 0xc8, 0xe3, 0xfb, 0x63, 0x30, - 0x37, 0x8a, 0x14, 0x9d, 0x85, 0xa2, 0x6e, 0x63, 0x0a, 0x08, 0x5f, 0x11, 0x2d, 0x08, 0x30, 0x5f, - 0x63, 0x14, 0x20, 0x5e, 0x19, 0x51, 0x2e, 0x82, 0x7a, 0x6f, 0x6e, 0x58, 0xc1, 0xe7, 0x40, 0x57, - 0x99, 0x26, 0x14, 0xc5, 0x9d, 0x93, 0x1d, 0xad, 0xad, 0x99, 0xba, 0x70, 0x57, 0x8f, 0xb5, 0x24, - 0x88, 0x7b, 0x2b, 0x15, 0xc6, 0x02, 0xd5, 0x20, 0x25, 0xb8, 0xc5, 0x8f, 0xcf, 0x4d, 0xd0, 0xa2, - 0x87, 0x21, 0x17, 0x5c, 0x18, 0xa8, 0xeb, 0x11, 0xa7, 0x7f, 0xd4, 0x3d, 0x1b, 0x58, 0x1b, 0xc6, - 0xad, 0x3e, 0xc9, 0x23, 0x57, 0x1f, 0xee, 0xe1, 0x7d, 0x3f, 0x3d, 0x1e, 0xde, 0xfa, 0xf3, 0x3f, - 0x34, 0x5b, 0x00, 0x6c, 0xba, 0x12, 0x6b, 0xca, 0x47, 0xe7, 0x1e, 0xe6, 0x7c, 0x86, 0x31, 0x59, - 0x71, 0xe8, 0x1f, 0xad, 0x1e, 0x1c, 0xa5, 0xf7, 0x7e, 0x84, 0x7e, 0x23, 0x0a, 0xb9, 0xe0, 0x08, - 0xfd, 0x85, 0x5c, 0xb8, 0xd0, 0x86, 0x6f, 0xaa, 0xd8, 0x15, 0x9a, 0x47, 0x47, 0x99, 0xaa, 0x01, - 0x6d, 0x1e, 0x63, 0xa3, 0x3e, 0x11, 0x83, 0x24, 0x3f, 0xe3, 0xb6, 0x39, 0xe0, 0xcc, 0x46, 0xc6, - 0x3d, 0x02, 0x90, 0x17, 0x8f, 0x00, 0x0c, 0xf5, 0x65, 0x1f, 0x86, 0x02, 0x09, 0x8a, 0x43, 0x07, - 0xe7, 0x22, 0xe7, 0xf2, 0x34, 0xb6, 0xf5, 0x8f, 0x89, 0xa3, 0x05, 0xc8, 0x12, 0x34, 0xdf, 0x16, - 0x13, 0x1c, 0xe8, 0x68, 0x07, 0x35, 0x06, 0x41, 0x4f, 0x00, 0xda, 0xf7, 0x92, 0x14, 0xaa, 0x2f, - 0x08, 0x82, 0x37, 0xed, 0x97, 0x08, 0xf4, 0xfb, 0x01, 0x48, 0x2b, 0x54, 0xf6, 0x08, 0x35, 0x7f, - 0xe2, 0x9b, 0x40, 0x56, 0xe8, 0x43, 0xd4, 0x5f, 0x1f, 0x61, 0x3e, 0x71, 0x5f, 0xe8, 0xcc, 0x43, - 0x92, 0xe6, 0x04, 0x93, 0xe2, 0x0f, 0xdf, 0x5e, 0x28, 0x1d, 0x6a, 0x9d, 0xf6, 0xb2, 0x3c, 0x84, - 0x8f, 0x3c, 0x2c, 0x9a, 0x27, 0xce, 0x73, 0x38, 0xf4, 0x5e, 0x7e, 0x88, 0xa8, 0xf7, 0x9d, 0xdf, - 0xf9, 0xf1, 0xf3, 0x67, 0x02, 0xef, 0x3e, 0x1f, 0x78, 0x29, 0x2c, 0x36, 0x26, 0xc4, 0x5b, 0x45, - 0xfe, 0xca, 0xe1, 0x9d, 0x8e, 0x5f, 0x07, 0x08, 0x78, 0xf3, 0x91, 0xa3, 0xa3, 0x04, 0x9f, 0x3e, - 0x14, 0x25, 0x04, 0xe6, 0xd4, 0x07, 0x7d, 0xc3, 0x2d, 0xde, 0x7d, 0x18, 0xf2, 0x2a, 0xf9, 0x52, - 0xd5, 0x32, 0x42, 0x2c, 0x04, 0x11, 0x9d, 0xaa, 0x53, 0xf2, 0xbf, 0x8e, 0xc0, 0xe9, 0x01, 0xf5, - 0xf3, 0x9a, 0xac, 0x03, 0xb2, 0x03, 0x85, 0x74, 0x18, 0xc5, 0x76, 0xec, 0xbd, 0x69, 0xf3, 0xb4, - 0x3d, 0x60, 0xb9, 0xdf, 0x9b, 0x15, 0x88, 0x9b, 0x9e, 0x5f, 0x89, 0xc0, 0x6c, 0xb0, 0x01, 0x5e, - 0x57, 0x1a, 0x90, 0x0b, 0x56, 0xcd, 0x3b, 0xf1, 0xd0, 0x24, 0x9d, 0x08, 0xb6, 0x3f, 0xc4, 0x04, - 0xdd, 0xf0, 0xa7, 0x38, 0xcb, 0x9d, 0x3d, 0x35, 0xb1, 0x50, 0x44, 0xc3, 0x86, 0x4e, 0x75, 0x36, - 0x36, 0xbf, 0x1b, 0x81, 0xf8, 0x96, 0x65, 0xb5, 0xd1, 0x87, 0x61, 0xda, 0xb4, 0x5c, 0x95, 0x4c, - 0x07, 0xdc, 0x52, 0x79, 0x70, 0xcf, 0xcc, 0x67, 0xed, 0x48, 0x59, 0x7d, 0xe1, 0xed, 0x85, 0x41, - 0xca, 0x61, 0xef, 0xc2, 0x17, 0x4d, 0xcb, 0xad, 0x50, 0xa4, 0x26, 0x8b, 0xff, 0x77, 0x21, 0x1f, - 0xae, 0x8e, 0x99, 0xd8, 0xf2, 0xb8, 0xea, 0xf2, 0x63, 0xab, 0xca, 0xed, 0x04, 0xea, 0x61, 0x4f, - 0x29, 0xff, 0x3e, 0x19, 0xb9, 0xd7, 0x40, 0xba, 0xd1, 0x7f, 0xcc, 0xa7, 0x06, 0x29, 0x71, 0xac, - 0x27, 0x32, 0xe1, 0x89, 0xa1, 0xa0, 0x38, 0x39, 0xed, 0xf9, 0x9f, 0x8e, 0x00, 0xf8, 0x89, 0x12, - 0xf4, 0x38, 0x9c, 0xaa, 0x6c, 0x6e, 0xac, 0xa8, 0x8d, 0x66, 0xb9, 0xb9, 0xdd, 0x08, 0xff, 0x35, - 0x11, 0xf1, 0x06, 0x91, 0xd3, 0xc5, 0xba, 0xb1, 0x6b, 0xe0, 0x16, 0x7a, 0x04, 0x66, 0xc3, 0xd8, - 0xe4, 0xab, 0xb6, 0x22, 0x45, 0x4a, 0xb9, 0x3b, 0x77, 0x17, 0xd3, 0xcc, 0x57, 0xc4, 0x2d, 0x74, - 0x0e, 0x4e, 0x0c, 0xe2, 0xd5, 0x37, 0x56, 0xa5, 0x68, 0x29, 0x7f, 0xe7, 0xee, 0x62, 0xc6, 0x73, - 0x2a, 0x91, 0x0c, 0x28, 0x88, 0xc9, 0xf9, 0xc5, 0x4a, 0x70, 0xe7, 0xee, 0x62, 0x92, 0x8d, 0x42, - 0x29, 0xfe, 0xd1, 0x1f, 0x9c, 0x9f, 0x3a, 0xff, 0x35, 0x00, 0x75, 0x73, 0xd7, 0xd6, 0xe8, 0x9f, - 0xd4, 0x47, 0x25, 0x38, 0x59, 0xdf, 0xb8, 0xaa, 0x94, 0xab, 0xcd, 0xfa, 0xe6, 0x46, 0xdf, 0x1f, - 0x41, 0x09, 0x97, 0xad, 0x6c, 0x6e, 0x57, 0xd6, 0x6a, 0x6a, 0xa3, 0xbe, 0xba, 0xc1, 0x36, 0x5c, - 0x43, 0x65, 0xaf, 0x6c, 0x34, 0xeb, 0xeb, 0x35, 0x29, 0x5a, 0xb9, 0x3a, 0x32, 0xa1, 0xff, 0xf8, - 0x91, 0x2f, 0xdd, 0xfb, 0x16, 0x2f, 0x94, 0xd5, 0xff, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0xf4, - 0xeb, 0xb3, 0xa6, 0x58, 0xa1, 0x00, 0x00, + // 11200 bytes of a gzipped FileDescriptorSet + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x69, 0x90, 0x1c, 0xd7, + 0x79, 0xd8, 0xce, 0x3d, 0xf3, 0xcd, 0xd5, 0xfb, 0x76, 0x01, 0x2c, 0x06, 0xe4, 0xee, 0xa2, 0x29, + 0x12, 0x20, 0x48, 0x2e, 0x48, 0x90, 0x00, 0xc9, 0x85, 0x28, 0x66, 0x66, 0x76, 0xb0, 0x18, 0x70, + 0x2f, 0xf6, 0xcc, 0x42, 0x24, 0x6d, 0xab, 0xdd, 0xdb, 0xf3, 0x76, 0xb7, 0x89, 0x99, 0xee, 0x51, + 0x77, 0x0f, 0xb0, 0xcb, 0x4a, 0xa5, 0xe4, 0xc8, 0x4e, 0x64, 0xf8, 0x88, 0x1c, 0xbb, 0x6c, 0xd9, + 0x12, 0x6c, 0xc9, 0x8e, 0x6d, 0xd9, 0xb9, 0x7c, 0x28, 0x3e, 0xe2, 0x8a, 0x63, 0xe7, 0xb4, 0x5d, + 0x39, 0x14, 0xff, 0x48, 0x9c, 0x54, 0x99, 0xb1, 0x29, 0x57, 0xac, 0xc8, 0x72, 0xe2, 0x83, 0x4e, + 0x9c, 0x52, 0x25, 0x95, 0x7a, 0x57, 0x1f, 0x73, 0xec, 0xcc, 0x42, 0xa4, 0xac, 0xd8, 0xf9, 0x03, + 0x4c, 0x7f, 0xef, 0xfb, 0xbe, 0xf7, 0xde, 0xf7, 0xbe, 0xf7, 0xbd, 0xef, 0xfb, 0xde, 0xb1, 0xf0, + 0xdb, 0x15, 0x58, 0xdc, 0xb3, 0xac, 0xbd, 0x36, 0xbe, 0xd8, 0xb5, 0x2d, 0xd7, 0xda, 0xe9, 0xed, + 0x5e, 0x6c, 0x61, 0x47, 0xb7, 0x8d, 0xae, 0x6b, 0xd9, 0x4b, 0x14, 0x86, 0x8a, 0x0c, 0x63, 0x49, + 0x60, 0xc8, 0xeb, 0x30, 0x7d, 0xcd, 0x68, 0xe3, 0x15, 0x0f, 0xb1, 0x81, 0x5d, 0xf4, 0x1c, 0xc4, + 0x77, 0x8d, 0x36, 0x9e, 0x8b, 0x2c, 0xc6, 0xce, 0x67, 0x2f, 0xbd, 0x67, 0xa9, 0x8f, 0x68, 0x29, + 0x4c, 0xb1, 0x45, 0xc0, 0x0a, 0xa5, 0x90, 0xff, 0x4f, 0x1c, 0x66, 0x86, 0x94, 0x22, 0x04, 0x71, + 0x53, 0xeb, 0x10, 0x8e, 0x91, 0xf3, 0x19, 0x85, 0xfe, 0x46, 0x73, 0x90, 0xea, 0x6a, 0xfa, 0x2d, + 0x6d, 0x0f, 0xcf, 0x45, 0x29, 0x58, 0x7c, 0xa2, 0x79, 0x80, 0x16, 0xee, 0x62, 0xb3, 0x85, 0x4d, + 0xfd, 0x70, 0x2e, 0xb6, 0x18, 0x3b, 0x9f, 0x51, 0x02, 0x10, 0xf4, 0x18, 0x4c, 0x77, 0x7b, 0x3b, + 0x6d, 0x43, 0x57, 0x03, 0x68, 0xb0, 0x18, 0x3b, 0x9f, 0x50, 0x24, 0x56, 0xb0, 0xe2, 0x23, 0x9f, + 0x83, 0xe2, 0x1d, 0xac, 0xdd, 0x0a, 0xa2, 0x66, 0x29, 0x6a, 0x81, 0x80, 0x03, 0x88, 0x55, 0xc8, + 0x75, 0xb0, 0xe3, 0x68, 0x7b, 0x58, 0x75, 0x0f, 0xbb, 0x78, 0x2e, 0x4e, 0x7b, 0xbf, 0x38, 0xd0, + 0xfb, 0xfe, 0x9e, 0x67, 0x39, 0x55, 0xf3, 0xb0, 0x8b, 0x51, 0x19, 0x32, 0xd8, 0xec, 0x75, 0x18, + 0x87, 0xc4, 0x08, 0xf9, 0xd5, 0xcc, 0x5e, 0xa7, 0x9f, 0x4b, 0x9a, 0x90, 0x71, 0x16, 0x29, 0x07, + 0xdb, 0xb7, 0x0d, 0x1d, 0xcf, 0x25, 0x29, 0x83, 0x73, 0x03, 0x0c, 0x1a, 0xac, 0xbc, 0x9f, 0x87, + 0xa0, 0x43, 0x55, 0xc8, 0xe0, 0x03, 0x17, 0x9b, 0x8e, 0x61, 0x99, 0x73, 0x29, 0xca, 0xe4, 0xe1, + 0x21, 0xa3, 0x88, 0xdb, 0xad, 0x7e, 0x16, 0x3e, 0x1d, 0xba, 0x02, 0x29, 0xab, 0xeb, 0x1a, 0x96, + 0xe9, 0xcc, 0xa5, 0x17, 0x23, 0xe7, 0xb3, 0x97, 0x1e, 0x18, 0xaa, 0x08, 0x9b, 0x0c, 0x47, 0x11, + 0xc8, 0xa8, 0x0e, 0x92, 0x63, 0xf5, 0x6c, 0x1d, 0xab, 0xba, 0xd5, 0xc2, 0xaa, 0x61, 0xee, 0x5a, + 0x73, 0x19, 0xca, 0x60, 0x61, 0xb0, 0x23, 0x14, 0xb1, 0x6a, 0xb5, 0x70, 0xdd, 0xdc, 0xb5, 0x94, + 0x82, 0x13, 0xfa, 0x46, 0x27, 0x21, 0xe9, 0x1c, 0x9a, 0xae, 0x76, 0x30, 0x97, 0xa3, 0x1a, 0xc2, + 0xbf, 0x88, 0xea, 0xe0, 0x96, 0x41, 0xaa, 0x9b, 0xcb, 0x33, 0xd5, 0xe1, 0x9f, 0xf2, 0xcf, 0x27, + 0xa1, 0x38, 0x89, 0xf2, 0x5d, 0x85, 0xc4, 0x2e, 0xe9, 0xff, 0x5c, 0xf4, 0x38, 0xd2, 0x61, 0x34, + 0x61, 0xf1, 0x26, 0xef, 0x53, 0xbc, 0x65, 0xc8, 0x9a, 0xd8, 0x71, 0x71, 0x8b, 0xe9, 0x4a, 0x6c, + 0x42, 0x6d, 0x03, 0x46, 0x34, 0xa8, 0x6c, 0xf1, 0xfb, 0x52, 0xb6, 0x57, 0xa0, 0xe8, 0x35, 0x49, + 0xb5, 0x35, 0x73, 0x4f, 0x68, 0xed, 0xc5, 0x71, 0x2d, 0x59, 0xaa, 0x09, 0x3a, 0x85, 0x90, 0x29, + 0x05, 0x1c, 0xfa, 0x46, 0x2b, 0x00, 0x96, 0x89, 0xad, 0x5d, 0xb5, 0x85, 0xf5, 0xf6, 0x5c, 0x7a, + 0x84, 0x94, 0x36, 0x09, 0xca, 0x80, 0x94, 0x2c, 0x06, 0xd5, 0xdb, 0xe8, 0x79, 0x5f, 0x09, 0x53, + 0x23, 0x74, 0x68, 0x9d, 0x4d, 0xbf, 0x01, 0x3d, 0xdc, 0x86, 0x82, 0x8d, 0xc9, 0x8c, 0xc0, 0x2d, + 0xde, 0xb3, 0x0c, 0x6d, 0xc4, 0xd2, 0xd8, 0x9e, 0x29, 0x9c, 0x8c, 0x75, 0x2c, 0x6f, 0x07, 0x3f, + 0xd1, 0x43, 0xe0, 0x01, 0x54, 0xaa, 0x56, 0x40, 0xed, 0x53, 0x4e, 0x00, 0x37, 0xb4, 0x0e, 0x2e, + 0xbd, 0x01, 0x85, 0xb0, 0x78, 0xd0, 0x2c, 0x24, 0x1c, 0x57, 0xb3, 0x5d, 0xaa, 0x85, 0x09, 0x85, + 0x7d, 0x20, 0x09, 0x62, 0xd8, 0x6c, 0x51, 0xfb, 0x97, 0x50, 0xc8, 0x4f, 0xf4, 0x97, 0xfc, 0x0e, + 0xc7, 0x68, 0x87, 0x1f, 0x19, 0x1c, 0xd1, 0x10, 0xe7, 0xfe, 0x7e, 0x97, 0x9e, 0x85, 0x7c, 0xa8, + 0x03, 0x93, 0x56, 0x2d, 0xff, 0x65, 0x38, 0x31, 0x94, 0x35, 0x7a, 0x05, 0x66, 0x7b, 0xa6, 0x61, + 0xba, 0xd8, 0xee, 0xda, 0x98, 0x68, 0x2c, 0xab, 0x6a, 0xee, 0x77, 0x53, 0x23, 0x74, 0x6e, 0x3b, + 0x88, 0xcd, 0xb8, 0x28, 0x33, 0xbd, 0x41, 0xe0, 0x85, 0x4c, 0xfa, 0xf3, 0x29, 0xe9, 0x43, 0x1f, + 0xfa, 0xd0, 0x87, 0xa2, 0xf2, 0x2f, 0x27, 0x61, 0x76, 0xd8, 0x9c, 0x19, 0x3a, 0x7d, 0x4f, 0x42, + 0xd2, 0xec, 0x75, 0x76, 0xb0, 0x4d, 0x85, 0x94, 0x50, 0xf8, 0x17, 0x2a, 0x43, 0xa2, 0xad, 0xed, + 0xe0, 0xf6, 0x5c, 0x7c, 0x31, 0x72, 0xbe, 0x70, 0xe9, 0xb1, 0x89, 0x66, 0xe5, 0xd2, 0x1a, 0x21, + 0x51, 0x18, 0x25, 0x7a, 0x1f, 0xc4, 0xb9, 0xf1, 0x26, 0x1c, 0x2e, 0x4c, 0xc6, 0x81, 0xcc, 0x25, + 0x85, 0xd2, 0xa1, 0x33, 0x90, 0x21, 0xff, 0x33, 0xdd, 0x48, 0xd2, 0x36, 0xa7, 0x09, 0x80, 0xe8, + 0x05, 0x2a, 0x41, 0x9a, 0x4e, 0x93, 0x16, 0x16, 0x8b, 0x9e, 0xf7, 0x4d, 0x14, 0xab, 0x85, 0x77, + 0xb5, 0x5e, 0xdb, 0x55, 0x6f, 0x6b, 0xed, 0x1e, 0xa6, 0x0a, 0x9f, 0x51, 0x72, 0x1c, 0x78, 0x93, + 0xc0, 0xd0, 0x02, 0x64, 0xd9, 0xac, 0x32, 0xcc, 0x16, 0x3e, 0xa0, 0x76, 0x35, 0xa1, 0xb0, 0x89, + 0x56, 0x27, 0x10, 0x52, 0xfd, 0xeb, 0x8e, 0x65, 0x0a, 0xd5, 0xa4, 0x55, 0x10, 0x00, 0xad, 0xfe, + 0xd9, 0x7e, 0x93, 0xfe, 0xe0, 0xf0, 0xee, 0x0d, 0xcc, 0xa5, 0x73, 0x50, 0xa4, 0x18, 0x4f, 0xf3, + 0xa1, 0xd7, 0xda, 0x73, 0xd3, 0x8b, 0x91, 0xf3, 0x69, 0xa5, 0xc0, 0xc0, 0x9b, 0x1c, 0x2a, 0xff, + 0x4c, 0x14, 0xe2, 0xd4, 0xb0, 0x14, 0x21, 0xdb, 0x7c, 0x75, 0xab, 0xa6, 0xae, 0x6c, 0x6e, 0x57, + 0xd6, 0x6a, 0x52, 0x04, 0x15, 0x00, 0x28, 0xe0, 0xda, 0xda, 0x66, 0xb9, 0x29, 0x45, 0xbd, 0xef, + 0xfa, 0x46, 0xf3, 0xca, 0x33, 0x52, 0xcc, 0x23, 0xd8, 0x66, 0x80, 0x78, 0x10, 0xe1, 0xe9, 0x4b, + 0x52, 0x02, 0x49, 0x90, 0x63, 0x0c, 0xea, 0xaf, 0xd4, 0x56, 0xae, 0x3c, 0x23, 0x25, 0xc3, 0x90, + 0xa7, 0x2f, 0x49, 0x29, 0x94, 0x87, 0x0c, 0x85, 0x54, 0x36, 0x37, 0xd7, 0xa4, 0xb4, 0xc7, 0xb3, + 0xd1, 0x54, 0xea, 0x1b, 0xab, 0x52, 0xc6, 0xe3, 0xb9, 0xaa, 0x6c, 0x6e, 0x6f, 0x49, 0xe0, 0x71, + 0x58, 0xaf, 0x35, 0x1a, 0xe5, 0xd5, 0x9a, 0x94, 0xf5, 0x30, 0x2a, 0xaf, 0x36, 0x6b, 0x0d, 0x29, + 0x17, 0x6a, 0xd6, 0xd3, 0x97, 0xa4, 0xbc, 0x57, 0x45, 0x6d, 0x63, 0x7b, 0x5d, 0x2a, 0xa0, 0x69, + 0xc8, 0xb3, 0x2a, 0x44, 0x23, 0x8a, 0x7d, 0xa0, 0x2b, 0xcf, 0x48, 0x92, 0xdf, 0x10, 0xc6, 0x65, + 0x3a, 0x04, 0xb8, 0xf2, 0x8c, 0x84, 0xe4, 0x2a, 0x24, 0xa8, 0x1a, 0x22, 0x04, 0x85, 0xb5, 0x72, + 0xa5, 0xb6, 0xa6, 0x6e, 0x6e, 0x35, 0xeb, 0x9b, 0x1b, 0xe5, 0x35, 0x29, 0xe2, 0xc3, 0x94, 0xda, + 0xcb, 0xdb, 0x75, 0xa5, 0xb6, 0x22, 0x45, 0x83, 0xb0, 0xad, 0x5a, 0xb9, 0x59, 0x5b, 0x91, 0x62, + 0xb2, 0x0e, 0xb3, 0xc3, 0x0c, 0xea, 0xd0, 0x29, 0x14, 0xd0, 0x85, 0xe8, 0x08, 0x5d, 0xa0, 0xbc, + 0xfa, 0x75, 0x41, 0xfe, 0x5c, 0x14, 0x66, 0x86, 0x2c, 0x2a, 0x43, 0x2b, 0x79, 0x11, 0x12, 0x4c, + 0x97, 0xd9, 0x32, 0xfb, 0xe8, 0xd0, 0xd5, 0x89, 0x6a, 0xf6, 0xc0, 0x52, 0x4b, 0xe9, 0x82, 0x4e, + 0x48, 0x6c, 0x84, 0x13, 0x42, 0x58, 0x0c, 0x28, 0xec, 0xd7, 0x0d, 0x18, 0x7f, 0xb6, 0x3e, 0x5e, + 0x99, 0x64, 0x7d, 0xa4, 0xb0, 0xe3, 0x2d, 0x02, 0x89, 0x21, 0x8b, 0xc0, 0x55, 0x98, 0x1e, 0x60, + 0x34, 0xb1, 0x31, 0xfe, 0x70, 0x04, 0xe6, 0x46, 0x09, 0x67, 0x8c, 0x49, 0x8c, 0x86, 0x4c, 0xe2, + 0xd5, 0x7e, 0x09, 0x9e, 0x1d, 0x3d, 0x08, 0x03, 0x63, 0xfd, 0xa3, 0x11, 0x38, 0x39, 0xdc, 0xd9, + 0x1c, 0xda, 0x86, 0xf7, 0x41, 0xb2, 0x83, 0xdd, 0x7d, 0x4b, 0xb8, 0x55, 0x8f, 0x0c, 0x59, 0xac, + 0x49, 0x71, 0xff, 0x60, 0x73, 0xaa, 0xe0, 0x6a, 0x1f, 0x1b, 0xe5, 0x31, 0xb2, 0xd6, 0x0c, 0xb4, + 0xf4, 0x9b, 0xa3, 0x70, 0x62, 0x28, 0xf3, 0xa1, 0x0d, 0x7d, 0x10, 0xc0, 0x30, 0xbb, 0x3d, 0x97, + 0xb9, 0x4e, 0xcc, 0x12, 0x67, 0x28, 0x84, 0x1a, 0x2f, 0x62, 0x65, 0x7b, 0xae, 0x57, 0x1e, 0xa3, + 0xe5, 0xc0, 0x40, 0x14, 0xe1, 0x39, 0xbf, 0xa1, 0x71, 0xda, 0xd0, 0xf9, 0x11, 0x3d, 0x1d, 0x50, + 0xcc, 0x27, 0x41, 0xd2, 0xdb, 0x06, 0x36, 0x5d, 0xd5, 0x71, 0x6d, 0xac, 0x75, 0x0c, 0x73, 0x8f, + 0x2e, 0x35, 0xe9, 0xe5, 0xc4, 0xae, 0xd6, 0x76, 0xb0, 0x52, 0x64, 0xc5, 0x0d, 0x51, 0x4a, 0x28, + 0xa8, 0x02, 0xd9, 0x01, 0x8a, 0x64, 0x88, 0x82, 0x15, 0x7b, 0x14, 0xf2, 0x77, 0x64, 0x20, 0x1b, + 0x70, 0xcd, 0xd1, 0x59, 0xc8, 0xbd, 0xae, 0xdd, 0xd6, 0x54, 0x11, 0x6e, 0x31, 0x49, 0x64, 0x09, + 0x6c, 0x8b, 0x87, 0x5c, 0x4f, 0xc2, 0x2c, 0x45, 0xb1, 0x7a, 0x2e, 0xb6, 0x55, 0xbd, 0xad, 0x39, + 0x0e, 0x15, 0x5a, 0x9a, 0xa2, 0x22, 0x52, 0xb6, 0x49, 0x8a, 0xaa, 0xa2, 0x04, 0x5d, 0x86, 0x19, + 0x4a, 0xd1, 0xe9, 0xb5, 0x5d, 0xa3, 0xdb, 0xc6, 0x2a, 0x09, 0x00, 0x1d, 0xba, 0xe4, 0x78, 0x2d, + 0x9b, 0x26, 0x18, 0xeb, 0x1c, 0x81, 0xb4, 0xc8, 0x41, 0x2b, 0xf0, 0x20, 0x25, 0xdb, 0xc3, 0x26, + 0xb6, 0x35, 0x17, 0xab, 0xf8, 0x83, 0x3d, 0xad, 0xed, 0xa8, 0x9a, 0xd9, 0x52, 0xf7, 0x35, 0x67, + 0x7f, 0x6e, 0x96, 0x30, 0xa8, 0x44, 0xe7, 0x22, 0xca, 0x69, 0x82, 0xb8, 0xca, 0xf1, 0x6a, 0x14, + 0xad, 0x6c, 0xb6, 0xae, 0x6b, 0xce, 0x3e, 0x5a, 0x86, 0x93, 0x94, 0x8b, 0xe3, 0xda, 0x86, 0xb9, + 0xa7, 0xea, 0xfb, 0x58, 0xbf, 0xa5, 0xf6, 0xdc, 0xdd, 0xe7, 0xe6, 0xce, 0x04, 0xeb, 0xa7, 0x2d, + 0x6c, 0x50, 0x9c, 0x2a, 0x41, 0xd9, 0x76, 0x77, 0x9f, 0x43, 0x0d, 0xc8, 0x91, 0xc1, 0xe8, 0x18, + 0x6f, 0x60, 0x75, 0xd7, 0xb2, 0xe9, 0x1a, 0x5a, 0x18, 0x62, 0x9a, 0x02, 0x12, 0x5c, 0xda, 0xe4, + 0x04, 0xeb, 0x56, 0x0b, 0x2f, 0x27, 0x1a, 0x5b, 0xb5, 0xda, 0x8a, 0x92, 0x15, 0x5c, 0xae, 0x59, + 0x36, 0x51, 0xa8, 0x3d, 0xcb, 0x13, 0x70, 0x96, 0x29, 0xd4, 0x9e, 0x25, 0xc4, 0x7b, 0x19, 0x66, + 0x74, 0x9d, 0xf5, 0xd9, 0xd0, 0x55, 0x1e, 0xa6, 0x39, 0x73, 0x52, 0x48, 0x58, 0xba, 0xbe, 0xca, + 0x10, 0xb8, 0x8e, 0x3b, 0xe8, 0x79, 0x38, 0xe1, 0x0b, 0x2b, 0x48, 0x38, 0x3d, 0xd0, 0xcb, 0x7e, + 0xd2, 0xcb, 0x30, 0xd3, 0x3d, 0x1c, 0x24, 0x44, 0xa1, 0x1a, 0xbb, 0x87, 0xfd, 0x64, 0xcf, 0xc2, + 0x6c, 0x77, 0xbf, 0x3b, 0x48, 0x77, 0x21, 0x48, 0x87, 0xba, 0xfb, 0xdd, 0x7e, 0xc2, 0x87, 0x69, + 0xcc, 0x6e, 0x63, 0x5d, 0x73, 0x71, 0x6b, 0xee, 0x54, 0x10, 0x3d, 0x50, 0x80, 0x96, 0x40, 0xd2, + 0x75, 0x15, 0x9b, 0xda, 0x4e, 0x1b, 0xab, 0x9a, 0x8d, 0x4d, 0xcd, 0x99, 0x5b, 0xa0, 0xc8, 0x71, + 0xd7, 0xee, 0x61, 0xa5, 0xa0, 0xeb, 0x35, 0x5a, 0x58, 0xa6, 0x65, 0xe8, 0x02, 0x4c, 0x5b, 0x3b, + 0xaf, 0xeb, 0x4c, 0x23, 0xd5, 0xae, 0x8d, 0x77, 0x8d, 0x83, 0xb9, 0xf7, 0x50, 0xf1, 0x16, 0x49, + 0x01, 0xd5, 0xc7, 0x2d, 0x0a, 0x46, 0x8f, 0x82, 0xa4, 0x3b, 0xfb, 0x9a, 0xdd, 0xa5, 0x26, 0xd9, + 0xe9, 0x6a, 0x3a, 0x9e, 0x7b, 0x98, 0xa1, 0x32, 0xf8, 0x86, 0x00, 0x93, 0x19, 0xe1, 0xdc, 0x31, + 0x76, 0x5d, 0xc1, 0xf1, 0x1c, 0x9b, 0x11, 0x14, 0xc6, 0xb9, 0x9d, 0x07, 0x89, 0x48, 0x22, 0x54, + 0xf1, 0x79, 0x8a, 0x56, 0xe8, 0xee, 0x77, 0x83, 0xf5, 0x3e, 0x04, 0x79, 0x82, 0xe9, 0x57, 0xfa, + 0x28, 0x73, 0xdc, 0xba, 0xfb, 0x81, 0x1a, 0x9f, 0x81, 0x93, 0x04, 0xa9, 0x83, 0x5d, 0xad, 0xa5, + 0xb9, 0x5a, 0x00, 0xfb, 0x71, 0x8a, 0x4d, 0xc4, 0xbe, 0xce, 0x0b, 0x43, 0xed, 0xb4, 0x7b, 0x3b, + 0x87, 0x9e, 0x62, 0x3d, 0xc1, 0xda, 0x49, 0x60, 0x42, 0xb5, 0xde, 0x35, 0xe7, 0x5c, 0x5e, 0x86, + 0x5c, 0x50, 0xef, 0x51, 0x06, 0x98, 0xe6, 0x4b, 0x11, 0xe2, 0x04, 0x55, 0x37, 0x57, 0x88, 0xfb, + 0xf2, 0x5a, 0x4d, 0x8a, 0x12, 0x37, 0x6a, 0xad, 0xde, 0xac, 0xa9, 0xca, 0xf6, 0x46, 0xb3, 0xbe, + 0x5e, 0x93, 0x62, 0x01, 0xc7, 0xfe, 0x46, 0x3c, 0xfd, 0x88, 0x74, 0x4e, 0xfe, 0x85, 0x18, 0x14, + 0xc2, 0x91, 0x1a, 0x7a, 0x2f, 0x9c, 0x12, 0x09, 0x17, 0x07, 0xbb, 0xea, 0x1d, 0xc3, 0xa6, 0x13, + 0xb2, 0xa3, 0xb1, 0xc5, 0xd1, 0xd3, 0x9f, 0x59, 0x8e, 0xd5, 0xc0, 0xee, 0xfb, 0x0d, 0x9b, 0x4c, + 0xb7, 0x8e, 0xe6, 0xa2, 0x35, 0x58, 0x30, 0x2d, 0xd5, 0x71, 0x35, 0xb3, 0xa5, 0xd9, 0x2d, 0xd5, + 0x4f, 0x75, 0xa9, 0x9a, 0xae, 0x63, 0xc7, 0xb1, 0xd8, 0x42, 0xe8, 0x71, 0x79, 0xc0, 0xb4, 0x1a, + 0x1c, 0xd9, 0x5f, 0x21, 0xca, 0x1c, 0xb5, 0x4f, 0x7d, 0x63, 0xa3, 0xd4, 0xf7, 0x0c, 0x64, 0x3a, + 0x5a, 0x57, 0xc5, 0xa6, 0x6b, 0x1f, 0x52, 0xff, 0x3c, 0xad, 0xa4, 0x3b, 0x5a, 0xb7, 0x46, 0xbe, + 0xd1, 0x4d, 0x78, 0xc4, 0x47, 0x55, 0xdb, 0x78, 0x4f, 0xd3, 0x0f, 0x55, 0xea, 0x8c, 0xd3, 0xb4, + 0x81, 0xaa, 0x5b, 0xe6, 0x6e, 0xdb, 0xd0, 0x5d, 0x87, 0xda, 0x07, 0x66, 0xe3, 0x64, 0x9f, 0x62, + 0x8d, 0x12, 0xdc, 0x70, 0x2c, 0x93, 0xfa, 0xe0, 0x55, 0x81, 0xfd, 0x15, 0x09, 0xbf, 0x6e, 0xc4, + 0xd3, 0x71, 0x29, 0x71, 0x23, 0x9e, 0x4e, 0x48, 0xc9, 0x1b, 0xf1, 0x74, 0x52, 0x4a, 0xdd, 0x88, + 0xa7, 0xd3, 0x52, 0xe6, 0x46, 0x3c, 0x9d, 0x91, 0x40, 0xfe, 0xd9, 0x34, 0xe4, 0x82, 0x91, 0x01, + 0x09, 0xb4, 0x74, 0xba, 0x36, 0x46, 0xa8, 0xf5, 0x7c, 0xe8, 0xc8, 0x38, 0x62, 0xa9, 0x4a, 0x16, + 0xcd, 0xe5, 0x24, 0x73, 0xc3, 0x15, 0x46, 0x49, 0x1c, 0x16, 0xa2, 0xd6, 0x98, 0xb9, 0x3d, 0x69, + 0x85, 0x7f, 0xa1, 0x55, 0x48, 0xbe, 0xee, 0x50, 0xde, 0x49, 0xca, 0xfb, 0x3d, 0x47, 0xf3, 0xbe, + 0xd1, 0xa0, 0xcc, 0x33, 0x37, 0x1a, 0xea, 0xc6, 0xa6, 0xb2, 0x5e, 0x5e, 0x53, 0x38, 0x39, 0x3a, + 0x0d, 0xf1, 0xb6, 0xf6, 0xc6, 0x61, 0x78, 0x79, 0xa5, 0x20, 0xb4, 0x04, 0xc5, 0x9e, 0x79, 0x1b, + 0xdb, 0xc6, 0xae, 0x41, 0x86, 0x8a, 0x60, 0x15, 0x83, 0x58, 0x05, 0xbf, 0x74, 0x8d, 0xe0, 0x4f, + 0xa8, 0x1e, 0xa7, 0x21, 0x7e, 0x07, 0x6b, 0xb7, 0xc2, 0x8b, 0x20, 0x05, 0xa1, 0xf3, 0x90, 0x6b, + 0xe1, 0x9d, 0xde, 0x9e, 0x6a, 0xe3, 0x96, 0xa6, 0xbb, 0x61, 0xd3, 0x9f, 0xa5, 0x45, 0x0a, 0x2d, + 0x41, 0x2f, 0x41, 0x86, 0x8c, 0x91, 0x49, 0xc7, 0x78, 0x9a, 0x8a, 0xe0, 0x89, 0xa3, 0x45, 0xc0, + 0x87, 0x58, 0x10, 0x29, 0x3e, 0x3d, 0xba, 0x06, 0x49, 0x57, 0xb3, 0xf7, 0xb0, 0x4b, 0x2d, 0x7f, + 0x61, 0x48, 0xf2, 0x63, 0x08, 0xa7, 0x26, 0xa5, 0xa0, 0x31, 0x2d, 0xa7, 0x7e, 0x17, 0xad, 0xcc, + 0x45, 0x48, 0x50, 0xf5, 0x40, 0x00, 0x5c, 0x41, 0xa4, 0x29, 0x94, 0x86, 0x78, 0x75, 0x53, 0x21, + 0x96, 0x46, 0x82, 0x1c, 0x83, 0xaa, 0x5b, 0xf5, 0x5a, 0xb5, 0x26, 0x45, 0xe5, 0xcb, 0x90, 0x64, + 0x63, 0x4e, 0xac, 0x90, 0x37, 0xea, 0xd2, 0x14, 0xff, 0xe4, 0x3c, 0x22, 0xa2, 0x74, 0x7b, 0xbd, + 0x52, 0x53, 0xa4, 0xa8, 0xbc, 0x0d, 0xc5, 0x3e, 0x39, 0xa1, 0x13, 0x30, 0xad, 0xd4, 0x9a, 0xb5, + 0x0d, 0x12, 0x67, 0xa9, 0xdb, 0x1b, 0x2f, 0x6d, 0x6c, 0xbe, 0x7f, 0x43, 0x9a, 0x0a, 0x83, 0x85, + 0x49, 0x8b, 0xa0, 0x59, 0x90, 0x7c, 0x70, 0x63, 0x73, 0x5b, 0xa1, 0xad, 0xf9, 0xd6, 0x28, 0x48, + 0xfd, 0x52, 0x43, 0xa7, 0x60, 0xa6, 0x59, 0x56, 0x56, 0x6b, 0x4d, 0x95, 0xc5, 0x8e, 0x1e, 0xeb, + 0x59, 0x90, 0x82, 0x05, 0xd7, 0xea, 0x34, 0x34, 0x5e, 0x80, 0x33, 0x41, 0x68, 0xed, 0x95, 0x66, + 0x6d, 0xa3, 0x41, 0x2b, 0x2f, 0x6f, 0xac, 0x12, 0xfb, 0xda, 0xc7, 0x4f, 0x44, 0xab, 0x31, 0xd2, + 0xd4, 0x30, 0xbf, 0xda, 0xda, 0x8a, 0x14, 0xef, 0x07, 0x6f, 0x6e, 0xd4, 0x36, 0xaf, 0x49, 0x89, + 0xfe, 0xda, 0x69, 0x04, 0x9b, 0x44, 0x25, 0x38, 0xd9, 0x0f, 0x55, 0x6b, 0x1b, 0x4d, 0xe5, 0x55, + 0x29, 0xd5, 0x5f, 0x71, 0xa3, 0xa6, 0xdc, 0xac, 0x57, 0x6b, 0x52, 0x1a, 0x9d, 0x04, 0x14, 0x6e, + 0x51, 0xf3, 0xfa, 0xe6, 0x8a, 0x94, 0x19, 0xb0, 0x28, 0xb2, 0x03, 0xb9, 0x60, 0x18, 0xf9, 0x95, + 0xc9, 0x25, 0x7d, 0x2c, 0x0a, 0xd9, 0x40, 0x58, 0x48, 0xfc, 0x79, 0xad, 0xdd, 0xb6, 0xee, 0xa8, + 0x5a, 0xdb, 0xd0, 0x1c, 0x6e, 0x6f, 0x80, 0x82, 0xca, 0x04, 0x32, 0xe9, 0xfc, 0x9e, 0xdc, 0xc2, + 0x27, 0xbf, 0x1a, 0x2d, 0x7c, 0x42, 0x4a, 0xca, 0xdf, 0x1f, 0x01, 0xa9, 0x3f, 0xde, 0xeb, 0xeb, + 0x7e, 0x64, 0x54, 0xf7, 0xbf, 0x22, 0x63, 0xf7, 0x89, 0x08, 0x14, 0xc2, 0x41, 0x5e, 0x5f, 0xf3, + 0xce, 0xfe, 0x99, 0x36, 0xef, 0xb7, 0xa2, 0x90, 0x0f, 0x85, 0x76, 0x93, 0xb6, 0xee, 0x83, 0x30, + 0x6d, 0xb4, 0x70, 0xa7, 0x6b, 0xb9, 0xd8, 0xd4, 0x0f, 0xd5, 0x36, 0xbe, 0x8d, 0xdb, 0x73, 0x32, + 0x35, 0xca, 0x17, 0x8f, 0x0e, 0x1e, 0x97, 0xea, 0x3e, 0xdd, 0x1a, 0x21, 0x5b, 0x9e, 0xa9, 0xaf, + 0xd4, 0xd6, 0xb7, 0x36, 0x9b, 0xb5, 0x8d, 0xea, 0xab, 0xc2, 0xba, 0x28, 0x92, 0xd1, 0x87, 0xf6, + 0x2e, 0x1a, 0xed, 0x2d, 0x90, 0xfa, 0x1b, 0x45, 0x6c, 0xc5, 0x90, 0x66, 0x49, 0x53, 0x68, 0x06, + 0x8a, 0x1b, 0x9b, 0x6a, 0xa3, 0xbe, 0x52, 0x53, 0x6b, 0xd7, 0xae, 0xd5, 0xaa, 0xcd, 0x06, 0x4b, + 0x07, 0x7a, 0xd8, 0x4d, 0x29, 0x1a, 0x14, 0xf1, 0xf7, 0xc5, 0x60, 0x66, 0x48, 0x4b, 0x50, 0x99, + 0x07, 0xf2, 0x2c, 0xb7, 0xf0, 0xc4, 0x24, 0xad, 0x5f, 0x22, 0xae, 0xf4, 0x96, 0x66, 0xbb, 0x3c, + 0xee, 0x7f, 0x14, 0x88, 0x94, 0x4c, 0x97, 0xac, 0xec, 0x36, 0x4f, 0xb3, 0xb2, 0xe8, 0xbe, 0xe8, + 0xc3, 0x59, 0xa6, 0xf5, 0x71, 0x40, 0x5d, 0xcb, 0x31, 0x5c, 0xe3, 0x36, 0x56, 0x0d, 0x53, 0xe4, + 0x64, 0x49, 0xb4, 0x1f, 0x57, 0x24, 0x51, 0x52, 0x37, 0x5d, 0x0f, 0xdb, 0xc4, 0x7b, 0x5a, 0x1f, + 0x36, 0xf1, 0x3c, 0x62, 0x8a, 0x24, 0x4a, 0x3c, 0xec, 0xb3, 0x90, 0x6b, 0x59, 0x3d, 0x12, 0x02, + 0x31, 0x3c, 0x62, 0x2d, 0x22, 0x4a, 0x96, 0xc1, 0x3c, 0x14, 0x1e, 0xdc, 0xfa, 0xc9, 0xe0, 0x9c, + 0x92, 0x65, 0x30, 0x86, 0x72, 0x0e, 0x8a, 0xda, 0xde, 0x9e, 0x4d, 0x98, 0x0b, 0x46, 0x2c, 0x5c, + 0x2f, 0x78, 0x60, 0x8a, 0x58, 0xba, 0x01, 0x69, 0x21, 0x07, 0xe2, 0xc1, 0x12, 0x49, 0xa8, 0x5d, + 0x96, 0x83, 0x8a, 0x9e, 0xcf, 0x28, 0x69, 0x53, 0x14, 0x9e, 0x85, 0x9c, 0xe1, 0xa8, 0xfe, 0xde, + 0x56, 0x74, 0x31, 0x7a, 0x3e, 0xad, 0x64, 0x0d, 0xc7, 0xdb, 0x17, 0x90, 0x7f, 0x34, 0x0a, 0x85, + 0xf0, 0xae, 0x1d, 0x5a, 0x81, 0x74, 0xdb, 0xd2, 0x35, 0xaa, 0x5a, 0x6c, 0xcb, 0xf8, 0xfc, 0x98, + 0x8d, 0xbe, 0xa5, 0x35, 0x8e, 0xaf, 0x78, 0x94, 0xa5, 0x7f, 0x13, 0x81, 0xb4, 0x00, 0xa3, 0x93, + 0x10, 0xef, 0x6a, 0xee, 0x3e, 0x65, 0x97, 0xa8, 0x44, 0xa5, 0x88, 0x42, 0xbf, 0x09, 0xdc, 0xe9, + 0x6a, 0x26, 0x55, 0x01, 0x0e, 0x27, 0xdf, 0x64, 0x5c, 0xdb, 0x58, 0x6b, 0xd1, 0x5c, 0x80, 0xd5, + 0xe9, 0x60, 0xd3, 0x75, 0xc4, 0xb8, 0x72, 0x78, 0x95, 0x83, 0xd1, 0x63, 0x30, 0xed, 0xda, 0x9a, + 0xd1, 0x0e, 0xe1, 0xc6, 0x29, 0xae, 0x24, 0x0a, 0x3c, 0xe4, 0x65, 0x38, 0x2d, 0xf8, 0xb6, 0xb0, + 0xab, 0xe9, 0xfb, 0xb8, 0xe5, 0x13, 0x25, 0x69, 0xce, 0xef, 0x14, 0x47, 0x58, 0xe1, 0xe5, 0x82, + 0x56, 0xfe, 0x6c, 0x14, 0xa6, 0x45, 0xf6, 0xa2, 0xe5, 0x09, 0x6b, 0x1d, 0x40, 0x33, 0x4d, 0xcb, + 0x0d, 0x8a, 0x6b, 0x50, 0x95, 0x07, 0xe8, 0x96, 0xca, 0x1e, 0x91, 0x12, 0x60, 0x50, 0xfa, 0xbd, + 0x08, 0x80, 0x5f, 0x34, 0x52, 0x6e, 0x0b, 0x90, 0xe5, 0x7b, 0xb2, 0x74, 0x63, 0x9f, 0x25, 0xbc, + 0x80, 0x81, 0xae, 0x19, 0x6d, 0x9a, 0x96, 0xdc, 0xc1, 0x7b, 0x86, 0xc9, 0xf7, 0x53, 0xd8, 0x87, + 0x48, 0x4b, 0xc6, 0xfd, 0xed, 0x29, 0x05, 0xd2, 0x0e, 0xee, 0x68, 0xa6, 0x6b, 0xe8, 0x7c, 0x87, + 0xe4, 0xca, 0xb1, 0x1a, 0xbf, 0xd4, 0xe0, 0xd4, 0x8a, 0xc7, 0x47, 0x3e, 0x0f, 0x69, 0x01, 0x25, + 0x8e, 0xdf, 0xc6, 0xe6, 0x46, 0x4d, 0x9a, 0x42, 0x29, 0x88, 0x35, 0x6a, 0x4d, 0x29, 0x42, 0xc2, + 0xce, 0xf2, 0x5a, 0xbd, 0xdc, 0x90, 0xa2, 0x95, 0xbf, 0x02, 0x33, 0xba, 0xd5, 0xe9, 0xaf, 0xb0, + 0x22, 0xf5, 0xa5, 0xfc, 0x9c, 0xeb, 0x91, 0xd7, 0x9e, 0xe0, 0x48, 0x7b, 0x56, 0x5b, 0x33, 0xf7, + 0x96, 0x2c, 0x7b, 0xcf, 0x3f, 0x16, 0x41, 0xa2, 0x03, 0x27, 0x70, 0x38, 0xa2, 0xbb, 0xf3, 0xa7, + 0x91, 0xc8, 0x0f, 0x46, 0x63, 0xab, 0x5b, 0x95, 0x1f, 0x8f, 0x96, 0x56, 0x19, 0xe1, 0x96, 0xe8, + 0x8e, 0x82, 0x77, 0xdb, 0x58, 0x27, 0x8d, 0x87, 0xdf, 0x7f, 0x0c, 0x66, 0xf7, 0xac, 0x3d, 0x8b, + 0x72, 0xba, 0x48, 0x7e, 0xf1, 0x73, 0x15, 0x19, 0x0f, 0x5a, 0x1a, 0x7b, 0x08, 0x63, 0x79, 0x03, + 0x66, 0x38, 0xb2, 0x4a, 0xb7, 0x6f, 0x59, 0x72, 0x01, 0x1d, 0x99, 0xd9, 0x9e, 0xfb, 0xc9, 0xdf, + 0xa1, 0x5e, 0x89, 0x32, 0xcd, 0x49, 0x49, 0x19, 0xcb, 0x3f, 0x2c, 0x2b, 0x70, 0x22, 0xc4, 0x8f, + 0xd9, 0x08, 0x6c, 0x8f, 0xe1, 0xf8, 0xcf, 0x39, 0xc7, 0x99, 0x00, 0xc7, 0x06, 0x27, 0x5d, 0xae, + 0x42, 0xfe, 0x38, 0xbc, 0xfe, 0x05, 0xe7, 0x95, 0xc3, 0x41, 0x26, 0xab, 0x50, 0xa4, 0x4c, 0xf4, + 0x9e, 0xe3, 0x5a, 0x1d, 0x6a, 0x80, 0x8f, 0x66, 0xf3, 0x2f, 0x7f, 0x87, 0x4d, 0xda, 0x02, 0x21, + 0xab, 0x7a, 0x54, 0xcb, 0xcb, 0x40, 0x77, 0xac, 0x5b, 0x58, 0x6f, 0x8f, 0xe1, 0xf0, 0x2b, 0xbc, + 0x21, 0x1e, 0xfe, 0xf2, 0x4d, 0x98, 0x25, 0xbf, 0xa9, 0x7d, 0x0c, 0xb6, 0x64, 0x7c, 0x1a, 0x7c, + 0xee, 0xdf, 0x7d, 0x98, 0xd9, 0x85, 0x19, 0x8f, 0x41, 0xa0, 0x4d, 0x81, 0x51, 0xdc, 0xc3, 0xae, + 0x8b, 0x6d, 0x47, 0xd5, 0xda, 0xc3, 0x9a, 0x17, 0xc8, 0x23, 0xce, 0x7d, 0xef, 0x17, 0xc3, 0xa3, + 0xb8, 0xca, 0x28, 0xcb, 0xed, 0xf6, 0xf2, 0x36, 0x9c, 0x1a, 0xa2, 0x15, 0x13, 0xf0, 0xfc, 0x3e, + 0xce, 0x73, 0x76, 0x40, 0x33, 0x08, 0xdb, 0x2d, 0x10, 0x70, 0x6f, 0x2c, 0x27, 0xe0, 0xf9, 0x71, + 0xce, 0x13, 0x71, 0x5a, 0x31, 0xa4, 0x84, 0xe3, 0x0d, 0x98, 0xbe, 0x8d, 0xed, 0x1d, 0xcb, 0xe1, + 0xb9, 0xdb, 0x09, 0xd8, 0x7d, 0x82, 0xb3, 0x2b, 0x72, 0x42, 0x9a, 0xcc, 0x25, 0xbc, 0x9e, 0x87, + 0xf4, 0xae, 0xa6, 0xe3, 0x09, 0x58, 0xdc, 0xe3, 0x2c, 0x52, 0x04, 0x9f, 0x90, 0x96, 0x21, 0xb7, + 0x67, 0xf1, 0x25, 0x72, 0x3c, 0xf9, 0xf7, 0x73, 0xf2, 0xac, 0xa0, 0xe1, 0x2c, 0xba, 0x56, 0xb7, + 0xd7, 0x26, 0xeb, 0xe7, 0x78, 0x16, 0x3f, 0x20, 0x58, 0x08, 0x1a, 0xce, 0xe2, 0x18, 0x62, 0xfd, + 0xa4, 0x60, 0xe1, 0x04, 0xe4, 0xf9, 0x22, 0x64, 0x2d, 0xb3, 0x7d, 0x68, 0x99, 0x93, 0x34, 0xe2, + 0x53, 0x9c, 0x03, 0x70, 0x12, 0xc2, 0xe0, 0x2a, 0x64, 0x26, 0x1d, 0x88, 0x1f, 0xfe, 0xa2, 0x98, + 0x1e, 0x62, 0x04, 0x56, 0xa1, 0x28, 0x0c, 0x94, 0x61, 0x99, 0x13, 0xb0, 0xf8, 0x11, 0xce, 0xa2, + 0x10, 0x20, 0xe3, 0xdd, 0x70, 0xb1, 0xe3, 0xee, 0xe1, 0x49, 0x98, 0xfc, 0xa8, 0xe8, 0x06, 0x27, + 0xe1, 0xa2, 0xdc, 0xc1, 0xa6, 0xbe, 0x3f, 0x19, 0x87, 0x4f, 0x0b, 0x51, 0x0a, 0x1a, 0xc2, 0xa2, + 0x0a, 0xf9, 0x8e, 0x66, 0x3b, 0xfb, 0x5a, 0x7b, 0xa2, 0xe1, 0xf8, 0x31, 0xce, 0x23, 0xe7, 0x11, + 0x71, 0x89, 0xf4, 0xcc, 0xe3, 0xb0, 0xf9, 0x71, 0x21, 0x91, 0x00, 0x19, 0x9f, 0x7a, 0x8e, 0x4b, + 0x13, 0xdd, 0xc7, 0xe1, 0xf6, 0xb7, 0xc5, 0xd4, 0x63, 0xb4, 0xeb, 0x41, 0x8e, 0x57, 0x21, 0xe3, + 0x18, 0x6f, 0x4c, 0xc4, 0xe6, 0xef, 0x88, 0x91, 0xa6, 0x04, 0x84, 0xf8, 0x55, 0x38, 0x3d, 0x74, + 0x99, 0x98, 0x80, 0xd9, 0xdf, 0xe5, 0xcc, 0x4e, 0x0e, 0x59, 0x2a, 0xb8, 0x49, 0x38, 0x2e, 0xcb, + 0xbf, 0x27, 0x4c, 0x02, 0xee, 0xe3, 0xb5, 0x45, 0x82, 0x16, 0x47, 0xdb, 0x3d, 0x9e, 0xd4, 0xfe, + 0xbe, 0x90, 0x1a, 0xa3, 0x0d, 0x49, 0xad, 0x09, 0x27, 0x39, 0xc7, 0xe3, 0x8d, 0xeb, 0x4f, 0x08, + 0xc3, 0xca, 0xa8, 0xb7, 0xc3, 0xa3, 0xfb, 0x35, 0x50, 0xf2, 0xc4, 0x29, 0xbc, 0x63, 0x47, 0xed, + 0x68, 0xdd, 0x09, 0x38, 0xff, 0x24, 0xe7, 0x2c, 0x2c, 0xbe, 0xe7, 0x5e, 0x3b, 0xeb, 0x5a, 0x97, + 0x30, 0x7f, 0x05, 0xe6, 0x04, 0xf3, 0x9e, 0x69, 0x63, 0xdd, 0xda, 0x33, 0x8d, 0x37, 0x70, 0x6b, + 0x02, 0xd6, 0x3f, 0xd5, 0x37, 0x54, 0xdb, 0x01, 0x72, 0xc2, 0xb9, 0x0e, 0x92, 0xe7, 0xab, 0xa8, + 0x46, 0xa7, 0x6b, 0xd9, 0xee, 0x18, 0x8e, 0x3f, 0x2d, 0x46, 0xca, 0xa3, 0xab, 0x53, 0xb2, 0xe5, + 0x1a, 0xb0, 0xd3, 0x1f, 0x93, 0xaa, 0xe4, 0x67, 0x38, 0xa3, 0xbc, 0x4f, 0xc5, 0x0d, 0x87, 0x6e, + 0x75, 0xba, 0x9a, 0x3d, 0x89, 0xfd, 0xfb, 0x07, 0xc2, 0x70, 0x70, 0x12, 0x6e, 0x38, 0x88, 0x47, + 0x47, 0x56, 0xfb, 0x09, 0x38, 0xfc, 0x8c, 0x30, 0x1c, 0x82, 0x86, 0xb3, 0x10, 0x0e, 0xc3, 0x04, + 0x2c, 0x7e, 0x56, 0xb0, 0x10, 0x34, 0x84, 0xc5, 0xcb, 0xfe, 0x42, 0x6b, 0xe3, 0x3d, 0xc3, 0x71, + 0x6d, 0xe6, 0x92, 0x1f, 0xcd, 0xea, 0xe7, 0xbe, 0x18, 0x76, 0xc2, 0x94, 0x00, 0x29, 0xb1, 0x44, + 0x7c, 0xeb, 0x83, 0x86, 0x6c, 0xe3, 0x1b, 0xf6, 0xf3, 0xc2, 0x12, 0x05, 0xc8, 0x48, 0xdb, 0x02, + 0x1e, 0x22, 0x11, 0xbb, 0x4e, 0x02, 0x95, 0x09, 0xd8, 0xfd, 0xc3, 0xbe, 0xc6, 0x35, 0x04, 0x2d, + 0xe1, 0x19, 0xf0, 0x7f, 0x7a, 0xe6, 0x2d, 0x7c, 0x38, 0x91, 0x76, 0xfe, 0x42, 0x9f, 0xff, 0xb3, + 0xcd, 0x28, 0x99, 0x0d, 0x29, 0xf6, 0xf9, 0x53, 0x68, 0xdc, 0x59, 0xbf, 0xb9, 0x6f, 0x78, 0x9b, + 0xf7, 0x37, 0xec, 0x4e, 0x2d, 0xaf, 0x11, 0x25, 0x0f, 0x3b, 0x3d, 0xe3, 0x99, 0x7d, 0xf8, 0x6d, + 0x4f, 0xcf, 0x43, 0x3e, 0xcf, 0xf2, 0x35, 0xc8, 0x87, 0x1c, 0x9e, 0xf1, 0xac, 0xbe, 0x91, 0xb3, + 0xca, 0x05, 0xfd, 0x9d, 0xe5, 0xcb, 0x10, 0x27, 0xce, 0xcb, 0x78, 0xf2, 0x6f, 0xe2, 0xe4, 0x14, + 0x7d, 0xf9, 0x05, 0x48, 0x0b, 0xa7, 0x65, 0x3c, 0xe9, 0x5f, 0xe3, 0xa4, 0x1e, 0x09, 0x21, 0x17, + 0x0e, 0xcb, 0x78, 0xf2, 0xbf, 0x2e, 0xc8, 0x05, 0x09, 0x21, 0x9f, 0x5c, 0x84, 0xbf, 0xf4, 0x2d, + 0x71, 0xbe, 0xe8, 0x08, 0xd9, 0x5d, 0x85, 0x14, 0xf7, 0x54, 0xc6, 0x53, 0x7f, 0x33, 0xaf, 0x5c, + 0x50, 0x2c, 0x3f, 0x0b, 0x89, 0x09, 0x05, 0xfe, 0x6d, 0x9c, 0x94, 0xe1, 0x2f, 0x57, 0x21, 0x1b, + 0xf0, 0x4e, 0xc6, 0x93, 0x7f, 0x3b, 0x27, 0x0f, 0x52, 0x91, 0xa6, 0x73, 0xef, 0x64, 0x3c, 0x83, + 0xbf, 0x21, 0x9a, 0xce, 0x29, 0x88, 0xd8, 0x84, 0x63, 0x32, 0x9e, 0xfa, 0xa3, 0x42, 0xea, 0x82, + 0x64, 0xf9, 0x45, 0xc8, 0x78, 0x8b, 0xcd, 0x78, 0xfa, 0xef, 0xe0, 0xf4, 0x3e, 0x0d, 0x91, 0x40, + 0x60, 0xb1, 0x1b, 0xcf, 0xe2, 0x6f, 0x0a, 0x09, 0x04, 0xa8, 0xc8, 0x34, 0xea, 0x77, 0x60, 0xc6, + 0x73, 0xfa, 0x4e, 0x31, 0x8d, 0xfa, 0xfc, 0x17, 0x32, 0x9a, 0xd4, 0xe6, 0x8f, 0x67, 0xf1, 0x5d, + 0x62, 0x34, 0x29, 0x3e, 0x69, 0x46, 0xbf, 0x47, 0x30, 0x9e, 0xc7, 0xf7, 0x88, 0x66, 0xf4, 0x39, + 0x04, 0xcb, 0x5b, 0x80, 0x06, 0xbd, 0x81, 0xf1, 0xfc, 0x3e, 0xc6, 0xf9, 0x4d, 0x0f, 0x38, 0x03, + 0xcb, 0xef, 0x87, 0x93, 0xc3, 0x3d, 0x81, 0xf1, 0x5c, 0xbf, 0xf7, 0xed, 0xbe, 0xd8, 0x2d, 0xe8, + 0x08, 0x2c, 0x37, 0xfd, 0x25, 0x25, 0xe8, 0x05, 0x8c, 0x67, 0xfb, 0x7d, 0x6f, 0x87, 0x0d, 0x77, + 0xd0, 0x09, 0x58, 0x2e, 0x03, 0xf8, 0x0b, 0xf0, 0x78, 0x5e, 0x9f, 0xe0, 0xbc, 0x02, 0x44, 0x64, + 0x6a, 0xf0, 0xf5, 0x77, 0x3c, 0xfd, 0x3d, 0x31, 0x35, 0x38, 0x05, 0x99, 0x1a, 0x62, 0xe9, 0x1d, + 0x4f, 0xfd, 0xfd, 0x62, 0x6a, 0x08, 0x12, 0xa2, 0xd9, 0x81, 0xd5, 0x6d, 0x3c, 0x87, 0x4f, 0x09, + 0xcd, 0x0e, 0x50, 0x2d, 0x6f, 0xc0, 0xf4, 0xc0, 0x82, 0x38, 0x9e, 0xd5, 0x0f, 0x72, 0x56, 0x52, + 0xff, 0x7a, 0x18, 0x5c, 0xbc, 0xf8, 0x62, 0x38, 0x9e, 0xdb, 0x0f, 0xf5, 0x2d, 0x5e, 0x7c, 0x2d, + 0x5c, 0xbe, 0x0a, 0x69, 0xb3, 0xd7, 0x6e, 0x93, 0xc9, 0x83, 0x8e, 0x3e, 0x9f, 0x3b, 0xf7, 0x5f, + 0xbf, 0xc4, 0xa5, 0x23, 0x08, 0x96, 0x2f, 0x43, 0x02, 0x77, 0x76, 0x70, 0x6b, 0x1c, 0xe5, 0x17, + 0xbe, 0x24, 0x0c, 0x26, 0xc1, 0x5e, 0x7e, 0x11, 0x80, 0xa5, 0x46, 0xe8, 0xc6, 0xf9, 0x18, 0xda, + 0xdf, 0xfb, 0x12, 0x3f, 0x10, 0xe7, 0x93, 0xf8, 0x0c, 0xd8, 0xf1, 0xba, 0xa3, 0x19, 0x7c, 0x31, + 0xcc, 0x80, 0x8e, 0xc8, 0xf3, 0x90, 0x7a, 0xdd, 0xb1, 0x4c, 0x57, 0xdb, 0x1b, 0x47, 0xfd, 0xfb, + 0x9c, 0x5a, 0xe0, 0x13, 0x81, 0x75, 0x2c, 0x1b, 0xbb, 0xda, 0x9e, 0x33, 0x8e, 0xf6, 0xbf, 0x71, + 0x5a, 0x8f, 0x80, 0x10, 0xeb, 0x9a, 0xe3, 0x4e, 0xd2, 0xef, 0xff, 0x2e, 0x88, 0x05, 0x01, 0x69, + 0x34, 0xf9, 0x7d, 0x0b, 0x1f, 0x8e, 0xa3, 0xfd, 0x03, 0xd1, 0x68, 0x8e, 0xbf, 0xfc, 0x02, 0x64, + 0xc8, 0x4f, 0x76, 0xca, 0x75, 0x0c, 0xf1, 0x1f, 0x72, 0x62, 0x9f, 0x82, 0xd4, 0xec, 0xb8, 0x2d, + 0xd7, 0x18, 0x2f, 0xec, 0x3f, 0xe2, 0x23, 0x2d, 0xf0, 0x97, 0xcb, 0x90, 0x75, 0xdc, 0x56, 0xab, + 0xc7, 0xfd, 0xd3, 0x31, 0xe4, 0x7f, 0xfc, 0x25, 0x2f, 0x65, 0xe1, 0xd1, 0x90, 0xd1, 0xbe, 0x73, + 0xcb, 0xed, 0x5a, 0x74, 0xbf, 0x65, 0x1c, 0x87, 0xb7, 0x39, 0x87, 0x00, 0xc9, 0x72, 0x15, 0x72, + 0xa4, 0x2f, 0x36, 0xee, 0x62, 0xba, 0x39, 0x36, 0x86, 0xc5, 0x9f, 0x70, 0x01, 0x84, 0x88, 0x2a, + 0x5f, 0xff, 0x2b, 0x6f, 0xcd, 0x47, 0x3e, 0xfb, 0xd6, 0x7c, 0xe4, 0xb7, 0xde, 0x9a, 0x8f, 0x7c, + 0xf4, 0x73, 0xf3, 0x53, 0x9f, 0xfd, 0xdc, 0xfc, 0xd4, 0x6f, 0x7c, 0x6e, 0x7e, 0x6a, 0x78, 0x96, + 0x18, 0x56, 0xad, 0x55, 0x8b, 0xe5, 0x87, 0x5f, 0x7b, 0x78, 0xcf, 0x70, 0xf7, 0x7b, 0x3b, 0x4b, + 0xba, 0xd5, 0xb9, 0xa8, 0x5b, 0x4e, 0xc7, 0x72, 0x2e, 0x86, 0xf3, 0xba, 0xf4, 0x17, 0xfc, 0xef, + 0x08, 0x89, 0x99, 0xc3, 0xe9, 0x5c, 0xcd, 0x3c, 0x1c, 0x75, 0x99, 0xee, 0x0a, 0xc4, 0xca, 0xe6, + 0x21, 0x3a, 0xcd, 0x0c, 0x9c, 0xda, 0xb3, 0xdb, 0xfc, 0xa8, 0x65, 0x8a, 0x7c, 0x6f, 0xdb, 0x6d, + 0x34, 0xeb, 0x9f, 0x87, 0x8e, 0x9c, 0xcf, 0xf1, 0x43, 0xce, 0x95, 0x6f, 0x8f, 0x1c, 0xaf, 0x27, + 0xe9, 0xb2, 0x79, 0x48, 0x3b, 0xb2, 0x15, 0x79, 0xed, 0xf1, 0xb1, 0x79, 0xee, 0x5b, 0xa6, 0x75, + 0xc7, 0x24, 0xcd, 0xee, 0xee, 0x88, 0x1c, 0xf7, 0x7c, 0x7f, 0x8e, 0xfb, 0xfd, 0xb8, 0xdd, 0x7e, + 0x89, 0xe0, 0x35, 0x09, 0xc9, 0x4e, 0x92, 0x9d, 0xea, 0x87, 0xef, 0x8c, 0xc2, 0xfc, 0x40, 0x3a, + 0x9b, 0x2b, 0xc1, 0x28, 0x21, 0x2c, 0x43, 0x7a, 0x45, 0xe8, 0xd6, 0x1c, 0xa4, 0x1c, 0xac, 0x5b, + 0x66, 0xcb, 0xa1, 0x82, 0x88, 0x29, 0xe2, 0x93, 0x08, 0xc2, 0xd4, 0x4c, 0xcb, 0xe1, 0x87, 0x95, + 0xd9, 0x47, 0xe5, 0xe3, 0xc7, 0x14, 0x44, 0x5e, 0xd4, 0x24, 0xa4, 0xf1, 0xd4, 0x84, 0xd2, 0x10, + 0x9d, 0x08, 0x65, 0xfe, 0x27, 0x95, 0xca, 0xf7, 0x44, 0x61, 0xa1, 0x5f, 0x2a, 0x64, 0x66, 0x39, + 0xae, 0xd6, 0xe9, 0x8e, 0x12, 0xcb, 0x55, 0xc8, 0x34, 0x05, 0xce, 0xb1, 0xe5, 0x72, 0xef, 0x98, + 0x72, 0x29, 0x78, 0x55, 0x09, 0xc1, 0x5c, 0x9a, 0x50, 0x30, 0x5e, 0x3f, 0xee, 0x4b, 0x32, 0xff, + 0x2b, 0x09, 0xa7, 0xd9, 0x74, 0x52, 0xd9, 0x54, 0x62, 0x1f, 0x5c, 0x26, 0xb9, 0x60, 0xd1, 0xf8, + 0x7d, 0x12, 0xf9, 0x25, 0x98, 0xa9, 0x13, 0x6b, 0x41, 0xa2, 0x20, 0x7f, 0x87, 0x67, 0xe8, 0x79, + 0xee, 0xc5, 0x90, 0xc3, 0xcf, 0xf7, 0xb7, 0x82, 0x20, 0xf9, 0x1b, 0x22, 0x20, 0x35, 0x74, 0xad, + 0xad, 0xd9, 0x5f, 0x2e, 0x2b, 0xf4, 0x2c, 0x00, 0x3b, 0xee, 0xe1, 0x5d, 0xdc, 0x2b, 0x5c, 0x9a, + 0x5b, 0x0a, 0x76, 0x6e, 0x89, 0xd5, 0x44, 0x4f, 0x50, 0x65, 0x28, 0x2e, 0xf9, 0x79, 0xe1, 0x15, + 0x00, 0xbf, 0x00, 0x9d, 0x81, 0x53, 0x8d, 0x6a, 0x79, 0xad, 0xac, 0x88, 0x43, 0x42, 0x8d, 0xad, + 0x5a, 0xb5, 0x7e, 0xad, 0x5e, 0x5b, 0x91, 0xa6, 0xd0, 0x49, 0x40, 0xc1, 0x42, 0xef, 0x50, 0xd3, + 0x09, 0x98, 0x0e, 0xc2, 0xd9, 0x2d, 0x95, 0x28, 0xf1, 0x14, 0x8d, 0x4e, 0xb7, 0x8d, 0xe9, 0xce, + 0xa3, 0x6a, 0x08, 0xa9, 0x8d, 0x77, 0x42, 0x7e, 0xf5, 0xdf, 0xb3, 0x9b, 0x0b, 0x33, 0x3e, 0xb9, + 0x27, 0xf3, 0xe5, 0x35, 0x98, 0xd6, 0x74, 0x1d, 0x77, 0x43, 0x2c, 0xc7, 0x98, 0x6a, 0xc2, 0x90, + 0xee, 0xa5, 0x72, 0x4a, 0x9f, 0xdb, 0xb3, 0x90, 0x74, 0x68, 0xef, 0xc7, 0xb1, 0xf8, 0x35, 0xce, + 0x82, 0xa3, 0x2f, 0x9b, 0x30, 0x4d, 0x3c, 0x3f, 0xcd, 0xc6, 0x81, 0x66, 0x1c, 0x9d, 0x67, 0xf8, + 0x47, 0x3f, 0xfd, 0x24, 0xdd, 0x59, 0x3d, 0x1b, 0x1e, 0x96, 0x21, 0xea, 0xa4, 0x48, 0x9c, 0xb7, + 0xdf, 0x50, 0x0c, 0x05, 0x51, 0x1f, 0x6f, 0xf0, 0xd1, 0x95, 0xfd, 0x22, 0xaf, 0x6c, 0x7e, 0x98, + 0x0e, 0x04, 0x6a, 0xca, 0x73, 0xae, 0xac, 0xa0, 0x52, 0x1b, 0x35, 0xa7, 0x5f, 0x7b, 0x6c, 0x70, + 0x75, 0x62, 0xff, 0x3d, 0x41, 0x39, 0x5f, 0x0d, 0x56, 0xe3, 0xcd, 0xbd, 0x8f, 0xc7, 0x61, 0x5a, + 0xeb, 0x18, 0xa6, 0x75, 0x91, 0xfe, 0xcb, 0xe7, 0x5c, 0x82, 0x7e, 0x4c, 0xb0, 0x29, 0x79, 0x85, + 0x4d, 0x85, 0xf1, 0x1a, 0xf3, 0x87, 0xdf, 0xfa, 0x23, 0x09, 0x7f, 0xba, 0x2c, 0xaf, 0x83, 0x24, + 0x0e, 0xf1, 0x62, 0x53, 0xb7, 0x5a, 0x13, 0x65, 0x29, 0xfe, 0x48, 0xf0, 0x10, 0xf9, 0xad, 0x1a, + 0x27, 0x5d, 0x7e, 0x2f, 0xa4, 0x3d, 0x36, 0xe3, 0x3c, 0x13, 0xc1, 0xc4, 0xa3, 0x20, 0x7e, 0x09, + 0x9b, 0x99, 0x93, 0x78, 0xa1, 0x6f, 0x0b, 0x7a, 0x36, 0x43, 0x37, 0x48, 0x6f, 0x56, 0xa1, 0xd0, + 0xb2, 0x4c, 0x57, 0xb5, 0x3a, 0x86, 0x8b, 0x3b, 0x5d, 0x77, 0xac, 0x5f, 0xf7, 0x27, 0x8c, 0x49, + 0x5a, 0xc9, 0x13, 0xba, 0x4d, 0x41, 0x46, 0x5a, 0xc2, 0xee, 0xe9, 0x4d, 0xd2, 0x92, 0xff, 0xe1, + 0xb5, 0x84, 0xd2, 0x90, 0x96, 0xdc, 0x97, 0x76, 0x38, 0xad, 0x5b, 0xdc, 0x98, 0xbb, 0x07, 0x4c, + 0x0b, 0x3c, 0xed, 0xf8, 0xa7, 0x71, 0x98, 0xe7, 0xc8, 0x3b, 0x9a, 0x83, 0x2f, 0xde, 0x7e, 0x6a, + 0x07, 0xbb, 0xda, 0x53, 0x17, 0x75, 0xcb, 0x10, 0x2b, 0xf9, 0x0c, 0x37, 0xd6, 0xa4, 0x7c, 0x89, + 0x97, 0x97, 0x86, 0x6e, 0x77, 0x97, 0x46, 0x1b, 0xf9, 0xd2, 0xa0, 0x0e, 0xca, 0x6d, 0x88, 0x57, + 0x2d, 0xc3, 0x24, 0x6b, 0x5b, 0x0b, 0x9b, 0x56, 0x87, 0x9b, 0x5b, 0xf6, 0x81, 0xae, 0x43, 0x52, + 0xeb, 0x58, 0x3d, 0xd3, 0x65, 0xa6, 0xb6, 0xf2, 0xe4, 0xaf, 0xbc, 0xb9, 0x30, 0xf5, 0x9f, 0xde, + 0x5c, 0x38, 0xc1, 0xd8, 0x3a, 0xad, 0x5b, 0x4b, 0x86, 0x75, 0xb1, 0xa3, 0xb9, 0xfb, 0x64, 0xfa, + 0xfe, 0xfa, 0x67, 0x9e, 0x00, 0x5e, 0x5f, 0xdd, 0x74, 0x3f, 0xfd, 0xbb, 0x3f, 0x71, 0x21, 0xa2, + 0x70, 0xfa, 0xe5, 0xf8, 0xe7, 0x3f, 0xb9, 0x10, 0x91, 0xbb, 0x90, 0x5a, 0xc1, 0xfa, 0x11, 0x15, + 0xd6, 0xfb, 0x2a, 0x7c, 0x8a, 0x57, 0x78, 0x66, 0xb0, 0x42, 0x76, 0x60, 0x6f, 0x05, 0xeb, 0x81, + 0x6a, 0x57, 0xb0, 0xde, 0x57, 0x63, 0x1d, 0xd2, 0x75, 0xd3, 0x65, 0x97, 0x8d, 0x5e, 0x80, 0x98, + 0x61, 0xb2, 0xf3, 0xeb, 0x99, 0xca, 0x63, 0xc7, 0xe8, 0x8a, 0x42, 0xe8, 0xe4, 0x4d, 0x48, 0xaf, + 0x60, 0x9d, 0xb1, 0xaa, 0x42, 0xac, 0x85, 0x75, 0xce, 0xea, 0x3e, 0x1a, 0x49, 0xa8, 0x2b, 0x2b, + 0xbf, 0xf1, 0xdb, 0xf3, 0x53, 0x1f, 0x7a, 0x6b, 0x7e, 0x6a, 0xa4, 0x3a, 0xc9, 0xe3, 0xd5, 0xc9, + 0xd3, 0xa2, 0x1f, 0x89, 0xc3, 0x83, 0xf4, 0xb6, 0xaa, 0xdd, 0x31, 0x4c, 0xf7, 0xa2, 0x6e, 0x1f, + 0x76, 0x5d, 0x8b, 0x18, 0x15, 0x6b, 0x97, 0x2b, 0xd1, 0xb4, 0x5f, 0xbc, 0xc4, 0x8a, 0x87, 0xab, + 0x90, 0xbc, 0x0b, 0x89, 0x2d, 0x42, 0x47, 0x06, 0xc9, 0xb5, 0x5c, 0xad, 0xcd, 0x3d, 0x21, 0xf6, + 0x41, 0xa0, 0xec, 0x86, 0x6b, 0x94, 0x41, 0x0d, 0x71, 0xb9, 0xb5, 0x8d, 0xb5, 0x5d, 0x76, 0x51, + 0x28, 0x46, 0x5d, 0xe8, 0x34, 0x01, 0xd0, 0x3b, 0x41, 0xb3, 0x90, 0xd0, 0x7a, 0xec, 0x30, 0x4f, + 0x8c, 0xf8, 0xd6, 0xf4, 0x43, 0x7e, 0x09, 0x52, 0x7c, 0x4f, 0x1f, 0x49, 0x10, 0xbb, 0x85, 0x0f, + 0x69, 0x3d, 0x39, 0x85, 0xfc, 0x44, 0x4b, 0x90, 0xa0, 0x8d, 0xe7, 0x37, 0x20, 0xe7, 0x96, 0x06, + 0x5a, 0xbf, 0x44, 0x1b, 0xa9, 0x30, 0x34, 0xf9, 0x06, 0xa4, 0x57, 0x2c, 0xa2, 0xd9, 0x61, 0x6e, + 0x19, 0xc6, 0x8d, 0xb6, 0xb9, 0xdb, 0xe3, 0x7a, 0xa5, 0xb0, 0x0f, 0x74, 0x12, 0x92, 0xec, 0xe2, + 0x18, 0x3f, 0x90, 0xc4, 0xbf, 0xe4, 0x2a, 0xa4, 0x28, 0xef, 0xcd, 0x2e, 0x71, 0x43, 0xbc, 0xb3, + 0xf4, 0x19, 0x7e, 0x8d, 0x98, 0xb3, 0x8f, 0xfa, 0x8d, 0x45, 0x10, 0x6f, 0x69, 0xae, 0xc6, 0xfb, + 0x4d, 0x7f, 0xcb, 0xef, 0x83, 0x34, 0x67, 0xe2, 0xa0, 0x4b, 0x10, 0xb3, 0xba, 0x0e, 0x3f, 0x52, + 0x54, 0x1a, 0xd5, 0x95, 0xcd, 0x6e, 0x25, 0x4e, 0x74, 0x49, 0x21, 0xc8, 0x95, 0x8d, 0x91, 0x6a, + 0xf1, 0x4c, 0x48, 0x2d, 0x3a, 0xd8, 0xdd, 0xd9, 0x75, 0xfd, 0x1f, 0x6c, 0x38, 0x07, 0x54, 0xc1, + 0x53, 0x94, 0x7b, 0x51, 0x98, 0x0f, 0x94, 0xde, 0xc6, 0xb6, 0x63, 0x58, 0x26, 0xd3, 0x26, 0xae, + 0x29, 0x28, 0xd0, 0x40, 0x5e, 0x3e, 0x42, 0x55, 0x5e, 0x80, 0x58, 0xb9, 0xdb, 0x45, 0x25, 0x48, + 0xd3, 0x6f, 0xdd, 0x62, 0xba, 0x12, 0x57, 0xbc, 0x6f, 0x52, 0xe6, 0x58, 0xbb, 0xee, 0x1d, 0xcd, + 0xf6, 0xee, 0x55, 0x8b, 0x6f, 0xf9, 0x79, 0xc8, 0x54, 0x2d, 0xd3, 0xc1, 0xa6, 0xd3, 0xa3, 0xfe, + 0xf5, 0x4e, 0xdb, 0xd2, 0x6f, 0x71, 0x0e, 0xec, 0x83, 0x08, 0x5b, 0xeb, 0x76, 0x29, 0x65, 0x5c, + 0x21, 0x3f, 0xd9, 0xcc, 0xae, 0x6c, 0x8e, 0x14, 0xcf, 0xe5, 0xe3, 0x89, 0x87, 0x77, 0xd0, 0x77, + 0x94, 0x23, 0xf0, 0xc0, 0xe0, 0x44, 0xba, 0x85, 0x0f, 0x9d, 0xe3, 0xce, 0xa3, 0x57, 0x20, 0xb3, + 0x45, 0x9f, 0x3c, 0x79, 0x09, 0x1f, 0xa2, 0x12, 0xa4, 0x70, 0xeb, 0xd2, 0xe5, 0xcb, 0x4f, 0x3d, + 0xcf, 0xb4, 0xfc, 0xfa, 0x94, 0x22, 0x00, 0x68, 0x1e, 0x32, 0x0e, 0xd6, 0xbb, 0x97, 0x2e, 0x5f, + 0xb9, 0xf5, 0x14, 0x53, 0xab, 0xeb, 0x53, 0x8a, 0x0f, 0x5a, 0x4e, 0x93, 0x1e, 0x7f, 0xfe, 0x53, + 0x0b, 0x91, 0x4a, 0x02, 0x62, 0x4e, 0xaf, 0xf3, 0xae, 0xe9, 0xc6, 0x1f, 0x24, 0x61, 0x31, 0x50, + 0xca, 0x16, 0xac, 0xdb, 0x5a, 0xdb, 0x68, 0x69, 0xfe, 0x43, 0x35, 0x52, 0xa0, 0xff, 0x14, 0x63, + 0xc4, 0x4a, 0x74, 0xa4, 0x14, 0xe5, 0x9f, 0x8a, 0x40, 0xee, 0xa6, 0xe0, 0xdc, 0xc0, 0x2e, 0xba, + 0x0a, 0xe0, 0xd5, 0x24, 0xa6, 0xca, 0x99, 0xa5, 0xfe, 0xba, 0x96, 0x3c, 0x1a, 0x25, 0x80, 0x8e, + 0x9e, 0xa5, 0x0a, 0xd8, 0xb5, 0x1c, 0x7e, 0xc7, 0x76, 0x0c, 0xa9, 0x87, 0x8c, 0x1e, 0x07, 0x44, + 0xad, 0x9a, 0x7a, 0xdb, 0x72, 0x0d, 0x73, 0x4f, 0xed, 0x5a, 0x77, 0xf8, 0xcb, 0x05, 0x31, 0x45, + 0xa2, 0x25, 0x37, 0x69, 0xc1, 0x16, 0x81, 0x93, 0x46, 0x67, 0x3c, 0x2e, 0x24, 0x54, 0xd4, 0x5a, + 0x2d, 0x1b, 0x3b, 0x0e, 0x37, 0x5c, 0xe2, 0x13, 0x5d, 0x85, 0x54, 0xb7, 0xb7, 0xa3, 0x0a, 0x2b, + 0x91, 0xbd, 0xf4, 0xc0, 0xb0, 0x39, 0x2f, 0x74, 0x83, 0xcf, 0xfa, 0x64, 0xb7, 0xb7, 0x43, 0x34, + 0xe5, 0x2c, 0xe4, 0x86, 0x34, 0x26, 0x7b, 0xdb, 0x6f, 0x07, 0x7d, 0x65, 0x87, 0xf7, 0x40, 0xed, + 0xda, 0x86, 0x65, 0x1b, 0xee, 0x21, 0x3d, 0x0a, 0x18, 0x53, 0x24, 0x51, 0xb0, 0xc5, 0xe1, 0xf2, + 0x2d, 0x28, 0x36, 0x68, 0x08, 0xe1, 0xb7, 0xfc, 0xb2, 0xdf, 0xbe, 0xc8, 0xf8, 0xf6, 0x8d, 0x6c, + 0x59, 0x74, 0xa0, 0x65, 0x17, 0xfe, 0x43, 0x04, 0xb2, 0x15, 0x32, 0x71, 0xeb, 0x2b, 0xd7, 0xda, + 0xda, 0x1e, 0x7a, 0x0a, 0x4e, 0x54, 0xd6, 0x36, 0xab, 0x2f, 0xa9, 0xf5, 0x15, 0xf5, 0xda, 0x5a, + 0x79, 0xd5, 0x3f, 0x7b, 0x5c, 0x3a, 0x79, 0xf7, 0xde, 0x22, 0x0a, 0xe0, 0x6e, 0x9b, 0x34, 0xce, + 0x45, 0x17, 0x61, 0x36, 0x4c, 0x52, 0xae, 0x34, 0x6a, 0x1b, 0x4d, 0x29, 0x52, 0x3a, 0x71, 0xf7, + 0xde, 0xe2, 0x74, 0x80, 0xa2, 0xbc, 0xe3, 0x60, 0xd3, 0x1d, 0x24, 0xa8, 0x6e, 0xae, 0xaf, 0xd7, + 0x9b, 0x52, 0x74, 0x80, 0xa0, 0x6a, 0x75, 0x3a, 0x86, 0x8b, 0x1e, 0x85, 0xe9, 0x30, 0xc1, 0x46, + 0x7d, 0x4d, 0x8a, 0x95, 0xd0, 0xdd, 0x7b, 0x8b, 0x85, 0x00, 0xf6, 0x86, 0xd1, 0x2e, 0xa5, 0x3f, + 0xf2, 0x43, 0xf3, 0x53, 0x9f, 0xfe, 0x5b, 0xf3, 0x91, 0xca, 0xfa, 0xc8, 0x39, 0xf7, 0xf4, 0xf1, + 0xe6, 0x5c, 0x78, 0xdd, 0xfe, 0xd2, 0x03, 0x21, 0x73, 0xc3, 0x7d, 0xc4, 0x80, 0x31, 0x9e, 0x74, + 0xba, 0x8d, 0xcb, 0x7b, 0x94, 0x8e, 0x76, 0x0f, 0x4a, 0x63, 0x16, 0x85, 0xd2, 0x58, 0xc3, 0x20, + 0x3f, 0x0f, 0xf9, 0x2d, 0xcd, 0x76, 0x1b, 0xd8, 0xbd, 0x8e, 0xb5, 0x16, 0xb6, 0xc3, 0xfe, 0x43, + 0x5e, 0xf8, 0x0f, 0x08, 0xe2, 0xd4, 0x49, 0x60, 0xeb, 0x27, 0xfd, 0x2d, 0xef, 0x43, 0x9c, 0x9e, + 0x72, 0xf6, 0x7c, 0x0b, 0x4e, 0xc1, 0x7c, 0x0b, 0xb2, 0x32, 0x1c, 0xba, 0xd8, 0x11, 0xa9, 0x39, + 0xfa, 0x81, 0x9e, 0x11, 0x1e, 0x42, 0xec, 0x68, 0x0f, 0x81, 0x4f, 0x2f, 0xee, 0x27, 0xb4, 0x21, + 0xc5, 0x87, 0xd8, 0x6b, 0x48, 0xc4, 0x6f, 0x08, 0x5a, 0x87, 0x62, 0x57, 0xb3, 0x5d, 0x7a, 0xeb, + 0x71, 0x9f, 0xf6, 0x82, 0xcf, 0xe0, 0x85, 0x41, 0x7b, 0x12, 0xea, 0x2c, 0xaf, 0x25, 0xdf, 0x0d, + 0x02, 0xe5, 0xff, 0x12, 0x87, 0x24, 0x17, 0xc6, 0x0b, 0x90, 0xe2, 0x62, 0xe5, 0x73, 0xee, 0xc1, + 0xa5, 0xc1, 0x65, 0x76, 0xc9, 0x5b, 0x0e, 0x39, 0x3f, 0x41, 0x83, 0x1e, 0x81, 0xb4, 0xbe, 0xaf, + 0x19, 0xa6, 0x6a, 0xb4, 0xb8, 0x73, 0x9c, 0x7d, 0xeb, 0xcd, 0x85, 0x54, 0x95, 0xc0, 0xea, 0x2b, + 0x4a, 0x8a, 0x16, 0xd6, 0x5b, 0xc4, 0xa7, 0xd9, 0xc7, 0xc6, 0xde, 0xbe, 0xcb, 0xed, 0x06, 0xff, + 0x42, 0xcf, 0x41, 0x9c, 0x28, 0x04, 0xbf, 0x13, 0x5f, 0x1a, 0x88, 0x7a, 0xbc, 0xb4, 0x54, 0x25, + 0x4d, 0x2a, 0xfe, 0xe8, 0x7f, 0x5e, 0x88, 0x28, 0x94, 0x02, 0x55, 0x21, 0xdf, 0xd6, 0x1c, 0x57, + 0xa5, 0xeb, 0x31, 0xa9, 0x3e, 0x41, 0x59, 0x9c, 0x1e, 0x14, 0x08, 0x17, 0x2c, 0x6f, 0x7a, 0x96, + 0x50, 0x31, 0x50, 0x0b, 0x9d, 0x07, 0x89, 0x32, 0xd1, 0xe9, 0x0c, 0x64, 0x5e, 0x62, 0x92, 0xca, + 0xbd, 0x40, 0xe0, 0x6c, 0x62, 0x52, 0x5f, 0xf1, 0x0c, 0x64, 0xe8, 0x2d, 0x5c, 0x8a, 0xc2, 0x8e, + 0xd6, 0xa7, 0x09, 0x80, 0x16, 0x9e, 0x83, 0xa2, 0x6f, 0xf5, 0x19, 0x4a, 0x9a, 0x71, 0xf1, 0xc1, + 0x14, 0xf1, 0x49, 0x98, 0x35, 0xf1, 0x01, 0x3d, 0xec, 0x1f, 0xc2, 0xce, 0x50, 0x6c, 0x44, 0xca, + 0x6e, 0x86, 0x29, 0x1e, 0x86, 0x82, 0x2e, 0x84, 0xcf, 0x70, 0x81, 0xe2, 0xe6, 0x3d, 0x28, 0x45, + 0x3b, 0x0d, 0x69, 0xad, 0xdb, 0x65, 0x08, 0x59, 0x6e, 0xf5, 0xbb, 0x5d, 0x5a, 0x74, 0x01, 0xa6, + 0x69, 0x1f, 0x6d, 0xec, 0xf4, 0xda, 0x2e, 0x67, 0x92, 0xa3, 0x38, 0x45, 0x52, 0xa0, 0x30, 0x38, + 0xc5, 0x7d, 0x08, 0xf2, 0xf8, 0xb6, 0xd1, 0xc2, 0xa6, 0x8e, 0x19, 0x5e, 0x9e, 0xe2, 0xe5, 0x04, + 0x90, 0x22, 0x3d, 0x0a, 0x9e, 0x35, 0x57, 0xc5, 0x4a, 0x53, 0x60, 0xfc, 0x04, 0xbc, 0xcc, 0xc0, + 0xf2, 0x1c, 0xc4, 0x57, 0x34, 0x57, 0x23, 0xee, 0x92, 0x7b, 0xc0, 0x96, 0xcf, 0x9c, 0x42, 0x7e, + 0xca, 0x3f, 0x1b, 0x83, 0xf8, 0x4d, 0xcb, 0xc5, 0xe8, 0xe9, 0x80, 0x2b, 0x5b, 0x18, 0xa6, 0xcf, + 0x0d, 0x63, 0xcf, 0xc4, 0xad, 0x75, 0x67, 0x2f, 0xf0, 0x64, 0x8e, 0xaf, 0x4e, 0xd1, 0x90, 0x3a, + 0xcd, 0x42, 0xc2, 0xb6, 0x7a, 0x66, 0x4b, 0x1c, 0x4a, 0xa7, 0x1f, 0xa8, 0x06, 0x69, 0x4f, 0x4b, + 0xe2, 0xe3, 0xb4, 0xa4, 0x48, 0xb4, 0x84, 0xe8, 0x30, 0x07, 0x28, 0xa9, 0x1d, 0xae, 0x2c, 0x15, + 0xc8, 0x78, 0xc6, 0x8b, 0x6b, 0xdb, 0x64, 0x0a, 0xeb, 0x93, 0x91, 0x25, 0xd2, 0x1b, 0x7b, 0x4f, + 0x78, 0x4c, 0xe3, 0x24, 0xaf, 0x80, 0x4b, 0x2f, 0xa4, 0x56, 0xfc, 0xf9, 0x9e, 0x14, 0xed, 0x97, + 0xaf, 0x56, 0xec, 0x09, 0x9f, 0x07, 0x20, 0xe3, 0x18, 0x7b, 0xa6, 0xe6, 0xf6, 0x6c, 0xcc, 0x35, + 0xcf, 0x07, 0x90, 0x52, 0xff, 0x82, 0x06, 0xd3, 0xb4, 0xc0, 0xab, 0x62, 0x17, 0x61, 0xc6, 0x7f, + 0xcf, 0xcb, 0xe7, 0xc2, 0xb4, 0x0c, 0x79, 0x45, 0x0d, 0x51, 0x22, 0xff, 0x52, 0x04, 0x92, 0x7c, + 0xc5, 0xf2, 0x87, 0x21, 0x32, 0x7c, 0x18, 0xa2, 0xa3, 0x86, 0x21, 0x76, 0xff, 0xc3, 0x50, 0x06, + 0xf0, 0x9a, 0xe9, 0xf0, 0x47, 0x5a, 0x86, 0xb8, 0x55, 0xac, 0x89, 0x0d, 0x63, 0x8f, 0xcf, 0xfb, + 0x00, 0x91, 0xfc, 0x9b, 0x11, 0xe2, 0xe1, 0xf3, 0x72, 0x54, 0x86, 0xbc, 0x68, 0x97, 0xba, 0xdb, + 0xd6, 0xf6, 0xb8, 0x2a, 0x3e, 0x38, 0xb2, 0x71, 0x64, 0x15, 0x56, 0xb2, 0xbc, 0x3d, 0xd4, 0x9f, + 0x18, 0x3a, 0xac, 0xd1, 0x11, 0xc3, 0x1a, 0xd2, 0xa3, 0xd8, 0xfd, 0xe9, 0x51, 0x68, 0xc4, 0xe3, + 0x7d, 0x23, 0x2e, 0xff, 0x76, 0x84, 0xbf, 0x26, 0xd6, 0x62, 0xb7, 0x4b, 0xfe, 0xac, 0x86, 0xea, + 0x35, 0xae, 0x5b, 0x2d, 0xdc, 0x52, 0x07, 0xc6, 0xec, 0xa1, 0x41, 0x8e, 0xe1, 0x36, 0xfb, 0x63, + 0x87, 0x04, 0x97, 0x86, 0x3f, 0x86, 0x9f, 0x89, 0xc2, 0xf4, 0x00, 0xfe, 0x9f, 0xbf, 0xb1, 0x0c, + 0xcf, 0xde, 0xc4, 0x84, 0xb3, 0x37, 0x39, 0x72, 0xf6, 0xfe, 0x74, 0x94, 0x26, 0x00, 0xba, 0x96, + 0xa3, 0xb5, 0xbf, 0x12, 0xb6, 0xf7, 0x0c, 0x64, 0xba, 0x56, 0x5b, 0x65, 0x25, 0xec, 0x5a, 0x50, + 0xba, 0x6b, 0xb5, 0x95, 0x01, 0x35, 0x4b, 0xbc, 0x43, 0x86, 0x39, 0xf9, 0x0e, 0x0c, 0x42, 0xaa, + 0x7f, 0x42, 0xd9, 0x90, 0x63, 0xa2, 0xe0, 0x5e, 0xd3, 0x93, 0x44, 0x06, 0xd4, 0x0d, 0x8b, 0x0c, + 0x7a, 0x79, 0xac, 0xd9, 0x0c, 0x53, 0xe1, 0x78, 0x84, 0x82, 0x39, 0x19, 0xc3, 0x32, 0x47, 0x41, + 0x8b, 0xa5, 0x70, 0x3c, 0xf9, 0xbb, 0x23, 0x00, 0x6b, 0x44, 0xb2, 0xb4, 0xbf, 0xc4, 0xdf, 0x71, + 0x68, 0x13, 0xd4, 0x50, 0xcd, 0xf3, 0xa3, 0x06, 0x8d, 0xd7, 0x9f, 0x73, 0x82, 0xed, 0xae, 0x42, + 0xde, 0xd7, 0x6d, 0x07, 0x8b, 0xc6, 0xcc, 0x1f, 0x11, 0x95, 0x36, 0xb0, 0xab, 0xe4, 0x6e, 0x07, + 0xbe, 0xe4, 0x7f, 0x12, 0x81, 0x0c, 0x6d, 0xd3, 0x3a, 0x76, 0xb5, 0xd0, 0x18, 0x46, 0xee, 0x7f, + 0x0c, 0x1f, 0x04, 0x60, 0x6c, 0x1c, 0xe3, 0x0d, 0xcc, 0x35, 0x2b, 0x43, 0x21, 0x0d, 0xe3, 0x0d, + 0x8c, 0xae, 0x78, 0x02, 0x8f, 0x1d, 0x2d, 0x70, 0x11, 0xb5, 0x72, 0xb1, 0x9f, 0x82, 0x14, 0x7d, + 0xef, 0xf2, 0xc0, 0xe1, 0x81, 0x68, 0xd2, 0xec, 0x75, 0x9a, 0x07, 0x8e, 0xfc, 0x3a, 0xa4, 0x9a, + 0x07, 0x2c, 0x9f, 0x78, 0x06, 0x32, 0xb6, 0x65, 0x71, 0xef, 0x8f, 0x79, 0xdd, 0x69, 0x02, 0xa0, + 0xce, 0x8e, 0xc8, 0xa1, 0x45, 0xfd, 0x1c, 0x9a, 0x9f, 0x04, 0x8c, 0x4d, 0x94, 0x04, 0x24, 0xd1, + 0x67, 0x3e, 0x34, 0x93, 0xd0, 0xe3, 0x70, 0xaa, 0x51, 0x5f, 0xdd, 0xa8, 0xad, 0xa8, 0xeb, 0x8d, + 0xd5, 0xbe, 0x2b, 0xff, 0xa5, 0xe2, 0xdd, 0x7b, 0x8b, 0x59, 0x1e, 0x76, 0x8e, 0xc2, 0xde, 0x52, + 0x6a, 0x37, 0x37, 0x9b, 0x35, 0x29, 0xc2, 0xb0, 0xb7, 0x6c, 0x7c, 0xdb, 0x72, 0xd9, 0x83, 0xb2, + 0x4f, 0xc2, 0xe9, 0x21, 0xd8, 0x5e, 0xf0, 0x39, 0x7d, 0xf7, 0xde, 0x62, 0x7e, 0xcb, 0xc6, 0x4c, + 0xcb, 0x28, 0xc5, 0x12, 0xcc, 0x0d, 0x52, 0x6c, 0x6e, 0x6d, 0x36, 0xca, 0x6b, 0xd2, 0x62, 0x49, + 0xba, 0x7b, 0x6f, 0x31, 0x27, 0x4c, 0x06, 0xc1, 0x7f, 0xf7, 0xa3, 0xcf, 0x6f, 0x4e, 0x87, 0xb2, + 0xc6, 0x2c, 0xae, 0xeb, 0x6a, 0xb6, 0xd6, 0x39, 0x6e, 0xf8, 0x39, 0xe6, 0x30, 0x82, 0xfc, 0x53, + 0x51, 0x28, 0x7a, 0xc1, 0xcd, 0x16, 0xad, 0x01, 0x3d, 0x1d, 0xcc, 0xf8, 0x65, 0x47, 0xae, 0x1d, + 0x0c, 0x5b, 0x24, 0x04, 0xdf, 0x0b, 0x69, 0xe1, 0x24, 0xf3, 0x49, 0xb5, 0x38, 0x64, 0x7d, 0xe3, + 0x18, 0x9c, 0xd4, 0xa3, 0x40, 0x2f, 0x42, 0xc6, 0x9b, 0x62, 0xde, 0xa3, 0x6b, 0xa3, 0xe7, 0x24, + 0xa7, 0xf7, 0x69, 0xd0, 0xf3, 0x7e, 0x18, 0x17, 0x1f, 0x15, 0x18, 0xde, 0x64, 0x08, 0x9c, 0xd8, + 0x0b, 0xe1, 0x9e, 0x84, 0xb8, 0xb6, 0xa3, 0x1b, 0xdc, 0x00, 0x3f, 0x30, 0x48, 0x57, 0xae, 0x54, + 0xeb, 0x9c, 0x88, 0x62, 0xca, 0x75, 0x9e, 0x4c, 0xe1, 0xf2, 0xa2, 0x4f, 0xdc, 0x1c, 0xa8, 0x2c, + 0x16, 0x66, 0xde, 0x45, 0xba, 0xa3, 0x1d, 0x54, 0x68, 0x38, 0x7c, 0x0a, 0x52, 0xa4, 0x70, 0x8f, + 0x3f, 0xa2, 0x10, 0x53, 0x92, 0x1d, 0xed, 0x60, 0x55, 0x73, 0x6e, 0xc4, 0xd3, 0x31, 0x29, 0x2e, + 0xff, 0x18, 0xf1, 0x54, 0x42, 0x52, 0x41, 0x8f, 0x01, 0x22, 0x14, 0xda, 0x1e, 0x56, 0xc9, 0xd4, + 0xa5, 0xe2, 0x15, 0x7c, 0x8b, 0x1d, 0xed, 0xa0, 0xbc, 0x87, 0x37, 0x7a, 0x1d, 0xda, 0x00, 0x07, + 0xad, 0x83, 0x24, 0x90, 0xc5, 0xc8, 0x72, 0xf1, 0x9f, 0x1e, 0x7c, 0xb4, 0x95, 0x23, 0xb0, 0x05, + 0xe0, 0x63, 0x64, 0x01, 0x28, 0x30, 0x7e, 0xde, 0xf1, 0x93, 0x50, 0x57, 0x62, 0xe1, 0xae, 0xc8, + 0x2f, 0x42, 0xb1, 0x6f, 0x04, 0x90, 0x0c, 0x79, 0x9e, 0xb1, 0xa2, 0x5b, 0xfb, 0x2c, 0xc2, 0xc9, + 0x28, 0x59, 0x96, 0x99, 0xa2, 0x47, 0x1d, 0x96, 0xd3, 0x3f, 0xf7, 0xc9, 0x85, 0x08, 0xdd, 0xf6, + 0x79, 0x0c, 0xf2, 0xa1, 0x31, 0x10, 0x59, 0xe4, 0x88, 0x9f, 0x45, 0xf6, 0x91, 0x5f, 0x83, 0x1c, + 0x31, 0x40, 0xb8, 0xc5, 0x71, 0x1f, 0x81, 0x22, 0x33, 0x90, 0xfd, 0xb2, 0x66, 0x0e, 0xcf, 0xba, + 0x10, 0xb8, 0x2c, 0x3c, 0xa0, 0xb0, 0xd8, 0xb3, 0x02, 0x6b, 0x55, 0x73, 0xe4, 0x4d, 0x00, 0x7f, + 0x50, 0x51, 0x19, 0x1e, 0x24, 0xc6, 0x23, 0x78, 0x14, 0x95, 0x3f, 0xb7, 0x15, 0xf2, 0x18, 0x4b, + 0x04, 0xc9, 0x3f, 0x6e, 0xca, 0x1e, 0xdd, 0xba, 0x4e, 0x31, 0x2a, 0x2f, 0x7f, 0xfa, 0xad, 0xf9, + 0xc8, 0xbb, 0x63, 0x0b, 0xfe, 0xe3, 0xab, 0x70, 0x26, 0x50, 0x48, 0x14, 0x30, 0x94, 0x88, 0x2a, + 0x06, 0xf4, 0x95, 0x14, 0x8e, 0x4b, 0x28, 0x1d, 0x99, 0xff, 0x2d, 0x1d, 0x6d, 0x76, 0xc6, 0x67, + 0x9b, 0xc6, 0xe7, 0xbb, 0x86, 0x27, 0xe5, 0xff, 0x71, 0x06, 0x52, 0x0a, 0xfe, 0x60, 0x0f, 0x3b, + 0x2e, 0xba, 0x04, 0x71, 0xac, 0xef, 0x5b, 0xc3, 0x72, 0xa0, 0xa4, 0x83, 0x4b, 0x1c, 0xaf, 0xa6, + 0xef, 0x5b, 0xd7, 0xa7, 0x14, 0x8a, 0x8b, 0x2e, 0x43, 0x62, 0xb7, 0xdd, 0xe3, 0xe9, 0xab, 0x3e, + 0x9b, 0x15, 0x24, 0xba, 0x46, 0x90, 0xae, 0x4f, 0x29, 0x0c, 0x9b, 0x54, 0x45, 0x5f, 0xdb, 0x8e, + 0x1d, 0x5d, 0x55, 0xdd, 0xdc, 0xa5, 0x55, 0x11, 0x5c, 0x54, 0x01, 0x30, 0x4c, 0xc3, 0x55, 0x69, + 0x6a, 0x87, 0x5b, 0x8d, 0xb3, 0xa3, 0x29, 0x0d, 0x97, 0x26, 0x83, 0xae, 0x4f, 0x29, 0x19, 0x43, + 0x7c, 0x90, 0xe6, 0x7e, 0xb0, 0x87, 0xed, 0x43, 0xee, 0xad, 0x8d, 0x6c, 0xee, 0xcb, 0x04, 0x89, + 0x34, 0x97, 0x62, 0x13, 0x23, 0xcb, 0x1e, 0xee, 0x73, 0x0f, 0xf8, 0x73, 0xb4, 0x0b, 0xa3, 0x28, + 0xe9, 0xeb, 0x7d, 0xcd, 0x83, 0xeb, 0x53, 0x4a, 0x4a, 0x67, 0x3f, 0xd1, 0x73, 0x9e, 0x0b, 0x96, + 0x1d, 0xf4, 0x7a, 0x42, 0xb4, 0x2c, 0xed, 0x33, 0x25, 0x5c, 0x31, 0xb4, 0x01, 0x85, 0xb6, 0xe1, + 0xb8, 0xaa, 0x63, 0x6a, 0x5d, 0x67, 0xdf, 0x72, 0x1d, 0x9a, 0x3f, 0xc9, 0x5e, 0x7a, 0x78, 0x14, + 0x87, 0x35, 0xc3, 0x71, 0x1b, 0x02, 0xf9, 0xfa, 0x94, 0x92, 0x6f, 0x07, 0x01, 0x84, 0x9f, 0xb5, + 0xbb, 0x8b, 0x6d, 0x8f, 0x21, 0xcd, 0xb3, 0x1c, 0xc1, 0x6f, 0x93, 0x60, 0x0b, 0x7a, 0xc2, 0xcf, + 0x0a, 0x02, 0xd0, 0xd7, 0xc0, 0x4c, 0xdb, 0xd2, 0x5a, 0x1e, 0x3b, 0x55, 0xdf, 0xef, 0x99, 0xb7, + 0x68, 0x52, 0x26, 0x7b, 0xe9, 0xd1, 0x91, 0x8d, 0xb4, 0xb4, 0x96, 0x60, 0x51, 0x25, 0x04, 0xd7, + 0xa7, 0x94, 0xe9, 0x76, 0x3f, 0x10, 0x7d, 0x00, 0x66, 0xb5, 0x6e, 0xb7, 0x7d, 0xd8, 0xcf, 0xbd, + 0x48, 0xb9, 0x5f, 0x18, 0xc5, 0xbd, 0x4c, 0x68, 0xfa, 0xd9, 0x23, 0x6d, 0x00, 0x8a, 0x9a, 0x20, + 0x75, 0x6d, 0x4c, 0x6f, 0x73, 0x75, 0xb9, 0x97, 0x41, 0xdf, 0xba, 0xca, 0x5e, 0x3a, 0x37, 0x8a, + 0xf7, 0x16, 0xc3, 0x17, 0x4e, 0xc9, 0xf5, 0x29, 0xa5, 0xd8, 0x0d, 0x83, 0x18, 0x57, 0x4b, 0xc7, + 0xf4, 0x29, 0x3e, 0xce, 0x75, 0x7a, 0x1c, 0x57, 0x8a, 0x1f, 0xe6, 0x1a, 0x02, 0xa1, 0x1a, 0x64, + 0x59, 0x28, 0xaa, 0x12, 0x63, 0x48, 0x5f, 0xc8, 0xca, 0x5e, 0x92, 0x47, 0xce, 0x50, 0x8a, 0x7a, + 0xd3, 0x72, 0xf1, 0xf5, 0x29, 0x05, 0xb0, 0xf7, 0x85, 0x34, 0x38, 0x41, 0x1f, 0x0b, 0x3b, 0x54, + 0xc3, 0x86, 0x77, 0x6e, 0x86, 0x32, 0x7c, 0x6c, 0x14, 0xc3, 0x9b, 0x94, 0xe8, 0x66, 0xd0, 0x0e, + 0x5f, 0x9f, 0x52, 0x66, 0x6e, 0x0f, 0x82, 0x89, 0x8a, 0xed, 0x1a, 0xa6, 0xd6, 0x36, 0xde, 0xc0, + 0x6c, 0x09, 0xa5, 0xcf, 0x64, 0x1e, 0xa1, 0x62, 0xd7, 0x38, 0x36, 0x5d, 0x58, 0x89, 0x8a, 0xed, + 0x06, 0x01, 0x95, 0x14, 0x3f, 0x87, 0xea, 0x3d, 0xfb, 0x96, 0x92, 0xd2, 0xec, 0xa9, 0xb7, 0x1b, + 0xf1, 0x34, 0x48, 0x59, 0xf9, 0x1c, 0x64, 0x03, 0x86, 0x09, 0xcd, 0x41, 0x8a, 0x9f, 0xd4, 0x11, + 0x27, 0x5a, 0xf9, 0xa7, 0x5c, 0x80, 0x5c, 0xd0, 0x18, 0xc9, 0x1f, 0x8d, 0x78, 0x94, 0xf4, 0xbd, + 0x8b, 0xb9, 0x70, 0x46, 0x3a, 0xe3, 0x7b, 0x2a, 0x0f, 0x89, 0xa5, 0x4d, 0x94, 0xb3, 0xed, 0xd7, + 0x1c, 0x05, 0xf2, 0x95, 0x15, 0x2d, 0x40, 0xb6, 0x7b, 0xa9, 0xeb, 0xa1, 0xc4, 0x28, 0x0a, 0x74, + 0x2f, 0x75, 0x05, 0xc2, 0x59, 0xc8, 0x91, 0x7e, 0xab, 0x41, 0x7f, 0x29, 0xa3, 0x64, 0x09, 0x8c, + 0xa3, 0xc8, 0xff, 0x2a, 0x0a, 0x52, 0xbf, 0x01, 0xf3, 0x52, 0xd5, 0x91, 0x63, 0xa7, 0xaa, 0x4f, + 0xf7, 0x27, 0xc9, 0xfd, 0xbc, 0xf8, 0x1a, 0x48, 0x7e, 0x7a, 0x97, 0x2d, 0x35, 0xa3, 0xfd, 0xbf, + 0x3e, 0x47, 0x55, 0x29, 0xea, 0x7d, 0x9e, 0xeb, 0xb5, 0xd0, 0x66, 0xa5, 0xf8, 0x73, 0x14, 0xfd, + 0x03, 0xee, 0x39, 0x31, 0xdb, 0xdd, 0x96, 0xe6, 0x62, 0x91, 0x1f, 0x0b, 0xec, 0x5b, 0x3e, 0x02, + 0x45, 0xad, 0xdb, 0x55, 0x1d, 0x57, 0x73, 0x31, 0xf7, 0x35, 0x58, 0xe6, 0x21, 0xaf, 0x75, 0xbb, + 0x0d, 0x02, 0x65, 0xbe, 0xc6, 0xc3, 0x50, 0x20, 0x36, 0xdd, 0xd0, 0xda, 0xc2, 0x55, 0x48, 0x32, + 0x97, 0x84, 0x43, 0x99, 0x77, 0x20, 0xb7, 0xbc, 0x11, 0xa7, 0xf6, 0xdc, 0x8b, 0xa9, 0x22, 0x81, + 0x98, 0x0a, 0xf1, 0x77, 0x48, 0x98, 0x7c, 0xc4, 0xdb, 0x2d, 0xc3, 0x37, 0x0d, 0x66, 0x69, 0xfc, + 0x75, 0x9b, 0x25, 0x4b, 0xd2, 0x0a, 0xfb, 0x90, 0x15, 0x28, 0x84, 0x6d, 0x3f, 0x2a, 0x40, 0xd4, + 0x3d, 0xe0, 0xb5, 0x44, 0xdd, 0x03, 0xe2, 0xe9, 0x7a, 0xaf, 0xf7, 0x16, 0x86, 0xac, 0x76, 0x9c, + 0xce, 0xcf, 0x75, 0xc8, 0x45, 0xc8, 0x87, 0xd6, 0x04, 0xf9, 0x24, 0xcc, 0x0e, 0x33, 0xf1, 0xf2, + 0xbe, 0x07, 0x0f, 0x99, 0x6a, 0x74, 0x19, 0xd2, 0x9e, 0x8d, 0x1f, 0x12, 0x1d, 0xd3, 0x6a, 0x05, + 0xb2, 0xe2, 0xa1, 0x86, 0xd2, 0xf9, 0xd1, 0x50, 0x3a, 0x5f, 0xfe, 0x7a, 0x98, 0x1b, 0x65, 0xbf, + 0xfb, 0x92, 0x7c, 0x71, 0x4f, 0x60, 0x27, 0x21, 0xc9, 0x9f, 0xc9, 0x8c, 0xd2, 0x0d, 0x2c, 0xfe, + 0x45, 0x04, 0xc9, 0x6c, 0x79, 0x8c, 0xed, 0x6b, 0xd1, 0x0f, 0x59, 0x85, 0xd3, 0x23, 0x6d, 0xf8, + 0xe8, 0xad, 0x30, 0xc6, 0x88, 0x6f, 0x85, 0xe9, 0xa2, 0x39, 0x0e, 0xed, 0xab, 0x38, 0xc8, 0xc2, + 0xbe, 0xe4, 0x8f, 0xc5, 0xe0, 0xe4, 0x70, 0x4b, 0x8e, 0x16, 0x21, 0x47, 0xfc, 0x56, 0x37, 0xec, + 0xe2, 0x42, 0x47, 0x3b, 0x68, 0x72, 0xff, 0x96, 0x6f, 0x25, 0x44, 0xbd, 0xad, 0x04, 0xb4, 0x0d, + 0xd3, 0x6d, 0x4b, 0xd7, 0xda, 0x6a, 0x60, 0x2b, 0x87, 0x4f, 0xa2, 0x87, 0x06, 0x84, 0x1d, 0x4e, + 0x19, 0x12, 0x83, 0xc3, 0xf5, 0xbf, 0x48, 0x79, 0xac, 0x79, 0xbb, 0x3e, 0x68, 0x05, 0xb2, 0x1d, + 0xc3, 0xd9, 0xc1, 0xfb, 0xda, 0x6d, 0xc3, 0xb2, 0xf9, 0x6c, 0x1a, 0x54, 0x9a, 0x75, 0x1f, 0x47, + 0xec, 0x30, 0x05, 0xc8, 0x02, 0x43, 0x92, 0x18, 0xba, 0xf1, 0x95, 0x3c, 0xb6, 0x35, 0x19, 0xb5, + 0x87, 0x94, 0x1a, 0xb9, 0x87, 0x34, 0x6c, 0xc3, 0x26, 0x3d, 0x7c, 0xc3, 0xe6, 0x23, 0xc1, 0xa1, + 0x09, 0xaf, 0x7d, 0x03, 0x7b, 0x38, 0xa8, 0x01, 0xb3, 0x9c, 0xbe, 0x15, 0x92, 0xfd, 0x90, 0xa3, + 0x0e, 0x6c, 0x7e, 0xf5, 0xcb, 0x1c, 0x09, 0xf2, 0xd1, 0x62, 0x8f, 0xdd, 0x9f, 0xd8, 0xc5, 0x26, + 0x6a, 0x3c, 0xb0, 0x89, 0xfa, 0xff, 0xd8, 0x50, 0x7c, 0x38, 0x06, 0xd3, 0x03, 0x8e, 0xc4, 0xd0, + 0xdd, 0xe1, 0x51, 0x19, 0x59, 0xd1, 0xb1, 0xd8, 0xb1, 0x3b, 0xc6, 0xc7, 0x3a, 0x3e, 0x7e, 0xac, + 0x13, 0xef, 0xe0, 0x58, 0x27, 0xef, 0x6f, 0xac, 0xdf, 0xd5, 0x51, 0xf8, 0x44, 0x04, 0x4a, 0xa3, + 0xbd, 0xaf, 0xa1, 0xc3, 0x71, 0xac, 0x0d, 0x84, 0x51, 0x6b, 0xdc, 0xc3, 0x50, 0xe8, 0xf3, 0x0d, + 0x99, 0x2a, 0xe7, 0x43, 0x51, 0xb8, 0xfc, 0x8d, 0x31, 0x6f, 0xe1, 0x09, 0x39, 0x70, 0x43, 0x66, + 0xeb, 0xcb, 0x30, 0xd3, 0xc2, 0xba, 0xd1, 0xba, 0xdf, 0xc9, 0x3a, 0xcd, 0xa9, 0xff, 0xff, 0x5c, + 0x1d, 0xd4, 0x92, 0xef, 0x02, 0x48, 0x2b, 0xd8, 0xe9, 0x12, 0x7f, 0x0c, 0x55, 0x20, 0x83, 0x0f, + 0x74, 0xdc, 0x75, 0xfd, 0x43, 0x15, 0xc3, 0x42, 0x04, 0x86, 0x5d, 0x13, 0x98, 0x24, 0x40, 0xf6, + 0xc8, 0xd0, 0xd3, 0x3c, 0x07, 0x30, 0x3a, 0x9c, 0xe7, 0xe4, 0xc1, 0x24, 0xc0, 0x15, 0x91, 0x04, + 0x88, 0x8d, 0x8c, 0x6f, 0x19, 0x55, 0x5f, 0x16, 0xe0, 0x69, 0x9e, 0x05, 0x88, 0x8f, 0xa9, 0x2c, + 0x94, 0x06, 0xa8, 0x86, 0xd2, 0x00, 0xc9, 0x31, 0xdd, 0x1c, 0x91, 0x07, 0xb8, 0x22, 0xf2, 0x00, + 0xa9, 0x31, 0x2d, 0xee, 0x4b, 0x04, 0xbc, 0x10, 0x48, 0x04, 0x64, 0x06, 0xb3, 0xad, 0x21, 0xd2, + 0x21, 0x99, 0x80, 0xe7, 0xbd, 0x4c, 0x40, 0x6e, 0x64, 0x16, 0x81, 0x13, 0xf7, 0xa7, 0x02, 0x36, + 0x07, 0x52, 0x01, 0x79, 0xfe, 0x47, 0x97, 0x46, 0xb1, 0x18, 0x93, 0x0b, 0xd8, 0x1c, 0xc8, 0x05, + 0x14, 0xc6, 0x30, 0x1c, 0x93, 0x0c, 0xf8, 0xda, 0xe1, 0xc9, 0x80, 0xd1, 0xe1, 0x3a, 0x6f, 0xe6, + 0x64, 0xd9, 0x00, 0x75, 0x44, 0x36, 0x40, 0x1a, 0x19, 0xb9, 0x32, 0xf6, 0x13, 0xa7, 0x03, 0xb6, + 0x87, 0xa4, 0x03, 0x58, 0xe0, 0x7e, 0x7e, 0x24, 0xf3, 0x09, 0xf2, 0x01, 0xdb, 0x43, 0xf2, 0x01, + 0x68, 0x2c, 0xdb, 0xb1, 0x09, 0x81, 0x6b, 0xe1, 0x84, 0xc0, 0xcc, 0x08, 0xaf, 0xd3, 0x9f, 0xed, + 0x23, 0x32, 0x02, 0x3b, 0xa3, 0x32, 0x02, 0x2c, 0x6a, 0x7f, 0x7c, 0x24, 0xc7, 0x63, 0xa4, 0x04, + 0x36, 0x07, 0x52, 0x02, 0x27, 0xc6, 0x68, 0xda, 0xe4, 0x39, 0x01, 0xf6, 0x08, 0x3c, 0x7b, 0xfe, + 0x1d, 0xa4, 0xec, 0x8d, 0x78, 0x3a, 0x2b, 0xe5, 0xe4, 0x47, 0x89, 0x07, 0xd3, 0x67, 0xe7, 0x48, + 0xac, 0x80, 0x6d, 0xdb, 0xb2, 0xc5, 0x1d, 0x0b, 0xfa, 0x21, 0x9f, 0x27, 0x31, 0xa2, 0x6f, 0xd3, + 0x8e, 0xc8, 0x1f, 0xd0, 0x98, 0x2c, 0x60, 0xc7, 0xe4, 0x9f, 0x8b, 0xf8, 0xb4, 0x34, 0x83, 0x10, + 0x8c, 0x2f, 0x33, 0x3c, 0xbe, 0x0c, 0x64, 0x15, 0xa2, 0xe1, 0xac, 0xc2, 0x02, 0x64, 0x49, 0xac, + 0xd5, 0x97, 0x30, 0xd0, 0xba, 0x5e, 0xc2, 0x40, 0x1c, 0xa0, 0x62, 0xb9, 0x07, 0xbe, 0x2c, 0xb1, + 0xdd, 0xc4, 0xa2, 0x77, 0x98, 0x8c, 0x85, 0xba, 0xe8, 0x09, 0x98, 0x09, 0xe0, 0x7a, 0x31, 0x1c, + 0x8b, 0x9e, 0x25, 0x0f, 0xbb, 0xcc, 0x83, 0xb9, 0x7f, 0x16, 0xf1, 0x25, 0xe4, 0x67, 0x1a, 0x86, + 0x25, 0x05, 0x22, 0xef, 0x50, 0x52, 0x20, 0x7a, 0xdf, 0x49, 0x81, 0x60, 0x4c, 0x1a, 0x0b, 0xc7, + 0xa4, 0xff, 0x33, 0xe2, 0x8f, 0x89, 0x17, 0xe2, 0xeb, 0x56, 0x0b, 0xf3, 0x28, 0x91, 0xfe, 0x26, + 0x2e, 0x49, 0xdb, 0xda, 0xe3, 0xb1, 0x20, 0xf9, 0x49, 0xb0, 0xbc, 0x85, 0x27, 0xc3, 0xd7, 0x15, + 0x2f, 0xc0, 0x4c, 0x04, 0xef, 0x71, 0xf0, 0xcb, 0x0d, 0x49, 0xff, 0x72, 0x83, 0x77, 0x31, 0x3a, + 0x15, 0xb8, 0x18, 0x8d, 0x9e, 0x83, 0x0c, 0x4d, 0xf6, 0xab, 0x56, 0x57, 0xfc, 0xc5, 0xb2, 0x33, + 0xa3, 0x2f, 0x36, 0x38, 0xf4, 0xc8, 0x35, 0xbb, 0x0c, 0xe1, 0x7b, 0x1c, 0x99, 0x90, 0xc7, 0xf1, + 0x00, 0x64, 0x48, 0xeb, 0xd9, 0x5f, 0xde, 0x00, 0x7e, 0xab, 0x5e, 0x00, 0xe4, 0x1f, 0x8f, 0x42, + 0xb1, 0x6f, 0xa1, 0x19, 0xda, 0xf7, 0x61, 0xdb, 0xc8, 0x93, 0xc9, 0x63, 0x1e, 0x60, 0x4f, 0x73, + 0xd4, 0x3b, 0x9a, 0xe9, 0xe2, 0x16, 0x17, 0x4a, 0x00, 0x82, 0x4a, 0x90, 0x26, 0x5f, 0x3d, 0x07, + 0xb7, 0x78, 0xf6, 0xc5, 0xfb, 0x46, 0xd7, 0x21, 0x89, 0x6f, 0xd3, 0x97, 0x67, 0xd9, 0xfb, 0xcd, + 0x27, 0x07, 0xc3, 0x61, 0x52, 0x5c, 0x99, 0x23, 0x83, 0xfd, 0x85, 0x37, 0x17, 0x24, 0x86, 0xfd, + 0xb8, 0x77, 0x99, 0x4d, 0xe1, 0xf4, 0x61, 0x29, 0xa4, 0xfb, 0xa4, 0x40, 0xf3, 0x80, 0x39, 0x11, + 0xde, 0x13, 0x99, 0xb2, 0x33, 0xde, 0x4a, 0xbe, 0x83, 0x3b, 0x5d, 0xcb, 0x6a, 0xab, 0x6c, 0x8e, + 0x97, 0xa1, 0x10, 0x5e, 0x57, 0xd9, 0x5f, 0xc5, 0x72, 0x35, 0xc3, 0x54, 0x43, 0x4e, 0x70, 0x8e, + 0x01, 0xd9, 0x9c, 0xba, 0x11, 0x4f, 0x47, 0xa4, 0xe8, 0x8d, 0x78, 0x3a, 0x2a, 0xc5, 0xe4, 0x2d, + 0x38, 0x31, 0x74, 0x5d, 0x45, 0xcf, 0x42, 0xc6, 0x5f, 0x92, 0xd9, 0x31, 0xfd, 0x23, 0x32, 0x2d, + 0x3e, 0xae, 0xfc, 0x8b, 0x11, 0x9f, 0x65, 0x38, 0x77, 0x53, 0x83, 0x24, 0x3b, 0x33, 0xc9, 0xcf, + 0xc7, 0x3c, 0x31, 0xd9, 0x8a, 0xbc, 0xc4, 0x0e, 0x54, 0x2a, 0x9c, 0x58, 0xfe, 0x00, 0x24, 0x19, + 0x04, 0x65, 0x21, 0xe5, 0xbf, 0x71, 0x0d, 0x90, 0x2c, 0x57, 0xab, 0xb5, 0x2d, 0xf1, 0x60, 0x6d, + 0x65, 0x53, 0x69, 0x4a, 0x51, 0x02, 0x56, 0x6a, 0x37, 0x6a, 0xd5, 0xa6, 0x14, 0x43, 0xd3, 0x90, + 0x67, 0xbf, 0xd5, 0x6b, 0x9b, 0xca, 0x7a, 0xb9, 0x29, 0xc5, 0x03, 0xa0, 0x46, 0x6d, 0x63, 0xa5, + 0xa6, 0x48, 0x09, 0xf9, 0x29, 0x38, 0x3d, 0x72, 0x0d, 0xf7, 0x13, 0x33, 0x91, 0x40, 0x62, 0x46, + 0xfe, 0x58, 0x94, 0x04, 0x35, 0xa3, 0x16, 0x66, 0x74, 0xa3, 0xaf, 0xe3, 0x97, 0x8e, 0xb1, 0xaa, + 0xf7, 0xf5, 0x9e, 0xc4, 0x31, 0x36, 0xde, 0xc5, 0xae, 0xbe, 0xcf, 0x1c, 0x05, 0x66, 0x81, 0xf2, + 0x4a, 0x9e, 0x43, 0x29, 0x91, 0xc3, 0xd0, 0x5e, 0xc7, 0xba, 0xab, 0x32, 0x25, 0x72, 0xf8, 0x1f, + 0xf1, 0xcd, 0x33, 0x68, 0x83, 0x01, 0xe5, 0xaf, 0x3f, 0x96, 0x2c, 0x33, 0x90, 0x50, 0x6a, 0x4d, + 0xe5, 0x55, 0x29, 0x86, 0x10, 0x14, 0xe8, 0x4f, 0xb5, 0xb1, 0x51, 0xde, 0x6a, 0x5c, 0xdf, 0x24, + 0xb2, 0x9c, 0x81, 0xa2, 0x90, 0xa5, 0x00, 0x26, 0xe4, 0xc7, 0xe0, 0xd4, 0x08, 0xaf, 0x62, 0xc8, + 0x21, 0xd6, 0x4f, 0x45, 0x82, 0xd8, 0x61, 0xcf, 0x60, 0x13, 0x92, 0x8e, 0xab, 0xb9, 0x3d, 0x87, + 0x0b, 0xf1, 0xd9, 0x49, 0xdd, 0x8c, 0x25, 0xf1, 0xa3, 0x41, 0xc9, 0x15, 0xce, 0x46, 0xbe, 0x0c, + 0x85, 0x70, 0xc9, 0x68, 0x19, 0xf8, 0x4a, 0x14, 0x95, 0xaf, 0x02, 0x1a, 0xf4, 0x3e, 0x86, 0x84, + 0x97, 0x91, 0x61, 0xe1, 0xe5, 0x0f, 0x47, 0xe0, 0xcc, 0x11, 0x9e, 0x06, 0x7a, 0xb9, 0xaf, 0x93, + 0xcf, 0x1f, 0xc7, 0x4f, 0x59, 0x62, 0xb0, 0xbe, 0x6e, 0x3e, 0x0d, 0xb9, 0x20, 0x7c, 0xb2, 0x4e, + 0x7e, 0x21, 0xea, 0x4f, 0xe2, 0x70, 0x1c, 0xec, 0x9b, 0xc0, 0xc8, 0x97, 0x69, 0x02, 0xdf, 0x0b, + 0xe0, 0x1e, 0x88, 0x53, 0xd4, 0x7c, 0x1d, 0x7d, 0x70, 0x48, 0x7e, 0x11, 0xeb, 0xcd, 0x03, 0x3e, + 0x09, 0x32, 0x2e, 0xff, 0xe5, 0xa0, 0x46, 0x30, 0x29, 0xd0, 0xa3, 0x6b, 0xac, 0xe3, 0xfd, 0x09, + 0xdf, 0xc9, 0x16, 0x63, 0x3f, 0x79, 0xc0, 0xc0, 0x0e, 0x7a, 0x15, 0x4e, 0xf5, 0x39, 0x0a, 0x1e, + 0xeb, 0xf8, 0xa4, 0xfe, 0xc2, 0x89, 0xb0, 0xbf, 0x20, 0x58, 0x07, 0x57, 0xfb, 0x44, 0x78, 0xb5, + 0x7f, 0x15, 0xc0, 0x4f, 0x0e, 0xf8, 0xc7, 0xfe, 0x22, 0xc1, 0x63, 0x7f, 0x97, 0x21, 0x41, 0x34, + 0x49, 0xc8, 0x69, 0xd0, 0x14, 0x13, 0x4d, 0x08, 0x24, 0x17, 0x18, 0xb6, 0x6c, 0x00, 0x1a, 0x4c, + 0xd0, 0x8e, 0xa8, 0xe2, 0x85, 0x70, 0x15, 0x67, 0x47, 0xa6, 0x7a, 0x87, 0x57, 0xf5, 0x06, 0x24, + 0xe8, 0xc8, 0x0f, 0xbd, 0x4b, 0xf9, 0x75, 0x00, 0x9a, 0xeb, 0xda, 0xc6, 0x4e, 0xcf, 0xaf, 0x60, + 0x61, 0xb8, 0xe6, 0x94, 0x05, 0x5e, 0xe5, 0x01, 0xae, 0x42, 0xb3, 0x3e, 0x69, 0x40, 0x8d, 0x02, + 0x0c, 0xe5, 0x0d, 0x28, 0x84, 0x69, 0x87, 0xdf, 0x0d, 0xf5, 0x1f, 0x7e, 0xc9, 0x08, 0xff, 0xc6, + 0xf3, 0x8e, 0xf8, 0x63, 0x4c, 0xf4, 0x43, 0xfe, 0x50, 0x14, 0x72, 0x41, 0xc5, 0xfb, 0x8b, 0xe7, + 0x82, 0xc8, 0xdf, 0x14, 0x81, 0xb4, 0xd7, 0xfd, 0x23, 0x0e, 0x3b, 0xfb, 0x77, 0x84, 0xbd, 0xcd, + 0x0b, 0xb6, 0x4d, 0x14, 0xf3, 0xb6, 0x89, 0xae, 0x7a, 0xcb, 0xdf, 0xa8, 0x84, 0x48, 0x50, 0xd6, + 0xe2, 0xc0, 0x21, 0x5f, 0xed, 0xaf, 0x4e, 0x76, 0x15, 0x6f, 0x16, 0x12, 0xc1, 0x6b, 0x74, 0xec, + 0x43, 0x6e, 0x05, 0x4e, 0x18, 0xb1, 0x89, 0x18, 0xbc, 0xb3, 0x17, 0x39, 0xf6, 0x9d, 0x3d, 0xaf, + 0x96, 0x68, 0xb0, 0x96, 0xef, 0x8c, 0x40, 0x5a, 0xcc, 0x09, 0xf4, 0xbe, 0xe0, 0xc9, 0x33, 0xb1, + 0xb5, 0x39, 0xd2, 0x1e, 0x71, 0xfe, 0x81, 0x83, 0x67, 0x03, 0x07, 0xae, 0x63, 0xc7, 0x3d, 0x70, + 0xcd, 0x3d, 0xbb, 0x3f, 0x8e, 0x80, 0xd4, 0x3f, 0x63, 0xbf, 0xec, 0xd6, 0x0d, 0x2e, 0x73, 0xb1, + 0x21, 0xcb, 0xdc, 0xa8, 0x53, 0xd4, 0xf1, 0x51, 0xa7, 0xa8, 0x07, 0x7b, 0x9d, 0xb8, 0xcf, 0x5e, + 0x7f, 0x38, 0x0a, 0xd9, 0x40, 0x7a, 0x14, 0x3d, 0x13, 0x3a, 0x91, 0xbd, 0x78, 0x54, 0x2a, 0x35, + 0x70, 0x24, 0x3b, 0x24, 0xa6, 0xe8, 0xf1, 0xc5, 0xf4, 0xce, 0xdf, 0xce, 0x1a, 0x7e, 0x81, 0x35, + 0x31, 0xe2, 0x02, 0xeb, 0x5f, 0x8d, 0x40, 0xda, 0x73, 0xbb, 0x8f, 0xbb, 0x89, 0x79, 0x12, 0x92, + 0xdc, 0xb3, 0x64, 0xbb, 0x98, 0xfc, 0x6b, 0x68, 0x5a, 0xb9, 0x04, 0x69, 0xf1, 0xf7, 0x14, 0xf9, + 0xaa, 0xe6, 0x7d, 0x5f, 0x78, 0x1e, 0xb2, 0x81, 0x0d, 0x60, 0x62, 0x1a, 0x37, 0x6a, 0xef, 0x97, + 0xa6, 0x4a, 0xa9, 0xbb, 0xf7, 0x16, 0x63, 0x1b, 0xf8, 0x0e, 0x99, 0xcd, 0x4a, 0xad, 0x7a, 0xbd, + 0x56, 0x7d, 0x49, 0x8a, 0x94, 0xb2, 0x77, 0xef, 0x2d, 0xa6, 0x14, 0x4c, 0x33, 0x8a, 0x17, 0x5e, + 0x82, 0x62, 0xdf, 0xc0, 0x84, 0xdd, 0x16, 0x04, 0x85, 0x95, 0xed, 0xad, 0xb5, 0x7a, 0xb5, 0xdc, + 0xac, 0xa9, 0xec, 0xdc, 0x2e, 0x3a, 0x05, 0x33, 0x6b, 0xf5, 0xd5, 0xeb, 0x4d, 0xb5, 0xba, 0x56, + 0xaf, 0x6d, 0x34, 0xd5, 0x72, 0xb3, 0x59, 0xae, 0xbe, 0x24, 0x45, 0x2f, 0xdd, 0xcb, 0x42, 0xbc, + 0x5c, 0xa9, 0xd6, 0x51, 0x15, 0xe2, 0x34, 0x15, 0x72, 0xe4, 0x09, 0xb0, 0xd2, 0xd1, 0xb9, 0x61, + 0x74, 0x0d, 0x12, 0x34, 0x4b, 0x82, 0x8e, 0x3e, 0x12, 0x56, 0x1a, 0x93, 0x2c, 0x26, 0x8d, 0xa1, + 0x33, 0xf2, 0xc8, 0x33, 0x62, 0xa5, 0xa3, 0x73, 0xc7, 0x68, 0x0d, 0x52, 0x22, 0x48, 0x1e, 0x77, + 0x70, 0xab, 0x34, 0x36, 0xa1, 0x4b, 0xba, 0xc6, 0x92, 0x0d, 0x47, 0x1f, 0x1f, 0x2b, 0x8d, 0xc9, + 0x2a, 0xa3, 0xba, 0x77, 0x9f, 0x69, 0xcc, 0x89, 0xb0, 0xd2, 0xb8, 0x3c, 0x31, 0x52, 0x20, 0xe3, + 0xa7, 0x71, 0xc6, 0x1f, 0x8a, 0x2b, 0x4d, 0x90, 0x30, 0x47, 0x1f, 0x80, 0x7c, 0x38, 0xd4, 0x9d, + 0xec, 0xd4, 0x59, 0x69, 0xc2, 0x8c, 0x34, 0xe1, 0x1f, 0x8e, 0x7b, 0x27, 0x3b, 0x85, 0x56, 0x9a, + 0x30, 0x41, 0x8d, 0x5e, 0x87, 0xe9, 0xc1, 0xb8, 0x74, 0xf2, 0x43, 0x69, 0xa5, 0x63, 0xa4, 0xac, + 0x51, 0x07, 0xd0, 0x90, 0x78, 0xf6, 0x18, 0x67, 0xd4, 0x4a, 0xc7, 0xc9, 0x60, 0xa3, 0x16, 0x14, + 0xfb, 0x83, 0xc4, 0x49, 0xcf, 0xac, 0x95, 0x26, 0xce, 0x66, 0xb3, 0x5a, 0xc2, 0xc1, 0xe5, 0xa4, + 0x67, 0xd8, 0x4a, 0x13, 0x27, 0xb7, 0xd1, 0x36, 0x40, 0x20, 0x3e, 0x9c, 0xe0, 0x4c, 0x5b, 0x69, + 0x92, 0x34, 0x37, 0xea, 0xc2, 0xcc, 0xb0, 0xc0, 0xf1, 0x38, 0x47, 0xdc, 0x4a, 0xc7, 0xca, 0x7e, + 0x13, 0x7d, 0x0e, 0x87, 0x80, 0x93, 0x1d, 0x79, 0x2b, 0x4d, 0x98, 0x06, 0xaf, 0x94, 0x47, 0x9e, + 0x73, 0x3e, 0x77, 0xe4, 0x39, 0x67, 0xff, 0xe4, 0xb2, 0x77, 0xb6, 0xf9, 0xdf, 0x5e, 0x84, 0xf7, + 0xf0, 0x17, 0x74, 0x1c, 0x57, 0xbb, 0x65, 0x98, 0x7b, 0xde, 0x33, 0x4b, 0xfc, 0x9b, 0x1f, 0x72, + 0x3e, 0xc9, 0x5f, 0xe9, 0x11, 0xd0, 0x31, 0x8f, 0x2d, 0x8d, 0x7c, 0x81, 0x72, 0xdc, 0x7d, 0x88, + 0xf1, 0xc7, 0x97, 0x8f, 0x78, 0xc8, 0x69, 0xcc, 0x73, 0x51, 0x43, 0x1e, 0x7a, 0x2a, 0x1d, 0xf9, + 0xc6, 0x40, 0xe9, 0xa8, 0x73, 0xdf, 0xc4, 0x8b, 0x2d, 0x5c, 0x37, 0x1c, 0xd7, 0xb2, 0x0d, 0x5d, + 0x6b, 0xd3, 0xe5, 0xe5, 0xea, 0xa4, 0xb7, 0xb2, 0x2a, 0x19, 0xe2, 0xae, 0xf0, 0xb7, 0xa0, 0xf8, + 0x4d, 0xa1, 0x15, 0x48, 0xde, 0xd6, 0xda, 0xec, 0x4e, 0x54, 0xf0, 0x21, 0xb8, 0x7e, 0x99, 0x07, + 0xfc, 0xa8, 0x20, 0x17, 0x46, 0x2b, 0x7f, 0x37, 0xbd, 0x4f, 0xd2, 0xe9, 0x18, 0x0e, 0xd1, 0x45, + 0x85, 0x86, 0xd2, 0x37, 0x20, 0x6e, 0x6b, 0x2e, 0x0f, 0x30, 0x2b, 0x57, 0x8e, 0xfd, 0x2e, 0x13, + 0xab, 0x81, 0xf2, 0x40, 0x2f, 0x43, 0xba, 0xa3, 0x1d, 0xa8, 0x94, 0x5f, 0xf4, 0xcb, 0xe2, 0x97, + 0xea, 0x68, 0x07, 0xa4, 0x7d, 0xe8, 0x03, 0x50, 0x24, 0x2c, 0xf5, 0x7d, 0xcd, 0xdc, 0xc3, 0x8c, + 0x73, 0xec, 0xcb, 0xe2, 0x9c, 0xef, 0x68, 0x07, 0x55, 0xca, 0x8d, 0xf0, 0xe7, 0x4f, 0x5e, 0xfd, + 0x72, 0x84, 0x67, 0x0d, 0xa8, 0x60, 0x90, 0x06, 0x92, 0xee, 0x7d, 0xd1, 0x4a, 0xc5, 0x16, 0xc7, + 0xb9, 0x51, 0x72, 0xef, 0x13, 0x6b, 0x25, 0x4f, 0x9a, 0xf7, 0xd9, 0x37, 0x17, 0x22, 0xac, 0xd6, + 0xa2, 0x3e, 0x20, 0xf6, 0x2c, 0x4b, 0x86, 0xa8, 0xd4, 0x87, 0x8d, 0x8e, 0xf5, 0x61, 0xf3, 0xc2, + 0x87, 0x65, 0x0c, 0x81, 0x51, 0x93, 0x72, 0xde, 0x87, 0x4f, 0x47, 0x20, 0xbb, 0x12, 0x78, 0xd6, + 0x71, 0x0e, 0x52, 0x1d, 0xcb, 0x34, 0x6e, 0x61, 0xdb, 0xdb, 0xa3, 0x62, 0x9f, 0xc4, 0xcf, 0x64, + 0x7f, 0x1d, 0xd0, 0x3d, 0x14, 0xaf, 0x0b, 0x89, 0x6f, 0x42, 0x75, 0x07, 0xef, 0x38, 0x86, 0x90, + 0xb3, 0x22, 0x3e, 0xd1, 0xa3, 0x20, 0x39, 0x58, 0xef, 0xd9, 0x86, 0x7b, 0xa8, 0xea, 0x96, 0xe9, + 0x6a, 0xba, 0xcb, 0xe3, 0xf0, 0xa2, 0x80, 0x57, 0x19, 0x98, 0x30, 0x69, 0x61, 0x57, 0x33, 0xda, + 0xec, 0x64, 0x66, 0x46, 0x11, 0x9f, 0xbc, 0xa9, 0x77, 0x53, 0xc1, 0x38, 0xb4, 0x0a, 0x92, 0xd5, + 0xc5, 0x76, 0xe8, 0x40, 0x0a, 0xd3, 0xc6, 0xb9, 0x5f, 0xff, 0xcc, 0x13, 0xb3, 0x5c, 0xe0, 0xfc, + 0x30, 0x03, 0xfb, 0x2b, 0x06, 0x4a, 0x51, 0x50, 0x88, 0x93, 0x2a, 0xaf, 0x86, 0x76, 0xa5, 0x7a, + 0x3b, 0xfe, 0x33, 0x32, 0xb3, 0x03, 0x42, 0x2d, 0x9b, 0x87, 0x95, 0xb9, 0x5f, 0xf3, 0x59, 0xfb, + 0x71, 0xea, 0x4b, 0xf8, 0x30, 0xb8, 0x45, 0x45, 0xd9, 0x10, 0x17, 0xfe, 0x75, 0xcd, 0x68, 0x8b, + 0x3f, 0xa4, 0xaa, 0xf0, 0x2f, 0xb4, 0xec, 0xa5, 0x17, 0xe3, 0x34, 0x1e, 0x92, 0x47, 0xe9, 0x46, + 0xc5, 0x32, 0x5b, 0xe1, 0x3c, 0x22, 0xaa, 0x42, 0xd2, 0xb5, 0x6e, 0x61, 0x93, 0x0b, 0xe8, 0x78, + 0x4f, 0xab, 0x71, 0x52, 0xf4, 0xb5, 0x20, 0xb5, 0x70, 0x1b, 0xef, 0xb1, 0xfb, 0x92, 0xfb, 0x9a, + 0x8d, 0xd9, 0x6d, 0xfd, 0xfb, 0x7a, 0x5e, 0xad, 0xe8, 0xb1, 0x6a, 0x50, 0x4e, 0x68, 0x2b, 0xfc, + 0x70, 0x68, 0x8a, 0x6f, 0x1e, 0x8f, 0xe8, 0x63, 0x40, 0xf3, 0x82, 0x96, 0x27, 0xf4, 0xd0, 0xe8, + 0xa3, 0x20, 0xf5, 0xcc, 0x1d, 0xcb, 0xa4, 0x7f, 0x7f, 0x90, 0x47, 0x51, 0x69, 0xb6, 0x53, 0xe9, + 0xc1, 0xf9, 0x4e, 0xe5, 0x16, 0x14, 0x7c, 0x54, 0x3a, 0x43, 0x32, 0xc7, 0x9d, 0x21, 0x79, 0x8f, + 0x01, 0x41, 0x41, 0xeb, 0x00, 0xfe, 0x1c, 0xa4, 0x5b, 0x65, 0xd9, 0xd1, 0x23, 0xe6, 0xcf, 0xe6, + 0x60, 0x67, 0x02, 0x0c, 0xd0, 0xd7, 0xc0, 0x4c, 0xc7, 0x30, 0x55, 0x07, 0xb7, 0x77, 0x55, 0x2e, + 0x39, 0xc2, 0x37, 0x7b, 0xfc, 0xd1, 0x9c, 0xee, 0x18, 0x66, 0x03, 0xb7, 0x77, 0x57, 0x3c, 0x2e, + 0xe8, 0xbd, 0x70, 0xc6, 0xef, 0xbd, 0x65, 0xaa, 0xfb, 0x56, 0xbb, 0xa5, 0xda, 0x78, 0x57, 0xd5, + 0xe9, 0x3b, 0x7f, 0x39, 0x2a, 0xb3, 0x53, 0x1e, 0xca, 0xa6, 0x79, 0xdd, 0x6a, 0xb7, 0x14, 0xbc, + 0x5b, 0x25, 0xc5, 0xe8, 0x21, 0xf0, 0xbb, 0xae, 0x1a, 0x2d, 0x67, 0x2e, 0xbf, 0x18, 0x3b, 0x1f, + 0x57, 0x72, 0x1e, 0xb0, 0xde, 0x72, 0x96, 0xd3, 0x1f, 0xf9, 0xe4, 0xc2, 0xd4, 0xe7, 0x3f, 0xb9, + 0x30, 0x25, 0x5f, 0xa3, 0x6f, 0x4a, 0xf1, 0x79, 0x84, 0x1d, 0x74, 0x05, 0x32, 0x9a, 0xf8, 0x60, + 0x37, 0xc6, 0x8e, 0x98, 0x87, 0x3e, 0xaa, 0xfc, 0x63, 0x11, 0x48, 0xae, 0xdc, 0xdc, 0xd2, 0x0c, + 0x1b, 0xd5, 0x60, 0xda, 0x57, 0xcc, 0x49, 0xa7, 0xb4, 0xaf, 0xcb, 0x62, 0x4e, 0x6f, 0x8c, 0x3a, + 0xaa, 0x96, 0xa9, 0x9c, 0xfd, 0xf5, 0xcf, 0x3c, 0xf1, 0x20, 0x67, 0x73, 0xb3, 0xef, 0xd4, 0x9a, + 0xe0, 0xd7, 0x7f, 0x9a, 0x2d, 0xd0, 0xe7, 0x1b, 0x90, 0x62, 0x4d, 0x75, 0xd0, 0x8b, 0x90, 0xe8, + 0x92, 0x1f, 0x3c, 0x03, 0x3f, 0x3f, 0x52, 0xc1, 0x29, 0x7e, 0x50, 0x1d, 0x18, 0x9d, 0xfc, 0x2d, + 0x51, 0x80, 0x95, 0x9b, 0x37, 0x9b, 0xb6, 0xd1, 0x6d, 0x63, 0xf7, 0x9d, 0xea, 0xfb, 0x36, 0x9c, + 0x08, 0xdc, 0x85, 0xb6, 0xf5, 0xe3, 0xf7, 0x7f, 0xc6, 0xbf, 0x16, 0x6d, 0xeb, 0x43, 0xd9, 0xb6, + 0x1c, 0xd7, 0x63, 0x1b, 0x3b, 0x3e, 0xdb, 0x15, 0xc7, 0x1d, 0x94, 0xec, 0x2b, 0x90, 0xf5, 0x85, + 0xe1, 0xa0, 0x3a, 0xa4, 0x5d, 0xfe, 0x9b, 0x0b, 0x58, 0x1e, 0x2d, 0x60, 0x41, 0x16, 0x14, 0xb2, + 0x47, 0x2e, 0xff, 0x69, 0x04, 0x20, 0x30, 0x47, 0xbe, 0x3a, 0x75, 0x8c, 0x84, 0xeb, 0xdc, 0x12, + 0xc7, 0xee, 0xfb, 0x35, 0x4e, 0xc6, 0x20, 0x20, 0xd4, 0x6f, 0x8b, 0xc2, 0xcc, 0xb6, 0x98, 0xbd, + 0x5f, 0xfd, 0x32, 0xd8, 0x86, 0x14, 0x36, 0x5d, 0xdb, 0xf0, 0xf6, 0x90, 0x9e, 0x1c, 0x35, 0xe6, + 0x43, 0x3a, 0x55, 0x33, 0x5d, 0xfb, 0x30, 0xa8, 0x01, 0x82, 0x57, 0x40, 0x1e, 0x1f, 0x8f, 0xc1, + 0xdc, 0x28, 0x52, 0x74, 0x0e, 0x8a, 0xba, 0x8d, 0x29, 0x20, 0x7c, 0x45, 0xb4, 0x20, 0xc0, 0x7c, + 0x8d, 0x51, 0x80, 0x78, 0x65, 0x44, 0xb9, 0x08, 0xea, 0xfd, 0xb9, 0x61, 0x05, 0x9f, 0x03, 0x5d, + 0x65, 0x9a, 0x50, 0x14, 0x77, 0x4e, 0x76, 0xb4, 0xb6, 0x66, 0xea, 0xc2, 0x5d, 0x3d, 0xd6, 0x92, + 0x20, 0xee, 0xad, 0x54, 0x18, 0x0b, 0x54, 0x83, 0x94, 0xe0, 0x16, 0x3f, 0x3e, 0x37, 0x41, 0x8b, + 0xce, 0x42, 0x2e, 0xb8, 0x30, 0x50, 0xd7, 0x23, 0xae, 0x64, 0x03, 0xeb, 0xc2, 0xb8, 0x95, 0x27, + 0x79, 0xe4, 0xca, 0xc3, 0xbd, 0xbb, 0x1f, 0xa0, 0x47, 0xc3, 0x5b, 0x7f, 0xfe, 0x87, 0x65, 0x0b, + 0x80, 0x4d, 0x55, 0x62, 0x49, 0xf9, 0xc8, 0xdc, 0xc7, 0x7c, 0xcf, 0x30, 0x26, 0x2b, 0x8e, 0xfb, + 0x95, 0x1a, 0xa1, 0xdf, 0x8c, 0x42, 0x2e, 0x38, 0x42, 0x7f, 0x21, 0x17, 0x2d, 0xb4, 0xe1, 0x9b, + 0x29, 0x76, 0x7d, 0xe6, 0xd1, 0x51, 0x66, 0x6a, 0x40, 0x9b, 0xc7, 0xd8, 0xa7, 0x4f, 0xc4, 0x20, + 0xc9, 0xcf, 0xb7, 0x6d, 0x0e, 0x38, 0xb2, 0x91, 0x71, 0x0f, 0x00, 0xe4, 0xc5, 0x03, 0x00, 0x43, + 0xfd, 0xd8, 0x87, 0xa1, 0x40, 0x02, 0xe2, 0xd0, 0xa1, 0xb9, 0xc8, 0xf9, 0x3c, 0x8d, 0x6b, 0xfd, + 0x23, 0xe2, 0x68, 0x01, 0xb2, 0x04, 0xcd, 0xb7, 0xc3, 0x04, 0x07, 0x3a, 0xda, 0x41, 0x8d, 0x41, + 0xd0, 0x13, 0x80, 0xf6, 0xbd, 0x04, 0x85, 0xea, 0x0b, 0x82, 0xe0, 0x4d, 0xfb, 0x25, 0x02, 0xfd, + 0x41, 0x00, 0xd2, 0x0a, 0x95, 0x3d, 0x40, 0xcd, 0x9f, 0xf7, 0x26, 0x90, 0x15, 0xfa, 0x08, 0xf5, + 0x37, 0x46, 0x98, 0x3f, 0xdc, 0x17, 0x36, 0xf3, 0x70, 0xa4, 0x39, 0xc1, 0xa4, 0xf8, 0xa3, 0x37, + 0x17, 0x4a, 0x87, 0x5a, 0xa7, 0xbd, 0x2c, 0x0f, 0xe1, 0x23, 0x0f, 0x8b, 0xe4, 0x89, 0xe3, 0x1c, + 0x0e, 0xbb, 0x97, 0xdf, 0x43, 0xd4, 0xfb, 0xee, 0xef, 0xfe, 0xc4, 0x85, 0x33, 0x81, 0x37, 0x9f, + 0x0f, 0xbc, 0xf4, 0x15, 0x1b, 0x13, 0xe2, 0xa9, 0x22, 0x7f, 0xd5, 0xf0, 0x4e, 0xc6, 0xaf, 0x03, + 0x04, 0x3c, 0xf9, 0xc8, 0xd1, 0x11, 0x82, 0x4f, 0x1f, 0x8a, 0x10, 0x02, 0x73, 0xea, 0x7d, 0xbe, + 0xd1, 0x16, 0x6f, 0x3e, 0x0c, 0x79, 0x91, 0x7c, 0xa9, 0x6a, 0x19, 0x21, 0x16, 0x82, 0x88, 0x4e, + 0xd5, 0x29, 0xf9, 0x5f, 0x47, 0xe0, 0xf4, 0x80, 0xfa, 0x79, 0x4d, 0xd6, 0x01, 0xd9, 0x81, 0x42, + 0x3a, 0x8c, 0x62, 0x2b, 0xf6, 0xfe, 0xb4, 0x79, 0xda, 0x1e, 0xb0, 0xdc, 0xef, 0xcc, 0xea, 0xc3, + 0x4d, 0xcf, 0xaf, 0x46, 0x60, 0x36, 0xd8, 0x00, 0xaf, 0x2b, 0x0d, 0xc8, 0x05, 0xab, 0xe6, 0x9d, + 0x78, 0xcf, 0x24, 0x9d, 0x08, 0xb6, 0x3f, 0xc4, 0x04, 0xdd, 0xf4, 0xa7, 0x38, 0xcb, 0x9b, 0x3d, + 0x35, 0xb1, 0x50, 0x44, 0xc3, 0x86, 0x4e, 0x75, 0x36, 0x36, 0xbf, 0x17, 0x81, 0xf8, 0x96, 0x65, + 0xb5, 0xd1, 0x07, 0x61, 0xda, 0xb4, 0x5c, 0x95, 0x4c, 0x07, 0xdc, 0x52, 0x79, 0x60, 0xcf, 0xcc, + 0x67, 0xed, 0x48, 0x59, 0x7d, 0xe1, 0xcd, 0x85, 0x41, 0xca, 0x61, 0x6f, 0xc2, 0x17, 0x4d, 0xcb, + 0xad, 0x50, 0xa4, 0x26, 0x8b, 0xfd, 0x77, 0x21, 0x1f, 0xae, 0x8e, 0x99, 0xd8, 0xf2, 0xb8, 0xea, + 0xf2, 0x63, 0xab, 0xca, 0xed, 0x04, 0xea, 0x61, 0xcf, 0x28, 0xff, 0x01, 0x19, 0xb9, 0x57, 0x41, + 0xba, 0xd9, 0x7f, 0xc4, 0xa7, 0x06, 0x29, 0x71, 0xa4, 0x27, 0x32, 0xe1, 0x69, 0xa1, 0xa0, 0x38, + 0x39, 0xed, 0x85, 0x9f, 0x89, 0x00, 0xf8, 0x49, 0x12, 0xf4, 0x38, 0x9c, 0xaa, 0x6c, 0x6e, 0xac, + 0xa8, 0x8d, 0x66, 0xb9, 0xb9, 0xdd, 0x08, 0xff, 0x25, 0x11, 0xf1, 0xfe, 0x90, 0xd3, 0xc5, 0xba, + 0xb1, 0x6b, 0xe0, 0x16, 0x7a, 0x04, 0x66, 0xc3, 0xd8, 0xe4, 0xab, 0xb6, 0x22, 0x45, 0x4a, 0xb9, + 0xbb, 0xf7, 0x16, 0xd3, 0xcc, 0x4f, 0xc4, 0x2d, 0x74, 0x1e, 0x4e, 0x0c, 0xe2, 0xd5, 0x37, 0x56, + 0xa5, 0x68, 0x29, 0x7f, 0xf7, 0xde, 0x62, 0xc6, 0x73, 0x28, 0x91, 0x0c, 0x28, 0x88, 0xc9, 0xf9, + 0xc5, 0x4a, 0x70, 0xf7, 0xde, 0x62, 0x92, 0x8d, 0x42, 0x29, 0xfe, 0x91, 0x1f, 0x9a, 0x9f, 0xba, + 0xf0, 0x75, 0x00, 0x75, 0x73, 0xd7, 0xd6, 0xe8, 0x9f, 0xd3, 0x47, 0x25, 0x38, 0x59, 0xdf, 0xb8, + 0xa6, 0x94, 0xab, 0xcd, 0xfa, 0xe6, 0x46, 0xdf, 0x1f, 0x40, 0x09, 0x97, 0xad, 0x6c, 0x6e, 0x57, + 0xd6, 0x6a, 0x6a, 0xa3, 0xbe, 0xba, 0xc1, 0x36, 0x5b, 0x43, 0x65, 0xef, 0xdf, 0x68, 0xd6, 0xd7, + 0x6b, 0x52, 0xb4, 0x72, 0x6d, 0x64, 0x32, 0xff, 0xf1, 0x23, 0x5f, 0xb9, 0xf7, 0x2d, 0x5e, 0x28, + 0xa3, 0xff, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x39, 0x56, 0x48, 0x57, 0x54, 0xa1, 0x00, 0x00, } r := bytes.NewReader(gzipped) gzipr, err := compress_gzip.NewReader(r)