From b68a8f3b6bb5c0e13db8c3d02c76cf1747173053 Mon Sep 17 00:00:00 2001 From: Kirill Shklyaev Date: Fri, 22 Nov 2024 15:17:07 +0300 Subject: [PATCH 1/2] specifying a port for each any-sync-node; formatting --- any-sync-network/cmd/create.go | 169 ++++++++++++++------------- any-sync-network/defaultTemplate.yml | 10 +- 2 files changed, 93 insertions(+), 86 deletions(-) diff --git a/any-sync-network/cmd/create.go b/any-sync-network/cmd/create.go index 3e24629..e88ba03 100644 --- a/any-sync-network/cmd/create.go +++ b/any-sync-network/cmd/create.go @@ -3,8 +3,8 @@ package cmd import ( "fmt" "os" - "strconv" "path/filepath" + "strconv" "github.com/AlecAivazis/survey/v2" "github.com/anyproto/any-sync/accountservice" @@ -33,14 +33,14 @@ type GeneralNodeConfig struct { } `yaml:"quic"` Network Network `yaml:"network"` NetworkStorePath string `yaml:"networkStorePath"` - Log struct { + Log struct { Production bool `yaml:"production"` DefaultLevel string `yaml:"defaultLevel"` NamedLevels struct { } `yaml:"namedLevels"` } `yaml:"log"` Metric struct { - Addr string `yaml:"addr"` + Addr string `yaml:"addr"` } `yaml:"metric"` } @@ -66,15 +66,15 @@ type CoordinatorNodeConfig struct { type ConsensusNodeConfig struct { GeneralNodeConfig `yaml:".,inline"` Mongo struct { - Connect string `yaml:"connect"` - Database string `yaml:"database"` + Connect string `yaml:"connect"` + Database string `yaml:"database"` LogCollection string `yaml:"logCollection"` } `yaml:"mongo"` } type SyncNodeConfig struct { - GeneralNodeConfig `yaml:".,inline"` - Space struct { + GeneralNodeConfig `yaml:".,inline"` + Space struct { GcTTL int `yaml:"gcTTL"` SyncPeriod int `yaml:"syncPeriod"` } `yaml:"space"` @@ -91,9 +91,9 @@ type SyncNodeConfig struct { } type FileNodeConfig struct { - GeneralNodeConfig `yaml:".,inline"` - DefaultLimit int `yaml:"defaultLimit"` - S3Store struct { + GeneralNodeConfig `yaml:".,inline"` + DefaultLimit int `yaml:"defaultLimit"` + S3Store struct { Endpoint string `yaml:"endpoint,omitempty"` Bucket string `yaml:"bucket"` IndexBucket string `yaml:"indexBucket"` @@ -120,60 +120,60 @@ type HeartConfig struct { } type Network struct { - ID string `yaml:"id"` - HeartConfig `yaml:".,inline"` + ID string `yaml:"id"` + HeartConfig `yaml:".,inline"` } type DefaultConfig struct { ExternalAddr []string `yaml:"external-addresses"` AnySyncCoordinator struct { - ListenAddr string `yaml:"listen"` - YamuxPort int `yaml:"yamuxPort"` - QuicPort int `yaml:"quicPort"` - Mongo struct { - Connect string `yaml:"connect"` - Database string `yaml:"database"` - } `yaml:"mongo"` - DefaultLimits struct { - SpaceMembersRead int `yaml:"spaceMembersRead"` - SpaceMembersWrite int `yaml:"spaceMembersWrite"` - SharedSpacesLimit int `yaml:"sharedSpacesLimit"` - } `yaml:"defaultLimits"` + ListenAddr string `yaml:"listen"` + YamuxPort int `yaml:"yamuxPort"` + QuicPort int `yaml:"quicPort"` + Mongo struct { + Connect string `yaml:"connect"` + Database string `yaml:"database"` + } `yaml:"mongo"` + DefaultLimits struct { + SpaceMembersRead int `yaml:"spaceMembersRead"` + SpaceMembersWrite int `yaml:"spaceMembersWrite"` + SharedSpacesLimit int `yaml:"sharedSpacesLimit"` + } `yaml:"defaultLimits"` } `yaml:"any-sync-coordinator"` AnySyncConsensusNode struct { - ListenAddr string `yaml:"listen"` - YamuxPort int `yaml:"yamuxPort"` - QuicPort int `yaml:"quicPort"` - Mongo struct { - Connect string `yaml:"connect"` - Database string `yaml:"database"` - } `yaml:"mongo"` + ListenAddr string `yaml:"listen"` + YamuxPort int `yaml:"yamuxPort"` + QuicPort int `yaml:"quicPort"` + Mongo struct { + Connect string `yaml:"connect"` + Database string `yaml:"database"` + } `yaml:"mongo"` } `yaml:"any-sync-consensusnode"` AnySyncFilenode struct { - ListenAddr string `yaml:"listen"` - YamuxPort int `yaml:"yamuxPort"` - QuicPort int `yaml:"quicPort"` - S3Store struct { - Endpoint string `yaml:"endpoint"` - Bucket string `yaml:"bucket"` - IndexBucket string `yaml:"indexBucket"` - Region string `yaml:"region"` - Profile string `yaml:"profile"` - ForcePathStyle bool `yaml:"forcePathStyle"` - } `yaml:"s3Store"` - Redis struct { - URL string `yaml:"url"` - } `yaml:"redis"` - DefaultLimit int `yaml:"defaultLimit"` + ListenAddr string `yaml:"listen"` + YamuxPort int `yaml:"yamuxPort"` + QuicPort int `yaml:"quicPort"` + S3Store struct { + Endpoint string `yaml:"endpoint"` + Bucket string `yaml:"bucket"` + IndexBucket string `yaml:"indexBucket"` + Region string `yaml:"region"` + Profile string `yaml:"profile"` + ForcePathStyle bool `yaml:"forcePathStyle"` + } `yaml:"s3Store"` + Redis struct { + URL string `yaml:"url"` + } `yaml:"redis"` + DefaultLimit int `yaml:"defaultLimit"` } `yaml:"any-sync-filenode"` AnySyncNode struct { - ListenAddr []string `yaml:"listen"` - YamuxPort int `yaml:"yamuxPort"` - QuicPort int `yaml:"quicPort"` + ListenAddr []string `yaml:"listen"` + YamuxPort []int `yaml:"yamuxPort"` + QuicPort []int `yaml:"quicPort"` } `yaml:"any-sync-node"` } @@ -216,8 +216,8 @@ var create = &cobra.Command{ var defaultCoordinatorAddress = cfg.AnySyncCoordinator.ListenAddr var defaultCoordinatorYamuxPort = strconv.Itoa(cfg.AnySyncCoordinator.YamuxPort) var defaultCoordinatorQuicPort = strconv.Itoa(cfg.AnySyncCoordinator.QuicPort) - var defaultCoordinatorMongoConnect = cfg.AnySyncCoordinator.Mongo.Connect - var defaultCoordinatorMongoDb = cfg.AnySyncCoordinator.Mongo.Database + var defaultCoordinatorMongoConnect = cfg.AnySyncCoordinator.Mongo.Connect + var defaultCoordinatorMongoDb = cfg.AnySyncCoordinator.Mongo.Database var coordinatorQs = []*survey.Question{ { @@ -225,7 +225,6 @@ var create = &cobra.Command{ Prompt: &survey.Input{ Message: "Any-Sync Coordinator Node address (without port)", Default: defaultCoordinatorAddress, - }, Validate: survey.Required, }, @@ -271,9 +270,9 @@ var create = &cobra.Command{ MongoDB string }{ Address: defaultCoordinatorAddress, - YamuxPort: defaultCoordinatorYamuxPort, - QuicPort: defaultCoordinatorQuicPort, - MongoConnect: defaultCoordinatorMongoConnect, + YamuxPort: defaultCoordinatorYamuxPort, + QuicPort: defaultCoordinatorQuicPort, + MongoConnect: defaultCoordinatorMongoConnect, MongoDB: defaultCoordinatorMongoDb, } @@ -359,8 +358,8 @@ var create = &cobra.Command{ } consensusNode := defaultConsensusNode() - consensusNode.Yamux.ListenAddrs = append(consensusNode.Yamux.ListenAddrs, consensusAs.Address + ":" + consensusAs.YamuxPort) - consensusNode.Quic.ListenAddrs = append(consensusNode.Quic.ListenAddrs, consensusAs.Address + ":" + consensusAs.QuicPort) + consensusNode.Yamux.ListenAddrs = append(consensusNode.Yamux.ListenAddrs, consensusAs.Address+":"+consensusAs.YamuxPort) + consensusNode.Quic.ListenAddrs = append(consensusNode.Quic.ListenAddrs, consensusAs.Address+":"+consensusAs.QuicPort) consensusNode.Mongo.Connect = cfg.AnySyncConsensusNode.Mongo.Connect consensusNode.Mongo.Database = consensusAs.MongoDB consensusNode.Account = generateAccount() @@ -371,10 +370,11 @@ var create = &cobra.Command{ if !autoFlag { createSyncNode(0) } else { - for node := 0; node < listenCount; node++ { - createSyncNode(node) + for i := 0; i < listenCount; i++ { + createSyncNode(i) } } + createFileNode() lastStepOptions() @@ -402,7 +402,7 @@ var create = &cobra.Command{ } } - createConfigFile(network.HeartConfig, "etc/client") // to import to client app + createConfigFile(network.HeartConfig, "etc/client") // to import to client app createConfigFile(network.HeartConfig, "etc/any-sync-coordinator/network") // to any-sync-confapply tool fmt.Println("Done!") @@ -411,7 +411,7 @@ var create = &cobra.Command{ var network = Network{} -func addToNetwork(node GeneralNodeConfig, nodeType string) { +func addToNetwork(node GeneralNodeConfig, nodeType string, index ...int) { addresses := []string{} yamuxPort := 0 quicPort := 0 @@ -427,8 +427,13 @@ func addToNetwork(node GeneralNodeConfig, nodeType string) { yamuxPort = cfg.AnySyncFilenode.YamuxPort quicPort = cfg.AnySyncFilenode.QuicPort case "tree": - yamuxPort = cfg.AnySyncNode.YamuxPort - quicPort = cfg.AnySyncNode.QuicPort + if len(index) > 0 { + yamuxPort = cfg.AnySyncNode.YamuxPort[index[0]] + quicPort = cfg.AnySyncNode.QuicPort[index[0]] + } else { + fmt.Println("Error: Index required for tree node type") + return + } } for _, addr := range node.Yamux.ListenAddrs { @@ -452,8 +457,8 @@ var syncNodes = []SyncNodeConfig{} func createSyncNode(index int) { var defaultSyncNodeAddress = cfg.AnySyncNode.ListenAddr[index] - var defaultSyncNodeYamuxPort = strconv.Itoa(cfg.AnySyncNode.YamuxPort) - var defaultSyncNodeQuicPort = strconv.Itoa(cfg.AnySyncNode.QuicPort) + var defaultSyncNodeYamuxPort = strconv.Itoa(cfg.AnySyncNode.YamuxPort[index]) + var defaultSyncNodeQuicPort = strconv.Itoa(cfg.AnySyncNode.QuicPort[index]) fmt.Println("\nCreating sync node...") @@ -507,12 +512,8 @@ func createSyncNode(index int) { syncNode.Quic.ListenAddrs = append(syncNode.Quic.ListenAddrs, answers.Address+":"+answers.QuicPort) syncNode.Account = generateAccount() - addToNetwork(syncNode.GeneralNodeConfig, "tree") + addToNetwork(syncNode.GeneralNodeConfig, "tree", index) syncNodes = append(syncNodes, syncNode) - - // Increase sync node port - cfg.AnySyncNode.YamuxPort++ - cfg.AnySyncNode.QuicPort++ } var fileNodes = []FileNodeConfig{} @@ -543,7 +544,7 @@ func createFileNode() { Name: "yamuxPort", Prompt: &survey.Input{ Message: "Any-Sync File Node Yamux (TCP) port", - Default: defaultFileNodeYamuxPort, + Default: defaultFileNodeYamuxPort, }, Validate: survey.Required, }, @@ -551,7 +552,7 @@ func createFileNode() { Name: "quicPort", Prompt: &survey.Input{ Message: "Any-Sync File Node Quic (UDP) port", - Default: defaultFileNodeQuicPort, + Default: defaultFileNodeQuicPort, }, Validate: survey.Required, }, @@ -559,7 +560,7 @@ func createFileNode() { Name: "s3Endpoint", Prompt: &survey.Input{ Message: "S3 Endpoint", - Help: "Required only in the case you self-host S3-compatible object storage", + Help: "Required only in the case you self-host S3-compatible object storage", Default: defaultS3Endpoint, }, }, @@ -637,8 +638,8 @@ func createFileNode() { } fileNode := defaultFileNode() - fileNode.Yamux.ListenAddrs = append(fileNode.Yamux.ListenAddrs, answers.Address + ":" + answers.YamuxPort) - fileNode.Quic.ListenAddrs = append(fileNode.Quic.ListenAddrs, answers.Address + ":" + answers.QuicPort) + fileNode.Yamux.ListenAddrs = append(fileNode.Yamux.ListenAddrs, answers.Address+":"+answers.YamuxPort) + fileNode.Quic.ListenAddrs = append(fileNode.Quic.ListenAddrs, answers.Address+":"+answers.QuicPort) fileNode.S3Store.Endpoint = answers.S3Endpoint fileNode.S3Store.Region = answers.S3Region fileNode.S3Store.Profile = answers.S3Profile @@ -752,8 +753,8 @@ func defaultCoordinatorNode() CoordinatorNodeConfig { Log string "yaml:\"log\"" Spaces string "yaml:\"spaces\"" }{ - Log: "log", - Spaces: "spaces", + Log: "log", + Spaces: "spaces", }, SpaceStatus: struct { RunSeconds int "yaml:\"runSeconds\"" @@ -778,8 +779,8 @@ func defaultConsensusNode() ConsensusNodeConfig { return ConsensusNodeConfig{ GeneralNodeConfig: defaultGeneralNode(), Mongo: struct { - Connect string "yaml:\"connect\"" - Database string "yaml:\"database\"" + Connect string "yaml:\"connect\"" + Database string "yaml:\"database\"" LogCollection string "yaml:\"logCollection\"" }{ LogCollection: "log", @@ -789,7 +790,7 @@ func defaultConsensusNode() ConsensusNodeConfig { func defaultSyncNode() SyncNodeConfig { return SyncNodeConfig{ - GeneralNodeConfig: defaultGeneralNode(), + GeneralNodeConfig: defaultGeneralNode(), Space: struct { GcTTL int "yaml:\"gcTTL\"" SyncPeriod int "yaml:\"syncPeriod\"" @@ -819,8 +820,8 @@ func defaultSyncNode() SyncNodeConfig { func defaultFileNode() FileNodeConfig { return FileNodeConfig{ - GeneralNodeConfig: defaultGeneralNode(), - DefaultLimit: cfg.AnySyncFilenode.DefaultLimit, + GeneralNodeConfig: defaultGeneralNode(), + DefaultLimit: cfg.AnySyncFilenode.DefaultLimit, S3Store: struct { Endpoint string "yaml:\"endpoint,omitempty\"" Bucket string "yaml:\"bucket\"" @@ -830,8 +831,8 @@ func defaultFileNode() FileNodeConfig { MaxThreads int "yaml:\"maxThreads\"" ForcePathStyle bool "yaml:\"forcePathStyle\"" }{ - MaxThreads: 16, - IndexBucket: cfg.AnySyncFilenode.S3Store.IndexBucket, + MaxThreads: 16, + IndexBucket: cfg.AnySyncFilenode.S3Store.IndexBucket, ForcePathStyle: cfg.AnySyncFilenode.S3Store.ForcePathStyle, }, Redis: struct { diff --git a/any-sync-network/defaultTemplate.yml b/any-sync-network/defaultTemplate.yml index 0c524fe..257a622 100644 --- a/any-sync-network/defaultTemplate.yml +++ b/any-sync-network/defaultTemplate.yml @@ -41,5 +41,11 @@ any-sync-node: - any-sync-node-1 - any-sync-node-2 - any-sync-node-3 - yamuxPort: 4430 - quicPort: 5430 + yamuxPort: + - 4430 + - 4431 + - 4432 + quicPort: + - 5430 + - 5431 + - 5432 From 3cde1afb47744a25dd74632a831ee0a0f71cbcf6 Mon Sep 17 00:00:00 2001 From: Kirill Shklyaev Date: Fri, 22 Nov 2024 15:17:30 +0300 Subject: [PATCH 2/2] bump go dependencies --- go.mod | 22 +++++++++++----------- go.sum | 44 ++++++++++++++++++++++---------------------- 2 files changed, 33 insertions(+), 33 deletions(-) diff --git a/go.mod b/go.mod index cc8349d..b42f873 100644 --- a/go.mod +++ b/go.mod @@ -1,18 +1,18 @@ module github.com/anyproto/any-sync-tools -go 1.22.0 +go 1.23.0 toolchain go1.23.2 require ( github.com/AlecAivazis/survey/v2 v2.3.7 - github.com/anyproto/any-sync v0.5.12 + github.com/anyproto/any-sync v0.5.19 github.com/anyproto/go-chash v0.1.0 github.com/hashicorp/yamux v0.1.2 github.com/matishsiao/goInfo v0.0.0-20240924010139-10388a85396f github.com/spf13/cobra v1.8.1 go.uber.org/zap v1.27.0 - golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c + golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 gopkg.in/yaml.v3 v3.0.1 storj.io/drpc v0.0.34 @@ -69,14 +69,14 @@ require ( go.uber.org/atomic v1.11.0 // indirect go.uber.org/mock v0.5.0 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/crypto v0.28.0 // indirect - golang.org/x/mod v0.21.0 // indirect - golang.org/x/net v0.30.0 // indirect - golang.org/x/sync v0.8.0 // indirect - golang.org/x/sys v0.26.0 // indirect - golang.org/x/term v0.25.0 // indirect - golang.org/x/text v0.19.0 // indirect - golang.org/x/tools v0.26.0 // indirect + golang.org/x/crypto v0.29.0 // indirect + golang.org/x/mod v0.22.0 // indirect + golang.org/x/net v0.31.0 // indirect + golang.org/x/sync v0.9.0 // indirect + golang.org/x/sys v0.27.0 // indirect + golang.org/x/term v0.26.0 // indirect + golang.org/x/text v0.20.0 // indirect + golang.org/x/tools v0.27.0 // indirect google.golang.org/protobuf v1.35.1 // indirect lukechampine.com/blake3 v1.3.0 // indirect ) diff --git a/go.sum b/go.sum index 3e94776..0b2a462 100644 --- a/go.sum +++ b/go.sum @@ -7,8 +7,8 @@ github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2/go.mod h1:HBCaDe github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= -github.com/anyproto/any-sync v0.5.12 h1:rBpp/oGMy7Jsuc96gTBtZwyfgBG1AQFHLYJ873J0qzU= -github.com/anyproto/any-sync v0.5.12/go.mod h1:Wir+T6ObKH6v1fnGBHKby9Y7tLOzeqLM7wRPjlLw+LM= +github.com/anyproto/any-sync v0.5.19 h1:pUnqO9AB9oDFIG5kx/b2TEA7uq3odaLpw/kVr38pxZ4= +github.com/anyproto/any-sync v0.5.19/go.mod h1:K53/whh/9tmGbXrkPS59XyqWU3SaxhsX9g6VIYnBIlU= github.com/anyproto/go-chash v0.1.0 h1:I9meTPjXFRfXZHRJzjOHC/XF7Q5vzysKkiT/grsogXY= github.com/anyproto/go-chash v0.1.0/go.mod h1:0UjNQi3PDazP0fINpFYu6VKhuna+W/V+1vpXHAfNgLY= github.com/anyproto/go-slip10 v1.0.0 h1:uAEtSuudR3jJBOfkOXf3bErxVoxbuKwdoJN55M1i6IA= @@ -203,17 +203,17 @@ golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20200602180216-279210d13fed/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.28.0 h1:GBDwsMXVQi34v5CCYUm2jkJvu4cbtru2U4TN2PSyQnw= -golang.org/x/crypto v0.28.0/go.mod h1:rmgy+3RHxRZMyY0jjAJShp2zgEdOqj2AO7U0pYmeQ7U= -golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c h1:7dEasQXItcW1xKJ2+gg5VOiBnqWrJc+rq0DPKyvvdbY= -golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c/go.mod h1:NQtJDoLvd6faHhE7m4T/1IY708gDefGGjR/iUW8yQQ8= +golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ= +golang.org/x/crypto v0.29.0/go.mod h1:+F4F4N5hv6v38hfeYwTdx20oUvLLc+QfrE9Ax9HtgRg= +golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo= +golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak= golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0= -golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= +golang.org/x/mod v0.22.0 h1:D4nJWe9zXqHOmWqj4VMOJhvzj7bEZg4wEYa759z1pH4= +golang.org/x/mod v0.22.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -223,16 +223,16 @@ golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwY golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4= -golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU= +golang.org/x/net v0.31.0 h1:68CPQngjLL0r2AlUKiSxtQFKvzRVbnzLwMUn5SzcLHo= +golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 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.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= -golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ= +golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -249,20 +249,20 @@ golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/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.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo= -golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= +golang.org/x/sys v0.27.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.25.0 h1:WtHI/ltw4NvSUig5KARz9h521QvRC8RmF/cuYqifU24= -golang.org/x/term v0.25.0/go.mod h1:RPyXicDX+6vLxogjjRxjgD2TKtmAO6NZBsBRfrOLu7M= +golang.org/x/term v0.26.0 h1:WEQa6V3Gja/BhNxg540hBip/kkaYtRg3cxg4oXSw4AU= +golang.org/x/term v0.26.0/go.mod h1:Si5m1o57C5nBNQo5z1iq+XDijt21BDBDp2bK0QI8e3E= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= 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.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM= -golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= -golang.org/x/time v0.7.0 h1:ntUhktv3OPE6TgYxXWv9vKvUSJyIFJlyohwbkEwPrKQ= -golang.org/x/time v0.7.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= +golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/time v0.8.0 h1:9i3RxcPv3PZnitoVGMPDKZSq1xW1gK1Xy3ArNOGZfEg= +golang.org/x/time v0.8.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -270,8 +270,8 @@ golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.26.0 h1:v/60pFQmzmT9ExmjDv2gGIfi3OqfKoEP6I5+umXlbnQ= -golang.org/x/tools v0.26.0/go.mod h1:TPVVj70c7JJ3WCazhD8OdXcZg/og+b9+tH/KxylGwH0= +golang.org/x/tools v0.27.0 h1:qEKojBykQkQ4EynWy4S8Weg69NumxKdn40Fce3uc/8o= +golang.org/x/tools v0.27.0/go.mod h1:sUi0ZgbwW9ZPAq26Ekut+weQPR5eIM6GQLQ1Yjm1H0Q= 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=