diff --git a/proto/ibc/core/commitment/v1/commitment.proto b/proto/ibc/core/commitment/v1/commitment.proto index 0ed6be0f25a..9e9d22f081d 100644 --- a/proto/ibc/core/commitment/v1/commitment.proto +++ b/proto/ibc/core/commitment/v1/commitment.proto @@ -4,7 +4,7 @@ package ibc.core.commitment.v1; option go_package = "github.com/cosmos/cosmos-sdk/x/ibc/core/23-commitment/types"; import "gogoproto/gogo.proto"; -import "tendermint/crypto/proof.proto"; +import "confio/proofs.proto"; // MerkleRoot defines a merkle root hash. // In the Cosmos SDK, the AppHash of a block header becomes the root. @@ -23,42 +23,18 @@ message MerklePrefix { // MerklePath is the path used to verify commitment proofs, which can be an // arbitrary structured object (defined by a commitment type). +// MerklePath is represented from root-to-leaf message MerklePath { option (gogoproto.goproto_stringer) = false; - KeyPath key_path = 1 [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"key_path\""]; + repeated string key_path = 1 [(gogoproto.moretags) = "yaml:\"key_path\""]; } -// MerkleProof is a wrapper type that contains a merkle proof. +// MerkleProof is a wrapper type over a chain of CommitmentProofs. // It demonstrates membership or non-membership for an element or set of // elements, verifiable in conjunction with a known commitment root. Proofs // should be succinct. +// MerkleProofs are ordered from leaf-to-root message MerkleProof { - tendermint.crypto.ProofOps proof = 1; -} - -// KeyPath defines a slice of keys -message KeyPath { - option (gogoproto.goproto_stringer) = false; - option (gogoproto.goproto_getters) = false; - - repeated Key keys = 1; -} - -// Key defines a proof Key -message Key { - option (gogoproto.goproto_getters) = false; - - bytes name = 1; - KeyEncoding enc = 2; -} - -// KeyEncoding defines the encoding format of a key's bytes. -enum KeyEncoding { - option (gogoproto.goproto_enum_prefix) = false; - - // URL encoding - KEY_ENCODING_URL_UNSPECIFIED = 0 [(gogoproto.enumvalue_customname) = "URL"]; - // Hex encoding - KEY_ENCODING_HEX = 1 [(gogoproto.enumvalue_customname) = "HEX"]; -} + repeated ics23.CommitmentProof proofs = 1; +} \ No newline at end of file diff --git a/x/ibc/core/03-connection/types/msgs_test.go b/x/ibc/core/03-connection/types/msgs_test.go index cfb8ce73510..f839637906e 100644 --- a/x/ibc/core/03-connection/types/msgs_test.go +++ b/x/ibc/core/03-connection/types/msgs_test.go @@ -62,9 +62,10 @@ func (suite *MsgTestSuite) SetupTest() { Prove: true, }) - merkleProof := commitmenttypes.MerkleProof{Proof: res.ProofOps} + merkleProof, err := commitmenttypes.ConvertProofs(res.ProofOps) + suite.Require().NoError(err) proof, err := app.AppCodec().MarshalBinaryBare(&merkleProof) - suite.NoError(err) + suite.Require().NoError(err) suite.proof = proof diff --git a/x/ibc/core/04-channel/keeper/keeper_test.go b/x/ibc/core/04-channel/keeper/keeper_test.go index 9fcc9e20da6..01f7a758496 100644 --- a/x/ibc/core/04-channel/keeper/keeper_test.go +++ b/x/ibc/core/04-channel/keeper/keeper_test.go @@ -30,6 +30,9 @@ func (suite *KeeperTestSuite) SetupTest() { suite.coordinator = ibctesting.NewCoordinator(suite.T(), 2) suite.chainA = suite.coordinator.GetChain(ibctesting.GetChainID(0)) suite.chainB = suite.coordinator.GetChain(ibctesting.GetChainID(1)) + // commit some blocks so that QueryProof returns valid proof (cannot return valid query if height <= 1) + suite.coordinator.CommitNBlocks(suite.chainA, 2) + suite.coordinator.CommitNBlocks(suite.chainB, 2) } // TestSetChannel create clients and connections on both chains. It tests for the non-existence diff --git a/x/ibc/core/04-channel/types/msgs_test.go b/x/ibc/core/04-channel/types/msgs_test.go index 9cf466840c7..f7004df6820 100644 --- a/x/ibc/core/04-channel/types/msgs_test.go +++ b/x/ibc/core/04-channel/types/msgs_test.go @@ -93,9 +93,10 @@ func (suite *TypesTestSuite) SetupTest() { Prove: true, }) - merkleProof := commitmenttypes.MerkleProof{Proof: res.ProofOps} + merkleProof, err := commitmenttypes.ConvertProofs(res.ProofOps) + suite.Require().NoError(err) proof, err := app.AppCodec().MarshalBinaryBare(&merkleProof) - suite.NoError(err) + suite.Require().NoError(err) suite.proof = proof } diff --git a/x/ibc/core/23-commitment/types/commitment.pb.go b/x/ibc/core/23-commitment/types/commitment.pb.go index ac721271137..bb28053e7f7 100644 --- a/x/ibc/core/23-commitment/types/commitment.pb.go +++ b/x/ibc/core/23-commitment/types/commitment.pb.go @@ -5,9 +5,9 @@ package types import ( fmt "fmt" + _go "github.com/confio/ics23/go" _ "github.com/gogo/protobuf/gogoproto" proto "github.com/gogo/protobuf/proto" - crypto "github.com/tendermint/tendermint/proto/tendermint/crypto" io "io" math "math" math_bits "math/bits" @@ -24,34 +24,6 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package -// KeyEncoding defines the encoding format of a key's bytes. -type KeyEncoding int32 - -const ( - // URL encoding - URL KeyEncoding = 0 - // Hex encoding - HEX KeyEncoding = 1 -) - -var KeyEncoding_name = map[int32]string{ - 0: "KEY_ENCODING_URL_UNSPECIFIED", - 1: "KEY_ENCODING_HEX", -} - -var KeyEncoding_value = map[string]int32{ - "KEY_ENCODING_URL_UNSPECIFIED": 0, - "KEY_ENCODING_HEX": 1, -} - -func (x KeyEncoding) String() string { - return proto.EnumName(KeyEncoding_name, int32(x)) -} - -func (KeyEncoding) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_7921d88972a41469, []int{0} -} - // MerkleRoot defines a merkle root hash. // In the Cosmos SDK, the AppHash of a block header becomes the root. type MerkleRoot struct { @@ -141,7 +113,7 @@ func (m *MerklePrefix) GetKeyPrefix() []byte { // MerklePath is the path used to verify commitment proofs, which can be an // arbitrary structured object (defined by a commitment type). type MerklePath struct { - KeyPath KeyPath `protobuf:"bytes,1,opt,name=key_path,json=keyPath,proto3" json:"key_path" yaml:"key_path"` + KeyPath []string `protobuf:"bytes,1,rep,name=key_path,json=keyPath,proto3" json:"key_path,omitempty" yaml:"key_path"` } func (m *MerklePath) Reset() { *m = MerklePath{} } @@ -176,19 +148,19 @@ func (m *MerklePath) XXX_DiscardUnknown() { var xxx_messageInfo_MerklePath proto.InternalMessageInfo -func (m *MerklePath) GetKeyPath() KeyPath { +func (m *MerklePath) GetKeyPath() []string { if m != nil { return m.KeyPath } - return KeyPath{} + return nil } -// MerkleProof is a wrapper type that contains a merkle proof. +// MerkleProof is a wrapper type over a chain of CommitmentProofs. // It demonstrates membership or non-membership for an element or set of // elements, verifiable in conjunction with a known commitment root. Proofs // should be succinct. type MerkleProof struct { - Proof *crypto.ProofOps `protobuf:"bytes,1,opt,name=proof,proto3" json:"proof,omitempty"` + Proofs []*_go.CommitmentProof `protobuf:"bytes,1,rep,name=proofs,proto3" json:"proofs,omitempty"` } func (m *MerkleProof) Reset() { *m = MerkleProof{} } @@ -224,97 +196,18 @@ func (m *MerkleProof) XXX_DiscardUnknown() { var xxx_messageInfo_MerkleProof proto.InternalMessageInfo -func (m *MerkleProof) GetProof() *crypto.ProofOps { +func (m *MerkleProof) GetProofs() []*_go.CommitmentProof { if m != nil { - return m.Proof + return m.Proofs } return nil } -// KeyPath defines a slice of keys -type KeyPath struct { - Keys []*Key `protobuf:"bytes,1,rep,name=keys,proto3" json:"keys,omitempty"` -} - -func (m *KeyPath) Reset() { *m = KeyPath{} } -func (*KeyPath) ProtoMessage() {} -func (*KeyPath) Descriptor() ([]byte, []int) { - return fileDescriptor_7921d88972a41469, []int{4} -} -func (m *KeyPath) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *KeyPath) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_KeyPath.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *KeyPath) XXX_Merge(src proto.Message) { - xxx_messageInfo_KeyPath.Merge(m, src) -} -func (m *KeyPath) XXX_Size() int { - return m.Size() -} -func (m *KeyPath) XXX_DiscardUnknown() { - xxx_messageInfo_KeyPath.DiscardUnknown(m) -} - -var xxx_messageInfo_KeyPath proto.InternalMessageInfo - -// Key defines a proof Key -type Key struct { - Name []byte `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Enc KeyEncoding `protobuf:"varint,2,opt,name=enc,proto3,enum=ibc.core.commitment.v1.KeyEncoding" json:"enc,omitempty"` -} - -func (m *Key) Reset() { *m = Key{} } -func (m *Key) String() string { return proto.CompactTextString(m) } -func (*Key) ProtoMessage() {} -func (*Key) Descriptor() ([]byte, []int) { - return fileDescriptor_7921d88972a41469, []int{5} -} -func (m *Key) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *Key) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_Key.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *Key) XXX_Merge(src proto.Message) { - xxx_messageInfo_Key.Merge(m, src) -} -func (m *Key) XXX_Size() int { - return m.Size() -} -func (m *Key) XXX_DiscardUnknown() { - xxx_messageInfo_Key.DiscardUnknown(m) -} - -var xxx_messageInfo_Key proto.InternalMessageInfo - func init() { - proto.RegisterEnum("ibc.core.commitment.v1.KeyEncoding", KeyEncoding_name, KeyEncoding_value) proto.RegisterType((*MerkleRoot)(nil), "ibc.core.commitment.v1.MerkleRoot") proto.RegisterType((*MerklePrefix)(nil), "ibc.core.commitment.v1.MerklePrefix") proto.RegisterType((*MerklePath)(nil), "ibc.core.commitment.v1.MerklePath") proto.RegisterType((*MerkleProof)(nil), "ibc.core.commitment.v1.MerkleProof") - proto.RegisterType((*KeyPath)(nil), "ibc.core.commitment.v1.KeyPath") - proto.RegisterType((*Key)(nil), "ibc.core.commitment.v1.Key") } func init() { @@ -322,39 +215,28 @@ func init() { } var fileDescriptor_7921d88972a41469 = []byte{ - // 499 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0x4f, 0x6f, 0xd3, 0x30, - 0x18, 0xc6, 0x13, 0x5a, 0xe8, 0x70, 0x27, 0x28, 0x16, 0x7f, 0xaa, 0xc2, 0x92, 0x2a, 0x48, 0x30, - 0x90, 0x16, 0xab, 0x1d, 0x5c, 0xca, 0x05, 0x75, 0x0d, 0xac, 0xea, 0xe8, 0x2a, 0x4f, 0x45, 0x03, - 0x09, 0x55, 0x69, 0xea, 0x26, 0x51, 0x96, 0x38, 0x4a, 0xcc, 0xb4, 0x7c, 0x83, 0x89, 0x13, 0x47, - 0x2e, 0x48, 0x48, 0x7c, 0x99, 0x1d, 0x77, 0xe4, 0x54, 0xa1, 0xf6, 0x1b, 0xec, 0x13, 0x20, 0xdb, - 0x2d, 0x0b, 0x12, 0x70, 0xca, 0x6b, 0xbd, 0xbf, 0x37, 0xcf, 0xe3, 0xc7, 0x2f, 0x78, 0xec, 0x8f, - 0x1d, 0xe4, 0xd0, 0x84, 0x20, 0x87, 0x86, 0xa1, 0xcf, 0x42, 0x12, 0x31, 0x74, 0xdc, 0xc8, 0x9d, - 0xcc, 0x38, 0xa1, 0x8c, 0xc2, 0xbb, 0xfe, 0xd8, 0x31, 0x39, 0x68, 0xe6, 0x5a, 0xc7, 0x8d, 0xda, - 0x6d, 0x97, 0xba, 0x54, 0x20, 0x88, 0x57, 0x92, 0xae, 0x6d, 0x30, 0x12, 0x4d, 0x48, 0x12, 0xfa, - 0x11, 0x43, 0x4e, 0x92, 0xc5, 0x8c, 0xa2, 0x38, 0xa1, 0x74, 0x2a, 0xdb, 0xc6, 0x23, 0x00, 0xde, - 0x90, 0x24, 0x38, 0x22, 0x98, 0x52, 0x06, 0x21, 0x28, 0x7a, 0x76, 0xea, 0x55, 0xd5, 0xba, 0xba, - 0xb9, 0x8e, 0x45, 0xdd, 0x2a, 0x9e, 0x7e, 0xd3, 0x15, 0xa3, 0x03, 0xd6, 0x25, 0x37, 0x48, 0xc8, - 0xd4, 0x3f, 0x81, 0xcf, 0x00, 0x08, 0x48, 0x36, 0x8a, 0xc5, 0x49, 0xf2, 0xed, 0x3b, 0x17, 0x33, - 0xfd, 0x56, 0x66, 0x87, 0x47, 0x2d, 0xe3, 0xb2, 0x67, 0xe0, 0xeb, 0x01, 0xc9, 0xe4, 0x94, 0xe1, - 0xae, 0xd4, 0x06, 0x36, 0xf3, 0xe0, 0x01, 0x58, 0x13, 0x9c, 0xcd, 0xa4, 0x62, 0xb9, 0xa9, 0x9b, - 0x7f, 0xbf, 0x9b, 0xd9, 0x23, 0x19, 0x1f, 0x69, 0xdf, 0x3b, 0x9b, 0xe9, 0xca, 0xc5, 0x4c, 0xbf, - 0x99, 0x93, 0xb1, 0x99, 0x67, 0xe0, 0x52, 0x20, 0x89, 0x56, 0xf1, 0x0b, 0xb7, 0xfb, 0x12, 0x94, - 0x57, 0x76, 0x29, 0x9d, 0xc2, 0x06, 0xb8, 0x2a, 0x2e, 0xbd, 0x94, 0xb9, 0x6f, 0x5e, 0x86, 0x62, - 0xca, 0x50, 0x4c, 0x01, 0xee, 0xc7, 0x29, 0x96, 0xa4, 0xd1, 0x01, 0xa5, 0xa5, 0x28, 0x44, 0xa0, - 0x18, 0x90, 0x2c, 0xad, 0xaa, 0xf5, 0x82, 0x18, 0xfe, 0xb7, 0x47, 0x2c, 0xc0, 0xd6, 0x1a, 0x8f, - 0x4c, 0xf8, 0x78, 0x0b, 0x0a, 0x3d, 0x92, 0xf1, 0x5c, 0x23, 0x3b, 0x24, 0xab, 0x5c, 0x79, 0x0d, - 0x9f, 0x83, 0x02, 0x89, 0x9c, 0xea, 0x95, 0xba, 0xba, 0x79, 0xa3, 0xf9, 0xf0, 0x3f, 0x3f, 0xb5, - 0x22, 0x87, 0x4e, 0xfc, 0xc8, 0xc5, 0x9c, 0x97, 0xcf, 0xf1, 0xf4, 0x03, 0x28, 0xe7, 0x3a, 0xf0, - 0x09, 0x78, 0xd0, 0xb3, 0xde, 0x8d, 0xac, 0xfe, 0xce, 0x7e, 0xa7, 0xdb, 0x7f, 0x3d, 0x1a, 0xe2, - 0xbd, 0xd1, 0xb0, 0x7f, 0x30, 0xb0, 0x76, 0xba, 0xaf, 0xba, 0x56, 0xa7, 0xa2, 0xd4, 0x4a, 0x9f, - 0xbe, 0xd6, 0x0b, 0x43, 0xbc, 0x07, 0x37, 0x40, 0xe5, 0x0f, 0x74, 0xd7, 0x3a, 0xac, 0xa8, 0xb2, - 0xbd, 0x6b, 0x1d, 0xd6, 0x8a, 0xa7, 0xdf, 0x35, 0xa5, 0x3d, 0x3c, 0x9b, 0x6b, 0xea, 0xf9, 0x5c, - 0x53, 0x7f, 0xce, 0x35, 0xf5, 0xf3, 0x42, 0x53, 0xce, 0x17, 0x9a, 0xf2, 0x63, 0xa1, 0x29, 0xef, - 0x5f, 0xb8, 0x3e, 0xf3, 0x3e, 0x8e, 0xb9, 0x4b, 0xe4, 0xd0, 0x34, 0xa4, 0xe9, 0xf2, 0xb3, 0x95, - 0x4e, 0x02, 0x74, 0x82, 0x7e, 0x2f, 0x71, 0x73, 0x7b, 0x2b, 0xb7, 0xc7, 0x2c, 0x8b, 0x49, 0x3a, - 0xbe, 0x26, 0x76, 0x6e, 0xfb, 0x57, 0x00, 0x00, 0x00, 0xff, 0xff, 0x8a, 0x78, 0x4b, 0x97, 0xeb, - 0x02, 0x00, 0x00, + // 334 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x4c, 0x91, 0xcf, 0x4e, 0xfa, 0x40, + 0x10, 0xc7, 0xdb, 0xfc, 0x08, 0x3f, 0x59, 0x48, 0x8c, 0x45, 0x89, 0xe1, 0x50, 0x4c, 0x0f, 0xca, + 0x85, 0xdd, 0x00, 0x9e, 0x30, 0x5e, 0xaa, 0x57, 0x13, 0xd2, 0xc4, 0x8b, 0x17, 0xd3, 0xae, 0x5b, + 0xba, 0x29, 0x65, 0x9a, 0xee, 0x4a, 0xe8, 0x1b, 0x78, 0xf4, 0xe8, 0xd1, 0xc7, 0xf1, 0xc8, 0xd1, + 0x13, 0x31, 0xf0, 0x06, 0x3c, 0x81, 0xe9, 0x2e, 0x60, 0x4f, 0x3b, 0xb3, 0xf3, 0x99, 0x7f, 0xdf, + 0x41, 0x57, 0x3c, 0xa0, 0x84, 0x42, 0xc6, 0x08, 0x85, 0x24, 0xe1, 0x32, 0x61, 0x33, 0x49, 0xe6, + 0xfd, 0x92, 0x87, 0xd3, 0x0c, 0x24, 0x58, 0x2d, 0x1e, 0x50, 0x5c, 0x80, 0xb8, 0x14, 0x9a, 0xf7, + 0xdb, 0xa7, 0x13, 0x98, 0x80, 0x42, 0x48, 0x61, 0x69, 0xba, 0xdd, 0xa4, 0x30, 0x0b, 0x39, 0x90, + 0x34, 0x03, 0x08, 0x85, 0xfe, 0x74, 0x2e, 0x11, 0x7a, 0x60, 0x59, 0x3c, 0x65, 0x1e, 0x80, 0xb4, + 0x2c, 0x54, 0x89, 0x7c, 0x11, 0x9d, 0x9b, 0x17, 0x66, 0xb7, 0xe1, 0x29, 0x7b, 0x54, 0x79, 0xfb, + 0xec, 0x18, 0xce, 0x3d, 0x6a, 0x68, 0x6e, 0x9c, 0xb1, 0x90, 0x2f, 0xac, 0x6b, 0x84, 0x62, 0x96, + 0x3f, 0xa7, 0xca, 0xd3, 0xbc, 0x7b, 0xb6, 0x5d, 0x75, 0x4e, 0x72, 0x3f, 0x99, 0x8e, 0x9c, 0xbf, + 0x98, 0xe3, 0xd5, 0x62, 0x96, 0xeb, 0x2c, 0xc7, 0xdd, 0x77, 0x1b, 0xfb, 0x32, 0xb2, 0x30, 0x3a, + 0x52, 0x9c, 0x2f, 0x8b, 0x8e, 0xff, 0xba, 0x35, 0xb7, 0xb9, 0x5d, 0x75, 0x8e, 0x4b, 0x15, 0x7c, + 0x19, 0x39, 0xde, 0xff, 0x22, 0xdf, 0x97, 0xd1, 0xa8, 0xf2, 0x51, 0x4c, 0x72, 0x8b, 0xea, 0xfb, + 0x49, 0x00, 0x42, 0x0b, 0xa3, 0xaa, 0x5e, 0x48, 0x95, 0xa8, 0x0f, 0x5a, 0x98, 0x53, 0x31, 0x18, + 0xe2, 0xbb, 0x83, 0x22, 0x8a, 0xf3, 0x76, 0x94, 0xfb, 0xf8, 0xb5, 0xb6, 0xcd, 0xe5, 0xda, 0x36, + 0x7f, 0xd6, 0xb6, 0xf9, 0xbe, 0xb1, 0x8d, 0xe5, 0xc6, 0x36, 0xbe, 0x37, 0xb6, 0xf1, 0x74, 0x33, + 0xe1, 0x32, 0x7a, 0x0d, 0x0a, 0x2d, 0x09, 0x05, 0x91, 0x80, 0xd8, 0x3d, 0x3d, 0xf1, 0x12, 0x93, + 0x05, 0x39, 0x5c, 0x65, 0x30, 0xec, 0x95, 0x0e, 0x23, 0xf3, 0x94, 0x89, 0xa0, 0xaa, 0xe4, 0x1c, + 0xfe, 0x06, 0x00, 0x00, 0xff, 0xff, 0x1b, 0xe7, 0x68, 0xd0, 0xbc, 0x01, 0x00, 0x00, } func (m *MerkleRoot) Marshal() (dAtA []byte, err error) { @@ -437,16 +319,15 @@ func (m *MerklePath) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - { - size, err := m.KeyPath.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err + if len(m.KeyPath) > 0 { + for iNdEx := len(m.KeyPath) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.KeyPath[iNdEx]) + copy(dAtA[i:], m.KeyPath[iNdEx]) + i = encodeVarintCommitment(dAtA, i, uint64(len(m.KeyPath[iNdEx]))) + i-- + dAtA[i] = 0xa } - i -= size - i = encodeVarintCommitment(dAtA, i, uint64(size)) } - i-- - dAtA[i] = 0xa return len(dAtA) - i, nil } @@ -470,45 +351,10 @@ func (m *MerkleProof) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - if m.Proof != nil { - { - size, err := m.Proof.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintCommitment(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *KeyPath) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *KeyPath) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *KeyPath) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if len(m.Keys) > 0 { - for iNdEx := len(m.Keys) - 1; iNdEx >= 0; iNdEx-- { + if len(m.Proofs) > 0 { + for iNdEx := len(m.Proofs) - 1; iNdEx >= 0; iNdEx-- { { - size, err := m.Keys[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + size, err := m.Proofs[iNdEx].MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -522,41 +368,6 @@ func (m *KeyPath) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *Key) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Key) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *Key) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.Enc != 0 { - i = encodeVarintCommitment(dAtA, i, uint64(m.Enc)) - i-- - dAtA[i] = 0x10 - } - if len(m.Name) > 0 { - i -= len(m.Name) - copy(dAtA[i:], m.Name) - i = encodeVarintCommitment(dAtA, i, uint64(len(m.Name))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - func encodeVarintCommitment(dAtA []byte, offset int, v uint64) int { offset -= sovCommitment(v) base := offset @@ -600,32 +411,23 @@ func (m *MerklePath) Size() (n int) { } var l int _ = l - l = m.KeyPath.Size() - n += 1 + l + sovCommitment(uint64(l)) - return n -} - -func (m *MerkleProof) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Proof != nil { - l = m.Proof.Size() - n += 1 + l + sovCommitment(uint64(l)) + if len(m.KeyPath) > 0 { + for _, s := range m.KeyPath { + l = len(s) + n += 1 + l + sovCommitment(uint64(l)) + } } return n } -func (m *KeyPath) Size() (n int) { +func (m *MerkleProof) Size() (n int) { if m == nil { return 0 } var l int _ = l - if len(m.Keys) > 0 { - for _, e := range m.Keys { + if len(m.Proofs) > 0 { + for _, e := range m.Proofs { l = e.Size() n += 1 + l + sovCommitment(uint64(l)) } @@ -633,22 +435,6 @@ func (m *KeyPath) Size() (n int) { return n } -func (m *Key) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Name) - if l > 0 { - n += 1 + l + sovCommitment(uint64(l)) - } - if m.Enc != 0 { - n += 1 + sovCommitment(uint64(m.Enc)) - } - return n -} - func sovCommitment(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } @@ -862,7 +648,7 @@ func (m *MerklePath) Unmarshal(dAtA []byte) error { if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field KeyPath", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowCommitment @@ -872,24 +658,23 @@ func (m *MerklePath) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthCommitment } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthCommitment } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.KeyPath.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.KeyPath = append(m.KeyPath, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex default: iNdEx = preIndex @@ -946,7 +731,7 @@ func (m *MerkleProof) Unmarshal(dAtA []byte) error { switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Proof", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Proofs", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -973,10 +758,8 @@ func (m *MerkleProof) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.Proof == nil { - m.Proof = &crypto.ProofOps{} - } - if err := m.Proof.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.Proofs = append(m.Proofs, &_go.CommitmentProof{}) + if err := m.Proofs[len(m.Proofs)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -1004,199 +787,6 @@ func (m *MerkleProof) Unmarshal(dAtA []byte) error { } return nil } -func (m *KeyPath) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCommitment - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: KeyPath: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: KeyPath: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Keys", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCommitment - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthCommitment - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthCommitment - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Keys = append(m.Keys, &Key{}) - if err := m.Keys[len(m.Keys)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipCommitment(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthCommitment - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthCommitment - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *Key) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCommitment - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: Key: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Key: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) - } - var byteLen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCommitment - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - byteLen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if byteLen < 0 { - return ErrInvalidLengthCommitment - } - postIndex := iNdEx + byteLen - if postIndex < 0 { - return ErrInvalidLengthCommitment - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Name = append(m.Name[:0], dAtA[iNdEx:postIndex]...) - if m.Name == nil { - m.Name = []byte{} - } - iNdEx = postIndex - case 2: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Enc", wireType) - } - m.Enc = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowCommitment - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.Enc |= KeyEncoding(b&0x7F) << shift - if b < 0x80 { - break - } - } - default: - iNdEx = preIndex - skippy, err := skipCommitment(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthCommitment - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthCommitment - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} func skipCommitment(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 diff --git a/x/ibc/core/23-commitment/types/key_path.go b/x/ibc/core/23-commitment/types/key_path.go deleted file mode 100644 index 589406b9010..00000000000 --- a/x/ibc/core/23-commitment/types/key_path.go +++ /dev/null @@ -1,40 +0,0 @@ -package types - -import ( - fmt "fmt" - "net/url" -) - -// AppendKey appends a new key to a KeyPath -func (pth KeyPath) AppendKey(key []byte, enc KeyEncoding) KeyPath { - pth.Keys = append(pth.Keys, &Key{Name: key, Enc: enc}) - return pth -} - -// String implements the fmt.Stringer interface -func (pth *KeyPath) String() string { - res := "" - for _, key := range pth.Keys { - switch key.Enc { - case URL: - res += "/" + url.PathEscape(string(key.Name)) - case HEX: - res += "/x:" + fmt.Sprintf("%X", key.Name) - default: - panic("unexpected key encoding type") - } - } - return res -} - -// GetKey returns the bytes representation of key at given index -// Passing in a positive index return the key at index in forward order -// from the highest key to the lowest key -// Passing in a negative index will return the key at index in reverse order -// from the lowest key to the highest key. This is the order for proof verification, -// since we prove lowest key first before moving to key of higher subtrees -func (pth *KeyPath) GetKey(i int) []byte { - total := len(pth.Keys) - index := (total + i) % total - return pth.Keys[index].Name -} diff --git a/x/ibc/core/23-commitment/types/merkle.go b/x/ibc/core/23-commitment/types/merkle.go index 87a830e2944..fe7d5c302b9 100644 --- a/x/ibc/core/23-commitment/types/merkle.go +++ b/x/ibc/core/23-commitment/types/merkle.go @@ -2,6 +2,7 @@ package types import ( "bytes" + "fmt" "net/url" ics23 "github.com/confio/ics23/go" @@ -9,7 +10,6 @@ import ( tmcrypto "github.com/tendermint/tendermint/proto/tendermint/crypto" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - host "github.com/cosmos/cosmos-sdk/x/ibc/core/24-host" "github.com/cosmos/cosmos-sdk/x/ibc/core/exported" ) @@ -68,51 +68,62 @@ func (mp MerklePrefix) Empty() bool { var _ exported.Path = (*MerklePath)(nil) // NewMerklePath creates a new MerklePath instance -func NewMerklePath(keyPathStr []string) MerklePath { - merkleKeyPath := KeyPath{} - for _, keyStr := range keyPathStr { - merkleKeyPath = merkleKeyPath.AppendKey([]byte(keyStr), URL) - } - +// The keys must be passed in from root-to-leaf order +func NewMerklePath(keyPath ...string) MerklePath { return MerklePath{ - KeyPath: merkleKeyPath, + KeyPath: keyPath, } } // String implements fmt.Stringer. +// This represents the path in the same way the tendermint KeyPath will +// represent a key path. The backslashes partition the key path into +// the respective stores they belong to. func (mp MerklePath) String() string { - return mp.KeyPath.String() + pathStr := "" + for _, k := range mp.KeyPath { + pathStr += "/" + url.PathEscape(k) + } + return pathStr } // Pretty returns the unescaped path of the URL string. +// This function will unescape any backslash within a particular store key. +// This makes the keypath more human-readable while removing information +// about the exact partitions in the key path. func (mp MerklePath) Pretty() string { - path, err := url.PathUnescape(mp.KeyPath.String()) + path, err := url.PathUnescape(mp.String()) if err != nil { panic(err) } return path } +// GetKey will return a byte representation of the key +// after URL escaping the key element +func (mp MerklePath) GetKey(i uint64) ([]byte, error) { + if i >= uint64(len(mp.KeyPath)) { + return nil, fmt.Errorf("index out of range. %d (index) >= %d (len)", i, len(mp.KeyPath)) + } + key, err := url.PathUnescape(mp.KeyPath[i]) + if err != nil { + return nil, err + } + return []byte(key), nil +} + // Empty returns true if the path is empty func (mp MerklePath) Empty() bool { - return len(mp.KeyPath.Keys) == 0 + return len(mp.KeyPath) == 0 } -// ApplyPrefix constructs a new commitment path from the arguments. It interprets -// the path argument in the context of the prefix argument. -// -// CONTRACT: provided path string MUST be a well formated path. See ICS24 for -// reference. -func ApplyPrefix(prefix exported.Prefix, path string) (MerklePath, error) { - err := host.PathValidator(path) - if err != nil { - return MerklePath{}, err - } - +// ApplyPrefix constructs a new commitment path from the arguments. It prepends the prefix key +// with the given path. +func ApplyPrefix(prefix exported.Prefix, path MerklePath) (MerklePath, error) { if prefix == nil || prefix.Empty() { return MerklePath{}, sdkerrors.Wrap(ErrInvalidPrefix, "prefix can't be empty") } - return NewMerklePath([]string{string(prefix.Bytes()), path}), nil + return NewMerklePath(append([]string{string(prefix.Bytes())}, path.KeyPath...)...), nil } var _ exported.Proof = (*MerkleProof)(nil) @@ -128,22 +139,17 @@ func (proof MerkleProof) VerifyMembership(specs []*ics23.ProofSpec, root exporte if !ok { return sdkerrors.Wrapf(ErrInvalidProof, "path %v is not of type MerklePath", path) } - if len(mpath.KeyPath.Keys) != len(specs) { + if len(mpath.KeyPath) != len(specs) { return sdkerrors.Wrapf(ErrInvalidProof, "path length %d not same as proof %d", - len(mpath.KeyPath.Keys), len(specs)) + len(mpath.KeyPath), len(specs)) } if len(value) == 0 { return sdkerrors.Wrap(ErrInvalidProof, "empty value in membership proof") } - // Convert Proof to []CommitmentProof - proofs, err := convertProofs(proof) - if err != nil { - return err - } - - // Since every proof in chain is a membership proof we can chain from index 0 - if err := verifyChainedMembershipProof(root.GetHash(), specs, proofs, mpath.KeyPath, value, 0); err != nil { + // Since every proof in chain is a membership proof we can use verifyChainedMembershipProof from index 0 + // to validate entire proof + if err := verifyChainedMembershipProof(root.GetHash(), specs, proof.Proofs, mpath, value, 0); err != nil { return err } return nil @@ -162,31 +168,37 @@ func (proof MerkleProof) VerifyNonMembership(specs []*ics23.ProofSpec, root expo if !ok { return sdkerrors.Wrapf(ErrInvalidProof, "path %v is not of type MerkleProof", path) } - if len(mpath.KeyPath.Keys) != len(specs) { + if len(mpath.KeyPath) != len(specs) { return sdkerrors.Wrapf(ErrInvalidProof, "path length %d not same as proof %d", - len(mpath.KeyPath.Keys), len(specs)) + len(mpath.KeyPath), len(specs)) } - // Convert Proof to []CommitmentProof - proofs, err := convertProofs(proof) - if err != nil { - return err - } - - // VerifyNonMembership will verify the absence of key in lowest subtree, and then chain inclusion proofs - // of all subroots up to final root - subroot, err := proofs[0].Calculate() - if err != nil { - sdkerrors.Wrapf(ErrInvalidProof, "could not calculate root for proof index 0. %v", err) - } - key := mpath.KeyPath.GetKey(-1) - if ok := ics23.VerifyNonMembership(specs[0], subroot, proofs[0], key); !ok { - return sdkerrors.Wrapf(ErrInvalidProof, "could not verify absence of key %s", string(key)) - } + switch proof.Proofs[0].Proof.(type) { + case *ics23.CommitmentProof_Nonexist: + // VerifyNonMembership will verify the absence of key in lowest subtree, and then chain inclusion proofs + // of all subroots up to final root + subroot, err := proof.Proofs[0].Calculate() + if err != nil { + return sdkerrors.Wrapf(ErrInvalidProof, "could not calculate root for proof index 0, merkle tree is likely empty. %v", err) + } + key, err := mpath.GetKey(uint64(len(mpath.KeyPath) - 1)) + if err != nil { + return sdkerrors.Wrapf(ErrInvalidProof, "could not retrieve key bytes for key: %s", mpath.KeyPath[len(mpath.KeyPath)-1]) + } + if ok := ics23.VerifyNonMembership(specs[0], subroot, proof.Proofs[0], key); !ok { + return sdkerrors.Wrapf(ErrInvalidProof, "could not verify absence of key %s. Please ensure that the path is correct.", string(key)) + } - // Verify chained membership proof starting from index 1 with value = subroot - if err := verifyChainedMembershipProof(root.GetHash(), specs, proofs, mpath.KeyPath, subroot, 1); err != nil { - return err + // Verify chained membership proof starting from index 1 with value = subroot + if err := verifyChainedMembershipProof(root.GetHash(), specs, proof.Proofs, mpath, subroot, 1); err != nil { + return err + } + case *ics23.CommitmentProof_Exist: + return sdkerrors.Wrapf(ErrInvalidProof, + "got ExistenceProof in VerifyNonMembership. If this is unexpected, please ensure that proof was queried with the correct key.") + default: + return sdkerrors.Wrapf(ErrInvalidProof, + "expected proof type: %T, got: %T", &ics23.CommitmentProof_Exist{}, proof.Proofs[0].Proof) } return nil } @@ -208,7 +220,7 @@ func (proof MerkleProof) BatchVerifyNonMembership(specs []*ics23.ProofSpec, root // The proofs and specs are passed in from lowest subtree to the highest subtree, but the keys are passed in from highest subtree to lowest. // The index specifies what index to start chaining the membership proofs, this is useful since the lowest proof may not be a membership proof, thus we // will want to start the membership proof chaining from index 1 with value being the lowest subroot -func verifyChainedMembershipProof(root []byte, specs []*ics23.ProofSpec, proofs []*ics23.CommitmentProof, keys KeyPath, value []byte, index int) error { +func verifyChainedMembershipProof(root []byte, specs []*ics23.ProofSpec, proofs []*ics23.CommitmentProof, keys MerklePath, value []byte, index int) error { var ( subroot []byte err error @@ -218,42 +230,45 @@ func verifyChainedMembershipProof(root []byte, specs []*ics23.ProofSpec, proofs // In this case, there may be no intermediate proofs to verify and we just check that lowest proof root equals final root subroot = value for i := index; i < len(proofs); i++ { - subroot, err = proofs[i].Calculate() - if err != nil { - return sdkerrors.Wrapf(ErrInvalidProof, "could not calculate proof root at index %d. %v", i, err) + switch proofs[i].Proof.(type) { + case *ics23.CommitmentProof_Exist: + subroot, err = proofs[i].Calculate() + if err != nil { + return sdkerrors.Wrapf(ErrInvalidProof, "could not calculate proof root at index %d, merkle tree may be empty. %v", i, err) + } + // Since keys are passed in from highest to lowest, we must grab their indices in reverse order + // from the proofs and specs which are lowest to highest + key, err := keys.GetKey(uint64(len(keys.KeyPath) - 1 - i)) + if err != nil { + return sdkerrors.Wrapf(ErrInvalidProof, "could not retrieve key bytes for key %s: %v", keys.KeyPath[len(keys.KeyPath)-1-i], err) + } + + // verify membership of the proof at this index with appropriate key and value + if ok := ics23.VerifyMembership(specs[i], subroot, proofs[i], key, value); !ok { + return sdkerrors.Wrapf(ErrInvalidProof, + "chained membership proof failed to verify membership of value: %X in subroot %X at index %d. Please ensure the path and value are both correct.", + value, subroot, i) + } + // Set value to subroot so that we verify next proof in chain commits to this subroot + value = subroot + case *ics23.CommitmentProof_Nonexist: + return sdkerrors.Wrapf(ErrInvalidProof, + "chained membership proof contains nonexistence proof at index %d. If this is unexpected, please ensure that proof was queried from the height that contained the value in store and was queried with the correct key.", + i) + default: + return sdkerrors.Wrapf(ErrInvalidProof, + "expected proof type: %T, got: %T", &ics23.CommitmentProof_Exist{}, proofs[i].Proof) } - // Since keys are passed in from highest to lowest, we must grab their indices in reverse order - // from the proofs and specs which are lowest to highest - key := keys.GetKey(-1 * (i + 1)) - if ok := ics23.VerifyMembership(specs[i], subroot, proofs[i], key, value); !ok { - return sdkerrors.Wrapf(ErrInvalidProof, "chained membership proof failed to verify membership of value: %X in subroot %X at index %d for proof %v", - value, subroot, i, proofs[i]) - } - // Set value to subroot so that we verify next proof in chain commits to this subroot - value = subroot } // Check that chained proof root equals passed-in root if !bytes.Equal(root, subroot) { - return sdkerrors.Wrapf(ErrInvalidProof, "proof did not commit to expected root: %X, got: %X", root, subroot) + return sdkerrors.Wrapf(ErrInvalidProof, + "proof did not commit to expected root: %X, got: %X. Please ensure proof was submitted with correct proofHeight and to the correct chain.", + root, subroot) } return nil } -// convertProofs converts a MerkleProof into []*ics23.CommitmentProof -func convertProofs(mproof MerkleProof) ([]*ics23.CommitmentProof, error) { - // Unmarshal all proof ops to CommitmentProof - proofs := make([]*ics23.CommitmentProof, len(mproof.Proof.Ops)) - for i, op := range mproof.Proof.Ops { - var p ics23.CommitmentProof - err := p.Unmarshal(op.Data) - if err != nil { - return nil, sdkerrors.Wrapf(ErrInvalidMerkleProof, "could not unmarshal proof op into CommitmentProof at index: %d", i) - } - proofs[i] = &p - } - return proofs, nil -} - // Empty returns true if the root is empty func (proof MerkleProof) Empty() bool { return proto.Equal(&proof, nil) || proto.Equal(&proof, &MerkleProof{}) || proto.Equal(&proof, &tmcrypto.ProofOps{}) @@ -277,10 +292,10 @@ func (proof MerkleProof) validateVerificationArgs(specs []*ics23.ProofSpec, root return sdkerrors.Wrap(ErrInvalidMerkleProof, "root cannot be empty") } - if len(specs) != len(proof.Proof.Ops) { + if len(specs) != len(proof.Proofs) { return sdkerrors.Wrapf(ErrInvalidMerkleProof, "length of specs: %d not equal to length of proof: %d", - len(specs), len(proof.Proof.Ops)) + len(specs), len(proof.Proofs)) } for i, spec := range specs { diff --git a/x/ibc/core/23-commitment/types/merkle_test.go b/x/ibc/core/23-commitment/types/merkle_test.go index 4da9099e85d..3c53847fadd 100644 --- a/x/ibc/core/23-commitment/types/merkle_test.go +++ b/x/ibc/core/23-commitment/types/merkle_test.go @@ -6,8 +6,6 @@ import ( "github.com/stretchr/testify/require" abci "github.com/tendermint/tendermint/abci/types" - tmcrypto "github.com/tendermint/tendermint/proto/tendermint/crypto" - tmmerkle "github.com/tendermint/tendermint/proto/tendermint/crypto" "github.com/cosmos/cosmos-sdk/x/ibc/core/23-commitment/types" ) @@ -23,9 +21,9 @@ func (suite *MerkleTestSuite) TestVerifyMembership() { }) require.NotNil(suite.T(), res.ProofOps) - proof := types.MerkleProof{ - Proof: res.ProofOps, - } + proof, err := types.ConvertProofs(res.ProofOps) + require.NoError(suite.T(), err) + suite.Require().NoError(proof.ValidateBasic()) suite.Require().Error(types.MerkleProof{}.ValidateBasic()) @@ -49,9 +47,7 @@ func (suite *MerkleTestSuite) TestVerifyMembership() { {"nil root", []byte(nil), []string{suite.storeKey.Name(), "MYKEY"}, []byte("MYVALUE"), func() {}, false}, // invalid proof with nil root {"proof is wrong length", cid.Hash, []string{suite.storeKey.Name(), "MYKEY"}, []byte("MYVALUE"), func() { proof = types.MerkleProof{ - Proof: &tmmerkle.ProofOps{ - Ops: res.ProofOps.Ops[1:], - }, + Proofs: proof.Proofs[1:], } }, false}, // invalid proof with wrong length @@ -63,7 +59,7 @@ func (suite *MerkleTestSuite) TestVerifyMembership() { tc.malleate() root := types.NewMerkleRoot(tc.root) - path := types.NewMerklePath(tc.pathArr) + path := types.NewMerklePath(tc.pathArr...) err := proof.VerifyMembership(types.GetSDKSpecs(), &root, path, tc.value) @@ -91,9 +87,9 @@ func (suite *MerkleTestSuite) TestVerifyNonMembership() { }) require.NotNil(suite.T(), res.ProofOps) - proof := types.MerkleProof{ - Proof: res.ProofOps, - } + proof, err := types.ConvertProofs(res.ProofOps) + require.NoError(suite.T(), err) + suite.Require().NoError(proof.ValidateBasic()) cases := []struct { @@ -114,9 +110,7 @@ func (suite *MerkleTestSuite) TestVerifyNonMembership() { {"nil root", []byte(nil), []string{suite.storeKey.Name(), "MYABSENTKEY"}, func() {}, false}, // invalid proof with nil root {"proof is wrong length", cid.Hash, []string{suite.storeKey.Name(), "MYKEY"}, func() { proof = types.MerkleProof{ - Proof: &tmcrypto.ProofOps{ - Ops: res.ProofOps.Ops[1:], - }, + Proofs: proof.Proofs[1:], } }, false}, // invalid proof with wrong length @@ -129,7 +123,7 @@ func (suite *MerkleTestSuite) TestVerifyNonMembership() { tc.malleate() root := types.NewMerkleRoot(tc.root) - path := types.NewMerklePath(tc.pathArr) + path := types.NewMerklePath(tc.pathArr...) err := proof.VerifyNonMembership(types.GetSDKSpecs(), &root, path) @@ -149,16 +143,30 @@ func TestApplyPrefix(t *testing.T) { prefix := types.NewMerklePrefix([]byte("storePrefixKey")) pathStr := "pathone/pathtwo/paththree/key" + path := types.MerklePath{ + KeyPath: []string{pathStr}, + } - prefixedPath, err := types.ApplyPrefix(prefix, pathStr) - require.Nil(t, err, "valid prefix returns error") + prefixedPath, err := types.ApplyPrefix(prefix, path) + require.NoError(t, err, "valid prefix returns error") require.Equal(t, "/storePrefixKey/"+pathStr, prefixedPath.Pretty(), "Prefixed path incorrect") - require.Equal(t, "/storePrefixKey/pathone%2Fpathtwo%2Fpaththree%2Fkey", prefixedPath.String(), "Prefixed scaped path incorrect") + require.Equal(t, "/storePrefixKey/pathone%2Fpathtwo%2Fpaththree%2Fkey", prefixedPath.String(), "Prefixed escaped path incorrect") +} + +func TestString(t *testing.T) { + path := types.NewMerklePath("rootKey", "storeKey", "path/to/leaf") + + require.Equal(t, "/rootKey/storeKey/path%2Fto%2Fleaf", path.String(), "path String returns unxpected value") + require.Equal(t, "/rootKey/storeKey/path/to/leaf", path.Pretty(), "path's pretty string representation is incorrect") + + onePath := types.NewMerklePath("path/to/leaf") + + require.Equal(t, "/path%2Fto%2Fleaf", onePath.String(), "one element path does not have correct string representation") + require.Equal(t, "/path/to/leaf", onePath.Pretty(), "one element path has incorrect pretty string representation") + + zeroPath := types.NewMerklePath() - // invalid prefix contains non-alphanumeric character - invalidPathStr := "invalid-path/doesitfail?/hopefully" - invalidPath, err := types.ApplyPrefix(prefix, invalidPathStr) - require.NotNil(t, err, "invalid prefix does not returns error") - require.Equal(t, types.MerklePath{}, invalidPath, "invalid prefix returns valid Path on ApplyPrefix") + require.Equal(t, "", zeroPath.String(), "zero element path does not have correct string representation") + require.Equal(t, "", zeroPath.Pretty(), "zero element path does not have correct pretty string representation") } diff --git a/x/ibc/core/23-commitment/types/utils.go b/x/ibc/core/23-commitment/types/utils.go new file mode 100644 index 00000000000..7d2937f0fb5 --- /dev/null +++ b/x/ibc/core/23-commitment/types/utils.go @@ -0,0 +1,27 @@ +package types + +import ( + ics23 "github.com/confio/ics23/go" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + crypto "github.com/tendermint/tendermint/proto/tendermint/crypto" +) + +// ConvertProofs converts crypto.ProofOps into MerkleProof +func ConvertProofs(tmProof *crypto.ProofOps) (MerkleProof, error) { + if tmProof == nil { + return MerkleProof{}, sdkerrors.Wrapf(ErrInvalidMerkleProof, "tendermint proof is nil") + } + // Unmarshal all proof ops to CommitmentProof + proofs := make([]*ics23.CommitmentProof, len(tmProof.Ops)) + for i, op := range tmProof.Ops { + var p ics23.CommitmentProof + err := p.Unmarshal(op.Data) + if err != nil || p.Proof == nil { + return MerkleProof{}, sdkerrors.Wrapf(ErrInvalidMerkleProof, "could not unmarshal proof op into CommitmentProof at index %d: %v", i, err) + } + proofs[i] = &p + } + return MerkleProof{ + Proofs: proofs, + }, nil +} diff --git a/x/ibc/core/23-commitment/types/utils_test.go b/x/ibc/core/23-commitment/types/utils_test.go new file mode 100644 index 00000000000..a4c08d13fa8 --- /dev/null +++ b/x/ibc/core/23-commitment/types/utils_test.go @@ -0,0 +1,97 @@ +package types_test + +import ( + "fmt" + + "github.com/cosmos/cosmos-sdk/x/ibc/core/23-commitment/types" + "github.com/stretchr/testify/require" + abci "github.com/tendermint/tendermint/abci/types" + crypto "github.com/tendermint/tendermint/proto/tendermint/crypto" +) + +func (suite *MerkleTestSuite) TestConvertProofs() { + suite.iavlStore.Set([]byte("MYKEY"), []byte("MYVALUE")) + cid := suite.store.Commit() + + root := types.NewMerkleRoot(cid.Hash) + existsPath := types.NewMerklePath(suite.storeKey.Name(), "MYKEY") + nonexistPath := types.NewMerklePath(suite.storeKey.Name(), "NOTMYKEY") + value := []byte("MYVALUE") + + var proofOps *crypto.ProofOps + testcases := []struct { + name string + malleate func() + keyExists bool + expPass bool + }{ + { + "success for ExistenceProof", + func() { + res := suite.store.Query(abci.RequestQuery{ + Path: fmt.Sprintf("/%s/key", suite.storeKey.Name()), // required path to get key/value+proof + Data: []byte("MYKEY"), + Prove: true, + }) + require.NotNil(suite.T(), res.ProofOps) + + proofOps = res.ProofOps + }, + true, true, + }, + { + "success for NonexistenceProof", + func() { + res := suite.store.Query(abci.RequestQuery{ + Path: fmt.Sprintf("/%s/key", suite.storeKey.Name()), // required path to get key/value+proof + Data: []byte("NOTMYKEY"), + Prove: true, + }) + require.NotNil(suite.T(), res.ProofOps) + + proofOps = res.ProofOps + }, + false, true, + }, + { + "nil proofOps", + func() { + proofOps = nil + }, + true, false, + }, + { + "proof op data is nil", + func() { + res := suite.store.Query(abci.RequestQuery{ + Path: fmt.Sprintf("/%s/key", suite.storeKey.Name()), // required path to get key/value+proof + Data: []byte("MYKEY"), + Prove: true, + }) + require.NotNil(suite.T(), res.ProofOps) + + proofOps = res.ProofOps + proofOps.Ops[0].Data = nil + }, + true, false, + }, + } + + for _, tc := range testcases { + tc.malleate() + + proof, err := types.ConvertProofs(proofOps) + if tc.expPass { + suite.Require().NoError(err, "ConvertProofs unexpectedly returned error for case: %s", tc.name) + if tc.keyExists { + err := proof.VerifyMembership(types.GetSDKSpecs(), &root, existsPath, value) + suite.Require().NoError(err, "converted proof failed to verify membership for case: %s", tc.name) + } else { + err := proof.VerifyNonMembership(types.GetSDKSpecs(), &root, nonexistPath) + suite.Require().NoError(err, "converted proof failed to verify membership for case: %s", tc.name) + } + } else { + suite.Require().Error(err, "ConvertProofs passed on invalid case for case: %s", tc.name) + } + } +} diff --git a/x/ibc/core/client/query.go b/x/ibc/core/client/query.go index 273e25583c5..dad0c28998f 100644 --- a/x/ibc/core/client/query.go +++ b/x/ibc/core/client/query.go @@ -50,8 +50,9 @@ func QueryTendermintProof(clientCtx client.Context, key []byte) ([]byte, []byte, return nil, nil, clienttypes.Height{}, err } - merkleProof := commitmenttypes.MerkleProof{ - Proof: res.ProofOps, + merkleProof, err := commitmenttypes.ConvertProofs(res.ProofOps) + if err != nil { + return nil, nil, clienttypes.Height{}, err } cdc := codec.NewProtoCodec(clientCtx.InterfaceRegistry) diff --git a/x/ibc/core/keeper/msg_server_test.go b/x/ibc/core/keeper/msg_server_test.go index 0bed10ae7a2..a80426724f9 100644 --- a/x/ibc/core/keeper/msg_server_test.go +++ b/x/ibc/core/keeper/msg_server_test.go @@ -41,6 +41,9 @@ func (suite *KeeperTestSuite) SetupTest() { suite.chainA = suite.coordinator.GetChain(ibctesting.GetChainID(0)) suite.chainB = suite.coordinator.GetChain(ibctesting.GetChainID(1)) + // commit some blocks so that QueryProof returns valid proof (cannot return valid query if height <= 1) + suite.coordinator.CommitNBlocks(suite.chainA, 2) + suite.coordinator.CommitNBlocks(suite.chainB, 2) } func TestIBCTestSuite(t *testing.T) { diff --git a/x/ibc/light-clients/06-solomachine/types/client_state.go b/x/ibc/light-clients/06-solomachine/types/client_state.go index f23b6824bf6..583193f3da6 100644 --- a/x/ibc/light-clients/06-solomachine/types/client_state.go +++ b/x/ibc/light-clients/06-solomachine/types/client_state.go @@ -100,7 +100,7 @@ func (cs ClientState) VerifyClientState( return err } - clientPrefixedPath := "clients/" + counterpartyClientIdentifier + "/" + host.ClientStatePath() + clientPrefixedPath := commitmenttypes.NewMerklePath("clients/" + counterpartyClientIdentifier + "/" + host.ClientStatePath()) path, err := commitmenttypes.ApplyPrefix(prefix, clientPrefixedPath) if err != nil { return err @@ -138,7 +138,7 @@ func (cs ClientState) VerifyClientConsensusState( return err } - clientPrefixedPath := "clients/" + counterpartyClientIdentifier + "/" + host.ConsensusStatePath(consensusHeight) + clientPrefixedPath := commitmenttypes.NewMerklePath("clients/" + counterpartyClientIdentifier + "/" + host.ConsensusStatePath(consensusHeight)) path, err := commitmenttypes.ApplyPrefix(prefix, clientPrefixedPath) if err != nil { return err @@ -175,7 +175,8 @@ func (cs ClientState) VerifyConnectionState( return err } - path, err := commitmenttypes.ApplyPrefix(prefix, host.ConnectionPath(connectionID)) + connectionPath := commitmenttypes.NewMerklePath(host.ConnectionPath(connectionID)) + path, err := commitmenttypes.ApplyPrefix(prefix, connectionPath) if err != nil { return err } @@ -212,7 +213,8 @@ func (cs ClientState) VerifyChannelState( return err } - path, err := commitmenttypes.ApplyPrefix(prefix, host.ChannelPath(portID, channelID)) + channelPath := commitmenttypes.NewMerklePath(host.ChannelPath(portID, channelID)) + path, err := commitmenttypes.ApplyPrefix(prefix, channelPath) if err != nil { return err } @@ -250,7 +252,8 @@ func (cs ClientState) VerifyPacketCommitment( return err } - path, err := commitmenttypes.ApplyPrefix(prefix, host.PacketCommitmentPath(portID, channelID, packetSequence)) + commitmentPath := commitmenttypes.NewMerklePath(host.PacketCommitmentPath(portID, channelID, packetSequence)) + path, err := commitmenttypes.ApplyPrefix(prefix, commitmentPath) if err != nil { return err } @@ -288,7 +291,8 @@ func (cs ClientState) VerifyPacketAcknowledgement( return err } - path, err := commitmenttypes.ApplyPrefix(prefix, host.PacketAcknowledgementPath(portID, channelID, packetSequence)) + ackPath := commitmenttypes.NewMerklePath(host.PacketAcknowledgementPath(portID, channelID, packetSequence)) + path, err := commitmenttypes.ApplyPrefix(prefix, ackPath) if err != nil { return err } @@ -326,7 +330,8 @@ func (cs ClientState) VerifyPacketReceiptAbsence( return err } - path, err := commitmenttypes.ApplyPrefix(prefix, host.PacketReceiptPath(portID, channelID, packetSequence)) + receiptPath := commitmenttypes.NewMerklePath(host.PacketReceiptPath(portID, channelID, packetSequence)) + path, err := commitmenttypes.ApplyPrefix(prefix, receiptPath) if err != nil { return err } @@ -363,7 +368,8 @@ func (cs ClientState) VerifyNextSequenceRecv( return err } - path, err := commitmenttypes.ApplyPrefix(prefix, host.NextSequenceRecvPath(portID, channelID)) + nextSequenceRecvPath := commitmenttypes.NewMerklePath(host.NextSequenceRecvPath(portID, channelID)) + path, err := commitmenttypes.ApplyPrefix(prefix, nextSequenceRecvPath) if err != nil { return err } diff --git a/x/ibc/light-clients/07-tendermint/types/client_state.go b/x/ibc/light-clients/07-tendermint/types/client_state.go index 4e4104d8dfe..65d43124525 100644 --- a/x/ibc/light-clients/07-tendermint/types/client_state.go +++ b/x/ibc/light-clients/07-tendermint/types/client_state.go @@ -180,7 +180,7 @@ func (cs ClientState) VerifyClientState( return err } - clientPrefixedPath := "clients/" + counterpartyClientIdentifier + "/" + host.ClientStatePath() + clientPrefixedPath := commitmenttypes.NewMerklePath("clients/" + counterpartyClientIdentifier + "/" + host.ClientStatePath()) path, err := commitmenttypes.ApplyPrefix(prefix, clientPrefixedPath) if err != nil { return err @@ -220,7 +220,7 @@ func (cs ClientState) VerifyClientConsensusState( return err } - clientPrefixedPath := "clients/" + counterpartyClientIdentifier + "/" + host.ConsensusStatePath(consensusHeight) + clientPrefixedPath := commitmenttypes.NewMerklePath("clients/" + counterpartyClientIdentifier + "/" + host.ConsensusStatePath(consensusHeight)) path, err := commitmenttypes.ApplyPrefix(prefix, clientPrefixedPath) if err != nil { return err @@ -263,7 +263,8 @@ func (cs ClientState) VerifyConnectionState( return err } - path, err := commitmenttypes.ApplyPrefix(prefix, host.ConnectionPath(connectionID)) + connectionPath := commitmenttypes.NewMerklePath(host.ConnectionPath(connectionID)) + path, err := commitmenttypes.ApplyPrefix(prefix, connectionPath) if err != nil { return err } @@ -302,7 +303,8 @@ func (cs ClientState) VerifyChannelState( return err } - path, err := commitmenttypes.ApplyPrefix(prefix, host.ChannelPath(portID, channelID)) + channelPath := commitmenttypes.NewMerklePath(host.ChannelPath(portID, channelID)) + path, err := commitmenttypes.ApplyPrefix(prefix, channelPath) if err != nil { return err } @@ -342,7 +344,8 @@ func (cs ClientState) VerifyPacketCommitment( return err } - path, err := commitmenttypes.ApplyPrefix(prefix, host.PacketCommitmentPath(portID, channelID, sequence)) + commitmentPath := commitmenttypes.NewMerklePath(host.PacketCommitmentPath(portID, channelID, sequence)) + path, err := commitmenttypes.ApplyPrefix(prefix, commitmentPath) if err != nil { return err } @@ -372,7 +375,8 @@ func (cs ClientState) VerifyPacketAcknowledgement( return err } - path, err := commitmenttypes.ApplyPrefix(prefix, host.PacketAcknowledgementPath(portID, channelID, sequence)) + ackPath := commitmenttypes.NewMerklePath(host.PacketAcknowledgementPath(portID, channelID, sequence)) + path, err := commitmenttypes.ApplyPrefix(prefix, ackPath) if err != nil { return err } @@ -402,7 +406,8 @@ func (cs ClientState) VerifyPacketReceiptAbsence( return err } - path, err := commitmenttypes.ApplyPrefix(prefix, host.PacketReceiptPath(portID, channelID, sequence)) + receiptPath := commitmenttypes.NewMerklePath(host.PacketReceiptPath(portID, channelID, sequence)) + path, err := commitmenttypes.ApplyPrefix(prefix, receiptPath) if err != nil { return err } @@ -431,7 +436,8 @@ func (cs ClientState) VerifyNextSequenceRecv( return err } - path, err := commitmenttypes.ApplyPrefix(prefix, host.NextSequenceRecvPath(portID, channelID)) + nextSequenceRecvPath := commitmenttypes.NewMerklePath(host.NextSequenceRecvPath(portID, channelID)) + path, err := commitmenttypes.ApplyPrefix(prefix, nextSequenceRecvPath) if err != nil { return err } diff --git a/x/ibc/light-clients/07-tendermint/types/tendermint_test.go b/x/ibc/light-clients/07-tendermint/types/tendermint_test.go index 171d33f561e..c30a784a5c8 100644 --- a/x/ibc/light-clients/07-tendermint/types/tendermint_test.go +++ b/x/ibc/light-clients/07-tendermint/types/tendermint_test.go @@ -60,6 +60,9 @@ func (suite *TendermintTestSuite) SetupTest() { suite.coordinator = ibctesting.NewCoordinator(suite.T(), 2) suite.chainA = suite.coordinator.GetChain(ibctesting.GetChainID(0)) suite.chainB = suite.coordinator.GetChain(ibctesting.GetChainID(1)) + // commit some blocks so that QueryProof returns valid proof (cannot return valid query if height <= 1) + suite.coordinator.CommitNBlocks(suite.chainA, 2) + suite.coordinator.CommitNBlocks(suite.chainB, 2) // TODO: deprecate usage in favor of testing package checkTx := false diff --git a/x/ibc/light-clients/07-tendermint/types/upgrade.go b/x/ibc/light-clients/07-tendermint/types/upgrade.go index 3c096f94a89..28f02950d1f 100644 --- a/x/ibc/light-clients/07-tendermint/types/upgrade.go +++ b/x/ibc/light-clients/07-tendermint/types/upgrade.go @@ -117,5 +117,5 @@ func constructUpgradeMerklePath(upgradePath string, upgradeHeight exported.Heigh // append upgradeHeight to last key in merkle path // this will create the IAVL key that is used to store client in upgrade store upgradeKeys[len(upgradeKeys)-1] = fmt.Sprintf("%s/%d", lastKey, upgradeHeight.GetVersionHeight()) - return commitmenttypes.NewMerklePath(upgradeKeys), nil + return commitmenttypes.NewMerklePath(upgradeKeys...), nil } diff --git a/x/ibc/testing/chain.go b/x/ibc/testing/chain.go index c29c111e8f0..f43c4d26761 100644 --- a/x/ibc/testing/chain.go +++ b/x/ibc/testing/chain.go @@ -197,9 +197,8 @@ func (chain *TestChain) QueryProof(key []byte) ([]byte, clienttypes.Height) { Prove: true, }) - merkleProof := commitmenttypes.MerkleProof{ - Proof: res.ProofOps, - } + merkleProof, err := commitmenttypes.ConvertProofs(res.ProofOps) + require.NoError(chain.t, err) proof, err := chain.App.AppCodec().MarshalBinaryBare(&merkleProof) require.NoError(chain.t, err) @@ -222,9 +221,8 @@ func (chain *TestChain) QueryUpgradeProof(key []byte, height uint64) ([]byte, cl Prove: true, }) - merkleProof := commitmenttypes.MerkleProof{ - Proof: res.ProofOps, - } + merkleProof, err := commitmenttypes.ConvertProofs(res.ProofOps) + require.NoError(chain.t, err) proof, err := chain.App.AppCodec().MarshalBinaryBare(&merkleProof) require.NoError(chain.t, err) diff --git a/x/ibc/testing/solomachine.go b/x/ibc/testing/solomachine.go index 6b2508f30e1..0d3b35811ec 100644 --- a/x/ibc/testing/solomachine.go +++ b/x/ibc/testing/solomachine.go @@ -251,7 +251,7 @@ func (solo *Solomachine) GenerateSignature(signBytes []byte) []byte { // GetClientStatePath returns the commitment path for the client state. func (solo *Solomachine) GetClientStatePath(counterpartyClientIdentifier string) commitmenttypes.MerklePath { - clientPrefixedPath := "clients/" + counterpartyClientIdentifier + "/" + host.ClientStatePath() + clientPrefixedPath := commitmenttypes.NewMerklePath("clients/" + counterpartyClientIdentifier + "/" + host.ClientStatePath()) path, err := commitmenttypes.ApplyPrefix(prefix, clientPrefixedPath) require.NoError(solo.t, err) @@ -260,7 +260,7 @@ func (solo *Solomachine) GetClientStatePath(counterpartyClientIdentifier string) // GetConsensusStatePath returns the commitment path for the consensus state. func (solo *Solomachine) GetConsensusStatePath(counterpartyClientIdentifier string, consensusHeight exported.Height) commitmenttypes.MerklePath { - clientPrefixedPath := "clients/" + counterpartyClientIdentifier + "/" + host.ConsensusStatePath(consensusHeight) + clientPrefixedPath := commitmenttypes.NewMerklePath("clients/" + counterpartyClientIdentifier + "/" + host.ConsensusStatePath(consensusHeight)) path, err := commitmenttypes.ApplyPrefix(prefix, clientPrefixedPath) require.NoError(solo.t, err) @@ -269,7 +269,8 @@ func (solo *Solomachine) GetConsensusStatePath(counterpartyClientIdentifier stri // GetConnectionStatePath returns the commitment path for the connection state. func (solo *Solomachine) GetConnectionStatePath(connID string) commitmenttypes.MerklePath { - path, err := commitmenttypes.ApplyPrefix(prefix, host.ConnectionPath(connID)) + connectionPath := commitmenttypes.NewMerklePath(host.ConnectionPath(connID)) + path, err := commitmenttypes.ApplyPrefix(prefix, connectionPath) require.NoError(solo.t, err) return path @@ -277,7 +278,8 @@ func (solo *Solomachine) GetConnectionStatePath(connID string) commitmenttypes.M // GetChannelStatePath returns the commitment path for that channel state. func (solo *Solomachine) GetChannelStatePath(portID, channelID string) commitmenttypes.MerklePath { - path, err := commitmenttypes.ApplyPrefix(prefix, host.ChannelPath(portID, channelID)) + channelPath := commitmenttypes.NewMerklePath(host.ChannelPath(portID, channelID)) + path, err := commitmenttypes.ApplyPrefix(prefix, channelPath) require.NoError(solo.t, err) return path @@ -285,7 +287,8 @@ func (solo *Solomachine) GetChannelStatePath(portID, channelID string) commitmen // GetPacketCommitmentPath returns the commitment path for a packet commitment. func (solo *Solomachine) GetPacketCommitmentPath(portID, channelID string) commitmenttypes.MerklePath { - path, err := commitmenttypes.ApplyPrefix(prefix, host.PacketCommitmentPath(portID, channelID, solo.Sequence)) + commitmentPath := commitmenttypes.NewMerklePath(host.PacketCommitmentPath(portID, channelID, solo.Sequence)) + path, err := commitmenttypes.ApplyPrefix(prefix, commitmentPath) require.NoError(solo.t, err) return path @@ -293,7 +296,8 @@ func (solo *Solomachine) GetPacketCommitmentPath(portID, channelID string) commi // GetPacketAcknowledgementPath returns the commitment path for a packet acknowledgement. func (solo *Solomachine) GetPacketAcknowledgementPath(portID, channelID string) commitmenttypes.MerklePath { - path, err := commitmenttypes.ApplyPrefix(prefix, host.PacketAcknowledgementPath(portID, channelID, solo.Sequence)) + ackPath := commitmenttypes.NewMerklePath(host.PacketAcknowledgementPath(portID, channelID, solo.Sequence)) + path, err := commitmenttypes.ApplyPrefix(prefix, ackPath) require.NoError(solo.t, err) return path @@ -302,7 +306,8 @@ func (solo *Solomachine) GetPacketAcknowledgementPath(portID, channelID string) // GetPacketReceiptPath returns the commitment path for a packet receipt // and an absent receipts. func (solo *Solomachine) GetPacketReceiptPath(portID, channelID string) commitmenttypes.MerklePath { - path, err := commitmenttypes.ApplyPrefix(prefix, host.PacketReceiptPath(portID, channelID, solo.Sequence)) + receiptPath := commitmenttypes.NewMerklePath(host.PacketReceiptPath(portID, channelID, solo.Sequence)) + path, err := commitmenttypes.ApplyPrefix(prefix, receiptPath) require.NoError(solo.t, err) return path @@ -310,7 +315,8 @@ func (solo *Solomachine) GetPacketReceiptPath(portID, channelID string) commitme // GetNextSequenceRecvPath returns the commitment path for the next sequence recv counter. func (solo *Solomachine) GetNextSequenceRecvPath(portID, channelID string) commitmenttypes.MerklePath { - path, err := commitmenttypes.ApplyPrefix(prefix, host.NextSequenceRecvPath(portID, channelID)) + nextSequenceRecvPath := commitmenttypes.NewMerklePath(host.NextSequenceRecvPath(portID, channelID)) + path, err := commitmenttypes.ApplyPrefix(prefix, nextSequenceRecvPath) require.NoError(solo.t, err) return path diff --git a/x/staking/types/staking.pb.go b/x/staking/types/staking.pb.go index 865953c9dd2..102fcea4225 100644 --- a/x/staking/types/staking.pb.go +++ b/x/staking/types/staking.pb.go @@ -1216,606 +1216,608 @@ func (this *Pool) Description() (desc *github_com_gogo_protobuf_protoc_gen_gogo_ func StakingDescription() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { d := &github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet{} var gzipped = []byte{ - // 9578 bytes of a gzipped FileDescriptorSet + // 9603 bytes of a gzipped FileDescriptorSet 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x6d, 0x70, 0x24, 0xd7, 0x71, 0xd8, 0xcd, 0x7e, 0x00, 0xbb, 0x8d, 0x05, 0xb0, 0x78, 0xc0, 0xdd, 0xed, 0x2d, 0x8f, 0x00, 0x38, 0xfc, 0x3a, 0x1e, 0x49, 0x80, 0x3c, 0xf2, 0x8e, 0xe4, 0x9e, 0x44, 0x1a, 0x0b, 0xec, 0xe1, 0xc0, 0xc3, 0x17, 0x07, 0xc0, 0x91, 0xfa, 0x70, 0xb6, 0x06, 0xb3, 0x0f, 0x8b, 0x21, 0x76, 0x67, - 0x86, 0x33, 0xb3, 0x77, 0x07, 0x4a, 0xaa, 0xa2, 0x25, 0x45, 0x91, 0xe8, 0x38, 0x92, 0x2c, 0x97, - 0x23, 0x51, 0x3a, 0x45, 0xb2, 0x9c, 0xc8, 0x91, 0x95, 0xf8, 0x43, 0x8a, 0x12, 0x27, 0xa9, 0x8a, - 0x9c, 0x8a, 0x63, 0x49, 0xa9, 0xb8, 0xa4, 0x8a, 0x2b, 0x71, 0x5c, 0xc9, 0xd9, 0xa1, 0x54, 0x0e, - 0xa3, 0x28, 0xb1, 0x7c, 0x96, 0x13, 0xa7, 0x54, 0xa9, 0xa4, 0xde, 0xd7, 0x7c, 0xed, 0xc7, 0x2c, - 0xa0, 0x3b, 0x49, 0x8e, 0xf3, 0x0b, 0xfb, 0x7a, 0xba, 0xfb, 0x75, 0xf7, 0xeb, 0xd7, 0xaf, 0x5f, - 0xcf, 0x7b, 0x03, 0xf8, 0xf8, 0x79, 0x98, 0xae, 0x9b, 0x66, 0xbd, 0x81, 0x67, 0x2d, 0xdb, 0x74, - 0xcd, 0xed, 0xd6, 0xce, 0x6c, 0x0d, 0x3b, 0x9a, 0xad, 0x5b, 0xae, 0x69, 0xcf, 0x50, 0x18, 0x1a, - 0x65, 0x18, 0x33, 0x02, 0x43, 0x5e, 0x81, 0xb1, 0x0b, 0x7a, 0x03, 0x2f, 0x78, 0x88, 0x1b, 0xd8, - 0x45, 0x4f, 0x42, 0x6a, 0x47, 0x6f, 0xe0, 0x82, 0x34, 0x9d, 0x3c, 0x35, 0x74, 0xe6, 0x9e, 0x99, - 0x08, 0xd1, 0x4c, 0x98, 0x62, 0x9d, 0x80, 0x15, 0x4a, 0x21, 0x7f, 0x2b, 0x05, 0xe3, 0x1d, 0x9e, + 0x86, 0x33, 0xb3, 0x77, 0x07, 0x4a, 0xaa, 0xa2, 0x25, 0x45, 0x91, 0xe8, 0x38, 0x92, 0x22, 0x97, + 0x23, 0xd1, 0x3a, 0x45, 0xb2, 0x9c, 0xc8, 0x91, 0x95, 0xf8, 0x43, 0x8a, 0x12, 0x27, 0xa9, 0x8a, + 0x94, 0xc4, 0xb1, 0xa4, 0x54, 0x5c, 0x52, 0xc5, 0x95, 0x38, 0xae, 0xe4, 0xec, 0x50, 0x2a, 0x87, + 0x51, 0x94, 0x58, 0x3e, 0xcb, 0x89, 0x53, 0xaa, 0x54, 0x52, 0xef, 0x6b, 0xbe, 0xf6, 0x63, 0x16, + 0xd0, 0x9d, 0x24, 0xc7, 0xf9, 0x85, 0x9d, 0x7e, 0xdd, 0xfd, 0xba, 0xfb, 0xf5, 0xeb, 0xd7, 0xaf, + 0xe7, 0xbd, 0x01, 0xfc, 0xf3, 0xf3, 0x30, 0x5d, 0x37, 0xcd, 0x7a, 0x03, 0xcf, 0x5a, 0xb6, 0xe9, + 0x9a, 0xdb, 0xad, 0x9d, 0xd9, 0x1a, 0x76, 0x34, 0x5b, 0xb7, 0x5c, 0xd3, 0x9e, 0xa1, 0x30, 0x34, + 0xca, 0x30, 0x66, 0x04, 0x86, 0xbc, 0x02, 0x63, 0x17, 0xf4, 0x06, 0x5e, 0xf0, 0x10, 0x37, 0xb0, + 0x8b, 0x9e, 0x84, 0xd4, 0x8e, 0xde, 0xc0, 0x05, 0x69, 0x3a, 0x79, 0x6a, 0xe8, 0xcc, 0x3d, 0x33, + 0x11, 0xa2, 0x99, 0x30, 0xc5, 0x3a, 0x01, 0x2b, 0x94, 0x42, 0xfe, 0x56, 0x0a, 0xc6, 0x3b, 0xb4, 0x22, 0x04, 0x29, 0x43, 0x6d, 0x12, 0x8e, 0xd2, 0xa9, 0xac, 0x42, 0x7f, 0xa3, 0x02, 0x0c, 0x5a, - 0xaa, 0xb6, 0xa7, 0xd6, 0x71, 0x21, 0x41, 0xc1, 0xa2, 0x89, 0x26, 0x01, 0x6a, 0xd8, 0xc2, 0x46, - 0x0d, 0x1b, 0xda, 0x7e, 0x21, 0x39, 0x9d, 0x3c, 0x95, 0x55, 0x02, 0x10, 0xf4, 0x20, 0x8c, 0x59, - 0xad, 0xed, 0x86, 0xae, 0x55, 0x03, 0x68, 0x30, 0x9d, 0x3c, 0x95, 0x56, 0xf2, 0xec, 0xc1, 0x82, + 0xaa, 0xb6, 0xa7, 0xd6, 0x71, 0x21, 0x41, 0xc1, 0xe2, 0x11, 0x4d, 0x02, 0xd4, 0xb0, 0x85, 0x8d, + 0x1a, 0x36, 0xb4, 0xfd, 0x42, 0x72, 0x3a, 0x79, 0x2a, 0xab, 0x04, 0x20, 0xe8, 0x41, 0x18, 0xb3, + 0x5a, 0xdb, 0x0d, 0x5d, 0xab, 0x06, 0xd0, 0x60, 0x3a, 0x79, 0x2a, 0xad, 0xe4, 0x59, 0xc3, 0x82, 0x8f, 0x7c, 0x3f, 0x8c, 0x5e, 0xc5, 0xea, 0x5e, 0x10, 0x75, 0x88, 0xa2, 0x8e, 0x10, 0x70, 0x00, 0x71, 0x1e, 0x72, 0x4d, 0xec, 0x38, 0x6a, 0x1d, 0x57, 0xdd, 0x7d, 0x0b, 0x17, 0x52, 0x54, 0xfb, 0xe9, 0x36, 0xed, 0xa3, 0x9a, 0x0f, 0x71, 0xaa, 0xcd, 0x7d, 0x0b, 0xa3, 0x39, 0xc8, 0x62, 0xa3, 0xd5, 0x64, 0x1c, 0xd2, 0x5d, 0xec, 0x57, 0x31, 0x5a, 0xcd, 0x28, 0x97, 0x0c, 0x21, 0xe3, 0x2c, - 0x06, 0x1d, 0x6c, 0x5f, 0xd1, 0x35, 0x5c, 0x18, 0xa0, 0x0c, 0xee, 0x6f, 0x63, 0xb0, 0xc1, 0x9e, - 0x47, 0x79, 0x08, 0x3a, 0x34, 0x0f, 0x59, 0x7c, 0xcd, 0xc5, 0x86, 0xa3, 0x9b, 0x46, 0x61, 0x90, - 0x32, 0xb9, 0xb7, 0xc3, 0x28, 0xe2, 0x46, 0x2d, 0xca, 0xc2, 0xa7, 0x43, 0xe7, 0x60, 0xd0, 0xb4, - 0x5c, 0xdd, 0x34, 0x9c, 0x42, 0x66, 0x5a, 0x3a, 0x35, 0x74, 0xe6, 0x64, 0x47, 0x47, 0x58, 0x63, - 0x38, 0x8a, 0x40, 0x46, 0x4b, 0x90, 0x77, 0xcc, 0x96, 0xad, 0xe1, 0xaa, 0x66, 0xd6, 0x70, 0x55, - 0x37, 0x76, 0xcc, 0x42, 0x96, 0x32, 0x98, 0x6a, 0x57, 0x84, 0x22, 0xce, 0x9b, 0x35, 0xbc, 0x64, - 0xec, 0x98, 0xca, 0x88, 0x13, 0x6a, 0xa3, 0x63, 0x30, 0xe0, 0xec, 0x1b, 0xae, 0x7a, 0xad, 0x90, - 0xa3, 0x1e, 0xc2, 0x5b, 0xf2, 0x6f, 0x0c, 0xc0, 0x68, 0x3f, 0x2e, 0x76, 0x1e, 0xd2, 0x3b, 0x44, - 0xcb, 0x42, 0xe2, 0x20, 0x36, 0x60, 0x34, 0x61, 0x23, 0x0e, 0x1c, 0xd2, 0x88, 0x73, 0x30, 0x64, - 0x60, 0xc7, 0xc5, 0x35, 0xe6, 0x11, 0xc9, 0x3e, 0x7d, 0x0a, 0x18, 0x51, 0xbb, 0x4b, 0xa5, 0x0e, - 0xe5, 0x52, 0x2f, 0xc0, 0xa8, 0x27, 0x52, 0xd5, 0x56, 0x8d, 0xba, 0xf0, 0xcd, 0xd9, 0x38, 0x49, - 0x66, 0x2a, 0x82, 0x4e, 0x21, 0x64, 0xca, 0x08, 0x0e, 0xb5, 0xd1, 0x02, 0x80, 0x69, 0x60, 0x73, - 0xa7, 0x5a, 0xc3, 0x5a, 0xa3, 0x90, 0xe9, 0x62, 0xa5, 0x35, 0x82, 0xd2, 0x66, 0x25, 0x93, 0x41, - 0xb5, 0x06, 0x7a, 0xca, 0x77, 0xb5, 0xc1, 0x2e, 0x9e, 0xb2, 0xc2, 0x26, 0x59, 0x9b, 0xb7, 0x6d, - 0xc1, 0x88, 0x8d, 0x89, 0xdf, 0xe3, 0x1a, 0xd7, 0x2c, 0x4b, 0x85, 0x98, 0x89, 0xd5, 0x4c, 0xe1, - 0x64, 0x4c, 0xb1, 0x61, 0x3b, 0xd8, 0x44, 0x77, 0x83, 0x07, 0xa8, 0x52, 0xb7, 0x02, 0x1a, 0x85, - 0x72, 0x02, 0xb8, 0xaa, 0x36, 0x71, 0xf1, 0x65, 0x18, 0x09, 0x9b, 0x07, 0x4d, 0x40, 0xda, 0x71, - 0x55, 0xdb, 0xa5, 0x5e, 0x98, 0x56, 0x58, 0x03, 0xe5, 0x21, 0x89, 0x8d, 0x1a, 0x8d, 0x72, 0x69, - 0x85, 0xfc, 0x44, 0x3f, 0xe1, 0x2b, 0x9c, 0xa4, 0x0a, 0xdf, 0xd7, 0x3e, 0xa2, 0x21, 0xce, 0x51, - 0xbd, 0x8b, 0x4f, 0xc0, 0x70, 0x48, 0x81, 0x7e, 0xbb, 0x96, 0xdf, 0x09, 0x47, 0x3b, 0xb2, 0x46, - 0x2f, 0xc0, 0x44, 0xcb, 0xd0, 0x0d, 0x17, 0xdb, 0x96, 0x8d, 0x89, 0xc7, 0xb2, 0xae, 0x0a, 0xff, - 0x79, 0xb0, 0x8b, 0xcf, 0x6d, 0x05, 0xb1, 0x19, 0x17, 0x65, 0xbc, 0xd5, 0x0e, 0x3c, 0x9d, 0xcd, - 0xbc, 0x31, 0x98, 0x7f, 0xe5, 0x95, 0x57, 0x5e, 0x49, 0xc8, 0x1f, 0x1d, 0x80, 0x89, 0x4e, 0x73, - 0xa6, 0xe3, 0xf4, 0x3d, 0x06, 0x03, 0x46, 0xab, 0xb9, 0x8d, 0x6d, 0x6a, 0xa4, 0xb4, 0xc2, 0x5b, - 0x68, 0x0e, 0xd2, 0x0d, 0x75, 0x1b, 0x37, 0x0a, 0xa9, 0x69, 0xe9, 0xd4, 0xc8, 0x99, 0x07, 0xfb, - 0x9a, 0x95, 0x33, 0xcb, 0x84, 0x44, 0x61, 0x94, 0xe8, 0x69, 0x48, 0xf1, 0x10, 0x4d, 0x38, 0x9c, - 0xee, 0x8f, 0x03, 0x99, 0x4b, 0x0a, 0xa5, 0x43, 0x77, 0x40, 0x96, 0xfc, 0x65, 0xbe, 0x31, 0x40, - 0x65, 0xce, 0x10, 0x00, 0xf1, 0x0b, 0x54, 0x84, 0x0c, 0x9d, 0x26, 0x35, 0x2c, 0x96, 0x36, 0xaf, - 0x4d, 0x1c, 0xab, 0x86, 0x77, 0xd4, 0x56, 0xc3, 0xad, 0x5e, 0x51, 0x1b, 0x2d, 0x4c, 0x1d, 0x3e, - 0xab, 0xe4, 0x38, 0xf0, 0x32, 0x81, 0xa1, 0x29, 0x18, 0x62, 0xb3, 0x4a, 0x37, 0x6a, 0xf8, 0x1a, - 0x8d, 0x9e, 0x69, 0x85, 0x4d, 0xb4, 0x25, 0x02, 0x21, 0xdd, 0xbf, 0xe8, 0x98, 0x86, 0x70, 0x4d, - 0xda, 0x05, 0x01, 0xd0, 0xee, 0x9f, 0x88, 0x06, 0xee, 0x3b, 0x3b, 0xab, 0x17, 0xf5, 0x29, 0xf9, - 0x4b, 0x09, 0x48, 0xd1, 0x78, 0x31, 0x0a, 0x43, 0x9b, 0x6f, 0x59, 0xaf, 0x54, 0x17, 0xd6, 0xb6, - 0xca, 0xcb, 0x95, 0xbc, 0x84, 0x46, 0x00, 0x28, 0xe0, 0xc2, 0xf2, 0xda, 0xdc, 0x66, 0x3e, 0xe1, - 0xb5, 0x97, 0x56, 0x37, 0xcf, 0x3d, 0x9e, 0x4f, 0x7a, 0x04, 0x5b, 0x0c, 0x90, 0x0a, 0x22, 0x3c, - 0x76, 0x26, 0x9f, 0x46, 0x79, 0xc8, 0x31, 0x06, 0x4b, 0x2f, 0x54, 0x16, 0xce, 0x3d, 0x9e, 0x1f, - 0x08, 0x43, 0x1e, 0x3b, 0x93, 0x1f, 0x44, 0xc3, 0x90, 0xa5, 0x90, 0xf2, 0xda, 0xda, 0x72, 0x3e, - 0xe3, 0xf1, 0xdc, 0xd8, 0x54, 0x96, 0x56, 0x17, 0xf3, 0x59, 0x8f, 0xe7, 0xa2, 0xb2, 0xb6, 0xb5, - 0x9e, 0x07, 0x8f, 0xc3, 0x4a, 0x65, 0x63, 0x63, 0x6e, 0xb1, 0x92, 0x1f, 0xf2, 0x30, 0xca, 0x6f, - 0xd9, 0xac, 0x6c, 0xe4, 0x73, 0x21, 0xb1, 0x1e, 0x3b, 0x93, 0x1f, 0xf6, 0xba, 0xa8, 0xac, 0x6e, - 0xad, 0xe4, 0x47, 0xd0, 0x18, 0x0c, 0xb3, 0x2e, 0x84, 0x10, 0xa3, 0x11, 0xd0, 0xb9, 0xc7, 0xf3, - 0x79, 0x5f, 0x10, 0xc6, 0x65, 0x2c, 0x04, 0x38, 0xf7, 0x78, 0x1e, 0xc9, 0xf3, 0x90, 0xa6, 0xde, - 0x85, 0x10, 0x8c, 0x2c, 0xcf, 0x95, 0x2b, 0xcb, 0xd5, 0xb5, 0xf5, 0xcd, 0xa5, 0xb5, 0xd5, 0xb9, - 0xe5, 0xbc, 0xe4, 0xc3, 0x94, 0xca, 0x73, 0x5b, 0x4b, 0x4a, 0x65, 0x21, 0x9f, 0x08, 0xc2, 0xd6, - 0x2b, 0x73, 0x9b, 0x95, 0x85, 0x7c, 0x52, 0xd6, 0x60, 0xa2, 0x53, 0x9c, 0xec, 0x38, 0x33, 0x02, - 0x43, 0x9c, 0xe8, 0x32, 0xc4, 0x94, 0x57, 0xdb, 0x10, 0x7f, 0x33, 0x01, 0xe3, 0x1d, 0xd6, 0x8a, - 0x8e, 0x9d, 0x3c, 0x03, 0x69, 0xe6, 0xa2, 0x6c, 0xf5, 0x7c, 0xa0, 0xe3, 0xa2, 0x43, 0x1d, 0xb6, - 0x6d, 0x05, 0xa5, 0x74, 0xc1, 0x0c, 0x22, 0xd9, 0x25, 0x83, 0x20, 0x2c, 0xda, 0x62, 0xfa, 0x4f, - 0xb6, 0xc5, 0x74, 0xb6, 0xec, 0x9d, 0xeb, 0x67, 0xd9, 0xa3, 0xb0, 0x83, 0xc5, 0xf6, 0x74, 0x87, - 0xd8, 0x7e, 0x1e, 0xc6, 0xda, 0x18, 0xf5, 0x1d, 0x63, 0xdf, 0x23, 0x41, 0xa1, 0x9b, 0x71, 0x62, - 0x22, 0x5d, 0x22, 0x14, 0xe9, 0xce, 0x47, 0x2d, 0x78, 0x57, 0xf7, 0x41, 0x68, 0x1b, 0xeb, 0xcf, - 0x4a, 0x70, 0xac, 0x73, 0xa6, 0xd8, 0x51, 0x86, 0xa7, 0x61, 0xa0, 0x89, 0xdd, 0x5d, 0x53, 0x64, - 0x4b, 0xf7, 0x75, 0x58, 0x83, 0xc9, 0xe3, 0xe8, 0x60, 0x73, 0xaa, 0xe0, 0x22, 0x9e, 0xec, 0x96, - 0xee, 0x31, 0x69, 0xda, 0x24, 0xfd, 0x40, 0x02, 0x8e, 0x76, 0x64, 0xde, 0x51, 0xd0, 0x3b, 0x01, - 0x74, 0xc3, 0x6a, 0xb9, 0x2c, 0x23, 0x62, 0x01, 0x36, 0x4b, 0x21, 0x34, 0x78, 0x91, 0xe0, 0xd9, - 0x72, 0xbd, 0xe7, 0x49, 0xfa, 0x1c, 0x18, 0x88, 0x22, 0x3c, 0xe9, 0x0b, 0x9a, 0xa2, 0x82, 0x4e, - 0x76, 0xd1, 0xb4, 0xcd, 0x31, 0x1f, 0x81, 0xbc, 0xd6, 0xd0, 0xb1, 0xe1, 0x56, 0x1d, 0xd7, 0xc6, - 0x6a, 0x53, 0x37, 0xea, 0x74, 0x05, 0xc9, 0x94, 0xd2, 0x3b, 0x6a, 0xc3, 0xc1, 0xca, 0x28, 0x7b, - 0xbc, 0x21, 0x9e, 0x12, 0x0a, 0xea, 0x40, 0x76, 0x80, 0x62, 0x20, 0x44, 0xc1, 0x1e, 0x7b, 0x14, - 0xf2, 0xcf, 0x66, 0x61, 0x28, 0x90, 0x57, 0xa3, 0xbb, 0x20, 0xf7, 0xa2, 0x7a, 0x45, 0xad, 0x8a, - 0xbd, 0x12, 0xb3, 0xc4, 0x10, 0x81, 0xad, 0xf3, 0xfd, 0xd2, 0x23, 0x30, 0x41, 0x51, 0xcc, 0x96, - 0x8b, 0xed, 0xaa, 0xd6, 0x50, 0x1d, 0x87, 0x1a, 0x2d, 0x43, 0x51, 0x11, 0x79, 0xb6, 0x46, 0x1e, - 0xcd, 0x8b, 0x27, 0xe8, 0x2c, 0x8c, 0x53, 0x8a, 0x66, 0xab, 0xe1, 0xea, 0x56, 0x03, 0x57, 0xc9, - 0xee, 0xcd, 0xa1, 0x2b, 0x89, 0x27, 0xd9, 0x18, 0xc1, 0x58, 0xe1, 0x08, 0x44, 0x22, 0x07, 0x2d, - 0xc0, 0x9d, 0x94, 0xac, 0x8e, 0x0d, 0x6c, 0xab, 0x2e, 0xae, 0xe2, 0x97, 0x5a, 0x6a, 0xc3, 0xa9, - 0xaa, 0x46, 0xad, 0xba, 0xab, 0x3a, 0xbb, 0x85, 0x09, 0xc2, 0xa0, 0x9c, 0x28, 0x48, 0xca, 0x09, - 0x82, 0xb8, 0xc8, 0xf1, 0x2a, 0x14, 0x6d, 0xce, 0xa8, 0x5d, 0x54, 0x9d, 0x5d, 0x54, 0x82, 0x63, - 0x94, 0x8b, 0xe3, 0xda, 0xba, 0x51, 0xaf, 0x6a, 0xbb, 0x58, 0xdb, 0xab, 0xb6, 0xdc, 0x9d, 0x27, - 0x0b, 0x77, 0x04, 0xfb, 0xa7, 0x12, 0x6e, 0x50, 0x9c, 0x79, 0x82, 0xb2, 0xe5, 0xee, 0x3c, 0x89, - 0x36, 0x20, 0x47, 0x06, 0xa3, 0xa9, 0xbf, 0x8c, 0xab, 0x3b, 0xa6, 0x4d, 0x97, 0xc6, 0x91, 0x0e, - 0xa1, 0x29, 0x60, 0xc1, 0x99, 0x35, 0x4e, 0xb0, 0x62, 0xd6, 0x70, 0x29, 0xbd, 0xb1, 0x5e, 0xa9, - 0x2c, 0x28, 0x43, 0x82, 0xcb, 0x05, 0xd3, 0x26, 0x0e, 0x55, 0x37, 0x3d, 0x03, 0x0f, 0x31, 0x87, - 0xaa, 0x9b, 0xc2, 0xbc, 0x67, 0x61, 0x5c, 0xd3, 0x98, 0xce, 0xba, 0x56, 0xe5, 0x7b, 0x2c, 0xa7, - 0x90, 0x0f, 0x19, 0x4b, 0xd3, 0x16, 0x19, 0x02, 0xf7, 0x71, 0x07, 0x3d, 0x05, 0x47, 0x7d, 0x63, - 0x05, 0x09, 0xc7, 0xda, 0xb4, 0x8c, 0x92, 0x9e, 0x85, 0x71, 0x6b, 0xbf, 0x9d, 0x10, 0x85, 0x7a, - 0xb4, 0xf6, 0xa3, 0x64, 0x4f, 0xc0, 0x84, 0xb5, 0x6b, 0xb5, 0xd3, 0x9d, 0x0e, 0xd2, 0x21, 0x6b, - 0xd7, 0x8a, 0x12, 0xde, 0x4b, 0x37, 0xdc, 0x36, 0xd6, 0x54, 0x17, 0xd7, 0x0a, 0xc7, 0x83, 0xe8, - 0x81, 0x07, 0x68, 0x16, 0xf2, 0x9a, 0x56, 0xc5, 0x86, 0xba, 0xdd, 0xc0, 0x55, 0xd5, 0xc6, 0x86, - 0xea, 0x14, 0xa6, 0x82, 0xc8, 0x23, 0x9a, 0x56, 0xa1, 0x4f, 0xe7, 0xe8, 0x43, 0x74, 0x1a, 0xc6, - 0xcc, 0xed, 0x17, 0x35, 0xe6, 0x92, 0x55, 0xcb, 0xc6, 0x3b, 0xfa, 0xb5, 0xc2, 0x3d, 0xd4, 0xbe, - 0xa3, 0xe4, 0x01, 0x75, 0xc8, 0x75, 0x0a, 0x46, 0x0f, 0x40, 0x5e, 0x73, 0x76, 0x55, 0xdb, 0xa2, - 0x31, 0xd9, 0xb1, 0x54, 0x0d, 0x17, 0xee, 0x65, 0xa8, 0x0c, 0xbe, 0x2a, 0xc0, 0x64, 0x4a, 0x38, - 0x57, 0xf5, 0x1d, 0x57, 0x70, 0xbc, 0x9f, 0x4d, 0x09, 0x0a, 0xe3, 0xdc, 0x4e, 0x41, 0x9e, 0x98, - 0x22, 0xd4, 0xf1, 0x29, 0x8a, 0x36, 0x62, 0xed, 0x5a, 0xc1, 0x7e, 0xef, 0x86, 0x61, 0x82, 0xe9, - 0x77, 0xfa, 0x00, 0x4b, 0xc8, 0xac, 0xdd, 0x40, 0x8f, 0x8f, 0xc3, 0x31, 0x82, 0xd4, 0xc4, 0xae, - 0x5a, 0x53, 0x5d, 0x35, 0x80, 0xfd, 0x10, 0xc5, 0x26, 0x76, 0x5f, 0xe1, 0x0f, 0x43, 0x72, 0xda, - 0xad, 0xed, 0x7d, 0xcf, 0xb3, 0x1e, 0x66, 0x72, 0x12, 0x98, 0xf0, 0xad, 0xdb, 0x96, 0x74, 0xcb, - 0x25, 0xc8, 0x05, 0x1d, 0x1f, 0x65, 0x81, 0xb9, 0x7e, 0x5e, 0x22, 0x59, 0xd0, 0xfc, 0xda, 0x02, - 0xc9, 0x5f, 0xde, 0x5a, 0xc9, 0x27, 0x48, 0x1e, 0xb5, 0xbc, 0xb4, 0x59, 0xa9, 0x2a, 0x5b, 0xab, - 0x9b, 0x4b, 0x2b, 0x95, 0x7c, 0x32, 0x90, 0xb0, 0x3f, 0x9b, 0xca, 0xdc, 0x97, 0xbf, 0x5f, 0xfe, - 0x46, 0x02, 0x46, 0xc2, 0x3b, 0x30, 0xf4, 0x26, 0x38, 0x2e, 0xca, 0x25, 0x0e, 0x76, 0xab, 0x57, - 0x75, 0x9b, 0xce, 0xc8, 0xa6, 0xca, 0x56, 0x47, 0xcf, 0x27, 0x26, 0x38, 0xd6, 0x06, 0x76, 0x9f, - 0xd7, 0x6d, 0x32, 0xdf, 0x9a, 0xaa, 0x8b, 0x96, 0x61, 0xca, 0x30, 0xab, 0x8e, 0xab, 0x1a, 0x35, - 0xd5, 0xae, 0x55, 0xfd, 0x42, 0x55, 0x55, 0xd5, 0x34, 0xec, 0x38, 0x26, 0x5b, 0x09, 0x3d, 0x2e, - 0x27, 0x0d, 0x73, 0x83, 0x23, 0xfb, 0x4b, 0xc4, 0x1c, 0x47, 0x8d, 0xf8, 0x6f, 0xb2, 0x9b, 0xff, - 0xde, 0x01, 0xd9, 0xa6, 0x6a, 0x55, 0xb1, 0xe1, 0xda, 0xfb, 0x34, 0xef, 0xce, 0x28, 0x99, 0xa6, - 0x6a, 0x55, 0x48, 0xfb, 0x87, 0xb2, 0xfd, 0x79, 0x36, 0x95, 0xc9, 0xe4, 0xb3, 0xcf, 0xa6, 0x32, - 0xd9, 0x3c, 0xc8, 0xaf, 0x27, 0x21, 0x17, 0xcc, 0xc3, 0xc9, 0xb6, 0x46, 0xa3, 0x4b, 0x96, 0x44, - 0x83, 0xda, 0xdd, 0x3d, 0xb3, 0xf6, 0x99, 0x79, 0xb2, 0x96, 0x95, 0x06, 0x58, 0x76, 0xac, 0x30, - 0x4a, 0x92, 0x47, 0x10, 0x67, 0xc3, 0x2c, 0x1b, 0xc9, 0x28, 0xbc, 0x85, 0x16, 0x61, 0xe0, 0x45, - 0x87, 0xf2, 0x1e, 0xa0, 0xbc, 0xef, 0xe9, 0xcd, 0xfb, 0xd9, 0x0d, 0xca, 0x3c, 0xfb, 0xec, 0x46, - 0x75, 0x75, 0x4d, 0x59, 0x99, 0x5b, 0x56, 0x38, 0x39, 0x3a, 0x01, 0xa9, 0x86, 0xfa, 0xf2, 0x7e, - 0x78, 0xd5, 0xa3, 0xa0, 0x7e, 0x07, 0xe1, 0x04, 0xa4, 0xae, 0x62, 0x75, 0x2f, 0xbc, 0xd6, 0x50, - 0xd0, 0x6d, 0x9c, 0x0c, 0xb3, 0x90, 0xa6, 0xf6, 0x42, 0x00, 0xdc, 0x62, 0xf9, 0x23, 0x28, 0x03, - 0xa9, 0xf9, 0x35, 0x85, 0x4c, 0x88, 0x3c, 0xe4, 0x18, 0xb4, 0xba, 0xbe, 0x54, 0x99, 0xaf, 0xe4, - 0x13, 0xf2, 0x59, 0x18, 0x60, 0x46, 0x20, 0x93, 0xc5, 0x33, 0x43, 0xfe, 0x08, 0x6f, 0x72, 0x1e, - 0x92, 0x78, 0xba, 0xb5, 0x52, 0xae, 0x28, 0xf9, 0x44, 0x78, 0xa8, 0x53, 0xf9, 0xb4, 0xec, 0x40, - 0x2e, 0x98, 0x88, 0xff, 0x70, 0x36, 0xd9, 0x5f, 0x96, 0x60, 0x28, 0x90, 0x58, 0x93, 0x8c, 0x48, - 0x6d, 0x34, 0xcc, 0xab, 0x55, 0xb5, 0xa1, 0xab, 0x0e, 0x77, 0x0d, 0xa0, 0xa0, 0x39, 0x02, 0xe9, - 0x77, 0xe8, 0x7e, 0x48, 0x53, 0x24, 0x9d, 0x1f, 0x90, 0x3f, 0x29, 0x41, 0x3e, 0x9a, 0xd9, 0x46, - 0xc4, 0x94, 0x7e, 0x94, 0x62, 0xca, 0x9f, 0x90, 0x60, 0x24, 0x9c, 0xce, 0x46, 0xc4, 0xbb, 0xeb, - 0x47, 0x2a, 0xde, 0x1f, 0x26, 0x60, 0x38, 0x94, 0xc4, 0xf6, 0x2b, 0xdd, 0x4b, 0x30, 0xa6, 0xd7, - 0x70, 0xd3, 0x32, 0x5d, 0x6c, 0x68, 0xfb, 0xd5, 0x06, 0xbe, 0x82, 0x1b, 0x05, 0x99, 0x06, 0x8d, - 0xd9, 0xde, 0x69, 0xf2, 0xcc, 0x92, 0x4f, 0xb7, 0x4c, 0xc8, 0x4a, 0xe3, 0x4b, 0x0b, 0x95, 0x95, - 0xf5, 0xb5, 0xcd, 0xca, 0xea, 0xfc, 0x5b, 0xaa, 0x5b, 0xab, 0x97, 0x56, 0xd7, 0x9e, 0x5f, 0x55, - 0xf2, 0x7a, 0x04, 0xed, 0x36, 0x4e, 0xfb, 0x75, 0xc8, 0x47, 0x85, 0x42, 0xc7, 0xa1, 0x93, 0x58, - 0xf9, 0x23, 0x68, 0x1c, 0x46, 0x57, 0xd7, 0xaa, 0x1b, 0x4b, 0x0b, 0x95, 0x6a, 0xe5, 0xc2, 0x85, - 0xca, 0xfc, 0xe6, 0x06, 0x2b, 0x7c, 0x78, 0xd8, 0x9b, 0xa1, 0x09, 0x2e, 0xbf, 0x96, 0x84, 0xf1, - 0x0e, 0x92, 0xa0, 0x39, 0xbe, 0x65, 0x61, 0xbb, 0xa8, 0x87, 0xfb, 0x91, 0x7e, 0x86, 0xe4, 0x0c, - 0xeb, 0xaa, 0xed, 0xf2, 0x1d, 0xce, 0x03, 0x40, 0xac, 0x64, 0xb8, 0xfa, 0x8e, 0x8e, 0x6d, 0x5e, - 0x27, 0x62, 0xfb, 0x98, 0x51, 0x1f, 0xce, 0x4a, 0x45, 0x0f, 0x01, 0xb2, 0x4c, 0x47, 0x77, 0xf5, - 0x2b, 0xb8, 0xaa, 0x1b, 0xa2, 0xa8, 0x44, 0xf6, 0x35, 0x29, 0x25, 0x2f, 0x9e, 0x2c, 0x19, 0xae, - 0x87, 0x6d, 0xe0, 0xba, 0x1a, 0xc1, 0x26, 0xc1, 0x3c, 0xa9, 0xe4, 0xc5, 0x13, 0x0f, 0xfb, 0x2e, - 0xc8, 0xd5, 0xcc, 0x16, 0x49, 0xf6, 0x18, 0x1e, 0x59, 0x3b, 0x24, 0x65, 0x88, 0xc1, 0x3c, 0x14, - 0x9e, 0xc6, 0xfb, 0xd5, 0xac, 0x9c, 0x32, 0xc4, 0x60, 0x0c, 0xe5, 0x7e, 0x18, 0x55, 0xeb, 0x75, - 0x9b, 0x30, 0x17, 0x8c, 0xd8, 0xc6, 0x64, 0xc4, 0x03, 0x53, 0xc4, 0xe2, 0xb3, 0x90, 0x11, 0x76, - 0x20, 0x4b, 0x35, 0xb1, 0x44, 0xd5, 0x62, 0xbb, 0xed, 0xc4, 0xa9, 0xac, 0x92, 0x31, 0xc4, 0xc3, - 0xbb, 0x20, 0xa7, 0x3b, 0x55, 0xbf, 0x38, 0x9f, 0x98, 0x4e, 0x9c, 0xca, 0x28, 0x43, 0xba, 0xe3, - 0x15, 0x36, 0xe5, 0xcf, 0x26, 0x60, 0x24, 0xfc, 0x72, 0x01, 0x2d, 0x40, 0xa6, 0x61, 0x6a, 0x2a, - 0x75, 0x2d, 0xf6, 0x66, 0xeb, 0x54, 0xcc, 0xfb, 0x88, 0x99, 0x65, 0x8e, 0xaf, 0x78, 0x94, 0xc5, - 0xdf, 0x91, 0x20, 0x23, 0xc0, 0xe8, 0x18, 0xa4, 0x2c, 0xd5, 0xdd, 0xa5, 0xec, 0xd2, 0xe5, 0x44, - 0x5e, 0x52, 0x68, 0x9b, 0xc0, 0x1d, 0x4b, 0x35, 0xa8, 0x0b, 0x70, 0x38, 0x69, 0x93, 0x71, 0x6d, - 0x60, 0xb5, 0x46, 0x77, 0x3d, 0x66, 0xb3, 0x89, 0x0d, 0xd7, 0x11, 0xe3, 0xca, 0xe1, 0xf3, 0x1c, - 0x8c, 0x1e, 0x84, 0x31, 0xd7, 0x56, 0xf5, 0x46, 0x08, 0x37, 0x45, 0x71, 0xf3, 0xe2, 0x81, 0x87, - 0x5c, 0x82, 0x13, 0x82, 0x6f, 0x0d, 0xbb, 0xaa, 0xb6, 0x8b, 0x6b, 0x3e, 0xd1, 0x00, 0xad, 0x6e, - 0x1c, 0xe7, 0x08, 0x0b, 0xfc, 0xb9, 0xa0, 0x95, 0xbf, 0x21, 0xc1, 0x98, 0xd8, 0xa7, 0xd5, 0x3c, - 0x63, 0xad, 0x00, 0xa8, 0x86, 0x61, 0xba, 0x41, 0x73, 0xb5, 0xbb, 0x72, 0x1b, 0xdd, 0xcc, 0x9c, - 0x47, 0xa4, 0x04, 0x18, 0x14, 0x9b, 0x00, 0xfe, 0x93, 0xae, 0x66, 0x9b, 0x82, 0x21, 0xfe, 0xe6, - 0x88, 0xbe, 0x7e, 0x64, 0x3b, 0x7b, 0x60, 0x20, 0xb2, 0xa1, 0x43, 0x13, 0x90, 0xde, 0xc6, 0x75, - 0xdd, 0xe0, 0xf5, 0x60, 0xd6, 0x10, 0xf5, 0x97, 0x94, 0x57, 0x7f, 0x29, 0x7f, 0x50, 0x82, 0x71, - 0xcd, 0x6c, 0x46, 0xe5, 0x2d, 0xe7, 0x23, 0xe5, 0x05, 0xe7, 0xa2, 0xf4, 0xd6, 0xa7, 0xeb, 0xba, - 0xbb, 0xdb, 0xda, 0x9e, 0xd1, 0xcc, 0xe6, 0x6c, 0xdd, 0x6c, 0xa8, 0x46, 0xdd, 0x7f, 0x7f, 0x4a, - 0x7f, 0x68, 0x0f, 0xd7, 0xb1, 0xf1, 0x70, 0xdd, 0x0c, 0xbc, 0x4d, 0x3d, 0xef, 0xff, 0xfc, 0x73, - 0x49, 0xfa, 0x85, 0x44, 0x72, 0x71, 0xbd, 0xfc, 0xb9, 0x44, 0x71, 0x91, 0x75, 0xb7, 0x2e, 0xcc, - 0xa3, 0xe0, 0x9d, 0x06, 0xd6, 0x88, 0xca, 0xf0, 0xed, 0x07, 0x61, 0xa2, 0x6e, 0xd6, 0x4d, 0xca, - 0x71, 0x96, 0xfc, 0xe2, 0x6f, 0x64, 0xb3, 0x1e, 0xb4, 0x18, 0xfb, 0xfa, 0xb6, 0xb4, 0x0a, 0xe3, - 0x1c, 0xb9, 0x4a, 0x5f, 0x09, 0xb1, 0x8d, 0x0d, 0xea, 0x59, 0x56, 0x2b, 0xfc, 0xda, 0xb7, 0xe8, - 0x82, 0xae, 0x8c, 0x71, 0x52, 0xf2, 0x8c, 0xed, 0x7d, 0x4a, 0x0a, 0x1c, 0x0d, 0xf1, 0x63, 0xd3, - 0x16, 0xdb, 0x31, 0x1c, 0x7f, 0x8b, 0x73, 0x1c, 0x0f, 0x70, 0xdc, 0xe0, 0xa4, 0xa5, 0x79, 0x18, - 0x3e, 0x08, 0xaf, 0x7f, 0xc9, 0x79, 0xe5, 0x70, 0x90, 0xc9, 0x22, 0x8c, 0x52, 0x26, 0x5a, 0xcb, - 0x71, 0xcd, 0x26, 0x8d, 0x89, 0xbd, 0xd9, 0xfc, 0xf6, 0xb7, 0xd8, 0x3c, 0x1a, 0x21, 0x64, 0xf3, - 0x1e, 0x55, 0xa9, 0x04, 0xf4, 0x2d, 0x58, 0x0d, 0x6b, 0x8d, 0x18, 0x0e, 0x5f, 0xe1, 0x82, 0x78, - 0xf8, 0xa5, 0xcb, 0x30, 0x41, 0x7e, 0xd3, 0x90, 0x15, 0x94, 0x24, 0xbe, 0x06, 0x57, 0xf8, 0xc6, - 0x7b, 0xd8, 0x54, 0x1d, 0xf7, 0x18, 0x04, 0x64, 0x0a, 0x8c, 0x62, 0x1d, 0xbb, 0x2e, 0xb6, 0x9d, - 0xaa, 0xda, 0xe8, 0x24, 0x5e, 0xa0, 0x88, 0x51, 0xf8, 0xd8, 0x77, 0xc2, 0xa3, 0xb8, 0xc8, 0x28, - 0xe7, 0x1a, 0x8d, 0xd2, 0x16, 0x1c, 0xef, 0xe0, 0x15, 0x7d, 0xf0, 0x7c, 0x8d, 0xf3, 0x9c, 0x68, - 0xf3, 0x0c, 0xc2, 0x76, 0x1d, 0x04, 0xdc, 0x1b, 0xcb, 0x3e, 0x78, 0x7e, 0x9c, 0xf3, 0x44, 0x9c, - 0x56, 0x0c, 0x29, 0xe1, 0xf8, 0x2c, 0x8c, 0x5d, 0xc1, 0xf6, 0xb6, 0xe9, 0xf0, 0xc2, 0x51, 0x1f, - 0xec, 0x3e, 0xc1, 0xd9, 0x8d, 0x72, 0x42, 0x5a, 0x49, 0x22, 0xbc, 0x9e, 0x82, 0xcc, 0x8e, 0xaa, - 0xe1, 0x3e, 0x58, 0x5c, 0xe7, 0x2c, 0x06, 0x09, 0x3e, 0x21, 0x9d, 0x83, 0x5c, 0xdd, 0xe4, 0xab, - 0x56, 0x3c, 0xf9, 0x27, 0x39, 0xf9, 0x90, 0xa0, 0xe1, 0x2c, 0x2c, 0xd3, 0x6a, 0x35, 0xc8, 0x92, - 0x16, 0xcf, 0xe2, 0x6f, 0x09, 0x16, 0x82, 0x86, 0xb3, 0x38, 0x80, 0x59, 0x3f, 0x25, 0x58, 0x38, - 0x01, 0x7b, 0x3e, 0x03, 0x43, 0xa6, 0xd1, 0xd8, 0x37, 0x8d, 0x7e, 0x84, 0xf8, 0x34, 0xe7, 0x00, - 0x9c, 0x84, 0x30, 0x38, 0x0f, 0xd9, 0x7e, 0x07, 0xe2, 0x6f, 0x7f, 0x47, 0x4c, 0x0f, 0x31, 0x02, - 0x8b, 0x30, 0x2a, 0x02, 0x94, 0x6e, 0x1a, 0x7d, 0xb0, 0xf8, 0x3b, 0x9c, 0xc5, 0x48, 0x80, 0x8c, - 0xab, 0xe1, 0x62, 0xc7, 0xad, 0xe3, 0x7e, 0x98, 0x7c, 0x56, 0xa8, 0xc1, 0x49, 0xb8, 0x29, 0xb7, - 0xb1, 0xa1, 0xed, 0xf6, 0xc7, 0xe1, 0x97, 0x84, 0x29, 0x05, 0x0d, 0x61, 0x31, 0x0f, 0xc3, 0x4d, - 0xd5, 0x76, 0x76, 0xd5, 0x46, 0x5f, 0xc3, 0xf1, 0x77, 0x39, 0x8f, 0x9c, 0x47, 0xc4, 0x2d, 0xd2, - 0x32, 0x0e, 0xc2, 0xe6, 0x73, 0xc2, 0x22, 0x01, 0x32, 0x3e, 0xf5, 0x1c, 0x97, 0x56, 0xd9, 0x0e, - 0xc2, 0xed, 0x97, 0xc5, 0xd4, 0x63, 0xb4, 0x2b, 0x41, 0x8e, 0xe7, 0x21, 0xeb, 0xe8, 0x2f, 0xf7, - 0xc5, 0xe6, 0xf3, 0x62, 0xa4, 0x29, 0x01, 0x21, 0x7e, 0x0b, 0x9c, 0xe8, 0xb8, 0x4c, 0xf4, 0xc1, - 0xec, 0xef, 0x71, 0x66, 0xc7, 0x3a, 0x2c, 0x15, 0x3c, 0x24, 0x1c, 0x94, 0xe5, 0xdf, 0x17, 0x21, - 0x01, 0x47, 0x78, 0xad, 0x93, 0x7d, 0x84, 0xa3, 0xee, 0x1c, 0xcc, 0x6a, 0xbf, 0x22, 0xac, 0xc6, - 0x68, 0x43, 0x56, 0xdb, 0x84, 0x63, 0x9c, 0xe3, 0xc1, 0xc6, 0xf5, 0x57, 0x45, 0x60, 0x65, 0xd4, - 0x5b, 0xe1, 0xd1, 0x7d, 0x1b, 0x14, 0x3d, 0x73, 0x8a, 0x84, 0xd5, 0xa9, 0x36, 0x55, 0xab, 0x0f, - 0xce, 0xbf, 0xc6, 0x39, 0x8b, 0x88, 0xef, 0x65, 0xbc, 0xce, 0x8a, 0x6a, 0x11, 0xe6, 0x2f, 0x40, - 0x41, 0x30, 0x6f, 0x19, 0x36, 0xd6, 0xcc, 0xba, 0xa1, 0xbf, 0x8c, 0x6b, 0x7d, 0xb0, 0xfe, 0xf5, - 0xc8, 0x50, 0x6d, 0x05, 0xc8, 0x09, 0xe7, 0x25, 0xc8, 0x7b, 0xb9, 0x4a, 0x55, 0x6f, 0x5a, 0xa6, - 0xed, 0xc6, 0x70, 0xfc, 0x82, 0x18, 0x29, 0x8f, 0x6e, 0x89, 0x92, 0x95, 0x2a, 0x30, 0x42, 0x9b, - 0xfd, 0xba, 0xe4, 0x17, 0x39, 0xa3, 0x61, 0x9f, 0x8a, 0x07, 0x0e, 0xcd, 0x6c, 0x5a, 0xaa, 0xdd, - 0x4f, 0xfc, 0xfb, 0x07, 0x22, 0x70, 0x70, 0x12, 0x1e, 0x38, 0xdc, 0x7d, 0x0b, 0x93, 0xd5, 0xbe, - 0x0f, 0x0e, 0x5f, 0x12, 0x81, 0x43, 0xd0, 0x70, 0x16, 0x22, 0x61, 0xe8, 0x83, 0xc5, 0x3f, 0x14, - 0x2c, 0x04, 0x0d, 0x61, 0xf1, 0x9c, 0xbf, 0xd0, 0xda, 0xb8, 0xae, 0x3b, 0xae, 0xcd, 0xd2, 0xe4, - 0xde, 0xac, 0xfe, 0xd1, 0x77, 0xc2, 0x49, 0x98, 0x12, 0x20, 0x25, 0x91, 0x88, 0x97, 0x5d, 0xe9, - 0x2e, 0x2a, 0x5e, 0xb0, 0xdf, 0x10, 0x91, 0x28, 0x40, 0x46, 0x64, 0x0b, 0x64, 0x88, 0xc4, 0xec, - 0x1a, 0xd9, 0x3b, 0xf4, 0xc1, 0xee, 0x1f, 0x47, 0x84, 0xdb, 0x10, 0xb4, 0x84, 0x67, 0x20, 0xff, - 0x69, 0x19, 0x7b, 0x78, 0xbf, 0x2f, 0xef, 0xfc, 0x27, 0x91, 0xfc, 0x67, 0x8b, 0x51, 0xb2, 0x18, - 0x32, 0x1a, 0xc9, 0xa7, 0x50, 0xdc, 0xf9, 0xa1, 0xc2, 0x4f, 0x7d, 0x8f, 0xeb, 0x1b, 0x4e, 0xa7, - 0x4a, 0xcb, 0xc4, 0xc9, 0xc3, 0x49, 0x4f, 0x3c, 0xb3, 0xf7, 0x7c, 0xcf, 0xf3, 0xf3, 0x50, 0xce, - 0x53, 0xba, 0x00, 0xc3, 0xa1, 0x84, 0x27, 0x9e, 0xd5, 0x7b, 0x39, 0xab, 0x5c, 0x30, 0xdf, 0x29, - 0x9d, 0x85, 0x14, 0x49, 0x5e, 0xe2, 0xc9, 0xff, 0x2a, 0x27, 0xa7, 0xe8, 0xa5, 0x37, 0x43, 0x46, - 0x24, 0x2d, 0xf1, 0xa4, 0xef, 0xe3, 0xa4, 0x1e, 0x09, 0x21, 0x17, 0x09, 0x4b, 0x3c, 0xf9, 0x5f, - 0x13, 0xe4, 0x82, 0x84, 0x90, 0xf7, 0x6f, 0xc2, 0x2f, 0xff, 0x74, 0x8a, 0x2f, 0x3a, 0xc2, 0x76, - 0xe7, 0x61, 0x90, 0x67, 0x2a, 0xf1, 0xd4, 0x1f, 0xe0, 0x9d, 0x0b, 0x8a, 0xd2, 0x13, 0x90, 0xee, - 0xd3, 0xe0, 0x3f, 0xc3, 0x49, 0x19, 0x7e, 0x69, 0x1e, 0x86, 0x02, 0xd9, 0x49, 0x3c, 0xf9, 0xdf, - 0xe0, 0xe4, 0x41, 0x2a, 0x22, 0x3a, 0xcf, 0x4e, 0xe2, 0x19, 0x7c, 0x50, 0x88, 0xce, 0x29, 0x88, - 0xd9, 0x44, 0x62, 0x12, 0x4f, 0xfd, 0x21, 0x61, 0x75, 0x41, 0x52, 0x7a, 0x06, 0xb2, 0xde, 0x62, - 0x13, 0x4f, 0xff, 0x61, 0x4e, 0xef, 0xd3, 0x10, 0x0b, 0x04, 0x16, 0xbb, 0x78, 0x16, 0x3f, 0x2b, - 0x2c, 0x10, 0xa0, 0x22, 0xd3, 0x28, 0x9a, 0xc0, 0xc4, 0x73, 0xfa, 0x88, 0x98, 0x46, 0x91, 0xfc, - 0x85, 0x8c, 0x26, 0x8d, 0xf9, 0xf1, 0x2c, 0x7e, 0x4e, 0x8c, 0x26, 0xc5, 0x27, 0x62, 0x44, 0x33, - 0x82, 0x78, 0x1e, 0x7f, 0x53, 0x88, 0x11, 0x49, 0x08, 0x4a, 0xeb, 0x80, 0xda, 0xb3, 0x81, 0x78, - 0x7e, 0x1f, 0xe5, 0xfc, 0xc6, 0xda, 0x92, 0x81, 0xd2, 0xf3, 0x70, 0xac, 0x73, 0x26, 0x10, 0xcf, - 0xf5, 0x63, 0xdf, 0x8b, 0xec, 0xdd, 0x82, 0x89, 0x40, 0x69, 0xd3, 0x5f, 0x52, 0x82, 0x59, 0x40, - 0x3c, 0xdb, 0xd7, 0xbe, 0x17, 0x0e, 0xdc, 0xc1, 0x24, 0xa0, 0x34, 0x07, 0xe0, 0x2f, 0xc0, 0xf1, - 0xbc, 0x3e, 0xc1, 0x79, 0x05, 0x88, 0xc8, 0xd4, 0xe0, 0xeb, 0x6f, 0x3c, 0xfd, 0x75, 0x31, 0x35, - 0x38, 0x05, 0x99, 0x1a, 0x62, 0xe9, 0x8d, 0xa7, 0xfe, 0xa4, 0x98, 0x1a, 0x82, 0x84, 0x78, 0x76, - 0x60, 0x75, 0x8b, 0xe7, 0xf0, 0x69, 0xe1, 0xd9, 0x01, 0xaa, 0xd2, 0x2a, 0x8c, 0xb5, 0x2d, 0x88, - 0xf1, 0xac, 0x7e, 0x81, 0xb3, 0xca, 0x47, 0xd7, 0xc3, 0xe0, 0xe2, 0xc5, 0x17, 0xc3, 0x78, 0x6e, - 0x9f, 0x89, 0x2c, 0x5e, 0x7c, 0x2d, 0x2c, 0x9d, 0x87, 0x8c, 0xd1, 0x6a, 0x34, 0xc8, 0xe4, 0x41, - 0xbd, 0xcf, 0xfc, 0x15, 0xfe, 0xcb, 0xf7, 0xb9, 0x75, 0x04, 0x41, 0xe9, 0x2c, 0xa4, 0x71, 0x73, - 0x1b, 0xd7, 0xe2, 0x28, 0xbf, 0xfd, 0x7d, 0x11, 0x30, 0x09, 0x76, 0xe9, 0x19, 0x00, 0x56, 0x1a, - 0xa1, 0xaf, 0x07, 0x63, 0x68, 0xff, 0xeb, 0xf7, 0xf9, 0x69, 0x1c, 0x9f, 0xc4, 0x67, 0xc0, 0xce, - 0xf6, 0xf4, 0x66, 0xf0, 0x9d, 0x30, 0x03, 0x3a, 0x22, 0x4f, 0xc1, 0xe0, 0x8b, 0x8e, 0x69, 0xb8, - 0x6a, 0x3d, 0x8e, 0xfa, 0xbf, 0x71, 0x6a, 0x81, 0x4f, 0x0c, 0xd6, 0x34, 0x6d, 0xec, 0xaa, 0x75, - 0x27, 0x8e, 0xf6, 0xbf, 0x73, 0x5a, 0x8f, 0x80, 0x10, 0x6b, 0xaa, 0xe3, 0xf6, 0xa3, 0xf7, 0x1f, - 0x0b, 0x62, 0x41, 0x40, 0x84, 0x26, 0xbf, 0xf7, 0xf0, 0x7e, 0x1c, 0xed, 0x77, 0x85, 0xd0, 0x1c, - 0xbf, 0xf4, 0x66, 0xc8, 0x92, 0x9f, 0xec, 0x88, 0x5d, 0x0c, 0xf1, 0x9f, 0x70, 0x62, 0x9f, 0x82, - 0xf4, 0xec, 0xb8, 0x35, 0x57, 0x8f, 0x37, 0xf6, 0x4d, 0x3e, 0xd2, 0x02, 0xbf, 0x34, 0x07, 0x43, - 0x8e, 0x5b, 0xab, 0xb5, 0x78, 0x7e, 0x1a, 0x43, 0xfe, 0xa7, 0xdf, 0xf7, 0x4a, 0x16, 0x1e, 0x0d, - 0x19, 0xed, 0xab, 0x7b, 0xae, 0x65, 0xd2, 0x57, 0x20, 0x71, 0x1c, 0xbe, 0xc7, 0x39, 0x04, 0x48, - 0x4a, 0xf3, 0x90, 0x23, 0xba, 0xd8, 0xd8, 0xc2, 0xf4, 0x7d, 0x55, 0x0c, 0x8b, 0x3f, 0xe3, 0x06, - 0x08, 0x11, 0x95, 0x7f, 0xf2, 0x2b, 0xaf, 0x4f, 0x4a, 0x5f, 0x7f, 0x7d, 0x52, 0xfa, 0xc3, 0xd7, - 0x27, 0xa5, 0x0f, 0x7d, 0x73, 0xf2, 0xc8, 0xd7, 0xbf, 0x39, 0x79, 0xe4, 0xf7, 0xbe, 0x39, 0x79, - 0xa4, 0x73, 0xd9, 0x18, 0x16, 0xcd, 0x45, 0x93, 0x15, 0x8c, 0xdf, 0x2a, 0x87, 0xca, 0xc5, 0x75, - 0xd3, 0xaf, 0xd6, 0x7a, 0x9b, 0x1c, 0xf8, 0x33, 0x89, 0x6c, 0x98, 0xc3, 0xb5, 0x5c, 0xd5, 0xd8, - 0xef, 0x72, 0x07, 0xa7, 0xd8, 0xb1, 0x30, 0x2c, 0xbf, 0x09, 0x92, 0x73, 0xc6, 0x3e, 0x3a, 0xc1, - 0x62, 0x5e, 0xb5, 0x65, 0x37, 0xf8, 0xd1, 0xaf, 0x41, 0xd2, 0xde, 0xb2, 0x1b, 0x68, 0xc2, 0x3f, - 0x9f, 0x29, 0x9d, 0xca, 0xf1, 0x43, 0x97, 0xa5, 0xd4, 0x77, 0x3f, 0x3d, 0x75, 0xa4, 0xbc, 0x17, - 0xd5, 0xf0, 0xcb, 0xb1, 0x5a, 0x66, 0xe6, 0x8c, 0x7d, 0xaa, 0xe4, 0xba, 0xf4, 0xd6, 0x34, 0xe9, - 0xc3, 0x11, 0x85, 0xed, 0xc9, 0x68, 0x61, 0xfb, 0x79, 0xdc, 0x68, 0x5c, 0x32, 0xcc, 0xab, 0xc6, - 0x26, 0x41, 0xdb, 0x1e, 0xa0, 0x3c, 0x1e, 0x83, 0x0f, 0x25, 0x60, 0x2a, 0xaa, 0x37, 0x71, 0x1c, - 0xc7, 0x55, 0x9b, 0x56, 0xb7, 0x1b, 0x48, 0xe7, 0x21, 0xbb, 0x29, 0x70, 0x50, 0x01, 0x06, 0x1d, - 0xac, 0x99, 0x46, 0xcd, 0xa1, 0xca, 0x26, 0x15, 0xd1, 0x24, 0xca, 0x1a, 0xaa, 0x61, 0x3a, 0xfc, - 0x80, 0x24, 0x6b, 0x94, 0x7f, 0x5e, 0x3a, 0xd8, 0x48, 0x8e, 0x78, 0x5d, 0x09, 0x4d, 0x1f, 0xec, - 0x55, 0xfe, 0xa7, 0x56, 0xf0, 0x55, 0x08, 0xd4, 0xfa, 0xfb, 0x35, 0xc9, 0xbb, 0x93, 0x70, 0x42, - 0x33, 0x9d, 0xa6, 0xe9, 0x54, 0xd9, 0x08, 0xb3, 0x06, 0x37, 0x46, 0x2e, 0xf8, 0xa8, 0x8f, 0xfa, - 0xff, 0x45, 0x18, 0xa1, 0xb3, 0x80, 0x56, 0x3e, 0x69, 0xe0, 0x89, 0x5d, 0x2b, 0xbe, 0xfa, 0x6f, - 0xd3, 0xd4, 0x6b, 0x86, 0x3d, 0x42, 0x7a, 0xb4, 0x63, 0x13, 0x26, 0xf4, 0xa6, 0xd5, 0xc0, 0xf4, - 0x1d, 0x50, 0xd5, 0x7b, 0x16, 0xcf, 0xef, 0x6b, 0x9c, 0xdf, 0xb8, 0x4f, 0xbe, 0x24, 0xa8, 0x4b, - 0xcb, 0x30, 0xa6, 0x6a, 0x1a, 0xb6, 0x42, 0x2c, 0x63, 0x66, 0xa8, 0x10, 0x30, 0xcf, 0x29, 0x3d, - 0x6e, 0xe5, 0x67, 0xba, 0x8d, 0xed, 0x5b, 0xef, 0x0d, 0x0c, 0x9a, 0x8d, 0xeb, 0xd8, 0x78, 0xd8, - 0xc0, 0xee, 0x55, 0xd3, 0xde, 0xe3, 0xe6, 0x7d, 0x98, 0x75, 0x25, 0x06, 0xe1, 0xbd, 0x49, 0x98, - 0x64, 0x0f, 0x66, 0xb7, 0x55, 0x07, 0xcf, 0x5e, 0x79, 0x74, 0x1b, 0xbb, 0xea, 0xa3, 0xb3, 0x9a, - 0xa9, 0x1b, 0x7c, 0x24, 0xc6, 0xf9, 0xb8, 0x90, 0xe7, 0x33, 0xfc, 0x79, 0x97, 0x89, 0xb9, 0x08, - 0xa9, 0x79, 0x53, 0x37, 0x88, 0x47, 0xd6, 0xb0, 0x61, 0x36, 0xf9, 0xb4, 0x64, 0x0d, 0x74, 0x37, - 0x0c, 0xa8, 0x4d, 0xb3, 0x65, 0xb8, 0xec, 0xf5, 0x55, 0x79, 0xe8, 0x2b, 0x37, 0xa6, 0x8e, 0xfc, - 0xfe, 0x8d, 0xa9, 0xe4, 0x92, 0xe1, 0x2a, 0xfc, 0x51, 0x29, 0xf5, 0xc6, 0xa7, 0xa6, 0x24, 0xf9, - 0x59, 0x18, 0x5c, 0xc0, 0xda, 0x61, 0x78, 0x2d, 0x60, 0x2d, 0xc2, 0xeb, 0x01, 0xc8, 0x2c, 0x19, - 0x2e, 0x3b, 0x33, 0x7b, 0x27, 0x24, 0x75, 0x83, 0x9d, 0xc2, 0x8a, 0xf4, 0x4f, 0xe0, 0x04, 0x75, - 0x01, 0x6b, 0x1e, 0x6a, 0x0d, 0x6b, 0x51, 0x54, 0xc2, 0x9e, 0xc0, 0xcb, 0x0b, 0xbf, 0xf7, 0x9f, - 0x26, 0x8f, 0xbc, 0xf2, 0xfa, 0xe4, 0x91, 0xae, 0x23, 0x11, 0x0c, 0x87, 0xdc, 0xc4, 0x7c, 0x08, - 0x9c, 0xda, 0xde, 0xac, 0x1b, 0x9a, 0x0b, 0x7f, 0x3d, 0x01, 0x93, 0x6d, 0x2e, 0xce, 0x17, 0x86, - 0x6e, 0xd1, 0xa1, 0x04, 0x99, 0x05, 0xb1, 0xde, 0x1c, 0x34, 0x38, 0xfc, 0xdc, 0x01, 0x83, 0xc3, - 0xb0, 0xe8, 0x49, 0xc4, 0x86, 0xd3, 0xf1, 0xb1, 0x41, 0xc8, 0x7f, 0x88, 0xd0, 0xf0, 0xb9, 0x14, - 0xdc, 0x49, 0x2f, 0x85, 0xd8, 0x4d, 0xdd, 0x70, 0x67, 0x35, 0x7b, 0xdf, 0x72, 0xe9, 0x72, 0x62, - 0xee, 0x70, 0x6b, 0x8c, 0xf9, 0x8f, 0x67, 0xd8, 0xe3, 0x2e, 0x2e, 0xb9, 0x03, 0xe9, 0x75, 0x42, - 0x47, 0x0c, 0xe1, 0x9a, 0xae, 0xda, 0xe0, 0x06, 0x62, 0x0d, 0x02, 0x65, 0x17, 0x49, 0x12, 0x0c, - 0xaa, 0x8b, 0x3b, 0x24, 0x0d, 0xac, 0xee, 0xb0, 0x83, 0xbb, 0x49, 0xba, 0x84, 0x64, 0x08, 0x80, - 0x9e, 0xd1, 0x9d, 0x80, 0xb4, 0xda, 0x62, 0xaf, 0x9c, 0x93, 0x64, 0x6d, 0xa1, 0x0d, 0xf9, 0x12, - 0x0c, 0xf2, 0xd7, 0x5c, 0x28, 0x0f, 0xc9, 0x3d, 0xbc, 0x4f, 0xfb, 0xc9, 0x29, 0xe4, 0x27, 0x9a, - 0x81, 0x34, 0x15, 0x9e, 0xdf, 0x48, 0x28, 0xcc, 0xb4, 0x49, 0x3f, 0x43, 0x85, 0x54, 0x18, 0x9a, - 0xfc, 0x2c, 0x64, 0x16, 0xcc, 0xa6, 0x6e, 0x98, 0x61, 0x6e, 0x59, 0xc6, 0x8d, 0xca, 0x6c, 0xb5, - 0xb8, 0xeb, 0x2b, 0xac, 0x81, 0x8e, 0xc1, 0x00, 0x3b, 0xc8, 0xcd, 0x5f, 0x9b, 0xf3, 0x96, 0x3c, - 0x0f, 0x83, 0x94, 0xf7, 0x9a, 0x85, 0x10, 0xbf, 0xd9, 0xc3, 0x4f, 0x8c, 0xd3, 0x28, 0xc9, 0xd9, - 0x27, 0x7c, 0x61, 0x11, 0xa4, 0x6a, 0xaa, 0xab, 0x72, 0xbd, 0xe9, 0x6f, 0xf9, 0x69, 0xc8, 0x70, - 0x26, 0x0e, 0x3a, 0x03, 0x49, 0xd3, 0x72, 0xf8, 0x8b, 0xef, 0x62, 0x37, 0x55, 0xd6, 0xac, 0x72, - 0x8a, 0x4c, 0x1a, 0x85, 0x20, 0x97, 0x95, 0xae, 0xb3, 0xe4, 0xc9, 0x80, 0x23, 0x05, 0x86, 0x3c, - 0xf0, 0x93, 0x0d, 0x69, 0x9b, 0x3b, 0x78, 0xce, 0xf2, 0xe9, 0x04, 0x4c, 0x06, 0x9e, 0x5e, 0xc1, - 0x36, 0xd9, 0xeb, 0xb1, 0x09, 0xc6, 0xbd, 0x05, 0x05, 0x84, 0xe4, 0xcf, 0xbb, 0xb8, 0xcb, 0x9b, - 0x21, 0x39, 0x67, 0x59, 0xa8, 0x08, 0x19, 0xf6, 0x82, 0xdb, 0x64, 0xfe, 0x92, 0x52, 0xbc, 0x36, - 0x79, 0xe6, 0x98, 0x3b, 0xee, 0x55, 0xd5, 0xf6, 0xae, 0x30, 0x89, 0xb6, 0xfc, 0x14, 0x64, 0xe7, - 0x4d, 0xc3, 0xc1, 0x86, 0xd3, 0xa2, 0x53, 0x6f, 0xbb, 0x61, 0x6a, 0x7b, 0x9c, 0x03, 0x6b, 0x10, - 0x83, 0xab, 0x96, 0x45, 0x29, 0x53, 0x0a, 0xf9, 0xc9, 0xc2, 0x54, 0x79, 0xa3, 0xab, 0x89, 0x9e, - 0x3a, 0xb8, 0x89, 0xb8, 0x92, 0x9e, 0x8d, 0xfe, 0xb7, 0x04, 0x27, 0xdb, 0x27, 0xd4, 0x1e, 0xde, - 0x77, 0x0e, 0x3a, 0x9f, 0x5e, 0x80, 0xec, 0x3a, 0xbd, 0x47, 0x7c, 0x09, 0xef, 0xa3, 0x22, 0x0c, - 0xe2, 0xda, 0x99, 0xb3, 0x67, 0x1f, 0x7d, 0x8a, 0x79, 0xfb, 0xc5, 0x23, 0x8a, 0x00, 0xa0, 0x49, - 0xc8, 0x3a, 0x58, 0xb3, 0xce, 0x9c, 0x3d, 0xb7, 0xf7, 0x28, 0x73, 0xaf, 0x8b, 0x47, 0x14, 0x1f, - 0x54, 0xca, 0x10, 0xad, 0xdf, 0xf8, 0xf4, 0x94, 0x54, 0x4e, 0x43, 0xd2, 0x69, 0x35, 0x6f, 0xab, - 0x8f, 0xbc, 0x96, 0x86, 0xe9, 0x20, 0x25, 0x0d, 0x50, 0x57, 0xd4, 0x86, 0x5e, 0x53, 0xfd, 0x1b, - 0xe0, 0xf9, 0x80, 0x0d, 0x28, 0x46, 0x67, 0x13, 0x14, 0x7b, 0x5a, 0x52, 0xfe, 0x75, 0x09, 0x72, - 0x97, 0x05, 0xe7, 0x0d, 0xec, 0xa2, 0xf3, 0x00, 0x5e, 0x4f, 0x62, 0xda, 0xdc, 0x31, 0x13, 0xed, - 0x6b, 0xc6, 0xa3, 0x51, 0x02, 0xe8, 0xe8, 0x09, 0xea, 0x88, 0x96, 0xe9, 0xf0, 0xfb, 0x2f, 0x31, - 0xa4, 0x1e, 0x32, 0x7a, 0x08, 0x10, 0x8d, 0x70, 0xd5, 0x2b, 0xa6, 0xab, 0x1b, 0xf5, 0xaa, 0x65, - 0x5e, 0xe5, 0x97, 0x05, 0x93, 0x4a, 0x9e, 0x3e, 0xb9, 0x4c, 0x1f, 0xac, 0x13, 0x38, 0x11, 0x3a, - 0xeb, 0x71, 0x21, 0xab, 0x89, 0x5a, 0xab, 0xd9, 0xd8, 0x71, 0x78, 0x10, 0x13, 0x4d, 0x74, 0x1e, - 0x06, 0xad, 0xd6, 0x76, 0x55, 0x44, 0x8c, 0xa1, 0x33, 0x27, 0x3b, 0xcd, 0x7f, 0xe1, 0x1f, 0x3c, - 0x02, 0x0c, 0x58, 0xad, 0x6d, 0xe2, 0x2d, 0x77, 0x41, 0xae, 0x83, 0x30, 0x43, 0x57, 0x7c, 0x39, - 0xe8, 0xf5, 0x75, 0xae, 0x41, 0xd5, 0xb2, 0x75, 0xd3, 0xd6, 0xdd, 0x7d, 0x7a, 0x7a, 0x25, 0xa9, - 0xe4, 0xc5, 0x83, 0x75, 0x0e, 0x97, 0xf7, 0x60, 0x74, 0x83, 0xa6, 0x5a, 0xbe, 0xe4, 0x67, 0x7d, - 0xf9, 0xa4, 0x78, 0xf9, 0xba, 0x4a, 0x96, 0x68, 0x93, 0xac, 0xfc, 0x5c, 0x57, 0xef, 0x7c, 0xe2, - 0xe0, 0xde, 0x19, 0x5e, 0xfc, 0xff, 0xf8, 0x44, 0x68, 0x72, 0xf2, 0xcc, 0x3a, 0x10, 0xbe, 0xfa, - 0x75, 0xcc, 0xb8, 0x1d, 0x46, 0xb1, 0xf7, 0xa2, 0x5a, 0x8c, 0x09, 0xa3, 0xc5, 0xd8, 0x29, 0x24, - 0x3f, 0x05, 0xc3, 0xeb, 0xaa, 0xed, 0x6e, 0x60, 0xf7, 0x22, 0x56, 0x6b, 0xd8, 0x0e, 0xaf, 0xba, - 0xc3, 0x62, 0xd5, 0x45, 0x90, 0xa2, 0x4b, 0x2b, 0x5b, 0x75, 0xe8, 0x6f, 0x79, 0x17, 0x52, 0xf4, - 0x04, 0x9b, 0xb7, 0x22, 0x73, 0x0a, 0xb6, 0x22, 0x93, 0x58, 0xba, 0xef, 0x62, 0x47, 0x6c, 0xe8, - 0x68, 0x03, 0x3d, 0x2e, 0xd6, 0xd5, 0x64, 0xef, 0x75, 0x95, 0x3b, 0x22, 0x5f, 0x5d, 0x1b, 0x30, - 0x58, 0x26, 0xa1, 0x78, 0x69, 0xc1, 0x13, 0x44, 0xf2, 0x05, 0x41, 0x2b, 0x30, 0x6a, 0xa9, 0xb6, - 0x4b, 0x8f, 0xee, 0xef, 0x52, 0x2d, 0xb8, 0xaf, 0x4f, 0xb5, 0xcf, 0xbc, 0x90, 0xb2, 0xbc, 0x97, - 0x61, 0x2b, 0x08, 0x94, 0xff, 0x28, 0x05, 0x03, 0xdc, 0x18, 0x6f, 0x86, 0x41, 0x6e, 0x56, 0xee, - 0x9d, 0x77, 0xce, 0xb4, 0x2f, 0x4c, 0x33, 0xde, 0x02, 0xc2, 0xf9, 0x09, 0x1a, 0x74, 0x1f, 0x64, - 0xb4, 0x5d, 0x55, 0x37, 0xaa, 0x7a, 0x4d, 0x64, 0xbd, 0xaf, 0xdf, 0x98, 0x1a, 0x9c, 0x27, 0xb0, - 0xa5, 0x05, 0x65, 0x90, 0x3e, 0x5c, 0xaa, 0x91, 0x4c, 0x60, 0x17, 0xeb, 0xf5, 0x5d, 0x97, 0xcf, - 0x30, 0xde, 0x42, 0x4f, 0x42, 0x8a, 0x38, 0x04, 0xbf, 0xd9, 0x55, 0x6c, 0xdb, 0x7b, 0x78, 0x1b, - 0xc0, 0x72, 0x86, 0x74, 0xfc, 0xa1, 0x3f, 0x98, 0x92, 0x14, 0x4a, 0x81, 0xe6, 0x61, 0xb8, 0xa1, - 0x3a, 0x6e, 0x95, 0xae, 0x60, 0xa4, 0xfb, 0x34, 0x65, 0x71, 0xa2, 0xdd, 0x20, 0xdc, 0xb0, 0x5c, - 0xf4, 0x21, 0x42, 0xc5, 0x40, 0x35, 0x74, 0x0a, 0xf2, 0x94, 0x89, 0x66, 0x36, 0x9b, 0xba, 0xcb, - 0x72, 0xab, 0x01, 0x6a, 0xf7, 0x11, 0x02, 0x9f, 0xa7, 0x60, 0x9a, 0x61, 0xdd, 0x01, 0x59, 0x7a, - 0x95, 0x84, 0xa2, 0xb0, 0x63, 0x93, 0x19, 0x02, 0xa0, 0x0f, 0xef, 0x87, 0x51, 0x3f, 0x3e, 0x32, - 0x94, 0x0c, 0xe3, 0xe2, 0x83, 0x29, 0xe2, 0x23, 0x30, 0x61, 0xe0, 0x6b, 0xf4, 0x20, 0x67, 0x08, - 0x3b, 0x4b, 0xb1, 0x11, 0x79, 0x76, 0x39, 0x4c, 0x71, 0x2f, 0x8c, 0x68, 0xc2, 0xf8, 0x0c, 0x17, - 0x28, 0xee, 0xb0, 0x07, 0xa5, 0x68, 0x27, 0x20, 0xa3, 0x5a, 0x16, 0x43, 0x18, 0xe2, 0xf1, 0xd1, - 0xb2, 0xe8, 0xa3, 0xd3, 0x30, 0x46, 0x75, 0xb4, 0xb1, 0xd3, 0x6a, 0xb8, 0x9c, 0x49, 0x8e, 0xe2, - 0x8c, 0x92, 0x07, 0x0a, 0x83, 0x53, 0xdc, 0xbb, 0x61, 0x18, 0x5f, 0xd1, 0x6b, 0xd8, 0xd0, 0x30, - 0xc3, 0x1b, 0xa6, 0x78, 0x39, 0x01, 0xa4, 0x48, 0x0f, 0x80, 0x17, 0xf7, 0xaa, 0x22, 0x26, 0x8f, - 0x30, 0x7e, 0x02, 0x3e, 0xc7, 0xc0, 0x72, 0x01, 0x52, 0x0b, 0xaa, 0xab, 0x92, 0x04, 0xc3, 0xbd, - 0xc6, 0x16, 0x9a, 0x9c, 0x42, 0x7e, 0xca, 0x6f, 0x24, 0x20, 0x75, 0xd9, 0x74, 0x31, 0x7a, 0x2c, - 0x90, 0x00, 0x8e, 0x74, 0xf2, 0xe7, 0x0d, 0xbd, 0x6e, 0xe0, 0xda, 0x8a, 0x53, 0x0f, 0xdc, 0xe7, - 0xf6, 0xdd, 0x29, 0x11, 0x72, 0xa7, 0x09, 0x48, 0xdb, 0x66, 0xcb, 0xa8, 0x89, 0x13, 0x87, 0xb4, - 0x81, 0x2a, 0x90, 0xf1, 0xbc, 0x24, 0x15, 0xe7, 0x25, 0xa3, 0xc4, 0x4b, 0x88, 0x0f, 0x73, 0x80, - 0x32, 0xb8, 0xcd, 0x9d, 0xa5, 0x0c, 0x59, 0x2f, 0x78, 0x71, 0x6f, 0xeb, 0xcf, 0x61, 0x7d, 0x32, - 0xb2, 0x98, 0x78, 0x63, 0xef, 0x19, 0x8f, 0x79, 0x5c, 0xde, 0x7b, 0xc0, 0xad, 0x17, 0x72, 0x2b, - 0x7e, 0xb7, 0x7c, 0x90, 0xea, 0xe5, 0xbb, 0x15, 0xbb, 0x5f, 0x7e, 0x12, 0xb2, 0x8e, 0x5e, 0x37, - 0x54, 0xb7, 0x65, 0x63, 0xee, 0x79, 0x3e, 0x40, 0xfe, 0xb2, 0x04, 0x03, 0xcc, 0x93, 0x03, 0x76, - 0x93, 0x3a, 0xdb, 0x2d, 0xd1, 0xcd, 0x6e, 0xc9, 0xc3, 0xdb, 0x6d, 0x0e, 0xc0, 0x13, 0xc6, 0xe1, - 0x77, 0x83, 0x3b, 0x64, 0x0c, 0x4c, 0xc4, 0x0d, 0xbd, 0xce, 0x27, 0x6a, 0x80, 0x48, 0xfe, 0x8f, - 0x12, 0x49, 0x62, 0xf9, 0x73, 0x34, 0x07, 0xc3, 0x42, 0xae, 0xea, 0x4e, 0x43, 0xad, 0x73, 0xdf, - 0xb9, 0xb3, 0xab, 0x70, 0x17, 0x1a, 0x6a, 0x5d, 0x19, 0xe2, 0xf2, 0x90, 0x46, 0xe7, 0x71, 0x48, - 0x74, 0x19, 0x87, 0xd0, 0xc0, 0x27, 0x0f, 0x37, 0xf0, 0xa1, 0x21, 0x4a, 0x45, 0x87, 0xe8, 0x0b, - 0x09, 0xba, 0x99, 0xb1, 0x4c, 0x47, 0x6d, 0xfc, 0x30, 0x66, 0xc4, 0x1d, 0x90, 0xb5, 0xcc, 0x46, - 0x95, 0x3d, 0x61, 0x27, 0x71, 0x33, 0x96, 0xd9, 0x50, 0xda, 0x86, 0x3d, 0x7d, 0x8b, 0xa6, 0xcb, - 0xc0, 0x2d, 0xb0, 0xda, 0x60, 0xd4, 0x6a, 0x36, 0xe4, 0x98, 0x29, 0xf8, 0x5a, 0xf6, 0x08, 0xb1, - 0x01, 0x5d, 0x1c, 0xa5, 0xf6, 0xb5, 0x97, 0x89, 0xcd, 0x30, 0x15, 0x8e, 0x47, 0x28, 0x58, 0xe8, - 0xef, 0xb4, 0x0b, 0x0e, 0xba, 0xa5, 0xc2, 0xf1, 0xe4, 0x9f, 0x97, 0x00, 0x96, 0x89, 0x65, 0xa9, - 0xbe, 0x64, 0x15, 0x72, 0xa8, 0x08, 0xd5, 0x50, 0xcf, 0x93, 0xdd, 0x06, 0x8d, 0xf7, 0x9f, 0x73, - 0x82, 0x72, 0xcf, 0xc3, 0xb0, 0xef, 0x8c, 0x0e, 0x16, 0xc2, 0x4c, 0xf6, 0xc8, 0xaa, 0x37, 0xb0, - 0xab, 0xe4, 0xae, 0x04, 0x5a, 0xf2, 0x3f, 0x97, 0x20, 0x4b, 0x65, 0x5a, 0xc1, 0xae, 0x1a, 0x1a, - 0x43, 0xe9, 0xf0, 0x63, 0x78, 0x27, 0x00, 0x63, 0xe3, 0xe8, 0x2f, 0x63, 0xee, 0x59, 0x59, 0x0a, - 0xd9, 0xd0, 0x5f, 0xc6, 0xe8, 0x9c, 0x67, 0xf0, 0x64, 0x6f, 0x83, 0x8b, 0xac, 0x9b, 0x9b, 0xfd, - 0x38, 0x0c, 0xd2, 0x4f, 0xe4, 0x5c, 0x73, 0x78, 0x22, 0x3d, 0x60, 0xb4, 0x9a, 0x9b, 0xd7, 0x1c, - 0xf9, 0x45, 0x18, 0xdc, 0xbc, 0xc6, 0x6a, 0x23, 0x77, 0x40, 0xd6, 0x36, 0x4d, 0xbe, 0x26, 0xb3, - 0x5c, 0x28, 0x43, 0x00, 0x74, 0x09, 0x12, 0xf5, 0x80, 0x84, 0x5f, 0x0f, 0xf0, 0x0b, 0x1a, 0xc9, - 0xbe, 0x0a, 0x1a, 0xa7, 0xff, 0x9d, 0x04, 0x43, 0x81, 0xf8, 0x80, 0x1e, 0x85, 0xa3, 0xe5, 0xe5, - 0xb5, 0xf9, 0x4b, 0xd5, 0xa5, 0x85, 0xea, 0x85, 0xe5, 0xb9, 0x45, 0xff, 0xae, 0x49, 0xf1, 0xd8, - 0xab, 0xd7, 0xa7, 0x51, 0x00, 0x77, 0xcb, 0xd8, 0x33, 0xcc, 0xab, 0x06, 0x9a, 0x85, 0x89, 0x30, - 0xc9, 0x5c, 0x79, 0xa3, 0xb2, 0xba, 0x99, 0x97, 0x8a, 0x47, 0x5f, 0xbd, 0x3e, 0x3d, 0x16, 0xa0, - 0x98, 0xdb, 0x76, 0xb0, 0xe1, 0xb6, 0x13, 0xcc, 0xaf, 0xad, 0xac, 0x2c, 0x6d, 0xe6, 0x13, 0x6d, - 0x04, 0x3c, 0x60, 0x3f, 0x00, 0x63, 0x61, 0x82, 0xd5, 0xa5, 0xe5, 0x7c, 0xb2, 0x88, 0x5e, 0xbd, - 0x3e, 0x3d, 0x12, 0xc0, 0x5e, 0xd5, 0x1b, 0xc5, 0xcc, 0xfb, 0x3f, 0x33, 0x79, 0xe4, 0x97, 0x7e, - 0x71, 0x52, 0x22, 0x9a, 0x0d, 0x87, 0x62, 0x04, 0x7a, 0x08, 0x8e, 0x6f, 0x2c, 0x2d, 0xae, 0x56, - 0x16, 0xaa, 0x2b, 0x1b, 0x8b, 0x55, 0xf6, 0x91, 0x0d, 0x4f, 0xbb, 0xd1, 0x57, 0xaf, 0x4f, 0x0f, - 0x71, 0x95, 0xba, 0x61, 0xaf, 0x2b, 0x95, 0xcb, 0x6b, 0x9b, 0x95, 0xbc, 0xc4, 0xb0, 0xd7, 0x6d, - 0x7c, 0xc5, 0x74, 0xd9, 0x37, 0xb4, 0x1e, 0x81, 0x13, 0x1d, 0xb0, 0x3d, 0xc5, 0xc6, 0x5e, 0xbd, - 0x3e, 0x3d, 0xbc, 0x6e, 0x63, 0x36, 0x7f, 0x28, 0xc5, 0x0c, 0x14, 0xda, 0x29, 0xd6, 0xd6, 0xd7, - 0x36, 0xe6, 0x96, 0xf3, 0xd3, 0xc5, 0xfc, 0xab, 0xd7, 0xa7, 0x73, 0x22, 0x18, 0x12, 0x7c, 0x5f, - 0xb3, 0xdb, 0xb9, 0xe3, 0xf9, 0xd3, 0x87, 0xe1, 0x1e, 0x5e, 0x12, 0x75, 0x5c, 0x75, 0x4f, 0x37, - 0xea, 0x5e, 0xe1, 0x99, 0xb7, 0xf9, 0xce, 0xe7, 0x18, 0xaf, 0x3d, 0x0b, 0x68, 0xcf, 0xf2, 0x73, - 0xb1, 0xfb, 0x9b, 0xa5, 0x62, 0x4c, 0x75, 0x35, 0x7e, 0xeb, 0xd4, 0xfd, 0x55, 0x45, 0x31, 0xa6, - 0x80, 0x5e, 0xec, 0xb9, 0xb9, 0x93, 0x3f, 0x20, 0xc1, 0xc8, 0x45, 0xdd, 0x71, 0x4d, 0x5b, 0xd7, - 0xd4, 0x06, 0xbd, 0x61, 0x72, 0xae, 0xdf, 0xd8, 0x1a, 0x99, 0xea, 0xcf, 0xc0, 0xc0, 0x15, 0xb5, - 0xc1, 0x82, 0x5a, 0x92, 0x7e, 0x11, 0xa3, 0xb3, 0xf9, 0xfc, 0xd0, 0x26, 0x18, 0x30, 0x32, 0xf9, - 0x57, 0x12, 0x30, 0x4a, 0x27, 0x83, 0xc3, 0x3e, 0x81, 0x44, 0xf6, 0x58, 0x65, 0x48, 0xd9, 0xaa, - 0xcb, 0x8b, 0x86, 0xe5, 0x19, 0x5e, 0x08, 0xbf, 0x2f, 0xbe, 0xb8, 0x3d, 0xb3, 0x80, 0x35, 0x85, - 0xd2, 0xa2, 0xb7, 0x43, 0xa6, 0xa9, 0x5e, 0xab, 0x52, 0x3e, 0x6c, 0xe7, 0x32, 0x77, 0x30, 0x3e, - 0x37, 0x6f, 0x4c, 0x8d, 0xee, 0xab, 0xcd, 0x46, 0x49, 0x16, 0x7c, 0x64, 0x65, 0xb0, 0xa9, 0x5e, - 0x23, 0x22, 0x22, 0x0b, 0x46, 0x09, 0x54, 0xdb, 0x55, 0x8d, 0x3a, 0x66, 0x9d, 0xd0, 0x12, 0x68, - 0xf9, 0xe2, 0x81, 0x3b, 0x39, 0xe6, 0x77, 0x12, 0x60, 0x27, 0x2b, 0xc3, 0x4d, 0xf5, 0xda, 0x3c, - 0x05, 0x90, 0x1e, 0x4b, 0x99, 0x8f, 0x7e, 0x6a, 0xea, 0x08, 0x7d, 0xb9, 0xf0, 0x0d, 0x09, 0xc0, - 0xb7, 0x18, 0x7a, 0x3b, 0xe4, 0x35, 0xaf, 0x45, 0x69, 0x1d, 0x3e, 0x86, 0xf7, 0x77, 0x1b, 0x8b, - 0x88, 0xbd, 0xd9, 0xda, 0xfc, 0xf5, 0x1b, 0x53, 0x92, 0x32, 0xaa, 0x45, 0x86, 0xe2, 0x6d, 0x30, - 0xd4, 0xb2, 0x6a, 0xaa, 0x8b, 0xab, 0x74, 0x1f, 0x97, 0x88, 0x5d, 0xe7, 0x27, 0x09, 0xaf, 0x9b, - 0x37, 0xa6, 0x10, 0x53, 0x2b, 0x40, 0x2c, 0xd3, 0xd5, 0x1f, 0x18, 0x84, 0x10, 0x04, 0x74, 0xfa, - 0xaa, 0x04, 0x43, 0x0b, 0x81, 0x93, 0x5e, 0x05, 0x18, 0x6c, 0x9a, 0x86, 0xbe, 0xc7, 0xfd, 0x31, - 0xab, 0x88, 0x26, 0x2a, 0x42, 0x86, 0x5d, 0xba, 0x73, 0xf7, 0x45, 0x29, 0x54, 0xb4, 0x09, 0xd5, - 0x55, 0xbc, 0xed, 0xe8, 0x62, 0x34, 0x14, 0xd1, 0x44, 0x17, 0x20, 0xef, 0x60, 0xad, 0x65, 0xeb, - 0xee, 0x7e, 0x55, 0x33, 0x0d, 0x57, 0xd5, 0x5c, 0x76, 0x7d, 0xab, 0x7c, 0xc7, 0xcd, 0x1b, 0x53, - 0xc7, 0x99, 0xac, 0x51, 0x0c, 0x59, 0x19, 0x15, 0xa0, 0x79, 0x06, 0x21, 0x3d, 0xd4, 0xb0, 0xab, - 0xea, 0x0d, 0xa7, 0xc0, 0xde, 0x93, 0x89, 0x66, 0x40, 0x97, 0xcf, 0x0f, 0x06, 0x0b, 0x5b, 0x17, - 0x20, 0x6f, 0x5a, 0xd8, 0x0e, 0x25, 0xa2, 0x52, 0xb4, 0xe7, 0x28, 0x86, 0xac, 0x8c, 0x0a, 0x90, - 0x48, 0x52, 0x5d, 0x32, 0xcc, 0x62, 0xa3, 0x68, 0xb5, 0xb6, 0xfd, 0x7a, 0xd8, 0x44, 0xdb, 0x68, - 0xcc, 0x19, 0xfb, 0xe5, 0xc7, 0x7c, 0xee, 0x51, 0x3a, 0xf9, 0x6b, 0x5f, 0x7c, 0x78, 0x82, 0xbb, - 0x86, 0x5f, 0x9f, 0xba, 0x84, 0xf7, 0xc9, 0xf0, 0x73, 0xd4, 0x75, 0x8a, 0x49, 0xd2, 0xce, 0x17, - 0x55, 0xbd, 0x21, 0xae, 0x21, 0x2b, 0xbc, 0x85, 0x4a, 0x30, 0xe0, 0xb8, 0xaa, 0xdb, 0x72, 0xf8, - 0x47, 0xbf, 0xe4, 0x6e, 0xae, 0x56, 0x36, 0x8d, 0xda, 0x06, 0xc5, 0x54, 0x38, 0x05, 0xba, 0x00, - 0x03, 0xae, 0xb9, 0x87, 0x0d, 0x6e, 0xc2, 0x03, 0xcd, 0x6f, 0xfa, 0xda, 0x8e, 0x51, 0x13, 0x8b, - 0xd4, 0x70, 0x03, 0xd7, 0x59, 0x5a, 0xb5, 0xab, 0x92, 0xdd, 0x07, 0xfd, 0xf6, 0x57, 0x79, 0xe9, - 0xc0, 0x93, 0x90, 0x5b, 0x2a, 0xca, 0x4f, 0x56, 0x46, 0x3d, 0xd0, 0x06, 0x85, 0xa0, 0x4b, 0xa1, - 0x23, 0x89, 0xfc, 0x03, 0x79, 0x77, 0x77, 0x53, 0x3f, 0xe0, 0xd3, 0xa2, 0x3e, 0x11, 0x3c, 0xd0, - 0x78, 0x01, 0xf2, 0x2d, 0x63, 0xdb, 0x34, 0xe8, 0x5d, 0x41, 0x9e, 0xdf, 0x93, 0xfd, 0x5d, 0x32, - 0xe8, 0x1c, 0x51, 0x0c, 0x59, 0x19, 0xf5, 0x40, 0x17, 0xd9, 0x2e, 0xa0, 0x06, 0x23, 0x3e, 0x16, - 0x9d, 0xa8, 0xd9, 0xd8, 0x89, 0x7a, 0x17, 0x9f, 0xa8, 0x47, 0xa3, 0xbd, 0xf8, 0x73, 0x75, 0xd8, - 0x03, 0x12, 0x32, 0x74, 0x11, 0xc0, 0x0f, 0x0f, 0xb4, 0x4e, 0x31, 0xd4, 0x7d, 0xe0, 0xfd, 0x18, - 0x23, 0xf6, 0x7b, 0x3e, 0x2d, 0x7a, 0x27, 0x8c, 0x37, 0x75, 0xa3, 0xea, 0xe0, 0xc6, 0x4e, 0x95, - 0x1b, 0x98, 0xb0, 0xa4, 0xdf, 0x7a, 0x29, 0x2f, 0x1f, 0xcc, 0x1f, 0x6e, 0xde, 0x98, 0x2a, 0xf2, - 0x10, 0xda, 0xce, 0x52, 0x56, 0xc6, 0x9a, 0xba, 0xb1, 0x81, 0x1b, 0x3b, 0x0b, 0x1e, 0xac, 0x94, - 0x7b, 0xff, 0xa7, 0xa6, 0x8e, 0xf0, 0xe9, 0x7a, 0x44, 0x3e, 0x47, 0x6b, 0xe7, 0x7c, 0x9a, 0x61, - 0x87, 0xec, 0x49, 0x54, 0xd1, 0xa0, 0x15, 0x8d, 0xac, 0xe2, 0x03, 0xd8, 0x34, 0x7f, 0xe5, 0x3f, - 0x4c, 0x4b, 0xf2, 0xe7, 0x25, 0x18, 0x58, 0xb8, 0xbc, 0xae, 0xea, 0x36, 0x5a, 0x82, 0x31, 0xdf, - 0x73, 0xc2, 0x93, 0xfc, 0xe4, 0xcd, 0x1b, 0x53, 0x85, 0xa8, 0x73, 0x79, 0xb3, 0xdc, 0x77, 0x60, - 0x31, 0xcd, 0x97, 0xba, 0x6d, 0x5c, 0x43, 0xac, 0xda, 0x50, 0xe4, 0xf6, 0x6d, 0x6d, 0x44, 0xcd, - 0x0a, 0x0c, 0x32, 0x69, 0x1d, 0x54, 0x82, 0xb4, 0x45, 0x7e, 0xf0, 0x17, 0x03, 0x93, 0x5d, 0x9d, - 0x97, 0xe2, 0x7b, 0x85, 0x4c, 0x42, 0x22, 0x7f, 0x38, 0x01, 0xb0, 0x70, 0xf9, 0xf2, 0xa6, 0xad, - 0x5b, 0x0d, 0xec, 0xde, 0x4a, 0xcd, 0x37, 0xe1, 0x68, 0x60, 0x97, 0x64, 0x6b, 0x11, 0xed, 0xa7, - 0x6f, 0xde, 0x98, 0x3a, 0x19, 0xd5, 0x3e, 0x80, 0x26, 0x2b, 0xe3, 0xfe, 0x7e, 0xc9, 0xd6, 0x3a, - 0x72, 0xad, 0x39, 0xae, 0xc7, 0x35, 0xd9, 0x9d, 0x6b, 0x00, 0x2d, 0xc8, 0x75, 0xc1, 0x71, 0x3b, - 0x9b, 0x76, 0x03, 0x86, 0x7c, 0x93, 0x38, 0x68, 0x01, 0x32, 0x2e, 0xff, 0xcd, 0x2d, 0x2c, 0x77, - 0xb7, 0xb0, 0x20, 0xe3, 0x56, 0xf6, 0x28, 0xe5, 0x3f, 0x97, 0x00, 0x7c, 0x9f, 0xfd, 0xf1, 0x74, - 0x31, 0x12, 0xca, 0x79, 0xe0, 0x4d, 0x1e, 0x2a, 0x55, 0xe3, 0xd4, 0x11, 0x7b, 0xfe, 0x74, 0x02, - 0xc6, 0xb7, 0x44, 0xe4, 0xf9, 0xb1, 0xb7, 0xc1, 0x3a, 0x0c, 0x62, 0xc3, 0xb5, 0x75, 0x6a, 0x04, - 0x32, 0xda, 0x8f, 0x74, 0x1b, 0xed, 0x0e, 0x3a, 0xd1, 0x8f, 0xdd, 0x88, 0xa2, 0x3b, 0x67, 0x13, - 0xb1, 0xc6, 0x07, 0x93, 0x50, 0xe8, 0x46, 0x89, 0xe6, 0x61, 0x54, 0xb3, 0x31, 0x05, 0x54, 0x83, - 0x95, 0xbf, 0x72, 0xd1, 0xcf, 0x2c, 0x23, 0x08, 0xb2, 0x32, 0x22, 0x20, 0x7c, 0xf5, 0xa8, 0x03, - 0x49, 0xfb, 0x88, 0xdb, 0x11, 0xac, 0x3e, 0xf3, 0x3c, 0x99, 0x2f, 0x1f, 0xa2, 0x93, 0x30, 0x03, - 0xb6, 0x7e, 0x8c, 0xf8, 0x50, 0xba, 0x80, 0xbc, 0x04, 0xa3, 0xba, 0xa1, 0xbb, 0xba, 0xda, 0xa8, - 0x6e, 0xab, 0x0d, 0xd5, 0xd0, 0x0e, 0x93, 0x35, 0xb3, 0x90, 0xcf, 0xbb, 0x8d, 0xb0, 0x93, 0x95, - 0x11, 0x0e, 0x29, 0x33, 0x00, 0xba, 0x08, 0x83, 0xa2, 0xab, 0xd4, 0xa1, 0xb2, 0x0d, 0x41, 0x1e, - 0x48, 0xf0, 0x7e, 0x26, 0x09, 0x63, 0x0a, 0xae, 0xfd, 0xff, 0xa1, 0x38, 0xd8, 0x50, 0xac, 0x00, - 0xb0, 0xe9, 0x4e, 0x02, 0xec, 0x21, 0x46, 0x83, 0x04, 0x8c, 0x2c, 0xe3, 0xb0, 0xe0, 0xb8, 0x81, - 0xf1, 0xb8, 0x91, 0x80, 0x5c, 0x70, 0x3c, 0xfe, 0x92, 0xae, 0x4a, 0x68, 0xc9, 0x8f, 0x44, 0x29, - 0xfe, 0x8d, 0xd0, 0x2e, 0x91, 0xa8, 0xcd, 0x7b, 0x7b, 0x87, 0xa0, 0xff, 0x91, 0x80, 0x81, 0x75, - 0xd5, 0x56, 0x9b, 0x0e, 0xd2, 0xda, 0x32, 0x4d, 0x51, 0x7e, 0x6c, 0xfb, 0xc0, 0x33, 0xaf, 0x76, - 0xc4, 0x24, 0x9a, 0x1f, 0xed, 0x90, 0x68, 0xfe, 0x04, 0x8c, 0x90, 0xed, 0x70, 0xe0, 0x08, 0x03, - 0xb1, 0xf6, 0x70, 0xf9, 0x84, 0xcf, 0x25, 0xfc, 0x9c, 0xed, 0x96, 0x2f, 0x07, 0xcf, 0x30, 0x0c, - 0x11, 0x0c, 0x3f, 0x30, 0x13, 0xf2, 0x63, 0xfe, 0xb6, 0x34, 0xf0, 0x50, 0x56, 0xa0, 0xa9, 0x5e, - 0xab, 0xb0, 0x06, 0x5a, 0x06, 0xb4, 0xeb, 0x55, 0x46, 0xaa, 0xbe, 0x39, 0x09, 0xfd, 0x9d, 0x37, - 0x6f, 0x4c, 0x9d, 0x60, 0xf4, 0xed, 0x38, 0xb2, 0x32, 0xe6, 0x03, 0x05, 0xb7, 0xc7, 0x01, 0x88, - 0x5e, 0x55, 0x76, 0x9a, 0x90, 0x6d, 0x77, 0x8e, 0xde, 0xbc, 0x31, 0x35, 0xc6, 0xb8, 0xf8, 0xcf, - 0x64, 0x25, 0x4b, 0x1a, 0x0b, 0xe4, 0x77, 0xc0, 0xb3, 0x3f, 0x23, 0x01, 0xf2, 0x43, 0xbe, 0x82, - 0x1d, 0x8b, 0xec, 0xcf, 0x48, 0x22, 0x1e, 0xc8, 0x9a, 0xa5, 0xde, 0x89, 0xb8, 0x4f, 0x2f, 0x12, - 0xf1, 0xc0, 0x4c, 0x79, 0xca, 0x0f, 0x8f, 0x09, 0x3e, 0x8e, 0x1d, 0x8e, 0x5e, 0xce, 0xcc, 0x9b, - 0xba, 0xa0, 0x6e, 0x8b, 0x87, 0x47, 0xe4, 0x7f, 0x25, 0xc1, 0x89, 0x36, 0x8f, 0xf2, 0x84, 0xfd, - 0x2b, 0x80, 0xec, 0xc0, 0x43, 0xfe, 0xbd, 0x37, 0x26, 0xf4, 0x81, 0x1d, 0x74, 0xcc, 0x6e, 0x8b, - 0xbb, 0xb7, 0x2e, 0xc2, 0xb3, 0xb3, 0x9b, 0xff, 0x4c, 0x82, 0x89, 0x60, 0xf7, 0x9e, 0x22, 0xab, - 0x90, 0x0b, 0xf6, 0xce, 0x55, 0xb8, 0xa7, 0x1f, 0x15, 0xb8, 0xf4, 0x21, 0x7a, 0xf4, 0x9c, 0x3f, - 0x5d, 0x59, 0xed, 0xec, 0xd1, 0xbe, 0xad, 0x21, 0x64, 0x8a, 0x4e, 0xdb, 0x14, 0x1d, 0x8f, 0xff, - 0x23, 0x41, 0x6a, 0xdd, 0x34, 0x1b, 0xc8, 0x84, 0x31, 0xc3, 0x74, 0xab, 0xc4, 0xb3, 0x70, 0xad, - 0xca, 0x37, 0xdd, 0x2c, 0x0e, 0xce, 0x1f, 0xcc, 0x48, 0xdf, 0xbe, 0x31, 0xd5, 0xce, 0x4a, 0x19, - 0x35, 0x4c, 0xb7, 0x4c, 0x21, 0x9b, 0x6c, 0x4b, 0xfe, 0x4e, 0x18, 0x0e, 0x77, 0xc6, 0xa2, 0xe4, - 0xf3, 0x07, 0xee, 0x2c, 0xcc, 0xe6, 0xe6, 0x8d, 0xa9, 0x09, 0x7f, 0xc6, 0x78, 0x60, 0x59, 0xc9, - 0x6d, 0x07, 0x7a, 0x67, 0xc7, 0xbb, 0xbe, 0xfb, 0xa9, 0x29, 0xe9, 0xf4, 0x97, 0x24, 0x00, 0xbf, - 0xf2, 0x80, 0x1e, 0x82, 0xe3, 0xe5, 0xb5, 0xd5, 0x85, 0xea, 0xc6, 0xe6, 0xdc, 0xe6, 0xd6, 0x46, - 0x75, 0x6b, 0x75, 0x63, 0xbd, 0x32, 0xbf, 0x74, 0x61, 0xa9, 0xb2, 0xe0, 0x97, 0xc7, 0x1d, 0x0b, - 0x6b, 0xfa, 0x8e, 0x8e, 0x6b, 0xe8, 0x3e, 0x98, 0x08, 0x63, 0x93, 0x56, 0x65, 0x21, 0x2f, 0x15, - 0x73, 0xaf, 0x5e, 0x9f, 0xce, 0xb0, 0x5c, 0x0c, 0xd7, 0xd0, 0x29, 0x38, 0xda, 0x8e, 0xb7, 0xb4, - 0xba, 0x98, 0x4f, 0x14, 0x87, 0x5f, 0xbd, 0x3e, 0x9d, 0xf5, 0x92, 0x36, 0x24, 0x03, 0x0a, 0x62, - 0x72, 0x7e, 0xc9, 0x22, 0xbc, 0x7a, 0x7d, 0x7a, 0x80, 0x19, 0xb0, 0x98, 0x7a, 0xff, 0x67, 0x26, - 0x8f, 0x94, 0x2f, 0x74, 0x2d, 0x80, 0x3f, 0xd4, 0xd3, 0x76, 0xd7, 0xbc, 0xa2, 0x76, 0xb8, 0xea, - 0xfd, 0xea, 0x71, 0x98, 0xea, 0x52, 0xf5, 0x76, 0xaf, 0xc5, 0x14, 0xbc, 0x7b, 0x94, 0xb6, 0x63, - 0x4b, 0xd7, 0x5d, 0x8a, 0xe5, 0x87, 0x2f, 0x68, 0xf7, 0x55, 0xbb, 0x97, 0xff, 0x75, 0x0a, 0xd0, - 0x8a, 0x53, 0x9f, 0x27, 0x49, 0x55, 0xe0, 0x88, 0x56, 0xa4, 0x66, 0x23, 0xfd, 0x40, 0x35, 0x9b, - 0x95, 0x50, 0x15, 0x24, 0x71, 0xb0, 0x4a, 0x6b, 0xdf, 0xa5, 0x90, 0xe4, 0x0f, 0xa5, 0x14, 0xd2, - 0x39, 0x53, 0x4a, 0xdd, 0xba, 0x2d, 0x55, 0xfa, 0xb0, 0xdb, 0x4a, 0x5e, 0xe1, 0x1c, 0xe8, 0x51, - 0xe1, 0x2c, 0x74, 0x2d, 0x63, 0x72, 0x6a, 0x74, 0x56, 0x5c, 0xc9, 0x19, 0xec, 0x6f, 0x6d, 0xe3, - 0x77, 0x76, 0x32, 0xef, 0x17, 0x2b, 0xdb, 0x49, 0x28, 0xb6, 0xbb, 0x93, 0x08, 0xbe, 0xf2, 0x47, - 0x92, 0x90, 0x5f, 0x71, 0xea, 0x95, 0x9a, 0xee, 0xde, 0x26, 0x5f, 0x7b, 0xa6, 0xfb, 0x36, 0x15, - 0xdd, 0xbc, 0x31, 0x35, 0xc2, 0x6c, 0xda, 0xc3, 0x92, 0x4d, 0x18, 0x8d, 0xbc, 0x1c, 0xe0, 0x9e, - 0xb5, 0x70, 0x98, 0x77, 0x14, 0x11, 0x56, 0x32, 0xdd, 0x55, 0x04, 0xfc, 0x1b, 0x5d, 0xeb, 0xec, - 0xcc, 0xcc, 0xa1, 0x2e, 0xde, 0xce, 0x9a, 0x9e, 0x3f, 0x66, 0x45, 0x28, 0x44, 0x07, 0xc5, 0x1b, - 0xb1, 0x3f, 0x92, 0x60, 0x68, 0xc5, 0x11, 0xbb, 0x68, 0xfc, 0x63, 0x5a, 0x51, 0x78, 0xc2, 0xbb, - 0x68, 0x92, 0xec, 0xcf, 0x6f, 0xc5, 0xe5, 0x13, 0xdf, 0x08, 0x47, 0x61, 0x3c, 0xa0, 0xa7, 0xa7, - 0xff, 0xef, 0x24, 0x68, 0x7c, 0x2c, 0xe3, 0xba, 0x6e, 0x78, 0x49, 0x05, 0xfe, 0xcb, 0xba, 0x5f, - 0xf2, 0xed, 0x9c, 0x3a, 0xac, 0x9d, 0xf7, 0x68, 0x80, 0x88, 0xd8, 0xd3, 0xcb, 0x18, 0x57, 0xda, - 0x77, 0xf3, 0xd2, 0x01, 0x0e, 0xca, 0x44, 0xf6, 0xec, 0xf2, 0x1b, 0x12, 0x0c, 0xaf, 0x38, 0xf5, - 0x2d, 0xa3, 0xf6, 0xff, 0xbc, 0xff, 0xee, 0xc0, 0xd1, 0x90, 0xa6, 0xb7, 0xc9, 0xa4, 0x67, 0x5e, - 0x4b, 0x41, 0x72, 0xc5, 0xa9, 0xa3, 0x97, 0x60, 0x34, 0x9a, 0x34, 0x9c, 0xee, 0x16, 0xb3, 0xdb, - 0x57, 0x84, 0xe2, 0x99, 0xfe, 0x71, 0x3d, 0x4d, 0xf6, 0x60, 0x38, 0xbc, 0x72, 0x9c, 0xea, 0xc1, - 0x24, 0x84, 0x59, 0x7c, 0xa4, 0x5f, 0x4c, 0xaf, 0xb3, 0xb7, 0x43, 0xc6, 0x0b, 0x7a, 0x77, 0xf7, - 0xa0, 0x16, 0x48, 0xc5, 0x07, 0xfb, 0x40, 0xf2, 0xb8, 0xbf, 0x04, 0xa3, 0xd1, 0x90, 0xd2, 0xcb, - 0x7a, 0x11, 0xdc, 0x9e, 0xd6, 0xeb, 0x36, 0xb5, 0xb6, 0x01, 0x02, 0xf3, 0xe0, 0xde, 0x1e, 0x1c, - 0x7c, 0xb4, 0xe2, 0xc3, 0x7d, 0xa1, 0x79, 0x9b, 0xab, 0x5b, 0x9d, 0x8c, 0xff, 0x8b, 0x04, 0x9c, - 0x0e, 0xa6, 0xb9, 0x2f, 0xb5, 0xb0, 0xbd, 0xef, 0x65, 0xb2, 0x96, 0x5a, 0xd7, 0x8d, 0xe0, 0xed, - 0xbb, 0x13, 0xc1, 0x59, 0x43, 0x71, 0x85, 0xbc, 0xb2, 0x01, 0x43, 0xeb, 0x6a, 0x1d, 0x2b, 0xf8, - 0xa5, 0x16, 0x76, 0xdc, 0x0e, 0xb7, 0xbf, 0x8e, 0xc1, 0x80, 0xb9, 0xb3, 0x23, 0xce, 0x9a, 0xa5, - 0x14, 0xde, 0x42, 0x13, 0x90, 0x6e, 0xe8, 0x4d, 0x9d, 0xcd, 0xcc, 0x94, 0xc2, 0x1a, 0x68, 0x0a, - 0x86, 0x34, 0x32, 0x01, 0xab, 0xec, 0xdc, 0x7c, 0x4a, 0x7c, 0x99, 0xa9, 0x65, 0xb8, 0x9b, 0x04, - 0x22, 0x3f, 0x03, 0x39, 0xd6, 0x1f, 0xb7, 0xfe, 0x09, 0xc8, 0xd0, 0x73, 0xce, 0x7e, 0xaf, 0x83, - 0xa4, 0x7d, 0x89, 0xdd, 0x14, 0x63, 0x5c, 0x58, 0xc7, 0xac, 0x51, 0x2e, 0x77, 0x35, 0xe5, 0xa9, - 0xf8, 0x8c, 0x80, 0x19, 0xca, 0x33, 0xe3, 0x6f, 0xa5, 0xe1, 0x28, 0xdf, 0x7f, 0xa8, 0x96, 0x3e, - 0xbb, 0xeb, 0xba, 0xe2, 0x36, 0x33, 0xf0, 0x10, 0xa0, 0x5a, 0xba, 0xbc, 0x0f, 0xa9, 0x8b, 0xae, - 0x6b, 0xa1, 0xd3, 0x90, 0xb6, 0x5b, 0x0d, 0x2c, 0x5e, 0xc5, 0x78, 0xa9, 0xa4, 0x6a, 0xe9, 0x33, - 0x04, 0x41, 0x69, 0x35, 0xb0, 0xc2, 0x50, 0x50, 0x05, 0xa6, 0x76, 0x5a, 0x8d, 0xc6, 0x7e, 0xb5, - 0x86, 0xe9, 0x3f, 0xcb, 0xf3, 0xfe, 0x2f, 0x0d, 0xbe, 0x66, 0xa9, 0x86, 0x97, 0xef, 0x67, 0x94, - 0x93, 0x14, 0x6d, 0x81, 0x62, 0x89, 0xff, 0x49, 0x53, 0x11, 0x38, 0xf2, 0xef, 0x27, 0x20, 0x23, - 0x58, 0xd3, 0xab, 0x5b, 0xb8, 0x81, 0x35, 0xd7, 0x14, 0x47, 0x19, 0xbc, 0x36, 0x42, 0x90, 0xac, - 0xf3, 0x21, 0xca, 0x5e, 0x3c, 0xa2, 0x90, 0x06, 0x81, 0x79, 0x17, 0xea, 0x08, 0xcc, 0x6a, 0x91, - 0x51, 0x4b, 0x59, 0xa6, 0xa8, 0x99, 0x5e, 0x3c, 0xa2, 0xd0, 0x16, 0x2a, 0xc0, 0x00, 0x71, 0x59, - 0x97, 0x7d, 0x31, 0x98, 0xc0, 0x79, 0x1b, 0x1d, 0x83, 0xb4, 0xa5, 0xba, 0x1a, 0x3b, 0xeb, 0x4e, - 0x1e, 0xb0, 0x26, 0x09, 0xcc, 0xec, 0x4b, 0x0d, 0xd1, 0xff, 0x44, 0x45, 0x8c, 0xc1, 0x3e, 0x89, - 0x49, 0xe4, 0x5e, 0x57, 0x5d, 0x17, 0xdb, 0x06, 0x61, 0xc8, 0xd0, 0x11, 0x82, 0xd4, 0xb6, 0x59, - 0xdb, 0xe7, 0xff, 0x1d, 0x8b, 0xfe, 0xe6, 0xff, 0xb7, 0x87, 0xfa, 0x43, 0x95, 0x3e, 0x64, 0xff, - 0x14, 0x30, 0x27, 0x80, 0x65, 0x82, 0x54, 0x81, 0x71, 0xb5, 0x56, 0xd3, 0x89, 0x57, 0xab, 0x8d, - 0xea, 0xb6, 0x4e, 0xf7, 0xc3, 0x0e, 0xfd, 0x97, 0x8f, 0xdd, 0xc6, 0x02, 0xf9, 0x04, 0x65, 0x8e, - 0x5f, 0xce, 0xc2, 0xa0, 0xc5, 0x84, 0x92, 0xcf, 0xc3, 0x58, 0x9b, 0xa4, 0x44, 0xbe, 0x3d, 0xdd, - 0xa8, 0x89, 0x5b, 0x86, 0xe4, 0x37, 0x81, 0xd1, 0xcf, 0xda, 0xb2, 0x43, 0x22, 0xf4, 0x77, 0xf9, - 0xdd, 0xdd, 0xef, 0xa0, 0x8e, 0x04, 0xee, 0xa0, 0xaa, 0x96, 0x5e, 0xce, 0x52, 0xfe, 0xfc, 0xea, - 0xe9, 0x1c, 0x7f, 0xc0, 0xae, 0x9d, 0xce, 0x98, 0x76, 0x7d, 0xb6, 0x8e, 0x0d, 0xb1, 0xbf, 0x25, - 0x8f, 0x54, 0x4b, 0x77, 0xa8, 0x3b, 0xfa, 0x9f, 0xd9, 0x75, 0xce, 0x07, 0x7e, 0xd3, 0x1b, 0xa9, - 0xa9, 0xc5, 0xb9, 0xf5, 0x25, 0xcf, 0x8f, 0x7f, 0x33, 0x01, 0x27, 0x03, 0x7e, 0x1c, 0x40, 0x6e, - 0x77, 0xe7, 0x62, 0x67, 0x8f, 0xef, 0xe3, 0x92, 0xfa, 0x25, 0x48, 0x11, 0x7c, 0x14, 0xf3, 0x5f, - 0x75, 0x0a, 0xbf, 0xfa, 0xb5, 0x7f, 0x2a, 0x87, 0x37, 0x5b, 0xa1, 0x51, 0xa1, 0x4c, 0xca, 0xef, - 0xeb, 0xdf, 0x7e, 0x79, 0xff, 0x0b, 0xc3, 0xce, 0xad, 0x33, 0x63, 0xd4, 0x86, 0xdf, 0x3a, 0x0b, - 0x72, 0x97, 0xca, 0x00, 0x8b, 0x98, 0xbd, 0x4b, 0x1c, 0x07, 0x08, 0xc7, 0xdd, 0x2e, 0xe6, 0xf5, - 0x1a, 0xc1, 0x3e, 0xab, 0x16, 0xd7, 0xe0, 0xd8, 0x73, 0xa4, 0x6f, 0xbf, 0x7e, 0x2d, 0x02, 0xfb, - 0x31, 0xef, 0x98, 0x8d, 0xc4, 0xff, 0xe3, 0xa6, 0x38, 0x42, 0x03, 0xbe, 0x7c, 0xbc, 0x06, 0x71, - 0xdf, 0x4c, 0xd7, 0xf5, 0x62, 0x26, 0xb0, 0x58, 0x28, 0x01, 0x4a, 0xf9, 0x97, 0x25, 0x38, 0xde, - 0xd6, 0x35, 0x8f, 0xf1, 0x8b, 0x1d, 0xee, 0x10, 0xf6, 0x7d, 0xba, 0x2f, 0x78, 0x9f, 0x70, 0xb1, - 0x83, 0xb0, 0xf7, 0xc7, 0x0a, 0xcb, 0xa4, 0x08, 0x49, 0xfb, 0x34, 0x1c, 0x0d, 0x0b, 0x2b, 0xcc, - 0x74, 0x2f, 0x8c, 0x84, 0x13, 0x53, 0x6e, 0xae, 0xe1, 0x50, 0x6a, 0x2a, 0x57, 0xa3, 0x76, 0xf6, - 0x74, 0xad, 0x40, 0xd6, 0x43, 0xe5, 0xf9, 0x64, 0xdf, 0xaa, 0xfa, 0x94, 0xf2, 0x87, 0x25, 0x98, - 0x0e, 0xf7, 0xe0, 0xef, 0x50, 0x9d, 0x83, 0x09, 0x7b, 0xcb, 0x86, 0xf8, 0x0d, 0x09, 0xee, 0xea, - 0x21, 0x13, 0x37, 0xc0, 0xcb, 0x30, 0x11, 0x28, 0xd1, 0x8b, 0x10, 0x2e, 0x86, 0xfd, 0x74, 0xfc, - 0xbb, 0x05, 0x2f, 0x69, 0xba, 0x83, 0x18, 0xe5, 0x73, 0x7f, 0x30, 0x35, 0xde, 0xfe, 0xcc, 0x51, - 0xc6, 0xdb, 0xcb, 0xea, 0xb7, 0xd0, 0x3f, 0x5e, 0x93, 0xe0, 0x81, 0xb0, 0xaa, 0x1d, 0xde, 0x9b, - 0xff, 0xa8, 0xc6, 0xe1, 0xdf, 0x4b, 0x70, 0xba, 0x1f, 0xe1, 0xbc, 0xfc, 0x76, 0xdc, 0x7f, 0x51, - 0x16, 0x1d, 0x8f, 0x07, 0x0f, 0x70, 0xc2, 0x80, 0x7b, 0x29, 0xf2, 0xb8, 0xdd, 0x06, 0xc3, 0x5b, - 0x7c, 0x62, 0x05, 0x87, 0xdc, 0x33, 0x72, 0x78, 0xf7, 0x29, 0x8c, 0x1c, 0xda, 0x7f, 0x76, 0x18, - 0x8b, 0x44, 0x87, 0xb1, 0x08, 0xec, 0x0f, 0xaf, 0xf0, 0xb8, 0xd5, 0xe1, 0xe5, 0xd8, 0xdb, 0x60, - 0xbc, 0x83, 0x2b, 0xf3, 0x59, 0x7d, 0x00, 0x4f, 0x56, 0x50, 0xbb, 0xb3, 0xca, 0xfb, 0x30, 0x45, - 0xfb, 0xed, 0x60, 0xe8, 0xdb, 0xad, 0x72, 0x93, 0xc7, 0x96, 0x8e, 0x5d, 0x73, 0xdd, 0x97, 0x60, - 0x80, 0x8d, 0x33, 0x57, 0xf7, 0x10, 0x8e, 0xc2, 0x19, 0xc8, 0x1f, 0x17, 0xb1, 0x6c, 0x41, 0x88, - 0xdd, 0x79, 0x0e, 0xf5, 0xa3, 0xeb, 0x2d, 0x9a, 0x43, 0x01, 0x63, 0x7c, 0x43, 0x44, 0xb5, 0xce, - 0xd2, 0x71, 0x73, 0x68, 0xb7, 0x2c, 0xaa, 0x31, 0xdb, 0xdc, 0xde, 0xf0, 0xf5, 0x8b, 0x22, 0x7c, - 0x79, 0x3a, 0xc5, 0x84, 0xaf, 0x1f, 0x8d, 0xe9, 0xbd, 0x40, 0x16, 0x23, 0xe6, 0x5f, 0xc4, 0x40, - 0xf6, 0x5d, 0x09, 0x4e, 0x50, 0xdd, 0x82, 0x6f, 0x5c, 0x0f, 0x6a, 0xf2, 0x87, 0x00, 0x39, 0xb6, - 0x56, 0xed, 0x38, 0xbb, 0xf3, 0x8e, 0xad, 0x5d, 0x0e, 0xad, 0x2f, 0x0f, 0x01, 0xaa, 0x39, 0x6e, - 0x14, 0x9b, 0x1d, 0x5f, 0xcf, 0xd7, 0x1c, 0xf7, 0x72, 0x8f, 0xd5, 0x28, 0x75, 0x0b, 0x86, 0xf3, - 0xeb, 0x12, 0x14, 0x3b, 0xa9, 0xcc, 0x87, 0x4f, 0x87, 0x63, 0xa1, 0xb7, 0xf7, 0xd1, 0x11, 0x7c, - 0xa8, 0x9f, 0x77, 0xd6, 0x91, 0x69, 0x74, 0xd4, 0xc6, 0xb7, 0x3b, 0x0f, 0x98, 0x0a, 0x7b, 0x68, - 0x7b, 0x66, 0xfd, 0x23, 0x9b, 0x3e, 0x5f, 0x6c, 0x8b, 0xab, 0x7f, 0x21, 0x72, 0xef, 0x6b, 0x30, - 0xd9, 0x45, 0xea, 0xdb, 0xbd, 0xee, 0xed, 0x76, 0x1d, 0xcc, 0x5b, 0x9d, 0xbe, 0x3f, 0xce, 0x67, - 0x42, 0xf8, 0x6a, 0x54, 0x60, 0x2f, 0xd6, 0xe9, 0x6e, 0xb5, 0xfc, 0x16, 0xb8, 0xa3, 0x23, 0x15, - 0x97, 0xad, 0x04, 0xa9, 0x5d, 0xdd, 0x71, 0xb9, 0x58, 0xf7, 0x75, 0x13, 0x2b, 0x42, 0x4d, 0x69, - 0x64, 0x04, 0x79, 0xca, 0x7a, 0xdd, 0x34, 0x1b, 0x5c, 0x0c, 0xf9, 0x12, 0x8c, 0x05, 0x60, 0xbc, - 0x93, 0x73, 0x90, 0xb2, 0x4c, 0xfe, 0xdd, 0xa0, 0xa1, 0x33, 0x27, 0xbb, 0x75, 0x42, 0x68, 0xb8, - 0xda, 0x14, 0x5f, 0x9e, 0x00, 0xc4, 0x98, 0xd1, 0xc3, 0x5d, 0xa2, 0x8b, 0x0d, 0x18, 0x0f, 0x41, - 0x79, 0x27, 0x6f, 0x82, 0x01, 0x8b, 0x42, 0xbc, 0x4b, 0xb0, 0xdd, 0xba, 0xa1, 0x58, 0xde, 0x97, - 0x58, 0x68, 0xeb, 0xcc, 0xb7, 0x8f, 0x42, 0x9a, 0x72, 0x45, 0x1f, 0x93, 0x00, 0x02, 0x47, 0xb5, - 0x66, 0xba, 0xb1, 0xe9, 0xbc, 0x27, 0x2e, 0xce, 0xf6, 0x8d, 0xcf, 0x73, 0xb6, 0xd3, 0xef, 0xfe, - 0x37, 0xdf, 0xfa, 0x48, 0xe2, 0x1e, 0x24, 0xcf, 0x76, 0xd9, 0x8d, 0x07, 0xe6, 0xcb, 0x67, 0x43, - 0x1f, 0xa5, 0x79, 0xb8, 0xbf, 0xae, 0x84, 0x64, 0x33, 0xfd, 0xa2, 0x73, 0xc1, 0xce, 0x53, 0xc1, - 0xce, 0xa2, 0xc7, 0xe2, 0x05, 0x9b, 0x7d, 0x47, 0x78, 0xd2, 0xbc, 0x0b, 0xfd, 0xae, 0x04, 0x13, - 0x9d, 0xb6, 0x74, 0xe8, 0xc9, 0xfe, 0xa4, 0x68, 0x4f, 0x29, 0x8a, 0x4f, 0x1d, 0x82, 0x92, 0xab, - 0xb2, 0x48, 0x55, 0x99, 0x43, 0xcf, 0x1c, 0x42, 0x95, 0xd9, 0xc0, 0xba, 0x83, 0xfe, 0x97, 0x04, - 0x77, 0xf6, 0xdc, 0x21, 0xa1, 0xb9, 0xfe, 0xa4, 0xec, 0x91, 0x3b, 0x15, 0xcb, 0x3f, 0x08, 0x0b, - 0xae, 0xf1, 0x73, 0x54, 0xe3, 0x4b, 0x68, 0xe9, 0x30, 0x1a, 0xfb, 0x19, 0x51, 0x50, 0xf7, 0xdf, - 0x0e, 0x1f, 0xf9, 0xef, 0xed, 0x4e, 0x6d, 0x1b, 0x8f, 0x98, 0x89, 0xd1, 0x9e, 0xd4, 0xca, 0x2f, - 0x50, 0x15, 0x14, 0xb4, 0xfe, 0x03, 0x0e, 0xda, 0xec, 0x3b, 0xc2, 0x81, 0xff, 0x5d, 0xe8, 0x7f, - 0x4a, 0x9d, 0x4f, 0xf0, 0x3f, 0xd1, 0x53, 0xc4, 0xee, 0x9b, 0xaa, 0xe2, 0x93, 0x07, 0x27, 0xe4, - 0x4a, 0x36, 0xa9, 0x92, 0x75, 0x84, 0x6f, 0xb5, 0x92, 0x1d, 0x07, 0x11, 0x7d, 0x55, 0x82, 0x89, - 0x4e, 0x7b, 0x92, 0x98, 0x69, 0xd9, 0x63, 0x93, 0x15, 0x33, 0x2d, 0x7b, 0x6d, 0x80, 0xe4, 0x37, - 0x51, 0xe5, 0xcf, 0xa1, 0xc7, 0xbb, 0x29, 0xdf, 0x73, 0x14, 0xc9, 0x5c, 0xec, 0x99, 0xe4, 0xc7, - 0xcc, 0xc5, 0x7e, 0xf6, 0x31, 0x31, 0x73, 0xb1, 0xaf, 0x3d, 0x46, 0xfc, 0x5c, 0xf4, 0x34, 0xeb, - 0x73, 0x18, 0x1d, 0xf4, 0x9b, 0x12, 0x0c, 0x87, 0x32, 0x62, 0xf4, 0x68, 0x4f, 0x41, 0x3b, 0x6d, - 0x18, 0xba, 0xbf, 0xd8, 0xec, 0x9e, 0x70, 0xcb, 0x4b, 0x54, 0x97, 0x79, 0x34, 0x77, 0x18, 0x5d, - 0xec, 0x90, 0xc4, 0x5f, 0x97, 0x60, 0xbc, 0x43, 0x96, 0x19, 0x33, 0x0b, 0xbb, 0x27, 0xcd, 0xc5, - 0x27, 0x0f, 0x4e, 0xc8, 0xb5, 0xba, 0x40, 0xb5, 0xfa, 0x09, 0xf4, 0xf4, 0x61, 0xb4, 0x0a, 0xac, - 0xcf, 0x37, 0xfc, 0x03, 0xd1, 0x81, 0x7e, 0xd0, 0xb9, 0x03, 0x0a, 0x26, 0x14, 0x7a, 0xe2, 0xc0, - 0x74, 0x5c, 0x9f, 0xe7, 0xa9, 0x3e, 0xcf, 0xa1, 0xb5, 0x1f, 0x4c, 0x9f, 0xf6, 0x65, 0xfd, 0x0b, - 0xed, 0x57, 0xf3, 0x7b, 0x7b, 0x51, 0xc7, 0x64, 0xb5, 0xf8, 0xd8, 0x81, 0x68, 0xb8, 0x52, 0x4f, - 0x52, 0xa5, 0xce, 0xa0, 0x47, 0xba, 0x29, 0x15, 0x38, 0xf5, 0xae, 0x1b, 0x3b, 0xe6, 0xec, 0x3b, - 0x58, 0x0a, 0xfc, 0x2e, 0xf4, 0x53, 0xe2, 0xc4, 0xf1, 0xa9, 0x9e, 0xfd, 0x06, 0xf2, 0xd8, 0xe2, - 0x03, 0x7d, 0x60, 0x72, 0xb9, 0xee, 0xa1, 0x72, 0x4d, 0xa2, 0x93, 0xdd, 0xe4, 0x22, 0xb9, 0x2c, - 0xfa, 0x80, 0xe4, 0x5d, 0x52, 0x38, 0xdd, 0x9b, 0x77, 0x30, 0xd9, 0xed, 0x7e, 0xd0, 0xa1, 0x43, - 0x0a, 0x2c, 0xdf, 0x47, 0x25, 0x99, 0x46, 0x93, 0x5d, 0x25, 0x61, 0xa9, 0xef, 0xad, 0x3e, 0x39, - 0xf0, 0x27, 0x83, 0x5d, 0x3f, 0x5e, 0x51, 0xc7, 0x06, 0x76, 0x74, 0xe7, 0x50, 0x1f, 0xaf, 0xe8, - 0xef, 0xf5, 0xd4, 0xef, 0xa6, 0x21, 0xb7, 0xc8, 0x7a, 0xd9, 0x70, 0x55, 0xf7, 0x07, 0xdc, 0x08, - 0x20, 0x87, 0x7f, 0x93, 0x8d, 0x7d, 0x2a, 0xd2, 0xff, 0xf8, 0x61, 0xee, 0x40, 0xd7, 0xb6, 0xd9, - 0x21, 0x41, 0x7e, 0x43, 0x3a, 0xca, 0x4f, 0x66, 0x9f, 0x77, 0xa3, 0x67, 0x17, 0xd8, 0x47, 0x1e, - 0xdf, 0x2b, 0xc1, 0x51, 0x8a, 0xe5, 0xcf, 0x37, 0x8a, 0x29, 0xee, 0xec, 0x75, 0xf5, 0x98, 0x65, - 0x35, 0x50, 0x82, 0x61, 0x9f, 0x65, 0xbc, 0x87, 0xdf, 0x67, 0x39, 0x19, 0xe8, 0x3c, 0xca, 0x56, - 0x56, 0xc6, 0x1b, 0x6d, 0x94, 0x4e, 0x64, 0x5f, 0x9f, 0x3a, 0xfc, 0xbe, 0xfe, 0x59, 0x18, 0x0a, - 0x44, 0xfa, 0x42, 0x3a, 0xe6, 0x9a, 0x69, 0xb4, 0x88, 0x16, 0x24, 0x46, 0xef, 0x93, 0xe0, 0x68, - 0xc7, 0x45, 0x90, 0xfe, 0xaf, 0xda, 0x03, 0x16, 0xe9, 0x22, 0xc6, 0xe9, 0xc8, 0x57, 0x56, 0x26, - 0x5a, 0x9d, 0xb2, 0x89, 0x75, 0x18, 0x0e, 0x2d, 0x60, 0x05, 0xf1, 0x1f, 0xa7, 0xfb, 0xbf, 0x61, - 0x11, 0x66, 0x80, 0x8a, 0x90, 0xc1, 0xd7, 0x2c, 0xd3, 0x76, 0x71, 0x8d, 0x1e, 0x79, 0xc8, 0x28, - 0x5e, 0x5b, 0x5e, 0x05, 0xd4, 0x3e, 0xb8, 0xd1, 0xef, 0x90, 0x66, 0xfd, 0xef, 0x90, 0x4e, 0x40, - 0x3a, 0xf8, 0xa5, 0x4e, 0xd6, 0xf0, 0xeb, 0x14, 0xb7, 0x7a, 0xce, 0xff, 0xdf, 0x00, 0x00, 0x00, - 0xff, 0xff, 0x01, 0xf6, 0xec, 0xd9, 0x42, 0x94, 0x00, 0x00, + 0x06, 0x1d, 0x6c, 0x5f, 0xd1, 0x35, 0x5c, 0x18, 0xa0, 0x0c, 0xee, 0x6f, 0x63, 0xb0, 0xc1, 0xda, + 0xa3, 0x3c, 0x04, 0x1d, 0x9a, 0x87, 0x2c, 0xbe, 0xe6, 0x62, 0xc3, 0xd1, 0x4d, 0xa3, 0x30, 0x48, + 0x99, 0xdc, 0xdb, 0x61, 0x14, 0x71, 0xa3, 0x16, 0x65, 0xe1, 0xd3, 0xa1, 0x73, 0x30, 0x68, 0x5a, + 0xae, 0x6e, 0x1a, 0x4e, 0x21, 0x33, 0x2d, 0x9d, 0x1a, 0x3a, 0x73, 0xb2, 0xa3, 0x23, 0xac, 0x31, + 0x1c, 0x45, 0x20, 0xa3, 0x25, 0xc8, 0x3b, 0x66, 0xcb, 0xd6, 0x70, 0x55, 0x33, 0x6b, 0xb8, 0xaa, + 0x1b, 0x3b, 0x66, 0x21, 0x4b, 0x19, 0x4c, 0xb5, 0x2b, 0x42, 0x11, 0xe7, 0xcd, 0x1a, 0x5e, 0x32, + 0x76, 0x4c, 0x65, 0xc4, 0x09, 0x3d, 0xa3, 0x63, 0x30, 0xe0, 0xec, 0x1b, 0xae, 0x7a, 0xad, 0x90, + 0xa3, 0x1e, 0xc2, 0x9f, 0xe4, 0xdf, 0x18, 0x80, 0xd1, 0x7e, 0x5c, 0xec, 0x3c, 0xa4, 0x77, 0x88, + 0x96, 0x85, 0xc4, 0x41, 0x6c, 0xc0, 0x68, 0xc2, 0x46, 0x1c, 0x38, 0xa4, 0x11, 0xe7, 0x60, 0xc8, + 0xc0, 0x8e, 0x8b, 0x6b, 0xcc, 0x23, 0x92, 0x7d, 0xfa, 0x14, 0x30, 0xa2, 0x76, 0x97, 0x4a, 0x1d, + 0xca, 0xa5, 0x5e, 0x80, 0x51, 0x4f, 0xa4, 0xaa, 0xad, 0x1a, 0x75, 0xe1, 0x9b, 0xb3, 0x71, 0x92, + 0xcc, 0x54, 0x04, 0x9d, 0x42, 0xc8, 0x94, 0x11, 0x1c, 0x7a, 0x46, 0x0b, 0x00, 0xa6, 0x81, 0xcd, + 0x9d, 0x6a, 0x0d, 0x6b, 0x8d, 0x42, 0xa6, 0x8b, 0x95, 0xd6, 0x08, 0x4a, 0x9b, 0x95, 0x4c, 0x06, + 0xd5, 0x1a, 0xe8, 0x29, 0xdf, 0xd5, 0x06, 0xbb, 0x78, 0xca, 0x0a, 0x9b, 0x64, 0x6d, 0xde, 0xb6, + 0x05, 0x23, 0x36, 0x26, 0x7e, 0x8f, 0x6b, 0x5c, 0xb3, 0x2c, 0x15, 0x62, 0x26, 0x56, 0x33, 0x85, + 0x93, 0x31, 0xc5, 0x86, 0xed, 0xe0, 0x23, 0xba, 0x1b, 0x3c, 0x40, 0x95, 0xba, 0x15, 0xd0, 0x28, + 0x94, 0x13, 0xc0, 0x55, 0xb5, 0x89, 0x8b, 0x2f, 0xc3, 0x48, 0xd8, 0x3c, 0x68, 0x02, 0xd2, 0x8e, + 0xab, 0xda, 0x2e, 0xf5, 0xc2, 0xb4, 0xc2, 0x1e, 0x50, 0x1e, 0x92, 0xd8, 0xa8, 0xd1, 0x28, 0x97, + 0x56, 0xc8, 0x4f, 0xf4, 0x13, 0xbe, 0xc2, 0x49, 0xaa, 0xf0, 0x7d, 0xed, 0x23, 0x1a, 0xe2, 0x1c, + 0xd5, 0xbb, 0xf8, 0x04, 0x0c, 0x87, 0x14, 0xe8, 0xb7, 0x6b, 0xf9, 0x9d, 0x70, 0xb4, 0x23, 0x6b, + 0xf4, 0x02, 0x4c, 0xb4, 0x0c, 0xdd, 0x70, 0xb1, 0x6d, 0xd9, 0x98, 0x78, 0x2c, 0xeb, 0xaa, 0xf0, + 0x9f, 0x07, 0xbb, 0xf8, 0xdc, 0x56, 0x10, 0x9b, 0x71, 0x51, 0xc6, 0x5b, 0xed, 0xc0, 0xd3, 0xd9, + 0xcc, 0x1b, 0x83, 0xf9, 0x57, 0x5e, 0x79, 0xe5, 0x95, 0x84, 0xfc, 0xe5, 0x01, 0x98, 0xe8, 0x34, + 0x67, 0x3a, 0x4e, 0xdf, 0x63, 0x30, 0x60, 0xb4, 0x9a, 0xdb, 0xd8, 0xa6, 0x46, 0x4a, 0x2b, 0xfc, + 0x09, 0xcd, 0x41, 0xba, 0xa1, 0x6e, 0xe3, 0x46, 0x21, 0x35, 0x2d, 0x9d, 0x1a, 0x39, 0xf3, 0x60, + 0x5f, 0xb3, 0x72, 0x66, 0x99, 0x90, 0x28, 0x8c, 0x12, 0x3d, 0x0d, 0x29, 0x1e, 0xa2, 0x09, 0x87, + 0xd3, 0xfd, 0x71, 0x20, 0x73, 0x49, 0xa1, 0x74, 0xe8, 0x0e, 0xc8, 0x92, 0xbf, 0xcc, 0x37, 0x06, + 0xa8, 0xcc, 0x19, 0x02, 0x20, 0x7e, 0x81, 0x8a, 0x90, 0xa1, 0xd3, 0xa4, 0x86, 0xc5, 0xd2, 0xe6, + 0x3d, 0x13, 0xc7, 0xaa, 0xe1, 0x1d, 0xb5, 0xd5, 0x70, 0xab, 0x57, 0xd4, 0x46, 0x0b, 0x53, 0x87, + 0xcf, 0x2a, 0x39, 0x0e, 0xbc, 0x4c, 0x60, 0x68, 0x0a, 0x86, 0xd8, 0xac, 0xd2, 0x8d, 0x1a, 0xbe, + 0x46, 0xa3, 0x67, 0x5a, 0x61, 0x13, 0x6d, 0x89, 0x40, 0x48, 0xf7, 0x2f, 0x3a, 0xa6, 0x21, 0x5c, + 0x93, 0x76, 0x41, 0x00, 0xb4, 0xfb, 0x27, 0xa2, 0x81, 0xfb, 0xce, 0xce, 0xea, 0xb5, 0xcd, 0xa5, + 0xfb, 0x61, 0x94, 0x62, 0x3c, 0xc6, 0x87, 0x5e, 0x6d, 0x14, 0xc6, 0xa6, 0xa5, 0x53, 0x19, 0x65, + 0x84, 0x81, 0xd7, 0x38, 0x54, 0xfe, 0x62, 0x02, 0x52, 0x34, 0xb0, 0x8c, 0xc2, 0xd0, 0xe6, 0x5b, + 0xd6, 0x2b, 0xd5, 0x85, 0xb5, 0xad, 0xf2, 0x72, 0x25, 0x2f, 0xa1, 0x11, 0x00, 0x0a, 0xb8, 0xb0, + 0xbc, 0x36, 0xb7, 0x99, 0x4f, 0x78, 0xcf, 0x4b, 0xab, 0x9b, 0xe7, 0x1e, 0xcf, 0x27, 0x3d, 0x82, + 0x2d, 0x06, 0x48, 0x05, 0x11, 0x1e, 0x3b, 0x93, 0x4f, 0xa3, 0x3c, 0xe4, 0x18, 0x83, 0xa5, 0x17, + 0x2a, 0x0b, 0xe7, 0x1e, 0xcf, 0x0f, 0x84, 0x21, 0x8f, 0x9d, 0xc9, 0x0f, 0xa2, 0x61, 0xc8, 0x52, + 0x48, 0x79, 0x6d, 0x6d, 0x39, 0x9f, 0xf1, 0x78, 0x6e, 0x6c, 0x2a, 0x4b, 0xab, 0x8b, 0xf9, 0xac, + 0xc7, 0x73, 0x51, 0x59, 0xdb, 0x5a, 0xcf, 0x83, 0xc7, 0x61, 0xa5, 0xb2, 0xb1, 0x31, 0xb7, 0x58, + 0xc9, 0x0f, 0x79, 0x18, 0xe5, 0xb7, 0x6c, 0x56, 0x36, 0xf2, 0xb9, 0x90, 0x58, 0x8f, 0x9d, 0xc9, + 0x0f, 0x7b, 0x5d, 0x54, 0x56, 0xb7, 0x56, 0xf2, 0x23, 0x68, 0x0c, 0x86, 0x59, 0x17, 0x42, 0x88, + 0xd1, 0x08, 0xe8, 0xdc, 0xe3, 0xf9, 0xbc, 0x2f, 0x08, 0xe3, 0x32, 0x16, 0x02, 0x9c, 0x7b, 0x3c, + 0x8f, 0xe4, 0x79, 0x48, 0x53, 0x37, 0x44, 0x08, 0x46, 0x96, 0xe7, 0xca, 0x95, 0xe5, 0xea, 0xda, + 0xfa, 0xe6, 0xd2, 0xda, 0xea, 0xdc, 0x72, 0x5e, 0xf2, 0x61, 0x4a, 0xe5, 0xb9, 0xad, 0x25, 0xa5, + 0xb2, 0x90, 0x4f, 0x04, 0x61, 0xeb, 0x95, 0xb9, 0xcd, 0xca, 0x42, 0x3e, 0x29, 0x6b, 0x30, 0xd1, + 0x29, 0xa0, 0x76, 0x9c, 0x42, 0x01, 0x5f, 0x48, 0x74, 0xf1, 0x05, 0xca, 0x2b, 0xea, 0x0b, 0xf2, + 0x37, 0x13, 0x30, 0xde, 0x61, 0x51, 0xe9, 0xd8, 0xc9, 0x33, 0x90, 0x66, 0xbe, 0xcc, 0x96, 0xd9, + 0x07, 0x3a, 0xae, 0x4e, 0xd4, 0xb3, 0xdb, 0x96, 0x5a, 0x4a, 0x17, 0x4c, 0x35, 0x92, 0x5d, 0x52, + 0x0d, 0xc2, 0xa2, 0xcd, 0x61, 0x7f, 0xb2, 0x2d, 0xf8, 0xb3, 0xf5, 0xf1, 0x5c, 0x3f, 0xeb, 0x23, + 0x85, 0x1d, 0x6c, 0x11, 0x48, 0x77, 0x58, 0x04, 0xce, 0xc3, 0x58, 0x1b, 0xa3, 0xbe, 0x83, 0xf1, + 0x7b, 0x24, 0x28, 0x74, 0x33, 0x4e, 0x4c, 0x48, 0x4c, 0x84, 0x42, 0xe2, 0xf9, 0xa8, 0x05, 0xef, + 0xea, 0x3e, 0x08, 0x6d, 0x63, 0xfd, 0x19, 0x09, 0x8e, 0x75, 0x4e, 0x29, 0x3b, 0xca, 0xf0, 0x34, + 0x0c, 0x34, 0xb1, 0xbb, 0x6b, 0x8a, 0xb4, 0xea, 0xbe, 0x0e, 0x8b, 0x35, 0x69, 0x8e, 0x0e, 0x36, + 0xa7, 0x0a, 0xae, 0xf6, 0xc9, 0x6e, 0x79, 0x21, 0x93, 0xa6, 0x4d, 0xd2, 0x0f, 0x24, 0xe0, 0x68, + 0x47, 0xe6, 0x1d, 0x05, 0xbd, 0x13, 0x40, 0x37, 0xac, 0x96, 0xcb, 0x52, 0x27, 0x16, 0x89, 0xb3, + 0x14, 0x42, 0x83, 0x17, 0x89, 0xb2, 0x2d, 0xd7, 0x6b, 0x4f, 0xd2, 0x76, 0x60, 0x20, 0x8a, 0xf0, + 0xa4, 0x2f, 0x68, 0x8a, 0x0a, 0x3a, 0xd9, 0x45, 0xd3, 0x36, 0xc7, 0x7c, 0x04, 0xf2, 0x5a, 0x43, + 0xc7, 0x86, 0x5b, 0x75, 0x5c, 0x1b, 0xab, 0x4d, 0xdd, 0xa8, 0xd3, 0xa5, 0x26, 0x53, 0x4a, 0xef, + 0xa8, 0x0d, 0x07, 0x2b, 0xa3, 0xac, 0x79, 0x43, 0xb4, 0x12, 0x0a, 0xea, 0x40, 0x76, 0x80, 0x62, + 0x20, 0x44, 0xc1, 0x9a, 0x3d, 0x0a, 0xf9, 0xc3, 0x59, 0x18, 0x0a, 0x24, 0xe0, 0xe8, 0x2e, 0xc8, + 0xbd, 0xa8, 0x5e, 0x51, 0xab, 0x62, 0x53, 0xc5, 0x2c, 0x31, 0x44, 0x60, 0xeb, 0x7c, 0x63, 0xf5, + 0x08, 0x4c, 0x50, 0x14, 0xb3, 0xe5, 0x62, 0xbb, 0xaa, 0x35, 0x54, 0xc7, 0xa1, 0x46, 0xcb, 0x50, + 0x54, 0x44, 0xda, 0xd6, 0x48, 0xd3, 0xbc, 0x68, 0x41, 0x67, 0x61, 0x9c, 0x52, 0x34, 0x5b, 0x0d, + 0x57, 0xb7, 0x1a, 0xb8, 0x4a, 0xb6, 0x79, 0x0e, 0x5d, 0x72, 0x3c, 0xc9, 0xc6, 0x08, 0xc6, 0x0a, + 0x47, 0x20, 0x12, 0x39, 0x68, 0x01, 0xee, 0xa4, 0x64, 0x75, 0x6c, 0x60, 0x5b, 0x75, 0x71, 0x15, + 0xbf, 0xd4, 0x52, 0x1b, 0x4e, 0x55, 0x35, 0x6a, 0xd5, 0x5d, 0xd5, 0xd9, 0x2d, 0x4c, 0x10, 0x06, + 0xe5, 0x44, 0x41, 0x52, 0x4e, 0x10, 0xc4, 0x45, 0x8e, 0x57, 0xa1, 0x68, 0x73, 0x46, 0xed, 0xa2, + 0xea, 0xec, 0xa2, 0x12, 0x1c, 0xa3, 0x5c, 0x1c, 0xd7, 0xd6, 0x8d, 0x7a, 0x55, 0xdb, 0xc5, 0xda, + 0x5e, 0xb5, 0xe5, 0xee, 0x3c, 0x59, 0xb8, 0x23, 0xd8, 0x3f, 0x95, 0x70, 0x83, 0xe2, 0xcc, 0x13, + 0x94, 0x2d, 0x77, 0xe7, 0x49, 0xb4, 0x01, 0x39, 0x32, 0x18, 0x4d, 0xfd, 0x65, 0x5c, 0xdd, 0x31, + 0x6d, 0xba, 0x86, 0x8e, 0x74, 0x08, 0x4d, 0x01, 0x0b, 0xce, 0xac, 0x71, 0x82, 0x15, 0xb3, 0x86, + 0x4b, 0xe9, 0x8d, 0xf5, 0x4a, 0x65, 0x41, 0x19, 0x12, 0x5c, 0x2e, 0x98, 0x36, 0x71, 0xa8, 0xba, + 0xe9, 0x19, 0x78, 0x88, 0x39, 0x54, 0xdd, 0x14, 0xe6, 0x3d, 0x0b, 0xe3, 0x9a, 0xc6, 0x74, 0xd6, + 0xb5, 0x2a, 0xdf, 0x8c, 0x39, 0x85, 0x7c, 0xc8, 0x58, 0x9a, 0xb6, 0xc8, 0x10, 0xb8, 0x8f, 0x3b, + 0xe8, 0x29, 0x38, 0xea, 0x1b, 0x2b, 0x48, 0x38, 0xd6, 0xa6, 0x65, 0x94, 0xf4, 0x2c, 0x8c, 0x5b, + 0xfb, 0xed, 0x84, 0x28, 0xd4, 0xa3, 0xb5, 0x1f, 0x25, 0x7b, 0x02, 0x26, 0xac, 0x5d, 0xab, 0x9d, + 0xee, 0x74, 0x90, 0x0e, 0x59, 0xbb, 0x56, 0x94, 0xf0, 0x5e, 0xba, 0x33, 0xb7, 0xb1, 0xa6, 0xba, + 0xb8, 0x56, 0x38, 0x1e, 0x44, 0x0f, 0x34, 0xa0, 0x19, 0xc8, 0x6b, 0x5a, 0x15, 0x1b, 0xea, 0x76, + 0x03, 0x57, 0x55, 0x1b, 0x1b, 0xaa, 0x53, 0x98, 0xa2, 0xc8, 0x29, 0xd7, 0x6e, 0x61, 0x65, 0x44, + 0xd3, 0x2a, 0xb4, 0x71, 0x8e, 0xb6, 0xa1, 0xd3, 0x30, 0x66, 0x6e, 0xbf, 0xa8, 0x31, 0x8f, 0xac, + 0x5a, 0x36, 0xde, 0xd1, 0xaf, 0x15, 0xee, 0xa1, 0xe6, 0x1d, 0x25, 0x0d, 0xd4, 0x1f, 0xd7, 0x29, + 0x18, 0x3d, 0x00, 0x79, 0xcd, 0xd9, 0x55, 0x6d, 0x8b, 0x86, 0x64, 0xc7, 0x52, 0x35, 0x5c, 0xb8, + 0x97, 0xa1, 0x32, 0xf8, 0xaa, 0x00, 0x93, 0x19, 0xe1, 0x5c, 0xd5, 0x77, 0x5c, 0xc1, 0xf1, 0x7e, + 0x36, 0x23, 0x28, 0x8c, 0x73, 0x3b, 0x05, 0x79, 0x62, 0x89, 0x50, 0xc7, 0xa7, 0x28, 0xda, 0x88, + 0xb5, 0x6b, 0x05, 0xfb, 0xbd, 0x1b, 0x86, 0x09, 0xa6, 0xdf, 0xe9, 0x03, 0x2c, 0x71, 0xb3, 0x76, + 0x03, 0x3d, 0x3e, 0x0e, 0xc7, 0x08, 0x52, 0x13, 0xbb, 0x6a, 0x4d, 0x75, 0xd5, 0x00, 0xf6, 0x43, + 0x14, 0x9b, 0x98, 0x7d, 0x85, 0x37, 0x86, 0xe4, 0xb4, 0x5b, 0xdb, 0xfb, 0x9e, 0x63, 0x3d, 0xcc, + 0xe4, 0x24, 0x30, 0xe1, 0x5a, 0xb7, 0x2d, 0x39, 0x97, 0x4b, 0x90, 0x0b, 0xfa, 0x3d, 0xca, 0x02, + 0xf3, 0xfc, 0xbc, 0x44, 0x92, 0xa0, 0xf9, 0xb5, 0x05, 0x92, 0xbe, 0xbc, 0xb5, 0x92, 0x4f, 0x90, + 0x34, 0x6a, 0x79, 0x69, 0xb3, 0x52, 0x55, 0xb6, 0x56, 0x37, 0x97, 0x56, 0x2a, 0xf9, 0x64, 0x20, + 0xb1, 0x7f, 0x36, 0x95, 0xb9, 0x2f, 0x7f, 0xbf, 0xfc, 0x8d, 0x04, 0x8c, 0x84, 0x77, 0x6a, 0xe8, + 0x4d, 0x70, 0x5c, 0x94, 0x55, 0x1c, 0xec, 0x56, 0xaf, 0xea, 0x36, 0x9d, 0x90, 0x4d, 0x95, 0x2d, + 0x8e, 0x9e, 0xff, 0x4c, 0x70, 0xac, 0x0d, 0xec, 0x3e, 0xaf, 0xdb, 0x64, 0xba, 0x35, 0x55, 0x17, + 0x2d, 0xc3, 0x94, 0x61, 0x56, 0x1d, 0x57, 0x35, 0x6a, 0xaa, 0x5d, 0xab, 0xfa, 0x05, 0xad, 0xaa, + 0xaa, 0x69, 0xd8, 0x71, 0x4c, 0xb6, 0x10, 0x7a, 0x5c, 0x4e, 0x1a, 0xe6, 0x06, 0x47, 0xf6, 0x57, + 0x88, 0x39, 0x8e, 0x1a, 0x71, 0xdf, 0x64, 0x37, 0xf7, 0xbd, 0x03, 0xb2, 0x4d, 0xd5, 0xaa, 0x62, + 0xc3, 0xb5, 0xf7, 0x69, 0x7e, 0x9e, 0x51, 0x32, 0x4d, 0xd5, 0xaa, 0x90, 0xe7, 0x1f, 0xca, 0x36, + 0xe9, 0xd9, 0x54, 0x26, 0x93, 0xcf, 0x3e, 0x9b, 0xca, 0x64, 0xf3, 0x20, 0xbf, 0x9e, 0x84, 0x5c, + 0x30, 0x5f, 0x27, 0xdb, 0x1f, 0x8d, 0xae, 0x58, 0x12, 0x8d, 0x69, 0x77, 0xf7, 0xcc, 0xee, 0x67, + 0xe6, 0xc9, 0x52, 0x56, 0x1a, 0x60, 0xc9, 0xb1, 0xc2, 0x28, 0x49, 0x1a, 0x41, 0x9c, 0x0d, 0xb3, + 0x64, 0x24, 0xa3, 0xf0, 0x27, 0xb4, 0x08, 0x03, 0x2f, 0x3a, 0x94, 0xf7, 0x00, 0xe5, 0x7d, 0x4f, + 0x6f, 0xde, 0xcf, 0x6e, 0x50, 0xe6, 0xd9, 0x67, 0x37, 0xaa, 0xab, 0x6b, 0xca, 0xca, 0xdc, 0xb2, + 0xc2, 0xc9, 0xd1, 0x09, 0x48, 0x35, 0xd4, 0x97, 0xf7, 0xc3, 0x8b, 0x1e, 0x05, 0xf5, 0x3b, 0x08, + 0x27, 0x20, 0x75, 0x15, 0xab, 0x7b, 0xe1, 0xa5, 0x86, 0x82, 0x6e, 0xe3, 0x64, 0x98, 0x85, 0x34, + 0xb5, 0x17, 0x02, 0xe0, 0x16, 0xcb, 0x1f, 0x41, 0x19, 0x48, 0xcd, 0xaf, 0x29, 0x64, 0x42, 0xe4, + 0x21, 0xc7, 0xa0, 0xd5, 0xf5, 0xa5, 0xca, 0x7c, 0x25, 0x9f, 0x90, 0xcf, 0xc2, 0x00, 0x33, 0x02, + 0x99, 0x2c, 0x9e, 0x19, 0xf2, 0x47, 0xf8, 0x23, 0xe7, 0x21, 0x89, 0xd6, 0xad, 0x95, 0x72, 0x45, + 0xc9, 0x27, 0xc2, 0x43, 0x9d, 0xca, 0xa7, 0x65, 0x07, 0x72, 0xc1, 0x3c, 0xfc, 0x87, 0xb3, 0x19, + 0xff, 0x92, 0x04, 0x43, 0x81, 0xbc, 0x9a, 0x24, 0x44, 0x6a, 0xa3, 0x61, 0x5e, 0xad, 0xaa, 0x0d, + 0x5d, 0x75, 0xb8, 0x6b, 0x00, 0x05, 0xcd, 0x11, 0x48, 0xbf, 0x43, 0xf7, 0x43, 0x9a, 0x22, 0xe9, + 0xfc, 0x80, 0xfc, 0x09, 0x09, 0xf2, 0xd1, 0xc4, 0x36, 0x22, 0xa6, 0xf4, 0xa3, 0x14, 0x53, 0xfe, + 0xb8, 0x04, 0x23, 0xe1, 0x6c, 0x36, 0x22, 0xde, 0x5d, 0x3f, 0x52, 0xf1, 0xfe, 0x20, 0x01, 0xc3, + 0xa1, 0x1c, 0xb6, 0x5f, 0xe9, 0x5e, 0x82, 0x31, 0xbd, 0x86, 0x9b, 0x96, 0xe9, 0x62, 0x43, 0xdb, + 0xaf, 0x36, 0xf0, 0x15, 0xdc, 0x28, 0xc8, 0x34, 0x68, 0xcc, 0xf6, 0xce, 0x92, 0x67, 0x96, 0x7c, + 0xba, 0x65, 0x42, 0x56, 0x1a, 0x5f, 0x5a, 0xa8, 0xac, 0xac, 0xaf, 0x6d, 0x56, 0x56, 0xe7, 0xdf, + 0x52, 0xdd, 0x5a, 0xbd, 0xb4, 0xba, 0xf6, 0xfc, 0xaa, 0x92, 0xd7, 0x23, 0x68, 0xb7, 0x71, 0xda, + 0xaf, 0x43, 0x3e, 0x2a, 0x14, 0x3a, 0x0e, 0x9d, 0xc4, 0xca, 0x1f, 0x41, 0xe3, 0x30, 0xba, 0xba, + 0x56, 0xdd, 0x58, 0x5a, 0xa8, 0x54, 0x2b, 0x17, 0x2e, 0x54, 0xe6, 0x37, 0x37, 0x58, 0xdd, 0xc3, + 0xc3, 0xde, 0x0c, 0x4d, 0x70, 0xf9, 0xb5, 0x24, 0x8c, 0x77, 0x90, 0x04, 0xcd, 0xf1, 0x1d, 0x0b, + 0xdb, 0x44, 0x3d, 0xdc, 0x8f, 0xf4, 0x33, 0x24, 0x67, 0x58, 0x57, 0x6d, 0x97, 0x6f, 0x70, 0x1e, + 0x00, 0x62, 0x25, 0xc3, 0xd5, 0x77, 0x74, 0x6c, 0xf3, 0x7a, 0x12, 0xdb, 0xc6, 0x8c, 0xfa, 0x70, + 0x56, 0x52, 0x7a, 0x08, 0x90, 0x65, 0x3a, 0xba, 0xab, 0x5f, 0xc1, 0x55, 0xdd, 0x10, 0xc5, 0x27, + 0xb2, 0xad, 0x49, 0x29, 0x79, 0xd1, 0xb2, 0x64, 0xb8, 0x1e, 0xb6, 0x81, 0xeb, 0x6a, 0x04, 0x9b, + 0x04, 0xf3, 0xa4, 0x92, 0x17, 0x2d, 0x1e, 0xf6, 0x5d, 0x90, 0xab, 0x99, 0x2d, 0x92, 0xeb, 0x31, + 0x3c, 0xb2, 0x76, 0x48, 0xca, 0x10, 0x83, 0x79, 0x28, 0x3c, 0x8b, 0xf7, 0xab, 0x5e, 0x39, 0x65, + 0x88, 0xc1, 0x18, 0xca, 0xfd, 0x30, 0xaa, 0xd6, 0xeb, 0x36, 0x61, 0x2e, 0x18, 0xb1, 0x7d, 0xc9, + 0x88, 0x07, 0xa6, 0x88, 0xc5, 0x67, 0x21, 0x23, 0xec, 0x40, 0x96, 0x6a, 0x62, 0x89, 0xaa, 0xc5, + 0x36, 0xdb, 0x89, 0x53, 0x59, 0x25, 0x63, 0x88, 0xc6, 0xbb, 0x20, 0xa7, 0x3b, 0x55, 0xbf, 0x88, + 0x9f, 0x98, 0x4e, 0x9c, 0xca, 0x28, 0x43, 0xba, 0xe3, 0x15, 0x40, 0xe5, 0xcf, 0x24, 0x60, 0x24, + 0xfc, 0x12, 0x02, 0x2d, 0x40, 0xa6, 0x61, 0x6a, 0x2a, 0x75, 0x2d, 0xf6, 0x06, 0xec, 0x54, 0xcc, + 0x7b, 0x8b, 0x99, 0x65, 0x8e, 0xaf, 0x78, 0x94, 0xc5, 0xdf, 0x96, 0x20, 0x23, 0xc0, 0xe8, 0x18, + 0xa4, 0x2c, 0xd5, 0xdd, 0xa5, 0xec, 0xd2, 0xe5, 0x44, 0x5e, 0x52, 0xe8, 0x33, 0x81, 0x3b, 0x96, + 0x6a, 0x50, 0x17, 0xe0, 0x70, 0xf2, 0x4c, 0xc6, 0xb5, 0x81, 0xd5, 0x1a, 0xdd, 0xf4, 0x98, 0xcd, + 0x26, 0x36, 0x5c, 0x47, 0x8c, 0x2b, 0x87, 0xcf, 0x73, 0x30, 0x7a, 0x10, 0xc6, 0x5c, 0x5b, 0xd5, + 0x1b, 0x21, 0xdc, 0x14, 0xc5, 0xcd, 0x8b, 0x06, 0x0f, 0xb9, 0x04, 0x27, 0x04, 0xdf, 0x1a, 0x76, + 0x55, 0x6d, 0x17, 0xd7, 0x7c, 0xa2, 0x01, 0x5a, 0xdc, 0x38, 0xce, 0x11, 0x16, 0x78, 0xbb, 0xa0, + 0x95, 0xbf, 0x21, 0xc1, 0x98, 0xd8, 0xa6, 0xd5, 0x3c, 0x63, 0xad, 0x00, 0xa8, 0x86, 0x61, 0xba, + 0x41, 0x73, 0xb5, 0xbb, 0x72, 0x1b, 0xdd, 0xcc, 0x9c, 0x47, 0xa4, 0x04, 0x18, 0x14, 0x9b, 0x00, + 0x7e, 0x4b, 0x57, 0xb3, 0x4d, 0xc1, 0x10, 0x7f, 0xc3, 0x44, 0x5f, 0x53, 0xb2, 0x8d, 0x3d, 0x30, + 0x10, 0xd9, 0xcf, 0xa1, 0x09, 0x48, 0x6f, 0xe3, 0xba, 0x6e, 0xf0, 0xba, 0x31, 0x7b, 0x10, 0xe5, + 0x97, 0x94, 0x57, 0x7e, 0x29, 0x7f, 0x50, 0x82, 0x71, 0xcd, 0x6c, 0x46, 0xe5, 0x2d, 0xe7, 0x23, + 0xd5, 0x05, 0xe7, 0xa2, 0xf4, 0xd6, 0xa7, 0xeb, 0xba, 0xbb, 0xdb, 0xda, 0x9e, 0xd1, 0xcc, 0xe6, + 0x6c, 0xdd, 0x6c, 0xa8, 0x46, 0xdd, 0x7f, 0xcf, 0x4a, 0x7f, 0x68, 0x0f, 0xd7, 0xb1, 0xf1, 0x70, + 0xdd, 0x0c, 0xbc, 0x75, 0x3d, 0xef, 0xff, 0xfc, 0x33, 0x49, 0xfa, 0x85, 0x44, 0x72, 0x71, 0xbd, + 0xfc, 0xd9, 0x44, 0x71, 0x91, 0x75, 0xb7, 0x2e, 0xcc, 0xa3, 0xe0, 0x9d, 0x06, 0xd6, 0x88, 0xca, + 0xf0, 0xed, 0x07, 0x61, 0xa2, 0x6e, 0xd6, 0x4d, 0xca, 0x71, 0x96, 0xfc, 0xe2, 0x6f, 0x6e, 0xb3, + 0x1e, 0xb4, 0x18, 0xfb, 0x9a, 0xb7, 0xb4, 0x0a, 0xe3, 0x1c, 0xb9, 0x4a, 0x5f, 0x1d, 0xb1, 0x8d, + 0x0d, 0xea, 0x59, 0x55, 0x2b, 0xfc, 0xda, 0xb7, 0xe8, 0x82, 0xae, 0x8c, 0x71, 0x52, 0xd2, 0xc6, + 0xf6, 0x3e, 0x25, 0x05, 0x8e, 0x86, 0xf8, 0xb1, 0x69, 0x8b, 0xed, 0x18, 0x8e, 0xbf, 0xc9, 0x39, + 0x8e, 0x07, 0x38, 0x6e, 0x70, 0xd2, 0xd2, 0x3c, 0x0c, 0x1f, 0x84, 0xd7, 0xbf, 0xe4, 0xbc, 0x72, + 0x38, 0xc8, 0x64, 0x11, 0x46, 0x29, 0x13, 0xad, 0xe5, 0xb8, 0x66, 0x93, 0xc6, 0xc4, 0xde, 0x6c, + 0x7e, 0xeb, 0x5b, 0x6c, 0x1e, 0x8d, 0x10, 0xb2, 0x79, 0x8f, 0xaa, 0x54, 0x02, 0xfa, 0xb6, 0xac, + 0x86, 0xb5, 0x46, 0x0c, 0x87, 0xaf, 0x70, 0x41, 0x3c, 0xfc, 0xd2, 0x65, 0x98, 0x20, 0xbf, 0x69, + 0xc8, 0x0a, 0x4a, 0x12, 0x5f, 0x82, 0x2b, 0x7c, 0xe3, 0x3d, 0x6c, 0xaa, 0x8e, 0x7b, 0x0c, 0x02, + 0x32, 0x05, 0x46, 0xb1, 0x8e, 0x5d, 0x17, 0xdb, 0x4e, 0x55, 0x6d, 0x74, 0x12, 0x2f, 0x50, 0xc3, + 0x28, 0x7c, 0xec, 0x3b, 0xe1, 0x51, 0x5c, 0x64, 0x94, 0x73, 0x8d, 0x46, 0x69, 0x0b, 0x8e, 0x77, + 0xf0, 0x8a, 0x3e, 0x78, 0xbe, 0xc6, 0x79, 0x4e, 0xb4, 0x79, 0x06, 0x61, 0xbb, 0x0e, 0x02, 0xee, + 0x8d, 0x65, 0x1f, 0x3c, 0x7f, 0x9e, 0xf3, 0x44, 0x9c, 0x56, 0x0c, 0x29, 0xe1, 0xf8, 0x2c, 0x8c, + 0x5d, 0xc1, 0xf6, 0xb6, 0xe9, 0xf0, 0xba, 0x51, 0x1f, 0xec, 0x3e, 0xce, 0xd9, 0x8d, 0x72, 0x42, + 0x5a, 0x48, 0x22, 0xbc, 0x9e, 0x82, 0xcc, 0x8e, 0xaa, 0xe1, 0x3e, 0x58, 0x5c, 0xe7, 0x2c, 0x06, + 0x09, 0x3e, 0x21, 0x9d, 0x83, 0x5c, 0xdd, 0xe4, 0xab, 0x56, 0x3c, 0xf9, 0x27, 0x38, 0xf9, 0x90, + 0xa0, 0xe1, 0x2c, 0x2c, 0xd3, 0x6a, 0x35, 0xc8, 0x92, 0x16, 0xcf, 0xe2, 0x6f, 0x0a, 0x16, 0x82, + 0x86, 0xb3, 0x38, 0x80, 0x59, 0x3f, 0x29, 0x58, 0x38, 0x01, 0x7b, 0x3e, 0x03, 0x43, 0xa6, 0xd1, + 0xd8, 0x37, 0x8d, 0x7e, 0x84, 0xf8, 0x14, 0xe7, 0x00, 0x9c, 0x84, 0x30, 0x38, 0x0f, 0xd9, 0x7e, + 0x07, 0xe2, 0x6f, 0x7d, 0x47, 0x4c, 0x0f, 0x31, 0x02, 0x8b, 0x30, 0x2a, 0x02, 0x94, 0x6e, 0x1a, + 0x7d, 0xb0, 0xf8, 0xdb, 0x9c, 0xc5, 0x48, 0x80, 0x8c, 0xab, 0xe1, 0x62, 0xc7, 0xad, 0xe3, 0x7e, + 0x98, 0x7c, 0x46, 0xa8, 0xc1, 0x49, 0xb8, 0x29, 0xb7, 0xb1, 0xa1, 0xed, 0xf6, 0xc7, 0xe1, 0x97, + 0x84, 0x29, 0x05, 0x0d, 0x61, 0x31, 0x0f, 0xc3, 0x4d, 0xd5, 0x76, 0x76, 0xd5, 0x46, 0x5f, 0xc3, + 0xf1, 0x77, 0x38, 0x8f, 0x9c, 0x47, 0xc4, 0x2d, 0xd2, 0x32, 0x0e, 0xc2, 0xe6, 0xb3, 0xc2, 0x22, + 0x01, 0x32, 0x3e, 0xf5, 0x1c, 0x97, 0x16, 0xd9, 0x0e, 0xc2, 0xed, 0x97, 0xc5, 0xd4, 0x63, 0xb4, + 0x2b, 0x41, 0x8e, 0xe7, 0x21, 0xeb, 0xe8, 0x2f, 0xf7, 0xc5, 0xe6, 0x73, 0x62, 0xa4, 0x29, 0x01, + 0x21, 0x7e, 0x0b, 0x9c, 0xe8, 0xb8, 0x4c, 0xf4, 0xc1, 0xec, 0xef, 0x72, 0x66, 0xc7, 0x3a, 0x2c, + 0x15, 0x3c, 0x24, 0x1c, 0x94, 0xe5, 0xdf, 0x13, 0x21, 0x01, 0x47, 0x78, 0xad, 0x93, 0x7d, 0x84, + 0xa3, 0xee, 0x1c, 0xcc, 0x6a, 0xbf, 0x22, 0xac, 0xc6, 0x68, 0x43, 0x56, 0xdb, 0x84, 0x63, 0x9c, + 0xe3, 0xc1, 0xc6, 0xf5, 0x57, 0x45, 0x60, 0x65, 0xd4, 0x5b, 0xe1, 0xd1, 0x7d, 0x1b, 0x14, 0x3d, + 0x73, 0x8a, 0x84, 0xd5, 0xa9, 0x36, 0x55, 0xab, 0x0f, 0xce, 0xbf, 0xc6, 0x39, 0x8b, 0x88, 0xef, + 0x65, 0xbc, 0xce, 0x8a, 0x6a, 0x11, 0xe6, 0x2f, 0x40, 0x41, 0x30, 0x6f, 0x19, 0x36, 0xd6, 0xcc, + 0xba, 0xa1, 0xbf, 0x8c, 0x6b, 0x7d, 0xb0, 0xfe, 0xf5, 0xc8, 0x50, 0x6d, 0x05, 0xc8, 0x09, 0xe7, + 0x25, 0xc8, 0x7b, 0xb9, 0x4a, 0x55, 0x6f, 0x5a, 0xa6, 0xed, 0xc6, 0x70, 0xfc, 0xbc, 0x18, 0x29, + 0x8f, 0x6e, 0x89, 0x92, 0x95, 0x2a, 0xc0, 0xde, 0x3c, 0xf7, 0xeb, 0x92, 0x5f, 0xe0, 0x8c, 0x86, + 0x7d, 0x2a, 0x1e, 0x38, 0x34, 0xb3, 0x69, 0xa9, 0x76, 0x3f, 0xf1, 0xef, 0xef, 0x8b, 0xc0, 0xc1, + 0x49, 0x78, 0xe0, 0x70, 0xf7, 0x2d, 0x4c, 0x56, 0xfb, 0x3e, 0x38, 0x7c, 0x51, 0x04, 0x0e, 0x41, + 0xc3, 0x59, 0x88, 0x84, 0xa1, 0x0f, 0x16, 0xff, 0x40, 0xb0, 0x10, 0x34, 0x84, 0xc5, 0x73, 0xfe, + 0x42, 0x6b, 0xe3, 0xba, 0xee, 0xb8, 0x36, 0x4b, 0x93, 0x7b, 0xb3, 0xfa, 0x87, 0xdf, 0x09, 0x27, + 0x61, 0x4a, 0x80, 0x94, 0x44, 0x22, 0x5e, 0x76, 0xa5, 0xbb, 0xa8, 0x78, 0xc1, 0x7e, 0x43, 0x44, + 0xa2, 0x00, 0x19, 0x91, 0x2d, 0x90, 0x21, 0x12, 0xb3, 0x6b, 0x64, 0xef, 0xd0, 0x07, 0xbb, 0x7f, + 0x14, 0x11, 0x6e, 0x43, 0xd0, 0x12, 0x9e, 0x81, 0xfc, 0xa7, 0x65, 0xec, 0xe1, 0xfd, 0xbe, 0xbc, + 0xf3, 0x1f, 0x47, 0xf2, 0x9f, 0x2d, 0x46, 0xc9, 0x62, 0xc8, 0x68, 0x24, 0x9f, 0x42, 0x71, 0xe7, + 0x8c, 0x0a, 0x3f, 0xf5, 0x3d, 0xae, 0x6f, 0x38, 0x9d, 0x2a, 0x2d, 0x13, 0x27, 0x0f, 0x27, 0x3d, + 0xf1, 0xcc, 0xde, 0xf3, 0x3d, 0xcf, 0xcf, 0x43, 0x39, 0x4f, 0xe9, 0x02, 0x0c, 0x87, 0x12, 0x9e, + 0x78, 0x56, 0xef, 0xe5, 0xac, 0x72, 0xc1, 0x7c, 0xa7, 0x74, 0x16, 0x52, 0x24, 0x79, 0x89, 0x27, + 0xff, 0xcb, 0x9c, 0x9c, 0xa2, 0x97, 0xde, 0x0c, 0x19, 0x91, 0xb4, 0xc4, 0x93, 0xbe, 0x8f, 0x93, + 0x7a, 0x24, 0x84, 0x5c, 0x24, 0x2c, 0xf1, 0xe4, 0x7f, 0x45, 0x90, 0x0b, 0x12, 0x42, 0xde, 0xbf, + 0x09, 0xbf, 0xf4, 0xd3, 0x29, 0xbe, 0xe8, 0x08, 0xdb, 0x9d, 0x87, 0x41, 0x9e, 0xa9, 0xc4, 0x53, + 0x7f, 0x80, 0x77, 0x2e, 0x28, 0x4a, 0x4f, 0x40, 0xba, 0x4f, 0x83, 0xff, 0x0c, 0x27, 0x65, 0xf8, + 0xa5, 0x79, 0x18, 0x0a, 0x64, 0x27, 0xf1, 0xe4, 0x7f, 0x8d, 0x93, 0x07, 0xa9, 0x88, 0xe8, 0x3c, + 0x3b, 0x89, 0x67, 0xf0, 0x41, 0x21, 0x3a, 0xa7, 0x20, 0x66, 0x13, 0x89, 0x49, 0x3c, 0xf5, 0x87, + 0x84, 0xd5, 0x05, 0x49, 0xe9, 0x19, 0xc8, 0x7a, 0x8b, 0x4d, 0x3c, 0xfd, 0x87, 0x39, 0xbd, 0x4f, + 0x43, 0x2c, 0x10, 0x58, 0xec, 0xe2, 0x59, 0xfc, 0x75, 0x61, 0x81, 0x00, 0x15, 0x99, 0x46, 0xd1, + 0x04, 0x26, 0x9e, 0xd3, 0x47, 0xc4, 0x34, 0x8a, 0xe4, 0x2f, 0x64, 0x34, 0x69, 0xcc, 0x8f, 0x67, + 0xf1, 0xb3, 0x62, 0x34, 0x29, 0x3e, 0x11, 0x23, 0x9a, 0x11, 0xc4, 0xf3, 0xf8, 0x1b, 0x42, 0x8c, + 0x48, 0x42, 0x50, 0x5a, 0x07, 0xd4, 0x9e, 0x0d, 0xc4, 0xf3, 0xfb, 0x28, 0xe7, 0x37, 0xd6, 0x96, + 0x0c, 0x94, 0x9e, 0x87, 0x63, 0x9d, 0x33, 0x81, 0x78, 0xae, 0x1f, 0xfb, 0x5e, 0x64, 0xef, 0x16, + 0x4c, 0x04, 0x4a, 0x9b, 0xfe, 0x92, 0x12, 0xcc, 0x02, 0xe2, 0xd9, 0xbe, 0xf6, 0xbd, 0x70, 0xe0, + 0x0e, 0x26, 0x01, 0xa5, 0x39, 0x00, 0x7f, 0x01, 0x8e, 0xe7, 0xf5, 0x71, 0xce, 0x2b, 0x40, 0x44, + 0xa6, 0x06, 0x5f, 0x7f, 0xe3, 0xe9, 0xaf, 0x8b, 0xa9, 0xc1, 0x29, 0xc8, 0xd4, 0x10, 0x4b, 0x6f, + 0x3c, 0xf5, 0x27, 0xc4, 0xd4, 0x10, 0x24, 0xc4, 0xb3, 0x03, 0xab, 0x5b, 0x3c, 0x87, 0x4f, 0x09, + 0xcf, 0x0e, 0x50, 0x95, 0x56, 0x61, 0xac, 0x6d, 0x41, 0x8c, 0x67, 0xf5, 0x0b, 0x9c, 0x55, 0x3e, + 0xba, 0x1e, 0x06, 0x17, 0x2f, 0xbe, 0x18, 0xc6, 0x73, 0xfb, 0x74, 0x64, 0xf1, 0xe2, 0x6b, 0x61, + 0xe9, 0x3c, 0x64, 0x8c, 0x56, 0xa3, 0x41, 0x26, 0x0f, 0xea, 0x7d, 0x36, 0xb0, 0xf0, 0x5f, 0xbe, + 0xcf, 0xad, 0x23, 0x08, 0x4a, 0x67, 0x21, 0x8d, 0x9b, 0xdb, 0xb8, 0x16, 0x47, 0xf9, 0xed, 0xef, + 0x8b, 0x80, 0x49, 0xb0, 0x4b, 0xcf, 0x00, 0xb0, 0xd2, 0x08, 0x7d, 0x3d, 0x18, 0x43, 0xfb, 0x5f, + 0xbf, 0xcf, 0x0f, 0xe3, 0xf8, 0x24, 0x3e, 0x03, 0x76, 0xb4, 0xa7, 0x37, 0x83, 0xef, 0x84, 0x19, + 0xd0, 0x11, 0x79, 0x0a, 0x06, 0x5f, 0x74, 0x4c, 0xc3, 0x55, 0xeb, 0x71, 0xd4, 0xff, 0x8d, 0x53, + 0x0b, 0x7c, 0x62, 0xb0, 0xa6, 0x69, 0x63, 0x57, 0xad, 0x3b, 0x71, 0xb4, 0xff, 0x9d, 0xd3, 0x7a, + 0x04, 0x84, 0x58, 0x53, 0x1d, 0xb7, 0x1f, 0xbd, 0xff, 0x48, 0x10, 0x0b, 0x02, 0x22, 0x34, 0xf9, + 0xbd, 0x87, 0xf7, 0xe3, 0x68, 0xbf, 0x2b, 0x84, 0xe6, 0xf8, 0xa5, 0x37, 0x43, 0x96, 0xfc, 0x64, + 0x27, 0xec, 0x62, 0x88, 0xff, 0x98, 0x13, 0xfb, 0x14, 0xa4, 0x67, 0xc7, 0xad, 0xb9, 0x7a, 0xbc, + 0xb1, 0x6f, 0xf2, 0x91, 0x16, 0xf8, 0xa5, 0x39, 0x18, 0x72, 0xdc, 0x5a, 0xad, 0xc5, 0xf3, 0xd3, + 0x18, 0xf2, 0x3f, 0xf9, 0xbe, 0x57, 0xb2, 0xf0, 0x68, 0xc8, 0x68, 0x5f, 0xdd, 0x73, 0x2d, 0x93, + 0xbe, 0x02, 0x89, 0xe3, 0xf0, 0x3d, 0xce, 0x21, 0x40, 0x52, 0x9a, 0x87, 0x1c, 0xd1, 0xc5, 0xc6, + 0x16, 0xa6, 0xef, 0xab, 0x62, 0x58, 0xfc, 0x29, 0x37, 0x40, 0x88, 0xa8, 0xfc, 0x93, 0x5f, 0x79, + 0x7d, 0x52, 0xfa, 0xfa, 0xeb, 0x93, 0xd2, 0x1f, 0xbc, 0x3e, 0x29, 0x7d, 0xe8, 0x9b, 0x93, 0x47, + 0xbe, 0xfe, 0xcd, 0xc9, 0x23, 0xbf, 0xfb, 0xcd, 0xc9, 0x23, 0x9d, 0xcb, 0xc6, 0xb0, 0x68, 0x2e, + 0x9a, 0xac, 0x60, 0xfc, 0x56, 0x39, 0x54, 0x2e, 0xae, 0x9b, 0x7e, 0xb5, 0xd6, 0xdb, 0xe4, 0xc0, + 0x9f, 0x4a, 0x64, 0xc3, 0x1c, 0xae, 0xe5, 0xaa, 0xc6, 0x7e, 0x97, 0xbb, 0x3a, 0xc5, 0x8e, 0x85, + 0x61, 0xf9, 0x4d, 0x90, 0x9c, 0x33, 0xf6, 0xd1, 0x09, 0x16, 0xf3, 0xaa, 0x2d, 0xbb, 0xc1, 0x4f, + 0x7e, 0x0d, 0x92, 0xe7, 0x2d, 0xbb, 0x81, 0x26, 0xfc, 0xe3, 0x99, 0xd2, 0xa9, 0x1c, 0x3f, 0x73, + 0x59, 0x4a, 0x7d, 0xf7, 0x53, 0x53, 0x47, 0xca, 0x7b, 0x51, 0x0d, 0xbf, 0x14, 0xab, 0x65, 0x66, + 0xce, 0xd8, 0xa7, 0x4a, 0xae, 0x4b, 0x6f, 0x4d, 0x93, 0x3e, 0x1c, 0x51, 0xd8, 0x9e, 0x8c, 0x16, + 0xb6, 0x9f, 0xc7, 0x8d, 0xc6, 0x25, 0xc3, 0xbc, 0x6a, 0x6c, 0x12, 0xb4, 0xed, 0x01, 0x76, 0x8c, + 0x18, 0x3e, 0x94, 0x80, 0xa9, 0xa8, 0xde, 0xc4, 0x71, 0x1c, 0x57, 0x6d, 0x5a, 0xdd, 0x6e, 0x2a, + 0x9d, 0x87, 0xec, 0xa6, 0xc0, 0x41, 0x05, 0x18, 0x74, 0xb0, 0x66, 0x1a, 0x35, 0x87, 0x2a, 0x9b, + 0x54, 0xc4, 0x23, 0x51, 0xd6, 0x50, 0x0d, 0xd3, 0xe1, 0xe7, 0x23, 0xd9, 0x43, 0xf9, 0xe7, 0xa4, + 0x83, 0x8d, 0xe4, 0x88, 0xd7, 0x95, 0xd0, 0xf4, 0xc1, 0x5e, 0xe5, 0x7f, 0x6a, 0x05, 0x5f, 0x85, + 0x40, 0xad, 0xbf, 0x5f, 0x93, 0xbc, 0x3b, 0x09, 0x27, 0x34, 0xd3, 0x69, 0x9a, 0x4e, 0x95, 0x8d, + 0x30, 0x7b, 0xe0, 0xc6, 0xc8, 0x05, 0x9b, 0xfa, 0xa8, 0xff, 0x5f, 0x84, 0x11, 0x3a, 0x0b, 0x68, + 0xe5, 0x93, 0x06, 0x9e, 0xd8, 0xb5, 0xe2, 0xab, 0xff, 0x36, 0x4d, 0xbd, 0x66, 0xd8, 0x23, 0xa4, + 0x47, 0x3b, 0x36, 0x61, 0x42, 0x6f, 0x5a, 0x0d, 0x4c, 0xdf, 0x01, 0x55, 0xbd, 0xb6, 0x78, 0x7e, + 0x5f, 0xe3, 0xfc, 0xc6, 0x7d, 0xf2, 0x25, 0x41, 0x5d, 0x5a, 0x86, 0x31, 0x55, 0xd3, 0xb0, 0x15, + 0x62, 0x19, 0x33, 0x43, 0x85, 0x80, 0x79, 0x4e, 0xe9, 0x71, 0x2b, 0x3f, 0xd3, 0x6d, 0x6c, 0xdf, + 0x7a, 0x6f, 0x60, 0xd0, 0x6c, 0x5c, 0xc7, 0xc6, 0xc3, 0x06, 0x76, 0xaf, 0x9a, 0xf6, 0x1e, 0x37, + 0xef, 0xc3, 0xac, 0x2b, 0x31, 0x08, 0xef, 0x4d, 0xc2, 0x24, 0x6b, 0x98, 0xdd, 0x56, 0x1d, 0x3c, + 0x7b, 0xe5, 0xd1, 0x6d, 0xec, 0xaa, 0x8f, 0xce, 0x6a, 0xa6, 0x6e, 0xf0, 0x91, 0x18, 0xe7, 0xe3, + 0x42, 0xda, 0x67, 0x78, 0x7b, 0x97, 0x89, 0xb9, 0x08, 0xa9, 0x79, 0x53, 0x37, 0x88, 0x47, 0xd6, + 0xb0, 0x61, 0x36, 0xf9, 0xb4, 0x64, 0x0f, 0xe8, 0x6e, 0x18, 0x50, 0x9b, 0x66, 0xcb, 0x70, 0xd9, + 0xeb, 0xab, 0xf2, 0xd0, 0x57, 0x6e, 0x4c, 0x1d, 0xf9, 0xbd, 0x1b, 0x53, 0xc9, 0x25, 0xc3, 0x55, + 0x78, 0x53, 0x29, 0xf5, 0xc6, 0x27, 0xa7, 0x24, 0xf9, 0x59, 0x18, 0x5c, 0xc0, 0xda, 0x61, 0x78, + 0x2d, 0x60, 0x2d, 0xc2, 0xeb, 0x01, 0xc8, 0x2c, 0x19, 0x2e, 0x3b, 0x32, 0x7b, 0x27, 0x24, 0x75, + 0x83, 0x9d, 0xc2, 0x8a, 0xf4, 0x4f, 0xe0, 0x04, 0x75, 0x01, 0x6b, 0x1e, 0x6a, 0x0d, 0x6b, 0x51, + 0x54, 0xc2, 0x9e, 0xc0, 0xcb, 0x0b, 0xbf, 0xfb, 0x9f, 0x26, 0x8f, 0xbc, 0xf2, 0xfa, 0xe4, 0x91, + 0xae, 0x23, 0x11, 0x0c, 0x87, 0xdc, 0xc4, 0x7c, 0x08, 0x9c, 0xda, 0xde, 0xac, 0x1b, 0x9a, 0x0b, + 0x7f, 0x35, 0x01, 0x93, 0x6d, 0x2e, 0xce, 0x17, 0x86, 0x6e, 0xd1, 0xa1, 0x04, 0x99, 0x05, 0xb1, + 0xde, 0x1c, 0x34, 0x38, 0xfc, 0xec, 0x01, 0x83, 0xc3, 0xb0, 0xe8, 0x49, 0xc4, 0x86, 0xd3, 0xf1, + 0xb1, 0x41, 0xc8, 0x7f, 0x88, 0xd0, 0xf0, 0xd9, 0x14, 0xdc, 0x49, 0x2f, 0x8f, 0xd8, 0x4d, 0xdd, + 0x70, 0x67, 0x35, 0x7b, 0xdf, 0x72, 0xe9, 0x72, 0x62, 0xee, 0x70, 0x6b, 0x8c, 0xf9, 0xcd, 0x33, + 0xac, 0xb9, 0x8b, 0x4b, 0xee, 0x40, 0x7a, 0x9d, 0xd0, 0x11, 0x43, 0xb8, 0xa6, 0xab, 0x36, 0xb8, + 0x81, 0xd8, 0x03, 0x81, 0xb2, 0x0b, 0x27, 0x09, 0x06, 0xd5, 0xc5, 0x5d, 0x93, 0x06, 0x56, 0x77, + 0xd8, 0xb9, 0xdd, 0x24, 0x5d, 0x42, 0x32, 0x04, 0x40, 0x8f, 0xe8, 0x4e, 0x40, 0x5a, 0x6d, 0xb1, + 0x57, 0xce, 0x49, 0xb2, 0xb6, 0xd0, 0x07, 0xf9, 0x12, 0x0c, 0xf2, 0xd7, 0x5c, 0x28, 0x0f, 0xc9, + 0x3d, 0xbc, 0x4f, 0xfb, 0xc9, 0x29, 0xe4, 0x27, 0x9a, 0x81, 0x34, 0x15, 0x9e, 0x5f, 0x48, 0x28, + 0xcc, 0xb4, 0x49, 0x3f, 0x43, 0x85, 0x54, 0x18, 0x9a, 0xfc, 0x2c, 0x64, 0x16, 0xcc, 0xa6, 0x6e, + 0x98, 0x61, 0x6e, 0x59, 0xc6, 0x8d, 0xca, 0x6c, 0xb5, 0xb8, 0xeb, 0x2b, 0xec, 0x01, 0x1d, 0x83, + 0x01, 0x76, 0x8e, 0x9b, 0xbf, 0x36, 0xe7, 0x4f, 0xf2, 0x3c, 0x0c, 0x52, 0xde, 0x6b, 0x16, 0x42, + 0xfc, 0x06, 0x10, 0x3f, 0x30, 0x4e, 0xa3, 0x24, 0x67, 0x9f, 0xf0, 0x85, 0x45, 0x90, 0xaa, 0xa9, + 0xae, 0xca, 0xf5, 0xa6, 0xbf, 0xe5, 0xa7, 0x21, 0xc3, 0x99, 0x38, 0xe8, 0x0c, 0x24, 0x4d, 0xcb, + 0xe1, 0x2f, 0xbe, 0x8b, 0xdd, 0x54, 0x59, 0xb3, 0xca, 0x29, 0x32, 0x69, 0x14, 0x82, 0x5c, 0x56, + 0xba, 0xce, 0x92, 0x27, 0x03, 0x8e, 0x14, 0x18, 0xf2, 0xc0, 0x4f, 0x36, 0xa4, 0x6d, 0xee, 0xe0, + 0x39, 0xcb, 0xa7, 0x12, 0x30, 0x19, 0x68, 0xbd, 0x82, 0x6d, 0xb2, 0xd7, 0x63, 0x13, 0x8c, 0x7b, + 0x0b, 0x0a, 0x08, 0xc9, 0xdb, 0xbb, 0xb8, 0xcb, 0x9b, 0x21, 0x39, 0x67, 0x59, 0xa8, 0x08, 0x19, + 0xf6, 0x82, 0xdb, 0x64, 0xfe, 0x92, 0x52, 0xbc, 0x67, 0xd2, 0xe6, 0x98, 0x3b, 0xee, 0x55, 0xd5, + 0xf6, 0xae, 0x3a, 0x89, 0x67, 0xf9, 0x29, 0xc8, 0xce, 0x9b, 0x86, 0x83, 0x0d, 0xa7, 0x45, 0xa7, + 0xde, 0x76, 0xc3, 0xd4, 0xf6, 0x38, 0x07, 0xf6, 0x40, 0x0c, 0xae, 0x5a, 0x16, 0xa5, 0x4c, 0x29, + 0xe4, 0x27, 0x0b, 0x53, 0xe5, 0x8d, 0xae, 0x26, 0x7a, 0xea, 0xe0, 0x26, 0xe2, 0x4a, 0x7a, 0x36, + 0xfa, 0xdf, 0x12, 0x9c, 0x6c, 0x9f, 0x50, 0x7b, 0x78, 0xdf, 0x39, 0xe8, 0x7c, 0x7a, 0x01, 0xb2, + 0xeb, 0xf4, 0xbe, 0xf1, 0x25, 0xbc, 0x8f, 0x8a, 0x30, 0x88, 0x6b, 0x67, 0xce, 0x9e, 0x7d, 0xf4, + 0x29, 0xe6, 0xed, 0x17, 0x8f, 0x28, 0x02, 0x80, 0x26, 0x21, 0xeb, 0x60, 0xcd, 0x3a, 0x73, 0xf6, + 0xdc, 0xde, 0xa3, 0xcc, 0xbd, 0x2e, 0x1e, 0x51, 0x7c, 0x50, 0x29, 0x43, 0xb4, 0x7e, 0xe3, 0x53, + 0x53, 0x52, 0x39, 0x0d, 0x49, 0xa7, 0xd5, 0xbc, 0xad, 0x3e, 0xf2, 0x5a, 0x1a, 0xa6, 0x83, 0x94, + 0x34, 0x40, 0x5d, 0x51, 0x1b, 0x7a, 0x4d, 0xf5, 0x6f, 0x8a, 0xe7, 0x03, 0x36, 0xa0, 0x18, 0x9d, + 0x4d, 0x50, 0xec, 0x69, 0x49, 0xf9, 0xd7, 0x25, 0xc8, 0x5d, 0x16, 0x9c, 0x37, 0xb0, 0x8b, 0xce, + 0x03, 0x78, 0x3d, 0x89, 0x69, 0x73, 0xc7, 0x4c, 0xb4, 0xaf, 0x19, 0x8f, 0x46, 0x09, 0xa0, 0xa3, + 0x27, 0xa8, 0x23, 0x5a, 0xa6, 0xc3, 0xaf, 0xbf, 0xc4, 0x90, 0x7a, 0xc8, 0xe8, 0x21, 0x40, 0x34, + 0xc2, 0x55, 0xaf, 0x98, 0xae, 0x6e, 0xd4, 0xab, 0x96, 0x79, 0x95, 0x5f, 0x2a, 0x4c, 0x2a, 0x79, + 0xda, 0x72, 0x99, 0x36, 0xac, 0x13, 0x38, 0x11, 0x3a, 0xeb, 0x71, 0x21, 0xab, 0x89, 0x5a, 0xab, + 0xd9, 0xd8, 0x71, 0x78, 0x10, 0x13, 0x8f, 0xe8, 0x3c, 0x0c, 0x5a, 0xad, 0xed, 0xaa, 0x88, 0x18, + 0x43, 0x67, 0x4e, 0x76, 0x9a, 0xff, 0xc2, 0x3f, 0x78, 0x04, 0x18, 0xb0, 0x5a, 0xdb, 0xc4, 0x5b, + 0xee, 0x82, 0x5c, 0x07, 0x61, 0x86, 0xae, 0xf8, 0x72, 0xd0, 0x6b, 0xee, 0x5c, 0x83, 0xaa, 0x65, + 0xeb, 0xa6, 0xad, 0xbb, 0xfb, 0xf4, 0xf4, 0x4a, 0x52, 0xc9, 0x8b, 0x86, 0x75, 0x0e, 0x97, 0xf7, + 0x60, 0x74, 0x83, 0xa6, 0x5a, 0xbe, 0xe4, 0x67, 0x7d, 0xf9, 0xa4, 0x78, 0xf9, 0xba, 0x4a, 0x96, + 0x68, 0x93, 0xac, 0xfc, 0x5c, 0x57, 0xef, 0x7c, 0xe2, 0xe0, 0xde, 0x19, 0x5e, 0xfc, 0xff, 0xe8, + 0x44, 0x68, 0x72, 0xf2, 0xcc, 0x3a, 0x10, 0xbe, 0xfa, 0x75, 0xcc, 0xb8, 0x1d, 0x46, 0xb1, 0xf7, + 0xa2, 0x5a, 0x8c, 0x09, 0xa3, 0xc5, 0xd8, 0x29, 0x24, 0x3f, 0x05, 0xc3, 0xeb, 0xaa, 0xed, 0x6e, + 0x60, 0xf7, 0x22, 0x56, 0x6b, 0xd8, 0x0e, 0xaf, 0xba, 0xc3, 0x62, 0xd5, 0x45, 0x90, 0xa2, 0x4b, + 0x2b, 0x5b, 0x75, 0xe8, 0x6f, 0x79, 0x17, 0x52, 0xf4, 0x04, 0x9b, 0xb7, 0x22, 0x73, 0x0a, 0xb6, + 0x22, 0x93, 0x58, 0xba, 0xef, 0x62, 0x47, 0x6c, 0xe8, 0xe8, 0x03, 0x7a, 0x5c, 0xac, 0xab, 0xc9, + 0xde, 0xeb, 0x2a, 0x77, 0x44, 0xbe, 0xba, 0x36, 0x60, 0xb0, 0x4c, 0x42, 0xf1, 0xd2, 0x82, 0x27, + 0x88, 0xe4, 0x0b, 0x82, 0x56, 0x60, 0xd4, 0x52, 0x6d, 0x97, 0x1e, 0xdd, 0xdf, 0xa5, 0x5a, 0x70, + 0x5f, 0x9f, 0x6a, 0x9f, 0x79, 0x21, 0x65, 0x79, 0x2f, 0xc3, 0x56, 0x10, 0x28, 0xff, 0x61, 0x0a, + 0x06, 0xb8, 0x31, 0xde, 0x0c, 0x83, 0xdc, 0xac, 0xdc, 0x3b, 0xef, 0x9c, 0x69, 0x5f, 0x98, 0x66, + 0xbc, 0x05, 0x84, 0xf3, 0x13, 0x34, 0xe8, 0x3e, 0xc8, 0x68, 0xbb, 0xaa, 0x6e, 0x54, 0xf5, 0x9a, + 0xc8, 0x7a, 0x5f, 0xbf, 0x31, 0x35, 0x38, 0x4f, 0x60, 0x4b, 0x0b, 0xca, 0x20, 0x6d, 0x5c, 0xaa, + 0x91, 0x4c, 0x60, 0x17, 0xeb, 0xf5, 0x5d, 0x97, 0xcf, 0x30, 0xfe, 0x84, 0x9e, 0x84, 0x14, 0x71, + 0x08, 0x7e, 0xb1, 0xab, 0xd8, 0xb6, 0xf7, 0xf0, 0x36, 0x80, 0xe5, 0x0c, 0xe9, 0xf8, 0x43, 0xbf, + 0x3f, 0x25, 0x29, 0x94, 0x02, 0xcd, 0xc3, 0x70, 0x43, 0x75, 0xdc, 0x2a, 0x5d, 0xc1, 0x48, 0xf7, + 0x69, 0xca, 0xe2, 0x44, 0xbb, 0x41, 0xb8, 0x61, 0xb9, 0xe8, 0x43, 0x84, 0x8a, 0x81, 0x6a, 0xe8, + 0x14, 0xe4, 0x29, 0x13, 0xcd, 0x6c, 0x36, 0x75, 0x97, 0xe5, 0x56, 0x03, 0xd4, 0xee, 0x23, 0x04, + 0x3e, 0x4f, 0xc1, 0x34, 0xc3, 0xba, 0x03, 0xb2, 0xf4, 0x2a, 0x09, 0x45, 0x61, 0xc7, 0x26, 0x33, + 0x04, 0x40, 0x1b, 0xef, 0x87, 0x51, 0x3f, 0x3e, 0x32, 0x94, 0x0c, 0xe3, 0xe2, 0x83, 0x29, 0xe2, + 0x23, 0x30, 0x61, 0xe0, 0x6b, 0xf4, 0x20, 0x67, 0x08, 0x3b, 0x4b, 0xb1, 0x11, 0x69, 0xbb, 0x1c, + 0xa6, 0xb8, 0x17, 0x46, 0x34, 0x61, 0x7c, 0x86, 0x0b, 0x14, 0x77, 0xd8, 0x83, 0x52, 0xb4, 0x13, + 0x90, 0x51, 0x2d, 0x8b, 0x21, 0x0c, 0xf1, 0xf8, 0x68, 0x59, 0xb4, 0xe9, 0x34, 0x8c, 0x51, 0x1d, + 0x6d, 0xec, 0xb4, 0x1a, 0x2e, 0x67, 0x92, 0xa3, 0x38, 0xa3, 0xa4, 0x41, 0x61, 0x70, 0x8a, 0x7b, + 0x37, 0x0c, 0xe3, 0x2b, 0x7a, 0x0d, 0x1b, 0x1a, 0x66, 0x78, 0xc3, 0x14, 0x2f, 0x27, 0x80, 0x14, + 0xe9, 0x01, 0xf0, 0xe2, 0x5e, 0x55, 0xc4, 0xe4, 0x11, 0xc6, 0x4f, 0xc0, 0xe7, 0x18, 0x58, 0x2e, + 0x40, 0x6a, 0x41, 0x75, 0x55, 0x92, 0x60, 0xb8, 0xd7, 0xd8, 0x42, 0x93, 0x53, 0xc8, 0x4f, 0xf9, + 0x8d, 0x04, 0xa4, 0x2e, 0x9b, 0x2e, 0x46, 0x8f, 0x05, 0x12, 0xc0, 0x91, 0x4e, 0xfe, 0xbc, 0xa1, + 0xd7, 0x0d, 0x5c, 0x5b, 0x71, 0xea, 0x81, 0x7b, 0xdf, 0xbe, 0x3b, 0x25, 0x42, 0xee, 0x34, 0x01, + 0x69, 0xdb, 0x6c, 0x19, 0x35, 0x71, 0xe2, 0x90, 0x3e, 0xa0, 0x0a, 0x64, 0x3c, 0x2f, 0x49, 0xc5, + 0x79, 0xc9, 0x28, 0xf1, 0x12, 0xe2, 0xc3, 0x1c, 0xa0, 0x0c, 0x6e, 0x73, 0x67, 0x29, 0x43, 0xd6, + 0x0b, 0x5e, 0xdc, 0xdb, 0xfa, 0x73, 0x58, 0x9f, 0x8c, 0x2c, 0x26, 0xde, 0xd8, 0x7b, 0xc6, 0x63, + 0x1e, 0x97, 0xf7, 0x1a, 0xb8, 0xf5, 0x42, 0x6e, 0xc5, 0xef, 0xa0, 0x0f, 0x52, 0xbd, 0x7c, 0xb7, + 0x62, 0xf7, 0xd0, 0x4f, 0x42, 0xd6, 0xd1, 0xeb, 0x86, 0xea, 0xb6, 0x6c, 0xcc, 0x3d, 0xcf, 0x07, + 0xc8, 0x5f, 0x92, 0x60, 0x80, 0x79, 0x72, 0xc0, 0x6e, 0x52, 0x67, 0xbb, 0x25, 0xba, 0xd9, 0x2d, + 0x79, 0x78, 0xbb, 0xcd, 0x01, 0x78, 0xc2, 0x38, 0xfc, 0x6a, 0x70, 0x87, 0x8c, 0x81, 0x89, 0xb8, + 0xa1, 0xd7, 0xf9, 0x44, 0x0d, 0x10, 0xc9, 0xff, 0x51, 0x22, 0x49, 0x2c, 0x6f, 0x47, 0x73, 0x30, + 0x2c, 0xe4, 0xaa, 0xee, 0x34, 0xd4, 0x3a, 0xf7, 0x9d, 0x3b, 0xbb, 0x0a, 0x77, 0xa1, 0xa1, 0xd6, + 0x95, 0x21, 0x2e, 0x0f, 0x79, 0xe8, 0x3c, 0x0e, 0x89, 0x2e, 0xe3, 0x10, 0x1a, 0xf8, 0xe4, 0xe1, + 0x06, 0x3e, 0x34, 0x44, 0xa9, 0xe8, 0x10, 0x7d, 0x3e, 0x41, 0x37, 0x33, 0x96, 0xe9, 0xa8, 0x8d, + 0x1f, 0xc6, 0x8c, 0xb8, 0x03, 0xb2, 0x96, 0xd9, 0xa8, 0xb2, 0x16, 0x76, 0x12, 0x37, 0x63, 0x99, + 0x0d, 0xa5, 0x6d, 0xd8, 0xd3, 0xb7, 0x68, 0xba, 0x0c, 0xdc, 0x02, 0xab, 0x0d, 0x46, 0xad, 0x66, + 0x43, 0x8e, 0x99, 0x82, 0xaf, 0x65, 0x8f, 0x10, 0x1b, 0xd0, 0xc5, 0x51, 0x6a, 0x5f, 0x7b, 0x99, + 0xd8, 0x0c, 0x53, 0xe1, 0x78, 0x84, 0x82, 0x85, 0xfe, 0x4e, 0xbb, 0xe0, 0xa0, 0x5b, 0x2a, 0x1c, + 0x4f, 0xfe, 0x39, 0x09, 0x60, 0x99, 0x58, 0x96, 0xea, 0x4b, 0x56, 0x21, 0x87, 0x8a, 0x50, 0x0d, + 0xf5, 0x3c, 0xd9, 0x6d, 0xd0, 0x78, 0xff, 0x39, 0x27, 0x28, 0xf7, 0x3c, 0x0c, 0xfb, 0xce, 0xe8, + 0x60, 0x21, 0xcc, 0x64, 0x8f, 0xac, 0x7a, 0x03, 0xbb, 0x4a, 0xee, 0x4a, 0xe0, 0x49, 0xfe, 0x67, + 0x12, 0x64, 0xa9, 0x4c, 0x2b, 0xd8, 0x55, 0x43, 0x63, 0x28, 0x1d, 0x7e, 0x0c, 0xef, 0x04, 0x60, + 0x6c, 0x1c, 0xfd, 0x65, 0xcc, 0x3d, 0x2b, 0x4b, 0x21, 0x1b, 0xfa, 0xcb, 0x18, 0x9d, 0xf3, 0x0c, + 0x9e, 0xec, 0x6d, 0x70, 0x91, 0x75, 0x73, 0xb3, 0x1f, 0x87, 0x41, 0xfa, 0x29, 0x9d, 0x6b, 0x0e, + 0x4f, 0xa4, 0x07, 0x8c, 0x56, 0x73, 0xf3, 0x9a, 0x23, 0xbf, 0x08, 0x83, 0x9b, 0xd7, 0x58, 0x6d, + 0xe4, 0x0e, 0xc8, 0xda, 0xa6, 0xc9, 0xd7, 0x64, 0x96, 0x0b, 0x65, 0x08, 0x80, 0x2e, 0x41, 0xa2, + 0x1e, 0x90, 0xf0, 0xeb, 0x01, 0x7e, 0x41, 0x23, 0xd9, 0x57, 0x41, 0xe3, 0xf4, 0xbf, 0x93, 0x60, + 0x28, 0x10, 0x1f, 0xd0, 0xa3, 0x70, 0xb4, 0xbc, 0xbc, 0x36, 0x7f, 0xa9, 0xba, 0xb4, 0x50, 0xbd, + 0xb0, 0x3c, 0xb7, 0xe8, 0xdf, 0x35, 0x29, 0x1e, 0x7b, 0xf5, 0xfa, 0x34, 0x0a, 0xe0, 0x6e, 0x19, + 0x7b, 0x86, 0x79, 0xd5, 0x40, 0xb3, 0x30, 0x11, 0x26, 0x99, 0x2b, 0x6f, 0x54, 0x56, 0x37, 0xf3, + 0x52, 0xf1, 0xe8, 0xab, 0xd7, 0xa7, 0xc7, 0x02, 0x14, 0x73, 0xdb, 0x0e, 0x36, 0xdc, 0x76, 0x82, + 0xf9, 0xb5, 0x95, 0x95, 0xa5, 0xcd, 0x7c, 0xa2, 0x8d, 0x80, 0x07, 0xec, 0x07, 0x60, 0x2c, 0x4c, + 0xb0, 0xba, 0xb4, 0x9c, 0x4f, 0x16, 0xd1, 0xab, 0xd7, 0xa7, 0x47, 0x02, 0xd8, 0xab, 0x7a, 0xa3, + 0x98, 0x79, 0xff, 0xa7, 0x27, 0x8f, 0xfc, 0xd2, 0x2f, 0x4e, 0x4a, 0x44, 0xb3, 0xe1, 0x50, 0x8c, + 0x40, 0x0f, 0xc1, 0xf1, 0x8d, 0xa5, 0xc5, 0xd5, 0xca, 0x42, 0x75, 0x65, 0x63, 0xb1, 0xca, 0xbe, + 0xb1, 0xe1, 0x69, 0x37, 0xfa, 0xea, 0xf5, 0xe9, 0x21, 0xae, 0x52, 0x37, 0xec, 0x75, 0xa5, 0x72, + 0x79, 0x6d, 0xb3, 0x92, 0x97, 0x18, 0xf6, 0xba, 0x8d, 0xaf, 0x98, 0x2e, 0xfb, 0xd6, 0xd6, 0x23, + 0x70, 0xa2, 0x03, 0xb6, 0xa7, 0xd8, 0xd8, 0xab, 0xd7, 0xa7, 0x87, 0xd7, 0x6d, 0xcc, 0xe6, 0x0f, + 0xa5, 0x98, 0x81, 0x42, 0x3b, 0xc5, 0xda, 0xfa, 0xda, 0xc6, 0xdc, 0x72, 0x7e, 0xba, 0x98, 0x7f, + 0xf5, 0xfa, 0x74, 0x4e, 0x04, 0x43, 0x82, 0xef, 0x6b, 0x76, 0x3b, 0x77, 0x3c, 0x7f, 0xf2, 0x30, + 0xdc, 0xc3, 0x4b, 0xa2, 0x8e, 0xab, 0xee, 0xe9, 0x46, 0xdd, 0x2b, 0x3c, 0xf3, 0x67, 0xbe, 0xf3, + 0x39, 0xc6, 0x6b, 0xcf, 0x02, 0xda, 0xb3, 0xfc, 0x5c, 0xec, 0xfe, 0x66, 0xa9, 0x18, 0x53, 0x5d, + 0x8d, 0xdf, 0x3a, 0x75, 0x7f, 0x55, 0x51, 0x8c, 0x29, 0xa0, 0x17, 0x7b, 0x6e, 0xee, 0xe4, 0x0f, + 0x48, 0x30, 0x72, 0x51, 0x77, 0x5c, 0xd3, 0xd6, 0x35, 0xb5, 0x41, 0x6f, 0x98, 0x9c, 0xeb, 0x37, + 0xb6, 0x46, 0xa6, 0xfa, 0x33, 0x30, 0x70, 0x45, 0x6d, 0xb0, 0xa0, 0x96, 0xa4, 0x1f, 0xc4, 0xe8, + 0x6c, 0x3e, 0x3f, 0xb4, 0x09, 0x06, 0x8c, 0x4c, 0xfe, 0x95, 0x04, 0x8c, 0xd2, 0xc9, 0xe0, 0xb0, + 0x4f, 0x25, 0x91, 0x3d, 0x56, 0x19, 0x52, 0xb6, 0xea, 0xf2, 0xa2, 0x61, 0x79, 0x86, 0x17, 0xc2, + 0xef, 0x8b, 0x2f, 0x6e, 0xcf, 0x2c, 0x60, 0x4d, 0xa1, 0xb4, 0xe8, 0xed, 0x90, 0x69, 0xaa, 0xd7, + 0xaa, 0x94, 0x0f, 0xdb, 0xb9, 0xcc, 0x1d, 0x8c, 0xcf, 0xcd, 0x1b, 0x53, 0xa3, 0xfb, 0x6a, 0xb3, + 0x51, 0x92, 0x05, 0x1f, 0x59, 0x19, 0x6c, 0xaa, 0xd7, 0x88, 0x88, 0xc8, 0x82, 0x51, 0x02, 0xd5, + 0x76, 0x55, 0xa3, 0x8e, 0x59, 0x27, 0xb4, 0x04, 0x5a, 0xbe, 0x78, 0xe0, 0x4e, 0x8e, 0xf9, 0x9d, + 0x04, 0xd8, 0xc9, 0xca, 0x70, 0x53, 0xbd, 0x36, 0x4f, 0x01, 0xa4, 0xc7, 0x52, 0xe6, 0xa3, 0x9f, + 0x9c, 0x3a, 0x42, 0x5f, 0x2e, 0x7c, 0x43, 0x02, 0xf0, 0x2d, 0x86, 0xde, 0x0e, 0x79, 0xcd, 0x7b, + 0xa2, 0xb4, 0x0e, 0x1f, 0xc3, 0xfb, 0xbb, 0x8d, 0x45, 0xc4, 0xde, 0x6c, 0x6d, 0xfe, 0xfa, 0x8d, + 0x29, 0x49, 0x19, 0xd5, 0x22, 0x43, 0xf1, 0x36, 0x18, 0x6a, 0x59, 0x35, 0xd5, 0xc5, 0x55, 0xba, + 0x8f, 0x4b, 0xc4, 0xae, 0xf3, 0x93, 0x84, 0xd7, 0xcd, 0x1b, 0x53, 0x88, 0xa9, 0x15, 0x20, 0x96, + 0xe9, 0xea, 0x0f, 0x0c, 0x42, 0x08, 0x02, 0x3a, 0x7d, 0x55, 0x82, 0xa1, 0x85, 0xc0, 0x49, 0xaf, + 0x02, 0x0c, 0x36, 0x4d, 0x43, 0xdf, 0xe3, 0xfe, 0x98, 0x55, 0xc4, 0x23, 0x2a, 0x42, 0x86, 0x5d, + 0xba, 0x73, 0xf7, 0x45, 0x29, 0x54, 0x3c, 0x13, 0xaa, 0xab, 0x78, 0xdb, 0xd1, 0xc5, 0x68, 0x28, + 0xe2, 0x11, 0x5d, 0x80, 0xbc, 0x83, 0xb5, 0x96, 0xad, 0xbb, 0xfb, 0x55, 0xcd, 0x34, 0x5c, 0x55, + 0x73, 0xd9, 0xf5, 0xad, 0xf2, 0x1d, 0x37, 0x6f, 0x4c, 0x1d, 0x67, 0xb2, 0x46, 0x31, 0x64, 0x65, + 0x54, 0x80, 0xe6, 0x19, 0x84, 0xf4, 0x50, 0xc3, 0xae, 0xaa, 0x37, 0x9c, 0x02, 0x7b, 0x4f, 0x26, + 0x1e, 0x03, 0xba, 0x7c, 0x6e, 0x30, 0x58, 0xd8, 0xba, 0x00, 0x79, 0xd3, 0xc2, 0x76, 0x28, 0x11, + 0x95, 0xa2, 0x3d, 0x47, 0x31, 0x64, 0x65, 0x54, 0x80, 0x44, 0x92, 0xea, 0x92, 0x61, 0x16, 0x1b, + 0x45, 0xab, 0xb5, 0xed, 0xd7, 0xc3, 0x26, 0xda, 0x46, 0x63, 0xce, 0xd8, 0x2f, 0x3f, 0xe6, 0x73, + 0x8f, 0xd2, 0xc9, 0x5f, 0xfb, 0xc2, 0xc3, 0x13, 0xdc, 0x35, 0xfc, 0xfa, 0xd4, 0x25, 0xbc, 0x4f, + 0x86, 0x9f, 0xa3, 0xae, 0x53, 0x4c, 0x92, 0x76, 0xbe, 0xa8, 0xea, 0x0d, 0x71, 0x0d, 0x59, 0xe1, + 0x4f, 0xa8, 0x04, 0x03, 0x8e, 0xab, 0xba, 0x2d, 0x87, 0x7f, 0x1c, 0x4c, 0xee, 0xe6, 0x6a, 0x65, + 0xd3, 0xa8, 0x6d, 0x50, 0x4c, 0x85, 0x53, 0xa0, 0x0b, 0x30, 0xe0, 0x9a, 0x7b, 0xd8, 0xe0, 0x26, + 0x3c, 0xd0, 0xfc, 0xa6, 0xaf, 0xed, 0x18, 0x35, 0xb1, 0x48, 0x0d, 0x37, 0x70, 0x9d, 0xa5, 0x55, + 0xbb, 0x2a, 0xd9, 0x7d, 0xd0, 0x6f, 0x84, 0x95, 0x97, 0x0e, 0x3c, 0x09, 0xb9, 0xa5, 0xa2, 0xfc, + 0x64, 0x65, 0xd4, 0x03, 0x6d, 0x50, 0x08, 0xba, 0x14, 0x3a, 0x92, 0xc8, 0x3f, 0xa4, 0x77, 0x77, + 0x37, 0xf5, 0x03, 0x3e, 0x2d, 0xea, 0x13, 0xc1, 0x03, 0x8d, 0x17, 0x20, 0xdf, 0x32, 0xb6, 0x4d, + 0x83, 0xde, 0x15, 0xe4, 0xf9, 0x3d, 0xd9, 0xdf, 0x25, 0x83, 0xce, 0x11, 0xc5, 0x90, 0x95, 0x51, + 0x0f, 0x74, 0x91, 0xed, 0x02, 0x6a, 0x30, 0xe2, 0x63, 0xd1, 0x89, 0x9a, 0x8d, 0x9d, 0xa8, 0x77, + 0xf1, 0x89, 0x7a, 0x34, 0xda, 0x8b, 0x3f, 0x57, 0x87, 0x3d, 0x20, 0x21, 0x43, 0x17, 0x01, 0xfc, + 0xf0, 0x40, 0xeb, 0x14, 0x43, 0xdd, 0x07, 0xde, 0x8f, 0x31, 0x62, 0xbf, 0xe7, 0xd3, 0xa2, 0x77, + 0xc2, 0x78, 0x53, 0x37, 0xaa, 0x0e, 0x6e, 0xec, 0x54, 0xb9, 0x81, 0x09, 0x4b, 0xfa, 0xa9, 0x97, + 0xf2, 0xf2, 0xc1, 0xfc, 0xe1, 0xe6, 0x8d, 0xa9, 0x22, 0x0f, 0xa1, 0xed, 0x2c, 0x65, 0x65, 0xac, + 0xa9, 0x1b, 0x1b, 0xb8, 0xb1, 0xb3, 0xe0, 0xc1, 0x4a, 0xb9, 0xf7, 0x7f, 0x72, 0xea, 0x08, 0x9f, + 0xae, 0x47, 0xe4, 0x73, 0xb4, 0x76, 0xce, 0xa7, 0x19, 0x76, 0xc8, 0x9e, 0x44, 0x15, 0x0f, 0xb4, + 0xa2, 0x91, 0x55, 0x7c, 0x00, 0x9b, 0xe6, 0xaf, 0xfc, 0x87, 0x69, 0x49, 0xfe, 0x9c, 0x04, 0x03, + 0x0b, 0x97, 0xd7, 0x55, 0xdd, 0x46, 0x4b, 0x30, 0xe6, 0x7b, 0x4e, 0x78, 0x92, 0x9f, 0xbc, 0x79, + 0x63, 0xaa, 0x10, 0x75, 0x2e, 0x6f, 0x96, 0xfb, 0x0e, 0x2c, 0xa6, 0xf9, 0x52, 0xb7, 0x8d, 0x6b, + 0x88, 0x55, 0x1b, 0x8a, 0xdc, 0xbe, 0xad, 0x8d, 0xa8, 0x59, 0x81, 0x41, 0x26, 0xad, 0x83, 0x4a, + 0x90, 0xb6, 0xc8, 0x0f, 0xfe, 0x62, 0x60, 0xb2, 0xab, 0xf3, 0x52, 0x7c, 0xaf, 0x90, 0x49, 0x48, + 0xe4, 0x0f, 0x27, 0x00, 0x16, 0x2e, 0x5f, 0xde, 0xb4, 0x75, 0xab, 0x81, 0xdd, 0x5b, 0xa9, 0xf9, + 0x26, 0x1c, 0x0d, 0xec, 0x92, 0x6c, 0x2d, 0xa2, 0xfd, 0xf4, 0xcd, 0x1b, 0x53, 0x27, 0xa3, 0xda, + 0x07, 0xd0, 0x64, 0x65, 0xdc, 0xdf, 0x2f, 0xd9, 0x5a, 0x47, 0xae, 0x35, 0xc7, 0xf5, 0xb8, 0x26, + 0xbb, 0x73, 0x0d, 0xa0, 0x05, 0xb9, 0x2e, 0x38, 0x6e, 0x67, 0xd3, 0x6e, 0xc0, 0x90, 0x6f, 0x12, + 0x07, 0x2d, 0x40, 0xc6, 0xe5, 0xbf, 0xb9, 0x85, 0xe5, 0xee, 0x16, 0x16, 0x64, 0xdc, 0xca, 0x1e, + 0xa5, 0xfc, 0x67, 0x12, 0x80, 0xef, 0xb3, 0x3f, 0x9e, 0x2e, 0x46, 0x42, 0x39, 0x0f, 0xbc, 0xc9, + 0x43, 0xa5, 0x6a, 0x9c, 0x3a, 0x62, 0xcf, 0x9f, 0x4e, 0xc0, 0xf8, 0x96, 0x88, 0x3c, 0x3f, 0xf6, + 0x36, 0x58, 0x87, 0x41, 0x6c, 0xb8, 0xb6, 0x4e, 0x8d, 0x40, 0x46, 0xfb, 0x91, 0x6e, 0xa3, 0xdd, + 0x41, 0x27, 0xfa, 0xb1, 0x1b, 0x51, 0x74, 0xe7, 0x6c, 0x22, 0xd6, 0xf8, 0x60, 0x12, 0x0a, 0xdd, + 0x28, 0xd1, 0x3c, 0x8c, 0x6a, 0x36, 0xa6, 0x80, 0x6a, 0xb0, 0xf2, 0x57, 0x2e, 0xfa, 0x99, 0x65, + 0x04, 0x41, 0x56, 0x46, 0x04, 0x84, 0xaf, 0x1e, 0x75, 0x20, 0x69, 0x1f, 0x71, 0x3b, 0x82, 0xd5, + 0x67, 0x9e, 0x27, 0xf3, 0xe5, 0x43, 0x74, 0x12, 0x66, 0xc0, 0xd6, 0x8f, 0x11, 0x1f, 0x4a, 0x17, + 0x90, 0x97, 0x60, 0x54, 0x37, 0x74, 0x57, 0x57, 0x1b, 0xd5, 0x6d, 0xb5, 0xa1, 0x1a, 0xda, 0x61, + 0xb2, 0x66, 0x16, 0xf2, 0x79, 0xb7, 0x11, 0x76, 0xb2, 0x32, 0xc2, 0x21, 0x65, 0x06, 0x40, 0x17, + 0x61, 0x50, 0x74, 0x95, 0x3a, 0x54, 0xb6, 0x21, 0xc8, 0x03, 0x09, 0xde, 0xcf, 0x24, 0x61, 0x4c, + 0xc1, 0xb5, 0xff, 0x3f, 0x14, 0x07, 0x1b, 0x8a, 0x15, 0x00, 0x36, 0xdd, 0x49, 0x80, 0x3d, 0xc4, + 0x68, 0x90, 0x80, 0x91, 0x65, 0x1c, 0x16, 0x1c, 0x37, 0x30, 0x1e, 0x37, 0x12, 0x90, 0x0b, 0x8e, + 0xc7, 0x5f, 0xd0, 0x55, 0x09, 0x2d, 0xf9, 0x91, 0x28, 0xc5, 0x3f, 0x11, 0xda, 0x25, 0x12, 0xb5, + 0x79, 0x6f, 0xef, 0x10, 0xf4, 0x3f, 0x12, 0x30, 0xb0, 0xae, 0xda, 0x6a, 0xd3, 0x41, 0x5a, 0x5b, + 0xa6, 0x29, 0xca, 0x8f, 0x6d, 0x1f, 0x82, 0xe6, 0xd5, 0x8e, 0x98, 0x44, 0xf3, 0xa3, 0x1d, 0x12, + 0xcd, 0x9f, 0x80, 0x11, 0xb2, 0x1d, 0x0e, 0x1c, 0x61, 0x20, 0xd6, 0x1e, 0x2e, 0x9f, 0xf0, 0xb9, + 0x84, 0xdb, 0xd9, 0x6e, 0xf9, 0x72, 0xf0, 0x0c, 0xc3, 0x10, 0xc1, 0xf0, 0x03, 0x33, 0x21, 0x3f, + 0xe6, 0x6f, 0x4b, 0x03, 0x8d, 0xb2, 0x02, 0x4d, 0xf5, 0x5a, 0x85, 0x3d, 0xa0, 0x65, 0x40, 0xbb, + 0x5e, 0x65, 0xa4, 0xea, 0x9b, 0x93, 0xd0, 0xdf, 0x79, 0xf3, 0xc6, 0xd4, 0x09, 0x46, 0xdf, 0x8e, + 0x23, 0x2b, 0x63, 0x3e, 0x50, 0x70, 0x7b, 0x1c, 0x80, 0xe8, 0x55, 0x65, 0xa7, 0x09, 0xd9, 0x76, + 0xe7, 0xe8, 0xcd, 0x1b, 0x53, 0x63, 0x8c, 0x8b, 0xdf, 0x26, 0x2b, 0x59, 0xf2, 0xb0, 0x40, 0x7e, + 0x07, 0x3c, 0xfb, 0xd3, 0x12, 0x20, 0x3f, 0xe4, 0x2b, 0xd8, 0xb1, 0xc8, 0xfe, 0x8c, 0x24, 0xe2, + 0x81, 0xac, 0x59, 0xea, 0x9d, 0x88, 0xfb, 0xf4, 0x22, 0x11, 0x0f, 0xcc, 0x94, 0xa7, 0xfc, 0xf0, + 0x98, 0xe0, 0xe3, 0xd8, 0xe1, 0xe8, 0xe5, 0xcc, 0xbc, 0xa9, 0x0b, 0xea, 0xb6, 0x78, 0x78, 0x44, + 0xfe, 0x57, 0x12, 0x9c, 0x68, 0xf3, 0x28, 0x4f, 0xd8, 0xbf, 0x04, 0xc8, 0x0e, 0x34, 0xf2, 0xef, + 0xbd, 0x31, 0xa1, 0x0f, 0xec, 0xa0, 0x63, 0x76, 0x5b, 0xdc, 0xbd, 0x75, 0x11, 0x9e, 0x9d, 0xdd, + 0xfc, 0xa7, 0x12, 0x4c, 0x04, 0xbb, 0xf7, 0x14, 0x59, 0x85, 0x5c, 0xb0, 0x77, 0xae, 0xc2, 0x3d, + 0xfd, 0xa8, 0xc0, 0xa5, 0x0f, 0xd1, 0xa3, 0xe7, 0xfc, 0xe9, 0xca, 0x6a, 0x67, 0x8f, 0xf6, 0x6d, + 0x0d, 0x21, 0x53, 0x74, 0xda, 0xa6, 0xe8, 0x78, 0xfc, 0x1f, 0x09, 0x52, 0xeb, 0xa6, 0xd9, 0x40, + 0x26, 0x8c, 0x19, 0xa6, 0x5b, 0x25, 0x9e, 0x85, 0x6b, 0x55, 0xbe, 0xe9, 0x66, 0x71, 0x70, 0xfe, + 0x60, 0x46, 0xfa, 0xf6, 0x8d, 0xa9, 0x76, 0x56, 0xca, 0xa8, 0x61, 0xba, 0x65, 0x0a, 0xd9, 0x64, + 0x5b, 0xf2, 0x77, 0xc2, 0x70, 0xb8, 0x33, 0x16, 0x25, 0x9f, 0x3f, 0x70, 0x67, 0x61, 0x36, 0x37, + 0x6f, 0x4c, 0x4d, 0xf8, 0x33, 0xc6, 0x03, 0xcb, 0x4a, 0x6e, 0x3b, 0xd0, 0x3b, 0x3b, 0xde, 0xf5, + 0xdd, 0x4f, 0x4e, 0x49, 0xa7, 0xbf, 0x28, 0x01, 0xf8, 0x95, 0x07, 0xf4, 0x10, 0x1c, 0x2f, 0xaf, + 0xad, 0x2e, 0x54, 0x37, 0x36, 0xe7, 0x36, 0xb7, 0x36, 0xaa, 0x5b, 0xab, 0x1b, 0xeb, 0x95, 0xf9, + 0xa5, 0x0b, 0x4b, 0x95, 0x05, 0xbf, 0x3c, 0xee, 0x58, 0x58, 0xd3, 0x77, 0x74, 0x5c, 0x43, 0xf7, + 0xc1, 0x44, 0x18, 0x9b, 0x3c, 0x55, 0x16, 0xf2, 0x52, 0x31, 0xf7, 0xea, 0xf5, 0xe9, 0x0c, 0xcb, + 0xc5, 0x70, 0x0d, 0x9d, 0x82, 0xa3, 0xed, 0x78, 0x4b, 0xab, 0x8b, 0xf9, 0x44, 0x71, 0xf8, 0xd5, + 0xeb, 0xd3, 0x59, 0x2f, 0x69, 0x43, 0x32, 0xa0, 0x20, 0x26, 0xe7, 0x97, 0x2c, 0xc2, 0xab, 0xd7, + 0xa7, 0x07, 0x98, 0x01, 0x8b, 0xa9, 0xf7, 0x7f, 0x7a, 0xf2, 0x48, 0xf9, 0x42, 0xd7, 0x02, 0xf8, + 0x43, 0x3d, 0x6d, 0x77, 0xcd, 0x2b, 0x6a, 0x87, 0xab, 0xde, 0xaf, 0x1e, 0x87, 0xa9, 0x2e, 0x55, + 0x6f, 0xf7, 0x5a, 0x4c, 0xc1, 0xbb, 0x47, 0x69, 0x3b, 0xb6, 0x74, 0xdd, 0xa5, 0x58, 0x7e, 0xf8, + 0x82, 0x76, 0x5f, 0xb5, 0x7b, 0xf9, 0x5f, 0xa7, 0x00, 0xad, 0x38, 0xf5, 0x79, 0x92, 0x54, 0x05, + 0x8e, 0x68, 0x45, 0x6a, 0x36, 0xd2, 0x0f, 0x54, 0xb3, 0x59, 0x09, 0x55, 0x41, 0x12, 0x07, 0xab, + 0xb4, 0xf6, 0x5d, 0x0a, 0x49, 0xfe, 0x50, 0x4a, 0x21, 0x9d, 0x33, 0xa5, 0xd4, 0xad, 0xdb, 0x52, + 0xa5, 0x0f, 0xbb, 0xad, 0xe4, 0x15, 0xce, 0x81, 0x1e, 0x15, 0xce, 0x42, 0xd7, 0x32, 0x26, 0xa7, + 0x46, 0x67, 0xc5, 0x95, 0x9c, 0xc1, 0xfe, 0xd6, 0x36, 0x7e, 0x67, 0x27, 0xf3, 0x7e, 0xb1, 0xb2, + 0x9d, 0x84, 0x62, 0xbb, 0x3b, 0x89, 0xe0, 0x2b, 0x7f, 0x24, 0x09, 0xf9, 0x15, 0xa7, 0x5e, 0xa9, + 0xe9, 0xee, 0x6d, 0xf2, 0xb5, 0x67, 0xba, 0x6f, 0x53, 0xd1, 0xcd, 0x1b, 0x53, 0x23, 0xcc, 0xa6, + 0x3d, 0x2c, 0xd9, 0x84, 0xd1, 0xc8, 0xcb, 0x01, 0xee, 0x59, 0x0b, 0x87, 0x79, 0x47, 0x11, 0x61, + 0x25, 0xd3, 0x5d, 0x45, 0xc0, 0xbf, 0xd1, 0xb5, 0xce, 0xce, 0xcc, 0x1c, 0xea, 0xe2, 0xed, 0xac, + 0xe9, 0xf9, 0x63, 0x56, 0x84, 0x42, 0x74, 0x50, 0xbc, 0x11, 0xfb, 0x43, 0x09, 0x86, 0x56, 0x1c, + 0xb1, 0x8b, 0xc6, 0x3f, 0xa6, 0x15, 0x85, 0x27, 0xbc, 0x8b, 0x26, 0xc9, 0xfe, 0xfc, 0x56, 0x5c, + 0x3e, 0xf1, 0x8d, 0x70, 0x14, 0xc6, 0x03, 0x7a, 0x7a, 0xfa, 0xff, 0x76, 0x82, 0xc6, 0xc7, 0x32, + 0xae, 0xeb, 0x86, 0x97, 0x54, 0xe0, 0xbf, 0xa8, 0xfb, 0x25, 0xdf, 0xce, 0xa9, 0xc3, 0xda, 0x79, + 0x8f, 0x06, 0x88, 0x88, 0x3d, 0xbd, 0x8c, 0x71, 0xa5, 0x7d, 0x37, 0x2f, 0x1d, 0xe0, 0xa0, 0x4c, + 0x64, 0xcf, 0x2e, 0xbf, 0x21, 0xc1, 0xf0, 0x8a, 0x53, 0xdf, 0x32, 0x6a, 0xff, 0xcf, 0xfb, 0xef, + 0x0e, 0x1c, 0x0d, 0x69, 0x7a, 0x9b, 0x4c, 0x7a, 0xe6, 0xb5, 0x14, 0x24, 0x57, 0x9c, 0x3a, 0x7a, + 0x09, 0x46, 0xa3, 0x49, 0xc3, 0xe9, 0x6e, 0x31, 0xbb, 0x7d, 0x45, 0x28, 0x9e, 0xe9, 0x1f, 0xd7, + 0xd3, 0x64, 0x0f, 0x86, 0xc3, 0x2b, 0xc7, 0xa9, 0x1e, 0x4c, 0x42, 0x98, 0xc5, 0x47, 0xfa, 0xc5, + 0xf4, 0x3a, 0x7b, 0x3b, 0x64, 0xbc, 0xa0, 0x77, 0x77, 0x0f, 0x6a, 0x81, 0x54, 0x7c, 0xb0, 0x0f, + 0x24, 0x8f, 0xfb, 0x4b, 0x30, 0x1a, 0x0d, 0x29, 0xbd, 0xac, 0x17, 0xc1, 0xed, 0x69, 0xbd, 0x6e, + 0x53, 0x6b, 0x1b, 0x20, 0x30, 0x0f, 0xee, 0xed, 0xc1, 0xc1, 0x47, 0x2b, 0x3e, 0xdc, 0x17, 0x9a, + 0xb7, 0xb9, 0xba, 0xd5, 0xc9, 0xf8, 0xbf, 0x48, 0xc0, 0xe9, 0x60, 0x9a, 0xfb, 0x52, 0x0b, 0xdb, + 0xfb, 0x5e, 0x26, 0x6b, 0xa9, 0x75, 0xdd, 0x08, 0xde, 0xbe, 0x3b, 0x11, 0x9c, 0x35, 0x14, 0x57, + 0xc8, 0x2b, 0x1b, 0x30, 0xb4, 0xae, 0xd6, 0xb1, 0x82, 0x5f, 0x6a, 0x61, 0xc7, 0xed, 0x70, 0xfb, + 0xeb, 0x18, 0x0c, 0x98, 0x3b, 0x3b, 0xe2, 0xac, 0x59, 0x4a, 0xe1, 0x4f, 0x68, 0x02, 0xd2, 0x0d, + 0xbd, 0xa9, 0xb3, 0x99, 0x99, 0x52, 0xd8, 0x03, 0x9a, 0x82, 0x21, 0x8d, 0x4c, 0xc0, 0x2a, 0x3b, + 0x37, 0x9f, 0x12, 0x5f, 0x66, 0x6a, 0x19, 0xee, 0x26, 0x81, 0xc8, 0xcf, 0x40, 0x8e, 0xf5, 0xc7, + 0xad, 0x7f, 0x02, 0x32, 0xf4, 0x9c, 0xb3, 0xdf, 0xeb, 0x20, 0x79, 0xbe, 0xc4, 0x6e, 0x8a, 0x31, + 0x2e, 0xac, 0x63, 0xf6, 0x50, 0x2e, 0x77, 0x35, 0xe5, 0xa9, 0xf8, 0x8c, 0x80, 0x19, 0xca, 0x33, + 0xe3, 0x6f, 0xa6, 0xe1, 0x28, 0xdf, 0x7f, 0xa8, 0x96, 0x3e, 0xbb, 0xeb, 0xba, 0xe2, 0x36, 0x33, + 0xf0, 0x10, 0xa0, 0x5a, 0xba, 0xbc, 0x0f, 0xa9, 0x8b, 0xae, 0x6b, 0xa1, 0xd3, 0x90, 0xb6, 0x5b, + 0x0d, 0x2c, 0x5e, 0xc5, 0x78, 0xa9, 0xa4, 0x6a, 0xe9, 0x33, 0x04, 0x41, 0x69, 0x35, 0xb0, 0xc2, + 0x50, 0x50, 0x05, 0xa6, 0x76, 0x5a, 0x8d, 0xc6, 0x7e, 0xb5, 0x86, 0xe9, 0x3f, 0xd5, 0xf3, 0xfe, + 0x2d, 0x0d, 0xbe, 0x66, 0xa9, 0x86, 0x97, 0xef, 0x67, 0x94, 0x93, 0x14, 0x6d, 0x81, 0x62, 0x89, + 0x7f, 0x49, 0x53, 0x11, 0x38, 0xf2, 0xef, 0x25, 0x20, 0x23, 0x58, 0xd3, 0xab, 0x5b, 0xb8, 0x81, + 0x35, 0xd7, 0x14, 0x47, 0x19, 0xbc, 0x67, 0x84, 0x20, 0x59, 0xe7, 0x43, 0x94, 0xbd, 0x78, 0x44, + 0x21, 0x0f, 0x04, 0xe6, 0x5d, 0xa8, 0x23, 0x30, 0xab, 0x45, 0x46, 0x2d, 0x65, 0x99, 0xa2, 0x66, + 0x7a, 0xf1, 0x88, 0x42, 0x9f, 0x50, 0x01, 0x06, 0x88, 0xcb, 0xba, 0xec, 0x8b, 0xc1, 0x04, 0xce, + 0x9f, 0xd1, 0x31, 0x48, 0x5b, 0xaa, 0xab, 0xb1, 0xb3, 0xee, 0xa4, 0x81, 0x3d, 0x92, 0xc0, 0xcc, + 0xbe, 0xd4, 0x10, 0xfd, 0x8f, 0x55, 0xc4, 0x18, 0xec, 0x93, 0x98, 0x44, 0xee, 0x75, 0xd5, 0x75, + 0xb1, 0x6d, 0x10, 0x86, 0x0c, 0x1d, 0x21, 0x48, 0x6d, 0x9b, 0xb5, 0x7d, 0xfe, 0x5f, 0xb4, 0xe8, + 0x6f, 0xfe, 0x6f, 0x7b, 0xa8, 0x3f, 0x54, 0x69, 0x23, 0xfb, 0xe7, 0x81, 0x39, 0x01, 0x2c, 0x13, + 0xa4, 0x0a, 0x8c, 0xab, 0xb5, 0x9a, 0xce, 0xfe, 0xa1, 0x55, 0x75, 0x5b, 0xa7, 0xfb, 0x61, 0x87, + 0xfe, 0x6b, 0xc8, 0x6e, 0x63, 0x81, 0x7c, 0x82, 0x32, 0xc7, 0x2f, 0x67, 0x61, 0xd0, 0x62, 0x42, + 0xc9, 0xe7, 0x61, 0xac, 0x4d, 0x52, 0x22, 0xdf, 0x9e, 0x6e, 0xd4, 0xc4, 0x2d, 0x43, 0xf2, 0x9b, + 0xc0, 0xe8, 0x67, 0x6d, 0xd9, 0x21, 0x11, 0xfa, 0xbb, 0xfc, 0xee, 0xee, 0x77, 0x50, 0x47, 0x02, + 0x77, 0x50, 0x55, 0x4b, 0x2f, 0x67, 0x29, 0x7f, 0x7e, 0xf5, 0x74, 0x8e, 0x37, 0xb0, 0x6b, 0xa7, + 0x33, 0xa6, 0x5d, 0x9f, 0xad, 0x63, 0x43, 0xec, 0x6f, 0x49, 0x93, 0x6a, 0xe9, 0x0e, 0x75, 0x47, + 0xff, 0x33, 0xbb, 0xce, 0xf9, 0xc0, 0x6f, 0x7a, 0x23, 0x35, 0xb5, 0x38, 0xb7, 0xbe, 0xe4, 0xf9, + 0xf1, 0x97, 0x13, 0x70, 0x32, 0xe0, 0xc7, 0x01, 0xe4, 0x76, 0x77, 0x2e, 0x76, 0xf6, 0xf8, 0x3e, + 0x2e, 0xa9, 0x5f, 0x82, 0x14, 0xc1, 0x47, 0x31, 0xff, 0x54, 0xa7, 0xf0, 0xab, 0x5f, 0xfb, 0x27, + 0x72, 0x78, 0xb3, 0x15, 0x1a, 0x15, 0xca, 0xa4, 0xfc, 0xbe, 0xfe, 0xed, 0x97, 0xf7, 0xbf, 0x30, + 0xec, 0xdc, 0x3a, 0x33, 0x46, 0x6d, 0xf8, 0xad, 0xb3, 0x20, 0x77, 0xa9, 0x0c, 0xb0, 0x88, 0xd9, + 0xbb, 0xc4, 0x71, 0x80, 0x70, 0xdc, 0xed, 0x62, 0x5e, 0xaf, 0x11, 0xec, 0xb3, 0x6a, 0x71, 0x0d, + 0x8e, 0x3d, 0x47, 0xfa, 0xf6, 0xeb, 0xd7, 0x22, 0xb0, 0x1f, 0xf3, 0x8e, 0xd9, 0x48, 0xfc, 0x3f, + 0x73, 0x8a, 0x23, 0x34, 0xe0, 0xcb, 0xc7, 0x6b, 0x10, 0xf7, 0xcd, 0x74, 0x5d, 0x2f, 0x66, 0x02, + 0x8b, 0x85, 0x12, 0xa0, 0x94, 0x7f, 0x59, 0x82, 0xe3, 0x6d, 0x5d, 0xf3, 0x18, 0xbf, 0xd8, 0xe1, + 0x0e, 0x61, 0xdf, 0xa7, 0xfb, 0x82, 0xf7, 0x09, 0x17, 0x3b, 0x08, 0x7b, 0x7f, 0xac, 0xb0, 0x4c, + 0x8a, 0x90, 0xb4, 0x4f, 0xc3, 0xd1, 0xb0, 0xb0, 0xc2, 0x4c, 0xf7, 0xc2, 0x48, 0x38, 0x31, 0xe5, + 0xe6, 0x1a, 0x0e, 0xa5, 0xa6, 0x72, 0x35, 0x6a, 0x67, 0x4f, 0xd7, 0x0a, 0x64, 0x3d, 0x54, 0x9e, + 0x4f, 0xf6, 0xad, 0xaa, 0x4f, 0x29, 0x7f, 0x58, 0x82, 0xe9, 0x70, 0x0f, 0xfe, 0x0e, 0xd5, 0x39, + 0x98, 0xb0, 0xb7, 0x6c, 0x88, 0xdf, 0x90, 0xe0, 0xae, 0x1e, 0x32, 0x71, 0x03, 0xbc, 0x0c, 0x13, + 0x81, 0x12, 0xbd, 0x08, 0xe1, 0x62, 0xd8, 0x4f, 0xc7, 0xbf, 0x5b, 0xf0, 0x92, 0xa6, 0x3b, 0x88, + 0x51, 0x3e, 0xfb, 0xfb, 0x53, 0xe3, 0xed, 0x6d, 0x8e, 0x32, 0xde, 0x5e, 0x56, 0xbf, 0x85, 0xfe, + 0xf1, 0x9a, 0x04, 0x0f, 0x84, 0x55, 0xed, 0xf0, 0xde, 0xfc, 0x47, 0x35, 0x0e, 0xff, 0x5e, 0x82, + 0xd3, 0xfd, 0x08, 0xe7, 0xe5, 0xb7, 0xe3, 0xfe, 0x8b, 0xb2, 0xe8, 0x78, 0x3c, 0x78, 0x80, 0x13, + 0x06, 0xdc, 0x4b, 0x91, 0xc7, 0xed, 0x36, 0x18, 0xde, 0xe2, 0x13, 0x2b, 0x38, 0xe4, 0x9e, 0x91, + 0xc3, 0xbb, 0x4f, 0x61, 0xe4, 0xd0, 0xfe, 0xb3, 0xc3, 0x58, 0x24, 0x3a, 0x8c, 0x45, 0x60, 0x7f, + 0x78, 0x85, 0xc7, 0xad, 0x0e, 0x2f, 0xc7, 0xde, 0x06, 0xe3, 0x1d, 0x5c, 0x99, 0xcf, 0xea, 0x03, + 0x78, 0xb2, 0x82, 0xda, 0x9d, 0x55, 0xde, 0x87, 0x29, 0xda, 0x6f, 0x07, 0x43, 0xdf, 0x6e, 0x95, + 0x9b, 0x3c, 0xb6, 0x74, 0xec, 0x9a, 0xeb, 0xbe, 0x04, 0x03, 0x6c, 0x9c, 0xb9, 0xba, 0x87, 0x70, + 0x14, 0xce, 0x40, 0xfe, 0x79, 0x11, 0xcb, 0x16, 0x84, 0xd8, 0x9d, 0xe7, 0x50, 0x3f, 0xba, 0xde, + 0xa2, 0x39, 0x14, 0x30, 0xc6, 0x37, 0x44, 0x54, 0xeb, 0x2c, 0x1d, 0x37, 0x87, 0x76, 0xcb, 0xa2, + 0x1a, 0xb3, 0xcd, 0xed, 0x0d, 0x5f, 0xbf, 0x28, 0xc2, 0x97, 0xa7, 0x53, 0x4c, 0xf8, 0xfa, 0xd1, + 0x98, 0xde, 0x0b, 0x64, 0x31, 0x62, 0xfe, 0x79, 0x0c, 0x64, 0xdf, 0x95, 0xe0, 0x04, 0xd5, 0x2d, + 0xf8, 0xc6, 0xf5, 0xa0, 0x26, 0x7f, 0x08, 0x90, 0x63, 0x6b, 0xd5, 0x8e, 0xb3, 0x3b, 0xef, 0xd8, + 0xda, 0xe5, 0xd0, 0xfa, 0xf2, 0x10, 0xa0, 0x9a, 0xe3, 0x46, 0xb1, 0xd9, 0xf1, 0xf5, 0x7c, 0xcd, + 0x71, 0x2f, 0xf7, 0x58, 0x8d, 0x52, 0xb7, 0x60, 0x38, 0xbf, 0x2e, 0x41, 0xb1, 0x93, 0xca, 0x7c, + 0xf8, 0x74, 0x38, 0x16, 0x7a, 0x7b, 0x1f, 0x1d, 0xc1, 0x87, 0xfa, 0x79, 0x67, 0x1d, 0x99, 0x46, + 0x47, 0x6d, 0x7c, 0xbb, 0xf3, 0x80, 0xa9, 0xb0, 0x87, 0xb6, 0x67, 0xd6, 0x3f, 0xb2, 0xe9, 0xf3, + 0x85, 0xb6, 0xb8, 0xfa, 0xe7, 0x22, 0xf7, 0xbe, 0x06, 0x93, 0x5d, 0xa4, 0xbe, 0xdd, 0xeb, 0xde, + 0x6e, 0xd7, 0xc1, 0xbc, 0xd5, 0xe9, 0xfb, 0xe3, 0x7c, 0x26, 0x84, 0xaf, 0x46, 0x05, 0xf6, 0x62, + 0x9d, 0xee, 0x56, 0xcb, 0x6f, 0x81, 0x3b, 0x3a, 0x52, 0x71, 0xd9, 0x4a, 0x90, 0xda, 0xd5, 0x1d, + 0x97, 0x8b, 0x75, 0x5f, 0x37, 0xb1, 0x22, 0xd4, 0x94, 0x46, 0x46, 0x90, 0xa7, 0xac, 0xd7, 0x4d, + 0xb3, 0xc1, 0xc5, 0x90, 0x2f, 0xc1, 0x58, 0x00, 0xc6, 0x3b, 0x39, 0x07, 0x29, 0xcb, 0xe4, 0xdf, + 0x0d, 0x1a, 0x3a, 0x73, 0xb2, 0x5b, 0x27, 0x84, 0x86, 0xab, 0x4d, 0xf1, 0xe5, 0x09, 0x40, 0x8c, + 0x19, 0x3d, 0xdc, 0x25, 0xba, 0xd8, 0x80, 0xf1, 0x10, 0x94, 0x77, 0xf2, 0x26, 0x18, 0xb0, 0x28, + 0xc4, 0xbb, 0x04, 0xdb, 0xad, 0x1b, 0x8a, 0xe5, 0x7d, 0x89, 0x85, 0x3e, 0x9d, 0xf9, 0xf6, 0x51, + 0x48, 0x53, 0xae, 0xe8, 0x63, 0x12, 0x40, 0xe0, 0xa8, 0xd6, 0x4c, 0x37, 0x36, 0x9d, 0xf7, 0xc4, + 0xc5, 0xd9, 0xbe, 0xf1, 0x79, 0xce, 0x76, 0xfa, 0xdd, 0xff, 0xe6, 0x5b, 0x1f, 0x49, 0xdc, 0x83, + 0xe4, 0xd9, 0x2e, 0xbb, 0xf1, 0xc0, 0x7c, 0xf9, 0x4c, 0xe8, 0xa3, 0x34, 0x0f, 0xf7, 0xd7, 0x95, + 0x90, 0x6c, 0xa6, 0x5f, 0x74, 0x2e, 0xd8, 0x79, 0x2a, 0xd8, 0x59, 0xf4, 0x58, 0xbc, 0x60, 0xb3, + 0xef, 0x08, 0x4f, 0x9a, 0x77, 0xa1, 0xdf, 0x91, 0x60, 0xa2, 0xd3, 0x96, 0x0e, 0x3d, 0xd9, 0x9f, + 0x14, 0xed, 0x29, 0x45, 0xf1, 0xa9, 0x43, 0x50, 0x72, 0x55, 0x16, 0xa9, 0x2a, 0x73, 0xe8, 0x99, + 0x43, 0xa8, 0x32, 0x1b, 0x58, 0x77, 0xd0, 0xff, 0x92, 0xe0, 0xce, 0x9e, 0x3b, 0x24, 0x34, 0xd7, + 0x9f, 0x94, 0x3d, 0x72, 0xa7, 0x62, 0xf9, 0x07, 0x61, 0xc1, 0x35, 0x7e, 0x8e, 0x6a, 0x7c, 0x09, + 0x2d, 0x1d, 0x46, 0x63, 0x3f, 0x23, 0x0a, 0xea, 0xfe, 0x5b, 0xe1, 0x23, 0xff, 0xbd, 0xdd, 0xa9, + 0x6d, 0xe3, 0x11, 0x33, 0x31, 0xda, 0x93, 0x5a, 0xf9, 0x05, 0xaa, 0x82, 0x82, 0xd6, 0x7f, 0xc0, + 0x41, 0x9b, 0x7d, 0x47, 0x38, 0xf0, 0xbf, 0x0b, 0xfd, 0x4f, 0xa9, 0xf3, 0x09, 0xfe, 0x27, 0x7a, + 0x8a, 0xd8, 0x7d, 0x53, 0x55, 0x7c, 0xf2, 0xe0, 0x84, 0x5c, 0xc9, 0x26, 0x55, 0xb2, 0x8e, 0xf0, + 0xad, 0x56, 0xb2, 0xe3, 0x20, 0xa2, 0xaf, 0x4a, 0x30, 0xd1, 0x69, 0x4f, 0x12, 0x33, 0x2d, 0x7b, + 0x6c, 0xb2, 0x62, 0xa6, 0x65, 0xaf, 0x0d, 0x90, 0xfc, 0x26, 0xaa, 0xfc, 0x39, 0xf4, 0x78, 0x37, + 0xe5, 0x7b, 0x8e, 0x22, 0x99, 0x8b, 0x3d, 0x93, 0xfc, 0x98, 0xb9, 0xd8, 0xcf, 0x3e, 0x26, 0x66, + 0x2e, 0xf6, 0xb5, 0xc7, 0x88, 0x9f, 0x8b, 0x9e, 0x66, 0x7d, 0x0e, 0xa3, 0x83, 0xbe, 0x2c, 0xc1, + 0x70, 0x28, 0x23, 0x46, 0x8f, 0xf6, 0x14, 0xb4, 0xd3, 0x86, 0xa1, 0xfb, 0x8b, 0xcd, 0xee, 0x09, + 0xb7, 0xbc, 0x44, 0x75, 0x99, 0x47, 0x73, 0x87, 0xd1, 0xc5, 0x0e, 0x49, 0xfc, 0x75, 0x09, 0xc6, + 0x3b, 0x64, 0x99, 0x31, 0xb3, 0xb0, 0x7b, 0xd2, 0x5c, 0x7c, 0xf2, 0xe0, 0x84, 0x5c, 0xab, 0x0b, + 0x54, 0xab, 0x9f, 0x40, 0x4f, 0x1f, 0x46, 0xab, 0xc0, 0xfa, 0x7c, 0xc3, 0x3f, 0x10, 0x1d, 0xe8, + 0x07, 0x9d, 0x3b, 0xa0, 0x60, 0x42, 0xa1, 0x27, 0x0e, 0x4c, 0xc7, 0xf5, 0x79, 0x9e, 0xea, 0xf3, + 0x1c, 0x5a, 0xfb, 0xc1, 0xf4, 0x69, 0x5f, 0xd6, 0x3f, 0xdf, 0x7e, 0x35, 0xbf, 0xb7, 0x17, 0x75, + 0x4c, 0x56, 0x8b, 0x8f, 0x1d, 0x88, 0x86, 0x2b, 0xf5, 0x24, 0x55, 0xea, 0x0c, 0x7a, 0xa4, 0x9b, + 0x52, 0x81, 0x53, 0xef, 0xba, 0xb1, 0x63, 0xce, 0xbe, 0x83, 0xa5, 0xc0, 0xef, 0x42, 0x3f, 0x25, + 0x4e, 0x1c, 0x9f, 0xea, 0xd9, 0x6f, 0x20, 0x8f, 0x2d, 0x3e, 0xd0, 0x07, 0x26, 0x97, 0xeb, 0x1e, + 0x2a, 0xd7, 0x24, 0x3a, 0xd9, 0x4d, 0x2e, 0x92, 0xcb, 0xa2, 0x0f, 0x48, 0xde, 0x25, 0x85, 0xd3, + 0xbd, 0x79, 0x07, 0x93, 0xdd, 0xee, 0x07, 0x1d, 0x3a, 0xa4, 0xc0, 0xf2, 0x7d, 0x54, 0x92, 0x69, + 0x34, 0xd9, 0x55, 0x12, 0x96, 0xfa, 0xde, 0xea, 0x93, 0x03, 0x7f, 0x3c, 0xd8, 0xf5, 0xe3, 0x15, + 0x75, 0x6c, 0x60, 0x47, 0x77, 0x0e, 0xf5, 0xf1, 0x8a, 0xfe, 0x5e, 0x4f, 0xfd, 0x4e, 0x1a, 0x72, + 0x8b, 0xac, 0x97, 0x0d, 0x57, 0x75, 0x7f, 0xc0, 0x8d, 0x00, 0x72, 0xf8, 0x37, 0xd9, 0xd8, 0xa7, + 0x22, 0xfd, 0x8f, 0x1f, 0xe6, 0x0e, 0x74, 0x6d, 0x9b, 0x1d, 0x12, 0xe4, 0x37, 0xa4, 0xa3, 0xfc, + 0x64, 0xf6, 0x79, 0x37, 0x7a, 0x76, 0x81, 0x7d, 0xe4, 0xf1, 0xbd, 0x12, 0x1c, 0xa5, 0x58, 0xfe, + 0x7c, 0xa3, 0x98, 0xe2, 0xce, 0x5e, 0x57, 0x8f, 0x59, 0x56, 0x03, 0x25, 0x18, 0xf6, 0x59, 0xc6, + 0x7b, 0xf8, 0x7d, 0x96, 0x93, 0x81, 0xce, 0xa3, 0x6c, 0x65, 0x65, 0xbc, 0xd1, 0x46, 0xe9, 0x44, + 0xf6, 0xf5, 0xa9, 0xc3, 0xef, 0xeb, 0x9f, 0x85, 0xa1, 0x40, 0xa4, 0x2f, 0xa4, 0x63, 0xae, 0x99, + 0x46, 0x8b, 0x68, 0x41, 0x62, 0xf4, 0x3e, 0x09, 0x8e, 0x76, 0x5c, 0x04, 0xe9, 0xff, 0xaa, 0x3d, + 0x60, 0x91, 0x2e, 0x62, 0x9c, 0x8e, 0x7c, 0x65, 0x65, 0xa2, 0xd5, 0x29, 0x9b, 0x58, 0x87, 0xe1, + 0xd0, 0x02, 0x56, 0x10, 0xff, 0x71, 0xba, 0xff, 0x1b, 0x16, 0x61, 0x06, 0xa8, 0x08, 0x19, 0x7c, + 0xcd, 0x32, 0x6d, 0x17, 0xd7, 0xe8, 0x91, 0x87, 0x8c, 0xe2, 0x3d, 0xcb, 0xab, 0x80, 0xda, 0x07, + 0x37, 0xfa, 0x1d, 0xd2, 0xac, 0xff, 0x1d, 0xd2, 0x09, 0x48, 0x07, 0xbf, 0xd4, 0xc9, 0x1e, 0xfc, + 0x3a, 0xc5, 0xad, 0x9e, 0xf3, 0xff, 0x37, 0x00, 0x00, 0xff, 0xff, 0x4f, 0xa1, 0x5b, 0x6b, 0x6a, + 0x94, 0x00, 0x00, } r := bytes.NewReader(gzipped) gzipr, err := compress_gzip.NewReader(r)