This is an automated email from the ASF dual-hosted git repository.

zhongxjian pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/dubbo-kubernetes.git


The following commit(s) were added to refs/heads/master by this push:
     new 351a9cdb [dubboctl] add docker cerdential logic (#583)
351a9cdb is described below

commit 351a9cdbdf3cc6b547f0ec7b65a9ba95b141bfde
Author: Jian Zhong <[email protected]>
AuthorDate: Fri Feb 7 13:56:19 2025 +0800

    [dubboctl] add docker cerdential logic (#583)
---
 dubboctl/cmd/root.go                        |  22 +-
 dubboctl/pkg/hub/credentials/credentials.go | 338 ++++++++++++++++++++++++++++
 go.mod                                      |  79 ++++---
 go.sum                                      | 162 +++++++------
 4 files changed, 483 insertions(+), 118 deletions(-)

diff --git a/dubboctl/cmd/root.go b/dubboctl/cmd/root.go
index dc02f154..988ee74a 100644
--- a/dubboctl/cmd/root.go
+++ b/dubboctl/cmd/root.go
@@ -19,8 +19,8 @@ import (
        "flag"
        "github.com/apache/dubbo-kubernetes/dubboctl/pkg/cli"
        "github.com/apache/dubbo-kubernetes/dubboctl/pkg/hub/builder/pack"
-       // "github.com/apache/dubbo-kubernetes/dubboctl/pkg/hub/credentials"
-       // 
"github.com/apache/dubbo-kubernetes/dubboctl/pkg/hub/credentials/prompt"
+       "github.com/apache/dubbo-kubernetes/dubboctl/pkg/hub/credentials"
+       "github.com/apache/dubbo-kubernetes/dubboctl/pkg/hub/credentials/prompt"
        "github.com/apache/dubbo-kubernetes/dubboctl/pkg/hub/deployer"
        "github.com/apache/dubbo-kubernetes/dubboctl/pkg/hub/pusher"
        "github.com/apache/dubbo-kubernetes/dubboctl/pkg/sdk"
@@ -30,6 +30,7 @@ import (
        "github.com/apache/dubbo-kubernetes/operator/cmd/cluster"
        "github.com/spf13/cobra"
        "net/http"
+       "os"
        // "os"
 )
 
@@ -42,13 +43,13 @@ type ClientFactory func(...sdk.Option) (*sdk.Client, func())
 func NewClientFactory(options ...sdk.Option) (*sdk.Client, func()) {
        var (
                t = newTransport(false)
-               // c = newCredentialsProvider(config.Dir(), t)
+               c = newCredentialsProvider(util.Dir(), t)
                d = newDubboDeployer()
                o = []sdk.Option{
                        sdk.WithRepositoriesPath(util.RepositoriesPath()),
                        sdk.WithBuilder(pack.NewBuilder()),
                        sdk.WithPusher(pusher.NewPusher(
-                               // pusher.WithCredentialsProvider(c),
+                               pusher.WithCredentialsProvider(c),
                                pusher.WithTransport(t))),
                        sdk.WithDeployer(d),
                }
@@ -64,13 +65,12 @@ func newTransport(insecureSkipVerify bool) 
pusher.RoundTripCloser {
 }
 
 func newCredentialsProvider(configPath string, t http.RoundTripper) 
pusher.CredentialsProvider {
-       // options := []credentials.Opt{
-       //      
credentials.WithPromptForCredentials(prompt.NewPromptForCredentials(os.Stdin, 
os.Stdout, os.Stderr)),
-       //      
credentials.WithPromptForCredentialStore(prompt.NewPromptForCredentialStore()),
-       //      credentials.WithTransport(t),
-       // }
-       // TODO
-       return nil
+       options := []credentials.Opt{
+               
credentials.WithPromptForCredentials(prompt.NewPromptForCredentials(os.Stdin, 
os.Stdout, os.Stderr)),
+               
credentials.WithPromptForCredentialStore(prompt.NewPromptForCredentialStore()),
+               credentials.WithTransport(t),
+       }
+       return credentials.NewCredentialsProvider(configPath, options...)
 }
 
 func newDubboDeployer() sdk.Deployer {
diff --git a/dubboctl/pkg/hub/credentials/credentials.go 
b/dubboctl/pkg/hub/credentials/credentials.go
index 37d666bb..73830104 100644
--- a/dubboctl/pkg/hub/credentials/credentials.go
+++ b/dubboctl/pkg/hub/credentials/credentials.go
@@ -2,14 +2,31 @@ package credentials
 
 import (
        "context"
+       "encoding/json"
        "errors"
        "fmt"
        "github.com/apache/dubbo-kubernetes/dubboctl/pkg/hub/pusher"
+       dockerConfig "github.com/containers/image/v5/pkg/docker/config"
+       containersTypes "github.com/containers/image/v5/types"
+       "github.com/docker/docker-credential-helpers/client"
+       "github.com/docker/docker-credential-helpers/credentials"
        "github.com/google/go-containerregistry/pkg/authn"
        "github.com/google/go-containerregistry/pkg/name"
        "github.com/google/go-containerregistry/pkg/v1/remote"
        "github.com/google/go-containerregistry/pkg/v1/remote/transport"
+       "net"
        "net/http"
+       "net/url"
+       "os"
+       "path/filepath"
+       "runtime"
+       "strings"
+)
+
+var (
+       ErrUnauthorized                 = errors.New("bad credentials")
+       ErrCredentialsNotFound          = errors.New("credentials not found")
+       errNoCredentialHelperConfigured = errors.New("no credential helper 
configure")
 )
 
 type keyChain struct {
@@ -32,6 +49,157 @@ type credentialsProvider struct {
        transport                http.RoundTripper
 }
 
+func NewCredentialsProvider(configPath string, opts ...Opt) 
pusher.CredentialsProvider {
+       var c credentialsProvider
+
+       for _, o := range opts {
+               o(&c)
+       }
+
+       if c.transport == nil {
+               c.transport = http.DefaultTransport
+       }
+
+       if c.verifyCredentials == nil {
+               c.verifyCredentials = func(ctx context.Context, registry 
string, credentials pusher.Credentials) error {
+                       return checkAuth(ctx, registry, credentials, 
c.transport)
+               }
+       }
+
+       if c.promptForCredentialStore == nil {
+               c.promptForCredentialStore = func(available []string) (string, 
error) {
+                       return "", nil
+               }
+       }
+
+       c.authFilePath = filepath.Join(configPath, "auth.json")
+       sys := &containersTypes.SystemContext{
+               AuthFilePath: c.authFilePath,
+       }
+
+       home, err := os.UserHomeDir()
+       if err != nil {
+               panic(err)
+       }
+       dockerConfigPath := filepath.Join(home, ".docker", "config.json")
+
+       defaultCredentialLoaders := []CredentialsCallback{
+               func(registry string) (pusher.Credentials, error) {
+                       return getCredentialsByCredentialHelper(c.authFilePath, 
registry)
+               },
+               func(registry string) (pusher.Credentials, error) {
+                       return 
getCredentialsByCredentialHelper(dockerConfigPath, registry)
+               },
+               func(registry string) (pusher.Credentials, error) {
+                       creds, err := dockerConfig.GetCredentials(sys, registry)
+                       if err != nil {
+                               return pusher.Credentials{}, err
+                       }
+                       return pusher.Credentials{
+                               Username: creds.Username,
+                               Password: creds.Password,
+                       }, nil
+               },
+               func(registry string) (pusher.Credentials, error) {
+                       return pusher.Credentials{}, nil
+               },
+       }
+
+       c.credentialLoaders = append(c.credentialLoaders, 
defaultCredentialLoaders...)
+
+       return c.getCredentials
+}
+
+func (c *credentialsProvider) getCredentials(ctx context.Context, image 
string) (pusher.Credentials, error) {
+       var err error
+       result := pusher.Credentials{}
+
+       ref, err := name.ParseReference(image)
+       if err != nil {
+               return pusher.Credentials{}, fmt.Errorf("cannot parse the image 
reference: %w", err)
+       }
+
+       registry := ref.Context().RegistryStr()
+
+       for _, load := range c.credentialLoaders {
+
+               result, err = load(registry)
+
+               if err != nil {
+                       if errors.Is(err, ErrCredentialsNotFound) {
+                               continue
+                       }
+                       return pusher.Credentials{}, err
+               }
+
+               err = c.verifyCredentials(ctx, image, result)
+               if err == nil {
+                       return result, nil
+               } else {
+                       if !errors.Is(err, ErrUnauthorized) {
+                               return pusher.Credentials{}, err
+                       }
+               }
+
+       }
+
+       if c.promptForCredentials == nil {
+               return pusher.Credentials{}, ErrCredentialsNotFound
+       }
+
+       for {
+               result, err = c.promptForCredentials(registry)
+               if err != nil {
+                       return pusher.Credentials{}, err
+               }
+
+               err = c.verifyCredentials(ctx, image, result)
+               if err == nil {
+                       err = setCredentialsByCredentialHelper(c.authFilePath, 
registry, result.Username, result.Password)
+                       if err != nil {
+
+                               // This shouldn't be fatal error.
+                               if strings.Contains(err.Error(), "not 
implemented") {
+                                       fmt.Fprintf(os.Stderr, "the cred-helper 
does not support write operation (consider changing the cred-helper it in 
auth.json)\n")
+                                       return pusher.Credentials{}, nil
+                               }
+
+                               if !errors.Is(err, 
errNoCredentialHelperConfigured) {
+                                       return pusher.Credentials{}, err
+                               }
+                               helpers := listCredentialHelpers()
+                               helper, err := 
c.promptForCredentialStore(helpers)
+                               if err != nil {
+                                       return pusher.Credentials{}, err
+                               }
+                               helper = strings.TrimPrefix(helper, 
"docker-credential-")
+                               err = 
setCredentialHelperToConfig(c.authFilePath, helper)
+                               if err != nil {
+                                       return pusher.Credentials{}, 
fmt.Errorf("faild to set the helper to the config: %w", err)
+                               }
+                               err = 
setCredentialsByCredentialHelper(c.authFilePath, registry, result.Username, 
result.Password)
+                               if err != nil {
+
+                                       if strings.Contains(err.Error(), "not 
implemented") {
+                                               fmt.Fprintf(os.Stderr, "the 
cred-helper does not support write operation (consider changing the cred-helper 
it in auth.json)\n")
+                                               return pusher.Credentials{}, nil
+                                       }
+
+                                       if !errors.Is(err, 
errNoCredentialHelperConfigured) {
+                                               return pusher.Credentials{}, err
+                                       }
+                               }
+                       }
+                       return result, nil
+               } else {
+                       if errors.Is(err, ErrUnauthorized) {
+                               continue
+                       }
+                       return pusher.Credentials{}, err
+               }
+       }
+}
+
 func (k keyChain) Resolve(resource authn.Resource) (authn.Authenticator, 
error) {
        return &authn.Basic{
                Username: k.user,
@@ -62,6 +230,176 @@ func checkAuth(ctx context.Context, image string, 
credentials pusher.Credentials
        return nil
 }
 
+func getCredentialHelperFromConfig(confFilePath string) (string, error) {
+       data, err := os.ReadFile(confFilePath)
+       if err != nil {
+               return "", err
+       }
+
+       conf := struct {
+               Store string `json:"credsStore"`
+       }{}
+
+       err = json.Unmarshal(data, &conf)
+       if err != nil {
+               return "", err
+       }
+
+       return conf.Store, nil
+}
+
+func setCredentialHelperToConfig(confFilePath, helper string) error {
+       var err error
+
+       configData := make(map[string]interface{})
+
+       if data, err := os.ReadFile(confFilePath); err == nil {
+               err = json.Unmarshal(data, &configData)
+               if err != nil {
+                       return err
+               }
+       }
+
+       configData["credsStore"] = helper
+
+       data, err := json.MarshalIndent(&configData, "", "    ")
+       if err != nil {
+               return err
+       }
+
+       err = os.WriteFile(confFilePath, data, 0o600)
+       if err != nil {
+               return err
+       }
+
+       return nil
+}
+
+func getCredentialsByCredentialHelper(confFilePath, registry string) 
(pusher.Credentials, error) {
+       result := pusher.Credentials{}
+
+       helper, err := getCredentialHelperFromConfig(confFilePath)
+       if err != nil && !os.IsNotExist(err) {
+               return result, fmt.Errorf("failed to get helper from config: 
%w", err)
+       }
+       if helper == "" {
+               return result, ErrCredentialsNotFound
+       }
+
+       helperName := fmt.Sprintf("docker-credential-%s", helper)
+       p := client.NewShellProgramFunc(helperName)
+
+       credentialsMap, err := client.List(p)
+       if err != nil {
+               return result, fmt.Errorf("failed to list credentials: %w", err)
+       }
+
+       for serverUrl := range credentialsMap {
+               if RegistryEquals(serverUrl, registry) {
+                       creds, err := client.Get(p, serverUrl)
+                       if err != nil {
+                               return result, fmt.Errorf("failed to get 
credentials: %w", err)
+                       }
+                       result.Username = creds.Username
+                       result.Password = creds.Secret
+                       return result, nil
+               }
+       }
+
+       return result, fmt.Errorf("failed to get credentials from helper 
specified in ~/.docker/config.json: %w", ErrCredentialsNotFound)
+}
+
+func setCredentialsByCredentialHelper(confFilePath, registry, username, secret 
string) error {
+       helper, err := getCredentialHelperFromConfig(confFilePath)
+
+       if helper == "" || os.IsNotExist(err) {
+               return errNoCredentialHelperConfigured
+       }
+       if err != nil {
+               return fmt.Errorf("failed to get helper from config: %w", err)
+       }
+
+       helperName := fmt.Sprintf("docker-credential-%s", helper)
+       p := client.NewShellProgramFunc(helperName)
+
+       return client.Store(p, &credentials.Credentials{ServerURL: registry, 
Username: username, Secret: secret})
+}
+
+func listCredentialHelpers() []string {
+       path := os.Getenv("PATH")
+       paths := strings.Split(path, string(os.PathListSeparator))
+
+       helpers := make(map[string]bool)
+       for _, p := range paths {
+               fss, err := os.ReadDir(p)
+               if err != nil {
+                       continue
+               }
+               for _, fi := range fss {
+                       if fi.IsDir() {
+                               continue
+                       }
+                       if !strings.HasPrefix(fi.Name(), "docker-credential-") {
+                               continue
+                       }
+                       if runtime.GOOS == "windows" {
+                               ext := filepath.Ext(fi.Name())
+                               if ext != ".exe" && ext != ".bat" {
+                                       continue
+                               }
+                       }
+                       helpers[fi.Name()] = true
+               }
+       }
+       result := make([]string, 0, len(helpers))
+       for h := range helpers {
+               result = append(result, h)
+       }
+       return result
+}
+
+func hostPort(registry string) (host string, port string) {
+       if !strings.Contains(registry, "://") {
+               h, p, err := net.SplitHostPort(registry)
+
+               if err == nil {
+                       host, port = h, p
+                       return
+               }
+               registry = "https://"; + registry
+       }
+
+       u, err := url.Parse(registry)
+       if err != nil {
+               panic(err)
+       }
+       host = u.Hostname()
+       port = u.Port()
+       return
+}
+
+func RegistryEquals(regA, regB string) bool {
+       h1, p1 := hostPort(regA)
+       h2, p2 := hostPort(regB)
+
+       isStdPort := func(p string) bool { return p == "443" || p == "80" }
+
+       portEq := p1 == p2 ||
+               (p1 == "" && isStdPort(p2)) ||
+               (isStdPort(p1) && p2 == "")
+
+       if h1 == h2 && portEq {
+               return true
+       }
+
+       if strings.HasSuffix(h1, "docker.io") &&
+               strings.HasSuffix(h2, "docker.io") {
+               return true
+       }
+
+       return false
+}
+
 type Opt func(opts *credentialsProvider)
 
 func WithPromptForCredentials(cbk CredentialsCallback) Opt {
diff --git a/go.mod b/go.mod
index 92925c42..5f9e080a 100644
--- a/go.mod
+++ b/go.mod
@@ -25,14 +25,16 @@ require (
        github.com/bakito/go-log-logr-adapter v0.0.2
        github.com/buildpacks/pack v0.30.0
        github.com/cheggaaa/pb/v3 v3.1.5
-       github.com/docker/cli v24.0.5+incompatible
-       github.com/docker/docker v24.0.5+incompatible
-       github.com/docker/go-connections v0.4.0
+       github.com/containers/image/v5 v5.34.0
+       github.com/docker/cli v27.5.1+incompatible
+       github.com/docker/docker v27.5.1+incompatible
+       github.com/docker/docker-credential-helpers v0.8.2
+       github.com/docker/go-connections v0.5.0
        github.com/dubbogo/go-zookeeper v1.0.4-0.20211212162352-f9d2183d89d5
        github.com/dubbogo/gost v1.14.0
        github.com/emicklei/go-restful/v3 v3.11.0
-       github.com/envoyproxy/go-control-plane v0.12.0
-       github.com/envoyproxy/protoc-gen-validate v1.0.4
+       github.com/envoyproxy/go-control-plane v0.13.1
+       github.com/envoyproxy/protoc-gen-validate v1.1.0
        github.com/fatih/color v1.18.0
        github.com/fullstorydev/grpcurl v1.9.1
        github.com/ghodss/yaml v1.0.0
@@ -48,7 +50,7 @@ require (
        github.com/golang/mock v1.6.0
        github.com/golang/protobuf v1.5.4
        github.com/google/go-cmp v0.6.0
-       github.com/google/go-containerregistry v0.16.1
+       github.com/google/go-containerregistry v0.20.2
        github.com/google/uuid v1.6.0
        github.com/grpc-ecosystem/go-grpc-middleware v1.3.0
        github.com/hashicorp/go-multierror v1.1.1
@@ -62,27 +64,27 @@ require (
        github.com/ory/viper v1.7.5
        github.com/patrickmn/go-cache v2.1.0+incompatible
        github.com/pkg/errors v0.9.1
-       github.com/prometheus/client_golang v1.20.3
+       github.com/prometheus/client_golang v1.20.5
        github.com/sethvargo/go-retry v0.2.4
        github.com/slok/go-http-metrics v0.11.0
        github.com/spf13/cobra v1.8.1
        github.com/spf13/pflag v1.0.5
        github.com/spiffe/go-spiffe/v2 v2.1.7
        github.com/stretchr/testify v1.10.0
-       go.opentelemetry.io/otel/trace v1.28.0
+       go.opentelemetry.io/otel/trace v1.31.0
        go.uber.org/atomic v1.10.0
        go.uber.org/multierr v1.11.0
        go.uber.org/zap v1.27.0
        golang.org/x/crypto v0.32.0
-       golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56
+       golang.org/x/exp v0.0.0-20241217172543-b2144cdd0a67
        golang.org/x/net v0.34.0
        golang.org/x/sync v0.10.0
        golang.org/x/sys v0.29.0
        golang.org/x/term v0.28.0
        golang.org/x/text v0.21.0
-       google.golang.org/genproto/googleapis/rpc 
v0.0.0-20240826202546-f6391c0de4c7
-       google.golang.org/grpc v1.65.0
-       google.golang.org/protobuf v1.36.1
+       google.golang.org/genproto/googleapis/rpc 
v0.0.0-20250102185135-69823020774d
+       google.golang.org/grpc v1.69.4
+       google.golang.org/protobuf v1.36.2
        gopkg.in/natefinch/lumberjack.v2 v2.2.1
        gopkg.in/yaml.v3 v3.0.1
        gorm.io/driver/mysql v1.5.4
@@ -103,8 +105,8 @@ require (
 
 require (
        cel.dev/expr v0.18.0 // indirect
-       cloud.google.com/go/compute/metadata v0.3.0 // indirect
-       dario.cat/mergo v1.0.0 // indirect
+       cloud.google.com/go/compute/metadata v0.5.2 // indirect
+       dario.cat/mergo v1.0.1 // indirect
        github.com/Azure/azure-sdk-for-go v68.0.0+incompatible // indirect
        github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // 
indirect
        github.com/Azure/go-autorest v14.2.0+incompatible // indirect
@@ -115,11 +117,11 @@ require (
        github.com/Azure/go-autorest/autorest/date v0.3.0 // indirect
        github.com/Azure/go-autorest/logger v0.2.1 // indirect
        github.com/Azure/go-autorest/tracing v0.6.0 // indirect
-       github.com/BurntSushi/toml v1.3.2 // indirect
+       github.com/BurntSushi/toml v1.4.0 // indirect
        github.com/Masterminds/goutils v1.1.1 // indirect
        github.com/Masterminds/semver v1.5.0 // indirect
        github.com/Masterminds/sprig/v3 v3.2.3 // indirect
-       github.com/Microsoft/go-winio v0.6.1 // indirect
+       github.com/Microsoft/go-winio v0.6.2 // indirect
        github.com/OneOfOne/xxhash v1.2.8 // indirect
        github.com/ProtonMail/go-crypto v1.1.3 // indirect
        github.com/RoaringBitmap/roaring v1.2.3 // indirect
@@ -163,10 +165,11 @@ require (
        github.com/chrismellard/docker-credential-acr-env 
v0.0.0-20230304212654-82a0ddb27589 // indirect
        github.com/cloudflare/circl v1.3.7 // indirect
        github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe // indirect
-       github.com/cncf/xds/go v0.0.0-20240423153145-555b57ec207b // indirect
+       github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78 // indirect
        github.com/containerd/containerd v1.7.2 // indirect
-       github.com/containerd/stargz-snapshotter/estargz v0.14.3 // indirect
+       github.com/containerd/stargz-snapshotter/estargz v0.16.3 // indirect
        github.com/containerd/typeurl v1.0.2 // indirect
+       github.com/containers/storage v1.57.1 // indirect
        github.com/coreos/go-semver v0.3.1 // indirect
        github.com/coreos/go-systemd/v22 v22.5.0 // indirect
        github.com/creasty/defaults v1.5.2 // indirect
@@ -175,8 +178,7 @@ require (
        github.com/dgraph-io/ristretto v0.0.1 // indirect
        github.com/dimchansky/utfbom v1.1.1 // indirect
        github.com/dlclark/regexp2 v1.7.0 // indirect
-       github.com/docker/distribution v2.8.2+incompatible // indirect
-       github.com/docker/docker-credential-helpers v0.7.0 // indirect
+       github.com/docker/distribution v2.8.3+incompatible // indirect
        github.com/docker/go-units v0.5.0 // indirect
        github.com/dop251/goja v0.0.0-20240220182346-e401ed450204 // indirect
        github.com/dubbogo/grpc-go v1.42.10 // indirect
@@ -196,7 +198,7 @@ require (
        github.com/go-logr/stdr v1.2.2 // indirect
        github.com/go-ole/go-ole v1.2.6 // indirect
        github.com/go-openapi/jsonpointer v0.21.0 // indirect
-       github.com/go-openapi/jsonreference v0.20.2 // indirect
+       github.com/go-openapi/jsonreference v0.21.0 // indirect
        github.com/go-openapi/swag v0.23.0 // indirect
        github.com/go-playground/locales v0.14.1 // indirect
        github.com/go-playground/universal-translator v0.18.1 // indirect
@@ -236,7 +238,7 @@ require (
        github.com/k0kubun/pp v3.0.1+incompatible // indirect
        github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // 
indirect
        github.com/kevinburke/ssh_config v1.2.0 // indirect
-       github.com/klauspost/compress v1.17.9 // indirect
+       github.com/klauspost/compress v1.17.11 // indirect
        github.com/klauspost/cpuid/v2 v2.2.4 // indirect
        github.com/knadh/koanf v1.5.0 // indirect
        github.com/leodido/go-urn v1.2.4 // indirect
@@ -246,8 +248,8 @@ require (
        github.com/mailru/easyjson v0.7.7 // indirect
        github.com/mattn/go-colorable v0.1.13 // indirect
        github.com/mattn/go-isatty v0.0.20 // indirect
-       github.com/mattn/go-runewidth v0.0.15 // indirect
-       github.com/mattn/go-sqlite3 v1.14.17 // indirect
+       github.com/mattn/go-runewidth v0.0.16 // indirect
+       github.com/mattn/go-sqlite3 v1.14.24 // indirect
        github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b // indirect
        github.com/mitchellh/copystructure v1.2.0 // indirect
        github.com/mitchellh/go-homedir v1.1.0 // indirect
@@ -255,7 +257,10 @@ require (
        github.com/mitchellh/reflectwalk v1.0.2 // indirect
        github.com/moby/buildkit v0.11.6 // indirect
        github.com/moby/patternmatcher v0.5.0 // indirect
+       github.com/moby/sys/capability v0.4.0 // indirect
+       github.com/moby/sys/mountinfo v0.7.2 // indirect
        github.com/moby/sys/sequential v0.5.0 // indirect
+       github.com/moby/sys/user v0.3.0 // indirect
        github.com/moby/term v0.5.0 // indirect
        github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // 
indirect
        github.com/modern-go/reflect2 v1.0.2 // indirect
@@ -267,9 +272,10 @@ require (
        github.com/natefinch/lumberjack v2.0.0+incompatible // indirect
        github.com/oliveagle/jsonpath v0.0.0-20180606110733-2e52cf6e6852 // 
indirect
        github.com/opencontainers/go-digest v1.0.0 // indirect
-       github.com/opencontainers/image-spec v1.1.0-rc4 // indirect
+       github.com/opencontainers/image-spec v1.1.0 // indirect
        github.com/opencontainers/runc v1.1.7 // indirect
-       github.com/opencontainers/selinux v1.11.0 // indirect
+       github.com/opencontainers/runtime-spec v1.2.0 // indirect
+       github.com/opencontainers/selinux v1.11.1 // indirect
        github.com/opentracing/opentracing-go v1.2.0 // indirect
        github.com/openzipkin/zipkin-go v0.4.0 // indirect
        github.com/pelletier/go-toml v1.9.5 // indirect
@@ -277,14 +283,15 @@ require (
        github.com/peterbourgon/diskv v2.0.1+incompatible // indirect
        github.com/pierrec/lz4 v2.6.1+incompatible // indirect
        github.com/pjbgf/sha1cd v0.3.0 // indirect
+       github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 
// indirect
        github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // 
indirect
        github.com/polarismesh/polaris-go v1.3.0 // indirect
        github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // 
indirect
        github.com/prometheus/client_model v0.6.1 // indirect
-       github.com/prometheus/common v0.55.0 // indirect
+       github.com/prometheus/common v0.57.0 // indirect
        github.com/prometheus/procfs v0.15.1 // indirect
        github.com/rivo/tview v0.0.0-20220307222120-9994674d60a8 // indirect
-       github.com/rivo/uniseg v0.4.4 // indirect
+       github.com/rivo/uniseg v0.4.7 // indirect
        github.com/robfig/cron/v3 v3.0.1 // indirect
        github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06 // 
indirect
        github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // 
indirect
@@ -303,7 +310,7 @@ require (
        github.com/uber/jaeger-client-go v2.29.1+incompatible // indirect
        github.com/uber/jaeger-lib v2.4.1+incompatible // indirect
        github.com/ugorji/go/codec v1.2.11 // indirect
-       github.com/vbatts/tar-split v0.11.3 // indirect
+       github.com/vbatts/tar-split v0.11.7 // indirect
        github.com/x448/float16 v0.8.4 // indirect
        github.com/xanzy/ssh-agent v0.3.3 // indirect
        github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // 
indirect
@@ -315,30 +322,29 @@ require (
        go.etcd.io/etcd/client/pkg/v3 v3.5.16 // indirect
        go.etcd.io/etcd/client/v3 v3.5.16 // indirect
        go.opentelemetry.io/contrib/propagators/b3 v1.10.0 // indirect
-       go.opentelemetry.io/otel v1.28.0 // indirect
+       go.opentelemetry.io/otel v1.31.0 // indirect
        go.opentelemetry.io/otel/exporters/jaeger v1.17.0 // indirect
        go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0 // indirect
        go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0 
// indirect
-       go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.25.0 
// indirect
+       go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.28.0 
// indirect
        go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.10.0 // 
indirect
        go.opentelemetry.io/otel/exporters/zipkin v1.10.0 // indirect
-       go.opentelemetry.io/otel/metric v1.28.0 // indirect
-       go.opentelemetry.io/otel/sdk v1.28.0 // indirect
+       go.opentelemetry.io/otel/metric v1.31.0 // indirect
+       go.opentelemetry.io/otel/sdk v1.31.0 // indirect
        go.opentelemetry.io/proto/otlp v1.3.1 // indirect
        golang.org/x/arch v0.3.0 // indirect
        golang.org/x/mod v0.22.0 // indirect
-       golang.org/x/oauth2 v0.23.0 // indirect
+       golang.org/x/oauth2 v0.25.0 // indirect
        golang.org/x/time v0.7.0 // indirect
        golang.org/x/tools v0.28.0 // indirect
        gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect
        google.golang.org/genproto v0.0.0-20240213162025-012b6fc9bca9 // 
indirect
-       google.golang.org/genproto/googleapis/api 
v0.0.0-20240826202546-f6391c0de4c7 // indirect
+       google.golang.org/genproto/googleapis/api 
v0.0.0-20241015192408-796eee8c2d53 // indirect
        gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect
        gopkg.in/inf.v0 v0.9.1 // indirect
        gopkg.in/ini.v1 v1.67.0 // indirect
        gopkg.in/warnings.v0 v0.1.2 // indirect
        gopkg.in/yaml.v2 v2.4.0 // indirect
-       gotest.tools/v3 v3.5.1 // indirect
        k8s.io/cli-runtime v0.32.0 // indirect
        k8s.io/klog/v2 v2.130.1 // indirect
        sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 // indirect
@@ -349,5 +355,6 @@ require (
 
 replace (
        github.com/docker/cli => github.com/docker/cli v23.0.1+incompatible
+       github.com/docker/distribution => github.com/docker/distribution 
v2.8.2+incompatible
        github.com/docker/docker => github.com/docker/docker 
v23.0.1+incompatible
 )
diff --git a/go.sum b/go.sum
index f6917522..d12ce416 100644
--- a/go.sum
+++ b/go.sum
@@ -21,8 +21,8 @@ cloud.google.com/go/bigquery v1.4.0/go.mod 
h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvf
 cloud.google.com/go/bigquery v1.5.0/go.mod 
h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg=
 cloud.google.com/go/bigquery v1.7.0/go.mod 
h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc=
 cloud.google.com/go/bigquery v1.8.0/go.mod 
h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
-cloud.google.com/go/compute/metadata v0.3.0 
h1:Tz+eQXMEqDIKRsmY3cHTL6FVaynIjX2QxYC4trgAKZc=
-cloud.google.com/go/compute/metadata v0.3.0/go.mod 
h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k=
+cloud.google.com/go/compute/metadata v0.5.2 
h1:UxK4uu/Tn+I3p2dYWTfiX4wva7aYlKixAHn3fyqngqo=
+cloud.google.com/go/compute/metadata v0.5.2/go.mod 
h1:C66sj2AluDcIqakBq/M8lw8/ybHgOZqin2obFxa/E5k=
 cloud.google.com/go/datastore v1.0.0/go.mod 
h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
 cloud.google.com/go/datastore v1.1.0/go.mod 
h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
 cloud.google.com/go/firestore v1.1.0/go.mod 
h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk=
@@ -35,8 +35,8 @@ cloud.google.com/go/storage v1.5.0/go.mod 
h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0Zeo
 cloud.google.com/go/storage v1.6.0/go.mod 
h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
 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=
-dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk=
-dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=
+dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s=
+dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=
 dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod 
h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
 dubbo.apache.org/dubbo-go/v3 v3.2.0-rc1.0.20240926033233-f03922ab1bcb 
h1:pcd2OAuo5NZuglupBFpXEjvH6NlWyHy6pwlPDAwVUFw=
 dubbo.apache.org/dubbo-go/v3 v3.2.0-rc1.0.20240926033233-f03922ab1bcb/go.mod 
h1:ECpY0g32XJMG2irWj6wttH94zA5QU70Alc5hmOyXgu4=
@@ -70,9 +70,8 @@ github.com/Azure/go-autorest/logger v0.2.1/go.mod 
h1:T9E3cAhj2VqvPOtCYAvby9aBXkZ
 github.com/Azure/go-autorest/tracing v0.6.0 
h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo=
 github.com/Azure/go-autorest/tracing v0.6.0/go.mod 
h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU=
 github.com/BurntSushi/toml v0.3.1/go.mod 
h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/BurntSushi/toml v1.2.1/go.mod 
h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
-github.com/BurntSushi/toml v1.3.2 
h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8=
-github.com/BurntSushi/toml v1.3.2/go.mod 
h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
+github.com/BurntSushi/toml v1.4.0 
h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0=
+github.com/BurntSushi/toml v1.4.0/go.mod 
h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
 github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod 
h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
 github.com/HdrHistogram/hdrhistogram-go v1.1.2 
h1:5IcZpTvzydCQeHzK4Ef/D5rrSqwxob0t8PQPMybUNFM=
 github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod 
h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo=
@@ -87,10 +86,11 @@ github.com/Masterminds/semver/v3 v3.2.1/go.mod 
h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYr
 github.com/Masterminds/sprig/v3 v3.2.3 
h1:eL2fZNezLomi0uOLqjQoN6BfsDD+fyLtgbJMAj9n6YA=
 github.com/Masterminds/sprig/v3 v3.2.3/go.mod 
h1:rXcFaZ2zZbLRJv/xSysmlgIM1u11eBaRMhvYXJNkGuM=
 github.com/Microsoft/go-winio v0.5.2/go.mod 
h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY=
-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/hcsshim v0.10.0-rc.8 
h1:YSZVvlIIDD1UxQpJp0h+dnpLUw+TrY0cx8obKsp3bek=
-github.com/Microsoft/hcsshim v0.10.0-rc.8/go.mod 
h1:OEthFdQv/AD2RAdzR6Mm1N1KPCztGKDurW1Z8b8VGMM=
+github.com/Microsoft/go-winio v0.6.2 
h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY=
+github.com/Microsoft/go-winio v0.6.2/go.mod 
h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU=
+github.com/Microsoft/hcsshim v0.12.9 
h1:2zJy5KA+l0loz1HzEGqyNnjd3fyZA31ZBCGKacp6lLg=
+github.com/Microsoft/hcsshim v0.12.9/go.mod 
h1:fJ0gkFAna6ukt0bLdKB8djt4XIJhF/vEPuoIWYVvZ8Y=
+github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2 
h1:+vx7roKuyA63nhn5WAunQHLTznkw5W8b1Xc0dNjp83s=
 github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2/go.mod 
h1:HBCaDeC1lPdgDeDbhX8XFpy1jqjK0IBG8W5K+xYqA0w=
 github.com/OneOfOne/xxhash v1.2.2/go.mod 
h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
 github.com/OneOfOne/xxhash v1.2.8 
h1:31czK/TI9sNkxIKfaUfGlU47BAxQ0ztGgd9vPyqimf8=
@@ -278,8 +278,8 @@ github.com/cncf/xds/go 
v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWH
 github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod 
h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
 github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod 
h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
 github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod 
h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
-github.com/cncf/xds/go v0.0.0-20240423153145-555b57ec207b 
h1:ga8SEFjZ60pxLcmhnThWgvH2wg8376yUJmPhEH4H3kw=
-github.com/cncf/xds/go v0.0.0-20240423153145-555b57ec207b/go.mod 
h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8=
+github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78 
h1:QVw89YDxXxEe+l8gU8ETbOasdwEV+avkR75ZzsVV9WI=
+github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78/go.mod 
h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8=
 github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod 
h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8=
 github.com/cockroachdb/datadriven v0.0.0-20200714090401-bf6692d28da5/go.mod 
h1:h6jFvWxBdQXxjopDMZyH2UVceIRfR84bdzbkoKrsWNo=
 github.com/cockroachdb/errors v1.2.4/go.mod 
h1:rQD95gz6FARkaKkQXUksEje/d9a6wBJoCr5oaCLELYA=
@@ -289,10 +289,14 @@ github.com/containerd/containerd v1.7.2 
h1:UF2gdONnxO8I6byZXDi5sXWiWvlW3D/sci7dT
 github.com/containerd/containerd v1.7.2/go.mod 
h1:afcz74+K10M/+cjGHIVQrCt3RAQhUSCAjJ9iMYhhkuI=
 github.com/containerd/continuity v0.4.1 
h1:wQnVrjIyQ8vhU2sgOiL5T07jo+ouqc2bnKsv5/EqGhU=
 github.com/containerd/continuity v0.4.1/go.mod 
h1:F6PTNCKepoxEaXLQp3wDAjygEnImnZ/7o4JzpodfroQ=
-github.com/containerd/stargz-snapshotter/estargz v0.14.3 
h1:OqlDCK3ZVUO6C3B/5FSkDwbkEETK84kQgEeFwDC+62k=
-github.com/containerd/stargz-snapshotter/estargz v0.14.3/go.mod 
h1:KY//uOCIkSuNAHhJogcZtrNHdKrA99/FCCRjE3HD36o=
+github.com/containerd/stargz-snapshotter/estargz v0.16.3 
h1:7evrXtoh1mSbGj/pfRccTampEyKpjpOnS3CyiV1Ebr8=
+github.com/containerd/stargz-snapshotter/estargz v0.16.3/go.mod 
h1:uyr4BfYfOj3G9WBVE8cOlQmXAbPN9VEQpBBeJIuOipU=
 github.com/containerd/typeurl v1.0.2 
h1:Chlt8zIieDbzQFzXzAeBEF92KhExuE4p9p92/QmY7aY=
 github.com/containerd/typeurl v1.0.2/go.mod 
h1:9trJWW2sRlGub4wZJRTW83VtbOLS6hwcDZXTn6oPz9s=
+github.com/containers/image/v5 v5.34.0 
h1:HPqQaDUsox/3mC1pbOyLAIQEp0JhQqiUZ+6JiFIZLDI=
+github.com/containers/image/v5 v5.34.0/go.mod 
h1:/WnvUSEfdqC/ahMRd4YJDBLrpYWkGl018rB77iB3FDo=
+github.com/containers/storage v1.57.1 
h1:hKPoFsuBcB3qTzBxa4IFpZMRzUuL5Xhv/BE44W0XHx8=
+github.com/containers/storage v1.57.1/go.mod 
h1:i/Hb4lu7YgFr9G0K6BMjqW0BLJO1sFsnWQwj2UoWCUM=
 github.com/coreos/bbolt v1.3.2/go.mod 
h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
 github.com/coreos/etcd v3.3.13+incompatible/go.mod 
h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
 github.com/coreos/go-semver v0.2.0/go.mod 
h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
@@ -309,7 +313,6 @@ github.com/coreos/pkg 
v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfc
 github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod 
h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
 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.0/go.mod 
h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
-github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod 
h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
 github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod 
h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
 github.com/creack/pty v1.1.7/go.mod 
h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
 github.com/creack/pty v1.1.9/go.mod 
h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
@@ -334,6 +337,8 @@ github.com/dgryski/go-farm 
v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUn
 github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod 
h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
 github.com/dimchansky/utfbom v1.1.1 
h1:vV6w1AhK4VMnhBno/TPVCoK9U/LP0PkLCS9tbxHdi/U=
 github.com/dimchansky/utfbom v1.1.1/go.mod 
h1:SxdoEBH5qIqFocHMyGOXVAybYJdr71b1Q/j0mACtrfE=
+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/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91/go.mod 
h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc=
 github.com/dlclark/regexp2 v1.7.0 
h1:7lJfhqlPssTb1WQx4yvTHN0uElPEv52sbaECrAQxjAo=
 github.com/dlclark/regexp2 v1.7.0/go.mod 
h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8=
@@ -343,10 +348,13 @@ github.com/docker/distribution v2.8.2+incompatible 
h1:T3de5rq0dB1j30rp0sA2rER+m3
 github.com/docker/distribution v2.8.2+incompatible/go.mod 
h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
 github.com/docker/docker v23.0.1+incompatible 
h1:vjgvJZxprTTE1A37nm+CLNAdwu6xZekyoiVlUZEINcY=
 github.com/docker/docker v23.0.1+incompatible/go.mod 
h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
-github.com/docker/docker-credential-helpers v0.7.0 
h1:xtCHsjxogADNZcdv1pKUHXryefjlVRqWqIhk/uXJp0A=
 github.com/docker/docker-credential-helpers v0.7.0/go.mod 
h1:rETQfLdHNT3foU5kuNkFR1R1V12OJRRO5lzt2D1b5X0=
-github.com/docker/go-connections v0.4.0 
h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ=
-github.com/docker/go-connections v0.4.0/go.mod 
h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec=
+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-metrics v0.0.1 
h1:AgB/0SvBxihN0X8OR4SjsblXkbMvalQ8cjmtKQ2rQV8=
+github.com/docker/go-metrics v0.0.1/go.mod 
h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHzueweSI3Vw=
 github.com/docker/go-units v0.5.0 
h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4=
 github.com/docker/go-units v0.5.0/go.mod 
h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
 github.com/dop251/goja v0.0.0-20211022113120-dc8c55024d06/go.mod 
h1:R9ET47fwRVRPZnOGvHxxhuZcbrMCuiqOz3Rlrh4KSnk=
@@ -397,11 +405,11 @@ github.com/envoyproxy/go-control-plane 
v0.9.10-0.20210907150352-cf90f659a021/go.
 github.com/envoyproxy/go-control-plane v0.10.0/go.mod 
h1:AY7fTTXNdv/aJ2O5jwpxAPOWUZ7hQAEvzN5Pf27BkQQ=
 github.com/envoyproxy/go-control-plane v0.10.1/go.mod 
h1:AY7fTTXNdv/aJ2O5jwpxAPOWUZ7hQAEvzN5Pf27BkQQ=
 github.com/envoyproxy/go-control-plane 
v0.10.2-0.20220325020618-49ff273808a1/go.mod 
h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE=
-github.com/envoyproxy/go-control-plane v0.12.0 
h1:4X+VP1GHd1Mhj6IB5mMeGbLCleqxjletLK6K0rbxyZI=
-github.com/envoyproxy/go-control-plane v0.12.0/go.mod 
h1:ZBTaoJ23lqITozF0M6G4/IragXCQKCnYbmlmtHvwRG0=
+github.com/envoyproxy/go-control-plane v0.13.1 
h1:vPfJZCkob6yTMEgS+0TwfTUfbHjfy/6vOJ8hUWX/uXE=
+github.com/envoyproxy/go-control-plane v0.13.1/go.mod 
h1:X45hY0mufo6Fd0KW3rqsGvQMw58jvjymeCzBU3mWyHw=
 github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod 
h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
-github.com/envoyproxy/protoc-gen-validate v1.0.4 
h1:gVPz/FMfvh57HdSJQyvBtF00j8JU4zdyUgIUNhlgg0A=
-github.com/envoyproxy/protoc-gen-validate v1.0.4/go.mod 
h1:qys6tmnRsYrQqIhm2bvKZH4Blx/1gTIZ2UKVY1M+Yew=
+github.com/envoyproxy/protoc-gen-validate v1.1.0 
h1:tntQDh69XqOCOZsDz0lVJQez/2L6Uu2PdjCQwWCJ3bM=
+github.com/envoyproxy/protoc-gen-validate v1.1.0/go.mod 
h1:sXRDRVmzEbkM7CVcM06s9shE/m23dg3wzjl0UWqJ2q4=
 github.com/evanphx/json-patch v5.7.0+incompatible 
h1:vgGkfT/9f8zE6tvSCe74nfpAVDQ2tG6yudJd8LBksgI=
 github.com/evanphx/json-patch v5.7.0+incompatible/go.mod 
h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
 github.com/evanphx/json-patch/v5 v5.9.0 
h1:kcBlZQbplgElYIlo/n1hJbls2z/1awpXxpRi0/FOJfg=
@@ -478,12 +486,10 @@ github.com/go-logr/zapr v1.3.0/go.mod 
h1:YKepepNBd1u/oyhd/yQmtjVXmm9uML4IXUgMOwR
 github.com/go-ole/go-ole v1.2.4/go.mod 
h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM=
 github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
 github.com/go-ole/go-ole v1.2.6/go.mod 
h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
-github.com/go-openapi/jsonpointer v0.19.6/go.mod 
h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs=
 github.com/go-openapi/jsonpointer v0.21.0 
h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ=
 github.com/go-openapi/jsonpointer v0.21.0/go.mod 
h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY=
-github.com/go-openapi/jsonreference v0.20.2 
h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE=
-github.com/go-openapi/jsonreference v0.20.2/go.mod 
h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k=
-github.com/go-openapi/swag v0.22.3/go.mod 
h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14=
+github.com/go-openapi/jsonreference v0.21.0 
h1:Rs+Y7hSXT83Jacb7kFyjn4ijOuVGSvOdF2+tg1TRrwQ=
+github.com/go-openapi/jsonreference v0.21.0/go.mod 
h1:LmZmgsrTkVg9LG4EaHeY8cBDslNPMo06cago5JNLkm4=
 github.com/go-openapi/swag v0.23.0 
h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE=
 github.com/go-openapi/swag v0.23.0/go.mod 
h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ=
 github.com/go-playground/assert/v2 v2.2.0 
h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s=
@@ -597,8 +603,8 @@ github.com/google/go-cmp v0.5.8/go.mod 
h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN
 github.com/google/go-cmp v0.5.9/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.16.1 
h1:rUEt426sR6nyrL3gt+18ibRcvYpKYdpsa5ZW7MA08dQ=
-github.com/google/go-containerregistry v0.16.1/go.mod 
h1:u0qB2l7mvtWVR5kNcbFIhFY1hLbf8eeGapA+vbFDCtQ=
+github.com/google/go-containerregistry v0.20.2 
h1:B1wPJ1SN/S7pB+ZAimcciVD+r+yV/l/DSArMxlbwseo=
+github.com/google/go-containerregistry v0.20.2/go.mod 
h1:z38EKdKh4h7IP2gSfUUqEvalZBqs6AoLeWfUy34nQC8=
 github.com/google/gofuzz v1.0.0/go.mod 
h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
 github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
 github.com/google/gofuzz v1.2.0/go.mod 
h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
@@ -632,6 +638,8 @@ github.com/gorilla/context v1.1.1/go.mod 
h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51
 github.com/gorilla/mux v1.6.2/go.mod 
h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
 github.com/gorilla/mux v1.7.3/go.mod 
h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
 github.com/gorilla/mux v1.8.0/go.mod 
h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
+github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY=
+github.com/gorilla/mux v1.8.1/go.mod 
h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ=
 github.com/gorilla/securecookie v1.1.1/go.mod 
h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4=
 github.com/gorilla/sessions v1.2.1/go.mod 
h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM=
 github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod 
h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
@@ -709,6 +717,7 @@ github.com/hashicorp/yamux 
v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKe
 github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d/go.mod 
h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM=
 github.com/heroku/color v0.0.6 h1:UTFFMrmMLFcL3OweqP1lAdp8i1y/9oHqkeHjQ/b/Ny0=
 github.com/heroku/color v0.0.6/go.mod 
h1:ZBvOcx7cTF2QKOv4LbmoBtNl5uB17qWxGuzZrsi1wLU=
+github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec 
h1:qv2VnGeEQHchGaZ/u7lxST/RaJw+cv273q79D81Xbog=
 github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec/go.mod 
h1:Q48J4R4DvxnHolD5P8pOtXigYlRuPLGl6moFx3ulM68=
 github.com/hjson/hjson-go/v4 v4.0.0 
h1:wlm6IYYqHjOdXH1gHev4VoXCaW20HdQAGCxdOEEg2cs=
 github.com/hjson/hjson-go/v4 v4.0.0/go.mod 
h1:KaYt3bTw3zhBjYqnXkYywcYctk0A2nxeEFTse3rH13E=
@@ -793,8 +802,8 @@ github.com/kisielk/errcheck v1.2.0/go.mod 
h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQL
 github.com/kisielk/errcheck v1.5.0/go.mod 
h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
 github.com/kisielk/gotool v1.0.0/go.mod 
h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
 github.com/klauspost/compress v1.13.6/go.mod 
h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
-github.com/klauspost/compress v1.17.9 
h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA=
-github.com/klauspost/compress v1.17.9/go.mod 
h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
+github.com/klauspost/compress v1.17.11 
h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc=
+github.com/klauspost/compress v1.17.11/go.mod 
h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0=
 github.com/klauspost/cpuid/v2 v2.0.9/go.mod 
h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
 github.com/klauspost/cpuid/v2 v2.2.4 
h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk=
 github.com/klauspost/cpuid/v2 v2.2.4/go.mod 
h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY=
@@ -854,10 +863,10 @@ github.com/mattn/go-isatty v0.0.20/go.mod 
h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D
 github.com/mattn/go-runewidth v0.0.2/go.mod 
h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
 github.com/mattn/go-runewidth v0.0.13/go.mod 
h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
 github.com/mattn/go-runewidth v0.0.14/go.mod 
h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
-github.com/mattn/go-runewidth v0.0.15 
h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U=
-github.com/mattn/go-runewidth v0.0.15/go.mod 
h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
-github.com/mattn/go-sqlite3 v1.14.17 
h1:mCRHCLDUBXgpKAqIKsaAaAsrAlbkeomtRFKXh2L6YIM=
-github.com/mattn/go-sqlite3 v1.14.17/go.mod 
h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg=
+github.com/mattn/go-runewidth v0.0.16 
h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc=
+github.com/mattn/go-runewidth v0.0.16/go.mod 
h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
+github.com/mattn/go-sqlite3 v1.14.24 
h1:tpSp2G2KyMnnQu99ngJ47EIkWVmliIizyZBfPrBWDRM=
+github.com/mattn/go-sqlite3 v1.14.24/go.mod 
h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
 github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod 
h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
 github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b 
h1:j7+1HpAFS1zy5+Q4qx1fWh90gTKwiN4QCGoY9TWyyO4=
 github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod 
h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
@@ -890,8 +899,14 @@ github.com/moby/buildkit v0.11.6 
h1:VYNdoKk5TVxN7k4RvZgdeM4GOyRvIi4Z8MXOY7xvyUs=
 github.com/moby/buildkit v0.11.6/go.mod 
h1:GCqKfHhz+pddzfgaR7WmHVEE3nKKZMMDPpK8mh3ZLv4=
 github.com/moby/patternmatcher v0.5.0 
h1:YCZgJOeULcxLw1Q+sVR636pmS7sPEn1Qo2iAN6M7DBo=
 github.com/moby/patternmatcher v0.5.0/go.mod 
h1:hDPoyOpDY7OrrMDLaYoY3hf52gNCR/YOUYxkhApJIxc=
+github.com/moby/sys/capability v0.4.0 
h1:4D4mI6KlNtWMCM1Z/K0i7RV1FkX+DBDHKVJpCndZoHk=
+github.com/moby/sys/capability v0.4.0/go.mod 
h1:4g9IK291rVkms3LKCDOoYlnV8xKwoDTpIrNEE35Wq0I=
+github.com/moby/sys/mountinfo v0.7.2 
h1:1shs6aH5s4o5H2zQLn796ADW1wMrIwHsyJ2v9KouLrg=
+github.com/moby/sys/mountinfo v0.7.2/go.mod 
h1:1YOa8w8Ih7uW0wALDUgT1dTTSBrZ+HiBLGws92L2RU4=
 github.com/moby/sys/sequential v0.5.0 
h1:OPvI35Lzn9K04PBbCLW0g4LcFAJgHsvXsRyewg5lXtc=
 github.com/moby/sys/sequential v0.5.0/go.mod 
h1:tH2cOOs5V9MlPiXcQzRC+eEyab644PWKGRYaaV5ZZlo=
+github.com/moby/sys/user v0.3.0 h1:9ni5DlcW5an3SvRSx4MouotOygvzaXbaSrc/wGDFWPo=
+github.com/moby/sys/user v0.3.0/go.mod 
h1:bG+tYYYJgaMtRKgEmuueC0hJEAZWwtIbZTB+85uoHjs=
 github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0=
 github.com/moby/term v0.5.0/go.mod 
h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y=
 github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod 
h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -953,12 +968,14 @@ github.com/onsi/gomega v1.36.2/go.mod 
h1:DdwyADRjrc825LhMEkD76cHR5+pUnjhUN8GlHlR
 github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod 
h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk=
 github.com/opencontainers/go-digest v1.0.0 
h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
 github.com/opencontainers/go-digest v1.0.0/go.mod 
h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
-github.com/opencontainers/image-spec v1.1.0-rc4 
h1:oOxKUJWnFC4YGHCCMNql1x4YaDfYBTS5Y4x/Cgeo1E0=
-github.com/opencontainers/image-spec v1.1.0-rc4/go.mod 
h1:X4pATf0uXsnn3g5aiGIsVnJBR4mxhKzfwmvK/B2NTm8=
+github.com/opencontainers/image-spec v1.1.0 
h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug=
+github.com/opencontainers/image-spec v1.1.0/go.mod 
h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM=
 github.com/opencontainers/runc v1.1.7 
h1:y2EZDS8sNng4Ksf0GUYNhKbTShZJPJg1FiXJNH/uoCk=
 github.com/opencontainers/runc v1.1.7/go.mod 
h1:CbUumNnWCuTGFukNXahoo/RFBZvDAgRh/smNYNOhA50=
-github.com/opencontainers/selinux v1.11.0 
h1:+5Zbo97w3Lbmb3PeqQtpmTkMwsW5nRI3YaLpt7tQ7oU=
-github.com/opencontainers/selinux v1.11.0/go.mod 
h1:E5dMC3VPuVvVHDYmi78qvhJp8+M586T4DlDRYpFkyec=
+github.com/opencontainers/runtime-spec v1.2.0 
h1:z97+pHb3uELt/yiAWD691HNHQIF07bE7dzrbT927iTk=
+github.com/opencontainers/runtime-spec v1.2.0/go.mod 
h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
+github.com/opencontainers/selinux v1.11.1 
h1:nHFvthhM0qY8/m+vfhJylliSshm8G1jJ2jDMcgULaH8=
+github.com/opencontainers/selinux v1.11.1/go.mod 
h1:E5dMC3VPuVvVHDYmi78qvhJp8+M586T4DlDRYpFkyec=
 github.com/opentracing-contrib/go-observer 
v0.0.0-20170622124052-a52f23424492/go.mod 
h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis=
 github.com/opentracing/basictracer-go v1.0.0/go.mod 
h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74=
 github.com/opentracing/opentracing-go v1.0.2/go.mod 
h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
@@ -999,6 +1016,8 @@ github.com/pkg/errors v0.8.1/go.mod 
h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE
 github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
 github.com/pkg/errors v0.9.1/go.mod 
h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 github.com/pkg/profile v1.2.1/go.mod 
h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA=
+github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 
h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo=
+github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod 
h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8=
 github.com/pmezard/go-difflib v1.0.0/go.mod 
h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 
h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
 github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod 
h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
@@ -1020,8 +1039,8 @@ github.com/prometheus/client_golang v1.11.0/go.mod 
h1:Z6t4BnS23TR94PD6BsDNk8yVqr
 github.com/prometheus/client_golang v1.11.1/go.mod 
h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0=
 github.com/prometheus/client_golang v1.12.1/go.mod 
h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY=
 github.com/prometheus/client_golang v1.12.2/go.mod 
h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY=
-github.com/prometheus/client_golang v1.20.3 
h1:oPksm4K8B+Vt35tUhw6GbSNSgVlVSBH0qELP/7u83l4=
-github.com/prometheus/client_golang v1.20.3/go.mod 
h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE=
+github.com/prometheus/client_golang v1.20.5 
h1:cxppBPuYhUnsO6yo/aoRol4L7q7UFfdm+bR9r+8l63Y=
+github.com/prometheus/client_golang v1.20.5/go.mod 
h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE=
 github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod 
h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
 github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod 
h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
 github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod 
h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
@@ -1040,8 +1059,8 @@ github.com/prometheus/common v0.10.0/go.mod 
h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB8
 github.com/prometheus/common v0.15.0/go.mod 
h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s=
 github.com/prometheus/common v0.26.0/go.mod 
h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc=
 github.com/prometheus/common v0.32.1/go.mod 
h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls=
-github.com/prometheus/common v0.55.0 
h1:KEi6DK7lXW/m7Ig5i47x0vRzuBsHuvJdi5ee6Y3G1dc=
-github.com/prometheus/common v0.55.0/go.mod 
h1:2SECS4xJG1kd8XF9IcM1gMX6510RAEL65zxzNImwdc8=
+github.com/prometheus/common v0.57.0 
h1:Ro/rKjwdq9mZn1K5QPctzh+MA4Lp0BuYk5ZZEVhoNcY=
+github.com/prometheus/common v0.57.0/go.mod 
h1:7uRPFSUTbfZWsJ7MHY56sqt7hLQu3bxXHDnNhl8E9qI=
 github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod 
h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
 github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod 
h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
 github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod 
h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
@@ -1062,8 +1081,8 @@ github.com/rivo/tview v0.0.0-20220307222120-9994674d60a8 
h1:xe+mmCnDN82KhC010l3N
 github.com/rivo/tview v0.0.0-20220307222120-9994674d60a8/go.mod 
h1:WIfMkQNY+oq/mWwtsjOYHIZBuwthioY2srOmljJkTnk=
 github.com/rivo/uniseg v0.2.0/go.mod 
h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
 github.com/rivo/uniseg v0.4.3/go.mod 
h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
-github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis=
-github.com/rivo/uniseg v0.4.4/go.mod 
h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
+github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=
+github.com/rivo/uniseg v0.4.7/go.mod 
h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
 github.com/robfig/cron/v3 v3.0.1 
h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs=
 github.com/robfig/cron/v3 v3.0.1/go.mod 
h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro=
 github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod 
h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
@@ -1206,10 +1225,9 @@ github.com/ugorji/go/codec v1.2.11 
h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4d
 github.com/ugorji/go/codec v1.2.11/go.mod 
h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
 github.com/urfave/cli v1.20.0/go.mod 
h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
 github.com/urfave/cli v1.22.1/go.mod 
h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
-github.com/urfave/cli v1.22.12/go.mod 
h1:sSBEIC79qR6OvcmsD4U3KABeOTxDqQtdDnaFuUN30b8=
 github.com/urfave/cli/v2 v2.3.0/go.mod 
h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI=
-github.com/vbatts/tar-split v0.11.3 
h1:hLFqsOLQ1SsppQNTMpkpPXClLDfC2A3Zgy9OUU+RVck=
-github.com/vbatts/tar-split v0.11.3/go.mod 
h1:9QlHN18E+fEH7RdG+QAJJcuya3rqT7eXSTY7wGrAokY=
+github.com/vbatts/tar-split v0.11.7 
h1:ixZ93pO/GmvaZw4Vq9OwmfZK/kc2zKdPfu0B+gYqs3U=
+github.com/vbatts/tar-split v0.11.7/go.mod 
h1:eF6B6i6ftWQcDqEn3/iGFRFRo8cBIMSJVOpnNdfTMFA=
 github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
 github.com/x448/float16 v0.8.4/go.mod 
h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg=
 github.com/xanzy/ssh-agent v0.3.3 
h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM=
@@ -1278,26 +1296,28 @@ 
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.5
 go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc 
v0.53.0/go.mod h1:azvtTADFQJA8mX80jIH/akaE7h+dbm/sVuaHqN13w74=
 go.opentelemetry.io/contrib/propagators/b3 v1.10.0 
h1:6AD2VV8edRdEYNaD8cNckpzgdMLU2kbV9OYyxt2kvCg=
 go.opentelemetry.io/contrib/propagators/b3 v1.10.0/go.mod 
h1:oxvamQ/mTDFQVugml/uFS59+aEUnFLhmd1wsG+n5MOE=
-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 v1.31.0 
h1:NsJcKPIW0D0H3NgzPDHmo0WW6SptzPdqg/L1zsIm2hY=
+go.opentelemetry.io/otel v1.31.0/go.mod 
h1:O0C14Yl9FgkjqcCZAsE053C13OaddMYr/hz6clDkEJE=
 go.opentelemetry.io/otel/exporters/jaeger v1.17.0 
h1:D7UpUy2Xc2wsi1Ras6V40q806WM07rqoCWzXu7Sqy+4=
 go.opentelemetry.io/otel/exporters/jaeger v1.17.0/go.mod 
h1:nPCqOnEH9rNLKqH/+rrUjiMzHJdV1BlpKcTwRTyKkKI=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0 
h1:3Q/xZUyC1BBkualc9ROb4G8qkH90LXEIICcs5zv1OYY=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0/go.mod 
h1:s75jGIWA9OfCMzF0xr+ZgfrB5FEbbV7UuYo32ahUiFI=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0 
h1:qFffATk0X+HD+f1Z8lswGiOQYKHRlzfmdJm0wEaVrFA=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0/go.mod 
h1:MOiCmryaYtc+V0Ei+Tx9o5S1ZjA7kzLucuVuyzBZloQ=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.25.0 
h1:Mbi5PKN7u322woPa85d7ebZ+SOvEoPvoiBu+ryHWgfA=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.25.0/go.mod 
h1:e7ciERRhZaOZXVjx5MiL8TK5+Xv7G5Gv5PA2ZDEJdL8=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.28.0 
h1:j9+03ymgYhPKmeXGk5Zu+cIZOlVzd9Zv7QIiyItjFBU=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.28.0/go.mod 
h1:Y5+XiUG4Emn1hTfciPzGPJaSI+RpDts6BnCIir0SLqk=
 go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.10.0 
h1:c9UtMu/qnbLlVwTwt+ABrURrioEruapIslTDYZHJe2w=
 go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.10.0/go.mod 
h1:h3Lrh9t3Dnqp3NPwAZx7i37UFX7xrfnO1D+fuClREOA=
 go.opentelemetry.io/otel/exporters/zipkin v1.10.0 
h1:HcPAFsFpEBKF+G5NIOA+gBsxifd3Ej+wb+KsdBLa15E=
 go.opentelemetry.io/otel/exporters/zipkin v1.10.0/go.mod 
h1:HdfvgwcOoCB0+zzrTHycW6btjK0zNpkz2oTGO815SCI=
-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.28.0 
h1:b9d7hIry8yZsgtbmM0DKyPWMMUMlK9NEKuIG4aBqWyE=
-go.opentelemetry.io/otel/sdk v1.28.0/go.mod 
h1:oYj7ClPUA7Iw3m+r7GeEjz0qckQRJK2B8zjcZEfu7Pg=
-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/otel/metric v1.31.0 
h1:FSErL0ATQAmYHUIzSezZibnyVlft1ybhy4ozRPcF2fE=
+go.opentelemetry.io/otel/metric v1.31.0/go.mod 
h1:C3dEloVbLuYoX41KpmAhOqNriGbA+qqH6PQ5E5mUfnY=
+go.opentelemetry.io/otel/sdk v1.31.0 
h1:xLY3abVHYZ5HSfOg3l2E5LUj2Cwva5Y7yGxnSW9H5Gk=
+go.opentelemetry.io/otel/sdk v1.31.0/go.mod 
h1:TfRbMdhvxIIr/B2N2LQW2S5v9m3gOQ/08KsbbO5BPT0=
+go.opentelemetry.io/otel/sdk/metric v1.31.0 
h1:i9hxxLJF/9kkvfHppyLL55aW7iIJz4JjxTeYusH7zMc=
+go.opentelemetry.io/otel/sdk/metric v1.31.0/go.mod 
h1:CRInTMVvNhUKgSAMbKyTMxqOBC0zgyxzW55lZzX43Y8=
+go.opentelemetry.io/otel/trace v1.31.0 
h1:ffjsj1aRouKewfr85U2aGagJ46+MvodynlQ1HYdmJys=
+go.opentelemetry.io/otel/trace v1.31.0/go.mod 
h1:TXZkRk7SM2ZQLtR6eoAWQFIHPvzQ06FJAsO1tJg480A=
 go.opentelemetry.io/proto/otlp v0.7.0/go.mod 
h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
 go.opentelemetry.io/proto/otlp v1.3.1 
h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0=
 go.opentelemetry.io/proto/otlp v1.3.1/go.mod 
h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8=
@@ -1366,8 +1386,8 @@ golang.org/x/exp 
v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u0
 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-20200331195152-e8c3332aa8e5/go.mod 
h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw=
-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 v0.0.0-20241217172543-b2144cdd0a67 
h1:1UoZQm6f0P/ZO0w1Ri+f+ifG/gXhegadRdwBIXEFWDo=
+golang.org/x/exp v0.0.0-20241217172543-b2144cdd0a67/go.mod 
h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c=
 golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod 
h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs=
 golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod 
h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
 golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod 
h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
@@ -1456,8 +1476,8 @@ golang.org/x/oauth2 
v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4Iltr
 golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod 
h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod 
h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
 golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod 
h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
-golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs=
-golang.org/x/oauth2 v0.23.0/go.mod 
h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
+golang.org/x/oauth2 v0.25.0 h1:CY4y7XT9v0cRI9oupztF8AgiIu99L/ksR/Xp/6jrZ70=
+golang.org/x/oauth2 v0.25.0/go.mod 
h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
 golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod 
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod 
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod 
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -1559,7 +1579,6 @@ golang.org/x/sys 
v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBc
 golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod 
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod 
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220825204002-c680a09ffe64/go.mod 
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220906165534-d0df966e6959/go.mod 
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.2.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=
@@ -1734,10 +1753,10 @@ google.golang.org/genproto 
v0.0.0-20211104193956-4c6863e31247/go.mod h1:5CzLGKJ6
 google.golang.org/genproto v0.0.0-20220504150022-98cd25cafc72/go.mod 
h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4=
 google.golang.org/genproto v0.0.0-20240213162025-012b6fc9bca9 
h1:9+tzLLstTlPTRyJTh+ah5wIMsBW5c4tQwGTN3thOW9Y=
 google.golang.org/genproto v0.0.0-20240213162025-012b6fc9bca9/go.mod 
h1:mqHbVIp48Muh7Ywss/AD6I5kNVKZMmAa/QEW58Gxp2s=
-google.golang.org/genproto/googleapis/api v0.0.0-20240826202546-f6391c0de4c7 
h1:YcyjlL1PRr2Q17/I0dPk2JmYS5CDXfcdb2Z3YRioEbw=
-google.golang.org/genproto/googleapis/api 
v0.0.0-20240826202546-f6391c0de4c7/go.mod 
h1:OCdP9MfskevB/rbYvHTsXTtKC+3bHWajPdoKgjcYkfo=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20240826202546-f6391c0de4c7 
h1:2035KHhUv+EpyB+hWgJnaWKJOdX1E95w2S8Rr4uWKTs=
-google.golang.org/genproto/googleapis/rpc 
v0.0.0-20240826202546-f6391c0de4c7/go.mod 
h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU=
+google.golang.org/genproto/googleapis/api v0.0.0-20241015192408-796eee8c2d53 
h1:fVoAXEKA4+yufmbdVYv+SE73+cPZbbbe8paLsHfkK+U=
+google.golang.org/genproto/googleapis/api 
v0.0.0-20241015192408-796eee8c2d53/go.mod 
h1:riSXTwQ4+nqmPGtobMFyW5FqVAmIs0St6VPp4Ug7CE4=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250102185135-69823020774d 
h1:xJJRGY7TJcvIlpSrN3K6LAWgNFUILlO+OMAqtg9aqnw=
+google.golang.org/genproto/googleapis/rpc 
v0.0.0-20250102185135-69823020774d/go.mod 
h1:3ENsm/5D1mzDyhpzeRi1NR784I0BcofWBoSc5QqqMK4=
 google.golang.org/grpc v1.14.0/go.mod 
h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
 google.golang.org/grpc v1.17.0/go.mod 
h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
 google.golang.org/grpc v1.19.0/go.mod 
h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
@@ -1766,8 +1785,8 @@ google.golang.org/grpc v1.41.0/go.mod 
h1:U3l9uK9J0sini8mHphKoXyaqDA/8VyGnDee1zzI
 google.golang.org/grpc v1.46.0/go.mod 
h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk=
 google.golang.org/grpc v1.46.2/go.mod 
h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk=
 google.golang.org/grpc v1.48.0/go.mod 
h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk=
-google.golang.org/grpc v1.65.0 h1:bs/cUb4lp1G5iImFFd3u5ixQzweKizoZJAwBNLR42lc=
-google.golang.org/grpc v1.65.0/go.mod 
h1:WgYC2ypjlB0EiQi6wdKixMqukr6lBc0Vo+oOgjrM5ZQ=
+google.golang.org/grpc v1.69.4 h1:MF5TftSMkd8GLw/m0KM6V8CMOCY6NZ1NQDPGFgbTt4A=
+google.golang.org/grpc v1.69.4/go.mod 
h1:vyjdE6jLBI76dgpDojsFGNaHlxdjXN9ghpnd2o7JGZ4=
 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=
@@ -1782,8 +1801,8 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod 
h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0
 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.28.0/go.mod 
h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
-google.golang.org/protobuf v1.36.1 
h1:yBPeRvTftaleIgM3PZ/WBIZ7XM/eEYAaEyCwvyjq/gk=
-google.golang.org/protobuf v1.36.1/go.mod 
h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
+google.golang.org/protobuf v1.36.2 
h1:R8FeyR1/eLmkutZOM5CWghmo5itiG9z0ktFlTVLuTmU=
+google.golang.org/protobuf v1.36.2/go.mod 
h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
 gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod 
h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
 gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d/go.mod 
h1:cuepJuh7vyXfUyUwEgHQXw849cJrilpS5NeIjOWESAw=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod 
h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
@@ -1836,6 +1855,7 @@ gorm.io/driver/sqlite v1.5.5/go.mod 
h1:6NgQ7sQWAIFsPrJJl1lSNSu2TABh0ZZ/zm5fosATa
 gorm.io/gorm v1.25.7-0.20240204074919-46816ad31dde/go.mod 
h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8=
 gorm.io/gorm v1.25.7 h1:VsD6acwRjz2zFxGO50gPO6AkNs7KKnvfzUjHQhZDz/A=
 gorm.io/gorm v1.25.7/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8=
+gotest.tools v2.2.0+incompatible 
h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo=
 gotest.tools v2.2.0+incompatible/go.mod 
h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
 gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU=
 gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU=

Reply via email to