From a2a4b253280b7825bf68302ef05bc7dbe9e6128c Mon Sep 17 00:00:00 2001 From: Sebastian Stauch Date: Wed, 15 Jun 2022 13:12:43 +0200 Subject: [PATCH 1/8] rebase master --- .../templates/deployment.yaml | 7 + .../templates/rbac.yaml | 2 + .../templates/service.yaml | 19 + .../values.yaml | 4 + .../charts/agent/templates/clusterrole.yaml | 1 + .../charts/agent/templates/configmap.yaml | 1 + .../charts/agent/templates/daemonset.yaml | 1 + .../charts/network-policy/templates/dns.yaml | 2 +- .../templates/nodelocaldns.yaml | 23 ++ .../charts/operator/templates/configmap.yaml | 1 + .../charts/operator/templates/deployment.yaml | 1 + charts/internal/cilium/values.yaml | 3 + .../app/app.go | 42 ++ example/controller-registration.yaml | 4 + go.mod | 1 + go.sum | 2 + pkg/charts/config.go | 10 + pkg/charts/utils.go | 13 + pkg/cmd/options.go | 29 ++ pkg/controller/actuator.go | 8 +- pkg/controller/actuator_delete.go | 21 + pkg/controller/actuator_reconcile.go | 118 ++++++ pkg/controller/add.go | 5 +- pkg/webhook/shoot/add.go | 52 +++ pkg/webhook/shoot/mutator.go | 71 ++++ pkg/webhook/shoot/node_local_dns.go | 53 +++ .../github.com/coreos/go-systemd/v22/LICENSE | 191 +++++++++ .../github.com/coreos/go-systemd/v22/NOTICE | 5 + .../coreos/go-systemd/v22/unit/deserialize.go | 350 ++++++++++++++++ .../coreos/go-systemd/v22/unit/escape.go | 116 ++++++ .../coreos/go-systemd/v22/unit/option.go | 59 +++ .../coreos/go-systemd/v22/unit/section.go | 44 ++ .../coreos/go-systemd/v22/unit/serialize.go | 98 +++++ .../extensions/pkg/webhook/certificates.go | 225 +++++++++++ .../extensions/pkg/webhook/cmd/factory.go | 65 +++ .../extensions/pkg/webhook/cmd/options.go | 307 ++++++++++++++ .../extensions/pkg/webhook/handler.go | 232 +++++++++++ .../pkg/webhook/handler_shootclient.go | 140 +++++++ .../extensions/pkg/webhook/mutator.go | 60 +++ .../extensions/pkg/webhook/registration.go | 191 +++++++++ .../extensions/pkg/webhook/remote_addr.go | 45 +++ .../pkg/webhook/shoot/networkpolicy.go | 82 ++++ .../extensions/pkg/webhook/shoot/shoot.go | 97 +++++ .../gardener/extensions/pkg/webhook/utils.go | 375 ++++++++++++++++++ .../extensions/pkg/webhook/validator.go | 49 +++ .../extensions/pkg/webhook/webhook.go | 102 +++++ vendor/modules.txt | 6 + 47 files changed, 3330 insertions(+), 3 deletions(-) create mode 100644 charts/gardener-extension-networking-cilium/templates/service.yaml create mode 120000 charts/internal/cilium/charts/agent/templates/configmap.yaml create mode 100644 charts/internal/cilium/charts/network-policy/templates/nodelocaldns.yaml create mode 120000 charts/internal/cilium/charts/operator/templates/configmap.yaml create mode 100644 pkg/cmd/options.go create mode 100644 pkg/webhook/shoot/add.go create mode 100644 pkg/webhook/shoot/mutator.go create mode 100644 pkg/webhook/shoot/node_local_dns.go create mode 100644 vendor/github.com/coreos/go-systemd/v22/LICENSE create mode 100644 vendor/github.com/coreos/go-systemd/v22/NOTICE create mode 100644 vendor/github.com/coreos/go-systemd/v22/unit/deserialize.go create mode 100644 vendor/github.com/coreos/go-systemd/v22/unit/escape.go create mode 100644 vendor/github.com/coreos/go-systemd/v22/unit/option.go create mode 100644 vendor/github.com/coreos/go-systemd/v22/unit/section.go create mode 100644 vendor/github.com/coreos/go-systemd/v22/unit/serialize.go create mode 100644 vendor/github.com/gardener/gardener/extensions/pkg/webhook/certificates.go create mode 100644 vendor/github.com/gardener/gardener/extensions/pkg/webhook/cmd/factory.go create mode 100644 vendor/github.com/gardener/gardener/extensions/pkg/webhook/cmd/options.go create mode 100644 vendor/github.com/gardener/gardener/extensions/pkg/webhook/handler.go create mode 100644 vendor/github.com/gardener/gardener/extensions/pkg/webhook/handler_shootclient.go create mode 100644 vendor/github.com/gardener/gardener/extensions/pkg/webhook/mutator.go create mode 100644 vendor/github.com/gardener/gardener/extensions/pkg/webhook/registration.go create mode 100644 vendor/github.com/gardener/gardener/extensions/pkg/webhook/remote_addr.go create mode 100644 vendor/github.com/gardener/gardener/extensions/pkg/webhook/shoot/networkpolicy.go create mode 100644 vendor/github.com/gardener/gardener/extensions/pkg/webhook/shoot/shoot.go create mode 100644 vendor/github.com/gardener/gardener/extensions/pkg/webhook/utils.go create mode 100644 vendor/github.com/gardener/gardener/extensions/pkg/webhook/validator.go create mode 100644 vendor/github.com/gardener/gardener/extensions/pkg/webhook/webhook.go diff --git a/charts/gardener-extension-networking-cilium/templates/deployment.yaml b/charts/gardener-extension-networking-cilium/templates/deployment.yaml index 49a845ed2..869d45848 100644 --- a/charts/gardener-extension-networking-cilium/templates/deployment.yaml +++ b/charts/gardener-extension-networking-cilium/templates/deployment.yaml @@ -37,6 +37,9 @@ spec: - --healthcheck-max-concurrent-reconciles={{ .Values.controller.healthcheck.concurrentSyncs }} - --ignore-operation-annotation={{ .Values.controller.ignoreOperationAnnotation }} - --config-file=/etc/{{ include "name" . }}/config/config.yaml + - --webhook-config-namespace={{ .Release.Namespace }} + - --webhook-config-service-port={{ .Values.webhookConfig.servicePort }} + - --webhook-config-server-port={{ .Values.webhookConfig.serverPort }} - --gardener-version={{ .Values.gardener.version }} env: - name: LEADER_ELECTION_NAMESPACE @@ -47,6 +50,10 @@ spec: - name: IMAGEVECTOR_OVERWRITE value: /charts_overwrite/images_overwrite.yaml {{- end }} + ports: + - name: webhook-server + containerPort: {{ .Values.webhookConfig.serverPort }} + protocol: TCP {{- if .Values.resources }} resources: {{ toYaml .Values.resources | nindent 10 }} diff --git a/charts/gardener-extension-networking-cilium/templates/rbac.yaml b/charts/gardener-extension-networking-cilium/templates/rbac.yaml index d07a36b7b..fd1c1846e 100644 --- a/charts/gardener-extension-networking-cilium/templates/rbac.yaml +++ b/charts/gardener-extension-networking-cilium/templates/rbac.yaml @@ -63,6 +63,7 @@ rules: - rbac.authorization.k8s.io - admissionregistration.k8s.io - apiextensions.k8s.io + - networking.k8s.io resources: - namespaces - events @@ -81,6 +82,7 @@ rules: - pods/log - mutatingwebhookconfigurations - customresourcedefinitions + - networkpolicies verbs: - "*" --- diff --git a/charts/gardener-extension-networking-cilium/templates/service.yaml b/charts/gardener-extension-networking-cilium/templates/service.yaml new file mode 100644 index 000000000..71966fe01 --- /dev/null +++ b/charts/gardener-extension-networking-cilium/templates/service.yaml @@ -0,0 +1,19 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ include "name" . }} + namespace: {{ .Release.Namespace }} +{{- if .Values.ignoreResources }} + annotations: + resources.gardener.cloud/ignore: "true" +{{- end }} + labels: +{{ include "labels" . | indent 4 }} +spec: + type: ClusterIP + selector: +{{ include "labels" . | indent 6 }} + ports: + - port: {{ .Values.webhookConfig.servicePort }} + protocol: TCP + targetPort: {{ .Values.webhookConfig.serverPort }} diff --git a/charts/gardener-extension-networking-cilium/values.yaml b/charts/gardener-extension-networking-cilium/values.yaml index 4b5c174fa..1c8900a22 100644 --- a/charts/gardener-extension-networking-cilium/values.yaml +++ b/charts/gardener-extension-networking-cilium/values.yaml @@ -43,3 +43,7 @@ config: gardener: version: "" + +webhookConfig: + servicePort: 443 + serverPort: 10250 diff --git a/charts/internal/cilium/charts/agent/templates/clusterrole.yaml b/charts/internal/cilium/charts/agent/templates/clusterrole.yaml index ec68d1d99..15a168d02 100644 --- a/charts/internal/cilium/charts/agent/templates/clusterrole.yaml +++ b/charts/internal/cilium/charts/agent/templates/clusterrole.yaml @@ -74,6 +74,7 @@ rules: - ciliumidentities - ciliumlocalredirectpolicies - ciliumlocalredirectpolicies/status + - ciliumlocalredirectpolicies/finalizers - ciliumegressnatpolicies - ciliumendpointslices verbs: diff --git a/charts/internal/cilium/charts/agent/templates/configmap.yaml b/charts/internal/cilium/charts/agent/templates/configmap.yaml new file mode 120000 index 000000000..a7bce1b04 --- /dev/null +++ b/charts/internal/cilium/charts/agent/templates/configmap.yaml @@ -0,0 +1 @@ +../../config/templates/configmap.yaml \ No newline at end of file diff --git a/charts/internal/cilium/charts/agent/templates/daemonset.yaml b/charts/internal/cilium/charts/agent/templates/daemonset.yaml index 919a6fe68..6f222020c 100644 --- a/charts/internal/cilium/charts/agent/templates/daemonset.yaml +++ b/charts/internal/cilium/charts/agent/templates/daemonset.yaml @@ -13,6 +13,7 @@ spec: template: metadata: annotations: + checksum/configmap-cilium: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }} {{- if and .Values.global.prometheus.enabled (not .Values.global.prometheus.serviceMonitor.enabled) }} prometheus.io/port: "{{ .Values.global.prometheus.port }}" prometheus.io/scrape: "true" diff --git a/charts/internal/cilium/charts/network-policy/templates/dns.yaml b/charts/internal/cilium/charts/network-policy/templates/dns.yaml index 3a2e11b3f..0f9524adf 100644 --- a/charts/internal/cilium/charts/network-policy/templates/dns.yaml +++ b/charts/internal/cilium/charts/network-policy/templates/dns.yaml @@ -4,7 +4,7 @@ metadata: annotations: gardener.cloud/description: "Allows CoreDNS to be reachable by non-pod remote node IPs, in particular Cilium DNS proxies." name: gardener.cloud--allow-dns-from-remote-nodes - namespace: kube-system + namespace: {{ .Release.Namespace }} spec: endpointSelector: matchExpressions: diff --git a/charts/internal/cilium/charts/network-policy/templates/nodelocaldns.yaml b/charts/internal/cilium/charts/network-policy/templates/nodelocaldns.yaml new file mode 100644 index 000000000..1080d1dbb --- /dev/null +++ b/charts/internal/cilium/charts/network-policy/templates/nodelocaldns.yaml @@ -0,0 +1,23 @@ +{{- if .Values.global.nodeLocalDNS.enabled -}} +apiVersion: "cilium.io/v2" +kind: CiliumLocalRedirectPolicy +metadata: + name: "nodelocaldns" + namespace: {{ .Release.Namespace }} +spec: + redirectFrontend: + serviceMatcher: + serviceName: kube-dns + namespace: {{ .Release.Namespace }} + redirectBackend: + localEndpointSelector: + matchLabels: + k8s-app: node-local-dns + toPorts: + - port: "53" + name: dns + protocol: UDP + - port: "53" + name: dns-tcp + protocol: TCP +{{- end }} diff --git a/charts/internal/cilium/charts/operator/templates/configmap.yaml b/charts/internal/cilium/charts/operator/templates/configmap.yaml new file mode 120000 index 000000000..a7bce1b04 --- /dev/null +++ b/charts/internal/cilium/charts/operator/templates/configmap.yaml @@ -0,0 +1 @@ +../../config/templates/configmap.yaml \ No newline at end of file diff --git a/charts/internal/cilium/charts/operator/templates/deployment.yaml b/charts/internal/cilium/charts/operator/templates/deployment.yaml index a1e6302bf..b058866d6 100644 --- a/charts/internal/cilium/charts/operator/templates/deployment.yaml +++ b/charts/internal/cilium/charts/operator/templates/deployment.yaml @@ -22,6 +22,7 @@ spec: template: metadata: annotations: + checksum/configmap-cilium: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }} {{- if and .Values.global.prometheus.enabled (not .Values.global.prometheus.serviceMonitor.enabled) }} prometheus.io/port: {{ .Values.global.operatorPrometheus.port | quote }} prometheus.io/scrape: "true" diff --git a/charts/internal/cilium/values.yaml b/charts/internal/cilium/values.yaml index a92d1e627..7178106fc 100644 --- a/charts/internal/cilium/values.yaml +++ b/charts/internal/cilium/values.yaml @@ -24,6 +24,9 @@ requirements: # global groups all configuration options that have effect on all sub-charts global: + nodeLocalDNS: + enabled: false + podCIDR: "" # pullPolicy is the container image pull policy pullPolicy: IfNotPresent diff --git a/cmd/gardener-extension-networking-cilium/app/app.go b/cmd/gardener-extension-networking-cilium/app/app.go index c3e99e5bc..6beac813c 100644 --- a/cmd/gardener-extension-networking-cilium/app/app.go +++ b/cmd/gardener-extension-networking-cilium/app/app.go @@ -24,11 +24,14 @@ import ( ciliumcmd "github.com/gardener/gardener-extension-networking-cilium/pkg/cmd" ciliumcontroller "github.com/gardener/gardener-extension-networking-cilium/pkg/controller" "github.com/gardener/gardener-extension-networking-cilium/pkg/healthcheck" + "github.com/pkg/errors" "github.com/gardener/gardener/extensions/pkg/controller" controllercmd "github.com/gardener/gardener/extensions/pkg/controller/cmd" "github.com/gardener/gardener/extensions/pkg/util" + webhookcmd "github.com/gardener/gardener/extensions/pkg/webhook/cmd" "github.com/spf13/cobra" + admissionregistrationv1 "k8s.io/api/admissionregistration/v1" corev1 "k8s.io/api/core/v1" "k8s.io/client-go/tools/leaderelection/resourcelock" "sigs.k8s.io/controller-runtime/pkg/client" @@ -61,6 +64,14 @@ func NewControllerManagerCommand(ctx context.Context) *cobra.Command { configFileOpts = &ciliumcmd.ConfigOptions{} + // options for the webhook server + webhookServerOptions = &webhookcmd.ServerOptions{ + Namespace: os.Getenv("WEBHOOK_CONFIG_NAMESPACE"), + } + + webhookSwitches = ciliumcmd.WebhookSwitchOptions() + webhookOptions = webhookcmd.NewAddToManagerOptions(cilium.Name, webhookServerOptions, webhookSwitches) + aggOption = controllercmd.NewOptionAggregator( generalOpts, restOpts, @@ -69,6 +80,7 @@ func NewControllerManagerCommand(ctx context.Context) *cobra.Command { controllercmd.PrefixOption("healthcheck-", healthCheckCtrlOpts), reconcileOpts, configFileOpts, + webhookOptions, ) ) @@ -105,6 +117,22 @@ func NewControllerManagerCommand(ctx context.Context) *cobra.Command { configFileOpts.Completed().ApplyHealthCheckConfig(&healthcheck.AddOptions.HealthCheckConfig) healthCheckCtrlOpts.Completed().Apply(&healthcheck.AddOptions.Controller) + _, shootWebhooks, err := webhookOptions.Completed().AddToManager(ctx, mgr) + if err != nil { + return errors.Wrap(err, "Could not add webhooks to manager") + } + + ciliumcontroller.DefaultAddOptions.ShootWebhooks = shootWebhooks + + // Update shoot webhook configuration in case the webhook server port has changed. + if err := mgr.Add(&shootWebhookReconciler{ + client: mgr.GetClient(), + webhookServerPort: mgr.GetWebhookServer().Port, + shootWebhooks: shootWebhooks, + }); err != nil { + return fmt.Errorf("error adding runnable for reconciling shoot webhooks in all namespaces: %w", err) + } + if err := ciliumcontroller.AddToManager(mgr); err != nil { return fmt.Errorf("could not add controllers to manager: %w", err) } @@ -125,3 +153,17 @@ func NewControllerManagerCommand(ctx context.Context) *cobra.Command { return cmd } + +type shootWebhookReconciler struct { + client client.Client + webhookServerPort int + shootWebhooks []admissionregistrationv1.MutatingWebhook +} + +func (s *shootWebhookReconciler) NeedLeaderElection() bool { + return true +} + +func (s *shootWebhookReconciler) Start(ctx context.Context) error { + return ciliumcontroller.ReconcileShootWebhooksForAllNamespaces(ctx, s.client, cilium.Name, cilium.Type, s.webhookServerPort, s.shootWebhooks) +} diff --git a/example/controller-registration.yaml b/example/controller-registration.yaml index c2860a793..13949276f 100644 --- a/example/controller-registration.yaml +++ b/example/controller-registration.yaml @@ -5,7 +5,11 @@ metadata: name: networking-cilium type: helm providerConfig: +<<<<<<< HEAD chart: H4sIAAAAAAAAA+0cXXPbNjLP/BU45TpNOhEoybLc0U1vTrXV1nOO7bFcd/qUgUhIYk0SLAFKUdPeb7/FBymSoi1RSZ2k5Y5GIkHsYrG7WCwWoOYkdmlI4zZ9K2jIPRa2QypWLL73wnnb8XwvCexn7wcdgJPjY/ULUP5V192jfrd33BsMZHn3pNPrPkPH79nuXpBwQWKEnsWMicfq7Xr+mcJ8H/3jBfUDbx6ymB7ShlTwoN9/UP+g9qL+e93u8eAZ6nzozlbB31z/z9E1EYLGIUeCIa1jtFrQEE0Tz3fBCFBEnHsypxxbz9HtwuOIJ1HEYgEXYBc+mvtsigIinAXUfoVi6hPhLSngiUWunIQuEAjpHJ6yEL2IYjrz3lIXrTyo94+XGF2F/hqxUGFKllBEY+R7IcUWPpu8mQjgDUicsiAAAnenE+R6Mbfw3BO2+tbsW3j6W2yr77RgMbflV3rLl6G9ITSF/iURmnk+5dZXmK8i+J6Se/gWAVz/D6rekdhjCUfnZ2NoMIrZL9QRFvZcSmxdD4osvOQOc6ltfWyt7g97jf/TBYkFXpPAP6iNXeO/d3xUGv+dk34z/p8ESOTd0VjqfYiWXYtEUe4Wd49wp+3SpeVS7sReJNSDEfoB5gPkSKtAMxYjsaDoe2NI6FTZDLrUVoTGqV1ZIQnoEO1jcNayioePLaq/JOw1/l3m4Dk7uI0d47/X6Z+Ux3+312nG/1OAbcM0GK1hplwI9MJ5iXogfTQZXaPJGMHQJqG6ITOYHj0iKHJYEJFwjdEIpn6FxmHK5zReUhfr+EDOpAh+fc8Bk4IZPgldqr3ECIIJ+JmwmVgRiDQudJVXaIlRD9G3Do0EIhyFTAAeA5R45XGgFir0i/PT8SUwJluwbBs+KYWKRjLaxqOhHu6gF7JCyzxqvfyXJLFmCcQpa9koSqAxkXXCMASty26DAEKH6nhFbBrAksbPhgabCgLVCSBEcDfLV0REGKYVLISIhra9Wq0wURxjFs9tIzRum762gWuD9WMIEYqU9q+JF0OPp2sE/hoQyBR49clKKWweU3gmg7kQrWIIimTwxY3AJRnX4yL2pokoCC3lEbqerwBiAxNojSbofNJC344m55NXkshP57c/XP14i34a3dyMLm/PxxN0dYNOry7Pzm/Pry7h7js0uvwZ/ff88uwVop7UJIgTgj7oAbDpSXGCxUhaE0oLLKRTCo+o4808B7oWzhMIQdGcwcwQqqCUxoHHpVq5iiyBjO8FnlDBJd/uF7agypwN59LZSTvmC9R2UAtjGz5LGrostiGEXCRTDLq2U7+4uVhAmGin6G2HhSJmvg+eM6ZzKTDVMgayW/4TYfTPFw4RSDd2N76ZgIhemlv6loAsqP0QRRl2pbPpUBNsyc5A4K7icjMP01BaAUeFPupAXQnUFErZSbE4LI4hhEWbVlGhVSvKU2/m3r8q7DX/CwoWCgbFD8sE1c7/9Lqd7kmT/3kKqKn/N7DiB9fLsYj2XwvuiP+k6kv6PzrqN/Hfk8C7d23k0pkXQlQkF2gt1P7jD2uvRZpEhXlTIVh5Oj6ZUp9DUBPhe7rWFNVNMoXZm4IdYY/ZsrUCjQdILImfGLbevYOgxvETN2MWI4P4CCPbuGUGJZUheqCGaV+1tN0LLwT7gahQoeMb6lMCwcYlMFfJWcaaF8DkqjlDSD7xZmhB+LVKiqEWX5De8WAIzd7J5qEpWR8LMkcZRhR7oZih1hf8P1/wcs2YRox7gsXrx0hAH2kVweHBBKGzuX6XFeLSyGfrgIbCrPAz4+D2svuwIoEzBqHs2vEJ5wVUDnGzm/hglvj+a6WREp2PPcA+cajp/yFcnHnzgERtpfwlhJAsbsuoXC41aHWOcFf+rz8o5f+OYA3a+P8nAeN6CkP6Tmn1KlWqdnyFNCEYhztEp8oYXpPICqggLhFkCG5Ap/mqXXW11RgkDkuOCj+qirWH0V55WOHLJfnfoRBsWaC+rJ2yo1rkb4omOkS/SyKP9rpILufRPrbKPigcOv7r7Absiv8G3a34b9A/bsb/U8CHGtiZYfypg1m3kg1hmUVrt9vqN98RbbZ4Y8g4s26ODY3U8LHjs8SFqIH40YJ0Fa1MCiY1ouWR6NSIVXKZhp7je8Au1AzBj8hso+oksFwqH1o6+0ccmVqUbcDj23VEuZJWltxr7aCPtwnI3F2K39rFXxW+YVnJOS2tyVUOsx47ecSMj1+julIBjHrtSoSsvWkSc1GzRYVTr02N8knMKjX9/yaArzEB7PD/x0fHxyX/3++cHDX+/ykg7zbTZZh2f2eZqitmgb0SBHVnAu3Gq/IEezeIkDyqhPnCVnnrGnh1l/Zyc0KyHNOlJ8n+4HG5OL6QmxBD1FFP1N6M9mCpSzCFpywJhe49B8Iy8tT9V+dlLnIC+QAiqd85hNIhb7jKGYCEPVcNpvEwZGZfJsWHGWZBnXsOvmWzojTMV68RCoHHC5WpQP/Et4ZL/C1wfy3PG7X2WqK2XqoQQ2dZgIsNszmPrAv8gi4+iDYO0QdCqcFJSPMhpzIfclm3fblZ6zl05DjSCmujy5maeFA3k0q7nlfQoLRTjCdNUgxvpG+qXSe+f81g4KwLg0knoKLsYR7PYUFAwI9lBW1k1+KvDaElaMGV1X09cbdjylkSO7TtM+f+mxwnuuLY1MNpvQuolmdK0gzIWxktO0kcg28FkvJGnj3L09tsy+FN3ck6dHiZ3IISXyzUcKpNOoe7qxl9dK7NIqqj4PZmVD9AXGNcpQijrH6ZtB6wbbnh/o1NhWNXLzHMwLZza4ACmUy5Jj+YZysL9s2zPAs0XOaNRFvyxXh0Nr55M74Yn8rt7DeXo9fjyfXodJzVREglhr+LWTDMFSI086jv3tBZsdSUSx81zNwpzubHrG4tz7rh9/z16PvxHTB7dfPm6m5889PN+e0Wr0OkZ8VcNsSuTI8UuMmldHOMpRZeMJSsUK3qBPtZbl1vY/yOQrO463ZKUXDGL/OTgL6W/olva0ebQK57gayoZbvbgt5X1g/lsKqY2ZJ3rl4MPkMeeR0iESe0SuZ5WWw521JnnHTNnre7vZfsKbh0RhJfvGYu4PV7nUPm+/3kVJ/fXXJ/hPe/Yubuw0DN9V9hI2bfJeCu/P/RoJz/6w+6vWb99xSQX//lx131jpuKzPTy8Dofgh66QjTTUjc7B2LJlwmIf6aH8hDNiM9p8fRxK20ZKd62DyBnDQ63j2Lh1scW+CcGNcd/PCVO7RcBdoz/o0GvfP6nN+g2+Z8nAZk+z/sApWCSiAUMsd/0UcDNvrrJi/sgMxrfMJ8enhn6LHM+ceLLOKwtNxu+j1kSqQ60UW53obitYBViYlnV0cLj6sYNuVyjxa68BSc7NZXmVKhf3+P6YiWzQu/VrhEAL9zY0FmR7Ne4vIqyqyQCrdNtjhwGvfHCvOFs86KEWmrVgWj4/Qmm5SrBWOj4RvPlRX1171c7u5rxsFP2AQkhcnWz0mKLmZyNCJRhAHPm8hHpp/xusdZqqR+Zz1UX0wzzweGtEVxzprpwFDhfIfJyNveQOrJVrW4dYnZYxalLTqGT5jpbfphaoRsxL6242WdIEVXKqnBDdP6K58dVzHy6VTAFtwX61+WbGluPfmFTfRExd3Nh+2yu1ZgIdX56RacLxu6d/KagaROaZEEqDXV4yUuf5jTe+qplvZ/f/Vaz/Xdzv9Bzk1hJDf4RwVnZPm5uvqolJp5M5WueyuNrUpNC5rSu0PfZDXnq+b9m/FccentGgrvWf8dH/fL676TXrP+eBCrPf5TMvNn+2/ZF4HGYSvQVZXXL7mmYLls/tm73gZrjfxmR+u+B7zr/BQvA8vqv3+z/Pw2UMrtSv/pNMrd87LMlTZ47pHjWegq+odcyfgPqCg9qXDN3ZCrT+ED30QZW9nQh6c5oRV/SWCy/P1gs034n29NUhV6abW9vHuht0i+/+tKklQMvHPk+W9HcFqMTJQ8cHtrmBW8IYMCrPkC0Gy23PxHQgMXrgxjQqIfwYDDLLwAgBKMK1ibZPljVORNZvnXWZLMNsKfv1ouhvDJ1id4HaElDbH0CB60+UdjL/y+1JRz6ByC7/P/JoPz+f7cn3/9r/P+fD/oUhvKK6fs9Q0QTPHdi6eAz8zB/ebN5HXqTB7CrRqUg8yFSMYMc0lHu/Mb57JKJa/mXATDarU3qAL37wwJfI3kxM5DZGH2+5bGfl/zv84337XY6gblP/WG39/Vrz4LCqm1LeYxYVtf74JpUuoEZkYTrN73VDGDIalZucuLKvTa+CSHzl1OfTe2AyFWorf5WyVak7TPm3NNY/ZmBpp1XQqoBxuY+fbM5dKNx2yRwB32DpoTdOsKdlinI/j+li7td/Pbz7lV3q1etf38je9bTDzDGlrU5eGLOiecPswzRsSWXBtlpl2zS36714LGVNKq3imd9hrmIQh73GabZSEsniBQ7lWfAq06Am/9zkJXsX7hKTpZOY1fWUOekwfTVjTnE3D3qWNmLnEMrL75WMwk20EADDTTQQAMNNNBAAw000EADDTTQQAMNNNBAAw000EADDTTQQAMNNNBAAw000MDnDP8HGuTXGQB4AAA= +======= + chart: H4sIAAAAAAAAA+0ca3PbNjKf+StwSjtNOhGpl+WObnJzqq22nnNsj+W6008ZiIQk1iTBEqAUNe399ls8SIESZYlKzklb7ngsEgQWi93FYrFYcoYTj0QkaZJ3nETMp1EzInxJkwc/mjVdP/DT0Hn2YdACOD05kb8Am7/yut3ttTsnnX5flLdPW532M3Tygf0eBCnjOEHoWUIpf6zevud/UpgdIn97ToLQn0U0Icf0IQTc7/V2yh/EXpR/p90+6T9DrY892DL4m8v/ObrBnJMkYohTpGSMlnMSoUnqBx4oAYqx+4BnhNnWc3Q39xliaRzThMMF6EWAZgGdoBBzdw61X6GEBJj7CwLt+Nwox5EHCCIyg6c0Qi/ihEz9d8RDSx/q/eOlja6jYIVoJFsKklBMEhT4EbEt+3z8dsyBNkBxRsMQENyfjZHnJ8yyZz535H9FvmVPfksc+T8rmM8c8S+7ZYvIWSOawPjSGE39gDDra5stY/g/wQ/wn4dw/V+oeo8Tn6YMXZyPoMM4ob8Ql1u27xHsqHpQZNkL5lKPONanlurhcND8P5vjhNsrHAZH9bFv/ndOuhvzv3Xaq+f/kwCO/XuSCLkP0KJt4Tg2bu12x241PbKwPMLcxI+5fDBEP8B6gFyhFWhKE8TnBH2vFQmdSZ1BV0qL0CjTKyvCIRmgQxTOWpTR8KlZ9ZeEg+a/R117Ro/uY8/877R6p5vzv91p1fP/KcBxYBmMV7BSzjl64b5EHeA+Gg9v0HiEYGrjSN7gKSyPPuYEuTSMcbSy0RCWftmMwZLPSLIgnq38A7GSIvgNfBdUClb4NPKIshJDcCbgZ0ynfInB07hUVV6hhY06iLxzScwRZiiiHNpRaJIsfQbYItn88uJsdAWEiR4sx4G/DENJJzlubdEQGBL0QlRo6EeNl/8UKFY0BT9lJTpFKXTG80FogqB3MWxgQOQS5a/wdQe2wPGzxkEnHEN1DA1iuJuaFRHmmmgJc87jgeMsl0sbS4ptmswczTTm6LE2gWrd6scIPBTB7V9TP4ERT1YI7DU0wBOgNcBLKbBZQuCZcOYitEzAKRLOF9MMF2g8n/HEn6S8wLSMRhi6WQHYBirQGI7RxbiBvh2OL8avBJKfLu5+uP7xDv00vL0dXt1djMbo+hadXV+dX9xdXF/B3XdoePUz+s/F1fkrRHwhSWAnOH0wAiDTF+wEjRG4xoQUSMiWFBYT15/6LgwtmqXggqIZhZUhkk4pSUKfCbEy6VkCmsAPfS6dS7Y9LtuCKjM6mAljJ/SYzVHTRQ3bduBvQSKPJg64kPN0YoOsncwuri/m4CY6WfOmSyOe0CAAy5mQmWCY7NkGtFv2E9noixcu5kh1dj+6HQOLXupb8g4DL4izC6Nwu7LVdKAQNsRgwHGXfrleh0kktIChwhiVoy4ZqgsF7wRbXJok4MKida+o0KsVm9jrtfevCget/5yAhoJCseMiQZXjP512q31ax3+eAirK/y3s+MH0MpvHh+8F9/h/QvQb8u92e7X/9yTw/n0TeWTqR+AViQ1aAzX/+MM6aJMmmsK6KRtYJp4AT0jAwKmJ7QeyUhjlTTqB1ZuAHtk+dURvBRw7UCxwkGqy3r8Hp8YNUi8n1ka64SOEbLfdJFBgGaAdNXT/sqftUfgR6A94hbK5fUsCgsHZuALiSinLSfNDWFwVZQiJJ/4UzTG7kUEx1GBz3DnpD6Dbe9E9dCXq2xzPUN4iTvyIT1HjS/bvL9lmzYTElPmcJqvHUMAYSRnCwdEIYbDGuDcF4pE4oKuQRFzv8HPlYM6ivVuQQBkFV3blBpixQlMGfrOXBqCW9sM3UiIbeD71BPvMoaL9B3dx6s9CHDel8BfgQtKkKbxysdUg5THCffG/Xn8j/teFPWht/58EtOkpTOl7KdXrTKjK8BXChKAc3gCdSWV4g2MrJBx7mOMBmAEV5is31eVaoxsx2HKU2FFZrCyMssqDElsu0P8OhaDLHPVE7Ywc2SN7W1TRAfpdIHl01EV0hkX71CL7qHDs/K9yGrDP/+u3t/y/fu+knv9PAR9rYueK8X+dzKqXfAqLKFqz2ZS/5kCU2tprRbZz7Wa2xpEpvu0GNPXAa8BBPMdtiSvngg6NKH6kKjRibZhMjc8NfCAXakZgR0S0UQ4SSN4oH1gq+oddEVoUfcDju1VMmORWHtxr7MFvbyMQsbusfWMffWXtNcmSz1lpRaqMltXIMRvmdPwaV+UKtKjWr2iQ9zdJE8Yr9ijbVOtTNfksVpWK9n/twFdYAPbYfzD/m+c/vdZp7f89CZhmM9uGKfN3nou6ZBU4KEBQdSVQZrwsTnBwhwiJVCWbzR0Zt67QrurWXhxOCJITsvAF2h98JjbHl+IQYoBa8ok8m1EWLDMJuvCMphFXo2eAWHieavwyX+bSYMhHYEn1wSGUTXlNlaEAAg7cNejOo4jqc5msPawwc+I+MLAt6x2lJr58j1BwPF7ISAX6wr7TVNrfAvU3It+ocdAWtfFSuhgqygJUrIk1LLIqCAqy+CjSOEYeCGUKJyCLh5yJeMhV1f7FYa3vkqHrCi2s3Fys1NiHujlXmtWsggIpnaI/qYNi9pr7utpNGgQ3FCbOqjCZVAAqzh+a7VwahhjsWF7QRE4l+prgWoIUPFE9UAt3MyGMpolLmgF1H14blKiKI13PzupdQjWTKIEzxO+Et+ymSQK2FVCKG5F7ZuJbH8vZ67rjVeSyTXRzggM+l9OpMmqj7b5uVOpck8ZEecHN9azegVy1uM4aDPP6m6jVhG2KA/fXDuGuU77F0BPbMfYABTRLMplT+pChy5ee14+sPDtb6ynSFMen5vh0NbUhsHWtG3HGuh8fKNJ+dCQpw5Yrro59mjjyjYx+ZrYl0cKcAGqWXo6G56Pbt6PL0Zk4qn97NXwzGt8Mz0Z5TYRk0Pu7hIYDoxChqU8C75ZMi6W6XNjfQb5U2LkA8rqVVo01vRdvht+P7oHY69u31/ej259uL+62aB0gteIbkR6nNPRToKZg6cGsiqzWbYZlslTyMXrOLaGQWcEyHSJYYcYppy6Fvezd2c3mvjKzIYWpmBfKfTOnP4vkgO0Wv6NIb5/brY19Rs41GqQheSNWgJIhK7U1SA1FRSXh/XP0QyW+K0pYRsyW1I16CVhlkVQ8QDxJyW7JK15sLWcbg3GzqIip/QcHRTLwyBSnAX9DPWjX67SO8agO41N1evfx/RHa/4qx0b8DVNz/Fw7iDg0B7Dv/6fY347+9frtT7/+fAsz9v2kVyk9cpWeuwgM35hbk2AiBXrrbeR6QJV4mwcG5MjQDNMUBI8Xs80bWM5K0bSeg5x0OtlPx7ManZvhnBhXnfzLBbuUXQfbM/27/tLMx/zv9Tj3/nwTE8YlpA6SAccrnMMV+U6mg67wKfS4SAM9IcksDcnxk8E8Z80vSQHiJTXHY9H1C01gOoImM06XisZJV8NhFVVcxj8kbL2Jij5544haM7ERXmhEufwOfqYuliAp+UL+aAaxw48BgeXpY5+Iqzq/SGKROtilyKYzGj0zF2aZFMnWjVxd89Q9HmJXLbX5h4GvJbwZ1yke/3DvUnIa9vA9xBH61l5cWe8z5rFkgFQOI05ePcD+jd4u0RkP+iHi+vJjkLXdOb9XA0zn1hVRws0LsGzpnPDCOWncJKY8HKJpgnwE7T3nJCAxdX+dbJl0r8mLqZxXXp09ZQxl/KdxgFdVk5mxLaEC2CiZgzIBeVb6usfXoFzpRFzH11hdOQGdKuCmXWfV6x++aR8W6T+iShhk3ZEqbv36qOReLAKa/qRuNrxvWh1nob9VQ/m6GGkauw1TZ1HiEcVZ+4m+sbJXYxNKJeCFYrg0K1bgQY6/K9EPOzT7O+l/R/9OTrJoLuG//d7p1/tvtntTnv08Cpfk/WnkPzv45UGNlArQZ5JInBLfFOOfWaeGuddZRzWFDKIJ7jWKMs0pyUXawxmW2i7YBFzeWeTS7B09f9ZrHj5vyck9EeOPkoBgMFiWgmLC8V4otV5b/cfNfL7IHmoF98/+k29uM/5zW+7+ngcfmf7Z41ekf2x4G+BFUHkMUeXVHH0iUha0+tWwPgYrzfxHj6t8B2Zf/2+1vxX96p916/j8FbJw7CfmqN4m9zbT/hlB55uLiuzYTsA2dhrYbUJf7UOOGekNdmSRHmo8mkHKgCckW8JKxZM6DmR9SLFN2xzjJVfswVdxcP1BpMl99/ZU+9Ar9aBgEdEmMFBM3Tnckj27TYq8R2NCuPIF0fzPj9DQkIU1WRxGgmh5Dg265+QJY5rzkuQJleYaifCvXcH1IeaDtVsEQU5iqRJ1SNoQiNj6DRNvPFA6y/wulCcd+AGqP/e+0Tra+/9Zpndb2/ylAZeFJq5i93zlAJLVnbiIMfK4e+pNn689hrOOATtms5Hg2QNJnEFM6NvL3LqZXlN+IT8bAbLfWQUL0/g8LbI2gRa9AOm3j+ZbFfr5hf5+vrW+71Qr1fWYP251v3vgWFJYlVYjXSER1lSukUGXpFTFOmfrSh1wBNFpFyq3BLuOzIWsX0rycBHTihFjsKx35WT1HonbOqftAEvkxG4XbFEImAUpnAXm7TrpUbZs49Po93Uwyu9G1Ww1dkH8/q2232/a7P/eo2lujavzrtRhZRz2wbduy1omH+j0hM5lxgE4ssTXIsx3zRX+71s60xcyrt4q5ngPDoxDpnoPsNMJSoWBJTuk7QGVvAOnv+YhKzi9MHk5svI1TWkO+JwOqL2/0SyztbsvKX+QfWCb7GpZVCCIMrDwpWEUber2uLspy29qtzkmrXjtrqKGGGmqooYYaaqihhhpqqKGGGmqooYYaaqihhhpqqKGGGmqooYYaPjv4Hworlh8AeAAA +>>>>>>> 649781eb (support node local dns feature) values: image: tag: v1.13.0-dev diff --git a/go.mod b/go.mod index 9b3a98ec2..6ac0b630a 100644 --- a/go.mod +++ b/go.mod @@ -9,6 +9,7 @@ require ( github.com/golang/mock v1.6.0 github.com/onsi/ginkgo/v2 v2.1.3 github.com/onsi/gomega v1.18.0 + github.com/pkg/errors v0.9.1 github.com/spf13/cobra v1.2.1 github.com/spf13/pflag v1.0.5 golang.org/x/tools v0.1.9 diff --git a/go.sum b/go.sum index 8a2d4556a..bc2f5bb2e 100644 --- a/go.sum +++ b/go.sum @@ -171,8 +171,10 @@ github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHo github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f h1:JOrtw2xFKzlg+cbHpyrpLDmnN1HqhBfnX7WDiW7eG2c= github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= +github.com/coreos/go-systemd/v22 v22.3.2 h1:D9/bQk5vlXQFZ6Kwuu6zaiXJ9oTPe68++AzAJc1DzSI= github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= diff --git a/pkg/charts/config.go b/pkg/charts/config.go index d902c9d0c..8aae4b7e7 100644 --- a/pkg/charts/config.go +++ b/pkg/charts/config.go @@ -32,6 +32,8 @@ type globalConfig struct { NodePort nodePort `json:"nodePort"` PodCIDR string `json:"podCIDR"` BPFSocketLBHostnsOnly bpfSocketLBHostnsOnly `json:"bpfSocketLBHostnsOnly"` + LocalRedirectPolicy localRedirectPolicy `json:"localRedirectPolicy"` + NodeLocalDNS nodeLocalDNS `json:"nodeLocalDNS"` } // etcd related configuration for cilium @@ -125,3 +127,11 @@ type config struct { type bpfSocketLBHostnsOnly struct { Enabled bool `json:"enabled"` } + +type localRedirectPolicy struct { + Enabled bool `json:"enabled"` +} + +type nodeLocalDNS struct { + Enabled bool `json:"enabled"` +} diff --git a/pkg/charts/utils.go b/pkg/charts/utils.go index 35df1a986..15c4aa90e 100644 --- a/pkg/charts/utils.go +++ b/pkg/charts/utils.go @@ -21,6 +21,7 @@ import ( "github.com/gardener/gardener-extension-networking-cilium/pkg/cilium" "github.com/gardener/gardener-extension-networking-cilium/pkg/imagevector" extensionscontroller "github.com/gardener/gardener/extensions/pkg/controller" + v1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants" extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" ) @@ -89,6 +90,12 @@ var defaultGlobalConfig = globalConfig{ BPFSocketLBHostnsOnly: bpfSocketLBHostnsOnly{ Enabled: false, }, + LocalRedirectPolicy: localRedirectPolicy{ + Enabled: false, + }, + NodeLocalDNS: nodeLocalDNS{ + Enabled: false, + }, } func newGlobalConfig() globalConfig { @@ -176,5 +183,11 @@ func generateChartValues(config *ciliumv1alpha1.NetworkConfig, network *extensio if config.Debug != nil { globalConfig.Debug.Enabled = *config.Debug } + // If node local dns feature is enabled, enable local redirect policy + if cluster.Shoot.Annotations[v1beta1constants.AnnotationNodeLocalDNS] == "true" { + globalConfig.NodeLocalDNS.Enabled = true + globalConfig.LocalRedirectPolicy.Enabled = true + } + return requirementsConfig, globalConfig, nil } diff --git a/pkg/cmd/options.go b/pkg/cmd/options.go new file mode 100644 index 000000000..e1d1e9760 --- /dev/null +++ b/pkg/cmd/options.go @@ -0,0 +1,29 @@ +// Copyright (c) 2022 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package cmd + +import ( + shootwebhook "github.com/gardener/gardener-extension-networking-cilium/pkg/webhook/shoot" + webhookcmd "github.com/gardener/gardener/extensions/pkg/webhook/cmd" + + extensionshootwebhook "github.com/gardener/gardener/extensions/pkg/webhook/shoot" +) + +// WebhookSwitchOptions are the webhookcmd.SwitchOptions for the cilium network extension webhooks. +func WebhookSwitchOptions() *webhookcmd.SwitchOptions { + return webhookcmd.NewSwitchOptions( + webhookcmd.Switch(extensionshootwebhook.WebhookName, shootwebhook.AddToManager), + ) +} diff --git a/pkg/controller/actuator.go b/pkg/controller/actuator.go index 34d7b0002..4c8444f60 100644 --- a/pkg/controller/actuator.go +++ b/pkg/controller/actuator.go @@ -21,6 +21,7 @@ import ( "github.com/gardener/gardener/extensions/pkg/controller/network" gardenerkubernetes "github.com/gardener/gardener/pkg/client/kubernetes" "github.com/go-logr/logr" + admissionregistrationv1 "k8s.io/api/admissionregistration/v1" "k8s.io/client-go/rest" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/log" @@ -34,16 +35,21 @@ type actuator struct { chartRendererFactory extensionscontroller.ChartRendererFactory chartApplier gardenerkubernetes.ChartApplier + + shootWebhooks []admissionregistrationv1.MutatingWebhook + webhookServerPort int } // LogID is the id that will be used in log statements. const LogID = "network-cilium-actuator" // NewActuator creates a new Actuator that updates the status of the handled Network resources. -func NewActuator(chartRendererFactory extensionscontroller.ChartRendererFactory) network.Actuator { +func NewActuator(chartRendererFactory extensionscontroller.ChartRendererFactory, shootWebhooks []admissionregistrationv1.MutatingWebhook, webhookServerPort int) network.Actuator { return &actuator{ logger: log.Log.WithName(LogID), chartRendererFactory: chartRendererFactory, + shootWebhooks: shootWebhooks, + webhookServerPort: webhookServerPort, } } diff --git a/pkg/controller/actuator_delete.go b/pkg/controller/actuator_delete.go index d0c998407..7a8e7acbf 100644 --- a/pkg/controller/actuator_delete.go +++ b/pkg/controller/actuator_delete.go @@ -16,12 +16,16 @@ package controller import ( "context" + "fmt" "time" + "github.com/gardener/gardener-extension-networking-cilium/pkg/cilium" extensionscontroller "github.com/gardener/gardener/extensions/pkg/controller" + extensionswebhookshoot "github.com/gardener/gardener/extensions/pkg/webhook/shoot" extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" "github.com/gardener/gardener/pkg/utils/managedresources" "github.com/gardener/gardener/pkg/utils/managedresources/builder" + "sigs.k8s.io/controller-runtime/pkg/client" ) // Delete implements Network.Actuator. @@ -45,6 +49,23 @@ func (a *actuator) Delete(ctx context.Context, network *extensionsv1alpha1.Netwo return err } + if len(a.shootWebhooks) > 0 { + networkPolicy := extensionswebhookshoot.GetNetworkPolicyMeta(network.Namespace, cilium.Name) + if err := a.client.Delete(ctx, networkPolicy); client.IgnoreNotFound(err) != nil { + return fmt.Errorf("could not delete network policy for shoot webhooks in namespace '%s': %w", network.Namespace, err) + } + + if err := managedresources.Delete(ctx, a.client, network.Namespace, ShootWebhooksResourceName, false); err != nil { + return fmt.Errorf("could not delete managed resource containing shoot webhook '%s': %w", ShootWebhooksResourceName, err) + } + + timeoutCtx4, cancel := context.WithTimeout(ctx, 2*time.Minute) + defer cancel() + if err := managedresources.WaitUntilDeleted(timeoutCtx4, a.client, network.Namespace, ShootWebhooksResourceName); err != nil { + return fmt.Errorf("error while waiting for managed resource containing shoot webhook '%s' to be deleted: %w", ShootWebhooksResourceName, err) + } + } + timeoutCtx, cancel := context.WithTimeout(ctx, 2*time.Minute) defer cancel() return managedresources.WaitUntilDeleted(timeoutCtx, a.client, network.Namespace, CiliumConfigSecretName) diff --git a/pkg/controller/actuator_reconcile.go b/pkg/controller/actuator_reconcile.go index 50f639931..349b09366 100644 --- a/pkg/controller/actuator_reconcile.go +++ b/pkg/controller/actuator_reconcile.go @@ -15,6 +15,7 @@ package controller import ( + "bytes" "context" "fmt" @@ -23,18 +24,34 @@ import ( "github.com/gardener/gardener-extension-networking-cilium/pkg/cilium" extensionscontroller "github.com/gardener/gardener/extensions/pkg/controller" + "github.com/gardener/gardener/extensions/pkg/webhook" + extensionswebhookshoot "github.com/gardener/gardener/extensions/pkg/webhook/shoot" "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants" + v1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants" extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" gardenerkubernetes "github.com/gardener/gardener/pkg/client/kubernetes" + "github.com/gardener/gardener/pkg/extensions" "github.com/gardener/gardener/pkg/utils/chart" + "github.com/gardener/gardener/pkg/utils/flow" + kutil "github.com/gardener/gardener/pkg/utils/kubernetes" + "github.com/gardener/gardener/pkg/utils/managedresources" "github.com/gardener/gardener/pkg/utils/managedresources/builder" + admissionregistrationv1 "k8s.io/api/admissionregistration/v1" corev1 "k8s.io/api/core/v1" + networkingv1 "k8s.io/api/networking/v1" + apierrors "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/serializer/json" + "k8s.io/apimachinery/pkg/util/validation/field" "sigs.k8s.io/controller-runtime/pkg/client" ) const ( // CiliumConfigSecretName is the name of the secret used for the managed resource of networking cilium CiliumConfigSecretName = "extension-networking-cilium-config" + // ShootWebhooksResourceName is the name of the managed resource for the gardener networking extension cilium webhooks + ShootWebhooksResourceName = "extension-cilium-shoot-webhooks" ) func withLocalObjectRefs(refs ...string) []corev1.LocalObjectReference { @@ -84,6 +101,18 @@ func (a *actuator) Reconcile(ctx context.Context, network *extensionsv1alpha1.Ne } } + if cluster.Shoot.Spec.Kubernetes.KubeProxy != nil && cluster.Shoot.Spec.Kubernetes.KubeProxy.Enabled != nil && *cluster.Shoot.Spec.Kubernetes.KubeProxy.Enabled && cluster.Shoot.Spec.Kubernetes.KubeProxy.Mode != nil && *cluster.Shoot.Spec.Kubernetes.KubeProxy.Mode == "IPVS" { + if cluster.Shoot.Annotations[v1beta1constants.AnnotationNodeLocalDNS] == "true" { + return field.Forbidden(field.NewPath("spec", "kubernetes", "kubeProxy", "mode"), "Running kube-proxy with IPVS mode is forbidden in conjunction with node local dns enabled") + } + } + + if len(a.shootWebhooks) > 0 { + if err := ReconcileShootWebhooks(ctx, a.client, network.Namespace, cilium.Name, a.webhookServerPort, a.shootWebhooks, cluster); err != nil { + return fmt.Errorf("could not reconcile shoot webhooks: %w", err) + } + } + // Create shoot chart renderer chartRenderer, err := a.chartRendererFactory.NewChartRendererForShoot(cluster.Shoot.Spec.Kubernetes.Version) if err != nil { @@ -115,3 +144,92 @@ func (a *actuator) Reconcile(ctx context.Context, network *extensionsv1alpha1.Ne return a.updateProviderStatus(ctx, network, networkConfig) } + +func marshalWebhooks(webhooks []admissionregistrationv1.MutatingWebhook, name string) ([]byte, error) { + var ( + buf = new(bytes.Buffer) + encoder = json.NewYAMLSerializer(json.DefaultMetaFactory, nil, nil) + + apiVersion, kind = admissionregistrationv1.SchemeGroupVersion.WithKind("MutatingWebhookConfiguration").ToAPIVersionAndKind() + mutatingWebhookConfiguration runtime.Object = &admissionregistrationv1.MutatingWebhookConfiguration{ + TypeMeta: metav1.TypeMeta{ + APIVersion: apiVersion, + Kind: kind, + }, + ObjectMeta: metav1.ObjectMeta{ + Name: webhook.NamePrefix + name + webhook.NameSuffixShoot, + }, + Webhooks: webhooks, + } + ) + + if err := encoder.Encode(mutatingWebhookConfiguration, buf); err != nil { + return nil, err + } + + return buf.Bytes(), nil +} + +// ReconcileShootWebhooks deploys the shoot webhook configuration and a managed resource that contains the MutatingWebhookConfiguration. +func ReconcileShootWebhooks(ctx context.Context, c client.Client, namespace, providerName string, serverPort int, shootWebhooks []admissionregistrationv1.MutatingWebhook, cluster *extensionscontroller.Cluster) error { + if err := extensionswebhookshoot.EnsureNetworkPolicy(ctx, c, namespace, providerName, serverPort); err != nil { + return fmt.Errorf("could not create or update network policy for shoot webhooks in namespace '%s': %w", namespace, err) + } + + if cluster.Shoot == nil { + return fmt.Errorf("no shoot found in cluster resource") + } + + webhookConfiguration, err := marshalWebhooks(shootWebhooks, providerName) + if err != nil { + return err + } + data := map[string][]byte{"mutatingwebhookconfiguration.yaml": webhookConfiguration} + + if err := managedresources.Create(ctx, c, namespace, ShootWebhooksResourceName, false, "", data, nil, nil, nil); err != nil { + return fmt.Errorf("could not create or update managed resource '%s/%s' containing shoot webhooks: %w", namespace, ShootWebhooksResourceName, err) + } + + return nil +} + +// ReconcileShootWebhooksForAllNamespaces reconciles the shoot webhooks in all shoot namespaces of the given +// provider type. This is necessary in case the webhook port is changed (otherwise, the network policy would only be +// updated again as part of the ControlPlane reconciliation which might only happen in the next 24h). +func ReconcileShootWebhooksForAllNamespaces(ctx context.Context, c client.Client, providerName, providerType string, port int, shootWebhooks []admissionregistrationv1.MutatingWebhook) error { + namespaceList := &corev1.NamespaceList{} + if err := c.List(ctx, namespaceList, client.MatchingLabels{ + v1beta1constants.GardenRole: v1beta1constants.GardenRoleShoot, + v1beta1constants.LabelShootProvider: providerType, + }); err != nil { + return err + } + + fns := make([]flow.TaskFn, 0, len(namespaceList.Items)) + + for _, namespace := range namespaceList.Items { + var ( + networkPolicy = extensionswebhookshoot.GetNetworkPolicyMeta(namespace.Name, providerName) + namespaceName = namespace.Name + networkPolicyName = networkPolicy.Name + ) + + fns = append(fns, func(ctx context.Context) error { + if err := c.Get(ctx, kutil.Key(namespaceName, networkPolicyName), &networkingv1.NetworkPolicy{}); err != nil { + if !apierrors.IsNotFound(err) { + return err + } + return nil + } + + cluster, err := extensions.GetCluster(ctx, c, namespaceName) + if err != nil { + return err + } + + return ReconcileShootWebhooks(ctx, c, namespaceName, providerName, port, shootWebhooks, cluster) + }) + } + + return flow.Parallel(fns...)(ctx) +} diff --git a/pkg/controller/add.go b/pkg/controller/add.go index 384da929a..ce582a913 100644 --- a/pkg/controller/add.go +++ b/pkg/controller/add.go @@ -21,6 +21,7 @@ import ( "github.com/gardener/gardener/extensions/pkg/controller/network" "github.com/gardener/gardener/extensions/pkg/util" resourcesv1alpha1 "github.com/gardener/gardener/pkg/apis/resources/v1alpha1" + admissionregistrationv1 "k8s.io/api/admissionregistration/v1" "sigs.k8s.io/controller-runtime/pkg/controller" "sigs.k8s.io/controller-runtime/pkg/manager" ) @@ -36,6 +37,8 @@ type AddOptions struct { Controller controller.Options // IgnoreOperationAnnotation specifies whether to ignore the operation annotation or not. IgnoreOperationAnnotation bool + // ShootWebhooks specifies the list of desired Shoot MutatingWebhooks. + ShootWebhooks []admissionregistrationv1.MutatingWebhook } // AddToManagerWithOptions adds a controller with the given Options to the given manager. @@ -47,7 +50,7 @@ func AddToManagerWithOptions(mgr manager.Manager, opts AddOptions) error { } return network.Add(mgr, network.AddArgs{ - Actuator: NewActuator(extensioncontroller.ChartRendererFactoryFunc(util.NewChartRendererForShoot)), + Actuator: NewActuator(extensioncontroller.ChartRendererFactoryFunc(util.NewChartRendererForShoot), opts.ShootWebhooks, mgr.GetWebhookServer().Port), ControllerOptions: opts.Controller, Predicates: network.DefaultPredicates(opts.IgnoreOperationAnnotation), Type: cilium.Type, diff --git a/pkg/webhook/shoot/add.go b/pkg/webhook/shoot/add.go new file mode 100644 index 000000000..ff0d45d65 --- /dev/null +++ b/pkg/webhook/shoot/add.go @@ -0,0 +1,52 @@ +// Copyright (c) 2022 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package shoot + +import ( + extensionswebhook "github.com/gardener/gardener/extensions/pkg/webhook" + "github.com/gardener/gardener/extensions/pkg/webhook/shoot" + + appsv1 "k8s.io/api/apps/v1" + corev1 "k8s.io/api/core/v1" + "sigs.k8s.io/controller-runtime/pkg/log" + "sigs.k8s.io/controller-runtime/pkg/manager" +) + +var ( + // DefaultAddOptions are the default AddOptions for AddToManager. + DefaultAddOptions = AddOptions{} +) + +// AddOptions are options to apply when adding the Cilium shoot webhook to the manager. +type AddOptions struct{} + +var logger = log.Log.WithName("shoot-webhook") + +// AddToManagerWithOptions creates a webhook with the given options and adds it to the manager. +func AddToManagerWithOptions(mgr manager.Manager, opts AddOptions) (*extensionswebhook.Webhook, error) { + logger.Info("Adding webhook to manager") + return shoot.New(mgr, shoot.Args{ + Types: []extensionswebhook.Type{ + {Obj: &corev1.ConfigMap{}}, + {Obj: &appsv1.DaemonSet{}}, + }, + Mutator: NewMutator(), + }) +} + +// AddToManager creates a webhook with the default options and adds it to the manager. +func AddToManager(mgr manager.Manager) (*extensionswebhook.Webhook, error) { + return AddToManagerWithOptions(mgr, DefaultAddOptions) +} diff --git a/pkg/webhook/shoot/mutator.go b/pkg/webhook/shoot/mutator.go new file mode 100644 index 000000000..28501f3e1 --- /dev/null +++ b/pkg/webhook/shoot/mutator.go @@ -0,0 +1,71 @@ +// Copyright (c) 2022 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package shoot + +import ( + "context" + "fmt" + "regexp" + + extensionswebhook "github.com/gardener/gardener/extensions/pkg/webhook" + "github.com/go-logr/logr" + appsv1 "k8s.io/api/apps/v1" + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/meta" + "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/log" +) + +type mutator struct { + logger logr.Logger +} + +// NewMutator creates a new Mutator that mutates resources in the shoot cluster. +func NewMutator() extensionswebhook.Mutator { + return &mutator{ + logger: log.Log.WithName("shoot-mutator"), + } +} + +// Mutate mutates resources. +func (m *mutator) Mutate(ctx context.Context, new, _ client.Object) error { + acc, err := meta.Accessor(new) + if err != nil { + return fmt.Errorf("could not create accessor during webhook: %w", err) + } + // If the object does have a deletion timestamp then we don't want to mutate anything. + if acc.GetDeletionTimestamp() != nil { + return nil + } + + var regexNodeLocalDNS = regexp.MustCompile(`^node-local-dns-.*`) + + switch x := new.(type) { + case *corev1.ConfigMap: + switch regexNodeLocalDNS.MatchString(x.Name) { + case true: + extensionswebhook.LogMutation(logger, x.Kind, x.Namespace, x.Name) + return m.mutateNodeLocalDNSConfigMap(ctx, x) + } + + case *appsv1.DaemonSet: + switch x.Name { + case "node-local-dns": + extensionswebhook.LogMutation(logger, x.Kind, x.Namespace, x.Name) + return m.mutateNodeLocalDNSDaemonSet(ctx, x) + } + } + return nil +} diff --git a/pkg/webhook/shoot/node_local_dns.go b/pkg/webhook/shoot/node_local_dns.go new file mode 100644 index 000000000..ed581afe4 --- /dev/null +++ b/pkg/webhook/shoot/node_local_dns.go @@ -0,0 +1,53 @@ +// Copyright (c) 2022 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package shoot + +import ( + "context" + "regexp" + + appsv1 "k8s.io/api/apps/v1" + corev1 "k8s.io/api/core/v1" +) + +func (m *mutator) mutateNodeLocalDNSConfigMap(ctx context.Context, configmap *corev1.ConfigMap) error { + if configmap.Data == nil { + configmap.Data = make(map[string]string, 1) + } + + re := regexp.MustCompile(`bind.*`) + configmap.Data["Corefile"] = re.ReplaceAllString(configmap.Data["Corefile"], "bind 0.0.0.0") + re = regexp.MustCompile(`health.*`) + configmap.Data["Corefile"] = re.ReplaceAllString(configmap.Data["Corefile"], "health") + + return nil +} + +func (m *mutator) mutateNodeLocalDNSDaemonSet(ctx context.Context, daemonset *appsv1.DaemonSet) error { + if daemonset.Spec.Template.Spec.HostNetwork { + daemonset.Spec.Template.Spec.HostNetwork = false + } + + ciliumArgs := []string{"-skipteardown=true", "-setupinterface=false", "-setupiptables=false"} + for k, v := range daemonset.Spec.Template.Spec.Containers { + if v.Name == "node-cache" { + daemonset.Spec.Template.Spec.Containers[k].Args = append(daemonset.Spec.Template.Spec.Containers[k].Args, ciliumArgs...) + daemonset.Spec.Template.Spec.Containers[k].LivenessProbe.HTTPGet.Host = "" + break + } + } + return nil + +} diff --git a/vendor/github.com/coreos/go-systemd/v22/LICENSE b/vendor/github.com/coreos/go-systemd/v22/LICENSE new file mode 100644 index 000000000..37ec93a14 --- /dev/null +++ b/vendor/github.com/coreos/go-systemd/v22/LICENSE @@ -0,0 +1,191 @@ +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and +distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright +owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities +that control, are controlled by, or are under common control with that entity. +For the purposes of this definition, "control" means (i) the power, direct or +indirect, to cause the direction or management of such entity, whether by +contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the +outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising +permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including +but not limited to software source code, documentation source, and configuration +files. + +"Object" form shall mean any form resulting from mechanical transformation or +translation of a Source form, including but not limited to compiled object code, +generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made +available under the License, as indicated by a copyright notice that is included +in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that +is based on (or derived from) the Work and for which the editorial revisions, +annotations, elaborations, or other modifications represent, as a whole, an +original work of authorship. For the purposes of this License, Derivative Works +shall not include works that remain separable from, or merely link (or bind by +name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version +of the Work and any modifications or additions to that Work or Derivative Works +thereof, that is intentionally submitted to Licensor for inclusion in the Work +by the copyright owner or by an individual or Legal Entity authorized to submit +on behalf of the copyright owner. For the purposes of this definition, +"submitted" means any form of electronic, verbal, or written communication sent +to the Licensor or its representatives, including but not limited to +communication on electronic mailing lists, source code control systems, and +issue tracking systems that are managed by, or on behalf of, the Licensor for +the purpose of discussing and improving the Work, but excluding communication +that is conspicuously marked or otherwise designated in writing by the copyright +owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf +of whom a Contribution has been received by Licensor and subsequently +incorporated within the Work. + +2. Grant of Copyright License. + +Subject to the terms and conditions of this License, each Contributor hereby +grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, +irrevocable copyright license to reproduce, prepare Derivative Works of, +publicly display, publicly perform, sublicense, and distribute the Work and such +Derivative Works in Source or Object form. + +3. Grant of Patent License. + +Subject to the terms and conditions of this License, each Contributor hereby +grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, +irrevocable (except as stated in this section) patent license to make, have +made, use, offer to sell, sell, import, and otherwise transfer the Work, where +such license applies only to those patent claims licensable by such Contributor +that are necessarily infringed by their Contribution(s) alone or by combination +of their Contribution(s) with the Work to which such Contribution(s) was +submitted. If You institute patent litigation against any entity (including a +cross-claim or counterclaim in a lawsuit) alleging that the Work or a +Contribution incorporated within the Work constitutes direct or contributory +patent infringement, then any patent licenses granted to You under this License +for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. + +You may reproduce and distribute copies of the Work or Derivative Works thereof +in any medium, with or without modifications, and in Source or Object form, +provided that You meet the following conditions: + +You must give any other recipients of the Work or Derivative Works a copy of +this License; and +You must cause any modified files to carry prominent notices stating that You +changed the files; and +You must retain, in the Source form of any Derivative Works that You distribute, +all copyright, patent, trademark, and attribution notices from the Source form +of the Work, excluding those notices that do not pertain to any part of the +Derivative Works; and +If the Work includes a "NOTICE" text file as part of its distribution, then any +Derivative Works that You distribute must include a readable copy of the +attribution notices contained within such NOTICE file, excluding those notices +that do not pertain to any part of the Derivative Works, in at least one of the +following places: within a NOTICE text file distributed as part of the +Derivative Works; within the Source form or documentation, if provided along +with the Derivative Works; or, within a display generated by the Derivative +Works, if and wherever such third-party notices normally appear. The contents of +the NOTICE file are for informational purposes only and do not modify the +License. You may add Your own attribution notices within Derivative Works that +You distribute, alongside or as an addendum to the NOTICE text from the Work, +provided that such additional attribution notices cannot be construed as +modifying the License. +You may add Your own copyright statement to Your modifications and may provide +additional or different license terms and conditions for use, reproduction, or +distribution of Your modifications, or for any such Derivative Works as a whole, +provided Your use, reproduction, and distribution of the Work otherwise complies +with the conditions stated in this License. + +5. Submission of Contributions. + +Unless You explicitly state otherwise, any Contribution intentionally submitted +for inclusion in the Work by You to the Licensor shall be under the terms and +conditions of this License, without any additional terms or conditions. +Notwithstanding the above, nothing herein shall supersede or modify the terms of +any separate license agreement you may have executed with Licensor regarding +such Contributions. + +6. Trademarks. + +This License does not grant permission to use the trade names, trademarks, +service marks, or product names of the Licensor, except as required for +reasonable and customary use in describing the origin of the Work and +reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. + +Unless required by applicable law or agreed to in writing, Licensor provides the +Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, +including, without limitation, any warranties or conditions of TITLE, +NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are +solely responsible for determining the appropriateness of using or +redistributing the Work and assume any risks associated with Your exercise of +permissions under this License. + +8. Limitation of Liability. + +In no event and under no legal theory, whether in tort (including negligence), +contract, or otherwise, unless required by applicable law (such as deliberate +and grossly negligent acts) or agreed to in writing, shall any Contributor be +liable to You for damages, including any direct, indirect, special, incidental, +or consequential damages of any character arising as a result of this License or +out of the use or inability to use the Work (including but not limited to +damages for loss of goodwill, work stoppage, computer failure or malfunction, or +any and all other commercial damages or losses), even if such Contributor has +been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. + +While redistributing the Work or Derivative Works thereof, You may choose to +offer, and charge a fee for, acceptance of support, warranty, indemnity, or +other liability obligations and/or rights consistent with this License. However, +in accepting such obligations, You may act only on Your own behalf and on Your +sole responsibility, not on behalf of any other Contributor, and only if You +agree to indemnify, defend, and hold each Contributor harmless for any liability +incurred by, or claims asserted against, such Contributor by reason of your +accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work + +To apply the Apache License to your work, attach the following boilerplate +notice, with the fields enclosed by brackets "[]" replaced with your own +identifying information. (Don't include the brackets!) The text should be +enclosed in the appropriate comment syntax for the file format. We also +recommend that a file or class name and description of purpose be included on +the same "printed page" as the copyright notice for easier identification within +third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/vendor/github.com/coreos/go-systemd/v22/NOTICE b/vendor/github.com/coreos/go-systemd/v22/NOTICE new file mode 100644 index 000000000..23a0ada2f --- /dev/null +++ b/vendor/github.com/coreos/go-systemd/v22/NOTICE @@ -0,0 +1,5 @@ +CoreOS Project +Copyright 2018 CoreOS, Inc + +This product includes software developed at CoreOS, Inc. +(http://www.coreos.com/). diff --git a/vendor/github.com/coreos/go-systemd/v22/unit/deserialize.go b/vendor/github.com/coreos/go-systemd/v22/unit/deserialize.go new file mode 100644 index 000000000..283c15077 --- /dev/null +++ b/vendor/github.com/coreos/go-systemd/v22/unit/deserialize.go @@ -0,0 +1,350 @@ +// Copyright 2015 CoreOS, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package unit + +import ( + "bufio" + "bytes" + "errors" + "fmt" + "io" + "strings" + "unicode" +) + +const ( + // SYSTEMD_LINE_MAX mimics the maximum line length that systemd can use. + // On typical systemd platforms (i.e. modern Linux), this will most + // commonly be 2048, so let's use that as a sanity check. + // Technically, we should probably pull this at runtime: + // SYSTEMD_LINE_MAX = int(C.sysconf(C.__SC_LINE_MAX)) + // but this would introduce an (unfortunate) dependency on cgo + SYSTEMD_LINE_MAX = 2048 + + // SYSTEMD_NEWLINE defines characters that systemd considers indicators + // for a newline. + SYSTEMD_NEWLINE = "\r\n" +) + +var ( + // ErrLineTooLong gets returned when a line is too long for systemd to handle. + ErrLineTooLong = fmt.Errorf("line too long (max %d bytes)", SYSTEMD_LINE_MAX) +) + +// DeserializeOptions parses a systemd unit file into a list of UnitOptions +func DeserializeOptions(f io.Reader) (opts []*UnitOption, err error) { + _, options, err := deserializeAll(f) + return options, err +} + +// DeserializeSections deserializes into a list of UnitSections. +func DeserializeSections(f io.Reader) ([]*UnitSection, error) { + sections, _, err := deserializeAll(f) + return sections, err +} + +// Deserialize parses a systemd unit file into a list of UnitOptions. +// Note: this function is deprecated in favor of DeserializeOptions +// and will be removed at a future date. +func Deserialize(f io.Reader) (opts []*UnitOption, err error) { + return DeserializeOptions(f) +} + +type lexDataType int + +const ( + sectionKind lexDataType = iota + optionKind +) + +// lexChanData - support either datatype in the lex channel. +// Poor man's union data type. +type lexData struct { + Type lexDataType + Option *UnitOption + Section *UnitSection +} + +// deserializeAll deserializes into UnitSections and UnitOptions. +func deserializeAll(f io.Reader) ([]*UnitSection, []*UnitOption, error) { + + lexer, lexchan, errchan := newLexer(f) + + go lexer.lex() + + sections := []*UnitSection{} + options := []*UnitOption{} + + for ld := range lexchan { + switch ld.Type { + case optionKind: + if ld.Option != nil { + // add to options + opt := ld.Option + options = append(options, &(*opt)) + + // sanity check. "should not happen" as sectionKind is first in code flow. + if len(sections) == 0 { + return nil, nil, fmt.Errorf( + "Unit file misparse: option before section") + } + + // add to newest section entries. + s := len(sections) - 1 + sections[s].Entries = append(sections[s].Entries, + &UnitEntry{Name: opt.Name, Value: opt.Value}) + } + case sectionKind: + if ld.Section != nil { + sections = append(sections, ld.Section) + } + } + } + + err := <-errchan + + return sections, options, err +} + +func newLexer(f io.Reader) (*lexer, <-chan *lexData, <-chan error) { + lexchan := make(chan *lexData) + errchan := make(chan error, 1) + buf := bufio.NewReader(f) + + return &lexer{buf, lexchan, errchan, ""}, lexchan, errchan +} + +type lexer struct { + buf *bufio.Reader + lexchan chan *lexData + errchan chan error + section string +} + +func (l *lexer) lex() { + defer func() { + close(l.lexchan) + close(l.errchan) + }() + next := l.lexNextSection + for next != nil { + if l.buf.Buffered() >= SYSTEMD_LINE_MAX { + // systemd truncates lines longer than LINE_MAX + // https://bugs.freedesktop.org/show_bug.cgi?id=85308 + // Rather than allowing this to pass silently, let's + // explicitly gate people from encountering this + line, err := l.buf.Peek(SYSTEMD_LINE_MAX) + if err != nil { + l.errchan <- err + return + } + if !bytes.ContainsAny(line, SYSTEMD_NEWLINE) { + l.errchan <- ErrLineTooLong + return + } + } + + var err error + next, err = next() + if err != nil { + l.errchan <- err + return + } + } +} + +type lexStep func() (lexStep, error) + +func (l *lexer) lexSectionName() (lexStep, error) { + sec, err := l.buf.ReadBytes(']') + if err != nil { + return nil, errors.New("unable to find end of section") + } + + return l.lexSectionSuffixFunc(string(sec[:len(sec)-1])), nil +} + +func (l *lexer) lexSectionSuffixFunc(section string) lexStep { + return func() (lexStep, error) { + garbage, _, err := l.toEOL() + if err != nil { + return nil, err + } + + garbage = bytes.TrimSpace(garbage) + if len(garbage) > 0 { + return nil, fmt.Errorf("found garbage after section name %s: %q", l.section, garbage) + } + + l.lexchan <- &lexData{ + Type: sectionKind, + Section: &UnitSection{Section: section, Entries: []*UnitEntry{}}, + Option: nil, + } + + return l.lexNextSectionOrOptionFunc(section), nil + } +} + +func (l *lexer) ignoreLineFunc(next lexStep) lexStep { + return func() (lexStep, error) { + for { + line, _, err := l.toEOL() + if err != nil { + return nil, err + } + + line = bytes.TrimSuffix(line, []byte{' '}) + + // lack of continuation means this line has been exhausted + if !bytes.HasSuffix(line, []byte{'\\'}) { + break + } + } + + // reached end of buffer, safe to exit + return next, nil + } +} + +func (l *lexer) lexNextSection() (lexStep, error) { + r, _, err := l.buf.ReadRune() + if err != nil { + if err == io.EOF { + err = nil + } + return nil, err + } + + if r == '[' { + return l.lexSectionName, nil + } else if isComment(r) { + return l.ignoreLineFunc(l.lexNextSection), nil + } + + return l.lexNextSection, nil +} + +func (l *lexer) lexNextSectionOrOptionFunc(section string) lexStep { + return func() (lexStep, error) { + r, _, err := l.buf.ReadRune() + if err != nil { + if err == io.EOF { + err = nil + } + return nil, err + } + + if unicode.IsSpace(r) { + return l.lexNextSectionOrOptionFunc(section), nil + } else if r == '[' { + return l.lexSectionName, nil + } else if isComment(r) { + return l.ignoreLineFunc(l.lexNextSectionOrOptionFunc(section)), nil + } + + l.buf.UnreadRune() + return l.lexOptionNameFunc(section), nil + } +} + +func (l *lexer) lexOptionNameFunc(section string) lexStep { + return func() (lexStep, error) { + var partial bytes.Buffer + for { + r, _, err := l.buf.ReadRune() + if err != nil { + return nil, err + } + + if r == '\n' || r == '\r' { + return nil, errors.New("unexpected newline encountered while parsing option name") + } + + if r == '=' { + break + } + + partial.WriteRune(r) + } + + name := strings.TrimSpace(partial.String()) + return l.lexOptionValueFunc(section, name, bytes.Buffer{}), nil + } +} + +func (l *lexer) lexOptionValueFunc(section, name string, partial bytes.Buffer) lexStep { + return func() (lexStep, error) { + for { + line, eof, err := l.toEOL() + if err != nil { + return nil, err + } + + if len(bytes.TrimSpace(line)) == 0 { + break + } + + partial.Write(line) + + // lack of continuation means this value has been exhausted + idx := bytes.LastIndex(line, []byte{'\\'}) + if idx == -1 || idx != (len(line)-1) { + break + } + + if !eof { + partial.WriteRune('\n') + } + + return l.lexOptionValueFunc(section, name, partial), nil + } + + val := partial.String() + if strings.HasSuffix(val, "\n") { + // A newline was added to the end, so the file didn't end with a backslash. + // => Keep the newline + val = strings.TrimSpace(val) + "\n" + } else { + val = strings.TrimSpace(val) + } + l.lexchan <- &lexData{ + Type: optionKind, + Section: nil, + Option: &UnitOption{Section: section, Name: name, Value: val}, + } + + return l.lexNextSectionOrOptionFunc(section), nil + } +} + +// toEOL reads until the end-of-line or end-of-file. +// Returns (data, EOFfound, error) +func (l *lexer) toEOL() ([]byte, bool, error) { + line, err := l.buf.ReadBytes('\n') + // ignore EOF here since it's roughly equivalent to EOL + if err != nil && err != io.EOF { + return nil, false, err + } + + line = bytes.TrimSuffix(line, []byte{'\r'}) + line = bytes.TrimSuffix(line, []byte{'\n'}) + + return line, err == io.EOF, nil +} + +func isComment(r rune) bool { + return r == '#' || r == ';' +} diff --git a/vendor/github.com/coreos/go-systemd/v22/unit/escape.go b/vendor/github.com/coreos/go-systemd/v22/unit/escape.go new file mode 100644 index 000000000..63b11726d --- /dev/null +++ b/vendor/github.com/coreos/go-systemd/v22/unit/escape.go @@ -0,0 +1,116 @@ +// Copyright 2015 CoreOS, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Implements systemd-escape [--unescape] [--path] + +package unit + +import ( + "fmt" + "strconv" + "strings" +) + +const ( + allowed = `:_.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789` +) + +// If isPath is true: +// We remove redundant '/'s, the leading '/', and trailing '/'. +// If the result is empty, a '/' is inserted. +// +// We always: +// Replace the following characters with `\x%x`: +// Leading `.` +// `-`, `\`, and anything not in this set: `:-_.\[0-9a-zA-Z]` +// Replace '/' with '-'. +func escape(unescaped string, isPath bool) string { + e := []byte{} + inSlashes := false + start := true + for i := 0; i < len(unescaped); i++ { + c := unescaped[i] + if isPath { + if c == '/' { + inSlashes = true + continue + } else if inSlashes { + inSlashes = false + if !start { + e = append(e, '-') + } + } + } + + if c == '/' { + e = append(e, '-') + } else if start && c == '.' || strings.IndexByte(allowed, c) == -1 { + e = append(e, []byte(fmt.Sprintf(`\x%x`, c))...) + } else { + e = append(e, c) + } + start = false + } + if isPath && len(e) == 0 { + e = append(e, '-') + } + return string(e) +} + +// If isPath is true: +// We always return a string beginning with '/'. +// +// We always: +// Replace '-' with '/'. +// Replace `\x%x` with the value represented in hex. +func unescape(escaped string, isPath bool) string { + u := []byte{} + for i := 0; i < len(escaped); i++ { + c := escaped[i] + if c == '-' { + c = '/' + } else if c == '\\' && len(escaped)-i >= 4 && escaped[i+1] == 'x' { + n, err := strconv.ParseInt(escaped[i+2:i+4], 16, 8) + if err == nil { + c = byte(n) + i += 3 + } + } + u = append(u, c) + } + if isPath && (len(u) == 0 || u[0] != '/') { + u = append([]byte("/"), u...) + } + return string(u) +} + +// UnitNameEscape escapes a string as `systemd-escape` would +func UnitNameEscape(unescaped string) string { + return escape(unescaped, false) +} + +// UnitNameUnescape unescapes a string as `systemd-escape --unescape` would +func UnitNameUnescape(escaped string) string { + return unescape(escaped, false) +} + +// UnitNamePathEscape escapes a string as `systemd-escape --path` would +func UnitNamePathEscape(unescaped string) string { + return escape(unescaped, true) +} + +// UnitNamePathUnescape unescapes a string as `systemd-escape --path --unescape` would +func UnitNamePathUnescape(escaped string) string { + return unescape(escaped, true) +} diff --git a/vendor/github.com/coreos/go-systemd/v22/unit/option.go b/vendor/github.com/coreos/go-systemd/v22/unit/option.go new file mode 100644 index 000000000..98e1af5c9 --- /dev/null +++ b/vendor/github.com/coreos/go-systemd/v22/unit/option.go @@ -0,0 +1,59 @@ +// Copyright 2015 CoreOS, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package unit + +import ( + "fmt" +) + +// UnitOption represents an option in a systemd unit file. +type UnitOption struct { + Section string + Name string + Value string +} + +// NewUnitOption returns a new UnitOption instance with pre-set values. +func NewUnitOption(section, name, value string) *UnitOption { + return &UnitOption{Section: section, Name: name, Value: value} +} + +func (uo *UnitOption) String() string { + return fmt.Sprintf("{Section: %q, Name: %q, Value: %q}", uo.Section, uo.Name, uo.Value) +} + +// Match compares two UnitOptions and returns true if they are identical. +func (uo *UnitOption) Match(other *UnitOption) bool { + return uo.Section == other.Section && + uo.Name == other.Name && + uo.Value == other.Value +} + +// AllMatch compares two slices of UnitOptions and returns true if they are +// identical. +func AllMatch(u1 []*UnitOption, u2 []*UnitOption) bool { + length := len(u1) + if length != len(u2) { + return false + } + + for i := 0; i < length; i++ { + if !u1[i].Match(u2[i]) { + return false + } + } + + return true +} diff --git a/vendor/github.com/coreos/go-systemd/v22/unit/section.go b/vendor/github.com/coreos/go-systemd/v22/unit/section.go new file mode 100644 index 000000000..217a183cb --- /dev/null +++ b/vendor/github.com/coreos/go-systemd/v22/unit/section.go @@ -0,0 +1,44 @@ +// Copyright 2020 CoreOS, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package unit + +// UnitEntry is a single line entry in a Unit file. +type UnitEntry struct { + Name string + Value string +} + +// UnitSection is a section in a Unit file. The section name +// and a list of entries in that section. +type UnitSection struct { + Section string + Entries []*UnitEntry +} + +// String implements the stringify interface for UnitEntry +func (u *UnitEntry) String() string { + return "{Name: " + u.Name + ", " + "Value: " + u.Value + "}" +} + +// String implements the stringify interface for UnitSection +func (s *UnitSection) String() string { + result := "{Section: " + s.Section + for _, e := range s.Entries { + result += e.String() + } + + result += "}" + return result +} diff --git a/vendor/github.com/coreos/go-systemd/v22/unit/serialize.go b/vendor/github.com/coreos/go-systemd/v22/unit/serialize.go new file mode 100644 index 000000000..c1b79c02d --- /dev/null +++ b/vendor/github.com/coreos/go-systemd/v22/unit/serialize.go @@ -0,0 +1,98 @@ +// Copyright 2015 CoreOS, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package unit + +import ( + "bytes" + "io" +) + +// Serialize encodes all of the given UnitOption objects into a +// unit file. When serialized the options are sorted in their +// supplied order but grouped by section. +func Serialize(opts []*UnitOption) io.Reader { + var buf bytes.Buffer + + if len(opts) == 0 { + return &buf + } + + // Index of sections -> ordered options + idx := map[string][]*UnitOption{} + // Separately preserve order in which sections were seen + sections := []string{} + for _, opt := range opts { + sec := opt.Section + if _, ok := idx[sec]; !ok { + sections = append(sections, sec) + } + idx[sec] = append(idx[sec], opt) + } + + for i, sect := range sections { + writeSectionHeader(&buf, sect) + writeNewline(&buf) + + opts := idx[sect] + for _, opt := range opts { + writeOption(&buf, opt) + writeNewline(&buf) + } + if i < len(sections)-1 { + writeNewline(&buf) + } + } + + return &buf +} + +// SerializeSections will serializes the unit file from the given +// UnitSections. +func SerializeSections(sections []*UnitSection) io.Reader { + + var buf bytes.Buffer + + for i, s := range sections { + writeSectionHeader(&buf, s.Section) + writeNewline(&buf) + + for _, e := range s.Entries { + writeOption(&buf, &UnitOption{s.Section, e.Name, e.Value}) + writeNewline(&buf) + } + + if i < len(sections)-1 { + writeNewline(&buf) + } + } + + return &buf +} + +func writeNewline(buf *bytes.Buffer) { + buf.WriteRune('\n') +} + +func writeSectionHeader(buf *bytes.Buffer, section string) { + buf.WriteRune('[') + buf.WriteString(section) + buf.WriteRune(']') +} + +func writeOption(buf *bytes.Buffer, opt *UnitOption) { + buf.WriteString(opt.Name) + buf.WriteRune('=') + buf.WriteString(opt.Value) +} diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/certificates.go b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/certificates.go new file mode 100644 index 000000000..1636ab342 --- /dev/null +++ b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/certificates.go @@ -0,0 +1,225 @@ +// Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package webhook + +import ( + "context" + "fmt" + "net" + "os" + "path/filepath" + "strings" + + kutil "github.com/gardener/gardener/pkg/utils/kubernetes" + "github.com/gardener/gardener/pkg/utils/secrets" + corev1 "k8s.io/api/core/v1" + apierrors "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/client-go/kubernetes/scheme" + "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/manager" +) + +const ( + // ModeService is a constant for the webhook mode indicating that the controller is running inside of the Kubernetes cluster it + // is serving. + ModeService = "service" + // ModeURL is a constant for the webhook mode indicating that the controller is running outside of the Kubernetes cluster it + // is serving. If this is set then a URL is required for configuration. + ModeURL = "url" + // ModeURLWithServiceName is a constant for the webhook mode indicating that the controller is running outside of the Kubernetes cluster it + // is serving but in the same cluster like the kube-apiserver. If this is set then a URL is required for configuration. + ModeURLWithServiceName = "url-service" + + certSecretName = "gardener-extension-webhook-cert" +) + +// GenerateCertificates generates the certificates that are required for a webhook. It returns the ca bundle, and it +// stores the server certificate and key locally on the file system. +func GenerateCertificates(ctx context.Context, mgr manager.Manager, certDir, namespace, name, mode, url string) ([]byte, error) { + var ( + caCert *secrets.Certificate + serverCert *secrets.Certificate + err error + ) + + // If the namespace is not set then the webhook controller is running locally. We simply generate a new certificate in this case. + if len(namespace) == 0 { + caCert, serverCert, err = generateNewCAAndServerCert(mode, namespace, name, url) + if err != nil { + return nil, fmt.Errorf("error generating new certificates for webhook server: %w", err) + } + return writeCertificates(certDir, caCert, serverCert) + } + + // The controller stores the generated webhook certificate in a secret in the cluster. It tries to read it. If it does not exist a + // new certificate is generated. + c, err := getClient(mgr) + if err != nil { + return nil, err + } + + secret := &corev1.Secret{} + if err := c.Get(ctx, kutil.Key(namespace, certSecretName), secret); err != nil { + if !apierrors.IsNotFound(err) { + return nil, fmt.Errorf("error getting cert secret: %w", err) + } + + // The secret was not found, let's generate new certificates and store them in the secret afterwards. + caCert, serverCert, err = generateNewCAAndServerCert(mode, namespace, name, url) + if err != nil { + return nil, fmt.Errorf("error generating new certificates for webhook server: %w", err) + } + + secret.ObjectMeta = metav1.ObjectMeta{Namespace: namespace, Name: certSecretName} + secret.Type = corev1.SecretTypeOpaque + secret.Data = map[string][]byte{ + secrets.DataKeyCertificateCA: caCert.CertificatePEM, + secrets.DataKeyPrivateKeyCA: caCert.PrivateKeyPEM, + secrets.DataKeyCertificate: serverCert.CertificatePEM, + secrets.DataKeyPrivateKey: serverCert.PrivateKeyPEM, + } + if err := c.Create(ctx, secret); err != nil { + return nil, err + } + + return writeCertificates(certDir, caCert, serverCert) + } + + // The secret has been found and we are now trying to read the stored certificate inside it. + caCert, serverCert, err = loadExistingCAAndServerCert(secret.Data) + if err != nil { + return nil, fmt.Errorf("error reading data of secret %s/%s: %w", namespace, certSecretName, err) + } + return writeCertificates(certDir, caCert, serverCert) +} + +func generateNewCAAndServerCert(mode, namespace, name, url string) (*secrets.Certificate, *secrets.Certificate, error) { + caConfig := &secrets.CertificateSecretConfig{ + CommonName: "webhook-ca", + CertType: secrets.CACert, + } + + caCert, err := caConfig.GenerateCertificate() + if err != nil { + return nil, nil, err + } + + var ( + dnsNames []string + ipAddresses []net.IP + ) + + serverName := url + serverNameData := strings.SplitN(url, ":", 3) + + if len(serverNameData) == 2 { + serverName = serverNameData[0] + } + + switch mode { + case ModeURL: + if addr := net.ParseIP(url); addr != nil { + ipAddresses = []net.IP{ + addr, + } + } else { + dnsNames = []string{ + serverName, + } + } + + case ModeService: + dnsNames = []string{ + fmt.Sprintf("gardener-extension-%s", name), + fmt.Sprintf("gardener-extension-%s.%s", name, namespace), + fmt.Sprintf("gardener-extension-%s.%s.svc", name, namespace), + } + } + + serverConfig := &secrets.CertificateSecretConfig{ + CommonName: name, + DNSNames: dnsNames, + IPAddresses: ipAddresses, + CertType: secrets.ServerCert, + SigningCA: caCert, + } + + serverCert, err := serverConfig.GenerateCertificate() + if err != nil { + return nil, nil, err + } + + return caCert, serverCert, nil +} + +func loadExistingCAAndServerCert(data map[string][]byte) (*secrets.Certificate, *secrets.Certificate, error) { + secretDataCACert, ok := data[secrets.DataKeyCertificateCA] + if !ok { + return nil, nil, fmt.Errorf("secret does not contain %s key", secrets.DataKeyCertificateCA) + } + secretDataCAKey, ok := data[secrets.DataKeyPrivateKeyCA] + if !ok { + return nil, nil, fmt.Errorf("secret does not contain %s key", secrets.DataKeyPrivateKeyCA) + } + caCert, err := secrets.LoadCertificate("", secretDataCAKey, secretDataCACert) + if err != nil { + return nil, nil, fmt.Errorf("could not load ca certificate") + } + + secretDataServerCert, ok := data[secrets.DataKeyCertificate] + if !ok { + return nil, nil, fmt.Errorf("secret does not contain %s key", secrets.DataKeyCertificate) + } + secretDataServerKey, ok := data[secrets.DataKeyPrivateKey] + if !ok { + return nil, nil, fmt.Errorf("secret does not contain %s key", secrets.DataKeyPrivateKey) + } + serverCert, err := secrets.LoadCertificate("", secretDataServerKey, secretDataServerCert) + if err != nil { + return nil, nil, fmt.Errorf("could not load server certificate") + } + + return caCert, serverCert, nil +} + +func writeCertificates(certDir string, caCert, serverCert *secrets.Certificate) ([]byte, error) { + var ( + serverKeyPath = filepath.Join(certDir, secrets.DataKeyPrivateKey) + serverCertPath = filepath.Join(certDir, secrets.DataKeyCertificate) + ) + + if err := os.MkdirAll(certDir, 0755); err != nil { + return nil, err + } + if err := os.WriteFile(serverKeyPath, serverCert.PrivateKeyPEM, 0666); err != nil { + return nil, err + } + if err := os.WriteFile(serverCertPath, serverCert.CertificatePEM, 0666); err != nil { + return nil, err + } + + return caCert.CertificatePEM, nil +} + +func getClient(mgr manager.Manager) (client.Client, error) { + s := runtime.NewScheme() + if err := scheme.AddToScheme(s); err != nil { + return nil, err + } + + return client.New(mgr.GetConfig(), client.Options{Scheme: s}) +} diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/cmd/factory.go b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/cmd/factory.go new file mode 100644 index 000000000..83c0f9f61 --- /dev/null +++ b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/cmd/factory.go @@ -0,0 +1,65 @@ +// Copyright (c) 2020 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package cmd + +import ( + "sort" + + extensionswebhook "github.com/gardener/gardener/extensions/pkg/webhook" + + "sigs.k8s.io/controller-runtime/pkg/manager" +) + +// FactoryAggregator aggregates various Factory functions. +type FactoryAggregator []func(manager.Manager) (*extensionswebhook.Webhook, error) + +// NewFactoryAggregator creates a new FactoryAggregator and registers the given functions. +func NewFactoryAggregator(m []func(manager.Manager) (*extensionswebhook.Webhook, error)) FactoryAggregator { + builder := FactoryAggregator{} + + for _, f := range m { + builder.Register(f) + } + + return builder +} + +// Register registers the given functions in this builder. +func (a *FactoryAggregator) Register(f func(manager.Manager) (*extensionswebhook.Webhook, error)) { + *a = append(*a, f) +} + +// Webhooks calls all factories with the given managers and returns all created webhooks. +// As soon as there is an error creating a webhook, the error is returned immediately. +func (a *FactoryAggregator) Webhooks(mgr manager.Manager) ([]*extensionswebhook.Webhook, error) { + webhooks := make([]*extensionswebhook.Webhook, 0, len(*a)) + + for _, f := range *a { + wh, err := f(mgr) + if err != nil { + return nil, err + } + + webhooks = append(webhooks, wh) + } + + // ensure stable order of webhooks, otherwise the WebhookConfig might be reordered on every restart + // leading to a different invocation order which can lead to unnecessary rollouts of components + sort.Slice(webhooks, func(i, j int) bool { + return webhooks[i].Name < webhooks[j].Name + }) + + return webhooks, nil +} diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/cmd/options.go b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/cmd/options.go new file mode 100644 index 000000000..b8e41cc9f --- /dev/null +++ b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/cmd/options.go @@ -0,0 +1,307 @@ +// Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package cmd + +import ( + "context" + "fmt" + + extensionswebhook "github.com/gardener/gardener/extensions/pkg/webhook" + + "github.com/spf13/pflag" + admissionregistrationv1 "k8s.io/api/admissionregistration/v1" + "k8s.io/apimachinery/pkg/util/sets" + "sigs.k8s.io/controller-runtime/pkg/manager" +) + +const ( + // ModeFlag is the name of the command line flag to specify the webhook config mode. + ModeFlag = "webhook-config-mode" + // URLFlag is the name of the command line flag to specify the URL that is used to register the webhooks in Kubernetes. + URLFlag = "webhook-config-url" + // ServicePortFlag is the name of the command line flag to specify the service port that exposes the webhook server. + // If not specified it will fallback to the webhook server port. + ServicePortFlag = "webhook-config-service-port" + // NamespaceFlag is the name of the command line flag to specify the webhook config namespace for 'service' mode. + NamespaceFlag = "webhook-config-namespace" +) + +// ServerOptions are command line options that can be set for ServerConfig. +type ServerOptions struct { + // Mode is the URl that is used to register the webhooks in Kubernetes. + Mode string + // URL is the URl that is used to register the webhooks in Kubernetes. + URL string + // ServicePort is the service port that exposes the webhook server. + ServicePort int + // Namespace is the webhook config namespace for 'service' mode. + Namespace string + + config *ServerConfig +} + +// ServerConfig is a completed webhook server configuration. +type ServerConfig struct { + // Mode is the webhook client config mode (service or url). + Mode string + // URL is the URL that is used to register the webhooks in Kubernetes. + URL string + // ServicePort is the service port that exposes the webhook server. + ServicePort int + // Namespace is the webhook config namespace for 'service' mode. + Namespace string +} + +// Complete implements Completer.Complete. +func (w *ServerOptions) Complete() error { + w.config = &ServerConfig{ + Mode: w.Mode, + URL: w.URL, + ServicePort: w.ServicePort, + Namespace: w.Namespace, + } + + if len(w.Mode) == 0 { + w.config.Mode = extensionswebhook.ModeService + } + + return nil +} + +// Completed returns the completed ServerConfig. Only call this if `Complete` was successful. +func (w *ServerOptions) Completed() *ServerConfig { + return w.config +} + +// AddFlags implements Flagger.AddFlags. +func (w *ServerOptions) AddFlags(fs *pflag.FlagSet) { + fs.StringVar(&w.Mode, ModeFlag, w.Mode, "The webhook mode - either 'url' (when running outside the cluster) or 'service' (when running inside the cluster).") + fs.StringVar(&w.URL, URLFlag, w.URL, "The webhook URL when running outside of the cluster it is serving.") + fs.IntVar(&w.ServicePort, ServicePortFlag, w.ServicePort, "The service port that exposes the webhook server. If not specified it will fallback to the webhook server port.") + fs.StringVar(&w.Namespace, NamespaceFlag, w.Namespace, "The webhook config namespace for 'service' mode.") +} + +// DisableFlag is the name of the command line flag to disable individual webhooks. +const DisableFlag = "disable-webhooks" + +// NameToFactory binds a specific name to a webhook's factory function. +type NameToFactory struct { + Name string + Func func(manager.Manager) (*extensionswebhook.Webhook, error) +} + +// SwitchOptions are options to build an AddToManager function that filters the disabled webhooks. +type SwitchOptions struct { + Disabled []string + + nameToWebhookFactory map[string]func(manager.Manager) (*extensionswebhook.Webhook, error) + webhookFactoryAggregator FactoryAggregator +} + +// Register registers the given NameToWebhookFuncs in the options. +func (w *SwitchOptions) Register(pairs ...NameToFactory) { + for _, pair := range pairs { + w.nameToWebhookFactory[pair.Name] = pair.Func + } +} + +// AddFlags implements Option. +func (w *SwitchOptions) AddFlags(fs *pflag.FlagSet) { + fs.StringSliceVar(&w.Disabled, DisableFlag, w.Disabled, "List of webhooks to disable") +} + +// Complete implements Option. +func (w *SwitchOptions) Complete() error { + disabled := sets.NewString() + for _, disabledName := range w.Disabled { + if _, ok := w.nameToWebhookFactory[disabledName]; !ok { + return fmt.Errorf("cannot disable unknown webhook %q", disabledName) + } + disabled.Insert(disabledName) + } + + for name, addToManager := range w.nameToWebhookFactory { + if !disabled.Has(name) { + w.webhookFactoryAggregator.Register(addToManager) + } + } + return nil +} + +// Completed returns the completed SwitchConfig. Call this only after successfully calling `Completed`. +func (w *SwitchOptions) Completed() *SwitchConfig { + return &SwitchConfig{WebhooksFactory: w.webhookFactoryAggregator.Webhooks} +} + +// SwitchConfig is the completed configuration of SwitchOptions. +type SwitchConfig struct { + WebhooksFactory func(manager.Manager) ([]*extensionswebhook.Webhook, error) +} + +// Switch binds the given name to the given AddToManager function. +func Switch(name string, f func(manager.Manager) (*extensionswebhook.Webhook, error)) NameToFactory { + return NameToFactory{ + Name: name, + Func: f, + } +} + +// NewSwitchOptions creates new SwitchOptions with the given initial pairs. +func NewSwitchOptions(pairs ...NameToFactory) *SwitchOptions { + opts := SwitchOptions{nameToWebhookFactory: map[string]func(manager.Manager) (*extensionswebhook.Webhook, error){}, webhookFactoryAggregator: FactoryAggregator{}} + opts.Register(pairs...) + return &opts +} + +// AddToManagerOptions are options to create an `AddToManager` function from ServerOptions and SwitchOptions. +type AddToManagerOptions struct { + serverName string + Server ServerOptions + Switch SwitchOptions +} + +// NewAddToManagerOptions creates new AddToManagerOptions with the given server name, server, and switch options. +// It is supposed to be used for webhooks which should be automatically registered in the cluster via a Mutatingwebhookconfiguration. +func NewAddToManagerOptions(serverName string, serverOpts *ServerOptions, switchOpts *SwitchOptions) *AddToManagerOptions { + return &AddToManagerOptions{ + serverName: serverName, + Server: *serverOpts, + Switch: *switchOpts, + } +} + +// AddFlags implements Option. +func (c *AddToManagerOptions) AddFlags(fs *pflag.FlagSet) { + c.Switch.AddFlags(fs) + c.Server.AddFlags(fs) +} + +// Complete implements Option. +func (c *AddToManagerOptions) Complete() error { + if err := c.Switch.Complete(); err != nil { + return err + } + + return c.Server.Complete() +} + +// Completed returns the completed AddToManagerConfig. Only call this if a previous call to `Complete` succeeded. +func (c *AddToManagerOptions) Completed() *AddToManagerConfig { + return &AddToManagerConfig{ + serverName: c.serverName, + Server: *c.Server.Completed(), + Switch: *c.Switch.Completed(), + } +} + +// AddToManagerConfig is a completed AddToManager configuration. +type AddToManagerConfig struct { + serverName string + Server ServerConfig + Switch SwitchConfig +} + +// AddToManager instantiates all webhooks of this configuration. If there are any webhooks, it creates a +// webhook server, registers the webhooks and adds the server to the manager. Otherwise, it is a no-op. +// It generates and registers the seed targeted webhooks via a Mutatingwebhookconfiguration. +func (c *AddToManagerConfig) AddToManager(ctx context.Context, mgr manager.Manager) ([]admissionregistrationv1.MutatingWebhook, []admissionregistrationv1.MutatingWebhook, error) { + webhooks, err := c.Switch.WebhooksFactory(mgr) + if err != nil { + return nil, nil, fmt.Errorf("could not create webhooks: %w", err) + } + webhookServer := mgr.GetWebhookServer() + + servicePort := webhookServer.Port + if (c.Server.Mode == extensionswebhook.ModeService || c.Server.Mode == extensionswebhook.ModeURLWithServiceName) && c.Server.ServicePort > 0 { + servicePort = c.Server.ServicePort + } + + for _, wh := range webhooks { + if wh.Handler != nil { + webhookServer.Register("/"+wh.Name, wh.Handler) + } else { + webhookServer.Register("/"+wh.Name, wh.Webhook) + } + } + + caBundle, err := extensionswebhook.GenerateCertificates(ctx, mgr, webhookServer.CertDir, c.Server.Namespace, c.serverName, c.Server.Mode, c.Server.URL) + if err != nil { + return nil, nil, fmt.Errorf("could not generate certificates: %w", err) + } + + seedWebhooks, shootWebhooks, err := extensionswebhook.RegisterWebhooks(ctx, mgr, c.Server.Namespace, c.serverName, servicePort, c.Server.Mode, c.Server.URL, caBundle, webhooks) + if err != nil { + return nil, nil, fmt.Errorf("could not create webhooks: %w", err) + } + + return seedWebhooks, shootWebhooks, nil +} + +// NewAddToManagerSimpleOptions creates new AddToManagerSimpleOptions with the given switch options. +// It can be used for webhooks which are required to run only without an automatic registration in the K8s cluster. +// Hence, Validatingwebhookconfiguration or Mutatingwebhookconfiguration must be created separately. +func NewAddToManagerSimpleOptions(switchOpts *SwitchOptions) *AddToManagerSimpleOptions { + return &AddToManagerSimpleOptions{ + Switch: *switchOpts, + } +} + +// AddToManagerSimpleOptions are options to create an `AddToManager` function from SwitchOptions. +type AddToManagerSimpleOptions struct { + Switch SwitchOptions +} + +// AddFlags implements Option. +func (o *AddToManagerSimpleOptions) AddFlags(fs *pflag.FlagSet) { + o.Switch.AddFlags(fs) +} + +// Complete implements Option. +func (o *AddToManagerSimpleOptions) Complete() error { + return o.Switch.Complete() +} + +// Completed returns the completed AddToManagerSimpleOptions. Only call this if a previous call to `Complete` succeeded. +func (o *AddToManagerSimpleOptions) Completed() *AddToManagerSimple { + return &AddToManagerSimple{ + Switch: *o.Switch.Completed(), + } +} + +// AddToManagerSimple is a completed AddToManager configuration w/o webhook registration. +type AddToManagerSimple struct { + Switch SwitchConfig +} + +// AddToManager makes the configured webhooks known to the given manager. +// The registration for these webhooks must happen separately via Validatingwebhookconfiguration or Mutatingwebhookconfiguration. +func (s *AddToManagerSimple) AddToManager(mgr manager.Manager) error { + webhooks, err := s.Switch.WebhooksFactory(mgr) + if err != nil { + return fmt.Errorf("could not create webhooks: %w", err) + } + + webhookServer := mgr.GetWebhookServer() + + for _, wh := range webhooks { + if wh.Handler != nil { + webhookServer.Register(wh.Path, wh.Handler) + } else { + webhookServer.Register(wh.Path, wh.Webhook) + } + } + + return nil +} diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/handler.go b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/handler.go new file mode 100644 index 000000000..ae7cf1835 --- /dev/null +++ b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/handler.go @@ -0,0 +1,232 @@ +// Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package webhook + +import ( + "context" + "encoding/json" + "fmt" + "net/http" + + predicateutils "github.com/gardener/gardener/pkg/controllerutils/predicate" + + "github.com/go-logr/logr" + "k8s.io/apimachinery/pkg/api/equality" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/serializer" + "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/client/apiutil" + "sigs.k8s.io/controller-runtime/pkg/manager" + "sigs.k8s.io/controller-runtime/pkg/predicate" + "sigs.k8s.io/controller-runtime/pkg/runtime/inject" + "sigs.k8s.io/controller-runtime/pkg/webhook/admission" +) + +// HandlerBuilder contains information which are required to create an admission handler. +type HandlerBuilder struct { + mutatorMap map[Mutator][]Type + predicates []predicate.Predicate + scheme *runtime.Scheme + logger logr.Logger +} + +// NewBuilder creates a new HandlerBuilder. +func NewBuilder(mgr manager.Manager, logger logr.Logger) *HandlerBuilder { + return &HandlerBuilder{ + mutatorMap: make(map[Mutator][]Type), + scheme: mgr.GetScheme(), + logger: logger.WithName("handler"), + } +} + +// WithMutator adds the given mutator for the given types to the HandlerBuilder. +func (b *HandlerBuilder) WithMutator(mutator Mutator, types ...Type) *HandlerBuilder { + mutator = hybridMutator(mutator) + b.mutatorMap[mutator] = append(b.mutatorMap[mutator], types...) + + return b +} + +// WithValidator adds the given validator for the given types to the HandlerBuilder. +func (b *HandlerBuilder) WithValidator(validator Validator, types ...Type) *HandlerBuilder { + mutator := hybridValidator(validator) + b.mutatorMap[mutator] = append(b.mutatorMap[mutator], types...) + return b +} + +// WithPredicates adds the given predicates to the HandlerBuilder. +func (b *HandlerBuilder) WithPredicates(predicates ...predicate.Predicate) *HandlerBuilder { + b.predicates = append(b.predicates, predicates...) + return b +} + +// Build creates a new admission.Handler with the settings previously specified with the HandlerBuilder's functions. +func (b *HandlerBuilder) Build() (admission.Handler, error) { + h := &handler{ + typesMap: make(map[metav1.GroupVersionKind]client.Object), + mutatorMap: make(map[metav1.GroupVersionKind]Mutator), + predicates: b.predicates, + scheme: b.scheme, + logger: b.logger, + } + + for m, t := range b.mutatorMap { + typesMap, err := buildTypesMap(b.scheme, objectsFromTypes(t)) + if err != nil { + return nil, err + } + mutator := m + for gvk, obj := range typesMap { + h.typesMap[gvk] = obj + h.mutatorMap[gvk] = mutator + } + } + h.decoder = serializer.NewCodecFactory(b.scheme).UniversalDecoder() + + return h, nil +} + +type handler struct { + typesMap map[metav1.GroupVersionKind]client.Object + mutatorMap map[metav1.GroupVersionKind]Mutator + predicates []predicate.Predicate + decoder runtime.Decoder + scheme *runtime.Scheme + logger logr.Logger +} + +// InjectFunc calls the inject.Func on the handler mutators. +func (h *handler) InjectFunc(f inject.Func) error { + for _, mutator := range h.mutatorMap { + if err := f(mutator); err != nil { + return fmt.Errorf("could not inject into the mutator: %w", err) + } + } + return nil +} + +// Handle handles the given admission request. +func (h *handler) Handle(ctx context.Context, req admission.Request) admission.Response { + ar := req.AdmissionRequest + + // Decode object + t, ok := h.typesMap[ar.Kind] + if !ok { + // check if we can find an internal type + for gvk, obj := range h.typesMap { + if gvk.Version == runtime.APIVersionInternal && gvk.Group == ar.Kind.Group && gvk.Kind == ar.Kind.Kind { + t = obj + break + } + } + if t == nil { + return admission.Errored(http.StatusBadRequest, fmt.Errorf("unexpected request kind %s", ar.Kind.String())) + } + } + + mutator, ok := h.mutatorMap[ar.Kind] + if !ok { + // check if we can find an internal type + for gvk, m := range h.mutatorMap { + if gvk.Version == runtime.APIVersionInternal && gvk.Group == ar.Kind.Group && gvk.Kind == ar.Kind.Kind { + mutator = m + break + } + } + if mutator == nil { + return admission.Errored(http.StatusBadRequest, fmt.Errorf("unexpected request kind %s", ar.Kind.String())) + } + } + + return handle(ctx, req, mutator, t, h.decoder, h.logger, h.predicates...) +} + +func handle(ctx context.Context, req admission.Request, m Mutator, t client.Object, decoder runtime.Decoder, logger logr.Logger, predicates ...predicate.Predicate) admission.Response { + ar := req.AdmissionRequest + + // Decode object + obj := t.DeepCopyObject().(client.Object) + _, _, err := decoder.Decode(req.Object.Raw, nil, obj) + if err != nil { + logger.Error(err, "Could not decode request", "request", ar) + return admission.Errored(http.StatusBadRequest, fmt.Errorf("could not decode request %v: %w", ar, err)) + } + + var oldObj client.Object + + // Only UPDATE and DELETE operations have oldObjects. + if len(req.OldObject.Raw) != 0 { + oldObj = t.DeepCopyObject().(client.Object) + if _, _, err := decoder.Decode(ar.OldObject.Raw, nil, oldObj); err != nil { + logger.Error(err, "Could not decode old object", "object", oldObj) + return admission.Errored(http.StatusBadRequest, fmt.Errorf("could not decode old object %v: %v", oldObj, err)) + } + } + + // Run object through predicates + if !predicateutils.EvalGeneric(obj, predicates...) { + return admission.ValidationResponse(true, "") + } + + // Process the resource + newObj := obj.DeepCopyObject().(client.Object) + if err = m.Mutate(ctx, newObj, oldObj); err != nil { + logger.Error(fmt.Errorf("could not process: %w", err), "Admission denied", "kind", ar.Kind.Kind, "namespace", obj.GetNamespace(), "name", obj.GetName()) + return admission.Errored(http.StatusUnprocessableEntity, err) + } + + _, isValidator := m.(Validator) + // Return a patch response if the resource should be changed + if !isValidator && !equality.Semantic.DeepEqual(obj, newObj) { + oldObjMarshaled, err := json.Marshal(obj) + if err != nil { + return admission.Errored(http.StatusInternalServerError, err) + } + newObjMarshaled, err := json.Marshal(newObj) + if err != nil { + return admission.Errored(http.StatusInternalServerError, err) + } + + return admission.PatchResponseFromRaw(oldObjMarshaled, newObjMarshaled) + } + + // Return a validation response if the resource should not be changed + return admission.ValidationResponse(true, "") +} + +func objectsFromTypes(in []Type) []client.Object { + out := make([]client.Object, 0, len(in)) + for _, t := range in { + out = append(out, t.Obj) + } + return out +} + +// buildTypesMap builds a map of the given types keyed by their GroupVersionKind, using the scheme from the given Manager. +func buildTypesMap(scheme *runtime.Scheme, types []client.Object) (map[metav1.GroupVersionKind]client.Object, error) { + typesMap := make(map[metav1.GroupVersionKind]client.Object) + for _, t := range types { + // Get GVK from the type + gvk, err := apiutil.GVKForObject(t, scheme) + if err != nil { + return nil, fmt.Errorf("could not get GroupVersionKind from object %v: %w", t, err) + } + + // Add the type to the types map + typesMap[metav1.GroupVersionKind(gvk)] = t + } + return typesMap, nil +} diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/handler_shootclient.go b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/handler_shootclient.go new file mode 100644 index 000000000..94da6293e --- /dev/null +++ b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/handler_shootclient.go @@ -0,0 +1,140 @@ +// Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package webhook + +import ( + "context" + "fmt" + "net/http" + "strings" + + "github.com/go-logr/logr" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/serializer" + "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/manager" + "sigs.k8s.io/controller-runtime/pkg/runtime/inject" + "sigs.k8s.io/controller-runtime/pkg/webhook/admission" + + "github.com/gardener/gardener/extensions/pkg/util" + v1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants" +) + +// NewHandlerWithShootClient creates a new handler for the given types, using the given mutator, and logger. +func NewHandlerWithShootClient(mgr manager.Manager, types []Type, mutator MutatorWithShootClient, logger logr.Logger) (http.Handler, error) { + // Build a map of the given types keyed by their GVKs + typesMap, err := buildTypesMap(mgr.GetScheme(), objectsFromTypes(types)) + if err != nil { + return nil, err + } + + // inject RemoteAddr into admission http.Handler, we need it to identify which API server called the webhook server + // in order to create a client for that shoot cluster. + return remoteAddrInjectingHandler{ + Handler: &admission.Webhook{ + Handler: &handlerShootClient{ + typesMap: typesMap, + mutator: mutator, + logger: logger.WithName("handlerShootClient"), + }, + }, + }, nil +} + +type handlerShootClient struct { + typesMap map[metav1.GroupVersionKind]client.Object + mutator MutatorWithShootClient + client client.Client + decoder runtime.Decoder + logger logr.Logger +} + +// InjectScheme injects the given scheme into the handler. +func (h *handlerShootClient) InjectScheme(s *runtime.Scheme) error { + h.decoder = serializer.NewCodecFactory(s).UniversalDecoder() + return nil +} + +// InjectFunc injects stuff into the mutator. +func (h *handlerShootClient) InjectFunc(f inject.Func) error { + return f(h.mutator) +} + +// InjectClient injects a client. +func (h *handlerShootClient) InjectClient(client client.Client) error { + h.client = client + return nil +} + +func (h *handlerShootClient) Handle(ctx context.Context, req admission.Request) admission.Response { + var mut MutateFunc = func(ctx context.Context, new, old client.Object) error { + // TODO: replace this logic with a proper authentication mechanism + // see https://kubernetes.io/docs/reference/access-authn-authz/extensible-admission-controllers/#authenticate-apiservers + // API servers should authenticate against webhooks servers using TLS client certs, from which the webhook + // can identify from which shoot cluster the webhook call is coming + remoteAddrValue := ctx.Value(remoteAddrContextKey) + if remoteAddrValue == nil { + return fmt.Errorf("didn't receive remote address") + } + + remoteAddr, ok := remoteAddrValue.(string) + if !ok { + return fmt.Errorf("remote address expected to be string, got %T", remoteAddrValue) + } + + ipPort := strings.Split(remoteAddr, ":") + if len(ipPort) < 1 { + return fmt.Errorf("remote address not parseable: %s", remoteAddr) + } + ip := ipPort[0] + + podList := &corev1.PodList{} + if err := h.client.List(ctx, podList, client.MatchingLabels{ + v1beta1constants.LabelApp: v1beta1constants.LabelKubernetes, + v1beta1constants.LabelRole: v1beta1constants.LabelAPIServer, + }); err != nil { + return fmt.Errorf("error while listing all pods: %w", err) + } + + var shootNamespace string + for _, pod := range podList.Items { + if pod.Status.PodIP == ip { + shootNamespace = pod.Namespace + break + } + } + + if len(shootNamespace) == 0 { + return fmt.Errorf("could not find shoot namespace for webhook request") + } + + _, shootClient, err := util.NewClientForShoot(ctx, h.client, shootNamespace, client.Options{}) + if err != nil { + return fmt.Errorf("could not create shoot client: %w", err) + } + + return h.mutator.Mutate(ctx, new, old, shootClient) + } + + // Decode object + t, ok := h.typesMap[req.AdmissionRequest.Kind] + if !ok { + return admission.Errored(http.StatusBadRequest, fmt.Errorf("unexpected request kind %s", req.AdmissionRequest.Kind)) + } + + return handle(ctx, req, mut, t, h.decoder, h.logger) +} diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/mutator.go b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/mutator.go new file mode 100644 index 000000000..0926b71a6 --- /dev/null +++ b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/mutator.go @@ -0,0 +1,60 @@ +// Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package webhook + +import ( + "context" + "fmt" + + "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/runtime/inject" +) + +// Mutator validates and if needed mutates objects. +type Mutator interface { + // Mutate validates and if needed mutates the given object. + // "old" is optional and it must always be checked for nil. + Mutate(ctx context.Context, new, old client.Object) error +} + +// MutatorWithShootClient validates and if needed mutates objects. It needs the shoot client. +type MutatorWithShootClient interface { + // Mutate validates and if needed mutates the given object. + // "old" is optional and it must always be checked for nil. + Mutate(ctx context.Context, new, old client.Object, shootClient client.Client) error +} +type mutatorWrapper struct { + Mutator +} + +// InjectFunc calls the inject.Func on the handler mutators. +func (d *mutatorWrapper) InjectFunc(f inject.Func) error { + if err := f(d.Mutator); err != nil { + return fmt.Errorf("could not inject into the mutator: %w", err) + } + return nil +} + +func hybridMutator(mut Mutator) Mutator { + return &mutatorWrapper{mut} +} + +// MutateFunc is a func to be used directly as an implementation for Mutator +type MutateFunc func(ctx context.Context, new, old client.Object) error + +// Mutate validates and if needed mutates the given object. +func (mf MutateFunc) Mutate(ctx context.Context, new, old client.Object) error { + return mf(ctx, new, old) +} diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/registration.go b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/registration.go new file mode 100644 index 000000000..8bfe17e0d --- /dev/null +++ b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/registration.go @@ -0,0 +1,191 @@ +// Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package webhook + +import ( + "context" + "fmt" + "strings" + + "github.com/gardener/gardener/pkg/controllerutils" + "github.com/gardener/gardener/pkg/utils/kubernetes" + + admissionregistrationv1 "k8s.io/api/admissionregistration/v1" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/utils/pointer" + "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/client/apiutil" + "sigs.k8s.io/controller-runtime/pkg/manager" +) + +const ( + // NamePrefix is the prefix used for {Valida,Muta}tingWebhookConfigurations of extensions. + NamePrefix = "gardener-extension-" + // NameSuffixShoot is the suffix used for {Valida,Muta}tingWebhookConfigurations of extensions targeting a shoot. + NameSuffixShoot = "-shoot" +) + +// RegisterWebhooks registers the given webhooks in the Kubernetes cluster targeted by the provided manager. +func RegisterWebhooks(ctx context.Context, mgr manager.Manager, namespace, providerName string, servicePort int, mode, url string, caBundle []byte, webhooks []*Webhook) (webhooksToRegisterSeed []admissionregistrationv1.MutatingWebhook, webhooksToRegisterShoot []admissionregistrationv1.MutatingWebhook, err error) { + var ( + exact = admissionregistrationv1.Exact + mutatingWebhookConfigurationSeed = &admissionregistrationv1.MutatingWebhookConfiguration{ObjectMeta: metav1.ObjectMeta{Name: NamePrefix + providerName}} + ) + + for _, webhook := range webhooks { + var ( + rules []admissionregistrationv1.RuleWithOperations + sideEffects = admissionregistrationv1.SideEffectClassNone + ) + + for _, t := range webhook.Types { + rule, err := buildRule(mgr, t) + if err != nil { + return nil, nil, err + } + rules = append(rules, *rule) + } + + webhookToRegister := admissionregistrationv1.MutatingWebhook{ + AdmissionReviewVersions: []string{"v1", "v1beta1"}, + Name: fmt.Sprintf("%s.%s.extensions.gardener.cloud", webhook.Name, strings.TrimPrefix(providerName, "provider-")), + NamespaceSelector: webhook.Selector, + ObjectSelector: webhook.ObjectSelector, + Rules: rules, + SideEffects: &sideEffects, + TimeoutSeconds: pointer.Int32(10), + } + + if webhook.TimeoutSeconds != nil { + webhookToRegister.TimeoutSeconds = webhook.TimeoutSeconds + } + + shootMode := ModeURLWithServiceName + if mode == ModeURL { + shootMode = ModeURL + } + + switch webhook.Target { + case TargetSeed: + webhookToRegister.FailurePolicy = getFailurePolicy(admissionregistrationv1.Fail, webhook.FailurePolicy) + webhookToRegister.MatchPolicy = &exact + webhookToRegister.ClientConfig = buildClientConfigFor(webhook, namespace, providerName, servicePort, mode, url, caBundle) + webhooksToRegisterSeed = append(webhooksToRegisterSeed, webhookToRegister) + case TargetShoot: + webhookToRegister.FailurePolicy = getFailurePolicy(admissionregistrationv1.Ignore, webhook.FailurePolicy) + webhookToRegister.MatchPolicy = &exact + webhookToRegister.ClientConfig = buildClientConfigFor(webhook, namespace, providerName, servicePort, shootMode, url, caBundle) + webhooksToRegisterShoot = append(webhooksToRegisterShoot, webhookToRegister) + default: + return nil, nil, fmt.Errorf("invalid webhook target: %s", webhook.Target) + } + + } + + if len(webhooksToRegisterSeed) > 0 { + c, err := getClient(mgr) + if err != nil { + return nil, nil, err + } + + var ownerReference *metav1.OwnerReference + if len(namespace) > 0 { + ns := &corev1.Namespace{} + if err := c.Get(ctx, client.ObjectKey{Name: namespace}, ns); err != nil { + return nil, nil, err + } + ownerReference = metav1.NewControllerRef(ns, corev1.SchemeGroupVersion.WithKind("Namespace")) + ownerReference.BlockOwnerDeletion = pointer.Bool(false) + } + + if _, err := controllerutils.GetAndCreateOrStrategicMergePatch(ctx, c, mutatingWebhookConfigurationSeed, func() error { + if ownerReference != nil { + mutatingWebhookConfigurationSeed.SetOwnerReferences(kubernetes.MergeOwnerReferences(mutatingWebhookConfigurationSeed.GetOwnerReferences(), *ownerReference)) + } + mutatingWebhookConfigurationSeed.Webhooks = webhooksToRegisterSeed + return nil + }); err != nil { + return nil, nil, err + } + } + + return webhooksToRegisterSeed, webhooksToRegisterShoot, nil +} + +func getFailurePolicy(def admissionregistrationv1.FailurePolicyType, overwrite *admissionregistrationv1.FailurePolicyType) *admissionregistrationv1.FailurePolicyType { + if overwrite != nil { + return overwrite + } + return &def +} + +// buildRule creates and returns a RuleWithOperations for the given object type. +func buildRule(mgr manager.Manager, t Type) (*admissionregistrationv1.RuleWithOperations, error) { + // Get GVK from the type + gvk, err := apiutil.GVKForObject(t.Obj, mgr.GetScheme()) + if err != nil { + return nil, fmt.Errorf("could not get GroupVersionKind from object %v: %w", t.Obj, err) + } + + // Get REST mapping from GVK + mapping, err := mgr.GetRESTMapper().RESTMapping(gvk.GroupKind(), gvk.Version) + if err != nil { + return nil, fmt.Errorf("could not get REST mapping from GroupVersionKind '%s': %w", gvk.String(), err) + } + + resource := mapping.Resource.Resource + if t.Subresource != nil { + resource += fmt.Sprintf("/%s", *t.Subresource) + } + + // Create and return RuleWithOperations + return &admissionregistrationv1.RuleWithOperations{ + Operations: []admissionregistrationv1.OperationType{ + admissionregistrationv1.Create, + admissionregistrationv1.Update, + }, + Rule: admissionregistrationv1.Rule{ + APIGroups: []string{gvk.Group}, + APIVersions: []string{gvk.Version}, + Resources: []string{resource}, + }, + }, nil +} + +func buildClientConfigFor(webhook *Webhook, namespace, providerName string, servicePort int, mode, url string, caBundle []byte) admissionregistrationv1.WebhookClientConfig { + path := "/" + webhook.Path + + clientConfig := admissionregistrationv1.WebhookClientConfig{ + CABundle: caBundle, + } + + switch mode { + case ModeURL: + url := fmt.Sprintf("https://%s%s", url, path) + clientConfig.URL = &url + case ModeURLWithServiceName: + url := fmt.Sprintf("https://gardener-extension-%s.%s:%d%s", providerName, namespace, servicePort, path) + clientConfig.URL = &url + case ModeService: + clientConfig.Service = &admissionregistrationv1.ServiceReference{ + Namespace: namespace, + Name: "gardener-extension-" + providerName, + Path: &path, + } + } + + return clientConfig +} diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/remote_addr.go b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/remote_addr.go new file mode 100644 index 000000000..556997c5a --- /dev/null +++ b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/remote_addr.go @@ -0,0 +1,45 @@ +// Copyright (c) 2021 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package webhook + +import ( + "context" + "net/http" + + "sigs.k8s.io/controller-runtime/pkg/runtime/inject" +) + +// remoteAddrContextKey is a context key. It will be filled by the remoteAddrInjectingHandler with the received +// request's RemoteAddr field value. +// The associated value will be of type string. +var remoteAddrContextKey = struct{}{} + +// remoteAddrInjectingHandler is a wrapper around a given http.Handler that injects the requests.RemoteAddr into the +// request's context and delegates to the underlying handler. +type remoteAddrInjectingHandler struct { + // Handler is the underlying handler. + http.Handler +} + +// InjectFunc injects into the underlying handler. +func (h remoteAddrInjectingHandler) InjectFunc(f inject.Func) error { + return f(h.Handler) +} + +// ServerHTTP implements http.Handler by delegating to the underlying handler but injecting request.RemoteAddr into +// the request's context. +func (h remoteAddrInjectingHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { + h.Handler.ServeHTTP(w, r.Clone(context.WithValue(r.Context(), remoteAddrContextKey, r.RemoteAddr))) +} diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/shoot/networkpolicy.go b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/shoot/networkpolicy.go new file mode 100644 index 000000000..94211811e --- /dev/null +++ b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/shoot/networkpolicy.go @@ -0,0 +1,82 @@ +// Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package shoot + +import ( + "context" + + corev1 "k8s.io/api/core/v1" + networkingv1 "k8s.io/api/networking/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/intstr" + "sigs.k8s.io/controller-runtime/pkg/client" + + v1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants" + "github.com/gardener/gardener/pkg/controllerutils" + kutil "github.com/gardener/gardener/pkg/utils/kubernetes" +) + +// GetNetworkPolicyMeta returns the network policy object with filled meta data. +func GetNetworkPolicyMeta(namespace, providerName string) *networkingv1.NetworkPolicy { + return &networkingv1.NetworkPolicy{ObjectMeta: kutil.ObjectMeta(namespace, "gardener-extension-"+providerName)} +} + +// EnsureNetworkPolicy ensures that the required network policy that allows the kube-apiserver running in the given namespace +// to talk to the extension webhook is installed. +func EnsureNetworkPolicy(ctx context.Context, c client.Client, namespace, providerName string, port int) error { + networkPolicy := GetNetworkPolicyMeta(namespace, providerName) + + policyPort := intstr.FromInt(port) + policyProtocol := corev1.ProtocolTCP + + _, err := controllerutils.GetAndCreateOrMergePatch(ctx, c, networkPolicy, func() error { + networkPolicy.Spec = networkingv1.NetworkPolicySpec{ + PolicyTypes: []networkingv1.PolicyType{networkingv1.PolicyTypeEgress}, + Egress: []networkingv1.NetworkPolicyEgressRule{ + { + Ports: []networkingv1.NetworkPolicyPort{ + { + Port: &policyPort, + Protocol: &policyProtocol, + }, + }, + To: []networkingv1.NetworkPolicyPeer{ + { + NamespaceSelector: &metav1.LabelSelector{ + MatchLabels: map[string]string{ + v1beta1constants.LabelControllerRegistrationName: providerName, + v1beta1constants.GardenRole: v1beta1constants.GardenRoleExtension, + }, + }, + PodSelector: &metav1.LabelSelector{ + MatchLabels: map[string]string{ + "app.kubernetes.io/name": "gardener-extension-" + providerName, + }, + }, + }, + }, + }, + }, + PodSelector: metav1.LabelSelector{ + MatchLabels: map[string]string{ + v1beta1constants.LabelApp: v1beta1constants.LabelKubernetes, + v1beta1constants.LabelRole: v1beta1constants.LabelAPIServer, + }, + }, + } + return nil + }) + return err +} diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/shoot/shoot.go b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/shoot/shoot.go new file mode 100644 index 000000000..a4579c561 --- /dev/null +++ b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/shoot/shoot.go @@ -0,0 +1,97 @@ +// Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package shoot + +import ( + "fmt" + + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "sigs.k8s.io/controller-runtime/pkg/log" + "sigs.k8s.io/controller-runtime/pkg/manager" + "sigs.k8s.io/controller-runtime/pkg/webhook/admission" + + extensionswebhook "github.com/gardener/gardener/extensions/pkg/webhook" + v1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants" +) + +const ( + // WebhookName is the name of the shoot webhook. + WebhookName = "shoot" + // KindSystem is used for webhooks which should only apply to the to the kube-system namespace. + KindSystem = "system" +) + +var logger = log.Log.WithName("shoot-webhook") + +// Args are arguments for creating a webhook targeting a shoot. +type Args struct { + // Types is a list of resource types. + Types []extensionswebhook.Type + // Mutator is a mutator to be used by the admission handler. It doesn't need the shoot client. + Mutator extensionswebhook.Mutator + // MutatorWithShootClient is a mutator to be used by the admission handler. It needs the shoot client. + MutatorWithShootClient extensionswebhook.MutatorWithShootClient +} + +// New creates a new webhook with the shoot as target cluster. +func New(mgr manager.Manager, args Args) (*extensionswebhook.Webhook, error) { + logger.Info("Creating webhook", "name", WebhookName) + + // Build namespace selector from the webhook kind and provider + namespaceSelector, err := buildSelector() + if err != nil { + return nil, err + } + + wh := &extensionswebhook.Webhook{ + Name: WebhookName, + Types: args.Types, + Path: WebhookName, + Target: extensionswebhook.TargetShoot, + Selector: namespaceSelector, + } + + switch { + case args.Mutator != nil: + handler, err := extensionswebhook.NewBuilder(mgr, logger).WithMutator(args.Mutator, args.Types...).Build() + if err != nil { + return nil, err + } + + wh.Webhook = &admission.Webhook{Handler: handler} + return wh, nil + + case args.MutatorWithShootClient != nil: + handler, err := extensionswebhook.NewHandlerWithShootClient(mgr, args.Types, args.MutatorWithShootClient, logger) + if err != nil { + return nil, err + } + + wh.Handler = handler + return wh, nil + } + + return nil, fmt.Errorf("neither mutator nor mutator with shoot client is set") +} + +// buildSelector creates and returns a LabelSelector for the given webhook kind and provider. +func buildSelector() (*metav1.LabelSelector, error) { + // Create and return LabelSelector + return &metav1.LabelSelector{ + MatchExpressions: []metav1.LabelSelectorRequirement{ + {Key: v1beta1constants.GardenerPurpose, Operator: metav1.LabelSelectorOpIn, Values: []string{metav1.NamespaceSystem}}, + }, + }, nil +} diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/utils.go b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/utils.go new file mode 100644 index 000000000..fc093a467 --- /dev/null +++ b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/utils.go @@ -0,0 +1,375 @@ +// Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package webhook + +import ( + "reflect" + "regexp" + "strings" + + "github.com/coreos/go-systemd/v22/unit" + extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" + "github.com/go-logr/logr" + corev1 "k8s.io/api/core/v1" +) + +// LogMutation provides a log message. +func LogMutation(logger logr.Logger, kind, namespace, name string) { + logger.Info("Mutating resource", "kind", kind, "namespace", namespace, "name", name) +} + +// AppendUniqueUnit appens a unit only if it does not exist. +func AppendUniqueUnit(units *[]extensionsv1alpha1.Unit, unit extensionsv1alpha1.Unit) { + for _, un := range *units { + if un.Name == unit.Name { + return + } + } + *units = append(*units, unit) +} + +// DeserializeCommandLine de-serializes the given string to a slice of command line elements by splitting it +// on white space and the "\" character. +func DeserializeCommandLine(s string) []string { + return regexp.MustCompile(`[\\\s]+`).Split(s, -1) +} + +// SerializeCommandLine serializes the given command line elements slice to a string by joining the first +// n+1 elements with a space " ", and all subsequent elements with the given separator. +func SerializeCommandLine(command []string, n int, sep string) string { + if len(command) <= n { + return strings.Join(command, " ") + } + if n == 0 { + return strings.Join(command, sep) + } + return strings.Join(command[0:n], " ") + " " + strings.Join(command[n:], sep) +} + +// ContainerWithName returns the container with the given name if it exists in the given slice, nil otherwise. +func ContainerWithName(containers []corev1.Container, name string) *corev1.Container { + if i := containerWithNameIndex(containers, name); i >= 0 { + return &containers[i] + } + return nil +} + +// PVCWithName returns the PersistentVolumeClaim with the given name if it exists in the given slice, nil otherwise. +func PVCWithName(pvcs []corev1.PersistentVolumeClaim, name string) *corev1.PersistentVolumeClaim { + if i := pvcWithNameIndex(pvcs, name); i >= 0 { + return &pvcs[i] + } + return nil +} + +// UnitWithName returns the unit with the given name if it exists in the given slice, nil otherwise. +func UnitWithName(units []extensionsv1alpha1.Unit, name string) *extensionsv1alpha1.Unit { + if i := unitWithNameIndex(units, name); i >= 0 { + return &units[i] + } + return nil +} + +// FileWithPath returns the file with the given path if it exists in the given slice, nil otherwise. +func FileWithPath(files []extensionsv1alpha1.File, path string) *extensionsv1alpha1.File { + if i := fileWithPathIndex(files, path); i >= 0 { + return &files[i] + } + return nil +} + +// UnitOptionWithSectionAndName returns the unit option with the given section and name if it exists in the given slice, nil otherwise. +func UnitOptionWithSectionAndName(opts []*unit.UnitOption, section, name string) *unit.UnitOption { + if i := unitOptionWithSectionAndNameIndex(opts, section, name); i >= 0 { + return opts[i] + } + return nil +} + +// EnsureStringWithPrefix ensures that a string having the given prefix exists in the given slice +// with a value equal to prefix + value. +func EnsureStringWithPrefix(items []string, prefix, value string) []string { + item := prefix + value + if i := StringWithPrefixIndex(items, prefix); i < 0 { + items = append(items, item) + } else if items[i] != item { + items = append(append(items[:i], item), items[i+1:]...) + } + return items +} + +// EnsureNoStringWithPrefix ensures that a string having the given prefix does not exist in the given slice. +func EnsureNoStringWithPrefix(items []string, prefix string) []string { + if i := StringWithPrefixIndex(items, prefix); i >= 0 { + items = append(items[:i], items[i+1:]...) + } + return items +} + +// EnsureStringWithPrefixContains ensures that a string having the given prefix exists in the given slice +// and contains the given value in a list separated by sep. +func EnsureStringWithPrefixContains(items []string, prefix, value, sep string) []string { + if i := StringWithPrefixIndex(items, prefix); i < 0 { + items = append(items, prefix+value) + } else { + valuesList := strings.TrimPrefix(items[i], prefix) + var values []string + if valuesList != "" { + values = strings.Split(valuesList, sep) + } + if j := StringIndex(values, value); j < 0 { + values = append(values, value) + items = append(append(items[:i], prefix+strings.Join(values, sep)), items[i+1:]...) + } + } + return items +} + +// EnsureNoStringWithPrefixContains ensures that either a string having the given prefix does not exist in the given slice, +// or it doesn't contain the given value in a list separated by sep. +func EnsureNoStringWithPrefixContains(items []string, prefix, value, sep string) []string { + if i := StringWithPrefixIndex(items, prefix); i >= 0 { + values := strings.Split(strings.TrimPrefix(items[i], prefix), sep) + if j := StringIndex(values, value); j >= 0 { + values = append(values[:j], values[j+1:]...) + items = append(append(items[:i], prefix+strings.Join(values, sep)), items[i+1:]...) + } + } + return items +} + +// EnsureEnvVarWithName ensures that a EnvVar with a name equal to the name of the given EnvVar exists +// in the given slice and is equal to the given EnvVar. +func EnsureEnvVarWithName(items []corev1.EnvVar, item corev1.EnvVar) []corev1.EnvVar { + if i := envVarWithNameIndex(items, item.Name); i < 0 { + items = append(items, item) + } else if !reflect.DeepEqual(items[i], item) { + items = append(append(items[:i], item), items[i+1:]...) + } + return items +} + +// EnsureNoEnvVarWithName ensures that a EnvVar with the given name does not exist in the given slice. +func EnsureNoEnvVarWithName(items []corev1.EnvVar, name string) []corev1.EnvVar { + if i := envVarWithNameIndex(items, name); i >= 0 { + items = append(items[:i], items[i+1:]...) + } + return items +} + +// EnsureVolumeMountWithName ensures that a VolumeMount with a name equal to the name of the given VolumeMount exists +// in the given slice and is equal to the given VolumeMount. +func EnsureVolumeMountWithName(items []corev1.VolumeMount, item corev1.VolumeMount) []corev1.VolumeMount { + if i := volumeMountWithNameIndex(items, item.Name); i < 0 { + items = append(items, item) + } else if !reflect.DeepEqual(items[i], item) { + items = append(append(items[:i], item), items[i+1:]...) + } + return items +} + +// EnsureNoVolumeMountWithName ensures that a VolumeMount with the given name does not exist in the given slice. +func EnsureNoVolumeMountWithName(items []corev1.VolumeMount, name string) []corev1.VolumeMount { + if i := volumeMountWithNameIndex(items, name); i >= 0 { + items = append(items[:i], items[i+1:]...) + } + return items +} + +// EnsureVolumeWithName ensures that a Volume with a name equal to the name of the given Volume exists +// in the given slice and is equal to the given Volume. +func EnsureVolumeWithName(items []corev1.Volume, item corev1.Volume) []corev1.Volume { + if i := volumeWithNameIndex(items, item.Name); i < 0 { + items = append(items, item) + } else if !reflect.DeepEqual(items[i], item) { + items = append(append(items[:i], item), items[i+1:]...) + } + return items +} + +// EnsureNoVolumeWithName ensures that a Volume with the given name does not exist in the given slice. +func EnsureNoVolumeWithName(items []corev1.Volume, name string) []corev1.Volume { + if i := volumeWithNameIndex(items, name); i >= 0 { + items = append(items[:i], items[i+1:]...) + } + return items +} + +// EnsureContainerWithName ensures that a Container with a name equal to the name of the given Container exists +// in the given slice and is equal to the given Container. +func EnsureContainerWithName(items []corev1.Container, item corev1.Container) []corev1.Container { + if i := containerWithNameIndex(items, item.Name); i < 0 { + items = append(items, item) + } else if !reflect.DeepEqual(items[i], item) { + items = append(append(items[:i], item), items[i+1:]...) + } + return items +} + +// EnsureNoContainerWithName ensures that a Container with the given name does not exist in the given slice. +func EnsureNoContainerWithName(items []corev1.Container, name string) []corev1.Container { + if i := containerWithNameIndex(items, name); i >= 0 { + items = append(items[:i], items[i+1:]...) + } + return items +} + +// EnsurePVCWithName ensures that a PVC with a name equal to the name of the given PVC exists +// in the given slice and is equal to the given PVC. +func EnsurePVCWithName(items []corev1.PersistentVolumeClaim, item corev1.PersistentVolumeClaim) []corev1.PersistentVolumeClaim { + if i := pvcWithNameIndex(items, item.Name); i < 0 { + items = append(items, item) + } else if !reflect.DeepEqual(items[i], item) { + items = append(append(items[:i], item), items[i+1:]...) + } + return items +} + +// EnsureNoPVCWithName ensures that a PVC with the given name does not exist in the given slice. +func EnsureNoPVCWithName(items []corev1.PersistentVolumeClaim, name string) []corev1.PersistentVolumeClaim { + if i := pvcWithNameIndex(items, name); i >= 0 { + items = append(items[:i], items[i+1:]...) + } + return items +} + +// EnsureUnitOption ensures the given unit option exist in the given slice. +func EnsureUnitOption(items []*unit.UnitOption, item *unit.UnitOption) []*unit.UnitOption { + if i := unitOptionIndex(items, item); i < 0 { + items = append(items, item) + } + return items +} + +// EnsureFileWithPath ensures that a file with a path equal to the path of the given file exists in the given slice +// and is equal to the given file. +func EnsureFileWithPath(items []extensionsv1alpha1.File, item extensionsv1alpha1.File) []extensionsv1alpha1.File { + if i := fileWithPathIndex(items, item.Path); i < 0 { + items = append(items, item) + } else if !reflect.DeepEqual(items[i], item) { + items = append(append(items[:i], item), items[i+1:]...) + } + return items +} + +// EnsureAnnotationOrLabel ensures the given key/value exists in the annotationOrLabelMap map. +func EnsureAnnotationOrLabel(annotationOrLabelMap map[string]string, key, value string) map[string]string { + if annotationOrLabelMap == nil { + annotationOrLabelMap = make(map[string]string, 1) + } + annotationOrLabelMap[key] = value + return annotationOrLabelMap +} + +// StringIndex returns the index of the first occurrence of the given string in the given slice, or -1 if not found. +func StringIndex(items []string, value string) int { + for i, item := range items { + if item == value { + return i + } + } + return -1 +} + +// StringWithPrefixIndex returns the index of the first occurrence of a string having the given prefix in the given slice, or -1 if not found. +func StringWithPrefixIndex(items []string, prefix string) int { + for i, item := range items { + if strings.HasPrefix(item, prefix) { + return i + } + } + return -1 +} + +func containerWithNameIndex(items []corev1.Container, name string) int { + for i, item := range items { + if item.Name == name { + return i + } + } + return -1 +} + +func unitWithNameIndex(items []extensionsv1alpha1.Unit, name string) int { + for i, item := range items { + if item.Name == name { + return i + } + } + return -1 +} + +func fileWithPathIndex(items []extensionsv1alpha1.File, path string) int { + for i, item := range items { + if item.Path == path { + return i + } + } + return -1 +} + +func unitOptionWithSectionAndNameIndex(items []*unit.UnitOption, section, name string) int { + for i, item := range items { + if item.Section == section && item.Name == name { + return i + } + } + return -1 +} + +func unitOptionIndex(items []*unit.UnitOption, item *unit.UnitOption) int { + for i := range items { + if reflect.DeepEqual(items[i], item) { + return i + } + } + return -1 +} + +func envVarWithNameIndex(items []corev1.EnvVar, name string) int { + for i, item := range items { + if item.Name == name { + return i + } + } + return -1 +} + +func volumeMountWithNameIndex(items []corev1.VolumeMount, name string) int { + for i, item := range items { + if item.Name == name { + return i + } + } + return -1 +} + +func volumeWithNameIndex(items []corev1.Volume, name string) int { + for i, item := range items { + if item.Name == name { + return i + } + } + return -1 +} + +func pvcWithNameIndex(items []corev1.PersistentVolumeClaim, name string) int { + for i, item := range items { + if item.Name == name { + return i + } + } + return -1 +} diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/validator.go b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/validator.go new file mode 100644 index 000000000..403c54382 --- /dev/null +++ b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/validator.go @@ -0,0 +1,49 @@ +// Copyright (c) 2020 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package webhook + +import ( + "context" + "fmt" + + "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/runtime/inject" +) + +// Validator validates objects. +type Validator interface { + Validate(ctx context.Context, new, old client.Object) error +} + +type validationWrapper struct { + Validator +} + +// Mutate implements the `Mutator` interface and calls the `Validate` function of the underlying validator. +func (d *validationWrapper) Mutate(ctx context.Context, new, old client.Object) error { + return d.Validate(ctx, new, old) +} + +// InjectFunc calls the inject.Func on the handler mutators. +func (d *validationWrapper) InjectFunc(f inject.Func) error { + if err := f(d.Validator); err != nil { + return fmt.Errorf("could not inject into the validator: %w", err) + } + return nil +} + +func hybridValidator(val Validator) Mutator { + return &validationWrapper{val} +} diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/webhook.go b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/webhook.go new file mode 100644 index 000000000..06d2151c0 --- /dev/null +++ b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/webhook.go @@ -0,0 +1,102 @@ +// Copyright (c) 2020 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package webhook + +import ( + "net/http" + + admissionregistrationv1 "k8s.io/api/admissionregistration/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/log" + "sigs.k8s.io/controller-runtime/pkg/manager" + "sigs.k8s.io/controller-runtime/pkg/predicate" + "sigs.k8s.io/controller-runtime/pkg/webhook/admission" +) + +const ( + // TargetSeed defines that the webhook is to be installed in the seed. + TargetSeed = "seed" + // TargetShoot defines that the webhook is to be installed in the shoot. + TargetShoot = "shoot" + + // ValidatorName is a common name for a validation webhook. + ValidatorName = "validator" + // ValidatorPath is a common path for a validation webhook. + ValidatorPath = "/webhooks/validate" +) + +// Webhook is the specification of a webhook. +type Webhook struct { + Name string + Kind string + Provider string + Path string + Target string + Types []Type + Webhook *admission.Webhook + Handler http.Handler + Selector *metav1.LabelSelector + ObjectSelector *metav1.LabelSelector + FailurePolicy *admissionregistrationv1.FailurePolicyType + TimeoutSeconds *int32 +} + +// Type contains information about the Kubernetes object types and subresources the webhook acts upon. +type Type struct { + Obj client.Object + Subresource *string +} + +// Args contains Webhook creation arguments. +type Args struct { + Provider string + Name string + Path string + Predicates []predicate.Predicate + Validators map[Validator][]Type + Mutators map[Mutator][]Type +} + +// New creates a new Webhook with the given args. +func New(mgr manager.Manager, args Args) (*Webhook, error) { + logger := log.Log.WithName(args.Name).WithValues("provider", args.Provider) + + // Create handler + builder := NewBuilder(mgr, logger) + + for val, objs := range args.Validators { + builder.WithValidator(val, objs...) + } + + for mut, objs := range args.Mutators { + builder.WithMutator(mut, objs...) + } + + builder.WithPredicates(args.Predicates...) + + handler, err := builder.Build() + if err != nil { + return nil, err + } + + // Create webhook + logger.Info("Creating webhook") + + return &Webhook{ + Path: args.Path, + Webhook: &admission.Webhook{Handler: handler}, + }, nil +} diff --git a/vendor/modules.txt b/vendor/modules.txt index ae7065cac..b39f50d64 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -20,6 +20,8 @@ github.com/bronze1man/yaml2json github.com/bronze1man/yaml2json/y2jLib # github.com/cespare/xxhash/v2 v2.1.1 github.com/cespare/xxhash/v2 +# github.com/coreos/go-systemd/v22 v22.3.2 +github.com/coreos/go-systemd/v22/unit # github.com/cyphar/filepath-securejoin v0.2.2 github.com/cyphar/filepath-securejoin # github.com/davecgh/go-spew v1.1.1 @@ -59,6 +61,9 @@ github.com/gardener/gardener/extensions/pkg/controller/healthcheck/general github.com/gardener/gardener/extensions/pkg/controller/network github.com/gardener/gardener/extensions/pkg/predicate github.com/gardener/gardener/extensions/pkg/util +github.com/gardener/gardener/extensions/pkg/webhook +github.com/gardener/gardener/extensions/pkg/webhook/cmd +github.com/gardener/gardener/extensions/pkg/webhook/shoot github.com/gardener/gardener/extensions/test/testmachinery/healthcheck github.com/gardener/gardener/extensions/test/testmachinery/operation github.com/gardener/gardener/hack @@ -310,6 +315,7 @@ github.com/pelletier/go-toml github.com/pierrec/lz4 github.com/pierrec/lz4/internal/xxh32 # github.com/pkg/errors v0.9.1 +## explicit github.com/pkg/errors # github.com/prometheus/client_golang v1.11.0 github.com/prometheus/client_golang/prometheus From 32fc8faeaf25c9c3d553bbf7b40c19094fffc07a Mon Sep 17 00:00:00 2001 From: Sebastian Stauch Date: Tue, 17 May 2022 15:06:48 +0200 Subject: [PATCH 2/8] support node local dns feature --- pkg/charts/utils.go | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/pkg/charts/utils.go b/pkg/charts/utils.go index 15c4aa90e..12c1bf226 100644 --- a/pkg/charts/utils.go +++ b/pkg/charts/utils.go @@ -142,6 +142,12 @@ func generateChartValues(config *ciliumv1alpha1.NetworkConfig, network *extensio globalConfig.NodePort.Enabled = true } + // If node local dns feature is enabled, enable local redirect policy + if cluster.Shoot.Annotations[v1beta1constants.AnnotationNodeLocalDNS] == "true" { + globalConfig.NodeLocalDNS.Enabled = true + globalConfig.LocalRedirectPolicy.Enabled = true + } + if config == nil { return requirementsConfig, globalConfig, nil } @@ -183,11 +189,6 @@ func generateChartValues(config *ciliumv1alpha1.NetworkConfig, network *extensio if config.Debug != nil { globalConfig.Debug.Enabled = *config.Debug } - // If node local dns feature is enabled, enable local redirect policy - if cluster.Shoot.Annotations[v1beta1constants.AnnotationNodeLocalDNS] == "true" { - globalConfig.NodeLocalDNS.Enabled = true - globalConfig.LocalRedirectPolicy.Enabled = true - } return requirementsConfig, globalConfig, nil } From e10f7b5592cade23e356816ff9fd80bbe69b7030 Mon Sep 17 00:00:00 2001 From: Sebastian Stauch Date: Thu, 2 Jun 2022 09:03:48 +0200 Subject: [PATCH 3/8] add clustername to mutating webhook log output --- pkg/webhook/shoot/mutator.go | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/pkg/webhook/shoot/mutator.go b/pkg/webhook/shoot/mutator.go index 28501f3e1..200551780 100644 --- a/pkg/webhook/shoot/mutator.go +++ b/pkg/webhook/shoot/mutator.go @@ -56,16 +56,21 @@ func (m *mutator) Mutate(ctx context.Context, new, _ client.Object) error { case *corev1.ConfigMap: switch regexNodeLocalDNS.MatchString(x.Name) { case true: - extensionswebhook.LogMutation(logger, x.Kind, x.Namespace, x.Name) + logMutation(logger, x.ClusterName, x.Kind, x.Namespace, x.Name) return m.mutateNodeLocalDNSConfigMap(ctx, x) } case *appsv1.DaemonSet: switch x.Name { case "node-local-dns": - extensionswebhook.LogMutation(logger, x.Kind, x.Namespace, x.Name) + logMutation(logger, x.ClusterName, x.Kind, x.Namespace, x.Name) return m.mutateNodeLocalDNSDaemonSet(ctx, x) } } return nil } + +// LogMutation provides a log message. +func logMutation(logger logr.Logger, shoot, kind, namespace, name string) { + logger.Info("Mutating resource", "shoot", shoot, "kind", kind, "namespace", namespace, "name", name) +} From 6dc49148f304f62bcb6255f93af94735316fc124 Mon Sep 17 00:00:00 2001 From: Rafael Franzke Date: Wed, 1 Jun 2022 15:24:32 +0200 Subject: [PATCH 4/8] Revendor `gardener/gardener@v1.48.0` --- go.mod | 135 +- go.sum | 342 +- .../ahmetb/gen-crd-api-reference-docs/go.mod | 12 - .../ahmetb/gen-crd-api-reference-docs/go.sum | 23 - .../github.com/bronze1man/yaml2json/LICENSE | 32 +- vendor/github.com/cespare/xxhash/v2/go.mod | 3 - vendor/github.com/cespare/xxhash/v2/go.sum | 0 vendor/github.com/dsnet/compress/go.mod | 10 - vendor/github.com/dsnet/compress/go.sum | 8 - vendor/github.com/fatih/color/README.md | 2 +- vendor/github.com/fatih/color/go.mod | 8 - vendor/github.com/fatih/color/go.sum | 7 - vendor/github.com/fsnotify/fsnotify/go.mod | 7 - vendor/github.com/fsnotify/fsnotify/go.sum | 2 - .../pkg/controller/common/checkerwatchdog.go | 2 +- .../common/checkerwatchdogfactory.go | 2 +- .../pkg/controller/common/watchdogmanager.go | 6 +- .../healthcheck/general/managed_resource.go | 2 +- ...ck_actuator.go => healthcheck_actuator.go} | 0 .../extensions/pkg/controller/status.go | 2 +- .../extensions/pkg/predicate/default.go | 5 + .../extensions/pkg/webhook/certificates.go | 225 -- .../pkg/webhook/certificates/add.go | 84 + .../pkg/webhook/certificates/certificates.go | 120 + .../pkg/webhook/certificates/reconciler.go | 262 ++ .../pkg/webhook/certificates/reloader.go | 163 + .../extensions/pkg/webhook/cmd/options.go | 169 +- .../extensions/pkg/webhook/registration.go | 212 +- .../pkg/webhook/shoot/networkpolicy.go | 17 +- .../extensions/pkg/webhook/shoot/webhook.go | 117 + .../extensions/pkg/webhook/webhook.go | 6 - .../gardener/hack/.ci/component_descriptor | 35 +- .../gardener/hack/.ci/set_dependency_version | 6 +- .../gardener/gardener/hack/test-e2e-local.sh | 8 + .../gardener/hack/test-integration.sh | 9 +- .../github.com/gardener/gardener/hack/test.sh | 10 +- .../gardener/gardener/hack/tools.mk | 4 +- .../gardener/pkg/apis/core/types_common.go | 4 + .../gardener/pkg/apis/core/types_project.go | 2 + .../gardener/pkg/apis/core/types_seed.go | 3 + .../gardener/pkg/apis/core/types_shoot.go | 40 + .../pkg/apis/core/v1alpha1/generated.pb.go | 2856 ++++++++++----- .../pkg/apis/core/v1alpha1/generated.proto | 60 + .../pkg/apis/core/v1alpha1/types_common.go | 4 + .../pkg/apis/core/v1alpha1/types_project.go | 2 + .../pkg/apis/core/v1alpha1/types_seed.go | 1 + .../pkg/apis/core/v1alpha1/types_shoot.go | 50 + .../core/v1alpha1/zz_generated.conversion.go | 108 + .../core/v1alpha1/zz_generated.deepcopy.go | 91 + .../core/v1beta1/constants/types_constants.go | 37 + .../pkg/apis/core/v1beta1/generated.pb.go | 3118 +++++++++++------ .../pkg/apis/core/v1beta1/generated.proto | 62 +- .../pkg/apis/core/v1beta1/helper/errors.go | 53 +- .../pkg/apis/core/v1beta1/helper/helper.go | 114 + .../pkg/apis/core/v1beta1/types_common.go | 4 + .../pkg/apis/core/v1beta1/types_project.go | 2 + .../pkg/apis/core/v1beta1/types_seed.go | 3 + .../pkg/apis/core/v1beta1/types_shoot.go | 52 +- .../core/v1beta1/zz_generated.conversion.go | 108 + .../core/v1beta1/zz_generated.deepcopy.go | 91 + .../pkg/apis/core/zz_generated.deepcopy.go | 91 + .../apis/extensions/v1alpha1/types_worker.go | 3 - .../pkg/apis/resources/v1alpha1/types.go | 16 +- .../gardener/pkg/client/kubernetes/client.go | 1 + .../pkg/extensions/customresources.go | 3 +- .../pkg/gardenlet/apis/config/types.go | 20 + .../apis/config/v1alpha1/defaults.go | 43 + .../gardenlet/apis/config/v1alpha1/types.go | 25 + .../v1alpha1/zz_generated.conversion.go | 66 + .../config/v1alpha1/zz_generated.deepcopy.go | 57 + .../config/v1alpha1/zz_generated.defaults.go | 6 + .../apis/config/zz_generated.deepcopy.go | 57 + .../utils/flow/progress_reporter_delaying.go | 2 +- .../gardener/pkg/utils/gardener/secrets.go | 2 +- .../gardener/pkg/utils/infodata/infodata.go | 89 - .../gardener/pkg/utils/infodata/types.go | 50 - .../pkg/utils/kubernetes/health/daemonset.go | 16 + .../pkg/utils/kubernetes/health/deployment.go | 63 + .../pkg/utils/kubernetes/health/etcd.go | 5 +- .../pkg/utils/kubernetes/health/extensions.go | 2 +- .../pkg/utils/kubernetes/health/seed.go | 7 +- .../utils/kubernetes/health/statefulset.go | 20 + .../utils/kubernetes/unstructured/object.go | 2 +- .../managedresources/managedresources.go | 4 +- .../gardener/pkg/utils/miscellaneous.go | 5 - .../gardener/pkg/utils/secrets/alias.go | 2 +- .../gardener/pkg/utils/secrets/basic_auth.go | 51 - .../pkg/utils/secrets/basic_auth_infodata.go | 68 - .../{certificate_bundle.go => bundle.go} | 70 +- .../{certificates.go => certificate.go} | 209 +- .../utils/secrets/certificates_infodata.go | 70 - .../pkg/utils/secrets/control_plane.go | 85 +- .../pkg/utils/secrets/etcd_encryption_key.go | 18 - .../gardener/pkg/utils/secrets/generate.go | 106 - .../gardener/pkg/utils/secrets/kubeconfig.go | 18 - .../pkg/utils/secrets/manager/generate.go | 178 +- .../pkg/utils/secrets/manager/manager.go | 47 +- .../pkg/utils/secrets/private_key_infodata.go | 68 - .../pkg/utils/secrets/rsa_private_key.go | 43 +- .../pkg/utils/secrets/static_token.go | 67 - .../utils/secrets/static_token_infodata.go | 82 - .../gardener/pkg/utils/secrets/types.go | 8 - .../gardener/pkg/utils/secrets/vpn_tlsauth.go | 32 - .../gardener/pkg/utils/version/version.go | 4 + .../gardener/test/framework/gardener_utils.go | 14 +- .../test/framework/gardenerframework.go | 6 +- .../gardener/test/framework/k8s_utils.go | 7 +- .../test/framework/shootcreationframework.go | 8 +- .../gardener/test/framework/shootframework.go | 6 +- vendor/github.com/go-logr/logr/README.md | 4 + vendor/github.com/go-logr/logr/go.mod | 3 - vendor/github.com/go-logr/logr/logr.go | 20 +- vendor/github.com/go-logr/zapr/go.mod | 10 - vendor/github.com/go-logr/zapr/go.sum | 51 - .../github.com/go-openapi/jsonpointer/go.mod | 9 - .../github.com/go-openapi/jsonpointer/go.sum | 24 - .../go-openapi/jsonreference/go.mod | 12 - .../go-openapi/jsonreference/go.sum | 38 - vendor/github.com/go-openapi/swag/go.mod | 18 - vendor/github.com/go-openapi/swag/go.sum | 29 - vendor/github.com/go-task/slim-sprig/go.mod | 8 - vendor/github.com/go-task/slim-sprig/go.sum | 22 - vendor/github.com/gobuffalo/flect/go.mod | 5 - vendor/github.com/gobuffalo/flect/go.sum | 11 - vendor/github.com/golang/snappy/go.mod | 1 - .../github.com/google/go-cmp/cmp/compare.go | 17 - .../google/go-cmp/cmp/export_panic.go | 1 + .../google/go-cmp/cmp/export_unsafe.go | 1 + .../go-cmp/cmp/internal/diff/debug_disable.go | 1 + .../go-cmp/cmp/internal/diff/debug_enable.go | 1 + .../cmp/internal/flags/toolchain_legacy.go | 10 - .../cmp/internal/flags/toolchain_recent.go | 10 - .../google/go-cmp/cmp/internal/value/name.go | 7 + .../cmp/internal/value/pointer_purego.go | 1 + .../cmp/internal/value/pointer_unsafe.go | 1 + vendor/github.com/google/go-cmp/cmp/path.go | 2 +- .../google/go-cmp/cmp/report_reflect.go | 3 +- .../google/go-cmp/cmp/report_slices.go | 6 +- vendor/github.com/google/gofuzz/go.mod | 3 - vendor/github.com/google/uuid/go.mod | 1 - vendor/github.com/hashicorp/errwrap/go.mod | 1 - .../hashicorp/go-multierror/.travis.yml | 12 - .../hashicorp/go-multierror/README.md | 29 +- .../hashicorp/go-multierror/append.go | 2 + .../github.com/hashicorp/go-multierror/go.mod | 5 - .../github.com/hashicorp/go-multierror/go.sum | 2 - .../hashicorp/go-multierror/multierror.go | 15 +- vendor/github.com/hashicorp/hcl/go.mod | 3 - vendor/github.com/hashicorp/hcl/go.sum | 2 - vendor/github.com/huandu/xstrings/go.mod | 3 - vendor/github.com/imdario/mergo/go.mod | 5 - vendor/github.com/imdario/mergo/go.sum | 4 - vendor/github.com/josharian/intern/go.mod | 3 - vendor/github.com/json-iterator/go/go.mod | 11 - vendor/github.com/json-iterator/go/go.sum | 14 - .../github.com/magiconair/properties/go.mod | 3 - .../github.com/magiconair/properties/lex.go | 12 - .../magiconair/properties/parser.go | 9 - .../magiconair/properties/properties.go | 1 - .../github.com/mattn/go-colorable/.travis.yml | 15 - .../github.com/mattn/go-colorable/README.md | 2 +- .../mattn/go-colorable/colorable_appengine.go | 1 + .../mattn/go-colorable/colorable_others.go | 4 +- .../mattn/go-colorable/colorable_windows.go | 14 +- vendor/github.com/mattn/go-colorable/go.mod | 8 - vendor/github.com/mattn/go-colorable/go.sum | 5 - .../mattn/go-colorable/noncolorable.go | 12 +- vendor/github.com/mattn/go-isatty/.travis.yml | 14 - vendor/github.com/mattn/go-isatty/go.mod | 5 - vendor/github.com/mattn/go-isatty/go.sum | 2 - .../github.com/mattn/go-isatty/isatty_bsd.go | 1 + .../mattn/go-isatty/isatty_others.go | 3 +- .../mattn/go-isatty/isatty_plan9.go | 1 + .../mattn/go-isatty/isatty_solaris.go | 9 +- .../mattn/go-isatty/isatty_tcgets.go | 3 +- .../mattn/go-isatty/isatty_windows.go | 6 +- .../github.com/mattn/go-isatty/renovate.json | 8 - .../github.com/mitchellh/copystructure/go.mod | 5 - .../github.com/mitchellh/copystructure/go.sum | 2 - .../mitchellh/hashstructure/v2/go.mod | 3 - .../mitchellh/mapstructure/CHANGELOG.md | 14 +- .../mitchellh/mapstructure/decode_hooks.go | 3 +- .../github.com/mitchellh/mapstructure/go.mod | 3 - .../mitchellh/mapstructure/mapstructure.go | 21 +- .../github.com/mitchellh/reflectwalk/go.mod | 1 - vendor/github.com/moby/spdystream/go.mod | 5 - vendor/github.com/moby/spdystream/go.sum | 2 - vendor/github.com/modern-go/reflect2/go.mod | 3 - vendor/github.com/nwaples/rardecode/go.mod | 1 - vendor/github.com/onsi/ginkgo/v2/CHANGELOG.md | 10 + vendor/github.com/onsi/ginkgo/v2/core_dsl.go | 18 +- .../onsi/ginkgo/v2/ginkgo/internal/run.go | 10 +- vendor/github.com/onsi/ginkgo/v2/go.mod | 11 - vendor/github.com/onsi/ginkgo/v2/go.sum | 107 - .../onsi/ginkgo/v2/internal/suite.go | 9 - .../ginkgo/v2/types/deprecation_support.go | 9 + .../onsi/ginkgo/v2/types/version.go | 2 +- vendor/github.com/onsi/gomega/CHANGELOG.md | 21 + vendor/github.com/onsi/gomega/RELEASING.md | 11 +- vendor/github.com/onsi/gomega/go.mod | 11 - vendor/github.com/onsi/gomega/go.sum | 100 - vendor/github.com/onsi/gomega/gomega_dsl.go | 40 +- vendor/github.com/onsi/gomega/matchers.go | 36 +- .../matchers/contain_element_matcher.go | 120 +- .../onsi/gomega/matchers/have_each_matcher.go | 65 + .../onsi/gomega/matchers/have_field.go | 7 + vendor/github.com/pelletier/go-toml/go.mod | 3 - .../pelletier/go-toml/v2/.dockerignore | 2 + .../pelletier/go-toml/v2/.gitattributes | 4 + .../pelletier/go-toml/v2/.gitignore | 6 + .../pelletier/go-toml/v2/.golangci.toml | 84 + .../pelletier/go-toml/v2/.goreleaser.yaml | 111 + .../pelletier/go-toml/v2/CONTRIBUTING.md | 196 ++ .../pelletier/go-toml/v2/Dockerfile | 5 + .../go-toml/v2}/LICENSE | 4 +- .../github.com/pelletier/go-toml/v2/README.md | 556 +++ .../pelletier/go-toml/v2/SECURITY.md | 19 + vendor/github.com/pelletier/go-toml/v2/ci.sh | 279 ++ .../github.com/pelletier/go-toml/v2/decode.go | 544 +++ vendor/github.com/pelletier/go-toml/v2/doc.go | 2 + .../github.com/pelletier/go-toml/v2/errors.go | 269 ++ .../pelletier/go-toml/v2/internal/ast/ast.go | 144 + .../go-toml/v2/internal/ast/builder.go | 51 + .../pelletier/go-toml/v2/internal/ast/kind.go | 69 + .../go-toml/v2/internal/danger/danger.go | 65 + .../go-toml/v2/internal/danger/typeid.go | 23 + .../go-toml/v2/internal/tracker/key.go | 50 + .../go-toml/v2/internal/tracker/seen.go | 356 ++ .../go-toml/v2/internal/tracker/tracker.go | 1 + .../pelletier/go-toml/v2/localtime.go | 120 + .../pelletier/go-toml/v2/marshaler.go | 950 +++++ .../github.com/pelletier/go-toml/v2/parser.go | 1086 ++++++ .../pelletier/go-toml/v2/scanner.go | 269 ++ .../github.com/pelletier/go-toml/v2/strict.go | 107 + .../github.com/pelletier/go-toml/v2/toml.abnf | 243 ++ .../github.com/pelletier/go-toml/v2/types.go | 14 + .../pelletier/go-toml/v2/unmarshaler.go | 1189 +++++++ .../github.com/pelletier/go-toml/v2/utf8.go | 240 ++ vendor/github.com/prometheus/procfs/go.mod | 9 - vendor/github.com/prometheus/procfs/go.sum | 8 - .../russross/blackfriday/v2/README.md | 90 +- .../russross/blackfriday/v2/block.go | 30 +- .../github.com/russross/blackfriday/v2/doc.go | 28 + .../russross/blackfriday/v2/entities.go | 2236 ++++++++++++ .../github.com/russross/blackfriday/v2/esc.go | 42 +- .../github.com/russross/blackfriday/v2/go.mod | 1 - .../russross/blackfriday/v2/html.go | 9 +- .../russross/blackfriday/v2/inline.go | 2 +- .../russross/blackfriday/v2/node.go | 12 +- .../sanitized_anchor_name/.travis.yml | 16 - .../shurcooL/sanitized_anchor_name/README.md | 36 - .../shurcooL/sanitized_anchor_name/go.mod | 1 - .../shurcooL/sanitized_anchor_name/main.go | 29 - vendor/github.com/sirupsen/logrus/go.mod | 10 - vendor/github.com/sirupsen/logrus/go.sum | 8 - vendor/github.com/spf13/afero/README.md | 16 +- .../github.com/spf13/afero/cacheOnReadFs.go | 6 +- vendor/github.com/spf13/afero/go.mod | 9 - vendor/github.com/spf13/afero/go.sum | 29 - vendor/github.com/spf13/afero/mem/file.go | 2 +- vendor/github.com/spf13/afero/memmap.go | 2 +- vendor/github.com/spf13/afero/unionFile.go | 28 +- vendor/github.com/spf13/cast/.travis.yml | 16 - vendor/github.com/spf13/cast/README.md | 2 +- vendor/github.com/spf13/cast/cast.go | 5 + vendor/github.com/spf13/cast/caste.go | 148 +- vendor/github.com/spf13/cast/go.mod | 7 - vendor/github.com/spf13/cast/go.sum | 6 - .../spf13/cast/timeformattype_string.go | 27 + vendor/github.com/spf13/cobra/MAINTAINERS | 13 + vendor/github.com/spf13/cobra/Makefile | 11 +- vendor/github.com/spf13/cobra/README.md | 54 +- vendor/github.com/spf13/cobra/args.go | 12 + .../spf13/cobra/bash_completions.go | 48 +- .../spf13/cobra/bash_completionsV2.go | 31 +- .../github.com/spf13/cobra/command_notwin.go | 1 + vendor/github.com/spf13/cobra/command_win.go | 1 + vendor/github.com/spf13/cobra/completions.go | 210 +- vendor/github.com/spf13/cobra/go.mod | 11 - vendor/github.com/spf13/cobra/go.sum | 592 ---- .../spf13/cobra/powershell_completions.go | 6 +- .../spf13/cobra/projects_using_cobra.md | 13 + .../spf13/cobra/shell_completions.md | 26 +- vendor/github.com/spf13/cobra/user_guide.md | 9 +- .../github.com/spf13/cobra/zsh_completions.go | 4 +- .../github.com/spf13/jwalterweatherman/go.mod | 7 - vendor/github.com/spf13/pflag/go.mod | 3 - vendor/github.com/spf13/pflag/go.sum | 0 vendor/github.com/spf13/viper/.golangci.yml | 7 +- vendor/github.com/spf13/viper/Makefile | 4 +- vendor/github.com/spf13/viper/README.md | 93 +- .../github.com/spf13/viper/TROUBLESHOOTING.md | 9 + .../spf13/viper/experimental_logger.go | 11 + vendor/github.com/spf13/viper/fs.go | 65 + vendor/github.com/spf13/viper/go.mod | 21 - vendor/github.com/spf13/viper/go.sum | 632 ---- .../spf13/viper/internal/encoding/decoder.go | 61 + .../viper/internal/encoding/dotenv/codec.go | 61 + .../internal/encoding/dotenv/map_utils.go | 41 + .../spf13/viper/internal/encoding/encoder.go | 60 + .../spf13/viper/internal/encoding/error.go | 7 + .../viper/internal/encoding/hcl/codec.go | 40 + .../viper/internal/encoding/ini/codec.go | 99 + .../viper/internal/encoding/ini/map_utils.go | 74 + .../internal/encoding/javaproperties/codec.go | 86 + .../encoding/javaproperties/map_utils.go | 74 + .../viper/internal/encoding/json/codec.go | 17 + .../viper/internal/encoding/toml/codec.go | 39 + .../viper/internal/encoding/toml/codec2.go | 19 + .../viper/internal/encoding/yaml/codec.go | 14 + .../viper/internal/encoding/yaml/yaml2.go | 14 + .../viper/internal/encoding/yaml/yaml3.go | 14 + vendor/github.com/spf13/viper/logger.go | 77 + vendor/github.com/spf13/viper/util.go | 36 +- vendor/github.com/spf13/viper/viper.go | 392 +-- vendor/github.com/spf13/viper/viper_go1_15.go | 57 + vendor/github.com/spf13/viper/viper_go1_16.go | 32 + vendor/github.com/spf13/viper/watch.go | 1 + vendor/github.com/ulikunitz/xz/go.mod | 3 - vendor/go.uber.org/atomic/go.mod | 8 - vendor/go.uber.org/atomic/go.sum | 9 - vendor/go.uber.org/multierr/go.mod | 8 - vendor/go.uber.org/multierr/go.sum | 11 - vendor/go.uber.org/zap/.readme.tmpl | 12 +- vendor/go.uber.org/zap/CHANGELOG.md | 50 +- vendor/go.uber.org/zap/README.md | 44 +- vendor/go.uber.org/zap/global.go | 1 + vendor/go.uber.org/zap/global_go112.go | 26 - vendor/go.uber.org/zap/go.mod | 14 - vendor/go.uber.org/zap/go.sum | 63 - vendor/go.uber.org/zap/level.go | 17 + vendor/go.uber.org/zap/logger.go | 69 +- vendor/go.uber.org/zap/stacktrace.go | 175 +- vendor/go.uber.org/zap/zapcore/clock.go | 4 +- .../zap/zapcore/console_encoder.go | 6 +- vendor/go.uber.org/zap/zapcore/encoder.go | 21 +- .../go.uber.org/zap/zapcore/json_encoder.go | 92 +- vendor/go.uber.org/zap/zapcore/level.go | 12 + .../reflected_encoder.go} | 25 +- vendor/go.uber.org/zap/zapcore/sampler.go | 15 +- .../x/crypto/chacha20/chacha_s390x.go | 1 + .../curve25519/internal/field/fe_amd64.go | 3 + vendor/golang.org/x/crypto/ed25519/ed25519.go | 188 +- .../x/crypto/ed25519/ed25519_go113.go | 74 - .../ed25519/internal/edwards25519/const.go | 1422 -------- .../internal/edwards25519/edwards25519.go | 1793 ---------- .../{ => internal}/poly1305/bits_compat.go | 0 .../{ => internal}/poly1305/bits_go1.13.go | 0 .../{ => internal}/poly1305/mac_noasm.go | 0 .../{ => internal}/poly1305/poly1305.go | 2 +- .../{ => internal}/poly1305/sum_amd64.go | 0 .../{ => internal}/poly1305/sum_amd64.s | 0 .../{ => internal}/poly1305/sum_generic.go | 5 +- .../{ => internal}/poly1305/sum_ppc64le.go | 0 .../{ => internal}/poly1305/sum_ppc64le.s | 0 .../{ => internal}/poly1305/sum_s390x.go | 1 + .../{ => internal}/poly1305/sum_s390x.s | 2 +- .../x/crypto/openpgp/armor/armor.go | 12 +- .../x/crypto/openpgp/armor/encode.go | 3 +- .../x/crypto/openpgp/elgamal/elgamal.go | 4 +- vendor/golang.org/x/crypto/pbkdf2/pbkdf2.go | 2 +- vendor/golang.org/x/crypto/scrypt/scrypt.go | 2 +- vendor/golang.org/x/crypto/ssh/certs.go | 87 +- vendor/golang.org/x/crypto/ssh/cipher.go | 12 +- vendor/golang.org/x/crypto/ssh/client.go | 18 +- vendor/golang.org/x/crypto/ssh/client_auth.go | 132 +- vendor/golang.org/x/crypto/ssh/common.go | 76 +- vendor/golang.org/x/crypto/ssh/doc.go | 5 +- vendor/golang.org/x/crypto/ssh/handshake.go | 83 +- vendor/golang.org/x/crypto/ssh/kex.go | 186 +- vendor/golang.org/x/crypto/ssh/keys.go | 147 +- vendor/golang.org/x/crypto/ssh/messages.go | 21 +- vendor/golang.org/x/crypto/ssh/server.go | 46 +- vendor/golang.org/x/crypto/ssh/session.go | 1 + vendor/golang.org/x/crypto/ssh/transport.go | 10 +- vendor/golang.org/x/mod/modfile/rule.go | 250 +- vendor/golang.org/x/mod/modfile/work.go | 234 ++ vendor/golang.org/x/mod/module/module.go | 9 +- vendor/golang.org/x/mod/semver/semver.go | 10 - vendor/golang.org/x/net/context/context.go | 6 +- vendor/golang.org/x/net/context/go17.go | 10 +- vendor/golang.org/x/net/context/pre_go17.go | 10 +- .../golang.org/x/net/http/httpguts/httplex.go | 54 +- vendor/golang.org/x/net/http2/errors.go | 2 +- vendor/golang.org/x/net/http2/frame.go | 3 +- vendor/golang.org/x/net/http2/go118.go | 17 + vendor/golang.org/x/net/http2/http2.go | 14 +- vendor/golang.org/x/net/http2/not_go118.go | 17 + vendor/golang.org/x/net/http2/server.go | 7 +- vendor/golang.org/x/net/http2/transport.go | 51 +- vendor/golang.org/x/net/idna/trieval.go | 34 +- vendor/golang.org/x/oauth2/go.mod | 9 - vendor/golang.org/x/oauth2/go.sum | 361 -- vendor/golang.org/x/sys/cpu/byteorder.go | 1 + vendor/golang.org/x/sys/cpu/cpu_loong64.go | 13 + .../golang.org/x/sys/cpu/syscall_aix_gccgo.go | 2 +- .../golang.org/x/sys/unix/asm_linux_loong64.s | 54 + vendor/golang.org/x/sys/unix/ioctl_linux.go | 23 + vendor/golang.org/x/sys/unix/mkerrors.sh | 7 + vendor/golang.org/x/sys/unix/syscall_aix.go | 16 +- vendor/golang.org/x/sys/unix/syscall_bsd.go | 35 +- .../golang.org/x/sys/unix/syscall_darwin.go | 45 +- .../x/sys/unix/syscall_dragonfly.go | 9 +- .../golang.org/x/sys/unix/syscall_freebsd.go | 9 +- vendor/golang.org/x/sys/unix/syscall_linux.go | 92 +- .../x/sys/unix/syscall_linux_386.go | 12 +- .../x/sys/unix/syscall_linux_alarm.go | 14 + .../x/sys/unix/syscall_linux_amd64.go | 6 +- .../x/sys/unix/syscall_linux_arm.go | 5 +- .../x/sys/unix/syscall_linux_arm64.go | 6 +- .../x/sys/unix/syscall_linux_mips64x.go | 5 +- .../x/sys/unix/syscall_linux_mipsx.go | 5 +- .../x/sys/unix/syscall_linux_ppc.go | 5 +- .../x/sys/unix/syscall_linux_ppc64x.go | 5 +- .../x/sys/unix/syscall_linux_riscv64.go | 5 +- .../x/sys/unix/syscall_linux_s390x.go | 13 +- .../x/sys/unix/syscall_linux_sparc64.go | 5 +- .../golang.org/x/sys/unix/syscall_netbsd.go | 9 +- .../golang.org/x/sys/unix/syscall_openbsd.go | 9 +- .../golang.org/x/sys/unix/syscall_solaris.go | 148 +- vendor/golang.org/x/sys/unix/syscall_unix.go | 51 + vendor/golang.org/x/sys/unix/zerrors_linux.go | 75 +- .../x/sys/unix/zerrors_linux_386.go | 3 + .../x/sys/unix/zerrors_linux_amd64.go | 3 + .../x/sys/unix/zerrors_linux_arm.go | 3 + .../x/sys/unix/zerrors_linux_arm64.go | 3 + .../x/sys/unix/zerrors_linux_mips.go | 3 + .../x/sys/unix/zerrors_linux_mips64.go | 3 + .../x/sys/unix/zerrors_linux_mips64le.go | 3 + .../x/sys/unix/zerrors_linux_mipsle.go | 3 + .../x/sys/unix/zerrors_linux_ppc.go | 3 + .../x/sys/unix/zerrors_linux_ppc64.go | 3 + .../x/sys/unix/zerrors_linux_ppc64le.go | 3 + .../x/sys/unix/zerrors_linux_riscv64.go | 3 + .../x/sys/unix/zerrors_linux_s390x.go | 3 + .../x/sys/unix/zerrors_linux_sparc64.go | 3 + .../golang.org/x/sys/unix/zsyscall_aix_ppc.go | 4 +- .../x/sys/unix/zsyscall_aix_ppc64.go | 4 +- .../x/sys/unix/zsyscall_darwin_amd64.go | 17 +- .../x/sys/unix/zsyscall_darwin_amd64.s | 8 +- .../x/sys/unix/zsyscall_darwin_arm64.go | 17 +- .../x/sys/unix/zsyscall_darwin_arm64.s | 8 +- .../x/sys/unix/zsyscall_freebsd_386.go | 4 +- .../x/sys/unix/zsyscall_freebsd_amd64.go | 4 +- .../x/sys/unix/zsyscall_freebsd_arm.go | 4 +- .../x/sys/unix/zsyscall_freebsd_arm64.go | 4 +- .../golang.org/x/sys/unix/zsyscall_linux.go | 119 + .../x/sys/unix/zsyscall_linux_386.go | 17 +- .../x/sys/unix/zsyscall_linux_amd64.go | 39 +- .../x/sys/unix/zsyscall_linux_arm.go | 15 +- .../x/sys/unix/zsyscall_linux_arm64.go | 26 +- .../x/sys/unix/zsyscall_linux_mips.go | 28 +- .../x/sys/unix/zsyscall_linux_mips64.go | 28 +- .../x/sys/unix/zsyscall_linux_mips64le.go | 15 +- .../x/sys/unix/zsyscall_linux_mipsle.go | 28 +- .../x/sys/unix/zsyscall_linux_ppc.go | 28 +- .../x/sys/unix/zsyscall_linux_ppc64.go | 28 +- .../x/sys/unix/zsyscall_linux_ppc64le.go | 28 +- .../x/sys/unix/zsyscall_linux_riscv64.go | 15 +- .../x/sys/unix/zsyscall_linux_s390x.go | 17 +- .../x/sys/unix/zsyscall_linux_sparc64.go | 28 +- .../x/sys/unix/zsyscall_netbsd_386.go | 4 +- .../x/sys/unix/zsyscall_netbsd_amd64.go | 4 +- .../x/sys/unix/zsyscall_netbsd_arm.go | 4 +- .../x/sys/unix/zsyscall_netbsd_arm64.go | 4 +- .../x/sys/unix/zsyscall_openbsd_386.go | 4 +- .../x/sys/unix/zsyscall_openbsd_amd64.go | 4 +- .../x/sys/unix/zsyscall_openbsd_arm.go | 4 +- .../x/sys/unix/zsyscall_openbsd_arm64.go | 4 +- .../x/sys/unix/zsyscall_openbsd_mips64.go | 4 +- .../x/sys/unix/zsyscall_solaris_amd64.go | 16 +- .../x/sys/unix/zsysnum_linux_386.go | 2 + .../x/sys/unix/zsysnum_linux_amd64.go | 2 + .../x/sys/unix/zsysnum_linux_arm.go | 2 + .../x/sys/unix/zsysnum_linux_arm64.go | 2 + .../x/sys/unix/zsysnum_linux_mips.go | 2 + .../x/sys/unix/zsysnum_linux_mips64.go | 2 + .../x/sys/unix/zsysnum_linux_mips64le.go | 2 + .../x/sys/unix/zsysnum_linux_mipsle.go | 2 + .../x/sys/unix/zsysnum_linux_ppc.go | 2 + .../x/sys/unix/zsysnum_linux_ppc64.go | 2 + .../x/sys/unix/zsysnum_linux_ppc64le.go | 2 + .../x/sys/unix/zsysnum_linux_riscv64.go | 2 + .../x/sys/unix/zsysnum_linux_s390x.go | 2 + .../x/sys/unix/zsysnum_linux_sparc64.go | 2 + vendor/golang.org/x/sys/unix/ztypes_linux.go | 1557 +++++++- .../golang.org/x/sys/unix/ztypes_linux_386.go | 13 + .../x/sys/unix/ztypes_linux_amd64.go | 14 + .../golang.org/x/sys/unix/ztypes_linux_arm.go | 13 + .../x/sys/unix/ztypes_linux_arm64.go | 14 + .../x/sys/unix/ztypes_linux_mips.go | 13 + .../x/sys/unix/ztypes_linux_mips64.go | 14 + .../x/sys/unix/ztypes_linux_mips64le.go | 14 + .../x/sys/unix/ztypes_linux_mipsle.go | 13 + .../golang.org/x/sys/unix/ztypes_linux_ppc.go | 13 + .../x/sys/unix/ztypes_linux_ppc64.go | 14 + .../x/sys/unix/ztypes_linux_ppc64le.go | 14 + .../x/sys/unix/ztypes_linux_riscv64.go | 14 + .../x/sys/unix/ztypes_linux_s390x.go | 18 +- .../x/sys/unix/ztypes_linux_sparc64.go | 14 + .../x/sys/windows/syscall_windows.go | 44 +- .../golang.org/x/sys/windows/types_windows.go | 2 + .../x/sys/windows/zsyscall_windows.go | 18 +- vendor/golang.org/x/term/codereview.cfg | 1 + vendor/golang.org/x/term/go.mod | 5 - vendor/golang.org/x/term/go.sum | 2 - vendor/golang.org/x/term/term.go | 2 + .../x/tools/go/internal/gcimporter/iimport.go | 23 +- .../x/tools/internal/gocommand/invoke.go | 16 +- .../x/tools/internal/gocommand/vendor.go | 22 +- .../x/tools/internal/imports/imports.go | 2 +- .../x/tools/internal/imports/mod.go | 25 +- .../x/tools/internal/typeparams/common.go | 101 + .../internal/typeparams/typeparams_go117.go | 5 + .../internal/typeparams/typeparams_go118.go | 5 + .../tools/internal/typesinternal/errorcode.go | 158 + .../typesinternal/errorcode_string.go | 18 +- .../x/tools/internal/typesinternal/types.go | 2 + .../tools/internal/typesinternal/types_118.go | 19 + vendor/golang.org/x/xerrors/doc.go | 3 +- vendor/golang.org/x/xerrors/fmt.go | 2 + vendor/golang.org/x/xerrors/go.mod | 3 - vendor/golang.org/x/xerrors/wrap.go | 6 + vendor/gomodules.xyz/jsonpatch/v2/go.mod | 8 - vendor/gomodules.xyz/jsonpatch/v2/go.sum | 12 - .../protobuf/encoding/protowire/wire.go | 19 +- .../protobuf/internal/encoding/text/decode.go | 2 +- .../protobuf/internal/errors/is_go112.go | 1 + .../protobuf/internal/errors/is_go113.go | 1 + .../internal/flags/proto_legacy_disable.go | 1 + .../internal/flags/proto_legacy_enable.go | 1 + .../protobuf/internal/impl/codec_map_go111.go | 1 + .../protobuf/internal/impl/codec_map_go112.go | 1 + .../protobuf/internal/impl/codec_reflect.go | 1 + .../protobuf/internal/impl/codec_unsafe.go | 1 + .../protobuf/internal/impl/decode.go | 8 + .../protobuf/internal/impl/pointer_reflect.go | 1 + .../protobuf/internal/impl/pointer_unsafe.go | 1 + .../protobuf/internal/strs/strings_pure.go | 1 + .../protobuf/internal/strs/strings_unsafe.go | 1 + .../protobuf/internal/version/version.go | 4 +- .../protobuf/proto/decode.go | 17 +- .../protobuf/proto/proto_methods.go | 1 + .../protobuf/proto/proto_reflect.go | 1 + .../protobuf/reflect/protoreflect/methods.go | 1 + .../reflect/protoreflect/value_pure.go | 1 + .../reflect/protoreflect/value_union.go | 25 + .../reflect/protoreflect/value_unsafe.go | 1 + .../protobuf/runtime/protoiface/methods.go | 1 + vendor/gopkg.in/ini.v1/.editorconfig | 12 + vendor/gopkg.in/ini.v1/.gitignore | 1 + vendor/gopkg.in/ini.v1/.golangci.yml | 21 + vendor/gopkg.in/ini.v1/README.md | 2 +- vendor/gopkg.in/ini.v1/codecov.yml | 2 +- vendor/gopkg.in/ini.v1/file.go | 34 +- vendor/gopkg.in/ini.v1/ini.go | 4 +- vendor/gopkg.in/ini.v1/key.go | 36 +- vendor/gopkg.in/ini.v1/parser.go | 38 +- vendor/gopkg.in/ini.v1/section.go | 2 +- vendor/gopkg.in/yaml.v2/go.mod | 5 - vendor/gopkg.in/yaml.v3/go.mod | 5 - .../apimachinery/pkg/util/clock/clock.go | 445 --- vendor/k8s.io/code-generator/go.mod | 26 - vendor/k8s.io/code-generator/go.sum | 256 -- vendor/k8s.io/klog/go.mod | 5 - vendor/k8s.io/klog/go.sum | 2 - vendor/k8s.io/klog/v2/go.mod | 5 - vendor/k8s.io/klog/v2/go.sum | 2 - vendor/k8s.io/utils/clock/clock.go | 10 + .../k8s.io/utils/clock/testing/fake_clock.go | 9 +- vendor/k8s.io/utils/pointer/pointer.go | 31 +- vendor/modules.txt | 235 +- .../tools/setup-envtest/go.mod | 13 - .../tools/setup-envtest/go.sum | 149 - .../tools/setup-envtest/main.go | 2 +- .../tools/setup-envtest/remote/client.go | 5 +- .../tools/setup-envtest/store/store.go | 4 +- vendor/sigs.k8s.io/json/go.mod | 3 - vendor/sigs.k8s.io/yaml/go.mod | 8 - vendor/sigs.k8s.io/yaml/go.sum | 6 - 580 files changed, 23659 insertions(+), 12741 deletions(-) delete mode 100644 vendor/github.com/ahmetb/gen-crd-api-reference-docs/go.mod delete mode 100644 vendor/github.com/ahmetb/gen-crd-api-reference-docs/go.sum delete mode 100644 vendor/github.com/cespare/xxhash/v2/go.mod delete mode 100644 vendor/github.com/cespare/xxhash/v2/go.sum delete mode 100644 vendor/github.com/dsnet/compress/go.mod delete mode 100644 vendor/github.com/dsnet/compress/go.sum delete mode 100644 vendor/github.com/fatih/color/go.mod delete mode 100644 vendor/github.com/fatih/color/go.sum delete mode 100644 vendor/github.com/fsnotify/fsnotify/go.mod delete mode 100644 vendor/github.com/fsnotify/fsnotify/go.sum rename vendor/github.com/gardener/gardener/extensions/pkg/controller/healthcheck/{healtcheck_actuator.go => healthcheck_actuator.go} (100%) delete mode 100644 vendor/github.com/gardener/gardener/extensions/pkg/webhook/certificates.go create mode 100644 vendor/github.com/gardener/gardener/extensions/pkg/webhook/certificates/add.go create mode 100644 vendor/github.com/gardener/gardener/extensions/pkg/webhook/certificates/certificates.go create mode 100644 vendor/github.com/gardener/gardener/extensions/pkg/webhook/certificates/reconciler.go create mode 100644 vendor/github.com/gardener/gardener/extensions/pkg/webhook/certificates/reloader.go create mode 100644 vendor/github.com/gardener/gardener/extensions/pkg/webhook/shoot/webhook.go delete mode 100644 vendor/github.com/gardener/gardener/pkg/utils/infodata/infodata.go delete mode 100644 vendor/github.com/gardener/gardener/pkg/utils/infodata/types.go delete mode 100644 vendor/github.com/gardener/gardener/pkg/utils/secrets/basic_auth_infodata.go rename vendor/github.com/gardener/gardener/pkg/utils/secrets/{certificate_bundle.go => bundle.go} (50%) rename vendor/github.com/gardener/gardener/pkg/utils/secrets/{certificates.go => certificate.go} (59%) delete mode 100644 vendor/github.com/gardener/gardener/pkg/utils/secrets/certificates_infodata.go delete mode 100644 vendor/github.com/gardener/gardener/pkg/utils/secrets/generate.go delete mode 100644 vendor/github.com/gardener/gardener/pkg/utils/secrets/private_key_infodata.go delete mode 100644 vendor/github.com/gardener/gardener/pkg/utils/secrets/static_token_infodata.go delete mode 100644 vendor/github.com/go-logr/logr/go.mod delete mode 100644 vendor/github.com/go-logr/zapr/go.mod delete mode 100644 vendor/github.com/go-logr/zapr/go.sum delete mode 100644 vendor/github.com/go-openapi/jsonpointer/go.mod delete mode 100644 vendor/github.com/go-openapi/jsonpointer/go.sum delete mode 100644 vendor/github.com/go-openapi/jsonreference/go.mod delete mode 100644 vendor/github.com/go-openapi/jsonreference/go.sum delete mode 100644 vendor/github.com/go-openapi/swag/go.mod delete mode 100644 vendor/github.com/go-openapi/swag/go.sum delete mode 100644 vendor/github.com/go-task/slim-sprig/go.mod delete mode 100644 vendor/github.com/go-task/slim-sprig/go.sum delete mode 100644 vendor/github.com/gobuffalo/flect/go.mod delete mode 100644 vendor/github.com/gobuffalo/flect/go.sum delete mode 100644 vendor/github.com/golang/snappy/go.mod delete mode 100644 vendor/github.com/google/go-cmp/cmp/internal/flags/toolchain_legacy.go delete mode 100644 vendor/github.com/google/go-cmp/cmp/internal/flags/toolchain_recent.go delete mode 100644 vendor/github.com/google/gofuzz/go.mod delete mode 100644 vendor/github.com/google/uuid/go.mod delete mode 100644 vendor/github.com/hashicorp/errwrap/go.mod delete mode 100644 vendor/github.com/hashicorp/go-multierror/.travis.yml delete mode 100644 vendor/github.com/hashicorp/go-multierror/go.mod delete mode 100644 vendor/github.com/hashicorp/go-multierror/go.sum delete mode 100644 vendor/github.com/hashicorp/hcl/go.mod delete mode 100644 vendor/github.com/hashicorp/hcl/go.sum delete mode 100644 vendor/github.com/huandu/xstrings/go.mod delete mode 100644 vendor/github.com/imdario/mergo/go.mod delete mode 100644 vendor/github.com/imdario/mergo/go.sum delete mode 100644 vendor/github.com/josharian/intern/go.mod delete mode 100644 vendor/github.com/json-iterator/go/go.mod delete mode 100644 vendor/github.com/json-iterator/go/go.sum delete mode 100644 vendor/github.com/magiconair/properties/go.mod delete mode 100644 vendor/github.com/mattn/go-colorable/.travis.yml delete mode 100644 vendor/github.com/mattn/go-colorable/go.mod delete mode 100644 vendor/github.com/mattn/go-colorable/go.sum delete mode 100644 vendor/github.com/mattn/go-isatty/.travis.yml delete mode 100644 vendor/github.com/mattn/go-isatty/go.mod delete mode 100644 vendor/github.com/mattn/go-isatty/go.sum delete mode 100644 vendor/github.com/mattn/go-isatty/renovate.json delete mode 100644 vendor/github.com/mitchellh/copystructure/go.mod delete mode 100644 vendor/github.com/mitchellh/copystructure/go.sum delete mode 100644 vendor/github.com/mitchellh/hashstructure/v2/go.mod delete mode 100644 vendor/github.com/mitchellh/mapstructure/go.mod delete mode 100644 vendor/github.com/mitchellh/reflectwalk/go.mod delete mode 100644 vendor/github.com/moby/spdystream/go.mod delete mode 100644 vendor/github.com/moby/spdystream/go.sum delete mode 100644 vendor/github.com/modern-go/reflect2/go.mod delete mode 100644 vendor/github.com/nwaples/rardecode/go.mod delete mode 100644 vendor/github.com/onsi/ginkgo/v2/go.mod delete mode 100644 vendor/github.com/onsi/ginkgo/v2/go.sum delete mode 100644 vendor/github.com/onsi/gomega/go.mod delete mode 100644 vendor/github.com/onsi/gomega/go.sum create mode 100644 vendor/github.com/onsi/gomega/matchers/have_each_matcher.go delete mode 100644 vendor/github.com/pelletier/go-toml/go.mod create mode 100644 vendor/github.com/pelletier/go-toml/v2/.dockerignore create mode 100644 vendor/github.com/pelletier/go-toml/v2/.gitattributes create mode 100644 vendor/github.com/pelletier/go-toml/v2/.gitignore create mode 100644 vendor/github.com/pelletier/go-toml/v2/.golangci.toml create mode 100644 vendor/github.com/pelletier/go-toml/v2/.goreleaser.yaml create mode 100644 vendor/github.com/pelletier/go-toml/v2/CONTRIBUTING.md create mode 100644 vendor/github.com/pelletier/go-toml/v2/Dockerfile rename vendor/github.com/{shurcooL/sanitized_anchor_name => pelletier/go-toml/v2}/LICENSE (92%) create mode 100644 vendor/github.com/pelletier/go-toml/v2/README.md create mode 100644 vendor/github.com/pelletier/go-toml/v2/SECURITY.md create mode 100644 vendor/github.com/pelletier/go-toml/v2/ci.sh create mode 100644 vendor/github.com/pelletier/go-toml/v2/decode.go create mode 100644 vendor/github.com/pelletier/go-toml/v2/doc.go create mode 100644 vendor/github.com/pelletier/go-toml/v2/errors.go create mode 100644 vendor/github.com/pelletier/go-toml/v2/internal/ast/ast.go create mode 100644 vendor/github.com/pelletier/go-toml/v2/internal/ast/builder.go create mode 100644 vendor/github.com/pelletier/go-toml/v2/internal/ast/kind.go create mode 100644 vendor/github.com/pelletier/go-toml/v2/internal/danger/danger.go create mode 100644 vendor/github.com/pelletier/go-toml/v2/internal/danger/typeid.go create mode 100644 vendor/github.com/pelletier/go-toml/v2/internal/tracker/key.go create mode 100644 vendor/github.com/pelletier/go-toml/v2/internal/tracker/seen.go create mode 100644 vendor/github.com/pelletier/go-toml/v2/internal/tracker/tracker.go create mode 100644 vendor/github.com/pelletier/go-toml/v2/localtime.go create mode 100644 vendor/github.com/pelletier/go-toml/v2/marshaler.go create mode 100644 vendor/github.com/pelletier/go-toml/v2/parser.go create mode 100644 vendor/github.com/pelletier/go-toml/v2/scanner.go create mode 100644 vendor/github.com/pelletier/go-toml/v2/strict.go create mode 100644 vendor/github.com/pelletier/go-toml/v2/toml.abnf create mode 100644 vendor/github.com/pelletier/go-toml/v2/types.go create mode 100644 vendor/github.com/pelletier/go-toml/v2/unmarshaler.go create mode 100644 vendor/github.com/pelletier/go-toml/v2/utf8.go delete mode 100644 vendor/github.com/prometheus/procfs/go.mod delete mode 100644 vendor/github.com/prometheus/procfs/go.sum create mode 100644 vendor/github.com/russross/blackfriday/v2/entities.go delete mode 100644 vendor/github.com/russross/blackfriday/v2/go.mod delete mode 100644 vendor/github.com/shurcooL/sanitized_anchor_name/.travis.yml delete mode 100644 vendor/github.com/shurcooL/sanitized_anchor_name/README.md delete mode 100644 vendor/github.com/shurcooL/sanitized_anchor_name/go.mod delete mode 100644 vendor/github.com/shurcooL/sanitized_anchor_name/main.go delete mode 100644 vendor/github.com/sirupsen/logrus/go.mod delete mode 100644 vendor/github.com/sirupsen/logrus/go.sum delete mode 100644 vendor/github.com/spf13/afero/go.mod delete mode 100644 vendor/github.com/spf13/afero/go.sum delete mode 100644 vendor/github.com/spf13/cast/.travis.yml delete mode 100644 vendor/github.com/spf13/cast/go.mod delete mode 100644 vendor/github.com/spf13/cast/go.sum create mode 100644 vendor/github.com/spf13/cast/timeformattype_string.go create mode 100644 vendor/github.com/spf13/cobra/MAINTAINERS delete mode 100644 vendor/github.com/spf13/cobra/go.mod delete mode 100644 vendor/github.com/spf13/cobra/go.sum delete mode 100644 vendor/github.com/spf13/jwalterweatherman/go.mod delete mode 100644 vendor/github.com/spf13/pflag/go.mod delete mode 100644 vendor/github.com/spf13/pflag/go.sum create mode 100644 vendor/github.com/spf13/viper/experimental_logger.go create mode 100644 vendor/github.com/spf13/viper/fs.go delete mode 100644 vendor/github.com/spf13/viper/go.mod delete mode 100644 vendor/github.com/spf13/viper/go.sum create mode 100644 vendor/github.com/spf13/viper/internal/encoding/decoder.go create mode 100644 vendor/github.com/spf13/viper/internal/encoding/dotenv/codec.go create mode 100644 vendor/github.com/spf13/viper/internal/encoding/dotenv/map_utils.go create mode 100644 vendor/github.com/spf13/viper/internal/encoding/encoder.go create mode 100644 vendor/github.com/spf13/viper/internal/encoding/error.go create mode 100644 vendor/github.com/spf13/viper/internal/encoding/hcl/codec.go create mode 100644 vendor/github.com/spf13/viper/internal/encoding/ini/codec.go create mode 100644 vendor/github.com/spf13/viper/internal/encoding/ini/map_utils.go create mode 100644 vendor/github.com/spf13/viper/internal/encoding/javaproperties/codec.go create mode 100644 vendor/github.com/spf13/viper/internal/encoding/javaproperties/map_utils.go create mode 100644 vendor/github.com/spf13/viper/internal/encoding/json/codec.go create mode 100644 vendor/github.com/spf13/viper/internal/encoding/toml/codec.go create mode 100644 vendor/github.com/spf13/viper/internal/encoding/toml/codec2.go create mode 100644 vendor/github.com/spf13/viper/internal/encoding/yaml/codec.go create mode 100644 vendor/github.com/spf13/viper/internal/encoding/yaml/yaml2.go create mode 100644 vendor/github.com/spf13/viper/internal/encoding/yaml/yaml3.go create mode 100644 vendor/github.com/spf13/viper/logger.go create mode 100644 vendor/github.com/spf13/viper/viper_go1_15.go create mode 100644 vendor/github.com/spf13/viper/viper_go1_16.go delete mode 100644 vendor/github.com/ulikunitz/xz/go.mod delete mode 100644 vendor/go.uber.org/atomic/go.mod delete mode 100644 vendor/go.uber.org/atomic/go.sum delete mode 100644 vendor/go.uber.org/multierr/go.mod delete mode 100644 vendor/go.uber.org/multierr/go.sum delete mode 100644 vendor/go.uber.org/zap/global_go112.go delete mode 100644 vendor/go.uber.org/zap/go.mod delete mode 100644 vendor/go.uber.org/zap/go.sum rename vendor/go.uber.org/zap/{global_prego112.go => zapcore/reflected_encoder.go} (64%) delete mode 100644 vendor/golang.org/x/crypto/ed25519/ed25519_go113.go delete mode 100644 vendor/golang.org/x/crypto/ed25519/internal/edwards25519/const.go delete mode 100644 vendor/golang.org/x/crypto/ed25519/internal/edwards25519/edwards25519.go rename vendor/golang.org/x/crypto/{ => internal}/poly1305/bits_compat.go (100%) rename vendor/golang.org/x/crypto/{ => internal}/poly1305/bits_go1.13.go (100%) rename vendor/golang.org/x/crypto/{ => internal}/poly1305/mac_noasm.go (100%) rename vendor/golang.org/x/crypto/{ => internal}/poly1305/poly1305.go (98%) rename vendor/golang.org/x/crypto/{ => internal}/poly1305/sum_amd64.go (100%) rename vendor/golang.org/x/crypto/{ => internal}/poly1305/sum_amd64.s (100%) rename vendor/golang.org/x/crypto/{ => internal}/poly1305/sum_generic.go (99%) rename vendor/golang.org/x/crypto/{ => internal}/poly1305/sum_ppc64le.go (100%) rename vendor/golang.org/x/crypto/{ => internal}/poly1305/sum_ppc64le.s (100%) rename vendor/golang.org/x/crypto/{ => internal}/poly1305/sum_s390x.go (99%) rename vendor/golang.org/x/crypto/{ => internal}/poly1305/sum_s390x.s (99%) create mode 100644 vendor/golang.org/x/mod/modfile/work.go create mode 100644 vendor/golang.org/x/net/http2/go118.go create mode 100644 vendor/golang.org/x/net/http2/not_go118.go delete mode 100644 vendor/golang.org/x/oauth2/go.mod delete mode 100644 vendor/golang.org/x/oauth2/go.sum create mode 100644 vendor/golang.org/x/sys/cpu/cpu_loong64.go create mode 100644 vendor/golang.org/x/sys/unix/asm_linux_loong64.s create mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_alarm.go create mode 100644 vendor/golang.org/x/term/codereview.cfg delete mode 100644 vendor/golang.org/x/term/go.mod delete mode 100644 vendor/golang.org/x/term/go.sum create mode 100644 vendor/golang.org/x/tools/internal/typesinternal/types_118.go delete mode 100644 vendor/golang.org/x/xerrors/go.mod delete mode 100644 vendor/gomodules.xyz/jsonpatch/v2/go.mod delete mode 100644 vendor/gomodules.xyz/jsonpatch/v2/go.sum create mode 100644 vendor/gopkg.in/ini.v1/.editorconfig create mode 100644 vendor/gopkg.in/ini.v1/.golangci.yml delete mode 100644 vendor/gopkg.in/yaml.v2/go.mod delete mode 100644 vendor/gopkg.in/yaml.v3/go.mod delete mode 100644 vendor/k8s.io/apimachinery/pkg/util/clock/clock.go delete mode 100644 vendor/k8s.io/code-generator/go.mod delete mode 100644 vendor/k8s.io/code-generator/go.sum delete mode 100644 vendor/k8s.io/klog/go.mod delete mode 100644 vendor/k8s.io/klog/go.sum delete mode 100644 vendor/k8s.io/klog/v2/go.mod delete mode 100644 vendor/k8s.io/klog/v2/go.sum delete mode 100644 vendor/sigs.k8s.io/controller-runtime/tools/setup-envtest/go.mod delete mode 100644 vendor/sigs.k8s.io/controller-runtime/tools/setup-envtest/go.sum delete mode 100644 vendor/sigs.k8s.io/json/go.mod delete mode 100644 vendor/sigs.k8s.io/yaml/go.mod delete mode 100644 vendor/sigs.k8s.io/yaml/go.sum diff --git a/go.mod b/go.mod index 6ac0b630a..8ca62b082 100644 --- a/go.mod +++ b/go.mod @@ -1,18 +1,18 @@ module github.com/gardener/gardener-extension-networking-cilium -go 1.16 +go 1.17 require ( github.com/ahmetb/gen-crd-api-reference-docs v0.2.0 - github.com/gardener/gardener v1.45.0 - github.com/go-logr/logr v1.2.0 + github.com/gardener/gardener v1.48.0 + github.com/go-logr/logr v1.2.3 github.com/golang/mock v1.6.0 - github.com/onsi/ginkgo/v2 v2.1.3 - github.com/onsi/gomega v1.18.0 + github.com/onsi/ginkgo/v2 v2.1.4 + github.com/onsi/gomega v1.19.0 github.com/pkg/errors v0.9.1 - github.com/spf13/cobra v1.2.1 + github.com/spf13/cobra v1.4.0 github.com/spf13/pflag v1.0.5 - golang.org/x/tools v0.1.9 + golang.org/x/tools v0.1.10 k8s.io/api v0.23.3 k8s.io/apimachinery v0.23.3 k8s.io/client-go v11.0.1-0.20190409021438-1a26190bd76a+incompatible @@ -21,7 +21,128 @@ require ( sigs.k8s.io/controller-runtime v0.11.1 ) +require ( + github.com/BurntSushi/toml v0.3.1 // indirect + github.com/Masterminds/goutils v1.1.1 // indirect + github.com/Masterminds/semver v1.5.0 // indirect + github.com/Masterminds/sprig v2.22.0+incompatible // indirect + github.com/PuerkitoBio/purell v1.1.1 // indirect + github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect + github.com/beorn7/perks v1.0.1 // indirect + github.com/bronze1man/yaml2json v0.0.0-20211227013850-8972abeaea25 // indirect + github.com/cespare/xxhash/v2 v2.1.1 // indirect + github.com/coreos/go-systemd/v22 v22.3.2 // indirect + github.com/cyphar/filepath-securejoin v0.2.2 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/dsnet/compress v0.0.1 // indirect + github.com/elazarl/goproxy v0.0.0-20191011121108-aa519ddbe484 // indirect + github.com/emicklei/go-restful v2.9.6+incompatible // indirect + github.com/evanphx/json-patch v4.12.0+incompatible // indirect + github.com/fatih/color v1.13.0 // indirect + github.com/fsnotify/fsnotify v1.5.1 // indirect + github.com/gardener/etcd-druid v0.8.0 // indirect + github.com/gardener/external-dns-management v0.7.18 // indirect + github.com/gardener/hvpa-controller/api v0.5.0 // indirect + github.com/gardener/machine-controller-manager v0.41.0 // indirect + github.com/ghodss/yaml v1.0.0 // indirect + github.com/go-logr/zapr v1.2.0 // indirect + github.com/go-openapi/jsonpointer v0.19.5 // indirect + github.com/go-openapi/jsonreference v0.19.5 // indirect + github.com/go-openapi/swag v0.19.14 // indirect + github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 // indirect + github.com/gobuffalo/flect v0.2.3 // indirect + github.com/gobwas/glob v0.2.3 // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/golang/protobuf v1.5.2 // indirect + github.com/golang/snappy v0.0.4 // indirect + github.com/google/go-cmp v0.5.7 // indirect + github.com/google/gofuzz v1.1.0 // indirect + github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 // indirect + github.com/google/uuid v1.1.2 // indirect + github.com/googleapis/gnostic v0.5.5 // indirect + github.com/hashicorp/errwrap v1.0.0 // indirect + github.com/hashicorp/go-multierror v1.1.1 // indirect + github.com/hashicorp/hcl v1.0.0 // indirect + github.com/huandu/xstrings v1.3.2 // indirect + github.com/imdario/mergo v0.3.12 // indirect + github.com/inconshreveable/mousetrap v1.0.0 // indirect + github.com/josharian/intern v1.0.0 // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/kr/pretty v0.3.0 // indirect + github.com/kubernetes-csi/external-snapshotter/v2 v2.1.4 // indirect + github.com/magiconair/properties v1.8.6 // indirect + github.com/mailru/easyjson v0.7.6 // indirect + github.com/mattn/go-colorable v0.1.12 // indirect + github.com/mattn/go-isatty v0.0.14 // indirect + github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect + github.com/mholt/archiver v3.1.1+incompatible // indirect + github.com/mitchellh/copystructure v1.2.0 // indirect + github.com/mitchellh/hashstructure/v2 v2.0.2 // indirect + github.com/mitchellh/mapstructure v1.4.3 // indirect + github.com/mitchellh/reflectwalk v1.0.2 // indirect + github.com/moby/spdystream v0.2.0 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/nwaples/rardecode v1.1.2 // indirect + github.com/pelletier/go-toml v1.9.4 // indirect + github.com/pelletier/go-toml/v2 v2.0.0-beta.8 // indirect + github.com/pierrec/lz4 v2.6.1+incompatible // indirect + github.com/prometheus/client_golang v1.11.0 // indirect + github.com/prometheus/client_model v0.2.0 // indirect + github.com/prometheus/common v0.28.0 // indirect + github.com/prometheus/procfs v0.6.0 // indirect + github.com/russross/blackfriday/v2 v2.1.0 // indirect + github.com/sirupsen/logrus v1.8.1 // indirect + github.com/spf13/afero v1.8.2 // indirect + github.com/spf13/cast v1.4.1 // indirect + github.com/spf13/jwalterweatherman v1.1.0 // indirect + github.com/spf13/viper v1.11.0 // indirect + github.com/subosito/gotenv v1.2.0 // indirect + github.com/ulikunitz/xz v0.5.10 // indirect + github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 // indirect + go.uber.org/atomic v1.7.0 // indirect + go.uber.org/multierr v1.6.0 // indirect + go.uber.org/zap v1.21.0 // indirect + golang.org/x/crypto v0.0.0-20220516162934-403b01795ae8 // indirect + golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3 // indirect + golang.org/x/net v0.0.0-20220412020605-290c469a71a5 // indirect + golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5 // indirect + golang.org/x/sys v0.0.0-20220412211240-33da011f77ad // indirect + golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect + golang.org/x/text v0.3.7 // indirect + golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac // indirect + golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f // indirect + gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect + google.golang.org/appengine v1.6.7 // indirect + google.golang.org/protobuf v1.28.0 // indirect + gopkg.in/inf.v0 v0.9.1 // indirect + gopkg.in/ini.v1 v1.66.4 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect + gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect + istio.io/api v0.0.0-20220304035241-8c47cbbea144 // indirect + istio.io/client-go v1.12.5 // indirect + istio.io/gogo-genproto v0.0.0-20210113155706-4daf5697332f // indirect + k8s.io/apiextensions-apiserver v0.23.3 // indirect + k8s.io/apiserver v0.23.3 // indirect + k8s.io/autoscaler/vertical-pod-autoscaler v0.10.0 // indirect + k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c // indirect + k8s.io/helm v2.16.1+incompatible // indirect + k8s.io/klog v1.0.0 // indirect + k8s.io/klog/v2 v2.30.0 // indirect + k8s.io/kube-aggregator v0.23.3 // indirect + k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65 // indirect + k8s.io/metrics v0.23.3 // indirect + k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9 // indirect + sigs.k8s.io/controller-runtime/tools/setup-envtest v0.0.0-20220513175748-3f265c36d7bf // indirect + sigs.k8s.io/controller-tools v0.8.0 // indirect + sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6 // indirect + sigs.k8s.io/structured-merge-diff/v4 v4.2.1 // indirect + sigs.k8s.io/yaml v1.3.0 // indirect +) + replace ( + github.com/prometheus/client_golang => github.com/prometheus/client_golang v1.11.0 // keep this value in sync with sigs.k8s.io/controller-runtime k8s.io/api => k8s.io/api v0.23.3 k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.23.3 k8s.io/apimachinery => k8s.io/apimachinery v0.23.3 diff --git a/go.sum b/go.sum index bc2f5bb2e..25df046f0 100644 --- a/go.sum +++ b/go.sum @@ -3,6 +3,7 @@ cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= @@ -15,18 +16,32 @@ cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOY cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= +cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= +cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= +cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= +cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= +cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= +cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= +cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= +cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= +cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= +cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= 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 v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= +cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= +cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= 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= +cloud.google.com/go/firestore v1.6.1/go.mod h1:asNXNOzBdyVQmEU+ggO8UPodTkEVFW5Qx+rwHnAz+EY= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= @@ -36,7 +51,10 @@ 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= +cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +gioui.org v0.0.0-20210308172011-57750fc8a0a6/go.mod h1:RSH6KIUZ0p2xy5zHDxgAM4zumjgTw83q2ge/PI+yyw8= +git.sr.ht/~sbinet/gg v0.3.1/go.mod h1:KGYtlADtqsqANL9ueOFkWymvzUvLMQllU5Ixo+8v3pc= github.com/Azure/azure-sdk-for-go v39.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/azure-sdk-for-go v42.2.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/go-ansiterm v0.0.0-20210608223527-2377c96fe795/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= @@ -74,6 +92,7 @@ github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBp github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/Masterminds/goutils v1.1.0/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI= github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= @@ -99,7 +118,10 @@ github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ github.com/ahmetb/gen-crd-api-reference-docs v0.1.5/go.mod h1:P/XzJ+c2+khJKNKABcm2biRwk2QAuwbLf8DlXuaL7WM= github.com/ahmetb/gen-crd-api-reference-docs v0.2.0 h1:YI/cAcRdNAHArfhGKcmCY5qMa32k/UyCZagLgabC5JY= github.com/ahmetb/gen-crd-api-reference-docs v0.2.0/go.mod h1:P/XzJ+c2+khJKNKABcm2biRwk2QAuwbLf8DlXuaL7WM= +github.com/ajstarks/deck v0.0.0-20200831202436-30c9fc6549a9/go.mod h1:JynElWSGnm/4RlzPXRlREEwqTHAN3T56Bv2ITsFT3gY= +github.com/ajstarks/deck/generate v0.0.0-20210309230005-c3f852c02e19/go.mod h1:T13YZdzov6OU0A1+RfKZiZN9ca6VeKdBdyDV+BY97Tk= github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= +github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b/go.mod h1:1KcenG0jGWcpt8ov532z81sp/kMMUG485J2InIOyADM= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -117,7 +139,9 @@ github.com/appscode/jsonpatch v1.0.1/go.mod h1:4AJxUpXUhv4N+ziTvIcWWXgeorXpxPZOf github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= +github.com/armon/go-metrics v0.3.10/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= github.com/aws/aws-sdk-go v1.13.54/go.mod h1:ZRmQr0FajVIyZ4ZzBYKG5P3ZqPz9IHG41ZoMu1ADI3k= @@ -129,15 +153,17 @@ github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiU github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= -github.com/bronze1man/yaml2json v0.0.0-20201022121239-82e774ec909d h1:8pnjDJr9TIv2XUQhypkjAB2zB9g8OYonQkNAI3YwXFQ= +github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= +github.com/boombuler/barcode v1.0.1/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= github.com/bronze1man/yaml2json v0.0.0-20201022121239-82e774ec909d/go.mod h1:mVTg4vqWRIHEJK5QnZhSXBUP8GmI7ArXGq182zSJbxM= +github.com/bronze1man/yaml2json v0.0.0-20211227013850-8972abeaea25 h1:GMDsCxuwEJ1tYY5anXDexdmQ1BDVzyU5BDU7N3PQWl4= +github.com/bronze1man/yaml2json v0.0.0-20211227013850-8972abeaea25/go.mod h1:mVTg4vqWRIHEJK5QnZhSXBUP8GmI7ArXGq182zSJbxM= github.com/cenkalti/backoff/v4 v4.1.0/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/certifi/gocertifi v0.0.0-20191021191039-0944d244cd40/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= @@ -149,13 +175,19 @@ github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XL github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= +github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cloudflare/cloudflare-go v0.11.4/go.mod h1:ZB+hp7VycxPLpp0aiozQQezat46npDXhzHi1DVtRCn4= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +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/cockroachdb/datadriven v0.0.0-20200714090401-bf6692d28da5/go.mod h1:h6jFvWxBdQXxjopDMZyH2UVceIRfR84bdzbkoKrsWNo= github.com/cockroachdb/errors v1.2.4/go.mod h1:rQD95gz6FARkaKkQXUksEje/d9a6wBJoCr5oaCLELYA= github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f/go.mod h1:i/u985jwjWRlyHXQbwatDASoW0RMlZ/3i9yJHE2xLkI= @@ -180,6 +212,7 @@ github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfc github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cyphar/filepath-securejoin v0.2.2 h1:jCwT2GTP+PY5nBz3c/YL5PAIbusElVrPujOBSCj8xRg= @@ -189,7 +222,6 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/dsnet/compress v0.0.1 h1:PlZu0n3Tuv04TzpfPbrnI0HW/YwodEXDS+oPKahKF0Q= @@ -214,6 +246,7 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.m github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= +github.com/envoyproxy/go-control-plane v0.10.1/go.mod h1:AY7fTTXNdv/aJ2O5jwpxAPOWUZ7hQAEvzN5Pf27BkQQ= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/evanphx/json-patch v0.5.2/go.mod h1:ZWS5hhDbVDyob71nXKNL0+PWn6ToqBHMikGIFbs31qQ= github.com/evanphx/json-patch v4.0.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= @@ -223,11 +256,14 @@ github.com/evanphx/json-patch v4.11.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQL github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH5pOlLGNtQ5lPWQu84= github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fatih/color v1.12.0 h1:mRhaKNwANqRgUBGKmnI5ZxEk7QXmjQeCcuYFMX2bfcc= +github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/fatih/color v1.12.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= +github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= +github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= +github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/form3tech-oss/jwt-go v3.2.3+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/frankban/quicktest v1.5.0/go.mod h1:jaStnuzAqU1AJdCO0l53JDCJrVDKcS03DbaAcR7Ks/o= @@ -263,8 +299,8 @@ github.com/gardener/gardener v1.11.3/go.mod h1:5DzqfOm+G8UftKu5zUbYJ+9Cnfd4XrvRN github.com/gardener/gardener v1.17.1/go.mod h1:uucRHq0xV46xd9MpJJjRswx/Slq3+ipbbJg09FVUtvM= github.com/gardener/gardener v1.23.0/go.mod h1:xS/sYyzYsq2W0C79mT98G/qoOTvy/hHTfApHIVF3v2o= github.com/gardener/gardener v1.36.0/go.mod h1:aVEbZy2WybsuwfXfUFNfOYz1JOmMjEOeYbv+sN9PzE0= -github.com/gardener/gardener v1.45.0 h1:7KGKm5q7mrmqnsY3w5Jsw3zCbt1CPFMXrQkfgkT+d2g= -github.com/gardener/gardener v1.45.0/go.mod h1:BsQ9s0Ms5rU1IAS1doVceBGj4kNBhSMQKaDB4a2ba4k= +github.com/gardener/gardener v1.48.0 h1:OjE5o+GP9AZsDfBt2yGRvrZOngt8bLTUWoYoQ86limk= +github.com/gardener/gardener v1.48.0/go.mod h1:SxHdXYy4GWEbaP4X4axADf1eqhtfizpYXsB/q7D1GsU= github.com/gardener/gardener-resource-manager v0.10.0/go.mod h1:0pKTHOhvU91eQB0EYr/6Ymd7lXc/5Hi8P8tF/gpV0VQ= github.com/gardener/gardener-resource-manager v0.13.1/go.mod h1:0No/XttYRUwDn5lSppq9EqlKdo/XJQ44aCZz5BVu3Vw= github.com/gardener/gardener-resource-manager v0.18.0/go.mod h1:k53Yw2iDAIpTxnChQY9qFHrRtuPQWJDNnCP9eE6TnWQ= @@ -283,6 +319,11 @@ github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2H github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= +github.com/go-fonts/dejavu v0.1.0/go.mod h1:4Wt4I4OU2Nq9asgDCteaAaWZOV24E+0/Pwo0gppep4g= +github.com/go-fonts/latin-modern v0.2.0/go.mod h1:rQVLdDMK+mK1xscDwsqM5J8U2jrRa3T0ecnM9pNujks= +github.com/go-fonts/liberation v0.1.1/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY= +github.com/go-fonts/liberation v0.2.0/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY= +github.com/go-fonts/stix v0.1.0/go.mod h1:w/c1f0ldAUlJmLBvlbkvVXLAD+tAMqobIIQpmnUIzUY= github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= github.com/go-git/go-billy/v5 v5.2.0/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= github.com/go-git/go-billy/v5 v5.3.1/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= @@ -295,6 +336,8 @@ github.com/go-ini/ini v1.36.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3I github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= +github.com/go-latex/latex v0.0.0-20210118124228-b3d85cf34e07/go.mod h1:CO1AlKB2CSIqUrmQPqA0gdRIlnLEY0gK5JGjh37zN5U= +github.com/go-latex/latex v0.0.0-20210823091927-c0d11ff05a81/go.mod h1:SX0U8uGpxhq9o2S/CELCSUxEWWAuoCUcVCQWv7G2OCk= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= @@ -302,8 +345,9 @@ github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7 github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-logr/logr v0.3.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-logr/logr v0.4.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= -github.com/go-logr/logr v1.2.0 h1:QK40JKJyMdUDz+h+xvCsru/bJhvG0UxvePV0ufL/AcE= github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= +github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/zapr v0.1.0/go.mod h1:tabnROwaDl0UNxkVeFRbY8bwB37GwRv0P8lg6aAiEnk= github.com/go-logr/zapr v0.1.1/go.mod h1:tabnROwaDl0UNxkVeFRbY8bwB37GwRv0P8lg6aAiEnk= github.com/go-logr/zapr v0.2.0/go.mod h1:qhKdvif7YF5GI9NWEpyxTSSBdGmzkNguibrdCNVPunU= @@ -329,6 +373,8 @@ github.com/go-openapi/swag v0.19.4/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.19.14 h1:gm3vOOXfiuw5i9p5N9xJvfjvuofpyvLA9Wr6QfK5Fng= github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= +github.com/go-pdf/fpdf v0.5.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M= +github.com/go-pdf/fpdf v0.6.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 h1:p104kn46Q8WdvHunIJ9dAyjPVtrBPhSr3KT2yUst43I= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= @@ -395,6 +441,7 @@ github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= @@ -413,8 +460,9 @@ github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.7 h1:81/ik6ipDQS2aGcBfIN5dHDB36BwrStyeAQquSYCV4o= +github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.1.0 h1:Hsa8mG0dQ46ij8Sl2AYJDUv1oA9/d6Vk+3LG99Oe02g= @@ -422,6 +470,7 @@ github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/ github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= @@ -431,16 +480,24 @@ github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38 h1:yAJXTCF9TqKcTiHJAE8dj7HMvPfh66eeA2JYW7eFpSE= github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec= +github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= +github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= +github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= +github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= github.com/googleapis/gnostic v0.2.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= github.com/googleapis/gnostic v0.3.1/go.mod h1:on+2t9HRStVgn95RSsFWFz+6Q0Snyqv1awfrALZdbtU= @@ -448,13 +505,13 @@ github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3i github.com/googleapis/gnostic v0.5.1/go.mod h1:6U4PtQXGIEt/Z3h5MAT7FNofLnw9vXk2cUuW7uA/OeU= github.com/googleapis/gnostic v0.5.5 h1:9fHAtK0uDfpveeqqo1hkEZJcFvYXAiCN3UutL8F9xHw= github.com/googleapis/gnostic v0.5.5/go.mod h1:7+EbHbldMins07ALC74bsA81Ovc97DwqyJO1AENw9kA= +github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= github.com/gophercloud/gophercloud v0.0.0-20190212181753-892256c46858/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= github.com/gophercloud/gophercloud v0.2.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= github.com/gophercloud/gophercloud v0.6.1-0.20191122030953-d8ac278c1c9d/go.mod h1:ozGNgr9KYOVATV5jsgHl/ceCDXGuguqOZAzoQ/2vcNM= github.com/gophercloud/gophercloud v0.7.0/go.mod h1:gmC5oQqMDOMO1t1gq5DquX/yAU808e/4mzjjDA76+Ss= github.com/gophercloud/utils v0.0.0-20190527093828-25f1b77b8c03/go.mod h1:SZ9FTKibIotDtCrxAU/evccoyu1yhKST6hgBvwTB5Eg= github.com/gophercloud/utils v0.0.0-20200204043447-9864b6f1f12f/go.mod h1:ehWUbLQJPqS0Ep+CxeD559hsm9pthPXadJNKwZkp43w= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= @@ -468,16 +525,26 @@ github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t github.com/grpc-ecosystem/grpc-gateway v1.11.3/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= +github.com/hashicorp/consul/api v1.12.0/go.mod h1:6pVBMo0ebnYdt2S3H87XhekM/HHrUoTD2XXb/VrZVy0= github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms= github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= +github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-hclog v1.2.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-multierror v1.1.0 h1:B9UzwGQJehnUY1yNrnwREHc3fGbC2xefo8g4TbElacI= github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= +github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= +github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= +github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= +github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= @@ -491,8 +558,12 @@ github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= +github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc= github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= +github.com/hashicorp/memberlist v0.3.0/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= +github.com/hashicorp/serf v0.9.6/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= +github.com/hashicorp/serf v0.9.7/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/huandu/xstrings v1.2.0/go.mod h1:DvyZB1rfVYsBIigL8HwpZgxHwXozlTgGqn63UyNX5k4= github.com/huandu/xstrings v1.3.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= @@ -528,7 +599,6 @@ github.com/json-iterator/go v0.0.0-20180612202835-f2b4162afba3/go.mod h1:+SdeFBv github.com/json-iterator/go v1.1.5/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= @@ -536,10 +606,10 @@ github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnr github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= +github.com/jung-kurt/gofpdf v1.0.0/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= github.com/karrick/godirwalk v1.10.12/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA= github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= @@ -570,8 +640,9 @@ github.com/kubernetes-csi/external-snapshotter/v2 v2.1.4 h1:5k854kIoa81t4A0BhVAX github.com/kubernetes-csi/external-snapshotter/v2 v2.1.4/go.mod h1:2ar8FelpdkUJaoqp8cQpucBd8pir8c1K5BQIVZwUbJI= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/magiconair/properties v1.8.5 h1:b6kJs+EmPFMYGkow9GiUyCyOvIwYetYJ3fSaWak/Gls= github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= +github.com/magiconair/properties v1.8.6 h1:5ibWZ6iY0NctNGWo87LalDlEZ6R41TqbbDamhfG/Qzo= +github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= @@ -582,13 +653,19 @@ github.com/mandelsoft/vfs v0.0.0-20201002134249-3c471f64a4d1/go.mod h1:74aV7kulg github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.8 h1:c1ghPdyEDarC70ftn0y+A/Ee++9zz8ljHG1b13eJ0s8= +github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40= +github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= -github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= +github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= @@ -597,7 +674,10 @@ github.com/mholt/archiver v3.1.1+incompatible h1:1dCVxuqs0dJseYEhi5pl7MYPH9zDa1w github.com/mholt/archiver v3.1.1+incompatible/go.mod h1:Dh2dOXnSdiLxRiPoVfIr/fI1TwETms9B8CTWfeh7ROU= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/miekg/dns v1.1.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= +github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= +github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= @@ -610,8 +690,9 @@ github.com/mitchellh/hashstructure/v2 v2.0.2/go.mod h1:MG3aRVU/N29oo/V/IhBX8GR/z github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.4.1 h1:CpVNEelQCZBooIPDn+AR3NpivK/TIKU8bDxdASFVQag= github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/mapstructure v1.4.3 h1:OVowDSCllw/YjdLkam3/sm7wEtOy59d8ndGgCcyj8cs= +github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/mitchellh/reflectwalk v1.0.1/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= @@ -640,7 +721,6 @@ github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI github.com/nxadm/tail v1.4.5/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= -github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/olekukonko/tablewriter v0.0.4/go.mod h1:zq6QwlOf5SlnkVbMSr5EoBv3636FWnp+qbPhuoO21uA= github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.4.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= @@ -658,9 +738,9 @@ github.com/onsi/ginkgo v1.16.2/go.mod h1:CObGmKUOKaSC0RjmoAK7tKyn4Azo5P2IWuoMnvw github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= -github.com/onsi/ginkgo/v2 v2.0.0/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= -github.com/onsi/ginkgo/v2 v2.1.3 h1:e/3Cwtogj0HA+25nMP1jCMDIf8RtRYbGwGGuBIFztkc= github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= +github.com/onsi/ginkgo/v2 v2.1.4 h1:GNapqRSid3zijZ9H77KrgVG4/8KqiyRsxcSxe+7ApXY= +github.com/onsi/ginkgo/v2 v2.1.4/go.mod h1:um6tUpWM/cxCK3/FK8BXqEiUMUwRgSM4JXG47RKZmLU= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.3.0/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= @@ -676,18 +756,25 @@ github.com/onsi/gomega v1.14.0/go.mod h1:cIuvLEne0aoVhAgh/O6ac0Op8WWw9H6eYCriF+t github.com/onsi/gomega v1.15.0/go.mod h1:cIuvLEne0aoVhAgh/O6ac0Op8WWw9H6eYCriF+tEHG0= github.com/onsi/gomega v1.16.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= -github.com/onsi/gomega v1.18.0 h1:ngbYoRctxjl8SiF7XgP0NxBFbfHcg3wfHMMaFHWwMTM= -github.com/onsi/gomega v1.18.0/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs= +github.com/onsi/gomega v1.19.0 h1:4ieX6qQjPP/BfC3mpsAtIGGlxTWPeA3Inl/7DtXw1tw= +github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/packethost/packngo v0.0.0-20181217122008-b3b45f1b4979/go.mod h1:otzZQXgoO96RTzDB/Hycg0qZcXZsWJGJRSXbmEIJ+4M= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pelletier/go-toml v1.6.0/go.mod h1:5N711Q9dKgbdkxHL+MEfF31hpT7l0S0s/t2kKREewys= -github.com/pelletier/go-toml v1.9.3 h1:zeC5b1GviRUyKYd6OJPvBU/mcVDVoL1OhT17FCt5dSQ= github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= +github.com/pelletier/go-toml v1.9.4 h1:tjENF6MfZAg8e4ZmZTeWaWiT2vXtsoO6+iuOjFhECwM= +github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= +github.com/pelletier/go-toml/v2 v2.0.0-beta.8 h1:dy81yyLYJDwMTifq24Oi/IslOslRrDSb3jwDggjz3Z0= +github.com/pelletier/go-toml/v2 v2.0.0-beta.8/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= +github.com/phpdave11/gofpdf v1.4.2/go.mod h1:zpO6xFn9yxo3YLyMvW8HcKWVdbNqgIfOOp2dXMnm1mY= +github.com/phpdave11/gofpdi v1.0.12/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= +github.com/phpdave11/gofpdi v1.0.13/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= github.com/pierrec/lz4 v2.3.0+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pierrec/lz4 v2.6.1+incompatible h1:9UY3+iC23yxF0UfGaYrGplQ+79Rg+h/q9FV9ix19jjM= github.com/pierrec/lz4 v2.6.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= @@ -697,48 +784,31 @@ github.com/pkg/errors v0.9.0/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/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= +github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= +github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= -github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.2/go.mod h1:OsXs2jCmiKlQ1lTBmv21f2mNfw4xf/QclQDMrYNZzcM= -github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= -github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= -github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= -github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_golang v1.11.0 h1:HNkLOAEQMIDv/K+04rukrLx6ch7msSRwf3/SASFAGtQ= github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.0.0-20181126121408-4724e9255275/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= -github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= -github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= +github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= github.com/prometheus/common v0.28.0 h1:vGVfV9KrDTvWt5boZO0I19g2E3CsWfpPPKZM9dt3mEw= github.com/prometheus/common v0.28.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= -github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.0.11/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.6.0 h1:mxy4L2jP6qMonqmq+aTtOx1ifVWUgG/TAmntgbh3xv4= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/robfig/cron v1.2.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= @@ -749,13 +819,16 @@ github.com/rogpeppe/go-internal v1.6.1 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBO github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= -github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58/go.mod h1:6lfFZQK844Gfx8o5WFuvpxWRwnSoipWe/p622j1v06w= +github.com/ruudk/golang-pdf417 v0.0.0-20201230142125-a7e3863a1245/go.mod h1:pQAZKsJ8yyVxGRWYNEm9oFB8ieLgKFnamEyDmSA0BRk= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/sagikazarmark/crypt v0.5.0/go.mod h1:l+nzl7KWh51rpzp2h7t4MZWyiEWdhNpOAnclKvg+mdA= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= -github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= @@ -764,28 +837,29 @@ github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrf github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/soheilhy/cmux v0.1.5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= -github.com/spf13/afero v1.6.0 h1:xoax2sJ2DT8S8xA2paPFjDCScCNeWsg75VG0DLRreiY= github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= +github.com/spf13/afero v1.8.2 h1:xehSyVa0YnHWsJ49JFljMpg1HX19V6NDZ1fkm1Xznbo= +github.com/spf13/afero v1.8.2/go.mod h1:CtAatgMJh6bJEIs48Ay/FOnkljP3WeGUG0MC1RfAqwo= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.3.1 h1:nFm6S0SMdyzrzcmThSipiEubIDy8WEXKNZ0UOgiRpng= github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cast v1.4.1 h1:s0hze+J0196ZfEMTs80N7UlFt0BDuQ7Q+JDnHiMWKdA= +github.com/spf13/cast v1.4.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= github.com/spf13/cobra v0.0.6/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI= github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo= -github.com/spf13/cobra v1.2.1 h1:+KmjbUw1hriSNMF55oPrkZcb27aECyrj8V2ytv7kWDw= github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= +github.com/spf13/cobra v1.4.0 h1:y+wJpx64xcgO1V+RcnwW0LEHxTKRi2ZDPSBjWnrg88Q= +github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= @@ -797,8 +871,9 @@ github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DM github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= github.com/spf13/viper v1.6.1/go.mod h1:t3iDnF5Jlj76alVNuyFBk5oUMCvsrkbvZK0WQdfDi5k= github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= -github.com/spf13/viper v1.8.1 h1:Kq1fyeebqsBfbjZj4EL7gj2IO0mMaiyjYUWcUsl2O44= github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= +github.com/spf13/viper v1.11.0 h1:7OX/1FS6n7jHD1zGrZTM7WtY13ZELRyosK4k93oPr44= +github.com/spf13/viper v1.11.0/go.mod h1:djo0X/bA5+tYVoCn+C7cAYJGcVn/qYLFTG8gdUsX7Zk= github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -809,13 +884,16 @@ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UV github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1 h1:5TQK59W5E3v0r2duFAb7P95B6hEeOyEnHRa8MjYSMTY= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/texttheater/golang-levenshtein v0.0.0-20191208221605-eb6844b05fc6/go.mod h1:XDKHRm5ThF8YJjx001LtgelzsoaEcvnA7lVWz9EeX3g= +github.com/texttheater/golang-levenshtein v1.0.1/go.mod h1:PYAKrbF5sAiq9wd+H82hs7gNaen0CplQ9uvm6+enD/8= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/ulikunitz/xz v0.5.6/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8= @@ -841,8 +919,11 @@ github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1 go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= +go.etcd.io/etcd/api/v3 v3.5.2/go.mod h1:5GB2vv4A4AOn3yk7MftYGHkUfGtDHnEraIjym4dYz5A= go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= +go.etcd.io/etcd/client/pkg/v3 v3.5.2/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= +go.etcd.io/etcd/client/v2 v2.305.2/go.mod h1:2D7ZejHVMIfog1221iLSYlQRzrtECw3kz4I4VAQm3qI= go.etcd.io/etcd/client/v3 v3.5.0/go.mod h1:AIKXXVX/DQXtfTEqBryiLTUXwON+GuvO6Z7lLS/oTh0= go.etcd.io/etcd/pkg/v3 v3.5.0/go.mod h1:UzJGatBQ1lXChBkQF0AuAtkRQMYnHubxAEYIrC3MSsE= go.etcd.io/etcd/raft/v3 v3.5.0/go.mod h1:UFOHSIvO/nKwd4lhkwabrTD3cqW5yVyYYf/KlD00Szc= @@ -876,6 +957,7 @@ go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/automaxprocs v1.4.0/go.mod h1:/mTEdr7LvHhs0v7mjdxDreTz1OG5zdZGqgOnhWiR/+Q= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= +go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/goleak v1.1.12 h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA= go.uber.org/goleak v1.1.12/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= @@ -892,8 +974,9 @@ go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= go.uber.org/zap v1.15.0/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= -go.uber.org/zap v1.19.1 h1:ue41HOKd1vGURxrmeKIgELGb3jPW9DMUDGtsinblHwI= go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= +go.uber.org/zap v1.21.0 h1:WefMeulhovoZ2sYXz7st6K0sLj7bBhpiFaud4r4zST8= +go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -906,6 +989,7 @@ golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190621222207-cc06ce4a13d4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191202143827-86a70503ff7e/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= @@ -917,8 +1001,12 @@ golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 h1:HWj/xjIHfjYU5nVXpTM0s39J9CbLn7Cc5a7IC5rwsMQ= golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220516162934-403b01795ae8 h1:y+mHpWoQJNAHt26Nhh6JP7hvM71IRZureyvZhoVALIs= +golang.org/x/crypto v0.0.0-20220516162934-403b01795ae8/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -926,6 +1014,7 @@ golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191002040644-a1355ae1e2c3/go.mod h1:NOZ3BPKG0ec/BKJQgnvsSFpcKLM5xXVWnvZS97DWHgE= golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= @@ -935,6 +1024,16 @@ golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMk 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= +golang.org/x/image v0.0.0-20190910094157-69e4b8554b2a/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20200119044424-58c23975cae1/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20200430140353-33d19683fad8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20200618115811-c13761719519/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20201208152932-35266b937fa6/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20210216034530-4410531fe030/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20210607152325-775e3b0c77b9/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= +golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= +golang.org/x/image v0.0.0-20211028202545-6944b10bf410/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= +golang.org/x/image v0.0.0-20220302094943-723b81ca9867/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -958,8 +1057,9 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.5.1 h1:OJxoQ/rynoF0dcCdI7cLPktw/hR2cueqYfjm43oqK38= golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= +golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3 h1:kQgndtyPBW/JIYERgdxfwMYh3AVStj88WQTlNDi2a+o= +golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180112015858-5ccada7d0a7b/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -982,6 +1082,7 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191126235420-ef20fe5d7933/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -1004,19 +1105,27 @@ golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwY golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210326060303-6b1517762897/go.mod h1:uSPa2vr4CLtc/ILN5odXGNXS6mhrKVzTaCXzk9m6W3k= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= +golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210520170846-37e1c6afe023/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210825183410-e898025ed96a/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211209124913-491a49abca63 h1:iocB37TsdFuN6IBRZ+ry36wrkoV51/tl5vOWqkcPGvY= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211209124913-491a49abca63/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220412020605-290c469a71a5 h1:bRb386wvrE+oBNdF1d/Xh9mQrfQ4ecYhW5qJ5GvTGT4= +golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1030,8 +1139,15 @@ golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f h1:Qmd2pbz05z7z6lm0DrgQVVPuBm92jqujBKMHMOlOQEw= +golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1/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.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5 h1:OSnWWcOd/CtWQC2cYSBgbTSJv3ciqd8r54ySIW2y3RE= +golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= 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= @@ -1066,23 +1182,24 @@ golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191128015809-6d18c012aee9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191220220014-0732a990476f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1095,7 +1212,6 @@ golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200806060901-a37d78b92225/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1111,6 +1227,9 @@ golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210304124612-50617c2ba197/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1118,26 +1237,42 @@ golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210502180810-71e4cd670f79/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210817190340-bfb29a6856f2/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210831042530-f4d43177bf5e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211015200801-69063c4bb744/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211029165221-6e7872819dc8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e h1:fLOSk5Q00efkSvAm+4xcoXD+RRmLmmulPn5I3Y9F2EM= +golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220412211240-33da011f77ad h1:ntjMns5wyP/fN65tdBD4g8J5w8n015+iIIs9rtjXkY0= +golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b h1:9zKuko04nR4gjZ4+DNjHqRlAJqbJETHwiNKDqTfOjfE= golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1180,8 +1315,10 @@ golang.org/x/tools v0.0.0-20190624180213-70d37148ca0c/go.mod h1:/rFqwRUd4F7ZHNgw golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190927191325-030b2cf1153e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -1229,27 +1366,36 @@ golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.6-0.20210820212750-d4cc65f0b2ff/go.mod h1:YD9qOF0M9xpSpdWTBbzEl5e/RnCefISl8E5Noe10jFM= golang.org/x/tools v0.1.7/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo= -golang.org/x/tools v0.1.9 h1:j9KsMiaP1c3B0OTQGth0/k+miLGTgLsAFUCrF2vLcF8= golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= +golang.org/x/tools v0.1.10 h1:QjFRCZxdOhBJ/UNgnBZLbNV13DlbnK0quyivTnXJM20= +golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= 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= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f h1:GGU+dLjvlC3qDwqYgL6UgRmHXhOOgns0bZu2Ty5mm6U= +golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gomodules.xyz/jsonpatch/v2 v2.0.1/go.mod h1:IhYNNY4jnS53ZnfE4PAmpKtDpTCj1JFXc+3mwe7XcUU= gomodules.xyz/jsonpatch/v2 v2.1.0/go.mod h1:IhYNNY4jnS53ZnfE4PAmpKtDpTCj1JFXc+3mwe7XcUU= gomodules.xyz/jsonpatch/v2 v2.2.0 h1:4pT439QV83L+G9FkcCriY6EkpcK6r6bK+A5FBUMI7qY= gomodules.xyz/jsonpatch/v2 v2.2.0/go.mod h1:WXp+iVDkoLQqPudfQ9GBlwB2eZ5DKOnjQZCYdOS8GPY= gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= +gonum.org/v1/gonum v0.9.3/go.mod h1:TZumC3NeyVQskjXqmyWt4S3bINhy7B4eYwW69EbyX+0= +gonum.org/v1/gonum v0.11.0/go.mod h1:fSG4YDCxxUZQJ7rKsQrj0gMOg00Il0Z96/qMA4bVQhA= gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= +gonum.org/v1/plot v0.9.0/go.mod h1:3Pcqqmp6RHvJI72kgb8fThyUnav364FOsdDo2aGW5lY= +gonum.org/v1/plot v0.10.1/go.mod h1:VZW5OlhkL1mysU9vaqNHnsy86inf6Ot+jB3r+BczCEo= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= @@ -1272,6 +1418,21 @@ google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjR google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= google.golang.org/api v0.44.0/go.mod h1:EBOGZqzyhtvMDoxwS97ctnh0zUmYY6CxqXsc1AvkYD8= +google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= +google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= +google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= +google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= +google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= +google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= +google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= +google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= +google.golang.org/api v0.59.0/go.mod h1:sT2boj7M9YJxZzgeZqXogmhfmRWDtPzT31xkieUbuZU= +google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= +google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= +google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= +google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= +google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= +google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1320,14 +1481,43 @@ google.golang.org/genproto v0.0.0-20201110150050-8816d57aaa9a/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= +google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= +google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= +google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211008145708-270636b82663/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211028162531-8db9c33dc351/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= +google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -1351,8 +1541,15 @@ google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAG google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= +google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= 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= @@ -1365,8 +1562,9 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw= +google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -1380,8 +1578,9 @@ gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/ini.v1 v1.42.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.62.0 h1:duBzk771uxoUuOlyRLkHsygud9+5lrlGjdFBb4mSKDU= gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.66.4 h1:SsAcf+mM7mRZo2nJNGt8mZCjG8ZRaNGMURJw7BsIST4= +gopkg.in/ini.v1 v1.66.4/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= gopkg.in/pipe.v2 v2.0.0-20140414041502-3c2ca4d52544/go.mod h1:UhTeH/yXCK/KY7TX24mqPkaQ7gZeqmWd/8SSS8B3aHw= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= @@ -1395,7 +1594,6 @@ gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= @@ -1416,6 +1614,7 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= istio.io/api v0.0.0-20201123152548-197f11e4ea09/go.mod h1:88HN3o1fSD1jo+Z1WTLlJfMm9biopur6Ct9BFKjiB64= istio.io/api v0.0.0-20210520012029-891c0c12abfd/go.mod h1:nsSFw1LIMmGL7r/+6fJI6FxeG/UGlLxRK8bkojIvBVs= istio.io/api v0.0.0-20220304035241-8c47cbbea144 h1:JIRhhxQ3LZKOmx2PXHO9xfcnT3mlHLmcewZtpTaAtoo= @@ -1517,8 +1716,9 @@ k8s.io/utils v0.0.0-20210111153108-fddb29f9d009/go.mod h1:jPW/WVKK9YHAvNhRxK0md/ k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20210819203725-bdf08cb9a70a/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20210930125809-cb0fa318a74b/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -k8s.io/utils v0.0.0-20211116205334-6203023598ed h1:ck1fRPWPJWsMd8ZRFsWc6mh/zHp5fZ/shhbrgPUxDAE= k8s.io/utils v0.0.0-20211116205334-6203023598ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9 h1:HNSDgDCrr/6Ly3WEGKZftiE7IY19Vz2GdbOCyI4qqhc= +k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= @@ -1534,8 +1734,8 @@ sigs.k8s.io/controller-runtime v0.10.2/go.mod h1:CQp8eyUQZ/Q7PJvnIrB6/hgfTC1kBkG sigs.k8s.io/controller-runtime v0.11.1 h1:7YIHT2QnHJArj/dk9aUkYhfqfK5cIxPOX5gPECfdZLU= sigs.k8s.io/controller-runtime v0.11.1/go.mod h1:KKwLiTooNGu+JmLZGn9Sl3Gjmfj66eMbCQznLP5zcqA= sigs.k8s.io/controller-runtime/tools/setup-envtest v0.0.0-20211005045149-78ce10e2ebad/go.mod h1:Fxb8+lsIhcPWKq89RReMSzjcv3COhP0D37vJplt4ABg= -sigs.k8s.io/controller-runtime/tools/setup-envtest v0.0.0-20211208212546-f236f0345ad2 h1:ixmjiqjca72gl+JktzMpZZJYDpYJ4ZGgExZJJ4AzG7o= -sigs.k8s.io/controller-runtime/tools/setup-envtest v0.0.0-20211208212546-f236f0345ad2/go.mod h1:+sJcI1F0QI0Cv+8fp5rH5B2fK1LxzrAQqYnaPx9nY8I= +sigs.k8s.io/controller-runtime/tools/setup-envtest v0.0.0-20220513175748-3f265c36d7bf h1:8WJK2qHgC9zYGUa1zYE66eQLphFJAPtKX+C1vBjjhvc= +sigs.k8s.io/controller-runtime/tools/setup-envtest v0.0.0-20220513175748-3f265c36d7bf/go.mod h1:nLkMD2WB4Jcix1qfVuJeOF4j5y/VfyeOIlTxG5Wj9co= sigs.k8s.io/controller-tools v0.2.4/go.mod h1:m/ztfQNocGYBgTTCmFdnK94uVvgxeZeE3LtJvd/jIzA= sigs.k8s.io/controller-tools v0.2.9/go.mod h1:ArP7w60JQKkZf7UU2oWTVnEhoNGA+sOMyuSuS+JFNDQ= sigs.k8s.io/controller-tools v0.4.0/go.mod h1:G9rHdZMVlBDocIxGkK3jHLWqcTMNvveypYJwrvYKjWU= diff --git a/vendor/github.com/ahmetb/gen-crd-api-reference-docs/go.mod b/vendor/github.com/ahmetb/gen-crd-api-reference-docs/go.mod deleted file mode 100644 index a42a99a92..000000000 --- a/vendor/github.com/ahmetb/gen-crd-api-reference-docs/go.mod +++ /dev/null @@ -1,12 +0,0 @@ -module github.com/ahmetb/gen-crd-api-reference-docs - -require ( - github.com/pkg/errors v0.8.1 - github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/russross/blackfriday/v2 v2.0.1 - github.com/shurcooL/sanitized_anchor_name v1.0.0 // indirect - github.com/spf13/pflag v1.0.3 // indirect - golang.org/x/tools v0.0.0-20190213192042-740235f6c0d8 // indirect - k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6 - k8s.io/klog v0.2.0 -) diff --git a/vendor/github.com/ahmetb/gen-crd-api-reference-docs/go.sum b/vendor/github.com/ahmetb/gen-crd-api-reference-docs/go.sum deleted file mode 100644 index 0378ec026..000000000 --- a/vendor/github.com/ahmetb/gen-crd-api-reference-docs/go.sum +++ /dev/null @@ -1,23 +0,0 @@ -github.com/pkg/errors v0.8.0 h1:WdK/asTD0HN+q6hsWO3/vpuAkAr+tw6aNJNDFFf0+qw= -github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -golang.org/x/tools v0.0.0-20181221235234-d00ac6d27372 h1:zWPUEY/PjVHT+zO3L8OfkjrtIjf55joTxn/RQP/AjOI= -golang.org/x/tools v0.0.0-20181221235234-d00ac6d27372/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190213192042-740235f6c0d8/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -k8s.io/gengo v0.0.0-20181113154421-fd15ee9cc2f7 h1:zjNgw2qqBQmKd0S59lGZBQqFxJqUZroVbDphfnVm5do= -k8s.io/gengo v0.0.0-20181113154421-fd15ee9cc2f7/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6 h1:4s3/R4+OYYYUKptXPhZKjQ04WJ6EhQQVFdjOFvCazDk= -k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/klog v0.1.0 h1:I5HMfc/DtuVaGR1KPwUrTc476K8NCqNBldC7H4dYEzk= -k8s.io/klog v0.1.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= -k8s.io/klog v0.2.0 h1:0ElL0OHzF3N+OhoJTL0uca20SxtYt4X4+bzHeqrB83c= -k8s.io/klog v0.2.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= diff --git a/vendor/github.com/bronze1man/yaml2json/LICENSE b/vendor/github.com/bronze1man/yaml2json/LICENSE index 07aa18671..914e84b2d 100644 --- a/vendor/github.com/bronze1man/yaml2json/LICENSE +++ b/vendor/github.com/bronze1man/yaml2json/LICENSE @@ -1,17 +1,17 @@ -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished -to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/vendor/github.com/cespare/xxhash/v2/go.mod b/vendor/github.com/cespare/xxhash/v2/go.mod deleted file mode 100644 index 49f67608b..000000000 --- a/vendor/github.com/cespare/xxhash/v2/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module github.com/cespare/xxhash/v2 - -go 1.11 diff --git a/vendor/github.com/cespare/xxhash/v2/go.sum b/vendor/github.com/cespare/xxhash/v2/go.sum deleted file mode 100644 index e69de29bb..000000000 diff --git a/vendor/github.com/dsnet/compress/go.mod b/vendor/github.com/dsnet/compress/go.mod deleted file mode 100644 index 7a0bc001e..000000000 --- a/vendor/github.com/dsnet/compress/go.mod +++ /dev/null @@ -1,10 +0,0 @@ -module github.com/dsnet/compress - -go 1.9 - -require ( - github.com/dsnet/golib v0.0.0-20171103203638-1ea166775780 - github.com/klauspost/compress v1.4.1 - github.com/klauspost/cpuid v1.2.0 // indirect - github.com/ulikunitz/xz v0.5.6 -) diff --git a/vendor/github.com/dsnet/compress/go.sum b/vendor/github.com/dsnet/compress/go.sum deleted file mode 100644 index b6fd40c79..000000000 --- a/vendor/github.com/dsnet/compress/go.sum +++ /dev/null @@ -1,8 +0,0 @@ -github.com/dsnet/golib v0.0.0-20171103203638-1ea166775780 h1:tFh1tRc4CA31yP6qDcu+Trax5wW5GuMxvkIba07qVLY= -github.com/dsnet/golib v0.0.0-20171103203638-1ea166775780/go.mod h1:Lj+Z9rebOhdfkVLjJ8T6VcRQv3SXugXy999NBtR9aFY= -github.com/klauspost/compress v1.4.1 h1:8VMb5+0wMgdBykOV96DwNwKFQ+WTI4pzYURP99CcB9E= -github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/cpuid v1.2.0 h1:NMpwD2G9JSFOE1/TJjGSo5zG7Yb2bTe7eq1jH+irmeE= -github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= -github.com/ulikunitz/xz v0.5.6 h1:jGHAfXawEGZQ3blwU5wnWKQJvAraT7Ftq9EXjnXYgt8= -github.com/ulikunitz/xz v0.5.6/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8= diff --git a/vendor/github.com/fatih/color/README.md b/vendor/github.com/fatih/color/README.md index 5c751f215..5152bf59b 100644 --- a/vendor/github.com/fatih/color/README.md +++ b/vendor/github.com/fatih/color/README.md @@ -78,7 +78,7 @@ notice("Don't forget this...") ### Custom fprint functions (FprintFunc) ```go -blue := color.New(FgBlue).FprintfFunc() +blue := color.New(color.FgBlue).FprintfFunc() blue(myWriter, "important notice: %s", stars) // Mix up with multiple attributes diff --git a/vendor/github.com/fatih/color/go.mod b/vendor/github.com/fatih/color/go.mod deleted file mode 100644 index 78872815e..000000000 --- a/vendor/github.com/fatih/color/go.mod +++ /dev/null @@ -1,8 +0,0 @@ -module github.com/fatih/color - -go 1.13 - -require ( - github.com/mattn/go-colorable v0.1.8 - github.com/mattn/go-isatty v0.0.12 -) diff --git a/vendor/github.com/fatih/color/go.sum b/vendor/github.com/fatih/color/go.sum deleted file mode 100644 index 54f7c46e8..000000000 --- a/vendor/github.com/fatih/color/go.sum +++ /dev/null @@ -1,7 +0,0 @@ -github.com/mattn/go-colorable v0.1.8 h1:c1ghPdyEDarC70ftn0y+A/Ee++9zz8ljHG1b13eJ0s8= -github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= -github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae h1:/WDfKMnPU+m5M4xB+6x4kaepxRw6jWvR5iDRdvjHgy8= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= diff --git a/vendor/github.com/fsnotify/fsnotify/go.mod b/vendor/github.com/fsnotify/fsnotify/go.mod deleted file mode 100644 index 54089e48b..000000000 --- a/vendor/github.com/fsnotify/fsnotify/go.mod +++ /dev/null @@ -1,7 +0,0 @@ -module github.com/fsnotify/fsnotify - -go 1.13 - -require golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c - -retract v1.5.0 diff --git a/vendor/github.com/fsnotify/fsnotify/go.sum b/vendor/github.com/fsnotify/fsnotify/go.sum deleted file mode 100644 index 0f478630c..000000000 --- a/vendor/github.com/fsnotify/fsnotify/go.sum +++ /dev/null @@ -1,2 +0,0 @@ -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c h1:F1jZWGFhYfh0Ci55sIpILtKKK8p3i2/krTr0H1rg74I= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/common/checkerwatchdog.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/common/checkerwatchdog.go index dadc2d206..11d4faeff 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/common/checkerwatchdog.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/controller/common/checkerwatchdog.go @@ -20,7 +20,7 @@ import ( "time" "github.com/go-logr/logr" - "k8s.io/apimachinery/pkg/util/clock" + "k8s.io/utils/clock" ) // Watchdog manages a goroutine that regularly checks if a certain condition is true, diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/common/checkerwatchdogfactory.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/common/checkerwatchdogfactory.go index 6032b9d5a..49463ffe8 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/common/checkerwatchdogfactory.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/controller/common/checkerwatchdogfactory.go @@ -19,7 +19,7 @@ import ( "time" "github.com/go-logr/logr" - "k8s.io/apimachinery/pkg/util/clock" + "k8s.io/utils/clock" "sigs.k8s.io/controller-runtime/pkg/client" ) diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/common/watchdogmanager.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/common/watchdogmanager.go index ec7887bb5..5062205b1 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/common/watchdogmanager.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/controller/common/watchdogmanager.go @@ -21,7 +21,7 @@ import ( "time" "github.com/go-logr/logr" - "k8s.io/apimachinery/pkg/util/clock" + "k8s.io/utils/clock" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/log" ) @@ -81,7 +81,7 @@ var ( ) // NewWatchdogManager creates a new WatchdogManager using the given watchdog factory, ttl, and logger. -func NewWatchdogManager(watchdogFactory WatchdogFactory, ttl time.Duration, clk clock.Clock, logger logr.Logger) WatchdogManager { +func NewWatchdogManager(watchdogFactory WatchdogFactory, ttl time.Duration, clk clock.WithTickerAndDelayedExecution, logger logr.Logger) WatchdogManager { return &watchdogManager{ watchdogFactory: watchdogFactory, ttl: ttl, @@ -95,7 +95,7 @@ func NewWatchdogManager(watchdogFactory WatchdogFactory, ttl time.Duration, clk type watchdogManager struct { watchdogFactory WatchdogFactory ttl time.Duration - clock clock.Clock + clock clock.WithTickerAndDelayedExecution logger logr.Logger watchdogs map[string]Watchdog watchdogsMutex sync.Mutex diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/healthcheck/general/managed_resource.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/healthcheck/general/managed_resource.go index bfbedb987..f2f28b038 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/healthcheck/general/managed_resource.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/controller/healthcheck/general/managed_resource.go @@ -82,7 +82,7 @@ func (healthChecker *ManagedResourceHealthChecker) Check(ctx context.Context, re return &healthcheck.SingleCheckResult{ Status: gardencorev1beta1.ConditionFalse, Detail: err.Error(), - Codes: gardencorev1beta1helper.DetermineErrorCodes(err), + Codes: gardencorev1beta1helper.DeprecatedDetermineErrorCodes(err), }, nil } diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/healthcheck/healtcheck_actuator.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/healthcheck/healthcheck_actuator.go similarity index 100% rename from vendor/github.com/gardener/gardener/extensions/pkg/controller/healthcheck/healtcheck_actuator.go rename to vendor/github.com/gardener/gardener/extensions/pkg/controller/healthcheck/healthcheck_actuator.go diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/status.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/status.go index 59c46535a..d896b6a2b 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/status.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/controller/status.go @@ -143,7 +143,7 @@ func (s *statusUpdater) ErrorCustom(ctx context.Context, obj extensionsv1alpha1. // instead of adding key-value pairs ourselves here s.logger.Error(fmt.Errorf(errDescription), "Error", s.logKeysAndValues(obj)...) //nolint:logcheck - lastOp, lastErr := ReconcileError(lastOperationType, errDescription, 50, gardencorev1beta1helper.ExtractErrorCodes(gardencorev1beta1helper.DetermineError(err, err.Error()))...) + lastOp, lastErr := ReconcileError(lastOperationType, errDescription, 50, gardencorev1beta1helper.ExtractErrorCodes(err)...) patch := client.MergeFrom(obj.DeepCopyObject().(client.Object)) obj.GetExtensionStatus().SetObservedGeneration(obj.GetGeneration()) diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/predicate/default.go b/vendor/github.com/gardener/gardener/extensions/pkg/predicate/default.go index 70581474b..15b7abb18 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/predicate/default.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/predicate/default.go @@ -83,6 +83,11 @@ var defaultControllerPredicate = predicate.Funcs{ return true } + // If the last operation does not indicate success and the object's timestamp changes then we admit reconciliation. + if lastOperationNotSuccessful(e.ObjectNew) && e.ObjectOld.GetAnnotations()[v1beta1constants.GardenerTimestamp] != e.ObjectNew.GetAnnotations()[v1beta1constants.GardenerTimestamp] { + return true + } + // If none of the above conditions applies then reconciliation is not allowed. return false }, diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/certificates.go b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/certificates.go deleted file mode 100644 index 1636ab342..000000000 --- a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/certificates.go +++ /dev/null @@ -1,225 +0,0 @@ -// Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package webhook - -import ( - "context" - "fmt" - "net" - "os" - "path/filepath" - "strings" - - kutil "github.com/gardener/gardener/pkg/utils/kubernetes" - "github.com/gardener/gardener/pkg/utils/secrets" - corev1 "k8s.io/api/core/v1" - apierrors "k8s.io/apimachinery/pkg/api/errors" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/client-go/kubernetes/scheme" - "sigs.k8s.io/controller-runtime/pkg/client" - "sigs.k8s.io/controller-runtime/pkg/manager" -) - -const ( - // ModeService is a constant for the webhook mode indicating that the controller is running inside of the Kubernetes cluster it - // is serving. - ModeService = "service" - // ModeURL is a constant for the webhook mode indicating that the controller is running outside of the Kubernetes cluster it - // is serving. If this is set then a URL is required for configuration. - ModeURL = "url" - // ModeURLWithServiceName is a constant for the webhook mode indicating that the controller is running outside of the Kubernetes cluster it - // is serving but in the same cluster like the kube-apiserver. If this is set then a URL is required for configuration. - ModeURLWithServiceName = "url-service" - - certSecretName = "gardener-extension-webhook-cert" -) - -// GenerateCertificates generates the certificates that are required for a webhook. It returns the ca bundle, and it -// stores the server certificate and key locally on the file system. -func GenerateCertificates(ctx context.Context, mgr manager.Manager, certDir, namespace, name, mode, url string) ([]byte, error) { - var ( - caCert *secrets.Certificate - serverCert *secrets.Certificate - err error - ) - - // If the namespace is not set then the webhook controller is running locally. We simply generate a new certificate in this case. - if len(namespace) == 0 { - caCert, serverCert, err = generateNewCAAndServerCert(mode, namespace, name, url) - if err != nil { - return nil, fmt.Errorf("error generating new certificates for webhook server: %w", err) - } - return writeCertificates(certDir, caCert, serverCert) - } - - // The controller stores the generated webhook certificate in a secret in the cluster. It tries to read it. If it does not exist a - // new certificate is generated. - c, err := getClient(mgr) - if err != nil { - return nil, err - } - - secret := &corev1.Secret{} - if err := c.Get(ctx, kutil.Key(namespace, certSecretName), secret); err != nil { - if !apierrors.IsNotFound(err) { - return nil, fmt.Errorf("error getting cert secret: %w", err) - } - - // The secret was not found, let's generate new certificates and store them in the secret afterwards. - caCert, serverCert, err = generateNewCAAndServerCert(mode, namespace, name, url) - if err != nil { - return nil, fmt.Errorf("error generating new certificates for webhook server: %w", err) - } - - secret.ObjectMeta = metav1.ObjectMeta{Namespace: namespace, Name: certSecretName} - secret.Type = corev1.SecretTypeOpaque - secret.Data = map[string][]byte{ - secrets.DataKeyCertificateCA: caCert.CertificatePEM, - secrets.DataKeyPrivateKeyCA: caCert.PrivateKeyPEM, - secrets.DataKeyCertificate: serverCert.CertificatePEM, - secrets.DataKeyPrivateKey: serverCert.PrivateKeyPEM, - } - if err := c.Create(ctx, secret); err != nil { - return nil, err - } - - return writeCertificates(certDir, caCert, serverCert) - } - - // The secret has been found and we are now trying to read the stored certificate inside it. - caCert, serverCert, err = loadExistingCAAndServerCert(secret.Data) - if err != nil { - return nil, fmt.Errorf("error reading data of secret %s/%s: %w", namespace, certSecretName, err) - } - return writeCertificates(certDir, caCert, serverCert) -} - -func generateNewCAAndServerCert(mode, namespace, name, url string) (*secrets.Certificate, *secrets.Certificate, error) { - caConfig := &secrets.CertificateSecretConfig{ - CommonName: "webhook-ca", - CertType: secrets.CACert, - } - - caCert, err := caConfig.GenerateCertificate() - if err != nil { - return nil, nil, err - } - - var ( - dnsNames []string - ipAddresses []net.IP - ) - - serverName := url - serverNameData := strings.SplitN(url, ":", 3) - - if len(serverNameData) == 2 { - serverName = serverNameData[0] - } - - switch mode { - case ModeURL: - if addr := net.ParseIP(url); addr != nil { - ipAddresses = []net.IP{ - addr, - } - } else { - dnsNames = []string{ - serverName, - } - } - - case ModeService: - dnsNames = []string{ - fmt.Sprintf("gardener-extension-%s", name), - fmt.Sprintf("gardener-extension-%s.%s", name, namespace), - fmt.Sprintf("gardener-extension-%s.%s.svc", name, namespace), - } - } - - serverConfig := &secrets.CertificateSecretConfig{ - CommonName: name, - DNSNames: dnsNames, - IPAddresses: ipAddresses, - CertType: secrets.ServerCert, - SigningCA: caCert, - } - - serverCert, err := serverConfig.GenerateCertificate() - if err != nil { - return nil, nil, err - } - - return caCert, serverCert, nil -} - -func loadExistingCAAndServerCert(data map[string][]byte) (*secrets.Certificate, *secrets.Certificate, error) { - secretDataCACert, ok := data[secrets.DataKeyCertificateCA] - if !ok { - return nil, nil, fmt.Errorf("secret does not contain %s key", secrets.DataKeyCertificateCA) - } - secretDataCAKey, ok := data[secrets.DataKeyPrivateKeyCA] - if !ok { - return nil, nil, fmt.Errorf("secret does not contain %s key", secrets.DataKeyPrivateKeyCA) - } - caCert, err := secrets.LoadCertificate("", secretDataCAKey, secretDataCACert) - if err != nil { - return nil, nil, fmt.Errorf("could not load ca certificate") - } - - secretDataServerCert, ok := data[secrets.DataKeyCertificate] - if !ok { - return nil, nil, fmt.Errorf("secret does not contain %s key", secrets.DataKeyCertificate) - } - secretDataServerKey, ok := data[secrets.DataKeyPrivateKey] - if !ok { - return nil, nil, fmt.Errorf("secret does not contain %s key", secrets.DataKeyPrivateKey) - } - serverCert, err := secrets.LoadCertificate("", secretDataServerKey, secretDataServerCert) - if err != nil { - return nil, nil, fmt.Errorf("could not load server certificate") - } - - return caCert, serverCert, nil -} - -func writeCertificates(certDir string, caCert, serverCert *secrets.Certificate) ([]byte, error) { - var ( - serverKeyPath = filepath.Join(certDir, secrets.DataKeyPrivateKey) - serverCertPath = filepath.Join(certDir, secrets.DataKeyCertificate) - ) - - if err := os.MkdirAll(certDir, 0755); err != nil { - return nil, err - } - if err := os.WriteFile(serverKeyPath, serverCert.PrivateKeyPEM, 0666); err != nil { - return nil, err - } - if err := os.WriteFile(serverCertPath, serverCert.CertificatePEM, 0666); err != nil { - return nil, err - } - - return caCert.CertificatePEM, nil -} - -func getClient(mgr manager.Manager) (client.Client, error) { - s := runtime.NewScheme() - if err := scheme.AddToScheme(s); err != nil { - return nil, err - } - - return client.New(mgr.GetConfig(), client.Options{Scheme: s}) -} diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/certificates/add.go b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/certificates/add.go new file mode 100644 index 000000000..764dc7c7d --- /dev/null +++ b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/certificates/add.go @@ -0,0 +1,84 @@ +// Copyright (c) 2022 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package certificates + +import ( + "context" + "fmt" + "sync/atomic" + "time" + + admissionregistrationv1 "k8s.io/api/admissionregistration/v1" + "k8s.io/utils/clock" + "sigs.k8s.io/controller-runtime/pkg/manager" +) + +// DefaultSyncPeriod is the default sync period for the certificate reconciler and reloader. +var DefaultSyncPeriod = 5 * time.Minute + +// AddCertificateManagementToManager adds reconcilers to the given manager that manage the webhook certificates, namely +// - generate and auto-rotate the webhook CA and server cert using a secrets manager (in leader only) +// - fetch current webhook server cert and write it to disk for the webhook server to pick up (in all replicas) +func AddCertificateManagementToManager( + ctx context.Context, + mgr manager.Manager, + clock clock.Clock, + seedWebhookConfig, shootWebhookConfig *admissionregistrationv1.MutatingWebhookConfiguration, + atomicShootWebhookConfig *atomic.Value, + extensionName string, + shootWebhookManagedResourceName string, + shootNamespaceSelector map[string]string, + namespace, mode, url string, +) error { + var ( + identity = "gardener-extension-" + extensionName + "-webhook" + caSecretName = "ca-" + extensionName + "-webhook" + serverSecretName = extensionName + "-webhook-server" + ) + + // first, add reconciler that manages the certificates and injects them into webhook configs + // (only running in the leader or once if no secrets have been generated yet) + if err := (&reconciler{ + Clock: clock, + SyncPeriod: DefaultSyncPeriod, + SeedWebhookConfig: seedWebhookConfig, + ShootWebhookConfig: shootWebhookConfig, + AtomicShootWebhookConfig: atomicShootWebhookConfig, + CASecretName: caSecretName, + ServerSecretName: serverSecretName, + Namespace: namespace, + Identity: identity, + ExtensionName: extensionName, + ShootWebhookManagedResourceName: shootWebhookManagedResourceName, + ShootNamespaceSelector: shootNamespaceSelector, + Mode: mode, + URL: url, + }).AddToManager(ctx, mgr); err != nil { + return fmt.Errorf("failed to add webhook server certificate reconciler: %w", err) + } + + // secondly, add reloader that fetches the managed certificates and writes it to the webhook server's cert dir + // (running in all replicas) + if err := (&reloader{ + SyncPeriod: DefaultSyncPeriod, + ServerSecretName: serverSecretName, + Namespace: namespace, + Identity: identity, + }).AddToManager(ctx, mgr); err != nil { + return fmt.Errorf("failed to add webhook server certificate reloader: %w", err) + } + + return nil +} diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/certificates/certificates.go b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/certificates/certificates.go new file mode 100644 index 000000000..a9efc7216 --- /dev/null +++ b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/certificates/certificates.go @@ -0,0 +1,120 @@ +// Copyright (c) 2022 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package certificates + +import ( + "fmt" + "net" + "os" + "path/filepath" + "strings" + "time" + + "github.com/gardener/gardener/extensions/pkg/webhook" + "github.com/gardener/gardener/pkg/utils" + secretutils "github.com/gardener/gardener/pkg/utils/secrets" +) + +// GenerateUnmanagedCertificates generates a one-off CA and server cert for a webhook server. The server certificate and +// key are written to certDir. This is useful for local development. +func GenerateUnmanagedCertificates(providerName, certDir, mode, url string) ([]byte, error) { + caConfig := getWebhookCAConfig(providerName) + // we want to use a long validity here, because we don't auto-renew certificates + caConfig.Validity = utils.DurationPtr(10 * 365 * 24 * time.Hour) // 10y + + caCert, err := caConfig.GenerateCertificate() + if err != nil { + return nil, err + } + + serverConfig := getWebhookServerCertConfig(providerName, "", providerName, mode, url) + serverConfig.SigningCA = caCert + + serverCert, err := serverConfig.GenerateCertificate() + if err != nil { + return nil, err + } + + return caCert.CertificatePEM, writeCertificatesToDisk(certDir, serverCert.CertificatePEM, serverCert.PrivateKeyPEM) +} + +var caCertificateValidity = 30 * 24 * time.Hour // 30d + +func getWebhookCAConfig(name string) *secretutils.CertificateSecretConfig { + return &secretutils.CertificateSecretConfig{ + Name: name, + CommonName: name, + CertType: secretutils.CACert, + Validity: &caCertificateValidity, + } +} + +func getWebhookServerCertConfig(name, namespace, providerName, mode, url string) *secretutils.CertificateSecretConfig { + var ( + dnsNames []string + ipAddresses []net.IP + + serverName = url + serverNameData = strings.SplitN(url, ":", 3) + ) + + if len(serverNameData) == 2 { + serverName = serverNameData[0] + } + + switch mode { + case webhook.ModeURL: + if addr := net.ParseIP(url); addr != nil { + ipAddresses = []net.IP{addr} + } else { + dnsNames = []string{serverName} + } + + case webhook.ModeService: + dnsNames = []string{ + fmt.Sprintf("gardener-extension-%s", providerName), + } + if namespace != "" { + dnsNames = append(dnsNames, + fmt.Sprintf("gardener-extension-%s.%s", providerName, namespace), + fmt.Sprintf("gardener-extension-%s.%s.svc", providerName, namespace), + ) + } + } + + return &secretutils.CertificateSecretConfig{ + Name: name, + CommonName: providerName, + DNSNames: dnsNames, + IPAddresses: ipAddresses, + CertType: secretutils.ServerCert, + SkipPublishingCACertificate: true, + } +} + +func writeCertificatesToDisk(certDir string, serverCert, serverKey []byte) error { + var ( + serverKeyPath = filepath.Join(certDir, secretutils.DataKeyPrivateKey) + serverCertPath = filepath.Join(certDir, secretutils.DataKeyCertificate) + ) + + if err := os.MkdirAll(certDir, 0755); err != nil { + return err + } + if err := os.WriteFile(serverKeyPath, serverKey, 0666); err != nil { + return err + } + return os.WriteFile(serverCertPath, serverCert, 0666) +} diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/certificates/reconciler.go b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/certificates/reconciler.go new file mode 100644 index 000000000..3d9cef173 --- /dev/null +++ b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/certificates/reconciler.go @@ -0,0 +1,262 @@ +// Copyright (c) 2022 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package certificates + +import ( + "context" + "fmt" + "sync/atomic" + "time" + + "github.com/gardener/gardener/extensions/pkg/webhook" + extensionswebhookshoot "github.com/gardener/gardener/extensions/pkg/webhook/shoot" + "github.com/gardener/gardener/pkg/utils/kubernetes" + secretutils "github.com/gardener/gardener/pkg/utils/secrets" + secretsmanager "github.com/gardener/gardener/pkg/utils/secrets/manager" + + "github.com/go-logr/logr" + admissionregistrationv1 "k8s.io/api/admissionregistration/v1" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/client-go/util/workqueue" + "k8s.io/utils/clock" + "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/controller" + "sigs.k8s.io/controller-runtime/pkg/handler" + logf "sigs.k8s.io/controller-runtime/pkg/log" + "sigs.k8s.io/controller-runtime/pkg/manager" + "sigs.k8s.io/controller-runtime/pkg/predicate" + "sigs.k8s.io/controller-runtime/pkg/reconcile" + "sigs.k8s.io/controller-runtime/pkg/source" +) + +const certificateReconcilerName = "webhook-certificate" + +// reconciler is a simple reconciler that manages the webhook CA and server certificate using a secrets manager. +// It runs Generate for both secret configs followed by Cleanup every SyncPeriod and updates the WebhookConfigurations +// accordingly with the new CA bundle. +type reconciler struct { + // Clock is the clock. + Clock clock.Clock + // SyncPeriod is the frequency with which to reload the server cert. Defaults to 5m. + SyncPeriod time.Duration + // SeedWebhookConfig is the webhook configuration to reconcile in the Seed cluster. + SeedWebhookConfig *admissionregistrationv1.MutatingWebhookConfiguration + // ShootWebhookConfig is the webhook configuration to reconcile in all Shoot clusters. + ShootWebhookConfig *admissionregistrationv1.MutatingWebhookConfiguration + // AtomicShootWebhookConfig is an atomic value in which this reconciler will store the updated ShootWebhookConfig. + // It is supposed to be shared with the ControlPlane actuator. I.e. if the CA bundle changes, this reconciler + // updates the CA bundle in this value so that the ControlPlane actuator can configure the correct (the new) CA + // bundle for newly created shoots by loading this value. + AtomicShootWebhookConfig *atomic.Value + // CASecretName is the CA config name. + CASecretName string + // ServerSecretName is the server certificate config name. + ServerSecretName string + // Namespace where the server certificate secret should be located in. + Namespace string + // Identity of the secrets manager used for managing the secret. + Identity string + // Name of the extension. + ExtensionName string + // ShootWebhookManagedResourceName is the name of the ManagedResource containing the raw extensionswebhookshoot webhook config. + ShootWebhookManagedResourceName string + // ShootNamespaceSelector is a label selector for extensionswebhookshoot namespaces relevant to the extension. + ShootNamespaceSelector map[string]string + // Mode is the webhook client config mode. + Mode string + // URL is the URL that is used to register the webhooks in Kubernetes. + URL string + + serverPort int + client client.Client +} + +// AddToManager generates webhook CA and server cert if it doesn't exist on the cluster yet. Then it adds reconciler to +// the given manager in order to periodically regenerate the webhook secrets. +func (r *reconciler) AddToManager(ctx context.Context, mgr manager.Manager) error { + r.serverPort = mgr.GetWebhookServer().Port + r.client = mgr.GetClient() + + present, err := isWebhookServerSecretPresent(ctx, mgr.GetAPIReader(), r.ServerSecretName, r.Namespace, r.Identity) + if err != nil { + return err + } + + // if webhook CA and server cert have not been generated yet, we need to generate them for the first time now, + // otherwise the webhook server will not be able to start (which is a non-leader election runnable and is therefore + // started before this controller) + if !present { + // cache is not started yet, we need an uncached client for the initial setup + uncachedClient, err := client.NewDelegatingClient(client.NewDelegatingClientInput{ + Client: r.client, + CacheReader: mgr.GetAPIReader(), + }) + if err != nil { + return fmt.Errorf("failed to create new unchached client: %w", err) + } + + sm, err := r.newSecretsManager(ctx, mgr.GetLogger(), uncachedClient) + if err != nil { + return fmt.Errorf("failed to create new SecretsManager: %w", err) + } + + if _, err = r.generateWebhookCA(ctx, sm); err != nil { + return err + } + + if _, err = r.generateWebhookServerCert(ctx, sm); err != nil { + return err + } + } + + // remove legacy webhook cert secret + // TODO(timebertt): remove this in a future release + if err := kubernetes.DeleteObject(ctx, r.client, + &corev1.Secret{ObjectMeta: metav1.ObjectMeta{Namespace: r.Namespace, Name: "gardener-extension-webhook-cert"}}, + ); err != nil { + return err + } + + // add controller, that regenerates the CA and server cert secrets periodically + ctrl, err := controller.New(certificateReconcilerName, mgr, controller.Options{ + Reconciler: r, + RecoverPanic: true, + // if going into exponential backoff, wait at most the configured sync period + RateLimiter: workqueue.NewWithMaxWaitRateLimiter(workqueue.DefaultControllerRateLimiter(), r.SyncPeriod), + }) + if err != nil { + return err + } + + return ctrl.Watch(triggerOnce, nil) +} + +// Reconcile generates new certificates if needed and updates all webhook configurations. +func (r *reconciler) Reconcile(ctx context.Context, _ reconcile.Request) (reconcile.Result, error) { + log := logf.FromContext(ctx) + + sm, err := r.newSecretsManager(ctx, log, r.client) + if err != nil { + return reconcile.Result{}, fmt.Errorf("failed to create new SecretsManager: %w", err) + } + + caSecret, err := r.generateWebhookCA(ctx, sm) + if err != nil { + return reconcile.Result{}, err + } + caBundleSecret, found := sm.Get(r.CASecretName) + if !found { + return reconcile.Result{}, fmt.Errorf("secret %q not found", r.CASecretName) + } + + log = log.WithValues( + "secretNamespace", r.Namespace, + "identity", r.Identity, + "caSecretName", caSecret.Name, + "caBundleSecretName", caBundleSecret.Name, + ) + log.Info("Generated webhook CA") + + serverSecret, err := r.generateWebhookServerCert(ctx, sm) + if err != nil { + return reconcile.Result{}, err + } + log.Info("Generated webhook server cert", "serverSecretName", serverSecret.Name) + + if err := r.reconcileSeedWebhookConfig(ctx, caBundleSecret); err != nil { + return reconcile.Result{}, fmt.Errorf("error reconciling seed webhook config: %w", err) + } + log.Info("Updated seed webhook config with new CA bundle", "webhookConfig", r.SeedWebhookConfig) + + if r.ShootWebhookConfig != nil { + // update shoot webhook config object (in memory) with the freshly created CA bundle which is also used by the + // ControlPlane actuator + if err := webhook.InjectCABundleIntoWebhookConfig(r.ShootWebhookConfig, caBundleSecret.Data[secretutils.DataKeyCertificateBundle]); err != nil { + return reconcile.Result{}, err + } + r.AtomicShootWebhookConfig.Store(r.ShootWebhookConfig.DeepCopy()) + + // reconcile all shoot webhook configs with the freshly created CA bundle + if err := extensionswebhookshoot.ReconcileWebhooksForAllNamespaces(ctx, r.client, r.ExtensionName, r.ShootWebhookManagedResourceName, r.ShootNamespaceSelector, r.serverPort, r.ShootWebhookConfig); err != nil { + return reconcile.Result{}, fmt.Errorf("error reconciling all shoot webhook configs: %w", err) + } + log.Info("Updated all shoot webhook configs with new CA bundle", "webhookConfig", r.ShootWebhookConfig) + } + + if err := sm.Cleanup(ctx); err != nil { + return reconcile.Result{}, err + } + + return reconcile.Result{RequeueAfter: r.SyncPeriod}, nil +} + +func (r *reconciler) reconcileSeedWebhookConfig(ctx context.Context, caBundleSecret *corev1.Secret) error { + // copy object so that we don't lose its name on API/client errors + config := r.SeedWebhookConfig.DeepCopyObject().(client.Object) + if err := r.client.Get(ctx, client.ObjectKeyFromObject(config), config); err != nil { + return err + } + + patch := client.MergeFromWithOptions(config.DeepCopyObject().(client.Object), client.MergeFromWithOptimisticLock{}) + if err := webhook.InjectCABundleIntoWebhookConfig(config, caBundleSecret.Data[secretutils.DataKeyCertificateBundle]); err != nil { + return err + } + return r.client.Patch(ctx, config, patch) +} + +func isWebhookServerSecretPresent(ctx context.Context, c client.Reader, secretName, namespace, identity string) (bool, error) { + secretList := &metav1.PartialObjectMetadataList{} + secretList.SetGroupVersionKind(corev1.SchemeGroupVersion.WithKind("SecretList")) + + if err := c.List(ctx, secretList, client.InNamespace(namespace), client.Limit(1), client.MatchingLabels{ + secretsmanager.LabelKeyName: secretName, + secretsmanager.LabelKeyManagedBy: secretsmanager.LabelValueSecretsManager, + secretsmanager.LabelKeyManagerIdentity: identity, + }); err != nil { + return false, err + } + + return len(secretList.Items) > 0, nil +} + +func (r *reconciler) newSecretsManager(ctx context.Context, log logr.Logger, c client.Client) (secretsmanager.Interface, error) { + return secretsmanager.New( + ctx, + log.WithName("secretsmanager"), + r.Clock, + c, + r.Namespace, + r.Identity, + secretsmanager.Config{CASecretAutoRotation: true}, + ) +} + +func (r *reconciler) generateWebhookCA(ctx context.Context, sm secretsmanager.Interface) (*corev1.Secret, error) { + return sm.Generate(ctx, getWebhookCAConfig(r.CASecretName), + secretsmanager.Rotate(secretsmanager.KeepOld), secretsmanager.IgnoreOldSecretsAfter(24*time.Hour)) +} + +func (r *reconciler) generateWebhookServerCert(ctx context.Context, sm secretsmanager.Interface) (*corev1.Secret, error) { + // use current CA for signing server cert to prevent mismatches when dropping the old CA from the webhook config + return sm.Generate(ctx, getWebhookServerCertConfig(r.ServerSecretName, r.Namespace, r.ExtensionName, r.Mode, r.URL), + secretsmanager.SignedByCA(r.CASecretName, secretsmanager.UseCurrentCA)) +} + +// triggerOnce is a source.Source that simply triggers the reconciler once with an empty reconcile.Request. +var triggerOnce = source.Func(func(_ context.Context, _ handler.EventHandler, q workqueue.RateLimitingInterface, _ ...predicate.Predicate) error { + q.Add(reconcile.Request{}) + return nil +}) diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/certificates/reloader.go b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/certificates/reloader.go new file mode 100644 index 000000000..cf8eafe65 --- /dev/null +++ b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/certificates/reloader.go @@ -0,0 +1,163 @@ +// Copyright (c) 2022 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package certificates + +import ( + "context" + "fmt" + "sync" + "time" + + secretutils "github.com/gardener/gardener/pkg/utils/secrets" + secretsmanager "github.com/gardener/gardener/pkg/utils/secrets/manager" + + corev1 "k8s.io/api/core/v1" + "k8s.io/client-go/util/workqueue" + "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/controller" + logf "sigs.k8s.io/controller-runtime/pkg/log" + "sigs.k8s.io/controller-runtime/pkg/manager" + "sigs.k8s.io/controller-runtime/pkg/reconcile" +) + +const certificateReloaderName = "webhook-certificate-reloader" + +// reloader is a simple reconciler that retrieves the current webhook server certificate managed by a secrets manager +// every syncPeriod and writes it to certDir. +type reloader struct { + // SyncPeriod is the frequency with which to reload the server cert. Defaults to 5m. + SyncPeriod time.Duration + // ServerSecretName is the server certificate config name. + ServerSecretName string + // Namespace where the server certificate secret is located in. + Namespace string + // Identity of the secrets manager used for managing the secret. + Identity string + + lock sync.Mutex + reader client.Reader + certDir string + newestServerSecretName string +} + +// AddToManager does an initial retrieval of an existing webhook server secret and then adds reloader to the given +// manager in order to periodically reload the secret from the cluster. +func (r *reloader) AddToManager(ctx context.Context, mgr manager.Manager) error { + r.reader = mgr.GetClient() + r.certDir = mgr.GetWebhookServer().CertDir + + // initial retrieval of server cert, needed in order for the webhook server to start successfully + found, _, serverCert, serverKey, err := r.getServerCert(ctx, mgr.GetAPIReader()) + if err != nil { + return err + } + + if !found { + // if we can't find a server cert secret on startup, the leader has not yet generated one + // exit and retry on next restart + return fmt.Errorf("couldn't find webhook server secret with name %q managed by secrets manager %q in namespace %q", r.ServerSecretName, r.Identity, r.Namespace) + } + + if err = writeCertificatesToDisk(r.certDir, serverCert, serverKey); err != nil { + return err + } + + // add controller that reloads the server cert secret periodically + ctrl, err := controller.NewUnmanaged(certificateReloaderName, mgr, controller.Options{ + Reconciler: r, + RecoverPanic: true, + // if going into exponential backoff, wait at most the configured sync period + RateLimiter: workqueue.NewWithMaxWaitRateLimiter(workqueue.DefaultControllerRateLimiter(), r.SyncPeriod), + }) + if err != nil { + return err + } + + if err = ctrl.Watch(triggerOnce, nil); err != nil { + return err + } + + // we need to run this controller in all replicas even if they aren't leader right now, so that webhook servers + // in stand-by replicas reload rotated server certificates as well + return mgr.Add(nonLeaderElectionRunnable{ctrl}) +} + +// Reconcile reloads the server certificates from the cluster and writes them to the cert directory if they have +// changed. From here, the controller-runtime's certwatcher will pick them up and use them for the webhook server. +func (r *reloader) Reconcile(ctx context.Context, _ reconcile.Request) (reconcile.Result, error) { + log := logf.FromContext(ctx).WithValues( + "secretConfigName", r.ServerSecretName, + "secretNamespace", r.Namespace, + "identity", r.Identity, + "certDir", r.certDir, + ) + + log.V(1).Info("Reloading server certificate from secret") + + found, secretName, serverCert, serverKey, err := r.getServerCert(ctx, r.reader) + if err != nil { + return reconcile.Result{}, fmt.Errorf("error retrieving secret %q from namespace %q", r.ServerSecretName, r.Namespace) + } + + if !found { + log.Info("Couldn't find webhook server secret, retrying") + return reconcile.Result{Requeue: true}, nil + } + + log = log.WithValues("secretName", secretName) + + r.lock.Lock() + defer r.lock.Unlock() + + // prevent unnecessary disk writes + if secretName == r.newestServerSecretName { + log.V(1).Info("Secret already written to disk, checking again later") + return reconcile.Result{RequeueAfter: r.SyncPeriod}, nil + } + + log.Info("Found new secret, writing certificate to disk") + if err = writeCertificatesToDisk(r.certDir, serverCert, serverKey); err != nil { + return reconcile.Result{}, err + } + + r.newestServerSecretName = secretName + return reconcile.Result{RequeueAfter: r.SyncPeriod}, nil +} + +func (r *reloader) getServerCert(ctx context.Context, reader client.Reader) (bool, string, []byte, []byte, error) { + secretList := &corev1.SecretList{} + if err := reader.List(ctx, secretList, client.InNamespace(r.Namespace), client.MatchingLabels{ + secretsmanager.LabelKeyName: r.ServerSecretName, + secretsmanager.LabelKeyManagedBy: secretsmanager.LabelValueSecretsManager, + secretsmanager.LabelKeyManagerIdentity: r.Identity, + }); err != nil { + return false, "", nil, nil, err + } + + if len(secretList.Items) != 1 { + return false, "", nil, nil, nil + } + + s := secretList.Items[0] + return true, s.Name, s.Data[secretutils.DataKeyCertificate], s.Data[secretutils.DataKeyPrivateKey], nil +} + +type nonLeaderElectionRunnable struct { + manager.Runnable +} + +func (n nonLeaderElectionRunnable) NeedLeaderElection() bool { + return false +} diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/cmd/options.go b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/cmd/options.go index b8e41cc9f..84941c127 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/cmd/options.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/cmd/options.go @@ -17,12 +17,17 @@ package cmd import ( "context" "fmt" + "sync/atomic" extensionswebhook "github.com/gardener/gardener/extensions/pkg/webhook" + "github.com/gardener/gardener/extensions/pkg/webhook/certificates" + extensionswebhookshoot "github.com/gardener/gardener/extensions/pkg/webhook/shoot" + "github.com/gardener/gardener/pkg/utils/flow" "github.com/spf13/pflag" admissionregistrationv1 "k8s.io/api/admissionregistration/v1" "k8s.io/apimachinery/pkg/util/sets" + "k8s.io/utils/clock" "sigs.k8s.io/controller-runtime/pkg/manager" ) @@ -167,18 +172,23 @@ func NewSwitchOptions(pairs ...NameToFactory) *SwitchOptions { // AddToManagerOptions are options to create an `AddToManager` function from ServerOptions and SwitchOptions. type AddToManagerOptions struct { - serverName string - Server ServerOptions - Switch SwitchOptions + extensionName string + shootWebhookManagedResourceName string + shootNamespaceSelector map[string]string + + Server ServerOptions + Switch SwitchOptions } // NewAddToManagerOptions creates new AddToManagerOptions with the given server name, server, and switch options. -// It is supposed to be used for webhooks which should be automatically registered in the cluster via a Mutatingwebhookconfiguration. -func NewAddToManagerOptions(serverName string, serverOpts *ServerOptions, switchOpts *SwitchOptions) *AddToManagerOptions { +// It is supposed to be used for webhooks which should be automatically registered in the cluster via a MutatingWebhookConfiguration. +func NewAddToManagerOptions(extensionName string, shootWebhookManagedResourceName string, shootNamespaceSelector map[string]string, serverOpts *ServerOptions, switchOpts *SwitchOptions) *AddToManagerOptions { return &AddToManagerOptions{ - serverName: serverName, - Server: *serverOpts, - Switch: *switchOpts, + extensionName: extensionName, + shootWebhookManagedResourceName: shootWebhookManagedResourceName, + shootNamespaceSelector: shootNamespaceSelector, + Server: *serverOpts, + Switch: *switchOpts, } } @@ -200,26 +210,37 @@ func (c *AddToManagerOptions) Complete() error { // Completed returns the completed AddToManagerConfig. Only call this if a previous call to `Complete` succeeded. func (c *AddToManagerOptions) Completed() *AddToManagerConfig { return &AddToManagerConfig{ - serverName: c.serverName, - Server: *c.Server.Completed(), - Switch: *c.Switch.Completed(), + extensionName: c.extensionName, + shootWebhookManagedResourceName: c.shootWebhookManagedResourceName, + shootNamespaceSelector: c.shootNamespaceSelector, + + Server: *c.Server.Completed(), + Switch: *c.Switch.Completed(), } } // AddToManagerConfig is a completed AddToManager configuration. type AddToManagerConfig struct { - serverName string - Server ServerConfig - Switch SwitchConfig + extensionName string + shootWebhookManagedResourceName string + shootNamespaceSelector map[string]string + + Server ServerConfig + Switch SwitchConfig + Clock clock.Clock } // AddToManager instantiates all webhooks of this configuration. If there are any webhooks, it creates a // webhook server, registers the webhooks and adds the server to the manager. Otherwise, it is a no-op. -// It generates and registers the seed targeted webhooks via a Mutatingwebhookconfiguration. -func (c *AddToManagerConfig) AddToManager(ctx context.Context, mgr manager.Manager) ([]admissionregistrationv1.MutatingWebhook, []admissionregistrationv1.MutatingWebhook, error) { +// It generates and registers the seed targeted webhooks via a MutatingWebhookConfiguration. +func (c *AddToManagerConfig) AddToManager(ctx context.Context, mgr manager.Manager) (*atomic.Value, error) { + if c.Clock == nil { + c.Clock = &clock.RealClock{} + } + webhooks, err := c.Switch.WebhooksFactory(mgr) if err != nil { - return nil, nil, fmt.Errorf("could not create webhooks: %w", err) + return nil, fmt.Errorf("could not create webhooks: %w", err) } webhookServer := mgr.GetWebhookServer() @@ -236,22 +257,120 @@ func (c *AddToManagerConfig) AddToManager(ctx context.Context, mgr manager.Manag } } - caBundle, err := extensionswebhook.GenerateCertificates(ctx, mgr, webhookServer.CertDir, c.Server.Namespace, c.serverName, c.Server.Mode, c.Server.URL) + seedWebhookConfig, shootWebhookConfig, err := extensionswebhook.BuildWebhookConfigs( + webhooks, + mgr.GetClient(), + c.Server.Namespace, + c.extensionName, + servicePort, + c.Server.Mode, + c.Server.URL, + nil, + ) if err != nil { - return nil, nil, fmt.Errorf("could not generate certificates: %w", err) + return nil, fmt.Errorf("could not create webhooks: %w", err) } - seedWebhooks, shootWebhooks, err := extensionswebhook.RegisterWebhooks(ctx, mgr, c.Server.Namespace, c.serverName, servicePort, c.Server.Mode, c.Server.URL, caBundle, webhooks) - if err != nil { - return nil, nil, fmt.Errorf("could not create webhooks: %w", err) + atomicShootWebhookConfig := &atomic.Value{} + + if c.Server.Namespace == "" { + // If the namespace is not set (e.g. when running locally), then we can't use the secrets manager for managing + // the webhook certificates. We simply generate a new certificate and write it to CertDir in this case. + mgr.GetLogger().Info("Running webhooks with unmanaged certificates (i.e., the webhook CA will not be rotated automatically). " + + "This mode is supposed to be used for development purposes only. Make sure to configure --webhook-config-namespace in production.") + + caBundle, err := certificates.GenerateUnmanagedCertificates(c.extensionName, webhookServer.CertDir, c.Server.Mode, c.Server.URL) + if err != nil { + return nil, fmt.Errorf("error generating new certificates for webhook server: %w", err) + } + + if err := extensionswebhook.InjectCABundleIntoWebhookConfig(shootWebhookConfig, caBundle); err != nil { + return nil, err + } + atomicShootWebhookConfig.Store(shootWebhookConfig.DeepCopy()) + + // register seed webhook config once we become leader – with the CA bundle we just generated + // also reconcile all shoot webhook configs to update the CA bundle + if err := mgr.Add(runOnceWithLeaderElection(flow.Sequential( + c.reconcileSeedWebhookConfig(mgr, seedWebhookConfig, caBundle), + c.reconcileShootWebhookConfigs(mgr, shootWebhookConfig, caBundle), + ))); err != nil { + return nil, err + } + + return atomicShootWebhookConfig, nil + } + + // register seed webhook config once we become leader – without CA bundle + // We only care about registering the desired webhooks here, but not the CA bundle, it will be managed by the + // reconciler. That's why we also don't reconcile the shoot webhook configs here. They are registered in the + // ControlPlane actuator and our reconciler will update the included CA bundles if necessary. + if err := mgr.Add(runOnceWithLeaderElection( + c.reconcileSeedWebhookConfig(mgr, seedWebhookConfig, nil), + )); err != nil { + return nil, err } - return seedWebhooks, shootWebhooks, nil + if err := certificates.AddCertificateManagementToManager( + ctx, + mgr, + c.Clock, + seedWebhookConfig, + shootWebhookConfig, + atomicShootWebhookConfig, + c.extensionName, + c.shootWebhookManagedResourceName, + c.shootNamespaceSelector, + c.Server.Namespace, + c.Server.Mode, + c.Server.URL, + ); err != nil { + return nil, err + } + + return atomicShootWebhookConfig, nil +} + +func (c *AddToManagerConfig) reconcileSeedWebhookConfig(mgr manager.Manager, seedWebhookConfig *admissionregistrationv1.MutatingWebhookConfiguration, caBundle []byte) func(ctx context.Context) error { + return func(ctx context.Context) error { + if seedWebhookConfig != nil { + if err := extensionswebhook.ReconcileSeedWebhookConfig(ctx, mgr.GetClient(), seedWebhookConfig, c.Server.Namespace, caBundle); err != nil { + return fmt.Errorf("error reconciling seed webhook config: %w", err) + } + } + return nil + } +} + +func (c *AddToManagerConfig) reconcileShootWebhookConfigs(mgr manager.Manager, shootWebhookConfig *admissionregistrationv1.MutatingWebhookConfiguration, caBundle []byte) func(ctx context.Context) error { + return func(ctx context.Context) error { + if shootWebhookConfig != nil { + if err := extensionswebhook.InjectCABundleIntoWebhookConfig(shootWebhookConfig, caBundle); err != nil { + return err + } + if err := extensionswebhookshoot.ReconcileWebhooksForAllNamespaces(ctx, mgr.GetClient(), c.extensionName, c.shootWebhookManagedResourceName, c.shootNamespaceSelector, mgr.GetWebhookServer().Port, shootWebhookConfig); err != nil { + return fmt.Errorf("error reconciling all shoot webhook configs: %w", err) + } + } + + return nil + } +} + +// runOnceWithLeaderElection is a function that is run exactly once when the manager, it is added to, becomes leader. +type runOnceWithLeaderElection func(ctx context.Context) error + +func (r runOnceWithLeaderElection) NeedLeaderElection() bool { + return true +} + +func (r runOnceWithLeaderElection) Start(ctx context.Context) error { + return r(ctx) } // NewAddToManagerSimpleOptions creates new AddToManagerSimpleOptions with the given switch options. // It can be used for webhooks which are required to run only without an automatic registration in the K8s cluster. -// Hence, Validatingwebhookconfiguration or Mutatingwebhookconfiguration must be created separately. +// Hence, ValidatingWebhookConfiguration or MutatingWebhookConfiguration must be created separately. func NewAddToManagerSimpleOptions(switchOpts *SwitchOptions) *AddToManagerSimpleOptions { return &AddToManagerSimpleOptions{ Switch: *switchOpts, @@ -286,7 +405,7 @@ type AddToManagerSimple struct { } // AddToManager makes the configured webhooks known to the given manager. -// The registration for these webhooks must happen separately via Validatingwebhookconfiguration or Mutatingwebhookconfiguration. +// The registration for these webhooks must happen separately via ValidatingWebhookConfiguration or MutatingWebhookConfiguration. func (s *AddToManagerSimple) AddToManager(mgr manager.Manager) error { webhooks, err := s.Switch.WebhooksFactory(mgr) if err != nil { diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/registration.go b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/registration.go index 8bfe17e0d..30c76a3a4 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/registration.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/registration.go @@ -23,12 +23,12 @@ import ( "github.com/gardener/gardener/pkg/utils/kubernetes" admissionregistrationv1 "k8s.io/api/admissionregistration/v1" + admissionregistrationv1beta1 "k8s.io/api/admissionregistration/v1beta1" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/utils/pointer" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/client/apiutil" - "sigs.k8s.io/controller-runtime/pkg/manager" ) const ( @@ -36,23 +36,32 @@ const ( NamePrefix = "gardener-extension-" // NameSuffixShoot is the suffix used for {Valida,Muta}tingWebhookConfigurations of extensions targeting a shoot. NameSuffixShoot = "-shoot" + // ModeService is a constant for the webhook mode indicating that the controller is running inside of the Kubernetes cluster it + // is serving. + ModeService = "service" + // ModeURL is a constant for the webhook mode indicating that the controller is running outside of the Kubernetes cluster it + // is serving. If this is set then a URL is required for configuration. + ModeURL = "url" + // ModeURLWithServiceName is a constant for the webhook mode indicating that the controller is running outside of the Kubernetes cluster it + // is serving but in the same cluster like the kube-apiserver. If this is set then a URL is required for configuration. + ModeURLWithServiceName = "url-service" ) -// RegisterWebhooks registers the given webhooks in the Kubernetes cluster targeted by the provided manager. -func RegisterWebhooks(ctx context.Context, mgr manager.Manager, namespace, providerName string, servicePort int, mode, url string, caBundle []byte, webhooks []*Webhook) (webhooksToRegisterSeed []admissionregistrationv1.MutatingWebhook, webhooksToRegisterShoot []admissionregistrationv1.MutatingWebhook, err error) { +// BuildWebhookConfigs builds MutatingWebhookConfiguration objects for seed and shoots from the given webhooks slice. +func BuildWebhookConfigs(webhooks []*Webhook, c client.Client, namespace, providerName string, servicePort int, mode, url string, caBundle []byte) (*admissionregistrationv1.MutatingWebhookConfiguration, *admissionregistrationv1.MutatingWebhookConfiguration, error) { var ( - exact = admissionregistrationv1.Exact - mutatingWebhookConfigurationSeed = &admissionregistrationv1.MutatingWebhookConfiguration{ObjectMeta: metav1.ObjectMeta{Name: NamePrefix + providerName}} + exact = admissionregistrationv1.Exact + sideEffects = admissionregistrationv1.SideEffectClassNone + + seedWebhooks []admissionregistrationv1.MutatingWebhook + shootWebhooks []admissionregistrationv1.MutatingWebhook ) for _, webhook := range webhooks { - var ( - rules []admissionregistrationv1.RuleWithOperations - sideEffects = admissionregistrationv1.SideEffectClassNone - ) + var rules []admissionregistrationv1.RuleWithOperations for _, t := range webhook.Types { - rule, err := buildRule(mgr, t) + rule, err := buildRule(c, t) if err != nil { return nil, nil, err } @@ -83,46 +92,163 @@ func RegisterWebhooks(ctx context.Context, mgr manager.Manager, namespace, provi webhookToRegister.FailurePolicy = getFailurePolicy(admissionregistrationv1.Fail, webhook.FailurePolicy) webhookToRegister.MatchPolicy = &exact webhookToRegister.ClientConfig = buildClientConfigFor(webhook, namespace, providerName, servicePort, mode, url, caBundle) - webhooksToRegisterSeed = append(webhooksToRegisterSeed, webhookToRegister) + seedWebhooks = append(seedWebhooks, webhookToRegister) case TargetShoot: webhookToRegister.FailurePolicy = getFailurePolicy(admissionregistrationv1.Ignore, webhook.FailurePolicy) webhookToRegister.MatchPolicy = &exact webhookToRegister.ClientConfig = buildClientConfigFor(webhook, namespace, providerName, servicePort, shootMode, url, caBundle) - webhooksToRegisterShoot = append(webhooksToRegisterShoot, webhookToRegister) + shootWebhooks = append(shootWebhooks, webhookToRegister) default: return nil, nil, fmt.Errorf("invalid webhook target: %s", webhook.Target) } + } + + var seedWebhookConfig, shootWebhookConfig *admissionregistrationv1.MutatingWebhookConfiguration + // if all webhooks for one target are removed in a new version, extensions need to explicitly delete the respective + // webhook config + if len(seedWebhooks) > 0 { + seedWebhookConfig = &admissionregistrationv1.MutatingWebhookConfiguration{ + ObjectMeta: metav1.ObjectMeta{Name: NamePrefix + providerName}, + Webhooks: seedWebhooks, + } } - if len(webhooksToRegisterSeed) > 0 { - c, err := getClient(mgr) - if err != nil { - return nil, nil, err + if len(shootWebhooks) > 0 { + shootWebhookConfig = &admissionregistrationv1.MutatingWebhookConfiguration{ + ObjectMeta: metav1.ObjectMeta{Name: NamePrefix + providerName + NameSuffixShoot}, + Webhooks: shootWebhooks, } + } - var ownerReference *metav1.OwnerReference - if len(namespace) > 0 { - ns := &corev1.Namespace{} - if err := c.Get(ctx, client.ObjectKey{Name: namespace}, ns); err != nil { - return nil, nil, err + return seedWebhookConfig, shootWebhookConfig, nil +} + +// ReconcileSeedWebhookConfig reconciles the given webhook config in the seed cluster. +// If a CA bundle is given, it is injected it into all desired webhooks. If not, the CA bundle from the webhook config +// on the cluster (if any) is kept. +func ReconcileSeedWebhookConfig(ctx context.Context, c client.Client, webhookConfig client.Object, ownerNamespace string, caBundle []byte) error { + var ownerReference *metav1.OwnerReference + if len(ownerNamespace) > 0 { + ns := &corev1.Namespace{} + if err := c.Get(ctx, client.ObjectKey{Name: ownerNamespace}, ns); err != nil { + return err + } + ownerReference = metav1.NewControllerRef(ns, corev1.SchemeGroupVersion.WithKind("Namespace")) + ownerReference.BlockOwnerDeletion = pointer.Bool(false) + } + + desiredWebhookConfig := webhookConfig.DeepCopyObject().(client.Object) + + if _, err := controllerutils.GetAndCreateOrStrategicMergePatch(ctx, c, webhookConfig, func() error { + if ownerReference != nil { + webhookConfig.SetOwnerReferences(kubernetes.MergeOwnerReferences(webhookConfig.GetOwnerReferences(), *ownerReference)) + } + + if len(caBundle) == 0 { + var err error + // we can safely assume, that the CA bundles in all webhooks are the same, as we manage it ourselves + caBundle, err = GetCABundleFromWebhookConfig(webhookConfig) + if err != nil { + return err } - ownerReference = metav1.NewControllerRef(ns, corev1.SchemeGroupVersion.WithKind("Namespace")) - ownerReference.BlockOwnerDeletion = pointer.Bool(false) } - if _, err := controllerutils.GetAndCreateOrStrategicMergePatch(ctx, c, mutatingWebhookConfigurationSeed, func() error { - if ownerReference != nil { - mutatingWebhookConfigurationSeed.SetOwnerReferences(kubernetes.MergeOwnerReferences(mutatingWebhookConfigurationSeed.GetOwnerReferences(), *ownerReference)) + if err := InjectCABundleIntoWebhookConfig(desiredWebhookConfig, caBundle); err != nil { + return err + } + return OverwriteWebhooks(webhookConfig, desiredWebhookConfig) + }); err != nil { + return fmt.Errorf("error reconciling seed webhook config: %w", err) + } + + return nil +} + +// OverwriteWebhooks sets current.Webhooks to desired.Webhooks for all kinds and version of webhook configs. +func OverwriteWebhooks(current, desired client.Object) error { + switch config := current.(type) { + case *admissionregistrationv1.MutatingWebhookConfiguration: + d := desired.(*admissionregistrationv1.MutatingWebhookConfiguration) + config.Webhooks = d.DeepCopy().Webhooks + case *admissionregistrationv1.ValidatingWebhookConfiguration: + d := desired.(*admissionregistrationv1.ValidatingWebhookConfiguration) + config.Webhooks = d.DeepCopy().Webhooks + case *admissionregistrationv1beta1.MutatingWebhookConfiguration: + d := desired.(*admissionregistrationv1beta1.MutatingWebhookConfiguration) + config.Webhooks = d.DeepCopy().Webhooks + case *admissionregistrationv1beta1.ValidatingWebhookConfiguration: + d := desired.(*admissionregistrationv1beta1.ValidatingWebhookConfiguration) + config.Webhooks = d.DeepCopy().Webhooks + default: + return fmt.Errorf("unexpected webhook config type: %T", current) + } + + return nil +} + +// GetCABundleFromWebhookConfig finds the first non-empty Webhooks[0].ClientConfig.CABundle from the given webhook config. +func GetCABundleFromWebhookConfig(obj client.Object) ([]byte, error) { + switch config := obj.(type) { + case *admissionregistrationv1.MutatingWebhookConfiguration: + for _, webhook := range config.Webhooks { + if caBundle := webhook.ClientConfig.CABundle; len(caBundle) > 0 { + return caBundle, nil + } + } + case *admissionregistrationv1.ValidatingWebhookConfiguration: + for _, webhook := range config.Webhooks { + if caBundle := webhook.ClientConfig.CABundle; len(caBundle) > 0 { + return caBundle, nil + } + } + case *admissionregistrationv1beta1.MutatingWebhookConfiguration: + for _, w := range config.Webhooks { + if caBundle := w.ClientConfig.CABundle; len(caBundle) > 0 { + return caBundle, nil } - mutatingWebhookConfigurationSeed.Webhooks = webhooksToRegisterSeed - return nil - }); err != nil { - return nil, nil, err } + case *admissionregistrationv1beta1.ValidatingWebhookConfiguration: + for _, webhook := range config.Webhooks { + if caBundle := webhook.ClientConfig.CABundle; len(caBundle) > 0 { + return caBundle, nil + } + } + default: + return nil, fmt.Errorf("unexpected webhook config type: %T", obj) } - return webhooksToRegisterSeed, webhooksToRegisterShoot, nil + return nil, nil +} + +// InjectCABundleIntoWebhookConfig sets the given CA bundle in all webhook client config in the given webhook config. +func InjectCABundleIntoWebhookConfig(obj client.Object, caBundle []byte) error { + switch config := obj.(type) { + case *admissionregistrationv1.MutatingWebhookConfiguration: + for i, w := range config.Webhooks { + w.ClientConfig.CABundle = caBundle + config.Webhooks[i] = w + } + case *admissionregistrationv1.ValidatingWebhookConfiguration: + for i, w := range config.Webhooks { + w.ClientConfig.CABundle = caBundle + config.Webhooks[i] = w + } + case *admissionregistrationv1beta1.MutatingWebhookConfiguration: + for i, w := range config.Webhooks { + w.ClientConfig.CABundle = caBundle + config.Webhooks[i] = w + } + case *admissionregistrationv1beta1.ValidatingWebhookConfiguration: + for i, w := range config.Webhooks { + w.ClientConfig.CABundle = caBundle + config.Webhooks[i] = w + } + default: + return fmt.Errorf("unexpected webhook config type: %T", obj) + } + + return nil } func getFailurePolicy(def admissionregistrationv1.FailurePolicyType, overwrite *admissionregistrationv1.FailurePolicyType) *admissionregistrationv1.FailurePolicyType { @@ -133,15 +259,15 @@ func getFailurePolicy(def admissionregistrationv1.FailurePolicyType, overwrite * } // buildRule creates and returns a RuleWithOperations for the given object type. -func buildRule(mgr manager.Manager, t Type) (*admissionregistrationv1.RuleWithOperations, error) { +func buildRule(c client.Client, t Type) (*admissionregistrationv1.RuleWithOperations, error) { // Get GVK from the type - gvk, err := apiutil.GVKForObject(t.Obj, mgr.GetScheme()) + gvk, err := apiutil.GVKForObject(t.Obj, c.Scheme()) if err != nil { return nil, fmt.Errorf("could not get GroupVersionKind from object %v: %w", t.Obj, err) } // Get REST mapping from GVK - mapping, err := mgr.GetRESTMapper().RESTMapping(gvk.GroupKind(), gvk.Version) + mapping, err := c.RESTMapper().RESTMapping(gvk.GroupKind(), gvk.Version) if err != nil { return nil, fmt.Errorf("could not get REST mapping from GroupVersionKind '%s': %w", gvk.String(), err) } @@ -166,19 +292,19 @@ func buildRule(mgr manager.Manager, t Type) (*admissionregistrationv1.RuleWithOp } func buildClientConfigFor(webhook *Webhook, namespace, providerName string, servicePort int, mode, url string, caBundle []byte) admissionregistrationv1.WebhookClientConfig { - path := "/" + webhook.Path - - clientConfig := admissionregistrationv1.WebhookClientConfig{ - CABundle: caBundle, - } + var ( + path = "/" + webhook.Path + clientConfig = admissionregistrationv1.WebhookClientConfig{ + // can be empty if injected later on + CABundle: caBundle, + } + ) switch mode { case ModeURL: - url := fmt.Sprintf("https://%s%s", url, path) - clientConfig.URL = &url + clientConfig.URL = pointer.String(fmt.Sprintf("https://%s%s", url, path)) case ModeURLWithServiceName: - url := fmt.Sprintf("https://gardener-extension-%s.%s:%d%s", providerName, namespace, servicePort, path) - clientConfig.URL = &url + clientConfig.URL = pointer.String(fmt.Sprintf("https://gardener-extension-%s.%s:%d%s", providerName, namespace, servicePort, path)) case ModeService: clientConfig.Service = &admissionregistrationv1.ServiceReference{ Namespace: namespace, diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/shoot/networkpolicy.go b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/shoot/networkpolicy.go index 94211811e..410611a96 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/shoot/networkpolicy.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/shoot/networkpolicy.go @@ -29,14 +29,14 @@ import ( ) // GetNetworkPolicyMeta returns the network policy object with filled meta data. -func GetNetworkPolicyMeta(namespace, providerName string) *networkingv1.NetworkPolicy { - return &networkingv1.NetworkPolicy{ObjectMeta: kutil.ObjectMeta(namespace, "gardener-extension-"+providerName)} +func GetNetworkPolicyMeta(namespace, extensionName string) *networkingv1.NetworkPolicy { + return &networkingv1.NetworkPolicy{ObjectMeta: kutil.ObjectMeta(namespace, "gardener-extension-"+extensionName)} } -// EnsureNetworkPolicy ensures that the required network policy that allows the kube-apiserver running in the given namespace -// to talk to the extension webhook is installed. -func EnsureNetworkPolicy(ctx context.Context, c client.Client, namespace, providerName string, port int) error { - networkPolicy := GetNetworkPolicyMeta(namespace, providerName) +// EnsureNetworkPolicy ensures that the required network policy that allows the kube-apiserver running in the given +// namespace to talk to the extension webhook is installed. +func EnsureNetworkPolicy(ctx context.Context, c client.Client, namespace, extensionName string, port int) error { + networkPolicy := GetNetworkPolicyMeta(namespace, extensionName) policyPort := intstr.FromInt(port) policyProtocol := corev1.ProtocolTCP @@ -56,13 +56,12 @@ func EnsureNetworkPolicy(ctx context.Context, c client.Client, namespace, provid { NamespaceSelector: &metav1.LabelSelector{ MatchLabels: map[string]string{ - v1beta1constants.LabelControllerRegistrationName: providerName, - v1beta1constants.GardenRole: v1beta1constants.GardenRoleExtension, + v1beta1constants.GardenRole: v1beta1constants.GardenRoleExtension, }, }, PodSelector: &metav1.LabelSelector{ MatchLabels: map[string]string{ - "app.kubernetes.io/name": "gardener-extension-" + providerName, + "app.kubernetes.io/name": "gardener-extension-" + extensionName, }, }, }, diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/shoot/webhook.go b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/shoot/webhook.go new file mode 100644 index 000000000..09a842489 --- /dev/null +++ b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/shoot/webhook.go @@ -0,0 +1,117 @@ +// Copyright (c) 2022 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package shoot + +import ( + "context" + "fmt" + + "github.com/gardener/gardener/extensions/pkg/controller" + v1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants" + "github.com/gardener/gardener/pkg/client/kubernetes" + "github.com/gardener/gardener/pkg/extensions" + "github.com/gardener/gardener/pkg/utils" + "github.com/gardener/gardener/pkg/utils/flow" + kutil "github.com/gardener/gardener/pkg/utils/kubernetes" + "github.com/gardener/gardener/pkg/utils/managedresources" + + admissionregistrationv1 "k8s.io/api/admissionregistration/v1" + corev1 "k8s.io/api/core/v1" + networkingv1 "k8s.io/api/networking/v1" + "k8s.io/apimachinery/pkg/api/errors" + "sigs.k8s.io/controller-runtime/pkg/client" +) + +// ReconcileWebhookConfig deploys the shoot webhook configuration, i.e., a network policy to allow the +// kube-apiserver to talk to the extension, and a managed resource that contains the MutatingWebhookConfiguration. +func ReconcileWebhookConfig( + ctx context.Context, + c client.Client, + namespace string, + extensionName string, + managedResourceName string, + serverPort int, + shootWebhookConfig *admissionregistrationv1.MutatingWebhookConfiguration, + cluster *controller.Cluster, +) error { + if err := EnsureNetworkPolicy(ctx, c, namespace, extensionName, serverPort); err != nil { + return fmt.Errorf("could not create or update network policy for shoot webhooks in namespace '%s': %w", namespace, err) + } + + if cluster.Shoot == nil { + return fmt.Errorf("no shoot found in cluster resource") + } + + data, err := managedresources. + NewRegistry(kubernetes.ShootScheme, kubernetes.ShootCodec, kubernetes.ShootSerializer). + AddAllAndSerialize(shootWebhookConfig) + if err != nil { + return err + } + + if err := managedresources.Create(ctx, c, namespace, managedResourceName, false, "", data, nil, nil, nil); err != nil { + return fmt.Errorf("could not create or update managed resource '%s/%s' containing shoot webhooks: %w", namespace, managedResourceName, err) + } + + return nil +} + +// ReconcileWebhooksForAllNamespaces reconciles the shoot webhooks in all shoot namespaces of the given +// provider type. This is necessary in case the webhook port is changed (otherwise, the network policy would only be +// updated again as part of the ControlPlane reconciliation which might only happen in the next 24h). +func ReconcileWebhooksForAllNamespaces( + ctx context.Context, + c client.Client, + extensionName string, + managedResourceName string, + shootNamespaceSelector map[string]string, + port int, + shootWebhookConfig *admissionregistrationv1.MutatingWebhookConfiguration, +) error { + namespaceList := &corev1.NamespaceList{} + if err := c.List(ctx, namespaceList, client.MatchingLabels(utils.MergeStringMaps(map[string]string{ + v1beta1constants.GardenRole: v1beta1constants.GardenRoleShoot, + }, shootNamespaceSelector))); err != nil { + return err + } + + fns := make([]flow.TaskFn, 0, len(namespaceList.Items)) + + for _, namespace := range namespaceList.Items { + var ( + networkPolicy = GetNetworkPolicyMeta(namespace.Name, extensionName) + namespaceName = namespace.Name + networkPolicyName = networkPolicy.Name + ) + + fns = append(fns, func(ctx context.Context) error { + if err := c.Get(ctx, kutil.Key(namespaceName, networkPolicyName), &networkingv1.NetworkPolicy{}); err != nil { + if !errors.IsNotFound(err) { + return err + } + return nil + } + + cluster, err := extensions.GetCluster(ctx, c, namespaceName) + if err != nil { + return err + } + + return ReconcileWebhookConfig(ctx, c, namespaceName, extensionName, managedResourceName, port, shootWebhookConfig.DeepCopy(), cluster) + }) + } + + return flow.Parallel(fns...)(ctx) +} diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/webhook.go b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/webhook.go index 06d2151c0..7b4b9a404 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/webhook.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/webhook.go @@ -31,17 +31,11 @@ const ( TargetSeed = "seed" // TargetShoot defines that the webhook is to be installed in the shoot. TargetShoot = "shoot" - - // ValidatorName is a common name for a validation webhook. - ValidatorName = "validator" - // ValidatorPath is a common path for a validation webhook. - ValidatorPath = "/webhooks/validate" ) // Webhook is the specification of a webhook. type Webhook struct { Name string - Kind string Provider string Path string Target string diff --git a/vendor/github.com/gardener/gardener/hack/.ci/component_descriptor b/vendor/github.com/gardener/gardener/hack/.ci/component_descriptor index 717041da1..eea5eb2ef 100755 --- a/vendor/github.com/gardener/gardener/hack/.ci/component_descriptor +++ b/vendor/github.com/gardener/gardener/hack/.ci/component_descriptor @@ -1,5 +1,18 @@ #!/usr/bin/env bash +# Configuration Options: +# +# COMPONENT_PREFIXES: Set the image prefix that should be used to +# determine if an image is defined by another component. +# Defaults to "eu.gcr.io/gardener-project/gardener" +# +# GENERIC_DEPENDENCIES: Set images that are generic dependencies with no specific tag. +# Defaults to "hyperkube,kube-apiserver,kube-controller-manager,kube-scheduler,kube-proxy" +# +# COMPONENT_CLI_ARGS: Set all component-cli arguments. +# This should be used with care as all defaults are overwritten. +# + set -e repo_root_dir="$1" @@ -36,12 +49,26 @@ fi echo "Enriching component descriptor from ${BASE_DEFINITION_PATH}" if [[ -f "$repo_root_dir/charts/images.yaml" ]]; then + # default environment variables + if [[ -z "${COMPONENT_PREFIXES}" ]]; then + COMPONENT_PREFIXES="eu.gcr.io/gardener-project/gardener" + fi + if [[ -z "${GENERIC_DEPENDENCIES}" ]]; then + GENERIC_DEPENDENCIES="hyperkube,kube-apiserver,kube-controller-manager,kube-scheduler,kube-proxy" + fi + + if [[ -z "${COMPONENT_CLI_ARGS}" ]]; then + COMPONENT_CLI_ARGS=" + --comp-desc ${BASE_DEFINITION_PATH} \ + --image-vector "$repo_root_dir/charts/images.yaml" \ + --component-prefixes "${COMPONENT_PREFIXES}" \ + --generic-dependencies "${GENERIC_DEPENDENCIES}" \ + " + fi + # translates all images defined the images.yaml into component descriptor resources. # For detailed documentation see https://github.com/gardener/component-cli/blob/main/docs/reference/components-cli_image-vector_add.md - component-cli image-vector add --comp-desc ${BASE_DEFINITION_PATH} \ - --image-vector "$repo_root_dir/charts/images.yaml" \ - --component-prefixes eu.gcr.io/gardener-project/gardener \ - --generic-dependencies hyperkube,kube-apiserver,kube-controller-manager,kube-scheduler,kube-proxy + component-cli image-vector add ${COMPONENT_CLI_ARGS} fi if [[ -d "$repo_root_dir/charts/" ]]; then diff --git a/vendor/github.com/gardener/gardener/hack/.ci/set_dependency_version b/vendor/github.com/gardener/gardener/hack/.ci/set_dependency_version index 8ffa5a692..80afe8382 100755 --- a/vendor/github.com/gardener/gardener/hack/.ci/set_dependency_version +++ b/vendor/github.com/gardener/gardener/hack/.ci/set_dependency_version @@ -110,13 +110,17 @@ if name == 'autoscaler': elif name == 'vpn': names = ['vpn-seed', 'vpn-shoot'] elif name == 'vpn2': - names = ['vpn-seed-server'] + names = ['vpn-seed-server', 'vpn-shoot-client'] elif name == 'external-dns-management': names = ['dns-controller-manager'] elif name == 'logging': names = ['fluent-bit-plugin-installer', 'loki-curator', 'telegraf'] elif name == 'etcd-custom-image': names = ['etcd'] +elif name == 'egress-filter-refresher': + names = ['egress-filter-blackholer', 'egress-filter-firewaller'] +elif name == 'apiserver-proxy': + names = ['apiserver-proxy-sidecar', 'apiserver-proxy-pod-webhook'] else: names = [name] diff --git a/vendor/github.com/gardener/gardener/hack/test-e2e-local.sh b/vendor/github.com/gardener/gardener/hack/test-e2e-local.sh index 211d23ed7..f8e729360 100755 --- a/vendor/github.com/gardener/gardener/hack/test-e2e-local.sh +++ b/vendor/github.com/gardener/gardener/hack/test-e2e-local.sh @@ -4,6 +4,8 @@ set -o errexit set -o nounset set -o pipefail +echo "> E2E Tests" + # reduce flakiness in contended pipelines export GOMEGA_DEFAULT_EVENTUALLY_TIMEOUT=5s export GOMEGA_DEFAULT_EVENTUALLY_POLLING_INTERVAL=200ms @@ -19,6 +21,12 @@ ginkgo_flags= if [ -n "${CI:-}" -a -n "${ARTIFACTS:-}" ] ; then mkdir -p "$ARTIFACTS" ginkgo_flags="--output-dir=$ARTIFACTS --junit-report=junit.xml" + + printf "\n127.0.0.1 api.e2e-default.local.external.local.gardener.cloud\n127.0.0.1 api.e2e-default.local.internal.local.gardener.cloud\n" >> /etc/hosts +else + if ! grep -q "127.0.0.1 api.e2e-default.local.external.local.gardener.cloud" /etc/hosts ; then + printf "To access the shoot cluster and running e2e tests, you have to extend your /etc/hosts file.\nPlease refer https://github.com/gardener/gardener/blob/master/docs/deployment/getting_started_locally.md#accessing-the-shoot-cluster" + fi fi GO111MODULE=on ginkgo --timeout=1h $ginkgo_flags --v --progress "$@" ./test/e2e/... diff --git a/vendor/github.com/gardener/gardener/hack/test-integration.sh b/vendor/github.com/gardener/gardener/hack/test-integration.sh index 223cb50af..7fa20e2db 100755 --- a/vendor/github.com/gardener/gardener/hack/test-integration.sh +++ b/vendor/github.com/gardener/gardener/hack/test-integration.sh @@ -26,8 +26,15 @@ if ! command -v setup-envtest &> /dev/null ; then exit 1 fi +ARCH= +# if using M1 macbook, use amd64 architecture build, as suggested in +# https://github.com/kubernetes-sigs/controller-runtime/issues/1657#issuecomment-988484517 +if [[ $(uname) == 'Darwin' && $(uname -m) == 'arm64' ]]; then + ARCH='--arch=amd64' +fi + # --use-env allows overwriting the envtest tools path via the KUBEBUILDER_ASSETS env var just like it was before -export KUBEBUILDER_ASSETS="$(setup-envtest use --use-env -p path ${ENVTEST_K8S_VERSION})" +export KUBEBUILDER_ASSETS="$(setup-envtest ${ARCH} use --use-env -p path ${ENVTEST_K8S_VERSION})" echo "using envtest tools installed at '$KUBEBUILDER_ASSETS'" echo "> Integration Tests" diff --git a/vendor/github.com/gardener/gardener/hack/test.sh b/vendor/github.com/gardener/gardener/hack/test.sh index 55c7297f3..b1201ddf8 100755 --- a/vendor/github.com/gardener/gardener/hack/test.sh +++ b/vendor/github.com/gardener/gardener/hack/test.sh @@ -24,9 +24,13 @@ test_flags= # If running in prow, we want to generate a machine-readable output file under the location specified via $ARTIFACTS. # This will add a JUnit view above the build log that shows an overview over successful and failed test cases. if [ -n "${CI:-}" -a -n "${ARTIFACTS:-}" ] ; then - mkdir -p "$ARTIFACTS" - trap "report-collector \"$ARTIFACTS/junit.xml\"" EXIT - test_flags="--ginkgo.junit-report=junit.xml" + if which report-collector &>/dev/null; then + mkdir -p "$ARTIFACTS" + trap "report-collector \"$ARTIFACTS/junit.xml\"" EXIT + test_flags="--ginkgo.junit-report=junit.xml" + else + echo "report-collector not found in PATH, not generating machine-readable test report" + fi fi GO111MODULE=on go test -race -timeout=2m -mod=vendor $@ $test_flags | grep -v 'no test files' diff --git a/vendor/github.com/gardener/gardener/hack/tools.mk b/vendor/github.com/gardener/gardener/hack/tools.mk index 4d6edfd93..560633062 100755 --- a/vendor/github.com/gardener/gardener/hack/tools.mk +++ b/vendor/github.com/gardener/gardener/hack/tools.mk @@ -53,9 +53,9 @@ GO_APIDIFF := $(TOOLS_BIN_DIR)/go-apidiff # default tool versions DOCFORGE_VERSION ?= v0.28.0 -GOLANGCI_LINT_VERSION ?= v1.44.0 +GOLANGCI_LINT_VERSION ?= v1.45.2 HELM_VERSION ?= v3.6.3 -KIND_VERSION ?= v0.11.1 +KIND_VERSION ?= v0.14.0 SKAFFOLD_VERSION ?= v1.35.0 YQ_VERSION ?= v4.9.6 GO_APIDIFF_VERSION ?= v0.3.0 diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/types_common.go b/vendor/github.com/gardener/gardener/pkg/apis/core/types_common.go index 41eacee10..bb190c86d 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/types_common.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/types_common.go @@ -47,6 +47,10 @@ const ( ErrorConfigurationProblem ErrorCode = "ERR_CONFIGURATION_PROBLEM" // ErrorRetryableConfigurationProblem indicates that the last error occurred due to a retryable configuration problem. ErrorRetryableConfigurationProblem ErrorCode = "ERR_RETRYABLE_CONFIGURATION_PROBLEM" + // ErrorProblematicWebhook indicates that the last error occurred due to a webhook not following the Kubernetes + // best practices (https://kubernetes.io/docs/reference/access-authn-authz/extensible-admission-controllers/#best-practices-and-warnings). + // It is classified as a non-retryable error code. + ErrorProblematicWebhook ErrorCode = "ERR_PROBLEMATIC_WEBHOOK" ) // LastError indicates the last occurred error for an operation on a resource. diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/types_project.go b/vendor/github.com/gardener/gardener/pkg/apis/core/types_project.go index 9876e0d2b..25ec07dcc 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/types_project.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/types_project.go @@ -118,6 +118,8 @@ const ( ProjectMemberViewer = "viewer" // ProjectMemberUserAccessManager is a const for a role that provides permissions to manage human user(s, (groups)). ProjectMemberUserAccessManager = "uam" + // ProjectMemberServiceAccountManager is a const for a role that provides permissions to manage service accounts and request tokens for them. + ProjectMemberServiceAccountManager = "serviceaccountmanager" // ProjectMemberExtensionPrefix is a prefix for custom roles that are not known by Gardener. ProjectMemberExtensionPrefix = "extension:" ) diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/types_seed.go b/vendor/github.com/gardener/gardener/pkg/apis/core/types_seed.go index d2015a27c..cf0036b56 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/types_seed.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/types_seed.go @@ -201,6 +201,7 @@ type SeedSettings struct { // Scheduling controls settings for scheduling decisions for the seed. Scheduling *SeedSettingScheduling // ShootDNS controls the shoot DNS settings for the seed. + // Deprecated: This field is deprecated and will be removed in a future version of Gardener. Do not use it. ShootDNS *SeedSettingShootDNS // LoadBalancerServices controls certain settings for services of type load balancer that are created in the seed. LoadBalancerServices *SeedSettingLoadBalancerServices @@ -321,6 +322,8 @@ const ( SeedExtensionsReady ConditionType = "ExtensionsReady" // SeedGardenletReady is a constant for a condition type indicating that the Gardenlet is ready. SeedGardenletReady ConditionType = "GardenletReady" + // SeedSystemComponentsHealthy is a constant for a condition type indicating the system components health. + SeedSystemComponentsHealthy ConditionType = "SeedSystemComponentsHealthy" ) // Resource constants for Gardener object types diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/types_shoot.go b/vendor/github.com/gardener/gardener/pkg/apis/core/types_shoot.go index a5706fc37..7e9021b75 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/types_shoot.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/types_shoot.go @@ -122,6 +122,9 @@ type ShootStatus struct { Gardener Gardener // IsHibernated indicates whether the Shoot is currently hibernated. IsHibernated bool + // LastHibernationTriggerTime indicates the last time when the hibernation controller + // managed to change the hibernation settings of the cluster + LastHibernationTriggerTime *metav1.Time // LastOperation holds information about the last operation on the Shoot. LastOperation *LastOperation // LastErrors holds information about the last occurred error(s) during an operation. @@ -165,6 +168,12 @@ type ShootCredentialsRotation struct { Kubeconfig *ShootKubeconfigRotation // SSHKeypair contains information about the ssh-keypair credential rotation. SSHKeypair *ShootSSHKeypairRotation + // Observability contains information about the observability credential rotation. + Observability *ShootObservabilityRotation + // ServiceAccountKey contains information about the service account key credential rotation. + ServiceAccountKey *ShootServiceAccountKeyRotation + // ETCDEncryptionKey contains information about the ETCD encryption key credential rotation. + ETCDEncryptionKey *ShootETCDEncryptionKeyRotation } // ShootCARotation contains information about the certificate authority credential rotation. @@ -194,6 +203,36 @@ type ShootSSHKeypairRotation struct { LastCompletionTime *metav1.Time } +// ShootObservabilityRotation contains information about the observability credential rotation. +type ShootObservabilityRotation struct { + // LastInitiationTime is the most recent time when the observability credential rotation was initiated. + LastInitiationTime *metav1.Time + // LastCompletionTime is the most recent time when the observability credential rotation was successfully completed. + LastCompletionTime *metav1.Time +} + +// ShootServiceAccountKeyRotation contains information about the service account key credential rotation. +type ShootServiceAccountKeyRotation struct { + // Phase describes the phase of the service account key credential rotation. + Phase ShootCredentialsRotationPhase + // LastInitiationTime is the most recent time when the service account key credential rotation was initiated. + LastInitiationTime *metav1.Time + // LastCompletionTime is the most recent time when the service account key credential rotation was successfully + // completed. + LastCompletionTime *metav1.Time +} + +// ShootETCDEncryptionKeyRotation contains information about the ETCD encryption key credential rotation. +type ShootETCDEncryptionKeyRotation struct { + // Phase describes the phase of the ETCD encryption key credential rotation. + Phase ShootCredentialsRotationPhase + // LastInitiationTime is the most recent time when the ETCD encryption key credential rotation was initiated. + LastInitiationTime *metav1.Time + // LastCompletionTime is the most recent time when the ETCD encryption key credential rotation was successfully + // completed. + LastCompletionTime *metav1.Time +} + // ShootCredentialsRotationPhase is a string alias. type ShootCredentialsRotationPhase string @@ -518,6 +557,7 @@ type ServiceAccountConfig struct { // SigningKeySecret is a reference to a secret that contains an optional private key of the // service account token issuer. The issuer will sign issued ID tokens with this private key. // Only useful if service account tokens are also issued by another external system. + // Deprecated: This field is deprecated and will be removed in a future version of Gardener. Do not use it. SigningKeySecret *corev1.LocalObjectReference // ExtendTokenExpiration turns on projected service account expiration extension during token generation, which // helps safe transition from legacy token to bound service account token feature. If this flag is enabled, diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/generated.pb.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/generated.pb.go index a85882363..a09af085b 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/generated.pb.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/generated.pb.go @@ -3919,10 +3919,38 @@ func (m *ShootCredentialsRotation) XXX_DiscardUnknown() { var xxx_messageInfo_ShootCredentialsRotation proto.InternalMessageInfo +func (m *ShootETCDEncryptionKeyRotation) Reset() { *m = ShootETCDEncryptionKeyRotation{} } +func (*ShootETCDEncryptionKeyRotation) ProtoMessage() {} +func (*ShootETCDEncryptionKeyRotation) Descriptor() ([]byte, []int) { + return fileDescriptor_f1caaec5647a9dbf, []int{138} +} +func (m *ShootETCDEncryptionKeyRotation) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ShootETCDEncryptionKeyRotation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ShootETCDEncryptionKeyRotation) XXX_Merge(src proto.Message) { + xxx_messageInfo_ShootETCDEncryptionKeyRotation.Merge(m, src) +} +func (m *ShootETCDEncryptionKeyRotation) XXX_Size() int { + return m.Size() +} +func (m *ShootETCDEncryptionKeyRotation) XXX_DiscardUnknown() { + xxx_messageInfo_ShootETCDEncryptionKeyRotation.DiscardUnknown(m) +} + +var xxx_messageInfo_ShootETCDEncryptionKeyRotation proto.InternalMessageInfo + func (m *ShootKubeconfigRotation) Reset() { *m = ShootKubeconfigRotation{} } func (*ShootKubeconfigRotation) ProtoMessage() {} func (*ShootKubeconfigRotation) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{138} + return fileDescriptor_f1caaec5647a9dbf, []int{139} } func (m *ShootKubeconfigRotation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3950,7 +3978,7 @@ var xxx_messageInfo_ShootKubeconfigRotation proto.InternalMessageInfo func (m *ShootList) Reset() { *m = ShootList{} } func (*ShootList) ProtoMessage() {} func (*ShootList) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{139} + return fileDescriptor_f1caaec5647a9dbf, []int{140} } func (m *ShootList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3978,7 +4006,7 @@ var xxx_messageInfo_ShootList proto.InternalMessageInfo func (m *ShootMachineImage) Reset() { *m = ShootMachineImage{} } func (*ShootMachineImage) ProtoMessage() {} func (*ShootMachineImage) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{140} + return fileDescriptor_f1caaec5647a9dbf, []int{141} } func (m *ShootMachineImage) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4006,7 +4034,7 @@ var xxx_messageInfo_ShootMachineImage proto.InternalMessageInfo func (m *ShootNetworks) Reset() { *m = ShootNetworks{} } func (*ShootNetworks) ProtoMessage() {} func (*ShootNetworks) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{141} + return fileDescriptor_f1caaec5647a9dbf, []int{142} } func (m *ShootNetworks) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4031,10 +4059,38 @@ func (m *ShootNetworks) XXX_DiscardUnknown() { var xxx_messageInfo_ShootNetworks proto.InternalMessageInfo +func (m *ShootObservabilityRotation) Reset() { *m = ShootObservabilityRotation{} } +func (*ShootObservabilityRotation) ProtoMessage() {} +func (*ShootObservabilityRotation) Descriptor() ([]byte, []int) { + return fileDescriptor_f1caaec5647a9dbf, []int{143} +} +func (m *ShootObservabilityRotation) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ShootObservabilityRotation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ShootObservabilityRotation) XXX_Merge(src proto.Message) { + xxx_messageInfo_ShootObservabilityRotation.Merge(m, src) +} +func (m *ShootObservabilityRotation) XXX_Size() int { + return m.Size() +} +func (m *ShootObservabilityRotation) XXX_DiscardUnknown() { + xxx_messageInfo_ShootObservabilityRotation.DiscardUnknown(m) +} + +var xxx_messageInfo_ShootObservabilityRotation proto.InternalMessageInfo + func (m *ShootSSHKeypairRotation) Reset() { *m = ShootSSHKeypairRotation{} } func (*ShootSSHKeypairRotation) ProtoMessage() {} func (*ShootSSHKeypairRotation) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{142} + return fileDescriptor_f1caaec5647a9dbf, []int{144} } func (m *ShootSSHKeypairRotation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4059,10 +4115,38 @@ func (m *ShootSSHKeypairRotation) XXX_DiscardUnknown() { var xxx_messageInfo_ShootSSHKeypairRotation proto.InternalMessageInfo +func (m *ShootServiceAccountKeyRotation) Reset() { *m = ShootServiceAccountKeyRotation{} } +func (*ShootServiceAccountKeyRotation) ProtoMessage() {} +func (*ShootServiceAccountKeyRotation) Descriptor() ([]byte, []int) { + return fileDescriptor_f1caaec5647a9dbf, []int{145} +} +func (m *ShootServiceAccountKeyRotation) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ShootServiceAccountKeyRotation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ShootServiceAccountKeyRotation) XXX_Merge(src proto.Message) { + xxx_messageInfo_ShootServiceAccountKeyRotation.Merge(m, src) +} +func (m *ShootServiceAccountKeyRotation) XXX_Size() int { + return m.Size() +} +func (m *ShootServiceAccountKeyRotation) XXX_DiscardUnknown() { + xxx_messageInfo_ShootServiceAccountKeyRotation.DiscardUnknown(m) +} + +var xxx_messageInfo_ShootServiceAccountKeyRotation proto.InternalMessageInfo + func (m *ShootSpec) Reset() { *m = ShootSpec{} } func (*ShootSpec) ProtoMessage() {} func (*ShootSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{143} + return fileDescriptor_f1caaec5647a9dbf, []int{146} } func (m *ShootSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4090,7 +4174,7 @@ var xxx_messageInfo_ShootSpec proto.InternalMessageInfo func (m *ShootState) Reset() { *m = ShootState{} } func (*ShootState) ProtoMessage() {} func (*ShootState) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{144} + return fileDescriptor_f1caaec5647a9dbf, []int{147} } func (m *ShootState) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4118,7 +4202,7 @@ var xxx_messageInfo_ShootState proto.InternalMessageInfo func (m *ShootStateList) Reset() { *m = ShootStateList{} } func (*ShootStateList) ProtoMessage() {} func (*ShootStateList) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{145} + return fileDescriptor_f1caaec5647a9dbf, []int{148} } func (m *ShootStateList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4146,7 +4230,7 @@ var xxx_messageInfo_ShootStateList proto.InternalMessageInfo func (m *ShootStateSpec) Reset() { *m = ShootStateSpec{} } func (*ShootStateSpec) ProtoMessage() {} func (*ShootStateSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{146} + return fileDescriptor_f1caaec5647a9dbf, []int{149} } func (m *ShootStateSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4174,7 +4258,7 @@ var xxx_messageInfo_ShootStateSpec proto.InternalMessageInfo func (m *ShootStatus) Reset() { *m = ShootStatus{} } func (*ShootStatus) ProtoMessage() {} func (*ShootStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{147} + return fileDescriptor_f1caaec5647a9dbf, []int{150} } func (m *ShootStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4202,7 +4286,7 @@ var xxx_messageInfo_ShootStatus proto.InternalMessageInfo func (m *SystemComponents) Reset() { *m = SystemComponents{} } func (*SystemComponents) ProtoMessage() {} func (*SystemComponents) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{148} + return fileDescriptor_f1caaec5647a9dbf, []int{151} } func (m *SystemComponents) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4230,7 +4314,7 @@ var xxx_messageInfo_SystemComponents proto.InternalMessageInfo func (m *Toleration) Reset() { *m = Toleration{} } func (*Toleration) ProtoMessage() {} func (*Toleration) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{149} + return fileDescriptor_f1caaec5647a9dbf, []int{152} } func (m *Toleration) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4258,7 +4342,7 @@ var xxx_messageInfo_Toleration proto.InternalMessageInfo func (m *VerticalPodAutoscaler) Reset() { *m = VerticalPodAutoscaler{} } func (*VerticalPodAutoscaler) ProtoMessage() {} func (*VerticalPodAutoscaler) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{150} + return fileDescriptor_f1caaec5647a9dbf, []int{153} } func (m *VerticalPodAutoscaler) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4286,7 +4370,7 @@ var xxx_messageInfo_VerticalPodAutoscaler proto.InternalMessageInfo func (m *Volume) Reset() { *m = Volume{} } func (*Volume) ProtoMessage() {} func (*Volume) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{151} + return fileDescriptor_f1caaec5647a9dbf, []int{154} } func (m *Volume) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4314,7 +4398,7 @@ var xxx_messageInfo_Volume proto.InternalMessageInfo func (m *VolumeType) Reset() { *m = VolumeType{} } func (*VolumeType) ProtoMessage() {} func (*VolumeType) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{152} + return fileDescriptor_f1caaec5647a9dbf, []int{155} } func (m *VolumeType) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4342,7 +4426,7 @@ var xxx_messageInfo_VolumeType proto.InternalMessageInfo func (m *WatchCacheSizes) Reset() { *m = WatchCacheSizes{} } func (*WatchCacheSizes) ProtoMessage() {} func (*WatchCacheSizes) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{153} + return fileDescriptor_f1caaec5647a9dbf, []int{156} } func (m *WatchCacheSizes) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4370,7 +4454,7 @@ var xxx_messageInfo_WatchCacheSizes proto.InternalMessageInfo func (m *Worker) Reset() { *m = Worker{} } func (*Worker) ProtoMessage() {} func (*Worker) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{154} + return fileDescriptor_f1caaec5647a9dbf, []int{157} } func (m *Worker) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4398,7 +4482,7 @@ var xxx_messageInfo_Worker proto.InternalMessageInfo func (m *WorkerKubernetes) Reset() { *m = WorkerKubernetes{} } func (*WorkerKubernetes) ProtoMessage() {} func (*WorkerKubernetes) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{155} + return fileDescriptor_f1caaec5647a9dbf, []int{158} } func (m *WorkerKubernetes) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4426,7 +4510,7 @@ var xxx_messageInfo_WorkerKubernetes proto.InternalMessageInfo func (m *WorkerSystemComponents) Reset() { *m = WorkerSystemComponents{} } func (*WorkerSystemComponents) ProtoMessage() {} func (*WorkerSystemComponents) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{156} + return fileDescriptor_f1caaec5647a9dbf, []int{159} } func (m *WorkerSystemComponents) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4599,11 +4683,14 @@ func init() { proto.RegisterType((*ShootCARotation)(nil), "github.aaakk.us.kg.gardener.gardener.pkg.apis.core.v1alpha1.ShootCARotation") proto.RegisterType((*ShootCredentials)(nil), "github.aaakk.us.kg.gardener.gardener.pkg.apis.core.v1alpha1.ShootCredentials") proto.RegisterType((*ShootCredentialsRotation)(nil), "github.aaakk.us.kg.gardener.gardener.pkg.apis.core.v1alpha1.ShootCredentialsRotation") + proto.RegisterType((*ShootETCDEncryptionKeyRotation)(nil), "github.aaakk.us.kg.gardener.gardener.pkg.apis.core.v1alpha1.ShootETCDEncryptionKeyRotation") proto.RegisterType((*ShootKubeconfigRotation)(nil), "github.aaakk.us.kg.gardener.gardener.pkg.apis.core.v1alpha1.ShootKubeconfigRotation") proto.RegisterType((*ShootList)(nil), "github.aaakk.us.kg.gardener.gardener.pkg.apis.core.v1alpha1.ShootList") proto.RegisterType((*ShootMachineImage)(nil), "github.aaakk.us.kg.gardener.gardener.pkg.apis.core.v1alpha1.ShootMachineImage") proto.RegisterType((*ShootNetworks)(nil), "github.aaakk.us.kg.gardener.gardener.pkg.apis.core.v1alpha1.ShootNetworks") + proto.RegisterType((*ShootObservabilityRotation)(nil), "github.aaakk.us.kg.gardener.gardener.pkg.apis.core.v1alpha1.ShootObservabilityRotation") proto.RegisterType((*ShootSSHKeypairRotation)(nil), "github.aaakk.us.kg.gardener.gardener.pkg.apis.core.v1alpha1.ShootSSHKeypairRotation") + proto.RegisterType((*ShootServiceAccountKeyRotation)(nil), "github.aaakk.us.kg.gardener.gardener.pkg.apis.core.v1alpha1.ShootServiceAccountKeyRotation") proto.RegisterType((*ShootSpec)(nil), "github.aaakk.us.kg.gardener.gardener.pkg.apis.core.v1alpha1.ShootSpec") proto.RegisterType((*ShootState)(nil), "github.aaakk.us.kg.gardener.gardener.pkg.apis.core.v1alpha1.ShootState") proto.RegisterType((*ShootStateList)(nil), "github.aaakk.us.kg.gardener.gardener.pkg.apis.core.v1alpha1.ShootStateList") @@ -4627,652 +4714,664 @@ func init() { } var fileDescriptor_f1caaec5647a9dbf = []byte{ - // 10315 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0xbd, 0x69, 0x8c, 0x24, 0xc9, - 0x75, 0x18, 0xcc, 0xac, 0xbe, 0xaa, 0x5f, 0xf5, 0x19, 0x73, 0x6c, 0xef, 0xec, 0xce, 0xf6, 0x32, - 0xc9, 0xe5, 0x37, 0xfb, 0x91, 0xea, 0xd1, 0xf2, 0x10, 0xb9, 0xcb, 0xdd, 0xe5, 0x76, 0x55, 0xf5, - 0xcc, 0x14, 0x67, 0x7a, 0xa6, 0x19, 0x35, 0xbd, 0xcb, 0x43, 0x20, 0x99, 0x9d, 0x19, 0x5d, 0x9d, - 0xec, 0xac, 0xcc, 0xda, 0xcc, 0xac, 0x9e, 0xee, 0x59, 0x5a, 0xa4, 0x28, 0x1e, 0x16, 0x09, 0x1b, - 0x36, 0x64, 0x83, 0x02, 0x49, 0x90, 0x14, 0x21, 0x18, 0x34, 0x60, 0x81, 0x32, 0x01, 0xd3, 0x90, - 0x0f, 0x19, 0x90, 0x7e, 0x88, 0xa0, 0x0c, 0x5a, 0x30, 0x64, 0x81, 0x16, 0xe4, 0xa6, 0xd9, 0x3e, - 0x24, 0x5f, 0x3f, 0x0c, 0xc3, 0x7f, 0x06, 0xb2, 0x61, 0xc4, 0x91, 0x91, 0x91, 0x57, 0x1f, 0x99, - 0x3d, 0x4d, 0xae, 0xfd, 0xab, 0x2a, 0xe3, 0x78, 0x2f, 0x8e, 0x17, 0x2f, 0xde, 0x7b, 0xf1, 0xe2, - 0x05, 0xb4, 0x7a, 0x76, 0xb8, 0x35, 0xdc, 0x58, 0x32, 0xbd, 0xfe, 0xd5, 0x9e, 0xe1, 0x5b, 0xc4, - 0x25, 0x7e, 0xfc, 0x67, 0xb0, 0xdd, 0xbb, 0x6a, 0x0c, 0xec, 0xe0, 0xaa, 0xe9, 0xf9, 0xe4, 0xea, - 0xce, 0x33, 0x86, 0x33, 0xd8, 0x32, 0x9e, 0xb9, 0xda, 0xa3, 0x99, 0x46, 0x48, 0xac, 0xa5, 0x81, - 0xef, 0x85, 0x1e, 0x7a, 0x47, 0x0c, 0x64, 0x29, 0xaa, 0x1b, 0xff, 0x19, 0x6c, 0xf7, 0x96, 0x28, - 0x90, 0x25, 0x0a, 0x64, 0x29, 0x02, 0x72, 0xa9, 0x79, 0x22, 0xcc, 0x1b, 0x24, 0xcc, 0x22, 0xbe, - 0xf4, 0x73, 0x2a, 0x0c, 0xaf, 0xe7, 0x5d, 0x65, 0xc9, 0x1b, 0xc3, 0x4d, 0xf6, 0xc5, 0x3e, 0xd8, - 0x3f, 0x51, 0xfc, 0xe9, 0xed, 0xf7, 0x04, 0x4b, 0xb6, 0x47, 0x01, 0x5f, 0x35, 0x86, 0xa1, 0x17, - 0x98, 0x86, 0x63, 0xbb, 0xbd, 0xab, 0x3b, 0x59, 0xc8, 0xba, 0x52, 0x54, 0x34, 0xe1, 0xd0, 0x32, - 0xfe, 0x86, 0x61, 0xe6, 0x95, 0x79, 0x67, 0x5c, 0xa6, 0x6f, 0x98, 0x5b, 0xb6, 0x4b, 0xfc, 0xbd, - 0xa8, 0x73, 0x57, 0x7d, 0x12, 0x78, 0x43, 0xdf, 0x24, 0x27, 0xaa, 0x15, 0x5c, 0xed, 0x93, 0xd0, - 0xc8, 0xc3, 0x75, 0xb5, 0xa8, 0x96, 0x3f, 0x74, 0x43, 0xbb, 0x9f, 0x45, 0xf3, 0x0b, 0x47, 0x55, - 0x08, 0xcc, 0x2d, 0xd2, 0x37, 0x32, 0xf5, 0xde, 0x51, 0x54, 0x6f, 0x18, 0xda, 0xce, 0x55, 0xdb, - 0x0d, 0x83, 0xd0, 0x4f, 0x57, 0xd2, 0xdf, 0x0e, 0x63, 0xcb, 0x96, 0xe5, 0xb9, 0xe8, 0x69, 0x98, - 0x20, 0xae, 0xb1, 0xe1, 0x10, 0x6b, 0x41, 0x7b, 0x52, 0xbb, 0x52, 0x6f, 0xce, 0x7e, 0x7f, 0x7f, - 0xf1, 0x0d, 0x07, 0xfb, 0x8b, 0x13, 0x2b, 0x3c, 0x19, 0x47, 0xf9, 0xfa, 0x97, 0x6b, 0x30, 0xce, - 0x2a, 0x05, 0xe8, 0xd7, 0x34, 0x38, 0xb7, 0x3d, 0xdc, 0x20, 0xbe, 0x4b, 0x42, 0x12, 0xb4, 0x8d, - 0x60, 0x6b, 0xc3, 0x33, 0x7c, 0x0e, 0xa2, 0xf1, 0xf6, 0x1b, 0x4b, 0x25, 0x48, 0x70, 0xe9, 0x66, - 0x16, 0x5e, 0xf3, 0x91, 0x83, 0xfd, 0xc5, 0x73, 0x39, 0x19, 0x38, 0x0f, 0x3b, 0xba, 0x07, 0x53, - 0x6e, 0xcf, 0x76, 0x77, 0x3b, 0x6e, 0xcf, 0x27, 0x41, 0xb0, 0x50, 0x63, 0xad, 0x59, 0x2e, 0xd5, - 0x9a, 0xdb, 0x0a, 0xa0, 0xe6, 0xdc, 0xc1, 0xfe, 0xe2, 0x94, 0x9a, 0x82, 0x13, 0x88, 0xf4, 0xcf, - 0x6b, 0x30, 0xbb, 0x6c, 0xf5, 0xed, 0x20, 0xb0, 0x3d, 0x77, 0xcd, 0x19, 0xf6, 0x6c, 0x17, 0x3d, - 0x09, 0xa3, 0xae, 0xd1, 0x27, 0x6c, 0x48, 0x26, 0x9b, 0x53, 0x62, 0x54, 0x47, 0x6f, 0x1b, 0x7d, - 0x82, 0x59, 0x0e, 0xfa, 0x00, 0x8c, 0x9b, 0x9e, 0xbb, 0x69, 0xf7, 0x44, 0x43, 0x7f, 0x6e, 0x89, - 0xcf, 0xe4, 0x92, 0x3a, 0x93, 0xac, 0x7d, 0x82, 0x02, 0x96, 0xb0, 0x71, 0x6f, 0x65, 0x37, 0x24, - 0x2e, 0x45, 0xd3, 0x84, 0x83, 0xfd, 0xc5, 0xf1, 0x16, 0x03, 0x80, 0x05, 0x20, 0xfd, 0x1a, 0xd4, - 0x97, 0x1d, 0xe2, 0x87, 0xb6, 0xdb, 0x43, 0xcf, 0xc1, 0x0c, 0xe9, 0x1b, 0xb6, 0x83, 0x89, 0x49, - 0xec, 0x1d, 0xe2, 0x07, 0x0b, 0xda, 0x93, 0x23, 0x57, 0x26, 0x9b, 0xe8, 0x60, 0x7f, 0x71, 0x66, - 0x25, 0x91, 0x83, 0x53, 0x25, 0xf5, 0xcf, 0x68, 0xd0, 0x58, 0x1e, 0x5a, 0x76, 0xc8, 0xe1, 0xa3, - 0x00, 0x1a, 0x06, 0xfd, 0x5c, 0xf3, 0x1c, 0xdb, 0xdc, 0x13, 0xd3, 0xfc, 0x52, 0xa9, 0x81, 0x5d, - 0x8e, 0xe1, 0x34, 0x67, 0x0f, 0xf6, 0x17, 0x1b, 0x4a, 0x02, 0x56, 0xb1, 0xe8, 0x5b, 0xa0, 0xe6, - 0xa1, 0x0f, 0xc1, 0x14, 0xef, 0xe5, 0xaa, 0x31, 0xc0, 0x64, 0x53, 0x34, 0xe2, 0x4d, 0xca, 0xa0, - 0x45, 0x98, 0x96, 0xee, 0x6c, 0x7c, 0x82, 0x98, 0x21, 0x26, 0x9b, 0xc4, 0x27, 0xae, 0x49, 0xf8, - 0xfc, 0xb5, 0x94, 0xca, 0x38, 0x01, 0x4a, 0xff, 0xb1, 0x06, 0x73, 0xcb, 0x3b, 0x86, 0xed, 0x18, - 0x1b, 0xb6, 0x63, 0x87, 0x7b, 0x1f, 0xf6, 0x5c, 0x72, 0x8c, 0x09, 0x5c, 0x87, 0x47, 0x86, 0xae, - 0xc1, 0xeb, 0x39, 0x64, 0x95, 0x4f, 0xd9, 0xdd, 0xbd, 0x01, 0xa1, 0xa4, 0x47, 0x87, 0xfa, 0xb1, - 0x83, 0xfd, 0xc5, 0x47, 0xd6, 0xf3, 0x8b, 0xe0, 0xa2, 0xba, 0x08, 0xc3, 0x45, 0x25, 0xeb, 0x65, - 0xcf, 0x19, 0xf6, 0x05, 0xd4, 0x11, 0x06, 0xf5, 0xd2, 0xc1, 0xfe, 0xe2, 0xc5, 0xf5, 0xdc, 0x12, - 0xb8, 0xa0, 0xa6, 0xfe, 0x83, 0x1a, 0x4c, 0x35, 0x0d, 0x73, 0x7b, 0x38, 0x68, 0x0e, 0xcd, 0x6d, - 0x12, 0xa2, 0x8f, 0x43, 0x9d, 0x72, 0x2e, 0xcb, 0x08, 0x0d, 0x31, 0x92, 0x3f, 0x5f, 0x48, 0x7e, - 0x6c, 0x16, 0x69, 0xe9, 0x78, 0x6c, 0x57, 0x49, 0x68, 0x34, 0x91, 0x18, 0x13, 0x88, 0xd3, 0xb0, - 0x84, 0x8a, 0x7a, 0x30, 0x1a, 0x0c, 0x88, 0x29, 0x88, 0x7b, 0xa5, 0x14, 0xb1, 0xa8, 0x4d, 0xee, - 0x0e, 0x88, 0x19, 0x4f, 0x03, 0xfd, 0xc2, 0x0c, 0x01, 0xf2, 0x60, 0x3c, 0x08, 0x8d, 0x70, 0x48, - 0xc7, 0x87, 0xa2, 0xba, 0x5e, 0x1d, 0x15, 0x03, 0xd7, 0x9c, 0x11, 0xc8, 0xc6, 0xf9, 0x37, 0x16, - 0x68, 0xf4, 0x1f, 0x69, 0x30, 0xa7, 0x16, 0xbf, 0x65, 0x07, 0x21, 0xfa, 0xc5, 0xcc, 0x80, 0x2e, - 0x1d, 0x6f, 0x40, 0x69, 0x6d, 0x36, 0x9c, 0x73, 0x02, 0x5d, 0x3d, 0x4a, 0x51, 0x06, 0x73, 0x13, - 0xc6, 0xec, 0x90, 0xf4, 0x39, 0x61, 0x95, 0xe5, 0x69, 0x6a, 0x9b, 0x9b, 0xd3, 0x02, 0xdb, 0x58, - 0x87, 0xc2, 0xc5, 0x1c, 0xbc, 0xfe, 0x71, 0x38, 0xaf, 0x96, 0x5a, 0xf3, 0xbd, 0x1d, 0xdb, 0x22, - 0x3e, 0x5d, 0x0c, 0xe1, 0xde, 0x20, 0xb3, 0x18, 0x28, 0x71, 0x61, 0x96, 0x83, 0xde, 0x02, 0xe3, - 0x3e, 0xe9, 0xd9, 0x9e, 0xcb, 0x26, 0x7c, 0x32, 0x1e, 0x3c, 0xcc, 0x52, 0xb1, 0xc8, 0xd5, 0xff, - 0x73, 0x2d, 0x39, 0x78, 0x74, 0x22, 0xd1, 0x3d, 0xa8, 0x0f, 0x04, 0x2a, 0x31, 0x78, 0x9d, 0xca, - 0x3d, 0x8c, 0xda, 0x1e, 0x8f, 0x6b, 0x94, 0x82, 0x25, 0x32, 0x64, 0xc3, 0x4c, 0xf4, 0xbf, 0x55, - 0x81, 0x17, 0x33, 0x9e, 0xba, 0x96, 0x00, 0x84, 0x53, 0x80, 0xd1, 0x5d, 0x98, 0x0c, 0x88, 0xe9, - 0x13, 0xca, 0x97, 0x04, 0xa5, 0xe6, 0x32, 0xaf, 0x6e, 0x54, 0x48, 0x30, 0xaf, 0x79, 0xd1, 0xfc, - 0x49, 0x99, 0x81, 0x63, 0x40, 0xe8, 0x71, 0x18, 0x0d, 0x08, 0xb1, 0x16, 0x46, 0xd9, 0xa0, 0xd7, - 0xd9, 0xd2, 0x20, 0xc4, 0xc2, 0x2c, 0x55, 0xff, 0xd6, 0x28, 0xa0, 0x2c, 0x61, 0xab, 0xbd, 0xe6, - 0x29, 0x62, 0xd0, 0xab, 0xf4, 0x5a, 0xac, 0x91, 0x14, 0x60, 0xf4, 0x1a, 0x4c, 0x3b, 0x46, 0x10, - 0xde, 0x19, 0x50, 0xf1, 0x23, 0xa2, 0x8e, 0xc6, 0xdb, 0x9b, 0xa5, 0xa6, 0xf7, 0x96, 0x0a, 0xa9, - 0x39, 0x7f, 0xb0, 0xbf, 0x38, 0x9d, 0x48, 0xc2, 0x49, 0x5c, 0x68, 0x1b, 0x26, 0x69, 0xc2, 0x8a, - 0xef, 0x7b, 0xbe, 0x18, 0xf2, 0x17, 0x4b, 0x23, 0x66, 0x50, 0x9a, 0xd3, 0x74, 0x26, 0xe4, 0x27, - 0x8e, 0xe1, 0xa3, 0xf7, 0x03, 0xf2, 0x36, 0x02, 0xe2, 0xef, 0x10, 0xeb, 0x3a, 0x97, 0xb6, 0x68, - 0x77, 0xe9, 0xbc, 0x8c, 0x34, 0x2f, 0x89, 0x39, 0x44, 0x77, 0x32, 0x25, 0x70, 0x4e, 0x2d, 0xb4, - 0x0d, 0x48, 0x4a, 0x6c, 0x72, 0xda, 0x17, 0xc6, 0x8e, 0x4f, 0x34, 0x17, 0x29, 0xb2, 0xeb, 0x19, - 0x10, 0x38, 0x07, 0xac, 0xfe, 0x07, 0x35, 0x68, 0x70, 0x22, 0x59, 0x71, 0x43, 0x7f, 0xef, 0x0c, - 0xb6, 0x86, 0xcd, 0xc4, 0xd6, 0xd0, 0xae, 0xb0, 0xd4, 0x59, 0x8b, 0x0b, 0x77, 0x06, 0x37, 0xb5, - 0x33, 0x5c, 0xab, 0x8c, 0xe9, 0xf0, 0x8d, 0xe1, 0x4f, 0x34, 0x98, 0x55, 0x4a, 0x9f, 0xc1, 0xbe, - 0x40, 0x92, 0xfb, 0xc2, 0x4b, 0x55, 0x3b, 0x58, 0xb0, 0x2d, 0x98, 0x89, 0x7e, 0x31, 0x96, 0xfd, - 0x76, 0x80, 0x0d, 0xc6, 0x53, 0x6e, 0xc7, 0x42, 0x92, 0x9c, 0xf5, 0xa6, 0xcc, 0xc1, 0x4a, 0x29, - 0xc9, 0xac, 0x6a, 0xb9, 0xcc, 0xea, 0xcf, 0x47, 0x60, 0x3e, 0x33, 0xd6, 0x59, 0x06, 0xa2, 0xfd, - 0xb4, 0x18, 0x48, 0xed, 0xa7, 0xc2, 0x40, 0x46, 0x4a, 0x31, 0x90, 0x2b, 0x50, 0xa7, 0x63, 0xca, - 0xe6, 0x86, 0x6f, 0x0d, 0x53, 0x94, 0x82, 0xba, 0x22, 0x0d, 0xcb, 0x5c, 0xe4, 0x03, 0xea, 0xdb, - 0x3d, 0x5e, 0xad, 0x1b, 0x1a, 0x7e, 0x78, 0xd7, 0xee, 0x13, 0xc1, 0x6a, 0xfe, 0xff, 0xe3, 0x51, - 0x2a, 0xad, 0xc1, 0x39, 0xce, 0x6a, 0x06, 0x12, 0xce, 0x81, 0xae, 0xff, 0xbe, 0x06, 0x23, 0x2d, - 0xdc, 0x41, 0x6f, 0x4d, 0x88, 0xd8, 0x8f, 0xa8, 0x22, 0xf6, 0x83, 0xfd, 0xc5, 0x89, 0x16, 0xee, - 0x28, 0xd2, 0xf6, 0x5f, 0xd7, 0x60, 0xde, 0xf4, 0xdc, 0xd0, 0xa0, 0xad, 0xc0, 0x7c, 0x3f, 0x8a, - 0xe8, 0xbe, 0x9c, 0x74, 0xd9, 0x4a, 0x41, 0x6b, 0x3e, 0x2a, 0x5a, 0x30, 0x9f, 0xce, 0x09, 0x70, - 0x16, 0xb5, 0xbe, 0x0e, 0x93, 0x2d, 0xc7, 0x1b, 0x5a, 0x1d, 0x77, 0xd3, 0x3b, 0x45, 0x01, 0xe9, - 0x5f, 0x6b, 0x30, 0xc5, 0xe0, 0xae, 0xf9, 0xde, 0xa6, 0xed, 0x90, 0xd7, 0x89, 0xa8, 0xae, 0x36, - 0xb9, 0x88, 0x21, 0x33, 0xc9, 0x59, 0x2d, 0xf8, 0x7a, 0x91, 0x9c, 0xd5, 0x36, 0x17, 0xb0, 0xc8, - 0xaf, 0x4e, 0x24, 0xbb, 0xc6, 0x98, 0xe4, 0x15, 0xa8, 0x9b, 0x46, 0x73, 0xe8, 0x5a, 0x8e, 0xa4, - 0x0c, 0xda, 0xcc, 0xd6, 0x32, 0x4f, 0xc3, 0x32, 0x17, 0xbd, 0x06, 0x10, 0x9b, 0x34, 0xc4, 0x44, - 0x5c, 0xaf, 0x68, 0x47, 0xe9, 0x92, 0x30, 0xb4, 0xdd, 0x5e, 0x10, 0xcf, 0x7e, 0x9c, 0x87, 0x15, - 0x74, 0xe8, 0x97, 0x60, 0x5a, 0x0c, 0x73, 0xa7, 0x6f, 0xf4, 0x84, 0xa2, 0x59, 0x76, 0xac, 0x56, - 0x15, 0x48, 0xcd, 0x0b, 0x02, 0xf3, 0xb4, 0x9a, 0x1a, 0xe0, 0x24, 0x3a, 0x74, 0x1f, 0xa6, 0xfa, - 0xaa, 0xf6, 0x3c, 0x5a, 0x61, 0x33, 0x53, 0x54, 0xe9, 0xe6, 0x79, 0x81, 0x7d, 0x2a, 0xa1, 0x78, - 0x27, 0x70, 0xe5, 0x68, 0x00, 0x63, 0x0f, 0x4b, 0x03, 0xd8, 0x84, 0x09, 0xbe, 0xc6, 0x83, 0x85, - 0x71, 0xd6, 0xc3, 0xf7, 0x96, 0xea, 0x21, 0xe7, 0x17, 0xb1, 0xa1, 0x8e, 0x7f, 0x07, 0x38, 0x02, - 0x8e, 0xee, 0xc1, 0x14, 0x65, 0xef, 0x5d, 0xe2, 0x10, 0x33, 0xf4, 0xfc, 0x85, 0x89, 0x0a, 0x76, - 0xb0, 0xae, 0x02, 0x88, 0xdb, 0x51, 0xd4, 0x14, 0x9c, 0x40, 0x24, 0x99, 0x60, 0xbd, 0x90, 0x09, - 0xee, 0x40, 0x63, 0x47, 0x31, 0x68, 0x4c, 0xb2, 0x61, 0x78, 0x5f, 0xa9, 0x96, 0xc5, 0xe6, 0x8d, - 0xe6, 0x39, 0x81, 0xa9, 0xa1, 0x9a, 0x42, 0x54, 0x44, 0xfa, 0x7e, 0x1d, 0xe6, 0x5b, 0xce, 0x30, - 0x08, 0x89, 0xbf, 0x2c, 0x6c, 0xcd, 0xc4, 0x47, 0x9f, 0xd1, 0xe0, 0x22, 0xfb, 0xdb, 0xf6, 0xee, - 0xb9, 0x6d, 0xe2, 0x18, 0x7b, 0xcb, 0x9b, 0xb4, 0x84, 0x65, 0x9d, 0x8c, 0x11, 0xb5, 0x87, 0x42, - 0xa2, 0x60, 0xa6, 0x99, 0x6e, 0x2e, 0x44, 0x5c, 0x80, 0x09, 0x7d, 0x49, 0x83, 0x47, 0x73, 0xb2, - 0xda, 0xc4, 0x21, 0x21, 0x11, 0x9c, 0xe0, 0xa4, 0xed, 0xb8, 0x7c, 0xb0, 0xbf, 0xf8, 0x68, 0xb7, - 0x08, 0x28, 0x2e, 0xc6, 0x47, 0x77, 0xd9, 0x4b, 0x39, 0xb9, 0xd7, 0x0c, 0xdb, 0x19, 0xfa, 0x44, - 0xc8, 0xd1, 0x27, 0x6d, 0xce, 0x13, 0x07, 0xfb, 0x8b, 0x97, 0xba, 0x85, 0x50, 0xf1, 0x21, 0x18, - 0xd1, 0xa7, 0xe0, 0x82, 0xcc, 0x5d, 0x77, 0x5d, 0x42, 0x2c, 0x62, 0x31, 0x11, 0x65, 0xb4, 0x54, - 0x53, 0x1e, 0x3d, 0xd8, 0x5f, 0xbc, 0xd0, 0xcd, 0x03, 0x88, 0xf3, 0xf1, 0xa0, 0x1e, 0x5c, 0x8e, - 0x33, 0x42, 0xdb, 0xb1, 0xef, 0x33, 0x48, 0x77, 0xb7, 0x7c, 0x12, 0x6c, 0x79, 0x8e, 0xc5, 0xf8, - 0x85, 0xd6, 0x7c, 0xe3, 0xc1, 0xfe, 0xe2, 0xe5, 0xee, 0x61, 0x05, 0xf1, 0xe1, 0x70, 0x90, 0x05, - 0x53, 0x81, 0x69, 0xb8, 0x1d, 0x37, 0x24, 0xfe, 0x8e, 0xe1, 0x2c, 0x8c, 0x97, 0xea, 0x20, 0x5f, - 0xa3, 0x0a, 0x1c, 0x9c, 0x80, 0x8a, 0xde, 0x03, 0x75, 0xb2, 0x3b, 0x30, 0x5c, 0x8b, 0x70, 0xc6, - 0x30, 0xd9, 0x7c, 0x9c, 0x6e, 0x49, 0x2b, 0x22, 0xed, 0xc1, 0xfe, 0xe2, 0x54, 0xf4, 0x7f, 0xd5, - 0xb3, 0x08, 0x96, 0xa5, 0xd1, 0x27, 0xe1, 0x7c, 0xdf, 0xd8, 0xbd, 0xed, 0x59, 0x84, 0xf1, 0x39, - 0xca, 0xf6, 0xd8, 0x44, 0xd4, 0x4b, 0xb5, 0x73, 0xe1, 0x60, 0x7f, 0xf1, 0xfc, 0x6a, 0x0e, 0x3c, - 0x9c, 0x8b, 0x85, 0x4e, 0x43, 0xdf, 0xd8, 0xbd, 0xee, 0x1b, 0x26, 0xd9, 0x1c, 0x3a, 0x77, 0x89, - 0xdf, 0xb7, 0x5d, 0x2e, 0x56, 0x12, 0xd3, 0x73, 0x2d, 0xca, 0x4b, 0xb4, 0x2b, 0x63, 0x7c, 0x1a, - 0x56, 0x0f, 0x2b, 0x88, 0x0f, 0x87, 0x83, 0xde, 0x09, 0x53, 0x76, 0xcf, 0xf5, 0x7c, 0x72, 0xd7, - 0xb0, 0xdd, 0x30, 0x58, 0x00, 0x66, 0x74, 0x65, 0xc3, 0xda, 0x51, 0xd2, 0x71, 0xa2, 0x94, 0xfe, - 0x5f, 0x34, 0x68, 0x08, 0x06, 0xc3, 0xe4, 0x41, 0x13, 0xc6, 0x4c, 0x2a, 0x0d, 0x08, 0x46, 0xf2, - 0x62, 0x79, 0xb1, 0x83, 0x82, 0x8b, 0x65, 0x0e, 0x96, 0x84, 0x39, 0x6c, 0x74, 0x2f, 0x47, 0x68, - 0x68, 0x55, 0x14, 0x1a, 0x18, 0xba, 0x23, 0x04, 0x06, 0x7d, 0x7f, 0x04, 0x26, 0x5b, 0x9e, 0x6b, - 0xd9, 0x4c, 0xd9, 0x78, 0x26, 0x21, 0xfb, 0x5e, 0x56, 0xd9, 0xfe, 0x83, 0xfd, 0xc5, 0x69, 0x59, - 0x50, 0xd9, 0x07, 0x9e, 0x95, 0x9a, 0x39, 0x17, 0x86, 0xdf, 0x98, 0xd4, 0xa8, 0x1f, 0xec, 0x2f, - 0xce, 0xca, 0x6a, 0x49, 0x25, 0x1b, 0xed, 0x00, 0xa2, 0x3a, 0xd3, 0x5d, 0xdf, 0x70, 0x03, 0x0e, - 0x96, 0x12, 0xe1, 0xc8, 0x89, 0x15, 0x16, 0xa9, 0x52, 0xdd, 0xca, 0x40, 0xc3, 0x39, 0x18, 0xd0, - 0x27, 0x60, 0x86, 0xa6, 0xae, 0x0f, 0x2c, 0x23, 0x24, 0x0a, 0x07, 0x3a, 0x91, 0x92, 0x24, 0x70, - 0xce, 0xdc, 0x4a, 0x40, 0xc2, 0x29, 0xc8, 0x5c, 0x57, 0x30, 0x02, 0xcf, 0x65, 0xcc, 0x25, 0xa1, - 0x2b, 0xd0, 0x54, 0x2c, 0x72, 0xd1, 0xd3, 0x30, 0xd1, 0x27, 0x41, 0x60, 0xf4, 0x08, 0xe3, 0x16, - 0x93, 0xb1, 0x50, 0xb0, 0xca, 0x93, 0x71, 0x94, 0x8f, 0xde, 0x06, 0x63, 0xa6, 0x67, 0x91, 0x60, - 0x61, 0x82, 0xd1, 0xf3, 0x45, 0x46, 0x4c, 0x34, 0xe1, 0xc1, 0xfe, 0xe2, 0x24, 0x53, 0x40, 0xe9, - 0x17, 0xe6, 0x85, 0xf4, 0x6f, 0x50, 0x41, 0x3d, 0xa5, 0xf1, 0x14, 0x9d, 0x88, 0xf0, 0x69, 0x65, - 0x3a, 0xda, 0xd9, 0x99, 0x53, 0xf5, 0x5f, 0xad, 0xc1, 0x79, 0xda, 0x42, 0xdf, 0x73, 0x1c, 0xba, - 0x7b, 0x0d, 0x1c, 0x6f, 0xaf, 0x4f, 0xdc, 0xb3, 0x38, 0xd9, 0x88, 0xc4, 0x9c, 0x5a, 0xa1, 0x98, - 0xd3, 0xcf, 0x8c, 0xc3, 0x48, 0x99, 0x71, 0x90, 0xe4, 0x72, 0xc4, 0x58, 0xfc, 0x85, 0x06, 0x0b, - 0x79, 0x63, 0x71, 0x06, 0xea, 0x95, 0x9b, 0x54, 0xaf, 0x3a, 0xa5, 0x15, 0xf1, 0x74, 0xdb, 0x0b, - 0xd4, 0xac, 0xbf, 0xa8, 0xc1, 0xc5, 0xb8, 0x78, 0xc7, 0x0d, 0x42, 0xc3, 0x71, 0xb8, 0xcd, 0xe3, - 0xe1, 0x4f, 0xfc, 0xab, 0x09, 0x3d, 0xf9, 0x4e, 0xc5, 0xbe, 0xaa, 0x8d, 0x2f, 0x34, 0x61, 0xee, - 0xa5, 0x4c, 0x98, 0x1f, 0x38, 0x4d, 0xa4, 0x87, 0x5b, 0x33, 0xff, 0xab, 0x06, 0x97, 0xf2, 0x2b, - 0x9e, 0x01, 0x5d, 0x0d, 0x92, 0x74, 0x75, 0xf3, 0x14, 0xbb, 0x5d, 0x40, 0x59, 0xdf, 0xad, 0x15, - 0x75, 0x97, 0xa9, 0xf2, 0x9b, 0x30, 0x4b, 0xf5, 0xab, 0x20, 0x14, 0x56, 0xb7, 0x93, 0x9d, 0x40, - 0x47, 0xb6, 0xad, 0x59, 0x9c, 0x84, 0x81, 0xd3, 0x40, 0xd1, 0x6d, 0x98, 0xa0, 0x3a, 0x15, 0x85, - 0x5f, 0x3b, 0x3e, 0x7c, 0xc9, 0xf7, 0xbb, 0xbc, 0x2e, 0x8e, 0x80, 0xa0, 0x5f, 0x84, 0x69, 0x4b, - 0x2e, 0xaa, 0x23, 0x8e, 0x9e, 0xd2, 0x50, 0x99, 0x81, 0xb4, 0xad, 0xd6, 0xc6, 0x49, 0x60, 0xfa, - 0xff, 0xd2, 0xe0, 0xf1, 0xc3, 0x88, 0x0b, 0xf9, 0x00, 0x66, 0xb4, 0x91, 0x73, 0x0f, 0x84, 0xd2, - 0xc2, 0x50, 0x04, 0x26, 0x5e, 0xa4, 0x32, 0x29, 0xc0, 0x0a, 0x96, 0x9c, 0xe3, 0xad, 0xda, 0x43, - 0x3a, 0xde, 0xd2, 0xff, 0x9b, 0xa6, 0xb2, 0x23, 0x75, 0x72, 0x5f, 0x77, 0xec, 0x48, 0x6d, 0x7c, - 0xa1, 0x01, 0xef, 0x8f, 0x6b, 0xf0, 0x64, 0x7e, 0x15, 0x65, 0x07, 0x7e, 0x09, 0xc6, 0x07, 0xdc, - 0x51, 0x64, 0x84, 0xed, 0x90, 0x57, 0x28, 0x73, 0xe1, 0x5e, 0x1c, 0x0f, 0xf6, 0x17, 0x2f, 0xe5, - 0x71, 0x7b, 0xe1, 0xff, 0x21, 0xea, 0x21, 0x3b, 0x65, 0xc1, 0xe0, 0x92, 0xd6, 0x3b, 0x8e, 0xc9, - 0x5f, 0x8c, 0x0d, 0xe2, 0x1c, 0xdb, 0x66, 0xf1, 0x19, 0x0d, 0x66, 0x12, 0x34, 0x1d, 0x2c, 0x8c, - 0x31, 0x2a, 0x2d, 0x77, 0xc2, 0x90, 0x58, 0x2d, 0xf1, 0x06, 0x9e, 0x48, 0x0e, 0x70, 0x0a, 0x63, - 0x8a, 0xd5, 0xaa, 0xc3, 0xfa, 0xfa, 0x63, 0xb5, 0x6a, 0xeb, 0x0b, 0x58, 0xed, 0xd7, 0x6b, 0x45, - 0xdd, 0x65, 0xac, 0x76, 0x17, 0x26, 0x23, 0x67, 0xbc, 0x88, 0x65, 0x5c, 0xaf, 0xdc, 0x28, 0x0e, - 0x2f, 0x3e, 0x4d, 0x8f, 0x52, 0x02, 0x1c, 0x23, 0x43, 0x9f, 0xd3, 0x00, 0xe2, 0xa9, 0x11, 0x0b, - 0x6b, 0xfd, 0x14, 0x07, 0x44, 0x91, 0x6f, 0x66, 0xe8, 0xba, 0x56, 0xe8, 0x42, 0x41, 0xac, 0xff, - 0x76, 0x0d, 0x50, 0xb6, 0xf1, 0x54, 0xf0, 0xdc, 0xb6, 0x5d, 0x2b, 0x2d, 0x80, 0xdf, 0xb4, 0x5d, - 0x0b, 0xb3, 0x9c, 0x63, 0x88, 0xa6, 0x2f, 0xc0, 0x6c, 0xcf, 0xf1, 0x36, 0x0c, 0xc7, 0xd9, 0x13, - 0x1e, 0x7e, 0x6c, 0x95, 0xd6, 0x9b, 0xe7, 0xe8, 0xf6, 0x74, 0x3d, 0x99, 0x85, 0xd3, 0x65, 0xd1, - 0x00, 0xe6, 0x7c, 0xaa, 0x28, 0x9b, 0xb6, 0xc3, 0x54, 0x15, 0x6f, 0x18, 0x96, 0xb4, 0xc4, 0x9c, - 0x3f, 0xd8, 0x5f, 0x9c, 0xc3, 0x29, 0x58, 0x38, 0x03, 0x1d, 0x3d, 0x05, 0x13, 0x03, 0xdf, 0xee, - 0x1b, 0xfe, 0x1e, 0x53, 0x86, 0xea, 0xcd, 0x06, 0xdd, 0xe7, 0xd6, 0x78, 0x12, 0x8e, 0xf2, 0xf4, - 0xcf, 0x69, 0x30, 0xd1, 0xf2, 0x7c, 0xd2, 0xbe, 0xdd, 0x45, 0xf7, 0xa1, 0xa1, 0x78, 0x94, 0x8a, - 0x25, 0x53, 0x96, 0x84, 0x18, 0xc8, 0xe5, 0x18, 0x5c, 0xe4, 0xb5, 0x26, 0x13, 0xb0, 0x8a, 0x4c, - 0x5f, 0xa3, 0x33, 0x97, 0xae, 0x83, 0x9e, 0x83, 0xd1, 0xbe, 0x67, 0x45, 0xaa, 0xd3, 0x5b, 0xa2, - 0x79, 0x59, 0xf5, 0x2c, 0xaa, 0x22, 0x5f, 0xcc, 0xd6, 0x60, 0xb6, 0x17, 0x56, 0x47, 0xff, 0x9a, - 0x06, 0x23, 0xb4, 0x57, 0x3a, 0x8c, 0x5b, 0x5e, 0xdf, 0xb0, 0x5d, 0x01, 0x85, 0x39, 0x00, 0xb6, - 0x59, 0x0a, 0x16, 0x39, 0xe8, 0x55, 0x98, 0x8c, 0x76, 0xa8, 0x6a, 0x67, 0xc2, 0xed, 0xdb, 0x5d, - 0xe9, 0x40, 0x23, 0xd7, 0x4c, 0x94, 0x12, 0xe0, 0x18, 0x8b, 0x6e, 0xc0, 0x7c, 0xfb, 0x76, 0xb7, - 0xe3, 0x9a, 0xce, 0xd0, 0x22, 0x2b, 0xbb, 0xec, 0x87, 0x4e, 0x9a, 0xcd, 0x53, 0x84, 0xd7, 0x21, - 0x9b, 0x34, 0x51, 0x08, 0x47, 0x79, 0xb4, 0x18, 0xe1, 0x35, 0x84, 0xc7, 0x1c, 0x2b, 0x26, 0x80, - 0xe0, 0x28, 0x4f, 0xff, 0xd3, 0x1a, 0x34, 0x94, 0x06, 0xa1, 0x3e, 0x4c, 0xf0, 0xfe, 0x46, 0x8e, - 0x2b, 0xd7, 0xca, 0xf6, 0x31, 0xd9, 0x6c, 0x8e, 0x9e, 0x0f, 0x69, 0x80, 0x23, 0x1c, 0x2a, 0x05, - 0xd6, 0x8a, 0x29, 0x10, 0x2d, 0x01, 0x70, 0xbf, 0x1c, 0x76, 0xea, 0xca, 0xb7, 0x3e, 0xb6, 0xc8, - 0xbb, 0x32, 0x15, 0x2b, 0x25, 0xd0, 0xe3, 0x62, 0xad, 0x2a, 0xae, 0x3b, 0xca, 0x3a, 0xed, 0xc1, - 0xd8, 0x7d, 0xcf, 0x25, 0x81, 0x38, 0x8e, 0x38, 0xad, 0x1e, 0x4e, 0x52, 0x66, 0xfc, 0x61, 0x0a, - 0x18, 0x73, 0xf8, 0xfa, 0x6f, 0x68, 0x00, 0x6d, 0x23, 0x34, 0xb8, 0xed, 0xfc, 0x18, 0x6e, 0x8f, - 0x8f, 0x27, 0x78, 0x4c, 0x3d, 0x73, 0xcc, 0x39, 0x1a, 0xd8, 0xf7, 0xa3, 0xfe, 0x4b, 0x01, 0x86, - 0x43, 0xef, 0xda, 0xf7, 0x09, 0x66, 0xf9, 0xe8, 0xad, 0x30, 0x49, 0x5c, 0xd3, 0xdf, 0x1b, 0x84, - 0xc2, 0x7b, 0xa9, 0xce, 0x8f, 0xc6, 0x57, 0xa2, 0x44, 0x1c, 0xe7, 0xeb, 0xcf, 0x40, 0x52, 0x0c, - 0x3d, 0xba, 0x95, 0xfa, 0x0e, 0xd4, 0x57, 0x5c, 0x6b, 0xe0, 0xd9, 0x6e, 0x78, 0x8c, 0x3e, 0x5d, - 0x86, 0x91, 0xa1, 0xef, 0x88, 0x2e, 0x35, 0x44, 0x81, 0x91, 0x75, 0x7c, 0x0b, 0xd3, 0x74, 0xf4, - 0x34, 0x4c, 0x0c, 0x86, 0xfe, 0xc0, 0x0b, 0xa2, 0x7e, 0x49, 0x79, 0x7b, 0x8d, 0x27, 0xe3, 0x28, - 0x5f, 0x7f, 0xa0, 0xc1, 0xdc, 0xca, 0xee, 0xc0, 0xf6, 0x99, 0x0b, 0x26, 0xf1, 0xa9, 0x28, 0x49, - 0xeb, 0xef, 0xf0, 0xbf, 0xa2, 0x0d, 0xb2, 0xbe, 0x28, 0x81, 0xa3, 0x7c, 0xb4, 0x09, 0x33, 0x84, - 0x55, 0x67, 0xdb, 0x85, 0x21, 0x8f, 0x00, 0x4e, 0x62, 0x66, 0xe2, 0x2e, 0xbe, 0x09, 0x28, 0x38, - 0x05, 0x15, 0x75, 0x61, 0xc6, 0x74, 0x8c, 0x20, 0xb0, 0x37, 0x6d, 0x33, 0xf6, 0x34, 0x98, 0x6c, - 0xbe, 0x95, 0xd6, 0x6d, 0x25, 0x72, 0x1e, 0xec, 0x2f, 0x5e, 0x10, 0xed, 0x4c, 0x66, 0xe0, 0x14, - 0x08, 0xfd, 0x2b, 0x35, 0x98, 0x5e, 0xd9, 0x1d, 0x78, 0xc1, 0xd0, 0x27, 0xac, 0xe8, 0x19, 0x48, - 0xc1, 0x4f, 0xc3, 0xc4, 0x96, 0xe1, 0x5a, 0x0e, 0xf1, 0xc5, 0xf4, 0xc9, 0xb1, 0xbd, 0xc1, 0x93, - 0x71, 0x94, 0x8f, 0x3e, 0x09, 0x10, 0x98, 0x5b, 0xc4, 0x1a, 0xb2, 0x6d, 0x81, 0x2b, 0x42, 0xb7, - 0x4a, 0x2d, 0xac, 0x44, 0x27, 0xbb, 0x12, 0xa6, 0x58, 0xef, 0xf2, 0x1b, 0x2b, 0xf8, 0xf4, 0x3f, - 0xd5, 0x60, 0x3e, 0x51, 0xef, 0x0c, 0x64, 0xbb, 0x5e, 0x52, 0xb6, 0x6b, 0x56, 0xef, 0x6c, 0x81, - 0x48, 0xf7, 0xc5, 0x1a, 0x3c, 0x52, 0x30, 0x28, 0x99, 0xf3, 0x48, 0xed, 0xac, 0xce, 0x23, 0x77, - 0xa0, 0x11, 0x7a, 0x8e, 0xf0, 0x89, 0x89, 0xc6, 0xa0, 0xdc, 0x69, 0xe3, 0x5d, 0x09, 0x27, 0x3e, - 0x6d, 0x8c, 0xd3, 0x02, 0xac, 0x22, 0xd2, 0x7f, 0x4f, 0x83, 0x49, 0xa9, 0x47, 0x1e, 0xc3, 0x35, - 0xe4, 0x0c, 0xbd, 0x50, 0xaf, 0x40, 0xdd, 0xb2, 0x03, 0x55, 0xee, 0x63, 0x1e, 0x09, 0x6d, 0x91, - 0x86, 0x65, 0xae, 0xfe, 0xcf, 0x6b, 0x70, 0x51, 0xc2, 0x8e, 0x44, 0x50, 0xaa, 0xf6, 0x1e, 0x47, - 0x0e, 0x7d, 0x5c, 0x70, 0x5c, 0x65, 0x8f, 0x50, 0xb8, 0xed, 0x53, 0x69, 0x76, 0xda, 0xc8, 0x63, - 0xa5, 0xe8, 0x36, 0x8c, 0x05, 0x14, 0x9f, 0x10, 0x30, 0x4f, 0x38, 0x1a, 0x6c, 0xa7, 0x63, 0xed, - 0xc5, 0x1c, 0x0c, 0x7a, 0x4d, 0xd5, 0x2b, 0xb8, 0x92, 0xf7, 0xfe, 0x93, 0x11, 0x03, 0xbb, 0xf8, - 0xb4, 0x44, 0x7b, 0x62, 0x45, 0x23, 0x92, 0xe3, 0xa8, 0x9b, 0xa7, 0x5a, 0xe8, 0x01, 0xd4, 0xaf, - 0x0b, 0xb0, 0xe8, 0x12, 0xd4, 0xec, 0x68, 0xf4, 0x40, 0xd4, 0xaa, 0x75, 0xda, 0xb8, 0x66, 0x5b, - 0x72, 0xaf, 0xaa, 0x15, 0xee, 0x55, 0xca, 0x66, 0x32, 0x72, 0xf8, 0x66, 0xa2, 0xff, 0x87, 0x1a, - 0x9c, 0x8f, 0xb0, 0x46, 0xad, 0x6a, 0x0b, 0x13, 0xf6, 0x11, 0x3b, 0xe2, 0xd1, 0x9a, 0xc4, 0x1d, - 0x18, 0x65, 0x5c, 0xab, 0x94, 0x69, 0x5b, 0x02, 0xa4, 0xcd, 0xc1, 0x0c, 0x10, 0xfa, 0x2b, 0x30, - 0xee, 0x50, 0xdd, 0x3d, 0x72, 0x00, 0x29, 0xa7, 0x78, 0xe5, 0xf5, 0x97, 0xdb, 0x04, 0x02, 0xee, - 0xe2, 0x28, 0xed, 0x9d, 0x3c, 0x11, 0x0b, 0xa4, 0x97, 0x9e, 0x85, 0x86, 0x52, 0x0c, 0xcd, 0xc1, - 0xc8, 0x36, 0xe1, 0x77, 0x5d, 0x26, 0x31, 0xfd, 0x8b, 0xce, 0xc3, 0xd8, 0x8e, 0xe1, 0x0c, 0xc5, - 0x98, 0x60, 0xfe, 0xf1, 0x5c, 0xed, 0x3d, 0x9a, 0xfe, 0x1d, 0x0d, 0x1a, 0x37, 0xec, 0x0d, 0xe2, - 0xf3, 0xa3, 0x44, 0x26, 0xd7, 0x26, 0x6e, 0x55, 0x35, 0xf2, 0x6e, 0x54, 0xa1, 0x3d, 0x98, 0x14, - 0xfb, 0x83, 0xf4, 0x64, 0x2b, 0x77, 0x77, 0x4a, 0xc1, 0x2d, 0xf8, 0xae, 0xea, 0x37, 0x1e, 0xa1, - 0xc0, 0x31, 0x36, 0xfd, 0x35, 0x38, 0x97, 0x53, 0x09, 0x2d, 0xb2, 0x25, 0xe7, 0x87, 0x82, 0x30, - 0xa2, 0x35, 0xe4, 0x87, 0x98, 0xa7, 0xa3, 0x47, 0x61, 0x84, 0xb8, 0x91, 0x07, 0xe7, 0x04, 0x15, - 0x92, 0x56, 0x5c, 0x0b, 0xd3, 0x34, 0xca, 0x5a, 0x1c, 0x2f, 0x21, 0x4b, 0x30, 0xd6, 0x72, 0x4b, - 0xa4, 0x61, 0x99, 0xab, 0xff, 0xa3, 0x51, 0xb8, 0x7c, 0xc3, 0xf3, 0xed, 0xfb, 0x9e, 0x1b, 0x1a, - 0xce, 0x9a, 0x67, 0xc5, 0x3e, 0x19, 0x82, 0x4d, 0x7d, 0x4e, 0x83, 0x47, 0xcc, 0xc1, 0xb0, 0xe3, - 0xda, 0xa1, 0x6d, 0x44, 0x47, 0xe5, 0x6b, 0xc4, 0xb7, 0xbd, 0xb2, 0xae, 0x19, 0xec, 0x2e, 0x4e, - 0x6b, 0x6d, 0x3d, 0x0f, 0x24, 0x2e, 0xc2, 0xc5, 0x3c, 0x44, 0x2c, 0xef, 0x9e, 0xcb, 0x1a, 0xd7, - 0x0d, 0xd9, 0xfd, 0xa0, 0xfb, 0x71, 0x17, 0x4b, 0x7a, 0x88, 0xb4, 0x73, 0x21, 0xe2, 0x02, 0x4c, - 0xe8, 0x53, 0x70, 0xc1, 0xe6, 0x8d, 0xc3, 0xc4, 0xb0, 0x6c, 0x97, 0x04, 0x01, 0xf3, 0x93, 0xa8, - 0xe2, 0x02, 0xd1, 0xc9, 0x03, 0x88, 0xf3, 0xf1, 0xa0, 0x8f, 0x02, 0x04, 0x7b, 0xae, 0x29, 0xc6, - 0x7f, 0xac, 0x14, 0x56, 0x2e, 0x19, 0x49, 0x28, 0x58, 0x81, 0x48, 0x75, 0x01, 0xbe, 0x7d, 0xba, - 0x26, 0x3f, 0xc8, 0xd4, 0xb8, 0x2e, 0x70, 0x37, 0x4a, 0xc4, 0x71, 0xbe, 0xfe, 0x5b, 0x1a, 0x4c, - 0x88, 0x8b, 0x77, 0xe8, 0x2d, 0x29, 0x95, 0x58, 0x2e, 0xed, 0x94, 0x5a, 0x7c, 0x9f, 0x59, 0xa1, - 0x85, 0x39, 0x45, 0x6c, 0xae, 0xe5, 0x34, 0x2a, 0x81, 0x39, 0x36, 0xce, 0x24, 0xac, 0xd1, 0x91, - 0xc1, 0x46, 0xc1, 0xa6, 0x7f, 0x53, 0x83, 0xf9, 0x4c, 0xad, 0x63, 0x6c, 0xa1, 0x67, 0x78, 0x96, - 0xfa, 0xe3, 0x06, 0xb0, 0x5b, 0x96, 0xcb, 0x6b, 0x9d, 0x2e, 0xf1, 0x77, 0xe4, 0x2a, 0xfc, 0x92, - 0x06, 0x73, 0xf1, 0xa9, 0xbf, 0x68, 0x85, 0x56, 0xc1, 0x49, 0xf4, 0x66, 0x0a, 0x58, 0x73, 0x41, - 0x74, 0x7c, 0x2e, 0x9d, 0x83, 0x33, 0x88, 0xd1, 0x17, 0x35, 0x98, 0x33, 0x92, 0xb7, 0x2c, 0x23, - 0xae, 0x59, 0xee, 0x0a, 0x41, 0xea, 0xca, 0x66, 0xdc, 0x98, 0x54, 0x46, 0x80, 0x33, 0x78, 0xd1, - 0x3b, 0x61, 0xca, 0x18, 0xd8, 0xcb, 0x43, 0xcb, 0xa6, 0x7b, 0x7f, 0x74, 0x35, 0x8f, 0x09, 0xa4, - 0xcb, 0x6b, 0x1d, 0x99, 0x8e, 0x13, 0xa5, 0xe4, 0x3d, 0x4a, 0x31, 0x94, 0xa3, 0x55, 0xef, 0x51, - 0x8a, 0x51, 0x8c, 0xef, 0x51, 0x8a, 0xc1, 0x53, 0xb1, 0xa0, 0x8f, 0xc0, 0xa3, 0x7c, 0xc3, 0x69, - 0x1a, 0x81, 0x6d, 0x2e, 0x0f, 0xc3, 0x2d, 0xe2, 0x86, 0x91, 0xd2, 0xc7, 0x4d, 0x6a, 0xcc, 0x5f, - 0x6c, 0xa5, 0xa8, 0x10, 0x2e, 0xae, 0x8f, 0x3c, 0x00, 0xcf, 0xb6, 0x4c, 0xd1, 0x21, 0xee, 0xb2, - 0x54, 0x4e, 0xc2, 0xbe, 0xd3, 0x69, 0xb7, 0x44, 0x7f, 0x18, 0xaf, 0x88, 0xbf, 0xb1, 0x82, 0x02, - 0xfd, 0xba, 0x06, 0xd3, 0x82, 0xd0, 0x05, 0xd2, 0x09, 0x46, 0x02, 0x1f, 0x29, 0x4d, 0x90, 0x29, - 0xaa, 0x5f, 0xc2, 0x2a, 0x74, 0x2e, 0x32, 0x48, 0x37, 0xd6, 0x44, 0x1e, 0x4e, 0x36, 0x04, 0x7d, - 0x59, 0x83, 0xf3, 0x01, 0xf1, 0x77, 0x6c, 0x93, 0x2c, 0x9b, 0xa6, 0x37, 0x74, 0xa3, 0x79, 0xae, - 0x57, 0xb8, 0xd2, 0xd6, 0xcd, 0x01, 0xc8, 0x9d, 0xa7, 0xf2, 0x72, 0x70, 0x6e, 0x03, 0xd0, 0xaf, - 0x68, 0x30, 0x7b, 0xcf, 0x08, 0xcd, 0xad, 0x96, 0x61, 0x6e, 0x31, 0x2b, 0x0c, 0xf7, 0x97, 0x2a, - 0xbb, 0x72, 0x5e, 0x49, 0xc2, 0xe2, 0xb6, 0xe3, 0x54, 0x22, 0x4e, 0x63, 0x44, 0x21, 0xd4, 0x7d, - 0xf2, 0xea, 0x90, 0x04, 0xcc, 0xab, 0x4a, 0x3b, 0xb9, 0xf8, 0x9d, 0x37, 0x69, 0x58, 0x40, 0xe4, - 0xc2, 0x46, 0xf4, 0x85, 0x25, 0x26, 0xd4, 0x83, 0xcb, 0x9c, 0x7c, 0x97, 0x5d, 0xcf, 0xdd, 0xeb, - 0x7b, 0xc3, 0x20, 0xb5, 0x04, 0x1a, 0x6c, 0x09, 0x30, 0xc7, 0xb1, 0x95, 0xc3, 0x0a, 0xe2, 0xc3, - 0xe1, 0xa0, 0x0f, 0x42, 0x9d, 0xec, 0x10, 0x37, 0xbc, 0x7b, 0xf7, 0xd6, 0xc2, 0x54, 0xa9, 0x3d, - 0x92, 0x75, 0x61, 0x45, 0xc0, 0xc0, 0x12, 0xda, 0xa5, 0x97, 0x00, 0x65, 0x89, 0xf2, 0x28, 0x01, - 0xb5, 0xae, 0x0a, 0xa8, 0xdf, 0xd3, 0xe0, 0x42, 0xee, 0xb0, 0x21, 0x0c, 0x17, 0x99, 0xbf, 0x9d, - 0xbb, 0x3a, 0x0c, 0x8d, 0xd0, 0x76, 0x7b, 0x1d, 0x77, 0xd3, 0xb1, 0x7b, 0x5b, 0x5c, 0x04, 0x1c, - 0xe3, 0x02, 0xcb, 0x6a, 0x6e, 0x09, 0x5c, 0x50, 0x13, 0x75, 0xe0, 0x5c, 0xdf, 0xd8, 0xcd, 0x00, - 0xac, 0x31, 0x80, 0xec, 0x4e, 0xff, 0x6a, 0x36, 0x1b, 0xe7, 0xd5, 0xd1, 0xbf, 0x36, 0x06, 0x8f, - 0xd1, 0x86, 0xc7, 0x5b, 0xe7, 0xaa, 0xe1, 0x1a, 0xbd, 0x9f, 0xd1, 0x2d, 0xea, 0x3b, 0x1a, 0x3c, - 0xb2, 0x95, 0x2f, 0xd8, 0x8a, 0xdd, 0x1b, 0x97, 0x93, 0xef, 0x0f, 0x13, 0x96, 0x39, 0xe9, 0x1e, - 0x5a, 0x04, 0x17, 0xb5, 0x0a, 0xbd, 0x04, 0x73, 0xae, 0x67, 0x91, 0x56, 0xa7, 0x8d, 0x57, 0x8d, - 0x60, 0xbb, 0x1b, 0x99, 0x6e, 0xc7, 0xf8, 0xf9, 0xcc, 0xed, 0x54, 0x1e, 0xce, 0x94, 0x46, 0x3b, - 0x80, 0x06, 0x9e, 0xb5, 0xb2, 0x63, 0x9b, 0x91, 0xab, 0x5c, 0xf9, 0x33, 0x21, 0x76, 0x89, 0x68, - 0x2d, 0x03, 0x0d, 0xe7, 0x60, 0x60, 0xa2, 0x39, 0x6d, 0xcc, 0xaa, 0xe7, 0xda, 0xa1, 0xe7, 0x33, - 0x8f, 0xce, 0x4a, 0x12, 0x2a, 0xa3, 0xf4, 0xdb, 0xb9, 0x10, 0x71, 0x01, 0x26, 0xfd, 0xbf, 0x6b, - 0x30, 0x4b, 0xe9, 0x62, 0xcd, 0xf7, 0x76, 0xf7, 0x7e, 0x26, 0x49, 0xf2, 0x69, 0x71, 0xf2, 0xc4, - 0x35, 0xb6, 0x0b, 0xca, 0xa9, 0xd3, 0x24, 0x6b, 0x74, 0x7c, 0xd0, 0xa4, 0x6a, 0xad, 0x23, 0xc5, - 0x5a, 0xab, 0xfe, 0x67, 0x1a, 0x97, 0x16, 0x23, 0xa5, 0xf1, 0x67, 0x73, 0x29, 0xbe, 0x1b, 0xa6, - 0x69, 0xda, 0xaa, 0xb1, 0xbb, 0xd6, 0x7e, 0xd9, 0x73, 0x22, 0x47, 0x53, 0xe6, 0xd2, 0x72, 0x53, - 0xcd, 0xc0, 0xc9, 0x72, 0xfa, 0x77, 0x66, 0x81, 0x15, 0x70, 0x48, 0xf8, 0x33, 0xd9, 0xb1, 0x67, - 0xa0, 0x61, 0x0e, 0x86, 0xad, 0x6b, 0xdd, 0x0f, 0x0c, 0xbd, 0xd0, 0x10, 0x27, 0x52, 0x4c, 0x02, - 0x6c, 0xad, 0xad, 0x47, 0xc9, 0x58, 0x2d, 0x43, 0x17, 0xb9, 0x39, 0x18, 0x0a, 0xc6, 0xb9, 0xa6, - 0xba, 0x66, 0xb0, 0x45, 0xde, 0x5a, 0x5b, 0x4f, 0xe4, 0xe1, 0x4c, 0x69, 0xf4, 0x69, 0x0d, 0xa6, - 0x88, 0x58, 0x80, 0x37, 0x0c, 0xdf, 0x12, 0xeb, 0xbb, 0xfc, 0xfe, 0x2d, 0x47, 0x37, 0x5a, 0xd6, - 0x5c, 0x76, 0x5e, 0x51, 0x70, 0xe0, 0x04, 0x46, 0x26, 0xc6, 0x8a, 0x6f, 0x3a, 0x59, 0x9e, 0x95, - 0x5e, 0xf1, 0x63, 0x42, 0x8c, 0x2d, 0x2a, 0x84, 0x8b, 0xeb, 0xa3, 0xbf, 0xa7, 0xc1, 0x45, 0x99, - 0x6b, 0xbb, 0x76, 0x7f, 0xd8, 0xc7, 0xc4, 0x74, 0x0c, 0xbb, 0x2f, 0x64, 0xda, 0x0f, 0x9e, 0x5e, - 0x4f, 0x93, 0xf0, 0x39, 0xdb, 0xc9, 0xcf, 0xc3, 0x05, 0x6d, 0x42, 0xdf, 0xd4, 0xe0, 0xc9, 0x28, - 0x6b, 0x8d, 0x6a, 0x96, 0x43, 0x9f, 0xc4, 0xee, 0xca, 0x62, 0x4c, 0x26, 0x4a, 0x71, 0xc1, 0x37, - 0x1f, 0xec, 0x2f, 0x3e, 0xb9, 0x72, 0x04, 0x6c, 0x7c, 0x24, 0xf6, 0x04, 0xc5, 0x74, 0xbd, 0xcd, - 0x50, 0x08, 0xc1, 0x0f, 0x8d, 0x62, 0x28, 0x0e, 0x9c, 0xc0, 0x88, 0x7e, 0x5b, 0x83, 0x47, 0xd4, - 0x04, 0x95, 0x60, 0xb8, 0xf4, 0xfb, 0xa1, 0xd3, 0x6b, 0x4d, 0x0a, 0x01, 0xb7, 0x37, 0x15, 0x64, - 0xe2, 0xa2, 0x66, 0x51, 0x16, 0xdc, 0x67, 0xc4, 0xc9, 0x25, 0xe4, 0x31, 0xce, 0x82, 0x39, 0xbd, - 0x06, 0x38, 0xca, 0xa3, 0xda, 0xe7, 0xc0, 0xb3, 0xd6, 0x6c, 0x2b, 0xb8, 0x65, 0xf7, 0xed, 0x90, - 0x89, 0xb0, 0x23, 0x7c, 0x3c, 0xd6, 0x3c, 0x6b, 0xad, 0xd3, 0xe6, 0xe9, 0x38, 0x51, 0x8a, 0xdd, - 0x34, 0xb2, 0xfb, 0x46, 0x8f, 0xac, 0x0d, 0x1d, 0x67, 0xcd, 0xf7, 0x98, 0x4d, 0xa2, 0x4d, 0x0c, - 0xcb, 0xb1, 0x5d, 0x52, 0x52, 0x64, 0x65, 0x4b, 0xae, 0x53, 0x04, 0x14, 0x17, 0xe3, 0x43, 0x4b, - 0x00, 0x9b, 0x86, 0xed, 0x74, 0xef, 0x19, 0x83, 0x3b, 0xee, 0xc2, 0x34, 0x63, 0x63, 0x4c, 0xf1, - 0xbb, 0x26, 0x53, 0xb1, 0x52, 0x82, 0x11, 0x14, 0x65, 0x86, 0x98, 0xf0, 0xdb, 0xce, 0x0b, 0x33, - 0xa7, 0x45, 0x50, 0x11, 0x44, 0x3e, 0x80, 0x37, 0x15, 0x1c, 0x38, 0x81, 0x11, 0x7d, 0x5e, 0x83, - 0x99, 0x60, 0x2f, 0x08, 0x49, 0x5f, 0x36, 0x62, 0xf6, 0xd4, 0x1b, 0xc1, 0x0c, 0x36, 0xdd, 0x04, - 0x16, 0x9c, 0xc2, 0x8a, 0x0c, 0x78, 0x8c, 0x0d, 0xec, 0xf5, 0xd6, 0x0d, 0xbb, 0xb7, 0x25, 0xaf, - 0x10, 0xad, 0x11, 0xdf, 0x24, 0x6e, 0xb8, 0x30, 0xc7, 0x48, 0x67, 0xf1, 0x60, 0x7f, 0xf1, 0xb1, - 0x4e, 0x71, 0x31, 0x7c, 0x18, 0x0c, 0xf4, 0x51, 0xb8, 0x24, 0xb2, 0x6f, 0x79, 0xf7, 0x32, 0x18, - 0xe6, 0x19, 0x06, 0x76, 0xaf, 0xab, 0x53, 0x58, 0x0a, 0x1f, 0x02, 0x81, 0xea, 0x08, 0x01, 0xf1, - 0x99, 0xc1, 0x95, 0x48, 0xfa, 0x09, 0x16, 0x10, 0xa3, 0x03, 0xa6, 0x23, 0x74, 0xb3, 0xd9, 0x38, - 0xaf, 0x8e, 0xbe, 0x5f, 0xe3, 0xca, 0x4d, 0x66, 0x4d, 0xa2, 0x17, 0x60, 0xb6, 0x4f, 0xfa, 0x9e, - 0xbf, 0xb7, 0x1c, 0x05, 0x45, 0x12, 0x06, 0x37, 0xa6, 0xb0, 0xae, 0x26, 0xb3, 0x70, 0xba, 0x2c, - 0xdd, 0x37, 0x59, 0x0f, 0xae, 0x75, 0xe3, 0xfa, 0xb5, 0x78, 0xdf, 0xec, 0xa4, 0xf2, 0x70, 0xa6, - 0x34, 0x6a, 0xc1, 0xbc, 0x48, 0xeb, 0x50, 0x09, 0x32, 0xb8, 0xe6, 0x93, 0xe8, 0xcc, 0x8b, 0x8a, - 0x62, 0xf3, 0x9d, 0x74, 0x26, 0xce, 0x96, 0xa7, 0xbd, 0xa0, 0x1f, 0x6a, 0x2b, 0x46, 0xe3, 0x5e, - 0xdc, 0x4e, 0x66, 0xe1, 0x74, 0xd9, 0x48, 0xc4, 0x4f, 0x34, 0x61, 0x2c, 0xee, 0xc5, 0xed, 0x54, - 0x1e, 0xce, 0x94, 0xd6, 0xff, 0x6c, 0x14, 0xde, 0x74, 0x8c, 0xad, 0x0c, 0xf5, 0xf3, 0x87, 0xfb, - 0x08, 0xae, 0xb2, 0x14, 0x1d, 0x92, 0x2d, 0x7d, 0x60, 0x68, 0xb8, 0xa1, 0x1d, 0xee, 0x1d, 0x73, - 0x7a, 0x06, 0x05, 0xd3, 0x73, 0x72, 0x7c, 0xc7, 0x9d, 0xce, 0xa0, 0x68, 0x3a, 0x4f, 0x8e, 0xf2, - 0xf8, 0xd3, 0xdf, 0xcf, 0x9f, 0xfe, 0x92, 0xa3, 0x7a, 0x24, 0xb9, 0x0c, 0x0a, 0xc8, 0xa5, 0xe4, - 0xa8, 0x1e, 0x83, 0xbc, 0xfe, 0xcd, 0x28, 0xbc, 0xf9, 0x38, 0x7b, 0x6a, 0x49, 0xfa, 0xca, 0xd9, - 0xb5, 0x1e, 0x2a, 0x7d, 0x15, 0xf9, 0x3a, 0x3e, 0x44, 0xfa, 0xca, 0x41, 0xf9, 0xb0, 0xe9, 0xab, - 0x68, 0x54, 0x1f, 0x16, 0x7d, 0x15, 0x8d, 0xea, 0x31, 0xe8, 0xeb, 0x7f, 0xa4, 0xf7, 0x07, 0xb9, - 0x8f, 0x76, 0x60, 0xc4, 0x1c, 0x0c, 0x4b, 0x32, 0x29, 0x76, 0xfa, 0xd9, 0x5a, 0x5b, 0xc7, 0x14, - 0x06, 0xc2, 0x30, 0xce, 0xe9, 0xa7, 0x24, 0x0b, 0x62, 0xde, 0x9c, 0x9c, 0x24, 0xb1, 0x80, 0x44, - 0x87, 0x8a, 0x0c, 0xb6, 0x48, 0x9f, 0xf8, 0x86, 0xd3, 0x0d, 0x3d, 0xdf, 0xe8, 0x95, 0xe5, 0x36, - 0x6c, 0xa8, 0x56, 0x52, 0xb0, 0x70, 0x06, 0x3a, 0x1d, 0x90, 0x81, 0x6d, 0x95, 0xe4, 0x2f, 0x6c, - 0x40, 0xd6, 0x3a, 0x6d, 0x4c, 0x61, 0xe8, 0xbf, 0x35, 0x09, 0xca, 0xf5, 0x51, 0xaa, 0xbe, 0x19, - 0x8e, 0xe3, 0xdd, 0x5b, 0xf3, 0xed, 0x1d, 0xdb, 0x21, 0x3d, 0x62, 0xc9, 0xfb, 0x85, 0x81, 0x38, - 0x24, 0x67, 0xb2, 0xe4, 0x72, 0x51, 0x21, 0x5c, 0x5c, 0x9f, 0x4a, 0xb6, 0xf3, 0x66, 0xfa, 0x7a, - 0x7f, 0xa5, 0x73, 0xbe, 0x4c, 0xb0, 0x00, 0xbe, 0xa0, 0x32, 0xc9, 0x38, 0x8b, 0x17, 0xfd, 0xb2, - 0xc6, 0x6d, 0x0f, 0xd2, 0xd8, 0x2a, 0x26, 0xed, 0xc6, 0x69, 0x1d, 0x51, 0xc4, 0x56, 0x8c, 0xd8, - 0x9e, 0x9b, 0xc4, 0x88, 0x7e, 0x43, 0x83, 0x0b, 0xdb, 0x79, 0x76, 0x53, 0x31, 0xb7, 0x6b, 0xa5, - 0xdb, 0x52, 0x60, 0x89, 0xe5, 0xc7, 0xca, 0xb9, 0x05, 0x70, 0x7e, 0x4b, 0xe4, 0x38, 0x49, 0x43, - 0x92, 0xe0, 0x03, 0xe5, 0xc7, 0x29, 0x65, 0x92, 0x8a, 0xc7, 0x49, 0x66, 0xe0, 0x24, 0x46, 0xf4, - 0x2a, 0x4c, 0x6e, 0x47, 0xf6, 0x3b, 0xa1, 0xea, 0xb7, 0x4b, 0xa3, 0x57, 0xac, 0x80, 0xfc, 0x00, - 0x5b, 0x26, 0xe2, 0x18, 0x0b, 0xb2, 0x61, 0x62, 0x9b, 0x73, 0x23, 0xa1, 0xa2, 0x37, 0xab, 0x6b, - 0x0f, 0x5c, 0x4f, 0x14, 0x49, 0x38, 0x82, 0xaf, 0xba, 0x0a, 0xd5, 0x8f, 0xf0, 0x3b, 0xfd, 0xaa, - 0x06, 0x17, 0x76, 0x88, 0x1f, 0xda, 0x66, 0xda, 0x70, 0x3d, 0x59, 0x41, 0xc5, 0x79, 0x39, 0x0f, - 0x22, 0x27, 0x95, 0xdc, 0x2c, 0x9c, 0xdf, 0x06, 0xaa, 0xf0, 0x70, 0xf3, 0x63, 0x37, 0x34, 0x42, - 0xdb, 0xbc, 0xeb, 0x6d, 0x13, 0x97, 0xf6, 0x56, 0x04, 0xd0, 0x05, 0xc6, 0x3f, 0x98, 0xc2, 0xb3, - 0x52, 0x5c, 0x0c, 0x1f, 0x06, 0x43, 0xff, 0x73, 0x0d, 0x32, 0xe6, 0x37, 0xf4, 0x37, 0x35, 0x98, - 0xda, 0x24, 0x46, 0x38, 0xf4, 0xc9, 0x75, 0x23, 0x94, 0xd7, 0x51, 0x5e, 0x39, 0x15, 0xb3, 0xdf, - 0xd2, 0x35, 0x05, 0x32, 0x3f, 0x68, 0x94, 0x11, 0x6b, 0xd4, 0x2c, 0x9c, 0x68, 0xc2, 0xa5, 0xf7, - 0xc1, 0x7c, 0xa6, 0xe2, 0x89, 0x0e, 0x83, 0x7e, 0x57, 0x18, 0x70, 0xd3, 0xf1, 0x93, 0x3f, 0x06, - 0x63, 0x86, 0x65, 0xc9, 0x18, 0x8d, 0xcf, 0x95, 0x3c, 0x54, 0xb7, 0xd4, 0x7b, 0x3f, 0xec, 0x13, - 0x73, 0xb8, 0xe8, 0x1a, 0x20, 0x23, 0x71, 0x66, 0xb6, 0x1a, 0xdf, 0x89, 0x60, 0xa6, 0xff, 0xe5, - 0x4c, 0x2e, 0xce, 0xa9, 0xa1, 0xbf, 0x17, 0x66, 0x92, 0x01, 0x0b, 0x4e, 0xe0, 0x60, 0xad, 0xff, - 0xaa, 0x06, 0x28, 0x1b, 0x23, 0x09, 0x05, 0x50, 0x17, 0x25, 0xa2, 0x49, 0x5e, 0x29, 0xeb, 0x2c, - 0x9b, 0xf0, 0xfd, 0x8e, 0xdd, 0x73, 0x45, 0x42, 0x80, 0x25, 0x22, 0xfd, 0x2f, 0x35, 0x88, 0x63, - 0xc1, 0xa1, 0x77, 0x41, 0xc3, 0x22, 0x81, 0xe9, 0xdb, 0x83, 0x30, 0xee, 0x88, 0xf4, 0x36, 0x6d, - 0xc7, 0x59, 0x58, 0x2d, 0x87, 0x74, 0x18, 0x0f, 0x8d, 0x60, 0xbb, 0xd3, 0x16, 0xba, 0x29, 0x93, - 0x24, 0xee, 0xb2, 0x14, 0x2c, 0x72, 0xe2, 0xdb, 0xff, 0x23, 0xc7, 0xb8, 0xfd, 0x8f, 0x36, 0x4f, - 0x21, 0xd4, 0x01, 0x3a, 0x3a, 0xcc, 0x81, 0xfe, 0x2f, 0x6b, 0x90, 0x8c, 0xbf, 0x57, 0x76, 0x08, - 0xb2, 0xb1, 0x19, 0x6a, 0x0f, 0x2d, 0x36, 0xc3, 0xdb, 0x58, 0xac, 0x5a, 0x1e, 0x61, 0x9c, 0x9f, - 0x94, 0xa9, 0x01, 0x66, 0x79, 0x78, 0x70, 0x59, 0x02, 0x3d, 0xab, 0xfa, 0xb0, 0x4e, 0x36, 0xdf, - 0x14, 0xad, 0x0b, 0xe6, 0x98, 0xfa, 0x40, 0x44, 0x9f, 0x90, 0xfd, 0x4f, 0xb8, 0xab, 0xbe, 0x4b, - 0x78, 0x60, 0x8e, 0x25, 0x22, 0x64, 0x44, 0x61, 0x35, 0xe6, 0x13, 0x15, 0x63, 0xb7, 0x4c, 0xfd, - 0x6f, 0x69, 0x30, 0x21, 0xe2, 0x5d, 0x1d, 0xc3, 0xf5, 0xb8, 0x07, 0x63, 0x4c, 0x23, 0xa8, 0x24, - 0x2c, 0x75, 0xb7, 0x3c, 0x2f, 0x4c, 0xc4, 0xfd, 0x62, 0x8e, 0x83, 0xec, 0x2f, 0xe6, 0xf0, 0xf5, - 0xaf, 0x8e, 0xc2, 0x93, 0xa2, 0x48, 0x46, 0x12, 0x90, 0x8b, 0x70, 0x0f, 0xce, 0x89, 0x69, 0x6a, - 0xfb, 0x86, 0x2d, 0x0f, 0x13, 0xcb, 0x29, 0x79, 0xe2, 0xa0, 0x39, 0x03, 0x0e, 0xe7, 0xe1, 0xe0, - 0xd1, 0x6d, 0x58, 0xf2, 0x0d, 0x62, 0x38, 0xe1, 0x56, 0x84, 0xbb, 0x56, 0x25, 0xba, 0x4d, 0x16, - 0x1e, 0xce, 0xc5, 0xc2, 0x0e, 0x33, 0x45, 0x46, 0xcb, 0x27, 0x86, 0x7a, 0x92, 0x5a, 0xc1, 0xcf, - 0x70, 0x35, 0x17, 0x22, 0x2e, 0xc0, 0xc4, 0xac, 0x65, 0xc6, 0x2e, 0x53, 0xbe, 0x31, 0x09, 0x7d, - 0x9b, 0x45, 0x62, 0xa3, 0x04, 0xce, 0xd5, 0xe5, 0x64, 0x16, 0x4e, 0x97, 0x45, 0xcf, 0xc1, 0x0c, - 0x3b, 0x1c, 0x8e, 0xaf, 0x7b, 0x8f, 0xc5, 0x01, 0xe7, 0x6f, 0x27, 0x72, 0x70, 0xaa, 0xa4, 0xfe, - 0x6d, 0x0d, 0xa6, 0x54, 0x02, 0x3a, 0x86, 0x83, 0xf2, 0x8e, 0xc2, 0xb0, 0xab, 0xf8, 0xce, 0xaa, - 0x68, 0x8f, 0xc9, 0xb3, 0xcf, 0xe5, 0xd4, 0x61, 0xa7, 0x84, 0x24, 0xc5, 0xfc, 0x2b, 0x9d, 0x12, - 0x66, 0x76, 0x12, 0x79, 0x4a, 0x98, 0xce, 0xc1, 0x19, 0xc4, 0xe8, 0x15, 0x18, 0x31, 0x7d, 0x5b, - 0x0c, 0xcc, 0x7b, 0xca, 0xa9, 0x40, 0xb8, 0x13, 0x5f, 0x85, 0x6a, 0xe1, 0x0e, 0xa6, 0x10, 0xf5, - 0xdf, 0x19, 0x81, 0x86, 0x12, 0x4e, 0x0f, 0xad, 0x56, 0x51, 0xa1, 0x63, 0xf0, 0x91, 0x1a, 0xbd, - 0x0a, 0x23, 0xbd, 0xc1, 0xb0, 0xa4, 0x0e, 0x2d, 0xc1, 0x5d, 0xa7, 0xe0, 0x7a, 0x83, 0x21, 0x7a, - 0x59, 0x6a, 0xe5, 0xe5, 0xf4, 0x66, 0xe9, 0x50, 0x9a, 0xd2, 0xcc, 0x23, 0xf2, 0x1c, 0x2d, 0x24, - 0x4f, 0x17, 0x26, 0x02, 0xa1, 0xb2, 0x8f, 0x55, 0xb8, 0x7f, 0xaa, 0x0c, 0xb5, 0xd0, 0xd1, 0xb9, - 0xa8, 0x1f, 0xa9, 0xf0, 0x11, 0x12, 0x2a, 0x05, 0x0c, 0xd9, 0xcd, 0x0d, 0xa6, 0xc5, 0xd4, 0xb9, - 0x14, 0xb0, 0xce, 0x52, 0xb0, 0xc8, 0xd1, 0xbf, 0x50, 0x03, 0x94, 0x05, 0x88, 0xde, 0x04, 0x63, - 0xec, 0x1e, 0x97, 0x58, 0x6c, 0x4a, 0xac, 0x29, 0x23, 0x08, 0x30, 0xcf, 0x43, 0x5d, 0x71, 0xaf, - 0xaf, 0xdc, 0xcc, 0xb0, 0xf3, 0x69, 0x81, 0x4f, 0xb9, 0x04, 0x18, 0xed, 0x4f, 0x23, 0x85, 0xfb, - 0xd3, 0x3a, 0x4c, 0xf4, 0x6d, 0x97, 0xb9, 0xa5, 0x94, 0x33, 0x4a, 0xf0, 0x03, 0x34, 0x0e, 0x02, - 0x47, 0xb0, 0xf4, 0x1f, 0xd7, 0x28, 0x15, 0xdb, 0x6e, 0x48, 0x5c, 0xc3, 0x35, 0x09, 0xba, 0x0f, - 0x60, 0x0c, 0x43, 0x8f, 0x6f, 0xf3, 0x82, 0x98, 0xdf, 0x5f, 0x72, 0xc2, 0x24, 0xd4, 0x65, 0x09, - 0x91, 0x1f, 0x6c, 0xc5, 0xdf, 0x58, 0xc1, 0x46, 0x71, 0x87, 0x76, 0x9f, 0xbc, 0x62, 0xbb, 0x96, - 0x77, 0x4f, 0x8c, 0x6f, 0x65, 0xdc, 0x77, 0x25, 0x44, 0x8e, 0x3b, 0xfe, 0xc6, 0x0a, 0x36, 0xf4, - 0x41, 0x58, 0x60, 0xea, 0x8f, 0xcb, 0xe2, 0x95, 0x8a, 0xc6, 0x79, 0x8e, 0x13, 0x6d, 0x3c, 0x75, - 0x16, 0x1d, 0x6e, 0xa1, 0x55, 0x50, 0x06, 0x17, 0xd6, 0xd6, 0xbf, 0xa3, 0xc1, 0x85, 0xdc, 0xb1, - 0x40, 0xd7, 0x61, 0x3e, 0x76, 0x6a, 0x50, 0x19, 0x65, 0x3d, 0x0e, 0xc0, 0x7b, 0x33, 0x5d, 0x00, - 0x67, 0xeb, 0xa0, 0x55, 0x29, 0x2d, 0xa8, 0x8c, 0x58, 0x78, 0x44, 0x3c, 0x26, 0x40, 0xe5, 0xf1, - 0x6a, 0x9c, 0x57, 0x4f, 0xff, 0x48, 0xa2, 0xc1, 0xf1, 0x80, 0xd1, 0xf5, 0xb1, 0x41, 0x7a, 0xd2, - 0xc9, 0x5c, 0xae, 0x8f, 0x26, 0x4d, 0xc4, 0x3c, 0x0f, 0x5d, 0x56, 0x2f, 0x46, 0x48, 0x46, 0x14, - 0x5d, 0x8e, 0xd0, 0x87, 0x00, 0xc2, 0x7d, 0xc8, 0x76, 0x7b, 0xa8, 0x07, 0x75, 0x43, 0xbc, 0xd3, - 0x22, 0x88, 0xed, 0x85, 0x72, 0xca, 0x96, 0x00, 0xc2, 0x3d, 0x07, 0xa3, 0x2f, 0x2c, 0x81, 0xeb, - 0x7f, 0x57, 0x83, 0x8b, 0xf9, 0xd7, 0x95, 0x8e, 0xb1, 0xc3, 0xf6, 0xa1, 0xe1, 0xc7, 0xd5, 0x04, - 0x65, 0xfe, 0x82, 0x1a, 0x38, 0x46, 0xb9, 0xf8, 0x4e, 0xa5, 0x8f, 0x96, 0xef, 0x05, 0xd1, 0xec, - 0xa4, 0x63, 0xc9, 0x48, 0x21, 0x5e, 0x69, 0x09, 0x56, 0xe1, 0xeb, 0x9f, 0xa9, 0x01, 0xdc, 0x26, - 0xe1, 0x3d, 0xcf, 0xdf, 0xa6, 0x63, 0xf4, 0x33, 0x75, 0x6d, 0xee, 0x71, 0x18, 0x1d, 0x78, 0x56, - 0x20, 0x18, 0x15, 0xbb, 0xcf, 0xc6, 0x4e, 0xe4, 0x59, 0x2a, 0x5a, 0x84, 0x31, 0x66, 0x6d, 0x16, - 0xdb, 0x01, 0x13, 0x7e, 0xa9, 0xc0, 0x13, 0x60, 0x9e, 0xce, 0xc3, 0x71, 0x33, 0xbf, 0xdc, 0x40, - 0x88, 0xf3, 0x22, 0x1c, 0x37, 0x4f, 0xc3, 0x32, 0x57, 0xff, 0xec, 0x28, 0x24, 0x5e, 0x1a, 0x8a, - 0x95, 0xf2, 0xd1, 0x87, 0xa4, 0x94, 0x7f, 0x10, 0x16, 0x1c, 0xcf, 0xb0, 0x9a, 0x86, 0x43, 0xc9, - 0xde, 0xef, 0xf2, 0xf9, 0x30, 0xdc, 0x1e, 0x89, 0x5e, 0x0c, 0x62, 0x2c, 0xe0, 0x56, 0x41, 0x19, - 0x5c, 0x58, 0x1b, 0x0d, 0x95, 0x07, 0x8e, 0xa8, 0x18, 0xb2, 0x5a, 0xf9, 0x25, 0xa6, 0x25, 0xd5, - 0x29, 0x5b, 0xee, 0xcd, 0xc9, 0x47, 0x90, 0xd0, 0xe7, 0x35, 0xb8, 0x40, 0x76, 0x43, 0xe2, 0xbb, - 0x86, 0x73, 0xd7, 0x37, 0x36, 0x37, 0x6d, 0x33, 0xe1, 0xf3, 0xb4, 0x76, 0xb0, 0xbf, 0x78, 0x61, - 0x25, 0xaf, 0xc0, 0x83, 0xfd, 0xc5, 0x77, 0x64, 0x9f, 0x1a, 0x8b, 0x5c, 0xb0, 0x73, 0xab, 0x30, - 0x72, 0xcc, 0x47, 0x77, 0xe9, 0x59, 0x68, 0x9c, 0xc0, 0x5f, 0x37, 0x71, 0xa1, 0xec, 0xeb, 0xe3, - 0xa0, 0x38, 0xc0, 0x9f, 0x20, 0x8e, 0xf4, 0x6f, 0x6a, 0x70, 0xde, 0x74, 0x6c, 0xe2, 0x86, 0x29, - 0x2f, 0x67, 0xbe, 0x34, 0x5e, 0x2e, 0xe7, 0x9a, 0x3f, 0x20, 0x6e, 0xa7, 0xdd, 0xf2, 0x5c, 0x97, - 0x98, 0x61, 0x2b, 0x07, 0x3a, 0xd7, 0x77, 0xf2, 0x72, 0x70, 0x6e, 0x6b, 0x58, 0x87, 0x58, 0x7a, - 0xa7, 0xad, 0xde, 0x15, 0x6b, 0x89, 0x34, 0x2c, 0x73, 0xd1, 0x33, 0xd0, 0xe8, 0xf9, 0xde, 0x70, - 0x10, 0xb4, 0x98, 0x37, 0x16, 0x5f, 0x61, 0x4c, 0x9c, 0xb8, 0x1e, 0x27, 0x63, 0xb5, 0x0c, 0x7a, - 0x27, 0x4c, 0xf1, 0xcf, 0x35, 0x9f, 0x6c, 0xda, 0xbb, 0x62, 0xc5, 0x31, 0xe7, 0x8e, 0xeb, 0x4a, - 0x3a, 0x4e, 0x94, 0x42, 0x6f, 0x85, 0x49, 0x3b, 0x08, 0x86, 0xc4, 0x5f, 0xc7, 0xb7, 0x44, 0x34, - 0x45, 0x66, 0xc3, 0xed, 0x44, 0x89, 0x38, 0xce, 0x47, 0xbf, 0xa6, 0xc1, 0x8c, 0x4f, 0x5e, 0x1d, - 0xda, 0x3e, 0xb1, 0x18, 0xd2, 0x40, 0x5c, 0x43, 0xe8, 0x56, 0xbc, 0xfb, 0xb0, 0x84, 0x13, 0x50, - 0x39, 0xa5, 0x4b, 0xd3, 0x44, 0x32, 0x13, 0xa7, 0x9a, 0x40, 0xc7, 0x2a, 0xb0, 0x7b, 0xae, 0xed, - 0xf6, 0x96, 0x9d, 0x5e, 0xb0, 0x50, 0x67, 0xab, 0x97, 0x8b, 0x5e, 0x71, 0x32, 0x56, 0xcb, 0xa0, - 0x77, 0xc3, 0xf4, 0x30, 0xa0, 0xb4, 0xdb, 0x27, 0x7c, 0x80, 0x27, 0x63, 0x37, 0xc9, 0x75, 0x35, - 0x03, 0x27, 0xcb, 0x51, 0x6d, 0x2f, 0x4a, 0x10, 0xc3, 0x0c, 0x3c, 0xe2, 0x03, 0x6d, 0xe7, 0x7a, - 0x22, 0x07, 0xa7, 0x4a, 0x5e, 0x5a, 0x86, 0x73, 0x39, 0xdd, 0x3c, 0xd1, 0x02, 0xf9, 0x76, 0x0d, - 0xde, 0x78, 0x24, 0x59, 0xa2, 0xaf, 0x6b, 0xd0, 0x20, 0xbb, 0xa1, 0x6f, 0x48, 0xa7, 0x4d, 0x3a, - 0x47, 0xbd, 0x87, 0xb3, 0x08, 0x96, 0x56, 0x62, 0x4c, 0x7c, 0xde, 0xe4, 0x9e, 0xa7, 0xe4, 0x60, - 0xb5, 0x41, 0x54, 0x6a, 0xe7, 0x11, 0x41, 0x54, 0xdb, 0x9d, 0x78, 0x9a, 0x45, 0xe4, 0x5c, 0x7a, - 0x11, 0xe6, 0xd2, 0x90, 0x4f, 0x34, 0x54, 0xff, 0xa0, 0x06, 0x63, 0x6b, 0x8e, 0x71, 0x26, 0xa1, - 0x31, 0x3f, 0x9e, 0x08, 0x49, 0x56, 0x2e, 0xd0, 0x1b, 0x6b, 0x6b, 0x61, 0x40, 0xc4, 0xad, 0x54, - 0x40, 0xc4, 0x97, 0x2a, 0xe0, 0x38, 0x3c, 0xfe, 0xe1, 0x0f, 0x34, 0x98, 0x64, 0xe5, 0xce, 0x20, - 0x4e, 0xc3, 0xc7, 0x92, 0x71, 0x1a, 0x9e, 0x2b, 0xdf, 0xa9, 0x82, 0xf8, 0x0c, 0x7f, 0x12, 0x75, - 0x86, 0x45, 0xd8, 0xfa, 0x90, 0xfa, 0x16, 0x15, 0xef, 0xcd, 0x95, 0xbc, 0x80, 0x80, 0xb7, 0x3c, - 0xd3, 0x70, 0x32, 0x51, 0x01, 0x0f, 0x7d, 0x90, 0xca, 0x85, 0x49, 0x22, 0xe2, 0xae, 0x44, 0xbd, - 0x29, 0x27, 0xdb, 0x46, 0xd1, 0x5b, 0x62, 0x7c, 0x51, 0x4a, 0x80, 0x63, 0x14, 0xfa, 0xef, 0xd6, - 0xa0, 0xa1, 0xcc, 0xe6, 0x4f, 0x25, 0xe0, 0xe0, 0xb5, 0xdc, 0x97, 0x5b, 0x6a, 0xcc, 0x29, 0xf3, - 0xe2, 0x09, 0x5e, 0x6d, 0x09, 0xa0, 0x61, 0xc6, 0x31, 0xa4, 0x2b, 0x11, 0xb8, 0x12, 0x8b, 0x5a, - 0x38, 0x87, 0xc7, 0x09, 0x58, 0xc5, 0xa2, 0xff, 0xe3, 0x1a, 0x4c, 0xac, 0xf9, 0x1e, 0x9d, 0xe3, - 0x33, 0x60, 0x10, 0x1b, 0x09, 0x06, 0x51, 0x72, 0xf1, 0xf2, 0xd6, 0x16, 0xb2, 0x88, 0x4f, 0xa4, - 0x58, 0x44, 0xb3, 0x12, 0x96, 0xc3, 0x99, 0xc4, 0x0f, 0x35, 0x68, 0x88, 0x92, 0x67, 0xc0, 0x26, - 0x8c, 0x24, 0x9b, 0x78, 0xbe, 0x4a, 0xc7, 0x0a, 0x18, 0xc5, 0x57, 0x34, 0x98, 0x16, 0x25, 0x56, - 0x49, 0x7f, 0x83, 0xf8, 0xe8, 0x1a, 0x4c, 0x04, 0x43, 0x36, 0x97, 0xa2, 0x47, 0x8f, 0xa9, 0xac, - 0xc2, 0xdf, 0x30, 0x4c, 0xf6, 0x02, 0x19, 0x2f, 0xa2, 0x44, 0x22, 0xe5, 0x09, 0x38, 0xaa, 0x4c, - 0x15, 0x3a, 0xdf, 0x73, 0x32, 0x11, 0x25, 0xb0, 0xe7, 0x10, 0xcc, 0x72, 0xa8, 0x1e, 0x45, 0x7f, - 0xa3, 0x53, 0x2a, 0xa6, 0x47, 0xd1, 0xec, 0x00, 0xf3, 0x74, 0xfd, 0x0b, 0xa3, 0x72, 0xb4, 0x19, - 0x1f, 0xbb, 0x01, 0x93, 0xa6, 0x4f, 0x8c, 0x90, 0x58, 0xcd, 0xbd, 0xe3, 0x34, 0x8e, 0x09, 0x74, - 0xad, 0xa8, 0x06, 0x8e, 0x2b, 0x53, 0xd1, 0x49, 0x3d, 0x78, 0xaa, 0xc5, 0x62, 0x66, 0xe1, 0xa1, - 0xd3, 0xf3, 0x30, 0xe6, 0xdd, 0x73, 0xa5, 0x77, 0xc7, 0xa1, 0x88, 0x59, 0x57, 0xee, 0xd0, 0xd2, - 0x98, 0x57, 0x52, 0x63, 0xa0, 0x8c, 0x1e, 0x12, 0x03, 0xa5, 0x0f, 0x13, 0x7d, 0x36, 0x0d, 0xd5, - 0xc2, 0x52, 0x26, 0x66, 0x54, 0x8d, 0x12, 0xce, 0x40, 0xe3, 0x08, 0x07, 0x15, 0x82, 0xa9, 0x9c, - 0x16, 0x0c, 0x0c, 0x93, 0xa8, 0x42, 0xf0, 0xed, 0x28, 0x11, 0xc7, 0xf9, 0xe8, 0x7e, 0x32, 0xbc, - 0xce, 0x44, 0x05, 0x33, 0xa7, 0x68, 0x9f, 0x12, 0x51, 0x87, 0x0f, 0x7e, 0x61, 0x88, 0x9d, 0x2f, - 0x8d, 0x4a, 0x32, 0x15, 0x8c, 0x3f, 0xff, 0xf9, 0x2c, 0xad, 0xd4, 0xf3, 0x59, 0xef, 0x80, 0xb1, - 0xc1, 0x96, 0x11, 0x44, 0xb4, 0x1a, 0x85, 0xb4, 0x1f, 0x5b, 0xa3, 0x89, 0x0f, 0xf6, 0x17, 0xa7, - 0x04, 0x6a, 0xf6, 0x8d, 0x79, 0x59, 0x34, 0x84, 0x73, 0x41, 0x68, 0x38, 0xa4, 0x6b, 0x0b, 0xf3, - 0x51, 0x10, 0x1a, 0xfd, 0x41, 0x89, 0xc8, 0xf4, 0xdc, 0xfb, 0x39, 0x0b, 0x0a, 0xe7, 0xc1, 0x47, - 0x9f, 0xd5, 0x60, 0x81, 0xa5, 0x2f, 0x0f, 0x43, 0x8f, 0xbf, 0xe2, 0x11, 0x23, 0x3f, 0xf9, 0xb9, - 0x2d, 0x53, 0xf6, 0xbb, 0x05, 0xf0, 0x70, 0x21, 0x26, 0xf4, 0x1a, 0x5c, 0x70, 0x8c, 0x20, 0x5c, - 0x36, 0x43, 0x7b, 0xc7, 0x0e, 0xf7, 0xe2, 0x26, 0x9c, 0xfc, 0x29, 0x31, 0xe6, 0x1e, 0x72, 0x2b, - 0x0f, 0x18, 0xce, 0xc7, 0xa1, 0xff, 0x4f, 0x0d, 0x50, 0x96, 0x84, 0x50, 0x1f, 0xea, 0x16, 0xd9, - 0x34, 0x86, 0x4e, 0x18, 0x49, 0x02, 0x95, 0x83, 0x3f, 0x49, 0xee, 0xdc, 0x16, 0x80, 0xb1, 0x44, - 0x81, 0x06, 0x30, 0x79, 0x6f, 0xcb, 0x0e, 0x89, 0x63, 0x07, 0xe1, 0x69, 0x05, 0x9b, 0x92, 0xc2, - 0xcf, 0x2b, 0x11, 0x64, 0x1c, 0x23, 0xd1, 0xff, 0xea, 0x08, 0xd4, 0x4f, 0xf0, 0x46, 0xeb, 0x10, - 0x90, 0x08, 0x4c, 0x41, 0x25, 0x26, 0x52, 0xc5, 0x68, 0xc6, 0xc4, 0x9a, 0x56, 0x06, 0x18, 0xce, - 0x41, 0x80, 0x5e, 0x83, 0xf3, 0xb6, 0xbb, 0xe9, 0x1b, 0x41, 0xe8, 0x0f, 0xcd, 0x70, 0xe8, 0x93, - 0x2a, 0x31, 0xf1, 0x99, 0xa5, 0xa1, 0x93, 0x03, 0x0e, 0xe7, 0x22, 0x41, 0x9b, 0x30, 0x71, 0xcf, - 0xf3, 0xb7, 0x29, 0x03, 0x1d, 0xad, 0xf0, 0xe8, 0xd2, 0x2b, 0x0c, 0x46, 0xcc, 0x39, 0xf9, 0x77, - 0x80, 0x23, 0xe0, 0xfa, 0x1f, 0x6a, 0x30, 0xc6, 0x6f, 0xdb, 0xbd, 0x3e, 0xb4, 0x2c, 0xd6, 0xd6, - 0xc2, 0x38, 0xcf, 0x54, 0xf7, 0x61, 0x25, 0x5e, 0x2f, 0xba, 0x0f, 0x6b, 0x6c, 0x81, 0x48, 0xf3, - 0x87, 0x23, 0xa2, 0x33, 0x4c, 0x66, 0xe8, 0xc0, 0x39, 0x21, 0xfe, 0xde, 0xb2, 0x37, 0x09, 0x25, - 0xb0, 0xb6, 0xb1, 0x17, 0x88, 0xdb, 0xee, 0x8c, 0xf5, 0xb6, 0xb2, 0xd9, 0x38, 0xaf, 0x0e, 0xfa, - 0x27, 0x1a, 0xdd, 0x9d, 0x43, 0xdf, 0x36, 0xab, 0x05, 0x4f, 0x96, 0x8d, 0x5b, 0x5a, 0xe5, 0xd0, - 0xb8, 0xf9, 0x60, 0x3d, 0xde, 0xa6, 0x59, 0xea, 0x83, 0xfd, 0xc5, 0xc5, 0x1c, 0xf3, 0x64, 0x64, - 0x50, 0xa7, 0x43, 0xfb, 0x99, 0x1f, 0x1f, 0x5a, 0x84, 0x19, 0xf7, 0xa3, 0x26, 0xa3, 0x1b, 0x30, - 0x16, 0x98, 0xde, 0x80, 0x9c, 0x24, 0x24, 0xbc, 0x1c, 0xe1, 0x2e, 0xad, 0x89, 0x39, 0x80, 0x4b, - 0x9f, 0x80, 0x29, 0xb5, 0xe5, 0x39, 0xe6, 0x89, 0xb6, 0x6a, 0x9e, 0x38, 0xf1, 0x29, 0x9e, 0x6a, - 0xce, 0xf8, 0xbd, 0x1a, 0x88, 0x27, 0x13, 0x8f, 0x71, 0x84, 0xf1, 0x89, 0x28, 0x8a, 0x6a, 0x95, - 0x77, 0x22, 0xd3, 0x4f, 0xc3, 0xc7, 0x83, 0xa0, 0x06, 0x52, 0x45, 0x9e, 0x0c, 0x5f, 0x36, 0x52, - 0x21, 0x66, 0x35, 0xef, 0xda, 0xc3, 0x0e, 0x58, 0xf6, 0x43, 0x0d, 0xa6, 0x12, 0x01, 0xe1, 0xfa, - 0x30, 0xe2, 0x4b, 0x5b, 0x40, 0xd9, 0x33, 0x9e, 0xc8, 0xbb, 0xe9, 0xb1, 0x43, 0x0a, 0x61, 0x8a, - 0x47, 0xc6, 0x8e, 0xab, 0x9d, 0x52, 0xec, 0x38, 0xfd, 0xcb, 0x1a, 0x5c, 0x8c, 0x3a, 0x94, 0x0c, - 0x44, 0x82, 0xae, 0x40, 0xdd, 0x18, 0xd8, 0xcc, 0xf2, 0xab, 0x1a, 0xcf, 0x97, 0xd7, 0x3a, 0x2c, - 0x0d, 0xcb, 0x5c, 0xf4, 0x36, 0xa8, 0x47, 0xa4, 0x27, 0x24, 0x3f, 0xc9, 0xb7, 0xe4, 0xa9, 0x95, - 0x2c, 0x81, 0x9e, 0x52, 0x22, 0xdd, 0x8e, 0xc5, 0x1b, 0xb5, 0x44, 0xcc, 0xcf, 0xb8, 0xf5, 0x2f, - 0x8e, 0xc0, 0x34, 0xb7, 0x94, 0x34, 0x6d, 0xd7, 0xb2, 0xdd, 0xde, 0x19, 0x6c, 0x10, 0x89, 0xb7, - 0xc6, 0x6b, 0xa7, 0xf5, 0xd6, 0xf8, 0x4d, 0x18, 0x7f, 0x95, 0x72, 0xaa, 0x88, 0xc0, 0x8f, 0xc5, - 0x30, 0x24, 0xf1, 0x32, 0x26, 0x17, 0x60, 0x01, 0x02, 0x85, 0xca, 0x93, 0xef, 0x55, 0x2e, 0x93, - 0x27, 0x86, 0x56, 0x86, 0xac, 0x9e, 0xca, 0x7f, 0xef, 0x9d, 0xc5, 0x60, 0x4d, 0xd4, 0x78, 0xbd, - 0xc4, 0x60, 0x4d, 0x34, 0xba, 0x60, 0x9f, 0x7b, 0x16, 0x2e, 0xe4, 0x8e, 0xc6, 0xd1, 0x92, 0xa1, - 0xfe, 0xdd, 0x1a, 0xb0, 0xa7, 0x98, 0xcf, 0x80, 0x36, 0x3f, 0x96, 0x10, 0x5e, 0x5e, 0x28, 0x1f, - 0x05, 0xb6, 0xc8, 0xfc, 0xd3, 0x4b, 0x99, 0x7f, 0xde, 0x57, 0x1e, 0xc5, 0xe1, 0xb6, 0x9f, 0x6f, - 0xd4, 0x00, 0x68, 0x31, 0xfe, 0x68, 0xb5, 0x70, 0x0c, 0xe5, 0x14, 0xad, 0x25, 0xb9, 0x47, 0x96, - 0x12, 0xcf, 0xf2, 0xf0, 0x5a, 0x97, 0x2f, 0x0f, 0x8f, 0xc4, 0x87, 0x0c, 0xc9, 0x57, 0x87, 0x93, - 0x1c, 0x63, 0xf4, 0x94, 0x38, 0x86, 0xfe, 0x5d, 0x0d, 0xd8, 0x8b, 0x34, 0xed, 0xdb, 0x5d, 0xf4, - 0x6e, 0x98, 0xb6, 0xf9, 0x29, 0x6e, 0x5b, 0x0d, 0xd9, 0xc7, 0x4e, 0x9a, 0x3a, 0x6a, 0x06, 0x4e, - 0x96, 0x43, 0xae, 0x32, 0xae, 0x55, 0x5e, 0x8c, 0x17, 0x0d, 0x39, 0x92, 0x47, 0xfc, 0xa4, 0x06, - 0xb3, 0xa9, 0xb2, 0xc7, 0xd0, 0xad, 0x1e, 0x0e, 0xcb, 0x55, 0x22, 0xdd, 0x8f, 0x9c, 0x41, 0xa4, - 0x7b, 0x19, 0x74, 0x7e, 0xf4, 0x21, 0x07, 0x9d, 0xff, 0xbe, 0x06, 0xec, 0x31, 0xf2, 0x33, 0x60, - 0xbf, 0x1f, 0x4d, 0xb2, 0xdf, 0x67, 0x4b, 0xd3, 0x4e, 0x01, 0xd7, 0xfd, 0x4b, 0x0d, 0x58, 0x0c, - 0x6a, 0xe1, 0xba, 0xa2, 0x78, 0x83, 0x68, 0x05, 0xde, 0x20, 0x4f, 0x0a, 0x67, 0x92, 0x94, 0x21, - 0x54, 0x71, 0x28, 0x79, 0x9b, 0xe2, 0x2f, 0x32, 0x92, 0x64, 0x25, 0x59, 0x9f, 0x11, 0xf4, 0x1a, - 0x4c, 0x07, 0x5b, 0x9e, 0x17, 0x46, 0x26, 0x09, 0x31, 0x7b, 0xcd, 0xf2, 0xbe, 0xdc, 0x51, 0x5f, - 0xf8, 0xea, 0xec, 0xaa, 0xc0, 0x71, 0x12, 0x97, 0xfe, 0xfb, 0xa2, 0xfb, 0x27, 0x58, 0x2a, 0x67, - 0xc8, 0xfa, 0xde, 0x92, 0x62, 0x7d, 0x45, 0x8f, 0xae, 0xff, 0x8e, 0xe8, 0x85, 0x0c, 0x1d, 0x3e, - 0x80, 0x69, 0x47, 0x7d, 0x47, 0x48, 0x10, 0x66, 0xa9, 0x27, 0x88, 0x64, 0xf4, 0xc0, 0x44, 0x32, - 0x4e, 0x22, 0xa0, 0xfc, 0x31, 0x6a, 0x3c, 0x7f, 0x1c, 0x99, 0xbf, 0x88, 0xc1, 0x66, 0x60, 0x4d, - 0xcd, 0xc0, 0xc9, 0x72, 0xfa, 0x37, 0x6b, 0x70, 0x99, 0xb7, 0x9d, 0x79, 0xd1, 0xb7, 0xc9, 0x80, - 0xb8, 0x16, 0x71, 0xcd, 0x3d, 0x26, 0x07, 0x5b, 0x5e, 0x0f, 0x7d, 0x56, 0x83, 0x7a, 0x74, 0x62, - 0x26, 0x3a, 0xf2, 0xe1, 0x0a, 0xd1, 0xd7, 0x0b, 0xd0, 0xc8, 0x03, 0x3b, 0x1e, 0xc6, 0x4e, 0x7c, - 0x61, 0x89, 0x19, 0xed, 0xc2, 0xd8, 0xc0, 0xf7, 0x36, 0x22, 0x1d, 0xf0, 0x95, 0xd3, 0x6f, 0xc2, - 0x1a, 0x05, 0xcf, 0x57, 0x1c, 0xfb, 0x8b, 0x39, 0x42, 0x1d, 0xc3, 0x53, 0xc7, 0x6a, 0x3a, 0x7a, - 0x3a, 0x1d, 0xb8, 0x59, 0x1a, 0x7c, 0x32, 0x61, 0xb0, 0xee, 0x80, 0x7e, 0x74, 0x5b, 0x4e, 0x02, - 0xf0, 0x03, 0xf0, 0x66, 0x05, 0xe0, 0xca, 0xae, 0x49, 0x82, 0xa0, 0x65, 0x0c, 0x0c, 0x93, 0x2a, - 0xc0, 0xec, 0xc6, 0x32, 0x37, 0x4e, 0x9f, 0x00, 0xe4, 0xa7, 0x6b, 0xb0, 0xa8, 0xc0, 0x4c, 0xf8, - 0x70, 0x45, 0xdc, 0xe3, 0x6b, 0x1a, 0x34, 0x0c, 0xd7, 0xf5, 0x42, 0x43, 0x3d, 0x32, 0x25, 0x55, - 0x27, 0x27, 0x0f, 0xd7, 0xd2, 0x72, 0x8c, 0x27, 0xe5, 0x21, 0xa1, 0xe4, 0x60, 0xb5, 0x39, 0x97, - 0x5e, 0x84, 0xb9, 0x74, 0xad, 0x13, 0x69, 0xba, 0x2d, 0xb8, 0xa8, 0xb4, 0x8a, 0x1d, 0xc1, 0xb4, - 0xb6, 0x88, 0xb9, 0x1d, 0x9c, 0x64, 0x1c, 0x9b, 0x54, 0xb2, 0x96, 0x40, 0x94, 0xa7, 0x0d, 0x9e, - 0x86, 0x89, 0x1d, 0x3b, 0xb0, 0xa3, 0x48, 0x04, 0x0a, 0x8c, 0x97, 0x79, 0x32, 0x8e, 0xf2, 0xf5, - 0x97, 0xe0, 0x9c, 0x0a, 0x83, 0x31, 0xd1, 0xdb, 0xdd, 0x93, 0xb4, 0x62, 0x15, 0x9e, 0x54, 0x20, - 0xe4, 0xde, 0x9f, 0x3c, 0x09, 0xb8, 0x6f, 0xd5, 0x23, 0x9e, 0x27, 0x6e, 0xdf, 0x7c, 0x4f, 0x83, - 0x47, 0x49, 0x11, 0xd9, 0x09, 0xbe, 0xf1, 0xa1, 0xaa, 0x74, 0x51, 0x48, 0xd7, 0x22, 0x7a, 0x57, - 0x51, 0x36, 0x2e, 0x6e, 0x1a, 0xba, 0x9f, 0x78, 0xd7, 0xa3, 0x56, 0x49, 0x9b, 0xcc, 0x99, 0xe5, - 0xc3, 0x5e, 0xf5, 0x40, 0x3e, 0xd4, 0x03, 0x31, 0x97, 0x95, 0xae, 0x79, 0xe7, 0xd0, 0x86, 0x70, - 0x12, 0x15, 0x5f, 0x58, 0xe2, 0x41, 0xdf, 0xd2, 0xe0, 0xbc, 0x93, 0xb3, 0xbe, 0xc4, 0xc6, 0x7f, - 0xf7, 0x61, 0xac, 0x5d, 0x6e, 0x78, 0xcf, 0xcb, 0xc1, 0xb9, 0x6d, 0x41, 0x7f, 0xa7, 0xf0, 0x42, - 0xf1, 0x58, 0x85, 0x67, 0xd5, 0x8e, 0x5a, 0x00, 0x25, 0xee, 0x16, 0xff, 0x12, 0x34, 0xbc, 0x98, - 0x2d, 0x88, 0x4b, 0xe0, 0x37, 0xab, 0xb6, 0x4e, 0xe1, 0x34, 0xfc, 0x28, 0x53, 0x49, 0xc0, 0x2a, - 0x42, 0xf4, 0x15, 0x0d, 0x90, 0x95, 0xd9, 0x3e, 0xc4, 0x71, 0x2a, 0x3e, 0xfd, 0x4d, 0x92, 0x9f, - 0xdd, 0x64, 0xd3, 0x71, 0x4e, 0x2b, 0xf4, 0x7f, 0x31, 0xc1, 0x05, 0x75, 0x66, 0x3a, 0x37, 0x61, - 0x7c, 0x83, 0xe9, 0xba, 0x82, 0x19, 0x94, 0xd7, 0xac, 0xb9, 0xca, 0xcc, 0x35, 0x51, 0xfe, 0x1f, - 0x0b, 0xd0, 0x68, 0x09, 0x60, 0xc3, 0xf1, 0xcc, 0xed, 0x56, 0xa7, 0x8d, 0x23, 0x21, 0x88, 0x2d, - 0xc0, 0xa6, 0x4c, 0xc5, 0x4a, 0x09, 0xf4, 0x11, 0x18, 0xb1, 0xa4, 0x7a, 0xf4, 0x7c, 0x15, 0xcd, - 0x30, 0x76, 0xdb, 0xa7, 0xcb, 0x8d, 0x42, 0x45, 0x1e, 0xd4, 0x5d, 0x21, 0x0b, 0x8b, 0xc5, 0x55, - 0xfe, 0xd9, 0x1a, 0x29, 0x54, 0x4b, 0x59, 0x3e, 0x4a, 0xc1, 0x12, 0x09, 0x45, 0x28, 0x95, 0xdd, - 0xb1, 0x8a, 0x08, 0xa5, 0xa6, 0x7b, 0x98, 0x1d, 0x62, 0x4d, 0xd5, 0x5b, 0xc7, 0x8f, 0xaf, 0xb7, - 0x4e, 0x17, 0xea, 0xac, 0x9b, 0x30, 0x1e, 0xf2, 0xa7, 0xf3, 0x27, 0x2a, 0x78, 0x5f, 0xd1, 0x0e, - 0xb0, 0xb7, 0xf5, 0x63, 0x99, 0x5d, 0x3c, 0xbc, 0x2f, 0xa0, 0x53, 0x6a, 0xdc, 0x61, 0xaf, 0x8a, - 0x89, 0xd0, 0x82, 0xe5, 0xa9, 0x91, 0x3f, 0x4e, 0xc6, 0xa9, 0x91, 0xff, 0xc7, 0x02, 0x34, 0xda, - 0xa6, 0x9a, 0x18, 0xdf, 0x1f, 0x45, 0x20, 0x84, 0xe5, 0xaa, 0x2b, 0x32, 0x88, 0x9c, 0xff, 0xf9, - 0x17, 0x96, 0x08, 0x90, 0x09, 0x13, 0xc2, 0xf4, 0x21, 0xe2, 0x63, 0x3f, 0x5f, 0xe5, 0x8d, 0x82, - 0xe8, 0xcd, 0x3d, 0x7e, 0x25, 0x39, 0x82, 0xac, 0xff, 0xfb, 0x51, 0x6e, 0xb5, 0xfa, 0x29, 0xfa, - 0xcb, 0xf5, 0xa0, 0x1e, 0x01, 0xab, 0x64, 0x06, 0x8c, 0x9e, 0x7a, 0xe1, 0x03, 0x2a, 0x1f, 0x7e, - 0x91, 0xc0, 0x51, 0x2b, 0xef, 0xaa, 0x91, 0x12, 0x7e, 0xed, 0x58, 0xd7, 0x8c, 0xf2, 0x1d, 0x4b, - 0x46, 0x4b, 0x39, 0x96, 0xbc, 0x00, 0xb3, 0x91, 0xef, 0x9d, 0x45, 0xd8, 0xd1, 0x96, 0xf0, 0x4e, - 0x67, 0x57, 0x6c, 0x5b, 0xc9, 0x2c, 0x9c, 0x2e, 0x8b, 0xbe, 0xad, 0xc1, 0x9b, 0xb9, 0x67, 0x7c, - 0x8b, 0x6e, 0x65, 0xec, 0xdd, 0x35, 0x12, 0x3f, 0xf4, 0x16, 0x3b, 0x5d, 0x8c, 0x9f, 0xd8, 0xe9, - 0xe2, 0xca, 0xc1, 0xfe, 0xe2, 0x9b, 0x5b, 0xc7, 0x80, 0x8d, 0x8f, 0xd5, 0x02, 0xfd, 0x26, 0x4c, - 0xca, 0x25, 0x8c, 0x2e, 0x2b, 0x02, 0x7b, 0xcc, 0x65, 0x6f, 0x92, 0x3d, 0x2e, 0xbd, 0x2f, 0x26, - 0xa4, 0x77, 0xae, 0xbf, 0xbd, 0x4c, 0x13, 0x84, 0x20, 0xaf, 0xff, 0x27, 0x8d, 0xd3, 0xac, 0x78, - 0xa3, 0xd0, 0x80, 0x46, 0x9f, 0x47, 0x9e, 0x63, 0x17, 0x03, 0xb5, 0xf2, 0x57, 0x12, 0x57, 0x63, - 0x30, 0x58, 0x85, 0x89, 0x76, 0xb3, 0x0f, 0x69, 0x5e, 0xaf, 0xc8, 0x5f, 0x8e, 0xfd, 0x9e, 0x26, - 0xca, 0xd6, 0x51, 0x5f, 0x20, 0xd4, 0x0e, 0x7f, 0x81, 0xf0, 0xe8, 0x17, 0xa4, 0xf4, 0xef, 0x8d, - 0x40, 0xee, 0xeb, 0x01, 0x48, 0x87, 0x71, 0x7e, 0xc7, 0x41, 0x7d, 0x62, 0x94, 0x5f, 0x80, 0xc0, - 0x22, 0x07, 0xf9, 0x70, 0x5e, 0x5c, 0x20, 0xb8, 0x49, 0xf6, 0xe2, 0xa7, 0x2d, 0xc5, 0x42, 0x3e, - 0xbe, 0x1b, 0x31, 0x0b, 0x49, 0xd5, 0x4d, 0x41, 0xc2, 0xb9, 0xb0, 0xd1, 0x1d, 0x7e, 0xa3, 0xc7, - 0xb5, 0x58, 0xd0, 0x96, 0x98, 0xdc, 0xc4, 0x1d, 0xc5, 0x47, 0xa3, 0x1b, 0x3d, 0x99, 0x02, 0x38, - 0xbf, 0x1e, 0xda, 0x01, 0xd4, 0x37, 0x76, 0xd3, 0xd0, 0x2a, 0x04, 0x2d, 0x5f, 0xcd, 0x40, 0xc3, - 0x39, 0x18, 0xe8, 0xfa, 0x37, 0x4c, 0x93, 0x0c, 0x42, 0x62, 0xf1, 0x61, 0x8d, 0x2e, 0xc9, 0xb3, - 0xf5, 0xbf, 0x9c, 0xcc, 0xc2, 0xe9, 0xb2, 0xcc, 0x95, 0x9f, 0xe9, 0x03, 0xaf, 0x13, 0x27, 0x13, - 0xd6, 0xd6, 0x87, 0xec, 0xca, 0xcf, 0x71, 0x1c, 0x7e, 0x52, 0xf3, 0x21, 0xb8, 0xc8, 0x8a, 0x2d, - 0x5b, 0x4c, 0x05, 0x08, 0x88, 0xb5, 0x6c, 0x59, 0xec, 0x7a, 0x5d, 0xd5, 0xa7, 0x41, 0xf5, 0x7f, - 0x56, 0x83, 0x59, 0x06, 0xbb, 0xb5, 0x8c, 0x85, 0x95, 0x02, 0xb5, 0x23, 0xf7, 0x41, 0x0e, 0x75, - 0x29, 0xed, 0x3e, 0x78, 0x99, 0x57, 0xf0, 0x09, 0xe3, 0xeb, 0x86, 0x13, 0x44, 0x35, 0x13, 0xfe, - 0x84, 0x3e, 0x20, 0xc7, 0x08, 0x42, 0xfe, 0x52, 0x53, 0xc4, 0x5c, 0x4b, 0xb8, 0x13, 0x32, 0xfa, - 0xbc, 0x95, 0x81, 0x84, 0x73, 0xa0, 0x47, 0x38, 0x5b, 0x5e, 0x7f, 0xe0, 0x10, 0x89, 0xb3, 0x56, - 0x1e, 0x67, 0x12, 0x12, 0xce, 0x81, 0xae, 0x7f, 0x49, 0x83, 0xb9, 0xf4, 0x80, 0xa0, 0x7b, 0x50, - 0xf7, 0xc5, 0xa0, 0x08, 0xfa, 0x5e, 0x2d, 0x4f, 0x1d, 0x39, 0x23, 0x2d, 0x9e, 0x0b, 0x11, 0x5f, - 0x58, 0x22, 0xd3, 0xff, 0xfe, 0x08, 0x2c, 0x14, 0x55, 0x42, 0xbf, 0xae, 0xc1, 0x45, 0x33, 0xde, - 0xf7, 0x96, 0x87, 0xe1, 0x96, 0xe7, 0xdb, 0xa1, 0x4d, 0xa2, 0x87, 0x88, 0xdb, 0x15, 0x1a, 0x29, - 0xe9, 0x87, 0x07, 0xef, 0x68, 0xe5, 0xe2, 0xc1, 0x05, 0xf8, 0xd1, 0x27, 0x01, 0xb6, 0xe3, 0x80, - 0x58, 0xb5, 0x0a, 0x6f, 0x9b, 0xb2, 0xd6, 0x28, 0x51, 0xb3, 0xa2, 0x56, 0x31, 0x25, 0x4c, 0x49, - 0x57, 0xf0, 0xb1, 0x97, 0x55, 0x83, 0xad, 0x9b, 0x64, 0x6f, 0x60, 0xd8, 0x7e, 0xa5, 0x97, 0x55, - 0xf9, 0x72, 0xee, 0xde, 0x10, 0xb0, 0x92, 0xd8, 0x95, 0x74, 0x05, 0x9f, 0xfe, 0xcb, 0x35, 0x78, - 0xa4, 0xa0, 0xd5, 0x05, 0xab, 0x48, 0xfb, 0xbf, 0x6e, 0x15, 0xfd, 0x40, 0x83, 0x49, 0x36, 0x06, - 0xaf, 0x17, 0x8f, 0x3d, 0xd6, 0xd8, 0x82, 0x33, 0xb5, 0x3f, 0xd0, 0x60, 0x3e, 0x13, 0x54, 0xe8, - 0x18, 0xbc, 0xfa, 0x0c, 0x4f, 0x96, 0x9e, 0x4a, 0xbf, 0xc2, 0xd9, 0xc8, 0x8d, 0x36, 0xf6, 0x0a, - 0x4c, 0x27, 0x4e, 0xd4, 0xe4, 0x4d, 0x72, 0x2d, 0xf7, 0x26, 0xb9, 0x7a, 0x51, 0xbc, 0x76, 0xe8, - 0x45, 0x71, 0x49, 0xf3, 0xd9, 0xb5, 0xf2, 0xff, 0x0c, 0xcd, 0xff, 0xd3, 0x19, 0x41, 0xf3, 0xcc, - 0x3a, 0xf5, 0x31, 0x18, 0x67, 0x37, 0xda, 0x23, 0x5e, 0xfc, 0xde, 0xf2, 0x57, 0xe5, 0x03, 0x2e, - 0xf9, 0xf2, 0xff, 0x58, 0x80, 0x45, 0x6d, 0x98, 0x33, 0x1d, 0x6f, 0x68, 0xad, 0xf9, 0xde, 0xa6, - 0xed, 0x90, 0xdb, 0xb1, 0x90, 0x2d, 0x23, 0xf3, 0xb4, 0x52, 0xf9, 0x38, 0x53, 0x03, 0x75, 0x55, - 0x7b, 0xd5, 0x7b, 0xca, 0x9e, 0xb0, 0xf3, 0x60, 0xab, 0xd2, 0x4e, 0xe5, 0x03, 0x90, 0x88, 0x7c, - 0x23, 0x47, 0xe7, 0x17, 0x4b, 0x46, 0x1d, 0x92, 0xab, 0x20, 0x12, 0x0f, 0x65, 0x52, 0x80, 0x15, - 0x2c, 0x28, 0x80, 0xc6, 0x56, 0xfc, 0x84, 0xa8, 0xb0, 0x56, 0xbd, 0x54, 0xf5, 0xfd, 0x52, 0xae, - 0x97, 0x29, 0x09, 0x58, 0xc5, 0x82, 0x02, 0xbe, 0xcd, 0x71, 0x0d, 0xbd, 0xd2, 0x7b, 0x73, 0xb1, - 0xee, 0x1f, 0xf7, 0x34, 0x4e, 0xc3, 0x0a, 0x1a, 0x8a, 0xd4, 0x95, 0x81, 0x29, 0x84, 0x61, 0xb6, - 0x1c, 0xd2, 0x38, 0xbe, 0x45, 0x8c, 0x34, 0x4e, 0xc3, 0x0a, 0x1a, 0x3a, 0xbc, 0xfd, 0x38, 0x1c, - 0x89, 0xb0, 0x71, 0xbd, 0x54, 0x35, 0x2e, 0x8c, 0x50, 0x7b, 0xe3, 0x04, 0xac, 0x62, 0x41, 0x1e, - 0x40, 0x5f, 0x86, 0x29, 0x11, 0x06, 0xaf, 0x72, 0x3d, 0x8d, 0xa3, 0x9d, 0xf0, 0xad, 0x3b, 0xfe, - 0xc6, 0x0a, 0x0a, 0xb4, 0xad, 0xd8, 0x3b, 0xa1, 0x82, 0x29, 0xe8, 0x58, 0xb6, 0xce, 0x77, 0xc5, - 0x4a, 0x74, 0x83, 0xad, 0xdb, 0xc7, 0x14, 0x05, 0xfa, 0xc1, 0xfe, 0xe2, 0x14, 0x63, 0x26, 0x19, - 0x85, 0x3a, 0x76, 0x22, 0x98, 0x3a, 0xcc, 0x89, 0x00, 0x5d, 0x87, 0xf9, 0x40, 0xf5, 0xbf, 0x63, - 0x0c, 0x62, 0x9a, 0x55, 0x91, 0x81, 0x6d, 0xba, 0xe9, 0x02, 0x38, 0x5b, 0x87, 0xef, 0x02, 0xc4, - 0x62, 0xf5, 0x67, 0xd4, 0x5d, 0x80, 0xa7, 0x61, 0x99, 0x9b, 0x79, 0x5a, 0x7d, 0xf6, 0xac, 0x9e, - 0x56, 0xff, 0xa4, 0xfa, 0x96, 0xf6, 0x5c, 0x05, 0xdf, 0xf7, 0x32, 0x8f, 0x69, 0xa7, 0x1f, 0x76, - 0x9f, 0x3f, 0xa3, 0x87, 0xdd, 0x51, 0x0b, 0xe6, 0x89, 0xfa, 0xc8, 0x3d, 0x9b, 0x21, 0x14, 0xdb, - 0x13, 0x57, 0xd2, 0x99, 0x38, 0x5b, 0x1e, 0x7d, 0x41, 0x83, 0x39, 0xfe, 0x9e, 0x07, 0xdd, 0xce, - 0x3c, 0x97, 0xb8, 0x61, 0xb0, 0x70, 0xae, 0x42, 0xa0, 0xb8, 0x6e, 0x0a, 0x98, 0x30, 0xad, 0xa4, - 0x52, 0x71, 0x06, 0xa9, 0xfe, 0xaf, 0x34, 0x00, 0xa9, 0x3e, 0x93, 0x33, 0xb0, 0x29, 0x90, 0x84, - 0x4d, 0xa1, 0x55, 0x4d, 0xdf, 0x27, 0x85, 0xb7, 0x57, 0xfe, 0x58, 0x83, 0x99, 0xb8, 0xd8, 0x19, - 0x08, 0xc4, 0x56, 0x52, 0x20, 0x7e, 0x5f, 0xc5, 0x8e, 0x15, 0x48, 0xc5, 0xff, 0xbb, 0xa6, 0x76, - 0x8b, 0xc9, 0x3c, 0xf7, 0x14, 0x4b, 0x3a, 0xb7, 0xdd, 0x77, 0x4e, 0xed, 0xd1, 0xf4, 0xb8, 0xc7, - 0x39, 0x96, 0xf5, 0x4f, 0x25, 0x04, 0x8e, 0x2a, 0x97, 0x5f, 0xa4, 0x74, 0x11, 0xe1, 0xe6, 0x43, - 0x70, 0x94, 0xf4, 0xe1, 0xab, 0x0c, 0x88, 0xfb, 0xa3, 0x2f, 0x97, 0xbc, 0x70, 0xa1, 0x74, 0xf9, - 0xf0, 0x37, 0xfc, 0xbf, 0x31, 0x05, 0x0d, 0xc5, 0xdc, 0xf4, 0x53, 0x39, 0x3b, 0x19, 0x42, 0xc3, - 0xf4, 0xdc, 0x20, 0xf4, 0x0d, 0x25, 0xc2, 0x42, 0x55, 0xa4, 0x92, 0xf3, 0xb5, 0x62, 0xd0, 0x58, - 0xc5, 0x43, 0xf7, 0x69, 0x49, 0x68, 0x23, 0xa7, 0x71, 0x64, 0x73, 0x18, 0x71, 0xbd, 0x13, 0x20, - 0x92, 0xf9, 0x08, 0x7f, 0x8c, 0xa0, 0x1e, 0x47, 0xc6, 0xee, 0x04, 0x37, 0x64, 0x1e, 0x56, 0xca, - 0xa1, 0xd7, 0x60, 0xda, 0x51, 0x63, 0xe2, 0x0a, 0x89, 0xb4, 0x9c, 0x1b, 0x64, 0x22, 0xba, 0x2e, - 0x77, 0xc2, 0x4b, 0x24, 0xe1, 0x24, 0x2e, 0xb4, 0x0d, 0x93, 0x4e, 0x14, 0xc8, 0x59, 0x88, 0xa5, - 0x2f, 0x96, 0x46, 0xcc, 0xa0, 0xf0, 0x13, 0x56, 0xf9, 0x89, 0x63, 0xf8, 0x94, 0xee, 0xe4, 0x47, - 0xb5, 0x53, 0xd6, 0x18, 0x9b, 0xa4, 0x3b, 0x99, 0x14, 0x60, 0x05, 0x4b, 0xc1, 0x29, 0x58, 0xbd, - 0xd4, 0x29, 0xd8, 0x10, 0xce, 0xf9, 0x24, 0xf4, 0xf7, 0x5a, 0x7b, 0x26, 0x8b, 0xc6, 0xee, 0x87, - 0x4c, 0x59, 0x9c, 0x2c, 0x77, 0x53, 0x1a, 0x67, 0x41, 0xe1, 0x3c, 0xf8, 0x54, 0xf5, 0xa6, 0x32, - 0x8c, 0x08, 0x54, 0xc4, 0x54, 0x6f, 0x2a, 0xe1, 0x60, 0x96, 0x8a, 0xde, 0x05, 0x8d, 0x90, 0x98, - 0x5b, 0xae, 0x6d, 0x1a, 0x4e, 0xa7, 0x2d, 0x04, 0xc4, 0x58, 0x24, 0x88, 0xb3, 0xb0, 0x5a, 0x0e, - 0x35, 0x61, 0x64, 0x68, 0x5b, 0x42, 0x32, 0xfc, 0x79, 0x69, 0x1e, 0xee, 0xb4, 0x1f, 0xec, 0x2f, - 0xbe, 0x31, 0xbe, 0x8a, 0x27, 0x7b, 0x72, 0x75, 0xb0, 0xdd, 0xbb, 0x1a, 0xee, 0x0d, 0x48, 0xb0, - 0xb4, 0xde, 0x69, 0x63, 0x5a, 0x39, 0xef, 0x54, 0x70, 0xfa, 0x04, 0xa7, 0x82, 0x5f, 0xd1, 0xe0, - 0x9c, 0x91, 0xb6, 0x6c, 0x93, 0x60, 0x61, 0xa6, 0x02, 0x57, 0xce, 0x37, 0x97, 0xc7, 0x51, 0x15, - 0x97, 0xb3, 0xf8, 0x70, 0x5e, 0x23, 0x90, 0x0f, 0xa8, 0x6f, 0xf7, 0x64, 0x78, 0x6b, 0x31, 0xd5, - 0xb3, 0xe5, 0xec, 0x02, 0xab, 0x19, 0x48, 0x38, 0x07, 0x3a, 0xda, 0x85, 0x86, 0x19, 0x5b, 0x6f, - 0xd9, 0x73, 0x68, 0xa5, 0x65, 0xab, 0x94, 0x29, 0x58, 0x04, 0x53, 0x51, 0x6c, 0xc3, 0x2a, 0x2a, - 0xfd, 0x1e, 0x64, 0xe4, 0x2e, 0x64, 0xc2, 0x04, 0x85, 0xd9, 0xbe, 0xdd, 0x15, 0x92, 0xc7, 0xf3, - 0x25, 0xb9, 0x35, 0x83, 0xc1, 0xed, 0x4c, 0xe2, 0x03, 0x47, 0x90, 0xf5, 0x5b, 0x00, 0xb1, 0xd4, - 0x5a, 0xf9, 0xbc, 0xf5, 0x3f, 0x8e, 0xc1, 0x85, 0xaa, 0xfe, 0x85, 0x2c, 0xa6, 0x35, 0x7b, 0xe7, - 0x70, 0x79, 0x33, 0x24, 0xfe, 0x9d, 0x3b, 0xab, 0xf2, 0x0d, 0xb8, 0x92, 0x41, 0xb5, 0xe3, 0x97, - 0x32, 0x33, 0x10, 0x71, 0x01, 0x26, 0x26, 0xb1, 0x8b, 0xd7, 0xa4, 0x30, 0x15, 0x2b, 0x86, 0x7e, - 0x10, 0x8a, 0x1b, 0x7b, 0x5c, 0x62, 0x4f, 0x67, 0xe2, 0x6c, 0xf9, 0x34, 0x10, 0xfe, 0xe6, 0x22, - 0xdd, 0x96, 0xb4, 0x2c, 0x10, 0xfe, 0xf0, 0x62, 0xb6, 0xbc, 0x0a, 0x84, 0xcf, 0x14, 0xd5, 0xea, - 0xc7, 0xb2, 0x40, 0x64, 0x26, 0xce, 0x96, 0x47, 0x16, 0x3c, 0xee, 0x13, 0xd3, 0xeb, 0xf7, 0x89, - 0x6b, 0xf1, 0xf7, 0x10, 0x0c, 0xbf, 0x67, 0xbb, 0xd7, 0x7c, 0x83, 0x15, 0x64, 0x3b, 0x8f, 0xd6, - 0x7c, 0xf2, 0x60, 0x7f, 0xf1, 0x71, 0x7c, 0x48, 0x39, 0x7c, 0x28, 0x14, 0xd4, 0x87, 0xd9, 0x21, - 0x8b, 0xd5, 0xea, 0x77, 0xdc, 0x90, 0xf8, 0x3b, 0x86, 0x53, 0xf2, 0x31, 0x51, 0xc6, 0xbf, 0xd6, - 0x93, 0xa0, 0x70, 0x1a, 0x36, 0xda, 0xa3, 0xdb, 0x81, 0x68, 0x8e, 0x82, 0xb2, 0x5e, 0x3e, 0xea, - 0x3b, 0xce, 0x82, 0xc3, 0x79, 0x38, 0xf4, 0xbf, 0xad, 0x81, 0xf0, 0xf8, 0xa1, 0xbb, 0x83, 0x62, - 0x5d, 0xae, 0xa7, 0x2c, 0xcb, 0x8f, 0x8b, 0x5b, 0x0d, 0xb5, 0x38, 0x57, 0xb9, 0xd1, 0xf0, 0x16, - 0xe5, 0x2a, 0xe8, 0x64, 0xbc, 0x95, 0x72, 0xc8, 0x4a, 0xbc, 0xe3, 0xff, 0x0f, 0x26, 0x06, 0xbe, - 0xdd, 0x37, 0xfc, 0x3d, 0x21, 0xd5, 0x4c, 0xf3, 0xb8, 0x56, 0xa6, 0xbf, 0x37, 0xa0, 0xe2, 0x4c, - 0x94, 0xab, 0xff, 0x50, 0x03, 0x51, 0x9b, 0x05, 0xd9, 0x3e, 0x56, 0x84, 0xe6, 0x23, 0xcf, 0xfd, - 0x95, 0x18, 0xd1, 0x23, 0x45, 0x31, 0xa2, 0x1f, 0x56, 0xc0, 0xe5, 0xef, 0x69, 0x30, 0x9b, 0xbc, - 0x97, 0x1b, 0xa0, 0xa7, 0x60, 0x42, 0xc4, 0xce, 0x10, 0xb7, 0xef, 0xf9, 0xa5, 0x24, 0x9e, 0x84, - 0xa3, 0xbc, 0xa4, 0xa9, 0xa1, 0x8a, 0xa6, 0x91, 0x7f, 0x3f, 0xf8, 0x08, 0x99, 0x7f, 0x7f, 0x06, - 0xc6, 0x79, 0xb0, 0x07, 0xf4, 0x2b, 0xb9, 0x9e, 0xf2, 0xb7, 0x2a, 0xc4, 0x93, 0x28, 0xe1, 0x10, - 0x9f, 0x88, 0x05, 0x5a, 0x3b, 0x34, 0x16, 0x68, 0x97, 0xc7, 0x80, 0xaf, 0x62, 0x69, 0x6e, 0xe1, - 0x8e, 0x78, 0xe7, 0x4c, 0xc4, 0x7f, 0x47, 0xc3, 0x84, 0x01, 0x76, 0xb4, 0xc2, 0xd6, 0xca, 0x87, - 0x40, 0x31, 0xc3, 0xce, 0x1c, 0x62, 0x82, 0x8d, 0x2f, 0xd7, 0x8f, 0x55, 0x70, 0xc6, 0x11, 0xa3, - 0x7e, 0x8c, 0xcb, 0xf5, 0x72, 0x35, 0x8d, 0x17, 0xae, 0xa6, 0x1e, 0x4c, 0x88, 0xf5, 0x20, 0xb8, - 0xe3, 0xf3, 0x55, 0x22, 0xbc, 0x2b, 0x41, 0x99, 0x78, 0x02, 0x8e, 0xa0, 0xd3, 0x3d, 0xb7, 0x6f, - 0xec, 0xda, 0xfd, 0x61, 0x9f, 0xf1, 0xc4, 0x31, 0xb5, 0x28, 0x4b, 0xc6, 0x51, 0x3e, 0x2b, 0xca, - 0xbd, 0x98, 0x98, 0x34, 0xad, 0x16, 0x15, 0x4f, 0x75, 0x46, 0xf9, 0xe8, 0xc3, 0x50, 0xef, 0x1b, - 0xbb, 0xdd, 0xa1, 0xdf, 0x23, 0xc2, 0xf2, 0x5a, 0x6c, 0xed, 0x19, 0x86, 0xb6, 0xb3, 0x44, 0xf5, - 0xc0, 0xd0, 0x5f, 0xea, 0xb8, 0xe1, 0x1d, 0xbf, 0x1b, 0xfa, 0x32, 0xec, 0xf4, 0xaa, 0x80, 0x82, - 0x25, 0x3c, 0xe4, 0xc0, 0x4c, 0xdf, 0xd8, 0x5d, 0x77, 0x0d, 0xf9, 0xa2, 0x60, 0xa3, 0x24, 0x06, - 0x76, 0x14, 0xb7, 0x9a, 0x80, 0x85, 0x53, 0xb0, 0x73, 0x4e, 0xfd, 0xa6, 0x1e, 0xd6, 0xa9, 0xdf, - 0xb2, 0xf4, 0x6d, 0x9d, 0x66, 0x64, 0xf8, 0x68, 0x9e, 0xbb, 0xd3, 0xe1, 0x6e, 0xab, 0x1f, 0x93, - 0x6e, 0xab, 0x33, 0x15, 0x8e, 0xa9, 0x0e, 0x71, 0x59, 0xdd, 0x81, 0x86, 0x65, 0x84, 0x06, 0x4f, - 0x0d, 0x16, 0x66, 0x2b, 0x98, 0xa4, 0xda, 0x12, 0x8e, 0xf2, 0x08, 0x4f, 0x0c, 0x1b, 0xab, 0x88, - 0xd0, 0x1d, 0xfe, 0xe2, 0x9c, 0x43, 0xc2, 0xb8, 0x08, 0x33, 0x90, 0xce, 0x71, 0x13, 0x78, 0xf4, - 0x3e, 0x5c, 0xa6, 0x00, 0xce, 0xaf, 0x47, 0xc5, 0x54, 0x7e, 0x1b, 0x75, 0x3e, 0x0e, 0x07, 0x97, - 0x88, 0xb8, 0xf1, 0xd7, 0xf2, 0x2c, 0xa9, 0xa8, 0x82, 0xff, 0x3e, 0xe7, 0x0f, 0x65, 0xed, 0xa9, - 0xe8, 0x1f, 0x6a, 0xb0, 0xd0, 0x2f, 0x78, 0xe3, 0x46, 0x58, 0x78, 0xd7, 0xab, 0xf0, 0x88, 0xc2, - 0x87, 0x73, 0xf8, 0xab, 0xed, 0x47, 0x95, 0xc2, 0x85, 0x8d, 0xab, 0x7a, 0xcb, 0xaa, 0x4a, 0x28, - 0x92, 0xdf, 0xd4, 0x60, 0x2e, 0xbd, 0x15, 0xa8, 0x6f, 0xe4, 0x69, 0x0f, 0xf9, 0x8d, 0x3c, 0xe5, - 0x20, 0xbf, 0x76, 0xc8, 0x41, 0xfe, 0x0b, 0x70, 0x31, 0x9f, 0x3a, 0xa8, 0x70, 0xc6, 0x5e, 0xa6, - 0x14, 0x0a, 0x51, 0x1c, 0x65, 0x9d, 0x26, 0x62, 0x9e, 0xd7, 0x5c, 0xfa, 0xfe, 0x4f, 0x9e, 0x78, - 0xc3, 0x1f, 0xfd, 0xe4, 0x89, 0x37, 0xfc, 0xe8, 0x27, 0x4f, 0xbc, 0xe1, 0xd3, 0x07, 0x4f, 0x68, - 0xdf, 0x3f, 0x78, 0x42, 0xfb, 0xa3, 0x83, 0x27, 0xb4, 0x1f, 0x1d, 0x3c, 0xa1, 0xfd, 0xdb, 0x83, - 0x27, 0xb4, 0xbf, 0xf1, 0xef, 0x9e, 0x78, 0xc3, 0x87, 0xeb, 0x51, 0xcb, 0xff, 0x4f, 0x00, 0x00, - 0x00, 0xff, 0xff, 0x98, 0x72, 0xdd, 0x6f, 0x0b, 0xca, 0x00, 0x00, + // 10509 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x5b, 0x6c, 0x24, 0xd9, + 0x75, 0x98, 0xaa, 0xf9, 0x6a, 0x9e, 0x26, 0x39, 0xc3, 0x3b, 0x8f, 0xe5, 0xce, 0xce, 0x0c, 0x57, + 0xa5, 0x5d, 0x65, 0x37, 0x92, 0x39, 0x5e, 0x3d, 0x2c, 0xed, 0x6a, 0x77, 0xb5, 0xec, 0x6e, 0xce, + 0x4c, 0x6b, 0x86, 0x33, 0xd4, 0xed, 0xe1, 0xae, 0x1e, 0x86, 0xa4, 0x62, 0xd5, 0x65, 0xb3, 0xc4, + 0xea, 0xaa, 0xde, 0xaa, 0x6a, 0x0e, 0x39, 0xab, 0x58, 0xb2, 0xac, 0x87, 0x2d, 0x21, 0x41, 0x02, + 0x27, 0x90, 0x21, 0x09, 0xb2, 0x2c, 0x18, 0x81, 0x02, 0xd8, 0x90, 0x21, 0x20, 0x0a, 0x9c, 0x87, + 0x03, 0xd8, 0x1f, 0x16, 0xe4, 0x40, 0x31, 0x02, 0xc7, 0x50, 0x0c, 0x87, 0x8a, 0x98, 0x87, 0x9d, + 0xd7, 0x47, 0x12, 0xe4, 0x67, 0xe0, 0x04, 0xc1, 0x7d, 0xd4, 0xad, 0x5b, 0xaf, 0x26, 0x59, 0x35, + 0x43, 0x69, 0x63, 0x7f, 0x91, 0x7d, 0x1f, 0xe7, 0xdc, 0x7b, 0xeb, 0xdc, 0x73, 0xcf, 0x39, 0xf7, + 0xdc, 0x73, 0xa0, 0xd5, 0xb3, 0xc3, 0xad, 0xe1, 0xc6, 0x92, 0xe9, 0xf5, 0xaf, 0xf4, 0x0c, 0xdf, + 0x22, 0x2e, 0xf1, 0xe3, 0x7f, 0x06, 0xdb, 0xbd, 0x2b, 0xc6, 0xc0, 0x0e, 0xae, 0x98, 0x9e, 0x4f, + 0xae, 0xec, 0x3c, 0x63, 0x38, 0x83, 0x2d, 0xe3, 0x99, 0x2b, 0x3d, 0x5a, 0x69, 0x84, 0xc4, 0x5a, + 0x1a, 0xf8, 0x5e, 0xe8, 0xa1, 0xb7, 0xc7, 0x40, 0x96, 0xa2, 0xbe, 0xf1, 0x3f, 0x83, 0xed, 0xde, + 0x12, 0x05, 0xb2, 0x44, 0x81, 0x2c, 0x45, 0x40, 0x2e, 0x34, 0x8f, 0x85, 0x79, 0x83, 0x84, 0x59, + 0xc4, 0x17, 0x7e, 0x4a, 0x85, 0xe1, 0xf5, 0xbc, 0x2b, 0xac, 0x78, 0x63, 0xb8, 0xc9, 0x7e, 0xb1, + 0x1f, 0xec, 0x3f, 0xd1, 0xfc, 0xe9, 0xed, 0x77, 0x07, 0x4b, 0xb6, 0x47, 0x01, 0x5f, 0x31, 0x86, + 0xa1, 0x17, 0x98, 0x86, 0x63, 0xbb, 0xbd, 0x2b, 0x3b, 0x59, 0xc8, 0xba, 0xd2, 0x54, 0x0c, 0x61, + 0x64, 0x1b, 0x7f, 0xc3, 0x30, 0xf3, 0xda, 0xbc, 0x23, 0x6e, 0xd3, 0x37, 0xcc, 0x2d, 0xdb, 0x25, + 0xfe, 0x5e, 0x34, 0xb9, 0x2b, 0x3e, 0x09, 0xbc, 0xa1, 0x6f, 0x92, 0x63, 0xf5, 0x0a, 0xae, 0xf4, + 0x49, 0x68, 0xe4, 0xe1, 0xba, 0x52, 0xd4, 0xcb, 0x1f, 0xba, 0xa1, 0xdd, 0xcf, 0xa2, 0xf9, 0x99, + 0xc3, 0x3a, 0x04, 0xe6, 0x16, 0xe9, 0x1b, 0x99, 0x7e, 0x6f, 0x2f, 0xea, 0x37, 0x0c, 0x6d, 0xe7, + 0x8a, 0xed, 0x86, 0x41, 0xe8, 0xa7, 0x3b, 0xe9, 0x6f, 0x83, 0x89, 0x65, 0xcb, 0xf2, 0x5c, 0xf4, + 0x34, 0x4c, 0x11, 0xd7, 0xd8, 0x70, 0x88, 0xb5, 0xa0, 0x3d, 0xae, 0x3d, 0x55, 0x6f, 0x9e, 0xfa, + 0xee, 0xfe, 0xe2, 0x1b, 0x0e, 0xf6, 0x17, 0xa7, 0x56, 0x78, 0x31, 0x8e, 0xea, 0xf5, 0x2f, 0xd5, + 0x60, 0x92, 0x75, 0x0a, 0xd0, 0x2f, 0x6b, 0x70, 0x66, 0x7b, 0xb8, 0x41, 0x7c, 0x97, 0x84, 0x24, + 0x68, 0x1b, 0xc1, 0xd6, 0x86, 0x67, 0xf8, 0x1c, 0x44, 0xe3, 0x6d, 0xd7, 0x97, 0x4a, 0x90, 0xe0, + 0xd2, 0x8d, 0x2c, 0xbc, 0xe6, 0x23, 0x07, 0xfb, 0x8b, 0x67, 0x72, 0x2a, 0x70, 0x1e, 0x76, 0x74, + 0x17, 0x66, 0xdc, 0x9e, 0xed, 0xee, 0x76, 0xdc, 0x9e, 0x4f, 0x82, 0x60, 0xa1, 0xc6, 0x46, 0xb3, + 0x5c, 0x6a, 0x34, 0xb7, 0x14, 0x40, 0xcd, 0xd3, 0x07, 0xfb, 0x8b, 0x33, 0x6a, 0x09, 0x4e, 0x20, + 0xd2, 0x3f, 0xa7, 0xc1, 0xa9, 0x65, 0xab, 0x6f, 0x07, 0x81, 0xed, 0xb9, 0x6b, 0xce, 0xb0, 0x67, + 0xbb, 0xe8, 0x71, 0x18, 0x77, 0x8d, 0x3e, 0x61, 0x4b, 0x32, 0xdd, 0x9c, 0x11, 0xab, 0x3a, 0x7e, + 0xcb, 0xe8, 0x13, 0xcc, 0x6a, 0xd0, 0xfb, 0x61, 0xd2, 0xf4, 0xdc, 0x4d, 0xbb, 0x27, 0x06, 0xfa, + 0x53, 0x4b, 0xfc, 0x4b, 0x2e, 0xa9, 0x5f, 0x92, 0x8d, 0x4f, 0x50, 0xc0, 0x12, 0x36, 0xee, 0xae, + 0xec, 0x86, 0xc4, 0xa5, 0x68, 0x9a, 0x70, 0xb0, 0xbf, 0x38, 0xd9, 0x62, 0x00, 0xb0, 0x00, 0xa4, + 0x5f, 0x85, 0xfa, 0xb2, 0x43, 0xfc, 0xd0, 0x76, 0x7b, 0xe8, 0x39, 0x98, 0x23, 0x7d, 0xc3, 0x76, + 0x30, 0x31, 0x89, 0xbd, 0x43, 0xfc, 0x60, 0x41, 0x7b, 0x7c, 0xec, 0xa9, 0xe9, 0x26, 0x3a, 0xd8, + 0x5f, 0x9c, 0x5b, 0x49, 0xd4, 0xe0, 0x54, 0x4b, 0xfd, 0xd3, 0x1a, 0x34, 0x96, 0x87, 0x96, 0x1d, + 0x72, 0xf8, 0x28, 0x80, 0x86, 0x41, 0x7f, 0xae, 0x79, 0x8e, 0x6d, 0xee, 0x89, 0xcf, 0xfc, 0x52, + 0xa9, 0x85, 0x5d, 0x8e, 0xe1, 0x34, 0x4f, 0x1d, 0xec, 0x2f, 0x36, 0x94, 0x02, 0xac, 0x62, 0xd1, + 0xb7, 0x40, 0xad, 0x43, 0x1f, 0x84, 0x19, 0x3e, 0xcb, 0x55, 0x63, 0x80, 0xc9, 0xa6, 0x18, 0xc4, + 0x9b, 0x94, 0x45, 0x8b, 0x30, 0x2d, 0xdd, 0xde, 0xf8, 0x38, 0x31, 0x43, 0x4c, 0x36, 0x89, 0x4f, + 0x5c, 0x93, 0xf0, 0xef, 0xd7, 0x52, 0x3a, 0xe3, 0x04, 0x28, 0xfd, 0x87, 0x1a, 0x9c, 0x5e, 0xde, + 0x31, 0x6c, 0xc7, 0xd8, 0xb0, 0x1d, 0x3b, 0xdc, 0xfb, 0x90, 0xe7, 0x92, 0x23, 0x7c, 0xc0, 0x75, + 0x78, 0x64, 0xe8, 0x1a, 0xbc, 0x9f, 0x43, 0x56, 0xf9, 0x27, 0xbb, 0xb3, 0x37, 0x20, 0x94, 0xf4, + 0xe8, 0x52, 0x3f, 0x76, 0xb0, 0xbf, 0xf8, 0xc8, 0x7a, 0x7e, 0x13, 0x5c, 0xd4, 0x17, 0x61, 0x38, + 0xaf, 0x54, 0xbd, 0xec, 0x39, 0xc3, 0xbe, 0x80, 0x3a, 0xc6, 0xa0, 0x5e, 0x38, 0xd8, 0x5f, 0x3c, + 0xbf, 0x9e, 0xdb, 0x02, 0x17, 0xf4, 0xd4, 0xbf, 0x57, 0x83, 0x99, 0xa6, 0x61, 0x6e, 0x0f, 0x07, + 0xcd, 0xa1, 0xb9, 0x4d, 0x42, 0xf4, 0x31, 0xa8, 0x53, 0xce, 0x65, 0x19, 0xa1, 0x21, 0x56, 0xf2, + 0xa7, 0x0b, 0xc9, 0x8f, 0x7d, 0x45, 0xda, 0x3a, 0x5e, 0xdb, 0x55, 0x12, 0x1a, 0x4d, 0x24, 0xd6, + 0x04, 0xe2, 0x32, 0x2c, 0xa1, 0xa2, 0x1e, 0x8c, 0x07, 0x03, 0x62, 0x0a, 0xe2, 0x5e, 0x29, 0x45, + 0x2c, 0xea, 0x90, 0xbb, 0x03, 0x62, 0xc6, 0x9f, 0x81, 0xfe, 0xc2, 0x0c, 0x01, 0xf2, 0x60, 0x32, + 0x08, 0x8d, 0x70, 0x48, 0xd7, 0x87, 0xa2, 0xba, 0x56, 0x1d, 0x15, 0x03, 0xd7, 0x9c, 0x13, 0xc8, + 0x26, 0xf9, 0x6f, 0x2c, 0xd0, 0xe8, 0x3f, 0xd0, 0xe0, 0xb4, 0xda, 0xfc, 0xa6, 0x1d, 0x84, 0xe8, + 0x67, 0x33, 0x0b, 0xba, 0x74, 0xb4, 0x05, 0xa5, 0xbd, 0xd9, 0x72, 0x9e, 0x16, 0xe8, 0xea, 0x51, + 0x89, 0xb2, 0x98, 0x9b, 0x30, 0x61, 0x87, 0xa4, 0xcf, 0x09, 0xab, 0x2c, 0x4f, 0x53, 0xc7, 0xdc, + 0x9c, 0x15, 0xd8, 0x26, 0x3a, 0x14, 0x2e, 0xe6, 0xe0, 0xf5, 0x8f, 0xc1, 0x59, 0xb5, 0xd5, 0x9a, + 0xef, 0xed, 0xd8, 0x16, 0xf1, 0xe9, 0x66, 0x08, 0xf7, 0x06, 0x99, 0xcd, 0x40, 0x89, 0x0b, 0xb3, + 0x1a, 0xf4, 0x66, 0x98, 0xf4, 0x49, 0xcf, 0xf6, 0x5c, 0xf6, 0xc1, 0xa7, 0xe3, 0xc5, 0xc3, 0xac, + 0x14, 0x8b, 0x5a, 0xfd, 0xbf, 0xd4, 0x92, 0x8b, 0x47, 0x3f, 0x24, 0xba, 0x0b, 0xf5, 0x81, 0x40, + 0x25, 0x16, 0xaf, 0x53, 0x79, 0x86, 0xd1, 0xd8, 0xe3, 0x75, 0x8d, 0x4a, 0xb0, 0x44, 0x86, 0x6c, + 0x98, 0x8b, 0xfe, 0x6f, 0x55, 0xe0, 0xc5, 0x8c, 0xa7, 0xae, 0x25, 0x00, 0xe1, 0x14, 0x60, 0x74, + 0x07, 0xa6, 0x03, 0x62, 0xfa, 0x84, 0xf2, 0x25, 0x41, 0xa9, 0xb9, 0xcc, 0xab, 0x1b, 0x35, 0x12, + 0xcc, 0x6b, 0x5e, 0x0c, 0x7f, 0x5a, 0x56, 0xe0, 0x18, 0x10, 0xba, 0x08, 0xe3, 0x01, 0x21, 0xd6, + 0xc2, 0x38, 0x5b, 0xf4, 0x3a, 0xdb, 0x1a, 0x84, 0x58, 0x98, 0x95, 0xea, 0xdf, 0x18, 0x07, 0x94, + 0x25, 0x6c, 0x75, 0xd6, 0xbc, 0x44, 0x2c, 0x7a, 0x95, 0x59, 0x8b, 0x3d, 0x92, 0x02, 0x8c, 0x5e, + 0x83, 0x59, 0xc7, 0x08, 0xc2, 0xdb, 0x03, 0x2a, 0x7e, 0x44, 0xd4, 0xd1, 0x78, 0x5b, 0xb3, 0xd4, + 0xe7, 0xbd, 0xa9, 0x42, 0x6a, 0xce, 0x1f, 0xec, 0x2f, 0xce, 0x26, 0x8a, 0x70, 0x12, 0x17, 0xda, + 0x86, 0x69, 0x5a, 0xb0, 0xe2, 0xfb, 0x9e, 0x2f, 0x96, 0xfc, 0xc5, 0xd2, 0x88, 0x19, 0x94, 0xe6, + 0x2c, 0xfd, 0x12, 0xf2, 0x27, 0x8e, 0xe1, 0xa3, 0xf7, 0x01, 0xf2, 0x36, 0x02, 0xe2, 0xef, 0x10, + 0xeb, 0x1a, 0x97, 0xb6, 0xe8, 0x74, 0xe9, 0x77, 0x19, 0x6b, 0x5e, 0x10, 0xdf, 0x10, 0xdd, 0xce, + 0xb4, 0xc0, 0x39, 0xbd, 0xd0, 0x36, 0x20, 0x29, 0xb1, 0xc9, 0xcf, 0xbe, 0x30, 0x71, 0x74, 0xa2, + 0x39, 0x4f, 0x91, 0x5d, 0xcb, 0x80, 0xc0, 0x39, 0x60, 0xf5, 0xdf, 0xaf, 0x41, 0x83, 0x13, 0xc9, + 0x8a, 0x1b, 0xfa, 0x7b, 0x27, 0x70, 0x34, 0x6c, 0x26, 0x8e, 0x86, 0x76, 0x85, 0xad, 0xce, 0x46, + 0x5c, 0x78, 0x32, 0xb8, 0xa9, 0x93, 0xe1, 0x6a, 0x65, 0x4c, 0xa3, 0x0f, 0x86, 0x3f, 0xd6, 0xe0, + 0x94, 0xd2, 0xfa, 0x04, 0xce, 0x05, 0x92, 0x3c, 0x17, 0x5e, 0xaa, 0x3a, 0xc1, 0x82, 0x63, 0xc1, + 0x4c, 0xcc, 0x8b, 0xb1, 0xec, 0xb7, 0x01, 0x6c, 0x30, 0x9e, 0x72, 0x2b, 0x16, 0x92, 0xe4, 0x57, + 0x6f, 0xca, 0x1a, 0xac, 0xb4, 0x92, 0xcc, 0xaa, 0x96, 0xcb, 0xac, 0xfe, 0x6c, 0x0c, 0xe6, 0x33, + 0x6b, 0x9d, 0x65, 0x20, 0xda, 0x8f, 0x8b, 0x81, 0xd4, 0x7e, 0x2c, 0x0c, 0x64, 0xac, 0x14, 0x03, + 0x79, 0x0a, 0xea, 0x74, 0x4d, 0xd9, 0xb7, 0xe1, 0x47, 0xc3, 0x0c, 0xa5, 0xa0, 0xae, 0x28, 0xc3, + 0xb2, 0x16, 0xf9, 0x80, 0xfa, 0x76, 0x8f, 0x77, 0xeb, 0x86, 0x86, 0x1f, 0xde, 0xb1, 0xfb, 0x44, + 0xb0, 0x9a, 0xbf, 0x7e, 0x34, 0x4a, 0xa5, 0x3d, 0x38, 0xc7, 0x59, 0xcd, 0x40, 0xc2, 0x39, 0xd0, + 0xf5, 0xdf, 0xd3, 0x60, 0xac, 0x85, 0x3b, 0xe8, 0x2d, 0x09, 0x11, 0xfb, 0x11, 0x55, 0xc4, 0xbe, + 0xbf, 0xbf, 0x38, 0xd5, 0xc2, 0x1d, 0x45, 0xda, 0xfe, 0x5b, 0x1a, 0xcc, 0x9b, 0x9e, 0x1b, 0x1a, + 0x74, 0x14, 0x98, 0x9f, 0x47, 0x11, 0xdd, 0x97, 0x93, 0x2e, 0x5b, 0x29, 0x68, 0xcd, 0x47, 0xc5, + 0x08, 0xe6, 0xd3, 0x35, 0x01, 0xce, 0xa2, 0xd6, 0xd7, 0x61, 0xba, 0xe5, 0x78, 0x43, 0xab, 0xe3, + 0x6e, 0x7a, 0x0f, 0x50, 0x40, 0xfa, 0x37, 0x1a, 0xcc, 0x30, 0xb8, 0x6b, 0xbe, 0xb7, 0x69, 0x3b, + 0xe4, 0x75, 0x22, 0xaa, 0xab, 0x43, 0x2e, 0x62, 0xc8, 0x4c, 0x72, 0x56, 0x1b, 0xbe, 0x5e, 0x24, + 0x67, 0x75, 0xcc, 0x05, 0x2c, 0xf2, 0x2b, 0x53, 0xc9, 0xa9, 0x31, 0x26, 0xf9, 0x14, 0xd4, 0x4d, + 0xa3, 0x39, 0x74, 0x2d, 0x47, 0x52, 0x06, 0x1d, 0x66, 0x6b, 0x99, 0x97, 0x61, 0x59, 0x8b, 0x5e, + 0x03, 0x88, 0x4d, 0x1a, 0xe2, 0x43, 0x5c, 0xab, 0x68, 0x47, 0xe9, 0x92, 0x30, 0xb4, 0xdd, 0x5e, + 0x10, 0x7f, 0xfd, 0xb8, 0x0e, 0x2b, 0xe8, 0xd0, 0xcf, 0xc1, 0xac, 0x58, 0xe6, 0x4e, 0xdf, 0xe8, + 0x09, 0x45, 0xb3, 0xec, 0x5a, 0xad, 0x2a, 0x90, 0x9a, 0xe7, 0x04, 0xe6, 0x59, 0xb5, 0x34, 0xc0, + 0x49, 0x74, 0xe8, 0x1e, 0xcc, 0xf4, 0x55, 0xed, 0x79, 0xbc, 0xc2, 0x61, 0xa6, 0xa8, 0xd2, 0xcd, + 0xb3, 0x02, 0xfb, 0x4c, 0x42, 0xf1, 0x4e, 0xe0, 0xca, 0xd1, 0x00, 0x26, 0x1e, 0x96, 0x06, 0xb0, + 0x09, 0x53, 0x7c, 0x8f, 0x07, 0x0b, 0x93, 0x6c, 0x86, 0xef, 0x29, 0x35, 0x43, 0xce, 0x2f, 0x62, + 0x43, 0x1d, 0xff, 0x1d, 0xe0, 0x08, 0x38, 0xba, 0x0b, 0x33, 0x94, 0xbd, 0x77, 0x89, 0x43, 0xcc, + 0xd0, 0xf3, 0x17, 0xa6, 0x2a, 0xd8, 0xc1, 0xba, 0x0a, 0x20, 0x6e, 0x47, 0x51, 0x4b, 0x70, 0x02, + 0x91, 0x64, 0x82, 0xf5, 0x42, 0x26, 0xb8, 0x03, 0x8d, 0x1d, 0xc5, 0xa0, 0x31, 0xcd, 0x96, 0xe1, + 0xbd, 0xa5, 0x46, 0x16, 0x9b, 0x37, 0x9a, 0x67, 0x04, 0xa6, 0x86, 0x6a, 0x0a, 0x51, 0x11, 0xe9, + 0xfb, 0x75, 0x98, 0x6f, 0x39, 0xc3, 0x20, 0x24, 0xfe, 0xb2, 0xb0, 0x35, 0x13, 0x1f, 0x7d, 0x5a, + 0x83, 0xf3, 0xec, 0xdf, 0xb6, 0x77, 0xd7, 0x6d, 0x13, 0xc7, 0xd8, 0x5b, 0xde, 0xa4, 0x2d, 0x2c, + 0xeb, 0x78, 0x8c, 0xa8, 0x3d, 0x14, 0x12, 0x05, 0x33, 0xcd, 0x74, 0x73, 0x21, 0xe2, 0x02, 0x4c, + 0xe8, 0x8b, 0x1a, 0x3c, 0x9a, 0x53, 0xd5, 0x26, 0x0e, 0x09, 0x89, 0xe0, 0x04, 0xc7, 0x1d, 0xc7, + 0xa5, 0x83, 0xfd, 0xc5, 0x47, 0xbb, 0x45, 0x40, 0x71, 0x31, 0x3e, 0x7a, 0xca, 0x5e, 0xc8, 0xa9, + 0xbd, 0x6a, 0xd8, 0xce, 0xd0, 0x27, 0x42, 0x8e, 0x3e, 0xee, 0x70, 0x2e, 0x1f, 0xec, 0x2f, 0x5e, + 0xe8, 0x16, 0x42, 0xc5, 0x23, 0x30, 0xa2, 0x4f, 0xc2, 0x39, 0x59, 0xbb, 0xee, 0xba, 0x84, 0x58, + 0xc4, 0x62, 0x22, 0xca, 0x78, 0xa9, 0xa1, 0x3c, 0x7a, 0xb0, 0xbf, 0x78, 0xae, 0x9b, 0x07, 0x10, + 0xe7, 0xe3, 0x41, 0x3d, 0xb8, 0x14, 0x57, 0x84, 0xb6, 0x63, 0xdf, 0x63, 0x90, 0xee, 0x6c, 0xf9, + 0x24, 0xd8, 0xf2, 0x1c, 0x8b, 0xf1, 0x0b, 0xad, 0xf9, 0xc6, 0x83, 0xfd, 0xc5, 0x4b, 0xdd, 0x51, + 0x0d, 0xf1, 0x68, 0x38, 0xc8, 0x82, 0x99, 0xc0, 0x34, 0xdc, 0x8e, 0x1b, 0x12, 0x7f, 0xc7, 0x70, + 0x16, 0x26, 0x4b, 0x4d, 0x90, 0xef, 0x51, 0x05, 0x0e, 0x4e, 0x40, 0x45, 0xef, 0x86, 0x3a, 0xd9, + 0x1d, 0x18, 0xae, 0x45, 0x38, 0x63, 0x98, 0x6e, 0x5e, 0xa4, 0x47, 0xd2, 0x8a, 0x28, 0xbb, 0xbf, + 0xbf, 0x38, 0x13, 0xfd, 0xbf, 0xea, 0x59, 0x04, 0xcb, 0xd6, 0xe8, 0x13, 0x70, 0xb6, 0x6f, 0xec, + 0xde, 0xf2, 0x2c, 0xc2, 0xf8, 0x1c, 0x65, 0x7b, 0xec, 0x43, 0xd4, 0x4b, 0x8d, 0x73, 0xe1, 0x60, + 0x7f, 0xf1, 0xec, 0x6a, 0x0e, 0x3c, 0x9c, 0x8b, 0x85, 0x7e, 0x86, 0xbe, 0xb1, 0x7b, 0xcd, 0x37, + 0x4c, 0xb2, 0x39, 0x74, 0xee, 0x10, 0xbf, 0x6f, 0xbb, 0x5c, 0xac, 0x24, 0xa6, 0xe7, 0x5a, 0x94, + 0x97, 0x68, 0x4f, 0x4d, 0xf0, 0xcf, 0xb0, 0x3a, 0xaa, 0x21, 0x1e, 0x0d, 0x07, 0xbd, 0x03, 0x66, + 0xec, 0x9e, 0xeb, 0xf9, 0xe4, 0x8e, 0x61, 0xbb, 0x61, 0xb0, 0x00, 0xcc, 0xe8, 0xca, 0x96, 0xb5, + 0xa3, 0x94, 0xe3, 0x44, 0x2b, 0xfd, 0xbf, 0x6a, 0xd0, 0x10, 0x0c, 0x86, 0xc9, 0x83, 0x26, 0x4c, + 0x98, 0x54, 0x1a, 0x10, 0x8c, 0xe4, 0xc5, 0xf2, 0x62, 0x07, 0x05, 0x17, 0xcb, 0x1c, 0xac, 0x08, + 0x73, 0xd8, 0xe8, 0x6e, 0x8e, 0xd0, 0xd0, 0xaa, 0x28, 0x34, 0x30, 0x74, 0x87, 0x08, 0x0c, 0xfa, + 0xfe, 0x18, 0x4c, 0xb7, 0x3c, 0xd7, 0xb2, 0x99, 0xb2, 0xf1, 0x4c, 0x42, 0xf6, 0xbd, 0xa4, 0xb2, + 0xfd, 0xfb, 0xfb, 0x8b, 0xb3, 0xb2, 0xa1, 0x72, 0x0e, 0x3c, 0x2b, 0x35, 0x73, 0x2e, 0x0c, 0xbf, + 0x31, 0xa9, 0x51, 0xdf, 0xdf, 0x5f, 0x3c, 0x25, 0xbb, 0x25, 0x95, 0x6c, 0xb4, 0x03, 0x88, 0xea, + 0x4c, 0x77, 0x7c, 0xc3, 0x0d, 0x38, 0x58, 0x4a, 0x84, 0x63, 0xc7, 0x56, 0x58, 0xa4, 0x4a, 0x75, + 0x33, 0x03, 0x0d, 0xe7, 0x60, 0x40, 0x1f, 0x87, 0x39, 0x5a, 0xba, 0x3e, 0xb0, 0x8c, 0x90, 0x28, + 0x1c, 0xe8, 0x58, 0x4a, 0x92, 0xc0, 0x39, 0x77, 0x33, 0x01, 0x09, 0xa7, 0x20, 0x73, 0x5d, 0xc1, + 0x08, 0x3c, 0x97, 0x31, 0x97, 0x84, 0xae, 0x40, 0x4b, 0xb1, 0xa8, 0x45, 0x4f, 0xc3, 0x54, 0x9f, + 0x04, 0x81, 0xd1, 0x23, 0x8c, 0x5b, 0x4c, 0xc7, 0x42, 0xc1, 0x2a, 0x2f, 0xc6, 0x51, 0x3d, 0x7a, + 0x2b, 0x4c, 0x98, 0x9e, 0x45, 0x82, 0x85, 0x29, 0x46, 0xcf, 0xe7, 0x19, 0x31, 0xd1, 0x82, 0xfb, + 0xfb, 0x8b, 0xd3, 0x4c, 0x01, 0xa5, 0xbf, 0x30, 0x6f, 0xa4, 0xff, 0x2a, 0x15, 0xd4, 0x53, 0x1a, + 0x4f, 0xd1, 0x8d, 0x08, 0xff, 0xac, 0x4c, 0x47, 0x3b, 0x39, 0x73, 0xaa, 0xfe, 0x4b, 0x35, 0x38, + 0x4b, 0x47, 0xe8, 0x7b, 0x8e, 0x43, 0x4f, 0xaf, 0x81, 0xe3, 0xed, 0xf5, 0x89, 0x7b, 0x12, 0x37, + 0x1b, 0x91, 0x98, 0x53, 0x2b, 0x14, 0x73, 0xfa, 0x99, 0x75, 0x18, 0x2b, 0xb3, 0x0e, 0x92, 0x5c, + 0x0e, 0x59, 0x8b, 0x3f, 0xd7, 0x60, 0x21, 0x6f, 0x2d, 0x4e, 0x40, 0xbd, 0x72, 0x93, 0xea, 0x55, + 0xa7, 0xb4, 0x22, 0x9e, 0x1e, 0x7b, 0x81, 0x9a, 0xf5, 0xe7, 0x35, 0x38, 0x1f, 0x37, 0xef, 0xb8, + 0x41, 0x68, 0x38, 0x0e, 0xb7, 0x79, 0x3c, 0xfc, 0x0f, 0xff, 0x6a, 0x42, 0x4f, 0xbe, 0x5d, 0x71, + 0xae, 0xea, 0xe0, 0x0b, 0x4d, 0x98, 0x7b, 0x29, 0x13, 0xe6, 0xfb, 0x1f, 0x24, 0xd2, 0xd1, 0xd6, + 0xcc, 0xff, 0xa6, 0xc1, 0x85, 0xfc, 0x8e, 0x27, 0x40, 0x57, 0x83, 0x24, 0x5d, 0xdd, 0x78, 0x80, + 0xd3, 0x2e, 0xa0, 0xac, 0x6f, 0xd7, 0x8a, 0xa6, 0xcb, 0x54, 0xf9, 0x4d, 0x38, 0x45, 0xf5, 0xab, + 0x20, 0x14, 0x56, 0xb7, 0xe3, 0xdd, 0x40, 0x47, 0xb6, 0xad, 0x53, 0x38, 0x09, 0x03, 0xa7, 0x81, + 0xa2, 0x5b, 0x30, 0x45, 0x75, 0x2a, 0x0a, 0xbf, 0x76, 0x74, 0xf8, 0x92, 0xef, 0x77, 0x79, 0x5f, + 0x1c, 0x01, 0x41, 0x3f, 0x0b, 0xb3, 0x96, 0xdc, 0x54, 0x87, 0x5c, 0x3d, 0xa5, 0xa1, 0x32, 0x03, + 0x69, 0x5b, 0xed, 0x8d, 0x93, 0xc0, 0xf4, 0xff, 0xa3, 0xc1, 0xc5, 0x51, 0xc4, 0x85, 0x7c, 0x00, + 0x33, 0x3a, 0xc8, 0xb9, 0x07, 0x42, 0x69, 0x61, 0x28, 0x02, 0x13, 0x6f, 0x52, 0x59, 0x14, 0x60, + 0x05, 0x4b, 0xce, 0xf5, 0x56, 0xed, 0x21, 0x5d, 0x6f, 0xe9, 0xff, 0x5d, 0x53, 0xd9, 0x91, 0xfa, + 0x71, 0x5f, 0x77, 0xec, 0x48, 0x1d, 0x7c, 0xa1, 0x01, 0xef, 0x8f, 0x6a, 0xf0, 0x78, 0x7e, 0x17, + 0xe5, 0x04, 0x7e, 0x09, 0x26, 0x07, 0xdc, 0x51, 0x64, 0x8c, 0x9d, 0x90, 0x4f, 0x51, 0xe6, 0xc2, + 0xbd, 0x38, 0xee, 0xef, 0x2f, 0x5e, 0xc8, 0xe3, 0xf6, 0xc2, 0xff, 0x43, 0xf4, 0x43, 0x76, 0xca, + 0x82, 0xc1, 0x25, 0xad, 0xb7, 0x1f, 0x91, 0xbf, 0x18, 0x1b, 0xc4, 0x39, 0xb2, 0xcd, 0xe2, 0xd3, + 0x1a, 0xcc, 0x25, 0x68, 0x3a, 0x58, 0x98, 0x60, 0x54, 0x5a, 0xee, 0x86, 0x21, 0xb1, 0x5b, 0xe2, + 0x03, 0x3c, 0x51, 0x1c, 0xe0, 0x14, 0xc6, 0x14, 0xab, 0x55, 0x97, 0xf5, 0xf5, 0xc7, 0x6a, 0xd5, + 0xd1, 0x17, 0xb0, 0xda, 0xaf, 0xd5, 0x8a, 0xa6, 0xcb, 0x58, 0xed, 0x2e, 0x4c, 0x47, 0xce, 0x78, + 0x11, 0xcb, 0xb8, 0x56, 0x79, 0x50, 0x1c, 0x5e, 0x7c, 0x9b, 0x1e, 0x95, 0x04, 0x38, 0x46, 0x86, + 0x3e, 0xab, 0x01, 0xc4, 0x9f, 0x46, 0x6c, 0xac, 0xf5, 0x07, 0xb8, 0x20, 0x8a, 0x7c, 0x33, 0x47, + 0xf7, 0xb5, 0x42, 0x17, 0x0a, 0x62, 0xfd, 0xb7, 0x6a, 0x80, 0xb2, 0x83, 0xa7, 0x82, 0xe7, 0xb6, + 0xed, 0x5a, 0x69, 0x01, 0xfc, 0x86, 0xed, 0x5a, 0x98, 0xd5, 0x1c, 0x41, 0x34, 0x7d, 0x01, 0x4e, + 0xf5, 0x1c, 0x6f, 0xc3, 0x70, 0x9c, 0x3d, 0xe1, 0xe1, 0xc7, 0x76, 0x69, 0xbd, 0x79, 0x86, 0x1e, + 0x4f, 0xd7, 0x92, 0x55, 0x38, 0xdd, 0x16, 0x0d, 0xe0, 0xb4, 0x4f, 0x15, 0x65, 0xd3, 0x76, 0x98, + 0xaa, 0xe2, 0x0d, 0xc3, 0x92, 0x96, 0x98, 0xb3, 0x07, 0xfb, 0x8b, 0xa7, 0x71, 0x0a, 0x16, 0xce, + 0x40, 0x47, 0x4f, 0xc2, 0xd4, 0xc0, 0xb7, 0xfb, 0x86, 0xbf, 0xc7, 0x94, 0xa1, 0x7a, 0xb3, 0x41, + 0xcf, 0xb9, 0x35, 0x5e, 0x84, 0xa3, 0x3a, 0xfd, 0xb3, 0x1a, 0x4c, 0xb5, 0x3c, 0x9f, 0xb4, 0x6f, + 0x75, 0xd1, 0x3d, 0x68, 0x28, 0x1e, 0xa5, 0x62, 0xcb, 0x94, 0x25, 0x21, 0x06, 0x72, 0x39, 0x06, + 0x17, 0x79, 0xad, 0xc9, 0x02, 0xac, 0x22, 0xd3, 0xd7, 0xe8, 0x97, 0x4b, 0xf7, 0x41, 0xcf, 0xc1, + 0x78, 0xdf, 0xb3, 0x22, 0xd5, 0xe9, 0xcd, 0xd1, 0x77, 0x59, 0xf5, 0x2c, 0xaa, 0x22, 0x9f, 0xcf, + 0xf6, 0x60, 0xb6, 0x17, 0xd6, 0x47, 0xff, 0xaa, 0x06, 0x63, 0x74, 0x56, 0x3a, 0x4c, 0x5a, 0x5e, + 0xdf, 0xb0, 0x5d, 0x01, 0x85, 0x39, 0x00, 0xb6, 0x59, 0x09, 0x16, 0x35, 0xe8, 0x55, 0x98, 0x8e, + 0x4e, 0xa8, 0x6a, 0x77, 0xc2, 0xed, 0x5b, 0x5d, 0xe9, 0x40, 0x23, 0xf7, 0x4c, 0x54, 0x12, 0xe0, + 0x18, 0x8b, 0x6e, 0xc0, 0x7c, 0xfb, 0x56, 0xb7, 0xe3, 0x9a, 0xce, 0xd0, 0x22, 0x2b, 0xbb, 0xec, + 0x0f, 0xfd, 0x68, 0x36, 0x2f, 0x11, 0x5e, 0x87, 0xec, 0xa3, 0x89, 0x46, 0x38, 0xaa, 0xa3, 0xcd, + 0x08, 0xef, 0x21, 0x3c, 0xe6, 0x58, 0x33, 0x01, 0x04, 0x47, 0x75, 0xfa, 0x9f, 0xd4, 0xa0, 0xa1, + 0x0c, 0x08, 0xf5, 0x61, 0x8a, 0xcf, 0x37, 0x72, 0x5c, 0xb9, 0x5a, 0x76, 0x8e, 0xc9, 0x61, 0x73, + 0xf4, 0x7c, 0x49, 0x03, 0x1c, 0xe1, 0x50, 0x29, 0xb0, 0x56, 0x4c, 0x81, 0x68, 0x09, 0x80, 0xfb, + 0xe5, 0xb0, 0x5b, 0x57, 0x7e, 0xf4, 0xb1, 0x4d, 0xde, 0x95, 0xa5, 0x58, 0x69, 0x81, 0x2e, 0x8a, + 0xbd, 0xaa, 0xb8, 0xee, 0x28, 0xfb, 0xb4, 0x07, 0x13, 0xf7, 0x3c, 0x97, 0x04, 0xe2, 0x3a, 0xe2, + 0x41, 0xcd, 0x70, 0x9a, 0x32, 0xe3, 0x0f, 0x51, 0xc0, 0x98, 0xc3, 0xd7, 0x7f, 0x4d, 0x03, 0x68, + 0x1b, 0xa1, 0xc1, 0x6d, 0xe7, 0x47, 0x70, 0x7b, 0xbc, 0x98, 0xe0, 0x31, 0xf5, 0xcc, 0x35, 0xe7, + 0x78, 0x60, 0xdf, 0x8b, 0xe6, 0x2f, 0x05, 0x18, 0x0e, 0xbd, 0x6b, 0xdf, 0x23, 0x98, 0xd5, 0xa3, + 0xb7, 0xc0, 0x34, 0x71, 0x4d, 0x7f, 0x6f, 0x10, 0x0a, 0xef, 0xa5, 0x3a, 0xbf, 0x1a, 0x5f, 0x89, + 0x0a, 0x71, 0x5c, 0xaf, 0x3f, 0x03, 0x49, 0x31, 0xf4, 0xf0, 0x51, 0xea, 0x3b, 0x50, 0x5f, 0x71, + 0xad, 0x81, 0x67, 0xbb, 0xe1, 0x11, 0xe6, 0x74, 0x09, 0xc6, 0x86, 0xbe, 0x23, 0xa6, 0xd4, 0x10, + 0x0d, 0xc6, 0xd6, 0xf1, 0x4d, 0x4c, 0xcb, 0xd1, 0xd3, 0x30, 0x35, 0x18, 0xfa, 0x03, 0x2f, 0x88, + 0xe6, 0x25, 0xe5, 0xed, 0x35, 0x5e, 0x8c, 0xa3, 0x7a, 0xfd, 0xbe, 0x06, 0xa7, 0x57, 0x76, 0x07, + 0xb6, 0xcf, 0x5c, 0x30, 0x89, 0x4f, 0x45, 0x49, 0xda, 0x7f, 0x87, 0xff, 0x2b, 0xc6, 0x20, 0xfb, + 0x8b, 0x16, 0x38, 0xaa, 0x47, 0x9b, 0x30, 0x47, 0x58, 0x77, 0x76, 0x5c, 0x18, 0xf2, 0x0a, 0xe0, + 0x38, 0x66, 0x26, 0xee, 0xe2, 0x9b, 0x80, 0x82, 0x53, 0x50, 0x51, 0x17, 0xe6, 0x4c, 0xc7, 0x08, + 0x02, 0x7b, 0xd3, 0x36, 0x63, 0x4f, 0x83, 0xe9, 0xe6, 0x5b, 0x68, 0xdf, 0x56, 0xa2, 0xe6, 0xfe, + 0xfe, 0xe2, 0x39, 0x31, 0xce, 0x64, 0x05, 0x4e, 0x81, 0xd0, 0xbf, 0x5c, 0x83, 0xd9, 0x95, 0xdd, + 0x81, 0x17, 0x0c, 0x7d, 0xc2, 0x9a, 0x9e, 0x80, 0x14, 0xfc, 0x34, 0x4c, 0x6d, 0x19, 0xae, 0xe5, + 0x10, 0x5f, 0x7c, 0x3e, 0xb9, 0xb6, 0xd7, 0x79, 0x31, 0x8e, 0xea, 0xd1, 0x27, 0x00, 0x02, 0x73, + 0x8b, 0x58, 0x43, 0x76, 0x2c, 0x70, 0x45, 0xe8, 0x66, 0xa9, 0x8d, 0x95, 0x98, 0x64, 0x57, 0xc2, + 0x14, 0xfb, 0x5d, 0xfe, 0xc6, 0x0a, 0x3e, 0xfd, 0x4f, 0x34, 0x98, 0x4f, 0xf4, 0x3b, 0x01, 0xd9, + 0xae, 0x97, 0x94, 0xed, 0x9a, 0xd5, 0x27, 0x5b, 0x20, 0xd2, 0x7d, 0xa1, 0x06, 0x8f, 0x14, 0x2c, + 0x4a, 0xe6, 0x3e, 0x52, 0x3b, 0xa9, 0xfb, 0xc8, 0x1d, 0x68, 0x84, 0x9e, 0x23, 0x7c, 0x62, 0xa2, + 0x35, 0x28, 0x77, 0xdb, 0x78, 0x47, 0xc2, 0x89, 0x6f, 0x1b, 0xe3, 0xb2, 0x00, 0xab, 0x88, 0xf4, + 0xdf, 0xd5, 0x60, 0x5a, 0xea, 0x91, 0x47, 0x70, 0x0d, 0x39, 0x41, 0x2f, 0xd4, 0xa7, 0xa0, 0x6e, + 0xd9, 0x81, 0x2a, 0xf7, 0x31, 0x8f, 0x84, 0xb6, 0x28, 0xc3, 0xb2, 0x56, 0xff, 0x17, 0x35, 0x38, + 0x2f, 0x61, 0x47, 0x22, 0x28, 0x55, 0x7b, 0x8f, 0x22, 0x87, 0x5e, 0x14, 0x1c, 0x57, 0x39, 0x23, + 0x14, 0x6e, 0xfb, 0x64, 0x9a, 0x9d, 0x36, 0xf2, 0x58, 0x29, 0xba, 0x05, 0x13, 0x01, 0xc5, 0x27, + 0x04, 0xcc, 0x63, 0xae, 0x06, 0x3b, 0xe9, 0xd8, 0x78, 0x31, 0x07, 0x83, 0x5e, 0x53, 0xf5, 0x0a, + 0xae, 0xe4, 0xbd, 0xef, 0x78, 0xc4, 0xc0, 0x1e, 0x3e, 0x2d, 0xd1, 0x99, 0x58, 0xd1, 0x8a, 0xe4, + 0x38, 0xea, 0xe6, 0xa9, 0x16, 0x7a, 0x00, 0xf5, 0x6b, 0x02, 0x2c, 0xba, 0x00, 0x35, 0x3b, 0x5a, + 0x3d, 0x10, 0xbd, 0x6a, 0x9d, 0x36, 0xae, 0xd9, 0x96, 0x3c, 0xab, 0x6a, 0x85, 0x67, 0x95, 0x72, + 0x98, 0x8c, 0x8d, 0x3e, 0x4c, 0xf4, 0xff, 0x58, 0x83, 0xb3, 0x11, 0xd6, 0x68, 0x54, 0x6d, 0x61, + 0xc2, 0x3e, 0xe4, 0x44, 0x3c, 0x5c, 0x93, 0xb8, 0x0d, 0xe3, 0x8c, 0x6b, 0x95, 0x32, 0x6d, 0x4b, + 0x80, 0x74, 0x38, 0x98, 0x01, 0x42, 0x7f, 0x03, 0x26, 0x1d, 0xaa, 0xbb, 0x47, 0x0e, 0x20, 0xe5, + 0x14, 0xaf, 0xbc, 0xf9, 0x72, 0x9b, 0x40, 0xc0, 0x5d, 0x1c, 0xa5, 0xbd, 0x93, 0x17, 0x62, 0x81, + 0xf4, 0xc2, 0xb3, 0xd0, 0x50, 0x9a, 0xa1, 0xd3, 0x30, 0xb6, 0x4d, 0xf8, 0x5b, 0x97, 0x69, 0x4c, + 0xff, 0x45, 0x67, 0x61, 0x62, 0xc7, 0x70, 0x86, 0x62, 0x4d, 0x30, 0xff, 0xf1, 0x5c, 0xed, 0xdd, + 0x9a, 0xfe, 0x2d, 0x0d, 0x1a, 0xd7, 0xed, 0x0d, 0xe2, 0xf3, 0xab, 0x44, 0x26, 0xd7, 0x26, 0x5e, + 0x55, 0x35, 0xf2, 0x5e, 0x54, 0xa1, 0x3d, 0x98, 0x16, 0xe7, 0x83, 0xf4, 0x64, 0x2b, 0xf7, 0x76, + 0x4a, 0xc1, 0x2d, 0xf8, 0xae, 0xea, 0x37, 0x1e, 0xa1, 0xc0, 0x31, 0x36, 0xfd, 0x35, 0x38, 0x93, + 0xd3, 0x09, 0x2d, 0xb2, 0x2d, 0xe7, 0x87, 0x82, 0x30, 0xa2, 0x3d, 0xe4, 0x87, 0x98, 0x97, 0xa3, + 0x47, 0x61, 0x8c, 0xb8, 0x91, 0x07, 0xe7, 0x14, 0x15, 0x92, 0x56, 0x5c, 0x0b, 0xd3, 0x32, 0xca, + 0x5a, 0x1c, 0x2f, 0x21, 0x4b, 0x30, 0xd6, 0x72, 0x53, 0x94, 0x61, 0x59, 0xab, 0xff, 0xe3, 0x71, + 0xb8, 0x74, 0xdd, 0xf3, 0xed, 0x7b, 0x9e, 0x1b, 0x1a, 0xce, 0x9a, 0x67, 0xc5, 0x3e, 0x19, 0x82, + 0x4d, 0x7d, 0x56, 0x83, 0x47, 0xcc, 0xc1, 0xb0, 0xe3, 0xda, 0xa1, 0x6d, 0x44, 0x57, 0xe5, 0x6b, + 0xc4, 0xb7, 0xbd, 0xb2, 0xae, 0x19, 0xec, 0x2d, 0x4e, 0x6b, 0x6d, 0x3d, 0x0f, 0x24, 0x2e, 0xc2, + 0xc5, 0x3c, 0x44, 0x2c, 0xef, 0xae, 0xcb, 0x06, 0xd7, 0x0d, 0xd9, 0xfb, 0xa0, 0x7b, 0xf1, 0x14, + 0x4b, 0x7a, 0x88, 0xb4, 0x73, 0x21, 0xe2, 0x02, 0x4c, 0xe8, 0x93, 0x70, 0xce, 0xe6, 0x83, 0xc3, + 0xc4, 0xb0, 0x6c, 0x97, 0x04, 0x01, 0xf3, 0x93, 0xa8, 0xe2, 0x02, 0xd1, 0xc9, 0x03, 0x88, 0xf3, + 0xf1, 0xa0, 0x8f, 0x00, 0x04, 0x7b, 0xae, 0x29, 0xd6, 0x7f, 0xa2, 0x14, 0x56, 0x2e, 0x19, 0x49, + 0x28, 0x58, 0x81, 0x48, 0x75, 0x01, 0x7e, 0x7c, 0xba, 0x26, 0xbf, 0xc8, 0xd4, 0xb8, 0x2e, 0x70, + 0x27, 0x2a, 0xc4, 0x71, 0xbd, 0xfe, 0x9b, 0x1a, 0x4c, 0x89, 0x87, 0x77, 0xe8, 0xcd, 0x29, 0x95, + 0x58, 0x6e, 0xed, 0x94, 0x5a, 0x7c, 0x8f, 0x59, 0xa1, 0x85, 0x39, 0x45, 0x1c, 0xae, 0xe5, 0x34, + 0x2a, 0x81, 0x39, 0x36, 0xce, 0x24, 0xac, 0xd1, 0x91, 0xc1, 0x46, 0xc1, 0xa6, 0x7f, 0x5d, 0x83, + 0xf9, 0x4c, 0xaf, 0x23, 0x1c, 0xa1, 0x27, 0x78, 0x97, 0xfa, 0xc3, 0x06, 0xb0, 0x57, 0x96, 0xcb, + 0x6b, 0x9d, 0x2e, 0xf1, 0x77, 0xe4, 0x2e, 0xfc, 0xa2, 0x06, 0xa7, 0xe3, 0x5b, 0x7f, 0x31, 0x0a, + 0xad, 0x82, 0x93, 0xe8, 0x8d, 0x14, 0xb0, 0xe6, 0x82, 0x98, 0xf8, 0xe9, 0x74, 0x0d, 0xce, 0x20, + 0x46, 0x5f, 0xd0, 0xe0, 0xb4, 0x91, 0x7c, 0x65, 0x19, 0x71, 0xcd, 0x72, 0x4f, 0x08, 0x52, 0x4f, + 0x36, 0xe3, 0xc1, 0xa4, 0x2a, 0x02, 0x9c, 0xc1, 0x8b, 0xde, 0x01, 0x33, 0xc6, 0xc0, 0x5e, 0x1e, + 0x5a, 0x36, 0x3d, 0xfb, 0xa3, 0xa7, 0x79, 0x4c, 0x20, 0x5d, 0x5e, 0xeb, 0xc8, 0x72, 0x9c, 0x68, + 0x25, 0xdf, 0x51, 0x8a, 0xa5, 0x1c, 0xaf, 0xfa, 0x8e, 0x52, 0xac, 0x62, 0xfc, 0x8e, 0x52, 0x2c, + 0x9e, 0x8a, 0x05, 0x7d, 0x18, 0x1e, 0xe5, 0x07, 0x4e, 0xd3, 0x08, 0x6c, 0x73, 0x79, 0x18, 0x6e, + 0x11, 0x37, 0x8c, 0x94, 0x3e, 0x6e, 0x52, 0x63, 0xfe, 0x62, 0x2b, 0x45, 0x8d, 0x70, 0x71, 0x7f, + 0xe4, 0x01, 0x78, 0xb6, 0x65, 0x8a, 0x09, 0x71, 0x97, 0xa5, 0x72, 0x12, 0xf6, 0xed, 0x4e, 0xbb, + 0x25, 0xe6, 0xc3, 0x78, 0x45, 0xfc, 0x1b, 0x2b, 0x28, 0xd0, 0xaf, 0x68, 0x30, 0x2b, 0x08, 0x5d, + 0x20, 0x9d, 0x62, 0x24, 0xf0, 0xe1, 0xd2, 0x04, 0x99, 0xa2, 0xfa, 0x25, 0xac, 0x42, 0xe7, 0x22, + 0x83, 0x74, 0x63, 0x4d, 0xd4, 0xe1, 0xe4, 0x40, 0xd0, 0x97, 0x34, 0x38, 0x1b, 0x10, 0x7f, 0xc7, + 0x36, 0xc9, 0xb2, 0x69, 0x7a, 0x43, 0x37, 0xfa, 0xce, 0xf5, 0x0a, 0x4f, 0xda, 0xba, 0x39, 0x00, + 0xb9, 0xf3, 0x54, 0x5e, 0x0d, 0xce, 0x1d, 0x00, 0xfa, 0x05, 0x0d, 0x4e, 0xdd, 0x35, 0x42, 0x73, + 0xab, 0x65, 0x98, 0x5b, 0xcc, 0x0a, 0xc3, 0xfd, 0xa5, 0xca, 0xee, 0x9c, 0x57, 0x92, 0xb0, 0xb8, + 0xed, 0x38, 0x55, 0x88, 0xd3, 0x18, 0x51, 0x08, 0x75, 0x9f, 0xbc, 0x3a, 0x24, 0x01, 0xf3, 0xaa, + 0xd2, 0x8e, 0x2f, 0x7e, 0xe7, 0x7d, 0x34, 0x2c, 0x20, 0x72, 0x61, 0x23, 0xfa, 0x85, 0x25, 0x26, + 0xd4, 0x83, 0x4b, 0x9c, 0x7c, 0x97, 0x5d, 0xcf, 0xdd, 0xeb, 0x7b, 0xc3, 0x20, 0xb5, 0x05, 0x1a, + 0x6c, 0x0b, 0x30, 0xc7, 0xb1, 0x95, 0x51, 0x0d, 0xf1, 0x68, 0x38, 0xe8, 0x03, 0x50, 0x27, 0x3b, + 0xc4, 0x0d, 0xef, 0xdc, 0xb9, 0xb9, 0x30, 0x53, 0xea, 0x8c, 0x64, 0x53, 0x58, 0x11, 0x30, 0xb0, + 0x84, 0x76, 0xe1, 0x25, 0x40, 0x59, 0xa2, 0x3c, 0x4c, 0x40, 0xad, 0xab, 0x02, 0xea, 0x77, 0x34, + 0x38, 0x97, 0xbb, 0x6c, 0x08, 0xc3, 0x79, 0xe6, 0x6f, 0xe7, 0xae, 0x0e, 0x43, 0x23, 0xb4, 0xdd, + 0x5e, 0xc7, 0xdd, 0x74, 0xec, 0xde, 0x16, 0x17, 0x01, 0x27, 0xb8, 0xc0, 0xb2, 0x9a, 0xdb, 0x02, + 0x17, 0xf4, 0x44, 0x1d, 0x38, 0xd3, 0x37, 0x76, 0x33, 0x00, 0x6b, 0x0c, 0x20, 0x7b, 0xd3, 0xbf, + 0x9a, 0xad, 0xc6, 0x79, 0x7d, 0xf4, 0xaf, 0x4e, 0xc0, 0x63, 0x74, 0xe0, 0xf1, 0xd1, 0xb9, 0x6a, + 0xb8, 0x46, 0xef, 0x27, 0xf4, 0x88, 0xfa, 0x96, 0x06, 0x8f, 0x6c, 0xe5, 0x0b, 0xb6, 0xe2, 0xf4, + 0xc6, 0xe5, 0xe4, 0xfb, 0x51, 0xc2, 0x32, 0x27, 0xdd, 0x91, 0x4d, 0x70, 0xd1, 0xa8, 0xd0, 0x4b, + 0x70, 0xda, 0xf5, 0x2c, 0xd2, 0xea, 0xb4, 0xf1, 0xaa, 0x11, 0x6c, 0x77, 0x23, 0xd3, 0xed, 0x04, + 0xbf, 0x9f, 0xb9, 0x95, 0xaa, 0xc3, 0x99, 0xd6, 0x68, 0x07, 0xd0, 0xc0, 0xb3, 0x56, 0x76, 0x6c, + 0x33, 0x72, 0x95, 0x2b, 0x7f, 0x27, 0xc4, 0x1e, 0x11, 0xad, 0x65, 0xa0, 0xe1, 0x1c, 0x0c, 0x4c, + 0x34, 0xa7, 0x83, 0x59, 0xf5, 0x5c, 0x3b, 0xf4, 0x7c, 0xe6, 0xd1, 0x59, 0x49, 0x42, 0x65, 0x94, + 0x7e, 0x2b, 0x17, 0x22, 0x2e, 0xc0, 0xa4, 0xff, 0x0f, 0x0d, 0x4e, 0x51, 0xba, 0x58, 0xf3, 0xbd, + 0xdd, 0xbd, 0x9f, 0x48, 0x92, 0x7c, 0x5a, 0xdc, 0x3c, 0x71, 0x8d, 0xed, 0x9c, 0x72, 0xeb, 0x34, + 0xcd, 0x06, 0x1d, 0x5f, 0x34, 0xa9, 0x5a, 0xeb, 0x58, 0xb1, 0xd6, 0xaa, 0xff, 0xa9, 0xc6, 0xa5, + 0xc5, 0x48, 0x69, 0xfc, 0xc9, 0xdc, 0x8a, 0xef, 0x82, 0x59, 0x5a, 0xb6, 0x6a, 0xec, 0xae, 0xb5, + 0x5f, 0xf6, 0x9c, 0xc8, 0xd1, 0x94, 0xb9, 0xb4, 0xdc, 0x50, 0x2b, 0x70, 0xb2, 0x9d, 0xfe, 0xad, + 0x53, 0xc0, 0x1a, 0x38, 0x24, 0xfc, 0x89, 0x9c, 0xd8, 0x33, 0xd0, 0x30, 0x07, 0xc3, 0xd6, 0xd5, + 0xee, 0xfb, 0x87, 0x5e, 0x68, 0x88, 0x1b, 0x29, 0x26, 0x01, 0xb6, 0xd6, 0xd6, 0xa3, 0x62, 0xac, + 0xb6, 0xa1, 0x9b, 0xdc, 0x1c, 0x0c, 0x05, 0xe3, 0x5c, 0x53, 0x5d, 0x33, 0xd8, 0x26, 0x6f, 0xad, + 0xad, 0x27, 0xea, 0x70, 0xa6, 0x35, 0xfa, 0x94, 0x06, 0x33, 0x44, 0x6c, 0xc0, 0xeb, 0x86, 0x6f, + 0x89, 0xfd, 0x5d, 0xfe, 0xfc, 0x96, 0xab, 0x1b, 0x6d, 0x6b, 0x2e, 0x3b, 0xaf, 0x28, 0x38, 0x70, + 0x02, 0x23, 0x13, 0x63, 0xc5, 0x6f, 0xfa, 0xb1, 0x3c, 0x2b, 0xbd, 0xe3, 0x27, 0x84, 0x18, 0x5b, + 0xd4, 0x08, 0x17, 0xf7, 0x47, 0xbf, 0xa1, 0xc1, 0x79, 0x59, 0x6b, 0xbb, 0x76, 0x7f, 0xd8, 0xc7, + 0xc4, 0x74, 0x0c, 0xbb, 0x2f, 0x64, 0xda, 0x0f, 0x3c, 0xb8, 0x99, 0x26, 0xe1, 0x73, 0xb6, 0x93, + 0x5f, 0x87, 0x0b, 0xc6, 0x84, 0xbe, 0xae, 0xc1, 0xe3, 0x51, 0xd5, 0x1a, 0xd5, 0x2c, 0x87, 0x3e, + 0x89, 0xdd, 0x95, 0xc5, 0x9a, 0x4c, 0x95, 0xe2, 0x82, 0x4f, 0x1c, 0xec, 0x2f, 0x3e, 0xbe, 0x72, + 0x08, 0x6c, 0x7c, 0x28, 0xf6, 0x04, 0xc5, 0x74, 0xbd, 0xcd, 0x50, 0x08, 0xc1, 0x0f, 0x8d, 0x62, + 0x28, 0x0e, 0x9c, 0xc0, 0x88, 0x7e, 0x4b, 0x83, 0x47, 0xd4, 0x02, 0x95, 0x60, 0xb8, 0xf4, 0xfb, + 0xc1, 0x07, 0x37, 0x9a, 0x14, 0x02, 0x6e, 0x6f, 0x2a, 0xa8, 0xc4, 0x45, 0xc3, 0xa2, 0x2c, 0xb8, + 0xcf, 0x88, 0x93, 0x4b, 0xc8, 0x13, 0x9c, 0x05, 0x73, 0x7a, 0x0d, 0x70, 0x54, 0x47, 0xb5, 0xcf, + 0x81, 0x67, 0xad, 0xd9, 0x56, 0x70, 0xd3, 0xee, 0xdb, 0x21, 0x13, 0x61, 0xc7, 0xf8, 0x7a, 0xac, + 0x79, 0xd6, 0x5a, 0xa7, 0xcd, 0xcb, 0x71, 0xa2, 0x15, 0x7b, 0x69, 0x64, 0xf7, 0x8d, 0x1e, 0x59, + 0x1b, 0x3a, 0xce, 0x9a, 0xef, 0x31, 0x9b, 0x44, 0x9b, 0x18, 0x96, 0x63, 0xbb, 0xa4, 0xa4, 0xc8, + 0xca, 0xb6, 0x5c, 0xa7, 0x08, 0x28, 0x2e, 0xc6, 0x87, 0x96, 0x00, 0x36, 0x0d, 0xdb, 0xe9, 0xde, + 0x35, 0x06, 0xb7, 0xdd, 0x85, 0x59, 0xc6, 0xc6, 0x98, 0xe2, 0x77, 0x55, 0x96, 0x62, 0xa5, 0x05, + 0x23, 0x28, 0xca, 0x0c, 0x31, 0xe1, 0xaf, 0x9d, 0x17, 0xe6, 0x1e, 0x14, 0x41, 0x45, 0x10, 0xf9, + 0x02, 0xde, 0x50, 0x70, 0xe0, 0x04, 0x46, 0xf4, 0x39, 0x0d, 0xe6, 0x82, 0xbd, 0x20, 0x24, 0x7d, + 0x39, 0x88, 0x53, 0x0f, 0x7c, 0x10, 0xcc, 0x60, 0xd3, 0x4d, 0x60, 0xc1, 0x29, 0xac, 0xc8, 0x80, + 0xc7, 0xd8, 0xc2, 0x5e, 0x6b, 0x5d, 0xb7, 0x7b, 0x5b, 0xf2, 0x09, 0xd1, 0x1a, 0xf1, 0x4d, 0xe2, + 0x86, 0x0b, 0xa7, 0x19, 0xe9, 0x2c, 0x1e, 0xec, 0x2f, 0x3e, 0xd6, 0x29, 0x6e, 0x86, 0x47, 0xc1, + 0x40, 0x1f, 0x81, 0x0b, 0xa2, 0xfa, 0xa6, 0x77, 0x37, 0x83, 0x61, 0x9e, 0x61, 0x60, 0xef, 0xba, + 0x3a, 0x85, 0xad, 0xf0, 0x08, 0x08, 0x54, 0x47, 0x08, 0x88, 0xcf, 0x0c, 0xae, 0x44, 0xd2, 0x4f, + 0xb0, 0x80, 0x18, 0x1d, 0x30, 0x1d, 0xa1, 0x9b, 0xad, 0xc6, 0x79, 0x7d, 0xf4, 0xfd, 0x1a, 0x57, + 0x6e, 0x32, 0x7b, 0x12, 0xbd, 0x00, 0xa7, 0xfa, 0xa4, 0xef, 0xf9, 0x7b, 0xcb, 0x51, 0x50, 0x24, + 0x61, 0x70, 0x63, 0x0a, 0xeb, 0x6a, 0xb2, 0x0a, 0xa7, 0xdb, 0xd2, 0x73, 0x93, 0xcd, 0xe0, 0x6a, + 0x37, 0xee, 0x5f, 0x8b, 0xcf, 0xcd, 0x4e, 0xaa, 0x0e, 0x67, 0x5a, 0xa3, 0x16, 0xcc, 0x8b, 0xb2, + 0x0e, 0x95, 0x20, 0x83, 0xab, 0x3e, 0x89, 0xee, 0xbc, 0xa8, 0x28, 0x36, 0xdf, 0x49, 0x57, 0xe2, + 0x6c, 0x7b, 0x3a, 0x0b, 0xfa, 0x43, 0x1d, 0xc5, 0x78, 0x3c, 0x8b, 0x5b, 0xc9, 0x2a, 0x9c, 0x6e, + 0x1b, 0x89, 0xf8, 0x89, 0x21, 0x4c, 0xc4, 0xb3, 0xb8, 0x95, 0xaa, 0xc3, 0x99, 0xd6, 0xfa, 0x9f, + 0x8e, 0xc3, 0x9b, 0x8e, 0x70, 0x94, 0xa1, 0x7e, 0xfe, 0x72, 0x1f, 0xc2, 0x55, 0x96, 0xa2, 0x4b, + 0xb2, 0xa5, 0xf7, 0x0f, 0x0d, 0x37, 0xb4, 0xc3, 0xbd, 0x23, 0x7e, 0x9e, 0x41, 0xc1, 0xe7, 0x39, + 0x3e, 0xbe, 0xa3, 0x7e, 0xce, 0xa0, 0xe8, 0x73, 0x1e, 0x1f, 0xe5, 0xd1, 0x3f, 0x7f, 0x3f, 0xff, + 0xf3, 0x97, 0x5c, 0xd5, 0x43, 0xc9, 0x65, 0x50, 0x40, 0x2e, 0x25, 0x57, 0xf5, 0x08, 0xe4, 0xf5, + 0x6f, 0xc7, 0xe1, 0x89, 0xa3, 0x9c, 0xa9, 0x25, 0xe9, 0x2b, 0xe7, 0xd4, 0x7a, 0xa8, 0xf4, 0x55, + 0xe4, 0xeb, 0xf8, 0x10, 0xe9, 0x2b, 0x07, 0xe5, 0xc3, 0xa6, 0xaf, 0xa2, 0x55, 0x7d, 0x58, 0xf4, + 0x55, 0xb4, 0xaa, 0x47, 0xa0, 0xaf, 0xff, 0x95, 0x3e, 0x1f, 0xe4, 0x39, 0xda, 0x81, 0x31, 0x73, + 0x30, 0x2c, 0xc9, 0xa4, 0xd8, 0xed, 0x67, 0x6b, 0x6d, 0x1d, 0x53, 0x18, 0x08, 0xc3, 0x24, 0xa7, + 0x9f, 0x92, 0x2c, 0x88, 0x79, 0x73, 0x72, 0x92, 0xc4, 0x02, 0x12, 0x5d, 0x2a, 0x32, 0xd8, 0x22, + 0x7d, 0xe2, 0x1b, 0x4e, 0x37, 0xf4, 0x7c, 0xa3, 0x57, 0x96, 0xdb, 0xb0, 0xa5, 0x5a, 0x49, 0xc1, + 0xc2, 0x19, 0xe8, 0x74, 0x41, 0x06, 0xb6, 0x55, 0x92, 0xbf, 0xb0, 0x05, 0x59, 0xeb, 0xb4, 0x31, + 0x85, 0xa1, 0xff, 0xe6, 0x34, 0x28, 0xcf, 0x47, 0xa9, 0xfa, 0x66, 0x38, 0x8e, 0x77, 0x77, 0xcd, + 0xb7, 0x77, 0x6c, 0x87, 0xf4, 0x88, 0x25, 0xdf, 0x17, 0x06, 0xe2, 0x92, 0x9c, 0xc9, 0x92, 0xcb, + 0x45, 0x8d, 0x70, 0x71, 0x7f, 0x2a, 0xd9, 0xce, 0x9b, 0xe9, 0xe7, 0xfd, 0x95, 0xee, 0xf9, 0x32, + 0xc1, 0x02, 0xf8, 0x86, 0xca, 0x14, 0xe3, 0x2c, 0x5e, 0xf4, 0xf3, 0x1a, 0xb7, 0x3d, 0x48, 0x63, + 0xab, 0xf8, 0x68, 0xd7, 0x1f, 0xd4, 0x15, 0x45, 0x6c, 0xc5, 0x88, 0xed, 0xb9, 0x49, 0x8c, 0xe8, + 0xd7, 0x34, 0x38, 0xb7, 0x9d, 0x67, 0x37, 0x15, 0xdf, 0x76, 0xad, 0xf4, 0x58, 0x0a, 0x2c, 0xb1, + 0xfc, 0x5a, 0x39, 0xb7, 0x01, 0xce, 0x1f, 0x89, 0x5c, 0x27, 0x69, 0x48, 0x12, 0x7c, 0xa0, 0xfc, + 0x3a, 0xa5, 0x4c, 0x52, 0xf1, 0x3a, 0xc9, 0x0a, 0x9c, 0xc4, 0x88, 0x5e, 0x85, 0xe9, 0xed, 0xc8, + 0x7e, 0x27, 0x54, 0xfd, 0x76, 0x69, 0xf4, 0x8a, 0x15, 0x90, 0x5f, 0x60, 0xcb, 0x42, 0x1c, 0x63, + 0x41, 0x36, 0x4c, 0x6d, 0x73, 0x6e, 0x24, 0x54, 0xf4, 0x66, 0x75, 0xed, 0x81, 0xeb, 0x89, 0xa2, + 0x08, 0x47, 0xf0, 0x55, 0x57, 0xa1, 0xfa, 0x21, 0x7e, 0xa7, 0x5f, 0xd1, 0xe0, 0xdc, 0x0e, 0xf1, + 0x43, 0xdb, 0x4c, 0x1b, 0xae, 0xa7, 0x2b, 0xa8, 0x38, 0x2f, 0xe7, 0x41, 0xe4, 0xa4, 0x92, 0x5b, + 0x85, 0xf3, 0xc7, 0x40, 0x15, 0x1e, 0x6e, 0x7e, 0xec, 0x86, 0x46, 0x68, 0x9b, 0x77, 0xbc, 0x6d, + 0xe2, 0xd2, 0xd9, 0x8a, 0x00, 0xba, 0xc0, 0xf8, 0x07, 0x53, 0x78, 0x56, 0x8a, 0x9b, 0xe1, 0x51, + 0x30, 0xf4, 0x3f, 0xd3, 0x20, 0x63, 0x7e, 0x43, 0x7f, 0x47, 0x83, 0x99, 0x4d, 0x62, 0x84, 0x43, + 0x9f, 0x5c, 0x33, 0x42, 0xf9, 0x1c, 0xe5, 0x95, 0x07, 0x62, 0xf6, 0x5b, 0xba, 0xaa, 0x40, 0xe6, + 0x17, 0x8d, 0x32, 0x62, 0x8d, 0x5a, 0x85, 0x13, 0x43, 0xb8, 0xf0, 0x5e, 0x98, 0xcf, 0x74, 0x3c, + 0xd6, 0x65, 0xd0, 0xef, 0x08, 0x03, 0x6e, 0x3a, 0x7e, 0xf2, 0x47, 0x61, 0xc2, 0xb0, 0x2c, 0x19, + 0xa3, 0xf1, 0xb9, 0x92, 0x97, 0xea, 0x96, 0xfa, 0xee, 0x87, 0xfd, 0xc4, 0x1c, 0x2e, 0xba, 0x0a, + 0xc8, 0x48, 0xdc, 0x99, 0xad, 0xc6, 0x6f, 0x22, 0x98, 0xe9, 0x7f, 0x39, 0x53, 0x8b, 0x73, 0x7a, + 0xe8, 0xef, 0x81, 0xb9, 0x64, 0xc0, 0x82, 0x63, 0x38, 0x58, 0xeb, 0xbf, 0xa4, 0x01, 0xca, 0xc6, + 0x48, 0x42, 0x01, 0xd4, 0x45, 0x8b, 0xe8, 0x23, 0xaf, 0x94, 0x75, 0x96, 0x4d, 0xf8, 0x7e, 0xc7, + 0xee, 0xb9, 0xa2, 0x20, 0xc0, 0x12, 0x91, 0xfe, 0x17, 0x1a, 0xc4, 0xb1, 0xe0, 0xd0, 0x3b, 0xa1, + 0x61, 0x91, 0xc0, 0xf4, 0xed, 0x41, 0x18, 0x4f, 0x44, 0x7a, 0x9b, 0xb6, 0xe3, 0x2a, 0xac, 0xb6, + 0x43, 0x3a, 0x4c, 0x86, 0x46, 0xb0, 0xdd, 0x69, 0x0b, 0xdd, 0x94, 0x49, 0x12, 0x77, 0x58, 0x09, + 0x16, 0x35, 0xf1, 0xeb, 0xff, 0xb1, 0x23, 0xbc, 0xfe, 0x47, 0x9b, 0x0f, 0x20, 0xd4, 0x01, 0x3a, + 0x3c, 0xcc, 0x81, 0xfe, 0xaf, 0x6a, 0x90, 0x8c, 0xbf, 0x57, 0x76, 0x09, 0xb2, 0xb1, 0x19, 0x6a, + 0x0f, 0x2d, 0x36, 0xc3, 0x5b, 0x59, 0xac, 0x5a, 0x1e, 0x61, 0x9c, 0xdf, 0x94, 0xa9, 0x01, 0x66, + 0x79, 0x78, 0x70, 0xd9, 0x02, 0x3d, 0xab, 0xfa, 0xb0, 0x4e, 0x37, 0xdf, 0x14, 0xed, 0x0b, 0xe6, + 0x98, 0x7a, 0x5f, 0x44, 0x9f, 0x90, 0xf3, 0x4f, 0xb8, 0xab, 0xbe, 0x53, 0x78, 0x60, 0x4e, 0x24, + 0x22, 0x64, 0x44, 0x61, 0x35, 0xe6, 0x13, 0x1d, 0x63, 0xb7, 0x4c, 0xfd, 0xef, 0x6a, 0x30, 0x25, + 0xe2, 0x5d, 0x1d, 0xc1, 0xf5, 0xb8, 0x07, 0x13, 0x4c, 0x23, 0xa8, 0x24, 0x2c, 0x75, 0xb7, 0x3c, + 0x2f, 0x4c, 0xc4, 0xfd, 0x62, 0x8e, 0x83, 0xec, 0x5f, 0xcc, 0xe1, 0xeb, 0x5f, 0x19, 0x87, 0xc7, + 0x45, 0x93, 0x8c, 0x24, 0x20, 0x37, 0xe1, 0x1e, 0x9c, 0x11, 0x9f, 0xa9, 0xed, 0x1b, 0xb6, 0xbc, + 0x4c, 0x2c, 0xa7, 0xe4, 0x89, 0x8b, 0xe6, 0x0c, 0x38, 0x9c, 0x87, 0x83, 0x47, 0xb7, 0x61, 0xc5, + 0xd7, 0x89, 0xe1, 0x84, 0x5b, 0x11, 0xee, 0x5a, 0x95, 0xe8, 0x36, 0x59, 0x78, 0x38, 0x17, 0x0b, + 0xbb, 0xcc, 0x14, 0x15, 0x2d, 0x9f, 0x18, 0xea, 0x4d, 0x6a, 0x05, 0x3f, 0xc3, 0xd5, 0x5c, 0x88, + 0xb8, 0x00, 0x13, 0xb3, 0x96, 0x19, 0xbb, 0x4c, 0xf9, 0xc6, 0x24, 0xf4, 0x6d, 0x16, 0x89, 0x8d, + 0x12, 0x38, 0x57, 0x97, 0x93, 0x55, 0x38, 0xdd, 0x16, 0x3d, 0x07, 0x73, 0xec, 0x72, 0x38, 0x7e, + 0xee, 0x3d, 0x11, 0x07, 0x9c, 0xbf, 0x95, 0xa8, 0xc1, 0xa9, 0x96, 0xfa, 0x37, 0x35, 0x98, 0x51, + 0x09, 0xe8, 0x08, 0x0e, 0xca, 0x3b, 0x0a, 0xc3, 0xae, 0xe2, 0x3b, 0xab, 0xa2, 0x3d, 0x22, 0xcf, + 0x3e, 0x93, 0xd3, 0x87, 0xdd, 0x12, 0x92, 0x14, 0xf3, 0xaf, 0x74, 0x4b, 0x98, 0x39, 0x49, 0xe4, + 0x2d, 0x61, 0xba, 0x06, 0x67, 0x10, 0xa3, 0x57, 0x60, 0xcc, 0xf4, 0x6d, 0xb1, 0x30, 0xef, 0x2e, + 0xa7, 0x02, 0xe1, 0x4e, 0xfc, 0x14, 0xaa, 0x85, 0x3b, 0x98, 0x42, 0xd4, 0x7f, 0x7b, 0x0c, 0x1a, + 0x4a, 0x38, 0x3d, 0xb4, 0x5a, 0x45, 0x85, 0x8e, 0xc1, 0x47, 0x6a, 0xf4, 0x2a, 0x8c, 0xf5, 0x06, + 0xc3, 0x92, 0x3a, 0xb4, 0x04, 0x77, 0x8d, 0x82, 0xeb, 0x0d, 0x86, 0xe8, 0x65, 0xa9, 0x95, 0x97, + 0xd3, 0x9b, 0xa5, 0x43, 0x69, 0x4a, 0x33, 0x8f, 0xc8, 0x73, 0xbc, 0x90, 0x3c, 0x5d, 0x98, 0x0a, + 0x84, 0xca, 0x3e, 0x51, 0xe1, 0xfd, 0xa9, 0xb2, 0xd4, 0x42, 0x47, 0xe7, 0xa2, 0x7e, 0xa4, 0xc2, + 0x47, 0x48, 0xa8, 0x14, 0x30, 0x64, 0x2f, 0x37, 0x98, 0x16, 0x53, 0xe7, 0x52, 0xc0, 0x3a, 0x2b, + 0xc1, 0xa2, 0x46, 0xff, 0x7c, 0x0d, 0x50, 0x16, 0x20, 0x7a, 0x13, 0x4c, 0xb0, 0x77, 0x5c, 0x62, + 0xb3, 0x29, 0xb1, 0xa6, 0x8c, 0x20, 0xc0, 0xbc, 0x0e, 0x75, 0xc5, 0xbb, 0xbe, 0x72, 0x5f, 0x86, + 0xdd, 0x4f, 0x0b, 0x7c, 0xca, 0x23, 0xc0, 0xe8, 0x7c, 0x1a, 0x2b, 0x3c, 0x9f, 0xd6, 0x61, 0xaa, + 0x6f, 0xbb, 0xcc, 0x2d, 0xa5, 0x9c, 0x51, 0x82, 0x5f, 0xa0, 0x71, 0x10, 0x38, 0x82, 0xa5, 0xff, + 0xb0, 0x46, 0xa9, 0xd8, 0x76, 0x43, 0xe2, 0x1a, 0xae, 0x49, 0xd0, 0x3d, 0x00, 0x63, 0x18, 0x7a, + 0xfc, 0x98, 0x17, 0xc4, 0xfc, 0xbe, 0x92, 0x1f, 0x4c, 0x42, 0x5d, 0x96, 0x10, 0xf9, 0xc5, 0x56, + 0xfc, 0x1b, 0x2b, 0xd8, 0x28, 0xee, 0xd0, 0xee, 0x93, 0x57, 0x6c, 0xd7, 0xf2, 0xee, 0x8a, 0xf5, + 0xad, 0x8c, 0xfb, 0x8e, 0x84, 0xc8, 0x71, 0xc7, 0xbf, 0xb1, 0x82, 0x0d, 0x7d, 0x00, 0x16, 0x98, + 0xfa, 0xe3, 0xb2, 0x78, 0xa5, 0x62, 0x70, 0x9e, 0xe3, 0x44, 0x07, 0x4f, 0x9d, 0x45, 0x87, 0x5b, + 0x68, 0x15, 0xb4, 0xc1, 0x85, 0xbd, 0xf5, 0x6f, 0x69, 0x70, 0x2e, 0x77, 0x2d, 0xd0, 0x35, 0x98, + 0x8f, 0x9d, 0x1a, 0x54, 0x46, 0x59, 0x8f, 0x03, 0xf0, 0xde, 0x48, 0x37, 0xc0, 0xd9, 0x3e, 0x68, + 0x55, 0x4a, 0x0b, 0x2a, 0x23, 0x16, 0x1e, 0x11, 0x8f, 0x09, 0x50, 0x79, 0xbc, 0x1a, 0xe7, 0xf5, + 0xd3, 0x3f, 0x9c, 0x18, 0x70, 0xbc, 0x60, 0x74, 0x7f, 0x6c, 0x90, 0x9e, 0x74, 0x32, 0x97, 0xfb, + 0xa3, 0x49, 0x0b, 0x31, 0xaf, 0x43, 0x97, 0xd4, 0x87, 0x11, 0x92, 0x11, 0x45, 0x8f, 0x23, 0xf4, + 0x21, 0x80, 0x70, 0x1f, 0xb2, 0xdd, 0x1e, 0xea, 0x41, 0xdd, 0x10, 0x79, 0x5a, 0x04, 0xb1, 0xbd, + 0x50, 0x4e, 0xd9, 0x12, 0x40, 0xb8, 0xe7, 0x60, 0xf4, 0x0b, 0x4b, 0xe0, 0xfa, 0x3f, 0xd0, 0xe0, + 0x7c, 0xfe, 0x73, 0xa5, 0x23, 0x9c, 0xb0, 0x7d, 0x68, 0xf8, 0x71, 0x37, 0x41, 0x99, 0x3f, 0xa3, + 0x06, 0x8e, 0x51, 0x1e, 0xbe, 0x53, 0xe9, 0xa3, 0xe5, 0x7b, 0x41, 0xf4, 0x75, 0xd2, 0xb1, 0x64, + 0xa4, 0x10, 0xaf, 0x8c, 0x04, 0xab, 0xf0, 0xf5, 0x4f, 0xd7, 0x00, 0x6e, 0x91, 0xf0, 0xae, 0xe7, + 0x6f, 0xd3, 0x35, 0xfa, 0x89, 0x7a, 0x36, 0x77, 0x11, 0xc6, 0x07, 0x9e, 0x15, 0x08, 0x46, 0xc5, + 0xde, 0xb3, 0xb1, 0x1b, 0x79, 0x56, 0x8a, 0x16, 0x61, 0x82, 0x59, 0x9b, 0xc5, 0x71, 0xc0, 0x84, + 0x5f, 0x2a, 0xf0, 0x04, 0x98, 0x97, 0xf3, 0x70, 0xdc, 0xcc, 0x2f, 0x37, 0x10, 0xe2, 0xbc, 0x08, + 0xc7, 0xcd, 0xcb, 0xb0, 0xac, 0xd5, 0x3f, 0x33, 0x0e, 0x89, 0x4c, 0x43, 0xb1, 0x52, 0x3e, 0xfe, + 0x90, 0x94, 0xf2, 0x0f, 0xc0, 0x82, 0xe3, 0x19, 0x56, 0xd3, 0x70, 0x28, 0xd9, 0xfb, 0x5d, 0xfe, + 0x3d, 0x0c, 0xb7, 0x47, 0xa2, 0x8c, 0x41, 0x8c, 0x05, 0xdc, 0x2c, 0x68, 0x83, 0x0b, 0x7b, 0xa3, + 0xa1, 0x92, 0xe0, 0x88, 0x8a, 0x21, 0xab, 0x95, 0x33, 0x31, 0x2d, 0xa9, 0x4e, 0xd9, 0xf2, 0x6c, + 0x4e, 0x26, 0x41, 0x42, 0x9f, 0xd3, 0xe0, 0x1c, 0xd9, 0x0d, 0x89, 0xef, 0x1a, 0xce, 0x1d, 0xdf, + 0xd8, 0xdc, 0xb4, 0xcd, 0x84, 0xcf, 0xd3, 0xda, 0xc1, 0xfe, 0xe2, 0xb9, 0x95, 0xbc, 0x06, 0xf7, + 0xf7, 0x17, 0xdf, 0x9e, 0x4d, 0x35, 0x16, 0xb9, 0x60, 0xe7, 0x76, 0x61, 0xe4, 0x98, 0x8f, 0xee, + 0xc2, 0xb3, 0xd0, 0x38, 0x86, 0xbf, 0x6e, 0xe2, 0x41, 0xd9, 0xd7, 0x26, 0x41, 0x71, 0x80, 0x3f, + 0x46, 0x1c, 0xe9, 0x5f, 0xd7, 0xe0, 0xac, 0xe9, 0xd8, 0xc4, 0x0d, 0x53, 0x5e, 0xce, 0x7c, 0x6b, + 0xbc, 0x5c, 0xce, 0x35, 0x7f, 0x40, 0xdc, 0x4e, 0xbb, 0xe5, 0xb9, 0x2e, 0x31, 0xc3, 0x56, 0x0e, + 0x74, 0xae, 0xef, 0xe4, 0xd5, 0xe0, 0xdc, 0xd1, 0xb0, 0x09, 0xb1, 0xf2, 0x4e, 0x5b, 0x7d, 0x2b, + 0xd6, 0x12, 0x65, 0x58, 0xd6, 0xa2, 0x67, 0xa0, 0xd1, 0xf3, 0xbd, 0xe1, 0x20, 0x68, 0x31, 0x6f, + 0x2c, 0xbe, 0xc3, 0x98, 0x38, 0x71, 0x2d, 0x2e, 0xc6, 0x6a, 0x1b, 0xf4, 0x0e, 0x98, 0xe1, 0x3f, + 0xd7, 0x7c, 0xb2, 0x69, 0xef, 0x8a, 0x1d, 0xc7, 0x9c, 0x3b, 0xae, 0x29, 0xe5, 0x38, 0xd1, 0x0a, + 0xbd, 0x05, 0xa6, 0xed, 0x20, 0x18, 0x12, 0x7f, 0x1d, 0xdf, 0x14, 0xd1, 0x14, 0x99, 0x0d, 0xb7, + 0x13, 0x15, 0xe2, 0xb8, 0x1e, 0xfd, 0xb2, 0x06, 0x73, 0x3e, 0x79, 0x75, 0x68, 0xfb, 0xc4, 0x62, + 0x48, 0x03, 0xf1, 0x0c, 0xa1, 0x5b, 0xf1, 0xed, 0xc3, 0x12, 0x4e, 0x40, 0xe5, 0x94, 0x2e, 0x4d, + 0x13, 0xc9, 0x4a, 0x9c, 0x1a, 0x02, 0x5d, 0xab, 0xc0, 0xee, 0xb9, 0xb6, 0xdb, 0x5b, 0x76, 0x7a, + 0xc1, 0x42, 0x9d, 0xed, 0x5e, 0x2e, 0x7a, 0xc5, 0xc5, 0x58, 0x6d, 0x83, 0xde, 0x05, 0xb3, 0xc3, + 0x80, 0xd2, 0x6e, 0x9f, 0xf0, 0x05, 0x9e, 0x8e, 0xdd, 0x24, 0xd7, 0xd5, 0x0a, 0x9c, 0x6c, 0x47, + 0xb5, 0xbd, 0xa8, 0x40, 0x2c, 0x33, 0xf0, 0x88, 0x0f, 0x74, 0x9c, 0xeb, 0x89, 0x1a, 0x9c, 0x6a, + 0x79, 0x61, 0x19, 0xce, 0xe4, 0x4c, 0xf3, 0x58, 0x1b, 0xe4, 0x9b, 0x35, 0x78, 0xe3, 0xa1, 0x64, + 0x89, 0xbe, 0xa6, 0x41, 0x83, 0xec, 0x86, 0xbe, 0x21, 0x9d, 0x36, 0xe9, 0x37, 0xea, 0x3d, 0x9c, + 0x4d, 0xb0, 0xb4, 0x12, 0x63, 0xe2, 0xdf, 0x4d, 0x9e, 0x79, 0x4a, 0x0d, 0x56, 0x07, 0x44, 0xa5, + 0x76, 0x1e, 0x11, 0x44, 0xb5, 0xdd, 0x89, 0xd4, 0x2c, 0xa2, 0xe6, 0xc2, 0x8b, 0x70, 0x3a, 0x0d, + 0xf9, 0x58, 0x4b, 0xf5, 0x0f, 0x6b, 0x30, 0xb1, 0xe6, 0x18, 0x27, 0x12, 0x1a, 0xf3, 0x63, 0x89, + 0x90, 0x64, 0xe5, 0x02, 0xbd, 0xb1, 0xb1, 0x16, 0x06, 0x44, 0xdc, 0x4a, 0x05, 0x44, 0x7c, 0xa9, + 0x02, 0x8e, 0xd1, 0xf1, 0x0f, 0xbf, 0xa7, 0xc1, 0x34, 0x6b, 0x77, 0x02, 0x71, 0x1a, 0x3e, 0x9a, + 0x8c, 0xd3, 0xf0, 0x5c, 0xf9, 0x49, 0x15, 0xc4, 0x67, 0xf8, 0xe3, 0x68, 0x32, 0x2c, 0xc2, 0xd6, + 0x07, 0xd5, 0x5c, 0x54, 0x7c, 0x36, 0x4f, 0xe5, 0x05, 0x04, 0xbc, 0xe9, 0x99, 0x86, 0x93, 0x89, + 0x0a, 0x38, 0x32, 0x21, 0x95, 0x0b, 0xd3, 0x44, 0xc4, 0x5d, 0x89, 0x66, 0x53, 0x4e, 0xb6, 0x8d, + 0xa2, 0xb7, 0xc4, 0xf8, 0xa2, 0x92, 0x00, 0xc7, 0x28, 0xf4, 0xdf, 0xa9, 0x41, 0x43, 0xf9, 0x9a, + 0x3f, 0x96, 0x80, 0x83, 0x57, 0x73, 0x33, 0xb7, 0xd4, 0x98, 0x53, 0xe6, 0xf9, 0x63, 0x64, 0x6d, + 0x09, 0xa0, 0x61, 0xc6, 0x31, 0xa4, 0x2b, 0x11, 0xb8, 0x12, 0x8b, 0x5a, 0x38, 0x87, 0xc7, 0x05, + 0x58, 0xc5, 0xa2, 0xff, 0x93, 0x1a, 0x4c, 0xad, 0xf9, 0x1e, 0xfd, 0xc6, 0x27, 0xc0, 0x20, 0x36, + 0x12, 0x0c, 0xa2, 0xe4, 0xe6, 0xe5, 0xa3, 0x2d, 0x64, 0x11, 0x1f, 0x4f, 0xb1, 0x88, 0x66, 0x25, + 0x2c, 0xa3, 0x99, 0xc4, 0xf7, 0x35, 0x68, 0x88, 0x96, 0x27, 0xc0, 0x26, 0x8c, 0x24, 0x9b, 0x78, + 0xbe, 0xca, 0xc4, 0x0a, 0x18, 0xc5, 0x97, 0x35, 0x98, 0x15, 0x2d, 0x56, 0x49, 0x7f, 0x83, 0xf8, + 0xe8, 0x2a, 0x4c, 0x05, 0x43, 0xf6, 0x2d, 0xc5, 0x8c, 0x1e, 0x53, 0x59, 0x85, 0xbf, 0x61, 0x98, + 0x2c, 0x03, 0x19, 0x6f, 0xa2, 0x44, 0x22, 0xe5, 0x05, 0x38, 0xea, 0x4c, 0x15, 0x3a, 0xdf, 0x73, + 0x32, 0x11, 0x25, 0xb0, 0xe7, 0x10, 0xcc, 0x6a, 0xa8, 0x1e, 0x45, 0xff, 0x46, 0xb7, 0x54, 0x4c, + 0x8f, 0xa2, 0xd5, 0x01, 0xe6, 0xe5, 0xfa, 0xe7, 0xc7, 0xe5, 0x6a, 0x33, 0x3e, 0x76, 0x1d, 0xa6, + 0x4d, 0x9f, 0x18, 0x21, 0xb1, 0x9a, 0x7b, 0x47, 0x19, 0x1c, 0x13, 0xe8, 0x5a, 0x51, 0x0f, 0x1c, + 0x77, 0xa6, 0xa2, 0x93, 0x7a, 0xf1, 0x54, 0x8b, 0xc5, 0xcc, 0xc2, 0x4b, 0xa7, 0xe7, 0x61, 0xc2, + 0xbb, 0xeb, 0x4a, 0xef, 0x8e, 0x91, 0x88, 0xd9, 0x54, 0x6e, 0xd3, 0xd6, 0x98, 0x77, 0x52, 0x63, + 0xa0, 0x8c, 0x8f, 0x88, 0x81, 0xd2, 0x87, 0xa9, 0x3e, 0xfb, 0x0c, 0xd5, 0xc2, 0x52, 0x26, 0xbe, + 0xa8, 0x1a, 0x25, 0x9c, 0x81, 0xc6, 0x11, 0x0e, 0x2a, 0x04, 0x53, 0x39, 0x2d, 0x18, 0x18, 0x26, + 0x51, 0x85, 0xe0, 0x5b, 0x51, 0x21, 0x8e, 0xeb, 0xd1, 0xbd, 0x64, 0x78, 0x9d, 0xa9, 0x0a, 0x66, + 0x4e, 0x31, 0x3e, 0x25, 0xa2, 0x0e, 0x5f, 0xfc, 0xc2, 0x10, 0x3b, 0x5f, 0x1c, 0x97, 0x64, 0x2a, + 0x18, 0x7f, 0x7e, 0xfa, 0x2c, 0xad, 0x54, 0xfa, 0xac, 0xb7, 0xc3, 0xc4, 0x60, 0xcb, 0x08, 0x22, + 0x5a, 0x8d, 0x42, 0xda, 0x4f, 0xac, 0xd1, 0xc2, 0xfb, 0xfb, 0x8b, 0x33, 0x02, 0x35, 0xfb, 0x8d, + 0x79, 0x5b, 0x34, 0x84, 0x33, 0x41, 0x68, 0x38, 0xa4, 0x6b, 0x0b, 0xf3, 0x51, 0x10, 0x1a, 0xfd, + 0x41, 0x89, 0xc8, 0xf4, 0xdc, 0xfb, 0x39, 0x0b, 0x0a, 0xe7, 0xc1, 0x47, 0x9f, 0xd1, 0x60, 0x81, + 0x95, 0x2f, 0x0f, 0x43, 0x8f, 0x67, 0xf1, 0x88, 0x91, 0x1f, 0xff, 0xde, 0x96, 0x29, 0xfb, 0xdd, + 0x02, 0x78, 0xb8, 0x10, 0x13, 0x7a, 0x0d, 0xce, 0x39, 0x46, 0x10, 0x2e, 0x9b, 0xa1, 0xbd, 0x63, + 0x87, 0x7b, 0xf1, 0x10, 0x8e, 0x9f, 0x4a, 0x8c, 0xb9, 0x87, 0xdc, 0xcc, 0x03, 0x86, 0xf3, 0x71, + 0xe8, 0xff, 0x5b, 0x03, 0x94, 0x25, 0x21, 0xd4, 0x87, 0xba, 0x45, 0x36, 0x8d, 0xa1, 0x13, 0x46, + 0x92, 0x40, 0xe5, 0xe0, 0x4f, 0x92, 0x3b, 0xb7, 0x05, 0x60, 0x2c, 0x51, 0xa0, 0x01, 0x4c, 0xdf, + 0xdd, 0xb2, 0x43, 0xe2, 0xd8, 0x41, 0xf8, 0xa0, 0x82, 0x4d, 0x49, 0xe1, 0xe7, 0x95, 0x08, 0x32, + 0x8e, 0x91, 0xe8, 0xbf, 0x38, 0x06, 0xf5, 0x63, 0xe4, 0x68, 0x1d, 0x02, 0x12, 0x81, 0x29, 0xa8, + 0xc4, 0x44, 0xaa, 0x18, 0xcd, 0x98, 0x58, 0xd3, 0xca, 0x00, 0xc3, 0x39, 0x08, 0xd0, 0x6b, 0x70, + 0xd6, 0x76, 0x37, 0x7d, 0x23, 0x08, 0xfd, 0xa1, 0x19, 0x0e, 0x7d, 0x52, 0x25, 0x26, 0x3e, 0xb3, + 0x34, 0x74, 0x72, 0xc0, 0xe1, 0x5c, 0x24, 0x68, 0x13, 0xa6, 0xee, 0x7a, 0xfe, 0x36, 0x65, 0xa0, + 0xe3, 0x15, 0x92, 0x2e, 0xbd, 0xc2, 0x60, 0xc4, 0x9c, 0x93, 0xff, 0x0e, 0x70, 0x04, 0x5c, 0xff, + 0x03, 0x0d, 0x26, 0xf8, 0x6b, 0xbb, 0xd7, 0x87, 0x96, 0xc5, 0xc6, 0x5a, 0x18, 0xe7, 0x99, 0xea, + 0x3e, 0xac, 0xc5, 0xeb, 0x45, 0xf7, 0x61, 0x83, 0x2d, 0x10, 0x69, 0xfe, 0x60, 0x4c, 0x4c, 0x86, + 0xc9, 0x0c, 0x1d, 0x38, 0x23, 0xc4, 0xdf, 0x9b, 0xf6, 0x26, 0xa1, 0x04, 0xd6, 0x36, 0xf6, 0x02, + 0xf1, 0xda, 0x9d, 0xb1, 0xde, 0x56, 0xb6, 0x1a, 0xe7, 0xf5, 0x41, 0xff, 0x54, 0xa3, 0xa7, 0x73, + 0xe8, 0xdb, 0x66, 0xb5, 0xe0, 0xc9, 0x72, 0x70, 0x4b, 0xab, 0x1c, 0x1a, 0x37, 0x1f, 0xac, 0xc7, + 0xc7, 0x34, 0x2b, 0xbd, 0xbf, 0xbf, 0xb8, 0x98, 0x63, 0x9e, 0x8c, 0x0c, 0xea, 0x74, 0x69, 0x3f, + 0xfd, 0xc3, 0x91, 0x4d, 0x98, 0x71, 0x3f, 0x1a, 0x32, 0xba, 0x0e, 0x13, 0x81, 0xe9, 0x0d, 0xc8, + 0x71, 0x42, 0xc2, 0xcb, 0x15, 0xee, 0xd2, 0x9e, 0x98, 0x03, 0xb8, 0xf0, 0x71, 0x98, 0x51, 0x47, + 0x9e, 0x63, 0x9e, 0x68, 0xab, 0xe6, 0x89, 0x63, 0xdf, 0xe2, 0xa9, 0xe6, 0x8c, 0xdf, 0xad, 0x81, + 0x48, 0x99, 0x78, 0x84, 0x2b, 0x8c, 0x8f, 0x47, 0x51, 0x54, 0xab, 0xe4, 0x89, 0x4c, 0xa7, 0x86, + 0x8f, 0x17, 0x41, 0x0d, 0xa4, 0x8a, 0x3c, 0x19, 0xbe, 0x6c, 0xac, 0x42, 0xcc, 0x6a, 0x3e, 0xb5, + 0x87, 0x1d, 0xb0, 0xec, 0xfb, 0x1a, 0xcc, 0x24, 0x02, 0xc2, 0xf5, 0x61, 0xcc, 0x97, 0xb6, 0x80, + 0xb2, 0x77, 0x3c, 0x91, 0x77, 0xd3, 0x63, 0x23, 0x1a, 0x61, 0x8a, 0x47, 0xc6, 0x8e, 0xab, 0x3d, + 0xa0, 0xd8, 0x71, 0xfa, 0x97, 0x34, 0x38, 0x1f, 0x4d, 0x28, 0x19, 0x88, 0x04, 0x3d, 0x05, 0x75, + 0x63, 0x60, 0x33, 0xcb, 0xaf, 0x6a, 0x3c, 0x5f, 0x5e, 0xeb, 0xb0, 0x32, 0x2c, 0x6b, 0xd1, 0x5b, + 0xa1, 0x1e, 0x91, 0x9e, 0x90, 0xfc, 0x24, 0xdf, 0x92, 0xb7, 0x56, 0xb2, 0x05, 0x7a, 0x52, 0x89, + 0x74, 0x3b, 0x11, 0x1f, 0xd4, 0x12, 0x31, 0xbf, 0xe3, 0xd6, 0xbf, 0x30, 0x06, 0xb3, 0xdc, 0x52, + 0xd2, 0xb4, 0x5d, 0xcb, 0x76, 0x7b, 0x27, 0x70, 0x40, 0x24, 0x72, 0x8d, 0xd7, 0x1e, 0x54, 0xae, + 0xf1, 0x1b, 0x30, 0xf9, 0x2a, 0xe5, 0x54, 0x11, 0x81, 0x1f, 0x89, 0x61, 0x48, 0xe2, 0x65, 0x4c, + 0x2e, 0xc0, 0x02, 0x04, 0x0a, 0x95, 0x94, 0xef, 0x55, 0x1e, 0x93, 0x27, 0x96, 0x56, 0x86, 0xac, + 0x9e, 0xc9, 0xcf, 0xf7, 0xce, 0x62, 0xb0, 0x26, 0x7a, 0xbc, 0x5e, 0x62, 0xb0, 0x26, 0x06, 0x5d, + 0x70, 0xce, 0x3d, 0x0b, 0xe7, 0x72, 0x57, 0xe3, 0x70, 0xc9, 0x50, 0xff, 0x76, 0x0d, 0x58, 0x2a, + 0xe6, 0x13, 0xa0, 0xcd, 0x8f, 0x26, 0x84, 0x97, 0x17, 0xca, 0x47, 0x81, 0x2d, 0x32, 0xff, 0xf4, + 0x52, 0xe6, 0x9f, 0xf7, 0x96, 0x47, 0x31, 0xda, 0xf6, 0xf3, 0xab, 0x35, 0x00, 0xda, 0x8c, 0x27, + 0xad, 0x16, 0x8e, 0xa1, 0x9c, 0xa2, 0xb5, 0x24, 0xf7, 0xc8, 0x52, 0xe2, 0x49, 0x5e, 0x5e, 0xeb, + 0x32, 0xf3, 0xf0, 0x58, 0x7c, 0xc9, 0x90, 0xcc, 0x3a, 0x9c, 0xe4, 0x18, 0xe3, 0x0f, 0x88, 0x63, + 0xe8, 0xdf, 0xd6, 0x80, 0x65, 0xa4, 0x69, 0xdf, 0xea, 0xa2, 0x77, 0xc1, 0xac, 0xcd, 0x6f, 0x71, + 0xdb, 0x6a, 0xc8, 0x3e, 0x76, 0xd3, 0xd4, 0x51, 0x2b, 0x70, 0xb2, 0x1d, 0x72, 0x95, 0x75, 0xad, + 0x92, 0x31, 0x5e, 0x0c, 0xe4, 0x50, 0x1e, 0xf1, 0xa3, 0x1a, 0x9c, 0x4a, 0xb5, 0x3d, 0x82, 0x6e, + 0xf5, 0x70, 0x58, 0xae, 0x12, 0xe9, 0x7e, 0xec, 0x04, 0x22, 0xdd, 0xcb, 0xa0, 0xf3, 0xe3, 0x0f, + 0x39, 0xe8, 0xfc, 0x77, 0x35, 0x60, 0xc9, 0xc8, 0x4f, 0x80, 0xfd, 0x7e, 0x24, 0xc9, 0x7e, 0x9f, + 0x2d, 0x4d, 0x3b, 0x05, 0x5c, 0xf7, 0x2f, 0x34, 0x60, 0x31, 0xa8, 0x85, 0xeb, 0x8a, 0xe2, 0x0d, + 0xa2, 0x15, 0x78, 0x83, 0x3c, 0x2e, 0x9c, 0x49, 0x52, 0x86, 0x50, 0xc5, 0xa1, 0xe4, 0xad, 0x8a, + 0xbf, 0xc8, 0x58, 0x92, 0x95, 0x64, 0x7d, 0x46, 0xd0, 0x6b, 0x30, 0x1b, 0x6c, 0x79, 0x5e, 0x18, + 0x99, 0x24, 0xc4, 0xd7, 0x6b, 0x96, 0xf7, 0xe5, 0x8e, 0xe6, 0xc2, 0x77, 0x67, 0x57, 0x05, 0x8e, + 0x93, 0xb8, 0xf4, 0xdf, 0x13, 0xd3, 0x3f, 0xc6, 0x56, 0x39, 0x41, 0xd6, 0xf7, 0xe6, 0x14, 0xeb, + 0x2b, 0x4a, 0xba, 0xfe, 0xdb, 0x62, 0x16, 0x32, 0x74, 0xf8, 0x00, 0x66, 0x1d, 0x35, 0x8f, 0x90, + 0x20, 0xcc, 0x52, 0x29, 0x88, 0x64, 0xf4, 0xc0, 0x44, 0x31, 0x4e, 0x22, 0xa0, 0xfc, 0x31, 0x1a, + 0x3c, 0x4f, 0x8e, 0xcc, 0x33, 0x62, 0xb0, 0x2f, 0xb0, 0xa6, 0x56, 0xe0, 0x64, 0x3b, 0xfd, 0xeb, + 0x35, 0xb8, 0xc4, 0xc7, 0xce, 0xbc, 0xe8, 0xdb, 0x64, 0x40, 0x5c, 0x8b, 0xb8, 0xe6, 0x1e, 0x93, + 0x83, 0x2d, 0xaf, 0x87, 0x3e, 0xa3, 0x41, 0x3d, 0xba, 0x31, 0x13, 0x13, 0xf9, 0x50, 0x85, 0xe8, + 0xeb, 0x05, 0x68, 0xe4, 0x85, 0x1d, 0x0f, 0x63, 0x27, 0x7e, 0x61, 0x89, 0x19, 0xed, 0xc2, 0xc4, + 0xc0, 0xf7, 0x36, 0x22, 0x1d, 0xf0, 0x95, 0x07, 0x3f, 0x84, 0x35, 0x0a, 0x9e, 0xef, 0x38, 0xf6, + 0x2f, 0xe6, 0x08, 0x75, 0x0c, 0x4f, 0x1e, 0x69, 0xe8, 0xe8, 0xe9, 0x74, 0xe0, 0x66, 0x69, 0xf0, + 0xc9, 0x84, 0xc1, 0xba, 0x0d, 0xfa, 0xe1, 0x63, 0x39, 0x0e, 0xc0, 0xf7, 0xc3, 0x13, 0x0a, 0xc0, + 0x95, 0x5d, 0x93, 0x04, 0x41, 0xcb, 0x18, 0x18, 0x26, 0x55, 0x80, 0xd9, 0x8b, 0x65, 0x6e, 0x9c, + 0x3e, 0x06, 0xc8, 0x4f, 0xd5, 0x60, 0x51, 0x81, 0x99, 0xf0, 0xe1, 0x8a, 0xb8, 0xc7, 0x57, 0x35, + 0x68, 0x18, 0xae, 0xeb, 0x85, 0x86, 0x7a, 0x65, 0x4a, 0xaa, 0x7e, 0x9c, 0x3c, 0x5c, 0x4b, 0xcb, + 0x31, 0x9e, 0x94, 0x87, 0x84, 0x52, 0x83, 0xd5, 0xe1, 0x5c, 0x78, 0x11, 0x4e, 0xa7, 0x7b, 0x1d, + 0x4b, 0xd3, 0x6d, 0xc1, 0x79, 0x65, 0x54, 0xec, 0x0a, 0xa6, 0xb5, 0x45, 0xcc, 0xed, 0xe0, 0x38, + 0xeb, 0xd8, 0xa4, 0x92, 0xb5, 0x04, 0xa2, 0xa4, 0x36, 0x78, 0x1a, 0xa6, 0x76, 0xec, 0xc0, 0x8e, + 0x22, 0x11, 0x28, 0x30, 0x5e, 0xe6, 0xc5, 0x38, 0xaa, 0xd7, 0x5f, 0x82, 0x33, 0x2a, 0x0c, 0xc6, + 0x44, 0x6f, 0x75, 0x8f, 0x33, 0x8a, 0x55, 0x78, 0x5c, 0x81, 0x90, 0xfb, 0x7e, 0xf2, 0x38, 0xe0, + 0xbe, 0x51, 0x8f, 0x78, 0x9e, 0x78, 0x7d, 0xf3, 0x1d, 0x0d, 0x1e, 0x25, 0x45, 0x64, 0x27, 0xf8, + 0xc6, 0x07, 0xab, 0xd2, 0x45, 0x21, 0x5d, 0x8b, 0xe8, 0x5d, 0x45, 0xd5, 0xb8, 0x78, 0x68, 0xe8, + 0x5e, 0x22, 0xaf, 0x47, 0xad, 0x92, 0x36, 0x99, 0xf3, 0x95, 0x47, 0x65, 0xf5, 0x40, 0x3e, 0xd4, + 0x03, 0xf1, 0x2d, 0x2b, 0x3d, 0xf3, 0xce, 0xa1, 0x0d, 0xe1, 0x24, 0x2a, 0x7e, 0x61, 0x89, 0x07, + 0x7d, 0x43, 0x83, 0xb3, 0x4e, 0xce, 0xfe, 0x12, 0x07, 0xff, 0x9d, 0x87, 0xb1, 0x77, 0xb9, 0xe1, + 0x3d, 0xaf, 0x06, 0xe7, 0x8e, 0x05, 0xfd, 0xfd, 0xc2, 0x07, 0xc5, 0x13, 0x15, 0xd2, 0xaa, 0x1d, + 0xb6, 0x01, 0x4a, 0xbc, 0x2d, 0xfe, 0x39, 0x68, 0x78, 0x31, 0x5b, 0x10, 0x8f, 0xc0, 0x6f, 0x54, + 0x1d, 0x9d, 0xc2, 0x69, 0xf8, 0x55, 0xa6, 0x52, 0x80, 0x55, 0x84, 0xe8, 0xcb, 0x1a, 0x20, 0x2b, + 0x73, 0x7c, 0x88, 0xeb, 0x54, 0xfc, 0xe0, 0x0f, 0x49, 0x7e, 0x77, 0x93, 0x2d, 0xc7, 0x39, 0xa3, + 0xd0, 0xff, 0xe5, 0x14, 0x17, 0xd4, 0x99, 0xe9, 0xdc, 0x84, 0xc9, 0x0d, 0xa6, 0xeb, 0x0a, 0x66, + 0x50, 0x5e, 0xb3, 0xe6, 0x2a, 0x33, 0xd7, 0x44, 0xf9, 0xff, 0x58, 0x80, 0x46, 0x4b, 0x00, 0x1b, + 0x8e, 0x67, 0x6e, 0xb7, 0x3a, 0x6d, 0x1c, 0x09, 0x41, 0x6c, 0x03, 0x36, 0x65, 0x29, 0x56, 0x5a, + 0xa0, 0x0f, 0xc3, 0x98, 0x25, 0xd5, 0xa3, 0xe7, 0xab, 0x68, 0x86, 0xb1, 0xdb, 0x3e, 0xdd, 0x6e, + 0x14, 0x2a, 0xf2, 0xa0, 0xee, 0x0a, 0x59, 0x58, 0x6c, 0xae, 0xf2, 0x69, 0x6b, 0xa4, 0x50, 0x2d, + 0x65, 0xf9, 0xa8, 0x04, 0x4b, 0x24, 0x14, 0xa1, 0x54, 0x76, 0x27, 0x2a, 0x22, 0x94, 0x9a, 0xee, + 0x28, 0x3b, 0xc4, 0x9a, 0xaa, 0xb7, 0x4e, 0x1e, 0x5d, 0x6f, 0x9d, 0x2d, 0xd4, 0x59, 0x37, 0x61, + 0x32, 0xe4, 0xa9, 0xf3, 0xa7, 0x2a, 0x78, 0x5f, 0xd1, 0x09, 0xb0, 0xdc, 0xfa, 0xb1, 0xcc, 0x2e, + 0x12, 0xef, 0x0b, 0xe8, 0x94, 0x1a, 0x77, 0x58, 0x56, 0x31, 0x11, 0x5a, 0xb0, 0x3c, 0x35, 0xf2, + 0xe4, 0x64, 0x9c, 0x1a, 0xf9, 0xff, 0x58, 0x80, 0x46, 0xdb, 0x54, 0x13, 0xe3, 0xe7, 0xa3, 0x08, + 0x84, 0xb0, 0x5c, 0x75, 0x47, 0x06, 0x91, 0xf3, 0x3f, 0xff, 0x85, 0x25, 0x02, 0x64, 0xc2, 0x94, + 0x30, 0x7d, 0x88, 0xf8, 0xd8, 0xcf, 0x57, 0xc9, 0x51, 0x10, 0xe5, 0xdc, 0xe3, 0x4f, 0x92, 0x23, + 0xc8, 0xfa, 0x7f, 0x18, 0xe7, 0x56, 0xab, 0x1f, 0xa3, 0xbf, 0x5c, 0x0f, 0xea, 0x11, 0xb0, 0x4a, + 0x66, 0xc0, 0x28, 0xd5, 0x0b, 0x5f, 0x50, 0x99, 0xf8, 0x45, 0x02, 0x47, 0xad, 0xbc, 0xa7, 0x46, + 0x4a, 0xf8, 0xb5, 0x23, 0x3d, 0x33, 0xca, 0x77, 0x2c, 0x19, 0x2f, 0xe5, 0x58, 0xf2, 0x02, 0x9c, + 0x8a, 0x7c, 0xef, 0x2c, 0xc2, 0xae, 0xb6, 0x84, 0x77, 0x3a, 0x7b, 0x62, 0xdb, 0x4a, 0x56, 0xe1, + 0x74, 0x5b, 0xf4, 0x4d, 0x0d, 0x9e, 0xe0, 0x9e, 0xf1, 0x2d, 0x7a, 0x94, 0xb1, 0xbc, 0x6b, 0x24, + 0x4e, 0xf4, 0x16, 0x3b, 0x5d, 0x4c, 0x1e, 0xdb, 0xe9, 0xe2, 0xa9, 0x83, 0xfd, 0xc5, 0x27, 0x5a, + 0x47, 0x80, 0x8d, 0x8f, 0x34, 0x02, 0xfd, 0x06, 0x4c, 0xcb, 0x2d, 0x8c, 0x2e, 0x29, 0x02, 0x7b, + 0xcc, 0x65, 0x6f, 0x90, 0x3d, 0x2e, 0xbd, 0x2f, 0x26, 0xa4, 0x77, 0xae, 0xbf, 0xbd, 0x4c, 0x0b, + 0x84, 0x20, 0xaf, 0xff, 0x67, 0x8d, 0xd3, 0xac, 0xc8, 0x51, 0x68, 0x40, 0xa3, 0xcf, 0x23, 0xcf, + 0xb1, 0x87, 0x81, 0x5a, 0xf9, 0x27, 0x89, 0xab, 0x31, 0x18, 0xac, 0xc2, 0x44, 0xbb, 0xd9, 0x44, + 0x9a, 0xd7, 0x2a, 0xf2, 0x97, 0x23, 0xe7, 0xd3, 0x44, 0xd9, 0x3e, 0x6a, 0x06, 0x42, 0x6d, 0x74, + 0x06, 0xc2, 0xc3, 0x33, 0x48, 0xe9, 0xdf, 0x19, 0x83, 0xdc, 0xec, 0x01, 0x48, 0x87, 0x49, 0xfe, + 0xc6, 0x41, 0x4d, 0x31, 0xca, 0x1f, 0x40, 0x60, 0x51, 0x83, 0x7c, 0x38, 0x2b, 0x1e, 0x10, 0xdc, + 0x20, 0x7b, 0x71, 0x6a, 0x4b, 0xb1, 0x91, 0x8f, 0xee, 0x46, 0xcc, 0x42, 0x52, 0x75, 0x53, 0x90, + 0x70, 0x2e, 0x6c, 0x74, 0x9b, 0xbf, 0xe8, 0x71, 0x2d, 0x16, 0xb4, 0x25, 0x26, 0x37, 0xf1, 0x46, + 0xf1, 0xd1, 0xe8, 0x45, 0x4f, 0xa6, 0x01, 0xce, 0xef, 0x87, 0x76, 0x00, 0xf5, 0x8d, 0xdd, 0x34, + 0xb4, 0x0a, 0x41, 0xcb, 0x57, 0x33, 0xd0, 0x70, 0x0e, 0x06, 0xba, 0xff, 0x0d, 0xd3, 0x24, 0x83, + 0x90, 0x58, 0x7c, 0x59, 0xa3, 0x47, 0xf2, 0x6c, 0xff, 0x2f, 0x27, 0xab, 0x70, 0xba, 0x2d, 0x73, + 0xe5, 0x67, 0xfa, 0xc0, 0xeb, 0xc4, 0xc9, 0x84, 0x8d, 0xf5, 0x21, 0xbb, 0xf2, 0x73, 0x1c, 0xa3, + 0x6f, 0x6a, 0x3e, 0x08, 0xe7, 0x59, 0xb3, 0x65, 0x8b, 0xa9, 0x00, 0x01, 0xb1, 0x96, 0x2d, 0x8b, + 0x3d, 0xaf, 0xab, 0x9a, 0x1a, 0x54, 0xff, 0xe7, 0x35, 0x38, 0xc5, 0x60, 0xb7, 0x96, 0xb1, 0xb0, + 0x52, 0xa0, 0x76, 0xe4, 0x3e, 0xc8, 0xa1, 0x2e, 0xa5, 0xdd, 0x07, 0x2f, 0xf1, 0x0e, 0x3e, 0x61, + 0x7c, 0xdd, 0x70, 0x82, 0xa8, 0x67, 0xc2, 0x9f, 0xd0, 0x07, 0xe4, 0x18, 0x41, 0xc8, 0x33, 0x35, + 0x45, 0xcc, 0xb5, 0x84, 0x3b, 0x21, 0xa3, 0xcf, 0x9b, 0x19, 0x48, 0x38, 0x07, 0x7a, 0x84, 0xb3, + 0xe5, 0xf5, 0x07, 0x0e, 0x91, 0x38, 0x6b, 0xe5, 0x71, 0x26, 0x21, 0xe1, 0x1c, 0xe8, 0xfa, 0x17, + 0x35, 0x38, 0x9d, 0x5e, 0x10, 0x74, 0x17, 0xea, 0xbe, 0x58, 0x14, 0x41, 0xdf, 0xab, 0xe5, 0xa9, + 0x23, 0x67, 0xa5, 0x45, 0xba, 0x10, 0xf1, 0x0b, 0x4b, 0x64, 0xfa, 0xff, 0x9c, 0x84, 0x85, 0xa2, + 0x4e, 0xe8, 0x57, 0x34, 0x38, 0x6f, 0xc6, 0xe7, 0xde, 0xf2, 0x30, 0xdc, 0xf2, 0x7c, 0x3b, 0xb4, + 0x49, 0x94, 0x88, 0xb8, 0x5d, 0x61, 0x90, 0x92, 0x7e, 0x78, 0xf0, 0x8e, 0x56, 0x2e, 0x1e, 0x5c, + 0x80, 0x1f, 0x7d, 0x02, 0x60, 0x3b, 0x0e, 0x88, 0x55, 0xab, 0x90, 0xdb, 0x94, 0x8d, 0x46, 0x89, + 0x9a, 0x15, 0x8d, 0x8a, 0x29, 0x61, 0x4a, 0xb9, 0x82, 0x8f, 0x65, 0x56, 0x0d, 0xb6, 0x6e, 0x90, + 0xbd, 0x81, 0x61, 0xfb, 0x95, 0x32, 0xab, 0xf2, 0xed, 0xdc, 0xbd, 0x2e, 0x60, 0x25, 0xb1, 0x2b, + 0xe5, 0x0a, 0x3e, 0xf4, 0x8b, 0x1a, 0xcc, 0x72, 0x61, 0x4b, 0x78, 0xe9, 0x08, 0x4e, 0x7e, 0xbb, + 0xfc, 0x08, 0x6e, 0xab, 0xe0, 0xe4, 0x20, 0x98, 0x31, 0x3e, 0x59, 0x95, 0x44, 0x4c, 0x29, 0x64, + 0x3e, 0x99, 0x82, 0xe7, 0x06, 0xd9, 0x13, 0x9a, 0x5c, 0xb7, 0xc2, 0x82, 0xa4, 0x41, 0xca, 0x21, + 0x31, 0x39, 0x36, 0x5b, 0x9d, 0x1d, 0x04, 0x1b, 0x1a, 0x09, 0x4d, 0x4b, 0x64, 0x58, 0xb6, 0x3d, + 0x97, 0x0e, 0x6d, 0xb2, 0xea, 0xd0, 0x56, 0xee, 0xb4, 0xda, 0x09, 0x90, 0xc9, 0xa1, 0x65, 0xab, + 0xb3, 0x83, 0xd0, 0xbf, 0x5f, 0x83, 0xcb, 0xa3, 0x81, 0xfd, 0x15, 0x4f, 0x3d, 0x16, 0x4f, 0xfd, + 0xf9, 0x1a, 0x3c, 0x52, 0xb0, 0x8f, 0x0b, 0xd6, 0x40, 0xfb, 0xff, 0x6e, 0x0d, 0xbe, 0xa7, 0xc1, + 0x34, 0x5b, 0x83, 0xd7, 0x8b, 0x0f, 0x2b, 0x1b, 0x6c, 0xc1, 0x2d, 0xf3, 0xef, 0x6b, 0x30, 0x9f, + 0x09, 0xb3, 0x75, 0x04, 0xe9, 0xe5, 0x04, 0xef, 0x5a, 0x9f, 0x4c, 0xe7, 0xa5, 0x6d, 0xe4, 0xc6, + 0xdf, 0x7b, 0x05, 0x66, 0x13, 0x77, 0xcc, 0x32, 0xb6, 0x82, 0x96, 0x1b, 0x5b, 0x41, 0x0d, 0x9d, + 0x50, 0x1b, 0x1d, 0x3a, 0xa1, 0x06, 0x17, 0x8a, 0x79, 0xf7, 0x5f, 0x1a, 0xb2, 0x97, 0x5b, 0x3f, + 0x7b, 0x88, 0xfe, 0xa5, 0x59, 0x03, 0x79, 0x9e, 0x14, 0x9e, 0x9b, 0x7f, 0x75, 0x9e, 0x1c, 0x6b, + 0x41, 0xff, 0xd9, 0x9c, 0xe0, 0xa5, 0xec, 0x1e, 0xe0, 0xa3, 0x30, 0xc9, 0x62, 0x87, 0x44, 0x52, + 0xef, 0x7b, 0xca, 0x07, 0x25, 0x09, 0xb8, 0x8d, 0x81, 0xff, 0x8f, 0x05, 0x58, 0xd4, 0x86, 0xd3, + 0xa6, 0xe3, 0x0d, 0xad, 0x35, 0xdf, 0xdb, 0xb4, 0x1d, 0x72, 0x2b, 0x36, 0x67, 0xc8, 0x18, 0x68, + 0xad, 0x54, 0x3d, 0xce, 0xf4, 0x40, 0x5d, 0xf5, 0x66, 0xe0, 0xdd, 0x65, 0x7d, 0x99, 0x78, 0x58, + 0x6b, 0x79, 0x23, 0xe0, 0x03, 0x90, 0x88, 0x2d, 0x46, 0x4f, 0x4a, 0x5e, 0x2c, 0x19, 0xdf, 0x4d, + 0x72, 0xd7, 0x48, 0x11, 0x97, 0x45, 0x01, 0x56, 0xb0, 0xa0, 0x00, 0x1a, 0x5b, 0x71, 0xb2, 0x66, + 0x21, 0x4d, 0xbe, 0x54, 0x35, 0x53, 0x34, 0xb7, 0x80, 0x29, 0x05, 0x58, 0xc5, 0x82, 0x02, 0xae, + 0x50, 0x70, 0x5b, 0x68, 0xa5, 0xcc, 0x9e, 0xb1, 0x95, 0x35, 0x9e, 0x69, 0x5c, 0x86, 0x15, 0x34, + 0x14, 0xa9, 0x2b, 0x43, 0x00, 0x89, 0x2b, 0xb0, 0x72, 0x48, 0xe3, 0x48, 0x42, 0x31, 0xd2, 0xb8, + 0x0c, 0x2b, 0x68, 0xe8, 0xf2, 0xf6, 0xe3, 0xc0, 0x4f, 0xe2, 0x36, 0xe1, 0xa5, 0xaa, 0x11, 0xb8, + 0x84, 0x81, 0x31, 0x2e, 0xc0, 0x2a, 0x16, 0xe4, 0x01, 0xf4, 0x65, 0x40, 0x28, 0x71, 0xb5, 0x50, + 0x6e, 0xa6, 0x71, 0x5c, 0x29, 0xae, 0x24, 0xc5, 0xbf, 0xb1, 0x82, 0x02, 0x6d, 0x2b, 0x37, 0x4b, + 0x50, 0xc1, 0xe8, 0x7e, 0xa4, 0x5b, 0xa5, 0x77, 0xc6, 0xe6, 0xca, 0x06, 0xdb, 0xb7, 0x8f, 0x29, + 0xa6, 0xca, 0xfb, 0xfb, 0x8b, 0x33, 0x8c, 0x99, 0x64, 0x4c, 0x97, 0xb1, 0xbb, 0xd6, 0xcc, 0x28, + 0x77, 0x2d, 0x74, 0x8d, 0x2a, 0x59, 0x8a, 0xa7, 0x33, 0x63, 0x10, 0xb3, 0xac, 0x8b, 0x0c, 0x21, + 0xd6, 0x4d, 0x37, 0xc0, 0xd9, 0x3e, 0x5c, 0xba, 0x20, 0x16, 0xeb, 0x3f, 0xa7, 0x4a, 0x17, 0xbc, + 0x0c, 0xcb, 0x5a, 0x74, 0x17, 0x66, 0x02, 0xc5, 0x41, 0x4c, 0x24, 0xfe, 0xa9, 0x72, 0x19, 0x24, + 0xbc, 0xc3, 0x58, 0x5c, 0x1a, 0xb5, 0x04, 0x27, 0x10, 0xa1, 0x4f, 0xc0, 0x74, 0x64, 0xbc, 0x0e, + 0x16, 0x4e, 0x57, 0x78, 0x65, 0x94, 0x1f, 0x07, 0x2c, 0xb6, 0x46, 0x47, 0x55, 0x01, 0x8e, 0x11, + 0xa2, 0x9d, 0xe4, 0x1b, 0xdf, 0xf9, 0x07, 0xf3, 0xaa, 0x51, 0xba, 0xfd, 0x14, 0xbd, 0xef, 0x45, + 0x2d, 0x98, 0x27, 0xbb, 0x03, 0x2f, 0x18, 0xfa, 0x84, 0x85, 0x21, 0x64, 0x5f, 0x08, 0xc5, 0x37, + 0x37, 0x2b, 0xe9, 0x4a, 0x9c, 0x6d, 0x8f, 0x3e, 0xaf, 0xc1, 0x69, 0x9e, 0x39, 0x89, 0x1e, 0x67, + 0x9e, 0x4b, 0xdc, 0x30, 0x58, 0x38, 0x53, 0x21, 0x24, 0x67, 0x37, 0x05, 0x4c, 0x18, 0xb1, 0x53, + 0xa5, 0x38, 0x83, 0x54, 0xff, 0xd7, 0x1a, 0x80, 0x34, 0x54, 0x92, 0x13, 0xb0, 0xde, 0x92, 0x84, + 0xf5, 0xb6, 0x55, 0xcd, 0xb2, 0x4a, 0x0a, 0xdf, 0x09, 0xfe, 0x91, 0x06, 0x73, 0x71, 0xb3, 0x13, + 0x50, 0xb4, 0xac, 0xa4, 0xa2, 0xf5, 0xde, 0x8a, 0x13, 0x2b, 0xd0, 0xb6, 0xfe, 0x6f, 0x4d, 0x9d, + 0x16, 0x93, 0x79, 0xee, 0x2a, 0x77, 0x96, 0xfc, 0x96, 0xb4, 0x53, 0xe9, 0xce, 0x52, 0x7d, 0x7d, + 0x15, 0xcf, 0x38, 0xe7, 0x0e, 0xf3, 0x93, 0x09, 0x81, 0xa3, 0xca, 0x33, 0x43, 0x29, 0x5d, 0x44, + 0xb8, 0xf9, 0x12, 0x1c, 0x26, 0x7d, 0xf8, 0x2a, 0x03, 0xe2, 0x2f, 0x7f, 0x96, 0x4b, 0x3e, 0x6d, + 0x53, 0xa6, 0x3c, 0x92, 0xed, 0xe8, 0xbf, 0x31, 0x0b, 0x0d, 0xc5, 0xb0, 0xff, 0x63, 0xb9, 0xa5, + 0x1e, 0x42, 0xc3, 0xf4, 0xdc, 0x20, 0xf4, 0x0d, 0x25, 0x96, 0x4d, 0x55, 0xa4, 0x92, 0xf3, 0xb5, + 0x62, 0xd0, 0x58, 0xc5, 0x43, 0xcf, 0x69, 0x49, 0x68, 0x63, 0x0f, 0xe2, 0x72, 0x7c, 0x14, 0x71, + 0xbd, 0x03, 0x20, 0x92, 0xf9, 0x08, 0x4f, 0xfb, 0x52, 0x8f, 0x73, 0x10, 0x74, 0x82, 0xeb, 0xb2, + 0x0e, 0x2b, 0xed, 0xd0, 0x6b, 0x30, 0xeb, 0xa8, 0xd1, 0xc7, 0x85, 0x44, 0x5a, 0xce, 0xe1, 0x3c, + 0x11, 0xc7, 0x9c, 0x5b, 0x58, 0x13, 0x45, 0x38, 0x89, 0x0b, 0x6d, 0xc3, 0xb4, 0x13, 0x85, 0xcc, + 0x17, 0x62, 0xe9, 0x8b, 0xa5, 0x11, 0x33, 0x28, 0xdc, 0x97, 0x45, 0xfe, 0xc4, 0x31, 0x7c, 0x4a, + 0x77, 0xf2, 0x47, 0x35, 0x7f, 0x96, 0x18, 0x9b, 0xa4, 0x3b, 0x59, 0x14, 0x60, 0x05, 0x4b, 0x81, + 0xbf, 0x41, 0xbd, 0x94, 0xbf, 0xc1, 0x10, 0xce, 0xf8, 0x24, 0xf4, 0xf7, 0x5a, 0x7b, 0x26, 0xcb, + 0x7b, 0xe1, 0x87, 0x4c, 0x59, 0x9c, 0x2e, 0x17, 0x93, 0x02, 0x67, 0x41, 0xe1, 0x3c, 0xf8, 0xe8, + 0x22, 0x8c, 0x53, 0x19, 0x46, 0x84, 0x84, 0x63, 0x26, 0x1d, 0x2a, 0xe1, 0x60, 0x56, 0x8a, 0xde, + 0x09, 0x8d, 0x90, 0x98, 0x5b, 0xae, 0x6d, 0x1a, 0x4e, 0xa7, 0x2d, 0x04, 0xc4, 0x58, 0x24, 0x88, + 0xab, 0xb0, 0xda, 0x0e, 0x35, 0x61, 0x6c, 0x68, 0x5b, 0x42, 0x32, 0xfc, 0x69, 0x79, 0x11, 0xd7, + 0x69, 0xdf, 0xdf, 0x5f, 0x7c, 0x63, 0xfc, 0xe8, 0x59, 0xce, 0xe4, 0xca, 0x60, 0xbb, 0x77, 0x25, + 0xdc, 0x1b, 0x90, 0x60, 0x69, 0xbd, 0xd3, 0xc6, 0xb4, 0x73, 0x9e, 0xff, 0xc5, 0xec, 0x31, 0xfc, + 0x2f, 0xbe, 0xac, 0xc1, 0x19, 0x23, 0x7d, 0x87, 0x48, 0x82, 0x85, 0xb9, 0x0a, 0x5c, 0x39, 0xff, + 0x62, 0x32, 0x8e, 0x5f, 0xbb, 0x9c, 0xc5, 0x87, 0xf3, 0x06, 0x81, 0x7c, 0x40, 0x7d, 0xbb, 0x27, + 0x13, 0x09, 0x88, 0x4f, 0x7d, 0xaa, 0x9c, 0x5d, 0x60, 0x35, 0x03, 0x09, 0xe7, 0x40, 0x47, 0xbb, + 0xd0, 0x30, 0x63, 0x13, 0x09, 0x4b, 0x3c, 0x59, 0x5a, 0xb6, 0x4a, 0xd9, 0x5b, 0x44, 0xd8, 0x2a, + 0xc5, 0x00, 0xa3, 0xa2, 0x42, 0x5f, 0xd0, 0xe0, 0x02, 0xdd, 0x34, 0x8a, 0xfe, 0x7a, 0xc7, 0xb7, + 0x7b, 0x3d, 0xe2, 0xb3, 0x69, 0xcf, 0x1f, 0x7b, 0xda, 0x2c, 0x99, 0xe5, 0xcd, 0x42, 0x88, 0x78, + 0x04, 0x36, 0xfd, 0x2e, 0x64, 0x84, 0x40, 0x64, 0xc2, 0x14, 0x9d, 0x60, 0xfb, 0x56, 0x57, 0x88, + 0x41, 0xcf, 0x97, 0x3c, 0x3a, 0x18, 0x0c, 0x6e, 0x4c, 0x15, 0x3f, 0x70, 0x04, 0x59, 0xbf, 0x09, + 0x10, 0x8b, 0xd0, 0x95, 0xdd, 0x6c, 0xfe, 0xd3, 0x04, 0x9c, 0xab, 0xea, 0x56, 0xce, 0x52, 0x19, + 0xb0, 0xf4, 0xb6, 0xcb, 0x9b, 0x21, 0xf1, 0x6f, 0xdf, 0x5e, 0x95, 0xa9, 0x3f, 0x4b, 0xe6, 0x52, + 0x88, 0x13, 0x24, 0x67, 0x20, 0xe2, 0x02, 0x4c, 0x4c, 0x7d, 0x10, 0x49, 0x04, 0x31, 0x95, 0x71, + 0x86, 0x7e, 0x10, 0x8a, 0x87, 0xda, 0x5c, 0x7d, 0x48, 0x57, 0xe2, 0x6c, 0xfb, 0x34, 0x10, 0x9e, + 0x6a, 0x97, 0x9e, 0x91, 0x5a, 0x16, 0x08, 0xcf, 0xb7, 0x9b, 0x6d, 0xaf, 0x02, 0xe1, 0x5f, 0xca, + 0x35, 0x79, 0x44, 0xf8, 0x14, 0x10, 0x59, 0x89, 0xb3, 0xed, 0x91, 0x05, 0x17, 0x7d, 0x62, 0x7a, + 0xfd, 0x3e, 0x71, 0x2d, 0x9e, 0x06, 0xc7, 0xf0, 0x7b, 0xb6, 0x7b, 0xd5, 0x37, 0x58, 0x43, 0x76, + 0x0c, 0x6a, 0xcd, 0xc7, 0x0f, 0xf6, 0x17, 0x2f, 0xe2, 0x11, 0xed, 0xf0, 0x48, 0x28, 0xa8, 0x0f, + 0xa7, 0x86, 0x2c, 0x44, 0xb7, 0xdf, 0x71, 0x43, 0xe2, 0xef, 0x18, 0x4e, 0xc9, 0x1c, 0xd2, 0x8c, + 0x99, 0xae, 0x27, 0x41, 0xe1, 0x34, 0x6c, 0xb4, 0x47, 0xcf, 0x26, 0x31, 0x1c, 0x05, 0x65, 0xbd, + 0x7c, 0xb2, 0x0f, 0x9c, 0x05, 0x87, 0xf3, 0x70, 0xe8, 0x7f, 0x4f, 0x03, 0xe1, 0xe8, 0x49, 0x8f, + 0x2a, 0xe5, 0x0a, 0xa5, 0x9e, 0xba, 0x3e, 0xb9, 0x28, 0x1e, 0xb3, 0xd5, 0xe2, 0x5a, 0xe5, 0x21, + 0xdb, 0x9b, 0x95, 0x08, 0x00, 0xd3, 0xf1, 0xb9, 0xce, 0x21, 0x2b, 0x61, 0xee, 0xff, 0x1a, 0x4c, + 0x0d, 0x7c, 0xbb, 0x6f, 0xf8, 0x7b, 0x42, 0xc4, 0x9a, 0xe5, 0xe1, 0x0c, 0xd9, 0x3d, 0x27, 0xdd, + 0x3b, 0xa2, 0x56, 0xff, 0xbe, 0x06, 0xa2, 0x37, 0xcb, 0xad, 0x70, 0xa4, 0xc0, 0xfc, 0x87, 0xba, + 0x7b, 0x29, 0xa9, 0x01, 0xc6, 0x8a, 0x52, 0x03, 0x3c, 0xac, 0x38, 0xfb, 0xdf, 0xd1, 0xe0, 0x54, + 0x32, 0x1c, 0x43, 0x80, 0x9e, 0x84, 0x29, 0x11, 0x32, 0x49, 0x04, 0x5d, 0xe1, 0x6f, 0x51, 0x79, + 0x11, 0x8e, 0xea, 0x92, 0x76, 0x8f, 0x2a, 0x6a, 0x4f, 0x7e, 0x58, 0x88, 0x43, 0x14, 0x90, 0xfd, + 0x39, 0x98, 0xe4, 0x31, 0x7e, 0xd0, 0x2f, 0xe4, 0x3e, 0x90, 0xba, 0x59, 0x21, 0x8c, 0x50, 0x89, + 0x77, 0x50, 0x89, 0x10, 0xd0, 0xb5, 0x91, 0x21, 0xa0, 0xbb, 0x3c, 0xf5, 0x47, 0x15, 0xb3, 0x77, + 0x0b, 0x77, 0x44, 0x7a, 0x4b, 0x91, 0xf6, 0x03, 0x0d, 0x13, 0xd6, 0xe0, 0xf1, 0x0a, 0xe7, 0x3c, + 0x5f, 0x02, 0xc5, 0x26, 0x3c, 0x37, 0xc2, 0x1e, 0x1c, 0xc7, 0x54, 0x99, 0xa8, 0xe0, 0x83, 0x29, + 0x56, 0xfd, 0x08, 0x31, 0x55, 0xe4, 0x6e, 0x9a, 0x2c, 0xdc, 0x4d, 0x3d, 0x98, 0x12, 0xfb, 0x41, + 0x70, 0xc7, 0xe7, 0xab, 0x24, 0xf6, 0x50, 0x62, 0xf1, 0xf1, 0x02, 0x1c, 0x41, 0xa7, 0x67, 0x6e, + 0xdf, 0xd8, 0xb5, 0xfb, 0xc3, 0x3e, 0xe3, 0x89, 0x13, 0x6a, 0x53, 0x56, 0x8c, 0xa3, 0x7a, 0xd6, + 0x94, 0x3b, 0xaf, 0x32, 0xd1, 0x5e, 0x6d, 0x2a, 0x32, 0x34, 0x47, 0xf5, 0xe8, 0x43, 0x50, 0xef, + 0x1b, 0xbb, 0xdd, 0xa1, 0xdf, 0x23, 0xc2, 0x0c, 0x5c, 0x6c, 0x7a, 0x1a, 0x86, 0xb6, 0xb3, 0x44, + 0x95, 0xd2, 0xd0, 0x5f, 0xea, 0xb8, 0xe1, 0x6d, 0xbf, 0x1b, 0xfa, 0x32, 0xdb, 0xc0, 0xaa, 0x80, + 0x82, 0x25, 0x3c, 0xe4, 0xc0, 0x5c, 0xdf, 0xd8, 0x5d, 0x77, 0x0d, 0x99, 0x48, 0xb6, 0x51, 0x12, + 0x03, 0xbb, 0x6f, 0x5e, 0x4d, 0xc0, 0xc2, 0x29, 0xd8, 0x39, 0x57, 0xdb, 0x33, 0x0f, 0xeb, 0x6a, + 0x7b, 0x59, 0x3e, 0x69, 0x98, 0x65, 0x64, 0xf8, 0x68, 0x9e, 0x97, 0xeb, 0xe8, 0xd7, 0x0a, 0x1f, + 0x95, 0xaf, 0x15, 0xe6, 0x2a, 0xdc, 0x99, 0x8d, 0x78, 0xa9, 0xb0, 0x03, 0x0d, 0xcb, 0x08, 0x0d, + 0x5e, 0x1a, 0x2c, 0x9c, 0xaa, 0x60, 0x1f, 0x6b, 0x4b, 0x38, 0x4a, 0xee, 0xb5, 0x18, 0x36, 0x56, + 0x11, 0xa1, 0xdb, 0x3c, 0xd1, 0xa8, 0x43, 0xc2, 0xb8, 0x09, 0xb3, 0xd6, 0x9e, 0xe6, 0xf6, 0xf8, + 0x28, 0x2d, 0x68, 0xa6, 0x01, 0xce, 0xef, 0x47, 0xc5, 0x54, 0x1e, 0x84, 0x60, 0x3e, 0x8e, 0x02, + 0x9a, 0x08, 0xb4, 0xf4, 0x37, 0xf3, 0xcc, 0xba, 0xa8, 0xc2, 0xb3, 0x2d, 0xce, 0x1f, 0xca, 0x1a, + 0x77, 0xd1, 0x3f, 0xd2, 0x60, 0xa1, 0x5f, 0x90, 0xda, 0x4c, 0x98, 0x9b, 0xd7, 0xab, 0xf0, 0x88, + 0xc2, 0x7c, 0x69, 0xcd, 0x27, 0x0e, 0xf6, 0x17, 0x0f, 0xcd, 0xaa, 0x86, 0x0b, 0x07, 0x57, 0xf5, + 0x71, 0x6d, 0x95, 0x08, 0x54, 0xbf, 0xae, 0xc1, 0xe9, 0xf4, 0x51, 0xa0, 0xa6, 0x46, 0xd5, 0x1e, + 0x72, 0x6a, 0x54, 0xc5, 0x5b, 0xa5, 0x36, 0xc2, 0x5b, 0xe5, 0x05, 0x38, 0x9f, 0x4f, 0x1d, 0x54, + 0x38, 0x63, 0x09, 0x89, 0x85, 0x42, 0x14, 0x27, 0xd7, 0xa0, 0x85, 0x98, 0xd7, 0x35, 0x97, 0xbe, + 0xfb, 0xa3, 0xcb, 0x6f, 0xf8, 0xc3, 0x1f, 0x5d, 0x7e, 0xc3, 0x0f, 0x7e, 0x74, 0xf9, 0x0d, 0x9f, + 0x3a, 0xb8, 0xac, 0x7d, 0xf7, 0xe0, 0xb2, 0xf6, 0x87, 0x07, 0x97, 0xb5, 0x1f, 0x1c, 0x5c, 0xd6, + 0xfe, 0xdd, 0xc1, 0x65, 0xed, 0x6f, 0xff, 0xfb, 0xcb, 0x6f, 0xf8, 0x50, 0x3d, 0x1a, 0xf9, 0xff, + 0x0b, 0x00, 0x00, 0xff, 0xff, 0xa6, 0x95, 0x99, 0xeb, 0x02, 0xd0, 0x00, 0x00, } func (m *Addon) Marshal() (dAtA []byte, err error) { @@ -12730,6 +12829,42 @@ func (m *ShootCredentialsRotation) MarshalToSizedBuffer(dAtA []byte) (int, error _ = i var l int _ = l + if m.ETCDEncryptionKey != nil { + { + size, err := m.ETCDEncryptionKey.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 + } + if m.ServiceAccountKey != nil { + { + size, err := m.ServiceAccountKey.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } + if m.Observability != nil { + { + size, err := m.Observability.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } if m.SSHKeypair != nil { { size, err := m.SSHKeypair.MarshalToSizedBuffer(dAtA[:i]) @@ -12769,6 +12904,58 @@ func (m *ShootCredentialsRotation) MarshalToSizedBuffer(dAtA []byte) (int, error return len(dAtA) - i, nil } +func (m *ShootETCDEncryptionKeyRotation) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ShootETCDEncryptionKeyRotation) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ShootETCDEncryptionKeyRotation) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.LastInitiationTime != nil { + { + size, err := m.LastInitiationTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if m.LastCompletionTime != nil { + { + size, err := m.LastCompletionTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + i -= len(m.Phase) + copy(dAtA[i:], m.Phase) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Phase))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + func (m *ShootKubeconfigRotation) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -12947,6 +13134,53 @@ func (m *ShootNetworks) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *ShootObservabilityRotation) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ShootObservabilityRotation) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ShootObservabilityRotation) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.LastCompletionTime != nil { + { + size, err := m.LastCompletionTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if m.LastInitiationTime != nil { + { + size, err := m.LastInitiationTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func (m *ShootSSHKeypairRotation) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -12994,6 +13228,58 @@ func (m *ShootSSHKeypairRotation) MarshalToSizedBuffer(dAtA []byte) (int, error) return len(dAtA) - i, nil } +func (m *ShootServiceAccountKeyRotation) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ShootServiceAccountKeyRotation) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ShootServiceAccountKeyRotation) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.LastInitiationTime != nil { + { + size, err := m.LastInitiationTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if m.LastCompletionTime != nil { + { + size, err := m.LastCompletionTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + i -= len(m.Phase) + copy(dAtA[i:], m.Phase) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Phase))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + func (m *ShootSpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -13392,6 +13678,20 @@ func (m *ShootStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.LastHibernationTriggerTime != nil { + { + size, err := m.LastHibernationTriggerTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x8a + } if m.Credentials != nil { { size, err := m.Credentials.MarshalToSizedBuffer(dAtA[:i]) @@ -16967,6 +17267,37 @@ func (m *ShootCredentialsRotation) Size() (n int) { l = m.SSHKeypair.Size() n += 1 + l + sovGenerated(uint64(l)) } + if m.Observability != nil { + l = m.Observability.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.ServiceAccountKey != nil { + l = m.ServiceAccountKey.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.ETCDEncryptionKey != nil { + l = m.ETCDEncryptionKey.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *ShootETCDEncryptionKeyRotation) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Phase) + n += 1 + l + sovGenerated(uint64(l)) + if m.LastCompletionTime != nil { + l = m.LastCompletionTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.LastInitiationTime != nil { + l = m.LastInitiationTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + } return n } @@ -17040,6 +17371,23 @@ func (m *ShootNetworks) Size() (n int) { return n } +func (m *ShootObservabilityRotation) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.LastInitiationTime != nil { + l = m.LastInitiationTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.LastCompletionTime != nil { + l = m.LastCompletionTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + func (m *ShootSSHKeypairRotation) Size() (n int) { if m == nil { return 0 @@ -17057,6 +17405,25 @@ func (m *ShootSSHKeypairRotation) Size() (n int) { return n } +func (m *ShootServiceAccountKeyRotation) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Phase) + n += 1 + l + sovGenerated(uint64(l)) + if m.LastCompletionTime != nil { + l = m.LastCompletionTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.LastInitiationTime != nil { + l = m.LastInitiationTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + func (m *ShootSpec) Size() (n int) { if m == nil { return 0 @@ -17259,6 +17626,10 @@ func (m *ShootStatus) Size() (n int) { l = m.Credentials.Size() n += 2 + l + sovGenerated(uint64(l)) } + if m.LastHibernationTriggerTime != nil { + l = m.LastHibernationTriggerTime.Size() + n += 2 + l + sovGenerated(uint64(l)) + } return n } @@ -19468,6 +19839,21 @@ func (this *ShootCredentialsRotation) String() string { `CertificateAuthorities:` + strings.Replace(this.CertificateAuthorities.String(), "ShootCARotation", "ShootCARotation", 1) + `,`, `Kubeconfig:` + strings.Replace(this.Kubeconfig.String(), "ShootKubeconfigRotation", "ShootKubeconfigRotation", 1) + `,`, `SSHKeypair:` + strings.Replace(this.SSHKeypair.String(), "ShootSSHKeypairRotation", "ShootSSHKeypairRotation", 1) + `,`, + `Observability:` + strings.Replace(this.Observability.String(), "ShootObservabilityRotation", "ShootObservabilityRotation", 1) + `,`, + `ServiceAccountKey:` + strings.Replace(this.ServiceAccountKey.String(), "ShootServiceAccountKeyRotation", "ShootServiceAccountKeyRotation", 1) + `,`, + `ETCDEncryptionKey:` + strings.Replace(this.ETCDEncryptionKey.String(), "ShootETCDEncryptionKeyRotation", "ShootETCDEncryptionKeyRotation", 1) + `,`, + `}`, + }, "") + return s +} +func (this *ShootETCDEncryptionKeyRotation) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ShootETCDEncryptionKeyRotation{`, + `Phase:` + fmt.Sprintf("%v", this.Phase) + `,`, + `LastCompletionTime:` + strings.Replace(fmt.Sprintf("%v", this.LastCompletionTime), "Time", "v11.Time", 1) + `,`, + `LastInitiationTime:` + strings.Replace(fmt.Sprintf("%v", this.LastInitiationTime), "Time", "v11.Time", 1) + `,`, `}`, }, "") return s @@ -19522,6 +19908,17 @@ func (this *ShootNetworks) String() string { }, "") return s } +func (this *ShootObservabilityRotation) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ShootObservabilityRotation{`, + `LastInitiationTime:` + strings.Replace(fmt.Sprintf("%v", this.LastInitiationTime), "Time", "v11.Time", 1) + `,`, + `LastCompletionTime:` + strings.Replace(fmt.Sprintf("%v", this.LastCompletionTime), "Time", "v11.Time", 1) + `,`, + `}`, + }, "") + return s +} func (this *ShootSSHKeypairRotation) String() string { if this == nil { return "nil" @@ -19533,6 +19930,18 @@ func (this *ShootSSHKeypairRotation) String() string { }, "") return s } +func (this *ShootServiceAccountKeyRotation) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ShootServiceAccountKeyRotation{`, + `Phase:` + fmt.Sprintf("%v", this.Phase) + `,`, + `LastCompletionTime:` + strings.Replace(fmt.Sprintf("%v", this.LastCompletionTime), "Time", "v11.Time", 1) + `,`, + `LastInitiationTime:` + strings.Replace(fmt.Sprintf("%v", this.LastInitiationTime), "Time", "v11.Time", 1) + `,`, + `}`, + }, "") + return s +} func (this *ShootSpec) String() string { if this == nil { return "nil" @@ -19671,6 +20080,7 @@ func (this *ShootStatus) String() string { `AdvertisedAddresses:` + repeatedStringForAdvertisedAddresses + `,`, `MigrationStartTime:` + strings.Replace(fmt.Sprintf("%v", this.MigrationStartTime), "Time", "v11.Time", 1) + `,`, `Credentials:` + strings.Replace(this.Credentials.String(), "ShootCredentials", "ShootCredentials", 1) + `,`, + `LastHibernationTriggerTime:` + strings.Replace(fmt.Sprintf("%v", this.LastHibernationTriggerTime), "Time", "v11.Time", 1) + `,`, `}`, }, "") return s @@ -41185,13 +41595,591 @@ func (m *Shoot) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ShootAdvertisedAddress) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ShootAdvertisedAddress: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ShootAdvertisedAddress: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field URL", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.URL = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ShootCARotation) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ShootCARotation: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ShootCARotation: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Phase", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Phase = ShootCredentialsRotationPhase(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LastCompletionTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.LastCompletionTime == nil { + m.LastCompletionTime = &v11.Time{} + } + if err := m.LastCompletionTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LastInitiationTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.LastInitiationTime == nil { + m.LastInitiationTime = &v11.Time{} + } + if err := m.LastInitiationTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ShootCredentials) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ShootCredentials: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ShootCredentials: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Rotation", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Rotation == nil { + m.Rotation = &ShootCredentialsRotation{} + } + if err := m.Rotation.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ShootCredentialsRotation) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ShootCredentialsRotation: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ShootCredentialsRotation: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CertificateAuthorities", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.CertificateAuthorities == nil { + m.CertificateAuthorities = &ShootCARotation{} + } + if err := m.CertificateAuthorities.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Kubeconfig", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Kubeconfig == nil { + m.Kubeconfig = &ShootKubeconfigRotation{} + } + if err := m.Kubeconfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SSHKeypair", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.SSHKeypair == nil { + m.SSHKeypair = &ShootSSHKeypairRotation{} + } + if err := m.SSHKeypair.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 2: + case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Observability", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -41218,13 +42206,16 @@ func (m *Shoot) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if m.Observability == nil { + m.Observability = &ShootObservabilityRotation{} + } + if err := m.Observability.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 3: + case 5: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ServiceAccountKey", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -41251,65 +42242,18 @@ func (m *Shoot) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err + if m.ServiceAccountKey == nil { + m.ServiceAccountKey = &ShootServiceAccountKeyRotation{} } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { + if err := m.ServiceAccountKey.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ShootAdvertisedAddress) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ShootAdvertisedAddress: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ShootAdvertisedAddress: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + iNdEx = postIndex + case 6: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ETCDEncryptionKey", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -41319,55 +42263,27 @@ func (m *ShootAdvertisedAddress) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field URL", wireType) + if m.ETCDEncryptionKey == nil { + m.ETCDEncryptionKey = &ShootETCDEncryptionKeyRotation{} } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF + if err := m.ETCDEncryptionKey.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } - m.URL = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -41390,7 +42306,7 @@ func (m *ShootAdvertisedAddress) Unmarshal(dAtA []byte) error { } return nil } -func (m *ShootCARotation) Unmarshal(dAtA []byte) error { +func (m *ShootETCDEncryptionKeyRotation) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -41413,10 +42329,10 @@ func (m *ShootCARotation) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ShootCARotation: wiretype end group for non-group") + return fmt.Errorf("proto: ShootETCDEncryptionKeyRotation: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ShootCARotation: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ShootETCDEncryptionKeyRotation: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -41544,7 +42460,7 @@ func (m *ShootCARotation) Unmarshal(dAtA []byte) error { } return nil } -func (m *ShootCredentials) Unmarshal(dAtA []byte) error { +func (m *ShootKubeconfigRotation) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -41567,15 +42483,15 @@ func (m *ShootCredentials) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ShootCredentials: wiretype end group for non-group") + return fmt.Errorf("proto: ShootKubeconfigRotation: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ShootCredentials: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ShootKubeconfigRotation: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Rotation", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field LastInitiationTime", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -41602,10 +42518,46 @@ func (m *ShootCredentials) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.Rotation == nil { - m.Rotation = &ShootCredentialsRotation{} + if m.LastInitiationTime == nil { + m.LastInitiationTime = &v11.Time{} } - if err := m.Rotation.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.LastInitiationTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LastCompletionTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.LastCompletionTime == nil { + m.LastCompletionTime = &v11.Time{} + } + if err := m.LastCompletionTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -41630,7 +42582,7 @@ func (m *ShootCredentials) Unmarshal(dAtA []byte) error { } return nil } -func (m *ShootCredentialsRotation) Unmarshal(dAtA []byte) error { +func (m *ShootList) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -41653,15 +42605,15 @@ func (m *ShootCredentialsRotation) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ShootCredentialsRotation: wiretype end group for non-group") + return fmt.Errorf("proto: ShootList: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ShootCredentialsRotation: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ShootList: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CertificateAuthorities", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -41688,52 +42640,13 @@ func (m *ShootCredentialsRotation) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.CertificateAuthorities == nil { - m.CertificateAuthorities = &ShootCARotation{} - } - if err := m.CertificateAuthorities.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Kubeconfig", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Kubeconfig == nil { - m.Kubeconfig = &ShootKubeconfigRotation{} - } - if err := m.Kubeconfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SSHKeypair", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -41760,10 +42673,8 @@ func (m *ShootCredentialsRotation) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.SSHKeypair == nil { - m.SSHKeypair = &ShootSSHKeypairRotation{} - } - if err := m.SSHKeypair.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.Items = append(m.Items, Shoot{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -41788,7 +42699,7 @@ func (m *ShootCredentialsRotation) Unmarshal(dAtA []byte) error { } return nil } -func (m *ShootKubeconfigRotation) Unmarshal(dAtA []byte) error { +func (m *ShootMachineImage) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -41811,15 +42722,47 @@ func (m *ShootKubeconfigRotation) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ShootKubeconfigRotation: wiretype end group for non-group") + return fmt.Errorf("proto: ShootMachineImage: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ShootKubeconfigRotation: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ShootMachineImage: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LastInitiationTime", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ProviderConfig", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -41846,18 +42789,18 @@ func (m *ShootKubeconfigRotation) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.LastInitiationTime == nil { - m.LastInitiationTime = &v11.Time{} + if m.ProviderConfig == nil { + m.ProviderConfig = &runtime.RawExtension{} } - if err := m.LastInitiationTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.ProviderConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 2: + case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LastCompletionTime", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -41867,27 +42810,24 @@ func (m *ShootKubeconfigRotation) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - if m.LastCompletionTime == nil { - m.LastCompletionTime = &v11.Time{} - } - if err := m.LastCompletionTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + s := string(dAtA[iNdEx:postIndex]) + m.Version = &s iNdEx = postIndex default: iNdEx = preIndex @@ -41910,7 +42850,7 @@ func (m *ShootKubeconfigRotation) Unmarshal(dAtA []byte) error { } return nil } -func (m *ShootList) Unmarshal(dAtA []byte) error { +func (m *ShootNetworks) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -41933,17 +42873,17 @@ func (m *ShootList) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ShootList: wiretype end group for non-group") + return fmt.Errorf("proto: ShootNetworks: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ShootList: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ShootNetworks: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Pods", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -41953,30 +42893,30 @@ func (m *ShootList) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + s := string(dAtA[iNdEx:postIndex]) + m.Pods = &s iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Services", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -41986,25 +42926,24 @@ func (m *ShootList) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - m.Items = append(m.Items, Shoot{}) - if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + s := string(dAtA[iNdEx:postIndex]) + m.Services = &s iNdEx = postIndex default: iNdEx = preIndex @@ -42027,7 +42966,7 @@ func (m *ShootList) Unmarshal(dAtA []byte) error { } return nil } -func (m *ShootMachineImage) Unmarshal(dAtA []byte) error { +func (m *ShootObservabilityRotation) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -42050,17 +42989,17 @@ func (m *ShootMachineImage) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ShootMachineImage: wiretype end group for non-group") + return fmt.Errorf("proto: ShootObservabilityRotation: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ShootMachineImage: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ShootObservabilityRotation: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field LastInitiationTime", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -42070,27 +43009,31 @@ func (m *ShootMachineImage) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - m.Name = string(dAtA[iNdEx:postIndex]) + if m.LastInitiationTime == nil { + m.LastInitiationTime = &v11.Time{} + } + if err := m.LastInitiationTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ProviderConfig", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field LastCompletionTime", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -42117,46 +43060,13 @@ func (m *ShootMachineImage) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.ProviderConfig == nil { - m.ProviderConfig = &runtime.RawExtension{} + if m.LastCompletionTime == nil { + m.LastCompletionTime = &v11.Time{} } - if err := m.ProviderConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.LastCompletionTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - s := string(dAtA[iNdEx:postIndex]) - m.Version = &s - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -42178,7 +43088,7 @@ func (m *ShootMachineImage) Unmarshal(dAtA []byte) error { } return nil } -func (m *ShootNetworks) Unmarshal(dAtA []byte) error { +func (m *ShootSSHKeypairRotation) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -42201,17 +43111,17 @@ func (m *ShootNetworks) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ShootNetworks: wiretype end group for non-group") + return fmt.Errorf("proto: ShootSSHKeypairRotation: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ShootNetworks: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ShootSSHKeypairRotation: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pods", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field LastInitiationTime", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -42221,30 +43131,33 @@ func (m *ShootNetworks) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - s := string(dAtA[iNdEx:postIndex]) - m.Pods = &s + if m.LastInitiationTime == nil { + m.LastInitiationTime = &v11.Time{} + } + if err := m.LastInitiationTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Services", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field LastCompletionTime", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -42254,24 +43167,27 @@ func (m *ShootNetworks) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - s := string(dAtA[iNdEx:postIndex]) - m.Services = &s + if m.LastCompletionTime == nil { + m.LastCompletionTime = &v11.Time{} + } + if err := m.LastCompletionTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex default: iNdEx = preIndex @@ -42294,7 +43210,7 @@ func (m *ShootNetworks) Unmarshal(dAtA []byte) error { } return nil } -func (m *ShootSSHKeypairRotation) Unmarshal(dAtA []byte) error { +func (m *ShootServiceAccountKeyRotation) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -42317,15 +43233,47 @@ func (m *ShootSSHKeypairRotation) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ShootSSHKeypairRotation: wiretype end group for non-group") + return fmt.Errorf("proto: ShootServiceAccountKeyRotation: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ShootSSHKeypairRotation: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ShootServiceAccountKeyRotation: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LastInitiationTime", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Phase", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Phase = ShootCredentialsRotationPhase(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LastCompletionTime", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -42352,16 +43300,16 @@ func (m *ShootSSHKeypairRotation) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.LastInitiationTime == nil { - m.LastInitiationTime = &v11.Time{} + if m.LastCompletionTime == nil { + m.LastCompletionTime = &v11.Time{} } - if err := m.LastInitiationTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.LastCompletionTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 2: + case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LastCompletionTime", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field LastInitiationTime", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -42388,10 +43336,10 @@ func (m *ShootSSHKeypairRotation) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.LastCompletionTime == nil { - m.LastCompletionTime = &v11.Time{} + if m.LastInitiationTime == nil { + m.LastInitiationTime = &v11.Time{} } - if err := m.LastCompletionTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.LastInitiationTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -44046,6 +44994,42 @@ func (m *ShootStatus) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 17: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LastHibernationTriggerTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.LastHibernationTriggerTime == nil { + m.LastHibernationTriggerTime = &v11.Time{} + } + if err := m.LastHibernationTriggerTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/generated.proto b/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/generated.proto index df8363af5..a72f32796 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/generated.proto +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/generated.proto @@ -2020,6 +2020,7 @@ message SeedSettings { optional SeedSettingScheduling scheduling = 2; // ShootDNS controls the shoot DNS settings for the seed. + // Deprecated: This field is deprecated and will be removed in a future version of Gardener. Do not use it. // +optional optional SeedSettingShootDNS shootDNS = 3; @@ -2158,6 +2159,7 @@ message ServiceAccountConfig { // SigningKeySecret is a reference to a secret that contains an optional private key of the // service account token issuer. The issuer will sign issued ID tokens with this private key. // Only useful if service account tokens are also issued by another external system. + // Deprecated: This field is deprecated and will be removed in a future version of Gardener. Do not use it. // +optional optional k8s.io.api.core.v1.LocalObjectReference signingKeySecretName = 2; @@ -2244,6 +2246,33 @@ message ShootCredentialsRotation { // SSHKeypair contains information about the ssh-keypair credential rotation. // +optional optional ShootSSHKeypairRotation sshKeypair = 3; + + // Observability contains information about the observability credential rotation. + // +optional + optional ShootObservabilityRotation observability = 4; + + // ServiceAccountKey contains information about the service account key credential rotation. + // +optional + optional ShootServiceAccountKeyRotation serviceAccountKey = 5; + + // ETCDEncryptionKey contains information about the ETCD encryption key credential rotation. + // +optional + optional ShootETCDEncryptionKeyRotation etcdEncryptionKey = 6; +} + +// ShootETCDEncryptionKeyRotation contains information about the ETCD encryption key credential rotation. +message ShootETCDEncryptionKeyRotation { + // Phase describes the phase of the ETCD encryption key credential rotation. + optional string phase = 1; + + // LastInitiationTime is the most recent time when the ETCD encryption key credential rotation was initiated. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastInitiationTime = 3; + + // LastCompletionTime is the most recent time when the ETCD encryption key credential rotation was successfully + // completed. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastCompletionTime = 2; } // ShootKubeconfigRotation contains information about the kubeconfig credential rotation. @@ -2294,6 +2323,17 @@ message ShootNetworks { optional string services = 2; } +// ShootObservabilityRotation contains information about the observability credential rotation. +message ShootObservabilityRotation { + // LastInitiationTime is the most recent time when the observability credential rotation was initiated. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastInitiationTime = 1; + + // LastCompletionTime is the most recent time when the observability credential rotation was successfully completed. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastCompletionTime = 2; +} + // ShootSSHKeypairRotation contains information about the ssh-keypair credential rotation. message ShootSSHKeypairRotation { // LastInitiationTime is the most recent time when the certificate authority credential rotation was initiated. @@ -2305,6 +2345,21 @@ message ShootSSHKeypairRotation { optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastCompletionTime = 2; } +// ShootServiceAccountKeyRotation contains information about the service account key credential rotation. +message ShootServiceAccountKeyRotation { + // Phase describes the phase of the service account key credential rotation. + optional string phase = 1; + + // LastInitiationTime is the most recent time when the service account key credential rotation was initiated. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastInitiationTime = 3; + + // LastCompletionTime is the most recent time when the service account key credential rotation was successfully + // completed. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastCompletionTime = 2; +} + // ShootSpec is the specification of a Shoot. message ShootSpec { // Addons contains information about enabled/disabled addons and their configuration. @@ -2495,6 +2550,11 @@ message ShootStatus { // Credentials contains information about the shoot credentials. // +optional optional ShootCredentials credentials = 16; + + // LastHibernationTriggerTime indicates the last time when the hibernation controller + // managed to change the hibernation settings of the cluster + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastHibernationTriggerTime = 17; } // SystemComponents contains the settings of system components in the control or data plane of the Shoot cluster. diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/types_common.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/types_common.go index 592a4e9d2..20caec4b1 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/types_common.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/types_common.go @@ -45,6 +45,10 @@ const ( ErrorConfigurationProblem ErrorCode = "ERR_CONFIGURATION_PROBLEM" // ErrorRetryableConfigurationProblem indicates that the last error occurred due to a retryable configuration problem. ErrorRetryableConfigurationProblem ErrorCode = "ERR_RETRYABLE_CONFIGURATION_PROBLEM" + // ErrorProblematicWebhook indicates that the last error occurred due to a webhook not following the Kubernetes + // best practices (https://kubernetes.io/docs/reference/access-authn-authz/extensible-admission-controllers/#best-practices-and-warnings). + // It is classified as a non-retryable error code. + ErrorProblematicWebhook ErrorCode = "ERR_PROBLEMATIC_WEBHOOK" ) // LastError indicates the last occurred error for an operation on a resource. diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/types_project.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/types_project.go index 0a5d75bd0..df2526ab6 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/types_project.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/types_project.go @@ -150,6 +150,8 @@ const ( ProjectMemberViewer = "viewer" // ProjectMemberUserAccessManager is a const for a role that provides permissions to manage human user(s, (groups)). ProjectMemberUserAccessManager = "uam" + // ProjectMemberServiceAccountManager is a const for a role that provides permissions to manage service accounts and request tokens for them. + ProjectMemberServiceAccountManager = "serviceaccountmanager" // ProjectMemberExtensionPrefix is a prefix for custom roles that are not known by Gardener. ProjectMemberExtensionPrefix = "extension:" ) diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/types_seed.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/types_seed.go index cee75c865..b602643ab 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/types_seed.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/types_seed.go @@ -213,6 +213,7 @@ type SeedSettings struct { // +optional Scheduling *SeedSettingScheduling `json:"scheduling,omitempty" protobuf:"bytes,2,opt,name=scheduling"` // ShootDNS controls the shoot DNS settings for the seed. + // Deprecated: This field is deprecated and will be removed in a future version of Gardener. Do not use it. // +optional ShootDNS *SeedSettingShootDNS `json:"shootDNS,omitempty" protobuf:"bytes,3,opt,name=shootDNS"` // LoadBalancerServices controls certain settings for services of type load balancer that are created in the seed. diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/types_shoot.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/types_shoot.go index 30f9b6d40..37b7bc822 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/types_shoot.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/types_shoot.go @@ -176,6 +176,10 @@ type ShootStatus struct { // Credentials contains information about the shoot credentials. // +optional Credentials *ShootCredentials `json:"credentials,omitempty" protobuf:"bytes,16,opt,name=credentials"` + // LastHibernationTriggerTime indicates the last time when the hibernation controller + // managed to change the hibernation settings of the cluster + // +optional + LastHibernationTriggerTime *metav1.Time `json:"lastHibernationTriggerTime,omitempty" protobuf:"bytes,17,opt,name=lastHibernationTriggerTime"` } // ShootCredentials contains information about the shoot credentials. @@ -196,6 +200,15 @@ type ShootCredentialsRotation struct { // SSHKeypair contains information about the ssh-keypair credential rotation. // +optional SSHKeypair *ShootSSHKeypairRotation `json:"sshKeypair,omitempty" protobuf:"bytes,3,opt,name=sshKeypair"` + // Observability contains information about the observability credential rotation. + // +optional + Observability *ShootObservabilityRotation `json:"observability,omitempty" protobuf:"bytes,4,opt,name=observability"` + // ServiceAccountKey contains information about the service account key credential rotation. + // +optional + ServiceAccountKey *ShootServiceAccountKeyRotation `json:"serviceAccountKey,omitempty" protobuf:"bytes,5,opt,name=serviceAccountKey"` + // ETCDEncryptionKey contains information about the ETCD encryption key credential rotation. + // +optional + ETCDEncryptionKey *ShootETCDEncryptionKeyRotation `json:"etcdEncryptionKey,omitempty" protobuf:"bytes,6,opt,name=etcdEncryptionKey"` } // ShootCARotation contains information about the certificate authority credential rotation. @@ -231,6 +244,42 @@ type ShootSSHKeypairRotation struct { LastCompletionTime *metav1.Time `json:"lastCompletionTime,omitempty" protobuf:"bytes,2,opt,name=lastCompletionTime"` } +// ShootObservabilityRotation contains information about the observability credential rotation. +type ShootObservabilityRotation struct { + // LastInitiationTime is the most recent time when the observability credential rotation was initiated. + // +optional + LastInitiationTime *metav1.Time `json:"lastInitiationTime,omitempty" protobuf:"bytes,1,opt,name=lastInitiationTime"` + // LastCompletionTime is the most recent time when the observability credential rotation was successfully completed. + // +optional + LastCompletionTime *metav1.Time `json:"lastCompletionTime,omitempty" protobuf:"bytes,2,opt,name=lastCompletionTime"` +} + +// ShootServiceAccountKeyRotation contains information about the service account key credential rotation. +type ShootServiceAccountKeyRotation struct { + // Phase describes the phase of the service account key credential rotation. + Phase ShootCredentialsRotationPhase `json:"phase" protobuf:"bytes,1,opt,name=phase"` + // LastInitiationTime is the most recent time when the service account key credential rotation was initiated. + // +optional + LastInitiationTime *metav1.Time `json:"lastInitiationTime,omitempty" protobuf:"bytes,3,opt,name=lastInitiationTime"` + // LastCompletionTime is the most recent time when the service account key credential rotation was successfully + // completed. + // +optional + LastCompletionTime *metav1.Time `json:"lastCompletionTime,omitempty" protobuf:"bytes,2,opt,name=lastCompletionTime"` +} + +// ShootETCDEncryptionKeyRotation contains information about the ETCD encryption key credential rotation. +type ShootETCDEncryptionKeyRotation struct { + // Phase describes the phase of the ETCD encryption key credential rotation. + Phase ShootCredentialsRotationPhase `json:"phase" protobuf:"bytes,1,opt,name=phase"` + // LastInitiationTime is the most recent time when the ETCD encryption key credential rotation was initiated. + // +optional + LastInitiationTime *metav1.Time `json:"lastInitiationTime,omitempty" protobuf:"bytes,3,opt,name=lastInitiationTime"` + // LastCompletionTime is the most recent time when the ETCD encryption key credential rotation was successfully + // completed. + // +optional + LastCompletionTime *metav1.Time `json:"lastCompletionTime,omitempty" protobuf:"bytes,2,opt,name=lastCompletionTime"` +} + // ShootCredentialsRotationPhase is a string alias. type ShootCredentialsRotationPhase string @@ -643,6 +692,7 @@ type ServiceAccountConfig struct { // SigningKeySecret is a reference to a secret that contains an optional private key of the // service account token issuer. The issuer will sign issued ID tokens with this private key. // Only useful if service account tokens are also issued by another external system. + // Deprecated: This field is deprecated and will be removed in a future version of Gardener. Do not use it. // +optional SigningKeySecret *corev1.LocalObjectReference `json:"signingKeySecretName,omitempty" protobuf:"bytes,2,opt,name=signingKeySecretName"` // ExtendTokenExpiration turns on projected service account expiration extension during token generation, which diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/zz_generated.conversion.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/zz_generated.conversion.go index e75a7f48f..6cb69e324 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/zz_generated.conversion.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/zz_generated.conversion.go @@ -1328,6 +1328,16 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*ShootETCDEncryptionKeyRotation)(nil), (*core.ShootETCDEncryptionKeyRotation)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha1_ShootETCDEncryptionKeyRotation_To_core_ShootETCDEncryptionKeyRotation(a.(*ShootETCDEncryptionKeyRotation), b.(*core.ShootETCDEncryptionKeyRotation), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*core.ShootETCDEncryptionKeyRotation)(nil), (*ShootETCDEncryptionKeyRotation)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_core_ShootETCDEncryptionKeyRotation_To_v1alpha1_ShootETCDEncryptionKeyRotation(a.(*core.ShootETCDEncryptionKeyRotation), b.(*ShootETCDEncryptionKeyRotation), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*ShootKubeconfigRotation)(nil), (*core.ShootKubeconfigRotation)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1alpha1_ShootKubeconfigRotation_To_core_ShootKubeconfigRotation(a.(*ShootKubeconfigRotation), b.(*core.ShootKubeconfigRotation), scope) }); err != nil { @@ -1368,6 +1378,16 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*ShootObservabilityRotation)(nil), (*core.ShootObservabilityRotation)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha1_ShootObservabilityRotation_To_core_ShootObservabilityRotation(a.(*ShootObservabilityRotation), b.(*core.ShootObservabilityRotation), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*core.ShootObservabilityRotation)(nil), (*ShootObservabilityRotation)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_core_ShootObservabilityRotation_To_v1alpha1_ShootObservabilityRotation(a.(*core.ShootObservabilityRotation), b.(*ShootObservabilityRotation), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*ShootSSHKeypairRotation)(nil), (*core.ShootSSHKeypairRotation)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1alpha1_ShootSSHKeypairRotation_To_core_ShootSSHKeypairRotation(a.(*ShootSSHKeypairRotation), b.(*core.ShootSSHKeypairRotation), scope) }); err != nil { @@ -1378,6 +1398,16 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*ShootServiceAccountKeyRotation)(nil), (*core.ShootServiceAccountKeyRotation)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha1_ShootServiceAccountKeyRotation_To_core_ShootServiceAccountKeyRotation(a.(*ShootServiceAccountKeyRotation), b.(*core.ShootServiceAccountKeyRotation), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*core.ShootServiceAccountKeyRotation)(nil), (*ShootServiceAccountKeyRotation)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_core_ShootServiceAccountKeyRotation_To_v1alpha1_ShootServiceAccountKeyRotation(a.(*core.ShootServiceAccountKeyRotation), b.(*ShootServiceAccountKeyRotation), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*ShootSpec)(nil), (*core.ShootSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1alpha1_ShootSpec_To_core_ShootSpec(a.(*ShootSpec), b.(*core.ShootSpec), scope) }); err != nil { @@ -5156,6 +5186,9 @@ func autoConvert_v1alpha1_ShootCredentialsRotation_To_core_ShootCredentialsRotat out.CertificateAuthorities = (*core.ShootCARotation)(unsafe.Pointer(in.CertificateAuthorities)) out.Kubeconfig = (*core.ShootKubeconfigRotation)(unsafe.Pointer(in.Kubeconfig)) out.SSHKeypair = (*core.ShootSSHKeypairRotation)(unsafe.Pointer(in.SSHKeypair)) + out.Observability = (*core.ShootObservabilityRotation)(unsafe.Pointer(in.Observability)) + out.ServiceAccountKey = (*core.ShootServiceAccountKeyRotation)(unsafe.Pointer(in.ServiceAccountKey)) + out.ETCDEncryptionKey = (*core.ShootETCDEncryptionKeyRotation)(unsafe.Pointer(in.ETCDEncryptionKey)) return nil } @@ -5168,6 +5201,9 @@ func autoConvert_core_ShootCredentialsRotation_To_v1alpha1_ShootCredentialsRotat out.CertificateAuthorities = (*ShootCARotation)(unsafe.Pointer(in.CertificateAuthorities)) out.Kubeconfig = (*ShootKubeconfigRotation)(unsafe.Pointer(in.Kubeconfig)) out.SSHKeypair = (*ShootSSHKeypairRotation)(unsafe.Pointer(in.SSHKeypair)) + out.Observability = (*ShootObservabilityRotation)(unsafe.Pointer(in.Observability)) + out.ServiceAccountKey = (*ShootServiceAccountKeyRotation)(unsafe.Pointer(in.ServiceAccountKey)) + out.ETCDEncryptionKey = (*ShootETCDEncryptionKeyRotation)(unsafe.Pointer(in.ETCDEncryptionKey)) return nil } @@ -5176,6 +5212,30 @@ func Convert_core_ShootCredentialsRotation_To_v1alpha1_ShootCredentialsRotation( return autoConvert_core_ShootCredentialsRotation_To_v1alpha1_ShootCredentialsRotation(in, out, s) } +func autoConvert_v1alpha1_ShootETCDEncryptionKeyRotation_To_core_ShootETCDEncryptionKeyRotation(in *ShootETCDEncryptionKeyRotation, out *core.ShootETCDEncryptionKeyRotation, s conversion.Scope) error { + out.Phase = core.ShootCredentialsRotationPhase(in.Phase) + out.LastInitiationTime = (*metav1.Time)(unsafe.Pointer(in.LastInitiationTime)) + out.LastCompletionTime = (*metav1.Time)(unsafe.Pointer(in.LastCompletionTime)) + return nil +} + +// Convert_v1alpha1_ShootETCDEncryptionKeyRotation_To_core_ShootETCDEncryptionKeyRotation is an autogenerated conversion function. +func Convert_v1alpha1_ShootETCDEncryptionKeyRotation_To_core_ShootETCDEncryptionKeyRotation(in *ShootETCDEncryptionKeyRotation, out *core.ShootETCDEncryptionKeyRotation, s conversion.Scope) error { + return autoConvert_v1alpha1_ShootETCDEncryptionKeyRotation_To_core_ShootETCDEncryptionKeyRotation(in, out, s) +} + +func autoConvert_core_ShootETCDEncryptionKeyRotation_To_v1alpha1_ShootETCDEncryptionKeyRotation(in *core.ShootETCDEncryptionKeyRotation, out *ShootETCDEncryptionKeyRotation, s conversion.Scope) error { + out.Phase = ShootCredentialsRotationPhase(in.Phase) + out.LastInitiationTime = (*metav1.Time)(unsafe.Pointer(in.LastInitiationTime)) + out.LastCompletionTime = (*metav1.Time)(unsafe.Pointer(in.LastCompletionTime)) + return nil +} + +// Convert_core_ShootETCDEncryptionKeyRotation_To_v1alpha1_ShootETCDEncryptionKeyRotation is an autogenerated conversion function. +func Convert_core_ShootETCDEncryptionKeyRotation_To_v1alpha1_ShootETCDEncryptionKeyRotation(in *core.ShootETCDEncryptionKeyRotation, out *ShootETCDEncryptionKeyRotation, s conversion.Scope) error { + return autoConvert_core_ShootETCDEncryptionKeyRotation_To_v1alpha1_ShootETCDEncryptionKeyRotation(in, out, s) +} + func autoConvert_v1alpha1_ShootKubeconfigRotation_To_core_ShootKubeconfigRotation(in *ShootKubeconfigRotation, out *core.ShootKubeconfigRotation, s conversion.Scope) error { out.LastInitiationTime = (*metav1.Time)(unsafe.Pointer(in.LastInitiationTime)) out.LastCompletionTime = (*metav1.Time)(unsafe.Pointer(in.LastCompletionTime)) @@ -5290,6 +5350,28 @@ func Convert_core_ShootNetworks_To_v1alpha1_ShootNetworks(in *core.ShootNetworks return autoConvert_core_ShootNetworks_To_v1alpha1_ShootNetworks(in, out, s) } +func autoConvert_v1alpha1_ShootObservabilityRotation_To_core_ShootObservabilityRotation(in *ShootObservabilityRotation, out *core.ShootObservabilityRotation, s conversion.Scope) error { + out.LastInitiationTime = (*metav1.Time)(unsafe.Pointer(in.LastInitiationTime)) + out.LastCompletionTime = (*metav1.Time)(unsafe.Pointer(in.LastCompletionTime)) + return nil +} + +// Convert_v1alpha1_ShootObservabilityRotation_To_core_ShootObservabilityRotation is an autogenerated conversion function. +func Convert_v1alpha1_ShootObservabilityRotation_To_core_ShootObservabilityRotation(in *ShootObservabilityRotation, out *core.ShootObservabilityRotation, s conversion.Scope) error { + return autoConvert_v1alpha1_ShootObservabilityRotation_To_core_ShootObservabilityRotation(in, out, s) +} + +func autoConvert_core_ShootObservabilityRotation_To_v1alpha1_ShootObservabilityRotation(in *core.ShootObservabilityRotation, out *ShootObservabilityRotation, s conversion.Scope) error { + out.LastInitiationTime = (*metav1.Time)(unsafe.Pointer(in.LastInitiationTime)) + out.LastCompletionTime = (*metav1.Time)(unsafe.Pointer(in.LastCompletionTime)) + return nil +} + +// Convert_core_ShootObservabilityRotation_To_v1alpha1_ShootObservabilityRotation is an autogenerated conversion function. +func Convert_core_ShootObservabilityRotation_To_v1alpha1_ShootObservabilityRotation(in *core.ShootObservabilityRotation, out *ShootObservabilityRotation, s conversion.Scope) error { + return autoConvert_core_ShootObservabilityRotation_To_v1alpha1_ShootObservabilityRotation(in, out, s) +} + func autoConvert_v1alpha1_ShootSSHKeypairRotation_To_core_ShootSSHKeypairRotation(in *ShootSSHKeypairRotation, out *core.ShootSSHKeypairRotation, s conversion.Scope) error { out.LastInitiationTime = (*metav1.Time)(unsafe.Pointer(in.LastInitiationTime)) out.LastCompletionTime = (*metav1.Time)(unsafe.Pointer(in.LastCompletionTime)) @@ -5312,6 +5394,30 @@ func Convert_core_ShootSSHKeypairRotation_To_v1alpha1_ShootSSHKeypairRotation(in return autoConvert_core_ShootSSHKeypairRotation_To_v1alpha1_ShootSSHKeypairRotation(in, out, s) } +func autoConvert_v1alpha1_ShootServiceAccountKeyRotation_To_core_ShootServiceAccountKeyRotation(in *ShootServiceAccountKeyRotation, out *core.ShootServiceAccountKeyRotation, s conversion.Scope) error { + out.Phase = core.ShootCredentialsRotationPhase(in.Phase) + out.LastInitiationTime = (*metav1.Time)(unsafe.Pointer(in.LastInitiationTime)) + out.LastCompletionTime = (*metav1.Time)(unsafe.Pointer(in.LastCompletionTime)) + return nil +} + +// Convert_v1alpha1_ShootServiceAccountKeyRotation_To_core_ShootServiceAccountKeyRotation is an autogenerated conversion function. +func Convert_v1alpha1_ShootServiceAccountKeyRotation_To_core_ShootServiceAccountKeyRotation(in *ShootServiceAccountKeyRotation, out *core.ShootServiceAccountKeyRotation, s conversion.Scope) error { + return autoConvert_v1alpha1_ShootServiceAccountKeyRotation_To_core_ShootServiceAccountKeyRotation(in, out, s) +} + +func autoConvert_core_ShootServiceAccountKeyRotation_To_v1alpha1_ShootServiceAccountKeyRotation(in *core.ShootServiceAccountKeyRotation, out *ShootServiceAccountKeyRotation, s conversion.Scope) error { + out.Phase = ShootCredentialsRotationPhase(in.Phase) + out.LastInitiationTime = (*metav1.Time)(unsafe.Pointer(in.LastInitiationTime)) + out.LastCompletionTime = (*metav1.Time)(unsafe.Pointer(in.LastCompletionTime)) + return nil +} + +// Convert_core_ShootServiceAccountKeyRotation_To_v1alpha1_ShootServiceAccountKeyRotation is an autogenerated conversion function. +func Convert_core_ShootServiceAccountKeyRotation_To_v1alpha1_ShootServiceAccountKeyRotation(in *core.ShootServiceAccountKeyRotation, out *ShootServiceAccountKeyRotation, s conversion.Scope) error { + return autoConvert_core_ShootServiceAccountKeyRotation_To_v1alpha1_ShootServiceAccountKeyRotation(in, out, s) +} + func autoConvert_v1alpha1_ShootSpec_To_core_ShootSpec(in *ShootSpec, out *core.ShootSpec, s conversion.Scope) error { out.Addons = (*core.Addons)(unsafe.Pointer(in.Addons)) out.CloudProfileName = in.CloudProfileName @@ -5471,6 +5577,7 @@ func autoConvert_v1alpha1_ShootStatus_To_core_ShootStatus(in *ShootStatus, out * out.AdvertisedAddresses = *(*[]core.ShootAdvertisedAddress)(unsafe.Pointer(&in.AdvertisedAddresses)) out.MigrationStartTime = (*metav1.Time)(unsafe.Pointer(in.MigrationStartTime)) out.Credentials = (*core.ShootCredentials)(unsafe.Pointer(in.Credentials)) + out.LastHibernationTriggerTime = (*metav1.Time)(unsafe.Pointer(in.LastHibernationTriggerTime)) return nil } @@ -5481,6 +5588,7 @@ func autoConvert_core_ShootStatus_To_v1alpha1_ShootStatus(in *core.ShootStatus, return err } out.IsHibernated = in.IsHibernated + out.LastHibernationTriggerTime = (*metav1.Time)(unsafe.Pointer(in.LastHibernationTriggerTime)) out.LastOperation = (*LastOperation)(unsafe.Pointer(in.LastOperation)) out.LastErrors = *(*[]LastError)(unsafe.Pointer(&in.LastErrors)) out.ObservedGeneration = in.ObservedGeneration diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/zz_generated.deepcopy.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/zz_generated.deepcopy.go index ff64b7faf..e8e7e59c6 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/zz_generated.deepcopy.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/zz_generated.deepcopy.go @@ -3986,6 +3986,21 @@ func (in *ShootCredentialsRotation) DeepCopyInto(out *ShootCredentialsRotation) *out = new(ShootSSHKeypairRotation) (*in).DeepCopyInto(*out) } + if in.Observability != nil { + in, out := &in.Observability, &out.Observability + *out = new(ShootObservabilityRotation) + (*in).DeepCopyInto(*out) + } + if in.ServiceAccountKey != nil { + in, out := &in.ServiceAccountKey, &out.ServiceAccountKey + *out = new(ShootServiceAccountKeyRotation) + (*in).DeepCopyInto(*out) + } + if in.ETCDEncryptionKey != nil { + in, out := &in.ETCDEncryptionKey, &out.ETCDEncryptionKey + *out = new(ShootETCDEncryptionKeyRotation) + (*in).DeepCopyInto(*out) + } return } @@ -3999,6 +4014,30 @@ func (in *ShootCredentialsRotation) DeepCopy() *ShootCredentialsRotation { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ShootETCDEncryptionKeyRotation) DeepCopyInto(out *ShootETCDEncryptionKeyRotation) { + *out = *in + if in.LastInitiationTime != nil { + in, out := &in.LastInitiationTime, &out.LastInitiationTime + *out = (*in).DeepCopy() + } + if in.LastCompletionTime != nil { + in, out := &in.LastCompletionTime, &out.LastCompletionTime + *out = (*in).DeepCopy() + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ShootETCDEncryptionKeyRotation. +func (in *ShootETCDEncryptionKeyRotation) DeepCopy() *ShootETCDEncryptionKeyRotation { + if in == nil { + return nil + } + out := new(ShootETCDEncryptionKeyRotation) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ShootKubeconfigRotation) DeepCopyInto(out *ShootKubeconfigRotation) { *out = *in @@ -4108,6 +4147,30 @@ func (in *ShootNetworks) DeepCopy() *ShootNetworks { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ShootObservabilityRotation) DeepCopyInto(out *ShootObservabilityRotation) { + *out = *in + if in.LastInitiationTime != nil { + in, out := &in.LastInitiationTime, &out.LastInitiationTime + *out = (*in).DeepCopy() + } + if in.LastCompletionTime != nil { + in, out := &in.LastCompletionTime, &out.LastCompletionTime + *out = (*in).DeepCopy() + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ShootObservabilityRotation. +func (in *ShootObservabilityRotation) DeepCopy() *ShootObservabilityRotation { + if in == nil { + return nil + } + out := new(ShootObservabilityRotation) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ShootSSHKeypairRotation) DeepCopyInto(out *ShootSSHKeypairRotation) { *out = *in @@ -4132,6 +4195,30 @@ func (in *ShootSSHKeypairRotation) DeepCopy() *ShootSSHKeypairRotation { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ShootServiceAccountKeyRotation) DeepCopyInto(out *ShootServiceAccountKeyRotation) { + *out = *in + if in.LastInitiationTime != nil { + in, out := &in.LastInitiationTime, &out.LastInitiationTime + *out = (*in).DeepCopy() + } + if in.LastCompletionTime != nil { + in, out := &in.LastCompletionTime, &out.LastCompletionTime + *out = (*in).DeepCopy() + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ShootServiceAccountKeyRotation. +func (in *ShootServiceAccountKeyRotation) DeepCopy() *ShootServiceAccountKeyRotation { + if in == nil { + return nil + } + out := new(ShootServiceAccountKeyRotation) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ShootSpec) DeepCopyInto(out *ShootSpec) { *out = *in @@ -4380,6 +4467,10 @@ func (in *ShootStatus) DeepCopyInto(out *ShootStatus) { *out = new(ShootCredentials) (*in).DeepCopyInto(*out) } + if in.LastHibernationTriggerTime != nil { + in, out := &in.LastHibernationTriggerTime, &out.LastHibernationTriggerTime + *out = (*in).DeepCopy() + } return } diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/constants/types_constants.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/constants/types_constants.go index 6d0721036..239379927 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/constants/types_constants.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/constants/types_constants.go @@ -57,6 +57,12 @@ const ( // SecretNameObservabilityIngress is a constant for the name of a Kubernetes secret object that contains the ingress // credentials for observability components. SecretNameObservabilityIngress = "observability-ingress" + // SecretNameObservabilityIngressUsers is a constant for the name of a Kubernetes secret object that contains the + // user's ingress credentials for observability components. + SecretNameObservabilityIngressUsers = "observability-ingress-users" + // SecretNameETCDEncryptionKey is a constant for the name of a Kubernetes secret object that contains the key + // for encryption data in ETCD. + SecretNameETCDEncryptionKey = "kube-apiserver-etcd-encryption-key" // SecretNameGardener is a constant for the name of a Kubernetes secret object that contains the client // certificate and a kubeconfig for a shoot cluster. It is used by Gardener and can be used by extension @@ -157,6 +163,9 @@ const ( GardenCreatedBy = "gardener.cloud/created-by" // GardenerOperation is a constant for an annotation on a resource that describes a desired operation. GardenerOperation = "gardener.cloud/operation" + // GardenerMaintenanceOperation is a constant for an annotation on a Shoot that describes a desired operation which + // will be performed during maintenance. + GardenerMaintenanceOperation = "maintenance.gardener.cloud/operation" // GardenerOperationReconcile is a constant for the value of the operation annotation describing a reconcile // operation. GardenerOperationReconcile = "reconcile" @@ -175,6 +184,8 @@ const ( // GardenerOperationKeepalive is a constant for the value of the operation annotation describing an // operation that extends the lifetime of the object having the operation annotation. GardenerOperationKeepalive = "keepalive" + // GardenerOperationRenewKubeconfig is a constant for the value of the operation annotation to renew the gardenlet's kubeconfig secret. + GardenerOperationRenewKubeconfig = "renew-kubeconfig" // DeprecatedGardenRole is the key for an annotation on a Kubernetes object indicating what it is used for. // @@ -288,6 +299,13 @@ const ( // ShootOperationRetry is a constant for an annotation on a Shoot indicating that a failed Shoot reconciliation shall be // retried. ShootOperationRetry = "retry" + // ShootOperationRotateCredentialsStart is a constant for an annotation on a Shoot indicating that the rotation of + // all credentials shall be started. This includes CAs, certificates, kubeconfigs, SSH keypairs, observability + // credentials, and ServiceAccount signing key. + ShootOperationRotateCredentialsStart = "rotate-credentials-start" + // ShootOperationRotateCredentialsComplete is a constant for an annotation on a Shoot indicating that the rotation + // of the credentials shall be completed. + ShootOperationRotateCredentialsComplete = "rotate-credentials-complete" // ShootOperationRotateKubeconfigCredentials is a constant for an annotation on a Shoot indicating that the credentials // contained in the kubeconfig that is handed out to the user shall be rotated. ShootOperationRotateKubeconfigCredentials = "rotate-kubeconfig-credentials" @@ -300,6 +318,22 @@ const ( // ShootOperationRotateCAComplete is a constant for an annotation on a Shoot indicating that the rotation of the // certificate authorities shall be completed. ShootOperationRotateCAComplete = "rotate-ca-complete" + // ShootOperationRotateObservabilityCredentials is a constant for an annotation on a Shoot indicating that the credentials + // for the observability stack secret shall be rotated. Note that this only affects the user credentials + // since the operator credentials are rotated automatically each `30d`. + ShootOperationRotateObservabilityCredentials = "rotate-observability-credentials" + // ShootOperationRotateServiceAccountKeyStart is a constant for an annotation on a Shoot indicating that the + // rotation of the service account signing key shall be started. + ShootOperationRotateServiceAccountKeyStart = "rotate-serviceaccount-key-start" + // ShootOperationRotateServiceAccountKeyComplete is a constant for an annotation on a Shoot indicating that the + // rotation of the service account signing key shall be completed. + ShootOperationRotateServiceAccountKeyComplete = "rotate-serviceaccount-key-complete" + // ShootOperationRotateETCDEncryptionKeyStart is a constant for an annotation on a Shoot indicating that the + // rotation of the ETCD encryption key shall be started. + ShootOperationRotateETCDEncryptionKeyStart = "rotate-etcd-encryption-key-start" + // ShootOperationRotateETCDEncryptionKeyComplete is a constant for an annotation on a Shoot indicating that the + // rotation of the ETCD encryption key shall be completed. + ShootOperationRotateETCDEncryptionKeyComplete = "rotate-etcd-encryption-key-complete" // SeedResourceManagerClass is the resource-class managed by the Gardener-Resource-Manager // instance in the garden namespace on the seeds. @@ -324,6 +358,9 @@ const ( // LabelMonitoring is a constant for a label for monitoring stack configurations LabelMonitoring = "monitoring" + // LabelSecretBindingReference is used to identify secrets which are referred by a SecretBinding (not necessarily in the same namespace). + LabelSecretBindingReference = "reference.gardener.cloud/secretbinding" + // LabelExtensionExtensionTypePrefix is used to prefix extension label for extension types. LabelExtensionExtensionTypePrefix = "extensions.extensions.gardener.cloud/" // LabelExtensionProviderTypePrefix is used to prefix extension label for cloud provider types. diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/generated.pb.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/generated.pb.go index 72cc7d579..e50f90658 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/generated.pb.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/generated.pb.go @@ -3777,10 +3777,38 @@ func (m *ShootCredentialsRotation) XXX_DiscardUnknown() { var xxx_messageInfo_ShootCredentialsRotation proto.InternalMessageInfo +func (m *ShootETCDEncryptionKeyRotation) Reset() { *m = ShootETCDEncryptionKeyRotation{} } +func (*ShootETCDEncryptionKeyRotation) ProtoMessage() {} +func (*ShootETCDEncryptionKeyRotation) Descriptor() ([]byte, []int) { + return fileDescriptor_ca37af0df9a5bbd2, []int{133} +} +func (m *ShootETCDEncryptionKeyRotation) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ShootETCDEncryptionKeyRotation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ShootETCDEncryptionKeyRotation) XXX_Merge(src proto.Message) { + xxx_messageInfo_ShootETCDEncryptionKeyRotation.Merge(m, src) +} +func (m *ShootETCDEncryptionKeyRotation) XXX_Size() int { + return m.Size() +} +func (m *ShootETCDEncryptionKeyRotation) XXX_DiscardUnknown() { + xxx_messageInfo_ShootETCDEncryptionKeyRotation.DiscardUnknown(m) +} + +var xxx_messageInfo_ShootETCDEncryptionKeyRotation proto.InternalMessageInfo + func (m *ShootKubeconfigRotation) Reset() { *m = ShootKubeconfigRotation{} } func (*ShootKubeconfigRotation) ProtoMessage() {} func (*ShootKubeconfigRotation) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{133} + return fileDescriptor_ca37af0df9a5bbd2, []int{134} } func (m *ShootKubeconfigRotation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3808,7 +3836,7 @@ var xxx_messageInfo_ShootKubeconfigRotation proto.InternalMessageInfo func (m *ShootList) Reset() { *m = ShootList{} } func (*ShootList) ProtoMessage() {} func (*ShootList) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{134} + return fileDescriptor_ca37af0df9a5bbd2, []int{135} } func (m *ShootList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3836,7 +3864,7 @@ var xxx_messageInfo_ShootList proto.InternalMessageInfo func (m *ShootMachineImage) Reset() { *m = ShootMachineImage{} } func (*ShootMachineImage) ProtoMessage() {} func (*ShootMachineImage) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{135} + return fileDescriptor_ca37af0df9a5bbd2, []int{136} } func (m *ShootMachineImage) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3864,7 +3892,7 @@ var xxx_messageInfo_ShootMachineImage proto.InternalMessageInfo func (m *ShootNetworks) Reset() { *m = ShootNetworks{} } func (*ShootNetworks) ProtoMessage() {} func (*ShootNetworks) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{136} + return fileDescriptor_ca37af0df9a5bbd2, []int{137} } func (m *ShootNetworks) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3889,10 +3917,38 @@ func (m *ShootNetworks) XXX_DiscardUnknown() { var xxx_messageInfo_ShootNetworks proto.InternalMessageInfo +func (m *ShootObservabilityRotation) Reset() { *m = ShootObservabilityRotation{} } +func (*ShootObservabilityRotation) ProtoMessage() {} +func (*ShootObservabilityRotation) Descriptor() ([]byte, []int) { + return fileDescriptor_ca37af0df9a5bbd2, []int{138} +} +func (m *ShootObservabilityRotation) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ShootObservabilityRotation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ShootObservabilityRotation) XXX_Merge(src proto.Message) { + xxx_messageInfo_ShootObservabilityRotation.Merge(m, src) +} +func (m *ShootObservabilityRotation) XXX_Size() int { + return m.Size() +} +func (m *ShootObservabilityRotation) XXX_DiscardUnknown() { + xxx_messageInfo_ShootObservabilityRotation.DiscardUnknown(m) +} + +var xxx_messageInfo_ShootObservabilityRotation proto.InternalMessageInfo + func (m *ShootSSHKeypairRotation) Reset() { *m = ShootSSHKeypairRotation{} } func (*ShootSSHKeypairRotation) ProtoMessage() {} func (*ShootSSHKeypairRotation) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{137} + return fileDescriptor_ca37af0df9a5bbd2, []int{139} } func (m *ShootSSHKeypairRotation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3917,10 +3973,38 @@ func (m *ShootSSHKeypairRotation) XXX_DiscardUnknown() { var xxx_messageInfo_ShootSSHKeypairRotation proto.InternalMessageInfo +func (m *ShootServiceAccountKeyRotation) Reset() { *m = ShootServiceAccountKeyRotation{} } +func (*ShootServiceAccountKeyRotation) ProtoMessage() {} +func (*ShootServiceAccountKeyRotation) Descriptor() ([]byte, []int) { + return fileDescriptor_ca37af0df9a5bbd2, []int{140} +} +func (m *ShootServiceAccountKeyRotation) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ShootServiceAccountKeyRotation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ShootServiceAccountKeyRotation) XXX_Merge(src proto.Message) { + xxx_messageInfo_ShootServiceAccountKeyRotation.Merge(m, src) +} +func (m *ShootServiceAccountKeyRotation) XXX_Size() int { + return m.Size() +} +func (m *ShootServiceAccountKeyRotation) XXX_DiscardUnknown() { + xxx_messageInfo_ShootServiceAccountKeyRotation.DiscardUnknown(m) +} + +var xxx_messageInfo_ShootServiceAccountKeyRotation proto.InternalMessageInfo + func (m *ShootSpec) Reset() { *m = ShootSpec{} } func (*ShootSpec) ProtoMessage() {} func (*ShootSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{138} + return fileDescriptor_ca37af0df9a5bbd2, []int{141} } func (m *ShootSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3948,7 +4032,7 @@ var xxx_messageInfo_ShootSpec proto.InternalMessageInfo func (m *ShootStatus) Reset() { *m = ShootStatus{} } func (*ShootStatus) ProtoMessage() {} func (*ShootStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{139} + return fileDescriptor_ca37af0df9a5bbd2, []int{142} } func (m *ShootStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3976,7 +4060,7 @@ var xxx_messageInfo_ShootStatus proto.InternalMessageInfo func (m *ShootTemplate) Reset() { *m = ShootTemplate{} } func (*ShootTemplate) ProtoMessage() {} func (*ShootTemplate) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{140} + return fileDescriptor_ca37af0df9a5bbd2, []int{143} } func (m *ShootTemplate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4004,7 +4088,7 @@ var xxx_messageInfo_ShootTemplate proto.InternalMessageInfo func (m *SystemComponents) Reset() { *m = SystemComponents{} } func (*SystemComponents) ProtoMessage() {} func (*SystemComponents) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{141} + return fileDescriptor_ca37af0df9a5bbd2, []int{144} } func (m *SystemComponents) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4032,7 +4116,7 @@ var xxx_messageInfo_SystemComponents proto.InternalMessageInfo func (m *Toleration) Reset() { *m = Toleration{} } func (*Toleration) ProtoMessage() {} func (*Toleration) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{142} + return fileDescriptor_ca37af0df9a5bbd2, []int{145} } func (m *Toleration) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4060,7 +4144,7 @@ var xxx_messageInfo_Toleration proto.InternalMessageInfo func (m *VerticalPodAutoscaler) Reset() { *m = VerticalPodAutoscaler{} } func (*VerticalPodAutoscaler) ProtoMessage() {} func (*VerticalPodAutoscaler) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{143} + return fileDescriptor_ca37af0df9a5bbd2, []int{146} } func (m *VerticalPodAutoscaler) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4088,7 +4172,7 @@ var xxx_messageInfo_VerticalPodAutoscaler proto.InternalMessageInfo func (m *Volume) Reset() { *m = Volume{} } func (*Volume) ProtoMessage() {} func (*Volume) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{144} + return fileDescriptor_ca37af0df9a5bbd2, []int{147} } func (m *Volume) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4116,7 +4200,7 @@ var xxx_messageInfo_Volume proto.InternalMessageInfo func (m *VolumeType) Reset() { *m = VolumeType{} } func (*VolumeType) ProtoMessage() {} func (*VolumeType) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{145} + return fileDescriptor_ca37af0df9a5bbd2, []int{148} } func (m *VolumeType) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4144,7 +4228,7 @@ var xxx_messageInfo_VolumeType proto.InternalMessageInfo func (m *WatchCacheSizes) Reset() { *m = WatchCacheSizes{} } func (*WatchCacheSizes) ProtoMessage() {} func (*WatchCacheSizes) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{146} + return fileDescriptor_ca37af0df9a5bbd2, []int{149} } func (m *WatchCacheSizes) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4172,7 +4256,7 @@ var xxx_messageInfo_WatchCacheSizes proto.InternalMessageInfo func (m *Worker) Reset() { *m = Worker{} } func (*Worker) ProtoMessage() {} func (*Worker) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{147} + return fileDescriptor_ca37af0df9a5bbd2, []int{150} } func (m *Worker) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4200,7 +4284,7 @@ var xxx_messageInfo_Worker proto.InternalMessageInfo func (m *WorkerKubernetes) Reset() { *m = WorkerKubernetes{} } func (*WorkerKubernetes) ProtoMessage() {} func (*WorkerKubernetes) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{148} + return fileDescriptor_ca37af0df9a5bbd2, []int{151} } func (m *WorkerKubernetes) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4228,7 +4312,7 @@ var xxx_messageInfo_WorkerKubernetes proto.InternalMessageInfo func (m *WorkerSystemComponents) Reset() { *m = WorkerSystemComponents{} } func (*WorkerSystemComponents) ProtoMessage() {} func (*WorkerSystemComponents) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{149} + return fileDescriptor_ca37af0df9a5bbd2, []int{152} } func (m *WorkerSystemComponents) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4397,11 +4481,14 @@ func init() { proto.RegisterType((*ShootCARotation)(nil), "github.aaakk.us.kg.gardener.gardener.pkg.apis.core.v1beta1.ShootCARotation") proto.RegisterType((*ShootCredentials)(nil), "github.aaakk.us.kg.gardener.gardener.pkg.apis.core.v1beta1.ShootCredentials") proto.RegisterType((*ShootCredentialsRotation)(nil), "github.aaakk.us.kg.gardener.gardener.pkg.apis.core.v1beta1.ShootCredentialsRotation") + proto.RegisterType((*ShootETCDEncryptionKeyRotation)(nil), "github.aaakk.us.kg.gardener.gardener.pkg.apis.core.v1beta1.ShootETCDEncryptionKeyRotation") proto.RegisterType((*ShootKubeconfigRotation)(nil), "github.aaakk.us.kg.gardener.gardener.pkg.apis.core.v1beta1.ShootKubeconfigRotation") proto.RegisterType((*ShootList)(nil), "github.aaakk.us.kg.gardener.gardener.pkg.apis.core.v1beta1.ShootList") proto.RegisterType((*ShootMachineImage)(nil), "github.aaakk.us.kg.gardener.gardener.pkg.apis.core.v1beta1.ShootMachineImage") proto.RegisterType((*ShootNetworks)(nil), "github.aaakk.us.kg.gardener.gardener.pkg.apis.core.v1beta1.ShootNetworks") + proto.RegisterType((*ShootObservabilityRotation)(nil), "github.aaakk.us.kg.gardener.gardener.pkg.apis.core.v1beta1.ShootObservabilityRotation") proto.RegisterType((*ShootSSHKeypairRotation)(nil), "github.aaakk.us.kg.gardener.gardener.pkg.apis.core.v1beta1.ShootSSHKeypairRotation") + proto.RegisterType((*ShootServiceAccountKeyRotation)(nil), "github.aaakk.us.kg.gardener.gardener.pkg.apis.core.v1beta1.ShootServiceAccountKeyRotation") proto.RegisterType((*ShootSpec)(nil), "github.aaakk.us.kg.gardener.gardener.pkg.apis.core.v1beta1.ShootSpec") proto.RegisterType((*ShootStatus)(nil), "github.aaakk.us.kg.gardener.gardener.pkg.apis.core.v1beta1.ShootStatus") proto.RegisterType((*ShootTemplate)(nil), "github.aaakk.us.kg.gardener.gardener.pkg.apis.core.v1beta1.ShootTemplate") @@ -4423,637 +4510,647 @@ func init() { } var fileDescriptor_ca37af0df9a5bbd2 = []byte{ - // 10076 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x7d, 0x6d, 0x6c, 0x24, 0xc9, - 0x75, 0x98, 0x7a, 0xc8, 0x21, 0x87, 0x6f, 0x48, 0x2e, 0x59, 0xfb, 0x71, 0x3c, 0xde, 0xed, 0x72, - 0xd5, 0xba, 0x3b, 0xec, 0xe5, 0x24, 0xae, 0xef, 0x74, 0xf2, 0xe9, 0xee, 0x74, 0xba, 0x9b, 0x0f, - 0xee, 0xee, 0x68, 0x97, 0xdc, 0xb9, 0x9a, 0xe5, 0xde, 0x87, 0x9d, 0x8b, 0x9a, 0xdd, 0xc5, 0x61, - 0x1f, 0x7b, 0xba, 0xe7, 0xba, 0x7b, 0xb8, 0xe4, 0x5e, 0x0c, 0x59, 0x8a, 0x24, 0x47, 0x76, 0x12, - 0x18, 0x0e, 0x1c, 0x41, 0x92, 0x13, 0xcb, 0x30, 0x1c, 0x27, 0x70, 0x20, 0x2b, 0x09, 0xac, 0xc4, - 0xf9, 0x40, 0x0c, 0x07, 0x81, 0x65, 0x23, 0x09, 0x14, 0x07, 0x82, 0x15, 0x24, 0xa6, 0x22, 0x06, - 0x51, 0x12, 0x24, 0x3f, 0x02, 0x18, 0xf9, 0xb3, 0x30, 0x90, 0xa0, 0x3e, 0xba, 0xbb, 0xfa, 0x8b, - 0x3b, 0xec, 0x21, 0x57, 0x77, 0xf1, 0x2f, 0x72, 0xea, 0x55, 0xbd, 0x57, 0x5d, 0xf5, 0xea, 0xd5, - 0x7b, 0xaf, 0x5e, 0xbd, 0x82, 0x7a, 0xd7, 0xf4, 0xb7, 0x06, 0x1b, 0xcb, 0xba, 0xd3, 0xbb, 0xdc, - 0xd5, 0x5c, 0x83, 0xd8, 0xc4, 0x8d, 0xfe, 0xe9, 0x6f, 0x77, 0x2f, 0x6b, 0x7d, 0xd3, 0xbb, 0xac, - 0x3b, 0x2e, 0xb9, 0xbc, 0xf3, 0xf4, 0x06, 0xf1, 0xb5, 0xa7, 0x2f, 0x77, 0x29, 0x4c, 0xf3, 0x89, - 0xb1, 0xdc, 0x77, 0x1d, 0xdf, 0x41, 0xcf, 0x44, 0x38, 0x96, 0x83, 0xa6, 0xd1, 0x3f, 0xfd, 0xed, - 0xee, 0x32, 0xc5, 0xb1, 0x4c, 0x71, 0x2c, 0x0b, 0x1c, 0x8b, 0x1f, 0x91, 0xe9, 0x3a, 0x5d, 0xe7, - 0x32, 0x43, 0xb5, 0x31, 0xd8, 0x64, 0xbf, 0xd8, 0x0f, 0xf6, 0x1f, 0x27, 0xb1, 0xf8, 0xe4, 0xf6, - 0xc7, 0xbd, 0x65, 0xd3, 0xa1, 0x9d, 0xb9, 0xac, 0x0d, 0x7c, 0xc7, 0xd3, 0x35, 0xcb, 0xb4, 0xbb, - 0x97, 0x77, 0x52, 0xbd, 0x59, 0x54, 0xa5, 0xaa, 0xa2, 0xdb, 0x87, 0xd6, 0x71, 0x37, 0x34, 0x3d, - 0xab, 0xce, 0xb3, 0x51, 0x9d, 0x9e, 0xa6, 0x6f, 0x99, 0x36, 0x71, 0xf7, 0x82, 0x01, 0xb9, 0xec, - 0x12, 0xcf, 0x19, 0xb8, 0x3a, 0x39, 0x52, 0x2b, 0xef, 0x72, 0x8f, 0xf8, 0x5a, 0x16, 0xad, 0xcb, - 0x79, 0xad, 0xdc, 0x81, 0xed, 0x9b, 0xbd, 0x34, 0x99, 0x1f, 0xbf, 0x5f, 0x03, 0x4f, 0xdf, 0x22, - 0x3d, 0x2d, 0xd5, 0xee, 0xa3, 0x79, 0xed, 0x06, 0xbe, 0x69, 0x5d, 0x36, 0x6d, 0xdf, 0xf3, 0xdd, - 0x64, 0x23, 0xf5, 0x19, 0x28, 0xd7, 0x0c, 0xc3, 0xb1, 0xd1, 0x93, 0x30, 0x49, 0x6c, 0x6d, 0xc3, - 0x22, 0xc6, 0x82, 0x72, 0x51, 0xb9, 0x54, 0xa9, 0x9f, 0xfa, 0xf6, 0xfe, 0xd2, 0x07, 0x0e, 0xf6, - 0x97, 0x26, 0x57, 0x78, 0x31, 0x0e, 0xe0, 0xea, 0x2f, 0x96, 0x60, 0x82, 0x35, 0xf2, 0xd0, 0x2f, - 0x28, 0x70, 0x7a, 0x7b, 0xb0, 0x41, 0x5c, 0x9b, 0xf8, 0xc4, 0x6b, 0x6a, 0xde, 0xd6, 0x86, 0xa3, - 0xb9, 0x1c, 0x45, 0xf5, 0x99, 0xab, 0xcb, 0x47, 0xe7, 0x9e, 0xe5, 0xeb, 0x69, 0x74, 0xf5, 0x87, - 0x0e, 0xf6, 0x97, 0x4e, 0x67, 0x00, 0x70, 0x16, 0x71, 0xb4, 0x03, 0xd3, 0x76, 0xd7, 0xb4, 0x77, - 0x5b, 0x76, 0xd7, 0x25, 0x9e, 0xb7, 0x50, 0x62, 0x9d, 0x79, 0xa5, 0x48, 0x67, 0xd6, 0x24, 0x3c, - 0xf5, 0xb9, 0x83, 0xfd, 0xa5, 0x69, 0xb9, 0x04, 0xc7, 0xe8, 0xa8, 0x5f, 0x54, 0xe0, 0x54, 0xcd, - 0xe8, 0x99, 0x9e, 0x67, 0x3a, 0x76, 0xdb, 0x1a, 0x74, 0x4d, 0x1b, 0x5d, 0x84, 0x71, 0x5b, 0xeb, - 0x11, 0x36, 0x20, 0x53, 0xf5, 0x69, 0x31, 0xa6, 0xe3, 0x6b, 0x5a, 0x8f, 0x60, 0x06, 0x41, 0xaf, - 0xc2, 0x84, 0xee, 0xd8, 0x9b, 0x66, 0x57, 0xf4, 0xf3, 0x23, 0xcb, 0x7c, 0x1e, 0x97, 0xe5, 0x79, - 0x64, 0xdd, 0x13, 0xf3, 0xbf, 0x8c, 0xb5, 0x3b, 0x2b, 0xbb, 0x3e, 0xb1, 0x29, 0x99, 0x3a, 0x1c, - 0xec, 0x2f, 0x4d, 0x34, 0x18, 0x02, 0x2c, 0x10, 0xa9, 0x57, 0xa0, 0x52, 0xb3, 0x88, 0xeb, 0x9b, - 0x76, 0x17, 0xbd, 0x00, 0xb3, 0xa4, 0xa7, 0x99, 0x16, 0x26, 0x3a, 0x31, 0x77, 0x88, 0xeb, 0x2d, - 0x28, 0x17, 0xc7, 0x2e, 0x4d, 0xd5, 0xd1, 0xc1, 0xfe, 0xd2, 0xec, 0x4a, 0x0c, 0x82, 0x13, 0x35, - 0xd5, 0xcf, 0x2a, 0x50, 0xad, 0x0d, 0x0c, 0xd3, 0xe7, 0xf8, 0x91, 0x0b, 0x55, 0x8d, 0xfe, 0x6c, - 0x3b, 0x96, 0xa9, 0xef, 0x89, 0x49, 0x7e, 0xb9, 0xc8, 0xb8, 0xd6, 0x22, 0x34, 0xf5, 0x53, 0x07, - 0xfb, 0x4b, 0x55, 0xa9, 0x00, 0xcb, 0x44, 0xd4, 0x2d, 0x90, 0x61, 0xe8, 0x0d, 0x98, 0xe6, 0x1f, - 0xb9, 0xaa, 0xf5, 0x31, 0xd9, 0x14, 0x7d, 0xf8, 0x90, 0x34, 0x66, 0x01, 0xa1, 0xe5, 0x9b, 0x1b, - 0x6f, 0x13, 0xdd, 0xc7, 0x64, 0x93, 0xb8, 0xc4, 0xd6, 0x09, 0x9f, 0xbe, 0x86, 0xd4, 0x18, 0xc7, - 0x50, 0xa9, 0xdf, 0x57, 0x60, 0xae, 0xb6, 0xa3, 0x99, 0x96, 0xb6, 0x61, 0x5a, 0xa6, 0xbf, 0xf7, - 0xa6, 0x63, 0x93, 0x21, 0xe6, 0x6f, 0x1d, 0x1e, 0x1a, 0xd8, 0x1a, 0x6f, 0x67, 0x91, 0x55, 0x3e, - 0x63, 0xb7, 0xf6, 0xfa, 0x84, 0x32, 0x1e, 0x1d, 0xe9, 0x47, 0x0e, 0xf6, 0x97, 0x1e, 0x5a, 0xcf, - 0xae, 0x82, 0xf3, 0xda, 0x22, 0x0c, 0xe7, 0x24, 0xd0, 0x6d, 0xc7, 0x1a, 0xf4, 0x04, 0xd6, 0x31, - 0x86, 0x75, 0xf1, 0x60, 0x7f, 0xe9, 0xdc, 0x7a, 0x66, 0x0d, 0x9c, 0xd3, 0x52, 0xfd, 0x76, 0x09, - 0xa6, 0xeb, 0x9a, 0xbe, 0x3d, 0xe8, 0xd7, 0x07, 0xfa, 0x36, 0xf1, 0xd1, 0xa7, 0xa1, 0x42, 0xc5, - 0x96, 0xa1, 0xf9, 0x9a, 0x18, 0xc9, 0x1f, 0xcb, 0xe5, 0x3e, 0x36, 0x89, 0xb4, 0x76, 0x34, 0xb6, - 0xab, 0xc4, 0xd7, 0xea, 0x48, 0x8c, 0x09, 0x44, 0x65, 0x38, 0xc4, 0x8a, 0x36, 0x61, 0xdc, 0xeb, - 0x13, 0x5d, 0xf0, 0x76, 0xb3, 0x08, 0xaf, 0xc8, 0x3d, 0xee, 0xf4, 0x89, 0x1e, 0xcd, 0x02, 0xfd, - 0x85, 0x19, 0x7e, 0x64, 0xc3, 0x84, 0xe7, 0x6b, 0xfe, 0x80, 0x0e, 0x0f, 0xa5, 0x74, 0x65, 0x64, - 0x4a, 0x0c, 0x5b, 0x7d, 0x56, 0xd0, 0x9a, 0xe0, 0xbf, 0xb1, 0xa0, 0xa2, 0xfe, 0x91, 0x02, 0x73, - 0x72, 0xf5, 0x1b, 0xa6, 0xe7, 0xa3, 0x9f, 0x4c, 0x0d, 0xe7, 0xf2, 0x70, 0xc3, 0x49, 0x5b, 0xb3, - 0xc1, 0x9c, 0x13, 0xe4, 0x2a, 0x41, 0x89, 0x34, 0x94, 0x04, 0xca, 0xa6, 0x4f, 0x7a, 0x9c, 0xad, - 0x0a, 0xca, 0x33, 0xb9, 0xcb, 0xf5, 0x19, 0x41, 0xac, 0xdc, 0xa2, 0x68, 0x31, 0xc7, 0xae, 0x7e, - 0x1a, 0xce, 0xc8, 0xb5, 0xda, 0xae, 0xb3, 0x63, 0x1a, 0xc4, 0xa5, 0x2b, 0xc1, 0xdf, 0xeb, 0xa7, - 0x56, 0x02, 0xe5, 0x2c, 0xcc, 0x20, 0xe8, 0x09, 0x98, 0x70, 0x49, 0xd7, 0x74, 0x6c, 0x36, 0xdb, - 0x53, 0xd1, 0xd8, 0x61, 0x56, 0x8a, 0x05, 0x54, 0xfd, 0x3f, 0xa5, 0xf8, 0xd8, 0xd1, 0x69, 0x44, - 0x3b, 0x50, 0xe9, 0x0b, 0x52, 0x62, 0xec, 0xae, 0x8d, 0xfa, 0x81, 0x41, 0xd7, 0xa3, 0x51, 0x0d, - 0x4a, 0x70, 0x48, 0x0b, 0x99, 0x30, 0x1b, 0xfc, 0xdf, 0x18, 0x41, 0x0c, 0x33, 0x71, 0xda, 0x8e, - 0x21, 0xc2, 0x09, 0xc4, 0xe8, 0x16, 0x4c, 0x79, 0x44, 0x77, 0x09, 0x95, 0x49, 0x82, 0x4d, 0x33, - 0x05, 0x57, 0x27, 0xa8, 0x24, 0x04, 0xd7, 0xbc, 0xe8, 0xfe, 0x54, 0x08, 0xc0, 0x11, 0x22, 0x74, - 0x09, 0x2a, 0x1e, 0x21, 0x06, 0x95, 0x48, 0x0b, 0xe3, 0x7c, 0x6e, 0xe8, 0xa7, 0x76, 0x44, 0x19, - 0x0e, 0xa1, 0xea, 0xd7, 0xc7, 0x01, 0xa5, 0x59, 0x5c, 0x1e, 0x01, 0x5e, 0x22, 0xc6, 0x7f, 0x94, - 0x11, 0x10, 0xab, 0x25, 0x81, 0x18, 0xdd, 0x85, 0x19, 0x4b, 0xf3, 0xfc, 0x9b, 0x7d, 0xaa, 0x83, - 0x04, 0x8c, 0x52, 0x7d, 0xa6, 0x56, 0x64, 0xa6, 0x6f, 0xc8, 0x88, 0xea, 0xf3, 0x07, 0xfb, 0x4b, - 0x33, 0xb1, 0x22, 0x1c, 0x27, 0x85, 0xde, 0x86, 0x29, 0x5a, 0xb0, 0xe2, 0xba, 0x8e, 0x2b, 0x46, - 0xff, 0xa5, 0xa2, 0x74, 0x19, 0x92, 0xfa, 0x0c, 0x9d, 0x93, 0xf0, 0x27, 0x8e, 0xd0, 0xa3, 0x4f, - 0x01, 0x72, 0x36, 0x3c, 0xe2, 0xee, 0x10, 0xe3, 0x2a, 0x57, 0xb8, 0xe8, 0xc7, 0xd2, 0xd9, 0x19, - 0xab, 0x2f, 0x8a, 0xd9, 0x44, 0x37, 0x53, 0x35, 0x70, 0x46, 0x2b, 0xb4, 0x0d, 0x28, 0x54, 0xda, - 0x42, 0x06, 0x58, 0x28, 0x0f, 0xcf, 0x3e, 0xe7, 0x28, 0xb1, 0xab, 0x29, 0x14, 0x38, 0x03, 0xad, - 0xfa, 0xaf, 0x4a, 0x50, 0xe5, 0x2c, 0xb2, 0x62, 0xfb, 0xee, 0xde, 0x03, 0xd8, 0x20, 0x48, 0x6c, - 0x83, 0x68, 0x14, 0x5f, 0xf3, 0xac, 0xc3, 0xb9, 0xfb, 0x43, 0x2f, 0xb1, 0x3f, 0xac, 0x8c, 0x4a, - 0xe8, 0xf0, 0xed, 0xe1, 0xbb, 0x0a, 0x9c, 0x92, 0x6a, 0x3f, 0x80, 0xdd, 0xc1, 0x88, 0xef, 0x0e, - 0x2f, 0x8f, 0xf8, 0x7d, 0x39, 0x9b, 0x83, 0x13, 0xfb, 0x2c, 0x26, 0xb8, 0x9f, 0x01, 0xd8, 0x60, - 0xe2, 0x64, 0x2d, 0xd2, 0x93, 0xc2, 0x29, 0xaf, 0x87, 0x10, 0x2c, 0xd5, 0x8a, 0xc9, 0xac, 0xd2, - 0xa1, 0x32, 0xeb, 0xbf, 0x8e, 0xc1, 0x7c, 0x6a, 0xd8, 0xd3, 0x72, 0x44, 0xf9, 0x11, 0xc9, 0x91, - 0xd2, 0x8f, 0x42, 0x8e, 0x8c, 0x15, 0x92, 0x23, 0x43, 0xef, 0x13, 0xc8, 0x05, 0xd4, 0x33, 0xbb, - 0xbc, 0x59, 0xc7, 0xd7, 0x5c, 0xff, 0x96, 0xd9, 0x23, 0x42, 0xe2, 0xfc, 0xb9, 0xe1, 0x58, 0x96, - 0xb6, 0xe0, 0x82, 0x67, 0x35, 0x85, 0x09, 0x67, 0x60, 0x57, 0x7f, 0x57, 0x81, 0xb1, 0x06, 0x6e, - 0xa1, 0xa7, 0x62, 0xfa, 0xf6, 0x43, 0xb2, 0xbe, 0x7d, 0x6f, 0x7f, 0x69, 0xb2, 0x81, 0x5b, 0x92, - 0xea, 0xfd, 0x57, 0x15, 0x98, 0xd7, 0x1d, 0xdb, 0xd7, 0x68, 0x2f, 0x30, 0xdf, 0x94, 0x82, 0x05, - 0x50, 0x48, 0xd5, 0x6c, 0x24, 0x90, 0xd5, 0x1f, 0x16, 0x1d, 0x98, 0x4f, 0x42, 0x3c, 0x9c, 0xa6, - 0xac, 0xae, 0xc3, 0x54, 0xc3, 0x72, 0x06, 0x46, 0xcb, 0xde, 0x74, 0x8e, 0x51, 0x5f, 0xfa, 0x9e, - 0x02, 0xd3, 0x0c, 0x6f, 0xdb, 0x75, 0x36, 0x4d, 0x8b, 0xbc, 0x3f, 0xd4, 0x76, 0xb9, 0xc7, 0x79, - 0x62, 0x99, 0xa9, 0xd1, 0x72, 0xc5, 0xf7, 0x89, 0x1a, 0x2d, 0x77, 0x39, 0x47, 0x52, 0xfe, 0xe2, - 0x64, 0xfc, 0xcb, 0x98, 0xac, 0xbc, 0x04, 0x15, 0x5d, 0xab, 0x0f, 0x6c, 0xc3, 0x0a, 0xf9, 0x82, - 0xf6, 0xb2, 0x51, 0xe3, 0x65, 0x38, 0x84, 0xa2, 0xbb, 0x00, 0x91, 0x6b, 0x43, 0x4c, 0xc3, 0x95, - 0xd1, 0xdc, 0x29, 0x1d, 0xe2, 0xfb, 0xa6, 0xdd, 0xf5, 0xa2, 0xa9, 0x8f, 0x60, 0x58, 0xa2, 0x86, - 0x7e, 0x0a, 0x66, 0xc4, 0x20, 0xb7, 0x7a, 0x5a, 0x57, 0x58, 0x9c, 0x05, 0x47, 0x6a, 0x55, 0x42, - 0x54, 0x3f, 0x2b, 0x08, 0xcf, 0xc8, 0xa5, 0x1e, 0x8e, 0x53, 0x43, 0x7b, 0x30, 0xdd, 0x93, 0xad, - 0xe8, 0xf1, 0xe2, 0x1b, 0x9a, 0x64, 0x51, 0xd7, 0xcf, 0x08, 0xe2, 0xd3, 0x31, 0xfb, 0x3b, 0x46, - 0x2a, 0xc3, 0x18, 0x28, 0x9f, 0x94, 0x31, 0x40, 0x60, 0x92, 0x2f, 0x6f, 0x6f, 0x61, 0x82, 0x7d, - 0xe0, 0x0b, 0x45, 0x3e, 0x90, 0x4b, 0x8a, 0xc8, 0x57, 0xc7, 0x7f, 0x7b, 0x38, 0xc0, 0x8d, 0x76, - 0x60, 0x9a, 0xca, 0xf5, 0x0e, 0xb1, 0x88, 0xee, 0x3b, 0xee, 0xc2, 0x64, 0x71, 0x5f, 0x58, 0x47, - 0xc2, 0xc3, 0x9d, 0x29, 0x72, 0x09, 0x8e, 0xd1, 0x09, 0xa5, 0x5f, 0x25, 0x57, 0xfa, 0x0d, 0xa0, - 0xba, 0x23, 0x79, 0x35, 0xa6, 0xd8, 0x20, 0x7c, 0xb2, 0x48, 0xc7, 0x22, 0x17, 0x47, 0xfd, 0xb4, - 0x20, 0x54, 0x95, 0xdd, 0x21, 0x32, 0x1d, 0x75, 0xbf, 0x02, 0xf3, 0x0d, 0x6b, 0xe0, 0xf9, 0xc4, - 0xad, 0x09, 0x67, 0x33, 0x71, 0xd1, 0xe7, 0x14, 0x38, 0xc7, 0xfe, 0x6d, 0x3a, 0x77, 0xec, 0x26, - 0xb1, 0xb4, 0xbd, 0xda, 0x26, 0xad, 0x61, 0x18, 0x47, 0x93, 0x40, 0xcd, 0x81, 0xd0, 0x23, 0x98, - 0x7b, 0xa6, 0x93, 0x89, 0x11, 0xe7, 0x50, 0x42, 0x3f, 0xa7, 0xc0, 0xc3, 0x19, 0xa0, 0x26, 0xb1, - 0x88, 0x4f, 0x84, 0x0c, 0x38, 0x6a, 0x3f, 0xce, 0x1f, 0xec, 0x2f, 0x3d, 0xdc, 0xc9, 0x43, 0x8a, - 0xf3, 0xe9, 0xa1, 0xbf, 0xa6, 0xc0, 0x62, 0x06, 0xf4, 0x8a, 0x66, 0x5a, 0x03, 0x97, 0x08, 0x35, - 0xfa, 0xa8, 0xdd, 0xb9, 0x70, 0xb0, 0xbf, 0xb4, 0xd8, 0xc9, 0xc5, 0x8a, 0x0f, 0xa1, 0x88, 0x3e, - 0x03, 0x67, 0x43, 0xe8, 0xba, 0x6d, 0x13, 0x62, 0x10, 0x83, 0x69, 0x26, 0xe3, 0x85, 0xba, 0xf2, - 0xf0, 0xc1, 0xfe, 0xd2, 0xd9, 0x4e, 0x16, 0x42, 0x9c, 0x4d, 0x07, 0x75, 0xe1, 0x7c, 0x04, 0xf0, - 0x4d, 0xcb, 0xbc, 0xcb, 0x30, 0xdd, 0xda, 0x72, 0x89, 0xb7, 0xe5, 0x58, 0x06, 0x13, 0x16, 0x4a, - 0xfd, 0x83, 0x07, 0xfb, 0x4b, 0xe7, 0x3b, 0x87, 0x55, 0xc4, 0x87, 0xe3, 0x41, 0x06, 0x4c, 0x7b, - 0xba, 0x66, 0xb7, 0x6c, 0x9f, 0xb8, 0x3b, 0x9a, 0xb5, 0x30, 0x51, 0xe8, 0x03, 0xf9, 0x12, 0x95, - 0xf0, 0xe0, 0x18, 0x56, 0xf4, 0x71, 0xa8, 0x90, 0xdd, 0xbe, 0x66, 0x1b, 0x84, 0x8b, 0x85, 0xa9, - 0xfa, 0xa3, 0x74, 0x33, 0x5a, 0x11, 0x65, 0xf7, 0xf6, 0x97, 0xa6, 0x83, 0xff, 0x57, 0x1d, 0x83, - 0xe0, 0xb0, 0x36, 0xfa, 0x8b, 0x70, 0xa6, 0xa7, 0xed, 0xae, 0x39, 0x06, 0x61, 0x42, 0x8e, 0xca, - 0x3c, 0x36, 0x11, 0x95, 0x42, 0xfd, 0x5c, 0x38, 0xd8, 0x5f, 0x3a, 0xb3, 0x9a, 0x81, 0x0f, 0x67, - 0x52, 0xa1, 0xd3, 0xd0, 0xd3, 0x76, 0xaf, 0xba, 0x9a, 0x4e, 0x36, 0x07, 0xd6, 0x2d, 0xe2, 0xf6, - 0x4c, 0x9b, 0x6b, 0x93, 0x44, 0x77, 0x6c, 0x83, 0x8a, 0x12, 0xe5, 0x52, 0x99, 0x4f, 0xc3, 0xea, - 0x61, 0x15, 0xf1, 0xe1, 0x78, 0xd0, 0xb3, 0x30, 0x6d, 0x76, 0x6d, 0xc7, 0x25, 0xb7, 0x34, 0xd3, - 0xf6, 0xbd, 0x05, 0x60, 0x8e, 0x57, 0x36, 0xac, 0x2d, 0xa9, 0x1c, 0xc7, 0x6a, 0xa9, 0xff, 0x43, - 0x81, 0xaa, 0x10, 0x30, 0x4c, 0x0f, 0xdc, 0x80, 0xb2, 0x4e, 0xf5, 0x00, 0x21, 0x48, 0x5e, 0x2a, - 0xac, 0x6f, 0x50, 0x6c, 0x91, 0xb2, 0xc1, 0x8a, 0x30, 0x47, 0x8d, 0x76, 0x32, 0xb4, 0x85, 0xfa, - 0x68, 0xda, 0x02, 0xa3, 0x76, 0x1f, 0x4d, 0x41, 0xdd, 0x1f, 0x83, 0xa9, 0x86, 0x63, 0x1b, 0x26, - 0xb3, 0x30, 0x9e, 0x8e, 0x69, 0xbc, 0xe7, 0x65, 0x99, 0x7f, 0x6f, 0x7f, 0x69, 0x26, 0xac, 0x28, - 0x6d, 0x02, 0xcf, 0x87, 0x66, 0x39, 0x57, 0x81, 0x3f, 0x18, 0xb7, 0xa7, 0xef, 0xed, 0x2f, 0x9d, - 0x0a, 0x9b, 0xc5, 0x4d, 0x6c, 0xb4, 0x03, 0x88, 0x1a, 0x4a, 0xb7, 0x5c, 0xcd, 0xf6, 0x38, 0x5a, - 0xca, 0x82, 0x63, 0x47, 0xb6, 0x52, 0x42, 0x3b, 0xea, 0x46, 0x0a, 0x1b, 0xce, 0xa0, 0x80, 0xde, - 0x86, 0x59, 0x5a, 0xba, 0xde, 0x37, 0x34, 0x9f, 0x48, 0xf2, 0xe7, 0x48, 0x96, 0x91, 0xa0, 0x39, - 0x7b, 0x23, 0x86, 0x09, 0x27, 0x30, 0x73, 0x0b, 0x41, 0xf3, 0x1c, 0x9b, 0x89, 0x96, 0x98, 0x85, - 0x40, 0x4b, 0xb1, 0x80, 0xa2, 0x27, 0x61, 0xb2, 0x47, 0x3c, 0x4f, 0xeb, 0x12, 0x26, 0x2b, 0xa6, - 0x22, 0x85, 0x60, 0x95, 0x17, 0xe3, 0x00, 0x8e, 0x3e, 0x0c, 0x65, 0xdd, 0x31, 0x88, 0xb7, 0x30, - 0xc9, 0xb8, 0xf9, 0x1c, 0xe3, 0x25, 0x5a, 0x70, 0x6f, 0x7f, 0x69, 0x8a, 0x59, 0x9d, 0xf4, 0x17, - 0xe6, 0x95, 0xd4, 0x5f, 0xa6, 0xfa, 0x79, 0xc2, 0xce, 0x19, 0xc2, 0xb2, 0x79, 0x70, 0x4e, 0x55, - 0xf5, 0x4b, 0x25, 0x38, 0x43, 0x7b, 0xe8, 0x3a, 0x96, 0x45, 0xf7, 0xae, 0xbe, 0xe5, 0xec, 0xf5, - 0x88, 0xfd, 0x20, 0xce, 0x36, 0x82, 0x71, 0x28, 0xe5, 0x8e, 0x43, 0x2f, 0x35, 0x0e, 0x63, 0x45, - 0xc6, 0x21, 0x64, 0x97, 0xfb, 0x8c, 0xc5, 0x7f, 0x53, 0x60, 0x21, 0x6b, 0x2c, 0x1e, 0x80, 0x55, - 0xd5, 0x8b, 0x5b, 0x55, 0xd7, 0x8a, 0x5a, 0xdf, 0xc9, 0xae, 0xe7, 0x58, 0x57, 0x3f, 0x2c, 0xc1, - 0xb9, 0xa8, 0x7a, 0xcb, 0xf6, 0x7c, 0xcd, 0xb2, 0xb8, 0x9f, 0xe3, 0xe4, 0xe7, 0xbd, 0x1f, 0x33, - 0x8e, 0xd7, 0x46, 0xfb, 0x54, 0xb9, 0xef, 0xb9, 0xde, 0xcb, 0xdd, 0x84, 0xf7, 0xb2, 0x7d, 0x8c, - 0x34, 0x0f, 0x77, 0x64, 0xfe, 0x4f, 0x05, 0x16, 0xb3, 0x1b, 0x3e, 0x00, 0xa6, 0x72, 0xe2, 0x4c, - 0xf5, 0xa9, 0xe3, 0xfb, 0xea, 0x1c, 0xb6, 0xfa, 0x07, 0xa5, 0xbc, 0xaf, 0x65, 0xe6, 0xfb, 0x26, - 0x9c, 0xa2, 0x76, 0x95, 0xe7, 0x0b, 0x37, 0xdb, 0xd1, 0xce, 0x9f, 0x03, 0x67, 0xd6, 0x29, 0x1c, - 0xc7, 0x81, 0x93, 0x48, 0xd1, 0x1a, 0x4c, 0x52, 0x63, 0x8a, 0xe2, 0x2f, 0x0d, 0x8f, 0x3f, 0x94, - 0xf9, 0x1d, 0xde, 0x16, 0x07, 0x48, 0xd0, 0x4f, 0xc2, 0x8c, 0x11, 0xae, 0xa8, 0xfb, 0x1c, 0x3e, - 0x25, 0xb1, 0x32, 0x87, 0x68, 0x53, 0x6e, 0x8d, 0xe3, 0xc8, 0xd4, 0x3f, 0x55, 0xe0, 0xd1, 0xc3, - 0x78, 0x0b, 0xbd, 0x03, 0xa0, 0x07, 0x9b, 0x38, 0x0f, 0x3f, 0x28, 0xaa, 0x06, 0x05, 0x58, 0xa2, - 0x05, 0x1a, 0x16, 0x79, 0x58, 0x22, 0x92, 0x71, 0xa6, 0x55, 0x3a, 0xa1, 0x33, 0x2d, 0xf5, 0x7f, - 0x29, 0xb2, 0x28, 0x92, 0xe7, 0xf6, 0xfd, 0x26, 0x8a, 0xe4, 0xbe, 0xe7, 0x7a, 0xec, 0xfe, 0x7d, - 0x09, 0x2e, 0x66, 0x37, 0x91, 0xf6, 0xde, 0x57, 0x60, 0xa2, 0xcf, 0x63, 0x44, 0xc6, 0xd8, 0xde, - 0x78, 0x89, 0x4a, 0x16, 0x1e, 0xc1, 0x71, 0x6f, 0x7f, 0x69, 0x31, 0x4b, 0xd0, 0x8b, 0xd8, 0x0f, - 0xd1, 0x0e, 0x99, 0x09, 0xbf, 0x05, 0xd7, 0xb1, 0x3e, 0x3a, 0xa4, 0x70, 0xd1, 0x36, 0x88, 0x35, - 0xb4, 0xab, 0xe2, 0xb3, 0x0a, 0xcc, 0xc6, 0x38, 0xda, 0x5b, 0x28, 0x33, 0x1e, 0x2d, 0x74, 0x9c, - 0x10, 0x5b, 0x2a, 0xd1, 0xce, 0x1d, 0x2b, 0xf6, 0x70, 0x82, 0x60, 0x42, 0xcc, 0xca, 0xa3, 0xfa, - 0xbe, 0x13, 0xb3, 0x72, 0xe7, 0x73, 0xc4, 0xec, 0x2f, 0x95, 0xf2, 0xbe, 0x96, 0x89, 0xd9, 0x3b, - 0x30, 0x15, 0xc4, 0xe0, 0x05, 0xe2, 0xe2, 0xca, 0xa8, 0x7d, 0xe2, 0xe8, 0xa2, 0xa3, 0xf4, 0xa0, - 0xc4, 0xc3, 0x11, 0x2d, 0xf4, 0x79, 0x05, 0x20, 0x9a, 0x18, 0xb1, 0xa8, 0x6e, 0x1d, 0xdf, 0x70, - 0x48, 0x6a, 0xcd, 0x2c, 0x5d, 0xd2, 0x12, 0x53, 0x48, 0x74, 0xd5, 0x6f, 0x96, 0x00, 0xa5, 0xfb, - 0x4e, 0xd5, 0xcd, 0x6d, 0xd3, 0x36, 0x92, 0x6a, 0xf7, 0x75, 0xd3, 0x36, 0x30, 0x83, 0x0c, 0xa1, - 0x90, 0xbe, 0x04, 0xa7, 0xba, 0x96, 0xb3, 0xa1, 0x59, 0xd6, 0x9e, 0x08, 0xeb, 0x63, 0x2b, 0xb4, - 0x52, 0x3f, 0x4d, 0x37, 0xa6, 0xab, 0x71, 0x10, 0x4e, 0xd6, 0x45, 0x7d, 0x98, 0x73, 0xa9, 0x71, - 0xac, 0x9b, 0x16, 0x33, 0x50, 0x9c, 0x81, 0x5f, 0xd0, 0xfb, 0x72, 0xe6, 0x60, 0x7f, 0x69, 0x0e, - 0x27, 0x70, 0xe1, 0x14, 0x76, 0xf4, 0x38, 0x4c, 0xf6, 0x5d, 0xb3, 0xa7, 0xb9, 0x7b, 0xcc, 0x04, - 0xaa, 0xd4, 0xab, 0x74, 0x87, 0x6b, 0xf3, 0x22, 0x1c, 0xc0, 0xd4, 0xcf, 0x2b, 0x30, 0xd9, 0x70, - 0x5c, 0xd2, 0x5c, 0xeb, 0xa0, 0x3d, 0xa8, 0x4a, 0x61, 0xa4, 0x62, 0xbd, 0x14, 0x64, 0x20, 0x86, - 0xb1, 0x16, 0x61, 0x0b, 0x82, 0xd5, 0xc2, 0x02, 0x2c, 0xd3, 0x52, 0xdb, 0x74, 0xe2, 0x92, 0x6d, - 0xd0, 0x0b, 0x30, 0xde, 0x73, 0x8c, 0xc0, 0x5e, 0x7a, 0x22, 0x98, 0x96, 0x55, 0xc7, 0xa0, 0x76, - 0xf1, 0xb9, 0x74, 0x0b, 0xe6, 0x6e, 0x61, 0x6d, 0xd4, 0xaf, 0x29, 0x30, 0x46, 0x3f, 0x4a, 0x85, - 0x09, 0xc3, 0xe9, 0x69, 0xa6, 0x2d, 0xb0, 0xb0, 0xb0, 0xbf, 0x26, 0x2b, 0xc1, 0x02, 0x82, 0xfa, - 0x30, 0x15, 0xec, 0x4d, 0x23, 0x1d, 0x03, 0x37, 0xd7, 0x3a, 0x61, 0xe8, 0x4c, 0xb8, 0x60, 0x82, - 0x12, 0x0f, 0x47, 0x44, 0x54, 0x0d, 0xe6, 0x9b, 0x6b, 0x9d, 0x96, 0xad, 0x5b, 0x03, 0x83, 0xac, - 0xec, 0xb2, 0x3f, 0x74, 0xca, 0x4c, 0x5e, 0x22, 0x42, 0x0d, 0xd9, 0x94, 0x89, 0x4a, 0x38, 0x80, - 0xd1, 0x6a, 0x84, 0xb7, 0x10, 0x71, 0x72, 0xac, 0x9a, 0x40, 0x82, 0x03, 0x98, 0xfa, 0xbd, 0x12, - 0x54, 0xa5, 0x0e, 0x21, 0x0b, 0x26, 0xf9, 0xe7, 0x06, 0x61, 0x2a, 0x2b, 0x05, 0x3f, 0x31, 0xde, - 0x6b, 0x4e, 0x9d, 0x0f, 0xa8, 0x87, 0x03, 0x12, 0x32, 0xfb, 0x95, 0xf2, 0xd9, 0x0f, 0x2d, 0x03, - 0xf0, 0x80, 0x1c, 0x76, 0xba, 0xca, 0xf7, 0x3c, 0xb6, 0xc2, 0x3b, 0x61, 0x29, 0x96, 0x6a, 0xa0, - 0x47, 0xc5, 0x42, 0xe5, 0xe7, 0xb0, 0x95, 0xc4, 0x22, 0xdd, 0x84, 0xf2, 0x5d, 0xc7, 0x26, 0x9e, - 0x38, 0x7c, 0x38, 0xa6, 0x0f, 0x9c, 0xa2, 0x62, 0xf8, 0x4d, 0x8a, 0x17, 0x73, 0xf4, 0xea, 0xaf, - 0x28, 0x00, 0x4d, 0xcd, 0xd7, 0xb8, 0xaf, 0x7c, 0x88, 0x50, 0xc7, 0x47, 0x63, 0xf2, 0xa5, 0x92, - 0x3a, 0xce, 0x1c, 0xf7, 0xcc, 0xbb, 0xc1, 0xe7, 0x87, 0x7a, 0x0b, 0xc7, 0xde, 0x31, 0xef, 0x12, - 0xcc, 0xe0, 0xe8, 0x29, 0x98, 0x22, 0xb6, 0xee, 0xee, 0xf5, 0x7d, 0x62, 0xb0, 0x11, 0xa8, 0xf0, - 0x13, 0xf0, 0x95, 0xa0, 0x10, 0x47, 0x70, 0xf5, 0x69, 0x88, 0x2b, 0x9f, 0xf7, 0xef, 0xa5, 0xba, - 0x03, 0x95, 0x15, 0xdb, 0xe8, 0x3b, 0xa6, 0xed, 0x0f, 0xf1, 0x4d, 0xe7, 0x61, 0x6c, 0xe0, 0x5a, - 0xe2, 0x93, 0xaa, 0xa2, 0xc2, 0xd8, 0x3a, 0xbe, 0x81, 0x69, 0x39, 0x7a, 0x12, 0x26, 0xfb, 0x03, - 0xb7, 0xef, 0x78, 0xc1, 0x77, 0x85, 0x5a, 0x76, 0x9b, 0x17, 0xe3, 0x00, 0xae, 0xde, 0x53, 0x60, - 0x6e, 0x65, 0xb7, 0x6f, 0xba, 0x2c, 0xec, 0x92, 0xb8, 0x54, 0x83, 0xa4, 0xed, 0x77, 0xf8, 0xbf, - 0xa2, 0x0f, 0x61, 0x7b, 0x51, 0x03, 0x07, 0x70, 0xb4, 0x09, 0xb3, 0x84, 0x35, 0x67, 0x5b, 0x85, - 0x16, 0xba, 0xfc, 0x8f, 0xe2, 0x58, 0xe2, 0x51, 0xbd, 0x31, 0x2c, 0x38, 0x81, 0x15, 0x75, 0x60, - 0x56, 0xb7, 0x34, 0xcf, 0x33, 0x37, 0x4d, 0x3d, 0x0a, 0x28, 0x98, 0xaa, 0x3f, 0x45, 0xdb, 0x36, - 0x62, 0x90, 0x7b, 0xfb, 0x4b, 0x67, 0x45, 0x3f, 0xe3, 0x00, 0x9c, 0x40, 0xa1, 0xfe, 0xae, 0x02, - 0x53, 0xa1, 0xde, 0xfc, 0x9e, 0xf2, 0x10, 0xa1, 0x4b, 0x50, 0x31, 0x4c, 0x4f, 0xde, 0xec, 0xd8, - 0xa1, 0x6b, 0x53, 0x94, 0xe1, 0x10, 0xaa, 0x7a, 0x50, 0xb9, 0x2a, 0x96, 0x15, 0x5a, 0x84, 0x92, - 0x19, 0xec, 0xb5, 0x20, 0x3e, 0xa0, 0xd4, 0x6a, 0xe2, 0x92, 0x69, 0x84, 0x5c, 0x55, 0xca, 0xe5, - 0x2a, 0x69, 0xda, 0xc7, 0x0e, 0x9f, 0x76, 0xf5, 0x1b, 0x0a, 0x54, 0xaf, 0x99, 0x1b, 0xc4, 0xe5, - 0xce, 0x67, 0x26, 0x17, 0x63, 0x81, 0xf8, 0xd5, 0xac, 0x20, 0x7c, 0xb4, 0x0b, 0x53, 0x9e, 0xbe, - 0x45, 0x8c, 0x81, 0x15, 0x86, 0x3c, 0x14, 0x0a, 0xb7, 0x97, 0x48, 0x77, 0x04, 0x3e, 0x29, 0xe0, - 0x30, 0xa0, 0x80, 0x23, 0x62, 0xea, 0xbb, 0x70, 0x3a, 0xa3, 0x11, 0x5a, 0x82, 0xb2, 0xe7, 0x6b, - 0xae, 0x2f, 0xc6, 0x8c, 0x89, 0x1b, 0x16, 0xdf, 0x81, 0x79, 0x39, 0x7a, 0x18, 0xc6, 0x88, 0x6d, - 0x88, 0x41, 0x9b, 0xa4, 0xab, 0x6c, 0xc5, 0x36, 0x30, 0x2d, 0xa3, 0x53, 0x64, 0x39, 0x31, 0x66, - 0x64, 0x53, 0x74, 0x43, 0x94, 0xe1, 0x10, 0xaa, 0xfe, 0x93, 0x71, 0x38, 0x7f, 0xcd, 0x71, 0xcd, - 0xbb, 0x8e, 0xed, 0x6b, 0x56, 0xdb, 0x31, 0xa2, 0x43, 0x3c, 0x31, 0xdd, 0x5f, 0x50, 0xe0, 0x21, - 0xbd, 0x3f, 0x68, 0xd9, 0xa6, 0x6f, 0x6a, 0xc1, 0xd9, 0x4a, 0x9b, 0xb8, 0xa6, 0x53, 0xf4, 0x2c, - 0x8f, 0x05, 0x70, 0x37, 0xda, 0xeb, 0x59, 0x28, 0x71, 0x1e, 0x2d, 0x76, 0xa4, 0x68, 0x38, 0x77, - 0x6c, 0xd6, 0xb9, 0x8e, 0xcf, 0x82, 0xca, 0xef, 0x46, 0x9f, 0x58, 0xf0, 0x48, 0xb1, 0x99, 0x89, - 0x11, 0xe7, 0x50, 0x42, 0x9f, 0x81, 0xb3, 0x26, 0xef, 0x1c, 0x26, 0x9a, 0x61, 0xda, 0xc4, 0xf3, - 0xd8, 0xc1, 0xda, 0x28, 0x67, 0x66, 0xad, 0x2c, 0x84, 0x38, 0x9b, 0x0e, 0x7a, 0x0b, 0xc0, 0xdb, - 0xb3, 0x75, 0x31, 0xfe, 0xe5, 0x42, 0x54, 0xf9, 0x4e, 0x1a, 0x62, 0xc1, 0x12, 0x46, 0xba, 0x99, - 0xf8, 0x8e, 0x45, 0x5c, 0xcd, 0xd6, 0xb9, 0xef, 0x5b, 0xe1, 0x9b, 0xc9, 0xad, 0xa0, 0x10, 0x47, - 0x70, 0xf5, 0xef, 0x29, 0x30, 0x29, 0x2e, 0x6b, 0xa0, 0x27, 0x12, 0x0a, 0x55, 0xe8, 0x00, 0x4b, - 0x28, 0x55, 0x7b, 0xcc, 0x79, 0x21, 0x74, 0x71, 0x21, 0xa4, 0x0a, 0xed, 0xc8, 0x82, 0x70, 0xa4, - 0xd8, 0xc7, 0x9c, 0x18, 0x81, 0xb2, 0x2f, 0x11, 0x53, 0xbf, 0xae, 0xc0, 0x7c, 0xaa, 0xd5, 0x10, - 0x66, 0xc0, 0x03, 0xf4, 0xbe, 0xff, 0x51, 0x15, 0xd8, 0xbd, 0x9c, 0x5a, 0xbb, 0xd5, 0x21, 0xee, - 0x4e, 0xb8, 0x08, 0x7f, 0x56, 0x81, 0xb9, 0xe8, 0x9c, 0x48, 0xf4, 0x42, 0x29, 0x1e, 0x4c, 0x74, - 0x3d, 0x81, 0xab, 0xbe, 0x20, 0xbe, 0x7b, 0x2e, 0x09, 0xc1, 0x29, 0xba, 0xe8, 0x4b, 0x0a, 0xcc, - 0x69, 0xf1, 0x7b, 0x39, 0x81, 0xc8, 0x2c, 0x14, 0x6f, 0x9a, 0xb8, 0xe3, 0x13, 0xf5, 0x25, 0x01, - 0xf0, 0x70, 0x8a, 0x2c, 0x7a, 0x16, 0xa6, 0xb5, 0xbe, 0x59, 0x1b, 0x18, 0x26, 0xb1, 0xf5, 0xf0, - 0x32, 0x07, 0x73, 0x51, 0xd4, 0xda, 0xad, 0xb0, 0x1c, 0xc7, 0x6a, 0x85, 0x17, 0x6f, 0xc4, 0x40, - 0x8e, 0x8f, 0x78, 0xf1, 0x46, 0x8c, 0x61, 0x74, 0xf1, 0x46, 0x0c, 0x9d, 0x4c, 0x04, 0xfd, 0x04, - 0x3c, 0xcc, 0xf7, 0x9a, 0xba, 0xe6, 0x99, 0x7a, 0x6d, 0xe0, 0x6f, 0x11, 0xdb, 0x0f, 0x34, 0x06, - 0x6e, 0x8b, 0xb1, 0xe0, 0x82, 0x95, 0xbc, 0x4a, 0x38, 0xbf, 0x3d, 0xb2, 0x01, 0x1c, 0xd3, 0xd0, - 0xc5, 0xf7, 0xf0, 0xf3, 0xed, 0x42, 0xb1, 0x1f, 0x37, 0x5b, 0xcd, 0x86, 0xf8, 0x1c, 0x26, 0x26, - 0xa2, 0xdf, 0x58, 0xa2, 0x80, 0xbe, 0xac, 0xc0, 0x8c, 0x60, 0x72, 0x41, 0x73, 0x92, 0xcd, 0xff, - 0x9b, 0x45, 0x99, 0x31, 0xc1, 0xf0, 0xcb, 0x58, 0x46, 0xce, 0x23, 0x68, 0xc3, 0x68, 0xa7, 0x18, - 0x0c, 0xc7, 0xfb, 0x81, 0xfe, 0x86, 0x02, 0x67, 0x3c, 0xe2, 0xee, 0x98, 0x3a, 0xa9, 0xe9, 0xba, - 0x33, 0xb0, 0x83, 0x49, 0xae, 0x14, 0xbf, 0x04, 0xd1, 0xc9, 0xc0, 0xc7, 0x8f, 0xd9, 0xb3, 0x20, - 0x38, 0x93, 0x3e, 0xdd, 0xbf, 0x4e, 0xdd, 0xd1, 0x7c, 0x7d, 0xab, 0xa1, 0xe9, 0x5b, 0x4c, 0x7f, - 0xe7, 0x27, 0xeb, 0x05, 0x17, 0xcd, 0x6b, 0x71, 0x54, 0xdc, 0xe1, 0x90, 0x28, 0xc4, 0x49, 0x82, - 0xc8, 0x83, 0x8a, 0x4b, 0xde, 0x19, 0x10, 0x8f, 0x1d, 0xbf, 0x53, 0xe2, 0xad, 0x91, 0x67, 0x0c, - 0x0b, 0x84, 0x5c, 0xc7, 0x08, 0x7e, 0xe1, 0x90, 0x10, 0xea, 0xc2, 0x79, 0xce, 0xb9, 0x35, 0xdb, - 0xb1, 0xf7, 0x7a, 0xce, 0xc0, 0x4b, 0x70, 0x7f, 0x95, 0x71, 0x3f, 0x0b, 0x30, 0x58, 0x39, 0xac, - 0x22, 0x3e, 0x1c, 0x0f, 0x7a, 0x1d, 0x2a, 0x64, 0x87, 0xd8, 0xfe, 0xad, 0x5b, 0x37, 0x16, 0xa6, - 0x0b, 0x6d, 0x8d, 0xec, 0x13, 0x56, 0x04, 0x0e, 0x1c, 0x62, 0x5b, 0x7c, 0x05, 0x50, 0x9a, 0x23, - 0xd1, 0x1c, 0x8c, 0x6d, 0x13, 0x7e, 0x6f, 0x6f, 0x0a, 0xd3, 0x7f, 0xd1, 0x19, 0x28, 0xef, 0x68, - 0xd6, 0x80, 0xab, 0xb2, 0x15, 0xcc, 0x7f, 0xbc, 0x50, 0xfa, 0xb8, 0xa2, 0x7e, 0x4b, 0x81, 0xb3, - 0x99, 0xc3, 0x86, 0x30, 0x9c, 0x63, 0x71, 0x19, 0xf6, 0xea, 0xc0, 0xd7, 0x7c, 0xd3, 0xee, 0xb6, - 0xec, 0x4d, 0xcb, 0xec, 0x6e, 0x71, 0xcd, 0xaf, 0xcc, 0xf5, 0x94, 0xd5, 0xcc, 0x1a, 0x38, 0xa7, - 0x25, 0x6a, 0xc1, 0xe9, 0x9e, 0xb6, 0x9b, 0x42, 0x58, 0x62, 0x08, 0xd9, 0xed, 0xcf, 0xd5, 0x34, - 0x18, 0x67, 0xb5, 0x51, 0xbf, 0x5a, 0x86, 0x47, 0x68, 0xc7, 0xa3, 0x2d, 0x73, 0x55, 0xb3, 0xb5, - 0xee, 0x7b, 0x73, 0x6b, 0xfa, 0x86, 0x02, 0x0f, 0x6d, 0x65, 0xab, 0xb3, 0x62, 0xd3, 0x7e, 0xb5, - 0x90, 0x52, 0x7f, 0x98, 0x86, 0xcc, 0x19, 0xf7, 0xd0, 0x2a, 0x38, 0xaf, 0x53, 0xe8, 0x15, 0x98, - 0xb3, 0x1d, 0x83, 0x34, 0x5a, 0x4d, 0xbc, 0xaa, 0x79, 0xdb, 0x9d, 0xc0, 0xe0, 0x2f, 0x73, 0x8f, - 0xde, 0x5a, 0x02, 0x86, 0x53, 0xb5, 0xd1, 0x0e, 0xa0, 0xbe, 0x63, 0xac, 0xec, 0x98, 0x7a, 0x10, - 0x52, 0x51, 0xdc, 0x8b, 0xc8, 0x22, 0xcc, 0xdb, 0x29, 0x6c, 0x38, 0x83, 0x02, 0xd3, 0xc7, 0x69, - 0x67, 0x56, 0x1d, 0xdb, 0xf4, 0x1d, 0x97, 0xc5, 0xfd, 0x8c, 0xa4, 0x96, 0x32, 0x3e, 0x5f, 0xcb, - 0xc4, 0x88, 0x73, 0x28, 0xa9, 0xff, 0x5b, 0x81, 0x53, 0x94, 0x2d, 0xda, 0xae, 0xb3, 0xbb, 0xf7, - 0x5e, 0x64, 0xc8, 0x27, 0x85, 0xaf, 0x92, 0x5b, 0x69, 0x67, 0x25, 0x3f, 0xe5, 0x14, 0xeb, 0x73, - 0xe4, 0x9a, 0x94, 0x0d, 0xd5, 0xb1, 0x7c, 0x43, 0x55, 0xfd, 0x8f, 0x0a, 0x57, 0x11, 0x03, 0x43, - 0xf1, 0x3d, 0xb9, 0x0e, 0x9f, 0x83, 0x19, 0x5a, 0xb6, 0xaa, 0xed, 0xb6, 0x9b, 0xb7, 0x1d, 0x2b, - 0x08, 0x47, 0x62, 0x87, 0x9f, 0xd7, 0x65, 0x00, 0x8e, 0xd7, 0x53, 0x7f, 0xed, 0x14, 0xb0, 0x0a, - 0x16, 0xf1, 0xdf, 0x8b, 0xdf, 0xf5, 0x34, 0x54, 0xf5, 0xfe, 0xa0, 0x71, 0xa5, 0xf3, 0xea, 0xc0, - 0xf1, 0x35, 0xe1, 0xc3, 0x64, 0x7a, 0x5f, 0xa3, 0xbd, 0x1e, 0x14, 0x63, 0xb9, 0x0e, 0x5d, 0xe1, - 0x7a, 0x7f, 0x20, 0x64, 0x66, 0x5b, 0x3e, 0xc5, 0x63, 0x2b, 0xbc, 0xd1, 0x5e, 0x8f, 0xc1, 0x70, - 0xaa, 0x36, 0xfa, 0x0c, 0x4c, 0x13, 0xb1, 0xf8, 0xae, 0x69, 0xae, 0x21, 0xd6, 0x76, 0xe1, 0x8d, - 0x3b, 0x1c, 0xda, 0x60, 0x45, 0x73, 0x75, 0x79, 0x45, 0x22, 0x81, 0x63, 0x04, 0x99, 0xea, 0x2a, - 0x7e, 0xd3, 0x99, 0x72, 0x8c, 0xe4, 0x62, 0x2f, 0x0b, 0xd5, 0x35, 0xaf, 0x12, 0xce, 0x6f, 0x8f, - 0x7e, 0x43, 0x81, 0x73, 0x21, 0xd4, 0xb4, 0xcd, 0xde, 0xa0, 0x87, 0x89, 0x6e, 0x69, 0x66, 0x4f, - 0xe8, 0xb1, 0xaf, 0x1d, 0xdb, 0x87, 0xc6, 0xd1, 0x73, 0x81, 0x93, 0x0d, 0xc3, 0x39, 0x5d, 0x42, - 0x5f, 0x57, 0xe0, 0x62, 0x00, 0x6a, 0x53, 0x4b, 0x72, 0xe0, 0x92, 0x28, 0xa0, 0x4d, 0x0c, 0xc9, - 0x64, 0x21, 0xf9, 0xf7, 0xd8, 0xc1, 0xfe, 0xd2, 0xc5, 0x95, 0xfb, 0xe0, 0xc6, 0xf7, 0xa5, 0x2e, - 0xb3, 0x4b, 0xc7, 0xd9, 0xf4, 0x85, 0xe2, 0x7b, 0x52, 0xec, 0x42, 0x49, 0xe0, 0x18, 0x41, 0xf4, - 0x9b, 0x0a, 0x3c, 0x24, 0x17, 0xc8, 0xdc, 0xc2, 0x35, 0xde, 0xd7, 0x8f, 0xad, 0x33, 0x09, 0xfc, - 0xdc, 0xb7, 0x94, 0x03, 0xc4, 0x79, 0xbd, 0xa2, 0xa2, 0xb7, 0xc7, 0x18, 0x93, 0x6b, 0xc5, 0x65, - 0x2e, 0x7a, 0x39, 0xaf, 0x7a, 0x38, 0x80, 0x51, 0x63, 0xb3, 0xef, 0x18, 0x6d, 0xd3, 0xf0, 0x6e, - 0x98, 0x3d, 0xd3, 0x67, 0x7a, 0xeb, 0x18, 0x1f, 0x8e, 0xb6, 0x63, 0xb4, 0x5b, 0x4d, 0x5e, 0x8e, - 0x63, 0xb5, 0x58, 0x18, 0xba, 0xd9, 0xd3, 0xba, 0xa4, 0x3d, 0xb0, 0xac, 0xb6, 0xeb, 0x30, 0x07, - 0x44, 0x93, 0x68, 0x86, 0x65, 0xda, 0xa4, 0xa0, 0x9e, 0xca, 0x96, 0x5b, 0x2b, 0x0f, 0x29, 0xce, - 0xa7, 0x87, 0x96, 0x01, 0x36, 0x35, 0xd3, 0xea, 0xdc, 0xd1, 0xfa, 0x37, 0xed, 0x85, 0x19, 0x26, - 0xc0, 0x98, 0xa5, 0x77, 0x25, 0x2c, 0xc5, 0x52, 0x0d, 0xca, 0x4d, 0x54, 0x0a, 0x62, 0xc2, 0x2f, - 0xc0, 0x2d, 0xcc, 0x1e, 0x13, 0x37, 0x05, 0x08, 0xf9, 0xf0, 0x5d, 0x97, 0x48, 0xe0, 0x18, 0x41, - 0xf4, 0x05, 0x05, 0x66, 0xbd, 0x3d, 0xcf, 0x27, 0xbd, 0xb0, 0x0f, 0xa7, 0x8e, 0xbb, 0x0f, 0xcc, - 0x35, 0xd3, 0x89, 0x11, 0xc1, 0x09, 0xa2, 0x48, 0x83, 0x47, 0xd8, 0xa8, 0x5e, 0x6d, 0x5c, 0x33, - 0xbb, 0x5b, 0x61, 0x70, 0x79, 0x9b, 0xb8, 0x3a, 0xb1, 0xfd, 0x85, 0x39, 0xc6, 0x37, 0x4b, 0x07, - 0xfb, 0x4b, 0x8f, 0xb4, 0xf2, 0xab, 0xe1, 0xc3, 0x70, 0xa0, 0xb7, 0x60, 0x51, 0x80, 0x6f, 0x38, - 0x77, 0x52, 0x14, 0xe6, 0x19, 0x05, 0x16, 0xf1, 0xdf, 0xca, 0xad, 0x85, 0x0f, 0xc1, 0x40, 0xad, - 0x02, 0x8f, 0xb8, 0xcc, 0xb3, 0x4a, 0x42, 0xe6, 0xf1, 0x16, 0x10, 0x63, 0x02, 0x66, 0x15, 0x74, - 0xd2, 0x60, 0x9c, 0xd5, 0x46, 0xdd, 0x2f, 0x71, 0x73, 0x26, 0xb5, 0x20, 0xd1, 0x4b, 0x70, 0xaa, - 0x47, 0x7a, 0x8e, 0xbb, 0x57, 0x0b, 0x52, 0x66, 0x08, 0xd7, 0x1a, 0xb3, 0x50, 0x57, 0xe3, 0x20, - 0x9c, 0xac, 0x4b, 0xb7, 0x4b, 0xf6, 0x05, 0x57, 0x3a, 0x51, 0xfb, 0x52, 0xb4, 0x5d, 0xb6, 0x12, - 0x30, 0x9c, 0xaa, 0x8d, 0x1a, 0x30, 0x2f, 0xca, 0x5a, 0x54, 0x6b, 0xf4, 0xae, 0xb8, 0x24, 0x38, - 0x6c, 0xa2, 0xfa, 0xd7, 0x7c, 0x2b, 0x09, 0xc4, 0xe9, 0xfa, 0xf4, 0x2b, 0xe8, 0x0f, 0xb9, 0x17, - 0xe3, 0xd1, 0x57, 0xac, 0xc5, 0x41, 0x38, 0x59, 0x37, 0x50, 0xeb, 0x63, 0x5d, 0x28, 0x47, 0x5f, - 0xb1, 0x96, 0x80, 0xe1, 0x54, 0x6d, 0xf5, 0x3f, 0x8d, 0xc3, 0x87, 0x86, 0xd8, 0xc4, 0x50, 0x2f, - 0x7b, 0xb8, 0xef, 0x23, 0x52, 0x96, 0x83, 0x20, 0x8d, 0xe5, 0x57, 0x07, 0x9a, 0xed, 0x9b, 0xfe, - 0xde, 0x90, 0xd3, 0xd3, 0xcf, 0x99, 0x9e, 0xa3, 0xd3, 0x1b, 0x76, 0x3a, 0xbd, 0xbc, 0xe9, 0x3c, - 0x3a, 0xc9, 0xe1, 0xa7, 0xbf, 0x97, 0x3d, 0xfd, 0x05, 0x47, 0xf5, 0xbe, 0xec, 0xd2, 0xcf, 0x61, - 0x97, 0x82, 0xa3, 0x3a, 0x04, 0x7b, 0xfd, 0xf1, 0x38, 0x3c, 0x36, 0xcc, 0x86, 0x5a, 0x90, 0xbf, - 0x32, 0xb6, 0xac, 0x13, 0xe5, 0xaf, 0xbc, 0x88, 0x98, 0x13, 0xe4, 0xaf, 0x0c, 0x92, 0x27, 0xcd, - 0x5f, 0x79, 0xa3, 0x7a, 0x52, 0xfc, 0x95, 0x37, 0xaa, 0x43, 0xf0, 0xd7, 0x9f, 0x24, 0xf7, 0x87, - 0x70, 0x1f, 0x6d, 0xc1, 0x98, 0xde, 0x1f, 0x14, 0x14, 0x52, 0xec, 0x98, 0xb3, 0xd1, 0x5e, 0xc7, - 0x14, 0x07, 0xc2, 0x30, 0xc1, 0xf9, 0xa7, 0xa0, 0x08, 0x62, 0x41, 0x3f, 0x9c, 0x25, 0xb1, 0xc0, - 0x44, 0x87, 0x8a, 0xf4, 0xb7, 0x48, 0x8f, 0xb8, 0x9a, 0xd5, 0xf1, 0x1d, 0x57, 0xeb, 0x16, 0x95, - 0x36, 0x6c, 0xa8, 0x56, 0x12, 0xb8, 0x70, 0x0a, 0x3b, 0x1d, 0x90, 0xbe, 0x69, 0x14, 0x94, 0x2f, - 0x6c, 0x40, 0xda, 0xad, 0x26, 0xa6, 0x38, 0xd4, 0xbf, 0x3d, 0x05, 0xd2, 0xd5, 0x22, 0x6a, 0xb7, - 0x69, 0x96, 0xe5, 0xdc, 0x69, 0xbb, 0xe6, 0x8e, 0x69, 0x91, 0x2e, 0x31, 0xc2, 0xbb, 0x27, 0x9e, - 0x38, 0x0c, 0x67, 0x8a, 0x64, 0x2d, 0xaf, 0x12, 0xce, 0x6f, 0x4f, 0xed, 0xf2, 0x79, 0x3d, 0x79, - 0xf1, 0x73, 0x94, 0x03, 0xbd, 0xd4, 0x2d, 0x52, 0xbe, 0x9e, 0x52, 0xc5, 0x38, 0x4d, 0x16, 0xfd, - 0xb4, 0xc2, 0x1d, 0x0e, 0xa1, 0x77, 0x55, 0xcc, 0xd9, 0xd5, 0x63, 0x3a, 0x8f, 0x88, 0x3c, 0x17, - 0x91, 0xff, 0x36, 0x4e, 0x90, 0x5a, 0x86, 0x67, 0xb7, 0xb3, 0xfc, 0xa4, 0x62, 0x66, 0x6f, 0x16, - 0xed, 0x4a, 0x8e, 0xe3, 0x95, 0x1f, 0x1e, 0x67, 0x56, 0xc0, 0xd9, 0x1d, 0x09, 0x47, 0x29, 0x74, - 0x1d, 0x09, 0x21, 0x50, 0x78, 0x94, 0x12, 0x3e, 0xa8, 0x68, 0x94, 0x42, 0x00, 0x8e, 0x13, 0x44, - 0x7d, 0x98, 0xda, 0x0e, 0xfc, 0x75, 0xc2, 0xbe, 0x6f, 0x14, 0xa5, 0x2e, 0x39, 0xfd, 0xf8, 0x21, - 0x75, 0x58, 0x88, 0x23, 0x22, 0x68, 0x0b, 0x26, 0xb7, 0xb9, 0x20, 0x12, 0x76, 0x79, 0x6d, 0x64, - 0xbb, 0x81, 0x9b, 0x87, 0xa2, 0x08, 0x07, 0xe8, 0xe5, 0x20, 0x95, 0xca, 0x7d, 0x62, 0x93, 0xbe, - 0xaa, 0xc0, 0xd9, 0x1d, 0xe2, 0xfa, 0xa6, 0x9e, 0xf4, 0x52, 0x4f, 0x15, 0xb7, 0x6d, 0x6e, 0x67, - 0x21, 0xe4, 0x6c, 0x92, 0x09, 0xc2, 0xd9, 0x5d, 0xa0, 0x96, 0x0e, 0x77, 0x36, 0x76, 0x7c, 0xcd, - 0x37, 0xf5, 0x5b, 0xce, 0x36, 0xb1, 0xe9, 0xc7, 0x8a, 0xb4, 0x8a, 0xc0, 0x04, 0x07, 0xb3, 0x74, - 0x56, 0xf2, 0xab, 0xe1, 0xc3, 0x70, 0xa8, 0x3f, 0x54, 0x20, 0xe5, 0x6e, 0x43, 0x3f, 0xaf, 0xc0, - 0xf4, 0x26, 0xd1, 0xfc, 0x81, 0x4b, 0xae, 0x6a, 0x7e, 0x18, 0xab, 0x7c, 0xfb, 0x38, 0xbc, 0x7c, - 0xcb, 0x57, 0x24, 0xc4, 0xfc, 0x3c, 0x31, 0x4c, 0x60, 0x20, 0x83, 0x70, 0xac, 0x07, 0x8b, 0x2f, - 0xc3, 0x7c, 0xaa, 0xe1, 0x91, 0x8e, 0x7d, 0xfe, 0xb9, 0xf0, 0xd6, 0x26, 0x73, 0x6a, 0xbe, 0x05, - 0x65, 0xcd, 0x30, 0xc2, 0x8c, 0x5d, 0xcf, 0x17, 0x3b, 0x37, 0x37, 0xe4, 0x90, 0x70, 0xf6, 0x13, - 0x73, 0xb4, 0xe8, 0x0a, 0x20, 0x2d, 0x76, 0x38, 0xb6, 0x1a, 0x45, 0xcc, 0x32, 0x2f, 0x7f, 0x2d, - 0x05, 0xc5, 0x19, 0x2d, 0xd4, 0x17, 0x61, 0x36, 0x7e, 0x87, 0xf5, 0x08, 0x11, 0x78, 0xea, 0x5f, - 0x56, 0x00, 0xa5, 0xf3, 0x65, 0x20, 0x17, 0x2a, 0xa2, 0x46, 0x30, 0xc5, 0x85, 0x1c, 0xb9, 0xc9, - 0xd8, 0xc0, 0x28, 0x26, 0x5f, 0x14, 0x78, 0x38, 0xa4, 0xa3, 0xfe, 0xa9, 0x02, 0x51, 0x4a, 0x20, - 0xf4, 0x31, 0xa8, 0x1a, 0xc4, 0xd3, 0x5d, 0xb3, 0xef, 0x47, 0xdf, 0x11, 0xe6, 0x3a, 0x68, 0x46, - 0x20, 0x2c, 0xd7, 0x43, 0x2a, 0x4c, 0xf8, 0x9a, 0xb7, 0xdd, 0x6a, 0x0a, 0x8b, 0x94, 0xe9, 0x0f, - 0xb7, 0x58, 0x09, 0x16, 0x90, 0xe8, 0x3e, 0xe8, 0xd8, 0x10, 0xf7, 0x41, 0xd1, 0xe6, 0x31, 0x5c, - 0x7e, 0x45, 0xf7, 0xbf, 0xf8, 0xaa, 0xfe, 0x61, 0x09, 0xe2, 0x59, 0x98, 0x8a, 0x0e, 0x41, 0xfa, - 0xb6, 0x6e, 0xe9, 0xc4, 0x6e, 0xeb, 0x7e, 0x98, 0xa5, 0x30, 0xe4, 0x39, 0x67, 0xf9, 0x99, 0x98, - 0x9c, 0x78, 0x90, 0x67, 0x8c, 0x0d, 0x6b, 0xa0, 0xe7, 0x59, 0xbc, 0x9c, 0x1f, 0xd8, 0xe9, 0x1f, - 0x0a, 0x96, 0x05, 0x15, 0x40, 0xe4, 0x9e, 0xb8, 0x8f, 0x1c, 0x7e, 0x3f, 0x2b, 0xc5, 0xbc, 0x05, - 0xfa, 0x98, 0x08, 0xaf, 0x2c, 0xc7, 0xee, 0x4c, 0x07, 0x17, 0xad, 0xe7, 0x63, 0x0d, 0xa3, 0x98, - 0x4b, 0xf5, 0xaf, 0x2b, 0x30, 0x29, 0x92, 0x9f, 0x0c, 0x11, 0xa1, 0xb9, 0x09, 0x65, 0x66, 0x07, - 0x8c, 0xa2, 0x22, 0x75, 0xb6, 0x1c, 0xc7, 0x8f, 0xa5, 0x80, 0x61, 0x61, 0x81, 0xec, 0x5f, 0xcc, - 0xd1, 0xab, 0x5f, 0x1b, 0x87, 0x8b, 0xa2, 0x4a, 0x4a, 0x03, 0x08, 0x97, 0xe0, 0x1e, 0x9c, 0x16, - 0xb3, 0xd4, 0x74, 0x35, 0x33, 0x3c, 0x35, 0x2c, 0x66, 0xd9, 0x89, 0xf3, 0xe4, 0x14, 0x3a, 0x9c, - 0x45, 0x83, 0x27, 0x3b, 0x60, 0xc5, 0xd7, 0x88, 0x66, 0xf9, 0x5b, 0x01, 0xed, 0xd2, 0x28, 0xc9, - 0x0e, 0xd2, 0xf8, 0x70, 0x26, 0x15, 0x76, 0x6a, 0x29, 0x00, 0x0d, 0x97, 0x68, 0xf2, 0x91, 0xe9, - 0x08, 0x51, 0x84, 0xab, 0x99, 0x18, 0x71, 0x0e, 0x25, 0xe6, 0x22, 0xd3, 0x76, 0x99, 0xc5, 0x8d, - 0x89, 0xef, 0x9a, 0x2c, 0x29, 0x0f, 0xe5, 0x6f, 0x6e, 0x23, 0xc7, 0x41, 0x38, 0x59, 0x17, 0xbd, - 0x00, 0xb3, 0xec, 0x14, 0x38, 0xba, 0x03, 0x58, 0x8e, 0x52, 0x10, 0xaf, 0xc5, 0x20, 0x38, 0x51, - 0x53, 0xfd, 0x75, 0x05, 0xa6, 0x65, 0x06, 0x1a, 0x22, 0xa2, 0x7b, 0x20, 0x89, 0xeb, 0x11, 0x02, - 0x63, 0x65, 0xaa, 0xc3, 0x48, 0xec, 0x7b, 0x0a, 0x9c, 0xce, 0x68, 0xc3, 0xce, 0x03, 0x49, 0x42, - 0xf4, 0x8f, 0x72, 0x1e, 0x98, 0xda, 0x46, 0xc2, 0xf3, 0xc0, 0x24, 0x04, 0xa7, 0xe8, 0xa2, 0xdb, - 0x30, 0xa6, 0xbb, 0xa6, 0x18, 0x96, 0xe7, 0x0a, 0x59, 0x3d, 0xb8, 0x15, 0x85, 0xc9, 0x37, 0x70, - 0x0b, 0x53, 0x84, 0xea, 0x3f, 0x1e, 0x83, 0xaa, 0x94, 0x57, 0x09, 0xad, 0x8e, 0x62, 0x34, 0x47, - 0xe8, 0x03, 0xc3, 0x79, 0x15, 0xc6, 0xba, 0xfd, 0x41, 0x41, 0xab, 0x39, 0x44, 0x77, 0x95, 0xa2, - 0xeb, 0xf6, 0x07, 0xe8, 0x76, 0x68, 0x87, 0x17, 0xb3, 0x94, 0xc3, 0x58, 0xd1, 0x84, 0x2d, 0x1e, - 0xf0, 0xe6, 0x78, 0x2e, 0x6f, 0xf6, 0x60, 0xd2, 0x13, 0x46, 0x7a, 0xb9, 0xf8, 0xbd, 0x24, 0x69, - 0xa4, 0x85, 0x51, 0xce, 0x35, 0xfc, 0xc0, 0x66, 0x0f, 0x68, 0x50, 0x05, 0x60, 0xc0, 0x62, 0xdb, - 0x99, 0xe9, 0x52, 0xe1, 0x0a, 0xc0, 0x3a, 0x2b, 0xc1, 0x02, 0xa2, 0xfe, 0x4c, 0x09, 0x50, 0x1a, - 0x21, 0xfa, 0x10, 0x94, 0x59, 0x88, 0xbf, 0x58, 0x68, 0x52, 0xde, 0x11, 0xcd, 0xf3, 0x30, 0x87, - 0xa1, 0x8e, 0xb8, 0xf2, 0x51, 0x6c, 0x62, 0xd8, 0x39, 0xb4, 0xa0, 0x27, 0xdd, 0x0f, 0x09, 0xb6, - 0xa6, 0xb1, 0xdc, 0xad, 0x69, 0x1d, 0x26, 0x7b, 0xa6, 0xcd, 0x62, 0x4f, 0x8a, 0x79, 0x21, 0xf8, - 0x71, 0x19, 0x47, 0x81, 0x03, 0x5c, 0xea, 0x1f, 0x97, 0x28, 0x13, 0x9b, 0xb6, 0x4f, 0x6c, 0xcd, - 0xd6, 0x09, 0xda, 0x03, 0xd0, 0x06, 0xbe, 0xc3, 0x77, 0x78, 0xc1, 0xcb, 0xad, 0x62, 0xf3, 0x15, - 0x22, 0xad, 0x85, 0x08, 0xf9, 0x29, 0x56, 0xf4, 0x1b, 0x4b, 0xc4, 0x28, 0x69, 0xdf, 0xec, 0x91, - 0xd7, 0x4c, 0xdb, 0x70, 0xee, 0x88, 0xe1, 0x1d, 0x95, 0xf4, 0xad, 0x10, 0x21, 0x27, 0x1d, 0xfd, - 0xc6, 0x12, 0x31, 0xf4, 0x3a, 0x2c, 0x30, 0xa3, 0xc7, 0x66, 0x29, 0xeb, 0x44, 0xdf, 0x1c, 0xcb, - 0x0a, 0xb6, 0x9c, 0x0a, 0x4b, 0x13, 0xb4, 0xd0, 0xc8, 0xa9, 0x83, 0x73, 0x5b, 0xab, 0xbf, 0xa9, - 0xc0, 0xd9, 0xcc, 0xa1, 0x40, 0x57, 0x61, 0x3e, 0x0a, 0x5d, 0x90, 0x65, 0x64, 0x25, 0xca, 0xc0, - 0x78, 0x3d, 0x59, 0x01, 0xa7, 0xdb, 0xa0, 0xd5, 0x50, 0x4f, 0x90, 0x65, 0xb0, 0x88, 0x7b, 0x78, - 0x44, 0xa0, 0xca, 0x12, 0xd3, 0x38, 0xab, 0x9d, 0xfa, 0x13, 0xb1, 0x0e, 0x47, 0x03, 0x46, 0x57, - 0xc7, 0x06, 0xe9, 0x86, 0xc1, 0xe3, 0xe1, 0xea, 0xa8, 0xd3, 0x42, 0xcc, 0x61, 0xe8, 0xbc, 0x7c, - 0xe1, 0x21, 0x94, 0x42, 0xc1, 0xa5, 0x07, 0xd5, 0x07, 0x10, 0x11, 0x42, 0xa6, 0xdd, 0x45, 0x9b, - 0x50, 0xd1, 0x44, 0xce, 0x7e, 0xc1, 0x6a, 0x9f, 0x28, 0x64, 0x63, 0x09, 0x1c, 0x3c, 0x32, 0x30, - 0xf8, 0x85, 0x43, 0xdc, 0xea, 0xdf, 0x55, 0xe0, 0x1c, 0x15, 0x48, 0x46, 0x70, 0xaf, 0x34, 0xbc, - 0xea, 0x3f, 0xc4, 0xd6, 0xda, 0x83, 0xaa, 0x1b, 0x35, 0x13, 0x7c, 0xf9, 0xe3, 0x72, 0x1a, 0x01, - 0xe9, 0x36, 0x24, 0x55, 0x3b, 0x1a, 0xae, 0xe3, 0x05, 0x93, 0x93, 0xcc, 0x2c, 0x10, 0x2a, 0xef, - 0x52, 0x4f, 0xb0, 0x8c, 0x5f, 0xfd, 0x5c, 0x09, 0x60, 0x8d, 0xf8, 0x77, 0x1c, 0x77, 0x9b, 0x0e, - 0xd1, 0x7b, 0xea, 0x56, 0xd1, 0xa3, 0x30, 0xde, 0x77, 0x0c, 0x4f, 0x48, 0x29, 0x76, 0x17, 0x8e, - 0x1d, 0xbe, 0xb3, 0x52, 0xb4, 0x04, 0x65, 0xe6, 0x5b, 0x16, 0x5b, 0x01, 0xd3, 0x7a, 0xa9, 0xa6, - 0xe3, 0x61, 0x5e, 0xce, 0xb3, 0xb1, 0xb2, 0xa8, 0x5b, 0x4f, 0xa8, 0xf1, 0x22, 0x1b, 0x2b, 0x2f, - 0xc3, 0x21, 0x54, 0xfd, 0xdc, 0x38, 0xc4, 0x1e, 0x9d, 0x88, 0x4c, 0x71, 0xe5, 0x64, 0x4c, 0xf1, - 0xd7, 0x61, 0xc1, 0x72, 0x34, 0xa3, 0xae, 0x59, 0x94, 0xe9, 0xdd, 0x0e, 0x9f, 0x0e, 0xcd, 0xee, - 0x86, 0x2f, 0x1a, 0x30, 0x01, 0x70, 0x23, 0xa7, 0x0e, 0xce, 0x6d, 0x8d, 0xfc, 0xf0, 0xa9, 0x0b, - 0x9e, 0x51, 0xf2, 0xc6, 0xa8, 0x4f, 0x72, 0x2c, 0xcb, 0xf1, 0xd6, 0xe1, 0xae, 0x1c, 0x7f, 0x0d, - 0x03, 0x7d, 0x51, 0x81, 0xb3, 0x64, 0xd7, 0x27, 0xae, 0xad, 0x59, 0xb7, 0x5c, 0x6d, 0x73, 0xd3, - 0xd4, 0x45, 0x58, 0x13, 0x9f, 0x9c, 0xf6, 0xc1, 0xfe, 0xd2, 0xd9, 0x95, 0xac, 0x0a, 0xf7, 0xf6, - 0x97, 0x3e, 0x9a, 0x7e, 0x71, 0x26, 0x08, 0xaf, 0xce, 0x6c, 0xc2, 0x98, 0x31, 0x9b, 0xdc, 0xe2, - 0xf3, 0x50, 0x3d, 0x42, 0x34, 0xee, 0x94, 0xec, 0x96, 0xf9, 0xa5, 0x09, 0x90, 0x42, 0xdb, 0x8f, - 0x90, 0x47, 0xf4, 0x57, 0x15, 0x38, 0xa3, 0x5b, 0x26, 0xb1, 0xfd, 0x44, 0x0c, 0x33, 0x5f, 0x18, - 0xeb, 0x85, 0x62, 0xee, 0xfb, 0xc4, 0x6e, 0x35, 0x1b, 0x8e, 0x6d, 0x13, 0xdd, 0x6f, 0x64, 0x20, - 0xe7, 0x56, 0x4e, 0x16, 0x04, 0x67, 0x76, 0x86, 0x7d, 0x0f, 0x2b, 0x6f, 0x35, 0xe5, 0xfb, 0x5f, - 0x0d, 0x51, 0x86, 0x43, 0x28, 0x7a, 0x1a, 0xaa, 0x5d, 0xd7, 0x19, 0xf4, 0xbd, 0x06, 0x8b, 0xb8, - 0xe2, 0x33, 0xc8, 0x14, 0x89, 0xab, 0x51, 0x31, 0x96, 0xeb, 0xa0, 0x67, 0x61, 0x9a, 0xff, 0x6c, - 0xbb, 0x64, 0xd3, 0xdc, 0x15, 0xcb, 0x8d, 0x85, 0x71, 0x5c, 0x95, 0xca, 0x71, 0xac, 0x16, 0x7a, - 0x0a, 0xa6, 0x4c, 0xcf, 0x1b, 0x10, 0x77, 0x1d, 0xdf, 0x10, 0x49, 0xb5, 0x98, 0xcf, 0xb6, 0x15, - 0x14, 0xe2, 0x08, 0x8e, 0x7e, 0x41, 0x81, 0x59, 0x97, 0xbc, 0x33, 0x30, 0x5d, 0x62, 0x30, 0xa2, - 0x9e, 0xb8, 0x5f, 0x80, 0x47, 0xbb, 0xd3, 0xb0, 0x8c, 0x63, 0x48, 0x39, 0x9f, 0x87, 0xee, 0x88, - 0x38, 0x10, 0x27, 0x7a, 0x40, 0x87, 0xca, 0x33, 0xbb, 0xb6, 0x69, 0x77, 0x6b, 0x56, 0xd7, 0x5b, - 0xa8, 0xb0, 0xa5, 0xcb, 0x75, 0xae, 0xa8, 0x18, 0xcb, 0x75, 0xd0, 0x73, 0x30, 0x33, 0xf0, 0x28, - 0xe7, 0xf6, 0x08, 0x1f, 0xdf, 0xa9, 0x28, 0x0c, 0x72, 0x5d, 0x06, 0xe0, 0x78, 0x3d, 0x6a, 0xe2, - 0x05, 0x05, 0x62, 0x94, 0x81, 0xdf, 0x02, 0xa6, 0xfd, 0x5c, 0x8f, 0x41, 0x70, 0xa2, 0xe6, 0x62, - 0x0d, 0x4e, 0x67, 0x7c, 0xe6, 0x91, 0x96, 0xc7, 0xaf, 0x97, 0xe0, 0x83, 0xf7, 0xe5, 0x4a, 0xf4, - 0x37, 0x15, 0xa8, 0x92, 0x5d, 0xdf, 0xd5, 0xc2, 0xa0, 0x4c, 0x3a, 0x45, 0x9b, 0x27, 0xb2, 0x04, - 0x96, 0x57, 0x22, 0x42, 0x7c, 0xda, 0xc2, 0xed, 0x4e, 0x82, 0x60, 0xb9, 0x3f, 0x54, 0x5b, 0xe7, - 0x77, 0xc4, 0x65, 0x77, 0x9d, 0xc8, 0xcd, 0x2f, 0x20, 0x8b, 0x9f, 0x84, 0xb9, 0x24, 0xe6, 0x23, - 0x8d, 0xd4, 0x3f, 0x2c, 0x41, 0xb9, 0x6d, 0x69, 0x0f, 0x24, 0x3f, 0xda, 0x5f, 0x88, 0x25, 0xa7, - 0x29, 0x94, 0xf1, 0x87, 0x75, 0x35, 0x37, 0x2d, 0x56, 0x37, 0x91, 0x16, 0xeb, 0xe5, 0xe2, 0x24, - 0x0e, 0xcf, 0x82, 0xf5, 0xfb, 0x0a, 0x4c, 0xb1, 0x7a, 0x0f, 0x20, 0x1b, 0xcb, 0x5b, 0xf1, 0x6c, - 0x2c, 0xcf, 0x17, 0xfe, 0xa6, 0x9c, 0xe4, 0x2b, 0xdf, 0x0d, 0xbe, 0x85, 0xe5, 0x5a, 0x79, 0x43, - 0x7e, 0x93, 0x84, 0x7f, 0xcc, 0xa5, 0xac, 0xb4, 0x50, 0x37, 0x1c, 0x5d, 0xb3, 0x52, 0xb9, 0xa1, - 0x0e, 0x7d, 0x98, 0xa4, 0x07, 0x53, 0x44, 0xdc, 0xc3, 0x0f, 0x3e, 0xa6, 0x90, 0x4a, 0x1b, 0x5c, - 0xe6, 0x8f, 0xc8, 0x05, 0x25, 0x1e, 0x8e, 0x28, 0xa8, 0xff, 0xac, 0x04, 0x55, 0x69, 0x2e, 0x7f, - 0x14, 0x59, 0xa7, 0xae, 0x64, 0xa6, 0xeb, 0x2f, 0xb1, 0xa8, 0xcb, 0x73, 0x47, 0x48, 0xd5, 0xef, - 0x42, 0x55, 0x8f, 0x32, 0x88, 0x8e, 0xc2, 0xdc, 0x52, 0x22, 0x52, 0x11, 0xf6, 0x1d, 0x15, 0x60, - 0x99, 0x88, 0xfa, 0xdb, 0x25, 0x98, 0x6c, 0xbb, 0x0e, 0x9d, 0xe0, 0x07, 0x20, 0x1a, 0xb4, 0x98, - 0x68, 0x28, 0xb6, 0x6e, 0x79, 0x67, 0x73, 0x85, 0x83, 0x99, 0x10, 0x0e, 0xb5, 0x51, 0x88, 0x1c, - 0x2e, 0x1e, 0xfe, 0x8d, 0x02, 0x55, 0x51, 0xf3, 0x01, 0x08, 0x88, 0x4f, 0xc7, 0x05, 0xc4, 0x8b, - 0x23, 0x7c, 0x57, 0x8e, 0x88, 0xf8, 0xaa, 0x02, 0x33, 0xa2, 0xc6, 0x2a, 0xe9, 0x6d, 0x10, 0x17, - 0x5d, 0x81, 0x49, 0x6f, 0xc0, 0x26, 0x52, 0x7c, 0xd0, 0x23, 0xb2, 0x90, 0x70, 0x37, 0x34, 0x9d, - 0xbd, 0x3c, 0xc3, 0xab, 0x48, 0x99, 0xe8, 0x78, 0x01, 0x0e, 0x1a, 0x53, 0x13, 0xce, 0x75, 0xac, - 0x54, 0xe6, 0x04, 0xec, 0x58, 0x04, 0x33, 0x08, 0xb5, 0x9c, 0xe8, 0xdf, 0xe0, 0x3c, 0x8a, 0x59, - 0x4e, 0x14, 0xec, 0x61, 0x5e, 0xae, 0x7e, 0x61, 0x3c, 0x1c, 0x6c, 0x26, 0xc1, 0xae, 0xc1, 0x94, - 0xee, 0x12, 0xcd, 0x27, 0x46, 0x7d, 0x6f, 0x98, 0xce, 0x31, 0x2d, 0xae, 0x11, 0xb4, 0xc0, 0x51, - 0x63, 0xaa, 0x30, 0xc9, 0x47, 0x4c, 0xa5, 0x48, 0xb7, 0xcc, 0x3d, 0x5e, 0xfa, 0x04, 0x94, 0x9d, - 0x3b, 0x76, 0x18, 0xbe, 0x71, 0x28, 0x61, 0xf6, 0x29, 0x37, 0x69, 0x6d, 0xcc, 0x1b, 0xb1, 0xec, - 0x32, 0x22, 0xb9, 0x08, 0x57, 0x64, 0xab, 0x59, 0x89, 0x45, 0x90, 0x05, 0x93, 0x3d, 0x36, 0x0d, - 0x23, 0x25, 0x26, 0x8b, 0x4d, 0xa8, 0x9c, 0x20, 0x96, 0x61, 0xc6, 0x01, 0x09, 0xaa, 0xf8, 0x52, - 0xe5, 0xcc, 0xeb, 0x6b, 0x3a, 0x91, 0x15, 0xdf, 0xb5, 0xa0, 0x10, 0x47, 0x70, 0xb4, 0x07, 0x55, - 0x7e, 0xbd, 0x9e, 0x4b, 0xd9, 0xc9, 0xe2, 0x3e, 0x4d, 0xd1, 0xbd, 0x5b, 0x11, 0x36, 0x3e, 0xf4, - 0x52, 0x01, 0x96, 0x69, 0xa9, 0x3f, 0x37, 0x1e, 0x32, 0xa9, 0x90, 0xf8, 0xd9, 0xaf, 0xa5, 0x28, - 0x85, 0x5e, 0x4b, 0xf9, 0x28, 0x94, 0xfb, 0x5b, 0x9a, 0x17, 0x70, 0x6a, 0x90, 0xcc, 0xb8, 0xdc, - 0xa6, 0x85, 0xf7, 0xf6, 0x97, 0xa6, 0x05, 0x69, 0xf6, 0x1b, 0xf3, 0xba, 0x68, 0x00, 0xa7, 0x3d, - 0x5f, 0xb3, 0x48, 0xc7, 0x14, 0xde, 0x22, 0xcf, 0xd7, 0x7a, 0xfd, 0x02, 0x39, 0x89, 0x79, 0x6c, - 0x73, 0x1a, 0x15, 0xce, 0xc2, 0x8f, 0x3e, 0xaf, 0xc0, 0x02, 0x2b, 0xaf, 0x0d, 0x7c, 0x87, 0x67, - 0x6f, 0x8f, 0x88, 0x1f, 0xfd, 0x7c, 0x96, 0x59, 0xf7, 0x9d, 0x1c, 0x7c, 0x38, 0x97, 0x12, 0x7a, - 0x17, 0xce, 0x5a, 0x9a, 0xe7, 0xd7, 0x74, 0xdf, 0xdc, 0x31, 0xfd, 0xbd, 0xa8, 0x0b, 0x47, 0x7f, - 0x39, 0x86, 0xc5, 0x80, 0xdc, 0xc8, 0x42, 0x86, 0xb3, 0x69, 0xa8, 0x7f, 0xa2, 0x00, 0x4a, 0xb3, - 0x10, 0xb2, 0xa0, 0x62, 0x90, 0x4d, 0x6d, 0x60, 0xf9, 0x81, 0x0a, 0x50, 0xe8, 0x96, 0x79, 0x84, - 0x32, 0x92, 0xcc, 0x4d, 0x81, 0x17, 0x87, 0x14, 0x90, 0x03, 0x53, 0x77, 0xb6, 0x4c, 0x9f, 0x58, - 0xa6, 0xe7, 0x0b, 0xe9, 0x3c, 0x2a, 0xb9, 0x50, 0xe7, 0x79, 0x2d, 0x40, 0x8c, 0x23, 0x1a, 0xea, - 0xcf, 0x8c, 0x41, 0xe5, 0x08, 0x0f, 0xf4, 0x0d, 0x00, 0x89, 0xf4, 0x12, 0x54, 0x51, 0x22, 0xa3, - 0xb8, 0xc8, 0x98, 0x3a, 0xd3, 0x48, 0x21, 0xc3, 0x19, 0x04, 0xd0, 0xbb, 0x70, 0xc6, 0xb4, 0x37, - 0x5d, 0xcd, 0xf3, 0xdd, 0x81, 0xee, 0x0f, 0x5c, 0x32, 0x4a, 0x2e, 0x64, 0xe6, 0x5a, 0x68, 0x65, - 0xa0, 0xc3, 0x99, 0x44, 0x10, 0x81, 0xc9, 0x3b, 0x8e, 0xbb, 0x4d, 0x85, 0xe7, 0x78, 0xf1, 0x77, - 0x36, 0x5e, 0x63, 0x28, 0x22, 0xa9, 0xc9, 0x7f, 0x7b, 0x38, 0xc0, 0xad, 0xfe, 0x81, 0x02, 0x65, - 0x7e, 0x7f, 0xee, 0x7d, 0x61, 0x57, 0xb1, 0xae, 0xe6, 0xe6, 0xf8, 0xa4, 0xe6, 0x0e, 0xab, 0xf1, - 0x3e, 0x31, 0x77, 0x58, 0x5f, 0x73, 0x74, 0x99, 0x3f, 0x18, 0x13, 0xdf, 0xc2, 0x94, 0x85, 0x16, - 0x9c, 0x16, 0x4a, 0xef, 0x0d, 0x73, 0x93, 0x50, 0xee, 0x6a, 0x6a, 0x7b, 0x9e, 0xb8, 0xb8, 0xce, - 0xa4, 0x6e, 0x23, 0x0d, 0xc6, 0x59, 0x6d, 0xd0, 0x3f, 0x55, 0xe8, 0xb6, 0xec, 0xbb, 0xa6, 0x3e, - 0x52, 0xe2, 0xcc, 0xb0, 0x6f, 0xcb, 0xab, 0x1c, 0x19, 0xf7, 0x16, 0xac, 0x47, 0xfb, 0x33, 0x2b, - 0xbd, 0xb7, 0xbf, 0xb4, 0x94, 0xe1, 0x8a, 0x0c, 0x5c, 0xe7, 0x74, 0x60, 0x3f, 0xf7, 0xfd, 0x43, - 0xab, 0x30, 0x37, 0x7e, 0xd0, 0x63, 0x74, 0x0d, 0xca, 0x9e, 0xee, 0xf4, 0xc9, 0x51, 0x52, 0x01, - 0x87, 0x03, 0xdc, 0xa1, 0x2d, 0x31, 0x47, 0xb0, 0xf8, 0x36, 0x4c, 0xcb, 0x3d, 0xcf, 0xf0, 0x46, - 0x34, 0x65, 0x6f, 0xc4, 0x91, 0x0f, 0xeb, 0x64, 0xef, 0xc5, 0xef, 0x94, 0x40, 0x3c, 0x8e, 0x35, - 0xc4, 0x61, 0x85, 0x19, 0xa4, 0xd1, 0x1b, 0xe1, 0x41, 0xb0, 0xe4, 0x7b, 0xc0, 0xd1, 0x18, 0xc8, - 0x99, 0xf4, 0x90, 0x0d, 0x13, 0x96, 0xb6, 0x41, 0xac, 0xe0, 0xa9, 0xa4, 0x2b, 0xc5, 0xdf, 0xf2, - 0xe1, 0xc9, 0x6b, 0xbd, 0x84, 0x4b, 0x9b, 0x17, 0x62, 0x41, 0x65, 0xf1, 0x79, 0xa8, 0x4a, 0xd5, - 0x8e, 0xe4, 0x00, 0xfa, 0xb2, 0x02, 0xe7, 0x02, 0x96, 0x88, 0xa7, 0xdf, 0x40, 0x97, 0xa0, 0xa2, - 0xf5, 0x4d, 0xe6, 0x13, 0x95, 0xbd, 0xca, 0xb5, 0x76, 0x8b, 0x95, 0xe1, 0x10, 0x8a, 0x3e, 0x0c, - 0x95, 0x60, 0x9e, 0x84, 0x82, 0x14, 0x2e, 0xf1, 0xf0, 0x30, 0x27, 0xac, 0x81, 0x1e, 0x97, 0x12, - 0x03, 0x96, 0xa3, 0x1d, 0x2d, 0x24, 0xcc, 0xcf, 0x7d, 0xd5, 0x2f, 0x8d, 0xc1, 0x0c, 0x77, 0x24, - 0xd4, 0x4d, 0xdb, 0x30, 0xed, 0xee, 0x03, 0x10, 0xa5, 0xb1, 0x27, 0x59, 0x4b, 0xc7, 0xf5, 0x24, - 0xeb, 0x75, 0x98, 0x78, 0x87, 0x2e, 0xeb, 0x80, 0x1d, 0x86, 0x5a, 0x5d, 0xe1, 0x5c, 0x33, 0x89, - 0xe0, 0x61, 0x81, 0x02, 0x79, 0xd2, 0xc3, 0xb8, 0x23, 0xdc, 0xa4, 0x8e, 0x8d, 0x6c, 0x98, 0xde, - 0x73, 0x3a, 0xfb, 0x55, 0x5c, 0xf5, 0x3f, 0x28, 0x30, 0x1f, 0x6b, 0xf1, 0x00, 0x76, 0x82, 0xcd, - 0xf8, 0x4e, 0x50, 0x1b, 0xf9, 0x2b, 0x73, 0x76, 0x84, 0xe7, 0xe1, 0x6c, 0xe6, 0x60, 0xdc, 0x5f, - 0x81, 0x52, 0xbf, 0x59, 0x82, 0xf1, 0x0e, 0x21, 0xc6, 0x03, 0xe0, 0xcc, 0xb7, 0x62, 0x9b, 0xfc, - 0x27, 0x0a, 0x3f, 0xd8, 0x95, 0xe7, 0x1e, 0xd9, 0x4c, 0xb8, 0x47, 0x3e, 0x59, 0x98, 0xc2, 0xe1, - 0xbe, 0x91, 0x5f, 0x2e, 0x01, 0xd0, 0x6a, 0xfc, 0x11, 0x4f, 0x11, 0x23, 0x19, 0x3d, 0xf3, 0x3c, - 0xf5, 0x5e, 0x79, 0x9c, 0x59, 0x0d, 0x1f, 0x63, 0x1c, 0x8b, 0x9c, 0xef, 0xf1, 0x87, 0x18, 0xe3, - 0xd2, 0x62, 0xfc, 0x98, 0xa4, 0x85, 0xfa, 0xf7, 0x15, 0x60, 0x29, 0xfb, 0x9b, 0x6b, 0x1d, 0xf4, - 0x1c, 0xcc, 0x98, 0xfc, 0x68, 0xb3, 0x29, 0x27, 0xa7, 0x63, 0x07, 0x30, 0x2d, 0x19, 0x80, 0xe3, - 0xf5, 0x50, 0x4f, 0x1a, 0xd7, 0x11, 0x9e, 0xd2, 0x15, 0xfd, 0xb8, 0xaf, 0x7c, 0xf8, 0x7e, 0x09, - 0x4e, 0x25, 0xea, 0x0e, 0x61, 0x7f, 0x9c, 0x8c, 0xb4, 0x95, 0x32, 0x02, 0x8f, 0x9d, 0x7c, 0x46, - 0xe0, 0x30, 0x39, 0xef, 0xf8, 0xc9, 0x26, 0xe7, 0xfd, 0x3d, 0x05, 0xd8, 0xdb, 0xac, 0x0f, 0x40, - 0xf0, 0xfe, 0xf9, 0xb8, 0xe0, 0xfd, 0x78, 0x51, 0xc6, 0xc9, 0x91, 0xb7, 0xbf, 0x51, 0x02, 0x96, - 0x7e, 0x5f, 0x44, 0x72, 0x48, 0xc1, 0x11, 0x4a, 0x4e, 0x70, 0xc4, 0x45, 0x11, 0x5b, 0x91, 0xf0, - 0x12, 0x4a, 0xf1, 0x15, 0x1f, 0x96, 0xc2, 0x27, 0xc6, 0xe2, 0x62, 0x24, 0x1d, 0x42, 0x81, 0xee, - 0xc2, 0x8c, 0xb7, 0xe5, 0x38, 0x7e, 0x60, 0xb2, 0x8b, 0xb9, 0xab, 0x15, 0x0e, 0x69, 0x0e, 0x3e, - 0x85, 0x2f, 0xcc, 0x8e, 0x8c, 0x1b, 0xc7, 0x49, 0xa1, 0x65, 0x80, 0x0d, 0xcb, 0xd1, 0xb7, 0x1b, - 0xad, 0x26, 0x0e, 0x02, 0x5f, 0x59, 0xf8, 0x55, 0x3d, 0x2c, 0xc5, 0x52, 0x0d, 0xf5, 0x5f, 0x2a, - 0x7c, 0xb4, 0x8e, 0xb0, 0xac, 0x1e, 0xa0, 0x94, 0x7c, 0x22, 0x21, 0x25, 0xf3, 0x9e, 0xac, 0xfd, - 0x6d, 0xf1, 0x15, 0xe1, 0x23, 0x0b, 0x7d, 0x98, 0xb1, 0xe4, 0x57, 0x19, 0x04, 0x1b, 0x17, 0x7a, - 0xd0, 0x21, 0x4c, 0xac, 0x17, 0x2b, 0xc6, 0x71, 0x02, 0x54, 0x94, 0x06, 0x9d, 0xe7, 0x2f, 0x4c, - 0xf2, 0xd8, 0x15, 0x36, 0x63, 0x6d, 0x19, 0x80, 0xe3, 0xf5, 0xd4, 0xbf, 0x55, 0x82, 0xf3, 0xbc, - 0xef, 0x2c, 0xf8, 0xbc, 0x49, 0xfa, 0xc4, 0x36, 0x88, 0xad, 0xef, 0x31, 0x75, 0xd9, 0x70, 0xba, - 0xe8, 0x2f, 0x29, 0x50, 0x09, 0x0e, 0x9e, 0xc4, 0x87, 0xbc, 0x51, 0xfc, 0x45, 0xcd, 0x1c, 0x2a, - 0xe1, 0xb1, 0x17, 0xcf, 0xf1, 0x26, 0x7e, 0xe1, 0x90, 0x30, 0xba, 0x03, 0xe5, 0xbe, 0xeb, 0x6c, - 0x04, 0x66, 0xd5, 0xed, 0x63, 0xef, 0x41, 0x9b, 0x62, 0xe7, 0xcb, 0x93, 0xfd, 0x8b, 0x39, 0x3d, - 0x15, 0xc3, 0xe3, 0x43, 0xf5, 0x1c, 0x3d, 0x99, 0x4c, 0x65, 0x1c, 0xfa, 0x4f, 0x52, 0x59, 0xa2, - 0x6e, 0x82, 0x7a, 0xff, 0xbe, 0x1c, 0x05, 0xe1, 0xab, 0xf0, 0x98, 0x84, 0x70, 0x65, 0x57, 0x27, - 0x9e, 0xd7, 0xd0, 0xfa, 0x9a, 0x4e, 0x4d, 0x4a, 0x76, 0xb7, 0x97, 0x3b, 0x7a, 0x8f, 0x80, 0xf2, - 0xff, 0x2a, 0xb0, 0x24, 0xe1, 0x8c, 0x05, 0x40, 0x05, 0xa2, 0xe6, 0x6b, 0x0a, 0x54, 0x35, 0xdb, - 0x76, 0x7c, 0x4d, 0x3e, 0x77, 0x34, 0x46, 0x9c, 0x9b, 0x2c, 0x52, 0xcb, 0xb5, 0x88, 0x4c, 0x22, - 0xc2, 0x40, 0x82, 0x60, 0xb9, 0x37, 0x8b, 0x9f, 0x84, 0xb9, 0x64, 0xab, 0x23, 0x19, 0x8f, 0x0d, - 0x38, 0x27, 0xf5, 0x8a, 0x9d, 0x65, 0x34, 0xb6, 0x88, 0xbe, 0xed, 0x1d, 0x65, 0x18, 0xeb, 0x54, - 0xff, 0x0e, 0x91, 0x88, 0xab, 0x96, 0xd4, 0xdc, 0x7b, 0x12, 0x26, 0x77, 0x4c, 0xcf, 0x0c, 0xae, - 0xec, 0x4b, 0x38, 0x6e, 0xf3, 0x62, 0x1c, 0xc0, 0xd5, 0x57, 0xe0, 0xb4, 0x8c, 0x83, 0x49, 0xdc, - 0xb5, 0xce, 0x51, 0x7a, 0xb1, 0x0a, 0x17, 0x25, 0x0c, 0x99, 0xf7, 0x0d, 0x8f, 0x82, 0xee, 0x6b, - 0x95, 0x40, 0xe0, 0x89, 0x1b, 0x2b, 0xbf, 0xa5, 0xc0, 0xc3, 0x24, 0x8f, 0xeb, 0x84, 0xd0, 0x78, - 0x7d, 0x44, 0xb6, 0xc8, 0xe5, 0x6a, 0x91, 0xde, 0x2a, 0x0f, 0x8c, 0xf3, 0x7b, 0x86, 0xf6, 0x00, - 0xbc, 0x70, 0x4a, 0x46, 0x89, 0x3c, 0xce, 0x9c, 0x63, 0x91, 0xcb, 0x39, 0xfc, 0x8d, 0x25, 0x62, - 0xe8, 0x1d, 0xa8, 0x78, 0x62, 0x26, 0x47, 0xb9, 0x0e, 0x9d, 0xc1, 0x18, 0x22, 0xb8, 0x52, 0xfc, - 0xc2, 0x21, 0x19, 0xf4, 0x2b, 0x0a, 0x9c, 0xb1, 0x32, 0x16, 0x97, 0xd0, 0x10, 0x3a, 0x27, 0xb0, - 0x6e, 0xb9, 0x07, 0x3b, 0x0b, 0x82, 0x33, 0xbb, 0x82, 0x7e, 0x2d, 0xf7, 0xee, 0x6d, 0xb9, 0xf8, - 0x03, 0x35, 0xf7, 0xe3, 0xfd, 0x02, 0xd7, 0x70, 0x7f, 0x0a, 0xaa, 0x4e, 0x24, 0x11, 0xc4, 0x65, - 0xe9, 0x4f, 0x8d, 0xd8, 0x39, 0x49, 0xc6, 0xf0, 0xf3, 0x40, 0xa9, 0x00, 0xcb, 0xf4, 0xd0, 0x57, - 0x14, 0x40, 0x46, 0x6a, 0xdf, 0x10, 0x47, 0x92, 0xaf, 0x1e, 0xfb, 0xe6, 0xc8, 0x4f, 0x40, 0xd2, - 0xe5, 0x38, 0xa3, 0x13, 0xea, 0x97, 0x27, 0xb9, 0x32, 0xcf, 0x7c, 0xd0, 0x1b, 0x30, 0xb1, 0xc1, - 0x8c, 0x61, 0x21, 0x05, 0x0a, 0x5b, 0xde, 0xdc, 0xa4, 0xe6, 0x96, 0x2a, 0xff, 0x1f, 0x0b, 0xcc, - 0xe8, 0x4d, 0x18, 0x33, 0xec, 0xe0, 0xd1, 0xb3, 0x17, 0x47, 0xb0, 0x04, 0xa3, 0xb8, 0x75, 0xba, - 0x70, 0x28, 0x52, 0x64, 0x43, 0xc5, 0x16, 0xfa, 0xaf, 0x58, 0xa6, 0x85, 0x9f, 0x13, 0x0f, 0xf5, - 0xe8, 0x50, 0x7b, 0x0f, 0x4a, 0x70, 0x48, 0x83, 0xd2, 0x4b, 0x38, 0xc0, 0x0a, 0xd3, 0x0b, 0xed, - 0xda, 0xc3, 0x9c, 0x0e, 0x6d, 0xd9, 0x4a, 0x2d, 0x0f, 0x6f, 0xa5, 0xce, 0xe4, 0x5a, 0xa8, 0x04, - 0x26, 0x7c, 0xfe, 0x84, 0xf0, 0x44, 0xf1, 0x30, 0x24, 0xda, 0x7f, 0xf6, 0xc4, 0x70, 0xa4, 0x74, - 0x8b, 0xf7, 0x87, 0x05, 0x72, 0xca, 0x58, 0xfc, 0xa5, 0x73, 0xc1, 0xf4, 0x85, 0x19, 0x8b, 0x3f, - 0xd9, 0xc2, 0x19, 0x8b, 0xff, 0x8f, 0x05, 0x66, 0xf4, 0x36, 0x35, 0xbc, 0xf8, 0x16, 0x27, 0x12, - 0xf5, 0xbd, 0x32, 0xe2, 0xd2, 0xf2, 0x82, 0xc8, 0x77, 0xfe, 0x0b, 0x87, 0xf8, 0xd1, 0x06, 0x4c, - 0x0a, 0x27, 0x87, 0xc8, 0x32, 0xf0, 0xe2, 0x08, 0x79, 0xf7, 0x83, 0x57, 0x88, 0xf8, 0x35, 0xdc, - 0x00, 0xb1, 0xfa, 0xef, 0xa6, 0xb8, 0x7b, 0x4a, 0x84, 0x10, 0x6c, 0x42, 0x25, 0x40, 0x37, 0xca, - 0x2d, 0x8c, 0xe0, 0x15, 0x11, 0xfe, 0x69, 0xc1, 0x2f, 0x1c, 0xe2, 0x46, 0x8d, 0xac, 0x0b, 0x2f, - 0x51, 0xce, 0xd5, 0xe1, 0x2e, 0xbb, 0xc4, 0x23, 0xdc, 0xc6, 0x1e, 0x44, 0x84, 0x5b, 0x76, 0x88, - 0xc5, 0x78, 0xa1, 0x10, 0x8b, 0x97, 0xe0, 0x54, 0x10, 0x80, 0x66, 0x10, 0x76, 0xd4, 0x23, 0x42, - 0xb3, 0xd9, 0xad, 0xd2, 0x46, 0x1c, 0x84, 0x93, 0x75, 0xd1, 0xef, 0x28, 0x50, 0xd1, 0x85, 0x02, - 0x23, 0xd6, 0xd5, 0x8d, 0xd1, 0x7c, 0x98, 0xcb, 0x81, 0x3e, 0xc4, 0xd5, 0xe9, 0xdb, 0x81, 0x8c, - 0x08, 0x8a, 0x8f, 0xe9, 0x0c, 0x2e, 0xec, 0x35, 0xfa, 0xd7, 0xd4, 0x58, 0xb0, 0xd8, 0xdb, 0x26, - 0xec, 0x92, 0x1e, 0x8f, 0x19, 0xbf, 0x39, 0xe2, 0x57, 0xd4, 0x22, 0x8c, 0xfc, 0x43, 0xde, 0x08, - 0xed, 0x82, 0x08, 0x72, 0x4c, 0xdf, 0x22, 0x77, 0x1f, 0xfd, 0x1d, 0x05, 0x1e, 0xe3, 0x81, 0xfa, - 0x0d, 0xaa, 0x20, 0xb0, 0xb7, 0x81, 0x48, 0xf4, 0x18, 0x51, 0x14, 0x10, 0x52, 0x39, 0x72, 0x40, - 0xc8, 0xa5, 0x83, 0xfd, 0xa5, 0xc7, 0x1a, 0x43, 0xe0, 0xc6, 0x43, 0xf5, 0x60, 0x71, 0x1b, 0x66, - 0x62, 0x93, 0x7d, 0x92, 0xa7, 0x96, 0x8b, 0x36, 0xcc, 0x25, 0xe7, 0xe4, 0x44, 0x4f, 0x49, 0xaf, - 0xc3, 0x54, 0xb8, 0x59, 0xa0, 0xf3, 0x12, 0xa1, 0x68, 0x33, 0xbf, 0x4e, 0xf6, 0x38, 0xd5, 0xa5, - 0x98, 0xad, 0xc7, 0x8d, 0xfd, 0xdb, 0xb4, 0x40, 0x20, 0x54, 0xbf, 0x23, 0x3c, 0x39, 0xb7, 0x48, - 0xaf, 0x6f, 0x69, 0x3e, 0x79, 0xff, 0x1f, 0x7d, 0xa8, 0xff, 0x5d, 0xe1, 0x32, 0x5f, 0xbc, 0x7b, - 0xa6, 0x41, 0xb5, 0xc7, 0x73, 0x14, 0xb2, 0x1b, 0xa5, 0x4a, 0xf1, 0xbb, 0xac, 0xab, 0x11, 0x1a, - 0x2c, 0xe3, 0x44, 0x77, 0xd2, 0x2f, 0xf3, 0x5d, 0x19, 0x6d, 0x73, 0x1e, 0xfa, 0x81, 0x3e, 0x94, - 0x6e, 0x23, 0x3f, 0x6a, 0xa6, 0x1c, 0xfe, 0xa8, 0xd9, 0xfd, 0x9f, 0xba, 0x52, 0xbf, 0x35, 0x06, - 0x99, 0xcf, 0x4a, 0x20, 0x15, 0x26, 0xf8, 0x0d, 0x19, 0xf9, 0xc9, 0x42, 0x7e, 0x7d, 0x06, 0x0b, - 0x08, 0x72, 0xe1, 0x8c, 0xb8, 0x7f, 0x72, 0x9d, 0xec, 0x45, 0x8f, 0xe5, 0x89, 0xa9, 0x1f, 0x3e, - 0x12, 0x9d, 0xe5, 0x2e, 0xeb, 0x24, 0x30, 0xe1, 0x4c, 0xdc, 0xe8, 0x26, 0xbf, 0x0e, 0x66, 0x1b, - 0x2c, 0xc9, 0x4f, 0x24, 0x1d, 0xc4, 0xed, 0xd6, 0x87, 0x83, 0xeb, 0x60, 0xa9, 0x0a, 0x38, 0xbb, - 0x1d, 0xda, 0x01, 0xd4, 0xd3, 0x76, 0x93, 0xd8, 0x46, 0xc8, 0x68, 0xbf, 0x9a, 0xc2, 0x86, 0x33, - 0x28, 0xd0, 0x0d, 0x54, 0xd3, 0x75, 0xd2, 0xf7, 0x89, 0xc1, 0x87, 0x35, 0xf0, 0x2f, 0xb3, 0x0d, - 0xb4, 0x16, 0x07, 0xe1, 0x64, 0x5d, 0x76, 0x15, 0x84, 0x99, 0xc4, 0xef, 0x8f, 0x90, 0x25, 0xd6, - 0xd5, 0x93, 0xbd, 0x0a, 0xc2, 0x49, 0x1c, 0x7e, 0x9e, 0xf9, 0x06, 0x9c, 0x63, 0xd5, 0x6a, 0x06, - 0xb3, 0x82, 0x3d, 0x62, 0xd4, 0x0c, 0x83, 0xdd, 0xcb, 0x1c, 0xf5, 0xad, 0x41, 0xf5, 0x5f, 0x94, - 0xe0, 0x14, 0xc3, 0xdd, 0xa8, 0x61, 0xe1, 0xa3, 0xa3, 0xbb, 0x02, 0x8f, 0x43, 0xe5, 0x58, 0x97, - 0x93, 0x71, 0xa8, 0xe7, 0x79, 0x03, 0x97, 0x30, 0xb5, 0x48, 0xb3, 0xbc, 0xa0, 0x65, 0x2c, 0x30, - 0xd5, 0x05, 0x64, 0x69, 0x9e, 0xcf, 0x5f, 0xee, 0x0a, 0x76, 0xc2, 0x02, 0x71, 0xa9, 0x8c, 0x3b, - 0x6f, 0xa4, 0x30, 0xe1, 0x0c, 0xec, 0x01, 0xcd, 0x86, 0xd3, 0xeb, 0x5b, 0x24, 0xa4, 0x59, 0x2a, - 0x4e, 0x33, 0x8e, 0x09, 0x67, 0x60, 0x57, 0x7f, 0x56, 0x81, 0xb9, 0xe4, 0x80, 0xa0, 0x1d, 0xa8, - 0xb8, 0x62, 0x50, 0x04, 0x77, 0xdf, 0x28, 0xcc, 0x1c, 0x19, 0x03, 0x2d, 0x9e, 0x91, 0x11, 0xbf, - 0x70, 0x48, 0x4b, 0xfd, 0xc6, 0x18, 0x2c, 0xe4, 0x35, 0x42, 0x5f, 0x56, 0xe0, 0x9c, 0x1e, 0xe9, - 0x28, 0xb5, 0x81, 0xbf, 0xe5, 0xb8, 0xa6, 0x6f, 0x92, 0xe0, 0x59, 0xd3, 0x46, 0xf1, 0x3e, 0x86, - 0xdc, 0xc3, 0x93, 0xbd, 0x34, 0x32, 0xc9, 0xe0, 0x1c, 0xf2, 0xe8, 0x5d, 0x80, 0xed, 0x28, 0x79, - 0x1a, 0x9f, 0xaf, 0xeb, 0x85, 0x3b, 0x23, 0x25, 0x58, 0x0b, 0x3a, 0xc5, 0x5c, 0x80, 0x52, 0xb9, - 0x44, 0x8e, 0x12, 0xf7, 0xbc, 0xad, 0xeb, 0x64, 0xaf, 0xaf, 0x99, 0x41, 0x50, 0x7d, 0x71, 0xe2, - 0x9d, 0xce, 0x35, 0x81, 0x2a, 0x4e, 0x5c, 0x2a, 0x97, 0xc8, 0xa9, 0x9f, 0x2d, 0xc1, 0x43, 0x39, - 0x9d, 0xce, 0x59, 0x41, 0xca, 0xff, 0x77, 0x2b, 0xe8, 0xf7, 0x15, 0x98, 0x62, 0x63, 0xf0, 0x3e, - 0x09, 0xfd, 0x64, 0x7d, 0xcd, 0x39, 0x78, 0xfe, 0x3d, 0x05, 0xe6, 0x53, 0x19, 0xa8, 0x86, 0x0a, - 0x1c, 0x7c, 0x60, 0xe7, 0xa9, 0x8f, 0x27, 0xdf, 0x09, 0xad, 0x66, 0x26, 0xa6, 0x7b, 0x0d, 0x66, - 0x62, 0xe7, 0xce, 0x61, 0xf6, 0x01, 0x25, 0x33, 0xfb, 0x80, 0x9c, 0x5c, 0xa0, 0x74, 0x68, 0x72, - 0x81, 0x90, 0xe5, 0xd3, 0x4b, 0xe5, 0xcf, 0x0c, 0xcb, 0x7f, 0x73, 0x56, 0xb0, 0x3c, 0xf3, 0xce, - 0xbe, 0x05, 0x13, 0x2c, 0x0d, 0x42, 0x20, 0x87, 0x5f, 0x28, 0x9c, 0x5e, 0xc1, 0xe3, 0x1a, 0x2f, - 0xff, 0x1f, 0x0b, 0xac, 0xa8, 0x09, 0x73, 0xba, 0xe5, 0x0c, 0x8c, 0xb6, 0xeb, 0x6c, 0x9a, 0x16, - 0x59, 0x8b, 0x94, 0xeb, 0x30, 0x8f, 0x53, 0x23, 0x01, 0xc7, 0xa9, 0x16, 0x08, 0x73, 0xff, 0x2e, - 0x17, 0x90, 0xcf, 0x15, 0x8c, 0x41, 0xe1, 0xc9, 0x78, 0x43, 0xbf, 0xee, 0x3b, 0x00, 0x24, 0x60, - 0xde, 0x20, 0x58, 0xfe, 0xa5, 0x62, 0x19, 0xaa, 0xc2, 0x25, 0x10, 0x28, 0x85, 0x61, 0x91, 0x87, - 0x25, 0x22, 0xc8, 0x85, 0xea, 0x56, 0xf4, 0x94, 0xac, 0x70, 0xb6, 0xbe, 0x3c, 0xe2, 0x33, 0xb6, - 0xdc, 0x16, 0x93, 0x0a, 0xb0, 0x4c, 0x04, 0xb9, 0x7c, 0x7f, 0xe3, 0xae, 0xb4, 0x51, 0x9e, 0x1e, - 0x8c, 0x7c, 0x74, 0xd1, 0x77, 0x46, 0x65, 0x58, 0xa2, 0x42, 0x69, 0xda, 0x61, 0x1e, 0x93, 0x51, - 0xbc, 0xb3, 0x51, 0x36, 0x94, 0x88, 0x66, 0x54, 0x86, 0x25, 0x2a, 0x74, 0x6c, 0x7b, 0x51, 0xee, - 0x1a, 0xe1, 0x73, 0x79, 0x79, 0xc4, 0x1c, 0x42, 0xc2, 0xce, 0x8d, 0x0a, 0xb0, 0x4c, 0x04, 0xd9, - 0x00, 0xbd, 0x30, 0xa5, 0x8d, 0x70, 0xda, 0x16, 0xfa, 0xce, 0x28, 0x31, 0x0e, 0xdf, 0xb1, 0xa3, - 0xdf, 0x58, 0xa2, 0x80, 0xde, 0x96, 0x8e, 0x06, 0xa0, 0xb8, 0xb7, 0x60, 0xa8, 0x63, 0x81, 0x8f, - 0x45, 0x46, 0x73, 0x95, 0xad, 0xd7, 0x47, 0x24, 0x83, 0xf9, 0xde, 0xfe, 0xd2, 0x34, 0x93, 0x21, - 0x29, 0x03, 0x3a, 0x8a, 0x98, 0x99, 0x3e, 0x2c, 0x62, 0x06, 0x5d, 0x85, 0x79, 0x4f, 0x8e, 0x4a, - 0x65, 0x82, 0x61, 0x86, 0x35, 0x09, 0x53, 0x20, 0x75, 0x92, 0x15, 0x70, 0xba, 0x0d, 0x17, 0xfe, - 0xc4, 0x60, 0xed, 0x67, 0x65, 0xe1, 0xcf, 0xcb, 0x70, 0x08, 0x45, 0x3b, 0x30, 0xed, 0x49, 0x31, - 0x3a, 0xe2, 0x99, 0x92, 0x11, 0xfc, 0xf9, 0x22, 0x3e, 0x87, 0xa5, 0xd6, 0x90, 0x4b, 0x70, 0x8c, - 0x0e, 0x7a, 0x17, 0xa6, 0x02, 0x07, 0x8a, 0xb7, 0x30, 0x57, 0xfc, 0xea, 0x44, 0x76, 0x1a, 0xa3, - 0xc8, 0x23, 0x12, 0x80, 0x3c, 0x1c, 0xd1, 0x43, 0x83, 0xf8, 0x8d, 0xc5, 0xf9, 0x63, 0xb9, 0xa5, - 0x15, 0x46, 0x5e, 0xe4, 0xdd, 0x56, 0x44, 0x0d, 0x98, 0x27, 0xbb, 0x7d, 0xc7, 0x1b, 0xb8, 0x84, - 0x65, 0x50, 0x63, 0xd3, 0x83, 0x22, 0x87, 0xff, 0x4a, 0x12, 0x88, 0xd3, 0xf5, 0xd1, 0x17, 0x15, - 0x98, 0xe3, 0xaf, 0xbc, 0xd0, 0x2d, 0xcc, 0xb1, 0x89, 0xed, 0x7b, 0x0b, 0xa7, 0x8b, 0xa7, 0x12, - 0xec, 0x24, 0x70, 0x09, 0x37, 0x4a, 0xa2, 0x14, 0xa7, 0x68, 0xaa, 0xff, 0xa8, 0x0a, 0x55, 0xc9, - 0x58, 0xfe, 0x51, 0xdc, 0xb5, 0xf7, 0xa1, 0xaa, 0x3b, 0xb6, 0xe7, 0xbb, 0x9a, 0x94, 0x5f, 0x60, - 0x44, 0x9a, 0xe1, 0x34, 0x36, 0x22, 0xcc, 0x58, 0x26, 0x43, 0x05, 0x4e, 0x78, 0x3e, 0x34, 0x76, - 0x0c, 0xe7, 0x43, 0xa1, 0xc0, 0xc9, 0x38, 0x23, 0x7a, 0x16, 0x20, 0xd8, 0xb7, 0x08, 0x4f, 0xb7, - 0x5f, 0x89, 0x72, 0x40, 0xb7, 0xbc, 0x6b, 0x21, 0x0c, 0x4b, 0xf5, 0xd0, 0x5d, 0x98, 0xb1, 0xe4, - 0xfc, 0xaf, 0x62, 0x53, 0x2d, 0x14, 0xeb, 0x18, 0x4b, 0x24, 0xcb, 0x23, 0xe7, 0x62, 0x45, 0x38, - 0x4e, 0x8a, 0xb2, 0x81, 0x15, 0xe4, 0x2c, 0x1e, 0xe9, 0xac, 0x33, 0xcc, 0x7c, 0x1c, 0xb1, 0x41, - 0x58, 0xe4, 0x61, 0x89, 0x48, 0xce, 0x81, 0xd4, 0x64, 0xa1, 0x03, 0xa9, 0x01, 0x9c, 0x76, 0x89, - 0xef, 0xee, 0x35, 0xf6, 0x74, 0x96, 0x07, 0xdc, 0xf5, 0x99, 0xf6, 0x59, 0x29, 0x76, 0x7d, 0x17, - 0xa7, 0x51, 0xe1, 0x2c, 0xfc, 0x31, 0x81, 0x3d, 0x75, 0xa8, 0xc0, 0xfe, 0x18, 0x54, 0x7d, 0xa2, - 0x6f, 0xd9, 0xa6, 0xae, 0x59, 0xad, 0xa6, 0x48, 0xb1, 0x13, 0xc9, 0x9e, 0x08, 0x84, 0xe5, 0x7a, - 0xa8, 0x0e, 0x63, 0x03, 0xd3, 0x10, 0xbb, 0xd6, 0x8f, 0x85, 0x6e, 0xa7, 0x56, 0xf3, 0xde, 0xfe, - 0xd2, 0x07, 0xa3, 0x13, 0x9e, 0xf0, 0xab, 0x2e, 0xf7, 0xb7, 0xbb, 0x97, 0xfd, 0xbd, 0x3e, 0xf1, - 0x96, 0xd7, 0x5b, 0x4d, 0x4c, 0x1b, 0x67, 0x1d, 0xd6, 0x4d, 0x1f, 0xe1, 0xb0, 0xee, 0x2b, 0x0a, - 0x9c, 0xd6, 0x92, 0x1e, 0x33, 0xe2, 0x2d, 0xcc, 0x14, 0x97, 0xfe, 0xd9, 0x5e, 0xb8, 0x28, 0xc9, - 0x5f, 0x2d, 0x4d, 0x0e, 0x67, 0xf5, 0x81, 0xda, 0x1c, 0x3d, 0xb3, 0x1b, 0xa6, 0x59, 0x16, 0xb3, - 0x3e, 0x5b, 0xcc, 0xe6, 0x58, 0x4d, 0x61, 0xc2, 0x19, 0xd8, 0xd1, 0x1d, 0xa8, 0xea, 0x91, 0x57, - 0x48, 0xec, 0xbc, 0xcd, 0xe3, 0x70, 0x4b, 0x89, 0x34, 0x1f, 0x92, 0xcb, 0x49, 0xa6, 0xa4, 0xfe, - 0xa1, 0x22, 0x4c, 0xc9, 0x07, 0x78, 0x9e, 0x73, 0xd2, 0xce, 0x5f, 0x75, 0x07, 0x52, 0x9b, 0x16, - 0xda, 0x80, 0x49, 0x8a, 0xa1, 0xb9, 0xd6, 0x11, 0x5f, 0xf5, 0x62, 0xb1, 0xbd, 0x81, 0xa1, 0xe0, - 0x66, 0xb9, 0xf8, 0x81, 0x03, 0xc4, 0xea, 0x0d, 0x80, 0x68, 0xc3, 0x1f, 0xf9, 0xa4, 0xed, 0x87, - 0x65, 0x38, 0x3b, 0x6a, 0x1c, 0x22, 0xcb, 0x17, 0xcd, 0x5e, 0x0d, 0xac, 0x6d, 0xfa, 0xc4, 0xbd, - 0x79, 0x73, 0x35, 0x7c, 0x54, 0xad, 0x60, 0xc2, 0xea, 0xe8, 0xd1, 0xc9, 0x14, 0x46, 0x9c, 0x43, - 0x89, 0x29, 0x3b, 0xe2, 0x79, 0x26, 0xac, 0xf9, 0xa4, 0x3e, 0x70, 0x3d, 0x5f, 0xdc, 0xfe, 0xe3, - 0xca, 0x4e, 0x12, 0x88, 0xd3, 0xf5, 0x93, 0x48, 0xf8, 0x0b, 0x86, 0x74, 0x17, 0x54, 0xd2, 0x48, - 0xf8, 0x33, 0x86, 0xe9, 0xfa, 0x32, 0x12, 0x3e, 0x53, 0xd4, 0x14, 0x2a, 0xa7, 0x91, 0x84, 0x40, - 0x9c, 0xae, 0x8f, 0x0c, 0x78, 0xd4, 0x25, 0xba, 0xd3, 0xeb, 0x11, 0xdb, 0xe0, 0x2f, 0x0d, 0x68, - 0x6e, 0xd7, 0xb4, 0xaf, 0xb8, 0x1a, 0xab, 0xc8, 0x6c, 0x48, 0xa5, 0x7e, 0xf1, 0x60, 0x7f, 0xe9, - 0x51, 0x7c, 0x48, 0x3d, 0x7c, 0x28, 0x16, 0xd4, 0x83, 0x53, 0x03, 0x96, 0x0d, 0xd5, 0x6d, 0xd9, - 0x3e, 0x71, 0x77, 0x34, 0xab, 0xe0, 0xbb, 0x9c, 0x4c, 0x22, 0xaf, 0xc7, 0x51, 0xe1, 0x24, 0x6e, - 0xb4, 0x47, 0x37, 0x3b, 0xd1, 0x1d, 0x89, 0x64, 0xa5, 0x78, 0x46, 0x75, 0x9c, 0x46, 0x87, 0xb3, - 0x68, 0xa8, 0x5f, 0x51, 0x40, 0x84, 0x15, 0xa1, 0x47, 0x63, 0xce, 0xb8, 0x4a, 0xc2, 0x11, 0xf7, - 0xa8, 0xb8, 0xfa, 0x50, 0x8a, 0xa0, 0xd2, 0xb5, 0x87, 0x27, 0xa4, 0x6b, 0xa5, 0x53, 0x91, 0x08, - 0xe2, 0x98, 0xa5, 0x7c, 0xc2, 0x4f, 0xc1, 0x14, 0xb1, 0x75, 0x77, 0xaf, 0x1f, 0xa9, 0x51, 0x33, - 0x3c, 0x8b, 0x94, 0x28, 0xc4, 0x11, 0x5c, 0xfd, 0xb7, 0x0a, 0x08, 0x0c, 0x2c, 0x8f, 0xf5, 0x50, - 0x59, 0x90, 0xef, 0x7b, 0x46, 0x2a, 0xe5, 0x61, 0x1e, 0xcb, 0xcb, 0xc3, 0x7c, 0x52, 0x49, 0x8d, - 0x7f, 0x4b, 0x81, 0xe4, 0x33, 0xfb, 0xe8, 0x71, 0x98, 0x14, 0x39, 0x2b, 0xc4, 0xcd, 0x77, 0x7e, - 0xd5, 0x89, 0x17, 0xe1, 0x00, 0x16, 0xb7, 0xd3, 0x46, 0xb8, 0xe2, 0x9e, 0x7d, 0xdd, 0xf8, 0x70, - 0x3b, 0x4d, 0xfd, 0xee, 0x2c, 0x4c, 0xf0, 0x2c, 0x0b, 0x54, 0xa6, 0x65, 0xc4, 0xd4, 0x5f, 0x2f, - 0x9e, 0xc7, 0xa1, 0x40, 0xe8, 0x7c, 0x2c, 0xe5, 0x66, 0xe9, 0xd0, 0x94, 0x9b, 0x98, 0xe7, 0x58, - 0x1f, 0xc1, 0x37, 0xd7, 0xc0, 0x2d, 0xf1, 0x72, 0x98, 0xc8, 0xaf, 0x8e, 0xfc, 0x98, 0xd3, 0x6a, - 0xbc, 0xb8, 0xba, 0xc0, 0x07, 0x40, 0x72, 0x5d, 0xcd, 0x1e, 0xe2, 0xb6, 0x8a, 0xae, 0xb5, 0x97, - 0x8b, 0xc7, 0x2c, 0x88, 0x21, 0x1f, 0xe2, 0x5a, 0x7b, 0xb8, 0x90, 0x26, 0x72, 0x17, 0xd2, 0x26, - 0x4c, 0x8a, 0xa5, 0x20, 0x84, 0xe3, 0x8b, 0x23, 0xe4, 0x4f, 0x97, 0x92, 0x20, 0xf1, 0x02, 0x1c, - 0x20, 0xa7, 0x3b, 0x6e, 0x4f, 0xdb, 0x35, 0x7b, 0x83, 0x1e, 0x93, 0x88, 0x65, 0xb9, 0x2a, 0x2b, - 0xc6, 0x01, 0x9c, 0x55, 0xe5, 0xa1, 0x1e, 0x4c, 0x7b, 0x97, 0xab, 0x8a, 0x97, 0x2f, 0x03, 0x38, - 0x7a, 0x13, 0x2a, 0x3d, 0x6d, 0xb7, 0x33, 0x70, 0xbb, 0x44, 0xb8, 0xab, 0xf2, 0x55, 0xad, 0x81, - 0x6f, 0x5a, 0xcb, 0xd4, 0xe6, 0xf4, 0xdd, 0xe5, 0x96, 0xed, 0xdf, 0x74, 0x3b, 0xbe, 0x1b, 0xe6, - 0x75, 0x5e, 0x15, 0x58, 0x70, 0x88, 0x0f, 0x59, 0x30, 0xdb, 0xd3, 0x76, 0xd7, 0x6d, 0x2d, 0x7c, - 0xa0, 0xaf, 0x5a, 0x90, 0x02, 0x3b, 0xb7, 0x58, 0x8d, 0xe1, 0xc2, 0x09, 0xdc, 0x19, 0x47, 0x24, - 0xd3, 0x27, 0x75, 0x44, 0x52, 0x0b, 0x83, 0x67, 0xb9, 0xb1, 0xf0, 0x70, 0x56, 0x50, 0xc8, 0xe1, - 0x81, 0xb1, 0x6f, 0x85, 0x81, 0xb1, 0xb3, 0xc5, 0x7d, 0xfa, 0x87, 0x04, 0xc5, 0x0e, 0xa0, 0x4a, - 0x15, 0x5d, 0x5e, 0x4a, 0xb5, 0xf9, 0xc2, 0x3e, 0xa5, 0x66, 0x88, 0x46, 0x7a, 0xdb, 0x26, 0x42, - 0x8d, 0x65, 0x3a, 0xe8, 0x26, 0x7f, 0xc0, 0xcd, 0x22, 0x7e, 0x54, 0x85, 0x59, 0x91, 0x73, 0xdc, - 0x6d, 0x18, 0xbc, 0xb7, 0x96, 0xaa, 0x80, 0xb3, 0xdb, 0x51, 0x15, 0x95, 0xdf, 0x6d, 0x9d, 0x8f, - 0x72, 0xaf, 0xc5, 0xf2, 0x5c, 0xfc, 0x95, 0x2c, 0x07, 0x14, 0x2a, 0x1e, 0xe8, 0xcf, 0x65, 0x43, - 0x51, 0x37, 0x14, 0xfa, 0x96, 0x02, 0x0b, 0xbd, 0x9c, 0xa7, 0x63, 0x84, 0x5f, 0xec, 0xd6, 0x08, - 0xf2, 0x21, 0xf7, 0x39, 0x1a, 0xfe, 0xf4, 0xf9, 0xfd, 0x6a, 0xe1, 0xdc, 0xbe, 0x8d, 0x7a, 0x0f, - 0x6b, 0x94, 0xfc, 0x1f, 0xbf, 0xaa, 0xc0, 0x5c, 0x72, 0x13, 0x90, 0xdf, 0x9c, 0x53, 0x4e, 0xf6, - 0xcd, 0x39, 0xe9, 0xc0, 0xb3, 0x74, 0xc8, 0x81, 0xe7, 0x4b, 0x70, 0x2e, 0x9b, 0x37, 0xa8, 0x46, - 0xc6, 0xde, 0x78, 0x14, 0x96, 0x50, 0x94, 0xc2, 0x9c, 0x16, 0x62, 0x0e, 0xab, 0x7f, 0xe4, 0xdb, - 0x3f, 0xb8, 0xf0, 0x81, 0xef, 0xfc, 0xe0, 0xc2, 0x07, 0xbe, 0xf7, 0x83, 0x0b, 0x1f, 0xf8, 0xe9, - 0x83, 0x0b, 0xca, 0xb7, 0x0f, 0x2e, 0x28, 0xdf, 0x39, 0xb8, 0xa0, 0x7c, 0xef, 0xe0, 0x82, 0xf2, - 0x9f, 0x0f, 0x2e, 0x28, 0x3f, 0xff, 0x5f, 0x2e, 0x7c, 0xe0, 0xcd, 0x49, 0xd1, 0xf1, 0xff, 0x17, - 0x00, 0x00, 0xff, 0xff, 0x12, 0x21, 0xed, 0x34, 0x29, 0xc3, 0x00, 0x00, + // 10229 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x6d, 0x6c, 0x24, 0xc9, + 0x75, 0x98, 0x7a, 0xc8, 0x21, 0x87, 0x6f, 0x48, 0x2e, 0x59, 0xfb, 0x71, 0x3c, 0xde, 0xed, 0xce, + 0xa9, 0x75, 0x12, 0xee, 0x22, 0x99, 0xeb, 0xd3, 0x87, 0xa5, 0xbb, 0xd3, 0xe9, 0x6e, 0x3e, 0xb8, + 0xbb, 0xa3, 0x5d, 0x72, 0xe7, 0x6a, 0x96, 0x77, 0xd2, 0xd9, 0xb9, 0xa8, 0xd9, 0x5d, 0x1c, 0xf6, + 0xb1, 0xa7, 0x7b, 0xae, 0xbb, 0x87, 0x4b, 0x9e, 0x62, 0xc8, 0x52, 0xf4, 0x11, 0xc9, 0x49, 0x60, + 0x38, 0x70, 0x04, 0x49, 0x4e, 0x2c, 0xc3, 0x70, 0x9c, 0xc0, 0x81, 0xad, 0x24, 0xb0, 0x10, 0xe7, + 0x03, 0x31, 0x9c, 0x04, 0x96, 0x8d, 0xc4, 0x50, 0x1c, 0x08, 0x56, 0x90, 0x98, 0x8a, 0x18, 0x44, + 0x49, 0x10, 0xff, 0x08, 0x60, 0xe4, 0xcf, 0xc2, 0x40, 0x82, 0xfa, 0xe8, 0xee, 0xea, 0xaf, 0xd9, + 0x61, 0x0f, 0xb9, 0xba, 0x8b, 0xfd, 0x8b, 0x9c, 0x7a, 0x55, 0xef, 0xbd, 0xae, 0x8f, 0x57, 0xef, + 0xbd, 0x7a, 0xf5, 0x0a, 0x1a, 0x3d, 0xd3, 0xdf, 0x1d, 0x6e, 0xaf, 0xe9, 0x4e, 0xff, 0x6a, 0x4f, + 0x73, 0x0d, 0x62, 0x13, 0x37, 0xfa, 0x67, 0xb0, 0xd7, 0xbb, 0xaa, 0x0d, 0x4c, 0xef, 0xaa, 0xee, + 0xb8, 0xe4, 0xea, 0xfe, 0x53, 0xdb, 0xc4, 0xd7, 0x9e, 0xba, 0xda, 0xa3, 0x30, 0xcd, 0x27, 0xc6, + 0xda, 0xc0, 0x75, 0x7c, 0x07, 0xbd, 0x37, 0xc2, 0xb1, 0x16, 0x34, 0x8d, 0xfe, 0x19, 0xec, 0xf5, + 0xd6, 0x28, 0x8e, 0x35, 0x8a, 0x63, 0x4d, 0xe0, 0x58, 0xfd, 0x11, 0x99, 0xae, 0xd3, 0x73, 0xae, + 0x32, 0x54, 0xdb, 0xc3, 0x1d, 0xf6, 0x8b, 0xfd, 0x60, 0xff, 0x71, 0x12, 0xab, 0x4f, 0xee, 0x7d, + 0xc8, 0x5b, 0x33, 0x1d, 0xca, 0xcc, 0x55, 0x6d, 0xe8, 0x3b, 0x9e, 0xae, 0x59, 0xa6, 0xdd, 0xbb, + 0xba, 0x9f, 0xe2, 0x66, 0x55, 0x95, 0xaa, 0x0a, 0xb6, 0x47, 0xd6, 0x71, 0xb7, 0x35, 0x3d, 0xab, + 0xce, 0xfb, 0xa3, 0x3a, 0x7d, 0x4d, 0xdf, 0x35, 0x6d, 0xe2, 0x1e, 0x06, 0x1d, 0x72, 0xd5, 0x25, + 0x9e, 0x33, 0x74, 0x75, 0x72, 0xa2, 0x56, 0xde, 0xd5, 0x3e, 0xf1, 0xb5, 0x2c, 0x5a, 0x57, 0xf3, + 0x5a, 0xb9, 0x43, 0xdb, 0x37, 0xfb, 0x69, 0x32, 0x3f, 0x76, 0xbf, 0x06, 0x9e, 0xbe, 0x4b, 0xfa, + 0x5a, 0xaa, 0xdd, 0xfb, 0xf2, 0xda, 0x0d, 0x7d, 0xd3, 0xba, 0x6a, 0xda, 0xbe, 0xe7, 0xbb, 0xc9, + 0x46, 0xea, 0x7b, 0xa1, 0x5c, 0x37, 0x0c, 0xc7, 0x46, 0x4f, 0xc2, 0x2c, 0xb1, 0xb5, 0x6d, 0x8b, + 0x18, 0x2b, 0xca, 0x63, 0xca, 0x13, 0x95, 0xc6, 0xb9, 0x6f, 0x1d, 0xd5, 0xde, 0x76, 0x7c, 0x54, + 0x9b, 0x5d, 0xe7, 0xc5, 0x38, 0x80, 0xab, 0x3f, 0x57, 0x82, 0x19, 0xd6, 0xc8, 0x43, 0x3f, 0xab, + 0xc0, 0xf9, 0xbd, 0xe1, 0x36, 0x71, 0x6d, 0xe2, 0x13, 0xaf, 0xa5, 0x79, 0xbb, 0xdb, 0x8e, 0xe6, + 0x72, 0x14, 0xd5, 0xf7, 0x5e, 0x5f, 0x3b, 0xf9, 0xec, 0x59, 0xbb, 0x99, 0x46, 0xd7, 0x78, 0xe8, + 0xf8, 0xa8, 0x76, 0x3e, 0x03, 0x80, 0xb3, 0x88, 0xa3, 0x7d, 0x98, 0xb7, 0x7b, 0xa6, 0x7d, 0xd0, + 0xb6, 0x7b, 0x2e, 0xf1, 0xbc, 0x95, 0x12, 0x63, 0xe6, 0x85, 0x22, 0xcc, 0x6c, 0x4a, 0x78, 0x1a, + 0x4b, 0xc7, 0x47, 0xb5, 0x79, 0xb9, 0x04, 0xc7, 0xe8, 0xa8, 0x9f, 0x57, 0xe0, 0x5c, 0xdd, 0xe8, + 0x9b, 0x9e, 0x67, 0x3a, 0x76, 0xc7, 0x1a, 0xf6, 0x4c, 0x1b, 0x3d, 0x06, 0xd3, 0xb6, 0xd6, 0x27, + 0xac, 0x43, 0xe6, 0x1a, 0xf3, 0xa2, 0x4f, 0xa7, 0x37, 0xb5, 0x3e, 0xc1, 0x0c, 0x82, 0x5e, 0x84, + 0x19, 0xdd, 0xb1, 0x77, 0xcc, 0x9e, 0xe0, 0xf3, 0x47, 0xd6, 0xf8, 0x38, 0xae, 0xc9, 0xe3, 0xc8, + 0xd8, 0x13, 0xe3, 0xbf, 0x86, 0xb5, 0xbb, 0xeb, 0x07, 0x3e, 0xb1, 0x29, 0x99, 0x06, 0x1c, 0x1f, + 0xd5, 0x66, 0x9a, 0x0c, 0x01, 0x16, 0x88, 0xd4, 0x6b, 0x50, 0xa9, 0x5b, 0xc4, 0xf5, 0x4d, 0xbb, + 0x87, 0x9e, 0x81, 0x45, 0xd2, 0xd7, 0x4c, 0x0b, 0x13, 0x9d, 0x98, 0xfb, 0xc4, 0xf5, 0x56, 0x94, + 0xc7, 0xa6, 0x9e, 0x98, 0x6b, 0xa0, 0xe3, 0xa3, 0xda, 0xe2, 0x7a, 0x0c, 0x82, 0x13, 0x35, 0xd5, + 0x4f, 0x2b, 0x50, 0xad, 0x0f, 0x0d, 0xd3, 0xe7, 0xf8, 0x91, 0x0b, 0x55, 0x8d, 0xfe, 0xec, 0x38, + 0x96, 0xa9, 0x1f, 0x8a, 0x41, 0x7e, 0xbe, 0x48, 0xbf, 0xd6, 0x23, 0x34, 0x8d, 0x73, 0xc7, 0x47, + 0xb5, 0xaa, 0x54, 0x80, 0x65, 0x22, 0xea, 0x2e, 0xc8, 0x30, 0xf4, 0x71, 0x98, 0xe7, 0x1f, 0xb9, + 0xa1, 0x0d, 0x30, 0xd9, 0x11, 0x3c, 0xbc, 0x43, 0xea, 0xb3, 0x80, 0xd0, 0xda, 0xed, 0xed, 0xd7, + 0x88, 0xee, 0x63, 0xb2, 0x43, 0x5c, 0x62, 0xeb, 0x84, 0x0f, 0x5f, 0x53, 0x6a, 0x8c, 0x63, 0xa8, + 0xd4, 0xef, 0x29, 0xb0, 0x54, 0xdf, 0xd7, 0x4c, 0x4b, 0xdb, 0x36, 0x2d, 0xd3, 0x3f, 0x7c, 0xc5, + 0xb1, 0xc9, 0x18, 0xe3, 0xb7, 0x05, 0x0f, 0x0d, 0x6d, 0x8d, 0xb7, 0xb3, 0xc8, 0x06, 0x1f, 0xb1, + 0x3b, 0x87, 0x03, 0x42, 0x27, 0x1e, 0xed, 0xe9, 0x47, 0x8e, 0x8f, 0x6a, 0x0f, 0x6d, 0x65, 0x57, + 0xc1, 0x79, 0x6d, 0x11, 0x86, 0x4b, 0x12, 0xe8, 0x25, 0xc7, 0x1a, 0xf6, 0x05, 0xd6, 0x29, 0x86, + 0x75, 0xf5, 0xf8, 0xa8, 0x76, 0x69, 0x2b, 0xb3, 0x06, 0xce, 0x69, 0xa9, 0x7e, 0xab, 0x04, 0xf3, + 0x0d, 0x4d, 0xdf, 0x1b, 0x0e, 0x1a, 0x43, 0x7d, 0x8f, 0xf8, 0xe8, 0x13, 0x50, 0xa1, 0x62, 0xcb, + 0xd0, 0x7c, 0x4d, 0xf4, 0xe4, 0x8f, 0xe6, 0xce, 0x3e, 0x36, 0x88, 0xb4, 0x76, 0xd4, 0xb7, 0x1b, + 0xc4, 0xd7, 0x1a, 0x48, 0xf4, 0x09, 0x44, 0x65, 0x38, 0xc4, 0x8a, 0x76, 0x60, 0xda, 0x1b, 0x10, + 0x5d, 0xcc, 0xed, 0x56, 0x91, 0xb9, 0x22, 0x73, 0xdc, 0x1d, 0x10, 0x3d, 0x1a, 0x05, 0xfa, 0x0b, + 0x33, 0xfc, 0xc8, 0x86, 0x19, 0xcf, 0xd7, 0xfc, 0x21, 0xed, 0x1e, 0x4a, 0xe9, 0xda, 0xc4, 0x94, + 0x18, 0xb6, 0xc6, 0xa2, 0xa0, 0x35, 0xc3, 0x7f, 0x63, 0x41, 0x45, 0xfd, 0x43, 0x05, 0x96, 0xe4, + 0xea, 0xb7, 0x4c, 0xcf, 0x47, 0x3f, 0x91, 0xea, 0xce, 0xb5, 0xf1, 0xba, 0x93, 0xb6, 0x66, 0x9d, + 0xb9, 0x24, 0xc8, 0x55, 0x82, 0x12, 0xa9, 0x2b, 0x09, 0x94, 0x4d, 0x9f, 0xf4, 0xf9, 0xb4, 0x2a, + 0x28, 0xcf, 0x64, 0x96, 0x1b, 0x0b, 0x82, 0x58, 0xb9, 0x4d, 0xd1, 0x62, 0x8e, 0x5d, 0xfd, 0x04, + 0x5c, 0x90, 0x6b, 0x75, 0x5c, 0x67, 0xdf, 0x34, 0x88, 0x4b, 0x57, 0x82, 0x7f, 0x38, 0x48, 0xad, + 0x04, 0x3a, 0xb3, 0x30, 0x83, 0xa0, 0x77, 0xc1, 0x8c, 0x4b, 0x7a, 0xa6, 0x63, 0xb3, 0xd1, 0x9e, + 0x8b, 0xfa, 0x0e, 0xb3, 0x52, 0x2c, 0xa0, 0xea, 0xff, 0x29, 0xc5, 0xfb, 0x8e, 0x0e, 0x23, 0xda, + 0x87, 0xca, 0x40, 0x90, 0x12, 0x7d, 0x77, 0x63, 0xd2, 0x0f, 0x0c, 0x58, 0x8f, 0x7a, 0x35, 0x28, + 0xc1, 0x21, 0x2d, 0x64, 0xc2, 0x62, 0xf0, 0x7f, 0x73, 0x02, 0x31, 0xcc, 0xc4, 0x69, 0x27, 0x86, + 0x08, 0x27, 0x10, 0xa3, 0x3b, 0x30, 0xe7, 0x11, 0xdd, 0x25, 0x54, 0x26, 0x89, 0x69, 0x9a, 0x29, + 0xb8, 0xba, 0x41, 0x25, 0x21, 0xb8, 0x96, 0x05, 0xfb, 0x73, 0x21, 0x00, 0x47, 0x88, 0xd0, 0x13, + 0x50, 0xf1, 0x08, 0x31, 0xa8, 0x44, 0x5a, 0x99, 0xe6, 0x63, 0x43, 0x3f, 0xb5, 0x2b, 0xca, 0x70, + 0x08, 0x55, 0xbf, 0x3e, 0x0d, 0x28, 0x3d, 0xc5, 0xe5, 0x1e, 0xe0, 0x25, 0xa2, 0xff, 0x27, 0xe9, + 0x01, 0xb1, 0x5a, 0x12, 0x88, 0xd1, 0x1b, 0xb0, 0x60, 0x69, 0x9e, 0x7f, 0x7b, 0x40, 0x75, 0x90, + 0x60, 0xa2, 0x54, 0xdf, 0x5b, 0x2f, 0x32, 0xd2, 0xb7, 0x64, 0x44, 0x8d, 0xe5, 0xe3, 0xa3, 0xda, + 0x42, 0xac, 0x08, 0xc7, 0x49, 0xa1, 0xd7, 0x60, 0x8e, 0x16, 0xac, 0xbb, 0xae, 0xe3, 0x8a, 0xde, + 0x7f, 0xae, 0x28, 0x5d, 0x86, 0xa4, 0xb1, 0x40, 0xc7, 0x24, 0xfc, 0x89, 0x23, 0xf4, 0xe8, 0xa3, + 0x80, 0x9c, 0x6d, 0x8f, 0xb8, 0xfb, 0xc4, 0xb8, 0xce, 0x15, 0x2e, 0xfa, 0xb1, 0x74, 0x74, 0xa6, + 0x1a, 0xab, 0x62, 0x34, 0xd1, 0xed, 0x54, 0x0d, 0x9c, 0xd1, 0x0a, 0xed, 0x01, 0x0a, 0x95, 0xb6, + 0x70, 0x02, 0xac, 0x94, 0xc7, 0x9f, 0x3e, 0x97, 0x28, 0xb1, 0xeb, 0x29, 0x14, 0x38, 0x03, 0xad, + 0xfa, 0x6f, 0x4a, 0x50, 0xe5, 0x53, 0x64, 0xdd, 0xf6, 0xdd, 0xc3, 0x07, 0xb0, 0x41, 0x90, 0xd8, + 0x06, 0xd1, 0x2c, 0xbe, 0xe6, 0x19, 0xc3, 0xb9, 0xfb, 0x43, 0x3f, 0xb1, 0x3f, 0xac, 0x4f, 0x4a, + 0x68, 0xf4, 0xf6, 0xf0, 0x1d, 0x05, 0xce, 0x49, 0xb5, 0x1f, 0xc0, 0xee, 0x60, 0xc4, 0x77, 0x87, + 0xe7, 0x27, 0xfc, 0xbe, 0x9c, 0xcd, 0xc1, 0x89, 0x7d, 0x16, 0x13, 0xdc, 0xef, 0x05, 0xd8, 0x66, + 0xe2, 0x64, 0x33, 0xd2, 0x93, 0xc2, 0x21, 0x6f, 0x84, 0x10, 0x2c, 0xd5, 0x8a, 0xc9, 0xac, 0xd2, + 0x48, 0x99, 0xf5, 0xdf, 0xa6, 0x60, 0x39, 0xd5, 0xed, 0x69, 0x39, 0xa2, 0xfc, 0x90, 0xe4, 0x48, + 0xe9, 0x87, 0x21, 0x47, 0xa6, 0x0a, 0xc9, 0x91, 0xb1, 0xf7, 0x09, 0xe4, 0x02, 0xea, 0x9b, 0x3d, + 0xde, 0xac, 0xeb, 0x6b, 0xae, 0x7f, 0xc7, 0xec, 0x13, 0x21, 0x71, 0xfe, 0xc2, 0x78, 0x53, 0x96, + 0xb6, 0xe0, 0x82, 0x67, 0x23, 0x85, 0x09, 0x67, 0x60, 0x57, 0x7f, 0x5b, 0x81, 0xa9, 0x26, 0x6e, + 0xa3, 0x77, 0xc7, 0xf4, 0xed, 0x87, 0x64, 0x7d, 0xfb, 0xde, 0x51, 0x6d, 0xb6, 0x89, 0xdb, 0x92, + 0xea, 0xfd, 0xd7, 0x15, 0x58, 0xd6, 0x1d, 0xdb, 0xd7, 0x28, 0x17, 0x98, 0x6f, 0x4a, 0xc1, 0x02, + 0x28, 0xa4, 0x6a, 0x36, 0x13, 0xc8, 0x1a, 0x0f, 0x0b, 0x06, 0x96, 0x93, 0x10, 0x0f, 0xa7, 0x29, + 0xab, 0x5b, 0x30, 0xd7, 0xb4, 0x9c, 0xa1, 0xd1, 0xb6, 0x77, 0x9c, 0x53, 0xd4, 0x97, 0xbe, 0xab, + 0xc0, 0x3c, 0xc3, 0xdb, 0x71, 0x9d, 0x1d, 0xd3, 0x22, 0x6f, 0x0d, 0xb5, 0x5d, 0xe6, 0x38, 0x4f, + 0x2c, 0x33, 0x35, 0x5a, 0xae, 0xf8, 0x16, 0x51, 0xa3, 0x65, 0x96, 0x73, 0x24, 0xe5, 0xcf, 0xcd, + 0xc6, 0xbf, 0x8c, 0xc9, 0xca, 0x27, 0xa0, 0xa2, 0x6b, 0x8d, 0xa1, 0x6d, 0x58, 0xe1, 0xbc, 0xa0, + 0x5c, 0x36, 0xeb, 0xbc, 0x0c, 0x87, 0x50, 0xf4, 0x06, 0x40, 0xe4, 0xda, 0x10, 0xc3, 0x70, 0x6d, + 0x32, 0x77, 0x4a, 0x97, 0xf8, 0xbe, 0x69, 0xf7, 0xbc, 0x68, 0xe8, 0x23, 0x18, 0x96, 0xa8, 0xa1, + 0x9f, 0x84, 0x05, 0xd1, 0xc9, 0xed, 0xbe, 0xd6, 0x13, 0x16, 0x67, 0xc1, 0x9e, 0xda, 0x90, 0x10, + 0x35, 0x2e, 0x0a, 0xc2, 0x0b, 0x72, 0xa9, 0x87, 0xe3, 0xd4, 0xd0, 0x21, 0xcc, 0xf7, 0x65, 0x2b, + 0x7a, 0xba, 0xf8, 0x86, 0x26, 0x59, 0xd4, 0x8d, 0x0b, 0x82, 0xf8, 0x7c, 0xcc, 0xfe, 0x8e, 0x91, + 0xca, 0x30, 0x06, 0xca, 0x67, 0x65, 0x0c, 0x10, 0x98, 0xe5, 0xcb, 0xdb, 0x5b, 0x99, 0x61, 0x1f, + 0xf8, 0x4c, 0x91, 0x0f, 0xe4, 0x92, 0x22, 0xf2, 0xd5, 0xf1, 0xdf, 0x1e, 0x0e, 0x70, 0xa3, 0x7d, + 0x98, 0xa7, 0x72, 0xbd, 0x4b, 0x2c, 0xa2, 0xfb, 0x8e, 0xbb, 0x32, 0x5b, 0xdc, 0x17, 0xd6, 0x95, + 0xf0, 0x70, 0x67, 0x8a, 0x5c, 0x82, 0x63, 0x74, 0x42, 0xe9, 0x57, 0xc9, 0x95, 0x7e, 0x43, 0xa8, + 0xee, 0x4b, 0x5e, 0x8d, 0x39, 0xd6, 0x09, 0x1f, 0x29, 0xc2, 0x58, 0xe4, 0xe2, 0x68, 0x9c, 0x17, + 0x84, 0xaa, 0xb2, 0x3b, 0x44, 0xa6, 0xa3, 0x1e, 0x55, 0x60, 0xb9, 0x69, 0x0d, 0x3d, 0x9f, 0xb8, + 0x75, 0xe1, 0x6c, 0x26, 0x2e, 0xfa, 0x8c, 0x02, 0x97, 0xd8, 0xbf, 0x2d, 0xe7, 0xae, 0xdd, 0x22, + 0x96, 0x76, 0x58, 0xdf, 0xa1, 0x35, 0x0c, 0xe3, 0x64, 0x12, 0xa8, 0x35, 0x14, 0x7a, 0x04, 0x73, + 0xcf, 0x74, 0x33, 0x31, 0xe2, 0x1c, 0x4a, 0xe8, 0xa7, 0x15, 0x78, 0x38, 0x03, 0xd4, 0x22, 0x16, + 0xf1, 0x89, 0x90, 0x01, 0x27, 0xe5, 0xe3, 0xf2, 0xf1, 0x51, 0xed, 0xe1, 0x6e, 0x1e, 0x52, 0x9c, + 0x4f, 0x0f, 0xfd, 0x0d, 0x05, 0x56, 0x33, 0xa0, 0xd7, 0x34, 0xd3, 0x1a, 0xba, 0x44, 0xa8, 0xd1, + 0x27, 0x65, 0xe7, 0xca, 0xf1, 0x51, 0x6d, 0xb5, 0x9b, 0x8b, 0x15, 0x8f, 0xa0, 0x88, 0x3e, 0x05, + 0x17, 0x43, 0xe8, 0x96, 0x6d, 0x13, 0x62, 0x10, 0x83, 0x69, 0x26, 0xd3, 0x85, 0x58, 0x79, 0xf8, + 0xf8, 0xa8, 0x76, 0xb1, 0x9b, 0x85, 0x10, 0x67, 0xd3, 0x41, 0x3d, 0xb8, 0x1c, 0x01, 0x7c, 0xd3, + 0x32, 0xdf, 0x60, 0x98, 0xee, 0xec, 0xba, 0xc4, 0xdb, 0x75, 0x2c, 0x83, 0x09, 0x0b, 0xa5, 0xf1, + 0xf6, 0xe3, 0xa3, 0xda, 0xe5, 0xee, 0xa8, 0x8a, 0x78, 0x34, 0x1e, 0x64, 0xc0, 0xbc, 0xa7, 0x6b, + 0x76, 0xdb, 0xf6, 0x89, 0xbb, 0xaf, 0x59, 0x2b, 0x33, 0x85, 0x3e, 0x90, 0x2f, 0x51, 0x09, 0x0f, + 0x8e, 0x61, 0x45, 0x1f, 0x82, 0x0a, 0x39, 0x18, 0x68, 0xb6, 0x41, 0xb8, 0x58, 0x98, 0x6b, 0x3c, + 0x4a, 0x37, 0xa3, 0x75, 0x51, 0x76, 0xef, 0xa8, 0x36, 0x1f, 0xfc, 0xbf, 0xe1, 0x18, 0x04, 0x87, + 0xb5, 0xd1, 0x5f, 0x86, 0x0b, 0x7d, 0xed, 0x60, 0xd3, 0x31, 0x08, 0x13, 0x72, 0x54, 0xe6, 0xb1, + 0x81, 0xa8, 0x14, 0xe2, 0x73, 0xe5, 0xf8, 0xa8, 0x76, 0x61, 0x23, 0x03, 0x1f, 0xce, 0xa4, 0x42, + 0x87, 0xa1, 0xaf, 0x1d, 0x5c, 0x77, 0x35, 0x9d, 0xec, 0x0c, 0xad, 0x3b, 0xc4, 0xed, 0x9b, 0x36, + 0xd7, 0x26, 0x89, 0xee, 0xd8, 0x06, 0x15, 0x25, 0xca, 0x13, 0x65, 0x3e, 0x0c, 0x1b, 0xa3, 0x2a, + 0xe2, 0xd1, 0x78, 0xd0, 0xfb, 0x61, 0xde, 0xec, 0xd9, 0x8e, 0x4b, 0xee, 0x68, 0xa6, 0xed, 0x7b, + 0x2b, 0xc0, 0x1c, 0xaf, 0xac, 0x5b, 0xdb, 0x52, 0x39, 0x8e, 0xd5, 0x52, 0xff, 0xa7, 0x02, 0x55, + 0x21, 0x60, 0x98, 0x1e, 0xb8, 0x0d, 0x65, 0x9d, 0xea, 0x01, 0x42, 0x90, 0x3c, 0x57, 0x58, 0xdf, + 0xa0, 0xd8, 0x22, 0x65, 0x83, 0x15, 0x61, 0x8e, 0x1a, 0xed, 0x67, 0x68, 0x0b, 0x8d, 0xc9, 0xb4, + 0x05, 0x46, 0xed, 0x3e, 0x9a, 0x82, 0x7a, 0x34, 0x05, 0x73, 0x4d, 0xc7, 0x36, 0x4c, 0x66, 0x61, + 0x3c, 0x15, 0xd3, 0x78, 0x2f, 0xcb, 0x32, 0xff, 0xde, 0x51, 0x6d, 0x21, 0xac, 0x28, 0x6d, 0x02, + 0x4f, 0x87, 0x66, 0x39, 0x57, 0x81, 0xdf, 0x1e, 0xb7, 0xa7, 0xef, 0x1d, 0xd5, 0xce, 0x85, 0xcd, + 0xe2, 0x26, 0x36, 0xda, 0x07, 0x44, 0x0d, 0xa5, 0x3b, 0xae, 0x66, 0x7b, 0x1c, 0x2d, 0x9d, 0x82, + 0x53, 0x27, 0xb6, 0x52, 0x42, 0x3b, 0xea, 0x56, 0x0a, 0x1b, 0xce, 0xa0, 0x80, 0x5e, 0x83, 0x45, + 0x5a, 0xba, 0x35, 0x30, 0x34, 0x9f, 0x48, 0xf2, 0xe7, 0x44, 0x96, 0x91, 0xa0, 0xb9, 0x78, 0x2b, + 0x86, 0x09, 0x27, 0x30, 0x73, 0x0b, 0x41, 0xf3, 0x1c, 0x9b, 0x89, 0x96, 0x98, 0x85, 0x40, 0x4b, + 0xb1, 0x80, 0xa2, 0x27, 0x61, 0xb6, 0x4f, 0x3c, 0x4f, 0xeb, 0x11, 0x26, 0x2b, 0xe6, 0x22, 0x85, + 0x60, 0x83, 0x17, 0xe3, 0x00, 0x8e, 0xde, 0x03, 0x65, 0xdd, 0x31, 0x88, 0xb7, 0x32, 0xcb, 0x66, + 0xf3, 0x25, 0x36, 0x97, 0x68, 0xc1, 0xbd, 0xa3, 0xda, 0x1c, 0xb3, 0x3a, 0xe9, 0x2f, 0xcc, 0x2b, + 0xa9, 0xbf, 0x40, 0xf5, 0xf3, 0x84, 0x9d, 0x33, 0x86, 0x65, 0xf3, 0xe0, 0x9c, 0xaa, 0xea, 0x17, + 0x4b, 0x70, 0x81, 0x72, 0xe8, 0x3a, 0x96, 0x45, 0xf7, 0xae, 0x81, 0xe5, 0x1c, 0xf6, 0x89, 0xfd, + 0x20, 0xce, 0x36, 0x82, 0x7e, 0x28, 0xe5, 0xf6, 0x43, 0x3f, 0xd5, 0x0f, 0x53, 0x45, 0xfa, 0x21, + 0x9c, 0x2e, 0xf7, 0xe9, 0x8b, 0xff, 0xae, 0xc0, 0x4a, 0x56, 0x5f, 0x3c, 0x00, 0xab, 0xaa, 0x1f, + 0xb7, 0xaa, 0x6e, 0x14, 0xb5, 0xbe, 0x93, 0xac, 0xe7, 0x58, 0x57, 0x3f, 0x28, 0xc1, 0xa5, 0xa8, + 0x7a, 0xdb, 0xf6, 0x7c, 0xcd, 0xb2, 0xb8, 0x9f, 0xe3, 0xec, 0xc7, 0x7d, 0x10, 0x33, 0x8e, 0x37, + 0x27, 0xfb, 0x54, 0x99, 0xf7, 0x5c, 0xef, 0xe5, 0x41, 0xc2, 0x7b, 0xd9, 0x39, 0x45, 0x9a, 0xa3, + 0x1d, 0x99, 0xff, 0x4b, 0x81, 0xd5, 0xec, 0x86, 0x0f, 0x60, 0x52, 0x39, 0xf1, 0x49, 0xf5, 0xd1, + 0xd3, 0xfb, 0xea, 0x9c, 0x69, 0xf5, 0x8f, 0x4a, 0x79, 0x5f, 0xcb, 0xcc, 0xf7, 0x1d, 0x38, 0x47, + 0xed, 0x2a, 0xcf, 0x17, 0x6e, 0xb6, 0x93, 0x9d, 0x3f, 0x07, 0xce, 0xac, 0x73, 0x38, 0x8e, 0x03, + 0x27, 0x91, 0xa2, 0x4d, 0x98, 0xa5, 0xc6, 0x14, 0xc5, 0x5f, 0x1a, 0x1f, 0x7f, 0x28, 0xf3, 0xbb, + 0xbc, 0x2d, 0x0e, 0x90, 0xa0, 0x9f, 0x80, 0x05, 0x23, 0x5c, 0x51, 0xf7, 0x39, 0x7c, 0x4a, 0x62, + 0x65, 0x0e, 0xd1, 0x96, 0xdc, 0x1a, 0xc7, 0x91, 0xa9, 0x7f, 0xaa, 0xc0, 0xa3, 0xa3, 0xe6, 0x16, + 0x7a, 0x1d, 0x40, 0x0f, 0x36, 0x71, 0x1e, 0x7e, 0x50, 0x54, 0x0d, 0x0a, 0xb0, 0x44, 0x0b, 0x34, + 0x2c, 0xf2, 0xb0, 0x44, 0x24, 0xe3, 0x4c, 0xab, 0x74, 0x46, 0x67, 0x5a, 0xea, 0x1f, 0x2b, 0xb2, + 0x28, 0x92, 0xc7, 0xf6, 0xad, 0x26, 0x8a, 0x64, 0xde, 0x73, 0x3d, 0x76, 0xff, 0xa1, 0x04, 0x8f, + 0x65, 0x37, 0x91, 0xf6, 0xde, 0x17, 0x60, 0x66, 0xc0, 0x63, 0x44, 0xa6, 0xd8, 0xde, 0xf8, 0x04, + 0x95, 0x2c, 0x3c, 0x82, 0xe3, 0xde, 0x51, 0x6d, 0x35, 0x4b, 0xd0, 0x8b, 0xd8, 0x0f, 0xd1, 0x0e, + 0x99, 0x09, 0xbf, 0x05, 0xd7, 0xb1, 0xde, 0x37, 0xa6, 0x70, 0xd1, 0xb6, 0x89, 0x35, 0xb6, 0xab, + 0xe2, 0xd3, 0x0a, 0x2c, 0xc6, 0x66, 0xb4, 0xb7, 0x52, 0x66, 0x73, 0xb4, 0xd0, 0x71, 0x42, 0x6c, + 0xa9, 0x44, 0x3b, 0x77, 0xac, 0xd8, 0xc3, 0x09, 0x82, 0x09, 0x31, 0x2b, 0xf7, 0xea, 0x5b, 0x4e, + 0xcc, 0xca, 0xcc, 0xe7, 0x88, 0xd9, 0x9f, 0x2f, 0xe5, 0x7d, 0x2d, 0x13, 0xb3, 0x77, 0x61, 0x2e, + 0x88, 0xc1, 0x0b, 0xc4, 0xc5, 0xb5, 0x49, 0x79, 0xe2, 0xe8, 0xa2, 0xa3, 0xf4, 0xa0, 0xc4, 0xc3, + 0x11, 0x2d, 0xf4, 0x59, 0x05, 0x20, 0x1a, 0x18, 0xb1, 0xa8, 0xee, 0x9c, 0x5e, 0x77, 0x48, 0x6a, + 0xcd, 0x22, 0x5d, 0xd2, 0xd2, 0xa4, 0x90, 0xe8, 0xaa, 0xdf, 0x28, 0x01, 0x4a, 0xf3, 0x4e, 0xd5, + 0xcd, 0x3d, 0xd3, 0x36, 0x92, 0x6a, 0xf7, 0x4d, 0xd3, 0x36, 0x30, 0x83, 0x8c, 0xa1, 0x90, 0x3e, + 0x07, 0xe7, 0x7a, 0x96, 0xb3, 0xad, 0x59, 0xd6, 0xa1, 0x08, 0xeb, 0x63, 0x2b, 0xb4, 0xd2, 0x38, + 0x4f, 0x37, 0xa6, 0xeb, 0x71, 0x10, 0x4e, 0xd6, 0x45, 0x03, 0x58, 0x72, 0xa9, 0x71, 0xac, 0x9b, + 0x16, 0x33, 0x50, 0x9c, 0xa1, 0x5f, 0xd0, 0xfb, 0x72, 0xe1, 0xf8, 0xa8, 0xb6, 0x84, 0x13, 0xb8, + 0x70, 0x0a, 0x3b, 0x7a, 0x27, 0xcc, 0x0e, 0x5c, 0xb3, 0xaf, 0xb9, 0x87, 0xcc, 0x04, 0xaa, 0x34, + 0xaa, 0x74, 0x87, 0xeb, 0xf0, 0x22, 0x1c, 0xc0, 0xd4, 0xcf, 0x2a, 0x30, 0xdb, 0x74, 0x5c, 0xd2, + 0xda, 0xec, 0xa2, 0x43, 0xa8, 0x4a, 0x61, 0xa4, 0x62, 0xbd, 0x14, 0x9c, 0x40, 0x0c, 0x63, 0x3d, + 0xc2, 0x16, 0x04, 0xab, 0x85, 0x05, 0x58, 0xa6, 0xa5, 0x76, 0xe8, 0xc0, 0x25, 0xdb, 0xa0, 0x67, + 0x60, 0xba, 0xef, 0x18, 0x81, 0xbd, 0xf4, 0xae, 0x60, 0x58, 0x36, 0x1c, 0x83, 0xda, 0xc5, 0x97, + 0xd2, 0x2d, 0x98, 0xbb, 0x85, 0xb5, 0x51, 0xbf, 0xa6, 0xc0, 0x14, 0xfd, 0x28, 0x15, 0x66, 0x0c, + 0xa7, 0xaf, 0x99, 0xb6, 0xc0, 0xc2, 0xc2, 0xfe, 0x5a, 0xac, 0x04, 0x0b, 0x08, 0x1a, 0xc0, 0x5c, + 0xb0, 0x37, 0x4d, 0x74, 0x0c, 0xdc, 0xda, 0xec, 0x86, 0xa1, 0x33, 0xe1, 0x82, 0x09, 0x4a, 0x3c, + 0x1c, 0x11, 0x51, 0x35, 0x58, 0x6e, 0x6d, 0x76, 0xdb, 0xb6, 0x6e, 0x0d, 0x0d, 0xb2, 0x7e, 0xc0, + 0xfe, 0xd0, 0x21, 0x33, 0x79, 0x89, 0x08, 0x35, 0x64, 0x43, 0x26, 0x2a, 0xe1, 0x00, 0x46, 0xab, + 0x11, 0xde, 0x42, 0xc4, 0xc9, 0xb1, 0x6a, 0x02, 0x09, 0x0e, 0x60, 0xea, 0x77, 0x4b, 0x50, 0x95, + 0x18, 0x42, 0x16, 0xcc, 0xf2, 0xcf, 0x0d, 0xc2, 0x54, 0xd6, 0x0b, 0x7e, 0x62, 0x9c, 0x6b, 0x4e, + 0x9d, 0x77, 0xa8, 0x87, 0x03, 0x12, 0xf2, 0xf4, 0x2b, 0xe5, 0x4f, 0x3f, 0xb4, 0x06, 0xc0, 0x03, + 0x72, 0xd8, 0xe9, 0x2a, 0xdf, 0xf3, 0xd8, 0x0a, 0xef, 0x86, 0xa5, 0x58, 0xaa, 0x81, 0x1e, 0x15, + 0x0b, 0x95, 0x9f, 0xc3, 0x56, 0x12, 0x8b, 0x74, 0x07, 0xca, 0x6f, 0x38, 0x36, 0xf1, 0xc4, 0xe1, + 0xc3, 0x29, 0x7d, 0xe0, 0x1c, 0x15, 0xc3, 0xaf, 0x50, 0xbc, 0x98, 0xa3, 0x57, 0x7f, 0x51, 0x01, + 0x68, 0x69, 0xbe, 0xc6, 0x7d, 0xe5, 0x63, 0x84, 0x3a, 0x3e, 0x1a, 0x93, 0x2f, 0x95, 0xd4, 0x71, + 0xe6, 0xb4, 0x67, 0xbe, 0x11, 0x7c, 0x7e, 0xa8, 0xb7, 0x70, 0xec, 0x5d, 0xf3, 0x0d, 0x82, 0x19, + 0x1c, 0xbd, 0x1b, 0xe6, 0x88, 0xad, 0xbb, 0x87, 0x03, 0x9f, 0x18, 0xac, 0x07, 0x2a, 0xfc, 0x04, + 0x7c, 0x3d, 0x28, 0xc4, 0x11, 0x5c, 0x7d, 0x0a, 0xe2, 0xca, 0xe7, 0xfd, 0xb9, 0x54, 0xf7, 0xa1, + 0xb2, 0x6e, 0x1b, 0x03, 0xc7, 0xb4, 0xfd, 0x31, 0xbe, 0xe9, 0x32, 0x4c, 0x0d, 0x5d, 0x4b, 0x7c, + 0x52, 0x55, 0x54, 0x98, 0xda, 0xc2, 0xb7, 0x30, 0x2d, 0x47, 0x4f, 0xc2, 0xec, 0x60, 0xe8, 0x0e, + 0x1c, 0x2f, 0xf8, 0xae, 0x50, 0xcb, 0xee, 0xf0, 0x62, 0x1c, 0xc0, 0xd5, 0x7b, 0x0a, 0x2c, 0xad, + 0x1f, 0x0c, 0x4c, 0x97, 0x85, 0x5d, 0x12, 0x97, 0x6a, 0x90, 0xb4, 0xfd, 0x3e, 0xff, 0x57, 0xf0, + 0x10, 0xb6, 0x17, 0x35, 0x70, 0x00, 0x47, 0x3b, 0xb0, 0x48, 0x58, 0x73, 0xb6, 0x55, 0x68, 0xa1, + 0xcb, 0xff, 0x24, 0x8e, 0x25, 0x1e, 0xd5, 0x1b, 0xc3, 0x82, 0x13, 0x58, 0x51, 0x17, 0x16, 0x75, + 0x4b, 0xf3, 0x3c, 0x73, 0xc7, 0xd4, 0xa3, 0x80, 0x82, 0xb9, 0xc6, 0xbb, 0x69, 0xdb, 0x66, 0x0c, + 0x72, 0xef, 0xa8, 0x76, 0x51, 0xf0, 0x19, 0x07, 0xe0, 0x04, 0x0a, 0xf5, 0xb7, 0x15, 0x98, 0x0b, + 0xf5, 0xe6, 0x37, 0x95, 0x87, 0x08, 0x3d, 0x01, 0x15, 0xc3, 0xf4, 0xe4, 0xcd, 0x8e, 0x1d, 0xba, + 0xb6, 0x44, 0x19, 0x0e, 0xa1, 0xaa, 0x07, 0x95, 0xeb, 0x62, 0x59, 0xa1, 0x55, 0x28, 0x99, 0xc1, + 0x5e, 0x0b, 0xe2, 0x03, 0x4a, 0xed, 0x16, 0x2e, 0x99, 0x46, 0x38, 0xab, 0x4a, 0xb9, 0xb3, 0x4a, + 0x1a, 0xf6, 0xa9, 0xd1, 0xc3, 0xae, 0xfe, 0x9a, 0x02, 0xd5, 0x1b, 0xe6, 0x36, 0x71, 0xb9, 0xf3, + 0x99, 0xc9, 0xc5, 0x58, 0x20, 0x7e, 0x35, 0x2b, 0x08, 0x1f, 0x1d, 0xc0, 0x9c, 0xa7, 0xef, 0x12, + 0x63, 0x68, 0x85, 0x21, 0x0f, 0x85, 0xc2, 0xed, 0x25, 0xd2, 0x5d, 0x81, 0x4f, 0x0a, 0x38, 0x0c, + 0x28, 0xe0, 0x88, 0x98, 0xfa, 0x49, 0x38, 0x9f, 0xd1, 0x08, 0xd5, 0xa0, 0xec, 0xf9, 0x9a, 0xeb, + 0x8b, 0x3e, 0x63, 0xe2, 0x86, 0xc5, 0x77, 0x60, 0x5e, 0x8e, 0x1e, 0x86, 0x29, 0x62, 0x1b, 0xa2, + 0xd3, 0x66, 0xe9, 0x2a, 0x5b, 0xb7, 0x0d, 0x4c, 0xcb, 0xe8, 0x10, 0x59, 0x4e, 0x6c, 0x32, 0xb2, + 0x21, 0xba, 0x25, 0xca, 0x70, 0x08, 0x55, 0xff, 0xe9, 0x34, 0x5c, 0xbe, 0xe1, 0xb8, 0xe6, 0x1b, + 0x8e, 0xed, 0x6b, 0x56, 0xc7, 0x31, 0xa2, 0x43, 0x3c, 0x31, 0xdc, 0x9f, 0x53, 0xe0, 0x21, 0x7d, + 0x30, 0x6c, 0xdb, 0xa6, 0x6f, 0x6a, 0xc1, 0xd9, 0x4a, 0x87, 0xb8, 0xa6, 0x53, 0xf4, 0x2c, 0x8f, + 0x05, 0x70, 0x37, 0x3b, 0x5b, 0x59, 0x28, 0x71, 0x1e, 0x2d, 0x76, 0xa4, 0x68, 0x38, 0x77, 0x6d, + 0xc6, 0x5c, 0xd7, 0x67, 0x41, 0xe5, 0x6f, 0x44, 0x9f, 0x58, 0xf0, 0x48, 0xb1, 0x95, 0x89, 0x11, + 0xe7, 0x50, 0x42, 0x9f, 0x82, 0x8b, 0x26, 0x67, 0x0e, 0x13, 0xcd, 0x30, 0x6d, 0xe2, 0x79, 0xec, + 0x60, 0x6d, 0x92, 0x33, 0xb3, 0x76, 0x16, 0x42, 0x9c, 0x4d, 0x07, 0xbd, 0x0a, 0xe0, 0x1d, 0xda, + 0xba, 0xe8, 0xff, 0x72, 0x21, 0xaa, 0x7c, 0x27, 0x0d, 0xb1, 0x60, 0x09, 0x23, 0xdd, 0x4c, 0x7c, + 0xc7, 0x22, 0xae, 0x66, 0xeb, 0xdc, 0xf7, 0xad, 0xf0, 0xcd, 0xe4, 0x4e, 0x50, 0x88, 0x23, 0xb8, + 0xfa, 0x0f, 0x14, 0x98, 0x15, 0x97, 0x35, 0xd0, 0xbb, 0x12, 0x0a, 0x55, 0xe8, 0x00, 0x4b, 0x28, + 0x55, 0x87, 0xcc, 0x79, 0x21, 0x74, 0x71, 0x21, 0xa4, 0x0a, 0xed, 0xc8, 0x82, 0x70, 0xa4, 0xd8, + 0xc7, 0x9c, 0x18, 0x81, 0xb2, 0x2f, 0x11, 0x53, 0xbf, 0xae, 0xc0, 0x72, 0xaa, 0xd5, 0x18, 0x66, + 0xc0, 0x03, 0xf4, 0xbe, 0xff, 0x61, 0x15, 0xd8, 0xbd, 0x9c, 0x7a, 0xa7, 0xdd, 0x25, 0xee, 0x7e, + 0xb8, 0x08, 0xbf, 0xa4, 0xc0, 0x52, 0x74, 0x4e, 0x24, 0xb8, 0x50, 0x8a, 0x07, 0x13, 0xdd, 0x4c, + 0xe0, 0x6a, 0xac, 0x88, 0xef, 0x5e, 0x4a, 0x42, 0x70, 0x8a, 0x2e, 0xfa, 0xa2, 0x02, 0x4b, 0x5a, + 0xfc, 0x5e, 0x4e, 0x20, 0x32, 0x0b, 0xc5, 0x9b, 0x26, 0xee, 0xf8, 0x44, 0xbc, 0x24, 0x00, 0x1e, + 0x4e, 0x91, 0x45, 0xef, 0x87, 0x79, 0x6d, 0x60, 0xd6, 0x87, 0x86, 0x49, 0x6c, 0x3d, 0xbc, 0xcc, + 0xc1, 0x5c, 0x14, 0xf5, 0x4e, 0x3b, 0x2c, 0xc7, 0xb1, 0x5a, 0xe1, 0xc5, 0x1b, 0xd1, 0x91, 0xd3, + 0x13, 0x5e, 0xbc, 0x11, 0x7d, 0x18, 0x5d, 0xbc, 0x11, 0x5d, 0x27, 0x13, 0x41, 0x3f, 0x0e, 0x0f, + 0xf3, 0xbd, 0xa6, 0xa1, 0x79, 0xa6, 0x5e, 0x1f, 0xfa, 0xbb, 0xc4, 0xf6, 0x03, 0x8d, 0x81, 0xdb, + 0x62, 0x2c, 0xb8, 0x60, 0x3d, 0xaf, 0x12, 0xce, 0x6f, 0x8f, 0x6c, 0x00, 0xc7, 0x34, 0x74, 0xf1, + 0x3d, 0xfc, 0x7c, 0xbb, 0x50, 0xec, 0xc7, 0xed, 0x76, 0xab, 0x29, 0x3e, 0x87, 0x89, 0x89, 0xe8, + 0x37, 0x96, 0x28, 0xa0, 0x2f, 0x2b, 0xb0, 0x20, 0x26, 0xb9, 0xa0, 0x39, 0xcb, 0xc6, 0xff, 0x95, + 0xa2, 0x93, 0x31, 0x31, 0xe1, 0xd7, 0xb0, 0x8c, 0x9c, 0x47, 0xd0, 0x86, 0xd1, 0x4e, 0x31, 0x18, + 0x8e, 0xf3, 0x81, 0xfe, 0x96, 0x02, 0x17, 0x3c, 0xe2, 0xee, 0x9b, 0x3a, 0xa9, 0xeb, 0xba, 0x33, + 0xb4, 0x83, 0x41, 0xae, 0x14, 0xbf, 0x04, 0xd1, 0xcd, 0xc0, 0xc7, 0x8f, 0xd9, 0xb3, 0x20, 0x38, + 0x93, 0x3e, 0xdd, 0xbf, 0xce, 0xdd, 0xd5, 0x7c, 0x7d, 0xb7, 0xa9, 0xe9, 0xbb, 0x4c, 0x7f, 0xe7, + 0x27, 0xeb, 0x05, 0x17, 0xcd, 0xcb, 0x71, 0x54, 0xdc, 0xe1, 0x90, 0x28, 0xc4, 0x49, 0x82, 0xc8, + 0x83, 0x8a, 0x4b, 0x5e, 0x1f, 0x12, 0x8f, 0x1d, 0xbf, 0x53, 0xe2, 0xed, 0x89, 0x47, 0x0c, 0x0b, + 0x84, 0x5c, 0xc7, 0x08, 0x7e, 0xe1, 0x90, 0x10, 0xea, 0xc1, 0x65, 0x3e, 0x73, 0xeb, 0xb6, 0x63, + 0x1f, 0xf6, 0x9d, 0xa1, 0x97, 0x98, 0xfd, 0x55, 0x36, 0xfb, 0x59, 0x80, 0xc1, 0xfa, 0xa8, 0x8a, + 0x78, 0x34, 0x1e, 0xf4, 0x31, 0xa8, 0x90, 0x7d, 0x62, 0xfb, 0x77, 0xee, 0xdc, 0x5a, 0x99, 0x2f, + 0xb4, 0x35, 0xb2, 0x4f, 0x58, 0x17, 0x38, 0x70, 0x88, 0x6d, 0xf5, 0x05, 0x40, 0xe9, 0x19, 0x89, + 0x96, 0x60, 0x6a, 0x8f, 0xf0, 0x7b, 0x7b, 0x73, 0x98, 0xfe, 0x8b, 0x2e, 0x40, 0x79, 0x5f, 0xb3, + 0x86, 0x5c, 0x95, 0xad, 0x60, 0xfe, 0xe3, 0x99, 0xd2, 0x87, 0x14, 0xf5, 0x9b, 0x0a, 0x5c, 0xcc, + 0xec, 0x36, 0x84, 0xe1, 0x12, 0x8b, 0xcb, 0xb0, 0x37, 0x86, 0xbe, 0xe6, 0x9b, 0x76, 0xaf, 0x6d, + 0xef, 0x58, 0x66, 0x6f, 0x97, 0x6b, 0x7e, 0x65, 0xae, 0xa7, 0x6c, 0x64, 0xd6, 0xc0, 0x39, 0x2d, + 0x51, 0x1b, 0xce, 0xf7, 0xb5, 0x83, 0x14, 0xc2, 0x12, 0x43, 0xc8, 0x6e, 0x7f, 0x6e, 0xa4, 0xc1, + 0x38, 0xab, 0x8d, 0xfa, 0xd5, 0x32, 0x3c, 0x42, 0x19, 0x8f, 0xb6, 0xcc, 0x0d, 0xcd, 0xd6, 0x7a, + 0x6f, 0xce, 0xad, 0xe9, 0xd7, 0x14, 0x78, 0x68, 0x37, 0x5b, 0x9d, 0x15, 0x9b, 0xf6, 0x8b, 0x85, + 0x94, 0xfa, 0x51, 0x1a, 0x32, 0x9f, 0xb8, 0x23, 0xab, 0xe0, 0x3c, 0xa6, 0xd0, 0x0b, 0xb0, 0x64, + 0x3b, 0x06, 0x69, 0xb6, 0x5b, 0x78, 0x43, 0xf3, 0xf6, 0xba, 0x81, 0xc1, 0x5f, 0xe6, 0x1e, 0xbd, + 0xcd, 0x04, 0x0c, 0xa7, 0x6a, 0xa3, 0x7d, 0x40, 0x03, 0xc7, 0x58, 0xdf, 0x37, 0xf5, 0x20, 0xa4, + 0xa2, 0xb8, 0x17, 0x91, 0x45, 0x98, 0x77, 0x52, 0xd8, 0x70, 0x06, 0x05, 0xa6, 0x8f, 0x53, 0x66, + 0x36, 0x1c, 0xdb, 0xf4, 0x1d, 0x97, 0xc5, 0xfd, 0x4c, 0xa4, 0x96, 0xb2, 0x79, 0xbe, 0x99, 0x89, + 0x11, 0xe7, 0x50, 0x52, 0xff, 0xb7, 0x02, 0xe7, 0xe8, 0xb4, 0xe8, 0xb8, 0xce, 0xc1, 0xe1, 0x9b, + 0x71, 0x42, 0x3e, 0x29, 0x7c, 0x95, 0xdc, 0x4a, 0xbb, 0x28, 0xf9, 0x29, 0xe7, 0x18, 0xcf, 0x91, + 0x6b, 0x52, 0x36, 0x54, 0xa7, 0xf2, 0x0d, 0x55, 0xf5, 0x3f, 0x29, 0x5c, 0x45, 0x0c, 0x0c, 0xc5, + 0x37, 0xe5, 0x3a, 0xfc, 0x20, 0x2c, 0xd0, 0xb2, 0x0d, 0xed, 0xa0, 0xd3, 0x7a, 0xc9, 0xb1, 0x82, + 0x70, 0x24, 0x76, 0xf8, 0x79, 0x53, 0x06, 0xe0, 0x78, 0x3d, 0xf5, 0x97, 0xcf, 0x01, 0xab, 0x60, + 0x11, 0xff, 0xcd, 0xf8, 0x5d, 0x4f, 0x41, 0x55, 0x1f, 0x0c, 0x9b, 0xd7, 0xba, 0x2f, 0x0e, 0x1d, + 0x5f, 0x13, 0x3e, 0x4c, 0xa6, 0xf7, 0x35, 0x3b, 0x5b, 0x41, 0x31, 0x96, 0xeb, 0xd0, 0x15, 0xae, + 0x0f, 0x86, 0x42, 0x66, 0x76, 0xe4, 0x53, 0x3c, 0xb6, 0xc2, 0x9b, 0x9d, 0xad, 0x18, 0x0c, 0xa7, + 0x6a, 0xa3, 0x4f, 0xc1, 0x3c, 0x11, 0x8b, 0xef, 0x86, 0xe6, 0x1a, 0x62, 0x6d, 0x17, 0xde, 0xb8, + 0xc3, 0xae, 0x0d, 0x56, 0x34, 0x57, 0x97, 0xd7, 0x25, 0x12, 0x38, 0x46, 0x90, 0xa9, 0xae, 0xe2, + 0x37, 0x1d, 0x29, 0xc7, 0x48, 0x2e, 0xf6, 0xb2, 0x50, 0x5d, 0xf3, 0x2a, 0xe1, 0xfc, 0xf6, 0xe8, + 0x57, 0x15, 0xb8, 0x14, 0x42, 0x4d, 0xdb, 0xec, 0x0f, 0xfb, 0x98, 0xe8, 0x96, 0x66, 0xf6, 0x85, + 0x1e, 0xfb, 0xf2, 0xa9, 0x7d, 0x68, 0x1c, 0x3d, 0x17, 0x38, 0xd9, 0x30, 0x9c, 0xc3, 0x12, 0xfa, + 0xba, 0x02, 0x8f, 0x05, 0xa0, 0x0e, 0xb5, 0x24, 0x87, 0x2e, 0x89, 0x02, 0xda, 0x44, 0x97, 0xcc, + 0x16, 0x92, 0x7f, 0x8f, 0x1f, 0x1f, 0xd5, 0x1e, 0x5b, 0xbf, 0x0f, 0x6e, 0x7c, 0x5f, 0xea, 0xf2, + 0x74, 0xe9, 0x3a, 0x3b, 0xbe, 0x50, 0x7c, 0xcf, 0x6a, 0xba, 0x50, 0x12, 0x38, 0x46, 0x10, 0xfd, + 0xba, 0x02, 0x0f, 0xc9, 0x05, 0xf2, 0x6c, 0xe1, 0x1a, 0xef, 0xc7, 0x4e, 0x8d, 0x99, 0x04, 0x7e, + 0xee, 0x5b, 0xca, 0x01, 0xe2, 0x3c, 0xae, 0xa8, 0xe8, 0xed, 0xb3, 0x89, 0xc9, 0xb5, 0xe2, 0x32, + 0x17, 0xbd, 0x7c, 0xae, 0x7a, 0x38, 0x80, 0x51, 0x63, 0x73, 0xe0, 0x18, 0x1d, 0xd3, 0xf0, 0x6e, + 0x99, 0x7d, 0xd3, 0x67, 0x7a, 0xeb, 0x14, 0xef, 0x8e, 0x8e, 0x63, 0x74, 0xda, 0x2d, 0x5e, 0x8e, + 0x63, 0xb5, 0x58, 0x18, 0xba, 0xd9, 0xd7, 0x7a, 0xa4, 0x33, 0xb4, 0xac, 0x8e, 0xeb, 0x30, 0x07, + 0x44, 0x8b, 0x68, 0x86, 0x65, 0xda, 0xa4, 0xa0, 0x9e, 0xca, 0x96, 0x5b, 0x3b, 0x0f, 0x29, 0xce, + 0xa7, 0x87, 0xd6, 0x00, 0x76, 0x34, 0xd3, 0xea, 0xde, 0xd5, 0x06, 0xb7, 0xed, 0x95, 0x05, 0x26, + 0xc0, 0x98, 0xa5, 0x77, 0x2d, 0x2c, 0xc5, 0x52, 0x0d, 0x3a, 0x9b, 0xa8, 0x14, 0xc4, 0x84, 0x5f, + 0x80, 0x5b, 0x59, 0x3c, 0xa5, 0xd9, 0x14, 0x20, 0xe4, 0xdd, 0x77, 0x53, 0x22, 0x81, 0x63, 0x04, + 0xd1, 0xe7, 0x14, 0x58, 0xf4, 0x0e, 0x3d, 0x9f, 0xf4, 0x43, 0x1e, 0xce, 0x9d, 0x36, 0x0f, 0xcc, + 0x35, 0xd3, 0x8d, 0x11, 0xc1, 0x09, 0xa2, 0x48, 0x83, 0x47, 0x58, 0xaf, 0x5e, 0x6f, 0xde, 0x30, + 0x7b, 0xbb, 0x61, 0x70, 0x79, 0x87, 0xb8, 0x3a, 0xb1, 0xfd, 0x95, 0x25, 0x36, 0x6f, 0x6a, 0xc7, + 0x47, 0xb5, 0x47, 0xda, 0xf9, 0xd5, 0xf0, 0x28, 0x1c, 0xe8, 0x55, 0x58, 0x15, 0xe0, 0x5b, 0xce, + 0xdd, 0x14, 0x85, 0x65, 0x46, 0x81, 0x45, 0xfc, 0xb7, 0x73, 0x6b, 0xe1, 0x11, 0x18, 0xa8, 0x55, + 0xe0, 0x11, 0x97, 0x79, 0x56, 0x49, 0x38, 0x79, 0xbc, 0x15, 0xc4, 0x26, 0x01, 0xb3, 0x0a, 0xba, + 0x69, 0x30, 0xce, 0x6a, 0xa3, 0x1e, 0x95, 0xb8, 0x39, 0x93, 0x5a, 0x90, 0xe8, 0x39, 0x38, 0xd7, + 0x27, 0x7d, 0xc7, 0x3d, 0xac, 0x07, 0x29, 0x33, 0x84, 0x6b, 0x8d, 0x59, 0xa8, 0x1b, 0x71, 0x10, + 0x4e, 0xd6, 0xa5, 0xdb, 0x25, 0xfb, 0x82, 0x6b, 0xdd, 0xa8, 0x7d, 0x29, 0xda, 0x2e, 0xdb, 0x09, + 0x18, 0x4e, 0xd5, 0x46, 0x4d, 0x58, 0x16, 0x65, 0x6d, 0xaa, 0x35, 0x7a, 0xd7, 0x5c, 0x12, 0x1c, + 0x36, 0x51, 0xfd, 0x6b, 0xb9, 0x9d, 0x04, 0xe2, 0x74, 0x7d, 0xfa, 0x15, 0xf4, 0x87, 0xcc, 0xc5, + 0x74, 0xf4, 0x15, 0x9b, 0x71, 0x10, 0x4e, 0xd6, 0x0d, 0xd4, 0xfa, 0x18, 0x0b, 0xe5, 0xe8, 0x2b, + 0x36, 0x13, 0x30, 0x9c, 0xaa, 0xad, 0xfe, 0xe7, 0x69, 0x78, 0xc7, 0x18, 0x9b, 0x18, 0xea, 0x67, + 0x77, 0xf7, 0x7d, 0x44, 0xca, 0x5a, 0x10, 0xa4, 0xb1, 0xf6, 0xe2, 0x50, 0xb3, 0x7d, 0xd3, 0x3f, + 0x1c, 0x73, 0x78, 0x06, 0x39, 0xc3, 0x73, 0x72, 0x7a, 0xe3, 0x0e, 0xa7, 0x97, 0x37, 0x9c, 0x27, + 0x27, 0x39, 0xfe, 0xf0, 0xf7, 0xb3, 0x87, 0xbf, 0x60, 0xaf, 0xde, 0x77, 0xba, 0x0c, 0x72, 0xa6, + 0x4b, 0xc1, 0x5e, 0x1d, 0x63, 0x7a, 0xfd, 0xd1, 0x34, 0x3c, 0x3e, 0xce, 0x86, 0x5a, 0x70, 0x7e, + 0x65, 0x6c, 0x59, 0x67, 0x3a, 0xbf, 0xf2, 0x22, 0x62, 0xce, 0x70, 0x7e, 0x65, 0x90, 0x3c, 0xeb, + 0xf9, 0x95, 0xd7, 0xab, 0x67, 0x35, 0xbf, 0xf2, 0x7a, 0x75, 0x8c, 0xf9, 0xf5, 0x27, 0xc9, 0xfd, + 0x21, 0xdc, 0x47, 0xdb, 0x30, 0xa5, 0x0f, 0x86, 0x05, 0x85, 0x14, 0x3b, 0xe6, 0x6c, 0x76, 0xb6, + 0x30, 0xc5, 0x81, 0x30, 0xcc, 0xf0, 0xf9, 0x53, 0x50, 0x04, 0xb1, 0xa0, 0x1f, 0x3e, 0x25, 0xb1, + 0xc0, 0x44, 0xbb, 0x8a, 0x0c, 0x76, 0x49, 0x9f, 0xb8, 0x9a, 0xd5, 0xf5, 0x1d, 0x57, 0xeb, 0x15, + 0x95, 0x36, 0xac, 0xab, 0xd6, 0x13, 0xb8, 0x70, 0x0a, 0x3b, 0xed, 0x90, 0x81, 0x69, 0x14, 0x94, + 0x2f, 0xac, 0x43, 0x3a, 0xed, 0x16, 0xa6, 0x38, 0xd4, 0xbf, 0x3b, 0x07, 0xd2, 0xd5, 0x22, 0x6a, + 0xb7, 0x69, 0x96, 0xe5, 0xdc, 0xed, 0xb8, 0xe6, 0xbe, 0x69, 0x91, 0x1e, 0x31, 0xc2, 0xbb, 0x27, + 0x9e, 0x38, 0x0c, 0x67, 0x8a, 0x64, 0x3d, 0xaf, 0x12, 0xce, 0x6f, 0x4f, 0xed, 0xf2, 0x65, 0x3d, + 0x79, 0xf1, 0x73, 0x92, 0x03, 0xbd, 0xd4, 0x2d, 0x52, 0xbe, 0x9e, 0x52, 0xc5, 0x38, 0x4d, 0x16, + 0xfd, 0x94, 0xc2, 0x1d, 0x0e, 0xa1, 0x77, 0x55, 0x8c, 0xd9, 0xf5, 0x53, 0x3a, 0x8f, 0x88, 0x3c, + 0x17, 0x91, 0xff, 0x36, 0x4e, 0x90, 0x5a, 0x86, 0x17, 0xf7, 0xb2, 0xfc, 0xa4, 0x62, 0x64, 0x6f, + 0x17, 0x65, 0x25, 0xc7, 0xf1, 0xca, 0x0f, 0x8f, 0x33, 0x2b, 0xe0, 0x6c, 0x46, 0xc2, 0x5e, 0x0a, + 0x5d, 0x47, 0x42, 0x08, 0x14, 0xee, 0xa5, 0x84, 0x0f, 0x2a, 0xea, 0xa5, 0x10, 0x80, 0xe3, 0x04, + 0xd1, 0x00, 0xe6, 0xf6, 0x02, 0x7f, 0x9d, 0xb0, 0xef, 0x9b, 0x45, 0xa9, 0x4b, 0x4e, 0x3f, 0x7e, + 0x48, 0x1d, 0x16, 0xe2, 0x88, 0x08, 0xda, 0x85, 0xd9, 0x3d, 0x2e, 0x88, 0x84, 0x5d, 0x5e, 0x9f, + 0xd8, 0x6e, 0xe0, 0xe6, 0xa1, 0x28, 0xc2, 0x01, 0x7a, 0x39, 0x48, 0xa5, 0x72, 0x9f, 0xd8, 0xa4, + 0xaf, 0x2a, 0x70, 0x71, 0x9f, 0xb8, 0xbe, 0xa9, 0x27, 0xbd, 0xd4, 0x73, 0xc5, 0x6d, 0x9b, 0x97, + 0xb2, 0x10, 0xf2, 0x69, 0x92, 0x09, 0xc2, 0xd9, 0x2c, 0x50, 0x4b, 0x87, 0x3b, 0x1b, 0xbb, 0xbe, + 0xe6, 0x9b, 0xfa, 0x1d, 0x67, 0x8f, 0xd8, 0xf4, 0x63, 0x45, 0x5a, 0x45, 0x60, 0x82, 0x83, 0x59, + 0x3a, 0xeb, 0xf9, 0xd5, 0xf0, 0x28, 0x1c, 0xea, 0x0f, 0x14, 0x48, 0xb9, 0xdb, 0xd0, 0xcf, 0x28, + 0x30, 0xbf, 0x43, 0x34, 0x7f, 0xe8, 0x92, 0xeb, 0x9a, 0x1f, 0xc6, 0x2a, 0xbf, 0x74, 0x1a, 0x5e, + 0xbe, 0xb5, 0x6b, 0x12, 0x62, 0x7e, 0x9e, 0x18, 0x26, 0x30, 0x90, 0x41, 0x38, 0xc6, 0xc1, 0xea, + 0xf3, 0xb0, 0x9c, 0x6a, 0x78, 0xa2, 0x63, 0x9f, 0x7f, 0x21, 0xbc, 0xb5, 0xc9, 0x9c, 0x9a, 0xaf, + 0x42, 0x59, 0x33, 0x8c, 0x30, 0x63, 0xd7, 0xd3, 0xc5, 0xce, 0xcd, 0x0d, 0x39, 0x24, 0x9c, 0xfd, + 0xc4, 0x1c, 0x2d, 0xba, 0x06, 0x48, 0x8b, 0x1d, 0x8e, 0x6d, 0x44, 0x11, 0xb3, 0xcc, 0xcb, 0x5f, + 0x4f, 0x41, 0x71, 0x46, 0x0b, 0xf5, 0x59, 0x58, 0x8c, 0xdf, 0x61, 0x3d, 0x41, 0x04, 0x9e, 0xfa, + 0x57, 0x15, 0x40, 0xe9, 0x7c, 0x19, 0xc8, 0x85, 0x8a, 0xa8, 0x11, 0x0c, 0x71, 0x21, 0x47, 0x6e, + 0x32, 0x36, 0x30, 0x8a, 0xc9, 0x17, 0x05, 0x1e, 0x0e, 0xe9, 0xa8, 0x7f, 0xaa, 0x40, 0x94, 0x12, + 0x08, 0x7d, 0x00, 0xaa, 0x06, 0xf1, 0x74, 0xd7, 0x1c, 0xf8, 0xd1, 0x77, 0x84, 0xb9, 0x0e, 0x5a, + 0x11, 0x08, 0xcb, 0xf5, 0x90, 0x0a, 0x33, 0xbe, 0xe6, 0xed, 0xb5, 0x5b, 0xc2, 0x22, 0x65, 0xfa, + 0xc3, 0x1d, 0x56, 0x82, 0x05, 0x24, 0xba, 0x0f, 0x3a, 0x35, 0xc6, 0x7d, 0x50, 0xb4, 0x73, 0x0a, + 0x97, 0x5f, 0xd1, 0xfd, 0x2f, 0xbe, 0xaa, 0x7f, 0x50, 0x82, 0x78, 0x16, 0xa6, 0xa2, 0x5d, 0x90, + 0xbe, 0xad, 0x5b, 0x3a, 0xb3, 0xdb, 0xba, 0xef, 0x61, 0x29, 0x0c, 0x79, 0xce, 0x59, 0x7e, 0x26, + 0x26, 0x27, 0x1e, 0xe4, 0x19, 0x63, 0xc3, 0x1a, 0xe8, 0x69, 0x16, 0x2f, 0xe7, 0x07, 0x76, 0xfa, + 0x3b, 0x82, 0x65, 0x41, 0x05, 0x10, 0xb9, 0x27, 0xee, 0x23, 0x87, 0xdf, 0xcf, 0x4a, 0x31, 0x6f, + 0x81, 0x3e, 0x20, 0xc2, 0x2b, 0xcb, 0xb1, 0x3b, 0xd3, 0xc1, 0x45, 0xeb, 0xe5, 0x58, 0xc3, 0x28, + 0xe6, 0x52, 0xfd, 0x9b, 0x0a, 0xcc, 0x8a, 0xe4, 0x27, 0x63, 0x44, 0x68, 0xee, 0x40, 0x99, 0xd9, + 0x01, 0x93, 0xa8, 0x48, 0xdd, 0x5d, 0xc7, 0xf1, 0x63, 0x29, 0x60, 0x58, 0x58, 0x20, 0xfb, 0x17, + 0x73, 0xf4, 0xea, 0xd7, 0xa6, 0xe1, 0x31, 0x51, 0x25, 0xa5, 0x01, 0x84, 0x4b, 0xf0, 0x10, 0xce, + 0x8b, 0x51, 0x6a, 0xb9, 0x9a, 0x19, 0x9e, 0x1a, 0x16, 0xb3, 0xec, 0xc4, 0x79, 0x72, 0x0a, 0x1d, + 0xce, 0xa2, 0xc1, 0x93, 0x1d, 0xb0, 0xe2, 0x1b, 0x44, 0xb3, 0xfc, 0xdd, 0x80, 0x76, 0x69, 0x92, + 0x64, 0x07, 0x69, 0x7c, 0x38, 0x93, 0x0a, 0x3b, 0xb5, 0x14, 0x80, 0xa6, 0x4b, 0x34, 0xf9, 0xc8, + 0x74, 0x82, 0x28, 0xc2, 0x8d, 0x4c, 0x8c, 0x38, 0x87, 0x12, 0x73, 0x91, 0x69, 0x07, 0xcc, 0xe2, + 0xc6, 0xc4, 0x77, 0x4d, 0x96, 0x94, 0x87, 0xce, 0x6f, 0x6e, 0x23, 0xc7, 0x41, 0x38, 0x59, 0x17, + 0x3d, 0x03, 0x8b, 0xec, 0x14, 0x38, 0xba, 0x03, 0x58, 0x8e, 0x52, 0x10, 0x6f, 0xc6, 0x20, 0x38, + 0x51, 0x53, 0xfd, 0x15, 0x05, 0xe6, 0xe5, 0x09, 0x34, 0x46, 0x44, 0xf7, 0x50, 0x12, 0xd7, 0x13, + 0x04, 0xc6, 0xca, 0x54, 0xc7, 0x91, 0xd8, 0xf7, 0x14, 0x38, 0x9f, 0xd1, 0x86, 0x9d, 0x07, 0x92, + 0x84, 0xe8, 0x9f, 0xe4, 0x3c, 0x30, 0xb5, 0x8d, 0x84, 0xe7, 0x81, 0x49, 0x08, 0x4e, 0xd1, 0x45, + 0x2f, 0xc1, 0x94, 0xee, 0x9a, 0xa2, 0x5b, 0x3e, 0x58, 0xc8, 0xea, 0xc1, 0xed, 0x28, 0x4c, 0xbe, + 0x89, 0xdb, 0x98, 0x22, 0x54, 0xff, 0xc9, 0x14, 0x54, 0xa5, 0xbc, 0x4a, 0x68, 0x63, 0x12, 0xa3, + 0x39, 0x42, 0x1f, 0x18, 0xce, 0x1b, 0x30, 0xd5, 0x1b, 0x0c, 0x0b, 0x5a, 0xcd, 0x21, 0xba, 0xeb, + 0x14, 0x5d, 0x6f, 0x30, 0x44, 0x2f, 0x85, 0x76, 0x78, 0x31, 0x4b, 0x39, 0x8c, 0x15, 0x4d, 0xd8, + 0xe2, 0xc1, 0xdc, 0x9c, 0xce, 0x9d, 0x9b, 0x7d, 0x98, 0xf5, 0x84, 0x91, 0x5e, 0x2e, 0x7e, 0x2f, + 0x49, 0xea, 0x69, 0x61, 0x94, 0x73, 0x0d, 0x3f, 0xb0, 0xd9, 0x03, 0x1a, 0x54, 0x01, 0x18, 0xb2, + 0xd8, 0x76, 0x66, 0xba, 0x54, 0xb8, 0x02, 0xb0, 0xc5, 0x4a, 0xb0, 0x80, 0xa8, 0x5f, 0x28, 0x01, + 0x4a, 0x23, 0x44, 0xef, 0x80, 0x32, 0x0b, 0xf1, 0x17, 0x0b, 0x4d, 0xca, 0x3b, 0xa2, 0x79, 0x1e, + 0xe6, 0x30, 0xd4, 0x15, 0x57, 0x3e, 0x8a, 0x0d, 0x0c, 0x3b, 0x87, 0x16, 0xf4, 0xa4, 0xfb, 0x21, + 0xc1, 0xd6, 0x34, 0x95, 0xbb, 0x35, 0x6d, 0xc1, 0x6c, 0xdf, 0xb4, 0x59, 0xec, 0x49, 0x31, 0x2f, + 0x04, 0x3f, 0x2e, 0xe3, 0x28, 0x70, 0x80, 0x4b, 0xfd, 0xa3, 0x12, 0x9d, 0xc4, 0xa6, 0xed, 0x13, + 0x5b, 0xb3, 0x75, 0x82, 0x0e, 0x01, 0xb4, 0xa1, 0xef, 0xf0, 0x1d, 0x5e, 0xcc, 0xe5, 0x76, 0xb1, + 0xf1, 0x0a, 0x91, 0xd6, 0x43, 0x84, 0xfc, 0x14, 0x2b, 0xfa, 0x8d, 0x25, 0x62, 0x94, 0xb4, 0x6f, + 0xf6, 0xc9, 0xcb, 0xa6, 0x6d, 0x38, 0x77, 0x45, 0xf7, 0x4e, 0x4a, 0xfa, 0x4e, 0x88, 0x90, 0x93, + 0x8e, 0x7e, 0x63, 0x89, 0x18, 0xfa, 0x18, 0xac, 0x30, 0xa3, 0xc7, 0x66, 0x29, 0xeb, 0x04, 0x6f, + 0x8e, 0x65, 0x05, 0x5b, 0x4e, 0x85, 0xa5, 0x09, 0x5a, 0x69, 0xe6, 0xd4, 0xc1, 0xb9, 0xad, 0xd5, + 0x5f, 0x57, 0xe0, 0x62, 0x66, 0x57, 0xa0, 0xeb, 0xb0, 0x1c, 0x85, 0x2e, 0xc8, 0x32, 0xb2, 0x12, + 0x65, 0x60, 0xbc, 0x99, 0xac, 0x80, 0xd3, 0x6d, 0xd0, 0x46, 0xa8, 0x27, 0xc8, 0x32, 0x58, 0xc4, + 0x3d, 0x3c, 0x22, 0x50, 0x65, 0x89, 0x69, 0x9c, 0xd5, 0x4e, 0xfd, 0xf1, 0x18, 0xc3, 0x51, 0x87, + 0xd1, 0xd5, 0xb1, 0x4d, 0x7a, 0x61, 0xf0, 0x78, 0xb8, 0x3a, 0x1a, 0xb4, 0x10, 0x73, 0x18, 0xba, + 0x2c, 0x5f, 0x78, 0x08, 0xa5, 0x50, 0x70, 0xe9, 0x41, 0xf5, 0x01, 0x44, 0x84, 0x90, 0x69, 0xf7, + 0xd0, 0x0e, 0x54, 0x34, 0x91, 0xb3, 0x5f, 0x4c, 0xb5, 0x0f, 0x17, 0xb2, 0xb1, 0x04, 0x0e, 0x1e, + 0x19, 0x18, 0xfc, 0xc2, 0x21, 0x6e, 0xf5, 0xef, 0x2b, 0x70, 0x89, 0x0a, 0x24, 0x23, 0xb8, 0x57, + 0x1a, 0x5e, 0xf5, 0x1f, 0x63, 0x6b, 0xed, 0x43, 0xd5, 0x8d, 0x9a, 0x89, 0x79, 0xf9, 0x63, 0x72, + 0x1a, 0x01, 0xe9, 0x36, 0x24, 0x55, 0x3b, 0x9a, 0xae, 0xe3, 0x05, 0x83, 0x93, 0xcc, 0x2c, 0x10, + 0x2a, 0xef, 0x12, 0x27, 0x58, 0xc6, 0xaf, 0x7e, 0xa6, 0x04, 0xb0, 0x49, 0xfc, 0xbb, 0x8e, 0xbb, + 0x47, 0xbb, 0xe8, 0x4d, 0x75, 0xab, 0xe8, 0x51, 0x98, 0x1e, 0x38, 0x86, 0x27, 0xa4, 0x14, 0xbb, + 0x0b, 0xc7, 0x0e, 0xdf, 0x59, 0x29, 0xaa, 0x41, 0x99, 0xf9, 0x96, 0xc5, 0x56, 0xc0, 0xb4, 0x5e, + 0xaa, 0xe9, 0x78, 0x98, 0x97, 0xf3, 0x6c, 0xac, 0x2c, 0xea, 0xd6, 0x13, 0x6a, 0xbc, 0xc8, 0xc6, + 0xca, 0xcb, 0x70, 0x08, 0x55, 0x3f, 0x33, 0x0d, 0xb1, 0x47, 0x27, 0x22, 0x53, 0x5c, 0x39, 0x1b, + 0x53, 0xfc, 0x63, 0xb0, 0x62, 0x39, 0x9a, 0xd1, 0xd0, 0x2c, 0x3a, 0xe9, 0xdd, 0x2e, 0x1f, 0x0e, + 0xcd, 0xee, 0x85, 0x2f, 0x1a, 0x30, 0x01, 0x70, 0x2b, 0xa7, 0x0e, 0xce, 0x6d, 0x8d, 0xfc, 0xf0, + 0xa9, 0x0b, 0x9e, 0x51, 0xf2, 0xd6, 0xa4, 0x4f, 0x72, 0xac, 0xc9, 0xf1, 0xd6, 0xe1, 0xae, 0x1c, + 0x7f, 0x0d, 0x03, 0x7d, 0x5e, 0x81, 0x8b, 0xe4, 0xc0, 0x27, 0xae, 0xad, 0x59, 0x77, 0x5c, 0x6d, + 0x67, 0xc7, 0xd4, 0x45, 0x58, 0x13, 0x1f, 0x9c, 0xce, 0xf1, 0x51, 0xed, 0xe2, 0x7a, 0x56, 0x85, + 0x7b, 0x47, 0xb5, 0xf7, 0xa5, 0x5f, 0x9c, 0x09, 0xc2, 0xab, 0x33, 0x9b, 0xb0, 0xc9, 0x98, 0x4d, + 0x6e, 0xf5, 0x69, 0xa8, 0x9e, 0x20, 0x1a, 0x77, 0x4e, 0x76, 0xcb, 0xfc, 0xfc, 0x0c, 0x48, 0xa1, + 0xed, 0x27, 0xc8, 0x23, 0xfa, 0x4b, 0x0a, 0x5c, 0xd0, 0x2d, 0x93, 0xd8, 0x7e, 0x22, 0x86, 0x99, + 0x2f, 0x8c, 0xad, 0x42, 0x31, 0xf7, 0x03, 0x62, 0xb7, 0x5b, 0x4d, 0xc7, 0xb6, 0x89, 0xee, 0x37, + 0x33, 0x90, 0x73, 0x2b, 0x27, 0x0b, 0x82, 0x33, 0x99, 0x61, 0xdf, 0xc3, 0xca, 0xdb, 0x2d, 0xf9, + 0xfe, 0x57, 0x53, 0x94, 0xe1, 0x10, 0x8a, 0x9e, 0x82, 0x6a, 0xcf, 0x75, 0x86, 0x03, 0xaf, 0xc9, + 0x22, 0xae, 0xf8, 0x08, 0x32, 0x45, 0xe2, 0x7a, 0x54, 0x8c, 0xe5, 0x3a, 0xe8, 0xfd, 0x30, 0xcf, + 0x7f, 0x76, 0x5c, 0xb2, 0x63, 0x1e, 0x88, 0xe5, 0xc6, 0xc2, 0x38, 0xae, 0x4b, 0xe5, 0x38, 0x56, + 0x0b, 0xbd, 0x1b, 0xe6, 0x4c, 0xcf, 0x1b, 0x12, 0x77, 0x0b, 0xdf, 0x12, 0x49, 0xb5, 0x98, 0xcf, + 0xb6, 0x1d, 0x14, 0xe2, 0x08, 0x8e, 0x7e, 0x56, 0x81, 0x45, 0x97, 0xbc, 0x3e, 0x34, 0x5d, 0x62, + 0x30, 0xa2, 0x9e, 0xb8, 0x5f, 0x80, 0x27, 0xbb, 0xd3, 0xb0, 0x86, 0x63, 0x48, 0xf9, 0x3c, 0x0f, + 0xdd, 0x11, 0x71, 0x20, 0x4e, 0x70, 0x40, 0xbb, 0xca, 0x33, 0x7b, 0xb6, 0x69, 0xf7, 0xea, 0x56, + 0xcf, 0x5b, 0xa9, 0xb0, 0xa5, 0xcb, 0x75, 0xae, 0xa8, 0x18, 0xcb, 0x75, 0xd0, 0x07, 0x61, 0x61, + 0xe8, 0xd1, 0x99, 0xdb, 0x27, 0xbc, 0x7f, 0xe7, 0xa2, 0x30, 0xc8, 0x2d, 0x19, 0x80, 0xe3, 0xf5, + 0xa8, 0x89, 0x17, 0x14, 0x88, 0x5e, 0x06, 0x7e, 0x0b, 0x98, 0xf2, 0xb9, 0x15, 0x83, 0xe0, 0x44, + 0xcd, 0xd5, 0x3a, 0x9c, 0xcf, 0xf8, 0xcc, 0x13, 0x2d, 0x8f, 0x5f, 0x29, 0xc1, 0xdb, 0xef, 0x3b, + 0x2b, 0xd1, 0xdf, 0x56, 0xa0, 0x4a, 0x0e, 0x7c, 0x57, 0x0b, 0x83, 0x32, 0xe9, 0x10, 0xed, 0x9c, + 0xc9, 0x12, 0x58, 0x5b, 0x8f, 0x08, 0xf1, 0x61, 0x0b, 0xb7, 0x3b, 0x09, 0x82, 0x65, 0x7e, 0xa8, + 0xb6, 0xce, 0xef, 0x88, 0xcb, 0xee, 0x3a, 0x91, 0x9b, 0x5f, 0x40, 0x56, 0x3f, 0x02, 0x4b, 0x49, + 0xcc, 0x27, 0xea, 0xa9, 0x7f, 0x5c, 0x82, 0x72, 0xc7, 0xd2, 0x1e, 0x48, 0x7e, 0xb4, 0xbf, 0x14, + 0x4b, 0x4e, 0x53, 0x28, 0xe3, 0x0f, 0x63, 0x35, 0x37, 0x2d, 0x56, 0x2f, 0x91, 0x16, 0xeb, 0xf9, + 0xe2, 0x24, 0x46, 0x67, 0xc1, 0xfa, 0x5d, 0x05, 0xe6, 0x58, 0xbd, 0x07, 0x90, 0x8d, 0xe5, 0xd5, + 0x78, 0x36, 0x96, 0xa7, 0x0b, 0x7f, 0x53, 0x4e, 0xf2, 0x95, 0xef, 0x04, 0xdf, 0xc2, 0x72, 0xad, + 0x7c, 0x5c, 0x7e, 0x93, 0x84, 0x7f, 0xcc, 0x13, 0x59, 0x69, 0xa1, 0x6e, 0x39, 0xba, 0x66, 0xa5, + 0x72, 0x43, 0x8d, 0x7c, 0x98, 0xa4, 0x0f, 0x73, 0x44, 0xdc, 0xc3, 0x0f, 0x3e, 0xa6, 0x90, 0x4a, + 0x1b, 0x5c, 0xe6, 0x8f, 0xc8, 0x05, 0x25, 0x1e, 0x8e, 0x28, 0xa8, 0xff, 0xbc, 0x04, 0x55, 0x69, + 0x2c, 0x7f, 0x18, 0x59, 0xa7, 0xae, 0x65, 0xa6, 0xeb, 0x2f, 0xb1, 0xa8, 0xcb, 0x4b, 0x27, 0x48, + 0xd5, 0xef, 0x42, 0x55, 0x8f, 0x32, 0x88, 0x4e, 0x32, 0xb9, 0xa5, 0x44, 0xa4, 0x22, 0xec, 0x3b, + 0x2a, 0xc0, 0x32, 0x11, 0xf5, 0x37, 0x4b, 0x30, 0xdb, 0x71, 0x1d, 0x3a, 0xc0, 0x0f, 0x40, 0x34, + 0x68, 0x31, 0xd1, 0x50, 0x6c, 0xdd, 0x72, 0x66, 0x73, 0x85, 0x83, 0x99, 0x10, 0x0e, 0xf5, 0x49, + 0x88, 0x8c, 0x16, 0x0f, 0xff, 0x4e, 0x81, 0xaa, 0xa8, 0xf9, 0x00, 0x04, 0xc4, 0x27, 0xe2, 0x02, + 0xe2, 0xd9, 0x09, 0xbe, 0x2b, 0x47, 0x44, 0x7c, 0x55, 0x81, 0x05, 0x51, 0x63, 0x83, 0xf4, 0xb7, + 0x89, 0x8b, 0xae, 0xc1, 0xac, 0x37, 0x64, 0x03, 0x29, 0x3e, 0xe8, 0x11, 0x59, 0x48, 0xb8, 0xdb, + 0x9a, 0xce, 0x5e, 0x9e, 0xe1, 0x55, 0xa4, 0x4c, 0x74, 0xbc, 0x00, 0x07, 0x8d, 0xa9, 0x09, 0xe7, + 0x3a, 0x56, 0x2a, 0x73, 0x02, 0x76, 0x2c, 0x82, 0x19, 0x84, 0x5a, 0x4e, 0xf4, 0x6f, 0x70, 0x1e, + 0xc5, 0x2c, 0x27, 0x0a, 0xf6, 0x30, 0x2f, 0x57, 0x3f, 0x37, 0x1d, 0x76, 0x36, 0x93, 0x60, 0x37, + 0x60, 0x4e, 0x77, 0x89, 0xe6, 0x13, 0xa3, 0x71, 0x38, 0x0e, 0x73, 0x4c, 0x8b, 0x6b, 0x06, 0x2d, + 0x70, 0xd4, 0x98, 0x2a, 0x4c, 0xf2, 0x11, 0x53, 0x29, 0xd2, 0x2d, 0x73, 0x8f, 0x97, 0x3e, 0x0c, + 0x65, 0xe7, 0xae, 0x1d, 0x86, 0x6f, 0x8c, 0x24, 0xcc, 0x3e, 0xe5, 0x36, 0xad, 0x8d, 0x79, 0x23, + 0x96, 0x5d, 0x46, 0x24, 0x17, 0xe1, 0x8a, 0x6c, 0x35, 0x2b, 0xb1, 0x08, 0xb2, 0x60, 0xb6, 0xcf, + 0x86, 0x61, 0xa2, 0xc4, 0x64, 0xb1, 0x01, 0x95, 0x13, 0xc4, 0x32, 0xcc, 0x38, 0x20, 0x41, 0x15, + 0x5f, 0xaa, 0x9c, 0x79, 0x03, 0x4d, 0x27, 0xb2, 0xe2, 0xbb, 0x19, 0x14, 0xe2, 0x08, 0x8e, 0x0e, + 0xa1, 0xca, 0xaf, 0xd7, 0x73, 0x29, 0x3b, 0x5b, 0xdc, 0xa7, 0x29, 0xd8, 0xbb, 0x13, 0x61, 0xe3, + 0x5d, 0x2f, 0x15, 0x60, 0x99, 0x96, 0xfa, 0xd3, 0xd3, 0xe1, 0x24, 0x15, 0x12, 0x3f, 0xfb, 0xb5, + 0x14, 0xa5, 0xd0, 0x6b, 0x29, 0xef, 0x83, 0xf2, 0x60, 0x57, 0xf3, 0x82, 0x99, 0x1a, 0x24, 0x33, + 0x2e, 0x77, 0x68, 0xe1, 0xbd, 0xa3, 0xda, 0xbc, 0x20, 0xcd, 0x7e, 0x63, 0x5e, 0x17, 0x0d, 0xe1, + 0xbc, 0xe7, 0x6b, 0x16, 0xe9, 0x9a, 0xc2, 0x5b, 0xe4, 0xf9, 0x5a, 0x7f, 0x50, 0x20, 0x27, 0x31, + 0x8f, 0x6d, 0x4e, 0xa3, 0xc2, 0x59, 0xf8, 0xd1, 0x67, 0x15, 0x58, 0x61, 0xe5, 0xf5, 0xa1, 0xef, + 0xf0, 0xec, 0xed, 0x11, 0xf1, 0x93, 0x9f, 0xcf, 0x32, 0xeb, 0xbe, 0x9b, 0x83, 0x0f, 0xe7, 0x52, + 0x42, 0x9f, 0x84, 0x8b, 0x96, 0xe6, 0xf9, 0x75, 0xdd, 0x37, 0xf7, 0x4d, 0xff, 0x30, 0x62, 0xe1, + 0xe4, 0x2f, 0xc7, 0xb0, 0x18, 0x90, 0x5b, 0x59, 0xc8, 0x70, 0x36, 0x0d, 0xf5, 0x4f, 0x14, 0x40, + 0xe9, 0x29, 0x84, 0x2c, 0xa8, 0x18, 0x64, 0x47, 0x1b, 0x5a, 0x7e, 0xa0, 0x02, 0x14, 0xba, 0x65, + 0x1e, 0xa1, 0x8c, 0x24, 0x73, 0x4b, 0xe0, 0xc5, 0x21, 0x05, 0xe4, 0xc0, 0xdc, 0xdd, 0x5d, 0xd3, + 0x27, 0x96, 0xe9, 0xf9, 0x42, 0x3a, 0x4f, 0x4a, 0x2e, 0xd4, 0x79, 0x5e, 0x0e, 0x10, 0xe3, 0x88, + 0x86, 0xfa, 0x85, 0x29, 0xa8, 0x9c, 0xe0, 0x81, 0xbe, 0x21, 0x20, 0x91, 0x5e, 0x82, 0x2a, 0x4a, + 0x64, 0x12, 0x17, 0x19, 0x53, 0x67, 0x9a, 0x29, 0x64, 0x38, 0x83, 0x00, 0xfa, 0x24, 0x5c, 0x30, + 0xed, 0x1d, 0x57, 0xf3, 0x7c, 0x77, 0xa8, 0xfb, 0x43, 0x97, 0x4c, 0x92, 0x0b, 0x99, 0xb9, 0x16, + 0xda, 0x19, 0xe8, 0x70, 0x26, 0x11, 0x44, 0x60, 0xf6, 0xae, 0xe3, 0xee, 0x51, 0xe1, 0x39, 0x5d, + 0xfc, 0x9d, 0x8d, 0x97, 0x19, 0x8a, 0x48, 0x6a, 0xf2, 0xdf, 0x1e, 0x0e, 0x70, 0xab, 0xbf, 0xa7, + 0x40, 0x99, 0xdf, 0x9f, 0x7b, 0x4b, 0xd8, 0x55, 0x8c, 0xd5, 0xdc, 0x1c, 0x9f, 0xd4, 0xdc, 0x61, + 0x35, 0xde, 0x22, 0xe6, 0x0e, 0xe3, 0x35, 0x47, 0x97, 0xf9, 0xbd, 0x29, 0xf1, 0x2d, 0x4c, 0x59, + 0x68, 0xc3, 0x79, 0xa1, 0xf4, 0xde, 0x32, 0x77, 0x08, 0x9d, 0x5d, 0x2d, 0xed, 0xd0, 0x13, 0x17, + 0xd7, 0x99, 0xd4, 0x6d, 0xa6, 0xc1, 0x38, 0xab, 0x0d, 0xfa, 0x67, 0x0a, 0xdd, 0x96, 0x7d, 0xd7, + 0xd4, 0x27, 0x4a, 0x9c, 0x19, 0xf2, 0xb6, 0xb6, 0xc1, 0x91, 0x71, 0x6f, 0xc1, 0x56, 0xb4, 0x3f, + 0xb3, 0xd2, 0x7b, 0x47, 0xb5, 0x5a, 0x86, 0x2b, 0x32, 0x70, 0x9d, 0xd3, 0x8e, 0xfd, 0xcc, 0xf7, + 0x46, 0x56, 0x61, 0x6e, 0xfc, 0x80, 0x63, 0x74, 0x03, 0xca, 0x9e, 0xee, 0x0c, 0xc8, 0x49, 0x52, + 0x01, 0x87, 0x1d, 0xdc, 0xa5, 0x2d, 0x31, 0x47, 0xb0, 0xfa, 0x1a, 0xcc, 0xcb, 0x9c, 0x67, 0x78, + 0x23, 0x5a, 0xb2, 0x37, 0xe2, 0xc4, 0x87, 0x75, 0xb2, 0xf7, 0xe2, 0xb7, 0x4a, 0x20, 0x1e, 0xc7, + 0x1a, 0xe3, 0xb0, 0xc2, 0x0c, 0xd2, 0xe8, 0x4d, 0xf0, 0x20, 0x58, 0xf2, 0x3d, 0xe0, 0xa8, 0x0f, + 0xe4, 0x4c, 0x7a, 0xc8, 0x86, 0x19, 0x4b, 0xdb, 0x26, 0x56, 0xf0, 0x54, 0xd2, 0xb5, 0xe2, 0x6f, + 0xf9, 0xf0, 0xe4, 0xb5, 0x5e, 0xc2, 0xa5, 0xcd, 0x0b, 0xb1, 0xa0, 0xb2, 0xfa, 0x34, 0x54, 0xa5, + 0x6a, 0x27, 0x72, 0x00, 0x7d, 0x59, 0x81, 0x4b, 0xc1, 0x94, 0x88, 0xa7, 0xdf, 0x40, 0x4f, 0x40, + 0x45, 0x1b, 0x98, 0xcc, 0x27, 0x2a, 0x7b, 0x95, 0xeb, 0x9d, 0x36, 0x2b, 0xc3, 0x21, 0x14, 0xbd, + 0x07, 0x2a, 0xc1, 0x38, 0x09, 0x05, 0x29, 0x5c, 0xe2, 0xe1, 0x61, 0x4e, 0x58, 0x03, 0xbd, 0x53, + 0x4a, 0x0c, 0x58, 0x8e, 0x76, 0xb4, 0x90, 0x30, 0x3f, 0xf7, 0x55, 0xbf, 0x38, 0x05, 0x0b, 0xdc, + 0x91, 0xd0, 0x30, 0x6d, 0xc3, 0xb4, 0x7b, 0x0f, 0x40, 0x94, 0xc6, 0x9e, 0x64, 0x2d, 0x9d, 0xd6, + 0x93, 0xac, 0x37, 0x61, 0xe6, 0x75, 0xba, 0xac, 0x83, 0xe9, 0x30, 0xd6, 0xea, 0x0a, 0xc7, 0x9a, + 0x49, 0x04, 0x0f, 0x0b, 0x14, 0xc8, 0x93, 0x1e, 0xc6, 0x9d, 0xe0, 0x26, 0x75, 0xac, 0x67, 0xc3, + 0xf4, 0x9e, 0xf3, 0xd9, 0xaf, 0xe2, 0xaa, 0xff, 0x51, 0x81, 0xe5, 0x58, 0x8b, 0x07, 0xb0, 0x13, + 0xec, 0xc4, 0x77, 0x82, 0xfa, 0xc4, 0x5f, 0x99, 0xb3, 0x23, 0x3c, 0x0d, 0x17, 0x33, 0x3b, 0xe3, + 0xfe, 0x0a, 0x94, 0xfa, 0x8d, 0x12, 0x4c, 0x77, 0x09, 0x31, 0x1e, 0xc0, 0xcc, 0x7c, 0x35, 0xb6, + 0xc9, 0x7f, 0xb8, 0xf0, 0x83, 0x5d, 0x79, 0xee, 0x91, 0x9d, 0x84, 0x7b, 0xe4, 0x23, 0x85, 0x29, + 0x8c, 0xf6, 0x8d, 0xfc, 0x42, 0x09, 0x80, 0x56, 0xe3, 0x8f, 0x78, 0x8a, 0x18, 0xc9, 0xe8, 0x99, + 0xe7, 0xb9, 0x37, 0xcb, 0xe3, 0xcc, 0x6a, 0xf8, 0x18, 0xe3, 0x54, 0xe4, 0x7c, 0x8f, 0x3f, 0xc4, + 0x18, 0x97, 0x16, 0xd3, 0xa7, 0x24, 0x2d, 0xd4, 0x7f, 0xa8, 0x00, 0x4b, 0xd9, 0xdf, 0xda, 0xec, + 0xa2, 0x0f, 0xc2, 0x82, 0xc9, 0x8f, 0x36, 0x5b, 0x72, 0x72, 0x3a, 0x76, 0x00, 0xd3, 0x96, 0x01, + 0x38, 0x5e, 0x0f, 0xf5, 0xa5, 0x7e, 0x9d, 0xe0, 0x29, 0x5d, 0xc1, 0xc7, 0x7d, 0xe5, 0xc3, 0xf7, + 0x4a, 0x70, 0x2e, 0x51, 0x77, 0x0c, 0xfb, 0xe3, 0x6c, 0xa4, 0xad, 0x94, 0x11, 0x78, 0xea, 0xec, + 0x33, 0x02, 0x87, 0xc9, 0x79, 0xa7, 0xcf, 0x36, 0x39, 0xef, 0xef, 0x28, 0xc0, 0xde, 0x66, 0x7d, + 0x00, 0x82, 0xf7, 0x2f, 0xc6, 0x05, 0xef, 0x87, 0x8a, 0x4e, 0x9c, 0x1c, 0x79, 0xfb, 0xab, 0x25, + 0x60, 0xe9, 0xf7, 0x45, 0x24, 0x87, 0x14, 0x1c, 0xa1, 0xe4, 0x04, 0x47, 0x3c, 0x26, 0x62, 0x2b, + 0x12, 0x5e, 0x42, 0x29, 0xbe, 0xe2, 0x3d, 0x52, 0xf8, 0xc4, 0x54, 0x5c, 0x8c, 0xa4, 0x43, 0x28, + 0xd0, 0x1b, 0xb0, 0xe0, 0xed, 0x3a, 0x8e, 0x1f, 0x98, 0xec, 0x62, 0xec, 0xea, 0x85, 0x43, 0x9a, + 0x83, 0x4f, 0xe1, 0x0b, 0xb3, 0x2b, 0xe3, 0xc6, 0x71, 0x52, 0x68, 0x0d, 0x60, 0xdb, 0x72, 0xf4, + 0xbd, 0x66, 0xbb, 0x85, 0x83, 0xc0, 0x57, 0x16, 0x7e, 0xd5, 0x08, 0x4b, 0xb1, 0x54, 0x43, 0xfd, + 0x57, 0x0a, 0xef, 0xad, 0x13, 0x2c, 0xab, 0x07, 0x28, 0x25, 0xdf, 0x95, 0x90, 0x92, 0x79, 0x4f, + 0xd6, 0xfe, 0xa6, 0xf8, 0x8a, 0xf0, 0x91, 0x85, 0x01, 0x2c, 0x58, 0xf2, 0xab, 0x0c, 0x62, 0x1a, + 0x17, 0x7a, 0xd0, 0x21, 0x4c, 0xac, 0x17, 0x2b, 0xc6, 0x71, 0x02, 0x54, 0x94, 0x06, 0xcc, 0xf3, + 0x17, 0x26, 0x79, 0xec, 0x0a, 0x1b, 0xb1, 0x8e, 0x0c, 0xc0, 0xf1, 0x7a, 0xea, 0xdf, 0x29, 0xc1, + 0x65, 0xce, 0x3b, 0x0b, 0x3e, 0x6f, 0x91, 0x01, 0xb1, 0x0d, 0x62, 0xeb, 0x87, 0x4c, 0x5d, 0x36, + 0x9c, 0x1e, 0xfa, 0x2b, 0x0a, 0x54, 0x82, 0x83, 0x27, 0xf1, 0x21, 0x1f, 0x2f, 0xfe, 0xa2, 0x66, + 0x0e, 0x95, 0xf0, 0xd8, 0x8b, 0xe7, 0x78, 0x13, 0xbf, 0x70, 0x48, 0x18, 0xdd, 0x85, 0xf2, 0xc0, + 0x75, 0xb6, 0x03, 0xb3, 0xea, 0xa5, 0x53, 0xe7, 0xa0, 0x43, 0xb1, 0xf3, 0xe5, 0xc9, 0xfe, 0xc5, + 0x9c, 0x9e, 0x8a, 0xe1, 0x9d, 0x63, 0x71, 0x8e, 0x9e, 0x4c, 0xa6, 0x32, 0x0e, 0xfd, 0x27, 0xa9, + 0x2c, 0x51, 0xb7, 0x41, 0xbd, 0x3f, 0x2f, 0x27, 0x41, 0xf8, 0x22, 0x3c, 0x2e, 0x21, 0x5c, 0x3f, + 0xd0, 0x89, 0xe7, 0x35, 0xb5, 0x81, 0xa6, 0x53, 0x93, 0x92, 0xdd, 0xed, 0xe5, 0x8e, 0xde, 0x13, + 0xa0, 0xfc, 0xbf, 0x0a, 0xd4, 0x24, 0x9c, 0xb1, 0x00, 0xa8, 0x40, 0xd4, 0x7c, 0x4d, 0x81, 0xaa, + 0x66, 0xdb, 0x8e, 0xaf, 0xc9, 0xe7, 0x8e, 0xc6, 0x84, 0x63, 0x93, 0x45, 0x6a, 0xad, 0x1e, 0x91, + 0x49, 0x44, 0x18, 0x48, 0x10, 0x2c, 0x73, 0xb3, 0xfa, 0x11, 0x58, 0x4a, 0xb6, 0x3a, 0x91, 0xf1, + 0xd8, 0x84, 0x4b, 0x12, 0x57, 0xec, 0x2c, 0xa3, 0xb9, 0x4b, 0xf4, 0x3d, 0xef, 0x24, 0xdd, 0xd8, + 0xa0, 0xfa, 0x77, 0x88, 0x44, 0x5c, 0xb5, 0xa4, 0xe6, 0xde, 0x93, 0x30, 0xbb, 0x6f, 0x7a, 0x66, + 0x70, 0x65, 0x5f, 0xc2, 0xf1, 0x12, 0x2f, 0xc6, 0x01, 0x5c, 0x7d, 0x01, 0xce, 0xcb, 0x38, 0x98, + 0xc4, 0xdd, 0xec, 0x9e, 0x84, 0x8b, 0x0d, 0x78, 0x4c, 0xc2, 0x90, 0x79, 0xdf, 0xf0, 0x24, 0xe8, + 0xbe, 0x56, 0x09, 0x04, 0x9e, 0xb8, 0xb1, 0xf2, 0x1b, 0x0a, 0x3c, 0x4c, 0xf2, 0x66, 0x9d, 0x10, + 0x1a, 0x1f, 0x9b, 0x70, 0x5a, 0xe4, 0xce, 0x6a, 0x91, 0xde, 0x2a, 0x0f, 0x8c, 0xf3, 0x39, 0x43, + 0x87, 0x00, 0x5e, 0x38, 0x24, 0x93, 0x44, 0x1e, 0x67, 0x8e, 0xb1, 0xc8, 0xe5, 0x1c, 0xfe, 0xc6, + 0x12, 0x31, 0xf4, 0x3a, 0x54, 0x3c, 0x31, 0x92, 0x93, 0x5c, 0x87, 0xce, 0x98, 0x18, 0x22, 0xb8, + 0x52, 0xfc, 0xc2, 0x21, 0x19, 0xf4, 0x8b, 0x0a, 0x5c, 0xb0, 0x32, 0x16, 0x97, 0xd0, 0x10, 0xba, + 0x67, 0xb0, 0x6e, 0xb9, 0x07, 0x3b, 0x0b, 0x82, 0x33, 0x59, 0x41, 0xbf, 0x9c, 0x7b, 0xf7, 0xb6, + 0x5c, 0xfc, 0x81, 0x9a, 0xfb, 0xcd, 0xfd, 0x02, 0xd7, 0x70, 0x7f, 0x12, 0xaa, 0x4e, 0x24, 0x11, + 0xc4, 0x65, 0xe9, 0x8f, 0x4e, 0xc8, 0x9c, 0x24, 0x63, 0xf8, 0x79, 0xa0, 0x54, 0x80, 0x65, 0x7a, + 0xe8, 0x2b, 0x0a, 0x20, 0x23, 0xb5, 0x6f, 0x88, 0x23, 0xc9, 0x17, 0x4f, 0x7d, 0x73, 0xe4, 0x27, + 0x20, 0xe9, 0x72, 0x9c, 0xc1, 0x84, 0xfa, 0xe5, 0x59, 0xae, 0xcc, 0x33, 0x1f, 0xf4, 0x36, 0xcc, + 0x6c, 0x33, 0x63, 0x58, 0x48, 0x81, 0xc2, 0x96, 0x37, 0x37, 0xa9, 0xb9, 0xa5, 0xca, 0xff, 0xc7, + 0x02, 0x33, 0x7a, 0x05, 0xa6, 0x0c, 0x3b, 0x78, 0xf4, 0xec, 0xd9, 0x09, 0x2c, 0xc1, 0x28, 0x6e, + 0x9d, 0x2e, 0x1c, 0x8a, 0x14, 0xd9, 0x50, 0xb1, 0x85, 0xfe, 0x2b, 0x96, 0x69, 0xe1, 0xe7, 0xc4, + 0x43, 0x3d, 0x3a, 0xd4, 0xde, 0x83, 0x12, 0x1c, 0xd2, 0xa0, 0xf4, 0x12, 0x0e, 0xb0, 0xc2, 0xf4, + 0x42, 0xbb, 0x76, 0x94, 0xd3, 0xa1, 0x23, 0x5b, 0xa9, 0xe5, 0xf1, 0xad, 0xd4, 0x85, 0x5c, 0x0b, + 0x95, 0xc0, 0x8c, 0xcf, 0x9f, 0x10, 0x9e, 0x29, 0x1e, 0x86, 0x44, 0xf9, 0x67, 0x4f, 0x0c, 0x47, + 0x4a, 0xb7, 0x78, 0x7f, 0x58, 0x20, 0xa7, 0x13, 0x8b, 0xbf, 0x74, 0x2e, 0x26, 0x7d, 0xe1, 0x89, + 0xc5, 0x9f, 0x6c, 0xe1, 0x13, 0x8b, 0xff, 0x8f, 0x05, 0x66, 0xf4, 0x1a, 0x35, 0xbc, 0xf8, 0x16, + 0x27, 0x12, 0xf5, 0xbd, 0x30, 0xe1, 0xd2, 0xf2, 0x82, 0xc8, 0x77, 0xfe, 0x0b, 0x87, 0xf8, 0xd1, + 0x36, 0xcc, 0x0a, 0x27, 0x87, 0xc8, 0x32, 0xf0, 0xec, 0x04, 0x79, 0xf7, 0x83, 0x57, 0x88, 0xf8, + 0x35, 0xdc, 0x00, 0xb1, 0xfa, 0xef, 0xe7, 0xb8, 0x7b, 0x4a, 0x84, 0x10, 0xec, 0x40, 0x25, 0x40, + 0x37, 0xc9, 0x2d, 0x8c, 0xe0, 0x15, 0x11, 0xfe, 0x69, 0xc1, 0x2f, 0x1c, 0xe2, 0x46, 0xcd, 0xac, + 0x0b, 0x2f, 0x51, 0xce, 0xd5, 0xf1, 0x2e, 0xbb, 0xc4, 0x23, 0xdc, 0xa6, 0x1e, 0x44, 0x84, 0x5b, + 0x76, 0x88, 0xc5, 0x74, 0xa1, 0x10, 0x8b, 0xe7, 0xe0, 0x5c, 0x10, 0x80, 0x66, 0x10, 0x76, 0xd4, + 0x23, 0x42, 0xb3, 0xd9, 0xad, 0xd2, 0x66, 0x1c, 0x84, 0x93, 0x75, 0xd1, 0x6f, 0x29, 0x50, 0xd1, + 0x85, 0x02, 0x23, 0xd6, 0xd5, 0xad, 0xc9, 0x7c, 0x98, 0x6b, 0x81, 0x3e, 0xc4, 0xd5, 0xe9, 0x97, + 0x02, 0x19, 0x11, 0x14, 0x9f, 0xd2, 0x19, 0x5c, 0xc8, 0x35, 0xfa, 0xb7, 0xd4, 0x58, 0xb0, 0xd8, + 0xdb, 0x26, 0xec, 0x92, 0x1e, 0x8f, 0x19, 0xbf, 0x3d, 0xe1, 0x57, 0xd4, 0x23, 0x8c, 0xfc, 0x43, + 0x3e, 0x1e, 0xda, 0x05, 0x11, 0xe4, 0x94, 0xbe, 0x45, 0x66, 0x1f, 0xfd, 0x3d, 0x05, 0x1e, 0xe7, + 0x81, 0xfa, 0x4d, 0xaa, 0x20, 0xb0, 0xb7, 0x81, 0x48, 0xf4, 0x18, 0x51, 0x14, 0x10, 0x52, 0x39, + 0x71, 0x40, 0xc8, 0x13, 0xc7, 0x47, 0xb5, 0xc7, 0x9b, 0x63, 0xe0, 0xc6, 0x63, 0x71, 0xb0, 0xba, + 0x07, 0x0b, 0xb1, 0xc1, 0x3e, 0xcb, 0x53, 0xcb, 0x55, 0x1b, 0x96, 0x92, 0x63, 0x72, 0xa6, 0xa7, + 0xa4, 0x37, 0x61, 0x2e, 0xdc, 0x2c, 0xd0, 0x65, 0x89, 0x50, 0xb4, 0x99, 0xdf, 0x24, 0x87, 0x9c, + 0x6a, 0x2d, 0x66, 0xeb, 0x71, 0x63, 0xff, 0x25, 0x5a, 0x20, 0x10, 0xaa, 0xdf, 0x16, 0x9e, 0x9c, + 0x3b, 0xa4, 0x3f, 0xb0, 0x34, 0x9f, 0xbc, 0xf5, 0x8f, 0x3e, 0xd4, 0xff, 0xa1, 0x70, 0x99, 0x2f, + 0xde, 0x3d, 0xd3, 0xa0, 0xda, 0xe7, 0x39, 0x0a, 0xd9, 0x8d, 0x52, 0xa5, 0xf8, 0x5d, 0xd6, 0x8d, + 0x08, 0x0d, 0x96, 0x71, 0xa2, 0xbb, 0xe9, 0x97, 0xf9, 0xae, 0x4d, 0xb6, 0x39, 0x8f, 0xfd, 0x40, + 0x1f, 0x4a, 0xb7, 0x91, 0x1f, 0x35, 0x53, 0x46, 0x3f, 0x6a, 0x76, 0xff, 0xa7, 0xae, 0xd4, 0x6f, + 0x4e, 0x41, 0xe6, 0xb3, 0x12, 0x48, 0x85, 0x19, 0x7e, 0x43, 0x46, 0x7e, 0xb2, 0x90, 0x5f, 0x9f, + 0xc1, 0x02, 0x82, 0x5c, 0xb8, 0x20, 0xee, 0x9f, 0xdc, 0x24, 0x87, 0xd1, 0x63, 0x79, 0x62, 0xe8, + 0xc7, 0x8f, 0x44, 0x67, 0xb9, 0xcb, 0xba, 0x09, 0x4c, 0x38, 0x13, 0x37, 0xba, 0xcd, 0xaf, 0x83, + 0xd9, 0x06, 0x4b, 0xf2, 0x13, 0x49, 0x07, 0x71, 0xbb, 0xf5, 0xe1, 0xe0, 0x3a, 0x58, 0xaa, 0x02, + 0xce, 0x6e, 0x87, 0xf6, 0x01, 0xf5, 0xb5, 0x83, 0x24, 0xb6, 0x09, 0x32, 0xda, 0x6f, 0xa4, 0xb0, + 0xe1, 0x0c, 0x0a, 0x74, 0x03, 0xd5, 0x74, 0x9d, 0x0c, 0x7c, 0x62, 0xf0, 0x6e, 0x0d, 0xfc, 0xcb, + 0x6c, 0x03, 0xad, 0xc7, 0x41, 0x38, 0x59, 0x97, 0x5d, 0x05, 0x61, 0x26, 0xf1, 0x5b, 0x23, 0x64, + 0x89, 0xb1, 0x7a, 0xb6, 0x57, 0x41, 0x38, 0x89, 0xd1, 0xe7, 0x99, 0x1f, 0x87, 0x4b, 0xac, 0x5a, + 0xdd, 0x60, 0x56, 0xb0, 0x47, 0x8c, 0xba, 0x61, 0xb0, 0x7b, 0x99, 0x93, 0xbe, 0x35, 0xa8, 0xfe, + 0xcb, 0x12, 0x9c, 0x63, 0xb8, 0x9b, 0x75, 0x2c, 0x7c, 0x74, 0x74, 0x57, 0xe0, 0x71, 0xa8, 0x1c, + 0xeb, 0x5a, 0x32, 0x0e, 0xf5, 0x32, 0x6f, 0xe0, 0x12, 0xa6, 0x16, 0x69, 0x96, 0x17, 0xb4, 0x8c, + 0x05, 0xa6, 0xba, 0x80, 0x2c, 0xcd, 0xf3, 0xf9, 0xcb, 0x5d, 0xc1, 0x4e, 0x58, 0x20, 0x2e, 0x95, + 0xcd, 0xce, 0x5b, 0x29, 0x4c, 0x38, 0x03, 0x7b, 0x40, 0xb3, 0xe9, 0xf4, 0x07, 0x16, 0x09, 0x69, + 0x96, 0x8a, 0xd3, 0x8c, 0x63, 0xc2, 0x19, 0xd8, 0xd5, 0x2f, 0x29, 0xb0, 0x94, 0xec, 0x10, 0xb4, + 0x0f, 0x15, 0x57, 0x74, 0x8a, 0x98, 0xdd, 0xb7, 0x0a, 0x4f, 0x8e, 0x8c, 0x8e, 0x16, 0xcf, 0xc8, + 0x88, 0x5f, 0x38, 0xa4, 0xa5, 0xfe, 0xf1, 0x0c, 0xac, 0xe4, 0x35, 0x42, 0x5f, 0x56, 0xe0, 0x92, + 0x1e, 0xe9, 0x28, 0xf5, 0xa1, 0xbf, 0xeb, 0xb8, 0xa6, 0x6f, 0x92, 0xe0, 0x59, 0xd3, 0x66, 0x71, + 0x1e, 0xc3, 0xd9, 0xc3, 0x93, 0xbd, 0x34, 0x33, 0xc9, 0xe0, 0x1c, 0xf2, 0xe8, 0x93, 0x00, 0x7b, + 0x51, 0xf2, 0x34, 0x3e, 0x5e, 0x37, 0x0b, 0x33, 0x23, 0x25, 0x58, 0x0b, 0x98, 0x62, 0x2e, 0x40, + 0xa9, 0x5c, 0x22, 0x47, 0x89, 0x7b, 0xde, 0xee, 0x4d, 0x72, 0x38, 0xd0, 0xcc, 0x20, 0xa8, 0xbe, + 0x38, 0xf1, 0x6e, 0xf7, 0x86, 0x40, 0x15, 0x27, 0x2e, 0x95, 0x4b, 0xe4, 0xd0, 0x17, 0x14, 0x58, + 0xe0, 0x76, 0x8a, 0x88, 0xf8, 0x12, 0x32, 0x7c, 0xb3, 0x30, 0x03, 0xb7, 0x65, 0x6c, 0x21, 0x0f, + 0xec, 0x08, 0x2a, 0x0e, 0x8a, 0xd3, 0xa5, 0xb3, 0x63, 0x39, 0xfe, 0x28, 0xd3, 0x4d, 0x72, 0x28, + 0x7c, 0x11, 0xb8, 0x78, 0x77, 0x24, 0x31, 0x86, 0x1c, 0x31, 0x9b, 0x33, 0x0d, 0x4e, 0xf3, 0xc0, + 0x38, 0x23, 0xbe, 0x6e, 0x88, 0xc7, 0x5a, 0x4d, 0xc7, 0xa6, 0x9c, 0xcd, 0x4c, 0xc8, 0xd9, 0xfa, + 0x9d, 0x66, 0x2b, 0x86, 0x31, 0xce, 0x59, 0x1a, 0x9c, 0xe6, 0x41, 0xfd, 0xfd, 0x12, 0x5c, 0x19, + 0x8d, 0xec, 0xcf, 0x85, 0xe9, 0x89, 0x84, 0xe9, 0xa7, 0x4b, 0xf0, 0x50, 0xce, 0x1a, 0xce, 0xe9, + 0x03, 0xe5, 0xff, 0xbb, 0x3e, 0xf8, 0x5d, 0x05, 0xe6, 0x58, 0x1f, 0xbc, 0x45, 0x22, 0xa1, 0x19, + 0xaf, 0x39, 0x71, 0x18, 0xbf, 0xa3, 0xc0, 0x72, 0x2a, 0x21, 0xdb, 0x58, 0x71, 0xb4, 0x0f, 0x2c, + 0xbc, 0xe0, 0x9d, 0xc9, 0x67, 0x73, 0xab, 0x99, 0x79, 0x1a, 0x5f, 0x86, 0x85, 0x58, 0x18, 0x46, + 0x98, 0x8c, 0x43, 0xc9, 0x4c, 0xc6, 0x21, 0xe7, 0xda, 0x28, 0x8d, 0xcc, 0xb5, 0xf1, 0xd9, 0x12, + 0xac, 0xe6, 0x0b, 0xee, 0x3f, 0x33, 0xb3, 0x3e, 0x5c, 0xf9, 0xe9, 0x0d, 0xf4, 0xcf, 0x4c, 0x1f, + 0x84, 0xdb, 0x49, 0xee, 0xae, 0xf9, 0xe7, 0xdb, 0xc9, 0x89, 0x3a, 0xf4, 0x1b, 0x8b, 0x42, 0x94, + 0xb2, 0x43, 0xb0, 0x57, 0x61, 0x86, 0x65, 0x9b, 0x09, 0xd4, 0xdd, 0x67, 0x0a, 0x67, 0xb1, 0xf1, + 0xb8, 0x63, 0x81, 0xff, 0x8f, 0x05, 0x56, 0xd4, 0x82, 0x25, 0xdd, 0x72, 0x86, 0x46, 0xc7, 0x75, + 0x76, 0x4c, 0x8b, 0x6c, 0x46, 0x3e, 0x8c, 0x30, 0x5d, 0x5e, 0x33, 0x01, 0xc7, 0xa9, 0x16, 0x08, + 0xf3, 0x63, 0x34, 0x3e, 0x18, 0x1f, 0x2c, 0x18, 0xea, 0xc7, 0x73, 0x9e, 0x87, 0xc7, 0x67, 0xaf, + 0x03, 0x90, 0x40, 0x28, 0x06, 0x77, 0x92, 0x9e, 0x2b, 0x96, 0x08, 0x30, 0x14, 0xad, 0x81, 0xed, + 0x1d, 0x16, 0x79, 0x58, 0x22, 0x82, 0x5c, 0xa8, 0xee, 0x46, 0x2f, 0x76, 0x0b, 0x3d, 0xf2, 0xf9, + 0x09, 0x5f, 0x0b, 0xe7, 0x2e, 0x2f, 0xa9, 0x00, 0xcb, 0x44, 0x90, 0xcb, 0xcd, 0x08, 0x7e, 0x62, + 0x31, 0xc9, 0x0b, 0xaf, 0xd1, 0x51, 0x48, 0xf4, 0x9d, 0x51, 0x19, 0x96, 0xa8, 0x50, 0x9a, 0x76, + 0x98, 0x2e, 0x6a, 0x92, 0x43, 0xb0, 0x28, 0xe9, 0x54, 0x44, 0x33, 0x2a, 0xc3, 0x12, 0x15, 0xda, + 0xb7, 0xfd, 0x28, 0x45, 0x98, 0x70, 0x6d, 0x3f, 0x3f, 0x61, 0xaa, 0x36, 0xe1, 0x4e, 0x8c, 0x0a, + 0xb0, 0x4c, 0x04, 0xd9, 0x00, 0xfd, 0x30, 0x73, 0x98, 0x38, 0x1b, 0x2b, 0xf4, 0x9d, 0x51, 0xfe, + 0x31, 0x6e, 0x18, 0x45, 0xbf, 0xb1, 0x44, 0x01, 0xbd, 0x26, 0x9d, 0xc0, 0x42, 0x71, 0xa7, 0xec, + 0x58, 0xa7, 0xaf, 0x1f, 0x88, 0x7c, 0x93, 0x55, 0xb6, 0x5e, 0x1f, 0x91, 0xfc, 0x92, 0xf7, 0x8e, + 0x6a, 0xf3, 0x4c, 0x86, 0xa4, 0xfc, 0x94, 0x51, 0x60, 0xe2, 0xfc, 0xa8, 0xc0, 0x44, 0x74, 0x9d, + 0x1a, 0x56, 0x52, 0xf0, 0x3f, 0x13, 0x0c, 0x0b, 0xac, 0x49, 0x98, 0x69, 0xae, 0x9b, 0xac, 0x80, + 0xd3, 0x6d, 0xb8, 0x52, 0x41, 0x0c, 0xd6, 0x7e, 0x51, 0x56, 0x2a, 0x78, 0x19, 0x0e, 0xa1, 0x68, + 0x1f, 0xe6, 0x3d, 0x29, 0x14, 0x52, 0xbc, 0x06, 0x35, 0xc1, 0xb1, 0xa9, 0x08, 0x83, 0x64, 0x19, + 0x8c, 0xe4, 0x12, 0x1c, 0xa3, 0x83, 0x3e, 0x09, 0x73, 0x81, 0x9f, 0xda, 0x5b, 0x59, 0x2a, 0x7e, + 0x43, 0x2d, 0x3b, 0x5b, 0x5c, 0xe4, 0x78, 0x0e, 0x40, 0x1e, 0x8e, 0xe8, 0xa1, 0x61, 0xfc, 0x62, + 0xf8, 0xf2, 0xa9, 0x5c, 0x86, 0x0d, 0x03, 0xdc, 0xf2, 0x2e, 0x85, 0xa3, 0x26, 0x2c, 0x93, 0x83, + 0x81, 0xe3, 0x0d, 0x5d, 0xc2, 0x12, 0x55, 0xb2, 0xe1, 0x41, 0xd1, 0xb9, 0xea, 0x7a, 0x12, 0x88, + 0xd3, 0xf5, 0xd1, 0xe7, 0x15, 0x58, 0xe2, 0x8f, 0x69, 0xd1, 0x2d, 0xcc, 0xb1, 0x89, 0xed, 0x7b, + 0x2b, 0xe7, 0x8b, 0x67, 0x6c, 0xed, 0x26, 0x70, 0x09, 0x6f, 0x75, 0xa2, 0x14, 0xa7, 0x68, 0xaa, + 0xff, 0x7a, 0x1e, 0xaa, 0x92, 0x4f, 0xf2, 0x87, 0x91, 0xd2, 0xc4, 0x87, 0xaa, 0xee, 0xd8, 0x9e, + 0xef, 0x6a, 0x52, 0x1a, 0x97, 0x09, 0x69, 0x86, 0xc3, 0xd8, 0x8c, 0x30, 0x63, 0x99, 0x0c, 0x15, + 0x38, 0xe1, 0x31, 0xfc, 0xd4, 0x29, 0x1c, 0xc3, 0x87, 0x02, 0x27, 0xe3, 0x28, 0xfe, 0xfd, 0x00, + 0xc1, 0xbe, 0x45, 0xf8, 0xab, 0x26, 0x95, 0x28, 0xd5, 0x7e, 0xdb, 0xbb, 0x11, 0xc2, 0xb0, 0x54, + 0x0f, 0xbd, 0x01, 0x0b, 0x96, 0x9c, 0x66, 0x5b, 0x6c, 0xaa, 0x85, 0x42, 0xca, 0x63, 0xf9, 0xba, + 0xb9, 0x77, 0x28, 0x56, 0x84, 0xe3, 0xa4, 0xe8, 0x34, 0xb0, 0x82, 0xd4, 0xf0, 0x13, 0x85, 0x94, + 0x84, 0x09, 0xe6, 0xa3, 0x69, 0x10, 0x16, 0x79, 0x58, 0x22, 0x92, 0x73, 0xee, 0x3f, 0x5b, 0xe8, + 0xdc, 0x7f, 0x08, 0xe7, 0x5d, 0xe2, 0xbb, 0x87, 0xcd, 0x43, 0x9d, 0x3d, 0xb7, 0xe0, 0xfa, 0x4c, + 0xfb, 0xac, 0x14, 0xcb, 0x92, 0x80, 0xd3, 0xa8, 0x70, 0x16, 0xfe, 0x98, 0xc0, 0x9e, 0x1b, 0x29, + 0xb0, 0x3f, 0x00, 0x55, 0x9f, 0xe8, 0xbb, 0xb6, 0xa9, 0x6b, 0x56, 0xbb, 0x25, 0x32, 0x99, 0x45, + 0xb2, 0x27, 0x02, 0x61, 0xb9, 0x1e, 0x6a, 0xc0, 0xd4, 0xd0, 0x34, 0xc4, 0xae, 0xf5, 0xa3, 0xa1, + 0x77, 0xbf, 0xdd, 0xba, 0x77, 0x54, 0x7b, 0x7b, 0x74, 0x90, 0x1e, 0x7e, 0xd5, 0xd5, 0xc1, 0x5e, + 0xef, 0xaa, 0x7f, 0x38, 0x20, 0xde, 0xda, 0x56, 0xbb, 0x85, 0x69, 0xe3, 0xac, 0x98, 0x88, 0xf9, + 0x13, 0xc4, 0x44, 0x7c, 0x45, 0x81, 0xf3, 0x5a, 0xf2, 0x60, 0x82, 0x78, 0x2b, 0x0b, 0xc5, 0xa5, + 0x7f, 0xf6, 0x61, 0x47, 0x94, 0x4b, 0xb5, 0x9e, 0x26, 0x87, 0xb3, 0x78, 0xa0, 0x36, 0x47, 0xdf, + 0xec, 0x85, 0xd9, 0xec, 0xc5, 0xa8, 0x2f, 0x16, 0xb3, 0x39, 0x36, 0x52, 0x98, 0x70, 0x06, 0x76, + 0x74, 0x17, 0xaa, 0x7a, 0x64, 0x7e, 0x89, 0x9d, 0xb7, 0x75, 0x1a, 0xde, 0x7f, 0x91, 0x4d, 0x49, + 0xb2, 0xed, 0x64, 0x4a, 0xe8, 0x4b, 0x0a, 0xac, 0xd2, 0xe5, 0x23, 0xa9, 0xc7, 0x77, 0x5c, 0xb3, + 0xd7, 0x23, 0x2e, 0xfb, 0xea, 0xa5, 0x13, 0x7f, 0x35, 0x7b, 0x46, 0xf1, 0x56, 0x2e, 0x46, 0x3c, + 0x82, 0x9a, 0xfa, 0x07, 0x8a, 0xf0, 0x97, 0x3c, 0xc0, 0x33, 0xfc, 0xb3, 0x3e, 0xf0, 0x53, 0xf7, + 0x21, 0xb5, 0x83, 0xa2, 0x6d, 0x98, 0xa5, 0x18, 0x5a, 0x9b, 0x5d, 0xf1, 0x55, 0xcf, 0x16, 0xdb, + 0xa8, 0x18, 0x0a, 0xee, 0x7b, 0x12, 0x3f, 0x70, 0x80, 0x58, 0xbd, 0x05, 0x10, 0x69, 0x1f, 0x13, + 0x47, 0x57, 0xfc, 0xa0, 0x0c, 0x17, 0x27, 0x8d, 0x3d, 0x67, 0x6f, 0x04, 0xb0, 0x97, 0x62, 0xeb, + 0x3b, 0x3e, 0x71, 0x6f, 0xdf, 0xde, 0x08, 0x1f, 0xd2, 0x2c, 0xf8, 0x48, 0x41, 0xf4, 0xd0, 0x70, + 0x0a, 0x23, 0xce, 0xa1, 0xc4, 0x34, 0x2f, 0xf1, 0x24, 0x1f, 0xd6, 0x7c, 0xd2, 0x18, 0xba, 0x9e, + 0x2f, 0x6e, 0x7c, 0x73, 0xcd, 0x2b, 0x09, 0xc4, 0xe9, 0xfa, 0x49, 0x24, 0xfc, 0xd5, 0x5a, 0xba, + 0x25, 0x2b, 0x69, 0x24, 0xfc, 0xe9, 0xda, 0x74, 0x7d, 0x19, 0x09, 0x1f, 0x29, 0x6a, 0x97, 0x95, + 0xd3, 0x48, 0x42, 0x20, 0x4e, 0xd7, 0x47, 0x06, 0x3c, 0xea, 0x12, 0xdd, 0xe9, 0xf7, 0x89, 0x6d, + 0xf0, 0xd7, 0x65, 0x34, 0xb7, 0x67, 0xda, 0xd7, 0x5c, 0x8d, 0x55, 0x64, 0x06, 0xad, 0xd2, 0x78, + 0xec, 0xf8, 0xa8, 0xf6, 0x28, 0x1e, 0x51, 0x0f, 0x8f, 0xc4, 0x82, 0xfa, 0x70, 0x6e, 0xc8, 0x32, + 0x60, 0xbb, 0x6d, 0xdb, 0x27, 0xee, 0xbe, 0x66, 0x15, 0x7c, 0x8b, 0x99, 0x6d, 0x0f, 0x5b, 0x71, + 0x54, 0x38, 0x89, 0x1b, 0x1d, 0xd2, 0x9d, 0x57, 0xb0, 0x23, 0x91, 0xac, 0x14, 0x7f, 0x45, 0x03, + 0xa7, 0xd1, 0xe1, 0x2c, 0x1a, 0xea, 0x57, 0x14, 0x10, 0xa1, 0xa4, 0xe8, 0xd1, 0x98, 0xc7, 0xb9, + 0x92, 0xf0, 0x36, 0x3f, 0x2a, 0xae, 0xbb, 0x95, 0x22, 0xa8, 0x74, 0xd5, 0xed, 0x5d, 0x52, 0x2a, + 0x81, 0xb9, 0x48, 0x04, 0x71, 0xcc, 0x52, 0x0e, 0xf9, 0x77, 0xc3, 0x1c, 0xe1, 0x47, 0x40, 0xa1, + 0x4e, 0xb7, 0xc0, 0x33, 0x07, 0x8a, 0x42, 0x1c, 0xc1, 0xd5, 0xdf, 0x57, 0x40, 0x60, 0x60, 0x6f, + 0x17, 0x8c, 0x95, 0xf9, 0xfe, 0xbe, 0x71, 0x31, 0x52, 0xee, 0xfd, 0xa9, 0xbc, 0xdc, 0xfb, 0x67, + 0x95, 0xc8, 0xfe, 0x37, 0x14, 0x38, 0x17, 0xcf, 0xed, 0xe0, 0xa1, 0x77, 0xc2, 0xac, 0xc8, 0x53, + 0x24, 0xb2, 0x9d, 0xf0, 0xeb, 0xad, 0xbc, 0x08, 0x07, 0xb0, 0xb8, 0xd1, 0x38, 0x41, 0x5a, 0x93, + 0xec, 0x14, 0x13, 0xa3, 0x8d, 0x46, 0xf5, 0x3b, 0x8b, 0x30, 0xc3, 0x33, 0xeb, 0x50, 0x99, 0x96, + 0x71, 0x8f, 0xea, 0x66, 0xf1, 0xdc, 0x3d, 0x05, 0xae, 0x4b, 0xc5, 0xd2, 0x2c, 0x97, 0x46, 0xa6, + 0x59, 0xc6, 0xfc, 0x5d, 0x8d, 0x09, 0x1c, 0x85, 0x4d, 0xdc, 0x16, 0xaf, 0x45, 0x8a, 0x37, 0x35, + 0x90, 0x1f, 0xf3, 0xa0, 0x4d, 0x17, 0xd7, 0x5d, 0x78, 0x07, 0x48, 0x7e, 0xb4, 0xc5, 0x11, 0x3e, + 0xb4, 0x28, 0x95, 0x49, 0xb9, 0x78, 0x9c, 0x9a, 0xe8, 0xf2, 0x31, 0x52, 0x99, 0x84, 0x0b, 0x69, + 0x26, 0x77, 0x21, 0xed, 0xc0, 0xac, 0x58, 0x0a, 0x42, 0x38, 0x3e, 0x3b, 0xc1, 0x9b, 0x19, 0x52, + 0xe2, 0x3b, 0x5e, 0x80, 0x03, 0xe4, 0x74, 0xc7, 0xed, 0x6b, 0x07, 0x66, 0x7f, 0xd8, 0x67, 0x12, + 0xb1, 0x2c, 0x57, 0x65, 0xc5, 0x38, 0x80, 0xb3, 0xaa, 0x3c, 0xbc, 0x8f, 0x99, 0x12, 0x72, 0x55, + 0xf1, 0xda, 0x71, 0x00, 0x47, 0xaf, 0x40, 0xa5, 0xaf, 0x1d, 0x74, 0x87, 0x6e, 0x8f, 0x08, 0xdf, + 0x59, 0xbe, 0xaa, 0x35, 0xf4, 0x4d, 0x6b, 0x8d, 0x1a, 0xc0, 0xbe, 0xbb, 0xd6, 0xb6, 0xfd, 0xdb, + 0x6e, 0xd7, 0x77, 0xc3, 0x5c, 0xfe, 0x1b, 0x02, 0x0b, 0x0e, 0xf1, 0x21, 0x0b, 0x16, 0xfb, 0xda, + 0xc1, 0x96, 0xad, 0x85, 0x8f, 0xb2, 0x56, 0x0b, 0x52, 0x60, 0x87, 0x73, 0x1b, 0x31, 0x5c, 0x38, + 0x81, 0x3b, 0xe3, 0x1c, 0x70, 0xfe, 0xac, 0xce, 0x01, 0xeb, 0xe1, 0x85, 0x09, 0x6e, 0xb9, 0x3c, + 0x9c, 0x15, 0x08, 0x38, 0xfa, 0x32, 0xc4, 0xab, 0xe1, 0x65, 0x88, 0xc5, 0xe2, 0x07, 0x0c, 0x23, + 0x2e, 0x42, 0x0c, 0xa1, 0x4a, 0x15, 0x5d, 0x5e, 0x4a, 0x4d, 0x8b, 0xc2, 0x0e, 0xae, 0x56, 0x88, + 0x46, 0x7a, 0xcf, 0x2c, 0x42, 0x8d, 0x65, 0x3a, 0xe8, 0x36, 0x7f, 0xb4, 0xd3, 0x22, 0x7e, 0x54, + 0x85, 0x99, 0xb4, 0x4b, 0xdc, 0x87, 0x19, 0xbc, 0xb1, 0x99, 0xaa, 0x80, 0xb3, 0xdb, 0x51, 0x15, + 0x95, 0xe7, 0x33, 0x58, 0x8e, 0xf2, 0x6d, 0xc6, 0x72, 0x1b, 0xfd, 0xb5, 0x2c, 0x6f, 0x18, 0x2a, + 0x7e, 0xb9, 0x8b, 0xcb, 0x86, 0xa2, 0x3e, 0x31, 0xf4, 0x4d, 0x05, 0x56, 0xfa, 0x39, 0xcf, 0x85, + 0x09, 0x27, 0xdd, 0x9d, 0x09, 0xe4, 0x43, 0xee, 0x13, 0x64, 0x8d, 0xc7, 0x8f, 0x8f, 0x6a, 0xf7, + 0x7d, 0xa8, 0x0c, 0xe7, 0xf2, 0x36, 0xe9, 0xdd, 0xdb, 0x49, 0x72, 0x3e, 0xfd, 0x92, 0x02, 0x4b, + 0xc9, 0x4d, 0x40, 0x7e, 0x67, 0x54, 0x39, 0xdb, 0x77, 0x46, 0xa5, 0x53, 0xfd, 0xd2, 0x88, 0x53, + 0xfd, 0xe7, 0xe0, 0x52, 0xf6, 0xdc, 0xa0, 0x1a, 0x19, 0x7b, 0xd7, 0x57, 0x58, 0x42, 0xd1, 0xb3, + 0x15, 0xb4, 0x10, 0x73, 0x58, 0xe3, 0x47, 0xbe, 0xf5, 0xfd, 0x2b, 0x6f, 0xfb, 0xf6, 0xf7, 0xaf, + 0xbc, 0xed, 0xbb, 0xdf, 0xbf, 0xf2, 0xb6, 0x9f, 0x3a, 0xbe, 0xa2, 0x7c, 0xeb, 0xf8, 0x8a, 0xf2, + 0xed, 0xe3, 0x2b, 0xca, 0x77, 0x8f, 0xaf, 0x28, 0xff, 0xe5, 0xf8, 0x8a, 0xf2, 0x33, 0xff, 0xf5, + 0xca, 0xdb, 0x5e, 0x99, 0x15, 0x8c, 0xff, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x83, 0x1d, 0x6f, + 0xa5, 0x1d, 0xc9, 0x00, 0x00, } func (m *Addon) Marshal() (dAtA []byte, err error) { @@ -12288,6 +12385,42 @@ func (m *ShootCredentialsRotation) MarshalToSizedBuffer(dAtA []byte) (int, error _ = i var l int _ = l + if m.ETCDEncryptionKey != nil { + { + size, err := m.ETCDEncryptionKey.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 + } + if m.ServiceAccountKey != nil { + { + size, err := m.ServiceAccountKey.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } + if m.Observability != nil { + { + size, err := m.Observability.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } if m.SSHKeypair != nil { { size, err := m.SSHKeypair.MarshalToSizedBuffer(dAtA[:i]) @@ -12327,6 +12460,58 @@ func (m *ShootCredentialsRotation) MarshalToSizedBuffer(dAtA []byte) (int, error return len(dAtA) - i, nil } +func (m *ShootETCDEncryptionKeyRotation) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ShootETCDEncryptionKeyRotation) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ShootETCDEncryptionKeyRotation) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.LastInitiationTime != nil { + { + size, err := m.LastInitiationTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if m.LastCompletionTime != nil { + { + size, err := m.LastCompletionTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + i -= len(m.Phase) + copy(dAtA[i:], m.Phase) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Phase))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + func (m *ShootKubeconfigRotation) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -12505,6 +12690,53 @@ func (m *ShootNetworks) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *ShootObservabilityRotation) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ShootObservabilityRotation) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ShootObservabilityRotation) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.LastCompletionTime != nil { + { + size, err := m.LastCompletionTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if m.LastInitiationTime != nil { + { + size, err := m.LastInitiationTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func (m *ShootSSHKeypairRotation) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -12552,6 +12784,58 @@ func (m *ShootSSHKeypairRotation) MarshalToSizedBuffer(dAtA []byte) (int, error) return len(dAtA) - i, nil } +func (m *ShootServiceAccountKeyRotation) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ShootServiceAccountKeyRotation) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ShootServiceAccountKeyRotation) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.LastInitiationTime != nil { + { + size, err := m.LastInitiationTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if m.LastCompletionTime != nil { + { + size, err := m.LastCompletionTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + i -= len(m.Phase) + copy(dAtA[i:], m.Phase) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Phase))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + func (m *ShootSpec) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -12795,6 +13079,20 @@ func (m *ShootStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.LastHibernationTriggerTime != nil { + { + size, err := m.LastHibernationTriggerTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x82 + } if m.Credentials != nil { { size, err := m.Credentials.MarshalToSizedBuffer(dAtA[:i]) @@ -16312,6 +16610,37 @@ func (m *ShootCredentialsRotation) Size() (n int) { l = m.SSHKeypair.Size() n += 1 + l + sovGenerated(uint64(l)) } + if m.Observability != nil { + l = m.Observability.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.ServiceAccountKey != nil { + l = m.ServiceAccountKey.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.ETCDEncryptionKey != nil { + l = m.ETCDEncryptionKey.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *ShootETCDEncryptionKeyRotation) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Phase) + n += 1 + l + sovGenerated(uint64(l)) + if m.LastCompletionTime != nil { + l = m.LastCompletionTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.LastInitiationTime != nil { + l = m.LastInitiationTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + } return n } @@ -16385,6 +16714,23 @@ func (m *ShootNetworks) Size() (n int) { return n } +func (m *ShootObservabilityRotation) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.LastInitiationTime != nil { + l = m.LastInitiationTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.LastCompletionTime != nil { + l = m.LastCompletionTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + func (m *ShootSSHKeypairRotation) Size() (n int) { if m == nil { return 0 @@ -16402,6 +16748,25 @@ func (m *ShootSSHKeypairRotation) Size() (n int) { return n } +func (m *ShootServiceAccountKeyRotation) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Phase) + n += 1 + l + sovGenerated(uint64(l)) + if m.LastCompletionTime != nil { + l = m.LastCompletionTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.LastInitiationTime != nil { + l = m.LastInitiationTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + func (m *ShootSpec) Size() (n int) { if m == nil { return 0 @@ -16543,6 +16908,10 @@ func (m *ShootStatus) Size() (n int) { l = m.Credentials.Size() n += 1 + l + sovGenerated(uint64(l)) } + if m.LastHibernationTriggerTime != nil { + l = m.LastHibernationTriggerTime.Size() + n += 2 + l + sovGenerated(uint64(l)) + } return n } @@ -18701,6 +19070,21 @@ func (this *ShootCredentialsRotation) String() string { `CertificateAuthorities:` + strings.Replace(this.CertificateAuthorities.String(), "ShootCARotation", "ShootCARotation", 1) + `,`, `Kubeconfig:` + strings.Replace(this.Kubeconfig.String(), "ShootKubeconfigRotation", "ShootKubeconfigRotation", 1) + `,`, `SSHKeypair:` + strings.Replace(this.SSHKeypair.String(), "ShootSSHKeypairRotation", "ShootSSHKeypairRotation", 1) + `,`, + `Observability:` + strings.Replace(this.Observability.String(), "ShootObservabilityRotation", "ShootObservabilityRotation", 1) + `,`, + `ServiceAccountKey:` + strings.Replace(this.ServiceAccountKey.String(), "ShootServiceAccountKeyRotation", "ShootServiceAccountKeyRotation", 1) + `,`, + `ETCDEncryptionKey:` + strings.Replace(this.ETCDEncryptionKey.String(), "ShootETCDEncryptionKeyRotation", "ShootETCDEncryptionKeyRotation", 1) + `,`, + `}`, + }, "") + return s +} +func (this *ShootETCDEncryptionKeyRotation) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ShootETCDEncryptionKeyRotation{`, + `Phase:` + fmt.Sprintf("%v", this.Phase) + `,`, + `LastCompletionTime:` + strings.Replace(fmt.Sprintf("%v", this.LastCompletionTime), "Time", "v11.Time", 1) + `,`, + `LastInitiationTime:` + strings.Replace(fmt.Sprintf("%v", this.LastInitiationTime), "Time", "v11.Time", 1) + `,`, `}`, }, "") return s @@ -18755,6 +19139,17 @@ func (this *ShootNetworks) String() string { }, "") return s } +func (this *ShootObservabilityRotation) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ShootObservabilityRotation{`, + `LastInitiationTime:` + strings.Replace(fmt.Sprintf("%v", this.LastInitiationTime), "Time", "v11.Time", 1) + `,`, + `LastCompletionTime:` + strings.Replace(fmt.Sprintf("%v", this.LastCompletionTime), "Time", "v11.Time", 1) + `,`, + `}`, + }, "") + return s +} func (this *ShootSSHKeypairRotation) String() string { if this == nil { return "nil" @@ -18766,6 +19161,18 @@ func (this *ShootSSHKeypairRotation) String() string { }, "") return s } +func (this *ShootServiceAccountKeyRotation) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ShootServiceAccountKeyRotation{`, + `Phase:` + fmt.Sprintf("%v", this.Phase) + `,`, + `LastCompletionTime:` + strings.Replace(fmt.Sprintf("%v", this.LastCompletionTime), "Time", "v11.Time", 1) + `,`, + `LastInitiationTime:` + strings.Replace(fmt.Sprintf("%v", this.LastInitiationTime), "Time", "v11.Time", 1) + `,`, + `}`, + }, "") + return s +} func (this *ShootSpec) String() string { if this == nil { return "nil" @@ -18849,6 +19256,7 @@ func (this *ShootStatus) String() string { `AdvertisedAddresses:` + repeatedStringForAdvertisedAddresses + `,`, `MigrationStartTime:` + strings.Replace(fmt.Sprintf("%v", this.MigrationStartTime), "Time", "v11.Time", 1) + `,`, `Credentials:` + strings.Replace(this.Credentials.String(), "ShootCredentials", "ShootCredentials", 1) + `,`, + `LastHibernationTriggerTime:` + strings.Replace(fmt.Sprintf("%v", this.LastHibernationTriggerTime), "Time", "v11.Time", 1) + `,`, `}`, }, "") return s @@ -39112,8 +39520,566 @@ func (m *SeedTaint) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - s := string(dAtA[iNdEx:postIndex]) - m.Value = &s + s := string(dAtA[iNdEx:postIndex]) + m.Value = &s + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SeedTemplate) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SeedTemplate: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SeedTemplate: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SeedVolume) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SeedVolume: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SeedVolume: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MinimumSize", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.MinimumSize == nil { + m.MinimumSize = &resource.Quantity{} + } + if err := m.MinimumSize.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Providers", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Providers = append(m.Providers, SeedVolumeProvider{}) + if err := m.Providers[len(m.Providers)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SeedVolumeProvider) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SeedVolumeProvider: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SeedVolumeProvider: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Purpose", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Purpose = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ServiceAccountConfig) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ServiceAccountConfig: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ServiceAccountConfig: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Issuer", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.Issuer = &s + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SigningKeySecret", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.SigningKeySecret == nil { + m.SigningKeySecret = &v1.LocalObjectReference{} + } + if err := m.SigningKeySecret.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ExtendTokenExpiration", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + b := bool(v != 0) + m.ExtendTokenExpiration = &b + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxTokenExpiration", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.MaxTokenExpiration == nil { + m.MaxTokenExpiration = &v11.Duration{} + } + if err := m.MaxTokenExpiration.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AcceptedIssuers", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AcceptedIssuers = append(m.AcceptedIssuers, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex default: iNdEx = preIndex @@ -39136,7 +40102,7 @@ func (m *SeedTaint) Unmarshal(dAtA []byte) error { } return nil } -func (m *SeedTemplate) Unmarshal(dAtA []byte) error { +func (m *Shoot) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -39159,10 +40125,10 @@ func (m *SeedTemplate) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: SeedTemplate: wiretype end group for non-group") + return fmt.Errorf("proto: Shoot: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: SeedTemplate: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: Shoot: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -39231,95 +40197,9 @@ func (m *SeedTemplate) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *SeedVolume) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: SeedVolume: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: SeedVolume: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MinimumSize", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.MinimumSize == nil { - m.MinimumSize = &resource.Quantity{} - } - if err := m.MinimumSize.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: + case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Providers", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -39346,8 +40226,7 @@ func (m *SeedVolume) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Providers = append(m.Providers, SeedVolumeProvider{}) - if err := m.Providers[len(m.Providers)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -39372,7 +40251,7 @@ func (m *SeedVolume) Unmarshal(dAtA []byte) error { } return nil } -func (m *SeedVolumeProvider) Unmarshal(dAtA []byte) error { +func (m *ShootAdvertisedAddress) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -39395,15 +40274,15 @@ func (m *SeedVolumeProvider) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: SeedVolumeProvider: wiretype end group for non-group") + return fmt.Errorf("proto: ShootAdvertisedAddress: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: SeedVolumeProvider: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ShootAdvertisedAddress: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Purpose", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -39431,11 +40310,11 @@ func (m *SeedVolumeProvider) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Purpose = string(dAtA[iNdEx:postIndex]) + m.Name = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field URL", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -39463,7 +40342,7 @@ func (m *SeedVolumeProvider) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Name = string(dAtA[iNdEx:postIndex]) + m.URL = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -39486,7 +40365,7 @@ func (m *SeedVolumeProvider) Unmarshal(dAtA []byte) error { } return nil } -func (m *ServiceAccountConfig) Unmarshal(dAtA []byte) error { +func (m *ShootCARotation) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -39509,15 +40388,15 @@ func (m *ServiceAccountConfig) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ServiceAccountConfig: wiretype end group for non-group") + return fmt.Errorf("proto: ShootCARotation: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ServiceAccountConfig: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ShootCARotation: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Issuer", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Phase", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -39545,12 +40424,11 @@ func (m *ServiceAccountConfig) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - s := string(dAtA[iNdEx:postIndex]) - m.Issuer = &s + m.Phase = ShootCredentialsRotationPhase(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SigningKeySecret", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field LastCompletionTime", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -39577,37 +40455,16 @@ func (m *ServiceAccountConfig) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.SigningKeySecret == nil { - m.SigningKeySecret = &v1.LocalObjectReference{} + if m.LastCompletionTime == nil { + m.LastCompletionTime = &v11.Time{} } - if err := m.SigningKeySecret.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.LastCompletionTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field ExtendTokenExpiration", wireType) - } - var v int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - b := bool(v != 0) - m.ExtendTokenExpiration = &b - case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field MaxTokenExpiration", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field LastInitiationTime", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -39634,18 +40491,68 @@ func (m *ServiceAccountConfig) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.MaxTokenExpiration == nil { - m.MaxTokenExpiration = &v11.Duration{} + if m.LastInitiationTime == nil { + m.LastInitiationTime = &v11.Time{} } - if err := m.MaxTokenExpiration.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.LastInitiationTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 5: + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ShootCredentials) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ShootCredentials: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ShootCredentials: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AcceptedIssuers", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Rotation", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -39655,23 +40562,27 @@ func (m *ServiceAccountConfig) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - m.AcceptedIssuers = append(m.AcceptedIssuers, string(dAtA[iNdEx:postIndex])) + if m.Rotation == nil { + m.Rotation = &ShootCredentialsRotation{} + } + if err := m.Rotation.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex default: iNdEx = preIndex @@ -39694,7 +40605,7 @@ func (m *ServiceAccountConfig) Unmarshal(dAtA []byte) error { } return nil } -func (m *Shoot) Unmarshal(dAtA []byte) error { +func (m *ShootCredentialsRotation) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -39717,15 +40628,87 @@ func (m *Shoot) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: Shoot: wiretype end group for non-group") + return fmt.Errorf("proto: ShootCredentialsRotation: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: Shoot: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ShootCredentialsRotation: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field CertificateAuthorities", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.CertificateAuthorities == nil { + m.CertificateAuthorities = &ShootCARotation{} + } + if err := m.CertificateAuthorities.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Kubeconfig", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Kubeconfig == nil { + m.Kubeconfig = &ShootKubeconfigRotation{} + } + if err := m.Kubeconfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SSHKeypair", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -39752,13 +40735,16 @@ func (m *Shoot) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if m.SSHKeypair == nil { + m.SSHKeypair = &ShootSSHKeypairRotation{} + } + if err := m.SSHKeypair.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 2: + case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Observability", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -39785,13 +40771,16 @@ func (m *Shoot) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if m.Observability == nil { + m.Observability = &ShootObservabilityRotation{} + } + if err := m.Observability.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 3: + case 5: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ServiceAccountKey", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -39818,65 +40807,18 @@ func (m *Shoot) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err + if m.ServiceAccountKey == nil { + m.ServiceAccountKey = &ShootServiceAccountKeyRotation{} } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { + if err := m.ServiceAccountKey.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *ShootAdvertisedAddress) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ShootAdvertisedAddress: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ShootAdvertisedAddress: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + iNdEx = postIndex + case 6: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ETCDEncryptionKey", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -39886,55 +40828,27 @@ func (m *ShootAdvertisedAddress) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - m.Name = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field URL", wireType) + if m.ETCDEncryptionKey == nil { + m.ETCDEncryptionKey = &ShootETCDEncryptionKeyRotation{} } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF + if err := m.ETCDEncryptionKey.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } - m.URL = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -39957,7 +40871,7 @@ func (m *ShootAdvertisedAddress) Unmarshal(dAtA []byte) error { } return nil } -func (m *ShootCARotation) Unmarshal(dAtA []byte) error { +func (m *ShootETCDEncryptionKeyRotation) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -39980,10 +40894,10 @@ func (m *ShootCARotation) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ShootCARotation: wiretype end group for non-group") + return fmt.Errorf("proto: ShootETCDEncryptionKeyRotation: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ShootCARotation: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ShootETCDEncryptionKeyRotation: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: @@ -40111,7 +41025,7 @@ func (m *ShootCARotation) Unmarshal(dAtA []byte) error { } return nil } -func (m *ShootCredentials) Unmarshal(dAtA []byte) error { +func (m *ShootKubeconfigRotation) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -40134,15 +41048,15 @@ func (m *ShootCredentials) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ShootCredentials: wiretype end group for non-group") + return fmt.Errorf("proto: ShootKubeconfigRotation: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ShootCredentials: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ShootKubeconfigRotation: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Rotation", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field LastInitiationTime", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -40169,10 +41083,46 @@ func (m *ShootCredentials) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.Rotation == nil { - m.Rotation = &ShootCredentialsRotation{} + if m.LastInitiationTime == nil { + m.LastInitiationTime = &v11.Time{} } - if err := m.Rotation.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.LastInitiationTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LastCompletionTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.LastCompletionTime == nil { + m.LastCompletionTime = &v11.Time{} + } + if err := m.LastCompletionTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -40197,7 +41147,7 @@ func (m *ShootCredentials) Unmarshal(dAtA []byte) error { } return nil } -func (m *ShootCredentialsRotation) Unmarshal(dAtA []byte) error { +func (m *ShootList) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -40220,15 +41170,15 @@ func (m *ShootCredentialsRotation) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ShootCredentialsRotation: wiretype end group for non-group") + return fmt.Errorf("proto: ShootList: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ShootCredentialsRotation: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ShootList: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field CertificateAuthorities", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -40255,52 +41205,13 @@ func (m *ShootCredentialsRotation) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.CertificateAuthorities == nil { - m.CertificateAuthorities = &ShootCARotation{} - } - if err := m.CertificateAuthorities.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Kubeconfig", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Kubeconfig == nil { - m.Kubeconfig = &ShootKubeconfigRotation{} - } - if err := m.Kubeconfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SSHKeypair", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -40327,10 +41238,8 @@ func (m *ShootCredentialsRotation) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.SSHKeypair == nil { - m.SSHKeypair = &ShootSSHKeypairRotation{} - } - if err := m.SSHKeypair.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.Items = append(m.Items, Shoot{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -40355,7 +41264,7 @@ func (m *ShootCredentialsRotation) Unmarshal(dAtA []byte) error { } return nil } -func (m *ShootKubeconfigRotation) Unmarshal(dAtA []byte) error { +func (m *ShootMachineImage) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -40378,15 +41287,47 @@ func (m *ShootKubeconfigRotation) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ShootKubeconfigRotation: wiretype end group for non-group") + return fmt.Errorf("proto: ShootMachineImage: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ShootKubeconfigRotation: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ShootMachineImage: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LastInitiationTime", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ProviderConfig", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -40413,18 +41354,18 @@ func (m *ShootKubeconfigRotation) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.LastInitiationTime == nil { - m.LastInitiationTime = &v11.Time{} + if m.ProviderConfig == nil { + m.ProviderConfig = &runtime.RawExtension{} } - if err := m.LastInitiationTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.ProviderConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 2: + case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LastCompletionTime", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -40434,27 +41375,24 @@ func (m *ShootKubeconfigRotation) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - if m.LastCompletionTime == nil { - m.LastCompletionTime = &v11.Time{} - } - if err := m.LastCompletionTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + s := string(dAtA[iNdEx:postIndex]) + m.Version = &s iNdEx = postIndex default: iNdEx = preIndex @@ -40477,7 +41415,7 @@ func (m *ShootKubeconfigRotation) Unmarshal(dAtA []byte) error { } return nil } -func (m *ShootList) Unmarshal(dAtA []byte) error { +func (m *ShootNetworks) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -40500,17 +41438,17 @@ func (m *ShootList) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ShootList: wiretype end group for non-group") + return fmt.Errorf("proto: ShootNetworks: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ShootList: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ShootNetworks: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Pods", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -40520,30 +41458,30 @@ func (m *ShootList) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + s := string(dAtA[iNdEx:postIndex]) + m.Pods = &s iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Services", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -40553,25 +41491,24 @@ func (m *ShootList) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - m.Items = append(m.Items, Shoot{}) - if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + s := string(dAtA[iNdEx:postIndex]) + m.Services = &s iNdEx = postIndex default: iNdEx = preIndex @@ -40594,7 +41531,7 @@ func (m *ShootList) Unmarshal(dAtA []byte) error { } return nil } -func (m *ShootMachineImage) Unmarshal(dAtA []byte) error { +func (m *ShootObservabilityRotation) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -40617,17 +41554,17 @@ func (m *ShootMachineImage) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ShootMachineImage: wiretype end group for non-group") + return fmt.Errorf("proto: ShootObservabilityRotation: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ShootMachineImage: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ShootObservabilityRotation: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field LastInitiationTime", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -40637,27 +41574,31 @@ func (m *ShootMachineImage) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - m.Name = string(dAtA[iNdEx:postIndex]) + if m.LastInitiationTime == nil { + m.LastInitiationTime = &v11.Time{} + } + if err := m.LastInitiationTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ProviderConfig", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field LastCompletionTime", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -40684,46 +41625,13 @@ func (m *ShootMachineImage) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.ProviderConfig == nil { - m.ProviderConfig = &runtime.RawExtension{} + if m.LastCompletionTime == nil { + m.LastCompletionTime = &v11.Time{} } - if err := m.ProviderConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.LastCompletionTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - s := string(dAtA[iNdEx:postIndex]) - m.Version = &s - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -40745,7 +41653,7 @@ func (m *ShootMachineImage) Unmarshal(dAtA []byte) error { } return nil } -func (m *ShootNetworks) Unmarshal(dAtA []byte) error { +func (m *ShootSSHKeypairRotation) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -40768,17 +41676,17 @@ func (m *ShootNetworks) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ShootNetworks: wiretype end group for non-group") + return fmt.Errorf("proto: ShootSSHKeypairRotation: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ShootNetworks: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ShootSSHKeypairRotation: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Pods", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field LastInitiationTime", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -40788,30 +41696,33 @@ func (m *ShootNetworks) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - s := string(dAtA[iNdEx:postIndex]) - m.Pods = &s + if m.LastInitiationTime == nil { + m.LastInitiationTime = &v11.Time{} + } + if err := m.LastInitiationTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Services", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field LastCompletionTime", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -40821,24 +41732,27 @@ func (m *ShootNetworks) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - s := string(dAtA[iNdEx:postIndex]) - m.Services = &s + if m.LastCompletionTime == nil { + m.LastCompletionTime = &v11.Time{} + } + if err := m.LastCompletionTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex default: iNdEx = preIndex @@ -40861,7 +41775,7 @@ func (m *ShootNetworks) Unmarshal(dAtA []byte) error { } return nil } -func (m *ShootSSHKeypairRotation) Unmarshal(dAtA []byte) error { +func (m *ShootServiceAccountKeyRotation) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -40884,15 +41798,47 @@ func (m *ShootSSHKeypairRotation) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: ShootSSHKeypairRotation: wiretype end group for non-group") + return fmt.Errorf("proto: ShootServiceAccountKeyRotation: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: ShootSSHKeypairRotation: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: ShootServiceAccountKeyRotation: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LastInitiationTime", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Phase", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Phase = ShootCredentialsRotationPhase(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LastCompletionTime", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -40919,16 +41865,16 @@ func (m *ShootSSHKeypairRotation) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.LastInitiationTime == nil { - m.LastInitiationTime = &v11.Time{} + if m.LastCompletionTime == nil { + m.LastCompletionTime = &v11.Time{} } - if err := m.LastInitiationTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.LastCompletionTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 2: + case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LastCompletionTime", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field LastInitiationTime", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -40955,10 +41901,10 @@ func (m *ShootSSHKeypairRotation) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.LastCompletionTime == nil { - m.LastCompletionTime = &v11.Time{} + if m.LastInitiationTime == nil { + m.LastInitiationTime = &v11.Time{} } - if err := m.LastCompletionTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.LastInitiationTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -42192,6 +43138,42 @@ func (m *ShootStatus) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 16: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LastHibernationTriggerTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.LastHibernationTriggerTime == nil { + m.LastHibernationTriggerTime = &v11.Time{} + } + if err := m.LastHibernationTriggerTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/generated.proto b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/generated.proto index 4b180dbb7..067164d6f 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/generated.proto +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/generated.proto @@ -1938,6 +1938,7 @@ message SeedSettings { optional SeedSettingScheduling scheduling = 2; // ShootDNS controls the shoot DNS settings for the seed. + // Deprecated: This field is deprecated and will be removed in a future version of Gardener. Do not use it. // +optional optional SeedSettingShootDNS shootDNS = 3; @@ -2091,6 +2092,7 @@ message ServiceAccountConfig { // SigningKeySecret is a reference to a secret that contains an optional private key of the // service account token issuer. The issuer will sign issued ID tokens with this private key. // Only useful if service account tokens are also issued by another external system. + // Deprecated: This field is deprecated and will be removed in a future version of Gardener. Do not use it. // +optional optional k8s.io.api.core.v1.LocalObjectReference signingKeySecretName = 2; @@ -2177,6 +2179,33 @@ message ShootCredentialsRotation { // SSHKeypair contains information about the ssh-keypair credential rotation. // +optional optional ShootSSHKeypairRotation sshKeypair = 3; + + // Observability contains information about the observability credential rotation. + // +optional + optional ShootObservabilityRotation observability = 4; + + // ServiceAccountKey contains information about the service account key credential rotation. + // +optional + optional ShootServiceAccountKeyRotation serviceAccountKey = 5; + + // ETCDEncryptionKey contains information about the ETCD encryption key credential rotation. + // +optional + optional ShootETCDEncryptionKeyRotation etcdEncryptionKey = 6; +} + +// ShootETCDEncryptionKeyRotation contains information about the ETCD encryption key credential rotation. +message ShootETCDEncryptionKeyRotation { + // Phase describes the phase of the ETCD encryption key credential rotation. + optional string phase = 1; + + // LastInitiationTime is the most recent time when the ETCD encryption key credential rotation was initiated. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastInitiationTime = 3; + + // LastCompletionTime is the most recent time when the ETCD encryption key credential rotation was successfully + // completed. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastCompletionTime = 2; } // ShootKubeconfigRotation contains information about the kubeconfig credential rotation. @@ -2227,9 +2256,20 @@ message ShootNetworks { optional string services = 2; } +// ShootObservabilityRotation contains information about the observability credential rotation. +message ShootObservabilityRotation { + // LastInitiationTime is the most recent time when the observability credential rotation was initiated. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastInitiationTime = 1; + + // LastCompletionTime is the most recent time when the observability credential rotation was successfully completed. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastCompletionTime = 2; +} + // ShootSSHKeypairRotation contains information about the ssh-keypair credential rotation. message ShootSSHKeypairRotation { - // LastInitiationTime is the most recent time when the certificate authority credential rotation was initiated. + // LastInitiationTime is the most recent time when the ssh-keypair credential rotation was initiated. // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastInitiationTime = 1; @@ -2238,6 +2278,21 @@ message ShootSSHKeypairRotation { optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastCompletionTime = 2; } +// ShootServiceAccountKeyRotation contains information about the service account key credential rotation. +message ShootServiceAccountKeyRotation { + // Phase describes the phase of the service account key credential rotation. + optional string phase = 1; + + // LastInitiationTime is the most recent time when the service account key credential rotation was initiated. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastInitiationTime = 3; + + // LastCompletionTime is the most recent time when the service account key credential rotation was successfully + // completed. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastCompletionTime = 2; +} + // ShootSpec is the specification of a Shoot. message ShootSpec { // Addons contains information about enabled/disabled addons and their configuration. @@ -2386,6 +2441,11 @@ message ShootStatus { // Credentials contains information about the shoot credentials. // +optional optional ShootCredentials credentials = 15; + + // LastHibernationTriggerTime indicates the last time when the hibernation controller + // managed to change the hibernation settings of the cluster + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastHibernationTriggerTime = 16; } // ShootTemplate is a template for creating a Shoot object. diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/helper/errors.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/helper/errors.go index 50eb9808b..b0d708539 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/helper/errors.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/helper/errors.go @@ -27,18 +27,18 @@ import ( "k8s.io/apimachinery/pkg/util/sets" ) -// ErrorWithCodes contains error codes and an error message. +// ErrorWithCodes contains the error and Gardener error codes. type ErrorWithCodes struct { - message string - codes []gardencorev1beta1.ErrorCode + err error + codes []gardencorev1beta1.ErrorCode } // Retriable marks ErrorWithCodes as retriable. func (e *ErrorWithCodes) Retriable() {} // NewErrorWithCodes creates a new error that additionally exposes the given codes via the Coder interface. -func NewErrorWithCodes(message string, codes ...gardencorev1beta1.ErrorCode) error { - return &ErrorWithCodes{message, codes} +func NewErrorWithCodes(err error, codes ...gardencorev1beta1.ErrorCode) error { + return &ErrorWithCodes{err, codes} } // Codes returns all error codes. @@ -46,9 +46,14 @@ func (e *ErrorWithCodes) Codes() []gardencorev1beta1.ErrorCode { return e.codes } +// Unwrap rettieves the error from ErrorWithCodes. +func (e *ErrorWithCodes) Unwrap() error { + return e.err +} + // Error returns the error message. func (e *ErrorWithCodes) Error() string { - return e.message + return e.err.Error() } var ( @@ -63,29 +68,30 @@ var ( retryableConfigurationProblemRegexp = regexp.MustCompile(`(?i)(is misconfigured and requires zero voluntary evictions|SDK.CanNotResolveEndpoint|The requested configuration is currently not supported)`) ) -// DetermineError determines the Garden error code for the given error and creates a new error with the given message. -// TODO(timebertt): this is should be improved: clean up the usages to not pass the error twice (once as an error and -// once as a string) and properly wrap the given error instead of creating a new one from the given error message, -// so we can use errors.As up the call stack. -func DetermineError(err error, message string) error { +// DeprecatedDetermineError determines the Gardener error codes for the given error and returns an ErrorWithCodes with the error and codes. +// This function is deprecated and will be removed in a future version. +func DeprecatedDetermineError(err error) error { if err == nil { - return errors.New(message) + return nil } - errMsg := message - if errMsg == "" { - errMsg = err.Error() + // try to re-use codes from error + var coder Coder + if errors.As(err, &coder) { + return err } - codes := DetermineErrorCodes(err) - if codes == nil { - return errors.New(errMsg) + codes := DeprecatedDetermineErrorCodes(err) + if len(codes) == 0 { + return err } - return &ErrorWithCodes{errMsg, codes} + + return &ErrorWithCodes{err, codes} } -// DetermineErrorCodes determines error codes based on the given error. -func DetermineErrorCodes(err error) []gardencorev1beta1.ErrorCode { +// DeprecatedDetermineErrorCodes determines error codes based on the given error. +// This function is deprecated and will be removed in a future version. +func DeprecatedDetermineErrorCodes(err error) []gardencorev1beta1.ErrorCode { var ( coder Coder message = err.Error() @@ -225,7 +231,7 @@ func NewWrappedLastErrors(description string, err error) *WrappedLastErrors { lastErrors = append(lastErrors, *LastErrorWithTaskID( partError.Error(), utilerrors.GetID(partError), - DetermineErrorCodes(utilerrors.Unwrap(partError))...)) + DeprecatedDetermineErrorCodes(utilerrors.Unwrap(partError))...)) } return &WrappedLastErrors{ @@ -267,7 +273,8 @@ func HasNonRetryableErrorCode(lastErrors ...gardencorev1beta1.LastError) bool { code == gardencorev1beta1.ErrorInfraDependencies || code == gardencorev1beta1.ErrorInfraQuotaExceeded || code == gardencorev1beta1.ErrorInfraRateLimitsExceeded || - code == gardencorev1beta1.ErrorConfigurationProblem { + code == gardencorev1beta1.ErrorConfigurationProblem || + code == gardencorev1beta1.ErrorProblematicWebhook { return true } } diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/helper/helper.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/helper/helper.go index 6ae813d19..1f99e57bc 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/helper/helper.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/helper/helper.go @@ -896,6 +896,11 @@ func SeedSettingDependencyWatchdogProbeEnabled(settings *gardencorev1beta1.SeedS return settings == nil || settings.DependencyWatchdog == nil || settings.DependencyWatchdog.Probe == nil || settings.DependencyWatchdog.Probe.Enabled } +// SeedUsesNginxIngressController returns true if the seed's specification requires an nginx ingress controller to be deployed. +func SeedUsesNginxIngressController(seed *gardencorev1beta1.Seed) bool { + return seed.Spec.DNS.Provider != nil && seed.Spec.Ingress != nil && seed.Spec.Ingress.Controller.Kind == v1beta1constants.IngressKindNginx +} + // DetermineMachineImageForName finds the cloud specific machine images in the for the given and // region. In case it does not find the machine image with the , it returns false. Otherwise, true and the // cloud-specific machine image will be returned. @@ -1574,3 +1579,112 @@ func IsShootSSHKeypairRotationInitiationTimeAfterLastCompletionTime(credentials return credentials.Rotation.SSHKeypair.LastCompletionTime == nil || credentials.Rotation.SSHKeypair.LastCompletionTime.Before(credentials.Rotation.SSHKeypair.LastInitiationTime) } + +// MutateObservabilityRotation mutates the .status.credentials.rotation.observability field based on the provided +// mutation function. If the field is nil then it is initialized. +func MutateObservabilityRotation(shoot *gardencorev1beta1.Shoot, f func(*gardencorev1beta1.ShootObservabilityRotation)) { + if shoot.Status.Credentials == nil { + shoot.Status.Credentials = &gardencorev1beta1.ShootCredentials{} + } + if shoot.Status.Credentials.Rotation == nil { + shoot.Status.Credentials.Rotation = &gardencorev1beta1.ShootCredentialsRotation{} + } + if shoot.Status.Credentials.Rotation.Observability == nil { + shoot.Status.Credentials.Rotation.Observability = &gardencorev1beta1.ShootObservabilityRotation{} + } + + f(shoot.Status.Credentials.Rotation.Observability) +} + +// IsShootObservabilityRotationInitiationTimeAfterLastCompletionTime returns true when the lastInitiationTime in the +// .status.credentials.rotation.observability field is newer than the lastCompletionTime. This is also true if the +// lastCompletionTime is unset. +func IsShootObservabilityRotationInitiationTimeAfterLastCompletionTime(credentials *gardencorev1beta1.ShootCredentials) bool { + if credentials == nil || + credentials.Rotation == nil || + credentials.Rotation.Observability == nil || + credentials.Rotation.Observability.LastInitiationTime == nil { + return false + } + + return credentials.Rotation.Observability.LastCompletionTime == nil || + credentials.Rotation.Observability.LastCompletionTime.Before(credentials.Rotation.Observability.LastInitiationTime) +} + +// GetShootServiceAccountKeyRotationPhase returns the specified shoot service account key rotation phase or an empty +// string. +func GetShootServiceAccountKeyRotationPhase(credentials *gardencorev1beta1.ShootCredentials) gardencorev1beta1.ShootCredentialsRotationPhase { + if credentials != nil && credentials.Rotation != nil && credentials.Rotation.ServiceAccountKey != nil { + return credentials.Rotation.ServiceAccountKey.Phase + } + return "" +} + +// MutateShootServiceAccountKeyRotation mutates the .status.credentials.rotation.serviceAccountKey field based on the +// provided mutation function. If the field is nil then it is initialized. +func MutateShootServiceAccountKeyRotation(shoot *gardencorev1beta1.Shoot, f func(*gardencorev1beta1.ShootServiceAccountKeyRotation)) { + if shoot.Status.Credentials == nil { + shoot.Status.Credentials = &gardencorev1beta1.ShootCredentials{} + } + if shoot.Status.Credentials.Rotation == nil { + shoot.Status.Credentials.Rotation = &gardencorev1beta1.ShootCredentialsRotation{} + } + if shoot.Status.Credentials.Rotation.ServiceAccountKey == nil { + shoot.Status.Credentials.Rotation.ServiceAccountKey = &gardencorev1beta1.ShootServiceAccountKeyRotation{} + } + + f(shoot.Status.Credentials.Rotation.ServiceAccountKey) +} + +// GetShootETCDEncryptionKeyRotationPhase returns the specified shoot ETCD encryption key rotation phase or an empty +// string. +func GetShootETCDEncryptionKeyRotationPhase(credentials *gardencorev1beta1.ShootCredentials) gardencorev1beta1.ShootCredentialsRotationPhase { + if credentials != nil && credentials.Rotation != nil && credentials.Rotation.ETCDEncryptionKey != nil { + return credentials.Rotation.ETCDEncryptionKey.Phase + } + return "" +} + +// MutateShootETCDEncryptionKeyRotation mutates the .status.credentials.rotation.etcdEncryptionKey field based on the +// provided mutation function. If the field is nil then it is initialized. +func MutateShootETCDEncryptionKeyRotation(shoot *gardencorev1beta1.Shoot, f func(*gardencorev1beta1.ShootETCDEncryptionKeyRotation)) { + if shoot.Status.Credentials == nil { + shoot.Status.Credentials = &gardencorev1beta1.ShootCredentials{} + } + if shoot.Status.Credentials.Rotation == nil { + shoot.Status.Credentials.Rotation = &gardencorev1beta1.ShootCredentialsRotation{} + } + if shoot.Status.Credentials.Rotation.ETCDEncryptionKey == nil { + shoot.Status.Credentials.Rotation.ETCDEncryptionKey = &gardencorev1beta1.ShootETCDEncryptionKeyRotation{} + } + + f(shoot.Status.Credentials.Rotation.ETCDEncryptionKey) +} + +// IsValidShootOperation checks whether the provided operation annotation value is valid. It returns two bools: The +// first value specifies whether it's valid, and the second bool value specifies whether the gardener-apiserver removes +// the annotation before the Shoot is persisted to etcd. +func IsValidShootOperation(operation string, lastOperation *gardencorev1beta1.LastOperation) (isValid bool) { + if lastOperation != nil && lastOperation.State == gardencorev1beta1.LastOperationStateFailed { + return operation == v1beta1constants.ShootOperationRetry + } + + switch operation { + case v1beta1constants.GardenerOperationReconcile, + v1beta1constants.ShootOperationRotateCredentialsStart, + v1beta1constants.ShootOperationRotateCredentialsComplete, + v1beta1constants.ShootOperationRotateKubeconfigCredentials, + v1beta1constants.ShootOperationRotateObservabilityCredentials, + v1beta1constants.ShootOperationRotateSSHKeypair, + v1beta1constants.ShootOperationRotateCAStart, + v1beta1constants.ShootOperationRotateCAComplete, + v1beta1constants.ShootOperationRotateServiceAccountKeyStart, + v1beta1constants.ShootOperationRotateServiceAccountKeyComplete, + v1beta1constants.ShootOperationRotateETCDEncryptionKeyStart, + v1beta1constants.ShootOperationRotateETCDEncryptionKeyComplete: + return true + + default: + return false + } +} diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_common.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_common.go index c6192c52d..50263576c 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_common.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_common.go @@ -45,6 +45,10 @@ const ( ErrorConfigurationProblem ErrorCode = "ERR_CONFIGURATION_PROBLEM" // ErrorRetryableConfigurationProblem indicates that the last error occurred due to a retryable configuration problem. ErrorRetryableConfigurationProblem ErrorCode = "ERR_RETRYABLE_CONFIGURATION_PROBLEM" + // ErrorProblematicWebhook indicates that the last error occurred due to a webhook not following the Kubernetes + // best practices (https://kubernetes.io/docs/reference/access-authn-authz/extensible-admission-controllers/#best-practices-and-warnings). + // It is classified as a non-retryable error code. + ErrorProblematicWebhook ErrorCode = "ERR_PROBLEMATIC_WEBHOOK" ) // LastError indicates the last occurred error for an operation on a resource. diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_project.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_project.go index 848ac4a47..d71d19bd5 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_project.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_project.go @@ -148,6 +148,8 @@ const ( ProjectMemberOwner = "owner" // ProjectMemberUserAccessManager is a const for a role that provides permissions to manage human user(s, (groups)). ProjectMemberUserAccessManager = "uam" + // ProjectMemberServiceAccountManager is a const for a role that provides permissions to manage service accounts and request tokens for them. + ProjectMemberServiceAccountManager = "serviceaccountmanager" // ProjectMemberViewer is a const for a role that provides limited permissions to only view some resources. ProjectMemberViewer = "viewer" // ProjectMemberExtensionPrefix is a prefix for custom roles that are not known by Gardener. diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_seed.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_seed.go index 84557437c..8294dc06a 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_seed.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_seed.go @@ -230,6 +230,7 @@ type SeedSettings struct { // +optional Scheduling *SeedSettingScheduling `json:"scheduling,omitempty" protobuf:"bytes,2,opt,name=scheduling"` // ShootDNS controls the shoot DNS settings for the seed. + // Deprecated: This field is deprecated and will be removed in a future version of Gardener. Do not use it. // +optional ShootDNS *SeedSettingShootDNS `json:"shootDNS,omitempty" protobuf:"bytes,3,opt,name=shootDNS"` // LoadBalancerServices controls certain settings for services of type load balancer that are created in the seed. @@ -362,6 +363,8 @@ const ( SeedExtensionsReady ConditionType = "ExtensionsReady" // SeedGardenletReady is a constant for a condition type indicating that the Gardenlet is ready. SeedGardenletReady ConditionType = "GardenletReady" + // SeedSystemComponentsHealthy is a constant for a condition type indicating the system components health. + SeedSystemComponentsHealthy ConditionType = "SeedSystemComponentsHealthy" ) // Resource constants for Gardener object types diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_shoot.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_shoot.go index 24b65f4b6..d463d9e55 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_shoot.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_shoot.go @@ -188,6 +188,10 @@ type ShootStatus struct { // Credentials contains information about the shoot credentials. // +optional Credentials *ShootCredentials `json:"credentials,omitempty" protobuf:"bytes,15,opt,name=credentials"` + // LastHibernationTriggerTime indicates the last time when the hibernation controller + // managed to change the hibernation settings of the cluster + // +optional + LastHibernationTriggerTime *metav1.Time `json:"lastHibernationTriggerTime,omitempty" protobuf:"bytes,16,opt,name=lastHibernationTriggerTime"` } // ShootCredentials contains information about the shoot credentials. @@ -208,6 +212,15 @@ type ShootCredentialsRotation struct { // SSHKeypair contains information about the ssh-keypair credential rotation. // +optional SSHKeypair *ShootSSHKeypairRotation `json:"sshKeypair,omitempty" protobuf:"bytes,3,opt,name=sshKeypair"` + // Observability contains information about the observability credential rotation. + // +optional + Observability *ShootObservabilityRotation `json:"observability,omitempty" protobuf:"bytes,4,opt,name=observability"` + // ServiceAccountKey contains information about the service account key credential rotation. + // +optional + ServiceAccountKey *ShootServiceAccountKeyRotation `json:"serviceAccountKey,omitempty" protobuf:"bytes,5,opt,name=serviceAccountKey"` + // ETCDEncryptionKey contains information about the ETCD encryption key credential rotation. + // +optional + ETCDEncryptionKey *ShootETCDEncryptionKeyRotation `json:"etcdEncryptionKey,omitempty" protobuf:"bytes,6,opt,name=etcdEncryptionKey"` } // ShootCARotation contains information about the certificate authority credential rotation. @@ -235,7 +248,7 @@ type ShootKubeconfigRotation struct { // ShootSSHKeypairRotation contains information about the ssh-keypair credential rotation. type ShootSSHKeypairRotation struct { - // LastInitiationTime is the most recent time when the certificate authority credential rotation was initiated. + // LastInitiationTime is the most recent time when the ssh-keypair credential rotation was initiated. // +optional LastInitiationTime *metav1.Time `json:"lastInitiationTime,omitempty" protobuf:"bytes,1,opt,name=lastInitiationTime"` // LastCompletionTime is the most recent time when the ssh-keypair credential rotation was successfully completed. @@ -243,6 +256,42 @@ type ShootSSHKeypairRotation struct { LastCompletionTime *metav1.Time `json:"lastCompletionTime,omitempty" protobuf:"bytes,2,opt,name=lastCompletionTime"` } +// ShootObservabilityRotation contains information about the observability credential rotation. +type ShootObservabilityRotation struct { + // LastInitiationTime is the most recent time when the observability credential rotation was initiated. + // +optional + LastInitiationTime *metav1.Time `json:"lastInitiationTime,omitempty" protobuf:"bytes,1,opt,name=lastInitiationTime"` + // LastCompletionTime is the most recent time when the observability credential rotation was successfully completed. + // +optional + LastCompletionTime *metav1.Time `json:"lastCompletionTime,omitempty" protobuf:"bytes,2,opt,name=lastCompletionTime"` +} + +// ShootServiceAccountKeyRotation contains information about the service account key credential rotation. +type ShootServiceAccountKeyRotation struct { + // Phase describes the phase of the service account key credential rotation. + Phase ShootCredentialsRotationPhase `json:"phase" protobuf:"bytes,1,opt,name=phase"` + // LastInitiationTime is the most recent time when the service account key credential rotation was initiated. + // +optional + LastInitiationTime *metav1.Time `json:"lastInitiationTime,omitempty" protobuf:"bytes,3,opt,name=lastInitiationTime"` + // LastCompletionTime is the most recent time when the service account key credential rotation was successfully + // completed. + // +optional + LastCompletionTime *metav1.Time `json:"lastCompletionTime,omitempty" protobuf:"bytes,2,opt,name=lastCompletionTime"` +} + +// ShootETCDEncryptionKeyRotation contains information about the ETCD encryption key credential rotation. +type ShootETCDEncryptionKeyRotation struct { + // Phase describes the phase of the ETCD encryption key credential rotation. + Phase ShootCredentialsRotationPhase `json:"phase" protobuf:"bytes,1,opt,name=phase"` + // LastInitiationTime is the most recent time when the ETCD encryption key credential rotation was initiated. + // +optional + LastInitiationTime *metav1.Time `json:"lastInitiationTime,omitempty" protobuf:"bytes,3,opt,name=lastInitiationTime"` + // LastCompletionTime is the most recent time when the ETCD encryption key credential rotation was successfully + // completed. + // +optional + LastCompletionTime *metav1.Time `json:"lastCompletionTime,omitempty" protobuf:"bytes,2,opt,name=lastCompletionTime"` +} + // ShootCredentialsRotationPhase is a string alias. type ShootCredentialsRotationPhase string @@ -655,6 +704,7 @@ type ServiceAccountConfig struct { // SigningKeySecret is a reference to a secret that contains an optional private key of the // service account token issuer. The issuer will sign issued ID tokens with this private key. // Only useful if service account tokens are also issued by another external system. + // Deprecated: This field is deprecated and will be removed in a future version of Gardener. Do not use it. // +optional SigningKeySecret *corev1.LocalObjectReference `json:"signingKeySecretName,omitempty" protobuf:"bytes,2,opt,name=signingKeySecretName"` // ExtendTokenExpiration turns on projected service account expiration extension during token generation, which diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/zz_generated.conversion.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/zz_generated.conversion.go index c66340bf8..d517ffbf9 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/zz_generated.conversion.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/zz_generated.conversion.go @@ -1352,6 +1352,16 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*ShootETCDEncryptionKeyRotation)(nil), (*core.ShootETCDEncryptionKeyRotation)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_ShootETCDEncryptionKeyRotation_To_core_ShootETCDEncryptionKeyRotation(a.(*ShootETCDEncryptionKeyRotation), b.(*core.ShootETCDEncryptionKeyRotation), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*core.ShootETCDEncryptionKeyRotation)(nil), (*ShootETCDEncryptionKeyRotation)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_core_ShootETCDEncryptionKeyRotation_To_v1beta1_ShootETCDEncryptionKeyRotation(a.(*core.ShootETCDEncryptionKeyRotation), b.(*ShootETCDEncryptionKeyRotation), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*ShootKubeconfigRotation)(nil), (*core.ShootKubeconfigRotation)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta1_ShootKubeconfigRotation_To_core_ShootKubeconfigRotation(a.(*ShootKubeconfigRotation), b.(*core.ShootKubeconfigRotation), scope) }); err != nil { @@ -1392,6 +1402,16 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*ShootObservabilityRotation)(nil), (*core.ShootObservabilityRotation)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_ShootObservabilityRotation_To_core_ShootObservabilityRotation(a.(*ShootObservabilityRotation), b.(*core.ShootObservabilityRotation), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*core.ShootObservabilityRotation)(nil), (*ShootObservabilityRotation)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_core_ShootObservabilityRotation_To_v1beta1_ShootObservabilityRotation(a.(*core.ShootObservabilityRotation), b.(*ShootObservabilityRotation), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*ShootSSHKeypairRotation)(nil), (*core.ShootSSHKeypairRotation)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta1_ShootSSHKeypairRotation_To_core_ShootSSHKeypairRotation(a.(*ShootSSHKeypairRotation), b.(*core.ShootSSHKeypairRotation), scope) }); err != nil { @@ -1402,6 +1422,16 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*ShootServiceAccountKeyRotation)(nil), (*core.ShootServiceAccountKeyRotation)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_ShootServiceAccountKeyRotation_To_core_ShootServiceAccountKeyRotation(a.(*ShootServiceAccountKeyRotation), b.(*core.ShootServiceAccountKeyRotation), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*core.ShootServiceAccountKeyRotation)(nil), (*ShootServiceAccountKeyRotation)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_core_ShootServiceAccountKeyRotation_To_v1beta1_ShootServiceAccountKeyRotation(a.(*core.ShootServiceAccountKeyRotation), b.(*ShootServiceAccountKeyRotation), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*ShootSpec)(nil), (*core.ShootSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta1_ShootSpec_To_core_ShootSpec(a.(*ShootSpec), b.(*core.ShootSpec), scope) }); err != nil { @@ -5004,6 +5034,9 @@ func autoConvert_v1beta1_ShootCredentialsRotation_To_core_ShootCredentialsRotati out.CertificateAuthorities = (*core.ShootCARotation)(unsafe.Pointer(in.CertificateAuthorities)) out.Kubeconfig = (*core.ShootKubeconfigRotation)(unsafe.Pointer(in.Kubeconfig)) out.SSHKeypair = (*core.ShootSSHKeypairRotation)(unsafe.Pointer(in.SSHKeypair)) + out.Observability = (*core.ShootObservabilityRotation)(unsafe.Pointer(in.Observability)) + out.ServiceAccountKey = (*core.ShootServiceAccountKeyRotation)(unsafe.Pointer(in.ServiceAccountKey)) + out.ETCDEncryptionKey = (*core.ShootETCDEncryptionKeyRotation)(unsafe.Pointer(in.ETCDEncryptionKey)) return nil } @@ -5016,6 +5049,9 @@ func autoConvert_core_ShootCredentialsRotation_To_v1beta1_ShootCredentialsRotati out.CertificateAuthorities = (*ShootCARotation)(unsafe.Pointer(in.CertificateAuthorities)) out.Kubeconfig = (*ShootKubeconfigRotation)(unsafe.Pointer(in.Kubeconfig)) out.SSHKeypair = (*ShootSSHKeypairRotation)(unsafe.Pointer(in.SSHKeypair)) + out.Observability = (*ShootObservabilityRotation)(unsafe.Pointer(in.Observability)) + out.ServiceAccountKey = (*ShootServiceAccountKeyRotation)(unsafe.Pointer(in.ServiceAccountKey)) + out.ETCDEncryptionKey = (*ShootETCDEncryptionKeyRotation)(unsafe.Pointer(in.ETCDEncryptionKey)) return nil } @@ -5024,6 +5060,30 @@ func Convert_core_ShootCredentialsRotation_To_v1beta1_ShootCredentialsRotation(i return autoConvert_core_ShootCredentialsRotation_To_v1beta1_ShootCredentialsRotation(in, out, s) } +func autoConvert_v1beta1_ShootETCDEncryptionKeyRotation_To_core_ShootETCDEncryptionKeyRotation(in *ShootETCDEncryptionKeyRotation, out *core.ShootETCDEncryptionKeyRotation, s conversion.Scope) error { + out.Phase = core.ShootCredentialsRotationPhase(in.Phase) + out.LastInitiationTime = (*metav1.Time)(unsafe.Pointer(in.LastInitiationTime)) + out.LastCompletionTime = (*metav1.Time)(unsafe.Pointer(in.LastCompletionTime)) + return nil +} + +// Convert_v1beta1_ShootETCDEncryptionKeyRotation_To_core_ShootETCDEncryptionKeyRotation is an autogenerated conversion function. +func Convert_v1beta1_ShootETCDEncryptionKeyRotation_To_core_ShootETCDEncryptionKeyRotation(in *ShootETCDEncryptionKeyRotation, out *core.ShootETCDEncryptionKeyRotation, s conversion.Scope) error { + return autoConvert_v1beta1_ShootETCDEncryptionKeyRotation_To_core_ShootETCDEncryptionKeyRotation(in, out, s) +} + +func autoConvert_core_ShootETCDEncryptionKeyRotation_To_v1beta1_ShootETCDEncryptionKeyRotation(in *core.ShootETCDEncryptionKeyRotation, out *ShootETCDEncryptionKeyRotation, s conversion.Scope) error { + out.Phase = ShootCredentialsRotationPhase(in.Phase) + out.LastInitiationTime = (*metav1.Time)(unsafe.Pointer(in.LastInitiationTime)) + out.LastCompletionTime = (*metav1.Time)(unsafe.Pointer(in.LastCompletionTime)) + return nil +} + +// Convert_core_ShootETCDEncryptionKeyRotation_To_v1beta1_ShootETCDEncryptionKeyRotation is an autogenerated conversion function. +func Convert_core_ShootETCDEncryptionKeyRotation_To_v1beta1_ShootETCDEncryptionKeyRotation(in *core.ShootETCDEncryptionKeyRotation, out *ShootETCDEncryptionKeyRotation, s conversion.Scope) error { + return autoConvert_core_ShootETCDEncryptionKeyRotation_To_v1beta1_ShootETCDEncryptionKeyRotation(in, out, s) +} + func autoConvert_v1beta1_ShootKubeconfigRotation_To_core_ShootKubeconfigRotation(in *ShootKubeconfigRotation, out *core.ShootKubeconfigRotation, s conversion.Scope) error { out.LastInitiationTime = (*metav1.Time)(unsafe.Pointer(in.LastInitiationTime)) out.LastCompletionTime = (*metav1.Time)(unsafe.Pointer(in.LastCompletionTime)) @@ -5138,6 +5198,28 @@ func Convert_core_ShootNetworks_To_v1beta1_ShootNetworks(in *core.ShootNetworks, return autoConvert_core_ShootNetworks_To_v1beta1_ShootNetworks(in, out, s) } +func autoConvert_v1beta1_ShootObservabilityRotation_To_core_ShootObservabilityRotation(in *ShootObservabilityRotation, out *core.ShootObservabilityRotation, s conversion.Scope) error { + out.LastInitiationTime = (*metav1.Time)(unsafe.Pointer(in.LastInitiationTime)) + out.LastCompletionTime = (*metav1.Time)(unsafe.Pointer(in.LastCompletionTime)) + return nil +} + +// Convert_v1beta1_ShootObservabilityRotation_To_core_ShootObservabilityRotation is an autogenerated conversion function. +func Convert_v1beta1_ShootObservabilityRotation_To_core_ShootObservabilityRotation(in *ShootObservabilityRotation, out *core.ShootObservabilityRotation, s conversion.Scope) error { + return autoConvert_v1beta1_ShootObservabilityRotation_To_core_ShootObservabilityRotation(in, out, s) +} + +func autoConvert_core_ShootObservabilityRotation_To_v1beta1_ShootObservabilityRotation(in *core.ShootObservabilityRotation, out *ShootObservabilityRotation, s conversion.Scope) error { + out.LastInitiationTime = (*metav1.Time)(unsafe.Pointer(in.LastInitiationTime)) + out.LastCompletionTime = (*metav1.Time)(unsafe.Pointer(in.LastCompletionTime)) + return nil +} + +// Convert_core_ShootObservabilityRotation_To_v1beta1_ShootObservabilityRotation is an autogenerated conversion function. +func Convert_core_ShootObservabilityRotation_To_v1beta1_ShootObservabilityRotation(in *core.ShootObservabilityRotation, out *ShootObservabilityRotation, s conversion.Scope) error { + return autoConvert_core_ShootObservabilityRotation_To_v1beta1_ShootObservabilityRotation(in, out, s) +} + func autoConvert_v1beta1_ShootSSHKeypairRotation_To_core_ShootSSHKeypairRotation(in *ShootSSHKeypairRotation, out *core.ShootSSHKeypairRotation, s conversion.Scope) error { out.LastInitiationTime = (*metav1.Time)(unsafe.Pointer(in.LastInitiationTime)) out.LastCompletionTime = (*metav1.Time)(unsafe.Pointer(in.LastCompletionTime)) @@ -5160,6 +5242,30 @@ func Convert_core_ShootSSHKeypairRotation_To_v1beta1_ShootSSHKeypairRotation(in return autoConvert_core_ShootSSHKeypairRotation_To_v1beta1_ShootSSHKeypairRotation(in, out, s) } +func autoConvert_v1beta1_ShootServiceAccountKeyRotation_To_core_ShootServiceAccountKeyRotation(in *ShootServiceAccountKeyRotation, out *core.ShootServiceAccountKeyRotation, s conversion.Scope) error { + out.Phase = core.ShootCredentialsRotationPhase(in.Phase) + out.LastInitiationTime = (*metav1.Time)(unsafe.Pointer(in.LastInitiationTime)) + out.LastCompletionTime = (*metav1.Time)(unsafe.Pointer(in.LastCompletionTime)) + return nil +} + +// Convert_v1beta1_ShootServiceAccountKeyRotation_To_core_ShootServiceAccountKeyRotation is an autogenerated conversion function. +func Convert_v1beta1_ShootServiceAccountKeyRotation_To_core_ShootServiceAccountKeyRotation(in *ShootServiceAccountKeyRotation, out *core.ShootServiceAccountKeyRotation, s conversion.Scope) error { + return autoConvert_v1beta1_ShootServiceAccountKeyRotation_To_core_ShootServiceAccountKeyRotation(in, out, s) +} + +func autoConvert_core_ShootServiceAccountKeyRotation_To_v1beta1_ShootServiceAccountKeyRotation(in *core.ShootServiceAccountKeyRotation, out *ShootServiceAccountKeyRotation, s conversion.Scope) error { + out.Phase = ShootCredentialsRotationPhase(in.Phase) + out.LastInitiationTime = (*metav1.Time)(unsafe.Pointer(in.LastInitiationTime)) + out.LastCompletionTime = (*metav1.Time)(unsafe.Pointer(in.LastCompletionTime)) + return nil +} + +// Convert_core_ShootServiceAccountKeyRotation_To_v1beta1_ShootServiceAccountKeyRotation is an autogenerated conversion function. +func Convert_core_ShootServiceAccountKeyRotation_To_v1beta1_ShootServiceAccountKeyRotation(in *core.ShootServiceAccountKeyRotation, out *ShootServiceAccountKeyRotation, s conversion.Scope) error { + return autoConvert_core_ShootServiceAccountKeyRotation_To_v1beta1_ShootServiceAccountKeyRotation(in, out, s) +} + func autoConvert_v1beta1_ShootSpec_To_core_ShootSpec(in *ShootSpec, out *core.ShootSpec, s conversion.Scope) error { out.Addons = (*core.Addons)(unsafe.Pointer(in.Addons)) out.CloudProfileName = in.CloudProfileName @@ -5246,6 +5352,7 @@ func autoConvert_v1beta1_ShootStatus_To_core_ShootStatus(in *ShootStatus, out *c out.AdvertisedAddresses = *(*[]core.ShootAdvertisedAddress)(unsafe.Pointer(&in.AdvertisedAddresses)) out.MigrationStartTime = (*metav1.Time)(unsafe.Pointer(in.MigrationStartTime)) out.Credentials = (*core.ShootCredentials)(unsafe.Pointer(in.Credentials)) + out.LastHibernationTriggerTime = (*metav1.Time)(unsafe.Pointer(in.LastHibernationTriggerTime)) return nil } @@ -5261,6 +5368,7 @@ func autoConvert_core_ShootStatus_To_v1beta1_ShootStatus(in *core.ShootStatus, o return err } out.IsHibernated = in.IsHibernated + out.LastHibernationTriggerTime = (*metav1.Time)(unsafe.Pointer(in.LastHibernationTriggerTime)) out.LastOperation = (*LastOperation)(unsafe.Pointer(in.LastOperation)) out.LastErrors = *(*[]LastError)(unsafe.Pointer(&in.LastErrors)) out.ObservedGeneration = in.ObservedGeneration diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/zz_generated.deepcopy.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/zz_generated.deepcopy.go index 0dc7413c0..cc5ffad00 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/zz_generated.deepcopy.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/zz_generated.deepcopy.go @@ -3847,6 +3847,21 @@ func (in *ShootCredentialsRotation) DeepCopyInto(out *ShootCredentialsRotation) *out = new(ShootSSHKeypairRotation) (*in).DeepCopyInto(*out) } + if in.Observability != nil { + in, out := &in.Observability, &out.Observability + *out = new(ShootObservabilityRotation) + (*in).DeepCopyInto(*out) + } + if in.ServiceAccountKey != nil { + in, out := &in.ServiceAccountKey, &out.ServiceAccountKey + *out = new(ShootServiceAccountKeyRotation) + (*in).DeepCopyInto(*out) + } + if in.ETCDEncryptionKey != nil { + in, out := &in.ETCDEncryptionKey, &out.ETCDEncryptionKey + *out = new(ShootETCDEncryptionKeyRotation) + (*in).DeepCopyInto(*out) + } return } @@ -3860,6 +3875,30 @@ func (in *ShootCredentialsRotation) DeepCopy() *ShootCredentialsRotation { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ShootETCDEncryptionKeyRotation) DeepCopyInto(out *ShootETCDEncryptionKeyRotation) { + *out = *in + if in.LastInitiationTime != nil { + in, out := &in.LastInitiationTime, &out.LastInitiationTime + *out = (*in).DeepCopy() + } + if in.LastCompletionTime != nil { + in, out := &in.LastCompletionTime, &out.LastCompletionTime + *out = (*in).DeepCopy() + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ShootETCDEncryptionKeyRotation. +func (in *ShootETCDEncryptionKeyRotation) DeepCopy() *ShootETCDEncryptionKeyRotation { + if in == nil { + return nil + } + out := new(ShootETCDEncryptionKeyRotation) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ShootKubeconfigRotation) DeepCopyInto(out *ShootKubeconfigRotation) { *out = *in @@ -3969,6 +4008,30 @@ func (in *ShootNetworks) DeepCopy() *ShootNetworks { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ShootObservabilityRotation) DeepCopyInto(out *ShootObservabilityRotation) { + *out = *in + if in.LastInitiationTime != nil { + in, out := &in.LastInitiationTime, &out.LastInitiationTime + *out = (*in).DeepCopy() + } + if in.LastCompletionTime != nil { + in, out := &in.LastCompletionTime, &out.LastCompletionTime + *out = (*in).DeepCopy() + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ShootObservabilityRotation. +func (in *ShootObservabilityRotation) DeepCopy() *ShootObservabilityRotation { + if in == nil { + return nil + } + out := new(ShootObservabilityRotation) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ShootSSHKeypairRotation) DeepCopyInto(out *ShootSSHKeypairRotation) { *out = *in @@ -3993,6 +4056,30 @@ func (in *ShootSSHKeypairRotation) DeepCopy() *ShootSSHKeypairRotation { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ShootServiceAccountKeyRotation) DeepCopyInto(out *ShootServiceAccountKeyRotation) { + *out = *in + if in.LastInitiationTime != nil { + in, out := &in.LastInitiationTime, &out.LastInitiationTime + *out = (*in).DeepCopy() + } + if in.LastCompletionTime != nil { + in, out := &in.LastCompletionTime, &out.LastCompletionTime + *out = (*in).DeepCopy() + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ShootServiceAccountKeyRotation. +func (in *ShootServiceAccountKeyRotation) DeepCopy() *ShootServiceAccountKeyRotation { + if in == nil { + return nil + } + out := new(ShootServiceAccountKeyRotation) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ShootSpec) DeepCopyInto(out *ShootSpec) { *out = *in @@ -4139,6 +4226,10 @@ func (in *ShootStatus) DeepCopyInto(out *ShootStatus) { *out = new(ShootCredentials) (*in).DeepCopyInto(*out) } + if in.LastHibernationTriggerTime != nil { + in, out := &in.LastHibernationTriggerTime, &out.LastHibernationTriggerTime + *out = (*in).DeepCopy() + } return } diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/zz_generated.deepcopy.go b/vendor/github.com/gardener/gardener/pkg/apis/core/zz_generated.deepcopy.go index eeeeb1b52..ac9e1493c 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/zz_generated.deepcopy.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/zz_generated.deepcopy.go @@ -4019,6 +4019,21 @@ func (in *ShootCredentialsRotation) DeepCopyInto(out *ShootCredentialsRotation) *out = new(ShootSSHKeypairRotation) (*in).DeepCopyInto(*out) } + if in.Observability != nil { + in, out := &in.Observability, &out.Observability + *out = new(ShootObservabilityRotation) + (*in).DeepCopyInto(*out) + } + if in.ServiceAccountKey != nil { + in, out := &in.ServiceAccountKey, &out.ServiceAccountKey + *out = new(ShootServiceAccountKeyRotation) + (*in).DeepCopyInto(*out) + } + if in.ETCDEncryptionKey != nil { + in, out := &in.ETCDEncryptionKey, &out.ETCDEncryptionKey + *out = new(ShootETCDEncryptionKeyRotation) + (*in).DeepCopyInto(*out) + } return } @@ -4032,6 +4047,30 @@ func (in *ShootCredentialsRotation) DeepCopy() *ShootCredentialsRotation { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ShootETCDEncryptionKeyRotation) DeepCopyInto(out *ShootETCDEncryptionKeyRotation) { + *out = *in + if in.LastInitiationTime != nil { + in, out := &in.LastInitiationTime, &out.LastInitiationTime + *out = (*in).DeepCopy() + } + if in.LastCompletionTime != nil { + in, out := &in.LastCompletionTime, &out.LastCompletionTime + *out = (*in).DeepCopy() + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ShootETCDEncryptionKeyRotation. +func (in *ShootETCDEncryptionKeyRotation) DeepCopy() *ShootETCDEncryptionKeyRotation { + if in == nil { + return nil + } + out := new(ShootETCDEncryptionKeyRotation) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ShootKubeconfigRotation) DeepCopyInto(out *ShootKubeconfigRotation) { *out = *in @@ -4136,6 +4175,30 @@ func (in *ShootNetworks) DeepCopy() *ShootNetworks { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ShootObservabilityRotation) DeepCopyInto(out *ShootObservabilityRotation) { + *out = *in + if in.LastInitiationTime != nil { + in, out := &in.LastInitiationTime, &out.LastInitiationTime + *out = (*in).DeepCopy() + } + if in.LastCompletionTime != nil { + in, out := &in.LastCompletionTime, &out.LastCompletionTime + *out = (*in).DeepCopy() + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ShootObservabilityRotation. +func (in *ShootObservabilityRotation) DeepCopy() *ShootObservabilityRotation { + if in == nil { + return nil + } + out := new(ShootObservabilityRotation) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ShootSSHKeypairRotation) DeepCopyInto(out *ShootSSHKeypairRotation) { *out = *in @@ -4160,6 +4223,30 @@ func (in *ShootSSHKeypairRotation) DeepCopy() *ShootSSHKeypairRotation { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ShootServiceAccountKeyRotation) DeepCopyInto(out *ShootServiceAccountKeyRotation) { + *out = *in + if in.LastInitiationTime != nil { + in, out := &in.LastInitiationTime, &out.LastInitiationTime + *out = (*in).DeepCopy() + } + if in.LastCompletionTime != nil { + in, out := &in.LastCompletionTime, &out.LastCompletionTime + *out = (*in).DeepCopy() + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ShootServiceAccountKeyRotation. +func (in *ShootServiceAccountKeyRotation) DeepCopy() *ShootServiceAccountKeyRotation { + if in == nil { + return nil + } + out := new(ShootServiceAccountKeyRotation) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ShootSpec) DeepCopyInto(out *ShootSpec) { *out = *in @@ -4363,6 +4450,10 @@ func (in *ShootStatus) DeepCopyInto(out *ShootStatus) { } } out.Gardener = in.Gardener + if in.LastHibernationTriggerTime != nil { + in, out := &in.LastHibernationTriggerTime, &out.LastHibernationTriggerTime + *out = (*in).DeepCopy() + } if in.LastOperation != nil { in, out := &in.LastOperation, &out.LastOperation *out = new(LastOperation) diff --git a/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_worker.go b/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_worker.go index bcd400884..7ef73be0a 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_worker.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_worker.go @@ -218,6 +218,3 @@ type MachineDeployment struct { // Maximum is the maximum number for this machine deployment. Maximum int32 `json:"maximum"` } - -// WorkerRollingUpdate is a constant for a condition type indicating a rolling update for any worker pool of the Shoot. -const WorkerRollingUpdate gardencorev1beta1.ConditionType = "RollingUpdate" diff --git a/vendor/github.com/gardener/gardener/pkg/apis/resources/v1alpha1/types.go b/vendor/github.com/gardener/gardener/pkg/apis/resources/v1alpha1/types.go index 73b81765e..038f9ca81 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/resources/v1alpha1/types.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/resources/v1alpha1/types.go @@ -46,6 +46,10 @@ const ( // true then the controller will keep the resource requests and limits in Pod templates (e.g. in a // DeploymentSpec) during updates to the resource. This applies for all containers. PreserveResources = "resources.gardener.cloud/preserve-resources" + // OriginAnnotation is a constant for an annotation on a resource managed by a ManagedResource. + // It is set by the ManagedResource controller to the key of the owning ManagedResource, optionally prefixed with the + // clusterID. + OriginAnnotation = "resources.gardener.cloud/origin" // StaticTokenSkip is a constant for a label on a ServiceAccount which indicates that this ServiceAccount should not // be considered by this controller. @@ -101,6 +105,7 @@ const ( // +kubebuilder:printcolumn:name="Class",type=string,JSONPath=`.spec.class`,description="The class identifies which resource manager is responsible for this ManagedResource." // +kubebuilder:printcolumn:name="Applied",type=string,JSONPath=`.status.conditions[?(@.type=="ResourcesApplied")].status`,description=" Indicates whether all resources have been applied." // +kubebuilder:printcolumn:name="Healthy",type=string,JSONPath=`.status.conditions[?(@.type=="ResourcesHealthy")].status`,description="Indicates whether all resources are healthy." +// +kubebuilder:printcolumn:name="Progressing",type=string,JSONPath=`.status.conditions[?(@.type=="ResourcesProgressing")].status`,description="Indicates whether some resources are still progressing to be rolled out." // +kubebuilder:printcolumn:name="Age",type=date,JSONPath=`.metadata.creationTimestamp`,description="creation timestamp" // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object @@ -180,6 +185,8 @@ const ( ResourcesApplied gardencorev1beta1.ConditionType = "ResourcesApplied" // ResourcesHealthy is a condition type that indicates whether all resources are present and healthy. ResourcesHealthy gardencorev1beta1.ConditionType = "ResourcesHealthy" + // ResourcesProgressing is a condition type that indicates whether some resources are still progressing to be rolled out. + ResourcesProgressing gardencorev1beta1.ConditionType = "ResourcesProgressing" ) // These are well-known reasons for Conditions. @@ -205,7 +212,10 @@ const ( // ReleaseOfOrphanedResourcesFailed indicates that the `ResourcesApplied` condition is `False`, // because the release of orphaned resources failed. ReleaseOfOrphanedResourcesFailed = "ReleaseOfOrphanedResourcesFailed" - // ConditionHealthChecksPending indicates that the `ResourcesHealthy` condition is `Unknown`, - // because the health checks have not been completely executed yet for the current set of resources. - ConditionHealthChecksPending = "HealthChecksPending" + // ConditionManagedResourceIgnored indicates that the ManagedResource's conditions are not checked, + // because the ManagedResource is marked to be ignored. + ConditionManagedResourceIgnored = "ManagedResourceIgnored" + // ConditionChecksPending indicates that the `ResourcesProgressing` condition is `Unknown`, + // because the condition checks have not been completely executed yet for the current set of resources. + ConditionChecksPending = "ChecksPending" ) diff --git a/vendor/github.com/gardener/gardener/pkg/client/kubernetes/client.go b/vendor/github.com/gardener/gardener/pkg/client/kubernetes/client.go index 2f529f773..494054914 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/kubernetes/client.go +++ b/vendor/github.com/gardener/gardener/pkg/client/kubernetes/client.go @@ -240,6 +240,7 @@ var supportedKubernetesVersions = []string{ "1.21", "1.22", "1.23", + "1.24", } func checkIfSupportedKubernetesVersion(gitVersion string) error { diff --git a/vendor/github.com/gardener/gardener/pkg/extensions/customresources.go b/vendor/github.com/gardener/gardener/pkg/extensions/customresources.go index 918615240..8da8f73cb 100644 --- a/vendor/github.com/gardener/gardener/pkg/extensions/customresources.go +++ b/vendor/github.com/gardener/gardener/pkg/extensions/customresources.go @@ -16,6 +16,7 @@ package extensions import ( "context" + "errors" "fmt" "time" @@ -224,7 +225,7 @@ func WaitUntilExtensionObjectDeleted( if lastErr := obj.GetExtensionStatus().GetLastError(); lastErr != nil { logger.Errorf("%s did not get deleted yet, lastError is: %s", extensionKey(kind, namespace, name), lastErr.Description) - lastObservedError = gardencorev1beta1helper.NewErrorWithCodes(lastErr.Description, lastErr.Codes...) + lastObservedError = gardencorev1beta1helper.NewErrorWithCodes(errors.New(lastErr.Description), lastErr.Codes...) } var message = fmt.Sprintf("%s is still present", extensionKey(kind, namespace, name)) diff --git a/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/types.go b/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/types.go index da29c5365..874e88ad8 100644 --- a/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/types.go +++ b/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/types.go @@ -130,6 +130,8 @@ type GardenletControllerConfiguration struct { Shoot *ShootControllerConfiguration // ShootCare defines the configuration of the ShootCare controller. ShootCare *ShootCareControllerConfiguration + // SeedCare defines the configuration of the SeedCare controller. + SeedCare *SeedCareControllerConfiguration // ShootMigration defines the configuration of the ShootMigration controller. ShootMigration *ShootMigrationControllerConfiguration // ShootStateSync defines the configuration of the ShootState controller. @@ -270,6 +272,16 @@ type ShootCareControllerConfiguration struct { ConditionThresholds []ConditionThreshold } +// SeedCareControllerConfiguration defines the configuration of the SeedCare +// controller. +type SeedCareControllerConfiguration struct { + // SyncPeriod is the duration how often the existing resources are reconciled (how + // often the health check of Seed clusters is performed. + SyncPeriod *metav1.Duration + // ConditionThresholds defines the condition threshold per condition type. + ConditionThresholds []ConditionThreshold +} + // ShootMigrationControllerConfiguration defines the configuration of the ShootMigration // controller. type ShootMigrationControllerConfiguration struct { @@ -370,6 +382,14 @@ type FluentBit struct { // OutputSection defines [OUTPUT] configuration for the fluent-bit. // If it is nil, fluent-bit uses default output configuration. OutputSection *string + // NetworkPolicy defines settings for the fluent-bit NetworkPolicy. + NetworkPolicy *FluentBitNetworkPolicy +} + +// FluentBitNetworkPolicy defines settings for the fluent-bit NetworkPolicy. +type FluentBitNetworkPolicy struct { + // AdditionalEgressIPBlocks contains IP CIDRs for the egress network policy. + AdditionalEgressIPBlocks []string } // Loki contains configuration for the Loki. diff --git a/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/v1alpha1/defaults.go b/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/v1alpha1/defaults.go index 2d48352eb..2e0c43903 100644 --- a/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/v1alpha1/defaults.go +++ b/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/v1alpha1/defaults.go @@ -88,6 +88,10 @@ func SetDefaults_GardenletConfiguration(obj *GardenletConfiguration) { obj.SNI = &SNI{} } + if obj.ETCDConfig == nil { + obj.ETCDConfig = &ETCDConfig{} + } + var defaultSVCName = DefaultSNIIngresServiceName for i, handler := range obj.ExposureClassHandlers { if obj.ExposureClassHandlers[i].SNI == nil { @@ -144,6 +148,9 @@ func SetDefaults_GardenletControllerConfiguration(obj *GardenletControllerConfig if obj.ShootCare == nil { obj.ShootCare = &ShootCareControllerConfiguration{} } + if obj.SeedCare == nil { + obj.SeedCare = &SeedCareControllerConfiguration{} + } if obj.ShootMigration == nil { obj.ShootMigration = &ShootMigrationControllerConfiguration{} } @@ -343,6 +350,14 @@ func SetDefaults_ShootCareControllerConfiguration(obj *ShootCareControllerConfig } } +// SetDefaults_SeedCareControllerConfiguration sets defaults for the seed care controller. +func SetDefaults_SeedCareControllerConfiguration(obj *SeedCareControllerConfiguration) { + if obj.SyncPeriod == nil { + v := metav1.Duration{Duration: 30 * time.Second} + obj.SyncPeriod = &v + } +} + // SetDefaults_ShootMigrationControllerConfiguration sets defaults for the shoot migration controller. func SetDefaults_ShootMigrationControllerConfiguration(obj *ShootMigrationControllerConfiguration) { if obj.ConcurrentSyncs == nil { @@ -480,3 +495,31 @@ func SetDefaults_Logging(obj *Logging) { obj.Loki.Garden.Storage = &DefaultCentralLokiStorage } } + +// SetDefaults_ETCDConfig sets defaults for the ETCD. +func SetDefaults_ETCDConfig(obj *ETCDConfig) { + if obj.ETCDController == nil { + obj.ETCDController = &ETCDController{} + } + if obj.ETCDController.Workers == nil { + obj.ETCDController.Workers = pointer.Int64(50) + } + if obj.CustodianController == nil { + obj.CustodianController = &CustodianController{} + } + if obj.CustodianController.Workers == nil { + obj.CustodianController.Workers = pointer.Int64(10) + } + if obj.BackupCompactionController == nil { + obj.BackupCompactionController = &BackupCompactionController{} + } + if obj.BackupCompactionController.Workers == nil { + obj.BackupCompactionController.Workers = pointer.Int64(3) + } + if obj.BackupCompactionController.EnableBackupCompaction == nil { + obj.BackupCompactionController.EnableBackupCompaction = pointer.Bool(false) + } + if obj.BackupCompactionController.EventsThreshold == nil { + obj.BackupCompactionController.EventsThreshold = pointer.Int64(1000000) + } +} diff --git a/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/v1alpha1/types.go b/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/v1alpha1/types.go index e6fc1ed69..f78f7a49a 100644 --- a/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/v1alpha1/types.go +++ b/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/v1alpha1/types.go @@ -164,6 +164,9 @@ type GardenletControllerConfiguration struct { // ShootCare defines the configuration of the ShootCare controller. // +optional ShootCare *ShootCareControllerConfiguration `json:"shootCare,omitempty"` + // SeedCare defines the configuration of the SeedCare controller. + // +optional + SeedCare *SeedCareControllerConfiguration `json:"seedCare,omitempty"` // ShootMigration defines the configuration of the ShootMigration controller. // +optional ShootMigration *ShootMigrationControllerConfiguration `json:"shootMigration,omitempty"` @@ -337,6 +340,18 @@ type ShootCareControllerConfiguration struct { ConditionThresholds []ConditionThreshold `json:"conditionThresholds,omitempty"` } +// SeedCareControllerConfiguration defines the configuration of the SeedCare +// controller. +type SeedCareControllerConfiguration struct { + // SyncPeriod is the duration how often the existing resources are reconciled (how + // often the health check of Seed clusters is performed + // +optional + SyncPeriod *metav1.Duration `json:"syncPeriod,omitempty"` + // ConditionThresholds defines the condition threshold per condition type. + // +optional + ConditionThresholds []ConditionThreshold `json:"conditionThresholds,omitempty"` +} + // ShootMigrationControllerConfiguration defines the configuration of the ShootMigration // controller. type ShootMigrationControllerConfiguration struct { @@ -455,6 +470,16 @@ type FluentBit struct { // If it is nil, fluent-bit uses default output configuration. // +optional OutputSection *string `json:"output,omitempty" yaml:"output,omitempty"` + // NetworkPolicy defines settings for the fluent-bit NetworkPolicy. + // +optional + NetworkPolicy *FluentBitNetworkPolicy `json:"networkPolicy,omitempty" yaml:"networkPolicy,omitempty"` +} + +// FluentBitNetworkPolicy defines settings for the fluent-bit NetworkPolicy. +type FluentBitNetworkPolicy struct { + // AdditionalEgressIPBlocks contains IP CIDRs for the egress network policy. + // +optional + AdditionalEgressIPBlocks []string `json:"additionalEgressIPBlocks,omitempty" yaml:"additionalEgressIPBlocks,omitempty"` } // Loki contains configuration for the Loki. diff --git a/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/v1alpha1/zz_generated.conversion.go b/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/v1alpha1/zz_generated.conversion.go index 0291f3edf..293a5cadc 100644 --- a/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/v1alpha1/zz_generated.conversion.go +++ b/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/v1alpha1/zz_generated.conversion.go @@ -194,6 +194,16 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*FluentBitNetworkPolicy)(nil), (*config.FluentBitNetworkPolicy)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha1_FluentBitNetworkPolicy_To_config_FluentBitNetworkPolicy(a.(*FluentBitNetworkPolicy), b.(*config.FluentBitNetworkPolicy), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*config.FluentBitNetworkPolicy)(nil), (*FluentBitNetworkPolicy)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_config_FluentBitNetworkPolicy_To_v1alpha1_FluentBitNetworkPolicy(a.(*config.FluentBitNetworkPolicy), b.(*FluentBitNetworkPolicy), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*GardenClientConnection)(nil), (*config.GardenClientConnection)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1alpha1_GardenClientConnection_To_config_GardenClientConnection(a.(*GardenClientConnection), b.(*config.GardenClientConnection), scope) }); err != nil { @@ -344,6 +354,16 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*SeedCareControllerConfiguration)(nil), (*config.SeedCareControllerConfiguration)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha1_SeedCareControllerConfiguration_To_config_SeedCareControllerConfiguration(a.(*SeedCareControllerConfiguration), b.(*config.SeedCareControllerConfiguration), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*config.SeedCareControllerConfiguration)(nil), (*SeedCareControllerConfiguration)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_config_SeedCareControllerConfiguration_To_v1alpha1_SeedCareControllerConfiguration(a.(*config.SeedCareControllerConfiguration), b.(*SeedCareControllerConfiguration), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*SeedClientConnection)(nil), (*config.SeedClientConnection)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1alpha1_SeedClientConnection_To_config_SeedClientConnection(a.(*SeedClientConnection), b.(*config.SeedClientConnection), scope) }); err != nil { @@ -827,6 +847,7 @@ func autoConvert_v1alpha1_FluentBit_To_config_FluentBit(in *FluentBit, out *conf out.ServiceSection = (*string)(unsafe.Pointer(in.ServiceSection)) out.InputSection = (*string)(unsafe.Pointer(in.InputSection)) out.OutputSection = (*string)(unsafe.Pointer(in.OutputSection)) + out.NetworkPolicy = (*config.FluentBitNetworkPolicy)(unsafe.Pointer(in.NetworkPolicy)) return nil } @@ -839,6 +860,7 @@ func autoConvert_config_FluentBit_To_v1alpha1_FluentBit(in *config.FluentBit, ou out.ServiceSection = (*string)(unsafe.Pointer(in.ServiceSection)) out.InputSection = (*string)(unsafe.Pointer(in.InputSection)) out.OutputSection = (*string)(unsafe.Pointer(in.OutputSection)) + out.NetworkPolicy = (*FluentBitNetworkPolicy)(unsafe.Pointer(in.NetworkPolicy)) return nil } @@ -847,6 +869,26 @@ func Convert_config_FluentBit_To_v1alpha1_FluentBit(in *config.FluentBit, out *F return autoConvert_config_FluentBit_To_v1alpha1_FluentBit(in, out, s) } +func autoConvert_v1alpha1_FluentBitNetworkPolicy_To_config_FluentBitNetworkPolicy(in *FluentBitNetworkPolicy, out *config.FluentBitNetworkPolicy, s conversion.Scope) error { + out.AdditionalEgressIPBlocks = *(*[]string)(unsafe.Pointer(&in.AdditionalEgressIPBlocks)) + return nil +} + +// Convert_v1alpha1_FluentBitNetworkPolicy_To_config_FluentBitNetworkPolicy is an autogenerated conversion function. +func Convert_v1alpha1_FluentBitNetworkPolicy_To_config_FluentBitNetworkPolicy(in *FluentBitNetworkPolicy, out *config.FluentBitNetworkPolicy, s conversion.Scope) error { + return autoConvert_v1alpha1_FluentBitNetworkPolicy_To_config_FluentBitNetworkPolicy(in, out, s) +} + +func autoConvert_config_FluentBitNetworkPolicy_To_v1alpha1_FluentBitNetworkPolicy(in *config.FluentBitNetworkPolicy, out *FluentBitNetworkPolicy, s conversion.Scope) error { + out.AdditionalEgressIPBlocks = *(*[]string)(unsafe.Pointer(&in.AdditionalEgressIPBlocks)) + return nil +} + +// Convert_config_FluentBitNetworkPolicy_To_v1alpha1_FluentBitNetworkPolicy is an autogenerated conversion function. +func Convert_config_FluentBitNetworkPolicy_To_v1alpha1_FluentBitNetworkPolicy(in *config.FluentBitNetworkPolicy, out *FluentBitNetworkPolicy, s conversion.Scope) error { + return autoConvert_config_FluentBitNetworkPolicy_To_v1alpha1_FluentBitNetworkPolicy(in, out, s) +} + func autoConvert_v1alpha1_GardenClientConnection_To_config_GardenClientConnection(in *GardenClientConnection, out *config.GardenClientConnection, s conversion.Scope) error { if err := configv1alpha1.Convert_v1alpha1_ClientConnectionConfiguration_To_config_ClientConnectionConfiguration(&in.ClientConnectionConfiguration, &out.ClientConnectionConfiguration, s); err != nil { return err @@ -1090,6 +1132,7 @@ func autoConvert_v1alpha1_GardenletControllerConfiguration_To_config_GardenletCo out.Seed = (*config.SeedControllerConfiguration)(unsafe.Pointer(in.Seed)) out.Shoot = (*config.ShootControllerConfiguration)(unsafe.Pointer(in.Shoot)) out.ShootCare = (*config.ShootCareControllerConfiguration)(unsafe.Pointer(in.ShootCare)) + out.SeedCare = (*config.SeedCareControllerConfiguration)(unsafe.Pointer(in.SeedCare)) out.ShootMigration = (*config.ShootMigrationControllerConfiguration)(unsafe.Pointer(in.ShootMigration)) out.ShootStateSync = (*config.ShootStateSyncControllerConfiguration)(unsafe.Pointer(in.ShootStateSync)) out.SeedAPIServerNetworkPolicy = (*config.SeedAPIServerNetworkPolicyControllerConfiguration)(unsafe.Pointer(in.SeedAPIServerNetworkPolicy)) @@ -1114,6 +1157,7 @@ func autoConvert_config_GardenletControllerConfiguration_To_v1alpha1_GardenletCo out.Seed = (*SeedControllerConfiguration)(unsafe.Pointer(in.Seed)) out.Shoot = (*ShootControllerConfiguration)(unsafe.Pointer(in.Shoot)) out.ShootCare = (*ShootCareControllerConfiguration)(unsafe.Pointer(in.ShootCare)) + out.SeedCare = (*SeedCareControllerConfiguration)(unsafe.Pointer(in.SeedCare)) out.ShootMigration = (*ShootMigrationControllerConfiguration)(unsafe.Pointer(in.ShootMigration)) out.ShootStateSync = (*ShootStateSyncControllerConfiguration)(unsafe.Pointer(in.ShootStateSync)) out.SeedAPIServerNetworkPolicy = (*SeedAPIServerNetworkPolicyControllerConfiguration)(unsafe.Pointer(in.SeedAPIServerNetworkPolicy)) @@ -1413,6 +1457,28 @@ func Convert_config_SeedAPIServerNetworkPolicyControllerConfiguration_To_v1alpha return autoConvert_config_SeedAPIServerNetworkPolicyControllerConfiguration_To_v1alpha1_SeedAPIServerNetworkPolicyControllerConfiguration(in, out, s) } +func autoConvert_v1alpha1_SeedCareControllerConfiguration_To_config_SeedCareControllerConfiguration(in *SeedCareControllerConfiguration, out *config.SeedCareControllerConfiguration, s conversion.Scope) error { + out.SyncPeriod = (*v1.Duration)(unsafe.Pointer(in.SyncPeriod)) + out.ConditionThresholds = *(*[]config.ConditionThreshold)(unsafe.Pointer(&in.ConditionThresholds)) + return nil +} + +// Convert_v1alpha1_SeedCareControllerConfiguration_To_config_SeedCareControllerConfiguration is an autogenerated conversion function. +func Convert_v1alpha1_SeedCareControllerConfiguration_To_config_SeedCareControllerConfiguration(in *SeedCareControllerConfiguration, out *config.SeedCareControllerConfiguration, s conversion.Scope) error { + return autoConvert_v1alpha1_SeedCareControllerConfiguration_To_config_SeedCareControllerConfiguration(in, out, s) +} + +func autoConvert_config_SeedCareControllerConfiguration_To_v1alpha1_SeedCareControllerConfiguration(in *config.SeedCareControllerConfiguration, out *SeedCareControllerConfiguration, s conversion.Scope) error { + out.SyncPeriod = (*v1.Duration)(unsafe.Pointer(in.SyncPeriod)) + out.ConditionThresholds = *(*[]ConditionThreshold)(unsafe.Pointer(&in.ConditionThresholds)) + return nil +} + +// Convert_config_SeedCareControllerConfiguration_To_v1alpha1_SeedCareControllerConfiguration is an autogenerated conversion function. +func Convert_config_SeedCareControllerConfiguration_To_v1alpha1_SeedCareControllerConfiguration(in *config.SeedCareControllerConfiguration, out *SeedCareControllerConfiguration, s conversion.Scope) error { + return autoConvert_config_SeedCareControllerConfiguration_To_v1alpha1_SeedCareControllerConfiguration(in, out, s) +} + func autoConvert_v1alpha1_SeedClientConnection_To_config_SeedClientConnection(in *SeedClientConnection, out *config.SeedClientConnection, s conversion.Scope) error { if err := configv1alpha1.Convert_v1alpha1_ClientConnectionConfiguration_To_config_ClientConnectionConfiguration(&in.ClientConnectionConfiguration, &out.ClientConnectionConfiguration, s); err != nil { return err diff --git a/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/v1alpha1/zz_generated.deepcopy.go b/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/v1alpha1/zz_generated.deepcopy.go index 3e01bbc18..97df3963e 100644 --- a/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/v1alpha1/zz_generated.deepcopy.go +++ b/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/v1alpha1/zz_generated.deepcopy.go @@ -404,6 +404,11 @@ func (in *FluentBit) DeepCopyInto(out *FluentBit) { *out = new(string) **out = **in } + if in.NetworkPolicy != nil { + in, out := &in.NetworkPolicy, &out.NetworkPolicy + *out = new(FluentBitNetworkPolicy) + (*in).DeepCopyInto(*out) + } return } @@ -417,6 +422,27 @@ func (in *FluentBit) DeepCopy() *FluentBit { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *FluentBitNetworkPolicy) DeepCopyInto(out *FluentBitNetworkPolicy) { + *out = *in + if in.AdditionalEgressIPBlocks != nil { + in, out := &in.AdditionalEgressIPBlocks, &out.AdditionalEgressIPBlocks + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FluentBitNetworkPolicy. +func (in *FluentBitNetworkPolicy) DeepCopy() *FluentBitNetworkPolicy { + if in == nil { + return nil + } + out := new(FluentBitNetworkPolicy) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *GardenClientConnection) DeepCopyInto(out *GardenClientConnection) { *out = *in @@ -652,6 +678,11 @@ func (in *GardenletControllerConfiguration) DeepCopyInto(out *GardenletControlle *out = new(ShootCareControllerConfiguration) (*in).DeepCopyInto(*out) } + if in.SeedCare != nil { + in, out := &in.SeedCare, &out.SeedCare + *out = new(SeedCareControllerConfiguration) + (*in).DeepCopyInto(*out) + } if in.ShootMigration != nil { in, out := &in.ShootMigration, &out.ShootMigration *out = new(ShootMigrationControllerConfiguration) @@ -995,6 +1026,32 @@ func (in *SeedAPIServerNetworkPolicyControllerConfiguration) DeepCopy() *SeedAPI return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SeedCareControllerConfiguration) DeepCopyInto(out *SeedCareControllerConfiguration) { + *out = *in + if in.SyncPeriod != nil { + in, out := &in.SyncPeriod, &out.SyncPeriod + *out = new(v1.Duration) + **out = **in + } + if in.ConditionThresholds != nil { + in, out := &in.ConditionThresholds, &out.ConditionThresholds + *out = make([]ConditionThreshold, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SeedCareControllerConfiguration. +func (in *SeedCareControllerConfiguration) DeepCopy() *SeedCareControllerConfiguration { + if in == nil { + return nil + } + out := new(SeedCareControllerConfiguration) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *SeedClientConnection) DeepCopyInto(out *SeedClientConnection) { *out = *in diff --git a/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/v1alpha1/zz_generated.defaults.go b/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/v1alpha1/zz_generated.defaults.go index 8979f0456..99a09849f 100644 --- a/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/v1alpha1/zz_generated.defaults.go +++ b/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/v1alpha1/zz_generated.defaults.go @@ -79,6 +79,9 @@ func SetObjectDefaults_GardenletConfiguration(in *GardenletConfiguration) { SetDefaults_StaleExtensionHealthChecks(in.Controllers.ShootCare.StaleExtensionHealthChecks) } } + if in.Controllers.SeedCare != nil { + SetDefaults_SeedCareControllerConfiguration(in.Controllers.SeedCare) + } if in.Controllers.ShootMigration != nil { SetDefaults_ShootMigrationControllerConfiguration(in.Controllers.ShootMigration) } @@ -107,6 +110,9 @@ func SetObjectDefaults_GardenletConfiguration(in *GardenletConfiguration) { SetDefaults_SNIIngress(in.SNI.Ingress) } } + if in.ETCDConfig != nil { + SetDefaults_ETCDConfig(in.ETCDConfig) + } for i := range in.ExposureClassHandlers { a := &in.ExposureClassHandlers[i] if a.SNI != nil { diff --git a/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/zz_generated.deepcopy.go b/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/zz_generated.deepcopy.go index cd6f2d41b..225999da5 100644 --- a/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/zz_generated.deepcopy.go +++ b/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/zz_generated.deepcopy.go @@ -404,6 +404,11 @@ func (in *FluentBit) DeepCopyInto(out *FluentBit) { *out = new(string) **out = **in } + if in.NetworkPolicy != nil { + in, out := &in.NetworkPolicy, &out.NetworkPolicy + *out = new(FluentBitNetworkPolicy) + (*in).DeepCopyInto(*out) + } return } @@ -417,6 +422,27 @@ func (in *FluentBit) DeepCopy() *FluentBit { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *FluentBitNetworkPolicy) DeepCopyInto(out *FluentBitNetworkPolicy) { + *out = *in + if in.AdditionalEgressIPBlocks != nil { + in, out := &in.AdditionalEgressIPBlocks, &out.AdditionalEgressIPBlocks + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FluentBitNetworkPolicy. +func (in *FluentBitNetworkPolicy) DeepCopy() *FluentBitNetworkPolicy { + if in == nil { + return nil + } + out := new(FluentBitNetworkPolicy) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *GardenClientConnection) DeepCopyInto(out *GardenClientConnection) { *out = *in @@ -652,6 +678,11 @@ func (in *GardenletControllerConfiguration) DeepCopyInto(out *GardenletControlle *out = new(ShootCareControllerConfiguration) (*in).DeepCopyInto(*out) } + if in.SeedCare != nil { + in, out := &in.SeedCare, &out.SeedCare + *out = new(SeedCareControllerConfiguration) + (*in).DeepCopyInto(*out) + } if in.ShootMigration != nil { in, out := &in.ShootMigration, &out.ShootMigration *out = new(ShootMigrationControllerConfiguration) @@ -995,6 +1026,32 @@ func (in *SeedAPIServerNetworkPolicyControllerConfiguration) DeepCopy() *SeedAPI return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SeedCareControllerConfiguration) DeepCopyInto(out *SeedCareControllerConfiguration) { + *out = *in + if in.SyncPeriod != nil { + in, out := &in.SyncPeriod, &out.SyncPeriod + *out = new(v1.Duration) + **out = **in + } + if in.ConditionThresholds != nil { + in, out := &in.ConditionThresholds, &out.ConditionThresholds + *out = make([]ConditionThreshold, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SeedCareControllerConfiguration. +func (in *SeedCareControllerConfiguration) DeepCopy() *SeedCareControllerConfiguration { + if in == nil { + return nil + } + out := new(SeedCareControllerConfiguration) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *SeedClientConnection) DeepCopyInto(out *SeedClientConnection) { *out = *in diff --git a/vendor/github.com/gardener/gardener/pkg/utils/flow/progress_reporter_delaying.go b/vendor/github.com/gardener/gardener/pkg/utils/flow/progress_reporter_delaying.go index fefb8306a..a4e7249c7 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/flow/progress_reporter_delaying.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/flow/progress_reporter_delaying.go @@ -20,7 +20,7 @@ import ( "sync" "time" - "k8s.io/apimachinery/pkg/util/clock" + "k8s.io/utils/clock" ) type progressReporterDelaying struct { diff --git a/vendor/github.com/gardener/gardener/pkg/utils/gardener/secrets.go b/vendor/github.com/gardener/gardener/pkg/utils/gardener/secrets.go index 4d4b48bea..970a38342 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/gardener/secrets.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/gardener/secrets.go @@ -25,7 +25,7 @@ import ( var ( // NoControlPlaneSecretsReq is a label selector requirement to select non-control plane secrets. NoControlPlaneSecretsReq = utils.MustNewRequirement(constants.GardenRole, selection.NotIn, constants.ControlPlaneSecretRoles...) - // UncontrolledSecretSelector is a selector for objects which are managed by operators/users and not created + // UncontrolledSecretSelector is a selector for objects which are managed by operators/users and not created by // Gardener controllers. UncontrolledSecretSelector = client.MatchingLabelsSelector{Selector: labels.NewSelector().Add(NoControlPlaneSecretsReq)} ) diff --git a/vendor/github.com/gardener/gardener/pkg/utils/infodata/infodata.go b/vendor/github.com/gardener/gardener/pkg/utils/infodata/infodata.go deleted file mode 100644 index 3e99a9c80..000000000 --- a/vendor/github.com/gardener/gardener/pkg/utils/infodata/infodata.go +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Copyright 2020 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * - */ - -package infodata - -import ( - "fmt" - "sync" - - gardencorev1alpha1 "github.com/gardener/gardener/pkg/apis/core/v1alpha1" - gardencorev1alpha1helper "github.com/gardener/gardener/pkg/apis/core/v1alpha1/helper" - "k8s.io/apimachinery/pkg/runtime" -) - -var lock sync.Mutex -var types = map[TypeVersion]Unmarshaller{} - -// Register is used to register new InfoData type versions -func Register(typeversion TypeVersion, unmarshaller Unmarshaller) { - lock.Lock() - defer lock.Unlock() - types[typeversion] = unmarshaller -} - -// GetUnmarshaller returns an Unmarshaller for the given typeName. -func GetUnmarshaller(typeName TypeVersion) Unmarshaller { - lock.Lock() - defer lock.Unlock() - return types[typeName] -} - -// Unmarshal unmarshals a GardenerResourceData into its respective Go struct representation -func Unmarshal(entry *gardencorev1alpha1.GardenerResourceData) (InfoData, error) { - unmarshaller := GetUnmarshaller(TypeVersion(entry.Type)) - if unmarshaller == nil { - return nil, fmt.Errorf("unknown info data type %q", entry.Type) - } - data, err := unmarshaller(entry.Data.Raw) - if err != nil { - return nil, fmt.Errorf("cannot unmarshal data set %q of type %q: %s", entry.Name, entry.Type, err) - } - return data, nil -} - -// GetInfoData retrieves the go representation of an object from the GardenerResourceDataList -func GetInfoData(resourceDataList gardencorev1alpha1helper.GardenerResourceDataList, name string) (InfoData, error) { - resourceData := resourceDataList.Get(name) - if resourceData == nil { - return nil, nil - } - - return Unmarshal(resourceData) -} - -// UpsertInfoData updates or inserts an InfoData object into the GardenerResourceDataList -func UpsertInfoData(resourceDataList *gardencorev1alpha1helper.GardenerResourceDataList, name string, data InfoData) error { - if _, ok := data.(*emptyInfoData); ok { - return nil - } - - bytes, err := data.Marshal() - if err != nil { - return err - } - - gardenerResourceData := &gardencorev1alpha1.GardenerResourceData{ - Name: name, - Type: string(data.TypeVersion()), - Data: runtime.RawExtension{Raw: bytes}, - } - - resourceDataList.Upsert(gardenerResourceData) - return nil -} diff --git a/vendor/github.com/gardener/gardener/pkg/utils/infodata/types.go b/vendor/github.com/gardener/gardener/pkg/utils/infodata/types.go deleted file mode 100644 index af4fd11e2..000000000 --- a/vendor/github.com/gardener/gardener/pkg/utils/infodata/types.go +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright 2020 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * - */ - -package infodata - -// TypeVersion is the potentially versioned type name of an InfoData representation. -type TypeVersion string - -// Unmarshaller is a factory to create a dedicated InfoData object from a byte stream -type Unmarshaller func(data []byte) (InfoData, error) - -// InfoData is an interface which allows -type InfoData interface { - TypeVersion() TypeVersion - Marshal() ([]byte, error) -} - -// Loader is an interface which declares methods that can be used to extract InfoData from Kubernetes resources data. -// TODO: This interface can be removed in a later version after all resources have been synced to the ShootState. -type Loader interface { - LoadFromSecretData(map[string][]byte) (InfoData, error) -} - -type emptyInfoData struct{} - -func (*emptyInfoData) Marshal() ([]byte, error) { - return nil, nil -} - -func (*emptyInfoData) TypeVersion() TypeVersion { - return "" -} - -// EmptyInfoData is an infodata which does not contain any information. -var EmptyInfoData = &emptyInfoData{} diff --git a/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/daemonset.go b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/daemonset.go index 9b2cb0b96..d567c80cb 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/daemonset.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/daemonset.go @@ -68,3 +68,19 @@ func CheckDaemonSet(daemonSet *appsv1.DaemonSet) error { return nil } + +// IsDaemonSetProgressing returns false if the DaemonSet has been fully rolled out. Otherwise, it returns true along +// with a reason, why the DaemonSet is not considered to be fully rolled out. +func IsDaemonSetProgressing(daemonSet *appsv1.DaemonSet) (bool, string) { + if daemonSet.Status.ObservedGeneration < daemonSet.Generation { + return true, fmt.Sprintf("observed generation outdated (%d/%d)", daemonSet.Status.ObservedGeneration, daemonSet.Generation) + } + + desiredReplicas := daemonSet.Status.DesiredNumberScheduled + updatedReplicas := daemonSet.Status.UpdatedNumberScheduled + if updatedReplicas < desiredReplicas { + return true, fmt.Sprintf("%d of %d replica(s) have been updated", updatedReplicas, desiredReplicas) + } + + return false, "DaemonSet is fully rolled out" +} diff --git a/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/deployment.go b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/deployment.go index 183059031..4469cde6a 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/deployment.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/deployment.go @@ -15,10 +15,17 @@ package health import ( + "context" + "errors" "fmt" + "github.com/gardener/gardener/pkg/utils/retry" + appsv1 "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/utils/pointer" + "sigs.k8s.io/controller-runtime/pkg/client" ) func getDeploymentCondition(conditions []appsv1.DeploymentCondition, conditionType appsv1.DeploymentConditionType) *appsv1.DeploymentCondition { @@ -85,3 +92,59 @@ func CheckDeployment(deployment *appsv1.Deployment) error { return nil } + +// IsDeploymentProgressing returns false if the Deployment has been fully rolled out. Otherwise, it returns true along +// with a reason, why the Deployment is not considered to be fully rolled out. +func IsDeploymentProgressing(deployment *appsv1.Deployment) (bool, string) { + if deployment.Status.ObservedGeneration < deployment.Generation { + return true, fmt.Sprintf("observed generation outdated (%d/%d)", deployment.Status.ObservedGeneration, deployment.Generation) + } + + // if the observed generation is up-to-date, we can rely on the progressing condition to reflect the current status + condition := getDeploymentCondition(deployment.Status.Conditions, appsv1.DeploymentProgressing) + if condition == nil { + return true, fmt.Sprintf("condition %q is missing", appsv1.DeploymentProgressing) + } + + if condition.Status != corev1.ConditionTrue || condition.Reason != "NewReplicaSetAvailable" { + // only if Progressing is in status True with reason NewReplicaSetAvailable, the Deployment has been fully rolled out + // note: old pods or excess pods (scale-down) might still be terminating, but there is no way to tell this from the + // Deployment's status + return true, condition.Message + } + + return false, "Deployment is fully rolled out" +} + +// IsDeploymentUpdated returns a function which can be used for retry.Until. It checks if the deployment is fully +// updated, i.e. if it is no longer progressing, healthy, and has the exact number of desired replicas. +func IsDeploymentUpdated(reader client.Reader, deployment *appsv1.Deployment) func(context.Context) (bool, error) { + return func(ctx context.Context) (bool, error) { + if err := reader.Get(ctx, client.ObjectKeyFromObject(deployment), deployment); err != nil { + return retry.SevereError(err) + } + + // Check if Deployment is still progressing. + if progressing, reason := IsDeploymentProgressing(deployment); progressing { + return retry.MinorError(errors.New(reason)) + } + + // If Deployment is no longer progressing then check if it is healthy. + if err := CheckDeployment(deployment); err != nil { + return retry.MinorError(err) + } + + // Now there might be still pods in the system belonging to an older ReplicaSet of the Deployment. + podList := &metav1.PartialObjectMetadataList{} + podList.SetGroupVersionKind(corev1.SchemeGroupVersion.WithKind("PodList")) + if err := reader.List(ctx, podList, client.InNamespace(deployment.Namespace), client.MatchingLabels(deployment.Spec.Selector.MatchLabels)); err != nil { + return retry.SevereError(err) + } + + if int32(len(podList.Items)) != pointer.Int32Deref(deployment.Spec.Replicas, 1) { + return retry.MinorError(errors.New("there are still non-terminated old pods")) + } + + return retry.Ok() + } +} diff --git a/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/etcd.go b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/etcd.go index e3c8d434c..ad9d6c94c 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/etcd.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/etcd.go @@ -17,15 +17,14 @@ package health import ( "fmt" - "github.com/gardener/gardener/pkg/utils" - druidv1alpha1 "github.com/gardener/etcd-druid/api/v1alpha1" + "k8s.io/utils/pointer" ) // CheckEtcd checks whether the given Etcd is healthy. // A Etcd is considered healthy if its ready field in status is true. func CheckEtcd(etcd *druidv1alpha1.Etcd) error { - if !utils.IsTrue(etcd.Status.Ready) { + if !pointer.BoolDeref(etcd.Status.Ready, false) { return fmt.Errorf("etcd %q is not ready yet", etcd.Name) } return nil diff --git a/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/extensions.go b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/extensions.go index b5d1ad0dd..cd168ac86 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/extensions.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/extensions.go @@ -62,7 +62,7 @@ func ExtensionOperationHasBeenUpdatedSince(lastUpdateTime v1.Time) Func { // checkExtensionObject checks if an extension Object is healthy or not. func checkExtensionObject(generation int64, observedGeneration int64, annotations map[string]string, lastError *gardencorev1beta1.LastError, lastOperation *gardencorev1beta1.LastOperation) error { if lastError != nil { - return v1beta1helper.NewErrorWithCodes(fmt.Sprintf("error during reconciliation: %s", lastError.Description), lastError.Codes...) + return v1beta1helper.NewErrorWithCodes(fmt.Errorf("error during reconciliation: %s", lastError.Description), lastError.Codes...) } if observedGeneration != generation { diff --git a/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/seed.go b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/seed.go index c77ab763a..02a7fc730 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/seed.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/seed.go @@ -27,6 +27,7 @@ var ( trueSeedConditionTypes = []gardencorev1beta1.ConditionType{ gardencorev1beta1.SeedGardenletReady, gardencorev1beta1.SeedBootstrapped, + gardencorev1beta1.SeedSystemComponentsHealthy, } ) @@ -36,7 +37,7 @@ func CheckSeed(seed *gardencorev1beta1.Seed, identity *gardencorev1beta1.Gardene return fmt.Errorf("observing Gardener version not up to date (%v/%v)", seed.Status.Gardener, identity) } - return checkSeed(seed, identity) + return checkSeed(seed) } // CheckSeedForMigration checks if the Seed is up-to-date (comparing only the versions) and if its extensions have been successfully bootstrapped. @@ -45,11 +46,11 @@ func CheckSeedForMigration(seed *gardencorev1beta1.Seed, identity *gardencorev1b return fmt.Errorf("observing Gardener version not up to date (%s/%s)", seed.Status.Gardener.Version, identity.Version) } - return checkSeed(seed, identity) + return checkSeed(seed) } // checkSeed checks if the seed.Status.ObservedGeneration ObservedGeneration is not outdated and if its extensions have been successfully bootstrapped. -func checkSeed(seed *gardencorev1beta1.Seed, identity *gardencorev1beta1.Gardener) error { +func checkSeed(seed *gardencorev1beta1.Seed) error { if seed.Status.ObservedGeneration < seed.Generation { return fmt.Errorf("observed generation outdated (%d/%d)", seed.Status.ObservedGeneration, seed.Generation) } diff --git a/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/statefulset.go b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/statefulset.go index b17444258..73e5a79e4 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/statefulset.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/statefulset.go @@ -39,3 +39,23 @@ func CheckStatefulSet(statefulSet *appsv1.StatefulSet) error { } return nil } + +// IsStatefulSetProgressing returns false if the StatefulSet has been fully rolled out. Otherwise, it returns true along +// with a reason, why the StatefulSet is not considered to be fully rolled out. +func IsStatefulSetProgressing(statefulSet *appsv1.StatefulSet) (bool, string) { + if statefulSet.Status.ObservedGeneration < statefulSet.Generation { + return true, fmt.Sprintf("observed generation outdated (%d/%d)", statefulSet.Status.ObservedGeneration, statefulSet.Generation) + } + + desiredReplicas := int32(1) + if statefulSet.Spec.Replicas != nil { + desiredReplicas = *statefulSet.Spec.Replicas + } + + updatedReplicas := statefulSet.Status.UpdatedReplicas + if updatedReplicas < desiredReplicas { + return true, fmt.Sprintf("%d of %d replica(s) have been updated", updatedReplicas, desiredReplicas) + } + + return false, "StatefulSet is fully rolled out" +} diff --git a/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/unstructured/object.go b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/unstructured/object.go index f54bebdea..f8fedb5c9 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/unstructured/object.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/unstructured/object.go @@ -27,7 +27,7 @@ import ( "github.com/gardener/gardener/pkg/utils" ) -var systemMetadataFields = []string{"ownerReferences", "uid", "resourceVersion", "generation", "selfLink", "creationTimestamp", "deletionTimestamp", "deletionGracePeriodSeconds", "managedFields"} +var systemMetadataFields = []string{"ownerReferences", "uid", "resourceVersion", "generation", "creationTimestamp", "deletionTimestamp", "deletionGracePeriodSeconds", "managedFields"} // GetObjectByRef returns the object with the given reference and namespace using the given client. // The full content of the object is returned as map[string]interface{}, except for system metadata fields. diff --git a/vendor/github.com/gardener/gardener/pkg/utils/managedresources/managedresources.go b/vendor/github.com/gardener/gardener/pkg/utils/managedresources/managedresources.go index af47fab2d..994dfc3c3 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/managedresources/managedresources.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/managedresources/managedresources.go @@ -220,7 +220,7 @@ func WaitUntilListDeleted(ctx context.Context, client client.Client, mrList *res if resourcesAppliedCondition != nil && resourcesAppliedCondition.Status != gardencorev1beta1.ConditionTrue && (resourcesAppliedCondition.Reason == resourcesv1alpha1.ConditionDeletionFailed || resourcesAppliedCondition.Reason == resourcesv1alpha1.ConditionDeletionPending) { deleteError := fmt.Errorf("%w:\n%s", err, resourcesAppliedCondition.Message) - allErrs.Append(gardencorev1beta1helper.DetermineError(deleteError, deleteError.Error())) + allErrs.Append(gardencorev1beta1helper.DeprecatedDetermineError(deleteError)) } } } @@ -241,7 +241,7 @@ func WaitUntilDeleted(ctx context.Context, client client.Client, namespace, name if resourcesAppliedCondition != nil && resourcesAppliedCondition.Status != gardencorev1beta1.ConditionTrue && (resourcesAppliedCondition.Reason == resourcesv1alpha1.ConditionDeletionFailed || resourcesAppliedCondition.Reason == resourcesv1alpha1.ConditionDeletionPending) { deleteError := fmt.Errorf("error while waiting for all resources to be deleted: %w:\n%s", err, resourcesAppliedCondition.Message) - return gardencorev1beta1helper.DetermineError(deleteError, deleteError.Error()) + return gardencorev1beta1helper.DeprecatedDetermineError(deleteError) } return err } diff --git a/vendor/github.com/gardener/gardener/pkg/utils/miscellaneous.go b/vendor/github.com/gardener/gardener/pkg/utils/miscellaneous.go index 7096ababc..bdab8f074 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/miscellaneous.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/miscellaneous.go @@ -120,11 +120,6 @@ func TestEmail(email string) bool { return match } -// IsTrue returns true if the passed bool pointer is not nil and true. -func IsTrue(value *bool) bool { - return value != nil && *value -} - // IDForKeyWithOptionalValue returns an identifier for the given key + optional value. func IDForKeyWithOptionalValue(key string, value *string) string { v := "" diff --git a/vendor/github.com/gardener/gardener/pkg/utils/secrets/alias.go b/vendor/github.com/gardener/gardener/pkg/utils/secrets/alias.go index 961d3e008..706ce49a2 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/secrets/alias.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/secrets/alias.go @@ -21,7 +21,7 @@ import ( "github.com/gardener/gardener/pkg/utils" - "k8s.io/apimachinery/pkg/util/clock" + "k8s.io/utils/clock" ) var ( diff --git a/vendor/github.com/gardener/gardener/pkg/utils/secrets/basic_auth.go b/vendor/github.com/gardener/gardener/pkg/utils/secrets/basic_auth.go index ac243b9c8..29d4dd07c 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/secrets/basic_auth.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/secrets/basic_auth.go @@ -19,7 +19,6 @@ import ( "strings" "github.com/gardener/gardener/pkg/utils" - "github.com/gardener/gardener/pkg/utils/infodata" "k8s.io/apiserver/pkg/authentication/user" ) @@ -68,61 +67,11 @@ func (s *BasicAuthSecretConfig) GetName() string { // Generate implements ConfigInterface. func (s *BasicAuthSecretConfig) Generate() (DataInterface, error) { - return s.GenerateBasicAuth() -} - -// GenerateInfoData implements ConfigInterface. -func (s *BasicAuthSecretConfig) GenerateInfoData() (infodata.InfoData, error) { - password, err := GenerateRandomString(s.PasswordLength) - if err != nil { - return nil, err - } - - return NewBasicAuthInfoData(password), nil -} - -// GenerateFromInfoData implements ConfigInteface -func (s *BasicAuthSecretConfig) GenerateFromInfoData(infoData infodata.InfoData) (DataInterface, error) { - data, ok := infoData.(*BasicAuthInfoData) - if !ok { - return nil, fmt.Errorf("could not convert InfoData entry %s to BasicAuthInfoData", s.Name) - } - - password := data.Password - return s.generateWithPassword(password) -} - -// LoadFromSecretData implements infodata.Loader -func (s *BasicAuthSecretConfig) LoadFromSecretData(secretData map[string][]byte) (infodata.InfoData, error) { - var password string - - switch s.Format { - case BasicAuthFormatNormal: - password = string(secretData[DataKeyPassword]) - case BasicAuthFormatCSV: - csv := strings.Split(string(secretData[DataKeyCSV]), ",") - if len(csv) < 2 { - return nil, fmt.Errorf("invalid CSV for loading basic auth data: %s", string(secretData[DataKeyCSV])) - } - password = csv[0] - } - - return NewBasicAuthInfoData(password), nil -} - -// GenerateBasicAuth computes a username,password and the hash of the password keypair. It uses "admin" as username and generates a -// random password of length 32. -func (s *BasicAuthSecretConfig) GenerateBasicAuth() (*BasicAuth, error) { password, err := GenerateRandomString(s.PasswordLength) if err != nil { return nil, err } - return s.generateWithPassword(password) -} - -// generateWithPassword returns a BasicAuth secret DataInterface with the given password. -func (s *BasicAuthSecretConfig) generateWithPassword(password string) (*BasicAuth, error) { basicAuth := &BasicAuth{ Name: s.Name, Format: s.Format, diff --git a/vendor/github.com/gardener/gardener/pkg/utils/secrets/basic_auth_infodata.go b/vendor/github.com/gardener/gardener/pkg/utils/secrets/basic_auth_infodata.go deleted file mode 100644 index 9c85f4bf9..000000000 --- a/vendor/github.com/gardener/gardener/pkg/utils/secrets/basic_auth_infodata.go +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright (c) 2020 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package secrets - -import ( - "encoding/json" - "fmt" - - "github.com/gardener/gardener/pkg/utils/infodata" -) - -// BasicAuthDataType is the type used to denote an BasicAuthJSONData structure in the ShootState -const BasicAuthDataType = infodata.TypeVersion("basicAuth") - -func init() { - infodata.Register(BasicAuthDataType, UnmarshalBasicAuth) -} - -// BasicAuthJSONData is the json representation of BasicAuthInfoData used to store BasicAuth metadata in the ShootState -type BasicAuthJSONData struct { - Password string `json:"password"` -} - -// UnmarshalBasicAuth unmarshals an BasicAuthJSONData into a BasicAuthInfoData struct. -func UnmarshalBasicAuth(bytes []byte) (infodata.InfoData, error) { - if bytes == nil { - return nil, fmt.Errorf("no data given") - } - data := &BasicAuthJSONData{} - err := json.Unmarshal(bytes, data) - if err != nil { - return nil, err - } - - return NewBasicAuthInfoData(data.Password), nil -} - -// BasicAuthInfoData holds the password used for basic authentication. -type BasicAuthInfoData struct { - Password string -} - -// TypeVersion implements InfoData -func (b *BasicAuthInfoData) TypeVersion() infodata.TypeVersion { - return BasicAuthDataType -} - -// Marshal implements InfoData -func (b *BasicAuthInfoData) Marshal() ([]byte, error) { - return json.Marshal(&BasicAuthJSONData{b.Password}) -} - -// NewBasicAuthInfoData creates a new BasicAuthInfoData struct with the given password. -func NewBasicAuthInfoData(password string) infodata.InfoData { - return &BasicAuthInfoData{password} -} diff --git a/vendor/github.com/gardener/gardener/pkg/utils/secrets/certificate_bundle.go b/vendor/github.com/gardener/gardener/pkg/utils/secrets/bundle.go similarity index 50% rename from vendor/github.com/gardener/gardener/pkg/utils/secrets/certificate_bundle.go rename to vendor/github.com/gardener/gardener/pkg/utils/secrets/bundle.go index ce618ca9e..47786394f 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/secrets/certificate_bundle.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/secrets/bundle.go @@ -14,27 +14,19 @@ package secrets -import ( - "errors" - - "github.com/gardener/gardener/pkg/utils/infodata" +const ( + // DataKeyCertificateBundle is the key in the data map for the certificate bundle. + DataKeyCertificateBundle = "bundle.crt" + // DataKeyPrivateKeyBundle is the key in the data map for the private key bundle. + DataKeyPrivateKeyBundle = "bundle.key" ) -// DataKeyCertificateBundle is the key in the data map for the certificate bundle. -const DataKeyCertificateBundle = "bundle.crt" - // CertificateBundleSecretConfig is configuration for certificate bundles. type CertificateBundleSecretConfig struct { Name string CertificatePEMs [][]byte } -// CertificateBundle contains the name and the generated certificate bundle. -type CertificateBundle struct { - Name string - Bundle []byte -} - // GetName returns the name of the secret. func (s *CertificateBundleSecretConfig) GetName() string { return s.Name @@ -42,36 +34,46 @@ func (s *CertificateBundleSecretConfig) GetName() string { // Generate implements ConfigInterface. func (s *CertificateBundleSecretConfig) Generate() (DataInterface, error) { - return &CertificateBundle{ - Name: s.Name, - Bundle: s.generateBundle(), - }, nil + return newBundle(s.Name, s.CertificatePEMs, DataKeyCertificateBundle) } -func (s *CertificateBundleSecretConfig) generateBundle() []byte { - var bundle []byte - for _, pem := range s.CertificatePEMs { - bundle = append(bundle, pem...) - } - return bundle +// RSAPrivateKeyBundleSecretConfig is configuration for certificate bundles. +type RSAPrivateKeyBundleSecretConfig struct { + Name string + PrivateKeyPEMs [][]byte +} + +// GetName returns the name of the secret. +func (s *RSAPrivateKeyBundleSecretConfig) GetName() string { + return s.Name } -// GenerateInfoData implements ConfigInterface. -func (s *CertificateBundleSecretConfig) GenerateInfoData() (infodata.InfoData, error) { - return nil, errors.New("not implemented") +// Generate implements ConfigInterface. +func (s *RSAPrivateKeyBundleSecretConfig) Generate() (DataInterface, error) { + return newBundle(s.Name, s.PrivateKeyPEMs, DataKeyPrivateKeyBundle) } -// GenerateFromInfoData implements ConfigInterface. -func (s *CertificateBundleSecretConfig) GenerateFromInfoData(_ infodata.InfoData) (DataInterface, error) { - return nil, errors.New("not implemented") +func newBundle(name string, entries [][]byte, dataKeyName string) (DataInterface, error) { + var bundle []byte + for _, entry := range entries { + bundle = append(bundle, entry...) + } + + return &Bundle{ + Name: name, + Bundle: bundle, + DataKeyName: dataKeyName, + }, nil } -// LoadFromSecretData implements infodata.Loader. -func (s *CertificateBundleSecretConfig) LoadFromSecretData(_ map[string][]byte) (infodata.InfoData, error) { - return nil, errors.New("not implemented") +// Bundle contains the name and the generated certificate bundle. +type Bundle struct { + Name string + Bundle []byte + DataKeyName string } // SecretData computes the data map which can be used in a Kubernetes secret. -func (v *CertificateBundle) SecretData() map[string][]byte { - return map[string][]byte{DataKeyCertificateBundle: v.Bundle} +func (b *Bundle) SecretData() map[string][]byte { + return map[string][]byte{b.DataKeyName: b.Bundle} } diff --git a/vendor/github.com/gardener/gardener/pkg/utils/secrets/certificates.go b/vendor/github.com/gardener/gardener/pkg/utils/secrets/certificate.go similarity index 59% rename from vendor/github.com/gardener/gardener/pkg/utils/secrets/certificates.go rename to vendor/github.com/gardener/gardener/pkg/utils/secrets/certificate.go index 0c7c983cc..7dded01f0 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/secrets/certificates.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/secrets/certificate.go @@ -15,27 +15,17 @@ package secrets import ( - "context" "crypto/rand" "crypto/rsa" "crypto/x509" "crypto/x509/pkix" - "fmt" "math/big" "net" "os" "path/filepath" - "sync" "time" "github.com/gardener/gardener/pkg/utils" - "github.com/gardener/gardener/pkg/utils/infodata" - kutil "github.com/gardener/gardener/pkg/utils/kubernetes" - - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/util/clock" - "sigs.k8s.io/controller-runtime/pkg/client" ) // CertType is a string alias for certificate types. @@ -84,8 +74,6 @@ type CertificateSecretConfig struct { Validity *time.Duration SkipPublishingCACertificate bool - - Clock clock.Clock } // Certificate contains the private key, and the certificate. It does also contain the CA certificate @@ -113,71 +101,7 @@ func (s *CertificateSecretConfig) Generate() (DataInterface, error) { return s.GenerateCertificate() } -// GenerateInfoData implements ConfigInterface -func (s *CertificateSecretConfig) GenerateInfoData() (infodata.InfoData, error) { - data, err := s.GenerateCertificate() - if err != nil { - return nil, err - } - - if len(data.PrivateKeyPEM) == 0 && len(data.CertificatePEM) == 0 { - return nil, nil - } - - infoData := NewCertificateInfoData(data.PrivateKeyPEM, data.CertificatePEM) - return infoData, nil -} - -// GenerateFromInfoData implements ConfigInterface -func (s *CertificateSecretConfig) GenerateFromInfoData(infoData infodata.InfoData) (DataInterface, error) { - data, ok := infoData.(*CertificateInfoData) - if !ok { - return nil, fmt.Errorf("could not convert InfoData entry %s to CertificateInfoData", s.Name) - } - certificateObj := &Certificate{ - Name: s.Name, - CA: s.SigningCA, - SkipPublishingCACertificate: s.SkipPublishingCACertificate, - - PrivateKeyPEM: data.PrivateKey, - CertificatePEM: data.Certificate, - } - - var err error - if s.PKCS == PKCS1 { - certificateObj.PrivateKey, err = utils.DecodePrivateKey(data.PrivateKey) - } else if s.PKCS == PKCS8 { - certificateObj.PrivateKey, err = utils.DecodeRSAPrivateKeyFromPKCS8(data.PrivateKey) - } - if err != nil { - return nil, err - } - - certificateObj.Certificate, err = utils.DecodeCertificate(data.Certificate) - if err != nil { - return nil, err - } - return certificateObj, nil -} - -// LoadFromSecretData implements infodata.Loader -func (s *CertificateSecretConfig) LoadFromSecretData(secretData map[string][]byte) (infodata.InfoData, error) { - var ( - privateKeyPEM []byte - certificatePEM []byte - ) - if s.CertType == CACert { - privateKeyPEM = secretData[DataKeyPrivateKeyCA] - certificatePEM = secretData[DataKeyCertificateCA] - } else { - privateKeyPEM = secretData[DataKeyPrivateKey] - certificatePEM = secretData[DataKeyCertificate] - } - - return NewCertificateInfoData(privateKeyPEM, certificatePEM), nil -} - -// GenerateCertificate computes a CA, server, or client certificate based on the configuration. +// GenerateCertificate is the same as Generate but returns a *Certificate instead of the DataInterface. func (s *CertificateSecretConfig) GenerateCertificate() (*Certificate, error) { certificateObj := &Certificate{ Name: s.Name, @@ -274,33 +198,13 @@ func LoadCertificate(name string, privateKeyPEM, certificatePEM []byte) (*Certif }, nil } -// LoadCAFromSecret loads a CA certificate from an existing Kubernetes secret object. It returns the secret, the Certificate and an error. -func LoadCAFromSecret(ctx context.Context, k8sClient client.Client, namespace, name string) (*corev1.Secret, *Certificate, error) { - secret := &corev1.Secret{} - if err := k8sClient.Get(ctx, kutil.Key(namespace, name), secret); err != nil { - return nil, nil, err - } - - certificate, err := LoadCertificate(name, secret.Data[DataKeyPrivateKeyCA], secret.Data[DataKeyCertificateCA]) - if err != nil { - return nil, nil, err - } - - return secret, certificate, nil -} - // generateCertificateTemplate creates a X509 Certificate object based on the provided information regarding // common name, organization, SANs (DNS names and IP addresses). It can create a server or a client certificate // or both, depending on the value. If is true, then a CA certificate is being created. // The certificates a valid for 10 years. func (s *CertificateSecretConfig) generateCertificateTemplate() *x509.Certificate { - var clock clock.Clock = clock.RealClock{} - - if s.Clock != nil { - clock = s.Clock - } + now := Clock.Now() - now := clock.Now() expiration := now.AddDate(10, 0, 0) // + 10 years if s.Validity != nil { expiration = now.Add(*s.Validity) @@ -351,93 +255,6 @@ func signCertificate(certificateTemplate *x509.Certificate, privateKey *rsa.Priv return utils.EncodeCertificate(certificate), nil } -func generateCA(ctx context.Context, c client.Client, config *CertificateSecretConfig, namespace string) (*corev1.Secret, *Certificate, error) { - certificate, err := config.GenerateCertificate() - if err != nil { - return nil, nil, err - } - - secret := &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: config.GetName(), - Namespace: namespace, - }, - Type: corev1.SecretTypeOpaque, - Data: certificate.SecretData(), - } - - if err := c.Create(ctx, secret); err != nil { - return nil, nil, err - } - return secret, certificate, nil -} - -func loadCA(name string, existingSecret *corev1.Secret) (*corev1.Secret, *Certificate, error) { - certificate, err := LoadCertificate(name, existingSecret.Data[DataKeyPrivateKeyCA], existingSecret.Data[DataKeyCertificateCA]) - if err != nil { - return nil, nil, err - } - return existingSecret, certificate, nil -} - -// GenerateCertificateAuthorities get a map of wanted certificates and check If they exist in the existingSecretsMap based on the keys in the map. If they exist it get only the certificate from the corresponding -// existing secret and makes a certificate DataInterface from the existing secret. If there is no existing secret contaning the wanted certificate, we make one certificate and with it we deploy in K8s cluster -// a secret with that certificate and then return the newly existing secret. The function returns a map of secrets contaning the wanted CA, a map with the wanted CA certificate and an error. -func GenerateCertificateAuthorities(ctx context.Context, c client.Client, existingSecretsMap map[string]*corev1.Secret, wantedCertificateAuthorities map[string]*CertificateSecretConfig, namespace string) (map[string]*corev1.Secret, map[string]*Certificate, error) { - type caOutput struct { - secret *corev1.Secret - certificate *Certificate - err error - } - - var ( - certificateAuthorities = map[string]*Certificate{} - generatedSecrets = map[string]*corev1.Secret{} - results = make(chan *caOutput) - wg sync.WaitGroup - errorList = []error{} - ) - - for name, config := range wantedCertificateAuthorities { - wg.Add(1) - - if existingSecret, ok := existingSecretsMap[name]; !ok { - go func(config *CertificateSecretConfig) { - defer wg.Done() - secret, certificate, err := generateCA(ctx, c, config, namespace) - results <- &caOutput{secret, certificate, err} - }(config) - } else { - go func(name string, existingSecret *corev1.Secret) { - defer wg.Done() - secret, certificate, err := loadCA(name, existingSecret) - results <- &caOutput{secret, certificate, err} - }(name, existingSecret) - } - } - - go func() { - wg.Wait() - close(results) - }() - - for out := range results { - if out.err != nil { - errorList = append(errorList, out.err) - continue - } - generatedSecrets[out.secret.Name] = out.secret - certificateAuthorities[out.secret.Name] = out.certificate - } - - // Wait and check whether an error occurred during the parallel processing of the Secret creation. - if len(errorList) > 0 { - return nil, nil, fmt.Errorf("errors occurred during certificate authority generation: %+v", errorList) - } - - return generatedSecrets, certificateAuthorities, nil -} - // TemporaryDirectoryForSelfGeneratedTLSCertificatesPattern is a constant for the pattern used when creating a temporary // directory for self-generated certificates. const TemporaryDirectoryForSelfGeneratedTLSCertificatesPattern = "self-generated-server-certificates-" @@ -452,38 +269,40 @@ func SelfGenerateTLSServerCertificate(name string, dnsNames []string, ips []net. return nil, nil, "", err } - caCertificateConfig := &CertificateSecretConfig{ + caCertificate, err := (&CertificateSecretConfig{ Name: name, CommonName: name, CertType: CACert, - } - caCertificate, err := caCertificateConfig.GenerateCertificate() + }).GenerateCertificate() if err != nil { return nil, nil, "", err } - if err := os.WriteFile(filepath.Join(tempDir, DataKeyCertificateCA), caCertificate.CertificatePEM, 0644); err != nil { + caCertificateData := caCertificate.SecretData() + + if err := os.WriteFile(filepath.Join(tempDir, DataKeyCertificateCA), caCertificateData[DataKeyCertificateCA], 0644); err != nil { return nil, nil, "", err } - if err := os.WriteFile(filepath.Join(tempDir, DataKeyPrivateKeyCA), caCertificate.PrivateKeyPEM, 0644); err != nil { + if err := os.WriteFile(filepath.Join(tempDir, DataKeyPrivateKeyCA), caCertificateData[DataKeyPrivateKeyCA], 0644); err != nil { return nil, nil, "", err } - certificateConfig := &CertificateSecretConfig{ + certificate, err := (&CertificateSecretConfig{ Name: name, CommonName: name, DNSNames: dnsNames, IPAddresses: ips, CertType: ServerCert, SigningCA: caCertificate, - } - certificate, err := certificateConfig.GenerateCertificate() + }).GenerateCertificate() if err != nil { return nil, nil, "", err } - if err := os.WriteFile(filepath.Join(tempDir, DataKeyCertificate), certificate.CertificatePEM, 0644); err != nil { + certificateData := certificate.SecretData() + + if err := os.WriteFile(filepath.Join(tempDir, DataKeyCertificate), certificateData[DataKeyCertificate], 0644); err != nil { return nil, nil, "", err } - if err := os.WriteFile(filepath.Join(tempDir, DataKeyPrivateKey), certificate.PrivateKeyPEM, 0644); err != nil { + if err := os.WriteFile(filepath.Join(tempDir, DataKeyPrivateKey), certificateData[DataKeyPrivateKey], 0644); err != nil { return nil, nil, "", err } diff --git a/vendor/github.com/gardener/gardener/pkg/utils/secrets/certificates_infodata.go b/vendor/github.com/gardener/gardener/pkg/utils/secrets/certificates_infodata.go deleted file mode 100644 index d11069ee4..000000000 --- a/vendor/github.com/gardener/gardener/pkg/utils/secrets/certificates_infodata.go +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright (c) 2020 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package secrets - -import ( - "encoding/json" - "fmt" - - "github.com/gardener/gardener/pkg/utils/infodata" -) - -// CertificateDataType is the type used to denote an CertificateJSONData structure in the ShootState -const CertificateDataType = infodata.TypeVersion("certificate") - -func init() { - infodata.Register(CertificateDataType, UnmarshalCert) -} - -// CertificateJSONData is the json representation of CertificateInfoData used to store Certificate metadata in the ShootState -type CertificateJSONData struct { - PrivateKey []byte `json:"privateKey"` - Certificate []byte `json:"certificate"` -} - -// UnmarshalCert unmarshals an CertificateJSONData into a CertificateInfoData. -func UnmarshalCert(bytes []byte) (infodata.InfoData, error) { - if bytes == nil { - return nil, fmt.Errorf("no data given") - } - data := &CertificateJSONData{} - err := json.Unmarshal(bytes, data) - if err != nil { - return nil, err - } - - return NewCertificateInfoData(data.PrivateKey, data.Certificate), nil -} - -// CertificateInfoData holds a certificate's private key data and certificate data. -type CertificateInfoData struct { - PrivateKey []byte - Certificate []byte -} - -// TypeVersion implements InfoData -func (c *CertificateInfoData) TypeVersion() infodata.TypeVersion { - return CertificateDataType -} - -// Marshal implements InfoData -func (c *CertificateInfoData) Marshal() ([]byte, error) { - return json.Marshal(&CertificateJSONData{c.PrivateKey, c.Certificate}) -} - -// NewCertificateInfoData creates a new CertificateInfoData struct -func NewCertificateInfoData(privateKey, certificate []byte) *CertificateInfoData { - return &CertificateInfoData{privateKey, certificate} -} diff --git a/vendor/github.com/gardener/gardener/pkg/utils/secrets/control_plane.go b/vendor/github.com/gardener/gardener/pkg/utils/secrets/control_plane.go index b0ef7000f..2bfe7dfc2 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/secrets/control_plane.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/secrets/control_plane.go @@ -17,8 +17,6 @@ package secrets import ( "fmt" - "github.com/gardener/gardener/pkg/utils/infodata" - "k8s.io/apimachinery/pkg/runtime" configlatest "k8s.io/client-go/tools/clientcmd/api/latest" configv1 "k8s.io/client-go/tools/clientcmd/api/v1" @@ -69,86 +67,16 @@ func (s *ControlPlaneSecretConfig) GetName() string { // Generate implements ConfigInterface. func (s *ControlPlaneSecretConfig) Generate() (DataInterface, error) { - return s.GenerateControlPlane() -} - -// GenerateInfoData implements ConfigInterface -func (s *ControlPlaneSecretConfig) GenerateInfoData() (infodata.InfoData, error) { - s.CertificateSecretConfig.Name = s.Name - - cert, err := s.CertificateSecretConfig.GenerateCertificate() - if err != nil { - return nil, err - } - - if len(cert.PrivateKeyPEM) == 0 && len(cert.CertificatePEM) == 0 { - return infodata.EmptyInfoData, nil - } - - return NewCertificateInfoData(cert.PrivateKeyPEM, cert.CertificatePEM), nil -} - -// GenerateFromInfoData implements ConfigInterface -func (s *ControlPlaneSecretConfig) GenerateFromInfoData(infoData infodata.InfoData) (DataInterface, error) { - data, ok := infoData.(*CertificateInfoData) - if !ok { - return nil, fmt.Errorf("could not convert InfoData entry %s to CertificateInfoData", s.Name) - } - - certificate := &Certificate{ - Name: s.Name, - CA: s.CertificateSecretConfig.SigningCA, - - PrivateKeyPEM: data.PrivateKey, - CertificatePEM: data.Certificate, - } - - controlPlane := &ControlPlane{ - Name: s.Name, - - Certificate: certificate, - BasicAuth: s.BasicAuth, - Token: s.Token, - } - - if len(s.KubeConfigRequests) > 0 { - kubeconfig, err := GenerateKubeconfig(s, certificate) - if err != nil { - return nil, err - } - controlPlane.Kubeconfig = kubeconfig - } - - return controlPlane, nil -} - -// LoadFromSecretData implements infodata.Loader -func (s *ControlPlaneSecretConfig) LoadFromSecretData(secretData map[string][]byte) (infodata.InfoData, error) { - privateKeyPEM := secretData[ControlPlaneSecretDataKeyPrivateKey(s.Name)] - certificatePEM := secretData[ControlPlaneSecretDataKeyCertificatePEM(s.Name)] - - if len(privateKeyPEM) == 0 && len(certificatePEM) == 0 { - return infodata.EmptyInfoData, nil - } - - return NewCertificateInfoData(privateKeyPEM, certificatePEM), nil -} - -// GenerateControlPlane computes a secret for a control plane component of the clusters managed by Gardener. -// It may include a Kubeconfig. -func (s *ControlPlaneSecretConfig) GenerateControlPlane() (*ControlPlane, error) { - var ( - certificate *Certificate - err error - ) + var certificate *Certificate if s.CertificateSecretConfig != nil { s.CertificateSecretConfig.Name = s.Name - certificate, err = s.CertificateSecretConfig.GenerateCertificate() + certData, err := s.CertificateSecretConfig.GenerateCertificate() if err != nil { return nil, err } + certificate = certData } controlPlane := &ControlPlane{ @@ -160,7 +88,7 @@ func (s *ControlPlaneSecretConfig) GenerateControlPlane() (*ControlPlane, error) } if len(s.KubeConfigRequests) > 0 { - kubeconfig, err := GenerateKubeconfig(s, certificate) + kubeconfig, err := generateKubeconfig(s, certificate) if err != nil { return nil, err } @@ -201,10 +129,7 @@ func (c *ControlPlane) SecretData() map[string][]byte { return data } -// GenerateKubeconfig generates a Kubernetes Kubeconfig for communicating with the kube-apiserver by using -// a client certificate. If and are non-empty string, a second user object -// containing the Basic Authentication credentials is added to the Kubeconfig. -func GenerateKubeconfig(secret *ControlPlaneSecretConfig, certificate *Certificate) ([]byte, error) { +func generateKubeconfig(secret *ControlPlaneSecretConfig, certificate *Certificate) ([]byte, error) { if len(secret.KubeConfigRequests) == 0 { return nil, fmt.Errorf("missing kubeconfig request for %q", secret.Name) } diff --git a/vendor/github.com/gardener/gardener/pkg/utils/secrets/etcd_encryption_key.go b/vendor/github.com/gardener/gardener/pkg/utils/secrets/etcd_encryption_key.go index 628428cf5..fd17ea01c 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/secrets/etcd_encryption_key.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/secrets/etcd_encryption_key.go @@ -15,10 +15,7 @@ package secrets import ( - "errors" "fmt" - - "github.com/gardener/gardener/pkg/utils/infodata" ) const ( @@ -60,21 +57,6 @@ func (s *ETCDEncryptionKeySecretConfig) Generate() (DataInterface, error) { }, nil } -// GenerateInfoData implements ConfigInterface. -func (s *ETCDEncryptionKeySecretConfig) GenerateInfoData() (infodata.InfoData, error) { - return nil, errors.New("not implemented") -} - -// GenerateFromInfoData implements ConfigInterface. -func (s *ETCDEncryptionKeySecretConfig) GenerateFromInfoData(_ infodata.InfoData) (DataInterface, error) { - return nil, errors.New("not implemented") -} - -// LoadFromSecretData implements infodata.Loader. -func (s *ETCDEncryptionKeySecretConfig) LoadFromSecretData(_ map[string][]byte) (infodata.InfoData, error) { - return nil, errors.New("not implemented") -} - // SecretData computes the data map which can be used in a Kubernetes secret. func (b *ETCDEncryptionKey) SecretData() map[string][]byte { return map[string][]byte{ diff --git a/vendor/github.com/gardener/gardener/pkg/utils/secrets/generate.go b/vendor/github.com/gardener/gardener/pkg/utils/secrets/generate.go deleted file mode 100644 index c5e18f378..000000000 --- a/vendor/github.com/gardener/gardener/pkg/utils/secrets/generate.go +++ /dev/null @@ -1,106 +0,0 @@ -// Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package secrets - -import ( - "context" - "fmt" - "sync" - - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "sigs.k8s.io/controller-runtime/pkg/client" -) - -// GenerateClusterSecrets try to deploy in the k8s cluster each secret in the wantedSecretsList. If the secret already exist it jumps to the next one. -// The function returns a map with all of the successfully deployed wanted secrets plus those already deployed (only from the wantedSecretsList). -func GenerateClusterSecrets(ctx context.Context, c client.Client, existingSecretsMap map[string]*corev1.Secret, wantedSecretsList []ConfigInterface, namespace string) (map[string]*corev1.Secret, error) { - return GenerateClusterSecretsWithFunc(ctx, c, existingSecretsMap, wantedSecretsList, namespace, func(s ConfigInterface) (DataInterface, error) { - return s.Generate() - }) -} - -// GenerateClusterSecretsWithFunc will try to deploy in the k8s cluster each secret in the wantedSecretsList. If the secret already exist it jumps to the next one. -// The function will used the SecretsGeneratorFunc to create the secret DataInterface from the wantedSecret configs. -func GenerateClusterSecretsWithFunc(ctx context.Context, k8sClusterClient client.Client, existingSecretsMap map[string]*corev1.Secret, wantedSecretsList []ConfigInterface, namespace string, SecretsGeneratorFunc func(s ConfigInterface) (DataInterface, error)) (map[string]*corev1.Secret, error) { - type secretOutput struct { - secret *corev1.Secret - err error - } - - var ( - results = make(chan *secretOutput) - deployedClusterSecrets = map[string]*corev1.Secret{} - wg sync.WaitGroup - errorList = []error{} - ) - - for _, s := range wantedSecretsList { - name := s.GetName() - - if existingSecret, ok := existingSecretsMap[name]; ok { - deployedClusterSecrets[name] = existingSecret - continue - } - - wg.Add(1) - go func(s ConfigInterface) { - defer wg.Done() - - obj, err := SecretsGeneratorFunc(s) - if err != nil { - results <- &secretOutput{err: err} - return - } - - secretType := corev1.SecretTypeOpaque - if _, isTLSSecret := obj.(*Certificate); isTLSSecret { - secretType = corev1.SecretTypeTLS - } - - secret := &corev1.Secret{ - ObjectMeta: metav1.ObjectMeta{ - Name: s.GetName(), - Namespace: namespace, - }, - Type: secretType, - Data: obj.SecretData(), - } - err = k8sClusterClient.Create(ctx, secret) - results <- &secretOutput{secret: secret, err: err} - }(s) - } - - go func() { - wg.Wait() - close(results) - }() - - for out := range results { - if out.err != nil { - errorList = append(errorList, out.err) - continue - } - - deployedClusterSecrets[out.secret.Name] = out.secret - } - - // Wait and check whether an error occurred during the parallel processing of the Secret creation. - if len(errorList) > 0 { - return deployedClusterSecrets, fmt.Errorf("errors occurred during shoot secrets generation: %+v", errorList) - } - - return deployedClusterSecrets, nil -} diff --git a/vendor/github.com/gardener/gardener/pkg/utils/secrets/kubeconfig.go b/vendor/github.com/gardener/gardener/pkg/utils/secrets/kubeconfig.go index 912ebe6ac..378ab11d5 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/secrets/kubeconfig.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/secrets/kubeconfig.go @@ -15,9 +15,6 @@ package secrets import ( - "errors" - - "github.com/gardener/gardener/pkg/utils/infodata" kutil "github.com/gardener/gardener/pkg/utils/kubernetes" "k8s.io/apimachinery/pkg/runtime" @@ -64,21 +61,6 @@ func (s *KubeconfigSecretConfig) Generate() (DataInterface, error) { }, nil } -// GenerateInfoData implements ConfigInterface. -func (s *KubeconfigSecretConfig) GenerateInfoData() (infodata.InfoData, error) { - return nil, errors.New("not implemented") -} - -// GenerateFromInfoData implements ConfigInterface. -func (s *KubeconfigSecretConfig) GenerateFromInfoData(_ infodata.InfoData) (DataInterface, error) { - return nil, errors.New("not implemented") -} - -// LoadFromSecretData implements infodata.Loader. -func (s *KubeconfigSecretConfig) LoadFromSecretData(_ map[string][]byte) (infodata.InfoData, error) { - return nil, errors.New("not implemented") -} - // SecretData computes the data map which can be used in a Kubernetes secret. func (v *Kubeconfig) SecretData() map[string][]byte { return map[string][]byte{DataKeyKubeconfig: v.kubeconfigRaw} diff --git a/vendor/github.com/gardener/gardener/pkg/utils/secrets/manager/generate.go b/vendor/github.com/gardener/gardener/pkg/utils/secrets/manager/generate.go index de76cd9bf..018121c13 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/secrets/manager/generate.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/secrets/manager/generate.go @@ -17,6 +17,7 @@ package manager import ( "context" "fmt" + "strconv" "strings" "time" @@ -48,18 +49,12 @@ func (m *manager) Generate(ctx context.Context, config secretutils.ConfigInterfa bundleFor = pointer.String(strings.TrimSuffix(config.GetName(), nameSuffixBundle)) } - var validUntilTime *string - if options.Validity > 0 { - validUntilTime = pointer.String(unixTime(m.clock.Now().Add(options.Validity))) - } - objectMeta, err := ObjectMeta( m.namespace, m.identity, config, options.IgnoreConfigChecksumForCASecretName, m.lastRotationInitiationTimes[config.GetName()], - validUntilTime, options.signingCAChecksum, &options.Persist, bundleFor, @@ -81,12 +76,18 @@ func (m *manager) Generate(ctx context.Context, config secretutils.ConfigInterfa } } + if err := m.maintainLifetimeLabels(config, secret, desiredLabels, options.Validity); err != nil { + return nil, err + } + if !options.isBundleSecret { if err := m.addToStore(config.GetName(), secret, current); err != nil { return nil, err } - if !options.IgnoreOldSecrets && options.RotationStrategy == KeepOld { + if ignore, err := m.shouldIgnoreOldSecrets(desiredLabels[LabelKeyIssuedAtTime], options); err != nil { + return nil, err + } else if !ignore { if err := m.storeOldSecrets(ctx, config.GetName(), secret.Name); err != nil { return nil, err } @@ -97,10 +98,6 @@ func (m *manager) Generate(ctx context.Context, config secretutils.ConfigInterfa } } - if err := m.maintainLifetimeLabels(config, secret, desiredLabels); err != nil { - return nil, err - } - if err := m.reconcileSecret(ctx, secret, desiredLabels); err != nil { return nil, err } @@ -109,6 +106,11 @@ func (m *manager) Generate(ctx context.Context, config secretutils.ConfigInterfa } func (m *manager) generateAndCreate(ctx context.Context, config secretutils.ConfigInterface, objectMeta metav1.ObjectMeta) (*corev1.Secret, error) { + // Use secret name as common name to make sure the x509 subject names in the CA certificates are always unique. + if certConfig := certificateSecretConfig(config); certConfig != nil && certConfig.CertType == secretutils.CACert { + certConfig.CommonName = objectMeta.Name + } + data, err := config.Generate() if err != nil { return nil, err @@ -141,18 +143,6 @@ func (m *manager) keepExistingSecretsIfNeeded(ctx context.Context, configName st existingSecret := &corev1.Secret{} switch configName { - case "ca-client": - // TODO(rfranzke): Drop this code before promoting the ShootCARotation feature gate to beta. Otherwise, the - // cluster CA will still be used as client CA during the first shoot CA certificate rotation since the `ca` - // secret will still exist. This code is only very temporary to ensure all shoots get a `ca-client` secret. - if err := m.client.Get(ctx, kutil.Key(m.namespace, "ca"), existingSecret); err != nil { - if !apierrors.IsNotFound(err) { - return nil, err - } - return newData, nil - } - return existingSecret.Data, nil - case "kube-apiserver-basic-auth", "observability-ingress", "observability-ingress-users": oldSecretName := configName if configName == "observability-ingress" { @@ -326,6 +316,33 @@ func (m *manager) keepExistingSecretsIfNeeded(ctx context.Context, configName st return newData, nil } +func (m *manager) shouldIgnoreOldSecrets(issuedAt string, options *GenerateOptions) (bool, error) { + // unconditionally ignore old secrets + if options.RotationStrategy != KeepOld || options.IgnoreOldSecrets { + return true, nil + } + + // ignore old secrets if current secret is older than IgnoreOldSecretsAfter + if options.IgnoreOldSecretsAfter != nil { + if issuedAt == "" { + // should never happen + return false, nil + } + + issuedAtUnix, err := strconv.ParseInt(issuedAt, 10, 64) + if err != nil { + return false, err + } + + age := m.clock.Now().UTC().Sub(time.Unix(issuedAtUnix, 0).UTC()) + if age >= *options.IgnoreOldSecretsAfter { + return true, nil + } + } + + return false, nil +} + func (m *manager) storeOldSecrets(ctx context.Context, name, currentSecretName string) error { secretList := &corev1.SecretList{} if err := m.client.List(ctx, secretList, client.InNamespace(m.namespace), client.MatchingLabels{ @@ -376,6 +393,19 @@ func (m *manager) generateBundleSecret(ctx context.Context, config secretutils.C CertificatePEMs: certs, } } + + case *secretutils.RSASecretConfig: + if !c.UsedForSSH { + keys := [][]byte{secrets.current.obj.Data[secretutils.DataKeyRSAPrivateKey]} + if secrets.old != nil { + keys = append(keys, secrets.old.obj.Data[secretutils.DataKeyRSAPrivateKey]) + } + + bundleConfig = &secretutils.RSAPrivateKeyBundleSecretConfig{ + Name: config.GetName() + nameSuffixBundle, + PrivateKeyPEMs: keys, + } + } } if bundleConfig == nil { @@ -390,13 +420,42 @@ func (m *manager) generateBundleSecret(ctx context.Context, config secretutils.C return m.addToStore(config.GetName(), secret, bundle) } -func (m *manager) maintainLifetimeLabels(config secretutils.ConfigInterface, secret *corev1.Secret, desiredLabels map[string]string) error { +func (m *manager) maintainLifetimeLabels( + config secretutils.ConfigInterface, + secret *corev1.Secret, + desiredLabels map[string]string, + validity time.Duration, +) error { issuedAt := secret.Labels[LabelKeyIssuedAtTime] if issuedAt == "" { issuedAt = unixTime(m.clock.Now()) } desiredLabels[LabelKeyIssuedAtTime] = issuedAt + if validity > 0 { + desiredLabels[LabelKeyValidUntilTime] = unixTime(m.clock.Now().Add(validity)) + + // Handle changed validity values in case there already is a valid-until-time label from previous Generate + // invocations. + if secret.Labels[LabelKeyValidUntilTime] != "" { + issuedAtTime, err := strconv.ParseInt(issuedAt, 10, 64) + if err != nil { + return err + } + + existingValidUntilTime, err := strconv.ParseInt(secret.Labels[LabelKeyValidUntilTime], 10, 64) + if err != nil { + return err + } + + if oldValidity := time.Duration(existingValidUntilTime - issuedAtTime); oldValidity != validity { + desiredLabels[LabelKeyValidUntilTime] = unixTime(time.Unix(issuedAtTime, 0).UTC().Add(validity)) + // If this has yielded a valid-until-time which is in the past then the next instantiation of the + // secrets manager will regenerate the secret since it has expired. + } + } + } + var dataKeyCertificate string switch cfg := config.(type) { case *secretutils.CertificateSecretConfig: @@ -433,6 +492,7 @@ func (m *manager) reconcileSecret(ctx context.Context, secret *corev1.Secret, la mustPatch = true } + // Check if desired labels must be added or changed. for k, desired := range labels { if current, ok := secret.Labels[k]; !ok || current != desired { metav1.SetMetaDataLabel(&secret.ObjectMeta, k, desired) @@ -440,6 +500,14 @@ func (m *manager) reconcileSecret(ctx context.Context, secret *corev1.Secret, la } } + // Check if existing labels must be removed + for k := range secret.Labels { + if _, ok := labels[k]; !ok { + delete(secret.Labels, k) + mustPatch = true + } + } + if !mustPatch { return nil } @@ -456,8 +524,10 @@ type GenerateOptions struct { Persist bool // RotationStrategy specifies how the secret should be rotated in case it needs to get rotated. RotationStrategy rotationStrategy - // IgnoreOldSecrets specifies whether old secrets should be loaded to the internal store. + // IgnoreOldSecrets specifies whether old secrets should be dropped. IgnoreOldSecrets bool + // IgnoreOldSecretsAfter specifies that old secrets should be dropped once a given duration after rotation has passed. + IgnoreOldSecretsAfter *time.Duration // Validity specifies for how long the secret should be valid. Validity time.Duration // IgnoreConfigChecksumForCASecretName specifies whether the secret config checksum should be ignored when @@ -495,10 +565,10 @@ type SignedByCAOption interface { // SignedByCAOptions are options for SignedByCA calls. type SignedByCAOptions struct { - // UseCurrentCA specifies whether the certificate should always be signed by the current CA. This option does only - // take effect for server certificates since they are signed by the old CA by default (if it exists). Client - // certificates are always signed by the current CA. - UseCurrentCA bool + // CAClass specifies which CA should be used to sign the requested certificate. Server certificates are signed with + // the old CA by default, however one might want to use the current CA instead. Similarly, client certificates are + // signed with the current CA by default, however one might want to use the old CA instead. + CAClass *secretClass } // ApplyOptions applies the given update options on these options, and then returns itself (for convenient chaining). @@ -509,13 +579,19 @@ func (o *SignedByCAOptions) ApplyOptions(opts []SignedByCAOption) *SignedByCAOpt return o } -// UseCurrentCA sets the UseCurrentCA field to 'true' in the SignedByCAOptions. -var UseCurrentCA = useCurrentCAOption{} +var ( + // UseCurrentCA sets the CAClass field to 'current' in the SignedByCAOptions. + UseCurrentCA = useCAClassOption{current} + // UseOldCA sets the CAClass field to 'old' in the SignedByCAOptions. + UseOldCA = useCAClassOption{old} +) -type useCurrentCAOption struct{} +type useCAClassOption struct { + class secretClass +} -func (useCurrentCAOption) ApplyToOptions(options *SignedByCAOptions) { - options.UseCurrentCA = true +func (o useCAClassOption) ApplyToOptions(options *SignedByCAOptions) { + options.CAClass = &o.class } // SignedByCA returns a function which sets the 'SigningCA' field in case the ConfigInterface provided to the @@ -531,13 +607,8 @@ func SignedByCA(name string, opts ...SignedByCAOption) GenerateOption { return nil } - var certificateConfig *secretutils.CertificateSecretConfig - switch cfg := config.(type) { - case *secretutils.CertificateSecretConfig: - certificateConfig = cfg - case *secretutils.ControlPlaneSecretConfig: - certificateConfig = cfg.CertificateSecretConfig - default: + certificateConfig := certificateSecretConfig(config) + if certificateConfig == nil { return fmt.Errorf("could not apply option to %T, expected *secrets.CertificateSecretConfig", config) } @@ -546,11 +617,20 @@ func SignedByCA(name string, opts ...SignedByCAOption) GenerateOption { return fmt.Errorf("secrets for name %q not found in internal store", name) } - // Client certificates are always renewed immediately (hence, signed with the current CA), while server - // certificates are signed with the old CA until they don't exist anymore in the internal store. secret := secrets.current - if certificateConfig.CertType == secretutils.ServerCert && !signedByCAOptions.UseCurrentCA && secrets.old != nil { - secret = *secrets.old + switch certificateConfig.CertType { + case secretutils.ClientCert: + // Client certificates are signed with the current CA by default unless the CAClass option was overwritten. + if signedByCAOptions.CAClass != nil && *signedByCAOptions.CAClass == old && secrets.old != nil { + secret = *secrets.old + } + + case secretutils.ServerCert, secretutils.ServerClientCert: + // Server certificates are signed with the old CA by default (if it exists) unless the CAClass option was + // overwritten. + if secrets.old != nil && (signedByCAOptions.CAClass == nil || *signedByCAOptions.CAClass != current) { + secret = *secrets.old + } } ca, err := secretutils.LoadCertificate(name, secret.obj.Data[secretutils.DataKeyPrivateKeyCA], secret.obj.Data[secretutils.DataKeyCertificateCA]) @@ -588,6 +668,14 @@ func IgnoreOldSecrets() GenerateOption { } } +// IgnoreOldSecretsAfter returns a function which sets the 'IgnoreOldSecretsAfter' field to the given duration. +func IgnoreOldSecretsAfter(d time.Duration) GenerateOption { + return func(_ Interface, _ secretutils.ConfigInterface, options *GenerateOptions) error { + options.IgnoreOldSecretsAfter = &d + return nil + } +} + // Validity returns a function which sets the 'Validity' field to the provided value. Note that the value is ignored in // case Generate is called with a certificate secret configuration. func Validity(v time.Duration) GenerateOption { diff --git a/vendor/github.com/gardener/gardener/pkg/utils/secrets/manager/manager.go b/vendor/github.com/gardener/gardener/pkg/utils/secrets/manager/manager.go index 6ec23ae59..63a61976c 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/secrets/manager/manager.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/secrets/manager/manager.go @@ -27,7 +27,7 @@ import ( "github.com/mitchellh/hashstructure/v2" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/util/clock" + "k8s.io/utils/clock" "k8s.io/utils/pointer" "sigs.k8s.io/controller-runtime/pkg/client" ) @@ -95,6 +95,15 @@ type ( dataChecksum string lastRotationInitiationTime int64 } + + // Config specifies certain configuration options for the manager. + Config struct { + // CASecretAutoRotation states whether CA secrets are considered for automatic rotation (defaults to false). + CASecretAutoRotation bool + // SecretNamesToTimes is a map whose keys are secret names and whose values are the last rotation initiation + // times. + SecretNamesToTimes map[string]time.Time + } ) var _ Interface = &manager{} @@ -115,7 +124,7 @@ func New( c client.Client, namespace string, identity string, - secretNamesToTimes map[string]time.Time, + rotation Config, ) ( Interface, error, @@ -127,10 +136,10 @@ func New( client: c, namespace: namespace, identity: identity, - lastRotationInitiationTimes: make(map[string]string), + lastRotationInitiationTimes: make(nameToUnixTime), } - if err := m.initialize(ctx, secretNamesToTimes); err != nil { + if err := m.initialize(ctx, rotation); err != nil { return nil, err } @@ -145,7 +154,7 @@ func (m *manager) listSecrets(ctx context.Context) (*corev1.SecretList, error) { }) } -func (m *manager) initialize(ctx context.Context, secretNamesToTimes map[string]time.Time) error { +func (m *manager) initialize(ctx context.Context, rotation Config) error { secretList, err := m.listSecrets(ctx) if err != nil { return err @@ -165,6 +174,10 @@ func (m *manager) initialize(ctx context.Context, secretNamesToTimes map[string] // Check if the secrets must be automatically renewed because they are about to expire. for name, secret := range nameToNewestSecret { + if isCASecret(secret.Data) && !rotation.CASecretAutoRotation { + continue + } + mustRenew, err := m.mustAutoRenewSecret(secret) if err != nil { return err @@ -177,7 +190,7 @@ func (m *manager) initialize(ctx context.Context, secretNamesToTimes map[string] } // If the user has provided last rotation initiation times then use those. - for name, time := range secretNamesToTimes { + for name, time := range rotation.SecretNamesToTimes { m.lastRotationInitiationTimes[name] = unixTime(time) } @@ -271,7 +284,6 @@ func ObjectMeta( config secretutils.ConfigInterface, ignoreConfigChecksumForCASecretName bool, lastRotationInitiationTime string, - validUntilTime *string, signingCAChecksum *string, persist *bool, bundleFor *string, @@ -296,10 +308,6 @@ func ObjectMeta( labels[LabelKeyChecksumSigningCA] = *signingCAChecksum } - if validUntilTime != nil { - labels[LabelKeyValidUntilTime] = *validUntilTime - } - if persist != nil && *persist { labels[LabelKeyPersist] = LabelValueTrue } @@ -355,3 +363,20 @@ func secretTypeForData(data map[string][]byte) corev1.SecretType { func unixTime(in time.Time) string { return strconv.FormatInt(in.UTC().Unix(), 10) } + +func isCASecret(data map[string][]byte) bool { + return data[secretutils.DataKeyCertificateCA] != nil && data[secretutils.DataKeyPrivateKeyCA] != nil +} + +func certificateSecretConfig(config secretutils.ConfigInterface) *secretutils.CertificateSecretConfig { + var certificateConfig *secretutils.CertificateSecretConfig + + switch cfg := config.(type) { + case *secretutils.CertificateSecretConfig: + certificateConfig = cfg + case *secretutils.ControlPlaneSecretConfig: + certificateConfig = cfg.CertificateSecretConfig + } + + return certificateConfig +} diff --git a/vendor/github.com/gardener/gardener/pkg/utils/secrets/private_key_infodata.go b/vendor/github.com/gardener/gardener/pkg/utils/secrets/private_key_infodata.go deleted file mode 100644 index 1875edd27..000000000 --- a/vendor/github.com/gardener/gardener/pkg/utils/secrets/private_key_infodata.go +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright (c) 2020 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package secrets - -import ( - "encoding/json" - "fmt" - - "github.com/gardener/gardener/pkg/utils/infodata" -) - -// PrivateKeyDataType is the type used to denote an PrivateKeyJSONData structure in the ShootState -const PrivateKeyDataType = infodata.TypeVersion("privateKey") - -func init() { - infodata.Register(PrivateKeyDataType, UnmarshalPrivateKey) -} - -// PrivateKeyJSONData is the json representation of PrivateKeyInfoData used to store private key in the ShootState -type PrivateKeyJSONData struct { - PrivateKey []byte `json:"privateKey"` -} - -// UnmarshalPrivateKey unmarshals an PrivateKeyJSONData into an PrivateKeyInfoData. -func UnmarshalPrivateKey(bytes []byte) (infodata.InfoData, error) { - if bytes == nil { - return nil, fmt.Errorf("no data given") - } - data := &PrivateKeyJSONData{} - err := json.Unmarshal(bytes, data) - if err != nil { - return nil, err - } - - return NewPrivateKeyInfoData(data.PrivateKey), nil -} - -// PrivateKeyInfoData holds the data of a private key. -type PrivateKeyInfoData struct { - PrivateKey []byte -} - -// TypeVersion implements InfoData -func (r *PrivateKeyInfoData) TypeVersion() infodata.TypeVersion { - return PrivateKeyDataType -} - -// Marshal implements InfoData -func (r *PrivateKeyInfoData) Marshal() ([]byte, error) { - return json.Marshal(&PrivateKeyJSONData{r.PrivateKey}) -} - -// NewPrivateKeyInfoData creates a new PrivateKeyInfoData struct -func NewPrivateKeyInfoData(privateKey []byte) *PrivateKeyInfoData { - return &PrivateKeyInfoData{privateKey} -} diff --git a/vendor/github.com/gardener/gardener/pkg/utils/secrets/rsa_private_key.go b/vendor/github.com/gardener/gardener/pkg/utils/secrets/rsa_private_key.go index 87a76314c..b9fb95e90 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/secrets/rsa_private_key.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/secrets/rsa_private_key.go @@ -18,10 +18,9 @@ import ( "bytes" "crypto/rand" "crypto/rsa" - "fmt" "github.com/gardener/gardener/pkg/utils" - "github.com/gardener/gardener/pkg/utils/infodata" + "golang.org/x/crypto/ssh" ) @@ -57,51 +56,11 @@ func (s *RSASecretConfig) GetName() string { // Generate implements ConfigInterface. func (s *RSASecretConfig) Generate() (DataInterface, error) { - return s.GenerateRSAKeys() -} - -// GenerateInfoData implements ConfigInterface. -func (s *RSASecretConfig) GenerateInfoData() (infodata.InfoData, error) { privateKey, err := GenerateKey(rand.Reader, s.Bits) if err != nil { return nil, err } - return NewPrivateKeyInfoData(utils.EncodePrivateKey(privateKey)), nil -} - -// GenerateFromInfoData implements ConfigInterface -func (s *RSASecretConfig) GenerateFromInfoData(infoData infodata.InfoData) (DataInterface, error) { - data, ok := infoData.(*PrivateKeyInfoData) - if !ok { - return nil, fmt.Errorf("could not convert InfoData entry %s to RSAPrivateKeyInfoData", s.Name) - } - - privateKey, err := utils.DecodePrivateKey(data.PrivateKey) - if err != nil { - return nil, fmt.Errorf("could not load privateKey secret %s: %w", s.Name, err) - } - - return s.generateWithPrivateKey(privateKey) -} - -// LoadFromSecretData implements infodata.Loader -func (s *RSASecretConfig) LoadFromSecretData(secretData map[string][]byte) (infodata.InfoData, error) { - privateKey := secretData[DataKeyRSAPrivateKey] - return NewPrivateKeyInfoData(privateKey), nil -} - -// GenerateRSAKeys computes a RSA private key based on the configured number of bits. -func (s *RSASecretConfig) GenerateRSAKeys() (*RSAKeys, error) { - privateKey, err := GenerateKey(rand.Reader, s.Bits) - if err != nil { - return nil, err - } - - return s.generateWithPrivateKey(privateKey) -} - -func (s *RSASecretConfig) generateWithPrivateKey(privateKey *rsa.PrivateKey) (*RSAKeys, error) { rsa := &RSAKeys{ Name: s.Name, diff --git a/vendor/github.com/gardener/gardener/pkg/utils/secrets/static_token.go b/vendor/github.com/gardener/gardener/pkg/utils/secrets/static_token.go index 03f035f12..ab1fa4a77 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/secrets/static_token.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/secrets/static_token.go @@ -16,10 +16,7 @@ package secrets import ( "fmt" - "sort" "strings" - - "github.com/gardener/gardener/pkg/utils/infodata" ) const ( @@ -65,70 +62,6 @@ func (s *StaticTokenSecretConfig) GetName() string { // Generate implements ConfigInterface. func (s *StaticTokenSecretConfig) Generate() (DataInterface, error) { - return s.GenerateStaticToken() -} - -// GenerateInfoData implements ConfigInterface. -func (s *StaticTokenSecretConfig) GenerateInfoData() (infodata.InfoData, error) { - tokens := make(map[string]string) - - for username := range s.Tokens { - token, err := GenerateRandomString(128) - if err != nil { - return nil, err - } - tokens[username] = token - } - - return NewStaticTokenInfoData(tokens), nil -} - -// GenerateFromInfoData implements ConfigInterface. -func (s *StaticTokenSecretConfig) GenerateFromInfoData(infoData infodata.InfoData) (DataInterface, error) { - data, ok := infoData.(*StaticTokenInfoData) - if !ok { - return nil, fmt.Errorf("could not convert InfoData entry %s to StaticTokenInfoData", s.Name) - } - - var usernames []string - for username := range data.Tokens { - usernames = append(usernames, username) - } - sort.Strings(usernames) - - tokens := make([]Token, 0, len(s.Tokens)) - for _, username := range usernames { - tokens = append(tokens, Token{ - Username: s.Tokens[username].Username, - UserID: s.Tokens[username].UserID, - Groups: s.Tokens[username].Groups, - Token: data.Tokens[username], - }) - } - - return &StaticToken{ - Name: s.Name, - Tokens: tokens, - }, nil -} - -// LoadFromSecretData implements infodata.Loader. -func (s *StaticTokenSecretConfig) LoadFromSecretData(secretData map[string][]byte) (infodata.InfoData, error) { - staticToken, err := LoadStaticTokenFromCSV(s.Name, secretData[DataKeyStaticTokenCSV]) - if err != nil { - return nil, err - } - - tokens := make(map[string]string) - for _, token := range staticToken.Tokens { - tokens[token.Username] = token.Token - } - - return NewStaticTokenInfoData(tokens), nil -} - -// GenerateStaticToken computes a random token of length 128. -func (s *StaticTokenSecretConfig) GenerateStaticToken() (*StaticToken, error) { tokens := make([]Token, 0, len(s.Tokens)) for _, tokenConfig := range s.Tokens { diff --git a/vendor/github.com/gardener/gardener/pkg/utils/secrets/static_token_infodata.go b/vendor/github.com/gardener/gardener/pkg/utils/secrets/static_token_infodata.go deleted file mode 100644 index e598ff4aa..000000000 --- a/vendor/github.com/gardener/gardener/pkg/utils/secrets/static_token_infodata.go +++ /dev/null @@ -1,82 +0,0 @@ -// Copyright (c) 2020 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package secrets - -import ( - "encoding/json" - "fmt" - - "github.com/gardener/gardener/pkg/utils/infodata" -) - -// StaticTokenDataType is the type used to denote an StaticTokenJSONData structure in the ShootState -const StaticTokenDataType = infodata.TypeVersion("staticToken") - -func init() { - infodata.Register(StaticTokenDataType, UnmarshalStaticToken) -} - -// StaticTokenJSONData is the json representation of a StaticTokenInfoData -type StaticTokenJSONData struct { - Tokens map[string]string `json:"tokens"` -} - -// UnmarshalStaticToken unmarshals an StaticTokenJSONData into a StaticTokenInfoData. -func UnmarshalStaticToken(bytes []byte) (infodata.InfoData, error) { - if bytes == nil { - return nil, fmt.Errorf("no data given") - } - - data := &StaticTokenJSONData{} - if err := json.Unmarshal(bytes, data); err != nil { - return nil, err - } - - return NewStaticTokenInfoData(data.Tokens), nil -} - -// StaticTokenInfoData holds an array of TokenInfoData. -type StaticTokenInfoData struct { - Tokens map[string]string -} - -// TypeVersion implements InfoData. -func (s *StaticTokenInfoData) TypeVersion() infodata.TypeVersion { - return StaticTokenDataType -} - -// Marshal implements InfoData -func (s *StaticTokenInfoData) Marshal() ([]byte, error) { - return json.Marshal(&StaticTokenJSONData{s.Tokens}) -} - -// Append appends the tokens from the provided StaticTokenInfoData to this StaticTokenInfoData. -func (s *StaticTokenInfoData) Append(staticTokenInfoData *StaticTokenInfoData) { - for username, token := range staticTokenInfoData.Tokens { - s.Tokens[username] = token - } -} - -// RemoveTokens removes tokens with the provided usernames from this StaticTokenInfoData. -func (s *StaticTokenInfoData) RemoveTokens(usernames ...string) { - for _, username := range usernames { - delete(s.Tokens, username) - } -} - -// NewStaticTokenInfoData creates a new StaticTokenInfoData with the provided tokens. -func NewStaticTokenInfoData(tokens map[string]string) *StaticTokenInfoData { - return &StaticTokenInfoData{tokens} -} diff --git a/vendor/github.com/gardener/gardener/pkg/utils/secrets/types.go b/vendor/github.com/gardener/gardener/pkg/utils/secrets/types.go index c73cc86f1..c481bdb4f 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/secrets/types.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/secrets/types.go @@ -14,20 +14,12 @@ package secrets -import ( - "github.com/gardener/gardener/pkg/utils/infodata" -) - // ConfigInterface define functions needed for generating a specific secret. type ConfigInterface interface { // GetName returns the name of the configuration. GetName() string // Generate generates a secret interface Generate() (DataInterface, error) - // GenerateInfoData generates only the InfoData (metadata) which can later be used to generate a secret. - GenerateInfoData() (infodata.InfoData, error) - // GenerateFromInfoData combines the configuration and the provided InfoData (metadata) and generates a secret. - GenerateFromInfoData(infoData infodata.InfoData) (DataInterface, error) } // DataInterface defines functions needed for defining the data map of a Kubernetes secret. diff --git a/vendor/github.com/gardener/gardener/pkg/utils/secrets/vpn_tlsauth.go b/vendor/github.com/gardener/gardener/pkg/utils/secrets/vpn_tlsauth.go index 69629a780..eabe37a1b 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/secrets/vpn_tlsauth.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/secrets/vpn_tlsauth.go @@ -16,10 +16,7 @@ package secrets import ( "bytes" - "fmt" "os/exec" - - "github.com/gardener/gardener/pkg/utils/infodata" ) // DataKeyVPNTLSAuth is the key in a secret data holding the vpn tlsauth key. @@ -56,35 +53,6 @@ func (s *VPNTLSAuthConfig) Generate() (DataInterface, error) { }, nil } -// GenerateInfoData implements ConfigInterface. -func (s *VPNTLSAuthConfig) GenerateInfoData() (infodata.InfoData, error) { - key, err := s.generateKey() - if err != nil { - return nil, err - } - - return NewPrivateKeyInfoData(key), nil -} - -// GenerateFromInfoData implements ConfigInteface -func (s *VPNTLSAuthConfig) GenerateFromInfoData(infoData infodata.InfoData) (DataInterface, error) { - data, ok := infoData.(*PrivateKeyInfoData) - if !ok { - return nil, fmt.Errorf("could not convert InfoData entry %s to PrivateKeyInfoData", s.Name) - } - - return &VPNTLSAuth{ - Name: s.Name, - TLSAuthKey: data.PrivateKey, - }, nil -} - -// LoadFromSecretData implements infodata.Loader -func (s *VPNTLSAuthConfig) LoadFromSecretData(secretData map[string][]byte) (infodata.InfoData, error) { - tlsAuthKey := secretData[DataKeyVPNTLSAuth] - return NewPrivateKeyInfoData(tlsAuthKey), nil -} - func (s *VPNTLSAuthConfig) generateKey() (key []byte, err error) { if s.VPNTLSAuthKeyGenerator != nil { key, err = s.VPNTLSAuthKeyGenerator() diff --git a/vendor/github.com/gardener/gardener/pkg/utils/version/version.go b/vendor/github.com/gardener/gardener/pkg/utils/version/version.go index 31dfeb6c0..5e4da858d 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/version/version.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/version/version.go @@ -55,6 +55,8 @@ var ( ConstraintK8sEqual123 *semver.Constraints // ConstraintK8sGreaterEqual123 is a version constraint for versions >= 1.23. ConstraintK8sGreaterEqual123 *semver.Constraints + // ConstraintK8sLess124 is a version constraint for versions < 1.24. + ConstraintK8sLess124 *semver.Constraints ) func init() { @@ -92,6 +94,8 @@ func init() { utilruntime.Must(err) ConstraintK8sGreaterEqual123, err = semver.NewConstraint(">= 1.23") utilruntime.Must(err) + ConstraintK8sLess124, err = semver.NewConstraint("< 1.24") + utilruntime.Must(err) } // CompareVersions returns true if the constraint compared by to diff --git a/vendor/github.com/gardener/gardener/test/framework/gardener_utils.go b/vendor/github.com/gardener/gardener/test/framework/gardener_utils.go index 6ebaa9c40..c16aa26d7 100644 --- a/vendor/github.com/gardener/gardener/test/framework/gardener_utils.go +++ b/vendor/github.com/gardener/gardener/test/framework/gardener_utils.go @@ -60,10 +60,8 @@ func (f *GardenerFramework) GetSeed(ctx context.Context, seedName string) (*gard return seed, nil, nil } - seedClient, err := kubernetes.NewClientFromSecret(ctx, f.GardenClient.Client(), seedSecretRef.Namespace, seedSecretRef.Name, kubernetes.WithClientOptions( - client.Options{ - Scheme: kubernetes.SeedScheme, - }), + seedClient, err := kubernetes.NewClientFromSecret(ctx, f.GardenClient.Client(), seedSecretRef.Namespace, seedSecretRef.Name, + kubernetes.WithClientOptions(client.Options{Scheme: kubernetes.SeedScheme}), kubernetes.WithDisabledCachedClient(), ) if err != nil { @@ -141,11 +139,13 @@ func (f *GardenerFramework) CreateShoot(ctx context.Context, shoot *gardencorev1 func (f *GardenerFramework) DeleteShootAndWaitForDeletion(ctx context.Context, shoot *gardencorev1beta1.Shoot) (rErr error) { defer func() { if rErr != nil { - shootFramework, err := f.NewShootFramework(ctx, shoot) - if err != nil { + dumpCtx, cancel := context.WithTimeout(context.Background(), 2*time.Minute) + defer cancel() + + if shootFramework, err := f.NewShootFramework(dumpCtx, shoot); err != nil { f.Logger.Errorf("Cannot dump shoot state %s: %v", shoot.GetName(), err) } else { - shootFramework.DumpState(ctx) + shootFramework.DumpState(dumpCtx) } } }() diff --git a/vendor/github.com/gardener/gardener/test/framework/gardenerframework.go b/vendor/github.com/gardener/gardener/test/framework/gardenerframework.go index adcf58780..0b8aceb94 100644 --- a/vendor/github.com/gardener/gardener/test/framework/gardenerframework.go +++ b/vendor/github.com/gardener/gardener/test/framework/gardenerframework.go @@ -88,10 +88,8 @@ func NewGardenerFrameworkFromConfig(cfg *GardenerConfig) *GardenerFramework { func (f *GardenerFramework) BeforeEach() { f.GardenerFrameworkConfig = mergeGardenerConfig(f.GardenerFrameworkConfig, gardenerCfg) validateGardenerConfig(f.GardenerFrameworkConfig) - gardenClient, err := kubernetes.NewClientFromFile("", f.GardenerFrameworkConfig.GardenerKubeconfig, kubernetes.WithClientOptions( - client.Options{ - Scheme: kubernetes.GardenScheme, - }), + gardenClient, err := kubernetes.NewClientFromFile("", f.GardenerFrameworkConfig.GardenerKubeconfig, + kubernetes.WithClientOptions(client.Options{Scheme: kubernetes.GardenScheme}), kubernetes.WithAllowedUserFields([]string{kubernetes.AuthTokenFile}), kubernetes.WithDisabledCachedClient(), ) diff --git a/vendor/github.com/gardener/gardener/test/framework/k8s_utils.go b/vendor/github.com/gardener/gardener/test/framework/k8s_utils.go index 0bf721bb1..06cd08e31 100644 --- a/vendor/github.com/gardener/gardener/test/framework/k8s_utils.go +++ b/vendor/github.com/gardener/gardener/test/framework/k8s_utils.go @@ -386,17 +386,14 @@ func NewClientFromServiceAccount(ctx context.Context, k8sClient kubernetes.Inter Host: k8sClient.RESTConfig().Host, TLSClientConfig: rest.TLSClientConfig{ Insecure: false, - CAData: secret.Data["ca.crt"], + CAData: k8sClient.RESTConfig().CAData, }, BearerToken: string(secret.Data["token"]), } return kubernetes.NewWithConfig( kubernetes.WithRESTConfig(serviceAccountConfig), - kubernetes.WithClientOptions( - client.Options{ - Scheme: kubernetes.GardenScheme, - }), + kubernetes.WithClientOptions(client.Options{Scheme: kubernetes.GardenScheme}), kubernetes.WithDisabledCachedClient(), ) } diff --git a/vendor/github.com/gardener/gardener/test/framework/shootcreationframework.go b/vendor/github.com/gardener/gardener/test/framework/shootcreationframework.go index 9942e80e8..01d1fc4bd 100644 --- a/vendor/github.com/gardener/gardener/test/framework/shootcreationframework.go +++ b/vendor/github.com/gardener/gardener/test/framework/shootcreationframework.go @@ -376,11 +376,13 @@ func (f *ShootCreationFramework) CreateShootAndWaitForCreation(ctx context.Conte if err := f.GardenerFramework.CreateShoot(ctx, f.Shoot); err != nil { f.Logger.Errorf("Cannot create shoot %s: %s", f.Shoot.GetName(), err.Error()) - shootFramework, err2 := f.NewShootFramework(ctx, f.Shoot) - if err2 != nil { + + dumpCtx, cancel := context.WithTimeout(context.Background(), 2*time.Minute) + defer cancel() + if shootFramework, err := f.NewShootFramework(dumpCtx, f.Shoot); err != nil { f.Logger.Errorf("Cannot dump shoot state %s: %s", f.Shoot.GetName(), err.Error()) } else { - shootFramework.DumpState(ctx) + shootFramework.DumpState(dumpCtx) } return err } diff --git a/vendor/github.com/gardener/gardener/test/framework/shootframework.go b/vendor/github.com/gardener/gardener/test/framework/shootframework.go index 23b620884..969f45280 100644 --- a/vendor/github.com/gardener/gardener/test/framework/shootframework.go +++ b/vendor/github.com/gardener/gardener/test/framework/shootframework.go @@ -210,10 +210,8 @@ func (f *ShootFramework) AddShoot(ctx context.Context, shootName, shootNamespace if !f.GardenerFrameworkConfig.SkipAccessingShoot { if err := retry.UntilTimeout(ctx, k8sClientInitPollInterval, k8sClientInitTimeout, func(ctx context.Context) (bool, error) { - shootClient, err = kubernetes.NewClientFromSecret(ctx, f.GardenClient.Client(), shoot.Namespace, shoot.Name+"."+gutil.ShootProjectSecretSuffixKubeconfig, kubernetes.WithClientOptions( - client.Options{ - Scheme: kubernetes.ShootScheme, - }), + shootClient, err = kubernetes.NewClientFromSecret(ctx, f.GardenClient.Client(), shoot.Namespace, shoot.Name+"."+gutil.ShootProjectSecretSuffixKubeconfig, + kubernetes.WithClientOptions(client.Options{Scheme: kubernetes.ShootScheme}), kubernetes.WithDisabledCachedClient(), ) if err != nil { diff --git a/vendor/github.com/go-logr/logr/README.md b/vendor/github.com/go-logr/logr/README.md index ad825f5f0..ab5931181 100644 --- a/vendor/github.com/go-logr/logr/README.md +++ b/vendor/github.com/go-logr/logr/README.md @@ -105,14 +105,18 @@ with higher verbosity means more (and less important) logs will be generated. There are implementations for the following logging libraries: - **a function** (can bridge to non-structured libraries): [funcr](https://github.com/go-logr/logr/tree/master/funcr) +- **a testing.T** (for use in Go tests, with JSON-like output): [testr](https://github.com/go-logr/logr/tree/master/testr) - **github.com/google/glog**: [glogr](https://github.com/go-logr/glogr) - **k8s.io/klog** (for Kubernetes): [klogr](https://git.k8s.io/klog/klogr) +- **a testing.T** (with klog-like text output): [ktesting](https://git.k8s.io/klog/ktesting) - **go.uber.org/zap**: [zapr](https://github.com/go-logr/zapr) - **log** (the Go standard library logger): [stdr](https://github.com/go-logr/stdr) - **github.com/sirupsen/logrus**: [logrusr](https://github.com/bombsimon/logrusr) - **github.com/wojas/genericr**: [genericr](https://github.com/wojas/genericr) (makes it easy to implement your own backend) - **logfmt** (Heroku style [logging](https://www.brandur.org/logfmt)): [logfmtr](https://github.com/iand/logfmtr) - **github.com/rs/zerolog**: [zerologr](https://github.com/go-logr/zerologr) +- **github.com/go-kit/log**: [gokitlogr](https://github.com/tonglil/gokitlogr) (also compatible with github.com/go-kit/kit/log since v0.12.0) +- **bytes.Buffer** (writing to a buffer): [bufrlogr](https://github.com/tonglil/buflogr) (useful for ensuring values were logged, like during testing) ## FAQ diff --git a/vendor/github.com/go-logr/logr/go.mod b/vendor/github.com/go-logr/logr/go.mod deleted file mode 100644 index 7baec9b57..000000000 --- a/vendor/github.com/go-logr/logr/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module github.com/go-logr/logr - -go 1.16 diff --git a/vendor/github.com/go-logr/logr/logr.go b/vendor/github.com/go-logr/logr/logr.go index 44cd398c9..c3b56b3d2 100644 --- a/vendor/github.com/go-logr/logr/logr.go +++ b/vendor/github.com/go-logr/logr/logr.go @@ -43,7 +43,9 @@ limitations under the License. // // Info() and Error() are very similar, but they are separate methods so that // LogSink implementations can choose to do things like attach additional -// information (such as stack traces) on calls to Error(). +// information (such as stack traces) on calls to Error(). Error() messages are +// always logged, regardless of the current verbosity. If there is no error +// instance available, passing nil is valid. // // Verbosity // @@ -53,6 +55,7 @@ limitations under the License. // Log-lines with V-levels that are not enabled (as per the LogSink) will not // be written. Level V(0) is the default, and logger.V(0).Info() has the same // meaning as logger.Info(). Negative V-levels have the same meaning as V(0). +// Error messages do not have a verbosity level and are always logged. // // Where we might have written: // if flVerbose >= 2 { @@ -112,6 +115,15 @@ limitations under the License. // may be any Go value, but how the value is formatted is determined by the // LogSink implementation. // +// Logger instances are meant to be passed around by value. Code that receives +// such a value can call its methods without having to check whether the +// instance is ready for use. +// +// Calling methods with the null logger (Logger{}) as instance will crash +// because it has no LogSink. Therefore this null logger should never be passed +// around. For cases where passing a logger is optional, a pointer to Logger +// should be used. +// // Key Naming Conventions // // Keys are not strictly required to conform to any specification or regex, but @@ -253,11 +265,13 @@ func (l Logger) Info(msg string, keysAndValues ...interface{}) { // Error logs an error, with the given message and key/value pairs as context. // It functions similarly to Info, but may have unique behavior, and should be // preferred for logging errors (see the package documentations for more -// information). +// information). The log message will always be emitted, regardless of +// verbosity level. // // The msg argument should be used to add context to any underlying error, // while the err argument should be used to attach the actual error that -// triggered this log line, if present. +// triggered this log line, if present. The err parameter is optional +// and nil may be passed instead of an error instance. func (l Logger) Error(err error, msg string, keysAndValues ...interface{}) { if withHelper, ok := l.sink.(CallStackHelperLogSink); ok { withHelper.GetCallStackHelper()() diff --git a/vendor/github.com/go-logr/zapr/go.mod b/vendor/github.com/go-logr/zapr/go.mod deleted file mode 100644 index 71c4aea09..000000000 --- a/vendor/github.com/go-logr/zapr/go.mod +++ /dev/null @@ -1,10 +0,0 @@ -module github.com/go-logr/zapr - -go 1.16 - -require ( - github.com/go-logr/logr v1.2.0 - github.com/pkg/errors v0.9.1 // indirect - github.com/stretchr/testify v1.7.0 - go.uber.org/zap v1.19.0 -) diff --git a/vendor/github.com/go-logr/zapr/go.sum b/vendor/github.com/go-logr/zapr/go.sum deleted file mode 100644 index 98fe663e7..000000000 --- a/vendor/github.com/go-logr/zapr/go.sum +++ /dev/null @@ -1,51 +0,0 @@ -github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= -github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/go-logr/logr v1.2.0 h1:QK40JKJyMdUDz+h+xvCsru/bJhvG0UxvePV0ufL/AcE= -github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/goleak v1.1.10 h1:z+mqJhf6ss6BSfSM671tgKyZBFPTTJM+HLxnhPC3wu0= -go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= -go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/zap v1.19.0 h1:mZQZefskPPCMIBCSEH0v2/iUqqLrYtaeqwD6FUGUnFE= -go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de h1:5hukYrvBGR8/eNkX5mdUezrA6JiaEZDtJb9Ei+1LlBs= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20191108193012-7d206e10da11 h1:Yq9t9jnGoR+dBuitxdo9l6Q7xh/zOyNnYUtDKaQ3x0E= -golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/vendor/github.com/go-openapi/jsonpointer/go.mod b/vendor/github.com/go-openapi/jsonpointer/go.mod deleted file mode 100644 index 3e45e225b..000000000 --- a/vendor/github.com/go-openapi/jsonpointer/go.mod +++ /dev/null @@ -1,9 +0,0 @@ -module github.com/go-openapi/jsonpointer - -require ( - github.com/go-openapi/swag v0.19.5 - github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e // indirect - github.com/stretchr/testify v1.3.0 -) - -go 1.13 diff --git a/vendor/github.com/go-openapi/jsonpointer/go.sum b/vendor/github.com/go-openapi/jsonpointer/go.sum deleted file mode 100644 index 953d4f354..000000000 --- a/vendor/github.com/go-openapi/jsonpointer/go.sum +++ /dev/null @@ -1,24 +0,0 @@ -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/go-openapi/swag v0.19.5 h1:lTz6Ys4CmqqCQmZPBlbQENR1/GucA2bzYTE12Pw4tFY= -github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63 h1:nTT4s92Dgz2HlrB2NaMgvlfqHH39OgMhA7z3PK7PGD4= -github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e h1:hB2xlXdHp/pmPZq0y3QnmWAArdw9PqbmotexnWx/FU8= -github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/vendor/github.com/go-openapi/jsonreference/go.mod b/vendor/github.com/go-openapi/jsonreference/go.mod deleted file mode 100644 index e6c2ec4d9..000000000 --- a/vendor/github.com/go-openapi/jsonreference/go.mod +++ /dev/null @@ -1,12 +0,0 @@ -module github.com/go-openapi/jsonreference - -require ( - github.com/PuerkitoBio/purell v1.1.1 - github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect - github.com/go-openapi/jsonpointer v0.19.3 - github.com/stretchr/testify v1.3.0 - golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297 // indirect - golang.org/x/text v0.3.3 // indirect -) - -go 1.13 diff --git a/vendor/github.com/go-openapi/jsonreference/go.sum b/vendor/github.com/go-openapi/jsonreference/go.sum deleted file mode 100644 index b37f873e5..000000000 --- a/vendor/github.com/go-openapi/jsonreference/go.sum +++ /dev/null @@ -1,38 +0,0 @@ -github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= -github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= -github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/go-openapi/jsonpointer v0.19.3 h1:gihV7YNZK1iK6Tgwwsxo2rJbD1GTbdm72325Bq8FI3w= -github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/swag v0.19.5 h1:lTz6Ys4CmqqCQmZPBlbQENR1/GucA2bzYTE12Pw4tFY= -github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63 h1:nTT4s92Dgz2HlrB2NaMgvlfqHH39OgMhA7z3PK7PGD4= -github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e h1:hB2xlXdHp/pmPZq0y3QnmWAArdw9PqbmotexnWx/FU8= -github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297 h1:k7pJ2yAPLPgbskkFdhRCsA77k2fySZ1zf2zCjvQCiIM= -golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/vendor/github.com/go-openapi/swag/go.mod b/vendor/github.com/go-openapi/swag/go.mod deleted file mode 100644 index fb29b65b2..000000000 --- a/vendor/github.com/go-openapi/swag/go.mod +++ /dev/null @@ -1,18 +0,0 @@ -module github.com/go-openapi/swag - -require ( - github.com/davecgh/go-spew v1.1.1 // indirect - github.com/kr/text v0.2.0 // indirect - github.com/mailru/easyjson v0.7.6 - github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e // indirect - github.com/stretchr/testify v1.6.1 - gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f // indirect - gopkg.in/yaml.v2 v2.4.0 - gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 // indirect -) - -replace github.com/golang/lint => golang.org/x/lint v0.0.0-20190409202823-959b441ac422 - -replace sourcegraph.com/sourcegraph/go-diff => github.com/sourcegraph/go-diff v0.5.1 - -go 1.11 diff --git a/vendor/github.com/go-openapi/swag/go.sum b/vendor/github.com/go-openapi/swag/go.sum deleted file mode 100644 index a45da809a..000000000 --- a/vendor/github.com/go-openapi/swag/go.sum +++ /dev/null @@ -1,29 +0,0 @@ -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= -github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/mailru/easyjson v0.7.6 h1:8yTIVnZgCoiM1TgqoeTl+LfU5Jg6/xL3QhGQnimLYnA= -github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/objx v0.1.0 h1:4G4v2dO3VZwixGIRoQ5Lfboy6nUhCyYzaqnIAPPhYs4= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= -gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 h1:tQIYjPdBoyREyB9XMu+nnTclpTYkz2zFM+lzLJFO4gQ= -gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/vendor/github.com/go-task/slim-sprig/go.mod b/vendor/github.com/go-task/slim-sprig/go.mod deleted file mode 100644 index d90a221be..000000000 --- a/vendor/github.com/go-task/slim-sprig/go.mod +++ /dev/null @@ -1,8 +0,0 @@ -module github.com/go-task/slim-sprig - -go 1.13 - -require ( - github.com/davecgh/go-spew v1.1.1 // indirect - github.com/stretchr/testify v1.5.1 -) diff --git a/vendor/github.com/go-task/slim-sprig/go.sum b/vendor/github.com/go-task/slim-sprig/go.sum deleted file mode 100644 index 256ef8493..000000000 --- a/vendor/github.com/go-task/slim-sprig/go.sum +++ /dev/null @@ -1,22 +0,0 @@ -github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/objx v0.1.0 h1:4G4v2dO3VZwixGIRoQ5Lfboy6nUhCyYzaqnIAPPhYs4= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4= -github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/vendor/github.com/gobuffalo/flect/go.mod b/vendor/github.com/gobuffalo/flect/go.mod deleted file mode 100644 index 7c8d049ab..000000000 --- a/vendor/github.com/gobuffalo/flect/go.mod +++ /dev/null @@ -1,5 +0,0 @@ -module github.com/gobuffalo/flect - -go 1.13 - -require github.com/stretchr/testify v1.4.0 diff --git a/vendor/github.com/gobuffalo/flect/go.sum b/vendor/github.com/gobuffalo/flect/go.sum deleted file mode 100644 index 8fdee5854..000000000 --- a/vendor/github.com/gobuffalo/flect/go.sum +++ /dev/null @@ -1,11 +0,0 @@ -github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/vendor/github.com/golang/snappy/go.mod b/vendor/github.com/golang/snappy/go.mod deleted file mode 100644 index f6406bb2c..000000000 --- a/vendor/github.com/golang/snappy/go.mod +++ /dev/null @@ -1 +0,0 @@ -module github.com/golang/snappy diff --git a/vendor/github.com/google/go-cmp/cmp/compare.go b/vendor/github.com/google/go-cmp/cmp/compare.go index 86d0903b8..2a5446762 100644 --- a/vendor/github.com/google/go-cmp/cmp/compare.go +++ b/vendor/github.com/google/go-cmp/cmp/compare.go @@ -36,7 +36,6 @@ import ( "strings" "github.com/google/go-cmp/cmp/internal/diff" - "github.com/google/go-cmp/cmp/internal/flags" "github.com/google/go-cmp/cmp/internal/function" "github.com/google/go-cmp/cmp/internal/value" ) @@ -319,7 +318,6 @@ func (s *state) tryMethod(t reflect.Type, vx, vy reflect.Value) bool { } func (s *state) callTRFunc(f, v reflect.Value, step Transform) reflect.Value { - v = sanitizeValue(v, f.Type().In(0)) if !s.dynChecker.Next() { return f.Call([]reflect.Value{v})[0] } @@ -343,8 +341,6 @@ func (s *state) callTRFunc(f, v reflect.Value, step Transform) reflect.Value { } func (s *state) callTTBFunc(f, x, y reflect.Value) bool { - x = sanitizeValue(x, f.Type().In(0)) - y = sanitizeValue(y, f.Type().In(1)) if !s.dynChecker.Next() { return f.Call([]reflect.Value{x, y})[0].Bool() } @@ -372,19 +368,6 @@ func detectRaces(c chan<- reflect.Value, f reflect.Value, vs ...reflect.Value) { ret = f.Call(vs)[0] } -// sanitizeValue converts nil interfaces of type T to those of type R, -// assuming that T is assignable to R. -// Otherwise, it returns the input value as is. -func sanitizeValue(v reflect.Value, t reflect.Type) reflect.Value { - // TODO(≥go1.10): Workaround for reflect bug (https://golang.org/issue/22143). - if !flags.AtLeastGo110 { - if v.Kind() == reflect.Interface && v.IsNil() && v.Type() != t { - return reflect.New(t).Elem() - } - } - return v -} - func (s *state) compareStruct(t reflect.Type, vx, vy reflect.Value) { var addr bool var vax, vay reflect.Value // Addressable versions of vx and vy diff --git a/vendor/github.com/google/go-cmp/cmp/export_panic.go b/vendor/github.com/google/go-cmp/cmp/export_panic.go index 5ff0b4218..ae851fe53 100644 --- a/vendor/github.com/google/go-cmp/cmp/export_panic.go +++ b/vendor/github.com/google/go-cmp/cmp/export_panic.go @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build purego // +build purego package cmp diff --git a/vendor/github.com/google/go-cmp/cmp/export_unsafe.go b/vendor/github.com/google/go-cmp/cmp/export_unsafe.go index 21eb54858..e2c0f74e8 100644 --- a/vendor/github.com/google/go-cmp/cmp/export_unsafe.go +++ b/vendor/github.com/google/go-cmp/cmp/export_unsafe.go @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build !purego // +build !purego package cmp diff --git a/vendor/github.com/google/go-cmp/cmp/internal/diff/debug_disable.go b/vendor/github.com/google/go-cmp/cmp/internal/diff/debug_disable.go index 1daaaacc5..36062a604 100644 --- a/vendor/github.com/google/go-cmp/cmp/internal/diff/debug_disable.go +++ b/vendor/github.com/google/go-cmp/cmp/internal/diff/debug_disable.go @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build !cmp_debug // +build !cmp_debug package diff diff --git a/vendor/github.com/google/go-cmp/cmp/internal/diff/debug_enable.go b/vendor/github.com/google/go-cmp/cmp/internal/diff/debug_enable.go index 4b91dbcac..a3b97a1ad 100644 --- a/vendor/github.com/google/go-cmp/cmp/internal/diff/debug_enable.go +++ b/vendor/github.com/google/go-cmp/cmp/internal/diff/debug_enable.go @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build cmp_debug // +build cmp_debug package diff diff --git a/vendor/github.com/google/go-cmp/cmp/internal/flags/toolchain_legacy.go b/vendor/github.com/google/go-cmp/cmp/internal/flags/toolchain_legacy.go deleted file mode 100644 index 82d1d7fbf..000000000 --- a/vendor/github.com/google/go-cmp/cmp/internal/flags/toolchain_legacy.go +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright 2019, The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build !go1.10 - -package flags - -// AtLeastGo110 reports whether the Go toolchain is at least Go 1.10. -const AtLeastGo110 = false diff --git a/vendor/github.com/google/go-cmp/cmp/internal/flags/toolchain_recent.go b/vendor/github.com/google/go-cmp/cmp/internal/flags/toolchain_recent.go deleted file mode 100644 index 8646f0529..000000000 --- a/vendor/github.com/google/go-cmp/cmp/internal/flags/toolchain_recent.go +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright 2019, The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build go1.10 - -package flags - -// AtLeastGo110 reports whether the Go toolchain is at least Go 1.10. -const AtLeastGo110 = true diff --git a/vendor/github.com/google/go-cmp/cmp/internal/value/name.go b/vendor/github.com/google/go-cmp/cmp/internal/value/name.go index b6c12cefb..7b498bb2c 100644 --- a/vendor/github.com/google/go-cmp/cmp/internal/value/name.go +++ b/vendor/github.com/google/go-cmp/cmp/internal/value/name.go @@ -9,6 +9,8 @@ import ( "strconv" ) +var anyType = reflect.TypeOf((*interface{})(nil)).Elem() + // TypeString is nearly identical to reflect.Type.String, // but has an additional option to specify that full type names be used. func TypeString(t reflect.Type, qualified bool) string { @@ -20,6 +22,11 @@ func appendTypeName(b []byte, t reflect.Type, qualified, elideFunc bool) []byte // of the same name and within the same package, // but declared within the namespace of different functions. + // Use the "any" alias instead of "interface{}" for better readability. + if t == anyType { + return append(b, "any"...) + } + // Named type. if t.Name() != "" { if qualified && t.PkgPath() != "" { diff --git a/vendor/github.com/google/go-cmp/cmp/internal/value/pointer_purego.go b/vendor/github.com/google/go-cmp/cmp/internal/value/pointer_purego.go index 44f4a5afd..1a71bfcbd 100644 --- a/vendor/github.com/google/go-cmp/cmp/internal/value/pointer_purego.go +++ b/vendor/github.com/google/go-cmp/cmp/internal/value/pointer_purego.go @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build purego // +build purego package value diff --git a/vendor/github.com/google/go-cmp/cmp/internal/value/pointer_unsafe.go b/vendor/github.com/google/go-cmp/cmp/internal/value/pointer_unsafe.go index a605953d4..16e6860af 100644 --- a/vendor/github.com/google/go-cmp/cmp/internal/value/pointer_unsafe.go +++ b/vendor/github.com/google/go-cmp/cmp/internal/value/pointer_unsafe.go @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build !purego // +build !purego package value diff --git a/vendor/github.com/google/go-cmp/cmp/path.go b/vendor/github.com/google/go-cmp/cmp/path.go index f01eff318..c71003463 100644 --- a/vendor/github.com/google/go-cmp/cmp/path.go +++ b/vendor/github.com/google/go-cmp/cmp/path.go @@ -178,7 +178,7 @@ type structField struct { unexported bool mayForce bool // Forcibly allow visibility paddr bool // Was parent addressable? - pvx, pvy reflect.Value // Parent values (always addressible) + pvx, pvy reflect.Value // Parent values (always addressable) field reflect.StructField // Field information } diff --git a/vendor/github.com/google/go-cmp/cmp/report_reflect.go b/vendor/github.com/google/go-cmp/cmp/report_reflect.go index 33f03577f..76c04fdbd 100644 --- a/vendor/github.com/google/go-cmp/cmp/report_reflect.go +++ b/vendor/github.com/google/go-cmp/cmp/report_reflect.go @@ -207,9 +207,10 @@ func (opts formatOptions) FormatValue(v reflect.Value, parentKind reflect.Kind, // Check whether this is a []byte of text data. if t.Elem() == reflect.TypeOf(byte(0)) { b := v.Bytes() - isPrintSpace := func(r rune) bool { return unicode.IsPrint(r) && unicode.IsSpace(r) } + isPrintSpace := func(r rune) bool { return unicode.IsPrint(r) || unicode.IsSpace(r) } if len(b) > 0 && utf8.Valid(b) && len(bytes.TrimFunc(b, isPrintSpace)) == 0 { out = opts.formatString("", string(b)) + skipType = true return opts.WithTypeMode(emitType).FormatType(t, out) } } diff --git a/vendor/github.com/google/go-cmp/cmp/report_slices.go b/vendor/github.com/google/go-cmp/cmp/report_slices.go index 2ad3bc85b..68b5c1ae1 100644 --- a/vendor/github.com/google/go-cmp/cmp/report_slices.go +++ b/vendor/github.com/google/go-cmp/cmp/report_slices.go @@ -80,7 +80,7 @@ func (opts formatOptions) CanFormatDiffSlice(v *valueNode) bool { } // Use specialized string diffing for longer slices or strings. - const minLength = 64 + const minLength = 32 return vx.Len() >= minLength && vy.Len() >= minLength } @@ -563,10 +563,10 @@ func cleanupSurroundingIdentical(groups []diffStats, eq func(i, j int) bool) []d nx := ds.NumIdentical + ds.NumRemoved + ds.NumModified ny := ds.NumIdentical + ds.NumInserted + ds.NumModified var numLeadingIdentical, numTrailingIdentical int - for i := 0; i < nx && i < ny && eq(ix+i, iy+i); i++ { + for j := 0; j < nx && j < ny && eq(ix+j, iy+j); j++ { numLeadingIdentical++ } - for i := 0; i < nx && i < ny && eq(ix+nx-1-i, iy+ny-1-i); i++ { + for j := 0; j < nx && j < ny && eq(ix+nx-1-j, iy+ny-1-j); j++ { numTrailingIdentical++ } if numIdentical := numLeadingIdentical + numTrailingIdentical; numIdentical > 0 { diff --git a/vendor/github.com/google/gofuzz/go.mod b/vendor/github.com/google/gofuzz/go.mod deleted file mode 100644 index 8ec4fe9e9..000000000 --- a/vendor/github.com/google/gofuzz/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module github.com/google/gofuzz - -go 1.12 diff --git a/vendor/github.com/google/uuid/go.mod b/vendor/github.com/google/uuid/go.mod deleted file mode 100644 index fc84cd79d..000000000 --- a/vendor/github.com/google/uuid/go.mod +++ /dev/null @@ -1 +0,0 @@ -module github.com/google/uuid diff --git a/vendor/github.com/hashicorp/errwrap/go.mod b/vendor/github.com/hashicorp/errwrap/go.mod deleted file mode 100644 index c9b84022c..000000000 --- a/vendor/github.com/hashicorp/errwrap/go.mod +++ /dev/null @@ -1 +0,0 @@ -module github.com/hashicorp/errwrap diff --git a/vendor/github.com/hashicorp/go-multierror/.travis.yml b/vendor/github.com/hashicorp/go-multierror/.travis.yml deleted file mode 100644 index 24b80388f..000000000 --- a/vendor/github.com/hashicorp/go-multierror/.travis.yml +++ /dev/null @@ -1,12 +0,0 @@ -sudo: false - -language: go - -go: - - 1.x - -branches: - only: - - master - -script: env GO111MODULE=on make test testrace diff --git a/vendor/github.com/hashicorp/go-multierror/README.md b/vendor/github.com/hashicorp/go-multierror/README.md index e92fa614c..71dd308ed 100644 --- a/vendor/github.com/hashicorp/go-multierror/README.md +++ b/vendor/github.com/hashicorp/go-multierror/README.md @@ -1,10 +1,11 @@ # go-multierror -[![Build Status](http://img.shields.io/travis/hashicorp/go-multierror.svg?style=flat-square)][travis] -[![Go Documentation](http://img.shields.io/badge/go-documentation-blue.svg?style=flat-square)][godocs] +[![CircleCI](https://img.shields.io/circleci/build/github/hashicorp/go-multierror/master)](https://circleci.com/gh/hashicorp/go-multierror) +[![Go Reference](https://pkg.go.dev/badge/github.com/hashicorp/go-multierror.svg)](https://pkg.go.dev/github.com/hashicorp/go-multierror) +![GitHub go.mod Go version](https://img.shields.io/github/go-mod/go-version/hashicorp/go-multierror) -[travis]: https://travis-ci.org/hashicorp/go-multierror -[godocs]: https://godoc.org/github.com/hashicorp/go-multierror +[circleci]: https://app.circleci.com/pipelines/github/hashicorp/go-multierror +[godocs]: https://pkg.go.dev/github.com/hashicorp/go-multierror `go-multierror` is a package for Go that provides a mechanism for representing a list of `error` values as a single `error`. @@ -24,7 +25,25 @@ for introspecting on error values. Install using `go get github.com/hashicorp/go-multierror`. Full documentation is available at -http://godoc.org/github.com/hashicorp/go-multierror +https://pkg.go.dev/github.com/hashicorp/go-multierror + +### Requires go version 1.13 or newer + +`go-multierror` requires go version 1.13 or newer. Go 1.13 introduced +[error wrapping](https://golang.org/doc/go1.13#error_wrapping), which +this library takes advantage of. + +If you need to use an earlier version of go, you can use the +[v1.0.0](https://github.com/hashicorp/go-multierror/tree/v1.0.0) +tag, which doesn't rely on features in go 1.13. + +If you see compile errors that look like the below, it's likely that +you're on an older version of go: + +``` +/go/src/github.com/hashicorp/go-multierror/multierror.go:112:9: undefined: errors.As +/go/src/github.com/hashicorp/go-multierror/multierror.go:117:9: undefined: errors.Is +``` ## Usage diff --git a/vendor/github.com/hashicorp/go-multierror/append.go b/vendor/github.com/hashicorp/go-multierror/append.go index 775b6e753..3e2589bfd 100644 --- a/vendor/github.com/hashicorp/go-multierror/append.go +++ b/vendor/github.com/hashicorp/go-multierror/append.go @@ -6,6 +6,8 @@ package multierror // If err is not a multierror.Error, then it will be turned into // one. If any of the errs are multierr.Error, they will be flattened // one level into err. +// Any nil errors within errs will be ignored. If err is nil, a new +// *Error will be returned. func Append(err error, errs ...error) *Error { switch err := err.(type) { case *Error: diff --git a/vendor/github.com/hashicorp/go-multierror/go.mod b/vendor/github.com/hashicorp/go-multierror/go.mod deleted file mode 100644 index 0afe8e6f9..000000000 --- a/vendor/github.com/hashicorp/go-multierror/go.mod +++ /dev/null @@ -1,5 +0,0 @@ -module github.com/hashicorp/go-multierror - -go 1.14 - -require github.com/hashicorp/errwrap v1.0.0 diff --git a/vendor/github.com/hashicorp/go-multierror/go.sum b/vendor/github.com/hashicorp/go-multierror/go.sum deleted file mode 100644 index e8238e9ec..000000000 --- a/vendor/github.com/hashicorp/go-multierror/go.sum +++ /dev/null @@ -1,2 +0,0 @@ -github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= -github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= diff --git a/vendor/github.com/hashicorp/go-multierror/multierror.go b/vendor/github.com/hashicorp/go-multierror/multierror.go index d05dd9269..f54574326 100644 --- a/vendor/github.com/hashicorp/go-multierror/multierror.go +++ b/vendor/github.com/hashicorp/go-multierror/multierror.go @@ -40,14 +40,17 @@ func (e *Error) GoString() string { return fmt.Sprintf("*%#v", *e) } -// WrappedErrors returns the list of errors that this Error is wrapping. -// It is an implementation of the errwrap.Wrapper interface so that -// multierror.Error can be used with that library. +// WrappedErrors returns the list of errors that this Error is wrapping. It is +// an implementation of the errwrap.Wrapper interface so that multierror.Error +// can be used with that library. // -// This method is not safe to be called concurrently and is no different -// than accessing the Errors field directly. It is implemented only to -// satisfy the errwrap.Wrapper interface. +// This method is not safe to be called concurrently. Unlike accessing the +// Errors field directly, this function also checks if the multierror is nil to +// prevent a null-pointer panic. It satisfies the errwrap.Wrapper interface. func (e *Error) WrappedErrors() []error { + if e == nil { + return nil + } return e.Errors } diff --git a/vendor/github.com/hashicorp/hcl/go.mod b/vendor/github.com/hashicorp/hcl/go.mod deleted file mode 100644 index 4debbbe35..000000000 --- a/vendor/github.com/hashicorp/hcl/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module github.com/hashicorp/hcl - -require github.com/davecgh/go-spew v1.1.1 diff --git a/vendor/github.com/hashicorp/hcl/go.sum b/vendor/github.com/hashicorp/hcl/go.sum deleted file mode 100644 index b5e2922e8..000000000 --- a/vendor/github.com/hashicorp/hcl/go.sum +++ /dev/null @@ -1,2 +0,0 @@ -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/vendor/github.com/huandu/xstrings/go.mod b/vendor/github.com/huandu/xstrings/go.mod deleted file mode 100644 index 3982c204c..000000000 --- a/vendor/github.com/huandu/xstrings/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module github.com/huandu/xstrings - -go 1.12 diff --git a/vendor/github.com/imdario/mergo/go.mod b/vendor/github.com/imdario/mergo/go.mod deleted file mode 100644 index 3d689d93e..000000000 --- a/vendor/github.com/imdario/mergo/go.mod +++ /dev/null @@ -1,5 +0,0 @@ -module github.com/imdario/mergo - -go 1.13 - -require gopkg.in/yaml.v2 v2.3.0 diff --git a/vendor/github.com/imdario/mergo/go.sum b/vendor/github.com/imdario/mergo/go.sum deleted file mode 100644 index 168980da5..000000000 --- a/vendor/github.com/imdario/mergo/go.sum +++ /dev/null @@ -1,4 +0,0 @@ -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/vendor/github.com/josharian/intern/go.mod b/vendor/github.com/josharian/intern/go.mod deleted file mode 100644 index f2262ff0d..000000000 --- a/vendor/github.com/josharian/intern/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module github.com/josharian/intern - -go 1.5 diff --git a/vendor/github.com/json-iterator/go/go.mod b/vendor/github.com/json-iterator/go/go.mod deleted file mode 100644 index e817cccbf..000000000 --- a/vendor/github.com/json-iterator/go/go.mod +++ /dev/null @@ -1,11 +0,0 @@ -module github.com/json-iterator/go - -go 1.12 - -require ( - github.com/davecgh/go-spew v1.1.1 - github.com/google/gofuzz v1.0.0 - github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 - github.com/modern-go/reflect2 v1.0.2 - github.com/stretchr/testify v1.3.0 -) diff --git a/vendor/github.com/json-iterator/go/go.sum b/vendor/github.com/json-iterator/go/go.sum deleted file mode 100644 index 4b7bb8a29..000000000 --- a/vendor/github.com/json-iterator/go/go.sum +++ /dev/null @@ -1,14 +0,0 @@ -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= -github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= diff --git a/vendor/github.com/magiconair/properties/go.mod b/vendor/github.com/magiconair/properties/go.mod deleted file mode 100644 index 4ff090bdc..000000000 --- a/vendor/github.com/magiconair/properties/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module github.com/magiconair/properties - -go 1.13 diff --git a/vendor/github.com/magiconair/properties/lex.go b/vendor/github.com/magiconair/properties/lex.go index 367166d58..e1e9dd7b1 100644 --- a/vendor/github.com/magiconair/properties/lex.go +++ b/vendor/github.com/magiconair/properties/lex.go @@ -128,18 +128,6 @@ func (l *lexer) acceptRun(valid string) { l.backup() } -// acceptRunUntil consumes a run of runes up to a terminator. -func (l *lexer) acceptRunUntil(term rune) { - for term != l.next() { - } - l.backup() -} - -// hasText returns true if the current parsed text is not empty. -func (l *lexer) isNotEmpty() bool { - return l.pos > l.start -} - // lineNumber reports which line we're on, based on the position of // the previous item returned by nextItem. Doing it this way // means we don't have to worry about peek double counting. diff --git a/vendor/github.com/magiconair/properties/parser.go b/vendor/github.com/magiconair/properties/parser.go index cdc4a8034..430e4fcd2 100644 --- a/vendor/github.com/magiconair/properties/parser.go +++ b/vendor/github.com/magiconair/properties/parser.go @@ -59,14 +59,6 @@ func (p *parser) errorf(format string, args ...interface{}) { panic(fmt.Errorf(format, args...)) } -func (p *parser) expect(expected itemType) (token item) { - token = p.lex.nextItem() - if token.typ != expected { - p.unexpected(token) - } - return token -} - func (p *parser) expectOneOf(expected ...itemType) (token item) { token = p.lex.nextItem() for _, v := range expected { @@ -91,5 +83,4 @@ func (p *parser) recover(errp *error) { } *errp = e.(error) } - return } diff --git a/vendor/github.com/magiconair/properties/properties.go b/vendor/github.com/magiconair/properties/properties.go index 1529e7223..62ae2d67a 100644 --- a/vendor/github.com/magiconair/properties/properties.go +++ b/vendor/github.com/magiconair/properties/properties.go @@ -786,7 +786,6 @@ func expand(s string, keys []string, prefix, postfix string, values map[string]s } s = s[:start] + new_val + s[end+1:] } - return s, nil } // encode encodes a UTF-8 string to ISO-8859-1 and escapes some characters. diff --git a/vendor/github.com/mattn/go-colorable/.travis.yml b/vendor/github.com/mattn/go-colorable/.travis.yml deleted file mode 100644 index 7942c565c..000000000 --- a/vendor/github.com/mattn/go-colorable/.travis.yml +++ /dev/null @@ -1,15 +0,0 @@ -language: go -sudo: false -go: - - 1.13.x - - tip - -before_install: - - go get -t -v ./... - -script: - - ./go.test.sh - -after_success: - - bash <(curl -s https://codecov.io/bash) - diff --git a/vendor/github.com/mattn/go-colorable/README.md b/vendor/github.com/mattn/go-colorable/README.md index e055952b6..ca0483711 100644 --- a/vendor/github.com/mattn/go-colorable/README.md +++ b/vendor/github.com/mattn/go-colorable/README.md @@ -1,6 +1,6 @@ # go-colorable -[![Build Status](https://travis-ci.org/mattn/go-colorable.svg?branch=master)](https://travis-ci.org/mattn/go-colorable) +[![Build Status](https://github.com/mattn/go-colorable/workflows/test/badge.svg)](https://github.com/mattn/go-colorable/actions?query=workflow%3Atest) [![Codecov](https://codecov.io/gh/mattn/go-colorable/branch/master/graph/badge.svg)](https://codecov.io/gh/mattn/go-colorable) [![GoDoc](https://godoc.org/github.com/mattn/go-colorable?status.svg)](http://godoc.org/github.com/mattn/go-colorable) [![Go Report Card](https://goreportcard.com/badge/mattn/go-colorable)](https://goreportcard.com/report/mattn/go-colorable) diff --git a/vendor/github.com/mattn/go-colorable/colorable_appengine.go b/vendor/github.com/mattn/go-colorable/colorable_appengine.go index 1f7806fe1..416d1bbbf 100644 --- a/vendor/github.com/mattn/go-colorable/colorable_appengine.go +++ b/vendor/github.com/mattn/go-colorable/colorable_appengine.go @@ -1,3 +1,4 @@ +//go:build appengine // +build appengine package colorable diff --git a/vendor/github.com/mattn/go-colorable/colorable_others.go b/vendor/github.com/mattn/go-colorable/colorable_others.go index 08cbd1e0f..766d94603 100644 --- a/vendor/github.com/mattn/go-colorable/colorable_others.go +++ b/vendor/github.com/mattn/go-colorable/colorable_others.go @@ -1,5 +1,5 @@ -// +build !windows -// +build !appengine +//go:build !windows && !appengine +// +build !windows,!appengine package colorable diff --git a/vendor/github.com/mattn/go-colorable/colorable_windows.go b/vendor/github.com/mattn/go-colorable/colorable_windows.go index 41215d7fc..1846ad5ab 100644 --- a/vendor/github.com/mattn/go-colorable/colorable_windows.go +++ b/vendor/github.com/mattn/go-colorable/colorable_windows.go @@ -1,5 +1,5 @@ -// +build windows -// +build !appengine +//go:build windows && !appengine +// +build windows,!appengine package colorable @@ -452,18 +452,22 @@ func (w *Writer) Write(data []byte) (n int, err error) { } else { er = bytes.NewReader(data) } - var bw [1]byte + var plaintext bytes.Buffer loop: for { c1, err := er.ReadByte() if err != nil { + plaintext.WriteTo(w.out) break loop } if c1 != 0x1b { - bw[0] = c1 - w.out.Write(bw[:]) + plaintext.WriteByte(c1) continue } + _, err = plaintext.WriteTo(w.out) + if err != nil { + break loop + } c2, err := er.ReadByte() if err != nil { break loop diff --git a/vendor/github.com/mattn/go-colorable/go.mod b/vendor/github.com/mattn/go-colorable/go.mod deleted file mode 100644 index 1e590b819..000000000 --- a/vendor/github.com/mattn/go-colorable/go.mod +++ /dev/null @@ -1,8 +0,0 @@ -module github.com/mattn/go-colorable - -require ( - github.com/mattn/go-isatty v0.0.12 - golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae // indirect -) - -go 1.13 diff --git a/vendor/github.com/mattn/go-colorable/go.sum b/vendor/github.com/mattn/go-colorable/go.sum deleted file mode 100644 index cf5b95d97..000000000 --- a/vendor/github.com/mattn/go-colorable/go.sum +++ /dev/null @@ -1,5 +0,0 @@ -github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= -github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae h1:/WDfKMnPU+m5M4xB+6x4kaepxRw6jWvR5iDRdvjHgy8= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= diff --git a/vendor/github.com/mattn/go-colorable/noncolorable.go b/vendor/github.com/mattn/go-colorable/noncolorable.go index 95f2c6be2..05d6f74bf 100644 --- a/vendor/github.com/mattn/go-colorable/noncolorable.go +++ b/vendor/github.com/mattn/go-colorable/noncolorable.go @@ -18,18 +18,22 @@ func NewNonColorable(w io.Writer) io.Writer { // Write writes data on console func (w *NonColorable) Write(data []byte) (n int, err error) { er := bytes.NewReader(data) - var bw [1]byte + var plaintext bytes.Buffer loop: for { c1, err := er.ReadByte() if err != nil { + plaintext.WriteTo(w.out) break loop } if c1 != 0x1b { - bw[0] = c1 - w.out.Write(bw[:]) + plaintext.WriteByte(c1) continue } + _, err = plaintext.WriteTo(w.out) + if err != nil { + break loop + } c2, err := er.ReadByte() if err != nil { break loop @@ -38,7 +42,6 @@ loop: continue } - var buf bytes.Buffer for { c, err := er.ReadByte() if err != nil { @@ -47,7 +50,6 @@ loop: if ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || c == '@' { break } - buf.Write([]byte(string(c))) } } diff --git a/vendor/github.com/mattn/go-isatty/.travis.yml b/vendor/github.com/mattn/go-isatty/.travis.yml deleted file mode 100644 index 604314dd4..000000000 --- a/vendor/github.com/mattn/go-isatty/.travis.yml +++ /dev/null @@ -1,14 +0,0 @@ -language: go -sudo: false -go: - - 1.13.x - - tip - -before_install: - - go get -t -v ./... - -script: - - ./go.test.sh - -after_success: - - bash <(curl -s https://codecov.io/bash) diff --git a/vendor/github.com/mattn/go-isatty/go.mod b/vendor/github.com/mattn/go-isatty/go.mod deleted file mode 100644 index 605c4c221..000000000 --- a/vendor/github.com/mattn/go-isatty/go.mod +++ /dev/null @@ -1,5 +0,0 @@ -module github.com/mattn/go-isatty - -go 1.12 - -require golang.org/x/sys v0.0.0-20200116001909-b77594299b42 diff --git a/vendor/github.com/mattn/go-isatty/go.sum b/vendor/github.com/mattn/go-isatty/go.sum deleted file mode 100644 index 912e29cbc..000000000 --- a/vendor/github.com/mattn/go-isatty/go.sum +++ /dev/null @@ -1,2 +0,0 @@ -golang.org/x/sys v0.0.0-20200116001909-b77594299b42 h1:vEOn+mP2zCOVzKckCZy6YsCtDblrpj/w7B9nxGNELpg= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= diff --git a/vendor/github.com/mattn/go-isatty/isatty_bsd.go b/vendor/github.com/mattn/go-isatty/isatty_bsd.go index 711f28808..39bbcf00f 100644 --- a/vendor/github.com/mattn/go-isatty/isatty_bsd.go +++ b/vendor/github.com/mattn/go-isatty/isatty_bsd.go @@ -1,3 +1,4 @@ +//go:build (darwin || freebsd || openbsd || netbsd || dragonfly) && !appengine // +build darwin freebsd openbsd netbsd dragonfly // +build !appengine diff --git a/vendor/github.com/mattn/go-isatty/isatty_others.go b/vendor/github.com/mattn/go-isatty/isatty_others.go index ff714a376..31503226f 100644 --- a/vendor/github.com/mattn/go-isatty/isatty_others.go +++ b/vendor/github.com/mattn/go-isatty/isatty_others.go @@ -1,4 +1,5 @@ -// +build appengine js nacl +//go:build appengine || js || nacl || wasm +// +build appengine js nacl wasm package isatty diff --git a/vendor/github.com/mattn/go-isatty/isatty_plan9.go b/vendor/github.com/mattn/go-isatty/isatty_plan9.go index c5b6e0c08..bae7f9bb3 100644 --- a/vendor/github.com/mattn/go-isatty/isatty_plan9.go +++ b/vendor/github.com/mattn/go-isatty/isatty_plan9.go @@ -1,3 +1,4 @@ +//go:build plan9 // +build plan9 package isatty diff --git a/vendor/github.com/mattn/go-isatty/isatty_solaris.go b/vendor/github.com/mattn/go-isatty/isatty_solaris.go index bdd5c79a0..0c3acf2dc 100644 --- a/vendor/github.com/mattn/go-isatty/isatty_solaris.go +++ b/vendor/github.com/mattn/go-isatty/isatty_solaris.go @@ -1,5 +1,5 @@ -// +build solaris -// +build !appengine +//go:build solaris && !appengine +// +build solaris,!appengine package isatty @@ -8,10 +8,9 @@ import ( ) // IsTerminal returns true if the given file descriptor is a terminal. -// see: http://src.illumos.org/source/xref/illumos-gate/usr/src/lib/libbc/libc/gen/common/isatty.c +// see: https://src.illumos.org/source/xref/illumos-gate/usr/src/lib/libc/port/gen/isatty.c func IsTerminal(fd uintptr) bool { - var termio unix.Termio - err := unix.IoctlSetTermio(int(fd), unix.TCGETA, &termio) + _, err := unix.IoctlGetTermio(int(fd), unix.TCGETA) return err == nil } diff --git a/vendor/github.com/mattn/go-isatty/isatty_tcgets.go b/vendor/github.com/mattn/go-isatty/isatty_tcgets.go index 31a1ca973..67787657f 100644 --- a/vendor/github.com/mattn/go-isatty/isatty_tcgets.go +++ b/vendor/github.com/mattn/go-isatty/isatty_tcgets.go @@ -1,4 +1,5 @@ -// +build linux aix +//go:build (linux || aix || zos) && !appengine +// +build linux aix zos // +build !appengine package isatty diff --git a/vendor/github.com/mattn/go-isatty/isatty_windows.go b/vendor/github.com/mattn/go-isatty/isatty_windows.go index 1fa869154..8e3c99171 100644 --- a/vendor/github.com/mattn/go-isatty/isatty_windows.go +++ b/vendor/github.com/mattn/go-isatty/isatty_windows.go @@ -1,5 +1,5 @@ -// +build windows -// +build !appengine +//go:build windows && !appengine +// +build windows,!appengine package isatty @@ -76,7 +76,7 @@ func isCygwinPipeName(name string) bool { } // getFileNameByHandle use the undocomented ntdll NtQueryObject to get file full name from file handler -// since GetFileInformationByHandleEx is not avilable under windows Vista and still some old fashion +// since GetFileInformationByHandleEx is not available under windows Vista and still some old fashion // guys are using Windows XP, this is a workaround for those guys, it will also work on system from // Windows vista to 10 // see https://stackoverflow.com/a/18792477 for details diff --git a/vendor/github.com/mattn/go-isatty/renovate.json b/vendor/github.com/mattn/go-isatty/renovate.json deleted file mode 100644 index 5ae9d96b7..000000000 --- a/vendor/github.com/mattn/go-isatty/renovate.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": [ - "config:base" - ], - "postUpdateOptions": [ - "gomodTidy" - ] -} diff --git a/vendor/github.com/mitchellh/copystructure/go.mod b/vendor/github.com/mitchellh/copystructure/go.mod deleted file mode 100644 index cd9c050c1..000000000 --- a/vendor/github.com/mitchellh/copystructure/go.mod +++ /dev/null @@ -1,5 +0,0 @@ -module github.com/mitchellh/copystructure - -go 1.15 - -require github.com/mitchellh/reflectwalk v1.0.2 diff --git a/vendor/github.com/mitchellh/copystructure/go.sum b/vendor/github.com/mitchellh/copystructure/go.sum deleted file mode 100644 index 3e38da1e1..000000000 --- a/vendor/github.com/mitchellh/copystructure/go.sum +++ /dev/null @@ -1,2 +0,0 @@ -github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= -github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= diff --git a/vendor/github.com/mitchellh/hashstructure/v2/go.mod b/vendor/github.com/mitchellh/hashstructure/v2/go.mod deleted file mode 100644 index 7f7736ce0..000000000 --- a/vendor/github.com/mitchellh/hashstructure/v2/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module github.com/mitchellh/hashstructure/v2 - -go 1.14 diff --git a/vendor/github.com/mitchellh/mapstructure/CHANGELOG.md b/vendor/github.com/mitchellh/mapstructure/CHANGELOG.md index 1955f2878..38a099162 100644 --- a/vendor/github.com/mitchellh/mapstructure/CHANGELOG.md +++ b/vendor/github.com/mitchellh/mapstructure/CHANGELOG.md @@ -1,6 +1,16 @@ -## unreleased +## 1.4.3 -* Fix regression where `*time.Time` value would be set to empty and not be sent +* Fix cases where `json.Number` didn't decode properly [GH-261] + +## 1.4.2 + +* Custom name matchers to support any sort of casing, formatting, etc. for + field names. [GH-250] +* Fix possible panic in ComposeDecodeHookFunc [GH-251] + +## 1.4.1 + +* Fix regression where `*time.Time` value would be set to empty and not be sent to decode hooks properly [GH-232] ## 1.4.0 diff --git a/vendor/github.com/mitchellh/mapstructure/decode_hooks.go b/vendor/github.com/mitchellh/mapstructure/decode_hooks.go index 92e6f76ff..4d4bbc733 100644 --- a/vendor/github.com/mitchellh/mapstructure/decode_hooks.go +++ b/vendor/github.com/mitchellh/mapstructure/decode_hooks.go @@ -62,7 +62,8 @@ func DecodeHookExec( func ComposeDecodeHookFunc(fs ...DecodeHookFunc) DecodeHookFunc { return func(f reflect.Value, t reflect.Value) (interface{}, error) { var err error - var data interface{} + data := f.Interface() + newFrom := f for _, f1 := range fs { data, err = DecodeHookExec(f1, newFrom, t) diff --git a/vendor/github.com/mitchellh/mapstructure/go.mod b/vendor/github.com/mitchellh/mapstructure/go.mod deleted file mode 100644 index a03ae9730..000000000 --- a/vendor/github.com/mitchellh/mapstructure/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module github.com/mitchellh/mapstructure - -go 1.14 diff --git a/vendor/github.com/mitchellh/mapstructure/mapstructure.go b/vendor/github.com/mitchellh/mapstructure/mapstructure.go index 3643901f5..6b81b0067 100644 --- a/vendor/github.com/mitchellh/mapstructure/mapstructure.go +++ b/vendor/github.com/mitchellh/mapstructure/mapstructure.go @@ -192,7 +192,7 @@ type DecodeHookFuncType func(reflect.Type, reflect.Type, interface{}) (interface // source and target types. type DecodeHookFuncKind func(reflect.Kind, reflect.Kind, interface{}) (interface{}, error) -// DecodeHookFuncRaw is a DecodeHookFunc which has complete access to both the source and target +// DecodeHookFuncValue is a DecodeHookFunc which has complete access to both the source and target // values. type DecodeHookFuncValue func(from reflect.Value, to reflect.Value) (interface{}, error) @@ -258,6 +258,11 @@ type DecoderConfig struct { // The tag name that mapstructure reads for field names. This // defaults to "mapstructure" TagName string + + // MatchName is the function used to match the map key to the struct + // field name or tag. Defaults to `strings.EqualFold`. This can be used + // to implement case-sensitive tag values, support snake casing, etc. + MatchName func(mapKey, fieldName string) bool } // A Decoder takes a raw interface value and turns it into structured @@ -376,6 +381,10 @@ func NewDecoder(config *DecoderConfig) (*Decoder, error) { config.TagName = "mapstructure" } + if config.MatchName == nil { + config.MatchName = strings.EqualFold + } + result := &Decoder{ config: config, } @@ -675,16 +684,12 @@ func (d *Decoder) decodeUint(name string, data interface{}, val reflect.Value) e } case dataType.PkgPath() == "encoding/json" && dataType.Name() == "Number": jn := data.(json.Number) - i, err := jn.Int64() + i, err := strconv.ParseUint(string(jn), 0, 64) if err != nil { return fmt.Errorf( "error decoding json.Number into %s: %s", name, err) } - if i < 0 && !d.config.WeaklyTypedInput { - return fmt.Errorf("cannot parse '%s', %d overflows uint", - name, i) - } - val.SetUint(uint64(i)) + val.SetUint(i) default: return fmt.Errorf( "'%s' expected type '%s', got unconvertible type '%s', value: '%v'", @@ -1340,7 +1345,7 @@ func (d *Decoder) decodeStructFromMap(name string, dataVal, val reflect.Value) e continue } - if strings.EqualFold(mK, fieldName) { + if d.config.MatchName(mK, fieldName) { rawMapKey = dataValKey rawMapVal = dataVal.MapIndex(dataValKey) break diff --git a/vendor/github.com/mitchellh/reflectwalk/go.mod b/vendor/github.com/mitchellh/reflectwalk/go.mod deleted file mode 100644 index 52bb7c469..000000000 --- a/vendor/github.com/mitchellh/reflectwalk/go.mod +++ /dev/null @@ -1 +0,0 @@ -module github.com/mitchellh/reflectwalk diff --git a/vendor/github.com/moby/spdystream/go.mod b/vendor/github.com/moby/spdystream/go.mod deleted file mode 100644 index d9b9ad59c..000000000 --- a/vendor/github.com/moby/spdystream/go.mod +++ /dev/null @@ -1,5 +0,0 @@ -module github.com/moby/spdystream - -go 1.13 - -require github.com/gorilla/websocket v1.4.2 diff --git a/vendor/github.com/moby/spdystream/go.sum b/vendor/github.com/moby/spdystream/go.sum deleted file mode 100644 index 85efffd99..000000000 --- a/vendor/github.com/moby/spdystream/go.sum +++ /dev/null @@ -1,2 +0,0 @@ -github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= -github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= diff --git a/vendor/github.com/modern-go/reflect2/go.mod b/vendor/github.com/modern-go/reflect2/go.mod deleted file mode 100644 index 9057e9b33..000000000 --- a/vendor/github.com/modern-go/reflect2/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module github.com/modern-go/reflect2 - -go 1.12 diff --git a/vendor/github.com/nwaples/rardecode/go.mod b/vendor/github.com/nwaples/rardecode/go.mod deleted file mode 100644 index b5e5df218..000000000 --- a/vendor/github.com/nwaples/rardecode/go.mod +++ /dev/null @@ -1 +0,0 @@ -module github.com/nwaples/rardecode diff --git a/vendor/github.com/onsi/ginkgo/v2/CHANGELOG.md b/vendor/github.com/onsi/ginkgo/v2/CHANGELOG.md index ba938a450..66e313d07 100644 --- a/vendor/github.com/onsi/ginkgo/v2/CHANGELOG.md +++ b/vendor/github.com/onsi/ginkgo/v2/CHANGELOG.md @@ -1,3 +1,13 @@ +## 2.1.4 + +### Fixes +- Numerous documentation typos +- Prepend `when` when using `When` (this behavior was in 1.x but unintentionally lost during the 2.0 rewrite) [efce903] +- improve error message when a parallel process fails to report back [a7bd1fe] +- guard against concurrent map writes in DeprecationTracker [0976569] +- Invoke reporting nodes during dry-run (fixes #956 and #935) [aae4480] +- Fix ginkgo import circle [f779385] + ## 2.1.3 See [https://onsi.github.io/ginkgo/MIGRATING_TO_V2](https://onsi.github.io/ginkgo/MIGRATING_TO_V2) for details on V2. diff --git a/vendor/github.com/onsi/ginkgo/v2/core_dsl.go b/vendor/github.com/onsi/ginkgo/v2/core_dsl.go index c8a1a76a6..bdb908606 100644 --- a/vendor/github.com/onsi/ginkgo/v2/core_dsl.go +++ b/vendor/github.com/onsi/ginkgo/v2/core_dsl.go @@ -421,7 +421,23 @@ var XDescribe = PDescribe var Context, FContext, PContext, XContext = Describe, FDescribe, PDescribe, XDescribe /* When is an alias for Describe - it generates the exact same kind of Container node */ -var When, FWhen, PWhen, XWhen = Describe, FDescribe, PDescribe, XDescribe +func When(text string, args ...interface{}) bool { + return pushNode(internal.NewNode(deprecationTracker, types.NodeTypeContainer, "when "+text, args...)) +} + +/* When is an alias for Describe - it generates the exact same kind of Container node */ +func FWhen(text string, args ...interface{}) bool { + args = append(args, internal.Focus) + return pushNode(internal.NewNode(deprecationTracker, types.NodeTypeContainer, "when "+text, args...)) +} + +/* When is an alias for Describe - it generates the exact same kind of Container node */ +func PWhen(text string, args ...interface{}) bool { + args = append(args, internal.Pending) + return pushNode(internal.NewNode(deprecationTracker, types.NodeTypeContainer, "when "+text, args...)) +} + +var XWhen = PWhen /* It nodes are Subject nodes that contain your spec code and assertions. diff --git a/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/run.go b/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/run.go index a954ee995..10058393b 100644 --- a/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/run.go +++ b/vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/run.go @@ -240,11 +240,13 @@ func runParallel(suite TestSuite, ginkgoConfig types.SuiteConfig, reporterConfig case <-server.GetSuiteDone(): fmt.Println("") case <-time.After(time.Second): - //the serve never got back to us. Something must have gone wrong. - fmt.Fprintln(os.Stderr, "** Ginkgo timed out waiting for all parallel procs to report back. **") - fmt.Fprintf(os.Stderr, "%s (%s)\n", suite.PackageName, suite.Path) + //one of the nodes never finished reporting to the server. Something must have gone wrong. + fmt.Fprint(formatter.ColorableStdErr, formatter.F("\n{{bold}}{{red}}Ginkgo timed out waiting for all parallel procs to report back{{/}}\n")) + fmt.Fprint(formatter.ColorableStdErr, formatter.F("{{gray}}Test suite:{{/}} %s (%s)\n\n", suite.PackageName, suite.Path)) + fmt.Fprint(formatter.ColorableStdErr, formatter.Fiw(0, formatter.COLS, "This occurs if a parallel process exits before it reports its results to the Ginkgo CLI. The CLI will now print out all the stdout/stderr output it's collected from the running processes. However you may not see anything useful in these logs because the individual test processes usually intercept output to stdout/stderr in order to capture it in the spec reports.\n\nYou may want to try rerunning your test suite with {{light-gray}}--output-interceptor-mode=none{{/}} to see additional output here and debug your suite.\n")) + fmt.Fprintln(formatter.ColorableStdErr, " ") for proc := 1; proc <= cliConfig.ComputedProcs(); proc++ { - fmt.Fprintf(os.Stderr, "Output from proc %d:\n", proc) + fmt.Fprintf(formatter.ColorableStdErr, formatter.F("{{bold}}Output from proc %d:{{/}}\n", proc)) fmt.Fprintln(os.Stderr, formatter.Fi(1, "%s", procOutput[proc-1].String())) } fmt.Fprintf(os.Stderr, "** End **") diff --git a/vendor/github.com/onsi/ginkgo/v2/go.mod b/vendor/github.com/onsi/ginkgo/v2/go.mod deleted file mode 100644 index 1703506ae..000000000 --- a/vendor/github.com/onsi/ginkgo/v2/go.mod +++ /dev/null @@ -1,11 +0,0 @@ -module github.com/onsi/ginkgo/v2 - -go 1.16 - -require ( - github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 - github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38 - github.com/onsi/gomega v1.17.0 - golang.org/x/sys v0.0.0-20210423082822-04245dca01da - golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e -) diff --git a/vendor/github.com/onsi/ginkgo/v2/go.sum b/vendor/github.com/onsi/ginkgo/v2/go.sum deleted file mode 100644 index f46d12ad1..000000000 --- a/vendor/github.com/onsi/ginkgo/v2/go.sum +++ /dev/null @@ -1,107 +0,0 @@ -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= -github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 h1:p104kn46Q8WdvHunIJ9dAyjPVtrBPhSr3KT2yUst43I= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38 h1:yAJXTCF9TqKcTiHJAE8dj7HMvPfh66eeA2JYW7eFpSE= -github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= -github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= -github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= -github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.17.0 h1:9Luw4uT5HTjHTN8+aNcSThgH1vdXnmdJ8xIfZ4wyTRE= -github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210428140749-89ef3d95e781 h1:DzZ89McO9/gWPsQXS/FVKAlG02ZjaQ6AlZRBimEYOd0= -golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= -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-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -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-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da h1:b3NXsE2LusjYGGjL5bxEVZZORm/YEFFrWFjR8eFrw/c= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -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.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e h1:4nW4NLDYnU28ojHaHO8OVxFHk/aQ33U01a9cjED+pzE= -golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -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= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -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= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= diff --git a/vendor/github.com/onsi/ginkgo/v2/internal/suite.go b/vendor/github.com/onsi/ginkgo/v2/internal/suite.go index 8797895b7..a521ccbd9 100644 --- a/vendor/github.com/onsi/ginkgo/v2/internal/suite.go +++ b/vendor/github.com/onsi/ginkgo/v2/internal/suite.go @@ -393,10 +393,6 @@ func (suite *Suite) runReportAfterSuite() { } func (suite *Suite) reportEach(spec Spec, nodeType types.NodeType) { - if suite.config.DryRun { - return - } - nodes := spec.Nodes.WithType(nodeType) if nodeType == types.NodeTypeReportAfterEach { nodes = nodes.SortedByDescendingNestingLevel() @@ -525,11 +521,6 @@ func (suite *Suite) runSuiteNode(node Node, interruptChannel chan interface{}) { } func (suite *Suite) runReportAfterSuiteNode(node Node, report types.Report) { - if suite.config.DryRun { - suite.currentSpecReport.State = types.SpecStatePassed - return - } - suite.writer.Truncate() suite.outputInterceptor.StartInterceptingOutput() suite.currentSpecReport.StartTime = time.Now() diff --git a/vendor/github.com/onsi/ginkgo/v2/types/deprecation_support.go b/vendor/github.com/onsi/ginkgo/v2/types/deprecation_support.go index 79ca4593d..2948dfa0c 100644 --- a/vendor/github.com/onsi/ginkgo/v2/types/deprecation_support.go +++ b/vendor/github.com/onsi/ginkgo/v2/types/deprecation_support.go @@ -4,6 +4,7 @@ import ( "os" "strconv" "strings" + "sync" "unicode" "github.com/onsi/ginkgo/v2/formatter" @@ -84,11 +85,13 @@ func (d deprecations) Nodot() Deprecation { type DeprecationTracker struct { deprecations map[Deprecation][]CodeLocation + lock *sync.Mutex } func NewDeprecationTracker() *DeprecationTracker { return &DeprecationTracker{ deprecations: map[Deprecation][]CodeLocation{}, + lock: &sync.Mutex{}, } } @@ -102,6 +105,8 @@ func (d *DeprecationTracker) TrackDeprecation(deprecation Deprecation, cl ...Cod } } + d.lock.Lock() + defer d.lock.Unlock() if len(cl) == 1 { d.deprecations[deprecation] = append(d.deprecations[deprecation], cl[0]) } else { @@ -110,10 +115,14 @@ func (d *DeprecationTracker) TrackDeprecation(deprecation Deprecation, cl ...Cod } func (d *DeprecationTracker) DidTrackDeprecations() bool { + d.lock.Lock() + defer d.lock.Unlock() return len(d.deprecations) > 0 } func (d *DeprecationTracker) DeprecationsReport() string { + d.lock.Lock() + defer d.lock.Unlock() out := formatter.F("{{light-yellow}}You're using deprecated Ginkgo functionality:{{/}}\n") out += formatter.F("{{light-yellow}}============================================={{/}}\n") for deprecation, locations := range d.deprecations { diff --git a/vendor/github.com/onsi/ginkgo/v2/types/version.go b/vendor/github.com/onsi/ginkgo/v2/types/version.go index 74261450b..f40150317 100644 --- a/vendor/github.com/onsi/ginkgo/v2/types/version.go +++ b/vendor/github.com/onsi/ginkgo/v2/types/version.go @@ -1,3 +1,3 @@ package types -const VERSION = "2.1.3" +const VERSION = "2.1.4" diff --git a/vendor/github.com/onsi/gomega/CHANGELOG.md b/vendor/github.com/onsi/gomega/CHANGELOG.md index 78ca39a90..4375bbc64 100644 --- a/vendor/github.com/onsi/gomega/CHANGELOG.md +++ b/vendor/github.com/onsi/gomega/CHANGELOG.md @@ -1,3 +1,24 @@ +## 1.19.0 + +## Features +- New [`HaveEach`](https://onsi.github.io/gomega/#haveeachelement-interface) matcher to ensure that each and every element in an `array`, `slice`, or `map` satisfies the passed in matcher. (#523) [9fc2ae2] (#524) [c8ba582] +- Users can now wrap the `Gomega` interface to implement custom behavior on each assertion. (#521) [1f2e714] +- [`ContainElement`](https://onsi.github.io/gomega/#containelementelement-interface) now accepts an additional pointer argument. Elements that satisfy the matcher are stored in the pointer enabling developers to easily add subsequent, more detailed, assertions against the matching element. (#527) [1a4e27f] + +## Fixes +- update RELEASING instructions to match ginkgo [0917cde] +- Bump github.com/onsi/ginkgo/v2 from 2.0.0 to 2.1.3 (#519) [49ab4b0] +- Fix CVE-2021-38561 (#534) [f1b4456] +- Fix max number of samples in experiments on non-64-bit systems. (#528) [1c84497] +- Remove dependency on ginkgo v1.16.4 (#530) [4dea8d5] +- Fix for Go 1.18 (#532) [56d2a29] +- Document precendence of timeouts (#533) [b607941] + +## 1.18.1 + +## Fixes +- Add pointer support to HaveField matcher (#495) [79e41a3] + ## 1.18.0 ## Features diff --git a/vendor/github.com/onsi/gomega/RELEASING.md b/vendor/github.com/onsi/gomega/RELEASING.md index 998d64ee7..2d30d9992 100644 --- a/vendor/github.com/onsi/gomega/RELEASING.md +++ b/vendor/github.com/onsi/gomega/RELEASING.md @@ -7,6 +7,11 @@ A Gomega release is a tagged sha and a GitHub release. To cut a release: - New Features (minor version) - Fixes (fix version) - Maintenance (which in general should not be mentioned in `CHANGELOG.md` as they have no user impact) -2. Update GOMEGA_VERSION in `gomega_dsl.go` -3. Push a commit with the version number as the commit message (e.g. `v1.3.0`) -4. Create a new [GitHub release](https://help.github.com/articles/creating-releases/) with the version number as the tag (e.g. `v1.3.0`). List the key changes in the release notes. +1. Update GOMEGA_VERSION in `gomega_dsl.go` +1. Commit, push, and release: + ``` + git commit -m "vM.m.p" + git push + gh release create "vM.m.p" + git fetch --tags origin master + ``` \ No newline at end of file diff --git a/vendor/github.com/onsi/gomega/go.mod b/vendor/github.com/onsi/gomega/go.mod deleted file mode 100644 index e4ff19d97..000000000 --- a/vendor/github.com/onsi/gomega/go.mod +++ /dev/null @@ -1,11 +0,0 @@ -module github.com/onsi/gomega - -go 1.16 - -require ( - github.com/golang/protobuf v1.5.2 - github.com/onsi/ginkgo/v2 v2.0.0 - golang.org/x/net v0.0.0-20210428140749-89ef3d95e781 - golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e // indirect - gopkg.in/yaml.v2 v2.4.0 -) diff --git a/vendor/github.com/onsi/gomega/go.sum b/vendor/github.com/onsi/gomega/go.sum deleted file mode 100644 index 261fa56b0..000000000 --- a/vendor/github.com/onsi/gomega/go.sum +++ /dev/null @@ -1,100 +0,0 @@ -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= -github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= -github.com/onsi/ginkgo/v2 v2.0.0 h1:CcuG/HvWNkkaqCUpJifQY8z7qEMBJya6aLPx6ftGyjQ= -github.com/onsi/ginkgo/v2 v2.0.0/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= -github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210428140749-89ef3d95e781 h1:DzZ89McO9/gWPsQXS/FVKAlG02ZjaQ6AlZRBimEYOd0= -golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= -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-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -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-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e h1:fLOSk5Q00efkSvAm+4xcoXD+RRmLmmulPn5I3Y9F2EM= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -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.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -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= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -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= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= diff --git a/vendor/github.com/onsi/gomega/gomega_dsl.go b/vendor/github.com/onsi/gomega/gomega_dsl.go index 81181dc94..dcb7e8879 100644 --- a/vendor/github.com/onsi/gomega/gomega_dsl.go +++ b/vendor/github.com/onsi/gomega/gomega_dsl.go @@ -22,7 +22,7 @@ import ( "github.com/onsi/gomega/types" ) -const GOMEGA_VERSION = "1.18.0" +const GOMEGA_VERSION = "1.19.0" const nilGomegaPanic = `You are trying to make an assertion, but haven't registered Gomega's fail handler. If you're using Ginkgo then you probably forgot to put your assertion in an It(). @@ -52,7 +52,7 @@ var Default = Gomega(internal.NewGomega(internal.FetchDefaultDurationBundle())) // rich ecosystem of matchers without causing a test to fail. For example, to aggregate a series of potential failures // or for use in a non-test setting. func NewGomega(fail types.GomegaFailHandler) Gomega { - return internal.NewGomega(Default.(*internal.Gomega).DurationBundle).ConfigureWithFailHandler(fail) + return internal.NewGomega(internalGomega(Default).DurationBundle).ConfigureWithFailHandler(fail) } // WithT wraps a *testing.T and provides `Expect`, `Eventually`, and `Consistently` methods. This allows you to leverage @@ -69,6 +69,20 @@ type WithT = internal.Gomega // GomegaWithT is deprecated in favor of gomega.WithT, which does not stutter. type GomegaWithT = WithT +// inner is an interface that allows users to provide a wrapper around Default. The wrapper +// must implement the inner interface and return either the original Default or the result of +// a call to NewGomega(). +type inner interface { + Inner() Gomega +} + +func internalGomega(g Gomega) *internal.Gomega { + if v, ok := g.(inner); ok { + return v.Inner().(*internal.Gomega) + } + return g.(*internal.Gomega) +} + // NewWithT takes a *testing.T and returngs a `gomega.WithT` allowing you to use `Expect`, `Eventually`, and `Consistently` along with // Gomega's rich ecosystem of matchers in standard `testing` test suits. // @@ -79,7 +93,7 @@ type GomegaWithT = WithT // g.Expect(f.HasCow()).To(BeTrue(), "Farm should have cow") // } func NewWithT(t types.GomegaTestingT) *WithT { - return internal.NewGomega(Default.(*internal.Gomega).DurationBundle).ConfigureWithT(t) + return internal.NewGomega(internalGomega(Default).DurationBundle).ConfigureWithT(t) } // NewGomegaWithT is deprecated in favor of gomega.NewWithT, which does not stutter. @@ -88,20 +102,20 @@ var NewGomegaWithT = NewWithT // RegisterFailHandler connects Ginkgo to Gomega. When a matcher fails // the fail handler passed into RegisterFailHandler is called. func RegisterFailHandler(fail types.GomegaFailHandler) { - Default.(*internal.Gomega).ConfigureWithFailHandler(fail) + internalGomega(Default).ConfigureWithFailHandler(fail) } // RegisterFailHandlerWithT is deprecated and will be removed in a future release. // users should use RegisterFailHandler, or RegisterTestingT func RegisterFailHandlerWithT(_ types.GomegaTestingT, fail types.GomegaFailHandler) { fmt.Println("RegisterFailHandlerWithT is deprecated. Please use RegisterFailHandler or RegisterTestingT instead.") - Default.(*internal.Gomega).ConfigureWithFailHandler(fail) + internalGomega(Default).ConfigureWithFailHandler(fail) } // RegisterTestingT connects Gomega to Golang's XUnit style // Testing.T tests. It is now deprecated and you should use NewWithT() instead to get a fresh instance of Gomega for each test. func RegisterTestingT(t types.GomegaTestingT) { - Default.(*internal.Gomega).ConfigureWithT(t) + internalGomega(Default).ConfigureWithT(t) } // InterceptGomegaFailures runs a given callback and returns an array of @@ -112,13 +126,13 @@ func RegisterTestingT(t types.GomegaTestingT) { // This is most useful when testing custom matchers, but can also be used to check // on a value using a Gomega assertion without causing a test failure. func InterceptGomegaFailures(f func()) []string { - originalHandler := Default.(*internal.Gomega).Fail + originalHandler := internalGomega(Default).Fail failures := []string{} - Default.(*internal.Gomega).Fail = func(message string, callerSkip ...int) { + internalGomega(Default).Fail = func(message string, callerSkip ...int) { failures = append(failures, message) } defer func() { - Default.(*internal.Gomega).Fail = originalHandler + internalGomega(Default).Fail = originalHandler }() f() return failures @@ -131,14 +145,14 @@ func InterceptGomegaFailures(f func()) []string { // does not register a failure with the FailHandler registered via RegisterFailHandler - it is up // to the user to decide what to do with the returned error func InterceptGomegaFailure(f func()) (err error) { - originalHandler := Default.(*internal.Gomega).Fail - Default.(*internal.Gomega).Fail = func(message string, callerSkip ...int) { + originalHandler := internalGomega(Default).Fail + internalGomega(Default).Fail = func(message string, callerSkip ...int) { err = errors.New(message) panic("stop execution") } defer func() { - Default.(*internal.Gomega).Fail = originalHandler + internalGomega(Default).Fail = originalHandler if e := recover(); e != nil { if err == nil { panic(e) @@ -151,7 +165,7 @@ func InterceptGomegaFailure(f func()) (err error) { } func ensureDefaultGomegaIsConfigured() { - if !Default.(*internal.Gomega).IsConfigured() { + if !internalGomega(Default).IsConfigured() { panic(nilGomegaPanic) } } diff --git a/vendor/github.com/onsi/gomega/matchers.go b/vendor/github.com/onsi/gomega/matchers.go index b46e461a5..b58dd67cb 100644 --- a/vendor/github.com/onsi/gomega/matchers.go +++ b/vendor/github.com/onsi/gomega/matchers.go @@ -256,16 +256,26 @@ func BeZero() types.GomegaMatcher { return &matchers.BeZeroMatcher{} } -//ContainElement succeeds if actual contains the passed in element. -//By default ContainElement() uses Equal() to perform the match, however a -//matcher can be passed in instead: +//ContainElement succeeds if actual contains the passed in element. By default +//ContainElement() uses Equal() to perform the match, however a matcher can be +//passed in instead: // Expect([]string{"Foo", "FooBar"}).Should(ContainElement(ContainSubstring("Bar"))) // -//Actual must be an array, slice or map. -//For maps, ContainElement searches through the map's values. -func ContainElement(element interface{}) types.GomegaMatcher { +//Actual must be an array, slice or map. For maps, ContainElement searches +//through the map's values. +// +//If you want to have a copy of the matching element(s) found you can pass a +//pointer to a variable of the appropriate type. If the variable isn't a slice +//or map, then exactly one match will be expected and returned. If the variable +//is a slice or map, then at least one match is expected and all matches will be +//stored in the variable. +// +// var findings []string +// Expect([]string{"Foo", "FooBar"}).Should(ContainElement(ContainSubString("Bar", &findings))) +func ContainElement(element interface{}, result ...interface{}) types.GomegaMatcher { return &matchers.ContainElementMatcher{ Element: element, + Result: result, } } @@ -320,6 +330,20 @@ func ContainElements(elements ...interface{}) types.GomegaMatcher { } } +//HaveEach succeeds if actual solely contains elements that match the passed in element. +//Please note that if actual is empty, HaveEach always will succeed. +//By default HaveEach() uses Equal() to perform the match, however a +//matcher can be passed in instead: +// Expect([]string{"Foo", "FooBar"}).Should(HaveEach(ContainSubstring("Foo"))) +// +//Actual must be an array, slice or map. +//For maps, HaveEach searches through the map's values. +func HaveEach(element interface{}) types.GomegaMatcher { + return &matchers.HaveEachMatcher{ + Element: element, + } +} + //HaveKey succeeds if actual is a map with the passed in key. //By default HaveKey uses Equal() to perform the match, however a //matcher can be passed in instead: diff --git a/vendor/github.com/onsi/gomega/matchers/contain_element_matcher.go b/vendor/github.com/onsi/gomega/matchers/contain_element_matcher.go index 8d6c44c7a..3d45c9ebc 100644 --- a/vendor/github.com/onsi/gomega/matchers/contain_element_matcher.go +++ b/vendor/github.com/onsi/gomega/matchers/contain_element_matcher.go @@ -3,6 +3,7 @@ package matchers import ( + "errors" "fmt" "reflect" @@ -11,6 +12,7 @@ import ( type ContainElementMatcher struct { Element interface{} + Result []interface{} } func (matcher *ContainElementMatcher) Match(actual interface{}) (success bool, err error) { @@ -18,6 +20,49 @@ func (matcher *ContainElementMatcher) Match(actual interface{}) (success bool, e return false, fmt.Errorf("ContainElement matcher expects an array/slice/map. Got:\n%s", format.Object(actual, 1)) } + var actualT reflect.Type + var result reflect.Value + switch l := len(matcher.Result); { + case l > 1: + return false, errors.New("ContainElement matcher expects at most a single optional pointer to store its findings at") + case l == 1: + if reflect.ValueOf(matcher.Result[0]).Kind() != reflect.Ptr { + return false, fmt.Errorf("ContainElement matcher expects a non-nil pointer to store its findings at. Got\n%s", + format.Object(matcher.Result[0], 1)) + } + actualT = reflect.TypeOf(actual) + resultReference := matcher.Result[0] + result = reflect.ValueOf(resultReference).Elem() // what ResultReference points to, to stash away our findings + switch result.Kind() { + case reflect.Array: + return false, fmt.Errorf("ContainElement cannot return findings. Need *%s, got *%s", + reflect.SliceOf(actualT.Elem()).String(), result.Type().String()) + case reflect.Slice: + if !isArrayOrSlice(actual) { + return false, fmt.Errorf("ContainElement cannot return findings. Need *%s, got *%s", + reflect.MapOf(actualT.Key(), actualT.Elem()).String(), result.Type().String()) + } + if !actualT.Elem().AssignableTo(result.Type().Elem()) { + return false, fmt.Errorf("ContainElement cannot return findings. Need *%s, got *%s", + actualT.String(), result.Type().String()) + } + case reflect.Map: + if !isMap(actual) { + return false, fmt.Errorf("ContainElement cannot return findings. Need *%s, got *%s", + actualT.String(), result.Type().String()) + } + if !actualT.AssignableTo(result.Type()) { + return false, fmt.Errorf("ContainElement cannot return findings. Need *%s, got *%s", + actualT.String(), result.Type().String()) + } + default: + if !actualT.Elem().AssignableTo(result.Type()) { + return false, fmt.Errorf("ContainElement cannot return findings. Need *%s, got *%s", + actualT.Elem().String(), result.Type().String()) + } + } + } + elemMatcher, elementIsMatcher := matcher.Element.(omegaMatcher) if !elementIsMatcher { elemMatcher = &EqualMatcher{Expected: matcher.Element} @@ -25,30 +70,99 @@ func (matcher *ContainElementMatcher) Match(actual interface{}) (success bool, e value := reflect.ValueOf(actual) var valueAt func(int) interface{} + + var getFindings func() reflect.Value + var foundAt func(int) + if isMap(actual) { keys := value.MapKeys() valueAt = func(i int) interface{} { return value.MapIndex(keys[i]).Interface() } + if result.Kind() != reflect.Invalid { + fm := reflect.MakeMap(actualT) + getFindings = func() reflect.Value { + return fm + } + foundAt = func(i int) { + fm.SetMapIndex(keys[i], value.MapIndex(keys[i])) + } + } } else { valueAt = func(i int) interface{} { return value.Index(i).Interface() } + if result.Kind() != reflect.Invalid { + var f reflect.Value + if result.Kind() == reflect.Slice { + f = reflect.MakeSlice(result.Type(), 0, 0) + } else { + f = reflect.MakeSlice(reflect.SliceOf(result.Type()), 0, 0) + } + getFindings = func() reflect.Value { + return f + } + foundAt = func(i int) { + f = reflect.Append(f, value.Index(i)) + } + } } var lastError error for i := 0; i < value.Len(); i++ { - success, err := elemMatcher.Match(valueAt(i)) + elem := valueAt(i) + success, err := elemMatcher.Match(elem) if err != nil { lastError = err continue } if success { - return true, nil + if result.Kind() == reflect.Invalid { + return true, nil + } + foundAt(i) } } - return false, lastError + // when the expectation isn't interested in the findings except for success + // or non-success, then we're done here and return the last matcher error + // seen, if any, as well as non-success. + if result.Kind() == reflect.Invalid { + return false, lastError + } + + // pick up any findings the test is interested in as it specified a non-nil + // result reference. However, the expection always is that there are at + // least one or multiple findings. So, if a result is expected, but we had + // no findings, then this is an error. + findings := getFindings() + if findings.Len() == 0 { + return false, lastError + } + + // there's just a single finding and the result is neither a slice nor a map + // (so it's a scalar): pick the one and only finding and return it in the + // place the reference points to. + if findings.Len() == 1 && !isArrayOrSlice(result.Interface()) && !isMap(result.Interface()) { + if isMap(actual) { + miter := findings.MapRange() + miter.Next() + result.Set(miter.Value()) + } else { + result.Set(findings.Index(0)) + } + return true, nil + } + + // at least one or even multiple findings and a the result references a + // slice or a map, so all we need to do is to store our findings where the + // reference points to. + if !findings.Type().AssignableTo(result.Type()) { + return false, fmt.Errorf("ContainElement cannot return multiple findings. Need *%s, got *%s", + findings.Type().String(), result.Type().String()) + } + result.Set(findings) + return true, nil } func (matcher *ContainElementMatcher) FailureMessage(actual interface{}) (message string) { diff --git a/vendor/github.com/onsi/gomega/matchers/have_each_matcher.go b/vendor/github.com/onsi/gomega/matchers/have_each_matcher.go new file mode 100644 index 000000000..025b6e1ac --- /dev/null +++ b/vendor/github.com/onsi/gomega/matchers/have_each_matcher.go @@ -0,0 +1,65 @@ +package matchers + +import ( + "fmt" + "reflect" + + "github.com/onsi/gomega/format" +) + +type HaveEachMatcher struct { + Element interface{} +} + +func (matcher *HaveEachMatcher) Match(actual interface{}) (success bool, err error) { + if !isArrayOrSlice(actual) && !isMap(actual) { + return false, fmt.Errorf("HaveEach matcher expects an array/slice/map. Got:\n%s", + format.Object(actual, 1)) + } + + elemMatcher, elementIsMatcher := matcher.Element.(omegaMatcher) + if !elementIsMatcher { + elemMatcher = &EqualMatcher{Expected: matcher.Element} + } + + value := reflect.ValueOf(actual) + if value.Len() == 0 { + return false, fmt.Errorf("HaveEach matcher expects a non-empty array/slice/map. Got:\n%s", + format.Object(actual, 1)) + } + + var valueAt func(int) interface{} + if isMap(actual) { + keys := value.MapKeys() + valueAt = func(i int) interface{} { + return value.MapIndex(keys[i]).Interface() + } + } else { + valueAt = func(i int) interface{} { + return value.Index(i).Interface() + } + } + + // if there are no elements, then HaveEach will match. + for i := 0; i < value.Len(); i++ { + success, err := elemMatcher.Match(valueAt(i)) + if err != nil { + return false, err + } + if !success { + return false, nil + } + } + + return true, nil +} + +// FailureMessage returns a suitable failure message. +func (matcher *HaveEachMatcher) FailureMessage(actual interface{}) (message string) { + return format.Message(actual, "to contain element matching", matcher.Element) +} + +// NegatedFailureMessage returns a suitable negated failure message. +func (matcher *HaveEachMatcher) NegatedFailureMessage(actual interface{}) (message string) { + return format.Message(actual, "not to contain element matching", matcher.Element) +} diff --git a/vendor/github.com/onsi/gomega/matchers/have_field.go b/vendor/github.com/onsi/gomega/matchers/have_field.go index 2f1a91634..e1fe934d5 100644 --- a/vendor/github.com/onsi/gomega/matchers/have_field.go +++ b/vendor/github.com/onsi/gomega/matchers/have_field.go @@ -12,6 +12,13 @@ func extractField(actual interface{}, field string) (interface{}, error) { fields := strings.SplitN(field, ".", 2) actualValue := reflect.ValueOf(actual) + if actualValue.Kind() == reflect.Ptr { + actualValue = actualValue.Elem() + } + if actualValue == (reflect.Value{}) { + return nil, fmt.Errorf("HaveField encountered nil while dereferencing a pointer of type %T.", actual) + } + if actualValue.Kind() != reflect.Struct { return nil, fmt.Errorf("HaveField encountered:\n%s\nWhich is not a struct.", format.Object(actual, 1)) } diff --git a/vendor/github.com/pelletier/go-toml/go.mod b/vendor/github.com/pelletier/go-toml/go.mod deleted file mode 100644 index 7d29a0a66..000000000 --- a/vendor/github.com/pelletier/go-toml/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module github.com/pelletier/go-toml - -go 1.12 diff --git a/vendor/github.com/pelletier/go-toml/v2/.dockerignore b/vendor/github.com/pelletier/go-toml/v2/.dockerignore new file mode 100644 index 000000000..7b5883475 --- /dev/null +++ b/vendor/github.com/pelletier/go-toml/v2/.dockerignore @@ -0,0 +1,2 @@ +cmd/tomll/tomll +cmd/tomljson/tomljson diff --git a/vendor/github.com/pelletier/go-toml/v2/.gitattributes b/vendor/github.com/pelletier/go-toml/v2/.gitattributes new file mode 100644 index 000000000..34a0a21a3 --- /dev/null +++ b/vendor/github.com/pelletier/go-toml/v2/.gitattributes @@ -0,0 +1,4 @@ +* text=auto + +benchmark/benchmark.toml text eol=lf +testdata/** text eol=lf diff --git a/vendor/github.com/pelletier/go-toml/v2/.gitignore b/vendor/github.com/pelletier/go-toml/v2/.gitignore new file mode 100644 index 000000000..a69e2b0eb --- /dev/null +++ b/vendor/github.com/pelletier/go-toml/v2/.gitignore @@ -0,0 +1,6 @@ +test_program/test_program_bin +fuzz/ +cmd/tomll/tomll +cmd/tomljson/tomljson +cmd/tomltestgen/tomltestgen +dist \ No newline at end of file diff --git a/vendor/github.com/pelletier/go-toml/v2/.golangci.toml b/vendor/github.com/pelletier/go-toml/v2/.golangci.toml new file mode 100644 index 000000000..067db5517 --- /dev/null +++ b/vendor/github.com/pelletier/go-toml/v2/.golangci.toml @@ -0,0 +1,84 @@ +[service] +golangci-lint-version = "1.39.0" + +[linters-settings.wsl] +allow-assign-and-anything = true + +[linters-settings.exhaustive] +default-signifies-exhaustive = true + +[linters] +disable-all = true +enable = [ + "asciicheck", + "bodyclose", + "cyclop", + "deadcode", + "depguard", + "dogsled", + "dupl", + "durationcheck", + "errcheck", + "errorlint", + "exhaustive", + # "exhaustivestruct", + "exportloopref", + "forbidigo", + # "forcetypeassert", + "funlen", + "gci", + # "gochecknoglobals", + "gochecknoinits", + "gocognit", + "goconst", + "gocritic", + "gocyclo", + "godot", + "godox", + # "goerr113", + "gofmt", + "gofumpt", + "goheader", + "goimports", + "golint", + "gomnd", + # "gomoddirectives", + "gomodguard", + "goprintffuncname", + "gosec", + "gosimple", + "govet", + # "ifshort", + "importas", + "ineffassign", + "lll", + "makezero", + "misspell", + "nakedret", + "nestif", + "nilerr", + # "nlreturn", + "noctx", + "nolintlint", + #"paralleltest", + "prealloc", + "predeclared", + "revive", + "rowserrcheck", + "sqlclosecheck", + "staticcheck", + "structcheck", + "stylecheck", + # "testpackage", + "thelper", + "tparallel", + "typecheck", + "unconvert", + "unparam", + "unused", + "varcheck", + "wastedassign", + "whitespace", + # "wrapcheck", + # "wsl" +] diff --git a/vendor/github.com/pelletier/go-toml/v2/.goreleaser.yaml b/vendor/github.com/pelletier/go-toml/v2/.goreleaser.yaml new file mode 100644 index 000000000..793fb1849 --- /dev/null +++ b/vendor/github.com/pelletier/go-toml/v2/.goreleaser.yaml @@ -0,0 +1,111 @@ +before: + hooks: + - go mod tidy + - go fmt ./... + - go test ./... +builds: + - id: tomll + main: ./cmd/tomll + binary: tomll + env: + - CGO_ENABLED=0 + flags: + - -trimpath + ldflags: + - -X main.version={{.Version}} -X main.commit={{.Commit}} -X main.date={{.CommitDate}} + mod_timestamp: '{{ .CommitTimestamp }}' + targets: + - linux_amd64 + - windows_amd64 + - darwin_amd64 + - darwin_arm64 + - id: tomljson + main: ./cmd/tomljson + binary: tomljson + env: + - CGO_ENABLED=0 + flags: + - -trimpath + ldflags: + - -X main.version={{.Version}} -X main.commit={{.Commit}} -X main.date={{.CommitDate}} + mod_timestamp: '{{ .CommitTimestamp }}' + targets: + - linux_amd64 + - windows_amd64 + - darwin_amd64 + - darwin_arm64 + - id: jsontoml + main: ./cmd/jsontoml + binary: jsontoml + env: + - CGO_ENABLED=0 + flags: + - -trimpath + ldflags: + - -X main.version={{.Version}} -X main.commit={{.Commit}} -X main.date={{.CommitDate}} + mod_timestamp: '{{ .CommitTimestamp }}' + targets: + - linux_amd64 + - windows_amd64 + - darwin_amd64 + - darwin_arm64 +universal_binaries: + - id: tomll + replace: true + name_template: tomll + - id: tomljson + replace: true + name_template: tomljson + - id: jsontoml + replace: true + name_template: jsontoml +archives: +- id: jsontoml + format: tar.xz + builds: + - jsontoml + files: + - none* + name_template: "{{ .Binary }}_{{.Version}}_{{ .Os }}_{{ .Arch }}" +- id: tomljson + format: tar.xz + builds: + - tomljson + files: + - none* + name_template: "{{ .Binary }}_{{.Version}}_{{ .Os }}_{{ .Arch }}" +- id: tomll + format: tar.xz + builds: + - tomll + files: + - none* + name_template: "{{ .Binary }}_{{.Version}}_{{ .Os }}_{{ .Arch }}" +dockers: + - id: tools + goos: linux + goarch: amd64 + ids: + - jsontoml + - tomljson + - tomll + image_templates: + - "ghcr.io/pelletier/go-toml:latest" + - "ghcr.io/pelletier/go-toml:{{ .Tag }}" + - "ghcr.io/pelletier/go-toml:v{{ .Major }}" + skip_push: false +checksum: + name_template: 'sha256sums.txt' +snapshot: + name_template: "{{ incpatch .Version }}-next" +release: + github: + owner: pelletier + name: go-toml + draft: true + prerelease: auto + mode: replace +changelog: + use: github-native +announce: + skip: true diff --git a/vendor/github.com/pelletier/go-toml/v2/CONTRIBUTING.md b/vendor/github.com/pelletier/go-toml/v2/CONTRIBUTING.md new file mode 100644 index 000000000..04dd12bcb --- /dev/null +++ b/vendor/github.com/pelletier/go-toml/v2/CONTRIBUTING.md @@ -0,0 +1,196 @@ +# Contributing + +Thank you for your interest in go-toml! We appreciate you considering +contributing to go-toml! + +The main goal is the project is to provide an easy-to-use and efficient TOML +implementation for Go that gets the job done and gets out of your way – dealing +with TOML is probably not the central piece of your project. + +As the single maintainer of go-toml, time is scarce. All help, big or small, is +more than welcomed! + +## Ask questions + +Any question you may have, somebody else might have it too. Always feel free to +ask them on the [discussion board][discussions]. We will try to answer them as +clearly and quickly as possible, time permitting. + +Asking questions also helps us identify areas where the documentation needs +improvement, or new features that weren't envisioned before. Sometimes, a +seemingly innocent question leads to the fix of a bug. Don't hesitate and ask +away! + +[discussions]: https://github.com/pelletier/go-toml/discussions + +## Improve the documentation + +The best way to share your knowledge and experience with go-toml is to improve +the documentation. Fix a typo, clarify an interface, add an example, anything +goes! + +The documentation is present in the [README][readme] and thorough the source +code. On release, it gets updated on [pkg.go.dev][pkg.go.dev]. To make a change +to the documentation, create a pull request with your proposed changes. For +simple changes like that, the easiest way to go is probably the "Fork this +project and edit the file" button on Github, displayed at the top right of the +file. Unless it's a trivial change (for example a typo), provide a little bit of +context in your pull request description or commit message. + +## Report a bug + +Found a bug! Sorry to hear that :(. Help us and other track them down and fix by +reporting it. [File a new bug report][bug-report] on the [issues +tracker][issues-tracker]. The template should provide enough guidance on what to +include. When in doubt: add more details! By reducing ambiguity and providing +more information, it decreases back and forth and saves everyone time. + +## Code changes + +Want to contribute a patch? Very happy to hear that! + +First, some high-level rules: + +- A short proposal with some POC code is better than a lengthy piece of text + with no code. Code speaks louder than words. That being said, bigger changes + should probably start with a [discussion][discussions]. +- No backward-incompatible patch will be accepted unless discussed. Sometimes + it's hard, but we try not to break people's programs unless we absolutely have + to. +- If you are writing a new feature or extending an existing one, make sure to + write some documentation. +- Bug fixes need to be accompanied with regression tests. +- New code needs to be tested. +- Your commit messages need to explain why the change is needed, even if already + included in the PR description. + +It does sound like a lot, but those best practices are here to save time overall +and continuously improve the quality of the project, which is something everyone +benefits from. + +### Get started + +The fairly standard code contribution process looks like that: + +1. [Fork the project][fork]. +2. Make your changes, commit on any branch you like. +3. [Open up a pull request][pull-request] +4. Review, potential ask for changes. +5. Merge. + +Feel free to ask for help! You can create draft pull requests to gather +some early feedback! + +### Run the tests + +You can run tests for go-toml using Go's test tool: `go test -race ./...`. + +During the pull request process, all tests will be ran on Linux, Windows, and +MacOS on the last two versions of Go. + +However, given GitHub's new policy to _not_ run Actions on pull requests until a +maintainer clicks on button, it is highly recommended that you run them locally +as you make changes. + +### Check coverage + +We use `go tool cover` to compute test coverage. Most code editors have a way to +run and display code coverage, but at the end of the day, we do this: + +``` +go test -covermode=atomic -coverprofile=coverage.out +go tool cover -func=coverage.out +``` + +and verify that the overall percentage of tested code does not go down. This is +a requirement. As a rule of thumb, all lines of code touched by your changes +should be covered. On Unix you can use `./ci.sh coverage -d v2` to check if your +code lowers the coverage. + +### Verify performance + +Go-toml aims to stay efficient. We rely on a set of scenarios executed with Go's +builtin benchmark systems. Because of their noisy nature, containers provided by +Github Actions cannot be reliably used for benchmarking. As a result, you are +responsible for checking that your changes do not incur a performance penalty. +You can run their following to execute benchmarks: + +``` +go test ./... -bench=. -count=10 +``` + +Benchmark results should be compared against each other with +[benchstat][benchstat]. Typical flow looks like this: + +1. On the `v2` branch, run `go test ./... -bench=. -count 10` and save output to + a file (for example `old.txt`). +2. Make some code changes. +3. Run `go test ....` again, and save the output to an other file (for example + `new.txt`). +4. Run `benchstat old.txt new.txt` to check that time/op does not go up in any + test. + +On Unix you can use `./ci.sh benchmark -d v2` to verify how your code impacts +performance. + +It is highly encouraged to add the benchstat results to your pull request +description. Pull requests that lower performance will receive more scrutiny. + +[benchstat]: https://pkg.go.dev/golang.org/x/perf/cmd/benchstat + +### Style + +Try to look around and follow the same format and structure as the rest of the +code. We enforce using `go fmt` on the whole code base. + +--- + +## Maintainers-only + +### Merge pull request + +Checklist: + +- Passing CI. +- Does not introduce backward-incompatible changes (unless discussed). +- Has relevant doc changes. +- Benchstat does not show performance regression. +- Pull request is [labeled appropriately][pr-labels]. +- Title will be understandable in the changelog. + +1. Merge using "squash and merge". +2. Make sure to edit the commit message to keep all the useful information + nice and clean. +3. Make sure the commit title is clear and contains the PR number (#123). + +### New release + +1. Decide on the next version number. Use semver. +2. Generate release notes using [`gh`][gh]. Example: +``` +$ gh api -X POST \ + -F tag_name='v2.0.0-beta.5' \ + -F target_commitish='v2' \ + -F previous_tag_name='v2.0.0-beta.4' \ + --jq '.body' \ + repos/pelletier/go-toml/releases/generate-notes +``` +3. Look for "Other changes". That would indicate a pull request not labeled + properly. Tweak labels and pull request titles until changelog looks good for + users. +4. [Draft new release][new-release]. +5. Fill tag and target with the same value used to generate the changelog. +6. Set title to the new tag value. +7. Paste the generated changelog. +8. Check "create discussion", in the "Releases" category. +9. Check pre-release if new version is an alpha or beta. + +[issues-tracker]: https://github.com/pelletier/go-toml/issues +[bug-report]: https://github.com/pelletier/go-toml/issues/new?template=bug_report.md +[pkg.go.dev]: https://pkg.go.dev/github.com/pelletier/go-toml +[readme]: ./README.md +[fork]: https://help.github.com/articles/fork-a-repo +[pull-request]: https://help.github.com/en/articles/creating-a-pull-request +[new-release]: https://github.com/pelletier/go-toml/releases/new +[gh]: https://github.com/cli/cli +[pr-labels]: https://github.com/pelletier/go-toml/blob/v2/.github/release.yml diff --git a/vendor/github.com/pelletier/go-toml/v2/Dockerfile b/vendor/github.com/pelletier/go-toml/v2/Dockerfile new file mode 100644 index 000000000..b9e933237 --- /dev/null +++ b/vendor/github.com/pelletier/go-toml/v2/Dockerfile @@ -0,0 +1,5 @@ +FROM scratch +ENV PATH "$PATH:/bin" +COPY tomll /bin/tomll +COPY tomljson /bin/tomljson +COPY jsontoml /bin/jsontoml diff --git a/vendor/github.com/shurcooL/sanitized_anchor_name/LICENSE b/vendor/github.com/pelletier/go-toml/v2/LICENSE similarity index 92% rename from vendor/github.com/shurcooL/sanitized_anchor_name/LICENSE rename to vendor/github.com/pelletier/go-toml/v2/LICENSE index c35c17af9..3a38ac28b 100644 --- a/vendor/github.com/shurcooL/sanitized_anchor_name/LICENSE +++ b/vendor/github.com/pelletier/go-toml/v2/LICENSE @@ -1,6 +1,6 @@ -MIT License +The MIT License (MIT) -Copyright (c) 2015 Dmitri Shuralyov +Copyright (c) 2013 - 2021 Thomas Pelletier, Eric Anderton Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/vendor/github.com/pelletier/go-toml/v2/README.md b/vendor/github.com/pelletier/go-toml/v2/README.md new file mode 100644 index 000000000..ca5b5ced7 --- /dev/null +++ b/vendor/github.com/pelletier/go-toml/v2/README.md @@ -0,0 +1,556 @@ +# go-toml v2 + +Go library for the [TOML](https://toml.io/en/) format. + +This library supports [TOML v1.0.0](https://toml.io/en/v1.0.0). + +## Development status + +This is the upcoming major version of go-toml. It is currently in active +development. As of release v2.0.0-beta.1, the library has reached feature parity +with v1, and fixes a lot known bugs and performance issues along the way. + +If you do not need the advanced document editing features of v1, you are +encouraged to try out this version. + +[👉 Roadmap for v2](https://github.com/pelletier/go-toml/discussions/506) + +[🐞 Bug Reports](https://github.com/pelletier/go-toml/issues) + +[💬 Anything else](https://github.com/pelletier/go-toml/discussions) + +## Documentation + +Full API, examples, and implementation notes are available in the Go +documentation. + +[![Go Reference](https://pkg.go.dev/badge/github.com/pelletier/go-toml/v2.svg)](https://pkg.go.dev/github.com/pelletier/go-toml/v2) + +## Import + +```go +import "github.com/pelletier/go-toml/v2" +``` + +See [Modules](#Modules). + +## Features + +### Stdlib behavior + +As much as possible, this library is designed to behave similarly as the +standard library's `encoding/json`. + +### Performance + +While go-toml favors usability, it is written with performance in mind. Most +operations should not be shockingly slow. See [benchmarks](#benchmarks). + +### Strict mode + +`Decoder` can be set to "strict mode", which makes it error when some parts of +the TOML document was not prevent in the target structure. This is a great way +to check for typos. [See example in the documentation][strict]. + +[strict]: https://pkg.go.dev/github.com/pelletier/go-toml/v2#example-Decoder.DisallowUnknownFields + +### Contextualized errors + +When most decoding errors occur, go-toml returns [`DecodeError`][decode-err]), +which contains a human readable contextualized version of the error. For +example: + +``` +2| key1 = "value1" +3| key2 = "missing2" + | ~~~~ missing field +4| key3 = "missing3" +5| key4 = "value4" +``` + +[decode-err]: https://pkg.go.dev/github.com/pelletier/go-toml/v2#DecodeError + +### Local date and time support + +TOML supports native [local date/times][ldt]. It allows to represent a given +date, time, or date-time without relation to a timezone or offset. To support +this use-case, go-toml provides [`LocalDate`][tld], [`LocalTime`][tlt], and +[`LocalDateTime`][tldt]. Those types can be transformed to and from `time.Time`, +making them convenient yet unambiguous structures for their respective TOML +representation. + +[ldt]: https://toml.io/en/v1.0.0#local-date-time +[tld]: https://pkg.go.dev/github.com/pelletier/go-toml/v2#LocalDate +[tlt]: https://pkg.go.dev/github.com/pelletier/go-toml/v2#LocalTime +[tldt]: https://pkg.go.dev/github.com/pelletier/go-toml/v2#LocalDateTime + +## Getting started + +Given the following struct, let's see how to read it and write it as TOML: + +```go +type MyConfig struct { + Version int + Name string + Tags []string +} +``` + +### Unmarshaling + +[`Unmarshal`][unmarshal] reads a TOML document and fills a Go structure with its +content. For example: + +```go +doc := ` +version = 2 +name = "go-toml" +tags = ["go", "toml"] +` + +var cfg MyConfig +err := toml.Unmarshal([]byte(doc), &cfg) +if err != nil { + panic(err) +} +fmt.Println("version:", cfg.Version) +fmt.Println("name:", cfg.Name) +fmt.Println("tags:", cfg.Tags) + +// Output: +// version: 2 +// name: go-toml +// tags: [go toml] +``` + +[unmarshal]: https://pkg.go.dev/github.com/pelletier/go-toml/v2#Unmarshal + +### Marshaling + +[`Marshal`][marshal] is the opposite of Unmarshal: it represents a Go structure +as a TOML document: + +```go +cfg := MyConfig{ + Version: 2, + Name: "go-toml", + Tags: []string{"go", "toml"}, +} + +b, err := toml.Marshal(cfg) +if err != nil { + panic(err) +} +fmt.Println(string(b)) + +// Output: +// Version = 2 +// Name = 'go-toml' +// Tags = ['go', 'toml'] +``` + +[marshal]: https://pkg.go.dev/github.com/pelletier/go-toml/v2#Marshal + +## Benchmarks + +Execution time speedup compared to other Go TOML libraries: + + + + + + + + + + + + + +
Benchmarkgo-toml v1BurntSushi/toml
Marshal/HugoFrontMatter-21.9x1.9x
Marshal/ReferenceFile/map-21.7x1.8x
Marshal/ReferenceFile/struct-22.2x2.5x
Unmarshal/HugoFrontMatter-22.9x2.9x
Unmarshal/ReferenceFile/map-22.6x2.9x
Unmarshal/ReferenceFile/struct-24.4x5.3x
+
See more +

The table above has the results of the most common use-cases. The table below +contains the results of all benchmarks, including unrealistic ones. It is +provided for completeness.

+ + + + + + + + + + + + + + + + + + +
Benchmarkgo-toml v1BurntSushi/toml
Marshal/SimpleDocument/map-21.8x2.9x
Marshal/SimpleDocument/struct-22.7x4.2x
Unmarshal/SimpleDocument/map-24.5x3.1x
Unmarshal/SimpleDocument/struct-26.2x3.9x
UnmarshalDataset/example-23.1x3.5x
UnmarshalDataset/code-22.3x3.1x
UnmarshalDataset/twitter-22.5x2.6x
UnmarshalDataset/citm_catalog-22.1x2.2x
UnmarshalDataset/canada-21.6x1.3x
UnmarshalDataset/config-24.3x3.2x
[Geo mean]2.7x2.8x
+

This table can be generated with ./ci.sh benchmark -a -html.

+
+ +## Modules + +go-toml uses Go's standard modules system. + +Installation instructions: + +- Go ≥ 1.16: Nothing to do. Use the import in your code. The `go` command deals + with it automatically. +- Go ≥ 1.13: `GO111MODULE=on go get github.com/pelletier/go-toml/v2`. + +In case of trouble: [Go Modules FAQ][mod-faq]. + +[mod-faq]: https://github.com/golang/go/wiki/Modules#why-does-installing-a-tool-via-go-get-fail-with-error-cannot-find-main-module + +## Tools + +Go-toml provides three handy command line tools: + + * `tomljson`: Reads a TOML file and outputs its JSON representation. + + ``` + $ go install github.com/pelletier/go-toml/v2/cmd/tomljson@latest + $ tomljson --help + ``` + + * `jsontoml`: Reads a JSON file and outputs a TOML representation. + + ``` + $ go install github.com/pelletier/go-toml/v2/cmd/jsontoml@latest + $ jsontoml --help + ``` + + * `tomll`: Lints and reformats a TOML file. + + ``` + $ go install github.com/pelletier/go-toml/v2/cmd/tomll@latest + $ tomll --help + ``` + +### Docker image + +Those tools are also available as a [Docker image][docker]. For example, to use +`tomljson`: + +``` +docker run -i ghcr.io/pelletier/go-toml:v2 tomljson < example.toml +``` + +Multiple versions are availble on [ghcr.io][docker]. + +[docker]: https://github.com/pelletier/go-toml/pkgs/container/go-toml + +## Migrating from v1 + +This section describes the differences between v1 and v2, with some pointers on +how to get the original behavior when possible. + +### Decoding / Unmarshal + +#### Automatic field name guessing + +When unmarshaling to a struct, if a key in the TOML document does not exactly +match the name of a struct field or any of the `toml`-tagged field, v1 tries +multiple variations of the key ([code][v1-keys]). + +V2 instead does a case-insensitive matching, like `encoding/json`. + +This could impact you if you are relying on casing to differentiate two fields, +and one of them is a not using the `toml` struct tag. The recommended solution +is to be specific about tag names for those fields using the `toml` struct tag. + +[v1-keys]: https://github.com/pelletier/go-toml/blob/a2e52561804c6cd9392ebf0048ca64fe4af67a43/marshal.go#L775-L781 + +#### Ignore preexisting value in interface + +When decoding into a non-nil `interface{}`, go-toml v1 uses the type of the +element in the interface to decode the object. For example: + +```go +type inner struct { + B interface{} +} +type doc struct { + A interface{} +} + +d := doc{ + A: inner{ + B: "Before", + }, +} + +data := ` +[A] +B = "After" +` + +toml.Unmarshal([]byte(data), &d) +fmt.Printf("toml v1: %#v\n", d) + +// toml v1: main.doc{A:main.inner{B:"After"}} +``` + +In this case, field `A` is of type `interface{}`, containing a `inner` struct. +V1 sees that type and uses it when decoding the object. + +When decoding an object into an `interface{}`, V2 instead disregards whatever +value the `interface{}` may contain and replaces it with a +`map[string]interface{}`. With the same data structure as above, here is what +the result looks like: + +```go +toml.Unmarshal([]byte(data), &d) +fmt.Printf("toml v2: %#v\n", d) + +// toml v2: main.doc{A:map[string]interface {}{"B":"After"}} +``` + +This is to match `encoding/json`'s behavior. There is no way to make the v2 +decoder behave like v1. + +#### Values out of array bounds ignored + +When decoding into an array, v1 returns an error when the number of elements +contained in the doc is superior to the capacity of the array. For example: + +```go +type doc struct { + A [2]string +} +d := doc{} +err := toml.Unmarshal([]byte(`A = ["one", "two", "many"]`), &d) +fmt.Println(err) + +// (1, 1): unmarshal: TOML array length (3) exceeds destination array length (2) +``` + +In the same situation, v2 ignores the last value: + +```go +err := toml.Unmarshal([]byte(`A = ["one", "two", "many"]`), &d) +fmt.Println("err:", err, "d:", d) +// err: d: {[one two]} +``` + +This is to match `encoding/json`'s behavior. There is no way to make the v2 +decoder behave like v1. + +#### Support for `toml.Unmarshaler` has been dropped + +This method was not widely used, poorly defined, and added a lot of complexity. +A similar effect can be achieved by implementing the `encoding.TextUnmarshaler` +interface and use strings. + +#### Support for `default` struct tag has been dropped + +This feature adds complexity and a poorly defined API for an effect that can be +accomplished outside of the library. + +It does not seem like other format parsers in Go support that feature (the +project referenced in the original ticket #202 has not been updated since 2017). +Given that go-toml v2 should not touch values not in the document, the same +effect can be achieved by pre-filling the struct with defaults (libraries like +[go-defaults][go-defaults] can help). Also, string representation is not well +defined for all types: it creates issues like #278. + +The recommended replacement is pre-filling the struct before unmarshaling. + +[go-defaults]: https://github.com/mcuadros/go-defaults + +#### `toml.Tree` replacement + +This structure was the initial attempt at providing a document model for +go-toml. It allows manipulating the structure of any document, encoding and +decoding from their TOML representation. While a more robust feature was +initially planned in go-toml v2, this has been ultimately [removed from +scope][nodoc] of this library, with no plan to add it back at the moment. The +closest equivalent at the moment would be to unmarshal into an `interface{}` and +use type assertions and/or reflection to manipulate the arbitrary +structure. However this would fall short of providing all of the TOML features +such as adding comments and be specific about whitespace. + + +#### `toml.Position` are not retrievable anymore + +The API for retrieving the position (line, column) of a specific TOML element do +not exist anymore. This was done to minimize the amount of concepts introduced +by the library (query path), and avoid the performance hit related to storing +positions in the absence of a document model, for a feature that seemed to have +little use. Errors however have gained more detailed position +information. Position retrieval seems better fitted for a document model, which +has been [removed from the scope][nodoc] of go-toml v2 at the moment. + +### Encoding / Marshal + +#### Default struct fields order + +V1 emits struct fields order alphabetically by default. V2 struct fields are +emitted in order they are defined. For example: + +```go +type S struct { + B string + A string +} + +data := S{ + B: "B", + A: "A", +} + +b, _ := tomlv1.Marshal(data) +fmt.Println("v1:\n" + string(b)) + +b, _ = tomlv2.Marshal(data) +fmt.Println("v2:\n" + string(b)) + +// Output: +// v1: +// A = "A" +// B = "B" + +// v2: +// B = 'B' +// A = 'A' +``` + +There is no way to make v2 encoder behave like v1. A workaround could be to +manually sort the fields alphabetically in the struct definition, or generate +struct types using `reflect.StructOf`. + +#### No indentation by default + +V1 automatically indents content of tables by default. V2 does not. However the +same behavior can be obtained using [`Encoder.SetIndentTables`][sit]. For example: + +```go +data := map[string]interface{}{ + "table": map[string]string{ + "key": "value", + }, +} + +b, _ := tomlv1.Marshal(data) +fmt.Println("v1:\n" + string(b)) + +b, _ = tomlv2.Marshal(data) +fmt.Println("v2:\n" + string(b)) + +buf := bytes.Buffer{} +enc := tomlv2.NewEncoder(&buf) +enc.SetIndentTables(true) +enc.Encode(data) +fmt.Println("v2 Encoder:\n" + string(buf.Bytes())) + +// Output: +// v1: +// +// [table] +// key = "value" +// +// v2: +// [table] +// key = 'value' +// +// +// v2 Encoder: +// [table] +// key = 'value' +``` + +[sit]: https://pkg.go.dev/github.com/pelletier/go-toml/v2#Encoder.SetIndentTables + +#### Keys and strings are single quoted + +V1 always uses double quotes (`"`) around strings and keys that cannot be +represented bare (unquoted). V2 uses single quotes instead by default (`'`), +unless a character cannot be represented, then falls back to double quotes. As a +result of this change, `Encoder.QuoteMapKeys` has been removed, as it is not +useful anymore. + +There is no way to make v2 encoder behave like v1. + +#### `TextMarshaler` emits as a string, not TOML + +Types that implement [`encoding.TextMarshaler`][tm] can emit arbitrary TOML in +v1. The encoder would append the result to the output directly. In v2 the result +is wrapped in a string. As a result, this interface cannot be implemented by the +root object. + +There is no way to make v2 encoder behave like v1. + +[tm]: https://golang.org/pkg/encoding/#TextMarshaler + +#### `Encoder.CompactComments` has been removed + +Emitting compact comments is now the default behavior of go-toml. This option +is not necessary anymore. + +#### Struct tags have been merged + +V1 used to provide multiple struct tags: `comment`, `commented`, `multiline`, +`toml`, and `omitempty`. To behave more like the standard library, v2 has merged +`toml`, `multiline`, and `omitempty`. For example: + +```go +type doc struct { + // v1 + F string `toml:"field" multiline:"true" omitempty:"true"` + // v2 + F string `toml:"field,multiline,omitempty"` +} +``` + +Has a result, the `Encoder.SetTag*` methods have been removed, as there is just +one tag now. + + +#### `commented` tag has been removed + +There is no replacement for the `commented` tag. This feature would be better +suited in a proper document model for go-toml v2, which has been [cut from +scope][nodoc] at the moment. + +#### `Encoder.ArraysWithOneElementPerLine` has been renamed + +The new name is `Encoder.SetArraysMultiline`. The behavior should be the same. + +#### `Encoder.Indentation` has been renamed + +The new name is `Encoder.SetIndentSymbol`. The behavior should be the same. + + +#### Embedded structs behave like stdlib + +V1 defaults to merging embedded struct fields into the embedding struct. This +behavior was unexpected because it does not follow the standard library. To +avoid breaking backward compatibility, the `Encoder.PromoteAnonymous` method was +added to make the encoder behave correctly. Given backward compatibility is not +a problem anymore, v2 does the right thing by default: it follows the behavior +of `encoding/json`. `Encoder.PromoteAnonymous` has been removed. + +[nodoc]: https://github.com/pelletier/go-toml/discussions/506#discussioncomment-1526038 + +### `query` + +go-toml v1 provided the [`go-toml/query`][query] package. It allowed to run +JSONPath-style queries on TOML files. This feature is not available in v2. For a +replacement, check out [dasel][dasel]. + +This package has been removed because it was essentially not supported anymore +(last commit May 2020), increased the complexity of the code base, and more +complete solutions exist out there. + +[query]: https://github.com/pelletier/go-toml/tree/f99d6bbca119636aeafcf351ee52b3d202782627/query +[dasel]: https://github.com/TomWright/dasel + +## License + +The MIT License (MIT). Read [LICENSE](LICENSE). diff --git a/vendor/github.com/pelletier/go-toml/v2/SECURITY.md b/vendor/github.com/pelletier/go-toml/v2/SECURITY.md new file mode 100644 index 000000000..b2f21cfc9 --- /dev/null +++ b/vendor/github.com/pelletier/go-toml/v2/SECURITY.md @@ -0,0 +1,19 @@ +# Security Policy + +## Supported Versions + +Use this section to tell people about which versions of your project are +currently being supported with security updates. + +| Version | Supported | +| ---------- | ------------------ | +| Latest 2.x | :white_check_mark: | +| All 1.x | :x: | +| All 0.x | :x: | + +## Reporting a Vulnerability + +Email a vulnerability report to `security@pelletier.codes`. Make sure to include +as many details as possible to reproduce the vulnerability. This is a +side-project: I will try to get back to you as quickly as possible, time +permitting in my personal life. Providing a working patch helps very much! diff --git a/vendor/github.com/pelletier/go-toml/v2/ci.sh b/vendor/github.com/pelletier/go-toml/v2/ci.sh new file mode 100644 index 000000000..d916c5f23 --- /dev/null +++ b/vendor/github.com/pelletier/go-toml/v2/ci.sh @@ -0,0 +1,279 @@ +#!/usr/bin/env bash + + +stderr() { + echo "$@" 1>&2 +} + +usage() { + b=$(basename "$0") + echo $b: ERROR: "$@" 1>&2 + + cat 1>&2 < coverage.out + go tool cover -func=coverage.out + popd + + if [ "${branch}" != "HEAD" ]; then + git worktree remove --force "$dir" + fi +} + +coverage() { + case "$1" in + -d) + shift + target="${1?Need to provide a target branch argument}" + + output_dir="$(mktemp -d)" + target_out="${output_dir}/target.txt" + head_out="${output_dir}/head.txt" + + cover "${target}" > "${target_out}" + cover "HEAD" > "${head_out}" + + cat "${target_out}" + cat "${head_out}" + + echo "" + + target_pct="$(tail -n2 ${target_out} | head -n1 | sed -E 's/.*total.*\t([0-9.]+)%.*/\1/')" + head_pct="$(tail -n2 ${head_out} | head -n1 | sed -E 's/.*total.*\t([0-9.]+)%/\1/')" + echo "Results: ${target} ${target_pct}% HEAD ${head_pct}%" + + delta_pct=$(echo "$head_pct - $target_pct" | bc -l) + echo "Delta: ${delta_pct}" + + if [[ $delta_pct = \-* ]]; then + echo "Regression!"; + + target_diff="${output_dir}/target.diff.txt" + head_diff="${output_dir}/head.diff.txt" + cat "${target_out}" | grep -E '^github.com/pelletier/go-toml' | tr -s "\t " | cut -f 2,3 | sort > "${target_diff}" + cat "${head_out}" | grep -E '^github.com/pelletier/go-toml' | tr -s "\t " | cut -f 2,3 | sort > "${head_diff}" + + diff --side-by-side --suppress-common-lines "${target_diff}" "${head_diff}" + return 1 + fi + return 0 + ;; + esac + + cover "${1-HEAD}" +} + +bench() { + branch="${1}" + out="${2}" + replace="${3}" + dir="$(mktemp -d)" + + stderr "Executing benchmark for ${branch} at ${dir}" + + if [ "${branch}" = "HEAD" ]; then + cp -r . "${dir}/" + else + git worktree add "$dir" "$branch" + fi + + pushd "$dir" + + if [ "${replace}" != "" ]; then + find ./benchmark/ -iname '*.go' -exec sed -i -E "s|github.com/pelletier/go-toml/v2|${replace}|g" {} \; + go get "${replace}" + fi + + export GOMAXPROCS=2 + nice -n -19 taskset --cpu-list 0,1 go test '-bench=^Benchmark(Un)?[mM]arshal' -count=5 -run=Nothing ./... | tee "${out}" + popd + + if [ "${branch}" != "HEAD" ]; then + git worktree remove --force "$dir" + fi +} + +fmktemp() { + if mktemp --version|grep GNU >/dev/null; then + mktemp --suffix=-$1; + else + mktemp -t $1; + fi +} + +benchstathtml() { +python3 - $1 <<'EOF' +import sys + +lines = [] +stop = False + +with open(sys.argv[1]) as f: + for line in f.readlines(): + line = line.strip() + if line == "": + stop = True + if not stop: + lines.append(line.split(',')) + +results = [] +for line in reversed(lines[1:]): + v2 = float(line[1]) + results.append([ + line[0].replace("-32", ""), + "%.1fx" % (float(line[3])/v2), # v1 + "%.1fx" % (float(line[5])/v2), # bs + ]) +# move geomean to the end +results.append(results[0]) +del results[0] + + +def printtable(data): + print(""" + + + + + """) + + for r in data: + print(" ".format(*r)) + + print(""" +
Benchmarkgo-toml v1BurntSushi/toml
{}{}{}
""") + + +def match(x): + return "ReferenceFile" in x[0] or "HugoFrontMatter" in x[0] + +above = [x for x in results if match(x)] +below = [x for x in results if not match(x)] + +printtable(above) +print("
See more") +print("""

The table above has the results of the most common use-cases. The table below +contains the results of all benchmarks, including unrealistic ones. It is +provided for completeness.

""") +printtable(below) +print('

This table can be generated with ./ci.sh benchmark -a -html.

') +print("
") + +EOF +} + +benchmark() { + case "$1" in + -d) + shift + target="${1?Need to provide a target branch argument}" + + old=`fmktemp ${target}` + bench "${target}" "${old}" + + new=`fmktemp HEAD` + bench HEAD "${new}" + + benchstat "${old}" "${new}" + return 0 + ;; + -a) + shift + + v2stats=`fmktemp go-toml-v2` + bench HEAD "${v2stats}" "github.com/pelletier/go-toml/v2" + v1stats=`fmktemp go-toml-v1` + bench HEAD "${v1stats}" "github.com/pelletier/go-toml" + bsstats=`fmktemp bs-toml` + bench HEAD "${bsstats}" "github.com/BurntSushi/toml" + + cp "${v2stats}" go-toml-v2.txt + cp "${v1stats}" go-toml-v1.txt + cp "${bsstats}" bs-toml.txt + + if [ "$1" = "-html" ]; then + tmpcsv=`fmktemp csv` + benchstat -csv -geomean go-toml-v2.txt go-toml-v1.txt bs-toml.txt > $tmpcsv + benchstathtml $tmpcsv + else + benchstat -geomean go-toml-v2.txt go-toml-v1.txt bs-toml.txt + fi + + rm -f go-toml-v2.txt go-toml-v1.txt bs-toml.txt + return $? + esac + + bench "${1-HEAD}" `mktemp` +} + +case "$1" in + coverage) shift; coverage $@;; + benchmark) shift; benchmark $@;; + *) usage "bad argument $1";; +esac diff --git a/vendor/github.com/pelletier/go-toml/v2/decode.go b/vendor/github.com/pelletier/go-toml/v2/decode.go new file mode 100644 index 000000000..4af965360 --- /dev/null +++ b/vendor/github.com/pelletier/go-toml/v2/decode.go @@ -0,0 +1,544 @@ +package toml + +import ( + "fmt" + "math" + "strconv" + "time" +) + +func parseInteger(b []byte) (int64, error) { + if len(b) > 2 && b[0] == '0' { + switch b[1] { + case 'x': + return parseIntHex(b) + case 'b': + return parseIntBin(b) + case 'o': + return parseIntOct(b) + default: + panic(fmt.Errorf("invalid base '%c', should have been checked by scanIntOrFloat", b[1])) + } + } + + return parseIntDec(b) +} + +func parseLocalDate(b []byte) (LocalDate, error) { + // full-date = date-fullyear "-" date-month "-" date-mday + // date-fullyear = 4DIGIT + // date-month = 2DIGIT ; 01-12 + // date-mday = 2DIGIT ; 01-28, 01-29, 01-30, 01-31 based on month/year + var date LocalDate + + if len(b) != 10 || b[4] != '-' || b[7] != '-' { + return date, newDecodeError(b, "dates are expected to have the format YYYY-MM-DD") + } + + var err error + + date.Year, err = parseDecimalDigits(b[0:4]) + if err != nil { + return LocalDate{}, err + } + + date.Month, err = parseDecimalDigits(b[5:7]) + if err != nil { + return LocalDate{}, err + } + + date.Day, err = parseDecimalDigits(b[8:10]) + if err != nil { + return LocalDate{}, err + } + + if !isValidDate(date.Year, date.Month, date.Day) { + return LocalDate{}, newDecodeError(b, "impossible date") + } + + return date, nil +} + +func parseDecimalDigits(b []byte) (int, error) { + v := 0 + + for i, c := range b { + if c < '0' || c > '9' { + return 0, newDecodeError(b[i:i+1], "expected digit (0-9)") + } + v *= 10 + v += int(c - '0') + } + + return v, nil +} + +func parseDateTime(b []byte) (time.Time, error) { + // offset-date-time = full-date time-delim full-time + // full-time = partial-time time-offset + // time-offset = "Z" / time-numoffset + // time-numoffset = ( "+" / "-" ) time-hour ":" time-minute + + dt, b, err := parseLocalDateTime(b) + if err != nil { + return time.Time{}, err + } + + var zone *time.Location + + if len(b) == 0 { + // parser should have checked that when assigning the date time node + panic("date time should have a timezone") + } + + if b[0] == 'Z' || b[0] == 'z' { + b = b[1:] + zone = time.UTC + } else { + const dateTimeByteLen = 6 + if len(b) != dateTimeByteLen { + return time.Time{}, newDecodeError(b, "invalid date-time timezone") + } + var direction int + switch b[0] { + case '-': + direction = -1 + case '+': + direction = +1 + default: + return time.Time{}, newDecodeError(b[:1], "invalid timezone offset character") + } + + if b[3] != ':' { + return time.Time{}, newDecodeError(b[3:4], "expected a : separator") + } + + hours, err := parseDecimalDigits(b[1:3]) + if err != nil { + return time.Time{}, err + } + if hours > 23 { + return time.Time{}, newDecodeError(b[:1], "invalid timezone offset hours") + } + + minutes, err := parseDecimalDigits(b[4:6]) + if err != nil { + return time.Time{}, err + } + if minutes > 59 { + return time.Time{}, newDecodeError(b[:1], "invalid timezone offset minutes") + } + + seconds := direction * (hours*3600 + minutes*60) + if seconds == 0 { + zone = time.UTC + } else { + zone = time.FixedZone("", seconds) + } + b = b[dateTimeByteLen:] + } + + if len(b) > 0 { + return time.Time{}, newDecodeError(b, "extra bytes at the end of the timezone") + } + + t := time.Date( + dt.Year, + time.Month(dt.Month), + dt.Day, + dt.Hour, + dt.Minute, + dt.Second, + dt.Nanosecond, + zone) + + return t, nil +} + +func parseLocalDateTime(b []byte) (LocalDateTime, []byte, error) { + var dt LocalDateTime + + const localDateTimeByteMinLen = 11 + if len(b) < localDateTimeByteMinLen { + return dt, nil, newDecodeError(b, "local datetimes are expected to have the format YYYY-MM-DDTHH:MM:SS[.NNNNNNNNN]") + } + + date, err := parseLocalDate(b[:10]) + if err != nil { + return dt, nil, err + } + dt.LocalDate = date + + sep := b[10] + if sep != 'T' && sep != ' ' && sep != 't' { + return dt, nil, newDecodeError(b[10:11], "datetime separator is expected to be T or a space") + } + + t, rest, err := parseLocalTime(b[11:]) + if err != nil { + return dt, nil, err + } + dt.LocalTime = t + + return dt, rest, nil +} + +// parseLocalTime is a bit different because it also returns the remaining +// []byte that is didn't need. This is to allow parseDateTime to parse those +// remaining bytes as a timezone. +func parseLocalTime(b []byte) (LocalTime, []byte, error) { + var ( + nspow = [10]int{0, 1e8, 1e7, 1e6, 1e5, 1e4, 1e3, 1e2, 1e1, 1e0} + t LocalTime + ) + + // check if b matches to have expected format HH:MM:SS[.NNNNNN] + const localTimeByteLen = 8 + if len(b) < localTimeByteLen { + return t, nil, newDecodeError(b, "times are expected to have the format HH:MM:SS[.NNNNNN]") + } + + var err error + + t.Hour, err = parseDecimalDigits(b[0:2]) + if err != nil { + return t, nil, err + } + + if t.Hour > 23 { + return t, nil, newDecodeError(b[0:2], "hour cannot be greater 23") + } + if b[2] != ':' { + return t, nil, newDecodeError(b[2:3], "expecting colon between hours and minutes") + } + + t.Minute, err = parseDecimalDigits(b[3:5]) + if err != nil { + return t, nil, err + } + if t.Minute > 59 { + return t, nil, newDecodeError(b[3:5], "minutes cannot be greater 59") + } + if b[5] != ':' { + return t, nil, newDecodeError(b[5:6], "expecting colon between minutes and seconds") + } + + t.Second, err = parseDecimalDigits(b[6:8]) + if err != nil { + return t, nil, err + } + + if t.Second > 60 { + return t, nil, newDecodeError(b[6:8], "seconds cannot be greater 60") + } + + b = b[8:] + + if len(b) >= 1 && b[0] == '.' { + frac := 0 + precision := 0 + digits := 0 + + for i, c := range b[1:] { + if !isDigit(c) { + if i == 0 { + return t, nil, newDecodeError(b[0:1], "need at least one digit after fraction point") + } + break + } + digits++ + + const maxFracPrecision = 9 + if i >= maxFracPrecision { + // go-toml allows decoding fractional seconds + // beyond the supported precision of 9 + // digits. It truncates the fractional component + // to the supported precision and ignores the + // remaining digits. + // + // https://github.com/pelletier/go-toml/discussions/707 + continue + } + + frac *= 10 + frac += int(c - '0') + precision++ + } + + if precision == 0 { + return t, nil, newDecodeError(b[:1], "nanoseconds need at least one digit") + } + + t.Nanosecond = frac * nspow[precision] + t.Precision = precision + + return t, b[1+digits:], nil + } + return t, b, nil +} + +//nolint:cyclop +func parseFloat(b []byte) (float64, error) { + if len(b) == 4 && (b[0] == '+' || b[0] == '-') && b[1] == 'n' && b[2] == 'a' && b[3] == 'n' { + return math.NaN(), nil + } + + cleaned, err := checkAndRemoveUnderscoresFloats(b) + if err != nil { + return 0, err + } + + if cleaned[0] == '.' { + return 0, newDecodeError(b, "float cannot start with a dot") + } + + if cleaned[len(cleaned)-1] == '.' { + return 0, newDecodeError(b, "float cannot end with a dot") + } + + dotAlreadySeen := false + for i, c := range cleaned { + if c == '.' { + if dotAlreadySeen { + return 0, newDecodeError(b[i:i+1], "float can have at most one decimal point") + } + if !isDigit(cleaned[i-1]) { + return 0, newDecodeError(b[i-1:i+1], "float decimal point must be preceded by a digit") + } + if !isDigit(cleaned[i+1]) { + return 0, newDecodeError(b[i:i+2], "float decimal point must be followed by a digit") + } + dotAlreadySeen = true + } + } + + start := 0 + if cleaned[0] == '+' || cleaned[0] == '-' { + start = 1 + } + if cleaned[start] == '0' && isDigit(cleaned[start+1]) { + return 0, newDecodeError(b, "float integer part cannot have leading zeroes") + } + + f, err := strconv.ParseFloat(string(cleaned), 64) + if err != nil { + return 0, newDecodeError(b, "unable to parse float: %w", err) + } + + return f, nil +} + +func parseIntHex(b []byte) (int64, error) { + cleaned, err := checkAndRemoveUnderscoresIntegers(b[2:]) + if err != nil { + return 0, err + } + + i, err := strconv.ParseInt(string(cleaned), 16, 64) + if err != nil { + return 0, newDecodeError(b, "couldn't parse hexadecimal number: %w", err) + } + + return i, nil +} + +func parseIntOct(b []byte) (int64, error) { + cleaned, err := checkAndRemoveUnderscoresIntegers(b[2:]) + if err != nil { + return 0, err + } + + i, err := strconv.ParseInt(string(cleaned), 8, 64) + if err != nil { + return 0, newDecodeError(b, "couldn't parse octal number: %w", err) + } + + return i, nil +} + +func parseIntBin(b []byte) (int64, error) { + cleaned, err := checkAndRemoveUnderscoresIntegers(b[2:]) + if err != nil { + return 0, err + } + + i, err := strconv.ParseInt(string(cleaned), 2, 64) + if err != nil { + return 0, newDecodeError(b, "couldn't parse binary number: %w", err) + } + + return i, nil +} + +func isSign(b byte) bool { + return b == '+' || b == '-' +} + +func parseIntDec(b []byte) (int64, error) { + cleaned, err := checkAndRemoveUnderscoresIntegers(b) + if err != nil { + return 0, err + } + + startIdx := 0 + + if isSign(cleaned[0]) { + startIdx++ + } + + if len(cleaned) > startIdx+1 && cleaned[startIdx] == '0' { + return 0, newDecodeError(b, "leading zero not allowed on decimal number") + } + + i, err := strconv.ParseInt(string(cleaned), 10, 64) + if err != nil { + return 0, newDecodeError(b, "couldn't parse decimal number: %w", err) + } + + return i, nil +} + +func checkAndRemoveUnderscoresIntegers(b []byte) ([]byte, error) { + start := 0 + if b[start] == '+' || b[start] == '-' { + start++ + } + + if len(b) == start { + return b, nil + } + + if b[start] == '_' { + return nil, newDecodeError(b[start:start+1], "number cannot start with underscore") + } + + if b[len(b)-1] == '_' { + return nil, newDecodeError(b[len(b)-1:], "number cannot end with underscore") + } + + // fast path + i := 0 + for ; i < len(b); i++ { + if b[i] == '_' { + break + } + } + if i == len(b) { + return b, nil + } + + before := false + cleaned := make([]byte, i, len(b)) + copy(cleaned, b) + + for i++; i < len(b); i++ { + c := b[i] + if c == '_' { + if !before { + return nil, newDecodeError(b[i-1:i+1], "number must have at least one digit between underscores") + } + before = false + } else { + before = true + cleaned = append(cleaned, c) + } + } + + return cleaned, nil +} + +func checkAndRemoveUnderscoresFloats(b []byte) ([]byte, error) { + if b[0] == '_' { + return nil, newDecodeError(b[0:1], "number cannot start with underscore") + } + + if b[len(b)-1] == '_' { + return nil, newDecodeError(b[len(b)-1:], "number cannot end with underscore") + } + + // fast path + i := 0 + for ; i < len(b); i++ { + if b[i] == '_' { + break + } + } + if i == len(b) { + return b, nil + } + + before := false + cleaned := make([]byte, 0, len(b)) + + for i := 0; i < len(b); i++ { + c := b[i] + + switch c { + case '_': + if !before { + return nil, newDecodeError(b[i-1:i+1], "number must have at least one digit between underscores") + } + if i < len(b)-1 && (b[i+1] == 'e' || b[i+1] == 'E') { + return nil, newDecodeError(b[i+1:i+2], "cannot have underscore before exponent") + } + before = false + case '+', '-': + // signed exponents + cleaned = append(cleaned, c) + before = false + case 'e', 'E': + if i < len(b)-1 && b[i+1] == '_' { + return nil, newDecodeError(b[i+1:i+2], "cannot have underscore after exponent") + } + cleaned = append(cleaned, c) + case '.': + if i < len(b)-1 && b[i+1] == '_' { + return nil, newDecodeError(b[i+1:i+2], "cannot have underscore after decimal point") + } + if i > 0 && b[i-1] == '_' { + return nil, newDecodeError(b[i-1:i], "cannot have underscore before decimal point") + } + cleaned = append(cleaned, c) + default: + before = true + cleaned = append(cleaned, c) + } + } + + return cleaned, nil +} + +// isValidDate checks if a provided date is a date that exists. +func isValidDate(year int, month int, day int) bool { + return month > 0 && month < 13 && day > 0 && day <= daysIn(month, year) +} + +// daysBefore[m] counts the number of days in a non-leap year +// before month m begins. There is an entry for m=12, counting +// the number of days before January of next year (365). +var daysBefore = [...]int32{ + 0, + 31, + 31 + 28, + 31 + 28 + 31, + 31 + 28 + 31 + 30, + 31 + 28 + 31 + 30 + 31, + 31 + 28 + 31 + 30 + 31 + 30, + 31 + 28 + 31 + 30 + 31 + 30 + 31, + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31, + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30, + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31, + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30, + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30 + 31, +} + +func daysIn(m int, year int) int { + if m == 2 && isLeap(year) { + return 29 + } + return int(daysBefore[m] - daysBefore[m-1]) +} + +func isLeap(year int) bool { + return year%4 == 0 && (year%100 != 0 || year%400 == 0) +} diff --git a/vendor/github.com/pelletier/go-toml/v2/doc.go b/vendor/github.com/pelletier/go-toml/v2/doc.go new file mode 100644 index 000000000..b7bc599bd --- /dev/null +++ b/vendor/github.com/pelletier/go-toml/v2/doc.go @@ -0,0 +1,2 @@ +// Package toml is a library to read and write TOML documents. +package toml diff --git a/vendor/github.com/pelletier/go-toml/v2/errors.go b/vendor/github.com/pelletier/go-toml/v2/errors.go new file mode 100644 index 000000000..5e6635c3e --- /dev/null +++ b/vendor/github.com/pelletier/go-toml/v2/errors.go @@ -0,0 +1,269 @@ +package toml + +import ( + "fmt" + "strconv" + "strings" + + "github.com/pelletier/go-toml/v2/internal/danger" +) + +// DecodeError represents an error encountered during the parsing or decoding +// of a TOML document. +// +// In addition to the error message, it contains the position in the document +// where it happened, as well as a human-readable representation that shows +// where the error occurred in the document. +type DecodeError struct { + message string + line int + column int + key Key + + human string +} + +// StrictMissingError occurs in a TOML document that does not have a +// corresponding field in the target value. It contains all the missing fields +// in Errors. +// +// Emitted by Decoder when DisallowUnknownFields() was called. +type StrictMissingError struct { + // One error per field that could not be found. + Errors []DecodeError +} + +// Error returns the canonical string for this error. +func (s *StrictMissingError) Error() string { + return "strict mode: fields in the document are missing in the target struct" +} + +// String returns a human readable description of all errors. +func (s *StrictMissingError) String() string { + var buf strings.Builder + + for i, e := range s.Errors { + if i > 0 { + buf.WriteString("\n---\n") + } + + buf.WriteString(e.String()) + } + + return buf.String() +} + +type Key []string + +// internal version of DecodeError that is used as the base to create a +// DecodeError with full context. +type decodeError struct { + highlight []byte + message string + key Key // optional +} + +func (de *decodeError) Error() string { + return de.message +} + +func newDecodeError(highlight []byte, format string, args ...interface{}) error { + return &decodeError{ + highlight: highlight, + message: fmt.Errorf(format, args...).Error(), + } +} + +// Error returns the error message contained in the DecodeError. +func (e *DecodeError) Error() string { + return "toml: " + e.message +} + +// String returns the human-readable contextualized error. This string is multi-line. +func (e *DecodeError) String() string { + return e.human +} + +// Position returns the (line, column) pair indicating where the error +// occurred in the document. Positions are 1-indexed. +func (e *DecodeError) Position() (row int, column int) { + return e.line, e.column +} + +// Key that was being processed when the error occurred. The key is present only +// if this DecodeError is part of a StrictMissingError. +func (e *DecodeError) Key() Key { + return e.key +} + +// decodeErrorFromHighlight creates a DecodeError referencing a highlighted +// range of bytes from document. +// +// highlight needs to be a sub-slice of document, or this function panics. +// +// The function copies all bytes used in DecodeError, so that document and +// highlight can be freely deallocated. +//nolint:funlen +func wrapDecodeError(document []byte, de *decodeError) *DecodeError { + offset := danger.SubsliceOffset(document, de.highlight) + + errMessage := de.Error() + errLine, errColumn := positionAtEnd(document[:offset]) + before, after := linesOfContext(document, de.highlight, offset, 3) + + var buf strings.Builder + + maxLine := errLine + len(after) - 1 + lineColumnWidth := len(strconv.Itoa(maxLine)) + + // Write the lines of context strictly before the error. + for i := len(before) - 1; i > 0; i-- { + line := errLine - i + buf.WriteString(formatLineNumber(line, lineColumnWidth)) + buf.WriteString("|") + + if len(before[i]) > 0 { + buf.WriteString(" ") + buf.Write(before[i]) + } + + buf.WriteRune('\n') + } + + // Write the document line that contains the error. + + buf.WriteString(formatLineNumber(errLine, lineColumnWidth)) + buf.WriteString("| ") + + if len(before) > 0 { + buf.Write(before[0]) + } + + buf.Write(de.highlight) + + if len(after) > 0 { + buf.Write(after[0]) + } + + buf.WriteRune('\n') + + // Write the line with the error message itself (so it does not have a line + // number). + + buf.WriteString(strings.Repeat(" ", lineColumnWidth)) + buf.WriteString("| ") + + if len(before) > 0 { + buf.WriteString(strings.Repeat(" ", len(before[0]))) + } + + buf.WriteString(strings.Repeat("~", len(de.highlight))) + + if len(errMessage) > 0 { + buf.WriteString(" ") + buf.WriteString(errMessage) + } + + // Write the lines of context strictly after the error. + + for i := 1; i < len(after); i++ { + buf.WriteRune('\n') + line := errLine + i + buf.WriteString(formatLineNumber(line, lineColumnWidth)) + buf.WriteString("|") + + if len(after[i]) > 0 { + buf.WriteString(" ") + buf.Write(after[i]) + } + } + + return &DecodeError{ + message: errMessage, + line: errLine, + column: errColumn, + key: de.key, + human: buf.String(), + } +} + +func formatLineNumber(line int, width int) string { + format := "%" + strconv.Itoa(width) + "d" + + return fmt.Sprintf(format, line) +} + +func linesOfContext(document []byte, highlight []byte, offset int, linesAround int) ([][]byte, [][]byte) { + return beforeLines(document, offset, linesAround), afterLines(document, highlight, offset, linesAround) +} + +func beforeLines(document []byte, offset int, linesAround int) [][]byte { + var beforeLines [][]byte + + // Walk the document backward from the highlight to find previous lines + // of context. + rest := document[:offset] +backward: + for o := len(rest) - 1; o >= 0 && len(beforeLines) <= linesAround && len(rest) > 0; { + switch { + case rest[o] == '\n': + // handle individual lines + beforeLines = append(beforeLines, rest[o+1:]) + rest = rest[:o] + o = len(rest) - 1 + case o == 0: + // add the first line only if it's non-empty + beforeLines = append(beforeLines, rest) + + break backward + default: + o-- + } + } + + return beforeLines +} + +func afterLines(document []byte, highlight []byte, offset int, linesAround int) [][]byte { + var afterLines [][]byte + + // Walk the document forward from the highlight to find the following + // lines of context. + rest := document[offset+len(highlight):] +forward: + for o := 0; o < len(rest) && len(afterLines) <= linesAround; { + switch { + case rest[o] == '\n': + // handle individual lines + afterLines = append(afterLines, rest[:o]) + rest = rest[o+1:] + o = 0 + + case o == len(rest)-1: + // add last line only if it's non-empty + afterLines = append(afterLines, rest) + + break forward + default: + o++ + } + } + + return afterLines +} + +func positionAtEnd(b []byte) (row int, column int) { + row = 1 + column = 1 + + for _, c := range b { + if c == '\n' { + row++ + column = 1 + } else { + column++ + } + } + + return +} diff --git a/vendor/github.com/pelletier/go-toml/v2/internal/ast/ast.go b/vendor/github.com/pelletier/go-toml/v2/internal/ast/ast.go new file mode 100644 index 000000000..33c7f9155 --- /dev/null +++ b/vendor/github.com/pelletier/go-toml/v2/internal/ast/ast.go @@ -0,0 +1,144 @@ +package ast + +import ( + "fmt" + "unsafe" + + "github.com/pelletier/go-toml/v2/internal/danger" +) + +// Iterator starts uninitialized, you need to call Next() first. +// +// For example: +// +// it := n.Children() +// for it.Next() { +// it.Node() +// } +type Iterator struct { + started bool + node *Node +} + +// Next moves the iterator forward and returns true if points to a +// node, false otherwise. +func (c *Iterator) Next() bool { + if !c.started { + c.started = true + } else if c.node.Valid() { + c.node = c.node.Next() + } + return c.node.Valid() +} + +// IsLast returns true if the current node of the iterator is the last +// one. Subsequent call to Next() will return false. +func (c *Iterator) IsLast() bool { + return c.node.next == 0 +} + +// Node returns a copy of the node pointed at by the iterator. +func (c *Iterator) Node() *Node { + return c.node +} + +// Root contains a full AST. +// +// It is immutable once constructed with Builder. +type Root struct { + nodes []Node +} + +// Iterator over the top level nodes. +func (r *Root) Iterator() Iterator { + it := Iterator{} + if len(r.nodes) > 0 { + it.node = &r.nodes[0] + } + return it +} + +func (r *Root) at(idx Reference) *Node { + return &r.nodes[idx] +} + +// Arrays have one child per element in the array. InlineTables have +// one child per key-value pair in the table. KeyValues have at least +// two children. The first one is the value. The rest make a +// potentially dotted key. Table and Array table have one child per +// element of the key they represent (same as KeyValue, but without +// the last node being the value). +type Node struct { + Kind Kind + Raw Range // Raw bytes from the input. + Data []byte // Node value (either allocated or referencing the input). + + // References to other nodes, as offsets in the backing array + // from this node. References can go backward, so those can be + // negative. + next int // 0 if last element + child int // 0 if no child +} + +type Range struct { + Offset uint32 + Length uint32 +} + +// Next returns a copy of the next node, or an invalid Node if there +// is no next node. +func (n *Node) Next() *Node { + if n.next == 0 { + return nil + } + ptr := unsafe.Pointer(n) + size := unsafe.Sizeof(Node{}) + return (*Node)(danger.Stride(ptr, size, n.next)) +} + +// Child returns a copy of the first child node of this node. Other +// children can be accessed calling Next on the first child. Returns +// an invalid Node if there is none. +func (n *Node) Child() *Node { + if n.child == 0 { + return nil + } + ptr := unsafe.Pointer(n) + size := unsafe.Sizeof(Node{}) + return (*Node)(danger.Stride(ptr, size, n.child)) +} + +// Valid returns true if the node's kind is set (not to Invalid). +func (n *Node) Valid() bool { + return n != nil +} + +// Key returns the child nodes making the Key on a supported +// node. Panics otherwise. They are guaranteed to be all be of the +// Kind Key. A simple key would return just one element. +func (n *Node) Key() Iterator { + switch n.Kind { + case KeyValue: + value := n.Child() + if !value.Valid() { + panic(fmt.Errorf("KeyValue should have at least two children")) + } + return Iterator{node: value.Next()} + case Table, ArrayTable: + return Iterator{node: n.Child()} + default: + panic(fmt.Errorf("Key() is not supported on a %s", n.Kind)) + } +} + +// Value returns a pointer to the value node of a KeyValue. +// Guaranteed to be non-nil. Panics if not called on a KeyValue node, +// or if the Children are malformed. +func (n *Node) Value() *Node { + return n.Child() +} + +// Children returns an iterator over a node's children. +func (n *Node) Children() Iterator { + return Iterator{node: n.Child()} +} diff --git a/vendor/github.com/pelletier/go-toml/v2/internal/ast/builder.go b/vendor/github.com/pelletier/go-toml/v2/internal/ast/builder.go new file mode 100644 index 000000000..120f16e5c --- /dev/null +++ b/vendor/github.com/pelletier/go-toml/v2/internal/ast/builder.go @@ -0,0 +1,51 @@ +package ast + +type Reference int + +const InvalidReference Reference = -1 + +func (r Reference) Valid() bool { + return r != InvalidReference +} + +type Builder struct { + tree Root + lastIdx int +} + +func (b *Builder) Tree() *Root { + return &b.tree +} + +func (b *Builder) NodeAt(ref Reference) *Node { + return b.tree.at(ref) +} + +func (b *Builder) Reset() { + b.tree.nodes = b.tree.nodes[:0] + b.lastIdx = 0 +} + +func (b *Builder) Push(n Node) Reference { + b.lastIdx = len(b.tree.nodes) + b.tree.nodes = append(b.tree.nodes, n) + return Reference(b.lastIdx) +} + +func (b *Builder) PushAndChain(n Node) Reference { + newIdx := len(b.tree.nodes) + b.tree.nodes = append(b.tree.nodes, n) + if b.lastIdx >= 0 { + b.tree.nodes[b.lastIdx].next = newIdx - b.lastIdx + } + b.lastIdx = newIdx + return Reference(b.lastIdx) +} + +func (b *Builder) AttachChild(parent Reference, child Reference) { + b.tree.nodes[parent].child = int(child) - int(parent) +} + +func (b *Builder) Chain(from Reference, to Reference) { + b.tree.nodes[from].next = int(to) - int(from) +} diff --git a/vendor/github.com/pelletier/go-toml/v2/internal/ast/kind.go b/vendor/github.com/pelletier/go-toml/v2/internal/ast/kind.go new file mode 100644 index 000000000..2b50c67fc --- /dev/null +++ b/vendor/github.com/pelletier/go-toml/v2/internal/ast/kind.go @@ -0,0 +1,69 @@ +package ast + +import "fmt" + +type Kind int + +const ( + // meta + Invalid Kind = iota + Comment + Key + + // top level structures + Table + ArrayTable + KeyValue + + // containers values + Array + InlineTable + + // values + String + Bool + Float + Integer + LocalDate + LocalTime + LocalDateTime + DateTime +) + +func (k Kind) String() string { + switch k { + case Invalid: + return "Invalid" + case Comment: + return "Comment" + case Key: + return "Key" + case Table: + return "Table" + case ArrayTable: + return "ArrayTable" + case KeyValue: + return "KeyValue" + case Array: + return "Array" + case InlineTable: + return "InlineTable" + case String: + return "String" + case Bool: + return "Bool" + case Float: + return "Float" + case Integer: + return "Integer" + case LocalDate: + return "LocalDate" + case LocalTime: + return "LocalTime" + case LocalDateTime: + return "LocalDateTime" + case DateTime: + return "DateTime" + } + panic(fmt.Errorf("Kind.String() not implemented for '%d'", k)) +} diff --git a/vendor/github.com/pelletier/go-toml/v2/internal/danger/danger.go b/vendor/github.com/pelletier/go-toml/v2/internal/danger/danger.go new file mode 100644 index 000000000..e38e1131b --- /dev/null +++ b/vendor/github.com/pelletier/go-toml/v2/internal/danger/danger.go @@ -0,0 +1,65 @@ +package danger + +import ( + "fmt" + "reflect" + "unsafe" +) + +const maxInt = uintptr(int(^uint(0) >> 1)) + +func SubsliceOffset(data []byte, subslice []byte) int { + datap := (*reflect.SliceHeader)(unsafe.Pointer(&data)) + hlp := (*reflect.SliceHeader)(unsafe.Pointer(&subslice)) + + if hlp.Data < datap.Data { + panic(fmt.Errorf("subslice address (%d) is before data address (%d)", hlp.Data, datap.Data)) + } + offset := hlp.Data - datap.Data + + if offset > maxInt { + panic(fmt.Errorf("slice offset larger than int (%d)", offset)) + } + + intoffset := int(offset) + + if intoffset > datap.Len { + panic(fmt.Errorf("slice offset (%d) is farther than data length (%d)", intoffset, datap.Len)) + } + + if intoffset+hlp.Len > datap.Len { + panic(fmt.Errorf("slice ends (%d+%d) is farther than data length (%d)", intoffset, hlp.Len, datap.Len)) + } + + return intoffset +} + +func BytesRange(start []byte, end []byte) []byte { + if start == nil || end == nil { + panic("cannot call BytesRange with nil") + } + startp := (*reflect.SliceHeader)(unsafe.Pointer(&start)) + endp := (*reflect.SliceHeader)(unsafe.Pointer(&end)) + + if startp.Data > endp.Data { + panic(fmt.Errorf("start pointer address (%d) is after end pointer address (%d)", startp.Data, endp.Data)) + } + + l := startp.Len + endLen := int(endp.Data-startp.Data) + endp.Len + if endLen > l { + l = endLen + } + + if l > startp.Cap { + panic(fmt.Errorf("range length is larger than capacity")) + } + + return start[:l] +} + +func Stride(ptr unsafe.Pointer, size uintptr, offset int) unsafe.Pointer { + // TODO: replace with unsafe.Add when Go 1.17 is released + // https://github.com/golang/go/issues/40481 + return unsafe.Pointer(uintptr(ptr) + uintptr(int(size)*offset)) +} diff --git a/vendor/github.com/pelletier/go-toml/v2/internal/danger/typeid.go b/vendor/github.com/pelletier/go-toml/v2/internal/danger/typeid.go new file mode 100644 index 000000000..9d41c28a2 --- /dev/null +++ b/vendor/github.com/pelletier/go-toml/v2/internal/danger/typeid.go @@ -0,0 +1,23 @@ +package danger + +import ( + "reflect" + "unsafe" +) + +// typeID is used as key in encoder and decoder caches to enable using +// the optimize runtime.mapaccess2_fast64 function instead of the more +// expensive lookup if we were to use reflect.Type as map key. +// +// typeID holds the pointer to the reflect.Type value, which is unique +// in the program. +// +// https://github.com/segmentio/encoding/blob/master/json/codec.go#L59-L61 +type TypeID unsafe.Pointer + +func MakeTypeID(t reflect.Type) TypeID { + // reflect.Type has the fields: + // typ unsafe.Pointer + // ptr unsafe.Pointer + return TypeID((*[2]unsafe.Pointer)(unsafe.Pointer(&t))[1]) +} diff --git a/vendor/github.com/pelletier/go-toml/v2/internal/tracker/key.go b/vendor/github.com/pelletier/go-toml/v2/internal/tracker/key.go new file mode 100644 index 000000000..7c148f48d --- /dev/null +++ b/vendor/github.com/pelletier/go-toml/v2/internal/tracker/key.go @@ -0,0 +1,50 @@ +package tracker + +import ( + "github.com/pelletier/go-toml/v2/internal/ast" +) + +// KeyTracker is a tracker that keeps track of the current Key as the AST is +// walked. +type KeyTracker struct { + k []string +} + +// UpdateTable sets the state of the tracker with the AST table node. +func (t *KeyTracker) UpdateTable(node *ast.Node) { + t.reset() + t.Push(node) +} + +// UpdateArrayTable sets the state of the tracker with the AST array table node. +func (t *KeyTracker) UpdateArrayTable(node *ast.Node) { + t.reset() + t.Push(node) +} + +// Push the given key on the stack. +func (t *KeyTracker) Push(node *ast.Node) { + it := node.Key() + for it.Next() { + t.k = append(t.k, string(it.Node().Data)) + } +} + +// Pop key from stack. +func (t *KeyTracker) Pop(node *ast.Node) { + it := node.Key() + for it.Next() { + t.k = t.k[:len(t.k)-1] + } +} + +// Key returns the current key +func (t *KeyTracker) Key() []string { + k := make([]string, len(t.k)) + copy(k, t.k) + return k +} + +func (t *KeyTracker) reset() { + t.k = t.k[:0] +} diff --git a/vendor/github.com/pelletier/go-toml/v2/internal/tracker/seen.go b/vendor/github.com/pelletier/go-toml/v2/internal/tracker/seen.go new file mode 100644 index 000000000..a7ee05ba6 --- /dev/null +++ b/vendor/github.com/pelletier/go-toml/v2/internal/tracker/seen.go @@ -0,0 +1,356 @@ +package tracker + +import ( + "bytes" + "fmt" + "sync" + + "github.com/pelletier/go-toml/v2/internal/ast" +) + +type keyKind uint8 + +const ( + invalidKind keyKind = iota + valueKind + tableKind + arrayTableKind +) + +func (k keyKind) String() string { + switch k { + case invalidKind: + return "invalid" + case valueKind: + return "value" + case tableKind: + return "table" + case arrayTableKind: + return "array table" + } + panic("missing keyKind string mapping") +} + +// SeenTracker tracks which keys have been seen with which TOML type to flag +// duplicates and mismatches according to the spec. +// +// Each node in the visited tree is represented by an entry. Each entry has an +// identifier, which is provided by a counter. Entries are stored in the array +// entries. As new nodes are discovered (referenced for the first time in the +// TOML document), entries are created and appended to the array. An entry +// points to its parent using its id. +// +// To find whether a given key (sequence of []byte) has already been visited, +// the entries are linearly searched, looking for one with the right name and +// parent id. +// +// Given that all keys appear in the document after their parent, it is +// guaranteed that all descendants of a node are stored after the node, this +// speeds up the search process. +// +// When encountering [[array tables]], the descendants of that node are removed +// to allow that branch of the tree to be "rediscovered". To maintain the +// invariant above, the deletion process needs to keep the order of entries. +// This results in more copies in that case. +type SeenTracker struct { + entries []entry + currentIdx int +} + +var pool sync.Pool + +func (s *SeenTracker) reset() { + // Always contains a root element at index 0. + s.currentIdx = 0 + if len(s.entries) == 0 { + s.entries = make([]entry, 1, 2) + } else { + s.entries = s.entries[:1] + } + s.entries[0].child = -1 + s.entries[0].next = -1 +} + +type entry struct { + // Use -1 to indicate no child or no sibling. + child int + next int + + name []byte + kind keyKind + explicit bool + kv bool +} + +// Find the index of the child of parentIdx with key k. Returns -1 if +// it does not exist. +func (s *SeenTracker) find(parentIdx int, k []byte) int { + for i := s.entries[parentIdx].child; i >= 0; i = s.entries[i].next { + if bytes.Equal(s.entries[i].name, k) { + return i + } + } + return -1 +} + +// Remove all descendants of node at position idx. +func (s *SeenTracker) clear(idx int) { + if idx >= len(s.entries) { + return + } + + for i := s.entries[idx].child; i >= 0; { + next := s.entries[i].next + n := s.entries[0].next + s.entries[0].next = i + s.entries[i].next = n + s.entries[i].name = nil + s.clear(i) + i = next + } + + s.entries[idx].child = -1 +} + +func (s *SeenTracker) create(parentIdx int, name []byte, kind keyKind, explicit bool, kv bool) int { + e := entry{ + child: -1, + next: s.entries[parentIdx].child, + + name: name, + kind: kind, + explicit: explicit, + kv: kv, + } + var idx int + if s.entries[0].next >= 0 { + idx = s.entries[0].next + s.entries[0].next = s.entries[idx].next + s.entries[idx] = e + } else { + idx = len(s.entries) + s.entries = append(s.entries, e) + } + + s.entries[parentIdx].child = idx + + return idx +} + +func (s *SeenTracker) setExplicitFlag(parentIdx int) { + for i := s.entries[parentIdx].child; i >= 0; i = s.entries[i].next { + if s.entries[i].kv { + s.entries[i].explicit = true + s.entries[i].kv = false + } + s.setExplicitFlag(i) + } +} + +// CheckExpression takes a top-level node and checks that it does not contain +// keys that have been seen in previous calls, and validates that types are +// consistent. +func (s *SeenTracker) CheckExpression(node *ast.Node) error { + if s.entries == nil { + s.reset() + } + switch node.Kind { + case ast.KeyValue: + return s.checkKeyValue(node) + case ast.Table: + return s.checkTable(node) + case ast.ArrayTable: + return s.checkArrayTable(node) + default: + panic(fmt.Errorf("this should not be a top level node type: %s", node.Kind)) + } +} + +func (s *SeenTracker) checkTable(node *ast.Node) error { + if s.currentIdx >= 0 { + s.setExplicitFlag(s.currentIdx) + } + + it := node.Key() + + parentIdx := 0 + + // This code is duplicated in checkArrayTable. This is because factoring + // it in a function requires to copy the iterator, or allocate it to the + // heap, which is not cheap. + for it.Next() { + if it.IsLast() { + break + } + + k := it.Node().Data + + idx := s.find(parentIdx, k) + + if idx < 0 { + idx = s.create(parentIdx, k, tableKind, false, false) + } else { + entry := s.entries[idx] + if entry.kind == valueKind { + return fmt.Errorf("toml: expected %s to be a table, not a %s", string(k), entry.kind) + } + } + parentIdx = idx + } + + k := it.Node().Data + idx := s.find(parentIdx, k) + + if idx >= 0 { + kind := s.entries[idx].kind + if kind != tableKind { + return fmt.Errorf("toml: key %s should be a table, not a %s", string(k), kind) + } + if s.entries[idx].explicit { + return fmt.Errorf("toml: table %s already exists", string(k)) + } + s.entries[idx].explicit = true + } else { + idx = s.create(parentIdx, k, tableKind, true, false) + } + + s.currentIdx = idx + + return nil +} + +func (s *SeenTracker) checkArrayTable(node *ast.Node) error { + if s.currentIdx >= 0 { + s.setExplicitFlag(s.currentIdx) + } + + it := node.Key() + + parentIdx := 0 + + for it.Next() { + if it.IsLast() { + break + } + + k := it.Node().Data + + idx := s.find(parentIdx, k) + + if idx < 0 { + idx = s.create(parentIdx, k, tableKind, false, false) + } else { + entry := s.entries[idx] + if entry.kind == valueKind { + return fmt.Errorf("toml: expected %s to be a table, not a %s", string(k), entry.kind) + } + } + + parentIdx = idx + } + + k := it.Node().Data + idx := s.find(parentIdx, k) + + if idx >= 0 { + kind := s.entries[idx].kind + if kind != arrayTableKind { + return fmt.Errorf("toml: key %s already exists as a %s, but should be an array table", kind, string(k)) + } + s.clear(idx) + } else { + idx = s.create(parentIdx, k, arrayTableKind, true, false) + } + + s.currentIdx = idx + + return nil +} + +func (s *SeenTracker) checkKeyValue(node *ast.Node) error { + parentIdx := s.currentIdx + it := node.Key() + + for it.Next() { + k := it.Node().Data + + idx := s.find(parentIdx, k) + + if idx < 0 { + idx = s.create(parentIdx, k, tableKind, false, true) + } else { + entry := s.entries[idx] + if it.IsLast() { + return fmt.Errorf("toml: key %s is already defined", string(k)) + } else if entry.kind != tableKind { + return fmt.Errorf("toml: expected %s to be a table, not a %s", string(k), entry.kind) + } else if entry.explicit { + return fmt.Errorf("toml: cannot redefine table %s that has already been explicitly defined", string(k)) + } + } + + parentIdx = idx + } + + s.entries[parentIdx].kind = valueKind + + value := node.Value() + + switch value.Kind { + case ast.InlineTable: + return s.checkInlineTable(value) + case ast.Array: + return s.checkArray(value) + } + + return nil +} + +func (s *SeenTracker) checkArray(node *ast.Node) error { + it := node.Children() + for it.Next() { + n := it.Node() + switch n.Kind { + case ast.InlineTable: + err := s.checkInlineTable(n) + if err != nil { + return err + } + case ast.Array: + err := s.checkArray(n) + if err != nil { + return err + } + } + } + return nil +} + +func (s *SeenTracker) checkInlineTable(node *ast.Node) error { + if pool.New == nil { + pool.New = func() interface{} { + return &SeenTracker{} + } + } + + s = pool.Get().(*SeenTracker) + s.reset() + + it := node.Children() + for it.Next() { + n := it.Node() + err := s.checkKeyValue(n) + if err != nil { + return err + } + } + + // As inline tables are self-contained, the tracker does not + // need to retain the details of what they contain. The + // keyValue element that creates the inline table is kept to + // mark the presence of the inline table and prevent + // redefinition of its keys: check* functions cannot walk into + // a value. + pool.Put(s) + return nil +} diff --git a/vendor/github.com/pelletier/go-toml/v2/internal/tracker/tracker.go b/vendor/github.com/pelletier/go-toml/v2/internal/tracker/tracker.go new file mode 100644 index 000000000..bf0317392 --- /dev/null +++ b/vendor/github.com/pelletier/go-toml/v2/internal/tracker/tracker.go @@ -0,0 +1 @@ +package tracker diff --git a/vendor/github.com/pelletier/go-toml/v2/localtime.go b/vendor/github.com/pelletier/go-toml/v2/localtime.go new file mode 100644 index 000000000..30a31dcbd --- /dev/null +++ b/vendor/github.com/pelletier/go-toml/v2/localtime.go @@ -0,0 +1,120 @@ +package toml + +import ( + "fmt" + "strings" + "time" +) + +// LocalDate represents a calendar day in no specific timezone. +type LocalDate struct { + Year int + Month int + Day int +} + +// AsTime converts d into a specific time instance at midnight in zone. +func (d LocalDate) AsTime(zone *time.Location) time.Time { + return time.Date(d.Year, time.Month(d.Month), d.Day, 0, 0, 0, 0, zone) +} + +// String returns RFC 3339 representation of d. +func (d LocalDate) String() string { + return fmt.Sprintf("%04d-%02d-%02d", d.Year, d.Month, d.Day) +} + +// MarshalText returns RFC 3339 representation of d. +func (d LocalDate) MarshalText() ([]byte, error) { + return []byte(d.String()), nil +} + +// UnmarshalText parses b using RFC 3339 to fill d. +func (d *LocalDate) UnmarshalText(b []byte) error { + res, err := parseLocalDate(b) + if err != nil { + return err + } + *d = res + return nil +} + +// LocalTime represents a time of day of no specific day in no specific +// timezone. +type LocalTime struct { + Hour int // Hour of the day: [0; 24[ + Minute int // Minute of the hour: [0; 60[ + Second int // Second of the minute: [0; 60[ + Nanosecond int // Nanoseconds within the second: [0, 1000000000[ + Precision int // Number of digits to display for Nanosecond. +} + +// String returns RFC 3339 representation of d. +// If d.Nanosecond and d.Precision are zero, the time won't have a nanosecond +// component. If d.Nanosecond > 0 but d.Precision = 0, then the minimum number +// of digits for nanoseconds is provided. +func (d LocalTime) String() string { + s := fmt.Sprintf("%02d:%02d:%02d", d.Hour, d.Minute, d.Second) + + if d.Precision > 0 { + s += fmt.Sprintf(".%09d", d.Nanosecond)[:d.Precision+1] + } else if d.Nanosecond > 0 { + // Nanoseconds are specified, but precision is not provided. Use the + // minimum. + s += strings.Trim(fmt.Sprintf(".%09d", d.Nanosecond), "0") + } + + return s +} + +// MarshalText returns RFC 3339 representation of d. +func (d LocalTime) MarshalText() ([]byte, error) { + return []byte(d.String()), nil +} + +// UnmarshalText parses b using RFC 3339 to fill d. +func (d *LocalTime) UnmarshalText(b []byte) error { + res, left, err := parseLocalTime(b) + if err == nil && len(left) != 0 { + err = newDecodeError(left, "extra characters") + } + if err != nil { + return err + } + *d = res + return nil +} + +// LocalDateTime represents a time of a specific day in no specific timezone. +type LocalDateTime struct { + LocalDate + LocalTime +} + +// AsTime converts d into a specific time instance in zone. +func (d LocalDateTime) AsTime(zone *time.Location) time.Time { + return time.Date(d.Year, time.Month(d.Month), d.Day, d.Hour, d.Minute, d.Second, d.Nanosecond, zone) +} + +// String returns RFC 3339 representation of d. +func (d LocalDateTime) String() string { + return d.LocalDate.String() + "T" + d.LocalTime.String() +} + +// MarshalText returns RFC 3339 representation of d. +func (d LocalDateTime) MarshalText() ([]byte, error) { + return []byte(d.String()), nil +} + +// UnmarshalText parses b using RFC 3339 to fill d. +func (d *LocalDateTime) UnmarshalText(data []byte) error { + res, left, err := parseLocalDateTime(data) + if err == nil && len(left) != 0 { + err = newDecodeError(left, "extra characters") + } + if err != nil { + return err + } + + *d = res + return nil +} diff --git a/vendor/github.com/pelletier/go-toml/v2/marshaler.go b/vendor/github.com/pelletier/go-toml/v2/marshaler.go new file mode 100644 index 000000000..91f3b3c20 --- /dev/null +++ b/vendor/github.com/pelletier/go-toml/v2/marshaler.go @@ -0,0 +1,950 @@ +package toml + +import ( + "bytes" + "encoding" + "fmt" + "io" + "math" + "reflect" + "sort" + "strconv" + "strings" + "time" + "unicode" +) + +// Marshal serializes a Go value as a TOML document. +// +// It is a shortcut for Encoder.Encode() with the default options. +func Marshal(v interface{}) ([]byte, error) { + var buf bytes.Buffer + enc := NewEncoder(&buf) + + err := enc.Encode(v) + if err != nil { + return nil, err + } + + return buf.Bytes(), nil +} + +// Encoder writes a TOML document to an output stream. +type Encoder struct { + // output + w io.Writer + + // global settings + tablesInline bool + arraysMultiline bool + indentSymbol string + indentTables bool +} + +// NewEncoder returns a new Encoder that writes to w. +func NewEncoder(w io.Writer) *Encoder { + return &Encoder{ + w: w, + indentSymbol: " ", + } +} + +// SetTablesInline forces the encoder to emit all tables inline. +// +// This behavior can be controlled on an individual struct field basis with the +// inline tag: +// +// MyField `inline:"true"` +func (enc *Encoder) SetTablesInline(inline bool) *Encoder { + enc.tablesInline = inline + return enc +} + +// SetArraysMultiline forces the encoder to emit all arrays with one element per +// line. +// +// This behavior can be controlled on an individual struct field basis with the multiline tag: +// +// MyField `multiline:"true"` +func (enc *Encoder) SetArraysMultiline(multiline bool) *Encoder { + enc.arraysMultiline = multiline + return enc +} + +// SetIndentSymbol defines the string that should be used for indentation. The +// provided string is repeated for each indentation level. Defaults to two +// spaces. +func (enc *Encoder) SetIndentSymbol(s string) *Encoder { + enc.indentSymbol = s + return enc +} + +// SetIndentTables forces the encoder to intent tables and array tables. +func (enc *Encoder) SetIndentTables(indent bool) *Encoder { + enc.indentTables = indent + return enc +} + +// Encode writes a TOML representation of v to the stream. +// +// If v cannot be represented to TOML it returns an error. +// +// Encoding rules +// +// A top level slice containing only maps or structs is encoded as [[table +// array]]. +// +// All slices not matching rule 1 are encoded as [array]. As a result, any map +// or struct they contain is encoded as an {inline table}. +// +// Nil interfaces and nil pointers are not supported. +// +// Keys in key-values always have one part. +// +// Intermediate tables are always printed. +// +// By default, strings are encoded as literal string, unless they contain either +// a newline character or a single quote. In that case they are emitted as +// quoted strings. +// +// When encoding structs, fields are encoded in order of definition, with their +// exact name. +// +// Struct tags +// +// The encoding of each public struct field can be customized by the format +// string in the "toml" key of the struct field's tag. This follows +// encoding/json's convention. The format string starts with the name of the +// field, optionally followed by a comma-separated list of options. The name may +// be empty in order to provide options without overriding the default name. +// +// The "multiline" option emits strings as quoted multi-line TOML strings. It +// has no effect on fields that would not be encoded as strings. +// +// The "inline" option turns fields that would be emitted as tables into inline +// tables instead. It has no effect on other fields. +// +// The "omitempty" option prevents empty values or groups from being emitted. +// +// In addition to the "toml" tag struct tag, a "comment" tag can be used to emit +// a TOML comment before the value being annotated. Comments are ignored inside +// inline tables. +func (enc *Encoder) Encode(v interface{}) error { + var ( + b []byte + ctx encoderCtx + ) + + ctx.inline = enc.tablesInline + + if v == nil { + return fmt.Errorf("toml: cannot encode a nil interface") + } + + b, err := enc.encode(b, ctx, reflect.ValueOf(v)) + if err != nil { + return err + } + + _, err = enc.w.Write(b) + if err != nil { + return fmt.Errorf("toml: cannot write: %w", err) + } + + return nil +} + +type valueOptions struct { + multiline bool + omitempty bool + comment string +} + +type encoderCtx struct { + // Current top-level key. + parentKey []string + + // Key that should be used for a KV. + key string + // Extra flag to account for the empty string + hasKey bool + + // Set to true to indicate that the encoder is inside a KV, so that all + // tables need to be inlined. + insideKv bool + + // Set to true to skip the first table header in an array table. + skipTableHeader bool + + // Should the next table be encoded as inline + inline bool + + // Indentation level + indent int + + // Options coming from struct tags + options valueOptions +} + +func (ctx *encoderCtx) shiftKey() { + if ctx.hasKey { + ctx.parentKey = append(ctx.parentKey, ctx.key) + ctx.clearKey() + } +} + +func (ctx *encoderCtx) setKey(k string) { + ctx.key = k + ctx.hasKey = true +} + +func (ctx *encoderCtx) clearKey() { + ctx.key = "" + ctx.hasKey = false +} + +func (ctx *encoderCtx) isRoot() bool { + return len(ctx.parentKey) == 0 && !ctx.hasKey +} + +func (enc *Encoder) encode(b []byte, ctx encoderCtx, v reflect.Value) ([]byte, error) { + i := v.Interface() + + switch x := i.(type) { + case time.Time: + if x.Nanosecond() > 0 { + return x.AppendFormat(b, time.RFC3339Nano), nil + } + return x.AppendFormat(b, time.RFC3339), nil + case LocalTime: + return append(b, x.String()...), nil + case LocalDate: + return append(b, x.String()...), nil + case LocalDateTime: + return append(b, x.String()...), nil + } + + hasTextMarshaler := v.Type().Implements(textMarshalerType) + if hasTextMarshaler || (v.CanAddr() && reflect.PtrTo(v.Type()).Implements(textMarshalerType)) { + if !hasTextMarshaler { + v = v.Addr() + } + + if ctx.isRoot() { + return nil, fmt.Errorf("toml: type %s implementing the TextMarshaler interface cannot be a root element", v.Type()) + } + + text, err := v.Interface().(encoding.TextMarshaler).MarshalText() + if err != nil { + return nil, err + } + + b = enc.encodeString(b, string(text), ctx.options) + + return b, nil + } + + switch v.Kind() { + // containers + case reflect.Map: + return enc.encodeMap(b, ctx, v) + case reflect.Struct: + return enc.encodeStruct(b, ctx, v) + case reflect.Slice: + return enc.encodeSlice(b, ctx, v) + case reflect.Interface: + if v.IsNil() { + return nil, fmt.Errorf("toml: encoding a nil interface is not supported") + } + + return enc.encode(b, ctx, v.Elem()) + case reflect.Ptr: + if v.IsNil() { + return enc.encode(b, ctx, reflect.Zero(v.Type().Elem())) + } + + return enc.encode(b, ctx, v.Elem()) + + // values + case reflect.String: + b = enc.encodeString(b, v.String(), ctx.options) + case reflect.Float32: + f := v.Float() + + if math.IsNaN(f) { + b = append(b, "nan"...) + } else if f > math.MaxFloat32 { + b = append(b, "inf"...) + } else if f < -math.MaxFloat32 { + b = append(b, "-inf"...) + } else if math.Trunc(f) == f { + b = strconv.AppendFloat(b, f, 'f', 1, 32) + } else { + b = strconv.AppendFloat(b, f, 'f', -1, 32) + } + case reflect.Float64: + f := v.Float() + if math.IsNaN(f) { + b = append(b, "nan"...) + } else if f > math.MaxFloat64 { + b = append(b, "inf"...) + } else if f < -math.MaxFloat64 { + b = append(b, "-inf"...) + } else if math.Trunc(f) == f { + b = strconv.AppendFloat(b, f, 'f', 1, 64) + } else { + b = strconv.AppendFloat(b, f, 'f', -1, 64) + } + case reflect.Bool: + if v.Bool() { + b = append(b, "true"...) + } else { + b = append(b, "false"...) + } + case reflect.Uint64, reflect.Uint32, reflect.Uint16, reflect.Uint8, reflect.Uint: + b = strconv.AppendUint(b, v.Uint(), 10) + case reflect.Int64, reflect.Int32, reflect.Int16, reflect.Int8, reflect.Int: + b = strconv.AppendInt(b, v.Int(), 10) + default: + return nil, fmt.Errorf("toml: cannot encode value of type %s", v.Kind()) + } + + return b, nil +} + +func isNil(v reflect.Value) bool { + switch v.Kind() { + case reflect.Ptr, reflect.Interface, reflect.Map: + return v.IsNil() + default: + return false + } +} + +func (enc *Encoder) encodeKv(b []byte, ctx encoderCtx, options valueOptions, v reflect.Value) ([]byte, error) { + var err error + + if (ctx.options.omitempty || options.omitempty) && isEmptyValue(v) { + return b, nil + } + + if !ctx.inline { + b = enc.encodeComment(ctx.indent, options.comment, b) + } + + b = enc.indent(ctx.indent, b) + b = enc.encodeKey(b, ctx.key) + b = append(b, " = "...) + + // create a copy of the context because the value of a KV shouldn't + // modify the global context. + subctx := ctx + subctx.insideKv = true + subctx.shiftKey() + subctx.options = options + + b, err = enc.encode(b, subctx, v) + if err != nil { + return nil, err + } + + return b, nil +} + +func isEmptyValue(v reflect.Value) bool { + switch v.Kind() { + case reflect.Array, reflect.Map, reflect.Slice, reflect.String: + return v.Len() == 0 + case reflect.Bool: + return !v.Bool() + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + return v.Int() == 0 + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + return v.Uint() == 0 + case reflect.Float32, reflect.Float64: + return v.Float() == 0 + case reflect.Interface, reflect.Ptr: + return v.IsNil() + } + return false +} + +const literalQuote = '\'' + +func (enc *Encoder) encodeString(b []byte, v string, options valueOptions) []byte { + if needsQuoting(v) { + return enc.encodeQuotedString(options.multiline, b, v) + } + + return enc.encodeLiteralString(b, v) +} + +func needsQuoting(v string) bool { + // TODO: vectorize + for _, b := range []byte(v) { + if b == '\'' || b == '\r' || b == '\n' || invalidAscii(b) { + return true + } + } + return false +} + +// caller should have checked that the string does not contain new lines or ' . +func (enc *Encoder) encodeLiteralString(b []byte, v string) []byte { + b = append(b, literalQuote) + b = append(b, v...) + b = append(b, literalQuote) + + return b +} + +//nolint:cyclop +func (enc *Encoder) encodeQuotedString(multiline bool, b []byte, v string) []byte { + stringQuote := `"` + + if multiline { + stringQuote = `"""` + } + + b = append(b, stringQuote...) + if multiline { + b = append(b, '\n') + } + + const ( + hextable = "0123456789ABCDEF" + // U+0000 to U+0008, U+000A to U+001F, U+007F + nul = 0x0 + bs = 0x8 + lf = 0xa + us = 0x1f + del = 0x7f + ) + + for _, r := range []byte(v) { + switch r { + case '\\': + b = append(b, `\\`...) + case '"': + b = append(b, `\"`...) + case '\b': + b = append(b, `\b`...) + case '\f': + b = append(b, `\f`...) + case '\n': + if multiline { + b = append(b, r) + } else { + b = append(b, `\n`...) + } + case '\r': + b = append(b, `\r`...) + case '\t': + b = append(b, `\t`...) + default: + switch { + case r >= nul && r <= bs, r >= lf && r <= us, r == del: + b = append(b, `\u00`...) + b = append(b, hextable[r>>4]) + b = append(b, hextable[r&0x0f]) + default: + b = append(b, r) + } + } + } + + b = append(b, stringQuote...) + + return b +} + +// caller should have checked that the string is in A-Z / a-z / 0-9 / - / _ . +func (enc *Encoder) encodeUnquotedKey(b []byte, v string) []byte { + return append(b, v...) +} + +func (enc *Encoder) encodeTableHeader(ctx encoderCtx, b []byte) ([]byte, error) { + if len(ctx.parentKey) == 0 { + return b, nil + } + + b = enc.encodeComment(ctx.indent, ctx.options.comment, b) + + b = enc.indent(ctx.indent, b) + + b = append(b, '[') + + b = enc.encodeKey(b, ctx.parentKey[0]) + + for _, k := range ctx.parentKey[1:] { + b = append(b, '.') + b = enc.encodeKey(b, k) + } + + b = append(b, "]\n"...) + + return b, nil +} + +//nolint:cyclop +func (enc *Encoder) encodeKey(b []byte, k string) []byte { + needsQuotation := false + cannotUseLiteral := false + + if len(k) == 0 { + return append(b, "''"...) + } + + for _, c := range k { + if (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || (c >= '0' && c <= '9') || c == '-' || c == '_' { + continue + } + + if c == literalQuote { + cannotUseLiteral = true + } + + needsQuotation = true + } + + if needsQuotation && needsQuoting(k) { + cannotUseLiteral = true + } + + switch { + case cannotUseLiteral: + return enc.encodeQuotedString(false, b, k) + case needsQuotation: + return enc.encodeLiteralString(b, k) + default: + return enc.encodeUnquotedKey(b, k) + } +} + +func (enc *Encoder) encodeMap(b []byte, ctx encoderCtx, v reflect.Value) ([]byte, error) { + if v.Type().Key().Kind() != reflect.String { + return nil, fmt.Errorf("toml: type %s is not supported as a map key", v.Type().Key().Kind()) + } + + var ( + t table + emptyValueOptions valueOptions + ) + + iter := v.MapRange() + for iter.Next() { + k := iter.Key().String() + v := iter.Value() + + if isNil(v) { + continue + } + + if willConvertToTableOrArrayTable(ctx, v) { + t.pushTable(k, v, emptyValueOptions) + } else { + t.pushKV(k, v, emptyValueOptions) + } + } + + sortEntriesByKey(t.kvs) + sortEntriesByKey(t.tables) + + return enc.encodeTable(b, ctx, t) +} + +func sortEntriesByKey(e []entry) { + sort.Slice(e, func(i, j int) bool { + return e[i].Key < e[j].Key + }) +} + +type entry struct { + Key string + Value reflect.Value + Options valueOptions +} + +type table struct { + kvs []entry + tables []entry +} + +func (t *table) pushKV(k string, v reflect.Value, options valueOptions) { + for _, e := range t.kvs { + if e.Key == k { + return + } + } + + t.kvs = append(t.kvs, entry{Key: k, Value: v, Options: options}) +} + +func (t *table) pushTable(k string, v reflect.Value, options valueOptions) { + for _, e := range t.tables { + if e.Key == k { + return + } + } + t.tables = append(t.tables, entry{Key: k, Value: v, Options: options}) +} + +func walkStruct(ctx encoderCtx, t *table, v reflect.Value) { + // TODO: cache this + typ := v.Type() + for i := 0; i < typ.NumField(); i++ { + fieldType := typ.Field(i) + + // only consider exported fields + if fieldType.PkgPath != "" { + continue + } + + tag := fieldType.Tag.Get("toml") + + // special field name to skip field + if tag == "-" { + continue + } + + k, opts := parseTag(tag) + if !isValidName(k) { + k = "" + } + + f := v.Field(i) + + if k == "" { + if fieldType.Anonymous { + if fieldType.Type.Kind() == reflect.Struct { + walkStruct(ctx, t, f) + } + continue + } else { + k = fieldType.Name + } + } + + if isNil(f) { + continue + } + + options := valueOptions{ + multiline: opts.multiline, + omitempty: opts.omitempty, + comment: fieldType.Tag.Get("comment"), + } + + if opts.inline || !willConvertToTableOrArrayTable(ctx, f) { + t.pushKV(k, f, options) + } else { + t.pushTable(k, f, options) + } + } +} + +func (enc *Encoder) encodeStruct(b []byte, ctx encoderCtx, v reflect.Value) ([]byte, error) { + var t table + + walkStruct(ctx, &t, v) + + return enc.encodeTable(b, ctx, t) +} + +func (enc *Encoder) encodeComment(indent int, comment string, b []byte) []byte { + if comment != "" { + b = enc.indent(indent, b) + b = append(b, "# "...) + b = append(b, comment...) + b = append(b, '\n') + } + return b +} + +func isValidName(s string) bool { + if s == "" { + return false + } + for _, c := range s { + switch { + case strings.ContainsRune("!#$%&()*+-./:;<=>?@[]^_{|}~ ", c): + // Backslash and quote chars are reserved, but + // otherwise any punctuation chars are allowed + // in a tag name. + case !unicode.IsLetter(c) && !unicode.IsDigit(c): + return false + } + } + return true +} + +type tagOptions struct { + multiline bool + inline bool + omitempty bool +} + +func parseTag(tag string) (string, tagOptions) { + opts := tagOptions{} + + idx := strings.Index(tag, ",") + if idx == -1 { + return tag, opts + } + + raw := tag[idx+1:] + tag = string(tag[:idx]) + for raw != "" { + var o string + i := strings.Index(raw, ",") + if i >= 0 { + o, raw = raw[:i], raw[i+1:] + } else { + o, raw = raw, "" + } + switch o { + case "multiline": + opts.multiline = true + case "inline": + opts.inline = true + case "omitempty": + opts.omitempty = true + } + } + + return tag, opts +} + +func (enc *Encoder) encodeTable(b []byte, ctx encoderCtx, t table) ([]byte, error) { + var err error + + ctx.shiftKey() + + if ctx.insideKv || (ctx.inline && !ctx.isRoot()) { + return enc.encodeTableInline(b, ctx, t) + } + + if !ctx.skipTableHeader { + b, err = enc.encodeTableHeader(ctx, b) + if err != nil { + return nil, err + } + + if enc.indentTables && len(ctx.parentKey) > 0 { + ctx.indent++ + } + } + ctx.skipTableHeader = false + + for _, kv := range t.kvs { + ctx.setKey(kv.Key) + + b, err = enc.encodeKv(b, ctx, kv.Options, kv.Value) + if err != nil { + return nil, err + } + + b = append(b, '\n') + } + + for _, table := range t.tables { + ctx.setKey(table.Key) + + ctx.options = table.Options + + b, err = enc.encode(b, ctx, table.Value) + if err != nil { + return nil, err + } + + b = append(b, '\n') + } + + return b, nil +} + +func (enc *Encoder) encodeTableInline(b []byte, ctx encoderCtx, t table) ([]byte, error) { + var err error + + b = append(b, '{') + + first := true + for _, kv := range t.kvs { + if first { + first = false + } else { + b = append(b, `, `...) + } + + ctx.setKey(kv.Key) + + b, err = enc.encodeKv(b, ctx, kv.Options, kv.Value) + if err != nil { + return nil, err + } + } + + if len(t.tables) > 0 { + panic("inline table cannot contain nested tables, online key-values") + } + + b = append(b, "}"...) + + return b, nil +} + +func willConvertToTable(ctx encoderCtx, v reflect.Value) bool { + if !v.IsValid() { + return false + } + if v.Type() == timeType || v.Type().Implements(textMarshalerType) || (v.Kind() != reflect.Ptr && v.CanAddr() && reflect.PtrTo(v.Type()).Implements(textMarshalerType)) { + return false + } + + t := v.Type() + switch t.Kind() { + case reflect.Map, reflect.Struct: + return !ctx.inline + case reflect.Interface: + return willConvertToTable(ctx, v.Elem()) + case reflect.Ptr: + if v.IsNil() { + return false + } + + return willConvertToTable(ctx, v.Elem()) + default: + return false + } +} + +func willConvertToTableOrArrayTable(ctx encoderCtx, v reflect.Value) bool { + if ctx.insideKv { + return false + } + t := v.Type() + + if t.Kind() == reflect.Interface { + return willConvertToTableOrArrayTable(ctx, v.Elem()) + } + + if t.Kind() == reflect.Slice { + if v.Len() == 0 { + // An empty slice should be a kv = []. + return false + } + + for i := 0; i < v.Len(); i++ { + t := willConvertToTable(ctx, v.Index(i)) + + if !t { + return false + } + } + + return true + } + + return willConvertToTable(ctx, v) +} + +func (enc *Encoder) encodeSlice(b []byte, ctx encoderCtx, v reflect.Value) ([]byte, error) { + if v.Len() == 0 { + b = append(b, "[]"...) + + return b, nil + } + + if willConvertToTableOrArrayTable(ctx, v) { + return enc.encodeSliceAsArrayTable(b, ctx, v) + } + + return enc.encodeSliceAsArray(b, ctx, v) +} + +// caller should have checked that v is a slice that only contains values that +// encode into tables. +func (enc *Encoder) encodeSliceAsArrayTable(b []byte, ctx encoderCtx, v reflect.Value) ([]byte, error) { + ctx.shiftKey() + + scratch := make([]byte, 0, 64) + scratch = append(scratch, "[["...) + + for i, k := range ctx.parentKey { + if i > 0 { + scratch = append(scratch, '.') + } + + scratch = enc.encodeKey(scratch, k) + } + + scratch = append(scratch, "]]\n"...) + ctx.skipTableHeader = true + + for i := 0; i < v.Len(); i++ { + b = append(b, scratch...) + + var err error + b, err = enc.encode(b, ctx, v.Index(i)) + if err != nil { + return nil, err + } + } + + return b, nil +} + +func (enc *Encoder) encodeSliceAsArray(b []byte, ctx encoderCtx, v reflect.Value) ([]byte, error) { + multiline := ctx.options.multiline || enc.arraysMultiline + separator := ", " + + b = append(b, '[') + + subCtx := ctx + subCtx.options = valueOptions{} + + if multiline { + separator = ",\n" + + b = append(b, '\n') + + subCtx.indent++ + } + + var err error + first := true + + for i := 0; i < v.Len(); i++ { + if first { + first = false + } else { + b = append(b, separator...) + } + + if multiline { + b = enc.indent(subCtx.indent, b) + } + + b, err = enc.encode(b, subCtx, v.Index(i)) + if err != nil { + return nil, err + } + } + + if multiline { + b = append(b, '\n') + b = enc.indent(ctx.indent, b) + } + + b = append(b, ']') + + return b, nil +} + +func (enc *Encoder) indent(level int, b []byte) []byte { + for i := 0; i < level; i++ { + b = append(b, enc.indentSymbol...) + } + + return b +} diff --git a/vendor/github.com/pelletier/go-toml/v2/parser.go b/vendor/github.com/pelletier/go-toml/v2/parser.go new file mode 100644 index 000000000..9859a795b --- /dev/null +++ b/vendor/github.com/pelletier/go-toml/v2/parser.go @@ -0,0 +1,1086 @@ +package toml + +import ( + "bytes" + "unicode" + + "github.com/pelletier/go-toml/v2/internal/ast" + "github.com/pelletier/go-toml/v2/internal/danger" +) + +type parser struct { + builder ast.Builder + ref ast.Reference + data []byte + left []byte + err error + first bool +} + +func (p *parser) Range(b []byte) ast.Range { + return ast.Range{ + Offset: uint32(danger.SubsliceOffset(p.data, b)), + Length: uint32(len(b)), + } +} + +func (p *parser) Raw(raw ast.Range) []byte { + return p.data[raw.Offset : raw.Offset+raw.Length] +} + +func (p *parser) Reset(b []byte) { + p.builder.Reset() + p.ref = ast.InvalidReference + p.data = b + p.left = b + p.err = nil + p.first = true +} + +//nolint:cyclop +func (p *parser) NextExpression() bool { + if len(p.left) == 0 || p.err != nil { + return false + } + + p.builder.Reset() + p.ref = ast.InvalidReference + + for { + if len(p.left) == 0 || p.err != nil { + return false + } + + if !p.first { + p.left, p.err = p.parseNewline(p.left) + } + + if len(p.left) == 0 || p.err != nil { + return false + } + + p.ref, p.left, p.err = p.parseExpression(p.left) + + if p.err != nil { + return false + } + + p.first = false + + if p.ref.Valid() { + return true + } + } +} + +func (p *parser) Expression() *ast.Node { + return p.builder.NodeAt(p.ref) +} + +func (p *parser) Error() error { + return p.err +} + +func (p *parser) parseNewline(b []byte) ([]byte, error) { + if b[0] == '\n' { + return b[1:], nil + } + + if b[0] == '\r' { + _, rest, err := scanWindowsNewline(b) + return rest, err + } + + return nil, newDecodeError(b[0:1], "expected newline but got %#U", b[0]) +} + +func (p *parser) parseExpression(b []byte) (ast.Reference, []byte, error) { + // expression = ws [ comment ] + // expression =/ ws keyval ws [ comment ] + // expression =/ ws table ws [ comment ] + ref := ast.InvalidReference + + b = p.parseWhitespace(b) + + if len(b) == 0 { + return ref, b, nil + } + + if b[0] == '#' { + _, rest, err := scanComment(b) + return ref, rest, err + } + + if b[0] == '\n' || b[0] == '\r' { + return ref, b, nil + } + + var err error + if b[0] == '[' { + ref, b, err = p.parseTable(b) + } else { + ref, b, err = p.parseKeyval(b) + } + + if err != nil { + return ref, nil, err + } + + b = p.parseWhitespace(b) + + if len(b) > 0 && b[0] == '#' { + _, rest, err := scanComment(b) + return ref, rest, err + } + + return ref, b, nil +} + +func (p *parser) parseTable(b []byte) (ast.Reference, []byte, error) { + // table = std-table / array-table + if len(b) > 1 && b[1] == '[' { + return p.parseArrayTable(b) + } + + return p.parseStdTable(b) +} + +func (p *parser) parseArrayTable(b []byte) (ast.Reference, []byte, error) { + // array-table = array-table-open key array-table-close + // array-table-open = %x5B.5B ws ; [[ Double left square bracket + // array-table-close = ws %x5D.5D ; ]] Double right square bracket + ref := p.builder.Push(ast.Node{ + Kind: ast.ArrayTable, + }) + + b = b[2:] + b = p.parseWhitespace(b) + + k, b, err := p.parseKey(b) + if err != nil { + return ref, nil, err + } + + p.builder.AttachChild(ref, k) + b = p.parseWhitespace(b) + + b, err = expect(']', b) + if err != nil { + return ref, nil, err + } + + b, err = expect(']', b) + + return ref, b, err +} + +func (p *parser) parseStdTable(b []byte) (ast.Reference, []byte, error) { + // std-table = std-table-open key std-table-close + // std-table-open = %x5B ws ; [ Left square bracket + // std-table-close = ws %x5D ; ] Right square bracket + ref := p.builder.Push(ast.Node{ + Kind: ast.Table, + }) + + b = b[1:] + b = p.parseWhitespace(b) + + key, b, err := p.parseKey(b) + if err != nil { + return ref, nil, err + } + + p.builder.AttachChild(ref, key) + + b = p.parseWhitespace(b) + + b, err = expect(']', b) + + return ref, b, err +} + +func (p *parser) parseKeyval(b []byte) (ast.Reference, []byte, error) { + // keyval = key keyval-sep val + ref := p.builder.Push(ast.Node{ + Kind: ast.KeyValue, + }) + + key, b, err := p.parseKey(b) + if err != nil { + return ast.InvalidReference, nil, err + } + + // keyval-sep = ws %x3D ws ; = + + b = p.parseWhitespace(b) + + if len(b) == 0 { + return ast.InvalidReference, nil, newDecodeError(b, "expected = after a key, but the document ends there") + } + + b, err = expect('=', b) + if err != nil { + return ast.InvalidReference, nil, err + } + + b = p.parseWhitespace(b) + + valRef, b, err := p.parseVal(b) + if err != nil { + return ref, b, err + } + + p.builder.Chain(valRef, key) + p.builder.AttachChild(ref, valRef) + + return ref, b, err +} + +//nolint:cyclop,funlen +func (p *parser) parseVal(b []byte) (ast.Reference, []byte, error) { + // val = string / boolean / array / inline-table / date-time / float / integer + ref := ast.InvalidReference + + if len(b) == 0 { + return ref, nil, newDecodeError(b, "expected value, not eof") + } + + var err error + c := b[0] + + switch c { + case '"': + var raw []byte + var v []byte + if scanFollowsMultilineBasicStringDelimiter(b) { + raw, v, b, err = p.parseMultilineBasicString(b) + } else { + raw, v, b, err = p.parseBasicString(b) + } + + if err == nil { + ref = p.builder.Push(ast.Node{ + Kind: ast.String, + Raw: p.Range(raw), + Data: v, + }) + } + + return ref, b, err + case '\'': + var raw []byte + var v []byte + if scanFollowsMultilineLiteralStringDelimiter(b) { + raw, v, b, err = p.parseMultilineLiteralString(b) + } else { + raw, v, b, err = p.parseLiteralString(b) + } + + if err == nil { + ref = p.builder.Push(ast.Node{ + Kind: ast.String, + Raw: p.Range(raw), + Data: v, + }) + } + + return ref, b, err + case 't': + if !scanFollowsTrue(b) { + return ref, nil, newDecodeError(atmost(b, 4), "expected 'true'") + } + + ref = p.builder.Push(ast.Node{ + Kind: ast.Bool, + Data: b[:4], + }) + + return ref, b[4:], nil + case 'f': + if !scanFollowsFalse(b) { + return ref, nil, newDecodeError(atmost(b, 5), "expected 'false'") + } + + ref = p.builder.Push(ast.Node{ + Kind: ast.Bool, + Data: b[:5], + }) + + return ref, b[5:], nil + case '[': + return p.parseValArray(b) + case '{': + return p.parseInlineTable(b) + default: + return p.parseIntOrFloatOrDateTime(b) + } +} + +func atmost(b []byte, n int) []byte { + if n >= len(b) { + return b + } + + return b[:n] +} + +func (p *parser) parseLiteralString(b []byte) ([]byte, []byte, []byte, error) { + v, rest, err := scanLiteralString(b) + if err != nil { + return nil, nil, nil, err + } + + return v, v[1 : len(v)-1], rest, nil +} + +func (p *parser) parseInlineTable(b []byte) (ast.Reference, []byte, error) { + // inline-table = inline-table-open [ inline-table-keyvals ] inline-table-close + // inline-table-open = %x7B ws ; { + // inline-table-close = ws %x7D ; } + // inline-table-sep = ws %x2C ws ; , Comma + // inline-table-keyvals = keyval [ inline-table-sep inline-table-keyvals ] + parent := p.builder.Push(ast.Node{ + Kind: ast.InlineTable, + }) + + first := true + + var child ast.Reference + + b = b[1:] + + var err error + + for len(b) > 0 { + previousB := b + b = p.parseWhitespace(b) + + if len(b) == 0 { + return parent, nil, newDecodeError(previousB[:1], "inline table is incomplete") + } + + if b[0] == '}' { + break + } + + if !first { + b, err = expect(',', b) + if err != nil { + return parent, nil, err + } + b = p.parseWhitespace(b) + } + + var kv ast.Reference + + kv, b, err = p.parseKeyval(b) + if err != nil { + return parent, nil, err + } + + if first { + p.builder.AttachChild(parent, kv) + } else { + p.builder.Chain(child, kv) + } + child = kv + + first = false + } + + rest, err := expect('}', b) + + return parent, rest, err +} + +//nolint:funlen,cyclop +func (p *parser) parseValArray(b []byte) (ast.Reference, []byte, error) { + // array = array-open [ array-values ] ws-comment-newline array-close + // array-open = %x5B ; [ + // array-close = %x5D ; ] + // array-values = ws-comment-newline val ws-comment-newline array-sep array-values + // array-values =/ ws-comment-newline val ws-comment-newline [ array-sep ] + // array-sep = %x2C ; , Comma + // ws-comment-newline = *( wschar / [ comment ] newline ) + arrayStart := b + b = b[1:] + + parent := p.builder.Push(ast.Node{ + Kind: ast.Array, + }) + + first := true + + var lastChild ast.Reference + + var err error + for len(b) > 0 { + b, err = p.parseOptionalWhitespaceCommentNewline(b) + if err != nil { + return parent, nil, err + } + + if len(b) == 0 { + return parent, nil, newDecodeError(arrayStart[:1], "array is incomplete") + } + + if b[0] == ']' { + break + } + + if b[0] == ',' { + if first { + return parent, nil, newDecodeError(b[0:1], "array cannot start with comma") + } + b = b[1:] + + b, err = p.parseOptionalWhitespaceCommentNewline(b) + if err != nil { + return parent, nil, err + } + } else if !first { + return parent, nil, newDecodeError(b[0:1], "array elements must be separated by commas") + } + + // TOML allows trailing commas in arrays. + if len(b) > 0 && b[0] == ']' { + break + } + + var valueRef ast.Reference + valueRef, b, err = p.parseVal(b) + if err != nil { + return parent, nil, err + } + + if first { + p.builder.AttachChild(parent, valueRef) + } else { + p.builder.Chain(lastChild, valueRef) + } + lastChild = valueRef + + b, err = p.parseOptionalWhitespaceCommentNewline(b) + if err != nil { + return parent, nil, err + } + first = false + } + + rest, err := expect(']', b) + + return parent, rest, err +} + +func (p *parser) parseOptionalWhitespaceCommentNewline(b []byte) ([]byte, error) { + for len(b) > 0 { + var err error + b = p.parseWhitespace(b) + + if len(b) > 0 && b[0] == '#' { + _, b, err = scanComment(b) + if err != nil { + return nil, err + } + } + + if len(b) == 0 { + break + } + + if b[0] == '\n' || b[0] == '\r' { + b, err = p.parseNewline(b) + if err != nil { + return nil, err + } + } else { + break + } + } + + return b, nil +} + +func (p *parser) parseMultilineLiteralString(b []byte) ([]byte, []byte, []byte, error) { + token, rest, err := scanMultilineLiteralString(b) + if err != nil { + return nil, nil, nil, err + } + + i := 3 + + // skip the immediate new line + if token[i] == '\n' { + i++ + } else if token[i] == '\r' && token[i+1] == '\n' { + i += 2 + } + + return token, token[i : len(token)-3], rest, err +} + +//nolint:funlen,gocognit,cyclop +func (p *parser) parseMultilineBasicString(b []byte) ([]byte, []byte, []byte, error) { + // ml-basic-string = ml-basic-string-delim [ newline ] ml-basic-body + // ml-basic-string-delim + // ml-basic-string-delim = 3quotation-mark + // ml-basic-body = *mlb-content *( mlb-quotes 1*mlb-content ) [ mlb-quotes ] + // + // mlb-content = mlb-char / newline / mlb-escaped-nl + // mlb-char = mlb-unescaped / escaped + // mlb-quotes = 1*2quotation-mark + // mlb-unescaped = wschar / %x21 / %x23-5B / %x5D-7E / non-ascii + // mlb-escaped-nl = escape ws newline *( wschar / newline ) + token, escaped, rest, err := scanMultilineBasicString(b) + if err != nil { + return nil, nil, nil, err + } + + i := 3 + + // skip the immediate new line + if token[i] == '\n' { + i++ + } else if token[i] == '\r' && token[i+1] == '\n' { + i += 2 + } + + // fast path + startIdx := i + endIdx := len(token) - len(`"""`) + + if !escaped { + str := token[startIdx:endIdx] + verr := utf8TomlValidAlreadyEscaped(str) + if verr.Zero() { + return token, str, rest, nil + } + return nil, nil, nil, newDecodeError(str[verr.Index:verr.Index+verr.Size], "invalid UTF-8") + } + + var builder bytes.Buffer + + // The scanner ensures that the token starts and ends with quotes and that + // escapes are balanced. + for i < len(token)-3 { + c := token[i] + + //nolint:nestif + if c == '\\' { + // When the last non-whitespace character on a line is an unescaped \, + // it will be trimmed along with all whitespace (including newlines) up + // to the next non-whitespace character or closing delimiter. + + isLastNonWhitespaceOnLine := false + j := 1 + findEOLLoop: + for ; j < len(token)-3-i; j++ { + switch token[i+j] { + case ' ', '\t': + continue + case '\r': + if token[i+j+1] == '\n' { + continue + } + case '\n': + isLastNonWhitespaceOnLine = true + } + break findEOLLoop + } + if isLastNonWhitespaceOnLine { + i += j + for ; i < len(token)-3; i++ { + c := token[i] + if !(c == '\n' || c == '\r' || c == ' ' || c == '\t') { + i-- + break + } + } + i++ + continue + } + + // handle escaping + i++ + c = token[i] + + switch c { + case '"', '\\': + builder.WriteByte(c) + case 'b': + builder.WriteByte('\b') + case 'f': + builder.WriteByte('\f') + case 'n': + builder.WriteByte('\n') + case 'r': + builder.WriteByte('\r') + case 't': + builder.WriteByte('\t') + case 'e': + builder.WriteByte(0x1B) + case 'u': + x, err := hexToRune(atmost(token[i+1:], 4), 4) + if err != nil { + return nil, nil, nil, err + } + builder.WriteRune(x) + i += 4 + case 'U': + x, err := hexToRune(atmost(token[i+1:], 8), 8) + if err != nil { + return nil, nil, nil, err + } + + builder.WriteRune(x) + i += 8 + default: + return nil, nil, nil, newDecodeError(token[i:i+1], "invalid escaped character %#U", c) + } + i++ + } else { + size := utf8ValidNext(token[i:]) + if size == 0 { + return nil, nil, nil, newDecodeError(token[i:i+1], "invalid character %#U", c) + } + builder.Write(token[i : i+size]) + i += size + } + } + + return token, builder.Bytes(), rest, nil +} + +func (p *parser) parseKey(b []byte) (ast.Reference, []byte, error) { + // key = simple-key / dotted-key + // simple-key = quoted-key / unquoted-key + // + // unquoted-key = 1*( ALPHA / DIGIT / %x2D / %x5F ) ; A-Z / a-z / 0-9 / - / _ + // quoted-key = basic-string / literal-string + // dotted-key = simple-key 1*( dot-sep simple-key ) + // + // dot-sep = ws %x2E ws ; . Period + raw, key, b, err := p.parseSimpleKey(b) + if err != nil { + return ast.InvalidReference, nil, err + } + + ref := p.builder.Push(ast.Node{ + Kind: ast.Key, + Raw: p.Range(raw), + Data: key, + }) + + for { + b = p.parseWhitespace(b) + if len(b) > 0 && b[0] == '.' { + b = p.parseWhitespace(b[1:]) + + raw, key, b, err = p.parseSimpleKey(b) + if err != nil { + return ref, nil, err + } + + p.builder.PushAndChain(ast.Node{ + Kind: ast.Key, + Raw: p.Range(raw), + Data: key, + }) + } else { + break + } + } + + return ref, b, nil +} + +func (p *parser) parseSimpleKey(b []byte) (raw, key, rest []byte, err error) { + if len(b) == 0 { + return nil, nil, nil, newDecodeError(b, "expected key but found none") + } + + // simple-key = quoted-key / unquoted-key + // unquoted-key = 1*( ALPHA / DIGIT / %x2D / %x5F ) ; A-Z / a-z / 0-9 / - / _ + // quoted-key = basic-string / literal-string + switch { + case b[0] == '\'': + return p.parseLiteralString(b) + case b[0] == '"': + return p.parseBasicString(b) + case isUnquotedKeyChar(b[0]): + key, rest = scanUnquotedKey(b) + return key, key, rest, nil + default: + return nil, nil, nil, newDecodeError(b[0:1], "invalid character at start of key: %c", b[0]) + } +} + +//nolint:funlen,cyclop +func (p *parser) parseBasicString(b []byte) ([]byte, []byte, []byte, error) { + // basic-string = quotation-mark *basic-char quotation-mark + // quotation-mark = %x22 ; " + // basic-char = basic-unescaped / escaped + // basic-unescaped = wschar / %x21 / %x23-5B / %x5D-7E / non-ascii + // escaped = escape escape-seq-char + // escape-seq-char = %x22 ; " quotation mark U+0022 + // escape-seq-char =/ %x5C ; \ reverse solidus U+005C + // escape-seq-char =/ %x62 ; b backspace U+0008 + // escape-seq-char =/ %x66 ; f form feed U+000C + // escape-seq-char =/ %x6E ; n line feed U+000A + // escape-seq-char =/ %x72 ; r carriage return U+000D + // escape-seq-char =/ %x74 ; t tab U+0009 + // escape-seq-char =/ %x75 4HEXDIG ; uXXXX U+XXXX + // escape-seq-char =/ %x55 8HEXDIG ; UXXXXXXXX U+XXXXXXXX + token, escaped, rest, err := scanBasicString(b) + if err != nil { + return nil, nil, nil, err + } + + startIdx := len(`"`) + endIdx := len(token) - len(`"`) + + // Fast path. If there is no escape sequence, the string should just be + // an UTF-8 encoded string, which is the same as Go. In that case, + // validate the string and return a direct reference to the buffer. + if !escaped { + str := token[startIdx:endIdx] + verr := utf8TomlValidAlreadyEscaped(str) + if verr.Zero() { + return token, str, rest, nil + } + return nil, nil, nil, newDecodeError(str[verr.Index:verr.Index+verr.Size], "invalid UTF-8") + } + + i := startIdx + + var builder bytes.Buffer + + // The scanner ensures that the token starts and ends with quotes and that + // escapes are balanced. + for i < len(token)-1 { + c := token[i] + if c == '\\' { + i++ + c = token[i] + + switch c { + case '"', '\\': + builder.WriteByte(c) + case 'b': + builder.WriteByte('\b') + case 'f': + builder.WriteByte('\f') + case 'n': + builder.WriteByte('\n') + case 'r': + builder.WriteByte('\r') + case 't': + builder.WriteByte('\t') + case 'e': + builder.WriteByte(0x1B) + case 'u': + x, err := hexToRune(token[i+1:len(token)-1], 4) + if err != nil { + return nil, nil, nil, err + } + + builder.WriteRune(x) + i += 4 + case 'U': + x, err := hexToRune(token[i+1:len(token)-1], 8) + if err != nil { + return nil, nil, nil, err + } + + builder.WriteRune(x) + i += 8 + default: + return nil, nil, nil, newDecodeError(token[i:i+1], "invalid escaped character %#U", c) + } + i++ + } else { + size := utf8ValidNext(token[i:]) + if size == 0 { + return nil, nil, nil, newDecodeError(token[i:i+1], "invalid character %#U", c) + } + builder.Write(token[i : i+size]) + i += size + } + } + + return token, builder.Bytes(), rest, nil +} + +func hexToRune(b []byte, length int) (rune, error) { + if len(b) < length { + return -1, newDecodeError(b, "unicode point needs %d character, not %d", length, len(b)) + } + b = b[:length] + + var r uint32 + for i, c := range b { + d := uint32(0) + switch { + case '0' <= c && c <= '9': + d = uint32(c - '0') + case 'a' <= c && c <= 'f': + d = uint32(c - 'a' + 10) + case 'A' <= c && c <= 'F': + d = uint32(c - 'A' + 10) + default: + return -1, newDecodeError(b[i:i+1], "non-hex character") + } + r = r*16 + d + } + + if r > unicode.MaxRune || 0xD800 <= r && r < 0xE000 { + return -1, newDecodeError(b, "escape sequence is invalid Unicode code point") + } + + return rune(r), nil +} + +func (p *parser) parseWhitespace(b []byte) []byte { + // ws = *wschar + // wschar = %x20 ; Space + // wschar =/ %x09 ; Horizontal tab + _, rest := scanWhitespace(b) + + return rest +} + +//nolint:cyclop +func (p *parser) parseIntOrFloatOrDateTime(b []byte) (ast.Reference, []byte, error) { + switch b[0] { + case 'i': + if !scanFollowsInf(b) { + return ast.InvalidReference, nil, newDecodeError(atmost(b, 3), "expected 'inf'") + } + + return p.builder.Push(ast.Node{ + Kind: ast.Float, + Data: b[:3], + }), b[3:], nil + case 'n': + if !scanFollowsNan(b) { + return ast.InvalidReference, nil, newDecodeError(atmost(b, 3), "expected 'nan'") + } + + return p.builder.Push(ast.Node{ + Kind: ast.Float, + Data: b[:3], + }), b[3:], nil + case '+', '-': + return p.scanIntOrFloat(b) + } + + if len(b) < 3 { + return p.scanIntOrFloat(b) + } + + s := 5 + if len(b) < s { + s = len(b) + } + + for idx, c := range b[:s] { + if isDigit(c) { + continue + } + + if idx == 2 && c == ':' || (idx == 4 && c == '-') { + return p.scanDateTime(b) + } + + break + } + + return p.scanIntOrFloat(b) +} + +func (p *parser) scanDateTime(b []byte) (ast.Reference, []byte, error) { + // scans for contiguous characters in [0-9T:Z.+-], and up to one space if + // followed by a digit. + hasDate := false + hasTime := false + hasTz := false + seenSpace := false + + i := 0 +byteLoop: + for ; i < len(b); i++ { + c := b[i] + + switch { + case isDigit(c): + case c == '-': + hasDate = true + const minOffsetOfTz = 8 + if i >= minOffsetOfTz { + hasTz = true + } + case c == 'T' || c == 't' || c == ':' || c == '.': + hasTime = true + case c == '+' || c == '-' || c == 'Z' || c == 'z': + hasTz = true + case c == ' ': + if !seenSpace && i+1 < len(b) && isDigit(b[i+1]) { + i += 2 + // Avoid reaching past the end of the document in case the time + // is malformed. See TestIssue585. + if i >= len(b) { + i-- + } + seenSpace = true + hasTime = true + } else { + break byteLoop + } + default: + break byteLoop + } + } + + var kind ast.Kind + + if hasTime { + if hasDate { + if hasTz { + kind = ast.DateTime + } else { + kind = ast.LocalDateTime + } + } else { + kind = ast.LocalTime + } + } else { + kind = ast.LocalDate + } + + return p.builder.Push(ast.Node{ + Kind: kind, + Data: b[:i], + }), b[i:], nil +} + +//nolint:funlen,gocognit,cyclop +func (p *parser) scanIntOrFloat(b []byte) (ast.Reference, []byte, error) { + i := 0 + + if len(b) > 2 && b[0] == '0' && b[1] != '.' && b[1] != 'e' && b[1] != 'E' { + var isValidRune validRuneFn + + switch b[1] { + case 'x': + isValidRune = isValidHexRune + case 'o': + isValidRune = isValidOctalRune + case 'b': + isValidRune = isValidBinaryRune + default: + i++ + } + + if isValidRune != nil { + i += 2 + for ; i < len(b); i++ { + if !isValidRune(b[i]) { + break + } + } + } + + return p.builder.Push(ast.Node{ + Kind: ast.Integer, + Data: b[:i], + }), b[i:], nil + } + + isFloat := false + + for ; i < len(b); i++ { + c := b[i] + + if c >= '0' && c <= '9' || c == '+' || c == '-' || c == '_' { + continue + } + + if c == '.' || c == 'e' || c == 'E' { + isFloat = true + + continue + } + + if c == 'i' { + if scanFollowsInf(b[i:]) { + return p.builder.Push(ast.Node{ + Kind: ast.Float, + Data: b[:i+3], + }), b[i+3:], nil + } + + return ast.InvalidReference, nil, newDecodeError(b[i:i+1], "unexpected character 'i' while scanning for a number") + } + + if c == 'n' { + if scanFollowsNan(b[i:]) { + return p.builder.Push(ast.Node{ + Kind: ast.Float, + Data: b[:i+3], + }), b[i+3:], nil + } + + return ast.InvalidReference, nil, newDecodeError(b[i:i+1], "unexpected character 'n' while scanning for a number") + } + + break + } + + if i == 0 { + return ast.InvalidReference, b, newDecodeError(b, "incomplete number") + } + + kind := ast.Integer + + if isFloat { + kind = ast.Float + } + + return p.builder.Push(ast.Node{ + Kind: kind, + Data: b[:i], + }), b[i:], nil +} + +func isDigit(r byte) bool { + return r >= '0' && r <= '9' +} + +type validRuneFn func(r byte) bool + +func isValidHexRune(r byte) bool { + return r >= 'a' && r <= 'f' || + r >= 'A' && r <= 'F' || + r >= '0' && r <= '9' || + r == '_' +} + +func isValidOctalRune(r byte) bool { + return r >= '0' && r <= '7' || r == '_' +} + +func isValidBinaryRune(r byte) bool { + return r == '0' || r == '1' || r == '_' +} + +func expect(x byte, b []byte) ([]byte, error) { + if len(b) == 0 { + return nil, newDecodeError(b, "expected character %c but the document ended here", x) + } + + if b[0] != x { + return nil, newDecodeError(b[0:1], "expected character %c", x) + } + + return b[1:], nil +} diff --git a/vendor/github.com/pelletier/go-toml/v2/scanner.go b/vendor/github.com/pelletier/go-toml/v2/scanner.go new file mode 100644 index 000000000..bb445fab4 --- /dev/null +++ b/vendor/github.com/pelletier/go-toml/v2/scanner.go @@ -0,0 +1,269 @@ +package toml + +func scanFollows(b []byte, pattern string) bool { + n := len(pattern) + + return len(b) >= n && string(b[:n]) == pattern +} + +func scanFollowsMultilineBasicStringDelimiter(b []byte) bool { + return scanFollows(b, `"""`) +} + +func scanFollowsMultilineLiteralStringDelimiter(b []byte) bool { + return scanFollows(b, `'''`) +} + +func scanFollowsTrue(b []byte) bool { + return scanFollows(b, `true`) +} + +func scanFollowsFalse(b []byte) bool { + return scanFollows(b, `false`) +} + +func scanFollowsInf(b []byte) bool { + return scanFollows(b, `inf`) +} + +func scanFollowsNan(b []byte) bool { + return scanFollows(b, `nan`) +} + +func scanUnquotedKey(b []byte) ([]byte, []byte) { + // unquoted-key = 1*( ALPHA / DIGIT / %x2D / %x5F ) ; A-Z / a-z / 0-9 / - / _ + for i := 0; i < len(b); i++ { + if !isUnquotedKeyChar(b[i]) { + return b[:i], b[i:] + } + } + + return b, b[len(b):] +} + +func isUnquotedKeyChar(r byte) bool { + return (r >= 'A' && r <= 'Z') || (r >= 'a' && r <= 'z') || (r >= '0' && r <= '9') || r == '-' || r == '_' +} + +func scanLiteralString(b []byte) ([]byte, []byte, error) { + // literal-string = apostrophe *literal-char apostrophe + // apostrophe = %x27 ; ' apostrophe + // literal-char = %x09 / %x20-26 / %x28-7E / non-ascii + for i := 1; i < len(b); { + switch b[i] { + case '\'': + return b[:i+1], b[i+1:], nil + case '\n', '\r': + return nil, nil, newDecodeError(b[i:i+1], "literal strings cannot have new lines") + } + size := utf8ValidNext(b[i:]) + if size == 0 { + return nil, nil, newDecodeError(b[i:i+1], "invalid character") + } + i += size + } + + return nil, nil, newDecodeError(b[len(b):], "unterminated literal string") +} + +func scanMultilineLiteralString(b []byte) ([]byte, []byte, error) { + // ml-literal-string = ml-literal-string-delim [ newline ] ml-literal-body + // ml-literal-string-delim + // ml-literal-string-delim = 3apostrophe + // ml-literal-body = *mll-content *( mll-quotes 1*mll-content ) [ mll-quotes ] + // + // mll-content = mll-char / newline + // mll-char = %x09 / %x20-26 / %x28-7E / non-ascii + // mll-quotes = 1*2apostrophe + for i := 3; i < len(b); { + switch b[i] { + case '\'': + if scanFollowsMultilineLiteralStringDelimiter(b[i:]) { + i += 3 + + // At that point we found 3 apostrophe, and i is the + // index of the byte after the third one. The scanner + // needs to be eager, because there can be an extra 2 + // apostrophe that can be accepted at the end of the + // string. + + if i >= len(b) || b[i] != '\'' { + return b[:i], b[i:], nil + } + i++ + + if i >= len(b) || b[i] != '\'' { + return b[:i], b[i:], nil + } + i++ + + if i < len(b) && b[i] == '\'' { + return nil, nil, newDecodeError(b[i-3:i+1], "''' not allowed in multiline literal string") + } + + return b[:i], b[i:], nil + } + case '\r': + if len(b) < i+2 { + return nil, nil, newDecodeError(b[len(b):], `need a \n after \r`) + } + if b[i+1] != '\n' { + return nil, nil, newDecodeError(b[i:i+2], `need a \n after \r`) + } + i += 2 // skip the \n + continue + } + size := utf8ValidNext(b[i:]) + if size == 0 { + return nil, nil, newDecodeError(b[i:i+1], "invalid character") + } + i += size + } + + return nil, nil, newDecodeError(b[len(b):], `multiline literal string not terminated by '''`) +} + +func scanWindowsNewline(b []byte) ([]byte, []byte, error) { + const lenCRLF = 2 + if len(b) < lenCRLF { + return nil, nil, newDecodeError(b, "windows new line expected") + } + + if b[1] != '\n' { + return nil, nil, newDecodeError(b, `windows new line should be \r\n`) + } + + return b[:lenCRLF], b[lenCRLF:], nil +} + +func scanWhitespace(b []byte) ([]byte, []byte) { + for i := 0; i < len(b); i++ { + switch b[i] { + case ' ', '\t': + continue + default: + return b[:i], b[i:] + } + } + + return b, b[len(b):] +} + +//nolint:unparam +func scanComment(b []byte) ([]byte, []byte, error) { + // comment-start-symbol = %x23 ; # + // non-ascii = %x80-D7FF / %xE000-10FFFF + // non-eol = %x09 / %x20-7F / non-ascii + // + // comment = comment-start-symbol *non-eol + + for i := 1; i < len(b); { + if b[i] == '\n' { + return b[:i], b[i:], nil + } + if b[i] == '\r' { + if i+1 < len(b) && b[i+1] == '\n' { + return b[:i+1], b[i+1:], nil + } + return nil, nil, newDecodeError(b[i:i+1], "invalid character in comment") + } + size := utf8ValidNext(b[i:]) + if size == 0 { + return nil, nil, newDecodeError(b[i:i+1], "invalid character in comment") + } + + i += size + } + + return b, b[len(b):], nil +} + +func scanBasicString(b []byte) ([]byte, bool, []byte, error) { + // basic-string = quotation-mark *basic-char quotation-mark + // quotation-mark = %x22 ; " + // basic-char = basic-unescaped / escaped + // basic-unescaped = wschar / %x21 / %x23-5B / %x5D-7E / non-ascii + // escaped = escape escape-seq-char + escaped := false + i := 1 + + for ; i < len(b); i++ { + switch b[i] { + case '"': + return b[:i+1], escaped, b[i+1:], nil + case '\n', '\r': + return nil, escaped, nil, newDecodeError(b[i:i+1], "basic strings cannot have new lines") + case '\\': + if len(b) < i+2 { + return nil, escaped, nil, newDecodeError(b[i:i+1], "need a character after \\") + } + escaped = true + i++ // skip the next character + } + } + + return nil, escaped, nil, newDecodeError(b[len(b):], `basic string not terminated by "`) +} + +func scanMultilineBasicString(b []byte) ([]byte, bool, []byte, error) { + // ml-basic-string = ml-basic-string-delim [ newline ] ml-basic-body + // ml-basic-string-delim + // ml-basic-string-delim = 3quotation-mark + // ml-basic-body = *mlb-content *( mlb-quotes 1*mlb-content ) [ mlb-quotes ] + // + // mlb-content = mlb-char / newline / mlb-escaped-nl + // mlb-char = mlb-unescaped / escaped + // mlb-quotes = 1*2quotation-mark + // mlb-unescaped = wschar / %x21 / %x23-5B / %x5D-7E / non-ascii + // mlb-escaped-nl = escape ws newline *( wschar / newline ) + + escaped := false + i := 3 + + for ; i < len(b); i++ { + switch b[i] { + case '"': + if scanFollowsMultilineBasicStringDelimiter(b[i:]) { + i += 3 + + // At that point we found 3 apostrophe, and i is the + // index of the byte after the third one. The scanner + // needs to be eager, because there can be an extra 2 + // apostrophe that can be accepted at the end of the + // string. + + if i >= len(b) || b[i] != '"' { + return b[:i], escaped, b[i:], nil + } + i++ + + if i >= len(b) || b[i] != '"' { + return b[:i], escaped, b[i:], nil + } + i++ + + if i < len(b) && b[i] == '"' { + return nil, escaped, nil, newDecodeError(b[i-3:i+1], `""" not allowed in multiline basic string`) + } + + return b[:i], escaped, b[i:], nil + } + case '\\': + if len(b) < i+2 { + return nil, escaped, nil, newDecodeError(b[len(b):], "need a character after \\") + } + escaped = true + i++ // skip the next character + case '\r': + if len(b) < i+2 { + return nil, escaped, nil, newDecodeError(b[len(b):], `need a \n after \r`) + } + if b[i+1] != '\n' { + return nil, escaped, nil, newDecodeError(b[i:i+2], `need a \n after \r`) + } + i++ // skip the \n + } + } + + return nil, escaped, nil, newDecodeError(b[len(b):], `multiline basic string not terminated by """`) +} diff --git a/vendor/github.com/pelletier/go-toml/v2/strict.go b/vendor/github.com/pelletier/go-toml/v2/strict.go new file mode 100644 index 000000000..b7830d139 --- /dev/null +++ b/vendor/github.com/pelletier/go-toml/v2/strict.go @@ -0,0 +1,107 @@ +package toml + +import ( + "github.com/pelletier/go-toml/v2/internal/ast" + "github.com/pelletier/go-toml/v2/internal/danger" + "github.com/pelletier/go-toml/v2/internal/tracker" +) + +type strict struct { + Enabled bool + + // Tracks the current key being processed. + key tracker.KeyTracker + + missing []decodeError +} + +func (s *strict) EnterTable(node *ast.Node) { + if !s.Enabled { + return + } + + s.key.UpdateTable(node) +} + +func (s *strict) EnterArrayTable(node *ast.Node) { + if !s.Enabled { + return + } + + s.key.UpdateArrayTable(node) +} + +func (s *strict) EnterKeyValue(node *ast.Node) { + if !s.Enabled { + return + } + + s.key.Push(node) +} + +func (s *strict) ExitKeyValue(node *ast.Node) { + if !s.Enabled { + return + } + + s.key.Pop(node) +} + +func (s *strict) MissingTable(node *ast.Node) { + if !s.Enabled { + return + } + + s.missing = append(s.missing, decodeError{ + highlight: keyLocation(node), + message: "missing table", + key: s.key.Key(), + }) +} + +func (s *strict) MissingField(node *ast.Node) { + if !s.Enabled { + return + } + + s.missing = append(s.missing, decodeError{ + highlight: keyLocation(node), + message: "missing field", + key: s.key.Key(), + }) +} + +func (s *strict) Error(doc []byte) error { + if !s.Enabled || len(s.missing) == 0 { + return nil + } + + err := &StrictMissingError{ + Errors: make([]DecodeError, 0, len(s.missing)), + } + + for _, derr := range s.missing { + derr := derr + err.Errors = append(err.Errors, *wrapDecodeError(doc, &derr)) + } + + return err +} + +func keyLocation(node *ast.Node) []byte { + k := node.Key() + + hasOne := k.Next() + if !hasOne { + panic("should not be called with empty key") + } + + start := k.Node().Data + end := k.Node().Data + + for k.Next() { + end = k.Node().Data + } + + return danger.BytesRange(start, end) +} diff --git a/vendor/github.com/pelletier/go-toml/v2/toml.abnf b/vendor/github.com/pelletier/go-toml/v2/toml.abnf new file mode 100644 index 000000000..473f3749e --- /dev/null +++ b/vendor/github.com/pelletier/go-toml/v2/toml.abnf @@ -0,0 +1,243 @@ +;; This document describes TOML's syntax, using the ABNF format (defined in +;; RFC 5234 -- https://www.ietf.org/rfc/rfc5234.txt). +;; +;; All valid TOML documents will match this description, however certain +;; invalid documents would need to be rejected as per the semantics described +;; in the supporting text description. + +;; It is possible to try this grammar interactively, using instaparse. +;; http://instaparse.mojombo.com/ +;; +;; To do so, in the lower right, click on Options and change `:input-format` to +;; ':abnf'. Then paste this entire ABNF document into the grammar entry box +;; (above the options). Then you can type or paste a sample TOML document into +;; the beige box on the left. Tada! + +;; Overall Structure + +toml = expression *( newline expression ) + +expression = ws [ comment ] +expression =/ ws keyval ws [ comment ] +expression =/ ws table ws [ comment ] + +;; Whitespace + +ws = *wschar +wschar = %x20 ; Space +wschar =/ %x09 ; Horizontal tab + +;; Newline + +newline = %x0A ; LF +newline =/ %x0D.0A ; CRLF + +;; Comment + +comment-start-symbol = %x23 ; # +non-ascii = %x80-D7FF / %xE000-10FFFF +non-eol = %x09 / %x20-7F / non-ascii + +comment = comment-start-symbol *non-eol + +;; Key-Value pairs + +keyval = key keyval-sep val + +key = simple-key / dotted-key +simple-key = quoted-key / unquoted-key + +unquoted-key = 1*( ALPHA / DIGIT / %x2D / %x5F ) ; A-Z / a-z / 0-9 / - / _ +quoted-key = basic-string / literal-string +dotted-key = simple-key 1*( dot-sep simple-key ) + +dot-sep = ws %x2E ws ; . Period +keyval-sep = ws %x3D ws ; = + +val = string / boolean / array / inline-table / date-time / float / integer + +;; String + +string = ml-basic-string / basic-string / ml-literal-string / literal-string + +;; Basic String + +basic-string = quotation-mark *basic-char quotation-mark + +quotation-mark = %x22 ; " + +basic-char = basic-unescaped / escaped +basic-unescaped = wschar / %x21 / %x23-5B / %x5D-7E / non-ascii +escaped = escape escape-seq-char + +escape = %x5C ; \ +escape-seq-char = %x22 ; " quotation mark U+0022 +escape-seq-char =/ %x5C ; \ reverse solidus U+005C +escape-seq-char =/ %x62 ; b backspace U+0008 +escape-seq-char =/ %x66 ; f form feed U+000C +escape-seq-char =/ %x6E ; n line feed U+000A +escape-seq-char =/ %x72 ; r carriage return U+000D +escape-seq-char =/ %x74 ; t tab U+0009 +escape-seq-char =/ %x75 4HEXDIG ; uXXXX U+XXXX +escape-seq-char =/ %x55 8HEXDIG ; UXXXXXXXX U+XXXXXXXX + +;; Multiline Basic String + +ml-basic-string = ml-basic-string-delim [ newline ] ml-basic-body + ml-basic-string-delim +ml-basic-string-delim = 3quotation-mark +ml-basic-body = *mlb-content *( mlb-quotes 1*mlb-content ) [ mlb-quotes ] + +mlb-content = mlb-char / newline / mlb-escaped-nl +mlb-char = mlb-unescaped / escaped +mlb-quotes = 1*2quotation-mark +mlb-unescaped = wschar / %x21 / %x23-5B / %x5D-7E / non-ascii +mlb-escaped-nl = escape ws newline *( wschar / newline ) + +;; Literal String + +literal-string = apostrophe *literal-char apostrophe + +apostrophe = %x27 ; ' apostrophe + +literal-char = %x09 / %x20-26 / %x28-7E / non-ascii + +;; Multiline Literal String + +ml-literal-string = ml-literal-string-delim [ newline ] ml-literal-body + ml-literal-string-delim +ml-literal-string-delim = 3apostrophe +ml-literal-body = *mll-content *( mll-quotes 1*mll-content ) [ mll-quotes ] + +mll-content = mll-char / newline +mll-char = %x09 / %x20-26 / %x28-7E / non-ascii +mll-quotes = 1*2apostrophe + +;; Integer + +integer = dec-int / hex-int / oct-int / bin-int + +minus = %x2D ; - +plus = %x2B ; + +underscore = %x5F ; _ +digit1-9 = %x31-39 ; 1-9 +digit0-7 = %x30-37 ; 0-7 +digit0-1 = %x30-31 ; 0-1 + +hex-prefix = %x30.78 ; 0x +oct-prefix = %x30.6F ; 0o +bin-prefix = %x30.62 ; 0b + +dec-int = [ minus / plus ] unsigned-dec-int +unsigned-dec-int = DIGIT / digit1-9 1*( DIGIT / underscore DIGIT ) + +hex-int = hex-prefix HEXDIG *( HEXDIG / underscore HEXDIG ) +oct-int = oct-prefix digit0-7 *( digit0-7 / underscore digit0-7 ) +bin-int = bin-prefix digit0-1 *( digit0-1 / underscore digit0-1 ) + +;; Float + +float = float-int-part ( exp / frac [ exp ] ) +float =/ special-float + +float-int-part = dec-int +frac = decimal-point zero-prefixable-int +decimal-point = %x2E ; . +zero-prefixable-int = DIGIT *( DIGIT / underscore DIGIT ) + +exp = "e" float-exp-part +float-exp-part = [ minus / plus ] zero-prefixable-int + +special-float = [ minus / plus ] ( inf / nan ) +inf = %x69.6e.66 ; inf +nan = %x6e.61.6e ; nan + +;; Boolean + +boolean = true / false + +true = %x74.72.75.65 ; true +false = %x66.61.6C.73.65 ; false + +;; Date and Time (as defined in RFC 3339) + +date-time = offset-date-time / local-date-time / local-date / local-time + +date-fullyear = 4DIGIT +date-month = 2DIGIT ; 01-12 +date-mday = 2DIGIT ; 01-28, 01-29, 01-30, 01-31 based on month/year +time-delim = "T" / %x20 ; T, t, or space +time-hour = 2DIGIT ; 00-23 +time-minute = 2DIGIT ; 00-59 +time-second = 2DIGIT ; 00-58, 00-59, 00-60 based on leap second rules +time-secfrac = "." 1*DIGIT +time-numoffset = ( "+" / "-" ) time-hour ":" time-minute +time-offset = "Z" / time-numoffset + +partial-time = time-hour ":" time-minute ":" time-second [ time-secfrac ] +full-date = date-fullyear "-" date-month "-" date-mday +full-time = partial-time time-offset + +;; Offset Date-Time + +offset-date-time = full-date time-delim full-time + +;; Local Date-Time + +local-date-time = full-date time-delim partial-time + +;; Local Date + +local-date = full-date + +;; Local Time + +local-time = partial-time + +;; Array + +array = array-open [ array-values ] ws-comment-newline array-close + +array-open = %x5B ; [ +array-close = %x5D ; ] + +array-values = ws-comment-newline val ws-comment-newline array-sep array-values +array-values =/ ws-comment-newline val ws-comment-newline [ array-sep ] + +array-sep = %x2C ; , Comma + +ws-comment-newline = *( wschar / [ comment ] newline ) + +;; Table + +table = std-table / array-table + +;; Standard Table + +std-table = std-table-open key std-table-close + +std-table-open = %x5B ws ; [ Left square bracket +std-table-close = ws %x5D ; ] Right square bracket + +;; Inline Table + +inline-table = inline-table-open [ inline-table-keyvals ] inline-table-close + +inline-table-open = %x7B ws ; { +inline-table-close = ws %x7D ; } +inline-table-sep = ws %x2C ws ; , Comma + +inline-table-keyvals = keyval [ inline-table-sep inline-table-keyvals ] + +;; Array Table + +array-table = array-table-open key array-table-close + +array-table-open = %x5B.5B ws ; [[ Double left square bracket +array-table-close = ws %x5D.5D ; ]] Double right square bracket + +;; Built-in ABNF terms, reproduced here for clarity + +ALPHA = %x41-5A / %x61-7A ; A-Z / a-z +DIGIT = %x30-39 ; 0-9 +HEXDIG = DIGIT / "A" / "B" / "C" / "D" / "E" / "F" diff --git a/vendor/github.com/pelletier/go-toml/v2/types.go b/vendor/github.com/pelletier/go-toml/v2/types.go new file mode 100644 index 000000000..630a45466 --- /dev/null +++ b/vendor/github.com/pelletier/go-toml/v2/types.go @@ -0,0 +1,14 @@ +package toml + +import ( + "encoding" + "reflect" + "time" +) + +var timeType = reflect.TypeOf(time.Time{}) +var textMarshalerType = reflect.TypeOf(new(encoding.TextMarshaler)).Elem() +var textUnmarshalerType = reflect.TypeOf(new(encoding.TextUnmarshaler)).Elem() +var mapStringInterfaceType = reflect.TypeOf(map[string]interface{}{}) +var sliceInterfaceType = reflect.TypeOf([]interface{}{}) +var stringType = reflect.TypeOf("") diff --git a/vendor/github.com/pelletier/go-toml/v2/unmarshaler.go b/vendor/github.com/pelletier/go-toml/v2/unmarshaler.go new file mode 100644 index 000000000..2219f704e --- /dev/null +++ b/vendor/github.com/pelletier/go-toml/v2/unmarshaler.go @@ -0,0 +1,1189 @@ +package toml + +import ( + "encoding" + "errors" + "fmt" + "io" + "io/ioutil" + "math" + "reflect" + "strings" + "sync/atomic" + "time" + + "github.com/pelletier/go-toml/v2/internal/ast" + "github.com/pelletier/go-toml/v2/internal/danger" + "github.com/pelletier/go-toml/v2/internal/tracker" +) + +// Unmarshal deserializes a TOML document into a Go value. +// +// It is a shortcut for Decoder.Decode() with the default options. +func Unmarshal(data []byte, v interface{}) error { + p := parser{} + p.Reset(data) + d := decoder{p: &p} + + return d.FromParser(v) +} + +// Decoder reads and decode a TOML document from an input stream. +type Decoder struct { + // input + r io.Reader + + // global settings + strict bool +} + +// NewDecoder creates a new Decoder that will read from r. +func NewDecoder(r io.Reader) *Decoder { + return &Decoder{r: r} +} + +// DisallowUnknownFields causes the Decoder to return an error when the +// destination is a struct and the input contains a key that does not match a +// non-ignored field. +// +// In that case, the Decoder returns a StrictMissingError that can be used to +// retrieve the individual errors as well as generate a human readable +// description of the missing fields. +func (d *Decoder) DisallowUnknownFields() *Decoder { + d.strict = true + return d +} + +// Decode the whole content of r into v. +// +// By default, values in the document that don't exist in the target Go value +// are ignored. See Decoder.DisallowUnknownFields() to change this behavior. +// +// When a TOML local date, time, or date-time is decoded into a time.Time, its +// value is represented in time.Local timezone. Otherwise the approriate Local* +// structure is used. For time values, precision up to the nanosecond is +// supported by truncating extra digits. +// +// Empty tables decoded in an interface{} create an empty initialized +// map[string]interface{}. +// +// Types implementing the encoding.TextUnmarshaler interface are decoded from a +// TOML string. +// +// When decoding a number, go-toml will return an error if the number is out of +// bounds for the target type (which includes negative numbers when decoding +// into an unsigned int). +// +// If an error occurs while decoding the content of the document, this function +// returns a toml.DecodeError, providing context about the issue. When using +// strict mode and a field is missing, a `toml.StrictMissingError` is +// returned. In any other case, this function returns a standard Go error. +// +// Type mapping +// +// List of supported TOML types and their associated accepted Go types: +// +// String -> string +// Integer -> uint*, int*, depending on size +// Float -> float*, depending on size +// Boolean -> bool +// Offset Date-Time -> time.Time +// Local Date-time -> LocalDateTime, time.Time +// Local Date -> LocalDate, time.Time +// Local Time -> LocalTime, time.Time +// Array -> slice and array, depending on elements types +// Table -> map and struct +// Inline Table -> same as Table +// Array of Tables -> same as Array and Table +func (d *Decoder) Decode(v interface{}) error { + b, err := ioutil.ReadAll(d.r) + if err != nil { + return fmt.Errorf("toml: %w", err) + } + + p := parser{} + p.Reset(b) + dec := decoder{ + p: &p, + strict: strict{ + Enabled: d.strict, + }, + } + + return dec.FromParser(v) +} + +type decoder struct { + // Which parser instance in use for this decoding session. + p *parser + + // Flag indicating that the current expression is stashed. + // If set to true, calling nextExpr will not actually pull a new expression + // but turn off the flag instead. + stashedExpr bool + + // Skip expressions until a table is found. This is set to true when a + // table could not be create (missing field in map), so all KV expressions + // need to be skipped. + skipUntilTable bool + + // Tracks position in Go arrays. + // This is used when decoding [[array tables]] into Go arrays. Given array + // tables are separate TOML expression, we need to keep track of where we + // are at in the Go array, as we can't just introspect its size. + arrayIndexes map[reflect.Value]int + + // Tracks keys that have been seen, with which type. + seen tracker.SeenTracker + + // Strict mode + strict strict + + // Current context for the error. + errorContext *errorContext +} + +type errorContext struct { + Struct reflect.Type + Field []int +} + +func (d *decoder) typeMismatchError(toml string, target reflect.Type) error { + if d.errorContext != nil && d.errorContext.Struct != nil { + ctx := d.errorContext + f := ctx.Struct.FieldByIndex(ctx.Field) + return fmt.Errorf("toml: cannot decode TOML %s into struct field %s.%s of type %s", toml, ctx.Struct, f.Name, f.Type) + } + return fmt.Errorf("toml: cannot decode TOML %s into a Go value of type %s", toml, target) +} + +func (d *decoder) expr() *ast.Node { + return d.p.Expression() +} + +func (d *decoder) nextExpr() bool { + if d.stashedExpr { + d.stashedExpr = false + return true + } + return d.p.NextExpression() +} + +func (d *decoder) stashExpr() { + d.stashedExpr = true +} + +func (d *decoder) arrayIndex(shouldAppend bool, v reflect.Value) int { + if d.arrayIndexes == nil { + d.arrayIndexes = make(map[reflect.Value]int, 1) + } + + idx, ok := d.arrayIndexes[v] + + if !ok { + d.arrayIndexes[v] = 0 + } else if shouldAppend { + idx++ + d.arrayIndexes[v] = idx + } + + return idx +} + +func (d *decoder) FromParser(v interface{}) error { + r := reflect.ValueOf(v) + if r.Kind() != reflect.Ptr { + return fmt.Errorf("toml: decoding can only be performed into a pointer, not %s", r.Kind()) + } + + if r.IsNil() { + return fmt.Errorf("toml: decoding pointer target cannot be nil") + } + + r = r.Elem() + if r.Kind() == reflect.Interface && r.IsNil() { + newMap := map[string]interface{}{} + r.Set(reflect.ValueOf(newMap)) + } + + err := d.fromParser(r) + if err == nil { + return d.strict.Error(d.p.data) + } + + var e *decodeError + if errors.As(err, &e) { + return wrapDecodeError(d.p.data, e) + } + + return err +} + +func (d *decoder) fromParser(root reflect.Value) error { + for d.nextExpr() { + err := d.handleRootExpression(d.expr(), root) + if err != nil { + return err + } + } + + return d.p.Error() +} + +/* +Rules for the unmarshal code: + +- The stack is used to keep track of which values need to be set where. +- handle* functions <=> switch on a given ast.Kind. +- unmarshalX* functions need to unmarshal a node of kind X. +- An "object" is either a struct or a map. +*/ + +func (d *decoder) handleRootExpression(expr *ast.Node, v reflect.Value) error { + var x reflect.Value + var err error + + if !(d.skipUntilTable && expr.Kind == ast.KeyValue) { + err = d.seen.CheckExpression(expr) + if err != nil { + return err + } + } + + switch expr.Kind { + case ast.KeyValue: + if d.skipUntilTable { + return nil + } + x, err = d.handleKeyValue(expr, v) + case ast.Table: + d.skipUntilTable = false + d.strict.EnterTable(expr) + x, err = d.handleTable(expr.Key(), v) + case ast.ArrayTable: + d.skipUntilTable = false + d.strict.EnterArrayTable(expr) + x, err = d.handleArrayTable(expr.Key(), v) + default: + panic(fmt.Errorf("parser should not permit expression of kind %s at document root", expr.Kind)) + } + + if d.skipUntilTable { + if expr.Kind == ast.Table || expr.Kind == ast.ArrayTable { + d.strict.MissingTable(expr) + } + } else if err == nil && x.IsValid() { + v.Set(x) + } + + return err +} + +func (d *decoder) handleArrayTable(key ast.Iterator, v reflect.Value) (reflect.Value, error) { + if key.Next() { + return d.handleArrayTablePart(key, v) + } + return d.handleKeyValues(v) +} + +func (d *decoder) handleArrayTableCollectionLast(key ast.Iterator, v reflect.Value) (reflect.Value, error) { + switch v.Kind() { + case reflect.Interface: + elem := v.Elem() + if !elem.IsValid() { + elem = reflect.New(sliceInterfaceType).Elem() + elem.Set(reflect.MakeSlice(sliceInterfaceType, 0, 16)) + } else if elem.Kind() == reflect.Slice { + if elem.Type() != sliceInterfaceType { + elem = reflect.New(sliceInterfaceType).Elem() + elem.Set(reflect.MakeSlice(sliceInterfaceType, 0, 16)) + } else if !elem.CanSet() { + nelem := reflect.New(sliceInterfaceType).Elem() + nelem.Set(reflect.MakeSlice(sliceInterfaceType, elem.Len(), elem.Cap())) + reflect.Copy(nelem, elem) + elem = nelem + } + } + return d.handleArrayTableCollectionLast(key, elem) + case reflect.Ptr: + elem := v.Elem() + if !elem.IsValid() { + ptr := reflect.New(v.Type().Elem()) + v.Set(ptr) + elem = ptr.Elem() + } + + elem, err := d.handleArrayTableCollectionLast(key, elem) + if err != nil { + return reflect.Value{}, err + } + v.Elem().Set(elem) + + return v, nil + case reflect.Slice: + elemType := v.Type().Elem() + var elem reflect.Value + if elemType.Kind() == reflect.Interface { + elem = makeMapStringInterface() + } else { + elem = reflect.New(elemType).Elem() + } + elem2, err := d.handleArrayTable(key, elem) + if err != nil { + return reflect.Value{}, err + } + if elem2.IsValid() { + elem = elem2 + } + return reflect.Append(v, elem), nil + case reflect.Array: + idx := d.arrayIndex(true, v) + if idx >= v.Len() { + return v, fmt.Errorf("toml: cannot decode array table into %s at position %d", v.Type(), idx) + } + elem := v.Index(idx) + _, err := d.handleArrayTable(key, elem) + return v, err + } + + return d.handleArrayTable(key, v) +} + +// When parsing an array table expression, each part of the key needs to be +// evaluated like a normal key, but if it returns a collection, it also needs to +// point to the last element of the collection. Unless it is the last part of +// the key, then it needs to create a new element at the end. +func (d *decoder) handleArrayTableCollection(key ast.Iterator, v reflect.Value) (reflect.Value, error) { + if key.IsLast() { + return d.handleArrayTableCollectionLast(key, v) + } + + switch v.Kind() { + case reflect.Ptr: + elem := v.Elem() + if !elem.IsValid() { + ptr := reflect.New(v.Type().Elem()) + v.Set(ptr) + elem = ptr.Elem() + } + + elem, err := d.handleArrayTableCollection(key, elem) + if err != nil { + return reflect.Value{}, err + } + if elem.IsValid() { + v.Elem().Set(elem) + } + + return v, nil + case reflect.Slice: + elem := v.Index(v.Len() - 1) + x, err := d.handleArrayTable(key, elem) + if err != nil || d.skipUntilTable { + return reflect.Value{}, err + } + if x.IsValid() { + elem.Set(x) + } + + return v, err + case reflect.Array: + idx := d.arrayIndex(false, v) + if idx >= v.Len() { + return v, fmt.Errorf("toml: cannot decode array table into %s at position %d", v.Type(), idx) + } + elem := v.Index(idx) + _, err := d.handleArrayTable(key, elem) + return v, err + } + + return d.handleArrayTable(key, v) +} + +func (d *decoder) handleKeyPart(key ast.Iterator, v reflect.Value, nextFn handlerFn, makeFn valueMakerFn) (reflect.Value, error) { + var rv reflect.Value + + // First, dispatch over v to make sure it is a valid object. + // There is no guarantee over what it could be. + switch v.Kind() { + case reflect.Ptr: + elem := v.Elem() + if !elem.IsValid() { + v.Set(reflect.New(v.Type().Elem())) + } + elem = v.Elem() + return d.handleKeyPart(key, elem, nextFn, makeFn) + case reflect.Map: + vt := v.Type() + + // Create the key for the map element. Convert to key type. + mk := reflect.ValueOf(string(key.Node().Data)).Convert(vt.Key()) + + // If the map does not exist, create it. + if v.IsNil() { + vt := v.Type() + v = reflect.MakeMap(vt) + rv = v + } + + mv := v.MapIndex(mk) + set := false + if !mv.IsValid() { + // If there is no value in the map, create a new one according to + // the map type. If the element type is interface, create either a + // map[string]interface{} or a []interface{} depending on whether + // this is the last part of the array table key. + + t := vt.Elem() + if t.Kind() == reflect.Interface { + mv = makeFn() + } else { + mv = reflect.New(t).Elem() + } + set = true + } else if mv.Kind() == reflect.Interface { + mv = mv.Elem() + if !mv.IsValid() { + mv = makeFn() + } + set = true + } else if !mv.CanAddr() { + vt := v.Type() + t := vt.Elem() + oldmv := mv + mv = reflect.New(t).Elem() + mv.Set(oldmv) + set = true + } + + x, err := nextFn(key, mv) + if err != nil { + return reflect.Value{}, err + } + + if x.IsValid() { + mv = x + set = true + } + + if set { + v.SetMapIndex(mk, mv) + } + case reflect.Struct: + path, found := structFieldPath(v, string(key.Node().Data)) + if !found { + d.skipUntilTable = true + return reflect.Value{}, nil + } + + if d.errorContext == nil { + d.errorContext = new(errorContext) + } + t := v.Type() + d.errorContext.Struct = t + d.errorContext.Field = path + + f := v.FieldByIndex(path) + x, err := nextFn(key, f) + if err != nil || d.skipUntilTable { + return reflect.Value{}, err + } + if x.IsValid() { + f.Set(x) + } + d.errorContext.Field = nil + d.errorContext.Struct = nil + case reflect.Interface: + if v.Elem().IsValid() { + v = v.Elem() + } else { + v = makeMapStringInterface() + } + + x, err := d.handleKeyPart(key, v, nextFn, makeFn) + if err != nil { + return reflect.Value{}, err + } + if x.IsValid() { + v = x + } + rv = v + default: + panic(fmt.Errorf("unhandled part: %s", v.Kind())) + } + + return rv, nil +} + +// HandleArrayTablePart navigates the Go structure v using the key v. It is +// only used for the prefix (non-last) parts of an array-table. When +// encountering a collection, it should go to the last element. +func (d *decoder) handleArrayTablePart(key ast.Iterator, v reflect.Value) (reflect.Value, error) { + var makeFn valueMakerFn + if key.IsLast() { + makeFn = makeSliceInterface + } else { + makeFn = makeMapStringInterface + } + return d.handleKeyPart(key, v, d.handleArrayTableCollection, makeFn) +} + +// HandleTable returns a reference when it has checked the next expression but +// cannot handle it. +func (d *decoder) handleTable(key ast.Iterator, v reflect.Value) (reflect.Value, error) { + if v.Kind() == reflect.Slice { + if v.Len() == 0 { + return reflect.Value{}, newDecodeError(key.Node().Data, "cannot store a table in a slice") + } + elem := v.Index(v.Len() - 1) + x, err := d.handleTable(key, elem) + if err != nil { + return reflect.Value{}, err + } + if x.IsValid() { + elem.Set(x) + } + return reflect.Value{}, nil + } + if key.Next() { + // Still scoping the key + return d.handleTablePart(key, v) + } + // Done scoping the key. + // Now handle all the key-value expressions in this table. + return d.handleKeyValues(v) +} + +// Handle root expressions until the end of the document or the next +// non-key-value. +func (d *decoder) handleKeyValues(v reflect.Value) (reflect.Value, error) { + var rv reflect.Value + for d.nextExpr() { + expr := d.expr() + if expr.Kind != ast.KeyValue { + // Stash the expression so that fromParser can just loop and use + // the right handler. + // We could just recurse ourselves here, but at least this gives a + // chance to pop the stack a bit. + d.stashExpr() + break + } + + err := d.seen.CheckExpression(expr) + if err != nil { + return reflect.Value{}, err + } + + x, err := d.handleKeyValue(expr, v) + if err != nil { + return reflect.Value{}, err + } + if x.IsValid() { + v = x + rv = x + } + } + return rv, nil +} + +type ( + handlerFn func(key ast.Iterator, v reflect.Value) (reflect.Value, error) + valueMakerFn func() reflect.Value +) + +func makeMapStringInterface() reflect.Value { + return reflect.MakeMap(mapStringInterfaceType) +} + +func makeSliceInterface() reflect.Value { + return reflect.MakeSlice(sliceInterfaceType, 0, 16) +} + +func (d *decoder) handleTablePart(key ast.Iterator, v reflect.Value) (reflect.Value, error) { + return d.handleKeyPart(key, v, d.handleTable, makeMapStringInterface) +} + +func (d *decoder) tryTextUnmarshaler(node *ast.Node, v reflect.Value) (bool, error) { + // Special case for time, because we allow to unmarshal to it from + // different kind of AST nodes. + if v.Type() == timeType { + return false, nil + } + + if v.CanAddr() && v.Addr().Type().Implements(textUnmarshalerType) { + err := v.Addr().Interface().(encoding.TextUnmarshaler).UnmarshalText(node.Data) + if err != nil { + return false, newDecodeError(d.p.Raw(node.Raw), "%w", err) + } + + return true, nil + } + + return false, nil +} + +func (d *decoder) handleValue(value *ast.Node, v reflect.Value) error { + for v.Kind() == reflect.Ptr { + v = initAndDereferencePointer(v) + } + + ok, err := d.tryTextUnmarshaler(value, v) + if ok || err != nil { + return err + } + + switch value.Kind { + case ast.String: + return d.unmarshalString(value, v) + case ast.Integer: + return d.unmarshalInteger(value, v) + case ast.Float: + return d.unmarshalFloat(value, v) + case ast.Bool: + return d.unmarshalBool(value, v) + case ast.DateTime: + return d.unmarshalDateTime(value, v) + case ast.LocalDate: + return d.unmarshalLocalDate(value, v) + case ast.LocalTime: + return d.unmarshalLocalTime(value, v) + case ast.LocalDateTime: + return d.unmarshalLocalDateTime(value, v) + case ast.InlineTable: + return d.unmarshalInlineTable(value, v) + case ast.Array: + return d.unmarshalArray(value, v) + default: + panic(fmt.Errorf("handleValue not implemented for %s", value.Kind)) + } +} + +func (d *decoder) unmarshalArray(array *ast.Node, v reflect.Value) error { + switch v.Kind() { + case reflect.Slice: + if v.IsNil() { + v.Set(reflect.MakeSlice(v.Type(), 0, 16)) + } else { + v.SetLen(0) + } + case reflect.Array: + // arrays are always initialized + case reflect.Interface: + elem := v.Elem() + if !elem.IsValid() { + elem = reflect.New(sliceInterfaceType).Elem() + elem.Set(reflect.MakeSlice(sliceInterfaceType, 0, 16)) + } else if elem.Kind() == reflect.Slice { + if elem.Type() != sliceInterfaceType { + elem = reflect.New(sliceInterfaceType).Elem() + elem.Set(reflect.MakeSlice(sliceInterfaceType, 0, 16)) + } else if !elem.CanSet() { + nelem := reflect.New(sliceInterfaceType).Elem() + nelem.Set(reflect.MakeSlice(sliceInterfaceType, elem.Len(), elem.Cap())) + reflect.Copy(nelem, elem) + elem = nelem + } + } + err := d.unmarshalArray(array, elem) + if err != nil { + return err + } + v.Set(elem) + return nil + default: + // TODO: use newDecodeError, but first the parser needs to fill + // array.Data. + return d.typeMismatchError("array", v.Type()) + } + + elemType := v.Type().Elem() + + it := array.Children() + idx := 0 + for it.Next() { + n := it.Node() + + // TODO: optimize + if v.Kind() == reflect.Slice { + elem := reflect.New(elemType).Elem() + + err := d.handleValue(n, elem) + if err != nil { + return err + } + + v.Set(reflect.Append(v, elem)) + } else { // array + if idx >= v.Len() { + return nil + } + elem := v.Index(idx) + err := d.handleValue(n, elem) + if err != nil { + return err + } + idx++ + } + } + + return nil +} + +func (d *decoder) unmarshalInlineTable(itable *ast.Node, v reflect.Value) error { + // Make sure v is an initialized object. + switch v.Kind() { + case reflect.Map: + if v.IsNil() { + v.Set(reflect.MakeMap(v.Type())) + } + case reflect.Struct: + // structs are always initialized. + case reflect.Interface: + elem := v.Elem() + if !elem.IsValid() { + elem = makeMapStringInterface() + v.Set(elem) + } + return d.unmarshalInlineTable(itable, elem) + default: + return newDecodeError(itable.Data, "cannot store inline table in Go type %s", v.Kind()) + } + + it := itable.Children() + for it.Next() { + n := it.Node() + + x, err := d.handleKeyValue(n, v) + if err != nil { + return err + } + if x.IsValid() { + v = x + } + } + + return nil +} + +func (d *decoder) unmarshalDateTime(value *ast.Node, v reflect.Value) error { + dt, err := parseDateTime(value.Data) + if err != nil { + return err + } + + v.Set(reflect.ValueOf(dt)) + return nil +} + +func (d *decoder) unmarshalLocalDate(value *ast.Node, v reflect.Value) error { + ld, err := parseLocalDate(value.Data) + if err != nil { + return err + } + + if v.Type() == timeType { + cast := ld.AsTime(time.Local) + v.Set(reflect.ValueOf(cast)) + return nil + } + + v.Set(reflect.ValueOf(ld)) + + return nil +} + +func (d *decoder) unmarshalLocalTime(value *ast.Node, v reflect.Value) error { + lt, rest, err := parseLocalTime(value.Data) + if err != nil { + return err + } + + if len(rest) > 0 { + return newDecodeError(rest, "extra characters at the end of a local time") + } + + v.Set(reflect.ValueOf(lt)) + return nil +} + +func (d *decoder) unmarshalLocalDateTime(value *ast.Node, v reflect.Value) error { + ldt, rest, err := parseLocalDateTime(value.Data) + if err != nil { + return err + } + + if len(rest) > 0 { + return newDecodeError(rest, "extra characters at the end of a local date time") + } + + if v.Type() == timeType { + cast := ldt.AsTime(time.Local) + + v.Set(reflect.ValueOf(cast)) + return nil + } + + v.Set(reflect.ValueOf(ldt)) + + return nil +} + +func (d *decoder) unmarshalBool(value *ast.Node, v reflect.Value) error { + b := value.Data[0] == 't' + + switch v.Kind() { + case reflect.Bool: + v.SetBool(b) + case reflect.Interface: + v.Set(reflect.ValueOf(b)) + default: + return newDecodeError(value.Data, "cannot assign boolean to a %t", b) + } + + return nil +} + +func (d *decoder) unmarshalFloat(value *ast.Node, v reflect.Value) error { + f, err := parseFloat(value.Data) + if err != nil { + return err + } + + switch v.Kind() { + case reflect.Float64: + v.SetFloat(f) + case reflect.Float32: + if f > math.MaxFloat32 { + return newDecodeError(value.Data, "number %f does not fit in a float32", f) + } + v.SetFloat(f) + case reflect.Interface: + v.Set(reflect.ValueOf(f)) + default: + return newDecodeError(value.Data, "float cannot be assigned to %s", v.Kind()) + } + + return nil +} + +func (d *decoder) unmarshalInteger(value *ast.Node, v reflect.Value) error { + const ( + maxInt = int64(^uint(0) >> 1) + minInt = -maxInt - 1 + ) + + i, err := parseInteger(value.Data) + if err != nil { + return err + } + + var r reflect.Value + + switch v.Kind() { + case reflect.Int64: + v.SetInt(i) + return nil + case reflect.Int32: + if i < math.MinInt32 || i > math.MaxInt32 { + return fmt.Errorf("toml: number %d does not fit in an int32", i) + } + + r = reflect.ValueOf(int32(i)) + case reflect.Int16: + if i < math.MinInt16 || i > math.MaxInt16 { + return fmt.Errorf("toml: number %d does not fit in an int16", i) + } + + r = reflect.ValueOf(int16(i)) + case reflect.Int8: + if i < math.MinInt8 || i > math.MaxInt8 { + return fmt.Errorf("toml: number %d does not fit in an int8", i) + } + + r = reflect.ValueOf(int8(i)) + case reflect.Int: + if i < minInt || i > maxInt { + return fmt.Errorf("toml: number %d does not fit in an int", i) + } + + r = reflect.ValueOf(int(i)) + case reflect.Uint64: + if i < 0 { + return fmt.Errorf("toml: negative number %d does not fit in an uint64", i) + } + + r = reflect.ValueOf(uint64(i)) + case reflect.Uint32: + if i < 0 || i > math.MaxUint32 { + return fmt.Errorf("toml: negative number %d does not fit in an uint32", i) + } + + r = reflect.ValueOf(uint32(i)) + case reflect.Uint16: + if i < 0 || i > math.MaxUint16 { + return fmt.Errorf("toml: negative number %d does not fit in an uint16", i) + } + + r = reflect.ValueOf(uint16(i)) + case reflect.Uint8: + if i < 0 || i > math.MaxUint8 { + return fmt.Errorf("toml: negative number %d does not fit in an uint8", i) + } + + r = reflect.ValueOf(uint8(i)) + case reflect.Uint: + if i < 0 { + return fmt.Errorf("toml: negative number %d does not fit in an uint", i) + } + + r = reflect.ValueOf(uint(i)) + case reflect.Interface: + r = reflect.ValueOf(i) + default: + return d.typeMismatchError("integer", v.Type()) + } + + if !r.Type().AssignableTo(v.Type()) { + r = r.Convert(v.Type()) + } + + v.Set(r) + + return nil +} + +func (d *decoder) unmarshalString(value *ast.Node, v reflect.Value) error { + switch v.Kind() { + case reflect.String: + v.SetString(string(value.Data)) + case reflect.Interface: + v.Set(reflect.ValueOf(string(value.Data))) + default: + return newDecodeError(d.p.Raw(value.Raw), "cannot store TOML string into a Go %s", v.Kind()) + } + + return nil +} + +func (d *decoder) handleKeyValue(expr *ast.Node, v reflect.Value) (reflect.Value, error) { + d.strict.EnterKeyValue(expr) + + v, err := d.handleKeyValueInner(expr.Key(), expr.Value(), v) + if d.skipUntilTable { + d.strict.MissingField(expr) + d.skipUntilTable = false + } + + d.strict.ExitKeyValue(expr) + + return v, err +} + +func (d *decoder) handleKeyValueInner(key ast.Iterator, value *ast.Node, v reflect.Value) (reflect.Value, error) { + if key.Next() { + // Still scoping the key + return d.handleKeyValuePart(key, value, v) + } + // Done scoping the key. + // v is whatever Go value we need to fill. + return reflect.Value{}, d.handleValue(value, v) +} + +func (d *decoder) handleKeyValuePart(key ast.Iterator, value *ast.Node, v reflect.Value) (reflect.Value, error) { + // contains the replacement for v + var rv reflect.Value + + // First, dispatch over v to make sure it is a valid object. + // There is no guarantee over what it could be. + switch v.Kind() { + case reflect.Map: + vt := v.Type() + + mk := reflect.ValueOf(string(key.Node().Data)) + mkt := stringType + + keyType := vt.Key() + if !mkt.AssignableTo(keyType) { + if !mkt.ConvertibleTo(keyType) { + return reflect.Value{}, fmt.Errorf("toml: cannot convert map key of type %s to expected type %s", mkt, keyType) + } + + mk = mk.Convert(keyType) + } + + // If the map does not exist, create it. + if v.IsNil() { + v = reflect.MakeMap(vt) + rv = v + } + + mv := v.MapIndex(mk) + set := false + if !mv.IsValid() { + set = true + mv = reflect.New(v.Type().Elem()).Elem() + } else { + if key.IsLast() { + var x interface{} + mv = reflect.ValueOf(&x).Elem() + set = true + } + } + + nv, err := d.handleKeyValueInner(key, value, mv) + if err != nil { + return reflect.Value{}, err + } + if nv.IsValid() { + mv = nv + set = true + } + + if set { + v.SetMapIndex(mk, mv) + } + case reflect.Struct: + path, found := structFieldPath(v, string(key.Node().Data)) + if !found { + d.skipUntilTable = true + break + } + + if d.errorContext == nil { + d.errorContext = new(errorContext) + } + t := v.Type() + d.errorContext.Struct = t + d.errorContext.Field = path + + f := v.FieldByIndex(path) + x, err := d.handleKeyValueInner(key, value, f) + if err != nil { + return reflect.Value{}, err + } + + if x.IsValid() { + f.Set(x) + } + d.errorContext.Struct = nil + d.errorContext.Field = nil + case reflect.Interface: + v = v.Elem() + + // Following encoding/json: decoding an object into an + // interface{}, it needs to always hold a + // map[string]interface{}. This is for the types to be + // consistent whether a previous value was set or not. + if !v.IsValid() || v.Type() != mapStringInterfaceType { + v = makeMapStringInterface() + } + + x, err := d.handleKeyValuePart(key, value, v) + if err != nil { + return reflect.Value{}, err + } + if x.IsValid() { + v = x + } + rv = v + case reflect.Ptr: + elem := v.Elem() + if !elem.IsValid() { + ptr := reflect.New(v.Type().Elem()) + v.Set(ptr) + rv = v + elem = ptr.Elem() + } + + elem2, err := d.handleKeyValuePart(key, value, elem) + if err != nil { + return reflect.Value{}, err + } + if elem2.IsValid() { + elem = elem2 + } + v.Elem().Set(elem) + default: + return reflect.Value{}, fmt.Errorf("unhandled kv part: %s", v.Kind()) + } + + return rv, nil +} + +func initAndDereferencePointer(v reflect.Value) reflect.Value { + var elem reflect.Value + if v.IsNil() { + ptr := reflect.New(v.Type().Elem()) + v.Set(ptr) + } + elem = v.Elem() + return elem +} + +type fieldPathsMap = map[string][]int + +var globalFieldPathsCache atomic.Value // map[danger.TypeID]fieldPathsMap + +func structFieldPath(v reflect.Value, name string) ([]int, bool) { + t := v.Type() + + cache, _ := globalFieldPathsCache.Load().(map[danger.TypeID]fieldPathsMap) + fieldPaths, ok := cache[danger.MakeTypeID(t)] + + if !ok { + fieldPaths = map[string][]int{} + + forEachField(t, nil, func(name string, path []int) { + fieldPaths[name] = path + // extra copy for the case-insensitive match + fieldPaths[strings.ToLower(name)] = path + }) + + newCache := make(map[danger.TypeID]fieldPathsMap, len(cache)+1) + newCache[danger.MakeTypeID(t)] = fieldPaths + for k, v := range cache { + newCache[k] = v + } + globalFieldPathsCache.Store(newCache) + } + + path, ok := fieldPaths[name] + if !ok { + path, ok = fieldPaths[strings.ToLower(name)] + } + return path, ok +} + +func forEachField(t reflect.Type, path []int, do func(name string, path []int)) { + n := t.NumField() + for i := 0; i < n; i++ { + f := t.Field(i) + + if !f.Anonymous && f.PkgPath != "" { + // only consider exported fields. + continue + } + + fieldPath := append(path, i) + fieldPath = fieldPath[:len(fieldPath):len(fieldPath)] + + if f.Anonymous { + forEachField(f.Type, fieldPath, do) + continue + } + + name := f.Tag.Get("toml") + if name == "-" { + continue + } + + if i := strings.IndexByte(name, ','); i >= 0 { + name = name[:i] + } + if name == "" { + name = f.Name + } + + do(name, fieldPath) + } +} diff --git a/vendor/github.com/pelletier/go-toml/v2/utf8.go b/vendor/github.com/pelletier/go-toml/v2/utf8.go new file mode 100644 index 000000000..d47a4f20c --- /dev/null +++ b/vendor/github.com/pelletier/go-toml/v2/utf8.go @@ -0,0 +1,240 @@ +package toml + +import ( + "unicode/utf8" +) + +type utf8Err struct { + Index int + Size int +} + +func (u utf8Err) Zero() bool { + return u.Size == 0 +} + +// Verified that a given string is only made of valid UTF-8 characters allowed +// by the TOML spec: +// +// Any Unicode character may be used except those that must be escaped: +// quotation mark, backslash, and the control characters other than tab (U+0000 +// to U+0008, U+000A to U+001F, U+007F). +// +// It is a copy of the Go 1.17 utf8.Valid implementation, tweaked to exit early +// when a character is not allowed. +// +// The returned utf8Err is Zero() if the string is valid, or contains the byte +// index and size of the invalid character. +// +// quotation mark => already checked +// backslash => already checked +// 0-0x8 => invalid +// 0x9 => tab, ok +// 0xA - 0x1F => invalid +// 0x7F => invalid +func utf8TomlValidAlreadyEscaped(p []byte) (err utf8Err) { + // Fast path. Check for and skip 8 bytes of ASCII characters per iteration. + offset := 0 + for len(p) >= 8 { + // Combining two 32 bit loads allows the same code to be used + // for 32 and 64 bit platforms. + // The compiler can generate a 32bit load for first32 and second32 + // on many platforms. See test/codegen/memcombine.go. + first32 := uint32(p[0]) | uint32(p[1])<<8 | uint32(p[2])<<16 | uint32(p[3])<<24 + second32 := uint32(p[4]) | uint32(p[5])<<8 | uint32(p[6])<<16 | uint32(p[7])<<24 + if (first32|second32)&0x80808080 != 0 { + // Found a non ASCII byte (>= RuneSelf). + break + } + + for i, b := range p[:8] { + if invalidAscii(b) { + err.Index = offset + i + err.Size = 1 + return + } + } + + p = p[8:] + offset += 8 + } + n := len(p) + for i := 0; i < n; { + pi := p[i] + if pi < utf8.RuneSelf { + if invalidAscii(pi) { + err.Index = offset + i + err.Size = 1 + return + } + i++ + continue + } + x := first[pi] + if x == xx { + // Illegal starter byte. + err.Index = offset + i + err.Size = 1 + return + } + size := int(x & 7) + if i+size > n { + // Short or invalid. + err.Index = offset + i + err.Size = n - i + return + } + accept := acceptRanges[x>>4] + if c := p[i+1]; c < accept.lo || accept.hi < c { + err.Index = offset + i + err.Size = 2 + return + } else if size == 2 { + } else if c := p[i+2]; c < locb || hicb < c { + err.Index = offset + i + err.Size = 3 + return + } else if size == 3 { + } else if c := p[i+3]; c < locb || hicb < c { + err.Index = offset + i + err.Size = 4 + return + } + i += size + } + return +} + +// Return the size of the next rune if valid, 0 otherwise. +func utf8ValidNext(p []byte) int { + c := p[0] + + if c < utf8.RuneSelf { + if invalidAscii(c) { + return 0 + } + return 1 + } + + x := first[c] + if x == xx { + // Illegal starter byte. + return 0 + } + size := int(x & 7) + if size > len(p) { + // Short or invalid. + return 0 + } + accept := acceptRanges[x>>4] + if c := p[1]; c < accept.lo || accept.hi < c { + return 0 + } else if size == 2 { + } else if c := p[2]; c < locb || hicb < c { + return 0 + } else if size == 3 { + } else if c := p[3]; c < locb || hicb < c { + return 0 + } + + return size +} + +var invalidAsciiTable = [256]bool{ + 0x00: true, + 0x01: true, + 0x02: true, + 0x03: true, + 0x04: true, + 0x05: true, + 0x06: true, + 0x07: true, + 0x08: true, + // 0x09 TAB + // 0x0A LF + 0x0B: true, + 0x0C: true, + // 0x0D CR + 0x0E: true, + 0x0F: true, + 0x10: true, + 0x11: true, + 0x12: true, + 0x13: true, + 0x14: true, + 0x15: true, + 0x16: true, + 0x17: true, + 0x18: true, + 0x19: true, + 0x1A: true, + 0x1B: true, + 0x1C: true, + 0x1D: true, + 0x1E: true, + 0x1F: true, + // 0x20 - 0x7E Printable ASCII characters + 0x7F: true, +} + +func invalidAscii(b byte) bool { + return invalidAsciiTable[b] +} + +// acceptRange gives the range of valid values for the second byte in a UTF-8 +// sequence. +type acceptRange struct { + lo uint8 // lowest value for second byte. + hi uint8 // highest value for second byte. +} + +// acceptRanges has size 16 to avoid bounds checks in the code that uses it. +var acceptRanges = [16]acceptRange{ + 0: {locb, hicb}, + 1: {0xA0, hicb}, + 2: {locb, 0x9F}, + 3: {0x90, hicb}, + 4: {locb, 0x8F}, +} + +// first is information about the first byte in a UTF-8 sequence. +var first = [256]uint8{ + // 1 2 3 4 5 6 7 8 9 A B C D E F + as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x00-0x0F + as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x10-0x1F + as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x20-0x2F + as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x30-0x3F + as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x40-0x4F + as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x50-0x5F + as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x60-0x6F + as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, as, // 0x70-0x7F + // 1 2 3 4 5 6 7 8 9 A B C D E F + xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, // 0x80-0x8F + xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, // 0x90-0x9F + xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, // 0xA0-0xAF + xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, // 0xB0-0xBF + xx, xx, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, // 0xC0-0xCF + s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, s1, // 0xD0-0xDF + s2, s3, s3, s3, s3, s3, s3, s3, s3, s3, s3, s3, s3, s4, s3, s3, // 0xE0-0xEF + s5, s6, s6, s6, s7, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, xx, // 0xF0-0xFF +} + +const ( + // The default lowest and highest continuation byte. + locb = 0b10000000 + hicb = 0b10111111 + + // These names of these constants are chosen to give nice alignment in the + // table below. The first nibble is an index into acceptRanges or F for + // special one-byte cases. The second nibble is the Rune length or the + // Status for the special one-byte case. + xx = 0xF1 // invalid: size 1 + as = 0xF0 // ASCII: size 1 + s1 = 0x02 // accept 0, size 2 + s2 = 0x13 // accept 1, size 3 + s3 = 0x03 // accept 0, size 3 + s4 = 0x23 // accept 2, size 3 + s5 = 0x34 // accept 3, size 4 + s6 = 0x04 // accept 0, size 4 + s7 = 0x44 // accept 4, size 4 +) diff --git a/vendor/github.com/prometheus/procfs/go.mod b/vendor/github.com/prometheus/procfs/go.mod deleted file mode 100644 index ba6681f52..000000000 --- a/vendor/github.com/prometheus/procfs/go.mod +++ /dev/null @@ -1,9 +0,0 @@ -module github.com/prometheus/procfs - -go 1.13 - -require ( - github.com/google/go-cmp v0.5.4 - golang.org/x/sync v0.0.0-20201207232520-09787c993a3a - golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c -) diff --git a/vendor/github.com/prometheus/procfs/go.sum b/vendor/github.com/prometheus/procfs/go.sum deleted file mode 100644 index 7ceaf56b7..000000000 --- a/vendor/github.com/prometheus/procfs/go.sum +++ /dev/null @@ -1,8 +0,0 @@ -github.com/google/go-cmp v0.5.4 h1:L8R9j+yAqZuZjsqh/z+F1NCffTKKLShY6zXTItVIZ8M= -github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -golang.org/x/sync v0.0.0-20201207232520-09787c993a3a h1:DcqTD9SDLc+1P/r1EmRBwnVsrOwW+kk2vWf9n+1sGhs= -golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c h1:VwygUrnw9jn88c4u8GD3rZQbqrP/tgas88tPUbBxQrk= -golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/vendor/github.com/russross/blackfriday/v2/README.md b/vendor/github.com/russross/blackfriday/v2/README.md index d5a8649bd..d9c08a22f 100644 --- a/vendor/github.com/russross/blackfriday/v2/README.md +++ b/vendor/github.com/russross/blackfriday/v2/README.md @@ -1,4 +1,6 @@ -Blackfriday [![Build Status](https://travis-ci.org/russross/blackfriday.svg?branch=master)](https://travis-ci.org/russross/blackfriday) +Blackfriday +[![Build Status][BuildV2SVG]][BuildV2URL] +[![PkgGoDev][PkgGoDevV2SVG]][PkgGoDevV2URL] =========== Blackfriday is a [Markdown][1] processor implemented in [Go][2]. It @@ -16,19 +18,21 @@ It started as a translation from C of [Sundown][3]. Installation ------------ -Blackfriday is compatible with any modern Go release. With Go 1.7 and git -installed: +Blackfriday is compatible with modern Go releases in module mode. +With Go installed: - go get gopkg.in/russross/blackfriday.v2 + go get github.com/russross/blackfriday/v2 -will download, compile, and install the package into your `$GOPATH` -directory hierarchy. Alternatively, you can achieve the same if you -import it into a project: +will resolve and add the package to the current development module, +then build and install it. Alternatively, you can achieve the same +if you import it in a package: - import "gopkg.in/russross/blackfriday.v2" + import "github.com/russross/blackfriday/v2" and `go get` without parameters. +Legacy GOPATH mode is unsupported. + Versions -------- @@ -36,13 +40,9 @@ Versions Currently maintained and recommended version of Blackfriday is `v2`. It's being developed on its own branch: https://github.com/russross/blackfriday/tree/v2 and the documentation is available at -https://godoc.org/gopkg.in/russross/blackfriday.v2. +https://pkg.go.dev/github.com/russross/blackfriday/v2. -It is `go get`-able via via [gopkg.in][6] at `gopkg.in/russross/blackfriday.v2`, -but we highly recommend using package management tool like [dep][7] or -[Glide][8] and make use of semantic versioning. With package management you -should import `github.com/russross/blackfriday` and specify that you're using -version 2.0.0. +It is `go get`-able in module mode at `github.com/russross/blackfriday/v2`. Version 2 offers a number of improvements over v1: @@ -62,6 +62,11 @@ Potential drawbacks: v2. See issue [#348](https://github.com/russross/blackfriday/issues/348) for tracking. +If you are still interested in the legacy `v1`, you can import it from +`github.com/russross/blackfriday`. Documentation for the legacy v1 can be found +here: https://pkg.go.dev/github.com/russross/blackfriday. + + Usage ----- @@ -91,7 +96,7 @@ Here's an example of simple usage of Blackfriday together with Bluemonday: ```go import ( "github.com/microcosm-cc/bluemonday" - "github.com/russross/blackfriday" + "github.com/russross/blackfriday/v2" ) // ... @@ -104,6 +109,8 @@ html := bluemonday.UGCPolicy().SanitizeBytes(unsafe) If you want to customize the set of options, use `blackfriday.WithExtensions`, `blackfriday.WithRenderer` and `blackfriday.WithRefOverride`. +### `blackfriday-tool` + You can also check out `blackfriday-tool` for a more complete example of how to use it. Download and install it using: @@ -114,7 +121,7 @@ markdown file using a standalone program. You can also browse the source directly on github if you are just looking for some example code: -* +* Note that if you have not already done so, installing `blackfriday-tool` will be sufficient to download and install @@ -123,6 +130,22 @@ installed in `$GOPATH/bin`. This is a statically-linked binary that can be copied to wherever you need it without worrying about dependencies and library versions. +### Sanitized anchor names + +Blackfriday includes an algorithm for creating sanitized anchor names +corresponding to a given input text. This algorithm is used to create +anchors for headings when `AutoHeadingIDs` extension is enabled. The +algorithm has a specification, so that other packages can create +compatible anchor names and links to those anchors. + +The specification is located at https://pkg.go.dev/github.com/russross/blackfriday/v2#hdr-Sanitized_Anchor_Names. + +[`SanitizedAnchorName`](https://pkg.go.dev/github.com/russross/blackfriday/v2#SanitizedAnchorName) exposes this functionality, and can be used to +create compatible links to the anchor names generated by blackfriday. +This algorithm is also implemented in a small standalone package at +[`github.com/shurcooL/sanitized_anchor_name`](https://pkg.go.dev/github.com/shurcooL/sanitized_anchor_name). It can be useful for clients +that want a small package and don't need full functionality of blackfriday. + Features -------- @@ -199,6 +222,15 @@ implements the following extensions: You can use 3 or more backticks to mark the beginning of the block, and the same number to mark the end of the block. + To preserve classes of fenced code blocks while using the bluemonday + HTML sanitizer, use the following policy: + + ```go + p := bluemonday.UGCPolicy() + p.AllowAttrs("class").Matching(regexp.MustCompile("^language-[a-zA-Z0-9]+$")).OnElements("code") + html := p.SanitizeBytes(unsafe) + ``` + * **Definition lists**. A simple definition list is made of a single-line term followed by a colon and the definition for that term. @@ -250,7 +282,7 @@ Other renderers Blackfriday is structured to allow alternative rendering engines. Here are a few of note: -* [github_flavored_markdown](https://godoc.org/github.com/shurcooL/github_flavored_markdown): +* [github_flavored_markdown](https://pkg.go.dev/github.com/shurcooL/github_flavored_markdown): provides a GitHub Flavored Markdown renderer with fenced code block highlighting, clickable heading anchor links. @@ -261,20 +293,28 @@ are a few of note: * [markdownfmt](https://github.com/shurcooL/markdownfmt): like gofmt, but for markdown. -* [LaTeX output](https://github.com/Ambrevar/Blackfriday-LaTeX): +* [LaTeX output](https://gitlab.com/ambrevar/blackfriday-latex): renders output as LaTeX. +* [bfchroma](https://github.com/Depado/bfchroma/): provides convenience + integration with the [Chroma](https://github.com/alecthomas/chroma) code + highlighting library. bfchroma is only compatible with v2 of Blackfriday and + provides a drop-in renderer ready to use with Blackfriday, as well as + options and means for further customization. + * [Blackfriday-Confluence](https://github.com/kentaro-m/blackfriday-confluence): provides a [Confluence Wiki Markup](https://confluence.atlassian.com/doc/confluence-wiki-markup-251003035.html) renderer. +* [Blackfriday-Slack](https://github.com/karriereat/blackfriday-slack): converts markdown to slack message style + -Todo +TODO ---- * More unit testing -* Improve unicode support. It does not understand all unicode +* Improve Unicode support. It does not understand all Unicode rules (about what constitutes a letter, a punctuation symbol, etc.), so it may fail to detect word boundaries correctly in - some instances. It is safe on all utf-8 input. + some instances. It is safe on all UTF-8 input. License @@ -286,6 +326,10 @@ License [1]: https://daringfireball.net/projects/markdown/ "Markdown" [2]: https://golang.org/ "Go Language" [3]: https://github.com/vmg/sundown "Sundown" - [4]: https://godoc.org/gopkg.in/russross/blackfriday.v2#Parse "Parse func" + [4]: https://pkg.go.dev/github.com/russross/blackfriday/v2#Parse "Parse func" [5]: https://github.com/microcosm-cc/bluemonday "Bluemonday" - [6]: https://labix.org/gopkg.in "gopkg.in" + + [BuildV2SVG]: https://travis-ci.org/russross/blackfriday.svg?branch=v2 + [BuildV2URL]: https://travis-ci.org/russross/blackfriday + [PkgGoDevV2SVG]: https://pkg.go.dev/badge/github.com/russross/blackfriday/v2 + [PkgGoDevV2URL]: https://pkg.go.dev/github.com/russross/blackfriday/v2 diff --git a/vendor/github.com/russross/blackfriday/v2/block.go b/vendor/github.com/russross/blackfriday/v2/block.go index b8607474e..dcd61e6e3 100644 --- a/vendor/github.com/russross/blackfriday/v2/block.go +++ b/vendor/github.com/russross/blackfriday/v2/block.go @@ -18,8 +18,7 @@ import ( "html" "regexp" "strings" - - "github.com/shurcooL/sanitized_anchor_name" + "unicode" ) const ( @@ -259,7 +258,7 @@ func (p *Markdown) prefixHeading(data []byte) int { } if end > i { if id == "" && p.extensions&AutoHeadingIDs != 0 { - id = sanitized_anchor_name.Create(string(data[i:end])) + id = SanitizedAnchorName(string(data[i:end])) } block := p.addBlock(Heading, data[i:end]) block.HeadingID = id @@ -673,6 +672,7 @@ func (p *Markdown) fencedCodeBlock(data []byte, doRender bool) int { if beg == 0 || beg >= len(data) { return 0 } + fenceLength := beg - 1 var work bytes.Buffer work.Write([]byte(info)) @@ -706,6 +706,7 @@ func (p *Markdown) fencedCodeBlock(data []byte, doRender bool) int { if doRender { block := p.addBlock(CodeBlock, work.Bytes()) // TODO: get rid of temp buffer block.IsFenced = true + block.FenceLength = fenceLength finalizeCodeBlock(block) } @@ -1503,7 +1504,7 @@ func (p *Markdown) paragraph(data []byte) int { id := "" if p.extensions&AutoHeadingIDs != 0 { - id = sanitized_anchor_name.Create(string(data[prev:eol])) + id = SanitizedAnchorName(string(data[prev:eol])) } block := p.addBlock(Heading, data[prev:eol]) @@ -1588,3 +1589,24 @@ func skipUntilChar(text []byte, start int, char byte) int { } return i } + +// SanitizedAnchorName returns a sanitized anchor name for the given text. +// +// It implements the algorithm specified in the package comment. +func SanitizedAnchorName(text string) string { + var anchorName []rune + futureDash := false + for _, r := range text { + switch { + case unicode.IsLetter(r) || unicode.IsNumber(r): + if futureDash && len(anchorName) > 0 { + anchorName = append(anchorName, '-') + } + futureDash = false + anchorName = append(anchorName, unicode.ToLower(r)) + default: + futureDash = true + } + } + return string(anchorName) +} diff --git a/vendor/github.com/russross/blackfriday/v2/doc.go b/vendor/github.com/russross/blackfriday/v2/doc.go index 5b3fa9876..57ff152a0 100644 --- a/vendor/github.com/russross/blackfriday/v2/doc.go +++ b/vendor/github.com/russross/blackfriday/v2/doc.go @@ -15,4 +15,32 @@ // // If you're interested in calling Blackfriday from command line, see // https://github.com/russross/blackfriday-tool. +// +// Sanitized Anchor Names +// +// Blackfriday includes an algorithm for creating sanitized anchor names +// corresponding to a given input text. This algorithm is used to create +// anchors for headings when AutoHeadingIDs extension is enabled. The +// algorithm is specified below, so that other packages can create +// compatible anchor names and links to those anchors. +// +// The algorithm iterates over the input text, interpreted as UTF-8, +// one Unicode code point (rune) at a time. All runes that are letters (category L) +// or numbers (category N) are considered valid characters. They are mapped to +// lower case, and included in the output. All other runes are considered +// invalid characters. Invalid characters that precede the first valid character, +// as well as invalid character that follow the last valid character +// are dropped completely. All other sequences of invalid characters +// between two valid characters are replaced with a single dash character '-'. +// +// SanitizedAnchorName exposes this functionality, and can be used to +// create compatible links to the anchor names generated by blackfriday. +// This algorithm is also implemented in a small standalone package at +// github.com/shurcooL/sanitized_anchor_name. It can be useful for clients +// that want a small package and don't need full functionality of blackfriday. package blackfriday + +// NOTE: Keep Sanitized Anchor Name algorithm in sync with package +// github.com/shurcooL/sanitized_anchor_name. +// Otherwise, users of sanitized_anchor_name will get anchor names +// that are incompatible with those generated by blackfriday. diff --git a/vendor/github.com/russross/blackfriday/v2/entities.go b/vendor/github.com/russross/blackfriday/v2/entities.go new file mode 100644 index 000000000..a2c3edb69 --- /dev/null +++ b/vendor/github.com/russross/blackfriday/v2/entities.go @@ -0,0 +1,2236 @@ +package blackfriday + +// Extracted from https://html.spec.whatwg.org/multipage/entities.json +var entities = map[string]bool{ + "Æ": true, + "Æ": true, + "&": true, + "&": true, + "Á": true, + "Á": true, + "Ă": true, + "Â": true, + "Â": true, + "А": true, + "𝔄": true, + "À": true, + "À": true, + "Α": true, + "Ā": true, + "⩓": true, + "Ą": true, + "𝔸": true, + "⁡": true, + "Å": true, + "Å": true, + "𝒜": true, + "≔": true, + "Ã": true, + "Ã": true, + "Ä": true, + "Ä": true, + "∖": true, + "⫧": true, + "⌆": true, + "Б": true, + "∵": true, + "ℬ": true, + "Β": true, + "𝔅": true, + "𝔹": true, + "˘": true, + "ℬ": true, + "≎": true, + "Ч": true, + "©": true, + "©": true, + "Ć": true, + "⋒": true, + "ⅅ": true, + "ℭ": true, + "Č": true, + "Ç": true, + "Ç": true, + "Ĉ": true, + "∰": true, + "Ċ": true, + "¸": true, + "·": true, + "ℭ": true, + "Χ": true, + "⊙": true, + "⊖": true, + "⊕": true, + "⊗": true, + "∲": true, + "”": true, + "’": true, + "∷": true, + "⩴": true, + "≡": true, + "∯": true, + "∮": true, + "ℂ": true, + "∐": true, + "∳": true, + "⨯": true, + "𝒞": true, + "⋓": true, + "≍": true, + "ⅅ": true, + "⤑": true, + "Ђ": true, + "Ѕ": true, + "Џ": true, + "‡": true, + "↡": true, + "⫤": true, + "Ď": true, + "Д": true, + "∇": true, + "Δ": true, + "𝔇": true, + "´": true, + "˙": true, + "˝": true, + "`": true, + "˜": true, + "⋄": true, + "ⅆ": true, + "𝔻": true, + "¨": true, + "⃜": true, + "≐": true, + "∯": true, + "¨": true, + "⇓": true, + "⇐": true, + "⇔": true, + "⫤": true, + "⟸": true, + "⟺": true, + "⟹": true, + "⇒": true, + "⊨": true, + "⇑": true, + "⇕": true, + "∥": true, + "↓": true, + "⤓": true, + "⇵": true, + "̑": true, + "⥐": true, + "⥞": true, + "↽": true, + "⥖": true, + "⥟": true, + "⇁": true, + "⥗": true, + "⊤": true, + "↧": true, + "⇓": true, + "𝒟": true, + "Đ": true, + "Ŋ": true, + "Ð": true, + "Ð": true, + "É": true, + "É": true, + "Ě": true, + "Ê": true, + "Ê": true, + "Э": true, + "Ė": true, + "𝔈": true, + "È": true, + "È": true, + "∈": true, + "Ē": true, + "◻": true, + "▫": true, + "Ę": true, + "𝔼": true, + "Ε": true, + "⩵": true, + "≂": true, + "⇌": true, + "ℰ": true, + "⩳": true, + "Η": true, + "Ë": true, + "Ë": true, + "∃": true, + "ⅇ": true, + "Ф": true, + "𝔉": true, + "◼": true, + "▪": true, + "𝔽": true, + "∀": true, + "ℱ": true, + "ℱ": true, + "Ѓ": true, + ">": true, + ">": true, + "Γ": true, + "Ϝ": true, + "Ğ": true, + "Ģ": true, + "Ĝ": true, + "Г": true, + "Ġ": true, + "𝔊": true, + "⋙": true, + "𝔾": true, + "≥": true, + "⋛": true, + "≧": true, + "⪢": true, + "≷": true, + "⩾": true, + "≳": true, + "𝒢": true, + "≫": true, + "Ъ": true, + "ˇ": true, + "^": true, + "Ĥ": true, + "ℌ": true, + "ℋ": true, + "ℍ": true, + "─": true, + "ℋ": true, + "Ħ": true, + "≎": true, + "≏": true, + "Е": true, + "IJ": true, + "Ё": true, + "Í": true, + "Í": true, + "Î": true, + "Î": true, + "И": true, + "İ": true, + "ℑ": true, + "Ì": true, + "Ì": true, + "ℑ": true, + "Ī": true, + "ⅈ": true, + "⇒": true, + "∬": true, + "∫": true, + "⋂": true, + "⁣": true, + "⁢": true, + "Į": true, + "𝕀": true, + "Ι": true, + "ℐ": true, + "Ĩ": true, + "І": true, + "Ï": true, + "Ï": true, + "Ĵ": true, + "Й": true, + "𝔍": true, + "𝕁": true, + "𝒥": true, + "Ј": true, + "Є": true, + "Х": true, + "Ќ": true, + "Κ": true, + "Ķ": true, + "К": true, + "𝔎": true, + "𝕂": true, + "𝒦": true, + "Љ": true, + "<": true, + "<": true, + "Ĺ": true, + "Λ": true, + "⟪": true, + "ℒ": true, + "↞": true, + "Ľ": true, + "Ļ": true, + "Л": true, + "⟨": true, + "←": true, + "⇤": true, + "⇆": true, + "⌈": true, + "⟦": true, + "⥡": true, + "⇃": true, + "⥙": true, + "⌊": true, + "↔": true, + "⥎": true, + "⊣": true, + "↤": true, + "⥚": true, + "⊲": true, + "⧏": true, + "⊴": true, + "⥑": true, + "⥠": true, + "↿": true, + "⥘": true, + "↼": true, + "⥒": true, + "⇐": true, + "⇔": true, + "⋚": true, + "≦": true, + "≶": true, + "⪡": true, + "⩽": true, + "≲": true, + "𝔏": true, + "⋘": true, + "⇚": true, + "Ŀ": true, + "⟵": true, + "⟷": true, + "⟶": true, + "⟸": true, + "⟺": true, + "⟹": true, + "𝕃": true, + "↙": true, + "↘": true, + "ℒ": true, + "↰": true, + "Ł": true, + "≪": true, + "⤅": true, + "М": true, + " ": true, + "ℳ": true, + "𝔐": true, + "∓": true, + "𝕄": true, + "ℳ": true, + "Μ": true, + "Њ": true, + "Ń": true, + "Ň": true, + "Ņ": true, + "Н": true, + "​": true, + "​": true, + "​": true, + "​": true, + "≫": true, + "≪": true, + " ": true, + "𝔑": true, + "⁠": true, + " ": true, + "ℕ": true, + "⫬": true, + "≢": true, + "≭": true, + "∦": true, + "∉": true, + "≠": true, + "≂̸": true, + "∄": true, + "≯": true, + "≱": true, + "≧̸": true, + "≫̸": true, + "≹": true, + "⩾̸": true, + "≵": true, + "≎̸": true, + "≏̸": true, + "⋪": true, + "⧏̸": true, + "⋬": true, + "≮": true, + "≰": true, + "≸": true, + "≪̸": true, + "⩽̸": true, + "≴": true, + "⪢̸": true, + "⪡̸": true, + "⊀": true, + "⪯̸": true, + "⋠": true, + "∌": true, + "⋫": true, + "⧐̸": true, + "⋭": true, + "⊏̸": true, + "⋢": true, + "⊐̸": true, + "⋣": true, + "⊂⃒": true, + "⊈": true, + "⊁": true, + "⪰̸": true, + "⋡": true, + "≿̸": true, + "⊃⃒": true, + "⊉": true, + "≁": true, + "≄": true, + "≇": true, + "≉": true, + "∤": true, + "𝒩": true, + "Ñ": true, + "Ñ": true, + "Ν": true, + "Œ": true, + "Ó": true, + "Ó": true, + "Ô": true, + "Ô": true, + "О": true, + "Ő": true, + "𝔒": true, + "Ò": true, + "Ò": true, + "Ō": true, + "Ω": true, + "Ο": true, + "𝕆": true, + "“": true, + "‘": true, + "⩔": true, + "𝒪": true, + "Ø": true, + "Ø": true, + "Õ": true, + "Õ": true, + "⨷": true, + "Ö": true, + "Ö": true, + "‾": true, + "⏞": true, + "⎴": true, + "⏜": true, + "∂": true, + "П": true, + "𝔓": true, + "Φ": true, + "Π": true, + "±": true, + "ℌ": true, + "ℙ": true, + "⪻": true, + "≺": true, + "⪯": true, + "≼": true, + "≾": true, + "″": true, + "∏": true, + "∷": true, + "∝": true, + "𝒫": true, + "Ψ": true, + """: true, + """: true, + "𝔔": true, + "ℚ": true, + "𝒬": true, + "⤐": true, + "®": true, + "®": true, + "Ŕ": true, + "⟫": true, + "↠": true, + "⤖": true, + "Ř": true, + "Ŗ": true, + "Р": true, + "ℜ": true, + "∋": true, + "⇋": true, + "⥯": true, + "ℜ": true, + "Ρ": true, + "⟩": true, + "→": true, + "⇥": true, + "⇄": true, + "⌉": true, + "⟧": true, + "⥝": true, + "⇂": true, + "⥕": true, + "⌋": true, + "⊢": true, + "↦": true, + "⥛": true, + "⊳": true, + "⧐": true, + "⊵": true, + "⥏": true, + "⥜": true, + "↾": true, + "⥔": true, + "⇀": true, + "⥓": true, + "⇒": true, + "ℝ": true, + "⥰": true, + "⇛": true, + "ℛ": true, + "↱": true, + "⧴": true, + "Щ": true, + "Ш": true, + "Ь": true, + "Ś": true, + "⪼": true, + "Š": true, + "Ş": true, + "Ŝ": true, + "С": true, + "𝔖": true, + "↓": true, + "←": true, + "→": true, + "↑": true, + "Σ": true, + "∘": true, + "𝕊": true, + "√": true, + "□": true, + "⊓": true, + "⊏": true, + "⊑": true, + "⊐": true, + "⊒": true, + "⊔": true, + "𝒮": true, + "⋆": true, + "⋐": true, + "⋐": true, + "⊆": true, + "≻": true, + "⪰": true, + "≽": true, + "≿": true, + "∋": true, + "∑": true, + "⋑": true, + "⊃": true, + "⊇": true, + "⋑": true, + "Þ": true, + "Þ": true, + "™": true, + "Ћ": true, + "Ц": true, + " ": true, + "Τ": true, + "Ť": true, + "Ţ": true, + "Т": true, + "𝔗": true, + "∴": true, + "Θ": true, + "  ": true, + " ": true, + "∼": true, + "≃": true, + "≅": true, + "≈": true, + "𝕋": true, + "⃛": true, + "𝒯": true, + "Ŧ": true, + "Ú": true, + "Ú": true, + "↟": true, + "⥉": true, + "Ў": true, + "Ŭ": true, + "Û": true, + "Û": true, + "У": true, + "Ű": true, + "𝔘": true, + "Ù": true, + "Ù": true, + "Ū": true, + "_": true, + "⏟": true, + "⎵": true, + "⏝": true, + "⋃": true, + "⊎": true, + "Ų": true, + "𝕌": true, + "↑": true, + "⤒": true, + "⇅": true, + "↕": true, + "⥮": true, + "⊥": true, + "↥": true, + "⇑": true, + "⇕": true, + "↖": true, + "↗": true, + "ϒ": true, + "Υ": true, + "Ů": true, + "𝒰": true, + "Ũ": true, + "Ü": true, + "Ü": true, + "⊫": true, + "⫫": true, + "В": true, + "⊩": true, + "⫦": true, + "⋁": true, + "‖": true, + "‖": true, + "∣": true, + "|": true, + "❘": true, + "≀": true, + " ": true, + "𝔙": true, + "𝕍": true, + "𝒱": true, + "⊪": true, + "Ŵ": true, + "⋀": true, + "𝔚": true, + "𝕎": true, + "𝒲": true, + "𝔛": true, + "Ξ": true, + "𝕏": true, + "𝒳": true, + "Я": true, + "Ї": true, + "Ю": true, + "Ý": true, + "Ý": true, + "Ŷ": true, + "Ы": true, + "𝔜": true, + "𝕐": true, + "𝒴": true, + "Ÿ": true, + "Ж": true, + "Ź": true, + "Ž": true, + "З": true, + "Ż": true, + "​": true, + "Ζ": true, + "ℨ": true, + "ℤ": true, + "𝒵": true, + "á": true, + "á": true, + "ă": true, + "∾": true, + "∾̳": true, + "∿": true, + "â": true, + "â": true, + "´": true, + "´": true, + "а": true, + "æ": true, + "æ": true, + "⁡": true, + "𝔞": true, + "à": true, + "à": true, + "ℵ": true, + "ℵ": true, + "α": true, + "ā": true, + "⨿": true, + "&": true, + "&": true, + "∧": true, + "⩕": true, + "⩜": true, + "⩘": true, + "⩚": true, + "∠": true, + "⦤": true, + "∠": true, + "∡": true, + "⦨": true, + "⦩": true, + "⦪": true, + "⦫": true, + "⦬": true, + "⦭": true, + "⦮": true, + "⦯": true, + "∟": true, + "⊾": true, + "⦝": true, + "∢": true, + "Å": true, + "⍼": true, + "ą": true, + "𝕒": true, + "≈": true, + "⩰": true, + "⩯": true, + "≊": true, + "≋": true, + "'": true, + "≈": true, + "≊": true, + "å": true, + "å": true, + "𝒶": true, + "*": true, + "≈": true, + "≍": true, + "ã": true, + "ã": true, + "ä": true, + "ä": true, + "∳": true, + "⨑": true, + "⫭": true, + "≌": true, + "϶": true, + "‵": true, + "∽": true, + "⋍": true, + "⊽": true, + "⌅": true, + "⌅": true, + "⎵": true, + "⎶": true, + "≌": true, + "б": true, + "„": true, + "∵": true, + "∵": true, + "⦰": true, + "϶": true, + "ℬ": true, + "β": true, + "ℶ": true, + "≬": true, + "𝔟": true, + "⋂": true, + "◯": true, + "⋃": true, + "⨀": true, + "⨁": true, + "⨂": true, + "⨆": true, + "★": true, + "▽": true, + "△": true, + "⨄": true, + "⋁": true, + "⋀": true, + "⤍": true, + "⧫": true, + "▪": true, + "▴": true, + "▾": true, + "◂": true, + "▸": true, + "␣": true, + "▒": true, + "░": true, + "▓": true, + "█": true, + "=⃥": true, + "≡⃥": true, + "⌐": true, + "𝕓": true, + "⊥": true, + "⊥": true, + "⋈": true, + "╗": true, + "╔": true, + "╖": true, + "╓": true, + "═": true, + "╦": true, + "╩": true, + "╤": true, + "╧": true, + "╝": true, + "╚": true, + "╜": true, + "╙": true, + "║": true, + "╬": true, + "╣": true, + "╠": true, + "╫": true, + "╢": true, + "╟": true, + "⧉": true, + "╕": true, + "╒": true, + "┐": true, + "┌": true, + "─": true, + "╥": true, + "╨": true, + "┬": true, + "┴": true, + "⊟": true, + "⊞": true, + "⊠": true, + "╛": true, + "╘": true, + "┘": true, + "└": true, + "│": true, + "╪": true, + "╡": true, + "╞": true, + "┼": true, + "┤": true, + "├": true, + "‵": true, + "˘": true, + "¦": true, + "¦": true, + "𝒷": true, + "⁏": true, + "∽": true, + "⋍": true, + "\": true, + "⧅": true, + "⟈": true, + "•": true, + "•": true, + "≎": true, + "⪮": true, + "≏": true, + "≏": true, + "ć": true, + "∩": true, + "⩄": true, + "⩉": true, + "⩋": true, + "⩇": true, + "⩀": true, + "∩︀": true, + "⁁": true, + "ˇ": true, + "⩍": true, + "č": true, + "ç": true, + "ç": true, + "ĉ": true, + "⩌": true, + "⩐": true, + "ċ": true, + "¸": true, + "¸": true, + "⦲": true, + "¢": true, + "¢": true, + "·": true, + "𝔠": true, + "ч": true, + "✓": true, + "✓": true, + "χ": true, + "○": true, + "⧃": true, + "ˆ": true, + "≗": true, + "↺": true, + "↻": true, + "®": true, + "Ⓢ": true, + "⊛": true, + "⊚": true, + "⊝": true, + "≗": true, + "⨐": true, + "⫯": true, + "⧂": true, + "♣": true, + "♣": true, + ":": true, + "≔": true, + "≔": true, + ",": true, + "@": true, + "∁": true, + "∘": true, + "∁": true, + "ℂ": true, + "≅": true, + "⩭": true, + "∮": true, + "𝕔": true, + "∐": true, + "©": true, + "©": true, + "℗": true, + "↵": true, + "✗": true, + "𝒸": true, + "⫏": true, + "⫑": true, + "⫐": true, + "⫒": true, + "⋯": true, + "⤸": true, + "⤵": true, + "⋞": true, + "⋟": true, + "↶": true, + "⤽": true, + "∪": true, + "⩈": true, + "⩆": true, + "⩊": true, + "⊍": true, + "⩅": true, + "∪︀": true, + "↷": true, + "⤼": true, + "⋞": true, + "⋟": true, + "⋎": true, + "⋏": true, + "¤": true, + "¤": true, + "↶": true, + "↷": true, + "⋎": true, + "⋏": true, + "∲": true, + "∱": true, + "⌭": true, + "⇓": true, + "⥥": true, + "†": true, + "ℸ": true, + "↓": true, + "‐": true, + "⊣": true, + "⤏": true, + "˝": true, + "ď": true, + "д": true, + "ⅆ": true, + "‡": true, + "⇊": true, + "⩷": true, + "°": true, + "°": true, + "δ": true, + "⦱": true, + "⥿": true, + "𝔡": true, + "⇃": true, + "⇂": true, + "⋄": true, + "⋄": true, + "♦": true, + "♦": true, + "¨": true, + "ϝ": true, + "⋲": true, + "÷": true, + "÷": true, + "÷": true, + "⋇": true, + "⋇": true, + "ђ": true, + "⌞": true, + "⌍": true, + "$": true, + "𝕕": true, + "˙": true, + "≐": true, + "≑": true, + "∸": true, + "∔": true, + "⊡": true, + "⌆": true, + "↓": true, + "⇊": true, + "⇃": true, + "⇂": true, + "⤐": true, + "⌟": true, + "⌌": true, + "𝒹": true, + "ѕ": true, + "⧶": true, + "đ": true, + "⋱": true, + "▿": true, + "▾": true, + "⇵": true, + "⥯": true, + "⦦": true, + "џ": true, + "⟿": true, + "⩷": true, + "≑": true, + "é": true, + "é": true, + "⩮": true, + "ě": true, + "≖": true, + "ê": true, + "ê": true, + "≕": true, + "э": true, + "ė": true, + "ⅇ": true, + "≒": true, + "𝔢": true, + "⪚": true, + "è": true, + "è": true, + "⪖": true, + "⪘": true, + "⪙": true, + "⏧": true, + "ℓ": true, + "⪕": true, + "⪗": true, + "ē": true, + "∅": true, + "∅": true, + "∅": true, + " ": true, + " ": true, + " ": true, + "ŋ": true, + " ": true, + "ę": true, + "𝕖": true, + "⋕": true, + "⧣": true, + "⩱": true, + "ε": true, + "ε": true, + "ϵ": true, + "≖": true, + "≕": true, + "≂": true, + "⪖": true, + "⪕": true, + "=": true, + "≟": true, + "≡": true, + "⩸": true, + "⧥": true, + "≓": true, + "⥱": true, + "ℯ": true, + "≐": true, + "≂": true, + "η": true, + "ð": true, + "ð": true, + "ë": true, + "ë": true, + "€": true, + "!": true, + "∃": true, + "ℰ": true, + "ⅇ": true, + "≒": true, + "ф": true, + "♀": true, + "ffi": true, + "ff": true, + "ffl": true, + "𝔣": true, + "fi": true, + "fj": true, + "♭": true, + "fl": true, + "▱": true, + "ƒ": true, + "𝕗": true, + "∀": true, + "⋔": true, + "⫙": true, + "⨍": true, + "½": true, + "½": true, + "⅓": true, + "¼": true, + "¼": true, + "⅕": true, + "⅙": true, + "⅛": true, + "⅔": true, + "⅖": true, + "¾": true, + "¾": true, + "⅗": true, + "⅜": true, + "⅘": true, + "⅚": true, + "⅝": true, + "⅞": true, + "⁄": true, + "⌢": true, + "𝒻": true, + "≧": true, + "⪌": true, + "ǵ": true, + "γ": true, + "ϝ": true, + "⪆": true, + "ğ": true, + "ĝ": true, + "г": true, + "ġ": true, + "≥": true, + "⋛": true, + "≥": true, + "≧": true, + "⩾": true, + "⩾": true, + "⪩": true, + "⪀": true, + "⪂": true, + "⪄": true, + "⋛︀": true, + "⪔": true, + "𝔤": true, + "≫": true, + "⋙": true, + "ℷ": true, + "ѓ": true, + "≷": true, + "⪒": true, + "⪥": true, + "⪤": true, + "≩": true, + "⪊": true, + "⪊": true, + "⪈": true, + "⪈": true, + "≩": true, + "⋧": true, + "𝕘": true, + "`": true, + "ℊ": true, + "≳": true, + "⪎": true, + "⪐": true, + ">": true, + ">": true, + "⪧": true, + "⩺": true, + "⋗": true, + "⦕": true, + "⩼": true, + "⪆": true, + "⥸": true, + "⋗": true, + "⋛": true, + "⪌": true, + "≷": true, + "≳": true, + "≩︀": true, + "≩︀": true, + "⇔": true, + " ": true, + "½": true, + "ℋ": true, + "ъ": true, + "↔": true, + "⥈": true, + "↭": true, + "ℏ": true, + "ĥ": true, + "♥": true, + "♥": true, + "…": true, + "⊹": true, + "𝔥": true, + "⤥": true, + "⤦": true, + "⇿": true, + "∻": true, + "↩": true, + "↪": true, + "𝕙": true, + "―": true, + "𝒽": true, + "ℏ": true, + "ħ": true, + "⁃": true, + "‐": true, + "í": true, + "í": true, + "⁣": true, + "î": true, + "î": true, + "и": true, + "е": true, + "¡": true, + "¡": true, + "⇔": true, + "𝔦": true, + "ì": true, + "ì": true, + "ⅈ": true, + "⨌": true, + "∭": true, + "⧜": true, + "℩": true, + "ij": true, + "ī": true, + "ℑ": true, + "ℐ": true, + "ℑ": true, + "ı": true, + "⊷": true, + "Ƶ": true, + "∈": true, + "℅": true, + "∞": true, + "⧝": true, + "ı": true, + "∫": true, + "⊺": true, + "ℤ": true, + "⊺": true, + "⨗": true, + "⨼": true, + "ё": true, + "į": true, + "𝕚": true, + "ι": true, + "⨼": true, + "¿": true, + "¿": true, + "𝒾": true, + "∈": true, + "⋹": true, + "⋵": true, + "⋴": true, + "⋳": true, + "∈": true, + "⁢": true, + "ĩ": true, + "і": true, + "ï": true, + "ï": true, + "ĵ": true, + "й": true, + "𝔧": true, + "ȷ": true, + "𝕛": true, + "𝒿": true, + "ј": true, + "є": true, + "κ": true, + "ϰ": true, + "ķ": true, + "к": true, + "𝔨": true, + "ĸ": true, + "х": true, + "ќ": true, + "𝕜": true, + "𝓀": true, + "⇚": true, + "⇐": true, + "⤛": true, + "⤎": true, + "≦": true, + "⪋": true, + "⥢": true, + "ĺ": true, + "⦴": true, + "ℒ": true, + "λ": true, + "⟨": true, + "⦑": true, + "⟨": true, + "⪅": true, + "«": true, + "«": true, + "←": true, + "⇤": true, + "⤟": true, + "⤝": true, + "↩": true, + "↫": true, + "⤹": true, + "⥳": true, + "↢": true, + "⪫": true, + "⤙": true, + "⪭": true, + "⪭︀": true, + "⤌": true, + "❲": true, + "{": true, + "[": true, + "⦋": true, + "⦏": true, + "⦍": true, + "ľ": true, + "ļ": true, + "⌈": true, + "{": true, + "л": true, + "⤶": true, + "“": true, + "„": true, + "⥧": true, + "⥋": true, + "↲": true, + "≤": true, + "←": true, + "↢": true, + "↽": true, + "↼": true, + "⇇": true, + "↔": true, + "⇆": true, + "⇋": true, + "↭": true, + "⋋": true, + "⋚": true, + "≤": true, + "≦": true, + "⩽": true, + "⩽": true, + "⪨": true, + "⩿": true, + "⪁": true, + "⪃": true, + "⋚︀": true, + "⪓": true, + "⪅": true, + "⋖": true, + "⋚": true, + "⪋": true, + "≶": true, + "≲": true, + "⥼": true, + "⌊": true, + "𝔩": true, + "≶": true, + "⪑": true, + "↽": true, + "↼": true, + "⥪": true, + "▄": true, + "љ": true, + "≪": true, + "⇇": true, + "⌞": true, + "⥫": true, + "◺": true, + "ŀ": true, + "⎰": true, + "⎰": true, + "≨": true, + "⪉": true, + "⪉": true, + "⪇": true, + "⪇": true, + "≨": true, + "⋦": true, + "⟬": true, + "⇽": true, + "⟦": true, + "⟵": true, + "⟷": true, + "⟼": true, + "⟶": true, + "↫": true, + "↬": true, + "⦅": true, + "𝕝": true, + "⨭": true, + "⨴": true, + "∗": true, + "_": true, + "◊": true, + "◊": true, + "⧫": true, + "(": true, + "⦓": true, + "⇆": true, + "⌟": true, + "⇋": true, + "⥭": true, + "‎": true, + "⊿": true, + "‹": true, + "𝓁": true, + "↰": true, + "≲": true, + "⪍": true, + "⪏": true, + "[": true, + "‘": true, + "‚": true, + "ł": true, + "<": true, + "<": true, + "⪦": true, + "⩹": true, + "⋖": true, + "⋋": true, + "⋉": true, + "⥶": true, + "⩻": true, + "⦖": true, + "◃": true, + "⊴": true, + "◂": true, + "⥊": true, + "⥦": true, + "≨︀": true, + "≨︀": true, + "∺": true, + "¯": true, + "¯": true, + "♂": true, + "✠": true, + "✠": true, + "↦": true, + "↦": true, + "↧": true, + "↤": true, + "↥": true, + "▮": true, + "⨩": true, + "м": true, + "—": true, + "∡": true, + "𝔪": true, + "℧": true, + "µ": true, + "µ": true, + "∣": true, + "*": true, + "⫰": true, + "·": true, + "·": true, + "−": true, + "⊟": true, + "∸": true, + "⨪": true, + "⫛": true, + "…": true, + "∓": true, + "⊧": true, + "𝕞": true, + "∓": true, + "𝓂": true, + "∾": true, + "μ": true, + "⊸": true, + "⊸": true, + "⋙̸": true, + "≫⃒": true, + "≫̸": true, + "⇍": true, + "⇎": true, + "⋘̸": true, + "≪⃒": true, + "≪̸": true, + "⇏": true, + "⊯": true, + "⊮": true, + "∇": true, + "ń": true, + "∠⃒": true, + "≉": true, + "⩰̸": true, + "≋̸": true, + "ʼn": true, + "≉": true, + "♮": true, + "♮": true, + "ℕ": true, + " ": true, + " ": true, + "≎̸": true, + "≏̸": true, + "⩃": true, + "ň": true, + "ņ": true, + "≇": true, + "⩭̸": true, + "⩂": true, + "н": true, + "–": true, + "≠": true, + "⇗": true, + "⤤": true, + "↗": true, + "↗": true, + "≐̸": true, + "≢": true, + "⤨": true, + "≂̸": true, + "∄": true, + "∄": true, + "𝔫": true, + "≧̸": true, + "≱": true, + "≱": true, + "≧̸": true, + "⩾̸": true, + "⩾̸": true, + "≵": true, + "≯": true, + "≯": true, + "⇎": true, + "↮": true, + "⫲": true, + "∋": true, + "⋼": true, + "⋺": true, + "∋": true, + "њ": true, + "⇍": true, + "≦̸": true, + "↚": true, + "‥": true, + "≰": true, + "↚": true, + "↮": true, + "≰": true, + "≦̸": true, + "⩽̸": true, + "⩽̸": true, + "≮": true, + "≴": true, + "≮": true, + "⋪": true, + "⋬": true, + "∤": true, + "𝕟": true, + "¬": true, + "¬": true, + "∉": true, + "⋹̸": true, + "⋵̸": true, + "∉": true, + "⋷": true, + "⋶": true, + "∌": true, + "∌": true, + "⋾": true, + "⋽": true, + "∦": true, + "∦": true, + "⫽⃥": true, + "∂̸": true, + "⨔": true, + "⊀": true, + "⋠": true, + "⪯̸": true, + "⊀": true, + "⪯̸": true, + "⇏": true, + "↛": true, + "⤳̸": true, + "↝̸": true, + "↛": true, + "⋫": true, + "⋭": true, + "⊁": true, + "⋡": true, + "⪰̸": true, + "𝓃": true, + "∤": true, + "∦": true, + "≁": true, + "≄": true, + "≄": true, + "∤": true, + "∦": true, + "⋢": true, + "⋣": true, + "⊄": true, + "⫅̸": true, + "⊈": true, + "⊂⃒": true, + "⊈": true, + "⫅̸": true, + "⊁": true, + "⪰̸": true, + "⊅": true, + "⫆̸": true, + "⊉": true, + "⊃⃒": true, + "⊉": true, + "⫆̸": true, + "≹": true, + "ñ": true, + "ñ": true, + "≸": true, + "⋪": true, + "⋬": true, + "⋫": true, + "⋭": true, + "ν": true, + "#": true, + "№": true, + " ": true, + "⊭": true, + "⤄": true, + "≍⃒": true, + "⊬": true, + "≥⃒": true, + ">⃒": true, + "⧞": true, + "⤂": true, + "≤⃒": true, + "<⃒": true, + "⊴⃒": true, + "⤃": true, + "⊵⃒": true, + "∼⃒": true, + "⇖": true, + "⤣": true, + "↖": true, + "↖": true, + "⤧": true, + "Ⓢ": true, + "ó": true, + "ó": true, + "⊛": true, + "⊚": true, + "ô": true, + "ô": true, + "о": true, + "⊝": true, + "ő": true, + "⨸": true, + "⊙": true, + "⦼": true, + "œ": true, + "⦿": true, + "𝔬": true, + "˛": true, + "ò": true, + "ò": true, + "⧁": true, + "⦵": true, + "Ω": true, + "∮": true, + "↺": true, + "⦾": true, + "⦻": true, + "‾": true, + "⧀": true, + "ō": true, + "ω": true, + "ο": true, + "⦶": true, + "⊖": true, + "𝕠": true, + "⦷": true, + "⦹": true, + "⊕": true, + "∨": true, + "↻": true, + "⩝": true, + "ℴ": true, + "ℴ": true, + "ª": true, + "ª": true, + "º": true, + "º": true, + "⊶": true, + "⩖": true, + "⩗": true, + "⩛": true, + "ℴ": true, + "ø": true, + "ø": true, + "⊘": true, + "õ": true, + "õ": true, + "⊗": true, + "⨶": true, + "ö": true, + "ö": true, + "⌽": true, + "∥": true, + "¶": true, + "¶": true, + "∥": true, + "⫳": true, + "⫽": true, + "∂": true, + "п": true, + "%": true, + ".": true, + "‰": true, + "⊥": true, + "‱": true, + "𝔭": true, + "φ": true, + "ϕ": true, + "ℳ": true, + "☎": true, + "π": true, + "⋔": true, + "ϖ": true, + "ℏ": true, + "ℎ": true, + "ℏ": true, + "+": true, + "⨣": true, + "⊞": true, + "⨢": true, + "∔": true, + "⨥": true, + "⩲": true, + "±": true, + "±": true, + "⨦": true, + "⨧": true, + "±": true, + "⨕": true, + "𝕡": true, + "£": true, + "£": true, + "≺": true, + "⪳": true, + "⪷": true, + "≼": true, + "⪯": true, + "≺": true, + "⪷": true, + "≼": true, + "⪯": true, + "⪹": true, + "⪵": true, + "⋨": true, + "≾": true, + "′": true, + "ℙ": true, + "⪵": true, + "⪹": true, + "⋨": true, + "∏": true, + "⌮": true, + "⌒": true, + "⌓": true, + "∝": true, + "∝": true, + "≾": true, + "⊰": true, + "𝓅": true, + "ψ": true, + " ": true, + "𝔮": true, + "⨌": true, + "𝕢": true, + "⁗": true, + "𝓆": true, + "ℍ": true, + "⨖": true, + "?": true, + "≟": true, + """: true, + """: true, + "⇛": true, + "⇒": true, + "⤜": true, + "⤏": true, + "⥤": true, + "∽̱": true, + "ŕ": true, + "√": true, + "⦳": true, + "⟩": true, + "⦒": true, + "⦥": true, + "⟩": true, + "»": true, + "»": true, + "→": true, + "⥵": true, + "⇥": true, + "⤠": true, + "⤳": true, + "⤞": true, + "↪": true, + "↬": true, + "⥅": true, + "⥴": true, + "↣": true, + "↝": true, + "⤚": true, + "∶": true, + "ℚ": true, + "⤍": true, + "❳": true, + "}": true, + "]": true, + "⦌": true, + "⦎": true, + "⦐": true, + "ř": true, + "ŗ": true, + "⌉": true, + "}": true, + "р": true, + "⤷": true, + "⥩": true, + "”": true, + "”": true, + "↳": true, + "ℜ": true, + "ℛ": true, + "ℜ": true, + "ℝ": true, + "▭": true, + "®": true, + "®": true, + "⥽": true, + "⌋": true, + "𝔯": true, + "⇁": true, + "⇀": true, + "⥬": true, + "ρ": true, + "ϱ": true, + "→": true, + "↣": true, + "⇁": true, + "⇀": true, + "⇄": true, + "⇌": true, + "⇉": true, + "↝": true, + "⋌": true, + "˚": true, + "≓": true, + "⇄": true, + "⇌": true, + "‏": true, + "⎱": true, + "⎱": true, + "⫮": true, + "⟭": true, + "⇾": true, + "⟧": true, + "⦆": true, + "𝕣": true, + "⨮": true, + "⨵": true, + ")": true, + "⦔": true, + "⨒": true, + "⇉": true, + "›": true, + "𝓇": true, + "↱": true, + "]": true, + "’": true, + "’": true, + "⋌": true, + "⋊": true, + "▹": true, + "⊵": true, + "▸": true, + "⧎": true, + "⥨": true, + "℞": true, + "ś": true, + "‚": true, + "≻": true, + "⪴": true, + "⪸": true, + "š": true, + "≽": true, + "⪰": true, + "ş": true, + "ŝ": true, + "⪶": true, + "⪺": true, + "⋩": true, + "⨓": true, + "≿": true, + "с": true, + "⋅": true, + "⊡": true, + "⩦": true, + "⇘": true, + "⤥": true, + "↘": true, + "↘": true, + "§": true, + "§": true, + ";": true, + "⤩": true, + "∖": true, + "∖": true, + "✶": true, + "𝔰": true, + "⌢": true, + "♯": true, + "щ": true, + "ш": true, + "∣": true, + "∥": true, + "­": true, + "­": true, + "σ": true, + "ς": true, + "ς": true, + "∼": true, + "⩪": true, + "≃": true, + "≃": true, + "⪞": true, + "⪠": true, + "⪝": true, + "⪟": true, + "≆": true, + "⨤": true, + "⥲": true, + "←": true, + "∖": true, + "⨳": true, + "⧤": true, + "∣": true, + "⌣": true, + "⪪": true, + "⪬": true, + "⪬︀": true, + "ь": true, + "/": true, + "⧄": true, + "⌿": true, + "𝕤": true, + "♠": true, + "♠": true, + "∥": true, + "⊓": true, + "⊓︀": true, + "⊔": true, + "⊔︀": true, + "⊏": true, + "⊑": true, + "⊏": true, + "⊑": true, + "⊐": true, + "⊒": true, + "⊐": true, + "⊒": true, + "□": true, + "□": true, + "▪": true, + "▪": true, + "→": true, + "𝓈": true, + "∖": true, + "⌣": true, + "⋆": true, + "☆": true, + "★": true, + "ϵ": true, + "ϕ": true, + "¯": true, + "⊂": true, + "⫅": true, + "⪽": true, + "⊆": true, + "⫃": true, + "⫁": true, + "⫋": true, + "⊊": true, + "⪿": true, + "⥹": true, + "⊂": true, + "⊆": true, + "⫅": true, + "⊊": true, + "⫋": true, + "⫇": true, + "⫕": true, + "⫓": true, + "≻": true, + "⪸": true, + "≽": true, + "⪰": true, + "⪺": true, + "⪶": true, + "⋩": true, + "≿": true, + "∑": true, + "♪": true, + "¹": true, + "¹": true, + "²": true, + "²": true, + "³": true, + "³": true, + "⊃": true, + "⫆": true, + "⪾": true, + "⫘": true, + "⊇": true, + "⫄": true, + "⟉": true, + "⫗": true, + "⥻": true, + "⫂": true, + "⫌": true, + "⊋": true, + "⫀": true, + "⊃": true, + "⊇": true, + "⫆": true, + "⊋": true, + "⫌": true, + "⫈": true, + "⫔": true, + "⫖": true, + "⇙": true, + "⤦": true, + "↙": true, + "↙": true, + "⤪": true, + "ß": true, + "ß": true, + "⌖": true, + "τ": true, + "⎴": true, + "ť": true, + "ţ": true, + "т": true, + "⃛": true, + "⌕": true, + "𝔱": true, + "∴": true, + "∴": true, + "θ": true, + "ϑ": true, + "ϑ": true, + "≈": true, + "∼": true, + " ": true, + "≈": true, + "∼": true, + "þ": true, + "þ": true, + "˜": true, + "×": true, + "×": true, + "⊠": true, + "⨱": true, + "⨰": true, + "∭": true, + "⤨": true, + "⊤": true, + "⌶": true, + "⫱": true, + "𝕥": true, + "⫚": true, + "⤩": true, + "‴": true, + "™": true, + "▵": true, + "▿": true, + "◃": true, + "⊴": true, + "≜": true, + "▹": true, + "⊵": true, + "◬": true, + "≜": true, + "⨺": true, + "⨹": true, + "⧍": true, + "⨻": true, + "⏢": true, + "𝓉": true, + "ц": true, + "ћ": true, + "ŧ": true, + "≬": true, + "↞": true, + "↠": true, + "⇑": true, + "⥣": true, + "ú": true, + "ú": true, + "↑": true, + "ў": true, + "ŭ": true, + "û": true, + "û": true, + "у": true, + "⇅": true, + "ű": true, + "⥮": true, + "⥾": true, + "𝔲": true, + "ù": true, + "ù": true, + "↿": true, + "↾": true, + "▀": true, + "⌜": true, + "⌜": true, + "⌏": true, + "◸": true, + "ū": true, + "¨": true, + "¨": true, + "ų": true, + "𝕦": true, + "↑": true, + "↕": true, + "↿": true, + "↾": true, + "⊎": true, + "υ": true, + "ϒ": true, + "υ": true, + "⇈": true, + "⌝": true, + "⌝": true, + "⌎": true, + "ů": true, + "◹": true, + "𝓊": true, + "⋰": true, + "ũ": true, + "▵": true, + "▴": true, + "⇈": true, + "ü": true, + "ü": true, + "⦧": true, + "⇕": true, + "⫨": true, + "⫩": true, + "⊨": true, + "⦜": true, + "ϵ": true, + "ϰ": true, + "∅": true, + "ϕ": true, + "ϖ": true, + "∝": true, + "↕": true, + "ϱ": true, + "ς": true, + "⊊︀": true, + "⫋︀": true, + "⊋︀": true, + "⫌︀": true, + "ϑ": true, + "⊲": true, + "⊳": true, + "в": true, + "⊢": true, + "∨": true, + "⊻": true, + "≚": true, + "⋮": true, + "|": true, + "|": true, + "𝔳": true, + "⊲": true, + "⊂⃒": true, + "⊃⃒": true, + "𝕧": true, + "∝": true, + "⊳": true, + "𝓋": true, + "⫋︀": true, + "⊊︀": true, + "⫌︀": true, + "⊋︀": true, + "⦚": true, + "ŵ": true, + "⩟": true, + "∧": true, + "≙": true, + "℘": true, + "𝔴": true, + "𝕨": true, + "℘": true, + "≀": true, + "≀": true, + "𝓌": true, + "⋂": true, + "◯": true, + "⋃": true, + "▽": true, + "𝔵": true, + "⟺": true, + "⟷": true, + "ξ": true, + "⟸": true, + "⟵": true, + "⟼": true, + "⋻": true, + "⨀": true, + "𝕩": true, + "⨁": true, + "⨂": true, + "⟹": true, + "⟶": true, + "𝓍": true, + "⨆": true, + "⨄": true, + "△": true, + "⋁": true, + "⋀": true, + "ý": true, + "ý": true, + "я": true, + "ŷ": true, + "ы": true, + "¥": true, + "¥": true, + "𝔶": true, + "ї": true, + "𝕪": true, + "𝓎": true, + "ю": true, + "ÿ": true, + "ÿ": true, + "ź": true, + "ž": true, + "з": true, + "ż": true, + "ℨ": true, + "ζ": true, + "𝔷": true, + "ж": true, + "⇝": true, + "𝕫": true, + "𝓏": true, + "‍": true, + "‌": true, +} diff --git a/vendor/github.com/russross/blackfriday/v2/esc.go b/vendor/github.com/russross/blackfriday/v2/esc.go index 6385f27cb..6ab60102c 100644 --- a/vendor/github.com/russross/blackfriday/v2/esc.go +++ b/vendor/github.com/russross/blackfriday/v2/esc.go @@ -13,13 +13,27 @@ var htmlEscaper = [256][]byte{ } func escapeHTML(w io.Writer, s []byte) { + escapeEntities(w, s, false) +} + +func escapeAllHTML(w io.Writer, s []byte) { + escapeEntities(w, s, true) +} + +func escapeEntities(w io.Writer, s []byte, escapeValidEntities bool) { var start, end int for end < len(s) { escSeq := htmlEscaper[s[end]] if escSeq != nil { - w.Write(s[start:end]) - w.Write(escSeq) - start = end + 1 + isEntity, entityEnd := nodeIsEntity(s, end) + if isEntity && !escapeValidEntities { + w.Write(s[start : entityEnd+1]) + start = entityEnd + 1 + } else { + w.Write(s[start:end]) + w.Write(escSeq) + start = end + 1 + } } end++ } @@ -28,6 +42,28 @@ func escapeHTML(w io.Writer, s []byte) { } } +func nodeIsEntity(s []byte, end int) (isEntity bool, endEntityPos int) { + isEntity = false + endEntityPos = end + 1 + + if s[end] == '&' { + for endEntityPos < len(s) { + if s[endEntityPos] == ';' { + if entities[string(s[end:endEntityPos+1])] { + isEntity = true + break + } + } + if !isalnum(s[endEntityPos]) && s[endEntityPos] != '&' && s[endEntityPos] != '#' { + break + } + endEntityPos++ + } + } + + return isEntity, endEntityPos +} + func escLink(w io.Writer, text []byte) { unesc := html.UnescapeString(string(text)) escapeHTML(w, []byte(unesc)) diff --git a/vendor/github.com/russross/blackfriday/v2/go.mod b/vendor/github.com/russross/blackfriday/v2/go.mod deleted file mode 100644 index 620b74e0a..000000000 --- a/vendor/github.com/russross/blackfriday/v2/go.mod +++ /dev/null @@ -1 +0,0 @@ -module github.com/russross/blackfriday/v2 diff --git a/vendor/github.com/russross/blackfriday/v2/html.go b/vendor/github.com/russross/blackfriday/v2/html.go index 284c87184..cb4f26e30 100644 --- a/vendor/github.com/russross/blackfriday/v2/html.go +++ b/vendor/github.com/russross/blackfriday/v2/html.go @@ -132,7 +132,10 @@ func NewHTMLRenderer(params HTMLRendererParameters) *HTMLRenderer { } if params.FootnoteReturnLinkContents == "" { - params.FootnoteReturnLinkContents = `[return]` + // U+FE0E is VARIATION SELECTOR-15. + // It suppresses automatic emoji presentation of the preceding + // U+21A9 LEFTWARDS ARROW WITH HOOK on iOS and iPadOS. + params.FootnoteReturnLinkContents = "↩\ufe0e" } return &HTMLRenderer{ @@ -616,7 +619,7 @@ func (r *HTMLRenderer) RenderNode(w io.Writer, node *Node, entering bool) WalkSt } case Code: r.out(w, codeTag) - escapeHTML(w, node.Literal) + escapeAllHTML(w, node.Literal) r.out(w, codeCloseTag) case Document: break @@ -762,7 +765,7 @@ func (r *HTMLRenderer) RenderNode(w io.Writer, node *Node, entering bool) WalkSt r.cr(w) r.out(w, preTag) r.tag(w, codeTag[:len(codeTag)-1], attrs) - escapeHTML(w, node.Literal) + escapeAllHTML(w, node.Literal) r.out(w, codeCloseTag) r.out(w, preCloseTag) if node.Parent.Type != Item { diff --git a/vendor/github.com/russross/blackfriday/v2/inline.go b/vendor/github.com/russross/blackfriday/v2/inline.go index 4ed290792..d45bd9417 100644 --- a/vendor/github.com/russross/blackfriday/v2/inline.go +++ b/vendor/github.com/russross/blackfriday/v2/inline.go @@ -278,7 +278,7 @@ func link(p *Markdown, data []byte, offset int) (int, *Node) { case data[i] == '\n': textHasNl = true - case data[i-1] == '\\': + case isBackslashEscaped(data, i): continue case data[i] == '[': diff --git a/vendor/github.com/russross/blackfriday/v2/node.go b/vendor/github.com/russross/blackfriday/v2/node.go index 51b9e8c1b..04e6050ce 100644 --- a/vendor/github.com/russross/blackfriday/v2/node.go +++ b/vendor/github.com/russross/blackfriday/v2/node.go @@ -199,7 +199,8 @@ func (n *Node) InsertBefore(sibling *Node) { } } -func (n *Node) isContainer() bool { +// IsContainer returns true if 'n' can contain children. +func (n *Node) IsContainer() bool { switch n.Type { case Document: fallthrough @@ -238,6 +239,11 @@ func (n *Node) isContainer() bool { } } +// IsLeaf returns true if 'n' is a leaf node. +func (n *Node) IsLeaf() bool { + return !n.IsContainer() +} + func (n *Node) canContain(t NodeType) bool { if n.Type == List { return t == Item @@ -309,11 +315,11 @@ func newNodeWalker(root *Node) *nodeWalker { } func (nw *nodeWalker) next() { - if (!nw.current.isContainer() || !nw.entering) && nw.current == nw.root { + if (!nw.current.IsContainer() || !nw.entering) && nw.current == nw.root { nw.current = nil return } - if nw.entering && nw.current.isContainer() { + if nw.entering && nw.current.IsContainer() { if nw.current.FirstChild != nil { nw.current = nw.current.FirstChild nw.entering = true diff --git a/vendor/github.com/shurcooL/sanitized_anchor_name/.travis.yml b/vendor/github.com/shurcooL/sanitized_anchor_name/.travis.yml deleted file mode 100644 index 93b1fcdb3..000000000 --- a/vendor/github.com/shurcooL/sanitized_anchor_name/.travis.yml +++ /dev/null @@ -1,16 +0,0 @@ -sudo: false -language: go -go: - - 1.x - - master -matrix: - allow_failures: - - go: master - fast_finish: true -install: - - # Do nothing. This is needed to prevent default install action "go get -t -v ./..." from happening here (we want it to happen inside script step). -script: - - go get -t -v ./... - - diff -u <(echo -n) <(gofmt -d -s .) - - go tool vet . - - go test -v -race ./... diff --git a/vendor/github.com/shurcooL/sanitized_anchor_name/README.md b/vendor/github.com/shurcooL/sanitized_anchor_name/README.md deleted file mode 100644 index 670bf0fe6..000000000 --- a/vendor/github.com/shurcooL/sanitized_anchor_name/README.md +++ /dev/null @@ -1,36 +0,0 @@ -sanitized_anchor_name -===================== - -[![Build Status](https://travis-ci.org/shurcooL/sanitized_anchor_name.svg?branch=master)](https://travis-ci.org/shurcooL/sanitized_anchor_name) [![GoDoc](https://godoc.org/github.com/shurcooL/sanitized_anchor_name?status.svg)](https://godoc.org/github.com/shurcooL/sanitized_anchor_name) - -Package sanitized_anchor_name provides a func to create sanitized anchor names. - -Its logic can be reused by multiple packages to create interoperable anchor names -and links to those anchors. - -At this time, it does not try to ensure that generated anchor names -are unique, that responsibility falls on the caller. - -Installation ------------- - -```bash -go get -u github.com/shurcooL/sanitized_anchor_name -``` - -Example -------- - -```Go -anchorName := sanitized_anchor_name.Create("This is a header") - -fmt.Println(anchorName) - -// Output: -// this-is-a-header -``` - -License -------- - -- [MIT License](LICENSE) diff --git a/vendor/github.com/shurcooL/sanitized_anchor_name/go.mod b/vendor/github.com/shurcooL/sanitized_anchor_name/go.mod deleted file mode 100644 index 1e2553475..000000000 --- a/vendor/github.com/shurcooL/sanitized_anchor_name/go.mod +++ /dev/null @@ -1 +0,0 @@ -module github.com/shurcooL/sanitized_anchor_name diff --git a/vendor/github.com/shurcooL/sanitized_anchor_name/main.go b/vendor/github.com/shurcooL/sanitized_anchor_name/main.go deleted file mode 100644 index 6a77d1243..000000000 --- a/vendor/github.com/shurcooL/sanitized_anchor_name/main.go +++ /dev/null @@ -1,29 +0,0 @@ -// Package sanitized_anchor_name provides a func to create sanitized anchor names. -// -// Its logic can be reused by multiple packages to create interoperable anchor names -// and links to those anchors. -// -// At this time, it does not try to ensure that generated anchor names -// are unique, that responsibility falls on the caller. -package sanitized_anchor_name // import "github.com/shurcooL/sanitized_anchor_name" - -import "unicode" - -// Create returns a sanitized anchor name for the given text. -func Create(text string) string { - var anchorName []rune - var futureDash = false - for _, r := range text { - switch { - case unicode.IsLetter(r) || unicode.IsNumber(r): - if futureDash && len(anchorName) > 0 { - anchorName = append(anchorName, '-') - } - futureDash = false - anchorName = append(anchorName, unicode.ToLower(r)) - default: - futureDash = true - } - } - return string(anchorName) -} diff --git a/vendor/github.com/sirupsen/logrus/go.mod b/vendor/github.com/sirupsen/logrus/go.mod deleted file mode 100644 index b3919d5ea..000000000 --- a/vendor/github.com/sirupsen/logrus/go.mod +++ /dev/null @@ -1,10 +0,0 @@ -module github.com/sirupsen/logrus - -require ( - github.com/davecgh/go-spew v1.1.1 // indirect - github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/stretchr/testify v1.2.2 - golang.org/x/sys v0.0.0-20191026070338-33540a1f6037 -) - -go 1.13 diff --git a/vendor/github.com/sirupsen/logrus/go.sum b/vendor/github.com/sirupsen/logrus/go.sum deleted file mode 100644 index 694c18b84..000000000 --- a/vendor/github.com/sirupsen/logrus/go.sum +++ /dev/null @@ -1,8 +0,0 @@ -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037 h1:YyJpGZS1sBuBCzLAR1VEpK193GlqGZbnPFnPV/5Rsb4= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= diff --git a/vendor/github.com/spf13/afero/README.md b/vendor/github.com/spf13/afero/README.md index fb8eaaf89..cab257f56 100644 --- a/vendor/github.com/spf13/afero/README.md +++ b/vendor/github.com/spf13/afero/README.md @@ -79,11 +79,11 @@ would. So if my application before had: ```go -os.Open('/tmp/foo') +os.Open("/tmp/foo") ``` We would replace it with: ```go -AppFs.Open('/tmp/foo') +AppFs.Open("/tmp/foo") ``` `AppFs` being the variable we defined above. @@ -259,6 +259,18 @@ system using InMemoryFile. Afero has experimental support for secure file transfer protocol (sftp). Which can be used to perform file operations over a encrypted channel. +### GCSFs + +Afero has experimental support for Google Cloud Storage (GCS). You can either set the +`GOOGLE_APPLICATION_CREDENTIALS_JSON` env variable to your JSON credentials or use `opts` in +`NewGcsFS` to configure access to your GCS bucket. + +Some known limitations of the existing implementation: +* No Chmod support - The GCS ACL could probably be mapped to *nix style permissions but that would add another level of complexity and is ignored in this version. +* No Chtimes support - Could be simulated with attributes (gcs a/m-times are set implicitly) but that's is left for another version. +* Not thread safe - Also assumes all file operations are done through the same instance of the GcsFs. File operations between different GcsFs instances are not guaranteed to be consistent. + + ## Filtering Backends ### BasePathFs diff --git a/vendor/github.com/spf13/afero/cacheOnReadFs.go b/vendor/github.com/spf13/afero/cacheOnReadFs.go index 71471aa25..017d344fd 100644 --- a/vendor/github.com/spf13/afero/cacheOnReadFs.go +++ b/vendor/github.com/spf13/afero/cacheOnReadFs.go @@ -75,6 +75,10 @@ func (u *CacheOnReadFs) copyToLayer(name string) error { return copyToLayer(u.base, u.layer, name) } +func (u *CacheOnReadFs) copyFileToLayer(name string, flag int, perm os.FileMode) error { + return copyFileToLayer(u.base, u.layer, name, flag, perm) +} + func (u *CacheOnReadFs) Chtimes(name string, atime, mtime time.Time) error { st, _, err := u.cacheStatus(name) if err != nil { @@ -212,7 +216,7 @@ func (u *CacheOnReadFs) OpenFile(name string, flag int, perm os.FileMode) (File, switch st { case cacheLocal, cacheHit: default: - if err := u.copyToLayer(name); err != nil { + if err := u.copyFileToLayer(name, flag, perm); err != nil { return nil, err } } diff --git a/vendor/github.com/spf13/afero/go.mod b/vendor/github.com/spf13/afero/go.mod deleted file mode 100644 index abe4fe1cf..000000000 --- a/vendor/github.com/spf13/afero/go.mod +++ /dev/null @@ -1,9 +0,0 @@ -module github.com/spf13/afero - -require ( - github.com/pkg/sftp v1.10.1 - golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586 - golang.org/x/text v0.3.3 -) - -go 1.13 diff --git a/vendor/github.com/spf13/afero/go.sum b/vendor/github.com/spf13/afero/go.sum deleted file mode 100644 index 89d9bfbc4..000000000 --- a/vendor/github.com/spf13/afero/go.sum +++ /dev/null @@ -1,29 +0,0 @@ -github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8= -github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= -github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/sftp v1.10.1 h1:VasscCm72135zRysgrJDKsntdmPN+OuU3+nnHYA9wyc= -github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586 h1:7KByu05hhLed2MO29w7p1XfZvZ13m8mub3shuVftRs0= -golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d h1:+R4KGOnez64A81RvjARKc4UT5/tI9ujCIVX+P5KiHuI= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/vendor/github.com/spf13/afero/mem/file.go b/vendor/github.com/spf13/afero/mem/file.go index 5a20730c2..5ef8b6a39 100644 --- a/vendor/github.com/spf13/afero/mem/file.go +++ b/vendor/github.com/spf13/afero/mem/file.go @@ -71,7 +71,7 @@ func CreateFile(name string) *FileData { } func CreateDir(name string) *FileData { - return &FileData{name: name, memDir: &DirMap{}, dir: true} + return &FileData{name: name, memDir: &DirMap{}, dir: true, modtime: time.Now()} } func ChangeFileName(f *FileData, newname string) { diff --git a/vendor/github.com/spf13/afero/memmap.go b/vendor/github.com/spf13/afero/memmap.go index 5c265f92b..ea0798d87 100644 --- a/vendor/github.com/spf13/afero/memmap.go +++ b/vendor/github.com/spf13/afero/memmap.go @@ -279,7 +279,7 @@ func (m *MemMapFs) RemoveAll(path string) error { defer m.mu.RUnlock() for p := range m.getData() { - if strings.HasPrefix(p, path) { + if p == path || strings.HasPrefix(p, path+FilePathSeparator) { m.mu.RUnlock() m.mu.Lock() delete(m.getData(), p) diff --git a/vendor/github.com/spf13/afero/unionFile.go b/vendor/github.com/spf13/afero/unionFile.go index 985363eea..34f99a40c 100644 --- a/vendor/github.com/spf13/afero/unionFile.go +++ b/vendor/github.com/spf13/afero/unionFile.go @@ -268,13 +268,7 @@ func (f *UnionFile) WriteString(s string) (n int, err error) { return 0, BADFD } -func copyToLayer(base Fs, layer Fs, name string) error { - bfh, err := base.Open(name) - if err != nil { - return err - } - defer bfh.Close() - +func copyFile(base Fs, layer Fs, name string, bfh File) error { // First make sure the directory exists exists, err := Exists(layer, filepath.Dir(name)) if err != nil { @@ -315,3 +309,23 @@ func copyToLayer(base Fs, layer Fs, name string) error { } return layer.Chtimes(name, bfi.ModTime(), bfi.ModTime()) } + +func copyToLayer(base Fs, layer Fs, name string) error { + bfh, err := base.Open(name) + if err != nil { + return err + } + defer bfh.Close() + + return copyFile(base, layer, name, bfh) +} + +func copyFileToLayer(base Fs, layer Fs, name string, flag int, perm os.FileMode) error { + bfh, err := base.OpenFile(name, flag, perm) + if err != nil { + return err + } + defer bfh.Close() + + return copyFile(base, layer, name, bfh) +} diff --git a/vendor/github.com/spf13/cast/.travis.yml b/vendor/github.com/spf13/cast/.travis.yml deleted file mode 100644 index 833a48799..000000000 --- a/vendor/github.com/spf13/cast/.travis.yml +++ /dev/null @@ -1,16 +0,0 @@ -language: go -env: - - GO111MODULE=on -sudo: required -go: - - "1.11.x" - - "1.12.x" - - tip -os: - - linux -matrix: - allow_failures: - - go: tip - fast_finish: true -script: - - make check diff --git a/vendor/github.com/spf13/cast/README.md b/vendor/github.com/spf13/cast/README.md index e6939397d..120a57342 100644 --- a/vendor/github.com/spf13/cast/README.md +++ b/vendor/github.com/spf13/cast/README.md @@ -1,7 +1,7 @@ cast ==== [![GoDoc](https://godoc.org/github.com/spf13/cast?status.svg)](https://godoc.org/github.com/spf13/cast) -[![Build Status](https://api.travis-ci.org/spf13/cast.svg?branch=master)](https://travis-ci.org/spf13/cast) +[![Build Status](https://github.com/spf13/cast/actions/workflows/go.yml/badge.svg)](https://github.com/spf13/cast/actions/workflows/go.yml) [![Go Report Card](https://goreportcard.com/badge/github.com/spf13/cast)](https://goreportcard.com/report/github.com/spf13/cast) Easy and safe casting from one type to another in Go diff --git a/vendor/github.com/spf13/cast/cast.go b/vendor/github.com/spf13/cast/cast.go index 9fba638d4..0cfe9418d 100644 --- a/vendor/github.com/spf13/cast/cast.go +++ b/vendor/github.com/spf13/cast/cast.go @@ -20,6 +20,11 @@ func ToTime(i interface{}) time.Time { return v } +func ToTimeInDefaultLocation(i interface{}, location *time.Location) time.Time { + v, _ := ToTimeInDefaultLocationE(i, location) + return v +} + // ToDuration casts an interface to a time.Duration type. func ToDuration(i interface{}) time.Duration { v, _ := ToDurationE(i) diff --git a/vendor/github.com/spf13/cast/caste.go b/vendor/github.com/spf13/cast/caste.go index 70c7291be..c04af6a97 100644 --- a/vendor/github.com/spf13/cast/caste.go +++ b/vendor/github.com/spf13/cast/caste.go @@ -20,13 +20,20 @@ var errNegativeNotAllowed = errors.New("unable to cast negative value") // ToTimeE casts an interface to a time.Time type. func ToTimeE(i interface{}) (tim time.Time, err error) { + return ToTimeInDefaultLocationE(i, time.UTC) +} + +// ToTimeInDefaultLocationE casts an empty interface to time.Time, +// interpreting inputs without a timezone to be in the given location, +// or the local timezone if nil. +func ToTimeInDefaultLocationE(i interface{}, location *time.Location) (tim time.Time, err error) { i = indirect(i) switch v := i.(type) { case time.Time: return v, nil case string: - return StringToDate(v) + return StringToDateInDefaultLocation(v, location) case int: return time.Unix(int64(v), 0), nil case int64: @@ -1129,8 +1136,43 @@ func ToStringSliceE(i interface{}) ([]string, error) { return a, nil case []string: return v, nil + case []int8: + for _, u := range v { + a = append(a, ToString(u)) + } + return a, nil + case []int: + for _, u := range v { + a = append(a, ToString(u)) + } + return a, nil + case []int32: + for _, u := range v { + a = append(a, ToString(u)) + } + return a, nil + case []int64: + for _, u := range v { + a = append(a, ToString(u)) + } + return a, nil + case []float32: + for _, u := range v { + a = append(a, ToString(u)) + } + return a, nil + case []float64: + for _, u := range v { + a = append(a, ToString(u)) + } + return a, nil case string: return strings.Fields(v), nil + case []error: + for _, err := range i.([]error) { + a = append(a, err.Error()) + } + return a, nil case interface{}: str, err := ToStringE(v) if err != nil { @@ -1204,37 +1246,83 @@ func ToDurationSliceE(i interface{}) ([]time.Duration, error) { // predefined list of formats. If no suitable format is found, an error is // returned. func StringToDate(s string) (time.Time, error) { - return parseDateWith(s, []string{ - time.RFC3339, - "2006-01-02T15:04:05", // iso8601 without timezone - time.RFC1123Z, - time.RFC1123, - time.RFC822Z, - time.RFC822, - time.RFC850, - time.ANSIC, - time.UnixDate, - time.RubyDate, - "2006-01-02 15:04:05.999999999 -0700 MST", // Time.String() - "2006-01-02", - "02 Jan 2006", - "2006-01-02T15:04:05-0700", // RFC3339 without timezone hh:mm colon - "2006-01-02 15:04:05 -07:00", - "2006-01-02 15:04:05 -0700", - "2006-01-02 15:04:05Z07:00", // RFC3339 without T - "2006-01-02 15:04:05Z0700", // RFC3339 without T or timezone hh:mm colon - "2006-01-02 15:04:05", - time.Kitchen, - time.Stamp, - time.StampMilli, - time.StampMicro, - time.StampNano, - }) + return parseDateWith(s, time.UTC, timeFormats) +} + +// StringToDateInDefaultLocation casts an empty interface to a time.Time, +// interpreting inputs without a timezone to be in the given location, +// or the local timezone if nil. +func StringToDateInDefaultLocation(s string, location *time.Location) (time.Time, error) { + return parseDateWith(s, location, timeFormats) } -func parseDateWith(s string, dates []string) (d time.Time, e error) { - for _, dateType := range dates { - if d, e = time.Parse(dateType, s); e == nil { +type timeFormatType int + +const ( + timeFormatNoTimezone timeFormatType = iota + timeFormatNamedTimezone + timeFormatNumericTimezone + timeFormatNumericAndNamedTimezone + timeFormatTimeOnly +) + +type timeFormat struct { + format string + typ timeFormatType +} + +func (f timeFormat) hasTimezone() bool { + // We don't include the formats with only named timezones, see + // https://github.com/golang/go/issues/19694#issuecomment-289103522 + return f.typ >= timeFormatNumericTimezone && f.typ <= timeFormatNumericAndNamedTimezone +} + +var ( + timeFormats = []timeFormat{ + timeFormat{time.RFC3339, timeFormatNumericTimezone}, + timeFormat{"2006-01-02T15:04:05", timeFormatNoTimezone}, // iso8601 without timezone + timeFormat{time.RFC1123Z, timeFormatNumericTimezone}, + timeFormat{time.RFC1123, timeFormatNamedTimezone}, + timeFormat{time.RFC822Z, timeFormatNumericTimezone}, + timeFormat{time.RFC822, timeFormatNamedTimezone}, + timeFormat{time.RFC850, timeFormatNamedTimezone}, + timeFormat{"2006-01-02 15:04:05.999999999 -0700 MST", timeFormatNumericAndNamedTimezone}, // Time.String() + timeFormat{"2006-01-02T15:04:05-0700", timeFormatNumericTimezone}, // RFC3339 without timezone hh:mm colon + timeFormat{"2006-01-02 15:04:05Z0700", timeFormatNumericTimezone}, // RFC3339 without T or timezone hh:mm colon + timeFormat{"2006-01-02 15:04:05", timeFormatNoTimezone}, + timeFormat{time.ANSIC, timeFormatNoTimezone}, + timeFormat{time.UnixDate, timeFormatNamedTimezone}, + timeFormat{time.RubyDate, timeFormatNumericTimezone}, + timeFormat{"2006-01-02 15:04:05Z07:00", timeFormatNumericTimezone}, + timeFormat{"2006-01-02", timeFormatNoTimezone}, + timeFormat{"02 Jan 2006", timeFormatNoTimezone}, + timeFormat{"2006-01-02 15:04:05 -07:00", timeFormatNumericTimezone}, + timeFormat{"2006-01-02 15:04:05 -0700", timeFormatNumericTimezone}, + timeFormat{time.Kitchen, timeFormatTimeOnly}, + timeFormat{time.Stamp, timeFormatTimeOnly}, + timeFormat{time.StampMilli, timeFormatTimeOnly}, + timeFormat{time.StampMicro, timeFormatTimeOnly}, + timeFormat{time.StampNano, timeFormatTimeOnly}, + } +) + +func parseDateWith(s string, location *time.Location, formats []timeFormat) (d time.Time, e error) { + + for _, format := range formats { + if d, e = time.Parse(format.format, s); e == nil { + + // Some time formats have a zone name, but no offset, so it gets + // put in that zone name (not the default one passed in to us), but + // without that zone's offset. So set the location manually. + if format.typ <= timeFormatNamedTimezone { + if location == nil { + location = time.Local + } + year, month, day := d.Date() + hour, min, sec := d.Clock() + d = time.Date(year, month, day, hour, min, sec, d.Nanosecond(), location) + } + return } } diff --git a/vendor/github.com/spf13/cast/go.mod b/vendor/github.com/spf13/cast/go.mod deleted file mode 100644 index c1c0232dd..000000000 --- a/vendor/github.com/spf13/cast/go.mod +++ /dev/null @@ -1,7 +0,0 @@ -module github.com/spf13/cast - -require ( - github.com/davecgh/go-spew v1.1.1 // indirect - github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/stretchr/testify v1.2.2 -) diff --git a/vendor/github.com/spf13/cast/go.sum b/vendor/github.com/spf13/cast/go.sum deleted file mode 100644 index e03ee77d9..000000000 --- a/vendor/github.com/spf13/cast/go.sum +++ /dev/null @@ -1,6 +0,0 @@ -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= diff --git a/vendor/github.com/spf13/cast/timeformattype_string.go b/vendor/github.com/spf13/cast/timeformattype_string.go new file mode 100644 index 000000000..1524fc82c --- /dev/null +++ b/vendor/github.com/spf13/cast/timeformattype_string.go @@ -0,0 +1,27 @@ +// Code generated by "stringer -type timeFormatType"; DO NOT EDIT. + +package cast + +import "strconv" + +func _() { + // An "invalid array index" compiler error signifies that the constant values have changed. + // Re-run the stringer command to generate them again. + var x [1]struct{} + _ = x[timeFormatNoTimezone-0] + _ = x[timeFormatNamedTimezone-1] + _ = x[timeFormatNumericTimezone-2] + _ = x[timeFormatNumericAndNamedTimezone-3] + _ = x[timeFormatTimeOnly-4] +} + +const _timeFormatType_name = "timeFormatNoTimezonetimeFormatNamedTimezonetimeFormatNumericTimezonetimeFormatNumericAndNamedTimezonetimeFormatTimeOnly" + +var _timeFormatType_index = [...]uint8{0, 20, 43, 68, 101, 119} + +func (i timeFormatType) String() string { + if i < 0 || i >= timeFormatType(len(_timeFormatType_index)-1) { + return "timeFormatType(" + strconv.FormatInt(int64(i), 10) + ")" + } + return _timeFormatType_name[_timeFormatType_index[i]:_timeFormatType_index[i+1]] +} diff --git a/vendor/github.com/spf13/cobra/MAINTAINERS b/vendor/github.com/spf13/cobra/MAINTAINERS new file mode 100644 index 000000000..4c5ac3dd9 --- /dev/null +++ b/vendor/github.com/spf13/cobra/MAINTAINERS @@ -0,0 +1,13 @@ +maintainers: +- spf13 +- johnSchnake +- jpmcb +- marckhouzam +inactive: +- anthonyfok +- bep +- bogem +- broady +- eparis +- jharshman +- wfernandes diff --git a/vendor/github.com/spf13/cobra/Makefile b/vendor/github.com/spf13/cobra/Makefile index 472c73bf1..443ef1a98 100644 --- a/vendor/github.com/spf13/cobra/Makefile +++ b/vendor/github.com/spf13/cobra/Makefile @@ -9,11 +9,11 @@ ifeq (, $(shell which richgo)) $(warning "could not find richgo in $(PATH), run: go get github.com/kyoh86/richgo") endif -.PHONY: fmt lint test cobra_generator install_deps clean +.PHONY: fmt lint test install_deps clean default: all -all: fmt test cobra_generator +all: fmt test fmt: $(info ******************** checking formatting ********************) @@ -23,15 +23,10 @@ lint: $(info ******************** running lint tools ********************) golangci-lint run -v -test: install_deps lint +test: install_deps $(info ******************** running tests ********************) richgo test -v ./... -cobra_generator: install_deps - $(info ******************** building generator ********************) - mkdir -p $(BIN) - make -C cobra all - install_deps: $(info ******************** downloading dependencies ********************) go get -v ./... diff --git a/vendor/github.com/spf13/cobra/README.md b/vendor/github.com/spf13/cobra/README.md index 074e3979f..7adef143b 100644 --- a/vendor/github.com/spf13/cobra/README.md +++ b/vendor/github.com/spf13/cobra/README.md @@ -1,52 +1,26 @@ ![cobra logo](https://cloud.githubusercontent.com/assets/173412/10886352/ad566232-814f-11e5-9cd0-aa101788c117.png) -Cobra is both a library for creating powerful modern CLI applications as well as a program to generate applications and command files. +Cobra is a library for creating powerful modern CLI applications. Cobra is used in many Go projects such as [Kubernetes](http://kubernetes.io/), [Hugo](https://gohugo.io), and [Github CLI](https://github.com/cli/cli) to name a few. [This list](./projects_using_cobra.md) contains a more extensive list of projects using Cobra. [![](https://img.shields.io/github/workflow/status/spf13/cobra/Test?longCache=tru&label=Test&logo=github%20actions&logoColor=fff)](https://github.com/spf13/cobra/actions?query=workflow%3ATest) -[![GoDoc](https://godoc.org/github.com/spf13/cobra?status.svg)](https://godoc.org/github.com/spf13/cobra) +[![Go Reference](https://pkg.go.dev/badge/github.com/spf13/cobra.svg)](https://pkg.go.dev/github.com/spf13/cobra) [![Go Report Card](https://goreportcard.com/badge/github.com/spf13/cobra)](https://goreportcard.com/report/github.com/spf13/cobra) [![Slack](https://img.shields.io/badge/Slack-cobra-brightgreen)](https://gophers.slack.com/archives/CD3LP1199) -# Table of Contents - -- [Overview](#overview) -- [Concepts](#concepts) - * [Commands](#commands) - * [Flags](#flags) -- [Installing](#installing) -- [Usage](#usage) - * [Using the Cobra Generator](user_guide.md#using-the-cobra-generator) - * [Using the Cobra Library](user_guide.md#using-the-cobra-library) - * [Working with Flags](user_guide.md#working-with-flags) - * [Positional and Custom Arguments](user_guide.md#positional-and-custom-arguments) - * [Example](user_guide.md#example) - * [Help Command](user_guide.md#help-command) - * [Usage Message](user_guide.md#usage-message) - * [PreRun and PostRun Hooks](user_guide.md#prerun-and-postrun-hooks) - * [Suggestions when "unknown command" happens](user_guide.md#suggestions-when-unknown-command-happens) - * [Generating documentation for your command](user_guide.md#generating-documentation-for-your-command) - * [Generating shell completions](user_guide.md#generating-shell-completions) -- [Contributing](CONTRIBUTING.md) -- [License](#license) - # Overview Cobra is a library providing a simple interface to create powerful modern CLI interfaces similar to git & go tools. -Cobra is also an application that will generate your application scaffolding to rapidly -develop a Cobra-based application. - Cobra provides: * Easy subcommand-based CLIs: `app server`, `app fetch`, etc. * Fully POSIX-compliant flags (including short & long versions) * Nested subcommands * Global, local and cascading flags -* Easy generation of applications & commands with `cobra init appname` & `cobra add cmdname` * Intelligent suggestions (`app srver`... did you mean `app server`?) * Automatic help generation for commands and flags * Automatic help flag recognition of `-h`, `--help`, etc. @@ -54,7 +28,7 @@ Cobra provides: * Automatically generated man pages for your application * Command aliases so you can change things without breaking them * The flexibility to define your own help, usage, etc. -* Optional tight integration with [viper](http://github.com/spf13/viper) for 12-factor apps +* Optional seamless integration with [viper](http://github.com/spf13/viper) for 12-factor apps # Concepts @@ -88,7 +62,7 @@ have children commands and optionally run an action. In the example above, 'server' is the command. -[More about cobra.Command](https://godoc.org/github.com/spf13/cobra#Command) +[More about cobra.Command](https://pkg.go.dev/github.com/spf13/cobra#Command) ## Flags @@ -105,10 +79,11 @@ which maintains the same interface while adding POSIX compliance. # Installing Using Cobra is easy. First, use `go get` to install the latest version -of the library. This command will install the `cobra` generator executable -along with the library and its dependencies: +of the library. - go get -u github.com/spf13/cobra +``` +go get -u github.com/spf13/cobra@latest +``` Next, include Cobra in your application: @@ -117,8 +92,19 @@ import "github.com/spf13/cobra" ``` # Usage +`cobra-cli` is a command line program to generate cobra applications and command files. +It will bootstrap your application scaffolding to rapidly +develop a Cobra-based application. It is the easiest way to incorporate Cobra into your application. + +It can be installed by running: + +``` +go install github.com/spf13/cobra-cli@latest +``` + +For complete details on using the Cobra-CLI generator, please read [The Cobra Generator README](https://github.com/spf13/cobra-cli/blob/master/README.md) -See [User Guide](user_guide.md). +For complete details on using the Cobra library, please read the [The Cobra User Guide](user_guide.md). # License diff --git a/vendor/github.com/spf13/cobra/args.go b/vendor/github.com/spf13/cobra/args.go index 70e9b2629..20a022b30 100644 --- a/vendor/github.com/spf13/cobra/args.go +++ b/vendor/github.com/spf13/cobra/args.go @@ -107,3 +107,15 @@ func RangeArgs(min int, max int) PositionalArgs { return nil } } + +// MatchAll allows combining several PositionalArgs to work in concert. +func MatchAll(pargs ...PositionalArgs) PositionalArgs { + return func(cmd *Command, args []string) error { + for _, parg := range pargs { + if err := parg(cmd, args); err != nil { + return err + } + } + return nil + } +} diff --git a/vendor/github.com/spf13/cobra/bash_completions.go b/vendor/github.com/spf13/cobra/bash_completions.go index 733f4d121..6c360c595 100644 --- a/vendor/github.com/spf13/cobra/bash_completions.go +++ b/vendor/github.com/spf13/cobra/bash_completions.go @@ -24,7 +24,7 @@ func writePreamble(buf io.StringWriter, name string) { WriteStringAndCheck(buf, fmt.Sprintf(` __%[1]s_debug() { - if [[ -n ${BASH_COMP_DEBUG_FILE} ]]; then + if [[ -n ${BASH_COMP_DEBUG_FILE:-} ]]; then echo "$*" >> "${BASH_COMP_DEBUG_FILE}" fi } @@ -134,7 +134,7 @@ __%[1]s_handle_go_custom_completion() $filteringCmd elif [ $((directive & shellCompDirectiveFilterDirs)) -ne 0 ]; then # File completion for directories only - local subDir + local subdir # Use printf to strip any trailing newline subdir=$(printf "%%s" "${out[0]}") if [ -n "$subdir" ]; then @@ -187,13 +187,19 @@ __%[1]s_handle_reply() PREFIX="" cur="${cur#*=}" ${flags_completion[${index}]} - if [ -n "${ZSH_VERSION}" ]; then + if [ -n "${ZSH_VERSION:-}" ]; then # zsh completion needs --flag= prefix eval "COMPREPLY=( \"\${COMPREPLY[@]/#/${flag}=}\" )" fi fi fi - return 0; + + if [[ -z "${flag_parsing_disabled}" ]]; then + # If flag parsing is enabled, we have completed the flags and can return. + # If flag parsing is disabled, we may not know all (or any) of the flags, so we fallthrough + # to possibly call handle_go_custom_completion. + return 0; + fi ;; esac @@ -232,13 +238,13 @@ __%[1]s_handle_reply() fi if [[ ${#COMPREPLY[@]} -eq 0 ]]; then - if declare -F __%[1]s_custom_func >/dev/null; then - # try command name qualified custom func - __%[1]s_custom_func - else - # otherwise fall back to unqualified for compatibility - declare -F __custom_func >/dev/null && __custom_func - fi + if declare -F __%[1]s_custom_func >/dev/null; then + # try command name qualified custom func + __%[1]s_custom_func + else + # otherwise fall back to unqualified for compatibility + declare -F __custom_func >/dev/null && __custom_func + fi fi # available in bash-completion >= 2, not always present on macOS @@ -272,7 +278,7 @@ __%[1]s_handle_flag() # if a command required a flag, and we found it, unset must_have_one_flag() local flagname=${words[c]} - local flagvalue + local flagvalue="" # if the word contained an = if [[ ${words[c]} == *"="* ]]; then flagvalue=${flagname#*=} # take in as flagvalue after the = @@ -291,7 +297,7 @@ __%[1]s_handle_flag() # keep flag value with flagname as flaghash # flaghash variable is an associative array which is only supported in bash > 3. - if [[ -z "${BASH_VERSION}" || "${BASH_VERSINFO[0]}" -gt 3 ]]; then + if [[ -z "${BASH_VERSION:-}" || "${BASH_VERSINFO[0]:-}" -gt 3 ]]; then if [ -n "${flagvalue}" ] ; then flaghash[${flagname}]=${flagvalue} elif [ -n "${words[ $((c+1)) ]}" ] ; then @@ -303,7 +309,7 @@ __%[1]s_handle_flag() # skip the argument to a two word flag if [[ ${words[c]} != *"="* ]] && __%[1]s_contains_word "${words[c]}" "${two_word_flags[@]}"; then - __%[1]s_debug "${FUNCNAME[0]}: found a flag ${words[c]}, skip the next argument" + __%[1]s_debug "${FUNCNAME[0]}: found a flag ${words[c]}, skip the next argument" c=$((c+1)) # if we are looking for a flags value, don't show commands if [[ $c -eq $cword ]]; then @@ -363,7 +369,7 @@ __%[1]s_handle_word() __%[1]s_handle_command elif __%[1]s_contains_word "${words[c]}" "${command_aliases[@]}"; then # aliashash variable is an associative array which is only supported in bash > 3. - if [[ -z "${BASH_VERSION}" || "${BASH_VERSINFO[0]}" -gt 3 ]]; then + if [[ -z "${BASH_VERSION:-}" || "${BASH_VERSINFO[0]:-}" -gt 3 ]]; then words[c]=${aliashash[${words[c]}]} __%[1]s_handle_command else @@ -394,6 +400,7 @@ func writePostscript(buf io.StringWriter, name string) { fi local c=0 + local flag_parsing_disabled= local flags=() local two_word_flags=() local local_nonpersistent_flags=() @@ -403,8 +410,8 @@ func writePostscript(buf io.StringWriter, name string) { local command_aliases=() local must_have_one_flag=() local must_have_one_noun=() - local has_completion_function - local last_command + local has_completion_function="" + local last_command="" local nouns=() local noun_aliases=() @@ -535,6 +542,11 @@ func writeFlags(buf io.StringWriter, cmd *Command) { flags_completion=() `) + + if cmd.DisableFlagParsing { + WriteStringAndCheck(buf, " flag_parsing_disabled=1\n") + } + localNonPersistentFlags := cmd.LocalNonPersistentFlags() cmd.NonInheritedFlags().VisitAll(func(flag *pflag.Flag) { if nonCompletableFlag(flag) { @@ -609,7 +621,7 @@ func writeCmdAliases(buf io.StringWriter, cmd *Command) { sort.Strings(cmd.Aliases) - WriteStringAndCheck(buf, fmt.Sprint(` if [[ -z "${BASH_VERSION}" || "${BASH_VERSINFO[0]}" -gt 3 ]]; then`, "\n")) + WriteStringAndCheck(buf, fmt.Sprint(` if [[ -z "${BASH_VERSION:-}" || "${BASH_VERSINFO[0]:-}" -gt 3 ]]; then`, "\n")) for _, value := range cmd.Aliases { WriteStringAndCheck(buf, fmt.Sprintf(" command_aliases+=(%q)\n", value)) WriteStringAndCheck(buf, fmt.Sprintf(" aliashash[%q]=%q\n", value, cmd.Name())) diff --git a/vendor/github.com/spf13/cobra/bash_completionsV2.go b/vendor/github.com/spf13/cobra/bash_completionsV2.go index 8859b57c4..82d26c175 100644 --- a/vendor/github.com/spf13/cobra/bash_completionsV2.go +++ b/vendor/github.com/spf13/cobra/bash_completionsV2.go @@ -138,13 +138,42 @@ __%[1]s_process_completion_results() { _filedir -d fi else - __%[1]s_handle_standard_completion_case + __%[1]s_handle_completion_types fi __%[1]s_handle_special_char "$cur" : __%[1]s_handle_special_char "$cur" = } +__%[1]s_handle_completion_types() { + __%[1]s_debug "__%[1]s_handle_completion_types: COMP_TYPE is $COMP_TYPE" + + case $COMP_TYPE in + 37|42) + # Type: menu-complete/menu-complete-backward and insert-completions + # If the user requested inserting one completion at a time, or all + # completions at once on the command-line we must remove the descriptions. + # https://github.com/spf13/cobra/issues/1508 + local tab comp + tab=$(printf '\t') + while IFS='' read -r comp; do + # Strip any description + comp=${comp%%%%$tab*} + # Only consider the completions that match + comp=$(compgen -W "$comp" -- "$cur") + if [ -n "$comp" ]; then + COMPREPLY+=("$comp") + fi + done < <(printf "%%s\n" "${out[@]}") + ;; + + *) + # Type: complete (normal completion) + __%[1]s_handle_standard_completion_case + ;; + esac +} + __%[1]s_handle_standard_completion_case() { local tab comp tab=$(printf '\t') diff --git a/vendor/github.com/spf13/cobra/command_notwin.go b/vendor/github.com/spf13/cobra/command_notwin.go index 6159c1cc1..bb5dad90b 100644 --- a/vendor/github.com/spf13/cobra/command_notwin.go +++ b/vendor/github.com/spf13/cobra/command_notwin.go @@ -1,3 +1,4 @@ +//go:build !windows // +build !windows package cobra diff --git a/vendor/github.com/spf13/cobra/command_win.go b/vendor/github.com/spf13/cobra/command_win.go index 8768b1736..a84f5a82a 100644 --- a/vendor/github.com/spf13/cobra/command_win.go +++ b/vendor/github.com/spf13/cobra/command_win.go @@ -1,3 +1,4 @@ +//go:build windows // +build windows package cobra diff --git a/vendor/github.com/spf13/cobra/completions.go b/vendor/github.com/spf13/cobra/completions.go index b849b9c84..9ecd56a47 100644 --- a/vendor/github.com/spf13/cobra/completions.go +++ b/vendor/github.com/spf13/cobra/completions.go @@ -93,6 +93,8 @@ type CompletionOptions struct { // DisableDescriptions turns off all completion descriptions for shells // that support them DisableDescriptions bool + // HiddenDefaultCmd makes the default 'completion' command hidden + HiddenDefaultCmd bool } // NoFileCompletions can be used to disable file completion for commands that should @@ -226,7 +228,17 @@ func (c *Command) getCompletions(args []string) (*Command, []string, ShellCompDi if c.Root().TraverseChildren { finalCmd, finalArgs, err = c.Root().Traverse(trimmedArgs) } else { - finalCmd, finalArgs, err = c.Root().Find(trimmedArgs) + // For Root commands that don't specify any value for their Args fields, when we call + // Find(), if those Root commands don't have any sub-commands, they will accept arguments. + // However, because we have added the __complete sub-command in the current code path, the + // call to Find() -> legacyArgs() will return an error if there are any arguments. + // To avoid this, we first remove the __complete command to get back to having no sub-commands. + rootCmd := c.Root() + if len(rootCmd.Commands()) == 1 { + rootCmd.RemoveCommand(c) + } + + finalCmd, finalArgs, err = rootCmd.Find(trimmedArgs) } if err != nil { // Unable to find the real command. E.g., someInvalidCmd @@ -266,6 +278,12 @@ func (c *Command) getCompletions(args []string) (*Command, []string, ShellCompDi } } + // We only remove the flags from the arguments if DisableFlagParsing is not set. + // This is important for commands which have requested to do their own flag completion. + if !finalCmd.DisableFlagParsing { + finalArgs = finalCmd.Flags().Args() + } + if flag != nil && flagCompletion { // Check if we are completing a flag value subject to annotations if validExts, present := flag.Annotations[BashCompFilenameExt]; present { @@ -290,12 +308,16 @@ func (c *Command) getCompletions(args []string) (*Command, []string, ShellCompDi } } + var completions []string + var directive ShellCompDirective + + // Note that we want to perform flagname completion even if finalCmd.DisableFlagParsing==true; + // doing this allows for completion of persistant flag names even for commands that disable flag parsing. + // // When doing completion of a flag name, as soon as an argument starts with // a '-' we know it is a flag. We cannot use isFlagArg() here as it requires // the flag name to be complete if flag == nil && len(toComplete) > 0 && toComplete[0] == '-' && !strings.Contains(toComplete, "=") && flagCompletion { - var completions []string - // First check for required flags completions = completeRequireFlags(finalCmd, toComplete) @@ -322,86 +344,86 @@ func (c *Command) getCompletions(args []string) (*Command, []string, ShellCompDi }) } - directive := ShellCompDirectiveNoFileComp + directive = ShellCompDirectiveNoFileComp if len(completions) == 1 && strings.HasSuffix(completions[0], "=") { // If there is a single completion, the shell usually adds a space // after the completion. We don't want that if the flag ends with an = directive = ShellCompDirectiveNoSpace } - return finalCmd, completions, directive, nil - } - // We only remove the flags from the arguments if DisableFlagParsing is not set. - // This is important for commands which have requested to do their own flag completion. - if !finalCmd.DisableFlagParsing { - finalArgs = finalCmd.Flags().Args() - } - - var completions []string - directive := ShellCompDirectiveDefault - if flag == nil { - foundLocalNonPersistentFlag := false - // If TraverseChildren is true on the root command we don't check for - // local flags because we can use a local flag on a parent command - if !finalCmd.Root().TraverseChildren { - // Check if there are any local, non-persistent flags on the command-line - localNonPersistentFlags := finalCmd.LocalNonPersistentFlags() - finalCmd.NonInheritedFlags().VisitAll(func(flag *pflag.Flag) { - if localNonPersistentFlags.Lookup(flag.Name) != nil && flag.Changed { - foundLocalNonPersistentFlag = true - } - }) + if !finalCmd.DisableFlagParsing { + // If DisableFlagParsing==false, we have completed the flags as known by Cobra; + // we can return what we found. + // If DisableFlagParsing==true, Cobra may not be aware of all flags, so we + // let the logic continue to see if ValidArgsFunction needs to be called. + return finalCmd, completions, directive, nil } + } else { + directive = ShellCompDirectiveDefault + if flag == nil { + foundLocalNonPersistentFlag := false + // If TraverseChildren is true on the root command we don't check for + // local flags because we can use a local flag on a parent command + if !finalCmd.Root().TraverseChildren { + // Check if there are any local, non-persistent flags on the command-line + localNonPersistentFlags := finalCmd.LocalNonPersistentFlags() + finalCmd.NonInheritedFlags().VisitAll(func(flag *pflag.Flag) { + if localNonPersistentFlags.Lookup(flag.Name) != nil && flag.Changed { + foundLocalNonPersistentFlag = true + } + }) + } - // Complete subcommand names, including the help command - if len(finalArgs) == 0 && !foundLocalNonPersistentFlag { - // We only complete sub-commands if: - // - there are no arguments on the command-line and - // - there are no local, non-persistent flags on the command-line or TraverseChildren is true - for _, subCmd := range finalCmd.Commands() { - if subCmd.IsAvailableCommand() || subCmd == finalCmd.helpCommand { - if strings.HasPrefix(subCmd.Name(), toComplete) { - completions = append(completions, fmt.Sprintf("%s\t%s", subCmd.Name(), subCmd.Short)) + // Complete subcommand names, including the help command + if len(finalArgs) == 0 && !foundLocalNonPersistentFlag { + // We only complete sub-commands if: + // - there are no arguments on the command-line and + // - there are no local, non-persistent flags on the command-line or TraverseChildren is true + for _, subCmd := range finalCmd.Commands() { + if subCmd.IsAvailableCommand() || subCmd == finalCmd.helpCommand { + if strings.HasPrefix(subCmd.Name(), toComplete) { + completions = append(completions, fmt.Sprintf("%s\t%s", subCmd.Name(), subCmd.Short)) + } + directive = ShellCompDirectiveNoFileComp } - directive = ShellCompDirectiveNoFileComp } } - } - // Complete required flags even without the '-' prefix - completions = append(completions, completeRequireFlags(finalCmd, toComplete)...) - - // Always complete ValidArgs, even if we are completing a subcommand name. - // This is for commands that have both subcommands and ValidArgs. - if len(finalCmd.ValidArgs) > 0 { - if len(finalArgs) == 0 { - // ValidArgs are only for the first argument - for _, validArg := range finalCmd.ValidArgs { - if strings.HasPrefix(validArg, toComplete) { - completions = append(completions, validArg) + // Complete required flags even without the '-' prefix + completions = append(completions, completeRequireFlags(finalCmd, toComplete)...) + + // Always complete ValidArgs, even if we are completing a subcommand name. + // This is for commands that have both subcommands and ValidArgs. + if len(finalCmd.ValidArgs) > 0 { + if len(finalArgs) == 0 { + // ValidArgs are only for the first argument + for _, validArg := range finalCmd.ValidArgs { + if strings.HasPrefix(validArg, toComplete) { + completions = append(completions, validArg) + } } - } - directive = ShellCompDirectiveNoFileComp - - // If no completions were found within commands or ValidArgs, - // see if there are any ArgAliases that should be completed. - if len(completions) == 0 { - for _, argAlias := range finalCmd.ArgAliases { - if strings.HasPrefix(argAlias, toComplete) { - completions = append(completions, argAlias) + directive = ShellCompDirectiveNoFileComp + + // If no completions were found within commands or ValidArgs, + // see if there are any ArgAliases that should be completed. + if len(completions) == 0 { + for _, argAlias := range finalCmd.ArgAliases { + if strings.HasPrefix(argAlias, toComplete) { + completions = append(completions, argAlias) + } } } } + + // If there are ValidArgs specified (even if they don't match), we stop completion. + // Only one of ValidArgs or ValidArgsFunction can be used for a single command. + return finalCmd, completions, directive, nil } - // If there are ValidArgs specified (even if they don't match), we stop completion. - // Only one of ValidArgs or ValidArgsFunction can be used for a single command. - return finalCmd, completions, directive, nil + // Let the logic continue so as to add any ValidArgsFunction completions, + // even if we already found sub-commands. + // This is for commands that have subcommands but also specify a ValidArgsFunction. } - - // Let the logic continue so as to add any ValidArgsFunction completions, - // even if we already found sub-commands. - // This is for commands that have subcommands but also specify a ValidArgsFunction. } // Find the completion function for the flag or command @@ -589,39 +611,43 @@ func (c *Command) initDefaultCompletionCmd() { completionCmd := &Command{ Use: compCmdName, - Short: "generate the autocompletion script for the specified shell", - Long: fmt.Sprintf(` -Generate the autocompletion script for %[1]s for the specified shell. + Short: "Generate the autocompletion script for the specified shell", + Long: fmt.Sprintf(`Generate the autocompletion script for %[1]s for the specified shell. See each sub-command's help for details on how to use the generated script. `, c.Root().Name()), Args: NoArgs, ValidArgsFunction: NoFileCompletions, + Hidden: c.CompletionOptions.HiddenDefaultCmd, } c.AddCommand(completionCmd) out := c.OutOrStdout() noDesc := c.CompletionOptions.DisableDescriptions - shortDesc := "generate the autocompletion script for %s" + shortDesc := "Generate the autocompletion script for %s" bash := &Command{ Use: "bash", Short: fmt.Sprintf(shortDesc, "bash"), - Long: fmt.Sprintf(` -Generate the autocompletion script for the bash shell. + Long: fmt.Sprintf(`Generate the autocompletion script for the bash shell. This script depends on the 'bash-completion' package. If it is not installed already, you can install it via your OS's package manager. To load completions in your current shell session: -$ source <(%[1]s completion bash) + + source <(%[1]s completion bash) To load completions for every new session, execute once: -Linux: - $ %[1]s completion bash > /etc/bash_completion.d/%[1]s -MacOS: - $ %[1]s completion bash > /usr/local/etc/bash_completion.d/%[1]s + +#### Linux: + + %[1]s completion bash > /etc/bash_completion.d/%[1]s + +#### macOS: + + %[1]s completion bash > /usr/local/etc/bash_completion.d/%[1]s You will need to start a new shell for this setup to take effect. - `, c.Root().Name()), +`, c.Root().Name()), Args: NoArgs, DisableFlagsInUseLine: true, ValidArgsFunction: NoFileCompletions, @@ -636,19 +662,22 @@ You will need to start a new shell for this setup to take effect. zsh := &Command{ Use: "zsh", Short: fmt.Sprintf(shortDesc, "zsh"), - Long: fmt.Sprintf(` -Generate the autocompletion script for the zsh shell. + Long: fmt.Sprintf(`Generate the autocompletion script for the zsh shell. If shell completion is not already enabled in your environment you will need to enable it. You can execute the following once: -$ echo "autoload -U compinit; compinit" >> ~/.zshrc + echo "autoload -U compinit; compinit" >> ~/.zshrc To load completions for every new session, execute once: -# Linux: -$ %[1]s completion zsh > "${fpath[1]}/_%[1]s" -# macOS: -$ %[1]s completion zsh > /usr/local/share/zsh/site-functions/_%[1]s + +#### Linux: + + %[1]s completion zsh > "${fpath[1]}/_%[1]s" + +#### macOS: + + %[1]s completion zsh > /usr/local/share/zsh/site-functions/_%[1]s You will need to start a new shell for this setup to take effect. `, c.Root().Name()), @@ -668,14 +697,15 @@ You will need to start a new shell for this setup to take effect. fish := &Command{ Use: "fish", Short: fmt.Sprintf(shortDesc, "fish"), - Long: fmt.Sprintf(` -Generate the autocompletion script for the fish shell. + Long: fmt.Sprintf(`Generate the autocompletion script for the fish shell. To load completions in your current shell session: -$ %[1]s completion fish | source + + %[1]s completion fish | source To load completions for every new session, execute once: -$ %[1]s completion fish > ~/.config/fish/completions/%[1]s.fish + + %[1]s completion fish > ~/.config/fish/completions/%[1]s.fish You will need to start a new shell for this setup to take effect. `, c.Root().Name()), @@ -692,11 +722,11 @@ You will need to start a new shell for this setup to take effect. powershell := &Command{ Use: "powershell", Short: fmt.Sprintf(shortDesc, "powershell"), - Long: fmt.Sprintf(` -Generate the autocompletion script for powershell. + Long: fmt.Sprintf(`Generate the autocompletion script for powershell. To load completions in your current shell session: -PS C:\> %[1]s completion powershell | Out-String | Invoke-Expression + + %[1]s completion powershell | Out-String | Invoke-Expression To load completions for every new session, add the output of the above command to your powershell profile. diff --git a/vendor/github.com/spf13/cobra/go.mod b/vendor/github.com/spf13/cobra/go.mod deleted file mode 100644 index 1fb9439dd..000000000 --- a/vendor/github.com/spf13/cobra/go.mod +++ /dev/null @@ -1,11 +0,0 @@ -module github.com/spf13/cobra - -go 1.14 - -require ( - github.com/cpuguy83/go-md2man/v2 v2.0.0 - github.com/inconshreveable/mousetrap v1.0.0 - github.com/spf13/pflag v1.0.5 - github.com/spf13/viper v1.8.1 - gopkg.in/yaml.v2 v2.4.0 -) diff --git a/vendor/github.com/spf13/cobra/go.sum b/vendor/github.com/spf13/cobra/go.sum deleted file mode 100644 index 3e22df29a..000000000 --- a/vendor/github.com/spf13/cobra/go.sum +++ /dev/null @@ -1,592 +0,0 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= -cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= -cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= -cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= -cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= -cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= -cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= -cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= -cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= -cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= -cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= -cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= -cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= -cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= -cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= -cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= -cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= -cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= -cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= -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/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= -cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= -cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= -cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= -cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= -cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= -cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= -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= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= -github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= -github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/cpuguy83/go-md2man/v2 v2.0.0 h1:EoUDS0afbrsXAZ9YQ9jdu/mZ2sXgT1/2yyNng4PGlyM= -github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= -github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= -github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= -github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= -github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= -github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= -github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= -github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= -github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= -github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= -github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= -github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= -github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= -github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= -github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= -github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -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/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= -github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/magiconair/properties v1.8.5 h1:b6kJs+EmPFMYGkow9GiUyCyOvIwYetYJ3fSaWak/Gls= -github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= -github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= -github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= -github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.4.1 h1:CpVNEelQCZBooIPDn+AR3NpivK/TIKU8bDxdASFVQag= -github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pelletier/go-toml v1.9.3 h1:zeC5b1GviRUyKYd6OJPvBU/mcVDVoL1OhT17FCt5dSQ= -github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= -github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/spf13/afero v1.6.0 h1:xoax2sJ2DT8S8xA2paPFjDCScCNeWsg75VG0DLRreiY= -github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= -github.com/spf13/cast v1.3.1 h1:nFm6S0SMdyzrzcmThSipiEubIDy8WEXKNZ0UOgiRpng= -github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= -github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= -github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= -github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.8.1 h1:Kq1fyeebqsBfbjZj4EL7gj2IO0mMaiyjYUWcUsl2O44= -github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= -github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= -github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= -go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= -go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= -go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= -golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= -golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= -golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= -golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/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= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= -golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= -golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -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.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -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= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/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-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/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-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/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-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007 h1:gG67DSER+11cZvqIMb8S8bt0vZtiN6xWYARwirrOSfE= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.5 h1:i6eZZ+zk0SOf0xgBpEpPD18qWcJda6q1sxt3S0kzyUQ= -golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= -golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -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= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= -google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= -google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= -google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= -google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= -google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= -google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= -google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= -google.golang.org/api v0.44.0/go.mod h1:EBOGZqzyhtvMDoxwS97ctnh0zUmYY6CxqXsc1AvkYD8= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= -google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= -google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= -google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= -google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -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= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/ini.v1 v1.62.0 h1:duBzk771uxoUuOlyRLkHsygud9+5lrlGjdFBb4mSKDU= -gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= -rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/vendor/github.com/spf13/cobra/powershell_completions.go b/vendor/github.com/spf13/cobra/powershell_completions.go index 59234c09f..62d719f0b 100644 --- a/vendor/github.com/spf13/cobra/powershell_completions.go +++ b/vendor/github.com/spf13/cobra/powershell_completions.go @@ -50,7 +50,7 @@ Register-ArgumentCompleter -CommandName '%[1]s' -ScriptBlock { if ($Command.Length -gt $CursorPosition) { $Command=$Command.Substring(0,$CursorPosition) } - __%[1]s_debug "Truncated command: $Command" + __%[1]s_debug "Truncated command: $Command" $ShellCompDirectiveError=%[3]d $ShellCompDirectiveNoSpace=%[4]d @@ -58,7 +58,7 @@ Register-ArgumentCompleter -CommandName '%[1]s' -ScriptBlock { $ShellCompDirectiveFilterFileExt=%[6]d $ShellCompDirectiveFilterDirs=%[7]d - # Prepare the command to request completions for the program. + # Prepare the command to request completions for the program. # Split the command at the first space to separate the program and arguments. $Program,$Arguments = $Command.Split(" ",2) $RequestComp="$Program %[2]s $Arguments" @@ -233,7 +233,7 @@ Register-ArgumentCompleter -CommandName '%[1]s' -ScriptBlock { Default { # Like MenuComplete but we don't want to add a space here because # the user need to press space anyway to get the completion. - # Description will not be shown because thats not possible with TabCompleteNext + # Description will not be shown because that's not possible with TabCompleteNext [System.Management.Automation.CompletionResult]::new($($comp.Name | __%[1]s_escapeStringWithSpecialChars), "$($comp.Name)", 'ParameterValue', "$($comp.Description)") } } diff --git a/vendor/github.com/spf13/cobra/projects_using_cobra.md b/vendor/github.com/spf13/cobra/projects_using_cobra.md index d98a71e36..9674c348c 100644 --- a/vendor/github.com/spf13/cobra/projects_using_cobra.md +++ b/vendor/github.com/spf13/cobra/projects_using_cobra.md @@ -4,6 +4,7 @@ - [Bleve](http://www.blevesearch.com/) - [CockroachDB](http://www.cockroachlabs.com/) - [Cosmos SDK](https://github.com/cosmos/cosmos-sdk) +- [Datree](https://github.com/datreeio/datree) - [Delve](https://github.com/derekparker/delve) - [Docker (distribution)](https://github.com/docker/distribution) - [Etcd](https://etcd.io/) @@ -14,25 +15,37 @@ - [GitHub Labeler](https://github.com/erdaltsksn/gh-label) - [Golangci-lint](https://golangci-lint.run) - [GopherJS](http://www.gopherjs.org/) +- [GoReleaser](https://goreleaser.com) - [Helm](https://helm.sh) - [Hugo](https://gohugo.io) +- [Infracost](https://github.com/infracost/infracost) - [Istio](https://istio.io) - [Kool](https://github.com/kool-dev/kool) - [Kubernetes](http://kubernetes.io/) - [Linkerd](https://linkerd.io/) - [Mattermost-server](https://github.com/mattermost/mattermost-server) +- [Mercure](https://mercure.rocks/) +- [Meroxa CLI](https://github.com/meroxa/cli) - [Metal Stack CLI](https://github.com/metal-stack/metalctl) - [Moby (former Docker)](https://github.com/moby/moby) +- [Moldy](https://github.com/Moldy-Community/moldy) +- [Multi-gitter](https://github.com/lindell/multi-gitter) - [Nanobox](https://github.com/nanobox-io/nanobox)/[Nanopack](https://github.com/nanopack) +- [nFPM](https://nfpm.goreleaser.com) - [OpenShift](https://www.openshift.com/) - [Ory Hydra](https://github.com/ory/hydra) - [Ory Kratos](https://github.com/ory/kratos) +- [Pixie](https://github.com/pixie-io/pixie) - [Pouch](https://github.com/alibaba/pouch) - [ProjectAtomic (enterprise)](http://www.projectatomic.io/) - [Prototool](https://github.com/uber/prototool) +- [QRcp](https://github.com/claudiodangelis/qrcp) - [Random](https://github.com/erdaltsksn/random) - [Rclone](https://rclone.org/) +- [Scaleway CLI](https://github.com/scaleway/scaleway-cli) - [Skaffold](https://skaffold.dev/) - [Tendermint](https://github.com/tendermint/tendermint) - [Twitch CLI](https://github.com/twitchdev/twitch-cli) +- [UpCloud CLI (`upctl`)](https://github.com/UpCloudLtd/upcloud-cli) +- VMware's [Tanzu Community Edition](https://github.com/vmware-tanzu/community-edition) & [Tanzu Framework](https://github.com/vmware-tanzu/tanzu-framework) - [Werf](https://werf.io/) diff --git a/vendor/github.com/spf13/cobra/shell_completions.md b/vendor/github.com/spf13/cobra/shell_completions.md index 4ba06a11c..33a4c65a5 100644 --- a/vendor/github.com/spf13/cobra/shell_completions.md +++ b/vendor/github.com/spf13/cobra/shell_completions.md @@ -16,10 +16,12 @@ If you do not wish to use the default `completion` command, you can choose to provide your own, which will take precedence over the default one. (This also provides backwards-compatibility with programs that already have their own `completion` command.) -If you are using the generator, you can create a completion command by running +If you are using the `cobra-cli` generator, +which can be found at [spf13/cobra-cli](https://github.com/spf13/cobra-cli), +you can create a completion command by running ```bash -cobra add completion +cobra-cli add completion ``` and then modifying the generated `cmd/completion.go` file to look something like this (writing the shell script to stdout allows the most flexible use): @@ -28,17 +30,17 @@ and then modifying the generated `cmd/completion.go` file to look something like var completionCmd = &cobra.Command{ Use: "completion [bash|zsh|fish|powershell]", Short: "Generate completion script", - Long: `To load completions: + Long: fmt.Sprintf(`To load completions: Bash: - $ source <(yourprogram completion bash) + $ source <(%[1]s completion bash) # To load completions for each session, execute once: # Linux: - $ yourprogram completion bash > /etc/bash_completion.d/yourprogram + $ %[1]s completion bash > /etc/bash_completion.d/%[1]s # macOS: - $ yourprogram completion bash > /usr/local/etc/bash_completion.d/yourprogram + $ %[1]s completion bash > /usr/local/etc/bash_completion.d/%[1]s Zsh: @@ -48,25 +50,25 @@ Zsh: $ echo "autoload -U compinit; compinit" >> ~/.zshrc # To load completions for each session, execute once: - $ yourprogram completion zsh > "${fpath[1]}/_yourprogram" + $ %[1]s completion zsh > "${fpath[1]}/_%[1]s" # You will need to start a new shell for this setup to take effect. fish: - $ yourprogram completion fish | source + $ %[1]s completion fish | source # To load completions for each session, execute once: - $ yourprogram completion fish > ~/.config/fish/completions/yourprogram.fish + $ %[1]s completion fish > ~/.config/fish/completions/%[1]s.fish PowerShell: - PS> yourprogram completion powershell | Out-String | Invoke-Expression + PS> %[1]s completion powershell | Out-String | Invoke-Expression # To load completions for every new session, run: - PS> yourprogram completion powershell > yourprogram.ps1 + PS> %[1]s completion powershell > %[1]s.ps1 # and source this file from your PowerShell profile. -`, +`,cmd.Root().Name()), DisableFlagsInUseLine: true, ValidArgs: []string{"bash", "zsh", "fish", "powershell"}, Args: cobra.ExactValidArgs(1), diff --git a/vendor/github.com/spf13/cobra/user_guide.md b/vendor/github.com/spf13/cobra/user_guide.md index 311abce28..4a3c2b0da 100644 --- a/vendor/github.com/spf13/cobra/user_guide.md +++ b/vendor/github.com/spf13/cobra/user_guide.md @@ -29,10 +29,10 @@ func main() { ## Using the Cobra Generator -Cobra provides its own program that will create your application and add any +Cobra-CLI is its own program that will create your application and add any commands you want. It's the easiest way to incorporate Cobra into your application. -[Here](https://github.com/spf13/cobra/blob/master/cobra/README.md) you can find more information about it. +For complete details on using the Cobra generator, please refer to [The Cobra-CLI Generator README](https://github.com/spf13/cobra-cli/blob/master/README.md) ## Using the Cobra Library @@ -86,7 +86,7 @@ var ( userLicense string rootCmd = &cobra.Command{ - Use: "cobra", + Use: "cobra-cli", Short: "A generator for Cobra based Applications", Long: `Cobra is a CLI library for Go that empowers applications. This application is a tool to generate the needed files @@ -281,7 +281,7 @@ func init() { In this example, the persistent flag `author` is bound with `viper`. **Note**: the variable `author` will not be set to the value from config, -when the `--author` flag is not provided by user. +when the `--author` flag is provided by user. More in [viper documentation](https://github.com/spf13/viper#working-with-flags). @@ -315,6 +315,7 @@ The following validators are built in: - `ExactArgs(int)` - the command will report an error if there are not exactly N positional args. - `ExactValidArgs(int)` - the command will report an error if there are not exactly N positional args OR if there are any positional args that are not in the `ValidArgs` field of `Command` - `RangeArgs(min, max)` - the command will report an error if the number of args is not between the minimum and maximum number of expected args. +- `MatchAll(pargs ...PositionalArgs)` - enables combining existing checks with arbitrary other checks (e.g. you want to check the ExactArgs length along with other qualities). An example of setting the custom validator: diff --git a/vendor/github.com/spf13/cobra/zsh_completions.go b/vendor/github.com/spf13/cobra/zsh_completions.go index 1afec30ea..624adab53 100644 --- a/vendor/github.com/spf13/cobra/zsh_completions.go +++ b/vendor/github.com/spf13/cobra/zsh_completions.go @@ -202,7 +202,7 @@ _%[1]s() _arguments '*:filename:'"$filteringCmd" elif [ $((directive & shellCompDirectiveFilterDirs)) -ne 0 ]; then # File completion for directories only - local subDir + local subdir subdir="${completions[1]}" if [ -n "$subdir" ]; then __%[1]s_debug "Listing directories in $subdir" @@ -250,7 +250,7 @@ _%[1]s() # don't run the completion function when being source-ed or eval-ed if [ "$funcstack[1]" = "_%[1]s" ]; then - _%[1]s + _%[1]s fi `, name, compCmd, ShellCompDirectiveError, ShellCompDirectiveNoSpace, ShellCompDirectiveNoFileComp, diff --git a/vendor/github.com/spf13/jwalterweatherman/go.mod b/vendor/github.com/spf13/jwalterweatherman/go.mod deleted file mode 100644 index 1dbcfd3e8..000000000 --- a/vendor/github.com/spf13/jwalterweatherman/go.mod +++ /dev/null @@ -1,7 +0,0 @@ -module github.com/spf13/jwalterweatherman - -require ( - github.com/davecgh/go-spew v1.1.1 // indirect - github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/stretchr/testify v1.2.2 -) diff --git a/vendor/github.com/spf13/pflag/go.mod b/vendor/github.com/spf13/pflag/go.mod deleted file mode 100644 index b2287eec1..000000000 --- a/vendor/github.com/spf13/pflag/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module github.com/spf13/pflag - -go 1.12 diff --git a/vendor/github.com/spf13/pflag/go.sum b/vendor/github.com/spf13/pflag/go.sum deleted file mode 100644 index e69de29bb..000000000 diff --git a/vendor/github.com/spf13/viper/.golangci.yml b/vendor/github.com/spf13/viper/.golangci.yml index 4f970acb1..16e039652 100644 --- a/vendor/github.com/spf13/viper/.golangci.yml +++ b/vendor/github.com/spf13/viper/.golangci.yml @@ -3,7 +3,10 @@ run: linters-settings: gci: - local-prefixes: github.com/spf13/viper + sections: + - standard + - default + - prefix(github.com/spf13/viper) golint: min-confidence: 0 goimports: @@ -20,7 +23,6 @@ linters: - exhaustive - exportloopref - gci - - goconst - gofmt - gofumpt - goimports @@ -62,6 +64,7 @@ linters: # - gochecknoglobals # - gochecknoinits # - gocognit + # - goconst # - gocritic # - gocyclo # - godot diff --git a/vendor/github.com/spf13/viper/Makefile b/vendor/github.com/spf13/viper/Makefile index b0f9acf24..02d3e3715 100644 --- a/vendor/github.com/spf13/viper/Makefile +++ b/vendor/github.com/spf13/viper/Makefile @@ -15,8 +15,8 @@ TEST_FORMAT = short-verbose endif # Dependency versions -GOTESTSUM_VERSION = 1.6.4 -GOLANGCI_VERSION = 1.40.1 +GOTESTSUM_VERSION = 1.8.0 +GOLANGCI_VERSION = 1.45.2 # Add the ability to override some variables # Use with care diff --git a/vendor/github.com/spf13/viper/README.md b/vendor/github.com/spf13/viper/README.md index f409b1519..c14e8927a 100644 --- a/vendor/github.com/spf13/viper/README.md +++ b/vendor/github.com/spf13/viper/README.md @@ -11,7 +11,7 @@ [![GitHub Workflow Status](https://img.shields.io/github/workflow/status/spf13/viper/CI?style=flat-square)](https://github.com/spf13/viper/actions?query=workflow%3ACI) [![Join the chat at https://gitter.im/spf13/viper](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/spf13/viper?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![Go Report Card](https://goreportcard.com/badge/github.com/spf13/viper?style=flat-square)](https://goreportcard.com/report/github.com/spf13/viper) -![Go Version](https://img.shields.io/badge/go%20version-%3E=1.14-61CFDD.svg?style=flat-square) +![Go Version](https://img.shields.io/badge/go%20version-%3E=1.15-61CFDD.svg?style=flat-square) [![PkgGoDev](https://pkg.go.dev/badge/mod/github.com/spf13/viper)](https://pkg.go.dev/mod/github.com/spf13/viper) **Go configuration with fangs!** @@ -127,11 +127,11 @@ You can handle the specific case where no config file is found like this: ```go if err := viper.ReadInConfig(); err != nil { - if _, ok := err.(viper.ConfigFileNotFoundError); ok { - // Config file not found; ignore error if desired - } else { - // Config file was found but another error was produced - } + if _, ok := err.(viper.ConfigFileNotFoundError); ok { + // Config file not found; ignore error if desired + } else { + // Config file was found but another error was produced + } } // Config file found and successfully parsed @@ -175,10 +175,10 @@ Optionally you can provide a function for Viper to run each time a change occurs **Make sure you add all of the configPaths prior to calling `WatchConfig()`** ```go -viper.WatchConfig() viper.OnConfigChange(func(e fsnotify.Event) { fmt.Println("Config file changed:", e.Name) }) +viper.WatchConfig() ``` ### Reading Config from io.Reader @@ -354,7 +354,7 @@ func main() { i := viper.GetInt("flagname") // retrieve value from viper - ... + // ... } ``` @@ -503,18 +503,18 @@ runtime_viper.Unmarshal(&runtime_conf) // open a goroutine to watch remote changes forever go func(){ for { - time.Sleep(time.Second * 5) // delay after each request - - // currently, only tested with etcd support - err := runtime_viper.WatchRemoteConfig() - if err != nil { - log.Errorf("unable to read remote config: %v", err) - continue - } - - // unmarshal new config into our runtime config struct. you can also use channel - // to implement a signal to notify the system of the changes - runtime_viper.Unmarshal(&runtime_conf) + time.Sleep(time.Second * 5) // delay after each request + + // currently, only tested with etcd support + err := runtime_viper.WatchRemoteConfig() + if err != nil { + log.Errorf("unable to read remote config: %v", err) + continue + } + + // unmarshal new config into our runtime config struct. you can also use channel + // to implement a signal to notify the system of the changes + runtime_viper.Unmarshal(&runtime_conf) } }() ``` @@ -546,7 +546,7 @@ Example: ```go viper.GetString("logfile") // case-insensitive Setting & Getting if viper.GetBool("verbose") { - fmt.Println("verbose enabled") + fmt.Println("verbose enabled") } ``` ### Accessing nested keys @@ -669,7 +669,7 @@ So instead of doing that let's pass a Viper instance to the constructor that rep ```go cache1Config := viper.Sub("cache.cache1") if cache1Config == nil { // Sub returns nil if the key cannot be found - panic("cache configuration not found") + panic("cache configuration not found") } cache1 := NewCache(cache1Config) @@ -681,10 +681,10 @@ Internally, the `NewCache` function can address `max-items` and `item-size` keys ```go func NewCache(v *Viper) *Cache { - return &Cache{ - MaxItems: v.GetInt("max-items"), - ItemSize: v.GetInt("item-size"), - } + return &Cache{ + MaxItems: v.GetInt("max-items"), + ItemSize: v.GetInt("item-size"), + } } ``` @@ -726,18 +726,18 @@ you have to change the delimiter: v := viper.NewWithOptions(viper.KeyDelimiter("::")) v.SetDefault("chart::values", map[string]interface{}{ - "ingress": map[string]interface{}{ - "annotations": map[string]interface{}{ - "traefik.frontend.rule.type": "PathPrefix", - "traefik.ingress.kubernetes.io/ssl-redirect": "true", - }, - }, + "ingress": map[string]interface{}{ + "annotations": map[string]interface{}{ + "traefik.frontend.rule.type": "PathPrefix", + "traefik.ingress.kubernetes.io/ssl-redirect": "true", + }, + }, }) type config struct { Chart struct{ - Values map[string]interface{} - } + Values map[string]interface{} + } } var C config @@ -778,6 +778,15 @@ if err != nil { Viper uses [github.com/mitchellh/mapstructure](https://github.com/mitchellh/mapstructure) under the hood for unmarshaling values which uses `mapstructure` tags by default. +### Decoding custom formats + +A frequently requested feature for Viper is adding more value formats and decoders. +For example, parsing character (dot, comma, semicolon, etc) separated strings into slices. + +This is already available in Viper using mapstructure decode hooks. + +Read more about the details in [this blog post](https://sagikazarmark.hu/blog/decoding-custom-formats-with-viper/). + ### Marshalling to string You may need to marshal all the settings held in viper into a string rather than write them to a file. @@ -785,17 +794,17 @@ You can use your favorite format's marshaller with the config returned by `AllSe ```go import ( - yaml "gopkg.in/yaml.v2" - // ... + yaml "gopkg.in/yaml.v2" + // ... ) func yamlStringSettings() string { - c := viper.AllSettings() - bs, err := yaml.Marshal(c) - if err != nil { - log.Fatalf("unable to marshal config to YAML: %v", err) - } - return string(bs) + c := viper.AllSettings() + bs, err := yaml.Marshal(c) + if err != nil { + log.Fatalf("unable to marshal config to YAML: %v", err) + } + return string(bs) } ``` diff --git a/vendor/github.com/spf13/viper/TROUBLESHOOTING.md b/vendor/github.com/spf13/viper/TROUBLESHOOTING.md index 096277af7..c4e36c686 100644 --- a/vendor/github.com/spf13/viper/TROUBLESHOOTING.md +++ b/vendor/github.com/spf13/viper/TROUBLESHOOTING.md @@ -21,3 +21,12 @@ The solution is easy: switch to using Go Modules. Please refer to the [wiki](https://github.com/golang/go/wiki/Modules) on how to do that. **tl;dr* `export GO111MODULE=on` + +## Unquoted 'y' and 'n' characters get replaced with _true_ and _false_ when reading a YAML file + +This is a YAML 1.1 feature according to [go-yaml/yaml#740](https://github.com/go-yaml/yaml/issues/740). + +Potential solutions are: + +1. Quoting values resolved as boolean +1. Upgrading to YAML v3 (for the time being this is possible by passing the `viper_yaml3` tag to your build) diff --git a/vendor/github.com/spf13/viper/experimental_logger.go b/vendor/github.com/spf13/viper/experimental_logger.go new file mode 100644 index 000000000..206dad6a0 --- /dev/null +++ b/vendor/github.com/spf13/viper/experimental_logger.go @@ -0,0 +1,11 @@ +//go:build viper_logger +// +build viper_logger + +package viper + +// WithLogger sets a custom logger. +func WithLogger(l Logger) Option { + return optionFunc(func(v *Viper) { + v.logger = l + }) +} diff --git a/vendor/github.com/spf13/viper/fs.go b/vendor/github.com/spf13/viper/fs.go new file mode 100644 index 000000000..ecb1769e5 --- /dev/null +++ b/vendor/github.com/spf13/viper/fs.go @@ -0,0 +1,65 @@ +//go:build go1.16 && finder +// +build go1.16,finder + +package viper + +import ( + "errors" + "io/fs" + "path" +) + +type finder struct { + paths []string + fileNames []string + extensions []string + + withoutExtension bool +} + +func (f finder) Find(fsys fs.FS) (string, error) { + for _, searchPath := range f.paths { + for _, fileName := range f.fileNames { + for _, extension := range f.extensions { + filePath := path.Join(searchPath, fileName+"."+extension) + + ok, err := fileExists(fsys, filePath) + if err != nil { + return "", err + } + + if ok { + return filePath, nil + } + } + + if f.withoutExtension { + filePath := path.Join(searchPath, fileName) + + ok, err := fileExists(fsys, filePath) + if err != nil { + return "", err + } + + if ok { + return filePath, nil + } + } + } + } + + return "", nil +} + +func fileExists(fsys fs.FS, filePath string) (bool, error) { + fileInfo, err := fs.Stat(fsys, filePath) + if err == nil { + return !fileInfo.IsDir(), nil + } + + if errors.Is(err, fs.ErrNotExist) { + return false, nil + } + + return false, err +} diff --git a/vendor/github.com/spf13/viper/go.mod b/vendor/github.com/spf13/viper/go.mod deleted file mode 100644 index 145e0a100..000000000 --- a/vendor/github.com/spf13/viper/go.mod +++ /dev/null @@ -1,21 +0,0 @@ -module github.com/spf13/viper - -go 1.12 - -require ( - github.com/bketelsen/crypt v0.0.4 - github.com/fsnotify/fsnotify v1.4.9 - github.com/hashicorp/hcl v1.0.0 - github.com/magiconair/properties v1.8.5 - github.com/mitchellh/mapstructure v1.4.1 - github.com/pelletier/go-toml v1.9.3 - github.com/smartystreets/goconvey v1.6.4 // indirect - github.com/spf13/afero v1.6.0 - github.com/spf13/cast v1.3.1 - github.com/spf13/jwalterweatherman v1.1.0 - github.com/spf13/pflag v1.0.5 - github.com/stretchr/testify v1.7.0 - github.com/subosito/gotenv v1.2.0 - gopkg.in/ini.v1 v1.62.0 - gopkg.in/yaml.v2 v2.4.0 -) diff --git a/vendor/github.com/spf13/viper/go.sum b/vendor/github.com/spf13/viper/go.sum deleted file mode 100644 index 27730e2aa..000000000 --- a/vendor/github.com/spf13/viper/go.sum +++ /dev/null @@ -1,632 +0,0 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= -cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= -cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= -cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= -cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= -cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= -cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= -cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= -cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= -cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= -cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= -cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= -cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= -cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= -cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= -cloud.google.com/go v0.81.0 h1:at8Tk2zUz63cLPR0JPWm5vp77pEZmzxEQBEfRKn1VV8= -cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= -cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= -cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= -cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= -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/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 h1:9x7Bx0A9R5/M9jibeJeZWqjeVEIxYW9fZYqB9a70/bY= -cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= -cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= -cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= -cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= -cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= -cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= -cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= -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= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= -github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da h1:8GUt8eRujhVEGZFFEjBj46YV4rDjvGrNxb0KMWYkL2I= -github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= -github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bketelsen/crypt v0.0.4 h1:w/jqZtC9YD4DS/Vp9GhWfWcCpuAL58oTnLoI8vE9YHU= -github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= -github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= -github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e h1:1r7pUrabqp18hOBcwBwiTsbnFeTZHV9eER/QT5JVZxY= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= -github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= -github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gax-go/v2 v2.0.5 h1:sjZBwGj9Jlw33ImPtvFviGYvseOtDM7hkSKB7+Tv3SM= -github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/hashicorp/consul/api v1.1.0 h1:BNQPM9ytxj6jbjjdRPioQ94T6YXriSopn0i8COv6SRA= -github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= -github.com/hashicorp/consul/sdk v0.1.1 h1:LnuDWGNsoajlhGyHJvuWW6FVqRl8JOTPqS6CPTsYjhY= -github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= -github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= -github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-cleanhttp v0.5.1 h1:dH3aiDG9Jvb5r5+bYHsikaOUIpcM0xvgMXVoDkXMzJM= -github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-immutable-radix v1.0.0 h1:AKDB1HM5PWEA7i4nhcpwOrO2byshxBjXVn/J/3+z5/0= -github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-msgpack v0.5.3 h1:zKjpN5BK/P5lMYrLmBHdBULWbJ0XpYR+7NGzqkZzoD4= -github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= -github.com/hashicorp/go-multierror v1.0.0 h1:iVjPR7a6H0tWELX5NxNe7bYopibicUzc7uPribsnS6o= -github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-rootcerts v1.0.0 h1:Rqb66Oo1X/eSV1x66xbDccZjhJigjg0+e82kpwzSwCI= -github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= -github.com/hashicorp/go-sockaddr v1.0.0 h1:GeH6tui99pF4NJgfnhp+L6+FfobzVW3Ah46sLo0ICXs= -github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= -github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= -github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE= -github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= -github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= -github.com/hashicorp/memberlist v0.1.3 h1:EmmoJme1matNzb+hMpDuR/0sbJSUisxyqBGG676r31M= -github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= -github.com/hashicorp/serf v0.8.2 h1:YZ7UKsJv+hKjqGVUUbtE3HNj79Eln2oQ75tniF6iPt0= -github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= -github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/json-iterator/go v1.1.11 h1:uVUAXhF2To8cbw/3xN3pxj6kk7TYKs98NIrTqPlMWAQ= -github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jstemmer/go-junit-report v0.9.1 h1:6QPYqodiu3GuPL+7mfx+NwDdp2eTkp9IfEUpgAwUN0o= -github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= -github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -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/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= -github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/magiconair/properties v1.8.5 h1:b6kJs+EmPFMYGkow9GiUyCyOvIwYetYJ3fSaWak/Gls= -github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/miekg/dns v1.0.14 h1:9jZdLNd/P4+SfEJ0TNyxYpsK8N4GtfylBLqtbYN1sbA= -github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= -github.com/mitchellh/go-homedir v1.0.0 h1:vKb8ShqSby24Yrqr/yDYkuFz8d0WUjys40rvnGC8aR0= -github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-testing-interface v1.0.0 h1:fzU/JVNcaqHQEcVFAKeR41fkiLdIPrefOvVG1VZ96U0= -github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= -github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= -github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.4.1 h1:CpVNEelQCZBooIPDn+AR3NpivK/TIKU8bDxdASFVQag= -github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421 h1:ZqeYNhU3OHLH3mGKHDcjJRFFRrJa6eAM5H+CtDdOsPc= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c h1:Lgl0gzECD8GnQ5QCWA8o6BtfL6mDH5rQgM4/fX3avOs= -github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pelletier/go-toml v1.9.3 h1:zeC5b1GviRUyKYd6OJPvBU/mcVDVoL1OhT17FCt5dSQ= -github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I= -github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= -github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/spf13/afero v1.6.0 h1:xoax2sJ2DT8S8xA2paPFjDCScCNeWsg75VG0DLRreiY= -github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= -github.com/spf13/cast v1.3.1 h1:nFm6S0SMdyzrzcmThSipiEubIDy8WEXKNZ0UOgiRpng= -github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= -github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= -github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= -github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= -github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= -github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -go.etcd.io/etcd/api/v3 v3.5.0 h1:GsV3S+OfZEOCNXdtNkBSR7kgLobAa/SO6tCxRa0GAYw= -go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= -go.etcd.io/etcd/client/pkg/v3 v3.5.0 h1:2aQv6F436YnN7I4VbI8PPYrBhu+SmrTaADcf8Mi/6PU= -go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= -go.etcd.io/etcd/client/v2 v2.305.0 h1:ftQ0nOOHMcbMS3KIaDQ0g5Qcd6bhaBrQT6b89DfwLTs= -go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= -go.opencensus.io v0.23.0 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M= -go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= -golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= -golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= -golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= -golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/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= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= -golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 h1:VLliZ0d+/avPrXXH+OakdXhpJuEoBZuwh1m2j7U6Iug= -golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= -golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -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.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.2 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4 h1:4nGaVu0QrbjT/AK2PRLuQfQuh6DJve+pELhqTdAj3x0= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602 h1:0Ja1LBD+yisY6RWM/BH7TJVXWsSjs2VwBSmvSX4HdBc= -golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -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= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/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-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/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-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/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-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007 h1:gG67DSER+11cZvqIMb8S8bt0vZtiN6xWYARwirrOSfE= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.5 h1:i6eZZ+zk0SOf0xgBpEpPD18qWcJda6q1sxt3S0kzyUQ= -golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= -golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/tools v0.1.2 h1:kRBLX7v7Af8W7Gdbbc908OJcdgtK8bOz9Uaj8/F1ACA= -golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -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= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= -google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= -google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= -google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= -google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= -google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= -google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= -google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= -google.golang.org/api v0.44.0 h1:URs6qR1lAxDsqWITsQXI4ZkGiYJ5dHtRNiCpfs2OeKA= -google.golang.org/api v0.44.0/go.mod h1:EBOGZqzyhtvMDoxwS97ctnh0zUmYY6CxqXsc1AvkYD8= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= -google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= -google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= -google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c h1:wtujag7C+4D6KMoulW9YauvK2lgdvCMS260jsqqBXr0= -google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= -google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= -google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.38.0 h1:/9BgsAsa5nWe26HqOlvlgJnqBuktYOLCgjCPqsa56W0= -google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -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= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/ini.v1 v1.62.0 h1:duBzk771uxoUuOlyRLkHsygud9+5lrlGjdFBb4mSKDU= -gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= -rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/vendor/github.com/spf13/viper/internal/encoding/decoder.go b/vendor/github.com/spf13/viper/internal/encoding/decoder.go new file mode 100644 index 000000000..f472e9ff1 --- /dev/null +++ b/vendor/github.com/spf13/viper/internal/encoding/decoder.go @@ -0,0 +1,61 @@ +package encoding + +import ( + "sync" +) + +// Decoder decodes the contents of b into v. +// It's primarily used for decoding contents of a file into a map[string]interface{}. +type Decoder interface { + Decode(b []byte, v map[string]interface{}) error +} + +const ( + // ErrDecoderNotFound is returned when there is no decoder registered for a format. + ErrDecoderNotFound = encodingError("decoder not found for this format") + + // ErrDecoderFormatAlreadyRegistered is returned when an decoder is already registered for a format. + ErrDecoderFormatAlreadyRegistered = encodingError("decoder already registered for this format") +) + +// DecoderRegistry can choose an appropriate Decoder based on the provided format. +type DecoderRegistry struct { + decoders map[string]Decoder + + mu sync.RWMutex +} + +// NewDecoderRegistry returns a new, initialized DecoderRegistry. +func NewDecoderRegistry() *DecoderRegistry { + return &DecoderRegistry{ + decoders: make(map[string]Decoder), + } +} + +// RegisterDecoder registers a Decoder for a format. +// Registering a Decoder for an already existing format is not supported. +func (e *DecoderRegistry) RegisterDecoder(format string, enc Decoder) error { + e.mu.Lock() + defer e.mu.Unlock() + + if _, ok := e.decoders[format]; ok { + return ErrDecoderFormatAlreadyRegistered + } + + e.decoders[format] = enc + + return nil +} + +// Decode calls the underlying Decoder based on the format. +func (e *DecoderRegistry) Decode(format string, b []byte, v map[string]interface{}) error { + e.mu.RLock() + decoder, ok := e.decoders[format] + e.mu.RUnlock() + + if !ok { + return ErrDecoderNotFound + } + + return decoder.Decode(b, v) +} diff --git a/vendor/github.com/spf13/viper/internal/encoding/dotenv/codec.go b/vendor/github.com/spf13/viper/internal/encoding/dotenv/codec.go new file mode 100644 index 000000000..4485063b6 --- /dev/null +++ b/vendor/github.com/spf13/viper/internal/encoding/dotenv/codec.go @@ -0,0 +1,61 @@ +package dotenv + +import ( + "bytes" + "fmt" + "sort" + "strings" + + "github.com/subosito/gotenv" +) + +const keyDelimiter = "_" + +// Codec implements the encoding.Encoder and encoding.Decoder interfaces for encoding data containing environment variables +// (commonly called as dotenv format). +type Codec struct{} + +func (Codec) Encode(v map[string]interface{}) ([]byte, error) { + flattened := map[string]interface{}{} + + flattened = flattenAndMergeMap(flattened, v, "", keyDelimiter) + + keys := make([]string, 0, len(flattened)) + + for key := range flattened { + keys = append(keys, key) + } + + sort.Strings(keys) + + var buf bytes.Buffer + + for _, key := range keys { + _, err := buf.WriteString(fmt.Sprintf("%v=%v\n", strings.ToUpper(key), flattened[key])) + if err != nil { + return nil, err + } + } + + return buf.Bytes(), nil +} + +func (Codec) Decode(b []byte, v map[string]interface{}) error { + var buf bytes.Buffer + + _, err := buf.Write(b) + if err != nil { + return err + } + + env, err := gotenv.StrictParse(&buf) + if err != nil { + return err + } + + for key, value := range env { + v[key] = value + } + + return nil +} diff --git a/vendor/github.com/spf13/viper/internal/encoding/dotenv/map_utils.go b/vendor/github.com/spf13/viper/internal/encoding/dotenv/map_utils.go new file mode 100644 index 000000000..ce6e6efa3 --- /dev/null +++ b/vendor/github.com/spf13/viper/internal/encoding/dotenv/map_utils.go @@ -0,0 +1,41 @@ +package dotenv + +import ( + "strings" + + "github.com/spf13/cast" +) + +// flattenAndMergeMap recursively flattens the given map into a new map +// Code is based on the function with the same name in tha main package. +// TODO: move it to a common place +func flattenAndMergeMap(shadow map[string]interface{}, m map[string]interface{}, prefix string, delimiter string) map[string]interface{} { + if shadow != nil && prefix != "" && shadow[prefix] != nil { + // prefix is shadowed => nothing more to flatten + return shadow + } + if shadow == nil { + shadow = make(map[string]interface{}) + } + + var m2 map[string]interface{} + if prefix != "" { + prefix += delimiter + } + for k, val := range m { + fullKey := prefix + k + switch val.(type) { + case map[string]interface{}: + m2 = val.(map[string]interface{}) + case map[interface{}]interface{}: + m2 = cast.ToStringMap(val) + default: + // immediate value + shadow[strings.ToLower(fullKey)] = val + continue + } + // recursively merge to shadow map + shadow = flattenAndMergeMap(shadow, m2, fullKey, delimiter) + } + return shadow +} diff --git a/vendor/github.com/spf13/viper/internal/encoding/encoder.go b/vendor/github.com/spf13/viper/internal/encoding/encoder.go new file mode 100644 index 000000000..2341bf235 --- /dev/null +++ b/vendor/github.com/spf13/viper/internal/encoding/encoder.go @@ -0,0 +1,60 @@ +package encoding + +import ( + "sync" +) + +// Encoder encodes the contents of v into a byte representation. +// It's primarily used for encoding a map[string]interface{} into a file format. +type Encoder interface { + Encode(v map[string]interface{}) ([]byte, error) +} + +const ( + // ErrEncoderNotFound is returned when there is no encoder registered for a format. + ErrEncoderNotFound = encodingError("encoder not found for this format") + + // ErrEncoderFormatAlreadyRegistered is returned when an encoder is already registered for a format. + ErrEncoderFormatAlreadyRegistered = encodingError("encoder already registered for this format") +) + +// EncoderRegistry can choose an appropriate Encoder based on the provided format. +type EncoderRegistry struct { + encoders map[string]Encoder + + mu sync.RWMutex +} + +// NewEncoderRegistry returns a new, initialized EncoderRegistry. +func NewEncoderRegistry() *EncoderRegistry { + return &EncoderRegistry{ + encoders: make(map[string]Encoder), + } +} + +// RegisterEncoder registers an Encoder for a format. +// Registering a Encoder for an already existing format is not supported. +func (e *EncoderRegistry) RegisterEncoder(format string, enc Encoder) error { + e.mu.Lock() + defer e.mu.Unlock() + + if _, ok := e.encoders[format]; ok { + return ErrEncoderFormatAlreadyRegistered + } + + e.encoders[format] = enc + + return nil +} + +func (e *EncoderRegistry) Encode(format string, v map[string]interface{}) ([]byte, error) { + e.mu.RLock() + encoder, ok := e.encoders[format] + e.mu.RUnlock() + + if !ok { + return nil, ErrEncoderNotFound + } + + return encoder.Encode(v) +} diff --git a/vendor/github.com/spf13/viper/internal/encoding/error.go b/vendor/github.com/spf13/viper/internal/encoding/error.go new file mode 100644 index 000000000..e4cde02d7 --- /dev/null +++ b/vendor/github.com/spf13/viper/internal/encoding/error.go @@ -0,0 +1,7 @@ +package encoding + +type encodingError string + +func (e encodingError) Error() string { + return string(e) +} diff --git a/vendor/github.com/spf13/viper/internal/encoding/hcl/codec.go b/vendor/github.com/spf13/viper/internal/encoding/hcl/codec.go new file mode 100644 index 000000000..7fde8e4bc --- /dev/null +++ b/vendor/github.com/spf13/viper/internal/encoding/hcl/codec.go @@ -0,0 +1,40 @@ +package hcl + +import ( + "bytes" + "encoding/json" + + "github.com/hashicorp/hcl" + "github.com/hashicorp/hcl/hcl/printer" +) + +// Codec implements the encoding.Encoder and encoding.Decoder interfaces for HCL encoding. +// TODO: add printer config to the codec? +type Codec struct{} + +func (Codec) Encode(v map[string]interface{}) ([]byte, error) { + b, err := json.Marshal(v) + if err != nil { + return nil, err + } + + // TODO: use printer.Format? Is the trailing newline an issue? + + ast, err := hcl.Parse(string(b)) + if err != nil { + return nil, err + } + + var buf bytes.Buffer + + err = printer.Fprint(&buf, ast.Node) + if err != nil { + return nil, err + } + + return buf.Bytes(), nil +} + +func (Codec) Decode(b []byte, v map[string]interface{}) error { + return hcl.Unmarshal(b, &v) +} diff --git a/vendor/github.com/spf13/viper/internal/encoding/ini/codec.go b/vendor/github.com/spf13/viper/internal/encoding/ini/codec.go new file mode 100644 index 000000000..9acd87fc3 --- /dev/null +++ b/vendor/github.com/spf13/viper/internal/encoding/ini/codec.go @@ -0,0 +1,99 @@ +package ini + +import ( + "bytes" + "sort" + "strings" + + "github.com/spf13/cast" + "gopkg.in/ini.v1" +) + +// LoadOptions contains all customized options used for load data source(s). +// This type is added here for convenience: this way consumers can import a single package called "ini". +type LoadOptions = ini.LoadOptions + +// Codec implements the encoding.Encoder and encoding.Decoder interfaces for INI encoding. +type Codec struct { + KeyDelimiter string + LoadOptions LoadOptions +} + +func (c Codec) Encode(v map[string]interface{}) ([]byte, error) { + cfg := ini.Empty() + ini.PrettyFormat = false + + flattened := map[string]interface{}{} + + flattened = flattenAndMergeMap(flattened, v, "", c.keyDelimiter()) + + keys := make([]string, 0, len(flattened)) + + for key := range flattened { + keys = append(keys, key) + } + + sort.Strings(keys) + + for _, key := range keys { + sectionName, keyName := "", key + + lastSep := strings.LastIndex(key, ".") + if lastSep != -1 { + sectionName = key[:(lastSep)] + keyName = key[(lastSep + 1):] + } + + // TODO: is this a good idea? + if sectionName == "default" { + sectionName = "" + } + + cfg.Section(sectionName).Key(keyName).SetValue(cast.ToString(flattened[key])) + } + + var buf bytes.Buffer + + _, err := cfg.WriteTo(&buf) + if err != nil { + return nil, err + } + + return buf.Bytes(), nil +} + +func (c Codec) Decode(b []byte, v map[string]interface{}) error { + cfg := ini.Empty(c.LoadOptions) + + err := cfg.Append(b) + if err != nil { + return err + } + + sections := cfg.Sections() + + for i := 0; i < len(sections); i++ { + section := sections[i] + keys := section.Keys() + + for j := 0; j < len(keys); j++ { + key := keys[j] + value := cfg.Section(section.Name()).Key(key.Name()).String() + + deepestMap := deepSearch(v, strings.Split(section.Name(), c.keyDelimiter())) + + // set innermost value + deepestMap[key.Name()] = value + } + } + + return nil +} + +func (c Codec) keyDelimiter() string { + if c.KeyDelimiter == "" { + return "." + } + + return c.KeyDelimiter +} diff --git a/vendor/github.com/spf13/viper/internal/encoding/ini/map_utils.go b/vendor/github.com/spf13/viper/internal/encoding/ini/map_utils.go new file mode 100644 index 000000000..8329856b5 --- /dev/null +++ b/vendor/github.com/spf13/viper/internal/encoding/ini/map_utils.go @@ -0,0 +1,74 @@ +package ini + +import ( + "strings" + + "github.com/spf13/cast" +) + +// THIS CODE IS COPIED HERE: IT SHOULD NOT BE MODIFIED +// AT SOME POINT IT WILL BE MOVED TO A COMMON PLACE +// deepSearch scans deep maps, following the key indexes listed in the +// sequence "path". +// The last value is expected to be another map, and is returned. +// +// In case intermediate keys do not exist, or map to a non-map value, +// a new map is created and inserted, and the search continues from there: +// the initial map "m" may be modified! +func deepSearch(m map[string]interface{}, path []string) map[string]interface{} { + for _, k := range path { + m2, ok := m[k] + if !ok { + // intermediate key does not exist + // => create it and continue from there + m3 := make(map[string]interface{}) + m[k] = m3 + m = m3 + continue + } + m3, ok := m2.(map[string]interface{}) + if !ok { + // intermediate key is a value + // => replace with a new map + m3 = make(map[string]interface{}) + m[k] = m3 + } + // continue search from here + m = m3 + } + return m +} + +// flattenAndMergeMap recursively flattens the given map into a new map +// Code is based on the function with the same name in tha main package. +// TODO: move it to a common place +func flattenAndMergeMap(shadow map[string]interface{}, m map[string]interface{}, prefix string, delimiter string) map[string]interface{} { + if shadow != nil && prefix != "" && shadow[prefix] != nil { + // prefix is shadowed => nothing more to flatten + return shadow + } + if shadow == nil { + shadow = make(map[string]interface{}) + } + + var m2 map[string]interface{} + if prefix != "" { + prefix += delimiter + } + for k, val := range m { + fullKey := prefix + k + switch val.(type) { + case map[string]interface{}: + m2 = val.(map[string]interface{}) + case map[interface{}]interface{}: + m2 = cast.ToStringMap(val) + default: + // immediate value + shadow[strings.ToLower(fullKey)] = val + continue + } + // recursively merge to shadow map + shadow = flattenAndMergeMap(shadow, m2, fullKey, delimiter) + } + return shadow +} diff --git a/vendor/github.com/spf13/viper/internal/encoding/javaproperties/codec.go b/vendor/github.com/spf13/viper/internal/encoding/javaproperties/codec.go new file mode 100644 index 000000000..b8a2251c1 --- /dev/null +++ b/vendor/github.com/spf13/viper/internal/encoding/javaproperties/codec.go @@ -0,0 +1,86 @@ +package javaproperties + +import ( + "bytes" + "sort" + "strings" + + "github.com/magiconair/properties" + "github.com/spf13/cast" +) + +// Codec implements the encoding.Encoder and encoding.Decoder interfaces for Java properties encoding. +type Codec struct { + KeyDelimiter string + + // Store read properties on the object so that we can write back in order with comments. + // This will only be used if the configuration read is a properties file. + // TODO: drop this feature in v2 + // TODO: make use of the global properties object optional + Properties *properties.Properties +} + +func (c *Codec) Encode(v map[string]interface{}) ([]byte, error) { + if c.Properties == nil { + c.Properties = properties.NewProperties() + } + + flattened := map[string]interface{}{} + + flattened = flattenAndMergeMap(flattened, v, "", c.keyDelimiter()) + + keys := make([]string, 0, len(flattened)) + + for key := range flattened { + keys = append(keys, key) + } + + sort.Strings(keys) + + for _, key := range keys { + _, _, err := c.Properties.Set(key, cast.ToString(flattened[key])) + if err != nil { + return nil, err + } + } + + var buf bytes.Buffer + + _, err := c.Properties.WriteComment(&buf, "#", properties.UTF8) + if err != nil { + return nil, err + } + + return buf.Bytes(), nil +} + +func (c *Codec) Decode(b []byte, v map[string]interface{}) error { + var err error + c.Properties, err = properties.Load(b, properties.UTF8) + if err != nil { + return err + } + + for _, key := range c.Properties.Keys() { + // ignore existence check: we know it's there + value, _ := c.Properties.Get(key) + + // recursively build nested maps + path := strings.Split(key, c.keyDelimiter()) + lastKey := strings.ToLower(path[len(path)-1]) + deepestMap := deepSearch(v, path[0:len(path)-1]) + + // set innermost value + deepestMap[lastKey] = value + } + + return nil +} + +func (c Codec) keyDelimiter() string { + if c.KeyDelimiter == "" { + return "." + } + + return c.KeyDelimiter +} diff --git a/vendor/github.com/spf13/viper/internal/encoding/javaproperties/map_utils.go b/vendor/github.com/spf13/viper/internal/encoding/javaproperties/map_utils.go new file mode 100644 index 000000000..93755cac1 --- /dev/null +++ b/vendor/github.com/spf13/viper/internal/encoding/javaproperties/map_utils.go @@ -0,0 +1,74 @@ +package javaproperties + +import ( + "strings" + + "github.com/spf13/cast" +) + +// THIS CODE IS COPIED HERE: IT SHOULD NOT BE MODIFIED +// AT SOME POINT IT WILL BE MOVED TO A COMMON PLACE +// deepSearch scans deep maps, following the key indexes listed in the +// sequence "path". +// The last value is expected to be another map, and is returned. +// +// In case intermediate keys do not exist, or map to a non-map value, +// a new map is created and inserted, and the search continues from there: +// the initial map "m" may be modified! +func deepSearch(m map[string]interface{}, path []string) map[string]interface{} { + for _, k := range path { + m2, ok := m[k] + if !ok { + // intermediate key does not exist + // => create it and continue from there + m3 := make(map[string]interface{}) + m[k] = m3 + m = m3 + continue + } + m3, ok := m2.(map[string]interface{}) + if !ok { + // intermediate key is a value + // => replace with a new map + m3 = make(map[string]interface{}) + m[k] = m3 + } + // continue search from here + m = m3 + } + return m +} + +// flattenAndMergeMap recursively flattens the given map into a new map +// Code is based on the function with the same name in tha main package. +// TODO: move it to a common place +func flattenAndMergeMap(shadow map[string]interface{}, m map[string]interface{}, prefix string, delimiter string) map[string]interface{} { + if shadow != nil && prefix != "" && shadow[prefix] != nil { + // prefix is shadowed => nothing more to flatten + return shadow + } + if shadow == nil { + shadow = make(map[string]interface{}) + } + + var m2 map[string]interface{} + if prefix != "" { + prefix += delimiter + } + for k, val := range m { + fullKey := prefix + k + switch val.(type) { + case map[string]interface{}: + m2 = val.(map[string]interface{}) + case map[interface{}]interface{}: + m2 = cast.ToStringMap(val) + default: + // immediate value + shadow[strings.ToLower(fullKey)] = val + continue + } + // recursively merge to shadow map + shadow = flattenAndMergeMap(shadow, m2, fullKey, delimiter) + } + return shadow +} diff --git a/vendor/github.com/spf13/viper/internal/encoding/json/codec.go b/vendor/github.com/spf13/viper/internal/encoding/json/codec.go new file mode 100644 index 000000000..1b7caaceb --- /dev/null +++ b/vendor/github.com/spf13/viper/internal/encoding/json/codec.go @@ -0,0 +1,17 @@ +package json + +import ( + "encoding/json" +) + +// Codec implements the encoding.Encoder and encoding.Decoder interfaces for JSON encoding. +type Codec struct{} + +func (Codec) Encode(v map[string]interface{}) ([]byte, error) { + // TODO: expose prefix and indent in the Codec as setting? + return json.MarshalIndent(v, "", " ") +} + +func (Codec) Decode(b []byte, v map[string]interface{}) error { + return json.Unmarshal(b, &v) +} diff --git a/vendor/github.com/spf13/viper/internal/encoding/toml/codec.go b/vendor/github.com/spf13/viper/internal/encoding/toml/codec.go new file mode 100644 index 000000000..ff1112cac --- /dev/null +++ b/vendor/github.com/spf13/viper/internal/encoding/toml/codec.go @@ -0,0 +1,39 @@ +//go:build !viper_toml2 +// +build !viper_toml2 + +package toml + +import ( + "github.com/pelletier/go-toml" +) + +// Codec implements the encoding.Encoder and encoding.Decoder interfaces for TOML encoding. +type Codec struct{} + +func (Codec) Encode(v map[string]interface{}) ([]byte, error) { + t, err := toml.TreeFromMap(v) + if err != nil { + return nil, err + } + + s, err := t.ToTomlString() + if err != nil { + return nil, err + } + + return []byte(s), nil +} + +func (Codec) Decode(b []byte, v map[string]interface{}) error { + tree, err := toml.LoadBytes(b) + if err != nil { + return err + } + + tmap := tree.ToMap() + for key, value := range tmap { + v[key] = value + } + + return nil +} diff --git a/vendor/github.com/spf13/viper/internal/encoding/toml/codec2.go b/vendor/github.com/spf13/viper/internal/encoding/toml/codec2.go new file mode 100644 index 000000000..566b70628 --- /dev/null +++ b/vendor/github.com/spf13/viper/internal/encoding/toml/codec2.go @@ -0,0 +1,19 @@ +//go:build viper_toml2 +// +build viper_toml2 + +package toml + +import ( + "github.com/pelletier/go-toml/v2" +) + +// Codec implements the encoding.Encoder and encoding.Decoder interfaces for TOML encoding. +type Codec struct{} + +func (Codec) Encode(v map[string]interface{}) ([]byte, error) { + return toml.Marshal(v) +} + +func (Codec) Decode(b []byte, v map[string]interface{}) error { + return toml.Unmarshal(b, &v) +} diff --git a/vendor/github.com/spf13/viper/internal/encoding/yaml/codec.go b/vendor/github.com/spf13/viper/internal/encoding/yaml/codec.go new file mode 100644 index 000000000..24cc19dfc --- /dev/null +++ b/vendor/github.com/spf13/viper/internal/encoding/yaml/codec.go @@ -0,0 +1,14 @@ +package yaml + +// import "gopkg.in/yaml.v2" + +// Codec implements the encoding.Encoder and encoding.Decoder interfaces for YAML encoding. +type Codec struct{} + +func (Codec) Encode(v map[string]interface{}) ([]byte, error) { + return yaml.Marshal(v) +} + +func (Codec) Decode(b []byte, v map[string]interface{}) error { + return yaml.Unmarshal(b, &v) +} diff --git a/vendor/github.com/spf13/viper/internal/encoding/yaml/yaml2.go b/vendor/github.com/spf13/viper/internal/encoding/yaml/yaml2.go new file mode 100644 index 000000000..ca29b84db --- /dev/null +++ b/vendor/github.com/spf13/viper/internal/encoding/yaml/yaml2.go @@ -0,0 +1,14 @@ +//go:build !viper_yaml3 +// +build !viper_yaml3 + +package yaml + +import yamlv2 "gopkg.in/yaml.v2" + +var yaml = struct { + Marshal func(in interface{}) (out []byte, err error) + Unmarshal func(in []byte, out interface{}) (err error) +}{ + Marshal: yamlv2.Marshal, + Unmarshal: yamlv2.Unmarshal, +} diff --git a/vendor/github.com/spf13/viper/internal/encoding/yaml/yaml3.go b/vendor/github.com/spf13/viper/internal/encoding/yaml/yaml3.go new file mode 100644 index 000000000..96b8957fa --- /dev/null +++ b/vendor/github.com/spf13/viper/internal/encoding/yaml/yaml3.go @@ -0,0 +1,14 @@ +//go:build viper_yaml3 +// +build viper_yaml3 + +package yaml + +import yamlv3 "gopkg.in/yaml.v3" + +var yaml = struct { + Marshal func(in interface{}) (out []byte, err error) + Unmarshal func(in []byte, out interface{}) (err error) +}{ + Marshal: yamlv3.Marshal, + Unmarshal: yamlv3.Unmarshal, +} diff --git a/vendor/github.com/spf13/viper/logger.go b/vendor/github.com/spf13/viper/logger.go new file mode 100644 index 000000000..0115067ae --- /dev/null +++ b/vendor/github.com/spf13/viper/logger.go @@ -0,0 +1,77 @@ +package viper + +import ( + "fmt" + + jww "github.com/spf13/jwalterweatherman" +) + +// Logger is a unified interface for various logging use cases and practices, including: +// - leveled logging +// - structured logging +type Logger interface { + // Trace logs a Trace event. + // + // Even more fine-grained information than Debug events. + // Loggers not supporting this level should fall back to Debug. + Trace(msg string, keyvals ...interface{}) + + // Debug logs a Debug event. + // + // A verbose series of information events. + // They are useful when debugging the system. + Debug(msg string, keyvals ...interface{}) + + // Info logs an Info event. + // + // General information about what's happening inside the system. + Info(msg string, keyvals ...interface{}) + + // Warn logs a Warn(ing) event. + // + // Non-critical events that should be looked at. + Warn(msg string, keyvals ...interface{}) + + // Error logs an Error event. + // + // Critical events that require immediate attention. + // Loggers commonly provide Fatal and Panic levels above Error level, + // but exiting and panicing is out of scope for a logging library. + Error(msg string, keyvals ...interface{}) +} + +type jwwLogger struct{} + +func (jwwLogger) Trace(msg string, keyvals ...interface{}) { + jww.TRACE.Printf(jwwLogMessage(msg, keyvals...)) +} + +func (jwwLogger) Debug(msg string, keyvals ...interface{}) { + jww.DEBUG.Printf(jwwLogMessage(msg, keyvals...)) +} + +func (jwwLogger) Info(msg string, keyvals ...interface{}) { + jww.INFO.Printf(jwwLogMessage(msg, keyvals...)) +} + +func (jwwLogger) Warn(msg string, keyvals ...interface{}) { + jww.WARN.Printf(jwwLogMessage(msg, keyvals...)) +} + +func (jwwLogger) Error(msg string, keyvals ...interface{}) { + jww.ERROR.Printf(jwwLogMessage(msg, keyvals...)) +} + +func jwwLogMessage(msg string, keyvals ...interface{}) string { + out := msg + + if len(keyvals) > 0 && len(keyvals)%2 == 1 { + keyvals = append(keyvals, nil) + } + + for i := 0; i <= len(keyvals)-2; i += 2 { + out = fmt.Sprintf("%s %v=%v", out, keyvals[i], keyvals[i+1]) + } + + return out +} diff --git a/vendor/github.com/spf13/viper/util.go b/vendor/github.com/spf13/viper/util.go index cee6b2429..ee7a86d9d 100644 --- a/vendor/github.com/spf13/viper/util.go +++ b/vendor/github.com/spf13/viper/util.go @@ -18,9 +18,7 @@ import ( "strings" "unicode" - "github.com/spf13/afero" "github.com/spf13/cast" - jww "github.com/spf13/jwalterweatherman" ) // ConfigParseError denotes failing to parse configuration file. @@ -88,26 +86,14 @@ func insensitiviseMap(m map[string]interface{}) { } } -func absPathify(inPath string) string { - jww.INFO.Println("Trying to resolve absolute path to", inPath) +func absPathify(logger Logger, inPath string) string { + logger.Info("trying to resolve absolute path", "path", inPath) if inPath == "$HOME" || strings.HasPrefix(inPath, "$HOME"+string(os.PathSeparator)) { inPath = userHomeDir() + inPath[5:] } - if strings.HasPrefix(inPath, "$") { - end := strings.Index(inPath, string(os.PathSeparator)) - - var value, suffix string - if end == -1 { - value = os.Getenv(inPath[1:]) - } else { - value = os.Getenv(inPath[1:end]) - suffix = inPath[end:] - } - - inPath = value + suffix - } + inPath = os.ExpandEnv(inPath) if filepath.IsAbs(inPath) { return filepath.Clean(inPath) @@ -118,21 +104,9 @@ func absPathify(inPath string) string { return filepath.Clean(p) } - jww.ERROR.Println("Couldn't discover absolute path") - jww.ERROR.Println(err) - return "" -} + logger.Error(fmt.Errorf("could not discover absolute path: %w", err).Error()) -// Check if file Exists -func exists(fs afero.Fs, path string) (bool, error) { - stat, err := fs.Stat(path) - if err == nil { - return !stat.IsDir(), nil - } - if os.IsNotExist(err) { - return false, nil - } - return false, err + return "" } func stringInSlice(a string, list []string) bool { diff --git a/vendor/github.com/spf13/viper/viper.go b/vendor/github.com/spf13/viper/viper.go index e8c04627b..4a9dac9d4 100644 --- a/vendor/github.com/spf13/viper/viper.go +++ b/vendor/github.com/spf13/viper/viper.go @@ -22,7 +22,6 @@ package viper import ( "bytes" "encoding/csv" - "encoding/json" "errors" "fmt" "io" @@ -36,18 +35,19 @@ import ( "time" "github.com/fsnotify/fsnotify" - "github.com/hashicorp/hcl" - "github.com/hashicorp/hcl/hcl/printer" - "github.com/magiconair/properties" "github.com/mitchellh/mapstructure" - "github.com/pelletier/go-toml" "github.com/spf13/afero" "github.com/spf13/cast" - jww "github.com/spf13/jwalterweatherman" "github.com/spf13/pflag" - "github.com/subosito/gotenv" - "gopkg.in/ini.v1" - "gopkg.in/yaml.v2" + + "github.com/spf13/viper/internal/encoding" + "github.com/spf13/viper/internal/encoding/dotenv" + "github.com/spf13/viper/internal/encoding/hcl" + "github.com/spf13/viper/internal/encoding/ini" + "github.com/spf13/viper/internal/encoding/javaproperties" + "github.com/spf13/viper/internal/encoding/json" + "github.com/spf13/viper/internal/encoding/toml" + "github.com/spf13/viper/internal/encoding/yaml" ) // ConfigMarshalError happens when failing to marshal the configuration. @@ -215,11 +215,13 @@ type Viper struct { aliases map[string]string typeByDefValue bool - // Store read properties on the object so that we can write back in order with comments. - // This will only be used if the configuration read is a properties file. - properties *properties.Properties - onConfigChange func(fsnotify.Event) + + logger Logger + + // TODO: should probably be protected with a mutex + encoderRegistry *encoding.EncoderRegistry + decoderRegistry *encoding.DecoderRegistry } // New returns an initialized Viper instance. @@ -227,7 +229,7 @@ func New() *Viper { v := new(Viper) v.keyDelim = "." v.configName = "config" - v.configPermissions = os.FileMode(0644) + v.configPermissions = os.FileMode(0o644) v.fs = afero.NewOsFs() v.config = make(map[string]interface{}) v.override = make(map[string]interface{}) @@ -237,6 +239,9 @@ func New() *Viper { v.env = make(map[string][]string) v.aliases = make(map[string]string) v.typeByDefValue = false + v.logger = jwwLogger{} + + v.resetEncoding() return v } @@ -284,6 +289,8 @@ func NewWithOptions(opts ...Option) *Viper { opt.apply(v) } + v.resetEncoding() + return v } @@ -292,10 +299,88 @@ func NewWithOptions(opts ...Option) *Viper { // can use it in their testing as well. func Reset() { v = New() - SupportedExts = []string{"json", "toml", "yaml", "yml", "properties", "props", "prop", "hcl", "dotenv", "env", "ini"} + SupportedExts = []string{"json", "toml", "yaml", "yml", "properties", "props", "prop", "hcl", "tfvars", "dotenv", "env", "ini"} SupportedRemoteProviders = []string{"etcd", "consul", "firestore"} } +// TODO: make this lazy initialization instead +func (v *Viper) resetEncoding() { + encoderRegistry := encoding.NewEncoderRegistry() + decoderRegistry := encoding.NewDecoderRegistry() + + { + codec := yaml.Codec{} + + encoderRegistry.RegisterEncoder("yaml", codec) + decoderRegistry.RegisterDecoder("yaml", codec) + + encoderRegistry.RegisterEncoder("yml", codec) + decoderRegistry.RegisterDecoder("yml", codec) + } + + { + codec := json.Codec{} + + encoderRegistry.RegisterEncoder("json", codec) + decoderRegistry.RegisterDecoder("json", codec) + } + + { + codec := toml.Codec{} + + encoderRegistry.RegisterEncoder("toml", codec) + decoderRegistry.RegisterDecoder("toml", codec) + } + + { + codec := hcl.Codec{} + + encoderRegistry.RegisterEncoder("hcl", codec) + decoderRegistry.RegisterDecoder("hcl", codec) + + encoderRegistry.RegisterEncoder("tfvars", codec) + decoderRegistry.RegisterDecoder("tfvars", codec) + } + + { + codec := ini.Codec{ + KeyDelimiter: v.keyDelim, + LoadOptions: v.iniLoadOptions, + } + + encoderRegistry.RegisterEncoder("ini", codec) + decoderRegistry.RegisterDecoder("ini", codec) + } + + { + codec := &javaproperties.Codec{ + KeyDelimiter: v.keyDelim, + } + + encoderRegistry.RegisterEncoder("properties", codec) + decoderRegistry.RegisterDecoder("properties", codec) + + encoderRegistry.RegisterEncoder("props", codec) + decoderRegistry.RegisterDecoder("props", codec) + + encoderRegistry.RegisterEncoder("prop", codec) + decoderRegistry.RegisterDecoder("prop", codec) + } + + { + codec := &dotenv.Codec{} + + encoderRegistry.RegisterEncoder("dotenv", codec) + decoderRegistry.RegisterDecoder("dotenv", codec) + + encoderRegistry.RegisterEncoder("env", codec) + decoderRegistry.RegisterDecoder("env", codec) + } + + v.encoderRegistry = encoderRegistry + v.decoderRegistry = decoderRegistry +} + type defaultRemoteProvider struct { provider string endpoint string @@ -331,7 +416,7 @@ type RemoteProvider interface { } // SupportedExts are universally supported extensions. -var SupportedExts = []string{"json", "toml", "yaml", "yml", "properties", "props", "prop", "hcl", "dotenv", "env", "ini"} +var SupportedExts = []string{"json", "toml", "yaml", "yml", "properties", "props", "prop", "hcl", "tfvars", "dotenv", "env", "ini"} // SupportedRemoteProviders are universally supported remote providers. var SupportedRemoteProviders = []string{"etcd", "consul", "firestore"} @@ -391,7 +476,7 @@ func (v *Viper) WatchConfig() { v.onConfigChange(event) } } else if filepath.Clean(event.Name) == configFile && - event.Op&fsnotify.Remove&fsnotify.Remove != 0 { + event.Op&fsnotify.Remove != 0 { eventsWG.Done() return } @@ -477,8 +562,9 @@ func AddConfigPath(in string) { v.AddConfigPath(in) } func (v *Viper) AddConfigPath(in string) { if in != "" { - absin := absPathify(in) - jww.INFO.Println("adding", absin, "to paths to search") + absin := absPathify(v.logger, in) + + v.logger.Info("adding path to search paths", "path", absin) if !stringInSlice(absin, v.configPaths) { v.configPaths = append(v.configPaths, absin) } @@ -502,7 +588,8 @@ func (v *Viper) AddRemoteProvider(provider, endpoint, path string) error { return UnsupportedRemoteProviderError(provider) } if provider != "" && endpoint != "" { - jww.INFO.Printf("adding %s:%s to remote provider list", provider, endpoint) + v.logger.Info("adding remote provider", "provider", provider, "endpoint", endpoint) + rp := &defaultRemoteProvider{ endpoint: endpoint, provider: provider, @@ -534,7 +621,8 @@ func (v *Viper) AddSecureRemoteProvider(provider, endpoint, path, secretkeyring return UnsupportedRemoteProviderError(provider) } if provider != "" && endpoint != "" { - jww.INFO.Printf("adding %s:%s to remote provider list", provider, endpoint) + v.logger.Info("adding remote provider", "provider", provider, "endpoint", endpoint) + rp := &defaultRemoteProvider{ endpoint: endpoint, provider: provider, @@ -1350,14 +1438,15 @@ func (v *Viper) registerAlias(alias string, key string) { v.aliases[alias] = key } } else { - jww.WARN.Println("Creating circular reference alias", alias, key, v.realKey(key)) + v.logger.Warn("creating circular reference alias", "alias", alias, "key", key, "real_key", v.realKey(key)) } } func (v *Viper) realKey(key string) string { newkey, exists := v.aliases[key] if exists { - jww.DEBUG.Println("Alias", key, "to", newkey) + v.logger.Debug("key is an alias", "alias", key, "to", newkey) + return v.realKey(newkey) } return key @@ -1367,11 +1456,13 @@ func (v *Viper) realKey(key string) string { func InConfig(key string) bool { return v.InConfig(key) } func (v *Viper) InConfig(key string) bool { + lcaseKey := strings.ToLower(key) + // if the requested key is an alias, then return the proper key - key = v.realKey(key) + lcaseKey = v.realKey(lcaseKey) + path := strings.Split(lcaseKey, v.keyDelim) - _, exists := v.config[key] - return exists + return v.searchIndexableWithPathPrefixes(v.config, path) != nil } // SetDefault sets the default value for this key. @@ -1416,7 +1507,7 @@ func (v *Viper) Set(key string, value interface{}) { func ReadInConfig() error { return v.ReadInConfig() } func (v *Viper) ReadInConfig() error { - jww.INFO.Println("Attempting to read in config file") + v.logger.Info("attempting to read in config file") filename, err := v.getConfigFile() if err != nil { return err @@ -1426,7 +1517,7 @@ func (v *Viper) ReadInConfig() error { return UnsupportedConfigError(v.getConfigType()) } - jww.DEBUG.Println("Reading file: ", filename) + v.logger.Debug("reading file", "file", filename) file, err := afero.ReadFile(v.fs, filename) if err != nil { return err @@ -1447,7 +1538,7 @@ func (v *Viper) ReadInConfig() error { func MergeInConfig() error { return v.MergeInConfig() } func (v *Viper) MergeInConfig() error { - jww.INFO.Println("Attempting to merge in config file") + v.logger.Info("attempting to merge in config file") filename, err := v.getConfigFile() if err != nil { return err @@ -1538,11 +1629,12 @@ func (v *Viper) SafeWriteConfigAs(filename string) error { } func (v *Viper) writeConfig(filename string, force bool) error { - jww.INFO.Println("Attempting to write configuration to file.") + v.logger.Info("attempting to write configuration to file") + var configType string ext := filepath.Ext(filename) - if ext != "" { + if ext != "" && ext != filepath.Base(filename) { configType = ext[1:] } else { configType = v.configType @@ -1584,77 +1676,12 @@ func (v *Viper) unmarshalReader(in io.Reader, c map[string]interface{}) error { buf := new(bytes.Buffer) buf.ReadFrom(in) - switch strings.ToLower(v.getConfigType()) { - case "yaml", "yml": - if err := yaml.Unmarshal(buf.Bytes(), &c); err != nil { - return ConfigParseError{err} - } - - case "json": - if err := json.Unmarshal(buf.Bytes(), &c); err != nil { - return ConfigParseError{err} - } - - case "hcl": - obj, err := hcl.Parse(buf.String()) - if err != nil { - return ConfigParseError{err} - } - if err = hcl.DecodeObject(&c, obj); err != nil { - return ConfigParseError{err} - } - - case "toml": - tree, err := toml.LoadReader(buf) - if err != nil { - return ConfigParseError{err} - } - tmap := tree.ToMap() - for k, v := range tmap { - c[k] = v - } - - case "dotenv", "env": - env, err := gotenv.StrictParse(buf) - if err != nil { - return ConfigParseError{err} - } - for k, v := range env { - c[k] = v - } - - case "properties", "props", "prop": - v.properties = properties.NewProperties() - var err error - if v.properties, err = properties.Load(buf.Bytes(), properties.UTF8); err != nil { - return ConfigParseError{err} - } - for _, key := range v.properties.Keys() { - value, _ := v.properties.Get(key) - // recursively build nested maps - path := strings.Split(key, ".") - lastKey := strings.ToLower(path[len(path)-1]) - deepestMap := deepSearch(c, path[0:len(path)-1]) - // set innermost value - deepestMap[lastKey] = value - } - - case "ini": - cfg := ini.Empty(v.iniLoadOptions) - err := cfg.Append(buf.Bytes()) + switch format := strings.ToLower(v.getConfigType()); format { + case "yaml", "yml", "json", "toml", "hcl", "tfvars", "ini", "properties", "props", "prop", "dotenv", "env": + err := v.decoderRegistry.Decode(format, buf.Bytes(), c) if err != nil { return ConfigParseError{err} } - sections := cfg.Sections() - for i := 0; i < len(sections); i++ { - section := sections[i] - keys := section.Keys() - for j := 0; j < len(keys); j++ { - key := keys[j] - value := cfg.Section(section.Name()).Key(key.Name()).String() - c[section.Name()+"."+key.Name()] = value - } - } } insensitiviseMap(c) @@ -1665,92 +1692,16 @@ func (v *Viper) unmarshalReader(in io.Reader, c map[string]interface{}) error { func (v *Viper) marshalWriter(f afero.File, configType string) error { c := v.AllSettings() switch configType { - case "json": - b, err := json.MarshalIndent(c, "", " ") + case "yaml", "yml", "json", "toml", "hcl", "tfvars", "ini", "prop", "props", "properties", "dotenv", "env": + b, err := v.encoderRegistry.Encode(configType, c) if err != nil { return ConfigMarshalError{err} } - _, err = f.WriteString(string(b)) - if err != nil { - return ConfigMarshalError{err} - } - - case "hcl": - b, err := json.Marshal(c) - if err != nil { - return ConfigMarshalError{err} - } - ast, err := hcl.Parse(string(b)) - if err != nil { - return ConfigMarshalError{err} - } - err = printer.Fprint(f, ast.Node) - if err != nil { - return ConfigMarshalError{err} - } - - case "prop", "props", "properties": - if v.properties == nil { - v.properties = properties.NewProperties() - } - p := v.properties - for _, key := range v.AllKeys() { - _, _, err := p.Set(key, v.GetString(key)) - if err != nil { - return ConfigMarshalError{err} - } - } - _, err := p.WriteComment(f, "#", properties.UTF8) - if err != nil { - return ConfigMarshalError{err} - } - - case "dotenv", "env": - lines := []string{} - for _, key := range v.AllKeys() { - envName := strings.ToUpper(strings.Replace(key, ".", "_", -1)) - val := v.Get(key) - lines = append(lines, fmt.Sprintf("%v=%v", envName, val)) - } - s := strings.Join(lines, "\n") - if _, err := f.WriteString(s); err != nil { - return ConfigMarshalError{err} - } - case "toml": - t, err := toml.TreeFromMap(c) - if err != nil { - return ConfigMarshalError{err} - } - s := t.String() - if _, err := f.WriteString(s); err != nil { - return ConfigMarshalError{err} - } - - case "yaml", "yml": - b, err := yaml.Marshal(c) + _, err = f.WriteString(string(b)) if err != nil { return ConfigMarshalError{err} } - if _, err = f.WriteString(string(b)); err != nil { - return ConfigMarshalError{err} - } - - case "ini": - keys := v.AllKeys() - cfg := ini.Empty() - ini.PrettyFormat = false - for i := 0; i < len(keys); i++ { - key := keys[i] - lastSep := strings.LastIndex(key, ".") - sectionName := key[:(lastSep)] - keyName := key[(lastSep + 1):] - if sectionName == "default" { - sectionName = "" - } - cfg.Section(sectionName).Key(keyName).SetValue(v.GetString(key)) - } - cfg.WriteTo(f) } return nil } @@ -1767,7 +1718,8 @@ func keyExists(k string, m map[string]interface{}) string { } func castToMapStringInterface( - src map[interface{}]interface{}) map[string]interface{} { + src map[interface{}]interface{}, +) map[string]interface{} { tgt := map[string]interface{}{} for k, v := range src { tgt[fmt.Sprintf("%v", k)] = v @@ -1805,11 +1757,12 @@ func castMapFlagToMapInterface(src map[string]FlagValue) map[string]interface{} // deep. Both map types are supported as there is a go-yaml fork that uses // `map[string]interface{}` instead. func mergeMaps( - src, tgt map[string]interface{}, itgt map[interface{}]interface{}) { + src, tgt map[string]interface{}, itgt map[interface{}]interface{}, +) { for sk, sv := range src { tk := keyExists(sk, tgt) if tk == "" { - jww.TRACE.Printf("tk=\"\", tgt[%s]=%v", sk, sv) + v.logger.Trace("", "tk", "\"\"", fmt.Sprintf("tgt[%s]", sk), sv) tgt[sk] = sv if itgt != nil { itgt[sk] = sv @@ -1819,7 +1772,7 @@ func mergeMaps( tv, ok := tgt[tk] if !ok { - jww.TRACE.Printf("tgt[%s] != ok, tgt[%s]=%v", tk, sk, sv) + v.logger.Trace("", fmt.Sprintf("ok[%s]", tk), false, fmt.Sprintf("tgt[%s]", sk), sv) tgt[sk] = sv if itgt != nil { itgt[sk] = sv @@ -1829,28 +1782,42 @@ func mergeMaps( svType := reflect.TypeOf(sv) tvType := reflect.TypeOf(tv) - if tvType != nil && svType != tvType { // Allow for the target to be nil - jww.ERROR.Printf( - "svType != tvType; key=%s, st=%v, tt=%v, sv=%v, tv=%v", - sk, svType, tvType, sv, tv) - continue - } - jww.TRACE.Printf("processing key=%s, st=%v, tt=%v, sv=%v, tv=%v", - sk, svType, tvType, sv, tv) + v.logger.Trace( + "processing", + "key", sk, + "st", svType, + "tt", tvType, + "sv", sv, + "tv", tv, + ) switch ttv := tv.(type) { case map[interface{}]interface{}: - jww.TRACE.Printf("merging maps (must convert)") - tsv := sv.(map[interface{}]interface{}) + v.logger.Trace("merging maps (must convert)") + tsv, ok := sv.(map[interface{}]interface{}) + if !ok { + v.logger.Error( + "Could not cast sv to map[interface{}]interface{}; key=%s, st=%v, tt=%v, sv=%v, tv=%v", + sk, svType, tvType, sv, tv) + continue + } + ssv := castToMapStringInterface(tsv) stv := castToMapStringInterface(ttv) mergeMaps(ssv, stv, ttv) case map[string]interface{}: - jww.TRACE.Printf("merging maps") - mergeMaps(sv.(map[string]interface{}), ttv, nil) + v.logger.Trace("merging maps") + tsv, ok := sv.(map[string]interface{}) + if !ok { + v.logger.Error( + "Could not cast sv to map[string]interface{}; key=%s, st=%v, tt=%v, sv=%v, tv=%v", + sk, svType, tvType, sv, tv) + continue + } + mergeMaps(tsv, ttv, nil) default: - jww.TRACE.Printf("setting value") + v.logger.Trace("setting value") tgt[tk] = sv if itgt != nil { itgt[tk] = sv @@ -1885,7 +1852,7 @@ func (v *Viper) getKeyValueConfig() error { for _, rp := range v.remoteProviders { val, err := v.getRemoteConfig(rp) if err != nil { - jww.ERROR.Printf("get remote config: %s", err) + v.logger.Error(fmt.Errorf("get remote config: %w", err).Error()) continue } @@ -2121,39 +2088,6 @@ func (v *Viper) getConfigFile() (string, error) { return v.configFile, nil } -func (v *Viper) searchInPath(in string) (filename string) { - jww.DEBUG.Println("Searching for config in ", in) - for _, ext := range SupportedExts { - jww.DEBUG.Println("Checking for", filepath.Join(in, v.configName+"."+ext)) - if b, _ := exists(v.fs, filepath.Join(in, v.configName+"."+ext)); b { - jww.DEBUG.Println("Found: ", filepath.Join(in, v.configName+"."+ext)) - return filepath.Join(in, v.configName+"."+ext) - } - } - - if v.configType != "" { - if b, _ := exists(v.fs, filepath.Join(in, v.configName)); b { - return filepath.Join(in, v.configName) - } - } - - return "" -} - -// Search all configPaths for any config file. -// Returns the first path that exists (and is a config file). -func (v *Viper) findConfigFile() (string, error) { - jww.INFO.Println("Searching for config in ", v.configPaths) - - for _, cp := range v.configPaths { - file := v.searchInPath(cp) - if file != "" { - return file, nil - } - } - return "", ConfigFileNotFoundError{v.configName, fmt.Sprintf("%s", v.configPaths)} -} - // Debug prints all configuration registries for debugging // purposes. func Debug() { v.Debug() } diff --git a/vendor/github.com/spf13/viper/viper_go1_15.go b/vendor/github.com/spf13/viper/viper_go1_15.go new file mode 100644 index 000000000..19a771cbd --- /dev/null +++ b/vendor/github.com/spf13/viper/viper_go1_15.go @@ -0,0 +1,57 @@ +//go:build !go1.16 || !finder +// +build !go1.16 !finder + +package viper + +import ( + "fmt" + "os" + "path/filepath" + + "github.com/spf13/afero" +) + +// Search all configPaths for any config file. +// Returns the first path that exists (and is a config file). +func (v *Viper) findConfigFile() (string, error) { + v.logger.Info("searching for config in paths", "paths", v.configPaths) + + for _, cp := range v.configPaths { + file := v.searchInPath(cp) + if file != "" { + return file, nil + } + } + return "", ConfigFileNotFoundError{v.configName, fmt.Sprintf("%s", v.configPaths)} +} + +func (v *Viper) searchInPath(in string) (filename string) { + v.logger.Debug("searching for config in path", "path", in) + for _, ext := range SupportedExts { + v.logger.Debug("checking if file exists", "file", filepath.Join(in, v.configName+"."+ext)) + if b, _ := exists(v.fs, filepath.Join(in, v.configName+"."+ext)); b { + v.logger.Debug("found file", "file", filepath.Join(in, v.configName+"."+ext)) + return filepath.Join(in, v.configName+"."+ext) + } + } + + if v.configType != "" { + if b, _ := exists(v.fs, filepath.Join(in, v.configName)); b { + return filepath.Join(in, v.configName) + } + } + + return "" +} + +// Check if file Exists +func exists(fs afero.Fs, path string) (bool, error) { + stat, err := fs.Stat(path) + if err == nil { + return !stat.IsDir(), nil + } + if os.IsNotExist(err) { + return false, nil + } + return false, err +} diff --git a/vendor/github.com/spf13/viper/viper_go1_16.go b/vendor/github.com/spf13/viper/viper_go1_16.go new file mode 100644 index 000000000..e10172fa3 --- /dev/null +++ b/vendor/github.com/spf13/viper/viper_go1_16.go @@ -0,0 +1,32 @@ +//go:build go1.16 && finder +// +build go1.16,finder + +package viper + +import ( + "fmt" + + "github.com/spf13/afero" +) + +// Search all configPaths for any config file. +// Returns the first path that exists (and is a config file). +func (v *Viper) findConfigFile() (string, error) { + finder := finder{ + paths: v.configPaths, + fileNames: []string{v.configName}, + extensions: SupportedExts, + withoutExtension: v.configType != "", + } + + file, err := finder.Find(afero.NewIOFS(v.fs)) + if err != nil { + return "", err + } + + if file == "" { + return "", ConfigFileNotFoundError{v.configName, fmt.Sprintf("%s", v.configPaths)} + } + + return file, nil +} diff --git a/vendor/github.com/spf13/viper/watch.go b/vendor/github.com/spf13/viper/watch.go index c433a8fa4..b5523b8f9 100644 --- a/vendor/github.com/spf13/viper/watch.go +++ b/vendor/github.com/spf13/viper/watch.go @@ -1,3 +1,4 @@ +//go:build !js // +build !js package viper diff --git a/vendor/github.com/ulikunitz/xz/go.mod b/vendor/github.com/ulikunitz/xz/go.mod deleted file mode 100644 index 330b675bd..000000000 --- a/vendor/github.com/ulikunitz/xz/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module github.com/ulikunitz/xz - -go 1.12 diff --git a/vendor/go.uber.org/atomic/go.mod b/vendor/go.uber.org/atomic/go.mod deleted file mode 100644 index daa7599fe..000000000 --- a/vendor/go.uber.org/atomic/go.mod +++ /dev/null @@ -1,8 +0,0 @@ -module go.uber.org/atomic - -require ( - github.com/davecgh/go-spew v1.1.1 // indirect - github.com/stretchr/testify v1.3.0 -) - -go 1.13 diff --git a/vendor/go.uber.org/atomic/go.sum b/vendor/go.uber.org/atomic/go.sum deleted file mode 100644 index 4f76e62c1..000000000 --- a/vendor/go.uber.org/atomic/go.sum +++ /dev/null @@ -1,9 +0,0 @@ -github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= diff --git a/vendor/go.uber.org/multierr/go.mod b/vendor/go.uber.org/multierr/go.mod deleted file mode 100644 index ff8bdf95f..000000000 --- a/vendor/go.uber.org/multierr/go.mod +++ /dev/null @@ -1,8 +0,0 @@ -module go.uber.org/multierr - -go 1.12 - -require ( - github.com/stretchr/testify v1.3.0 - go.uber.org/atomic v1.7.0 -) diff --git a/vendor/go.uber.org/multierr/go.sum b/vendor/go.uber.org/multierr/go.sum deleted file mode 100644 index ecfc28657..000000000 --- a/vendor/go.uber.org/multierr/go.sum +++ /dev/null @@ -1,11 +0,0 @@ -github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= diff --git a/vendor/go.uber.org/zap/.readme.tmpl b/vendor/go.uber.org/zap/.readme.tmpl index 3154a1e64..92aa65d66 100644 --- a/vendor/go.uber.org/zap/.readme.tmpl +++ b/vendor/go.uber.org/zap/.readme.tmpl @@ -96,14 +96,14 @@ Released under the [MIT License](LICENSE.txt). 1 In particular, keep in mind that we may be benchmarking against slightly older versions of other packages. Versions are -pinned in zap's [glide.lock][] file. [↩](#anchor-versions) +pinned in the [benchmarks/go.mod][] file. [↩](#anchor-versions) -[doc-img]: https://godoc.org/go.uber.org/zap?status.svg -[doc]: https://godoc.org/go.uber.org/zap -[ci-img]: https://travis-ci.com/uber-go/zap.svg?branch=master -[ci]: https://travis-ci.com/uber-go/zap +[doc-img]: https://pkg.go.dev/badge/go.uber.org/zap +[doc]: https://pkg.go.dev/go.uber.org/zap +[ci-img]: https://github.com/uber-go/zap/actions/workflows/go.yml/badge.svg +[ci]: https://github.com/uber-go/zap/actions/workflows/go.yml [cov-img]: https://codecov.io/gh/uber-go/zap/branch/master/graph/badge.svg [cov]: https://codecov.io/gh/uber-go/zap [benchmarking suite]: https://github.com/uber-go/zap/tree/master/benchmarks -[glide.lock]: https://github.com/uber-go/zap/blob/master/glide.lock +[benchmarks/go.mod]: https://github.com/uber-go/zap/blob/master/benchmarks/go.mod diff --git a/vendor/go.uber.org/zap/CHANGELOG.md b/vendor/go.uber.org/zap/CHANGELOG.md index 794ee303e..1793b08c8 100644 --- a/vendor/go.uber.org/zap/CHANGELOG.md +++ b/vendor/go.uber.org/zap/CHANGELOG.md @@ -3,9 +3,57 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). +## 1.21.0 (7 Feb 2022) + +Enhancements: +* [#1047][]: Add `zapcore.ParseLevel` to parse a `Level` from a string. +* [#1048][]: Add `zap.ParseAtomicLevel` to parse an `AtomicLevel` from a + string. + +Bugfixes: +* [#1058][]: Fix panic in JSON encoder when `EncodeLevel` is unset. + +Other changes: +* [#1052][]: Improve encoding performance when the `AddCaller` and + `AddStacktrace` options are used together. + +[#1047]: https://github.com/uber-go/zap/pull/1047 +[#1048]: https://github.com/uber-go/zap/pull/1048 +[#1052]: https://github.com/uber-go/zap/pull/1052 +[#1058]: https://github.com/uber-go/zap/pull/1058 + +Thanks to @aerosol and @Techassi for their contributions to this release. + +## 1.20.0 (4 Jan 2022) + +Enhancements: +* [#989][]: Add `EncoderConfig.SkipLineEnding` flag to disable adding newline + characters between log statements. +* [#1039][]: Add `EncoderConfig.NewReflectedEncoder` field to customize JSON + encoding of reflected log fields. + +Bugfixes: +* [#1011][]: Fix inaccurate precision when encoding complex64 as JSON. +* [#554][], [#1017][]: Close JSON namespaces opened in `MarshalLogObject` + methods when the methods return. +* [#1033][]: Avoid panicking in Sampler core if `thereafter` is zero. + +Other changes: +* [#1028][]: Drop support for Go < 1.15. + +[#554]: https://github.com/uber-go/zap/pull/554 +[#989]: https://github.com/uber-go/zap/pull/989 +[#1011]: https://github.com/uber-go/zap/pull/1011 +[#1017]: https://github.com/uber-go/zap/pull/1017 +[#1028]: https://github.com/uber-go/zap/pull/1028 +[#1033]: https://github.com/uber-go/zap/pull/1033 +[#1039]: https://github.com/uber-go/zap/pull/1039 + +Thanks to @psrajat, @lruggieri, @sammyrnycreal for their contributions to this release. + ## 1.19.1 (8 Sep 2021) -### Fixed +Bugfixes: * [#1001][]: JSON: Fix complex number encoding with negative imaginary part. Thanks to @hemantjadon. * [#1003][]: JSON: Fix inaccurate precision when encoding float32. diff --git a/vendor/go.uber.org/zap/README.md b/vendor/go.uber.org/zap/README.md index 1e64d6cff..9c9dfe1ed 100644 --- a/vendor/go.uber.org/zap/README.md +++ b/vendor/go.uber.org/zap/README.md @@ -66,38 +66,38 @@ Log a message and 10 fields: | Package | Time | Time % to zap | Objects Allocated | | :------ | :--: | :-----------: | :---------------: | -| :zap: zap | 862 ns/op | +0% | 5 allocs/op -| :zap: zap (sugared) | 1250 ns/op | +45% | 11 allocs/op -| zerolog | 4021 ns/op | +366% | 76 allocs/op -| go-kit | 4542 ns/op | +427% | 105 allocs/op -| apex/log | 26785 ns/op | +3007% | 115 allocs/op -| logrus | 29501 ns/op | +3322% | 125 allocs/op -| log15 | 29906 ns/op | +3369% | 122 allocs/op +| :zap: zap | 2900 ns/op | +0% | 5 allocs/op +| :zap: zap (sugared) | 3475 ns/op | +20% | 10 allocs/op +| zerolog | 10639 ns/op | +267% | 32 allocs/op +| go-kit | 14434 ns/op | +398% | 59 allocs/op +| logrus | 17104 ns/op | +490% | 81 allocs/op +| apex/log | 32424 ns/op | +1018% | 66 allocs/op +| log15 | 33579 ns/op | +1058% | 76 allocs/op Log a message with a logger that already has 10 fields of context: | Package | Time | Time % to zap | Objects Allocated | | :------ | :--: | :-----------: | :---------------: | -| :zap: zap | 126 ns/op | +0% | 0 allocs/op -| :zap: zap (sugared) | 187 ns/op | +48% | 2 allocs/op -| zerolog | 88 ns/op | -30% | 0 allocs/op -| go-kit | 5087 ns/op | +3937% | 103 allocs/op -| log15 | 18548 ns/op | +14621% | 73 allocs/op -| apex/log | 26012 ns/op | +20544% | 104 allocs/op -| logrus | 27236 ns/op | +21516% | 113 allocs/op +| :zap: zap | 373 ns/op | +0% | 0 allocs/op +| :zap: zap (sugared) | 452 ns/op | +21% | 1 allocs/op +| zerolog | 288 ns/op | -23% | 0 allocs/op +| go-kit | 11785 ns/op | +3060% | 58 allocs/op +| logrus | 19629 ns/op | +5162% | 70 allocs/op +| log15 | 21866 ns/op | +5762% | 72 allocs/op +| apex/log | 30890 ns/op | +8182% | 55 allocs/op Log a static string, without any context or `printf`-style templating: | Package | Time | Time % to zap | Objects Allocated | | :------ | :--: | :-----------: | :---------------: | -| :zap: zap | 118 ns/op | +0% | 0 allocs/op -| :zap: zap (sugared) | 191 ns/op | +62% | 2 allocs/op -| zerolog | 93 ns/op | -21% | 0 allocs/op -| go-kit | 280 ns/op | +137% | 11 allocs/op -| standard library | 499 ns/op | +323% | 2 allocs/op -| apex/log | 1990 ns/op | +1586% | 10 allocs/op -| logrus | 3129 ns/op | +2552% | 24 allocs/op -| log15 | 3887 ns/op | +3194% | 23 allocs/op +| :zap: zap | 381 ns/op | +0% | 0 allocs/op +| :zap: zap (sugared) | 410 ns/op | +8% | 1 allocs/op +| zerolog | 369 ns/op | -3% | 0 allocs/op +| standard library | 385 ns/op | +1% | 2 allocs/op +| go-kit | 606 ns/op | +59% | 11 allocs/op +| logrus | 1730 ns/op | +354% | 25 allocs/op +| apex/log | 1998 ns/op | +424% | 7 allocs/op +| log15 | 4546 ns/op | +1093% | 22 allocs/op ## Development Status: Stable diff --git a/vendor/go.uber.org/zap/global.go b/vendor/go.uber.org/zap/global.go index c1ac0507c..3cb46c9e0 100644 --- a/vendor/go.uber.org/zap/global.go +++ b/vendor/go.uber.org/zap/global.go @@ -31,6 +31,7 @@ import ( ) const ( + _stdLogDefaultDepth = 1 _loggerWriterDepth = 2 _programmerErrorTemplate = "You've found a bug in zap! Please file a bug at " + "https://github.com/uber-go/zap/issues/new and reference this error: %v" diff --git a/vendor/go.uber.org/zap/global_go112.go b/vendor/go.uber.org/zap/global_go112.go deleted file mode 100644 index 6b5dbda80..000000000 --- a/vendor/go.uber.org/zap/global_go112.go +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (c) 2019 Uber Technologies, Inc. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -// See #682 for more information. -// +build go1.12 - -package zap - -const _stdLogDefaultDepth = 1 diff --git a/vendor/go.uber.org/zap/go.mod b/vendor/go.uber.org/zap/go.mod deleted file mode 100644 index 3480ab4e1..000000000 --- a/vendor/go.uber.org/zap/go.mod +++ /dev/null @@ -1,14 +0,0 @@ -module go.uber.org/zap - -go 1.13 - -require ( - github.com/benbjohnson/clock v1.1.0 - github.com/pkg/errors v0.8.1 - github.com/stretchr/testify v1.7.0 - go.uber.org/atomic v1.7.0 - go.uber.org/goleak v1.1.11-0.20210813005559-691160354723 - go.uber.org/multierr v1.6.0 - gopkg.in/yaml.v2 v2.2.8 - gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect -) diff --git a/vendor/go.uber.org/zap/go.sum b/vendor/go.uber.org/zap/go.sum deleted file mode 100644 index 1658da435..000000000 --- a/vendor/go.uber.org/zap/go.sum +++ /dev/null @@ -1,63 +0,0 @@ -github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= -github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/goleak v1.1.11-0.20210813005559-691160354723 h1:sHOAIxRGBp443oHZIPB+HsUGaksVCXVQENPxwTfQdH4= -go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de h1:5hukYrvBGR8/eNkX5mdUezrA6JiaEZDtJb9Ei+1LlBs= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/mod v0.4.2 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -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= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007 h1:gG67DSER+11cZvqIMb8S8bt0vZtiN6xWYARwirrOSfE= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -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/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= -golang.org/x/tools v0.1.5 h1:ouewzE6p+/VEB31YYnTbEJdi8pFqKp4P4n85vwo3DHA= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -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-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/vendor/go.uber.org/zap/level.go b/vendor/go.uber.org/zap/level.go index 3567a9a1e..8f86c430f 100644 --- a/vendor/go.uber.org/zap/level.go +++ b/vendor/go.uber.org/zap/level.go @@ -86,6 +86,23 @@ func NewAtomicLevelAt(l zapcore.Level) AtomicLevel { return a } +// ParseAtomicLevel parses an AtomicLevel based on a lowercase or all-caps ASCII +// representation of the log level. If the provided ASCII representation is +// invalid an error is returned. +// +// This is particularly useful when dealing with text input to configure log +// levels. +func ParseAtomicLevel(text string) (AtomicLevel, error) { + a := NewAtomicLevel() + l, err := zapcore.ParseLevel(text) + if err != nil { + return a, err + } + + a.SetLevel(l) + return a, nil +} + // Enabled implements the zapcore.LevelEnabler interface, which allows the // AtomicLevel to be used in place of traditional static levels. func (lvl AtomicLevel) Enabled(l zapcore.Level) bool { diff --git a/vendor/go.uber.org/zap/logger.go b/vendor/go.uber.org/zap/logger.go index f116bd936..087c74222 100644 --- a/vendor/go.uber.org/zap/logger.go +++ b/vendor/go.uber.org/zap/logger.go @@ -24,9 +24,9 @@ import ( "fmt" "io/ioutil" "os" - "runtime" "strings" + "go.uber.org/zap/internal/bufferpool" "go.uber.org/zap/zapcore" ) @@ -259,8 +259,10 @@ func (log *Logger) clone() *Logger { } func (log *Logger) check(lvl zapcore.Level, msg string) *zapcore.CheckedEntry { - // check must always be called directly by a method in the Logger interface - // (e.g., Check, Info, Fatal). + // Logger.check must always be called directly by a method in the + // Logger interface (e.g., Check, Info, Fatal). + // This skips Logger.check and the Info/Fatal/Check/etc. method that + // called it. const callerSkipOffset = 2 // Check the level first to reduce the cost of disabled log calls. @@ -307,42 +309,55 @@ func (log *Logger) check(lvl zapcore.Level, msg string) *zapcore.CheckedEntry { // Thread the error output through to the CheckedEntry. ce.ErrorOutput = log.errorOutput - if log.addCaller { - frame, defined := getCallerFrame(log.callerSkip + callerSkipOffset) - if !defined { + + addStack := log.addStack.Enabled(ce.Level) + if !log.addCaller && !addStack { + return ce + } + + // Adding the caller or stack trace requires capturing the callers of + // this function. We'll share information between these two. + stackDepth := stacktraceFirst + if addStack { + stackDepth = stacktraceFull + } + stack := captureStacktrace(log.callerSkip+callerSkipOffset, stackDepth) + defer stack.Free() + + if stack.Count() == 0 { + if log.addCaller { fmt.Fprintf(log.errorOutput, "%v Logger.check error: failed to get caller\n", ent.Time.UTC()) log.errorOutput.Sync() } + return ce + } - ce.Entry.Caller = zapcore.EntryCaller{ - Defined: defined, + frame, more := stack.Next() + + if log.addCaller { + ce.Caller = zapcore.EntryCaller{ + Defined: frame.PC != 0, PC: frame.PC, File: frame.File, Line: frame.Line, Function: frame.Function, } } - if log.addStack.Enabled(ce.Entry.Level) { - ce.Entry.Stack = StackSkip("", log.callerSkip+callerSkipOffset).String - } - return ce -} + if addStack { + buffer := bufferpool.Get() + defer buffer.Free() -// getCallerFrame gets caller frame. The argument skip is the number of stack -// frames to ascend, with 0 identifying the caller of getCallerFrame. The -// boolean ok is false if it was not possible to recover the information. -// -// Note: This implementation is similar to runtime.Caller, but it returns the whole frame. -func getCallerFrame(skip int) (frame runtime.Frame, ok bool) { - const skipOffset = 2 // skip getCallerFrame and Callers - - pc := make([]uintptr, 1) - numFrames := runtime.Callers(skip+skipOffset, pc) - if numFrames < 1 { - return + stackfmt := newStackFormatter(buffer) + + // We've already extracted the first frame, so format that + // separately and defer to stackfmt for the rest. + stackfmt.FormatFrame(frame) + if more { + stackfmt.FormatStack(stack) + } + ce.Stack = buffer.String() } - frame, _ = runtime.CallersFrames(pc).Next() - return frame, frame.PC != 0 + return ce } diff --git a/vendor/go.uber.org/zap/stacktrace.go b/vendor/go.uber.org/zap/stacktrace.go index 0cf8c1ddf..3d187fa56 100644 --- a/vendor/go.uber.org/zap/stacktrace.go +++ b/vendor/go.uber.org/zap/stacktrace.go @@ -24,62 +24,153 @@ import ( "runtime" "sync" + "go.uber.org/zap/buffer" "go.uber.org/zap/internal/bufferpool" ) -var ( - _stacktracePool = sync.Pool{ - New: func() interface{} { - return newProgramCounters(64) - }, - } +var _stacktracePool = sync.Pool{ + New: func() interface{} { + return &stacktrace{ + storage: make([]uintptr, 64), + } + }, +} + +type stacktrace struct { + pcs []uintptr // program counters; always a subslice of storage + frames *runtime.Frames + + // The size of pcs varies depending on requirements: + // it will be one if the only the first frame was requested, + // and otherwise it will reflect the depth of the call stack. + // + // storage decouples the slice we need (pcs) from the slice we pool. + // We will always allocate a reasonably large storage, but we'll use + // only as much of it as we need. + storage []uintptr +} + +// stacktraceDepth specifies how deep of a stack trace should be captured. +type stacktraceDepth int + +const ( + // stacktraceFirst captures only the first frame. + stacktraceFirst stacktraceDepth = iota + + // stacktraceFull captures the entire call stack, allocating more + // storage for it if needed. + stacktraceFull ) -func takeStacktrace(skip int) string { - buffer := bufferpool.Get() - defer buffer.Free() - programCounters := _stacktracePool.Get().(*programCounters) - defer _stacktracePool.Put(programCounters) - - var numFrames int - for { - // Skip the call to runtime.Callers and takeStacktrace so that the - // program counters start at the caller of takeStacktrace. - numFrames = runtime.Callers(skip+2, programCounters.pcs) - if numFrames < len(programCounters.pcs) { - break - } - // Don't put the too-short counter slice back into the pool; this lets - // the pool adjust if we consistently take deep stacktraces. - programCounters = newProgramCounters(len(programCounters.pcs) * 2) +// captureStacktrace captures a stack trace of the specified depth, skipping +// the provided number of frames. skip=0 identifies the caller of +// captureStacktrace. +// +// The caller must call Free on the returned stacktrace after using it. +func captureStacktrace(skip int, depth stacktraceDepth) *stacktrace { + stack := _stacktracePool.Get().(*stacktrace) + + switch depth { + case stacktraceFirst: + stack.pcs = stack.storage[:1] + case stacktraceFull: + stack.pcs = stack.storage } - i := 0 - frames := runtime.CallersFrames(programCounters.pcs[:numFrames]) + // Unlike other "skip"-based APIs, skip=0 identifies runtime.Callers + // itself. +2 to skip captureStacktrace and runtime.Callers. + numFrames := runtime.Callers( + skip+2, + stack.pcs, + ) - // Note: On the last iteration, frames.Next() returns false, with a valid - // frame, but we ignore this frame. The last frame is a a runtime frame which - // adds noise, since it's only either runtime.main or runtime.goexit. - for frame, more := frames.Next(); more; frame, more = frames.Next() { - if i != 0 { - buffer.AppendByte('\n') + // runtime.Callers truncates the recorded stacktrace if there is no + // room in the provided slice. For the full stack trace, keep expanding + // storage until there are fewer frames than there is room. + if depth == stacktraceFull { + pcs := stack.pcs + for numFrames == len(pcs) { + pcs = make([]uintptr, len(pcs)*2) + numFrames = runtime.Callers(skip+2, pcs) } - i++ - buffer.AppendString(frame.Function) - buffer.AppendByte('\n') - buffer.AppendByte('\t') - buffer.AppendString(frame.File) - buffer.AppendByte(':') - buffer.AppendInt(int64(frame.Line)) + + // Discard old storage instead of returning it to the pool. + // This will adjust the pool size over time if stack traces are + // consistently very deep. + stack.storage = pcs + stack.pcs = pcs[:numFrames] + } else { + stack.pcs = stack.pcs[:numFrames] } + stack.frames = runtime.CallersFrames(stack.pcs) + return stack +} + +// Free releases resources associated with this stacktrace +// and returns it back to the pool. +func (st *stacktrace) Free() { + st.frames = nil + st.pcs = nil + _stacktracePool.Put(st) +} + +// Count reports the total number of frames in this stacktrace. +// Count DOES NOT change as Next is called. +func (st *stacktrace) Count() int { + return len(st.pcs) +} + +// Next returns the next frame in the stack trace, +// and a boolean indicating whether there are more after it. +func (st *stacktrace) Next() (_ runtime.Frame, more bool) { + return st.frames.Next() +} + +func takeStacktrace(skip int) string { + stack := captureStacktrace(skip+1, stacktraceFull) + defer stack.Free() + + buffer := bufferpool.Get() + defer buffer.Free() + + stackfmt := newStackFormatter(buffer) + stackfmt.FormatStack(stack) return buffer.String() } -type programCounters struct { - pcs []uintptr +// stackFormatter formats a stack trace into a readable string representation. +type stackFormatter struct { + b *buffer.Buffer + nonEmpty bool // whehther we've written at least one frame already +} + +// newStackFormatter builds a new stackFormatter. +func newStackFormatter(b *buffer.Buffer) stackFormatter { + return stackFormatter{b: b} +} + +// FormatStack formats all remaining frames in the provided stacktrace -- minus +// the final runtime.main/runtime.goexit frame. +func (sf *stackFormatter) FormatStack(stack *stacktrace) { + // Note: On the last iteration, frames.Next() returns false, with a valid + // frame, but we ignore this frame. The last frame is a a runtime frame which + // adds noise, since it's only either runtime.main or runtime.goexit. + for frame, more := stack.Next(); more; frame, more = stack.Next() { + sf.FormatFrame(frame) + } } -func newProgramCounters(size int) *programCounters { - return &programCounters{make([]uintptr, size)} +// FormatFrame formats the given frame. +func (sf *stackFormatter) FormatFrame(frame runtime.Frame) { + if sf.nonEmpty { + sf.b.AppendByte('\n') + } + sf.nonEmpty = true + sf.b.AppendString(frame.Function) + sf.b.AppendByte('\n') + sf.b.AppendByte('\t') + sf.b.AppendString(frame.File) + sf.b.AppendByte(':') + sf.b.AppendInt(int64(frame.Line)) } diff --git a/vendor/go.uber.org/zap/zapcore/clock.go b/vendor/go.uber.org/zap/zapcore/clock.go index d2ea95b39..422fd82a6 100644 --- a/vendor/go.uber.org/zap/zapcore/clock.go +++ b/vendor/go.uber.org/zap/zapcore/clock.go @@ -20,9 +20,7 @@ package zapcore -import ( - "time" -) +import "time" // DefaultClock is the default clock used by Zap in operations that require // time. This clock uses the system clock for all operations. diff --git a/vendor/go.uber.org/zap/zapcore/console_encoder.go b/vendor/go.uber.org/zap/zapcore/console_encoder.go index 2307af404..1aa5dc364 100644 --- a/vendor/go.uber.org/zap/zapcore/console_encoder.go +++ b/vendor/go.uber.org/zap/zapcore/console_encoder.go @@ -125,11 +125,7 @@ func (c consoleEncoder) EncodeEntry(ent Entry, fields []Field) (*buffer.Buffer, line.AppendString(ent.Stack) } - if c.LineEnding != "" { - line.AppendString(c.LineEnding) - } else { - line.AppendString(DefaultLineEnding) - } + line.AppendString(c.LineEnding) return line, nil } diff --git a/vendor/go.uber.org/zap/zapcore/encoder.go b/vendor/go.uber.org/zap/zapcore/encoder.go index 6601ca166..6e5fd5651 100644 --- a/vendor/go.uber.org/zap/zapcore/encoder.go +++ b/vendor/go.uber.org/zap/zapcore/encoder.go @@ -22,6 +22,7 @@ package zapcore import ( "encoding/json" + "io" "time" "go.uber.org/zap/buffer" @@ -312,14 +313,15 @@ func (e *NameEncoder) UnmarshalText(text []byte) error { type EncoderConfig struct { // Set the keys used for each log entry. If any key is empty, that portion // of the entry is omitted. - MessageKey string `json:"messageKey" yaml:"messageKey"` - LevelKey string `json:"levelKey" yaml:"levelKey"` - TimeKey string `json:"timeKey" yaml:"timeKey"` - NameKey string `json:"nameKey" yaml:"nameKey"` - CallerKey string `json:"callerKey" yaml:"callerKey"` - FunctionKey string `json:"functionKey" yaml:"functionKey"` - StacktraceKey string `json:"stacktraceKey" yaml:"stacktraceKey"` - LineEnding string `json:"lineEnding" yaml:"lineEnding"` + MessageKey string `json:"messageKey" yaml:"messageKey"` + LevelKey string `json:"levelKey" yaml:"levelKey"` + TimeKey string `json:"timeKey" yaml:"timeKey"` + NameKey string `json:"nameKey" yaml:"nameKey"` + CallerKey string `json:"callerKey" yaml:"callerKey"` + FunctionKey string `json:"functionKey" yaml:"functionKey"` + StacktraceKey string `json:"stacktraceKey" yaml:"stacktraceKey"` + SkipLineEnding bool `json:"skipLineEnding" yaml:"skipLineEnding"` + LineEnding string `json:"lineEnding" yaml:"lineEnding"` // Configure the primitive representations of common complex types. For // example, some users may want all time.Times serialized as floating-point // seconds since epoch, while others may prefer ISO8601 strings. @@ -330,6 +332,9 @@ type EncoderConfig struct { // Unlike the other primitive type encoders, EncodeName is optional. The // zero value falls back to FullNameEncoder. EncodeName NameEncoder `json:"nameEncoder" yaml:"nameEncoder"` + // Configure the encoder for interface{} type objects. + // If not provided, objects are encoded using json.Encoder + NewReflectedEncoder func(io.Writer) ReflectedEncoder `json:"-" yaml:"-"` // Configures the field separator used by the console encoder. Defaults // to tab. ConsoleSeparator string `json:"consoleSeparator" yaml:"consoleSeparator"` diff --git a/vendor/go.uber.org/zap/zapcore/json_encoder.go b/vendor/go.uber.org/zap/zapcore/json_encoder.go index af220d9b4..c5d751b82 100644 --- a/vendor/go.uber.org/zap/zapcore/json_encoder.go +++ b/vendor/go.uber.org/zap/zapcore/json_encoder.go @@ -22,7 +22,6 @@ package zapcore import ( "encoding/base64" - "encoding/json" "math" "sync" "time" @@ -64,7 +63,7 @@ type jsonEncoder struct { // for encoding generic values by reflection reflectBuf *buffer.Buffer - reflectEnc *json.Encoder + reflectEnc ReflectedEncoder } // NewJSONEncoder creates a fast, low-allocation JSON encoder. The encoder @@ -82,6 +81,17 @@ func NewJSONEncoder(cfg EncoderConfig) Encoder { } func newJSONEncoder(cfg EncoderConfig, spaced bool) *jsonEncoder { + if cfg.SkipLineEnding { + cfg.LineEnding = "" + } else if cfg.LineEnding == "" { + cfg.LineEnding = DefaultLineEnding + } + + // If no EncoderConfig.NewReflectedEncoder is provided by the user, then use default + if cfg.NewReflectedEncoder == nil { + cfg.NewReflectedEncoder = defaultReflectedEncoder + } + return &jsonEncoder{ EncoderConfig: &cfg, buf: bufferpool.Get(), @@ -118,6 +128,11 @@ func (enc *jsonEncoder) AddComplex128(key string, val complex128) { enc.AppendComplex128(val) } +func (enc *jsonEncoder) AddComplex64(key string, val complex64) { + enc.addKey(key) + enc.AppendComplex64(val) +} + func (enc *jsonEncoder) AddDuration(key string, val time.Duration) { enc.addKey(key) enc.AppendDuration(val) @@ -141,10 +156,7 @@ func (enc *jsonEncoder) AddInt64(key string, val int64) { func (enc *jsonEncoder) resetReflectBuf() { if enc.reflectBuf == nil { enc.reflectBuf = bufferpool.Get() - enc.reflectEnc = json.NewEncoder(enc.reflectBuf) - - // For consistency with our custom JSON encoder. - enc.reflectEnc.SetEscapeHTML(false) + enc.reflectEnc = enc.NewReflectedEncoder(enc.reflectBuf) } else { enc.reflectBuf.Reset() } @@ -206,10 +218,16 @@ func (enc *jsonEncoder) AppendArray(arr ArrayMarshaler) error { } func (enc *jsonEncoder) AppendObject(obj ObjectMarshaler) error { + // Close ONLY new openNamespaces that are created during + // AppendObject(). + old := enc.openNamespaces + enc.openNamespaces = 0 enc.addElementSeparator() enc.buf.AppendByte('{') err := obj.MarshalLogObject(enc) enc.buf.AppendByte('}') + enc.closeOpenNamespaces() + enc.openNamespaces = old return err } @@ -225,20 +243,23 @@ func (enc *jsonEncoder) AppendByteString(val []byte) { enc.buf.AppendByte('"') } -func (enc *jsonEncoder) AppendComplex128(val complex128) { +// appendComplex appends the encoded form of the provided complex128 value. +// precision specifies the encoding precision for the real and imaginary +// components of the complex number. +func (enc *jsonEncoder) appendComplex(val complex128, precision int) { enc.addElementSeparator() // Cast to a platform-independent, fixed-size type. r, i := float64(real(val)), float64(imag(val)) enc.buf.AppendByte('"') // Because we're always in a quoted string, we can use strconv without // special-casing NaN and +/-Inf. - enc.buf.AppendFloat(r, 64) + enc.buf.AppendFloat(r, precision) // If imaginary part is less than 0, minus (-) sign is added by default // by AppendFloat. if i >= 0 { enc.buf.AppendByte('+') } - enc.buf.AppendFloat(i, 64) + enc.buf.AppendFloat(i, precision) enc.buf.AppendByte('i') enc.buf.AppendByte('"') } @@ -301,28 +322,28 @@ func (enc *jsonEncoder) AppendUint64(val uint64) { enc.buf.AppendUint(val) } -func (enc *jsonEncoder) AddComplex64(k string, v complex64) { enc.AddComplex128(k, complex128(v)) } -func (enc *jsonEncoder) AddInt(k string, v int) { enc.AddInt64(k, int64(v)) } -func (enc *jsonEncoder) AddInt32(k string, v int32) { enc.AddInt64(k, int64(v)) } -func (enc *jsonEncoder) AddInt16(k string, v int16) { enc.AddInt64(k, int64(v)) } -func (enc *jsonEncoder) AddInt8(k string, v int8) { enc.AddInt64(k, int64(v)) } -func (enc *jsonEncoder) AddUint(k string, v uint) { enc.AddUint64(k, uint64(v)) } -func (enc *jsonEncoder) AddUint32(k string, v uint32) { enc.AddUint64(k, uint64(v)) } -func (enc *jsonEncoder) AddUint16(k string, v uint16) { enc.AddUint64(k, uint64(v)) } -func (enc *jsonEncoder) AddUint8(k string, v uint8) { enc.AddUint64(k, uint64(v)) } -func (enc *jsonEncoder) AddUintptr(k string, v uintptr) { enc.AddUint64(k, uint64(v)) } -func (enc *jsonEncoder) AppendComplex64(v complex64) { enc.AppendComplex128(complex128(v)) } -func (enc *jsonEncoder) AppendFloat64(v float64) { enc.appendFloat(v, 64) } -func (enc *jsonEncoder) AppendFloat32(v float32) { enc.appendFloat(float64(v), 32) } -func (enc *jsonEncoder) AppendInt(v int) { enc.AppendInt64(int64(v)) } -func (enc *jsonEncoder) AppendInt32(v int32) { enc.AppendInt64(int64(v)) } -func (enc *jsonEncoder) AppendInt16(v int16) { enc.AppendInt64(int64(v)) } -func (enc *jsonEncoder) AppendInt8(v int8) { enc.AppendInt64(int64(v)) } -func (enc *jsonEncoder) AppendUint(v uint) { enc.AppendUint64(uint64(v)) } -func (enc *jsonEncoder) AppendUint32(v uint32) { enc.AppendUint64(uint64(v)) } -func (enc *jsonEncoder) AppendUint16(v uint16) { enc.AppendUint64(uint64(v)) } -func (enc *jsonEncoder) AppendUint8(v uint8) { enc.AppendUint64(uint64(v)) } -func (enc *jsonEncoder) AppendUintptr(v uintptr) { enc.AppendUint64(uint64(v)) } +func (enc *jsonEncoder) AddInt(k string, v int) { enc.AddInt64(k, int64(v)) } +func (enc *jsonEncoder) AddInt32(k string, v int32) { enc.AddInt64(k, int64(v)) } +func (enc *jsonEncoder) AddInt16(k string, v int16) { enc.AddInt64(k, int64(v)) } +func (enc *jsonEncoder) AddInt8(k string, v int8) { enc.AddInt64(k, int64(v)) } +func (enc *jsonEncoder) AddUint(k string, v uint) { enc.AddUint64(k, uint64(v)) } +func (enc *jsonEncoder) AddUint32(k string, v uint32) { enc.AddUint64(k, uint64(v)) } +func (enc *jsonEncoder) AddUint16(k string, v uint16) { enc.AddUint64(k, uint64(v)) } +func (enc *jsonEncoder) AddUint8(k string, v uint8) { enc.AddUint64(k, uint64(v)) } +func (enc *jsonEncoder) AddUintptr(k string, v uintptr) { enc.AddUint64(k, uint64(v)) } +func (enc *jsonEncoder) AppendComplex64(v complex64) { enc.appendComplex(complex128(v), 32) } +func (enc *jsonEncoder) AppendComplex128(v complex128) { enc.appendComplex(complex128(v), 64) } +func (enc *jsonEncoder) AppendFloat64(v float64) { enc.appendFloat(v, 64) } +func (enc *jsonEncoder) AppendFloat32(v float32) { enc.appendFloat(float64(v), 32) } +func (enc *jsonEncoder) AppendInt(v int) { enc.AppendInt64(int64(v)) } +func (enc *jsonEncoder) AppendInt32(v int32) { enc.AppendInt64(int64(v)) } +func (enc *jsonEncoder) AppendInt16(v int16) { enc.AppendInt64(int64(v)) } +func (enc *jsonEncoder) AppendInt8(v int8) { enc.AppendInt64(int64(v)) } +func (enc *jsonEncoder) AppendUint(v uint) { enc.AppendUint64(uint64(v)) } +func (enc *jsonEncoder) AppendUint32(v uint32) { enc.AppendUint64(uint64(v)) } +func (enc *jsonEncoder) AppendUint16(v uint16) { enc.AppendUint64(uint64(v)) } +func (enc *jsonEncoder) AppendUint8(v uint8) { enc.AppendUint64(uint64(v)) } +func (enc *jsonEncoder) AppendUintptr(v uintptr) { enc.AppendUint64(uint64(v)) } func (enc *jsonEncoder) Clone() Encoder { clone := enc.clone() @@ -343,7 +364,7 @@ func (enc *jsonEncoder) EncodeEntry(ent Entry, fields []Field) (*buffer.Buffer, final := enc.clone() final.buf.AppendByte('{') - if final.LevelKey != "" { + if final.LevelKey != "" && final.EncodeLevel != nil { final.addKey(final.LevelKey) cur := final.buf.Len() final.EncodeLevel(ent.Level, final) @@ -404,11 +425,7 @@ func (enc *jsonEncoder) EncodeEntry(ent Entry, fields []Field) (*buffer.Buffer, final.AddString(final.StacktraceKey, ent.Stack) } final.buf.AppendByte('}') - if final.LineEnding != "" { - final.buf.AppendString(final.LineEnding) - } else { - final.buf.AppendString(DefaultLineEnding) - } + final.buf.AppendString(final.LineEnding) ret := final.buf putJSONEncoder(final) @@ -423,6 +440,7 @@ func (enc *jsonEncoder) closeOpenNamespaces() { for i := 0; i < enc.openNamespaces; i++ { enc.buf.AppendByte('}') } + enc.openNamespaces = 0 } func (enc *jsonEncoder) addKey(key string) { diff --git a/vendor/go.uber.org/zap/zapcore/level.go b/vendor/go.uber.org/zap/zapcore/level.go index e575c9f43..56e88dc0c 100644 --- a/vendor/go.uber.org/zap/zapcore/level.go +++ b/vendor/go.uber.org/zap/zapcore/level.go @@ -55,6 +55,18 @@ const ( _maxLevel = FatalLevel ) +// ParseLevel parses a level based on the lower-case or all-caps ASCII +// representation of the log level. If the provided ASCII representation is +// invalid an error is returned. +// +// This is particularly useful when dealing with text input to configure log +// levels. +func ParseLevel(text string) (Level, error) { + var level Level + err := level.UnmarshalText([]byte(text)) + return level, err +} + // String returns a lower-case ASCII representation of the log level. func (l Level) String() string { switch l { diff --git a/vendor/go.uber.org/zap/global_prego112.go b/vendor/go.uber.org/zap/zapcore/reflected_encoder.go similarity index 64% rename from vendor/go.uber.org/zap/global_prego112.go rename to vendor/go.uber.org/zap/zapcore/reflected_encoder.go index d3ab9af93..8746360ec 100644 --- a/vendor/go.uber.org/zap/global_prego112.go +++ b/vendor/go.uber.org/zap/zapcore/reflected_encoder.go @@ -1,4 +1,4 @@ -// Copyright (c) 2019 Uber Technologies, Inc. +// Copyright (c) 2016 Uber Technologies, Inc. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -18,9 +18,24 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -// See #682 for more information. -// +build !go1.12 +package zapcore -package zap +import ( + "encoding/json" + "io" +) -const _stdLogDefaultDepth = 2 +// ReflectedEncoder serializes log fields that can't be serialized with Zap's +// JSON encoder. These have the ReflectType field type. +// Use EncoderConfig.NewReflectedEncoder to set this. +type ReflectedEncoder interface { + // Encode encodes and writes to the underlying data stream. + Encode(interface{}) error +} + +func defaultReflectedEncoder(w io.Writer) ReflectedEncoder { + enc := json.NewEncoder(w) + // For consistency with our custom JSON encoder. + enc.SetEscapeHTML(false) + return enc +} diff --git a/vendor/go.uber.org/zap/zapcore/sampler.go b/vendor/go.uber.org/zap/zapcore/sampler.go index 31ed96e12..8c116049d 100644 --- a/vendor/go.uber.org/zap/zapcore/sampler.go +++ b/vendor/go.uber.org/zap/zapcore/sampler.go @@ -133,10 +133,21 @@ func SamplerHook(hook func(entry Entry, dec SamplingDecision)) SamplerOption { // each tick. If more Entries with the same level and message are seen during // the same interval, every Mth message is logged and the rest are dropped. // +// For example, +// +// core = NewSamplerWithOptions(core, time.Second, 10, 5) +// +// This will log the first 10 log entries with the same level and message +// in a one second interval as-is. Following that, it will allow through +// every 5th log entry with the same level and message in that interval. +// +// If thereafter is zero, the Core will drop all log entries after the first N +// in that interval. +// // Sampler can be configured to report sampling decisions with the SamplerHook // option. // -// Keep in mind that zap's sampling implementation is optimized for speed over +// Keep in mind that Zap's sampling implementation is optimized for speed over // absolute precision; under load, each tick may be slightly over- or // under-sampled. func NewSamplerWithOptions(core Core, tick time.Duration, first, thereafter int, opts ...SamplerOption) Core { @@ -200,7 +211,7 @@ func (s *sampler) Check(ent Entry, ce *CheckedEntry) *CheckedEntry { if ent.Level >= _minLevel && ent.Level <= _maxLevel { counter := s.counts.get(ent.Level, ent.Message) n := counter.IncCheckReset(ent.Time, s.tick) - if n > s.first && (n-s.first)%s.thereafter != 0 { + if n > s.first && (s.thereafter == 0 || (n-s.first)%s.thereafter != 0) { s.hook(ent, LogDropped) return ce } diff --git a/vendor/golang.org/x/crypto/chacha20/chacha_s390x.go b/vendor/golang.org/x/crypto/chacha20/chacha_s390x.go index c5898db46..4652247b8 100644 --- a/vendor/golang.org/x/crypto/chacha20/chacha_s390x.go +++ b/vendor/golang.org/x/crypto/chacha20/chacha_s390x.go @@ -15,6 +15,7 @@ const bufSize = 256 // xorKeyStreamVX is an assembly implementation of XORKeyStream. It must only // be called when the vector facility is available. Implementation in asm_s390x.s. +// //go:noescape func xorKeyStreamVX(dst, src []byte, key *[8]uint32, nonce *[3]uint32, counter *uint32) diff --git a/vendor/golang.org/x/crypto/curve25519/internal/field/fe_amd64.go b/vendor/golang.org/x/crypto/curve25519/internal/field/fe_amd64.go index 44dc8e8ca..edcf163c4 100644 --- a/vendor/golang.org/x/crypto/curve25519/internal/field/fe_amd64.go +++ b/vendor/golang.org/x/crypto/curve25519/internal/field/fe_amd64.go @@ -1,13 +1,16 @@ // Code generated by command: go run fe_amd64_asm.go -out ../fe_amd64.s -stubs ../fe_amd64.go -pkg field. DO NOT EDIT. +//go:build amd64 && gc && !purego // +build amd64,gc,!purego package field // feMul sets out = a * b. It works like feMulGeneric. +// //go:noescape func feMul(out *Element, a *Element, b *Element) // feSquare sets out = a * a. It works like feSquareGeneric. +// //go:noescape func feSquare(out *Element, a *Element) diff --git a/vendor/golang.org/x/crypto/ed25519/ed25519.go b/vendor/golang.org/x/crypto/ed25519/ed25519.go index 71ad917da..a7828345f 100644 --- a/vendor/golang.org/x/crypto/ed25519/ed25519.go +++ b/vendor/golang.org/x/crypto/ed25519/ed25519.go @@ -1,13 +1,7 @@ -// Copyright 2016 The Go Authors. All rights reserved. +// Copyright 2019 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// In Go 1.13, the ed25519 package was promoted to the standard library as -// crypto/ed25519, and this package became a wrapper for the standard library one. -// -//go:build !go1.13 -// +build !go1.13 - // Package ed25519 implements the Ed25519 signature algorithm. See // https://ed25519.cr.yp.to/. // @@ -16,21 +10,15 @@ // representation includes a public key suffix to make multiple signing // operations with the same key more efficient. This package refers to the RFC // 8032 private key as the “seed”. +// +// Beginning with Go 1.13, the functionality of this package was moved to the +// standard library as crypto/ed25519. This package only acts as a compatibility +// wrapper. package ed25519 -// This code is a port of the public domain, “ref10” implementation of ed25519 -// from SUPERCOP. - import ( - "bytes" - "crypto" - cryptorand "crypto/rand" - "crypto/sha512" - "errors" + "crypto/ed25519" "io" - "strconv" - - "golang.org/x/crypto/ed25519/internal/edwards25519" ) const ( @@ -45,57 +33,21 @@ const ( ) // PublicKey is the type of Ed25519 public keys. -type PublicKey []byte +// +// This type is an alias for crypto/ed25519's PublicKey type. +// See the crypto/ed25519 package for the methods on this type. +type PublicKey = ed25519.PublicKey // PrivateKey is the type of Ed25519 private keys. It implements crypto.Signer. -type PrivateKey []byte - -// Public returns the PublicKey corresponding to priv. -func (priv PrivateKey) Public() crypto.PublicKey { - publicKey := make([]byte, PublicKeySize) - copy(publicKey, priv[32:]) - return PublicKey(publicKey) -} - -// Seed returns the private key seed corresponding to priv. It is provided for -// interoperability with RFC 8032. RFC 8032's private keys correspond to seeds -// in this package. -func (priv PrivateKey) Seed() []byte { - seed := make([]byte, SeedSize) - copy(seed, priv[:32]) - return seed -} - -// Sign signs the given message with priv. -// Ed25519 performs two passes over messages to be signed and therefore cannot -// handle pre-hashed messages. Thus opts.HashFunc() must return zero to -// indicate the message hasn't been hashed. This can be achieved by passing -// crypto.Hash(0) as the value for opts. -func (priv PrivateKey) Sign(rand io.Reader, message []byte, opts crypto.SignerOpts) (signature []byte, err error) { - if opts.HashFunc() != crypto.Hash(0) { - return nil, errors.New("ed25519: cannot sign hashed message") - } - - return Sign(priv, message), nil -} +// +// This type is an alias for crypto/ed25519's PrivateKey type. +// See the crypto/ed25519 package for the methods on this type. +type PrivateKey = ed25519.PrivateKey // GenerateKey generates a public/private key pair using entropy from rand. // If rand is nil, crypto/rand.Reader will be used. func GenerateKey(rand io.Reader) (PublicKey, PrivateKey, error) { - if rand == nil { - rand = cryptorand.Reader - } - - seed := make([]byte, SeedSize) - if _, err := io.ReadFull(rand, seed); err != nil { - return nil, nil, err - } - - privateKey := NewKeyFromSeed(seed) - publicKey := make([]byte, PublicKeySize) - copy(publicKey, privateKey[32:]) - - return publicKey, privateKey, nil + return ed25519.GenerateKey(rand) } // NewKeyFromSeed calculates a private key from a seed. It will panic if @@ -103,121 +55,17 @@ func GenerateKey(rand io.Reader) (PublicKey, PrivateKey, error) { // with RFC 8032. RFC 8032's private keys correspond to seeds in this // package. func NewKeyFromSeed(seed []byte) PrivateKey { - if l := len(seed); l != SeedSize { - panic("ed25519: bad seed length: " + strconv.Itoa(l)) - } - - digest := sha512.Sum512(seed) - digest[0] &= 248 - digest[31] &= 127 - digest[31] |= 64 - - var A edwards25519.ExtendedGroupElement - var hBytes [32]byte - copy(hBytes[:], digest[:]) - edwards25519.GeScalarMultBase(&A, &hBytes) - var publicKeyBytes [32]byte - A.ToBytes(&publicKeyBytes) - - privateKey := make([]byte, PrivateKeySize) - copy(privateKey, seed) - copy(privateKey[32:], publicKeyBytes[:]) - - return privateKey + return ed25519.NewKeyFromSeed(seed) } // Sign signs the message with privateKey and returns a signature. It will // panic if len(privateKey) is not PrivateKeySize. func Sign(privateKey PrivateKey, message []byte) []byte { - if l := len(privateKey); l != PrivateKeySize { - panic("ed25519: bad private key length: " + strconv.Itoa(l)) - } - - h := sha512.New() - h.Write(privateKey[:32]) - - var digest1, messageDigest, hramDigest [64]byte - var expandedSecretKey [32]byte - h.Sum(digest1[:0]) - copy(expandedSecretKey[:], digest1[:]) - expandedSecretKey[0] &= 248 - expandedSecretKey[31] &= 63 - expandedSecretKey[31] |= 64 - - h.Reset() - h.Write(digest1[32:]) - h.Write(message) - h.Sum(messageDigest[:0]) - - var messageDigestReduced [32]byte - edwards25519.ScReduce(&messageDigestReduced, &messageDigest) - var R edwards25519.ExtendedGroupElement - edwards25519.GeScalarMultBase(&R, &messageDigestReduced) - - var encodedR [32]byte - R.ToBytes(&encodedR) - - h.Reset() - h.Write(encodedR[:]) - h.Write(privateKey[32:]) - h.Write(message) - h.Sum(hramDigest[:0]) - var hramDigestReduced [32]byte - edwards25519.ScReduce(&hramDigestReduced, &hramDigest) - - var s [32]byte - edwards25519.ScMulAdd(&s, &hramDigestReduced, &expandedSecretKey, &messageDigestReduced) - - signature := make([]byte, SignatureSize) - copy(signature[:], encodedR[:]) - copy(signature[32:], s[:]) - - return signature + return ed25519.Sign(privateKey, message) } // Verify reports whether sig is a valid signature of message by publicKey. It // will panic if len(publicKey) is not PublicKeySize. func Verify(publicKey PublicKey, message, sig []byte) bool { - if l := len(publicKey); l != PublicKeySize { - panic("ed25519: bad public key length: " + strconv.Itoa(l)) - } - - if len(sig) != SignatureSize || sig[63]&224 != 0 { - return false - } - - var A edwards25519.ExtendedGroupElement - var publicKeyBytes [32]byte - copy(publicKeyBytes[:], publicKey) - if !A.FromBytes(&publicKeyBytes) { - return false - } - edwards25519.FeNeg(&A.X, &A.X) - edwards25519.FeNeg(&A.T, &A.T) - - h := sha512.New() - h.Write(sig[:32]) - h.Write(publicKey[:]) - h.Write(message) - var digest [64]byte - h.Sum(digest[:0]) - - var hReduced [32]byte - edwards25519.ScReduce(&hReduced, &digest) - - var R edwards25519.ProjectiveGroupElement - var s [32]byte - copy(s[:], sig[32:]) - - // https://tools.ietf.org/html/rfc8032#section-5.1.7 requires that s be in - // the range [0, order) in order to prevent signature malleability. - if !edwards25519.ScMinimal(&s) { - return false - } - - edwards25519.GeDoubleScalarMultVartime(&R, &hReduced, &A, &s) - - var checkR [32]byte - R.ToBytes(&checkR) - return bytes.Equal(sig[:32], checkR[:]) + return ed25519.Verify(publicKey, message, sig) } diff --git a/vendor/golang.org/x/crypto/ed25519/ed25519_go113.go b/vendor/golang.org/x/crypto/ed25519/ed25519_go113.go deleted file mode 100644 index b5974dc8b..000000000 --- a/vendor/golang.org/x/crypto/ed25519/ed25519_go113.go +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright 2019 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build go1.13 -// +build go1.13 - -// Package ed25519 implements the Ed25519 signature algorithm. See -// https://ed25519.cr.yp.to/. -// -// These functions are also compatible with the “Ed25519” function defined in -// RFC 8032. However, unlike RFC 8032's formulation, this package's private key -// representation includes a public key suffix to make multiple signing -// operations with the same key more efficient. This package refers to the RFC -// 8032 private key as the “seed”. -// -// Beginning with Go 1.13, the functionality of this package was moved to the -// standard library as crypto/ed25519. This package only acts as a compatibility -// wrapper. -package ed25519 - -import ( - "crypto/ed25519" - "io" -) - -const ( - // PublicKeySize is the size, in bytes, of public keys as used in this package. - PublicKeySize = 32 - // PrivateKeySize is the size, in bytes, of private keys as used in this package. - PrivateKeySize = 64 - // SignatureSize is the size, in bytes, of signatures generated and verified by this package. - SignatureSize = 64 - // SeedSize is the size, in bytes, of private key seeds. These are the private key representations used by RFC 8032. - SeedSize = 32 -) - -// PublicKey is the type of Ed25519 public keys. -// -// This type is an alias for crypto/ed25519's PublicKey type. -// See the crypto/ed25519 package for the methods on this type. -type PublicKey = ed25519.PublicKey - -// PrivateKey is the type of Ed25519 private keys. It implements crypto.Signer. -// -// This type is an alias for crypto/ed25519's PrivateKey type. -// See the crypto/ed25519 package for the methods on this type. -type PrivateKey = ed25519.PrivateKey - -// GenerateKey generates a public/private key pair using entropy from rand. -// If rand is nil, crypto/rand.Reader will be used. -func GenerateKey(rand io.Reader) (PublicKey, PrivateKey, error) { - return ed25519.GenerateKey(rand) -} - -// NewKeyFromSeed calculates a private key from a seed. It will panic if -// len(seed) is not SeedSize. This function is provided for interoperability -// with RFC 8032. RFC 8032's private keys correspond to seeds in this -// package. -func NewKeyFromSeed(seed []byte) PrivateKey { - return ed25519.NewKeyFromSeed(seed) -} - -// Sign signs the message with privateKey and returns a signature. It will -// panic if len(privateKey) is not PrivateKeySize. -func Sign(privateKey PrivateKey, message []byte) []byte { - return ed25519.Sign(privateKey, message) -} - -// Verify reports whether sig is a valid signature of message by publicKey. It -// will panic if len(publicKey) is not PublicKeySize. -func Verify(publicKey PublicKey, message, sig []byte) bool { - return ed25519.Verify(publicKey, message, sig) -} diff --git a/vendor/golang.org/x/crypto/ed25519/internal/edwards25519/const.go b/vendor/golang.org/x/crypto/ed25519/internal/edwards25519/const.go deleted file mode 100644 index e39f086c1..000000000 --- a/vendor/golang.org/x/crypto/ed25519/internal/edwards25519/const.go +++ /dev/null @@ -1,1422 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package edwards25519 - -// These values are from the public domain, “ref10” implementation of ed25519 -// from SUPERCOP. - -// d is a constant in the Edwards curve equation. -var d = FieldElement{ - -10913610, 13857413, -15372611, 6949391, 114729, -8787816, -6275908, -3247719, -18696448, -12055116, -} - -// d2 is 2*d. -var d2 = FieldElement{ - -21827239, -5839606, -30745221, 13898782, 229458, 15978800, -12551817, -6495438, 29715968, 9444199, -} - -// SqrtM1 is the square-root of -1 in the field. -var SqrtM1 = FieldElement{ - -32595792, -7943725, 9377950, 3500415, 12389472, -272473, -25146209, -2005654, 326686, 11406482, -} - -// A is a constant in the Montgomery-form of curve25519. -var A = FieldElement{ - 486662, 0, 0, 0, 0, 0, 0, 0, 0, 0, -} - -// bi contains precomputed multiples of the base-point. See the Ed25519 paper -// for a discussion about how these values are used. -var bi = [8]PreComputedGroupElement{ - { - FieldElement{25967493, -14356035, 29566456, 3660896, -12694345, 4014787, 27544626, -11754271, -6079156, 2047605}, - FieldElement{-12545711, 934262, -2722910, 3049990, -727428, 9406986, 12720692, 5043384, 19500929, -15469378}, - FieldElement{-8738181, 4489570, 9688441, -14785194, 10184609, -12363380, 29287919, 11864899, -24514362, -4438546}, - }, - { - FieldElement{15636291, -9688557, 24204773, -7912398, 616977, -16685262, 27787600, -14772189, 28944400, -1550024}, - FieldElement{16568933, 4717097, -11556148, -1102322, 15682896, -11807043, 16354577, -11775962, 7689662, 11199574}, - FieldElement{30464156, -5976125, -11779434, -15670865, 23220365, 15915852, 7512774, 10017326, -17749093, -9920357}, - }, - { - FieldElement{10861363, 11473154, 27284546, 1981175, -30064349, 12577861, 32867885, 14515107, -15438304, 10819380}, - FieldElement{4708026, 6336745, 20377586, 9066809, -11272109, 6594696, -25653668, 12483688, -12668491, 5581306}, - FieldElement{19563160, 16186464, -29386857, 4097519, 10237984, -4348115, 28542350, 13850243, -23678021, -15815942}, - }, - { - FieldElement{5153746, 9909285, 1723747, -2777874, 30523605, 5516873, 19480852, 5230134, -23952439, -15175766}, - FieldElement{-30269007, -3463509, 7665486, 10083793, 28475525, 1649722, 20654025, 16520125, 30598449, 7715701}, - FieldElement{28881845, 14381568, 9657904, 3680757, -20181635, 7843316, -31400660, 1370708, 29794553, -1409300}, - }, - { - FieldElement{-22518993, -6692182, 14201702, -8745502, -23510406, 8844726, 18474211, -1361450, -13062696, 13821877}, - FieldElement{-6455177, -7839871, 3374702, -4740862, -27098617, -10571707, 31655028, -7212327, 18853322, -14220951}, - FieldElement{4566830, -12963868, -28974889, -12240689, -7602672, -2830569, -8514358, -10431137, 2207753, -3209784}, - }, - { - FieldElement{-25154831, -4185821, 29681144, 7868801, -6854661, -9423865, -12437364, -663000, -31111463, -16132436}, - FieldElement{25576264, -2703214, 7349804, -11814844, 16472782, 9300885, 3844789, 15725684, 171356, 6466918}, - FieldElement{23103977, 13316479, 9739013, -16149481, 817875, -15038942, 8965339, -14088058, -30714912, 16193877}, - }, - { - FieldElement{-33521811, 3180713, -2394130, 14003687, -16903474, -16270840, 17238398, 4729455, -18074513, 9256800}, - FieldElement{-25182317, -4174131, 32336398, 5036987, -21236817, 11360617, 22616405, 9761698, -19827198, 630305}, - FieldElement{-13720693, 2639453, -24237460, -7406481, 9494427, -5774029, -6554551, -15960994, -2449256, -14291300}, - }, - { - FieldElement{-3151181, -5046075, 9282714, 6866145, -31907062, -863023, -18940575, 15033784, 25105118, -7894876}, - FieldElement{-24326370, 15950226, -31801215, -14592823, -11662737, -5090925, 1573892, -2625887, 2198790, -15804619}, - FieldElement{-3099351, 10324967, -2241613, 7453183, -5446979, -2735503, -13812022, -16236442, -32461234, -12290683}, - }, -} - -// base contains precomputed multiples of the base-point. See the Ed25519 paper -// for a discussion about how these values are used. -var base = [32][8]PreComputedGroupElement{ - { - { - FieldElement{25967493, -14356035, 29566456, 3660896, -12694345, 4014787, 27544626, -11754271, -6079156, 2047605}, - FieldElement{-12545711, 934262, -2722910, 3049990, -727428, 9406986, 12720692, 5043384, 19500929, -15469378}, - FieldElement{-8738181, 4489570, 9688441, -14785194, 10184609, -12363380, 29287919, 11864899, -24514362, -4438546}, - }, - { - FieldElement{-12815894, -12976347, -21581243, 11784320, -25355658, -2750717, -11717903, -3814571, -358445, -10211303}, - FieldElement{-21703237, 6903825, 27185491, 6451973, -29577724, -9554005, -15616551, 11189268, -26829678, -5319081}, - FieldElement{26966642, 11152617, 32442495, 15396054, 14353839, -12752335, -3128826, -9541118, -15472047, -4166697}, - }, - { - FieldElement{15636291, -9688557, 24204773, -7912398, 616977, -16685262, 27787600, -14772189, 28944400, -1550024}, - FieldElement{16568933, 4717097, -11556148, -1102322, 15682896, -11807043, 16354577, -11775962, 7689662, 11199574}, - FieldElement{30464156, -5976125, -11779434, -15670865, 23220365, 15915852, 7512774, 10017326, -17749093, -9920357}, - }, - { - FieldElement{-17036878, 13921892, 10945806, -6033431, 27105052, -16084379, -28926210, 15006023, 3284568, -6276540}, - FieldElement{23599295, -8306047, -11193664, -7687416, 13236774, 10506355, 7464579, 9656445, 13059162, 10374397}, - FieldElement{7798556, 16710257, 3033922, 2874086, 28997861, 2835604, 32406664, -3839045, -641708, -101325}, - }, - { - FieldElement{10861363, 11473154, 27284546, 1981175, -30064349, 12577861, 32867885, 14515107, -15438304, 10819380}, - FieldElement{4708026, 6336745, 20377586, 9066809, -11272109, 6594696, -25653668, 12483688, -12668491, 5581306}, - FieldElement{19563160, 16186464, -29386857, 4097519, 10237984, -4348115, 28542350, 13850243, -23678021, -15815942}, - }, - { - FieldElement{-15371964, -12862754, 32573250, 4720197, -26436522, 5875511, -19188627, -15224819, -9818940, -12085777}, - FieldElement{-8549212, 109983, 15149363, 2178705, 22900618, 4543417, 3044240, -15689887, 1762328, 14866737}, - FieldElement{-18199695, -15951423, -10473290, 1707278, -17185920, 3916101, -28236412, 3959421, 27914454, 4383652}, - }, - { - FieldElement{5153746, 9909285, 1723747, -2777874, 30523605, 5516873, 19480852, 5230134, -23952439, -15175766}, - FieldElement{-30269007, -3463509, 7665486, 10083793, 28475525, 1649722, 20654025, 16520125, 30598449, 7715701}, - FieldElement{28881845, 14381568, 9657904, 3680757, -20181635, 7843316, -31400660, 1370708, 29794553, -1409300}, - }, - { - FieldElement{14499471, -2729599, -33191113, -4254652, 28494862, 14271267, 30290735, 10876454, -33154098, 2381726}, - FieldElement{-7195431, -2655363, -14730155, 462251, -27724326, 3941372, -6236617, 3696005, -32300832, 15351955}, - FieldElement{27431194, 8222322, 16448760, -3907995, -18707002, 11938355, -32961401, -2970515, 29551813, 10109425}, - }, - }, - { - { - FieldElement{-13657040, -13155431, -31283750, 11777098, 21447386, 6519384, -2378284, -1627556, 10092783, -4764171}, - FieldElement{27939166, 14210322, 4677035, 16277044, -22964462, -12398139, -32508754, 12005538, -17810127, 12803510}, - FieldElement{17228999, -15661624, -1233527, 300140, -1224870, -11714777, 30364213, -9038194, 18016357, 4397660}, - }, - { - FieldElement{-10958843, -7690207, 4776341, -14954238, 27850028, -15602212, -26619106, 14544525, -17477504, 982639}, - FieldElement{29253598, 15796703, -2863982, -9908884, 10057023, 3163536, 7332899, -4120128, -21047696, 9934963}, - FieldElement{5793303, 16271923, -24131614, -10116404, 29188560, 1206517, -14747930, 4559895, -30123922, -10897950}, - }, - { - FieldElement{-27643952, -11493006, 16282657, -11036493, 28414021, -15012264, 24191034, 4541697, -13338309, 5500568}, - FieldElement{12650548, -1497113, 9052871, 11355358, -17680037, -8400164, -17430592, 12264343, 10874051, 13524335}, - FieldElement{25556948, -3045990, 714651, 2510400, 23394682, -10415330, 33119038, 5080568, -22528059, 5376628}, - }, - { - FieldElement{-26088264, -4011052, -17013699, -3537628, -6726793, 1920897, -22321305, -9447443, 4535768, 1569007}, - FieldElement{-2255422, 14606630, -21692440, -8039818, 28430649, 8775819, -30494562, 3044290, 31848280, 12543772}, - FieldElement{-22028579, 2943893, -31857513, 6777306, 13784462, -4292203, -27377195, -2062731, 7718482, 14474653}, - }, - { - FieldElement{2385315, 2454213, -22631320, 46603, -4437935, -15680415, 656965, -7236665, 24316168, -5253567}, - FieldElement{13741529, 10911568, -33233417, -8603737, -20177830, -1033297, 33040651, -13424532, -20729456, 8321686}, - FieldElement{21060490, -2212744, 15712757, -4336099, 1639040, 10656336, 23845965, -11874838, -9984458, 608372}, - }, - { - FieldElement{-13672732, -15087586, -10889693, -7557059, -6036909, 11305547, 1123968, -6780577, 27229399, 23887}, - FieldElement{-23244140, -294205, -11744728, 14712571, -29465699, -2029617, 12797024, -6440308, -1633405, 16678954}, - FieldElement{-29500620, 4770662, -16054387, 14001338, 7830047, 9564805, -1508144, -4795045, -17169265, 4904953}, - }, - { - FieldElement{24059557, 14617003, 19037157, -15039908, 19766093, -14906429, 5169211, 16191880, 2128236, -4326833}, - FieldElement{-16981152, 4124966, -8540610, -10653797, 30336522, -14105247, -29806336, 916033, -6882542, -2986532}, - FieldElement{-22630907, 12419372, -7134229, -7473371, -16478904, 16739175, 285431, 2763829, 15736322, 4143876}, - }, - { - FieldElement{2379352, 11839345, -4110402, -5988665, 11274298, 794957, 212801, -14594663, 23527084, -16458268}, - FieldElement{33431127, -11130478, -17838966, -15626900, 8909499, 8376530, -32625340, 4087881, -15188911, -14416214}, - FieldElement{1767683, 7197987, -13205226, -2022635, -13091350, 448826, 5799055, 4357868, -4774191, -16323038}, - }, - }, - { - { - FieldElement{6721966, 13833823, -23523388, -1551314, 26354293, -11863321, 23365147, -3949732, 7390890, 2759800}, - FieldElement{4409041, 2052381, 23373853, 10530217, 7676779, -12885954, 21302353, -4264057, 1244380, -12919645}, - FieldElement{-4421239, 7169619, 4982368, -2957590, 30256825, -2777540, 14086413, 9208236, 15886429, 16489664}, - }, - { - FieldElement{1996075, 10375649, 14346367, 13311202, -6874135, -16438411, -13693198, 398369, -30606455, -712933}, - FieldElement{-25307465, 9795880, -2777414, 14878809, -33531835, 14780363, 13348553, 12076947, -30836462, 5113182}, - FieldElement{-17770784, 11797796, 31950843, 13929123, -25888302, 12288344, -30341101, -7336386, 13847711, 5387222}, - }, - { - FieldElement{-18582163, -3416217, 17824843, -2340966, 22744343, -10442611, 8763061, 3617786, -19600662, 10370991}, - FieldElement{20246567, -14369378, 22358229, -543712, 18507283, -10413996, 14554437, -8746092, 32232924, 16763880}, - FieldElement{9648505, 10094563, 26416693, 14745928, -30374318, -6472621, 11094161, 15689506, 3140038, -16510092}, - }, - { - FieldElement{-16160072, 5472695, 31895588, 4744994, 8823515, 10365685, -27224800, 9448613, -28774454, 366295}, - FieldElement{19153450, 11523972, -11096490, -6503142, -24647631, 5420647, 28344573, 8041113, 719605, 11671788}, - FieldElement{8678025, 2694440, -6808014, 2517372, 4964326, 11152271, -15432916, -15266516, 27000813, -10195553}, - }, - { - FieldElement{-15157904, 7134312, 8639287, -2814877, -7235688, 10421742, 564065, 5336097, 6750977, -14521026}, - FieldElement{11836410, -3979488, 26297894, 16080799, 23455045, 15735944, 1695823, -8819122, 8169720, 16220347}, - FieldElement{-18115838, 8653647, 17578566, -6092619, -8025777, -16012763, -11144307, -2627664, -5990708, -14166033}, - }, - { - FieldElement{-23308498, -10968312, 15213228, -10081214, -30853605, -11050004, 27884329, 2847284, 2655861, 1738395}, - FieldElement{-27537433, -14253021, -25336301, -8002780, -9370762, 8129821, 21651608, -3239336, -19087449, -11005278}, - FieldElement{1533110, 3437855, 23735889, 459276, 29970501, 11335377, 26030092, 5821408, 10478196, 8544890}, - }, - { - FieldElement{32173121, -16129311, 24896207, 3921497, 22579056, -3410854, 19270449, 12217473, 17789017, -3395995}, - FieldElement{-30552961, -2228401, -15578829, -10147201, 13243889, 517024, 15479401, -3853233, 30460520, 1052596}, - FieldElement{-11614875, 13323618, 32618793, 8175907, -15230173, 12596687, 27491595, -4612359, 3179268, -9478891}, - }, - { - FieldElement{31947069, -14366651, -4640583, -15339921, -15125977, -6039709, -14756777, -16411740, 19072640, -9511060}, - FieldElement{11685058, 11822410, 3158003, -13952594, 33402194, -4165066, 5977896, -5215017, 473099, 5040608}, - FieldElement{-20290863, 8198642, -27410132, 11602123, 1290375, -2799760, 28326862, 1721092, -19558642, -3131606}, - }, - }, - { - { - FieldElement{7881532, 10687937, 7578723, 7738378, -18951012, -2553952, 21820786, 8076149, -27868496, 11538389}, - FieldElement{-19935666, 3899861, 18283497, -6801568, -15728660, -11249211, 8754525, 7446702, -5676054, 5797016}, - FieldElement{-11295600, -3793569, -15782110, -7964573, 12708869, -8456199, 2014099, -9050574, -2369172, -5877341}, - }, - { - FieldElement{-22472376, -11568741, -27682020, 1146375, 18956691, 16640559, 1192730, -3714199, 15123619, 10811505}, - FieldElement{14352098, -3419715, -18942044, 10822655, 32750596, 4699007, -70363, 15776356, -28886779, -11974553}, - FieldElement{-28241164, -8072475, -4978962, -5315317, 29416931, 1847569, -20654173, -16484855, 4714547, -9600655}, - }, - { - FieldElement{15200332, 8368572, 19679101, 15970074, -31872674, 1959451, 24611599, -4543832, -11745876, 12340220}, - FieldElement{12876937, -10480056, 33134381, 6590940, -6307776, 14872440, 9613953, 8241152, 15370987, 9608631}, - FieldElement{-4143277, -12014408, 8446281, -391603, 4407738, 13629032, -7724868, 15866074, -28210621, -8814099}, - }, - { - FieldElement{26660628, -15677655, 8393734, 358047, -7401291, 992988, -23904233, 858697, 20571223, 8420556}, - FieldElement{14620715, 13067227, -15447274, 8264467, 14106269, 15080814, 33531827, 12516406, -21574435, -12476749}, - FieldElement{236881, 10476226, 57258, -14677024, 6472998, 2466984, 17258519, 7256740, 8791136, 15069930}, - }, - { - FieldElement{1276410, -9371918, 22949635, -16322807, -23493039, -5702186, 14711875, 4874229, -30663140, -2331391}, - FieldElement{5855666, 4990204, -13711848, 7294284, -7804282, 1924647, -1423175, -7912378, -33069337, 9234253}, - FieldElement{20590503, -9018988, 31529744, -7352666, -2706834, 10650548, 31559055, -11609587, 18979186, 13396066}, - }, - { - FieldElement{24474287, 4968103, 22267082, 4407354, 24063882, -8325180, -18816887, 13594782, 33514650, 7021958}, - FieldElement{-11566906, -6565505, -21365085, 15928892, -26158305, 4315421, -25948728, -3916677, -21480480, 12868082}, - FieldElement{-28635013, 13504661, 19988037, -2132761, 21078225, 6443208, -21446107, 2244500, -12455797, -8089383}, - }, - { - FieldElement{-30595528, 13793479, -5852820, 319136, -25723172, -6263899, 33086546, 8957937, -15233648, 5540521}, - FieldElement{-11630176, -11503902, -8119500, -7643073, 2620056, 1022908, -23710744, -1568984, -16128528, -14962807}, - FieldElement{23152971, 775386, 27395463, 14006635, -9701118, 4649512, 1689819, 892185, -11513277, -15205948}, - }, - { - FieldElement{9770129, 9586738, 26496094, 4324120, 1556511, -3550024, 27453819, 4763127, -19179614, 5867134}, - FieldElement{-32765025, 1927590, 31726409, -4753295, 23962434, -16019500, 27846559, 5931263, -29749703, -16108455}, - FieldElement{27461885, -2977536, 22380810, 1815854, -23033753, -3031938, 7283490, -15148073, -19526700, 7734629}, - }, - }, - { - { - FieldElement{-8010264, -9590817, -11120403, 6196038, 29344158, -13430885, 7585295, -3176626, 18549497, 15302069}, - FieldElement{-32658337, -6171222, -7672793, -11051681, 6258878, 13504381, 10458790, -6418461, -8872242, 8424746}, - FieldElement{24687205, 8613276, -30667046, -3233545, 1863892, -1830544, 19206234, 7134917, -11284482, -828919}, - }, - { - FieldElement{11334899, -9218022, 8025293, 12707519, 17523892, -10476071, 10243738, -14685461, -5066034, 16498837}, - FieldElement{8911542, 6887158, -9584260, -6958590, 11145641, -9543680, 17303925, -14124238, 6536641, 10543906}, - FieldElement{-28946384, 15479763, -17466835, 568876, -1497683, 11223454, -2669190, -16625574, -27235709, 8876771}, - }, - { - FieldElement{-25742899, -12566864, -15649966, -846607, -33026686, -796288, -33481822, 15824474, -604426, -9039817}, - FieldElement{10330056, 70051, 7957388, -9002667, 9764902, 15609756, 27698697, -4890037, 1657394, 3084098}, - FieldElement{10477963, -7470260, 12119566, -13250805, 29016247, -5365589, 31280319, 14396151, -30233575, 15272409}, - }, - { - FieldElement{-12288309, 3169463, 28813183, 16658753, 25116432, -5630466, -25173957, -12636138, -25014757, 1950504}, - FieldElement{-26180358, 9489187, 11053416, -14746161, -31053720, 5825630, -8384306, -8767532, 15341279, 8373727}, - FieldElement{28685821, 7759505, -14378516, -12002860, -31971820, 4079242, 298136, -10232602, -2878207, 15190420}, - }, - { - FieldElement{-32932876, 13806336, -14337485, -15794431, -24004620, 10940928, 8669718, 2742393, -26033313, -6875003}, - FieldElement{-1580388, -11729417, -25979658, -11445023, -17411874, -10912854, 9291594, -16247779, -12154742, 6048605}, - FieldElement{-30305315, 14843444, 1539301, 11864366, 20201677, 1900163, 13934231, 5128323, 11213262, 9168384}, - }, - { - FieldElement{-26280513, 11007847, 19408960, -940758, -18592965, -4328580, -5088060, -11105150, 20470157, -16398701}, - FieldElement{-23136053, 9282192, 14855179, -15390078, -7362815, -14408560, -22783952, 14461608, 14042978, 5230683}, - FieldElement{29969567, -2741594, -16711867, -8552442, 9175486, -2468974, 21556951, 3506042, -5933891, -12449708}, - }, - { - FieldElement{-3144746, 8744661, 19704003, 4581278, -20430686, 6830683, -21284170, 8971513, -28539189, 15326563}, - FieldElement{-19464629, 10110288, -17262528, -3503892, -23500387, 1355669, -15523050, 15300988, -20514118, 9168260}, - FieldElement{-5353335, 4488613, -23803248, 16314347, 7780487, -15638939, -28948358, 9601605, 33087103, -9011387}, - }, - { - FieldElement{-19443170, -15512900, -20797467, -12445323, -29824447, 10229461, -27444329, -15000531, -5996870, 15664672}, - FieldElement{23294591, -16632613, -22650781, -8470978, 27844204, 11461195, 13099750, -2460356, 18151676, 13417686}, - FieldElement{-24722913, -4176517, -31150679, 5988919, -26858785, 6685065, 1661597, -12551441, 15271676, -15452665}, - }, - }, - { - { - FieldElement{11433042, -13228665, 8239631, -5279517, -1985436, -725718, -18698764, 2167544, -6921301, -13440182}, - FieldElement{-31436171, 15575146, 30436815, 12192228, -22463353, 9395379, -9917708, -8638997, 12215110, 12028277}, - FieldElement{14098400, 6555944, 23007258, 5757252, -15427832, -12950502, 30123440, 4617780, -16900089, -655628}, - }, - { - FieldElement{-4026201, -15240835, 11893168, 13718664, -14809462, 1847385, -15819999, 10154009, 23973261, -12684474}, - FieldElement{-26531820, -3695990, -1908898, 2534301, -31870557, -16550355, 18341390, -11419951, 32013174, -10103539}, - FieldElement{-25479301, 10876443, -11771086, -14625140, -12369567, 1838104, 21911214, 6354752, 4425632, -837822}, - }, - { - FieldElement{-10433389, -14612966, 22229858, -3091047, -13191166, 776729, -17415375, -12020462, 4725005, 14044970}, - FieldElement{19268650, -7304421, 1555349, 8692754, -21474059, -9910664, 6347390, -1411784, -19522291, -16109756}, - FieldElement{-24864089, 12986008, -10898878, -5558584, -11312371, -148526, 19541418, 8180106, 9282262, 10282508}, - }, - { - FieldElement{-26205082, 4428547, -8661196, -13194263, 4098402, -14165257, 15522535, 8372215, 5542595, -10702683}, - FieldElement{-10562541, 14895633, 26814552, -16673850, -17480754, -2489360, -2781891, 6993761, -18093885, 10114655}, - FieldElement{-20107055, -929418, 31422704, 10427861, -7110749, 6150669, -29091755, -11529146, 25953725, -106158}, - }, - { - FieldElement{-4234397, -8039292, -9119125, 3046000, 2101609, -12607294, 19390020, 6094296, -3315279, 12831125}, - FieldElement{-15998678, 7578152, 5310217, 14408357, -33548620, -224739, 31575954, 6326196, 7381791, -2421839}, - FieldElement{-20902779, 3296811, 24736065, -16328389, 18374254, 7318640, 6295303, 8082724, -15362489, 12339664}, - }, - { - FieldElement{27724736, 2291157, 6088201, -14184798, 1792727, 5857634, 13848414, 15768922, 25091167, 14856294}, - FieldElement{-18866652, 8331043, 24373479, 8541013, -701998, -9269457, 12927300, -12695493, -22182473, -9012899}, - FieldElement{-11423429, -5421590, 11632845, 3405020, 30536730, -11674039, -27260765, 13866390, 30146206, 9142070}, - }, - { - FieldElement{3924129, -15307516, -13817122, -10054960, 12291820, -668366, -27702774, 9326384, -8237858, 4171294}, - FieldElement{-15921940, 16037937, 6713787, 16606682, -21612135, 2790944, 26396185, 3731949, 345228, -5462949}, - FieldElement{-21327538, 13448259, 25284571, 1143661, 20614966, -8849387, 2031539, -12391231, -16253183, -13582083}, - }, - { - FieldElement{31016211, -16722429, 26371392, -14451233, -5027349, 14854137, 17477601, 3842657, 28012650, -16405420}, - FieldElement{-5075835, 9368966, -8562079, -4600902, -15249953, 6970560, -9189873, 16292057, -8867157, 3507940}, - FieldElement{29439664, 3537914, 23333589, 6997794, -17555561, -11018068, -15209202, -15051267, -9164929, 6580396}, - }, - }, - { - { - FieldElement{-12185861, -7679788, 16438269, 10826160, -8696817, -6235611, 17860444, -9273846, -2095802, 9304567}, - FieldElement{20714564, -4336911, 29088195, 7406487, 11426967, -5095705, 14792667, -14608617, 5289421, -477127}, - FieldElement{-16665533, -10650790, -6160345, -13305760, 9192020, -1802462, 17271490, 12349094, 26939669, -3752294}, - }, - { - FieldElement{-12889898, 9373458, 31595848, 16374215, 21471720, 13221525, -27283495, -12348559, -3698806, 117887}, - FieldElement{22263325, -6560050, 3984570, -11174646, -15114008, -566785, 28311253, 5358056, -23319780, 541964}, - FieldElement{16259219, 3261970, 2309254, -15534474, -16885711, -4581916, 24134070, -16705829, -13337066, -13552195}, - }, - { - FieldElement{9378160, -13140186, -22845982, -12745264, 28198281, -7244098, -2399684, -717351, 690426, 14876244}, - FieldElement{24977353, -314384, -8223969, -13465086, 28432343, -1176353, -13068804, -12297348, -22380984, 6618999}, - FieldElement{-1538174, 11685646, 12944378, 13682314, -24389511, -14413193, 8044829, -13817328, 32239829, -5652762}, - }, - { - FieldElement{-18603066, 4762990, -926250, 8885304, -28412480, -3187315, 9781647, -10350059, 32779359, 5095274}, - FieldElement{-33008130, -5214506, -32264887, -3685216, 9460461, -9327423, -24601656, 14506724, 21639561, -2630236}, - FieldElement{-16400943, -13112215, 25239338, 15531969, 3987758, -4499318, -1289502, -6863535, 17874574, 558605}, - }, - { - FieldElement{-13600129, 10240081, 9171883, 16131053, -20869254, 9599700, 33499487, 5080151, 2085892, 5119761}, - FieldElement{-22205145, -2519528, -16381601, 414691, -25019550, 2170430, 30634760, -8363614, -31999993, -5759884}, - FieldElement{-6845704, 15791202, 8550074, -1312654, 29928809, -12092256, 27534430, -7192145, -22351378, 12961482}, - }, - { - FieldElement{-24492060, -9570771, 10368194, 11582341, -23397293, -2245287, 16533930, 8206996, -30194652, -5159638}, - FieldElement{-11121496, -3382234, 2307366, 6362031, -135455, 8868177, -16835630, 7031275, 7589640, 8945490}, - FieldElement{-32152748, 8917967, 6661220, -11677616, -1192060, -15793393, 7251489, -11182180, 24099109, -14456170}, - }, - { - FieldElement{5019558, -7907470, 4244127, -14714356, -26933272, 6453165, -19118182, -13289025, -6231896, -10280736}, - FieldElement{10853594, 10721687, 26480089, 5861829, -22995819, 1972175, -1866647, -10557898, -3363451, -6441124}, - FieldElement{-17002408, 5906790, 221599, -6563147, 7828208, -13248918, 24362661, -2008168, -13866408, 7421392}, - }, - { - FieldElement{8139927, -6546497, 32257646, -5890546, 30375719, 1886181, -21175108, 15441252, 28826358, -4123029}, - FieldElement{6267086, 9695052, 7709135, -16603597, -32869068, -1886135, 14795160, -7840124, 13746021, -1742048}, - FieldElement{28584902, 7787108, -6732942, -15050729, 22846041, -7571236, -3181936, -363524, 4771362, -8419958}, - }, - }, - { - { - FieldElement{24949256, 6376279, -27466481, -8174608, -18646154, -9930606, 33543569, -12141695, 3569627, 11342593}, - FieldElement{26514989, 4740088, 27912651, 3697550, 19331575, -11472339, 6809886, 4608608, 7325975, -14801071}, - FieldElement{-11618399, -14554430, -24321212, 7655128, -1369274, 5214312, -27400540, 10258390, -17646694, -8186692}, - }, - { - FieldElement{11431204, 15823007, 26570245, 14329124, 18029990, 4796082, -31446179, 15580664, 9280358, -3973687}, - FieldElement{-160783, -10326257, -22855316, -4304997, -20861367, -13621002, -32810901, -11181622, -15545091, 4387441}, - FieldElement{-20799378, 12194512, 3937617, -5805892, -27154820, 9340370, -24513992, 8548137, 20617071, -7482001}, - }, - { - FieldElement{-938825, -3930586, -8714311, 16124718, 24603125, -6225393, -13775352, -11875822, 24345683, 10325460}, - FieldElement{-19855277, -1568885, -22202708, 8714034, 14007766, 6928528, 16318175, -1010689, 4766743, 3552007}, - FieldElement{-21751364, -16730916, 1351763, -803421, -4009670, 3950935, 3217514, 14481909, 10988822, -3994762}, - }, - { - FieldElement{15564307, -14311570, 3101243, 5684148, 30446780, -8051356, 12677127, -6505343, -8295852, 13296005}, - FieldElement{-9442290, 6624296, -30298964, -11913677, -4670981, -2057379, 31521204, 9614054, -30000824, 12074674}, - FieldElement{4771191, -135239, 14290749, -13089852, 27992298, 14998318, -1413936, -1556716, 29832613, -16391035}, - }, - { - FieldElement{7064884, -7541174, -19161962, -5067537, -18891269, -2912736, 25825242, 5293297, -27122660, 13101590}, - FieldElement{-2298563, 2439670, -7466610, 1719965, -27267541, -16328445, 32512469, -5317593, -30356070, -4190957}, - FieldElement{-30006540, 10162316, -33180176, 3981723, -16482138, -13070044, 14413974, 9515896, 19568978, 9628812}, - }, - { - FieldElement{33053803, 199357, 15894591, 1583059, 27380243, -4580435, -17838894, -6106839, -6291786, 3437740}, - FieldElement{-18978877, 3884493, 19469877, 12726490, 15913552, 13614290, -22961733, 70104, 7463304, 4176122}, - FieldElement{-27124001, 10659917, 11482427, -16070381, 12771467, -6635117, -32719404, -5322751, 24216882, 5944158}, - }, - { - FieldElement{8894125, 7450974, -2664149, -9765752, -28080517, -12389115, 19345746, 14680796, 11632993, 5847885}, - FieldElement{26942781, -2315317, 9129564, -4906607, 26024105, 11769399, -11518837, 6367194, -9727230, 4782140}, - FieldElement{19916461, -4828410, -22910704, -11414391, 25606324, -5972441, 33253853, 8220911, 6358847, -1873857}, - }, - { - FieldElement{801428, -2081702, 16569428, 11065167, 29875704, 96627, 7908388, -4480480, -13538503, 1387155}, - FieldElement{19646058, 5720633, -11416706, 12814209, 11607948, 12749789, 14147075, 15156355, -21866831, 11835260}, - FieldElement{19299512, 1155910, 28703737, 14890794, 2925026, 7269399, 26121523, 15467869, -26560550, 5052483}, - }, - }, - { - { - FieldElement{-3017432, 10058206, 1980837, 3964243, 22160966, 12322533, -6431123, -12618185, 12228557, -7003677}, - FieldElement{32944382, 14922211, -22844894, 5188528, 21913450, -8719943, 4001465, 13238564, -6114803, 8653815}, - FieldElement{22865569, -4652735, 27603668, -12545395, 14348958, 8234005, 24808405, 5719875, 28483275, 2841751}, - }, - { - FieldElement{-16420968, -1113305, -327719, -12107856, 21886282, -15552774, -1887966, -315658, 19932058, -12739203}, - FieldElement{-11656086, 10087521, -8864888, -5536143, -19278573, -3055912, 3999228, 13239134, -4777469, -13910208}, - FieldElement{1382174, -11694719, 17266790, 9194690, -13324356, 9720081, 20403944, 11284705, -14013818, 3093230}, - }, - { - FieldElement{16650921, -11037932, -1064178, 1570629, -8329746, 7352753, -302424, 16271225, -24049421, -6691850}, - FieldElement{-21911077, -5927941, -4611316, -5560156, -31744103, -10785293, 24123614, 15193618, -21652117, -16739389}, - FieldElement{-9935934, -4289447, -25279823, 4372842, 2087473, 10399484, 31870908, 14690798, 17361620, 11864968}, - }, - { - FieldElement{-11307610, 6210372, 13206574, 5806320, -29017692, -13967200, -12331205, -7486601, -25578460, -16240689}, - FieldElement{14668462, -12270235, 26039039, 15305210, 25515617, 4542480, 10453892, 6577524, 9145645, -6443880}, - FieldElement{5974874, 3053895, -9433049, -10385191, -31865124, 3225009, -7972642, 3936128, -5652273, -3050304}, - }, - { - FieldElement{30625386, -4729400, -25555961, -12792866, -20484575, 7695099, 17097188, -16303496, -27999779, 1803632}, - FieldElement{-3553091, 9865099, -5228566, 4272701, -5673832, -16689700, 14911344, 12196514, -21405489, 7047412}, - FieldElement{20093277, 9920966, -11138194, -5343857, 13161587, 12044805, -32856851, 4124601, -32343828, -10257566}, - }, - { - FieldElement{-20788824, 14084654, -13531713, 7842147, 19119038, -13822605, 4752377, -8714640, -21679658, 2288038}, - FieldElement{-26819236, -3283715, 29965059, 3039786, -14473765, 2540457, 29457502, 14625692, -24819617, 12570232}, - FieldElement{-1063558, -11551823, 16920318, 12494842, 1278292, -5869109, -21159943, -3498680, -11974704, 4724943}, - }, - { - FieldElement{17960970, -11775534, -4140968, -9702530, -8876562, -1410617, -12907383, -8659932, -29576300, 1903856}, - FieldElement{23134274, -14279132, -10681997, -1611936, 20684485, 15770816, -12989750, 3190296, 26955097, 14109738}, - FieldElement{15308788, 5320727, -30113809, -14318877, 22902008, 7767164, 29425325, -11277562, 31960942, 11934971}, - }, - { - FieldElement{-27395711, 8435796, 4109644, 12222639, -24627868, 14818669, 20638173, 4875028, 10491392, 1379718}, - FieldElement{-13159415, 9197841, 3875503, -8936108, -1383712, -5879801, 33518459, 16176658, 21432314, 12180697}, - FieldElement{-11787308, 11500838, 13787581, -13832590, -22430679, 10140205, 1465425, 12689540, -10301319, -13872883}, - }, - }, - { - { - FieldElement{5414091, -15386041, -21007664, 9643570, 12834970, 1186149, -2622916, -1342231, 26128231, 6032912}, - FieldElement{-26337395, -13766162, 32496025, -13653919, 17847801, -12669156, 3604025, 8316894, -25875034, -10437358}, - FieldElement{3296484, 6223048, 24680646, -12246460, -23052020, 5903205, -8862297, -4639164, 12376617, 3188849}, - }, - { - FieldElement{29190488, -14659046, 27549113, -1183516, 3520066, -10697301, 32049515, -7309113, -16109234, -9852307}, - FieldElement{-14744486, -9309156, 735818, -598978, -20407687, -5057904, 25246078, -15795669, 18640741, -960977}, - FieldElement{-6928835, -16430795, 10361374, 5642961, 4910474, 12345252, -31638386, -494430, 10530747, 1053335}, - }, - { - FieldElement{-29265967, -14186805, -13538216, -12117373, -19457059, -10655384, -31462369, -2948985, 24018831, 15026644}, - FieldElement{-22592535, -3145277, -2289276, 5953843, -13440189, 9425631, 25310643, 13003497, -2314791, -15145616}, - FieldElement{-27419985, -603321, -8043984, -1669117, -26092265, 13987819, -27297622, 187899, -23166419, -2531735}, - }, - { - FieldElement{-21744398, -13810475, 1844840, 5021428, -10434399, -15911473, 9716667, 16266922, -5070217, 726099}, - FieldElement{29370922, -6053998, 7334071, -15342259, 9385287, 2247707, -13661962, -4839461, 30007388, -15823341}, - FieldElement{-936379, 16086691, 23751945, -543318, -1167538, -5189036, 9137109, 730663, 9835848, 4555336}, - }, - { - FieldElement{-23376435, 1410446, -22253753, -12899614, 30867635, 15826977, 17693930, 544696, -11985298, 12422646}, - FieldElement{31117226, -12215734, -13502838, 6561947, -9876867, -12757670, -5118685, -4096706, 29120153, 13924425}, - FieldElement{-17400879, -14233209, 19675799, -2734756, -11006962, -5858820, -9383939, -11317700, 7240931, -237388}, - }, - { - FieldElement{-31361739, -11346780, -15007447, -5856218, -22453340, -12152771, 1222336, 4389483, 3293637, -15551743}, - FieldElement{-16684801, -14444245, 11038544, 11054958, -13801175, -3338533, -24319580, 7733547, 12796905, -6335822}, - FieldElement{-8759414, -10817836, -25418864, 10783769, -30615557, -9746811, -28253339, 3647836, 3222231, -11160462}, - }, - { - FieldElement{18606113, 1693100, -25448386, -15170272, 4112353, 10045021, 23603893, -2048234, -7550776, 2484985}, - FieldElement{9255317, -3131197, -12156162, -1004256, 13098013, -9214866, 16377220, -2102812, -19802075, -3034702}, - FieldElement{-22729289, 7496160, -5742199, 11329249, 19991973, -3347502, -31718148, 9936966, -30097688, -10618797}, - }, - { - FieldElement{21878590, -5001297, 4338336, 13643897, -3036865, 13160960, 19708896, 5415497, -7360503, -4109293}, - FieldElement{27736861, 10103576, 12500508, 8502413, -3413016, -9633558, 10436918, -1550276, -23659143, -8132100}, - FieldElement{19492550, -12104365, -29681976, -852630, -3208171, 12403437, 30066266, 8367329, 13243957, 8709688}, - }, - }, - { - { - FieldElement{12015105, 2801261, 28198131, 10151021, 24818120, -4743133, -11194191, -5645734, 5150968, 7274186}, - FieldElement{2831366, -12492146, 1478975, 6122054, 23825128, -12733586, 31097299, 6083058, 31021603, -9793610}, - FieldElement{-2529932, -2229646, 445613, 10720828, -13849527, -11505937, -23507731, 16354465, 15067285, -14147707}, - }, - { - FieldElement{7840942, 14037873, -33364863, 15934016, -728213, -3642706, 21403988, 1057586, -19379462, -12403220}, - FieldElement{915865, -16469274, 15608285, -8789130, -24357026, 6060030, -17371319, 8410997, -7220461, 16527025}, - FieldElement{32922597, -556987, 20336074, -16184568, 10903705, -5384487, 16957574, 52992, 23834301, 6588044}, - }, - { - FieldElement{32752030, 11232950, 3381995, -8714866, 22652988, -10744103, 17159699, 16689107, -20314580, -1305992}, - FieldElement{-4689649, 9166776, -25710296, -10847306, 11576752, 12733943, 7924251, -2752281, 1976123, -7249027}, - FieldElement{21251222, 16309901, -2983015, -6783122, 30810597, 12967303, 156041, -3371252, 12331345, -8237197}, - }, - { - FieldElement{8651614, -4477032, -16085636, -4996994, 13002507, 2950805, 29054427, -5106970, 10008136, -4667901}, - FieldElement{31486080, 15114593, -14261250, 12951354, 14369431, -7387845, 16347321, -13662089, 8684155, -10532952}, - FieldElement{19443825, 11385320, 24468943, -9659068, -23919258, 2187569, -26263207, -6086921, 31316348, 14219878}, - }, - { - FieldElement{-28594490, 1193785, 32245219, 11392485, 31092169, 15722801, 27146014, 6992409, 29126555, 9207390}, - FieldElement{32382935, 1110093, 18477781, 11028262, -27411763, -7548111, -4980517, 10843782, -7957600, -14435730}, - FieldElement{2814918, 7836403, 27519878, -7868156, -20894015, -11553689, -21494559, 8550130, 28346258, 1994730}, - }, - { - FieldElement{-19578299, 8085545, -14000519, -3948622, 2785838, -16231307, -19516951, 7174894, 22628102, 8115180}, - FieldElement{-30405132, 955511, -11133838, -15078069, -32447087, -13278079, -25651578, 3317160, -9943017, 930272}, - FieldElement{-15303681, -6833769, 28856490, 1357446, 23421993, 1057177, 24091212, -1388970, -22765376, -10650715}, - }, - { - FieldElement{-22751231, -5303997, -12907607, -12768866, -15811511, -7797053, -14839018, -16554220, -1867018, 8398970}, - FieldElement{-31969310, 2106403, -4736360, 1362501, 12813763, 16200670, 22981545, -6291273, 18009408, -15772772}, - FieldElement{-17220923, -9545221, -27784654, 14166835, 29815394, 7444469, 29551787, -3727419, 19288549, 1325865}, - }, - { - FieldElement{15100157, -15835752, -23923978, -1005098, -26450192, 15509408, 12376730, -3479146, 33166107, -8042750}, - FieldElement{20909231, 13023121, -9209752, 16251778, -5778415, -8094914, 12412151, 10018715, 2213263, -13878373}, - FieldElement{32529814, -11074689, 30361439, -16689753, -9135940, 1513226, 22922121, 6382134, -5766928, 8371348}, - }, - }, - { - { - FieldElement{9923462, 11271500, 12616794, 3544722, -29998368, -1721626, 12891687, -8193132, -26442943, 10486144}, - FieldElement{-22597207, -7012665, 8587003, -8257861, 4084309, -12970062, 361726, 2610596, -23921530, -11455195}, - FieldElement{5408411, -1136691, -4969122, 10561668, 24145918, 14240566, 31319731, -4235541, 19985175, -3436086}, - }, - { - FieldElement{-13994457, 16616821, 14549246, 3341099, 32155958, 13648976, -17577068, 8849297, 65030, 8370684}, - FieldElement{-8320926, -12049626, 31204563, 5839400, -20627288, -1057277, -19442942, 6922164, 12743482, -9800518}, - FieldElement{-2361371, 12678785, 28815050, 4759974, -23893047, 4884717, 23783145, 11038569, 18800704, 255233}, - }, - { - FieldElement{-5269658, -1773886, 13957886, 7990715, 23132995, 728773, 13393847, 9066957, 19258688, -14753793}, - FieldElement{-2936654, -10827535, -10432089, 14516793, -3640786, 4372541, -31934921, 2209390, -1524053, 2055794}, - FieldElement{580882, 16705327, 5468415, -2683018, -30926419, -14696000, -7203346, -8994389, -30021019, 7394435}, - }, - { - FieldElement{23838809, 1822728, -15738443, 15242727, 8318092, -3733104, -21672180, -3492205, -4821741, 14799921}, - FieldElement{13345610, 9759151, 3371034, -16137791, 16353039, 8577942, 31129804, 13496856, -9056018, 7402518}, - FieldElement{2286874, -4435931, -20042458, -2008336, -13696227, 5038122, 11006906, -15760352, 8205061, 1607563}, - }, - { - FieldElement{14414086, -8002132, 3331830, -3208217, 22249151, -5594188, 18364661, -2906958, 30019587, -9029278}, - FieldElement{-27688051, 1585953, -10775053, 931069, -29120221, -11002319, -14410829, 12029093, 9944378, 8024}, - FieldElement{4368715, -3709630, 29874200, -15022983, -20230386, -11410704, -16114594, -999085, -8142388, 5640030}, - }, - { - FieldElement{10299610, 13746483, 11661824, 16234854, 7630238, 5998374, 9809887, -16694564, 15219798, -14327783}, - FieldElement{27425505, -5719081, 3055006, 10660664, 23458024, 595578, -15398605, -1173195, -18342183, 9742717}, - FieldElement{6744077, 2427284, 26042789, 2720740, -847906, 1118974, 32324614, 7406442, 12420155, 1994844}, - }, - { - FieldElement{14012521, -5024720, -18384453, -9578469, -26485342, -3936439, -13033478, -10909803, 24319929, -6446333}, - FieldElement{16412690, -4507367, 10772641, 15929391, -17068788, -4658621, 10555945, -10484049, -30102368, -4739048}, - FieldElement{22397382, -7767684, -9293161, -12792868, 17166287, -9755136, -27333065, 6199366, 21880021, -12250760}, - }, - { - FieldElement{-4283307, 5368523, -31117018, 8163389, -30323063, 3209128, 16557151, 8890729, 8840445, 4957760}, - FieldElement{-15447727, 709327, -6919446, -10870178, -29777922, 6522332, -21720181, 12130072, -14796503, 5005757}, - FieldElement{-2114751, -14308128, 23019042, 15765735, -25269683, 6002752, 10183197, -13239326, -16395286, -2176112}, - }, - }, - { - { - FieldElement{-19025756, 1632005, 13466291, -7995100, -23640451, 16573537, -32013908, -3057104, 22208662, 2000468}, - FieldElement{3065073, -1412761, -25598674, -361432, -17683065, -5703415, -8164212, 11248527, -3691214, -7414184}, - FieldElement{10379208, -6045554, 8877319, 1473647, -29291284, -12507580, 16690915, 2553332, -3132688, 16400289}, - }, - { - FieldElement{15716668, 1254266, -18472690, 7446274, -8448918, 6344164, -22097271, -7285580, 26894937, 9132066}, - FieldElement{24158887, 12938817, 11085297, -8177598, -28063478, -4457083, -30576463, 64452, -6817084, -2692882}, - FieldElement{13488534, 7794716, 22236231, 5989356, 25426474, -12578208, 2350710, -3418511, -4688006, 2364226}, - }, - { - FieldElement{16335052, 9132434, 25640582, 6678888, 1725628, 8517937, -11807024, -11697457, 15445875, -7798101}, - FieldElement{29004207, -7867081, 28661402, -640412, -12794003, -7943086, 31863255, -4135540, -278050, -15759279}, - FieldElement{-6122061, -14866665, -28614905, 14569919, -10857999, -3591829, 10343412, -6976290, -29828287, -10815811}, - }, - { - FieldElement{27081650, 3463984, 14099042, -4517604, 1616303, -6205604, 29542636, 15372179, 17293797, 960709}, - FieldElement{20263915, 11434237, -5765435, 11236810, 13505955, -10857102, -16111345, 6493122, -19384511, 7639714}, - FieldElement{-2830798, -14839232, 25403038, -8215196, -8317012, -16173699, 18006287, -16043750, 29994677, -15808121}, - }, - { - FieldElement{9769828, 5202651, -24157398, -13631392, -28051003, -11561624, -24613141, -13860782, -31184575, 709464}, - FieldElement{12286395, 13076066, -21775189, -1176622, -25003198, 4057652, -32018128, -8890874, 16102007, 13205847}, - FieldElement{13733362, 5599946, 10557076, 3195751, -5557991, 8536970, -25540170, 8525972, 10151379, 10394400}, - }, - { - FieldElement{4024660, -16137551, 22436262, 12276534, -9099015, -2686099, 19698229, 11743039, -33302334, 8934414}, - FieldElement{-15879800, -4525240, -8580747, -2934061, 14634845, -698278, -9449077, 3137094, -11536886, 11721158}, - FieldElement{17555939, -5013938, 8268606, 2331751, -22738815, 9761013, 9319229, 8835153, -9205489, -1280045}, - }, - { - FieldElement{-461409, -7830014, 20614118, 16688288, -7514766, -4807119, 22300304, 505429, 6108462, -6183415}, - FieldElement{-5070281, 12367917, -30663534, 3234473, 32617080, -8422642, 29880583, -13483331, -26898490, -7867459}, - FieldElement{-31975283, 5726539, 26934134, 10237677, -3173717, -605053, 24199304, 3795095, 7592688, -14992079}, - }, - { - FieldElement{21594432, -14964228, 17466408, -4077222, 32537084, 2739898, 6407723, 12018833, -28256052, 4298412}, - FieldElement{-20650503, -11961496, -27236275, 570498, 3767144, -1717540, 13891942, -1569194, 13717174, 10805743}, - FieldElement{-14676630, -15644296, 15287174, 11927123, 24177847, -8175568, -796431, 14860609, -26938930, -5863836}, - }, - }, - { - { - FieldElement{12962541, 5311799, -10060768, 11658280, 18855286, -7954201, 13286263, -12808704, -4381056, 9882022}, - FieldElement{18512079, 11319350, -20123124, 15090309, 18818594, 5271736, -22727904, 3666879, -23967430, -3299429}, - FieldElement{-6789020, -3146043, 16192429, 13241070, 15898607, -14206114, -10084880, -6661110, -2403099, 5276065}, - }, - { - FieldElement{30169808, -5317648, 26306206, -11750859, 27814964, 7069267, 7152851, 3684982, 1449224, 13082861}, - FieldElement{10342826, 3098505, 2119311, 193222, 25702612, 12233820, 23697382, 15056736, -21016438, -8202000}, - FieldElement{-33150110, 3261608, 22745853, 7948688, 19370557, -15177665, -26171976, 6482814, -10300080, -11060101}, - }, - { - FieldElement{32869458, -5408545, 25609743, 15678670, -10687769, -15471071, 26112421, 2521008, -22664288, 6904815}, - FieldElement{29506923, 4457497, 3377935, -9796444, -30510046, 12935080, 1561737, 3841096, -29003639, -6657642}, - FieldElement{10340844, -6630377, -18656632, -2278430, 12621151, -13339055, 30878497, -11824370, -25584551, 5181966}, - }, - { - FieldElement{25940115, -12658025, 17324188, -10307374, -8671468, 15029094, 24396252, -16450922, -2322852, -12388574}, - FieldElement{-21765684, 9916823, -1300409, 4079498, -1028346, 11909559, 1782390, 12641087, 20603771, -6561742}, - FieldElement{-18882287, -11673380, 24849422, 11501709, 13161720, -4768874, 1925523, 11914390, 4662781, 7820689}, - }, - { - FieldElement{12241050, -425982, 8132691, 9393934, 32846760, -1599620, 29749456, 12172924, 16136752, 15264020}, - FieldElement{-10349955, -14680563, -8211979, 2330220, -17662549, -14545780, 10658213, 6671822, 19012087, 3772772}, - FieldElement{3753511, -3421066, 10617074, 2028709, 14841030, -6721664, 28718732, -15762884, 20527771, 12988982}, - }, - { - FieldElement{-14822485, -5797269, -3707987, 12689773, -898983, -10914866, -24183046, -10564943, 3299665, -12424953}, - FieldElement{-16777703, -15253301, -9642417, 4978983, 3308785, 8755439, 6943197, 6461331, -25583147, 8991218}, - FieldElement{-17226263, 1816362, -1673288, -6086439, 31783888, -8175991, -32948145, 7417950, -30242287, 1507265}, - }, - { - FieldElement{29692663, 6829891, -10498800, 4334896, 20945975, -11906496, -28887608, 8209391, 14606362, -10647073}, - FieldElement{-3481570, 8707081, 32188102, 5672294, 22096700, 1711240, -33020695, 9761487, 4170404, -2085325}, - FieldElement{-11587470, 14855945, -4127778, -1531857, -26649089, 15084046, 22186522, 16002000, -14276837, -8400798}, - }, - { - FieldElement{-4811456, 13761029, -31703877, -2483919, -3312471, 7869047, -7113572, -9620092, 13240845, 10965870}, - FieldElement{-7742563, -8256762, -14768334, -13656260, -23232383, 12387166, 4498947, 14147411, 29514390, 4302863}, - FieldElement{-13413405, -12407859, 20757302, -13801832, 14785143, 8976368, -5061276, -2144373, 17846988, -13971927}, - }, - }, - { - { - FieldElement{-2244452, -754728, -4597030, -1066309, -6247172, 1455299, -21647728, -9214789, -5222701, 12650267}, - FieldElement{-9906797, -16070310, 21134160, 12198166, -27064575, 708126, 387813, 13770293, -19134326, 10958663}, - FieldElement{22470984, 12369526, 23446014, -5441109, -21520802, -9698723, -11772496, -11574455, -25083830, 4271862}, - }, - { - FieldElement{-25169565, -10053642, -19909332, 15361595, -5984358, 2159192, 75375, -4278529, -32526221, 8469673}, - FieldElement{15854970, 4148314, -8893890, 7259002, 11666551, 13824734, -30531198, 2697372, 24154791, -9460943}, - FieldElement{15446137, -15806644, 29759747, 14019369, 30811221, -9610191, -31582008, 12840104, 24913809, 9815020}, - }, - { - FieldElement{-4709286, -5614269, -31841498, -12288893, -14443537, 10799414, -9103676, 13438769, 18735128, 9466238}, - FieldElement{11933045, 9281483, 5081055, -5183824, -2628162, -4905629, -7727821, -10896103, -22728655, 16199064}, - FieldElement{14576810, 379472, -26786533, -8317236, -29426508, -10812974, -102766, 1876699, 30801119, 2164795}, - }, - { - FieldElement{15995086, 3199873, 13672555, 13712240, -19378835, -4647646, -13081610, -15496269, -13492807, 1268052}, - FieldElement{-10290614, -3659039, -3286592, 10948818, 23037027, 3794475, -3470338, -12600221, -17055369, 3565904}, - FieldElement{29210088, -9419337, -5919792, -4952785, 10834811, -13327726, -16512102, -10820713, -27162222, -14030531}, - }, - { - FieldElement{-13161890, 15508588, 16663704, -8156150, -28349942, 9019123, -29183421, -3769423, 2244111, -14001979}, - FieldElement{-5152875, -3800936, -9306475, -6071583, 16243069, 14684434, -25673088, -16180800, 13491506, 4641841}, - FieldElement{10813417, 643330, -19188515, -728916, 30292062, -16600078, 27548447, -7721242, 14476989, -12767431}, - }, - { - FieldElement{10292079, 9984945, 6481436, 8279905, -7251514, 7032743, 27282937, -1644259, -27912810, 12651324}, - FieldElement{-31185513, -813383, 22271204, 11835308, 10201545, 15351028, 17099662, 3988035, 21721536, -3148940}, - FieldElement{10202177, -6545839, -31373232, -9574638, -32150642, -8119683, -12906320, 3852694, 13216206, 14842320}, - }, - { - FieldElement{-15815640, -10601066, -6538952, -7258995, -6984659, -6581778, -31500847, 13765824, -27434397, 9900184}, - FieldElement{14465505, -13833331, -32133984, -14738873, -27443187, 12990492, 33046193, 15796406, -7051866, -8040114}, - FieldElement{30924417, -8279620, 6359016, -12816335, 16508377, 9071735, -25488601, 15413635, 9524356, -7018878}, - }, - { - FieldElement{12274201, -13175547, 32627641, -1785326, 6736625, 13267305, 5237659, -5109483, 15663516, 4035784}, - FieldElement{-2951309, 8903985, 17349946, 601635, -16432815, -4612556, -13732739, -15889334, -22258478, 4659091}, - FieldElement{-16916263, -4952973, -30393711, -15158821, 20774812, 15897498, 5736189, 15026997, -2178256, -13455585}, - }, - }, - { - { - FieldElement{-8858980, -2219056, 28571666, -10155518, -474467, -10105698, -3801496, 278095, 23440562, -290208}, - FieldElement{10226241, -5928702, 15139956, 120818, -14867693, 5218603, 32937275, 11551483, -16571960, -7442864}, - FieldElement{17932739, -12437276, -24039557, 10749060, 11316803, 7535897, 22503767, 5561594, -3646624, 3898661}, - }, - { - FieldElement{7749907, -969567, -16339731, -16464, -25018111, 15122143, -1573531, 7152530, 21831162, 1245233}, - FieldElement{26958459, -14658026, 4314586, 8346991, -5677764, 11960072, -32589295, -620035, -30402091, -16716212}, - FieldElement{-12165896, 9166947, 33491384, 13673479, 29787085, 13096535, 6280834, 14587357, -22338025, 13987525}, - }, - { - FieldElement{-24349909, 7778775, 21116000, 15572597, -4833266, -5357778, -4300898, -5124639, -7469781, -2858068}, - FieldElement{9681908, -6737123, -31951644, 13591838, -6883821, 386950, 31622781, 6439245, -14581012, 4091397}, - FieldElement{-8426427, 1470727, -28109679, -1596990, 3978627, -5123623, -19622683, 12092163, 29077877, -14741988}, - }, - { - FieldElement{5269168, -6859726, -13230211, -8020715, 25932563, 1763552, -5606110, -5505881, -20017847, 2357889}, - FieldElement{32264008, -15407652, -5387735, -1160093, -2091322, -3946900, 23104804, -12869908, 5727338, 189038}, - FieldElement{14609123, -8954470, -6000566, -16622781, -14577387, -7743898, -26745169, 10942115, -25888931, -14884697}, - }, - { - FieldElement{20513500, 5557931, -15604613, 7829531, 26413943, -2019404, -21378968, 7471781, 13913677, -5137875}, - FieldElement{-25574376, 11967826, 29233242, 12948236, -6754465, 4713227, -8940970, 14059180, 12878652, 8511905}, - FieldElement{-25656801, 3393631, -2955415, -7075526, -2250709, 9366908, -30223418, 6812974, 5568676, -3127656}, - }, - { - FieldElement{11630004, 12144454, 2116339, 13606037, 27378885, 15676917, -17408753, -13504373, -14395196, 8070818}, - FieldElement{27117696, -10007378, -31282771, -5570088, 1127282, 12772488, -29845906, 10483306, -11552749, -1028714}, - FieldElement{10637467, -5688064, 5674781, 1072708, -26343588, -6982302, -1683975, 9177853, -27493162, 15431203}, - }, - { - FieldElement{20525145, 10892566, -12742472, 12779443, -29493034, 16150075, -28240519, 14943142, -15056790, -7935931}, - FieldElement{-30024462, 5626926, -551567, -9981087, 753598, 11981191, 25244767, -3239766, -3356550, 9594024}, - FieldElement{-23752644, 2636870, -5163910, -10103818, 585134, 7877383, 11345683, -6492290, 13352335, -10977084}, - }, - { - FieldElement{-1931799, -5407458, 3304649, -12884869, 17015806, -4877091, -29783850, -7752482, -13215537, -319204}, - FieldElement{20239939, 6607058, 6203985, 3483793, -18386976, -779229, -20723742, 15077870, -22750759, 14523817}, - FieldElement{27406042, -6041657, 27423596, -4497394, 4996214, 10002360, -28842031, -4545494, -30172742, -4805667}, - }, - }, - { - { - FieldElement{11374242, 12660715, 17861383, -12540833, 10935568, 1099227, -13886076, -9091740, -27727044, 11358504}, - FieldElement{-12730809, 10311867, 1510375, 10778093, -2119455, -9145702, 32676003, 11149336, -26123651, 4985768}, - FieldElement{-19096303, 341147, -6197485, -239033, 15756973, -8796662, -983043, 13794114, -19414307, -15621255}, - }, - { - FieldElement{6490081, 11940286, 25495923, -7726360, 8668373, -8751316, 3367603, 6970005, -1691065, -9004790}, - FieldElement{1656497, 13457317, 15370807, 6364910, 13605745, 8362338, -19174622, -5475723, -16796596, -5031438}, - FieldElement{-22273315, -13524424, -64685, -4334223, -18605636, -10921968, -20571065, -7007978, -99853, -10237333}, - }, - { - FieldElement{17747465, 10039260, 19368299, -4050591, -20630635, -16041286, 31992683, -15857976, -29260363, -5511971}, - FieldElement{31932027, -4986141, -19612382, 16366580, 22023614, 88450, 11371999, -3744247, 4882242, -10626905}, - FieldElement{29796507, 37186, 19818052, 10115756, -11829032, 3352736, 18551198, 3272828, -5190932, -4162409}, - }, - { - FieldElement{12501286, 4044383, -8612957, -13392385, -32430052, 5136599, -19230378, -3529697, 330070, -3659409}, - FieldElement{6384877, 2899513, 17807477, 7663917, -2358888, 12363165, 25366522, -8573892, -271295, 12071499}, - FieldElement{-8365515, -4042521, 25133448, -4517355, -6211027, 2265927, -32769618, 1936675, -5159697, 3829363}, - }, - { - FieldElement{28425966, -5835433, -577090, -4697198, -14217555, 6870930, 7921550, -6567787, 26333140, 14267664}, - FieldElement{-11067219, 11871231, 27385719, -10559544, -4585914, -11189312, 10004786, -8709488, -21761224, 8930324}, - FieldElement{-21197785, -16396035, 25654216, -1725397, 12282012, 11008919, 1541940, 4757911, -26491501, -16408940}, - }, - { - FieldElement{13537262, -7759490, -20604840, 10961927, -5922820, -13218065, -13156584, 6217254, -15943699, 13814990}, - FieldElement{-17422573, 15157790, 18705543, 29619, 24409717, -260476, 27361681, 9257833, -1956526, -1776914}, - FieldElement{-25045300, -10191966, 15366585, 15166509, -13105086, 8423556, -29171540, 12361135, -18685978, 4578290}, - }, - { - FieldElement{24579768, 3711570, 1342322, -11180126, -27005135, 14124956, -22544529, 14074919, 21964432, 8235257}, - FieldElement{-6528613, -2411497, 9442966, -5925588, 12025640, -1487420, -2981514, -1669206, 13006806, 2355433}, - FieldElement{-16304899, -13605259, -6632427, -5142349, 16974359, -10911083, 27202044, 1719366, 1141648, -12796236}, - }, - { - FieldElement{-12863944, -13219986, -8318266, -11018091, -6810145, -4843894, 13475066, -3133972, 32674895, 13715045}, - FieldElement{11423335, -5468059, 32344216, 8962751, 24989809, 9241752, -13265253, 16086212, -28740881, -15642093}, - FieldElement{-1409668, 12530728, -6368726, 10847387, 19531186, -14132160, -11709148, 7791794, -27245943, 4383347}, - }, - }, - { - { - FieldElement{-28970898, 5271447, -1266009, -9736989, -12455236, 16732599, -4862407, -4906449, 27193557, 6245191}, - FieldElement{-15193956, 5362278, -1783893, 2695834, 4960227, 12840725, 23061898, 3260492, 22510453, 8577507}, - FieldElement{-12632451, 11257346, -32692994, 13548177, -721004, 10879011, 31168030, 13952092, -29571492, -3635906}, - }, - { - FieldElement{3877321, -9572739, 32416692, 5405324, -11004407, -13656635, 3759769, 11935320, 5611860, 8164018}, - FieldElement{-16275802, 14667797, 15906460, 12155291, -22111149, -9039718, 32003002, -8832289, 5773085, -8422109}, - FieldElement{-23788118, -8254300, 1950875, 8937633, 18686727, 16459170, -905725, 12376320, 31632953, 190926}, - }, - { - FieldElement{-24593607, -16138885, -8423991, 13378746, 14162407, 6901328, -8288749, 4508564, -25341555, -3627528}, - FieldElement{8884438, -5884009, 6023974, 10104341, -6881569, -4941533, 18722941, -14786005, -1672488, 827625}, - FieldElement{-32720583, -16289296, -32503547, 7101210, 13354605, 2659080, -1800575, -14108036, -24878478, 1541286}, - }, - { - FieldElement{2901347, -1117687, 3880376, -10059388, -17620940, -3612781, -21802117, -3567481, 20456845, -1885033}, - FieldElement{27019610, 12299467, -13658288, -1603234, -12861660, -4861471, -19540150, -5016058, 29439641, 15138866}, - FieldElement{21536104, -6626420, -32447818, -10690208, -22408077, 5175814, -5420040, -16361163, 7779328, 109896}, - }, - { - FieldElement{30279744, 14648750, -8044871, 6425558, 13639621, -743509, 28698390, 12180118, 23177719, -554075}, - FieldElement{26572847, 3405927, -31701700, 12890905, -19265668, 5335866, -6493768, 2378492, 4439158, -13279347}, - FieldElement{-22716706, 3489070, -9225266, -332753, 18875722, -1140095, 14819434, -12731527, -17717757, -5461437}, - }, - { - FieldElement{-5056483, 16566551, 15953661, 3767752, -10436499, 15627060, -820954, 2177225, 8550082, -15114165}, - FieldElement{-18473302, 16596775, -381660, 15663611, 22860960, 15585581, -27844109, -3582739, -23260460, -8428588}, - FieldElement{-32480551, 15707275, -8205912, -5652081, 29464558, 2713815, -22725137, 15860482, -21902570, 1494193}, - }, - { - FieldElement{-19562091, -14087393, -25583872, -9299552, 13127842, 759709, 21923482, 16529112, 8742704, 12967017}, - FieldElement{-28464899, 1553205, 32536856, -10473729, -24691605, -406174, -8914625, -2933896, -29903758, 15553883}, - FieldElement{21877909, 3230008, 9881174, 10539357, -4797115, 2841332, 11543572, 14513274, 19375923, -12647961}, - }, - { - FieldElement{8832269, -14495485, 13253511, 5137575, 5037871, 4078777, 24880818, -6222716, 2862653, 9455043}, - FieldElement{29306751, 5123106, 20245049, -14149889, 9592566, 8447059, -2077124, -2990080, 15511449, 4789663}, - FieldElement{-20679756, 7004547, 8824831, -9434977, -4045704, -3750736, -5754762, 108893, 23513200, 16652362}, - }, - }, - { - { - FieldElement{-33256173, 4144782, -4476029, -6579123, 10770039, -7155542, -6650416, -12936300, -18319198, 10212860}, - FieldElement{2756081, 8598110, 7383731, -6859892, 22312759, -1105012, 21179801, 2600940, -9988298, -12506466}, - FieldElement{-24645692, 13317462, -30449259, -15653928, 21365574, -10869657, 11344424, 864440, -2499677, -16710063}, - }, - { - FieldElement{-26432803, 6148329, -17184412, -14474154, 18782929, -275997, -22561534, 211300, 2719757, 4940997}, - FieldElement{-1323882, 3911313, -6948744, 14759765, -30027150, 7851207, 21690126, 8518463, 26699843, 5276295}, - FieldElement{-13149873, -6429067, 9396249, 365013, 24703301, -10488939, 1321586, 149635, -15452774, 7159369}, - }, - { - FieldElement{9987780, -3404759, 17507962, 9505530, 9731535, -2165514, 22356009, 8312176, 22477218, -8403385}, - FieldElement{18155857, -16504990, 19744716, 9006923, 15154154, -10538976, 24256460, -4864995, -22548173, 9334109}, - FieldElement{2986088, -4911893, 10776628, -3473844, 10620590, -7083203, -21413845, 14253545, -22587149, 536906}, - }, - { - FieldElement{4377756, 8115836, 24567078, 15495314, 11625074, 13064599, 7390551, 10589625, 10838060, -15420424}, - FieldElement{-19342404, 867880, 9277171, -3218459, -14431572, -1986443, 19295826, -15796950, 6378260, 699185}, - FieldElement{7895026, 4057113, -7081772, -13077756, -17886831, -323126, -716039, 15693155, -5045064, -13373962}, - }, - { - FieldElement{-7737563, -5869402, -14566319, -7406919, 11385654, 13201616, 31730678, -10962840, -3918636, -9669325}, - FieldElement{10188286, -15770834, -7336361, 13427543, 22223443, 14896287, 30743455, 7116568, -21786507, 5427593}, - FieldElement{696102, 13206899, 27047647, -10632082, 15285305, -9853179, 10798490, -4578720, 19236243, 12477404}, - }, - { - FieldElement{-11229439, 11243796, -17054270, -8040865, -788228, -8167967, -3897669, 11180504, -23169516, 7733644}, - FieldElement{17800790, -14036179, -27000429, -11766671, 23887827, 3149671, 23466177, -10538171, 10322027, 15313801}, - FieldElement{26246234, 11968874, 32263343, -5468728, 6830755, -13323031, -15794704, -101982, -24449242, 10890804}, - }, - { - FieldElement{-31365647, 10271363, -12660625, -6267268, 16690207, -13062544, -14982212, 16484931, 25180797, -5334884}, - FieldElement{-586574, 10376444, -32586414, -11286356, 19801893, 10997610, 2276632, 9482883, 316878, 13820577}, - FieldElement{-9882808, -4510367, -2115506, 16457136, -11100081, 11674996, 30756178, -7515054, 30696930, -3712849}, - }, - { - FieldElement{32988917, -9603412, 12499366, 7910787, -10617257, -11931514, -7342816, -9985397, -32349517, 7392473}, - FieldElement{-8855661, 15927861, 9866406, -3649411, -2396914, -16655781, -30409476, -9134995, 25112947, -2926644}, - FieldElement{-2504044, -436966, 25621774, -5678772, 15085042, -5479877, -24884878, -13526194, 5537438, -13914319}, - }, - }, - { - { - FieldElement{-11225584, 2320285, -9584280, 10149187, -33444663, 5808648, -14876251, -1729667, 31234590, 6090599}, - FieldElement{-9633316, 116426, 26083934, 2897444, -6364437, -2688086, 609721, 15878753, -6970405, -9034768}, - FieldElement{-27757857, 247744, -15194774, -9002551, 23288161, -10011936, -23869595, 6503646, 20650474, 1804084}, - }, - { - FieldElement{-27589786, 15456424, 8972517, 8469608, 15640622, 4439847, 3121995, -10329713, 27842616, -202328}, - FieldElement{-15306973, 2839644, 22530074, 10026331, 4602058, 5048462, 28248656, 5031932, -11375082, 12714369}, - FieldElement{20807691, -7270825, 29286141, 11421711, -27876523, -13868230, -21227475, 1035546, -19733229, 12796920}, - }, - { - FieldElement{12076899, -14301286, -8785001, -11848922, -25012791, 16400684, -17591495, -12899438, 3480665, -15182815}, - FieldElement{-32361549, 5457597, 28548107, 7833186, 7303070, -11953545, -24363064, -15921875, -33374054, 2771025}, - FieldElement{-21389266, 421932, 26597266, 6860826, 22486084, -6737172, -17137485, -4210226, -24552282, 15673397}, - }, - { - FieldElement{-20184622, 2338216, 19788685, -9620956, -4001265, -8740893, -20271184, 4733254, 3727144, -12934448}, - FieldElement{6120119, 814863, -11794402, -622716, 6812205, -15747771, 2019594, 7975683, 31123697, -10958981}, - FieldElement{30069250, -11435332, 30434654, 2958439, 18399564, -976289, 12296869, 9204260, -16432438, 9648165}, - }, - { - FieldElement{32705432, -1550977, 30705658, 7451065, -11805606, 9631813, 3305266, 5248604, -26008332, -11377501}, - FieldElement{17219865, 2375039, -31570947, -5575615, -19459679, 9219903, 294711, 15298639, 2662509, -16297073}, - FieldElement{-1172927, -7558695, -4366770, -4287744, -21346413, -8434326, 32087529, -1222777, 32247248, -14389861}, - }, - { - FieldElement{14312628, 1221556, 17395390, -8700143, -4945741, -8684635, -28197744, -9637817, -16027623, -13378845}, - FieldElement{-1428825, -9678990, -9235681, 6549687, -7383069, -468664, 23046502, 9803137, 17597934, 2346211}, - FieldElement{18510800, 15337574, 26171504, 981392, -22241552, 7827556, -23491134, -11323352, 3059833, -11782870}, - }, - { - FieldElement{10141598, 6082907, 17829293, -1947643, 9830092, 13613136, -25556636, -5544586, -33502212, 3592096}, - FieldElement{33114168, -15889352, -26525686, -13343397, 33076705, 8716171, 1151462, 1521897, -982665, -6837803}, - FieldElement{-32939165, -4255815, 23947181, -324178, -33072974, -12305637, -16637686, 3891704, 26353178, 693168}, - }, - { - FieldElement{30374239, 1595580, -16884039, 13186931, 4600344, 406904, 9585294, -400668, 31375464, 14369965}, - FieldElement{-14370654, -7772529, 1510301, 6434173, -18784789, -6262728, 32732230, -13108839, 17901441, 16011505}, - FieldElement{18171223, -11934626, -12500402, 15197122, -11038147, -15230035, -19172240, -16046376, 8764035, 12309598}, - }, - }, - { - { - FieldElement{5975908, -5243188, -19459362, -9681747, -11541277, 14015782, -23665757, 1228319, 17544096, -10593782}, - FieldElement{5811932, -1715293, 3442887, -2269310, -18367348, -8359541, -18044043, -15410127, -5565381, 12348900}, - FieldElement{-31399660, 11407555, 25755363, 6891399, -3256938, 14872274, -24849353, 8141295, -10632534, -585479}, - }, - { - FieldElement{-12675304, 694026, -5076145, 13300344, 14015258, -14451394, -9698672, -11329050, 30944593, 1130208}, - FieldElement{8247766, -6710942, -26562381, -7709309, -14401939, -14648910, 4652152, 2488540, 23550156, -271232}, - FieldElement{17294316, -3788438, 7026748, 15626851, 22990044, 113481, 2267737, -5908146, -408818, -137719}, - }, - { - FieldElement{16091085, -16253926, 18599252, 7340678, 2137637, -1221657, -3364161, 14550936, 3260525, -7166271}, - FieldElement{-4910104, -13332887, 18550887, 10864893, -16459325, -7291596, -23028869, -13204905, -12748722, 2701326}, - FieldElement{-8574695, 16099415, 4629974, -16340524, -20786213, -6005432, -10018363, 9276971, 11329923, 1862132}, - }, - { - FieldElement{14763076, -15903608, -30918270, 3689867, 3511892, 10313526, -21951088, 12219231, -9037963, -940300}, - FieldElement{8894987, -3446094, 6150753, 3013931, 301220, 15693451, -31981216, -2909717, -15438168, 11595570}, - FieldElement{15214962, 3537601, -26238722, -14058872, 4418657, -15230761, 13947276, 10730794, -13489462, -4363670}, - }, - { - FieldElement{-2538306, 7682793, 32759013, 263109, -29984731, -7955452, -22332124, -10188635, 977108, 699994}, - FieldElement{-12466472, 4195084, -9211532, 550904, -15565337, 12917920, 19118110, -439841, -30534533, -14337913}, - FieldElement{31788461, -14507657, 4799989, 7372237, 8808585, -14747943, 9408237, -10051775, 12493932, -5409317}, - }, - { - FieldElement{-25680606, 5260744, -19235809, -6284470, -3695942, 16566087, 27218280, 2607121, 29375955, 6024730}, - FieldElement{842132, -2794693, -4763381, -8722815, 26332018, -12405641, 11831880, 6985184, -9940361, 2854096}, - FieldElement{-4847262, -7969331, 2516242, -5847713, 9695691, -7221186, 16512645, 960770, 12121869, 16648078}, - }, - { - FieldElement{-15218652, 14667096, -13336229, 2013717, 30598287, -464137, -31504922, -7882064, 20237806, 2838411}, - FieldElement{-19288047, 4453152, 15298546, -16178388, 22115043, -15972604, 12544294, -13470457, 1068881, -12499905}, - FieldElement{-9558883, -16518835, 33238498, 13506958, 30505848, -1114596, -8486907, -2630053, 12521378, 4845654}, - }, - { - FieldElement{-28198521, 10744108, -2958380, 10199664, 7759311, -13088600, 3409348, -873400, -6482306, -12885870}, - FieldElement{-23561822, 6230156, -20382013, 10655314, -24040585, -11621172, 10477734, -1240216, -3113227, 13974498}, - FieldElement{12966261, 15550616, -32038948, -1615346, 21025980, -629444, 5642325, 7188737, 18895762, 12629579}, - }, - }, - { - { - FieldElement{14741879, -14946887, 22177208, -11721237, 1279741, 8058600, 11758140, 789443, 32195181, 3895677}, - FieldElement{10758205, 15755439, -4509950, 9243698, -4879422, 6879879, -2204575, -3566119, -8982069, 4429647}, - FieldElement{-2453894, 15725973, -20436342, -10410672, -5803908, -11040220, -7135870, -11642895, 18047436, -15281743}, - }, - { - FieldElement{-25173001, -11307165, 29759956, 11776784, -22262383, -15820455, 10993114, -12850837, -17620701, -9408468}, - FieldElement{21987233, 700364, -24505048, 14972008, -7774265, -5718395, 32155026, 2581431, -29958985, 8773375}, - FieldElement{-25568350, 454463, -13211935, 16126715, 25240068, 8594567, 20656846, 12017935, -7874389, -13920155}, - }, - { - FieldElement{6028182, 6263078, -31011806, -11301710, -818919, 2461772, -31841174, -5468042, -1721788, -2776725}, - FieldElement{-12278994, 16624277, 987579, -5922598, 32908203, 1248608, 7719845, -4166698, 28408820, 6816612}, - FieldElement{-10358094, -8237829, 19549651, -12169222, 22082623, 16147817, 20613181, 13982702, -10339570, 5067943}, - }, - { - FieldElement{-30505967, -3821767, 12074681, 13582412, -19877972, 2443951, -19719286, 12746132, 5331210, -10105944}, - FieldElement{30528811, 3601899, -1957090, 4619785, -27361822, -15436388, 24180793, -12570394, 27679908, -1648928}, - FieldElement{9402404, -13957065, 32834043, 10838634, -26580150, -13237195, 26653274, -8685565, 22611444, -12715406}, - }, - { - FieldElement{22190590, 1118029, 22736441, 15130463, -30460692, -5991321, 19189625, -4648942, 4854859, 6622139}, - FieldElement{-8310738, -2953450, -8262579, -3388049, -10401731, -271929, 13424426, -3567227, 26404409, 13001963}, - FieldElement{-31241838, -15415700, -2994250, 8939346, 11562230, -12840670, -26064365, -11621720, -15405155, 11020693}, - }, - { - FieldElement{1866042, -7949489, -7898649, -10301010, 12483315, 13477547, 3175636, -12424163, 28761762, 1406734}, - FieldElement{-448555, -1777666, 13018551, 3194501, -9580420, -11161737, 24760585, -4347088, 25577411, -13378680}, - FieldElement{-24290378, 4759345, -690653, -1852816, 2066747, 10693769, -29595790, 9884936, -9368926, 4745410}, - }, - { - FieldElement{-9141284, 6049714, -19531061, -4341411, -31260798, 9944276, -15462008, -11311852, 10931924, -11931931}, - FieldElement{-16561513, 14112680, -8012645, 4817318, -8040464, -11414606, -22853429, 10856641, -20470770, 13434654}, - FieldElement{22759489, -10073434, -16766264, -1871422, 13637442, -10168091, 1765144, -12654326, 28445307, -5364710}, - }, - { - FieldElement{29875063, 12493613, 2795536, -3786330, 1710620, 15181182, -10195717, -8788675, 9074234, 1167180}, - FieldElement{-26205683, 11014233, -9842651, -2635485, -26908120, 7532294, -18716888, -9535498, 3843903, 9367684}, - FieldElement{-10969595, -6403711, 9591134, 9582310, 11349256, 108879, 16235123, 8601684, -139197, 4242895}, - }, - }, - { - { - FieldElement{22092954, -13191123, -2042793, -11968512, 32186753, -11517388, -6574341, 2470660, -27417366, 16625501}, - FieldElement{-11057722, 3042016, 13770083, -9257922, 584236, -544855, -7770857, 2602725, -27351616, 14247413}, - FieldElement{6314175, -10264892, -32772502, 15957557, -10157730, 168750, -8618807, 14290061, 27108877, -1180880}, - }, - { - FieldElement{-8586597, -7170966, 13241782, 10960156, -32991015, -13794596, 33547976, -11058889, -27148451, 981874}, - FieldElement{22833440, 9293594, -32649448, -13618667, -9136966, 14756819, -22928859, -13970780, -10479804, -16197962}, - FieldElement{-7768587, 3326786, -28111797, 10783824, 19178761, 14905060, 22680049, 13906969, -15933690, 3797899}, - }, - { - FieldElement{21721356, -4212746, -12206123, 9310182, -3882239, -13653110, 23740224, -2709232, 20491983, -8042152}, - FieldElement{9209270, -15135055, -13256557, -6167798, -731016, 15289673, 25947805, 15286587, 30997318, -6703063}, - FieldElement{7392032, 16618386, 23946583, -8039892, -13265164, -1533858, -14197445, -2321576, 17649998, -250080}, - }, - { - FieldElement{-9301088, -14193827, 30609526, -3049543, -25175069, -1283752, -15241566, -9525724, -2233253, 7662146}, - FieldElement{-17558673, 1763594, -33114336, 15908610, -30040870, -12174295, 7335080, -8472199, -3174674, 3440183}, - FieldElement{-19889700, -5977008, -24111293, -9688870, 10799743, -16571957, 40450, -4431835, 4862400, 1133}, - }, - { - FieldElement{-32856209, -7873957, -5422389, 14860950, -16319031, 7956142, 7258061, 311861, -30594991, -7379421}, - FieldElement{-3773428, -1565936, 28985340, 7499440, 24445838, 9325937, 29727763, 16527196, 18278453, 15405622}, - FieldElement{-4381906, 8508652, -19898366, -3674424, -5984453, 15149970, -13313598, 843523, -21875062, 13626197}, - }, - { - FieldElement{2281448, -13487055, -10915418, -2609910, 1879358, 16164207, -10783882, 3953792, 13340839, 15928663}, - FieldElement{31727126, -7179855, -18437503, -8283652, 2875793, -16390330, -25269894, -7014826, -23452306, 5964753}, - FieldElement{4100420, -5959452, -17179337, 6017714, -18705837, 12227141, -26684835, 11344144, 2538215, -7570755}, - }, - { - FieldElement{-9433605, 6123113, 11159803, -2156608, 30016280, 14966241, -20474983, 1485421, -629256, -15958862}, - FieldElement{-26804558, 4260919, 11851389, 9658551, -32017107, 16367492, -20205425, -13191288, 11659922, -11115118}, - FieldElement{26180396, 10015009, -30844224, -8581293, 5418197, 9480663, 2231568, -10170080, 33100372, -1306171}, - }, - { - FieldElement{15121113, -5201871, -10389905, 15427821, -27509937, -15992507, 21670947, 4486675, -5931810, -14466380}, - FieldElement{16166486, -9483733, -11104130, 6023908, -31926798, -1364923, 2340060, -16254968, -10735770, -10039824}, - FieldElement{28042865, -3557089, -12126526, 12259706, -3717498, -6945899, 6766453, -8689599, 18036436, 5803270}, - }, - }, - { - { - FieldElement{-817581, 6763912, 11803561, 1585585, 10958447, -2671165, 23855391, 4598332, -6159431, -14117438}, - FieldElement{-31031306, -14256194, 17332029, -2383520, 31312682, -5967183, 696309, 50292, -20095739, 11763584}, - FieldElement{-594563, -2514283, -32234153, 12643980, 12650761, 14811489, 665117, -12613632, -19773211, -10713562}, - }, - { - FieldElement{30464590, -11262872, -4127476, -12734478, 19835327, -7105613, -24396175, 2075773, -17020157, 992471}, - FieldElement{18357185, -6994433, 7766382, 16342475, -29324918, 411174, 14578841, 8080033, -11574335, -10601610}, - FieldElement{19598397, 10334610, 12555054, 2555664, 18821899, -10339780, 21873263, 16014234, 26224780, 16452269}, - }, - { - FieldElement{-30223925, 5145196, 5944548, 16385966, 3976735, 2009897, -11377804, -7618186, -20533829, 3698650}, - FieldElement{14187449, 3448569, -10636236, -10810935, -22663880, -3433596, 7268410, -10890444, 27394301, 12015369}, - FieldElement{19695761, 16087646, 28032085, 12999827, 6817792, 11427614, 20244189, -1312777, -13259127, -3402461}, - }, - { - FieldElement{30860103, 12735208, -1888245, -4699734, -16974906, 2256940, -8166013, 12298312, -8550524, -10393462}, - FieldElement{-5719826, -11245325, -1910649, 15569035, 26642876, -7587760, -5789354, -15118654, -4976164, 12651793}, - FieldElement{-2848395, 9953421, 11531313, -5282879, 26895123, -12697089, -13118820, -16517902, 9768698, -2533218}, - }, - { - FieldElement{-24719459, 1894651, -287698, -4704085, 15348719, -8156530, 32767513, 12765450, 4940095, 10678226}, - FieldElement{18860224, 15980149, -18987240, -1562570, -26233012, -11071856, -7843882, 13944024, -24372348, 16582019}, - FieldElement{-15504260, 4970268, -29893044, 4175593, -20993212, -2199756, -11704054, 15444560, -11003761, 7989037}, - }, - { - FieldElement{31490452, 5568061, -2412803, 2182383, -32336847, 4531686, -32078269, 6200206, -19686113, -14800171}, - FieldElement{-17308668, -15879940, -31522777, -2831, -32887382, 16375549, 8680158, -16371713, 28550068, -6857132}, - FieldElement{-28126887, -5688091, 16837845, -1820458, -6850681, 12700016, -30039981, 4364038, 1155602, 5988841}, - }, - { - FieldElement{21890435, -13272907, -12624011, 12154349, -7831873, 15300496, 23148983, -4470481, 24618407, 8283181}, - FieldElement{-33136107, -10512751, 9975416, 6841041, -31559793, 16356536, 3070187, -7025928, 1466169, 10740210}, - FieldElement{-1509399, -15488185, -13503385, -10655916, 32799044, 909394, -13938903, -5779719, -32164649, -15327040}, - }, - { - FieldElement{3960823, -14267803, -28026090, -15918051, -19404858, 13146868, 15567327, 951507, -3260321, -573935}, - FieldElement{24740841, 5052253, -30094131, 8961361, 25877428, 6165135, -24368180, 14397372, -7380369, -6144105}, - FieldElement{-28888365, 3510803, -28103278, -1158478, -11238128, -10631454, -15441463, -14453128, -1625486, -6494814}, - }, - }, - { - { - FieldElement{793299, -9230478, 8836302, -6235707, -27360908, -2369593, 33152843, -4885251, -9906200, -621852}, - FieldElement{5666233, 525582, 20782575, -8038419, -24538499, 14657740, 16099374, 1468826, -6171428, -15186581}, - FieldElement{-4859255, -3779343, -2917758, -6748019, 7778750, 11688288, -30404353, -9871238, -1558923, -9863646}, - }, - { - FieldElement{10896332, -7719704, 824275, 472601, -19460308, 3009587, 25248958, 14783338, -30581476, -15757844}, - FieldElement{10566929, 12612572, -31944212, 11118703, -12633376, 12362879, 21752402, 8822496, 24003793, 14264025}, - FieldElement{27713862, -7355973, -11008240, 9227530, 27050101, 2504721, 23886875, -13117525, 13958495, -5732453}, - }, - { - FieldElement{-23481610, 4867226, -27247128, 3900521, 29838369, -8212291, -31889399, -10041781, 7340521, -15410068}, - FieldElement{4646514, -8011124, -22766023, -11532654, 23184553, 8566613, 31366726, -1381061, -15066784, -10375192}, - FieldElement{-17270517, 12723032, -16993061, 14878794, 21619651, -6197576, 27584817, 3093888, -8843694, 3849921}, - }, - { - FieldElement{-9064912, 2103172, 25561640, -15125738, -5239824, 9582958, 32477045, -9017955, 5002294, -15550259}, - FieldElement{-12057553, -11177906, 21115585, -13365155, 8808712, -12030708, 16489530, 13378448, -25845716, 12741426}, - FieldElement{-5946367, 10645103, -30911586, 15390284, -3286982, -7118677, 24306472, 15852464, 28834118, -7646072}, - }, - { - FieldElement{-17335748, -9107057, -24531279, 9434953, -8472084, -583362, -13090771, 455841, 20461858, 5491305}, - FieldElement{13669248, -16095482, -12481974, -10203039, -14569770, -11893198, -24995986, 11293807, -28588204, -9421832}, - FieldElement{28497928, 6272777, -33022994, 14470570, 8906179, -1225630, 18504674, -14165166, 29867745, -8795943}, - }, - { - FieldElement{-16207023, 13517196, -27799630, -13697798, 24009064, -6373891, -6367600, -13175392, 22853429, -4012011}, - FieldElement{24191378, 16712145, -13931797, 15217831, 14542237, 1646131, 18603514, -11037887, 12876623, -2112447}, - FieldElement{17902668, 4518229, -411702, -2829247, 26878217, 5258055, -12860753, 608397, 16031844, 3723494}, - }, - { - FieldElement{-28632773, 12763728, -20446446, 7577504, 33001348, -13017745, 17558842, -7872890, 23896954, -4314245}, - FieldElement{-20005381, -12011952, 31520464, 605201, 2543521, 5991821, -2945064, 7229064, -9919646, -8826859}, - FieldElement{28816045, 298879, -28165016, -15920938, 19000928, -1665890, -12680833, -2949325, -18051778, -2082915}, - }, - { - FieldElement{16000882, -344896, 3493092, -11447198, -29504595, -13159789, 12577740, 16041268, -19715240, 7847707}, - FieldElement{10151868, 10572098, 27312476, 7922682, 14825339, 4723128, -32855931, -6519018, -10020567, 3852848}, - FieldElement{-11430470, 15697596, -21121557, -4420647, 5386314, 15063598, 16514493, -15932110, 29330899, -15076224}, - }, - }, - { - { - FieldElement{-25499735, -4378794, -15222908, -6901211, 16615731, 2051784, 3303702, 15490, -27548796, 12314391}, - FieldElement{15683520, -6003043, 18109120, -9980648, 15337968, -5997823, -16717435, 15921866, 16103996, -3731215}, - FieldElement{-23169824, -10781249, 13588192, -1628807, -3798557, -1074929, -19273607, 5402699, -29815713, -9841101}, - }, - { - FieldElement{23190676, 2384583, -32714340, 3462154, -29903655, -1529132, -11266856, 8911517, -25205859, 2739713}, - FieldElement{21374101, -3554250, -33524649, 9874411, 15377179, 11831242, -33529904, 6134907, 4931255, 11987849}, - FieldElement{-7732, -2978858, -16223486, 7277597, 105524, -322051, -31480539, 13861388, -30076310, 10117930}, - }, - { - FieldElement{-29501170, -10744872, -26163768, 13051539, -25625564, 5089643, -6325503, 6704079, 12890019, 15728940}, - FieldElement{-21972360, -11771379, -951059, -4418840, 14704840, 2695116, 903376, -10428139, 12885167, 8311031}, - FieldElement{-17516482, 5352194, 10384213, -13811658, 7506451, 13453191, 26423267, 4384730, 1888765, -5435404}, - }, - { - FieldElement{-25817338, -3107312, -13494599, -3182506, 30896459, -13921729, -32251644, -12707869, -19464434, -3340243}, - FieldElement{-23607977, -2665774, -526091, 4651136, 5765089, 4618330, 6092245, 14845197, 17151279, -9854116}, - FieldElement{-24830458, -12733720, -15165978, 10367250, -29530908, -265356, 22825805, -7087279, -16866484, 16176525}, - }, - { - FieldElement{-23583256, 6564961, 20063689, 3798228, -4740178, 7359225, 2006182, -10363426, -28746253, -10197509}, - FieldElement{-10626600, -4486402, -13320562, -5125317, 3432136, -6393229, 23632037, -1940610, 32808310, 1099883}, - FieldElement{15030977, 5768825, -27451236, -2887299, -6427378, -15361371, -15277896, -6809350, 2051441, -15225865}, - }, - { - FieldElement{-3362323, -7239372, 7517890, 9824992, 23555850, 295369, 5148398, -14154188, -22686354, 16633660}, - FieldElement{4577086, -16752288, 13249841, -15304328, 19958763, -14537274, 18559670, -10759549, 8402478, -9864273}, - FieldElement{-28406330, -1051581, -26790155, -907698, -17212414, -11030789, 9453451, -14980072, 17983010, 9967138}, - }, - { - FieldElement{-25762494, 6524722, 26585488, 9969270, 24709298, 1220360, -1677990, 7806337, 17507396, 3651560}, - FieldElement{-10420457, -4118111, 14584639, 15971087, -15768321, 8861010, 26556809, -5574557, -18553322, -11357135}, - FieldElement{2839101, 14284142, 4029895, 3472686, 14402957, 12689363, -26642121, 8459447, -5605463, -7621941}, - }, - { - FieldElement{-4839289, -3535444, 9744961, 2871048, 25113978, 3187018, -25110813, -849066, 17258084, -7977739}, - FieldElement{18164541, -10595176, -17154882, -1542417, 19237078, -9745295, 23357533, -15217008, 26908270, 12150756}, - FieldElement{-30264870, -7647865, 5112249, -7036672, -1499807, -6974257, 43168, -5537701, -32302074, 16215819}, - }, - }, - { - { - FieldElement{-6898905, 9824394, -12304779, -4401089, -31397141, -6276835, 32574489, 12532905, -7503072, -8675347}, - FieldElement{-27343522, -16515468, -27151524, -10722951, 946346, 16291093, 254968, 7168080, 21676107, -1943028}, - FieldElement{21260961, -8424752, -16831886, -11920822, -23677961, 3968121, -3651949, -6215466, -3556191, -7913075}, - }, - { - FieldElement{16544754, 13250366, -16804428, 15546242, -4583003, 12757258, -2462308, -8680336, -18907032, -9662799}, - FieldElement{-2415239, -15577728, 18312303, 4964443, -15272530, -12653564, 26820651, 16690659, 25459437, -4564609}, - FieldElement{-25144690, 11425020, 28423002, -11020557, -6144921, -15826224, 9142795, -2391602, -6432418, -1644817}, - }, - { - FieldElement{-23104652, 6253476, 16964147, -3768872, -25113972, -12296437, -27457225, -16344658, 6335692, 7249989}, - FieldElement{-30333227, 13979675, 7503222, -12368314, -11956721, -4621693, -30272269, 2682242, 25993170, -12478523}, - FieldElement{4364628, 5930691, 32304656, -10044554, -8054781, 15091131, 22857016, -10598955, 31820368, 15075278}, - }, - { - FieldElement{31879134, -8918693, 17258761, 90626, -8041836, -4917709, 24162788, -9650886, -17970238, 12833045}, - FieldElement{19073683, 14851414, -24403169, -11860168, 7625278, 11091125, -19619190, 2074449, -9413939, 14905377}, - FieldElement{24483667, -11935567, -2518866, -11547418, -1553130, 15355506, -25282080, 9253129, 27628530, -7555480}, - }, - { - FieldElement{17597607, 8340603, 19355617, 552187, 26198470, -3176583, 4593324, -9157582, -14110875, 15297016}, - FieldElement{510886, 14337390, -31785257, 16638632, 6328095, 2713355, -20217417, -11864220, 8683221, 2921426}, - FieldElement{18606791, 11874196, 27155355, -5281482, -24031742, 6265446, -25178240, -1278924, 4674690, 13890525}, - }, - { - FieldElement{13609624, 13069022, -27372361, -13055908, 24360586, 9592974, 14977157, 9835105, 4389687, 288396}, - FieldElement{9922506, -519394, 13613107, 5883594, -18758345, -434263, -12304062, 8317628, 23388070, 16052080}, - FieldElement{12720016, 11937594, -31970060, -5028689, 26900120, 8561328, -20155687, -11632979, -14754271, -10812892}, - }, - { - FieldElement{15961858, 14150409, 26716931, -665832, -22794328, 13603569, 11829573, 7467844, -28822128, 929275}, - FieldElement{11038231, -11582396, -27310482, -7316562, -10498527, -16307831, -23479533, -9371869, -21393143, 2465074}, - FieldElement{20017163, -4323226, 27915242, 1529148, 12396362, 15675764, 13817261, -9658066, 2463391, -4622140}, - }, - { - FieldElement{-16358878, -12663911, -12065183, 4996454, -1256422, 1073572, 9583558, 12851107, 4003896, 12673717}, - FieldElement{-1731589, -15155870, -3262930, 16143082, 19294135, 13385325, 14741514, -9103726, 7903886, 2348101}, - FieldElement{24536016, -16515207, 12715592, -3862155, 1511293, 10047386, -3842346, -7129159, -28377538, 10048127}, - }, - }, - { - { - FieldElement{-12622226, -6204820, 30718825, 2591312, -10617028, 12192840, 18873298, -7297090, -32297756, 15221632}, - FieldElement{-26478122, -11103864, 11546244, -1852483, 9180880, 7656409, -21343950, 2095755, 29769758, 6593415}, - FieldElement{-31994208, -2907461, 4176912, 3264766, 12538965, -868111, 26312345, -6118678, 30958054, 8292160}, - }, - { - FieldElement{31429822, -13959116, 29173532, 15632448, 12174511, -2760094, 32808831, 3977186, 26143136, -3148876}, - FieldElement{22648901, 1402143, -22799984, 13746059, 7936347, 365344, -8668633, -1674433, -3758243, -2304625}, - FieldElement{-15491917, 8012313, -2514730, -12702462, -23965846, -10254029, -1612713, -1535569, -16664475, 8194478}, - }, - { - FieldElement{27338066, -7507420, -7414224, 10140405, -19026427, -6589889, 27277191, 8855376, 28572286, 3005164}, - FieldElement{26287124, 4821776, 25476601, -4145903, -3764513, -15788984, -18008582, 1182479, -26094821, -13079595}, - FieldElement{-7171154, 3178080, 23970071, 6201893, -17195577, -4489192, -21876275, -13982627, 32208683, -1198248}, - }, - { - FieldElement{-16657702, 2817643, -10286362, 14811298, 6024667, 13349505, -27315504, -10497842, -27672585, -11539858}, - FieldElement{15941029, -9405932, -21367050, 8062055, 31876073, -238629, -15278393, -1444429, 15397331, -4130193}, - FieldElement{8934485, -13485467, -23286397, -13423241, -32446090, 14047986, 31170398, -1441021, -27505566, 15087184}, - }, - { - FieldElement{-18357243, -2156491, 24524913, -16677868, 15520427, -6360776, -15502406, 11461896, 16788528, -5868942}, - FieldElement{-1947386, 16013773, 21750665, 3714552, -17401782, -16055433, -3770287, -10323320, 31322514, -11615635}, - FieldElement{21426655, -5650218, -13648287, -5347537, -28812189, -4920970, -18275391, -14621414, 13040862, -12112948}, - }, - { - FieldElement{11293895, 12478086, -27136401, 15083750, -29307421, 14748872, 14555558, -13417103, 1613711, 4896935}, - FieldElement{-25894883, 15323294, -8489791, -8057900, 25967126, -13425460, 2825960, -4897045, -23971776, -11267415}, - FieldElement{-15924766, -5229880, -17443532, 6410664, 3622847, 10243618, 20615400, 12405433, -23753030, -8436416}, - }, - { - FieldElement{-7091295, 12556208, -20191352, 9025187, -17072479, 4333801, 4378436, 2432030, 23097949, -566018}, - FieldElement{4565804, -16025654, 20084412, -7842817, 1724999, 189254, 24767264, 10103221, -18512313, 2424778}, - FieldElement{366633, -11976806, 8173090, -6890119, 30788634, 5745705, -7168678, 1344109, -3642553, 12412659}, - }, - { - FieldElement{-24001791, 7690286, 14929416, -168257, -32210835, -13412986, 24162697, -15326504, -3141501, 11179385}, - FieldElement{18289522, -14724954, 8056945, 16430056, -21729724, 7842514, -6001441, -1486897, -18684645, -11443503}, - FieldElement{476239, 6601091, -6152790, -9723375, 17503545, -4863900, 27672959, 13403813, 11052904, 5219329}, - }, - }, - { - { - FieldElement{20678546, -8375738, -32671898, 8849123, -5009758, 14574752, 31186971, -3973730, 9014762, -8579056}, - FieldElement{-13644050, -10350239, -15962508, 5075808, -1514661, -11534600, -33102500, 9160280, 8473550, -3256838}, - FieldElement{24900749, 14435722, 17209120, -15292541, -22592275, 9878983, -7689309, -16335821, -24568481, 11788948}, - }, - { - FieldElement{-3118155, -11395194, -13802089, 14797441, 9652448, -6845904, -20037437, 10410733, -24568470, -1458691}, - FieldElement{-15659161, 16736706, -22467150, 10215878, -9097177, 7563911, 11871841, -12505194, -18513325, 8464118}, - FieldElement{-23400612, 8348507, -14585951, -861714, -3950205, -6373419, 14325289, 8628612, 33313881, -8370517}, - }, - { - FieldElement{-20186973, -4967935, 22367356, 5271547, -1097117, -4788838, -24805667, -10236854, -8940735, -5818269}, - FieldElement{-6948785, -1795212, -32625683, -16021179, 32635414, -7374245, 15989197, -12838188, 28358192, -4253904}, - FieldElement{-23561781, -2799059, -32351682, -1661963, -9147719, 10429267, -16637684, 4072016, -5351664, 5596589}, - }, - { - FieldElement{-28236598, -3390048, 12312896, 6213178, 3117142, 16078565, 29266239, 2557221, 1768301, 15373193}, - FieldElement{-7243358, -3246960, -4593467, -7553353, -127927, -912245, -1090902, -4504991, -24660491, 3442910}, - FieldElement{-30210571, 5124043, 14181784, 8197961, 18964734, -11939093, 22597931, 7176455, -18585478, 13365930}, - }, - { - FieldElement{-7877390, -1499958, 8324673, 4690079, 6261860, 890446, 24538107, -8570186, -9689599, -3031667}, - FieldElement{25008904, -10771599, -4305031, -9638010, 16265036, 15721635, 683793, -11823784, 15723479, -15163481}, - FieldElement{-9660625, 12374379, -27006999, -7026148, -7724114, -12314514, 11879682, 5400171, 519526, -1235876}, - }, - { - FieldElement{22258397, -16332233, -7869817, 14613016, -22520255, -2950923, -20353881, 7315967, 16648397, 7605640}, - FieldElement{-8081308, -8464597, -8223311, 9719710, 19259459, -15348212, 23994942, -5281555, -9468848, 4763278}, - FieldElement{-21699244, 9220969, -15730624, 1084137, -25476107, -2852390, 31088447, -7764523, -11356529, 728112}, - }, - { - FieldElement{26047220, -11751471, -6900323, -16521798, 24092068, 9158119, -4273545, -12555558, -29365436, -5498272}, - FieldElement{17510331, -322857, 5854289, 8403524, 17133918, -3112612, -28111007, 12327945, 10750447, 10014012}, - FieldElement{-10312768, 3936952, 9156313, -8897683, 16498692, -994647, -27481051, -666732, 3424691, 7540221}, - }, - { - FieldElement{30322361, -6964110, 11361005, -4143317, 7433304, 4989748, -7071422, -16317219, -9244265, 15258046}, - FieldElement{13054562, -2779497, 19155474, 469045, -12482797, 4566042, 5631406, 2711395, 1062915, -5136345}, - FieldElement{-19240248, -11254599, -29509029, -7499965, -5835763, 13005411, -6066489, 12194497, 32960380, 1459310}, - }, - }, - { - { - FieldElement{19852034, 7027924, 23669353, 10020366, 8586503, -6657907, 394197, -6101885, 18638003, -11174937}, - FieldElement{31395534, 15098109, 26581030, 8030562, -16527914, -5007134, 9012486, -7584354, -6643087, -5442636}, - FieldElement{-9192165, -2347377, -1997099, 4529534, 25766844, 607986, -13222, 9677543, -32294889, -6456008}, - }, - { - FieldElement{-2444496, -149937, 29348902, 8186665, 1873760, 12489863, -30934579, -7839692, -7852844, -8138429}, - FieldElement{-15236356, -15433509, 7766470, 746860, 26346930, -10221762, -27333451, 10754588, -9431476, 5203576}, - FieldElement{31834314, 14135496, -770007, 5159118, 20917671, -16768096, -7467973, -7337524, 31809243, 7347066}, - }, - { - FieldElement{-9606723, -11874240, 20414459, 13033986, 13716524, -11691881, 19797970, -12211255, 15192876, -2087490}, - FieldElement{-12663563, -2181719, 1168162, -3804809, 26747877, -14138091, 10609330, 12694420, 33473243, -13382104}, - FieldElement{33184999, 11180355, 15832085, -11385430, -1633671, 225884, 15089336, -11023903, -6135662, 14480053}, - }, - { - FieldElement{31308717, -5619998, 31030840, -1897099, 15674547, -6582883, 5496208, 13685227, 27595050, 8737275}, - FieldElement{-20318852, -15150239, 10933843, -16178022, 8335352, -7546022, -31008351, -12610604, 26498114, 66511}, - FieldElement{22644454, -8761729, -16671776, 4884562, -3105614, -13559366, 30540766, -4286747, -13327787, -7515095}, - }, - { - FieldElement{-28017847, 9834845, 18617207, -2681312, -3401956, -13307506, 8205540, 13585437, -17127465, 15115439}, - FieldElement{23711543, -672915, 31206561, -8362711, 6164647, -9709987, -33535882, -1426096, 8236921, 16492939}, - FieldElement{-23910559, -13515526, -26299483, -4503841, 25005590, -7687270, 19574902, 10071562, 6708380, -6222424}, - }, - { - FieldElement{2101391, -4930054, 19702731, 2367575, -15427167, 1047675, 5301017, 9328700, 29955601, -11678310}, - FieldElement{3096359, 9271816, -21620864, -15521844, -14847996, -7592937, -25892142, -12635595, -9917575, 6216608}, - FieldElement{-32615849, 338663, -25195611, 2510422, -29213566, -13820213, 24822830, -6146567, -26767480, 7525079}, - }, - { - FieldElement{-23066649, -13985623, 16133487, -7896178, -3389565, 778788, -910336, -2782495, -19386633, 11994101}, - FieldElement{21691500, -13624626, -641331, -14367021, 3285881, -3483596, -25064666, 9718258, -7477437, 13381418}, - FieldElement{18445390, -4202236, 14979846, 11622458, -1727110, -3582980, 23111648, -6375247, 28535282, 15779576}, - }, - { - FieldElement{30098053, 3089662, -9234387, 16662135, -21306940, 11308411, -14068454, 12021730, 9955285, -16303356}, - FieldElement{9734894, -14576830, -7473633, -9138735, 2060392, 11313496, -18426029, 9924399, 20194861, 13380996}, - FieldElement{-26378102, -7965207, -22167821, 15789297, -18055342, -6168792, -1984914, 15707771, 26342023, 10146099}, - }, - }, - { - { - FieldElement{-26016874, -219943, 21339191, -41388, 19745256, -2878700, -29637280, 2227040, 21612326, -545728}, - FieldElement{-13077387, 1184228, 23562814, -5970442, -20351244, -6348714, 25764461, 12243797, -20856566, 11649658}, - FieldElement{-10031494, 11262626, 27384172, 2271902, 26947504, -15997771, 39944, 6114064, 33514190, 2333242}, - }, - { - FieldElement{-21433588, -12421821, 8119782, 7219913, -21830522, -9016134, -6679750, -12670638, 24350578, -13450001}, - FieldElement{-4116307, -11271533, -23886186, 4843615, -30088339, 690623, -31536088, -10406836, 8317860, 12352766}, - FieldElement{18200138, -14475911, -33087759, -2696619, -23702521, -9102511, -23552096, -2287550, 20712163, 6719373}, - }, - { - FieldElement{26656208, 6075253, -7858556, 1886072, -28344043, 4262326, 11117530, -3763210, 26224235, -3297458}, - FieldElement{-17168938, -14854097, -3395676, -16369877, -19954045, 14050420, 21728352, 9493610, 18620611, -16428628}, - FieldElement{-13323321, 13325349, 11432106, 5964811, 18609221, 6062965, -5269471, -9725556, -30701573, -16479657}, - }, - { - FieldElement{-23860538, -11233159, 26961357, 1640861, -32413112, -16737940, 12248509, -5240639, 13735342, 1934062}, - FieldElement{25089769, 6742589, 17081145, -13406266, 21909293, -16067981, -15136294, -3765346, -21277997, 5473616}, - FieldElement{31883677, -7961101, 1083432, -11572403, 22828471, 13290673, -7125085, 12469656, 29111212, -5451014}, - }, - { - FieldElement{24244947, -15050407, -26262976, 2791540, -14997599, 16666678, 24367466, 6388839, -10295587, 452383}, - FieldElement{-25640782, -3417841, 5217916, 16224624, 19987036, -4082269, -24236251, -5915248, 15766062, 8407814}, - FieldElement{-20406999, 13990231, 15495425, 16395525, 5377168, 15166495, -8917023, -4388953, -8067909, 2276718}, - }, - { - FieldElement{30157918, 12924066, -17712050, 9245753, 19895028, 3368142, -23827587, 5096219, 22740376, -7303417}, - FieldElement{2041139, -14256350, 7783687, 13876377, -25946985, -13352459, 24051124, 13742383, -15637599, 13295222}, - FieldElement{33338237, -8505733, 12532113, 7977527, 9106186, -1715251, -17720195, -4612972, -4451357, -14669444}, - }, - { - FieldElement{-20045281, 5454097, -14346548, 6447146, 28862071, 1883651, -2469266, -4141880, 7770569, 9620597}, - FieldElement{23208068, 7979712, 33071466, 8149229, 1758231, -10834995, 30945528, -1694323, -33502340, -14767970}, - FieldElement{1439958, -16270480, -1079989, -793782, 4625402, 10647766, -5043801, 1220118, 30494170, -11440799}, - }, - { - FieldElement{-5037580, -13028295, -2970559, -3061767, 15640974, -6701666, -26739026, 926050, -1684339, -13333647}, - FieldElement{13908495, -3549272, 30919928, -6273825, -21521863, 7989039, 9021034, 9078865, 3353509, 4033511}, - FieldElement{-29663431, -15113610, 32259991, -344482, 24295849, -12912123, 23161163, 8839127, 27485041, 7356032}, - }, - }, - { - { - FieldElement{9661027, 705443, 11980065, -5370154, -1628543, 14661173, -6346142, 2625015, 28431036, -16771834}, - FieldElement{-23839233, -8311415, -25945511, 7480958, -17681669, -8354183, -22545972, 14150565, 15970762, 4099461}, - FieldElement{29262576, 16756590, 26350592, -8793563, 8529671, -11208050, 13617293, -9937143, 11465739, 8317062}, - }, - { - FieldElement{-25493081, -6962928, 32500200, -9419051, -23038724, -2302222, 14898637, 3848455, 20969334, -5157516}, - FieldElement{-20384450, -14347713, -18336405, 13884722, -33039454, 2842114, -21610826, -3649888, 11177095, 14989547}, - FieldElement{-24496721, -11716016, 16959896, 2278463, 12066309, 10137771, 13515641, 2581286, -28487508, 9930240}, - }, - { - FieldElement{-17751622, -2097826, 16544300, -13009300, -15914807, -14949081, 18345767, -13403753, 16291481, -5314038}, - FieldElement{-33229194, 2553288, 32678213, 9875984, 8534129, 6889387, -9676774, 6957617, 4368891, 9788741}, - FieldElement{16660756, 7281060, -10830758, 12911820, 20108584, -8101676, -21722536, -8613148, 16250552, -11111103}, - }, - { - FieldElement{-19765507, 2390526, -16551031, 14161980, 1905286, 6414907, 4689584, 10604807, -30190403, 4782747}, - FieldElement{-1354539, 14736941, -7367442, -13292886, 7710542, -14155590, -9981571, 4383045, 22546403, 437323}, - FieldElement{31665577, -12180464, -16186830, 1491339, -18368625, 3294682, 27343084, 2786261, -30633590, -14097016}, - }, - { - FieldElement{-14467279, -683715, -33374107, 7448552, 19294360, 14334329, -19690631, 2355319, -19284671, -6114373}, - FieldElement{15121312, -15796162, 6377020, -6031361, -10798111, -12957845, 18952177, 15496498, -29380133, 11754228}, - FieldElement{-2637277, -13483075, 8488727, -14303896, 12728761, -1622493, 7141596, 11724556, 22761615, -10134141}, - }, - { - FieldElement{16918416, 11729663, -18083579, 3022987, -31015732, -13339659, -28741185, -12227393, 32851222, 11717399}, - FieldElement{11166634, 7338049, -6722523, 4531520, -29468672, -7302055, 31474879, 3483633, -1193175, -4030831}, - FieldElement{-185635, 9921305, 31456609, -13536438, -12013818, 13348923, 33142652, 6546660, -19985279, -3948376}, - }, - { - FieldElement{-32460596, 11266712, -11197107, -7899103, 31703694, 3855903, -8537131, -12833048, -30772034, -15486313}, - FieldElement{-18006477, 12709068, 3991746, -6479188, -21491523, -10550425, -31135347, -16049879, 10928917, 3011958}, - FieldElement{-6957757, -15594337, 31696059, 334240, 29576716, 14796075, -30831056, -12805180, 18008031, 10258577}, - }, - { - FieldElement{-22448644, 15655569, 7018479, -4410003, -30314266, -1201591, -1853465, 1367120, 25127874, 6671743}, - FieldElement{29701166, -14373934, -10878120, 9279288, -17568, 13127210, 21382910, 11042292, 25838796, 4642684}, - FieldElement{-20430234, 14955537, -24126347, 8124619, -5369288, -5990470, 30468147, -13900640, 18423289, 4177476}, - }, - }, -} diff --git a/vendor/golang.org/x/crypto/ed25519/internal/edwards25519/edwards25519.go b/vendor/golang.org/x/crypto/ed25519/internal/edwards25519/edwards25519.go deleted file mode 100644 index fd03c252a..000000000 --- a/vendor/golang.org/x/crypto/ed25519/internal/edwards25519/edwards25519.go +++ /dev/null @@ -1,1793 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package edwards25519 - -import "encoding/binary" - -// This code is a port of the public domain, “ref10” implementation of ed25519 -// from SUPERCOP. - -// FieldElement represents an element of the field GF(2^255 - 19). An element -// t, entries t[0]...t[9], represents the integer t[0]+2^26 t[1]+2^51 t[2]+2^77 -// t[3]+2^102 t[4]+...+2^230 t[9]. Bounds on each t[i] vary depending on -// context. -type FieldElement [10]int32 - -var zero FieldElement - -func FeZero(fe *FieldElement) { - copy(fe[:], zero[:]) -} - -func FeOne(fe *FieldElement) { - FeZero(fe) - fe[0] = 1 -} - -func FeAdd(dst, a, b *FieldElement) { - dst[0] = a[0] + b[0] - dst[1] = a[1] + b[1] - dst[2] = a[2] + b[2] - dst[3] = a[3] + b[3] - dst[4] = a[4] + b[4] - dst[5] = a[5] + b[5] - dst[6] = a[6] + b[6] - dst[7] = a[7] + b[7] - dst[8] = a[8] + b[8] - dst[9] = a[9] + b[9] -} - -func FeSub(dst, a, b *FieldElement) { - dst[0] = a[0] - b[0] - dst[1] = a[1] - b[1] - dst[2] = a[2] - b[2] - dst[3] = a[3] - b[3] - dst[4] = a[4] - b[4] - dst[5] = a[5] - b[5] - dst[6] = a[6] - b[6] - dst[7] = a[7] - b[7] - dst[8] = a[8] - b[8] - dst[9] = a[9] - b[9] -} - -func FeCopy(dst, src *FieldElement) { - copy(dst[:], src[:]) -} - -// Replace (f,g) with (g,g) if b == 1; -// replace (f,g) with (f,g) if b == 0. -// -// Preconditions: b in {0,1}. -func FeCMove(f, g *FieldElement, b int32) { - b = -b - f[0] ^= b & (f[0] ^ g[0]) - f[1] ^= b & (f[1] ^ g[1]) - f[2] ^= b & (f[2] ^ g[2]) - f[3] ^= b & (f[3] ^ g[3]) - f[4] ^= b & (f[4] ^ g[4]) - f[5] ^= b & (f[5] ^ g[5]) - f[6] ^= b & (f[6] ^ g[6]) - f[7] ^= b & (f[7] ^ g[7]) - f[8] ^= b & (f[8] ^ g[8]) - f[9] ^= b & (f[9] ^ g[9]) -} - -func load3(in []byte) int64 { - var r int64 - r = int64(in[0]) - r |= int64(in[1]) << 8 - r |= int64(in[2]) << 16 - return r -} - -func load4(in []byte) int64 { - var r int64 - r = int64(in[0]) - r |= int64(in[1]) << 8 - r |= int64(in[2]) << 16 - r |= int64(in[3]) << 24 - return r -} - -func FeFromBytes(dst *FieldElement, src *[32]byte) { - h0 := load4(src[:]) - h1 := load3(src[4:]) << 6 - h2 := load3(src[7:]) << 5 - h3 := load3(src[10:]) << 3 - h4 := load3(src[13:]) << 2 - h5 := load4(src[16:]) - h6 := load3(src[20:]) << 7 - h7 := load3(src[23:]) << 5 - h8 := load3(src[26:]) << 4 - h9 := (load3(src[29:]) & 8388607) << 2 - - FeCombine(dst, h0, h1, h2, h3, h4, h5, h6, h7, h8, h9) -} - -// FeToBytes marshals h to s. -// Preconditions: -// |h| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. -// -// Write p=2^255-19; q=floor(h/p). -// Basic claim: q = floor(2^(-255)(h + 19 2^(-25)h9 + 2^(-1))). -// -// Proof: -// Have |h|<=p so |q|<=1 so |19^2 2^(-255) q|<1/4. -// Also have |h-2^230 h9|<2^230 so |19 2^(-255)(h-2^230 h9)|<1/4. -// -// Write y=2^(-1)-19^2 2^(-255)q-19 2^(-255)(h-2^230 h9). -// Then 0> 25 - q = (h[0] + q) >> 26 - q = (h[1] + q) >> 25 - q = (h[2] + q) >> 26 - q = (h[3] + q) >> 25 - q = (h[4] + q) >> 26 - q = (h[5] + q) >> 25 - q = (h[6] + q) >> 26 - q = (h[7] + q) >> 25 - q = (h[8] + q) >> 26 - q = (h[9] + q) >> 25 - - // Goal: Output h-(2^255-19)q, which is between 0 and 2^255-20. - h[0] += 19 * q - // Goal: Output h-2^255 q, which is between 0 and 2^255-20. - - carry[0] = h[0] >> 26 - h[1] += carry[0] - h[0] -= carry[0] << 26 - carry[1] = h[1] >> 25 - h[2] += carry[1] - h[1] -= carry[1] << 25 - carry[2] = h[2] >> 26 - h[3] += carry[2] - h[2] -= carry[2] << 26 - carry[3] = h[3] >> 25 - h[4] += carry[3] - h[3] -= carry[3] << 25 - carry[4] = h[4] >> 26 - h[5] += carry[4] - h[4] -= carry[4] << 26 - carry[5] = h[5] >> 25 - h[6] += carry[5] - h[5] -= carry[5] << 25 - carry[6] = h[6] >> 26 - h[7] += carry[6] - h[6] -= carry[6] << 26 - carry[7] = h[7] >> 25 - h[8] += carry[7] - h[7] -= carry[7] << 25 - carry[8] = h[8] >> 26 - h[9] += carry[8] - h[8] -= carry[8] << 26 - carry[9] = h[9] >> 25 - h[9] -= carry[9] << 25 - // h10 = carry9 - - // Goal: Output h[0]+...+2^255 h10-2^255 q, which is between 0 and 2^255-20. - // Have h[0]+...+2^230 h[9] between 0 and 2^255-1; - // evidently 2^255 h10-2^255 q = 0. - // Goal: Output h[0]+...+2^230 h[9]. - - s[0] = byte(h[0] >> 0) - s[1] = byte(h[0] >> 8) - s[2] = byte(h[0] >> 16) - s[3] = byte((h[0] >> 24) | (h[1] << 2)) - s[4] = byte(h[1] >> 6) - s[5] = byte(h[1] >> 14) - s[6] = byte((h[1] >> 22) | (h[2] << 3)) - s[7] = byte(h[2] >> 5) - s[8] = byte(h[2] >> 13) - s[9] = byte((h[2] >> 21) | (h[3] << 5)) - s[10] = byte(h[3] >> 3) - s[11] = byte(h[3] >> 11) - s[12] = byte((h[3] >> 19) | (h[4] << 6)) - s[13] = byte(h[4] >> 2) - s[14] = byte(h[4] >> 10) - s[15] = byte(h[4] >> 18) - s[16] = byte(h[5] >> 0) - s[17] = byte(h[5] >> 8) - s[18] = byte(h[5] >> 16) - s[19] = byte((h[5] >> 24) | (h[6] << 1)) - s[20] = byte(h[6] >> 7) - s[21] = byte(h[6] >> 15) - s[22] = byte((h[6] >> 23) | (h[7] << 3)) - s[23] = byte(h[7] >> 5) - s[24] = byte(h[7] >> 13) - s[25] = byte((h[7] >> 21) | (h[8] << 4)) - s[26] = byte(h[8] >> 4) - s[27] = byte(h[8] >> 12) - s[28] = byte((h[8] >> 20) | (h[9] << 6)) - s[29] = byte(h[9] >> 2) - s[30] = byte(h[9] >> 10) - s[31] = byte(h[9] >> 18) -} - -func FeIsNegative(f *FieldElement) byte { - var s [32]byte - FeToBytes(&s, f) - return s[0] & 1 -} - -func FeIsNonZero(f *FieldElement) int32 { - var s [32]byte - FeToBytes(&s, f) - var x uint8 - for _, b := range s { - x |= b - } - x |= x >> 4 - x |= x >> 2 - x |= x >> 1 - return int32(x & 1) -} - -// FeNeg sets h = -f -// -// Preconditions: -// |f| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. -// -// Postconditions: -// |h| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. -func FeNeg(h, f *FieldElement) { - h[0] = -f[0] - h[1] = -f[1] - h[2] = -f[2] - h[3] = -f[3] - h[4] = -f[4] - h[5] = -f[5] - h[6] = -f[6] - h[7] = -f[7] - h[8] = -f[8] - h[9] = -f[9] -} - -func FeCombine(h *FieldElement, h0, h1, h2, h3, h4, h5, h6, h7, h8, h9 int64) { - var c0, c1, c2, c3, c4, c5, c6, c7, c8, c9 int64 - - /* - |h0| <= (1.1*1.1*2^52*(1+19+19+19+19)+1.1*1.1*2^50*(38+38+38+38+38)) - i.e. |h0| <= 1.2*2^59; narrower ranges for h2, h4, h6, h8 - |h1| <= (1.1*1.1*2^51*(1+1+19+19+19+19+19+19+19+19)) - i.e. |h1| <= 1.5*2^58; narrower ranges for h3, h5, h7, h9 - */ - - c0 = (h0 + (1 << 25)) >> 26 - h1 += c0 - h0 -= c0 << 26 - c4 = (h4 + (1 << 25)) >> 26 - h5 += c4 - h4 -= c4 << 26 - /* |h0| <= 2^25 */ - /* |h4| <= 2^25 */ - /* |h1| <= 1.51*2^58 */ - /* |h5| <= 1.51*2^58 */ - - c1 = (h1 + (1 << 24)) >> 25 - h2 += c1 - h1 -= c1 << 25 - c5 = (h5 + (1 << 24)) >> 25 - h6 += c5 - h5 -= c5 << 25 - /* |h1| <= 2^24; from now on fits into int32 */ - /* |h5| <= 2^24; from now on fits into int32 */ - /* |h2| <= 1.21*2^59 */ - /* |h6| <= 1.21*2^59 */ - - c2 = (h2 + (1 << 25)) >> 26 - h3 += c2 - h2 -= c2 << 26 - c6 = (h6 + (1 << 25)) >> 26 - h7 += c6 - h6 -= c6 << 26 - /* |h2| <= 2^25; from now on fits into int32 unchanged */ - /* |h6| <= 2^25; from now on fits into int32 unchanged */ - /* |h3| <= 1.51*2^58 */ - /* |h7| <= 1.51*2^58 */ - - c3 = (h3 + (1 << 24)) >> 25 - h4 += c3 - h3 -= c3 << 25 - c7 = (h7 + (1 << 24)) >> 25 - h8 += c7 - h7 -= c7 << 25 - /* |h3| <= 2^24; from now on fits into int32 unchanged */ - /* |h7| <= 2^24; from now on fits into int32 unchanged */ - /* |h4| <= 1.52*2^33 */ - /* |h8| <= 1.52*2^33 */ - - c4 = (h4 + (1 << 25)) >> 26 - h5 += c4 - h4 -= c4 << 26 - c8 = (h8 + (1 << 25)) >> 26 - h9 += c8 - h8 -= c8 << 26 - /* |h4| <= 2^25; from now on fits into int32 unchanged */ - /* |h8| <= 2^25; from now on fits into int32 unchanged */ - /* |h5| <= 1.01*2^24 */ - /* |h9| <= 1.51*2^58 */ - - c9 = (h9 + (1 << 24)) >> 25 - h0 += c9 * 19 - h9 -= c9 << 25 - /* |h9| <= 2^24; from now on fits into int32 unchanged */ - /* |h0| <= 1.8*2^37 */ - - c0 = (h0 + (1 << 25)) >> 26 - h1 += c0 - h0 -= c0 << 26 - /* |h0| <= 2^25; from now on fits into int32 unchanged */ - /* |h1| <= 1.01*2^24 */ - - h[0] = int32(h0) - h[1] = int32(h1) - h[2] = int32(h2) - h[3] = int32(h3) - h[4] = int32(h4) - h[5] = int32(h5) - h[6] = int32(h6) - h[7] = int32(h7) - h[8] = int32(h8) - h[9] = int32(h9) -} - -// FeMul calculates h = f * g -// Can overlap h with f or g. -// -// Preconditions: -// |f| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc. -// |g| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc. -// -// Postconditions: -// |h| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. -// -// Notes on implementation strategy: -// -// Using schoolbook multiplication. -// Karatsuba would save a little in some cost models. -// -// Most multiplications by 2 and 19 are 32-bit precomputations; -// cheaper than 64-bit postcomputations. -// -// There is one remaining multiplication by 19 in the carry chain; -// one *19 precomputation can be merged into this, -// but the resulting data flow is considerably less clean. -// -// There are 12 carries below. -// 10 of them are 2-way parallelizable and vectorizable. -// Can get away with 11 carries, but then data flow is much deeper. -// -// With tighter constraints on inputs, can squeeze carries into int32. -func FeMul(h, f, g *FieldElement) { - f0 := int64(f[0]) - f1 := int64(f[1]) - f2 := int64(f[2]) - f3 := int64(f[3]) - f4 := int64(f[4]) - f5 := int64(f[5]) - f6 := int64(f[6]) - f7 := int64(f[7]) - f8 := int64(f[8]) - f9 := int64(f[9]) - - f1_2 := int64(2 * f[1]) - f3_2 := int64(2 * f[3]) - f5_2 := int64(2 * f[5]) - f7_2 := int64(2 * f[7]) - f9_2 := int64(2 * f[9]) - - g0 := int64(g[0]) - g1 := int64(g[1]) - g2 := int64(g[2]) - g3 := int64(g[3]) - g4 := int64(g[4]) - g5 := int64(g[5]) - g6 := int64(g[6]) - g7 := int64(g[7]) - g8 := int64(g[8]) - g9 := int64(g[9]) - - g1_19 := int64(19 * g[1]) /* 1.4*2^29 */ - g2_19 := int64(19 * g[2]) /* 1.4*2^30; still ok */ - g3_19 := int64(19 * g[3]) - g4_19 := int64(19 * g[4]) - g5_19 := int64(19 * g[5]) - g6_19 := int64(19 * g[6]) - g7_19 := int64(19 * g[7]) - g8_19 := int64(19 * g[8]) - g9_19 := int64(19 * g[9]) - - h0 := f0*g0 + f1_2*g9_19 + f2*g8_19 + f3_2*g7_19 + f4*g6_19 + f5_2*g5_19 + f6*g4_19 + f7_2*g3_19 + f8*g2_19 + f9_2*g1_19 - h1 := f0*g1 + f1*g0 + f2*g9_19 + f3*g8_19 + f4*g7_19 + f5*g6_19 + f6*g5_19 + f7*g4_19 + f8*g3_19 + f9*g2_19 - h2 := f0*g2 + f1_2*g1 + f2*g0 + f3_2*g9_19 + f4*g8_19 + f5_2*g7_19 + f6*g6_19 + f7_2*g5_19 + f8*g4_19 + f9_2*g3_19 - h3 := f0*g3 + f1*g2 + f2*g1 + f3*g0 + f4*g9_19 + f5*g8_19 + f6*g7_19 + f7*g6_19 + f8*g5_19 + f9*g4_19 - h4 := f0*g4 + f1_2*g3 + f2*g2 + f3_2*g1 + f4*g0 + f5_2*g9_19 + f6*g8_19 + f7_2*g7_19 + f8*g6_19 + f9_2*g5_19 - h5 := f0*g5 + f1*g4 + f2*g3 + f3*g2 + f4*g1 + f5*g0 + f6*g9_19 + f7*g8_19 + f8*g7_19 + f9*g6_19 - h6 := f0*g6 + f1_2*g5 + f2*g4 + f3_2*g3 + f4*g2 + f5_2*g1 + f6*g0 + f7_2*g9_19 + f8*g8_19 + f9_2*g7_19 - h7 := f0*g7 + f1*g6 + f2*g5 + f3*g4 + f4*g3 + f5*g2 + f6*g1 + f7*g0 + f8*g9_19 + f9*g8_19 - h8 := f0*g8 + f1_2*g7 + f2*g6 + f3_2*g5 + f4*g4 + f5_2*g3 + f6*g2 + f7_2*g1 + f8*g0 + f9_2*g9_19 - h9 := f0*g9 + f1*g8 + f2*g7 + f3*g6 + f4*g5 + f5*g4 + f6*g3 + f7*g2 + f8*g1 + f9*g0 - - FeCombine(h, h0, h1, h2, h3, h4, h5, h6, h7, h8, h9) -} - -func feSquare(f *FieldElement) (h0, h1, h2, h3, h4, h5, h6, h7, h8, h9 int64) { - f0 := int64(f[0]) - f1 := int64(f[1]) - f2 := int64(f[2]) - f3 := int64(f[3]) - f4 := int64(f[4]) - f5 := int64(f[5]) - f6 := int64(f[6]) - f7 := int64(f[7]) - f8 := int64(f[8]) - f9 := int64(f[9]) - f0_2 := int64(2 * f[0]) - f1_2 := int64(2 * f[1]) - f2_2 := int64(2 * f[2]) - f3_2 := int64(2 * f[3]) - f4_2 := int64(2 * f[4]) - f5_2 := int64(2 * f[5]) - f6_2 := int64(2 * f[6]) - f7_2 := int64(2 * f[7]) - f5_38 := 38 * f5 // 1.31*2^30 - f6_19 := 19 * f6 // 1.31*2^30 - f7_38 := 38 * f7 // 1.31*2^30 - f8_19 := 19 * f8 // 1.31*2^30 - f9_38 := 38 * f9 // 1.31*2^30 - - h0 = f0*f0 + f1_2*f9_38 + f2_2*f8_19 + f3_2*f7_38 + f4_2*f6_19 + f5*f5_38 - h1 = f0_2*f1 + f2*f9_38 + f3_2*f8_19 + f4*f7_38 + f5_2*f6_19 - h2 = f0_2*f2 + f1_2*f1 + f3_2*f9_38 + f4_2*f8_19 + f5_2*f7_38 + f6*f6_19 - h3 = f0_2*f3 + f1_2*f2 + f4*f9_38 + f5_2*f8_19 + f6*f7_38 - h4 = f0_2*f4 + f1_2*f3_2 + f2*f2 + f5_2*f9_38 + f6_2*f8_19 + f7*f7_38 - h5 = f0_2*f5 + f1_2*f4 + f2_2*f3 + f6*f9_38 + f7_2*f8_19 - h6 = f0_2*f6 + f1_2*f5_2 + f2_2*f4 + f3_2*f3 + f7_2*f9_38 + f8*f8_19 - h7 = f0_2*f7 + f1_2*f6 + f2_2*f5 + f3_2*f4 + f8*f9_38 - h8 = f0_2*f8 + f1_2*f7_2 + f2_2*f6 + f3_2*f5_2 + f4*f4 + f9*f9_38 - h9 = f0_2*f9 + f1_2*f8 + f2_2*f7 + f3_2*f6 + f4_2*f5 - - return -} - -// FeSquare calculates h = f*f. Can overlap h with f. -// -// Preconditions: -// |f| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc. -// -// Postconditions: -// |h| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. -func FeSquare(h, f *FieldElement) { - h0, h1, h2, h3, h4, h5, h6, h7, h8, h9 := feSquare(f) - FeCombine(h, h0, h1, h2, h3, h4, h5, h6, h7, h8, h9) -} - -// FeSquare2 sets h = 2 * f * f -// -// Can overlap h with f. -// -// Preconditions: -// |f| bounded by 1.65*2^26,1.65*2^25,1.65*2^26,1.65*2^25,etc. -// -// Postconditions: -// |h| bounded by 1.01*2^25,1.01*2^24,1.01*2^25,1.01*2^24,etc. -// See fe_mul.c for discussion of implementation strategy. -func FeSquare2(h, f *FieldElement) { - h0, h1, h2, h3, h4, h5, h6, h7, h8, h9 := feSquare(f) - - h0 += h0 - h1 += h1 - h2 += h2 - h3 += h3 - h4 += h4 - h5 += h5 - h6 += h6 - h7 += h7 - h8 += h8 - h9 += h9 - - FeCombine(h, h0, h1, h2, h3, h4, h5, h6, h7, h8, h9) -} - -func FeInvert(out, z *FieldElement) { - var t0, t1, t2, t3 FieldElement - var i int - - FeSquare(&t0, z) // 2^1 - FeSquare(&t1, &t0) // 2^2 - for i = 1; i < 2; i++ { // 2^3 - FeSquare(&t1, &t1) - } - FeMul(&t1, z, &t1) // 2^3 + 2^0 - FeMul(&t0, &t0, &t1) // 2^3 + 2^1 + 2^0 - FeSquare(&t2, &t0) // 2^4 + 2^2 + 2^1 - FeMul(&t1, &t1, &t2) // 2^4 + 2^3 + 2^2 + 2^1 + 2^0 - FeSquare(&t2, &t1) // 5,4,3,2,1 - for i = 1; i < 5; i++ { // 9,8,7,6,5 - FeSquare(&t2, &t2) - } - FeMul(&t1, &t2, &t1) // 9,8,7,6,5,4,3,2,1,0 - FeSquare(&t2, &t1) // 10..1 - for i = 1; i < 10; i++ { // 19..10 - FeSquare(&t2, &t2) - } - FeMul(&t2, &t2, &t1) // 19..0 - FeSquare(&t3, &t2) // 20..1 - for i = 1; i < 20; i++ { // 39..20 - FeSquare(&t3, &t3) - } - FeMul(&t2, &t3, &t2) // 39..0 - FeSquare(&t2, &t2) // 40..1 - for i = 1; i < 10; i++ { // 49..10 - FeSquare(&t2, &t2) - } - FeMul(&t1, &t2, &t1) // 49..0 - FeSquare(&t2, &t1) // 50..1 - for i = 1; i < 50; i++ { // 99..50 - FeSquare(&t2, &t2) - } - FeMul(&t2, &t2, &t1) // 99..0 - FeSquare(&t3, &t2) // 100..1 - for i = 1; i < 100; i++ { // 199..100 - FeSquare(&t3, &t3) - } - FeMul(&t2, &t3, &t2) // 199..0 - FeSquare(&t2, &t2) // 200..1 - for i = 1; i < 50; i++ { // 249..50 - FeSquare(&t2, &t2) - } - FeMul(&t1, &t2, &t1) // 249..0 - FeSquare(&t1, &t1) // 250..1 - for i = 1; i < 5; i++ { // 254..5 - FeSquare(&t1, &t1) - } - FeMul(out, &t1, &t0) // 254..5,3,1,0 -} - -func fePow22523(out, z *FieldElement) { - var t0, t1, t2 FieldElement - var i int - - FeSquare(&t0, z) - for i = 1; i < 1; i++ { - FeSquare(&t0, &t0) - } - FeSquare(&t1, &t0) - for i = 1; i < 2; i++ { - FeSquare(&t1, &t1) - } - FeMul(&t1, z, &t1) - FeMul(&t0, &t0, &t1) - FeSquare(&t0, &t0) - for i = 1; i < 1; i++ { - FeSquare(&t0, &t0) - } - FeMul(&t0, &t1, &t0) - FeSquare(&t1, &t0) - for i = 1; i < 5; i++ { - FeSquare(&t1, &t1) - } - FeMul(&t0, &t1, &t0) - FeSquare(&t1, &t0) - for i = 1; i < 10; i++ { - FeSquare(&t1, &t1) - } - FeMul(&t1, &t1, &t0) - FeSquare(&t2, &t1) - for i = 1; i < 20; i++ { - FeSquare(&t2, &t2) - } - FeMul(&t1, &t2, &t1) - FeSquare(&t1, &t1) - for i = 1; i < 10; i++ { - FeSquare(&t1, &t1) - } - FeMul(&t0, &t1, &t0) - FeSquare(&t1, &t0) - for i = 1; i < 50; i++ { - FeSquare(&t1, &t1) - } - FeMul(&t1, &t1, &t0) - FeSquare(&t2, &t1) - for i = 1; i < 100; i++ { - FeSquare(&t2, &t2) - } - FeMul(&t1, &t2, &t1) - FeSquare(&t1, &t1) - for i = 1; i < 50; i++ { - FeSquare(&t1, &t1) - } - FeMul(&t0, &t1, &t0) - FeSquare(&t0, &t0) - for i = 1; i < 2; i++ { - FeSquare(&t0, &t0) - } - FeMul(out, &t0, z) -} - -// Group elements are members of the elliptic curve -x^2 + y^2 = 1 + d * x^2 * -// y^2 where d = -121665/121666. -// -// Several representations are used: -// ProjectiveGroupElement: (X:Y:Z) satisfying x=X/Z, y=Y/Z -// ExtendedGroupElement: (X:Y:Z:T) satisfying x=X/Z, y=Y/Z, XY=ZT -// CompletedGroupElement: ((X:Z),(Y:T)) satisfying x=X/Z, y=Y/T -// PreComputedGroupElement: (y+x,y-x,2dxy) - -type ProjectiveGroupElement struct { - X, Y, Z FieldElement -} - -type ExtendedGroupElement struct { - X, Y, Z, T FieldElement -} - -type CompletedGroupElement struct { - X, Y, Z, T FieldElement -} - -type PreComputedGroupElement struct { - yPlusX, yMinusX, xy2d FieldElement -} - -type CachedGroupElement struct { - yPlusX, yMinusX, Z, T2d FieldElement -} - -func (p *ProjectiveGroupElement) Zero() { - FeZero(&p.X) - FeOne(&p.Y) - FeOne(&p.Z) -} - -func (p *ProjectiveGroupElement) Double(r *CompletedGroupElement) { - var t0 FieldElement - - FeSquare(&r.X, &p.X) - FeSquare(&r.Z, &p.Y) - FeSquare2(&r.T, &p.Z) - FeAdd(&r.Y, &p.X, &p.Y) - FeSquare(&t0, &r.Y) - FeAdd(&r.Y, &r.Z, &r.X) - FeSub(&r.Z, &r.Z, &r.X) - FeSub(&r.X, &t0, &r.Y) - FeSub(&r.T, &r.T, &r.Z) -} - -func (p *ProjectiveGroupElement) ToBytes(s *[32]byte) { - var recip, x, y FieldElement - - FeInvert(&recip, &p.Z) - FeMul(&x, &p.X, &recip) - FeMul(&y, &p.Y, &recip) - FeToBytes(s, &y) - s[31] ^= FeIsNegative(&x) << 7 -} - -func (p *ExtendedGroupElement) Zero() { - FeZero(&p.X) - FeOne(&p.Y) - FeOne(&p.Z) - FeZero(&p.T) -} - -func (p *ExtendedGroupElement) Double(r *CompletedGroupElement) { - var q ProjectiveGroupElement - p.ToProjective(&q) - q.Double(r) -} - -func (p *ExtendedGroupElement) ToCached(r *CachedGroupElement) { - FeAdd(&r.yPlusX, &p.Y, &p.X) - FeSub(&r.yMinusX, &p.Y, &p.X) - FeCopy(&r.Z, &p.Z) - FeMul(&r.T2d, &p.T, &d2) -} - -func (p *ExtendedGroupElement) ToProjective(r *ProjectiveGroupElement) { - FeCopy(&r.X, &p.X) - FeCopy(&r.Y, &p.Y) - FeCopy(&r.Z, &p.Z) -} - -func (p *ExtendedGroupElement) ToBytes(s *[32]byte) { - var recip, x, y FieldElement - - FeInvert(&recip, &p.Z) - FeMul(&x, &p.X, &recip) - FeMul(&y, &p.Y, &recip) - FeToBytes(s, &y) - s[31] ^= FeIsNegative(&x) << 7 -} - -func (p *ExtendedGroupElement) FromBytes(s *[32]byte) bool { - var u, v, v3, vxx, check FieldElement - - FeFromBytes(&p.Y, s) - FeOne(&p.Z) - FeSquare(&u, &p.Y) - FeMul(&v, &u, &d) - FeSub(&u, &u, &p.Z) // y = y^2-1 - FeAdd(&v, &v, &p.Z) // v = dy^2+1 - - FeSquare(&v3, &v) - FeMul(&v3, &v3, &v) // v3 = v^3 - FeSquare(&p.X, &v3) - FeMul(&p.X, &p.X, &v) - FeMul(&p.X, &p.X, &u) // x = uv^7 - - fePow22523(&p.X, &p.X) // x = (uv^7)^((q-5)/8) - FeMul(&p.X, &p.X, &v3) - FeMul(&p.X, &p.X, &u) // x = uv^3(uv^7)^((q-5)/8) - - var tmpX, tmp2 [32]byte - - FeSquare(&vxx, &p.X) - FeMul(&vxx, &vxx, &v) - FeSub(&check, &vxx, &u) // vx^2-u - if FeIsNonZero(&check) == 1 { - FeAdd(&check, &vxx, &u) // vx^2+u - if FeIsNonZero(&check) == 1 { - return false - } - FeMul(&p.X, &p.X, &SqrtM1) - - FeToBytes(&tmpX, &p.X) - for i, v := range tmpX { - tmp2[31-i] = v - } - } - - if FeIsNegative(&p.X) != (s[31] >> 7) { - FeNeg(&p.X, &p.X) - } - - FeMul(&p.T, &p.X, &p.Y) - return true -} - -func (p *CompletedGroupElement) ToProjective(r *ProjectiveGroupElement) { - FeMul(&r.X, &p.X, &p.T) - FeMul(&r.Y, &p.Y, &p.Z) - FeMul(&r.Z, &p.Z, &p.T) -} - -func (p *CompletedGroupElement) ToExtended(r *ExtendedGroupElement) { - FeMul(&r.X, &p.X, &p.T) - FeMul(&r.Y, &p.Y, &p.Z) - FeMul(&r.Z, &p.Z, &p.T) - FeMul(&r.T, &p.X, &p.Y) -} - -func (p *PreComputedGroupElement) Zero() { - FeOne(&p.yPlusX) - FeOne(&p.yMinusX) - FeZero(&p.xy2d) -} - -func geAdd(r *CompletedGroupElement, p *ExtendedGroupElement, q *CachedGroupElement) { - var t0 FieldElement - - FeAdd(&r.X, &p.Y, &p.X) - FeSub(&r.Y, &p.Y, &p.X) - FeMul(&r.Z, &r.X, &q.yPlusX) - FeMul(&r.Y, &r.Y, &q.yMinusX) - FeMul(&r.T, &q.T2d, &p.T) - FeMul(&r.X, &p.Z, &q.Z) - FeAdd(&t0, &r.X, &r.X) - FeSub(&r.X, &r.Z, &r.Y) - FeAdd(&r.Y, &r.Z, &r.Y) - FeAdd(&r.Z, &t0, &r.T) - FeSub(&r.T, &t0, &r.T) -} - -func geSub(r *CompletedGroupElement, p *ExtendedGroupElement, q *CachedGroupElement) { - var t0 FieldElement - - FeAdd(&r.X, &p.Y, &p.X) - FeSub(&r.Y, &p.Y, &p.X) - FeMul(&r.Z, &r.X, &q.yMinusX) - FeMul(&r.Y, &r.Y, &q.yPlusX) - FeMul(&r.T, &q.T2d, &p.T) - FeMul(&r.X, &p.Z, &q.Z) - FeAdd(&t0, &r.X, &r.X) - FeSub(&r.X, &r.Z, &r.Y) - FeAdd(&r.Y, &r.Z, &r.Y) - FeSub(&r.Z, &t0, &r.T) - FeAdd(&r.T, &t0, &r.T) -} - -func geMixedAdd(r *CompletedGroupElement, p *ExtendedGroupElement, q *PreComputedGroupElement) { - var t0 FieldElement - - FeAdd(&r.X, &p.Y, &p.X) - FeSub(&r.Y, &p.Y, &p.X) - FeMul(&r.Z, &r.X, &q.yPlusX) - FeMul(&r.Y, &r.Y, &q.yMinusX) - FeMul(&r.T, &q.xy2d, &p.T) - FeAdd(&t0, &p.Z, &p.Z) - FeSub(&r.X, &r.Z, &r.Y) - FeAdd(&r.Y, &r.Z, &r.Y) - FeAdd(&r.Z, &t0, &r.T) - FeSub(&r.T, &t0, &r.T) -} - -func geMixedSub(r *CompletedGroupElement, p *ExtendedGroupElement, q *PreComputedGroupElement) { - var t0 FieldElement - - FeAdd(&r.X, &p.Y, &p.X) - FeSub(&r.Y, &p.Y, &p.X) - FeMul(&r.Z, &r.X, &q.yMinusX) - FeMul(&r.Y, &r.Y, &q.yPlusX) - FeMul(&r.T, &q.xy2d, &p.T) - FeAdd(&t0, &p.Z, &p.Z) - FeSub(&r.X, &r.Z, &r.Y) - FeAdd(&r.Y, &r.Z, &r.Y) - FeSub(&r.Z, &t0, &r.T) - FeAdd(&r.T, &t0, &r.T) -} - -func slide(r *[256]int8, a *[32]byte) { - for i := range r { - r[i] = int8(1 & (a[i>>3] >> uint(i&7))) - } - - for i := range r { - if r[i] != 0 { - for b := 1; b <= 6 && i+b < 256; b++ { - if r[i+b] != 0 { - if r[i]+(r[i+b]<= -15 { - r[i] -= r[i+b] << uint(b) - for k := i + b; k < 256; k++ { - if r[k] == 0 { - r[k] = 1 - break - } - r[k] = 0 - } - } else { - break - } - } - } - } - } -} - -// GeDoubleScalarMultVartime sets r = a*A + b*B -// where a = a[0]+256*a[1]+...+256^31 a[31]. -// and b = b[0]+256*b[1]+...+256^31 b[31]. -// B is the Ed25519 base point (x,4/5) with x positive. -func GeDoubleScalarMultVartime(r *ProjectiveGroupElement, a *[32]byte, A *ExtendedGroupElement, b *[32]byte) { - var aSlide, bSlide [256]int8 - var Ai [8]CachedGroupElement // A,3A,5A,7A,9A,11A,13A,15A - var t CompletedGroupElement - var u, A2 ExtendedGroupElement - var i int - - slide(&aSlide, a) - slide(&bSlide, b) - - A.ToCached(&Ai[0]) - A.Double(&t) - t.ToExtended(&A2) - - for i := 0; i < 7; i++ { - geAdd(&t, &A2, &Ai[i]) - t.ToExtended(&u) - u.ToCached(&Ai[i+1]) - } - - r.Zero() - - for i = 255; i >= 0; i-- { - if aSlide[i] != 0 || bSlide[i] != 0 { - break - } - } - - for ; i >= 0; i-- { - r.Double(&t) - - if aSlide[i] > 0 { - t.ToExtended(&u) - geAdd(&t, &u, &Ai[aSlide[i]/2]) - } else if aSlide[i] < 0 { - t.ToExtended(&u) - geSub(&t, &u, &Ai[(-aSlide[i])/2]) - } - - if bSlide[i] > 0 { - t.ToExtended(&u) - geMixedAdd(&t, &u, &bi[bSlide[i]/2]) - } else if bSlide[i] < 0 { - t.ToExtended(&u) - geMixedSub(&t, &u, &bi[(-bSlide[i])/2]) - } - - t.ToProjective(r) - } -} - -// equal returns 1 if b == c and 0 otherwise, assuming that b and c are -// non-negative. -func equal(b, c int32) int32 { - x := uint32(b ^ c) - x-- - return int32(x >> 31) -} - -// negative returns 1 if b < 0 and 0 otherwise. -func negative(b int32) int32 { - return (b >> 31) & 1 -} - -func PreComputedGroupElementCMove(t, u *PreComputedGroupElement, b int32) { - FeCMove(&t.yPlusX, &u.yPlusX, b) - FeCMove(&t.yMinusX, &u.yMinusX, b) - FeCMove(&t.xy2d, &u.xy2d, b) -} - -func selectPoint(t *PreComputedGroupElement, pos int32, b int32) { - var minusT PreComputedGroupElement - bNegative := negative(b) - bAbs := b - (((-bNegative) & b) << 1) - - t.Zero() - for i := int32(0); i < 8; i++ { - PreComputedGroupElementCMove(t, &base[pos][i], equal(bAbs, i+1)) - } - FeCopy(&minusT.yPlusX, &t.yMinusX) - FeCopy(&minusT.yMinusX, &t.yPlusX) - FeNeg(&minusT.xy2d, &t.xy2d) - PreComputedGroupElementCMove(t, &minusT, bNegative) -} - -// GeScalarMultBase computes h = a*B, where -// a = a[0]+256*a[1]+...+256^31 a[31] -// B is the Ed25519 base point (x,4/5) with x positive. -// -// Preconditions: -// a[31] <= 127 -func GeScalarMultBase(h *ExtendedGroupElement, a *[32]byte) { - var e [64]int8 - - for i, v := range a { - e[2*i] = int8(v & 15) - e[2*i+1] = int8((v >> 4) & 15) - } - - // each e[i] is between 0 and 15 and e[63] is between 0 and 7. - - carry := int8(0) - for i := 0; i < 63; i++ { - e[i] += carry - carry = (e[i] + 8) >> 4 - e[i] -= carry << 4 - } - e[63] += carry - // each e[i] is between -8 and 8. - - h.Zero() - var t PreComputedGroupElement - var r CompletedGroupElement - for i := int32(1); i < 64; i += 2 { - selectPoint(&t, i/2, int32(e[i])) - geMixedAdd(&r, h, &t) - r.ToExtended(h) - } - - var s ProjectiveGroupElement - - h.Double(&r) - r.ToProjective(&s) - s.Double(&r) - r.ToProjective(&s) - s.Double(&r) - r.ToProjective(&s) - s.Double(&r) - r.ToExtended(h) - - for i := int32(0); i < 64; i += 2 { - selectPoint(&t, i/2, int32(e[i])) - geMixedAdd(&r, h, &t) - r.ToExtended(h) - } -} - -// The scalars are GF(2^252 + 27742317777372353535851937790883648493). - -// Input: -// a[0]+256*a[1]+...+256^31*a[31] = a -// b[0]+256*b[1]+...+256^31*b[31] = b -// c[0]+256*c[1]+...+256^31*c[31] = c -// -// Output: -// s[0]+256*s[1]+...+256^31*s[31] = (ab+c) mod l -// where l = 2^252 + 27742317777372353535851937790883648493. -func ScMulAdd(s, a, b, c *[32]byte) { - a0 := 2097151 & load3(a[:]) - a1 := 2097151 & (load4(a[2:]) >> 5) - a2 := 2097151 & (load3(a[5:]) >> 2) - a3 := 2097151 & (load4(a[7:]) >> 7) - a4 := 2097151 & (load4(a[10:]) >> 4) - a5 := 2097151 & (load3(a[13:]) >> 1) - a6 := 2097151 & (load4(a[15:]) >> 6) - a7 := 2097151 & (load3(a[18:]) >> 3) - a8 := 2097151 & load3(a[21:]) - a9 := 2097151 & (load4(a[23:]) >> 5) - a10 := 2097151 & (load3(a[26:]) >> 2) - a11 := (load4(a[28:]) >> 7) - b0 := 2097151 & load3(b[:]) - b1 := 2097151 & (load4(b[2:]) >> 5) - b2 := 2097151 & (load3(b[5:]) >> 2) - b3 := 2097151 & (load4(b[7:]) >> 7) - b4 := 2097151 & (load4(b[10:]) >> 4) - b5 := 2097151 & (load3(b[13:]) >> 1) - b6 := 2097151 & (load4(b[15:]) >> 6) - b7 := 2097151 & (load3(b[18:]) >> 3) - b8 := 2097151 & load3(b[21:]) - b9 := 2097151 & (load4(b[23:]) >> 5) - b10 := 2097151 & (load3(b[26:]) >> 2) - b11 := (load4(b[28:]) >> 7) - c0 := 2097151 & load3(c[:]) - c1 := 2097151 & (load4(c[2:]) >> 5) - c2 := 2097151 & (load3(c[5:]) >> 2) - c3 := 2097151 & (load4(c[7:]) >> 7) - c4 := 2097151 & (load4(c[10:]) >> 4) - c5 := 2097151 & (load3(c[13:]) >> 1) - c6 := 2097151 & (load4(c[15:]) >> 6) - c7 := 2097151 & (load3(c[18:]) >> 3) - c8 := 2097151 & load3(c[21:]) - c9 := 2097151 & (load4(c[23:]) >> 5) - c10 := 2097151 & (load3(c[26:]) >> 2) - c11 := (load4(c[28:]) >> 7) - var carry [23]int64 - - s0 := c0 + a0*b0 - s1 := c1 + a0*b1 + a1*b0 - s2 := c2 + a0*b2 + a1*b1 + a2*b0 - s3 := c3 + a0*b3 + a1*b2 + a2*b1 + a3*b0 - s4 := c4 + a0*b4 + a1*b3 + a2*b2 + a3*b1 + a4*b0 - s5 := c5 + a0*b5 + a1*b4 + a2*b3 + a3*b2 + a4*b1 + a5*b0 - s6 := c6 + a0*b6 + a1*b5 + a2*b4 + a3*b3 + a4*b2 + a5*b1 + a6*b0 - s7 := c7 + a0*b7 + a1*b6 + a2*b5 + a3*b4 + a4*b3 + a5*b2 + a6*b1 + a7*b0 - s8 := c8 + a0*b8 + a1*b7 + a2*b6 + a3*b5 + a4*b4 + a5*b3 + a6*b2 + a7*b1 + a8*b0 - s9 := c9 + a0*b9 + a1*b8 + a2*b7 + a3*b6 + a4*b5 + a5*b4 + a6*b3 + a7*b2 + a8*b1 + a9*b0 - s10 := c10 + a0*b10 + a1*b9 + a2*b8 + a3*b7 + a4*b6 + a5*b5 + a6*b4 + a7*b3 + a8*b2 + a9*b1 + a10*b0 - s11 := c11 + a0*b11 + a1*b10 + a2*b9 + a3*b8 + a4*b7 + a5*b6 + a6*b5 + a7*b4 + a8*b3 + a9*b2 + a10*b1 + a11*b0 - s12 := a1*b11 + a2*b10 + a3*b9 + a4*b8 + a5*b7 + a6*b6 + a7*b5 + a8*b4 + a9*b3 + a10*b2 + a11*b1 - s13 := a2*b11 + a3*b10 + a4*b9 + a5*b8 + a6*b7 + a7*b6 + a8*b5 + a9*b4 + a10*b3 + a11*b2 - s14 := a3*b11 + a4*b10 + a5*b9 + a6*b8 + a7*b7 + a8*b6 + a9*b5 + a10*b4 + a11*b3 - s15 := a4*b11 + a5*b10 + a6*b9 + a7*b8 + a8*b7 + a9*b6 + a10*b5 + a11*b4 - s16 := a5*b11 + a6*b10 + a7*b9 + a8*b8 + a9*b7 + a10*b6 + a11*b5 - s17 := a6*b11 + a7*b10 + a8*b9 + a9*b8 + a10*b7 + a11*b6 - s18 := a7*b11 + a8*b10 + a9*b9 + a10*b8 + a11*b7 - s19 := a8*b11 + a9*b10 + a10*b9 + a11*b8 - s20 := a9*b11 + a10*b10 + a11*b9 - s21 := a10*b11 + a11*b10 - s22 := a11 * b11 - s23 := int64(0) - - carry[0] = (s0 + (1 << 20)) >> 21 - s1 += carry[0] - s0 -= carry[0] << 21 - carry[2] = (s2 + (1 << 20)) >> 21 - s3 += carry[2] - s2 -= carry[2] << 21 - carry[4] = (s4 + (1 << 20)) >> 21 - s5 += carry[4] - s4 -= carry[4] << 21 - carry[6] = (s6 + (1 << 20)) >> 21 - s7 += carry[6] - s6 -= carry[6] << 21 - carry[8] = (s8 + (1 << 20)) >> 21 - s9 += carry[8] - s8 -= carry[8] << 21 - carry[10] = (s10 + (1 << 20)) >> 21 - s11 += carry[10] - s10 -= carry[10] << 21 - carry[12] = (s12 + (1 << 20)) >> 21 - s13 += carry[12] - s12 -= carry[12] << 21 - carry[14] = (s14 + (1 << 20)) >> 21 - s15 += carry[14] - s14 -= carry[14] << 21 - carry[16] = (s16 + (1 << 20)) >> 21 - s17 += carry[16] - s16 -= carry[16] << 21 - carry[18] = (s18 + (1 << 20)) >> 21 - s19 += carry[18] - s18 -= carry[18] << 21 - carry[20] = (s20 + (1 << 20)) >> 21 - s21 += carry[20] - s20 -= carry[20] << 21 - carry[22] = (s22 + (1 << 20)) >> 21 - s23 += carry[22] - s22 -= carry[22] << 21 - - carry[1] = (s1 + (1 << 20)) >> 21 - s2 += carry[1] - s1 -= carry[1] << 21 - carry[3] = (s3 + (1 << 20)) >> 21 - s4 += carry[3] - s3 -= carry[3] << 21 - carry[5] = (s5 + (1 << 20)) >> 21 - s6 += carry[5] - s5 -= carry[5] << 21 - carry[7] = (s7 + (1 << 20)) >> 21 - s8 += carry[7] - s7 -= carry[7] << 21 - carry[9] = (s9 + (1 << 20)) >> 21 - s10 += carry[9] - s9 -= carry[9] << 21 - carry[11] = (s11 + (1 << 20)) >> 21 - s12 += carry[11] - s11 -= carry[11] << 21 - carry[13] = (s13 + (1 << 20)) >> 21 - s14 += carry[13] - s13 -= carry[13] << 21 - carry[15] = (s15 + (1 << 20)) >> 21 - s16 += carry[15] - s15 -= carry[15] << 21 - carry[17] = (s17 + (1 << 20)) >> 21 - s18 += carry[17] - s17 -= carry[17] << 21 - carry[19] = (s19 + (1 << 20)) >> 21 - s20 += carry[19] - s19 -= carry[19] << 21 - carry[21] = (s21 + (1 << 20)) >> 21 - s22 += carry[21] - s21 -= carry[21] << 21 - - s11 += s23 * 666643 - s12 += s23 * 470296 - s13 += s23 * 654183 - s14 -= s23 * 997805 - s15 += s23 * 136657 - s16 -= s23 * 683901 - s23 = 0 - - s10 += s22 * 666643 - s11 += s22 * 470296 - s12 += s22 * 654183 - s13 -= s22 * 997805 - s14 += s22 * 136657 - s15 -= s22 * 683901 - s22 = 0 - - s9 += s21 * 666643 - s10 += s21 * 470296 - s11 += s21 * 654183 - s12 -= s21 * 997805 - s13 += s21 * 136657 - s14 -= s21 * 683901 - s21 = 0 - - s8 += s20 * 666643 - s9 += s20 * 470296 - s10 += s20 * 654183 - s11 -= s20 * 997805 - s12 += s20 * 136657 - s13 -= s20 * 683901 - s20 = 0 - - s7 += s19 * 666643 - s8 += s19 * 470296 - s9 += s19 * 654183 - s10 -= s19 * 997805 - s11 += s19 * 136657 - s12 -= s19 * 683901 - s19 = 0 - - s6 += s18 * 666643 - s7 += s18 * 470296 - s8 += s18 * 654183 - s9 -= s18 * 997805 - s10 += s18 * 136657 - s11 -= s18 * 683901 - s18 = 0 - - carry[6] = (s6 + (1 << 20)) >> 21 - s7 += carry[6] - s6 -= carry[6] << 21 - carry[8] = (s8 + (1 << 20)) >> 21 - s9 += carry[8] - s8 -= carry[8] << 21 - carry[10] = (s10 + (1 << 20)) >> 21 - s11 += carry[10] - s10 -= carry[10] << 21 - carry[12] = (s12 + (1 << 20)) >> 21 - s13 += carry[12] - s12 -= carry[12] << 21 - carry[14] = (s14 + (1 << 20)) >> 21 - s15 += carry[14] - s14 -= carry[14] << 21 - carry[16] = (s16 + (1 << 20)) >> 21 - s17 += carry[16] - s16 -= carry[16] << 21 - - carry[7] = (s7 + (1 << 20)) >> 21 - s8 += carry[7] - s7 -= carry[7] << 21 - carry[9] = (s9 + (1 << 20)) >> 21 - s10 += carry[9] - s9 -= carry[9] << 21 - carry[11] = (s11 + (1 << 20)) >> 21 - s12 += carry[11] - s11 -= carry[11] << 21 - carry[13] = (s13 + (1 << 20)) >> 21 - s14 += carry[13] - s13 -= carry[13] << 21 - carry[15] = (s15 + (1 << 20)) >> 21 - s16 += carry[15] - s15 -= carry[15] << 21 - - s5 += s17 * 666643 - s6 += s17 * 470296 - s7 += s17 * 654183 - s8 -= s17 * 997805 - s9 += s17 * 136657 - s10 -= s17 * 683901 - s17 = 0 - - s4 += s16 * 666643 - s5 += s16 * 470296 - s6 += s16 * 654183 - s7 -= s16 * 997805 - s8 += s16 * 136657 - s9 -= s16 * 683901 - s16 = 0 - - s3 += s15 * 666643 - s4 += s15 * 470296 - s5 += s15 * 654183 - s6 -= s15 * 997805 - s7 += s15 * 136657 - s8 -= s15 * 683901 - s15 = 0 - - s2 += s14 * 666643 - s3 += s14 * 470296 - s4 += s14 * 654183 - s5 -= s14 * 997805 - s6 += s14 * 136657 - s7 -= s14 * 683901 - s14 = 0 - - s1 += s13 * 666643 - s2 += s13 * 470296 - s3 += s13 * 654183 - s4 -= s13 * 997805 - s5 += s13 * 136657 - s6 -= s13 * 683901 - s13 = 0 - - s0 += s12 * 666643 - s1 += s12 * 470296 - s2 += s12 * 654183 - s3 -= s12 * 997805 - s4 += s12 * 136657 - s5 -= s12 * 683901 - s12 = 0 - - carry[0] = (s0 + (1 << 20)) >> 21 - s1 += carry[0] - s0 -= carry[0] << 21 - carry[2] = (s2 + (1 << 20)) >> 21 - s3 += carry[2] - s2 -= carry[2] << 21 - carry[4] = (s4 + (1 << 20)) >> 21 - s5 += carry[4] - s4 -= carry[4] << 21 - carry[6] = (s6 + (1 << 20)) >> 21 - s7 += carry[6] - s6 -= carry[6] << 21 - carry[8] = (s8 + (1 << 20)) >> 21 - s9 += carry[8] - s8 -= carry[8] << 21 - carry[10] = (s10 + (1 << 20)) >> 21 - s11 += carry[10] - s10 -= carry[10] << 21 - - carry[1] = (s1 + (1 << 20)) >> 21 - s2 += carry[1] - s1 -= carry[1] << 21 - carry[3] = (s3 + (1 << 20)) >> 21 - s4 += carry[3] - s3 -= carry[3] << 21 - carry[5] = (s5 + (1 << 20)) >> 21 - s6 += carry[5] - s5 -= carry[5] << 21 - carry[7] = (s7 + (1 << 20)) >> 21 - s8 += carry[7] - s7 -= carry[7] << 21 - carry[9] = (s9 + (1 << 20)) >> 21 - s10 += carry[9] - s9 -= carry[9] << 21 - carry[11] = (s11 + (1 << 20)) >> 21 - s12 += carry[11] - s11 -= carry[11] << 21 - - s0 += s12 * 666643 - s1 += s12 * 470296 - s2 += s12 * 654183 - s3 -= s12 * 997805 - s4 += s12 * 136657 - s5 -= s12 * 683901 - s12 = 0 - - carry[0] = s0 >> 21 - s1 += carry[0] - s0 -= carry[0] << 21 - carry[1] = s1 >> 21 - s2 += carry[1] - s1 -= carry[1] << 21 - carry[2] = s2 >> 21 - s3 += carry[2] - s2 -= carry[2] << 21 - carry[3] = s3 >> 21 - s4 += carry[3] - s3 -= carry[3] << 21 - carry[4] = s4 >> 21 - s5 += carry[4] - s4 -= carry[4] << 21 - carry[5] = s5 >> 21 - s6 += carry[5] - s5 -= carry[5] << 21 - carry[6] = s6 >> 21 - s7 += carry[6] - s6 -= carry[6] << 21 - carry[7] = s7 >> 21 - s8 += carry[7] - s7 -= carry[7] << 21 - carry[8] = s8 >> 21 - s9 += carry[8] - s8 -= carry[8] << 21 - carry[9] = s9 >> 21 - s10 += carry[9] - s9 -= carry[9] << 21 - carry[10] = s10 >> 21 - s11 += carry[10] - s10 -= carry[10] << 21 - carry[11] = s11 >> 21 - s12 += carry[11] - s11 -= carry[11] << 21 - - s0 += s12 * 666643 - s1 += s12 * 470296 - s2 += s12 * 654183 - s3 -= s12 * 997805 - s4 += s12 * 136657 - s5 -= s12 * 683901 - s12 = 0 - - carry[0] = s0 >> 21 - s1 += carry[0] - s0 -= carry[0] << 21 - carry[1] = s1 >> 21 - s2 += carry[1] - s1 -= carry[1] << 21 - carry[2] = s2 >> 21 - s3 += carry[2] - s2 -= carry[2] << 21 - carry[3] = s3 >> 21 - s4 += carry[3] - s3 -= carry[3] << 21 - carry[4] = s4 >> 21 - s5 += carry[4] - s4 -= carry[4] << 21 - carry[5] = s5 >> 21 - s6 += carry[5] - s5 -= carry[5] << 21 - carry[6] = s6 >> 21 - s7 += carry[6] - s6 -= carry[6] << 21 - carry[7] = s7 >> 21 - s8 += carry[7] - s7 -= carry[7] << 21 - carry[8] = s8 >> 21 - s9 += carry[8] - s8 -= carry[8] << 21 - carry[9] = s9 >> 21 - s10 += carry[9] - s9 -= carry[9] << 21 - carry[10] = s10 >> 21 - s11 += carry[10] - s10 -= carry[10] << 21 - - s[0] = byte(s0 >> 0) - s[1] = byte(s0 >> 8) - s[2] = byte((s0 >> 16) | (s1 << 5)) - s[3] = byte(s1 >> 3) - s[4] = byte(s1 >> 11) - s[5] = byte((s1 >> 19) | (s2 << 2)) - s[6] = byte(s2 >> 6) - s[7] = byte((s2 >> 14) | (s3 << 7)) - s[8] = byte(s3 >> 1) - s[9] = byte(s3 >> 9) - s[10] = byte((s3 >> 17) | (s4 << 4)) - s[11] = byte(s4 >> 4) - s[12] = byte(s4 >> 12) - s[13] = byte((s4 >> 20) | (s5 << 1)) - s[14] = byte(s5 >> 7) - s[15] = byte((s5 >> 15) | (s6 << 6)) - s[16] = byte(s6 >> 2) - s[17] = byte(s6 >> 10) - s[18] = byte((s6 >> 18) | (s7 << 3)) - s[19] = byte(s7 >> 5) - s[20] = byte(s7 >> 13) - s[21] = byte(s8 >> 0) - s[22] = byte(s8 >> 8) - s[23] = byte((s8 >> 16) | (s9 << 5)) - s[24] = byte(s9 >> 3) - s[25] = byte(s9 >> 11) - s[26] = byte((s9 >> 19) | (s10 << 2)) - s[27] = byte(s10 >> 6) - s[28] = byte((s10 >> 14) | (s11 << 7)) - s[29] = byte(s11 >> 1) - s[30] = byte(s11 >> 9) - s[31] = byte(s11 >> 17) -} - -// Input: -// s[0]+256*s[1]+...+256^63*s[63] = s -// -// Output: -// s[0]+256*s[1]+...+256^31*s[31] = s mod l -// where l = 2^252 + 27742317777372353535851937790883648493. -func ScReduce(out *[32]byte, s *[64]byte) { - s0 := 2097151 & load3(s[:]) - s1 := 2097151 & (load4(s[2:]) >> 5) - s2 := 2097151 & (load3(s[5:]) >> 2) - s3 := 2097151 & (load4(s[7:]) >> 7) - s4 := 2097151 & (load4(s[10:]) >> 4) - s5 := 2097151 & (load3(s[13:]) >> 1) - s6 := 2097151 & (load4(s[15:]) >> 6) - s7 := 2097151 & (load3(s[18:]) >> 3) - s8 := 2097151 & load3(s[21:]) - s9 := 2097151 & (load4(s[23:]) >> 5) - s10 := 2097151 & (load3(s[26:]) >> 2) - s11 := 2097151 & (load4(s[28:]) >> 7) - s12 := 2097151 & (load4(s[31:]) >> 4) - s13 := 2097151 & (load3(s[34:]) >> 1) - s14 := 2097151 & (load4(s[36:]) >> 6) - s15 := 2097151 & (load3(s[39:]) >> 3) - s16 := 2097151 & load3(s[42:]) - s17 := 2097151 & (load4(s[44:]) >> 5) - s18 := 2097151 & (load3(s[47:]) >> 2) - s19 := 2097151 & (load4(s[49:]) >> 7) - s20 := 2097151 & (load4(s[52:]) >> 4) - s21 := 2097151 & (load3(s[55:]) >> 1) - s22 := 2097151 & (load4(s[57:]) >> 6) - s23 := (load4(s[60:]) >> 3) - - s11 += s23 * 666643 - s12 += s23 * 470296 - s13 += s23 * 654183 - s14 -= s23 * 997805 - s15 += s23 * 136657 - s16 -= s23 * 683901 - s23 = 0 - - s10 += s22 * 666643 - s11 += s22 * 470296 - s12 += s22 * 654183 - s13 -= s22 * 997805 - s14 += s22 * 136657 - s15 -= s22 * 683901 - s22 = 0 - - s9 += s21 * 666643 - s10 += s21 * 470296 - s11 += s21 * 654183 - s12 -= s21 * 997805 - s13 += s21 * 136657 - s14 -= s21 * 683901 - s21 = 0 - - s8 += s20 * 666643 - s9 += s20 * 470296 - s10 += s20 * 654183 - s11 -= s20 * 997805 - s12 += s20 * 136657 - s13 -= s20 * 683901 - s20 = 0 - - s7 += s19 * 666643 - s8 += s19 * 470296 - s9 += s19 * 654183 - s10 -= s19 * 997805 - s11 += s19 * 136657 - s12 -= s19 * 683901 - s19 = 0 - - s6 += s18 * 666643 - s7 += s18 * 470296 - s8 += s18 * 654183 - s9 -= s18 * 997805 - s10 += s18 * 136657 - s11 -= s18 * 683901 - s18 = 0 - - var carry [17]int64 - - carry[6] = (s6 + (1 << 20)) >> 21 - s7 += carry[6] - s6 -= carry[6] << 21 - carry[8] = (s8 + (1 << 20)) >> 21 - s9 += carry[8] - s8 -= carry[8] << 21 - carry[10] = (s10 + (1 << 20)) >> 21 - s11 += carry[10] - s10 -= carry[10] << 21 - carry[12] = (s12 + (1 << 20)) >> 21 - s13 += carry[12] - s12 -= carry[12] << 21 - carry[14] = (s14 + (1 << 20)) >> 21 - s15 += carry[14] - s14 -= carry[14] << 21 - carry[16] = (s16 + (1 << 20)) >> 21 - s17 += carry[16] - s16 -= carry[16] << 21 - - carry[7] = (s7 + (1 << 20)) >> 21 - s8 += carry[7] - s7 -= carry[7] << 21 - carry[9] = (s9 + (1 << 20)) >> 21 - s10 += carry[9] - s9 -= carry[9] << 21 - carry[11] = (s11 + (1 << 20)) >> 21 - s12 += carry[11] - s11 -= carry[11] << 21 - carry[13] = (s13 + (1 << 20)) >> 21 - s14 += carry[13] - s13 -= carry[13] << 21 - carry[15] = (s15 + (1 << 20)) >> 21 - s16 += carry[15] - s15 -= carry[15] << 21 - - s5 += s17 * 666643 - s6 += s17 * 470296 - s7 += s17 * 654183 - s8 -= s17 * 997805 - s9 += s17 * 136657 - s10 -= s17 * 683901 - s17 = 0 - - s4 += s16 * 666643 - s5 += s16 * 470296 - s6 += s16 * 654183 - s7 -= s16 * 997805 - s8 += s16 * 136657 - s9 -= s16 * 683901 - s16 = 0 - - s3 += s15 * 666643 - s4 += s15 * 470296 - s5 += s15 * 654183 - s6 -= s15 * 997805 - s7 += s15 * 136657 - s8 -= s15 * 683901 - s15 = 0 - - s2 += s14 * 666643 - s3 += s14 * 470296 - s4 += s14 * 654183 - s5 -= s14 * 997805 - s6 += s14 * 136657 - s7 -= s14 * 683901 - s14 = 0 - - s1 += s13 * 666643 - s2 += s13 * 470296 - s3 += s13 * 654183 - s4 -= s13 * 997805 - s5 += s13 * 136657 - s6 -= s13 * 683901 - s13 = 0 - - s0 += s12 * 666643 - s1 += s12 * 470296 - s2 += s12 * 654183 - s3 -= s12 * 997805 - s4 += s12 * 136657 - s5 -= s12 * 683901 - s12 = 0 - - carry[0] = (s0 + (1 << 20)) >> 21 - s1 += carry[0] - s0 -= carry[0] << 21 - carry[2] = (s2 + (1 << 20)) >> 21 - s3 += carry[2] - s2 -= carry[2] << 21 - carry[4] = (s4 + (1 << 20)) >> 21 - s5 += carry[4] - s4 -= carry[4] << 21 - carry[6] = (s6 + (1 << 20)) >> 21 - s7 += carry[6] - s6 -= carry[6] << 21 - carry[8] = (s8 + (1 << 20)) >> 21 - s9 += carry[8] - s8 -= carry[8] << 21 - carry[10] = (s10 + (1 << 20)) >> 21 - s11 += carry[10] - s10 -= carry[10] << 21 - - carry[1] = (s1 + (1 << 20)) >> 21 - s2 += carry[1] - s1 -= carry[1] << 21 - carry[3] = (s3 + (1 << 20)) >> 21 - s4 += carry[3] - s3 -= carry[3] << 21 - carry[5] = (s5 + (1 << 20)) >> 21 - s6 += carry[5] - s5 -= carry[5] << 21 - carry[7] = (s7 + (1 << 20)) >> 21 - s8 += carry[7] - s7 -= carry[7] << 21 - carry[9] = (s9 + (1 << 20)) >> 21 - s10 += carry[9] - s9 -= carry[9] << 21 - carry[11] = (s11 + (1 << 20)) >> 21 - s12 += carry[11] - s11 -= carry[11] << 21 - - s0 += s12 * 666643 - s1 += s12 * 470296 - s2 += s12 * 654183 - s3 -= s12 * 997805 - s4 += s12 * 136657 - s5 -= s12 * 683901 - s12 = 0 - - carry[0] = s0 >> 21 - s1 += carry[0] - s0 -= carry[0] << 21 - carry[1] = s1 >> 21 - s2 += carry[1] - s1 -= carry[1] << 21 - carry[2] = s2 >> 21 - s3 += carry[2] - s2 -= carry[2] << 21 - carry[3] = s3 >> 21 - s4 += carry[3] - s3 -= carry[3] << 21 - carry[4] = s4 >> 21 - s5 += carry[4] - s4 -= carry[4] << 21 - carry[5] = s5 >> 21 - s6 += carry[5] - s5 -= carry[5] << 21 - carry[6] = s6 >> 21 - s7 += carry[6] - s6 -= carry[6] << 21 - carry[7] = s7 >> 21 - s8 += carry[7] - s7 -= carry[7] << 21 - carry[8] = s8 >> 21 - s9 += carry[8] - s8 -= carry[8] << 21 - carry[9] = s9 >> 21 - s10 += carry[9] - s9 -= carry[9] << 21 - carry[10] = s10 >> 21 - s11 += carry[10] - s10 -= carry[10] << 21 - carry[11] = s11 >> 21 - s12 += carry[11] - s11 -= carry[11] << 21 - - s0 += s12 * 666643 - s1 += s12 * 470296 - s2 += s12 * 654183 - s3 -= s12 * 997805 - s4 += s12 * 136657 - s5 -= s12 * 683901 - s12 = 0 - - carry[0] = s0 >> 21 - s1 += carry[0] - s0 -= carry[0] << 21 - carry[1] = s1 >> 21 - s2 += carry[1] - s1 -= carry[1] << 21 - carry[2] = s2 >> 21 - s3 += carry[2] - s2 -= carry[2] << 21 - carry[3] = s3 >> 21 - s4 += carry[3] - s3 -= carry[3] << 21 - carry[4] = s4 >> 21 - s5 += carry[4] - s4 -= carry[4] << 21 - carry[5] = s5 >> 21 - s6 += carry[5] - s5 -= carry[5] << 21 - carry[6] = s6 >> 21 - s7 += carry[6] - s6 -= carry[6] << 21 - carry[7] = s7 >> 21 - s8 += carry[7] - s7 -= carry[7] << 21 - carry[8] = s8 >> 21 - s9 += carry[8] - s8 -= carry[8] << 21 - carry[9] = s9 >> 21 - s10 += carry[9] - s9 -= carry[9] << 21 - carry[10] = s10 >> 21 - s11 += carry[10] - s10 -= carry[10] << 21 - - out[0] = byte(s0 >> 0) - out[1] = byte(s0 >> 8) - out[2] = byte((s0 >> 16) | (s1 << 5)) - out[3] = byte(s1 >> 3) - out[4] = byte(s1 >> 11) - out[5] = byte((s1 >> 19) | (s2 << 2)) - out[6] = byte(s2 >> 6) - out[7] = byte((s2 >> 14) | (s3 << 7)) - out[8] = byte(s3 >> 1) - out[9] = byte(s3 >> 9) - out[10] = byte((s3 >> 17) | (s4 << 4)) - out[11] = byte(s4 >> 4) - out[12] = byte(s4 >> 12) - out[13] = byte((s4 >> 20) | (s5 << 1)) - out[14] = byte(s5 >> 7) - out[15] = byte((s5 >> 15) | (s6 << 6)) - out[16] = byte(s6 >> 2) - out[17] = byte(s6 >> 10) - out[18] = byte((s6 >> 18) | (s7 << 3)) - out[19] = byte(s7 >> 5) - out[20] = byte(s7 >> 13) - out[21] = byte(s8 >> 0) - out[22] = byte(s8 >> 8) - out[23] = byte((s8 >> 16) | (s9 << 5)) - out[24] = byte(s9 >> 3) - out[25] = byte(s9 >> 11) - out[26] = byte((s9 >> 19) | (s10 << 2)) - out[27] = byte(s10 >> 6) - out[28] = byte((s10 >> 14) | (s11 << 7)) - out[29] = byte(s11 >> 1) - out[30] = byte(s11 >> 9) - out[31] = byte(s11 >> 17) -} - -// order is the order of Curve25519 in little-endian form. -var order = [4]uint64{0x5812631a5cf5d3ed, 0x14def9dea2f79cd6, 0, 0x1000000000000000} - -// ScMinimal returns true if the given scalar is less than the order of the -// curve. -func ScMinimal(scalar *[32]byte) bool { - for i := 3; ; i-- { - v := binary.LittleEndian.Uint64(scalar[i*8:]) - if v > order[i] { - return false - } else if v < order[i] { - break - } else if i == 0 { - return false - } - } - - return true -} diff --git a/vendor/golang.org/x/crypto/poly1305/bits_compat.go b/vendor/golang.org/x/crypto/internal/poly1305/bits_compat.go similarity index 100% rename from vendor/golang.org/x/crypto/poly1305/bits_compat.go rename to vendor/golang.org/x/crypto/internal/poly1305/bits_compat.go diff --git a/vendor/golang.org/x/crypto/poly1305/bits_go1.13.go b/vendor/golang.org/x/crypto/internal/poly1305/bits_go1.13.go similarity index 100% rename from vendor/golang.org/x/crypto/poly1305/bits_go1.13.go rename to vendor/golang.org/x/crypto/internal/poly1305/bits_go1.13.go diff --git a/vendor/golang.org/x/crypto/poly1305/mac_noasm.go b/vendor/golang.org/x/crypto/internal/poly1305/mac_noasm.go similarity index 100% rename from vendor/golang.org/x/crypto/poly1305/mac_noasm.go rename to vendor/golang.org/x/crypto/internal/poly1305/mac_noasm.go diff --git a/vendor/golang.org/x/crypto/poly1305/poly1305.go b/vendor/golang.org/x/crypto/internal/poly1305/poly1305.go similarity index 98% rename from vendor/golang.org/x/crypto/poly1305/poly1305.go rename to vendor/golang.org/x/crypto/internal/poly1305/poly1305.go index 9d7a6af09..4aaea810a 100644 --- a/vendor/golang.org/x/crypto/poly1305/poly1305.go +++ b/vendor/golang.org/x/crypto/internal/poly1305/poly1305.go @@ -15,7 +15,7 @@ // used with a fixed key in order to generate one-time keys from an nonce. // However, in this package AES isn't used and the one-time key is specified // directly. -package poly1305 // import "golang.org/x/crypto/poly1305" +package poly1305 import "crypto/subtle" diff --git a/vendor/golang.org/x/crypto/poly1305/sum_amd64.go b/vendor/golang.org/x/crypto/internal/poly1305/sum_amd64.go similarity index 100% rename from vendor/golang.org/x/crypto/poly1305/sum_amd64.go rename to vendor/golang.org/x/crypto/internal/poly1305/sum_amd64.go diff --git a/vendor/golang.org/x/crypto/poly1305/sum_amd64.s b/vendor/golang.org/x/crypto/internal/poly1305/sum_amd64.s similarity index 100% rename from vendor/golang.org/x/crypto/poly1305/sum_amd64.s rename to vendor/golang.org/x/crypto/internal/poly1305/sum_amd64.s diff --git a/vendor/golang.org/x/crypto/poly1305/sum_generic.go b/vendor/golang.org/x/crypto/internal/poly1305/sum_generic.go similarity index 99% rename from vendor/golang.org/x/crypto/poly1305/sum_generic.go rename to vendor/golang.org/x/crypto/internal/poly1305/sum_generic.go index c942a6590..e041da5ea 100644 --- a/vendor/golang.org/x/crypto/poly1305/sum_generic.go +++ b/vendor/golang.org/x/crypto/internal/poly1305/sum_generic.go @@ -136,7 +136,7 @@ func shiftRightBy2(a uint128) uint128 { // updateGeneric absorbs msg into the state.h accumulator. For each chunk m of // 128 bits of message, it computes // -// h₊ = (h + m) * r mod 2¹³⁰ - 5 +// h₊ = (h + m) * r mod 2¹³⁰ - 5 // // If the msg length is not a multiple of TagSize, it assumes the last // incomplete chunk is the final one. @@ -278,8 +278,7 @@ const ( // finalize completes the modular reduction of h and computes // -// out = h + s mod 2¹²⁸ -// +// out = h + s mod 2¹²⁸ func finalize(out *[TagSize]byte, h *[3]uint64, s *[2]uint64) { h0, h1, h2 := h[0], h[1], h[2] diff --git a/vendor/golang.org/x/crypto/poly1305/sum_ppc64le.go b/vendor/golang.org/x/crypto/internal/poly1305/sum_ppc64le.go similarity index 100% rename from vendor/golang.org/x/crypto/poly1305/sum_ppc64le.go rename to vendor/golang.org/x/crypto/internal/poly1305/sum_ppc64le.go diff --git a/vendor/golang.org/x/crypto/poly1305/sum_ppc64le.s b/vendor/golang.org/x/crypto/internal/poly1305/sum_ppc64le.s similarity index 100% rename from vendor/golang.org/x/crypto/poly1305/sum_ppc64le.s rename to vendor/golang.org/x/crypto/internal/poly1305/sum_ppc64le.s diff --git a/vendor/golang.org/x/crypto/poly1305/sum_s390x.go b/vendor/golang.org/x/crypto/internal/poly1305/sum_s390x.go similarity index 99% rename from vendor/golang.org/x/crypto/poly1305/sum_s390x.go rename to vendor/golang.org/x/crypto/internal/poly1305/sum_s390x.go index 62cc9f847..ec9596688 100644 --- a/vendor/golang.org/x/crypto/poly1305/sum_s390x.go +++ b/vendor/golang.org/x/crypto/internal/poly1305/sum_s390x.go @@ -14,6 +14,7 @@ import ( // updateVX is an assembly implementation of Poly1305 that uses vector // instructions. It must only be called if the vector facility (vx) is // available. +// //go:noescape func updateVX(state *macState, msg []byte) diff --git a/vendor/golang.org/x/crypto/poly1305/sum_s390x.s b/vendor/golang.org/x/crypto/internal/poly1305/sum_s390x.s similarity index 99% rename from vendor/golang.org/x/crypto/poly1305/sum_s390x.s rename to vendor/golang.org/x/crypto/internal/poly1305/sum_s390x.s index 69c64f842..aa9e0494c 100644 --- a/vendor/golang.org/x/crypto/poly1305/sum_s390x.s +++ b/vendor/golang.org/x/crypto/internal/poly1305/sum_s390x.s @@ -18,7 +18,7 @@ // value. These limbs are, for the most part, zero extended and // placed into 64-bit vector register elements. Each vector // register is 128-bits wide and so holds 2 of these elements. -// Using 26-bit limbs allows us plenty of headroom to accomodate +// Using 26-bit limbs allows us plenty of headroom to accommodate // accumulations before and after multiplication without // overflowing either 32-bits (before multiplication) or 64-bits // (after multiplication). diff --git a/vendor/golang.org/x/crypto/openpgp/armor/armor.go b/vendor/golang.org/x/crypto/openpgp/armor/armor.go index ebc87876e..be342ad47 100644 --- a/vendor/golang.org/x/crypto/openpgp/armor/armor.go +++ b/vendor/golang.org/x/crypto/openpgp/armor/armor.go @@ -23,12 +23,14 @@ import ( // A Block represents an OpenPGP armored structure. // // The encoded form is: -// -----BEGIN Type----- -// Headers // -// base64-encoded Bytes -// '=' base64 encoded checksum -// -----END Type----- +// -----BEGIN Type----- +// Headers +// +// base64-encoded Bytes +// '=' base64 encoded checksum +// -----END Type----- +// // where Headers is a possibly empty sequence of Key: Value lines. // // Since the armored data can be very large, this package presents a streaming diff --git a/vendor/golang.org/x/crypto/openpgp/armor/encode.go b/vendor/golang.org/x/crypto/openpgp/armor/encode.go index 6f07582c3..5b6e16c19 100644 --- a/vendor/golang.org/x/crypto/openpgp/armor/encode.go +++ b/vendor/golang.org/x/crypto/openpgp/armor/encode.go @@ -96,7 +96,8 @@ func (l *lineBreaker) Close() (err error) { // trailer. // // It's built into a stack of io.Writers: -// encoding -> base64 encoder -> lineBreaker -> out +// +// encoding -> base64 encoder -> lineBreaker -> out type encoding struct { out io.Writer breaker *lineBreaker diff --git a/vendor/golang.org/x/crypto/openpgp/elgamal/elgamal.go b/vendor/golang.org/x/crypto/openpgp/elgamal/elgamal.go index 84396a089..743b35a12 100644 --- a/vendor/golang.org/x/crypto/openpgp/elgamal/elgamal.go +++ b/vendor/golang.org/x/crypto/openpgp/elgamal/elgamal.go @@ -77,8 +77,8 @@ func Encrypt(random io.Reader, pub *PublicKey, msg []byte) (c1, c2 *big.Int, err // returns the plaintext of the message. An error can result only if the // ciphertext is invalid. Users should keep in mind that this is a padding // oracle and thus, if exposed to an adaptive chosen ciphertext attack, can -// be used to break the cryptosystem. See ``Chosen Ciphertext Attacks -// Against Protocols Based on the RSA Encryption Standard PKCS #1'', Daniel +// be used to break the cryptosystem. See “Chosen Ciphertext Attacks +// Against Protocols Based on the RSA Encryption Standard PKCS #1”, Daniel // Bleichenbacher, Advances in Cryptology (Crypto '98), func Decrypt(priv *PrivateKey, c1, c2 *big.Int) (msg []byte, err error) { s := new(big.Int).Exp(c1, priv.X, priv.P) diff --git a/vendor/golang.org/x/crypto/pbkdf2/pbkdf2.go b/vendor/golang.org/x/crypto/pbkdf2/pbkdf2.go index 593f65300..904b57e01 100644 --- a/vendor/golang.org/x/crypto/pbkdf2/pbkdf2.go +++ b/vendor/golang.org/x/crypto/pbkdf2/pbkdf2.go @@ -32,7 +32,7 @@ import ( // can get a derived key for e.g. AES-256 (which needs a 32-byte key) by // doing: // -// dk := pbkdf2.Key([]byte("some password"), salt, 4096, 32, sha1.New) +// dk := pbkdf2.Key([]byte("some password"), salt, 4096, 32, sha1.New) // // Remember to get a good random salt. At least 8 bytes is recommended by the // RFC. diff --git a/vendor/golang.org/x/crypto/scrypt/scrypt.go b/vendor/golang.org/x/crypto/scrypt/scrypt.go index bbe4494c6..c971a99fa 100644 --- a/vendor/golang.org/x/crypto/scrypt/scrypt.go +++ b/vendor/golang.org/x/crypto/scrypt/scrypt.go @@ -186,7 +186,7 @@ func smix(b []byte, r, N int, v, xy []uint32) { // For example, you can get a derived key for e.g. AES-256 (which needs a // 32-byte key) by doing: // -// dk, err := scrypt.Key([]byte("some password"), salt, 32768, 8, 1, 32) +// dk, err := scrypt.Key([]byte("some password"), salt, 32768, 8, 1, 32) // // The recommended parameters for interactive logins as of 2017 are N=32768, r=8 // and p=1. The parameters N, r, and p should be increased as memory latency and diff --git a/vendor/golang.org/x/crypto/ssh/certs.go b/vendor/golang.org/x/crypto/ssh/certs.go index 916c840b6..4600c2077 100644 --- a/vendor/golang.org/x/crypto/ssh/certs.go +++ b/vendor/golang.org/x/crypto/ssh/certs.go @@ -14,8 +14,10 @@ import ( "time" ) -// These constants from [PROTOCOL.certkeys] represent the algorithm names -// for certificate types supported by this package. +// Certificate algorithm names from [PROTOCOL.certkeys]. These values can appear +// in Certificate.Type, PublicKey.Type, and ClientConfig.HostKeyAlgorithms. +// Unlike key algorithm names, these are not passed to AlgorithmSigner and don't +// appear in the Signature.Format field. const ( CertAlgoRSAv01 = "ssh-rsa-cert-v01@openssh.com" CertAlgoDSAv01 = "ssh-dss-cert-v01@openssh.com" @@ -25,6 +27,21 @@ const ( CertAlgoSKECDSA256v01 = "sk-ecdsa-sha2-nistp256-cert-v01@openssh.com" CertAlgoED25519v01 = "ssh-ed25519-cert-v01@openssh.com" CertAlgoSKED25519v01 = "sk-ssh-ed25519-cert-v01@openssh.com" + + // CertAlgoRSASHA256v01 and CertAlgoRSASHA512v01 can't appear as a + // Certificate.Type (or PublicKey.Type), but only in + // ClientConfig.HostKeyAlgorithms. + CertAlgoRSASHA256v01 = "rsa-sha2-256-cert-v01@openssh.com" + CertAlgoRSASHA512v01 = "rsa-sha2-512-cert-v01@openssh.com" +) + +const ( + // Deprecated: use CertAlgoRSAv01. + CertSigAlgoRSAv01 = CertAlgoRSAv01 + // Deprecated: use CertAlgoRSASHA256v01. + CertSigAlgoRSASHA2256v01 = CertAlgoRSASHA256v01 + // Deprecated: use CertAlgoRSASHA512v01. + CertSigAlgoRSASHA2512v01 = CertAlgoRSASHA512v01 ) // Certificate types distinguish between host and user @@ -423,6 +440,16 @@ func (c *Certificate) SignCert(rand io.Reader, authority Signer) error { } c.SignatureKey = authority.PublicKey() + // Default to KeyAlgoRSASHA512 for ssh-rsa signers. + if v, ok := authority.(AlgorithmSigner); ok && v.PublicKey().Type() == KeyAlgoRSA { + sig, err := v.SignWithAlgorithm(rand, c.bytesForSigning(), KeyAlgoRSASHA512) + if err != nil { + return err + } + c.Signature = sig + return nil + } + sig, err := authority.Sign(rand, c.bytesForSigning()) if err != nil { return err @@ -431,26 +458,42 @@ func (c *Certificate) SignCert(rand io.Reader, authority Signer) error { return nil } -var certAlgoNames = map[string]string{ - KeyAlgoRSA: CertAlgoRSAv01, - KeyAlgoDSA: CertAlgoDSAv01, - KeyAlgoECDSA256: CertAlgoECDSA256v01, - KeyAlgoECDSA384: CertAlgoECDSA384v01, - KeyAlgoECDSA521: CertAlgoECDSA521v01, - KeyAlgoSKECDSA256: CertAlgoSKECDSA256v01, - KeyAlgoED25519: CertAlgoED25519v01, - KeyAlgoSKED25519: CertAlgoSKED25519v01, +// certKeyAlgoNames is a mapping from known certificate algorithm names to the +// corresponding public key signature algorithm. +// +// This map must be kept in sync with the one in agent/client.go. +var certKeyAlgoNames = map[string]string{ + CertAlgoRSAv01: KeyAlgoRSA, + CertAlgoRSASHA256v01: KeyAlgoRSASHA256, + CertAlgoRSASHA512v01: KeyAlgoRSASHA512, + CertAlgoDSAv01: KeyAlgoDSA, + CertAlgoECDSA256v01: KeyAlgoECDSA256, + CertAlgoECDSA384v01: KeyAlgoECDSA384, + CertAlgoECDSA521v01: KeyAlgoECDSA521, + CertAlgoSKECDSA256v01: KeyAlgoSKECDSA256, + CertAlgoED25519v01: KeyAlgoED25519, + CertAlgoSKED25519v01: KeyAlgoSKED25519, +} + +// underlyingAlgo returns the signature algorithm associated with algo (which is +// an advertised or negotiated public key or host key algorithm). These are +// usually the same, except for certificate algorithms. +func underlyingAlgo(algo string) string { + if a, ok := certKeyAlgoNames[algo]; ok { + return a + } + return algo } -// certToPrivAlgo returns the underlying algorithm for a certificate algorithm. -// Panics if a non-certificate algorithm is passed. -func certToPrivAlgo(algo string) string { - for privAlgo, pubAlgo := range certAlgoNames { - if pubAlgo == algo { - return privAlgo +// certificateAlgo returns the certificate algorithms that uses the provided +// underlying signature algorithm. +func certificateAlgo(algo string) (certAlgo string, ok bool) { + for certName, algoName := range certKeyAlgoNames { + if algoName == algo { + return certName, true } } - panic("unknown cert algorithm") + return "", false } func (cert *Certificate) bytesForSigning() []byte { @@ -494,13 +537,13 @@ func (c *Certificate) Marshal() []byte { return result } -// Type returns the key name. It is part of the PublicKey interface. +// Type returns the certificate algorithm name. It is part of the PublicKey interface. func (c *Certificate) Type() string { - algo, ok := certAlgoNames[c.Key.Type()] + certName, ok := certificateAlgo(c.Key.Type()) if !ok { - panic("unknown cert key type " + c.Key.Type()) + panic("unknown certificate type for key type " + c.Key.Type()) } - return algo + return certName } // Verify verifies a signature against the certificate's public diff --git a/vendor/golang.org/x/crypto/ssh/cipher.go b/vendor/golang.org/x/crypto/ssh/cipher.go index 8bd6b3daf..770e8a663 100644 --- a/vendor/golang.org/x/crypto/ssh/cipher.go +++ b/vendor/golang.org/x/crypto/ssh/cipher.go @@ -18,7 +18,7 @@ import ( "io/ioutil" "golang.org/x/crypto/chacha20" - "golang.org/x/crypto/poly1305" + "golang.org/x/crypto/internal/poly1305" ) const ( @@ -394,6 +394,10 @@ func (c *gcmCipher) readCipherPacket(seqNum uint32, r io.Reader) ([]byte, error) } c.incIV() + if len(plain) == 0 { + return nil, errors.New("ssh: empty packet") + } + padding := plain[0] if padding < 4 { // padding is a byte, so it automatically satisfies @@ -636,7 +640,7 @@ const chacha20Poly1305ID = "chacha20-poly1305@openssh.com" // chacha20Poly1305Cipher implements the chacha20-poly1305@openssh.com // AEAD, which is described here: // -// https://tools.ietf.org/html/draft-josefsson-ssh-chacha20-poly1305-openssh-00 +// https://tools.ietf.org/html/draft-josefsson-ssh-chacha20-poly1305-openssh-00 // // the methods here also implement padding, which RFC4253 Section 6 // also requires of stream ciphers. @@ -710,6 +714,10 @@ func (c *chacha20Poly1305Cipher) readCipherPacket(seqNum uint32, r io.Reader) ([ plain := c.buf[4:contentEnd] s.XORKeyStream(plain, plain) + if len(plain) == 0 { + return nil, errors.New("ssh: empty packet") + } + padding := plain[0] if padding < 4 { // padding is a byte, so it automatically satisfies diff --git a/vendor/golang.org/x/crypto/ssh/client.go b/vendor/golang.org/x/crypto/ssh/client.go index 99f68bd32..bdc356cbd 100644 --- a/vendor/golang.org/x/crypto/ssh/client.go +++ b/vendor/golang.org/x/crypto/ssh/client.go @@ -113,14 +113,18 @@ func (c *connection) clientHandshake(dialAddress string, config *ClientConfig) e return c.clientAuthenticate(config) } -// verifyHostKeySignature verifies the host key obtained in the key -// exchange. -func verifyHostKeySignature(hostKey PublicKey, result *kexResult) error { +// verifyHostKeySignature verifies the host key obtained in the key exchange. +// algo is the negotiated algorithm, and may be a certificate type. +func verifyHostKeySignature(hostKey PublicKey, algo string, result *kexResult) error { sig, rest, ok := parseSignatureBody(result.Signature) if len(rest) > 0 || !ok { return errors.New("ssh: signature parse error") } + if a := underlyingAlgo(algo); sig.Format != a { + return fmt.Errorf("ssh: invalid signature algorithm %q, expected %q", sig.Format, a) + } + return hostKey.Verify(result.H, sig) } @@ -224,11 +228,11 @@ type ClientConfig struct { // be used for the connection. If empty, a reasonable default is used. ClientVersion string - // HostKeyAlgorithms lists the key types that the client will - // accept from the server as host key, in order of + // HostKeyAlgorithms lists the public key algorithms that the client will + // accept from the server for host key authentication, in order of // preference. If empty, a reasonable default is used. Any - // string returned from PublicKey.Type method may be used, or - // any of the CertAlgoXxxx and KeyAlgoXxxx constants. + // string returned from a PublicKey.Type method may be used, or + // any of the CertAlgo and KeyAlgo constants. HostKeyAlgorithms []string // Timeout is the maximum amount of time for the TCP connection to establish. diff --git a/vendor/golang.org/x/crypto/ssh/client_auth.go b/vendor/golang.org/x/crypto/ssh/client_auth.go index c611aeb68..409b5ea1d 100644 --- a/vendor/golang.org/x/crypto/ssh/client_auth.go +++ b/vendor/golang.org/x/crypto/ssh/client_auth.go @@ -9,6 +9,7 @@ import ( "errors" "fmt" "io" + "strings" ) type authResult int @@ -29,6 +30,33 @@ func (c *connection) clientAuthenticate(config *ClientConfig) error { if err != nil { return err } + // The server may choose to send a SSH_MSG_EXT_INFO at this point (if we + // advertised willingness to receive one, which we always do) or not. See + // RFC 8308, Section 2.4. + extensions := make(map[string][]byte) + if len(packet) > 0 && packet[0] == msgExtInfo { + var extInfo extInfoMsg + if err := Unmarshal(packet, &extInfo); err != nil { + return err + } + payload := extInfo.Payload + for i := uint32(0); i < extInfo.NumExtensions; i++ { + name, rest, ok := parseString(payload) + if !ok { + return parseError(msgExtInfo) + } + value, rest, ok := parseString(rest) + if !ok { + return parseError(msgExtInfo) + } + extensions[string(name)] = value + payload = rest + } + packet, err = c.transport.readPacket() + if err != nil { + return err + } + } var serviceAccept serviceAcceptMsg if err := Unmarshal(packet, &serviceAccept); err != nil { return err @@ -41,7 +69,7 @@ func (c *connection) clientAuthenticate(config *ClientConfig) error { sessionID := c.transport.getSessionID() for auth := AuthMethod(new(noneAuth)); auth != nil; { - ok, methods, err := auth.auth(sessionID, config.User, c.transport, config.Rand) + ok, methods, err := auth.auth(sessionID, config.User, c.transport, config.Rand, extensions) if err != nil { return err } @@ -93,7 +121,7 @@ type AuthMethod interface { // If authentication is not successful, a []string of alternative // method names is returned. If the slice is nil, it will be ignored // and the previous set of possible methods will be reused. - auth(session []byte, user string, p packetConn, rand io.Reader) (authResult, []string, error) + auth(session []byte, user string, p packetConn, rand io.Reader, extensions map[string][]byte) (authResult, []string, error) // method returns the RFC 4252 method name. method() string @@ -102,7 +130,7 @@ type AuthMethod interface { // "none" authentication, RFC 4252 section 5.2. type noneAuth int -func (n *noneAuth) auth(session []byte, user string, c packetConn, rand io.Reader) (authResult, []string, error) { +func (n *noneAuth) auth(session []byte, user string, c packetConn, rand io.Reader, _ map[string][]byte) (authResult, []string, error) { if err := c.writePacket(Marshal(&userAuthRequestMsg{ User: user, Service: serviceSSH, @@ -122,7 +150,7 @@ func (n *noneAuth) method() string { // a function call, e.g. by prompting the user. type passwordCallback func() (password string, err error) -func (cb passwordCallback) auth(session []byte, user string, c packetConn, rand io.Reader) (authResult, []string, error) { +func (cb passwordCallback) auth(session []byte, user string, c packetConn, rand io.Reader, _ map[string][]byte) (authResult, []string, error) { type passwordAuthMsg struct { User string `sshtype:"50"` Service string @@ -189,7 +217,46 @@ func (cb publicKeyCallback) method() string { return "publickey" } -func (cb publicKeyCallback) auth(session []byte, user string, c packetConn, rand io.Reader) (authResult, []string, error) { +func pickSignatureAlgorithm(signer Signer, extensions map[string][]byte) (as AlgorithmSigner, algo string) { + keyFormat := signer.PublicKey().Type() + + // Like in sendKexInit, if the public key implements AlgorithmSigner we + // assume it supports all algorithms, otherwise only the key format one. + as, ok := signer.(AlgorithmSigner) + if !ok { + return algorithmSignerWrapper{signer}, keyFormat + } + + extPayload, ok := extensions["server-sig-algs"] + if !ok { + // If there is no "server-sig-algs" extension, fall back to the key + // format algorithm. + return as, keyFormat + } + + // The server-sig-algs extension only carries underlying signature + // algorithm, but we are trying to select a protocol-level public key + // algorithm, which might be a certificate type. Extend the list of server + // supported algorithms to include the corresponding certificate algorithms. + serverAlgos := strings.Split(string(extPayload), ",") + for _, algo := range serverAlgos { + if certAlgo, ok := certificateAlgo(algo); ok { + serverAlgos = append(serverAlgos, certAlgo) + } + } + + keyAlgos := algorithmsForKeyFormat(keyFormat) + algo, err := findCommon("public key signature algorithm", keyAlgos, serverAlgos) + if err != nil { + // If there is no overlap, try the key anyway with the key format + // algorithm, to support servers that fail to list all supported + // algorithms. + return as, keyFormat + } + return as, algo +} + +func (cb publicKeyCallback) auth(session []byte, user string, c packetConn, rand io.Reader, extensions map[string][]byte) (authResult, []string, error) { // Authentication is performed by sending an enquiry to test if a key is // acceptable to the remote. If the key is acceptable, the client will // attempt to authenticate with the valid key. If not the client will repeat @@ -201,7 +268,10 @@ func (cb publicKeyCallback) auth(session []byte, user string, c packetConn, rand } var methods []string for _, signer := range signers { - ok, err := validateKey(signer.PublicKey(), user, c) + pub := signer.PublicKey() + as, algo := pickSignatureAlgorithm(signer, extensions) + + ok, err := validateKey(pub, algo, user, c) if err != nil { return authFailure, nil, err } @@ -209,13 +279,13 @@ func (cb publicKeyCallback) auth(session []byte, user string, c packetConn, rand continue } - pub := signer.PublicKey() pubKey := pub.Marshal() - sign, err := signer.Sign(rand, buildDataSignedForAuth(session, userAuthRequestMsg{ + data := buildDataSignedForAuth(session, userAuthRequestMsg{ User: user, Service: serviceSSH, Method: cb.method(), - }, []byte(pub.Type()), pubKey)) + }, algo, pubKey) + sign, err := as.SignWithAlgorithm(rand, data, underlyingAlgo(algo)) if err != nil { return authFailure, nil, err } @@ -229,7 +299,7 @@ func (cb publicKeyCallback) auth(session []byte, user string, c packetConn, rand Service: serviceSSH, Method: cb.method(), HasSig: true, - Algoname: pub.Type(), + Algoname: algo, PubKey: pubKey, Sig: sig, } @@ -266,26 +336,25 @@ func containsMethod(methods []string, method string) bool { } // validateKey validates the key provided is acceptable to the server. -func validateKey(key PublicKey, user string, c packetConn) (bool, error) { +func validateKey(key PublicKey, algo string, user string, c packetConn) (bool, error) { pubKey := key.Marshal() msg := publickeyAuthMsg{ User: user, Service: serviceSSH, Method: "publickey", HasSig: false, - Algoname: key.Type(), + Algoname: algo, PubKey: pubKey, } if err := c.writePacket(Marshal(&msg)); err != nil { return false, err } - return confirmKeyAck(key, c) + return confirmKeyAck(key, algo, c) } -func confirmKeyAck(key PublicKey, c packetConn) (bool, error) { +func confirmKeyAck(key PublicKey, algo string, c packetConn) (bool, error) { pubKey := key.Marshal() - algoname := key.Type() for { packet, err := c.readPacket() @@ -302,14 +371,14 @@ func confirmKeyAck(key PublicKey, c packetConn) (bool, error) { if err := Unmarshal(packet, &msg); err != nil { return false, err } - if msg.Algo != algoname || !bytes.Equal(msg.PubKey, pubKey) { + if msg.Algo != algo || !bytes.Equal(msg.PubKey, pubKey) { return false, nil } return true, nil case msgUserAuthFailure: return false, nil default: - return false, unexpectedMessageError(msgUserAuthSuccess, packet[0]) + return false, unexpectedMessageError(msgUserAuthPubKeyOk, packet[0]) } } } @@ -330,6 +399,7 @@ func PublicKeysCallback(getSigners func() (signers []Signer, err error)) AuthMet // along with a list of remaining authentication methods to try next and // an error if an unexpected response was received. func handleAuthResponse(c packetConn) (authResult, []string, error) { + gotMsgExtInfo := false for { packet, err := c.readPacket() if err != nil { @@ -341,6 +411,12 @@ func handleAuthResponse(c packetConn) (authResult, []string, error) { if err := handleBannerResponse(c, packet); err != nil { return authFailure, nil, err } + case msgExtInfo: + // Ignore post-authentication RFC 8308 extensions, once. + if gotMsgExtInfo { + return authFailure, nil, unexpectedMessageError(msgUserAuthSuccess, packet[0]) + } + gotMsgExtInfo = true case msgUserAuthFailure: var msg userAuthFailureMsg if err := Unmarshal(packet, &msg); err != nil { @@ -380,10 +456,10 @@ func handleBannerResponse(c packetConn, packet []byte) error { // disabling echoing (e.g. for passwords), and return all the answers. // Challenge may be called multiple times in a single session. After // successful authentication, the server may send a challenge with no -// questions, for which the user and instruction messages should be +// questions, for which the name and instruction messages should be // printed. RFC 4256 section 3.3 details how the UI should behave for // both CLI and GUI environments. -type KeyboardInteractiveChallenge func(user, instruction string, questions []string, echos []bool) (answers []string, err error) +type KeyboardInteractiveChallenge func(name, instruction string, questions []string, echos []bool) (answers []string, err error) // KeyboardInteractive returns an AuthMethod using a prompt/response // sequence controlled by the server. @@ -395,7 +471,7 @@ func (cb KeyboardInteractiveChallenge) method() string { return "keyboard-interactive" } -func (cb KeyboardInteractiveChallenge) auth(session []byte, user string, c packetConn, rand io.Reader) (authResult, []string, error) { +func (cb KeyboardInteractiveChallenge) auth(session []byte, user string, c packetConn, rand io.Reader, _ map[string][]byte) (authResult, []string, error) { type initiateMsg struct { User string `sshtype:"50"` Service string @@ -412,6 +488,7 @@ func (cb KeyboardInteractiveChallenge) auth(session []byte, user string, c packe return authFailure, nil, err } + gotMsgExtInfo := false for { packet, err := c.readPacket() if err != nil { @@ -425,6 +502,13 @@ func (cb KeyboardInteractiveChallenge) auth(session []byte, user string, c packe return authFailure, nil, err } continue + case msgExtInfo: + // Ignore post-authentication RFC 8308 extensions, once. + if gotMsgExtInfo { + return authFailure, nil, unexpectedMessageError(msgUserAuthInfoRequest, packet[0]) + } + gotMsgExtInfo = true + continue case msgUserAuthInfoRequest: // OK case msgUserAuthFailure: @@ -465,7 +549,7 @@ func (cb KeyboardInteractiveChallenge) auth(session []byte, user string, c packe return authFailure, nil, errors.New("ssh: extra data following keyboard-interactive pairs") } - answers, err := cb(msg.User, msg.Instruction, prompts, echos) + answers, err := cb(msg.Name, msg.Instruction, prompts, echos) if err != nil { return authFailure, nil, err } @@ -497,9 +581,9 @@ type retryableAuthMethod struct { maxTries int } -func (r *retryableAuthMethod) auth(session []byte, user string, c packetConn, rand io.Reader) (ok authResult, methods []string, err error) { +func (r *retryableAuthMethod) auth(session []byte, user string, c packetConn, rand io.Reader, extensions map[string][]byte) (ok authResult, methods []string, err error) { for i := 0; r.maxTries <= 0 || i < r.maxTries; i++ { - ok, methods, err = r.authMethod.auth(session, user, c, rand) + ok, methods, err = r.authMethod.auth(session, user, c, rand, extensions) if ok != authFailure || err != nil { // either success, partial success or error terminate return ok, methods, err } @@ -542,7 +626,7 @@ type gssAPIWithMICCallback struct { target string } -func (g *gssAPIWithMICCallback) auth(session []byte, user string, c packetConn, rand io.Reader) (authResult, []string, error) { +func (g *gssAPIWithMICCallback) auth(session []byte, user string, c packetConn, rand io.Reader, _ map[string][]byte) (authResult, []string, error) { m := &userAuthRequestMsg{ User: user, Service: serviceSSH, diff --git a/vendor/golang.org/x/crypto/ssh/common.go b/vendor/golang.org/x/crypto/ssh/common.go index 290382d05..2a47a61de 100644 --- a/vendor/golang.org/x/crypto/ssh/common.go +++ b/vendor/golang.org/x/crypto/ssh/common.go @@ -44,11 +44,11 @@ var preferredCiphers = []string{ // supportedKexAlgos specifies the supported key-exchange algorithms in // preference order. var supportedKexAlgos = []string{ - kexAlgoCurve25519SHA256, + kexAlgoCurve25519SHA256, kexAlgoCurve25519SHA256LibSSH, // P384 and P521 are not constant-time yet, but since we don't // reuse ephemeral keys, using them for ECDH should be OK. kexAlgoECDH256, kexAlgoECDH384, kexAlgoECDH521, - kexAlgoDH14SHA1, kexAlgoDH1SHA1, + kexAlgoDH14SHA256, kexAlgoDH14SHA1, kexAlgoDH1SHA1, } // serverForbiddenKexAlgos contains key exchange algorithms, that are forbidden @@ -61,18 +61,20 @@ var serverForbiddenKexAlgos = map[string]struct{}{ // preferredKexAlgos specifies the default preference for key-exchange algorithms // in preference order. var preferredKexAlgos = []string{ - kexAlgoCurve25519SHA256, + kexAlgoCurve25519SHA256, kexAlgoCurve25519SHA256LibSSH, kexAlgoECDH256, kexAlgoECDH384, kexAlgoECDH521, - kexAlgoDH14SHA1, + kexAlgoDH14SHA256, kexAlgoDH14SHA1, } // supportedHostKeyAlgos specifies the supported host-key algorithms (i.e. methods // of authenticating servers) in preference order. var supportedHostKeyAlgos = []string{ + CertAlgoRSASHA512v01, CertAlgoRSASHA256v01, CertAlgoRSAv01, CertAlgoDSAv01, CertAlgoECDSA256v01, CertAlgoECDSA384v01, CertAlgoECDSA521v01, CertAlgoED25519v01, KeyAlgoECDSA256, KeyAlgoECDSA384, KeyAlgoECDSA521, + KeyAlgoRSASHA512, KeyAlgoRSASHA256, KeyAlgoRSA, KeyAlgoDSA, KeyAlgoED25519, @@ -87,19 +89,33 @@ var supportedMACs = []string{ var supportedCompressions = []string{compressionNone} -// hashFuncs keeps the mapping of supported algorithms to their respective -// hashes needed for signature verification. +// hashFuncs keeps the mapping of supported signature algorithms to their +// respective hashes needed for signing and verification. var hashFuncs = map[string]crypto.Hash{ - KeyAlgoRSA: crypto.SHA1, - KeyAlgoDSA: crypto.SHA1, - KeyAlgoECDSA256: crypto.SHA256, - KeyAlgoECDSA384: crypto.SHA384, - KeyAlgoECDSA521: crypto.SHA512, - CertAlgoRSAv01: crypto.SHA1, - CertAlgoDSAv01: crypto.SHA1, - CertAlgoECDSA256v01: crypto.SHA256, - CertAlgoECDSA384v01: crypto.SHA384, - CertAlgoECDSA521v01: crypto.SHA512, + KeyAlgoRSA: crypto.SHA1, + KeyAlgoRSASHA256: crypto.SHA256, + KeyAlgoRSASHA512: crypto.SHA512, + KeyAlgoDSA: crypto.SHA1, + KeyAlgoECDSA256: crypto.SHA256, + KeyAlgoECDSA384: crypto.SHA384, + KeyAlgoECDSA521: crypto.SHA512, + // KeyAlgoED25519 doesn't pre-hash. + KeyAlgoSKECDSA256: crypto.SHA256, + KeyAlgoSKED25519: crypto.SHA256, +} + +// algorithmsForKeyFormat returns the supported signature algorithms for a given +// public key format (PublicKey.Type), in order of preference. See RFC 8332, +// Section 2. See also the note in sendKexInit on backwards compatibility. +func algorithmsForKeyFormat(keyFormat string) []string { + switch keyFormat { + case KeyAlgoRSA: + return []string{KeyAlgoRSASHA256, KeyAlgoRSASHA512, KeyAlgoRSA} + case CertAlgoRSAv01: + return []string{CertAlgoRSASHA256v01, CertAlgoRSASHA512v01, CertAlgoRSAv01} + default: + return []string{keyFormat} + } } // unexpectedMessageError results when the SSH message that we received didn't @@ -146,6 +162,11 @@ func (a *directionAlgorithms) rekeyBytes() int64 { return 1 << 30 } +var aeadCiphers = map[string]bool{ + gcmCipherID: true, + chacha20Poly1305ID: true, +} + type algorithms struct { kex string hostKey string @@ -181,14 +202,18 @@ func findAgreedAlgorithms(isClient bool, clientKexInit, serverKexInit *kexInitMs return } - ctos.MAC, err = findCommon("client to server MAC", clientKexInit.MACsClientServer, serverKexInit.MACsClientServer) - if err != nil { - return + if !aeadCiphers[ctos.Cipher] { + ctos.MAC, err = findCommon("client to server MAC", clientKexInit.MACsClientServer, serverKexInit.MACsClientServer) + if err != nil { + return + } } - stoc.MAC, err = findCommon("server to client MAC", clientKexInit.MACsServerClient, serverKexInit.MACsServerClient) - if err != nil { - return + if !aeadCiphers[stoc.Cipher] { + stoc.MAC, err = findCommon("server to client MAC", clientKexInit.MACsServerClient, serverKexInit.MACsServerClient) + if err != nil { + return + } } ctos.Compression, err = findCommon("client to server compression", clientKexInit.CompressionClientServer, serverKexInit.CompressionClientServer) @@ -272,8 +297,9 @@ func (c *Config) SetDefaults() { } // buildDataSignedForAuth returns the data that is signed in order to prove -// possession of a private key. See RFC 4252, section 7. -func buildDataSignedForAuth(sessionID []byte, req userAuthRequestMsg, algo, pubKey []byte) []byte { +// possession of a private key. See RFC 4252, section 7. algo is the advertised +// algorithm, and may be a certificate type. +func buildDataSignedForAuth(sessionID []byte, req userAuthRequestMsg, algo string, pubKey []byte) []byte { data := struct { Session []byte Type byte @@ -281,7 +307,7 @@ func buildDataSignedForAuth(sessionID []byte, req userAuthRequestMsg, algo, pubK Service string Method string Sign bool - Algo []byte + Algo string PubKey []byte }{ sessionID, diff --git a/vendor/golang.org/x/crypto/ssh/doc.go b/vendor/golang.org/x/crypto/ssh/doc.go index 67b7322c0..f6bff60dc 100644 --- a/vendor/golang.org/x/crypto/ssh/doc.go +++ b/vendor/golang.org/x/crypto/ssh/doc.go @@ -12,8 +12,9 @@ the multiplexed nature of SSH is exposed to users that wish to support others. References: - [PROTOCOL.certkeys]: http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/usr.bin/ssh/PROTOCOL.certkeys?rev=HEAD - [SSH-PARAMETERS]: http://www.iana.org/assignments/ssh-parameters/ssh-parameters.xml#ssh-parameters-1 + + [PROTOCOL.certkeys]: http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/usr.bin/ssh/PROTOCOL.certkeys?rev=HEAD + [SSH-PARAMETERS]: http://www.iana.org/assignments/ssh-parameters/ssh-parameters.xml#ssh-parameters-1 This package does not fall under the stability promise of the Go language itself, so its API may be changed when pressing needs arise. diff --git a/vendor/golang.org/x/crypto/ssh/handshake.go b/vendor/golang.org/x/crypto/ssh/handshake.go index 2b10b05a4..653dc4d2c 100644 --- a/vendor/golang.org/x/crypto/ssh/handshake.go +++ b/vendor/golang.org/x/crypto/ssh/handshake.go @@ -455,14 +455,38 @@ func (t *handshakeTransport) sendKexInit() error { } io.ReadFull(rand.Reader, msg.Cookie[:]) - if len(t.hostKeys) > 0 { + isServer := len(t.hostKeys) > 0 + if isServer { for _, k := range t.hostKeys { - msg.ServerHostKeyAlgos = append( - msg.ServerHostKeyAlgos, k.PublicKey().Type()) + // If k is an AlgorithmSigner, presume it supports all signature algorithms + // associated with the key format. (Ideally AlgorithmSigner would have a + // method to advertise supported algorithms, but it doesn't. This means that + // adding support for a new algorithm is a breaking change, as we will + // immediately negotiate it even if existing implementations don't support + // it. If that ever happens, we'll have to figure something out.) + // If k is not an AlgorithmSigner, we can only assume it only supports the + // algorithms that matches the key format. (This means that Sign can't pick + // a different default.) + keyFormat := k.PublicKey().Type() + if _, ok := k.(AlgorithmSigner); ok { + msg.ServerHostKeyAlgos = append(msg.ServerHostKeyAlgos, algorithmsForKeyFormat(keyFormat)...) + } else { + msg.ServerHostKeyAlgos = append(msg.ServerHostKeyAlgos, keyFormat) + } } } else { msg.ServerHostKeyAlgos = t.hostKeyAlgorithms + + // As a client we opt in to receiving SSH_MSG_EXT_INFO so we know what + // algorithms the server supports for public key authentication. See RFC + // 8308, Section 2.1. + if firstKeyExchange := t.sessionID == nil; firstKeyExchange { + msg.KexAlgos = make([]string, 0, len(t.config.KeyExchanges)+1) + msg.KexAlgos = append(msg.KexAlgos, t.config.KeyExchanges...) + msg.KexAlgos = append(msg.KexAlgos, "ext-info-c") + } } + packet := Marshal(msg) // writePacket destroys the contents, so save a copy. @@ -582,9 +606,9 @@ func (t *handshakeTransport) enterKeyExchange(otherInitPacket []byte) error { var result *kexResult if len(t.hostKeys) > 0 { - result, err = t.server(kex, t.algorithms, &magics) + result, err = t.server(kex, &magics) } else { - result, err = t.client(kex, t.algorithms, &magics) + result, err = t.client(kex, &magics) } if err != nil { @@ -611,19 +635,52 @@ func (t *handshakeTransport) enterKeyExchange(otherInitPacket []byte) error { return nil } -func (t *handshakeTransport) server(kex kexAlgorithm, algs *algorithms, magics *handshakeMagics) (*kexResult, error) { - var hostKey Signer - for _, k := range t.hostKeys { - if algs.hostKey == k.PublicKey().Type() { - hostKey = k +// algorithmSignerWrapper is an AlgorithmSigner that only supports the default +// key format algorithm. +// +// This is technically a violation of the AlgorithmSigner interface, but it +// should be unreachable given where we use this. Anyway, at least it returns an +// error instead of panicing or producing an incorrect signature. +type algorithmSignerWrapper struct { + Signer +} + +func (a algorithmSignerWrapper) SignWithAlgorithm(rand io.Reader, data []byte, algorithm string) (*Signature, error) { + if algorithm != underlyingAlgo(a.PublicKey().Type()) { + return nil, errors.New("ssh: internal error: algorithmSignerWrapper invoked with non-default algorithm") + } + return a.Sign(rand, data) +} + +func pickHostKey(hostKeys []Signer, algo string) AlgorithmSigner { + for _, k := range hostKeys { + if algo == k.PublicKey().Type() { + return algorithmSignerWrapper{k} + } + k, ok := k.(AlgorithmSigner) + if !ok { + continue + } + for _, a := range algorithmsForKeyFormat(k.PublicKey().Type()) { + if algo == a { + return k + } } } + return nil +} + +func (t *handshakeTransport) server(kex kexAlgorithm, magics *handshakeMagics) (*kexResult, error) { + hostKey := pickHostKey(t.hostKeys, t.algorithms.hostKey) + if hostKey == nil { + return nil, errors.New("ssh: internal error: negotiated unsupported signature type") + } - r, err := kex.Server(t.conn, t.config.Rand, magics, hostKey) + r, err := kex.Server(t.conn, t.config.Rand, magics, hostKey, t.algorithms.hostKey) return r, err } -func (t *handshakeTransport) client(kex kexAlgorithm, algs *algorithms, magics *handshakeMagics) (*kexResult, error) { +func (t *handshakeTransport) client(kex kexAlgorithm, magics *handshakeMagics) (*kexResult, error) { result, err := kex.Client(t.conn, t.config.Rand, magics) if err != nil { return nil, err @@ -634,7 +691,7 @@ func (t *handshakeTransport) client(kex kexAlgorithm, algs *algorithms, magics * return nil, err } - if err := verifyHostKeySignature(hostKey, result); err != nil { + if err := verifyHostKeySignature(hostKey, t.algorithms.hostKey, result); err != nil { return nil, err } diff --git a/vendor/golang.org/x/crypto/ssh/kex.go b/vendor/golang.org/x/crypto/ssh/kex.go index 766e92939..927a90cd4 100644 --- a/vendor/golang.org/x/crypto/ssh/kex.go +++ b/vendor/golang.org/x/crypto/ssh/kex.go @@ -20,12 +20,14 @@ import ( ) const ( - kexAlgoDH1SHA1 = "diffie-hellman-group1-sha1" - kexAlgoDH14SHA1 = "diffie-hellman-group14-sha1" - kexAlgoECDH256 = "ecdh-sha2-nistp256" - kexAlgoECDH384 = "ecdh-sha2-nistp384" - kexAlgoECDH521 = "ecdh-sha2-nistp521" - kexAlgoCurve25519SHA256 = "curve25519-sha256@libssh.org" + kexAlgoDH1SHA1 = "diffie-hellman-group1-sha1" + kexAlgoDH14SHA1 = "diffie-hellman-group14-sha1" + kexAlgoDH14SHA256 = "diffie-hellman-group14-sha256" + kexAlgoECDH256 = "ecdh-sha2-nistp256" + kexAlgoECDH384 = "ecdh-sha2-nistp384" + kexAlgoECDH521 = "ecdh-sha2-nistp521" + kexAlgoCurve25519SHA256LibSSH = "curve25519-sha256@libssh.org" + kexAlgoCurve25519SHA256 = "curve25519-sha256" // For the following kex only the client half contains a production // ready implementation. The server half only consists of a minimal @@ -75,8 +77,9 @@ func (m *handshakeMagics) write(w io.Writer) { // kexAlgorithm abstracts different key exchange algorithms. type kexAlgorithm interface { // Server runs server-side key agreement, signing the result - // with a hostkey. - Server(p packetConn, rand io.Reader, magics *handshakeMagics, s Signer) (*kexResult, error) + // with a hostkey. algo is the negotiated algorithm, and may + // be a certificate type. + Server(p packetConn, rand io.Reader, magics *handshakeMagics, s AlgorithmSigner, algo string) (*kexResult, error) // Client runs the client-side key agreement. Caller is // responsible for verifying the host key signature. @@ -86,6 +89,7 @@ type kexAlgorithm interface { // dhGroup is a multiplicative group suitable for implementing Diffie-Hellman key agreement. type dhGroup struct { g, p, pMinus1 *big.Int + hashFunc crypto.Hash } func (group *dhGroup) diffieHellman(theirPublic, myPrivate *big.Int) (*big.Int, error) { @@ -96,8 +100,6 @@ func (group *dhGroup) diffieHellman(theirPublic, myPrivate *big.Int) (*big.Int, } func (group *dhGroup) Client(c packetConn, randSource io.Reader, magics *handshakeMagics) (*kexResult, error) { - hashFunc := crypto.SHA1 - var x *big.Int for { var err error @@ -132,7 +134,7 @@ func (group *dhGroup) Client(c packetConn, randSource io.Reader, magics *handsha return nil, err } - h := hashFunc.New() + h := group.hashFunc.New() magics.write(h) writeString(h, kexDHReply.HostKey) writeInt(h, X) @@ -146,12 +148,11 @@ func (group *dhGroup) Client(c packetConn, randSource io.Reader, magics *handsha K: K, HostKey: kexDHReply.HostKey, Signature: kexDHReply.Signature, - Hash: crypto.SHA1, + Hash: group.hashFunc, }, nil } -func (group *dhGroup) Server(c packetConn, randSource io.Reader, magics *handshakeMagics, priv Signer) (result *kexResult, err error) { - hashFunc := crypto.SHA1 +func (group *dhGroup) Server(c packetConn, randSource io.Reader, magics *handshakeMagics, priv AlgorithmSigner, algo string) (result *kexResult, err error) { packet, err := c.readPacket() if err != nil { return @@ -179,7 +180,7 @@ func (group *dhGroup) Server(c packetConn, randSource io.Reader, magics *handsha hostKeyBytes := priv.PublicKey().Marshal() - h := hashFunc.New() + h := group.hashFunc.New() magics.write(h) writeString(h, hostKeyBytes) writeInt(h, kexDHInit.X) @@ -193,7 +194,7 @@ func (group *dhGroup) Server(c packetConn, randSource io.Reader, magics *handsha // H is already a hash, but the hostkey signing will apply its // own key-specific hash algorithm. - sig, err := signAndMarshal(priv, randSource, H) + sig, err := signAndMarshal(priv, randSource, H, algo) if err != nil { return nil, err } @@ -211,7 +212,7 @@ func (group *dhGroup) Server(c packetConn, randSource io.Reader, magics *handsha K: K, HostKey: hostKeyBytes, Signature: sig, - Hash: crypto.SHA1, + Hash: group.hashFunc, }, err } @@ -314,7 +315,7 @@ func validateECPublicKey(curve elliptic.Curve, x, y *big.Int) bool { return true } -func (kex *ecdh) Server(c packetConn, rand io.Reader, magics *handshakeMagics, priv Signer) (result *kexResult, err error) { +func (kex *ecdh) Server(c packetConn, rand io.Reader, magics *handshakeMagics, priv AlgorithmSigner, algo string) (result *kexResult, err error) { packet, err := c.readPacket() if err != nil { return nil, err @@ -359,7 +360,7 @@ func (kex *ecdh) Server(c packetConn, rand io.Reader, magics *handshakeMagics, p // H is already a hash, but the hostkey signing will apply its // own key-specific hash algorithm. - sig, err := signAndMarshal(priv, rand, H) + sig, err := signAndMarshal(priv, rand, H, algo) if err != nil { return nil, err } @@ -384,39 +385,62 @@ func (kex *ecdh) Server(c packetConn, rand io.Reader, magics *handshakeMagics, p }, nil } +// ecHash returns the hash to match the given elliptic curve, see RFC +// 5656, section 6.2.1 +func ecHash(curve elliptic.Curve) crypto.Hash { + bitSize := curve.Params().BitSize + switch { + case bitSize <= 256: + return crypto.SHA256 + case bitSize <= 384: + return crypto.SHA384 + } + return crypto.SHA512 +} + var kexAlgoMap = map[string]kexAlgorithm{} func init() { - // This is the group called diffie-hellman-group1-sha1 in RFC - // 4253 and Oakley Group 2 in RFC 2409. + // This is the group called diffie-hellman-group1-sha1 in + // RFC 4253 and Oakley Group 2 in RFC 2409. p, _ := new(big.Int).SetString("FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE65381FFFFFFFFFFFFFFFF", 16) kexAlgoMap[kexAlgoDH1SHA1] = &dhGroup{ - g: new(big.Int).SetInt64(2), - p: p, - pMinus1: new(big.Int).Sub(p, bigOne), + g: new(big.Int).SetInt64(2), + p: p, + pMinus1: new(big.Int).Sub(p, bigOne), + hashFunc: crypto.SHA1, } - // This is the group called diffie-hellman-group14-sha1 in RFC - // 4253 and Oakley Group 14 in RFC 3526. + // This are the groups called diffie-hellman-group14-sha1 and + // diffie-hellman-group14-sha256 in RFC 4253 and RFC 8268, + // and Oakley Group 14 in RFC 3526. p, _ = new(big.Int).SetString("FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF6955817183995497CEA956AE515D2261898FA051015728E5A8AACAA68FFFFFFFFFFFFFFFF", 16) - - kexAlgoMap[kexAlgoDH14SHA1] = &dhGroup{ + group14 := &dhGroup{ g: new(big.Int).SetInt64(2), p: p, pMinus1: new(big.Int).Sub(p, bigOne), } + kexAlgoMap[kexAlgoDH14SHA1] = &dhGroup{ + g: group14.g, p: group14.p, pMinus1: group14.pMinus1, + hashFunc: crypto.SHA1, + } + kexAlgoMap[kexAlgoDH14SHA256] = &dhGroup{ + g: group14.g, p: group14.p, pMinus1: group14.pMinus1, + hashFunc: crypto.SHA256, + } + kexAlgoMap[kexAlgoECDH521] = &ecdh{elliptic.P521()} kexAlgoMap[kexAlgoECDH384] = &ecdh{elliptic.P384()} kexAlgoMap[kexAlgoECDH256] = &ecdh{elliptic.P256()} kexAlgoMap[kexAlgoCurve25519SHA256] = &curve25519sha256{} + kexAlgoMap[kexAlgoCurve25519SHA256LibSSH] = &curve25519sha256{} kexAlgoMap[kexAlgoDHGEXSHA1] = &dhGEXSHA{hashFunc: crypto.SHA1} kexAlgoMap[kexAlgoDHGEXSHA256] = &dhGEXSHA{hashFunc: crypto.SHA256} } -// curve25519sha256 implements the curve25519-sha256@libssh.org key -// agreement protocol, as described in -// https://git.libssh.org/projects/libssh.git/tree/doc/curve25519-sha256@libssh.org.txt +// curve25519sha256 implements the curve25519-sha256 (formerly known as +// curve25519-sha256@libssh.org) key exchange method, as described in RFC 8731. type curve25519sha256 struct{} type curve25519KeyPair struct { @@ -486,7 +510,7 @@ func (kex *curve25519sha256) Client(c packetConn, rand io.Reader, magics *handsh }, nil } -func (kex *curve25519sha256) Server(c packetConn, rand io.Reader, magics *handshakeMagics, priv Signer) (result *kexResult, err error) { +func (kex *curve25519sha256) Server(c packetConn, rand io.Reader, magics *handshakeMagics, priv AlgorithmSigner, algo string) (result *kexResult, err error) { packet, err := c.readPacket() if err != nil { return @@ -527,7 +551,7 @@ func (kex *curve25519sha256) Server(c packetConn, rand io.Reader, magics *handsh H := h.Sum(nil) - sig, err := signAndMarshal(priv, rand, H) + sig, err := signAndMarshal(priv, rand, H, algo) if err != nil { return nil, err } @@ -553,7 +577,6 @@ func (kex *curve25519sha256) Server(c packetConn, rand io.Reader, magics *handsh // diffie-hellman-group-exchange-sha256 key agreement protocols, // as described in RFC 4419 type dhGEXSHA struct { - g, p *big.Int hashFunc crypto.Hash } @@ -563,14 +586,7 @@ const ( dhGroupExchangeMaximumBits = 8192 ) -func (gex *dhGEXSHA) diffieHellman(theirPublic, myPrivate *big.Int) (*big.Int, error) { - if theirPublic.Sign() <= 0 || theirPublic.Cmp(gex.p) >= 0 { - return nil, fmt.Errorf("ssh: DH parameter out of bounds") - } - return new(big.Int).Exp(theirPublic, myPrivate, gex.p), nil -} - -func (gex dhGEXSHA) Client(c packetConn, randSource io.Reader, magics *handshakeMagics) (*kexResult, error) { +func (gex *dhGEXSHA) Client(c packetConn, randSource io.Reader, magics *handshakeMagics) (*kexResult, error) { // Send GexRequest kexDHGexRequest := kexDHGexRequestMsg{ MinBits: dhGroupExchangeMinimumBits, @@ -587,35 +603,29 @@ func (gex dhGEXSHA) Client(c packetConn, randSource io.Reader, magics *handshake return nil, err } - var kexDHGexGroup kexDHGexGroupMsg - if err = Unmarshal(packet, &kexDHGexGroup); err != nil { + var msg kexDHGexGroupMsg + if err = Unmarshal(packet, &msg); err != nil { return nil, err } // reject if p's bit length < dhGroupExchangeMinimumBits or > dhGroupExchangeMaximumBits - if kexDHGexGroup.P.BitLen() < dhGroupExchangeMinimumBits || kexDHGexGroup.P.BitLen() > dhGroupExchangeMaximumBits { - return nil, fmt.Errorf("ssh: server-generated gex p is out of range (%d bits)", kexDHGexGroup.P.BitLen()) + if msg.P.BitLen() < dhGroupExchangeMinimumBits || msg.P.BitLen() > dhGroupExchangeMaximumBits { + return nil, fmt.Errorf("ssh: server-generated gex p is out of range (%d bits)", msg.P.BitLen()) } - gex.p = kexDHGexGroup.P - gex.g = kexDHGexGroup.G - - // Check if g is safe by verifing that g > 1 and g < p - 1 - one := big.NewInt(1) - var pMinusOne = &big.Int{} - pMinusOne.Sub(gex.p, one) - if gex.g.Cmp(one) != 1 && gex.g.Cmp(pMinusOne) != -1 { + // Check if g is safe by verifying that 1 < g < p-1 + pMinusOne := new(big.Int).Sub(msg.P, bigOne) + if msg.G.Cmp(bigOne) <= 0 || msg.G.Cmp(pMinusOne) >= 0 { return nil, fmt.Errorf("ssh: server provided gex g is not safe") } // Send GexInit - var pHalf = &big.Int{} - pHalf.Rsh(gex.p, 1) + pHalf := new(big.Int).Rsh(msg.P, 1) x, err := rand.Int(randSource, pHalf) if err != nil { return nil, err } - X := new(big.Int).Exp(gex.g, x, gex.p) + X := new(big.Int).Exp(msg.G, x, msg.P) kexDHGexInit := kexDHGexInitMsg{ X: X, } @@ -634,13 +644,13 @@ func (gex dhGEXSHA) Client(c packetConn, randSource io.Reader, magics *handshake return nil, err } - kInt, err := gex.diffieHellman(kexDHGexReply.Y, x) - if err != nil { - return nil, err + if kexDHGexReply.Y.Cmp(bigOne) <= 0 || kexDHGexReply.Y.Cmp(pMinusOne) >= 0 { + return nil, errors.New("ssh: DH parameter out of bounds") } + kInt := new(big.Int).Exp(kexDHGexReply.Y, x, msg.P) - // Check if k is safe by verifing that k > 1 and k < p - 1 - if kInt.Cmp(one) != 1 && kInt.Cmp(pMinusOne) != -1 { + // Check if k is safe by verifying that k > 1 and k < p - 1 + if kInt.Cmp(bigOne) <= 0 || kInt.Cmp(pMinusOne) >= 0 { return nil, fmt.Errorf("ssh: derived k is not safe") } @@ -650,8 +660,8 @@ func (gex dhGEXSHA) Client(c packetConn, randSource io.Reader, magics *handshake binary.Write(h, binary.BigEndian, uint32(dhGroupExchangeMinimumBits)) binary.Write(h, binary.BigEndian, uint32(dhGroupExchangePreferredBits)) binary.Write(h, binary.BigEndian, uint32(dhGroupExchangeMaximumBits)) - writeInt(h, gex.p) - writeInt(h, gex.g) + writeInt(h, msg.P) + writeInt(h, msg.G) writeInt(h, X) writeInt(h, kexDHGexReply.Y) K := make([]byte, intLength(kInt)) @@ -670,7 +680,7 @@ func (gex dhGEXSHA) Client(c packetConn, randSource io.Reader, magics *handshake // Server half implementation of the Diffie Hellman Key Exchange with SHA1 and SHA256. // // This is a minimal implementation to satisfy the automated tests. -func (gex dhGEXSHA) Server(c packetConn, randSource io.Reader, magics *handshakeMagics, priv Signer) (result *kexResult, err error) { +func (gex dhGEXSHA) Server(c packetConn, randSource io.Reader, magics *handshakeMagics, priv AlgorithmSigner, algo string) (result *kexResult, err error) { // Receive GexRequest packet, err := c.readPacket() if err != nil { @@ -681,35 +691,17 @@ func (gex dhGEXSHA) Server(c packetConn, randSource io.Reader, magics *handshake return } - // smoosh the user's preferred size into our own limits - if kexDHGexRequest.PreferedBits > dhGroupExchangeMaximumBits { - kexDHGexRequest.PreferedBits = dhGroupExchangeMaximumBits - } - if kexDHGexRequest.PreferedBits < dhGroupExchangeMinimumBits { - kexDHGexRequest.PreferedBits = dhGroupExchangeMinimumBits - } - // fix min/max if they're inconsistent. technically, we could just pout - // and hang up, but there's no harm in giving them the benefit of the - // doubt and just picking a bitsize for them. - if kexDHGexRequest.MinBits > kexDHGexRequest.PreferedBits { - kexDHGexRequest.MinBits = kexDHGexRequest.PreferedBits - } - if kexDHGexRequest.MaxBits < kexDHGexRequest.PreferedBits { - kexDHGexRequest.MaxBits = kexDHGexRequest.PreferedBits - } - // Send GexGroup // This is the group called diffie-hellman-group14-sha1 in RFC // 4253 and Oakley Group 14 in RFC 3526. p, _ := new(big.Int).SetString("FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF6955817183995497CEA956AE515D2261898FA051015728E5A8AACAA68FFFFFFFFFFFFFFFF", 16) - gex.p = p - gex.g = big.NewInt(2) + g := big.NewInt(2) - kexDHGexGroup := kexDHGexGroupMsg{ - P: gex.p, - G: gex.g, + msg := &kexDHGexGroupMsg{ + P: p, + G: g, } - if err := c.writePacket(Marshal(&kexDHGexGroup)); err != nil { + if err := c.writePacket(Marshal(msg)); err != nil { return nil, err } @@ -723,19 +715,19 @@ func (gex dhGEXSHA) Server(c packetConn, randSource io.Reader, magics *handshake return } - var pHalf = &big.Int{} - pHalf.Rsh(gex.p, 1) + pHalf := new(big.Int).Rsh(p, 1) y, err := rand.Int(randSource, pHalf) if err != nil { return } + Y := new(big.Int).Exp(g, y, p) - Y := new(big.Int).Exp(gex.g, y, gex.p) - kInt, err := gex.diffieHellman(kexDHGexInit.X, y) - if err != nil { - return nil, err + pMinusOne := new(big.Int).Sub(p, bigOne) + if kexDHGexInit.X.Cmp(bigOne) <= 0 || kexDHGexInit.X.Cmp(pMinusOne) >= 0 { + return nil, errors.New("ssh: DH parameter out of bounds") } + kInt := new(big.Int).Exp(kexDHGexInit.X, y, p) hostKeyBytes := priv.PublicKey().Marshal() @@ -745,8 +737,8 @@ func (gex dhGEXSHA) Server(c packetConn, randSource io.Reader, magics *handshake binary.Write(h, binary.BigEndian, uint32(dhGroupExchangeMinimumBits)) binary.Write(h, binary.BigEndian, uint32(dhGroupExchangePreferredBits)) binary.Write(h, binary.BigEndian, uint32(dhGroupExchangeMaximumBits)) - writeInt(h, gex.p) - writeInt(h, gex.g) + writeInt(h, p) + writeInt(h, g) writeInt(h, kexDHGexInit.X) writeInt(h, Y) @@ -758,7 +750,7 @@ func (gex dhGEXSHA) Server(c packetConn, randSource io.Reader, magics *handshake // H is already a hash, but the hostkey signing will apply its // own key-specific hash algorithm. - sig, err := signAndMarshal(priv, randSource, H) + sig, err := signAndMarshal(priv, randSource, H, algo) if err != nil { return nil, err } diff --git a/vendor/golang.org/x/crypto/ssh/keys.go b/vendor/golang.org/x/crypto/ssh/keys.go index 31f26349a..1c7de1a6d 100644 --- a/vendor/golang.org/x/crypto/ssh/keys.go +++ b/vendor/golang.org/x/crypto/ssh/keys.go @@ -30,8 +30,9 @@ import ( "golang.org/x/crypto/ssh/internal/bcrypt_pbkdf" ) -// These constants represent the algorithm names for key types supported by this -// package. +// Public key algorithms names. These values can appear in PublicKey.Type, +// ClientConfig.HostKeyAlgorithms, Signature.Format, or as AlgorithmSigner +// arguments. const ( KeyAlgoRSA = "ssh-rsa" KeyAlgoDSA = "ssh-dss" @@ -41,16 +42,21 @@ const ( KeyAlgoECDSA521 = "ecdsa-sha2-nistp521" KeyAlgoED25519 = "ssh-ed25519" KeyAlgoSKED25519 = "sk-ssh-ed25519@openssh.com" + + // KeyAlgoRSASHA256 and KeyAlgoRSASHA512 are only public key algorithms, not + // public key formats, so they can't appear as a PublicKey.Type. The + // corresponding PublicKey.Type is KeyAlgoRSA. See RFC 8332, Section 2. + KeyAlgoRSASHA256 = "rsa-sha2-256" + KeyAlgoRSASHA512 = "rsa-sha2-512" ) -// These constants represent non-default signature algorithms that are supported -// as algorithm parameters to AlgorithmSigner.SignWithAlgorithm methods. See -// [PROTOCOL.agent] section 4.5.1 and -// https://tools.ietf.org/html/draft-ietf-curdle-rsa-sha2-10 const ( - SigAlgoRSA = "ssh-rsa" - SigAlgoRSASHA2256 = "rsa-sha2-256" - SigAlgoRSASHA2512 = "rsa-sha2-512" + // Deprecated: use KeyAlgoRSA. + SigAlgoRSA = KeyAlgoRSA + // Deprecated: use KeyAlgoRSASHA256. + SigAlgoRSASHA2256 = KeyAlgoRSASHA256 + // Deprecated: use KeyAlgoRSASHA512. + SigAlgoRSASHA2512 = KeyAlgoRSASHA512 ) // parsePubKey parses a public key of the given algorithm. @@ -70,7 +76,7 @@ func parsePubKey(in []byte, algo string) (pubKey PublicKey, rest []byte, err err case KeyAlgoSKED25519: return parseSKEd25519(in) case CertAlgoRSAv01, CertAlgoDSAv01, CertAlgoECDSA256v01, CertAlgoECDSA384v01, CertAlgoECDSA521v01, CertAlgoSKECDSA256v01, CertAlgoED25519v01, CertAlgoSKED25519v01: - cert, err := parseCert(in, certToPrivAlgo(algo)) + cert, err := parseCert(in, certKeyAlgoNames[algo]) if err != nil { return nil, nil, err } @@ -289,18 +295,21 @@ func MarshalAuthorizedKey(key PublicKey) []byte { return b.Bytes() } -// PublicKey is an abstraction of different types of public keys. +// PublicKey represents a public key using an unspecified algorithm. +// +// Some PublicKeys provided by this package also implement CryptoPublicKey. type PublicKey interface { - // Type returns the key's type, e.g. "ssh-rsa". + // Type returns the key format name, e.g. "ssh-rsa". Type() string - // Marshal returns the serialized key data in SSH wire format, - // with the name prefix. To unmarshal the returned data, use - // the ParsePublicKey function. + // Marshal returns the serialized key data in SSH wire format, with the name + // prefix. To unmarshal the returned data, use the ParsePublicKey function. Marshal() []byte - // Verify that sig is a signature on the given data using this - // key. This function will hash the data appropriately first. + // Verify that sig is a signature on the given data using this key. This + // method will hash the data appropriately first. sig.Format is allowed to + // be any signature algorithm compatible with the key type, the caller + // should check if it has more stringent requirements. Verify(data []byte, sig *Signature) error } @@ -311,25 +320,32 @@ type CryptoPublicKey interface { } // A Signer can create signatures that verify against a public key. +// +// Some Signers provided by this package also implement AlgorithmSigner. type Signer interface { - // PublicKey returns an associated PublicKey instance. + // PublicKey returns the associated PublicKey. PublicKey() PublicKey - // Sign returns raw signature for the given data. This method - // will apply the hash specified for the keytype to the data. + // Sign returns a signature for the given data. This method will hash the + // data appropriately first. The signature algorithm is expected to match + // the key format returned by the PublicKey.Type method (and not to be any + // alternative algorithm supported by the key format). Sign(rand io.Reader, data []byte) (*Signature, error) } -// A AlgorithmSigner is a Signer that also supports specifying a specific -// algorithm to use for signing. +// An AlgorithmSigner is a Signer that also supports specifying an algorithm to +// use for signing. +// +// An AlgorithmSigner can't advertise the algorithms it supports, so it should +// be prepared to be invoked with every algorithm supported by the public key +// format. type AlgorithmSigner interface { Signer - // SignWithAlgorithm is like Signer.Sign, but allows specification of a - // non-default signing algorithm. See the SigAlgo* constants in this - // package for signature algorithms supported by this package. Callers may - // pass an empty string for the algorithm in which case the AlgorithmSigner - // will use its default algorithm. + // SignWithAlgorithm is like Signer.Sign, but allows specifying a desired + // signing algorithm. Callers may pass an empty string for the algorithm in + // which case the AlgorithmSigner will use a default algorithm. This default + // doesn't currently control any behavior in this package. SignWithAlgorithm(rand io.Reader, data []byte, algorithm string) (*Signature, error) } @@ -381,17 +397,11 @@ func (r *rsaPublicKey) Marshal() []byte { } func (r *rsaPublicKey) Verify(data []byte, sig *Signature) error { - var hash crypto.Hash - switch sig.Format { - case SigAlgoRSA: - hash = crypto.SHA1 - case SigAlgoRSASHA2256: - hash = crypto.SHA256 - case SigAlgoRSASHA2512: - hash = crypto.SHA512 - default: + supportedAlgos := algorithmsForKeyFormat(r.Type()) + if !contains(supportedAlgos, sig.Format) { return fmt.Errorf("ssh: signature type %s for key type %s", sig.Format, r.Type()) } + hash := hashFuncs[sig.Format] h := hash.New() h.Write(data) digest := h.Sum(nil) @@ -466,7 +476,7 @@ func (k *dsaPublicKey) Verify(data []byte, sig *Signature) error { if sig.Format != k.Type() { return fmt.Errorf("ssh: signature type %s for key type %s", sig.Format, k.Type()) } - h := crypto.SHA1.New() + h := hashFuncs[sig.Format].New() h.Write(data) digest := h.Sum(nil) @@ -499,7 +509,7 @@ func (k *dsaPrivateKey) PublicKey() PublicKey { } func (k *dsaPrivateKey) Sign(rand io.Reader, data []byte) (*Signature, error) { - return k.SignWithAlgorithm(rand, data, "") + return k.SignWithAlgorithm(rand, data, k.PublicKey().Type()) } func (k *dsaPrivateKey) SignWithAlgorithm(rand io.Reader, data []byte, algorithm string) (*Signature, error) { @@ -507,7 +517,7 @@ func (k *dsaPrivateKey) SignWithAlgorithm(rand io.Reader, data []byte, algorithm return nil, fmt.Errorf("ssh: unsupported signature algorithm %s", algorithm) } - h := crypto.SHA1.New() + h := hashFuncs[k.PublicKey().Type()].New() h.Write(data) digest := h.Sum(nil) r, s, err := dsa.Sign(rand, k.PrivateKey, digest) @@ -603,19 +613,6 @@ func supportedEllipticCurve(curve elliptic.Curve) bool { return curve == elliptic.P256() || curve == elliptic.P384() || curve == elliptic.P521() } -// ecHash returns the hash to match the given elliptic curve, see RFC -// 5656, section 6.2.1 -func ecHash(curve elliptic.Curve) crypto.Hash { - bitSize := curve.Params().BitSize - switch { - case bitSize <= 256: - return crypto.SHA256 - case bitSize <= 384: - return crypto.SHA384 - } - return crypto.SHA512 -} - // parseECDSA parses an ECDSA key according to RFC 5656, section 3.1. func parseECDSA(in []byte) (out PublicKey, rest []byte, err error) { var w struct { @@ -671,7 +668,7 @@ func (k *ecdsaPublicKey) Verify(data []byte, sig *Signature) error { return fmt.Errorf("ssh: signature type %s for key type %s", sig.Format, k.Type()) } - h := ecHash(k.Curve).New() + h := hashFuncs[sig.Format].New() h.Write(data) digest := h.Sum(nil) @@ -775,7 +772,7 @@ func (k *skECDSAPublicKey) Verify(data []byte, sig *Signature) error { return fmt.Errorf("ssh: signature type %s for key type %s", sig.Format, k.Type()) } - h := ecHash(k.Curve).New() + h := hashFuncs[sig.Format].New() h.Write([]byte(k.application)) appDigest := h.Sum(nil) @@ -874,7 +871,7 @@ func (k *skEd25519PublicKey) Verify(data []byte, sig *Signature) error { return fmt.Errorf("invalid size %d for Ed25519 public key", l) } - h := sha256.New() + h := hashFuncs[sig.Format].New() h.Write([]byte(k.application)) appDigest := h.Sum(nil) @@ -961,44 +958,20 @@ func (s *wrappedSigner) PublicKey() PublicKey { } func (s *wrappedSigner) Sign(rand io.Reader, data []byte) (*Signature, error) { - return s.SignWithAlgorithm(rand, data, "") + return s.SignWithAlgorithm(rand, data, s.pubKey.Type()) } func (s *wrappedSigner) SignWithAlgorithm(rand io.Reader, data []byte, algorithm string) (*Signature, error) { - var hashFunc crypto.Hash - - if _, ok := s.pubKey.(*rsaPublicKey); ok { - // RSA keys support a few hash functions determined by the requested signature algorithm - switch algorithm { - case "", SigAlgoRSA: - algorithm = SigAlgoRSA - hashFunc = crypto.SHA1 - case SigAlgoRSASHA2256: - hashFunc = crypto.SHA256 - case SigAlgoRSASHA2512: - hashFunc = crypto.SHA512 - default: - return nil, fmt.Errorf("ssh: unsupported signature algorithm %s", algorithm) - } - } else { - // The only supported algorithm for all other key types is the same as the type of the key - if algorithm == "" { - algorithm = s.pubKey.Type() - } else if algorithm != s.pubKey.Type() { - return nil, fmt.Errorf("ssh: unsupported signature algorithm %s", algorithm) - } + if algorithm == "" { + algorithm = s.pubKey.Type() + } - switch key := s.pubKey.(type) { - case *dsaPublicKey: - hashFunc = crypto.SHA1 - case *ecdsaPublicKey: - hashFunc = ecHash(key.Curve) - case ed25519PublicKey: - default: - return nil, fmt.Errorf("ssh: unsupported key type %T", key) - } + supportedAlgos := algorithmsForKeyFormat(s.pubKey.Type()) + if !contains(supportedAlgos, algorithm) { + return nil, fmt.Errorf("ssh: unsupported signature algorithm %q for key format %q", algorithm, s.pubKey.Type()) } + hashFunc := hashFuncs[algorithm] var digest []byte if hashFunc != 0 { h := hashFunc.New() diff --git a/vendor/golang.org/x/crypto/ssh/messages.go b/vendor/golang.org/x/crypto/ssh/messages.go index ac41a4168..19bc67c46 100644 --- a/vendor/golang.org/x/crypto/ssh/messages.go +++ b/vendor/golang.org/x/crypto/ssh/messages.go @@ -141,6 +141,14 @@ type serviceAcceptMsg struct { Service string `sshtype:"6"` } +// See RFC 8308, section 2.3 +const msgExtInfo = 7 + +type extInfoMsg struct { + NumExtensions uint32 `sshtype:"7"` + Payload []byte `ssh:"rest"` +} + // See RFC 4252, section 5. const msgUserAuthRequest = 50 @@ -180,11 +188,11 @@ const msgUserAuthInfoRequest = 60 const msgUserAuthInfoResponse = 61 type userAuthInfoRequestMsg struct { - User string `sshtype:"60"` - Instruction string - DeprecatedLanguage string - NumPrompts uint32 - Prompts []byte `ssh:"rest"` + Name string `sshtype:"60"` + Instruction string + Language string + NumPrompts uint32 + Prompts []byte `ssh:"rest"` } // See RFC 4254, section 5.1. @@ -782,6 +790,8 @@ func decode(packet []byte) (interface{}, error) { msg = new(serviceRequestMsg) case msgServiceAccept: msg = new(serviceAcceptMsg) + case msgExtInfo: + msg = new(extInfoMsg) case msgKexInit: msg = new(kexInitMsg) case msgKexDHInit: @@ -843,6 +853,7 @@ var packetTypeNames = map[byte]string{ msgDisconnect: "disconnectMsg", msgServiceRequest: "serviceRequestMsg", msgServiceAccept: "serviceAcceptMsg", + msgExtInfo: "extInfoMsg", msgKexInit: "kexInitMsg", msgKexDHInit: "kexDHInitMsg", msgKexDHReply: "kexDHReplyMsg", diff --git a/vendor/golang.org/x/crypto/ssh/server.go b/vendor/golang.org/x/crypto/ssh/server.go index b6911e830..70045bdfd 100644 --- a/vendor/golang.org/x/crypto/ssh/server.go +++ b/vendor/golang.org/x/crypto/ssh/server.go @@ -120,7 +120,7 @@ type ServerConfig struct { } // AddHostKey adds a private key as a host key. If an existing host -// key exists with the same algorithm, it is overwritten. Each server +// key exists with the same public key format, it is replaced. Each server // config must have at least one host key. func (s *ServerConfig) AddHostKey(key Signer) { for i, k := range s.hostKeys { @@ -212,9 +212,10 @@ func NewServerConn(c net.Conn, config *ServerConfig) (*ServerConn, <-chan NewCha } // signAndMarshal signs the data with the appropriate algorithm, -// and serializes the result in SSH wire format. -func signAndMarshal(k Signer, rand io.Reader, data []byte) ([]byte, error) { - sig, err := k.Sign(rand, data) +// and serializes the result in SSH wire format. algo is the negotiate +// algorithm and may be a certificate type. +func signAndMarshal(k AlgorithmSigner, rand io.Reader, data []byte, algo string) ([]byte, error) { + sig, err := k.SignWithAlgorithm(rand, data, underlyingAlgo(algo)) if err != nil { return nil, err } @@ -284,7 +285,7 @@ func (s *connection) serverHandshake(config *ServerConfig) (*Permissions, error) func isAcceptableAlgo(algo string) bool { switch algo { - case KeyAlgoRSA, KeyAlgoDSA, KeyAlgoECDSA256, KeyAlgoECDSA384, KeyAlgoECDSA521, KeyAlgoSKECDSA256, KeyAlgoED25519, KeyAlgoSKED25519, + case KeyAlgoRSA, KeyAlgoRSASHA256, KeyAlgoRSASHA512, KeyAlgoDSA, KeyAlgoECDSA256, KeyAlgoECDSA384, KeyAlgoECDSA521, KeyAlgoSKECDSA256, KeyAlgoED25519, KeyAlgoSKED25519, CertAlgoRSAv01, CertAlgoDSAv01, CertAlgoECDSA256v01, CertAlgoECDSA384v01, CertAlgoECDSA521v01, CertAlgoSKECDSA256v01, CertAlgoED25519v01, CertAlgoSKED25519v01: return true } @@ -553,6 +554,7 @@ userAuthLoop: if !ok || len(payload) > 0 { return nil, parseError(msgUserAuthRequest) } + // Ensure the public key algo and signature algo // are supported. Compare the private key // algorithm name that corresponds to algo with @@ -562,7 +564,12 @@ userAuthLoop: authErr = fmt.Errorf("ssh: algorithm %q not accepted", sig.Format) break } - signedData := buildDataSignedForAuth(sessionID, userAuthReq, algoBytes, pubKeyData) + if underlyingAlgo(algo) != sig.Format { + authErr = fmt.Errorf("ssh: signature %q not compatible with selected algorithm %q", sig.Format, algo) + break + } + + signedData := buildDataSignedForAuth(sessionID, userAuthReq, algo, pubKeyData) if err := pubKey.Verify(signedData, sig); err != nil { return nil, err @@ -633,6 +640,30 @@ userAuthLoop: } authFailures++ + if config.MaxAuthTries > 0 && authFailures >= config.MaxAuthTries { + // If we have hit the max attempts, don't bother sending the + // final SSH_MSG_USERAUTH_FAILURE message, since there are + // no more authentication methods which can be attempted, + // and this message may cause the client to re-attempt + // authentication while we send the disconnect message. + // Continue, and trigger the disconnect at the start of + // the loop. + // + // The SSH specification is somewhat confusing about this, + // RFC 4252 Section 5.1 requires each authentication failure + // be responded to with a respective SSH_MSG_USERAUTH_FAILURE + // message, but Section 4 says the server should disconnect + // after some number of attempts, but it isn't explicit which + // message should take precedence (i.e. should there be a failure + // message than a disconnect message, or if we are going to + // disconnect, should we only send that message.) + // + // Either way, OpenSSH disconnects immediately after the last + // failed authnetication attempt, and given they are typically + // considered the golden implementation it seems reasonable + // to match that behavior. + continue + } var failureMsg userAuthFailureMsg if config.PasswordCallback != nil { @@ -670,7 +701,7 @@ type sshClientKeyboardInteractive struct { *connection } -func (c *sshClientKeyboardInteractive) Challenge(user, instruction string, questions []string, echos []bool) (answers []string, err error) { +func (c *sshClientKeyboardInteractive) Challenge(name, instruction string, questions []string, echos []bool) (answers []string, err error) { if len(questions) != len(echos) { return nil, errors.New("ssh: echos and questions must have equal length") } @@ -682,6 +713,7 @@ func (c *sshClientKeyboardInteractive) Challenge(user, instruction string, quest } if err := c.transport.writePacket(Marshal(&userAuthInfoRequestMsg{ + Name: name, Instruction: instruction, NumPrompts: uint32(len(questions)), Prompts: prompts, diff --git a/vendor/golang.org/x/crypto/ssh/session.go b/vendor/golang.org/x/crypto/ssh/session.go index d3321f6b7..eca31a22d 100644 --- a/vendor/golang.org/x/crypto/ssh/session.go +++ b/vendor/golang.org/x/crypto/ssh/session.go @@ -85,6 +85,7 @@ const ( IXANY = 39 IXOFF = 40 IMAXBEL = 41 + IUTF8 = 42 // RFC 8160 ISIG = 50 ICANON = 51 XCASE = 52 diff --git a/vendor/golang.org/x/crypto/ssh/transport.go b/vendor/golang.org/x/crypto/ssh/transport.go index 49ddc2e7d..acf5a21bb 100644 --- a/vendor/golang.org/x/crypto/ssh/transport.go +++ b/vendor/golang.org/x/crypto/ssh/transport.go @@ -238,15 +238,19 @@ var ( // (to setup server->client keys) or clientKeys (for client->server keys). func newPacketCipher(d direction, algs directionAlgorithms, kex *kexResult) (packetCipher, error) { cipherMode := cipherModes[algs.Cipher] - macMode := macModes[algs.MAC] iv := make([]byte, cipherMode.ivSize) key := make([]byte, cipherMode.keySize) - macKey := make([]byte, macMode.keySize) generateKeyMaterial(iv, d.ivTag, kex) generateKeyMaterial(key, d.keyTag, kex) - generateKeyMaterial(macKey, d.macKeyTag, kex) + + var macKey []byte + if !aeadCiphers[algs.Cipher] { + macMode := macModes[algs.MAC] + macKey = make([]byte, macMode.keySize) + generateKeyMaterial(macKey, d.macKeyTag, kex) + } return cipherModes[algs.Cipher].create(key, iv, macKey, algs) } diff --git a/vendor/golang.org/x/mod/modfile/rule.go b/vendor/golang.org/x/mod/modfile/rule.go index ca03e70ea..ed2f31aa7 100644 --- a/vendor/golang.org/x/mod/modfile/rule.go +++ b/vendor/golang.org/x/mod/modfile/rule.go @@ -423,68 +423,12 @@ func (f *File) add(errs *ErrorList, block *LineBlock, line *Line, verb string, a } case "replace": - arrow := 2 - if len(args) >= 2 && args[1] == "=>" { - arrow = 1 - } - if len(args) < arrow+2 || len(args) > arrow+3 || args[arrow] != "=>" { - errorf("usage: %s module/path [v1.2.3] => other/module v1.4\n\t or %s module/path [v1.2.3] => ../local/directory", verb, verb) - return - } - s, err := parseString(&args[0]) - if err != nil { - errorf("invalid quoted string: %v", err) - return - } - pathMajor, err := modulePathMajor(s) - if err != nil { - wrapModPathError(s, err) - return - } - var v string - if arrow == 2 { - v, err = parseVersion(verb, s, &args[1], fix) - if err != nil { - wrapError(err) - return - } - if err := module.CheckPathMajor(v, pathMajor); err != nil { - wrapModPathError(s, err) - return - } - } - ns, err := parseString(&args[arrow+1]) - if err != nil { - errorf("invalid quoted string: %v", err) + replace, wrappederr := parseReplace(f.Syntax.Name, line, verb, args, fix) + if wrappederr != nil { + *errs = append(*errs, *wrappederr) return } - nv := "" - if len(args) == arrow+2 { - if !IsDirectoryPath(ns) { - errorf("replacement module without version must be directory path (rooted or starting with ./ or ../)") - return - } - if filepath.Separator == '/' && strings.Contains(ns, `\`) { - errorf("replacement directory appears to be Windows path (on a non-windows system)") - return - } - } - if len(args) == arrow+3 { - nv, err = parseVersion(verb, ns, &args[arrow+2], fix) - if err != nil { - wrapError(err) - return - } - if IsDirectoryPath(ns) { - errorf("replacement module directory path %q cannot have version", ns) - return - } - } - f.Replace = append(f.Replace, &Replace{ - Old: module.Version{Path: s, Version: v}, - New: module.Version{Path: ns, Version: nv}, - Syntax: line, - }) + f.Replace = append(f.Replace, replace) case "retract": rationale := parseDirectiveComment(block, line) @@ -515,6 +459,83 @@ func (f *File) add(errs *ErrorList, block *LineBlock, line *Line, verb string, a } } +func parseReplace(filename string, line *Line, verb string, args []string, fix VersionFixer) (*Replace, *Error) { + wrapModPathError := func(modPath string, err error) *Error { + return &Error{ + Filename: filename, + Pos: line.Start, + ModPath: modPath, + Verb: verb, + Err: err, + } + } + wrapError := func(err error) *Error { + return &Error{ + Filename: filename, + Pos: line.Start, + Err: err, + } + } + errorf := func(format string, args ...interface{}) *Error { + return wrapError(fmt.Errorf(format, args...)) + } + + arrow := 2 + if len(args) >= 2 && args[1] == "=>" { + arrow = 1 + } + if len(args) < arrow+2 || len(args) > arrow+3 || args[arrow] != "=>" { + return nil, errorf("usage: %s module/path [v1.2.3] => other/module v1.4\n\t or %s module/path [v1.2.3] => ../local/directory", verb, verb) + } + s, err := parseString(&args[0]) + if err != nil { + return nil, errorf("invalid quoted string: %v", err) + } + pathMajor, err := modulePathMajor(s) + if err != nil { + return nil, wrapModPathError(s, err) + + } + var v string + if arrow == 2 { + v, err = parseVersion(verb, s, &args[1], fix) + if err != nil { + return nil, wrapError(err) + } + if err := module.CheckPathMajor(v, pathMajor); err != nil { + return nil, wrapModPathError(s, err) + } + } + ns, err := parseString(&args[arrow+1]) + if err != nil { + return nil, errorf("invalid quoted string: %v", err) + } + nv := "" + if len(args) == arrow+2 { + if !IsDirectoryPath(ns) { + return nil, errorf("replacement module without version must be directory path (rooted or starting with ./ or ../)") + } + if filepath.Separator == '/' && strings.Contains(ns, `\`) { + return nil, errorf("replacement directory appears to be Windows path (on a non-windows system)") + } + } + if len(args) == arrow+3 { + nv, err = parseVersion(verb, ns, &args[arrow+2], fix) + if err != nil { + return nil, wrapError(err) + } + if IsDirectoryPath(ns) { + return nil, errorf("replacement module directory path %q cannot have version", ns) + + } + } + return &Replace{ + Old: module.Version{Path: s, Version: v}, + New: module.Version{Path: ns, Version: nv}, + Syntax: line, + }, nil +} + // fixRetract applies fix to each retract directive in f, appending any errors // to errs. // @@ -556,6 +577,63 @@ func (f *File) fixRetract(fix VersionFixer, errs *ErrorList) { } } +func (f *WorkFile) add(errs *ErrorList, line *Line, verb string, args []string, fix VersionFixer) { + wrapError := func(err error) { + *errs = append(*errs, Error{ + Filename: f.Syntax.Name, + Pos: line.Start, + Err: err, + }) + } + errorf := func(format string, args ...interface{}) { + wrapError(fmt.Errorf(format, args...)) + } + + switch verb { + default: + errorf("unknown directive: %s", verb) + + case "go": + if f.Go != nil { + errorf("repeated go statement") + return + } + if len(args) != 1 { + errorf("go directive expects exactly one argument") + return + } else if !GoVersionRE.MatchString(args[0]) { + errorf("invalid go version '%s': must match format 1.23", args[0]) + return + } + + f.Go = &Go{Syntax: line} + f.Go.Version = args[0] + + case "use": + if len(args) != 1 { + errorf("usage: %s local/dir", verb) + return + } + s, err := parseString(&args[0]) + if err != nil { + errorf("invalid quoted string: %v", err) + return + } + f.Use = append(f.Use, &Use{ + Path: s, + Syntax: line, + }) + + case "replace": + replace, wrappederr := parseReplace(f.Syntax.Name, line, verb, args, fix) + if wrappederr != nil { + *errs = append(*errs, *wrappederr) + return + } + f.Replace = append(f.Replace, replace) + } +} + // IsDirectoryPath reports whether the given path should be interpreted // as a directory path. Just like on the go command line, relative paths // and rooted paths are directory paths; the rest are module paths. @@ -1212,6 +1290,10 @@ func (f *File) DropExclude(path, vers string) error { } func (f *File) AddReplace(oldPath, oldVers, newPath, newVers string) error { + return addReplace(f.Syntax, &f.Replace, oldPath, oldVers, newPath, newVers) +} + +func addReplace(syntax *FileSyntax, replace *[]*Replace, oldPath, oldVers, newPath, newVers string) error { need := true old := module.Version{Path: oldPath, Version: oldVers} new := module.Version{Path: newPath, Version: newVers} @@ -1225,12 +1307,12 @@ func (f *File) AddReplace(oldPath, oldVers, newPath, newVers string) error { } var hint *Line - for _, r := range f.Replace { + for _, r := range *replace { if r.Old.Path == oldPath && (oldVers == "" || r.Old.Version == oldVers) { if need { // Found replacement for old; update to use new. r.New = new - f.Syntax.updateLine(r.Syntax, tokens...) + syntax.updateLine(r.Syntax, tokens...) need = false continue } @@ -1243,7 +1325,7 @@ func (f *File) AddReplace(oldPath, oldVers, newPath, newVers string) error { } } if need { - f.Replace = append(f.Replace, &Replace{Old: old, New: new, Syntax: f.Syntax.addLine(hint, tokens...)}) + *replace = append(*replace, &Replace{Old: old, New: new, Syntax: syntax.addLine(hint, tokens...)}) } return nil } @@ -1329,30 +1411,36 @@ func (f *File) SortBlocks() { // retract directives are not de-duplicated since comments are // meaningful, and versions may be retracted multiple times. func (f *File) removeDups() { + removeDups(f.Syntax, &f.Exclude, &f.Replace) +} + +func removeDups(syntax *FileSyntax, exclude *[]*Exclude, replace *[]*Replace) { kill := make(map[*Line]bool) // Remove duplicate excludes. - haveExclude := make(map[module.Version]bool) - for _, x := range f.Exclude { - if haveExclude[x.Mod] { - kill[x.Syntax] = true - continue + if exclude != nil { + haveExclude := make(map[module.Version]bool) + for _, x := range *exclude { + if haveExclude[x.Mod] { + kill[x.Syntax] = true + continue + } + haveExclude[x.Mod] = true } - haveExclude[x.Mod] = true - } - var excl []*Exclude - for _, x := range f.Exclude { - if !kill[x.Syntax] { - excl = append(excl, x) + var excl []*Exclude + for _, x := range *exclude { + if !kill[x.Syntax] { + excl = append(excl, x) + } } + *exclude = excl } - f.Exclude = excl // Remove duplicate replacements. // Later replacements take priority over earlier ones. haveReplace := make(map[module.Version]bool) - for i := len(f.Replace) - 1; i >= 0; i-- { - x := f.Replace[i] + for i := len(*replace) - 1; i >= 0; i-- { + x := (*replace)[i] if haveReplace[x.Old] { kill[x.Syntax] = true continue @@ -1360,18 +1448,18 @@ func (f *File) removeDups() { haveReplace[x.Old] = true } var repl []*Replace - for _, x := range f.Replace { + for _, x := range *replace { if !kill[x.Syntax] { repl = append(repl, x) } } - f.Replace = repl + *replace = repl // Duplicate require and retract directives are not removed. // Drop killed statements from the syntax tree. var stmts []Expr - for _, stmt := range f.Syntax.Stmt { + for _, stmt := range syntax.Stmt { switch stmt := stmt.(type) { case *Line: if kill[stmt] { @@ -1391,7 +1479,7 @@ func (f *File) removeDups() { } stmts = append(stmts, stmt) } - f.Syntax.Stmt = stmts + syntax.Stmt = stmts } // lineLess returns whether li should be sorted before lj. It sorts diff --git a/vendor/golang.org/x/mod/modfile/work.go b/vendor/golang.org/x/mod/modfile/work.go new file mode 100644 index 000000000..0c0e52152 --- /dev/null +++ b/vendor/golang.org/x/mod/modfile/work.go @@ -0,0 +1,234 @@ +// Copyright 2021 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package modfile + +import ( + "fmt" + "sort" + "strings" +) + +// A WorkFile is the parsed, interpreted form of a go.work file. +type WorkFile struct { + Go *Go + Use []*Use + Replace []*Replace + + Syntax *FileSyntax +} + +// A Use is a single directory statement. +type Use struct { + Path string // Use path of module. + ModulePath string // Module path in the comment. + Syntax *Line +} + +// ParseWork parses and returns a go.work file. +// +// file is the name of the file, used in positions and errors. +// +// data is the content of the file. +// +// fix is an optional function that canonicalizes module versions. +// If fix is nil, all module versions must be canonical (module.CanonicalVersion +// must return the same string). +func ParseWork(file string, data []byte, fix VersionFixer) (*WorkFile, error) { + fs, err := parse(file, data) + if err != nil { + return nil, err + } + f := &WorkFile{ + Syntax: fs, + } + var errs ErrorList + + for _, x := range fs.Stmt { + switch x := x.(type) { + case *Line: + f.add(&errs, x, x.Token[0], x.Token[1:], fix) + + case *LineBlock: + if len(x.Token) > 1 { + errs = append(errs, Error{ + Filename: file, + Pos: x.Start, + Err: fmt.Errorf("unknown block type: %s", strings.Join(x.Token, " ")), + }) + continue + } + switch x.Token[0] { + default: + errs = append(errs, Error{ + Filename: file, + Pos: x.Start, + Err: fmt.Errorf("unknown block type: %s", strings.Join(x.Token, " ")), + }) + continue + case "use", "replace": + for _, l := range x.Line { + f.add(&errs, l, x.Token[0], l.Token, fix) + } + } + } + } + + if len(errs) > 0 { + return nil, errs + } + return f, nil +} + +// Cleanup cleans up the file f after any edit operations. +// To avoid quadratic behavior, modifications like DropRequire +// clear the entry but do not remove it from the slice. +// Cleanup cleans out all the cleared entries. +func (f *WorkFile) Cleanup() { + w := 0 + for _, r := range f.Use { + if r.Path != "" { + f.Use[w] = r + w++ + } + } + f.Use = f.Use[:w] + + w = 0 + for _, r := range f.Replace { + if r.Old.Path != "" { + f.Replace[w] = r + w++ + } + } + f.Replace = f.Replace[:w] + + f.Syntax.Cleanup() +} + +func (f *WorkFile) AddGoStmt(version string) error { + if !GoVersionRE.MatchString(version) { + return fmt.Errorf("invalid language version string %q", version) + } + if f.Go == nil { + stmt := &Line{Token: []string{"go", version}} + f.Go = &Go{ + Version: version, + Syntax: stmt, + } + // Find the first non-comment-only block that's and add + // the go statement before it. That will keep file comments at the top. + i := 0 + for i = 0; i < len(f.Syntax.Stmt); i++ { + if _, ok := f.Syntax.Stmt[i].(*CommentBlock); !ok { + break + } + } + f.Syntax.Stmt = append(append(f.Syntax.Stmt[:i:i], stmt), f.Syntax.Stmt[i:]...) + } else { + f.Go.Version = version + f.Syntax.updateLine(f.Go.Syntax, "go", version) + } + return nil +} + +func (f *WorkFile) AddUse(diskPath, modulePath string) error { + need := true + for _, d := range f.Use { + if d.Path == diskPath { + if need { + d.ModulePath = modulePath + f.Syntax.updateLine(d.Syntax, "use", AutoQuote(diskPath)) + need = false + } else { + d.Syntax.markRemoved() + *d = Use{} + } + } + } + + if need { + f.AddNewUse(diskPath, modulePath) + } + return nil +} + +func (f *WorkFile) AddNewUse(diskPath, modulePath string) { + line := f.Syntax.addLine(nil, "use", AutoQuote(diskPath)) + f.Use = append(f.Use, &Use{Path: diskPath, ModulePath: modulePath, Syntax: line}) +} + +func (f *WorkFile) SetUse(dirs []*Use) { + need := make(map[string]string) + for _, d := range dirs { + need[d.Path] = d.ModulePath + } + + for _, d := range f.Use { + if modulePath, ok := need[d.Path]; ok { + d.ModulePath = modulePath + } else { + d.Syntax.markRemoved() + *d = Use{} + } + } + + // TODO(#45713): Add module path to comment. + + for diskPath, modulePath := range need { + f.AddNewUse(diskPath, modulePath) + } + f.SortBlocks() +} + +func (f *WorkFile) DropUse(path string) error { + for _, d := range f.Use { + if d.Path == path { + d.Syntax.markRemoved() + *d = Use{} + } + } + return nil +} + +func (f *WorkFile) AddReplace(oldPath, oldVers, newPath, newVers string) error { + return addReplace(f.Syntax, &f.Replace, oldPath, oldVers, newPath, newVers) +} + +func (f *WorkFile) DropReplace(oldPath, oldVers string) error { + for _, r := range f.Replace { + if r.Old.Path == oldPath && r.Old.Version == oldVers { + r.Syntax.markRemoved() + *r = Replace{} + } + } + return nil +} + +func (f *WorkFile) SortBlocks() { + f.removeDups() // otherwise sorting is unsafe + + for _, stmt := range f.Syntax.Stmt { + block, ok := stmt.(*LineBlock) + if !ok { + continue + } + sort.SliceStable(block.Line, func(i, j int) bool { + return lineLess(block.Line[i], block.Line[j]) + }) + } +} + +// removeDups removes duplicate replace directives. +// +// Later replace directives take priority. +// +// require directives are not de-duplicated. That's left up to higher-level +// logic (MVS). +// +// retract directives are not de-duplicated since comments are +// meaningful, and versions may be retracted multiple times. +func (f *WorkFile) removeDups() { + removeDups(f.Syntax, nil, &f.Replace) +} diff --git a/vendor/golang.org/x/mod/module/module.go b/vendor/golang.org/x/mod/module/module.go index ba97ac356..355b5a456 100644 --- a/vendor/golang.org/x/mod/module/module.go +++ b/vendor/golang.org/x/mod/module/module.go @@ -286,12 +286,7 @@ func fileNameOK(r rune) bool { if '0' <= r && r <= '9' || 'A' <= r && r <= 'Z' || 'a' <= r && r <= 'z' { return true } - for i := 0; i < len(allowed); i++ { - if rune(allowed[i]) == r { - return true - } - } - return false + return strings.ContainsRune(allowed, r) } // It may be OK to add more ASCII punctuation here, but only carefully. // For example Windows disallows < > \, and macOS disallows :, so we must not allow those. @@ -803,6 +798,7 @@ func unescapeString(escaped string) (string, bool) { // GOPRIVATE environment variable, as described by 'go help module-private'. // // It ignores any empty or malformed patterns in the list. +// Trailing slashes on patterns are ignored. func MatchPrefixPatterns(globs, target string) bool { for globs != "" { // Extract next non-empty glob in comma-separated list. @@ -812,6 +808,7 @@ func MatchPrefixPatterns(globs, target string) bool { } else { glob, globs = globs, "" } + glob = strings.TrimSuffix(glob, "/") if glob == "" { continue } diff --git a/vendor/golang.org/x/mod/semver/semver.go b/vendor/golang.org/x/mod/semver/semver.go index 7be398f80..a30a22bf2 100644 --- a/vendor/golang.org/x/mod/semver/semver.go +++ b/vendor/golang.org/x/mod/semver/semver.go @@ -32,7 +32,6 @@ type parsed struct { short string prerelease string build string - err string } // IsValid reports whether v is a valid semantic version string. @@ -172,12 +171,10 @@ func Sort(list []string) { func parse(v string) (p parsed, ok bool) { if v == "" || v[0] != 'v' { - p.err = "missing v prefix" return } p.major, v, ok = parseInt(v[1:]) if !ok { - p.err = "bad major version" return } if v == "" { @@ -187,13 +184,11 @@ func parse(v string) (p parsed, ok bool) { return } if v[0] != '.' { - p.err = "bad minor prefix" ok = false return } p.minor, v, ok = parseInt(v[1:]) if !ok { - p.err = "bad minor version" return } if v == "" { @@ -202,31 +197,26 @@ func parse(v string) (p parsed, ok bool) { return } if v[0] != '.' { - p.err = "bad patch prefix" ok = false return } p.patch, v, ok = parseInt(v[1:]) if !ok { - p.err = "bad patch version" return } if len(v) > 0 && v[0] == '-' { p.prerelease, v, ok = parsePrerelease(v) if !ok { - p.err = "bad prerelease" return } } if len(v) > 0 && v[0] == '+' { p.build, v, ok = parseBuild(v) if !ok { - p.err = "bad build" return } } if v != "" { - p.err = "junk on end" ok = false return } diff --git a/vendor/golang.org/x/net/context/context.go b/vendor/golang.org/x/net/context/context.go index a3c021d3f..cf66309c4 100644 --- a/vendor/golang.org/x/net/context/context.go +++ b/vendor/golang.org/x/net/context/context.go @@ -21,9 +21,9 @@ // explicitly to each function that needs it. The Context should be the first // parameter, typically named ctx: // -// func DoSomething(ctx context.Context, arg Arg) error { -// // ... use ctx ... -// } +// func DoSomething(ctx context.Context, arg Arg) error { +// // ... use ctx ... +// } // // Do not pass a nil Context, even if a function permits it. Pass context.TODO // if you are unsure about which Context to use. diff --git a/vendor/golang.org/x/net/context/go17.go b/vendor/golang.org/x/net/context/go17.go index 344bd1433..0a54bdbcc 100644 --- a/vendor/golang.org/x/net/context/go17.go +++ b/vendor/golang.org/x/net/context/go17.go @@ -54,11 +54,11 @@ func WithDeadline(parent Context, deadline time.Time) (Context, CancelFunc) { // Canceling this context releases resources associated with it, so code should // call cancel as soon as the operations running in this Context complete: // -// func slowOperationWithTimeout(ctx context.Context) (Result, error) { -// ctx, cancel := context.WithTimeout(ctx, 100*time.Millisecond) -// defer cancel() // releases resources if slowOperation completes before timeout elapses -// return slowOperation(ctx) -// } +// func slowOperationWithTimeout(ctx context.Context) (Result, error) { +// ctx, cancel := context.WithTimeout(ctx, 100*time.Millisecond) +// defer cancel() // releases resources if slowOperation completes before timeout elapses +// return slowOperation(ctx) +// } func WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc) { return WithDeadline(parent, time.Now().Add(timeout)) } diff --git a/vendor/golang.org/x/net/context/pre_go17.go b/vendor/golang.org/x/net/context/pre_go17.go index 5270db5db..7b6b68511 100644 --- a/vendor/golang.org/x/net/context/pre_go17.go +++ b/vendor/golang.org/x/net/context/pre_go17.go @@ -264,11 +264,11 @@ func (c *timerCtx) cancel(removeFromParent bool, err error) { // Canceling this context releases resources associated with it, so code should // call cancel as soon as the operations running in this Context complete: // -// func slowOperationWithTimeout(ctx context.Context) (Result, error) { -// ctx, cancel := context.WithTimeout(ctx, 100*time.Millisecond) -// defer cancel() // releases resources if slowOperation completes before timeout elapses -// return slowOperation(ctx) -// } +// func slowOperationWithTimeout(ctx context.Context) (Result, error) { +// ctx, cancel := context.WithTimeout(ctx, 100*time.Millisecond) +// defer cancel() // releases resources if slowOperation completes before timeout elapses +// return slowOperation(ctx) +// } func WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc) { return WithDeadline(parent, time.Now().Add(timeout)) } diff --git a/vendor/golang.org/x/net/http/httpguts/httplex.go b/vendor/golang.org/x/net/http/httpguts/httplex.go index c79aa73f2..6e071e852 100644 --- a/vendor/golang.org/x/net/http/httpguts/httplex.go +++ b/vendor/golang.org/x/net/http/httpguts/httplex.go @@ -173,13 +173,15 @@ func tokenEqual(t1, t2 string) bool { // isLWS reports whether b is linear white space, according // to http://www.w3.org/Protocols/rfc2616/rfc2616-sec2.html#sec2.2 -// LWS = [CRLF] 1*( SP | HT ) +// +// LWS = [CRLF] 1*( SP | HT ) func isLWS(b byte) bool { return b == ' ' || b == '\t' } // isCTL reports whether b is a control byte, according // to http://www.w3.org/Protocols/rfc2616/rfc2616-sec2.html#sec2.2 -// CTL = +// +// CTL = func isCTL(b byte) bool { const del = 0x7f // a CTL return b < ' ' || b == del @@ -189,12 +191,13 @@ func isCTL(b byte) bool { // HTTP/2 imposes the additional restriction that uppercase ASCII // letters are not allowed. // -// RFC 7230 says: -// header-field = field-name ":" OWS field-value OWS -// field-name = token -// token = 1*tchar -// tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*" / "+" / "-" / "." / -// "^" / "_" / "`" / "|" / "~" / DIGIT / ALPHA +// RFC 7230 says: +// +// header-field = field-name ":" OWS field-value OWS +// field-name = token +// token = 1*tchar +// tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*" / "+" / "-" / "." / +// "^" / "_" / "`" / "|" / "~" / DIGIT / ALPHA func ValidHeaderFieldName(v string) bool { if len(v) == 0 { return false @@ -267,27 +270,28 @@ var validHostByte = [256]bool{ // ValidHeaderFieldValue reports whether v is a valid "field-value" according to // http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2 : // -// message-header = field-name ":" [ field-value ] -// field-value = *( field-content | LWS ) -// field-content = +// message-header = field-name ":" [ field-value ] +// field-value = *( field-content | LWS ) +// field-content = // // http://www.w3.org/Protocols/rfc2616/rfc2616-sec2.html#sec2.2 : // -// TEXT = -// LWS = [CRLF] 1*( SP | HT ) -// CTL = +// TEXT = +// LWS = [CRLF] 1*( SP | HT ) +// CTL = // // RFC 7230 says: -// field-value = *( field-content / obs-fold ) -// obj-fold = N/A to http2, and deprecated -// field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ] -// field-vchar = VCHAR / obs-text -// obs-text = %x80-FF -// VCHAR = "any visible [USASCII] character" +// +// field-value = *( field-content / obs-fold ) +// obj-fold = N/A to http2, and deprecated +// field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ] +// field-vchar = VCHAR / obs-text +// obs-text = %x80-FF +// VCHAR = "any visible [USASCII] character" // // http2 further says: "Similarly, HTTP/2 allows header field values // that are not valid. While most of the values that can be encoded diff --git a/vendor/golang.org/x/net/http2/errors.go b/vendor/golang.org/x/net/http2/errors.go index 2663e5d28..f2067dabc 100644 --- a/vendor/golang.org/x/net/http2/errors.go +++ b/vendor/golang.org/x/net/http2/errors.go @@ -136,7 +136,7 @@ func (e headerFieldNameError) Error() string { type headerFieldValueError string func (e headerFieldValueError) Error() string { - return fmt.Sprintf("invalid header field value %q", string(e)) + return fmt.Sprintf("invalid header field value for %q", string(e)) } var ( diff --git a/vendor/golang.org/x/net/http2/frame.go b/vendor/golang.org/x/net/http2/frame.go index 96a747905..0178647ee 100644 --- a/vendor/golang.org/x/net/http2/frame.go +++ b/vendor/golang.org/x/net/http2/frame.go @@ -1532,7 +1532,8 @@ func (fr *Framer) readMetaFrame(hf *HeadersFrame) (*MetaHeadersFrame, error) { fr.debugReadLoggerf("http2: decoded hpack field %+v", hf) } if !httpguts.ValidHeaderFieldValue(hf.Value) { - invalid = headerFieldValueError(hf.Value) + // Don't include the value in the error, because it may be sensitive. + invalid = headerFieldValueError(hf.Name) } isPseudo := strings.HasPrefix(hf.Name, ":") if isPseudo { diff --git a/vendor/golang.org/x/net/http2/go118.go b/vendor/golang.org/x/net/http2/go118.go new file mode 100644 index 000000000..aca4b2b31 --- /dev/null +++ b/vendor/golang.org/x/net/http2/go118.go @@ -0,0 +1,17 @@ +// Copyright 2021 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build go1.18 +// +build go1.18 + +package http2 + +import ( + "crypto/tls" + "net" +) + +func tlsUnderlyingConn(tc *tls.Conn) net.Conn { + return tc.NetConn() +} diff --git a/vendor/golang.org/x/net/http2/http2.go b/vendor/golang.org/x/net/http2/http2.go index 5571ccfd2..479ba4b2b 100644 --- a/vendor/golang.org/x/net/http2/http2.go +++ b/vendor/golang.org/x/net/http2/http2.go @@ -13,7 +13,6 @@ // See https://http2.github.io/ for more information on HTTP/2. // // See https://http2.golang.org/ for a test server running this code. -// package http2 // import "golang.org/x/net/http2" import ( @@ -176,10 +175,11 @@ func (s SettingID) String() string { // name (key). See httpguts.ValidHeaderName for the base rules. // // Further, http2 says: -// "Just as in HTTP/1.x, header field names are strings of ASCII -// characters that are compared in a case-insensitive -// fashion. However, header field names MUST be converted to -// lowercase prior to their encoding in HTTP/2. " +// +// "Just as in HTTP/1.x, header field names are strings of ASCII +// characters that are compared in a case-insensitive +// fashion. However, header field names MUST be converted to +// lowercase prior to their encoding in HTTP/2. " func validWireHeaderFieldName(v string) bool { if len(v) == 0 { return false @@ -365,8 +365,8 @@ func (s *sorter) SortStrings(ss []string) { // validPseudoPath reports whether v is a valid :path pseudo-header // value. It must be either: // -// *) a non-empty string starting with '/' -// *) the string '*', for OPTIONS requests. +// - a non-empty string starting with '/' +// - the string '*', for OPTIONS requests. // // For now this is only used a quick check for deciding when to clean // up Opaque URLs before sending requests from the Transport. diff --git a/vendor/golang.org/x/net/http2/not_go118.go b/vendor/golang.org/x/net/http2/not_go118.go new file mode 100644 index 000000000..eab532c96 --- /dev/null +++ b/vendor/golang.org/x/net/http2/not_go118.go @@ -0,0 +1,17 @@ +// Copyright 2021 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build !go1.18 +// +build !go1.18 + +package http2 + +import ( + "crypto/tls" + "net" +) + +func tlsUnderlyingConn(tc *tls.Conn) net.Conn { + return nil +} diff --git a/vendor/golang.org/x/net/http2/server.go b/vendor/golang.org/x/net/http2/server.go index d219dc4c7..33765d3a6 100644 --- a/vendor/golang.org/x/net/http2/server.go +++ b/vendor/golang.org/x/net/http2/server.go @@ -722,7 +722,7 @@ func (sc *serverConn) canonicalHeader(v string) string { // maxCachedCanonicalHeaders is an arbitrarily-chosen limit on the number of // entries in the canonHeader cache. This should be larger than the number // of unique, uncommon header keys likely to be sent by the peer, while not - // so high as to permit unreaasonable memory usage if the peer sends an unbounded + // so high as to permit unreasonable memory usage if the peer sends an unbounded // number of unique header keys. const maxCachedCanonicalHeaders = 32 if len(sc.canonHeader) < maxCachedCanonicalHeaders { @@ -2546,8 +2546,9 @@ func (rws *responseWriterState) writeChunk(p []byte) (n int, err error) { // prior to the headers being written. If the set of trailers is fixed // or known before the header is written, the normal Go trailers mechanism // is preferred: -// https://golang.org/pkg/net/http/#ResponseWriter -// https://golang.org/pkg/net/http/#example_ResponseWriter_trailers +// +// https://golang.org/pkg/net/http/#ResponseWriter +// https://golang.org/pkg/net/http/#example_ResponseWriter_trailers const TrailerPrefix = "Trailer:" // promoteUndeclaredTrailers permits http.Handlers to set trailers diff --git a/vendor/golang.org/x/net/http2/transport.go b/vendor/golang.org/x/net/http2/transport.go index f135b0f75..9180ba3d5 100644 --- a/vendor/golang.org/x/net/http2/transport.go +++ b/vendor/golang.org/x/net/http2/transport.go @@ -501,12 +501,14 @@ func (t *Transport) RoundTripOpt(req *http.Request, opt RoundTripOpt) (*http.Res if req, err = shouldRetryRequest(req, err); err == nil { // After the first retry, do exponential backoff with 10% jitter. if retry == 0 { + t.vlogf("RoundTrip retrying after failure: %v", err) continue } backoff := float64(uint(1) << (uint(retry) - 1)) backoff += backoff * (0.1 * mathrand.Float64()) select { case <-time.After(time.Second * time.Duration(backoff)): + t.vlogf("RoundTrip retrying after failure: %v", err) continue case <-req.Context().Done(): err = req.Context().Err() @@ -732,11 +734,13 @@ func (cc *ClientConn) healthCheck() { // trigger the healthCheck again if there is no frame received. ctx, cancel := context.WithTimeout(context.Background(), pingTimeout) defer cancel() + cc.vlogf("http2: Transport sending health check") err := cc.Ping(ctx) if err != nil { + cc.vlogf("http2: Transport health check failure: %v", err) cc.closeForLostPing() - cc.t.connPool().MarkDead(cc) - return + } else { + cc.vlogf("http2: Transport health check success") } } @@ -907,6 +911,24 @@ func (cc *ClientConn) onIdleTimeout() { cc.closeIfIdle() } +func (cc *ClientConn) closeConn() error { + t := time.AfterFunc(250*time.Millisecond, cc.forceCloseConn) + defer t.Stop() + return cc.tconn.Close() +} + +// A tls.Conn.Close can hang for a long time if the peer is unresponsive. +// Try to shut it down more aggressively. +func (cc *ClientConn) forceCloseConn() { + tc, ok := cc.tconn.(*tls.Conn) + if !ok { + return + } + if nc := tlsUnderlyingConn(tc); nc != nil { + nc.Close() + } +} + func (cc *ClientConn) closeIfIdle() { cc.mu.Lock() if len(cc.streams) > 0 || cc.streamsReserved > 0 { @@ -921,7 +943,7 @@ func (cc *ClientConn) closeIfIdle() { if VerboseLogs { cc.vlogf("http2: Transport closing idle conn %p (forSingleUse=%v, maxStream=%v)", cc, cc.singleUse, nextID-2) } - cc.tconn.Close() + cc.closeConn() } func (cc *ClientConn) isDoNotReuseAndIdle() bool { @@ -938,7 +960,7 @@ func (cc *ClientConn) Shutdown(ctx context.Context) error { return err } // Wait for all in-flight streams to complete or connection to close - done := make(chan error, 1) + done := make(chan struct{}) cancelled := false // guarded by cc.mu go func() { cc.mu.Lock() @@ -946,7 +968,7 @@ func (cc *ClientConn) Shutdown(ctx context.Context) error { for { if len(cc.streams) == 0 || cc.closed { cc.closed = true - done <- cc.tconn.Close() + close(done) break } if cancelled { @@ -957,8 +979,8 @@ func (cc *ClientConn) Shutdown(ctx context.Context) error { }() shutdownEnterWaitStateHook() select { - case err := <-done: - return err + case <-done: + return cc.closeConn() case <-ctx.Done(): cc.mu.Lock() // Free the goroutine above @@ -1001,9 +1023,9 @@ func (cc *ClientConn) closeForError(err error) error { for _, cs := range cc.streams { cs.abortStreamLocked(err) } - defer cc.cond.Broadcast() - defer cc.mu.Unlock() - return cc.tconn.Close() + cc.cond.Broadcast() + cc.mu.Unlock() + return cc.closeConn() } // Close closes the client connection immediately. @@ -1748,7 +1770,8 @@ func (cc *ClientConn) encodeHeaders(req *http.Request, addGzipHeader bool, trail } for _, v := range vv { if !httpguts.ValidHeaderFieldValue(v) { - return nil, fmt.Errorf("invalid HTTP header value %q for header %q", v, k) + // Don't include the value in the error, because it may be sensitive. + return nil, fmt.Errorf("invalid HTTP header value for header %q", k) } } } @@ -1978,7 +2001,7 @@ func (cc *ClientConn) forgetStreamID(id uint32) { cc.vlogf("http2: Transport closing idle conn %p (forSingleUse=%v, maxStream=%v)", cc, cc.singleUse, cc.nextStreamID-2) } cc.closed = true - defer cc.tconn.Close() + defer cc.closeConn() } cc.mu.Unlock() @@ -2025,8 +2048,8 @@ func isEOFOrNetReadError(err error) bool { func (rl *clientConnReadLoop) cleanup() { cc := rl.cc - defer cc.tconn.Close() - defer cc.t.connPool().MarkDead(cc) + cc.t.connPool().MarkDead(cc) + defer cc.closeConn() defer close(cc.readerDone) if cc.idleTimer != nil { diff --git a/vendor/golang.org/x/net/idna/trieval.go b/vendor/golang.org/x/net/idna/trieval.go index 7a8cf889b..9c070a44b 100644 --- a/vendor/golang.org/x/net/idna/trieval.go +++ b/vendor/golang.org/x/net/idna/trieval.go @@ -17,23 +17,23 @@ package idna // // The per-rune values have the following format: // -// if mapped { -// if inlinedXOR { -// 15..13 inline XOR marker -// 12..11 unused -// 10..3 inline XOR mask -// } else { -// 15..3 index into xor or mapping table -// } -// } else { -// 15..14 unused -// 13 mayNeedNorm -// 12..11 attributes -// 10..8 joining type -// 7..3 category type -// } -// 2 use xor pattern -// 1..0 mapped category +// if mapped { +// if inlinedXOR { +// 15..13 inline XOR marker +// 12..11 unused +// 10..3 inline XOR mask +// } else { +// 15..3 index into xor or mapping table +// } +// } else { +// 15..14 unused +// 13 mayNeedNorm +// 12..11 attributes +// 10..8 joining type +// 7..3 category type +// } +// 2 use xor pattern +// 1..0 mapped category // // See the definitions below for a more detailed description of the various // bits. diff --git a/vendor/golang.org/x/oauth2/go.mod b/vendor/golang.org/x/oauth2/go.mod deleted file mode 100644 index 2b13f0b34..000000000 --- a/vendor/golang.org/x/oauth2/go.mod +++ /dev/null @@ -1,9 +0,0 @@ -module golang.org/x/oauth2 - -go 1.11 - -require ( - cloud.google.com/go v0.65.0 - golang.org/x/net v0.0.0-20200822124328-c89045814202 - google.golang.org/appengine v1.6.6 -) diff --git a/vendor/golang.org/x/oauth2/go.sum b/vendor/golang.org/x/oauth2/go.sum deleted file mode 100644 index eab5833c4..000000000 --- a/vendor/golang.org/x/oauth2/go.sum +++ /dev/null @@ -1,361 +0,0 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= -cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= -cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= -cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= -cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= -cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= -cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= -cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= -cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= -cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= -cloud.google.com/go v0.65.0 h1:Dg9iHVQfrhq82rUNu9ZxUDrJLaxFUe/HlCVaLyRruq8= -cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= -cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= -cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= -cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= -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/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/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= -cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= -cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= -cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= -cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= -cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= -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= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= -github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.1 h1:JFrFEBb2xKufg6XkJsJr+WbKb4FQlURi5RUcBveYu9k= -github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= -golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= -golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= -golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/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= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= -golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= -golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -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/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200822124328-c89045814202 h1:VvcQYSHwXgi7W+TpUR6A9g6Up98WAHf3f/ulnJ62IyA= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -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= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/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-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/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-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -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= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= -google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= -google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.6 h1:lMO5rYAqUxkmaj76jAkRUvt5JZgFymx/+Q5Mzfivuhc= -google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= -google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -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= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= -google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= -rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/vendor/golang.org/x/sys/cpu/byteorder.go b/vendor/golang.org/x/sys/cpu/byteorder.go index dcbb14ef3..271055be0 100644 --- a/vendor/golang.org/x/sys/cpu/byteorder.go +++ b/vendor/golang.org/x/sys/cpu/byteorder.go @@ -46,6 +46,7 @@ func hostByteOrder() byteOrder { case "386", "amd64", "amd64p32", "alpha", "arm", "arm64", + "loong64", "mipsle", "mips64le", "mips64p32le", "nios2", "ppc64le", diff --git a/vendor/golang.org/x/sys/cpu/cpu_loong64.go b/vendor/golang.org/x/sys/cpu/cpu_loong64.go new file mode 100644 index 000000000..0f57b05bd --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_loong64.go @@ -0,0 +1,13 @@ +// Copyright 2022 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build loong64 +// +build loong64 + +package cpu + +const cacheLineSize = 64 + +func initOptions() { +} diff --git a/vendor/golang.org/x/sys/cpu/syscall_aix_gccgo.go b/vendor/golang.org/x/sys/cpu/syscall_aix_gccgo.go index a864f24d7..96134157a 100644 --- a/vendor/golang.org/x/sys/cpu/syscall_aix_gccgo.go +++ b/vendor/golang.org/x/sys/cpu/syscall_aix_gccgo.go @@ -5,7 +5,7 @@ // Recreate a getsystemcfg syscall handler instead of // using the one provided by x/sys/unix to avoid having // the dependency between them. (See golang.org/issue/32102) -// Morever, this file will be used during the building of +// Moreover, this file will be used during the building of // gccgo's libgo and thus must not used a CGo method. //go:build aix && gccgo diff --git a/vendor/golang.org/x/sys/unix/asm_linux_loong64.s b/vendor/golang.org/x/sys/unix/asm_linux_loong64.s new file mode 100644 index 000000000..6abd48eef --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_linux_loong64.s @@ -0,0 +1,54 @@ +// Copyright 2022 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build linux && loong64 && gc +// +build linux +// +build loong64 +// +build gc + +#include "textflag.h" + + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-56 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-80 + JMP syscall·Syscall6(SB) + +TEXT ·SyscallNoError(SB),NOSPLIT,$0-48 + JAL runtime·entersyscall(SB) + MOVV a1+8(FP), R4 + MOVV a2+16(FP), R5 + MOVV a3+24(FP), R6 + MOVV R0, R7 + MOVV R0, R8 + MOVV R0, R9 + MOVV trap+0(FP), R11 // syscall entry + SYSCALL + MOVV R4, r1+32(FP) + MOVV R5, r2+40(FP) + JAL runtime·exitsyscall(SB) + RET + +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 + JMP syscall·RawSyscall6(SB) + +TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48 + MOVV a1+8(FP), R4 + MOVV a2+16(FP), R5 + MOVV a3+24(FP), R6 + MOVV R0, R7 + MOVV R0, R8 + MOVV R0, R9 + MOVV trap+0(FP), R11 // syscall entry + SYSCALL + MOVV R4, r1+32(FP) + MOVV R5, r2+40(FP) + RET diff --git a/vendor/golang.org/x/sys/unix/ioctl_linux.go b/vendor/golang.org/x/sys/unix/ioctl_linux.go index 1dadead21..884430b81 100644 --- a/vendor/golang.org/x/sys/unix/ioctl_linux.go +++ b/vendor/golang.org/x/sys/unix/ioctl_linux.go @@ -194,3 +194,26 @@ func ioctlIfreqData(fd int, req uint, value *ifreqData) error { // identical so pass *IfreqData directly. return ioctlPtr(fd, req, unsafe.Pointer(value)) } + +// IoctlKCMClone attaches a new file descriptor to a multiplexor by cloning an +// existing KCM socket, returning a structure containing the file descriptor of +// the new socket. +func IoctlKCMClone(fd int) (*KCMClone, error) { + var info KCMClone + if err := ioctlPtr(fd, SIOCKCMCLONE, unsafe.Pointer(&info)); err != nil { + return nil, err + } + + return &info, nil +} + +// IoctlKCMAttach attaches a TCP socket and associated BPF program file +// descriptor to a multiplexor. +func IoctlKCMAttach(fd int, info KCMAttach) error { + return ioctlPtr(fd, SIOCKCMATTACH, unsafe.Pointer(&info)) +} + +// IoctlKCMUnattach unattaches a TCP socket file descriptor from a multiplexor. +func IoctlKCMUnattach(fd int, info KCMUnattach) error { + return ioctlPtr(fd, SIOCKCMUNATTACH, unsafe.Pointer(&info)) +} diff --git a/vendor/golang.org/x/sys/unix/mkerrors.sh b/vendor/golang.org/x/sys/unix/mkerrors.sh index a47b035f9..d888fb770 100644 --- a/vendor/golang.org/x/sys/unix/mkerrors.sh +++ b/vendor/golang.org/x/sys/unix/mkerrors.sh @@ -205,6 +205,7 @@ struct ltchars { #include #include #include +#include #include #include #include @@ -214,6 +215,7 @@ struct ltchars { #include #include #include +#include #include #include #include @@ -231,6 +233,7 @@ struct ltchars { #include #include #include +#include #include #include #include @@ -503,6 +506,7 @@ ccflags="$@" $2 ~ /^O?XTABS$/ || $2 ~ /^TC[IO](ON|OFF)$/ || $2 ~ /^IN_/ || + $2 ~ /^KCM/ || $2 ~ /^LANDLOCK_/ || $2 ~ /^LOCK_(SH|EX|NB|UN)$/ || $2 ~ /^LO_(KEY|NAME)_SIZE$/ || @@ -597,8 +601,10 @@ ccflags="$@" $2 ~ /^DEVLINK_/ || $2 ~ /^ETHTOOL_/ || $2 ~ /^LWTUNNEL_IP/ || + $2 ~ /^ITIMER_/ || $2 !~ "WMESGLEN" && $2 ~ /^W[A-Z0-9]+$/ || + $2 ~ /^P_/ || $2 ~/^PPPIOC/ || $2 ~ /^FAN_|FANOTIFY_/ || $2 == "HID_MAX_DESCRIPTOR_SIZE" || @@ -608,6 +614,7 @@ ccflags="$@" $2 ~ /^OTP/ || $2 ~ /^MEM/ || $2 ~ /^WG/ || + $2 ~ /^FIB_RULE_/ || $2 ~ /^BLK[A-Z]*(GET$|SET$|BUF$|PART$|SIZE)/ {printf("\t%s = C.%s\n", $2, $2)} $2 ~ /^__WCOREFLAG$/ {next} $2 ~ /^__W[A-Z0-9]+$/ {printf("\t%s = C.%s\n", substr($2,3), $2)} diff --git a/vendor/golang.org/x/sys/unix/syscall_aix.go b/vendor/golang.org/x/sys/unix/syscall_aix.go index 4f55c8d99..f2a114fc2 100644 --- a/vendor/golang.org/x/sys/unix/syscall_aix.go +++ b/vendor/golang.org/x/sys/unix/syscall_aix.go @@ -215,18 +215,12 @@ func Accept(fd int) (nfd int, sa Sockaddr, err error) { return } -func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) { +func recvmsgRaw(fd int, p, oob []byte, flags int, rsa *RawSockaddrAny) (n, oobn int, recvflags int, err error) { // Recvmsg not implemented on AIX - sa := new(SockaddrUnix) - return -1, -1, -1, sa, ENOSYS + return -1, -1, -1, ENOSYS } -func Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (err error) { - _, err = SendmsgN(fd, p, oob, to, flags) - return -} - -func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error) { +func sendmsgN(fd int, p, oob []byte, ptr unsafe.Pointer, salen _Socklen, flags int) (n int, err error) { // SendmsgN not implemented on AIX return -1, ENOSYS } @@ -458,8 +452,8 @@ func Fsync(fd int) error { //sys Listen(s int, n int) (err error) //sys lstat(path string, stat *Stat_t) (err error) //sys Pause() (err error) -//sys Pread(fd int, p []byte, offset int64) (n int, err error) = pread64 -//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = pwrite64 +//sys pread(fd int, p []byte, offset int64) (n int, err error) = pread64 +//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = pwrite64 //sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) //sys Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) //sysnb Setregid(rgid int, egid int) (err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_bsd.go b/vendor/golang.org/x/sys/unix/syscall_bsd.go index 0ce452326..9c87c5f07 100644 --- a/vendor/golang.org/x/sys/unix/syscall_bsd.go +++ b/vendor/golang.org/x/sys/unix/syscall_bsd.go @@ -325,10 +325,9 @@ func GetsockoptString(fd, level, opt int) (string, error) { //sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) //sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) -func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) { +func recvmsgRaw(fd int, p, oob []byte, flags int, rsa *RawSockaddrAny) (n, oobn int, recvflags int, err error) { var msg Msghdr - var rsa RawSockaddrAny - msg.Name = (*byte)(unsafe.Pointer(&rsa)) + msg.Name = (*byte)(unsafe.Pointer(rsa)) msg.Namelen = uint32(SizeofSockaddrAny) var iov Iovec if len(p) > 0 { @@ -352,29 +351,12 @@ func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from } oobn = int(msg.Controllen) recvflags = int(msg.Flags) - // source address is only specified if the socket is unconnected - if rsa.Addr.Family != AF_UNSPEC { - from, err = anyToSockaddr(fd, &rsa) - } return } //sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) -func Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (err error) { - _, err = SendmsgN(fd, p, oob, to, flags) - return -} - -func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error) { - var ptr unsafe.Pointer - var salen _Socklen - if to != nil { - ptr, salen, err = to.sockaddr() - if err != nil { - return 0, err - } - } +func sendmsgN(fd int, p, oob []byte, ptr unsafe.Pointer, salen _Socklen, flags int) (n int, err error) { var msg Msghdr msg.Name = (*byte)(unsafe.Pointer(ptr)) msg.Namelen = uint32(salen) @@ -571,12 +553,7 @@ func UtimesNano(path string, ts []Timespec) error { if len(ts) != 2 { return EINVAL } - // Darwin setattrlist can set nanosecond timestamps - err := setattrlistTimes(path, ts, 0) - if err != ENOSYS { - return err - } - err = utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0) + err := utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0) if err != ENOSYS { return err } @@ -596,10 +573,6 @@ func UtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) error { if len(ts) != 2 { return EINVAL } - err := setattrlistTimes(path, ts, flags) - if err != ENOSYS { - return err - } return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), flags) } diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin.go b/vendor/golang.org/x/sys/unix/syscall_darwin.go index 0eaab9131..09a25c653 100644 --- a/vendor/golang.org/x/sys/unix/syscall_darwin.go +++ b/vendor/golang.org/x/sys/unix/syscall_darwin.go @@ -141,16 +141,6 @@ func direntNamlen(buf []byte) (uint64, bool) { func PtraceAttach(pid int) (err error) { return ptrace(PT_ATTACH, pid, 0, 0) } func PtraceDetach(pid int) (err error) { return ptrace(PT_DETACH, pid, 0, 0) } -type attrList struct { - bitmapCount uint16 - _ uint16 - CommonAttr uint32 - VolAttr uint32 - DirAttr uint32 - FileAttr uint32 - Forkattr uint32 -} - //sysnb pipe(p *[2]int32) (err error) func Pipe(p []int) (err error) { @@ -282,36 +272,7 @@ func Flistxattr(fd int, dest []byte) (sz int, err error) { return flistxattr(fd, xattrPointer(dest), len(dest), 0) } -func setattrlistTimes(path string, times []Timespec, flags int) error { - _p0, err := BytePtrFromString(path) - if err != nil { - return err - } - - var attrList attrList - attrList.bitmapCount = ATTR_BIT_MAP_COUNT - attrList.CommonAttr = ATTR_CMN_MODTIME | ATTR_CMN_ACCTIME - - // order is mtime, atime: the opposite of Chtimes - attributes := [2]Timespec{times[1], times[0]} - options := 0 - if flags&AT_SYMLINK_NOFOLLOW != 0 { - options |= FSOPT_NOFOLLOW - } - return setattrlist( - _p0, - unsafe.Pointer(&attrList), - unsafe.Pointer(&attributes), - unsafe.Sizeof(attributes), - options) -} - -//sys setattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) - -func utimensat(dirfd int, path string, times *[2]Timespec, flags int) error { - // Darwin doesn't support SYS_UTIMENSAT - return ENOSYS -} +//sys utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) /* * Wrapped @@ -546,8 +507,8 @@ func SysctlKinfoProcSlice(name string, args ...int) ([]KinfoProc, error) { //sys Open(path string, mode int, perm uint32) (fd int, err error) //sys Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) //sys Pathconf(path string, name int) (val int, err error) -//sys Pread(fd int, p []byte, offset int64) (n int, err error) -//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) +//sys pread(fd int, p []byte, offset int64) (n int, err error) +//sys pwrite(fd int, p []byte, offset int64) (n int, err error) //sys read(fd int, p []byte) (n int, err error) //sys Readlink(path string, buf []byte) (n int, err error) //sys Readlinkat(dirfd int, path string, buf []byte) (n int, err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_dragonfly.go b/vendor/golang.org/x/sys/unix/syscall_dragonfly.go index 2e37c3167..c61e27498 100644 --- a/vendor/golang.org/x/sys/unix/syscall_dragonfly.go +++ b/vendor/golang.org/x/sys/unix/syscall_dragonfly.go @@ -125,12 +125,12 @@ func Pipe2(p []int, flags int) (err error) { } //sys extpread(fd int, p []byte, flags int, offset int64) (n int, err error) -func Pread(fd int, p []byte, offset int64) (n int, err error) { +func pread(fd int, p []byte, offset int64) (n int, err error) { return extpread(fd, p, 0, offset) } //sys extpwrite(fd int, p []byte, flags int, offset int64) (n int, err error) -func Pwrite(fd int, p []byte, offset int64) (n int, err error) { +func pwrite(fd int, p []byte, offset int64) (n int, err error) { return extpwrite(fd, p, 0, offset) } @@ -169,11 +169,6 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { return } -func setattrlistTimes(path string, times []Timespec, flags int) error { - // used on Darwin for UtimesNano - return ENOSYS -} - //sys ioctl(fd int, req uint, arg uintptr) (err error) //sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd.go b/vendor/golang.org/x/sys/unix/syscall_freebsd.go index 2f650ae66..6f6c510f4 100644 --- a/vendor/golang.org/x/sys/unix/syscall_freebsd.go +++ b/vendor/golang.org/x/sys/unix/syscall_freebsd.go @@ -194,11 +194,6 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { return } -func setattrlistTimes(path string, times []Timespec, flags int) error { - // used on Darwin for UtimesNano - return ENOSYS -} - //sys ioctl(fd int, req uint, arg uintptr) (err error) //sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL @@ -638,8 +633,8 @@ func PtraceSingleStep(pid int) (err error) { //sys Open(path string, mode int, perm uint32) (fd int, err error) //sys Openat(fdat int, path string, mode int, perm uint32) (fd int, err error) //sys Pathconf(path string, name int) (val int, err error) -//sys Pread(fd int, p []byte, offset int64) (n int, err error) -//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) +//sys pread(fd int, p []byte, offset int64) (n int, err error) +//sys pwrite(fd int, p []byte, offset int64) (n int, err error) //sys read(fd int, p []byte) (n int, err error) //sys Readlink(path string, buf []byte) (n int, err error) //sys Readlinkat(dirfd int, path string, buf []byte) (n int, err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux.go b/vendor/golang.org/x/sys/unix/syscall_linux.go index f432b0684..d251dafae 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux.go @@ -14,6 +14,7 @@ package unix import ( "encoding/binary" "syscall" + "time" "unsafe" ) @@ -249,6 +250,13 @@ func Getwd() (wd string, err error) { if n < 1 || n > len(buf) || buf[n-1] != 0 { return "", EINVAL } + // In some cases, Linux can return a path that starts with the + // "(unreachable)" prefix, which can potentially be a valid relative + // path. To work around that, return ENOENT if path is not absolute. + if buf[0] != '/' { + return "", ENOENT + } + return string(buf[0 : n-1]), nil } @@ -358,6 +366,8 @@ func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, return } +//sys Waitid(idType int, id int, info *Siginfo, options int, rusage *Rusage) (err error) + func Mkfifo(path string, mode uint32) error { return Mknod(path, mode|S_IFIFO, 0) } @@ -1489,10 +1499,9 @@ func KeyctlRestrictKeyring(ringid int, keyType string, restriction string) error //sys keyctlRestrictKeyringByType(cmd int, arg2 int, keyType string, restriction string) (err error) = SYS_KEYCTL //sys keyctlRestrictKeyring(cmd int, arg2 int) (err error) = SYS_KEYCTL -func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) { +func recvmsgRaw(fd int, p, oob []byte, flags int, rsa *RawSockaddrAny) (n, oobn int, recvflags int, err error) { var msg Msghdr - var rsa RawSockaddrAny - msg.Name = (*byte)(unsafe.Pointer(&rsa)) + msg.Name = (*byte)(unsafe.Pointer(rsa)) msg.Namelen = uint32(SizeofSockaddrAny) var iov Iovec if len(p) > 0 { @@ -1523,28 +1532,10 @@ func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from } oobn = int(msg.Controllen) recvflags = int(msg.Flags) - // source address is only specified if the socket is unconnected - if rsa.Addr.Family != AF_UNSPEC { - from, err = anyToSockaddr(fd, &rsa) - } - return -} - -func Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (err error) { - _, err = SendmsgN(fd, p, oob, to, flags) return } -func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error) { - var ptr unsafe.Pointer - var salen _Socklen - if to != nil { - var err error - ptr, salen, err = to.sockaddr() - if err != nil { - return 0, err - } - } +func sendmsgN(fd int, p, oob []byte, ptr unsafe.Pointer, salen _Socklen, flags int) (n int, err error) { var msg Msghdr msg.Name = (*byte)(ptr) msg.Namelen = uint32(salen) @@ -1838,6 +1829,9 @@ func Dup2(oldfd, newfd int) error { //sys Fremovexattr(fd int, attr string) (err error) //sys Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) //sys Fsync(fd int) (err error) +//sys Fsmount(fd int, flags int, mountAttrs int) (fsfd int, err error) +//sys Fsopen(fsName string, flags int) (fd int, err error) +//sys Fspick(dirfd int, pathName string, flags int) (fd int, err error) //sys Getdents(fd int, buf []byte) (n int, err error) = SYS_GETDENTS64 //sysnb Getpgid(pid int) (pgid int, err error) @@ -1868,7 +1862,9 @@ func Getpgrp() (pid int) { //sys MemfdCreate(name string, flags int) (fd int, err error) //sys Mkdirat(dirfd int, path string, mode uint32) (err error) //sys Mknodat(dirfd int, path string, mode uint32, dev int) (err error) +//sys MoveMount(fromDirfd int, fromPathName string, toDirfd int, toPathName string, flags int) (err error) //sys Nanosleep(time *Timespec, leftover *Timespec) (err error) +//sys OpenTree(dfd int, fileName string, flags uint) (r int, err error) //sys PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error) //sys PivotRoot(newroot string, putold string) (err error) = SYS_PIVOT_ROOT //sysnb Prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) = SYS_PRLIMIT64 @@ -2193,7 +2189,7 @@ func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { gid = Getgid() } - if uint32(gid) == st.Gid || isGroupMember(gid) { + if uint32(gid) == st.Gid || isGroupMember(int(st.Gid)) { fmode = (st.Mode >> 3) & 7 } else { fmode = st.Mode & 7 @@ -2308,17 +2304,63 @@ type RemoteIovec struct { //sys PidfdOpen(pid int, flags int) (fd int, err error) = SYS_PIDFD_OPEN //sys PidfdGetfd(pidfd int, targetfd int, flags int) (fd int, err error) = SYS_PIDFD_GETFD +//sys PidfdSendSignal(pidfd int, sig Signal, info *Siginfo, flags int) (err error) = SYS_PIDFD_SEND_SIGNAL //sys shmat(id int, addr uintptr, flag int) (ret uintptr, err error) //sys shmctl(id int, cmd int, buf *SysvShmDesc) (result int, err error) //sys shmdt(addr uintptr) (err error) //sys shmget(key int, size int, flag int) (id int, err error) +//sys getitimer(which int, currValue *Itimerval) (err error) +//sys setitimer(which int, newValue *Itimerval, oldValue *Itimerval) (err error) + +// MakeItimerval creates an Itimerval from interval and value durations. +func MakeItimerval(interval, value time.Duration) Itimerval { + return Itimerval{ + Interval: NsecToTimeval(interval.Nanoseconds()), + Value: NsecToTimeval(value.Nanoseconds()), + } +} + +// A value which may be passed to the which parameter for Getitimer and +// Setitimer. +type ItimerWhich int + +// Possible which values for Getitimer and Setitimer. +const ( + ItimerReal ItimerWhich = ITIMER_REAL + ItimerVirtual ItimerWhich = ITIMER_VIRTUAL + ItimerProf ItimerWhich = ITIMER_PROF +) + +// Getitimer wraps getitimer(2) to return the current value of the timer +// specified by which. +func Getitimer(which ItimerWhich) (Itimerval, error) { + var it Itimerval + if err := getitimer(int(which), &it); err != nil { + return Itimerval{}, err + } + + return it, nil +} + +// Setitimer wraps setitimer(2) to arm or disarm the timer specified by which. +// It returns the previous value of the timer. +// +// If the Itimerval argument is the zero value, the timer will be disarmed. +func Setitimer(which ItimerWhich, it Itimerval) (Itimerval, error) { + var prev Itimerval + if err := setitimer(int(which), &it, &prev); err != nil { + return Itimerval{}, err + } + + return prev, nil +} + /* * Unimplemented */ // AfsSyscall -// Alarm // ArchPrctl // Brk // ClockNanosleep @@ -2334,7 +2376,6 @@ type RemoteIovec struct { // GetMempolicy // GetRobustList // GetThreadArea -// Getitimer // Getpmsg // IoCancel // IoDestroy @@ -2412,5 +2453,4 @@ type RemoteIovec struct { // Vfork // Vhangup // Vserver -// Waitid // _Sysctl diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_386.go b/vendor/golang.org/x/sys/unix/syscall_linux_386.go index 5f757e8aa..518e476e6 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_386.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_386.go @@ -35,8 +35,8 @@ func setTimeval(sec, usec int64) Timeval { //sys Iopl(level int) (err error) //sys Lchown(path string, uid int, gid int) (err error) = SYS_LCHOWN32 //sys Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64 -//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 -//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 //sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64 //sys setfsgid(gid int) (prev int, err error) = SYS_SETFSGID32 @@ -173,14 +173,6 @@ const ( _SENDMMSG = 20 ) -func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { - fd, e := socketcall(_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0) - if e != 0 { - err = e - } - return -} - func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { fd, e := socketcall(_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) if e != 0 { diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_alarm.go b/vendor/golang.org/x/sys/unix/syscall_linux_alarm.go new file mode 100644 index 000000000..08086ac6a --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_linux_alarm.go @@ -0,0 +1,14 @@ +// Copyright 2022 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build linux && (386 || amd64 || mips || mipsle || mips64 || mipsle || ppc64 || ppc64le || ppc || s390x || sparc64) +// +build linux +// +build 386 amd64 mips mipsle mips64 mipsle ppc64 ppc64le ppc s390x sparc64 + +package unix + +// SYS_ALARM is not defined on arm or riscv, but is available for other GOARCH +// values. + +//sys Alarm(seconds uint) (remaining uint, err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go b/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go index 4299125aa..f5e9d6bef 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go @@ -28,9 +28,10 @@ func Lstat(path string, stat *Stat_t) (err error) { return Fstatat(AT_FDCWD, path, stat, AT_SYMLINK_NOFOLLOW) } +//sys MemfdSecret(flags int) (fd int, err error) //sys Pause() (err error) -//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 -//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 //sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) //sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK @@ -62,7 +63,6 @@ func Stat(path string, stat *Stat_t) (err error) { //sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) //sys Truncate(path string, length int64) (err error) //sys Ustat(dev int, ubuf *Ustat_t) (err error) -//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) //sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) //sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) //sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_arm.go b/vendor/golang.org/x/sys/unix/syscall_linux_arm.go index 79edeb9cb..c1a7778f1 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_arm.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_arm.go @@ -27,7 +27,6 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { return newoffset, nil } -//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) //sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) //sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) //sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) @@ -97,8 +96,8 @@ func Utime(path string, buf *Utimbuf) error { //sys utimes(path string, times *[2]Timeval) (err error) -//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 -//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 //sys Truncate(path string, length int64) (err error) = SYS_TRUNCATE64 //sys Ftruncate(fd int, length int64) (err error) = SYS_FTRUNCATE64 diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go b/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go index 862890de2..d83e2c657 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go @@ -22,8 +22,9 @@ import "unsafe" //sysnb getrlimit(resource int, rlim *Rlimit) (err error) //sysnb Getuid() (uid int) //sys Listen(s int, n int) (err error) -//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 -//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys MemfdSecret(flags int) (fd int, err error) +//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 //sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) //sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK @@ -66,7 +67,6 @@ func Ustat(dev int, ubuf *Ustat_t) (err error) { return ENOSYS } -//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) //sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) //sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) //sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go b/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go index 8932e34ad..98a2660b9 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go @@ -21,8 +21,8 @@ package unix //sys Lchown(path string, uid int, gid int) (err error) //sys Listen(s int, n int) (err error) //sys Pause() (err error) -//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 -//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 //sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) //sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK @@ -48,7 +48,6 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err //sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) //sys Truncate(path string, length int64) (err error) //sys Ustat(dev int, ubuf *Ustat_t) (err error) -//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) //sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) //sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) //sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go b/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go index 7821c25d9..b8a18c0ad 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go @@ -25,8 +25,8 @@ func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, //sysnb Getuid() (uid int) //sys Lchown(path string, uid int, gid int) (err error) //sys Listen(s int, n int) (err error) -//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 -//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 //sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) //sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64 @@ -41,7 +41,6 @@ func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, //sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) //sys Truncate(path string, length int64) (err error) = SYS_TRUNCATE64 //sys Ustat(dev int, ubuf *Ustat_t) (err error) -//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) //sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) //sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) //sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_ppc.go b/vendor/golang.org/x/sys/unix/syscall_linux_ppc.go index c5053a0f0..4ed9e67c6 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_ppc.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_ppc.go @@ -27,8 +27,8 @@ import ( //sys Listen(s int, n int) (err error) //sys Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64 //sys Pause() (err error) -//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 -//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 //sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) //sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT //sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64 @@ -43,7 +43,6 @@ import ( //sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64 //sys Truncate(path string, length int64) (err error) = SYS_TRUNCATE64 //sys Ustat(dev int, ubuf *Ustat_t) (err error) -//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) //sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) //sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) //sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go b/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go index 25786c421..db63d384c 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go @@ -26,8 +26,8 @@ package unix //sys Listen(s int, n int) (err error) //sys Lstat(path string, stat *Stat_t) (err error) //sys Pause() (err error) -//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 -//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 //sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) //sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK //sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT @@ -45,7 +45,6 @@ package unix //sys Statfs(path string, buf *Statfs_t) (err error) //sys Truncate(path string, length int64) (err error) //sys Ustat(dev int, ubuf *Ustat_t) (err error) -//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) //sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) //sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) //sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go b/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go index 6f9f71041..8ff7adba0 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go @@ -22,8 +22,8 @@ import "unsafe" //sysnb Getrlimit(resource int, rlim *Rlimit) (err error) //sysnb Getuid() (uid int) //sys Listen(s int, n int) (err error) -//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 -//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 //sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { @@ -65,7 +65,6 @@ func Ustat(dev int, ubuf *Ustat_t) (err error) { return ENOSYS } -//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) //sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) //sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) //sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go b/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go index 6aa59cb27..6fcf277b0 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go @@ -26,8 +26,8 @@ import ( //sys Lchown(path string, uid int, gid int) (err error) //sys Lstat(path string, stat *Stat_t) (err error) //sys Pause() (err error) -//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 -//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 //sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) //sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK //sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) @@ -145,15 +145,6 @@ const ( netSendMMsg = 20 ) -func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (int, error) { - args := [3]uintptr{uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))} - fd, _, err := Syscall(SYS_SOCKETCALL, netAccept, uintptr(unsafe.Pointer(&args)), 0) - if err != 0 { - return 0, err - } - return int(fd), nil -} - func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (int, error) { args := [4]uintptr{uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags)} fd, _, err := Syscall(SYS_SOCKETCALL, netAccept4, uintptr(unsafe.Pointer(&args)), 0) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go b/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go index bbe8d174f..02a45d9cc 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go @@ -23,8 +23,8 @@ package unix //sys Listen(s int, n int) (err error) //sys Lstat(path string, stat *Stat_t) (err error) //sys Pause() (err error) -//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 -//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 //sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) //sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK //sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) @@ -42,7 +42,6 @@ package unix //sys Statfs(path string, buf *Statfs_t) (err error) //sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) //sys Truncate(path string, length int64) (err error) -//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) //sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) //sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) //sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_netbsd.go b/vendor/golang.org/x/sys/unix/syscall_netbsd.go index 696fed496..666f0a1b3 100644 --- a/vendor/golang.org/x/sys/unix/syscall_netbsd.go +++ b/vendor/golang.org/x/sys/unix/syscall_netbsd.go @@ -163,11 +163,6 @@ func sendfile(outfd int, infd int, offset *int64, count int) (written int, err e return -1, ENOSYS } -func setattrlistTimes(path string, times []Timespec, flags int) error { - // used on Darwin for UtimesNano - return ENOSYS -} - //sys ioctl(fd int, req uint, arg uintptr) (err error) //sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL @@ -313,8 +308,8 @@ func Statvfs(path string, buf *Statvfs_t) (err error) { //sys Open(path string, mode int, perm uint32) (fd int, err error) //sys Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) //sys Pathconf(path string, name int) (val int, err error) -//sys Pread(fd int, p []byte, offset int64) (n int, err error) -//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) +//sys pread(fd int, p []byte, offset int64) (n int, err error) +//sys pwrite(fd int, p []byte, offset int64) (n int, err error) //sys read(fd int, p []byte) (n int, err error) //sys Readlink(path string, buf []byte) (n int, err error) //sys Readlinkat(dirfd int, path string, buf []byte) (n int, err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd.go b/vendor/golang.org/x/sys/unix/syscall_openbsd.go index 11b1d419d..15d637d63 100644 --- a/vendor/golang.org/x/sys/unix/syscall_openbsd.go +++ b/vendor/golang.org/x/sys/unix/syscall_openbsd.go @@ -149,11 +149,6 @@ func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { return } -func setattrlistTimes(path string, times []Timespec, flags int) error { - // used on Darwin for UtimesNano - return ENOSYS -} - //sys ioctl(fd int, req uint, arg uintptr) (err error) //sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL @@ -274,8 +269,8 @@ func Uname(uname *Utsname) error { //sys Open(path string, mode int, perm uint32) (fd int, err error) //sys Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) //sys Pathconf(path string, name int) (val int, err error) -//sys Pread(fd int, p []byte, offset int64) (n int, err error) -//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) +//sys pread(fd int, p []byte, offset int64) (n int, err error) +//sys pwrite(fd int, p []byte, offset int64) (n int, err error) //sys read(fd int, p []byte) (n int, err error) //sys Readlink(path string, buf []byte) (n int, err error) //sys Readlinkat(dirfd int, path string, buf []byte) (n int, err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_solaris.go b/vendor/golang.org/x/sys/unix/syscall_solaris.go index 5c813921e..5c2003cec 100644 --- a/vendor/golang.org/x/sys/unix/syscall_solaris.go +++ b/vendor/golang.org/x/sys/unix/syscall_solaris.go @@ -451,10 +451,9 @@ func Accept(fd int) (nfd int, sa Sockaddr, err error) { //sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) = libsocket.__xnet_recvmsg -func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) { +func recvmsgRaw(fd int, p, oob []byte, flags int, rsa *RawSockaddrAny) (n, oobn int, recvflags int, err error) { var msg Msghdr - var rsa RawSockaddrAny - msg.Name = (*byte)(unsafe.Pointer(&rsa)) + msg.Name = (*byte)(unsafe.Pointer(rsa)) msg.Namelen = uint32(SizeofSockaddrAny) var iov Iovec if len(p) > 0 { @@ -476,29 +475,12 @@ func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from return } oobn = int(msg.Accrightslen) - // source address is only specified if the socket is unconnected - if rsa.Addr.Family != AF_UNSPEC { - from, err = anyToSockaddr(fd, &rsa) - } - return -} - -func Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (err error) { - _, err = SendmsgN(fd, p, oob, to, flags) return } //sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) = libsocket.__xnet_sendmsg -func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error) { - var ptr unsafe.Pointer - var salen _Socklen - if to != nil { - ptr, salen, err = to.sockaddr() - if err != nil { - return 0, err - } - } +func sendmsgN(fd int, p, oob []byte, ptr unsafe.Pointer, salen _Socklen, flags int) (n int, err error) { var msg Msghdr msg.Name = (*byte)(unsafe.Pointer(ptr)) msg.Namelen = uint32(salen) @@ -661,8 +643,8 @@ func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err e //sys Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) //sys Pathconf(path string, name int) (val int, err error) //sys Pause() (err error) -//sys Pread(fd int, p []byte, offset int64) (n int, err error) -//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) +//sys pread(fd int, p []byte, offset int64) (n int, err error) +//sys pwrite(fd int, p []byte, offset int64) (n int, err error) //sys read(fd int, p []byte) (n int, err error) //sys Readlink(path string, buf []byte) (n int, err error) //sys Rename(from string, to string) (err error) @@ -755,8 +737,20 @@ type fileObjCookie struct { type EventPort struct { port int mu sync.Mutex - fds map[uintptr]interface{} + fds map[uintptr]*fileObjCookie paths map[string]*fileObjCookie + // The user cookie presents an interesting challenge from a memory management perspective. + // There are two paths by which we can discover that it is no longer in use: + // 1. The user calls port_dissociate before any events fire + // 2. An event fires and we return it to the user + // The tricky situation is if the event has fired in the kernel but + // the user hasn't requested/received it yet. + // If the user wants to port_dissociate before the event has been processed, + // we should handle things gracefully. To do so, we need to keep an extra + // reference to the cookie around until the event is processed + // thus the otherwise seemingly extraneous "cookies" map + // The key of this map is a pointer to the corresponding &fCookie.cookie + cookies map[*interface{}]*fileObjCookie } // PortEvent is an abstraction of the port_event C struct. @@ -780,9 +774,10 @@ func NewEventPort() (*EventPort, error) { return nil, err } e := &EventPort{ - port: port, - fds: make(map[uintptr]interface{}), - paths: make(map[string]*fileObjCookie), + port: port, + fds: make(map[uintptr]*fileObjCookie), + paths: make(map[string]*fileObjCookie), + cookies: make(map[*interface{}]*fileObjCookie), } return e, nil } @@ -797,9 +792,13 @@ func NewEventPort() (*EventPort, error) { func (e *EventPort) Close() error { e.mu.Lock() defer e.mu.Unlock() + err := Close(e.port) + if err != nil { + return err + } e.fds = nil e.paths = nil - return Close(e.port) + return nil } // PathIsWatched checks to see if path is associated with this EventPort. @@ -836,6 +835,7 @@ func (e *EventPort) AssociatePath(path string, stat os.FileInfo, events int, coo return err } e.paths[path] = fCookie + e.cookies[&fCookie.cookie] = fCookie return nil } @@ -848,11 +848,19 @@ func (e *EventPort) DissociatePath(path string) error { return fmt.Errorf("%v is not associated with this Event Port", path) } _, err := port_dissociate(e.port, PORT_SOURCE_FILE, uintptr(unsafe.Pointer(f.fobj))) - if err != nil { + // If the path is no longer associated with this event port (ENOENT) + // we should delete it from our map. We can still return ENOENT to the caller. + // But we need to save the cookie + if err != nil && err != ENOENT { return err } + if err == nil { + // dissociate was successful, safe to delete the cookie + fCookie := e.paths[path] + delete(e.cookies, &fCookie.cookie) + } delete(e.paths, path) - return nil + return err } // AssociateFd wraps calls to port_associate(3c) on file descriptors. @@ -862,12 +870,13 @@ func (e *EventPort) AssociateFd(fd uintptr, events int, cookie interface{}) erro if _, found := e.fds[fd]; found { return fmt.Errorf("%v is already associated with this Event Port", fd) } - pcookie := &cookie - _, err := port_associate(e.port, PORT_SOURCE_FD, fd, events, (*byte)(unsafe.Pointer(pcookie))) + fCookie := &fileObjCookie{nil, cookie} + _, err := port_associate(e.port, PORT_SOURCE_FD, fd, events, (*byte)(unsafe.Pointer(&fCookie.cookie))) if err != nil { return err } - e.fds[fd] = pcookie + e.fds[fd] = fCookie + e.cookies[&fCookie.cookie] = fCookie return nil } @@ -880,11 +889,16 @@ func (e *EventPort) DissociateFd(fd uintptr) error { return fmt.Errorf("%v is not associated with this Event Port", fd) } _, err := port_dissociate(e.port, PORT_SOURCE_FD, fd) - if err != nil { + if err != nil && err != ENOENT { return err } + if err == nil { + // dissociate was successful, safe to delete the cookie + fCookie := e.fds[fd] + delete(e.cookies, &fCookie.cookie) + } delete(e.fds, fd) - return nil + return err } func createFileObj(name string, stat os.FileInfo) (*fileObj, error) { @@ -912,24 +926,46 @@ func (e *EventPort) GetOne(t *Timespec) (*PortEvent, error) { return nil, err } p := new(PortEvent) - p.Events = pe.Events - p.Source = pe.Source e.mu.Lock() defer e.mu.Unlock() - switch pe.Source { + e.peIntToExt(pe, p) + return p, nil +} + +// peIntToExt converts a cgo portEvent struct into the friendlier PortEvent +// NOTE: Always call this function while holding the e.mu mutex +func (e *EventPort) peIntToExt(peInt *portEvent, peExt *PortEvent) { + peExt.Events = peInt.Events + peExt.Source = peInt.Source + cookie := (*interface{})(unsafe.Pointer(peInt.User)) + peExt.Cookie = *cookie + switch peInt.Source { case PORT_SOURCE_FD: - p.Fd = uintptr(pe.Object) - cookie := (*interface{})(unsafe.Pointer(pe.User)) - p.Cookie = *cookie - delete(e.fds, p.Fd) + delete(e.cookies, cookie) + peExt.Fd = uintptr(peInt.Object) + // Only remove the fds entry if it exists and this cookie matches + if fobj, ok := e.fds[peExt.Fd]; ok { + if &fobj.cookie == cookie { + delete(e.fds, peExt.Fd) + } + } case PORT_SOURCE_FILE: - p.fobj = (*fileObj)(unsafe.Pointer(uintptr(pe.Object))) - p.Path = BytePtrToString((*byte)(unsafe.Pointer(p.fobj.Name))) - cookie := (*interface{})(unsafe.Pointer(pe.User)) - p.Cookie = *cookie - delete(e.paths, p.Path) + if fCookie, ok := e.cookies[cookie]; ok && uintptr(unsafe.Pointer(fCookie.fobj)) == uintptr(peInt.Object) { + // Use our stashed reference rather than using unsafe on what we got back + // the unsafe version would be (*fileObj)(unsafe.Pointer(uintptr(peInt.Object))) + peExt.fobj = fCookie.fobj + } else { + panic("mismanaged memory") + } + delete(e.cookies, cookie) + peExt.Path = BytePtrToString((*byte)(unsafe.Pointer(peExt.fobj.Name))) + // Only remove the paths entry if it exists and this cookie matches + if fobj, ok := e.paths[peExt.Path]; ok { + if &fobj.cookie == cookie { + delete(e.paths, peExt.Path) + } + } } - return p, nil } // Pending wraps port_getn(3c) and returns how many events are pending. @@ -962,21 +998,7 @@ func (e *EventPort) Get(s []PortEvent, min int, timeout *Timespec) (int, error) e.mu.Lock() defer e.mu.Unlock() for i := 0; i < int(got); i++ { - s[i].Events = ps[i].Events - s[i].Source = ps[i].Source - switch ps[i].Source { - case PORT_SOURCE_FD: - s[i].Fd = uintptr(ps[i].Object) - cookie := (*interface{})(unsafe.Pointer(ps[i].User)) - s[i].Cookie = *cookie - delete(e.fds, s[i].Fd) - case PORT_SOURCE_FILE: - s[i].fobj = (*fileObj)(unsafe.Pointer(uintptr(ps[i].Object))) - s[i].Path = BytePtrToString((*byte)(unsafe.Pointer(s[i].fobj.Name))) - cookie := (*interface{})(unsafe.Pointer(ps[i].User)) - s[i].Cookie = *cookie - delete(e.paths, s[i].Path) - } + e.peIntToExt(&ps[i], &s[i]) } return int(got), err } diff --git a/vendor/golang.org/x/sys/unix/syscall_unix.go b/vendor/golang.org/x/sys/unix/syscall_unix.go index cf296a243..70508afc1 100644 --- a/vendor/golang.org/x/sys/unix/syscall_unix.go +++ b/vendor/golang.org/x/sys/unix/syscall_unix.go @@ -177,6 +177,30 @@ func Write(fd int, p []byte) (n int, err error) { return } +func Pread(fd int, p []byte, offset int64) (n int, err error) { + n, err = pread(fd, p, offset) + if raceenabled { + if n > 0 { + raceWriteRange(unsafe.Pointer(&p[0]), n) + } + if err == nil { + raceAcquire(unsafe.Pointer(&ioSync)) + } + } + return +} + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + if raceenabled { + raceReleaseMerge(unsafe.Pointer(&ioSync)) + } + n, err = pwrite(fd, p, offset) + if raceenabled && n > 0 { + raceReadRange(unsafe.Pointer(&p[0]), n) + } + return +} + // For testing: clients can set this flag to force // creation of IPv6 sockets to return EAFNOSUPPORT. var SocketDisableIPv6 bool @@ -313,6 +337,33 @@ func Recvfrom(fd int, p []byte, flags int) (n int, from Sockaddr, err error) { return } +func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) { + var rsa RawSockaddrAny + n, oobn, recvflags, err = recvmsgRaw(fd, p, oob, flags, &rsa) + // source address is only specified if the socket is unconnected + if rsa.Addr.Family != AF_UNSPEC { + from, err = anyToSockaddr(fd, &rsa) + } + return +} + +func Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (err error) { + _, err = SendmsgN(fd, p, oob, to, flags) + return +} + +func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error) { + var ptr unsafe.Pointer + var salen _Socklen + if to != nil { + ptr, salen, err = to.sockaddr() + if err != nil { + return 0, err + } + } + return sendmsgN(fd, p, oob, ptr, salen, flags) +} + func Send(s int, buf []byte, flags int) (err error) { return sendto(s, buf, flags, nil, 0) } diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux.go b/vendor/golang.org/x/sys/unix/zerrors_linux.go index bcc45d108..3de79fa25 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux.go @@ -38,7 +38,8 @@ const ( AF_KEY = 0xf AF_LLC = 0x1a AF_LOCAL = 0x1 - AF_MAX = 0x2d + AF_MAX = 0x2e + AF_MCTP = 0x2d AF_MPLS = 0x1c AF_NETBEUI = 0xd AF_NETLINK = 0x10 @@ -259,6 +260,17 @@ const ( BUS_USB = 0x3 BUS_VIRTUAL = 0x6 CAN_BCM = 0x2 + CAN_CTRLMODE_3_SAMPLES = 0x4 + CAN_CTRLMODE_BERR_REPORTING = 0x10 + CAN_CTRLMODE_CC_LEN8_DLC = 0x100 + CAN_CTRLMODE_FD = 0x20 + CAN_CTRLMODE_FD_NON_ISO = 0x80 + CAN_CTRLMODE_LISTENONLY = 0x2 + CAN_CTRLMODE_LOOPBACK = 0x1 + CAN_CTRLMODE_ONE_SHOT = 0x8 + CAN_CTRLMODE_PRESUME_ACK = 0x40 + CAN_CTRLMODE_TDC_AUTO = 0x200 + CAN_CTRLMODE_TDC_MANUAL = 0x400 CAN_EFF_FLAG = 0x80000000 CAN_EFF_ID_BITS = 0x1d CAN_EFF_MASK = 0x1fffffff @@ -336,6 +348,7 @@ const ( CAN_RTR_FLAG = 0x40000000 CAN_SFF_ID_BITS = 0xb CAN_SFF_MASK = 0x7ff + CAN_TERMINATION_DISABLED = 0x0 CAN_TP16 = 0x3 CAN_TP20 = 0x4 CAP_AUDIT_CONTROL = 0x1e @@ -380,9 +393,11 @@ const ( CAP_SYS_TIME = 0x19 CAP_SYS_TTY_CONFIG = 0x1a CAP_WAKE_ALARM = 0x23 + CEPH_SUPER_MAGIC = 0xc36400 CFLUSH = 0xf CGROUP2_SUPER_MAGIC = 0x63677270 CGROUP_SUPER_MAGIC = 0x27e0eb + CIFS_SUPER_MAGIC = 0xff534d42 CLOCK_BOOTTIME = 0x7 CLOCK_BOOTTIME_ALARM = 0x9 CLOCK_DEFAULT = 0x0 @@ -741,6 +756,7 @@ const ( ETH_P_QINQ2 = 0x9200 ETH_P_QINQ3 = 0x9300 ETH_P_RARP = 0x8035 + ETH_P_REALTEK = 0x8899 ETH_P_SCA = 0x6007 ETH_P_SLOW = 0x8809 ETH_P_SNAP = 0x5 @@ -770,6 +786,7 @@ const ( EV_SYN = 0x0 EV_VERSION = 0x10001 EXABYTE_ENABLE_NEST = 0xf0 + EXFAT_SUPER_MAGIC = 0x2011bab0 EXT2_SUPER_MAGIC = 0xef53 EXT3_SUPER_MAGIC = 0xef53 EXT4_SUPER_MAGIC = 0xef53 @@ -810,10 +827,14 @@ const ( FAN_EPIDFD = -0x2 FAN_EVENT_INFO_TYPE_DFID = 0x3 FAN_EVENT_INFO_TYPE_DFID_NAME = 0x2 + FAN_EVENT_INFO_TYPE_ERROR = 0x5 FAN_EVENT_INFO_TYPE_FID = 0x1 + FAN_EVENT_INFO_TYPE_NEW_DFID_NAME = 0xc + FAN_EVENT_INFO_TYPE_OLD_DFID_NAME = 0xa FAN_EVENT_INFO_TYPE_PIDFD = 0x4 FAN_EVENT_METADATA_LEN = 0x18 FAN_EVENT_ON_CHILD = 0x8000000 + FAN_FS_ERROR = 0x8000 FAN_MARK_ADD = 0x1 FAN_MARK_DONT_FOLLOW = 0x4 FAN_MARK_FILESYSTEM = 0x100 @@ -838,17 +859,27 @@ const ( FAN_OPEN_EXEC_PERM = 0x40000 FAN_OPEN_PERM = 0x10000 FAN_Q_OVERFLOW = 0x4000 + FAN_RENAME = 0x10000000 FAN_REPORT_DFID_NAME = 0xc00 + FAN_REPORT_DFID_NAME_TARGET = 0x1e00 FAN_REPORT_DIR_FID = 0x400 FAN_REPORT_FID = 0x200 FAN_REPORT_NAME = 0x800 FAN_REPORT_PIDFD = 0x80 + FAN_REPORT_TARGET_FID = 0x1000 FAN_REPORT_TID = 0x100 FAN_UNLIMITED_MARKS = 0x20 FAN_UNLIMITED_QUEUE = 0x10 FD_CLOEXEC = 0x1 FD_SETSIZE = 0x400 FF0 = 0x0 + FIB_RULE_DEV_DETACHED = 0x8 + FIB_RULE_FIND_SADDR = 0x10000 + FIB_RULE_IIF_DETACHED = 0x8 + FIB_RULE_INVERT = 0x2 + FIB_RULE_OIF_DETACHED = 0x10 + FIB_RULE_PERMANENT = 0x1 + FIB_RULE_UNRESOLVED = 0x4 FIDEDUPERANGE = 0xc0189436 FSCRYPT_KEY_DESCRIPTOR_SIZE = 0x8 FSCRYPT_KEY_DESC_PREFIX = "fscrypt:" @@ -911,6 +942,7 @@ const ( FS_VERITY_METADATA_TYPE_DESCRIPTOR = 0x2 FS_VERITY_METADATA_TYPE_MERKLE_TREE = 0x1 FS_VERITY_METADATA_TYPE_SIGNATURE = 0x3 + FUSE_SUPER_MAGIC = 0x65735546 FUTEXFS_SUPER_MAGIC = 0xbad1dea F_ADD_SEALS = 0x409 F_DUPFD = 0x0 @@ -1264,9 +1296,14 @@ const ( IP_XFRM_POLICY = 0x11 ISOFS_SUPER_MAGIC = 0x9660 ISTRIP = 0x20 + ITIMER_PROF = 0x2 + ITIMER_REAL = 0x0 + ITIMER_VIRTUAL = 0x1 IUTF8 = 0x4000 IXANY = 0x800 JFFS2_SUPER_MAGIC = 0x72b6 + KCMPROTO_CONNECTED = 0x0 + KCM_RECV_DISABLE = 0x1 KEXEC_ARCH_386 = 0x30000 KEXEC_ARCH_68K = 0x40000 KEXEC_ARCH_AARCH64 = 0xb70000 @@ -1474,6 +1511,7 @@ const ( MNT_DETACH = 0x2 MNT_EXPIRE = 0x4 MNT_FORCE = 0x1 + MODULE_INIT_COMPRESSED_FILE = 0x4 MODULE_INIT_IGNORE_MODVERSIONS = 0x1 MODULE_INIT_IGNORE_VERMAGIC = 0x2 MOUNT_ATTR_IDMAP = 0x100000 @@ -1827,6 +1865,11 @@ const ( PERF_MEM_BLK_DATA = 0x2 PERF_MEM_BLK_NA = 0x1 PERF_MEM_BLK_SHIFT = 0x28 + PERF_MEM_HOPS_0 = 0x1 + PERF_MEM_HOPS_1 = 0x2 + PERF_MEM_HOPS_2 = 0x3 + PERF_MEM_HOPS_3 = 0x4 + PERF_MEM_HOPS_SHIFT = 0x2b PERF_MEM_LOCK_LOCKED = 0x2 PERF_MEM_LOCK_NA = 0x1 PERF_MEM_LOCK_SHIFT = 0x18 @@ -1986,6 +2029,9 @@ const ( PR_SCHED_CORE_CREATE = 0x1 PR_SCHED_CORE_GET = 0x0 PR_SCHED_CORE_MAX = 0x4 + PR_SCHED_CORE_SCOPE_PROCESS_GROUP = 0x2 + PR_SCHED_CORE_SCOPE_THREAD = 0x0 + PR_SCHED_CORE_SCOPE_THREAD_GROUP = 0x1 PR_SCHED_CORE_SHARE_FROM = 0x3 PR_SCHED_CORE_SHARE_TO = 0x2 PR_SET_CHILD_SUBREAPER = 0x24 @@ -2026,6 +2072,8 @@ const ( PR_SET_TIMING = 0xe PR_SET_TSC = 0x1a PR_SET_UNALIGN = 0x6 + PR_SET_VMA = 0x53564d41 + PR_SET_VMA_ANON_NAME = 0x0 PR_SPEC_DISABLE = 0x4 PR_SPEC_DISABLE_NOEXEC = 0x10 PR_SPEC_ENABLE = 0x2 @@ -2109,6 +2157,10 @@ const ( PTRACE_SYSCALL_INFO_NONE = 0x0 PTRACE_SYSCALL_INFO_SECCOMP = 0x3 PTRACE_TRACEME = 0x0 + P_ALL = 0x0 + P_PGID = 0x2 + P_PID = 0x1 + P_PIDFD = 0x3 QNX4_SUPER_MAGIC = 0x2f QNX6_SUPER_MAGIC = 0x68191122 RAMFS_MAGIC = 0x858458f6 @@ -2167,12 +2219,23 @@ const ( RTCF_NAT = 0x800000 RTCF_VALVE = 0x200000 RTC_AF = 0x20 + RTC_BSM_DIRECT = 0x1 + RTC_BSM_DISABLED = 0x0 + RTC_BSM_LEVEL = 0x2 + RTC_BSM_STANDBY = 0x3 RTC_FEATURE_ALARM = 0x0 + RTC_FEATURE_ALARM_RES_2S = 0x3 RTC_FEATURE_ALARM_RES_MINUTE = 0x1 - RTC_FEATURE_CNT = 0x3 + RTC_FEATURE_BACKUP_SWITCH_MODE = 0x6 + RTC_FEATURE_CNT = 0x7 + RTC_FEATURE_CORRECTION = 0x5 RTC_FEATURE_NEED_WEEK_DAY = 0x2 + RTC_FEATURE_UPDATE_INTERRUPT = 0x4 RTC_IRQF = 0x80 RTC_MAX_FREQ = 0x2000 + RTC_PARAM_BACKUP_SWITCH_MODE = 0x2 + RTC_PARAM_CORRECTION = 0x1 + RTC_PARAM_FEATURES = 0x0 RTC_PF = 0x40 RTC_UF = 0x10 RTF_ADDRCLASSMASK = 0xf8000000 @@ -2423,6 +2486,9 @@ const ( SIOCGSTAMPNS = 0x8907 SIOCGSTAMPNS_OLD = 0x8907 SIOCGSTAMP_OLD = 0x8906 + SIOCKCMATTACH = 0x89e0 + SIOCKCMCLONE = 0x89e2 + SIOCKCMUNATTACH = 0x89e1 SIOCOUTQNSD = 0x894b SIOCPROTOPRIVATE = 0x89e0 SIOCRTMSG = 0x890d @@ -2465,6 +2531,7 @@ const ( SMART_STATUS = 0xda SMART_WRITE_LOG_SECTOR = 0xd6 SMART_WRITE_THRESHOLDS = 0xd7 + SMB2_SUPER_MAGIC = 0xfe534d42 SMB_SUPER_MAGIC = 0x517b SOCKFS_MAGIC = 0x534f434b SOCK_BUF_LOCK_MASK = 0x3 @@ -2532,6 +2599,8 @@ const ( SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1 SO_VM_SOCKETS_BUFFER_SIZE = 0x0 SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6 + SO_VM_SOCKETS_CONNECT_TIMEOUT_NEW = 0x8 + SO_VM_SOCKETS_CONNECT_TIMEOUT_OLD = 0x6 SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7 SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 SO_VM_SOCKETS_TRUSTED = 0x5 @@ -2604,7 +2673,7 @@ const ( TASKSTATS_GENL_NAME = "TASKSTATS" TASKSTATS_GENL_VERSION = 0x1 TASKSTATS_TYPE_MAX = 0x6 - TASKSTATS_VERSION = 0xa + TASKSTATS_VERSION = 0xb TCIFLUSH = 0x0 TCIOFF = 0x2 TCIOFLUSH = 0x2 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_386.go b/vendor/golang.org/x/sys/unix/zerrors_linux_386.go index 3ca40ca7f..234fd4a5d 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_386.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_386.go @@ -250,6 +250,8 @@ const ( RTC_EPOCH_SET = 0x4004700e RTC_IRQP_READ = 0x8004700b RTC_IRQP_SET = 0x4004700c + RTC_PARAM_GET = 0x40187013 + RTC_PARAM_SET = 0x40187014 RTC_PIE_OFF = 0x7006 RTC_PIE_ON = 0x7005 RTC_PLL_GET = 0x801c7011 @@ -327,6 +329,7 @@ const ( SO_RCVTIMEO = 0x14 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x14 + SO_RESERVE_MEM = 0x49 SO_REUSEADDR = 0x2 SO_REUSEPORT = 0xf SO_RXQ_OVFL = 0x28 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go index ead332091..58619b758 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go @@ -251,6 +251,8 @@ const ( RTC_EPOCH_SET = 0x4008700e RTC_IRQP_READ = 0x8008700b RTC_IRQP_SET = 0x4008700c + RTC_PARAM_GET = 0x40187013 + RTC_PARAM_SET = 0x40187014 RTC_PIE_OFF = 0x7006 RTC_PIE_ON = 0x7005 RTC_PLL_GET = 0x80207011 @@ -328,6 +330,7 @@ const ( SO_RCVTIMEO = 0x14 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x14 + SO_RESERVE_MEM = 0x49 SO_REUSEADDR = 0x2 SO_REUSEPORT = 0xf SO_RXQ_OVFL = 0x28 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go b/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go index 39bdc9455..3a64ff59d 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go @@ -257,6 +257,8 @@ const ( RTC_EPOCH_SET = 0x4004700e RTC_IRQP_READ = 0x8004700b RTC_IRQP_SET = 0x4004700c + RTC_PARAM_GET = 0x40187013 + RTC_PARAM_SET = 0x40187014 RTC_PIE_OFF = 0x7006 RTC_PIE_ON = 0x7005 RTC_PLL_GET = 0x801c7011 @@ -334,6 +336,7 @@ const ( SO_RCVTIMEO = 0x14 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x14 + SO_RESERVE_MEM = 0x49 SO_REUSEADDR = 0x2 SO_REUSEPORT = 0xf SO_RXQ_OVFL = 0x28 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go index 9aec987db..abe0b9257 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go @@ -247,6 +247,8 @@ const ( RTC_EPOCH_SET = 0x4008700e RTC_IRQP_READ = 0x8008700b RTC_IRQP_SET = 0x4008700c + RTC_PARAM_GET = 0x40187013 + RTC_PARAM_SET = 0x40187014 RTC_PIE_OFF = 0x7006 RTC_PIE_ON = 0x7005 RTC_PLL_GET = 0x80207011 @@ -324,6 +326,7 @@ const ( SO_RCVTIMEO = 0x14 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x14 + SO_RESERVE_MEM = 0x49 SO_REUSEADDR = 0x2 SO_REUSEPORT = 0xf SO_RXQ_OVFL = 0x28 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go index a8bba9491..14d7a8439 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go @@ -250,6 +250,8 @@ const ( RTC_EPOCH_SET = 0x8004700e RTC_IRQP_READ = 0x4004700b RTC_IRQP_SET = 0x8004700c + RTC_PARAM_GET = 0x80187013 + RTC_PARAM_SET = 0x80187014 RTC_PIE_OFF = 0x20007006 RTC_PIE_ON = 0x20007005 RTC_PLL_GET = 0x401c7011 @@ -327,6 +329,7 @@ const ( SO_RCVTIMEO = 0x1006 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x1006 + SO_RESERVE_MEM = 0x49 SO_REUSEADDR = 0x4 SO_REUSEPORT = 0x200 SO_RXQ_OVFL = 0x28 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go index ee9e7e202..99e7c4ac0 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go @@ -250,6 +250,8 @@ const ( RTC_EPOCH_SET = 0x8008700e RTC_IRQP_READ = 0x4008700b RTC_IRQP_SET = 0x8008700c + RTC_PARAM_GET = 0x80187013 + RTC_PARAM_SET = 0x80187014 RTC_PIE_OFF = 0x20007006 RTC_PIE_ON = 0x20007005 RTC_PLL_GET = 0x40207011 @@ -327,6 +329,7 @@ const ( SO_RCVTIMEO = 0x1006 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x1006 + SO_RESERVE_MEM = 0x49 SO_REUSEADDR = 0x4 SO_REUSEPORT = 0x200 SO_RXQ_OVFL = 0x28 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go index ba4b288a3..496364c33 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go @@ -250,6 +250,8 @@ const ( RTC_EPOCH_SET = 0x8008700e RTC_IRQP_READ = 0x4008700b RTC_IRQP_SET = 0x8008700c + RTC_PARAM_GET = 0x80187013 + RTC_PARAM_SET = 0x80187014 RTC_PIE_OFF = 0x20007006 RTC_PIE_ON = 0x20007005 RTC_PLL_GET = 0x40207011 @@ -327,6 +329,7 @@ const ( SO_RCVTIMEO = 0x1006 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x1006 + SO_RESERVE_MEM = 0x49 SO_REUSEADDR = 0x4 SO_REUSEPORT = 0x200 SO_RXQ_OVFL = 0x28 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go index bc93afc36..3e4083085 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go @@ -250,6 +250,8 @@ const ( RTC_EPOCH_SET = 0x8004700e RTC_IRQP_READ = 0x4004700b RTC_IRQP_SET = 0x8004700c + RTC_PARAM_GET = 0x80187013 + RTC_PARAM_SET = 0x80187014 RTC_PIE_OFF = 0x20007006 RTC_PIE_ON = 0x20007005 RTC_PLL_GET = 0x401c7011 @@ -327,6 +329,7 @@ const ( SO_RCVTIMEO = 0x1006 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x1006 + SO_RESERVE_MEM = 0x49 SO_REUSEADDR = 0x4 SO_REUSEPORT = 0x200 SO_RXQ_OVFL = 0x28 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go index 9295e6947..1151a7dfa 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go @@ -305,6 +305,8 @@ const ( RTC_EPOCH_SET = 0x8004700e RTC_IRQP_READ = 0x4004700b RTC_IRQP_SET = 0x8004700c + RTC_PARAM_GET = 0x80187013 + RTC_PARAM_SET = 0x80187014 RTC_PIE_OFF = 0x20007006 RTC_PIE_ON = 0x20007005 RTC_PLL_GET = 0x401c7011 @@ -382,6 +384,7 @@ const ( SO_RCVTIMEO = 0x12 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x12 + SO_RESERVE_MEM = 0x49 SO_REUSEADDR = 0x2 SO_REUSEPORT = 0xf SO_RXQ_OVFL = 0x28 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go index 1fa081c9a..ed17f249e 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go @@ -309,6 +309,8 @@ const ( RTC_EPOCH_SET = 0x8008700e RTC_IRQP_READ = 0x4008700b RTC_IRQP_SET = 0x8008700c + RTC_PARAM_GET = 0x80187013 + RTC_PARAM_SET = 0x80187014 RTC_PIE_OFF = 0x20007006 RTC_PIE_ON = 0x20007005 RTC_PLL_GET = 0x40207011 @@ -386,6 +388,7 @@ const ( SO_RCVTIMEO = 0x12 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x12 + SO_RESERVE_MEM = 0x49 SO_REUSEADDR = 0x2 SO_REUSEPORT = 0xf SO_RXQ_OVFL = 0x28 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go index 74b321149..d84a37c1a 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go @@ -309,6 +309,8 @@ const ( RTC_EPOCH_SET = 0x8008700e RTC_IRQP_READ = 0x4008700b RTC_IRQP_SET = 0x8008700c + RTC_PARAM_GET = 0x80187013 + RTC_PARAM_SET = 0x80187014 RTC_PIE_OFF = 0x20007006 RTC_PIE_ON = 0x20007005 RTC_PLL_GET = 0x40207011 @@ -386,6 +388,7 @@ const ( SO_RCVTIMEO = 0x12 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x12 + SO_RESERVE_MEM = 0x49 SO_REUSEADDR = 0x2 SO_REUSEPORT = 0xf SO_RXQ_OVFL = 0x28 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go index c91c8ac5b..5cafba83f 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go @@ -238,6 +238,8 @@ const ( RTC_EPOCH_SET = 0x4008700e RTC_IRQP_READ = 0x8008700b RTC_IRQP_SET = 0x4008700c + RTC_PARAM_GET = 0x40187013 + RTC_PARAM_SET = 0x40187014 RTC_PIE_OFF = 0x7006 RTC_PIE_ON = 0x7005 RTC_PLL_GET = 0x80207011 @@ -315,6 +317,7 @@ const ( SO_RCVTIMEO = 0x14 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x14 + SO_RESERVE_MEM = 0x49 SO_REUSEADDR = 0x2 SO_REUSEPORT = 0xf SO_RXQ_OVFL = 0x28 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go b/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go index b66bf2228..6d122da41 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go @@ -313,6 +313,8 @@ const ( RTC_EPOCH_SET = 0x4008700e RTC_IRQP_READ = 0x8008700b RTC_IRQP_SET = 0x4008700c + RTC_PARAM_GET = 0x40187013 + RTC_PARAM_SET = 0x40187014 RTC_PIE_OFF = 0x7006 RTC_PIE_ON = 0x7005 RTC_PLL_GET = 0x80207011 @@ -390,6 +392,7 @@ const ( SO_RCVTIMEO = 0x14 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x14 + SO_RESERVE_MEM = 0x49 SO_REUSEADDR = 0x2 SO_REUSEPORT = 0xf SO_RXQ_OVFL = 0x28 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go index f7fb149b0..6bd19e51d 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go @@ -304,6 +304,8 @@ const ( RTC_EPOCH_SET = 0x8008700e RTC_IRQP_READ = 0x4008700b RTC_IRQP_SET = 0x8008700c + RTC_PARAM_GET = 0x80187013 + RTC_PARAM_SET = 0x80187014 RTC_PIE_OFF = 0x20007006 RTC_PIE_ON = 0x20007005 RTC_PLL_GET = 0x40207011 @@ -381,6 +383,7 @@ const ( SO_RCVTIMEO = 0x2000 SO_RCVTIMEO_NEW = 0x44 SO_RCVTIMEO_OLD = 0x2000 + SO_RESERVE_MEM = 0x52 SO_REUSEADDR = 0x4 SO_REUSEPORT = 0x200 SO_RXQ_OVFL = 0x24 diff --git a/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go index 85e0cc386..870215d2c 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go @@ -975,7 +975,7 @@ func Pause() (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pread(fd int, p []byte, offset int64) (n int, err error) { +func pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 *byte if len(p) > 0 { _p0 = &p[0] @@ -992,7 +992,7 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pwrite(fd int, p []byte, offset int64) (n int, err error) { +func pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 *byte if len(p) > 0 { _p0 = &p[0] diff --git a/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go index f1d4a73b0..a89b0bfa5 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go @@ -931,7 +931,7 @@ func Pause() (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pread(fd int, p []byte, offset int64) (n int, err error) { +func pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 *byte if len(p) > 0 { _p0 = &p[0] @@ -946,7 +946,7 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pwrite(fd int, p []byte, offset int64) (n int, err error) { +func pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 *byte if len(p) > 0 { _p0 = &p[0] diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go index 0ae0ed4cb..879376589 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go @@ -643,17 +643,22 @@ var libc_flistxattr_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func setattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) { - _, _, e1 := syscall_syscall6(libc_setattrlist_trampoline_addr, uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0) +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall6(libc_utimensat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -var libc_setattrlist_trampoline_addr uintptr +var libc_utimensat_trampoline_addr uintptr -//go:cgo_import_dynamic libc_setattrlist setattrlist "/usr/lib/libSystem.B.dylib" +//go:cgo_import_dynamic libc_utimensat utimensat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1698,7 +1703,7 @@ var libc_pathconf_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pread(fd int, p []byte, offset int64) (n int, err error) { +func pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -1719,7 +1724,7 @@ var libc_pread_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pwrite(fd int, p []byte, offset int64) (n int, err error) { +func pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s index eac6ca806..8da90cf0e 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s @@ -228,11 +228,11 @@ TEXT libc_flistxattr_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_flistxattr_trampoline_addr(SB), RODATA, $8 DATA ·libc_flistxattr_trampoline_addr(SB)/8, $libc_flistxattr_trampoline<>(SB) -TEXT libc_setattrlist_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setattrlist(SB) +TEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_utimensat(SB) -GLOBL ·libc_setattrlist_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setattrlist_trampoline_addr(SB)/8, $libc_setattrlist_trampoline<>(SB) +GLOBL ·libc_utimensat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_utimensat_trampoline_addr(SB)/8, $libc_utimensat_trampoline<>(SB) TEXT libc_fcntl_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_fcntl(SB) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go index cf71be3ed..f47eedd5a 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go @@ -643,17 +643,22 @@ var libc_flistxattr_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func setattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) { - _, _, e1 := syscall_syscall6(libc_setattrlist_trampoline_addr, uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0) +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := syscall_syscall6(libc_utimensat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -var libc_setattrlist_trampoline_addr uintptr +var libc_utimensat_trampoline_addr uintptr -//go:cgo_import_dynamic libc_setattrlist setattrlist "/usr/lib/libSystem.B.dylib" +//go:cgo_import_dynamic libc_utimensat utimensat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT @@ -1698,7 +1703,7 @@ var libc_pathconf_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pread(fd int, p []byte, offset int64) (n int, err error) { +func pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -1719,7 +1724,7 @@ var libc_pread_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pwrite(fd int, p []byte, offset int64) (n int, err error) { +func pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s index 4ebcf2175..4d26f7d01 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s @@ -228,11 +228,11 @@ TEXT libc_flistxattr_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_flistxattr_trampoline_addr(SB), RODATA, $8 DATA ·libc_flistxattr_trampoline_addr(SB)/8, $libc_flistxattr_trampoline<>(SB) -TEXT libc_setattrlist_trampoline<>(SB),NOSPLIT,$0-0 - JMP libc_setattrlist(SB) +TEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_utimensat(SB) -GLOBL ·libc_setattrlist_trampoline_addr(SB), RODATA, $8 -DATA ·libc_setattrlist_trampoline_addr(SB)/8, $libc_setattrlist_trampoline<>(SB) +GLOBL ·libc_utimensat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_utimensat_trampoline_addr(SB)/8, $libc_utimensat_trampoline<>(SB) TEXT libc_fcntl_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_fcntl(SB) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go index 3e9bddb7b..e9d9997ee 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go @@ -1420,7 +1420,7 @@ func Pathconf(path string, name int) (val int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pread(fd int, p []byte, offset int64) (n int, err error) { +func pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -1437,7 +1437,7 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pwrite(fd int, p []byte, offset int64) (n int, err error) { +func pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go index c72a462b9..edd373b1a 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go @@ -1420,7 +1420,7 @@ func Pathconf(path string, name int) (val int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pread(fd int, p []byte, offset int64) (n int, err error) { +func pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -1437,7 +1437,7 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pwrite(fd int, p []byte, offset int64) (n int, err error) { +func pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go index 530d5df90..82e9764b2 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go @@ -1420,7 +1420,7 @@ func Pathconf(path string, name int) (val int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pread(fd int, p []byte, offset int64) (n int, err error) { +func pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -1437,7 +1437,7 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pwrite(fd int, p []byte, offset int64) (n int, err error) { +func pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go index 71e7df9e8..a6479acd1 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go @@ -1420,7 +1420,7 @@ func Pathconf(path string, name int) (val int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pread(fd int, p []byte, offset int64) (n int, err error) { +func pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -1437,7 +1437,7 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pwrite(fd int, p []byte, offset int64) (n int, err error) { +func pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux.go b/vendor/golang.org/x/sys/unix/zsyscall_linux.go index 93edda4c4..bc4a27531 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux.go @@ -231,6 +231,16 @@ func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Waitid(idType int, id int, info *Siginfo, options int, rusage *Rusage) (err error) { + _, _, e1 := Syscall6(SYS_WAITID, uintptr(idType), uintptr(id), uintptr(unsafe.Pointer(info)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) { r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) ret = int(r0) @@ -818,6 +828,49 @@ func Fsync(fd int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Fsmount(fd int, flags int, mountAttrs int) (fsfd int, err error) { + r0, _, e1 := Syscall(SYS_FSMOUNT, uintptr(fd), uintptr(flags), uintptr(mountAttrs)) + fsfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsopen(fsName string, flags int) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(fsName) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_FSOPEN, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fspick(dirfd int, pathName string, flags int) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathName) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_FSPICK, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Getdents(fd int, buf []byte) (n int, err error) { var _p0 unsafe.Pointer if len(buf) > 0 { @@ -1195,6 +1248,26 @@ func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func MoveMount(fromDirfd int, fromPathName string, toDirfd int, toPathName string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(fromPathName) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(toPathName) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MOVE_MOUNT, uintptr(fromDirfd), uintptr(unsafe.Pointer(_p0)), uintptr(toDirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Nanosleep(time *Timespec, leftover *Timespec) (err error) { _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) if e1 != 0 { @@ -1205,6 +1278,22 @@ func Nanosleep(time *Timespec, leftover *Timespec) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func OpenTree(dfd int, fileName string, flags uint) (r int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(fileName) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN_TREE, uintptr(dfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + r = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error) { r0, _, e1 := Syscall6(SYS_PERF_EVENT_OPEN, uintptr(unsafe.Pointer(attr)), uintptr(pid), uintptr(cpu), uintptr(groupFd), uintptr(flags), 0) fd = int(r0) @@ -1992,6 +2081,16 @@ func PidfdGetfd(pidfd int, targetfd int, flags int) (fd int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func PidfdSendSignal(pidfd int, sig Signal, info *Siginfo, flags int) (err error) { + _, _, e1 := Syscall6(SYS_PIDFD_SEND_SIGNAL, uintptr(pidfd), uintptr(sig), uintptr(unsafe.Pointer(info)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func shmat(id int, addr uintptr, flag int) (ret uintptr, err error) { r0, _, e1 := Syscall(SYS_SHMAT, uintptr(id), uintptr(addr), uintptr(flag)) ret = uintptr(r0) @@ -2032,3 +2131,23 @@ func shmget(key int, size int, flag int) (id int, err error) { } return } + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getitimer(which int, currValue *Itimerval) (err error) { + _, _, e1 := Syscall(SYS_GETITIMER, uintptr(which), uintptr(unsafe.Pointer(currValue)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setitimer(which int, newValue *Itimerval, oldValue *Itimerval) (err error) { + _, _, e1 := Syscall(SYS_SETITIMER, uintptr(which), uintptr(unsafe.Pointer(newValue)), uintptr(unsafe.Pointer(oldValue))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go index ff90c81e7..88af526b7 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go @@ -1,4 +1,4 @@ -// go run mksyscall.go -l32 -tags linux,386 syscall_linux.go syscall_linux_386.go +// go run mksyscall.go -l32 -tags linux,386 syscall_linux.go syscall_linux_386.go syscall_linux_alarm.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build linux && 386 @@ -200,7 +200,7 @@ func Lstat(path string, stat *Stat_t) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pread(fd int, p []byte, offset int64) (n int, err error) { +func pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -217,7 +217,7 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pwrite(fd int, p []byte, offset int64) (n int, err error) { +func pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -524,3 +524,14 @@ func utimes(path string, times *[2]Timeval) (err error) { } return } + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Alarm(seconds uint) (remaining uint, err error) { + r0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0) + remaining = uint(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go index fa7d3dbe4..2a0c4aa6a 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go @@ -1,4 +1,4 @@ -// go run mksyscall.go -tags linux,amd64 syscall_linux.go syscall_linux_amd64.go +// go run mksyscall.go -tags linux,amd64 syscall_linux.go syscall_linux_amd64.go syscall_linux_alarm.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build linux && amd64 @@ -215,6 +215,17 @@ func Listen(s int, n int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func MemfdSecret(flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_MEMFD_SECRET, uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Pause() (err error) { _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) if e1 != 0 { @@ -225,7 +236,7 @@ func Pause() (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pread(fd int, p []byte, offset int64) (n int, err error) { +func pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -242,7 +253,7 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pwrite(fd int, p []byte, offset int64) (n int, err error) { +func pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -444,17 +455,6 @@ func Ustat(dev int, ubuf *Ustat_t) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { - r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) fd = int(r0) @@ -691,3 +691,14 @@ func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, f } return } + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Alarm(seconds uint) (remaining uint, err error) { + r0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0) + remaining = uint(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go index 654f91530..4882bde3a 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go @@ -46,17 +46,6 @@ func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { - r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) fd = int(r0) @@ -549,7 +538,7 @@ func utimes(path string, times *[2]Timeval) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pread(fd int, p []byte, offset int64) (n int, err error) { +func pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -566,7 +555,7 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pwrite(fd int, p []byte, offset int64) (n int, err error) { +func pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go index e893f987f..9f8c24e43 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go @@ -180,7 +180,18 @@ func Listen(s int, n int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pread(fd int, p []byte, offset int64) (n int, err error) { +func MemfdSecret(flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_MEMFD_SECRET, uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -197,7 +208,7 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pwrite(fd int, p []byte, offset int64) (n int, err error) { +func pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -389,17 +400,6 @@ func Truncate(path string, length int64) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { - r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) fd = int(r0) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go index 6d1552885..d7d6f4244 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go @@ -1,4 +1,4 @@ -// go run mksyscall.go -b32 -arm -tags linux,mips syscall_linux.go syscall_linux_mipsx.go +// go run mksyscall.go -b32 -arm -tags linux,mips syscall_linux.go syscall_linux_mipsx.go syscall_linux_alarm.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build linux && mips @@ -150,7 +150,7 @@ func Listen(s int, n int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pread(fd int, p []byte, offset int64) (n int, err error) { +func pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -167,7 +167,7 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pwrite(fd int, p []byte, offset int64) (n int, err error) { +func pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -344,17 +344,6 @@ func Ustat(dev int, ubuf *Ustat_t) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { - r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) fd = int(r0) @@ -702,3 +691,14 @@ func setrlimit(resource int, rlim *rlimit32) (err error) { } return } + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Alarm(seconds uint) (remaining uint, err error) { + r0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0) + remaining = uint(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go index 1e20d72df..7f1f8e653 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go @@ -1,4 +1,4 @@ -// go run mksyscall.go -tags linux,mips64 syscall_linux.go syscall_linux_mips64x.go +// go run mksyscall.go -tags linux,mips64 syscall_linux.go syscall_linux_mips64x.go syscall_linux_alarm.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build linux && mips64 @@ -180,7 +180,7 @@ func Pause() (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pread(fd int, p []byte, offset int64) (n int, err error) { +func pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -197,7 +197,7 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pwrite(fd int, p []byte, offset int64) (n int, err error) { +func pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -399,17 +399,6 @@ func Ustat(dev int, ubuf *Ustat_t) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { - r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) fd = int(r0) @@ -696,3 +685,14 @@ func stat(path string, st *stat_t) (err error) { } return } + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Alarm(seconds uint) (remaining uint, err error) { + r0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0) + remaining = uint(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go index 82b5e2d9e..f933d0f51 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go @@ -180,7 +180,7 @@ func Pause() (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pread(fd int, p []byte, offset int64) (n int, err error) { +func pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -197,7 +197,7 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pwrite(fd int, p []byte, offset int64) (n int, err error) { +func pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -399,17 +399,6 @@ func Ustat(dev int, ubuf *Ustat_t) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { - r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) fd = int(r0) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go index a0440c1d4..297d0a998 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go @@ -1,4 +1,4 @@ -// go run mksyscall.go -l32 -arm -tags linux,mipsle syscall_linux.go syscall_linux_mipsx.go +// go run mksyscall.go -l32 -arm -tags linux,mipsle syscall_linux.go syscall_linux_mipsx.go syscall_linux_alarm.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build linux && mipsle @@ -150,7 +150,7 @@ func Listen(s int, n int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pread(fd int, p []byte, offset int64) (n int, err error) { +func pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -167,7 +167,7 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pwrite(fd int, p []byte, offset int64) (n int, err error) { +func pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -344,17 +344,6 @@ func Ustat(dev int, ubuf *Ustat_t) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { - r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) fd = int(r0) @@ -702,3 +691,14 @@ func setrlimit(resource int, rlim *rlimit32) (err error) { } return } + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Alarm(seconds uint) (remaining uint, err error) { + r0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0) + remaining = uint(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go index 5864b9ca6..2e32e7a44 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go @@ -1,4 +1,4 @@ -// go run mksyscall.go -b32 -tags linux,ppc syscall_linux.go syscall_linux_ppc.go +// go run mksyscall.go -b32 -tags linux,ppc syscall_linux.go syscall_linux_ppc.go syscall_linux_alarm.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build linux && ppc @@ -210,7 +210,7 @@ func Pause() (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pread(fd int, p []byte, offset int64) (n int, err error) { +func pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -227,7 +227,7 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pwrite(fd int, p []byte, offset int64) (n int, err error) { +func pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -409,17 +409,6 @@ func Ustat(dev int, ubuf *Ustat_t) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { - r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) fd = int(r0) @@ -707,3 +696,14 @@ func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, f } return } + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Alarm(seconds uint) (remaining uint, err error) { + r0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0) + remaining = uint(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go index beeb49e34..3c5317046 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go @@ -1,4 +1,4 @@ -// go run mksyscall.go -tags linux,ppc64 syscall_linux.go syscall_linux_ppc64x.go +// go run mksyscall.go -tags linux,ppc64 syscall_linux.go syscall_linux_ppc64x.go syscall_linux_alarm.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build linux && ppc64 @@ -240,7 +240,7 @@ func Pause() (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pread(fd int, p []byte, offset int64) (n int, err error) { +func pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -257,7 +257,7 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pwrite(fd int, p []byte, offset int64) (n int, err error) { +func pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -475,17 +475,6 @@ func Ustat(dev int, ubuf *Ustat_t) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { - r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) fd = int(r0) @@ -753,3 +742,14 @@ func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, f } return } + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Alarm(seconds uint) (remaining uint, err error) { + r0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0) + remaining = uint(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go index 53139b82c..a00c6744e 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go @@ -1,4 +1,4 @@ -// go run mksyscall.go -tags linux,ppc64le syscall_linux.go syscall_linux_ppc64x.go +// go run mksyscall.go -tags linux,ppc64le syscall_linux.go syscall_linux_ppc64x.go syscall_linux_alarm.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build linux && ppc64le @@ -240,7 +240,7 @@ func Pause() (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pread(fd int, p []byte, offset int64) (n int, err error) { +func pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -257,7 +257,7 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pwrite(fd int, p []byte, offset int64) (n int, err error) { +func pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -475,17 +475,6 @@ func Ustat(dev int, ubuf *Ustat_t) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { - r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) fd = int(r0) @@ -753,3 +742,14 @@ func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, f } return } + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Alarm(seconds uint) (remaining uint, err error) { + r0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0) + remaining = uint(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go index 63b393b80..a1a9bcbbd 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go @@ -180,7 +180,7 @@ func Listen(s int, n int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pread(fd int, p []byte, offset int64) (n int, err error) { +func pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -197,7 +197,7 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pwrite(fd int, p []byte, offset int64) (n int, err error) { +func pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -369,17 +369,6 @@ func Truncate(path string, length int64) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { - r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) fd = int(r0) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go index 202add37d..e0dabc602 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go @@ -1,4 +1,4 @@ -// go run mksyscall.go -tags linux,s390x syscall_linux.go syscall_linux_s390x.go +// go run mksyscall.go -tags linux,s390x syscall_linux.go syscall_linux_s390x.go syscall_linux_alarm.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build linux && s390x @@ -210,7 +210,7 @@ func Pause() (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pread(fd int, p []byte, offset int64) (n int, err error) { +func pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -227,7 +227,7 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pwrite(fd int, p []byte, offset int64) (n int, err error) { +func pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -533,3 +533,14 @@ func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, f } return } + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Alarm(seconds uint) (remaining uint, err error) { + r0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0) + remaining = uint(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go index 2ab268c34..368623c0f 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go @@ -1,4 +1,4 @@ -// go run mksyscall.go -tags linux,sparc64 syscall_linux.go syscall_linux_sparc64.go +// go run mksyscall.go -tags linux,sparc64 syscall_linux.go syscall_linux_sparc64.go syscall_linux_alarm.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build linux && sparc64 @@ -220,7 +220,7 @@ func Pause() (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pread(fd int, p []byte, offset int64) (n int, err error) { +func pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -237,7 +237,7 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pwrite(fd int, p []byte, offset int64) (n int, err error) { +func pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -455,17 +455,6 @@ func Truncate(path string, length int64) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { - r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) fd = int(r0) @@ -697,3 +686,14 @@ func utimes(path string, times *[2]Timeval) (err error) { } return } + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Alarm(seconds uint) (remaining uint, err error) { + r0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0) + remaining = uint(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go index 51d0c0742..4af561a48 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go @@ -1330,7 +1330,7 @@ func Pathconf(path string, name int) (val int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pread(fd int, p []byte, offset int64) (n int, err error) { +func pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -1347,7 +1347,7 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pwrite(fd int, p []byte, offset int64) (n int, err error) { +func pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go index df2efb6db..3b90e9448 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go @@ -1330,7 +1330,7 @@ func Pathconf(path string, name int) (val int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pread(fd int, p []byte, offset int64) (n int, err error) { +func pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -1347,7 +1347,7 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pwrite(fd int, p []byte, offset int64) (n int, err error) { +func pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go index c8536c2c9..890f4ccd1 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go @@ -1330,7 +1330,7 @@ func Pathconf(path string, name int) (val int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pread(fd int, p []byte, offset int64) (n int, err error) { +func pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -1347,7 +1347,7 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pwrite(fd int, p []byte, offset int64) (n int, err error) { +func pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go index 8b981bfc2..c79f071fc 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go @@ -1330,7 +1330,7 @@ func Pathconf(path string, name int) (val int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pread(fd int, p []byte, offset int64) (n int, err error) { +func pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -1347,7 +1347,7 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pwrite(fd int, p []byte, offset int64) (n int, err error) { +func pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go index 8f80f4ade..a057fc5d3 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go @@ -1128,7 +1128,7 @@ func Pathconf(path string, name int) (val int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pread(fd int, p []byte, offset int64) (n int, err error) { +func pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -1145,7 +1145,7 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pwrite(fd int, p []byte, offset int64) (n int, err error) { +func pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go index 3a47aca7b..04db8fa2f 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go @@ -1128,7 +1128,7 @@ func Pathconf(path string, name int) (val int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pread(fd int, p []byte, offset int64) (n int, err error) { +func pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -1145,7 +1145,7 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pwrite(fd int, p []byte, offset int64) (n int, err error) { +func pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go index 883a9b45e..69f803006 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go @@ -1128,7 +1128,7 @@ func Pathconf(path string, name int) (val int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pread(fd int, p []byte, offset int64) (n int, err error) { +func pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -1145,7 +1145,7 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pwrite(fd int, p []byte, offset int64) (n int, err error) { +func pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go index aac7fdc95..c96a50517 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go @@ -1128,7 +1128,7 @@ func Pathconf(path string, name int) (val int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pread(fd int, p []byte, offset int64) (n int, err error) { +func pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -1145,7 +1145,7 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pwrite(fd int, p []byte, offset int64) (n int, err error) { +func pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go index 877618746..016d959bc 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go @@ -1128,7 +1128,7 @@ func Pathconf(path string, name int) (val int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pread(fd int, p []byte, offset int64) (n int, err error) { +func pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) @@ -1145,7 +1145,7 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pwrite(fd int, p []byte, offset int64) (n int, err error) { +func pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { _p0 = unsafe.Pointer(&p[0]) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go index b5f926cee..d12f4fbfe 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go @@ -227,8 +227,8 @@ import ( //go:linkname procOpenat libc_openat //go:linkname procPathconf libc_pathconf //go:linkname procPause libc_pause -//go:linkname procPread libc_pread -//go:linkname procPwrite libc_pwrite +//go:linkname procpread libc_pread +//go:linkname procpwrite libc_pwrite //go:linkname procread libc_read //go:linkname procReadlink libc_readlink //go:linkname procRename libc_rename @@ -364,8 +364,8 @@ var ( procOpenat, procPathconf, procPause, - procPread, - procPwrite, + procpread, + procpwrite, procread, procReadlink, procRename, @@ -1380,12 +1380,12 @@ func Pause() (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pread(fd int, p []byte, offset int64) (n int, err error) { +func pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 *byte if len(p) > 0 { _p0 = &p[0] } - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procPread)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), uintptr(offset), 0, 0) + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procpread)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), uintptr(offset), 0, 0) n = int(r0) if e1 != 0 { err = e1 @@ -1395,12 +1395,12 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Pwrite(fd int, p []byte, offset int64) (n int, err error) { +func pwrite(fd int, p []byte, offset int64) (n int, err error) { var _p0 *byte if len(p) > 0 { _p0 = &p[0] } - r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procPwrite)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), uintptr(offset), 0, 0) + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procpwrite)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), uintptr(offset), 0, 0) n = int(r0) if e1 != 0 { err = e1 diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go index 31847d230..62192e1de 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go @@ -445,4 +445,6 @@ const ( SYS_LANDLOCK_RESTRICT_SELF = 446 SYS_MEMFD_SECRET = 447 SYS_PROCESS_MRELEASE = 448 + SYS_FUTEX_WAITV = 449 + SYS_SET_MEMPOLICY_HOME_NODE = 450 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go index 3503cbbde..490aab5d2 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go @@ -367,4 +367,6 @@ const ( SYS_LANDLOCK_RESTRICT_SELF = 446 SYS_MEMFD_SECRET = 447 SYS_PROCESS_MRELEASE = 448 + SYS_FUTEX_WAITV = 449 + SYS_SET_MEMPOLICY_HOME_NODE = 450 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go index 5ecd24bf6..aca17b6fa 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go @@ -409,4 +409,6 @@ const ( SYS_LANDLOCK_ADD_RULE = 445 SYS_LANDLOCK_RESTRICT_SELF = 446 SYS_PROCESS_MRELEASE = 448 + SYS_FUTEX_WAITV = 449 + SYS_SET_MEMPOLICY_HOME_NODE = 450 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go index 7e5c94cc7..54b4dfa54 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go @@ -312,4 +312,6 @@ const ( SYS_LANDLOCK_RESTRICT_SELF = 446 SYS_MEMFD_SECRET = 447 SYS_PROCESS_MRELEASE = 448 + SYS_FUTEX_WAITV = 449 + SYS_SET_MEMPOLICY_HOME_NODE = 450 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go index e1e2a2bf5..65a99efc2 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go @@ -429,4 +429,6 @@ const ( SYS_LANDLOCK_ADD_RULE = 4445 SYS_LANDLOCK_RESTRICT_SELF = 4446 SYS_PROCESS_MRELEASE = 4448 + SYS_FUTEX_WAITV = 4449 + SYS_SET_MEMPOLICY_HOME_NODE = 4450 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go index 7651915a3..841c8a668 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go @@ -359,4 +359,6 @@ const ( SYS_LANDLOCK_ADD_RULE = 5445 SYS_LANDLOCK_RESTRICT_SELF = 5446 SYS_PROCESS_MRELEASE = 5448 + SYS_FUTEX_WAITV = 5449 + SYS_SET_MEMPOLICY_HOME_NODE = 5450 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go index a26a2c050..e26a7c765 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go @@ -359,4 +359,6 @@ const ( SYS_LANDLOCK_ADD_RULE = 5445 SYS_LANDLOCK_RESTRICT_SELF = 5446 SYS_PROCESS_MRELEASE = 5448 + SYS_FUTEX_WAITV = 5449 + SYS_SET_MEMPOLICY_HOME_NODE = 5450 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go index fda9a6a99..26447260a 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go @@ -429,4 +429,6 @@ const ( SYS_LANDLOCK_ADD_RULE = 4445 SYS_LANDLOCK_RESTRICT_SELF = 4446 SYS_PROCESS_MRELEASE = 4448 + SYS_FUTEX_WAITV = 4449 + SYS_SET_MEMPOLICY_HOME_NODE = 4450 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go index e8496150d..26aefc186 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go @@ -436,4 +436,6 @@ const ( SYS_LANDLOCK_ADD_RULE = 445 SYS_LANDLOCK_RESTRICT_SELF = 446 SYS_PROCESS_MRELEASE = 448 + SYS_FUTEX_WAITV = 449 + SYS_SET_MEMPOLICY_HOME_NODE = 450 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go index 5ee0678a3..8d4cd9d99 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go @@ -408,4 +408,6 @@ const ( SYS_LANDLOCK_ADD_RULE = 445 SYS_LANDLOCK_RESTRICT_SELF = 446 SYS_PROCESS_MRELEASE = 448 + SYS_FUTEX_WAITV = 449 + SYS_SET_MEMPOLICY_HOME_NODE = 450 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go index 29c0f9a39..3b405d1f8 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go @@ -408,4 +408,6 @@ const ( SYS_LANDLOCK_ADD_RULE = 445 SYS_LANDLOCK_RESTRICT_SELF = 446 SYS_PROCESS_MRELEASE = 448 + SYS_FUTEX_WAITV = 449 + SYS_SET_MEMPOLICY_HOME_NODE = 450 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go index 5c9a9a3b6..c3a5af862 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go @@ -310,4 +310,6 @@ const ( SYS_LANDLOCK_ADD_RULE = 445 SYS_LANDLOCK_RESTRICT_SELF = 446 SYS_PROCESS_MRELEASE = 448 + SYS_FUTEX_WAITV = 449 + SYS_SET_MEMPOLICY_HOME_NODE = 450 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go index 913f50f98..8ffa66469 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go @@ -373,4 +373,6 @@ const ( SYS_LANDLOCK_ADD_RULE = 445 SYS_LANDLOCK_RESTRICT_SELF = 446 SYS_PROCESS_MRELEASE = 448 + SYS_FUTEX_WAITV = 449 + SYS_SET_MEMPOLICY_HOME_NODE = 450 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go index 0de03a722..6a39640e7 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go @@ -387,4 +387,6 @@ const ( SYS_LANDLOCK_ADD_RULE = 445 SYS_LANDLOCK_RESTRICT_SELF = 446 SYS_PROCESS_MRELEASE = 448 + SYS_FUTEX_WAITV = 449 + SYS_SET_MEMPOLICY_HOME_NODE = 450 ) diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux.go b/vendor/golang.org/x/sys/unix/ztypes_linux.go index f6f0d79c4..9962d26bb 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux.go @@ -24,6 +24,11 @@ type ItimerSpec struct { Value Timespec } +type Itimerval struct { + Interval Timeval + Value Timeval +} + const ( TIME_OK = 0x0 TIME_INS = 0x1 @@ -749,6 +754,25 @@ const ( AT_SYMLINK_NOFOLLOW = 0x100 AT_EACCESS = 0x200 + + OPEN_TREE_CLONE = 0x1 + + MOVE_MOUNT_F_SYMLINKS = 0x1 + MOVE_MOUNT_F_AUTOMOUNTS = 0x2 + MOVE_MOUNT_F_EMPTY_PATH = 0x4 + MOVE_MOUNT_T_SYMLINKS = 0x10 + MOVE_MOUNT_T_AUTOMOUNTS = 0x20 + MOVE_MOUNT_T_EMPTY_PATH = 0x40 + MOVE_MOUNT_SET_GROUP = 0x100 + + FSOPEN_CLOEXEC = 0x1 + + FSPICK_CLOEXEC = 0x1 + FSPICK_SYMLINK_NOFOLLOW = 0x2 + FSPICK_NO_AUTOMOUNT = 0x4 + FSPICK_EMPTY_PATH = 0x8 + + FSMOUNT_CLOEXEC = 0x1 ) type OpenHow struct { @@ -1144,7 +1168,8 @@ const ( PERF_RECORD_BPF_EVENT = 0x12 PERF_RECORD_CGROUP = 0x13 PERF_RECORD_TEXT_POKE = 0x14 - PERF_RECORD_MAX = 0x15 + PERF_RECORD_AUX_OUTPUT_HW_ID = 0x15 + PERF_RECORD_MAX = 0x16 PERF_RECORD_KSYMBOL_TYPE_UNKNOWN = 0x0 PERF_RECORD_KSYMBOL_TYPE_BPF = 0x1 PERF_RECORD_KSYMBOL_TYPE_OOL = 0x2 @@ -1784,7 +1809,8 @@ const ( const ( NF_NETDEV_INGRESS = 0x0 - NF_NETDEV_NUMHOOKS = 0x1 + NF_NETDEV_EGRESS = 0x1 + NF_NETDEV_NUMHOOKS = 0x2 ) const ( @@ -3166,7 +3192,13 @@ const ( DEVLINK_ATTR_RELOAD_ACTION_INFO = 0xa2 DEVLINK_ATTR_RELOAD_ACTION_STATS = 0xa3 DEVLINK_ATTR_PORT_PCI_SF_NUMBER = 0xa4 - DEVLINK_ATTR_MAX = 0xa9 + DEVLINK_ATTR_RATE_TYPE = 0xa5 + DEVLINK_ATTR_RATE_TX_SHARE = 0xa6 + DEVLINK_ATTR_RATE_TX_MAX = 0xa7 + DEVLINK_ATTR_RATE_NODE_NAME = 0xa8 + DEVLINK_ATTR_RATE_PARENT_NODE_NAME = 0xa9 + DEVLINK_ATTR_REGION_MAX_SNAPSHOTS = 0xaa + DEVLINK_ATTR_MAX = 0xaa DEVLINK_DPIPE_FIELD_MAPPING_TYPE_NONE = 0x0 DEVLINK_DPIPE_FIELD_MAPPING_TYPE_IFINDEX = 0x1 DEVLINK_DPIPE_MATCH_TYPE_FIELD_EXACT = 0x0 @@ -3463,7 +3495,14 @@ const ( ETHTOOL_MSG_CABLE_TEST_ACT = 0x1a ETHTOOL_MSG_CABLE_TEST_TDR_ACT = 0x1b ETHTOOL_MSG_TUNNEL_INFO_GET = 0x1c - ETHTOOL_MSG_USER_MAX = 0x21 + ETHTOOL_MSG_FEC_GET = 0x1d + ETHTOOL_MSG_FEC_SET = 0x1e + ETHTOOL_MSG_MODULE_EEPROM_GET = 0x1f + ETHTOOL_MSG_STATS_GET = 0x20 + ETHTOOL_MSG_PHC_VCLOCKS_GET = 0x21 + ETHTOOL_MSG_MODULE_GET = 0x22 + ETHTOOL_MSG_MODULE_SET = 0x23 + ETHTOOL_MSG_USER_MAX = 0x23 ETHTOOL_MSG_KERNEL_NONE = 0x0 ETHTOOL_MSG_STRSET_GET_REPLY = 0x1 ETHTOOL_MSG_LINKINFO_GET_REPLY = 0x2 @@ -3494,7 +3533,14 @@ const ( ETHTOOL_MSG_CABLE_TEST_NTF = 0x1b ETHTOOL_MSG_CABLE_TEST_TDR_NTF = 0x1c ETHTOOL_MSG_TUNNEL_INFO_GET_REPLY = 0x1d - ETHTOOL_MSG_KERNEL_MAX = 0x22 + ETHTOOL_MSG_FEC_GET_REPLY = 0x1e + ETHTOOL_MSG_FEC_NTF = 0x1f + ETHTOOL_MSG_MODULE_EEPROM_GET_REPLY = 0x20 + ETHTOOL_MSG_STATS_GET_REPLY = 0x21 + ETHTOOL_MSG_PHC_VCLOCKS_GET_REPLY = 0x22 + ETHTOOL_MSG_MODULE_GET_REPLY = 0x23 + ETHTOOL_MSG_MODULE_NTF = 0x24 + ETHTOOL_MSG_KERNEL_MAX = 0x24 ETHTOOL_A_HEADER_UNSPEC = 0x0 ETHTOOL_A_HEADER_DEV_INDEX = 0x1 ETHTOOL_A_HEADER_DEV_NAME = 0x2 @@ -3592,7 +3638,7 @@ const ( ETHTOOL_A_RINGS_RX_MINI = 0x7 ETHTOOL_A_RINGS_RX_JUMBO = 0x8 ETHTOOL_A_RINGS_TX = 0x9 - ETHTOOL_A_RINGS_MAX = 0x9 + ETHTOOL_A_RINGS_MAX = 0xa ETHTOOL_A_CHANNELS_UNSPEC = 0x0 ETHTOOL_A_CHANNELS_HEADER = 0x1 ETHTOOL_A_CHANNELS_RX_MAX = 0x2 @@ -3744,6 +3790,8 @@ const ( ETHTOOL_A_TUNNEL_INFO_MAX = 0x2 ) +const SPEED_UNKNOWN = -0x1 + type EthtoolDrvinfo struct { Cmd uint32 Driver [32]byte @@ -4043,3 +4091,1500 @@ const ( NL_POLICY_TYPE_ATTR_MASK = 0xc NL_POLICY_TYPE_ATTR_MAX = 0xc ) + +type CANBitTiming struct { + Bitrate uint32 + Sample_point uint32 + Tq uint32 + Prop_seg uint32 + Phase_seg1 uint32 + Phase_seg2 uint32 + Sjw uint32 + Brp uint32 +} + +type CANBitTimingConst struct { + Name [16]uint8 + Tseg1_min uint32 + Tseg1_max uint32 + Tseg2_min uint32 + Tseg2_max uint32 + Sjw_max uint32 + Brp_min uint32 + Brp_max uint32 + Brp_inc uint32 +} + +type CANClock struct { + Freq uint32 +} + +type CANBusErrorCounters struct { + Txerr uint16 + Rxerr uint16 +} + +type CANCtrlMode struct { + Mask uint32 + Flags uint32 +} + +type CANDeviceStats struct { + Bus_error uint32 + Error_warning uint32 + Error_passive uint32 + Bus_off uint32 + Arbitration_lost uint32 + Restarts uint32 +} + +const ( + CAN_STATE_ERROR_ACTIVE = 0x0 + CAN_STATE_ERROR_WARNING = 0x1 + CAN_STATE_ERROR_PASSIVE = 0x2 + CAN_STATE_BUS_OFF = 0x3 + CAN_STATE_STOPPED = 0x4 + CAN_STATE_SLEEPING = 0x5 + CAN_STATE_MAX = 0x6 +) + +const ( + IFLA_CAN_UNSPEC = 0x0 + IFLA_CAN_BITTIMING = 0x1 + IFLA_CAN_BITTIMING_CONST = 0x2 + IFLA_CAN_CLOCK = 0x3 + IFLA_CAN_STATE = 0x4 + IFLA_CAN_CTRLMODE = 0x5 + IFLA_CAN_RESTART_MS = 0x6 + IFLA_CAN_RESTART = 0x7 + IFLA_CAN_BERR_COUNTER = 0x8 + IFLA_CAN_DATA_BITTIMING = 0x9 + IFLA_CAN_DATA_BITTIMING_CONST = 0xa + IFLA_CAN_TERMINATION = 0xb + IFLA_CAN_TERMINATION_CONST = 0xc + IFLA_CAN_BITRATE_CONST = 0xd + IFLA_CAN_DATA_BITRATE_CONST = 0xe + IFLA_CAN_BITRATE_MAX = 0xf +) + +type KCMAttach struct { + Fd int32 + Bpf_fd int32 +} + +type KCMUnattach struct { + Fd int32 +} + +type KCMClone struct { + Fd int32 +} + +const ( + NL80211_AC_BE = 0x2 + NL80211_AC_BK = 0x3 + NL80211_ACL_POLICY_ACCEPT_UNLESS_LISTED = 0x0 + NL80211_ACL_POLICY_DENY_UNLESS_LISTED = 0x1 + NL80211_AC_VI = 0x1 + NL80211_AC_VO = 0x0 + NL80211_ATTR_4ADDR = 0x53 + NL80211_ATTR_ACK = 0x5c + NL80211_ATTR_ACK_SIGNAL = 0x107 + NL80211_ATTR_ACL_POLICY = 0xa5 + NL80211_ATTR_ADMITTED_TIME = 0xd4 + NL80211_ATTR_AIRTIME_WEIGHT = 0x112 + NL80211_ATTR_AKM_SUITES = 0x4c + NL80211_ATTR_AP_ISOLATE = 0x60 + NL80211_ATTR_AUTH_DATA = 0x9c + NL80211_ATTR_AUTH_TYPE = 0x35 + NL80211_ATTR_BANDS = 0xef + NL80211_ATTR_BEACON_HEAD = 0xe + NL80211_ATTR_BEACON_INTERVAL = 0xc + NL80211_ATTR_BEACON_TAIL = 0xf + NL80211_ATTR_BG_SCAN_PERIOD = 0x98 + NL80211_ATTR_BSS_BASIC_RATES = 0x24 + NL80211_ATTR_BSS = 0x2f + NL80211_ATTR_BSS_CTS_PROT = 0x1c + NL80211_ATTR_BSS_HT_OPMODE = 0x6d + NL80211_ATTR_BSSID = 0xf5 + NL80211_ATTR_BSS_SELECT = 0xe3 + NL80211_ATTR_BSS_SHORT_PREAMBLE = 0x1d + NL80211_ATTR_BSS_SHORT_SLOT_TIME = 0x1e + NL80211_ATTR_CENTER_FREQ1 = 0xa0 + NL80211_ATTR_CENTER_FREQ1_OFFSET = 0x123 + NL80211_ATTR_CENTER_FREQ2 = 0xa1 + NL80211_ATTR_CHANNEL_WIDTH = 0x9f + NL80211_ATTR_CH_SWITCH_BLOCK_TX = 0xb8 + NL80211_ATTR_CH_SWITCH_COUNT = 0xb7 + NL80211_ATTR_CIPHER_SUITE_GROUP = 0x4a + NL80211_ATTR_CIPHER_SUITES = 0x39 + NL80211_ATTR_CIPHER_SUITES_PAIRWISE = 0x49 + NL80211_ATTR_CNTDWN_OFFS_BEACON = 0xba + NL80211_ATTR_CNTDWN_OFFS_PRESP = 0xbb + NL80211_ATTR_COALESCE_RULE = 0xb6 + NL80211_ATTR_COALESCE_RULE_CONDITION = 0x2 + NL80211_ATTR_COALESCE_RULE_DELAY = 0x1 + NL80211_ATTR_COALESCE_RULE_MAX = 0x3 + NL80211_ATTR_COALESCE_RULE_PKT_PATTERN = 0x3 + NL80211_ATTR_CONN_FAILED_REASON = 0x9b + NL80211_ATTR_CONTROL_PORT = 0x44 + NL80211_ATTR_CONTROL_PORT_ETHERTYPE = 0x66 + NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT = 0x67 + NL80211_ATTR_CONTROL_PORT_NO_PREAUTH = 0x11e + NL80211_ATTR_CONTROL_PORT_OVER_NL80211 = 0x108 + NL80211_ATTR_COOKIE = 0x58 + NL80211_ATTR_CQM_BEACON_LOSS_EVENT = 0x8 + NL80211_ATTR_CQM = 0x5e + NL80211_ATTR_CQM_MAX = 0x9 + NL80211_ATTR_CQM_PKT_LOSS_EVENT = 0x4 + NL80211_ATTR_CQM_RSSI_HYST = 0x2 + NL80211_ATTR_CQM_RSSI_LEVEL = 0x9 + NL80211_ATTR_CQM_RSSI_THOLD = 0x1 + NL80211_ATTR_CQM_RSSI_THRESHOLD_EVENT = 0x3 + NL80211_ATTR_CQM_TXE_INTVL = 0x7 + NL80211_ATTR_CQM_TXE_PKTS = 0x6 + NL80211_ATTR_CQM_TXE_RATE = 0x5 + NL80211_ATTR_CRIT_PROT_ID = 0xb3 + NL80211_ATTR_CSA_C_OFF_BEACON = 0xba + NL80211_ATTR_CSA_C_OFF_PRESP = 0xbb + NL80211_ATTR_CSA_C_OFFSETS_TX = 0xcd + NL80211_ATTR_CSA_IES = 0xb9 + NL80211_ATTR_DEVICE_AP_SME = 0x8d + NL80211_ATTR_DFS_CAC_TIME = 0x7 + NL80211_ATTR_DFS_REGION = 0x92 + NL80211_ATTR_DISABLE_HE = 0x12d + NL80211_ATTR_DISABLE_HT = 0x93 + NL80211_ATTR_DISABLE_VHT = 0xaf + NL80211_ATTR_DISCONNECTED_BY_AP = 0x47 + NL80211_ATTR_DONT_WAIT_FOR_ACK = 0x8e + NL80211_ATTR_DTIM_PERIOD = 0xd + NL80211_ATTR_DURATION = 0x57 + NL80211_ATTR_EXT_CAPA = 0xa9 + NL80211_ATTR_EXT_CAPA_MASK = 0xaa + NL80211_ATTR_EXTERNAL_AUTH_ACTION = 0x104 + NL80211_ATTR_EXTERNAL_AUTH_SUPPORT = 0x105 + NL80211_ATTR_EXT_FEATURES = 0xd9 + NL80211_ATTR_FEATURE_FLAGS = 0x8f + NL80211_ATTR_FILS_CACHE_ID = 0xfd + NL80211_ATTR_FILS_DISCOVERY = 0x126 + NL80211_ATTR_FILS_ERP_NEXT_SEQ_NUM = 0xfb + NL80211_ATTR_FILS_ERP_REALM = 0xfa + NL80211_ATTR_FILS_ERP_RRK = 0xfc + NL80211_ATTR_FILS_ERP_USERNAME = 0xf9 + NL80211_ATTR_FILS_KEK = 0xf2 + NL80211_ATTR_FILS_NONCES = 0xf3 + NL80211_ATTR_FRAME = 0x33 + NL80211_ATTR_FRAME_MATCH = 0x5b + NL80211_ATTR_FRAME_TYPE = 0x65 + NL80211_ATTR_FREQ_AFTER = 0x3b + NL80211_ATTR_FREQ_BEFORE = 0x3a + NL80211_ATTR_FREQ_FIXED = 0x3c + NL80211_ATTR_FREQ_RANGE_END = 0x3 + NL80211_ATTR_FREQ_RANGE_MAX_BW = 0x4 + NL80211_ATTR_FREQ_RANGE_START = 0x2 + NL80211_ATTR_FTM_RESPONDER = 0x10e + NL80211_ATTR_FTM_RESPONDER_STATS = 0x10f + NL80211_ATTR_GENERATION = 0x2e + NL80211_ATTR_HANDLE_DFS = 0xbf + NL80211_ATTR_HE_6GHZ_CAPABILITY = 0x125 + NL80211_ATTR_HE_BSS_COLOR = 0x11b + NL80211_ATTR_HE_CAPABILITY = 0x10d + NL80211_ATTR_HE_OBSS_PD = 0x117 + NL80211_ATTR_HIDDEN_SSID = 0x7e + NL80211_ATTR_HT_CAPABILITY = 0x1f + NL80211_ATTR_HT_CAPABILITY_MASK = 0x94 + NL80211_ATTR_IE_ASSOC_RESP = 0x80 + NL80211_ATTR_IE = 0x2a + NL80211_ATTR_IE_PROBE_RESP = 0x7f + NL80211_ATTR_IE_RIC = 0xb2 + NL80211_ATTR_IFACE_SOCKET_OWNER = 0xcc + NL80211_ATTR_IFINDEX = 0x3 + NL80211_ATTR_IFNAME = 0x4 + NL80211_ATTR_IFTYPE_AKM_SUITES = 0x11c + NL80211_ATTR_IFTYPE = 0x5 + NL80211_ATTR_IFTYPE_EXT_CAPA = 0xe6 + NL80211_ATTR_INACTIVITY_TIMEOUT = 0x96 + NL80211_ATTR_INTERFACE_COMBINATIONS = 0x78 + NL80211_ATTR_KEY_CIPHER = 0x9 + NL80211_ATTR_KEY = 0x50 + NL80211_ATTR_KEY_DATA = 0x7 + NL80211_ATTR_KEY_DEFAULT = 0xb + NL80211_ATTR_KEY_DEFAULT_MGMT = 0x28 + NL80211_ATTR_KEY_DEFAULT_TYPES = 0x6e + NL80211_ATTR_KEY_IDX = 0x8 + NL80211_ATTR_KEYS = 0x51 + NL80211_ATTR_KEY_SEQ = 0xa + NL80211_ATTR_KEY_TYPE = 0x37 + NL80211_ATTR_LOCAL_MESH_POWER_MODE = 0xa4 + NL80211_ATTR_LOCAL_STATE_CHANGE = 0x5f + NL80211_ATTR_MAC_ACL_MAX = 0xa7 + NL80211_ATTR_MAC_ADDRS = 0xa6 + NL80211_ATTR_MAC = 0x6 + NL80211_ATTR_MAC_HINT = 0xc8 + NL80211_ATTR_MAC_MASK = 0xd7 + NL80211_ATTR_MAX_AP_ASSOC_STA = 0xca + NL80211_ATTR_MAX = 0x135 + NL80211_ATTR_MAX_CRIT_PROT_DURATION = 0xb4 + NL80211_ATTR_MAX_CSA_COUNTERS = 0xce + NL80211_ATTR_MAX_MATCH_SETS = 0x85 + NL80211_ATTR_MAX_NUM_PMKIDS = 0x56 + NL80211_ATTR_MAX_NUM_SCAN_SSIDS = 0x2b + NL80211_ATTR_MAX_NUM_SCHED_SCAN_PLANS = 0xde + NL80211_ATTR_MAX_NUM_SCHED_SCAN_SSIDS = 0x7b + NL80211_ATTR_MAX_REMAIN_ON_CHANNEL_DURATION = 0x6f + NL80211_ATTR_MAX_SCAN_IE_LEN = 0x38 + NL80211_ATTR_MAX_SCAN_PLAN_INTERVAL = 0xdf + NL80211_ATTR_MAX_SCAN_PLAN_ITERATIONS = 0xe0 + NL80211_ATTR_MAX_SCHED_SCAN_IE_LEN = 0x7c + NL80211_ATTR_MCAST_RATE = 0x6b + NL80211_ATTR_MDID = 0xb1 + NL80211_ATTR_MEASUREMENT_DURATION = 0xeb + NL80211_ATTR_MEASUREMENT_DURATION_MANDATORY = 0xec + NL80211_ATTR_MESH_CONFIG = 0x23 + NL80211_ATTR_MESH_ID = 0x18 + NL80211_ATTR_MESH_PEER_AID = 0xed + NL80211_ATTR_MESH_SETUP = 0x70 + NL80211_ATTR_MGMT_SUBTYPE = 0x29 + NL80211_ATTR_MNTR_FLAGS = 0x17 + NL80211_ATTR_MPATH_INFO = 0x1b + NL80211_ATTR_MPATH_NEXT_HOP = 0x1a + NL80211_ATTR_MULTICAST_TO_UNICAST_ENABLED = 0xf4 + NL80211_ATTR_MU_MIMO_FOLLOW_MAC_ADDR = 0xe8 + NL80211_ATTR_MU_MIMO_GROUP_DATA = 0xe7 + NL80211_ATTR_NAN_FUNC = 0xf0 + NL80211_ATTR_NAN_MASTER_PREF = 0xee + NL80211_ATTR_NAN_MATCH = 0xf1 + NL80211_ATTR_NETNS_FD = 0xdb + NL80211_ATTR_NOACK_MAP = 0x95 + NL80211_ATTR_NSS = 0x106 + NL80211_ATTR_OFFCHANNEL_TX_OK = 0x6c + NL80211_ATTR_OPER_CLASS = 0xd6 + NL80211_ATTR_OPMODE_NOTIF = 0xc2 + NL80211_ATTR_P2P_CTWINDOW = 0xa2 + NL80211_ATTR_P2P_OPPPS = 0xa3 + NL80211_ATTR_PAD = 0xe5 + NL80211_ATTR_PBSS = 0xe2 + NL80211_ATTR_PEER_AID = 0xb5 + NL80211_ATTR_PEER_MEASUREMENTS = 0x111 + NL80211_ATTR_PID = 0x52 + NL80211_ATTR_PMK = 0xfe + NL80211_ATTR_PMKID = 0x55 + NL80211_ATTR_PMK_LIFETIME = 0x11f + NL80211_ATTR_PMKR0_NAME = 0x102 + NL80211_ATTR_PMK_REAUTH_THRESHOLD = 0x120 + NL80211_ATTR_PMKSA_CANDIDATE = 0x86 + NL80211_ATTR_PORT_AUTHORIZED = 0x103 + NL80211_ATTR_POWER_RULE_MAX_ANT_GAIN = 0x5 + NL80211_ATTR_POWER_RULE_MAX_EIRP = 0x6 + NL80211_ATTR_PREV_BSSID = 0x4f + NL80211_ATTR_PRIVACY = 0x46 + NL80211_ATTR_PROBE_RESP = 0x91 + NL80211_ATTR_PROBE_RESP_OFFLOAD = 0x90 + NL80211_ATTR_PROTOCOL_FEATURES = 0xad + NL80211_ATTR_PS_STATE = 0x5d + NL80211_ATTR_QOS_MAP = 0xc7 + NL80211_ATTR_RADAR_EVENT = 0xa8 + NL80211_ATTR_REASON_CODE = 0x36 + NL80211_ATTR_RECEIVE_MULTICAST = 0x121 + NL80211_ATTR_RECONNECT_REQUESTED = 0x12b + NL80211_ATTR_REG_ALPHA2 = 0x21 + NL80211_ATTR_REG_INDOOR = 0xdd + NL80211_ATTR_REG_INITIATOR = 0x30 + NL80211_ATTR_REG_RULE_FLAGS = 0x1 + NL80211_ATTR_REG_RULES = 0x22 + NL80211_ATTR_REG_TYPE = 0x31 + NL80211_ATTR_REKEY_DATA = 0x7a + NL80211_ATTR_REQ_IE = 0x4d + NL80211_ATTR_RESP_IE = 0x4e + NL80211_ATTR_ROAM_SUPPORT = 0x83 + NL80211_ATTR_RX_FRAME_TYPES = 0x64 + NL80211_ATTR_RXMGMT_FLAGS = 0xbc + NL80211_ATTR_RX_SIGNAL_DBM = 0x97 + NL80211_ATTR_S1G_CAPABILITY = 0x128 + NL80211_ATTR_S1G_CAPABILITY_MASK = 0x129 + NL80211_ATTR_SAE_DATA = 0x9c + NL80211_ATTR_SAE_PASSWORD = 0x115 + NL80211_ATTR_SAE_PWE = 0x12a + NL80211_ATTR_SAR_SPEC = 0x12c + NL80211_ATTR_SCAN_FLAGS = 0x9e + NL80211_ATTR_SCAN_FREQ_KHZ = 0x124 + NL80211_ATTR_SCAN_FREQUENCIES = 0x2c + NL80211_ATTR_SCAN_GENERATION = 0x2e + NL80211_ATTR_SCAN_SSIDS = 0x2d + NL80211_ATTR_SCAN_START_TIME_TSF_BSSID = 0xea + NL80211_ATTR_SCAN_START_TIME_TSF = 0xe9 + NL80211_ATTR_SCAN_SUPP_RATES = 0x7d + NL80211_ATTR_SCHED_SCAN_DELAY = 0xdc + NL80211_ATTR_SCHED_SCAN_INTERVAL = 0x77 + NL80211_ATTR_SCHED_SCAN_MATCH = 0x84 + NL80211_ATTR_SCHED_SCAN_MATCH_SSID = 0x1 + NL80211_ATTR_SCHED_SCAN_MAX_REQS = 0x100 + NL80211_ATTR_SCHED_SCAN_MULTI = 0xff + NL80211_ATTR_SCHED_SCAN_PLANS = 0xe1 + NL80211_ATTR_SCHED_SCAN_RELATIVE_RSSI = 0xf6 + NL80211_ATTR_SCHED_SCAN_RSSI_ADJUST = 0xf7 + NL80211_ATTR_SMPS_MODE = 0xd5 + NL80211_ATTR_SOCKET_OWNER = 0xcc + NL80211_ATTR_SOFTWARE_IFTYPES = 0x79 + NL80211_ATTR_SPLIT_WIPHY_DUMP = 0xae + NL80211_ATTR_SSID = 0x34 + NL80211_ATTR_STA_AID = 0x10 + NL80211_ATTR_STA_CAPABILITY = 0xab + NL80211_ATTR_STA_EXT_CAPABILITY = 0xac + NL80211_ATTR_STA_FLAGS2 = 0x43 + NL80211_ATTR_STA_FLAGS = 0x11 + NL80211_ATTR_STA_INFO = 0x15 + NL80211_ATTR_STA_LISTEN_INTERVAL = 0x12 + NL80211_ATTR_STA_PLINK_ACTION = 0x19 + NL80211_ATTR_STA_PLINK_STATE = 0x74 + NL80211_ATTR_STA_SUPPORTED_CHANNELS = 0xbd + NL80211_ATTR_STA_SUPPORTED_OPER_CLASSES = 0xbe + NL80211_ATTR_STA_SUPPORTED_RATES = 0x13 + NL80211_ATTR_STA_SUPPORT_P2P_PS = 0xe4 + NL80211_ATTR_STATUS_CODE = 0x48 + NL80211_ATTR_STA_TX_POWER = 0x114 + NL80211_ATTR_STA_TX_POWER_SETTING = 0x113 + NL80211_ATTR_STA_VLAN = 0x14 + NL80211_ATTR_STA_WME = 0x81 + NL80211_ATTR_SUPPORT_10_MHZ = 0xc1 + NL80211_ATTR_SUPPORT_5_MHZ = 0xc0 + NL80211_ATTR_SUPPORT_AP_UAPSD = 0x82 + NL80211_ATTR_SUPPORTED_COMMANDS = 0x32 + NL80211_ATTR_SUPPORTED_IFTYPES = 0x20 + NL80211_ATTR_SUPPORT_IBSS_RSN = 0x68 + NL80211_ATTR_SUPPORT_MESH_AUTH = 0x73 + NL80211_ATTR_SURVEY_INFO = 0x54 + NL80211_ATTR_SURVEY_RADIO_STATS = 0xda + NL80211_ATTR_TDLS_ACTION = 0x88 + NL80211_ATTR_TDLS_DIALOG_TOKEN = 0x89 + NL80211_ATTR_TDLS_EXTERNAL_SETUP = 0x8c + NL80211_ATTR_TDLS_INITIATOR = 0xcf + NL80211_ATTR_TDLS_OPERATION = 0x8a + NL80211_ATTR_TDLS_PEER_CAPABILITY = 0xcb + NL80211_ATTR_TDLS_SUPPORT = 0x8b + NL80211_ATTR_TESTDATA = 0x45 + NL80211_ATTR_TID_CONFIG = 0x11d + NL80211_ATTR_TIMED_OUT = 0x41 + NL80211_ATTR_TIMEOUT = 0x110 + NL80211_ATTR_TIMEOUT_REASON = 0xf8 + NL80211_ATTR_TSID = 0xd2 + NL80211_ATTR_TWT_RESPONDER = 0x116 + NL80211_ATTR_TX_FRAME_TYPES = 0x63 + NL80211_ATTR_TX_NO_CCK_RATE = 0x87 + NL80211_ATTR_TXQ_LIMIT = 0x10a + NL80211_ATTR_TXQ_MEMORY_LIMIT = 0x10b + NL80211_ATTR_TXQ_QUANTUM = 0x10c + NL80211_ATTR_TXQ_STATS = 0x109 + NL80211_ATTR_TX_RATES = 0x5a + NL80211_ATTR_UNSOL_BCAST_PROBE_RESP = 0x127 + NL80211_ATTR_UNSPEC = 0x0 + NL80211_ATTR_USE_MFP = 0x42 + NL80211_ATTR_USER_PRIO = 0xd3 + NL80211_ATTR_USER_REG_HINT_TYPE = 0x9a + NL80211_ATTR_USE_RRM = 0xd0 + NL80211_ATTR_VENDOR_DATA = 0xc5 + NL80211_ATTR_VENDOR_EVENTS = 0xc6 + NL80211_ATTR_VENDOR_ID = 0xc3 + NL80211_ATTR_VENDOR_SUBCMD = 0xc4 + NL80211_ATTR_VHT_CAPABILITY = 0x9d + NL80211_ATTR_VHT_CAPABILITY_MASK = 0xb0 + NL80211_ATTR_VLAN_ID = 0x11a + NL80211_ATTR_WANT_1X_4WAY_HS = 0x101 + NL80211_ATTR_WDEV = 0x99 + NL80211_ATTR_WIPHY_ANTENNA_AVAIL_RX = 0x72 + NL80211_ATTR_WIPHY_ANTENNA_AVAIL_TX = 0x71 + NL80211_ATTR_WIPHY_ANTENNA_RX = 0x6a + NL80211_ATTR_WIPHY_ANTENNA_TX = 0x69 + NL80211_ATTR_WIPHY_BANDS = 0x16 + NL80211_ATTR_WIPHY_CHANNEL_TYPE = 0x27 + NL80211_ATTR_WIPHY = 0x1 + NL80211_ATTR_WIPHY_COVERAGE_CLASS = 0x59 + NL80211_ATTR_WIPHY_DYN_ACK = 0xd1 + NL80211_ATTR_WIPHY_EDMG_BW_CONFIG = 0x119 + NL80211_ATTR_WIPHY_EDMG_CHANNELS = 0x118 + NL80211_ATTR_WIPHY_FRAG_THRESHOLD = 0x3f + NL80211_ATTR_WIPHY_FREQ = 0x26 + NL80211_ATTR_WIPHY_FREQ_HINT = 0xc9 + NL80211_ATTR_WIPHY_FREQ_OFFSET = 0x122 + NL80211_ATTR_WIPHY_NAME = 0x2 + NL80211_ATTR_WIPHY_RETRY_LONG = 0x3e + NL80211_ATTR_WIPHY_RETRY_SHORT = 0x3d + NL80211_ATTR_WIPHY_RTS_THRESHOLD = 0x40 + NL80211_ATTR_WIPHY_SELF_MANAGED_REG = 0xd8 + NL80211_ATTR_WIPHY_TX_POWER_LEVEL = 0x62 + NL80211_ATTR_WIPHY_TX_POWER_SETTING = 0x61 + NL80211_ATTR_WIPHY_TXQ_PARAMS = 0x25 + NL80211_ATTR_WOWLAN_TRIGGERS = 0x75 + NL80211_ATTR_WOWLAN_TRIGGERS_SUPPORTED = 0x76 + NL80211_ATTR_WPA_VERSIONS = 0x4b + NL80211_AUTHTYPE_AUTOMATIC = 0x8 + NL80211_AUTHTYPE_FILS_PK = 0x7 + NL80211_AUTHTYPE_FILS_SK = 0x5 + NL80211_AUTHTYPE_FILS_SK_PFS = 0x6 + NL80211_AUTHTYPE_FT = 0x2 + NL80211_AUTHTYPE_MAX = 0x7 + NL80211_AUTHTYPE_NETWORK_EAP = 0x3 + NL80211_AUTHTYPE_OPEN_SYSTEM = 0x0 + NL80211_AUTHTYPE_SAE = 0x4 + NL80211_AUTHTYPE_SHARED_KEY = 0x1 + NL80211_BAND_2GHZ = 0x0 + NL80211_BAND_5GHZ = 0x1 + NL80211_BAND_60GHZ = 0x2 + NL80211_BAND_6GHZ = 0x3 + NL80211_BAND_ATTR_EDMG_BW_CONFIG = 0xb + NL80211_BAND_ATTR_EDMG_CHANNELS = 0xa + NL80211_BAND_ATTR_FREQS = 0x1 + NL80211_BAND_ATTR_HT_AMPDU_DENSITY = 0x6 + NL80211_BAND_ATTR_HT_AMPDU_FACTOR = 0x5 + NL80211_BAND_ATTR_HT_CAPA = 0x4 + NL80211_BAND_ATTR_HT_MCS_SET = 0x3 + NL80211_BAND_ATTR_IFTYPE_DATA = 0x9 + NL80211_BAND_ATTR_MAX = 0xb + NL80211_BAND_ATTR_RATES = 0x2 + NL80211_BAND_ATTR_VHT_CAPA = 0x8 + NL80211_BAND_ATTR_VHT_MCS_SET = 0x7 + NL80211_BAND_IFTYPE_ATTR_HE_6GHZ_CAPA = 0x6 + NL80211_BAND_IFTYPE_ATTR_HE_CAP_MAC = 0x2 + NL80211_BAND_IFTYPE_ATTR_HE_CAP_MCS_SET = 0x4 + NL80211_BAND_IFTYPE_ATTR_HE_CAP_PHY = 0x3 + NL80211_BAND_IFTYPE_ATTR_HE_CAP_PPE = 0x5 + NL80211_BAND_IFTYPE_ATTR_IFTYPES = 0x1 + NL80211_BAND_IFTYPE_ATTR_MAX = 0x7 + NL80211_BAND_S1GHZ = 0x4 + NL80211_BITRATE_ATTR_2GHZ_SHORTPREAMBLE = 0x2 + NL80211_BITRATE_ATTR_MAX = 0x2 + NL80211_BITRATE_ATTR_RATE = 0x1 + NL80211_BSS_BEACON_IES = 0xb + NL80211_BSS_BEACON_INTERVAL = 0x4 + NL80211_BSS_BEACON_TSF = 0xd + NL80211_BSS_BSSID = 0x1 + NL80211_BSS_CAPABILITY = 0x5 + NL80211_BSS_CHAIN_SIGNAL = 0x13 + NL80211_BSS_CHAN_WIDTH_10 = 0x1 + NL80211_BSS_CHAN_WIDTH_1 = 0x3 + NL80211_BSS_CHAN_WIDTH_20 = 0x0 + NL80211_BSS_CHAN_WIDTH_2 = 0x4 + NL80211_BSS_CHAN_WIDTH_5 = 0x2 + NL80211_BSS_CHAN_WIDTH = 0xc + NL80211_BSS_FREQUENCY = 0x2 + NL80211_BSS_FREQUENCY_OFFSET = 0x14 + NL80211_BSS_INFORMATION_ELEMENTS = 0x6 + NL80211_BSS_LAST_SEEN_BOOTTIME = 0xf + NL80211_BSS_MAX = 0x14 + NL80211_BSS_PAD = 0x10 + NL80211_BSS_PARENT_BSSID = 0x12 + NL80211_BSS_PARENT_TSF = 0x11 + NL80211_BSS_PRESP_DATA = 0xe + NL80211_BSS_SEEN_MS_AGO = 0xa + NL80211_BSS_SELECT_ATTR_BAND_PREF = 0x2 + NL80211_BSS_SELECT_ATTR_MAX = 0x3 + NL80211_BSS_SELECT_ATTR_RSSI_ADJUST = 0x3 + NL80211_BSS_SELECT_ATTR_RSSI = 0x1 + NL80211_BSS_SIGNAL_MBM = 0x7 + NL80211_BSS_SIGNAL_UNSPEC = 0x8 + NL80211_BSS_STATUS_ASSOCIATED = 0x1 + NL80211_BSS_STATUS_AUTHENTICATED = 0x0 + NL80211_BSS_STATUS = 0x9 + NL80211_BSS_STATUS_IBSS_JOINED = 0x2 + NL80211_BSS_TSF = 0x3 + NL80211_CHAN_HT20 = 0x1 + NL80211_CHAN_HT40MINUS = 0x2 + NL80211_CHAN_HT40PLUS = 0x3 + NL80211_CHAN_NO_HT = 0x0 + NL80211_CHAN_WIDTH_10 = 0x7 + NL80211_CHAN_WIDTH_160 = 0x5 + NL80211_CHAN_WIDTH_16 = 0xc + NL80211_CHAN_WIDTH_1 = 0x8 + NL80211_CHAN_WIDTH_20 = 0x1 + NL80211_CHAN_WIDTH_20_NOHT = 0x0 + NL80211_CHAN_WIDTH_2 = 0x9 + NL80211_CHAN_WIDTH_40 = 0x2 + NL80211_CHAN_WIDTH_4 = 0xa + NL80211_CHAN_WIDTH_5 = 0x6 + NL80211_CHAN_WIDTH_80 = 0x3 + NL80211_CHAN_WIDTH_80P80 = 0x4 + NL80211_CHAN_WIDTH_8 = 0xb + NL80211_CMD_ABORT_SCAN = 0x72 + NL80211_CMD_ACTION = 0x3b + NL80211_CMD_ACTION_TX_STATUS = 0x3c + NL80211_CMD_ADD_NAN_FUNCTION = 0x75 + NL80211_CMD_ADD_TX_TS = 0x69 + NL80211_CMD_ASSOCIATE = 0x26 + NL80211_CMD_AUTHENTICATE = 0x25 + NL80211_CMD_CANCEL_REMAIN_ON_CHANNEL = 0x38 + NL80211_CMD_CHANGE_NAN_CONFIG = 0x77 + NL80211_CMD_CHANNEL_SWITCH = 0x66 + NL80211_CMD_CH_SWITCH_NOTIFY = 0x58 + NL80211_CMD_CH_SWITCH_STARTED_NOTIFY = 0x6e + NL80211_CMD_CONNECT = 0x2e + NL80211_CMD_CONN_FAILED = 0x5b + NL80211_CMD_CONTROL_PORT_FRAME = 0x81 + NL80211_CMD_CONTROL_PORT_FRAME_TX_STATUS = 0x8b + NL80211_CMD_CRIT_PROTOCOL_START = 0x62 + NL80211_CMD_CRIT_PROTOCOL_STOP = 0x63 + NL80211_CMD_DEAUTHENTICATE = 0x27 + NL80211_CMD_DEL_BEACON = 0x10 + NL80211_CMD_DEL_INTERFACE = 0x8 + NL80211_CMD_DEL_KEY = 0xc + NL80211_CMD_DEL_MPATH = 0x18 + NL80211_CMD_DEL_NAN_FUNCTION = 0x76 + NL80211_CMD_DEL_PMK = 0x7c + NL80211_CMD_DEL_PMKSA = 0x35 + NL80211_CMD_DEL_STATION = 0x14 + NL80211_CMD_DEL_TX_TS = 0x6a + NL80211_CMD_DEL_WIPHY = 0x4 + NL80211_CMD_DISASSOCIATE = 0x28 + NL80211_CMD_DISCONNECT = 0x30 + NL80211_CMD_EXTERNAL_AUTH = 0x7f + NL80211_CMD_FLUSH_PMKSA = 0x36 + NL80211_CMD_FRAME = 0x3b + NL80211_CMD_FRAME_TX_STATUS = 0x3c + NL80211_CMD_FRAME_WAIT_CANCEL = 0x43 + NL80211_CMD_FT_EVENT = 0x61 + NL80211_CMD_GET_BEACON = 0xd + NL80211_CMD_GET_COALESCE = 0x64 + NL80211_CMD_GET_FTM_RESPONDER_STATS = 0x82 + NL80211_CMD_GET_INTERFACE = 0x5 + NL80211_CMD_GET_KEY = 0x9 + NL80211_CMD_GET_MESH_CONFIG = 0x1c + NL80211_CMD_GET_MESH_PARAMS = 0x1c + NL80211_CMD_GET_MPATH = 0x15 + NL80211_CMD_GET_MPP = 0x6b + NL80211_CMD_GET_POWER_SAVE = 0x3e + NL80211_CMD_GET_PROTOCOL_FEATURES = 0x5f + NL80211_CMD_GET_REG = 0x1f + NL80211_CMD_GET_SCAN = 0x20 + NL80211_CMD_GET_STATION = 0x11 + NL80211_CMD_GET_SURVEY = 0x32 + NL80211_CMD_GET_WIPHY = 0x1 + NL80211_CMD_GET_WOWLAN = 0x49 + NL80211_CMD_JOIN_IBSS = 0x2b + NL80211_CMD_JOIN_MESH = 0x44 + NL80211_CMD_JOIN_OCB = 0x6c + NL80211_CMD_LEAVE_IBSS = 0x2c + NL80211_CMD_LEAVE_MESH = 0x45 + NL80211_CMD_LEAVE_OCB = 0x6d + NL80211_CMD_MAX = 0x93 + NL80211_CMD_MICHAEL_MIC_FAILURE = 0x29 + NL80211_CMD_NAN_MATCH = 0x78 + NL80211_CMD_NEW_BEACON = 0xf + NL80211_CMD_NEW_INTERFACE = 0x7 + NL80211_CMD_NEW_KEY = 0xb + NL80211_CMD_NEW_MPATH = 0x17 + NL80211_CMD_NEW_PEER_CANDIDATE = 0x48 + NL80211_CMD_NEW_SCAN_RESULTS = 0x22 + NL80211_CMD_NEW_STATION = 0x13 + NL80211_CMD_NEW_SURVEY_RESULTS = 0x33 + NL80211_CMD_NEW_WIPHY = 0x3 + NL80211_CMD_NOTIFY_CQM = 0x40 + NL80211_CMD_NOTIFY_RADAR = 0x86 + NL80211_CMD_PEER_MEASUREMENT_COMPLETE = 0x85 + NL80211_CMD_PEER_MEASUREMENT_RESULT = 0x84 + NL80211_CMD_PEER_MEASUREMENT_START = 0x83 + NL80211_CMD_PMKSA_CANDIDATE = 0x50 + NL80211_CMD_PORT_AUTHORIZED = 0x7d + NL80211_CMD_PROBE_CLIENT = 0x54 + NL80211_CMD_PROBE_MESH_LINK = 0x88 + NL80211_CMD_RADAR_DETECT = 0x5e + NL80211_CMD_REG_BEACON_HINT = 0x2a + NL80211_CMD_REG_CHANGE = 0x24 + NL80211_CMD_REGISTER_ACTION = 0x3a + NL80211_CMD_REGISTER_BEACONS = 0x55 + NL80211_CMD_REGISTER_FRAME = 0x3a + NL80211_CMD_RELOAD_REGDB = 0x7e + NL80211_CMD_REMAIN_ON_CHANNEL = 0x37 + NL80211_CMD_REQ_SET_REG = 0x1b + NL80211_CMD_ROAM = 0x2f + NL80211_CMD_SCAN_ABORTED = 0x23 + NL80211_CMD_SCHED_SCAN_RESULTS = 0x4d + NL80211_CMD_SCHED_SCAN_STOPPED = 0x4e + NL80211_CMD_SET_BEACON = 0xe + NL80211_CMD_SET_BSS = 0x19 + NL80211_CMD_SET_CHANNEL = 0x41 + NL80211_CMD_SET_COALESCE = 0x65 + NL80211_CMD_SET_CQM = 0x3f + NL80211_CMD_SET_INTERFACE = 0x6 + NL80211_CMD_SET_KEY = 0xa + NL80211_CMD_SET_MAC_ACL = 0x5d + NL80211_CMD_SET_MCAST_RATE = 0x5c + NL80211_CMD_SET_MESH_CONFIG = 0x1d + NL80211_CMD_SET_MESH_PARAMS = 0x1d + NL80211_CMD_SET_MGMT_EXTRA_IE = 0x1e + NL80211_CMD_SET_MPATH = 0x16 + NL80211_CMD_SET_MULTICAST_TO_UNICAST = 0x79 + NL80211_CMD_SET_NOACK_MAP = 0x57 + NL80211_CMD_SET_PMK = 0x7b + NL80211_CMD_SET_PMKSA = 0x34 + NL80211_CMD_SET_POWER_SAVE = 0x3d + NL80211_CMD_SET_QOS_MAP = 0x68 + NL80211_CMD_SET_REG = 0x1a + NL80211_CMD_SET_REKEY_OFFLOAD = 0x4f + NL80211_CMD_SET_SAR_SPECS = 0x8c + NL80211_CMD_SET_STATION = 0x12 + NL80211_CMD_SET_TID_CONFIG = 0x89 + NL80211_CMD_SET_TX_BITRATE_MASK = 0x39 + NL80211_CMD_SET_WDS_PEER = 0x42 + NL80211_CMD_SET_WIPHY = 0x2 + NL80211_CMD_SET_WIPHY_NETNS = 0x31 + NL80211_CMD_SET_WOWLAN = 0x4a + NL80211_CMD_STA_OPMODE_CHANGED = 0x80 + NL80211_CMD_START_AP = 0xf + NL80211_CMD_START_NAN = 0x73 + NL80211_CMD_START_P2P_DEVICE = 0x59 + NL80211_CMD_START_SCHED_SCAN = 0x4b + NL80211_CMD_STOP_AP = 0x10 + NL80211_CMD_STOP_NAN = 0x74 + NL80211_CMD_STOP_P2P_DEVICE = 0x5a + NL80211_CMD_STOP_SCHED_SCAN = 0x4c + NL80211_CMD_TDLS_CANCEL_CHANNEL_SWITCH = 0x70 + NL80211_CMD_TDLS_CHANNEL_SWITCH = 0x6f + NL80211_CMD_TDLS_MGMT = 0x52 + NL80211_CMD_TDLS_OPER = 0x51 + NL80211_CMD_TESTMODE = 0x2d + NL80211_CMD_TRIGGER_SCAN = 0x21 + NL80211_CMD_UNEXPECTED_4ADDR_FRAME = 0x56 + NL80211_CMD_UNEXPECTED_FRAME = 0x53 + NL80211_CMD_UNPROT_BEACON = 0x8a + NL80211_CMD_UNPROT_DEAUTHENTICATE = 0x46 + NL80211_CMD_UNPROT_DISASSOCIATE = 0x47 + NL80211_CMD_UNSPEC = 0x0 + NL80211_CMD_UPDATE_CONNECT_PARAMS = 0x7a + NL80211_CMD_UPDATE_FT_IES = 0x60 + NL80211_CMD_UPDATE_OWE_INFO = 0x87 + NL80211_CMD_VENDOR = 0x67 + NL80211_CMD_WIPHY_REG_CHANGE = 0x71 + NL80211_COALESCE_CONDITION_MATCH = 0x0 + NL80211_COALESCE_CONDITION_NO_MATCH = 0x1 + NL80211_CONN_FAIL_BLOCKED_CLIENT = 0x1 + NL80211_CONN_FAIL_MAX_CLIENTS = 0x0 + NL80211_CQM_RSSI_BEACON_LOSS_EVENT = 0x2 + NL80211_CQM_RSSI_THRESHOLD_EVENT_HIGH = 0x1 + NL80211_CQM_RSSI_THRESHOLD_EVENT_LOW = 0x0 + NL80211_CQM_TXE_MAX_INTVL = 0x708 + NL80211_CRIT_PROTO_APIPA = 0x3 + NL80211_CRIT_PROTO_DHCP = 0x1 + NL80211_CRIT_PROTO_EAPOL = 0x2 + NL80211_CRIT_PROTO_MAX_DURATION = 0x1388 + NL80211_CRIT_PROTO_UNSPEC = 0x0 + NL80211_DFS_AVAILABLE = 0x2 + NL80211_DFS_ETSI = 0x2 + NL80211_DFS_FCC = 0x1 + NL80211_DFS_JP = 0x3 + NL80211_DFS_UNAVAILABLE = 0x1 + NL80211_DFS_UNSET = 0x0 + NL80211_DFS_USABLE = 0x0 + NL80211_EDMG_BW_CONFIG_MAX = 0xf + NL80211_EDMG_BW_CONFIG_MIN = 0x4 + NL80211_EDMG_CHANNELS_MAX = 0x3c + NL80211_EDMG_CHANNELS_MIN = 0x1 + NL80211_EXTERNAL_AUTH_ABORT = 0x1 + NL80211_EXTERNAL_AUTH_START = 0x0 + NL80211_EXT_FEATURE_4WAY_HANDSHAKE_AP_PSK = 0x32 + NL80211_EXT_FEATURE_4WAY_HANDSHAKE_STA_1X = 0x10 + NL80211_EXT_FEATURE_4WAY_HANDSHAKE_STA_PSK = 0xf + NL80211_EXT_FEATURE_ACCEPT_BCAST_PROBE_RESP = 0x12 + NL80211_EXT_FEATURE_ACK_SIGNAL_SUPPORT = 0x1b + NL80211_EXT_FEATURE_AIRTIME_FAIRNESS = 0x21 + NL80211_EXT_FEATURE_AP_PMKSA_CACHING = 0x22 + NL80211_EXT_FEATURE_AQL = 0x28 + NL80211_EXT_FEATURE_BEACON_PROTECTION_CLIENT = 0x2e + NL80211_EXT_FEATURE_BEACON_PROTECTION = 0x29 + NL80211_EXT_FEATURE_BEACON_RATE_HE = 0x36 + NL80211_EXT_FEATURE_BEACON_RATE_HT = 0x7 + NL80211_EXT_FEATURE_BEACON_RATE_LEGACY = 0x6 + NL80211_EXT_FEATURE_BEACON_RATE_VHT = 0x8 + NL80211_EXT_FEATURE_BSS_PARENT_TSF = 0x4 + NL80211_EXT_FEATURE_CAN_REPLACE_PTK0 = 0x1f + NL80211_EXT_FEATURE_CONTROL_PORT_NO_PREAUTH = 0x2a + NL80211_EXT_FEATURE_CONTROL_PORT_OVER_NL80211 = 0x1a + NL80211_EXT_FEATURE_CONTROL_PORT_OVER_NL80211_TX_STATUS = 0x30 + NL80211_EXT_FEATURE_CQM_RSSI_LIST = 0xd + NL80211_EXT_FEATURE_DATA_ACK_SIGNAL_SUPPORT = 0x1b + NL80211_EXT_FEATURE_DEL_IBSS_STA = 0x2c + NL80211_EXT_FEATURE_DFS_OFFLOAD = 0x19 + NL80211_EXT_FEATURE_ENABLE_FTM_RESPONDER = 0x20 + NL80211_EXT_FEATURE_EXT_KEY_ID = 0x24 + NL80211_EXT_FEATURE_FILS_DISCOVERY = 0x34 + NL80211_EXT_FEATURE_FILS_MAX_CHANNEL_TIME = 0x11 + NL80211_EXT_FEATURE_FILS_SK_OFFLOAD = 0xe + NL80211_EXT_FEATURE_FILS_STA = 0x9 + NL80211_EXT_FEATURE_HIGH_ACCURACY_SCAN = 0x18 + NL80211_EXT_FEATURE_LOW_POWER_SCAN = 0x17 + NL80211_EXT_FEATURE_LOW_SPAN_SCAN = 0x16 + NL80211_EXT_FEATURE_MFP_OPTIONAL = 0x15 + NL80211_EXT_FEATURE_MGMT_TX_RANDOM_TA = 0xa + NL80211_EXT_FEATURE_MGMT_TX_RANDOM_TA_CONNECTED = 0xb + NL80211_EXT_FEATURE_MULTICAST_REGISTRATIONS = 0x2d + NL80211_EXT_FEATURE_MU_MIMO_AIR_SNIFFER = 0x2 + NL80211_EXT_FEATURE_OCE_PROBE_REQ_DEFERRAL_SUPPRESSION = 0x14 + NL80211_EXT_FEATURE_OCE_PROBE_REQ_HIGH_TX_RATE = 0x13 + NL80211_EXT_FEATURE_OPERATING_CHANNEL_VALIDATION = 0x31 + NL80211_EXT_FEATURE_PROTECTED_TWT = 0x2b + NL80211_EXT_FEATURE_PROT_RANGE_NEGO_AND_MEASURE = 0x39 + NL80211_EXT_FEATURE_RRM = 0x1 + NL80211_EXT_FEATURE_SAE_OFFLOAD_AP = 0x33 + NL80211_EXT_FEATURE_SAE_OFFLOAD = 0x26 + NL80211_EXT_FEATURE_SCAN_FREQ_KHZ = 0x2f + NL80211_EXT_FEATURE_SCAN_MIN_PREQ_CONTENT = 0x1e + NL80211_EXT_FEATURE_SCAN_RANDOM_SN = 0x1d + NL80211_EXT_FEATURE_SCAN_START_TIME = 0x3 + NL80211_EXT_FEATURE_SCHED_SCAN_BAND_SPECIFIC_RSSI_THOLD = 0x23 + NL80211_EXT_FEATURE_SCHED_SCAN_RELATIVE_RSSI = 0xc + NL80211_EXT_FEATURE_SECURE_LTF = 0x37 + NL80211_EXT_FEATURE_SECURE_RTT = 0x38 + NL80211_EXT_FEATURE_SET_SCAN_DWELL = 0x5 + NL80211_EXT_FEATURE_STA_TX_PWR = 0x25 + NL80211_EXT_FEATURE_TXQS = 0x1c + NL80211_EXT_FEATURE_UNSOL_BCAST_PROBE_RESP = 0x35 + NL80211_EXT_FEATURE_VHT_IBSS = 0x0 + NL80211_EXT_FEATURE_VLAN_OFFLOAD = 0x27 + NL80211_FEATURE_ACKTO_ESTIMATION = 0x800000 + NL80211_FEATURE_ACTIVE_MONITOR = 0x20000 + NL80211_FEATURE_ADVERTISE_CHAN_LIMITS = 0x4000 + NL80211_FEATURE_AP_MODE_CHAN_WIDTH_CHANGE = 0x40000 + NL80211_FEATURE_AP_SCAN = 0x100 + NL80211_FEATURE_CELL_BASE_REG_HINTS = 0x8 + NL80211_FEATURE_DS_PARAM_SET_IE_IN_PROBES = 0x80000 + NL80211_FEATURE_DYNAMIC_SMPS = 0x2000000 + NL80211_FEATURE_FULL_AP_CLIENT_STATE = 0x8000 + NL80211_FEATURE_HT_IBSS = 0x2 + NL80211_FEATURE_INACTIVITY_TIMER = 0x4 + NL80211_FEATURE_LOW_PRIORITY_SCAN = 0x40 + NL80211_FEATURE_MAC_ON_CREATE = 0x8000000 + NL80211_FEATURE_ND_RANDOM_MAC_ADDR = 0x80000000 + NL80211_FEATURE_NEED_OBSS_SCAN = 0x400 + NL80211_FEATURE_P2P_DEVICE_NEEDS_CHANNEL = 0x10 + NL80211_FEATURE_P2P_GO_CTWIN = 0x800 + NL80211_FEATURE_P2P_GO_OPPPS = 0x1000 + NL80211_FEATURE_QUIET = 0x200000 + NL80211_FEATURE_SAE = 0x20 + NL80211_FEATURE_SCAN_FLUSH = 0x80 + NL80211_FEATURE_SCAN_RANDOM_MAC_ADDR = 0x20000000 + NL80211_FEATURE_SCHED_SCAN_RANDOM_MAC_ADDR = 0x40000000 + NL80211_FEATURE_SK_TX_STATUS = 0x1 + NL80211_FEATURE_STATIC_SMPS = 0x1000000 + NL80211_FEATURE_SUPPORTS_WMM_ADMISSION = 0x4000000 + NL80211_FEATURE_TDLS_CHANNEL_SWITCH = 0x10000000 + NL80211_FEATURE_TX_POWER_INSERTION = 0x400000 + NL80211_FEATURE_USERSPACE_MPM = 0x10000 + NL80211_FEATURE_VIF_TXPOWER = 0x200 + NL80211_FEATURE_WFA_TPC_IE_IN_PROBES = 0x100000 + NL80211_FILS_DISCOVERY_ATTR_INT_MAX = 0x2 + NL80211_FILS_DISCOVERY_ATTR_INT_MIN = 0x1 + NL80211_FILS_DISCOVERY_ATTR_MAX = 0x3 + NL80211_FILS_DISCOVERY_ATTR_TMPL = 0x3 + NL80211_FILS_DISCOVERY_TMPL_MIN_LEN = 0x2a + NL80211_FREQUENCY_ATTR_16MHZ = 0x19 + NL80211_FREQUENCY_ATTR_1MHZ = 0x15 + NL80211_FREQUENCY_ATTR_2MHZ = 0x16 + NL80211_FREQUENCY_ATTR_4MHZ = 0x17 + NL80211_FREQUENCY_ATTR_8MHZ = 0x18 + NL80211_FREQUENCY_ATTR_DFS_CAC_TIME = 0xd + NL80211_FREQUENCY_ATTR_DFS_STATE = 0x7 + NL80211_FREQUENCY_ATTR_DFS_TIME = 0x8 + NL80211_FREQUENCY_ATTR_DISABLED = 0x2 + NL80211_FREQUENCY_ATTR_FREQ = 0x1 + NL80211_FREQUENCY_ATTR_GO_CONCURRENT = 0xf + NL80211_FREQUENCY_ATTR_INDOOR_ONLY = 0xe + NL80211_FREQUENCY_ATTR_IR_CONCURRENT = 0xf + NL80211_FREQUENCY_ATTR_MAX = 0x19 + NL80211_FREQUENCY_ATTR_MAX_TX_POWER = 0x6 + NL80211_FREQUENCY_ATTR_NO_10MHZ = 0x11 + NL80211_FREQUENCY_ATTR_NO_160MHZ = 0xc + NL80211_FREQUENCY_ATTR_NO_20MHZ = 0x10 + NL80211_FREQUENCY_ATTR_NO_80MHZ = 0xb + NL80211_FREQUENCY_ATTR_NO_HE = 0x13 + NL80211_FREQUENCY_ATTR_NO_HT40_MINUS = 0x9 + NL80211_FREQUENCY_ATTR_NO_HT40_PLUS = 0xa + NL80211_FREQUENCY_ATTR_NO_IBSS = 0x3 + NL80211_FREQUENCY_ATTR_NO_IR = 0x3 + NL80211_FREQUENCY_ATTR_OFFSET = 0x14 + NL80211_FREQUENCY_ATTR_PASSIVE_SCAN = 0x3 + NL80211_FREQUENCY_ATTR_RADAR = 0x5 + NL80211_FREQUENCY_ATTR_WMM = 0x12 + NL80211_FTM_RESP_ATTR_CIVICLOC = 0x3 + NL80211_FTM_RESP_ATTR_ENABLED = 0x1 + NL80211_FTM_RESP_ATTR_LCI = 0x2 + NL80211_FTM_RESP_ATTR_MAX = 0x3 + NL80211_FTM_STATS_ASAP_NUM = 0x4 + NL80211_FTM_STATS_FAILED_NUM = 0x3 + NL80211_FTM_STATS_MAX = 0xa + NL80211_FTM_STATS_NON_ASAP_NUM = 0x5 + NL80211_FTM_STATS_OUT_OF_WINDOW_TRIGGERS_NUM = 0x9 + NL80211_FTM_STATS_PAD = 0xa + NL80211_FTM_STATS_PARTIAL_NUM = 0x2 + NL80211_FTM_STATS_RESCHEDULE_REQUESTS_NUM = 0x8 + NL80211_FTM_STATS_SUCCESS_NUM = 0x1 + NL80211_FTM_STATS_TOTAL_DURATION_MSEC = 0x6 + NL80211_FTM_STATS_UNKNOWN_TRIGGERS_NUM = 0x7 + NL80211_GENL_NAME = "nl80211" + NL80211_HE_BSS_COLOR_ATTR_COLOR = 0x1 + NL80211_HE_BSS_COLOR_ATTR_DISABLED = 0x2 + NL80211_HE_BSS_COLOR_ATTR_MAX = 0x3 + NL80211_HE_BSS_COLOR_ATTR_PARTIAL = 0x3 + NL80211_HE_MAX_CAPABILITY_LEN = 0x36 + NL80211_HE_MIN_CAPABILITY_LEN = 0x10 + NL80211_HE_NSS_MAX = 0x8 + NL80211_HE_OBSS_PD_ATTR_BSS_COLOR_BITMAP = 0x4 + NL80211_HE_OBSS_PD_ATTR_MAX = 0x6 + NL80211_HE_OBSS_PD_ATTR_MAX_OFFSET = 0x2 + NL80211_HE_OBSS_PD_ATTR_MIN_OFFSET = 0x1 + NL80211_HE_OBSS_PD_ATTR_NON_SRG_MAX_OFFSET = 0x3 + NL80211_HE_OBSS_PD_ATTR_PARTIAL_BSSID_BITMAP = 0x5 + NL80211_HE_OBSS_PD_ATTR_SR_CTRL = 0x6 + NL80211_HIDDEN_SSID_NOT_IN_USE = 0x0 + NL80211_HIDDEN_SSID_ZERO_CONTENTS = 0x2 + NL80211_HIDDEN_SSID_ZERO_LEN = 0x1 + NL80211_HT_CAPABILITY_LEN = 0x1a + NL80211_IFACE_COMB_BI_MIN_GCD = 0x7 + NL80211_IFACE_COMB_LIMITS = 0x1 + NL80211_IFACE_COMB_MAXNUM = 0x2 + NL80211_IFACE_COMB_NUM_CHANNELS = 0x4 + NL80211_IFACE_COMB_RADAR_DETECT_REGIONS = 0x6 + NL80211_IFACE_COMB_RADAR_DETECT_WIDTHS = 0x5 + NL80211_IFACE_COMB_STA_AP_BI_MATCH = 0x3 + NL80211_IFACE_COMB_UNSPEC = 0x0 + NL80211_IFACE_LIMIT_MAX = 0x1 + NL80211_IFACE_LIMIT_TYPES = 0x2 + NL80211_IFACE_LIMIT_UNSPEC = 0x0 + NL80211_IFTYPE_ADHOC = 0x1 + NL80211_IFTYPE_AKM_ATTR_IFTYPES = 0x1 + NL80211_IFTYPE_AKM_ATTR_MAX = 0x2 + NL80211_IFTYPE_AKM_ATTR_SUITES = 0x2 + NL80211_IFTYPE_AP = 0x3 + NL80211_IFTYPE_AP_VLAN = 0x4 + NL80211_IFTYPE_MAX = 0xc + NL80211_IFTYPE_MESH_POINT = 0x7 + NL80211_IFTYPE_MONITOR = 0x6 + NL80211_IFTYPE_NAN = 0xc + NL80211_IFTYPE_OCB = 0xb + NL80211_IFTYPE_P2P_CLIENT = 0x8 + NL80211_IFTYPE_P2P_DEVICE = 0xa + NL80211_IFTYPE_P2P_GO = 0x9 + NL80211_IFTYPE_STATION = 0x2 + NL80211_IFTYPE_UNSPECIFIED = 0x0 + NL80211_IFTYPE_WDS = 0x5 + NL80211_KCK_EXT_LEN = 0x18 + NL80211_KCK_LEN = 0x10 + NL80211_KEK_EXT_LEN = 0x20 + NL80211_KEK_LEN = 0x10 + NL80211_KEY_CIPHER = 0x3 + NL80211_KEY_DATA = 0x1 + NL80211_KEY_DEFAULT_BEACON = 0xa + NL80211_KEY_DEFAULT = 0x5 + NL80211_KEY_DEFAULT_MGMT = 0x6 + NL80211_KEY_DEFAULT_TYPE_MULTICAST = 0x2 + NL80211_KEY_DEFAULT_TYPES = 0x8 + NL80211_KEY_DEFAULT_TYPE_UNICAST = 0x1 + NL80211_KEY_IDX = 0x2 + NL80211_KEY_MAX = 0xa + NL80211_KEY_MODE = 0x9 + NL80211_KEY_NO_TX = 0x1 + NL80211_KEY_RX_TX = 0x0 + NL80211_KEY_SEQ = 0x4 + NL80211_KEY_SET_TX = 0x2 + NL80211_KEY_TYPE = 0x7 + NL80211_KEYTYPE_GROUP = 0x0 + NL80211_KEYTYPE_PAIRWISE = 0x1 + NL80211_KEYTYPE_PEERKEY = 0x2 + NL80211_MAX_NR_AKM_SUITES = 0x2 + NL80211_MAX_NR_CIPHER_SUITES = 0x5 + NL80211_MAX_SUPP_HT_RATES = 0x4d + NL80211_MAX_SUPP_RATES = 0x20 + NL80211_MAX_SUPP_REG_RULES = 0x80 + NL80211_MESHCONF_ATTR_MAX = 0x1f + NL80211_MESHCONF_AUTO_OPEN_PLINKS = 0x7 + NL80211_MESHCONF_AWAKE_WINDOW = 0x1b + NL80211_MESHCONF_CONFIRM_TIMEOUT = 0x2 + NL80211_MESHCONF_CONNECTED_TO_AS = 0x1f + NL80211_MESHCONF_CONNECTED_TO_GATE = 0x1d + NL80211_MESHCONF_ELEMENT_TTL = 0xf + NL80211_MESHCONF_FORWARDING = 0x13 + NL80211_MESHCONF_GATE_ANNOUNCEMENTS = 0x11 + NL80211_MESHCONF_HOLDING_TIMEOUT = 0x3 + NL80211_MESHCONF_HT_OPMODE = 0x16 + NL80211_MESHCONF_HWMP_ACTIVE_PATH_TIMEOUT = 0xb + NL80211_MESHCONF_HWMP_CONFIRMATION_INTERVAL = 0x19 + NL80211_MESHCONF_HWMP_MAX_PREQ_RETRIES = 0x8 + NL80211_MESHCONF_HWMP_NET_DIAM_TRVS_TIME = 0xd + NL80211_MESHCONF_HWMP_PATH_TO_ROOT_TIMEOUT = 0x17 + NL80211_MESHCONF_HWMP_PERR_MIN_INTERVAL = 0x12 + NL80211_MESHCONF_HWMP_PREQ_MIN_INTERVAL = 0xc + NL80211_MESHCONF_HWMP_RANN_INTERVAL = 0x10 + NL80211_MESHCONF_HWMP_ROOT_INTERVAL = 0x18 + NL80211_MESHCONF_HWMP_ROOTMODE = 0xe + NL80211_MESHCONF_MAX_PEER_LINKS = 0x4 + NL80211_MESHCONF_MAX_RETRIES = 0x5 + NL80211_MESHCONF_MIN_DISCOVERY_TIMEOUT = 0xa + NL80211_MESHCONF_NOLEARN = 0x1e + NL80211_MESHCONF_PATH_REFRESH_TIME = 0x9 + NL80211_MESHCONF_PLINK_TIMEOUT = 0x1c + NL80211_MESHCONF_POWER_MODE = 0x1a + NL80211_MESHCONF_RETRY_TIMEOUT = 0x1 + NL80211_MESHCONF_RSSI_THRESHOLD = 0x14 + NL80211_MESHCONF_SYNC_OFFSET_MAX_NEIGHBOR = 0x15 + NL80211_MESHCONF_TTL = 0x6 + NL80211_MESH_POWER_ACTIVE = 0x1 + NL80211_MESH_POWER_DEEP_SLEEP = 0x3 + NL80211_MESH_POWER_LIGHT_SLEEP = 0x2 + NL80211_MESH_POWER_MAX = 0x3 + NL80211_MESH_POWER_UNKNOWN = 0x0 + NL80211_MESH_SETUP_ATTR_MAX = 0x8 + NL80211_MESH_SETUP_AUTH_PROTOCOL = 0x8 + NL80211_MESH_SETUP_ENABLE_VENDOR_METRIC = 0x2 + NL80211_MESH_SETUP_ENABLE_VENDOR_PATH_SEL = 0x1 + NL80211_MESH_SETUP_ENABLE_VENDOR_SYNC = 0x6 + NL80211_MESH_SETUP_IE = 0x3 + NL80211_MESH_SETUP_USERSPACE_AMPE = 0x5 + NL80211_MESH_SETUP_USERSPACE_AUTH = 0x4 + NL80211_MESH_SETUP_USERSPACE_MPM = 0x7 + NL80211_MESH_SETUP_VENDOR_PATH_SEL_IE = 0x3 + NL80211_MFP_NO = 0x0 + NL80211_MFP_OPTIONAL = 0x2 + NL80211_MFP_REQUIRED = 0x1 + NL80211_MIN_REMAIN_ON_CHANNEL_TIME = 0xa + NL80211_MNTR_FLAG_ACTIVE = 0x6 + NL80211_MNTR_FLAG_CONTROL = 0x3 + NL80211_MNTR_FLAG_COOK_FRAMES = 0x5 + NL80211_MNTR_FLAG_FCSFAIL = 0x1 + NL80211_MNTR_FLAG_MAX = 0x6 + NL80211_MNTR_FLAG_OTHER_BSS = 0x4 + NL80211_MNTR_FLAG_PLCPFAIL = 0x2 + NL80211_MPATH_FLAG_ACTIVE = 0x1 + NL80211_MPATH_FLAG_FIXED = 0x8 + NL80211_MPATH_FLAG_RESOLVED = 0x10 + NL80211_MPATH_FLAG_RESOLVING = 0x2 + NL80211_MPATH_FLAG_SN_VALID = 0x4 + NL80211_MPATH_INFO_DISCOVERY_RETRIES = 0x7 + NL80211_MPATH_INFO_DISCOVERY_TIMEOUT = 0x6 + NL80211_MPATH_INFO_EXPTIME = 0x4 + NL80211_MPATH_INFO_FLAGS = 0x5 + NL80211_MPATH_INFO_FRAME_QLEN = 0x1 + NL80211_MPATH_INFO_HOP_COUNT = 0x8 + NL80211_MPATH_INFO_MAX = 0x9 + NL80211_MPATH_INFO_METRIC = 0x3 + NL80211_MPATH_INFO_PATH_CHANGE = 0x9 + NL80211_MPATH_INFO_SN = 0x2 + NL80211_MULTICAST_GROUP_CONFIG = "config" + NL80211_MULTICAST_GROUP_MLME = "mlme" + NL80211_MULTICAST_GROUP_NAN = "nan" + NL80211_MULTICAST_GROUP_REG = "regulatory" + NL80211_MULTICAST_GROUP_SCAN = "scan" + NL80211_MULTICAST_GROUP_TESTMODE = "testmode" + NL80211_MULTICAST_GROUP_VENDOR = "vendor" + NL80211_NAN_FUNC_ATTR_MAX = 0x10 + NL80211_NAN_FUNC_CLOSE_RANGE = 0x9 + NL80211_NAN_FUNC_FOLLOW_UP = 0x2 + NL80211_NAN_FUNC_FOLLOW_UP_DEST = 0x8 + NL80211_NAN_FUNC_FOLLOW_UP_ID = 0x6 + NL80211_NAN_FUNC_FOLLOW_UP_REQ_ID = 0x7 + NL80211_NAN_FUNC_INSTANCE_ID = 0xf + NL80211_NAN_FUNC_MAX_TYPE = 0x2 + NL80211_NAN_FUNC_PUBLISH_BCAST = 0x4 + NL80211_NAN_FUNC_PUBLISH = 0x0 + NL80211_NAN_FUNC_PUBLISH_TYPE = 0x3 + NL80211_NAN_FUNC_RX_MATCH_FILTER = 0xd + NL80211_NAN_FUNC_SERVICE_ID = 0x2 + NL80211_NAN_FUNC_SERVICE_ID_LEN = 0x6 + NL80211_NAN_FUNC_SERVICE_INFO = 0xb + NL80211_NAN_FUNC_SERVICE_SPEC_INFO_MAX_LEN = 0xff + NL80211_NAN_FUNC_SRF = 0xc + NL80211_NAN_FUNC_SRF_MAX_LEN = 0xff + NL80211_NAN_FUNC_SUBSCRIBE_ACTIVE = 0x5 + NL80211_NAN_FUNC_SUBSCRIBE = 0x1 + NL80211_NAN_FUNC_TERM_REASON = 0x10 + NL80211_NAN_FUNC_TERM_REASON_ERROR = 0x2 + NL80211_NAN_FUNC_TERM_REASON_TTL_EXPIRED = 0x1 + NL80211_NAN_FUNC_TERM_REASON_USER_REQUEST = 0x0 + NL80211_NAN_FUNC_TTL = 0xa + NL80211_NAN_FUNC_TX_MATCH_FILTER = 0xe + NL80211_NAN_FUNC_TYPE = 0x1 + NL80211_NAN_MATCH_ATTR_MAX = 0x2 + NL80211_NAN_MATCH_FUNC_LOCAL = 0x1 + NL80211_NAN_MATCH_FUNC_PEER = 0x2 + NL80211_NAN_SOLICITED_PUBLISH = 0x1 + NL80211_NAN_SRF_ATTR_MAX = 0x4 + NL80211_NAN_SRF_BF = 0x2 + NL80211_NAN_SRF_BF_IDX = 0x3 + NL80211_NAN_SRF_INCLUDE = 0x1 + NL80211_NAN_SRF_MAC_ADDRS = 0x4 + NL80211_NAN_UNSOLICITED_PUBLISH = 0x2 + NL80211_NUM_ACS = 0x4 + NL80211_P2P_PS_SUPPORTED = 0x1 + NL80211_P2P_PS_UNSUPPORTED = 0x0 + NL80211_PKTPAT_MASK = 0x1 + NL80211_PKTPAT_OFFSET = 0x3 + NL80211_PKTPAT_PATTERN = 0x2 + NL80211_PLINK_ACTION_BLOCK = 0x2 + NL80211_PLINK_ACTION_NO_ACTION = 0x0 + NL80211_PLINK_ACTION_OPEN = 0x1 + NL80211_PLINK_BLOCKED = 0x6 + NL80211_PLINK_CNF_RCVD = 0x3 + NL80211_PLINK_ESTAB = 0x4 + NL80211_PLINK_HOLDING = 0x5 + NL80211_PLINK_LISTEN = 0x0 + NL80211_PLINK_OPN_RCVD = 0x2 + NL80211_PLINK_OPN_SNT = 0x1 + NL80211_PMKSA_CANDIDATE_BSSID = 0x2 + NL80211_PMKSA_CANDIDATE_INDEX = 0x1 + NL80211_PMKSA_CANDIDATE_PREAUTH = 0x3 + NL80211_PMSR_ATTR_MAX = 0x5 + NL80211_PMSR_ATTR_MAX_PEERS = 0x1 + NL80211_PMSR_ATTR_PEERS = 0x5 + NL80211_PMSR_ATTR_RANDOMIZE_MAC_ADDR = 0x3 + NL80211_PMSR_ATTR_REPORT_AP_TSF = 0x2 + NL80211_PMSR_ATTR_TYPE_CAPA = 0x4 + NL80211_PMSR_FTM_CAPA_ATTR_ASAP = 0x1 + NL80211_PMSR_FTM_CAPA_ATTR_BANDWIDTHS = 0x6 + NL80211_PMSR_FTM_CAPA_ATTR_MAX_BURSTS_EXPONENT = 0x7 + NL80211_PMSR_FTM_CAPA_ATTR_MAX = 0xa + NL80211_PMSR_FTM_CAPA_ATTR_MAX_FTMS_PER_BURST = 0x8 + NL80211_PMSR_FTM_CAPA_ATTR_NON_ASAP = 0x2 + NL80211_PMSR_FTM_CAPA_ATTR_NON_TRIGGER_BASED = 0xa + NL80211_PMSR_FTM_CAPA_ATTR_PREAMBLES = 0x5 + NL80211_PMSR_FTM_CAPA_ATTR_REQ_CIVICLOC = 0x4 + NL80211_PMSR_FTM_CAPA_ATTR_REQ_LCI = 0x3 + NL80211_PMSR_FTM_CAPA_ATTR_TRIGGER_BASED = 0x9 + NL80211_PMSR_FTM_FAILURE_BAD_CHANGED_PARAMS = 0x7 + NL80211_PMSR_FTM_FAILURE_INVALID_TIMESTAMP = 0x5 + NL80211_PMSR_FTM_FAILURE_NO_RESPONSE = 0x1 + NL80211_PMSR_FTM_FAILURE_PEER_BUSY = 0x6 + NL80211_PMSR_FTM_FAILURE_PEER_NOT_CAPABLE = 0x4 + NL80211_PMSR_FTM_FAILURE_REJECTED = 0x2 + NL80211_PMSR_FTM_FAILURE_UNSPECIFIED = 0x0 + NL80211_PMSR_FTM_FAILURE_WRONG_CHANNEL = 0x3 + NL80211_PMSR_FTM_REQ_ATTR_ASAP = 0x1 + NL80211_PMSR_FTM_REQ_ATTR_BURST_DURATION = 0x5 + NL80211_PMSR_FTM_REQ_ATTR_BURST_PERIOD = 0x4 + NL80211_PMSR_FTM_REQ_ATTR_FTMS_PER_BURST = 0x6 + NL80211_PMSR_FTM_REQ_ATTR_LMR_FEEDBACK = 0xc + NL80211_PMSR_FTM_REQ_ATTR_MAX = 0xd + NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED = 0xb + NL80211_PMSR_FTM_REQ_ATTR_NUM_BURSTS_EXP = 0x3 + NL80211_PMSR_FTM_REQ_ATTR_NUM_FTMR_RETRIES = 0x7 + NL80211_PMSR_FTM_REQ_ATTR_PREAMBLE = 0x2 + NL80211_PMSR_FTM_REQ_ATTR_REQUEST_CIVICLOC = 0x9 + NL80211_PMSR_FTM_REQ_ATTR_REQUEST_LCI = 0x8 + NL80211_PMSR_FTM_REQ_ATTR_TRIGGER_BASED = 0xa + NL80211_PMSR_FTM_RESP_ATTR_BURST_DURATION = 0x7 + NL80211_PMSR_FTM_RESP_ATTR_BURST_INDEX = 0x2 + NL80211_PMSR_FTM_RESP_ATTR_BUSY_RETRY_TIME = 0x5 + NL80211_PMSR_FTM_RESP_ATTR_CIVICLOC = 0x14 + NL80211_PMSR_FTM_RESP_ATTR_DIST_AVG = 0x10 + NL80211_PMSR_FTM_RESP_ATTR_DIST_SPREAD = 0x12 + NL80211_PMSR_FTM_RESP_ATTR_DIST_VARIANCE = 0x11 + NL80211_PMSR_FTM_RESP_ATTR_FAIL_REASON = 0x1 + NL80211_PMSR_FTM_RESP_ATTR_FTMS_PER_BURST = 0x8 + NL80211_PMSR_FTM_RESP_ATTR_LCI = 0x13 + NL80211_PMSR_FTM_RESP_ATTR_MAX = 0x15 + NL80211_PMSR_FTM_RESP_ATTR_NUM_BURSTS_EXP = 0x6 + NL80211_PMSR_FTM_RESP_ATTR_NUM_FTMR_ATTEMPTS = 0x3 + NL80211_PMSR_FTM_RESP_ATTR_NUM_FTMR_SUCCESSES = 0x4 + NL80211_PMSR_FTM_RESP_ATTR_PAD = 0x15 + NL80211_PMSR_FTM_RESP_ATTR_RSSI_AVG = 0x9 + NL80211_PMSR_FTM_RESP_ATTR_RSSI_SPREAD = 0xa + NL80211_PMSR_FTM_RESP_ATTR_RTT_AVG = 0xd + NL80211_PMSR_FTM_RESP_ATTR_RTT_SPREAD = 0xf + NL80211_PMSR_FTM_RESP_ATTR_RTT_VARIANCE = 0xe + NL80211_PMSR_FTM_RESP_ATTR_RX_RATE = 0xc + NL80211_PMSR_FTM_RESP_ATTR_TX_RATE = 0xb + NL80211_PMSR_PEER_ATTR_ADDR = 0x1 + NL80211_PMSR_PEER_ATTR_CHAN = 0x2 + NL80211_PMSR_PEER_ATTR_MAX = 0x4 + NL80211_PMSR_PEER_ATTR_REQ = 0x3 + NL80211_PMSR_PEER_ATTR_RESP = 0x4 + NL80211_PMSR_REQ_ATTR_DATA = 0x1 + NL80211_PMSR_REQ_ATTR_GET_AP_TSF = 0x2 + NL80211_PMSR_REQ_ATTR_MAX = 0x2 + NL80211_PMSR_RESP_ATTR_AP_TSF = 0x4 + NL80211_PMSR_RESP_ATTR_DATA = 0x1 + NL80211_PMSR_RESP_ATTR_FINAL = 0x5 + NL80211_PMSR_RESP_ATTR_HOST_TIME = 0x3 + NL80211_PMSR_RESP_ATTR_MAX = 0x6 + NL80211_PMSR_RESP_ATTR_PAD = 0x6 + NL80211_PMSR_RESP_ATTR_STATUS = 0x2 + NL80211_PMSR_STATUS_FAILURE = 0x3 + NL80211_PMSR_STATUS_REFUSED = 0x1 + NL80211_PMSR_STATUS_SUCCESS = 0x0 + NL80211_PMSR_STATUS_TIMEOUT = 0x2 + NL80211_PMSR_TYPE_FTM = 0x1 + NL80211_PMSR_TYPE_INVALID = 0x0 + NL80211_PMSR_TYPE_MAX = 0x1 + NL80211_PREAMBLE_DMG = 0x3 + NL80211_PREAMBLE_HE = 0x4 + NL80211_PREAMBLE_HT = 0x1 + NL80211_PREAMBLE_LEGACY = 0x0 + NL80211_PREAMBLE_VHT = 0x2 + NL80211_PROBE_RESP_OFFLOAD_SUPPORT_80211U = 0x8 + NL80211_PROBE_RESP_OFFLOAD_SUPPORT_P2P = 0x4 + NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS2 = 0x2 + NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS = 0x1 + NL80211_PROTOCOL_FEATURE_SPLIT_WIPHY_DUMP = 0x1 + NL80211_PS_DISABLED = 0x0 + NL80211_PS_ENABLED = 0x1 + NL80211_RADAR_CAC_ABORTED = 0x2 + NL80211_RADAR_CAC_FINISHED = 0x1 + NL80211_RADAR_CAC_STARTED = 0x5 + NL80211_RADAR_DETECTED = 0x0 + NL80211_RADAR_NOP_FINISHED = 0x3 + NL80211_RADAR_PRE_CAC_EXPIRED = 0x4 + NL80211_RATE_INFO_10_MHZ_WIDTH = 0xb + NL80211_RATE_INFO_160_MHZ_WIDTH = 0xa + NL80211_RATE_INFO_40_MHZ_WIDTH = 0x3 + NL80211_RATE_INFO_5_MHZ_WIDTH = 0xc + NL80211_RATE_INFO_80_MHZ_WIDTH = 0x8 + NL80211_RATE_INFO_80P80_MHZ_WIDTH = 0x9 + NL80211_RATE_INFO_BITRATE32 = 0x5 + NL80211_RATE_INFO_BITRATE = 0x1 + NL80211_RATE_INFO_HE_1XLTF = 0x0 + NL80211_RATE_INFO_HE_2XLTF = 0x1 + NL80211_RATE_INFO_HE_4XLTF = 0x2 + NL80211_RATE_INFO_HE_DCM = 0x10 + NL80211_RATE_INFO_HE_GI_0_8 = 0x0 + NL80211_RATE_INFO_HE_GI_1_6 = 0x1 + NL80211_RATE_INFO_HE_GI_3_2 = 0x2 + NL80211_RATE_INFO_HE_GI = 0xf + NL80211_RATE_INFO_HE_MCS = 0xd + NL80211_RATE_INFO_HE_NSS = 0xe + NL80211_RATE_INFO_HE_RU_ALLOC_106 = 0x2 + NL80211_RATE_INFO_HE_RU_ALLOC_242 = 0x3 + NL80211_RATE_INFO_HE_RU_ALLOC_26 = 0x0 + NL80211_RATE_INFO_HE_RU_ALLOC_2x996 = 0x6 + NL80211_RATE_INFO_HE_RU_ALLOC_484 = 0x4 + NL80211_RATE_INFO_HE_RU_ALLOC_52 = 0x1 + NL80211_RATE_INFO_HE_RU_ALLOC_996 = 0x5 + NL80211_RATE_INFO_HE_RU_ALLOC = 0x11 + NL80211_RATE_INFO_MAX = 0x11 + NL80211_RATE_INFO_MCS = 0x2 + NL80211_RATE_INFO_SHORT_GI = 0x4 + NL80211_RATE_INFO_VHT_MCS = 0x6 + NL80211_RATE_INFO_VHT_NSS = 0x7 + NL80211_REGDOM_SET_BY_CORE = 0x0 + NL80211_REGDOM_SET_BY_COUNTRY_IE = 0x3 + NL80211_REGDOM_SET_BY_DRIVER = 0x2 + NL80211_REGDOM_SET_BY_USER = 0x1 + NL80211_REGDOM_TYPE_COUNTRY = 0x0 + NL80211_REGDOM_TYPE_CUSTOM_WORLD = 0x2 + NL80211_REGDOM_TYPE_INTERSECTION = 0x3 + NL80211_REGDOM_TYPE_WORLD = 0x1 + NL80211_REG_RULE_ATTR_MAX = 0x7 + NL80211_REKEY_DATA_AKM = 0x4 + NL80211_REKEY_DATA_KCK = 0x2 + NL80211_REKEY_DATA_KEK = 0x1 + NL80211_REKEY_DATA_REPLAY_CTR = 0x3 + NL80211_REPLAY_CTR_LEN = 0x8 + NL80211_RRF_AUTO_BW = 0x800 + NL80211_RRF_DFS = 0x10 + NL80211_RRF_GO_CONCURRENT = 0x1000 + NL80211_RRF_IR_CONCURRENT = 0x1000 + NL80211_RRF_NO_160MHZ = 0x10000 + NL80211_RRF_NO_80MHZ = 0x8000 + NL80211_RRF_NO_CCK = 0x2 + NL80211_RRF_NO_HE = 0x20000 + NL80211_RRF_NO_HT40 = 0x6000 + NL80211_RRF_NO_HT40MINUS = 0x2000 + NL80211_RRF_NO_HT40PLUS = 0x4000 + NL80211_RRF_NO_IBSS = 0x80 + NL80211_RRF_NO_INDOOR = 0x4 + NL80211_RRF_NO_IR_ALL = 0x180 + NL80211_RRF_NO_IR = 0x80 + NL80211_RRF_NO_OFDM = 0x1 + NL80211_RRF_NO_OUTDOOR = 0x8 + NL80211_RRF_PASSIVE_SCAN = 0x80 + NL80211_RRF_PTMP_ONLY = 0x40 + NL80211_RRF_PTP_ONLY = 0x20 + NL80211_RXMGMT_FLAG_ANSWERED = 0x1 + NL80211_RXMGMT_FLAG_EXTERNAL_AUTH = 0x2 + NL80211_SAE_PWE_BOTH = 0x3 + NL80211_SAE_PWE_HASH_TO_ELEMENT = 0x2 + NL80211_SAE_PWE_HUNT_AND_PECK = 0x1 + NL80211_SAE_PWE_UNSPECIFIED = 0x0 + NL80211_SAR_ATTR_MAX = 0x2 + NL80211_SAR_ATTR_SPECS = 0x2 + NL80211_SAR_ATTR_SPECS_END_FREQ = 0x4 + NL80211_SAR_ATTR_SPECS_MAX = 0x4 + NL80211_SAR_ATTR_SPECS_POWER = 0x1 + NL80211_SAR_ATTR_SPECS_RANGE_INDEX = 0x2 + NL80211_SAR_ATTR_SPECS_START_FREQ = 0x3 + NL80211_SAR_ATTR_TYPE = 0x1 + NL80211_SAR_TYPE_POWER = 0x0 + NL80211_SCAN_FLAG_ACCEPT_BCAST_PROBE_RESP = 0x20 + NL80211_SCAN_FLAG_AP = 0x4 + NL80211_SCAN_FLAG_COLOCATED_6GHZ = 0x4000 + NL80211_SCAN_FLAG_FILS_MAX_CHANNEL_TIME = 0x10 + NL80211_SCAN_FLAG_FLUSH = 0x2 + NL80211_SCAN_FLAG_FREQ_KHZ = 0x2000 + NL80211_SCAN_FLAG_HIGH_ACCURACY = 0x400 + NL80211_SCAN_FLAG_LOW_POWER = 0x200 + NL80211_SCAN_FLAG_LOW_PRIORITY = 0x1 + NL80211_SCAN_FLAG_LOW_SPAN = 0x100 + NL80211_SCAN_FLAG_MIN_PREQ_CONTENT = 0x1000 + NL80211_SCAN_FLAG_OCE_PROBE_REQ_DEFERRAL_SUPPRESSION = 0x80 + NL80211_SCAN_FLAG_OCE_PROBE_REQ_HIGH_TX_RATE = 0x40 + NL80211_SCAN_FLAG_RANDOM_ADDR = 0x8 + NL80211_SCAN_FLAG_RANDOM_SN = 0x800 + NL80211_SCAN_RSSI_THOLD_OFF = -0x12c + NL80211_SCHED_SCAN_MATCH_ATTR_BSSID = 0x5 + NL80211_SCHED_SCAN_MATCH_ATTR_MAX = 0x6 + NL80211_SCHED_SCAN_MATCH_ATTR_RELATIVE_RSSI = 0x3 + NL80211_SCHED_SCAN_MATCH_ATTR_RSSI_ADJUST = 0x4 + NL80211_SCHED_SCAN_MATCH_ATTR_RSSI = 0x2 + NL80211_SCHED_SCAN_MATCH_ATTR_SSID = 0x1 + NL80211_SCHED_SCAN_MATCH_PER_BAND_RSSI = 0x6 + NL80211_SCHED_SCAN_PLAN_INTERVAL = 0x1 + NL80211_SCHED_SCAN_PLAN_ITERATIONS = 0x2 + NL80211_SCHED_SCAN_PLAN_MAX = 0x2 + NL80211_SMPS_DYNAMIC = 0x2 + NL80211_SMPS_MAX = 0x2 + NL80211_SMPS_OFF = 0x0 + NL80211_SMPS_STATIC = 0x1 + NL80211_STA_BSS_PARAM_BEACON_INTERVAL = 0x5 + NL80211_STA_BSS_PARAM_CTS_PROT = 0x1 + NL80211_STA_BSS_PARAM_DTIM_PERIOD = 0x4 + NL80211_STA_BSS_PARAM_MAX = 0x5 + NL80211_STA_BSS_PARAM_SHORT_PREAMBLE = 0x2 + NL80211_STA_BSS_PARAM_SHORT_SLOT_TIME = 0x3 + NL80211_STA_FLAG_ASSOCIATED = 0x7 + NL80211_STA_FLAG_AUTHENTICATED = 0x5 + NL80211_STA_FLAG_AUTHORIZED = 0x1 + NL80211_STA_FLAG_MAX = 0x7 + NL80211_STA_FLAG_MAX_OLD_API = 0x6 + NL80211_STA_FLAG_MFP = 0x4 + NL80211_STA_FLAG_SHORT_PREAMBLE = 0x2 + NL80211_STA_FLAG_TDLS_PEER = 0x6 + NL80211_STA_FLAG_WME = 0x3 + NL80211_STA_INFO_ACK_SIGNAL_AVG = 0x23 + NL80211_STA_INFO_ACK_SIGNAL = 0x22 + NL80211_STA_INFO_AIRTIME_LINK_METRIC = 0x29 + NL80211_STA_INFO_AIRTIME_WEIGHT = 0x28 + NL80211_STA_INFO_ASSOC_AT_BOOTTIME = 0x2a + NL80211_STA_INFO_BEACON_LOSS = 0x12 + NL80211_STA_INFO_BEACON_RX = 0x1d + NL80211_STA_INFO_BEACON_SIGNAL_AVG = 0x1e + NL80211_STA_INFO_BSS_PARAM = 0xf + NL80211_STA_INFO_CHAIN_SIGNAL_AVG = 0x1a + NL80211_STA_INFO_CHAIN_SIGNAL = 0x19 + NL80211_STA_INFO_CONNECTED_TIME = 0x10 + NL80211_STA_INFO_CONNECTED_TO_AS = 0x2b + NL80211_STA_INFO_CONNECTED_TO_GATE = 0x26 + NL80211_STA_INFO_DATA_ACK_SIGNAL_AVG = 0x23 + NL80211_STA_INFO_EXPECTED_THROUGHPUT = 0x1b + NL80211_STA_INFO_FCS_ERROR_COUNT = 0x25 + NL80211_STA_INFO_INACTIVE_TIME = 0x1 + NL80211_STA_INFO_LLID = 0x4 + NL80211_STA_INFO_LOCAL_PM = 0x14 + NL80211_STA_INFO_MAX = 0x2b + NL80211_STA_INFO_NONPEER_PM = 0x16 + NL80211_STA_INFO_PAD = 0x21 + NL80211_STA_INFO_PEER_PM = 0x15 + NL80211_STA_INFO_PLID = 0x5 + NL80211_STA_INFO_PLINK_STATE = 0x6 + NL80211_STA_INFO_RX_BITRATE = 0xe + NL80211_STA_INFO_RX_BYTES64 = 0x17 + NL80211_STA_INFO_RX_BYTES = 0x2 + NL80211_STA_INFO_RX_DROP_MISC = 0x1c + NL80211_STA_INFO_RX_DURATION = 0x20 + NL80211_STA_INFO_RX_MPDUS = 0x24 + NL80211_STA_INFO_RX_PACKETS = 0x9 + NL80211_STA_INFO_SIGNAL_AVG = 0xd + NL80211_STA_INFO_SIGNAL = 0x7 + NL80211_STA_INFO_STA_FLAGS = 0x11 + NL80211_STA_INFO_TID_STATS = 0x1f + NL80211_STA_INFO_T_OFFSET = 0x13 + NL80211_STA_INFO_TX_BITRATE = 0x8 + NL80211_STA_INFO_TX_BYTES64 = 0x18 + NL80211_STA_INFO_TX_BYTES = 0x3 + NL80211_STA_INFO_TX_DURATION = 0x27 + NL80211_STA_INFO_TX_FAILED = 0xc + NL80211_STA_INFO_TX_PACKETS = 0xa + NL80211_STA_INFO_TX_RETRIES = 0xb + NL80211_STA_WME_MAX = 0x2 + NL80211_STA_WME_MAX_SP = 0x2 + NL80211_STA_WME_UAPSD_QUEUES = 0x1 + NL80211_SURVEY_INFO_CHANNEL_TIME_BUSY = 0x5 + NL80211_SURVEY_INFO_CHANNEL_TIME = 0x4 + NL80211_SURVEY_INFO_CHANNEL_TIME_EXT_BUSY = 0x6 + NL80211_SURVEY_INFO_CHANNEL_TIME_RX = 0x7 + NL80211_SURVEY_INFO_CHANNEL_TIME_TX = 0x8 + NL80211_SURVEY_INFO_FREQUENCY = 0x1 + NL80211_SURVEY_INFO_FREQUENCY_OFFSET = 0xc + NL80211_SURVEY_INFO_IN_USE = 0x3 + NL80211_SURVEY_INFO_MAX = 0xc + NL80211_SURVEY_INFO_NOISE = 0x2 + NL80211_SURVEY_INFO_PAD = 0xa + NL80211_SURVEY_INFO_TIME_BSS_RX = 0xb + NL80211_SURVEY_INFO_TIME_BUSY = 0x5 + NL80211_SURVEY_INFO_TIME = 0x4 + NL80211_SURVEY_INFO_TIME_EXT_BUSY = 0x6 + NL80211_SURVEY_INFO_TIME_RX = 0x7 + NL80211_SURVEY_INFO_TIME_SCAN = 0x9 + NL80211_SURVEY_INFO_TIME_TX = 0x8 + NL80211_TDLS_DISABLE_LINK = 0x4 + NL80211_TDLS_DISCOVERY_REQ = 0x0 + NL80211_TDLS_ENABLE_LINK = 0x3 + NL80211_TDLS_PEER_HE = 0x8 + NL80211_TDLS_PEER_HT = 0x1 + NL80211_TDLS_PEER_VHT = 0x2 + NL80211_TDLS_PEER_WMM = 0x4 + NL80211_TDLS_SETUP = 0x1 + NL80211_TDLS_TEARDOWN = 0x2 + NL80211_TID_CONFIG_ATTR_AMPDU_CTRL = 0x9 + NL80211_TID_CONFIG_ATTR_AMSDU_CTRL = 0xb + NL80211_TID_CONFIG_ATTR_MAX = 0xd + NL80211_TID_CONFIG_ATTR_NOACK = 0x6 + NL80211_TID_CONFIG_ATTR_OVERRIDE = 0x4 + NL80211_TID_CONFIG_ATTR_PAD = 0x1 + NL80211_TID_CONFIG_ATTR_PEER_SUPP = 0x3 + NL80211_TID_CONFIG_ATTR_RETRY_LONG = 0x8 + NL80211_TID_CONFIG_ATTR_RETRY_SHORT = 0x7 + NL80211_TID_CONFIG_ATTR_RTSCTS_CTRL = 0xa + NL80211_TID_CONFIG_ATTR_TIDS = 0x5 + NL80211_TID_CONFIG_ATTR_TX_RATE = 0xd + NL80211_TID_CONFIG_ATTR_TX_RATE_TYPE = 0xc + NL80211_TID_CONFIG_ATTR_VIF_SUPP = 0x2 + NL80211_TID_CONFIG_DISABLE = 0x1 + NL80211_TID_CONFIG_ENABLE = 0x0 + NL80211_TID_STATS_MAX = 0x6 + NL80211_TID_STATS_PAD = 0x5 + NL80211_TID_STATS_RX_MSDU = 0x1 + NL80211_TID_STATS_TX_MSDU = 0x2 + NL80211_TID_STATS_TX_MSDU_FAILED = 0x4 + NL80211_TID_STATS_TX_MSDU_RETRIES = 0x3 + NL80211_TID_STATS_TXQ_STATS = 0x6 + NL80211_TIMEOUT_ASSOC = 0x3 + NL80211_TIMEOUT_AUTH = 0x2 + NL80211_TIMEOUT_SCAN = 0x1 + NL80211_TIMEOUT_UNSPECIFIED = 0x0 + NL80211_TKIP_DATA_OFFSET_ENCR_KEY = 0x0 + NL80211_TKIP_DATA_OFFSET_RX_MIC_KEY = 0x18 + NL80211_TKIP_DATA_OFFSET_TX_MIC_KEY = 0x10 + NL80211_TX_POWER_AUTOMATIC = 0x0 + NL80211_TX_POWER_FIXED = 0x2 + NL80211_TX_POWER_LIMITED = 0x1 + NL80211_TXQ_ATTR_AC = 0x1 + NL80211_TXQ_ATTR_AIFS = 0x5 + NL80211_TXQ_ATTR_CWMAX = 0x4 + NL80211_TXQ_ATTR_CWMIN = 0x3 + NL80211_TXQ_ATTR_MAX = 0x5 + NL80211_TXQ_ATTR_QUEUE = 0x1 + NL80211_TXQ_ATTR_TXOP = 0x2 + NL80211_TXQ_Q_BE = 0x2 + NL80211_TXQ_Q_BK = 0x3 + NL80211_TXQ_Q_VI = 0x1 + NL80211_TXQ_Q_VO = 0x0 + NL80211_TXQ_STATS_BACKLOG_BYTES = 0x1 + NL80211_TXQ_STATS_BACKLOG_PACKETS = 0x2 + NL80211_TXQ_STATS_COLLISIONS = 0x8 + NL80211_TXQ_STATS_DROPS = 0x4 + NL80211_TXQ_STATS_ECN_MARKS = 0x5 + NL80211_TXQ_STATS_FLOWS = 0x3 + NL80211_TXQ_STATS_MAX = 0xb + NL80211_TXQ_STATS_MAX_FLOWS = 0xb + NL80211_TXQ_STATS_OVERLIMIT = 0x6 + NL80211_TXQ_STATS_OVERMEMORY = 0x7 + NL80211_TXQ_STATS_TX_BYTES = 0x9 + NL80211_TXQ_STATS_TX_PACKETS = 0xa + NL80211_TX_RATE_AUTOMATIC = 0x0 + NL80211_TXRATE_DEFAULT_GI = 0x0 + NL80211_TX_RATE_FIXED = 0x2 + NL80211_TXRATE_FORCE_LGI = 0x2 + NL80211_TXRATE_FORCE_SGI = 0x1 + NL80211_TXRATE_GI = 0x4 + NL80211_TXRATE_HE = 0x5 + NL80211_TXRATE_HE_GI = 0x6 + NL80211_TXRATE_HE_LTF = 0x7 + NL80211_TXRATE_HT = 0x2 + NL80211_TXRATE_LEGACY = 0x1 + NL80211_TX_RATE_LIMITED = 0x1 + NL80211_TXRATE_MAX = 0x7 + NL80211_TXRATE_MCS = 0x2 + NL80211_TXRATE_VHT = 0x3 + NL80211_UNSOL_BCAST_PROBE_RESP_ATTR_INT = 0x1 + NL80211_UNSOL_BCAST_PROBE_RESP_ATTR_MAX = 0x2 + NL80211_UNSOL_BCAST_PROBE_RESP_ATTR_TMPL = 0x2 + NL80211_USER_REG_HINT_CELL_BASE = 0x1 + NL80211_USER_REG_HINT_INDOOR = 0x2 + NL80211_USER_REG_HINT_USER = 0x0 + NL80211_VENDOR_ID_IS_LINUX = 0x80000000 + NL80211_VHT_CAPABILITY_LEN = 0xc + NL80211_VHT_NSS_MAX = 0x8 + NL80211_WIPHY_NAME_MAXLEN = 0x40 + NL80211_WMMR_AIFSN = 0x3 + NL80211_WMMR_CW_MAX = 0x2 + NL80211_WMMR_CW_MIN = 0x1 + NL80211_WMMR_MAX = 0x4 + NL80211_WMMR_TXOP = 0x4 + NL80211_WOWLAN_PKTPAT_MASK = 0x1 + NL80211_WOWLAN_PKTPAT_OFFSET = 0x3 + NL80211_WOWLAN_PKTPAT_PATTERN = 0x2 + NL80211_WOWLAN_TCP_DATA_INTERVAL = 0x9 + NL80211_WOWLAN_TCP_DATA_PAYLOAD = 0x6 + NL80211_WOWLAN_TCP_DATA_PAYLOAD_SEQ = 0x7 + NL80211_WOWLAN_TCP_DATA_PAYLOAD_TOKEN = 0x8 + NL80211_WOWLAN_TCP_DST_IPV4 = 0x2 + NL80211_WOWLAN_TCP_DST_MAC = 0x3 + NL80211_WOWLAN_TCP_DST_PORT = 0x5 + NL80211_WOWLAN_TCP_SRC_IPV4 = 0x1 + NL80211_WOWLAN_TCP_SRC_PORT = 0x4 + NL80211_WOWLAN_TCP_WAKE_MASK = 0xb + NL80211_WOWLAN_TCP_WAKE_PAYLOAD = 0xa + NL80211_WOWLAN_TRIG_4WAY_HANDSHAKE = 0x8 + NL80211_WOWLAN_TRIG_ANY = 0x1 + NL80211_WOWLAN_TRIG_DISCONNECT = 0x2 + NL80211_WOWLAN_TRIG_EAP_IDENT_REQUEST = 0x7 + NL80211_WOWLAN_TRIG_GTK_REKEY_FAILURE = 0x6 + NL80211_WOWLAN_TRIG_GTK_REKEY_SUPPORTED = 0x5 + NL80211_WOWLAN_TRIG_MAGIC_PKT = 0x3 + NL80211_WOWLAN_TRIG_NET_DETECT = 0x12 + NL80211_WOWLAN_TRIG_NET_DETECT_RESULTS = 0x13 + NL80211_WOWLAN_TRIG_PKT_PATTERN = 0x4 + NL80211_WOWLAN_TRIG_RFKILL_RELEASE = 0x9 + NL80211_WOWLAN_TRIG_TCP_CONNECTION = 0xe + NL80211_WOWLAN_TRIG_WAKEUP_PKT_80211 = 0xa + NL80211_WOWLAN_TRIG_WAKEUP_PKT_80211_LEN = 0xb + NL80211_WOWLAN_TRIG_WAKEUP_PKT_8023 = 0xc + NL80211_WOWLAN_TRIG_WAKEUP_PKT_8023_LEN = 0xd + NL80211_WOWLAN_TRIG_WAKEUP_TCP_CONNLOST = 0x10 + NL80211_WOWLAN_TRIG_WAKEUP_TCP_MATCH = 0xf + NL80211_WOWLAN_TRIG_WAKEUP_TCP_NOMORETOKENS = 0x11 + NL80211_WPA_VERSION_1 = 0x1 + NL80211_WPA_VERSION_2 = 0x2 + NL80211_WPA_VERSION_3 = 0x4 +) + +const ( + FRA_UNSPEC = 0x0 + FRA_DST = 0x1 + FRA_SRC = 0x2 + FRA_IIFNAME = 0x3 + FRA_GOTO = 0x4 + FRA_UNUSED2 = 0x5 + FRA_PRIORITY = 0x6 + FRA_UNUSED3 = 0x7 + FRA_UNUSED4 = 0x8 + FRA_UNUSED5 = 0x9 + FRA_FWMARK = 0xa + FRA_FLOW = 0xb + FRA_TUN_ID = 0xc + FRA_SUPPRESS_IFGROUP = 0xd + FRA_SUPPRESS_PREFIXLEN = 0xe + FRA_TABLE = 0xf + FRA_FWMASK = 0x10 + FRA_OIFNAME = 0x11 + FRA_PAD = 0x12 + FRA_L3MDEV = 0x13 + FRA_UID_RANGE = 0x14 + FRA_PROTOCOL = 0x15 + FRA_IP_PROTO = 0x16 + FRA_SPORT_RANGE = 0x17 + FRA_DPORT_RANGE = 0x18 + FR_ACT_UNSPEC = 0x0 + FR_ACT_TO_TBL = 0x1 + FR_ACT_GOTO = 0x2 + FR_ACT_NOP = 0x3 + FR_ACT_RES3 = 0x4 + FR_ACT_RES4 = 0x5 + FR_ACT_BLACKHOLE = 0x6 + FR_ACT_UNREACHABLE = 0x7 + FR_ACT_PROHIBIT = 0x8 +) diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_386.go b/vendor/golang.org/x/sys/unix/ztypes_linux_386.go index bea254945..531409256 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_386.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_386.go @@ -240,6 +240,10 @@ type EpollEvent struct { Pad int32 } +const ( + OPEN_TREE_CLOEXEC = 0x80000 +) + const ( POLLRDHUP = 0x2000 ) @@ -250,6 +254,13 @@ type Sigset_t struct { const _C__NSIG = 0x41 +type Siginfo struct { + Signo int32 + Errno int32 + Code int32 + _ [116]byte +} + type Termios struct { Iflag uint32 Oflag uint32 @@ -311,6 +322,8 @@ type Taskstats struct { Thrashing_count uint64 Thrashing_delay_total uint64 Ac_btime64 uint64 + Compact_count uint64 + Compact_delay_total uint64 } type cpuMask uint32 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go index b8c8f2894..b02ab83db 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go @@ -255,6 +255,10 @@ type EpollEvent struct { Pad int32 } +const ( + OPEN_TREE_CLOEXEC = 0x80000 +) + const ( POLLRDHUP = 0x2000 ) @@ -265,6 +269,14 @@ type Sigset_t struct { const _C__NSIG = 0x41 +type Siginfo struct { + Signo int32 + Errno int32 + Code int32 + _ int32 + _ [112]byte +} + type Termios struct { Iflag uint32 Oflag uint32 @@ -324,6 +336,8 @@ type Taskstats struct { Thrashing_count uint64 Thrashing_delay_total uint64 Ac_btime64 uint64 + Compact_count uint64 + Compact_delay_total uint64 } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go b/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go index 4db443016..9e6871d2e 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go @@ -231,6 +231,10 @@ type EpollEvent struct { Pad int32 } +const ( + OPEN_TREE_CLOEXEC = 0x80000 +) + const ( POLLRDHUP = 0x2000 ) @@ -241,6 +245,13 @@ type Sigset_t struct { const _C__NSIG = 0x41 +type Siginfo struct { + Signo int32 + Errno int32 + Code int32 + _ [116]byte +} + type Termios struct { Iflag uint32 Oflag uint32 @@ -302,6 +313,8 @@ type Taskstats struct { Thrashing_count uint64 Thrashing_delay_total uint64 Ac_btime64 uint64 + Compact_count uint64 + Compact_delay_total uint64 } type cpuMask uint32 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go index 3ebcad8a8..b732d1255 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go @@ -234,6 +234,10 @@ type EpollEvent struct { Pad int32 } +const ( + OPEN_TREE_CLOEXEC = 0x80000 +) + const ( POLLRDHUP = 0x2000 ) @@ -244,6 +248,14 @@ type Sigset_t struct { const _C__NSIG = 0x41 +type Siginfo struct { + Signo int32 + Errno int32 + Code int32 + _ int32 + _ [112]byte +} + type Termios struct { Iflag uint32 Oflag uint32 @@ -303,6 +315,8 @@ type Taskstats struct { Thrashing_count uint64 Thrashing_delay_total uint64 Ac_btime64 uint64 + Compact_count uint64 + Compact_delay_total uint64 } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go index 3eb33e48a..5310f71ea 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go @@ -236,6 +236,10 @@ type EpollEvent struct { Pad int32 } +const ( + OPEN_TREE_CLOEXEC = 0x80000 +) + const ( POLLRDHUP = 0x2000 ) @@ -246,6 +250,13 @@ type Sigset_t struct { const _C__NSIG = 0x80 +type Siginfo struct { + Signo int32 + Code int32 + Errno int32 + _ [116]byte +} + type Termios struct { Iflag uint32 Oflag uint32 @@ -307,6 +318,8 @@ type Taskstats struct { Thrashing_count uint64 Thrashing_delay_total uint64 Ac_btime64 uint64 + Compact_count uint64 + Compact_delay_total uint64 } type cpuMask uint32 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go index 79a944672..219bbb126 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go @@ -237,6 +237,10 @@ type EpollEvent struct { Pad int32 } +const ( + OPEN_TREE_CLOEXEC = 0x80000 +) + const ( POLLRDHUP = 0x2000 ) @@ -247,6 +251,14 @@ type Sigset_t struct { const _C__NSIG = 0x80 +type Siginfo struct { + Signo int32 + Code int32 + Errno int32 + _ int32 + _ [112]byte +} + type Termios struct { Iflag uint32 Oflag uint32 @@ -306,6 +318,8 @@ type Taskstats struct { Thrashing_count uint64 Thrashing_delay_total uint64 Ac_btime64 uint64 + Compact_count uint64 + Compact_delay_total uint64 } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go index 8f4b107ca..be9432da5 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go @@ -237,6 +237,10 @@ type EpollEvent struct { Pad int32 } +const ( + OPEN_TREE_CLOEXEC = 0x80000 +) + const ( POLLRDHUP = 0x2000 ) @@ -247,6 +251,14 @@ type Sigset_t struct { const _C__NSIG = 0x80 +type Siginfo struct { + Signo int32 + Code int32 + Errno int32 + _ int32 + _ [112]byte +} + type Termios struct { Iflag uint32 Oflag uint32 @@ -306,6 +318,8 @@ type Taskstats struct { Thrashing_count uint64 Thrashing_delay_total uint64 Ac_btime64 uint64 + Compact_count uint64 + Compact_delay_total uint64 } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go index e4eb21798..d0155a42e 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go @@ -236,6 +236,10 @@ type EpollEvent struct { Pad int32 } +const ( + OPEN_TREE_CLOEXEC = 0x80000 +) + const ( POLLRDHUP = 0x2000 ) @@ -246,6 +250,13 @@ type Sigset_t struct { const _C__NSIG = 0x80 +type Siginfo struct { + Signo int32 + Code int32 + Errno int32 + _ [116]byte +} + type Termios struct { Iflag uint32 Oflag uint32 @@ -307,6 +318,8 @@ type Taskstats struct { Thrashing_count uint64 Thrashing_delay_total uint64 Ac_btime64 uint64 + Compact_count uint64 + Compact_delay_total uint64 } type cpuMask uint32 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go index d5b21f0f7..01c17bcc6 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go @@ -243,6 +243,10 @@ type EpollEvent struct { Pad int32 } +const ( + OPEN_TREE_CLOEXEC = 0x80000 +) + const ( POLLRDHUP = 0x2000 ) @@ -253,6 +257,13 @@ type Sigset_t struct { const _C__NSIG = 0x41 +type Siginfo struct { + Signo int32 + Errno int32 + Code int32 + _ [116]byte +} + type Termios struct { Iflag uint32 Oflag uint32 @@ -314,6 +325,8 @@ type Taskstats struct { Thrashing_count uint64 Thrashing_delay_total uint64 Ac_btime64 uint64 + Compact_count uint64 + Compact_delay_total uint64 } type cpuMask uint32 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go index 5188d142b..944a9c3c7 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go @@ -244,6 +244,10 @@ type EpollEvent struct { Pad int32 } +const ( + OPEN_TREE_CLOEXEC = 0x80000 +) + const ( POLLRDHUP = 0x2000 ) @@ -254,6 +258,14 @@ type Sigset_t struct { const _C__NSIG = 0x41 +type Siginfo struct { + Signo int32 + Errno int32 + Code int32 + _ int32 + _ [112]byte +} + type Termios struct { Iflag uint32 Oflag uint32 @@ -313,6 +325,8 @@ type Taskstats struct { Thrashing_count uint64 Thrashing_delay_total uint64 Ac_btime64 uint64 + Compact_count uint64 + Compact_delay_total uint64 } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go index de4dd4c73..5d2c90e1c 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go @@ -244,6 +244,10 @@ type EpollEvent struct { Pad int32 } +const ( + OPEN_TREE_CLOEXEC = 0x80000 +) + const ( POLLRDHUP = 0x2000 ) @@ -254,6 +258,14 @@ type Sigset_t struct { const _C__NSIG = 0x41 +type Siginfo struct { + Signo int32 + Errno int32 + Code int32 + _ int32 + _ [112]byte +} + type Termios struct { Iflag uint32 Oflag uint32 @@ -313,6 +325,8 @@ type Taskstats struct { Thrashing_count uint64 Thrashing_delay_total uint64 Ac_btime64 uint64 + Compact_count uint64 + Compact_delay_total uint64 } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go index dccbf9b06..e173cb515 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go @@ -262,6 +262,10 @@ type EpollEvent struct { Pad int32 } +const ( + OPEN_TREE_CLOEXEC = 0x80000 +) + const ( POLLRDHUP = 0x2000 ) @@ -272,6 +276,14 @@ type Sigset_t struct { const _C__NSIG = 0x41 +type Siginfo struct { + Signo int32 + Errno int32 + Code int32 + _ int32 + _ [112]byte +} + type Termios struct { Iflag uint32 Oflag uint32 @@ -331,6 +343,8 @@ type Taskstats struct { Thrashing_count uint64 Thrashing_delay_total uint64 Ac_btime64 uint64 + Compact_count uint64 + Compact_delay_total uint64 } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go b/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go index 635880610..6106715d5 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go @@ -210,8 +210,8 @@ type PtraceFpregs struct { } type PtracePer struct { - _ [0]uint64 - _ [32]byte + Control_regs [3]uint64 + _ [8]byte Starting_addr uint64 Ending_addr uint64 Perc_atmid uint16 @@ -257,6 +257,10 @@ type EpollEvent struct { Pad int32 } +const ( + OPEN_TREE_CLOEXEC = 0x80000 +) + const ( POLLRDHUP = 0x2000 ) @@ -267,6 +271,14 @@ type Sigset_t struct { const _C__NSIG = 0x41 +type Siginfo struct { + Signo int32 + Errno int32 + Code int32 + _ int32 + _ [112]byte +} + type Termios struct { Iflag uint32 Oflag uint32 @@ -326,6 +338,8 @@ type Taskstats struct { Thrashing_count uint64 Thrashing_delay_total uint64 Ac_btime64 uint64 + Compact_count uint64 + Compact_delay_total uint64 } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go index 765edc13f..ca7b37b4b 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go @@ -239,6 +239,10 @@ type EpollEvent struct { Pad int32 } +const ( + OPEN_TREE_CLOEXEC = 0x400000 +) + const ( POLLRDHUP = 0x800 ) @@ -249,6 +253,14 @@ type Sigset_t struct { const _C__NSIG = 0x41 +type Siginfo struct { + Signo int32 + Errno int32 + Code int32 + _ int32 + _ [112]byte +} + type Termios struct { Iflag uint32 Oflag uint32 @@ -308,6 +320,8 @@ type Taskstats struct { Thrashing_count uint64 Thrashing_delay_total uint64 Ac_btime64 uint64 + Compact_count uint64 + Compact_delay_total uint64 } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/windows/syscall_windows.go b/vendor/golang.org/x/sys/windows/syscall_windows.go index 200b62a00..ce3075c45 100644 --- a/vendor/golang.org/x/sys/windows/syscall_windows.go +++ b/vendor/golang.org/x/sys/windows/syscall_windows.go @@ -10,6 +10,7 @@ import ( errorspkg "errors" "fmt" "runtime" + "strings" "sync" "syscall" "time" @@ -86,10 +87,8 @@ func StringToUTF16(s string) []uint16 { // s, with a terminating NUL added. If s contains a NUL byte at any // location, it returns (nil, syscall.EINVAL). func UTF16FromString(s string) ([]uint16, error) { - for i := 0; i < len(s); i++ { - if s[i] == 0 { - return nil, syscall.EINVAL - } + if strings.IndexByte(s, 0) != -1 { + return nil, syscall.EINVAL } return utf16.Encode([]rune(s + "\x00")), nil } @@ -186,8 +185,8 @@ func NewCallbackCDecl(fn interface{}) uintptr { //sys GetNamedPipeInfo(pipe Handle, flags *uint32, outSize *uint32, inSize *uint32, maxInstances *uint32) (err error) //sys GetNamedPipeHandleState(pipe Handle, state *uint32, curInstances *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32, userName *uint16, maxUserNameSize uint32) (err error) = GetNamedPipeHandleStateW //sys SetNamedPipeHandleState(pipe Handle, state *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32) (err error) = SetNamedPipeHandleState -//sys ReadFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) (err error) -//sys WriteFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) (err error) +//sys readFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) (err error) = ReadFile +//sys writeFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) (err error) = WriteFile //sys GetOverlappedResult(handle Handle, overlapped *Overlapped, done *uint32, wait bool) (err error) //sys SetFilePointer(handle Handle, lowoffset int32, highoffsetptr *int32, whence uint32) (newlowoffset uint32, err error) [failretval==0xffffffff] //sys CloseHandle(handle Handle) (err error) @@ -363,6 +362,8 @@ func NewCallbackCDecl(fn interface{}) uintptr { //sys SetProcessWorkingSetSizeEx(hProcess Handle, dwMinimumWorkingSetSize uintptr, dwMaximumWorkingSetSize uintptr, flags uint32) (err error) //sys GetCommTimeouts(handle Handle, timeouts *CommTimeouts) (err error) //sys SetCommTimeouts(handle Handle, timeouts *CommTimeouts) (err error) +//sys GetActiveProcessorCount(groupNumber uint16) (ret uint32) +//sys GetMaximumProcessorCount(groupNumber uint16) (ret uint32) // Volume Management Functions //sys DefineDosDevice(flags uint32, deviceName *uint16, targetPath *uint16) (err error) = DefineDosDeviceW @@ -547,12 +548,6 @@ func Read(fd Handle, p []byte) (n int, err error) { } return 0, e } - if raceenabled { - if done > 0 { - raceWriteRange(unsafe.Pointer(&p[0]), int(done)) - } - raceAcquire(unsafe.Pointer(&ioSync)) - } return int(done), nil } @@ -565,12 +560,31 @@ func Write(fd Handle, p []byte) (n int, err error) { if e != nil { return 0, e } - if raceenabled && done > 0 { - raceReadRange(unsafe.Pointer(&p[0]), int(done)) - } return int(done), nil } +func ReadFile(fd Handle, p []byte, done *uint32, overlapped *Overlapped) error { + err := readFile(fd, p, done, overlapped) + if raceenabled { + if *done > 0 { + raceWriteRange(unsafe.Pointer(&p[0]), int(*done)) + } + raceAcquire(unsafe.Pointer(&ioSync)) + } + return err +} + +func WriteFile(fd Handle, p []byte, done *uint32, overlapped *Overlapped) error { + if raceenabled { + raceReleaseMerge(unsafe.Pointer(&ioSync)) + } + err := writeFile(fd, p, done, overlapped) + if raceenabled && *done > 0 { + raceReadRange(unsafe.Pointer(&p[0]), int(*done)) + } + return err +} + var ioSync int64 func Seek(fd Handle, offset int64, whence int) (newoffset int64, err error) { diff --git a/vendor/golang.org/x/sys/windows/types_windows.go b/vendor/golang.org/x/sys/windows/types_windows.go index bb31abda4..e19471c6a 100644 --- a/vendor/golang.org/x/sys/windows/types_windows.go +++ b/vendor/golang.org/x/sys/windows/types_windows.go @@ -3172,3 +3172,5 @@ type ModuleInfo struct { SizeOfImage uint32 EntryPoint uintptr } + +const ALL_PROCESSOR_GROUPS = 0xFFFF diff --git a/vendor/golang.org/x/sys/windows/zsyscall_windows.go b/vendor/golang.org/x/sys/windows/zsyscall_windows.go index 1055d47ed..68f52c1e6 100644 --- a/vendor/golang.org/x/sys/windows/zsyscall_windows.go +++ b/vendor/golang.org/x/sys/windows/zsyscall_windows.go @@ -226,6 +226,7 @@ var ( procFreeLibrary = modkernel32.NewProc("FreeLibrary") procGenerateConsoleCtrlEvent = modkernel32.NewProc("GenerateConsoleCtrlEvent") procGetACP = modkernel32.NewProc("GetACP") + procGetActiveProcessorCount = modkernel32.NewProc("GetActiveProcessorCount") procGetCommTimeouts = modkernel32.NewProc("GetCommTimeouts") procGetCommandLineW = modkernel32.NewProc("GetCommandLineW") procGetComputerNameExW = modkernel32.NewProc("GetComputerNameExW") @@ -251,6 +252,7 @@ var ( procGetLogicalDriveStringsW = modkernel32.NewProc("GetLogicalDriveStringsW") procGetLogicalDrives = modkernel32.NewProc("GetLogicalDrives") procGetLongPathNameW = modkernel32.NewProc("GetLongPathNameW") + procGetMaximumProcessorCount = modkernel32.NewProc("GetMaximumProcessorCount") procGetModuleFileNameW = modkernel32.NewProc("GetModuleFileNameW") procGetModuleHandleExW = modkernel32.NewProc("GetModuleHandleExW") procGetNamedPipeHandleStateW = modkernel32.NewProc("GetNamedPipeHandleStateW") @@ -1967,6 +1969,12 @@ func GetACP() (acp uint32) { return } +func GetActiveProcessorCount(groupNumber uint16) (ret uint32) { + r0, _, _ := syscall.Syscall(procGetActiveProcessorCount.Addr(), 1, uintptr(groupNumber), 0, 0) + ret = uint32(r0) + return +} + func GetCommTimeouts(handle Handle, timeouts *CommTimeouts) (err error) { r1, _, e1 := syscall.Syscall(procGetCommTimeouts.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(timeouts)), 0) if r1 == 0 { @@ -2169,6 +2177,12 @@ func GetLongPathName(path *uint16, buf *uint16, buflen uint32) (n uint32, err er return } +func GetMaximumProcessorCount(groupNumber uint16) (ret uint32) { + r0, _, _ := syscall.Syscall(procGetMaximumProcessorCount.Addr(), 1, uintptr(groupNumber), 0, 0) + ret = uint32(r0) + return +} + func GetModuleFileName(module Handle, filename *uint16, size uint32) (n uint32, err error) { r0, _, e1 := syscall.Syscall(procGetModuleFileNameW.Addr(), 3, uintptr(module), uintptr(unsafe.Pointer(filename)), uintptr(size)) n = uint32(r0) @@ -2747,7 +2761,7 @@ func ReadDirectoryChanges(handle Handle, buf *byte, buflen uint32, watchSubTree return } -func ReadFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) (err error) { +func readFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) (err error) { var _p0 *byte if len(buf) > 0 { _p0 = &buf[0] @@ -3189,7 +3203,7 @@ func WriteConsole(console Handle, buf *uint16, towrite uint32, written *uint32, return } -func WriteFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) (err error) { +func writeFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) (err error) { var _p0 *byte if len(buf) > 0 { _p0 = &buf[0] diff --git a/vendor/golang.org/x/term/codereview.cfg b/vendor/golang.org/x/term/codereview.cfg new file mode 100644 index 000000000..3f8b14b64 --- /dev/null +++ b/vendor/golang.org/x/term/codereview.cfg @@ -0,0 +1 @@ +issuerepo: golang/go diff --git a/vendor/golang.org/x/term/go.mod b/vendor/golang.org/x/term/go.mod deleted file mode 100644 index edf0e5b1d..000000000 --- a/vendor/golang.org/x/term/go.mod +++ /dev/null @@ -1,5 +0,0 @@ -module golang.org/x/term - -go 1.17 - -require golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1 diff --git a/vendor/golang.org/x/term/go.sum b/vendor/golang.org/x/term/go.sum deleted file mode 100644 index ff132135e..000000000 --- a/vendor/golang.org/x/term/go.sum +++ /dev/null @@ -1,2 +0,0 @@ -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1 h1:SrN+KX8Art/Sf4HNj6Zcz06G7VEz+7w9tdXTPOZ7+l4= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= diff --git a/vendor/golang.org/x/term/term.go b/vendor/golang.org/x/term/term.go index 1f6a38fad..d59270880 100644 --- a/vendor/golang.org/x/term/term.go +++ b/vendor/golang.org/x/term/term.go @@ -12,6 +12,8 @@ // panic(err) // } // defer term.Restore(int(os.Stdin.Fd()), oldState) +// +// Note that on non-Unix systems os.Stdin.Fd() may not be 0. package term // State contains the state of a terminal. diff --git a/vendor/golang.org/x/tools/go/internal/gcimporter/iimport.go b/vendor/golang.org/x/tools/go/internal/gcimporter/iimport.go index 1a33cd5c6..84cfb807d 100644 --- a/vendor/golang.org/x/tools/go/internal/gcimporter/iimport.go +++ b/vendor/golang.org/x/tools/go/internal/gcimporter/iimport.go @@ -237,6 +237,15 @@ func iimportCommon(fset *token.FileSet, imports map[string]*types.Package, data pkg.MarkComplete() } + // SetConstraint can't be called if the constraint type is not yet complete. + // When type params are created in the 'P' case of (*importReader).obj(), + // the associated constraint type may not be complete due to recursion. + // Therefore, we defer calling SetConstraint there, and call it here instead + // after all types are complete. + for _, d := range p.later { + typeparams.SetTypeParamConstraint(d.t, d.constraint) + } + for _, typ := range p.interfaceList { typ.Complete() } @@ -244,6 +253,11 @@ func iimportCommon(fset *token.FileSet, imports map[string]*types.Package, data return pkgs, nil } +type setConstraintArgs struct { + t *typeparams.TypeParam + constraint types.Type +} + type iimporter struct { version int ipath string @@ -260,6 +274,9 @@ type iimporter struct { fake fakeFileSet interfaceList []*types.Interface + // Arguments for calls to SetConstraint that are deferred due to recursive types + later []setConstraintArgs + indent int // for tracing support } @@ -458,7 +475,11 @@ func (r *importReader) obj(name string) { } typeparams.MarkImplicit(iface) } - typeparams.SetTypeParamConstraint(t, constraint) + // The constraint type may not be complete, if we + // are in the middle of a type recursion involving type + // constraints. So, we defer SetConstraint until we have + // completely set up all types in ImportData. + r.p.later = append(r.p.later, setConstraintArgs{t: t, constraint: constraint}) case 'V': typ := r.typ() diff --git a/vendor/golang.org/x/tools/internal/gocommand/invoke.go b/vendor/golang.org/x/tools/internal/gocommand/invoke.go index 8659a0c5d..f75336834 100644 --- a/vendor/golang.org/x/tools/internal/gocommand/invoke.go +++ b/vendor/golang.org/x/tools/internal/gocommand/invoke.go @@ -9,7 +9,6 @@ import ( "bytes" "context" "fmt" - exec "golang.org/x/sys/execabs" "io" "os" "regexp" @@ -18,6 +17,8 @@ import ( "sync" "time" + exec "golang.org/x/sys/execabs" + "golang.org/x/tools/internal/event" ) @@ -131,9 +132,16 @@ type Invocation struct { Verb string Args []string BuildFlags []string - ModFlag string - ModFile string - Overlay string + + // If ModFlag is set, the go command is invoked with -mod=ModFlag. + ModFlag string + + // If ModFile is set, the go command is invoked with -modfile=ModFile. + ModFile string + + // If Overlay is set, the go command is invoked with -overlay=Overlay. + Overlay string + // If CleanEnv is set, the invocation will run only with the environment // in Env, not starting with os.Environ. CleanEnv bool diff --git a/vendor/golang.org/x/tools/internal/gocommand/vendor.go b/vendor/golang.org/x/tools/internal/gocommand/vendor.go index 5e75bd6d8..2d3d408c0 100644 --- a/vendor/golang.org/x/tools/internal/gocommand/vendor.go +++ b/vendor/golang.org/x/tools/internal/gocommand/vendor.go @@ -38,10 +38,10 @@ var modFlagRegexp = regexp.MustCompile(`-mod[ =](\w+)`) // with the supplied context.Context and Invocation. The Invocation can contain pre-defined fields, // of which only Verb and Args are modified to run the appropriate Go command. // Inspired by setDefaultBuildMod in modload/init.go -func VendorEnabled(ctx context.Context, inv Invocation, r *Runner) (*ModuleJSON, bool, error) { +func VendorEnabled(ctx context.Context, inv Invocation, r *Runner) (bool, *ModuleJSON, error) { mainMod, go114, err := getMainModuleAnd114(ctx, inv, r) if err != nil { - return nil, false, err + return false, nil, err } // We check the GOFLAGS to see if there is anything overridden or not. @@ -49,7 +49,7 @@ func VendorEnabled(ctx context.Context, inv Invocation, r *Runner) (*ModuleJSON, inv.Args = []string{"GOFLAGS"} stdout, err := r.Run(ctx, inv) if err != nil { - return nil, false, err + return false, nil, err } goflags := string(bytes.TrimSpace(stdout.Bytes())) matches := modFlagRegexp.FindStringSubmatch(goflags) @@ -57,25 +57,27 @@ func VendorEnabled(ctx context.Context, inv Invocation, r *Runner) (*ModuleJSON, if len(matches) != 0 { modFlag = matches[1] } - if modFlag != "" { - // Don't override an explicit '-mod=' argument. - return mainMod, modFlag == "vendor", nil + // Don't override an explicit '-mod=' argument. + if modFlag == "vendor" { + return true, mainMod, nil + } else if modFlag != "" { + return false, nil, nil } if mainMod == nil || !go114 { - return mainMod, false, nil + return false, nil, nil } // Check 1.14's automatic vendor mode. if fi, err := os.Stat(filepath.Join(mainMod.Dir, "vendor")); err == nil && fi.IsDir() { if mainMod.GoVersion != "" && semver.Compare("v"+mainMod.GoVersion, "v1.14") >= 0 { // The Go version is at least 1.14, and a vendor directory exists. // Set -mod=vendor by default. - return mainMod, true, nil + return true, mainMod, nil } } - return mainMod, false, nil + return false, nil, nil } -// getMainModuleAnd114 gets the main module's information and whether the +// getMainModuleAnd114 gets one of the main modules' information and whether the // go command in use is 1.14+. This is the information needed to figure out // if vendoring should be enabled. func getMainModuleAnd114(ctx context.Context, inv Invocation, r *Runner) (*ModuleJSON, bool, error) { diff --git a/vendor/golang.org/x/tools/internal/imports/imports.go b/vendor/golang.org/x/tools/internal/imports/imports.go index 2815edc33..25973989e 100644 --- a/vendor/golang.org/x/tools/internal/imports/imports.go +++ b/vendor/golang.org/x/tools/internal/imports/imports.go @@ -306,7 +306,7 @@ func matchSpace(orig []byte, src []byte) []byte { return b.Bytes() } -var impLine = regexp.MustCompile(`^\s+(?:[\w\.]+\s+)?"(.+)"`) +var impLine = regexp.MustCompile(`^\s+(?:[\w\.]+\s+)?"(.+?)"`) func addImportSpaces(r io.Reader, breaks []string) ([]byte, error) { var out bytes.Buffer diff --git a/vendor/golang.org/x/tools/internal/imports/mod.go b/vendor/golang.org/x/tools/internal/imports/mod.go index dff6d5536..2bcf41f5f 100644 --- a/vendor/golang.org/x/tools/internal/imports/mod.go +++ b/vendor/golang.org/x/tools/internal/imports/mod.go @@ -34,7 +34,8 @@ type ModuleResolver struct { scannedRoots map[gopathwalk.Root]bool initialized bool - main *gocommand.ModuleJSON + mains []*gocommand.ModuleJSON + mainByDir map[string]*gocommand.ModuleJSON modsByModPath []*gocommand.ModuleJSON // All modules, ordered by # of path components in module Path... modsByDir []*gocommand.ModuleJSON // ...or Dir. @@ -69,21 +70,21 @@ func (r *ModuleResolver) init() error { Logf: r.env.Logf, WorkingDir: r.env.WorkingDir, } - mainMod, vendorEnabled, err := gocommand.VendorEnabled(context.TODO(), inv, r.env.GocmdRunner) + vendorEnabled, mainModVendor, err := gocommand.VendorEnabled(context.TODO(), inv, r.env.GocmdRunner) if err != nil { return err } - if mainMod != nil && vendorEnabled { + if mainModVendor != nil && vendorEnabled { // Vendor mode is on, so all the non-Main modules are irrelevant, // and we need to search /vendor for everything. - r.main = mainMod + r.mains = []*gocommand.ModuleJSON{mainModVendor} r.dummyVendorMod = &gocommand.ModuleJSON{ Path: "", - Dir: filepath.Join(mainMod.Dir, "vendor"), + Dir: filepath.Join(mainModVendor.Dir, "vendor"), } - r.modsByModPath = []*gocommand.ModuleJSON{mainMod, r.dummyVendorMod} - r.modsByDir = []*gocommand.ModuleJSON{mainMod, r.dummyVendorMod} + r.modsByModPath = []*gocommand.ModuleJSON{mainModVendor, r.dummyVendorMod} + r.modsByDir = []*gocommand.ModuleJSON{mainModVendor, r.dummyVendorMod} } else { // Vendor mode is off, so run go list -m ... to find everything. err := r.initAllMods() @@ -122,8 +123,10 @@ func (r *ModuleResolver) init() error { r.roots = []gopathwalk.Root{ {filepath.Join(goenv["GOROOT"], "/src"), gopathwalk.RootGOROOT}, } - if r.main != nil { - r.roots = append(r.roots, gopathwalk.Root{r.main.Dir, gopathwalk.RootCurrentModule}) + r.mainByDir = make(map[string]*gocommand.ModuleJSON) + for _, main := range r.mains { + r.roots = append(r.roots, gopathwalk.Root{main.Dir, gopathwalk.RootCurrentModule}) + r.mainByDir[main.Dir] = main } if vendorEnabled { r.roots = append(r.roots, gopathwalk.Root{r.dummyVendorMod.Dir, gopathwalk.RootOther}) @@ -189,7 +192,7 @@ func (r *ModuleResolver) initAllMods() error { r.modsByModPath = append(r.modsByModPath, mod) r.modsByDir = append(r.modsByDir, mod) if mod.Main { - r.main = mod + r.mains = append(r.mains, mod) } } return nil @@ -609,7 +612,7 @@ func (r *ModuleResolver) scanDirForPackage(root gopathwalk.Root, dir string) dir } switch root.Type { case gopathwalk.RootCurrentModule: - importPath = path.Join(r.main.Path, filepath.ToSlash(subdir)) + importPath = path.Join(r.mainByDir[root.Path].Path, filepath.ToSlash(subdir)) case gopathwalk.RootModuleCache: matches := modCacheRegexp.FindStringSubmatch(subdir) if len(matches) == 0 { diff --git a/vendor/golang.org/x/tools/internal/typeparams/common.go b/vendor/golang.org/x/tools/internal/typeparams/common.go index 1222764b6..ab6b30b83 100644 --- a/vendor/golang.org/x/tools/internal/typeparams/common.go +++ b/vendor/golang.org/x/tools/internal/typeparams/common.go @@ -77,3 +77,104 @@ func IsTypeParam(t types.Type) bool { _, ok := t.(*TypeParam) return ok } + +// OriginMethod returns the origin method associated with the method fn. +// For methods on a non-generic receiver base type, this is just +// fn. However, for methods with a generic receiver, OriginMethod returns the +// corresponding method in the method set of the origin type. +// +// As a special case, if fn is not a method (has no receiver), OriginMethod +// returns fn. +func OriginMethod(fn *types.Func) *types.Func { + recv := fn.Type().(*types.Signature).Recv() + if recv == nil { + + return fn + } + base := recv.Type() + p, isPtr := base.(*types.Pointer) + if isPtr { + base = p.Elem() + } + named, isNamed := base.(*types.Named) + if !isNamed { + // Receiver is a *types.Interface. + return fn + } + if ForNamed(named).Len() == 0 { + // Receiver base has no type parameters, so we can avoid the lookup below. + return fn + } + orig := NamedTypeOrigin(named) + gfn, _, _ := types.LookupFieldOrMethod(orig, true, fn.Pkg(), fn.Name()) + return gfn.(*types.Func) +} + +// GenericAssignableTo is a generalization of types.AssignableTo that +// implements the following rule for uninstantiated generic types: +// +// If V and T are generic named types, then V is considered assignable to T if, +// for every possible instantation of V[A_1, ..., A_N], the instantiation +// T[A_1, ..., A_N] is valid and V[A_1, ..., A_N] implements T[A_1, ..., A_N]. +// +// If T has structural constraints, they must be satisfied by V. +// +// For example, consider the following type declarations: +// +// type Interface[T any] interface { +// Accept(T) +// } +// +// type Container[T any] struct { +// Element T +// } +// +// func (c Container[T]) Accept(t T) { c.Element = t } +// +// In this case, GenericAssignableTo reports that instantiations of Container +// are assignable to the corresponding instantiation of Interface. +func GenericAssignableTo(ctxt *Context, V, T types.Type) bool { + // If V and T are not both named, or do not have matching non-empty type + // parameter lists, fall back on types.AssignableTo. + + VN, Vnamed := V.(*types.Named) + TN, Tnamed := T.(*types.Named) + if !Vnamed || !Tnamed { + return types.AssignableTo(V, T) + } + + vtparams := ForNamed(VN) + ttparams := ForNamed(TN) + if vtparams.Len() == 0 || vtparams.Len() != ttparams.Len() || NamedTypeArgs(VN).Len() != 0 || NamedTypeArgs(TN).Len() != 0 { + return types.AssignableTo(V, T) + } + + // V and T have the same (non-zero) number of type params. Instantiate both + // with the type parameters of V. This must always succeed for V, and will + // succeed for T if and only if the type set of each type parameter of V is a + // subset of the type set of the corresponding type parameter of T, meaning + // that every instantiation of V corresponds to a valid instantiation of T. + + // Minor optimization: ensure we share a context across the two + // instantiations below. + if ctxt == nil { + ctxt = NewContext() + } + + var targs []types.Type + for i := 0; i < vtparams.Len(); i++ { + targs = append(targs, vtparams.At(i)) + } + + vinst, err := Instantiate(ctxt, V, targs, true) + if err != nil { + panic("type parameters should satisfy their own constraints") + } + + tinst, err := Instantiate(ctxt, T, targs, true) + if err != nil { + return false + } + + return types.AssignableTo(vinst, tinst) +} diff --git a/vendor/golang.org/x/tools/internal/typeparams/typeparams_go117.go b/vendor/golang.org/x/tools/internal/typeparams/typeparams_go117.go index 5fd3fc351..b4788978f 100644 --- a/vendor/golang.org/x/tools/internal/typeparams/typeparams_go117.go +++ b/vendor/golang.org/x/tools/internal/typeparams/typeparams_go117.go @@ -185,6 +185,11 @@ func GetInstances(info *types.Info) map[*ast.Ident]Instance { return nil } // this Go version. type Context struct{} +// NewContext returns a placeholder Context instance. +func NewContext() *Context { + return &Context{} +} + // Instantiate is unsupported on this Go version, and panics. func Instantiate(ctxt *Context, typ types.Type, targs []types.Type, validate bool) (types.Type, error) { unsupported() diff --git a/vendor/golang.org/x/tools/internal/typeparams/typeparams_go118.go b/vendor/golang.org/x/tools/internal/typeparams/typeparams_go118.go index 7470aed8c..114a36b86 100644 --- a/vendor/golang.org/x/tools/internal/typeparams/typeparams_go118.go +++ b/vendor/golang.org/x/tools/internal/typeparams/typeparams_go118.go @@ -140,6 +140,11 @@ func GetInstances(info *types.Info) map[*ast.Ident]Instance { // Context is an alias for types.Context. type Context = types.Context +// NewContext calls types.NewContext. +func NewContext() *Context { + return types.NewContext() +} + // Instantiate calls types.Instantiate. func Instantiate(ctxt *Context, typ types.Type, targs []types.Type, validate bool) (types.Type, error) { return types.Instantiate(ctxt, typ, targs, validate) diff --git a/vendor/golang.org/x/tools/internal/typesinternal/errorcode.go b/vendor/golang.org/x/tools/internal/typesinternal/errorcode.go index fa2834e2a..d38ee3c27 100644 --- a/vendor/golang.org/x/tools/internal/typesinternal/errorcode.go +++ b/vendor/golang.org/x/tools/internal/typesinternal/errorcode.go @@ -1365,4 +1365,162 @@ const ( // return i // } InvalidGo + + // All codes below were added in Go 1.17. + + /* decl */ + + // BadDecl occurs when a declaration has invalid syntax. + BadDecl + + // RepeatedDecl occurs when an identifier occurs more than once on the left + // hand side of a short variable declaration. + // + // Example: + // func _() { + // x, y, y := 1, 2, 3 + // } + RepeatedDecl + + /* unsafe */ + + // InvalidUnsafeAdd occurs when unsafe.Add is called with a + // length argument that is not of integer type. + // + // Example: + // import "unsafe" + // + // var p unsafe.Pointer + // var _ = unsafe.Add(p, float64(1)) + InvalidUnsafeAdd + + // InvalidUnsafeSlice occurs when unsafe.Slice is called with a + // pointer argument that is not of pointer type or a length argument + // that is not of integer type, negative, or out of bounds. + // + // Example: + // import "unsafe" + // + // var x int + // var _ = unsafe.Slice(x, 1) + // + // Example: + // import "unsafe" + // + // var x int + // var _ = unsafe.Slice(&x, float64(1)) + // + // Example: + // import "unsafe" + // + // var x int + // var _ = unsafe.Slice(&x, -1) + // + // Example: + // import "unsafe" + // + // var x int + // var _ = unsafe.Slice(&x, uint64(1) << 63) + InvalidUnsafeSlice + + // All codes below were added in Go 1.18. + + /* features */ + + // UnsupportedFeature occurs when a language feature is used that is not + // supported at this Go version. + UnsupportedFeature + + /* type params */ + + // NotAGenericType occurs when a non-generic type is used where a generic + // type is expected: in type or function instantiation. + // + // Example: + // type T int + // + // var _ T[int] + NotAGenericType + + // WrongTypeArgCount occurs when a type or function is instantiated with an + // incorrent number of type arguments, including when a generic type or + // function is used without instantiation. + // + // Errors inolving failed type inference are assigned other error codes. + // + // Example: + // type T[p any] int + // + // var _ T[int, string] + // + // Example: + // func f[T any]() {} + // + // var x = f + WrongTypeArgCount + + // CannotInferTypeArgs occurs when type or function type argument inference + // fails to infer all type arguments. + // + // Example: + // func f[T any]() {} + // + // func _() { + // f() + // } + // + // Example: + // type N[P, Q any] struct{} + // + // var _ N[int] + CannotInferTypeArgs + + // InvalidTypeArg occurs when a type argument does not satisfy its + // corresponding type parameter constraints. + // + // Example: + // type T[P ~int] struct{} + // + // var _ T[string] + InvalidTypeArg // arguments? InferenceFailed + + // InvalidInstanceCycle occurs when an invalid cycle is detected + // within the instantiation graph. + // + // Example: + // func f[T any]() { f[*T]() } + InvalidInstanceCycle + + // InvalidUnion occurs when an embedded union or approximation element is + // not valid. + // + // Example: + // type _ interface { + // ~int | interface{ m() } + // } + InvalidUnion + + // MisplacedConstraintIface occurs when a constraint-type interface is used + // outside of constraint position. + // + // Example: + // type I interface { ~int } + // + // var _ I + MisplacedConstraintIface + + // InvalidMethodTypeParams occurs when methods have type parameters. + // + // It cannot be encountered with an AST parsed using go/parser. + InvalidMethodTypeParams + + // MisplacedTypeParam occurs when a type parameter is used in a place where + // it is not permitted. + // + // Example: + // type T[P any] P + // + // Example: + // type T[P any] struct{ *P } + MisplacedTypeParam ) diff --git a/vendor/golang.org/x/tools/internal/typesinternal/errorcode_string.go b/vendor/golang.org/x/tools/internal/typesinternal/errorcode_string.go index 3e5842a5f..de90e9515 100644 --- a/vendor/golang.org/x/tools/internal/typesinternal/errorcode_string.go +++ b/vendor/golang.org/x/tools/internal/typesinternal/errorcode_string.go @@ -138,11 +138,25 @@ func _() { _ = x[UnusedResults-128] _ = x[InvalidDefer-129] _ = x[InvalidGo-130] + _ = x[BadDecl-131] + _ = x[RepeatedDecl-132] + _ = x[InvalidUnsafeAdd-133] + _ = x[InvalidUnsafeSlice-134] + _ = x[UnsupportedFeature-135] + _ = x[NotAGenericType-136] + _ = x[WrongTypeArgCount-137] + _ = x[CannotInferTypeArgs-138] + _ = x[InvalidTypeArg-139] + _ = x[InvalidInstanceCycle-140] + _ = x[InvalidUnion-141] + _ = x[MisplacedConstraintIface-142] + _ = x[InvalidMethodTypeParams-143] + _ = x[MisplacedTypeParam-144] } -const _ErrorCode_name = "TestBlankPkgNameMismatchedPkgNameInvalidPkgUseBadImportPathBrokenImportImportCRenamedUnusedImportInvalidInitCycleDuplicateDeclInvalidDeclCycleInvalidTypeCycleInvalidConstInitInvalidConstValInvalidConstTypeUntypedNilWrongAssignCountUnassignableOperandNoNewVarMultiValAssignOpInvalidIfaceAssignInvalidChanAssignIncompatibleAssignUnaddressableFieldAssignNotATypeInvalidArrayLenBlankIfaceMethodIncomparableMapKeyInvalidIfaceEmbedInvalidPtrEmbedBadRecvInvalidRecvDuplicateFieldAndMethodDuplicateMethodInvalidBlankInvalidIotaMissingInitBodyInvalidInitSigInvalidInitDeclInvalidMainDeclTooManyValuesNotAnExprTruncatedFloatNumericOverflowUndefinedOpMismatchedTypesDivByZeroNonNumericIncDecUnaddressableOperandInvalidIndirectionNonIndexableOperandInvalidIndexSwappedSliceIndicesNonSliceableOperandInvalidSliceExprInvalidShiftCountInvalidShiftOperandInvalidReceiveInvalidSendDuplicateLitKeyMissingLitKeyInvalidLitIndexOversizeArrayLitMixedStructLitInvalidStructLitMissingLitFieldDuplicateLitFieldUnexportedLitFieldInvalidLitFieldUntypedLitInvalidLitAmbiguousSelectorUndeclaredImportedNameUnexportedNameUndeclaredNameMissingFieldOrMethodBadDotDotDotSyntaxNonVariadicDotDotDotMisplacedDotDotDotInvalidDotDotDotOperandInvalidDotDotDotUncalledBuiltinInvalidAppendInvalidCapInvalidCloseInvalidCopyInvalidComplexInvalidDeleteInvalidImagInvalidLenSwappedMakeArgsInvalidMakeInvalidRealInvalidAssertImpossibleAssertInvalidConversionInvalidUntypedConversionBadOffsetofSyntaxInvalidOffsetofUnusedExprUnusedVarMissingReturnWrongResultCountOutOfScopeResultInvalidCondInvalidPostDeclInvalidChanRangeInvalidIterVarInvalidRangeExprMisplacedBreakMisplacedContinueMisplacedFallthroughDuplicateCaseDuplicateDefaultBadTypeKeywordInvalidTypeSwitchInvalidExprSwitchInvalidSelectCaseUndeclaredLabelDuplicateLabelMisplacedLabelUnusedLabelJumpOverDeclJumpIntoBlockInvalidMethodExprWrongArgCountInvalidCallUnusedResultsInvalidDeferInvalidGo" +const _ErrorCode_name = "TestBlankPkgNameMismatchedPkgNameInvalidPkgUseBadImportPathBrokenImportImportCRenamedUnusedImportInvalidInitCycleDuplicateDeclInvalidDeclCycleInvalidTypeCycleInvalidConstInitInvalidConstValInvalidConstTypeUntypedNilWrongAssignCountUnassignableOperandNoNewVarMultiValAssignOpInvalidIfaceAssignInvalidChanAssignIncompatibleAssignUnaddressableFieldAssignNotATypeInvalidArrayLenBlankIfaceMethodIncomparableMapKeyInvalidIfaceEmbedInvalidPtrEmbedBadRecvInvalidRecvDuplicateFieldAndMethodDuplicateMethodInvalidBlankInvalidIotaMissingInitBodyInvalidInitSigInvalidInitDeclInvalidMainDeclTooManyValuesNotAnExprTruncatedFloatNumericOverflowUndefinedOpMismatchedTypesDivByZeroNonNumericIncDecUnaddressableOperandInvalidIndirectionNonIndexableOperandInvalidIndexSwappedSliceIndicesNonSliceableOperandInvalidSliceExprInvalidShiftCountInvalidShiftOperandInvalidReceiveInvalidSendDuplicateLitKeyMissingLitKeyInvalidLitIndexOversizeArrayLitMixedStructLitInvalidStructLitMissingLitFieldDuplicateLitFieldUnexportedLitFieldInvalidLitFieldUntypedLitInvalidLitAmbiguousSelectorUndeclaredImportedNameUnexportedNameUndeclaredNameMissingFieldOrMethodBadDotDotDotSyntaxNonVariadicDotDotDotMisplacedDotDotDotInvalidDotDotDotOperandInvalidDotDotDotUncalledBuiltinInvalidAppendInvalidCapInvalidCloseInvalidCopyInvalidComplexInvalidDeleteInvalidImagInvalidLenSwappedMakeArgsInvalidMakeInvalidRealInvalidAssertImpossibleAssertInvalidConversionInvalidUntypedConversionBadOffsetofSyntaxInvalidOffsetofUnusedExprUnusedVarMissingReturnWrongResultCountOutOfScopeResultInvalidCondInvalidPostDeclInvalidChanRangeInvalidIterVarInvalidRangeExprMisplacedBreakMisplacedContinueMisplacedFallthroughDuplicateCaseDuplicateDefaultBadTypeKeywordInvalidTypeSwitchInvalidExprSwitchInvalidSelectCaseUndeclaredLabelDuplicateLabelMisplacedLabelUnusedLabelJumpOverDeclJumpIntoBlockInvalidMethodExprWrongArgCountInvalidCallUnusedResultsInvalidDeferInvalidGoBadDeclRepeatedDeclInvalidUnsafeAddInvalidUnsafeSliceUnsupportedFeatureNotAGenericTypeWrongTypeArgCountCannotInferTypeArgsInvalidTypeArgInvalidInstanceCycleInvalidUnionMisplacedConstraintIfaceInvalidMethodTypeParamsMisplacedTypeParam" -var _ErrorCode_index = [...]uint16{0, 4, 16, 33, 46, 59, 71, 85, 97, 113, 126, 142, 158, 174, 189, 205, 215, 231, 250, 258, 274, 292, 309, 327, 351, 359, 374, 390, 408, 425, 440, 447, 458, 481, 496, 508, 519, 534, 548, 563, 578, 591, 600, 614, 629, 640, 655, 664, 680, 700, 718, 737, 749, 768, 787, 803, 820, 839, 853, 864, 879, 892, 907, 923, 937, 953, 968, 985, 1003, 1018, 1028, 1038, 1055, 1077, 1091, 1105, 1125, 1143, 1163, 1181, 1204, 1220, 1235, 1248, 1258, 1270, 1281, 1295, 1308, 1319, 1329, 1344, 1355, 1366, 1379, 1395, 1412, 1436, 1453, 1468, 1478, 1487, 1500, 1516, 1532, 1543, 1558, 1574, 1588, 1604, 1618, 1635, 1655, 1668, 1684, 1698, 1715, 1732, 1749, 1764, 1778, 1792, 1803, 1815, 1828, 1845, 1858, 1869, 1882, 1894, 1903} +var _ErrorCode_index = [...]uint16{0, 4, 16, 33, 46, 59, 71, 85, 97, 113, 126, 142, 158, 174, 189, 205, 215, 231, 250, 258, 274, 292, 309, 327, 351, 359, 374, 390, 408, 425, 440, 447, 458, 481, 496, 508, 519, 534, 548, 563, 578, 591, 600, 614, 629, 640, 655, 664, 680, 700, 718, 737, 749, 768, 787, 803, 820, 839, 853, 864, 879, 892, 907, 923, 937, 953, 968, 985, 1003, 1018, 1028, 1038, 1055, 1077, 1091, 1105, 1125, 1143, 1163, 1181, 1204, 1220, 1235, 1248, 1258, 1270, 1281, 1295, 1308, 1319, 1329, 1344, 1355, 1366, 1379, 1395, 1412, 1436, 1453, 1468, 1478, 1487, 1500, 1516, 1532, 1543, 1558, 1574, 1588, 1604, 1618, 1635, 1655, 1668, 1684, 1698, 1715, 1732, 1749, 1764, 1778, 1792, 1803, 1815, 1828, 1845, 1858, 1869, 1882, 1894, 1903, 1910, 1922, 1938, 1956, 1974, 1989, 2006, 2025, 2039, 2059, 2071, 2095, 2118, 2136} func (i ErrorCode) String() string { i -= 1 diff --git a/vendor/golang.org/x/tools/internal/typesinternal/types.go b/vendor/golang.org/x/tools/internal/typesinternal/types.go index 7c77c2fbc..ce7d4351b 100644 --- a/vendor/golang.org/x/tools/internal/typesinternal/types.go +++ b/vendor/golang.org/x/tools/internal/typesinternal/types.go @@ -48,3 +48,5 @@ func ReadGo116ErrorData(err types.Error) (code ErrorCode, start, end token.Pos, } return ErrorCode(data[0]), token.Pos(data[1]), token.Pos(data[2]), true } + +var SetGoVersion = func(conf *types.Config, version string) bool { return false } diff --git a/vendor/golang.org/x/tools/internal/typesinternal/types_118.go b/vendor/golang.org/x/tools/internal/typesinternal/types_118.go new file mode 100644 index 000000000..a42b072a6 --- /dev/null +++ b/vendor/golang.org/x/tools/internal/typesinternal/types_118.go @@ -0,0 +1,19 @@ +// Copyright 2021 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build go1.18 +// +build go1.18 + +package typesinternal + +import ( + "go/types" +) + +func init() { + SetGoVersion = func(conf *types.Config, version string) bool { + conf.GoVersion = version + return true + } +} diff --git a/vendor/golang.org/x/xerrors/doc.go b/vendor/golang.org/x/xerrors/doc.go index eef99d9d5..2ef99f5a8 100644 --- a/vendor/golang.org/x/xerrors/doc.go +++ b/vendor/golang.org/x/xerrors/doc.go @@ -5,7 +5,8 @@ // Package xerrors implements functions to manipulate errors. // // This package is based on the Go 2 proposal for error values: -// https://golang.org/design/29934-error-values +// +// https://golang.org/design/29934-error-values // // These functions were incorporated into the standard library's errors package // in Go 1.13: diff --git a/vendor/golang.org/x/xerrors/fmt.go b/vendor/golang.org/x/xerrors/fmt.go index 829862ddf..6df18669f 100644 --- a/vendor/golang.org/x/xerrors/fmt.go +++ b/vendor/golang.org/x/xerrors/fmt.go @@ -33,6 +33,8 @@ const percentBangString = "%!" // It is invalid to include more than one %w verb or to supply it with an // operand that does not implement the error interface. The %w verb is otherwise // a synonym for %v. +// +// Deprecated: As of Go 1.13, use fmt.Errorf instead. func Errorf(format string, a ...interface{}) error { format = formatPlusW(format) // Support a ": %[wsv]" suffix, which works well with xerrors.Formatter. diff --git a/vendor/golang.org/x/xerrors/go.mod b/vendor/golang.org/x/xerrors/go.mod deleted file mode 100644 index 870d4f612..000000000 --- a/vendor/golang.org/x/xerrors/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module golang.org/x/xerrors - -go 1.11 diff --git a/vendor/golang.org/x/xerrors/wrap.go b/vendor/golang.org/x/xerrors/wrap.go index 9a3b51037..9842758ca 100644 --- a/vendor/golang.org/x/xerrors/wrap.go +++ b/vendor/golang.org/x/xerrors/wrap.go @@ -35,6 +35,8 @@ func (e noWrapper) FormatError(p Printer) (next error) { // Unwrap returns the result of calling the Unwrap method on err, if err implements // Unwrap. Otherwise, Unwrap returns nil. +// +// Deprecated: As of Go 1.13, use errors.Unwrap instead. func Unwrap(err error) error { u, ok := err.(Wrapper) if !ok { @@ -47,6 +49,8 @@ func Unwrap(err error) error { // // An error is considered to match a target if it is equal to that target or if // it implements a method Is(error) bool such that Is(target) returns true. +// +// Deprecated: As of Go 1.13, use errors.Is instead. func Is(err, target error) bool { if target == nil { return err == target @@ -77,6 +81,8 @@ func Is(err, target error) bool { // // The As method should set the target to its value and return true if err // matches the type to which target points. +// +// Deprecated: As of Go 1.13, use errors.As instead. func As(err error, target interface{}) bool { if target == nil { panic("errors: target cannot be nil") diff --git a/vendor/gomodules.xyz/jsonpatch/v2/go.mod b/vendor/gomodules.xyz/jsonpatch/v2/go.mod deleted file mode 100644 index 0395a5805..000000000 --- a/vendor/gomodules.xyz/jsonpatch/v2/go.mod +++ /dev/null @@ -1,8 +0,0 @@ -module gomodules.xyz/jsonpatch/v2 - -go 1.12 - -require ( - github.com/evanphx/json-patch v0.5.2 - github.com/stretchr/testify v1.3.0 -) diff --git a/vendor/gomodules.xyz/jsonpatch/v2/go.sum b/vendor/gomodules.xyz/jsonpatch/v2/go.sum deleted file mode 100644 index d931385bc..000000000 --- a/vendor/gomodules.xyz/jsonpatch/v2/go.sum +++ /dev/null @@ -1,12 +0,0 @@ -github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/evanphx/json-patch v0.5.2 h1:xVCHIVMUu1wtM/VkR9jVZ45N3FhZfYMMYGorLCR8P3k= -github.com/evanphx/json-patch v0.5.2/go.mod h1:ZWS5hhDbVDyob71nXKNL0+PWn6ToqBHMikGIFbs31qQ= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= diff --git a/vendor/google.golang.org/protobuf/encoding/protowire/wire.go b/vendor/google.golang.org/protobuf/encoding/protowire/wire.go index a427f8b70..9c61112f5 100644 --- a/vendor/google.golang.org/protobuf/encoding/protowire/wire.go +++ b/vendor/google.golang.org/protobuf/encoding/protowire/wire.go @@ -21,10 +21,11 @@ import ( type Number int32 const ( - MinValidNumber Number = 1 - FirstReservedNumber Number = 19000 - LastReservedNumber Number = 19999 - MaxValidNumber Number = 1<<29 - 1 + MinValidNumber Number = 1 + FirstReservedNumber Number = 19000 + LastReservedNumber Number = 19999 + MaxValidNumber Number = 1<<29 - 1 + DefaultRecursionLimit = 10000 ) // IsValid reports whether the field number is semantically valid. @@ -55,6 +56,7 @@ const ( errCodeOverflow errCodeReserved errCodeEndGroup + errCodeRecursionDepth ) var ( @@ -112,6 +114,10 @@ func ConsumeField(b []byte) (Number, Type, int) { // When parsing a group, the length includes the end group marker and // the end group is verified to match the starting field number. func ConsumeFieldValue(num Number, typ Type, b []byte) (n int) { + return consumeFieldValueD(num, typ, b, DefaultRecursionLimit) +} + +func consumeFieldValueD(num Number, typ Type, b []byte, depth int) (n int) { switch typ { case VarintType: _, n = ConsumeVarint(b) @@ -126,6 +132,9 @@ func ConsumeFieldValue(num Number, typ Type, b []byte) (n int) { _, n = ConsumeBytes(b) return n case StartGroupType: + if depth < 0 { + return errCodeRecursionDepth + } n0 := len(b) for { num2, typ2, n := ConsumeTag(b) @@ -140,7 +149,7 @@ func ConsumeFieldValue(num Number, typ Type, b []byte) (n int) { return n0 - len(b) } - n = ConsumeFieldValue(num2, typ2, b) + n = consumeFieldValueD(num2, typ2, b, depth-1) if n < 0 { return n // forward error code } diff --git a/vendor/google.golang.org/protobuf/internal/encoding/text/decode.go b/vendor/google.golang.org/protobuf/internal/encoding/text/decode.go index eb10ea102..37803773f 100644 --- a/vendor/google.golang.org/protobuf/internal/encoding/text/decode.go +++ b/vendor/google.golang.org/protobuf/internal/encoding/text/decode.go @@ -381,7 +381,7 @@ func (d *Decoder) currentOpenKind() (Kind, byte) { case '[': return ListOpen, ']' } - panic(fmt.Sprintf("Decoder: openStack contains invalid byte %s", string(openCh))) + panic(fmt.Sprintf("Decoder: openStack contains invalid byte %c", openCh)) } func (d *Decoder) pushOpenStack(ch byte) { diff --git a/vendor/google.golang.org/protobuf/internal/errors/is_go112.go b/vendor/google.golang.org/protobuf/internal/errors/is_go112.go index f90e909b3..fbcd34920 100644 --- a/vendor/google.golang.org/protobuf/internal/errors/is_go112.go +++ b/vendor/google.golang.org/protobuf/internal/errors/is_go112.go @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build !go1.13 // +build !go1.13 package errors diff --git a/vendor/google.golang.org/protobuf/internal/errors/is_go113.go b/vendor/google.golang.org/protobuf/internal/errors/is_go113.go index dc05f4191..5e72f1cde 100644 --- a/vendor/google.golang.org/protobuf/internal/errors/is_go113.go +++ b/vendor/google.golang.org/protobuf/internal/errors/is_go113.go @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build go1.13 // +build go1.13 package errors diff --git a/vendor/google.golang.org/protobuf/internal/flags/proto_legacy_disable.go b/vendor/google.golang.org/protobuf/internal/flags/proto_legacy_disable.go index a72995f02..bda8e8cf3 100644 --- a/vendor/google.golang.org/protobuf/internal/flags/proto_legacy_disable.go +++ b/vendor/google.golang.org/protobuf/internal/flags/proto_legacy_disable.go @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build !protolegacy // +build !protolegacy package flags diff --git a/vendor/google.golang.org/protobuf/internal/flags/proto_legacy_enable.go b/vendor/google.golang.org/protobuf/internal/flags/proto_legacy_enable.go index 772e2f0e4..6d8d9bd6b 100644 --- a/vendor/google.golang.org/protobuf/internal/flags/proto_legacy_enable.go +++ b/vendor/google.golang.org/protobuf/internal/flags/proto_legacy_enable.go @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build protolegacy // +build protolegacy package flags diff --git a/vendor/google.golang.org/protobuf/internal/impl/codec_map_go111.go b/vendor/google.golang.org/protobuf/internal/impl/codec_map_go111.go index 2706bb67f..4b15493f2 100644 --- a/vendor/google.golang.org/protobuf/internal/impl/codec_map_go111.go +++ b/vendor/google.golang.org/protobuf/internal/impl/codec_map_go111.go @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build !go1.12 // +build !go1.12 package impl diff --git a/vendor/google.golang.org/protobuf/internal/impl/codec_map_go112.go b/vendor/google.golang.org/protobuf/internal/impl/codec_map_go112.go index 1533ef600..0b31b66ea 100644 --- a/vendor/google.golang.org/protobuf/internal/impl/codec_map_go112.go +++ b/vendor/google.golang.org/protobuf/internal/impl/codec_map_go112.go @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build go1.12 // +build go1.12 package impl diff --git a/vendor/google.golang.org/protobuf/internal/impl/codec_reflect.go b/vendor/google.golang.org/protobuf/internal/impl/codec_reflect.go index 90705e3ae..145c577bd 100644 --- a/vendor/google.golang.org/protobuf/internal/impl/codec_reflect.go +++ b/vendor/google.golang.org/protobuf/internal/impl/codec_reflect.go @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build purego || appengine // +build purego appengine package impl diff --git a/vendor/google.golang.org/protobuf/internal/impl/codec_unsafe.go b/vendor/google.golang.org/protobuf/internal/impl/codec_unsafe.go index e118af1e2..757642e23 100644 --- a/vendor/google.golang.org/protobuf/internal/impl/codec_unsafe.go +++ b/vendor/google.golang.org/protobuf/internal/impl/codec_unsafe.go @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build !purego && !appengine // +build !purego,!appengine package impl diff --git a/vendor/google.golang.org/protobuf/internal/impl/decode.go b/vendor/google.golang.org/protobuf/internal/impl/decode.go index 949dc49a6..c65b0325c 100644 --- a/vendor/google.golang.org/protobuf/internal/impl/decode.go +++ b/vendor/google.golang.org/protobuf/internal/impl/decode.go @@ -18,6 +18,7 @@ import ( ) var errDecode = errors.New("cannot parse invalid wire-format data") +var errRecursionDepth = errors.New("exceeded maximum recursion depth") type unmarshalOptions struct { flags protoiface.UnmarshalInputFlags @@ -25,6 +26,7 @@ type unmarshalOptions struct { FindExtensionByName(field protoreflect.FullName) (protoreflect.ExtensionType, error) FindExtensionByNumber(message protoreflect.FullName, field protoreflect.FieldNumber) (protoreflect.ExtensionType, error) } + depth int } func (o unmarshalOptions) Options() proto.UnmarshalOptions { @@ -44,6 +46,7 @@ func (o unmarshalOptions) IsDefault() bool { var lazyUnmarshalOptions = unmarshalOptions{ resolver: preg.GlobalTypes, + depth: protowire.DefaultRecursionLimit, } type unmarshalOutput struct { @@ -62,6 +65,7 @@ func (mi *MessageInfo) unmarshal(in piface.UnmarshalInput) (piface.UnmarshalOutp out, err := mi.unmarshalPointer(in.Buf, p, 0, unmarshalOptions{ flags: in.Flags, resolver: in.Resolver, + depth: in.Depth, }) var flags piface.UnmarshalOutputFlags if out.initialized { @@ -82,6 +86,10 @@ var errUnknown = errors.New("unknown") func (mi *MessageInfo) unmarshalPointer(b []byte, p pointer, groupTag protowire.Number, opts unmarshalOptions) (out unmarshalOutput, err error) { mi.init() + opts.depth-- + if opts.depth < 0 { + return out, errRecursionDepth + } if flags.ProtoLegacy && mi.isMessageSet { return unmarshalMessageSet(mi, b, p, opts) } diff --git a/vendor/google.golang.org/protobuf/internal/impl/pointer_reflect.go b/vendor/google.golang.org/protobuf/internal/impl/pointer_reflect.go index 9e3ed821e..4c491bdf4 100644 --- a/vendor/google.golang.org/protobuf/internal/impl/pointer_reflect.go +++ b/vendor/google.golang.org/protobuf/internal/impl/pointer_reflect.go @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build purego || appengine // +build purego appengine package impl diff --git a/vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe.go b/vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe.go index 9ecf23a85..ee0e0573e 100644 --- a/vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe.go +++ b/vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe.go @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build !purego && !appengine // +build !purego,!appengine package impl diff --git a/vendor/google.golang.org/protobuf/internal/strs/strings_pure.go b/vendor/google.golang.org/protobuf/internal/strs/strings_pure.go index 85e074c97..a1f6f3338 100644 --- a/vendor/google.golang.org/protobuf/internal/strs/strings_pure.go +++ b/vendor/google.golang.org/protobuf/internal/strs/strings_pure.go @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build purego || appengine // +build purego appengine package strs diff --git a/vendor/google.golang.org/protobuf/internal/strs/strings_unsafe.go b/vendor/google.golang.org/protobuf/internal/strs/strings_unsafe.go index 2160c7019..56a8a4ed3 100644 --- a/vendor/google.golang.org/protobuf/internal/strs/strings_unsafe.go +++ b/vendor/google.golang.org/protobuf/internal/strs/strings_unsafe.go @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build !purego && !appengine // +build !purego,!appengine package strs diff --git a/vendor/google.golang.org/protobuf/internal/version/version.go b/vendor/google.golang.org/protobuf/internal/version/version.go index 14e774fb2..3d40d5249 100644 --- a/vendor/google.golang.org/protobuf/internal/version/version.go +++ b/vendor/google.golang.org/protobuf/internal/version/version.go @@ -52,8 +52,8 @@ import ( // 10. Send out the CL for review and submit it. const ( Major = 1 - Minor = 27 - Patch = 1 + Minor = 28 + Patch = 0 PreRelease = "" ) diff --git a/vendor/google.golang.org/protobuf/proto/decode.go b/vendor/google.golang.org/protobuf/proto/decode.go index 49f9b8c88..11bf7173b 100644 --- a/vendor/google.golang.org/protobuf/proto/decode.go +++ b/vendor/google.golang.org/protobuf/proto/decode.go @@ -42,18 +42,25 @@ type UnmarshalOptions struct { FindExtensionByName(field protoreflect.FullName) (protoreflect.ExtensionType, error) FindExtensionByNumber(message protoreflect.FullName, field protoreflect.FieldNumber) (protoreflect.ExtensionType, error) } + + // RecursionLimit limits how deeply messages may be nested. + // If zero, a default limit is applied. + RecursionLimit int } // Unmarshal parses the wire-format message in b and places the result in m. // The provided message must be mutable (e.g., a non-nil pointer to a message). func Unmarshal(b []byte, m Message) error { - _, err := UnmarshalOptions{}.unmarshal(b, m.ProtoReflect()) + _, err := UnmarshalOptions{RecursionLimit: protowire.DefaultRecursionLimit}.unmarshal(b, m.ProtoReflect()) return err } // Unmarshal parses the wire-format message in b and places the result in m. // The provided message must be mutable (e.g., a non-nil pointer to a message). func (o UnmarshalOptions) Unmarshal(b []byte, m Message) error { + if o.RecursionLimit == 0 { + o.RecursionLimit = protowire.DefaultRecursionLimit + } _, err := o.unmarshal(b, m.ProtoReflect()) return err } @@ -63,6 +70,9 @@ func (o UnmarshalOptions) Unmarshal(b []byte, m Message) error { // This method permits fine-grained control over the unmarshaler. // Most users should use Unmarshal instead. func (o UnmarshalOptions) UnmarshalState(in protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + if o.RecursionLimit == 0 { + o.RecursionLimit = protowire.DefaultRecursionLimit + } return o.unmarshal(in.Buf, in.Message) } @@ -86,12 +96,17 @@ func (o UnmarshalOptions) unmarshal(b []byte, m protoreflect.Message) (out proto Message: m, Buf: b, Resolver: o.Resolver, + Depth: o.RecursionLimit, } if o.DiscardUnknown { in.Flags |= protoiface.UnmarshalDiscardUnknown } out, err = methods.Unmarshal(in) } else { + o.RecursionLimit-- + if o.RecursionLimit < 0 { + return out, errors.New("exceeded max recursion depth") + } err = o.unmarshalMessageSlow(b, m) } if err != nil { diff --git a/vendor/google.golang.org/protobuf/proto/proto_methods.go b/vendor/google.golang.org/protobuf/proto/proto_methods.go index d8dd604f6..465e057b3 100644 --- a/vendor/google.golang.org/protobuf/proto/proto_methods.go +++ b/vendor/google.golang.org/protobuf/proto/proto_methods.go @@ -3,6 +3,7 @@ // license that can be found in the LICENSE file. // The protoreflect build tag disables use of fast-path methods. +//go:build !protoreflect // +build !protoreflect package proto diff --git a/vendor/google.golang.org/protobuf/proto/proto_reflect.go b/vendor/google.golang.org/protobuf/proto/proto_reflect.go index b103d4320..494d6ceef 100644 --- a/vendor/google.golang.org/protobuf/proto/proto_reflect.go +++ b/vendor/google.golang.org/protobuf/proto/proto_reflect.go @@ -3,6 +3,7 @@ // license that can be found in the LICENSE file. // The protoreflect build tag disables use of fast-path methods. +//go:build protoreflect // +build protoreflect package proto diff --git a/vendor/google.golang.org/protobuf/reflect/protoreflect/methods.go b/vendor/google.golang.org/protobuf/reflect/protoreflect/methods.go index 6be5d16e9..d5d5af6eb 100644 --- a/vendor/google.golang.org/protobuf/reflect/protoreflect/methods.go +++ b/vendor/google.golang.org/protobuf/reflect/protoreflect/methods.go @@ -53,6 +53,7 @@ type ( FindExtensionByName(field FullName) (ExtensionType, error) FindExtensionByNumber(message FullName, field FieldNumber) (ExtensionType, error) } + Depth int } unmarshalOutput = struct { pragma.NoUnkeyedLiterals diff --git a/vendor/google.golang.org/protobuf/reflect/protoreflect/value_pure.go b/vendor/google.golang.org/protobuf/reflect/protoreflect/value_pure.go index 918e685e1..7ced876f4 100644 --- a/vendor/google.golang.org/protobuf/reflect/protoreflect/value_pure.go +++ b/vendor/google.golang.org/protobuf/reflect/protoreflect/value_pure.go @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build purego || appengine // +build purego appengine package protoreflect diff --git a/vendor/google.golang.org/protobuf/reflect/protoreflect/value_union.go b/vendor/google.golang.org/protobuf/reflect/protoreflect/value_union.go index 5a3414724..eb7764c30 100644 --- a/vendor/google.golang.org/protobuf/reflect/protoreflect/value_union.go +++ b/vendor/google.golang.org/protobuf/reflect/protoreflect/value_union.go @@ -41,6 +41,31 @@ import ( // Converting to/from a Value and a concrete Go value panics on type mismatch. // For example, ValueOf("hello").Int() panics because this attempts to // retrieve an int64 from a string. +// +// List, Map, and Message Values are called "composite" values. +// +// A composite Value may alias (reference) memory at some location, +// such that changes to the Value updates the that location. +// A composite value acquired with a Mutable method, such as Message.Mutable, +// always references the source object. +// +// For example: +// // Append a 0 to a "repeated int32" field. +// // Since the Value returned by Mutable is guaranteed to alias +// // the source message, modifying the Value modifies the message. +// message.Mutable(fieldDesc).(List).Append(protoreflect.ValueOfInt32(0)) +// +// // Assign [0] to a "repeated int32" field by creating a new Value, +// // modifying it, and assigning it. +// list := message.NewField(fieldDesc).(List) +// list.Append(protoreflect.ValueOfInt32(0)) +// message.Set(fieldDesc, list) +// // ERROR: Since it is not defined whether Set aliases the source, +// // appending to the List here may or may not modify the message. +// list.Append(protoreflect.ValueOfInt32(0)) +// +// Some operations, such as Message.Get, may return an "empty, read-only" +// composite Value. Modifying an empty, read-only value panics. type Value value // The protoreflect API uses a custom Value union type instead of interface{} diff --git a/vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe.go b/vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe.go index c45debdca..702ddf22a 100644 --- a/vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe.go +++ b/vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe.go @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build !purego && !appengine // +build !purego,!appengine package protoreflect diff --git a/vendor/google.golang.org/protobuf/runtime/protoiface/methods.go b/vendor/google.golang.org/protobuf/runtime/protoiface/methods.go index 32c04f67e..44cf467d8 100644 --- a/vendor/google.golang.org/protobuf/runtime/protoiface/methods.go +++ b/vendor/google.golang.org/protobuf/runtime/protoiface/methods.go @@ -103,6 +103,7 @@ type UnmarshalInput = struct { FindExtensionByName(field protoreflect.FullName) (protoreflect.ExtensionType, error) FindExtensionByNumber(message protoreflect.FullName, field protoreflect.FieldNumber) (protoreflect.ExtensionType, error) } + Depth int } // UnmarshalOutput is output from the Unmarshal method. diff --git a/vendor/gopkg.in/ini.v1/.editorconfig b/vendor/gopkg.in/ini.v1/.editorconfig new file mode 100644 index 000000000..4a2d9180f --- /dev/null +++ b/vendor/gopkg.in/ini.v1/.editorconfig @@ -0,0 +1,12 @@ +# http://editorconfig.org + +root = true + +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true + +[*_test.go] +trim_trailing_whitespace = false diff --git a/vendor/gopkg.in/ini.v1/.gitignore b/vendor/gopkg.in/ini.v1/.gitignore index 12411127b..588388bda 100644 --- a/vendor/gopkg.in/ini.v1/.gitignore +++ b/vendor/gopkg.in/ini.v1/.gitignore @@ -4,3 +4,4 @@ ini.sublime-workspace testdata/conf_reflect.ini .idea /.vscode +.DS_Store diff --git a/vendor/gopkg.in/ini.v1/.golangci.yml b/vendor/gopkg.in/ini.v1/.golangci.yml new file mode 100644 index 000000000..b7256bae1 --- /dev/null +++ b/vendor/gopkg.in/ini.v1/.golangci.yml @@ -0,0 +1,21 @@ +linters-settings: + nakedret: + max-func-lines: 0 # Disallow any unnamed return statement + +linters: + enable: + - deadcode + - errcheck + - gosimple + - govet + - ineffassign + - staticcheck + - structcheck + - typecheck + - unused + - varcheck + - nakedret + - gofmt + - rowserrcheck + - unconvert + - goimports diff --git a/vendor/gopkg.in/ini.v1/README.md b/vendor/gopkg.in/ini.v1/README.md index 5d65658b2..1e4294452 100644 --- a/vendor/gopkg.in/ini.v1/README.md +++ b/vendor/gopkg.in/ini.v1/README.md @@ -24,7 +24,7 @@ Package ini provides INI file read and write functionality in Go. ## Installation -The minimum requirement of Go is **1.6**. +The minimum requirement of Go is **1.12**. ```sh $ go get gopkg.in/ini.v1 diff --git a/vendor/gopkg.in/ini.v1/codecov.yml b/vendor/gopkg.in/ini.v1/codecov.yml index fc947f230..31f646ee0 100644 --- a/vendor/gopkg.in/ini.v1/codecov.yml +++ b/vendor/gopkg.in/ini.v1/codecov.yml @@ -6,4 +6,4 @@ coverage: threshold: 1% comment: - layout: 'diff, files' + layout: 'diff' diff --git a/vendor/gopkg.in/ini.v1/file.go b/vendor/gopkg.in/ini.v1/file.go index b96d172cf..9d91c31a6 100644 --- a/vendor/gopkg.in/ini.v1/file.go +++ b/vendor/gopkg.in/ini.v1/file.go @@ -142,6 +142,12 @@ func (f *File) GetSection(name string) (*Section, error) { return secs[0], err } +// HasSection returns true if the file contains a section with given name. +func (f *File) HasSection(name string) bool { + section, _ := f.GetSection(name) + return section != nil +} + // SectionsByName returns all sections with given name. func (f *File) SectionsByName(name string) ([]*Section, error) { if len(name) == 0 { @@ -168,8 +174,9 @@ func (f *File) SectionsByName(name string) ([]*Section, error) { func (f *File) Section(name string) *Section { sec, err := f.GetSection(name) if err != nil { - // Note: It's OK here because the only possible error is empty section name, - // but if it's empty, this piece of code won't be executed. + if name == "" { + name = DefaultSection + } sec, _ = f.NewSection(name) return sec } @@ -435,16 +442,16 @@ func (f *File) writeToBuffer(indent string) (*bytes.Buffer, error) { kname = `"""` + kname + `"""` } - for _, val := range key.ValueWithShadows() { + writeKeyValue := func(val string) (bool, error) { if _, err := buf.WriteString(kname); err != nil { - return nil, err + return false, err } if key.isBooleanType { if kname != sec.keyList[len(sec.keyList)-1] { buf.WriteString(LineBreak) } - continue KeyList + return true, nil } // Write out alignment spaces before "=" sign @@ -461,10 +468,27 @@ func (f *File) writeToBuffer(indent string) (*bytes.Buffer, error) { val = `"` + val + `"` } if _, err := buf.WriteString(equalSign + val + LineBreak); err != nil { + return false, err + } + return false, nil + } + + shadows := key.ValueWithShadows() + if len(shadows) == 0 { + if _, err := writeKeyValue(""); err != nil { return nil, err } } + for _, val := range shadows { + exitLoop, err := writeKeyValue(val) + if err != nil { + return nil, err + } else if exitLoop { + continue KeyList + } + } + for _, val := range key.nestedValues { if _, err := buf.WriteString(indent + " " + val + LineBreak); err != nil { return nil, err diff --git a/vendor/gopkg.in/ini.v1/ini.go b/vendor/gopkg.in/ini.v1/ini.go index 23f07422e..ac2a93a5b 100644 --- a/vendor/gopkg.in/ini.v1/ini.go +++ b/vendor/gopkg.in/ini.v1/ini.go @@ -1,5 +1,3 @@ -// +build go1.6 - // Copyright 2014 Unknwon // // Licensed under the Apache License, Version 2.0 (the "License"): you may @@ -125,6 +123,8 @@ type LoadOptions struct { ReaderBufferSize int // AllowNonUniqueSections indicates whether to allow sections with the same name multiple times. AllowNonUniqueSections bool + // AllowDuplicateShadowValues indicates whether values for shadowed keys should be deduplicated. + AllowDuplicateShadowValues bool } // DebugFunc is the type of function called to log parse events. diff --git a/vendor/gopkg.in/ini.v1/key.go b/vendor/gopkg.in/ini.v1/key.go index 8baafd9ea..a19d9f38e 100644 --- a/vendor/gopkg.in/ini.v1/key.go +++ b/vendor/gopkg.in/ini.v1/key.go @@ -54,14 +54,16 @@ func (k *Key) addShadow(val string) error { return errors.New("cannot add shadow to auto-increment or boolean key") } - // Deduplicate shadows based on their values. - if k.value == val { - return nil - } - for i := range k.shadows { - if k.shadows[i].value == val { + if !k.s.f.options.AllowDuplicateShadowValues { + // Deduplicate shadows based on their values. + if k.value == val { return nil } + for i := range k.shadows { + if k.shadows[i].value == val { + return nil + } + } } shadow := newKey(k.s, k.name, val) @@ -108,15 +110,24 @@ func (k *Key) Value() string { return k.value } -// ValueWithShadows returns raw values of key and its shadows if any. +// ValueWithShadows returns raw values of key and its shadows if any. Shadow +// keys with empty values are ignored from the returned list. func (k *Key) ValueWithShadows() []string { if len(k.shadows) == 0 { + if k.value == "" { + return []string{} + } return []string{k.value} } - vals := make([]string, len(k.shadows)+1) - vals[0] = k.value - for i := range k.shadows { - vals[i+1] = k.shadows[i].value + + vals := make([]string, 0, len(k.shadows)+1) + if k.value != "" { + vals = append(vals, k.value) + } + for _, s := range k.shadows { + if s.value != "" { + vals = append(vals, s.value) + } } return vals } @@ -781,10 +792,8 @@ func (k *Key) parseUint64s(strs []string, addInvalid, returnOnInvalid bool) ([]u return vals, err } - type Parser func(str string) (interface{}, error) - // parseTimesFormat transforms strings to times in given format. func (k *Key) parseTimesFormat(format string, strs []string, addInvalid, returnOnInvalid bool) ([]time.Time, error) { vals := make([]time.Time, 0, len(strs)) @@ -801,7 +810,6 @@ func (k *Key) parseTimesFormat(format string, strs []string, addInvalid, returnO return vals, err } - // doParse transforms strings to different types func (k *Key) doParse(strs []string, addInvalid, returnOnInvalid bool, parser Parser) ([]interface{}, error) { vals := make([]interface{}, 0, len(strs)) diff --git a/vendor/gopkg.in/ini.v1/parser.go b/vendor/gopkg.in/ini.v1/parser.go index 65147166f..ac1c980ab 100644 --- a/vendor/gopkg.in/ini.v1/parser.go +++ b/vendor/gopkg.in/ini.v1/parser.go @@ -131,7 +131,7 @@ func readKeyName(delimiters string, in []byte) (string, int, error) { // Check if key name surrounded by quotes. var keyQuote string if line[0] == '"' { - if len(line) > 6 && string(line[0:3]) == `"""` { + if len(line) > 6 && line[0:3] == `"""` { keyQuote = `"""` } else { keyQuote = `"` @@ -232,7 +232,7 @@ func (p *parser) readValue(in []byte, bufferSize int) (string, error) { } var valQuote string - if len(line) > 3 && string(line[0:3]) == `"""` { + if len(line) > 3 && line[0:3] == `"""` { valQuote = `"""` } else if line[0] == '`' { valQuote = "`" @@ -289,12 +289,8 @@ func (p *parser) readValue(in []byte, bufferSize int) (string, error) { hasSurroundedQuote(line, '"')) && !p.options.PreserveSurroundedQuote { line = line[1 : len(line)-1] } else if len(valQuote) == 0 && p.options.UnescapeValueCommentSymbols { - if strings.Contains(line, `\;`) { - line = strings.Replace(line, `\;`, ";", -1) - } - if strings.Contains(line, `\#`) { - line = strings.Replace(line, `\#`, "#", -1) - } + line = strings.ReplaceAll(line, `\;`, ";") + line = strings.ReplaceAll(line, `\#`, "#") } else if p.options.AllowPythonMultilineValues && lastChar == '\n' { return p.readPythonMultilines(line, bufferSize) } @@ -306,15 +302,9 @@ func (p *parser) readPythonMultilines(line string, bufferSize int) (string, erro parserBufferPeekResult, _ := p.buf.Peek(bufferSize) peekBuffer := bytes.NewBuffer(parserBufferPeekResult) - indentSize := 0 for { peekData, peekErr := peekBuffer.ReadBytes('\n') - if peekErr != nil { - if peekErr == io.EOF { - p.debug("readPythonMultilines: io.EOF, peekData: %q, line: %q", string(peekData), line) - return line, nil - } - + if peekErr != nil && peekErr != io.EOF { p.debug("readPythonMultilines: failed to peek with error: %v", peekErr) return "", peekErr } @@ -333,19 +323,6 @@ func (p *parser) readPythonMultilines(line string, bufferSize int) (string, erro return line, nil } - // Determine indent size and line prefix. - currentIndentSize := len(peekMatches[1]) - if indentSize < 1 { - indentSize = currentIndentSize - p.debug("readPythonMultilines: indent size is %d", indentSize) - } - - // Make sure each line is indented at least as far as first line. - if currentIndentSize < indentSize { - p.debug("readPythonMultilines: end of value, current indent: %d, expected indent: %d, line: %q", currentIndentSize, indentSize, line) - return line, nil - } - // Advance the parser reader (buffer) in-sync with the peek buffer. _, err := p.buf.Discard(len(peekData)) if err != nil { @@ -353,8 +330,7 @@ func (p *parser) readPythonMultilines(line string, bufferSize int) (string, erro return "", err } - // Handle indented empty line. - line += "\n" + peekMatches[1][indentSize:] + peekMatches[2] + line += "\n" + peekMatches[0] } } @@ -465,6 +441,8 @@ func (f *File) parse(reader io.Reader) (err error) { // Reset auto-counter and comments p.comment.Reset() p.count = 1 + // Nested values can't span sections + isLastValueEmpty = false inUnparseableSection = false for i := range f.options.UnparseableSections { diff --git a/vendor/gopkg.in/ini.v1/section.go b/vendor/gopkg.in/ini.v1/section.go index afaa97c97..a3615d820 100644 --- a/vendor/gopkg.in/ini.v1/section.go +++ b/vendor/gopkg.in/ini.v1/section.go @@ -217,7 +217,7 @@ func (s *Section) KeysHash() map[string]string { defer s.f.lock.RUnlock() } - hash := map[string]string{} + hash := make(map[string]string, len(s.keysHash)) for key, value := range s.keysHash { hash[key] = value } diff --git a/vendor/gopkg.in/yaml.v2/go.mod b/vendor/gopkg.in/yaml.v2/go.mod deleted file mode 100644 index 2cbb85aea..000000000 --- a/vendor/gopkg.in/yaml.v2/go.mod +++ /dev/null @@ -1,5 +0,0 @@ -module gopkg.in/yaml.v2 - -go 1.15 - -require gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 diff --git a/vendor/gopkg.in/yaml.v3/go.mod b/vendor/gopkg.in/yaml.v3/go.mod deleted file mode 100644 index f407ea321..000000000 --- a/vendor/gopkg.in/yaml.v3/go.mod +++ /dev/null @@ -1,5 +0,0 @@ -module "gopkg.in/yaml.v3" - -require ( - "gopkg.in/check.v1" v0.0.0-20161208181325-20d25e280405 -) diff --git a/vendor/k8s.io/apimachinery/pkg/util/clock/clock.go b/vendor/k8s.io/apimachinery/pkg/util/clock/clock.go deleted file mode 100644 index 1a544d3b2..000000000 --- a/vendor/k8s.io/apimachinery/pkg/util/clock/clock.go +++ /dev/null @@ -1,445 +0,0 @@ -/* -Copyright 2014 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package clock - -import ( - "sync" - "time" -) - -// PassiveClock allows for injecting fake or real clocks into code -// that needs to read the current time but does not support scheduling -// activity in the future. -type PassiveClock interface { - Now() time.Time - Since(time.Time) time.Duration -} - -// Clock allows for injecting fake or real clocks into code that -// needs to do arbitrary things based on time. -type Clock interface { - PassiveClock - After(time.Duration) <-chan time.Time - AfterFunc(time.Duration, func()) Timer - NewTimer(time.Duration) Timer - Sleep(time.Duration) - NewTicker(time.Duration) Ticker -} - -// RealClock really calls time.Now() -type RealClock struct{} - -// Now returns the current time. -func (RealClock) Now() time.Time { - return time.Now() -} - -// Since returns time since the specified timestamp. -func (RealClock) Since(ts time.Time) time.Duration { - return time.Since(ts) -} - -// After is the same as time.After(d). -func (RealClock) After(d time.Duration) <-chan time.Time { - return time.After(d) -} - -// AfterFunc is the same as time.AfterFunc(d, f). -func (RealClock) AfterFunc(d time.Duration, f func()) Timer { - return &realTimer{ - timer: time.AfterFunc(d, f), - } -} - -// NewTimer returns a new Timer. -func (RealClock) NewTimer(d time.Duration) Timer { - return &realTimer{ - timer: time.NewTimer(d), - } -} - -// NewTicker returns a new Ticker. -func (RealClock) NewTicker(d time.Duration) Ticker { - return &realTicker{ - ticker: time.NewTicker(d), - } -} - -// Sleep pauses the RealClock for duration d. -func (RealClock) Sleep(d time.Duration) { - time.Sleep(d) -} - -// FakePassiveClock implements PassiveClock, but returns an arbitrary time. -type FakePassiveClock struct { - lock sync.RWMutex - time time.Time -} - -// FakeClock implements Clock, but returns an arbitrary time. -type FakeClock struct { - FakePassiveClock - - // waiters are waiting for the fake time to pass their specified time - waiters []fakeClockWaiter -} - -type fakeClockWaiter struct { - targetTime time.Time - stepInterval time.Duration - skipIfBlocked bool - destChan chan time.Time - afterFunc func() -} - -// NewFakePassiveClock returns a new FakePassiveClock. -func NewFakePassiveClock(t time.Time) *FakePassiveClock { - return &FakePassiveClock{ - time: t, - } -} - -// NewFakeClock returns a new FakeClock -func NewFakeClock(t time.Time) *FakeClock { - return &FakeClock{ - FakePassiveClock: *NewFakePassiveClock(t), - } -} - -// Now returns f's time. -func (f *FakePassiveClock) Now() time.Time { - f.lock.RLock() - defer f.lock.RUnlock() - return f.time -} - -// Since returns time since the time in f. -func (f *FakePassiveClock) Since(ts time.Time) time.Duration { - f.lock.RLock() - defer f.lock.RUnlock() - return f.time.Sub(ts) -} - -// SetTime sets the time on the FakePassiveClock. -func (f *FakePassiveClock) SetTime(t time.Time) { - f.lock.Lock() - defer f.lock.Unlock() - f.time = t -} - -// After is the Fake version of time.After(d). -func (f *FakeClock) After(d time.Duration) <-chan time.Time { - f.lock.Lock() - defer f.lock.Unlock() - stopTime := f.time.Add(d) - ch := make(chan time.Time, 1) // Don't block! - f.waiters = append(f.waiters, fakeClockWaiter{ - targetTime: stopTime, - destChan: ch, - }) - return ch -} - -// AfterFunc is the Fake version of time.AfterFunc(d, callback). -func (f *FakeClock) AfterFunc(d time.Duration, cb func()) Timer { - f.lock.Lock() - defer f.lock.Unlock() - stopTime := f.time.Add(d) - ch := make(chan time.Time, 1) // Don't block! - - timer := &fakeTimer{ - fakeClock: f, - waiter: fakeClockWaiter{ - targetTime: stopTime, - destChan: ch, - afterFunc: cb, - }, - } - f.waiters = append(f.waiters, timer.waiter) - return timer -} - -// NewTimer is the Fake version of time.NewTimer(d). -func (f *FakeClock) NewTimer(d time.Duration) Timer { - f.lock.Lock() - defer f.lock.Unlock() - stopTime := f.time.Add(d) - ch := make(chan time.Time, 1) // Don't block! - timer := &fakeTimer{ - fakeClock: f, - waiter: fakeClockWaiter{ - targetTime: stopTime, - destChan: ch, - }, - } - f.waiters = append(f.waiters, timer.waiter) - return timer -} - -// NewTicker returns a new Ticker. -func (f *FakeClock) NewTicker(d time.Duration) Ticker { - f.lock.Lock() - defer f.lock.Unlock() - tickTime := f.time.Add(d) - ch := make(chan time.Time, 1) // hold one tick - f.waiters = append(f.waiters, fakeClockWaiter{ - targetTime: tickTime, - stepInterval: d, - skipIfBlocked: true, - destChan: ch, - }) - - return &fakeTicker{ - c: ch, - } -} - -// Step moves clock by Duration, notifies anyone that's called After, Tick, or NewTimer -func (f *FakeClock) Step(d time.Duration) { - f.lock.Lock() - defer f.lock.Unlock() - f.setTimeLocked(f.time.Add(d)) -} - -// SetTime sets the time on a FakeClock. -func (f *FakeClock) SetTime(t time.Time) { - f.lock.Lock() - defer f.lock.Unlock() - f.setTimeLocked(t) -} - -// Actually changes the time and checks any waiters. f must be write-locked. -func (f *FakeClock) setTimeLocked(t time.Time) { - f.time = t - newWaiters := make([]fakeClockWaiter, 0, len(f.waiters)) - for i := range f.waiters { - w := &f.waiters[i] - if !w.targetTime.After(t) { - - if w.skipIfBlocked { - select { - case w.destChan <- t: - default: - } - } else { - w.destChan <- t - } - - if w.afterFunc != nil { - w.afterFunc() - } - - if w.stepInterval > 0 { - for !w.targetTime.After(t) { - w.targetTime = w.targetTime.Add(w.stepInterval) - } - newWaiters = append(newWaiters, *w) - } - - } else { - newWaiters = append(newWaiters, f.waiters[i]) - } - } - f.waiters = newWaiters -} - -// HasWaiters returns true if After or AfterFunc has been called on f but not yet satisfied -// (so you can write race-free tests). -func (f *FakeClock) HasWaiters() bool { - f.lock.RLock() - defer f.lock.RUnlock() - return len(f.waiters) > 0 -} - -// Sleep pauses the FakeClock for duration d. -func (f *FakeClock) Sleep(d time.Duration) { - f.Step(d) -} - -// IntervalClock implements Clock, but each invocation of Now steps the clock forward the specified duration -type IntervalClock struct { - Time time.Time - Duration time.Duration -} - -// Now returns i's time. -func (i *IntervalClock) Now() time.Time { - i.Time = i.Time.Add(i.Duration) - return i.Time -} - -// Since returns time since the time in i. -func (i *IntervalClock) Since(ts time.Time) time.Duration { - return i.Time.Sub(ts) -} - -// After is currently unimplemented, will panic. -// TODO: make interval clock use FakeClock so this can be implemented. -func (*IntervalClock) After(d time.Duration) <-chan time.Time { - panic("IntervalClock doesn't implement After") -} - -// AfterFunc is currently unimplemented, will panic. -// TODO: make interval clock use FakeClock so this can be implemented. -func (*IntervalClock) AfterFunc(d time.Duration, cb func()) Timer { - panic("IntervalClock doesn't implement AfterFunc") -} - -// NewTimer is currently unimplemented, will panic. -// TODO: make interval clock use FakeClock so this can be implemented. -func (*IntervalClock) NewTimer(d time.Duration) Timer { - panic("IntervalClock doesn't implement NewTimer") -} - -// NewTicker is currently unimplemented, will panic. -// TODO: make interval clock use FakeClock so this can be implemented. -func (*IntervalClock) NewTicker(d time.Duration) Ticker { - panic("IntervalClock doesn't implement NewTicker") -} - -// Sleep is currently unimplemented; will panic. -func (*IntervalClock) Sleep(d time.Duration) { - panic("IntervalClock doesn't implement Sleep") -} - -// Timer allows for injecting fake or real timers into code that -// needs to do arbitrary things based on time. -type Timer interface { - C() <-chan time.Time - Stop() bool - Reset(d time.Duration) bool -} - -// realTimer is backed by an actual time.Timer. -type realTimer struct { - timer *time.Timer -} - -// C returns the underlying timer's channel. -func (r *realTimer) C() <-chan time.Time { - return r.timer.C -} - -// Stop calls Stop() on the underlying timer. -func (r *realTimer) Stop() bool { - return r.timer.Stop() -} - -// Reset calls Reset() on the underlying timer. -func (r *realTimer) Reset(d time.Duration) bool { - return r.timer.Reset(d) -} - -// fakeTimer implements Timer based on a FakeClock. -type fakeTimer struct { - fakeClock *FakeClock - waiter fakeClockWaiter -} - -// C returns the channel that notifies when this timer has fired. -func (f *fakeTimer) C() <-chan time.Time { - return f.waiter.destChan -} - -// Stop conditionally stops the timer. If the timer has neither fired -// nor been stopped then this call stops the timer and returns true, -// otherwise this call returns false. This is like time.Timer::Stop. -func (f *fakeTimer) Stop() bool { - f.fakeClock.lock.Lock() - defer f.fakeClock.lock.Unlock() - // The timer has already fired or been stopped, unless it is found - // among the clock's waiters. - stopped := false - oldWaiters := f.fakeClock.waiters - newWaiters := make([]fakeClockWaiter, 0, len(oldWaiters)) - seekChan := f.waiter.destChan - for i := range oldWaiters { - // Identify the timer's fakeClockWaiter by the identity of the - // destination channel, nothing else is necessarily unique and - // constant since the timer's creation. - if oldWaiters[i].destChan == seekChan { - stopped = true - } else { - newWaiters = append(newWaiters, oldWaiters[i]) - } - } - - f.fakeClock.waiters = newWaiters - - return stopped -} - -// Reset conditionally updates the firing time of the timer. If the -// timer has neither fired nor been stopped then this call resets the -// timer to the fake clock's "now" + d and returns true, otherwise -// it creates a new waiter, adds it to the clock, and returns true. -// -// It is not possible to return false, because a fake timer can be reset -// from any state (waiting to fire, already fired, and stopped). -// -// See the GoDoc for time.Timer::Reset for more context on why -// the return value of Reset() is not useful. -func (f *fakeTimer) Reset(d time.Duration) bool { - f.fakeClock.lock.Lock() - defer f.fakeClock.lock.Unlock() - waiters := f.fakeClock.waiters - seekChan := f.waiter.destChan - for i := range waiters { - if waiters[i].destChan == seekChan { - waiters[i].targetTime = f.fakeClock.time.Add(d) - return true - } - } - // No existing waiter, timer has already fired or been reset. - // We should still enable Reset() to succeed by creating a - // new waiter and adding it to the clock's waiters. - newWaiter := fakeClockWaiter{ - targetTime: f.fakeClock.time.Add(d), - destChan: seekChan, - } - f.fakeClock.waiters = append(f.fakeClock.waiters, newWaiter) - return true -} - -// Ticker defines the Ticker interface -type Ticker interface { - C() <-chan time.Time - Stop() -} - -type realTicker struct { - ticker *time.Ticker -} - -func (t *realTicker) C() <-chan time.Time { - return t.ticker.C -} - -func (t *realTicker) Stop() { - t.ticker.Stop() -} - -type fakeTicker struct { - c <-chan time.Time -} - -func (t *fakeTicker) C() <-chan time.Time { - return t.c -} - -func (t *fakeTicker) Stop() { -} diff --git a/vendor/k8s.io/code-generator/go.mod b/vendor/k8s.io/code-generator/go.mod deleted file mode 100644 index 65f60d909..000000000 --- a/vendor/k8s.io/code-generator/go.mod +++ /dev/null @@ -1,26 +0,0 @@ -// This is a generated file. Do not edit directly. - -module k8s.io/code-generator - -go 1.16 - -require ( - github.com/emicklei/go-restful v2.9.5+incompatible // indirect - github.com/go-openapi/jsonreference v0.19.5 // indirect - github.com/go-openapi/swag v0.19.14 // indirect - github.com/gogo/protobuf v1.3.2 - github.com/googleapis/gnostic v0.5.5 - github.com/json-iterator/go v1.1.12 // indirect - github.com/onsi/ginkgo v1.14.0 // indirect - github.com/spf13/pflag v1.0.5 - github.com/stretchr/testify v1.7.0 // indirect - golang.org/x/net v0.0.0-20211209124913-491a49abca63 // indirect - golang.org/x/sys v0.0.0-20210831042530-f4d43177bf5e // indirect - golang.org/x/text v0.3.7 // indirect - golang.org/x/tools v0.1.6-0.20210820212750-d4cc65f0b2ff - gopkg.in/yaml.v2 v2.4.0 - k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c - k8s.io/klog/v2 v2.30.0 - k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65 - sigs.k8s.io/structured-merge-diff/v4 v4.2.1 // indirect -) diff --git a/vendor/k8s.io/code-generator/go.sum b/vendor/k8s.io/code-generator/go.sum deleted file mode 100644 index 0b0cfe45c..000000000 --- a/vendor/k8s.io/code-generator/go.sum +++ /dev/null @@ -1,256 +0,0 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= -github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= -github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= -github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= -github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= -github.com/emicklei/go-restful v2.9.5+incompatible h1:spTtZBk5DYEvbxMVutUuTyh1Ao2r4iyvLdACqsl/Ljk= -github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= -github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/getkin/kin-openapi v0.76.0/go.mod h1:660oXbgy5JFMKreazJaQTw7o+X00qeSyhcnluiMv+Xg= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= -github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= -github.com/go-logr/logr v1.2.0 h1:QK40JKJyMdUDz+h+xvCsru/bJhvG0UxvePV0ufL/AcE= -github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= -github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= -github.com/go-openapi/jsonreference v0.19.5 h1:1WJP/wi4OjB4iV8KVbH73rQaoialJrqv8gitZLxGLtM= -github.com/go-openapi/jsonreference v0.19.5/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg= -github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-openapi/swag v0.19.14 h1:gm3vOOXfiuw5i9p5N9xJvfjvuofpyvLA9Wr6QfK5Fng= -github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= -github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= -github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/gofuzz v1.1.0 h1:Hsa8mG0dQ46ij8Sl2AYJDUv1oA9/d6Vk+3LG99Oe02g= -github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/gnostic v0.5.1/go.mod h1:6U4PtQXGIEt/Z3h5MAT7FNofLnw9vXk2cUuW7uA/OeU= -github.com/googleapis/gnostic v0.5.5 h1:9fHAtK0uDfpveeqqo1hkEZJcFvYXAiCN3UutL8F9xHw= -github.com/googleapis/gnostic v0.5.5/go.mod h1:7+EbHbldMins07ALC74bsA81Ovc97DwqyJO1AENw9kA= -github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= -github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= -github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= -github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= -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/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.7.6 h1:8yTIVnZgCoiM1TgqoeTl+LfU5Jg6/xL3QhGQnimLYnA= -github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= -github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78= -github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.14.0 h1:2mOpI4JVVPBN+WQRa0WKH2eXR+Ey+uK4n7Zj0aYpIQA= -github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= -github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= -github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.10.1 h1:o0+MgICZLuZ7xjH7Vx6zS/zcu93/BEp1VwkIW1mEXCE= -github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= -github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= -github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/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 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211209124913-491a49abca63 h1:iocB37TsdFuN6IBRZ+ry36wrkoV51/tl5vOWqkcPGvY= -golang.org/x/net v0.0.0-20211209124913-491a49abca63/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -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-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/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -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-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210831042530-f4d43177bf5e h1:XMgFehsDnnLGtjvjOfqWSUzt0alpTR1RSEuznObga2c= -golang.org/x/sys v0.0.0-20210831042530-f4d43177bf5e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -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.6-0.20210820212750-d4cc65f0b2ff h1:VX/uD7MK0AHXGiScH3fsieUQUcpmRERPDYtqZdJnA+Q= -golang.org/x/tools v0.1.6-0.20210820212750-d4cc65f0b2ff/go.mod h1:YD9qOF0M9xpSpdWTBbzEl5e/RnCefISl8E5Noe10jFM= -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= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -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= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= -google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= -gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c h1:GohjlNKauSai7gN4wsJkeZ3WAJx4Sh+oT/b5IYn5suA= -k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= -k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= -k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= -k8s.io/klog/v2 v2.30.0 h1:bUO6drIvCIsvZ/XFgfxoGFQU/a4Qkh0iAlvUR7vlHJw= -k8s.io/klog/v2 v2.30.0/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= -k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65 h1:E3J9oCLlaobFUqsjG9DfKbP2BmgwBL2p7pn0A3dG9W4= -k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65/go.mod h1:sX9MT8g7NVZM5lVL/j8QyCCJe8YSMW30QvGZWaCIDIk= -k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= -sigs.k8s.io/structured-merge-diff/v4 v4.2.1 h1:bKCqE9GvQ5tiVHn5rfn1r+yao3aLQEaLzkkmAkf+A6Y= -sigs.k8s.io/structured-merge-diff/v4 v4.2.1/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4= -sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q= -sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= diff --git a/vendor/k8s.io/klog/go.mod b/vendor/k8s.io/klog/go.mod deleted file mode 100644 index 3877d8546..000000000 --- a/vendor/k8s.io/klog/go.mod +++ /dev/null @@ -1,5 +0,0 @@ -module k8s.io/klog - -go 1.12 - -require github.com/go-logr/logr v0.1.0 diff --git a/vendor/k8s.io/klog/go.sum b/vendor/k8s.io/klog/go.sum deleted file mode 100644 index fb64d277a..000000000 --- a/vendor/k8s.io/klog/go.sum +++ /dev/null @@ -1,2 +0,0 @@ -github.com/go-logr/logr v0.1.0 h1:M1Tv3VzNlEHg6uyACnRdtrploV2P7wZqH8BoQMtz0cg= -github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= diff --git a/vendor/k8s.io/klog/v2/go.mod b/vendor/k8s.io/klog/v2/go.mod deleted file mode 100644 index 31aefba74..000000000 --- a/vendor/k8s.io/klog/v2/go.mod +++ /dev/null @@ -1,5 +0,0 @@ -module k8s.io/klog/v2 - -go 1.13 - -require github.com/go-logr/logr v1.2.0 diff --git a/vendor/k8s.io/klog/v2/go.sum b/vendor/k8s.io/klog/v2/go.sum deleted file mode 100644 index 919fbadbc..000000000 --- a/vendor/k8s.io/klog/v2/go.sum +++ /dev/null @@ -1,2 +0,0 @@ -github.com/go-logr/logr v1.2.0 h1:QK40JKJyMdUDz+h+xvCsru/bJhvG0UxvePV0ufL/AcE= -github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= diff --git a/vendor/k8s.io/utils/clock/clock.go b/vendor/k8s.io/utils/clock/clock.go index dd181ce8d..b8b6af5c8 100644 --- a/vendor/k8s.io/utils/clock/clock.go +++ b/vendor/k8s.io/utils/clock/clock.go @@ -63,6 +63,16 @@ type WithDelayedExecution interface { AfterFunc(d time.Duration, f func()) Timer } +// WithTickerAndDelayedExecution allows for injecting fake or real clocks +// into code that needs Ticker and AfterFunc functionality +type WithTickerAndDelayedExecution interface { + WithTicker + // AfterFunc executes f in its own goroutine after waiting + // for d duration and returns a Timer whose channel can be + // closed by calling Stop() on the Timer. + AfterFunc(d time.Duration, f func()) Timer +} + // Ticker defines the Ticker interface. type Ticker interface { C() <-chan time.Time diff --git a/vendor/k8s.io/utils/clock/testing/fake_clock.go b/vendor/k8s.io/utils/clock/testing/fake_clock.go index fb493c4ba..79e11deb6 100644 --- a/vendor/k8s.io/utils/clock/testing/fake_clock.go +++ b/vendor/k8s.io/utils/clock/testing/fake_clock.go @@ -239,7 +239,8 @@ func (f *FakeClock) Sleep(d time.Duration) { // IntervalClock implements clock.PassiveClock, but each invocation of Now steps the clock forward the specified duration. // IntervalClock technically implements the other methods of clock.Clock, but each implementation is just a panic. -// See SimpleIntervalClock for an alternative that only has the methods of PassiveClock. +// +// Deprecated: See SimpleIntervalClock for an alternative that only has the methods of PassiveClock. type IntervalClock struct { Time time.Time Duration time.Duration @@ -282,9 +283,9 @@ func (*IntervalClock) Tick(d time.Duration) <-chan time.Time { // NewTicker has no implementation yet and is omitted. // TODO: make interval clock use FakeClock so this can be implemented. -//func (*IntervalClock) NewTicker(d time.Duration) clock.Ticker { -// panic("IntervalClock doesn't implement NewTicker") -//} +func (*IntervalClock) NewTicker(d time.Duration) clock.Ticker { + panic("IntervalClock doesn't implement NewTicker") +} // Sleep is unimplemented, will panic. func (*IntervalClock) Sleep(d time.Duration) { diff --git a/vendor/k8s.io/utils/pointer/pointer.go b/vendor/k8s.io/utils/pointer/pointer.go index 2cab2c580..f5802d2e8 100644 --- a/vendor/k8s.io/utils/pointer/pointer.go +++ b/vendor/k8s.io/utils/pointer/pointer.go @@ -19,6 +19,7 @@ package pointer import ( "fmt" "reflect" + "time" ) // AllPtrFieldsNil tests whether all pointer fields in a struct are nil. This is useful when, @@ -184,7 +185,7 @@ func StringEqual(a, b *string) bool { return *a == *b } -// Float32 returns a pointer to the a float32. +// Float32 returns a pointer to a float32. func Float32(i float32) *float32 { return &i } @@ -214,7 +215,7 @@ func Float32Equal(a, b *float32) bool { return *a == *b } -// Float64 returns a pointer to the a float64. +// Float64 returns a pointer to a float64. func Float64(i float64) *float64 { return &i } @@ -243,3 +244,29 @@ func Float64Equal(a, b *float64) bool { } return *a == *b } + +// Duration returns a pointer to a time.Duration. +func Duration(d time.Duration) *time.Duration { + return &d +} + +// DurationDeref dereferences the time.Duration ptr and returns it if not nil, or else +// returns def. +func DurationDeref(ptr *time.Duration, def time.Duration) time.Duration { + if ptr != nil { + return *ptr + } + return def +} + +// DurationEqual returns true if both arguments are nil or both arguments +// dereference to the same value. +func DurationEqual(a, b *time.Duration) bool { + if (a == nil) != (b == nil) { + return false + } + if a == nil { + return true + } + return *a == *b +} diff --git a/vendor/modules.txt b/vendor/modules.txt index b39f50d64..0b42ece32 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -1,54 +1,75 @@ # github.com/BurntSushi/toml v0.3.1 +## explicit github.com/BurntSushi/toml # github.com/Masterminds/goutils v1.1.1 +## explicit github.com/Masterminds/goutils # github.com/Masterminds/semver v1.5.0 +## explicit github.com/Masterminds/semver # github.com/Masterminds/sprig v2.22.0+incompatible +## explicit github.com/Masterminds/sprig # github.com/PuerkitoBio/purell v1.1.1 +## explicit github.com/PuerkitoBio/purell # github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 +## explicit github.com/PuerkitoBio/urlesc # github.com/ahmetb/gen-crd-api-reference-docs v0.2.0 ## explicit github.com/ahmetb/gen-crd-api-reference-docs # github.com/beorn7/perks v1.0.1 +## explicit; go 1.11 github.com/beorn7/perks/quantile -# github.com/bronze1man/yaml2json v0.0.0-20201022121239-82e774ec909d +# github.com/bronze1man/yaml2json v0.0.0-20211227013850-8972abeaea25 +## explicit github.com/bronze1man/yaml2json github.com/bronze1man/yaml2json/y2jLib # github.com/cespare/xxhash/v2 v2.1.1 +## explicit; go 1.11 github.com/cespare/xxhash/v2 # github.com/coreos/go-systemd/v22 v22.3.2 +## explicit; go 1.12 github.com/coreos/go-systemd/v22/unit # github.com/cyphar/filepath-securejoin v0.2.2 +## explicit github.com/cyphar/filepath-securejoin # github.com/davecgh/go-spew v1.1.1 +## explicit github.com/davecgh/go-spew/spew # github.com/dsnet/compress v0.0.1 +## explicit; go 1.9 github.com/dsnet/compress github.com/dsnet/compress/bzip2 github.com/dsnet/compress/bzip2/internal/sais github.com/dsnet/compress/internal github.com/dsnet/compress/internal/errors github.com/dsnet/compress/internal/prefix +# github.com/elazarl/goproxy v0.0.0-20191011121108-aa519ddbe484 +## explicit # github.com/emicklei/go-restful v2.9.6+incompatible +## explicit github.com/emicklei/go-restful github.com/emicklei/go-restful/log # github.com/evanphx/json-patch v4.12.0+incompatible +## explicit github.com/evanphx/json-patch -# github.com/fatih/color v1.12.0 +# github.com/fatih/color v1.13.0 +## explicit; go 1.13 github.com/fatih/color # github.com/fsnotify/fsnotify v1.5.1 +## explicit; go 1.13 github.com/fsnotify/fsnotify # github.com/gardener/etcd-druid v0.8.0 +## explicit; go 1.17 github.com/gardener/etcd-druid/api/v1alpha1 # github.com/gardener/external-dns-management v0.7.18 +## explicit; go 1.14 github.com/gardener/external-dns-management/pkg/apis/dns github.com/gardener/external-dns-management/pkg/apis/dns/v1alpha1 -# github.com/gardener/gardener v1.45.0 -## explicit +# github.com/gardener/gardener v1.48.0 +## explicit; go 1.18 github.com/gardener/gardener/.github github.com/gardener/gardener/.github/ISSUE_TEMPLATE github.com/gardener/gardener/extensions/pkg/controller @@ -62,6 +83,7 @@ github.com/gardener/gardener/extensions/pkg/controller/network github.com/gardener/gardener/extensions/pkg/predicate github.com/gardener/gardener/extensions/pkg/util github.com/gardener/gardener/extensions/pkg/webhook +github.com/gardener/gardener/extensions/pkg/webhook/certificates github.com/gardener/gardener/extensions/pkg/webhook/cmd github.com/gardener/gardener/extensions/pkg/webhook/shoot github.com/gardener/gardener/extensions/test/testmachinery/healthcheck @@ -112,7 +134,6 @@ github.com/gardener/gardener/pkg/utils/errors github.com/gardener/gardener/pkg/utils/flow github.com/gardener/gardener/pkg/utils/gardener github.com/gardener/gardener/pkg/utils/imagevector -github.com/gardener/gardener/pkg/utils/infodata github.com/gardener/gardener/pkg/utils/kubernetes github.com/gardener/gardener/pkg/utils/kubernetes/health github.com/gardener/gardener/pkg/utils/kubernetes/unstructured @@ -127,28 +148,38 @@ github.com/gardener/gardener/test/framework github.com/gardener/gardener/test/framework/config github.com/gardener/gardener/test/framework/reporter # github.com/gardener/hvpa-controller/api v0.5.0 => github.com/gardener/hvpa-controller/api v0.4.0 +## explicit; go 1.15 github.com/gardener/hvpa-controller/api/v1alpha1 # github.com/gardener/machine-controller-manager v0.41.0 +## explicit; go 1.16 github.com/gardener/machine-controller-manager/pkg/apis/machine github.com/gardener/machine-controller-manager/pkg/apis/machine/v1alpha1 # github.com/ghodss/yaml v1.0.0 -github.com/ghodss/yaml -# github.com/go-logr/logr v1.2.0 ## explicit +github.com/ghodss/yaml +# github.com/go-logr/logr v1.2.3 +## explicit; go 1.16 github.com/go-logr/logr # github.com/go-logr/zapr v1.2.0 +## explicit; go 1.16 github.com/go-logr/zapr # github.com/go-openapi/jsonpointer v0.19.5 +## explicit; go 1.13 github.com/go-openapi/jsonpointer # github.com/go-openapi/jsonreference v0.19.5 +## explicit; go 1.13 github.com/go-openapi/jsonreference # github.com/go-openapi/swag v0.19.14 +## explicit; go 1.11 github.com/go-openapi/swag # github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 +## explicit; go 1.13 github.com/go-task/slim-sprig # github.com/gobuffalo/flect v0.2.3 +## explicit; go 1.13 github.com/gobuffalo/flect # github.com/gobwas/glob v0.2.3 +## explicit github.com/gobwas/glob github.com/gobwas/glob/compiler github.com/gobwas/glob/match @@ -158,6 +189,7 @@ github.com/gobwas/glob/syntax/lexer github.com/gobwas/glob/util/runes github.com/gobwas/glob/util/strings # github.com/gogo/protobuf v1.3.2 +## explicit; go 1.15 github.com/gogo/protobuf/gogoproto github.com/gogo/protobuf/jsonpb github.com/gogo/protobuf/plugin/compare @@ -187,41 +219,52 @@ github.com/gogo/protobuf/types github.com/gogo/protobuf/vanity github.com/gogo/protobuf/vanity/command # github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da +## explicit github.com/golang/groupcache/lru # github.com/golang/mock v1.6.0 -## explicit +## explicit; go 1.11 github.com/golang/mock/mockgen github.com/golang/mock/mockgen/model # github.com/golang/protobuf v1.5.2 +## explicit; go 1.9 github.com/golang/protobuf/proto github.com/golang/protobuf/ptypes github.com/golang/protobuf/ptypes/any github.com/golang/protobuf/ptypes/duration github.com/golang/protobuf/ptypes/timestamp # github.com/golang/snappy v0.0.4 +## explicit github.com/golang/snappy -# github.com/google/go-cmp v0.5.6 +# github.com/google/go-cmp v0.5.7 +## explicit; go 1.11 github.com/google/go-cmp/cmp github.com/google/go-cmp/cmp/internal/diff github.com/google/go-cmp/cmp/internal/flags github.com/google/go-cmp/cmp/internal/function github.com/google/go-cmp/cmp/internal/value # github.com/google/gofuzz v1.1.0 +## explicit; go 1.12 github.com/google/gofuzz -# github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38 +# github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 +## explicit; go 1.14 github.com/google/pprof/profile # github.com/google/uuid v1.1.2 +## explicit github.com/google/uuid # github.com/googleapis/gnostic v0.5.5 +## explicit; go 1.12 github.com/googleapis/gnostic/compiler github.com/googleapis/gnostic/extensions github.com/googleapis/gnostic/jsonschema github.com/googleapis/gnostic/openapiv2 # github.com/hashicorp/errwrap v1.0.0 +## explicit github.com/hashicorp/errwrap -# github.com/hashicorp/go-multierror v1.1.0 +# github.com/hashicorp/go-multierror v1.1.1 +## explicit; go 1.13 github.com/hashicorp/go-multierror # github.com/hashicorp/hcl v1.0.0 +## explicit github.com/hashicorp/hcl github.com/hashicorp/hcl/hcl/ast github.com/hashicorp/hcl/hcl/parser @@ -233,50 +276,72 @@ github.com/hashicorp/hcl/json/parser github.com/hashicorp/hcl/json/scanner github.com/hashicorp/hcl/json/token # github.com/huandu/xstrings v1.3.2 +## explicit; go 1.12 github.com/huandu/xstrings # github.com/imdario/mergo v0.3.12 +## explicit; go 1.13 github.com/imdario/mergo # github.com/inconshreveable/mousetrap v1.0.0 +## explicit github.com/inconshreveable/mousetrap # github.com/josharian/intern v1.0.0 +## explicit; go 1.5 github.com/josharian/intern # github.com/json-iterator/go v1.1.12 +## explicit; go 1.12 github.com/json-iterator/go +# github.com/kr/pretty v0.3.0 +## explicit; go 1.12 # github.com/kubernetes-csi/external-snapshotter/v2 v2.1.4 +## explicit; go 1.12 github.com/kubernetes-csi/external-snapshotter/v2/pkg/apis/volumesnapshot/v1beta1 -# github.com/magiconair/properties v1.8.5 +# github.com/magiconair/properties v1.8.6 +## explicit; go 1.13 github.com/magiconair/properties # github.com/mailru/easyjson v0.7.6 +## explicit; go 1.12 github.com/mailru/easyjson/buffer github.com/mailru/easyjson/jlexer github.com/mailru/easyjson/jwriter -# github.com/mattn/go-colorable v0.1.8 +# github.com/mattn/go-colorable v0.1.12 +## explicit; go 1.13 github.com/mattn/go-colorable -# github.com/mattn/go-isatty v0.0.12 +# github.com/mattn/go-isatty v0.0.14 +## explicit; go 1.12 github.com/mattn/go-isatty # github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 +## explicit; go 1.9 github.com/matttproud/golang_protobuf_extensions/pbutil # github.com/mholt/archiver v3.1.1+incompatible +## explicit github.com/mholt/archiver # github.com/mitchellh/copystructure v1.2.0 +## explicit; go 1.15 github.com/mitchellh/copystructure # github.com/mitchellh/hashstructure/v2 v2.0.2 +## explicit; go 1.14 github.com/mitchellh/hashstructure/v2 -# github.com/mitchellh/mapstructure v1.4.1 +# github.com/mitchellh/mapstructure v1.4.3 +## explicit; go 1.14 github.com/mitchellh/mapstructure # github.com/mitchellh/reflectwalk v1.0.2 +## explicit github.com/mitchellh/reflectwalk # github.com/moby/spdystream v0.2.0 +## explicit; go 1.13 github.com/moby/spdystream github.com/moby/spdystream/spdy # github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd +## explicit github.com/modern-go/concurrent # github.com/modern-go/reflect2 v1.0.2 +## explicit; go 1.12 github.com/modern-go/reflect2 # github.com/nwaples/rardecode v1.1.2 -github.com/nwaples/rardecode -# github.com/onsi/ginkgo/v2 v2.1.3 ## explicit +github.com/nwaples/rardecode +# github.com/onsi/ginkgo/v2 v2.1.4 +## explicit; go 1.18 github.com/onsi/ginkgo/v2 github.com/onsi/ginkgo/v2/config github.com/onsi/ginkgo/v2/formatter @@ -297,8 +362,8 @@ github.com/onsi/ginkgo/v2/internal/parallel_support github.com/onsi/ginkgo/v2/internal/testingtproxy github.com/onsi/ginkgo/v2/reporters github.com/onsi/ginkgo/v2/types -# github.com/onsi/gomega v1.18.0 -## explicit +# github.com/onsi/gomega v1.19.0 +## explicit; go 1.18 github.com/onsi/gomega github.com/onsi/gomega/format github.com/onsi/gomega/internal @@ -309,78 +374,109 @@ github.com/onsi/gomega/matchers/support/goraph/edge github.com/onsi/gomega/matchers/support/goraph/node github.com/onsi/gomega/matchers/support/goraph/util github.com/onsi/gomega/types -# github.com/pelletier/go-toml v1.9.3 +# github.com/pelletier/go-toml v1.9.4 +## explicit; go 1.12 github.com/pelletier/go-toml +# github.com/pelletier/go-toml/v2 v2.0.0-beta.8 +## explicit; go 1.16 +github.com/pelletier/go-toml/v2 +github.com/pelletier/go-toml/v2/internal/ast +github.com/pelletier/go-toml/v2/internal/danger +github.com/pelletier/go-toml/v2/internal/tracker # github.com/pierrec/lz4 v2.6.1+incompatible +## explicit github.com/pierrec/lz4 github.com/pierrec/lz4/internal/xxh32 # github.com/pkg/errors v0.9.1 ## explicit github.com/pkg/errors -# github.com/prometheus/client_golang v1.11.0 +# github.com/prometheus/client_golang v1.11.0 => github.com/prometheus/client_golang v1.11.0 +## explicit; go 1.13 github.com/prometheus/client_golang/prometheus github.com/prometheus/client_golang/prometheus/collectors github.com/prometheus/client_golang/prometheus/internal github.com/prometheus/client_golang/prometheus/promhttp # github.com/prometheus/client_model v0.2.0 +## explicit; go 1.9 github.com/prometheus/client_model/go # github.com/prometheus/common v0.28.0 +## explicit; go 1.13 github.com/prometheus/common/expfmt github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg github.com/prometheus/common/model # github.com/prometheus/procfs v0.6.0 +## explicit; go 1.13 github.com/prometheus/procfs github.com/prometheus/procfs/internal/fs github.com/prometheus/procfs/internal/util -# github.com/russross/blackfriday/v2 v2.0.1 +# github.com/russross/blackfriday/v2 v2.1.0 +## explicit github.com/russross/blackfriday/v2 -# github.com/shurcooL/sanitized_anchor_name v1.0.0 -github.com/shurcooL/sanitized_anchor_name # github.com/sirupsen/logrus v1.8.1 +## explicit; go 1.13 github.com/sirupsen/logrus -# github.com/spf13/afero v1.6.0 +# github.com/spf13/afero v1.8.2 +## explicit; go 1.13 github.com/spf13/afero github.com/spf13/afero/mem -# github.com/spf13/cast v1.3.1 -github.com/spf13/cast -# github.com/spf13/cobra v1.2.1 +# github.com/spf13/cast v1.4.1 ## explicit +github.com/spf13/cast +# github.com/spf13/cobra v1.4.0 +## explicit; go 1.15 github.com/spf13/cobra # github.com/spf13/jwalterweatherman v1.1.0 +## explicit github.com/spf13/jwalterweatherman # github.com/spf13/pflag v1.0.5 -## explicit +## explicit; go 1.12 github.com/spf13/pflag -# github.com/spf13/viper v1.8.1 +# github.com/spf13/viper v1.11.0 +## explicit; go 1.17 github.com/spf13/viper +github.com/spf13/viper/internal/encoding +github.com/spf13/viper/internal/encoding/dotenv +github.com/spf13/viper/internal/encoding/hcl +github.com/spf13/viper/internal/encoding/ini +github.com/spf13/viper/internal/encoding/javaproperties +github.com/spf13/viper/internal/encoding/json +github.com/spf13/viper/internal/encoding/toml +github.com/spf13/viper/internal/encoding/yaml # github.com/subosito/gotenv v1.2.0 +## explicit github.com/subosito/gotenv # github.com/ulikunitz/xz v0.5.10 +## explicit; go 1.12 github.com/ulikunitz/xz github.com/ulikunitz/xz/internal/hash github.com/ulikunitz/xz/internal/xlog github.com/ulikunitz/xz/lzma # github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 +## explicit github.com/xi2/xz # go.uber.org/atomic v1.7.0 +## explicit; go 1.13 go.uber.org/atomic # go.uber.org/multierr v1.6.0 +## explicit; go 1.12 go.uber.org/multierr -# go.uber.org/zap v1.19.1 +# go.uber.org/zap v1.21.0 +## explicit; go 1.13 go.uber.org/zap go.uber.org/zap/buffer go.uber.org/zap/internal/bufferpool go.uber.org/zap/internal/color go.uber.org/zap/internal/exit go.uber.org/zap/zapcore -# golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 +# golang.org/x/crypto v0.0.0-20220516162934-403b01795ae8 +## explicit; go 1.17 golang.org/x/crypto/blowfish golang.org/x/crypto/cast5 golang.org/x/crypto/chacha20 golang.org/x/crypto/curve25519 golang.org/x/crypto/curve25519/internal/field golang.org/x/crypto/ed25519 -golang.org/x/crypto/ed25519/internal/edwards25519 +golang.org/x/crypto/internal/poly1305 golang.org/x/crypto/internal/subtle golang.org/x/crypto/openpgp golang.org/x/crypto/openpgp/armor @@ -390,16 +486,17 @@ golang.org/x/crypto/openpgp/errors golang.org/x/crypto/openpgp/packet golang.org/x/crypto/openpgp/s2k golang.org/x/crypto/pbkdf2 -golang.org/x/crypto/poly1305 golang.org/x/crypto/scrypt golang.org/x/crypto/ssh golang.org/x/crypto/ssh/internal/bcrypt_pbkdf -# golang.org/x/mod v0.5.1 +# golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3 +## explicit; go 1.17 golang.org/x/mod/internal/lazyregexp golang.org/x/mod/modfile golang.org/x/mod/module golang.org/x/mod/semver -# golang.org/x/net v0.0.0-20211209124913-491a49abca63 +# golang.org/x/net v0.0.0-20220412020605-290c469a71a5 +## explicit; go 1.17 golang.org/x/net/context golang.org/x/net/context/ctxhttp golang.org/x/net/html @@ -409,19 +506,23 @@ golang.org/x/net/http/httpguts golang.org/x/net/http2 golang.org/x/net/http2/hpack golang.org/x/net/idna -# golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f +# golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5 +## explicit; go 1.11 golang.org/x/oauth2 golang.org/x/oauth2/internal -# golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e +# golang.org/x/sys v0.0.0-20220412211240-33da011f77ad +## explicit; go 1.17 golang.org/x/sys/cpu golang.org/x/sys/execabs golang.org/x/sys/internal/unsafeheader golang.org/x/sys/plan9 golang.org/x/sys/unix golang.org/x/sys/windows -# golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b +# golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 +## explicit; go 1.17 golang.org/x/term # golang.org/x/text v0.3.7 +## explicit; go 1.17 golang.org/x/text/encoding golang.org/x/text/encoding/charmap golang.org/x/text/encoding/htmlindex @@ -444,9 +545,10 @@ golang.org/x/text/unicode/bidi golang.org/x/text/unicode/norm golang.org/x/text/width # golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac -golang.org/x/time/rate -# golang.org/x/tools v0.1.9 ## explicit +golang.org/x/time/rate +# golang.org/x/tools v0.1.10 +## explicit; go 1.17 golang.org/x/tools/cmd/goimports golang.org/x/tools/go/ast/astutil golang.org/x/tools/go/ast/inspector @@ -466,12 +568,15 @@ golang.org/x/tools/internal/imports golang.org/x/tools/internal/packagesinternal golang.org/x/tools/internal/typeparams golang.org/x/tools/internal/typesinternal -# golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 +# golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f +## explicit; go 1.11 golang.org/x/xerrors golang.org/x/xerrors/internal # gomodules.xyz/jsonpatch/v2 v2.2.0 +## explicit; go 1.12 gomodules.xyz/jsonpatch/v2 # google.golang.org/appengine v1.6.7 +## explicit; go 1.11 google.golang.org/appengine/internal google.golang.org/appengine/internal/base google.golang.org/appengine/internal/datastore @@ -479,7 +584,8 @@ google.golang.org/appengine/internal/log google.golang.org/appengine/internal/remote_api google.golang.org/appengine/internal/urlfetch google.golang.org/appengine/urlfetch -# google.golang.org/protobuf v1.27.1 +# google.golang.org/protobuf v1.28.0 +## explicit; go 1.11 google.golang.org/protobuf/encoding/prototext google.golang.org/protobuf/encoding/protowire google.golang.org/protobuf/internal/descfmt @@ -511,25 +617,32 @@ google.golang.org/protobuf/types/known/anypb google.golang.org/protobuf/types/known/durationpb google.golang.org/protobuf/types/known/timestamppb # gopkg.in/inf.v0 v0.9.1 +## explicit gopkg.in/inf.v0 -# gopkg.in/ini.v1 v1.62.0 +# gopkg.in/ini.v1 v1.66.4 +## explicit gopkg.in/ini.v1 # gopkg.in/yaml.v2 v2.4.0 +## explicit; go 1.15 gopkg.in/yaml.v2 # gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b +## explicit gopkg.in/yaml.v3 # istio.io/api v0.0.0-20220304035241-8c47cbbea144 +## explicit; go 1.12 istio.io/api/analysis/v1alpha1 istio.io/api/meta/v1alpha1 istio.io/api/networking/v1alpha3 istio.io/api/networking/v1beta1 # istio.io/client-go v1.12.5 +## explicit; go 1.16 istio.io/client-go/pkg/apis/networking/v1alpha3 istio.io/client-go/pkg/apis/networking/v1beta1 # istio.io/gogo-genproto v0.0.0-20210113155706-4daf5697332f +## explicit; go 1.15 istio.io/gogo-genproto/googleapis/google/api # k8s.io/api v0.23.3 => k8s.io/api v0.23.3 -## explicit +## explicit; go 1.16 k8s.io/api/admission/v1 k8s.io/api/admission/v1beta1 k8s.io/api/admissionregistration/v1 @@ -578,12 +691,13 @@ k8s.io/api/storage/v1 k8s.io/api/storage/v1alpha1 k8s.io/api/storage/v1beta1 # k8s.io/apiextensions-apiserver v0.23.3 => k8s.io/apiextensions-apiserver v0.23.3 +## explicit; go 1.16 k8s.io/apiextensions-apiserver/pkg/apis/apiextensions k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1 k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1 k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/scheme # k8s.io/apimachinery v0.23.3 => k8s.io/apimachinery v0.23.3 -## explicit +## explicit; go 1.16 k8s.io/apimachinery/pkg/api/equality k8s.io/apimachinery/pkg/api/errors k8s.io/apimachinery/pkg/api/meta @@ -608,7 +722,6 @@ k8s.io/apimachinery/pkg/runtime/serializer/versioning k8s.io/apimachinery/pkg/selection k8s.io/apimachinery/pkg/types k8s.io/apimachinery/pkg/util/cache -k8s.io/apimachinery/pkg/util/clock k8s.io/apimachinery/pkg/util/diff k8s.io/apimachinery/pkg/util/duration k8s.io/apimachinery/pkg/util/errors @@ -637,14 +750,16 @@ k8s.io/apimachinery/third_party/forked/golang/json k8s.io/apimachinery/third_party/forked/golang/netutil k8s.io/apimachinery/third_party/forked/golang/reflect # k8s.io/apiserver v0.23.3 => k8s.io/apiserver v0.23.3 +## explicit; go 1.16 k8s.io/apiserver/pkg/apis/config k8s.io/apiserver/pkg/apis/config/v1 k8s.io/apiserver/pkg/authentication/user # k8s.io/autoscaler/vertical-pod-autoscaler v0.10.0 => k8s.io/autoscaler/vertical-pod-autoscaler v0.9.0 +## explicit; go 1.14 k8s.io/autoscaler/vertical-pod-autoscaler/pkg/apis/autoscaling.k8s.io/v1 k8s.io/autoscaler/vertical-pod-autoscaler/pkg/apis/autoscaling.k8s.io/v1beta2 # k8s.io/client-go v11.0.1-0.20190409021438-1a26190bd76a+incompatible => k8s.io/client-go v0.23.3 -## explicit +## explicit; go 1.16 k8s.io/client-go/applyconfigurations/admissionregistration/v1 k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1 k8s.io/client-go/applyconfigurations/apiserverinternal/v1alpha1 @@ -774,7 +889,7 @@ k8s.io/client-go/util/keyutil k8s.io/client-go/util/retry k8s.io/client-go/util/workqueue # k8s.io/code-generator v0.23.3 => k8s.io/code-generator v0.23.3 -## explicit +## explicit; go 1.16 k8s.io/code-generator k8s.io/code-generator/cmd/client-gen k8s.io/code-generator/cmd/client-gen/args @@ -810,11 +925,12 @@ k8s.io/code-generator/pkg/namer k8s.io/code-generator/pkg/util k8s.io/code-generator/third_party/forked/golang/reflect # k8s.io/component-base v0.23.3 => k8s.io/component-base v0.23.3 -## explicit +## explicit; go 1.16 k8s.io/component-base/config k8s.io/component-base/config/v1alpha1 k8s.io/component-base/version # k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c +## explicit; go 1.13 k8s.io/gengo/args k8s.io/gengo/examples/deepcopy-gen/generators k8s.io/gengo/examples/defaulter-gen/generators @@ -826,6 +942,7 @@ k8s.io/gengo/namer k8s.io/gengo/parser k8s.io/gengo/types # k8s.io/helm v2.16.1+incompatible => k8s.io/helm v2.13.1+incompatible +## explicit k8s.io/helm/pkg/chartutil k8s.io/helm/pkg/downloader k8s.io/helm/pkg/engine @@ -848,15 +965,19 @@ k8s.io/helm/pkg/tlsutil k8s.io/helm/pkg/urlutil k8s.io/helm/pkg/version # k8s.io/klog v1.0.0 +## explicit; go 1.12 k8s.io/klog # k8s.io/klog/v2 v2.30.0 +## explicit; go 1.13 k8s.io/klog/v2 # k8s.io/kube-aggregator v0.23.3 => k8s.io/kube-aggregator v0.23.3 +## explicit; go 1.16 k8s.io/kube-aggregator/pkg/apis/apiregistration k8s.io/kube-aggregator/pkg/apis/apiregistration/v1 k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1 k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/scheme # k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65 +## explicit; go 1.16 k8s.io/kube-openapi/cmd/openapi-gen k8s.io/kube-openapi/cmd/openapi-gen/args k8s.io/kube-openapi/pkg/common @@ -867,9 +988,11 @@ k8s.io/kube-openapi/pkg/util/proto k8s.io/kube-openapi/pkg/util/sets k8s.io/kube-openapi/pkg/validation/spec # k8s.io/metrics v0.23.3 +## explicit; go 1.16 k8s.io/metrics/pkg/apis/metrics k8s.io/metrics/pkg/apis/metrics/v1beta1 -# k8s.io/utils v0.0.0-20211116205334-6203023598ed +# k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9 +## explicit; go 1.12 k8s.io/utils/buffer k8s.io/utils/clock k8s.io/utils/clock/testing @@ -879,7 +1002,7 @@ k8s.io/utils/net k8s.io/utils/pointer k8s.io/utils/trace # sigs.k8s.io/controller-runtime v0.11.1 -## explicit +## explicit; go 1.17 sigs.k8s.io/controller-runtime/pkg/cache sigs.k8s.io/controller-runtime/pkg/cache/internal sigs.k8s.io/controller-runtime/pkg/certwatcher @@ -916,7 +1039,8 @@ sigs.k8s.io/controller-runtime/pkg/source/internal sigs.k8s.io/controller-runtime/pkg/webhook sigs.k8s.io/controller-runtime/pkg/webhook/admission sigs.k8s.io/controller-runtime/pkg/webhook/internal/metrics -# sigs.k8s.io/controller-runtime/tools/setup-envtest v0.0.0-20211208212546-f236f0345ad2 +# sigs.k8s.io/controller-runtime/tools/setup-envtest v0.0.0-20220513175748-3f265c36d7bf +## explicit; go 1.17 sigs.k8s.io/controller-runtime/tools/setup-envtest sigs.k8s.io/controller-runtime/tools/setup-envtest/env sigs.k8s.io/controller-runtime/tools/setup-envtest/remote @@ -924,6 +1048,7 @@ sigs.k8s.io/controller-runtime/tools/setup-envtest/store sigs.k8s.io/controller-runtime/tools/setup-envtest/versions sigs.k8s.io/controller-runtime/tools/setup-envtest/workflows # sigs.k8s.io/controller-tools v0.8.0 +## explicit; go 1.17 sigs.k8s.io/controller-tools/cmd/controller-gen sigs.k8s.io/controller-tools/pkg/crd sigs.k8s.io/controller-tools/pkg/crd/markers @@ -939,15 +1064,19 @@ sigs.k8s.io/controller-tools/pkg/schemapatcher/internal/yaml sigs.k8s.io/controller-tools/pkg/version sigs.k8s.io/controller-tools/pkg/webhook # sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6 +## explicit; go 1.16 sigs.k8s.io/json sigs.k8s.io/json/internal/golang/encoding/json # sigs.k8s.io/structured-merge-diff/v4 v4.2.1 +## explicit; go 1.13 sigs.k8s.io/structured-merge-diff/v4/fieldpath sigs.k8s.io/structured-merge-diff/v4/schema sigs.k8s.io/structured-merge-diff/v4/typed sigs.k8s.io/structured-merge-diff/v4/value # sigs.k8s.io/yaml v1.3.0 +## explicit; go 1.12 sigs.k8s.io/yaml +# github.com/prometheus/client_golang => github.com/prometheus/client_golang v1.11.0 # k8s.io/api => k8s.io/api v0.23.3 # k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.23.3 # k8s.io/apimachinery => k8s.io/apimachinery v0.23.3 diff --git a/vendor/sigs.k8s.io/controller-runtime/tools/setup-envtest/go.mod b/vendor/sigs.k8s.io/controller-runtime/tools/setup-envtest/go.mod deleted file mode 100644 index c1734fcbf..000000000 --- a/vendor/sigs.k8s.io/controller-runtime/tools/setup-envtest/go.mod +++ /dev/null @@ -1,13 +0,0 @@ -module sigs.k8s.io/controller-runtime/tools/setup-envtest - -go 1.16 - -require ( - github.com/go-logr/logr v1.2.0 - github.com/go-logr/zapr v1.2.0 - github.com/onsi/ginkgo v1.16.5 - github.com/onsi/gomega v1.17.0 - github.com/spf13/afero v1.6.0 - github.com/spf13/pflag v1.0.5 - go.uber.org/zap v1.19.1 -) diff --git a/vendor/sigs.k8s.io/controller-runtime/tools/setup-envtest/go.sum b/vendor/sigs.k8s.io/controller-runtime/tools/setup-envtest/go.sum deleted file mode 100644 index 3e5a29f95..000000000 --- a/vendor/sigs.k8s.io/controller-runtime/tools/setup-envtest/go.sum +++ /dev/null @@ -1,149 +0,0 @@ -github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= -github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= -github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/go-logr/logr v1.2.0 h1:QK40JKJyMdUDz+h+xvCsru/bJhvG0UxvePV0ufL/AcE= -github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/zapr v1.2.0 h1:n4JnPI1T3Qq1SFEi/F8rwLrZERp2bso19PJZDB9dayk= -github.com/go-logr/zapr v1.2.0/go.mod h1:Qa4Bsj2Vb+FAVeAKsLD8RLQ+YRJB8YDmOAKxaBQf7Ro= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= -github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= -github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= -github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= -github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= -github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.17.0 h1:9Luw4uT5HTjHTN8+aNcSThgH1vdXnmdJ8xIfZ4wyTRE= -github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/spf13/afero v1.6.0 h1:xoax2sJ2DT8S8xA2paPFjDCScCNeWsg75VG0DLRreiY= -github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= -github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= -github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= -go.uber.org/goleak v1.1.11-0.20210813005559-691160354723 h1:sHOAIxRGBp443oHZIPB+HsUGaksVCXVQENPxwTfQdH4= -go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= -go.uber.org/zap v1.19.1 h1:ue41HOKd1vGURxrmeKIgELGb3jPW9DMUDGtsinblHwI= -go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -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/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= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210428140749-89ef3d95e781 h1:DzZ89McO9/gWPsQXS/FVKAlG02ZjaQ6AlZRBimEYOd0= -golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= -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-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/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-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007 h1:gG67DSER+11cZvqIMb8S8bt0vZtiN6xWYARwirrOSfE= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -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.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -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-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -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= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -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= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/vendor/sigs.k8s.io/controller-runtime/tools/setup-envtest/main.go b/vendor/sigs.k8s.io/controller-runtime/tools/setup-envtest/main.go index 9c0ab7805..517d12b9d 100644 --- a/vendor/sigs.k8s.io/controller-runtime/tools/setup-envtest/main.go +++ b/vendor/sigs.k8s.io/controller-runtime/tools/setup-envtest/main.go @@ -203,7 +203,7 @@ Versions: 1.16.x / 1.16.* / 1.16 # any 1.16 version ~1.19.3 # any 1.19 version that's at least 1.19.3 <1.17 # any release 1.17.x or below - 1.22.x! # the latest one 1.22 release avaible remotely + 1.22.x! # the latest one 1.22 release available remotely Output: diff --git a/vendor/sigs.k8s.io/controller-runtime/tools/setup-envtest/remote/client.go b/vendor/sigs.k8s.io/controller-runtime/tools/setup-envtest/remote/client.go index 00e484081..be8253258 100644 --- a/vendor/sigs.k8s.io/controller-runtime/tools/setup-envtest/remote/client.go +++ b/vendor/sigs.k8s.io/controller-runtime/tools/setup-envtest/remote/client.go @@ -8,6 +8,7 @@ import ( "crypto/md5" //nolint:gosec "encoding/base64" "encoding/json" + "errors" "fmt" "io" "net/http" @@ -160,7 +161,7 @@ func (c *Client) GetVersion(ctx context.Context, version versions.Concrete, plat checksum := md5.New() //nolint:gosec for cont := true; cont; { amt, err := resp.Body.Read(buf) - if err != nil && err != io.EOF { + if err != nil && !errors.Is(err, io.EOF) { return fmt.Errorf("unable read next chunk of %s: %w", itemName, err) } if amt > 0 { @@ -170,7 +171,7 @@ func (c *Client) GetVersion(ctx context.Context, version versions.Concrete, plat return fmt.Errorf("unable write next chunk of %s: %w", itemName, err) } } - cont = amt > 0 && err != io.EOF + cont = amt > 0 && !errors.Is(err, io.EOF) } sum := base64.StdEncoding.EncodeToString(checksum.Sum(nil)) diff --git a/vendor/sigs.k8s.io/controller-runtime/tools/setup-envtest/store/store.go b/vendor/sigs.k8s.io/controller-runtime/tools/setup-envtest/store/store.go index fd19f8303..e6f258e4a 100644 --- a/vendor/sigs.k8s.io/controller-runtime/tools/setup-envtest/store/store.go +++ b/vendor/sigs.k8s.io/controller-runtime/tools/setup-envtest/store/store.go @@ -182,7 +182,7 @@ func (s *Store) Add(ctx context.Context, item Item, contents io.Reader) (resErr return err } } - if err != nil && err != io.EOF { + if err != nil && !errors.Is(err, io.EOF) { return fmt.Errorf("unable to finish un-tar-ing the downloaded archive: %w", err) } log.V(1).Info("unpacked archive") @@ -229,7 +229,7 @@ func (s *Store) Remove(ctx context.Context, matching Filter) ([]Item, error) { func (s *Store) Path(item Item) (string, error) { path := s.unpackedPath(item.dirName()) // NB(directxman12): we need root's realpath because RealPath only - // looks at it's own path, and so thus doesn't prepend the underlying + // looks at its own path, and so thus doesn't prepend the underlying // root's base path. // // Technically, if we're fed something that's double wrapped as root, diff --git a/vendor/sigs.k8s.io/json/go.mod b/vendor/sigs.k8s.io/json/go.mod deleted file mode 100644 index 11cb4728c..000000000 --- a/vendor/sigs.k8s.io/json/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module sigs.k8s.io/json - -go 1.16 diff --git a/vendor/sigs.k8s.io/yaml/go.mod b/vendor/sigs.k8s.io/yaml/go.mod deleted file mode 100644 index 818bbb519..000000000 --- a/vendor/sigs.k8s.io/yaml/go.mod +++ /dev/null @@ -1,8 +0,0 @@ -module sigs.k8s.io/yaml - -go 1.12 - -require ( - github.com/davecgh/go-spew v1.1.1 - gopkg.in/yaml.v2 v2.4.0 -) diff --git a/vendor/sigs.k8s.io/yaml/go.sum b/vendor/sigs.k8s.io/yaml/go.sum deleted file mode 100644 index b7b8cbb10..000000000 --- a/vendor/sigs.k8s.io/yaml/go.sum +++ /dev/null @@ -1,6 +0,0 @@ -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= From 120d612bb74ab24dd5c9dbecde9527b7386426a1 Mon Sep 17 00:00:00 2001 From: Rafael Franzke Date: Wed, 1 Jun 2022 15:30:31 +0200 Subject: [PATCH 5/8] Adapt to auto-rotation of webhook server certs Ref https://github.com/gardener/gardener/pull/6003 --- .../app/app.go | 40 ++---- pkg/controller/actuator.go | 16 +-- pkg/controller/actuator_delete.go | 2 +- pkg/controller/actuator_reconcile.go | 121 +++--------------- pkg/controller/add.go | 9 +- 5 files changed, 43 insertions(+), 145 deletions(-) diff --git a/cmd/gardener-extension-networking-cilium/app/app.go b/cmd/gardener-extension-networking-cilium/app/app.go index 6beac813c..b4a4ac07b 100644 --- a/cmd/gardener-extension-networking-cilium/app/app.go +++ b/cmd/gardener-extension-networking-cilium/app/app.go @@ -24,14 +24,14 @@ import ( ciliumcmd "github.com/gardener/gardener-extension-networking-cilium/pkg/cmd" ciliumcontroller "github.com/gardener/gardener-extension-networking-cilium/pkg/controller" "github.com/gardener/gardener-extension-networking-cilium/pkg/healthcheck" - "github.com/pkg/errors" "github.com/gardener/gardener/extensions/pkg/controller" controllercmd "github.com/gardener/gardener/extensions/pkg/controller/cmd" "github.com/gardener/gardener/extensions/pkg/util" webhookcmd "github.com/gardener/gardener/extensions/pkg/webhook/cmd" + v1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants" + "github.com/pkg/errors" "github.com/spf13/cobra" - admissionregistrationv1 "k8s.io/api/admissionregistration/v1" corev1 "k8s.io/api/core/v1" "k8s.io/client-go/tools/leaderelection/resourcelock" "sigs.k8s.io/controller-runtime/pkg/client" @@ -70,7 +70,13 @@ func NewControllerManagerCommand(ctx context.Context) *cobra.Command { } webhookSwitches = ciliumcmd.WebhookSwitchOptions() - webhookOptions = webhookcmd.NewAddToManagerOptions(cilium.Name, webhookServerOptions, webhookSwitches) + webhookOptions = webhookcmd.NewAddToManagerOptions( + cilium.Name, + ciliumcontroller.ShootWebhooksResourceName, + map[string]string{v1beta1constants.LabelNetworkingProvider: cilium.Type}, + webhookServerOptions, + webhookSwitches, + ) aggOption = controllercmd.NewOptionAggregator( generalOpts, @@ -117,21 +123,11 @@ func NewControllerManagerCommand(ctx context.Context) *cobra.Command { configFileOpts.Completed().ApplyHealthCheckConfig(&healthcheck.AddOptions.HealthCheckConfig) healthCheckCtrlOpts.Completed().Apply(&healthcheck.AddOptions.Controller) - _, shootWebhooks, err := webhookOptions.Completed().AddToManager(ctx, mgr) + shootWebhookConfig, err := webhookOptions.Completed().AddToManager(ctx, mgr) if err != nil { return errors.Wrap(err, "Could not add webhooks to manager") } - - ciliumcontroller.DefaultAddOptions.ShootWebhooks = shootWebhooks - - // Update shoot webhook configuration in case the webhook server port has changed. - if err := mgr.Add(&shootWebhookReconciler{ - client: mgr.GetClient(), - webhookServerPort: mgr.GetWebhookServer().Port, - shootWebhooks: shootWebhooks, - }); err != nil { - return fmt.Errorf("error adding runnable for reconciling shoot webhooks in all namespaces: %w", err) - } + ciliumcontroller.DefaultAddOptions.ShootWebhookConfig = shootWebhookConfig if err := ciliumcontroller.AddToManager(mgr); err != nil { return fmt.Errorf("could not add controllers to manager: %w", err) @@ -153,17 +149,3 @@ func NewControllerManagerCommand(ctx context.Context) *cobra.Command { return cmd } - -type shootWebhookReconciler struct { - client client.Client - webhookServerPort int - shootWebhooks []admissionregistrationv1.MutatingWebhook -} - -func (s *shootWebhookReconciler) NeedLeaderElection() bool { - return true -} - -func (s *shootWebhookReconciler) Start(ctx context.Context) error { - return ciliumcontroller.ReconcileShootWebhooksForAllNamespaces(ctx, s.client, cilium.Name, cilium.Type, s.webhookServerPort, s.shootWebhooks) -} diff --git a/pkg/controller/actuator.go b/pkg/controller/actuator.go index 4c8444f60..963201fb4 100644 --- a/pkg/controller/actuator.go +++ b/pkg/controller/actuator.go @@ -16,12 +16,12 @@ package controller import ( "fmt" + "sync/atomic" extensionscontroller "github.com/gardener/gardener/extensions/pkg/controller" "github.com/gardener/gardener/extensions/pkg/controller/network" gardenerkubernetes "github.com/gardener/gardener/pkg/client/kubernetes" "github.com/go-logr/logr" - admissionregistrationv1 "k8s.io/api/admissionregistration/v1" "k8s.io/client-go/rest" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/log" @@ -36,20 +36,20 @@ type actuator struct { chartRendererFactory extensionscontroller.ChartRendererFactory chartApplier gardenerkubernetes.ChartApplier - shootWebhooks []admissionregistrationv1.MutatingWebhook - webhookServerPort int + atomicShootWebhookConfig *atomic.Value + webhookServerPort int } // LogID is the id that will be used in log statements. const LogID = "network-cilium-actuator" // NewActuator creates a new Actuator that updates the status of the handled Network resources. -func NewActuator(chartRendererFactory extensionscontroller.ChartRendererFactory, shootWebhooks []admissionregistrationv1.MutatingWebhook, webhookServerPort int) network.Actuator { +func NewActuator(chartRendererFactory extensionscontroller.ChartRendererFactory, shootWebhookConfig *atomic.Value, webhookServerPort int) network.Actuator { return &actuator{ - logger: log.Log.WithName(LogID), - chartRendererFactory: chartRendererFactory, - shootWebhooks: shootWebhooks, - webhookServerPort: webhookServerPort, + logger: log.Log.WithName(LogID), + chartRendererFactory: chartRendererFactory, + atomicShootWebhookConfig: shootWebhookConfig, + webhookServerPort: webhookServerPort, } } diff --git a/pkg/controller/actuator_delete.go b/pkg/controller/actuator_delete.go index 7a8e7acbf..992eaddeb 100644 --- a/pkg/controller/actuator_delete.go +++ b/pkg/controller/actuator_delete.go @@ -49,7 +49,7 @@ func (a *actuator) Delete(ctx context.Context, network *extensionsv1alpha1.Netwo return err } - if len(a.shootWebhooks) > 0 { + if a.atomicShootWebhookConfig != nil { networkPolicy := extensionswebhookshoot.GetNetworkPolicyMeta(network.Namespace, cilium.Name) if err := a.client.Delete(ctx, networkPolicy); client.IgnoreNotFound(err) != nil { return fmt.Errorf("could not delete network policy for shoot webhooks in namespace '%s': %w", network.Namespace, err) diff --git a/pkg/controller/actuator_reconcile.go b/pkg/controller/actuator_reconcile.go index 349b09366..f2aad1578 100644 --- a/pkg/controller/actuator_reconcile.go +++ b/pkg/controller/actuator_reconcile.go @@ -15,7 +15,6 @@ package controller import ( - "bytes" "context" "fmt" @@ -24,25 +23,15 @@ import ( "github.com/gardener/gardener-extension-networking-cilium/pkg/cilium" extensionscontroller "github.com/gardener/gardener/extensions/pkg/controller" - "github.com/gardener/gardener/extensions/pkg/webhook" - extensionswebhookshoot "github.com/gardener/gardener/extensions/pkg/webhook/shoot" + extensionshootwebhook "github.com/gardener/gardener/extensions/pkg/webhook/shoot" "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants" v1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants" extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" gardenerkubernetes "github.com/gardener/gardener/pkg/client/kubernetes" - "github.com/gardener/gardener/pkg/extensions" "github.com/gardener/gardener/pkg/utils/chart" - "github.com/gardener/gardener/pkg/utils/flow" - kutil "github.com/gardener/gardener/pkg/utils/kubernetes" - "github.com/gardener/gardener/pkg/utils/managedresources" "github.com/gardener/gardener/pkg/utils/managedresources/builder" admissionregistrationv1 "k8s.io/api/admissionregistration/v1" corev1 "k8s.io/api/core/v1" - networkingv1 "k8s.io/api/networking/v1" - apierrors "k8s.io/apimachinery/pkg/api/errors" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/serializer/json" "k8s.io/apimachinery/pkg/util/validation/field" "sigs.k8s.io/controller-runtime/pkg/client" ) @@ -107,8 +96,23 @@ func (a *actuator) Reconcile(ctx context.Context, network *extensionsv1alpha1.Ne } } - if len(a.shootWebhooks) > 0 { - if err := ReconcileShootWebhooks(ctx, a.client, network.Namespace, cilium.Name, a.webhookServerPort, a.shootWebhooks, cluster); err != nil { + if a.atomicShootWebhookConfig != nil { + value := a.atomicShootWebhookConfig.Load() + webhookConfig, ok := value.(*admissionregistrationv1.MutatingWebhookConfiguration) + if !ok { + return fmt.Errorf("expected *admissionregistrationv1.MutatingWebhookConfiguration, got %T", value) + } + + if err := extensionshootwebhook.ReconcileWebhookConfig( + ctx, + a.client, + network.Namespace, + cilium.Name, + ShootWebhooksResourceName, + a.webhookServerPort, + webhookConfig, + cluster, + ); err != nil { return fmt.Errorf("could not reconcile shoot webhooks: %w", err) } } @@ -144,92 +148,3 @@ func (a *actuator) Reconcile(ctx context.Context, network *extensionsv1alpha1.Ne return a.updateProviderStatus(ctx, network, networkConfig) } - -func marshalWebhooks(webhooks []admissionregistrationv1.MutatingWebhook, name string) ([]byte, error) { - var ( - buf = new(bytes.Buffer) - encoder = json.NewYAMLSerializer(json.DefaultMetaFactory, nil, nil) - - apiVersion, kind = admissionregistrationv1.SchemeGroupVersion.WithKind("MutatingWebhookConfiguration").ToAPIVersionAndKind() - mutatingWebhookConfiguration runtime.Object = &admissionregistrationv1.MutatingWebhookConfiguration{ - TypeMeta: metav1.TypeMeta{ - APIVersion: apiVersion, - Kind: kind, - }, - ObjectMeta: metav1.ObjectMeta{ - Name: webhook.NamePrefix + name + webhook.NameSuffixShoot, - }, - Webhooks: webhooks, - } - ) - - if err := encoder.Encode(mutatingWebhookConfiguration, buf); err != nil { - return nil, err - } - - return buf.Bytes(), nil -} - -// ReconcileShootWebhooks deploys the shoot webhook configuration and a managed resource that contains the MutatingWebhookConfiguration. -func ReconcileShootWebhooks(ctx context.Context, c client.Client, namespace, providerName string, serverPort int, shootWebhooks []admissionregistrationv1.MutatingWebhook, cluster *extensionscontroller.Cluster) error { - if err := extensionswebhookshoot.EnsureNetworkPolicy(ctx, c, namespace, providerName, serverPort); err != nil { - return fmt.Errorf("could not create or update network policy for shoot webhooks in namespace '%s': %w", namespace, err) - } - - if cluster.Shoot == nil { - return fmt.Errorf("no shoot found in cluster resource") - } - - webhookConfiguration, err := marshalWebhooks(shootWebhooks, providerName) - if err != nil { - return err - } - data := map[string][]byte{"mutatingwebhookconfiguration.yaml": webhookConfiguration} - - if err := managedresources.Create(ctx, c, namespace, ShootWebhooksResourceName, false, "", data, nil, nil, nil); err != nil { - return fmt.Errorf("could not create or update managed resource '%s/%s' containing shoot webhooks: %w", namespace, ShootWebhooksResourceName, err) - } - - return nil -} - -// ReconcileShootWebhooksForAllNamespaces reconciles the shoot webhooks in all shoot namespaces of the given -// provider type. This is necessary in case the webhook port is changed (otherwise, the network policy would only be -// updated again as part of the ControlPlane reconciliation which might only happen in the next 24h). -func ReconcileShootWebhooksForAllNamespaces(ctx context.Context, c client.Client, providerName, providerType string, port int, shootWebhooks []admissionregistrationv1.MutatingWebhook) error { - namespaceList := &corev1.NamespaceList{} - if err := c.List(ctx, namespaceList, client.MatchingLabels{ - v1beta1constants.GardenRole: v1beta1constants.GardenRoleShoot, - v1beta1constants.LabelShootProvider: providerType, - }); err != nil { - return err - } - - fns := make([]flow.TaskFn, 0, len(namespaceList.Items)) - - for _, namespace := range namespaceList.Items { - var ( - networkPolicy = extensionswebhookshoot.GetNetworkPolicyMeta(namespace.Name, providerName) - namespaceName = namespace.Name - networkPolicyName = networkPolicy.Name - ) - - fns = append(fns, func(ctx context.Context) error { - if err := c.Get(ctx, kutil.Key(namespaceName, networkPolicyName), &networkingv1.NetworkPolicy{}); err != nil { - if !apierrors.IsNotFound(err) { - return err - } - return nil - } - - cluster, err := extensions.GetCluster(ctx, c, namespaceName) - if err != nil { - return err - } - - return ReconcileShootWebhooks(ctx, c, namespaceName, providerName, port, shootWebhooks, cluster) - }) - } - - return flow.Parallel(fns...)(ctx) -} diff --git a/pkg/controller/add.go b/pkg/controller/add.go index ce582a913..5ee8025b4 100644 --- a/pkg/controller/add.go +++ b/pkg/controller/add.go @@ -15,13 +15,14 @@ package controller import ( + "sync/atomic" + "github.com/gardener/gardener-extension-networking-cilium/pkg/cilium" extensioncontroller "github.com/gardener/gardener/extensions/pkg/controller" "github.com/gardener/gardener/extensions/pkg/controller/network" "github.com/gardener/gardener/extensions/pkg/util" resourcesv1alpha1 "github.com/gardener/gardener/pkg/apis/resources/v1alpha1" - admissionregistrationv1 "k8s.io/api/admissionregistration/v1" "sigs.k8s.io/controller-runtime/pkg/controller" "sigs.k8s.io/controller-runtime/pkg/manager" ) @@ -37,8 +38,8 @@ type AddOptions struct { Controller controller.Options // IgnoreOperationAnnotation specifies whether to ignore the operation annotation or not. IgnoreOperationAnnotation bool - // ShootWebhooks specifies the list of desired Shoot MutatingWebhooks. - ShootWebhooks []admissionregistrationv1.MutatingWebhook + // ShootWebhookConfig specifies the desired Shoot MutatingWebhooksConfiguration. + ShootWebhookConfig *atomic.Value } // AddToManagerWithOptions adds a controller with the given Options to the given manager. @@ -50,7 +51,7 @@ func AddToManagerWithOptions(mgr manager.Manager, opts AddOptions) error { } return network.Add(mgr, network.AddArgs{ - Actuator: NewActuator(extensioncontroller.ChartRendererFactoryFunc(util.NewChartRendererForShoot), opts.ShootWebhooks, mgr.GetWebhookServer().Port), + Actuator: NewActuator(extensioncontroller.ChartRendererFactoryFunc(util.NewChartRendererForShoot), opts.ShootWebhookConfig, mgr.GetWebhookServer().Port), ControllerOptions: opts.Controller, Predicates: network.DefaultPredicates(opts.IgnoreOperationAnnotation), Type: cilium.Type, From c211e40ce06450374615d0ea260f0ae1266fcac6 Mon Sep 17 00:00:00 2001 From: Sebastian Stauch Date: Wed, 15 Jun 2022 10:00:15 +0200 Subject: [PATCH 6/8] Revendor to gardener v1.48.3 --- go.mod | 2 +- go.sum | 4 ++-- .../extensions/pkg/webhook/certificates/reconciler.go | 8 +++++--- .../gardener/extensions/pkg/webhook/cmd/options.go | 6 ++++-- vendor/modules.txt | 2 +- 5 files changed, 13 insertions(+), 9 deletions(-) diff --git a/go.mod b/go.mod index 8ca62b082..e34d6ee8e 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.17 require ( github.com/ahmetb/gen-crd-api-reference-docs v0.2.0 - github.com/gardener/gardener v1.48.0 + github.com/gardener/gardener v1.48.3 github.com/go-logr/logr v1.2.3 github.com/golang/mock v1.6.0 github.com/onsi/ginkgo/v2 v2.1.4 diff --git a/go.sum b/go.sum index 25df046f0..a346183ee 100644 --- a/go.sum +++ b/go.sum @@ -299,8 +299,8 @@ github.com/gardener/gardener v1.11.3/go.mod h1:5DzqfOm+G8UftKu5zUbYJ+9Cnfd4XrvRN github.com/gardener/gardener v1.17.1/go.mod h1:uucRHq0xV46xd9MpJJjRswx/Slq3+ipbbJg09FVUtvM= github.com/gardener/gardener v1.23.0/go.mod h1:xS/sYyzYsq2W0C79mT98G/qoOTvy/hHTfApHIVF3v2o= github.com/gardener/gardener v1.36.0/go.mod h1:aVEbZy2WybsuwfXfUFNfOYz1JOmMjEOeYbv+sN9PzE0= -github.com/gardener/gardener v1.48.0 h1:OjE5o+GP9AZsDfBt2yGRvrZOngt8bLTUWoYoQ86limk= -github.com/gardener/gardener v1.48.0/go.mod h1:SxHdXYy4GWEbaP4X4axADf1eqhtfizpYXsB/q7D1GsU= +github.com/gardener/gardener v1.48.3 h1:dpKY5NVaqn/8FJs2zhy5D9HUgvRgqoGagnEPGLQDXT0= +github.com/gardener/gardener v1.48.3/go.mod h1:SxHdXYy4GWEbaP4X4axADf1eqhtfizpYXsB/q7D1GsU= github.com/gardener/gardener-resource-manager v0.10.0/go.mod h1:0pKTHOhvU91eQB0EYr/6Ymd7lXc/5Hi8P8tF/gpV0VQ= github.com/gardener/gardener-resource-manager v0.13.1/go.mod h1:0No/XttYRUwDn5lSppq9EqlKdo/XJQ44aCZz5BVu3Vw= github.com/gardener/gardener-resource-manager v0.18.0/go.mod h1:k53Yw2iDAIpTxnChQY9qFHrRtuPQWJDNnCP9eE6TnWQ= diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/certificates/reconciler.go b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/certificates/reconciler.go index 3d9cef173..9b7c2ba19 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/certificates/reconciler.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/certificates/reconciler.go @@ -176,10 +176,12 @@ func (r *reconciler) Reconcile(ctx context.Context, _ reconcile.Request) (reconc } log.Info("Generated webhook server cert", "serverSecretName", serverSecret.Name) - if err := r.reconcileSeedWebhookConfig(ctx, caBundleSecret); err != nil { - return reconcile.Result{}, fmt.Errorf("error reconciling seed webhook config: %w", err) + if r.SeedWebhookConfig != nil { + if err := r.reconcileSeedWebhookConfig(ctx, caBundleSecret); err != nil { + return reconcile.Result{}, fmt.Errorf("error reconciling seed webhook config: %w", err) + } + log.Info("Updated seed webhook config with new CA bundle", "webhookConfig", r.SeedWebhookConfig) } - log.Info("Updated seed webhook config with new CA bundle", "webhookConfig", r.SeedWebhookConfig) if r.ShootWebhookConfig != nil { // update shoot webhook config object (in memory) with the freshly created CA bundle which is also used by the diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/cmd/options.go b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/cmd/options.go index 84941c127..863c611f8 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/cmd/options.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/cmd/options.go @@ -284,8 +284,10 @@ func (c *AddToManagerConfig) AddToManager(ctx context.Context, mgr manager.Manag return nil, fmt.Errorf("error generating new certificates for webhook server: %w", err) } - if err := extensionswebhook.InjectCABundleIntoWebhookConfig(shootWebhookConfig, caBundle); err != nil { - return nil, err + if shootWebhookConfig != nil { + if err := extensionswebhook.InjectCABundleIntoWebhookConfig(shootWebhookConfig, caBundle); err != nil { + return nil, err + } } atomicShootWebhookConfig.Store(shootWebhookConfig.DeepCopy()) diff --git a/vendor/modules.txt b/vendor/modules.txt index 0b42ece32..8697cf32a 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -68,7 +68,7 @@ github.com/gardener/etcd-druid/api/v1alpha1 ## explicit; go 1.14 github.com/gardener/external-dns-management/pkg/apis/dns github.com/gardener/external-dns-management/pkg/apis/dns/v1alpha1 -# github.com/gardener/gardener v1.48.0 +# github.com/gardener/gardener v1.48.3 ## explicit; go 1.18 github.com/gardener/gardener/.github github.com/gardener/gardener/.github/ISSUE_TEMPLATE From aec515675a10f7372c4b91e63154998994cd7d00 Mon Sep 17 00:00:00 2001 From: Sebastian Stauch Date: Wed, 15 Jun 2022 10:16:11 +0200 Subject: [PATCH 7/8] make generate was run --- example/controller-registration.yaml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/example/controller-registration.yaml b/example/controller-registration.yaml index 13949276f..e8a0b2011 100644 --- a/example/controller-registration.yaml +++ b/example/controller-registration.yaml @@ -5,11 +5,7 @@ metadata: name: networking-cilium type: helm providerConfig: -<<<<<<< HEAD - chart: H4sIAAAAAAAAA+0cXXPbNjLP/BU45TpNOhEoybLc0U1vTrXV1nOO7bFcd/qUgUhIYk0SLAFKUdPeb7/FBymSoi1RSZ2k5Y5GIkHsYrG7WCwWoOYkdmlI4zZ9K2jIPRa2QypWLL73wnnb8XwvCexn7wcdgJPjY/ULUP5V192jfrd33BsMZHn3pNPrPkPH79nuXpBwQWKEnsWMicfq7Xr+mcJ8H/3jBfUDbx6ymB7ShlTwoN9/UP+g9qL+e93u8eAZ6nzozlbB31z/z9E1EYLGIUeCIa1jtFrQEE0Tz3fBCFBEnHsypxxbz9HtwuOIJ1HEYgEXYBc+mvtsigIinAXUfoVi6hPhLSngiUWunIQuEAjpHJ6yEL2IYjrz3lIXrTyo94+XGF2F/hqxUGFKllBEY+R7IcUWPpu8mQjgDUicsiAAAnenE+R6Mbfw3BO2+tbsW3j6W2yr77RgMbflV3rLl6G9ITSF/iURmnk+5dZXmK8i+J6Se/gWAVz/D6rekdhjCUfnZ2NoMIrZL9QRFvZcSmxdD4osvOQOc6ltfWyt7g97jf/TBYkFXpPAP6iNXeO/d3xUGv+dk34z/p8ESOTd0VjqfYiWXYtEUe4Wd49wp+3SpeVS7sReJNSDEfoB5gPkSKtAMxYjsaDoe2NI6FTZDLrUVoTGqV1ZIQnoEO1jcNayioePLaq/JOw1/l3m4Dk7uI0d47/X6Z+Ux3+312nG/1OAbcM0GK1hplwI9MJ5iXogfTQZXaPJGMHQJqG6ITOYHj0iKHJYEJFwjdEIpn6FxmHK5zReUhfr+EDOpAh+fc8Bk4IZPgldqr3ECIIJ+JmwmVgRiDQudJVXaIlRD9G3Do0EIhyFTAAeA5R45XGgFir0i/PT8SUwJluwbBs+KYWKRjLaxqOhHu6gF7JCyzxqvfyXJLFmCcQpa9koSqAxkXXCMASty26DAEKH6nhFbBrAksbPhgabCgLVCSBEcDfLV0REGKYVLISIhra9Wq0wURxjFs9tIzRum762gWuD9WMIEYqU9q+JF0OPp2sE/hoQyBR49clKKWweU3gmg7kQrWIIimTwxY3AJRnX4yL2pokoCC3lEbqerwBiAxNojSbofNJC344m55NXkshP57c/XP14i34a3dyMLm/PxxN0dYNOry7Pzm/Pry7h7js0uvwZ/ff88uwVop7UJIgTgj7oAbDpSXGCxUhaE0oLLKRTCo+o4808B7oWzhMIQdGcwcwQqqCUxoHHpVq5iiyBjO8FnlDBJd/uF7agypwN59LZSTvmC9R2UAtjGz5LGrostiGEXCRTDLq2U7+4uVhAmGin6G2HhSJmvg+eM6ZzKTDVMgayW/4TYfTPFw4RSDd2N76ZgIhemlv6loAsqP0QRRl2pbPpUBNsyc5A4K7icjMP01BaAUeFPupAXQnUFErZSbE4LI4hhEWbVlGhVSvKU2/m3r8q7DX/CwoWCgbFD8sE1c7/9Lqd7kmT/3kKqKn/N7DiB9fLsYj2XwvuiP+k6kv6PzrqN/Hfk8C7d23k0pkXQlQkF2gt1P7jD2uvRZpEhXlTIVh5Oj6ZUp9DUBPhe7rWFNVNMoXZm4IdYY/ZsrUCjQdILImfGLbevYOgxvETN2MWI4P4CCPbuGUGJZUheqCGaV+1tN0LLwT7gahQoeMb6lMCwcYlMFfJWcaaF8DkqjlDSD7xZmhB+LVKiqEWX5De8WAIzd7J5qEpWR8LMkcZRhR7oZih1hf8P1/wcs2YRox7gsXrx0hAH2kVweHBBKGzuX6XFeLSyGfrgIbCrPAz4+D2svuwIoEzBqHs2vEJ5wVUDnGzm/hglvj+a6WREp2PPcA+cajp/yFcnHnzgERtpfwlhJAsbsuoXC41aHWOcFf+rz8o5f+OYA3a+P8nAeN6CkP6Tmn1KlWqdnyFNCEYhztEp8oYXpPICqggLhFkCG5Ap/mqXXW11RgkDkuOCj+qirWH0V55WOHLJfnfoRBsWaC+rJ2yo1rkb4omOkS/SyKP9rpILufRPrbKPigcOv7r7Absiv8G3a34b9A/bsb/U8CHGtiZYfypg1m3kg1hmUVrt9vqN98RbbZ4Y8g4s26ODY3U8LHjs8SFqIH40YJ0Fa1MCiY1ouWR6NSIVXKZhp7je8Au1AzBj8hso+oksFwqH1o6+0ccmVqUbcDj23VEuZJWltxr7aCPtwnI3F2K39rFXxW+YVnJOS2tyVUOsx47ecSMj1+julIBjHrtSoSsvWkSc1GzRYVTr02N8knMKjX9/yaArzEB7PD/x0fHxyX/3++cHDX+/ykg7zbTZZh2f2eZqitmgb0SBHVnAu3Gq/IEezeIkDyqhPnCVnnrGnh1l/Zyc0KyHNOlJ8n+4HG5OL6QmxBD1FFP1N6M9mCpSzCFpywJhe49B8Iy8tT9V+dlLnIC+QAiqd85hNIhb7jKGYCEPVcNpvEwZGZfJsWHGWZBnXsOvmWzojTMV68RCoHHC5WpQP/Et4ZL/C1wfy3PG7X2WqK2XqoQQ2dZgIsNszmPrAv8gi4+iDYO0QdCqcFJSPMhpzIfclm3fblZ6zl05DjSCmujy5maeFA3k0q7nlfQoLRTjCdNUgxvpG+qXSe+f81g4KwLg0knoKLsYR7PYUFAwI9lBW1k1+KvDaElaMGV1X09cbdjylkSO7TtM+f+mxwnuuLY1MNpvQuolmdK0gzIWxktO0kcg28FkvJGnj3L09tsy+FN3ck6dHiZ3IISXyzUcKpNOoe7qxl9dK7NIqqj4PZmVD9AXGNcpQijrH6ZtB6wbbnh/o1NhWNXLzHMwLZza4ACmUy5Jj+YZysL9s2zPAs0XOaNRFvyxXh0Nr55M74Yn8rt7DeXo9fjyfXodJzVREglhr+LWTDMFSI086jv3tBZsdSUSx81zNwpzubHrG4tz7rh9/z16PvxHTB7dfPm6m5889PN+e0Wr0OkZ8VcNsSuTI8UuMmldHOMpRZeMJSsUK3qBPtZbl1vY/yOQrO463ZKUXDGL/OTgL6W/olva0ebQK57gayoZbvbgt5X1g/lsKqY2ZJ3rl4MPkMeeR0iESe0SuZ5WWw521JnnHTNnre7vZfsKbh0RhJfvGYu4PV7nUPm+/3kVJ/fXXJ/hPe/Yubuw0DN9V9hI2bfJeCu/P/RoJz/6w+6vWb99xSQX//lx131jpuKzPTy8Dofgh66QjTTUjc7B2LJlwmIf6aH8hDNiM9p8fRxK20ZKd62DyBnDQ63j2Lh1scW+CcGNcd/PCVO7RcBdoz/o0GvfP6nN+g2+Z8nAZk+z/sApWCSiAUMsd/0UcDNvrrJi/sgMxrfMJ8enhn6LHM+ceLLOKwtNxu+j1kSqQ60UW53obitYBViYlnV0cLj6sYNuVyjxa68BSc7NZXmVKhf3+P6YiWzQu/VrhEAL9zY0FmR7Ne4vIqyqyQCrdNtjhwGvfHCvOFs86KEWmrVgWj4/Qmm5SrBWOj4RvPlRX1171c7u5rxsFP2AQkhcnWz0mKLmZyNCJRhAHPm8hHpp/xusdZqqR+Zz1UX0wzzweGtEVxzprpwFDhfIfJyNveQOrJVrW4dYnZYxalLTqGT5jpbfphaoRsxL6242WdIEVXKqnBDdP6K58dVzHy6VTAFtwX61+WbGluPfmFTfRExd3Nh+2yu1ZgIdX56RacLxu6d/KagaROaZEEqDXV4yUuf5jTe+qplvZ/f/Vaz/Xdzv9Bzk1hJDf4RwVnZPm5uvqolJp5M5WueyuNrUpNC5rSu0PfZDXnq+b9m/FccentGgrvWf8dH/fL676TXrP+eBCrPf5TMvNn+2/ZF4HGYSvQVZXXL7mmYLls/tm73gZrjfxmR+u+B7zr/BQvA8vqv3+z/Pw2UMrtSv/pNMrd87LMlTZ47pHjWegq+odcyfgPqCg9qXDN3ZCrT+ED30QZW9nQh6c5oRV/SWCy/P1gs034n29NUhV6abW9vHuht0i+/+tKklQMvHPk+W9HcFqMTJQ8cHtrmBW8IYMCrPkC0Gy23PxHQgMXrgxjQqIfwYDDLLwAgBKMK1ibZPljVORNZvnXWZLMNsKfv1ouhvDJ1id4HaElDbH0CB60+UdjL/y+1JRz6ByC7/P/JoPz+f7cn3/9r/P+fD/oUhvKK6fs9Q0QTPHdi6eAz8zB/ebN5HXqTB7CrRqUg8yFSMYMc0lHu/Mb57JKJa/mXATDarU3qAL37wwJfI3kxM5DZGH2+5bGfl/zv84337XY6gblP/WG39/Vrz4LCqm1LeYxYVtf74JpUuoEZkYTrN73VDGDIalZucuLKvTa+CSHzl1OfTe2AyFWorf5WyVak7TPm3NNY/ZmBpp1XQqoBxuY+fbM5dKNx2yRwB32DpoTdOsKdlinI/j+li7td/Pbz7lV3q1etf38je9bTDzDGlrU5eGLOiecPswzRsSWXBtlpl2zS36714LGVNKq3imd9hrmIQh73GabZSEsniBQ7lWfAq06Am/9zkJXsX7hKTpZOY1fWUOekwfTVjTnE3D3qWNmLnEMrL75WMwk20EADDTTQQAMNNNBAAw000EADDTTQQAMNNNBAAw000EADDTTQQAMNNNBAAw000MDnDP8HGuTXGQB4AAA= -======= - chart: H4sIAAAAAAAAA+0ca3PbNjKf+StwSjtNOhGpl+WObnJzqq22nnNsj+W6008ZiIQk1iTBEqAUNe399ls8SIESZYlKzklb7ngsEgQWi93FYrFYcoYTj0QkaZJ3nETMp1EzInxJkwc/mjVdP/DT0Hn2YdACOD05kb8Am7/yut3ttTsnnX5flLdPW532M3Tygf0eBCnjOEHoWUIpf6zevud/UpgdIn97ToLQn0U0Icf0IQTc7/V2yh/EXpR/p90+6T9DrY892DL4m8v/ObrBnJMkYohTpGSMlnMSoUnqBx4oAYqx+4BnhNnWc3Q39xliaRzThMMF6EWAZgGdoBBzdw61X6GEBJj7CwLt+Nwox5EHCCIyg6c0Qi/ihEz9d8RDSx/q/eOlja6jYIVoJFsKklBMEhT4EbEt+3z8dsyBNkBxRsMQENyfjZHnJ8yyZz535H9FvmVPfksc+T8rmM8c8S+7ZYvIWSOawPjSGE39gDDra5stY/g/wQ/wn4dw/V+oeo8Tn6YMXZyPoMM4ob8Ql1u27xHsqHpQZNkL5lKPONanlurhcND8P5vjhNsrHAZH9bFv/ndOuhvzv3Xaq+f/kwCO/XuSCLkP0KJt4Tg2bu12x241PbKwPMLcxI+5fDBEP8B6gFyhFWhKE8TnBH2vFQmdSZ1BV0qL0CjTKyvCIRmgQxTOWpTR8KlZ9ZeEg+a/R117Ro/uY8/877R6p5vzv91p1fP/KcBxYBmMV7BSzjl64b5EHeA+Gg9v0HiEYGrjSN7gKSyPPuYEuTSMcbSy0RCWftmMwZLPSLIgnq38A7GSIvgNfBdUClb4NPKIshJDcCbgZ0ynfInB07hUVV6hhY06iLxzScwRZiiiHNpRaJIsfQbYItn88uJsdAWEiR4sx4G/DENJJzlubdEQGBL0QlRo6EeNl/8UKFY0BT9lJTpFKXTG80FogqB3MWxgQOQS5a/wdQe2wPGzxkEnHEN1DA1iuJuaFRHmmmgJc87jgeMsl0sbS4ptmswczTTm6LE2gWrd6scIPBTB7V9TP4ERT1YI7DU0wBOgNcBLKbBZQuCZcOYitEzAKRLOF9MMF2g8n/HEn6S8wLSMRhi6WQHYBirQGI7RxbiBvh2OL8avBJKfLu5+uP7xDv00vL0dXt1djMbo+hadXV+dX9xdXF/B3XdoePUz+s/F1fkrRHwhSWAnOH0wAiDTF+wEjRG4xoQUSMiWFBYT15/6LgwtmqXggqIZhZUhkk4pSUKfCbEy6VkCmsAPfS6dS7Y9LtuCKjM6mAljJ/SYzVHTRQ3bduBvQSKPJg64kPN0YoOsncwuri/m4CY6WfOmSyOe0CAAy5mQmWCY7NkGtFv2E9noixcu5kh1dj+6HQOLXupb8g4DL4izC6Nwu7LVdKAQNsRgwHGXfrleh0kktIChwhiVoy4ZqgsF7wRbXJok4MKida+o0KsVm9jrtfevCget/5yAhoJCseMiQZXjP512q31ax3+eAirK/y3s+MH0MpvHh+8F9/h/QvQb8u92e7X/9yTw/n0TeWTqR+AViQ1aAzX/+MM6aJMmmsK6KRtYJp4AT0jAwKmJ7QeyUhjlTTqB1ZuAHtk+dURvBRw7UCxwkGqy3r8Hp8YNUi8n1ka64SOEbLfdJFBgGaAdNXT/sqftUfgR6A94hbK5fUsCgsHZuALiSinLSfNDWFwVZQiJJ/4UzTG7kUEx1GBz3DnpD6Dbe9E9dCXq2xzPUN4iTvyIT1HjS/bvL9lmzYTElPmcJqvHUMAYSRnCwdEIYbDGuDcF4pE4oKuQRFzv8HPlYM6ivVuQQBkFV3blBpixQlMGfrOXBqCW9sM3UiIbeD71BPvMoaL9B3dx6s9CHDel8BfgQtKkKbxysdUg5THCffG/Xn8j/teFPWht/58EtOkpTOl7KdXrTKjK8BXChKAc3gCdSWV4g2MrJBx7mOMBmAEV5is31eVaoxsx2HKU2FFZrCyMssqDElsu0P8OhaDLHPVE7Ywc2SN7W1TRAfpdIHl01EV0hkX71CL7qHDs/K9yGrDP/+u3t/y/fu+knv9PAR9rYueK8X+dzKqXfAqLKFqz2ZS/5kCU2tprRbZz7Wa2xpEpvu0GNPXAa8BBPMdtiSvngg6NKH6kKjRibZhMjc8NfCAXakZgR0S0UQ4SSN4oH1gq+oddEVoUfcDju1VMmORWHtxr7MFvbyMQsbusfWMffWXtNcmSz1lpRaqMltXIMRvmdPwaV+UKtKjWr2iQ9zdJE8Yr9ijbVOtTNfksVpWK9n/twFdYAPbYfzD/m+c/vdZp7f89CZhmM9uGKfN3nou6ZBU4KEBQdSVQZrwsTnBwhwiJVCWbzR0Zt67QrurWXhxOCJITsvAF2h98JjbHl+IQYoBa8ok8m1EWLDMJuvCMphFXo2eAWHieavwyX+bSYMhHYEn1wSGUTXlNlaEAAg7cNejOo4jqc5msPawwc+I+MLAt6x2lJr58j1BwPF7ISAX6wr7TVNrfAvU3It+ocdAWtfFSuhgqygJUrIk1LLIqCAqy+CjSOEYeCGUKJyCLh5yJeMhV1f7FYa3vkqHrCi2s3Fys1NiHujlXmtWsggIpnaI/qYNi9pr7utpNGgQ3FCbOqjCZVAAqzh+a7VwahhjsWF7QRE4l+prgWoIUPFE9UAt3MyGMpolLmgF1H14blKiKI13PzupdQjWTKIEzxO+Et+ymSQK2FVCKG5F7ZuJbH8vZ67rjVeSyTXRzggM+l9OpMmqj7b5uVOpck8ZEecHN9azegVy1uM4aDPP6m6jVhG2KA/fXDuGuU77F0BPbMfYABTRLMplT+pChy5ee14+sPDtb6ynSFMen5vh0NbUhsHWtG3HGuh8fKNJ+dCQpw5Yrro59mjjyjYx+ZrYl0cKcAGqWXo6G56Pbt6PL0Zk4qn97NXwzGt8Mz0Z5TYRk0Pu7hIYDoxChqU8C75ZMi6W6XNjfQb5U2LkA8rqVVo01vRdvht+P7oHY69u31/ej259uL+62aB0gteIbkR6nNPRToKZg6cGsiqzWbYZlslTyMXrOLaGQWcEyHSJYYcYppy6Fvezd2c3mvjKzIYWpmBfKfTOnP4vkgO0Wv6NIb5/brY19Rs41GqQheSNWgJIhK7U1SA1FRSXh/XP0QyW+K0pYRsyW1I16CVhlkVQ8QDxJyW7JK15sLWcbg3GzqIip/QcHRTLwyBSnAX9DPWjX67SO8agO41N1evfx/RHa/4qx0b8DVNz/Fw7iDg0B7Dv/6fY347+9frtT7/+fAsz9v2kVyk9cpWeuwgM35hbk2AiBXrrbeR6QJV4mwcG5MjQDNMUBI8Xs80bWM5K0bSeg5x0OtlPx7ManZvhnBhXnfzLBbuUXQfbM/27/tLMx/zv9Tj3/nwTE8YlpA6SAccrnMMV+U6mg67wKfS4SAM9IcksDcnxk8E8Z80vSQHiJTXHY9H1C01gOoImM06XisZJV8NhFVVcxj8kbL2Jij5544haM7ERXmhEufwOfqYuliAp+UL+aAaxw48BgeXpY5+Iqzq/SGKROtilyKYzGj0zF2aZFMnWjVxd89Q9HmJXLbX5h4GvJbwZ1yke/3DvUnIa9vA9xBH61l5cWe8z5rFkgFQOI05ePcD+jd4u0RkP+iHi+vJjkLXdOb9XA0zn1hVRws0LsGzpnPDCOWncJKY8HKJpgnwE7T3nJCAxdX+dbJl0r8mLqZxXXp09ZQxl/KdxgFdVk5mxLaEC2CiZgzIBeVb6usfXoFzpRFzH11hdOQGdKuCmXWfV6x++aR8W6T+iShhk3ZEqbv36qOReLAKa/qRuNrxvWh1nob9VQ/m6GGkauw1TZ1HiEcVZ+4m+sbJXYxNKJeCFYrg0K1bgQY6/K9EPOzT7O+l/R/9OTrJoLuG//d7p1/tvtntTnv08Cpfk/WnkPzv45UGNlArQZ5JInBLfFOOfWaeGuddZRzWFDKIJ7jWKMs0pyUXawxmW2i7YBFzeWeTS7B09f9ZrHj5vyck9EeOPkoBgMFiWgmLC8V4otV5b/cfNfL7IHmoF98/+k29uM/5zW+7+ngcfmf7Z41ekf2x4G+BFUHkMUeXVHH0iUha0+tWwPgYrzfxHj6t8B2Zf/2+1vxX96p916/j8FbJw7CfmqN4m9zbT/hlB55uLiuzYTsA2dhrYbUJf7UOOGekNdmSRHmo8mkHKgCckW8JKxZM6DmR9SLFN2xzjJVfswVdxcP1BpMl99/ZU+9Ar9aBgEdEmMFBM3Tnckj27TYq8R2NCuPIF0fzPj9DQkIU1WRxGgmh5Dg265+QJY5rzkuQJleYaifCvXcH1IeaDtVsEQU5iqRJ1SNoQiNj6DRNvPFA6y/wulCcd+AGqP/e+0Tra+/9Zpndb2/ylAZeFJq5i93zlAJLVnbiIMfK4e+pNn689hrOOATtms5Hg2QNJnEFM6NvL3LqZXlN+IT8bAbLfWQUL0/g8LbI2gRa9AOm3j+ZbFfr5hf5+vrW+71Qr1fWYP251v3vgWFJYlVYjXSER1lSukUGXpFTFOmfrSh1wBNFpFyq3BLuOzIWsX0rycBHTihFjsKx35WT1HonbOqftAEvkxG4XbFEImAUpnAXm7TrpUbZs49Po93Uwyu9G1Ww1dkH8/q2232/a7P/eo2lujavzrtRhZRz2wbduy1omH+j0hM5lxgE4ssTXIsx3zRX+71s60xcyrt4q5ngPDoxDpnoPsNMJSoWBJTuk7QGVvAOnv+YhKzi9MHk5svI1TWkO+JwOqL2/0SyztbsvKX+QfWCb7GpZVCCIMrDwpWEUber2uLspy29qtzkmrXjtrqKGGGmqooYYaaqihhhpqqKGGGmqooYYaaqihhhpqqKGGGmqooYYaPjv4Hworlh8AeAAA ->>>>>>> 649781eb (support node local dns feature) + chart: H4sIAAAAAAAAA+0ca3PbNjKf+StwSjtNOhGpl+WObnJzqq22nnNsj+W6008ZiIQk1iTBEqAUNe399ls8SIESZYlKzklb7ngsEgQWi93FYrFYcoYTj0QkaZJ3nETMp1EzInxJkwc/mjVdP/DT0Hn2YdACOD05kb8Am7/yut3ttTsnnX5flLdPW532M3Tygf0eBCnjOEHoWUIpf6zevud/UpgdIn97ToLQn0U0Icf0IQTc7/V2yh/EXpR/p90+6T9DrY892DL4m8v/ObrBnJMkYohTpGSMlnMSoUnqBx4oAYqx+4BnhNnWc3Q39xliaRzThMMF6EWAZgGdoBBzdw61X6GEBJj7CwLt+Nwox5EHCCIyg6c0Qi/ihEz9d8RDSx/q/eOlja6jYIVoJFsKklBMEhT4EbEt+3z8dsyBNkBxRsMQENyfjZHnJ8yyZz535H9FvmVPfksc+T8rmM8c8S+7ZYvIWSOawPjSGE39gDDra5stY/g/wQ/wn4dw/V+oeo8Tn6YMXZyPoMM4ob8Ql1u27xHsqHpQZNkL5lKPONanlurhcND8P5vjhNsrHAZH9bFv/ndOuhvzv3Xaq+f/kwCO/XuSCLkP0KJt4Tg2bu121241PbKwPMLcxI+5fDBEP8B6gFyhFWhKE8TnBH2vFQmdSZ1BV0qL0CjTKyvCIRmgQxTOWpTR8KlZ9ZeEg+a/R117Ro/uY8/877R6p5vzv91p1fP/KcBxYBmMV7BSzjl64b5EHeA+Gg9v0HiEYGrjSN7gKSyPPuYEuTSMcbSy0RCWftmMwZLPSLIgnq38A7GSIvgNfBdUClb4NPKIshJDcCbgZ0ynfInB07hUVV6hhY06iLxzScwRZiiiHNpRaJIsfQbYItn88uJsdAWEiR4sx4G/DENJJzlubdFQx26hF6JCQz9qvPynQLGiKfgpK9EpSqEzng9CEwS9i2EDAyKXKH+FrzuwBY6fNQ464RiqY2gQw93UrIgw10RLmHMeDxxnuVzaWFJs02TmaKYxR4+1CVTrVj9G4KEIbv+a+gmMeLJCYK+hAZ4ArQFeSoHNEgLPhDMXoWUCTpFwvphmuEDj+Ywn/iTlBaZlNMLQzQrANlCBxnCMLsYN9O1wfDF+JZD8dHH3w/WPd+in4e3t8OruYjRG17fo7Prq/OLu4voK7r5Dw6uf0X8urs5fIeILSQI7wemDEQCZvmAnaIzANSakQEK2pLCYuP7Ud2Fo0SwFFxTNKKwMkXRKSRL6TIiVSc8S0AR+6HPpXLLtcdkWVJnRwUwYO6HHbI6aLmrYtgN/CxJ5NHHAhZynExtk7WR2cX0xBzfRyZo3XRrxhAYBWM6EzATDZM82oN2yn8hGX7xwMUeqs/vR7RhY9FLfkncYeEGcXRiF25WtpgOFsCEGA4679Mv1OkwioQUMFcaoHHXJUF0oeCfY4tIkARcWrXtFhV6t2MRer71/VTho/ecENBQUih0XCaoc/+m0W+3TOv7zFFBR/m9hxw+ml9k8PnwvuMf/E6LfkH+326v9vyeB9++byCNTPwKvSGzQGqj5xx/WQZs00RTWTdnAMvEEeEICBk5NbD+QlcIob9IJrN4E9Mj2qSN6K+DYgWKBg1ST9f49ODVukHo5sTbSDR8hZLvtJoECywDtqKH7lz1tj8KPQH/AK5TN7VsSEAzOxhUQV0pZTpofwuKqKENIPPGnaI7ZjQyKoQab485JfwDd3ovuoStR3+Z4hvIWceJHfIoaX7J/f8k2ayYkpsznNFk9hgLGSMoQDo5GCIM1xr0pEI/EAV2FJOJ6h58rB3MW7d2CBMoouLIrN8CMFZoy8Ju9NAC1tB++kRLZwPOpJ9hnDhXtP7iLU38W4rgphb8AF5ImTeGVi60GKY8R7ov/9fob8b8u7EFr+/8koE1PYUrfS6leZ0JVhq8QJgTl8AboTCrDGxxbIeHYwxwPwAyoMF+5qS7XGt2IwZajxI7KYmVhlFUelNhygf53KARd5qgnamfkyB7Z26KKDtDvAsmjoy6iMyzapxbZR4Vj53+V04B9/l+/veX/9Xsn9fx/CvhYEztXjP/rZFa95FNYRNGazab8NQei1NZeK7KdazezNY5M8W03oKkHXgMO4jluS1w5F3RoRPEjVaERa8Nkanxu4AO5UDMCOyKijXKQQPJG+cBS0T/sitCi6AMe361iwiS38uBeYw9+exuBiN1l7Rv76Ctrr0mWfM5KK1JltKxGjtkwp+PXuCpXoEW1fkWDvL9JmjBesUfZplqfqslnsapUtP9rB77CArDH/oP53zz/6bVOa//vScA0m9k2TJm/81zUJavAQQGCqiuBMuNlcYKDO0RIpCrZbO7IuHWFdlW39uJwQpCckIUv0P7gM7E5vhSHEAPUkk/k2YyyYJlJ0IVnNI24Gj0DxMLzVOOX+TKXBkM+AkuqDw6hbMprqgwFEHDgrkF3HkVUn8tk7WGFmRP3gYFtWe8oNfHle4SC4/FCRirQF/adptL+Fqi/EflGjYO2qI2X0sVQURagYk2sYZFVQVCQxUeRxjHyQChTOAFZPORMxEOuqvYvDmt9lwxdV2hh5eZipcY+1M250qxmFRRI6RT9SR0Us9fc19Vu0iC4oTBxVoXJpAJQcf7QbOfSMMRgx/KCJnIq0dcE1xKk4InqgVq4mwlhNE1c0gyo+/DaoERVHOl6dlbvEqqZRAmcIX4nvGU3TRKwrYBS3IjcMxPf+ljOXtcdryKXbaKbExzwuZxOlVEbbfd1o1LnmjQmygturmf1DuSqxXXWYJjX30StJmxTHLi/dgh3nfIthp7YjrEHKKBZksmc0ocMXb70vH5k5dnZWk+Rpjg+Ncenq6kNga1r3Ygz1v34QJH2oyNJGbZccXXs08SRb2T0M7MtiRbmBFCz9HI0PB/dvh1djs7EUf3bq+Gb0fhmeDbKayIkg97fJTQcGIUITX0SeLdkWizV5cL+DvKlws4FkNettGqs6b14M/x+dA/EXt++vb4f3f50e3G3ResAqRXfiPQ4paGfAjUFSw9mVWS1bjMsk6WSj9FzbgmFzAqW6RDBCjNOOXUp7GXvzm4295WZDSlMxbxQ7ps5/VkkB2y3+B1Fevvcbm3sM3Ku0SANyRuxApQMWamtQWooKioJ75+jHyrxXVHCMmK2pG7US8Aqi6TiAeJJSnZLXvFiaznbGIybRUVM7T84KJKBR6Y4Dfgb6kG7Xqd1jEd1GJ+q07uP74/Q/leMjf4doOL+v3AQd2gIYN/5T7e/Gf/t9dudev//FGDu/02rUH7iKj1zFR64Mbcgx0YI9NLdzvOALPEyCQ7OlaEZoCkOGClmnzeynpGkbTsBPe9wsJ2KZzc+NcM/M6g4/5MJdiu/CLJn/nf7p52N+d/pd+r5/yQgjk9MGyAFjFM+hyn2m0oFXedV6HORAHhGklsakOMjg3/KmF+SBsJLbIrDpu8TmsZyAE1knC4Vj5WsgscuqrqKeUzeeBETe/TEE7dgZCe60oxw+Rv4TF0sRVTwg/rVDGCFGwcGy9PDOhdXcX6VxiB1sk2RS2E0fmQqzjYtkqkbvbrgq384wqxcbvMLA19LfjOoUz765d6h5jTs5X2II/Crvby02GPOZ80CqRhAnL58hPsZvVukNRryR8Tz5cUkb7lzeqsGns6pL6SCmxVi39A544Fx1LpLSHk8QNEE+wzYecpLRmDo+jrfMulakRdTP6u4Pn3KGsr4S+EGq6gmM2dbQgOyVTABYwb0qvJ1ja1Hv9CJuoipt75wAjpTwk25zKrXO37XPCrWfUKXNMy4IVPa/PVTzblYBDD9Td1ofN2wPsxCf6uG8ncz1DByHabKpsYjjLPyE39jZavEJpZOxAvBcm1QqMaFGHtVph9ybvZx1v+K/p+eZNVcwH37v9Ot899u96Q+/30SKM3/0cp7cPbPgRorE6DNIJc8Ibgtxjm3Tgt3rbOOag4bQhHcaxRjnFWSi7KDNS6zXbQNuLixzKPZPXj6qtc8ftyUl3siwhsnB8VgsCgBxYTlvVJsubL8j5v/epE90Azsm/8n3d5m/Oe03v89DTw2/7PFq07/2PYwwI+g8hiiyKs7+kCiLGz1qWV7CFSc/4sYV/8OyL78325/K/7TO+3W8/8pYOPcSchXvUnsbab9N4TKMxcX37WZgG3oNLTdgLrchxo31BvqyiQ50nw0gZQDTUi2gJeMJXMezPyQYpmyO8ZJrtqHqeLm+oFKk/nq66/0oVfoR8MgoEtipJi4cbojeXSbFnuNwIZ25Qmk+5sZp6chCWmyOooA1fQYGnTLzRfAMuclzxUoyzMU5Vu5hutDygNttwqGmMJUJeqUsiEUsfEZJNp+pnCQ/V8oTTj2A1B77H+ndbL1/bdO67S2/08BKgtPWsXs/c4BIqk9cxNh4HP10J88W38OYx0HdMpmJcezAZI+g5jSsZG/dzG9ovxGfDIGZru1DhKi939YYGsELXoF0mkbz7cs9vMN+/t8bX3brVao7zN72O5888a3oLAsqUK8RiKqq1whhSpLr4hxytSXPuQKoNEqUm4NdhmfDVm7kOblJKATJ8RiX+nIz+o5ErVzTt0HksiP2SjcphAyCVA6C8jbddKlatvEodfv6WaS2Y2u3Wrogvz7WW273bbf/blH1d4aVeNfr8XIOuqBbduWtU481O8JmcmMA3Riia1Bnu2YL/rbtXamLWZevVXM9RwYHoVI9xxkpxGWCgVLckrfASp7A0h/z0dUcn5h8nBi422c0hryPRlQfXmjX2Jpd1tW/iL/wDLZ17CsQhBhYOVJwSra0Ot1dVGW29ZudU5a9dpZQw011FBDDTXUUEMNNdRQQw011FBDDTXUUEMNNdRQQw011FBDDTXU8NnB/wAfvxbmAHgAAA== values: image: tag: v1.13.0-dev From 976527d6b78f724ade05f131ba1a01c8bd81752a Mon Sep 17 00:00:00 2001 From: Sebastian Stauch Date: Mon, 20 Jun 2022 15:04:13 +0200 Subject: [PATCH 8/8] adapt log output --- go.mod | 2 +- go.sum | 3 +- pkg/webhook/shoot/mutator.go | 8 ++-- pkg/webhook/shoot/node_local_dns.go | 8 ++-- .../etcd-druid/api/v1alpha1/etcd_types.go | 29 ++++++++++++-- .../api/v1alpha1/zz_generated.deepcopy.go | 39 +++++++++++++++++-- vendor/modules.txt | 2 +- 7 files changed, 73 insertions(+), 18 deletions(-) diff --git a/go.mod b/go.mod index e34d6ee8e..5e4e1b4ce 100644 --- a/go.mod +++ b/go.mod @@ -40,7 +40,7 @@ require ( github.com/evanphx/json-patch v4.12.0+incompatible // indirect github.com/fatih/color v1.13.0 // indirect github.com/fsnotify/fsnotify v1.5.1 // indirect - github.com/gardener/etcd-druid v0.8.0 // indirect + github.com/gardener/etcd-druid v0.9.0 // indirect github.com/gardener/external-dns-management v0.7.18 // indirect github.com/gardener/hvpa-controller/api v0.5.0 // indirect github.com/gardener/machine-controller-manager v0.41.0 // indirect diff --git a/go.sum b/go.sum index a346183ee..7bffa58f3 100644 --- a/go.sum +++ b/go.sum @@ -285,8 +285,9 @@ github.com/gardener/etcd-druid v0.1.15/go.mod h1:BHXG8N04Dl4On7Ie6cErwmpvzncNrme github.com/gardener/etcd-druid v0.3.0/go.mod h1:uxZjZ57gIgpX554vGp495g2i8DByoS3OkVtiqsxtbwk= github.com/gardener/etcd-druid v0.5.0/go.mod h1:Ca2ZM9dyMdZI6k5RW4wu8CG8q5cNeF/HSE2P+hut0+g= github.com/gardener/etcd-druid v0.6.1-0.20211022081522-071746e9d0bd/go.mod h1:BukSWtT9sxjCa3H4q2biJMIo52o+57MuBBifzzZkhPo= -github.com/gardener/etcd-druid v0.8.0 h1:mfQ89ywtbeGiH5ePmo+MrXNm7ADBuZGA1civ9PqSGaQ= github.com/gardener/etcd-druid v0.8.0/go.mod h1:EJF6z4Ghv2FGUe1UzZWOEF1MxCA186fxvjBO44oSJX4= +github.com/gardener/etcd-druid v0.9.0 h1:nQWqmPpT5LhURPTADQ/93x7AiCCe7ruJ9DQnYU/IJ0w= +github.com/gardener/etcd-druid v0.9.0/go.mod h1:EJF6z4Ghv2FGUe1UzZWOEF1MxCA186fxvjBO44oSJX4= github.com/gardener/external-dns-management v0.7.3/go.mod h1:Y3om11E865x4aQ7cmcHjknb8RMgCO153huRb/SvP+9o= github.com/gardener/external-dns-management v0.7.7/go.mod h1:egCe/FPOsUbXA4WV0ne3h7nAD/nLT09hNt/FQQXK+ec= github.com/gardener/external-dns-management v0.7.18 h1:15uIyFfZSbR8fivnXvqb1Dvv4QqzfNYxEFUQ9K+mpsE= diff --git a/pkg/webhook/shoot/mutator.go b/pkg/webhook/shoot/mutator.go index 200551780..3b1c74a7d 100644 --- a/pkg/webhook/shoot/mutator.go +++ b/pkg/webhook/shoot/mutator.go @@ -56,14 +56,14 @@ func (m *mutator) Mutate(ctx context.Context, new, _ client.Object) error { case *corev1.ConfigMap: switch regexNodeLocalDNS.MatchString(x.Name) { case true: - logMutation(logger, x.ClusterName, x.Kind, x.Namespace, x.Name) + logMutation(logger, x.Kind, x.Namespace, x.Name) return m.mutateNodeLocalDNSConfigMap(ctx, x) } case *appsv1.DaemonSet: switch x.Name { case "node-local-dns": - logMutation(logger, x.ClusterName, x.Kind, x.Namespace, x.Name) + logMutation(logger, x.Kind, x.Namespace, x.Name) return m.mutateNodeLocalDNSDaemonSet(ctx, x) } } @@ -71,6 +71,6 @@ func (m *mutator) Mutate(ctx context.Context, new, _ client.Object) error { } // LogMutation provides a log message. -func logMutation(logger logr.Logger, shoot, kind, namespace, name string) { - logger.Info("Mutating resource", "shoot", shoot, "kind", kind, "namespace", namespace, "name", name) +func logMutation(logger logr.Logger, kind, namespace, name string) { + logger.Info("Mutating resource", "kind", kind, "namespace", namespace, "name", name) } diff --git a/pkg/webhook/shoot/node_local_dns.go b/pkg/webhook/shoot/node_local_dns.go index ed581afe4..cf17e972c 100644 --- a/pkg/webhook/shoot/node_local_dns.go +++ b/pkg/webhook/shoot/node_local_dns.go @@ -27,10 +27,10 @@ func (m *mutator) mutateNodeLocalDNSConfigMap(ctx context.Context, configmap *co configmap.Data = make(map[string]string, 1) } - re := regexp.MustCompile(`bind.*`) - configmap.Data["Corefile"] = re.ReplaceAllString(configmap.Data["Corefile"], "bind 0.0.0.0") - re = regexp.MustCompile(`health.*`) - configmap.Data["Corefile"] = re.ReplaceAllString(configmap.Data["Corefile"], "health") + re1 := regexp.MustCompile(`bind.*`) + configmap.Data["Corefile"] = re1.ReplaceAllString(configmap.Data["Corefile"], "bind 0.0.0.0") + re2 := regexp.MustCompile(`health.*`) + configmap.Data["Corefile"] = re2.ReplaceAllString(configmap.Data["Corefile"], "health") return nil } diff --git a/vendor/github.com/gardener/etcd-druid/api/v1alpha1/etcd_types.go b/vendor/github.com/gardener/etcd-druid/api/v1alpha1/etcd_types.go index b9d807419..d89b5db7a 100644 --- a/vendor/github.com/gardener/etcd-druid/api/v1alpha1/etcd_types.go +++ b/vendor/github.com/gardener/etcd-druid/api/v1alpha1/etcd_types.go @@ -88,11 +88,11 @@ type StoreSpec struct { // TLSConfig hold the TLS configuration details. type TLSConfig struct { // +required - ServerTLSSecretRef corev1.SecretReference `json:"serverTLSSecretRef"` + TLSCASecretRef SecretReference `json:"tlsCASecretRef"` // +required + ServerTLSSecretRef corev1.SecretReference `json:"serverTLSSecretRef"` + // +optional ClientTLSSecretRef corev1.SecretReference `json:"clientTLSSecretRef"` - // +required - TLSCASecretRef SecretReference `json:"tlsCASecretRef"` } // SecretReference defines a reference to a secret. @@ -217,8 +217,13 @@ type EtcdConfig struct { // More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/ // +optional Resources *corev1.ResourceRequirements `json:"resources,omitempty"` + // ClientUrlTLS contains the ca, server TLS and client TLS secrets for client communication to ETCD cluster // +optional - TLS *TLSConfig `json:"tls,omitempty"` + ClientUrlTLS *TLSConfig `json:"clientUrlTls,omitempty"` + // PeerUrlTLS contains the ca and server TLS secrets for peer communication within ETCD cluster + // Currently, PeerUrlTLS does not require client TLS secrets for gardener implementation of ETCD cluster. + // +optional + PeerUrlTLS *TLSConfig `json:"peerUrlTls,omitempty"` // EtcdDefragTimeout defines the timeout duration for etcd defrag call // +optional EtcdDefragTimeout *metav1.Duration `json:"etcdDefragTimeout,omitempty"` @@ -237,6 +242,20 @@ type SharedConfig struct { AutoCompactionRetention *string `json:"autoCompactionRetention,omitempty"` } +// SchedulingConstraints defines the different scheduling constraints that must be applied to the +// pod spec in the etcd statefulset. +// Currently supported constraints are Affinity and TopologySpreadConstraints. +type SchedulingConstraints struct { + // Affinity defines the various affinity and anti-affinity rules for a pod + // that are honoured by the kube-scheduler. + // +optional + Affinity *corev1.Affinity `json:"affinity,omitempty"` + // TopologySpreadConstraints describes how a group of pods ought to spread across topology domains, + // that are honoured by the kube-scheduler. + // +optional + TopologySpreadConstraints []corev1.TopologySpreadConstraint `json:"topologySpreadConstraints,omitempty"` +} + // EtcdSpec defines the desired state of Etcd type EtcdSpec struct { // selector is a label query over pods that should match the replica count. @@ -253,6 +272,8 @@ type EtcdSpec struct { Backup BackupSpec `json:"backup"` // +optional Common SharedConfig `json:"sharedConfig,omitempty"` + // +optional + SchedulingConstraints SchedulingConstraints `json:"schedulingConstraints,omitempty"` // +required Replicas int32 `json:"replicas"` // PriorityClassName is the name of a priority class that shall be used for the etcd pods. diff --git a/vendor/github.com/gardener/etcd-druid/api/v1alpha1/zz_generated.deepcopy.go b/vendor/github.com/gardener/etcd-druid/api/v1alpha1/zz_generated.deepcopy.go index 770eb6195..2a4c12263 100644 --- a/vendor/github.com/gardener/etcd-druid/api/v1alpha1/zz_generated.deepcopy.go +++ b/vendor/github.com/gardener/etcd-druid/api/v1alpha1/zz_generated.deepcopy.go @@ -247,8 +247,13 @@ func (in *EtcdConfig) DeepCopyInto(out *EtcdConfig) { *out = new(v1.ResourceRequirements) (*in).DeepCopyInto(*out) } - if in.TLS != nil { - in, out := &in.TLS, &out.TLS + if in.ClientUrlTLS != nil { + in, out := &in.ClientUrlTLS, &out.ClientUrlTLS + *out = new(TLSConfig) + (*in).DeepCopyInto(*out) + } + if in.PeerUrlTLS != nil { + in, out := &in.PeerUrlTLS, &out.PeerUrlTLS *out = new(TLSConfig) (*in).DeepCopyInto(*out) } @@ -480,6 +485,7 @@ func (in *EtcdSpec) DeepCopyInto(out *EtcdSpec) { in.Etcd.DeepCopyInto(&out.Etcd) in.Backup.DeepCopyInto(&out.Backup) in.Common.DeepCopyInto(&out.Common) + in.SchedulingConstraints.DeepCopyInto(&out.SchedulingConstraints) if in.PriorityClassName != nil { in, out := &in.PriorityClassName, &out.PriorityClassName *out = new(string) @@ -631,6 +637,33 @@ func (in *OwnerCheckSpec) DeepCopy() *OwnerCheckSpec { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SchedulingConstraints) DeepCopyInto(out *SchedulingConstraints) { + *out = *in + if in.Affinity != nil { + in, out := &in.Affinity, &out.Affinity + *out = new(v1.Affinity) + (*in).DeepCopyInto(*out) + } + if in.TopologySpreadConstraints != nil { + in, out := &in.TopologySpreadConstraints, &out.TopologySpreadConstraints + *out = make([]v1.TopologySpreadConstraint, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SchedulingConstraints. +func (in *SchedulingConstraints) DeepCopy() *SchedulingConstraints { + if in == nil { + return nil + } + out := new(SchedulingConstraints) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *SecretReference) DeepCopyInto(out *SecretReference) { *out = *in @@ -710,9 +743,9 @@ func (in *StoreSpec) DeepCopy() *StoreSpec { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *TLSConfig) DeepCopyInto(out *TLSConfig) { *out = *in + in.TLSCASecretRef.DeepCopyInto(&out.TLSCASecretRef) out.ServerTLSSecretRef = in.ServerTLSSecretRef out.ClientTLSSecretRef = in.ClientTLSSecretRef - in.TLSCASecretRef.DeepCopyInto(&out.TLSCASecretRef) } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TLSConfig. diff --git a/vendor/modules.txt b/vendor/modules.txt index 8697cf32a..f7a64ca30 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -61,7 +61,7 @@ github.com/fatih/color # github.com/fsnotify/fsnotify v1.5.1 ## explicit; go 1.13 github.com/fsnotify/fsnotify -# github.com/gardener/etcd-druid v0.8.0 +# github.com/gardener/etcd-druid v0.9.0 ## explicit; go 1.17 github.com/gardener/etcd-druid/api/v1alpha1 # github.com/gardener/external-dns-management v0.7.18