Commit 4e9e7064 authored by heyubin's avatar heyubin

add by hyb for bug

parent d23433af
......@@ -516,12 +516,11 @@ func createMultiSigAccTransferIn(cmd *cobra.Command, args []string) {
fmt.Fprintln(os.Stderr, types.ErrAmount)
return
}
params := &mty.MultiSigExecTransfer{
params := &mty.MultiSigExecTransferTo{
Symbol: symbol,
Amount: int64(math.Trunc((amount+0.0000001)*1e4)) * 1e4,
Note: note,
Execname: execer,
From: "",
To: to,
}
var res string
......@@ -573,7 +572,7 @@ func createMultiSigAccTransferOut(cmd *cobra.Command, args []string) {
fmt.Fprintln(os.Stderr, types.ErrAmount)
return
}
params := &mty.MultiSigExecTransfer{
params := &mty.MultiSigExecTransferFrom{
Symbol: symbol,
Amount: int64(math.Trunc((amount+0.0000001)*1e4)) * 1e4,
Note: note,
......
......@@ -201,7 +201,7 @@ func (a *action) MultiSigOwnerOperate(AccOwnerOperate *mty.MultiSigOwnerOperate)
//MultiSigExecTransferFrom 首先判断转账的额度是否大于每日限量,小于就直接执行交易,调用ExecTransferFrozen进行转账
//大于每日限量只需要将交易信息记录
//合约中多重签名账户转账到外部账户,multiSigAddr--->Addr
func (a *action) MultiSigExecTransferFrom(multiSigAccTransfer *mty.MultiSigExecTransfer) (*types.Receipt, error) {
func (a *action) MultiSigExecTransferFrom(multiSigAccTransfer *mty.MultiSigExecTransferFrom) (*types.Receipt, error) {
//首先从statedb中获取MultiSigAccAddr的状态信息
multiSigAccAddr := multiSigAccTransfer.From
......@@ -247,7 +247,7 @@ func (a *action) MultiSigExecTransferFrom(multiSigAccTransfer *mty.MultiSigExecT
//MultiSigExecTransferTo 将合约中外部账户转账上的Execname.Symbol资产转到多重签名账户上,from:Addr --->to:multiSigAddr
// from地址使用tx中的签名的地址,payload中from地址不使用在 TransferTo交易中
func (a *action) MultiSigExecTransferTo(execTransfer *mty.MultiSigExecTransfer) (*types.Receipt, error) {
func (a *action) MultiSigExecTransferTo(execTransfer *mty.MultiSigExecTransferTo) (*types.Receipt, error) {
//from地址校验必须不是多重签名账户地址
multiSigAccFrom, _ := getMultiSigAccFromDb(a.db, a.fromaddr)
......@@ -728,7 +728,7 @@ func (a *action) receiptMultiSigTx(multiSigTx *mty.MultiSigTx, owner *mty.Owner,
}
//确认并执行转账交易:区分submitTx和confirmtx阶段。
func (a *action) executeTransferTx(multiSigAcc *mty.MultiSig, newMultiSigTx *mty.MultiSigTx, transfer *mty.MultiSigExecTransfer, confOwner *mty.Owner, subOrConfirm bool) (*types.Receipt, error) {
func (a *action) executeTransferTx(multiSigAcc *mty.MultiSig, newMultiSigTx *mty.MultiSigTx, transfer *mty.MultiSigExecTransferFrom, confOwner *mty.Owner, subOrConfirm bool) (*types.Receipt, error) {
//获取对应资产的每日限额信息
var findindex int
......
......@@ -34,13 +34,13 @@ func (m *MultiSig) Exec_MultiSigConfirmTx(payload *mty.MultiSigConfirmTx, tx *ty
}
//Exec_MultiSigExecTransferTo 合约中外部账户转账到多重签名账户,Addr --->multiSigAddr
func (m *MultiSig) Exec_MultiSigExecTransferTo(payload *mty.MultiSigExecTransfer, tx *types.Transaction, index int) (*types.Receipt, error) {
func (m *MultiSig) Exec_MultiSigExecTransferTo(payload *mty.MultiSigExecTransferTo, tx *types.Transaction, index int) (*types.Receipt, error) {
action := newAction(m, tx, int32(index))
return action.MultiSigExecTransferTo(payload)
}
//Exec_MultiSigExecTransferFrom 合约中多重签名账户转账到外部账户,multiSigAddr--->Addr
func (m *MultiSig) Exec_MultiSigExecTransferFrom(payload *mty.MultiSigExecTransfer, tx *types.Transaction, index int) (*types.Receipt, error) {
func (m *MultiSig) Exec_MultiSigExecTransferFrom(payload *mty.MultiSigExecTransferFrom, tx *types.Transaction, index int) (*types.Receipt, error) {
action := newAction(m, tx, int32(index))
return action.MultiSigExecTransferFrom(payload)
}
......@@ -62,7 +62,7 @@ func (m *MultiSig) ExecDelLocal_MultiSigConfirmTx(payload *mty.MultiSigConfirmTx
}
//ExecDelLocal_MultiSigExecTransferTo 合约中外部账户转账到多重签名账户,Addr --->multiSigAddr
func (m *MultiSig) ExecDelLocal_MultiSigExecTransferTo(payload *mty.MultiSigExecTransfer, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) {
func (m *MultiSig) ExecDelLocal_MultiSigExecTransferTo(payload *mty.MultiSigExecTransferTo, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) {
if receiptData.GetTy() != types.ExecOk {
return &types.LocalDBSet{}, nil
}
......@@ -75,7 +75,7 @@ func (m *MultiSig) ExecDelLocal_MultiSigExecTransferTo(payload *mty.MultiSigExec
}
//ExecDelLocal_MultiSigExecTransferFrom 合约中多重签名账户转账到外部账户,multiSigAddr--->Addr
func (m *MultiSig) ExecDelLocal_MultiSigExecTransferFrom(payload *mty.MultiSigExecTransfer, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) {
func (m *MultiSig) ExecDelLocal_MultiSigExecTransferFrom(payload *mty.MultiSigExecTransferFrom, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) {
if receiptData.GetTy() != types.ExecOk {
return &types.LocalDBSet{}, nil
}
......
......@@ -65,7 +65,7 @@ func (m *MultiSig) ExecLocal_MultiSigConfirmTx(payload *mty.MultiSigConfirmTx, t
}
//ExecLocal_MultiSigExecTransferTo 合约中外部账户转账到多重签名账户,Addr --->multiSigAddr
func (m *MultiSig) ExecLocal_MultiSigExecTransferTo(payload *mty.MultiSigExecTransfer, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) {
func (m *MultiSig) ExecLocal_MultiSigExecTransferTo(payload *mty.MultiSigExecTransferTo, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) {
if receiptData.GetTy() != types.ExecOk {
return &types.LocalDBSet{}, nil
}
......@@ -79,7 +79,7 @@ func (m *MultiSig) ExecLocal_MultiSigExecTransferTo(payload *mty.MultiSigExecTra
}
//ExecLocal_MultiSigExecTransferFrom 合约中多重签名账户转账到外部账户,multiSigAddr--->Addr
func (m *MultiSig) ExecLocal_MultiSigExecTransferFrom(payload *mty.MultiSigExecTransfer, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) {
func (m *MultiSig) ExecLocal_MultiSigExecTransferFrom(payload *mty.MultiSigExecTransferFrom, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) {
if receiptData.GetTy() != types.ExecOk {
return &types.LocalDBSet{}, nil
}
......
......@@ -764,16 +764,15 @@ func testMultiSigAccConfirmTx(t *testing.T, driver drivers.Driver, env execEnv,
//合约内转账到多重签名账户
func testMultiSigAccExecTransferTo(t *testing.T, driver drivers.Driver, env execEnv, multiSigAddr string) {
params := &mty.MultiSigExecTransfer{
params := &mty.MultiSigExecTransferTo{
Symbol: Symbol,
Amount: InAmount,
Note: "testMultiSigAccExecTransferTo",
Execname: Asset,
From: AddrD,
To: multiSigAddr,
}
tx, _ := multiSigExecTransfer(params, false)
tx, _ := multiSigExecTransferTo(params, false)
tx, _ = signTx(tx, PrivKeyD)
receipt, err := driver.Exec(tx, env.index)
......@@ -837,7 +836,7 @@ func testMultiSigAccExecTransferTo(t *testing.T, driver drivers.Driver, env exec
//合约内转账到多重签名账户
func testMultiSigAccExecTransferFrom(t *testing.T, driver drivers.Driver, env execEnv, multiSigAddr string) {
params := &mty.MultiSigExecTransfer{
params := &mty.MultiSigExecTransferFrom{
Symbol: Symbol,
Amount: OutAmount,
Note: "testMultiSigAccExecTransferFrom",
......@@ -846,7 +845,7 @@ func testMultiSigAccExecTransferFrom(t *testing.T, driver drivers.Driver, env ex
To: AddrD,
}
tx, _ := multiSigExecTransfer(params, true)
tx, _ := multiSigExecTransferFrom(params, true)
tx, _ = signTx(tx, PrivKeyB)
receipt, err := driver.Exec(tx, env.index)
......@@ -993,20 +992,24 @@ func multiSigConfirmTx(parm *mty.MultiSigConfirmTx) (*types.Transaction, error)
}
return types.CreateFormatTx(types.ExecName(mty.MultiSigX), types.Encode(multiSig))
}
func multiSigExecTransfer(parm *mty.MultiSigExecTransfer, fromOrTo bool) (*types.Transaction, error) {
func multiSigExecTransferTo(parm *mty.MultiSigExecTransferTo, fromOrTo bool) (*types.Transaction, error) {
if parm == nil {
return nil, types.ErrInvalidParam
}
if fromOrTo {
multiSig := &mty.MultiSigAction{
Ty: mty.ActionMultiSigExecTransferFrom,
Value: &mty.MultiSigAction_MultiSigExecTransferFrom{MultiSigExecTransferFrom: parm},
Ty: mty.ActionMultiSigExecTransferTo,
Value: &mty.MultiSigAction_MultiSigExecTransferTo{MultiSigExecTransferTo: parm},
}
return types.CreateFormatTx(types.ExecName(mty.MultiSigX), types.Encode(multiSig))
}
func multiSigExecTransferFrom(parm *mty.MultiSigExecTransferFrom, fromOrTo bool) (*types.Transaction, error) {
if parm == nil {
return nil, types.ErrInvalidParam
}
multiSig := &mty.MultiSigAction{
Ty: mty.ActionMultiSigExecTransferTo,
Value: &mty.MultiSigAction_MultiSigExecTransferTo{MultiSigExecTransferTo: parm},
Ty: mty.ActionMultiSigExecTransferFrom,
Value: &mty.MultiSigAction_MultiSigExecTransferFrom{MultiSigExecTransferFrom: parm},
}
return types.CreateFormatTx(types.ExecName(mty.MultiSigX), types.Encode(multiSig))
}
......@@ -104,14 +104,23 @@ func (m *MultiSig) CheckTx(tx *types.Transaction, index int) error {
return nil
}
//MultiSigExecTransfer 交易的检测
if ato, ok := payload.(*mty.MultiSigExecTransfer); ok {
//MultiSigExecTransferTo 交易的检测
if ato, ok := payload.(*mty.MultiSigExecTransferTo); ok {
if err := address.CheckAddress(ato.GetTo()); err != nil {
return types.ErrInvalidAddress
}
//assets check
return mty.IsAssetsInvalid(ato.GetExecname(), ato.GetSymbol())
}
//MultiSigExecTransferFrom 交易的检测
if ato, ok := payload.(*mty.MultiSigExecTransferFrom); ok {
if err := address.CheckAddress(ato.GetTo()); err != nil {
return types.ErrInvalidAddress
}
//assets check
return mty.IsAssetsInvalid(ato.GetExecname(), ato.GetSymbol())
}
return nil
}
func checkAccountCreateTx(ato *mty.MultiSigAccCreate) error {
......@@ -377,16 +386,26 @@ func (m *MultiSig) saveMultiSigTransfer(tx *types.Transaction, SubmitOrConfirm,
if err != nil {
panic(err)
}
multiSigTransfer := &mty.MultiSigExecTransfer{}
var to string
var execname string
var symbol string
var amount int64
//addr-->multiSigAccAddr
//multiSigAccAddr-->addr
if SubmitOrConfirm {
if action.Ty == mty.ActionMultiSigExecTransferTo && action.GetMultiSigExecTransferTo() != nil {
multiSigTransfer = action.GetMultiSigExecTransferTo()
tx := action.GetMultiSigExecTransferTo()
to = tx.To
execname = tx.Execname
symbol = tx.Symbol
amount = tx.Amount
} else if action.Ty == mty.ActionMultiSigExecTransferFrom && action.GetMultiSigExecTransferFrom() != nil {
multiSigTransfer = action.GetMultiSigExecTransferFrom()
tx := action.GetMultiSigExecTransferFrom()
to = tx.To
execname = tx.Execname
symbol = tx.Symbol
amount = tx.Amount
} else {
return set, nil
}
......@@ -409,16 +428,15 @@ func (m *MultiSig) saveMultiSigTransfer(tx *types.Transaction, SubmitOrConfirm,
return nil, err
}
if multiSigTx.TxType == mty.TransferOperate {
multiSigTransfer = payload.GetMultiSigExecTransferFrom()
tx := payload.GetMultiSigExecTransferFrom()
to = tx.To
execname = tx.Execname
symbol = tx.Symbol
amount = tx.Amount
} else {
return set, nil
}
}
to := multiSigTransfer.To
execname := multiSigTransfer.Execname
symbol := multiSigTransfer.Symbol
amount := multiSigTransfer.Amount
kv, err := updateAddrReciver(m.GetLocalDB(), to, execname, symbol, amount, addOrRollback)
if err != nil {
return set, err
......
......@@ -77,8 +77,8 @@ message MultiSigAction {
MultiSigOwnerOperate multiSigOwnerOperate = 2;
MultiSigAccOperate multiSigAccOperate = 3;
MultiSigConfirmTx multiSigConfirmTx = 4;//确认或者撤销已确认
MultiSigExecTransfer multiSigExecTransferTo = 5;//合约中外部账户转账到多重签名账户,Addr --->multiSigAddr
MultiSigExecTransfer multiSigExecTransferFrom = 6;//合约中多重签名账户转账到外部账户,multiSigAddr--->Addr
MultiSigExecTransferTo multiSigExecTransferTo = 5;//合约中外部账户转账到多重签名账户,Addr --->multiSigAddr
MultiSigExecTransferFrom multiSigExecTransferFrom = 6;//合约中多重签名账户转账到外部账户,multiSigAddr--->Addr
}
int32 Ty = 7;
......@@ -109,10 +109,10 @@ message MultiSigAccOperate {
bool operateFlag = 4;
}
//多重签名合约中账户之间转币操作:增加一个from的字段实现MultiSigAddr<--->addr之间的转账
//多重签名合约中账户之间转币操作:增加一个from的字段实现MultiSigAddr--->addr之间的转账
//需要判断from地址是否是多重签名地址
//将MultiSig合约中from地址上execname+symbol的资产转移到to地址
message MultiSigExecTransfer {
message MultiSigExecTransferFrom {
string symbol = 1;
int64 amount = 2;
string note = 3;
......@@ -120,6 +120,16 @@ message MultiSigExecTransfer {
string to = 5;
string from = 6;
}
//多重签名合约中账户之间转币操作: addr --->MultiSigAddr之间的转账
//需要判断to地址是否是多重签名地址
//将MultiSig合约中签名地址上execname+symbol的资产转移到to地址
message MultiSigExecTransferTo {
string symbol = 1;
int64 amount = 2;
string note = 3;
string execname = 4;
string to = 5;
}
//多重签名账户withdraw交易的确认或者取消确认
//multisigaccaddr:多重签名账户地址
......
......@@ -107,11 +107,11 @@ func testCreateMultiSigConfirmTxCmd(t *testing.T, jrpc *jsonclient.JSONClient) e
return jrpc.Call("multisig.MultiSigConfirmTx", params, nil)
}
func testCreateMultiSigAccTransferInCmd(t *testing.T, jrpc *jsonclient.JSONClient) error {
params := &mty.MultiSigExecTransfer{}
params := &mty.MultiSigExecTransferTo{}
return jrpc.Call("multisig.MultiSigAccTransferInTx", params, nil)
}
func testCreateMultiSigAccTransferOutCmd(t *testing.T, jrpc *jsonclient.JSONClient) error {
params := &mty.MultiSigExecTransfer{}
params := &mty.MultiSigExecTransferFrom{}
return jrpc.Call("multisig.MultiSigAccTransferOutTx", params, nil)
}
......
......@@ -65,7 +65,7 @@ func (c *Jrpc) MultiSigConfirmTx(param *mty.MultiSigConfirmTx, result *interface
}
// MultiSigAccTransferInTx :构造在多重签名合约中转账到多重签名账户的交易
func (c *Jrpc) MultiSigAccTransferInTx(param *mty.MultiSigExecTransfer, result *interface{}) error {
func (c *Jrpc) MultiSigAccTransferInTx(param *mty.MultiSigExecTransferTo, result *interface{}) error {
if param == nil {
return types.ErrInvalidParam
}
......@@ -78,7 +78,7 @@ func (c *Jrpc) MultiSigAccTransferInTx(param *mty.MultiSigExecTransfer, result *
}
// MultiSigAccTransferOutTx :构造在多重签名合约中从多重签名账户转账的交易
func (c *Jrpc) MultiSigAccTransferOutTx(param *mty.MultiSigExecTransfer, result *interface{}) error {
func (c *Jrpc) MultiSigAccTransferOutTx(param *mty.MultiSigExecTransferFrom, result *interface{}) error {
if param == nil {
return types.ErrInvalidParam
}
......
......@@ -470,11 +470,11 @@ type MultiSigAction_MultiSigConfirmTx struct {
}
type MultiSigAction_MultiSigExecTransferTo struct {
MultiSigExecTransferTo *MultiSigExecTransfer `protobuf:"bytes,5,opt,name=multiSigExecTransferTo,proto3,oneof"`
MultiSigExecTransferTo *MultiSigExecTransferTo `protobuf:"bytes,5,opt,name=multiSigExecTransferTo,proto3,oneof"`
}
type MultiSigAction_MultiSigExecTransferFrom struct {
MultiSigExecTransferFrom *MultiSigExecTransfer `protobuf:"bytes,6,opt,name=multiSigExecTransferFrom,proto3,oneof"`
MultiSigExecTransferFrom *MultiSigExecTransferFrom `protobuf:"bytes,6,opt,name=multiSigExecTransferFrom,proto3,oneof"`
}
func (*MultiSigAction_MultiSigAccCreate) isMultiSigAction_Value() {}
......@@ -524,14 +524,14 @@ func (m *MultiSigAction) GetMultiSigConfirmTx() *MultiSigConfirmTx {
return nil
}
func (m *MultiSigAction) GetMultiSigExecTransferTo() *MultiSigExecTransfer {
func (m *MultiSigAction) GetMultiSigExecTransferTo() *MultiSigExecTransferTo {
if x, ok := m.GetValue().(*MultiSigAction_MultiSigExecTransferTo); ok {
return x.MultiSigExecTransferTo
}
return nil
}
func (m *MultiSigAction) GetMultiSigExecTransferFrom() *MultiSigExecTransfer {
func (m *MultiSigAction) GetMultiSigExecTransferFrom() *MultiSigExecTransferFrom {
if x, ok := m.GetValue().(*MultiSigAction_MultiSigExecTransferFrom); ok {
return x.MultiSigExecTransferFrom
}
......@@ -637,7 +637,7 @@ func _MultiSigAction_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto
if wire != proto.WireBytes {
return true, proto.ErrInternalBadWireType
}
msg := new(MultiSigExecTransfer)
msg := new(MultiSigExecTransferTo)
err := b.DecodeMessage(msg)
m.Value = &MultiSigAction_MultiSigExecTransferTo{msg}
return true, err
......@@ -645,7 +645,7 @@ func _MultiSigAction_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto
if wire != proto.WireBytes {
return true, proto.ErrInternalBadWireType
}
msg := new(MultiSigExecTransfer)
msg := new(MultiSigExecTransferFrom)
err := b.DecodeMessage(msg)
m.Value = &MultiSigAction_MultiSigExecTransferFrom{msg}
return true, err
......@@ -888,10 +888,10 @@ func (m *MultiSigAccOperate) GetOperateFlag() bool {
return false
}
//多重签名合约中账户之间转币操作:增加一个from的字段实现MultiSigAddr<--->addr之间的转账
//多重签名合约中账户之间转币操作:增加一个from的字段实现MultiSigAddr--->addr之间的转账
//需要判断from地址是否是多重签名地址
//将MultiSig合约中from地址上execname+symbol的资产转移到to地址
type MultiSigExecTransfer struct {
type MultiSigExecTransferFrom struct {
Symbol string `protobuf:"bytes,1,opt,name=symbol,proto3" json:"symbol,omitempty"`
Amount int64 `protobuf:"varint,2,opt,name=amount,proto3" json:"amount,omitempty"`
Note string `protobuf:"bytes,3,opt,name=note,proto3" json:"note,omitempty"`
......@@ -903,73 +903,147 @@ type MultiSigExecTransfer struct {
XXX_sizecache int32 `json:"-"`
}
func (m *MultiSigExecTransfer) Reset() { *m = MultiSigExecTransfer{} }
func (m *MultiSigExecTransfer) String() string { return proto.CompactTextString(m) }
func (*MultiSigExecTransfer) ProtoMessage() {}
func (*MultiSigExecTransfer) Descriptor() ([]byte, []int) {
func (m *MultiSigExecTransferFrom) Reset() { *m = MultiSigExecTransferFrom{} }
func (m *MultiSigExecTransferFrom) String() string { return proto.CompactTextString(m) }
func (*MultiSigExecTransferFrom) ProtoMessage() {}
func (*MultiSigExecTransferFrom) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{10}
}
func (m *MultiSigExecTransfer) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_MultiSigExecTransfer.Unmarshal(m, b)
func (m *MultiSigExecTransferFrom) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_MultiSigExecTransferFrom.Unmarshal(m, b)
}
func (m *MultiSigExecTransfer) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_MultiSigExecTransfer.Marshal(b, m, deterministic)
func (m *MultiSigExecTransferFrom) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_MultiSigExecTransferFrom.Marshal(b, m, deterministic)
}
func (m *MultiSigExecTransfer) XXX_Merge(src proto.Message) {
xxx_messageInfo_MultiSigExecTransfer.Merge(m, src)
func (m *MultiSigExecTransferFrom) XXX_Merge(src proto.Message) {
xxx_messageInfo_MultiSigExecTransferFrom.Merge(m, src)
}
func (m *MultiSigExecTransfer) XXX_Size() int {
return xxx_messageInfo_MultiSigExecTransfer.Size(m)
func (m *MultiSigExecTransferFrom) XXX_Size() int {
return xxx_messageInfo_MultiSigExecTransferFrom.Size(m)
}
func (m *MultiSigExecTransfer) XXX_DiscardUnknown() {
xxx_messageInfo_MultiSigExecTransfer.DiscardUnknown(m)
func (m *MultiSigExecTransferFrom) XXX_DiscardUnknown() {
xxx_messageInfo_MultiSigExecTransferFrom.DiscardUnknown(m)
}
var xxx_messageInfo_MultiSigExecTransfer proto.InternalMessageInfo
var xxx_messageInfo_MultiSigExecTransferFrom proto.InternalMessageInfo
func (m *MultiSigExecTransfer) GetSymbol() string {
func (m *MultiSigExecTransferFrom) GetSymbol() string {
if m != nil {
return m.Symbol
}
return ""
}
func (m *MultiSigExecTransfer) GetAmount() int64 {
func (m *MultiSigExecTransferFrom) GetAmount() int64 {
if m != nil {
return m.Amount
}
return 0
}
func (m *MultiSigExecTransfer) GetNote() string {
func (m *MultiSigExecTransferFrom) GetNote() string {
if m != nil {
return m.Note
}
return ""
}
func (m *MultiSigExecTransfer) GetExecname() string {
func (m *MultiSigExecTransferFrom) GetExecname() string {
if m != nil {
return m.Execname
}
return ""
}
func (m *MultiSigExecTransfer) GetTo() string {
func (m *MultiSigExecTransferFrom) GetTo() string {
if m != nil {
return m.To
}
return ""
}
func (m *MultiSigExecTransfer) GetFrom() string {
func (m *MultiSigExecTransferFrom) GetFrom() string {
if m != nil {
return m.From
}
return ""
}
//多重签名合约中账户之间转币操作: addr --->MultiSigAddr之间的转账
//需要判断to地址是否是多重签名地址
//将MultiSig合约中签名地址上execname+symbol的资产转移到to地址
type MultiSigExecTransferTo struct {
Symbol string `protobuf:"bytes,1,opt,name=symbol,proto3" json:"symbol,omitempty"`
Amount int64 `protobuf:"varint,2,opt,name=amount,proto3" json:"amount,omitempty"`
Note string `protobuf:"bytes,3,opt,name=note,proto3" json:"note,omitempty"`
Execname string `protobuf:"bytes,4,opt,name=execname,proto3" json:"execname,omitempty"`
To string `protobuf:"bytes,5,opt,name=to,proto3" json:"to,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *MultiSigExecTransferTo) Reset() { *m = MultiSigExecTransferTo{} }
func (m *MultiSigExecTransferTo) String() string { return proto.CompactTextString(m) }
func (*MultiSigExecTransferTo) ProtoMessage() {}
func (*MultiSigExecTransferTo) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{11}
}
func (m *MultiSigExecTransferTo) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_MultiSigExecTransferTo.Unmarshal(m, b)
}
func (m *MultiSigExecTransferTo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_MultiSigExecTransferTo.Marshal(b, m, deterministic)
}
func (m *MultiSigExecTransferTo) XXX_Merge(src proto.Message) {
xxx_messageInfo_MultiSigExecTransferTo.Merge(m, src)
}
func (m *MultiSigExecTransferTo) XXX_Size() int {
return xxx_messageInfo_MultiSigExecTransferTo.Size(m)
}
func (m *MultiSigExecTransferTo) XXX_DiscardUnknown() {
xxx_messageInfo_MultiSigExecTransferTo.DiscardUnknown(m)
}
var xxx_messageInfo_MultiSigExecTransferTo proto.InternalMessageInfo
func (m *MultiSigExecTransferTo) GetSymbol() string {
if m != nil {
return m.Symbol
}
return ""
}
func (m *MultiSigExecTransferTo) GetAmount() int64 {
if m != nil {
return m.Amount
}
return 0
}
func (m *MultiSigExecTransferTo) GetNote() string {
if m != nil {
return m.Note
}
return ""
}
func (m *MultiSigExecTransferTo) GetExecname() string {
if m != nil {
return m.Execname
}
return ""
}
func (m *MultiSigExecTransferTo) GetTo() string {
if m != nil {
return m.To
}
return ""
}
//多重签名账户withdraw交易的确认或者取消确认
//multisigaccaddr:多重签名账户地址
//transactionid:多重签名账户上的withdraw交易的内部id
......@@ -986,7 +1060,7 @@ func (m *MultiSigConfirmTx) Reset() { *m = MultiSigConfirmTx{} }
func (m *MultiSigConfirmTx) String() string { return proto.CompactTextString(m) }
func (*MultiSigConfirmTx) ProtoMessage() {}
func (*MultiSigConfirmTx) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{11}
return fileDescriptor_62b8b91adf3febfa, []int{12}
}
func (m *MultiSigConfirmTx) XXX_Unmarshal(b []byte) error {
......@@ -1041,7 +1115,7 @@ func (m *ReqMultiSigAccs) Reset() { *m = ReqMultiSigAccs{} }
func (m *ReqMultiSigAccs) String() string { return proto.CompactTextString(m) }
func (*ReqMultiSigAccs) ProtoMessage() {}
func (*ReqMultiSigAccs) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{12}
return fileDescriptor_62b8b91adf3febfa, []int{13}
}
func (m *ReqMultiSigAccs) XXX_Unmarshal(b []byte) error {
......@@ -1087,7 +1161,7 @@ func (m *ReplyMultiSigAccs) Reset() { *m = ReplyMultiSigAccs{} }
func (m *ReplyMultiSigAccs) String() string { return proto.CompactTextString(m) }
func (*ReplyMultiSigAccs) ProtoMessage() {}
func (*ReplyMultiSigAccs) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{13}
return fileDescriptor_62b8b91adf3febfa, []int{14}
}
func (m *ReplyMultiSigAccs) XXX_Unmarshal(b []byte) error {
......@@ -1127,7 +1201,7 @@ func (m *ReqMultiSigAccInfo) Reset() { *m = ReqMultiSigAccInfo{} }
func (m *ReqMultiSigAccInfo) String() string { return proto.CompactTextString(m) }
func (*ReqMultiSigAccInfo) ProtoMessage() {}
func (*ReqMultiSigAccInfo) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{14}
return fileDescriptor_62b8b91adf3febfa, []int{15}
}
func (m *ReqMultiSigAccInfo) XXX_Unmarshal(b []byte) error {
......@@ -1172,7 +1246,7 @@ func (m *ReplyMultiSigAccInfo) Reset() { *m = ReplyMultiSigAccInfo{} }
func (m *ReplyMultiSigAccInfo) String() string { return proto.CompactTextString(m) }
func (*ReplyMultiSigAccInfo) ProtoMessage() {}
func (*ReplyMultiSigAccInfo) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{15}
return fileDescriptor_62b8b91adf3febfa, []int{16}
}
func (m *ReplyMultiSigAccInfo) XXX_Unmarshal(b []byte) error {
......@@ -1251,7 +1325,7 @@ func (m *ReqMultiSigTxids) Reset() { *m = ReqMultiSigTxids{} }
func (m *ReqMultiSigTxids) String() string { return proto.CompactTextString(m) }
func (*ReqMultiSigTxids) ProtoMessage() {}
func (*ReqMultiSigTxids) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{16}
return fileDescriptor_62b8b91adf3febfa, []int{17}
}
func (m *ReqMultiSigTxids) XXX_Unmarshal(b []byte) error {
......@@ -1319,7 +1393,7 @@ func (m *ReplyMultiSigTxids) Reset() { *m = ReplyMultiSigTxids{} }
func (m *ReplyMultiSigTxids) String() string { return proto.CompactTextString(m) }
func (*ReplyMultiSigTxids) ProtoMessage() {}
func (*ReplyMultiSigTxids) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{17}
return fileDescriptor_62b8b91adf3febfa, []int{18}
}
func (m *ReplyMultiSigTxids) XXX_Unmarshal(b []byte) error {
......@@ -1367,7 +1441,7 @@ func (m *ReqMultiSigTxInfo) Reset() { *m = ReqMultiSigTxInfo{} }
func (m *ReqMultiSigTxInfo) String() string { return proto.CompactTextString(m) }
func (*ReqMultiSigTxInfo) ProtoMessage() {}
func (*ReqMultiSigTxInfo) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{18}
return fileDescriptor_62b8b91adf3febfa, []int{19}
}
func (m *ReqMultiSigTxInfo) XXX_Unmarshal(b []byte) error {
......@@ -1413,7 +1487,7 @@ func (m *ReplyMultiSigTxInfo) Reset() { *m = ReplyMultiSigTxInfo{} }
func (m *ReplyMultiSigTxInfo) String() string { return proto.CompactTextString(m) }
func (*ReplyMultiSigTxInfo) ProtoMessage() {}
func (*ReplyMultiSigTxInfo) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{19}
return fileDescriptor_62b8b91adf3febfa, []int{20}
}
func (m *ReplyMultiSigTxInfo) XXX_Unmarshal(b []byte) error {
......@@ -1455,7 +1529,7 @@ func (m *ReqMultiSigAccUnSpentToday) Reset() { *m = ReqMultiSigAccUnSpen
func (m *ReqMultiSigAccUnSpentToday) String() string { return proto.CompactTextString(m) }
func (*ReqMultiSigAccUnSpentToday) ProtoMessage() {}
func (*ReqMultiSigAccUnSpentToday) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{20}
return fileDescriptor_62b8b91adf3febfa, []int{21}
}
func (m *ReqMultiSigAccUnSpentToday) XXX_Unmarshal(b []byte) error {
......@@ -1508,7 +1582,7 @@ func (m *ReplyUnSpentAssets) Reset() { *m = ReplyUnSpentAssets{} }
func (m *ReplyUnSpentAssets) String() string { return proto.CompactTextString(m) }
func (*ReplyUnSpentAssets) ProtoMessage() {}
func (*ReplyUnSpentAssets) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{21}
return fileDescriptor_62b8b91adf3febfa, []int{22}
}
func (m *ReplyUnSpentAssets) XXX_Unmarshal(b []byte) error {
......@@ -1548,7 +1622,7 @@ func (m *UnSpentAssets) Reset() { *m = UnSpentAssets{} }
func (m *UnSpentAssets) String() string { return proto.CompactTextString(m) }
func (*UnSpentAssets) ProtoMessage() {}
func (*UnSpentAssets) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{22}
return fileDescriptor_62b8b91adf3febfa, []int{23}
}
func (m *UnSpentAssets) XXX_Unmarshal(b []byte) error {
......@@ -1595,7 +1669,7 @@ func (m *ReceiptMultiSig) Reset() { *m = ReceiptMultiSig{} }
func (m *ReceiptMultiSig) String() string { return proto.CompactTextString(m) }
func (*ReceiptMultiSig) ProtoMessage() {}
func (*ReceiptMultiSig) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{23}
return fileDescriptor_62b8b91adf3febfa, []int{24}
}
func (m *ReceiptMultiSig) XXX_Unmarshal(b []byte) error {
......@@ -1636,7 +1710,7 @@ func (m *ReceiptOwnerAddOrDel) Reset() { *m = ReceiptOwnerAddOrDel{} }
func (m *ReceiptOwnerAddOrDel) String() string { return proto.CompactTextString(m) }
func (*ReceiptOwnerAddOrDel) ProtoMessage() {}
func (*ReceiptOwnerAddOrDel) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{24}
return fileDescriptor_62b8b91adf3febfa, []int{25}
}
func (m *ReceiptOwnerAddOrDel) XXX_Unmarshal(b []byte) error {
......@@ -1694,7 +1768,7 @@ func (m *ReceiptOwnerModOrRep) Reset() { *m = ReceiptOwnerModOrRep{} }
func (m *ReceiptOwnerModOrRep) String() string { return proto.CompactTextString(m) }
func (*ReceiptOwnerModOrRep) ProtoMessage() {}
func (*ReceiptOwnerModOrRep) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{25}
return fileDescriptor_62b8b91adf3febfa, []int{26}
}
func (m *ReceiptOwnerModOrRep) XXX_Unmarshal(b []byte) error {
......@@ -1758,7 +1832,7 @@ func (m *ReceiptWeightModify) Reset() { *m = ReceiptWeightModify{} }
func (m *ReceiptWeightModify) String() string { return proto.CompactTextString(m) }
func (*ReceiptWeightModify) ProtoMessage() {}
func (*ReceiptWeightModify) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{26}
return fileDescriptor_62b8b91adf3febfa, []int{27}
}
func (m *ReceiptWeightModify) XXX_Unmarshal(b []byte) error {
......@@ -1816,7 +1890,7 @@ func (m *ReceiptDailyLimitOperate) Reset() { *m = ReceiptDailyLimitOpera
func (m *ReceiptDailyLimitOperate) String() string { return proto.CompactTextString(m) }
func (*ReceiptDailyLimitOperate) ProtoMessage() {}
func (*ReceiptDailyLimitOperate) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{27}
return fileDescriptor_62b8b91adf3febfa, []int{28}
}
func (m *ReceiptDailyLimitOperate) XXX_Unmarshal(b []byte) error {
......@@ -1880,7 +1954,7 @@ func (m *ReceiptConfirmTx) Reset() { *m = ReceiptConfirmTx{} }
func (m *ReceiptConfirmTx) String() string { return proto.CompactTextString(m) }
func (*ReceiptConfirmTx) ProtoMessage() {}
func (*ReceiptConfirmTx) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{28}
return fileDescriptor_62b8b91adf3febfa, []int{29}
}
func (m *ReceiptConfirmTx) XXX_Unmarshal(b []byte) error {
......@@ -1929,7 +2003,7 @@ func (m *ReceiptAccDailyLimitUpdate) Reset() { *m = ReceiptAccDailyLimit
func (m *ReceiptAccDailyLimitUpdate) String() string { return proto.CompactTextString(m) }
func (*ReceiptAccDailyLimitUpdate) ProtoMessage() {}
func (*ReceiptAccDailyLimitUpdate) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{29}
return fileDescriptor_62b8b91adf3febfa, []int{30}
}
func (m *ReceiptAccDailyLimitUpdate) XXX_Unmarshal(b []byte) error {
......@@ -1988,7 +2062,7 @@ func (m *ReceiptMultiSigTx) Reset() { *m = ReceiptMultiSigTx{} }
func (m *ReceiptMultiSigTx) String() string { return proto.CompactTextString(m) }
func (*ReceiptMultiSigTx) ProtoMessage() {}
func (*ReceiptMultiSigTx) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{30}
return fileDescriptor_62b8b91adf3febfa, []int{31}
}
func (m *ReceiptMultiSigTx) XXX_Unmarshal(b []byte) error {
......@@ -2063,7 +2137,7 @@ func (m *ReceiptTxCountUpdate) Reset() { *m = ReceiptTxCountUpdate{} }
func (m *ReceiptTxCountUpdate) String() string { return proto.CompactTextString(m) }
func (*ReceiptTxCountUpdate) ProtoMessage() {}
func (*ReceiptTxCountUpdate) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{31}
return fileDescriptor_62b8b91adf3febfa, []int{32}
}
func (m *ReceiptTxCountUpdate) XXX_Unmarshal(b []byte) error {
......@@ -2111,7 +2185,7 @@ func (m *MultiSigTxOwner) Reset() { *m = MultiSigTxOwner{} }
func (m *MultiSigTxOwner) String() string { return proto.CompactTextString(m) }
func (*MultiSigTxOwner) ProtoMessage() {}
func (*MultiSigTxOwner) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{32}
return fileDescriptor_62b8b91adf3febfa, []int{33}
}
func (m *MultiSigTxOwner) XXX_Unmarshal(b []byte) error {
......@@ -2164,7 +2238,7 @@ func (m *Uint64) Reset() { *m = Uint64{} }
func (m *Uint64) String() string { return proto.CompactTextString(m) }
func (*Uint64) ProtoMessage() {}
func (*Uint64) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{33}
return fileDescriptor_62b8b91adf3febfa, []int{34}
}
func (m *Uint64) XXX_Unmarshal(b []byte) error {
......@@ -2206,7 +2280,7 @@ func (m *AccountAssets) Reset() { *m = AccountAssets{} }
func (m *AccountAssets) String() string { return proto.CompactTextString(m) }
func (*AccountAssets) ProtoMessage() {}
func (*AccountAssets) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{34}
return fileDescriptor_62b8b91adf3febfa, []int{35}
}
func (m *AccountAssets) XXX_Unmarshal(b []byte) error {
......@@ -2262,7 +2336,7 @@ func (m *ReqAccAssets) Reset() { *m = ReqAccAssets{} }
func (m *ReqAccAssets) String() string { return proto.CompactTextString(m) }
func (*ReqAccAssets) ProtoMessage() {}
func (*ReqAccAssets) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{35}
return fileDescriptor_62b8b91adf3febfa, []int{36}
}
func (m *ReqAccAssets) XXX_Unmarshal(b []byte) error {
......@@ -2315,7 +2389,7 @@ func (m *ReplyAccAssets) Reset() { *m = ReplyAccAssets{} }
func (m *ReplyAccAssets) String() string { return proto.CompactTextString(m) }
func (*ReplyAccAssets) ProtoMessage() {}
func (*ReplyAccAssets) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{36}
return fileDescriptor_62b8b91adf3febfa, []int{37}
}
func (m *ReplyAccAssets) XXX_Unmarshal(b []byte) error {
......@@ -2357,7 +2431,7 @@ func (m *AccAssets) Reset() { *m = AccAssets{} }
func (m *AccAssets) String() string { return proto.CompactTextString(m) }
func (*AccAssets) ProtoMessage() {}
func (*AccAssets) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{37}
return fileDescriptor_62b8b91adf3febfa, []int{38}
}
func (m *AccAssets) XXX_Unmarshal(b []byte) error {
......@@ -2411,7 +2485,7 @@ func (m *Assets) Reset() { *m = Assets{} }
func (m *Assets) String() string { return proto.CompactTextString(m) }
func (*Assets) ProtoMessage() {}
func (*Assets) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{38}
return fileDescriptor_62b8b91adf3febfa, []int{39}
}
func (m *Assets) XXX_Unmarshal(b []byte) error {
......@@ -2458,7 +2532,7 @@ func (m *AccAddress) Reset() { *m = AccAddress{} }
func (m *AccAddress) String() string { return proto.CompactTextString(m) }
func (*AccAddress) ProtoMessage() {}
func (*AccAddress) Descriptor() ([]byte, []int) {
return fileDescriptor_62b8b91adf3febfa, []int{39}
return fileDescriptor_62b8b91adf3febfa, []int{40}
}
func (m *AccAddress) XXX_Unmarshal(b []byte) error {
......@@ -2497,7 +2571,8 @@ func init() {
proto.RegisterType((*MultiSigAccCreate)(nil), "types.MultiSigAccCreate")
proto.RegisterType((*MultiSigOwnerOperate)(nil), "types.MultiSigOwnerOperate")
proto.RegisterType((*MultiSigAccOperate)(nil), "types.MultiSigAccOperate")
proto.RegisterType((*MultiSigExecTransfer)(nil), "types.MultiSigExecTransfer")
proto.RegisterType((*MultiSigExecTransferFrom)(nil), "types.MultiSigExecTransferFrom")
proto.RegisterType((*MultiSigExecTransferTo)(nil), "types.MultiSigExecTransferTo")
proto.RegisterType((*MultiSigConfirmTx)(nil), "types.MultiSigConfirmTx")
proto.RegisterType((*ReqMultiSigAccs)(nil), "types.ReqMultiSigAccs")
proto.RegisterType((*ReplyMultiSigAccs)(nil), "types.ReplyMultiSigAccs")
......@@ -2532,100 +2607,101 @@ func init() {
func init() { proto.RegisterFile("multisig.proto", fileDescriptor_62b8b91adf3febfa) }
var fileDescriptor_62b8b91adf3febfa = []byte{
// 1517 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x58, 0x5f, 0x6f, 0xdc, 0xc4,
0x16, 0xaf, 0xbd, 0x7f, 0x92, 0x3d, 0x49, 0xb6, 0xc9, 0xdc, 0x55, 0xaf, 0x6f, 0x6e, 0x55, 0xad,
0x46, 0xbd, 0xd5, 0xaa, 0xba, 0x44, 0xa8, 0x2d, 0x94, 0x22, 0x81, 0xba, 0x34, 0xad, 0x52, 0x95,
0x34, 0x65, 0xea, 0x08, 0xc1, 0x9b, 0x63, 0x4f, 0x52, 0x8b, 0x5d, 0x7b, 0x6b, 0x7b, 0x93, 0x5d,
0x40, 0x2a, 0xdf, 0x80, 0x37, 0x1e, 0xfa, 0xc4, 0x87, 0xe0, 0x81, 0x4f, 0x00, 0x5f, 0x80, 0x6f,
0xc1, 0x33, 0xe2, 0x15, 0xcd, 0x3f, 0x7b, 0xc6, 0x76, 0x8a, 0x2b, 0x15, 0x09, 0xf1, 0xe6, 0xf3,
0x9b, 0x33, 0x67, 0xce, 0xbf, 0x39, 0xe7, 0x78, 0xa0, 0x3f, 0x9d, 0x4f, 0xb2, 0x30, 0x0d, 0x4f,
0x76, 0x66, 0x49, 0x9c, 0xc5, 0xa8, 0x93, 0x2d, 0x67, 0x34, 0xdd, 0xde, 0xf0, 0x7c, 0x3f, 0x9e,
0x47, 0x99, 0x40, 0xf1, 0xaf, 0x16, 0xac, 0xee, 0x33, 0xc6, 0xa7, 0xe1, 0x09, 0xba, 0x02, 0xe0,
0x27, 0xd4, 0xcb, 0xe8, 0x38, 0x08, 0x12, 0xc7, 0x1a, 0x5a, 0xa3, 0x1e, 0xd1, 0x10, 0x84, 0x61,
0x7d, 0x2a, 0x79, 0x39, 0x87, 0xcd, 0x39, 0x0c, 0x0c, 0x5d, 0x85, 0x6e, 0x7c, 0x16, 0xd1, 0x24,
0x75, 0x5a, 0xc3, 0xd6, 0x68, 0xed, 0xc6, 0xfa, 0x0e, 0x3f, 0x77, 0xe7, 0x80, 0x81, 0x44, 0xae,
0xa1, 0x9b, 0xb0, 0x16, 0x78, 0xe1, 0x64, 0xf9, 0x71, 0x38, 0x0d, 0xb3, 0xd4, 0x69, 0x73, 0xd6,
0x2d, 0xc9, 0xba, 0x9b, 0xaf, 0x10, 0x9d, 0x0b, 0x39, 0xb0, 0x92, 0x2d, 0xee, 0x31, 0xe5, 0x9d,
0xce, 0xd0, 0x1a, 0xb5, 0x89, 0x22, 0xd1, 0x35, 0xe8, 0x27, 0xf4, 0xf9, 0x3c, 0x4c, 0x68, 0xf0,
0x29, 0x0d, 0x4f, 0x9e, 0x65, 0x4e, 0x97, 0x33, 0x94, 0x50, 0xfc, 0x00, 0xfa, 0xf7, 0xe2, 0xe8,
0x38, 0x4c, 0xa6, 0x34, 0xe0, 0x0a, 0xa1, 0x5b, 0xd0, 0xf7, 0x0d, 0xc4, 0xb1, 0x6a, 0xd4, 0x2e,
0xf1, 0xe0, 0x9f, 0x2c, 0x00, 0xe5, 0x35, 0x77, 0x81, 0x10, 0xb4, 0xb3, 0x45, 0x18, 0x70, 0x8f,
0xb5, 0x09, 0xff, 0x46, 0x97, 0xa0, 0x9b, 0x2d, 0xf6, 0xbc, 0xf4, 0x99, 0xf4, 0x92, 0xa4, 0xd0,
0x36, 0xac, 0xd2, 0x05, 0xf5, 0xe7, 0x19, 0x0d, 0x9c, 0xd6, 0xd0, 0x1a, 0xad, 0x92, 0x9c, 0x16,
0x7b, 0xdc, 0xe5, 0x8c, 0x3a, 0x6d, 0x2e, 0x49, 0x52, 0x15, 0xbf, 0x77, 0x6a, 0xfc, 0x5e, 0x35,
0xa4, 0xdb, 0xc0, 0x90, 0x0f, 0xa0, 0x23, 0xfc, 0x70, 0x19, 0x7a, 0x3c, 0x34, 0x5a, 0xe4, 0x0b,
0x80, 0x29, 0x76, 0x26, 0xfc, 0x6a, 0x0b, 0xc5, 0x04, 0x85, 0xbf, 0xb3, 0x00, 0x8a, 0x68, 0x31,
0xb6, 0x74, 0x39, 0x3d, 0x8a, 0x27, 0x52, 0x82, 0xa4, 0x18, 0xce, 0x6c, 0xa4, 0x2a, 0x63, 0x24,
0xc5, 0xf2, 0xad, 0x88, 0x2f, 0xf7, 0x46, 0x9b, 0x68, 0x08, 0x5b, 0x4f, 0x67, 0x34, 0xca, 0xdc,
0x38, 0xf0, 0x96, 0xd2, 0x27, 0x1a, 0xc2, 0x12, 0x62, 0xe2, 0xa5, 0xd9, 0xae, 0xb7, 0xe4, 0x2e,
0x69, 0x11, 0x45, 0xe2, 0x23, 0xd8, 0x7c, 0xca, 0xcf, 0xfe, 0xeb, 0xb4, 0xc3, 0xdf, 0xb6, 0xa1,
0xaf, 0x92, 0x60, 0xec, 0x67, 0x61, 0x1c, 0xa1, 0x3d, 0xd8, 0xca, 0x83, 0xe2, 0xfb, 0xf7, 0xf8,
0xcd, 0xe1, 0xa7, 0xad, 0xdd, 0x70, 0x64, 0x1c, 0xf6, 0xcb, 0xeb, 0x7b, 0x17, 0x48, 0x75, 0x13,
0xfa, 0x04, 0x06, 0x0a, 0xe4, 0x01, 0x3a, 0x98, 0xd1, 0x84, 0x09, 0xb3, 0xb9, 0xb0, 0xff, 0x96,
0x84, 0xe9, 0x2c, 0x7b, 0x17, 0x48, 0xed, 0x56, 0xf4, 0x08, 0x90, 0x76, 0x8e, 0x12, 0xd8, 0xe2,
0x02, 0xff, 0x53, 0xd5, 0xae, 0x10, 0x57, 0xb3, 0x4d, 0xb7, 0x54, 0xde, 0x28, 0x77, 0xc1, 0x23,
0x54, 0xb5, 0x34, 0x5f, 0xd7, 0x2d, 0xcd, 0x41, 0x74, 0x08, 0x97, 0x14, 0x78, 0x7f, 0x41, 0x7d,
0x37, 0xf1, 0xa2, 0xf4, 0x98, 0x26, 0x6e, 0xcc, 0x63, 0x5a, 0xb5, 0x55, 0x67, 0xda, 0xbb, 0x40,
0xce, 0xd9, 0x8c, 0x3e, 0x03, 0xa7, 0x6e, 0xe5, 0x41, 0x12, 0x4f, 0x79, 0x71, 0xf8, 0x53, 0xc1,
0xe7, 0x6e, 0x47, 0x7d, 0xb0, 0xdd, 0xa5, 0xb3, 0x32, 0xb4, 0x46, 0x1d, 0x62, 0xbb, 0xcb, 0x8f,
0x56, 0xa0, 0x73, 0xea, 0x4d, 0xe6, 0x14, 0xbf, 0xb4, 0x60, 0xab, 0x12, 0x5f, 0xad, 0x22, 0x5a,
0xaf, 0xa8, 0x88, 0xd5, 0x12, 0x66, 0xd7, 0x95, 0x30, 0x74, 0xbb, 0x92, 0x95, 0x6b, 0x37, 0xfe,
0x2d, 0x25, 0x96, 0x53, 0xde, 0x48, 0xd7, 0x1f, 0x2d, 0x18, 0xd4, 0xe5, 0x0b, 0x1a, 0xc1, 0x45,
0x2d, 0xc0, 0x5a, 0x01, 0x28, 0xc3, 0xac, 0x76, 0xc5, 0x13, 0x59, 0x5d, 0xc4, 0x5d, 0xc9, 0x69,
0xb6, 0x16, 0xd1, 0x33, 0xb1, 0xd6, 0x12, 0x6b, 0x8a, 0x66, 0xc5, 0x25, 0xa2, 0x67, 0xd2, 0x2c,
0x71, 0x8d, 0x0b, 0x00, 0x0d, 0x61, 0x2d, 0x16, 0xaa, 0x3c, 0x98, 0x78, 0x27, 0xb2, 0xb4, 0xeb,
0x10, 0xfe, 0xd9, 0x02, 0x54, 0xcd, 0xcc, 0xd7, 0x50, 0xdc, 0x74, 0x9a, 0xdd, 0xd8, 0x69, 0xe8,
0xff, 0xb0, 0x15, 0xd1, 0x33, 0x62, 0x06, 0x46, 0x94, 0x82, 0xea, 0x42, 0xd9, 0x92, 0x36, 0x2f,
0xef, 0x86, 0x25, 0x2f, 0xb5, 0x20, 0xe8, 0x79, 0xf5, 0xaa, 0xe2, 0xe4, 0x4d, 0x79, 0xcb, 0xb3,
0x79, 0x85, 0x93, 0x14, 0x6b, 0x39, 0x51, 0x2c, 0xaf, 0x6f, 0x8f, 0xf0, 0x6f, 0xd5, 0x5a, 0x22,
0x6f, 0x2a, 0x1a, 0x48, 0x8f, 0xe4, 0x34, 0xcb, 0xd9, 0x2c, 0x96, 0x8d, 0xc3, 0xce, 0x62, 0xb6,
0xff, 0x58, 0x5d, 0x85, 0x1e, 0xe1, 0xdf, 0xf8, 0xab, 0x22, 0x7b, 0x8b, 0xeb, 0xd9, 0xdc, 0xc9,
0xbc, 0x0b, 0x3e, 0x0c, 0x64, 0xde, 0xf2, 0x6f, 0xb6, 0x5b, 0x76, 0x9c, 0x83, 0x84, 0xd0, 0xd3,
0xf8, 0x0b, 0x2a, 0x9b, 0x5e, 0x19, 0xc6, 0x77, 0xe0, 0x22, 0xa1, 0xcf, 0xb5, 0x28, 0xa7, 0x68,
0x00, 0x9d, 0x34, 0xf3, 0x92, 0x8c, 0x1f, 0xd8, 0x22, 0x82, 0x40, 0x9b, 0xd0, 0xa2, 0x51, 0x20,
0xdd, 0xc1, 0x3e, 0xf1, 0x5b, 0xb0, 0x45, 0xe8, 0x6c, 0xb2, 0x34, 0x36, 0x3b, 0xb0, 0xe2, 0x05,
0x41, 0x42, 0x53, 0x71, 0xed, 0x7a, 0x44, 0x91, 0xf8, 0x43, 0x40, 0xe6, 0x49, 0x0f, 0xa3, 0xe3,
0xb8, 0xb9, 0x9d, 0xf8, 0x77, 0x0b, 0x06, 0xe5, 0xf3, 0xb8, 0x88, 0x7f, 0xfc, 0xf8, 0xf4, 0xbd,
0x05, 0x9b, 0x9a, 0xeb, 0xdc, 0x45, 0x18, 0xa4, 0x15, 0xab, 0xac, 0x1a, 0xab, 0xb6, 0x61, 0x95,
0x65, 0x98, 0x5b, 0xa4, 0x47, 0x4e, 0xf3, 0xa1, 0x27, 0xe6, 0x2b, 0x2d, 0x39, 0xf4, 0x70, 0x8a,
0xa9, 0x3b, 0xa3, 0x51, 0x10, 0x46, 0xea, 0x22, 0x29, 0xd2, 0x18, 0xa1, 0x3a, 0xe6, 0x08, 0x85,
0x1f, 0xb3, 0xe0, 0x6a, 0xb1, 0x69, 0xae, 0xe3, 0x00, 0x3a, 0x6c, 0x70, 0x4b, 0x1d, 0x7b, 0xd8,
0x1a, 0xb5, 0x89, 0x20, 0xf0, 0x23, 0x96, 0x5b, 0x9a, 0xc5, 0x3c, 0xd0, 0x4d, 0xc4, 0xd5, 0xdc,
0x06, 0xfc, 0x04, 0xfe, 0x55, 0x52, 0x8e, 0x8b, 0xbb, 0x23, 0x67, 0xf5, 0x1c, 0x91, 0x23, 0xc3,
0x56, 0xa9, 0x41, 0xb9, 0x0b, 0x52, 0x62, 0xc4, 0x33, 0xd8, 0x36, 0x73, 0xf9, 0x30, 0x7a, 0x5a,
0xcc, 0x47, 0x4d, 0xf4, 0x3c, 0x6f, 0xfa, 0x29, 0x0a, 0x52, 0x4b, 0x2f, 0x48, 0xf8, 0x89, 0x74,
0xb0, 0x3c, 0x68, 0x9c, 0xa6, 0x34, 0x4b, 0xd1, 0xfb, 0xb0, 0x31, 0xd7, 0x01, 0x99, 0xbd, 0x03,
0x69, 0x81, 0xc1, 0x4c, 0x4c, 0x56, 0xfc, 0x18, 0x36, 0x4c, 0x61, 0xff, 0x83, 0xae, 0x27, 0xa4,
0x08, 0x3f, 0x6c, 0x48, 0x29, 0x72, 0xbb, 0x5c, 0x2c, 0x95, 0xc6, 0xb6, 0x2a, 0x8d, 0xf8, 0x1d,
0x56, 0x49, 0x7c, 0x1a, 0xce, 0xb2, 0xfc, 0xc7, 0xa6, 0x81, 0x23, 0xf0, 0x97, 0xec, 0x56, 0xf3,
0x6d, 0x07, 0x72, 0xee, 0x3d, 0x48, 0x76, 0xe9, 0xa4, 0x91, 0x13, 0x31, 0x74, 0xe2, 0xbc, 0x2b,
0x96, 0x2f, 0xad, 0x58, 0x62, 0x59, 0xeb, 0x49, 0x99, 0x6a, 0xf0, 0x57, 0x34, 0xfe, 0xc1, 0x32,
0x0f, 0xdf, 0x8f, 0x03, 0x56, 0x18, 0x67, 0x8d, 0x0e, 0xbf, 0x0e, 0xbd, 0x59, 0x42, 0x4f, 0x0f,
0xce, 0x55, 0xa0, 0x58, 0x46, 0x6f, 0xc3, 0xba, 0x3f, 0x4f, 0x12, 0x1a, 0x65, 0x45, 0xa7, 0x2e,
0xb3, 0x1b, 0x1c, 0x4c, 0xed, 0xa9, 0xd4, 0x46, 0xde, 0xc3, 0x9c, 0xc6, 0x2f, 0x58, 0x3e, 0x73,
0xad, 0x45, 0x81, 0xd8, 0x8f, 0x83, 0xf0, 0xb8, 0x59, 0xda, 0x5d, 0x01, 0x60, 0x5a, 0x19, 0xa3,
0x8e, 0x86, 0xa0, 0xab, 0xb0, 0x21, 0xd5, 0x30, 0x9a, 0xae, 0x09, 0xe2, 0x5f, 0x2c, 0x70, 0xa4,
0x06, 0x45, 0xd5, 0x53, 0xe3, 0x41, 0x13, 0x35, 0xee, 0x40, 0x9f, 0x1d, 0xba, 0x5b, 0x1e, 0x0e,
0x6a, 0x6a, 0x69, 0x89, 0x11, 0xdd, 0xe6, 0x1a, 0xee, 0x96, 0x67, 0xb1, 0x9a, 0x9d, 0x26, 0x1f,
0x9b, 0x12, 0x78, 0xe0, 0x85, 0xb7, 0xd4, 0x94, 0xa0, 0x41, 0xf8, 0x1b, 0x5e, 0x67, 0xb9, 0x59,
0x45, 0x23, 0xbe, 0x5b, 0x34, 0x28, 0x77, 0xa1, 0x7e, 0x55, 0xd9, 0x89, 0x97, 0x2a, 0x65, 0x42,
0xc4, 0xb1, 0xcc, 0x8e, 0xae, 0xc3, 0xa6, 0xfa, 0xfd, 0xcb, 0xbb, 0xb1, 0xcd, 0x4f, 0xaf, 0xe0,
0x2c, 0x23, 0xb7, 0xa5, 0x0a, 0x63, 0xdf, 0x2f, 0xb4, 0x3f, 0x9c, 0x05, 0x7f, 0x63, 0xdf, 0xe2,
0xdf, 0x2c, 0x56, 0xaf, 0x8d, 0xcb, 0xff, 0x46, 0x5c, 0x87, 0x61, 0x9d, 0xa9, 0x78, 0x5f, 0xb5,
0x1d, 0xe1, 0x36, 0x03, 0x63, 0x71, 0xf5, 0xe7, 0xc9, 0x7d, 0xf3, 0xe7, 0x5e, 0x87, 0xd8, 0x8c,
0x91, 0xce, 0x8f, 0x58, 0x8a, 0x26, 0x32, 0xae, 0x32, 0xfa, 0x65, 0x58, 0x7b, 0x3d, 0xe8, 0x18,
0xaf, 0x07, 0xc5, 0x0b, 0x41, 0x57, 0x7f, 0x21, 0xc0, 0x9f, 0xe7, 0xf5, 0xc3, 0x15, 0x3d, 0xfd,
0x35, 0xe2, 0xc4, 0xc6, 0x96, 0x79, 0x22, 0xf7, 0xa9, 0xab, 0x58, 0x20, 0xf8, 0x05, 0x5c, 0xdc,
0xaf, 0xba, 0xa3, 0x59, 0x03, 0x0c, 0xb5, 0x06, 0x18, 0x06, 0x35, 0x8f, 0x14, 0x75, 0x05, 0xa8,
0xfc, 0x48, 0x71, 0x19, 0xba, 0x87, 0x61, 0x94, 0xbd, 0x7b, 0x8b, 0xc9, 0x0c, 0xbc, 0xcc, 0x53,
0x0f, 0x2d, 0xec, 0x1b, 0x27, 0xb0, 0x31, 0x16, 0x4f, 0x5a, 0xb2, 0x7d, 0x34, 0x51, 0xae, 0x68,
0x31, 0x76, 0xb3, 0x16, 0xd3, 0xd2, 0xa7, 0x6f, 0x1c, 0xc3, 0x3a, 0xa1, 0xcf, 0xd9, 0x40, 0xf8,
0xc6, 0x8f, 0x1c, 0x40, 0x27, 0x4c, 0xc7, 0x13, 0xd5, 0x23, 0x04, 0x81, 0xef, 0x42, 0x9f, 0x77,
0xdd, 0xe2, 0xc8, 0x1d, 0xe8, 0x79, 0x8a, 0x90, 0x3f, 0x96, 0x9b, 0x4a, 0xa2, 0xc2, 0x49, 0xc1,
0x82, 0xbf, 0x86, 0x5e, 0xb1, 0xb9, 0x61, 0x87, 0xbd, 0x02, 0x90, 0x50, 0xff, 0x74, 0xac, 0xff,
0x80, 0x68, 0x08, 0x1a, 0xc1, 0x8a, 0x7c, 0x4d, 0x94, 0x71, 0xec, 0x17, 0x1a, 0x30, 0x94, 0xa8,
0x65, 0xfc, 0x1e, 0x74, 0xc7, 0xb9, 0x4b, 0xe5, 0xbc, 0x61, 0x9d, 0x33, 0x6f, 0xd8, 0xc6, 0xbc,
0x71, 0x0d, 0x40, 0x0e, 0xde, 0x34, 0x7d, 0xc5, 0x54, 0x7f, 0xd4, 0xe5, 0xef, 0x99, 0x37, 0xff,
0x08, 0x00, 0x00, 0xff, 0xff, 0x30, 0x1f, 0xdd, 0x3b, 0xf7, 0x14, 0x00, 0x00,
// 1535 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x18, 0xdd, 0x6e, 0xdc, 0x44,
0x37, 0xde, 0xbf, 0x64, 0xcf, 0x26, 0xdb, 0x64, 0xbe, 0x55, 0x3e, 0x13, 0x4a, 0x59, 0x8d, 0x4a,
0xb5, 0xaa, 0x20, 0x42, 0x69, 0xa1, 0x14, 0x09, 0xd4, 0xa5, 0x69, 0x95, 0xaa, 0xa4, 0x29, 0xd3,
0xad, 0x2a, 0x21, 0x71, 0xe1, 0xd8, 0x93, 0xd4, 0x62, 0xd7, 0xde, 0xda, 0xde, 0x64, 0x17, 0x90,
0xca, 0x25, 0x2f, 0x00, 0x17, 0x5c, 0x20, 0x1e, 0x82, 0x0b, 0x9e, 0x00, 0x5e, 0x80, 0xb7, 0xe0,
0x1a, 0x71, 0x8b, 0xe6, 0xcf, 0x9e, 0xb1, 0x9d, 0xc8, 0x95, 0x0a, 0x42, 0xdc, 0xf9, 0x9c, 0x39,
0x73, 0xfe, 0xff, 0x3c, 0xd0, 0x9d, 0xcc, 0xc6, 0x89, 0x1f, 0xfb, 0xc7, 0xdb, 0xd3, 0x28, 0x4c,
0x42, 0xd4, 0x4c, 0x16, 0x53, 0x1a, 0x6f, 0xad, 0x39, 0xae, 0x1b, 0xce, 0x82, 0x44, 0x60, 0xf1,
0xef, 0x16, 0xac, 0xec, 0x33, 0xc2, 0x47, 0xfe, 0x31, 0xba, 0x04, 0xe0, 0x46, 0xd4, 0x49, 0xe8,
0xd0, 0xf3, 0x22, 0xdb, 0xea, 0x5b, 0x83, 0x36, 0xd1, 0x30, 0x08, 0xc3, 0xea, 0x44, 0xd2, 0x72,
0x8a, 0x1a, 0xa7, 0x30, 0x70, 0xe8, 0x32, 0xb4, 0xc2, 0xd3, 0x80, 0x46, 0xb1, 0x5d, 0xef, 0xd7,
0x07, 0x9d, 0x9d, 0xd5, 0x6d, 0x2e, 0x77, 0xfb, 0x80, 0x21, 0x89, 0x3c, 0x43, 0xd7, 0xa0, 0xe3,
0x39, 0xfe, 0x78, 0xf1, 0xb1, 0x3f, 0xf1, 0x93, 0xd8, 0x6e, 0x70, 0xd2, 0x0d, 0x49, 0xba, 0x9b,
0x9e, 0x10, 0x9d, 0x0a, 0xd9, 0xb0, 0x9c, 0xcc, 0x6f, 0x33, 0xe5, 0xed, 0x66, 0xdf, 0x1a, 0x34,
0x88, 0x02, 0xd1, 0x15, 0xe8, 0x46, 0xf4, 0xd9, 0xcc, 0x8f, 0xa8, 0xf7, 0x84, 0xfa, 0xc7, 0x4f,
0x13, 0xbb, 0xc5, 0x09, 0x72, 0x58, 0x7c, 0x17, 0xba, 0xb7, 0xc3, 0xe0, 0xc8, 0x8f, 0x26, 0xd4,
0xe3, 0x0a, 0xa1, 0xeb, 0xd0, 0x75, 0x0d, 0x8c, 0x6d, 0x95, 0xa8, 0x9d, 0xa3, 0xc1, 0xbf, 0x58,
0x00, 0xca, 0x6b, 0xa3, 0x39, 0x42, 0xd0, 0x48, 0xe6, 0xbe, 0xc7, 0x3d, 0xd6, 0x20, 0xfc, 0x1b,
0x6d, 0x42, 0x2b, 0x99, 0xef, 0x39, 0xf1, 0x53, 0xe9, 0x25, 0x09, 0xa1, 0x2d, 0x58, 0xa1, 0x73,
0xea, 0xce, 0x12, 0xea, 0xd9, 0xf5, 0xbe, 0x35, 0x58, 0x21, 0x29, 0x2c, 0xee, 0x8c, 0x16, 0x53,
0x6a, 0x37, 0x38, 0x27, 0x09, 0x15, 0xfc, 0xde, 0x2c, 0xf1, 0x7b, 0xd1, 0x90, 0x56, 0x05, 0x43,
0x3e, 0x80, 0xa6, 0xf0, 0xc3, 0x45, 0x68, 0xf3, 0xd0, 0x68, 0x91, 0xcf, 0x10, 0x4c, 0xb1, 0x53,
0xe1, 0xd7, 0x9a, 0x50, 0x4c, 0x40, 0xf8, 0x3b, 0x0b, 0x20, 0x8b, 0x16, 0x23, 0x8b, 0x17, 0x93,
0xc3, 0x70, 0x2c, 0x39, 0x48, 0x88, 0xe1, 0x99, 0x8d, 0x54, 0x65, 0x8c, 0x84, 0x58, 0xbe, 0x65,
0xf1, 0xe5, 0xde, 0x68, 0x10, 0x0d, 0xc3, 0xce, 0xe3, 0x29, 0x0d, 0x92, 0x51, 0xe8, 0x39, 0x0b,
0xe9, 0x13, 0x0d, 0xc3, 0x12, 0x62, 0xec, 0xc4, 0xc9, 0xae, 0xb3, 0xe0, 0x2e, 0xa9, 0x13, 0x05,
0xe2, 0x43, 0x58, 0x7f, 0xc4, 0x65, 0xff, 0x7d, 0xda, 0xe1, 0x6f, 0x1b, 0xd0, 0x55, 0x49, 0x30,
0x74, 0x13, 0x3f, 0x0c, 0xd0, 0x1e, 0x6c, 0xa4, 0x41, 0x71, 0xdd, 0xdb, 0xbc, 0x72, 0xb8, 0xb4,
0xce, 0x8e, 0x2d, 0xe3, 0xb0, 0x9f, 0x3f, 0xdf, 0x5b, 0x22, 0xc5, 0x4b, 0xe8, 0x13, 0xe8, 0x29,
0x24, 0x0f, 0xd0, 0xc1, 0x94, 0x46, 0x8c, 0x59, 0x8d, 0x33, 0x7b, 0x35, 0xc7, 0x4c, 0x27, 0xd9,
0x5b, 0x22, 0xa5, 0x57, 0xd1, 0x7d, 0x40, 0x9a, 0x1c, 0xc5, 0xb0, 0xce, 0x19, 0xbe, 0x52, 0xd4,
0x2e, 0x63, 0x57, 0x72, 0x4d, 0xb7, 0x54, 0x56, 0xd4, 0x68, 0xce, 0x23, 0x54, 0xb4, 0x34, 0x3d,
0xd7, 0x2d, 0x4d, 0x91, 0xe8, 0x09, 0x6c, 0x2a, 0xe4, 0x9d, 0x39, 0x75, 0x47, 0x91, 0x13, 0xc4,
0x47, 0x34, 0x1a, 0x85, 0x3c, 0xa6, 0x9d, 0x9d, 0xd7, 0x72, 0xec, 0x4c, 0xa2, 0xbd, 0x25, 0x72,
0xc6, 0x75, 0xf4, 0x19, 0xd8, 0x65, 0x27, 0x77, 0xa3, 0x70, 0xc2, 0xdb, 0x43, 0x67, 0xe7, 0xf5,
0x73, 0x58, 0x33, 0xb2, 0xbd, 0x25, 0x72, 0x26, 0x0b, 0xd4, 0x85, 0xda, 0x68, 0x61, 0x2f, 0xf7,
0xad, 0x41, 0x93, 0xd4, 0x46, 0x8b, 0x8f, 0x96, 0xa1, 0x79, 0xe2, 0x8c, 0x67, 0x14, 0x7f, 0x6f,
0xc1, 0x46, 0x21, 0xca, 0x5a, 0x5f, 0xb4, 0xce, 0xe9, 0x8b, 0xc5, 0x46, 0x56, 0x2b, 0x6b, 0x64,
0xe8, 0x46, 0x21, 0x37, 0x3b, 0x3b, 0xff, 0x97, 0x1c, 0xf3, 0x89, 0x6f, 0x24, 0xed, 0xcf, 0x16,
0xf4, 0xca, 0xb2, 0x06, 0x0d, 0xe0, 0x82, 0x16, 0x66, 0xad, 0x0d, 0xe4, 0xd1, 0xac, 0x83, 0x85,
0x63, 0xd9, 0x63, 0x44, 0xc5, 0xa4, 0x30, 0x3b, 0x0b, 0xe8, 0xa9, 0x38, 0xab, 0x8b, 0x33, 0x05,
0xb3, 0x16, 0x13, 0xd0, 0x53, 0x69, 0x96, 0x28, 0xe6, 0x0c, 0x81, 0xfa, 0xd0, 0x09, 0x85, 0x2a,
0x77, 0xc7, 0xce, 0xb1, 0x6c, 0xf0, 0x3a, 0x0a, 0xff, 0x6a, 0x01, 0x2a, 0xe6, 0xe7, 0x0b, 0x28,
0x6e, 0x3a, 0xad, 0x56, 0xd9, 0x69, 0xe8, 0x4d, 0xd8, 0x08, 0xe8, 0x29, 0x31, 0x03, 0x23, 0x1a,
0x42, 0xf1, 0x20, 0x6f, 0x49, 0x83, 0x37, 0x79, 0xc3, 0x92, 0x1f, 0x2c, 0xb0, 0xcf, 0xca, 0xb9,
0xf3, 0xda, 0x94, 0x33, 0xe1, 0xc3, 0xaf, 0xc6, 0x7b, 0x9d, 0x84, 0xd8, 0xf0, 0x09, 0x42, 0x59,
0xc8, 0x6d, 0xc2, 0xbf, 0xd5, 0x90, 0x09, 0x9c, 0x89, 0x18, 0x25, 0x6d, 0x92, 0xc2, 0x2c, 0x6f,
0x93, 0x50, 0x8e, 0x90, 0x5a, 0x12, 0xb2, 0xfb, 0x47, 0xaa, 0x24, 0xda, 0x84, 0x7f, 0xe3, 0x6f,
0x2c, 0xd8, 0x2c, 0xaf, 0xb7, 0x7f, 0x5a, 0x3d, 0xfc, 0x65, 0x56, 0x4c, 0x59, 0xcf, 0xa8, 0x1e,
0x73, 0x3e, 0x9a, 0xef, 0x79, 0xb2, 0x8c, 0xf8, 0x37, 0xbb, 0x2d, 0xc7, 0xe0, 0x41, 0x44, 0xe8,
0x49, 0xf8, 0x39, 0x95, 0x93, 0x38, 0x8f, 0xc6, 0x37, 0xe1, 0x02, 0xa1, 0xcf, 0xb4, 0xa4, 0x8b,
0x51, 0x0f, 0x9a, 0x71, 0xe2, 0x44, 0x09, 0x17, 0x58, 0x27, 0x02, 0x40, 0xeb, 0x50, 0xa7, 0x81,
0x27, 0x4d, 0x67, 0x9f, 0xf8, 0x2d, 0xd8, 0x20, 0x74, 0x3a, 0x5e, 0x18, 0x97, 0x6d, 0x58, 0x76,
0x3c, 0x2f, 0xa2, 0xb1, 0xe8, 0x02, 0x6d, 0xa2, 0x40, 0xfc, 0x21, 0x20, 0x53, 0xd2, 0xbd, 0xe0,
0x28, 0xac, 0x6e, 0x27, 0xfe, 0xd3, 0x82, 0x5e, 0x5e, 0x1e, 0x67, 0xf1, 0x9f, 0xdf, 0xe9, 0x7e,
0xb4, 0x60, 0x5d, 0x73, 0xdd, 0x68, 0xee, 0x7b, 0x71, 0xc1, 0x2a, 0xab, 0xc4, 0xaa, 0x2d, 0x58,
0x61, 0xc9, 0x3e, 0xca, 0xd2, 0x23, 0x85, 0xf9, 0x26, 0x16, 0xf2, 0x93, 0xba, 0xdc, 0xc4, 0x38,
0xc4, 0xd4, 0x9d, 0xd2, 0xc0, 0xf3, 0x03, 0x55, 0xd7, 0x0a, 0x34, 0xf6, 0xba, 0xa6, 0xb9, 0xd7,
0xe1, 0x07, 0x2c, 0xb8, 0x5a, 0x6c, 0xaa, 0xeb, 0xd8, 0x83, 0x26, 0xdb, 0x26, 0x63, 0xbb, 0xd6,
0xaf, 0x0f, 0x1a, 0x44, 0x00, 0xf8, 0x3e, 0xcb, 0x2d, 0xcd, 0x62, 0x1e, 0xe8, 0x2a, 0xec, 0x4a,
0xaa, 0x01, 0x3f, 0x84, 0xff, 0xe5, 0x94, 0xe3, 0xec, 0x6e, 0xca, 0x1f, 0x88, 0x14, 0x23, 0xf7,
0x98, 0x8d, 0xdc, 0xcc, 0x1c, 0xcd, 0x49, 0x8e, 0x10, 0x4f, 0x61, 0xcb, 0xcc, 0xe5, 0xc7, 0xc1,
0xa3, 0x6c, 0x69, 0xab, 0xa2, 0xe7, 0x59, 0x2b, 0x59, 0xd6, 0x7c, 0xea, 0x7a, 0xf3, 0xc1, 0x0f,
0xa5, 0x83, 0xa5, 0xa0, 0x61, 0x1c, 0xd3, 0x24, 0x46, 0xef, 0xc3, 0xda, 0x4c, 0x47, 0xc8, 0xec,
0xed, 0x49, 0x0b, 0x0c, 0x62, 0x62, 0x92, 0xe2, 0x07, 0xb0, 0x66, 0x32, 0x7b, 0x03, 0x5a, 0x8e,
0xe0, 0x22, 0xfc, 0xb0, 0x26, 0xb9, 0xc8, 0xeb, 0xf2, 0x30, 0xd7, 0x06, 0x1b, 0xaa, 0x0d, 0xe2,
0x77, 0x58, 0x27, 0x71, 0xa9, 0x3f, 0x4d, 0xd2, 0xbf, 0xad, 0x0a, 0x8e, 0xc0, 0x5f, 0xb0, 0xaa,
0xe6, 0xd7, 0x0e, 0xe4, 0x32, 0x7e, 0x10, 0xed, 0xd2, 0x71, 0x25, 0x27, 0x62, 0x68, 0x86, 0xe9,
0x90, 0xce, 0x17, 0xad, 0x38, 0x62, 0x59, 0xeb, 0x48, 0x9e, 0xea, 0x6f, 0x44, 0xc1, 0xf8, 0x27,
0xcb, 0x14, 0xbe, 0x1f, 0x7a, 0xac, 0x31, 0x4e, 0x2b, 0x09, 0xbf, 0x0a, 0xed, 0x69, 0x44, 0x4f,
0x0e, 0xce, 0x54, 0x20, 0x3b, 0x46, 0x6f, 0xc3, 0xaa, 0x3b, 0x8b, 0x22, 0x1a, 0x24, 0xd9, 0xe2,
0x90, 0x27, 0x37, 0x28, 0x98, 0xda, 0x13, 0xa9, 0x8d, 0xac, 0xc3, 0x14, 0xc6, 0xcf, 0x59, 0x3e,
0x73, 0xad, 0x45, 0x83, 0xd8, 0x0f, 0x3d, 0xff, 0xa8, 0x5a, 0xda, 0x5d, 0x02, 0x60, 0x5a, 0x19,
0x9b, 0x97, 0x86, 0x41, 0x97, 0x61, 0x4d, 0xaa, 0x61, 0xec, 0x00, 0x26, 0x12, 0xff, 0x66, 0x81,
0x2d, 0x35, 0xc8, 0xba, 0x9e, 0xda, 0x56, 0xaa, 0xa8, 0x71, 0x13, 0xba, 0x4c, 0xe8, 0x6e, 0x7e,
0x57, 0x29, 0xe9, 0xa5, 0x39, 0x42, 0x74, 0x83, 0x6b, 0xb8, 0x9b, 0x5f, 0x0d, 0x4b, 0x6e, 0x9a,
0x74, 0x6c, 0x69, 0xe1, 0x81, 0x17, 0xde, 0x52, 0x4b, 0x8b, 0x86, 0xc2, 0x5f, 0xf3, 0x3e, 0xcb,
0xcd, 0xca, 0x06, 0xf1, 0xad, 0x6c, 0x40, 0x8d, 0xe6, 0xea, 0xff, 0x99, 0x49, 0xdc, 0x2c, 0xb4,
0x09, 0x11, 0xc7, 0x3c, 0x39, 0xba, 0x0a, 0xeb, 0xea, 0x9f, 0x34, 0x9d, 0xc6, 0x35, 0x2e, 0xbd,
0x80, 0x67, 0x19, 0xb9, 0x25, 0x55, 0x18, 0xba, 0x6e, 0xa6, 0xfd, 0xe3, 0xa9, 0xf7, 0x2f, 0xf6,
0x2d, 0xfe, 0xc3, 0x62, 0xfd, 0xda, 0x28, 0xfe, 0x97, 0xe2, 0x3a, 0x0c, 0xab, 0x4c, 0xc5, 0x3b,
0x6a, 0xec, 0x08, 0xb7, 0x19, 0x38, 0x16, 0x57, 0x77, 0x16, 0xdd, 0x31, 0x5f, 0x1c, 0x74, 0x14,
0xdb, 0x31, 0xe2, 0xd9, 0x21, 0x4b, 0xd1, 0x48, 0xc6, 0x55, 0x46, 0x3f, 0x8f, 0xd6, 0x9e, 0x34,
0x9a, 0xc6, 0x93, 0x46, 0xf6, 0x6c, 0xd1, 0xd2, 0x9f, 0x2d, 0xf0, 0xa7, 0x69, 0xff, 0x18, 0x89,
0x99, 0xfe, 0x02, 0x71, 0x62, 0x6b, 0xcb, 0x2c, 0x92, 0xf7, 0x54, 0x29, 0x66, 0x18, 0xfc, 0x1c,
0x2e, 0xec, 0x17, 0xdd, 0x51, 0x6d, 0x00, 0xfa, 0xda, 0x00, 0xf4, 0xbd, 0x92, 0x97, 0x93, 0xb2,
0x06, 0x94, 0x7f, 0x39, 0xb9, 0x08, 0xad, 0xc7, 0x7e, 0x90, 0xbc, 0x7b, 0x9d, 0xf1, 0xf4, 0x9c,
0xc4, 0x51, 0xaf, 0x3f, 0xec, 0x1b, 0x47, 0xb0, 0x36, 0x14, 0xef, 0x6c, 0x72, 0x7c, 0x54, 0x51,
0x2e, 0x1b, 0x31, 0xb5, 0x6a, 0x23, 0xa6, 0xae, 0x6f, 0xda, 0x38, 0x84, 0x55, 0x42, 0x9f, 0xb1,
0x85, 0xf0, 0xa5, 0x8b, 0xec, 0x41, 0xd3, 0x8f, 0x87, 0x63, 0x35, 0x23, 0x04, 0x80, 0x6f, 0x41,
0x97, 0x4f, 0xdd, 0x4c, 0xe4, 0x36, 0xb4, 0x1d, 0x05, 0xc8, 0xff, 0xdc, 0x75, 0xc5, 0x51, 0xe1,
0x49, 0x46, 0x82, 0xbf, 0x82, 0x76, 0x76, 0xb9, 0xe2, 0x84, 0xbd, 0x04, 0x10, 0x51, 0xf7, 0x64,
0xa8, 0xff, 0x6c, 0x68, 0x18, 0x34, 0x80, 0x65, 0xf9, 0xc4, 0x29, 0xe3, 0xd8, 0xcd, 0x34, 0x60,
0x58, 0xa2, 0x8e, 0xf1, 0x7b, 0xd0, 0x1a, 0xa6, 0x2e, 0x95, 0xfb, 0x86, 0x75, 0xc6, 0xbe, 0x51,
0x33, 0xf6, 0x8d, 0x2b, 0x00, 0x72, 0xf1, 0xa6, 0xf1, 0x39, 0x5b, 0xfd, 0x61, 0x8b, 0x3f, 0xb2,
0x5e, 0xfb, 0x2b, 0x00, 0x00, 0xff, 0xff, 0x6c, 0xd0, 0xe8, 0xee, 0x8c, 0x15, 0x00, 0x00,
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment