diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 70ff467c10..31f130e3c9 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -18,10 +18,8 @@ updates: directory: "/" schedule: interval: weekly - target-branch: "master" open-pull-requests-limit: 10 reviewers: - - shumkov - lklimek labels: - dependencies diff --git a/.github/workflows/proto-lint.yml b/.github/workflows/proto-lint.yml index aefeac122e..cfa456a217 100644 --- a/.github/workflows/proto-lint.yml +++ b/.github/workflows/proto-lint.yml @@ -14,7 +14,7 @@ jobs: timeout-minutes: 5 steps: - uses: actions/checkout@v4 - - uses: bufbuild/buf-setup-action@v1.33.0 + - uses: bufbuild/buf-setup-action@v1.35.0 - uses: bufbuild/buf-lint-action@v1 with: input: "proto" diff --git a/CHANGELOG.md b/CHANGELOG.md index 7643efbe99..0ea5cbf799 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,28 @@ -## [1.0.0] - 2024-06-26 +## [1.1.0] - 2024-07-29 + +### Bug Fixes + +- Address already in use (#845) +- Active validators not always connected to each other (#844) +- Validators form islands on genesis (#850) + +### Features + +- [**breaking**] Replace dash core quorum sign with quorum platformsign (#828) +- Allow overriding genesis time in InitChain (#847) + +### Miscellaneous Tasks + +- Update changelog and version to 1.1.0-dev.1 (#842) +- Update changelog and version to 1.1.0-dev.2 (#846) +- Update changelog and version to 1.1.0-dev.3 (#848) + +### Build + +- Bump bufbuild/buf-setup-action from 1.33.0 to 1.35.0 (#841) +- Run dependabot on default branch, not master (#843) + +## [1.0.0] - 2024-07-01 ### Bug Fixes @@ -43,6 +67,7 @@ - Detect quorum hash mismatch when verifying commit (#791) - Update changelog and version to 0.14.0-dev.8 (#792) - Update changelog and version to 1.0.0-dev.2 (#806) +- Update changelog and version to 1.0.0 ### Refactor @@ -94,6 +119,7 @@ - Bump docker/build-push-action from 5.4.0 to 6.0.0 (#801) - Bump bufbuild/buf-setup-action from 1.32.2 to 1.33.0 (#800) - Bump goreleaser/goreleaser-action from 5 to 6 (#798) +- Bump github.com/stretchr/testify from 1.8.2 to 1.9.0 (#817) ## [0.13.4] - 2023-12-11 diff --git a/DOCKER/Dockerfile b/DOCKER/Dockerfile index 75ea89ad6e..6092fa6007 100644 --- a/DOCKER/Dockerfile +++ b/DOCKER/Dockerfile @@ -64,7 +64,7 @@ LABEL maintainer="developers@dash.org" # private validator file into /tenderdash/config. # # The /tenderdash/data dir is used by tenderdash to store state. -ENV TMHOME /tenderdash +ENV TMHOME=/tenderdash # OS environment setup # Set user right away for determinism, create directory for persistence and give our user ownership diff --git a/DOCKER/docker-entrypoint.sh b/DOCKER/docker-entrypoint.sh index ba612ff8f2..acec503887 100755 --- a/DOCKER/docker-entrypoint.sh +++ b/DOCKER/docker-entrypoint.sh @@ -1,5 +1,30 @@ #!/bin/bash -set -e + + +# TODO: Workaround for busy port problem happening with docker restart policy +# we are trying to start a new container but previous process still not release +# the port. + +# As a workaround we are sleeping for 10 seconds after the tenderdash process +# exits with non-zero exit code. +# +# Must be fix with graceful shutdown of tenderdash process. + +got_signal=false + +# Function to handle signals and forward them to the tenderdash process +# shellcheck disable=SC2317 +_forward_signal() { + echo "Caught signal! Forwarding to tenderdash process." + got_signal=true + kill -s "$1" "$child" +} + +# Trap signals and forward them to the tenderdash process +trap '_forward_signal TERM' SIGTERM +trap '_forward_signal INT' SIGINT +trap '_forward_signal HUP' SIGHUP +trap '_forward_signal QUIT' SIGQUIT if [ ! -d "$TMHOME/config" ]; then echo "Running tenderdash init to create a single node (default) configuration for docker run." @@ -26,4 +51,15 @@ if [ ! -d "$TMHOME/config" ]; then mv "$TMHOME/config/genesis.json.new" "$TMHOME/config/genesis.json" fi -exec tenderdash "$@" +# Start tenderdash in the background +tenderdash "$@" & +child=$! +wait "$child" +exit_code=$? + +if [ $got_signal == false ] && [ $exit_code -ne 0 ] && [ "$1" == "start" ]; then + echo "Sleeping for 10 seconds as workaround for the busy port problem. See entrypoint code for details." + sleep 10 +fi + +exit $exit_code diff --git a/abci/types/types.pb.go b/abci/types/types.pb.go index 7513d79ee8..f60329ec91 100644 --- a/abci/types/types.pb.go +++ b/abci/types/types.pb.go @@ -2416,6 +2416,10 @@ type ResponseInitChain struct { NextCoreChainLockUpdate *types1.CoreChainLock `protobuf:"bytes,4,opt,name=next_core_chain_lock_update,json=nextCoreChainLockUpdate,proto3" json:"next_core_chain_lock_update,omitempty"` // Initial height of core lock. InitialCoreHeight uint32 `protobuf:"varint,5,opt,name=initial_core_height,json=initialCoreHeight,proto3" json:"initial_core_height,omitempty"` + // Types that are valid to be assigned to XGenesisTime: + // + // *ResponseInitChain_GenesisTime + XGenesisTime isResponseInitChain_XGenesisTime `protobuf_oneof:"_genesis_time"` } func (m *ResponseInitChain) Reset() { *m = ResponseInitChain{} } @@ -2451,6 +2455,25 @@ func (m *ResponseInitChain) XXX_DiscardUnknown() { var xxx_messageInfo_ResponseInitChain proto.InternalMessageInfo +type isResponseInitChain_XGenesisTime interface { + isResponseInitChain_XGenesisTime() + MarshalTo([]byte) (int, error) + Size() int +} + +type ResponseInitChain_GenesisTime struct { + GenesisTime *time.Time `protobuf:"bytes,6,opt,name=genesis_time,json=genesisTime,proto3,oneof,stdtime" json:"genesis_time,omitempty"` +} + +func (*ResponseInitChain_GenesisTime) isResponseInitChain_XGenesisTime() {} + +func (m *ResponseInitChain) GetXGenesisTime() isResponseInitChain_XGenesisTime { + if m != nil { + return m.XGenesisTime + } + return nil +} + func (m *ResponseInitChain) GetConsensusParams() *types1.ConsensusParams { if m != nil { return m.ConsensusParams @@ -2486,6 +2509,20 @@ func (m *ResponseInitChain) GetInitialCoreHeight() uint32 { return 0 } +func (m *ResponseInitChain) GetGenesisTime() *time.Time { + if x, ok := m.GetXGenesisTime().(*ResponseInitChain_GenesisTime); ok { + return x.GenesisTime + } + return nil +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*ResponseInitChain) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*ResponseInitChain_GenesisTime)(nil), + } +} + type ResponseQuery struct { Code uint32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` Log string `protobuf:"bytes,2,opt,name=log,proto3" json:"log,omitempty"` @@ -4335,238 +4372,239 @@ func init() { func init() { proto.RegisterFile("tendermint/abci/types.proto", fileDescriptor_252557cfdd89a31a) } var fileDescriptor_252557cfdd89a31a = []byte{ - // 3682 bytes of a gzipped FileDescriptorProto + // 3712 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x5b, 0xcb, 0x73, 0x1b, 0x47, 0x73, 0xc7, 0xe2, 0x8d, 0xc6, 0x6b, 0x39, 0xa4, 0x24, 0x08, 0x92, 0x48, 0x7a, 0x15, 0x5b, 0xb2, 0x6c, 0x93, 0xb6, 0x14, 0x5b, 0x76, 0xec, 0xa4, 0x0a, 0x04, 0xa1, 0x80, 0x14, 0x45, 0xd2, 0x4b, 0x90, 0x2e, 0xc7, 0xb1, 0xb7, 0x96, 0xc0, 0x90, 0x58, 0x0b, 0xc0, 0xae, 0x77, 0x17, 0x14, 0xe8, - 0x6b, 0xe2, 0xaa, 0x94, 0x4f, 0xfe, 0x07, 0x7c, 0x4b, 0x8e, 0xb9, 0xe7, 0x94, 0x54, 0x6e, 0x4e, - 0xe5, 0xe2, 0x63, 0xaa, 0x52, 0x51, 0x5c, 0xf2, 0x25, 0x95, 0x9b, 0x4f, 0xdf, 0xe5, 0x3b, 0x7c, - 0x35, 0x8f, 0x7d, 0x02, 0x8b, 0x87, 0xe5, 0xaa, 0xaf, 0xbe, 0x1b, 0xa6, 0xa7, 0xbb, 0x77, 0x1e, - 0x3d, 0xdd, 0x3d, 0xbf, 0x1e, 0xc0, 0x0d, 0x1b, 0x0f, 0x3a, 0xd8, 0xec, 0x6b, 0x03, 0x7b, 0x53, - 0x3d, 0x6d, 0x6b, 0x9b, 0xf6, 0xa5, 0x81, 0xad, 0x0d, 0xc3, 0xd4, 0x6d, 0x1d, 0x95, 0xbd, 0xce, - 0x0d, 0xd2, 0x59, 0xbd, 0xe5, 0xe3, 0x6e, 0x9b, 0x97, 0x86, 0xad, 0x6f, 0x1a, 0xa6, 0xae, 0x9f, - 0x31, 0xfe, 0xaa, 0x5f, 0x19, 0xd5, 0xb3, 0xd9, 0x51, 0xad, 0x2e, 0xef, 0xbc, 0x39, 0xd6, 0x79, - 0xda, 0xd3, 0xdb, 0x4f, 0x23, 0x7b, 0x7d, 0x03, 0x09, 0xf4, 0xf2, 0xef, 0x3e, 0xc5, 0x97, 0x4e, - 0xef, 0xad, 0x31, 0x59, 0x43, 0x35, 0xd5, 0xbe, 0xd3, 0xbd, 0xea, 0xeb, 0xbe, 0xc0, 0xa6, 0xa5, - 0xe9, 0x83, 0x80, 0xf2, 0xb5, 0x73, 0x5d, 0x3f, 0xef, 0xe1, 0x4d, 0xda, 0x3a, 0x1d, 0x9e, 0x6d, - 0xda, 0x5a, 0x1f, 0x5b, 0xb6, 0xda, 0x37, 0x38, 0xc3, 0xca, 0xb9, 0x7e, 0xae, 0xd3, 0x9f, 0x9b, - 0xe4, 0x17, 0xa3, 0x4a, 0xdf, 0xe4, 0x20, 0x23, 0xe3, 0xaf, 0x86, 0xd8, 0xb2, 0xd1, 0x7d, 0x48, - 0xe2, 0x76, 0x57, 0xaf, 0x08, 0xeb, 0xc2, 0xdd, 0xfc, 0xfd, 0x9b, 0x1b, 0xa1, 0x75, 0xdb, 0xe0, - 0x7c, 0x8d, 0x76, 0x57, 0x6f, 0xc6, 0x64, 0xca, 0x8b, 0xde, 0x85, 0xd4, 0x59, 0x6f, 0x68, 0x75, - 0x2b, 0x71, 0x2a, 0x74, 0x2b, 0x4a, 0xe8, 0x11, 0x61, 0x6a, 0xc6, 0x64, 0xc6, 0x4d, 0x3e, 0xa5, - 0x0d, 0xce, 0xf4, 0x4a, 0x62, 0xfa, 0xa7, 0x76, 0x06, 0x67, 0xf4, 0x53, 0x84, 0x17, 0x6d, 0x01, - 0x68, 0x03, 0xcd, 0x56, 0xda, 0x5d, 0x55, 0x1b, 0x54, 0x92, 0x54, 0xf2, 0x95, 0x68, 0x49, 0xcd, - 0xae, 0x13, 0xc6, 0x66, 0x4c, 0xce, 0x69, 0x4e, 0x83, 0x0c, 0xf7, 0xab, 0x21, 0x36, 0x2f, 0x2b, - 0xa9, 0xe9, 0xc3, 0xfd, 0x98, 0x30, 0x91, 0xe1, 0x52, 0x6e, 0xf4, 0x11, 0x64, 0xdb, 0x5d, 0xdc, - 0x7e, 0xaa, 0xd8, 0xa3, 0x4a, 0x86, 0x4a, 0xae, 0x45, 0x49, 0xd6, 0x09, 0x5f, 0x6b, 0xd4, 0x8c, - 0xc9, 0x99, 0x36, 0xfb, 0x89, 0xf6, 0xa1, 0xd4, 0xd3, 0x2c, 0x5b, 0xb1, 0x06, 0xaa, 0x61, 0x75, - 0x75, 0xdb, 0xaa, 0xe4, 0xa9, 0x8e, 0x57, 0xa3, 0x74, 0xec, 0x69, 0x96, 0x7d, 0xe4, 0x30, 0x37, - 0x63, 0x72, 0xb1, 0xe7, 0x27, 0x10, 0x7d, 0xfa, 0xd9, 0x19, 0x36, 0x5d, 0x85, 0x95, 0xc2, 0x74, - 0x7d, 0x07, 0x84, 0xdb, 0x91, 0x27, 0xfa, 0x74, 0x3f, 0x01, 0x7d, 0x06, 0xcb, 0x3d, 0x5d, 0xed, - 0xb8, 0xea, 0x94, 0x76, 0x77, 0x38, 0x78, 0x5a, 0x29, 0x52, 0xa5, 0xaf, 0x47, 0x0e, 0x52, 0x57, - 0x3b, 0x8e, 0x8a, 0x3a, 0x11, 0x68, 0xc6, 0xe4, 0xa5, 0x5e, 0x98, 0x88, 0xbe, 0x80, 0x15, 0xd5, - 0x30, 0x7a, 0x97, 0x61, 0xed, 0x25, 0xaa, 0xfd, 0x5e, 0x94, 0xf6, 0x1a, 0x91, 0x09, 0xab, 0x47, - 0xea, 0x18, 0x15, 0xb5, 0x40, 0x34, 0x4c, 0x6c, 0xa8, 0x26, 0x56, 0x0c, 0x53, 0x37, 0x74, 0x4b, - 0xed, 0x55, 0xca, 0x54, 0xf7, 0x9d, 0x28, 0xdd, 0x87, 0x8c, 0xff, 0x90, 0xb3, 0x37, 0x63, 0x72, - 0xd9, 0x08, 0x92, 0x98, 0x56, 0xbd, 0x8d, 0x2d, 0xcb, 0xd3, 0x2a, 0xce, 0xd2, 0x4a, 0xf9, 0x83, - 0x5a, 0x03, 0x24, 0xd4, 0x80, 0x3c, 0x1e, 0x11, 0x71, 0xe5, 0x42, 0xb7, 0x71, 0x65, 0x89, 0x2a, - 0x94, 0x22, 0xcf, 0x19, 0x65, 0x3d, 0xd1, 0x6d, 0xdc, 0x8c, 0xc9, 0x80, 0xdd, 0x16, 0x52, 0xe1, - 0xca, 0x05, 0x36, 0xb5, 0xb3, 0x4b, 0xaa, 0x46, 0xa1, 0x3d, 0xc4, 0x1f, 0x54, 0x10, 0x55, 0xf8, - 0x46, 0x94, 0xc2, 0x13, 0x2a, 0x44, 0x54, 0x34, 0x1c, 0x91, 0x66, 0x4c, 0x5e, 0xbe, 0x18, 0x27, - 0x13, 0x13, 0x3b, 0xd3, 0x06, 0x6a, 0x4f, 0xfb, 0x1a, 0x2b, 0xd4, 0xc1, 0x55, 0x96, 0xa7, 0x9b, - 0xd8, 0x23, 0xce, 0xbd, 0x45, 0x98, 0x89, 0x89, 0x9d, 0xf9, 0x09, 0x5b, 0x19, 0x48, 0x5d, 0xa8, - 0xbd, 0x21, 0xde, 0x4d, 0x66, 0xd3, 0x62, 0x66, 0x37, 0x99, 0xcd, 0x8a, 0xb9, 0xdd, 0x64, 0x36, - 0x27, 0xc2, 0x6e, 0x32, 0x0b, 0x62, 0x5e, 0xba, 0x03, 0x79, 0x9f, 0x7b, 0x41, 0x15, 0xc8, 0xf4, - 0xb1, 0x65, 0xa9, 0xe7, 0x98, 0x7a, 0xa3, 0x9c, 0xec, 0x34, 0xa5, 0x12, 0x14, 0xfc, 0x2e, 0x45, - 0xfa, 0x4e, 0x70, 0x25, 0x89, 0xb7, 0x20, 0x92, 0xdc, 0x3d, 0x3a, 0x92, 0xbc, 0x89, 0x6e, 0x43, - 0x91, 0x4e, 0x45, 0x71, 0xfa, 0x89, 0xcb, 0x4a, 0xca, 0x05, 0x4a, 0x3c, 0xe1, 0x4c, 0x6b, 0x90, - 0x37, 0xee, 0x1b, 0x2e, 0x4b, 0x82, 0xb2, 0x80, 0x71, 0xdf, 0x70, 0x18, 0x5e, 0x81, 0x02, 0x99, - 0xb7, 0xcb, 0x91, 0xa4, 0x1f, 0xc9, 0x13, 0x1a, 0x67, 0x91, 0xfe, 0x3e, 0x01, 0x62, 0xd8, 0x0d, - 0xa1, 0xf7, 0x21, 0x49, 0x3c, 0x32, 0x77, 0xae, 0xd5, 0x0d, 0xe6, 0xae, 0x37, 0x1c, 0x77, 0xbd, - 0xd1, 0x72, 0xdc, 0xf5, 0x56, 0xf6, 0x87, 0xe7, 0x6b, 0xb1, 0xef, 0xfe, 0x77, 0x4d, 0x90, 0xa9, - 0x04, 0xba, 0x4e, 0x9c, 0x8f, 0xaa, 0x0d, 0x14, 0xad, 0x43, 0x87, 0x9c, 0x23, 0x9e, 0x45, 0xd5, - 0x06, 0x3b, 0x1d, 0xb4, 0x07, 0x62, 0x5b, 0x1f, 0x58, 0x78, 0x60, 0x0d, 0x2d, 0x85, 0x85, 0x0b, - 0xee, 0x52, 0x03, 0x8e, 0x91, 0xc5, 0x89, 0xba, 0xc3, 0x79, 0x48, 0x19, 0xe5, 0x72, 0x3b, 0x48, - 0x40, 0xfb, 0x50, 0xbc, 0x50, 0x7b, 0x5a, 0x47, 0xb5, 0x75, 0x53, 0xb1, 0xb0, 0xcd, 0x7d, 0xec, - 0xed, 0xb1, 0x3d, 0x3f, 0x71, 0xb8, 0x8e, 0xb0, 0x7d, 0x6c, 0x74, 0x54, 0x1b, 0x6f, 0x25, 0x7f, - 0x78, 0xbe, 0x26, 0xc8, 0x85, 0x0b, 0x5f, 0x0f, 0x7a, 0x0d, 0xca, 0xaa, 0x61, 0x28, 0x96, 0xad, - 0xda, 0x58, 0x39, 0xbd, 0xb4, 0xb1, 0x45, 0xdd, 0x6e, 0x41, 0x2e, 0xaa, 0x86, 0x71, 0x44, 0xa8, - 0x5b, 0x84, 0x88, 0x5e, 0x85, 0x12, 0xf1, 0xd0, 0x9a, 0xda, 0x53, 0xba, 0x58, 0x3b, 0xef, 0xda, - 0x95, 0xf4, 0xba, 0x70, 0x37, 0x21, 0x17, 0x39, 0xb5, 0x49, 0x89, 0x68, 0x03, 0x96, 0x1d, 0xb6, - 0xb6, 0x6e, 0x62, 0x87, 0x97, 0xf8, 0xe3, 0xa2, 0xbc, 0xc4, 0xbb, 0xea, 0xba, 0x89, 0x19, 0xbf, - 0xd4, 0x71, 0x2d, 0x85, 0x7a, 0x73, 0x84, 0x20, 0xd9, 0x51, 0x6d, 0x95, 0xee, 0x40, 0x41, 0xa6, - 0xbf, 0x09, 0xcd, 0x50, 0xed, 0x2e, 0x5f, 0x57, 0xfa, 0x1b, 0x5d, 0x85, 0x34, 0x57, 0x9d, 0xa0, - 0xc3, 0xe0, 0x2d, 0xb4, 0x02, 0x29, 0xc3, 0xd4, 0x2f, 0x30, 0x5d, 0x96, 0xac, 0xcc, 0x1a, 0x92, - 0x0c, 0xa5, 0xa0, 0xe7, 0x47, 0x25, 0x88, 0xdb, 0x23, 0xfe, 0x95, 0xb8, 0x3d, 0x42, 0x6f, 0x43, - 0x92, 0x6c, 0x00, 0xfd, 0x46, 0x69, 0x42, 0xac, 0xe3, 0x72, 0xad, 0x4b, 0x03, 0xcb, 0x94, 0x53, - 0xba, 0x0a, 0x2b, 0x93, 0x22, 0x81, 0xd4, 0x75, 0xe9, 0x01, 0x8f, 0x8e, 0xde, 0x85, 0xac, 0x1b, - 0x0a, 0x98, 0x7d, 0x5d, 0x1f, 0xfb, 0x8a, 0xc3, 0x2c, 0xbb, 0xac, 0xc4, 0xb0, 0xc8, 0xfe, 0x74, - 0x55, 0x1e, 0xbe, 0x0b, 0x72, 0x46, 0x35, 0x8c, 0xa6, 0x6a, 0x75, 0xa5, 0x73, 0xa8, 0x44, 0xb9, - 0x79, 0xdf, 0xfa, 0x08, 0xf4, 0x74, 0x38, 0xeb, 0xe3, 0x3b, 0x79, 0x71, 0xba, 0x27, 0xee, 0xc9, - 0xa3, 0x16, 0x3c, 0x1c, 0x3c, 0x25, 0x16, 0x9c, 0x60, 0x1f, 0xa2, 0xed, 0x9d, 0x8e, 0xd4, 0x81, - 0xeb, 0x91, 0x1e, 0x3f, 0x20, 0x27, 0x04, 0xe4, 0xc8, 0x66, 0xb0, 0x38, 0xc2, 0x06, 0xce, 0x1a, - 0x64, 0x68, 0x16, 0x9d, 0x37, 0xfd, 0x4c, 0x4e, 0xe6, 0x2d, 0xe9, 0x97, 0x24, 0x5c, 0x9d, 0xec, - 0xfc, 0xd1, 0x3a, 0x14, 0xfa, 0xea, 0x48, 0xb1, 0x47, 0xdc, 0x42, 0x05, 0xba, 0xe7, 0xd0, 0x57, - 0x47, 0xad, 0x11, 0x33, 0x4f, 0x11, 0x12, 0xf6, 0xc8, 0xaa, 0xc4, 0xd7, 0x13, 0x77, 0x0b, 0x32, - 0xf9, 0x89, 0x9e, 0xc0, 0x52, 0x4f, 0x6f, 0xab, 0x3d, 0xa5, 0xa7, 0x5a, 0xb6, 0xd2, 0xd6, 0xfb, - 0x7d, 0xcd, 0xe6, 0xe7, 0xee, 0xc6, 0xf8, 0xf6, 0xd2, 0x6e, 0xe2, 0x9b, 0xe8, 0x21, 0x89, 0xc9, - 0x65, 0x2a, 0xbb, 0xa7, 0x5a, 0x36, 0xeb, 0x42, 0xdb, 0x90, 0xef, 0x6b, 0xd6, 0x29, 0xee, 0xaa, - 0x17, 0x9a, 0x6e, 0x56, 0x92, 0xeb, 0x89, 0x89, 0x39, 0xd1, 0x13, 0x8f, 0x87, 0x6b, 0xf2, 0x8b, - 0xf9, 0xb6, 0x25, 0x15, 0x30, 0x5b, 0xc7, 0xf1, 0xa4, 0x17, 0x76, 0x3c, 0x6f, 0xc3, 0xca, 0x00, - 0x8f, 0x6c, 0xc5, 0x3d, 0xd4, 0x16, 0xb3, 0x95, 0x0c, 0x5d, 0x72, 0x44, 0xfa, 0x5c, 0x4f, 0x60, - 0x11, 0xb3, 0x21, 0xbb, 0x62, 0xea, 0xc3, 0x41, 0xa7, 0x92, 0x5d, 0x17, 0xee, 0xa6, 0x64, 0xd6, - 0x40, 0x0f, 0xa1, 0x42, 0x0f, 0x2c, 0xf3, 0x62, 0xc4, 0xdb, 0xe2, 0x8e, 0x73, 0x7a, 0x73, 0xd4, - 0x52, 0xae, 0x90, 0x7e, 0xea, 0x27, 0xf7, 0x68, 0x2f, 0x3f, 0xf1, 0x9b, 0xb0, 0xc2, 0xa2, 0x2f, - 0x36, 0x49, 0x18, 0x26, 0x9b, 0x44, 0x07, 0x00, 0x74, 0x00, 0x4b, 0x4e, 0xdf, 0xa1, 0xa9, 0xb7, - 0x46, 0xf4, 0xfb, 0x6f, 0xbb, 0x02, 0x1d, 0x85, 0x98, 0xb6, 0x63, 0x8f, 0x79, 0x6a, 0xa8, 0xc8, - 0xe9, 0xab, 0x19, 0xae, 0x3b, 0x7f, 0xe8, 0x19, 0x6d, 0x61, 0x3c, 0x25, 0xe4, 0x5d, 0x9e, 0xeb, - 0xf4, 0x6c, 0x7a, 0x0d, 0xf2, 0x5f, 0x0d, 0x75, 0x73, 0xd8, 0x67, 0x43, 0x2a, 0xd2, 0x21, 0x01, - 0x23, 0xd1, 0x23, 0xf4, 0x6f, 0x29, 0x9f, 0xcd, 0x05, 0xf3, 0x00, 0x6e, 0x51, 0x82, 0x67, 0x51, - 0x47, 0xbe, 0x81, 0xfb, 0x8d, 0x2a, 0x3e, 0xaf, 0x51, 0xb9, 0x73, 0x8b, 0xb6, 0xab, 0xc4, 0xaf, - 0xb3, 0x2b, 0x04, 0x49, 0x3a, 0xc3, 0x24, 0x73, 0x9b, 0xe4, 0x77, 0xa4, 0xad, 0xb9, 0xfb, 0x9f, - 0xf6, 0xef, 0xbf, 0x63, 0x81, 0x99, 0xdf, 0xcc, 0x02, 0xb3, 0x91, 0x16, 0xf8, 0xab, 0x6d, 0xad, - 0x05, 0x57, 0x43, 0x82, 0xca, 0x90, 0x86, 0x36, 0x6a, 0x6d, 0xa1, 0x84, 0xdf, 0x09, 0xa8, 0x3e, - 0x45, 0xf2, 0x72, 0x40, 0x2f, 0x0b, 0x8b, 0x91, 0x16, 0x9c, 0x5f, 0xd4, 0x82, 0x0b, 0xf3, 0x58, - 0x70, 0xf1, 0x65, 0x2c, 0xb8, 0x34, 0x66, 0xc1, 0xc7, 0xb0, 0x34, 0x96, 0x8a, 0xba, 0xe6, 0x20, - 0x4c, 0x34, 0x87, 0xf8, 0x64, 0x73, 0x48, 0xf8, 0xcc, 0x41, 0xfa, 0x49, 0x80, 0x6a, 0x74, 0x46, - 0x3a, 0xf1, 0x03, 0xef, 0xc0, 0x15, 0x2f, 0x33, 0xf1, 0xaf, 0x23, 0xf3, 0xfe, 0xc8, 0xed, 0xf4, - 0x16, 0x72, 0x4a, 0x14, 0x67, 0x63, 0x4a, 0xfa, 0x4d, 0xf4, 0x09, 0x94, 0x83, 0xb9, 0x34, 0x49, - 0x55, 0xc8, 0x71, 0xf9, 0xb3, 0xb1, 0xe3, 0xe2, 0xad, 0x85, 0x3b, 0x66, 0xb9, 0x74, 0xe1, 0x6f, - 0x5a, 0xd2, 0x7f, 0xc6, 0xdd, 0x48, 0x1d, 0x48, 0x8c, 0xd1, 0x07, 0x90, 0xe6, 0x27, 0x5b, 0x98, - 0xf7, 0x64, 0x73, 0x81, 0xf0, 0x69, 0x8e, 0xbf, 0xdc, 0x69, 0x4e, 0x4c, 0xdc, 0xbe, 0xe4, 0xe4, - 0xa5, 0x4a, 0xf9, 0x97, 0xea, 0x2d, 0x48, 0xb1, 0x1b, 0x01, 0x0b, 0x28, 0xd7, 0xc6, 0xcf, 0x05, - 0x9d, 0xaa, 0xcc, 0xb8, 0x50, 0x0d, 0xb2, 0x2c, 0xeb, 0xd6, 0x3a, 0xdc, 0x01, 0x5c, 0x8f, 0x90, - 0xd8, 0xd9, 0xde, 0xca, 0xbf, 0x78, 0xbe, 0x96, 0xe1, 0x0d, 0x39, 0x43, 0xe5, 0x76, 0x3a, 0xd2, - 0xbf, 0xe7, 0x20, 0x2b, 0x63, 0xcb, 0x20, 0x26, 0x8c, 0xb6, 0x20, 0x87, 0x47, 0x6d, 0x6c, 0xd8, - 0x4e, 0x86, 0x3f, 0xf9, 0x06, 0xc5, 0xb8, 0x1b, 0x0e, 0x67, 0x33, 0x26, 0x7b, 0x62, 0xe8, 0x01, - 0x07, 0x3a, 0xa2, 0x31, 0x0b, 0x2e, 0xee, 0x47, 0x3a, 0xde, 0x73, 0x90, 0x0e, 0x16, 0xe8, 0x57, - 0x23, 0xa5, 0x42, 0x50, 0xc7, 0x03, 0x0e, 0x75, 0x24, 0x67, 0x7c, 0x2c, 0x80, 0x75, 0xd4, 0x03, - 0x58, 0x47, 0x6a, 0xc6, 0x34, 0x23, 0xc0, 0x8e, 0xf7, 0x1c, 0xb0, 0x23, 0x3d, 0x63, 0xc4, 0x21, - 0xb4, 0xe3, 0x2f, 0xc7, 0xd0, 0x8e, 0xf5, 0x48, 0xd1, 0x09, 0x70, 0xc7, 0xc1, 0x18, 0xdc, 0x91, - 0xa5, 0x4a, 0x5e, 0x8b, 0x54, 0x32, 0x03, 0xef, 0x38, 0x18, 0xc3, 0x3b, 0x72, 0x33, 0x14, 0xce, - 0x00, 0x3c, 0xfe, 0x76, 0x32, 0xe0, 0x01, 0x91, 0x90, 0x04, 0x1f, 0xe6, 0x7c, 0x88, 0x87, 0x12, - 0x81, 0x78, 0xe4, 0x23, 0x6f, 0xe7, 0x4c, 0xfd, 0xdc, 0x90, 0xc7, 0xf1, 0x04, 0xc8, 0x83, 0x25, - 0x2f, 0x77, 0x23, 0x95, 0xcf, 0x81, 0x79, 0x1c, 0x4f, 0xc0, 0x3c, 0x8a, 0x33, 0xd5, 0xce, 0x04, - 0x3d, 0x1e, 0x05, 0x41, 0x8f, 0x52, 0xc4, 0x9d, 0xd2, 0x3b, 0xb2, 0x11, 0xa8, 0xc7, 0x69, 0x14, - 0xea, 0xc1, 0xd0, 0x9e, 0x37, 0x23, 0x35, 0x2e, 0x00, 0x7b, 0x1c, 0x8c, 0xc1, 0x1e, 0xe2, 0x0c, - 0x4b, 0x9b, 0x13, 0xf7, 0x90, 0x5e, 0x27, 0xb1, 0x34, 0xe4, 0x94, 0x88, 0x83, 0xc5, 0xa6, 0xa9, - 0x9b, 0x1c, 0xa9, 0x60, 0x0d, 0xe9, 0x2e, 0xb9, 0xb7, 0x7a, 0x0e, 0x68, 0x0a, 0x16, 0x52, 0x86, - 0x62, 0xc0, 0xe9, 0x48, 0xff, 0x22, 0x78, 0xb2, 0x14, 0x0d, 0xf1, 0xdf, 0x79, 0x73, 0xfc, 0xce, - 0x1b, 0xba, 0xa7, 0xe5, 0x02, 0x19, 0x81, 0x3f, 0xe7, 0xe0, 0xe0, 0x87, 0xea, 0xe5, 0x1a, 0xf7, - 0x60, 0x89, 0x66, 0xa7, 0xcc, 0xa3, 0x07, 0x82, 0x46, 0x99, 0x74, 0xb0, 0x55, 0x60, 0xd1, 0xe3, - 0x2d, 0x58, 0xf6, 0xf1, 0xba, 0x17, 0x4d, 0x86, 0x00, 0x88, 0x2e, 0x77, 0x8d, 0xdf, 0x38, 0xff, - 0x2f, 0xee, 0xad, 0x90, 0x87, 0x9a, 0x4c, 0x02, 0x38, 0x84, 0x5f, 0x0d, 0x70, 0x44, 0x5f, 0x78, - 0xd1, 0x67, 0xb0, 0x12, 0xc0, 0x3e, 0x9c, 0xe4, 0x2f, 0xb1, 0x18, 0x04, 0x12, 0xf3, 0xe5, 0x22, - 0x6e, 0x0f, 0xfa, 0x1c, 0x6e, 0xd0, 0x34, 0x36, 0x22, 0xc1, 0x4c, 0xce, 0x97, 0x60, 0x5e, 0x23, - 0x3a, 0xea, 0x13, 0x92, 0xcc, 0x08, 0x60, 0x24, 0x15, 0x05, 0x8c, 0xfc, 0x4e, 0xf0, 0xec, 0xc6, - 0x85, 0x46, 0xda, 0x7a, 0x87, 0xd9, 0x57, 0x51, 0xa6, 0xbf, 0xc9, 0x25, 0xa5, 0xa7, 0x9f, 0x73, - 0x13, 0x21, 0x3f, 0x09, 0x97, 0x0b, 0xda, 0xe7, 0x78, 0xa0, 0x5a, 0x81, 0x94, 0x36, 0xe8, 0xe0, - 0x11, 0xb7, 0x02, 0xd6, 0x20, 0xb2, 0x4f, 0xf1, 0x25, 0xdf, 0x6b, 0xf2, 0x93, 0xf0, 0xd1, 0x83, - 0x40, 0x63, 0x51, 0x41, 0x66, 0x0d, 0xf4, 0x3e, 0xe4, 0x68, 0xe5, 0x45, 0xd1, 0x0d, 0x8b, 0x87, - 0x9a, 0x40, 0x46, 0xc4, 0xaa, 0x24, 0x1b, 0x87, 0x84, 0xe7, 0xc0, 0xb0, 0xe4, 0xac, 0xc1, 0x7f, - 0xf9, 0x72, 0x96, 0x6c, 0x20, 0x67, 0xb9, 0x09, 0x39, 0x32, 0x7a, 0xcb, 0x50, 0xdb, 0x98, 0x86, - 0x89, 0x9c, 0xec, 0x11, 0xa4, 0x7f, 0x15, 0xa0, 0x1c, 0x8a, 0x5c, 0x13, 0xe7, 0xee, 0x1c, 0x9b, - 0x78, 0x10, 0x2a, 0x1a, 0x9b, 0xfd, 0x2d, 0x80, 0x73, 0xd5, 0x52, 0x9e, 0xa9, 0x03, 0x1b, 0x77, - 0xf8, 0x12, 0xe4, 0xce, 0x55, 0xeb, 0x13, 0x4a, 0x08, 0x0e, 0x26, 0x15, 0x1a, 0x8c, 0x0f, 0xac, - 0x48, 0xfb, 0xc1, 0x0a, 0x54, 0x85, 0xac, 0x61, 0x6a, 0xba, 0xa9, 0xd9, 0x97, 0x74, 0x4d, 0x12, - 0xb2, 0xdb, 0x96, 0x0e, 0xe1, 0xca, 0xc4, 0xa0, 0x89, 0x1e, 0x42, 0xce, 0x8b, 0xb7, 0x02, 0xcd, - 0x0d, 0xa7, 0x60, 0x40, 0x1e, 0x2f, 0x59, 0x92, 0x2b, 0x13, 0xc3, 0x26, 0x6a, 0x40, 0xda, 0xc4, - 0xd6, 0xb0, 0xc7, 0x72, 0xd5, 0xd2, 0xfd, 0xb7, 0xe6, 0x0b, 0xb7, 0x84, 0x3a, 0xec, 0xd9, 0x32, - 0x17, 0x96, 0xbe, 0x80, 0x34, 0xa3, 0xa0, 0x3c, 0x64, 0x8e, 0xf7, 0x1f, 0xef, 0x1f, 0x7c, 0xb2, - 0x2f, 0xc6, 0x10, 0x40, 0xba, 0x56, 0xaf, 0x37, 0x0e, 0x5b, 0xa2, 0x80, 0x72, 0x90, 0xaa, 0x6d, - 0x1d, 0xc8, 0x2d, 0x31, 0x4e, 0xc8, 0x72, 0x63, 0xb7, 0x51, 0x6f, 0x89, 0x09, 0xb4, 0x04, 0x45, - 0xf6, 0x5b, 0x79, 0x74, 0x20, 0x3f, 0xa9, 0xb5, 0xc4, 0xa4, 0x8f, 0x74, 0xd4, 0xd8, 0xdf, 0x6e, - 0xc8, 0x62, 0x4a, 0x7a, 0x07, 0xae, 0x47, 0x06, 0x68, 0x0f, 0x26, 0x12, 0x7c, 0x30, 0x91, 0xf4, - 0x63, 0x9c, 0xdc, 0x40, 0xa2, 0xa2, 0x2e, 0xda, 0x0d, 0x4d, 0xfc, 0xfe, 0x02, 0x21, 0x3b, 0x34, - 0x7b, 0xf4, 0x2a, 0x94, 0x4c, 0x7c, 0x86, 0xed, 0x76, 0x97, 0x65, 0x01, 0x0e, 0x8e, 0x54, 0xe4, - 0x54, 0x2a, 0x64, 0x31, 0xb6, 0x2f, 0x71, 0xdb, 0x56, 0x98, 0x11, 0x58, 0xf4, 0xb6, 0x9e, 0x23, - 0x6c, 0x84, 0x7a, 0xc4, 0x88, 0xc4, 0x41, 0x33, 0x47, 0xc2, 0x54, 0x25, 0xa9, 0x2a, 0xa0, 0x7e, - 0x81, 0x52, 0xa4, 0x67, 0x0b, 0x2d, 0x76, 0x0e, 0x52, 0x72, 0xa3, 0x25, 0x7f, 0x2a, 0x26, 0x10, - 0x82, 0x12, 0xfd, 0xa9, 0x1c, 0xed, 0xd7, 0x0e, 0x8f, 0x9a, 0x07, 0x64, 0xb1, 0x97, 0xa1, 0xec, - 0x2c, 0xb6, 0x43, 0x4c, 0xa1, 0x2b, 0xb0, 0x54, 0x3f, 0x78, 0x72, 0xb8, 0xd7, 0x68, 0x35, 0x3c, - 0x72, 0x5a, 0xfa, 0xef, 0x04, 0x5c, 0x8b, 0xc8, 0x35, 0xd0, 0xfb, 0x00, 0xf6, 0x48, 0x31, 0x71, - 0x5b, 0x37, 0x3b, 0xd1, 0xc6, 0xd9, 0x1a, 0xc9, 0x94, 0x43, 0xce, 0xd9, 0xfc, 0xd7, 0x54, 0x87, - 0xfd, 0x11, 0x57, 0x4a, 0x26, 0x6b, 0x71, 0x6c, 0xe3, 0xd6, 0x84, 0xcb, 0x1a, 0x6e, 0x13, 0xc5, - 0x74, 0x4f, 0xa8, 0x62, 0xca, 0x8f, 0x3e, 0x85, 0x6b, 0xa1, 0xb8, 0xc2, 0x9d, 0xb1, 0x35, 0xa9, - 0xb0, 0x38, 0x39, 0xbc, 0x5c, 0x09, 0x86, 0x17, 0xe6, 0x8c, 0xad, 0x29, 0x40, 0x42, 0xea, 0x25, - 0x80, 0x84, 0xa8, 0xf8, 0x94, 0x5e, 0x14, 0xa2, 0x9f, 0x14, 0x9f, 0x42, 0x71, 0x3f, 0x13, 0x8e, - 0xfb, 0xd2, 0xef, 0x03, 0xbb, 0x1b, 0xcc, 0xef, 0x0e, 0x20, 0x6d, 0xd9, 0xaa, 0x3d, 0xb4, 0xf8, - 0x69, 0x79, 0x38, 0x6f, 0xb2, 0xb8, 0xe1, 0xfc, 0x38, 0xa2, 0xe2, 0x32, 0x57, 0xf3, 0x27, 0xb9, - 0xe9, 0x51, 0xdb, 0x93, 0xfa, 0x2d, 0xb6, 0xa7, 0x09, 0x69, 0x7c, 0x81, 0x07, 0xb6, 0x55, 0x49, - 0xd3, 0x19, 0x5f, 0x1d, 0x9f, 0x31, 0xe9, 0xde, 0xaa, 0x90, 0x04, 0xe4, 0xff, 0x9f, 0xaf, 0x89, - 0x8c, 0xfb, 0x4d, 0xbd, 0xaf, 0xd9, 0xb8, 0x6f, 0xd8, 0x97, 0x32, 0x97, 0x97, 0xde, 0x85, 0x52, - 0x70, 0xd1, 0xa3, 0xdd, 0x84, 0xe7, 0x88, 0xe3, 0xd2, 0x3f, 0x0b, 0xb0, 0x3c, 0x01, 0xf6, 0x40, - 0x0f, 0x79, 0x65, 0x83, 0x6d, 0xfc, 0xed, 0xf1, 0xd5, 0x0b, 0xb0, 0x7b, 0x05, 0x0e, 0x12, 0x18, - 0xbd, 0xfc, 0x9d, 0xed, 0xb1, 0x47, 0x40, 0x6f, 0x40, 0xd9, 0xd2, 0xce, 0x07, 0x8a, 0xc9, 0x10, - 0x14, 0xb7, 0x6a, 0x40, 0xd2, 0x6b, 0xd2, 0xe1, 0xd4, 0xd6, 0x3a, 0xff, 0x20, 0x08, 0x5b, 0x08, - 0x44, 0x25, 0xc4, 0x2d, 0xb5, 0x01, 0x8d, 0x5f, 0x27, 0x26, 0x61, 0x3c, 0xc2, 0x4b, 0x60, 0x3c, - 0xff, 0x24, 0xc0, 0x8d, 0x29, 0x57, 0x0c, 0xf4, 0x71, 0xe8, 0x5c, 0x7c, 0xb0, 0xc8, 0x05, 0x65, - 0x83, 0xd1, 0x82, 0x27, 0x43, 0x7a, 0x00, 0x05, 0x3f, 0x7d, 0xbe, 0xcd, 0xdb, 0xf5, 0xe2, 0x7b, - 0x10, 0x8b, 0xba, 0x0d, 0x45, 0x13, 0xdb, 0xc4, 0x49, 0x05, 0xc0, 0xbb, 0x02, 0x23, 0xb2, 0x5c, - 0x71, 0x37, 0x99, 0x15, 0xc4, 0xb8, 0x6b, 0x3f, 0xff, 0x21, 0x00, 0x78, 0x00, 0x95, 0x07, 0x10, - 0x09, 0x7e, 0x80, 0x28, 0x84, 0x2b, 0xc6, 0xc3, 0xb8, 0x22, 0xba, 0x03, 0x65, 0x76, 0x29, 0x20, - 0xfb, 0xa6, 0xda, 0x43, 0x13, 0x73, 0x38, 0xaa, 0x44, 0xc9, 0x47, 0x0e, 0x15, 0x7d, 0x06, 0xd7, - 0xed, 0xae, 0x89, 0xad, 0xae, 0xde, 0xeb, 0x28, 0xe1, 0xbd, 0x63, 0x65, 0x92, 0xb5, 0x19, 0x46, - 0x27, 0x5f, 0x73, 0x35, 0x9c, 0x04, 0xf7, 0xef, 0x6b, 0x48, 0xd1, 0x63, 0x43, 0x12, 0x3b, 0xd7, - 0x8a, 0x73, 0xdc, 0x40, 0x3f, 0x07, 0x50, 0x6d, 0xdb, 0xd4, 0x4e, 0x87, 0xc4, 0x3b, 0xc4, 0xc7, - 0x3f, 0xe5, 0x1d, 0xbb, 0x9a, 0xc3, 0xb7, 0x75, 0x93, 0x9f, 0xbf, 0x15, 0x4f, 0xd4, 0x77, 0x06, - 0x7d, 0x0a, 0xa5, 0x7d, 0x28, 0x05, 0x65, 0x9d, 0x8c, 0x99, 0x8d, 0x21, 0x98, 0x31, 0xb3, 0x0c, - 0x9c, 0x67, 0xcc, 0x6e, 0xbe, 0x9d, 0x60, 0x45, 0x48, 0xda, 0x90, 0x7e, 0x11, 0xa0, 0xe0, 0xf7, - 0x7a, 0x73, 0x27, 0xb5, 0x3c, 0xc9, 0x4f, 0x8c, 0x27, 0xf9, 0x49, 0x5f, 0x9a, 0x7b, 0x1d, 0xb2, - 0x24, 0xcd, 0x1d, 0x5a, 0xb8, 0xc3, 0x4b, 0xb3, 0x99, 0x73, 0xd5, 0x3a, 0xb6, 0x70, 0xc7, 0xe7, - 0x9b, 0x32, 0x2f, 0xe7, 0x9b, 0x82, 0xc9, 0x72, 0x36, 0x94, 0x2c, 0xef, 0x26, 0xb3, 0x29, 0x31, - 0x2d, 0xfb, 0xb2, 0x6d, 0xe9, 0x1b, 0x01, 0xb2, 0xee, 0x7c, 0x83, 0x35, 0xc9, 0x00, 0x84, 0xc9, - 0x96, 0x8b, 0x55, 0x24, 0xf9, 0xf5, 0x84, 0x55, 0x68, 0x13, 0x6e, 0x85, 0xf6, 0x43, 0x37, 0xe1, - 0x8b, 0x02, 0xe9, 0xfc, 0x8b, 0xeb, 0xe0, 0xb2, 0x3c, 0xbf, 0xfd, 0x47, 0x3e, 0x0e, 0x92, 0xb1, - 0xa0, 0xbf, 0x80, 0xb4, 0xda, 0x76, 0xa1, 0xc9, 0xd2, 0x04, 0xcc, 0xce, 0x61, 0xdd, 0x68, 0x8d, - 0x6a, 0x94, 0x53, 0xe6, 0x12, 0x7c, 0x54, 0x71, 0x67, 0x54, 0xd2, 0x1e, 0xd1, 0xcb, 0x78, 0x82, - 0x27, 0xbd, 0x04, 0x70, 0xbc, 0xff, 0xe4, 0x60, 0x7b, 0xe7, 0xd1, 0x4e, 0x63, 0x9b, 0x67, 0x74, - 0xdb, 0xdb, 0x8d, 0x6d, 0x31, 0x4e, 0xf8, 0xe4, 0xc6, 0x93, 0x83, 0x93, 0xc6, 0xb6, 0x98, 0x20, - 0x8d, 0xed, 0xc6, 0x5e, 0xed, 0xd3, 0xc6, 0xb6, 0x98, 0x94, 0x6a, 0x90, 0x73, 0x83, 0x0e, 0x2d, - 0x65, 0xeb, 0xcf, 0xb0, 0xc9, 0x57, 0x8b, 0x35, 0xd0, 0x2a, 0xe4, 0xc7, 0xb1, 0x75, 0x72, 0x41, - 0x63, 0x90, 0x3a, 0x09, 0x03, 0x65, 0x57, 0x07, 0x8f, 0x4d, 0x1f, 0x42, 0xc6, 0x18, 0x9e, 0x2a, - 0x8e, 0xed, 0x86, 0x10, 0x69, 0xe7, 0xfe, 0x36, 0x3c, 0xed, 0x69, 0xed, 0xc7, 0xf8, 0x92, 0x07, - 0xb9, 0xb4, 0x31, 0x3c, 0x7d, 0xcc, 0x4c, 0x9c, 0x0d, 0x23, 0x3e, 0x65, 0x18, 0x89, 0xd0, 0x30, - 0xd0, 0x1d, 0x28, 0x0c, 0xf4, 0x0e, 0x56, 0xd4, 0x4e, 0xc7, 0xc4, 0x16, 0x8b, 0xdd, 0x39, 0xae, - 0x39, 0x4f, 0x7a, 0x6a, 0xac, 0x43, 0xfa, 0x49, 0x00, 0x34, 0x1e, 0x68, 0xd1, 0x11, 0x2c, 0x79, - 0xb1, 0xda, 0x49, 0x00, 0x58, 0x24, 0x58, 0x8f, 0x0e, 0xd4, 0x81, 0x4b, 0xbe, 0x78, 0x11, 0x24, - 0x93, 0xac, 0x6f, 0xc5, 0x73, 0x55, 0x06, 0x9d, 0x2f, 0x5d, 0x94, 0xf8, 0x9c, 0x8b, 0x12, 0x93, - 0x91, 0x2b, 0xef, 0xf6, 0x84, 0x5d, 0x69, 0x62, 0xac, 0x44, 0x63, 0x40, 0xa5, 0x35, 0x26, 0xc6, - 0xe7, 0x19, 0x35, 0x24, 0xe1, 0x65, 0x86, 0x24, 0x3d, 0x00, 0xf1, 0x63, 0xf7, 0xfb, 0x5e, 0xfe, - 0xe8, 0x1f, 0xa6, 0x30, 0x36, 0xcc, 0x0b, 0xc8, 0x12, 0xef, 0x4b, 0x83, 0xc6, 0x5f, 0x41, 0xce, - 0x5d, 0x3d, 0xf7, 0x35, 0x4c, 0xe4, 0xb2, 0xf3, 0x91, 0x78, 0x22, 0xe8, 0x1e, 0x2c, 0x91, 0xb8, - 0xe1, 0x14, 0x4a, 0x19, 0x4c, 0x17, 0xa7, 0xde, 0xb0, 0xcc, 0x3a, 0xf6, 0x1c, 0x6c, 0x89, 0xc4, - 0x68, 0x91, 0xc5, 0x72, 0xdc, 0xf9, 0x63, 0x0c, 0x80, 0xdc, 0xeb, 0x42, 0x68, 0x25, 0xdb, 0xc3, - 0x62, 0x20, 0x99, 0x90, 0xfe, 0x2e, 0x0e, 0x79, 0x5f, 0xe1, 0x06, 0xfd, 0x79, 0x20, 0xb1, 0x5a, - 0x9f, 0x56, 0xe4, 0xf1, 0x65, 0x55, 0x81, 0x89, 0xc5, 0x17, 0x9f, 0x58, 0x54, 0xc9, 0xcc, 0xa9, - 0xdf, 0x26, 0x17, 0xae, 0xdf, 0xbe, 0x09, 0xc8, 0xd6, 0x6d, 0xb5, 0x47, 0x82, 0xb7, 0x36, 0x38, - 0x57, 0xd8, 0x69, 0x67, 0x35, 0x63, 0x91, 0xf6, 0x9c, 0xd0, 0x8e, 0x43, 0x42, 0x97, 0x7a, 0x90, - 0x75, 0xc1, 0x87, 0xc5, 0x1f, 0x99, 0x4c, 0xaa, 0x53, 0x57, 0x21, 0xdb, 0xc7, 0xb6, 0x4a, 0xc3, - 0x1e, 0x03, 0xa3, 0xdc, 0xf6, 0xbd, 0x0f, 0x20, 0xef, 0x7b, 0x79, 0x43, 0x22, 0xe1, 0x7e, 0xe3, - 0x13, 0x31, 0x56, 0xcd, 0x7c, 0xfb, 0xfd, 0x7a, 0x62, 0x1f, 0x3f, 0x23, 0x9f, 0x92, 0x1b, 0xf5, - 0x66, 0xa3, 0xfe, 0x58, 0x14, 0xaa, 0xf9, 0x6f, 0xbf, 0x5f, 0xcf, 0xc8, 0x98, 0xd6, 0x38, 0xee, - 0x3d, 0x86, 0x72, 0x68, 0x07, 0x82, 0x0e, 0x1a, 0x41, 0x69, 0xfb, 0xf8, 0x70, 0x6f, 0xa7, 0x5e, - 0x6b, 0x35, 0x94, 0x93, 0x83, 0x56, 0x43, 0x14, 0xd0, 0x35, 0x58, 0xde, 0xdb, 0xf9, 0xeb, 0x66, - 0x4b, 0xa9, 0xef, 0xed, 0x34, 0xf6, 0x5b, 0x4a, 0xad, 0xd5, 0xaa, 0xd5, 0x1f, 0x8b, 0xf1, 0xfb, - 0xff, 0x03, 0x50, 0xae, 0x6d, 0xd5, 0x77, 0x6a, 0x86, 0xd1, 0xd3, 0xda, 0x2a, 0x75, 0xf7, 0x75, - 0x48, 0x52, 0xe8, 0x77, 0xea, 0x1b, 0xdc, 0xea, 0xf4, 0xc2, 0x15, 0x7a, 0x04, 0x29, 0x8a, 0x0a, - 0xa3, 0xe9, 0x8f, 0x72, 0xab, 0x33, 0x2a, 0x59, 0x64, 0x30, 0xf4, 0xdc, 0x4c, 0x7d, 0xa5, 0x5b, - 0x9d, 0x5e, 0xd8, 0x42, 0x7b, 0x90, 0x71, 0x00, 0xb7, 0x59, 0x4f, 0x67, 0xab, 0x33, 0xab, 0x4d, - 0x64, 0x6a, 0x0c, 0xb8, 0x9c, 0xfe, 0x80, 0xb7, 0x3a, 0xa3, 0xe4, 0x85, 0x64, 0xc8, 0x79, 0x58, - 0xf3, 0xec, 0xb7, 0xc4, 0xd5, 0x39, 0x4a, 0x70, 0xe8, 0x0b, 0x28, 0x06, 0xa1, 0xb9, 0xf9, 0x9e, - 0xf9, 0x56, 0xe7, 0x2c, 0x8f, 0x11, 0xfd, 0x41, 0x9c, 0x6e, 0xbe, 0x67, 0xbf, 0xd5, 0x39, 0xab, - 0x65, 0xe8, 0x4b, 0x58, 0x1a, 0xc7, 0xd1, 0xe6, 0x7f, 0x05, 0x5c, 0x5d, 0xa0, 0x7e, 0x86, 0xfa, - 0x80, 0x26, 0xe0, 0x6f, 0x0b, 0x3c, 0x0a, 0xae, 0x2e, 0x52, 0x4e, 0x43, 0x1d, 0x28, 0x87, 0xb1, - 0xa9, 0x79, 0x1f, 0x09, 0x57, 0xe7, 0x2e, 0xad, 0xb1, 0xaf, 0x04, 0x31, 0x92, 0x79, 0x1f, 0x0d, - 0x57, 0xe7, 0xae, 0xb4, 0xa1, 0x63, 0x00, 0xdf, 0xdd, 0x76, 0x8e, 0x47, 0xc4, 0xd5, 0x79, 0x6a, - 0x6e, 0xc8, 0x80, 0xe5, 0x49, 0x97, 0xd9, 0x45, 0xde, 0x14, 0x57, 0x17, 0x2a, 0xc5, 0x11, 0x7b, - 0x0e, 0xde, 0x4b, 0xe7, 0x7b, 0x63, 0x5c, 0x9d, 0xb3, 0x26, 0xb7, 0xb5, 0xf5, 0xc3, 0x8b, 0x55, - 0xe1, 0xc7, 0x17, 0xab, 0xc2, 0x4f, 0x2f, 0x56, 0x85, 0xef, 0x7e, 0x5e, 0x8d, 0xfd, 0xf8, 0xf3, - 0x6a, 0xec, 0xbf, 0x7e, 0x5e, 0x8d, 0xfd, 0xcd, 0xdd, 0x73, 0xcd, 0xee, 0x0e, 0x4f, 0x37, 0xda, - 0x7a, 0x9f, 0xfe, 0xc5, 0xc3, 0x50, 0x2f, 0x37, 0x99, 0x4e, 0xd2, 0xf2, 0xfd, 0x91, 0xe4, 0x34, - 0x4d, 0x63, 0xdd, 0x83, 0x3f, 0x04, 0x00, 0x00, 0xff, 0xff, 0xf2, 0x22, 0x4b, 0xdf, 0x68, 0x32, - 0x00, 0x00, + 0x6b, 0xe2, 0xaa, 0x94, 0x4f, 0xfe, 0x07, 0x7c, 0x4b, 0x8e, 0xb9, 0xe7, 0x94, 0x54, 0x4e, 0x71, + 0x2a, 0x17, 0x1f, 0x53, 0x95, 0x8a, 0xe2, 0x92, 0x6f, 0xb9, 0xf9, 0xf4, 0x5d, 0xbe, 0xc3, 0x57, + 0xf3, 0xd8, 0x27, 0xb0, 0x78, 0x58, 0xae, 0xfa, 0xea, 0xbb, 0x61, 0x7a, 0xba, 0x7b, 0xe7, 0xd1, + 0xd3, 0xdd, 0xf3, 0xeb, 0x01, 0xdc, 0xb0, 0xf1, 0xa0, 0x83, 0xcd, 0xbe, 0x36, 0xb0, 0x37, 0xd5, + 0xd3, 0xb6, 0xb6, 0x69, 0x5f, 0x1a, 0xd8, 0xda, 0x30, 0x4c, 0xdd, 0xd6, 0x51, 0xd9, 0xeb, 0xdc, + 0x20, 0x9d, 0xd5, 0x5b, 0x3e, 0xee, 0xb6, 0x79, 0x69, 0xd8, 0xfa, 0xa6, 0x61, 0xea, 0xfa, 0x19, + 0xe3, 0xaf, 0xfa, 0x95, 0x51, 0x3d, 0x9b, 0x1d, 0xd5, 0xea, 0xf2, 0xce, 0x9b, 0x63, 0x9d, 0xa7, + 0x3d, 0xbd, 0xfd, 0x34, 0xb2, 0xd7, 0x37, 0x90, 0x40, 0x2f, 0xff, 0xee, 0x53, 0x7c, 0xe9, 0xf4, + 0xde, 0x1a, 0x93, 0x35, 0x54, 0x53, 0xed, 0x3b, 0xdd, 0xab, 0xbe, 0xee, 0x0b, 0x6c, 0x5a, 0x9a, + 0x3e, 0x08, 0x28, 0x5f, 0x3b, 0xd7, 0xf5, 0xf3, 0x1e, 0xde, 0xa4, 0xad, 0xd3, 0xe1, 0xd9, 0xa6, + 0xad, 0xf5, 0xb1, 0x65, 0xab, 0x7d, 0x83, 0x33, 0xac, 0x9c, 0xeb, 0xe7, 0x3a, 0xfd, 0xb9, 0x49, + 0x7e, 0x31, 0xaa, 0xf4, 0x4d, 0x0e, 0x32, 0x32, 0xfe, 0x6a, 0x88, 0x2d, 0x1b, 0xdd, 0x87, 0x24, + 0x6e, 0x77, 0xf5, 0x8a, 0xb0, 0x2e, 0xdc, 0xcd, 0xdf, 0xbf, 0xb9, 0x11, 0x5a, 0xb7, 0x0d, 0xce, + 0xd7, 0x68, 0x77, 0xf5, 0x66, 0x4c, 0xa6, 0xbc, 0xe8, 0x5d, 0x48, 0x9d, 0xf5, 0x86, 0x56, 0xb7, + 0x12, 0xa7, 0x42, 0xb7, 0xa2, 0x84, 0x1e, 0x11, 0xa6, 0x66, 0x4c, 0x66, 0xdc, 0xe4, 0x53, 0xda, + 0xe0, 0x4c, 0xaf, 0x24, 0xa6, 0x7f, 0x6a, 0x67, 0x70, 0x46, 0x3f, 0x45, 0x78, 0xd1, 0x16, 0x80, + 0x36, 0xd0, 0x6c, 0xa5, 0xdd, 0x55, 0xb5, 0x41, 0x25, 0x49, 0x25, 0x5f, 0x89, 0x96, 0xd4, 0xec, + 0x3a, 0x61, 0x6c, 0xc6, 0xe4, 0x9c, 0xe6, 0x34, 0xc8, 0x70, 0xbf, 0x1a, 0x62, 0xf3, 0xb2, 0x92, + 0x9a, 0x3e, 0xdc, 0x8f, 0x09, 0x13, 0x19, 0x2e, 0xe5, 0x46, 0x1f, 0x41, 0xb6, 0xdd, 0xc5, 0xed, + 0xa7, 0x8a, 0x3d, 0xaa, 0x64, 0xa8, 0xe4, 0x5a, 0x94, 0x64, 0x9d, 0xf0, 0xb5, 0x46, 0xcd, 0x98, + 0x9c, 0x69, 0xb3, 0x9f, 0x68, 0x1f, 0x4a, 0x3d, 0xcd, 0xb2, 0x15, 0x6b, 0xa0, 0x1a, 0x56, 0x57, + 0xb7, 0xad, 0x4a, 0x9e, 0xea, 0x78, 0x35, 0x4a, 0xc7, 0x9e, 0x66, 0xd9, 0x47, 0x0e, 0x73, 0x33, + 0x26, 0x17, 0x7b, 0x7e, 0x02, 0xd1, 0xa7, 0x9f, 0x9d, 0x61, 0xd3, 0x55, 0x58, 0x29, 0x4c, 0xd7, + 0x77, 0x40, 0xb8, 0x1d, 0x79, 0xa2, 0x4f, 0xf7, 0x13, 0xd0, 0x67, 0xb0, 0xdc, 0xd3, 0xd5, 0x8e, + 0xab, 0x4e, 0x69, 0x77, 0x87, 0x83, 0xa7, 0x95, 0x22, 0x55, 0xfa, 0x7a, 0xe4, 0x20, 0x75, 0xb5, + 0xe3, 0xa8, 0xa8, 0x13, 0x81, 0x66, 0x4c, 0x5e, 0xea, 0x85, 0x89, 0xe8, 0x0b, 0x58, 0x51, 0x0d, + 0xa3, 0x77, 0x19, 0xd6, 0x5e, 0xa2, 0xda, 0xef, 0x45, 0x69, 0xaf, 0x11, 0x99, 0xb0, 0x7a, 0xa4, + 0x8e, 0x51, 0x51, 0x0b, 0x44, 0xc3, 0xc4, 0x86, 0x6a, 0x62, 0xc5, 0x30, 0x75, 0x43, 0xb7, 0xd4, + 0x5e, 0xa5, 0x4c, 0x75, 0xdf, 0x89, 0xd2, 0x7d, 0xc8, 0xf8, 0x0f, 0x39, 0x7b, 0x33, 0x26, 0x97, + 0x8d, 0x20, 0x89, 0x69, 0xd5, 0xdb, 0xd8, 0xb2, 0x3c, 0xad, 0xe2, 0x2c, 0xad, 0x94, 0x3f, 0xa8, + 0x35, 0x40, 0x42, 0x0d, 0xc8, 0xe3, 0x11, 0x11, 0x57, 0x2e, 0x74, 0x1b, 0x57, 0x96, 0xa8, 0x42, + 0x29, 0xf2, 0x9c, 0x51, 0xd6, 0x13, 0xdd, 0xc6, 0xcd, 0x98, 0x0c, 0xd8, 0x6d, 0x21, 0x15, 0xae, + 0x5c, 0x60, 0x53, 0x3b, 0xbb, 0xa4, 0x6a, 0x14, 0xda, 0x43, 0xfc, 0x41, 0x05, 0x51, 0x85, 0x6f, + 0x44, 0x29, 0x3c, 0xa1, 0x42, 0x44, 0x45, 0xc3, 0x11, 0x69, 0xc6, 0xe4, 0xe5, 0x8b, 0x71, 0x32, + 0x31, 0xb1, 0x33, 0x6d, 0xa0, 0xf6, 0xb4, 0xaf, 0xb1, 0x42, 0x1d, 0x5c, 0x65, 0x79, 0xba, 0x89, + 0x3d, 0xe2, 0xdc, 0x5b, 0x84, 0x99, 0x98, 0xd8, 0x99, 0x9f, 0xb0, 0x95, 0x81, 0xd4, 0x85, 0xda, + 0x1b, 0xe2, 0xdd, 0x64, 0x36, 0x2d, 0x66, 0x76, 0x93, 0xd9, 0xac, 0x98, 0xdb, 0x4d, 0x66, 0x73, + 0x22, 0xec, 0x26, 0xb3, 0x20, 0xe6, 0xa5, 0x3b, 0x90, 0xf7, 0xb9, 0x17, 0x54, 0x81, 0x4c, 0x1f, + 0x5b, 0x96, 0x7a, 0x8e, 0xa9, 0x37, 0xca, 0xc9, 0x4e, 0x53, 0x2a, 0x41, 0xc1, 0xef, 0x52, 0xa4, + 0xef, 0x04, 0x57, 0x92, 0x78, 0x0b, 0x22, 0xc9, 0xdd, 0xa3, 0x23, 0xc9, 0x9b, 0xe8, 0x36, 0x14, + 0xe9, 0x54, 0x14, 0xa7, 0x9f, 0xb8, 0xac, 0xa4, 0x5c, 0xa0, 0xc4, 0x13, 0xce, 0xb4, 0x06, 0x79, + 0xe3, 0xbe, 0xe1, 0xb2, 0x24, 0x28, 0x0b, 0x18, 0xf7, 0x0d, 0x87, 0xe1, 0x15, 0x28, 0x90, 0x79, + 0xbb, 0x1c, 0x49, 0xfa, 0x91, 0x3c, 0xa1, 0x71, 0x16, 0xe9, 0xef, 0x13, 0x20, 0x86, 0xdd, 0x10, + 0x7a, 0x1f, 0x92, 0xc4, 0x23, 0x73, 0xe7, 0x5a, 0xdd, 0x60, 0xee, 0x7a, 0xc3, 0x71, 0xd7, 0x1b, + 0x2d, 0xc7, 0x5d, 0x6f, 0x65, 0x7f, 0x78, 0xbe, 0x16, 0xfb, 0xee, 0xff, 0xd6, 0x04, 0x99, 0x4a, + 0xa0, 0xeb, 0xc4, 0xf9, 0xa8, 0xda, 0x40, 0xd1, 0x3a, 0x74, 0xc8, 0x39, 0xe2, 0x59, 0x54, 0x6d, + 0xb0, 0xd3, 0x41, 0x7b, 0x20, 0xb6, 0xf5, 0x81, 0x85, 0x07, 0xd6, 0xd0, 0x52, 0x58, 0xb8, 0xe0, + 0x2e, 0x35, 0xe0, 0x18, 0x59, 0x9c, 0xa8, 0x3b, 0x9c, 0x87, 0x94, 0x51, 0x2e, 0xb7, 0x83, 0x04, + 0xb4, 0x0f, 0xc5, 0x0b, 0xb5, 0xa7, 0x75, 0x54, 0x5b, 0x37, 0x15, 0x0b, 0xdb, 0xdc, 0xc7, 0xde, + 0x1e, 0xdb, 0xf3, 0x13, 0x87, 0xeb, 0x08, 0xdb, 0xc7, 0x46, 0x47, 0xb5, 0xf1, 0x56, 0xf2, 0x87, + 0xe7, 0x6b, 0x82, 0x5c, 0xb8, 0xf0, 0xf5, 0xa0, 0xd7, 0xa0, 0xac, 0x1a, 0x86, 0x62, 0xd9, 0xaa, + 0x8d, 0x95, 0xd3, 0x4b, 0x1b, 0x5b, 0xd4, 0xed, 0x16, 0xe4, 0xa2, 0x6a, 0x18, 0x47, 0x84, 0xba, + 0x45, 0x88, 0xe8, 0x55, 0x28, 0x11, 0x0f, 0xad, 0xa9, 0x3d, 0xa5, 0x8b, 0xb5, 0xf3, 0xae, 0x5d, + 0x49, 0xaf, 0x0b, 0x77, 0x13, 0x72, 0x91, 0x53, 0x9b, 0x94, 0x88, 0x36, 0x60, 0xd9, 0x61, 0x6b, + 0xeb, 0x26, 0x76, 0x78, 0x89, 0x3f, 0x2e, 0xca, 0x4b, 0xbc, 0xab, 0xae, 0x9b, 0x98, 0xf1, 0x4b, + 0x1d, 0xd7, 0x52, 0xa8, 0x37, 0x47, 0x08, 0x92, 0x1d, 0xd5, 0x56, 0xe9, 0x0e, 0x14, 0x64, 0xfa, + 0x9b, 0xd0, 0x0c, 0xd5, 0xee, 0xf2, 0x75, 0xa5, 0xbf, 0xd1, 0x55, 0x48, 0x73, 0xd5, 0x09, 0x3a, + 0x0c, 0xde, 0x42, 0x2b, 0x90, 0x32, 0x4c, 0xfd, 0x02, 0xd3, 0x65, 0xc9, 0xca, 0xac, 0x21, 0xc9, + 0x50, 0x0a, 0x7a, 0x7e, 0x54, 0x82, 0xb8, 0x3d, 0xe2, 0x5f, 0x89, 0xdb, 0x23, 0xf4, 0x36, 0x24, + 0xc9, 0x06, 0xd0, 0x6f, 0x94, 0x26, 0xc4, 0x3a, 0x2e, 0xd7, 0xba, 0x34, 0xb0, 0x4c, 0x39, 0xa5, + 0xab, 0xb0, 0x32, 0x29, 0x12, 0x48, 0x5d, 0x97, 0x1e, 0xf0, 0xe8, 0xe8, 0x5d, 0xc8, 0xba, 0xa1, + 0x80, 0xd9, 0xd7, 0xf5, 0xb1, 0xaf, 0x38, 0xcc, 0xb2, 0xcb, 0x4a, 0x0c, 0x8b, 0xec, 0x4f, 0x57, + 0xe5, 0xe1, 0xbb, 0x20, 0x67, 0x54, 0xc3, 0x68, 0xaa, 0x56, 0x57, 0x3a, 0x87, 0x4a, 0x94, 0x9b, + 0xf7, 0xad, 0x8f, 0x40, 0x4f, 0x87, 0xb3, 0x3e, 0xbe, 0x93, 0x17, 0xa7, 0x7b, 0xe2, 0x9e, 0x3c, + 0x6a, 0xc1, 0xc3, 0xc1, 0x53, 0x62, 0xc1, 0x09, 0xf6, 0x21, 0xda, 0xde, 0xe9, 0x48, 0x1d, 0xb8, + 0x1e, 0xe9, 0xf1, 0x03, 0x72, 0x42, 0x40, 0x8e, 0x6c, 0x06, 0x8b, 0x23, 0x6c, 0xe0, 0xac, 0x41, + 0x86, 0x66, 0xd1, 0x79, 0xd3, 0xcf, 0xe4, 0x64, 0xde, 0x92, 0x7e, 0x49, 0xc2, 0xd5, 0xc9, 0xce, + 0x1f, 0xad, 0x43, 0xa1, 0xaf, 0x8e, 0x14, 0x7b, 0xc4, 0x2d, 0x54, 0xa0, 0x7b, 0x0e, 0x7d, 0x75, + 0xd4, 0x1a, 0x31, 0xf3, 0x14, 0x21, 0x61, 0x8f, 0xac, 0x4a, 0x7c, 0x3d, 0x71, 0xb7, 0x20, 0x93, + 0x9f, 0xe8, 0x09, 0x2c, 0xf5, 0xf4, 0xb6, 0xda, 0x53, 0x7a, 0xaa, 0x65, 0x2b, 0x6d, 0xbd, 0xdf, + 0xd7, 0x6c, 0x7e, 0xee, 0x6e, 0x8c, 0x6f, 0x2f, 0xed, 0x26, 0xbe, 0x89, 0x1e, 0x92, 0x98, 0x5c, + 0xa6, 0xb2, 0x7b, 0xaa, 0x65, 0xb3, 0x2e, 0xb4, 0x0d, 0xf9, 0xbe, 0x66, 0x9d, 0xe2, 0xae, 0x7a, + 0xa1, 0xe9, 0x66, 0x25, 0xb9, 0x9e, 0x98, 0x98, 0x13, 0x3d, 0xf1, 0x78, 0xb8, 0x26, 0xbf, 0x98, + 0x6f, 0x5b, 0x52, 0x01, 0xb3, 0x75, 0x1c, 0x4f, 0x7a, 0x61, 0xc7, 0xf3, 0x36, 0xac, 0x0c, 0xf0, + 0xc8, 0x56, 0xdc, 0x43, 0x6d, 0x31, 0x5b, 0xc9, 0xd0, 0x25, 0x47, 0xa4, 0xcf, 0xf5, 0x04, 0x16, + 0x31, 0x1b, 0xb2, 0x2b, 0xa6, 0x3e, 0x1c, 0x74, 0x2a, 0xd9, 0x75, 0xe1, 0x6e, 0x4a, 0x66, 0x0d, + 0xf4, 0x10, 0x2a, 0xf4, 0xc0, 0x32, 0x2f, 0x46, 0xbc, 0x2d, 0xee, 0x38, 0xa7, 0x37, 0x47, 0x2d, + 0xe5, 0x0a, 0xe9, 0xa7, 0x7e, 0x72, 0x8f, 0xf6, 0xf2, 0x13, 0xbf, 0x09, 0x2b, 0x2c, 0xfa, 0x62, + 0x93, 0x84, 0x61, 0xb2, 0x49, 0x74, 0x00, 0x40, 0x07, 0xb0, 0xe4, 0xf4, 0x1d, 0x9a, 0x7a, 0x6b, + 0x44, 0xbf, 0xff, 0xb6, 0x2b, 0xd0, 0x51, 0x88, 0x69, 0x3b, 0xf6, 0x98, 0xa7, 0x86, 0x8a, 0x9c, + 0xbe, 0x9a, 0xe1, 0xba, 0xf3, 0x87, 0x9e, 0xd1, 0x16, 0xc6, 0x53, 0x42, 0xde, 0xe5, 0xb9, 0x4e, + 0xcf, 0xa6, 0xd7, 0x20, 0xff, 0xd5, 0x50, 0x37, 0x87, 0x7d, 0x36, 0xa4, 0x22, 0x1d, 0x12, 0x30, + 0x12, 0x3d, 0x42, 0xff, 0x96, 0xf2, 0xd9, 0x5c, 0x30, 0x0f, 0xe0, 0x16, 0x25, 0x78, 0x16, 0x75, + 0xe4, 0x1b, 0xb8, 0xdf, 0xa8, 0xe2, 0xf3, 0x1a, 0x95, 0x3b, 0xb7, 0x68, 0xbb, 0x4a, 0xfc, 0x3a, + 0xbb, 0x42, 0x90, 0xa4, 0x33, 0x4c, 0x32, 0xb7, 0x49, 0x7e, 0x47, 0xda, 0x9a, 0xbb, 0xff, 0x69, + 0xff, 0xfe, 0x3b, 0x16, 0x98, 0xf9, 0xcd, 0x2c, 0x30, 0x1b, 0x69, 0x81, 0xbf, 0xda, 0xd6, 0x5a, + 0x70, 0x35, 0x24, 0xa8, 0x0c, 0x69, 0x68, 0xa3, 0xd6, 0x16, 0x4a, 0xf8, 0x9d, 0x80, 0xea, 0x53, + 0x24, 0x2f, 0x07, 0xf4, 0xb2, 0xb0, 0x18, 0x69, 0xc1, 0xf9, 0x45, 0x2d, 0xb8, 0x30, 0x8f, 0x05, + 0x17, 0x5f, 0xc6, 0x82, 0x4b, 0x63, 0x16, 0x7c, 0x0c, 0x4b, 0x63, 0xa9, 0xa8, 0x6b, 0x0e, 0xc2, + 0x44, 0x73, 0x88, 0x4f, 0x36, 0x87, 0x84, 0xcf, 0x1c, 0xa4, 0x9f, 0x04, 0xa8, 0x46, 0x67, 0xa4, + 0x13, 0x3f, 0xf0, 0x0e, 0x5c, 0xf1, 0x32, 0x13, 0xff, 0x3a, 0x32, 0xef, 0x8f, 0xdc, 0x4e, 0x6f, + 0x21, 0xa7, 0x44, 0x71, 0x36, 0xa6, 0xa4, 0xdf, 0x44, 0x9f, 0x40, 0x39, 0x98, 0x4b, 0x93, 0x54, + 0x85, 0x1c, 0x97, 0x3f, 0x1b, 0x3b, 0x2e, 0xde, 0x5a, 0xb8, 0x63, 0x96, 0x4b, 0x17, 0xfe, 0xa6, + 0x25, 0xfd, 0x57, 0xdc, 0x8d, 0xd4, 0x81, 0xc4, 0x18, 0x7d, 0x00, 0x69, 0x7e, 0xb2, 0x85, 0x79, + 0x4f, 0x36, 0x17, 0x08, 0x9f, 0xe6, 0xf8, 0xcb, 0x9d, 0xe6, 0xc4, 0xc4, 0xed, 0x4b, 0x4e, 0x5e, + 0xaa, 0x94, 0x7f, 0xa9, 0xde, 0x82, 0x14, 0xbb, 0x11, 0xb0, 0x80, 0x72, 0x6d, 0xfc, 0x5c, 0xd0, + 0xa9, 0xca, 0x8c, 0x0b, 0xd5, 0x20, 0xcb, 0xb2, 0x6e, 0xad, 0xc3, 0x1d, 0xc0, 0xf5, 0x08, 0x89, + 0x9d, 0xed, 0xad, 0xfc, 0x8b, 0xe7, 0x6b, 0x19, 0xde, 0x90, 0x33, 0x54, 0x6e, 0xa7, 0x23, 0xfd, + 0x7b, 0x0e, 0xb2, 0x32, 0xb6, 0x0c, 0x62, 0xc2, 0x68, 0x0b, 0x72, 0x78, 0xd4, 0xc6, 0x86, 0xed, + 0x64, 0xf8, 0x93, 0x6f, 0x50, 0x8c, 0xbb, 0xe1, 0x70, 0x36, 0x63, 0xb2, 0x27, 0x86, 0x1e, 0x70, + 0xa0, 0x23, 0x1a, 0xb3, 0xe0, 0xe2, 0x7e, 0xa4, 0xe3, 0x3d, 0x07, 0xe9, 0x60, 0x81, 0x7e, 0x35, + 0x52, 0x2a, 0x04, 0x75, 0x3c, 0xe0, 0x50, 0x47, 0x72, 0xc6, 0xc7, 0x02, 0x58, 0x47, 0x3d, 0x80, + 0x75, 0xa4, 0x66, 0x4c, 0x33, 0x02, 0xec, 0x78, 0xcf, 0x01, 0x3b, 0xd2, 0x33, 0x46, 0x1c, 0x42, + 0x3b, 0xfe, 0x72, 0x0c, 0xed, 0x58, 0x8f, 0x14, 0x9d, 0x00, 0x77, 0x1c, 0x8c, 0xc1, 0x1d, 0x59, + 0xaa, 0xe4, 0xb5, 0x48, 0x25, 0x33, 0xf0, 0x8e, 0x83, 0x31, 0xbc, 0x23, 0x37, 0x43, 0xe1, 0x0c, + 0xc0, 0xe3, 0x6f, 0x27, 0x03, 0x1e, 0x10, 0x09, 0x49, 0xf0, 0x61, 0xce, 0x87, 0x78, 0x28, 0x11, + 0x88, 0x47, 0x3e, 0xf2, 0x76, 0xce, 0xd4, 0xcf, 0x0d, 0x79, 0x1c, 0x4f, 0x80, 0x3c, 0x58, 0xf2, + 0x72, 0x37, 0x52, 0xf9, 0x1c, 0x98, 0xc7, 0xf1, 0x04, 0xcc, 0xa3, 0x38, 0x53, 0xed, 0x4c, 0xd0, + 0xe3, 0x51, 0x10, 0xf4, 0x28, 0x45, 0xdc, 0x29, 0xbd, 0x23, 0x1b, 0x81, 0x7a, 0x9c, 0x46, 0xa1, + 0x1e, 0x0c, 0xed, 0x79, 0x33, 0x52, 0xe3, 0x02, 0xb0, 0xc7, 0xc1, 0x18, 0xec, 0x21, 0xce, 0xb0, + 0xb4, 0x39, 0x71, 0x0f, 0xe9, 0x75, 0x12, 0x4b, 0x43, 0x4e, 0x89, 0x38, 0x58, 0x6c, 0x9a, 0xba, + 0xc9, 0x91, 0x0a, 0xd6, 0x90, 0xee, 0x92, 0x7b, 0xab, 0xe7, 0x80, 0xa6, 0x60, 0x21, 0x65, 0x28, + 0x06, 0x9c, 0x8e, 0xf4, 0x2f, 0x82, 0x27, 0x4b, 0xd1, 0x10, 0xff, 0x9d, 0x37, 0xc7, 0xef, 0xbc, + 0xa1, 0x7b, 0x5a, 0x2e, 0x90, 0x11, 0xf8, 0x73, 0x0e, 0x0e, 0x7e, 0xa8, 0x5e, 0xae, 0x71, 0x0f, + 0x96, 0x68, 0x76, 0xca, 0x3c, 0x7a, 0x20, 0x68, 0x94, 0x49, 0x07, 0x5b, 0x05, 0x16, 0x3d, 0xde, + 0x82, 0x65, 0x1f, 0xaf, 0x7b, 0xd1, 0x64, 0x08, 0x80, 0xe8, 0x72, 0xd7, 0xf8, 0x8d, 0xf3, 0x3f, + 0x12, 0xde, 0x0a, 0x79, 0xa8, 0xc9, 0x24, 0x80, 0x43, 0xf8, 0xd5, 0x00, 0x47, 0xf4, 0x85, 0x17, + 0x7d, 0x06, 0x2b, 0x01, 0xec, 0xc3, 0x49, 0xfe, 0x12, 0x8b, 0x41, 0x20, 0x31, 0x5f, 0x2e, 0xe2, + 0xf6, 0xa0, 0xcf, 0xe1, 0x06, 0x4d, 0x63, 0x23, 0x12, 0xcc, 0xe4, 0x7c, 0x09, 0xe6, 0x35, 0xa2, + 0xa3, 0x3e, 0x21, 0xc9, 0x8c, 0x00, 0x46, 0x52, 0x11, 0xc0, 0x08, 0xda, 0x83, 0xc2, 0x39, 0x1e, + 0x60, 0x4b, 0xb3, 0x94, 0x05, 0x6e, 0x86, 0x02, 0xc9, 0xcb, 0x9b, 0x31, 0x39, 0xcf, 0x65, 0x49, + 0xef, 0x3f, 0x08, 0xc2, 0x56, 0x19, 0x8a, 0x8a, 0x5f, 0x9d, 0xf4, 0x3b, 0xc1, 0x33, 0x4b, 0x17, + 0x79, 0x69, 0xeb, 0x1d, 0x66, 0xbe, 0x45, 0x99, 0xfe, 0x26, 0x77, 0xa0, 0x9e, 0x7e, 0xce, 0x2d, + 0x90, 0xfc, 0x24, 0x5c, 0x6e, 0x4d, 0x20, 0xc7, 0xe3, 0xe0, 0x0a, 0xa4, 0xb4, 0x41, 0x07, 0x8f, + 0xb8, 0x91, 0xb1, 0x06, 0x91, 0x7d, 0x8a, 0x2f, 0xb9, 0x29, 0x91, 0x9f, 0x84, 0x8f, 0x9e, 0x33, + 0x3a, 0x97, 0x82, 0xcc, 0x1a, 0xe8, 0x7d, 0xc8, 0xd1, 0xc2, 0x8e, 0xa2, 0x1b, 0x16, 0x8f, 0x64, + 0x81, 0x84, 0x8b, 0x15, 0x61, 0x36, 0x0e, 0x09, 0xcf, 0x81, 0x61, 0xc9, 0x59, 0x83, 0xff, 0xf2, + 0xa5, 0x44, 0xd9, 0x40, 0x4a, 0x74, 0x13, 0x72, 0x64, 0xf4, 0x96, 0xa1, 0xb6, 0x31, 0x8d, 0x42, + 0x39, 0xd9, 0x23, 0x48, 0xff, 0x2a, 0x40, 0x39, 0x14, 0x18, 0x27, 0xce, 0xdd, 0x39, 0x95, 0xf1, + 0x20, 0x12, 0x35, 0x36, 0xfb, 0x5b, 0x00, 0xe7, 0xaa, 0xa5, 0x3c, 0x53, 0x07, 0x36, 0xee, 0xf0, + 0x25, 0xc8, 0x9d, 0xab, 0xd6, 0x27, 0x94, 0x10, 0x1c, 0x4c, 0x2a, 0x34, 0x18, 0x1f, 0x16, 0x92, + 0xf6, 0x63, 0x21, 0xa8, 0x0a, 0x59, 0xc3, 0xd4, 0x74, 0x53, 0xb3, 0x2f, 0xe9, 0x9a, 0x24, 0x64, + 0xb7, 0x2d, 0x1d, 0xc2, 0x95, 0x89, 0x31, 0x19, 0x3d, 0x84, 0x9c, 0x17, 0xce, 0x05, 0x9a, 0x7a, + 0x4e, 0x81, 0x98, 0x3c, 0x5e, 0xb2, 0x24, 0x57, 0x26, 0x46, 0x65, 0xd4, 0x80, 0xb4, 0x89, 0xad, + 0x61, 0x8f, 0xa5, 0xc2, 0xa5, 0xfb, 0x6f, 0xcd, 0x17, 0xcd, 0x09, 0x75, 0xd8, 0xb3, 0x65, 0x2e, + 0x2c, 0x7d, 0x01, 0x69, 0x46, 0x41, 0x79, 0xc8, 0x1c, 0xef, 0x3f, 0xde, 0x3f, 0xf8, 0x64, 0x5f, + 0x8c, 0x21, 0x80, 0x74, 0xad, 0x5e, 0x6f, 0x1c, 0xb6, 0x44, 0x01, 0xe5, 0x20, 0x55, 0xdb, 0x3a, + 0x90, 0x5b, 0x62, 0x9c, 0x90, 0xe5, 0xc6, 0x6e, 0xa3, 0xde, 0x12, 0x13, 0x68, 0x09, 0x8a, 0xec, + 0xb7, 0xf2, 0xe8, 0x40, 0x7e, 0x52, 0x6b, 0x89, 0x49, 0x1f, 0xe9, 0xa8, 0xb1, 0xbf, 0xdd, 0x90, + 0xc5, 0x94, 0xf4, 0x0e, 0x5c, 0x8f, 0x8c, 0xff, 0x1e, 0x0a, 0x25, 0xf8, 0x50, 0x28, 0xe9, 0xc7, + 0x38, 0xb9, 0xe0, 0x44, 0x05, 0x75, 0xb4, 0x1b, 0x9a, 0xf8, 0xfd, 0x05, 0x32, 0x82, 0xd0, 0xec, + 0xd1, 0xab, 0x50, 0x32, 0xf1, 0x19, 0xb6, 0xdb, 0x5d, 0x96, 0x64, 0x38, 0x30, 0x55, 0x91, 0x53, + 0xa9, 0x90, 0xc5, 0xd8, 0xbe, 0xc4, 0x6d, 0x5b, 0x61, 0x46, 0x60, 0x51, 0x30, 0x20, 0x47, 0xd8, + 0x08, 0xf5, 0x88, 0x11, 0x89, 0xff, 0x67, 0x7e, 0x8a, 0xa9, 0x4a, 0x52, 0x55, 0x40, 0xdd, 0x0e, + 0xa5, 0x48, 0xcf, 0x16, 0x5a, 0xec, 0x1c, 0xa4, 0xe4, 0x46, 0x4b, 0xfe, 0x54, 0x4c, 0x20, 0x04, + 0x25, 0xfa, 0x53, 0x39, 0xda, 0xaf, 0x1d, 0x1e, 0x35, 0x0f, 0xc8, 0x62, 0x2f, 0x43, 0xd9, 0x59, + 0x6c, 0x87, 0x98, 0x42, 0x57, 0x60, 0xa9, 0x7e, 0xf0, 0xe4, 0x70, 0xaf, 0xd1, 0x6a, 0x78, 0xe4, + 0xb4, 0xf4, 0x3f, 0x09, 0xb8, 0x16, 0x91, 0xca, 0xa0, 0xf7, 0x01, 0xec, 0x91, 0x62, 0xe2, 0xb6, + 0x6e, 0x76, 0xa2, 0x8d, 0xb3, 0x35, 0x92, 0x29, 0x87, 0x9c, 0xb3, 0xf9, 0xaf, 0xa9, 0xf1, 0xe0, + 0x23, 0xae, 0x94, 0x4c, 0xd6, 0xe2, 0xd0, 0xc9, 0xad, 0x09, 0x77, 0x41, 0xdc, 0x26, 0x8a, 0xe9, + 0x9e, 0x50, 0xc5, 0x94, 0x1f, 0x7d, 0x0a, 0xd7, 0x42, 0x61, 0x8b, 0xfb, 0x7a, 0x6b, 0x52, 0xdd, + 0x72, 0x72, 0xf4, 0xba, 0x12, 0x8c, 0x5e, 0xcc, 0xd7, 0x5b, 0x53, 0x70, 0x8a, 0xd4, 0x4b, 0xe0, + 0x14, 0x51, 0xe1, 0x2f, 0xbd, 0x68, 0x05, 0x60, 0x52, 0xf8, 0x0b, 0xa5, 0x15, 0x99, 0x70, 0x5a, + 0x21, 0xfd, 0x3e, 0xb0, 0xbb, 0xc1, 0xf4, 0xf1, 0x00, 0xd2, 0x96, 0xad, 0xda, 0x43, 0x8b, 0x9f, + 0x96, 0x87, 0xf3, 0xe6, 0xa2, 0x1b, 0xce, 0x8f, 0x23, 0x2a, 0x2e, 0x73, 0x35, 0x7f, 0x92, 0x9b, + 0x1e, 0xb5, 0x3d, 0xa9, 0xdf, 0x62, 0x7b, 0x9a, 0x90, 0xc6, 0x17, 0x78, 0x60, 0x5b, 0x95, 0x34, + 0x9d, 0xf1, 0xd5, 0xf1, 0x19, 0x93, 0xee, 0xad, 0x0a, 0xc9, 0x6f, 0xfe, 0xff, 0xf9, 0x9a, 0xc8, + 0xb8, 0xdf, 0xd4, 0xfb, 0x9a, 0x8d, 0xfb, 0x86, 0x7d, 0x29, 0x73, 0x79, 0xe9, 0x5d, 0x28, 0x05, + 0x17, 0x3d, 0xda, 0x4d, 0x78, 0x8e, 0x38, 0x2e, 0xfd, 0xb3, 0x00, 0xcb, 0x13, 0x50, 0x15, 0xf4, + 0x90, 0x17, 0x4e, 0xd8, 0xc6, 0xdf, 0x1e, 0x5f, 0xbd, 0x00, 0xbb, 0x57, 0x3f, 0x21, 0x81, 0xd1, + 0xbb, 0x1e, 0xb0, 0x3d, 0xf6, 0x08, 0xe8, 0x0d, 0x28, 0x5b, 0xda, 0xf9, 0x40, 0x31, 0x19, 0x40, + 0xe3, 0x16, 0x25, 0x48, 0xf6, 0x4e, 0x3a, 0x9c, 0xd2, 0x5d, 0x87, 0x64, 0x37, 0x08, 0x44, 0x25, + 0xc4, 0x2d, 0xb5, 0x01, 0x8d, 0xdf, 0x56, 0x26, 0x41, 0x48, 0xc2, 0x4b, 0x40, 0x48, 0xff, 0x24, + 0xc0, 0x8d, 0x29, 0x37, 0x18, 0xf4, 0x71, 0xe8, 0x5c, 0x7c, 0xb0, 0xc8, 0xfd, 0x67, 0x83, 0xd1, + 0x82, 0x27, 0x43, 0x7a, 0x00, 0x05, 0x3f, 0x7d, 0xbe, 0xcd, 0xdb, 0xf5, 0xe2, 0x7b, 0x10, 0xea, + 0xba, 0x0d, 0x45, 0x13, 0xdb, 0xc4, 0x49, 0x05, 0xb0, 0xc1, 0x02, 0x23, 0xb2, 0x54, 0x74, 0x37, + 0x99, 0x15, 0xc4, 0xb8, 0x6b, 0x3f, 0xff, 0x29, 0x00, 0x78, 0xf8, 0x97, 0x87, 0x3f, 0x09, 0x7e, + 0xfc, 0x29, 0x04, 0x5b, 0xc6, 0xc3, 0xb0, 0x25, 0xba, 0x03, 0x65, 0x76, 0xe7, 0x20, 0xfb, 0xa6, + 0xda, 0x43, 0x13, 0x73, 0xb4, 0xab, 0x44, 0xc9, 0x47, 0x0e, 0x15, 0x7d, 0x06, 0xd7, 0xed, 0xae, + 0x89, 0xad, 0xae, 0xde, 0xeb, 0x28, 0xe1, 0xbd, 0x63, 0x55, 0x98, 0xb5, 0x19, 0x46, 0x27, 0x5f, + 0x73, 0x35, 0x9c, 0x04, 0xf7, 0xef, 0x6b, 0x48, 0xd1, 0x63, 0x43, 0x12, 0x3b, 0xd7, 0x8a, 0x73, + 0xdc, 0x40, 0x3f, 0x07, 0x50, 0x6d, 0xdb, 0xd4, 0x4e, 0x87, 0xc4, 0x3b, 0xc4, 0xc7, 0x3f, 0xe5, + 0x1d, 0xbb, 0x9a, 0xc3, 0xb7, 0x75, 0x93, 0x9f, 0xbf, 0x15, 0x4f, 0xd4, 0x77, 0x06, 0x7d, 0x0a, + 0xa5, 0x7d, 0x28, 0x05, 0x65, 0x9d, 0x8c, 0x99, 0x8d, 0x21, 0x98, 0x31, 0xb3, 0x0c, 0x9c, 0x67, + 0xcc, 0x6e, 0xbe, 0x9d, 0x60, 0x35, 0x4e, 0xda, 0x90, 0x7e, 0x11, 0xa0, 0xe0, 0xf7, 0x7a, 0x73, + 0x27, 0xb5, 0x3c, 0xc9, 0x4f, 0x8c, 0x27, 0xf9, 0x49, 0x5f, 0x9a, 0x7b, 0x1d, 0xb2, 0x24, 0xcd, + 0x1d, 0x5a, 0xb8, 0xc3, 0x2b, 0xbf, 0x99, 0x73, 0xd5, 0x3a, 0xb6, 0x70, 0xc7, 0xe7, 0x9b, 0x32, + 0x2f, 0xe7, 0x9b, 0x82, 0xc9, 0x72, 0x36, 0x94, 0x2c, 0xef, 0x26, 0xb3, 0x29, 0x31, 0x2d, 0xfb, + 0xb2, 0x6d, 0xe9, 0x1b, 0x01, 0xb2, 0xee, 0x7c, 0x83, 0x25, 0xcf, 0x00, 0x42, 0xca, 0x96, 0x8b, + 0x15, 0x3c, 0xf9, 0xf5, 0x84, 0x15, 0x80, 0x13, 0x6e, 0x01, 0xf8, 0x43, 0x37, 0xe1, 0x8b, 0xc2, + 0x00, 0xfd, 0x8b, 0xeb, 0xc0, 0xbe, 0x3c, 0xbf, 0xfd, 0x47, 0x3e, 0x0e, 0x92, 0xb1, 0xa0, 0xbf, + 0x80, 0xb4, 0xda, 0x76, 0x91, 0xcf, 0xd2, 0x04, 0x48, 0xd0, 0x61, 0xdd, 0x68, 0x8d, 0x6a, 0x94, + 0x53, 0xe6, 0x12, 0x7c, 0x54, 0x71, 0x67, 0x54, 0xd2, 0x1e, 0xd1, 0xcb, 0x78, 0x82, 0x27, 0xbd, + 0x04, 0x70, 0xbc, 0xff, 0xe4, 0x60, 0x7b, 0xe7, 0xd1, 0x4e, 0x63, 0x9b, 0x67, 0x74, 0xdb, 0xdb, + 0x8d, 0x6d, 0x31, 0x4e, 0xf8, 0xe4, 0xc6, 0x93, 0x83, 0x93, 0xc6, 0xb6, 0x98, 0x20, 0x8d, 0xed, + 0xc6, 0x5e, 0xed, 0xd3, 0xc6, 0xb6, 0x98, 0x94, 0x6a, 0x90, 0x73, 0x83, 0x0e, 0xad, 0x94, 0xeb, + 0xcf, 0xb0, 0xc9, 0x57, 0x8b, 0x35, 0xd0, 0x2a, 0xe4, 0xc7, 0xa1, 0x7b, 0x72, 0x41, 0x63, 0x88, + 0x3d, 0x09, 0x03, 0x65, 0x57, 0x07, 0x8f, 0x4d, 0x1f, 0x42, 0xc6, 0x18, 0x9e, 0x2a, 0x8e, 0xed, + 0x86, 0x00, 0x6f, 0xe7, 0xfe, 0x36, 0x3c, 0xed, 0x69, 0xed, 0xc7, 0xf8, 0x92, 0x07, 0xb9, 0xb4, + 0x31, 0x3c, 0x7d, 0xcc, 0x4c, 0x9c, 0x0d, 0x23, 0x3e, 0x65, 0x18, 0x89, 0xd0, 0x30, 0xd0, 0x1d, + 0x28, 0x0c, 0xf4, 0x0e, 0x56, 0xd4, 0x4e, 0xc7, 0xc4, 0x16, 0x8b, 0xdd, 0x39, 0xae, 0x39, 0x4f, + 0x7a, 0x6a, 0xac, 0x43, 0xfa, 0x49, 0x00, 0x34, 0x1e, 0x68, 0xd1, 0x11, 0x2c, 0x79, 0xb1, 0xda, + 0x49, 0x00, 0x58, 0x24, 0x58, 0x8f, 0x0e, 0xd4, 0x01, 0x0c, 0x41, 0xbc, 0x08, 0x92, 0x49, 0xd6, + 0xb7, 0xe2, 0xb9, 0x2a, 0x83, 0xce, 0x97, 0x2e, 0x4a, 0x7c, 0xce, 0x45, 0x89, 0xc9, 0xc8, 0x95, + 0x77, 0x7b, 0xc2, 0xae, 0x34, 0x31, 0x56, 0x01, 0x32, 0xa0, 0xd2, 0x1a, 0x13, 0xe3, 0xf3, 0x8c, + 0x1a, 0x92, 0xf0, 0x32, 0x43, 0x92, 0x1e, 0x80, 0xf8, 0xb1, 0xfb, 0x7d, 0x2f, 0x7f, 0xf4, 0x0f, + 0x53, 0x18, 0x1b, 0xe6, 0x05, 0x64, 0x89, 0xf7, 0xa5, 0x41, 0xe3, 0xaf, 0x20, 0xe7, 0xae, 0x9e, + 0xfb, 0xd8, 0x26, 0x72, 0xd9, 0xf9, 0x48, 0x3c, 0x11, 0x74, 0x0f, 0x96, 0x48, 0xdc, 0x70, 0xea, + 0xb0, 0x0c, 0x05, 0x8c, 0x53, 0x6f, 0x58, 0x66, 0x1d, 0x7b, 0x0e, 0x74, 0x45, 0x62, 0xb4, 0xc8, + 0x62, 0x39, 0xee, 0xfc, 0x31, 0x06, 0x40, 0xee, 0x75, 0x21, 0x30, 0x94, 0xed, 0x61, 0x31, 0x90, + 0x4c, 0x48, 0x7f, 0x17, 0x87, 0xbc, 0xaf, 0x2e, 0x84, 0xfe, 0x3c, 0x90, 0x58, 0xad, 0x4f, 0xab, + 0x21, 0xf9, 0xb2, 0xaa, 0xc0, 0xc4, 0xe2, 0x8b, 0x4f, 0x2c, 0xaa, 0x22, 0xe7, 0x94, 0x87, 0x93, + 0x0b, 0x97, 0x87, 0xdf, 0x04, 0x64, 0xeb, 0xb6, 0xda, 0x23, 0xc1, 0x5b, 0x1b, 0x9c, 0x2b, 0xec, + 0xb4, 0xb3, 0x92, 0xb4, 0x48, 0x7b, 0x4e, 0x68, 0xc7, 0x21, 0xa1, 0x4b, 0x3d, 0xc8, 0xba, 0xe0, + 0xc3, 0xe2, 0x6f, 0x58, 0x26, 0x95, 0xc1, 0xab, 0x90, 0xed, 0x63, 0x5b, 0xa5, 0x61, 0x8f, 0x81, + 0x51, 0x6e, 0xfb, 0xde, 0x07, 0x90, 0xf7, 0x3d, 0xec, 0x21, 0x91, 0x70, 0xbf, 0xf1, 0x89, 0x18, + 0xab, 0x66, 0xbe, 0xfd, 0x7e, 0x3d, 0xb1, 0x8f, 0x9f, 0x91, 0x4f, 0xc9, 0x8d, 0x7a, 0xb3, 0x51, + 0x7f, 0x2c, 0x0a, 0xd5, 0xfc, 0xb7, 0xdf, 0xaf, 0x67, 0x64, 0x4c, 0x4b, 0x28, 0xf7, 0x1e, 0x43, + 0x39, 0xb4, 0x03, 0x41, 0x07, 0x8d, 0xa0, 0xb4, 0x7d, 0x7c, 0xb8, 0xb7, 0x53, 0xaf, 0xb5, 0x1a, + 0xca, 0xc9, 0x41, 0xab, 0x21, 0x0a, 0xe8, 0x1a, 0x2c, 0xef, 0xed, 0xfc, 0x75, 0xb3, 0xa5, 0xd4, + 0xf7, 0x76, 0x1a, 0xfb, 0x2d, 0xa5, 0xd6, 0x6a, 0xd5, 0xea, 0x8f, 0xc5, 0xf8, 0xfd, 0xff, 0x05, + 0x28, 0xd7, 0xb6, 0xea, 0x3b, 0x35, 0xc3, 0xe8, 0x69, 0x6d, 0x95, 0xba, 0xfb, 0x3a, 0x24, 0x29, + 0xb2, 0x3c, 0xf5, 0x89, 0x6f, 0x75, 0x7a, 0x5d, 0x0c, 0x3d, 0x82, 0x14, 0x05, 0x9d, 0xd1, 0xf4, + 0x37, 0xbf, 0xd5, 0x19, 0x85, 0x32, 0x32, 0x18, 0x7a, 0x6e, 0xa6, 0x3e, 0x02, 0xae, 0x4e, 0xaf, + 0x9b, 0xa1, 0x3d, 0xc8, 0x38, 0x80, 0xdb, 0xac, 0x97, 0xb9, 0xd5, 0x99, 0xc5, 0x2c, 0x32, 0x35, + 0x06, 0x5c, 0x4e, 0x7f, 0x1f, 0x5c, 0x9d, 0x51, 0x51, 0x43, 0x32, 0xe4, 0x3c, 0x28, 0x7b, 0xf6, + 0x53, 0xe5, 0xea, 0x1c, 0x15, 0x3e, 0xf4, 0x05, 0x14, 0x83, 0xd0, 0xdc, 0x7c, 0xaf, 0x88, 0xab, + 0x73, 0x56, 0xdf, 0x88, 0xfe, 0x20, 0x4e, 0x37, 0xdf, 0xab, 0xe2, 0xea, 0x9c, 0xc5, 0x38, 0xf4, + 0x25, 0x2c, 0x8d, 0xe3, 0x68, 0xf3, 0x3f, 0x32, 0xae, 0x2e, 0x50, 0x9e, 0x43, 0x7d, 0x40, 0x13, + 0xf0, 0xb7, 0x05, 0xde, 0x1c, 0x57, 0x17, 0xa9, 0xd6, 0xa1, 0x0e, 0x94, 0xc3, 0xd8, 0xd4, 0xbc, + 0x6f, 0x90, 0xab, 0x73, 0x57, 0xee, 0xd8, 0x57, 0x82, 0x18, 0xc9, 0xbc, 0x6f, 0x92, 0xab, 0x73, + 0x17, 0xf2, 0xd0, 0x31, 0x80, 0xef, 0x6e, 0x3b, 0xc7, 0x1b, 0xe5, 0xea, 0x3c, 0x25, 0x3d, 0x64, + 0xc0, 0xf2, 0xa4, 0xcb, 0xec, 0x22, 0x4f, 0x96, 0xab, 0x0b, 0x55, 0xfa, 0x88, 0x3d, 0x07, 0xef, + 0xa5, 0xf3, 0x3d, 0x61, 0xae, 0xce, 0x59, 0xf2, 0xdb, 0xda, 0xfa, 0xe1, 0xc5, 0xaa, 0xf0, 0xe3, + 0x8b, 0x55, 0xe1, 0xa7, 0x17, 0xab, 0xc2, 0x77, 0x3f, 0xaf, 0xc6, 0x7e, 0xfc, 0x79, 0x35, 0xf6, + 0xdf, 0x3f, 0xaf, 0xc6, 0xfe, 0xe6, 0xee, 0xb9, 0x66, 0x77, 0x87, 0xa7, 0x1b, 0x6d, 0xbd, 0x4f, + 0xff, 0x41, 0x62, 0xa8, 0x97, 0x9b, 0x4c, 0x27, 0x69, 0xf9, 0xfe, 0xa7, 0x72, 0x9a, 0xa6, 0xb1, + 0xee, 0xc1, 0x1f, 0x02, 0x00, 0x00, 0xff, 0xff, 0x0d, 0x71, 0x2a, 0xdd, 0xc7, 0x32, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -6899,6 +6937,15 @@ func (m *ResponseInitChain) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.XGenesisTime != nil { + { + size := m.XGenesisTime.Size() + i -= size + if _, err := m.XGenesisTime.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + } + } if m.InitialCoreHeight != 0 { i = encodeVarintTypes(dAtA, i, uint64(m.InitialCoreHeight)) i-- @@ -6948,6 +6995,25 @@ func (m *ResponseInitChain) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *ResponseInitChain_GenesisTime) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ResponseInitChain_GenesisTime) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + if m.GenesisTime != nil { + n49, err49 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.GenesisTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.GenesisTime):]) + if err49 != nil { + return 0, err49 + } + i -= n49 + i = encodeVarintTypes(dAtA, i, uint64(n49)) + i-- + dAtA[i] = 0x32 + } + return len(dAtA) - i, nil +} func (m *ResponseQuery) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -8219,12 +8285,12 @@ func (m *Misbehavior) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x28 } - n61, err61 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Time):]) - if err61 != nil { - return 0, err61 + n62, err62 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Time):]) + if err62 != nil { + return 0, err62 } - i -= n61 - i = encodeVarintTypes(dAtA, i, uint64(n61)) + i -= n62 + i = encodeVarintTypes(dAtA, i, uint64(n62)) i-- dAtA[i] = 0x22 if m.Height != 0 { @@ -9172,9 +9238,24 @@ func (m *ResponseInitChain) Size() (n int) { if m.InitialCoreHeight != 0 { n += 1 + sovTypes(uint64(m.InitialCoreHeight)) } + if m.XGenesisTime != nil { + n += m.XGenesisTime.Size() + } return n } +func (m *ResponseInitChain_GenesisTime) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.GenesisTime != nil { + l = github_com_gogo_protobuf_types.SizeOfStdTime(*m.GenesisTime) + n += 1 + l + sovTypes(uint64(l)) + } + return n +} func (m *ResponseQuery) Size() (n int) { if m == nil { return 0 @@ -14243,6 +14324,41 @@ func (m *ResponseInitChain) Unmarshal(dAtA []byte) error { break } } + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field GenesisTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := new(time.Time) + if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(v, dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.XGenesisTime = &ResponseInitChain_GenesisTime{v} + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTypes(dAtA[iNdEx:]) diff --git a/dash/core/client.go b/dash/core/client.go index 9752be7174..e012d428ef 100644 --- a/dash/core/client.go +++ b/dash/core/client.go @@ -172,13 +172,13 @@ func (rpcClient *RPCClient) QuorumSign( if err := quorumType.Validate(); err != nil { return nil, err } - quorumSignResultWithBool, err := rpcClient.endpoint.QuorumSign( - quorumType, + quorumSignResultWithBool, err := rpcClient.endpoint.QuorumPlatformSign( requestID.String(), messageHash.String(), quorumHash.String(), false, ) + rpcClient.logger.Trace("core rpc call QuorumSign", "quorumType", quorumType, "requestID", requestID.String(), @@ -192,7 +192,15 @@ func (rpcClient *RPCClient) QuorumSign( if quorumSignResultWithBool == nil { return nil, err } + + // as QuorumPlatformSign does not provide the quorum type, we need to check it manually + // to ensure we deliver what was requested by the caller quorumSignResult := quorumSignResultWithBool.QuorumSignResult + if quorumType != btcjson.LLMQType(quorumSignResult.LLMQType) { + return nil, fmt.Errorf("possible misconfiguration: quorum platform sign uses unexpected quorum type %d, expected %d", + quorumSignResultWithBool.LLMQType, quorumType) + } + return &quorumSignResult, err } diff --git a/dash/quorum/validator_conn_executor.go b/dash/quorum/validator_conn_executor.go index ffad0b475b..5bb7a56384 100644 --- a/dash/quorum/validator_conn_executor.go +++ b/dash/quorum/validator_conn_executor.go @@ -15,6 +15,7 @@ import ( "github.com/dashpay/tenderdash/internal/eventbus" "github.com/dashpay/tenderdash/internal/p2p" tmpubsub "github.com/dashpay/tenderdash/internal/pubsub" + "github.com/dashpay/tenderdash/internal/state" tmbytes "github.com/dashpay/tenderdash/libs/bytes" "github.com/dashpay/tenderdash/libs/log" "github.com/dashpay/tenderdash/libs/service" @@ -62,6 +63,9 @@ type ValidatorConnExecutor struct { // mux is a mutex to ensure only one goroutine is processing connections mux sync.Mutex + // state store used on start to setup initial validators + stateStore state.Store + // *** configuration *** // // EventBusCapacity sets event bus buffer capacity, defaults to 10 @@ -120,6 +124,15 @@ func WithValidatorsSet(valSet *types.ValidatorSet) func(vc *ValidatorConnExecuto } } +// WithStateStore sets state store to be used when setting up initial validators +// Can be nil, in which case no initial validators will be set up. +func WithStateStore(store state.Store) func(vc *ValidatorConnExecutor) error { + return func(vc *ValidatorConnExecutor) error { + vc.stateStore = store + return nil + } +} + // WithLogger sets a logger func WithLogger(logger log.Logger) func(vc *ValidatorConnExecutor) error { return func(vc *ValidatorConnExecutor) error { @@ -130,6 +143,22 @@ func WithLogger(logger log.Logger) func(vc *ValidatorConnExecutor) error { // OnStart implements Service to subscribe to Validator Update events func (vc *ValidatorConnExecutor) OnStart(ctx context.Context) error { + // initial setup of validators, if state store is provided + if vc.stateStore != nil { + valset, err := vc.stateStore.Load() + if err != nil { + return fmt.Errorf("cannot load initial state from state store: %w", err) + } + if err = vc.handleValidatorUpdateEvent(types.EventDataValidatorSetUpdate{ + ValidatorSetUpdates: valset.Validators.Validators, + ThresholdPublicKey: valset.Validators.ThresholdPublicKey, + QuorumHash: valset.Validators.QuorumHash, + }); err != nil { + // not fatal, but we should log it + vc.logger.Warn("cannot handle initial validator set, skipping", "err", err) + } + } + if err := vc.subscribe(); err != nil { return err } @@ -184,7 +213,7 @@ func (vc *ValidatorConnExecutor) subscribe() error { // receiveEvents processes received events and executes all the logic. // Returns non-nil error only if fatal error occurred and the main goroutine should be terminated. func (vc *ValidatorConnExecutor) receiveEvents(ctx context.Context) error { - vc.logger.Debug("ValidatorConnExecutor: waiting for an event") + vc.logger.Trace("ValidatorConnExecutor: waiting for an event") sCtx, cancel := context.WithCancel(ctx) // TODO check value for correctness defer cancel() msg, err := vc.subscription.Next(sCtx) @@ -202,7 +231,7 @@ func (vc *ValidatorConnExecutor) receiveEvents(ctx context.Context) error { vc.logger.Error("cannot handle validator update", "error", err) return nil // non-fatal, so no error returned to continue the loop } - vc.logger.Debug("validator updates processed successfully", "event", event) + vc.logger.Trace("validator updates processed successfully", "event", event) return nil } @@ -264,7 +293,7 @@ func (vc *ValidatorConnExecutor) resolveNodeID(va *types.ValidatorAddress) error va.NodeID = address.NodeID return nil // success } - vc.logger.Debug( + vc.logger.Trace( "warning: validator node id lookup method failed", "url", va.String(), "method", method, @@ -305,7 +334,7 @@ func (vc *ValidatorConnExecutor) ensureValidatorsHaveNodeIDs(validators []*types for _, validator := range validators { err := vc.resolveNodeID(&validator.NodeAddress) if err != nil { - vc.logger.Error("cannot determine node id for validator, skipping", "url", validator.String(), "error", err) + vc.logger.Warn("cannot determine node id for validator, skipping", "url", validator.String(), "error", err) continue } results = append(results, validator) @@ -318,7 +347,7 @@ func (vc *ValidatorConnExecutor) disconnectValidator(validator types.Validator) return err } id := validator.NodeAddress.NodeID - vc.logger.Debug("disconnecting Validator", "validator", validator, "id", id, "address", validator.NodeAddress.String()) + vc.logger.Trace("disconnecting Validator", "validator", validator, "id", id, "address", validator.NodeAddress.String()) if err := vc.dialer.DisconnectAsync(id); err != nil { return err } @@ -337,7 +366,7 @@ func (vc *ValidatorConnExecutor) disconnectValidators(exceptions validatorMap) e vc.logger.Error("cannot disconnect Validator", "error", err) continue } - vc.logger.Debug("Validator already disconnected", "error", err) + vc.logger.Trace("Validator already disconnected", "error", err) // We still delete the validator from vc.connectedValidators } delete(vc.connectedValidators, currentKey) @@ -373,11 +402,11 @@ func (vc *ValidatorConnExecutor) updateConnections() error { if err := vc.disconnectValidators(newValidators); err != nil { return fmt.Errorf("cannot disconnect unused validators: %w", err) } - vc.logger.Debug("filtering validators", "validators", newValidators.String()) + vc.logger.Trace("filtering validators", "validators", newValidators.String()) // ensure that we can connect to all validators newValidators = vc.filterAddresses(newValidators) // Connect to new validators - vc.logger.Debug("dialing validators", "validators", newValidators.String()) + vc.logger.Trace("dialing validators", "validators", newValidators.String()) if err := vc.dial(newValidators); err != nil { return fmt.Errorf("cannot dial validators: %w", err) } @@ -390,20 +419,20 @@ func (vc *ValidatorConnExecutor) filterAddresses(validators validatorMap) valida filtered := make(validatorMap, len(validators)) for id, validator := range validators { if vc.proTxHash != nil && string(id) == vc.proTxHash.String() { - vc.logger.Debug("validator is ourself", "id", id, "address", validator.NodeAddress.String()) + vc.logger.Trace("validator is ourself", "id", id, "address", validator.NodeAddress.String()) continue } if err := validator.ValidateBasic(); err != nil { - vc.logger.Debug("validator address is invalid", "id", id, "address", validator.NodeAddress.String()) + vc.logger.Warn("validator address is invalid", "id", id, "address", validator.NodeAddress.String()) continue } if vc.connectedValidators.contains(validator) { - vc.logger.Debug("validator already connected", "id", id) + vc.logger.Trace("validator already connected", "id", id) continue } if vc.dialer.IsDialingOrConnected(validator.NodeAddress.NodeID) { - vc.logger.Debug("already dialing this validator", "id", id, "address", validator.NodeAddress.String()) + vc.logger.Trace("already dialing this validator", "id", id, "address", validator.NodeAddress.String()) continue } diff --git a/go.mod b/go.mod index 7afcfdc826..ca977753f8 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce github.com/containerd/continuity v0.3.0 // indirect github.com/dashpay/bls-signatures/go-bindings v0.0.0-20230207105415-06df92693ac8 - github.com/dashpay/dashd-go v0.24.1 + github.com/dashpay/dashd-go v0.25.0 github.com/dashpay/dashd-go/btcec/v2 v2.1.0 // indirect github.com/fortytw2/leaktest v1.3.0 github.com/fxamacker/cbor/v2 v2.4.0 @@ -32,22 +32,22 @@ require ( github.com/oasisprotocol/curve25519-voi v0.0.0-20220708102147-0a8a51822cae github.com/ory/dockertest v3.3.5+incompatible github.com/prometheus/client_golang v1.13.0 - github.com/rs/cors v1.10.1 + github.com/rs/cors v1.11.0 github.com/rs/zerolog v1.29.0 github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa - github.com/spf13/cobra v1.8.0 + github.com/spf13/cobra v1.8.1 github.com/spf13/viper v1.15.0 github.com/stretchr/testify v1.9.0 github.com/tendermint/tm-db v0.6.6 - golang.org/x/crypto v0.21.0 - golang.org/x/net v0.22.0 - golang.org/x/sync v0.6.0 - google.golang.org/grpc v1.63.0 + golang.org/x/crypto v0.25.0 + golang.org/x/net v0.27.0 + golang.org/x/sync v0.7.0 + google.golang.org/grpc v1.64.1 pgregory.net/rapid v0.4.8 ) require ( - github.com/bufbuild/buf v1.30.1 + github.com/bufbuild/buf v1.35.1 github.com/creachadair/atomicfile v0.2.6 github.com/creachadair/taskgroup v0.3.2 github.com/go-pkgz/jrpc v0.2.0 @@ -57,9 +57,11 @@ require ( require ( 4d63.com/gocheckcompilerdirectives v1.2.1 // indirect - buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.33.0-20240221180331-f05a6f4403ce.1 // indirect - connectrpc.com/connect v1.16.0 // indirect - connectrpc.com/otelconnect v0.7.0 // indirect + buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.34.2-20240717164558-a6c49f84cc0f.2 // indirect + buf.build/gen/go/bufbuild/registry/connectrpc/go v1.16.2-20240723163933-aa5836eeaf8d.1 // indirect + buf.build/gen/go/bufbuild/registry/protocolbuffers/go v1.34.2-20240723163933-aa5836eeaf8d.2 // indirect + connectrpc.com/connect v1.16.2 // indirect + connectrpc.com/otelconnect v0.7.1 // indirect dario.cat/mergo v1.0.0 // indirect github.com/4meepo/tagalign v1.3.3 // indirect github.com/Abirdcfly/dupword v0.0.13 // indirect @@ -68,13 +70,14 @@ require ( github.com/OpenPeeDeeP/depguard/v2 v2.1.0 // indirect github.com/alecthomas/go-check-sumtype v0.1.3 // indirect github.com/alexkohler/nakedret/v2 v2.0.2 // indirect - github.com/antlr4-go/antlr/v4 v4.13.0 // indirect + github.com/antlr4-go/antlr/v4 v4.13.1 // indirect github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f // indirect github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd // indirect github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792 // indirect - github.com/bufbuild/protocompile v0.9.0 // indirect - github.com/bufbuild/protovalidate-go v0.6.0 // indirect - github.com/bufbuild/protoyaml-go v0.1.8 // indirect + github.com/bufbuild/protocompile v0.14.0 // indirect + github.com/bufbuild/protoplugin v0.0.0-20240323223605-e2735f6c31ee // indirect + github.com/bufbuild/protovalidate-go v0.6.3 // indirect + github.com/bufbuild/protoyaml-go v0.1.9 // indirect github.com/butuzov/mirror v1.1.0 // indirect github.com/catenacyber/perfsprint v0.2.0 // indirect github.com/ccojocar/zxcvbn-go v1.0.1 // indirect @@ -86,25 +89,27 @@ require ( github.com/didip/tollbooth/v6 v6.0.1 // indirect github.com/didip/tollbooth_chi v0.0.0-20200524181329-8b84cd7183d9 // indirect github.com/distribution/reference v0.6.0 // indirect - github.com/docker/cli v26.0.0+incompatible // indirect + github.com/docker/cli v27.1.1+incompatible // indirect github.com/docker/distribution v2.8.3+incompatible // indirect - github.com/docker/docker v26.0.0+incompatible // indirect - github.com/docker/docker-credential-helpers v0.8.1 // indirect + github.com/docker/docker v27.1.1+incompatible // indirect + github.com/docker/docker-credential-helpers v0.8.2 // indirect github.com/felixge/fgprof v0.9.4 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/ghostiam/protogetter v0.2.3 // indirect - github.com/go-chi/chi/v5 v5.0.12 // indirect + github.com/go-chi/chi/v5 v5.1.0 // indirect github.com/go-chi/render v1.0.1 // indirect - github.com/go-logr/logr v1.4.1 // indirect + github.com/go-logr/logr v1.4.2 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/go-pkgz/expirable-cache v0.0.3 // indirect github.com/go-pkgz/rest v1.5.0 // indirect - github.com/gofrs/uuid/v5 v5.0.0 // indirect + github.com/go-viper/mapstructure/v2 v2.0.0 // indirect + github.com/gofrs/uuid/v5 v5.2.0 // indirect github.com/golang/glog v1.2.0 // indirect github.com/google/cel-go v0.20.1 // indirect - github.com/google/go-containerregistry v0.19.1 // indirect + github.com/google/go-containerregistry v0.20.1 // indirect github.com/google/gofuzz v1.2.0 // indirect - github.com/google/pprof v0.0.0-20240327155427-868f304927ed // indirect + github.com/google/pprof v0.0.0-20240722153945-304e4f0156b8 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 // indirect github.com/huandu/xstrings v1.4.0 // indirect github.com/iancoleman/strcase v0.2.0 // indirect github.com/jdx/go-netrc v1.0.0 // indirect @@ -130,16 +135,15 @@ require ( github.com/xen0n/gosmopolitan v1.2.2 // indirect github.com/ykadowak/zerologlint v0.1.3 // indirect go-simpler.org/sloglint v0.1.2 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect - go.opentelemetry.io/otel v1.24.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0 // indirect + go.opentelemetry.io/otel v1.28.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.4.1 // indirect - go.opentelemetry.io/otel/metric v1.24.0 // indirect - go.opentelemetry.io/otel/sdk v1.24.0 // indirect - go.opentelemetry.io/otel/trace v1.24.0 // indirect - go.opentelemetry.io/proto/otlp v0.12.0 // indirect + go.opentelemetry.io/otel/metric v1.28.0 // indirect + go.opentelemetry.io/otel/sdk v1.28.0 // indirect + go.opentelemetry.io/otel/trace v1.28.0 // indirect go.tmz.dev/musttag v0.7.2 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20240325203815-454cdb8f5daa // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240325203815-454cdb8f5daa // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240723171418-e6d459c13d2a // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240723171418-e6d459c13d2a // indirect ) require ( @@ -150,7 +154,7 @@ require ( github.com/DataDog/zstd v1.4.5 // indirect github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24 // indirect github.com/Masterminds/semver v1.5.0 // indirect - github.com/Microsoft/go-winio v0.6.1 // indirect + github.com/Microsoft/go-winio v0.6.2 // indirect github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 // indirect github.com/alexkohler/prealloc v1.0.0 // indirect github.com/alingse/asasalint v0.0.11 // indirect @@ -223,7 +227,7 @@ require ( github.com/julz/importas v0.1.0 // indirect github.com/kisielk/errcheck v1.6.3 // indirect github.com/kisielk/gotool v1.0.0 // indirect - github.com/klauspost/compress v1.17.7 // indirect + github.com/klauspost/compress v1.17.9 // indirect github.com/klauspost/pgzip v1.2.6 // indirect github.com/kulti/thelper v0.6.3 // indirect github.com/kunwardeep/paralleltest v1.0.8 // indirect @@ -300,12 +304,12 @@ require ( go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect golang.org/x/exp/typeparams v0.0.0-20230307190834-24139beb5833 // indirect - golang.org/x/mod v0.16.0 // indirect - golang.org/x/sys v0.18.0 // indirect - golang.org/x/term v0.18.0 - golang.org/x/text v0.14.0 // indirect - golang.org/x/tools v0.19.0 // indirect - google.golang.org/protobuf v1.33.0 // indirect + golang.org/x/mod v0.19.0 // indirect + golang.org/x/sys v0.22.0 // indirect + golang.org/x/term v0.22.0 + golang.org/x/text v0.16.0 // indirect + golang.org/x/tools v0.23.0 // indirect + google.golang.org/protobuf v1.34.2 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect @@ -324,6 +328,6 @@ require ( github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 github.com/tendermint/go-amino v0.16.0 github.com/tyler-smith/go-bip39 v1.1.0 - golang.org/x/exp v0.0.0-20240325151524-a685a6edb6d8 + golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 golang.org/x/time v0.5.0 ) diff --git a/go.sum b/go.sum index 2139ab461e..cfa3928543 100644 --- a/go.sum +++ b/go.sum @@ -2,8 +2,12 @@ 4d63.com/gocheckcompilerdirectives v1.2.1/go.mod h1:yjDJSxmDTtIHHCqX0ufRYZDL6vQtMG7tJdKVeWwsqvs= 4d63.com/gochecknoglobals v0.2.1 h1:1eiorGsgHOFOuoOiJDy2psSrQbRdIHrlge0IJIkUgDc= 4d63.com/gochecknoglobals v0.2.1/go.mod h1:KRE8wtJB3CXCsb1xy421JfTHIIbmT3U5ruxw2Qu8fSU= -buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.33.0-20240221180331-f05a6f4403ce.1 h1:0nWhrRcnkgw1kwJ7xibIO8bqfOA7pBzBjGCDBxIHch8= -buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.33.0-20240221180331-f05a6f4403ce.1/go.mod h1:Tgn5bgL220vkFOI0KPStlcClPeOJzAv4uT+V8JXGUnw= +buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.34.2-20240717164558-a6c49f84cc0f.2 h1:SZRVx928rbYZ6hEKUIN+vtGDkl7uotABRWGY4OAg5gM= +buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.34.2-20240717164558-a6c49f84cc0f.2/go.mod h1:ylS4c28ACSI59oJrOdW4pHS4n0Hw4TgSPHn8rpHl4Yw= +buf.build/gen/go/bufbuild/registry/connectrpc/go v1.16.2-20240723163933-aa5836eeaf8d.1 h1:KVuCjYvvLCRFauVmXSGYQPdcSzzOMMsYrr01DYpI/+4= +buf.build/gen/go/bufbuild/registry/connectrpc/go v1.16.2-20240723163933-aa5836eeaf8d.1/go.mod h1:lAy2iG76hqz5AtMLglcGk+Ar9eHZ1HWqvssdp3DBhsk= +buf.build/gen/go/bufbuild/registry/protocolbuffers/go v1.34.2-20240723163933-aa5836eeaf8d.2 h1:6gCcD/yXj6DAJKE0D+UEB1bRITZ36K4WnstdviCCss0= +buf.build/gen/go/bufbuild/registry/protocolbuffers/go v1.34.2-20240723163933-aa5836eeaf8d.2/go.mod h1:psseUmlKRo9v5LZJtR/aTpdTLuyp9o3X7rnLT87SZEo= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= @@ -41,10 +45,10 @@ cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohl cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= -connectrpc.com/connect v1.16.0 h1:rdtfQjZ0OyFkWPTegBNcH7cwquGAN1WzyJy80oFNibg= -connectrpc.com/connect v1.16.0/go.mod h1:XpZAduBQUySsb4/KO5JffORVkDI4B6/EYPi7N8xpNZw= -connectrpc.com/otelconnect v0.7.0 h1:ZH55ZZtcJOTKWWLy3qmL4Pam4RzRWBJFOqTPyAqCXkY= -connectrpc.com/otelconnect v0.7.0/go.mod h1:Bt2ivBymHZHqxvo4HkJ0EwHuUzQN6k2l0oH+mp/8nwc= +connectrpc.com/connect v1.16.2 h1:ybd6y+ls7GOlb7Bh5C8+ghA6SvCBajHwxssO2CGFjqE= +connectrpc.com/connect v1.16.2/go.mod h1:n2kgwskMHXC+lVqb18wngEpF95ldBHXjZYJussz5FRc= +connectrpc.com/otelconnect v0.7.1 h1:scO5pOb0i4yUE66CnNrHeK1x51yq0bE0ehPg6WvzXJY= +connectrpc.com/otelconnect v0.7.1/go.mod h1:dh3bFgHBTb2bkqGCeVVOtHJreSns7uu9wwL2Tbz17ms= dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= @@ -75,8 +79,8 @@ github.com/GaijinEntertainment/go-exhaustruct/v3 v3.1.0 h1:3ZBs7LAezy8gh0uECsA6C github.com/GaijinEntertainment/go-exhaustruct/v3 v3.1.0/go.mod h1:rZLTje5A9kFBe0pzhpe2TdhRniBF++PRHQuRpR8esVc= github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= -github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= -github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= +github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= +github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= @@ -106,8 +110,8 @@ github.com/alexkohler/prealloc v1.0.0/go.mod h1:VetnK3dIgFBBKmg0YnD9F9x6Icjd+9cv github.com/alingse/asasalint v0.0.11 h1:SFwnQXJ49Kx/1GghOFz1XGqHYKp21Kq1nHad/0WQRnw= github.com/alingse/asasalint v0.0.11/go.mod h1:nCaoMhw7a9kSJObvQyVzNTPBDbNpdocqrSP7t/cW5+I= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/antlr4-go/antlr/v4 v4.13.0 h1:lxCg3LAv+EUK6t1i0y1V6/SLeUi0eKEKdhQAlS8TVTI= -github.com/antlr4-go/antlr/v4 v4.13.0/go.mod h1:pfChB/xh/Unjila75QW7+VU4TSnWnnk9UTnmpPaOR2g= +github.com/antlr4-go/antlr/v4 v4.13.1 h1:SqQKkuVZ+zWkMMNkjy5FZe5mr5WURWnlpmOuzYWrPrQ= +github.com/antlr4-go/antlr/v4 v4.13.1/go.mod h1:GKmUxMtwp6ZgGwZSva4eWPC5mS6vUAmOABFgjdkM7Nw= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/ashanbrown/forbidigo v1.6.0 h1:D3aewfM37Yb3pxHujIPSpTf6oQk9sc9WZi8gerOIVIY= github.com/ashanbrown/forbidigo v1.6.0/go.mod h1:Y8j9jy9ZYAEHXdu723cUlraTqbzjKF1MUyfOKL+AjcU= @@ -144,14 +148,16 @@ github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792 h1:R8vQdOQdZ9Y3SkEwmHoWBmX1DNXhXZqlTpq6s4tyJGc= github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= -github.com/bufbuild/buf v1.30.1 h1:QFtanwsXodoGFAwzXFXGXpzBkb7N2u8ZDyA3jWB4Pbs= -github.com/bufbuild/buf v1.30.1/go.mod h1:7W8DJnj76wQa55EA3z2CmDxS0/nsHh8FqtE00dyDAdA= -github.com/bufbuild/protocompile v0.9.0 h1:DI8qLG5PEO0Mu1Oj51YFPqtx6I3qYXUAhJVJ/IzAVl0= -github.com/bufbuild/protocompile v0.9.0/go.mod h1:s89m1O8CqSYpyE/YaSGtg1r1YFMF5nLTwh4vlj6O444= -github.com/bufbuild/protovalidate-go v0.6.0 h1:Jgs1kFuZ2LHvvdj8SpCLA1W/+pXS8QSM3F/E2l3InPY= -github.com/bufbuild/protovalidate-go v0.6.0/go.mod h1:1LamgoYHZ2NdIQH0XGczGTc6Z8YrTHjcJVmiBaar4t4= -github.com/bufbuild/protoyaml-go v0.1.8 h1:X9QDLfl9uEllh4gsXUGqPanZYCOKzd92uniRtW2OnAQ= -github.com/bufbuild/protoyaml-go v0.1.8/go.mod h1:R8vE2+l49bSiIExP4VJpxOXleHE+FDzZ6HVxr3cYunw= +github.com/bufbuild/buf v1.35.1 h1:aiCi/YFOg7eXKZeveWb2ZhnmLFwUMM/FnDCM0roFp+M= +github.com/bufbuild/buf v1.35.1/go.mod h1:SM7b5QW3FkQPNkkqIa/9UWzLOoe51la+GGZpEgH9b68= +github.com/bufbuild/protocompile v0.14.0 h1:z3DW4IvXE5G/uTOnSQn+qwQQxvhckkTWLS/0No/o7KU= +github.com/bufbuild/protocompile v0.14.0/go.mod h1:N6J1NYzkspJo3ZwyL4Xjvli86XOj1xq4qAasUFxGups= +github.com/bufbuild/protoplugin v0.0.0-20240323223605-e2735f6c31ee h1:E6ET8YUcYJ1lAe6ctR3as7yqzW2BNItDFnaB5zQq/8M= +github.com/bufbuild/protoplugin v0.0.0-20240323223605-e2735f6c31ee/go.mod h1:HjGFxsck9RObrTJp2hXQZfWhPgZqnR6sR1U5fCA/Kus= +github.com/bufbuild/protovalidate-go v0.6.3 h1:wxQyzW035zM16Binbaz/nWAzS12dRIXhZdSUWRY7Fv0= +github.com/bufbuild/protovalidate-go v0.6.3/go.mod h1:J4PtwP9Z2YAGgB0+o+tTWEDtLtXvz/gfhFZD8pbzM/U= +github.com/bufbuild/protoyaml-go v0.1.9 h1:anV5UtF1Mlvkkgp4NWA6U/zOnJFng8Orq4Vf3ZUQHBU= +github.com/bufbuild/protoyaml-go v0.1.9/go.mod h1:KCBItkvZOK/zwGueLdH1Wx1RLyFn5rCH7YjQrdty2Wc= github.com/butuzov/ireturn v0.2.2 h1:jWI36dxXwVrI+RnXDwux2IZOewpmfv930OuIRfaBUJ0= github.com/butuzov/ireturn v0.2.2/go.mod h1:RfGHUvvAuFFxoHKf4Z8Yxuh6OjlCw1KvR2zM1NFHeBk= github.com/butuzov/mirror v1.1.0 h1:ZqX54gBVMXu78QLoiqdwpl2mgmoOJTk7s4p4o+0avZI= @@ -163,8 +169,8 @@ github.com/ccojocar/zxcvbn-go v1.0.1/go.mod h1:g1qkXtUSvHP8lhHp5GrSmTz6uWALGRMQd github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/cenkalti/backoff/v4 v4.1.2/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= -github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= -github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= +github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= @@ -211,7 +217,6 @@ github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSV github.com/coreos/go-systemd/v22 v22.3.3-0.20220203105225-a9a7ef127534/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/cpuguy83/go-md2man/v2 v2.0.4 h1:wfIWP927BUkWJb2NmU/kNDYIBTh/ziUX91+lVfRxZq4= github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creachadair/atomicfile v0.2.6 h1:FgYxYvGcqREApTY8Nxg8msM6P/KVKK3ob5h9FaRUTNg= @@ -229,8 +234,8 @@ github.com/daixiang0/gci v0.11.2 h1:Oji+oPsp3bQ6bNNgX30NBAVT18P4uBH4sRZnlOlTj7Y= github.com/daixiang0/gci v0.11.2/go.mod h1:xtHP9N7AHdNvtRNfcx9gwTDfw7FRJx4bZUsiEfiNNAI= github.com/dashpay/bls-signatures/go-bindings v0.0.0-20230207105415-06df92693ac8 h1:v4K3CiDoFY1gjcWL/scRcwzyjBwh8TVG3ek8cWolK1g= github.com/dashpay/bls-signatures/go-bindings v0.0.0-20230207105415-06df92693ac8/go.mod h1:auvGS60NBZ+a21aCCQh366PdsjDvHinsCvl28VrYPu4= -github.com/dashpay/dashd-go v0.24.1 h1:w+F5pDt+fqud4QQM/O9sAJihbQ3oswO8DKOmDS/pcNw= -github.com/dashpay/dashd-go v0.24.1/go.mod h1:4yuk/laGME2RnQRTdqTbw87PhT+42hE1anLCnpkgls8= +github.com/dashpay/dashd-go v0.25.0 h1:tswVRmM2fLHC/JhpuAZ5Oa0TpOO6L+tqiE+QLTCvIQc= +github.com/dashpay/dashd-go v0.25.0/go.mod h1:4yuk/laGME2RnQRTdqTbw87PhT+42hE1anLCnpkgls8= github.com/dashpay/dashd-go/btcec/v2 v2.1.0 h1:fXwlLf5H+TtgHxjGMU74NesKzk6NisjKMPF04pBcygk= github.com/dashpay/dashd-go/btcec/v2 v2.1.0/go.mod h1:1i8XtxdOmvK6mYEUCneVXTzFbrCUw3wq1u91j8gvsns= github.com/dashpay/dashd-go/btcutil v1.2.0 h1:YMq7L0V0au5bbphIhpsBBc+nfOZqU+gJ4pkgRZB7Eiw= @@ -260,14 +265,14 @@ github.com/didip/tollbooth_chi v0.0.0-20200524181329-8b84cd7183d9 h1:gTh8fKuI/yL github.com/didip/tollbooth_chi v0.0.0-20200524181329-8b84cd7183d9/go.mod h1:YWyIfq3y4ArRfWZ9XksmuusP+7Mad+T0iFZ0kv0XG/M= github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk= github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= -github.com/docker/cli v26.0.0+incompatible h1:90BKrx1a1HKYpSnnBFR6AgDq/FqkHxwlUyzJVPxD30I= -github.com/docker/cli v26.0.0+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/cli v27.1.1+incompatible h1:goaZxOqs4QKxznZjjBWKONQci/MywhtRv2oNn0GkeZE= +github.com/docker/cli v27.1.1+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk= github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v26.0.0+incompatible h1:Ng2qi+gdKADUa/VM+6b6YaY2nlZhk/lVJiKR/2bMudU= -github.com/docker/docker v26.0.0+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker-credential-helpers v0.8.1 h1:j/eKUktUltBtMzKqmfLB0PAgqYyMHOp5vfsD1807oKo= -github.com/docker/docker-credential-helpers v0.8.1/go.mod h1:P3ci7E3lwkZg6XiHdRKft1KckHiO9a2rNtyFbZ/ry9M= +github.com/docker/docker v27.1.1+incompatible h1:hO/M4MtV36kzKldqnA37IWhebRA+LnqqcqDja6kVaKY= +github.com/docker/docker v27.1.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker-credential-helpers v0.8.2 h1:bX3YxiGzFP5sOXWc3bTPEXdEaZSeVMrFgOr3T+zrFAo= +github.com/docker/docker-credential-helpers v0.8.2/go.mod h1:P3ci7E3lwkZg6XiHdRKft1KckHiO9a2rNtyFbZ/ry9M= github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c= github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc= github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= @@ -324,8 +329,8 @@ github.com/ghostiam/protogetter v0.2.3/go.mod h1:KmNLOsy1v04hKbvZs8EfGI1fk39AgTd github.com/go-chi/chi v4.1.1+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ= github.com/go-chi/chi v4.1.2+incompatible h1:fGFk2Gmi/YKXk0OmGfBh0WgmN3XB8lVnEyNz34tQRec= github.com/go-chi/chi v4.1.2+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ= -github.com/go-chi/chi/v5 v5.0.12 h1:9euLV5sTrTNTRUU9POmDUvfxyj6LAABLUcEWO+JJb4s= -github.com/go-chi/chi/v5 v5.0.12/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= +github.com/go-chi/chi/v5 v5.1.0 h1:acVI1TYaD+hhedDJ3r54HyA6sExp3HfXq7QWEEY/xMw= +github.com/go-chi/chi/v5 v5.1.0/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= github.com/go-chi/render v1.0.1 h1:4/5tis2cKaNdnv9zFLfXzcquC9HbeZgCnxGnKrltBS8= github.com/go-chi/render v1.0.1/go.mod h1:pq4Rr7HbnsdaeHagklXub+p6Wd16Af5l9koip1OvJns= github.com/go-critic/go-critic v0.9.0 h1:Pmys9qvU3pSML/3GEQ2Xd9RZ/ip+aXHKILuxczKGV/U= @@ -344,8 +349,8 @@ github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= -github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= +github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-pkgz/expirable-cache v0.0.3 h1:rTh6qNPp78z0bQE6HDhXBHUwqnV9i09Vm6dksJLXQDc= @@ -377,6 +382,8 @@ github.com/go-toolsmith/strparse v1.1.0 h1:GAioeZUK9TGxnLS+qfdqNbA4z0SSm5zVNtCQi github.com/go-toolsmith/strparse v1.1.0/go.mod h1:7ksGy58fsaQkGQlY8WVoBFNyEPMGuJin1rfoPS4lBSQ= github.com/go-toolsmith/typep v1.1.0 h1:fIRYDyF+JywLfqzyhdiHzRop/GQDxxNhLGQ6gFUNHus= github.com/go-toolsmith/typep v1.1.0/go.mod h1:fVIw+7zjdsMxDA3ITWnH1yOiw1rnTQKCsF/sk2H/qig= +github.com/go-viper/mapstructure/v2 v2.0.0 h1:dhn8MZ1gZ0mzeodTG3jt5Vj/o87xZKuNAprG2mQfMfc= +github.com/go-viper/mapstructure/v2 v2.0.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= github.com/go-xmlfmt/xmlfmt v1.1.2 h1:Nea7b4icn8s57fTx1M5AI4qQT5HEM3rVUO8MuE6g80U= github.com/go-xmlfmt/xmlfmt v1.1.2/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM= github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= @@ -388,8 +395,8 @@ github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5x github.com/godbus/dbus/v5 v5.0.6/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= -github.com/gofrs/uuid/v5 v5.0.0 h1:p544++a97kEL+svbcFbCQVM9KFu0Yo25UoISXGNNH9M= -github.com/gofrs/uuid/v5 v5.0.0/go.mod h1:CDOjlDMVAtN56jqyRUZh58JT31Tiw7/oQyEXZV+9bD8= +github.com/gofrs/uuid/v5 v5.2.0 h1:qw1GMx6/y8vhVsx626ImfKMuS5CvJmhIKKtuyvfajMM= +github.com/gofrs/uuid/v5 v5.2.0/go.mod h1:CDOjlDMVAtN56jqyRUZh58JT31Tiw7/oQyEXZV+9bD8= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= @@ -474,8 +481,8 @@ github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8 github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-containerregistry v0.19.1 h1:yMQ62Al6/V0Z7CqIrrS1iYoA5/oQCm88DeNujc7C1KY= -github.com/google/go-containerregistry v0.19.1/go.mod h1:YCMFNQeeXeLF+dnhhWkqDItx/JSkH01j1Kis4PsjzFI= +github.com/google/go-containerregistry v0.20.1 h1:eTgx9QNYugV4DN5mz4U8hiAGTi1ybXn0TPi4Smd8du0= +github.com/google/go-containerregistry v0.20.1/go.mod h1:YCMFNQeeXeLF+dnhhWkqDItx/JSkH01j1Kis4PsjzFI= github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= @@ -499,8 +506,8 @@ github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20211214055906-6f57359322fd/go.mod h1:KgnwoLYCZ8IQu3XUZ8Nc/bM9CCZFOyjUNOSygVozoDg= github.com/google/pprof v0.0.0-20240227163752-401108e1b7e7/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik= -github.com/google/pprof v0.0.0-20240327155427-868f304927ed h1:n8QtJTrwsv3P7dNxPaMeNkMcxvUpqocsHLr8iDLGlQI= -github.com/google/pprof v0.0.0-20240327155427-868f304927ed/go.mod h1:kf6iHlnVGwgKolg33glAes7Yg/8iWP8ukqeldJSO7jw= +github.com/google/pprof v0.0.0-20240722153945-304e4f0156b8 h1:ssNFCCVmib/GQSzx3uCWyfMgOamLGWuGqlMS77Y1m3Y= +github.com/google/pprof v0.0.0-20240722153945-304e4f0156b8/go.mod h1:K1liHPHnj73Fdn/EKuT8nrFqBihUSKXoLYU0BuatOYo= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= @@ -532,8 +539,9 @@ github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaW github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 h1:bkypFPDjIYGfCYD5mRBvpqxfYX1YCS1PXdKYWi8FsN0= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0/go.mod h1:P+Lt/0by1T8bfcF3z737NnSbmxQAppXMRziHUxPOC8k= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -565,8 +573,8 @@ github.com/jdx/go-netrc v1.0.0/go.mod h1:Gh9eFQJnoTNIRHXl2j5bJXA1u84hQWJWgGh569z github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jgautheron/goconst v1.6.0 h1:gbMLWKRMkzAc6kYsQL6/TxaoBUg3Jm9LSF/Ih1ADWGA= github.com/jgautheron/goconst v1.6.0/go.mod h1:aAosetZ5zaeC/2EfMeRswtxUFBpe2Hr7HzkgX4fanO4= -github.com/jhump/protoreflect v1.15.6 h1:WMYJbw2Wo+KOWwZFvgY0jMoVHM6i4XIvRs2RcBj5VmI= -github.com/jhump/protoreflect v1.15.6/go.mod h1:jCHoyYQIJnaabEYnbGwyo9hUqfyUMTbJw/tAut5t97E= +github.com/jhump/protoreflect v1.16.0 h1:54fZg+49widqXYQ0b+usAFHbMkBGR4PpXrsHc8+TBDg= +github.com/jhump/protoreflect v1.16.0/go.mod h1:oYPd7nPvcBw/5wlDfm/AVmU9zH9BgqGCI469pGxfj/8= github.com/jingyugao/rowserrcheck v1.1.1 h1:zibz55j/MJtLsjP1OF4bSdgXxwL1b+Vn7Tjzq7gFzUs= github.com/jingyugao/rowserrcheck v1.1.1/go.mod h1:4yvlZSDb3IyDTUZJUmpZfm2Hwok+Dtp+nu2qOq+er9c= github.com/jinzhu/copier v0.3.5 h1:GlvfUwHk62RokgqVNvYsku0TATCF7bAHVwEXoBh3iJg= @@ -598,8 +606,8 @@ github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+o github.com/kkHAIKE/contextcheck v1.1.4 h1:B6zAaLhOEEcjvUgIYEqystmnFk1Oemn8bvJhbt0GMb8= github.com/kkHAIKE/contextcheck v1.1.4/go.mod h1:1+i/gWqokIa+dm31mqGLZhZJ7Uh44DJGZVmr6QRBNJg= github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= -github.com/klauspost/compress v1.17.7 h1:ehO88t2UGzQK66LMdE8tibEd1ErmzZjNEqWkjLAKQQg= -github.com/klauspost/compress v1.17.7/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= +github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= +github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= github.com/klauspost/pgzip v1.2.6 h1:8RXeL5crjEUFnR2/Sn6GJNWtSQ3Dk8pq4CL3jvdDyjU= github.com/klauspost/pgzip v1.2.6/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= @@ -799,8 +807,8 @@ github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6L github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= -github.com/rs/cors v1.10.1 h1:L0uuZVXIKlI1SShY2nhFfo44TYvDPQ1w4oFkUJNfhyo= -github.com/rs/cors v1.10.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= +github.com/rs/cors v1.11.0 h1:0B9GE/r9Bc2UxRMMtymBkHTenPkHDv0CW4Y98GBY+po= +github.com/rs/cors v1.11.0/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= github.com/rs/zerolog v1.29.0 h1:Zes4hju04hjbvkVkOhdl2HpZa+0PmVwigmo8XoORE5w= github.com/rs/zerolog v1.29.0/go.mod h1:NILgTygv/Uej1ra5XxGf82ZFSLk58MFGAUS2o6usyD0= @@ -856,8 +864,8 @@ github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkU github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= -github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= +github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= +github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= @@ -976,29 +984,30 @@ go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0 h1:4K4tsIXefpVJtvA/8srF4V4y0akAoPHkIslgAkjixJA= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0/go.mod h1:jjdQuTGVsXV4vSs+CJ2qYDeDPf9yIJV23qlIzBm73Vg= go.opentelemetry.io/otel v1.4.1/go.mod h1:StM6F/0fSwpd8dKWDCdRr7uRvEPYdW0hBSlbdTiUde4= -go.opentelemetry.io/otel v1.24.0 h1:0LAOdjNmQeSTzGBzduGe/rU4tZhMwL5rWgtp9Ku5Jfo= -go.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo= +go.opentelemetry.io/otel v1.28.0 h1:/SqNcYk+idO0CxKEUOtKQClMK/MimZihKYMruSMViUo= +go.opentelemetry.io/otel v1.28.0/go.mod h1:q68ijF8Fc8CnMHKyzqL6akLO46ePnjkgfIMIjUIX9z4= go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.4.1/go.mod h1:VpP4/RMn8bv8gNo9uK7/IMY4mtWLELsS+JIP0inH0h4= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.4.1 h1:WPpPsAAs8I2rA47v5u0558meKmmwm1Dj99ZbqCV8sZ8= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.4.1/go.mod h1:o5RW5o2pKpJLD5dNTCmjF1DorYwMeFJmb/rKr5sLaa8= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.24.0 h1:Xw8U6u2f8DK2XAkGRFV7BBLENgnTGX9i4rQRxJf+/vs= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.24.0/go.mod h1:6KW1Fm6R/s6Z3PGXwSJN2K4eT6wQB3vXX6CVnYX9NmM= -go.opentelemetry.io/otel/metric v1.24.0 h1:6EhoGWWK28x1fbpA4tYTOWBkPefTDQnb8WSGXlc88kI= -go.opentelemetry.io/otel/metric v1.24.0/go.mod h1:VYhLe1rFfxuTXLgj4CBiyz+9WYBA8pNGJgDcSFRKBco= +go.opentelemetry.io/otel/metric v1.28.0 h1:f0HGvSl1KRAU1DLgLGFjrwVyismPlnuU6JD6bOeuA5Q= +go.opentelemetry.io/otel/metric v1.28.0/go.mod h1:Fb1eVBFZmLVTMb6PPohq3TO9IIhUisDsbJoL/+uQW4s= go.opentelemetry.io/otel/sdk v1.4.1/go.mod h1:NBwHDgDIBYjwK2WNu1OPgsIc2IJzmBXNnvIJxJc8BpE= -go.opentelemetry.io/otel/sdk v1.24.0 h1:YMPPDNymmQN3ZgczicBY3B6sf9n62Dlj9pWD3ucgoDw= -go.opentelemetry.io/otel/sdk v1.24.0/go.mod h1:KVrIYw6tEubO9E96HQpcmpTKDVn9gdv35HoYiQWGDFg= +go.opentelemetry.io/otel/sdk v1.28.0 h1:b9d7hIry8yZsgtbmM0DKyPWMMUMlK9NEKuIG4aBqWyE= +go.opentelemetry.io/otel/sdk v1.28.0/go.mod h1:oYj7ClPUA7Iw3m+r7GeEjz0qckQRJK2B8zjcZEfu7Pg= go.opentelemetry.io/otel/sdk/metric v1.19.0 h1:EJoTO5qysMsYCa+w4UghwFV/ptQgqSL/8Ni+hx+8i1k= go.opentelemetry.io/otel/sdk/metric v1.19.0/go.mod h1:XjG0jQyFJrv2PbMvwND7LwCEhsJzCzV5210euduKcKY= go.opentelemetry.io/otel/trace v1.4.1/go.mod h1:iYEVbroFCNut9QkwEczV9vMRPHNKSSwYZjulEtsmhFc= -go.opentelemetry.io/otel/trace v1.24.0 h1:CsKnnL4dUAr/0llH9FKuc698G04IrpWV0MQA/Y1YELI= -go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU= +go.opentelemetry.io/otel/trace v1.28.0 h1:GhQ9cUuQGmNDd5BTCP2dAvv75RdMxEfTmYejp+lkx9g= +go.opentelemetry.io/otel/trace v1.28.0/go.mod h1:jPyXzNPg6da9+38HEwElrQiHlVMTnVfM3/yv2OlIHaI= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -go.opentelemetry.io/proto/otlp v0.12.0 h1:CMJ/3Wp7iOWES+CYLfnBv+DVmPbB+kmy9PJ92XvlR6c= go.opentelemetry.io/proto/otlp v0.12.0/go.mod h1:TsIjwGWIx5VFYv9KGVlOpxoBl5Dy+63SUguV7GGvlSQ= +go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0= +go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8= go.tmz.dev/musttag v0.7.2 h1:1J6S9ipDbalBSODNT5jCep8dhZyMr4ttnjQagmGYR5s= go.tmz.dev/musttag v0.7.2/go.mod h1:m6q5NiiSKMnQYokefa2xGoyoXnrswCbJ0AWYzf4Zs28= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= @@ -1025,8 +1034,8 @@ golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= -golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA= -golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= +golang.org/x/crypto v0.25.0 h1:ypSNr+bnYL2YhwoMt2zPxHFmbAN1KZs/njMG3hxUp30= +golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -1037,8 +1046,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20240325151524-a685a6edb6d8 h1:aAcj0Da7eBAtrTp03QXWvm88pSyOt+UgdZw2BFZ+lEw= -golang.org/x/exp v0.0.0-20240325151524-a685a6edb6d8/go.mod h1:CQ1k9gNrJ50XIzaKCRR2hssIjF07kZFEiieALBM/ARQ= +golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8= +golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY= golang.org/x/exp/typeparams v0.0.0-20220428152302-39d4317da171/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= golang.org/x/exp/typeparams v0.0.0-20230203172020-98cc5a0785f9/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= golang.org/x/exp/typeparams v0.0.0-20230307190834-24139beb5833 h1:jWGQJV4niP+CCmFW9ekjA9Zx8vYORzOUH2/Nl5WPuLQ= @@ -1073,8 +1082,8 @@ golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91 golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI= golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.16.0 h1:QX4fJ0Rr5cPQCF7O9lh9Se4pmwfwskqZfq5moyldzic= -golang.org/x/mod v0.16.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.19.0 h1:fEdghXQSo20giMthA7cd28ZC+jts4amQ3YMXiP5oMQ8= +golang.org/x/mod v0.19.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= 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-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1121,8 +1130,8 @@ golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.22.0 h1:9sGLhx7iRIHEiX0oAJ3MRZMUCElJgy7Br1nO+AMN3Tc= -golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= +golang.org/x/net v0.27.0 h1:5K3Njcw06/l2y9vpGCSdcxWOYHOUk3dVNGDXN+FvAys= +golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1147,8 +1156,8 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= -golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= +golang.org/x/sync v0.7.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.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1229,16 +1238,16 @@ golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= -golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI= +golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8= -golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= +golang.org/x/term v0.22.0 h1:BbsgPEJULsl2fV/AT3v15Mjva5yXKQDyKf+TbDz7QJk= +golang.org/x/term v0.22.0/go.mod h1:F3qCibpT5AMpCRfhfT53vVJwhLtIVHhB9XDjfFvnMI4= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1250,8 +1259,8 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= -golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= +golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1328,8 +1337,8 @@ golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA= golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k= golang.org/x/tools v0.5.0/go.mod h1:N+Kgy78s5I24c24dU8OfWNEotWjutIs8SnJvn5IDq+k= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.19.0 h1:tfGCXNR1OsFG+sVdLAitlpjAvD/I6dHDKnYrpEZUHkw= -golang.org/x/tools v0.19.0/go.mod h1:qoJWxmGSIBmAeriMx19ogtrEPrGtDbPK634QFIcLAhc= +golang.org/x/tools v0.23.0 h1:SGsXPZ+2l4JsgaCKkx+FQ9YZ5XEtA1GZYuoDjenLjvg= +golang.org/x/tools v0.23.0/go.mod h1:pnu6ufv6vQkll6szChhK3C3L/ruaIv5eBeztNG8wtsI= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1399,12 +1408,10 @@ google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de h1:F6qOa9AZTYJXOUEr4jDysRDLrm4PHePlge4v4TGAlxY= -google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:VUhTRKeHn9wwcdrk73nvdC9gF178Tzhmt/qyaFcPLSo= -google.golang.org/genproto/googleapis/api v0.0.0-20240325203815-454cdb8f5daa h1:Jt1XW5PaLXF1/ePZrznsh/aAUvI7Adfc3LY1dAKlzRs= -google.golang.org/genproto/googleapis/api v0.0.0-20240325203815-454cdb8f5daa/go.mod h1:K4kfzHtI0kqWA79gecJarFtDn/Mls+GxQcg3Zox91Ac= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240325203815-454cdb8f5daa h1:RBgMaUMP+6soRkik4VoN8ojR2nex2TqZwjSSogic+eo= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240325203815-454cdb8f5daa/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= +google.golang.org/genproto/googleapis/api v0.0.0-20240723171418-e6d459c13d2a h1:YIa/rzVqMEokBkPtydCkx1VLmv3An1Uw7w1P1m6EhOY= +google.golang.org/genproto/googleapis/api v0.0.0-20240723171418-e6d459c13d2a/go.mod h1:AHT0dDg3SoMOgZGnZk29b5xTbPHMoEC8qthmBLJCpys= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240723171418-e6d459c13d2a h1:hqK4+jJZXCU4pW7jsAdGOVFIfLHQeV7LaizZKnZ84HI= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240723171418-e6d459c13d2a/go.mod h1:Ue6ibwXGpU+dqIcODieyLOcgj7z8+IcskoNIgZxtrFY= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -1426,8 +1433,8 @@ google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAG google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= google.golang.org/grpc v1.43.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= -google.golang.org/grpc v1.63.0 h1:WjKe+dnvABXyPJMD7KDNLxtoGk5tgk+YFWN6cBWjZE8= -google.golang.org/grpc v1.63.0/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA= +google.golang.org/grpc v1.64.1 h1:LKtvyfbX3UGVPFcGqJ9ItpVWW6oN/2XqTxfAnwRRXiA= +google.golang.org/grpc v1.64.1/go.mod h1:hiQF4LFZelK2WKaP6W0L92zGHtiQdZxk8CrSdvyjeP0= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -1441,8 +1448,8 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= -google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= +google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/internal/consensus/replayer.go b/internal/consensus/replayer.go index 416c5a24b0..d950de4b2c 100644 --- a/internal/consensus/replayer.go +++ b/internal/consensus/replayer.go @@ -338,7 +338,7 @@ func (r *BlockReplayer) execInitChain(ctx context.Context, rs *replayState, stat quorumType := state.Validators.QuorumType if err := quorumType.Validate(); err != nil { - r.logger.Error("state quorum type validation failed: %w", err) + r.logger.Debug("state quorum type validation failed, falling back to genesis one", "err", err) quorumType = r.genDoc.QuorumType } @@ -355,6 +355,12 @@ func (r *BlockReplayer) execInitChain(ctx context.Context, rs *replayState, stat if err != nil { return err } + + // Allow overriding genesis block time + if res.GetGenesisTime() != nil { + state.LastBlockTime = *res.GetGenesisTime() + } + candidateState, err := state.NewStateChangeset(ctx, rp) if err != nil { return err @@ -366,6 +372,7 @@ func (r *BlockReplayer) execInitChain(ctx context.Context, rs *replayState, stat state.LastCoreChainLockedBlockHeight = res.InitialCoreHeight // We update the last results hash with the empty hash, to conform with RFC-6962. state.LastResultsHash = merkle.HashFromByteSlices(nil) + return r.stateStore.Save(*state) } diff --git a/internal/consensus/replayer_test.go b/internal/consensus/replayer_test.go index 06605849aa..cbff61ba2b 100644 --- a/internal/consensus/replayer_test.go +++ b/internal/consensus/replayer_test.go @@ -1,21 +1,30 @@ package consensus import ( + "bytes" "context" "fmt" "testing" + "time" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" dbm "github.com/tendermint/tm-db" + "github.com/dashpay/dashd-go/btcjson" + abciclient "github.com/dashpay/tenderdash/abci/client" "github.com/dashpay/tenderdash/abci/example/kvstore" abci "github.com/dashpay/tenderdash/abci/types" + "github.com/dashpay/tenderdash/abci/types/mocks" "github.com/dashpay/tenderdash/crypto" + "github.com/dashpay/tenderdash/crypto/bls12381" "github.com/dashpay/tenderdash/internal/eventbus" "github.com/dashpay/tenderdash/internal/proxy" sm "github.com/dashpay/tenderdash/internal/state" "github.com/dashpay/tenderdash/internal/store" + "github.com/dashpay/tenderdash/internal/test/factory" tmbytes "github.com/dashpay/tenderdash/libs/bytes" "github.com/dashpay/tenderdash/libs/log" tmtypes "github.com/dashpay/tenderdash/types" @@ -140,6 +149,82 @@ func TestBlockReplayerReplay(t *testing.T) { } } +// TestInitChainGenesisTime checks if genesis time provided to InitChain is correctly included in first block. +// +// Given some hardcoded genesis time, +// When I return it in response to InitChain, +// Then the first block should have that genesis time. +func TestInitChainGenesisTime(t *testing.T) { + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + logger := log.NewTestingLogger(t) + + eventBus := eventbus.NewDefault(logger) + require.NoError(t, eventBus.Start(ctx)) + + genesisAppHash := make([]byte, crypto.DefaultAppHashSize) + + genesisTime := time.Date(2001, 12, 31, 12, 34, 56, 78, time.UTC) + + // configure mock app to return expected genesis time + app := mocks.NewApplication(t) + defer app.AssertExpectations(t) + app.On("InitChain", mock.Anything, mock.Anything).Return(&abci.ResponseInitChain{ + AppHash: genesisAppHash, + XGenesisTime: &abci.ResponseInitChain_GenesisTime{ + GenesisTime: &genesisTime, + }, + }, nil) + + client := abciclient.NewLocalClient(logger, app) + proxyApp := proxy.New(client, logger, proxy.NopMetrics()) + + // Prepare genesis document with another genesis time + vset, _ := factory.MockValidatorSet() + recoveredThresholdPublicKey, err := bls12381.RecoverThresholdPublicKeyFromPublicKeys( + vset.GetPublicKeys(), + vset.GetProTxHashesAsByteArrays(), + ) + require.NoError(t, err) + vset.ThresholdPublicKey = recoveredThresholdPublicKey + proposerProTxHash := vset.GetProposer().ProTxHash + + genDoc := tmtypes.GenesisDoc{ + ChainID: "test-chain", + QuorumType: btcjson.LLMQType_100_67, + Validators: tmtypes.MakeGenesisValsFromValidatorSet(vset), + ConsensusParams: tmtypes.DefaultConsensusParams(), + ThresholdPublicKey: recoveredThresholdPublicKey, + QuorumHash: make([]byte, 32), + GenesisTime: time.Date(1999, 1, 1, 0, 0, 0, 0, time.UTC), + } + + err = genDoc.ValidateAndComplete() + require.NoError(t, err) + + // initialize state and stores + smState, err := sm.MakeGenesisState(&genDoc) + require.NoError(t, err) + stateStore := sm.NewStore(dbm.NewMemDB()) + blockStore := store.NewBlockStore(dbm.NewMemDB()) + replayer := newBlockReplayer(stateStore, blockStore, &genDoc, eventBus, proxyApp, proposerProTxHash) + + // use replayer to call initChain + appHash, err := replayer.Replay(ctx, smState, bytes.Clone(genesisAppHash), 0) + require.NoError(t, err) + require.NotEmpty(t, appHash) + + // reload smState, as replayer does not modify it + smState, err = stateStore.Load() + require.NoError(t, err) + + // ensure the block contains expected genesis time + block := smState.MakeBlock(1, []tmtypes.Tx{}, nil, nil, proposerProTxHash, 1) + assert.Equal(t, genesisTime, block.Header.Time, "block: %+v\n\nsm.State: %+v", block, smState) + +} + func updateStateStoreWithState(state sm.State, store sm.Store) sm.Store { err := store.Save(state) if err != nil { diff --git a/internal/p2p/dash_dialer.go b/internal/p2p/dash_dialer.go index 64d70ecff3..65b9372b84 100644 --- a/internal/p2p/dash_dialer.go +++ b/internal/p2p/dash_dialer.go @@ -110,12 +110,14 @@ func (cm *routerDashDialer) lookupIPPort(ctx context.Context, ip net.IP, port ui for _, nodeID := range peers { addresses := cm.peerManager.Addresses(nodeID) for _, addr := range addresses { - if endpoints, err := addr.Resolve(ctx); err != nil { + if endpoints, err := addr.Resolve(ctx); err == nil { for _, item := range endpoints { if item.IP.Equal(ip) && item.Port == port { return item.NodeAddress(nodeID), nil } } + } else { + cm.logger.Warn("lookupIPPort: failed to resolve address", "peer", nodeID, "address", addr, "err", err) } } } diff --git a/node/node.go b/node/node.go index 67292f777e..2634b5022e 100644 --- a/node/node.go +++ b/node/node.go @@ -73,9 +73,6 @@ type nodeImpl struct { shutdownOps closer rpcEnv *rpccore.Environment prometheusSrv *http.Server - - // Dash - validatorConnExecutor *dashquorum.ValidatorConnExecutor } // newDefaultNode returns a Tendermint node with default settings for the @@ -238,25 +235,6 @@ func makeNode( fmt.Errorf("failed to create peer manager: %w", err), makeCloser(closers)) } - - // Start Dash connection executor - var validatorConnExecutor *dashquorum.ValidatorConnExecutor - if len(proTxHash) > 0 { - vcLogger := logger.With("node_proTxHash", proTxHash.ShortString(), "module", "ValidatorConnExecutor") - dcm := p2p.NewRouterDashDialer(peerManager, vcLogger) - validatorConnExecutor, err = dashquorum.NewValidatorConnExecutor( - proTxHash, - eventBus, - dcm, - dashquorum.WithLogger(vcLogger), - dashquorum.WithValidatorsSet(state.Validators), - ) - if err != nil { - return nil, combineCloseError(err, makeCloser(closers)) - } - } - - // TODO construct node here: node := &nodeImpl{ config: cfg, logger: logger, @@ -276,8 +254,6 @@ func makeNode( shutdownOps: makeCloser(closers), - validatorConnExecutor: validatorConnExecutor, - rpcEnv: &rpccore.Environment{ ProxyApp: proxyApp, @@ -455,6 +431,29 @@ func makeNode( node.rpcEnv.ProTxHash = proTxHash } + // Start Dash connection executor + // We do it at the end, as we require the state to be loaded and network routing to be set up + if len(proTxHash) > 0 { + var validatorConnExecutor *dashquorum.ValidatorConnExecutor + + vcLogger := logger.With("node_proTxHash", proTxHash.ShortString(), "module", "ValidatorConnExecutor") + dcm := p2p.NewRouterDashDialer(peerManager, vcLogger) + validatorConnExecutor, err = dashquorum.NewValidatorConnExecutor( + proTxHash, + eventBus, + dcm, + dashquorum.WithLogger(vcLogger), + dashquorum.WithValidatorsSet(state.Validators), + dashquorum.WithStateStore(stateStore)) + if err != nil { + return nil, combineCloseError(err, makeCloser(closers)) + } + + node.services = append(node.services, validatorConnExecutor) + } else { + logger.Debug("ProTxHash not set, so we are not a validator; skipping ValidatorConnExecutor initialization") + } + node.BaseService = *service.NewBaseService(logger, "Node", node) return node, nil diff --git a/node/node_test.go b/node/node_test.go index 2d085c33f3..7f8671a349 100644 --- a/node/node_test.go +++ b/node/node_test.go @@ -672,7 +672,7 @@ func TestNodeSetEventSink(t *testing.T) { logger := log.NewNopLogger() - setupTest := func(t *testing.T, conf *config.Config) []indexer.EventSink { + setupTest := func(t *testing.T, _conf *config.Config) []indexer.EventSink { eventBus := eventbus.NewDefault(logger.With("module", "events")) require.NoError(t, eventBus.Start(ctx)) diff --git a/privval/signer_requestHandler.go b/privval/signer_requestHandler.go index a74e1b3fd0..61c9dc06df 100644 --- a/privval/signer_requestHandler.go +++ b/privval/signer_requestHandler.go @@ -46,10 +46,6 @@ func DefaultValidationRequestHandler( var proTxHash crypto.ProTxHash proTxHash, err = privVal.GetProTxHash(context.Background()) - if err != nil { - return res, err - } - if err != nil { res = mustWrapMsg(&privvalproto.ProTxHashResponse{ ProTxHash: nil, Error: &privvalproto.RemoteSignerError{Code: 0, Description: err.Error()}}) diff --git a/proto/tendermint/abci/types.proto b/proto/tendermint/abci/types.proto index 24bb19df35..0e64cdf6a5 100644 --- a/proto/tendermint/abci/types.proto +++ b/proto/tendermint/abci/types.proto @@ -551,6 +551,8 @@ message ResponseInitChain { tendermint.types.CoreChainLock next_core_chain_lock_update = 4; // Initial height of core lock. uint32 initial_core_height = 5; + // Override genesis time with provided time. + optional google.protobuf.Timestamp genesis_time = 6 [(gogoproto.nullable) = true, (gogoproto.stdtime) = true]; } // diff --git a/spec/abci++/api.md b/spec/abci++/api.md index 0eadee789e..6162aaf3b2 100644 --- a/spec/abci++/api.md +++ b/spec/abci++/api.md @@ -961,6 +961,7 @@ nondeterministic | validator_set_update | [ValidatorSetUpdate](#tendermint-abci-ValidatorSetUpdate) | | Initial validator set (optional). | | next_core_chain_lock_update | [tendermint.types.CoreChainLock](#tendermint-types-CoreChainLock) | | Initial core chain lock update. | | initial_core_height | [uint32](#uint32) | | Initial height of core lock. | +| genesis_time | [google.protobuf.Timestamp](#google-protobuf-Timestamp) | optional | Override genesis time with provided time. | diff --git a/test/e2e/node/main.go b/test/e2e/node/main.go index caf90c2ac4..fc246e1286 100644 --- a/test/e2e/node/main.go +++ b/test/e2e/node/main.go @@ -407,7 +407,7 @@ func setupCoreServer(cfg *Config) (*mockcoreserver.JRPCServer, error) { srv = mockcoreserver.WithMethods( srv, mockcoreserver.WithQuorumInfoMethod(coreServer, mockcoreserver.Endless), - mockcoreserver.WithQuorumSignMethod(coreServer, mockcoreserver.Endless), + mockcoreserver.WithQuorumSignMethod(coreServer, mockcoreserver.Endless, coreServer.LLMQType), mockcoreserver.WithQuorumVerifyMethod(coreServer, mockcoreserver.Endless), mockcoreserver.WithMasternodeMethod(coreServer, mockcoreserver.Endless), mockcoreserver.WithGetNetworkInfoMethod(coreServer, mockcoreserver.Endless), diff --git a/test/e2e/pkg/mockcoreserver/methods.go b/test/e2e/pkg/mockcoreserver/methods.go index bd5431e61e..5894dfa867 100644 --- a/test/e2e/pkg/mockcoreserver/methods.go +++ b/test/e2e/pkg/mockcoreserver/methods.go @@ -33,18 +33,20 @@ func WithQuorumInfoMethod(cs CoreServer, times int) MethodFunc { } // WithQuorumSignMethod ... -func WithQuorumSignMethod(cs CoreServer, times int) MethodFunc { +func WithQuorumSignMethod(cs CoreServer, times int, quorumType btcjson.LLMQType) MethodFunc { call := OnMethod(func(ctx context.Context, req btcjson.Request) (interface{}, error) { cmd := btcjson.QuorumCmd{} - err := unmarshalCmd(req, &cmd.SubCmd, &cmd.LLMQType, &cmd.RequestID, &cmd.MessageHash, &cmd.QuorumHash, &cmd.Submit) + err := unmarshalCmd(req, &cmd.SubCmd, &cmd.RequestID, &cmd.MessageHash, &cmd.QuorumHash, &cmd.Submit) if err != nil { return nil, err } + cmd.LLMQType = &quorumType + return cs.QuorumSign(ctx, cmd), nil }) return func(srv *JRPCServer) { srv. - On("quorum sign"). + On("quorum platformsign"). Expect(And(Debug())). Times(times). Respond(call, JSONContentType()) @@ -100,7 +102,7 @@ func WithMasternodeMethod(cs CoreServer, times int) MethodFunc { // WithGetNetworkInfoMethod ... func WithGetNetworkInfoMethod(cs CoreServer, times int) MethodFunc { - call := OnMethod(func(ctx context.Context, req btcjson.Request) (interface{}, error) { + call := OnMethod(func(ctx context.Context, _req btcjson.Request) (interface{}, error) { cmd := btcjson.GetNetworkInfoCmd{} return cs.GetNetworkInfo(ctx, cmd), nil }) @@ -115,7 +117,7 @@ func WithGetNetworkInfoMethod(cs CoreServer, times int) MethodFunc { // WithPingMethod ... func WithPingMethod(cs CoreServer, times int) MethodFunc { - call := OnMethod(func(ctx context.Context, req btcjson.Request) (interface{}, error) { + call := OnMethod(func(ctx context.Context, _req btcjson.Request) (interface{}, error) { cmd := btcjson.PingCmd{} return cs.Ping(ctx, cmd), nil }) diff --git a/version/version.go b/version/version.go index 07e14f7bd6..d0921f90fd 100644 --- a/version/version.go +++ b/version/version.go @@ -9,9 +9,9 @@ var ( const ( // TMVersionDefault is the used as the fallback version for Tenderdash // when not using git describe. It is formatted with semantic versioning. - TMVersionDefault = "1.0.0" + TMVersionDefault = "1.1.0" // ABCISemVer is the semantic version of the ABCI library - ABCISemVer = "1.0.0" + ABCISemVer = "1.1.0" ABCIVersion = ABCISemVer )