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
15c55973
Commit
15c55973
authored
Aug 18, 2021
by
hezhengjun
Committed by
33cn
Aug 18, 2021
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
simply evm gas estimate procedure
parent
9a2b1688
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
101 additions
and
129 deletions
+101
-129
test-rpc.sh
plugin/dapp/evm/cmd/test/test-rpc.sh
+7
-19
exec.go
plugin/dapp/evm/executor/exec.go
+9
-3
query.go
plugin/dapp/evm/executor/query.go
+4
-7
evmcontract.proto
plugin/dapp/evm/proto/evmcontract.proto
+2
-4
evmcontract.pb.go
plugin/dapp/evm/types/evmcontract.pb.go
+79
-96
No files found.
plugin/dapp/evm/cmd/test/test-rpc.sh
View file @
15c55973
...
...
@@ -23,25 +23,13 @@ gas=0
evm_SignTxAndEstimate
()
{
gas
=
0
local
txHex
=
"
$1
"
local
priKey
=
"
$2
"
local
from
=
$2
local
MAIN_HTTP
=
$3
local
expire
=
"120s"
if
[
-n
"
$4
"
]
;
then
expire
=
$4
fi
local
req
=
'"method":"Chain33.SignRawTx","params":[{"privkey":"'
"
$priKey
"
'","txHex":"'
"
$txHex
"
'","expire":"'
"
$expire
"
'"}]'
signedTx
=
$(
curl
-ksd
"{
$req
}"
"
${
MAIN_HTTP
}
"
| jq
-r
".result"
)
if
[
"
$signedTx
"
!=
null
]
;
then
req
=
'{"method":"Chain33.Query","params":[{"execer":"evm","funcName":"EstimateGas","payload":{"data":"'
${
signedTx
}
'"}}]}'
chain33_Http
"
$req
"
"
${
MAIN_HTTP
}
"
'(.result != null)'
"EstimateGas"
".result.gas"
gas
=
$((
RETURN_RESP
+
10000
))
echo
"the estimate gas is =
${
gas
}
"
else
echo
"signedTx null error"
fi
req
=
'{"method":"Chain33.Query","params":[{"execer":"evm","funcName":"EstimateGas","payload":{"tx":"'
${
txHex
}
'", "from":"'
${
from
}
'"}}]}'
chain33_Http
"
$req
"
"
${
MAIN_HTTP
}
"
'(.result != null)'
"EstimateGas"
".result.gas"
gas
=
$((
RETURN_RESP
+
10000
))
echo
"the estimate gas is =
${
gas
}
"
}
#上述未签名交易使用以下指令进行创建
...
...
@@ -49,7 +37,7 @@ evm_SignTxAndEstimate() {
function
evm_createContract
()
{
expire
=
"120s"
tx
=
$(
curl
-ksd
'{"method":"evm.CreateDeployTx","params":[{"code":"'
${
erc20_code
}
'", "abi":"'
"
${
erc20_abi
}
"
'", "note": "deploy erc20", "alias": "zbc", "parameter": "constructor(zbc, zbc, 3300, '
${
evm_creatorAddr
}
')", "expire":"'
${
expire
}
'", "paraName":"'
"
${
paraName
}
"
'", "amount":0}]}'
"
${
MAIN_HTTP
}
"
| jq
-r
".result"
)
evm_SignTxAndEstimate
"
${
tx
}
"
"
${
evm_creatorAddr
_key
}
"
"
$MAIN_HTTP
"
"
${
expire
}
"
evm_SignTxAndEstimate
"
${
tx
}
"
"
${
evm_creatorAddr
}
"
"
$MAIN_HTTP
"
echo
"evm_createContract :: the estimate gas is =
${
gas
}
"
tx
=
$(
curl
-ksd
'{"method":"evm.CreateDeployTx","params":[{"code":"'
${
erc20_code
}
'", "abi":"'
"
${
erc20_abi
}
"
'", "fee":'
${
gas
}
', "note": "deploy erc20", "alias": "zbc", "parameter": "constructor(zbc, zbc, 3300, '
${
evm_creatorAddr
}
')", "expire":"'
${
expire
}
'", "paraName":"'
"
${
paraName
}
"
'", "amount":0}]}'
"
${
MAIN_HTTP
}
"
| jq
-r
".result"
)
...
...
@@ -96,7 +84,7 @@ function evm_transfer() {
expire
=
"120s"
tx
=
$(
curl
-ksd
'{"method":"evm.CreateCallTx","params":[{"abi":"'
"
${
erc20_abi
}
"
'", "note": "evm transfer rpc test", "parameter": "transfer('
${
evm_transferAddr
}
', 20)", "expire":"'
${
expire
}
'", "contractAddr":"'
"
${
evm_contractAddr
}
"
'", "paraName":"'
"
${
paraName
}
"
'"}]}'
"
${
MAIN_HTTP
}
"
| jq
-r
".result"
)
evm_SignTxAndEstimate
"
${
tx
}
"
"
${
evm_creatorAddr
_key
}
"
"
$MAIN_HTTP
"
"
${
expire
}
"
evm_SignTxAndEstimate
"
${
tx
}
"
"
${
evm_creatorAddr
}
"
"
$MAIN_HTTP
"
# shellcheck disable=SC2090
tx
=
$(
curl
-ksd
'{"method":"evm.CreateCallTx","params":[{"abi":"'
"
${
erc20_abi
}
"
'", "fee":'
${
gas
}
', "note": "evm transfer rpc test", "parameter": "transfer('
${
evm_transferAddr
}
', 20)", "expire":"'
${
expire
}
'", "contractAddr":"'
"
${
evm_contractAddr
}
"
'", "paraName":"'
"
${
paraName
}
"
'"}]}'
"
${
MAIN_HTTP
}
"
| jq
-r
".result"
)
...
...
plugin/dapp/evm/executor/exec.go
View file @
15c55973
...
...
@@ -25,7 +25,7 @@ import (
func
(
evm
*
EVMExecutor
)
Exec
(
tx
*
types
.
Transaction
,
index
int
)
(
*
types
.
Receipt
,
error
)
{
evm
.
CheckInit
()
// 先转换消息
msg
,
err
:=
evm
.
GetMessage
(
tx
,
index
)
msg
,
err
:=
evm
.
GetMessage
(
tx
,
index
,
nil
)
if
err
!=
nil
{
return
nil
,
err
}
...
...
@@ -190,14 +190,20 @@ func (evm *EVMExecutor) CheckInit() {
}
// GetMessage 目前的交易中,如果是coins交易,金额是放在payload的,但是合约不行,需要修改Transaction结构
func
(
evm
*
EVMExecutor
)
GetMessage
(
tx
*
types
.
Transaction
,
index
int
)
(
msg
*
common
.
Message
,
err
error
)
{
func
(
evm
*
EVMExecutor
)
GetMessage
(
tx
*
types
.
Transaction
,
index
int
,
fromPtr
*
common
.
Address
)
(
msg
*
common
.
Message
,
err
error
)
{
var
action
evmtypes
.
EVMContractAction
err
=
types
.
Decode
(
tx
.
Payload
,
&
action
)
if
err
!=
nil
{
return
msg
,
err
}
// 此处暂时不考虑消息发送签名的处理,chain33在mempool中对签名做了检查
from
:=
getCaller
(
tx
)
var
from
common
.
Address
if
fromPtr
==
nil
{
from
=
getCaller
(
tx
)
}
else
{
from
=
*
fromPtr
}
to
:=
getReceiver
(
&
action
)
if
to
==
nil
{
return
msg
,
types
.
ErrInvalidAddress
...
...
plugin/dapp/evm/executor/query.go
View file @
15c55973
...
...
@@ -55,10 +55,10 @@ func (evm *EVMExecutor) Query_CheckAddrExists(in *evmtypes.CheckEVMAddrReq) (typ
}
// Query_EstimateGas 此方法用来估算合约消耗的Gas,不能修改原有执行器的状态数据
func
(
evm
*
EVMExecutor
)
Query_EstimateGas
(
txInfo
*
types
.
ReqString
)
(
types
.
Message
,
error
)
{
func
(
evm
*
EVMExecutor
)
Query_EstimateGas
(
req
*
evmtypes
.
EstimateEVMGasReq
)
(
types
.
Message
,
error
)
{
evm
.
CheckInit
()
txBytes
,
err
:=
hex
.
DecodeString
(
txInfo
.
Data
)
txBytes
,
err
:=
hex
.
DecodeString
(
req
.
Tx
)
if
nil
!=
err
{
return
nil
,
err
}
...
...
@@ -68,12 +68,9 @@ func (evm *EVMExecutor) Query_EstimateGas(txInfo *types.ReqString) (types.Messag
return
nil
,
err
}
if
nil
==
tx
.
Signature
{
return
nil
,
errors
.
New
(
"Tx should be signatured"
)
}
index
:=
0
msg
,
err
:=
evm
.
GetMessage
(
&
tx
,
index
)
from
:=
evmCommon
.
StringToAddress
(
req
.
From
)
msg
,
err
:=
evm
.
GetMessage
(
&
tx
,
index
,
from
)
if
err
!=
nil
{
return
nil
,
err
}
...
...
plugin/dapp/evm/proto/evmcontract.proto
View file @
15c55973
...
...
@@ -108,10 +108,8 @@ message CheckEVMAddrResp {
}
message
EstimateEVMGasReq
{
string
to
=
1
;
bytes
para
=
2
;
string
caller
=
3
;
uint64
amount
=
4
;
string
tx
=
1
;
string
from
=
2
;
}
message
EstimateEVMGasResp
{
uint64
gas
=
1
;
...
...
plugin/dapp/evm/types/evmcontract.pb.go
View file @
15c55973
...
...
@@ -5,9 +5,8 @@ package types
import
(
fmt
"fmt"
math
"math"
proto
"github.com/golang/protobuf/proto"
math
"math"
)
// Reference imports to suppress errors if they are not otherwise used.
...
...
@@ -793,10 +792,8 @@ func (m *CheckEVMAddrResp) GetAliasName() string {
}
type
EstimateEVMGasReq
struct
{
To
string
`protobuf:"bytes,1,opt,name=to,proto3" json:"to,omitempty"`
Para
[]
byte
`protobuf:"bytes,2,opt,name=para,proto3" json:"para,omitempty"`
Caller
string
`protobuf:"bytes,3,opt,name=caller,proto3" json:"caller,omitempty"`
Amount
uint64
`protobuf:"varint,4,opt,name=amount,proto3" json:"amount,omitempty"`
Tx
string
`protobuf:"bytes,1,opt,name=tx,proto3" json:"tx,omitempty"`
From
string
`protobuf:"bytes,2,opt,name=from,proto3" json:"from,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_sizecache
int32
`json:"-"`
...
...
@@ -827,34 +824,20 @@ func (m *EstimateEVMGasReq) XXX_DiscardUnknown() {
var
xxx_messageInfo_EstimateEVMGasReq
proto
.
InternalMessageInfo
func
(
m
*
EstimateEVMGasReq
)
GetT
o
()
string
{
func
(
m
*
EstimateEVMGasReq
)
GetT
x
()
string
{
if
m
!=
nil
{
return
m
.
T
o
return
m
.
T
x
}
return
""
}
func
(
m
*
EstimateEVMGasReq
)
Get
Para
()
[]
byte
{
func
(
m
*
EstimateEVMGasReq
)
Get
From
()
string
{
if
m
!=
nil
{
return
m
.
Para
}
return
nil
}
func
(
m
*
EstimateEVMGasReq
)
GetCaller
()
string
{
if
m
!=
nil
{
return
m
.
Caller
return
m
.
From
}
return
""
}
func
(
m
*
EstimateEVMGasReq
)
GetAmount
()
uint64
{
if
m
!=
nil
{
return
m
.
Amount
}
return
0
}
type
EstimateEVMGasResp
struct
{
Gas
uint64
`protobuf:"varint,1,opt,name=gas,proto3" json:"gas,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
...
...
@@ -1790,76 +1773,76 @@ func init() {
}
var
fileDescriptor_74353de561acd7c6
=
[]
byte
{
// 112
9
bytes of a gzipped FileDescriptorProto
0x1f
,
0x8b
,
0x08
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x02
,
0xff
,
0xcc
,
0x57
,
0x
4f
,
0x6f
,
0x1b
,
0x45
,
0x1
4
,
0xd7
,
0x7a
,
0xd7
,
0x8e
,
0xf7
,
0x25
,
0x34
,
0xc9
,
0xb6
,
0x4d
,
0x4d
,
0x54
,
0xa1
,
0x68
,
0x44
,
0x
21
,
0x8a
,
0x44
,
0x84
,
0xda
,
0x0b
,
0x54
,
0x02
,
0x29
,
0x72
,
0xad
,
0x80
,
0x20
,
0x69
,
0xd9
,
0xd2
,
0x
48
,
0x1c
,
0x27
,
0xeb
,
0x89
,
0xb3
,
0x8d
,
0xf7
,
0x4f
,
0x77
,
0xc6
,
0x69
,
0x7d
,
0xe5
,
0xcc
,
0x91
,
0x
23
,
0x37
,
0x8e
,
0x7c
,
0x03
,
0xbe
,
0x09
,
0x1c
,
0x39
,
0xf1
,
0x31
,
0xd0
,
0x7b
,
0x33
,
0xbb
,
0x3b
,
0x
bb
,
0xb6
,
0x23
,
0x81
,
0x2a
,
0xd4
,
0x93
,
0xe7
,
0x37
,
0xf3
,
0x66
,
0xde
,
0xfb
,
0xcd
,
0xfb
,
0xbd
,
0x
79
,
0x6b
,
0xd8
,
0x16
,
0xd7
,
0x49
,
0x94
,
0xa5
,
0xaa
,
0xe0
,
0x91
,
0x3a
,
0xcc
,
0x8b
,
0x4c
,
0x65
,
0x
41
,
0x57
,
0xcd
,
0x73
,
0x21
,
0xd9
,
0x8f
,
0x0e
,
0x6c
,
0x8f
,
0xce
,
0x4e
,
0x86
,
0x66
,
0xf1
,
0xe9
,
0xf
9
,
0x4b
,
0x11
,
0xa9
,
0x20
,
0x00
,
0x8f
,
0x8f
,
0xc7
,
0xc5
,
0xc0
,
0xd9
,
0x73
,
0xf6
,
0xfd
,
0x90
,
0x
c6
,
0xc1
,
0x01
,
0x78
,
0x63
,
0xae
,
0xf8
,
0xa0
,
0xb3
,
0xe7
,
0xec
,
0xaf
,
0x3f
,
0xdc
,
0x39
,
0xa
4
,
0x
fd
,
0x87
,
0xd6
,
0xde
,
0x27
,
0x5c
,
0xf1
,
0x90
,
0x6c
,
0x82
,
0x4f
,
0xa0
,
0x2b
,
0x15
,
0x57
,
0x62
,
0x
e0
,
0x92
,
0xf1
,
0xbd
,
0x45
,
0xe3
,
0xe7
,
0xb8
,
0x1c
,
0x6a
,
0x2b
,
0xf6
,
0x9b
,
0x03
,
0x9b
,
0xad
,
0x
83
,
0x82
,
0x01
,
0xac
,
0x45
,
0x85
,
0xe0
,
0x2a
,
0x2b
,
0xa3
,
0x28
,
0x21
,
0x06
,
0x97
,
0xf2
,
0x44
,
0x
50
,
0x20
,
0x7e
,
0x48
,
0xe3
,
0xe0
,
0x0e
,
0x74
,
0xf9
,
0x34
,
0xe6
,
0x92
,
0x1c
,
0xfa
,
0xa1
,
0x06
,
0x
15
,
0x0d
,
0xcf
,
0xa2
,
0x11
,
0x80
,
0x17
,
0x65
,
0x63
,
0x31
,
0xe8
,
0xee
,
0x39
,
0xfb
,
0x1b
,
0x21
,
0x
8d
,
0x83
,
0x5d
,
0xe8
,
0xe3
,
0xef
,
0x57
,
0x5c
,
0x5e
,
0x0e
,
0x7a
,
0x34
,
0x5f
,
0xe1
,
0x60
,
0x0b
,
0x
5c
,
0x7e
,
0x1e
,
0x0f
,
0xd6
,
0xe8
,
0x08
,
0x1c
,
0xb2
,
0xbf
,
0x1c
,
0xd8
,
0x6a
,
0x33
,
0xc1
,
0x0
0
,
0x
d2
,
0x2c
,
0x8d
,
0x04
,
0x05
,
0xeb
,
0x85
,
0x1a
,
0xe0
,
0xc1
,
0x72
,
0x16
,
0x47
,
0xf1
,
0x58
,
0x8c
,
0x
29
,
0xdc
,
0x7e
,
0x58
,
0xe1
,
0x60
,
0x0f
,
0xd6
,
0xa5
,
0xca
,
0x0a
,
0x3e
,
0xd1
,
0x7e
,
0x5d
,
0xf2
,
0x
6b
,
0x4f
,
0x05
,
0x5f
,
0xc2
,
0x9a
,
0x81
,
0x03
,
0x6f
,
0xcf
,
0xdd
,
0x5f
,
0x7f
,
0xf8
,
0xe1
,
0x8a
,
0x
7b
,
0x3c
,
0x7c
,
0xae
,
0xcd
,
0x46
,
0xa9
,
0x2a
,
0xe6
,
0x61
,
0xb9
,
0x69
,
0xf7
,
0x31
,
0x6c
,
0xd8
,
0x0
b
,
0x48
,
0xe5
,
0x4a
,
0xcc
,
0xcd
,
0x75
,
0xe2
,
0x10
,
0xa3
,
0xbe
,
0xe6
,
0xd3
,
0x99
,
0xbe
,
0xcb
,
0x
8d
,
0x50
,
0x83
,
0xc7
,
0x9d
,
0xcf
,
0x1c
,
0xf6
,
0x47
,
0x53
,
0x17
,
0x47
,
0x91
,
0x8a
,
0xb3
,
0x34
,
0x
d8
,
0x81
,
0x1e
,
0x4f
,
0xb2
,
0x59
,
0xaa
,
0x0c
,
0x4d
,
0x83
,
0x90
,
0xe7
,
0x84
,
0xcb
,
0x6f
,
0xe3
,
0x2
4
,
0x56
,
0x74
,
0x94
,
0x17
,
0x56
,
0xd8
,
0xac
,
0x3d
,
0x2b
,
0xe2
,
0x48
,
0xcb
,
0xe1
,
0xbd
,
0xb0
,
0x
c2
,
0x55
,
0x32
,
0x3c
,
0x2b
,
0x19
,
0x01
,
0x78
,
0x39
,
0x2f
,
0x78
,
0x99
,
0x20
,
0x1c
,
0xd7
,
0xe
9
,
0x
ed
,
0xb5
,
0xd2
,
0x9b
,
0x66
,
0x4a
,
0x98
,
0xdc
,
0xd0
,
0x38
,
0x60
,
0xb0
,
0x51
,
0x0a
,
0xfd
,
0x08
,
0x
53
,
0xdf
,
0xa7
,
0xb5
,
0xc6
,
0x1c
,
0xfb
,
0xdd
,
0x81
,
0x20
,
0x14
,
0x91
,
0x88
,
0x73
,
0x65
,
0x51
,
0x44
,
0x72
,
0x
11
,
0x9f
,
0x4e
,
0x45
,
0x29
,
0x38
,
0x83
,
0xec
,
0x23
,
0x4f
,
0x6b
,
0xdd
,
0x35
,
0xe
6
,
0x
16
,
0xdc
,
0xba
,
0x8b
,
0x6e
,
0x51
,
0xd1
,
0x33
,
0x29
,
0xc6
,
0xc7
,
0x5c
,
0x12
,
0x5f
,
0x2f
,
0x2c
,
0x2
1
,
0x26
,
0xa6
,
0x10
,
0xca
,
0x30
,
0xc6
,
0x21
,
0xda
,
0xbe
,
0x94
,
0x59
,
0x1a
,
0x0a
,
0x65
,
0x28
,
0x
97
,
0x90
,
0x5d
,
0x40
,
0x30
,
0x3a
,
0x3b
,
0xa1
,
0xb4
,
0x0f
,
0x2f
,
0x79
,
0x3a
,
0x11
,
0x5f
,
0x2b
,
0x91
,
0x2
c
,
0x49
,
0xed
,
0x2e
,
0xf4
,
0xf3
,
0x42
,
0x9c
,
0x59
,
0xd9
,
0xad
,
0x30
,
0x45
,
0x3b
,
0x2b
,
0x
0a
,
0x91
,
0x2a
,
0xbd
,
0xae
,
0xb5
,
0xd7
,
0x98
,
0x63
,
0xbf
,
0x38
,
0xe4
,
0xc8
,
0xae
,
0xc9
,
0x61
,
0x
32
,
0xfe
,
0x5f
,
0xca
,
0xd2
,
0x5f
,
0x51
,
0x96
,
0x7e
,
0x5d
,
0x96
,
0xec
,
0x6f
,
0x07
,
0x6e
,
0xb7
,
0x
cb
,
0x00
,
0xe3
,
0x7b
,
0x2b
,
0x75
,
0xe8
,
0x37
,
0xeb
,
0xf0
,
0xa8
,
0x5d
,
0x87
,
0x1f
,
0xaf
,
0xa8
,
0xc3
,
0x61
,
0x3
2
,
0x7e
,
0x3b
,
0xa5
,
0xe8
,
0xdb
,
0xa5
,
0xf8
,
0xab
,
0x03
,
0x77
,
0x17
,
0xe5
,
0x8a
,
0x64
,
0x
df
,
0x09
,
0xc5
,
0xfa
,
0xa4
,
0x58
,
0xf6
,
0x00
,
0x36
,
0x87
,
0x97
,
0x22
,
0xba
,
0x1a
,
0x9d
,
0x
9d
,
0xe0
,
0xde
,
0x50
,
0xbc
,
0x5a
,
0xd6
,
0x45
,
0xd8
,
0xcf
,
0x0e
,
0x6c
,
0x35
,
0xed
,
0x64
,
0xae
,
0x
13
,
0xad
,
0xfd
,
0x92
,
0x71
,
0x3f
,
0xac
,
0xf0
,
0x42
,
0x9c
,
0x9d
,
0x25
,
0x71
,
0xb6
,
0xf9
,
0xba
,
0x
4b
,
0xf8
,
0xde
,
0x07
,
0x9f
,
0xd4
,
0x47
,
0x06
,
0x5a
,
0x79
,
0xf5
,
0x04
,
0x9b
,
0xc0
,
0xf6
,
0x48
,
0x
aa
,
0x38
,
0xe1
,
0x4a
,
0x8c
,
0xce
,
0x4e
,
0x8e
,
0xb9
,
0xc4
,
0xf8
,
0x6f
,
0x41
,
0x47
,
0x65
,
0x26
,
0x
fa
,
0x8e
,
0xca
,
0xaa
,
0x97
,
0xa9
,
0x63
,
0xbd
,
0x4c
,
0x75
,
0x0a
,
0xdc
,
0x46
,
0x0a
,
0xea
,
0x97
,
0x
d2
,
0xb3
,
0x5f
,
0x4a
,
0xf6
,
0x11
,
0x04
,
0x6d
,
0x47
,
0x32
,
0xc7
,
0xeb
,
0x9c
,
0x70
,
0x69
,
0x34
,
0x
8b
,
0x43
,
0xf6
,
0x00
,
0xd6
,
0x47
,
0xd7
,
0xc9
,
0x13
,
0x71
,
0x3e
,
0x9b
,
0x60
,
0x28
,
0x3b
,
0xd0
,
0x
cb
,
0x72
,
0x14
,
0x1d
,
0xd9
,
0x74
,
0x43
,
0x83
,
0xd8
,
0xa7
,
0xb0
,
0x51
,
0x9b
,
0xc9
,
0x1c
,
0xc5
,
0x
3c
,
0x46
,
0x80
,
0x72
,
0x9c
,
0x49
,
0x13
,
0xbb
,
0x3d
,
0xc5
,
0x0e
,
0xe0
,
0xd6
,
0xe8
,
0x3a
,
0xf9
,
0x
6e
,
0x26
,
0x8a
,
0xf9
,
0xd1
,
0x79
,
0x8c
,
0x67
,
0x0f
,
0x60
,
0x0d
,
0x53
,
0x23
,
0x64
,
0x69
,
0x5f
,
0x
42
,
0xf6
,
0x05
,
0x6c
,
0x36
,
0x6c
,
0x65
,
0xbe
,
0xda
,
0xb8
,
0x6c
,
0x94
,
0x9d
,
0xba
,
0x51
,
0xbe
,
0x
20
,
0x0e
,
0xb4
,
0xfd
,
0x46
,
0x3f
,
0xa8
,
0xfd
,
0x38
,
0xcd
,
0x67
,
0xaa
,
0xd4
,
0x3e
,
0x81
,
0x55
,
0x
57
,
0xcb
,
0x7e
,
0x72
,
0x88
,
0xb4
,
0x39
,
0xf7
,
0xc6
,
0x98
,
0xfe
,
0xd5
,
0xc1
,
0x78
,
0x4e
,
0xc1
,
0x5
f
,
0xe3
,
0x4b
,
0x67
,
0x04
,
0x52
,
0x42
,
0x14
,
0x28
,
0xbe
,
0xbf
,
0xb4
,
0xa4
,
0x35
,
0x5f
,
0x61
,
0x
fc
,
0x1c
,
0xb8
,
0x33
,
0xba
,
0x4e
,
0xaa
,
0xba
,
0xc4
,
0xe7
,
0x50
,
0x18
,
0xf9
,
0xd3
,
0x93
,
0xe6
,
0x
58
,
0x4f
,
0xda
,
0xc2
,
0x25
,
0xe1
,
0xcc
,
0x85
,
0xd0
,
0x92
,
0x75
,
0x43
,
0x1c
,
0x56
,
0x6d
,
0xcd
,
0x
b3
,
0xda
,
0x5a
,
0xf5
,
0x90
,
0x76
,
0xed
,
0x87
,
0xf4
,
0x3e
,
0xf8
,
0x28
,
0xc2
,
0x44
,
0x28
,
0x51
,
0x
98
,
0x17
,
0xb2
,
0x9e
,
0x40
,
0x9a
,
0xe2
,
0x4d
,
0x1e
,
0x17
,
0x65
,
0x83
,
0x34
,
0x88
,
0x3a
,
0x03
,
0x
2f
,
0x38
,
0x15
,
0x82
,
0x6e
,
0x8f
,
0x15
,
0xb6
,
0x64
,
0xeb
,
0x53
,
0x40
,
0xa5
,
0x6c
,
0xff
,
0xc4
,
0x
6e
,
0x60
,
0x91
,
0xe4
,
0xd3
,
0xa9
,
0x91
,
0xa5
,
0xf5
,
0x3d
,
0x50
,
0x99
,
0x97
,
0xa4
,
0x3a
,
0x8b
,
0x
a4
,
0x5c
,
0x8b
,
0x54
,
0x23
,
0x7c
,
0xaf
,
0x1d
,
0x7e
,
0xbb
,
0xf0
,
0xbb
,
0x4b
,
0x0a
,
0xbf
,
0xa6
,
0x
d8
,
0x5b
,
0x49
,
0x71
,
0xad
,
0x45
,
0xd1
,
0xa4
,
0xa0
,
0x5f
,
0xeb
,
0x74
,
0x4a
,
0xdc
,
0xbe
,
0x2f
,
0x
78
,
0x2a
,
0x2f
,
0x44
,
0xf1
,
0x34
,
0x9d
,
0xce
,
0x97
,
0x55
,
0x7f
,
0xcd
,
0xb5
,
0xd3
,
0xe0
,
0x6a
,
0x
fb
,
0x72
,
0x5b
,
0xbe
,
0x96
,
0xa4
,
0xd2
,
0x14
,
0xe0
,
0xb1
,
0x50
,
0xa7
,
0xd8
,
0x9a
,
0x6e
,
0x2e
,
0x
c0
,
0x03
,
0x8a
,
0xac
,
0xb6
,
0x95
,
0x79
,
0x26
,
0x5b
,
0xdf
,
0x9a
,
0xae
,
0xe9
,
0x71
,
0xec
,
0x1b
,
0x
78
,
0x1f
,
0x33
,
0xc4
,
0xa7
,
0xd1
,
0xa9
,
0x78
,
0x3d
,
0xb4
,
0x6e
,
0xc9
,
0x24
,
0x6a
,
0x69
,
0xa7
,
0x
d8
,
0x81
,
0x9e
,
0x7a
,
0x73
,
0x89
,
0x7d
,
0x4f
,
0x4b
,
0xd2
,
0x20
,
0x36
,
0x84
,
0x6d
,
0xed
,
0xf8
,
0x
19
,
0x8f
,
0xae
,
0xe8
,
0xc3
,
0x5e
,
0xbc
,
0x2a
,
0x6f
,
0xce
,
0xa9
,
0xc5
,
0xdb
,
0xc8
,
0x60
,
0xa7
,
0x
95
,
0x41
,
0xf6
,
0x08
,
0xee
,
0xb6
,
0x0f
,
0xd1
,
0x04
,
0xe8
,
0xca
,
0xf4
,
0x94
,
0x39
,
0xad
,
0xc2
,
0x
ec
,
0x07
,
0xb8
,
0xad
,
0x37
,
0xbd
,
0x48
,
0xf3
,
0xff
,
0xee
,
0x1b
,
0x6f
,
0x9e
,
0xfe
,
0xad
,
0x18
,
0x
bd
,
0xe1
,
0x98
,
0x7d
,
0x0e
,
0xf7
,
0x16
,
0x8f
,
0xd6
,
0x11
,
0x7d
,
0x00
,
0x30
,
0x4b
,
0xad
,
0x98
,
0x
dc
,
0x7d
,
0x3f
,
0xb4
,
0x66
,
0xce
,
0x7b
,
0xf4
,
0xa7
,
0xe9
,
0xd1
,
0x3f
,
0x01
,
0x00
,
0x00
,
0xff
,
0x
ff
,
0xc7
,
0xa0
,
0xa2
,
0xb0
,
0x4
9
,
0x0d
,
0x00
,
0x00
,
// 112
7
bytes of a gzipped FileDescriptorProto
0x1f
,
0x8b
,
0x08
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x02
,
0xff
,
0xcc
,
0x57
,
0x
cd
,
0x6e
,
0x1c
,
0x45
,
0x1
0
,
0xd6
,
0xec
,
0xcc
,
0xae
,
0x77
,
0xca
,
0x26
,
0xb1
,
0x27
,
0x89
,
0xb3
,
0x58
,
0x11
,
0xb2
,
0x5a
,
0x
04
,
0x2c
,
0x4b
,
0x58
,
0x28
,
0x39
,
0x00
,
0x91
,
0x40
,
0xb2
,
0x36
,
0x2b
,
0x83
,
0xc0
,
0x4e
,
0x98
,
0x
10
,
0x4b
,
0x1c
,
0xdb
,
0xb3
,
0x6d
,
0x7b
,
0xe2
,
0x9d
,
0x9f
,
0x74
,
0xf7
,
0x3a
,
0xf6
,
0x95
,
0x33
,
0x
47
,
0x8e
,
0xdc
,
0x38
,
0xf2
,
0x06
,
0xbc
,
0x09
,
0x1c
,
0x39
,
0xf1
,
0x18
,
0xa8
,
0xaa
,
0x7b
,
0x66
,
0x
7a
,
0x67
,
0x77
,
0x2d
,
0x81
,
0x22
,
0xc4
,
0xc9
,
0xfd
,
0xf5
,
0x54
,
0x57
,
0xd5
,
0xd7
,
0xf5
,
0x55
,
0x
97
,
0x17
,
0x36
,
0xc4
,
0x65
,
0x96
,
0x14
,
0xb9
,
0x96
,
0x3c
,
0xd1
,
0x7b
,
0xa5
,
0x2c
,
0x74
,
0x11
,
0x
75
,
0xf5
,
0x75
,
0x29
,
0x14
,
0xfb
,
0xc1
,
0x83
,
0x8d
,
0xd1
,
0xf1
,
0xe1
,
0xd0
,
0x7e
,
0x7c
,
0x76
,
0xf
2
,
0x4a
,
0x24
,
0x3a
,
0x8a
,
0x20
,
0xe0
,
0xe3
,
0xb1
,
0x1c
,
0x78
,
0xdb
,
0xde
,
0x4e
,
0x18
,
0xd3
,
0x
3a
,
0xda
,
0x85
,
0x60
,
0xcc
,
0x35
,
0x1f
,
0x74
,
0xb6
,
0xbd
,
0x9d
,
0xd5
,
0x47
,
0x9b
,
0x7b
,
0x7
4
,
0x
7e
,
0xcf
,
0x39
,
0xfb
,
0x94
,
0x6b
,
0x1e
,
0x93
,
0x4d
,
0xf4
,
0x11
,
0x74
,
0x95
,
0xe6
,
0x5a
,
0x0c
,
0x
7c
,
0x32
,
0xbe
,
0x3f
,
0x6f
,
0xfc
,
0x02
,
0x3f
,
0xc7
,
0xc6
,
0x8a
,
0xfd
,
0xea
,
0xc1
,
0xed
,
0x96
,
0x
a3
,
0x68
,
0x00
,
0x2b
,
0x89
,
0x14
,
0x5c
,
0x17
,
0x55
,
0x16
,
0x15
,
0xc4
,
0xe4
,
0x72
,
0x9e
,
0x09
,
0x
4a
,
0x24
,
0x8c
,
0x69
,
0x1d
,
0xdd
,
0x85
,
0x2e
,
0x9f
,
0xa4
,
0x5c
,
0x51
,
0xc0
,
0x30
,
0x36
,
0xa0
,
0x
a6
,
0x11
,
0x38
,
0x34
,
0x22
,
0x08
,
0x92
,
0x62
,
0x2c
,
0x06
,
0xdd
,
0x6d
,
0x6f
,
0x67
,
0x2d
,
0xa6
,
0x
75
,
0xb4
,
0x05
,
0x7d
,
0xfc
,
0xfb
,
0x25
,
0x57
,
0xe7
,
0x83
,
0x1e
,
0xed
,
0xd7
,
0x38
,
0x5a
,
0x07
,
0x
9f
,
0x9f
,
0xa4
,
0x83
,
0x15
,
0x72
,
0x81
,
0x4b
,
0xf6
,
0xa7
,
0x07
,
0xeb
,
0x6d
,
0x26
,
0x98
,
0x4
0
,
0x
5e
,
0xe4
,
0x89
,
0xa0
,
0x64
,
0x83
,
0xd8
,
0x00
,
0x74
,
0xac
,
0xa6
,
0x69
,
0x92
,
0x8e
,
0xc5
,
0x98
,
0x
d2
,
0xed
,
0xc7
,
0x35
,
0x8e
,
0xb6
,
0x61
,
0x55
,
0xe9
,
0x42
,
0xf2
,
0x33
,
0x13
,
0xd7
,
0xa7
,
0xb8
,
0x
ee
,
0x56
,
0xf4
,
0x05
,
0xac
,
0x58
,
0x38
,
0x08
,
0xb6
,
0xfd
,
0x9d
,
0xd5
,
0x47
,
0xef
,
0x2f
,
0xb9
,
0x
c7
,
0xbd
,
0x17
,
0xc6
,
0x6c
,
0x94
,
0x6b
,
0x79
,
0x1d
,
0x57
,
0x87
,
0xb6
,
0x9e
,
0xc0
,
0x9a
,
0xfb
,
0x0
1
,
0xa9
,
0x5c
,
0x88
,
0x6b
,
0x7b
,
0x9d
,
0xb8
,
0xc4
,
0xac
,
0x2f
,
0xf9
,
0x64
,
0x6a
,
0xee
,
0x72
,
0x
2d
,
0x36
,
0xe0
,
0x49
,
0xe7
,
0x53
,
0x8f
,
0xfd
,
0x3e
,
0xab
,
0x8b
,
0xfd
,
0x44
,
0xa7
,
0x45
,
0x1e
,
0x
6d
,
0x42
,
0x8f
,
0x67
,
0xc5
,
0x34
,
0xd7
,
0x96
,
0xa6
,
0x45
,
0xc8
,
0xf3
,
0x8c
,
0xab
,
0x6f
,
0xd2
,
0x2
c
,
0xd5
,
0xe4
,
0x2a
,
0x88
,
0x6b
,
0x6c
,
0xbf
,
0x3d
,
0x97
,
0x69
,
0x62
,
0xe4
,
0xf0
,
0x4e
,
0x5c
,
0x
e3
,
0xba
,
0x18
,
0x81
,
0x53
,
0x8c
,
0x08
,
0x82
,
0x92
,
0x4b
,
0x5e
,
0x15
,
0x08
,
0xd7
,
0x4d
,
0x7
9
,
0x
7b
,
0xad
,
0xf2
,
0xe6
,
0x85
,
0x16
,
0xb6
,
0x36
,
0xb4
,
0x8e
,
0x18
,
0xac
,
0x55
,
0x42
,
0xdf
,
0xc7
,
0x
d2
,
0xf7
,
0xe9
,
0xdb
,
0xcc
,
0x1e
,
0xfb
,
0xcd
,
0x83
,
0x28
,
0x16
,
0x89
,
0x48
,
0x4b
,
0xed
,
0x50
,
0x44
,
0x72
,
0x
09
,
0x9f
,
0x4c
,
0x44
,
0x25
,
0x38
,
0x8b
,
0x5c
,
0x97
,
0x47
,
0x8d
,
0xee
,
0x66
,
0xf
6
,
0x
e6
,
0xc2
,
0xfa
,
0xf3
,
0x61
,
0x51
,
0xd1
,
0x53
,
0x25
,
0xc6
,
0x07
,
0x5c
,
0x11
,
0xdf
,
0x20
,
0xae
,
0x2
0
,
0x16
,
0x46
,
0x0a
,
0x6d
,
0x19
,
0xe3
,
0x12
,
0x6d
,
0x5f
,
0xa9
,
0x22
,
0x8f
,
0x85
,
0xb6
,
0x94
,
0x
2b
,
0xc8
,
0x4e
,
0x21
,
0x1a
,
0x1d
,
0x1f
,
0x52
,
0xd9
,
0x87
,
0xe7
,
0x3c
,
0x3f
,
0x13
,
0x5f
,
0x69
,
0x91
,
0x2
d
,
0x28
,
0xed
,
0x16
,
0xf4
,
0x4b
,
0x29
,
0x8e
,
0x9d
,
0xea
,
0xd6
,
0x98
,
0xb2
,
0x9d
,
0x4a
,
0x
29
,
0x72
,
0x6d
,
0xbe
,
0x1b
,
0xed
,
0xcd
,
0xec
,
0xb1
,
0x9f
,
0x3d
,
0x0a
,
0xe4
,
0xf6
,
0xe4
,
0x30
,
0x
1b
,
0xff
,
0x27
,
0x6d
,
0x19
,
0x2e
,
0x69
,
0xcb
,
0xb0
,
0x69
,
0x4b
,
0xf6
,
0x97
,
0x07
,
0x77
,
0xda
,
0x
6d
,
0x80
,
0xf9
,
0xbd
,
0x95
,
0x3e
,
0x0c
,
0x67
,
0xfb
,
0x70
,
0xbf
,
0xdd
,
0x87
,
0x1f
,
0x2e
,
0xe9
,
0xc3
,
0x61
,
0x3
6
,
0x7e
,
0x3b
,
0xad
,
0x18
,
0xba
,
0xad
,
0xf8
,
0x8b
,
0x07
,
0xf7
,
0xe6
,
0xe5
,
0x8a
,
0x64
,
0x
ff
,
0x17
,
0x8a
,
0x0d
,
0x49
,
0xb1
,
0xec
,
0x21
,
0xdc
,
0x1e
,
0x9e
,
0x8b
,
0xe4
,
0x62
,
0x74
,
0x
7c
,
0x88
,
0x67
,
0x63
,
0xf1
,
0x7a
,
0xd1
,
0x14
,
0x61
,
0x3f
,
0x79
,
0xb0
,
0x3e
,
0x6b
,
0xa7
,
0x4a
,
0x
53
,
0x68
,
0x13
,
0x97
,
0x8c
,
0xfb
,
0x71
,
0x8d
,
0xe7
,
0xf2
,
0xec
,
0x2c
,
0xc8
,
0xb3
,
0xcd
,
0xd7
,
0x
5f
,
0xc0
,
0xf7
,
0x01
,
0x84
,
0xa4
,
0x3e
,
0x32
,
0x30
,
0xca
,
0x6b
,
0x36
,
0xd8
,
0x27
,
0xb0
,
0x31
,
0x
52
,
0x3a
,
0xcd
,
0xb8
,
0x16
,
0xa3
,
0xe3
,
0xc3
,
0x03
,
0xae
,
0x30
,
0xff
,
0x5b
,
0xd0
,
0xd1
,
0x57
,
0x
36
,
0xfb
,
0x8e
,
0xbe
,
0x42
,
0x3e
,
0xa7
,
0xb2
,
0xc8
,
0x2a
,
0x85
,
0xe3
,
0x9a
,
0x7d
,
0x00
,
0x51
,
0x
fb
,
0xa0
,
0x2a
,
0xf1
,
0x7a
,
0xce
,
0xb8
,
0xb2
,
0x1a
,
0xc4
,
0x25
,
0x7b
,
0x08
,
0xab
,
0xa3
,
0xcb
,
0x
ec
,
0xa9
,
0x38
,
0x99
,
0x9e
,
0xa1
,
0xeb
,
0x4d
,
0xe8
,
0x15
,
0x25
,
0x8a
,
0x88
,
0x6c
,
0xba
,
0xb1
,
0x
45
,
0xec
,
0x63
,
0x58
,
0x6b
,
0xcc
,
0x54
,
0x89
,
0xe2
,
0x1c
,
0x23
,
0x40
,
0x79
,
0x4d
,
0x95
,
0xcd
,
0x
c5
,
0xdd
,
0x62
,
0xbb
,
0x70
,
0x6b
,
0x74
,
0x99
,
0x7d
,
0x3b
,
0x15
,
0xf2
,
0x7a
,
0xff
,
0x24
,
0x45
,
0x
df
,
0x03
,
0x58
,
0xc1
,
0xab
,
0x16
,
0xaa
,
0xb2
,
0xaf
,
0x20
,
0xfb
,
0x1c
,
0x6e
,
0xcf
,
0xd8
,
0xaa
,
0x
72
,
0xb9
,
0x71
,
0x35
,
0xf8
,
0x3a
,
0xcd
,
0xe0
,
0x7b
,
0x49
,
0x1c
,
0xe8
,
0xf8
,
0x8d
,
0x71
,
0x50
,
0x
cb
,
0x69
,
0x5e
,
0x4e
,
0x75
,
0xa5
,
0x65
,
0x02
,
0x8e
,
0x5a
,
0x7d
,
0x57
,
0xad
,
0xec
,
0x47
,
0x8f
,
0x
48
,
0x5b
,
0xbf
,
0x37
,
0xe6
,
0xf4
,
0x8f
,
0x1c
,
0xa3
,
0x1f
,
0xc9
,
0xdf
,
0xe0
,
0xcb
,
0x65
,
0x0b
,
0x5
e
,
0x41
,
0x14
,
0x1c
,
0xbe
,
0xa7
,
0xf4
,
0xc9
,
0x68
,
0xb8
,
0xc6
,
0x38
,
0xde
,
0xef
,
0x8e
,
0x2e
,
0x
b3
,
0xba
,
0xcf
,
0xf0
,
0x79
,
0x13
,
0x56
,
0xce
,
0xf4
,
0x44
,
0x79
,
0xce
,
0x13
,
0x35
,
0x77
,
0x49
,
0x
b8
,
0x73
,
0x2a
,
0x8c
,
0x04
,
0xfd
,
0x18
,
0x97
,
0xf5
,
0x98
,
0x0a
,
0x9c
,
0x31
,
0x55
,
0x3f
,
0x8c
,
0x
5d
,
0xf7
,
0x61
,
0x7c
,
0x00
,
0x21
,
0x8e
,
0xbb
,
0x4c
,
0x68
,
0x21
,
0xed
,
0x8b
,
0xd7
,
0x6c
,
0x20
,
0x
4d
,
0x71
,
0x55
,
0xa6
,
0xb2
,
0x1a
,
0x78
,
0x16
,
0xd1
,
0x4b
,
0xcf
,
0x25
,
0x27
,
0x61
,
0x9b
,
0x71
,
0x
57
,
0x63
,
0x67
,
0x60
,
0x87
,
0x94
,
0x90
,
0x45
,
0xec
,
0x0f
,
0x7c
,
0xdd
,
0x1d
,
0x92
,
0x7c
,
0x32
,
0x
b1
,
0xb2
,
0x74
,
0xe6
,
0x7b
,
0x6d
,
0x5e
,
0x91
,
0xea
,
0xcc
,
0x93
,
0xf2
,
0x1d
,
0x52
,
0x33
,
0xe9
,
0x
07
,
0xed
,
0xf4
,
0xdb
,
0x8d
,
0xdc
,
0x5d
,
0xd0
,
0xc8
,
0x0d
,
0xc5
,
0xde
,
0x52
,
0x8a
,
0x2b
,
0x2d
,
0x
8a
,
0xb6
,
0x04
,
0xfd
,
0x46
,
0xa7
,
0x13
,
0xe2
,
0xf6
,
0x9d
,
0xe4
,
0xb9
,
0x3a
,
0x15
,
0xf2
,
0x59
,
0x
3e
,
0xb9
,
0xae
,
0xba
,
0xb9
,
0xa8
,
0xbb
,
0xb9
,
0x70
,
0xb8
,
0x76
,
0x66
,
0xb8
,
0xba
,
0xb1
,
0xfc
,
0x
56
,
0xac
,
0x05
,
0xa5
,
0xb4
,
0x0d
,
0x78
,
0x20
,
0xf4
,
0x11
,
0x8e
,
0x9a
,
0x9b
,
0x1b
,
0x70
,
0x97
,
0x
32
,
0x6b
,
0x6c
,
0x55
,
0x59
,
0xa8
,
0xd6
,
0xff
,
0x8e
,
0xbe
,
0x9d
,
0x59
,
0xec
,
0x6b
,
0x78
,
0x17
,
0x
2b
,
0xc4
,
0x27
,
0xc9
,
0x91
,
0x78
,
0x33
,
0x74
,
0x6e
,
0xc9
,
0x16
,
0x6a
,
0xe1
,
0xcb
,
0xbf
,
0x09
,
0x
3d
,
0x7d
,
0x75
,
0x8e
,
0x73
,
0xcc
,
0x48
,
0xd2
,
0x22
,
0x36
,
0x84
,
0x0d
,
0x13
,
0xf8
,
0x39
,
0x4f
,
0x
2e
,
0xe8
,
0x1f
,
0x75
,
0xf1
,
0xba
,
0xba
,
0x39
,
0xaf
,
0x11
,
0xef
,
0x4c
,
0x05
,
0x3b
,
0xad
,
0x0a
,
0x
b2
,
0xc7
,
0x70
,
0xaf
,
0xed
,
0xc4
,
0x10
,
0xa0
,
0x2b
,
0x33
,
0x5b
,
0xd6
,
0x5b
,
0x8d
,
0xd9
,
0xf7
,
0x
70
,
0xc7
,
0x1c
,
0x7a
,
0x99
,
0x97
,
0xff
,
0x3e
,
0x36
,
0xde
,
0x3c
,
0xfd
,
0xfa
,
0xb0
,
0x7a
,
0xc3
,
0x
35
,
0xfb
,
0x0c
,
0xee
,
0xcf
,
0xbb
,
0x36
,
0x19
,
0xbd
,
0x07
,
0x30
,
0xcd
,
0x9d
,
0x9c
,
0xfc
,
0x9d
,
0x
30
,
0x76
,
0x76
,
0x4e
,
0x7a
,
0xf4
,
0x23
,
0xe8
,
0xf1
,
0xdf
,
0x01
,
0x00
,
0x00
,
0xff
,
0xff
,
0xda
,
0x
74
,
0x21
,
0xec
,
0x1
9
,
0x0d
,
0x00
,
0x00
,
}
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