Commit 49658b66 authored by liuyuhang's avatar liuyuhang Committed by 33cn

add prob rule

parent 503acbfc
...@@ -52,9 +52,26 @@ func (a *action) propBoard(prob *auty.ProposalBoard) (*types.Receipt, error) { ...@@ -52,9 +52,26 @@ func (a *action) propBoard(prob *auty.ProposalBoard) (*types.Receipt, error) {
return nil, types.ErrInvalidParam return nil, types.ErrInvalidParam
} }
receipt, err := a.coinsAccount.ExecFrozen(a.fromaddr, a.execaddr, lockAmount) // 获取当前生效提案规则,并且将不修改的规则补齐
rule := &auty.RuleConfig{}
value, err := a.db.Get(activeRuleID())
if err == nil {
err = types.Decode(value, rule)
if err != nil {
alog.Error("propBoard ", "addr", a.fromaddr, "execaddr", a.execaddr, "decode ProposalRule failed", err)
return nil, err
}
} else {// 载入系统默认值
rule.BoardAttendProb = participationRate
rule.BoardPassProb = approveRate
rule.OpposeProb = opposeRate
rule.ProposalAmount = lockAmount
rule.PubAmountThreshold = largeAmount
}
receipt, err := a.coinsAccount.ExecFrozen(a.fromaddr, a.execaddr, rule.ProposalAmount)
if err != nil { if err != nil {
alog.Error("propBoard ", "addr", a.fromaddr, "execaddr", a.execaddr, "ExecFrozen amount", lockAmount) alog.Error("propBoard ", "addr", a.fromaddr, "execaddr", a.execaddr, "ExecFrozen amount", rule.ProposalAmount)
return nil, err return nil, err
} }
...@@ -66,6 +83,7 @@ func (a *action) propBoard(prob *auty.ProposalBoard) (*types.Receipt, error) { ...@@ -66,6 +83,7 @@ func (a *action) propBoard(prob *auty.ProposalBoard) (*types.Receipt, error) {
cur := &auty.AutonomyProposalBoard{ cur := &auty.AutonomyProposalBoard{
PropBoard:prob, PropBoard:prob,
CurRule:rule,
VoteResult: &auty.VoteResult{}, VoteResult: &auty.VoteResult{},
Status: auty.AutonomyStatusProposalBoard, Status: auty.AutonomyStatusProposalBoard,
Address: a.fromaddr, Address: a.fromaddr,
...@@ -73,9 +91,7 @@ func (a *action) propBoard(prob *auty.ProposalBoard) (*types.Receipt, error) { ...@@ -73,9 +91,7 @@ func (a *action) propBoard(prob *auty.ProposalBoard) (*types.Receipt, error) {
Index: a.index, Index: a.index,
} }
key := propBoardID(common.ToHex(a.txhash)) kv = append(kv, &types.KeyValue{Key: propBoardID(common.ToHex(a.txhash)), Value: types.Encode(cur)})
value := types.Encode(cur)
kv = append(kv, &types.KeyValue{Key: key, Value: value})
receiptLog := getReceiptLog(nil, cur, auty.TyLogPropBoard) receiptLog := getReceiptLog(nil, cur, auty.TyLogPropBoard)
logs = append(logs, receiptLog) logs = append(logs, receiptLog)
...@@ -126,9 +142,9 @@ func (a *action) rvkPropBoard(rvkProb *auty.RevokeProposalBoard) (*types.Receipt ...@@ -126,9 +142,9 @@ func (a *action) rvkPropBoard(rvkProb *auty.RevokeProposalBoard) (*types.Receipt
var logs []*types.ReceiptLog var logs []*types.ReceiptLog
var kv []*types.KeyValue var kv []*types.KeyValue
receipt, err := a.coinsAccount.ExecActive(a.fromaddr, a.execaddr, lockAmount) receipt, err := a.coinsAccount.ExecActive(a.fromaddr, a.execaddr, cur.CurRule.ProposalAmount)
if err != nil { if err != nil {
alog.Error("rvkPropBoard ", "addr", a.fromaddr, "execaddr", a.execaddr, "ExecActive amount", lockAmount, "err", err) alog.Error("rvkPropBoard ", "addr", a.fromaddr, "execaddr", a.execaddr, "ExecActive amount", cur.CurRule.ProposalAmount, "err", err)
return nil, err return nil, err
} }
logs = append(logs, receipt.Logs...) logs = append(logs, receipt.Logs...)
...@@ -226,12 +242,12 @@ func (a *action) votePropBoard(voteProb *auty.VoteProposalBoard) (*types.Receipt ...@@ -226,12 +242,12 @@ func (a *action) votePropBoard(voteProb *auty.VoteProposalBoard) (*types.Receipt
if cur.VoteResult.TotalVotes != 0 && if cur.VoteResult.TotalVotes != 0 &&
cur.VoteResult.ApproveVotes + cur.VoteResult.OpposeVotes != 0 && cur.VoteResult.ApproveVotes + cur.VoteResult.OpposeVotes != 0 &&
float32(cur.VoteResult.ApproveVotes + cur.VoteResult.OpposeVotes) / float32(cur.VoteResult.TotalVotes) >= float32(participationRate) && float32(cur.VoteResult.ApproveVotes + cur.VoteResult.OpposeVotes) / float32(cur.VoteResult.TotalVotes) >= float32(cur.CurRule.BoardAttendProb)/100.0 &&
float32(cur.VoteResult.ApproveVotes) / float32(cur.VoteResult.ApproveVotes + cur.VoteResult.OpposeVotes) >= float32(approveRate) { float32(cur.VoteResult.ApproveVotes) / float32(cur.VoteResult.ApproveVotes + cur.VoteResult.OpposeVotes) >= float32(cur.CurRule.OpposeProb)/100.0 {
cur.VoteResult.Pass = true cur.VoteResult.Pass = true
cur.PropBoard.RealEndBlockHeight = a.height cur.PropBoard.RealEndBlockHeight = a.height
receipt, err := a.coinsAccount.ExecTransferFrozen(cur.Address, autonomyAddr, a.execaddr, lockAmount) receipt, err := a.coinsAccount.ExecTransferFrozen(cur.Address, autonomyAddr, a.execaddr, cur.CurRule.ProposalAmount)
if err != nil { if err != nil {
alog.Error("votePropBoard ", "addr", cur.Address, "execaddr", a.execaddr, "ExecTransferFrozen amount fail", err) alog.Error("votePropBoard ", "addr", cur.Address, "execaddr", a.execaddr, "ExecTransferFrozen amount fail", err)
return nil, err return nil, err
...@@ -309,8 +325,8 @@ func (a *action) tmintPropBoard(tmintProb *auty.TerminateProposalBoard) (*types. ...@@ -309,8 +325,8 @@ func (a *action) tmintPropBoard(tmintProb *auty.TerminateProposalBoard) (*types.
cur.VoteResult.TotalVotes = int32(account.Balance/ticketPrice) cur.VoteResult.TotalVotes = int32(account.Balance/ticketPrice)
} }
if float32(cur.VoteResult.ApproveVotes + cur.VoteResult.OpposeVotes) / float32(cur.VoteResult.TotalVotes) >= float32(participationRate) && if float32(cur.VoteResult.ApproveVotes + cur.VoteResult.OpposeVotes) / float32(cur.VoteResult.TotalVotes) >= float32(cur.CurRule.BoardAttendProb)/100.0 &&
float32(cur.VoteResult.ApproveVotes) / float32(cur.VoteResult.ApproveVotes + cur.VoteResult.OpposeVotes) >= float32(approveRate) { float32(cur.VoteResult.ApproveVotes) / float32(cur.VoteResult.ApproveVotes + cur.VoteResult.OpposeVotes) >= float32(cur.CurRule.OpposeProb)/100.0 {
cur.VoteResult.Pass = true cur.VoteResult.Pass = true
} else { } else {
cur.VoteResult.Pass = false cur.VoteResult.Pass = false
...@@ -319,7 +335,7 @@ func (a *action) tmintPropBoard(tmintProb *auty.TerminateProposalBoard) (*types. ...@@ -319,7 +335,7 @@ func (a *action) tmintPropBoard(tmintProb *auty.TerminateProposalBoard) (*types.
var logs []*types.ReceiptLog var logs []*types.ReceiptLog
var kv []*types.KeyValue var kv []*types.KeyValue
receipt, err := a.coinsAccount.ExecTransferFrozen(cur.Address, autonomyAddr, a.execaddr, lockAmount) receipt, err := a.coinsAccount.ExecTransferFrozen(cur.Address, autonomyAddr, a.execaddr, cur.CurRule.ProposalAmount)
if err != nil { if err != nil {
alog.Error("votePropBoard ", "addr", a.fromaddr, "execaddr", a.execaddr, "ExecTransferFrozen amount fail", err) alog.Error("votePropBoard ", "addr", a.fromaddr, "execaddr", a.execaddr, "ExecTransferFrozen amount fail", err)
return nil, err return nil, err
......
...@@ -48,9 +48,26 @@ func (a *action) propProject(prob *auty.ProposalProject) (*types.Receipt, error) ...@@ -48,9 +48,26 @@ func (a *action) propProject(prob *auty.ProposalProject) (*types.Receipt, error)
return nil, err return nil, err
} }
receipt, err := a.coinsAccount.ExecFrozen(a.fromaddr, a.execaddr, lockAmount) // 获取当前生效提案规则,并且将不修改的规则补齐
rule := &auty.RuleConfig{}
value, err = a.db.Get(activeRuleID())
if err == nil {
err = types.Decode(value, rule)
if err != nil {
alog.Error("propProject ", "addr", a.fromaddr, "execaddr", a.execaddr, "decode ProposalRule failed", err)
return nil, err
}
} else {// 载入系统默认值
rule.BoardAttendProb = participationRate
rule.BoardPassProb = approveRate
rule.OpposeProb = opposeRate
rule.ProposalAmount = lockAmount
rule.PubAmountThreshold = largeAmount
}
receipt, err := a.coinsAccount.ExecFrozen(a.fromaddr, a.execaddr, rule.ProposalAmount)
if err != nil { if err != nil {
alog.Error("propProject ", "addr", a.fromaddr, "execaddr", a.execaddr, "ExecFrozen amount", lockAmount) alog.Error("propProject ", "addr", a.fromaddr, "execaddr", a.execaddr, "ExecFrozen amount", rule.ProposalAmount)
return nil, err return nil, err
} }
...@@ -61,11 +78,12 @@ func (a *action) propProject(prob *auty.ProposalProject) (*types.Receipt, error) ...@@ -61,11 +78,12 @@ func (a *action) propProject(prob *auty.ProposalProject) (*types.Receipt, error)
kv = append(kv, receipt.KV...) kv = append(kv, receipt.KV...)
var isPubVote bool var isPubVote bool
if prob.Amount >= largeAmount { if prob.Amount >= rule.PubAmountThreshold {
isPubVote = true isPubVote = true
} }
cur := &auty.AutonomyProposalProject{ cur := &auty.AutonomyProposalProject{
PropProject:prob, PropProject:prob,
CurRule:rule,
Boards: pboard.Boards, Boards: pboard.Boards,
BoardVoteRes: &auty.VoteResult{}, BoardVoteRes: &auty.VoteResult{},
PubVote: &auty.PublicVote{Publicity:isPubVote}, PubVote: &auty.PublicVote{Publicity:isPubVote},
...@@ -124,9 +142,9 @@ func (a *action) rvkPropProject(rvkProb *auty.RevokeProposalProject) (*types.Rec ...@@ -124,9 +142,9 @@ func (a *action) rvkPropProject(rvkProb *auty.RevokeProposalProject) (*types.Rec
var logs []*types.ReceiptLog var logs []*types.ReceiptLog
var kv []*types.KeyValue var kv []*types.KeyValue
receipt, err := a.coinsAccount.ExecActive(a.fromaddr, a.execaddr, lockAmount) receipt, err := a.coinsAccount.ExecActive(a.fromaddr, a.execaddr, cur.CurRule.ProposalAmount)
if err != nil { if err != nil {
alog.Error("rvkPropProject ", "addr", a.fromaddr, "execaddr", a.execaddr, "ExecActive amount", lockAmount, "err", err) alog.Error("rvkPropProject ", "addr", a.fromaddr, "execaddr", a.execaddr, "ExecActive amount", cur.CurRule.ProposalAmount, "err", err)
return nil, err return nil, err
} }
logs = append(logs, receipt.Logs...) logs = append(logs, receipt.Logs...)
...@@ -224,11 +242,11 @@ func (a *action) votePropProject(voteProb *auty.VoteProposalProject) (*types.Rec ...@@ -224,11 +242,11 @@ func (a *action) votePropProject(voteProb *auty.VoteProposalProject) (*types.Rec
if cur.BoardVoteRes.TotalVotes != 0 && if cur.BoardVoteRes.TotalVotes != 0 &&
cur.BoardVoteRes.ApproveVotes + cur.BoardVoteRes.OpposeVotes != 0 && cur.BoardVoteRes.ApproveVotes + cur.BoardVoteRes.OpposeVotes != 0 &&
float32(cur.BoardVoteRes.ApproveVotes + cur.BoardVoteRes.OpposeVotes) / float32(cur.BoardVoteRes.TotalVotes) >= float32(participationRate) && float32(cur.BoardVoteRes.ApproveVotes + cur.BoardVoteRes.OpposeVotes) / float32(cur.BoardVoteRes.TotalVotes) >= float32(cur.CurRule.BoardAttendProb)/100.0 &&
float32(cur.BoardVoteRes.ApproveVotes) / float32(cur.BoardVoteRes.ApproveVotes + cur.BoardVoteRes.OpposeVotes) >= float32(approveRate) { float32(cur.BoardVoteRes.ApproveVotes) / float32(cur.BoardVoteRes.ApproveVotes + cur.BoardVoteRes.OpposeVotes) >= float32(cur.CurRule.BoardPassProb)/100.0 {
cur.BoardVoteRes.Pass = true cur.BoardVoteRes.Pass = true
cur.PropProject.RealEndBlockHeight = a.height cur.PropProject.RealEndBlockHeight = a.height
receipt, err := a.coinsAccount.ExecTransferFrozen(cur.Address, autonomyAddr, a.execaddr, lockAmount) receipt, err := a.coinsAccount.ExecTransferFrozen(cur.Address, autonomyAddr, a.execaddr, cur.CurRule.ProposalAmount)
if err != nil { if err != nil {
alog.Error("votePropProject ", "addr", cur.Address, "execaddr", a.execaddr, "ExecTransferFrozen amount fail", err) alog.Error("votePropProject ", "addr", cur.Address, "execaddr", a.execaddr, "ExecTransferFrozen amount fail", err)
return nil, err return nil, err
...@@ -246,6 +264,14 @@ func (a *action) votePropProject(voteProb *auty.VoteProposalProject) (*types.Rec ...@@ -246,6 +264,14 @@ func (a *action) votePropProject(voteProb *auty.VoteProposalProject) (*types.Rec
cur.PubVote.PubPass = true cur.PubVote.PubPass = true
} else { } else {
cur.Status = auty.AutonomyStatusTmintPropProject cur.Status = auty.AutonomyStatusTmintPropProject
// 提案通过,将工程金额从基金付款给承包商
receipt, err := a.coinsAccount.ExecTransferFrozen(autonomyAddr, cur.PropProject.ToAddr, a.execaddr, cur.PropProject.Amount)
if err != nil {
alog.Error("votePropProject ", "addr", cur.Address, "execaddr", a.execaddr, "ExecTransferFrozen to contractor fail", err)
return nil, err
}
logs = append(logs, receipt.Logs...)
kv = append(kv, receipt.KV...)
} }
} }
value = types.Encode(&cur) value = types.Encode(&cur)
...@@ -351,7 +377,7 @@ func (a *action) pubVotePropProject(voteProb *auty.PubVoteProposalProject) (*typ ...@@ -351,7 +377,7 @@ func (a *action) pubVotePropProject(voteProb *auty.PubVoteProposalProject) (*typ
cur.PubVote.PubPass = false cur.PubVote.PubPass = false
cur.PropProject.RealEndBlockHeight = a.height cur.PropProject.RealEndBlockHeight = a.height
receipt, err := a.coinsAccount.ExecTransferFrozen(cur.Address, autonomyAddr, a.execaddr, lockAmount) receipt, err := a.coinsAccount.ExecTransferFrozen(cur.Address, autonomyAddr, a.execaddr, cur.CurRule.ProposalAmount)
if err != nil { if err != nil {
alog.Error("pubVotePropProject ", "addr", cur.Address, "execaddr", a.execaddr, "ExecTransferFrozen amount fail", err) alog.Error("pubVotePropProject ", "addr", cur.Address, "execaddr", a.execaddr, "ExecTransferFrozen amount fail", err)
return nil, err return nil, err
...@@ -362,8 +388,10 @@ func (a *action) pubVotePropProject(voteProb *auty.PubVoteProposalProject) (*typ ...@@ -362,8 +388,10 @@ func (a *action) pubVotePropProject(voteProb *auty.PubVoteProposalProject) (*typ
key := propProjectID(voteProb.ProposalID) key := propProjectID(voteProb.ProposalID)
cur.Status = auty.AutonomyStatusPubVotePropProject cur.Status = auty.AutonomyStatusPubVotePropProject
ty := auty.TyLogPubVotePropProject
if !cur.PubVote.PubPass { if !cur.PubVote.PubPass {
cur.Status = auty.AutonomyStatusTmintPropProject cur.Status = auty.AutonomyStatusTmintPropProject
ty = auty.TyLogTmintPropProject
} }
value = types.Encode(&cur) value = types.Encode(&cur)
kv = append(kv, &types.KeyValue{Key: key, Value: value}) kv = append(kv, &types.KeyValue{Key: key, Value: value})
...@@ -371,10 +399,6 @@ func (a *action) pubVotePropProject(voteProb *auty.PubVoteProposalProject) (*typ ...@@ -371,10 +399,6 @@ func (a *action) pubVotePropProject(voteProb *auty.PubVoteProposalProject) (*typ
// 更新VotesRecord // 更新VotesRecord
kv = append(kv, &types.KeyValue{Key: VotesRecord(voteProb.ProposalID), Value: types.Encode(&votes)}) kv = append(kv, &types.KeyValue{Key: VotesRecord(voteProb.ProposalID), Value: types.Encode(&votes)})
ty := auty.TyLogPubVotePropProject
if cur.BoardVoteRes.Pass {
ty = auty.TyLogTmintPropProject
}
receiptLog := getProjectReceiptLog(pre, &cur, int32(ty)) receiptLog := getProjectReceiptLog(pre, &cur, int32(ty))
logs = append(logs, receiptLog) logs = append(logs, receiptLog)
...@@ -452,8 +476,8 @@ func (a *action) tmintPropProject(tmintProb *auty.TerminateProposalProject) (*ty ...@@ -452,8 +476,8 @@ func (a *action) tmintPropProject(tmintProb *auty.TerminateProposalProject) (*ty
if cur.BoardVoteRes.TotalVotes != 0 && if cur.BoardVoteRes.TotalVotes != 0 &&
cur.BoardVoteRes.ApproveVotes + cur.BoardVoteRes.OpposeVotes != 0 && cur.BoardVoteRes.ApproveVotes + cur.BoardVoteRes.OpposeVotes != 0 &&
float32(cur.BoardVoteRes.ApproveVotes + cur.BoardVoteRes.OpposeVotes) / float32(cur.BoardVoteRes.TotalVotes) >= float32(participationRate) && float32(cur.BoardVoteRes.ApproveVotes + cur.BoardVoteRes.OpposeVotes) / float32(cur.BoardVoteRes.TotalVotes) >= float32(cur.CurRule.BoardAttendProb)/100.0 &&
float32(cur.BoardVoteRes.ApproveVotes) / float32(cur.BoardVoteRes.ApproveVotes + cur.BoardVoteRes.OpposeVotes) >= float32(approveRate) { float32(cur.BoardVoteRes.ApproveVotes) / float32(cur.BoardVoteRes.ApproveVotes + cur.BoardVoteRes.OpposeVotes) >= float32(cur.CurRule.BoardPassProb)/100.0 {
cur.BoardVoteRes.Pass = true cur.BoardVoteRes.Pass = true
} else { } else {
cur.BoardVoteRes.Pass = false cur.BoardVoteRes.Pass = false
...@@ -478,14 +502,26 @@ func (a *action) tmintPropProject(tmintProb *auty.TerminateProposalProject) (*ty ...@@ -478,14 +502,26 @@ func (a *action) tmintPropProject(tmintProb *auty.TerminateProposalProject) (*ty
var logs []*types.ReceiptLog var logs []*types.ReceiptLog
var kv []*types.KeyValue var kv []*types.KeyValue
receipt, err := a.coinsAccount.ExecTransferFrozen(cur.Address, autonomyAddr, a.execaddr, lockAmount) receipt, err := a.coinsAccount.ExecTransferFrozen(cur.Address, autonomyAddr, a.execaddr, cur.CurRule.ProposalAmount)
if err != nil { if err != nil {
alog.Error("votePropProject ", "addr", a.fromaddr, "execaddr", a.execaddr, "ExecTransferFrozen amount fail", err) alog.Error("tmintPropProject ", "addr", a.fromaddr, "execaddr", a.execaddr, "ExecTransferFrozen amount fail", err)
return nil, err return nil, err
} }
logs = append(logs, receipt.Logs...) logs = append(logs, receipt.Logs...)
kv = append(kv, receipt.KV...) kv = append(kv, receipt.KV...)
if (cur.PubVote.Publicity && cur.PubVote.PubPass) || // 需要公示且公示通过
(!cur.PubVote.Publicity && cur.BoardVoteRes.Pass){ // 不需要公示且董事会通过
// 提案通过,将工程金额从基金付款给承包商
receipt, err := a.coinsAccount.ExecTransferFrozen(autonomyAddr, cur.PropProject.ToAddr, a.execaddr, cur.PropProject.Amount)
if err != nil {
alog.Error("tmintPropProject ", "addr", cur.Address, "execaddr", a.execaddr, "ExecTransferFrozen to contractor fail", err)
return nil, err
}
logs = append(logs, receipt.Logs...)
kv = append(kv, receipt.KV...)
}
cur.Status = auty.AutonomyStatusTmintPropProject cur.Status = auty.AutonomyStatusTmintPropProject
kv = append(kv, &types.KeyValue{Key: propProjectID(tmintProb.ProposalID), Value: types.Encode(&cur)}) kv = append(kv, &types.KeyValue{Key: propProjectID(tmintProb.ProposalID), Value: types.Encode(&cur)})
......
...@@ -237,7 +237,7 @@ func (a *action) votePropRule(voteProb *auty.VoteProposalRule) (*types.Receipt, ...@@ -237,7 +237,7 @@ func (a *action) votePropRule(voteProb *auty.VoteProposalRule) (*types.Receipt,
cur.VoteResult.Pass = true cur.VoteResult.Pass = true
cur.PropRule.RealEndBlockHeight = a.height cur.PropRule.RealEndBlockHeight = a.height
receipt, err := a.coinsAccount.ExecTransferFrozen(cur.Address, autonomyAddr, a.execaddr, lockAmount) receipt, err := a.coinsAccount.ExecTransferFrozen(cur.Address, autonomyAddr, a.execaddr, cur.Rule.ProposalAmount)
if err != nil { if err != nil {
alog.Error("votePropRule ", "addr", cur.Address, "execaddr", a.execaddr, "ExecTransferFrozen amount fail", err) alog.Error("votePropRule ", "addr", cur.Address, "execaddr", a.execaddr, "ExecTransferFrozen amount fail", err)
return nil, err return nil, err
...@@ -325,7 +325,7 @@ func (a *action) tmintPropRule(tmintProb *auty.TerminateProposalRule) (*types.Re ...@@ -325,7 +325,7 @@ func (a *action) tmintPropRule(tmintProb *auty.TerminateProposalRule) (*types.Re
var logs []*types.ReceiptLog var logs []*types.ReceiptLog
var kv []*types.KeyValue var kv []*types.KeyValue
receipt, err := a.coinsAccount.ExecTransferFrozen(cur.Address, autonomyAddr, a.execaddr, lockAmount) receipt, err := a.coinsAccount.ExecTransferFrozen(cur.Address, autonomyAddr, a.execaddr, cur.Rule.ProposalAmount)
if err != nil { if err != nil {
alog.Error("votePropRule ", "addr", a.fromaddr, "execaddr", a.execaddr, "ExecTransferFrozen amount fail", err) alog.Error("votePropRule ", "addr", a.fromaddr, "execaddr", a.execaddr, "ExecTransferFrozen amount fail", err)
return nil, err return nil, err
......
...@@ -11,13 +11,15 @@ package types; ...@@ -11,13 +11,15 @@ package types;
message AutonomyProposalBoard { message AutonomyProposalBoard {
ProposalBoard propBoard = 1; ProposalBoard propBoard = 1;
// 投票该提案的规则
RuleConfig curRule = 2;
// 全体持票人投票结果 // 全体持票人投票结果
VoteResult voteResult = 2; VoteResult voteResult = 3;
// 状态 // 状态
int32 status = 3; int32 status = 4;
string address = 4; string address = 5;
int64 height = 5; int64 height = 6;
int32 index = 6; int32 index = 7;
} }
// action // action
......
...@@ -11,7 +11,7 @@ package types; ...@@ -11,7 +11,7 @@ package types;
message AutonomyProposalProject { message AutonomyProposalProject {
ProposalProject propProject = 1; ProposalProject propProject = 1;
// 投票该提案的规则 // 投票该提案的规则
RuleConfig CurRule = 2; RuleConfig curRule = 2;
// 投票该提案的董事会成员 // 投票该提案的董事会成员
repeated string boards = 3; repeated string boards = 3;
// 董事会投票结果 // 董事会投票结果
......
...@@ -14,13 +14,15 @@ var _ = math.Inf ...@@ -14,13 +14,15 @@ var _ = math.Inf
type AutonomyProposalBoard struct { type AutonomyProposalBoard struct {
PropBoard *ProposalBoard `protobuf:"bytes,1,opt,name=propBoard" json:"propBoard,omitempty"` PropBoard *ProposalBoard `protobuf:"bytes,1,opt,name=propBoard" json:"propBoard,omitempty"`
// 投票该提案的规则
CurRule *RuleConfig `protobuf:"bytes,2,opt,name=curRule" json:"curRule,omitempty"`
// 全体持票人投票结果 // 全体持票人投票结果
VoteResult *VoteResult `protobuf:"bytes,2,opt,name=voteResult" json:"voteResult,omitempty"` VoteResult *VoteResult `protobuf:"bytes,3,opt,name=voteResult" json:"voteResult,omitempty"`
// 状态 // 状态
Status int32 `protobuf:"varint,3,opt,name=status" json:"status,omitempty"` Status int32 `protobuf:"varint,4,opt,name=status" json:"status,omitempty"`
Address string `protobuf:"bytes,4,opt,name=address" json:"address,omitempty"` Address string `protobuf:"bytes,5,opt,name=address" json:"address,omitempty"`
Height int64 `protobuf:"varint,5,opt,name=height" json:"height,omitempty"` Height int64 `protobuf:"varint,6,opt,name=height" json:"height,omitempty"`
Index int32 `protobuf:"varint,6,opt,name=index" json:"index,omitempty"` Index int32 `protobuf:"varint,7,opt,name=index" json:"index,omitempty"`
} }
func (m *AutonomyProposalBoard) Reset() { *m = AutonomyProposalBoard{} } func (m *AutonomyProposalBoard) Reset() { *m = AutonomyProposalBoard{} }
...@@ -35,6 +37,13 @@ func (m *AutonomyProposalBoard) GetPropBoard() *ProposalBoard { ...@@ -35,6 +37,13 @@ func (m *AutonomyProposalBoard) GetPropBoard() *ProposalBoard {
return nil return nil
} }
func (m *AutonomyProposalBoard) GetCurRule() *RuleConfig {
if m != nil {
return m.CurRule
}
return nil
}
func (m *AutonomyProposalBoard) GetVoteResult() *VoteResult { func (m *AutonomyProposalBoard) GetVoteResult() *VoteResult {
if m != nil { if m != nil {
return m.VoteResult return m.VoteResult
...@@ -316,37 +325,38 @@ func init() { ...@@ -316,37 +325,38 @@ func init() {
func init() { proto.RegisterFile("board.proto", fileDescriptor1) } func init() { proto.RegisterFile("board.proto", fileDescriptor1) }
var fileDescriptor1 = []byte{ var fileDescriptor1 = []byte{
// 499 bytes of a gzipped FileDescriptorProto // 523 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x54, 0x4d, 0x6f, 0xd4, 0x30, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x54, 0x5d, 0x6f, 0xd3, 0x30,
0x10, 0x95, 0xbb, 0x9b, 0xb4, 0x99, 0xaa, 0xa8, 0x35, 0xdb, 0x12, 0x55, 0x15, 0x8a, 0x72, 0x40, 0x14, 0x55, 0xda, 0xa6, 0x5d, 0xef, 0x34, 0xb4, 0x99, 0x6e, 0x44, 0xd3, 0x84, 0xaa, 0x3c, 0xa0,
0x11, 0x87, 0x15, 0x94, 0x0f, 0x21, 0x6e, 0xac, 0x40, 0x02, 0x09, 0x24, 0xb0, 0x80, 0xbb, 0x9b, 0x0a, 0xa4, 0x0a, 0xc6, 0x87, 0x10, 0x6f, 0x14, 0x90, 0x40, 0x02, 0x09, 0xae, 0x80, 0x77, 0x2f,
0x0c, 0x6c, 0xd4, 0x24, 0x36, 0x8e, 0xb3, 0x22, 0x37, 0x7e, 0x29, 0x57, 0xfe, 0x06, 0xca, 0xc4, 0xb9, 0x5b, 0xa3, 0xa5, 0xb6, 0x71, 0x9c, 0x8a, 0xbc, 0xf1, 0xce, 0x0f, 0xe5, 0x6f, 0xa0, 0xdc,
0xdb, 0x6c, 0xca, 0x0a, 0xe8, 0x2d, 0x6f, 0xfc, 0x9e, 0x3d, 0x63, 0xbf, 0x17, 0xd8, 0xbf, 0x50, 0xb8, 0x6b, 0x33, 0x2a, 0x60, 0x6f, 0x39, 0x37, 0xe7, 0xd8, 0xf7, 0xda, 0xe7, 0x18, 0x76, 0xcf,
0xd2, 0x64, 0x73, 0x6d, 0x94, 0x55, 0xdc, 0xb3, 0xad, 0xc6, 0xfa, 0xf4, 0xa0, 0x48, 0x55, 0x59, 0xb4, 0xb4, 0xe9, 0xd4, 0x58, 0xed, 0xb4, 0x08, 0x5d, 0x65, 0xa8, 0x38, 0xde, 0xcb, 0x13, 0xbd,
0xaa, 0xaa, 0xaf, 0xc6, 0x3f, 0x19, 0x1c, 0xbf, 0x68, 0xac, 0xaa, 0x54, 0xd9, 0xbe, 0x37, 0x4a, 0x58, 0x68, 0xd5, 0x54, 0xe3, 0x9f, 0x1d, 0x38, 0x7c, 0x59, 0x3a, 0xad, 0xf4, 0xa2, 0xfa, 0x68,
0xab, 0x5a, 0x16, 0x8b, 0x4e, 0xc5, 0xcf, 0x21, 0xd0, 0x46, 0x69, 0x02, 0x21, 0x8b, 0x58, 0xb2, 0xb5, 0xd1, 0x85, 0xcc, 0x67, 0xb5, 0x4a, 0x9c, 0xc2, 0xd0, 0x58, 0x6d, 0x18, 0x44, 0xc1, 0x38,
0x7f, 0x3e, 0x9b, 0xd3, 0x1e, 0xf3, 0x11, 0x51, 0x0c, 0x34, 0xfe, 0x10, 0x60, 0xa5, 0x2c, 0x0a, 0x98, 0xec, 0x9e, 0x8e, 0xa6, 0xbc, 0xc6, 0xb4, 0x45, 0xc4, 0x35, 0x4d, 0x3c, 0x80, 0x41, 0x52,
0xac, 0x9b, 0xc2, 0x86, 0x3b, 0x24, 0x3a, 0x72, 0xa2, 0xcf, 0x57, 0x0b, 0x62, 0x83, 0xc4, 0x4f, 0x5a, 0x2c, 0x73, 0x8a, 0x3a, 0xac, 0x38, 0xf0, 0x8a, 0xba, 0xf4, 0x4a, 0xab, 0xf3, 0xec, 0x02,
0xc0, 0xaf, 0xad, 0xb4, 0x4d, 0x1d, 0x4e, 0x22, 0x96, 0x78, 0xc2, 0x21, 0x1e, 0xc2, 0xae, 0xcc, 0x57, 0x0c, 0xf1, 0x08, 0x60, 0xa9, 0x1d, 0x21, 0x15, 0x65, 0xee, 0xa2, 0x6e, 0x8b, 0xff, 0xf5,
0x32, 0x83, 0x75, 0x1d, 0x4e, 0x23, 0x96, 0x04, 0x62, 0x0d, 0x3b, 0xc5, 0x12, 0xf3, 0xaf, 0x4b, 0xea, 0x07, 0x6e, 0x90, 0xc4, 0x11, 0xf4, 0x0b, 0x27, 0x5d, 0x59, 0x44, 0xbd, 0x71, 0x30, 0x09,
0x1b, 0x7a, 0x11, 0x4b, 0x26, 0xc2, 0x21, 0x3e, 0x03, 0x2f, 0xaf, 0x32, 0xfc, 0x1e, 0xfa, 0xb4, 0xd1, 0x23, 0x11, 0xc1, 0x40, 0xa6, 0xa9, 0xa5, 0xa2, 0x88, 0xc2, 0x71, 0x30, 0x19, 0xe2, 0x0a,
0x51, 0x0f, 0xe2, 0x5f, 0x0c, 0x0e, 0xc6, 0x83, 0x71, 0x98, 0xb6, 0x28, 0x0d, 0xcd, 0xe4, 0x09, 0xd6, 0x8a, 0x39, 0x65, 0x17, 0x73, 0x17, 0xf5, 0xc7, 0xc1, 0xa4, 0x8b, 0x1e, 0x89, 0x11, 0x84,
0xfa, 0xee, 0xb4, 0xa5, 0xaa, 0xec, 0x92, 0x7a, 0xf6, 0x44, 0x0f, 0xf8, 0x21, 0x4c, 0x32, 0xd9, 0x99, 0x4a, 0xe9, 0x7b, 0x34, 0xe0, 0x85, 0x1a, 0x10, 0xff, 0x0a, 0x60, 0xaf, 0x7d, 0x0a, 0x02,
0xba, 0xc6, 0xba, 0xcf, 0xee, 0x6c, 0xba, 0xd3, 0xae, 0xa9, 0x49, 0x12, 0x08, 0x87, 0xf8, 0x7d, 0x7a, 0x15, 0x49, 0xcb, 0x07, 0x10, 0x22, 0x7f, 0xd7, 0xda, 0x85, 0x56, 0x6e, 0xce, 0x33, 0x86,
0x38, 0xac, 0xad, 0x34, 0x76, 0x51, 0xa8, 0xf4, 0xf2, 0xf5, 0x66, 0x77, 0x7f, 0xd4, 0xf9, 0x3d, 0xd8, 0x00, 0xb1, 0x0f, 0xdd, 0x54, 0x56, 0x3c, 0x47, 0x88, 0xf5, 0x67, 0xbd, 0x37, 0x5f, 0x40,
0xb8, 0x85, 0x55, 0xb6, 0xc9, 0xf4, 0x89, 0x79, 0xad, 0xca, 0xe7, 0xc0, 0x0d, 0xca, 0xe2, 0xd5, 0xdd, 0x6d, 0x77, 0x32, 0x44, 0x8f, 0xc4, 0x7d, 0xd8, 0x2f, 0x9c, 0xb4, 0x6e, 0x96, 0xeb, 0xe4,
0x98, 0xbb, 0x4b, 0xdc, 0x2d, 0x2b, 0xf1, 0x13, 0xb8, 0x2d, 0x70, 0xa5, 0x2e, 0x71, 0x3c, 0xee, 0xf2, 0x6d, 0xd3, 0x5d, 0xc8, 0xdd, 0xfd, 0x51, 0x17, 0xf7, 0xe0, 0x16, 0xa9, 0x74, 0x93, 0xd9,
0x5d, 0x00, 0xed, 0x0a, 0x6f, 0x5e, 0xd2, 0xd0, 0x81, 0xd8, 0xa8, 0xc4, 0xef, 0xe0, 0xa8, 0x7b, 0xcc, 0x71, 0xad, 0x2a, 0xa6, 0x20, 0x2c, 0xc9, 0xfc, 0x4d, 0x9b, 0x3b, 0x60, 0xee, 0x96, 0x3f,
0x9a, 0x1b, 0x89, 0xe8, 0x75, 0xb4, 0x36, 0x6a, 0x85, 0x74, 0x63, 0x7b, 0x62, 0x0d, 0xe3, 0x67, 0xf1, 0x53, 0xb8, 0x8d, 0xb4, 0xd4, 0x97, 0xd4, 0x1e, 0xf7, 0x2e, 0x80, 0xf1, 0x85, 0x77, 0xaf,
0x70, 0xf2, 0x11, 0x4d, 0x99, 0x57, 0xf2, 0x86, 0x7b, 0xc6, 0x3f, 0x18, 0xcc, 0x04, 0xa6, 0x98, 0x79, 0xe8, 0x21, 0x6e, 0x54, 0xe2, 0x0f, 0x70, 0x50, 0x5f, 0xcd, 0x8d, 0x44, 0x7c, 0x3b, 0xc6,
0x6b, 0x3b, 0x16, 0x3e, 0x80, 0xa9, 0x36, 0xb8, 0x72, 0x26, 0x3c, 0x73, 0x7e, 0xda, 0xea, 0x5a, 0x58, 0xbd, 0x6c, 0x5c, 0xb1, 0x83, 0x2b, 0x18, 0x3f, 0x87, 0xa3, 0xcf, 0x64, 0x17, 0x99, 0x92,
0x41, 0x4c, 0xfe, 0x14, 0x76, 0xd3, 0xc6, 0x18, 0xac, 0xd6, 0x26, 0xfc, 0xbb, 0x68, 0x4d, 0x8e, 0x37, 0x5c, 0x33, 0xfe, 0x11, 0xc0, 0x08, 0x29, 0xa1, 0xcc, 0xb8, 0xb6, 0xf0, 0x21, 0xf4, 0x8c,
0xbf, 0x00, 0x7f, 0xab, 0x52, 0x59, 0x8c, 0xcf, 0x7f, 0x0c, 0x3e, 0x59, 0x3c, 0xfb, 0xaf, 0x0e, 0xa5, 0xa5, 0x77, 0xec, 0x89, 0xf7, 0xd3, 0x56, 0x8b, 0x23, 0x33, 0xc5, 0x33, 0x36, 0xad, 0x25,
0x1c, 0x97, 0x9f, 0xc2, 0x5e, 0x97, 0x34, 0xac, 0x6c, 0x1d, 0xee, 0x90, 0x59, 0xae, 0x70, 0xdc, 0xe5, 0xbc, 0x69, 0xff, 0x2e, 0x5a, 0x91, 0xe3, 0x73, 0x10, 0xef, 0x75, 0x22, 0xf3, 0xf6, 0xfe,
0xc2, 0xb1, 0xc0, 0x6f, 0x1f, 0x1a, 0x34, 0xd7, 0x42, 0x37, 0xa4, 0x81, 0x8d, 0xd2, 0x30, 0x03, 0x4f, 0xa0, 0xcf, 0x79, 0x48, 0xff, 0xab, 0x03, 0xcf, 0x15, 0xc7, 0xb0, 0x53, 0xc7, 0x92, 0x94,
0x2f, 0x55, 0x8d, 0x1b, 0xc7, 0x13, 0x3d, 0xe0, 0x67, 0x10, 0x64, 0xb9, 0xc1, 0xd4, 0xe6, 0xaa, 0x2b, 0xa2, 0x0e, 0x9b, 0xe5, 0x0a, 0xc7, 0x15, 0x1c, 0x22, 0x7d, 0xfb, 0x54, 0x92, 0xbd, 0x96,
0x72, 0x2e, 0x1d, 0x0a, 0x43, 0x1e, 0xa6, 0x64, 0x19, 0x97, 0x87, 0x4f, 0x70, 0x47, 0xa0, 0x2e, 0xd0, 0x75, 0x1a, 0x82, 0x56, 0x1a, 0x46, 0x10, 0x26, 0xba, 0xf4, 0xe3, 0x84, 0xd8, 0x00, 0x71,
0xda, 0x2d, 0x87, 0x3f, 0xa7, 0xc4, 0x2f, 0x7a, 0x7f, 0xb3, 0x68, 0xf2, 0xcf, 0x51, 0x07, 0xfa, 0x02, 0xc3, 0x34, 0xb3, 0x94, 0xb8, 0x4c, 0x2b, 0xef, 0xd2, 0x75, 0x61, 0x9d, 0x87, 0x1e, 0x5b,
0x85, 0x4f, 0xbf, 0x93, 0x47, 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, 0x3f, 0xce, 0x7c, 0xf0, 0x73, 0xc6, 0xe7, 0xe1, 0x0b, 0xdc, 0x41, 0x32, 0x79, 0xb5, 0x65, 0xf3, 0x17, 0xfc, 0x3c, 0xcc, 0x1a,
0x04, 0x00, 0x00, 0x7f, 0x07, 0xe3, 0xee, 0x3f, 0x47, 0x5d, 0xd3, 0xcf, 0xfa, 0xfc, 0xf6, 0x3c, 0xfe, 0x1d, 0x00,
0x00, 0xff, 0xff, 0x86, 0xfa, 0x5a, 0x11, 0xa0, 0x04, 0x00, 0x00,
} }
...@@ -15,7 +15,7 @@ var _ = math.Inf ...@@ -15,7 +15,7 @@ var _ = math.Inf
type AutonomyProposalProject struct { type AutonomyProposalProject struct {
PropProject *ProposalProject `protobuf:"bytes,1,opt,name=propProject" json:"propProject,omitempty"` PropProject *ProposalProject `protobuf:"bytes,1,opt,name=propProject" json:"propProject,omitempty"`
// 投票该提案的规则 // 投票该提案的规则
CurRule *RuleConfig `protobuf:"bytes,2,opt,name=CurRule" json:"CurRule,omitempty"` CurRule *RuleConfig `protobuf:"bytes,2,opt,name=curRule" json:"curRule,omitempty"`
// 投票该提案的董事会成员 // 投票该提案的董事会成员
Boards []string `protobuf:"bytes,3,rep,name=boards" json:"boards,omitempty"` Boards []string `protobuf:"bytes,3,rep,name=boards" json:"boards,omitempty"`
// 董事会投票结果 // 董事会投票结果
...@@ -432,48 +432,48 @@ func init() { ...@@ -432,48 +432,48 @@ func init() {
func init() { proto.RegisterFile("project.proto", fileDescriptor3) } func init() { proto.RegisterFile("project.proto", fileDescriptor3) }
var fileDescriptor3 = []byte{ var fileDescriptor3 = []byte{
// 684 bytes of a gzipped FileDescriptorProto // 686 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x55, 0x5d, 0x6f, 0xd3, 0x30, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x55, 0x4d, 0x6f, 0x13, 0x3b,
0x14, 0x55, 0x97, 0xa6, 0x5d, 0x6f, 0xbb, 0x0f, 0xbc, 0xd1, 0x99, 0x09, 0x4d, 0x55, 0x1e, 0x50, 0x14, 0x55, 0x3a, 0x99, 0xa4, 0xb9, 0x49, 0x3f, 0x9e, 0xdb, 0x97, 0xfa, 0x55, 0x4f, 0x55, 0x34,
0x05, 0x52, 0x85, 0x86, 0x10, 0x13, 0x6f, 0xfb, 0x40, 0x02, 0x09, 0x8d, 0x62, 0x10, 0xaf, 0xc8, 0x8b, 0xa7, 0xe8, 0x21, 0x45, 0xa8, 0x08, 0x51, 0xb1, 0x6b, 0x29, 0x12, 0x48, 0xa8, 0x04, 0x83,
0x4d, 0xbc, 0x2d, 0x5b, 0x1a, 0x1b, 0xc7, 0x99, 0xa8, 0x78, 0xe7, 0x57, 0xf2, 0x3f, 0x78, 0x45, 0xd8, 0xa2, 0xc9, 0xcc, 0x6d, 0x3b, 0xed, 0x64, 0x6c, 0x3c, 0x9e, 0x8a, 0x88, 0x3d, 0xbf, 0x92,
0xbe, 0x76, 0x68, 0xd3, 0x0d, 0xb1, 0xbd, 0xf9, 0x9c, 0x7b, 0xce, 0x4d, 0x7d, 0x6d, 0x9f, 0xc2, 0xff, 0xc1, 0x16, 0xf9, 0xda, 0x43, 0x3e, 0x5a, 0x44, 0xbb, 0xf3, 0x39, 0xf7, 0x9c, 0x3b, 0xf1,
0x9a, 0xd2, 0xf2, 0x52, 0xc4, 0x66, 0xa4, 0xb4, 0x34, 0x92, 0x84, 0x66, 0xa6, 0x44, 0xb1, 0xbb, 0xb5, 0x7d, 0x02, 0x1b, 0x4a, 0xcb, 0x2b, 0x4c, 0xcc, 0x48, 0x69, 0x69, 0x24, 0x0b, 0xcd, 0x4c,
0x96, 0xc5, 0x72, 0x3a, 0x95, 0xb9, 0x63, 0xa3, 0x5f, 0x2b, 0xb0, 0x73, 0x58, 0x1a, 0x99, 0xcb, 0x61, 0xb9, 0xbf, 0x91, 0x27, 0x72, 0x3a, 0x95, 0x85, 0x63, 0xa3, 0xef, 0x6b, 0xb0, 0x77, 0x5c,
0xe9, 0x6c, 0xac, 0xa5, 0x92, 0x05, 0xcf, 0xc6, 0xce, 0x47, 0x0e, 0xa0, 0xab, 0xb4, 0x54, 0x1e, 0x19, 0x59, 0xc8, 0xe9, 0x6c, 0xac, 0xa5, 0x92, 0x65, 0x9c, 0x8f, 0x9d, 0x8f, 0x1d, 0x41, 0x57,
0xd2, 0xc6, 0xa0, 0x31, 0xec, 0xee, 0xf7, 0x47, 0xd8, 0x67, 0xb4, 0x24, 0x66, 0x8b, 0x52, 0xf2, 0x69, 0xa9, 0x3c, 0xe4, 0x8d, 0x41, 0x63, 0xd8, 0x3d, 0xec, 0x8f, 0xa8, 0xcf, 0x68, 0x45, 0x2c,
0x0c, 0xda, 0xc7, 0xa5, 0x66, 0x65, 0x26, 0xe8, 0x0a, 0xba, 0x1e, 0x78, 0x97, 0xa5, 0x8e, 0x65, 0x16, 0xa5, 0xec, 0x11, 0xb4, 0x93, 0x4a, 0x8b, 0x2a, 0x47, 0xbe, 0x46, 0xae, 0xbf, 0xbc, 0xcb,
0x7e, 0x96, 0x9e, 0xb3, 0x4a, 0x41, 0xfa, 0xd0, 0x9a, 0x48, 0xae, 0x93, 0x82, 0x06, 0x83, 0x60, 0x52, 0x2f, 0x64, 0x71, 0x9e, 0x5d, 0x88, 0x5a, 0xc1, 0xfa, 0xd0, 0x9a, 0xc8, 0x58, 0xa7, 0x25,
0xd8, 0x61, 0x1e, 0x91, 0x97, 0xd0, 0xc3, 0xd5, 0x17, 0x69, 0x04, 0x13, 0x05, 0x6d, 0xd6, 0x3a, 0x0f, 0x06, 0xc1, 0xb0, 0x23, 0x3c, 0x62, 0x4f, 0xa1, 0x47, 0xab, 0x8f, 0xd2, 0xa0, 0xc0, 0x92,
0x79, 0xb6, 0xcc, 0x0c, 0xab, 0xc9, 0xec, 0xb7, 0x55, 0x39, 0xb1, 0x88, 0x86, 0x35, 0xc7, 0xb8, 0x37, 0x97, 0x3a, 0x79, 0xb6, 0xca, 0x8d, 0x58, 0x92, 0xd9, 0x6f, 0xab, 0x6a, 0x62, 0x11, 0x0f,
0x9c, 0x64, 0x69, 0x8c, 0xb2, 0x4a, 0x61, 0xbf, 0x5d, 0x18, 0x6e, 0xca, 0x82, 0xb6, 0x06, 0x8d, 0x97, 0x1c, 0xe3, 0x6a, 0x92, 0x67, 0x09, 0xc9, 0x6a, 0x85, 0xfd, 0x76, 0x69, 0x62, 0x53, 0x95,
0x61, 0xc8, 0x3c, 0x22, 0x14, 0xda, 0x3c, 0x49, 0xb4, 0x28, 0x0a, 0xda, 0x1e, 0x34, 0x86, 0x1d, 0xbc, 0x35, 0x68, 0x0c, 0x43, 0xe1, 0x11, 0xe3, 0xd0, 0x8e, 0xd3, 0x54, 0x63, 0x59, 0xf2, 0xf6,
0x56, 0x41, 0xeb, 0xb8, 0x10, 0xe9, 0xf9, 0x85, 0xa1, 0xab, 0x83, 0xc6, 0x30, 0x60, 0x1e, 0x91, 0xa0, 0x31, 0xec, 0x88, 0x1a, 0x5a, 0xc7, 0x25, 0x66, 0x17, 0x97, 0x86, 0xaf, 0x0f, 0x1a, 0xc3,
0x6d, 0x08, 0xd3, 0x3c, 0x11, 0xdf, 0x69, 0x07, 0x1b, 0x39, 0x10, 0xfd, 0x0e, 0x60, 0x63, 0x79, 0x40, 0x78, 0xc4, 0x76, 0x21, 0xcc, 0x8a, 0x14, 0xbf, 0xf0, 0x0e, 0x35, 0x72, 0x20, 0xfa, 0x11,
0xac, 0x04, 0x9a, 0x33, 0xc1, 0x35, 0xce, 0x33, 0x64, 0xb8, 0xb6, 0xee, 0xa9, 0xcc, 0xcd, 0x05, 0xc0, 0xd6, 0xea, 0x58, 0x19, 0x34, 0x67, 0x18, 0x6b, 0x9a, 0x67, 0x28, 0x68, 0x6d, 0xdd, 0x53,
0x8e, 0x2b, 0x64, 0x0e, 0x90, 0x4d, 0x08, 0x12, 0x3e, 0xa3, 0x01, 0x72, 0x76, 0x49, 0xf6, 0x00, 0x59, 0x98, 0x4b, 0x1a, 0x57, 0x28, 0x1c, 0x60, 0xdb, 0x10, 0xa4, 0xf1, 0x8c, 0x07, 0xc4, 0xd9,
0xce, 0x52, 0x5d, 0x98, 0x4f, 0x86, 0x9f, 0x0b, 0x9c, 0x48, 0x87, 0x2d, 0x30, 0xe4, 0x31, 0x74, 0x25, 0x3b, 0x00, 0x38, 0xcf, 0x74, 0x69, 0xde, 0x9b, 0xf8, 0x02, 0x69, 0x22, 0x1d, 0xb1, 0xc0,
0x32, 0x5e, 0x95, 0x43, 0x2c, 0xcf, 0x09, 0xeb, 0x56, 0x5a, 0x26, 0x65, 0x6c, 0x52, 0x99, 0xe3, 0xb0, 0x7f, 0xa1, 0x93, 0xc7, 0x75, 0x39, 0xa4, 0xf2, 0x9c, 0xb0, 0x6e, 0xa5, 0x65, 0x5a, 0x25,
0x8e, 0x3b, 0x6c, 0x81, 0x21, 0x03, 0xe8, 0x26, 0xa2, 0x88, 0x75, 0xaa, 0x50, 0xe0, 0x76, 0xbe, 0x26, 0x93, 0x05, 0xed, 0xb8, 0x23, 0x16, 0x18, 0x36, 0x80, 0x6e, 0x8a, 0x65, 0xa2, 0x33, 0x45,
0x48, 0xd9, 0x0e, 0xb1, 0xcc, 0x8d, 0xe6, 0xb1, 0x91, 0x1a, 0x27, 0xd0, 0x61, 0x0b, 0x8c, 0x9d, 0x02, 0xb7, 0xf3, 0x45, 0xca, 0x76, 0x48, 0x64, 0x61, 0x74, 0x9c, 0x18, 0xa9, 0x69, 0x02, 0x1d,
0x0e, 0x9f, 0xca, 0x32, 0x37, 0x38, 0x86, 0x80, 0x79, 0x44, 0x22, 0xe8, 0xb9, 0xd5, 0x89, 0x30, 0xb1, 0xc0, 0xd8, 0xe9, 0xc4, 0x53, 0x59, 0x15, 0x86, 0xc6, 0x10, 0x08, 0x8f, 0x58, 0x04, 0x3d,
0x3c, 0xcd, 0x28, 0xa0, 0xb3, 0xc6, 0x59, 0xaf, 0x91, 0x87, 0x49, 0xa2, 0x69, 0x17, 0xab, 0x1e, 0xb7, 0x3a, 0x45, 0x13, 0x67, 0x39, 0x07, 0x72, 0x2e, 0x71, 0xd6, 0x6b, 0xe4, 0x71, 0x9a, 0x6a,
0x91, 0xa7, 0xb0, 0x59, 0x18, 0xae, 0xcd, 0x51, 0x26, 0xe3, 0xab, 0xb7, 0x6e, 0xf6, 0x3d, 0xec, 0xde, 0xa5, 0xaa, 0x47, 0xec, 0x7f, 0xd8, 0x2e, 0x4d, 0xac, 0xcd, 0x49, 0x2e, 0x93, 0xeb, 0x57,
0x7e, 0x83, 0x27, 0x4f, 0x60, 0x5d, 0xe4, 0xc9, 0xa2, 0x72, 0x0d, 0x95, 0x4b, 0x2c, 0x19, 0x01, 0x6e, 0xf6, 0x3d, 0xea, 0x7e, 0x8b, 0x67, 0xff, 0xc1, 0x26, 0x16, 0xe9, 0xa2, 0x72, 0x83, 0x94,
0xd1, 0x82, 0x67, 0x6f, 0xea, 0xda, 0x75, 0xd4, 0xde, 0x52, 0x21, 0xcf, 0x61, 0xcb, 0xbf, 0xa6, 0x2b, 0x2c, 0x1b, 0x01, 0xd3, 0x18, 0xe7, 0x2f, 0x97, 0xb5, 0x9b, 0xa4, 0xbd, 0xa3, 0xc2, 0x1e,
0x53, 0x21, 0x5c, 0xe5, 0xb4, 0x9c, 0xd2, 0x0d, 0x3c, 0x99, 0xdb, 0x4a, 0xd1, 0x2b, 0x78, 0xc8, 0xc3, 0x8e, 0x7f, 0x4d, 0x67, 0x88, 0xae, 0x72, 0x56, 0x4d, 0xf9, 0x16, 0x9d, 0xcc, 0x5d, 0xa5,
0xc4, 0xb5, 0xbc, 0x12, 0xcb, 0xc7, 0xef, 0x0e, 0x01, 0xa9, 0x77, 0x27, 0x78, 0x09, 0xdc, 0x21, 0xe8, 0x19, 0xfc, 0x2d, 0xf0, 0x46, 0x5e, 0xe3, 0xea, 0xf1, 0xbb, 0x43, 0x20, 0xea, 0xf5, 0x29,
0x78, 0x26, 0xfa, 0x00, 0x5b, 0xf6, 0x6a, 0xde, 0xd3, 0x86, 0x37, 0x56, 0x29, 0x2d, 0xaf, 0xdd, 0x5d, 0x02, 0x77, 0x08, 0x9e, 0x89, 0xde, 0xc2, 0x8e, 0xbd, 0x9a, 0x0f, 0xb4, 0xd1, 0x8d, 0x55,
0x93, 0x5b, 0x65, 0x15, 0x8c, 0xc6, 0xd0, 0x1f, 0xbb, 0xeb, 0x7e, 0xdf, 0x9e, 0x7d, 0x68, 0x49, 0x4a, 0xcb, 0x1b, 0xf7, 0xe4, 0xd6, 0x45, 0x0d, 0xa3, 0x31, 0xf4, 0xc7, 0xee, 0xba, 0x3f, 0xb4,
0xa5, 0x64, 0x51, 0xb5, 0xf4, 0x28, 0x7a, 0x0d, 0xf4, 0xb3, 0xd0, 0xd3, 0x34, 0xe7, 0xf7, 0xee, 0x67, 0x1f, 0x5a, 0x52, 0x29, 0x59, 0xd6, 0x2d, 0x3d, 0x8a, 0x9e, 0x03, 0xff, 0x80, 0x7a, 0x9a,
0x19, 0xfd, 0x6c, 0x40, 0x9f, 0x89, 0x58, 0xa4, 0xca, 0x2c, 0x5b, 0xf7, 0xa1, 0xa9, 0xb4, 0xb8, 0x15, 0xf1, 0x83, 0x7b, 0x46, 0xdf, 0x1a, 0xd0, 0x17, 0x98, 0x60, 0xa6, 0xcc, 0xaa, 0xf5, 0x10,
0xf6, 0x41, 0xb3, 0xe7, 0x9f, 0xed, 0x3f, 0xd2, 0x89, 0xa1, 0x96, 0x1c, 0x40, 0x3b, 0x2e, 0xb5, 0x9a, 0x4a, 0xe3, 0x8d, 0x0f, 0x9a, 0x03, 0xff, 0x6c, 0x7f, 0x93, 0x4e, 0x82, 0xb4, 0xec, 0x88,
0x16, 0xb9, 0xf1, 0x49, 0xf3, 0x3f, 0x5b, 0x25, 0x8f, 0x32, 0xd8, 0x7e, 0x2f, 0x63, 0x2c, 0x2c, 0x92, 0x46, 0x63, 0x61, 0x7c, 0xd2, 0xfc, 0xc9, 0x56, 0xcb, 0xa3, 0x1c, 0x76, 0xdf, 0xc8, 0x84,
0xa5, 0x5e, 0xdb, 0x45, 0xd9, 0xe5, 0x1d, 0x7f, 0x48, 0x25, 0x27, 0xbb, 0xb0, 0x6a, 0xb3, 0x55, 0x0a, 0x2b, 0xa9, 0xd7, 0x76, 0x51, 0x76, 0x75, 0xcf, 0x1f, 0x52, 0xcb, 0xd9, 0x3e, 0xac, 0xdb,
0xe4, 0xa6, 0xa0, 0x2b, 0x18, 0x65, 0x7f, 0x71, 0xf4, 0x03, 0x76, 0x98, 0xf8, 0xf6, 0xb1, 0x14, 0x6c, 0xc5, 0xc2, 0x94, 0x7c, 0x8d, 0xa2, 0xec, 0x17, 0x8e, 0xbe, 0xc2, 0x9e, 0xc0, 0xcf, 0xef,
0xfa, 0x46, 0xcc, 0xce, 0x33, 0xa8, 0x51, 0xcb, 0xa0, 0x6d, 0x08, 0x63, 0x7c, 0x4a, 0x3e, 0x13, 0x2a, 0xd4, 0xb7, 0x62, 0x76, 0x9e, 0x41, 0x8d, 0xa5, 0x0c, 0xda, 0x85, 0x30, 0xa1, 0xa7, 0xe4,
0x10, 0xd8, 0x17, 0x9e, 0xa4, 0x5a, 0xb8, 0x27, 0xec, 0x92, 0x61, 0x4e, 0xcc, 0x53, 0xa8, 0x89, 0x33, 0x81, 0x80, 0x7d, 0xe1, 0x69, 0xa6, 0xd1, 0x3d, 0x61, 0x97, 0x0c, 0x73, 0x62, 0x9e, 0x42,
0x57, 0xd9, 0xa7, 0xd0, 0x57, 0x78, 0xc4, 0x84, 0xca, 0x66, 0xb7, 0x7e, 0xfe, 0x08, 0x7a, 0x0b, 0x4d, 0xba, 0xca, 0x3e, 0x85, 0x3e, 0xc1, 0x3f, 0x02, 0x55, 0x3e, 0xbb, 0xf3, 0xf3, 0x27, 0xd0,
0xd1, 0x6d, 0x7f, 0x44, 0x70, 0x87, 0x4d, 0xd7, 0x3c, 0x93, 0x16, 0xfe, 0x99, 0xbc, 0xf8, 0x13, 0x5b, 0x88, 0x6e, 0xfb, 0x23, 0x82, 0x7b, 0x6c, 0x7a, 0xc9, 0x33, 0x69, 0xd1, 0x9f, 0xc9, 0x93,
0x00, 0x00, 0xff, 0xff, 0x8d, 0x4a, 0xb0, 0x36, 0x73, 0x06, 0x00, 0x00, 0x9f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x2e, 0x98, 0xa5, 0xae, 0x73, 0x06, 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