diff --git a/cmd/cometbft/commands/testnet.go b/cmd/cometbft/commands/testnet.go index 4fc6501b5a8..7861eefd1bf 100644 --- a/cmd/cometbft/commands/testnet.go +++ b/cmd/cometbft/commands/testnet.go @@ -142,7 +142,7 @@ func testnetFiles(cmd *cobra.Command, args []string) error { pvKeyFile := filepath.Join(nodeDir, config.BaseConfig.PrivValidatorKey) pvStateFile := filepath.Join(nodeDir, config.BaseConfig.PrivValidatorState) - pv := privval.LoadFilePV(pvKeyFile, pvStateFile) + pv := privval.LoadFilePV(pvKeyFile, pvStateFile, "/tmp/asd") //TODO(blas): change pubKey, err := pv.GetPubKey() if err != nil { diff --git a/consensus/state.go b/consensus/state.go index a2c99f8f79a..9fb149f2061 100644 --- a/consensus/state.go +++ b/consensus/state.go @@ -2280,6 +2280,11 @@ func (cs *State) signVote( v := vote.ToProto() err := cs.privValidator.SignVote(cs.state.ChainID, v) + if err != nil { + return vote, err + } + vAbiEncoded := []byte{} + err = cs.privValidator.SignVoteAbiEncoded(cs.state.ChainID, vAbiEncoded) vote.Signature = v.Signature vote.Timestamp = v.Timestamp diff --git a/go.work.sum b/go.work.sum new file mode 100644 index 00000000000..155f87b4447 --- /dev/null +++ b/go.work.sum @@ -0,0 +1,410 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.110.8/go.mod h1:Iz8AkXJf1qmxC3Oxoep8R1T36w8B92yU29PcBhHO5fk= +cloud.google.com/go v0.112.0/go.mod h1:3jEEVwZ/MHU4djK5t5RHuKOA/GbLddgTdVubX1qnPD4= +cloud.google.com/go/accessapproval v1.7.4/go.mod h1:/aTEh45LzplQgFYdQdwPMR9YdX0UlhBmvB84uAmQKUc= +cloud.google.com/go/accesscontextmanager v1.8.4/go.mod h1:ParU+WbMpD34s5JFEnGAnPBYAgUHozaTmDJU7aCU9+M= +cloud.google.com/go/aiplatform v1.58.0/go.mod h1:pwZMGvqe0JRkI1GWSZCtnAfrR4K1bv65IHILGA//VEU= +cloud.google.com/go/analytics v0.22.0/go.mod h1:eiROFQKosh4hMaNhF85Oc9WO97Cpa7RggD40e/RBy8w= +cloud.google.com/go/apigateway v1.6.4/go.mod h1:0EpJlVGH5HwAN4VF4Iec8TAzGN1aQgbxAWGJsnPCGGY= +cloud.google.com/go/apigeeconnect v1.6.4/go.mod h1:CapQCWZ8TCjnU0d7PobxhpOdVz/OVJ2Hr/Zcuu1xFx0= +cloud.google.com/go/apigeeregistry v0.8.2/go.mod h1:h4v11TDGdeXJDJvImtgK2AFVvMIgGWjSb0HRnBSjcX8= +cloud.google.com/go/appengine v1.8.4/go.mod h1:TZ24v+wXBujtkK77CXCpjZbnuTvsFNT41MUaZ28D6vg= +cloud.google.com/go/area120 v0.8.4/go.mod h1:jfawXjxf29wyBXr48+W+GyX/f8fflxp642D/bb9v68M= +cloud.google.com/go/artifactregistry v1.14.6/go.mod h1:np9LSFotNWHcjnOgh8UVK0RFPCTUGbO0ve3384xyHfE= +cloud.google.com/go/asset v1.17.0/go.mod h1:yYLfUD4wL4X589A9tYrv4rFrba0QlDeag0CMcM5ggXU= +cloud.google.com/go/assuredworkloads v1.11.4/go.mod h1:4pwwGNwy1RP0m+y12ef3Q/8PaiWrIDQ6nD2E8kvWI9U= +cloud.google.com/go/automl v1.13.4/go.mod h1:ULqwX/OLZ4hBVfKQaMtxMSTlPx0GqGbWN8uA/1EqCP8= +cloud.google.com/go/baremetalsolution v1.2.3/go.mod h1:/UAQ5xG3faDdy180rCUv47e0jvpp3BFxT+Cl0PFjw5g= +cloud.google.com/go/batch v1.7.0/go.mod h1:J64gD4vsNSA2O5TtDB5AAux3nJ9iV8U3ilg3JDBYejU= +cloud.google.com/go/beyondcorp v1.0.3/go.mod h1:HcBvnEd7eYr+HGDd5ZbuVmBYX019C6CEXBonXbCVwJo= +cloud.google.com/go/bigquery v1.58.0/go.mod h1:0eh4mWNY0KrBTjUzLjoYImapGORq9gEPT7MWjCy9lik= +cloud.google.com/go/billing v1.18.0/go.mod h1:5DOYQStCxquGprqfuid/7haD7th74kyMBHkjO/OvDtk= +cloud.google.com/go/binaryauthorization v1.8.0/go.mod h1:VQ/nUGRKhrStlGr+8GMS8f6/vznYLkdK5vaKfdCIpvU= +cloud.google.com/go/certificatemanager v1.7.4/go.mod h1:FHAylPe/6IIKuaRmHbjbdLhGhVQ+CWHSD5Jq0k4+cCE= +cloud.google.com/go/channel v1.17.4/go.mod h1:QcEBuZLGGrUMm7kNj9IbU1ZfmJq2apotsV83hbxX7eE= +cloud.google.com/go/cloudbuild v1.15.0/go.mod h1:eIXYWmRt3UtggLnFGx4JvXcMj4kShhVzGndL1LwleEM= +cloud.google.com/go/clouddms v1.7.3/go.mod h1:fkN2HQQNUYInAU3NQ3vRLkV2iWs8lIdmBKOx4nrL6Hc= +cloud.google.com/go/cloudtasks v1.12.4/go.mod h1:BEPu0Gtt2dU6FxZHNqqNdGqIG86qyWKBPGnsb7udGY0= +cloud.google.com/go/compute v1.20.1/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= +cloud.google.com/go/compute v1.23.3/go.mod h1:VCgBUoMnIVIR0CscqQiPJLAG25E3ZRZMzcFZeQ+h8CI= +cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= +cloud.google.com/go/contactcenterinsights v1.12.1/go.mod h1:HHX5wrz5LHVAwfI2smIotQG9x8Qd6gYilaHcLLLmNis= +cloud.google.com/go/container v1.29.0/go.mod h1:b1A1gJeTBXVLQ6GGw9/9M4FG94BEGsqJ5+t4d/3N7O4= +cloud.google.com/go/containeranalysis v0.11.3/go.mod h1:kMeST7yWFQMGjiG9K7Eov+fPNQcGhb8mXj/UcTiWw9U= +cloud.google.com/go/datacatalog v1.19.2/go.mod h1:2YbODwmhpLM4lOFe3PuEhHK9EyTzQJ5AXgIy7EDKTEE= +cloud.google.com/go/dataflow v0.9.4/go.mod h1:4G8vAkHYCSzU8b/kmsoR2lWyHJD85oMJPHMtan40K8w= +cloud.google.com/go/dataform v0.9.1/go.mod h1:pWTg+zGQ7i16pyn0bS1ruqIE91SdL2FDMvEYu/8oQxs= +cloud.google.com/go/datafusion v1.7.4/go.mod h1:BBs78WTOLYkT4GVZIXQCZT3GFpkpDN4aBY4NDX/jVlM= +cloud.google.com/go/datalabeling v0.8.4/go.mod h1:Z1z3E6LHtffBGrNUkKwbwbDxTiXEApLzIgmymj8A3S8= +cloud.google.com/go/dataplex v1.14.0/go.mod h1:mHJYQQ2VEJHsyoC0OdNyy988DvEbPhqFs5OOLffLX0c= +cloud.google.com/go/dataproc v1.12.0/go.mod h1:zrF3aX0uV3ikkMz6z4uBbIKyhRITnxvr4i3IjKsKrw4= +cloud.google.com/go/dataproc/v2 v2.3.0/go.mod h1:G5R6GBc9r36SXv/RtZIVfB8SipI+xVn0bX5SxUzVYbY= +cloud.google.com/go/dataqna v0.8.4/go.mod h1:mySRKjKg5Lz784P6sCov3p1QD+RZQONRMRjzGNcFd0c= +cloud.google.com/go/datastore v1.15.0/go.mod h1:GAeStMBIt9bPS7jMJA85kgkpsMkvseWWXiaHya9Jes8= +cloud.google.com/go/datastream v1.10.3/go.mod h1:YR0USzgjhqA/Id0Ycu1VvZe8hEWwrkjuXrGbzeDOSEA= +cloud.google.com/go/deploy v1.17.0/go.mod h1:XBr42U5jIr64t92gcpOXxNrqL2PStQCXHuKK5GRUuYo= +cloud.google.com/go/dialogflow v1.48.1/go.mod h1:C1sjs2/g9cEwjCltkKeYp3FFpz8BOzNondEaAlCpt+A= +cloud.google.com/go/dlp v1.11.1/go.mod h1:/PA2EnioBeXTL/0hInwgj0rfsQb3lpE3R8XUJxqUNKI= +cloud.google.com/go/documentai v1.23.7/go.mod h1:ghzBsyVTiVdkfKaUCum/9bGBEyBjDO4GfooEcYKhN+g= +cloud.google.com/go/domains v0.9.4/go.mod h1:27jmJGShuXYdUNjyDG0SodTfT5RwLi7xmH334Gvi3fY= +cloud.google.com/go/edgecontainer v1.1.4/go.mod h1:AvFdVuZuVGdgaE5YvlL1faAoa1ndRR/5XhXZvPBHbsE= +cloud.google.com/go/errorreporting v0.3.0/go.mod h1:xsP2yaAp+OAW4OIm60An2bbLpqIhKXdWR/tawvl7QzU= +cloud.google.com/go/essentialcontacts v1.6.5/go.mod h1:jjYbPzw0x+yglXC890l6ECJWdYeZ5dlYACTFL0U/VuM= +cloud.google.com/go/eventarc v1.13.3/go.mod h1:RWH10IAZIRcj1s/vClXkBgMHwh59ts7hSWcqD3kaclg= +cloud.google.com/go/filestore v1.8.0/go.mod h1:S5JCxIbFjeBhWMTfIYH2Jx24J6BqjwpkkPl+nBA5DlI= +cloud.google.com/go/firestore v1.14.0/go.mod h1:96MVaHLsEhbvkBEdZgfN+AS/GIkco1LRpH9Xp9YZfzQ= +cloud.google.com/go/functions v1.15.4/go.mod h1:CAsTc3VlRMVvx+XqXxKqVevguqJpnVip4DdonFsX28I= +cloud.google.com/go/gkebackup v1.3.4/go.mod h1:gLVlbM8h/nHIs09ns1qx3q3eaXcGSELgNu1DWXYz1HI= +cloud.google.com/go/gkeconnect v0.8.4/go.mod h1:84hZz4UMlDCKl8ifVW8layK4WHlMAFeq8vbzjU0yJkw= +cloud.google.com/go/gkehub v0.14.4/go.mod h1:Xispfu2MqnnFt8rV/2/3o73SK1snL8s9dYJ9G2oQMfc= +cloud.google.com/go/gkemulticloud v1.1.0/go.mod h1:7NpJBN94U6DY1xHIbsDqB2+TFZUfjLUKLjUX8NGLor0= +cloud.google.com/go/grafeas v0.3.0/go.mod h1:P7hgN24EyONOTMyeJH6DxG4zD7fwiYa5Q6GUgyFSOU8= +cloud.google.com/go/gsuiteaddons v1.6.4/go.mod h1:rxtstw7Fx22uLOXBpsvb9DUbC+fiXs7rF4U29KHM/pE= +cloud.google.com/go/iam v1.1.5/go.mod h1:rB6P/Ic3mykPbFio+vo7403drjlgvoWfYpJhMXEbzv8= +cloud.google.com/go/iap v1.9.3/go.mod h1:DTdutSZBqkkOm2HEOTBzhZxh2mwwxshfD/h3yofAiCw= +cloud.google.com/go/ids v1.4.4/go.mod h1:z+WUc2eEl6S/1aZWzwtVNWoSZslgzPxAboS0lZX0HjI= +cloud.google.com/go/iot v1.7.4/go.mod h1:3TWqDVvsddYBG++nHSZmluoCAVGr1hAcabbWZNKEZLk= +cloud.google.com/go/kms v1.15.5/go.mod h1:cU2H5jnp6G2TDpUGZyqTCoy1n16fbubHZjmVXSMtwDI= +cloud.google.com/go/language v1.12.2/go.mod h1:9idWapzr/JKXBBQ4lWqVX/hcadxB194ry20m/bTrhWc= +cloud.google.com/go/lifesciences v0.9.4/go.mod h1:bhm64duKhMi7s9jR9WYJYvjAFJwRqNj+Nia7hF0Z7JA= +cloud.google.com/go/logging v1.9.0/go.mod h1:1Io0vnZv4onoUnsVUQY3HZ3Igb1nBchky0A0y7BBBhE= +cloud.google.com/go/longrunning v0.5.4/go.mod h1:zqNVncI0BOP8ST6XQD1+VcvuShMmq7+xFSzOL++V0dI= +cloud.google.com/go/managedidentities v1.6.4/go.mod h1:WgyaECfHmF00t/1Uk8Oun3CQ2PGUtjc3e9Alh79wyiM= +cloud.google.com/go/maps v1.6.3/go.mod h1:VGAn809ADswi1ASofL5lveOHPnE6Rk/SFTTBx1yuOLw= +cloud.google.com/go/mediatranslation v0.8.4/go.mod h1:9WstgtNVAdN53m6TQa5GjIjLqKQPXe74hwSCxUP6nj4= +cloud.google.com/go/memcache v1.10.4/go.mod h1:v/d8PuC8d1gD6Yn5+I3INzLR01IDn0N4Ym56RgikSI0= +cloud.google.com/go/metastore v1.13.3/go.mod h1:K+wdjXdtkdk7AQg4+sXS8bRrQa9gcOr+foOMF2tqINE= +cloud.google.com/go/monitoring v1.17.0/go.mod h1:KwSsX5+8PnXv5NJnICZzW2R8pWTis8ypC4zmdRD63Tw= +cloud.google.com/go/networkconnectivity v1.14.3/go.mod h1:4aoeFdrJpYEXNvrnfyD5kIzs8YtHg945Og4koAjHQek= +cloud.google.com/go/networkmanagement v1.9.3/go.mod h1:y7WMO1bRLaP5h3Obm4tey+NquUvB93Co1oh4wpL+XcU= +cloud.google.com/go/networksecurity v0.9.4/go.mod h1:E9CeMZ2zDsNBkr8axKSYm8XyTqNhiCHf1JO/Vb8mD1w= +cloud.google.com/go/notebooks v1.11.2/go.mod h1:z0tlHI/lREXC8BS2mIsUeR3agM1AkgLiS+Isov3SS70= +cloud.google.com/go/optimization v1.6.2/go.mod h1:mWNZ7B9/EyMCcwNl1frUGEuY6CPijSkz88Fz2vwKPOY= +cloud.google.com/go/orchestration v1.8.4/go.mod h1:d0lywZSVYtIoSZXb0iFjv9SaL13PGyVOKDxqGxEf/qI= +cloud.google.com/go/orgpolicy v1.12.0/go.mod h1:0+aNV/nrfoTQ4Mytv+Aw+stBDBjNf4d8fYRA9herfJI= +cloud.google.com/go/osconfig v1.12.4/go.mod h1:B1qEwJ/jzqSRslvdOCI8Kdnp0gSng0xW4LOnIebQomA= +cloud.google.com/go/oslogin v1.13.0/go.mod h1:xPJqLwpTZ90LSE5IL1/svko+6c5avZLluiyylMb/sRA= +cloud.google.com/go/phishingprotection v0.8.4/go.mod h1:6b3kNPAc2AQ6jZfFHioZKg9MQNybDg4ixFd4RPZZ2nE= +cloud.google.com/go/policytroubleshooter v1.10.2/go.mod h1:m4uF3f6LseVEnMV6nknlN2vYGRb+75ylQwJdnOXfnv0= +cloud.google.com/go/privatecatalog v0.9.4/go.mod h1:SOjm93f+5hp/U3PqMZAHTtBtluqLygrDrVO8X8tYtG0= +cloud.google.com/go/pubsub v1.34.0/go.mod h1:alj4l4rBg+N3YTFDDC+/YyFTs6JAjam2QfYsddcAW4c= +cloud.google.com/go/pubsublite v1.8.1/go.mod h1:fOLdU4f5xldK4RGJrBMm+J7zMWNj/k4PxwEZXy39QS0= +cloud.google.com/go/recaptchaenterprise/v2 v2.9.0/go.mod h1:Dak54rw6lC2gBY8FBznpOCAR58wKf+R+ZSJRoeJok4w= +cloud.google.com/go/recommendationengine v0.8.4/go.mod h1:GEteCf1PATl5v5ZsQ60sTClUE0phbWmo3rQ1Js8louU= +cloud.google.com/go/recommender v1.12.0/go.mod h1:+FJosKKJSId1MBFeJ/TTyoGQZiEelQQIZMKYYD8ruK4= +cloud.google.com/go/redis v1.14.1/go.mod h1:MbmBxN8bEnQI4doZPC1BzADU4HGocHBk2de3SbgOkqs= +cloud.google.com/go/resourcemanager v1.9.4/go.mod h1:N1dhP9RFvo3lUfwtfLWVxfUWq8+KUQ+XLlHLH3BoFJ0= +cloud.google.com/go/resourcesettings v1.6.4/go.mod h1:pYTTkWdv2lmQcjsthbZLNBP4QW140cs7wqA3DuqErVI= +cloud.google.com/go/retail v1.14.4/go.mod h1:l/N7cMtY78yRnJqp5JW8emy7MB1nz8E4t2yfOmklYfg= +cloud.google.com/go/run v1.3.3/go.mod h1:WSM5pGyJ7cfYyYbONVQBN4buz42zFqwG67Q3ch07iK4= +cloud.google.com/go/scheduler v1.10.5/go.mod h1:MTuXcrJC9tqOHhixdbHDFSIuh7xZF2IysiINDuiq6NI= +cloud.google.com/go/secretmanager v1.11.4/go.mod h1:wreJlbS9Zdq21lMzWmJ0XhWW2ZxgPeahsqeV/vZoJ3w= +cloud.google.com/go/security v1.15.4/go.mod h1:oN7C2uIZKhxCLiAAijKUCuHLZbIt/ghYEo8MqwD/Ty4= +cloud.google.com/go/securitycenter v1.24.3/go.mod h1:l1XejOngggzqwr4Fa2Cn+iWZGf+aBLTXtB/vXjy5vXM= +cloud.google.com/go/servicedirectory v1.11.3/go.mod h1:LV+cHkomRLr67YoQy3Xq2tUXBGOs5z5bPofdq7qtiAw= +cloud.google.com/go/shell v1.7.4/go.mod h1:yLeXB8eKLxw0dpEmXQ/FjriYrBijNsONpwnWsdPqlKM= +cloud.google.com/go/spanner v1.55.0/go.mod h1:HXEznMUVhC+PC+HDyo9YFG2Ajj5BQDkcbqB9Z2Ffxi0= +cloud.google.com/go/speech v1.21.0/go.mod h1:wwolycgONvfz2EDU8rKuHRW3+wc9ILPsAWoikBEWavY= +cloud.google.com/go/storage v1.36.0/go.mod h1:M6M/3V/D3KpzMTJyPOR/HU6n2Si5QdaXYEsng2xgOs8= +cloud.google.com/go/storagetransfer v1.10.3/go.mod h1:Up8LY2p6X68SZ+WToswpQbQHnJpOty/ACcMafuey8gc= +cloud.google.com/go/talent v1.6.5/go.mod h1:Mf5cma696HmE+P2BWJ/ZwYqeJXEeU0UqjHFXVLadEDI= +cloud.google.com/go/texttospeech v1.7.4/go.mod h1:vgv0002WvR4liGuSd5BJbWy4nDn5Ozco0uJymY5+U74= +cloud.google.com/go/tpu v1.6.4/go.mod h1:NAm9q3Rq2wIlGnOhpYICNI7+bpBebMJbh0yyp3aNw1Y= +cloud.google.com/go/trace v1.10.4/go.mod h1:Nso99EDIK8Mj5/zmB+iGr9dosS/bzWCJ8wGmE6TXNWY= +cloud.google.com/go/translate v1.10.0/go.mod h1:Kbq9RggWsbqZ9W5YpM94Q1Xv4dshw/gr/SHfsl5yCZ0= +cloud.google.com/go/video v1.20.3/go.mod h1:TnH/mNZKVHeNtpamsSPygSR0iHtvrR/cW1/GDjN5+GU= +cloud.google.com/go/videointelligence v1.11.4/go.mod h1:kPBMAYsTPFiQxMLmmjpcZUMklJp3nC9+ipJJtprccD8= +cloud.google.com/go/vision/v2 v2.7.5/go.mod h1:GcviprJLFfK9OLf0z8Gm6lQb6ZFUulvpZws+mm6yPLM= +cloud.google.com/go/vmmigration v1.7.4/go.mod h1:yBXCmiLaB99hEl/G9ZooNx2GyzgsjKnw5fWcINRgD70= +cloud.google.com/go/vmwareengine v1.0.3/go.mod h1:QSpdZ1stlbfKtyt6Iu19M6XRxjmXO+vb5a/R6Fvy2y4= +cloud.google.com/go/vpcaccess v1.7.4/go.mod h1:lA0KTvhtEOb/VOdnH/gwPuOzGgM+CWsmGu6bb4IoMKk= +cloud.google.com/go/webrisk v1.9.4/go.mod h1:w7m4Ib4C+OseSr2GL66m0zMBywdrVNTDKsdEsfMl7X0= +cloud.google.com/go/websecurityscanner v1.6.4/go.mod h1:mUiyMQ+dGpPPRkHgknIZeCzSHJ45+fY4F52nZFDHm2o= +cloud.google.com/go/workflows v1.12.3/go.mod h1:fmOUeeqEwPzIU81foMjTRQIdwQHADi/vEr1cx9R1m5g= +git.sr.ht/~sbinet/gg v0.5.0/go.mod h1:G2C0eRESqlKhS7ErsNey6HHrqU1PwsnCQlekFi9Q2Oo= +github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53/go.mod h1:+3IMCy2vIlbG1XG/0ggNQv0SvxCAIpPM5b1nCz56Xno= +github.com/CloudyKit/jet/v6 v6.1.0/go.mod h1:d3ypHeIRNo2+XyqnGA8s+aphtcVpjP5hPwP/Lzo7Ro4= +github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= +github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= +github.com/Shopify/goreferrer v0.0.0-20220729165902-8cddb4f5de06/go.mod h1:7erjKLwalezA0k99cWs5L11HWOAPNjdUZ6RxH1BXbbM= +github.com/aclements/go-moremath v0.0.0-20210112150236-f10218a38794/go.mod h1:7e+I0LQFUI9AXWxOfsQROs9xPhoJtbsyWcjJqDd4KPY= +github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= +github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b/go.mod h1:1KcenG0jGWcpt8ov532z81sp/kMMUG485J2InIOyADM= +github.com/alecthomas/kingpin/v2 v2.4.0/go.mod h1:0gyi0zQnjuFk8xrkNKamJoyUo382HRL7ATRpFZCw6tE= +github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE= +github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= +github.com/apache/arrow/go/v12 v12.0.1/go.mod h1:weuTY7JvTG/HDPtMQxEUp7pU73vkLWMLpY67QwZ/WWw= +github.com/apache/thrift v0.16.0/go.mod h1:PHK3hniurgQaNMZYaCLEqXKsYK8upmhPbmdP2FXSqgU= +github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= +github.com/aws/aws-sdk-go v1.40.45/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q= +github.com/aws/aws-sdk-go-v2 v1.9.1/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4= +github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.8.1/go.mod h1:CM+19rL1+4dFWnOQKwDc7H1KwXTz+h61oUSHyhV0b3o= +github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= +github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4= +github.com/campoy/embedmd v1.0.0/go.mod h1:oxyr9RCiSXg0M3VJ3ks0UGfp98BpSSGr0kpiX3MzVl8= +github.com/casbin/casbin/v2 v2.37.0/go.mod h1:vByNa/Fchek0KZUgG5wEsl7iFsiviAYKRtgrQfcJqHg= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw= +github.com/checkpoint-restore/go-criu/v5 v5.3.0/go.mod h1:E/eQpaFtUKGOOSEBZgmKAcn+zUUwWxqcaKZlF54wK8E= +github.com/cilium/ebpf v0.7.0/go.mod h1:/oI2+1shJiTGAMgl6/RgJr36Eo1jzrRcAWbcXO2usCA= +github.com/clbanning/mxj v1.8.4/go.mod h1:BVjHeAH+rl9rs6f+QIpeRl0tfu10SXn1pUSa5PVGJng= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa/go.mod h1:x/1Gn8zydmfq8dk6e9PdstVsDgu9RuyIIJqAaF//0IM= +github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM= +github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U= +github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= +github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= +github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= +github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385/go.mod h1:0vRUJqYpeSZifjYj7uP3BG/gKcuzL9xWVV/Y+cK33KM= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.12.0/go.mod h1:ZBTaoJ23lqITozF0M6G4/IragXCQKCnYbmlmtHvwRG0= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/envoyproxy/protoc-gen-validate v1.0.4/go.mod h1:qys6tmnRsYrQqIhm2bvKZH4Blx/1gTIZ2UKVY1M+Yew= +github.com/fatih/color v1.14.1/go.mod h1:2oHN61fhTpgcxD3TSWCgKDiH1+x4OiDVVGH8WlgGZGg= +github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= +github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/flosch/pongo2/v4 v4.0.2/go.mod h1:B5ObFANs/36VwxxlgKpdchIJHMvHB562PW+BWPhwZD8= +github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= +github.com/ghemawat/stream v0.0.0-20171120220530-696b145b53b9/go.mod h1:106OIgooyS7OzLDOpUGgm9fA3bQENb/cFSyyBmMoJDs= +github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= +github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk= +github.com/go-fonts/liberation v0.3.2/go.mod h1:N0QsDLVUQPy3UYg9XAc3Uh3UDMp2Z7M1o4+X98dXkmI= +github.com/go-latex/latex v0.0.0-20231108140139-5c1ce85aa4ea/go.mod h1:Y7Vld91/HRbTBm7JwoI7HejdDB0u+e9AUBO9MB7yuZk= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8= +github.com/go-pdf/fpdf v0.9.0/go.mod h1:oO8N111TkmKb9D7VvWGLvLJlaZUQVPM+6V42pp3iV4Y= +github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= +github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= +github.com/go-playground/validator/v10 v10.11.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= +github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= +github.com/go-zookeeper/zk v1.0.2/go.mod h1:nOB03cncLtlp4t+UAkGSV+9beXP/akpekBwL+UX1Qcw= +github.com/goccmack/gocc v0.0.0-20230228185258-2292f9e40198/go.mod h1:DTh/Y2+NbnOVVoypCCQrovMPDKUGp4yZpSbWg5D0XIM= +github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/godbus/dbus/v5 v5.0.6/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4= +github.com/gogo/status v1.1.0/go.mod h1:BFv9nrluPLmrS0EmGVvLaPNmRosr9KapBYd5/hpY1WM= +github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/google/flatbuffers v2.0.8+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-pkcs11 v0.2.1-0.20230907215043-c6f79328ddf9/go.mod h1:6eQoGcuNJpa7jnd5pMGdkSaQpNDYvPlXWMcjXXThLlY= +github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= +github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.5.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= +github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU= +github.com/googleapis/google-cloud-go-testing v0.0.0-20210719221736-1c9a4c676720/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= +github.com/gorilla/css v1.0.0/go.mod h1:Dn721qIggHpt4+EFCcTLTU/vk5ySda2ReITrtgBl60c= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3/go.mod h1:o//XUCC/F+yRGJoPO/VU0GSB0f8Nhgmxx0VIRUvaC0w= +github.com/guptarohit/asciigraph v0.5.5/go.mod h1:dYl5wwK4gNsnFf9Zp+l06rFiDZ5YtXM6x7SRWZ3KGag= +github.com/hashicorp/consul/api v1.25.1/go.mod h1:iiLVwR/htV7mas/sy0O+XSuEnrdBUUydemjxcUrAt4g= +github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= +github.com/hashicorp/go-hclog v1.5.0/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= +github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= +github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/serf v0.10.1/go.mod h1:yL2t6BqATOLGc5HF7qbFkTfXoPIY0WZdWHfEvMqbG+4= +github.com/hudl/fargo v1.4.0/go.mod h1:9Ai6uvFy5fQNq6VPKtg+Ceq1+eTY4nKUlR2JElEOcDo= +github.com/hydrogen18/memlistener v1.0.0/go.mod h1:qEIFzExnS6016fRpRfxrExeVn2gbClQA99gQhnIcdhE= +github.com/iancoleman/strcase v0.3.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= +github.com/influxdata/influxdb1-client v0.0.0-20200827194710-b269163b24ab/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= +github.com/iris-contrib/jade v1.1.4/go.mod h1:EDqR+ur9piDl6DUgs6qRrlfzmlx/D5UybogqrXvJTBE= +github.com/iris-contrib/schema v0.0.6/go.mod h1:iYszG0IOsuIsfzjymw1kMzTL8YQcCWlm65f3wX8J5iA= +github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= +github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= +github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= +github.com/kataras/blocks v0.0.7/go.mod h1:UJIU97CluDo0f+zEjbnbkeMRlvYORtmc1304EeyXf4I= +github.com/kataras/golog v0.1.7/go.mod h1:jOSQ+C5fUqsNSwurB/oAHq1IFSb0KI3l6GMa7xB6dZA= +github.com/kataras/iris/v12 v12.2.0-beta5/go.mod h1:q26aoWJ0Knx/00iPKg5iizDK7oQQSPjbD8np0XDh6dc= +github.com/kataras/pio v0.0.11/go.mod h1:38hH6SWH6m4DKSYmRhlrCJ5WItwWgCVrTNU62XZyUvI= +github.com/kataras/sitemap v0.0.6/go.mod h1:dW4dOCNs896OR1HmG+dMLdT7JjDk7mYBzoIRwuj5jA4= +github.com/kataras/tunnel v0.0.4/go.mod h1:9FkU4LaeifdMWqZu7o20ojmW4B7hdhv2CMLwfnHGpYw= +github.com/klauspost/asmfmt v1.3.2/go.mod h1:AG8TuvYojzulgDAMCnYn50l/5QV3Bs/tp6j0HLHbNSE= +github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= +github.com/labstack/echo/v4 v4.9.0/go.mod h1:xkCDAdFCIf8jsFQ5NnbK7oqaF/yU1A1X20Ltm0OvSks= +github.com/labstack/gommon v0.3.1/go.mod h1:uW6kP17uPlLJsD3ijUYn3/M5bAxtlZhMI6m3MFxTMTM= +github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= +github.com/lyft/protoc-gen-star/v2 v2.0.3/go.mod h1:amey7yeodaJhXSbf/TlLvWiqQfLOSpEk//mLlc+axEk= +github.com/mailgun/raymond/v2 v2.0.46/go.mod h1:lsgvL50kgt1ylcFJYZiULi5fjPBkkhNfj4KA0W54Z18= +github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/microcosm-cc/bluemonday v1.0.21/go.mod h1:ytNkv4RrDrLJ2pqlsSI46O6IVXmZOBBD4SaJyDwwTkM= +github.com/miekg/dns v1.1.43/go.mod h1:+evo5L0630/F6ca/Z9+GAqzhjGyn8/c+TBaOyfEl0V4= +github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8/go.mod h1:mC1jAcsrzbxHt8iiaC+zU4b1ylILSosueou12R++wfY= +github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3/go.mod h1:RagcQ7I8IeTMnF8JTXieKnO4Z6JCsikNEzj0DwauVzE= +github.com/mmcloughlin/avo v0.5.0/go.mod h1:ChHFdoV7ql95Wi7vuq2YT1bwCJqiWdZrQ1im3VujLYM= +github.com/moby/sys/mountinfo v0.5.0/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/mrunalp/fileutils v0.5.1/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ= +github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/nats-io/jwt/v2 v2.2.1-0.20220330180145-442af02fd36a/go.mod h1:0tqz9Hlu6bCBFLWAASKhE5vUA4c24L9KPUUgvwumE/k= +github.com/nats-io/nats-server/v2 v2.8.4/go.mod h1:8zZa+Al3WsESfmgSs98Fi06dRWLH5Bnq90m5bKD/eT4= +github.com/nats-io/nats.go v1.31.0/go.mod h1:di3Bm5MLsoB4Bx61CBTsxuarI36WbhAwOm8QrW39+i8= +github.com/nats-io/nkeys v0.4.6/go.mod h1:4DxZNzenSVd1cYQoAa8948QY3QDjrHfcfVADymtkpts= +github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= +github.com/onsi/ginkgo/v2 v2.13.0/go.mod h1:TE309ZR8s5FsKKpuB1YAQYBzCaAfUgatB/xlT/ETL/o= +github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= +github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/selinux v1.10.0/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI= +github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= +github.com/openzipkin/zipkin-go v0.2.5/go.mod h1:KpXfKdgRDnnhsxw4pNIH9Md5lyFqKUa4YDFlwRYAMyE= +github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc= +github.com/performancecopilot/speed/v4 v4.0.0/go.mod h1:qxrSyuDGrTOWfV+uKRFhfxw6h/4HXRGUiZiufxo49BM= +github.com/pierrec/lz4/v4 v4.1.15/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pkg/sftp v1.13.6/go.mod h1:tz1ryNURKu77RL+GuCzmoJYxQczL3wLNNpPWagdg4Qk= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/rabbitmq/amqp091-go v1.2.0/go.mod h1:ogQDLSOACsLPsIq0NpbtiifNZi2YOz0VTJ0kHRghqbM= +github.com/russross/blackfriday v1.6.0/go.mod h1:ti0ldHuxg49ri4ksnFxlkCfN+hvslNlmVHqNRXXJNAY= +github.com/sagikazarmark/crypt v0.17.0/go.mod h1:SMtHTvdmsZMuY/bpZoqokSoChIrcJ/epOxZN58PbZDg= +github.com/schollz/closestmatch v2.1.0+incompatible/go.mod h1:RtP1ddjLong6gTkbtmuhtR2uUrrJOpYzYRvbcPAid+g= +github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= +github.com/streadway/handy v0.0.0-20200128134331-0f66f006fb2e/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= +github.com/tdewolff/minify/v2 v2.12.4/go.mod h1:h+SRvSIX3kwgwTFOpSckvSxgax3uy8kZTSF1Ojrr3bk= +github.com/tdewolff/parse/v2 v2.6.4/go.mod h1:woz0cgbLwFdtbjJu8PIKxhW05KplTFQkOdX78o+Jgrs= +github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= +github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasthttp v1.40.0/go.mod h1:t/G+3rLek+CyY9bnIE+YlMRddxVAAGjhxndDB4i4C0I= +github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= +github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= +github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= +github.com/vmihailenco/msgpack/v5 v5.3.5/go.mod h1:7xyJ9e+0+9SaZT0Wt1RGleJXzli6Q/V5KbhBonMG9jc= +github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds= +github.com/xhit/go-str2duration/v2 v2.1.0/go.mod h1:ohY8p+0f07DiV6Em5LKB0s2YpLtXVyJfNt1+BlmyAsU= +github.com/yosssi/ace v0.0.5/go.mod h1:ALfIzm2vT7t5ZE7uoIZqF3TQ7SAOyupFZnkrF5id+K0= +github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA= +go.etcd.io/etcd/api/v3 v3.5.10/go.mod h1:TidfmT4Uycad3NM/o25fG3J07odo4GBB9hoxaodFCtI= +go.etcd.io/etcd/client/pkg/v3 v3.5.10/go.mod h1:DYivfIviIuQ8+/lCq4vcxuseg2P2XbHygkKwFo9fc8U= +go.etcd.io/etcd/client/v2 v2.305.10/go.mod h1:m3CKZi69HzilhVqtPDcjhSGp+kA1OmbNn0qamH80xjA= +go.etcd.io/etcd/client/v3 v3.5.10/go.mod h1:RVeBnDz2PUEZqTpgqwAtUd8nAPf5kjyFyND7P1VkOKc= +go.etcd.io/gofail v0.1.0/go.mod h1:VZBCXYGZhHAinaBiiqYvuDynvahNsAyLFwB3kEHKz1M= +go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.1/go.mod h1:4UoMYEZOC0yN/sPGH76KPkkU7zgiEWYWL9vwmbnTJPE= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.1/go.mod h1:sEGXWArGqc3tVa+ekntsN65DmVbVeW+7lTKTjZF3/Fo= +go.opentelemetry.io/otel v1.21.0/go.mod h1:QZzNPQPm1zLX4gZK4cMi+71eaorMSGT3A4znnUvNNEo= +go.opentelemetry.io/otel/metric v1.21.0/go.mod h1:o1p3CA8nNHW8j5yuQLdc1eeqEaPfzug24uvsyIEJRWM= +go.opentelemetry.io/otel/sdk v1.21.0/go.mod h1:Nna6Yv7PWTdgJHVRD9hIYywQBRx7pbox6nwBnZIxl/E= +go.opentelemetry.io/otel/trace v1.21.0/go.mod h1:LGbsEB0f9LGjN+OZaQQ26sohbOmiMR+BaslueVtS/qQ= +go.opentelemetry.io/proto/otlp v1.0.0/go.mod h1:Sy6pihPLfYHkr3NkUbEhGHFhINUSI/v80hjKIs5JXpM= +go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= +golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= +golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/image v0.14.0/go.mod h1:HUYqC05R2ZcZ3ejNQsIHQDQiwWM4JBqmm6MKANTp4LE= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= +golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ= +golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= +golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= +golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.13.0/go.mod h1:/JMhi4ZRXAf4HG9LiNmxvk+45+96RUlVThiH8FzNBn0= +golang.org/x/oauth2 v0.15.0/go.mod h1:q48ptWNTY5XWf+JNten23lcvHpLJ0ZSxF5ttTHKVCAM= +golang.org/x/oauth2 v0.16.0/go.mod h1:hqZ+0LWXsiVoZpeld6jVt06P3adbS2Uu911W1SsJv2o= +golang.org/x/oauth2 v0.18.0/go.mod h1:Wf7knwG0MPoWIMMBgFlEaSUDaKskp0dCfrlJRJXbBi8= +golang.org/x/perf v0.0.0-20230113213139-801c7ef9e5c5/go.mod h1:UBKtEnL8aqnd+0JHqZ+2qoMDwtuy6cYhhKNoHLBiTQc= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= +golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= +gonum.org/v1/plot v0.14.0/go.mod h1:MLdR9424SJed+5VqC6MsouEpig9pZX2VZ57H9ko2bXU= +google.golang.org/api v0.149.0/go.mod h1:Mwn1B7JTXrzXtnvmzQE2BD6bYZQ8DShKZDZbeN9I7qI= +google.golang.org/api v0.155.0/go.mod h1:GI5qK5f40kCpHfPn6+YzGAByIKWv8ujFnmoWm7Igduk= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:CgAqfJo+Xmu0GwA0411Ht3OU3OntXwsGmrmjI8ioGXI= +google.golang.org/genproto v0.0.0-20231211222908-989df2bf70f3/go.mod h1:5RBcpGRxr25RbDzY5w+dmaqpSEvl8Gwl1x2CICf60ic= +google.golang.org/genproto v0.0.0-20231212172506-995d672761c0/go.mod h1:l/k7rMz0vFTBPy+tFSGvXEd3z+BcoG1k7EHbqm+YBsY= +google.golang.org/genproto v0.0.0-20240116215550-a9fa1716bcac/go.mod h1:+Rvu7ElI+aLzyDQhpHMFMMltsD6m7nqpuWDd2CwJw3k= +google.golang.org/genproto v0.0.0-20240123012728-ef4313101c80 h1:KAeGQVN3M9nD0/bQXnr/ClcEMJ968gUXJQ9pwfSynuQ= +google.golang.org/genproto v0.0.0-20240123012728-ef4313101c80/go.mod h1:cc8bqMqtv9gMOr0zHg2Vzff5ULhhL2IXP4sbcn32Dro= +google.golang.org/genproto/googleapis/api v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:IBQ646DjkDkvUIsVq/cc03FUFQ9wbZu7yE396YcL870= +google.golang.org/genproto/googleapis/api v0.0.0-20231211222908-989df2bf70f3/go.mod h1:k2dtGpRrbsSyKcNPKKI5sstZkrNCZwpU/ns96JoHbGg= +google.golang.org/genproto/googleapis/api v0.0.0-20240102182953-50ed04b92917/go.mod h1:CmlNWB9lSezaYELKS5Ym1r44VrrbPUa7JTvw+6MbpJ0= +google.golang.org/genproto/googleapis/api v0.0.0-20240116215550-a9fa1716bcac/go.mod h1:B5xPO//w8qmBDjGReYLpR6UJPnkldGkCSMoH/2vxJeg= +google.golang.org/genproto/googleapis/api v0.0.0-20240123012728-ef4313101c80/go.mod h1:4jWUdICTdgc3Ibxmr8nAJiiLHwQBY0UI0XZcEMaFKaA= +google.golang.org/genproto/googleapis/bytestream v0.0.0-20231212172506-995d672761c0/go.mod h1:guYXGPwC6jwxgWKW5Y405fKWOFNwlvUlUnzyp9i0uqo= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:swOH3j0KzcDDgGUWr+SNpyTen5YrXjS3eyPzFYKc6lc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231120223509-83a465c0220f/go.mod h1:L9KNLi232K1/xB6f7AlSX692koaRnKaWSR0stBki0Yc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231212172506-995d672761c0/go.mod h1:FUoWkonphQm3RhTS+kOEhF8h0iDpm4tdXolVCeZ9KKA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240102182953-50ed04b92917/go.mod h1:xtjpI3tXFPP051KaWnhvxkiubL/6dJ18vLVf7q2pTOU= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240116215550-a9fa1716bcac/go.mod h1:daQN87bsDqDoe316QbbvX60nMoJQa4r6Ds0ZuoAe5yA= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98= +google.golang.org/grpc v1.60.1/go.mod h1:OlCHIeLYqSSsLi6i49B5QGdzaMZK9+M7LXN2FKz4eGM= +google.golang.org/grpc v1.61.0/go.mod h1:VUbo7IFqmF1QtCAstipjG0GIoq49KvMe9+h1jFLBNJs= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/privval/file.go b/privval/file.go index 8527c60e01f..b09974baf59 100644 --- a/privval/file.go +++ b/privval/file.go @@ -147,12 +147,13 @@ func (lss *FilePVLastSignState) Save() { // It includes the LastSignature and LastSignBytes so we don't lose the signature // if the process crashes after signing but before the resulting consensus message is processed. type FilePV struct { - Key FilePVKey - LastSignState FilePVLastSignState + Key FilePVKey + LastSignState FilePVLastSignState + LastSignStateAbiEncoded FilePVLastSignState } // NewFilePV generates a new validator from the given key and paths. -func NewFilePV(privKey crypto.PrivKey, keyFilePath, stateFilePath string) *FilePV { +func NewFilePV(privKey crypto.PrivKey, keyFilePath, stateFilePath string, stateFilePathAbiEncoded string) *FilePV { return &FilePV{ Key: FilePVKey{ Address: privKey.PubKey().Address(), @@ -164,30 +165,34 @@ func NewFilePV(privKey crypto.PrivKey, keyFilePath, stateFilePath string) *FileP Step: stepNone, filePath: stateFilePath, }, + LastSignStateAbiEncoded: FilePVLastSignState{ + Step: stepNone, + filePath: stateFilePathAbiEncoded, + }, } } // GenFilePV generates a new validator with randomly generated private key // and sets the filePaths, but does not call Save(). -func GenFilePV(keyFilePath, stateFilePath string) *FilePV { - return NewFilePV(ed25519.GenPrivKey(), keyFilePath, stateFilePath) +func GenFilePV(keyFilePath, stateFilePath string, stateFilePathAbiEncoded string) *FilePV { + return NewFilePV(ed25519.GenPrivKey(), keyFilePath, stateFilePath, stateFilePathAbiEncoded) } // LoadFilePV loads a FilePV from the filePaths. The FilePV handles double // signing prevention by persisting data to the stateFilePath. If either file path // does not exist, the program will exit. -func LoadFilePV(keyFilePath, stateFilePath string) *FilePV { - return loadFilePV(keyFilePath, stateFilePath, true) +func LoadFilePV(keyFilePath, stateFilePath string, stateFilePathAbiEncoded string) *FilePV { + return loadFilePV(keyFilePath, stateFilePath, stateFilePathAbiEncoded, true) } // LoadFilePVEmptyState loads a FilePV from the given keyFilePath, with an empty LastSignState. // If the keyFilePath does not exist, the program will exit. -func LoadFilePVEmptyState(keyFilePath, stateFilePath string) *FilePV { - return loadFilePV(keyFilePath, stateFilePath, false) +func LoadFilePVEmptyState(keyFilePath, stateFilePath string, stateFilePathAbiEncoded string) *FilePV { + return loadFilePV(keyFilePath, stateFilePath, stateFilePathAbiEncoded, false) } // If loadState is true, we load from the stateFilePath. Otherwise, we use an empty LastSignState. -func loadFilePV(keyFilePath, stateFilePath string, loadState bool) *FilePV { +func loadFilePV(keyFilePath, stateFilePath string, stateFilePathAbiEncoded string, loadState bool) *FilePV { keyJSONBytes, err := os.ReadFile(keyFilePath) if err != nil { cmtos.Exit(err.Error()) @@ -226,12 +231,12 @@ func loadFilePV(keyFilePath, stateFilePath string, loadState bool) *FilePV { // LoadOrGenFilePV loads a FilePV from the given filePaths // or else generates a new one and saves it to the filePaths. -func LoadOrGenFilePV(keyFilePath, stateFilePath string) *FilePV { +func LoadOrGenFilePV(keyFilePath, stateFilePath string, stateFilePathAbiEncoded string) *FilePV { var pv *FilePV if cmtos.FileExists(keyFilePath) { - pv = LoadFilePV(keyFilePath, stateFilePath) + pv = LoadFilePV(keyFilePath, stateFilePath, stateFilePathAbiEncoded) } else { - pv = GenFilePV(keyFilePath, stateFilePath) + pv = GenFilePV(keyFilePath, stateFilePath, stateFilePathAbiEncoded) pv.Save() } return pv @@ -340,6 +345,48 @@ func (pv *FilePV) signVote(chainID string, vote *cmtproto.Vote) error { return nil } +// signVote checks if the vote is good to sign and sets the vote signature. +// It may need to set the timestamp as well if the vote is otherwise the same as +// a previously signed vote (ie. we crashed after signing but before the vote hit the WAL). +func (pv *FilePV) signVoteAbiEncoded(chainID string, vote *cmtproto.Vote) error { + height, round, step := vote.Height, vote.Round, voteToStep(vote) + + lss := pv.LastSignState + + sameHRS, err := lss.CheckHRS(height, round, step) + if err != nil { + return err + } + + signBytes := types.VoteSignBytesAbiEncoded(chainID, vote) + + // We might crash before writing to the wal, + // causing us to try to re-sign for the same HRS. + // If signbytes are the same, use the last signature. + // If they only differ by timestamp, use last timestamp and signature + // Otherwise, return error + if sameHRS { + if bytes.Equal(signBytes, lss.SignBytes) { + vote.Signature = lss.Signature + } else if timestamp, ok := checkVotesOnlyDifferByTimestamp(lss.SignBytes, signBytes); ok { + vote.Timestamp = timestamp + vote.Signature = lss.Signature + } else { + err = fmt.Errorf("conflicting data") + } + return err + } + + // It passed the checks. Sign the vote + sig, err := pv.Key.PrivKey.Sign(signBytes) + if err != nil { + return err + } + pv.saveSigned(height, round, step, signBytes, sig) + vote.Signature = sig + return nil +} + // signProposal checks if the proposal is good to sign and sets the proposal signature. // It may need to set the timestamp as well if the proposal is otherwise the same as // a previously signed proposal ie. we crashed after signing but before the proposal hit the WAL). diff --git a/privval/file_test.go b/privval/file_test.go index dc09cea26ef..ed5d68e7ca8 100644 --- a/privval/file_test.go +++ b/privval/file_test.go @@ -26,15 +26,17 @@ func TestGenLoadValidator(t *testing.T) { require.Nil(t, err) tempStateFile, err := os.CreateTemp("", "priv_validator_state_") require.Nil(t, err) + tempStateFileAbiEncodedFile, err := os.CreateTemp("", "priv_validator_state_abi_encoded") + require.Nil(t, err) - privVal := GenFilePV(tempKeyFile.Name(), tempStateFile.Name()) + privVal := GenFilePV(tempKeyFile.Name(), tempStateFile.Name(), tempStateFileAbiEncodedFile.Name()) height := int64(100) privVal.LastSignState.Height = height privVal.Save() addr := privVal.GetAddress() - privVal = LoadFilePV(tempKeyFile.Name(), tempStateFile.Name()) + privVal = LoadFilePV(tempKeyFile.Name(), tempStateFile.Name(), tempStateFileAbiEncodedFile.Name()) assert.Equal(addr, privVal.GetAddress(), "expected privval addr to be the same") assert.Equal(height, privVal.LastSignState.Height, "expected privval.LastHeight to have been saved") } @@ -44,8 +46,10 @@ func TestResetValidator(t *testing.T) { require.Nil(t, err) tempStateFile, err := os.CreateTemp("", "priv_validator_state_") require.Nil(t, err) + tempStateFileAbiEncodedFile, err := os.CreateTemp("", "priv_validator_state_abi_encoded") + require.Nil(t, err) - privVal := GenFilePV(tempKeyFile.Name(), tempStateFile.Name()) + privVal := GenFilePV(tempKeyFile.Name(), tempStateFile.Name(), tempStateFileAbiEncodedFile.Name()) emptyState := FilePVLastSignState{filePath: tempStateFile.Name()} // new priv val has empty state @@ -75,6 +79,8 @@ func TestLoadOrGenValidator(t *testing.T) { require.Nil(t, err) tempStateFile, err := os.CreateTemp("", "priv_validator_state_") require.Nil(t, err) + tempStateFileAbiEncodedFile, err := os.CreateTemp("", "priv_validator_state_abi_encoded") + require.Nil(t, err) tempKeyFilePath := tempKeyFile.Name() if err := os.Remove(tempKeyFilePath); err != nil { @@ -84,10 +90,14 @@ func TestLoadOrGenValidator(t *testing.T) { if err := os.Remove(tempStateFilePath); err != nil { t.Error(err) } + tempStateFileAbiEncodedPath := tempStateFileAbiEncodedFile.Name() + if err := os.Remove(tempStateFileAbiEncodedPath); err != nil { + t.Error(err) + } - privVal := LoadOrGenFilePV(tempKeyFilePath, tempStateFilePath) + privVal := LoadOrGenFilePV(tempKeyFilePath, tempStateFilePath, tempStateFileAbiEncodedPath) addr := privVal.GetAddress() - privVal = LoadOrGenFilePV(tempKeyFilePath, tempStateFilePath) + privVal = LoadOrGenFilePV(tempKeyFilePath, tempStateFilePath, tempStateFileAbiEncodedPath) assert.Equal(addr, privVal.GetAddress(), "expected privval addr to be the same") } @@ -162,8 +172,10 @@ func TestSignVote(t *testing.T) { require.Nil(t, err) tempStateFile, err := os.CreateTemp("", "priv_validator_state_") require.Nil(t, err) + tempStateFileAbiEncodedFile, err := os.CreateTemp("", "priv_validator_state_abi_encoded") + require.Nil(t, err) - privVal := GenFilePV(tempKeyFile.Name(), tempStateFile.Name()) + privVal := GenFilePV(tempKeyFile.Name(), tempStateFile.Name(), tempStateFileAbiEncodedFile.Name()) randbytes := cmtrand.Bytes(tmhash.Size) randbytes2 := cmtrand.Bytes(tmhash.Size) @@ -215,8 +227,10 @@ func TestSignProposal(t *testing.T) { require.Nil(t, err) tempStateFile, err := os.CreateTemp("", "priv_validator_state_") require.Nil(t, err) + tempStateFileAbiEncodedFile, err := os.CreateTemp("", "priv_validator_state_abi_encoded") + require.Nil(t, err) - privVal := GenFilePV(tempKeyFile.Name(), tempStateFile.Name()) + privVal := GenFilePV(tempKeyFile.Name(), tempStateFile.Name(), tempStateFileAbiEncodedFile.Name()) randbytes := cmtrand.Bytes(tmhash.Size) randbytes2 := cmtrand.Bytes(tmhash.Size) @@ -263,8 +277,10 @@ func TestDifferByTimestamp(t *testing.T) { require.Nil(t, err) tempStateFile, err := os.CreateTemp("", "priv_validator_state_") require.Nil(t, err) + tempStateFileAbiEncodedFile, err := os.CreateTemp("", "priv_validator_state_abi_encoded") + require.Nil(t, err) - privVal := GenFilePV(tempKeyFile.Name(), tempStateFile.Name()) + privVal := GenFilePV(tempKeyFile.Name(), tempStateFile.Name(), tempStateFileAbiEncodedFile.Name()) randbytes := cmtrand.Bytes(tmhash.Size) block1 := types.BlockID{Hash: randbytes, PartSetHeader: types.PartSetHeader{Total: 5, Hash: randbytes}} height, round := int64(10), int32(1) diff --git a/privval/retry_signer_client.go b/privval/retry_signer_client.go index 271e146474c..d01317a174c 100644 --- a/privval/retry_signer_client.go +++ b/privval/retry_signer_client.go @@ -79,6 +79,22 @@ func (sc *RetrySignerClient) SignVote(chainID string, vote *cmtproto.Vote) error return fmt.Errorf("exhausted all attempts to sign vote: %w", err) } +func (sc *RetrySignerClient) SignVoteAbiEncoded(chainID string, vote []byte) error { + var err error + for i := 0; i < sc.retries || sc.retries == 0; i++ { + err = sc.next.SignVoteAbiEncoded(chainID, vote) + if err == nil { + return nil + } + // If remote signer errors, we don't retry. + if _, ok := err.(*RemoteSignerError); ok { + return err + } + time.Sleep(sc.timeout) + } + return fmt.Errorf("exhausted all attempts to sign vote: %w", err) +} + func (sc *RetrySignerClient) SignProposal(chainID string, proposal *cmtproto.Proposal) error { var err error for i := 0; i < sc.retries || sc.retries == 0; i++ { diff --git a/privval/signer_client.go b/privval/signer_client.go index 8ebb99fc408..c3e262c0dc1 100644 --- a/privval/signer_client.go +++ b/privval/signer_client.go @@ -110,6 +110,12 @@ func (sc *SignerClient) SignVote(chainID string, vote *cmtproto.Vote) error { return nil } +// SignVote requests a remote signer to sign a vote +func (sc *SignerClient) SignVoteAbiEncoded(chainID string, vote []byte) error { + //TODO(blas): implement + return nil +} + // SignProposal requests a remote signer to sign a proposal func (sc *SignerClient) SignProposal(chainID string, proposal *cmtproto.Proposal) error { response, err := sc.endpoint.SendRequest(mustWrapMsg( diff --git a/proto/tendermint/types/types.pb.go b/proto/tendermint/types/types.pb.go index ce6844badb0..f4265d437d1 100644 --- a/proto/tendermint/types/types.pb.go +++ b/proto/tendermint/types/types.pb.go @@ -466,14 +466,15 @@ func (m *Data) GetTxs() [][]byte { // Vote represents a prevote, precommit, or commit vote from validators for // consensus. type Vote struct { - Type SignedMsgType `protobuf:"varint,1,opt,name=type,proto3,enum=tendermint.types.SignedMsgType" json:"type,omitempty"` - Height int64 `protobuf:"varint,2,opt,name=height,proto3" json:"height,omitempty"` - Round int32 `protobuf:"varint,3,opt,name=round,proto3" json:"round,omitempty"` - BlockID BlockID `protobuf:"bytes,4,opt,name=block_id,json=blockId,proto3" json:"block_id"` - Timestamp time.Time `protobuf:"bytes,5,opt,name=timestamp,proto3,stdtime" json:"timestamp"` - ValidatorAddress []byte `protobuf:"bytes,6,opt,name=validator_address,json=validatorAddress,proto3" json:"validator_address,omitempty"` - ValidatorIndex int32 `protobuf:"varint,7,opt,name=validator_index,json=validatorIndex,proto3" json:"validator_index,omitempty"` - Signature []byte `protobuf:"bytes,8,opt,name=signature,proto3" json:"signature,omitempty"` + Type SignedMsgType `protobuf:"varint,1,opt,name=type,proto3,enum=tendermint.types.SignedMsgType" json:"type,omitempty"` + Height int64 `protobuf:"varint,2,opt,name=height,proto3" json:"height,omitempty"` + Round int32 `protobuf:"varint,3,opt,name=round,proto3" json:"round,omitempty"` + BlockID BlockID `protobuf:"bytes,4,opt,name=block_id,json=blockId,proto3" json:"block_id"` + Timestamp time.Time `protobuf:"bytes,5,opt,name=timestamp,proto3,stdtime" json:"timestamp"` + ValidatorAddress []byte `protobuf:"bytes,6,opt,name=validator_address,json=validatorAddress,proto3" json:"validator_address,omitempty"` + ValidatorIndex int32 `protobuf:"varint,7,opt,name=validator_index,json=validatorIndex,proto3" json:"validator_index,omitempty"` + Signature []byte `protobuf:"bytes,8,opt,name=signature,proto3" json:"signature,omitempty"` + SignatureAbiEncoded []byte `protobuf:"bytes,9,opt,name=signature_abi_encoded,json=signatureAbiEncoded,proto3" json:"signature_abi_encoded,omitempty"` } func (m *Vote) Reset() { *m = Vote{} } @@ -565,6 +566,13 @@ func (m *Vote) GetSignature() []byte { return nil } +func (m *Vote) GetSignatureAbiEncoded() []byte { + if m != nil { + return m.SignatureAbiEncoded + } + return nil +} + // Commit contains the evidence that a block was committed by a set of validators. type Commit struct { Height int64 `protobuf:"varint,1,opt,name=height,proto3" json:"height,omitempty"` @@ -1049,90 +1057,91 @@ func init() { func init() { proto.RegisterFile("tendermint/types/types.proto", fileDescriptor_d3a6e55e2345de56) } var fileDescriptor_d3a6e55e2345de56 = []byte{ - // 1316 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x57, 0x4f, 0x6f, 0x1b, 0x45, - 0x14, 0xcf, 0xda, 0x9b, 0xd8, 0x7e, 0xb6, 0x13, 0x67, 0x95, 0xb6, 0xae, 0xdb, 0x38, 0x2b, 0x23, - 0x20, 0x2d, 0x68, 0x53, 0x52, 0x84, 0xe0, 0xc0, 0xc1, 0x76, 0xd2, 0xd6, 0x6a, 0xec, 0x58, 0x6b, - 0xb7, 0x08, 0x2e, 0xab, 0xb5, 0x77, 0x62, 0x2f, 0x5d, 0xef, 0xac, 0x76, 0xc6, 0x21, 0xe9, 0x27, - 0x40, 0x39, 0xf5, 0xc4, 0x2d, 0x27, 0x38, 0x70, 0xe7, 0x0b, 0x20, 0x4e, 0x3d, 0xf6, 0x06, 0x17, - 0x0a, 0x4a, 0x25, 0xc4, 0xc7, 0x40, 0xf3, 0xc7, 0xeb, 0x75, 0x9c, 0x40, 0x55, 0x55, 0x5c, 0xac, - 0x9d, 0xf7, 0x7e, 0x6f, 0xe6, 0xbd, 0xdf, 0xfb, 0xcd, 0x1f, 0xc3, 0x4d, 0x8a, 0x7c, 0x07, 0x85, - 0x23, 0xd7, 0xa7, 0x5b, 0xf4, 0x38, 0x40, 0x44, 0xfc, 0x1a, 0x41, 0x88, 0x29, 0xd6, 0x0a, 0x53, - 0xaf, 0xc1, 0xed, 0xa5, 0xb5, 0x01, 0x1e, 0x60, 0xee, 0xdc, 0x62, 0x5f, 0x02, 0x57, 0xda, 0x18, - 0x60, 0x3c, 0xf0, 0xd0, 0x16, 0x1f, 0xf5, 0xc6, 0x07, 0x5b, 0xd4, 0x1d, 0x21, 0x42, 0xed, 0x51, - 0x20, 0x01, 0xeb, 0xb1, 0x65, 0xfa, 0xe1, 0x71, 0x40, 0x31, 0xc3, 0xe2, 0x03, 0xe9, 0x2e, 0xc7, - 0xdc, 0x87, 0x28, 0x24, 0x2e, 0xf6, 0xe3, 0x79, 0x94, 0xf4, 0xb9, 0x2c, 0x0f, 0x6d, 0xcf, 0x75, - 0x6c, 0x8a, 0x43, 0x81, 0xa8, 0x7c, 0x06, 0xf9, 0xb6, 0x1d, 0xd2, 0x0e, 0xa2, 0x0f, 0x90, 0xed, - 0xa0, 0x50, 0x5b, 0x83, 0x45, 0x8a, 0xa9, 0xed, 0x15, 0x15, 0x5d, 0xd9, 0xcc, 0x9b, 0x62, 0xa0, - 0x69, 0xa0, 0x0e, 0x6d, 0x32, 0x2c, 0x26, 0x74, 0x65, 0x33, 0x67, 0xf2, 0xef, 0xca, 0x10, 0x54, - 0x16, 0xca, 0x22, 0x5c, 0xdf, 0x41, 0x47, 0x93, 0x08, 0x3e, 0x60, 0xd6, 0xde, 0x31, 0x45, 0x44, - 0x86, 0x88, 0x81, 0xf6, 0x31, 0x2c, 0xf2, 0xfc, 0x8b, 0x49, 0x5d, 0xd9, 0xcc, 0x6e, 0x17, 0x8d, - 0x18, 0x51, 0xa2, 0x3e, 0xa3, 0xcd, 0xfc, 0x35, 0xf5, 0xf9, 0xcb, 0x8d, 0x05, 0x53, 0x80, 0x2b, - 0x1e, 0xa4, 0x6a, 0x1e, 0xee, 0x3f, 0x69, 0xec, 0x44, 0x89, 0x28, 0xd3, 0x44, 0xb4, 0x26, 0xac, - 0x04, 0x76, 0x48, 0x2d, 0x82, 0xa8, 0x35, 0xe4, 0x55, 0xf0, 0x45, 0xb3, 0xdb, 0x1b, 0xc6, 0xf9, - 0x3e, 0x18, 0x33, 0xc5, 0xca, 0x55, 0xf2, 0x41, 0xdc, 0x58, 0xf9, 0x4b, 0x85, 0x25, 0x49, 0xc6, - 0xe7, 0x90, 0x92, 0xb4, 0xf2, 0x05, 0xb3, 0xdb, 0xeb, 0xf1, 0x19, 0xa5, 0xcb, 0xa8, 0x63, 0x9f, - 0x20, 0x9f, 0x8c, 0x89, 0x9c, 0x6f, 0x12, 0xa3, 0xbd, 0x07, 0xe9, 0xfe, 0xd0, 0x76, 0x7d, 0xcb, - 0x75, 0x78, 0x46, 0x99, 0x5a, 0xf6, 0xec, 0xe5, 0x46, 0xaa, 0xce, 0x6c, 0x8d, 0x1d, 0x33, 0xc5, - 0x9d, 0x0d, 0x47, 0xbb, 0x0a, 0x4b, 0x43, 0xe4, 0x0e, 0x86, 0x94, 0xd3, 0x92, 0x34, 0xe5, 0x48, - 0xfb, 0x14, 0x54, 0x26, 0x88, 0xa2, 0xca, 0xd7, 0x2e, 0x19, 0x42, 0x2d, 0xc6, 0x44, 0x2d, 0x46, - 0x77, 0xa2, 0x96, 0x5a, 0x9a, 0x2d, 0xfc, 0xec, 0x8f, 0x0d, 0xc5, 0xe4, 0x11, 0x5a, 0x1d, 0xf2, - 0x9e, 0x4d, 0xa8, 0xd5, 0x63, 0xb4, 0xb1, 0xe5, 0x17, 0xf9, 0x14, 0xd7, 0xe7, 0x09, 0x91, 0xc4, - 0xca, 0xd4, 0xb3, 0x2c, 0x4a, 0x98, 0x1c, 0x6d, 0x13, 0x0a, 0x7c, 0x92, 0x3e, 0x1e, 0x8d, 0x5c, - 0x6a, 0x71, 0xde, 0x97, 0x38, 0xef, 0xcb, 0xcc, 0x5e, 0xe7, 0xe6, 0x07, 0xac, 0x03, 0x37, 0x20, - 0xe3, 0xd8, 0xd4, 0x16, 0x90, 0x14, 0x87, 0xa4, 0x99, 0x81, 0x3b, 0xdf, 0x87, 0x95, 0x48, 0x75, - 0x44, 0x40, 0xd2, 0x62, 0x96, 0xa9, 0x99, 0x03, 0xef, 0xc0, 0x9a, 0x8f, 0x8e, 0xa8, 0x75, 0x1e, - 0x9d, 0xe1, 0x68, 0x8d, 0xf9, 0x1e, 0xcf, 0x46, 0xbc, 0x0b, 0xcb, 0xfd, 0x09, 0xf9, 0x02, 0x0b, - 0x1c, 0x9b, 0x8f, 0xac, 0x1c, 0x76, 0x1d, 0xd2, 0x76, 0x10, 0x08, 0x40, 0x96, 0x03, 0x52, 0x76, - 0x10, 0x70, 0xd7, 0x6d, 0x58, 0xe5, 0x35, 0x86, 0x88, 0x8c, 0x3d, 0x2a, 0x27, 0xc9, 0x71, 0xcc, - 0x0a, 0x73, 0x98, 0xc2, 0xce, 0xb1, 0xef, 0x40, 0x1e, 0x1d, 0xba, 0x0e, 0xf2, 0xfb, 0x48, 0xe0, - 0xf2, 0x1c, 0x97, 0x9b, 0x18, 0x39, 0xe8, 0x16, 0x14, 0x82, 0x10, 0x07, 0x98, 0xa0, 0xd0, 0xb2, - 0x1d, 0x27, 0x44, 0x84, 0x14, 0x97, 0xc5, 0x7c, 0x13, 0x7b, 0x55, 0x98, 0x2b, 0x45, 0x50, 0x77, - 0x6c, 0x6a, 0x6b, 0x05, 0x48, 0xd2, 0x23, 0x52, 0x54, 0xf4, 0xe4, 0x66, 0xce, 0x64, 0x9f, 0x95, - 0xbf, 0x13, 0xa0, 0x3e, 0xc6, 0x14, 0x69, 0x77, 0x41, 0x65, 0x6d, 0xe2, 0xea, 0x5b, 0xbe, 0x48, - 0xcf, 0x1d, 0x77, 0xe0, 0x23, 0xa7, 0x49, 0x06, 0xdd, 0xe3, 0x00, 0x99, 0x1c, 0x1c, 0x93, 0x53, - 0x62, 0x46, 0x4e, 0x6b, 0xb0, 0x18, 0xe2, 0xb1, 0xef, 0x70, 0x95, 0x2d, 0x9a, 0x62, 0xa0, 0xed, - 0x42, 0x3a, 0x52, 0x89, 0xfa, 0x5f, 0x2a, 0x59, 0x61, 0x2a, 0x61, 0x1a, 0x96, 0x06, 0x33, 0xd5, - 0x93, 0x62, 0xa9, 0x41, 0x26, 0x3a, 0xbc, 0xa4, 0xda, 0x5e, 0x4f, 0xb0, 0xd3, 0x30, 0xed, 0x03, - 0x58, 0x8d, 0x7a, 0x1f, 0x91, 0x27, 0x14, 0x57, 0x88, 0x1c, 0x92, 0xbd, 0x19, 0x59, 0x59, 0xe2, - 0x00, 0x4a, 0xf1, 0xba, 0xa6, 0xb2, 0x6a, 0xf0, 0x93, 0xe8, 0x26, 0x64, 0x88, 0x3b, 0xf0, 0x6d, - 0x3a, 0x0e, 0x91, 0x54, 0xde, 0xd4, 0x50, 0xf9, 0x59, 0x81, 0x25, 0xa1, 0xe4, 0x18, 0x6f, 0xca, - 0xc5, 0xbc, 0x25, 0x2e, 0xe3, 0x2d, 0xf9, 0xe6, 0xbc, 0x55, 0x01, 0xa2, 0x64, 0x48, 0x51, 0xd5, - 0x93, 0x9b, 0xd9, 0xed, 0x1b, 0xf3, 0x13, 0x89, 0x14, 0x3b, 0xee, 0x40, 0x6e, 0xd4, 0x58, 0x50, - 0xe5, 0x77, 0x05, 0x32, 0x91, 0x5f, 0xab, 0x42, 0x7e, 0x92, 0x97, 0x75, 0xe0, 0xd9, 0x03, 0xa9, - 0x9d, 0xf5, 0x4b, 0x93, 0xbb, 0xe7, 0xd9, 0x03, 0x33, 0x2b, 0xf3, 0x61, 0x83, 0x8b, 0xfb, 0x90, - 0xb8, 0xa4, 0x0f, 0x33, 0x8d, 0x4f, 0xbe, 0x59, 0xe3, 0x67, 0x5a, 0xa4, 0x9e, 0x6f, 0xd1, 0x4f, - 0x09, 0x48, 0xb7, 0xf9, 0xde, 0xb1, 0xbd, 0xff, 0x63, 0x47, 0xdc, 0x80, 0x4c, 0x80, 0x3d, 0x4b, - 0x78, 0x54, 0xee, 0x49, 0x07, 0xd8, 0x33, 0xe7, 0xda, 0xbe, 0xf8, 0x96, 0xb6, 0xcb, 0xd2, 0x5b, - 0x60, 0x2d, 0x75, 0x9e, 0xb5, 0x10, 0x72, 0x82, 0x0a, 0x79, 0x97, 0xdd, 0x61, 0x1c, 0xf0, 0xcb, - 0x51, 0x99, 0xbf, 0x7b, 0x45, 0xda, 0x02, 0x69, 0x4a, 0x1c, 0x8b, 0x10, 0x47, 0xbf, 0xbc, 0x4e, - 0x8b, 0x97, 0xc9, 0xd2, 0x94, 0xb8, 0xca, 0x77, 0x0a, 0xc0, 0x1e, 0x63, 0x96, 0xd7, 0xcb, 0x6e, - 0x21, 0xc2, 0x53, 0xb0, 0x66, 0x56, 0x2e, 0x5f, 0xd6, 0x34, 0xb9, 0x7e, 0x8e, 0xc4, 0xf3, 0xae, - 0x43, 0x7e, 0x2a, 0x46, 0x82, 0x26, 0xc9, 0x5c, 0x30, 0x49, 0x74, 0x39, 0x74, 0x10, 0x35, 0x73, - 0x87, 0xb1, 0x51, 0xe5, 0x17, 0x05, 0x32, 0x3c, 0xa7, 0x26, 0xa2, 0xf6, 0x4c, 0x0f, 0x95, 0x37, - 0xef, 0xe1, 0x3a, 0x80, 0x98, 0x86, 0xb8, 0x4f, 0x91, 0x54, 0x56, 0x86, 0x5b, 0x3a, 0xee, 0x53, - 0xa4, 0x7d, 0x12, 0x11, 0x9e, 0xfc, 0x77, 0xc2, 0xe5, 0x96, 0x9e, 0xd0, 0x7e, 0x0d, 0x52, 0xfe, - 0x78, 0x64, 0xb1, 0x2b, 0x41, 0x15, 0x6a, 0xf5, 0xc7, 0xa3, 0xee, 0x11, 0xa9, 0x7c, 0x0d, 0xa9, - 0xee, 0x11, 0x7f, 0x1e, 0x31, 0x89, 0x86, 0x18, 0xcb, 0x3b, 0x59, 0xbc, 0x85, 0xd2, 0xcc, 0xc0, - 0xaf, 0x20, 0x0d, 0x54, 0x76, 0xf9, 0x4e, 0x1e, 0x6b, 0xec, 0x5b, 0x33, 0x5e, 0xf3, 0xe1, 0x25, - 0x9f, 0x5c, 0xb7, 0x7f, 0x55, 0x20, 0x1b, 0x3b, 0x1f, 0xb4, 0x8f, 0xe0, 0x4a, 0x6d, 0x6f, 0xbf, - 0xfe, 0xd0, 0x6a, 0xec, 0x58, 0xf7, 0xf6, 0xaa, 0xf7, 0xad, 0x47, 0xad, 0x87, 0xad, 0xfd, 0x2f, - 0x5a, 0x85, 0x85, 0xd2, 0xd5, 0x93, 0x53, 0x5d, 0x8b, 0x61, 0x1f, 0xf9, 0x4f, 0x7c, 0xfc, 0x8d, - 0xaf, 0x6d, 0xc1, 0xda, 0x6c, 0x48, 0xb5, 0xd6, 0xd9, 0x6d, 0x75, 0x0b, 0x4a, 0xe9, 0xca, 0xc9, - 0xa9, 0xbe, 0x1a, 0x8b, 0xa8, 0xf6, 0x08, 0xf2, 0xe9, 0x7c, 0x40, 0x7d, 0xbf, 0xd9, 0x6c, 0x74, - 0x0b, 0x89, 0xb9, 0x00, 0x79, 0x60, 0xdf, 0x82, 0xd5, 0xd9, 0x80, 0x56, 0x63, 0xaf, 0x90, 0x2c, - 0x69, 0x27, 0xa7, 0xfa, 0x72, 0x0c, 0xdd, 0x72, 0xbd, 0x52, 0xfa, 0xdb, 0xef, 0xcb, 0x0b, 0x3f, - 0xfe, 0x50, 0x56, 0x58, 0x65, 0xf9, 0x99, 0x33, 0x42, 0xfb, 0x10, 0xae, 0x75, 0x1a, 0xf7, 0x5b, - 0xbb, 0x3b, 0x56, 0xb3, 0x73, 0xdf, 0xea, 0x7e, 0xd9, 0xde, 0x8d, 0x55, 0xb7, 0x72, 0x72, 0xaa, - 0x67, 0x65, 0x49, 0x97, 0xa1, 0xdb, 0xe6, 0xee, 0xe3, 0xfd, 0xee, 0x6e, 0x41, 0x11, 0xe8, 0x76, - 0x88, 0x0e, 0x31, 0x45, 0x1c, 0x7d, 0x07, 0xae, 0x5f, 0x80, 0x8e, 0x0a, 0x5b, 0x3d, 0x39, 0xd5, - 0xf3, 0xed, 0x10, 0x89, 0xfd, 0xc3, 0x23, 0x0c, 0x28, 0xce, 0x47, 0xec, 0xb7, 0xf7, 0x3b, 0xd5, - 0xbd, 0x82, 0x5e, 0x2a, 0x9c, 0x9c, 0xea, 0xb9, 0xc9, 0x61, 0xc8, 0xf0, 0xd3, 0xca, 0x6a, 0xcd, - 0xe7, 0x67, 0x65, 0xe5, 0xc5, 0x59, 0x59, 0xf9, 0xf3, 0xac, 0xac, 0x3c, 0x7b, 0x55, 0x5e, 0x78, - 0xf1, 0xaa, 0xbc, 0xf0, 0xdb, 0xab, 0xf2, 0xc2, 0x57, 0x77, 0x07, 0x2e, 0x1d, 0x8e, 0x7b, 0x46, - 0x1f, 0x8f, 0xb6, 0xfa, 0x78, 0x84, 0x68, 0xef, 0x80, 0x4e, 0x3f, 0xc4, 0xdf, 0x92, 0xf3, 0x7f, - 0x15, 0x7a, 0x4b, 0xdc, 0x7e, 0xf7, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x9c, 0x41, 0x46, 0x23, - 0xeb, 0x0c, 0x00, 0x00, + // 1342 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x57, 0xcf, 0x6e, 0xdb, 0xc6, + 0x13, 0x36, 0x2d, 0xda, 0x92, 0x46, 0x92, 0x2d, 0xef, 0xcf, 0x49, 0x14, 0x25, 0x96, 0x09, 0xfd, + 0xd0, 0xd6, 0x49, 0x0b, 0x3a, 0x75, 0x8a, 0xa2, 0x3d, 0xf4, 0x20, 0xc9, 0x4a, 0x22, 0xc4, 0x92, + 0x05, 0x4a, 0x49, 0xd1, 0x5e, 0x08, 0x4a, 0x5c, 0x4b, 0x6c, 0x28, 0x2e, 0x41, 0xae, 0x5c, 0x3b, + 0x4f, 0x50, 0xf8, 0x94, 0x53, 0x4f, 0xf5, 0xa9, 0x3d, 0xf4, 0xde, 0x17, 0x28, 0x7a, 0xca, 0x31, + 0xb7, 0xf6, 0xd2, 0xb4, 0x70, 0x80, 0x3e, 0x47, 0xb1, 0x7f, 0x44, 0x51, 0x96, 0xdd, 0x06, 0x41, + 0xd0, 0x8b, 0xc0, 0x9d, 0xf9, 0x66, 0x77, 0xe6, 0x9b, 0x8f, 0x3b, 0x14, 0xdc, 0xa4, 0xd8, 0xb3, + 0x71, 0x30, 0x72, 0x3c, 0xba, 0x4d, 0x8f, 0x7d, 0x1c, 0x8a, 0x5f, 0xdd, 0x0f, 0x08, 0x25, 0x28, + 0x3f, 0xf5, 0xea, 0xdc, 0x5e, 0x5c, 0x1f, 0x90, 0x01, 0xe1, 0xce, 0x6d, 0xf6, 0x24, 0x70, 0xc5, + 0xcd, 0x01, 0x21, 0x03, 0x17, 0x6f, 0xf3, 0x55, 0x6f, 0x7c, 0xb0, 0x4d, 0x9d, 0x11, 0x0e, 0xa9, + 0x35, 0xf2, 0x25, 0x60, 0x23, 0x76, 0x4c, 0x3f, 0x38, 0xf6, 0x29, 0x61, 0x58, 0x72, 0x20, 0xdd, + 0xa5, 0x98, 0xfb, 0x10, 0x07, 0xa1, 0x43, 0xbc, 0x78, 0x1e, 0x45, 0x6d, 0x2e, 0xcb, 0x43, 0xcb, + 0x75, 0x6c, 0x8b, 0x92, 0x40, 0x20, 0xca, 0x9f, 0x42, 0xae, 0x6d, 0x05, 0xb4, 0x83, 0xe9, 0x03, + 0x6c, 0xd9, 0x38, 0x40, 0xeb, 0xb0, 0x44, 0x09, 0xb5, 0xdc, 0x82, 0xa2, 0x29, 0x5b, 0x39, 0x43, + 0x2c, 0x10, 0x02, 0x75, 0x68, 0x85, 0xc3, 0xc2, 0xa2, 0xa6, 0x6c, 0x65, 0x0d, 0xfe, 0x5c, 0x1e, + 0x82, 0xca, 0x42, 0x59, 0x84, 0xe3, 0xd9, 0xf8, 0x68, 0x12, 0xc1, 0x17, 0xcc, 0xda, 0x3b, 0xa6, + 0x38, 0x94, 0x21, 0x62, 0x81, 0x3e, 0x82, 0x25, 0x9e, 0x7f, 0x21, 0xa1, 0x29, 0x5b, 0x99, 0x9d, + 0x82, 0x1e, 0x23, 0x4a, 0xd4, 0xa7, 0xb7, 0x99, 0xbf, 0xaa, 0x3e, 0x7f, 0xb9, 0xb9, 0x60, 0x08, + 0x70, 0xd9, 0x85, 0x64, 0xd5, 0x25, 0xfd, 0x27, 0x8d, 0xdd, 0x28, 0x11, 0x65, 0x9a, 0x08, 0x6a, + 0xc2, 0xaa, 0x6f, 0x05, 0xd4, 0x0c, 0x31, 0x35, 0x87, 0xbc, 0x0a, 0x7e, 0x68, 0x66, 0x67, 0x53, + 0x3f, 0xdf, 0x07, 0x7d, 0xa6, 0x58, 0x79, 0x4a, 0xce, 0x8f, 0x1b, 0xcb, 0x7f, 0xa9, 0xb0, 0x2c, + 0xc9, 0xf8, 0x0c, 0x92, 0x92, 0x56, 0x7e, 0x60, 0x66, 0x67, 0x23, 0xbe, 0xa3, 0x74, 0xe9, 0x35, + 0xe2, 0x85, 0xd8, 0x0b, 0xc7, 0xa1, 0xdc, 0x6f, 0x12, 0x83, 0xde, 0x85, 0x54, 0x7f, 0x68, 0x39, + 0x9e, 0xe9, 0xd8, 0x3c, 0xa3, 0x74, 0x35, 0x73, 0xf6, 0x72, 0x33, 0x59, 0x63, 0xb6, 0xc6, 0xae, + 0x91, 0xe4, 0xce, 0x86, 0x8d, 0xae, 0xc2, 0xf2, 0x10, 0x3b, 0x83, 0x21, 0xe5, 0xb4, 0x24, 0x0c, + 0xb9, 0x42, 0x9f, 0x80, 0xca, 0x04, 0x51, 0x50, 0xf9, 0xd9, 0x45, 0x5d, 0xa8, 0x45, 0x9f, 0xa8, + 0x45, 0xef, 0x4e, 0xd4, 0x52, 0x4d, 0xb1, 0x83, 0x9f, 0xfd, 0xb1, 0xa9, 0x18, 0x3c, 0x02, 0xd5, + 0x20, 0xe7, 0x5a, 0x21, 0x35, 0x7b, 0x8c, 0x36, 0x76, 0xfc, 0x12, 0xdf, 0xe2, 0xfa, 0x3c, 0x21, + 0x92, 0x58, 0x99, 0x7a, 0x86, 0x45, 0x09, 0x93, 0x8d, 0xb6, 0x20, 0xcf, 0x37, 0xe9, 0x93, 0xd1, + 0xc8, 0xa1, 0x26, 0xe7, 0x7d, 0x99, 0xf3, 0xbe, 0xc2, 0xec, 0x35, 0x6e, 0x7e, 0xc0, 0x3a, 0x70, + 0x03, 0xd2, 0xb6, 0x45, 0x2d, 0x01, 0x49, 0x72, 0x48, 0x8a, 0x19, 0xb8, 0xf3, 0x3d, 0x58, 0x8d, + 0x54, 0x17, 0x0a, 0x48, 0x4a, 0xec, 0x32, 0x35, 0x73, 0xe0, 0x1d, 0x58, 0xf7, 0xf0, 0x11, 0x35, + 0xcf, 0xa3, 0xd3, 0x1c, 0x8d, 0x98, 0xef, 0xf1, 0x6c, 0xc4, 0x3b, 0xb0, 0xd2, 0x9f, 0x90, 0x2f, + 0xb0, 0xc0, 0xb1, 0xb9, 0xc8, 0xca, 0x61, 0xd7, 0x21, 0x65, 0xf9, 0xbe, 0x00, 0x64, 0x38, 0x20, + 0x69, 0xf9, 0x3e, 0x77, 0xdd, 0x86, 0x35, 0x5e, 0x63, 0x80, 0xc3, 0xb1, 0x4b, 0xe5, 0x26, 0x59, + 0x8e, 0x59, 0x65, 0x0e, 0x43, 0xd8, 0x39, 0xf6, 0xff, 0x90, 0xc3, 0x87, 0x8e, 0x8d, 0xbd, 0x3e, + 0x16, 0xb8, 0x1c, 0xc7, 0x65, 0x27, 0x46, 0x0e, 0xba, 0x05, 0x79, 0x3f, 0x20, 0x3e, 0x09, 0x71, + 0x60, 0x5a, 0xb6, 0x1d, 0xe0, 0x30, 0x2c, 0xac, 0x88, 0xfd, 0x26, 0xf6, 0x8a, 0x30, 0x97, 0x0b, + 0xa0, 0xee, 0x5a, 0xd4, 0x42, 0x79, 0x48, 0xd0, 0xa3, 0xb0, 0xa0, 0x68, 0x89, 0xad, 0xac, 0xc1, + 0x1e, 0xcb, 0xdf, 0x25, 0x40, 0x7d, 0x4c, 0x28, 0x46, 0x77, 0x41, 0x65, 0x6d, 0xe2, 0xea, 0x5b, + 0xb9, 0x48, 0xcf, 0x1d, 0x67, 0xe0, 0x61, 0xbb, 0x19, 0x0e, 0xba, 0xc7, 0x3e, 0x36, 0x38, 0x38, + 0x26, 0xa7, 0xc5, 0x19, 0x39, 0xad, 0xc3, 0x52, 0x40, 0xc6, 0x9e, 0xcd, 0x55, 0xb6, 0x64, 0x88, + 0x05, 0xaa, 0x43, 0x2a, 0x52, 0x89, 0xfa, 0x6f, 0x2a, 0x59, 0x65, 0x2a, 0x61, 0x1a, 0x96, 0x06, + 0x23, 0xd9, 0x93, 0x62, 0xa9, 0x42, 0x3a, 0xba, 0xbc, 0xa4, 0xda, 0x5e, 0x4f, 0xb0, 0xd3, 0x30, + 0xf4, 0x3e, 0xac, 0x45, 0xbd, 0x8f, 0xc8, 0x13, 0x8a, 0xcb, 0x47, 0x0e, 0xc9, 0xde, 0x8c, 0xac, + 0x4c, 0x71, 0x01, 0x25, 0x79, 0x5d, 0x53, 0x59, 0x35, 0xf8, 0x4d, 0x74, 0x13, 0xd2, 0xa1, 0x33, + 0xf0, 0x2c, 0x3a, 0x0e, 0xb0, 0x54, 0xde, 0xd4, 0x80, 0x76, 0xe0, 0x4a, 0xb4, 0x30, 0xad, 0x9e, + 0x63, 0x62, 0xaf, 0x4f, 0x6c, 0x6c, 0x4b, 0xd5, 0xfd, 0x2f, 0x72, 0x56, 0x7a, 0x4e, 0x5d, 0xb8, + 0xca, 0x3f, 0x2b, 0xb0, 0x2c, 0xd4, 0x1f, 0xe3, 0x5a, 0xb9, 0x98, 0xeb, 0xc5, 0xcb, 0xb8, 0x4e, + 0xbc, 0x39, 0xd7, 0x15, 0x80, 0x28, 0xad, 0xb0, 0xa0, 0x6a, 0x89, 0xad, 0xcc, 0xce, 0x8d, 0xf9, + 0x8d, 0x44, 0x8a, 0x1d, 0x67, 0x20, 0x5f, 0xee, 0x58, 0x50, 0xf9, 0x77, 0x05, 0xd2, 0x91, 0x1f, + 0x55, 0x20, 0x37, 0xc9, 0xcb, 0x3c, 0x70, 0xad, 0x81, 0xd4, 0xdb, 0xc6, 0xa5, 0xc9, 0xdd, 0x73, + 0xad, 0x81, 0x91, 0x91, 0xf9, 0xb0, 0xc5, 0xc5, 0xbd, 0x5b, 0xbc, 0xa4, 0x77, 0x33, 0x62, 0x49, + 0xbc, 0x99, 0x58, 0x66, 0xda, 0xaa, 0x9e, 0x6b, 0x6b, 0xf9, 0xa7, 0x45, 0x48, 0xb5, 0xf9, 0xfb, + 0x66, 0xb9, 0xff, 0xc5, 0x5b, 0x74, 0x03, 0xd2, 0x3e, 0x71, 0x4d, 0xe1, 0x51, 0xb9, 0x27, 0xe5, + 0x13, 0xd7, 0x98, 0x6b, 0xfb, 0xd2, 0x5b, 0x7a, 0xc5, 0x96, 0xdf, 0x02, 0x6b, 0xc9, 0xf3, 0xac, + 0x05, 0x90, 0x15, 0x54, 0xc8, 0xf9, 0x77, 0x87, 0x71, 0xc0, 0x07, 0xaa, 0x32, 0x3f, 0xaf, 0x45, + 0xda, 0x02, 0x69, 0x48, 0x1c, 0x8b, 0x10, 0xe3, 0x42, 0x8e, 0xe0, 0xc2, 0x65, 0xb2, 0x34, 0x24, + 0xae, 0xfc, 0xad, 0x02, 0xb0, 0xc7, 0x98, 0xe5, 0xf5, 0xb2, 0xc9, 0x15, 0xf2, 0x14, 0xcc, 0x99, + 0x93, 0x4b, 0x97, 0x35, 0x4d, 0x9e, 0x9f, 0x0d, 0xe3, 0x79, 0xd7, 0x20, 0x37, 0x15, 0x63, 0x88, + 0x27, 0xc9, 0x5c, 0xb0, 0x49, 0x34, 0x50, 0x3a, 0x98, 0x1a, 0xd9, 0xc3, 0xd8, 0xaa, 0xfc, 0x8b, + 0x02, 0x69, 0x9e, 0x53, 0x13, 0x53, 0x6b, 0xa6, 0x87, 0xca, 0x9b, 0xf7, 0x70, 0x03, 0x40, 0x6c, + 0x13, 0x3a, 0x4f, 0xb1, 0x54, 0x56, 0x9a, 0x5b, 0x3a, 0xce, 0x53, 0x8c, 0x3e, 0x8e, 0x08, 0x4f, + 0xfc, 0x33, 0xe1, 0xf2, 0x95, 0x9e, 0xd0, 0x7e, 0x0d, 0x92, 0xde, 0x78, 0x64, 0xb2, 0x31, 0xa2, + 0x0a, 0xb5, 0x7a, 0xe3, 0x51, 0xf7, 0x28, 0x2c, 0x7f, 0x05, 0xc9, 0xee, 0x11, 0xff, 0xa4, 0x62, + 0x12, 0x0d, 0x08, 0x91, 0x73, 0x5c, 0x7c, 0x3f, 0xa5, 0x98, 0x81, 0x8f, 0x2d, 0x04, 0x2a, 0x1b, + 0xd8, 0x93, 0x0f, 0x3c, 0xf6, 0x8c, 0xf4, 0xd7, 0xfc, 0x58, 0x93, 0x9f, 0x69, 0xb7, 0x7f, 0x55, + 0x20, 0x13, 0xbb, 0x1f, 0xd0, 0x87, 0x70, 0xa5, 0xba, 0xb7, 0x5f, 0x7b, 0x68, 0x36, 0x76, 0xcd, + 0x7b, 0x7b, 0x95, 0xfb, 0xe6, 0xa3, 0xd6, 0xc3, 0xd6, 0xfe, 0xe7, 0xad, 0xfc, 0x42, 0xf1, 0xea, + 0xc9, 0xa9, 0x86, 0x62, 0xd8, 0x47, 0xde, 0x13, 0x8f, 0x7c, 0xed, 0xa1, 0x6d, 0x58, 0x9f, 0x0d, + 0xa9, 0x54, 0x3b, 0xf5, 0x56, 0x37, 0xaf, 0x14, 0xaf, 0x9c, 0x9c, 0x6a, 0x6b, 0xb1, 0x88, 0x4a, + 0x2f, 0xc4, 0x1e, 0x9d, 0x0f, 0xa8, 0xed, 0x37, 0x9b, 0x8d, 0x6e, 0x7e, 0x71, 0x2e, 0x40, 0x5e, + 0xd8, 0xb7, 0x60, 0x6d, 0x36, 0xa0, 0xd5, 0xd8, 0xcb, 0x27, 0x8a, 0xe8, 0xe4, 0x54, 0x5b, 0x89, + 0xa1, 0x5b, 0x8e, 0x5b, 0x4c, 0x7d, 0xf3, 0x7d, 0x69, 0xe1, 0xc7, 0x1f, 0x4a, 0x0a, 0xab, 0x2c, + 0x37, 0x73, 0x47, 0xa0, 0x0f, 0xe0, 0x5a, 0xa7, 0x71, 0xbf, 0x55, 0xdf, 0x35, 0x9b, 0x9d, 0xfb, + 0x66, 0xf7, 0x8b, 0x76, 0x3d, 0x56, 0xdd, 0xea, 0xc9, 0xa9, 0x96, 0x91, 0x25, 0x5d, 0x86, 0x6e, + 0x1b, 0xf5, 0xc7, 0xfb, 0xdd, 0x7a, 0x5e, 0x11, 0xe8, 0x76, 0x80, 0x0f, 0x09, 0xc5, 0x1c, 0x7d, + 0x07, 0xae, 0x5f, 0x80, 0x8e, 0x0a, 0x5b, 0x3b, 0x39, 0xd5, 0x72, 0xed, 0x00, 0x8b, 0xf7, 0x87, + 0x47, 0xe8, 0x50, 0x98, 0x8f, 0xd8, 0x6f, 0xef, 0x77, 0x2a, 0x7b, 0x79, 0xad, 0x98, 0x3f, 0x39, + 0xd5, 0xb2, 0x93, 0xcb, 0x90, 0xe1, 0xa7, 0x95, 0x55, 0x9b, 0xcf, 0xcf, 0x4a, 0xca, 0x8b, 0xb3, + 0x92, 0xf2, 0xe7, 0x59, 0x49, 0x79, 0xf6, 0xaa, 0xb4, 0xf0, 0xe2, 0x55, 0x69, 0xe1, 0xb7, 0x57, + 0xa5, 0x85, 0x2f, 0xef, 0x0e, 0x1c, 0x3a, 0x1c, 0xf7, 0xf4, 0x3e, 0x19, 0x6d, 0xf7, 0xc9, 0x08, + 0xd3, 0xde, 0x01, 0x9d, 0x3e, 0x88, 0xbf, 0x32, 0xe7, 0xff, 0x5e, 0xf4, 0x96, 0xb9, 0xfd, 0xee, + 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x46, 0xcd, 0xcd, 0xc9, 0x1f, 0x0d, 0x00, 0x00, } func (m *PartSetHeader) Marshal() (dAtA []byte, err error) { @@ -1433,6 +1442,13 @@ func (m *Vote) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.SignatureAbiEncoded) > 0 { + i -= len(m.SignatureAbiEncoded) + copy(dAtA[i:], m.SignatureAbiEncoded) + i = encodeVarintTypes(dAtA, i, uint64(len(m.SignatureAbiEncoded))) + i-- + dAtA[i] = 0x4a + } if len(m.Signature) > 0 { i -= len(m.Signature) copy(dAtA[i:], m.Signature) @@ -2022,6 +2038,10 @@ func (m *Vote) Size() (n int) { if l > 0 { n += 1 + l + sovTypes(uint64(l)) } + l = len(m.SignatureAbiEncoded) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } return n } @@ -3362,6 +3382,40 @@ func (m *Vote) Unmarshal(dAtA []byte) error { m.Signature = []byte{} } iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SignatureAbiEncoded", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SignatureAbiEncoded = append(m.SignatureAbiEncoded[:0], dAtA[iNdEx:postIndex]...) + if m.SignatureAbiEncoded == nil { + m.SignatureAbiEncoded = []byte{} + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTypes(dAtA[iNdEx:]) diff --git a/proto/tendermint/types/types.proto b/proto/tendermint/types/types.proto index 425f041dab2..6ec333ebf15 100644 --- a/proto/tendermint/types/types.proto +++ b/proto/tendermint/types/types.proto @@ -102,6 +102,7 @@ message Vote { bytes validator_address = 6; int32 validator_index = 7; bytes signature = 8; + bytes signature_abi_encoded = 9; } // Commit contains the evidence that a block was committed by a set of validators. diff --git a/types/priv_validator.go b/types/priv_validator.go index e4740c36c15..df6d67e9f1f 100644 --- a/types/priv_validator.go +++ b/types/priv_validator.go @@ -16,6 +16,7 @@ type PrivValidator interface { GetPubKey() (crypto.PubKey, error) SignVote(chainID string, vote *cmtproto.Vote) error + SignVoteAbiEncoded(chainID string, vote []byte) error SignProposal(chainID string, proposal *cmtproto.Proposal) error } @@ -85,6 +86,20 @@ func (pv MockPV) SignVote(chainID string, vote *cmtproto.Vote) error { return nil } +func (pv *ErroringMockPV) SignVoteAbiEncoded(chainID string, []byte) error { + useChainID := chainID + if pv.breakVoteSigning { + useChainID = "incorrect-chain-id" + } + + signBytes := VoteSignBytesAbiEncoded(useChainID, vote) + sig, err := pv.PrivKey.Sign(signBytes) + if err != nil { + return err + } + return nil +} + // Implements PrivValidator. func (pv MockPV) SignProposal(chainID string, proposal *cmtproto.Proposal) error { useChainID := chainID @@ -133,6 +148,11 @@ func (pv *ErroringMockPV) SignVote(chainID string, vote *cmtproto.Vote) error { return ErroringMockPVErr } +// Implements PrivValidator. +func (pv *ErroringMockPV) SignVoteAbiEncoded(chainID string, vote []byte) error { + return ErroringMockPVErr +} + // Implements PrivValidator. func (pv *ErroringMockPV) SignProposal(chainID string, proposal *cmtproto.Proposal) error { return ErroringMockPVErr diff --git a/types/vote.go b/types/vote.go index 1b27fe63ff7..3448de0bfe1 100644 --- a/types/vote.go +++ b/types/vote.go @@ -100,6 +100,19 @@ func VoteSignBytes(chainID string, vote *cmtproto.Vote) []byte { return bz } +// VoteSignBytesAbiEncoded returns the Ethereum abi-encoding of the canonicalized Vote, for +// signing. Panics is the marshaling fails. +// +// The encoded Protobuf message is varint length-prefixed (using MarshalDelimited) +// for backwards-compatibility with the Amino encoding, due to e.g. hardware +// devices that rely on this encoding. +// +// See CanonicalizeVote +func VoteSignBytesAbiEncoded(chainID string, vote []byte) []byte { + // TODO + return nil +} + func (vote *Vote) Copy() *Vote { voteCopy := *vote return &voteCopy