Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
P
plugin
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
JIRA
JIRA
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
link33
plugin
Commits
fac9d130
Commit
fac9d130
authored
Dec 17, 2021
by
harrylee
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add get broker info command
parent
4652fb73
Pipeline
#8377
failed with stages
in 0 seconds
Changes
5
Pipelines
1
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
147 additions
and
51 deletions
+147
-51
commands.go
plugin/dapp/broker/commands/commands.go
+76
-0
brokerdb.go
plugin/dapp/broker/executor/brokerdb.go
+6
-5
broker.proto
plugin/dapp/broker/proto/broker.proto
+2
-0
broker.go
plugin/dapp/broker/types/broker.go
+7
-0
broker.pb.go
plugin/dapp/broker/types/broker.pb.go
+56
-46
No files found.
plugin/dapp/broker/commands/commands.go
View file @
fac9d130
...
@@ -30,6 +30,7 @@ func Cmd() *cobra.Command {
...
@@ -30,6 +30,7 @@ func Cmd() *cobra.Command {
InterchainSetRawTxCmd
(),
InterchainSetRawTxCmd
(),
Init_Broker
(),
Init_Broker
(),
QueryStorageCmd
(),
QueryStorageCmd
(),
GetBrokerInfoCmd
(),
)
)
return
cmd
return
cmd
}
}
...
@@ -314,3 +315,78 @@ func ParseStorage(res interface{}) (interface{}, error) {
...
@@ -314,3 +315,78 @@ func ParseStorage(res interface{}) (interface{}, error) {
}
}
return
nil
,
fmt
.
Errorf
(
"unknow storage type!"
)
return
nil
,
fmt
.
Errorf
(
"unknow storage type!"
)
}
}
func
GetBrokerInfoCmd
()
*
cobra
.
Command
{
cmd
:=
&
cobra
.
Command
{
Use
:
"get"
,
Short
:
"get broker info"
,
Run
:
getBrokerInfo
,
}
GetBrokerInfoFlags
(
cmd
)
return
cmd
}
func
GetBrokerInfoFlags
(
cmd
*
cobra
.
Command
)
{
//cmd.Flags().StringP("key", "k", "", "get storage key, such as \"key\"")
//err := cmd.MarkFlagRequired("key")
//if err != nil {
// fmt.Printf("MarkFlagRequired get key Error: %v", err)
// return
//}
}
func
getBrokerInfo
(
cmd
*
cobra
.
Command
,
args
[]
string
)
{
paraName
,
_
:=
cmd
.
Flags
()
.
GetString
(
"paraName"
)
rpcLaddr
,
err
:=
cmd
.
Flags
()
.
GetString
(
"rpc_laddr"
)
if
err
!=
nil
{
fmt
.
Printf
(
"getStorage get rpc addr Error: %v"
,
err
)
return
}
brokerInfo
,
err
:=
GetBrokerInfo
(
paraName
,
rpcLaddr
)
if
err
!=
nil
{
fmt
.
Println
(
"QueryStorageBykey Error: %v"
,
err
)
return
}
fmt
.
Println
(
fmt
.
Sprintf
(
"%s:%s:%s"
,
brokerInfo
.
GetBxhId
(),
brokerInfo
.
GetAppChainId
(),
brokerInfo
.
GetServiceId
()))
return
}
func
GetBrokerInfo
(
prefix
,
rpcLaddr
string
)
(
*
brokerty
.
BrokerInfo
,
error
)
{
params
:=
&
rpctypes
.
Query4Jrpc
{
Execer
:
types
.
GetExecName
(
brokerty
.
BrokerX
,
prefix
),
FuncName
:
brokerty
.
FuncNameGetBrokerInfo
,
Payload
:
nil
,
}
var
res
json
.
RawMessage
ctx
:=
jsonclient
.
NewRPCCtx
(
rpcLaddr
,
"Chain33.Query"
,
params
,
&
res
)
ctx
.
SetResultCb
(
ParseBrokerInfo
)
data
,
err
:=
ctx
.
RunResult
()
if
err
!=
nil
{
return
nil
,
err
}
return
data
.
(
*
brokerty
.
BrokerInfo
),
nil
}
// 回调解析函数
func
ParseBrokerInfo
(
res
interface
{})
(
interface
{},
error
)
{
raw
,
ok
:=
res
.
(
*
json
.
RawMessage
)
if
!
ok
{
return
nil
,
fmt
.
Errorf
(
"res is not json rawMessage type!"
)
}
js
,
err
:=
NewJson
(
*
raw
)
if
err
!=
nil
{
return
nil
,
err
}
bxhId
,
_
:=
js
.
Get
(
"bxhId"
)
.
String
()
appChainId
,
_
:=
js
.
Get
(
"appChainId"
)
.
String
()
broker
:=
&
brokerty
.
BrokerInfo
{
BxhId
:
bxhId
,
AppChainId
:
appChainId
,
XXX_NoUnkeyedLiteral
:
struct
{}{},
XXX_unrecognized
:
nil
,
XXX_sizecache
:
0
,
}
return
broker
,
nil
}
plugin/dapp/broker/executor/brokerdb.go
View file @
fac9d130
...
@@ -57,6 +57,7 @@ func (b *BrokerDB) initBroker(payload *brokertypes.Init) (*types.Receipt, error)
...
@@ -57,6 +57,7 @@ func (b *BrokerDB) initBroker(payload *brokertypes.Init) (*types.Receipt, error)
if
b
.
fromaddr
!=
getManagerAddr
(
b
.
api
.
GetConfig
(),
b
.
statedb
,
brokerAdmin
,
DefaultManagerAddr
)
{
if
b
.
fromaddr
!=
getManagerAddr
(
b
.
api
.
GetConfig
(),
b
.
statedb
,
brokerAdmin
,
DefaultManagerAddr
)
{
return
nil
,
fmt
.
Errorf
(
"the addr %s is not admin"
,
b
.
fromaddr
)
return
nil
,
fmt
.
Errorf
(
"the addr %s is not admin"
,
b
.
fromaddr
)
}
}
brokerInfo
:=
&
brokertypes
.
BrokerInfo
{
AppChainId
:
payload
.
GetAppChainId
(),
BxhId
:
payload
.
GetBxhId
(),
ServiceId
:
b
.
api
.
GetConfig
()
.
GetTitle
()
+
delimiter
+
"broker"
}
m
:=
make
(
map
[
string
]
uint64
)
m
:=
make
(
map
[
string
]
uint64
)
//初始化map,填充一些默认值,防止序列化后为nil
//初始化map,填充一些默认值,防止序列化后为nil
m
[
"broker"
]
=
0
m
[
"broker"
]
=
0
...
@@ -70,7 +71,7 @@ func (b *BrokerDB) initBroker(payload *brokertypes.Init) (*types.Receipt, error)
...
@@ -70,7 +71,7 @@ func (b *BrokerDB) initBroker(payload *brokertypes.Init) (*types.Receipt, error)
kvsets
=
append
(
kvsets
,
&
types
.
KeyValue
{
Key
:
calDstRollBackMetaKey
(),
Value
:
types
.
Encode
(
meta
)})
kvsets
=
append
(
kvsets
,
&
types
.
KeyValue
{
Key
:
calDstRollBackMetaKey
(),
Value
:
types
.
Encode
(
meta
)})
receipt
:=
&
types
.
Receipt
{
Ty
:
types
.
ExecOk
}
receipt
:=
&
types
.
Receipt
{
Ty
:
types
.
ExecOk
}
receipt
.
KV
=
append
(
receipt
.
KV
,
kvsets
...
)
receipt
.
KV
=
append
(
receipt
.
KV
,
kvsets
...
)
receipt
.
KV
=
append
(
receipt
.
KV
,
&
types
.
KeyValue
{
Key
:
BxhIDKey
(),
Value
:
types
.
Encode
(
payload
)})
receipt
.
KV
=
append
(
receipt
.
KV
,
&
types
.
KeyValue
{
Key
:
BxhIDKey
(),
Value
:
types
.
Encode
(
brokerInfo
)})
receipt
.
Ty
=
brokertypes
.
TyInitLog
receipt
.
Ty
=
brokertypes
.
TyInitLog
return
receipt
,
nil
return
receipt
,
nil
}
}
...
@@ -89,7 +90,7 @@ func (b *BrokerDB) audit(payload *brokertypes.Audit) (*types.Receipt, error) {
...
@@ -89,7 +90,7 @@ func (b *BrokerDB) audit(payload *brokertypes.Audit) (*types.Receipt, error) {
func
(
b
*
BrokerDB
)
updateIndex
(
payload
*
brokertypes
.
UpdateIndex
)
(
*
types
.
Receipt
,
error
)
{
func
(
b
*
BrokerDB
)
updateIndex
(
payload
*
brokertypes
.
UpdateIndex
)
(
*
types
.
Receipt
,
error
)
{
//FIXME 权限检查
//FIXME 权限检查
currentServiceID
,
err
:=
b
.
genFullServiceID
(
payload
.
DstServiceID
)
currentServiceID
,
err
:=
b
.
genFullServiceID
(
payload
.
DstServiceID
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"can't get current service ID!"
)
return
nil
,
fmt
.
Errorf
(
"can't get current service ID!"
)
}
}
...
@@ -103,7 +104,7 @@ func (b *BrokerDB) updateIndex(payload *brokertypes.UpdateIndex) (*types.Receipt
...
@@ -103,7 +104,7 @@ func (b *BrokerDB) updateIndex(payload *brokertypes.UpdateIndex) (*types.Receipt
payload
.
DstServiceID
=
currentServiceID
payload
.
DstServiceID
=
currentServiceID
idx
:=
meta
.
Meta
[
inServicePair
]
idx
:=
meta
.
Meta
[
inServicePair
]
if
payload
.
SequenceNum
!=
idx
+
1
{
if
payload
.
SequenceNum
!=
idx
+
1
{
return
nil
,
fmt
.
Errorf
(
"Req_Inner incorrect index,key %s expect %d,but get %d"
,
inServicePair
,
idx
+
1
,
payload
.
SequenceNum
)
return
nil
,
fmt
.
Errorf
(
"Req_Inner incorrect index,key %s expect %d,but get %d"
,
inServicePair
,
idx
+
1
,
payload
.
SequenceNum
)
}
}
meta
.
Meta
[
inServicePair
]
=
idx
+
1
meta
.
Meta
[
inServicePair
]
=
idx
+
1
kvset
:=
b
.
GetMetaKVSet
(
payload
.
ReqType
,
meta
)
kvset
:=
b
.
GetMetaKVSet
(
payload
.
ReqType
,
meta
)
...
@@ -118,7 +119,7 @@ func (b *BrokerDB) updateIndex(payload *brokertypes.UpdateIndex) (*types.Receipt
...
@@ -118,7 +119,7 @@ func (b *BrokerDB) updateIndex(payload *brokertypes.UpdateIndex) (*types.Receipt
}
}
idx
:=
meta
.
Meta
[
outServicePair
]
idx
:=
meta
.
Meta
[
outServicePair
]
if
payload
.
SequenceNum
!=
idx
+
1
{
if
payload
.
SequenceNum
!=
idx
+
1
{
return
nil
,
fmt
.
Errorf
(
"Req_Callback incorrect index,key %s expect %d,but get %d"
,
outServicePair
,
idx
+
1
,
payload
.
SequenceNum
)
return
nil
,
fmt
.
Errorf
(
"Req_Callback incorrect index,key %s expect %d,but get %d"
,
outServicePair
,
idx
+
1
,
payload
.
SequenceNum
)
}
}
meta
.
Meta
[
outServicePair
]
=
idx
+
1
meta
.
Meta
[
outServicePair
]
=
idx
+
1
kvset
:=
b
.
GetMetaKVSet
(
payload
.
ReqType
,
meta
)
kvset
:=
b
.
GetMetaKVSet
(
payload
.
ReqType
,
meta
)
...
@@ -133,7 +134,7 @@ func (b *BrokerDB) updateIndex(payload *brokertypes.UpdateIndex) (*types.Receipt
...
@@ -133,7 +134,7 @@ func (b *BrokerDB) updateIndex(payload *brokertypes.UpdateIndex) (*types.Receipt
}
}
idx
:=
meta
.
Meta
[
inServicePair
]
idx
:=
meta
.
Meta
[
inServicePair
]
if
payload
.
SequenceNum
<
idx
+
1
{
if
payload
.
SequenceNum
<
idx
+
1
{
return
nil
,
fmt
.
Errorf
(
"Req_DstRollback incorrect index,key %s expect %d,but get %d"
,
inServicePair
,
idx
+
1
,
payload
.
SequenceNum
)
return
nil
,
fmt
.
Errorf
(
"Req_DstRollback incorrect index,key %s expect %d,but get %d"
,
inServicePair
,
idx
+
1
,
payload
.
SequenceNum
)
}
}
meta
.
Meta
[
inServicePair
]
=
payload
.
SequenceNum
meta
.
Meta
[
inServicePair
]
=
payload
.
SequenceNum
kvset
:=
b
.
GetMetaKVSet
(
payload
.
ReqType
,
meta
)
kvset
:=
b
.
GetMetaKVSet
(
payload
.
ReqType
,
meta
)
...
...
plugin/dapp/broker/proto/broker.proto
View file @
fac9d130
...
@@ -124,6 +124,8 @@ message BrokerInfo {
...
@@ -124,6 +124,8 @@ message BrokerInfo {
string
bxhId
=
1
;
string
bxhId
=
1
;
//应用链ID
//应用链ID
string
appChainId
=
2
;
string
appChainId
=
2
;
//服务ID
string
serviceId
=
3
;
}
}
...
...
plugin/dapp/broker/types/broker.go
View file @
fac9d130
...
@@ -25,6 +25,13 @@ const (
...
@@ -25,6 +25,13 @@ const (
NameAuditAction
=
"Audit"
NameAuditAction
=
"Audit"
NameUpdateIndexAction
=
"UpdateIndex"
NameUpdateIndexAction
=
"UpdateIndex"
NameEmitInterchainEventAction
=
"EmitInterchainEvent"
NameEmitInterchainEventAction
=
"EmitInterchainEvent"
FuncNameGetBrokerInfo
=
"GetBrokerInfo"
FuncNameQueryOutMessage
=
"QueryOutMessage"
FuncNameQueryInMessage
=
"QueryInMessage"
FuncNameQueryCallBackMeta
=
"QueryCallBackMeta"
FuncNameQueryOutterMeta
=
"QueryOutterMeta"
FuncNameQueryInnerMeta
=
"QueryInnerMeta"
)
)
// 请求类型
// 请求类型
...
...
plugin/dapp/broker/types/broker.pb.go
View file @
fac9d130
...
@@ -924,6 +924,8 @@ type BrokerInfo struct {
...
@@ -924,6 +924,8 @@ type BrokerInfo struct {
BxhId
string
`protobuf:"bytes,1,opt,name=bxhId,proto3" json:"bxhId,omitempty"`
BxhId
string
`protobuf:"bytes,1,opt,name=bxhId,proto3" json:"bxhId,omitempty"`
//应用链ID
//应用链ID
AppChainId
string
`protobuf:"bytes,2,opt,name=appChainId,proto3" json:"appChainId,omitempty"`
AppChainId
string
`protobuf:"bytes,2,opt,name=appChainId,proto3" json:"appChainId,omitempty"`
//服务ID
ServiceId
string
`protobuf:"bytes,3,opt,name=serviceId,proto3" json:"serviceId,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_sizecache
int32
`json:"-"`
XXX_sizecache
int32
`json:"-"`
...
@@ -968,6 +970,13 @@ func (m *BrokerInfo) GetAppChainId() string {
...
@@ -968,6 +970,13 @@ func (m *BrokerInfo) GetAppChainId() string {
return
""
return
""
}
}
func
(
m
*
BrokerInfo
)
GetServiceId
()
string
{
if
m
!=
nil
{
return
m
.
ServiceId
}
return
""
}
type
Meta
struct
{
type
Meta
struct
{
Meta
map
[
string
]
uint64
`protobuf:"bytes,1,rep,name=meta,proto3" json:"meta,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"`
Meta
map
[
string
]
uint64
`protobuf:"bytes,1,rep,name=meta,proto3" json:"meta,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
...
@@ -1074,52 +1083,53 @@ func init() {
...
@@ -1074,52 +1083,53 @@ func init() {
}
}
var
fileDescriptor_f209535e190f2bed
=
[]
byte
{
var
fileDescriptor_f209535e190f2bed
=
[]
byte
{
// 710 bytes of a gzipped FileDescriptorProto
// 723 bytes of a gzipped FileDescriptorProto
0x1f
,
0x8b
,
0x08
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x02
,
0xff
,
0xbc
,
0x55
,
0xdd
,
0x4e
,
0xdb
,
0x4a
,
0x1f
,
0x8b
,
0x08
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x02
,
0xff
,
0xbc
,
0x55
,
0x5f
,
0x4f
,
0xdb
,
0x48
,
0x10
,
0x8e
,
0x1d
,
0x3b
,
0x24
,
0x93
,
0x40
,
0x38
,
0x0b
,
0x07
,
0x59
,
0xe7
,
0xe2
,
0x94
,
0xae
,
0xb8
,
0x10
,
0x8f
,
0x1d
,
0x3b
,
0x24
,
0x93
,
0x40
,
0xb8
,
0x85
,
0x43
,
0xd6
,
0xe9
,
0x74
,
0xc7
,
0xad
,
0x78
,
0xa0
,
0xad
,
0x14
,
0x24
,
0x90
,
0xda
,
0xaa
,
0xea
,
0x4d
,
0x42
,
0x91
,
0x92
,
0x0a
,
0x28
,
0xdd
,
0xb6
,
0xe0
,
0x5a
,
0x29
,
0x48
,
0x20
,
0xb5
,
0x55
,
0xd5
,
0x97
,
0x84
,
0x22
,
0x25
,
0x15
,
0x50
,
0xba
,
0x6d
,
0x52
,
0xdb
,
0x3b
,
0xc7
,
0x19
,
0xc2
,
0x96
,
0xc4
,
0x36
,
0xeb
,
0x35
,
0x22
,
0x8f
,
0xd2
,
0x37
,
0xe9
,
0xa5
,
0xb6
,
0x4f
,
0x75
,
0x9c
,
0x21
,
0x6c
,
0x49
,
0x6c
,
0xb3
,
0x5e
,
0x23
,
0xf2
,
0x51
,
0xfa
,
0x4d
,
0x55
,
0x5f
,
0xa4
,
0x2f
,
0x53
,
0xed
,
0x0f
,
0x89
,
0x13
,
0xa8
,
0xaa
,
0x22
,
0xd4
,
0x1b
,
0xd8
,
0xf9
,
0xfa
,
0xd4
,
0x2f
,
0xd2
,
0x2f
,
0x53
,
0xed
,
0x1f
,
0x12
,
0x27
,
0x50
,
0x55
,
0x45
,
0xa8
,
0x2f
,
0xc9
,
0x66
,
0x76
,
0x67
,
0xf2
,
0xcd
,
0x7c
,
0x63
,
0x68
,
0xf4
,
0x45
,
0x72
,
0x8e
,
0xa2
,
0x95
,
0x8a
,
0x44
,
0xce
,
0x6f
,
0x66
,
0x76
,
0xc6
,
0x33
,
0xf3
,
0x9b
,
0x85
,
0x46
,
0x5f
,
0x24
,
0xe7
,
0x28
,
0x5a
,
0xa9
,
0x26
,
0xc4
,
0x97
,
0x93
,
0x14
,
0x33
,
0xfa
,
0xcd
,
0x85
,
0x46
,
0x47
,
0xe3
,
0xed
,
0x48
,
0xf2
,
0x24
,
0x48
,
0x64
,
0x42
,
0x7c
,
0x39
,
0x49
,
0x31
,
0xa3
,
0x5f
,
0x5c
,
0x68
,
0x74
,
0x34
,
0xde
,
0x8e
,
0x24
,
0x26
,
0x0f
,
0xc1
,
0xe3
,
0x31
,
0x97
,
0x81
,
0xb3
,
0xe9
,
0x6c
,
0xd7
,
0x77
,
0xeb
,
0x2d
,
0x1d
,
0xd6
,
0x4f
,
0x62
,
0xf2
,
0x1f
,
0x78
,
0x3c
,
0xe6
,
0x32
,
0x70
,
0x36
,
0x9d
,
0xed
,
0xfa
,
0x6e
,
0xbd
,
0xa5
,
0xea
,
0xc5
,
0x5c
,
0x76
,
0x4b
,
0x4c
,
0xbb
,
0x48
,
0x07
,
0x9a
,
0x02
,
0x87
,
0x3c
,
0x93
,
0x28
,
0x0e
,
0xcd
,
0x5a
,
0xbd
,
0x98
,
0xcb
,
0x6e
,
0x89
,
0x69
,
0x15
,
0xe9
,
0x40
,
0x53
,
0xe0
,
0x90
,
0x67
,
0x12
,
0xae
,
0x30
,
0x92
,
0x89
,
0x08
,
0x5c
,
0x1d
,
0xbd
,
0x61
,
0xa3
,
0xd9
,
0xbc
,
0xb7
,
0x5b
,
0x62
,
0x8b
,
0xc5
,
0xc1
,
0x15
,
0x46
,
0x32
,
0x11
,
0x81
,
0xab
,
0xad
,
0x37
,
0xac
,
0x35
,
0x9b
,
0xd7
,
0x76
,
0x4b
,
0x17
,
0xc8
,
0x16
,
0xf8
,
0x61
,
0x3e
,
0xe0
,
0x32
,
0x28
,
0xeb
,
0x9b
,
0x0d
,
0x7b
,
0xb3
,
0xad
,
0xb0
,
0x6c
,
0xd1
,
0x81
,
0x6c
,
0x81
,
0x1f
,
0xe6
,
0x03
,
0x2e
,
0x83
,
0xb2
,
0xf6
,
0x6c
,
0x58
,
0xcf
,
0xb6
,
0x6e
,
0x89
,
0x19
,
0x27
,
0x79
,
0x0d
,
0x6b
,
0x38
,
0xe6
,
0xb2
,
0x17
,
0x4b
,
0x14
,
0xd1
,
0x59
,
0xc8
,
0xc2
,
0xba
,
0x25
,
0x66
,
0x94
,
0xe4
,
0x05
,
0xac
,
0xe1
,
0x98
,
0xcb
,
0x5e
,
0x2c
,
0x51
,
0x44
,
0x67
,
0xe3
,
0x83
,
0x4b
,
0x8c
,
0x65
,
0xe0
,
0xcd
,
0x65
,
0x5b
,
0xf0
,
0x76
,
0x4b
,
0xec
,
0xb6
,
0x4b
,
0xe4
,
0x21
,
0x8f
,
0x0f
,
0x2e
,
0x31
,
0x96
,
0x81
,
0x37
,
0x17
,
0x6d
,
0x41
,
0xdb
,
0x2d
,
0xb1
,
0xdb
,
0x9c
,
0x29
,
0xd4
,
0xf3
,
0x74
,
0x10
,
0x4a
,
0xec
,
0xc5
,
0x03
,
0xbc
,
0x0a
,
0x7c
,
0xfd
,
0x06
,
0xb1
,
0x6f
,
0xc8
,
0x23
,
0xa8
,
0xe7
,
0xe9
,
0x20
,
0x94
,
0xd8
,
0x8b
,
0x07
,
0x78
,
0x15
,
0xf8
,
0xfa
,
0x0e
,
0x62
,
0x7c
,
0x98
,
0x79
,
0xba
,
0x25
,
0x56
,
0x0c
,
0x24
,
0x2b
,
0xe0
,
0xca
,
0x49
,
0x50
,
0xd9
,
0x74
,
0xb6
,
0xef
,
0x78
,
0x3b
,
0xd3
,
0x74
,
0x4b
,
0xac
,
0x68
,
0x48
,
0x56
,
0xc0
,
0x95
,
0x93
,
0xa0
,
0xb2
,
0xe9
,
0x7d
,
0xe6
,
0xca
,
0x49
,
0x67
,
0x09
,
0xfc
,
0xcb
,
0x70
,
0x94
,
0x23
,
0x7d
,
0x09
,
0x9e
,
0xa2
,
0x85
,
0x6c
,
0xfb
,
0xcc
,
0x95
,
0x93
,
0xce
,
0x12
,
0xf8
,
0x97
,
0xe1
,
0x28
,
0x47
,
0xfa
,
0x0c
,
0x3c
,
0x55
,
0xac
,
0x83
,
0xdf
,
0xbf
,
0x3a
,
0xeb
,
0x0d
,
0x34
,
0x65
,
0x35
,
0x66
,
0x0c
,
0xf2
,
0x3f
,
0x40
,
0x98
,
0x16
,
0xb2
,
0x0e
,
0x7e
,
0xff
,
0xea
,
0xac
,
0x37
,
0xd0
,
0x25
,
0xab
,
0x31
,
0x23
,
0x90
,
0x7f
,
0x00
,
0xa6
,
0xfb
,
0x2a
,
0x7f
,
0x6f
,
0xa0
,
0xf9
,
0xa9
,
0xb1
,
0x02
,
0x42
,
0xf7
,
0xa0
,
0xb9
,
0x40
,
0x13
,
0xc2
,
0x34
,
0xdd
,
0x57
,
0xf1
,
0x7b
,
0x03
,
0x5d
,
0x9f
,
0x1a
,
0x2b
,
0x20
,
0x74
,
0x0f
,
0x9a
,
0x0b
,
0xd9
,
0x84
,
0x3a
,
0x9a
,
0xe3
,
0x71
,
0x38
,
0x46
,
0xfb
,
0x5c
,
0x11
,
0xa2
,
0x6d
,
0xf0
,
0x35
,
0x43
,
0x65
,
0x22
,
0x9b
,
0x50
,
0x47
,
0x73
,
0x3c
,
0x0e
,
0xc7
,
0x68
,
0xaf
,
0x2b
,
0x42
,
0xb4
,
0x0d
,
0xbe
,
0xbf
,
0x0f
,
0x25
,
0x1b
,
0x50
,
0xc9
,
0x64
,
0x28
,
0xf3
,
0xcc
,
0xe6
,
0xb6
,
0x16
,
0xdd
,
0x81
,
0xc6
,
0xae
,
0xd0
,
0xcf
,
0x4d
,
0xc9
,
0x06
,
0x54
,
0x32
,
0x19
,
0xca
,
0x3c
,
0xb3
,
0xb1
,
0xad
,
0x44
,
0x77
,
0x49
,
0x32
,
0x1a
,
0xf1
,
0x78
,
0x68
,
0x68
,
0x79
,
0x00
,
0xde
,
0x18
,
0x65
,
0xb8
,
0xd0
,
0xef
,
0x23
,
0xa0
,
0x71
,
0x92
,
0x8c
,
0x46
,
0x3c
,
0x1e
,
0x9a
,
0xb2
,
0xfc
,
0x0b
,
0xde
,
0x18
,
0x65
,
0xb8
,
0xd0
,
0x94
,
0x21
,
0xd3
,
0x0e
,
0xfa
,
0xdd
,
0x81
,
0x7a
,
0x81
,
0x1e
,
0x95
,
0x3a
,
0xc3
,
0x8b
,
0x1c
,
0xe3
,
0xef
,
0x23
,
0x94
,
0x21
,
0xd3
,
0x0a
,
0xfa
,
0xd5
,
0x81
,
0x7a
,
0xa1
,
0x3c
,
0x2a
,
0x74
,
0x86
,
0x17
,
0x08
,
0x8f
,
0xf3
,
0xb1
,
0xbe
,
0xe7
,
0xb1
,
0x22
,
0x44
,
0x28
,
0x34
,
0x06
,
0x99
,
0x7c
,
0x87
,
0xe2
,
0x39
,
0xc6
,
0x11
,
0x1e
,
0xe7
,
0x63
,
0xed
,
0xe7
,
0xb1
,
0x22
,
0x44
,
0x28
,
0x34
,
0x06
,
0x99
,
0x7c
,
0x92
,
0x47
,
0xd8
,
0x7b
,
0x65
,
0x0b
,
0x98
,
0xc3
,
0x54
,
0x4c
,
0x26
,
0xa2
,
0x59
,
0x4c
,
0xd9
,
0xc4
,
0x8d
,
0xe2
,
0x92
,
0x47
,
0xd8
,
0x7b
,
0x6e
,
0x13
,
0x98
,
0xc3
,
0x94
,
0x4d
,
0x26
,
0xa2
,
0x99
,
0x4d
,
0x14
,
0x31
,
0x12
,
0xc0
,
0x92
,
0xc0
,
0x8b
,
0xf7
,
0x93
,
0x14
,
0x75
,
0xc7
,
0x3d
,
0x76
,
0x6d
,
0x92
,
0xd9
,
0xd8
,
0x14
,
0x31
,
0x12
,
0xc0
,
0x92
,
0xc0
,
0x8b
,
0x37
,
0x93
,
0x14
,
0x75
,
0xc7
,
0x3d
,
0x76
,
0x27
,
0x50
,
0x15
,
0x98
,
0xa5
,
0x49
,
0x9c
,
0xa1
,
0x6d
,
0x64
,
0x73
,
0x3a
,
0x7a
,
0x06
,
0x66
,
0xd3
,
0x2d
,
0x92
,
0x87
,
0x50
,
0x15
,
0x98
,
0xa5
,
0x49
,
0x9c
,
0xa1
,
0x6d
,
0x64
,
0x73
,
0x3a
,
0x7a
,
0x06
,
0x00
,
0xfa
,
0xc3
,
0x81
,
0xe6
,
0xe2
,
0x30
,
0xac
,
0x83
,
0xcf
,
0xf5
,
0x18
,
0x98
,
0xf2
,
0x8d
,
0x71
,
0x66
,
0x53
,
0x03
,
0xfa
,
0xcd
,
0x81
,
0xe6
,
0xe2
,
0x30
,
0xac
,
0x83
,
0xcf
,
0xf5
,
0x18
,
0x98
,
0xf4
,
0x6f
,
0x85
,
0x13
,
0xf0
,
0xe4
,
0xac
,
0x6a
,
0x7d
,
0x56
,
0xd8
,
0x69
,
0x1e
,
0x47
,
0xba
,
0xdc
,
0x1a
,
0x8d
,
0x70
,
0x6f
,
0x89
,
0x13
,
0xf0
,
0xe4
,
0x2c
,
0x6b
,
0x7d
,
0x56
,
0xd8
,
0x69
,
0x1e
,
0x47
,
0x3a
,
0xd3
,
0x67
,
0x85
,
0x85
,
0x62
,
0x98
,
0xe9
,
0xe1
,
0xaa
,
0x31
,
0x7d
,
0x56
,
0x7d
,
0x53
,
0xff
,
0xa3
,
0xdd
,
0x1a
,
0xd3
,
0x67
,
0x85
,
0x85
,
0x62
,
0x98
,
0xe9
,
0xe1
,
0xaa
,
0x31
,
0x7d
,
0x56
,
0x7d
,
0x53
,
0x7e
,
0xb0
,
0x64
,
0xfa
,
0x66
,
0xac
,
0x6b
,
0x5c
,
0xf4
,
0x83
,
0xea
,
0x0c
,
0x17
,
0x7d
,
0xfa
,
0xd5
,
0xff
,
0x51
,
0x3f
,
0x58
,
0x32
,
0x7d
,
0x33
,
0xd2
,
0x35
,
0x2e
,
0xfa
,
0x41
,
0x75
,
0x86
,
0x8b
,
0x3e
,
0x85
,
0x55
,
0x86
,
0x11
,
0xf2
,
0x54
,
0x1a
,
0x1d
,
0x1f
,
0x26
,
0xc3
,
0xdb
,
0x14
,
0xea
,
0xdc
,
0x59
,
0xfd
,
0xec
,
0xc2
,
0x2a
,
0xc3
,
0x08
,
0x79
,
0x2a
,
0x0d
,
0x8f
,
0x0f
,
0x93
,
0xe1
,
0x6d
,
0x0c
,
0x75
,
0xa1
,
0xee
,
0x1d
,
0x14
,
0x5a
,
0xbe
,
0x07
,
0x85
,
0x7a
,
0x7f
,
0xa6
,
0x50
,
0xff
,
0xa6
,
0x42
,
0x25
,
0xee
,
0xcc
,
0x50
,
0xf7
,
0x0e
,
0x0c
,
0x2d
,
0xdf
,
0x03
,
0x43
,
0xbd
,
0x5f
,
0x63
,
0xa8
,
0x7f
,
0x93
,
0xac
,
0xbf
,
0xcd
,
0x51
,
0x4c
,
0xfe
,
0x6a
,
0xf7
,
0x69
,
0x1b
,
0xd6
,
0x74
,
0xc2
,
0xfd
,
0x69
,
0xc2
,
0xa1
,
0x12
,
0xd6
,
0x5f
,
0xe5
,
0x28
,
0x26
,
0xbf
,
0xb5
,
0xfb
,
0xb4
,
0x0d
,
0x6b
,
0x3a
,
0xe0
,
0xfe
,
0x43
,
0x9e
,
0x49
,
0xf2
,
0x18
,
0xbc
,
0x11
,
0xcf
,
0xd4
,
0x62
,
0x2d
,
0xff
,
0x9a
,
0x1a
,
0xa6
,
0x63
,
0x34
,
0xe0
,
0x21
,
0xcf
,
0x24
,
0x79
,
0x00
,
0xde
,
0x88
,
0x67
,
0x6a
,
0xb1
,
0x96
,
0x7f
,
0x5c
,
0x1a
,
0x68
,
0x13
,
0x96
,
0x75
,
0xe1
,
0xc7
,
0x7c
,
0x74
,
0x12
,
0x8a
,
0x70
,
0x4c
,
0xff
,
0x81
,
0xa6
,
0x06
,
0xa6
,
0x6d
,
0x68
,
0x13
,
0x96
,
0x75
,
0xe2
,
0xc7
,
0x7c
,
0x74
,
0x12
,
0x8a
,
0x70
,
0x4c
,
0xff
,
0x80
,
0xde
,
0xe4
,
0x52
,
0xa2
,
0x50
,
0xea
,
0xa4
,
0xab
,
0xb0
,
0x62
,
0x7f
,
0x5c
,
0x6c
,
0x91
,
0x8f
,
0x53
,
0xa6
,
0x06
,
0x5e
,
0xe6
,
0x52
,
0xa2
,
0x50
,
0xec
,
0xa4
,
0xab
,
0xb0
,
0x62
,
0x3f
,
0x2e
,
0xb6
,
0xc8
,
0xe4
,
0x08
,
0xb3
,
0x2c
,
0x1c
,
0x22
,
0xd9
,
0x82
,
0x65
,
0x1e
,
0xdb
,
0xca
,
0x4e
,
0x42
,
0x2e
,
0xec
,
0xbb
,
0x29
,
0x72
,
0x84
,
0x59
,
0x16
,
0x0e
,
0x91
,
0x6c
,
0xc1
,
0x32
,
0x8f
,
0x6d
,
0x66
,
0x27
,
0x21
,
0xa2
,
0x98
,
0x07
,
0x17
,
0x15
,
0xed
,
0xde
,
0x50
,
0x34
,
0xfd
,
0x34
,
0x4b
,
0x7f
,
0xdf
,
0x4f
,
0x77
,
0x17
,
0x76
,
0x51
,
0xcc
,
0x83
,
0x8b
,
0x8c
,
0x76
,
0x6f
,
0x30
,
0x9a
,
0xbe
,
0x9f
,
0x85
,
0xbf
,
0xef
,
0x00
,
0xcc
,
0xdc
,
0xf6
,
0xe2
,
0xd3
,
0xe4
,
0x8e
,
0xbb
,
0xf4
,
0x0b
,
0x78
,
0x8a
,
0x00
,
0xf2
,
0x68
,
0xab
,
0x3f
,
0x02
,
0x98
,
0xb9
,
0xed
,
0xc5
,
0xa7
,
0xc9
,
0xdd
,
0x76
,
0x29
,
0xf9
,
0x1b
,
0x6a
,
0x99
,
0xba
,
0xcb
,
0x14
,
0xc5
,
0xff
,
0x16
,
0x76
,
0x99
,
0xfe
,
0x73
,
0x10
,
0x4b
,
0x31
,
0x31
,
0x5b
,
0xed
,
0x2d
,
0xff
,
0xc0
,
0xb6
,
0x64
,
0x06
,
0xd0
,
0x4f
,
0xe0
,
0xa9
,
0xf2
,
0x90
,
0xff
,
0xa7
,
0x9b
,
0x4e
,
0xbf
,
0x67
,
0x50
,
0x9b
,
0x42
,
0x64
,
0x15
,
0xca
,
0xe7
,
0x38
,
0xb1
,
0x39
,
0xd5
,
0x51
,
0xd5
,
0xa1
,
0x35
,
0xe0
,
0xcf
,
0xc2
,
0xa6
,
0xd3
,
0x3f
,
0x07
,
0xb1
,
0x14
,
0x13
,
0xb3
,
0xf3
,
0xfe
,
0x7a
,
0x0c
,
0x47
,
0xc8
,
0x56
,
0x6c
,
0x8c
,
0x17
,
0xee
,
0x73
,
0x87
,
0x52
,
0xa8
,
0x5e
,
0xef
,
0x98
,
0xc2
,
0x8e
,
0xb5
,
0x29
,
0x44
,
0x56
,
0xa1
,
0x7c
,
0x8e
,
0x13
,
0x9b
,
0x91
,
0x3a
,
0xaa
,
0x2c
,
0xf5
,
0x80
,
0xd9
,
0x75
,
0xf4
,
0xf0
,
0x59
,
0x6b
,
0xb7
,
0x0a
,
0x15
,
0xf3
,
0xad
,
0xed
,
0xc0
,
0xe7
,
0x6a
,
0xab
,
0xb5
,
0xef
,
0x31
,
0xc2
,
0x53
,
0xf7
,
0x89
,
0x43
,
0x29
,
0x54
,
0xaf
,
0x37
,
0x50
,
0x61
,
0x03
,
0x3b
,
0x7a
,
0xa3
,
0xeb
,
0xe8
,
0x57
,
0xf4
,
0x87
,
0x77
,
0xef
,
0x67
,
0x00
,
0x00
,
0x00
,
0xff
,
0xff
,
0x2a
,
0x8f
,
0x34
,
0xad
,
0xb4
,
0x5b
,
0x85
,
0x8a
,
0x79
,
0x89
,
0x3b
,
0xf0
,
0xa1
,
0xda
,
0x6a
,
0xed
,
0xe8
,
0x3c
,
0x2d
,
0x0d
,
0x88
,
0x07
,
0x00
,
0x00
,
0xfa
,
0x15
,
0xfd
,
0x2c
,
0xef
,
0x7d
,
0x0f
,
0x00
,
0x00
,
0xff
,
0xff
,
0xbd
,
0xc5
,
0xb3
,
0x5e
,
0xa6
,
0x07
,
0x00
,
0x00
,
}
}
// Reference imports to suppress errors if they are not otherwise used.
// Reference imports to suppress errors if they are not otherwise used.
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment